ソースを参照

msm: ipahal: add uC activation registers and ucp structs

Add relevant structs and functions to modify the
address registers for NAT uC and conntrack UC
for external, local, and shared activation tables.
Add ucp fields to ipv4 nat and ipv6ct entries.

Change-Id: Iadb3232fb45052b643bbf36bc48043df8619d2fb
Signed-off-by: Michael Adisumarta <[email protected]>
Michael Adisumarta 5 年 前
コミット
183e1fedd4

+ 55 - 2
drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_nat.c

@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/debugfs.h>
@@ -135,11 +135,32 @@ static int ipa_nat_ipv4_stringify_entry_v_4_0(const void *entry,
 	length = ipa_nat_ipv4_stringify_entry_v_3_0(entry, buff, buff_size);
 
 	length += scnprintf(buff + length, buff_size - length,
-		"\t\tPDN_Index=%d\n", nat_entry->pdn_index);
+		"\t\tPDN_Index=%d\n",
+		nat_entry->pdn_index);
 
 	return length;
 }
 
+
+static int ipa_nat_ipv4_stringify_entry_v_4_5(const void *entry,
+	char *buff, size_t buff_size)
+{
+	int length;
+	const struct ipa_nat_hw_ipv4_entry *nat_entry =
+		(const struct ipa_nat_hw_ipv4_entry *)entry;
+
+	length = ipa_nat_ipv4_stringify_entry_v_4_0(entry, buff, buff_size);
+
+	length += scnprintf(buff + length, buff_size - length,
+		"\t\tucp=%s address=%s uc_activation_index=%d\n",
+		(nat_entry->ucp) ? "Enabled" : "Disabled",
+		(nat_entry->s) ? "System" : "Local",
+		nat_entry->uc_activation_index);
+
+	return length;
+}
+
+
 static int ipa_nat_ipv4_index_stringify_entry_v_3_0(const void *entry,
 	char *buff, size_t buff_size)
 {
@@ -217,6 +238,24 @@ static int ipa_nat_ipv6ct_stringify_entry_v_4_0(const void *entry,
 	return length;
 }
 
+static int ipa_nat_ipv6ct_stringify_entry_v_4_5(const void *entry,
+	char *buff, size_t buff_size)
+{
+	int length;
+	const struct ipa_nat_hw_ipv4_entry *nat_entry =
+		(const struct ipa_nat_hw_ipv4_entry *)entry;
+
+	length = ipa_nat_ipv6ct_stringify_entry_v_4_0(entry, buff, buff_size);
+
+	length += scnprintf(buff + length, buff_size - length,
+		"\t\tucp=%s address=%s uc_activation_index=%d\n",
+		(nat_entry->ucp) ? "Enabled" : "Disabled",
+		(nat_entry->s) ? "System" : "Local",
+		nat_entry->uc_activation_index);
+
+	return length;
+}
+
 static void ipa_nat_ipv4_pdn_construct_entry_v_4_0(const void *fields,
 	u32 *address)
 {
@@ -311,6 +350,20 @@ static struct ipahal_nat_obj ipahal_nat_objs[IPA_HW_MAX][IPA_NAT_MAX] = {
 			ipa_nat_ipv6ct_is_entry_zeroed_v_4_0,
 			ipa_nat_ipv6ct_is_entry_valid_v_4_0,
 			ipa_nat_ipv6ct_stringify_entry_v_4_0
+		},
+
+	/* IPAv4.5 */
+	[IPA_HW_v4_5][IPAHAL_NAT_IPV4] = {
+			ipa_nat_ipv4_entry_size_v_3_0,
+			ipa_nat_ipv4_is_entry_zeroed_v_3_0,
+			ipa_nat_ipv4_is_entry_valid_v_3_0,
+			ipa_nat_ipv4_stringify_entry_v_4_5
+		},
+	[IPA_HW_v4_5][IPAHAL_NAT_IPV6CT] = {
+			ipa_nat_ipv6ct_entry_size_v_4_0,
+			ipa_nat_ipv6ct_is_entry_zeroed_v_4_0,
+			ipa_nat_ipv6ct_is_entry_valid_v_4_0,
+			ipa_nat_ipv6ct_stringify_entry_v_4_5
 		}
 };
 

+ 48 - 11
drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_nat_i.h

@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 /*
- * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
  */
 
 #ifndef _IPAHAL_NAT_I_H_
@@ -18,7 +18,7 @@
  * |Target Port(2B) |Private Port(2B)| Public Port(2B) | Next Index(2B)  |
  * -----------------------------------------------------------------------
  * |Proto|      TimeStamp(3B)        |     Flags(2B)   |IP check sum Diff|
- * |(1B) |                           |EN|Redirect|Resv |        (2B)     |
+ * |(1B) |                           |                 |        (2B)     |
  * -----------------------------------------------------------------------
  * |TCP/UDP checksum|  PDN info(2B)  |    SW Specific Parameters(4B)     |
  * |    diff (2B)   |Info|Resv       |index table entry|  prev index     |
@@ -35,17 +35,45 @@ struct ipa_nat_hw_ipv4_entry {
 	u32 target_port : 16;
 	u32 ip_chksum : 16;
 
-	u32 rsvd1 : 14;
+	/*---------------------------------------------------
+	 *IPA NAT Flag is interpreted as follows
+	 *---------------------------------------------------
+	 *|  EN   |FIN/RST|  S   | IPv4 uC activation index |
+	 *| [15]  | [14]  | [13] |          [12:0]          |
+	 *---------------------------------------------------
+	 */
+	u32 uc_activation_index: 13;
+	u32 s : 1;
 	u32 redirect : 1;
 	u32 enable : 1;
 
 	u32 time_stamp : 24;
 	u32 protocol : 8;
 
+	/*--------------------------------------------------
+	 *32 bit sw_spec_params is interpreted as follows
+	 *------------------------------------
+	 *|     16 bits     |     16 bits    |
+	 *------------------------------------
+	 *|  index table    |  prev index    |
+	 *|     entry       |                |
+	 *------------------------------------
+	 */
 	u32 prev_index : 16;
 	u32 indx_tbl_entry : 16;
 
-	u32 rsvd2 : 12;
+	u32 rsvd2 : 11; //including next 3 reserved buts
+
+	/*-----------------------------------------
+	 *8 bit PDN info is interpreted as following
+	 *-----------------------------------------------------
+	 *|     4 bits      |     1 bit      |     3 bits     |
+	 *-----------------------------------------------------
+	 *|  PDN index      |  uC processing |     Reserved   |
+	 *|      [7:4]      |       [3]      |      [2:0]     |
+	 *-----------------------------------------------------
+	 */
+	u32 ucp : 1; /* IPA 4.0 and greater */
 	u32 pdn_index : 4; /* IPA 4.0 and greater */
 
 	u32 tcp_udp_chksum : 16;
@@ -90,7 +118,7 @@ struct ipa_nat_hw_pdn_entry {
 
 /*-------------------------  IPV6CT Table Entry  ------------------------------
  *-----------------------------------------------------------------------------
- *|   7    |      6      |  5  |  4   |        3         |  2  |   1  |   0   |
+ *|   7    |      6      |  5  |  4   |      3      |   2   |   1    |   0    |
  *-----------------------------------------------------------------------------
  *|                   Outbound Src IPv6 Address (8 LSB Bytes)                 |
  *-----------------------------------------------------------------------------
@@ -100,17 +128,23 @@ struct ipa_nat_hw_pdn_entry {
  *-----------------------------------------------------------------------------
  *|                   Outbound Dest IPv6 Address (8 MSB Bytes)                |
  *-----------------------------------------------------------------------------
- *|Protocol|      TimeStamp (3B)      |       Flags (2B)       |Reserved (2B) |
- *|  (1B)  |                          |Enable|Redirect|Resv    |              |
+ *|Protocol|      TimeStamp (3B)      |       Flags (2B)    |Rsvd   |S |uC ACT|
+ *|  (1B)  |                          |Enable|Redirect|Resv |[15:14]|13|[12:0]|
  *-----------------------------------------------------------------------------
- *|Reserved|Direction(1B)|Src Port(2B)|     Dest Port (2B)     |Next Index(2B)|
- *|  (1B)  |IN|OUT|Resv  |            |                        |              |
+ *|Reserved|Settings|    Src Port(2B) |   Dest Port (2B)    |  Next Index(2B) |
+ *|  (1B)  |  (1B)  |                 |                     |                 |
  *-----------------------------------------------------------------------------
  *|    SW Specific Parameters(4B)     |                Reserved (4B)          |
  *|    Prev Index (2B)   |Reserved(2B)|                                       |
  *-----------------------------------------------------------------------------
  *|                            Reserved (8B)                                  |
  *-----------------------------------------------------------------------------
+ *
+ * Settings
+ *-----------------------------------------------
+ *|IN Allowed|OUT Allowed|Reserved|uC processing|
+ *|[7:7]     |[6:6]      |[5:1]   |[0:0]        |
+ *-----------------------------------------------
  */
 struct ipa_nat_hw_ipv6ct_entry {
 	/* An IP address can't be bit-field, because its address is used */
@@ -119,7 +153,9 @@ struct ipa_nat_hw_ipv6ct_entry {
 	u64 dest_ipv6_lsb;
 	u64 dest_ipv6_msb;
 
-	u64 rsvd1 : 30;
+	u64 uc_activation_index : 13;
+	u64 s : 1;
+	u64 rsvd1 : 16;
 	u64 redirect : 1;
 	u64 enable : 1;
 
@@ -129,7 +165,8 @@ struct ipa_nat_hw_ipv6ct_entry {
 	u64 next_index : 16;
 	u64 dest_port : 16;
 	u64 src_port : 16;
-	u64 rsvd2 : 6;
+	u64 ucp : 1;
+	u64 rsvd2 : 5;
 	u64 out_allowed : 1;
 	u64 in_allowed : 1;
 	u64 rsvd3 : 8;

+ 200 - 0
drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_reg.c

@@ -157,6 +157,12 @@ static const char *ipareg_name_to_str[IPA_REG_MAX] = {
 	__stringify(IPA_FILT_ROUT_CACHE_FLUSH),
 	__stringify(IPA_FILTER_CACHE_CFG_n),
 	__stringify(IPA_ROUTER_CACHE_CFG_n),
+	__stringify(IPA_NAT_UC_EXTERNAL_CFG),
+	__stringify(IPA_NAT_UC_LOCAL_CFG),
+	__stringify(IPA_NAT_UC_SHARED_CFG),
+	__stringify(IPA_CONN_TRACK_UC_EXTERNAL_CFG),
+	__stringify(IPA_CONN_TRACK_UC_LOCAL_CFG),
+	__stringify(IPA_CONN_TRACK_UC_SHARED_CFG)
 };
 
 static void ipareg_construct_dummy(enum ipahal_reg_name reg,
@@ -3116,6 +3122,176 @@ static void ipareg_parse_ipa_flavor_0(enum ipahal_reg_name reg,
 		IPA_FLAVOR_0_IPA_PROD_LOWEST_BMSK);
 }
 
+static void ipareg_construct_nat_uc_external_cfg(enum ipahal_reg_name reg,
+	const void *fields, u32 *val)
+{
+	struct ipahal_reg_nat_uc_external_cfg *nat_uc_external_cfg =
+		(struct ipahal_reg_nat_uc_external_cfg *)fields;
+
+	IPA_SETFIELD_IN_REG(*val,
+		nat_uc_external_cfg->nat_uc_external_table_addr_lsb,
+		IPA_NAT_UC_EXTERNAL_CFG_SHFT, IPA_NAT_UC_EXTERNAL_CFG_BMSK);
+}
+
+static void ipareg_parse_nat_uc_external_cfg(enum ipahal_reg_name reg,
+	void *fields, u32 val)
+{
+	struct ipahal_reg_nat_uc_external_cfg *nat_uc_external_cfg =
+		(struct ipahal_reg_nat_uc_external_cfg *)fields;
+
+	memset(nat_uc_external_cfg, 0, sizeof(*nat_uc_external_cfg));
+
+	nat_uc_external_cfg->nat_uc_external_table_addr_lsb =
+		IPA_GETFIELD_FROM_REG(val, IPA_NAT_UC_EXTERNAL_CFG_SHFT,
+			IPA_NAT_UC_EXTERNAL_CFG_BMSK);
+}
+
+static void ipareg_construct_nat_uc_local_cfg(enum ipahal_reg_name reg,
+	const void *fields, u32 *val)
+{
+	struct ipahal_reg_nat_uc_local_cfg *nat_uc_local_cfg =
+		(struct ipahal_reg_nat_uc_local_cfg *)fields;
+
+	IPA_SETFIELD_IN_REG(*val, nat_uc_local_cfg->nat_uc_local_table_addr_lsb,
+		IPA_NAT_UC_LOCAL_CFG_SHFT, IPA_NAT_UC_LOCAL_CFG_BMSK);
+}
+
+static void ipareg_parse_nat_uc_local_cfg(enum ipahal_reg_name reg,
+	void *fields, u32 val)
+{
+	struct ipahal_reg_nat_uc_local_cfg *nat_uc_local_cfg =
+		(struct ipahal_reg_nat_uc_local_cfg *)fields;
+
+	memset(nat_uc_local_cfg, 0, sizeof(*nat_uc_local_cfg));
+
+	nat_uc_local_cfg->nat_uc_local_table_addr_lsb =
+		IPA_GETFIELD_FROM_REG(val, IPA_NAT_UC_LOCAL_CFG_SHFT,
+			IPA_NAT_UC_LOCAL_CFG_BMSK);
+}
+
+static void ipareg_construct_nat_uc_shared_cfg(enum ipahal_reg_name reg,
+	const void *fields, u32 *val)
+{
+	struct ipahal_reg_nat_uc_shared_cfg *nat_uc_shared_cfg =
+		(struct ipahal_reg_nat_uc_shared_cfg *)fields;
+
+	IPA_SETFIELD_IN_REG(*val,
+		nat_uc_shared_cfg->nat_uc_local_table_addr_msb,
+		IPA_NAT_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_SHFT,
+		IPA_NAT_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_BMSK);
+
+	IPA_SETFIELD_IN_REG(*val,
+		nat_uc_shared_cfg->nat_uc_external_table_addr_msb,
+		IPA_NAT_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_SHFT,
+		IPA_NAT_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_BMSK);
+}
+
+static void ipareg_parse_nat_uc_shared_cfg(enum ipahal_reg_name reg,
+	void *fields, u32 val)
+{
+	struct ipahal_reg_nat_uc_shared_cfg *nat_uc_shared_cfg =
+		(struct ipahal_reg_nat_uc_shared_cfg *)fields;
+
+	memset(nat_uc_shared_cfg, 0, sizeof(*nat_uc_shared_cfg));
+
+	nat_uc_shared_cfg->nat_uc_local_table_addr_msb =
+		IPA_GETFIELD_FROM_REG(val,
+			IPA_NAT_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_SHFT,
+			IPA_NAT_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_BMSK);
+
+	nat_uc_shared_cfg->nat_uc_external_table_addr_msb =
+		IPA_GETFIELD_FROM_REG(val,
+			IPA_NAT_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_SHFT,
+			IPA_NAT_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_BMSK);
+}
+
+static void ipareg_construct_conn_track_uc_external_cfg
+	(enum ipahal_reg_name reg, const void *fields, u32 *val)
+{
+	struct ipahal_reg_conn_track_uc_external_cfg *conn_track_uc_external_cfg
+		= (struct ipahal_reg_conn_track_uc_external_cfg *)fields;
+
+	IPA_SETFIELD_IN_REG(*val,
+	conn_track_uc_external_cfg->conn_track_uc_external_table_addr_lsb,
+		IPA_CONN_TRACK_UC_EXTERNAL_CFG_SHFT,
+		IPA_CONN_TRACK_UC_EXTERNAL_CFG_BMSK);
+}
+
+static void ipareg_parse_conn_track_uc_external_cfg(enum ipahal_reg_name reg,
+	void *fields, u32 val)
+{
+	struct ipahal_reg_conn_track_uc_external_cfg *conn_track_uc_external_cfg
+		= (struct ipahal_reg_conn_track_uc_external_cfg *)fields;
+
+	memset(conn_track_uc_external_cfg, 0,
+		sizeof(*conn_track_uc_external_cfg));
+
+	conn_track_uc_external_cfg->conn_track_uc_external_table_addr_lsb =
+		IPA_GETFIELD_FROM_REG(val, IPA_CONN_TRACK_UC_EXTERNAL_CFG_SHFT,
+			IPA_CONN_TRACK_UC_EXTERNAL_CFG_BMSK);
+}
+
+static void ipareg_construct_conn_track_uc_local_cfg(enum ipahal_reg_name reg,
+	const void *fields, u32 *val)
+{
+	struct ipahal_reg_conn_track_uc_local_cfg *conn_track_uc_local_cfg =
+		(struct ipahal_reg_conn_track_uc_local_cfg *)fields;
+
+	IPA_SETFIELD_IN_REG(*val,
+		conn_track_uc_local_cfg->conn_track_uc_local_table_addr_lsb,
+		IPA_CONN_TRACK_UC_LOCAL_CFG_SHFT,
+		IPA_CONN_TRACK_UC_LOCAL_CFG_BMSK);
+}
+
+static void ipareg_parse_conn_track_uc_local_cfg(enum ipahal_reg_name reg,
+	void *fields, u32 val)
+{
+	struct ipahal_reg_conn_track_uc_local_cfg *conn_track_uc_local_cfg =
+		(struct ipahal_reg_conn_track_uc_local_cfg *)fields;
+
+	memset(conn_track_uc_local_cfg, 0, sizeof(*conn_track_uc_local_cfg));
+
+	conn_track_uc_local_cfg->conn_track_uc_local_table_addr_lsb =
+		IPA_GETFIELD_FROM_REG(val, IPA_CONN_TRACK_UC_LOCAL_CFG_SHFT,
+			IPA_CONN_TRACK_UC_LOCAL_CFG_BMSK);
+}
+
+static void ipareg_construct_conn_track_uc_shared_cfg(enum ipahal_reg_name reg,
+	const void *fields, u32 *val)
+{
+	struct ipahal_reg_conn_track_uc_shared_cfg *conn_track_uc_shared_cfg =
+		(struct ipahal_reg_conn_track_uc_shared_cfg *)fields;
+
+	IPA_SETFIELD_IN_REG(*val,
+		conn_track_uc_shared_cfg->conn_track_uc_local_table_addr_msb,
+		IPA_CONN_TRACK_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_SHFT,
+		IPA_CONN_TRACK_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_BMSK);
+
+	IPA_SETFIELD_IN_REG(*val,
+		conn_track_uc_shared_cfg->conn_track_uc_external_table_addr_msb,
+		IPA_CONN_TRACK_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_SHFT,
+		IPA_CONN_TRACK_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_BMSK);
+}
+
+static void ipareg_parse_conn_track_uc_shared_cfg(enum ipahal_reg_name reg,
+	void *fields, u32 val)
+{
+	struct ipahal_reg_conn_track_uc_shared_cfg *conn_track_uc_shared_cfg =
+		(struct ipahal_reg_conn_track_uc_shared_cfg *)fields;
+
+	memset(conn_track_uc_shared_cfg, 0, sizeof(*conn_track_uc_shared_cfg));
+
+	conn_track_uc_shared_cfg->conn_track_uc_local_table_addr_msb =
+		IPA_GETFIELD_FROM_REG(val,
+			IPA_CONN_TRACK_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_SHFT,
+			IPA_CONN_TRACK_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_BMSK);
+
+	conn_track_uc_shared_cfg->conn_track_uc_external_table_addr_msb =
+		IPA_GETFIELD_FROM_REG(val,
+		IPA_CONN_TRACK_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_SHFT,
+		IPA_CONN_TRACK_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_BMSK);
+}
+
 /*
  * struct ipahal_reg_obj - Register H/W information for specific IPA version
  * @construct - CB to construct register value from abstracted structure
@@ -3910,6 +4086,30 @@ static struct ipahal_reg_obj ipahal_reg_objs[IPA_HW_MAX][IPA_REG_MAX] = {
 	[IPA_HW_v4_5][IPA_COAL_QMAP_CFG] = {
 		ipareg_construct_coal_qmap_cfg, ipareg_parse_coal_qmap_cfg,
 		0x00001810, 0, 0, 0, 0, 0},
+	[IPA_HW_v4_5][IPA_NAT_UC_EXTERNAL_CFG] = {
+		ipareg_construct_nat_uc_external_cfg,
+		ipareg_parse_nat_uc_external_cfg,
+		0x00000200, 0, 0, 0, 0, 0},
+	[IPA_HW_v4_5][IPA_NAT_UC_LOCAL_CFG] = {
+		ipareg_construct_nat_uc_local_cfg,
+		ipareg_parse_nat_uc_local_cfg,
+		0x00000204, 0, 0, 0, 0, 0},
+	[IPA_HW_v4_5][IPA_NAT_UC_SHARED_CFG] = {
+		ipareg_construct_nat_uc_shared_cfg,
+		ipareg_parse_nat_uc_shared_cfg,
+		0x00000208, 0, 0, 0, 0, 0},
+	[IPA_HW_v4_5][IPA_CONN_TRACK_UC_EXTERNAL_CFG] = {
+		ipareg_construct_conn_track_uc_external_cfg,
+		ipareg_parse_conn_track_uc_external_cfg,
+		0x00000230, 0, 0, 0, 0, 0},
+	[IPA_HW_v4_5][IPA_CONN_TRACK_UC_LOCAL_CFG] = {
+		ipareg_construct_conn_track_uc_local_cfg,
+		ipareg_parse_conn_track_uc_local_cfg,
+		0x00000234, 0, 0, 0, 0, 0},
+	[IPA_HW_v4_5][IPA_CONN_TRACK_UC_SHARED_CFG] = {
+		ipareg_construct_conn_track_uc_shared_cfg,
+		ipareg_parse_conn_track_uc_shared_cfg,
+		0x00000238, 0, 0, 0, 0, 0},
 	[IPA_HW_v4_7][IPA_STATE_TX_WRAPPER] = {
 		ipareg_construct_dummy, ipareg_parse_state_tx_wrapper_v4_7,
 		0x00000090, 0, 0, 0, 1, 0},

+ 70 - 1
drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_reg.h

@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 /*
- * Copyright (c) 2012-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved.
  */
 
 #ifndef _IPAHAL_REG_H_
@@ -154,6 +154,12 @@ enum ipahal_reg_name {
 	IPA_FILT_ROUT_CACHE_FLUSH,
 	IPA_FILTER_CACHE_CFG_n,
 	IPA_ROUTER_CACHE_CFG_n,
+	IPA_NAT_UC_EXTERNAL_CFG,
+	IPA_NAT_UC_LOCAL_CFG,
+	IPA_NAT_UC_SHARED_CFG,
+	IPA_CONN_TRACK_UC_EXTERNAL_CFG,
+	IPA_CONN_TRACK_UC_LOCAL_CFG,
+	IPA_CONN_TRACK_UC_SHARED_CFG,
 	IPA_REG_MAX,
 };
 
@@ -745,6 +751,69 @@ struct ipahal_ipa_flavor_0 {
 	u8 ipa_prod_lowest;
 };
 
+/*
+ * struct ipahal_reg_nat_uc_local_cfg -  IPA_NAT_UC_EXTERNAL_CFG register
+ * @nat_uc_external_table_addr_lsb: 32 LSb bits of system-memory address of
+ * external UC-activation entry table.
+ */
+struct ipahal_reg_nat_uc_external_cfg {
+	u32 nat_uc_external_table_addr_lsb;
+};
+
+/*
+ * struct ipahal_reg_nat_uc_local_cfg - IPA_NAT_UC_LOCAL_CFG register
+ * @nat_uc_local_table_addr_lsb: 32 LSb bits of local address of local
+ * UC-activation entry table. Address is memory-map based,
+ * i.e. includes IPA address from chip level.
+ */
+struct ipahal_reg_nat_uc_local_cfg {
+	u32 nat_uc_local_table_addr_lsb;
+};
+
+/*
+ * struct ipahal_reg_nat_uc_shared_cfg -  IPA_NAT_UC_SHARED_CFG register
+ * @nat_uc_external_table_addr_msb: 16 MSb of external UC-ativation entry table.
+ * @nat_uc_local_table_addr_msb: 16 MSb bits of local UC-ativation entry table.
+ */
+struct ipahal_reg_nat_uc_shared_cfg {
+	u32 nat_uc_local_table_addr_msb;
+	u32 nat_uc_external_table_addr_msb;
+};
+
+/*
+ * struct ipahal_reg_conn_track_uc_local_cfg - IPA_conn_track_UC_EXTERNAL_CFG
+ * register
+ * @conn_track_uc_external_table_addr_lsb: 32 LSb bits of system-memory address
+ * of external UC-activation entry table.
+ */
+struct ipahal_reg_conn_track_uc_external_cfg {
+	u32 conn_track_uc_external_table_addr_lsb;
+};
+
+/*
+ * struct ipahal_reg_conn_track_uc_local_cfg - IPA_conn_track_UC_LOCAL_CFG
+ * register
+ * @conn_track_uc_local_table_addr_lsb: 32 LSb bits of local address of local
+ * UC-activation entry table. Address is memory-map based,
+ * i.e. includes IPA address from chip level.
+ */
+struct ipahal_reg_conn_track_uc_local_cfg {
+	u32 conn_track_uc_local_table_addr_lsb;
+};
+
+/*
+ * struct ipahal_reg_conn_track_uc_shared_cfg -  IPA_conn_track_UC_SHARED_CFG
+ * register
+ * @conn_track_uc_external_table_addr_msb: 16 MSb of external UC-ativation
+ * entry table.
+ * @conn_track_uc_local_table_addr_msb: 16 MSb bits of local UC-ativation
+ * entry table.
+ */
+struct ipahal_reg_conn_track_uc_shared_cfg {
+	u16 conn_track_uc_local_table_addr_msb;
+	u16 conn_track_uc_external_table_addr_msb;
+};
+
 /*
  * ipahal_print_all_regs() - Loop and read and print all the valid registers
  *  Parameterized registers are also printed for all the valid ranges.

+ 16 - 1
drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_reg_i.h

@@ -712,7 +712,22 @@ int ipahal_reg_init(enum ipa_hw_type ipa_hw_type);
 #define IPA_COAL_EVICTION_EN_SHFT 0
 #define IPA_COAL_QMAP_CFG_BMSK 0x1
 #define IPA_COAL_QMAP_CFG_SHFT 0
-
+#define IPA_NAT_UC_EXTERNAL_CFG_BMSK 0xFFFFFFFF
+#define IPA_NAT_UC_EXTERNAL_CFG_SHFT 0
+#define IPA_NAT_UC_LOCAL_CFG_BMSK 0xFFFFFFFF
+#define IPA_NAT_UC_LOCAL_CFG_SHFT 0
+#define IPA_NAT_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_BMSK 0xFFFF0000
+#define IPA_NAT_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_SHFT 16
+#define IPA_NAT_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_BMSK 0x0000FFFF
+#define IPA_NAT_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_SHFT 0
+#define IPA_CONN_TRACK_UC_EXTERNAL_CFG_BMSK 0xFFFFFFFF
+#define IPA_CONN_TRACK_UC_EXTERNAL_CFG_SHFT 0
+#define IPA_CONN_TRACK_UC_LOCAL_CFG_BMSK 0xFFFFFFFF
+#define IPA_CONN_TRACK_UC_LOCAL_CFG_SHFT 0
+#define IPA_CONN_TRACK_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_BMSK 0xFFFF0000
+#define IPA_CONN_TRACK_UC_SHARED_CFG_LOCAL_TABLE_ADDR_MSB_SHFT 16
+#define IPA_CONN_TRACK_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_BMSK 0x0000FFFF
+#define IPA_CONN_TRACK_UC_SHARED_CFG_EXTERNAL_TABLE_ADDR_MSB_SHFT 0
 #define IPA_STATE_TX_WRAPPER_COAL_SLAVE_OPEN_FRAME_BMSK 0xf0000000
 #define IPA_STATE_TX_WRAPPER_COAL_SLAVE_OPEN_FRAME_SHFT 0x1f
 #define IPA_STATE_TX_WRAPPER_COAL_SLAVE_CTX_IDLE_BMSK 0x100000