Re: [PATCH] stmmac: pci: Add support for LS7A bridge chip

2020-11-24 Thread Zhi Li

Hi Jiaxun,

It's my fault, I didn't know to send mail to the mailing list.

We will discuss your suggestions and correct the errors in the code.

I will send a new patch to the mailing list.

Thanks.

-Lizhi


On 11/23/2020 06:31 PM, Jiaxun Yang wrote:

Hi Lizhi,

You didn't send the patch to any mail list, is this intentional?

在 2020/11/23 18:03, lizhi01 写道:

Add gmac driver to support LS7A bridge chip.

Signed-off-by: lizhi01 
---
  arch/mips/configs/loongson3_defconfig  |   4 +-
  drivers/net/ethernet/stmicro/stmmac/Kconfig|   8 +
  drivers/net/ethernet/stmicro/stmmac/Makefile   |   1 +
  .../net/ethernet/stmicro/stmmac/dwmac-loongson.c   | 194 
+

  4 files changed, 206 insertions(+), 1 deletion(-)
  create mode 100644 
drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c


diff --git a/arch/mips/configs/loongson3_defconfig 
b/arch/mips/configs/loongson3_defconfig

index 38a817e..2e8d2be 100644
--- a/arch/mips/configs/loongson3_defconfig
+++ b/arch/mips/configs/loongson3_defconfig
@@ -225,7 +225,9 @@ CONFIG_R8169=y
  # CONFIG_NET_VENDOR_SILAN is not set
  # CONFIG_NET_VENDOR_SIS is not set
  # CONFIG_NET_VENDOR_SMSC is not set
-# CONFIG_NET_VENDOR_STMICRO is not set
+CONFIG_NET_VENDOR_STMICR=y
+CONFIG_STMMAC_ETH=y
+CONFIG_DWMAC_LOONGSON=y
  # CONFIG_NET_VENDOR_SUN is not set
  # CONFIG_NET_VENDOR_TEHUTI is not set
  # CONFIG_NET_VENDOR_TI is not set
diff --git a/drivers/net/ethernet/stmicro/stmmac/Kconfig 
b/drivers/net/ethernet/stmicro/stmmac/Kconfig

index 53f14c5..30117cb 100644
--- a/drivers/net/ethernet/stmicro/stmmac/Kconfig
+++ b/drivers/net/ethernet/stmicro/stmmac/Kconfig
@@ -230,6 +230,14 @@ config DWMAC_INTEL
This selects the Intel platform specific bus support for the
stmmac driver. This driver is used for Intel Quark/EHL/TGL.
  +config DWMAC_LOONGSON
+tristate "Intel GMAC support"
+depends on STMMAC_ETH && PCI
+depends on COMMON_CLK
+help
+  This selects the Intel platform specific bus support for the
+  stmmac driver.


Intel ???


+
  config STMMAC_PCI
  tristate "STMMAC PCI bus support"
  depends on STMMAC_ETH && PCI
diff --git a/drivers/net/ethernet/stmicro/stmmac/Makefile 
b/drivers/net/ethernet/stmicro/stmmac/Makefile

index 24e6145..11ea4569 100644
--- a/drivers/net/ethernet/stmicro/stmmac/Makefile
+++ b/drivers/net/ethernet/stmicro/stmmac/Makefile
@@ -34,4 +34,5 @@ dwmac-altr-socfpga-objs := altr_tse_pcs.o 
dwmac-socfpga.o

obj-$(CONFIG_STMMAC_PCI)+= stmmac-pci.o
  obj-$(CONFIG_DWMAC_INTEL)+= dwmac-intel.o
+obj-$(CONFIG_DWMAC_LOONGSON)+= dwmac-loongson.o
  stmmac-pci-objs:= stmmac_pci.o
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c 
b/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c

