[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