net/axgbe: add register dump support
PATCH 1/1 net/axgbe: add register dump support
From: Chandu Babu N <[email protected]>
Implement "get_reg" eth_dev_ops for axgbe
--- drivers/net/axgbe/axgbe_common.h | 3 + drivers/net/axgbe/axgbe_ethdev.c | 25 ++++ drivers/net/axgbe/axgbe_regs.h | 229 +++++++++++++++++++++++++++++++ 3 files changed, 257 insertions(+) create mode 100644 drivers/net/axgbe/axgbe_regs.h
drivers/net/axgbe/axgbe_common.h +3 -0
@@ -289,6 +289,9 @@#define MAC_RQC2_INC 4#define MAC_RQC2_Q_PER_REG 4 +#define MAC_MACAHR (i) (MAC_MACA0HR + ((i) * 8)) +#define MAC_MACALR (i) (MAC_MACA0LR + ((i) * 8)) +/* MAC register entry bit positions and sizes */ #define MAC_HWF0R_ADDMACADRSEL_INDEX 18#define MAC_HWF0R_ADDMACADRSEL_WIDTH 5
drivers/net/axgbe/axgbe_ethdev.c +25 -0
@@ -7,6 +7,7 @@#include "axgbe_ethdev.h" #include "axgbe_common.h" #include "axgbe_phy.h" +#include "axgbe_regs.h" static int eth_axgbe_dev_init (struct rte_eth_dev *eth_dev);static int eth_axgbe_dev_uninit (struct rte_eth_dev *eth_dev);
@@ -21,6 +22,8 @@ static int axgbe_dev_allmulticast_enable(struct rte_eth_dev *dev);static int axgbe_dev_allmulticast_disable (struct rte_eth_dev *dev);static int axgbe_dev_link_update (struct rte_eth_dev *dev,int wait_to_complete); +static int axgbe_dev_get_regs (struct rte_eth_dev *dev, +struct rte_dev_reg_info *regs);static int axgbe_dev_stats_get (struct rte_eth_dev *dev,struct rte_eth_stats *stats);static int axgbe_dev_stats_reset (struct rte_eth_dev *dev);
@@ -158,6 +161,7 @@ static const struct eth_dev_ops axgbe_eth_dev_ops = { .allmulticast_enable = axgbe_dev_allmulticast_enable, .allmulticast_disable = axgbe_dev_allmulticast_disable, .link_update = axgbe_dev_link_update, + .get_reg = axgbe_dev_get_regs, .stats_get = axgbe_dev_stats_get, .stats_reset = axgbe_dev_stats_reset, .xstats_get = axgbe_dev_xstats_get,
@@ -393,6 +397,27 @@ axgbe_dev_link_update(struct rte_eth_dev *dev,return ret; } +static int +axgbe_dev_get_regs (struct rte_eth_dev *dev,struct rte_dev_reg_info *regs) +{ +struct axgbe_port *pdata = dev->data->dev_private; + +if (regs->data ==NULL ) { + regs->length =axgbe_regs_get_count (pdata); + regs->width =sizeof (uint32_t ); +return 0 ; + } + +/* Only full register dump is supported */ +if (regs->length && + regs->length != (uint32_t )axgbe_regs_get_count (pdata)) +return -ENOTSUP ; + + regs->version = pdata->pci_dev->id.vendor_id <<16 | + pdata->pci_dev->id.device_id; +axgbe_regs_dump (pdata, regs->data); +return 0 ; +}static void axgbe_read_mmc_stats (struct axgbe_port *pdata) {struct axgbe_mmc_stats *stats = &pdata->mmc_stats;
drivers/net/axgbe/axgbe_regs.h new file +229 -0
229 lines not on this page · raw message
Signature · 1 line
2.17.1
[AMD Official Use Only - Internal Distribution Only]
Quoted 318 lines
-----Original Message-----
From: Namburu, Chandu-babu <[email protected]>
Sent: Tuesday, February 11, 2020 3:58 PM
To: [email protected]
Cc: Kumar, Ravi1 <[email protected]>; Somalapuram, Amaranath <[email protected]>
Subject: [PATCH v1] net/axgbe: add register dump supportFrom: Chandu Babu N <[email protected]>
Implement "
get_reg"eth_dev_opsfor axgbeSigned-off-by Chandu Babu N <[email protected]>---
drivers/net/axgbe/axgbe_common.h | 3 + drivers/net/axgbe/axgbe_ethdev.c | 25 ++++ drivers/net/axgbe/axgbe_regs.h | 229 +++++++++++++++++++++++++++++++ 3 files changed, 257 insertions(+)create mode 100644
drivers/net/axgbe/axgbe_regs.hdrivers/net/axgbe/axgbe_common.h +3
-0@@ -289,6 +289,9 @@#define MAC_RQC2_INC 4#define MAC_RQC2_Q_PER_REG 4 +#define MAC_MACAHR (i) (MAC_MACA0HR + ((i) * 8)) +#define MAC_MACALR (i) (MAC_MACA0LR + ((i) * 8)) +/* MAC register entry bit positions and sizes */ #define MAC_HWF0R_ADDMACADRSEL_INDEX 18#define MAC_HWF0R_ADDMACADRSEL_WIDTH 5drivers/net/axgbe/axgbe_ethdev.c +3
-0@@ -7,6 +7,7 @@#include "axgbe_ethdev.h" #include "axgbe_common.h" #include "axgbe_phy.h" +#include "axgbe_regs.h" static int eth_axgbe_dev_init(struct rte_eth_dev *eth_dev); static int eth_axgbe_dev_uninit(struct rte_eth_dev *eth_dev); @@ -21,6 +22,8 @@ static int axgbe_dev_allmulticast_enable(struct rte_eth_dev *dev); static int axgbe_dev_allmulticast_disable(struct rte_eth_dev *dev); static int axgbe_dev_link_update(struct rte_eth_dev *dev,int wait_to_complete); +static int axgbe_dev_get_regs (struct rte_eth_dev *dev, +struct rte_dev_reg_info *regs);static int axgbe_dev_stats_get(struct
rte_eth_dev*dev,struct rte_eth_stats *stats);static int
axgbe_dev_stats_reset(struct rte_eth_dev *dev); @@ -158,6 +161,7 @@ static const structeth_dev_opsaxgbe_eth_dev_ops= {
.allmulticast_enable =axgbe_dev_allmulticast_enable,
.allmulticast_disable =axgbe_dev_allmulticast_disable,
.link_update =axgbe_dev_link_update,drivers/net/axgbe/axgbe_ethdev.c +1
-0+ .get_reg = axgbe_dev_get_regs,.stats_get =
axgbe_dev_stats_get,
.stats_reset =axgbe_dev_stats_reset,
.xstats_get =axgbe_dev_xstats_get,drivers/net/axgbe/axgbe_ethdev.c +21
-0@@ -393,6 +397,27 @@ axgbe_dev_link_update(struct rte_eth_dev *dev,return ret; } +static int +axgbe_dev_get_regs (struct rte_eth_dev *dev,struct rte_dev_reg_info +*regs) { +struct axgbe_port *pdata = dev->data->dev_private; + +if (regs->data ==NULL ) { + regs->length =axgbe_regs_get_count (pdata); + regs->width =sizeof (uint32_t ); +return 0 ; + } + +/* Only full register dump is supported */ +if (regs->length && + regs->length != (uint32_t )axgbe_regs_get_count (pdata)) +return -ENOTSUP ; + + regs->version = pdata->pci_dev->id.vendor_id <<16 | + pdata->pci_dev->id.device_id; +axgbe_regs_dump (pdata, regs->data); +return 0 ; +}static void axgbe_read_mmc_stats (struct axgbe_port *pdata) { struct axgbe_mmc_stats *stats = &pdata->mmc_stats; diff --git a/drivers/net/axgbe/axgbe_regs.h b/drivers/net/axgbe/axgbe_regs.h new file mode 100644 index 000000000..c7e032620drivers/net/axgbe/axgbe_regs.h new file +226
-1@@ -0,0 +1,229 @@ +/* SPDX-License-Identifier: BSD-3-Clause +* Copyright(c) 2019 Advanced Micro Devices, Inc. All rights reserved. +*/ +#ifndef RTE_ETH_AXGBE_REGS_H_ +#define RTE_ETH_AXGBE_REGS_H_ + +#include "axgbe_common.h" + +static const uint32_t dma_reg_tbl[] = { +DMA_MR ,/* DMA Mode */ +DMA_SBMR ,/* DMA Sys Bus Mode */ +DMA_ISR ,/* DMA Interrupt Status */ +DMA_AXIARCR ,/* DMA AXI Tx AR ACE Ctrl */ +DMA_AXIAWCR ,/* DMA AXI Rx AW ACE Ctrl */ +DMA_AXIAWRCR ,/* DMA AXI TxRx AWR ACE Ctrl */ +DMA_DSR0 ,/* DMA Debug Status0 */ +DMA_DSR1 ,/* DMA Debug Status1 */ +EDMA_TX_CONTROL ,/* DMA Tx EDMA Ctrl */ +EDMA_RX_CONTROL ,/* DMA Rx EDMA Ctrl */ }; + +static const uint32_t dma_txch_reg_tbl[] = { +DMA_CH_CR ,/* DMA Channel Ctrl */ +DMA_CH_TCR ,/* DMA Tx Ctrl */ +DMA_CH_TDLR_HI ,/* DMA TxDescList HAddr */ +DMA_CH_TDLR_LO ,/* DMA TxDescList LAddr */ +DMA_CH_TDTR_LO ,/* DMA TxDescTail LAddr */ +DMA_CH_TDRLR ,/* DMA TxDescRing Length */ +DMA_CH_IER ,/* DMA Interrupt Enable */ +DMA_CH_CATDR_LO ,/* DMA CurrApp TxDesc LAddr */ +DMA_CH_CATBR_HI ,/* DMA CurrApp TxBuf HAddr */ +DMA_CH_CATBR_LO ,/* DMA CurrApp TxBuf LAddr */ +DMA_CH_SR ,/* DMA Channel Status */ +}; + +static const uint32_t dma_rxch_reg_tbl[] = { +DMA_CH_RCR ,/* DMA Rx Ctrl */ +DMA_CH_RDLR_HI ,/* DMA RxDescList HAddr */ +DMA_CH_RDLR_LO ,/* DMA RxDescList LAddr */ +DMA_CH_RDTR_LO ,/* DMA RxDescTail LAddr */ +DMA_CH_RDRLR ,/* DMA RxDescRing Length */ +DMA_CH_RIWT ,/* DMA Rx Interrupt WatchDog Timer */ +DMA_CH_CARDR_LO ,/* DMA CurrApp RxDesc LAddr */ +DMA_CH_CARBR_HI ,/* DMA CurrApp RxBuf HAddr */ +DMA_CH_CARBR_LO ,/* DMA CurrApp RxBuf LAddr */ + +}; + +static const uint32_t mtl_reg_tbl[] = { +MTL_OMR ,/* MTL Operation Mode */ +MTL_FDCR ,/* MTL FIFO Debug Ctrl */ +MTL_FDSR ,/* MTL FIFO Debug Status */ +MTL_FDDR ,/* MTL FIFO Debug Data */ +MTL_ISR ,/* MTL Interrupt Status */ +MTL_RQDCM0R ,/* MTL RxQ DMA Map0 */ +MTL_TCPM0R ,/* MTL TC Prty Map0 */ +MTL_TCPM1R ,/* MTL TC Prty Map1 */ +}; + +static const uint32_t mtl_txq_reg_tbl[] = { +MTL_Q_TQOMR ,/* MTL TxQ Operation Mode */ +MTL_Q_TQUR ,/* MTL TxQ Underflow */ +MTL_Q_TQDR ,/* MTL TxQ Debug */ +MTL_Q_IER ,/* MTL Q Interrupt Enable */ +MTL_Q_ISR ,/* MTL Q Interrupt Status */ +}; + +static const uint32_t mtl_rxq_reg_tbl[] = { +MTL_Q_RQOMR ,/* MTL RxQ Operation Mode */ +MTL_Q_RQMPOCR ,/* MTL RxQ Missed Pkt OverFlow Cnt */ +MTL_Q_RQDR ,/* MTL RxQ Debug */ +MTL_Q_RQFCR ,/* MTL RxQ Flow Control */ +}; + +static const uint32_t mac_reg_tbl[] = { +MAC_TCR ,/* MAC Tx Config */ +MAC_RCR ,/* MAC Rx Config */ +MAC_PFR ,/* MAC Packet Filter */ +MAC_WTR ,/* MAC WatchDog Timeout */ +MAC_HTR0 ,/* MAC Hash Table0 */ +MAC_VLANTR ,/* MAC VLAN Tag Ctrl */ +MAC_VLANHTR ,/* MAC VLAN Hash Table */ +MAC_VLANIR ,/* MAC VLAN Incl */ +MAC_IVLANIR ,/* MAC Inner VLAN Incl */ +MAC_RETMR ,/* MAC Rx Eth Type Match */ +MAC_Q0TFCR ,/* MAC Q0 Tx Flow Ctrl */ +MAC_RFCR ,/* MAC Rx Flow Ctrl */ +MAC_RQC0R ,/* MAC RxQ Ctrl0 */ +MAC_RQC1R ,/* MAC RxQ Ctrl1 */ +MAC_RQC2R ,/* MAC RxQ Ctrl2 */ +MAC_RQC3R ,/* MAC RxQ Ctrl3 */ +MAC_ISR ,/* MAC Interrupt Status */ +MAC_IER ,/* MAC Interrupt Enable */ +MAC_RTSR ,/* MAC Rx Tx Status */ +MAC_PMTCSR ,/* MAC PMT Ctrl Status */ +MAC_RWKPFR ,/* MAC RWK Packet Filter */ +MAC_LPICSR ,/* MAC LPI Ctrl Status */ +MAC_LPITCR ,/* MAC LPI Timers Ctrl */ +MAC_VR ,/* MAC Version */ +MAC_DR ,/* MAC Debug Status */ +MAC_HWF0R ,/* MAC HW Feature0 */ +MAC_HWF1R ,/* MAC HW Feature1 */ +MAC_HWF2R ,/* MAC HW Feature2 */ +MAC_MDIOSCAR ,/* MDIO Single Cmd Addr */ +MAC_MDIOSCCDR ,/* MDIO Single Cmd/Data */ +MAC_MDIOISR ,/* MDIO Interrupt Status */ +MAC_MDIOIER ,/* MDIO Interrupt Enable */ +MAC_MDIOCL22R ,/* MDIO Clause22 Port */ +MAC_GPIOCR ,/* MAC GPIO Ctrl */ +MAC_GPIOSR ,/* MAC GPIO Status */ +MAC_RSSCR ,/* MAC RSS Ctrl */ +MAC_RSSAR ,/* MAC RSS Addr */ +}; + +/* MAC Address Register Table */ +static const uint32_t mac_addr_reg_tbl[] = { +MAC_MACAHR (0 ),MAC_MACALR (0 ),MAC_MACAHR (1 ),MAC_MACALR (1 ), +MAC_MACAHR (2 ),MAC_MACALR (2 ),MAC_MACAHR (3 ),MAC_MACALR (3 ), +MAC_MACAHR (4 ),MAC_MACALR (4 ),MAC_MACAHR (5 ),MAC_MACALR (5 ), +MAC_MACAHR (6 ),MAC_MACALR (6 ),MAC_MACAHR (7 ),MAC_MACALR (7 ), +MAC_MACAHR (8 ),MAC_MACALR (8 ),MAC_MACAHR (9 ),MAC_MACALR (9 ), +MAC_MACAHR (10 ),MAC_MACALR (10 ),MAC_MACAHR (11 ),MAC_MACALR (11 ), +MAC_MACAHR (12 ),MAC_MACALR (12 ),MAC_MACAHR (13 ),MAC_MACALR (13 ), +MAC_MACAHR (14 ),MAC_MACALR (14 ),MAC_MACAHR (15 ),MAC_MACALR (15 ), +MAC_MACAHR (16 ),MAC_MACALR (16 ),MAC_MACAHR (17 ),MAC_MACALR (17 ), +MAC_MACAHR (18 ),MAC_MACALR (18 ),MAC_MACAHR (19 ),MAC_MACALR (19 ), +MAC_MACAHR (20 ),MAC_MACALR (20 ),MAC_MACAHR (21 ),MAC_MACALR (21 ), +MAC_MACAHR (22 ),MAC_MACALR (22 ),MAC_MACAHR (23 ),MAC_MACALR (23 ), +MAC_MACAHR (24 ),MAC_MACALR (24 ),MAC_MACAHR (25 ),MAC_MACALR (25 ), +MAC_MACAHR (26 ),MAC_MACALR (26 ),MAC_MACAHR (27 ),MAC_MACALR (27 ), +MAC_MACAHR (28 ),MAC_MACALR (28 ),MAC_MACAHR (29 ),MAC_MACALR (29 ), +MAC_MACAHR (30 ),MAC_MACALR (30 ),MAC_MACAHR (31 ),MAC_MACALR (31 ), + +}; + +static const uint32_t mac_ieee1558_reg_tbl[] = { +MAC_RSSDR ,/* MAC RSS Data */ +MAC_TSCR ,/* MAC TimeStamp Ctrl */ +MAC_SSIR ,/* MAC Sub Second Incr */ +MAC_STSR ,/* MAC Sys Time Secs */ +MAC_STNR ,/* MAC Sys Time NSecs */ +MAC_STSUR ,/* MAC Sys Time Secs Update */ +MAC_STNUR ,/* MAC Sys Time NSecs Update */ +MAC_TSAR ,/* MAC TimeStamp Addend */ +MAC_TSSR ,/* MAC TimeStamp Status */ +MAC_TXSNR ,/* MAC TxTS Status NSecs */ +MAC_TXSSR ,/* MAC TxTS Status Secs */ +}; + +static inline int +axgbe_regs_get_count (struct axgbe_port *pdata) { +int count =0 ; +unsigned int i =0 ; + + count =ARRAY_SIZE (dma_reg_tbl); +for (i =0 ; i < pdata->tx_ring_count; i++) + count +=ARRAY_SIZE (dma_txch_reg_tbl); +for (i =0 ; i < pdata->rx_ring_count; i++) + count +=ARRAY_SIZE (dma_rxch_reg_tbl); + count +=ARRAY_SIZE (mtl_reg_tbl); +for (i =0 ; i < pdata->tx_q_count; i++) + count +=ARRAY_SIZE (mtl_txq_reg_tbl); +for (i =0 ; i < pdata->rx_q_count; i++) + count +=ARRAY_SIZE (mtl_rxq_reg_tbl); + count +=ARRAY_SIZE (mac_reg_tbl); + count +=ARRAY_SIZE (mac_addr_reg_tbl); + count +=ARRAY_SIZE (mac_ieee1558_reg_tbl); + +return count; +}; + +static inline int +axgbe_regs_dump (struct axgbe_port *pdata,uint32_t *data) { +unsigned int i =0 , j =0 ; +unsigned int base_reg, reg; + +for (i =0 ; i <ARRAY_SIZE (dma_reg_tbl); i++) + *data++ =AXGMAC_IOREAD (pdata, dma_reg_tbl[i]); + +for (j =0 ; j < pdata->tx_ring_count; j++) { + base_reg =DMA_CH_BASE + (j *DMA_CH_INC ); +for (i =0 ; i <ARRAY_SIZE (dma_txch_reg_tbl); i++) { + reg = base_reg + dma_txch_reg_tbl[i]; + *data++ =AXGMAC_IOREAD (pdata, reg); + } + } + +for (j =0 ; j < pdata->rx_ring_count; j++) { + base_reg =DMA_CH_BASE + (j *DMA_CH_INC ); +for (i =0 ; i <ARRAY_SIZE (dma_rxch_reg_tbl); i++) { + reg = base_reg + dma_rxch_reg_tbl[i]; + *data++ =AXGMAC_IOREAD (pdata, reg); + } + } + +for (i =0 ; i <ARRAY_SIZE (mtl_reg_tbl); i++) + *data++ =AXGMAC_IOREAD (pdata, mtl_reg_tbl[i]); + +for (j =0 ; j < pdata->tx_q_count; j++) { + base_reg =MTL_Q_BASE + (j *MTL_Q_INC ); +for (i =0 ; i <ARRAY_SIZE (mtl_txq_reg_tbl); i++) { + reg = base_reg + mtl_txq_reg_tbl[i]; + *data++ =AXGMAC_IOREAD (pdata, reg); + } + } + +for (j =0 ; j < pdata->rx_q_count; j++) { + base_reg =MTL_Q_BASE + (j *MTL_Q_INC ); +for (i =0 ; i <ARRAY_SIZE (mtl_rxq_reg_tbl); i++) { + reg = base_reg + mtl_rxq_reg_tbl[i]; + *data++ =AXGMAC_IOREAD (pdata, reg); + } + } + +for (i =0 ; i <ARRAY_SIZE (mac_reg_tbl); i++) + *data++ =AXGMAC_IOREAD (pdata, mac_reg_tbl[i]); + +for (i =0 ; i <ARRAY_SIZE (mac_addr_reg_tbl); i++) + *data++ =AXGMAC_IOREAD (pdata, mac_addr_reg_tbl[i]); + +for (i =0 ; i <ARRAY_SIZE (mac_ieee1558_reg_tbl); i++) + *data++ =AXGMAC_IOREAD (pdata, mac_ieee1558_reg_tbl[i]); + +return 0 ; +}; + +#endif /* RTE_ETH_AXGBE_REGS_H_ */ --2.17.1
Ferruh Yigit
AppliedOn 2/16/2020 6:47 AM, Kumar, Ravi1 wrote:
<...>
Quoted 8 lines
Quoted 8 lines
-----Original Message-----
From: Namburu, Chandu-babu <[email protected]>
Sent: Tuesday, February 11, 2020 3:58 PM
To: [email protected]
Cc: Kumar, Ravi1 <[email protected]>; Somalapuram, Amaranath <[email protected]>
Subject: [PATCH v1] net/axgbe: add register dump support
Quoted 8 lines
Quoted 5 lines
From: Chandu Babu N <[email protected]>
Implement "
get_reg"eth_dev_opsfor axgbeSigned-off-by Chandu Babu N <[email protected]>Acked-by Ravi Kumar <[email protected]>
Applied to dpdk-next-net/master, thanks.