new file mode 100644
index 000..765412e
--- /dev/null
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c
@@ -0,0 +1,194 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright (c) 2020, Loongson Corporation
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include "stmmac.h"
+
+struct stmmac_pci_info {
+int (*setup)(struct pci_dev *pdev, struct plat_stmmacenet_data 
*plat);

+};
+
+static void common_default_data(struct plat_stmmacenet_data *plat)
+{
+plat->clk_csr = 2;
+plat->has_gmac = 1;
+plat->force_sf_dma_mode = 1;
+
+plat->mdio_bus_data->needs_reset = true;
+
+plat->multicast_filter_bins = HASH_TABLE_SIZE;
+
+plat->unicast_filter_entries = 1;
+
+plat->maxmtu = JUMBO_LEN;
+
+plat->tx_queues_to_use = 1;
+plat->rx_queues_to_use = 1;
+
+plat->tx_queues_cfg[0].use_prio = false;
+plat->rx_queues_cfg[0].use_prio = false;
+
+plat->rx_queues_cfg[0].pkt_route = 0x0;
+}
+
+static int loongson_default_data(struct pci_dev *pdev, struct 
plat_stmmacenet_data *plat)

+{
+common_default_data(plat);
+
+plat->bus_id = pci_dev_id(pdev);
+plat->phy_addr = -1;
+plat->interface = PHY_INTERFACE_MODE_GMII;
+
+plat->dma_cfg->pbl = 32;
+plat->dma_cfg->pblx8 = true;
+
+plat->multicast_filter_bins = 256;
+
+return 0;
+}



You can merge common and Loongson config as the driver is solely used 
by Loongson.


The callback is not necessary as well...



+
+static const struct stmmac_pci_info loongson_pci_info = {
+.setup = loongson_default_data,
+};
+
+static int loongson_gmac_probe(struct pci_dev *pdev, const struct 
pci_device_id *id)

