From: Stephen Boyd <sboyd@codeaurora.org>
To: netdev@vger.kernel.org
Cc: Ben Dooks <ben@simtec.co.uk>,
linux-kernel@vger.kernel.org, Sebastien Jan <s-jan@ti.com>
Subject: [PATCH 3/5] KSZ8851-SNL: Add support for EEPROM MAC address
Date: Mon, 21 Nov 2011 10:57:58 -0800 [thread overview]
Message-ID: <1321901880-12883-4-git-send-email-sboyd@codeaurora.org> (raw)
In-Reply-To: <1321901880-12883-1-git-send-email-sboyd@codeaurora.org>
From: Ben Dooks <ben@simtec.co.uk>
Add support for reading the MAC address from the system registers if there
is an EEPROM present. This involves caching the KS_CCR register for later
use (will also be useful for ETHTOOL support) and adding a print to say
that there is an EEPROM present.
Signed-off-by: Ben Dooks <ben@simtec.co.uk>
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
---
drivers/net/ethernet/micrel/ks8851.c | 41 ++++++++++++++++++++++++++++-----
1 files changed, 34 insertions(+), 7 deletions(-)
diff --git a/drivers/net/ethernet/micrel/ks8851.c b/drivers/net/ethernet/micrel/ks8851.c
index f56743a..d1669bc 100644
--- a/drivers/net/ethernet/micrel/ks8851.c
+++ b/drivers/net/ethernet/micrel/ks8851.c
@@ -367,21 +367,47 @@ static int ks8851_write_mac_addr(struct net_device *dev)
}
/**
+ * ks8851_read_mac_addr - read mac address from device registers
+ * @dev: The network device
+ *
+ * Update our copy of the KS8851 MAC address from the registers of @dev.
+*/
+static void ks8851_read_mac_addr(struct net_device *dev)
+{
+ struct ks8851_net *ks = netdev_priv(dev);
+ int i;
+
+ mutex_lock(&ks->lock);
+
+ for (i = 0; i < ETH_ALEN; i++)
+ dev->dev_addr[i] = ks8851_rdreg8(ks, KS_MAR(i));
+
+ mutex_unlock(&ks->lock);
+}
+
+/**
* ks8851_init_mac - initialise the mac address
* @ks: The device structure
*
* Get or create the initial mac address for the device and then set that
- * into the station address register. Currently we assume that the device
- * does not have a valid mac address in it, and so we use random_ether_addr()
+ * into the station address register. If there is an EEPROM present, then
+ * we try that. If no valid mac address is found we use random_ether_addr()
* to create a new one.
- *
- * In future, the driver should check to see if the device has an EEPROM
- * attached and whether that has a valid ethernet address in it.
*/
static void ks8851_init_mac(struct ks8851_net *ks)
{
struct net_device *dev = ks->netdev;
+ /* first, try reading what we've got already */
+ if (ks->rc_ccr & CCR_EEPROM) {
+ ks8851_read_mac_addr(dev);
+ if (is_valid_ether_addr(dev->dev_addr))
+ return;
+
+ netdev_err(ks->netdev, "invalid mac address read %pM\n",
+ dev->dev_addr);
+ }
+
random_ether_addr(dev->dev_addr);
ks8851_write_mac_addr(dev);
}
@@ -1674,9 +1700,10 @@ static int __devinit ks8851_probe(struct spi_device *spi)
goto err_netdev;
}
- netdev_info(ndev, "revision %d, MAC %pM, IRQ %d\n",
+ netdev_info(ndev, "revision %d, MAC %pM, IRQ %d, %s EEPROM\n",
CIDER_REV_GET(ks8851_rdreg16(ks, KS_CIDER)),
- ndev->dev_addr, ndev->irq);
+ ndev->dev_addr, ndev->irq,
+ ks->rc_ccr & CCR_EEPROM ? "has" : "no");
return 0;
--
Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
next prev parent reply other threads:[~2011-11-21 18:58 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-21 18:57 [PATCH 0/5] ks8851 MAC and eeprom updates Stephen Boyd
2011-11-21 18:57 ` [PATCH 1/5] eeprom_93cx6: Add data direction control Stephen Boyd
2011-11-21 18:57 ` [PATCH 2/5] eeprom_93cx6: Add write support Stephen Boyd
2011-11-21 18:57 ` Stephen Boyd [this message]
2011-11-21 18:57 ` [PATCH 4/5] KSZ8851-SNL: Fix MAC address change problem Stephen Boyd
2011-11-21 18:58 ` [PATCH 5/5] KSZ8851-SNL: Add ethtool support for EEPROM via eeprom_93cx6 Stephen Boyd
2011-11-26 19:57 ` [PATCH 0/5] ks8851 MAC and eeprom updates David Miller
-- strict thread matches above, loose matches on Subject: below --
2011-10-27 2:17 Stephen Boyd
2011-10-27 2:17 ` [PATCH 3/5] KSZ8851-SNL: Add support for EEPROM MAC address Stephen Boyd
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1321901880-12883-4-git-send-email-sboyd@codeaurora.org \
--to=sboyd@codeaurora.org \
--cc=ben@simtec.co.uk \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=s-jan@ti.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.