On 06/29/2018 04:40 AM, Bartosz Golaszewski wrote:
From: Bartosz Golaszewski <bgolaszewski@xxxxxxxxxxxx>
On da850-evm board we can read the MAC address from MTD. It's currently
done in the relevant board file, but we want to get rid of all the MAC
reading callbacks from the board file (SPI and NAND). Move the reading
of the MAC address from SPI to the emac driver's probe function.
Signed-off-by: Bartosz Golaszewski <bgolaszewski@xxxxxxxxxxxx>
---
 drivers/net/ethernet/ti/davinci_emac.c | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/ti/davinci_emac.c b/drivers/net/ethernet/ti/davinci_emac.c
index a1a6445b5a7e..48e6a7755811 100644
--- a/drivers/net/ethernet/ti/davinci_emac.c
+++ b/drivers/net/ethernet/ti/davinci_emac.c
@@ -67,7 +67,7 @@
 #include <linux/of_irq.h>
 #include <linux/of_net.h>
 #include <linux/mfd/syscon.h>
-
+#include <linux/mtd/mtd.h>
 #include <asm/irq.h>
 #include <asm/page.h>
@@ -1783,7 +1783,10 @@ static int davinci_emac_probe(struct platform_device *pdev)
ÂÂÂÂÂ struct cpdma_params dma_params;
ÂÂÂÂÂ struct clk *emac_clk;
ÂÂÂÂÂ unsigned long emac_bus_frequency;
-
+#ifdef CONFIG_MTD
+ÂÂÂ size_t mac_addr_len;
+ÂÂÂ struct mtd_info *mtd;
+#endif /* CONFIG_MTD */
ÂÂÂÂÂ /* obtain emac clock from kernel */
ÂÂÂÂÂ emac_clk = devm_clk_get(&pdev->dev, NULL);
@@ -1815,6 +1818,19 @@ static int davinci_emac_probe(struct platform_device *pdev)
ÂÂÂÂÂÂÂÂÂ goto err_free_netdev;
ÂÂÂÂÂ }
+#ifdef CONFIG_MTD
What about the case when MTD is compiled as a module?
+ÂÂÂ mtd = get_mtd_device_nm("MAC-Address");
What about the case when PTR_ERR(mtd) == -EPROBE_DEFER?
+ÂÂÂ if (!IS_ERR(mtd)) {
+ÂÂÂÂÂÂÂ rc = mtd_read(mtd, 0, ETH_ALEN,
+ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ &mac_addr_len, priv->mac_addr);
+ÂÂÂÂÂÂÂ if (rc == 0)
+ÂÂÂÂÂÂÂÂÂÂÂ dev_info(&pdev->dev,
+ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ "Read MAC addr from SPI Flash: %pM\n",
+ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ priv->mac_addr);
+ÂÂÂÂÂÂÂ put_mtd_device(mtd);
+ÂÂÂ }
+#endif /* CONFIG_MTD */
+
ÂÂÂÂÂ /* MAC addr and PHY mask , RMII enable info from platform_data */
ÂÂÂÂÂ memcpy(priv->mac_addr, pdata->mac_addr, ETH_ALEN);
ÂÂÂÂÂ priv->phy_id = pdata->phy_id;