+{
+struct stmmac_pci_info *info = (struct stmmac_pci_info 
*)id->driver_data;

+struct plat_stmmacenet_data *plat;
+struct stmmac_resources res;
+int ret, i, lpi_irq;
+struct device_node *np;
+
+plat = devm_kzalloc(>dev, sizeof(struct 
plat_stmmacenet_data), GFP_KERNEL);

+if (!plat)
+return -ENOMEM;
+
+plat->mdio_bus_data = devm_kzalloc(>dev, sizeof(struct 
stmmac_mdio_bus_data), GFP_KERNEL);

+if (!plat->mdio_bus_data) {
+kfree(plat);
+return -ENOMEM;
+}
+
+plat->dma_cfg = 

Re: [PATCH] stmmac: pci: Add support for LS7A bridge chip

2020-11-23 Thread Jiaxun Yang

Hi Lizhi,

You didn't send the patch to any mail list, is this intentional?

在 2020/11/23 18:03, lizhi01 写道:

Add gmac driver to support LS7A bridge chip.

Signed-off-by: lizhi01 
---
  arch/mips/configs/loongson3_defconfig  |   4 +-
  drivers/net/ethernet/stmicro/stmmac/Kconfig|   8 +
  drivers/net/ethernet/stmicro/stmmac/Makefile   |   1 +
  .../net/ethernet/stmicro/stmmac/dwmac-loongson.c   | 194 +
  4 files changed, 206 insertions(+), 1 deletion(-)
  create mode 100644 drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c

diff --git a/arch/mips/configs/loongson3_defconfig 
b/arch/mips/configs/loongson3_defconfig
index 38a817e..2e8d2be 100644
--- a/arch/mips/configs/loongson3_defconfig
+++ b/arch/mips/configs/loongson3_defconfig
@@ -225,7 +225,9 @@ CONFIG_R8169=y
  # CONFIG_NET_VENDOR_SILAN is not set
  # CONFIG_NET_VENDOR_SIS is not set
  # CONFIG_NET_VENDOR_SMSC is not set
-# CONFIG_NET_VENDOR_STMICRO is not set
+CONFIG_NET_VENDOR_STMICR=y
+CONFIG_STMMAC_ETH=y
+CONFIG_DWMAC_LOONGSON=y
  # CONFIG_NET_VENDOR_SUN is not set
  # CONFIG_NET_VENDOR_TEHUTI is not set
  # CONFIG_NET_VENDOR_TI is not set
diff --git a/drivers/net/ethernet/stmicro/stmmac/Kconfig 
b/drivers/net/ethernet/stmicro/stmmac/Kconfig
index 53f14c5..30117cb 100644
--- a/drivers/net/ethernet/stmicro/stmmac/Kconfig
+++ b/drivers/net/ethernet/stmicro/stmmac/Kconfig
@@ -230,6 +230,14 @@ config DWMAC_INTEL
  This selects the Intel platform specific bus support for the
  stmmac driver. This driver is used for Intel Quark/EHL/TGL.
  
+config DWMAC_LOONGSON

+   tristate "Intel GMAC support"
+   depends on STMMAC_ETH && PCI
+   depends on COMMON_CLK
+   help
+ This selects the Intel platform specific bus support for the
+ stmmac driver.


Intel ???


+
  config STMMAC_PCI
tristate "STMMAC PCI bus support"
depends on STMMAC_ETH && PCI
diff --git a/drivers/net/ethernet/stmicro/stmmac/Makefile 
b/drivers/net/ethernet/stmicro/stmmac/Makefile
index 24e6145..11ea4569 100644
--- a/drivers/net/ethernet/stmicro/stmmac/Makefile
+++ b/drivers/net/ethernet/stmicro/stmmac/Makefile
@@ -34,4 +34,5 @@ dwmac-altr-socfpga-objs := altr_tse_pcs.o dwmac-socfpga.o
  
  obj-$(CONFIG_STMMAC_PCI)	+= stmmac-pci.o

  obj-$(CONFIG_DWMAC_INTEL) += dwmac-intel.o
+obj-$(CONFIG_DWMAC_LOONGSON)   += dwmac-loongson.o
  stmmac-pci-objs:= stmmac_pci.o
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c 
b/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c
new file mode 100644
index 000..765412e
--- /dev/null
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c
@@ -0,0 +1,194 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright (c) 2020, Loongson Corporation
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include "stmmac.h"
+
+struct stmmac_pci_info {
+   int (*setup)(struct pci_dev *pdev, struct plat_stmmacenet_data *plat);
+};
+
+static void common_default_data(struct plat_stmmacenet_data *plat)
+{
+   plat->clk_csr = 2;
+   plat->has_gmac = 1;
+   plat->force_sf_dma_mode = 1;
+   
+   plat->mdio_bus_data->needs_reset = true;
+
+   plat->multicast_filter_bins = HASH_TABLE_SIZE;
+
+   plat->unicast_filter_entries = 1;
+
+   plat->maxmtu = JUMBO_LEN;
+
+   plat->tx_queues_to_use = 1;
+   plat->rx_queues_to_use = 1;
+
+   plat->tx_queues_cfg[0].use_prio = false;
+   plat->rx_queues_cfg[0].use_prio = false;
+
+   plat->rx_queues_cfg[0].pkt_route = 0x0;
+}
+
+static int loongson_default_data(struct pci_dev *pdev, struct 
plat_stmmacenet_data *plat)
+{
+   common_default_data(plat);
+   
+   plat->bus_id = pci_dev_id(pdev);
+   plat->phy_addr = -1;
+   plat->interface = PHY_INTERFACE_MODE_GMII;
+
+   plat->dma_cfg->pbl = 32;
+   plat->dma_cfg->pblx8 = true;
+
+   plat->multicast_filter_bins = 256;
+
+   return 0;   
+}



You can merge common and Loongson config as the driver is solely used by 
Loongson.


The callback is not necessary as well...



+
+static const struct stmmac_pci_info loongson_pci_info = {
+   .setup = loongson_default_data,
+};
+
+static int loongson_gmac_probe(struct pci_dev *pdev, const struct 
pci_device_id *id)
+{
+   struct stmmac_pci_info *info = (struct stmmac_pci_info 
*)id->driver_data;
+   struct plat_stmmacenet_data *plat;
+   struct stmmac_resources res;
+   int ret, i, lpi_irq;
+   struct device_node *np; 
+   
+   plat = devm_kzalloc(>dev, sizeof(struct plat_stmmacenet_data), 
GFP_KERNEL);
+   if (!plat)
+   return -ENOMEM;
+
+   plat->mdio_bus_data = devm_kzalloc(>dev, sizeof(struct 
stmmac_mdio_bus_data), GFP_KERNEL);
+   if (!plat->mdio_bus_data) {
+   kfree(plat);
+   return -ENOMEM;
+   }
+
+   plat->dma_cfg = devm_kzalloc(>dev, sizeof(struct stmmac_dma_cfg), 
GFP_KERNEL);
+   if (!plat->dma_cfg)  {
+ 

Re: [PATCH] stmmac: pci: Add support for LS7A bridge chip

2020-07-10 Thread Jiaxun Yang




在 2020/7/11 9:35, Jiaxun Yang 写道:



在 2020/7/10 16:51, Zhi Li 写道:

Add gmac platform data to support LS7A bridge chip.

Co-developed-by: Hongbin Li 
Signed-off-by: Hongbin Li 
Signed-off-by: Zhi Li 
---
  drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c | 22 
++

  1 file changed, 22 insertions(+)

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c 
b/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c

index 272cb47..dab2a40 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
@@ -138,6 +138,24 @@ static const struct stmmac_pci_info 
snps_gmac5_pci_info = {

  .setup = snps_gmac5_default_data,
  };
  +static int loongson_default_data(struct pci_dev *pdev, struct 
plat_stmmacenent_data *plat)

+{
+    common_default_data(plat);
+
+    plat->bus_id = pci_dev_id(pdev);
+    plat->phy_addr = 0;
+    plat->interface = PHY_INTERFACE_MODE_GMII;
+
+    plat->dma_cfg->pbl = 32;
+    plat->dma_cfg->pblx8 = true;
+
+    return 0;
+}
+
+static struct stmmac_pci_info loongson_pci_info = {
+    .setup = loongson_default_data;
+};
+
  /**
   * stmmac_pci_probe
   *
@@ -204,6 +222,8 @@ static int stmmac_pci_probe(struct pci_dev *pdev,
  res.addr = pcim_iomap_table(pdev)[i];
  res.wol_irq = pdev->irq;
  res.irq = pdev->irq;
+    if (pdev->vendor == PCI_VENDOR_ID_LOONGSON)
+    res.lpi_irq = pdev->irq + 1;


This can never work.
We're allocating IRQs by irq_domain, not ID.
Please describe IRQ in DeviceTree, and *DO NOT* sne dout untested patch.

Oops, ^ send out

FYI: Here is my solution of GMAC[1] [2], I was too busy to upstream it.
We're using totally different structure than Loongson's out of tree Kernel,
especially in IRQ management.

Please don't simply copy 'n paste code from your company's internal kernel.

Please try to understand how upstream kernel is working and test your 
patches

with upstrem kernel.

[1]: 
https://github.com/FlyGoat/linux/commit/9d6584c186a8007f14dc8bb2524e48a2fd7d689a
[2]: 
https://github.com/FlyGoat/linux/commit/558a256acfeb022e132113e7952a9df3df375302




Thanks.


    return stmmac_dvr_probe(>dev, plat, );
  }
@@ -273,11 +293,13 @@ static SIMPLE_DEV_PM_OPS(stmmac_pm_ops, 
stmmac_pci_suspend, stmmac_pci_resume);

    #define PCI_DEVICE_ID_STMMAC_STMMAC    0x1108
  #define PCI_DEVICE_ID_SYNOPSYS_GMAC5_ID    0x7102
+#define PCI_DEVICE_ID_LOONGSON_GMAC    0x7a03
    static const struct pci_device_id stmmac_id_table[] = {
  { PCI_DEVICE_DATA(STMMAC, STMMAC, _pci_info) },
  { PCI_DEVICE_DATA(STMICRO, MAC, _pci_info) },
  { PCI_DEVICE_DATA(SYNOPSYS, GMAC5_ID, _gmac5_pci_info) },
+    { PCI_DEVICE_DATA(LOONGSON, GMAC, _pci_info) },
  {}
  };

- Jiaxun


Re: [PATCH] stmmac: pci: Add support for LS7A bridge chip

2020-07-10 Thread Jiaxun Yang




在 2020/7/10 16:51, Zhi Li 写道:

Add gmac platform data to support LS7A bridge chip.

Co-developed-by: Hongbin Li 
Signed-off-by: Hongbin Li 
Signed-off-by: Zhi Li 
---
  drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c | 22 ++
  1 file changed, 22 insertions(+)

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c 
b/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
index 272cb47..dab2a40 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
@@ -138,6 +138,24 @@ static const struct stmmac_pci_info snps_gmac5_pci_info = {
.setup = snps_gmac5_default_data,
  };
  
+static int loongson_default_data(struct pci_dev *pdev, struct plat_stmmacenent_data *plat)

+{
+   common_default_data(plat);
+
+   plat->bus_id = pci_dev_id(pdev);
+   plat->phy_addr = 0;
+   plat->interface = PHY_INTERFACE_MODE_GMII;
+
+   plat->dma_cfg->pbl = 32;
+   plat->dma_cfg->pblx8 = true;
+
+   return 0;
+}
+
+static struct stmmac_pci_info loongson_pci_info = {
+   .setup = loongson_default_data;
+};
+
  /**
   * stmmac_pci_probe
   *
@@ -204,6 +222,8 @@ static int stmmac_pci_probe(struct pci_dev *pdev,
res.addr = pcim_iomap_table(pdev)[i];
res.wol_irq = pdev->irq;
res.irq = pdev->irq;
+   if (pdev->vendor == PCI_VENDOR_ID_LOONGSON)
+   res.lpi_irq = pdev->irq + 1;


This can never work.
We're allocating IRQs by irq_domain, not ID.
Please describe IRQ in DeviceTree, and *DO NOT* sne dout untested patch.

Thanks.

  
  	return stmmac_dvr_probe(>dev, plat, );

  }
@@ -273,11 +293,13 @@ static SIMPLE_DEV_PM_OPS(stmmac_pm_ops, 
stmmac_pci_suspend, stmmac_pci_resume);
  
  #define PCI_DEVICE_ID_STMMAC_STMMAC		0x1108

  #define PCI_DEVICE_ID_SYNOPSYS_GMAC5_ID   0x7102
+#define PCI_DEVICE_ID_LOONGSON_GMAC0x7a03
  
  static const struct pci_device_id stmmac_id_table[] = {

{ PCI_DEVICE_DATA(STMMAC, STMMAC, _pci_info) },
{ PCI_DEVICE_DATA(STMICRO, MAC, _pci_info) },
{ PCI_DEVICE_DATA(SYNOPSYS, GMAC5_ID, _gmac5_pci_info) },
+   { PCI_DEVICE_DATA(LOONGSON, GMAC, _pci_info) },
{}
  };
  

- Jiaxun


Re: [PATCH] stmmac: pci: Add support for LS7A bridge chip

2020-07-10 Thread Jakub Kicinski
On Fri, 10 Jul 2020 16:51:50 +0800 Zhi Li wrote:
> Add gmac platform data to support LS7A bridge chip.
> 
> Co-developed-by: Hongbin Li 
> Signed-off-by: Hongbin Li 
> Signed-off-by: Zhi Li 

This appears to not build with allmodconfig:

../drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:22:62: note: expected 
‘struct plat_stmmacenet_data *’ but argument is of type ‘struct 
plat_stmmacenent_data *’
   22 | static void common_default_data(struct plat_stmmacenet_data *plat)
  | ~^~~~
../drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:145:6: error: invalid use 
of undefined type ‘struct plat_stmmacenent_data’
  145 |  plat->bus_id = pci_dev_id(pdev);
  |  ^~
../drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:146:6: error: invalid use 
of undefined type ‘struct plat_stmmacenent_data’
  146 |  plat->phy_addr = 0;
  |  ^~
../drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:147:6: error: invalid use 
of undefined type ‘struct plat_stmmacenent_data’
  147 |  plat->interface = PHY_INTERFACE_MODE_GMII;
  |  ^~
../drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:149:6: error: invalid use 
of undefined type ‘struct plat_stmmacenent_data’
  149 |  plat->dma_cfg->pbl = 32;
  |  ^~
../drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:150:6: error: invalid use 
of undefined type ‘struct plat_stmmacenent_data’
  150 |  plat->dma_cfg->pblx8 = true;
  |  ^~
../drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c: At top level:
../drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:156:11: error: 
initialization of ‘int (*)(struct pci_dev *, struct plat_stmmacenet_data *)’ 
from incompatible pointer type ‘int (*)(struct pci_dev *, struct 
plat_stmmacenent_data *)’ [-Werror=incompatible-pointer-types]
  156 |  .setup = loongson_default_data;
  |   ^
../drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:156:11: note: (near 
initialization for ‘loongson_pci_info.setup’)
../drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:156:32: error: expected ‘}’ 
before ‘;’ token
  156 |  .setup = loongson_default_data;
  |^
../drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:155:51: note: to match this 
‘{’
  155 | static struct stmmac_pci_info loongson_pci_info = {
  |   ^
cc1: some warnings being treated as errors
make[6]: *** [drivers/net/ethernet/stmicro/stmmac/stmmac_pci.o] Error 1
make[5]: *** [drivers/net/ethernet/stmicro/stmmac] Error 2
make[4]: *** [drivers/net/ethernet/stmicro] Error 2
make[3]: *** [drivers/net/ethernet] Error 2
make[2]: *** [drivers/net] Error 2
make[2]: *** Waiting for unfinished jobs
make[1]: *** [drivers] Error 2
make: *** [__sub-make] Error 2


[PATCH] stmmac: pci: Add support for LS7A bridge chip

2020-07-10 Thread Zhi Li
Add gmac platform data to support LS7A bridge chip.

Co-developed-by: Hongbin Li 
Signed-off-by: Hongbin Li 
Signed-off-by: Zhi Li 
---
 drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c | 22 ++
 1 file changed, 22 insertions(+)

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c 
b/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
index 272cb47..dab2a40 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
@@ -138,6 +138,24 @@ static const struct stmmac_pci_info snps_gmac5_pci_info = {
.setup = snps_gmac5_default_data,
 };
 
+static int loongson_default_data(struct pci_dev *pdev, struct 
plat_stmmacenent_data *plat)
+{
+   common_default_data(plat);
+
+   plat->bus_id = pci_dev_id(pdev);
+   plat->phy_addr = 0;
+   plat->interface = PHY_INTERFACE_MODE_GMII;
+
+   plat->dma_cfg->pbl = 32;
+   plat->dma_cfg->pblx8 = true;
+
+   return 0;
+}
+
+static struct stmmac_pci_info loongson_pci_info = {
+   .setup = loongson_default_data;
+};
+
 /**
  * stmmac_pci_probe
  *
@@ -204,6 +222,8 @@ static int stmmac_pci_probe(struct pci_dev *pdev,
res.addr = pcim_iomap_table(pdev)[i];
res.wol_irq = pdev->irq;
res.irq = pdev->irq;
+   if (pdev->vendor == PCI_VENDOR_ID_LOONGSON)
+   res.lpi_irq = pdev->irq + 1;
 
return stmmac_dvr_probe(>dev, plat, );
 }
@@ -273,11 +293,13 @@ static SIMPLE_DEV_PM_OPS(stmmac_pm_ops, 
stmmac_pci_suspend, stmmac_pci_resume);
 
 #define PCI_DEVICE_ID_STMMAC_STMMAC0x1108
 #define PCI_DEVICE_ID_SYNOPSYS_GMAC5_ID0x7102
+#define PCI_DEVICE_ID_LOONGSON_GMAC0x7a03
 
 static const struct pci_device_id stmmac_id_table[] = {
{ PCI_DEVICE_DATA(STMMAC, STMMAC, _pci_info) },
{ PCI_DEVICE_DATA(STMICRO, MAC, _pci_info) },
{ PCI_DEVICE_DATA(SYNOPSYS, GMAC5_ID, _gmac5_pci_info) },
+   { PCI_DEVICE_DATA(LOONGSON, GMAC, _pci_info) },
{}
 };
 
-- 
2.1.0