Octeontx2-af: Fetch MAC channel info from firmware
authorHariprasad Kelam <hkelam@marvell.com>
Mon, 12 Feb 2024 13:15:23 +0000 (18:45 +0530)
committerDavid S. Miller <davem@davemloft.net>
Wed, 14 Feb 2024 10:35:25 +0000 (10:35 +0000)
Packet ingress and egress MAC/serdes channel numbers are configurable
on CN10K series of silicons. These channel numbers inturn used while
installing MCAM rules to match ingress/egress port. Fetch these channel
numbers from firmware at driver init time.

Signed-off-by: Hariprasad Kelam <hkelam@marvell.com>
Signed-off-by: Sunil Kovvuri Goutham <sgoutham@marvell.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/marvell/octeontx2/af/rvu.h
drivers/net/ethernet/marvell/octeontx2/af/rvu_sdp.c

index a1d5fc65b92d4ca2b1dccf1720fb8be25125e198..de8eba902276446d2bd2fc1544f3eadf19a937f1 100644 (file)
@@ -443,6 +443,13 @@ struct mbox_wq_info {
        struct workqueue_struct *mbox_wq;
 };
 
+struct channel_fwdata {
+       struct sdp_node_info info;
+       u8 valid;
+#define RVU_CHANL_INFO_RESERVED        379
+       u8 reserved[RVU_CHANL_INFO_RESERVED];
+};
+
 struct rvu_fwdata {
 #define RVU_FWDATA_HEADER_MAGIC        0xCFDA  /* Custom Firmware Data*/
 #define RVU_FWDATA_VERSION     0x0001
@@ -461,7 +468,8 @@ struct rvu_fwdata {
        u64 msixtr_base;
        u32 ptp_ext_clk_rate;
        u32 ptp_ext_tstamp;
-#define FWDATA_RESERVED_MEM 1022
+       struct channel_fwdata channel_data;
+#define FWDATA_RESERVED_MEM 1014
        u64 reserved[FWDATA_RESERVED_MEM];
 #define CGX_MAX         9
 #define CGX_LMACS_MAX   4
index 1edfda0ae3e8823004831838181fbbf03cd135d8..38cfe148f4b74895169eb09040724a6a27932516 100644 (file)
@@ -56,6 +56,14 @@ int rvu_sdp_init(struct rvu *rvu)
        struct rvu_pfvf *pfvf;
        u32 i = 0;
 
+       if (rvu->fwdata->channel_data.valid) {
+               sdp_pf_num[0] = 0;
+               pfvf = &rvu->pf[sdp_pf_num[0]];
+               pfvf->sdp_info = &rvu->fwdata->channel_data.info;
+
+               return 0;
+       }
+
        while ((i < MAX_SDP) && (pdev = pci_get_device(PCI_VENDOR_ID_CAVIUM,
                                                       PCI_DEVID_OTX2_SDP_PF,
                                                       pdev)) != NULL) {