Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 740d6f18 authored by Timur Tabi's avatar Timur Tabi Committed by David S. Miller
Browse files

net: qcom/emac: clean up some TX/RX error messages



Some of the error messages that are printed by the interrupt handlers
are poorly written.  For example, many don't include a device prefix,
so there's no indication that they are EMAC errors.

Also use rate limiting for all messages that could be printed from
interrupt context.

Signed-off-by: default avatarTimur Tabi <timur@codeaurora.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent df1ec1b9
Loading
Loading
Loading
Loading
+6 −9
Original line number Diff line number Diff line
@@ -68,10 +68,10 @@ static void emac_sgmii_link_init(struct emac_adapter *adpt)
	writel(val, phy->base + EMAC_SGMII_PHY_AUTONEG_CFG2);
}

static int emac_sgmii_irq_clear(struct emac_adapter *adpt, u32 irq_bits)
static int emac_sgmii_irq_clear(struct emac_adapter *adpt, u8 irq_bits)
{
	struct emac_sgmii *phy = &adpt->phy;
	u32 status;
	u8 status;

	writel_relaxed(irq_bits, phy->base + EMAC_SGMII_PHY_INTERRUPT_CLEAR);
	writel_relaxed(IRQ_GLOBAL_CLEAR, phy->base + EMAC_SGMII_PHY_IRQ_CMD);
@@ -86,9 +86,8 @@ static int emac_sgmii_irq_clear(struct emac_adapter *adpt, u32 irq_bits)
				      EMAC_SGMII_PHY_INTERRUPT_STATUS,
				      status, !(status & irq_bits), 1,
				      SGMII_PHY_IRQ_CLR_WAIT_TIME)) {
		netdev_err(adpt->netdev,
			   "error: failed clear SGMII irq: status:0x%x bits:0x%x\n",
			   status, irq_bits);
		net_err_ratelimited("%s: failed to clear SGMII irq: status:0x%x bits:0x%x\n",
				    adpt->netdev->name, status, irq_bits);
		return -EIO;
	}

@@ -109,7 +108,7 @@ static irqreturn_t emac_sgmii_interrupt(int irq, void *data)
{
	struct emac_adapter *adpt = data;
	struct emac_sgmii *phy = &adpt->phy;
	u32 status;
	u8 status;

	status = readl(phy->base + EMAC_SGMII_PHY_INTERRUPT_STATUS);
	status &= SGMII_ISR_MASK;
@@ -139,10 +138,8 @@ static irqreturn_t emac_sgmii_interrupt(int irq, void *data)
		atomic_set(&phy->decode_error_count, 0);
	}

	if (emac_sgmii_irq_clear(adpt, status)) {
		netdev_warn(adpt->netdev, "failed to clear SGMII interrupt\n");
	if (emac_sgmii_irq_clear(adpt, status))
		schedule_work(&adpt->work_thread);
	}

	return IRQ_HANDLED;
}
+4 −4
Original line number Diff line number Diff line
@@ -148,9 +148,8 @@ static irqreturn_t emac_isr(int _irq, void *data)
		goto exit;

	if (status & ISR_ERROR) {
		netif_warn(adpt,  intr, adpt->netdev,
			   "warning: error irq status 0x%lx\n",
			   status & ISR_ERROR);
		net_err_ratelimited("%s: error interrupt 0x%lx\n",
				    adpt->netdev->name, status & ISR_ERROR);
		/* reset MAC */
		schedule_work(&adpt->work_thread);
	}
@@ -169,7 +168,8 @@ static irqreturn_t emac_isr(int _irq, void *data)
		emac_mac_tx_process(adpt, &adpt->tx_q);

	if (status & ISR_OVER)
		net_warn_ratelimited("warning: TX/RX overflow\n");
		net_warn_ratelimited("%s: TX/RX overflow interrupt\n",
				     adpt->netdev->name);

exit:
	/* enable the interrupt */