[linux-yocto] [PATCH 11/11] pch_gbe: Add board_eth_addr function pointer to hw.mac struct

Darren Hart dvhart at linux.intel.com
Sat May 18 14:46:02 PDT 2013


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 <dvhart at linux.intel.com>
---
 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




More information about the linux-yocto mailing list