stmmac: rework the code to get the Synopsys ID (v3)
authorGiuseppe CAVALLARO <peppe.cavallaro@st.com>
Thu, 1 Sep 2011 21:51:40 +0000 (21:51 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 15 Sep 2011 19:40:01 +0000 (15:40 -0400)
The Synopsys ID is now passed from the MAC core
to the main. This info will be used for managing
the HW cap register (supported in the new GMAC
generations).

Signed-off-by: Giuseppe Cavallaro <peppe.cavallaro@st.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/stmicro/stmmac/common.h
drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c
drivers/net/ethernet/stmicro/stmmac/dwmac100_core.c
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c

index e08fee880f145a8df23ec872735fc27d8273cbd8..65b1e56a97c9693d1910f79120d468d886651e31 100644 (file)
@@ -230,6 +230,7 @@ struct mac_device_info {
        const struct stmmac_dma_ops     *dma;
        struct mii_regs mii;    /* MII register Addresses */
        struct mac_link link;
+       unsigned int synopsys_uid;
 };
 
 struct mac_device_info *dwmac1000_setup(void __iomem *ioaddr);
index 9ba9cae5a60ab35bcd5803382f129edbeee80dc9..b1c48b975945b951c27e1853ad3388283bcf6dbe 100644 (file)
@@ -224,10 +224,7 @@ static const struct stmmac_ops dwmac1000_ops = {
 struct mac_device_info *dwmac1000_setup(void __iomem *ioaddr)
 {
        struct mac_device_info *mac;
-       u32 uid = readl(ioaddr + GMAC_VERSION);
-
-       pr_info("\tDWMAC1000 - user ID: 0x%x, Synopsys ID: 0x%x\n",
-               ((uid & 0x0000ff00) >> 8), (uid & 0x000000ff));
+       u32 hwid = readl(ioaddr + GMAC_VERSION);
 
        mac = kzalloc(sizeof(const struct mac_device_info), GFP_KERNEL);
        if (!mac)
@@ -241,6 +238,7 @@ struct mac_device_info *dwmac1000_setup(void __iomem *ioaddr)
        mac->link.speed = GMAC_CONTROL_FES;
        mac->mii.addr = GMAC_MII_ADDR;
        mac->mii.data = GMAC_MII_DATA;
+       mac->synopsys_uid = hwid;
 
        return mac;
 }
index aacfc6eade50710e6d8fd9757656d517705bd5ab..138fb8dd1e878f3f5512cd4baf19b1d197a18e2b 100644 (file)
@@ -188,6 +188,7 @@ struct mac_device_info *dwmac100_setup(void __iomem *ioaddr)
        mac->link.speed = 0;
        mac->mii.addr = MAC_MII_ADDR;
        mac->mii.data = MAC_MII_DATA;
+       mac->synopsys_uid = 0;
 
        return mac;
 }
index caaad7b14621610a6aa86543698ee2eed31b2c70..eb210ca2497bac813ef540308cff247861faf1af 100644 (file)
@@ -763,6 +763,23 @@ static void stmmac_mmc_setup(struct stmmac_priv *priv)
        memset(&priv->mmc, 0, sizeof(struct stmmac_counters));
 }
 
+static u32 stmmac_get_synopsys_id(struct stmmac_priv *priv)
+{
+       u32 hwid = priv->hw->synopsys_uid;
+
+       /* Only check valid Synopsys Id because old MAC chips
+        * have no HW registers where get the ID */
+       if (likely(hwid)) {
+               u32 uid = ((hwid & 0x0000ff00) >> 8);
+               u32 synid = (hwid & 0x000000ff);
+
+               pr_info("STMMAC - user ID: 0x%x, Synopsys ID: 0x%x\n",
+                       uid, synid);
+
+               return synid;
+       }
+       return 0;
+}
 /**
  *  stmmac_open - open entry point of the driver
  *  @dev : pointer to the device structure.
@@ -835,7 +852,8 @@ static int stmmac_open(struct net_device *dev)
        /* Initialize the MAC Core */
        priv->hw->mac->core_init(priv->ioaddr);
 
-       priv->rx_coe = priv->hw->mac->rx_coe(priv->ioaddr);
+       stmmac_get_synopsys_id(priv);
+
        if (priv->rx_coe)
                pr_info("stmmac: Rx Checksum Offload Engine supported\n");
        if (priv->plat->tx_coe)