Jelajahi Sumber

stmmac: get the descriptor structure from platform

Output for chip that uses the Enhanced descriptors:
[snip]
STMMAC driver:
	platform registration... done!
	DWMAC1000 - user ID: 0x10, Synopsys ID: 0x33
	Enhanced descriptor structure
	no valid MAC address;please, use ifconfig or nwhwconfig!
	eth0 - (dev. name: stmmaceth - id: 0, IRQ #134
	IO base addr: 0xfd110000)
STMMAC MII Bus: probed
[snip]

Signed-off-by: Giuseppe Cavallaro <peppe.cavallaro@st.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Giuseppe CAVALLARO 15 tahun lalu
induk
melakukan
3d90c508dc
2 mengubah file dengan 9 tambahan dan 4 penghapusan
  1. 1 0
      drivers/net/stmmac/stmmac.h
  2. 8 4
      drivers/net/stmmac/stmmac_main.c

+ 1 - 0
drivers/net/stmmac/stmmac.h

@@ -93,6 +93,7 @@ struct stmmac_priv {
 #ifdef STMMAC_VLAN_TAG_USED
 #ifdef STMMAC_VLAN_TAG_USED
 	struct vlan_group *vlgrp;
 	struct vlan_group *vlgrp;
 #endif
 #endif
+	int enh_desc;
 };
 };
 
 
 #ifdef CONFIG_STM_DRIVERS
 #ifdef CONFIG_STM_DRIVERS

+ 8 - 4
drivers/net/stmmac/stmmac_main.c

@@ -1581,13 +1581,16 @@ static int stmmac_mac_device_setup(struct net_device *dev)
 
 
 	struct mac_device_info *device;
 	struct mac_device_info *device;
 
 
-	if (priv->is_gmac) {
+	if (priv->is_gmac)
 		device = dwmac1000_setup(ioaddr);
 		device = dwmac1000_setup(ioaddr);
-		device->desc = &enh_desc_ops;
-	} else {
+	else
 		device = dwmac100_setup(ioaddr);
 		device = dwmac100_setup(ioaddr);
+
+	if (priv->enh_desc) {
+		device->desc = &enh_desc_ops;
+		pr_info("\tEnhanced descriptor structure\n");
+	} else
 		device->desc = &ndesc_ops;
 		device->desc = &ndesc_ops;
-	}
 
 
 	if (!device)
 	if (!device)
 		return -ENOMEM;
 		return -ENOMEM;
@@ -1729,6 +1732,7 @@ static int stmmac_dvr_probe(struct platform_device *pdev)
 	priv->bus_id = plat_dat->bus_id;
 	priv->bus_id = plat_dat->bus_id;
 	priv->pbl = plat_dat->pbl;	/* TLI */
 	priv->pbl = plat_dat->pbl;	/* TLI */
 	priv->is_gmac = plat_dat->has_gmac;	/* GMAC is on board */
 	priv->is_gmac = plat_dat->has_gmac;	/* GMAC is on board */
+	priv->enh_desc = plat_dat->enh_desc;
 
 
 	platform_set_drvdata(pdev, ndev);
 	platform_set_drvdata(pdev, ndev);