* [PATCH RFC] net: stmmac: unify registers dumps methods
@ 2017-02-20 13:44 Corentin Labbe
2017-02-20 13:44 ` Corentin Labbe
0 siblings, 1 reply; 3+ messages in thread
From: Corentin Labbe @ 2017-02-20 13:44 UTC (permalink / raw)
To: peppe.cavallaro, alexandre.torgue; +Cc: netdev, linux-kernel, Corentin Labbe
hello
The following patch address the problem that two way of dumping registers are
available in stmmac, via ethtool and directly at init (if NETIF_MSG_HW is enabled).
It is better to keep only one method, ethtool, since the other was ugly (logs of pr_xxx).
But by working on this issue, I saw two problem:
- "ethtool" for gmac/gmac4 always dump the 55 first registers, while dwmac4_dump_regs dump the first 132 registers, so clearly the current stmmac_ethtool_gregs miss some registers
- stmmac_ethtool_gregs claim to dump whole address space (len=REG_SPACE_SIZE), but in fact concat two distant address space.
The current patch address all by being bijective between reg_space and address space, so all DMA registers goes to their "real" address in reg_space.
But this fix break the pretty print of registers name of ethtool. (ethtool -d eth0 hex on still works).
What do you think about this issue ?
Corentin Labbe (1):
net: stmmac: unify registers dumps methods
drivers/net/ethernet/stmicro/stmmac/common.h | 4 +-
.../net/ethernet/stmicro/stmmac/dwmac1000_core.c | 10 +--
.../net/ethernet/stmicro/stmmac/dwmac1000_dma.c | 16 ++---
.../net/ethernet/stmicro/stmmac/dwmac100_core.c | 30 +++------
drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c | 15 ++---
drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c | 12 +---
drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c | 78 +++++++++++-----------
.../net/ethernet/stmicro/stmmac/stmmac_ethtool.c | 21 +-----
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 5 --
9 files changed, 71 insertions(+), 120 deletions(-)
--
2.10.2
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH RFC] net: stmmac: unify registers dumps methods
2017-02-20 13:44 [PATCH RFC] net: stmmac: unify registers dumps methods Corentin Labbe
@ 2017-02-20 13:44 ` Corentin Labbe
2017-02-21 9:38 ` Giuseppe CAVALLARO
0 siblings, 1 reply; 3+ messages in thread
From: Corentin Labbe @ 2017-02-20 13:44 UTC (permalink / raw)
To: peppe.cavallaro, alexandre.torgue; +Cc: netdev, linux-kernel, Corentin Labbe
The stmmac driver have two methods for registers dumps: via ethtool and
at init (if NETIF_MSG_HW is enabled).
It is better to keep only one method, ethtool, since the other was ugly.
This patch convert all dump_regs() function from "printing regs" to
"fill the reg_space used by ethtool".
Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
---
drivers/net/ethernet/stmicro/stmmac/common.h | 4 +-
.../net/ethernet/stmicro/stmmac/dwmac1000_core.c | 10 +--
.../net/ethernet/stmicro/stmmac/dwmac1000_dma.c | 16 ++---
.../net/ethernet/stmicro/stmmac/dwmac100_core.c | 30 +++------
drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c | 15 ++---
drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c | 12 +---
drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c | 78 +++++++++++-----------
.../net/ethernet/stmicro/stmmac/stmmac_ethtool.c | 21 +-----
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 5 --
9 files changed, 71 insertions(+), 120 deletions(-)
diff --git a/drivers/net/ethernet/stmicro/stmmac/common.h b/drivers/net/ethernet/stmicro/stmmac/common.h
index daaafa9..7552775 100644
--- a/drivers/net/ethernet/stmicro/stmmac/common.h
+++ b/drivers/net/ethernet/stmicro/stmmac/common.h
@@ -416,7 +416,7 @@ struct stmmac_dma_ops {
/* Configure the AXI Bus Mode Register */
void (*axi)(void __iomem *ioaddr, struct stmmac_axi *axi);
/* Dump DMA registers */
- void (*dump_regs) (void __iomem *ioaddr);
+ void (*dump_regs)(void __iomem *ioaddr, u32 *reg_space);
/* Set tx/rx threshold in the csr6 register
* An invalid value enables the store-and-forward mode */
void (*dma_mode)(void __iomem *ioaddr, int txmode, int rxmode,
@@ -456,7 +456,7 @@ struct stmmac_ops {
/* Enable RX Queues */
void (*rx_queue_enable)(struct mac_device_info *hw, u32 queue);
/* Dump MAC registers */
- void (*dump_regs)(struct mac_device_info *hw);
+ void (*dump_regs)(struct mac_device_info *hw, u32 *reg_space);
/* Handle extra events on specific interrupts hw dependent */
int (*host_irq_status)(struct mac_device_info *hw,
struct stmmac_extra_stats *x);
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c
index 91c8926..19b9b30 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c
@@ -92,17 +92,13 @@ static int dwmac1000_rx_ipc_enable(struct mac_device_info *hw)
return !!(value & GMAC_CONTROL_IPC);
}
-static void dwmac1000_dump_regs(struct mac_device_info *hw)
+static void dwmac1000_dump_regs(struct mac_device_info *hw, u32 *reg_space)
{
void __iomem *ioaddr = hw->pcsr;
int i;
- pr_info("\tDWMAC1000 regs (base addr = 0x%p)\n", ioaddr);
- for (i = 0; i < 55; i++) {
- int offset = i * 4;
- pr_info("\tReg No. %d (offset 0x%x): 0x%08x\n", i,
- offset, readl(ioaddr + offset));
- }
+ for (i = 0; i < 55; i++)
+ reg_space[i] = readl(ioaddr + i * 4);
}
static void dwmac1000_set_umac_addr(struct mac_device_info *hw,
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c
index fbaec0f..d3654a4 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c
@@ -201,18 +201,14 @@ static void dwmac1000_dma_operation_mode(void __iomem *ioaddr, int txmode,
writel(csr6, ioaddr + DMA_CONTROL);
}
-static void dwmac1000_dump_dma_regs(void __iomem *ioaddr)
+static void dwmac1000_dump_dma_regs(void __iomem *ioaddr, u32 *reg_space)
{
int i;
- pr_info(" DMA registers\n");
- for (i = 0; i < 22; i++) {
- if ((i < 9) || (i > 17)) {
- int offset = i * 4;
- pr_err("\t Reg No. %d (offset 0x%x): 0x%08x\n", i,
- (DMA_BUS_MODE + offset),
- readl(ioaddr + DMA_BUS_MODE + offset));
- }
- }
+
+ for (i = 0; i < 22; i++)
+ if ((i < 9) || (i > 17))
+ reg_space[DMA_BUS_MODE / 4 + i] =
+ readl(ioaddr + DMA_BUS_MODE + i * 4);
}
static void dwmac1000_get_hw_feature(void __iomem *ioaddr,
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac100_core.c b/drivers/net/ethernet/stmicro/stmmac/dwmac100_core.c
index 8ab5189..e370cce 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac100_core.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac100_core.c
@@ -40,28 +40,18 @@ static void dwmac100_core_init(struct mac_device_info *hw, int mtu)
#endif
}
-static void dwmac100_dump_mac_regs(struct mac_device_info *hw)
+static void dwmac100_dump_mac_regs(struct mac_device_info *hw, u32 *reg_space)
{
void __iomem *ioaddr = hw->pcsr;
- pr_info("\t----------------------------------------------\n"
- "\t DWMAC 100 CSR (base addr = 0x%p)\n"
- "\t----------------------------------------------\n", ioaddr);
- pr_info("\tcontrol reg (offset 0x%x): 0x%08x\n", MAC_CONTROL,
- readl(ioaddr + MAC_CONTROL));
- pr_info("\taddr HI (offset 0x%x): 0x%08x\n ", MAC_ADDR_HIGH,
- readl(ioaddr + MAC_ADDR_HIGH));
- pr_info("\taddr LO (offset 0x%x): 0x%08x\n", MAC_ADDR_LOW,
- readl(ioaddr + MAC_ADDR_LOW));
- pr_info("\tmulticast hash HI (offset 0x%x): 0x%08x\n",
- MAC_HASH_HIGH, readl(ioaddr + MAC_HASH_HIGH));
- pr_info("\tmulticast hash LO (offset 0x%x): 0x%08x\n",
- MAC_HASH_LOW, readl(ioaddr + MAC_HASH_LOW));
- pr_info("\tflow control (offset 0x%x): 0x%08x\n",
- MAC_FLOW_CTRL, readl(ioaddr + MAC_FLOW_CTRL));
- pr_info("\tVLAN1 tag (offset 0x%x): 0x%08x\n", MAC_VLAN1,
- readl(ioaddr + MAC_VLAN1));
- pr_info("\tVLAN2 tag (offset 0x%x): 0x%08x\n", MAC_VLAN2,
- readl(ioaddr + MAC_VLAN2));
+
+ reg_space[MAC_CONTROL / 4] = readl(ioaddr + MAC_CONTROL);
+ reg_space[MAC_ADDR_HIGH / 4] = readl(ioaddr + MAC_ADDR_HIGH);
+ reg_space[MAC_ADDR_LOW / 4] = readl(ioaddr + MAC_ADDR_LOW);
+ reg_space[MAC_HASH_HIGH / 4] = readl(ioaddr + MAC_HASH_HIGH);
+ reg_space[MAC_HASH_LOW / 4] = readl(ioaddr + MAC_HASH_LOW);
+ reg_space[MAC_FLOW_CTRL / 4] = readl(ioaddr + MAC_FLOW_CTRL);
+ reg_space[MAC_VLAN1 / 4] = readl(ioaddr + MAC_VLAN1);
+ reg_space[MAC_VLAN2 / 4] = readl(ioaddr + MAC_VLAN2);
}
static int dwmac100_rx_ipc_enable(struct mac_device_info *hw)
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c b/drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c
index d40e91e8..eef2f22 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c
@@ -66,19 +66,18 @@ static void dwmac100_dma_operation_mode(void __iomem *ioaddr, int txmode,
writel(csr6, ioaddr + DMA_CONTROL);
}
-static void dwmac100_dump_dma_regs(void __iomem *ioaddr)
+static void dwmac100_dump_dma_regs(void __iomem *ioaddr, u32 *reg_space)
{
int i;
- pr_debug("DWMAC 100 DMA CSR\n");
for (i = 0; i < 9; i++)
- pr_debug("\t CSR%d (offset 0x%x): 0x%08x\n", i,
- (DMA_BUS_MODE + i * 4),
- readl(ioaddr + DMA_BUS_MODE + i * 4));
+ reg_space[DMA_BUS_MODE / 4 + i] =
+ readl(ioaddr + DMA_BUS_MODE + i * 4);
- pr_debug("\tCSR20 (0x%x): 0x%08x, CSR21 (0x%x): 0x%08x\n",
- DMA_CUR_TX_BUF_ADDR, readl(ioaddr + DMA_CUR_TX_BUF_ADDR),
- DMA_CUR_RX_BUF_ADDR, readl(ioaddr + DMA_CUR_RX_BUF_ADDR));
+ reg_space[DMA_CUR_TX_BUF_ADDR / 4] =
+ readl(ioaddr + DMA_CUR_TX_BUF_ADDR);
+ reg_space[DMA_CUR_RX_BUF_ADDR / 4] =
+ readl(ioaddr + DMA_CUR_RX_BUF_ADDR);
}
/* DMA controller has two counters to track the number of the missed frames. */
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c b/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c
index 202216c..1e79e65 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c
@@ -70,19 +70,13 @@ static void dwmac4_rx_queue_enable(struct mac_device_info *hw, u32 queue)
writel(value, ioaddr + GMAC_RXQ_CTRL0);
}
-static void dwmac4_dump_regs(struct mac_device_info *hw)
+static void dwmac4_dump_regs(struct mac_device_info *hw, u32 *reg_space)
{
void __iomem *ioaddr = hw->pcsr;
int i;
- pr_debug("\tDWMAC4 regs (base addr = 0x%p)\n", ioaddr);
-
- for (i = 0; i < GMAC_REG_NUM; i++) {
- int offset = i * 4;
-
- pr_debug("\tReg No. %d (offset 0x%x): 0x%08x\n", i,
- offset, readl(ioaddr + offset));
- }
+ for (i = 0; i < GMAC_REG_NUM; i++)
+ reg_space[i] = readl(ioaddr + i * 4);
}
static int dwmac4_rx_ipc_enable(struct mac_device_info *hw)
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c b/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c
index 377d1b4..f97b0d5 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c
@@ -127,53 +127,51 @@ static void dwmac4_dma_init(void __iomem *ioaddr,
dwmac4_dma_init_channel(ioaddr, dma_cfg, dma_tx, dma_rx, i);
}
-static void _dwmac4_dump_dma_regs(void __iomem *ioaddr, u32 channel)
+static void _dwmac4_dump_dma_regs(void __iomem *ioaddr, u32 channel,
+ u32 *reg_space)
{
- pr_debug(" Channel %d\n", channel);
- pr_debug("\tDMA_CHAN_CONTROL, offset: 0x%x, val: 0x%x\n", 0,
- readl(ioaddr + DMA_CHAN_CONTROL(channel)));
- pr_debug("\tDMA_CHAN_TX_CONTROL, offset: 0x%x, val: 0x%x\n", 0x4,
- readl(ioaddr + DMA_CHAN_TX_CONTROL(channel)));
- pr_debug("\tDMA_CHAN_RX_CONTROL, offset: 0x%x, val: 0x%x\n", 0x8,
- readl(ioaddr + DMA_CHAN_RX_CONTROL(channel)));
- pr_debug("\tDMA_CHAN_TX_BASE_ADDR, offset: 0x%x, val: 0x%x\n", 0x14,
- readl(ioaddr + DMA_CHAN_TX_BASE_ADDR(channel)));
- pr_debug("\tDMA_CHAN_RX_BASE_ADDR, offset: 0x%x, val: 0x%x\n", 0x1c,
- readl(ioaddr + DMA_CHAN_RX_BASE_ADDR(channel)));
- pr_debug("\tDMA_CHAN_TX_END_ADDR, offset: 0x%x, val: 0x%x\n", 0x20,
- readl(ioaddr + DMA_CHAN_TX_END_ADDR(channel)));
- pr_debug("\tDMA_CHAN_RX_END_ADDR, offset: 0x%x, val: 0x%x\n", 0x28,
- readl(ioaddr + DMA_CHAN_RX_END_ADDR(channel)));
- pr_debug("\tDMA_CHAN_TX_RING_LEN, offset: 0x%x, val: 0x%x\n", 0x2c,
- readl(ioaddr + DMA_CHAN_TX_RING_LEN(channel)));
- pr_debug("\tDMA_CHAN_RX_RING_LEN, offset: 0x%x, val: 0x%x\n", 0x30,
- readl(ioaddr + DMA_CHAN_RX_RING_LEN(channel)));
- pr_debug("\tDMA_CHAN_INTR_ENA, offset: 0x%x, val: 0x%x\n", 0x34,
- readl(ioaddr + DMA_CHAN_INTR_ENA(channel)));
- pr_debug("\tDMA_CHAN_RX_WATCHDOG, offset: 0x%x, val: 0x%x\n", 0x38,
- readl(ioaddr + DMA_CHAN_RX_WATCHDOG(channel)));
- pr_debug("\tDMA_CHAN_SLOT_CTRL_STATUS, offset: 0x%x, val: 0x%x\n", 0x3c,
- readl(ioaddr + DMA_CHAN_SLOT_CTRL_STATUS(channel)));
- pr_debug("\tDMA_CHAN_CUR_TX_DESC, offset: 0x%x, val: 0x%x\n", 0x44,
- readl(ioaddr + DMA_CHAN_CUR_TX_DESC(channel)));
- pr_debug("\tDMA_CHAN_CUR_RX_DESC, offset: 0x%x, val: 0x%x\n", 0x4c,
- readl(ioaddr + DMA_CHAN_CUR_RX_DESC(channel)));
- pr_debug("\tDMA_CHAN_CUR_TX_BUF_ADDR, offset: 0x%x, val: 0x%x\n", 0x54,
- readl(ioaddr + DMA_CHAN_CUR_TX_BUF_ADDR(channel)));
- pr_debug("\tDMA_CHAN_CUR_RX_BUF_ADDR, offset: 0x%x, val: 0x%x\n", 0x5c,
- readl(ioaddr + DMA_CHAN_CUR_RX_BUF_ADDR(channel)));
- pr_debug("\tDMA_CHAN_STATUS, offset: 0x%x, val: 0x%x\n", 0x60,
- readl(ioaddr + DMA_CHAN_STATUS(channel)));
+ reg_space[DMA_CHAN_CONTROL(channel) / 4] =
+ readl(ioaddr + DMA_CHAN_CONTROL(channel));
+ reg_space[DMA_CHAN_TX_CONTROL(channel) / 4] =
+ readl(ioaddr + DMA_CHAN_TX_CONTROL(channel));
+ reg_space[DMA_CHAN_RX_CONTROL(channel) / 4] =
+ readl(ioaddr + DMA_CHAN_RX_CONTROL(channel));
+ reg_space[DMA_CHAN_TX_BASE_ADDR(channel) / 4] =
+ readl(ioaddr + DMA_CHAN_TX_BASE_ADDR(channel));
+ reg_space[DMA_CHAN_RX_BASE_ADDR(channel) / 4] =
+ readl(ioaddr + DMA_CHAN_RX_BASE_ADDR(channel));
+ reg_space[DMA_CHAN_TX_END_ADDR(channel) / 4] =
+ readl(ioaddr + DMA_CHAN_TX_END_ADDR(channel));
+ reg_space[DMA_CHAN_RX_END_ADDR(channel) / 4] =
+ readl(ioaddr + DMA_CHAN_RX_END_ADDR(channel));
+ reg_space[DMA_CHAN_TX_RING_LEN(channel) / 4] =
+ readl(ioaddr + DMA_CHAN_TX_RING_LEN(channel));
+ reg_space[DMA_CHAN_RX_RING_LEN(channel) / 4] =
+ readl(ioaddr + DMA_CHAN_RX_RING_LEN(channel));
+ reg_space[DMA_CHAN_INTR_ENA(channel) / 4] =
+ readl(ioaddr + DMA_CHAN_INTR_ENA(channel));
+ reg_space[DMA_CHAN_RX_WATCHDOG(channel) / 4] =
+ readl(ioaddr + DMA_CHAN_RX_WATCHDOG(channel));
+ reg_space[DMA_CHAN_SLOT_CTRL_STATUS(channel) / 4] =
+ readl(ioaddr + DMA_CHAN_SLOT_CTRL_STATUS(channel));
+ reg_space[DMA_CHAN_CUR_TX_DESC(channel) / 4] =
+ readl(ioaddr + DMA_CHAN_CUR_TX_DESC(channel));
+ reg_space[DMA_CHAN_CUR_RX_DESC(channel) / 4] =
+ readl(ioaddr + DMA_CHAN_CUR_RX_DESC(channel));
+ reg_space[DMA_CHAN_CUR_TX_BUF_ADDR(channel) / 4] =
+ readl(ioaddr + DMA_CHAN_CUR_TX_BUF_ADDR(channel));
+ reg_space[DMA_CHAN_CUR_RX_BUF_ADDR(channel) / 4] =
+ readl(ioaddr + DMA_CHAN_CUR_RX_BUF_ADDR(channel));
+ reg_space[DMA_CHAN_STATUS(channel) / 4] =
+ readl(ioaddr + DMA_CHAN_STATUS(channel));
}
-static void dwmac4_dump_dma_regs(void __iomem *ioaddr)
+static void dwmac4_dump_dma_regs(void __iomem *ioaddr, u32 *reg_space)
{
int i;
- pr_debug(" GMAC4 DMA registers\n");
-
for (i = 0; i < DMA_CHANNEL_NB_MAX; i++)
- _dwmac4_dump_dma_regs(ioaddr, i);
+ _dwmac4_dump_dma_regs(ioaddr, i, reg_space);
}
static void dwmac4_rx_watchdog(void __iomem *ioaddr, u32 riwt)
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
index 5ff6bc4..40b7772 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
@@ -442,25 +442,8 @@ static void stmmac_ethtool_gregs(struct net_device *dev,
memset(reg_space, 0x0, REG_SPACE_SIZE);
- if (priv->plat->has_gmac || priv->plat->has_gmac4) {
- /* MAC registers */
- for (i = 0; i < 55; i++)
- reg_space[i] = readl(priv->ioaddr + (i * 4));
- /* DMA registers */
- for (i = 0; i < 22; i++)
- reg_space[i + 55] =
- readl(priv->ioaddr + (DMA_BUS_MODE + (i * 4)));
- } else {
- /* MAC registers */
- for (i = 0; i < 12; i++)
- reg_space[i] = readl(priv->ioaddr + (i * 4));
- /* DMA registers */
- for (i = 0; i < 9; i++)
- reg_space[i + 12] =
- readl(priv->ioaddr + (DMA_BUS_MODE + (i * 4)));
- reg_space[22] = readl(priv->ioaddr + DMA_CUR_TX_BUF_ADDR);
- reg_space[23] = readl(priv->ioaddr + DMA_CUR_RX_BUF_ADDR);
- }
+ priv->hw->mac->dump_regs(priv->hw, reg_space);
+ priv->hw->dma->dump_regs(priv->ioaddr, reg_space);
}
static void
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index f473d54..6c955ca 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -1758,11 +1758,6 @@ static int stmmac_hw_setup(struct net_device *dev, bool init_ptp)
priv->hw->dma->start_tx(priv->ioaddr);
priv->hw->dma->start_rx(priv->ioaddr);
- /* Dump DMA/MAC registers */
- if (netif_msg_hw(priv)) {
- priv->hw->mac->dump_regs(priv->hw);
- priv->hw->dma->dump_regs(priv->ioaddr);
- }
priv->tx_lpi_timer = STMMAC_DEFAULT_TWT_LS;
if ((priv->use_riwt) && (priv->hw->dma->rx_watchdog)) {
--
2.10.2
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH RFC] net: stmmac: unify registers dumps methods
2017-02-20 13:44 ` Corentin Labbe
@ 2017-02-21 9:38 ` Giuseppe CAVALLARO
0 siblings, 0 replies; 3+ messages in thread
From: Giuseppe CAVALLARO @ 2017-02-21 9:38 UTC (permalink / raw)
To: Corentin Labbe, alexandre.torgue; +Cc: netdev, linux-kernel
On 2/20/2017 2:44 PM, Corentin Labbe wrote:
> The stmmac driver have two methods for registers dumps: via ethtool and
> at init (if NETIF_MSG_HW is enabled).
>
> It is better to keep only one method, ethtool, since the other was ugly.
>
> This patch convert all dump_regs() function from "printing regs" to
> "fill the reg_space used by ethtool".
>
> Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
Thx I find it really useful,
Acked-by: Giuseppe Cavallaro <peppe.cavallaro@st.com>
> ---
> drivers/net/ethernet/stmicro/stmmac/common.h | 4 +-
> .../net/ethernet/stmicro/stmmac/dwmac1000_core.c | 10 +--
> .../net/ethernet/stmicro/stmmac/dwmac1000_dma.c | 16 ++---
> .../net/ethernet/stmicro/stmmac/dwmac100_core.c | 30 +++------
> drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c | 15 ++---
> drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c | 12 +---
> drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c | 78 +++++++++++-----------
> .../net/ethernet/stmicro/stmmac/stmmac_ethtool.c | 21 +-----
> drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 5 --
> 9 files changed, 71 insertions(+), 120 deletions(-)
>
> diff --git a/drivers/net/ethernet/stmicro/stmmac/common.h b/drivers/net/ethernet/stmicro/stmmac/common.h
> index daaafa9..7552775 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/common.h
> +++ b/drivers/net/ethernet/stmicro/stmmac/common.h
> @@ -416,7 +416,7 @@ struct stmmac_dma_ops {
> /* Configure the AXI Bus Mode Register */
> void (*axi)(void __iomem *ioaddr, struct stmmac_axi *axi);
> /* Dump DMA registers */
> - void (*dump_regs) (void __iomem *ioaddr);
> + void (*dump_regs)(void __iomem *ioaddr, u32 *reg_space);
> /* Set tx/rx threshold in the csr6 register
> * An invalid value enables the store-and-forward mode */
> void (*dma_mode)(void __iomem *ioaddr, int txmode, int rxmode,
> @@ -456,7 +456,7 @@ struct stmmac_ops {
> /* Enable RX Queues */
> void (*rx_queue_enable)(struct mac_device_info *hw, u32 queue);
> /* Dump MAC registers */
> - void (*dump_regs)(struct mac_device_info *hw);
> + void (*dump_regs)(struct mac_device_info *hw, u32 *reg_space);
> /* Handle extra events on specific interrupts hw dependent */
> int (*host_irq_status)(struct mac_device_info *hw,
> struct stmmac_extra_stats *x);
> diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c
> index 91c8926..19b9b30 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c
> @@ -92,17 +92,13 @@ static int dwmac1000_rx_ipc_enable(struct mac_device_info *hw)
> return !!(value & GMAC_CONTROL_IPC);
> }
>
> -static void dwmac1000_dump_regs(struct mac_device_info *hw)
> +static void dwmac1000_dump_regs(struct mac_device_info *hw, u32 *reg_space)
> {
> void __iomem *ioaddr = hw->pcsr;
> int i;
> - pr_info("\tDWMAC1000 regs (base addr = 0x%p)\n", ioaddr);
>
> - for (i = 0; i < 55; i++) {
> - int offset = i * 4;
> - pr_info("\tReg No. %d (offset 0x%x): 0x%08x\n", i,
> - offset, readl(ioaddr + offset));
> - }
> + for (i = 0; i < 55; i++)
> + reg_space[i] = readl(ioaddr + i * 4);
> }
>
> static void dwmac1000_set_umac_addr(struct mac_device_info *hw,
> diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c
> index fbaec0f..d3654a4 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c
> @@ -201,18 +201,14 @@ static void dwmac1000_dma_operation_mode(void __iomem *ioaddr, int txmode,
> writel(csr6, ioaddr + DMA_CONTROL);
> }
>
> -static void dwmac1000_dump_dma_regs(void __iomem *ioaddr)
> +static void dwmac1000_dump_dma_regs(void __iomem *ioaddr, u32 *reg_space)
> {
> int i;
> - pr_info(" DMA registers\n");
> - for (i = 0; i < 22; i++) {
> - if ((i < 9) || (i > 17)) {
> - int offset = i * 4;
> - pr_err("\t Reg No. %d (offset 0x%x): 0x%08x\n", i,
> - (DMA_BUS_MODE + offset),
> - readl(ioaddr + DMA_BUS_MODE + offset));
> - }
> - }
> +
> + for (i = 0; i < 22; i++)
> + if ((i < 9) || (i > 17))
> + reg_space[DMA_BUS_MODE / 4 + i] =
> + readl(ioaddr + DMA_BUS_MODE + i * 4);
> }
>
> static void dwmac1000_get_hw_feature(void __iomem *ioaddr,
> diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac100_core.c b/drivers/net/ethernet/stmicro/stmmac/dwmac100_core.c
> index 8ab5189..e370cce 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/dwmac100_core.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac100_core.c
> @@ -40,28 +40,18 @@ static void dwmac100_core_init(struct mac_device_info *hw, int mtu)
> #endif
> }
>
> -static void dwmac100_dump_mac_regs(struct mac_device_info *hw)
> +static void dwmac100_dump_mac_regs(struct mac_device_info *hw, u32 *reg_space)
> {
> void __iomem *ioaddr = hw->pcsr;
> - pr_info("\t----------------------------------------------\n"
> - "\t DWMAC 100 CSR (base addr = 0x%p)\n"
> - "\t----------------------------------------------\n", ioaddr);
> - pr_info("\tcontrol reg (offset 0x%x): 0x%08x\n", MAC_CONTROL,
> - readl(ioaddr + MAC_CONTROL));
> - pr_info("\taddr HI (offset 0x%x): 0x%08x\n ", MAC_ADDR_HIGH,
> - readl(ioaddr + MAC_ADDR_HIGH));
> - pr_info("\taddr LO (offset 0x%x): 0x%08x\n", MAC_ADDR_LOW,
> - readl(ioaddr + MAC_ADDR_LOW));
> - pr_info("\tmulticast hash HI (offset 0x%x): 0x%08x\n",
> - MAC_HASH_HIGH, readl(ioaddr + MAC_HASH_HIGH));
> - pr_info("\tmulticast hash LO (offset 0x%x): 0x%08x\n",
> - MAC_HASH_LOW, readl(ioaddr + MAC_HASH_LOW));
> - pr_info("\tflow control (offset 0x%x): 0x%08x\n",
> - MAC_FLOW_CTRL, readl(ioaddr + MAC_FLOW_CTRL));
> - pr_info("\tVLAN1 tag (offset 0x%x): 0x%08x\n", MAC_VLAN1,
> - readl(ioaddr + MAC_VLAN1));
> - pr_info("\tVLAN2 tag (offset 0x%x): 0x%08x\n", MAC_VLAN2,
> - readl(ioaddr + MAC_VLAN2));
> +
> + reg_space[MAC_CONTROL / 4] = readl(ioaddr + MAC_CONTROL);
> + reg_space[MAC_ADDR_HIGH / 4] = readl(ioaddr + MAC_ADDR_HIGH);
> + reg_space[MAC_ADDR_LOW / 4] = readl(ioaddr + MAC_ADDR_LOW);
> + reg_space[MAC_HASH_HIGH / 4] = readl(ioaddr + MAC_HASH_HIGH);
> + reg_space[MAC_HASH_LOW / 4] = readl(ioaddr + MAC_HASH_LOW);
> + reg_space[MAC_FLOW_CTRL / 4] = readl(ioaddr + MAC_FLOW_CTRL);
> + reg_space[MAC_VLAN1 / 4] = readl(ioaddr + MAC_VLAN1);
> + reg_space[MAC_VLAN2 / 4] = readl(ioaddr + MAC_VLAN2);
> }
>
> static int dwmac100_rx_ipc_enable(struct mac_device_info *hw)
> diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c b/drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c
> index d40e91e8..eef2f22 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c
> @@ -66,19 +66,18 @@ static void dwmac100_dma_operation_mode(void __iomem *ioaddr, int txmode,
> writel(csr6, ioaddr + DMA_CONTROL);
> }
>
> -static void dwmac100_dump_dma_regs(void __iomem *ioaddr)
> +static void dwmac100_dump_dma_regs(void __iomem *ioaddr, u32 *reg_space)
> {
> int i;
>
> - pr_debug("DWMAC 100 DMA CSR\n");
> for (i = 0; i < 9; i++)
> - pr_debug("\t CSR%d (offset 0x%x): 0x%08x\n", i,
> - (DMA_BUS_MODE + i * 4),
> - readl(ioaddr + DMA_BUS_MODE + i * 4));
> + reg_space[DMA_BUS_MODE / 4 + i] =
> + readl(ioaddr + DMA_BUS_MODE + i * 4);
>
> - pr_debug("\tCSR20 (0x%x): 0x%08x, CSR21 (0x%x): 0x%08x\n",
> - DMA_CUR_TX_BUF_ADDR, readl(ioaddr + DMA_CUR_TX_BUF_ADDR),
> - DMA_CUR_RX_BUF_ADDR, readl(ioaddr + DMA_CUR_RX_BUF_ADDR));
> + reg_space[DMA_CUR_TX_BUF_ADDR / 4] =
> + readl(ioaddr + DMA_CUR_TX_BUF_ADDR);
> + reg_space[DMA_CUR_RX_BUF_ADDR / 4] =
> + readl(ioaddr + DMA_CUR_RX_BUF_ADDR);
> }
>
> /* DMA controller has two counters to track the number of the missed frames. */
> diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c b/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c
> index 202216c..1e79e65 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c
> @@ -70,19 +70,13 @@ static void dwmac4_rx_queue_enable(struct mac_device_info *hw, u32 queue)
> writel(value, ioaddr + GMAC_RXQ_CTRL0);
> }
>
> -static void dwmac4_dump_regs(struct mac_device_info *hw)
> +static void dwmac4_dump_regs(struct mac_device_info *hw, u32 *reg_space)
> {
> void __iomem *ioaddr = hw->pcsr;
> int i;
>
> - pr_debug("\tDWMAC4 regs (base addr = 0x%p)\n", ioaddr);
> -
> - for (i = 0; i < GMAC_REG_NUM; i++) {
> - int offset = i * 4;
> -
> - pr_debug("\tReg No. %d (offset 0x%x): 0x%08x\n", i,
> - offset, readl(ioaddr + offset));
> - }
> + for (i = 0; i < GMAC_REG_NUM; i++)
> + reg_space[i] = readl(ioaddr + i * 4);
> }
>
> static int dwmac4_rx_ipc_enable(struct mac_device_info *hw)
> diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c b/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c
> index 377d1b4..f97b0d5 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c
> @@ -127,53 +127,51 @@ static void dwmac4_dma_init(void __iomem *ioaddr,
> dwmac4_dma_init_channel(ioaddr, dma_cfg, dma_tx, dma_rx, i);
> }
>
> -static void _dwmac4_dump_dma_regs(void __iomem *ioaddr, u32 channel)
> +static void _dwmac4_dump_dma_regs(void __iomem *ioaddr, u32 channel,
> + u32 *reg_space)
> {
> - pr_debug(" Channel %d\n", channel);
> - pr_debug("\tDMA_CHAN_CONTROL, offset: 0x%x, val: 0x%x\n", 0,
> - readl(ioaddr + DMA_CHAN_CONTROL(channel)));
> - pr_debug("\tDMA_CHAN_TX_CONTROL, offset: 0x%x, val: 0x%x\n", 0x4,
> - readl(ioaddr + DMA_CHAN_TX_CONTROL(channel)));
> - pr_debug("\tDMA_CHAN_RX_CONTROL, offset: 0x%x, val: 0x%x\n", 0x8,
> - readl(ioaddr + DMA_CHAN_RX_CONTROL(channel)));
> - pr_debug("\tDMA_CHAN_TX_BASE_ADDR, offset: 0x%x, val: 0x%x\n", 0x14,
> - readl(ioaddr + DMA_CHAN_TX_BASE_ADDR(channel)));
> - pr_debug("\tDMA_CHAN_RX_BASE_ADDR, offset: 0x%x, val: 0x%x\n", 0x1c,
> - readl(ioaddr + DMA_CHAN_RX_BASE_ADDR(channel)));
> - pr_debug("\tDMA_CHAN_TX_END_ADDR, offset: 0x%x, val: 0x%x\n", 0x20,
> - readl(ioaddr + DMA_CHAN_TX_END_ADDR(channel)));
> - pr_debug("\tDMA_CHAN_RX_END_ADDR, offset: 0x%x, val: 0x%x\n", 0x28,
> - readl(ioaddr + DMA_CHAN_RX_END_ADDR(channel)));
> - pr_debug("\tDMA_CHAN_TX_RING_LEN, offset: 0x%x, val: 0x%x\n", 0x2c,
> - readl(ioaddr + DMA_CHAN_TX_RING_LEN(channel)));
> - pr_debug("\tDMA_CHAN_RX_RING_LEN, offset: 0x%x, val: 0x%x\n", 0x30,
> - readl(ioaddr + DMA_CHAN_RX_RING_LEN(channel)));
> - pr_debug("\tDMA_CHAN_INTR_ENA, offset: 0x%x, val: 0x%x\n", 0x34,
> - readl(ioaddr + DMA_CHAN_INTR_ENA(channel)));
> - pr_debug("\tDMA_CHAN_RX_WATCHDOG, offset: 0x%x, val: 0x%x\n", 0x38,
> - readl(ioaddr + DMA_CHAN_RX_WATCHDOG(channel)));
> - pr_debug("\tDMA_CHAN_SLOT_CTRL_STATUS, offset: 0x%x, val: 0x%x\n", 0x3c,
> - readl(ioaddr + DMA_CHAN_SLOT_CTRL_STATUS(channel)));
> - pr_debug("\tDMA_CHAN_CUR_TX_DESC, offset: 0x%x, val: 0x%x\n", 0x44,
> - readl(ioaddr + DMA_CHAN_CUR_TX_DESC(channel)));
> - pr_debug("\tDMA_CHAN_CUR_RX_DESC, offset: 0x%x, val: 0x%x\n", 0x4c,
> - readl(ioaddr + DMA_CHAN_CUR_RX_DESC(channel)));
> - pr_debug("\tDMA_CHAN_CUR_TX_BUF_ADDR, offset: 0x%x, val: 0x%x\n", 0x54,
> - readl(ioaddr + DMA_CHAN_CUR_TX_BUF_ADDR(channel)));
> - pr_debug("\tDMA_CHAN_CUR_RX_BUF_ADDR, offset: 0x%x, val: 0x%x\n", 0x5c,
> - readl(ioaddr + DMA_CHAN_CUR_RX_BUF_ADDR(channel)));
> - pr_debug("\tDMA_CHAN_STATUS, offset: 0x%x, val: 0x%x\n", 0x60,
> - readl(ioaddr + DMA_CHAN_STATUS(channel)));
> + reg_space[DMA_CHAN_CONTROL(channel) / 4] =
> + readl(ioaddr + DMA_CHAN_CONTROL(channel));
> + reg_space[DMA_CHAN_TX_CONTROL(channel) / 4] =
> + readl(ioaddr + DMA_CHAN_TX_CONTROL(channel));
> + reg_space[DMA_CHAN_RX_CONTROL(channel) / 4] =
> + readl(ioaddr + DMA_CHAN_RX_CONTROL(channel));
> + reg_space[DMA_CHAN_TX_BASE_ADDR(channel) / 4] =
> + readl(ioaddr + DMA_CHAN_TX_BASE_ADDR(channel));
> + reg_space[DMA_CHAN_RX_BASE_ADDR(channel) / 4] =
> + readl(ioaddr + DMA_CHAN_RX_BASE_ADDR(channel));
> + reg_space[DMA_CHAN_TX_END_ADDR(channel) / 4] =
> + readl(ioaddr + DMA_CHAN_TX_END_ADDR(channel));
> + reg_space[DMA_CHAN_RX_END_ADDR(channel) / 4] =
> + readl(ioaddr + DMA_CHAN_RX_END_ADDR(channel));
> + reg_space[DMA_CHAN_TX_RING_LEN(channel) / 4] =
> + readl(ioaddr + DMA_CHAN_TX_RING_LEN(channel));
> + reg_space[DMA_CHAN_RX_RING_LEN(channel) / 4] =
> + readl(ioaddr + DMA_CHAN_RX_RING_LEN(channel));
> + reg_space[DMA_CHAN_INTR_ENA(channel) / 4] =
> + readl(ioaddr + DMA_CHAN_INTR_ENA(channel));
> + reg_space[DMA_CHAN_RX_WATCHDOG(channel) / 4] =
> + readl(ioaddr + DMA_CHAN_RX_WATCHDOG(channel));
> + reg_space[DMA_CHAN_SLOT_CTRL_STATUS(channel) / 4] =
> + readl(ioaddr + DMA_CHAN_SLOT_CTRL_STATUS(channel));
> + reg_space[DMA_CHAN_CUR_TX_DESC(channel) / 4] =
> + readl(ioaddr + DMA_CHAN_CUR_TX_DESC(channel));
> + reg_space[DMA_CHAN_CUR_RX_DESC(channel) / 4] =
> + readl(ioaddr + DMA_CHAN_CUR_RX_DESC(channel));
> + reg_space[DMA_CHAN_CUR_TX_BUF_ADDR(channel) / 4] =
> + readl(ioaddr + DMA_CHAN_CUR_TX_BUF_ADDR(channel));
> + reg_space[DMA_CHAN_CUR_RX_BUF_ADDR(channel) / 4] =
> + readl(ioaddr + DMA_CHAN_CUR_RX_BUF_ADDR(channel));
> + reg_space[DMA_CHAN_STATUS(channel) / 4] =
> + readl(ioaddr + DMA_CHAN_STATUS(channel));
> }
>
> -static void dwmac4_dump_dma_regs(void __iomem *ioaddr)
> +static void dwmac4_dump_dma_regs(void __iomem *ioaddr, u32 *reg_space)
> {
> int i;
>
> - pr_debug(" GMAC4 DMA registers\n");
> -
> for (i = 0; i < DMA_CHANNEL_NB_MAX; i++)
> - _dwmac4_dump_dma_regs(ioaddr, i);
> + _dwmac4_dump_dma_regs(ioaddr, i, reg_space);
> }
>
> static void dwmac4_rx_watchdog(void __iomem *ioaddr, u32 riwt)
> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
> index 5ff6bc4..40b7772 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
> @@ -442,25 +442,8 @@ static void stmmac_ethtool_gregs(struct net_device *dev,
>
> memset(reg_space, 0x0, REG_SPACE_SIZE);
>
> - if (priv->plat->has_gmac || priv->plat->has_gmac4) {
> - /* MAC registers */
> - for (i = 0; i < 55; i++)
> - reg_space[i] = readl(priv->ioaddr + (i * 4));
> - /* DMA registers */
> - for (i = 0; i < 22; i++)
> - reg_space[i + 55] =
> - readl(priv->ioaddr + (DMA_BUS_MODE + (i * 4)));
> - } else {
> - /* MAC registers */
> - for (i = 0; i < 12; i++)
> - reg_space[i] = readl(priv->ioaddr + (i * 4));
> - /* DMA registers */
> - for (i = 0; i < 9; i++)
> - reg_space[i + 12] =
> - readl(priv->ioaddr + (DMA_BUS_MODE + (i * 4)));
> - reg_space[22] = readl(priv->ioaddr + DMA_CUR_TX_BUF_ADDR);
> - reg_space[23] = readl(priv->ioaddr + DMA_CUR_RX_BUF_ADDR);
> - }
> + priv->hw->mac->dump_regs(priv->hw, reg_space);
> + priv->hw->dma->dump_regs(priv->ioaddr, reg_space);
> }
>
> static void
> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> index f473d54..6c955ca 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> @@ -1758,11 +1758,6 @@ static int stmmac_hw_setup(struct net_device *dev, bool init_ptp)
> priv->hw->dma->start_tx(priv->ioaddr);
> priv->hw->dma->start_rx(priv->ioaddr);
>
> - /* Dump DMA/MAC registers */
> - if (netif_msg_hw(priv)) {
> - priv->hw->mac->dump_regs(priv->hw);
> - priv->hw->dma->dump_regs(priv->ioaddr);
> - }
> priv->tx_lpi_timer = STMMAC_DEFAULT_TWT_LS;
>
> if ((priv->use_riwt) && (priv->hw->dma->rx_watchdog)) {
>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2017-02-21 9:38 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-02-20 13:44 [PATCH RFC] net: stmmac: unify registers dumps methods Corentin Labbe
2017-02-20 13:44 ` Corentin Labbe
2017-02-21 9:38 ` Giuseppe CAVALLARO
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).