Some boards using this chip do not have the EEPROM. Of these,
some may provide an alternate means for retrieving a MAC address. The
MinnowBoard stores its MAC address in flash which the firmware exports
via EFI.

Add a board_eth_addr() callback pointer and use it, if defined, to read
the address instead of relying on the configuration registers.

Signed-off-by: Darren Hart <[email protected]>
---
 drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe.h      | 2 ++
 drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c | 5 +++++
 2 files changed, 7 insertions(+)

diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe.h 
b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe.h
index bd4e0c5..81e7ff6 100644
--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe.h
+++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe.h
@@ -364,6 +364,7 @@ struct pch_gbe_functions {
  * @autoneg:           Auto negotiation enable
  * @link_speed:                Link speed
  * @link_duplex:       Link duplex
+ * @board_eth_addr:    Board specific method to read the Ethernet address
  */
 struct pch_gbe_mac_info {
        u8 addr[6];
@@ -375,6 +376,7 @@ struct pch_gbe_mac_info {
        u8 autoneg;
        u16 link_speed;
        u16 link_duplex;
+       void (*board_eth_addr) (u8 *addr);
 };
 
 /**
diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c 
b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
index f487ad7..b8a2bb1 100644
--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
+++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
@@ -2608,6 +2608,7 @@ static int pch_gbe_probe(struct pci_dev *pdev,
        if (minnow_detect()) {
                adapter->hw.phy.tx_clk_delay = true;
                minnow_phy_reset();
+               adapter->hw.mac.board_eth_addr = minnow_eth_addr;
        }
 
        adapter->netdev = netdev;
@@ -2653,6 +2654,10 @@ static int pch_gbe_probe(struct pci_dev *pdev,
        pch_gbe_hal_get_bus_info(&adapter->hw);
 
        /* Read the MAC address. and store to the private data */
+       if (adapter->hw.mac.board_eth_addr) {
+               adapter->hw.mac.board_eth_addr(adapter->hw.mac.addr);
+               pch_gbe_mac_mar_set(&adapter->hw, adapter->hw.mac.addr, 0);
+       }
        ret = pch_gbe_hal_read_mac_addr(&adapter->hw);
        if (ret) {
                dev_err(&pdev->dev, "MAC address Read Error\n");
-- 
1.8.1.2

_______________________________________________
linux-yocto mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/linux-yocto

Reply via email to