Re: [PATCH v2 05/17] octeontx2-af: Config NPC KPU engines with parser profile

2018-10-26 Thread Arnd Bergmann
On 10/22/18, sunil.kovv...@gmail.com  wrote:
> From: Sunil Goutham 
>

> +struct npc_kpu_action0 {
> +#if defined(__BIG_ENDIAN_BITFIELD)
> + u64 rsvd_63_57 : 7;
> + u64 byp_count  : 3;
> + u64 capture_ena: 1;
> + u64 parse_done : 1;
> + u64 next_state : 8;
> + u64 rsvd_43: 1;
> + u64 capture_lid: 3;

This looks like it again introduces a problem on bit-endian kernels,
since you have fields that span multiple bytes. Could you rewrite
it to avoid the use of bitfields?

Arnd


[PATCH v2 05/17] octeontx2-af: Config NPC KPU engines with parser profile

2018-10-22 Thread sunil . kovvuri
From: Sunil Goutham 

This patch configures all 16 KPUs and iKPU (pkinds) with
the KPU parser profile defined in npc_profile.h. Each KPU
engine has a 128 entry CAM, only CAM entries which are listed
in the profile are enabled and rest are left disabled.

Also
- Memory is allocated for pkind's bitmap and PFFUNC, interface
  channel mapping.
- Added all CSR offsets of NPC HW block.

Signed-off-by: Sunil Goutham 
---
 drivers/net/ethernet/marvell/octeontx2/af/Makefile |   2 +-
 drivers/net/ethernet/marvell/octeontx2/af/npc.h| 100 ++
 drivers/net/ethernet/marvell/octeontx2/af/rvu.c|   8 +
 drivers/net/ethernet/marvell/octeontx2/af/rvu.h|  12 ++
 .../net/ethernet/marvell/octeontx2/af/rvu_npc.c| 203 +
 .../net/ethernet/marvell/octeontx2/af/rvu_reg.h|  61 +++
 6 files changed, 385 insertions(+), 1 deletion(-)
 create mode 100644 drivers/net/ethernet/marvell/octeontx2/af/rvu_npc.c

diff --git a/drivers/net/ethernet/marvell/octeontx2/af/Makefile 
b/drivers/net/ethernet/marvell/octeontx2/af/Makefile
index 264cbd7..06329ac 100644
--- a/drivers/net/ethernet/marvell/octeontx2/af/Makefile
+++ b/drivers/net/ethernet/marvell/octeontx2/af/Makefile
@@ -8,4 +8,4 @@ obj-$(CONFIG_OCTEONTX2_AF) += octeontx2_af.o
 
 octeontx2_mbox-y := mbox.o
 octeontx2_af-y := cgx.o rvu.o rvu_cgx.o rvu_npa.o rvu_nix.o \
- rvu_reg.o
+ rvu_reg.o rvu_npc.o
diff --git a/drivers/net/ethernet/marvell/octeontx2/af/npc.h 
b/drivers/net/ethernet/marvell/octeontx2/af/npc.h
index 3e7ec10..58d8f0b 100644
--- a/drivers/net/ethernet/marvell/octeontx2/af/npc.h
+++ b/drivers/net/ethernet/marvell/octeontx2/af/npc.h
@@ -140,4 +140,104 @@ struct npc_kpu_profile {
struct npc_kpu_profile_action *action;
 };
 
+/* NPC KPU register formats */
+struct npc_kpu_cam {
+#if defined(__BIG_ENDIAN_BITFIELD)
+   u64 rsvd_63_56 : 8;
+   u64 state  : 8;
+   u64 dp2_data   : 16;
+   u64 dp1_data   : 16;
+   u64 dp0_data   : 16;
+#else
+   u64 dp0_data   : 16;
+   u64 dp1_data   : 16;
+   u64 dp2_data   : 16;
+   u64 state  : 8;
+   u64 rsvd_63_56 : 8;
+#endif
+};
+
+struct npc_kpu_action0 {
+#if defined(__BIG_ENDIAN_BITFIELD)
+   u64 rsvd_63_57 : 7;
+   u64 byp_count  : 3;
+   u64 capture_ena: 1;
+   u64 parse_done : 1;
+   u64 next_state : 8;
+   u64 rsvd_43: 1;
+   u64 capture_lid: 3;
+   u64 capture_ltype  : 4;
+   u64 capture_flags  : 8;
+   u64 ptr_advance: 8;
+   u64 var_len_offset : 8;
+   u64 var_len_mask   : 8;
+   u64 var_len_right  : 1;
+   u64 var_len_shift  : 3;
+#else
+   u64 var_len_shift  : 3;
+   u64 var_len_right  : 1;
+   u64 var_len_mask   : 8;
+   u64 var_len_offset : 8;
+   u64 ptr_advance: 8;
+   u64 capture_flags  : 8;
+   u64 capture_ltype  : 4;
+   u64 capture_lid: 3;
+   u64 rsvd_43: 1;
+   u64 next_state : 8;
+   u64 parse_done : 1;
+   u64 capture_ena: 1;
+   u64 byp_count  : 3;
+   u64 rsvd_63_57 : 7;
+#endif
+};
+
+struct npc_kpu_action1 {
+#if defined(__BIG_ENDIAN_BITFIELD)
+   u64 rsvd_63_36 : 28;
+   u64 errlev : 4;
+   u64 errcode: 8;
+   u64 dp2_offset : 8;
+   u64 dp1_offset : 8;
+   u64 dp0_offset : 8;
+#else
+   u64 dp0_offset : 8;
+   u64 dp1_offset : 8;
+   u64 dp2_offset : 8;
+   u64 errcode: 8;
+   u64 errlev : 4;
+   u64 rsvd_63_36 : 28;
+#endif
+};
+
+struct npc_kpu_pkind_cpi_def {
+#if defined(__BIG_ENDIAN_BITFIELD)
+   u64 ena: 1;
+   u64 rsvd_62_59 : 4;
+   u64 lid: 3;
+   u64 ltype_match: 4;
+   u64 ltype_mask : 4;
+   u64 flags_match: 8;
+   u64 flags_mask : 8;
+   u64 add_offset : 8;
+   u64 add_mask   : 8;
+   u64 rsvd_15: 1;
+   u64 add_shift  : 3;
+   u64 rsvd_11_10 : 2;
+   u64 cpi_base   : 10;
+#else
+   u64 cpi_base   : 10;
+   u64 rsvd_11_10 : 2;
+   u64 add_shift  : 3;
+   u64 rsvd_15: 1;
+   u64 add_mask   : 8;
+   u64 add_offset : 8;
+   u64 flags_mask : 8;
+   u64 flags_match: 8;
+   u64 ltype_mask : 4;
+   u64 ltype_match: 4;
+   u64 lid: 3;
+   u64 rsvd_62_59 : 4;
+   u64 ena: 1;
+#endif
+};
 #endif /* NPC_H */
diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu.c 
b/drivers/net/ethernet/marvell/octeontx2/af/rvu.c
index 9594432..3cb7f76 100644
--- a/drivers/net/ethernet/marvell/octeontx2/af/rvu.c
+++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu.c
@@ -180,6 +180,9 @@ int rvu_get_blkaddr(struct rvu *rvu, int blktype, u16 
pcifunc)
bool is_pf;
 
switch (blktype) {
+   case