Commit f31e5ff0 authored by Zhao Qunqin's avatar Zhao Qunqin Committed by Hongchen Zhang
Browse files

net: stmmac: dwmac-loongson: fix Mac DMA reset

LoongArch inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/IBENRY


CVE: NA

--------------------------------

DMA reset of Loongson's Mac may take over a second

Signed-off-by: default avatarZhao Qunqin <zhaoqunqin@loongson.cn>
Change-Id: I62011c25f54a240ec0283209eb020d5e42b9eaef
parent 0b539b10
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -443,6 +443,19 @@ static struct mac_device_info *loongson_dwmac_setup(void *apriv)
	return mac;
}

static int loongson_fix_soc_reset(void *priv, void __iomem *ioaddr)
{
	u32 value = readl(ioaddr + DMA_BUS_MODE);

	/* DMA SW reset */
	value |= DMA_BUS_MODE_SFT_RESET;
	writel(value, ioaddr + DMA_BUS_MODE);

	return readl_poll_timeout(ioaddr + DMA_BUS_MODE, value,
				  !(value & DMA_BUS_MODE_SFT_RESET),
				  10000, 2000000);
}

static int loongson_dwmac_probe(struct pci_dev *pdev, const struct pci_device_id *id)
{
	struct plat_stmmacenet_data *plat;
@@ -518,6 +531,7 @@ static int loongson_dwmac_probe(struct pci_dev *pdev, const struct pci_device_id

	plat->bsp_priv = ld;
	plat->setup = loongson_dwmac_setup;
	plat->fix_soc_reset = loongson_fix_soc_reset;
	ld->dev = &pdev->dev;

	memset(&res, 0, sizeof(res));