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

Commit 5fea7f10 authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'stmmac-fixes'



Jose Abreu says:

====================
net: stmmac: Misc Fixes

Some small fixes for stmmac targeting -net. Detailed info in commit log.
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents e8b108b0 fa0be0a4
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -263,6 +263,7 @@ static int dwxgmac2_dma_interrupt(void __iomem *ioaddr,
				  struct stmmac_extra_stats *x, u32 chan)
{
	u32 intr_status = readl(ioaddr + XGMAC_DMA_CH_STATUS(chan));
	u32 intr_en = readl(ioaddr + XGMAC_DMA_CH_INT_EN(chan));
	int ret = 0;

	/* ABNORMAL interrupts */
@@ -282,8 +283,7 @@ static int dwxgmac2_dma_interrupt(void __iomem *ioaddr,
		x->normal_irq_n++;

		if (likely(intr_status & XGMAC_RI)) {
			u32 value = readl(ioaddr + XGMAC_DMA_CH_INT_EN(chan));
			if (likely(value & XGMAC_RIE)) {
			if (likely(intr_en & XGMAC_RIE)) {
				x->rx_normal_irq_n++;
				ret |= handle_rx;
			}
@@ -295,7 +295,7 @@ static int dwxgmac2_dma_interrupt(void __iomem *ioaddr,
	}

	/* Clear interrupts */
	writel(~0x0, ioaddr + XGMAC_DMA_CH_STATUS(chan));
	writel(intr_en & intr_status, ioaddr + XGMAC_DMA_CH_STATUS(chan));

	return ret;
}
+26 −25
Original line number Diff line number Diff line
@@ -3525,27 +3525,28 @@ static int stmmac_napi_poll(struct napi_struct *napi, int budget)
	struct stmmac_channel *ch =
		container_of(napi, struct stmmac_channel, napi);
	struct stmmac_priv *priv = ch->priv_data;
	int work_done = 0, work_rem = budget;
	int work_done, rx_done = 0, tx_done = 0;
	u32 chan = ch->index;

	priv->xstats.napi_poll++;

	if (ch->has_tx) {
		int done = stmmac_tx_clean(priv, work_rem, chan);
	if (ch->has_tx)
		tx_done = stmmac_tx_clean(priv, budget, chan);
	if (ch->has_rx)
		rx_done = stmmac_rx(priv, budget, chan);

		work_done += done;
		work_rem -= done;
	}

	if (ch->has_rx) {
		int done = stmmac_rx(priv, work_rem, chan);
	work_done = max(rx_done, tx_done);
	work_done = min(work_done, budget);

		work_done += done;
		work_rem -= done;
	}
	if (work_done < budget && napi_complete_done(napi, work_done)) {
		int stat;

	if (work_done < budget && napi_complete_done(napi, work_done))
		stmmac_enable_dma_irq(priv, priv->ioaddr, chan);
		stat = stmmac_dma_interrupt_status(priv, priv->ioaddr,
						   &priv->xstats, chan);
		if (stat && napi_reschedule(napi))
			stmmac_disable_dma_irq(priv, priv->ioaddr, chan);
	}

	return work_done;
}
@@ -4168,6 +4169,18 @@ static int stmmac_hw_init(struct stmmac_priv *priv)
			return ret;
	}

	/* Rx Watchdog is available in the COREs newer than the 3.40.
	 * In some case, for example on bugged HW this feature
	 * has to be disable and this can be done by passing the
	 * riwt_off field from the platform.
	 */
	if (((priv->synopsys_id >= DWMAC_CORE_3_50) ||
	    (priv->plat->has_xgmac)) && (!priv->plat->riwt_off)) {
		priv->use_riwt = 1;
		dev_info(priv->device,
			 "Enable RX Mitigation via HW Watchdog Timer\n");
	}

	return 0;
}

@@ -4300,18 +4313,6 @@ int stmmac_dvr_probe(struct device *device,
	if (flow_ctrl)
		priv->flow_ctrl = FLOW_AUTO;	/* RX/TX pause on */

	/* Rx Watchdog is available in the COREs newer than the 3.40.
	 * In some case, for example on bugged HW this feature
	 * has to be disable and this can be done by passing the
	 * riwt_off field from the platform.
	 */
	if (((priv->synopsys_id >= DWMAC_CORE_3_50) ||
	    (priv->plat->has_xgmac)) && (!priv->plat->riwt_off)) {
		priv->use_riwt = 1;
		dev_info(priv->device,
			 "Enable RX Mitigation via HW Watchdog Timer\n");
	}

	/* Setup channels NAPI */
	maxq = max(priv->plat->rx_queues_to_use, priv->plat->tx_queues_to_use);

+10 −0
Original line number Diff line number Diff line
@@ -299,7 +299,17 @@ static int stmmac_pci_probe(struct pci_dev *pdev,
 */
static void stmmac_pci_remove(struct pci_dev *pdev)
{
	int i;

	stmmac_dvr_remove(&pdev->dev);

	for (i = 0; i <= PCI_STD_RESOURCE_END; i++) {
		if (pci_resource_len(pdev, i) == 0)
			continue;
		pcim_iounmap_regions(pdev, BIT(i));
		break;
	}

	pci_disable_device(pdev);
}

+2 −0
Original line number Diff line number Diff line
@@ -301,6 +301,8 @@ static int tc_setup_cbs(struct stmmac_priv *priv,
	/* Queue 0 is not AVB capable */
	if (queue <= 0 || queue >= tx_queues_count)
		return -EINVAL;
	if (!priv->dma_cap.av)
		return -EOPNOTSUPP;
	if (priv->speed != SPEED_100 && priv->speed != SPEED_1000)
		return -EOPNOTSUPP;