Skip to content

Commit d126e15

Browse files
committed
debug rbuf_/tbuf_pm
Signed-off-by: Nicolai Buchwitz <nb@tipi-net.de>
1 parent 11eec3c commit d126e15

1 file changed

Lines changed: 28 additions & 5 deletions

File tree

drivers/net/ethernet/broadcom/genet/bcmgenet.c

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,26 @@
6666
/* Forward declarations */
6767
static void bcmgenet_set_rx_mode(struct net_device *dev);
6868

69+
/*
70+
* Diagnostic knob for isolating GENET EEE/LPI failures.
71+
*
72+
* Bit 0: UMAC EEE protocol handling
73+
* Bit 1: TBUF EEE/power-management
74+
* Bit 2: RBUF EEE/power-management
75+
*
76+
*/
77+
#define GENET_EEE_PM_UMAC BIT(0)
78+
#define GENET_EEE_PM_TBUF BIT(1)
79+
#define GENET_EEE_PM_RBUF BIT(2)
80+
#define GENET_EEE_PM_ALL (GENET_EEE_PM_UMAC | \
81+
GENET_EEE_PM_TBUF | \
82+
GENET_EEE_PM_RBUF)
83+
84+
static uint eee_pm_mask = GENET_EEE_PM_ALL;
85+
module_param(eee_pm_mask, uint, 0444);
86+
MODULE_PARM_DESC(eee_pm_mask,
87+
"EEE power-management mask: bit0=UMAC bit1=TBUF bit2=RBUF");
88+
6989
static inline void bcmgenet_writel(u32 value, void __iomem *offset)
7090
{
7191
/* MIPS chips strapped for BE will automagically configure the
@@ -1347,37 +1367,40 @@ void bcmgenet_eee_enable_set(struct net_device *dev, bool enable)
13471367
{
13481368
struct bcmgenet_priv *priv = netdev_priv(dev);
13491369
u32 off = priv->hw_params->tbuf_offset + TBUF_ENERGY_CTRL;
1370+
u32 mask = enable ? eee_pm_mask : 0;
13501371
u32 reg;
13511372

1352-
if (enable && !priv->clk_eee_enabled) {
1373+
netdev_info_once(dev, "GENET EEE PM mask: 0x%x\n", eee_pm_mask);
1374+
1375+
if (mask && !priv->clk_eee_enabled) {
13531376
clk_prepare_enable(priv->clk_eee);
13541377
priv->clk_eee_enabled = true;
13551378
}
13561379

13571380
reg = bcmgenet_umac_readl(priv, UMAC_EEE_CTRL);
1358-
if (enable)
1381+
if (mask & GENET_EEE_PM_UMAC)
13591382
reg |= EEE_EN;
13601383
else
13611384
reg &= ~EEE_EN;
13621385
bcmgenet_umac_writel(priv, reg, UMAC_EEE_CTRL);
13631386

13641387
/* Enable EEE and switch to a 27Mhz clock automatically */
13651388
reg = bcmgenet_readl(priv->base + off);
1366-
if (enable)
1389+
if (mask & GENET_EEE_PM_TBUF)
13671390
reg |= TBUF_EEE_EN | TBUF_PM_EN;
13681391
else
13691392
reg &= ~(TBUF_EEE_EN | TBUF_PM_EN);
13701393
bcmgenet_writel(reg, priv->base + off);
13711394

13721395
/* Do the same for thing for RBUF */
13731396
reg = bcmgenet_rbuf_readl(priv, RBUF_ENERGY_CTRL);
1374-
if (enable)
1397+
if (mask & GENET_EEE_PM_RBUF)
13751398
reg |= RBUF_EEE_EN | RBUF_PM_EN;
13761399
else
13771400
reg &= ~(RBUF_EEE_EN | RBUF_PM_EN);
13781401
bcmgenet_rbuf_writel(priv, reg, RBUF_ENERGY_CTRL);
13791402

1380-
if (!enable && priv->clk_eee_enabled) {
1403+
if (!mask && priv->clk_eee_enabled) {
13811404
clk_disable_unprepare(priv->clk_eee);
13821405
priv->clk_eee_enabled = false;
13831406
}

0 commit comments

Comments
 (0)