* [PATCH] dm9000: Support MAC address setting through platform data.
@ 2008-07-23 15:41 Laurent Pinchart
2008-07-25 9:05 ` Ben Dooks
2008-08-07 6:24 ` Jeff Garzik
0 siblings, 2 replies; 4+ messages in thread
From: Laurent Pinchart @ 2008-07-23 15:41 UTC (permalink / raw)
To: netdev; +Cc: Ben Dooks
The dm9000 driver reads the chip's MAC address from the attached EEPROM. When
no EEPROM is present, or when the MAC address is invalid, it falls back to
reading the address from the chip.
This patch lets platform code set the desired MAC address through platform
data.
Signed-off-by: Laurent Pinchart <laurentp@cse-semaphore.com>
---
drivers/net/dm9000.c | 3 +++
include/linux/dm9000.h | 1 +
2 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/drivers/net/dm9000.c b/drivers/net/dm9000.c
index 864295e..6bc8924 100644
--- a/drivers/net/dm9000.c
+++ b/drivers/net/dm9000.c
@@ -716,6 +716,11 @@ dm9000_probe(struct platform_device *pdev)
for (i = 0; i < 6; i += 2)
dm9000_read_eeprom(db, i / 2, ndev->dev_addr+i);
+ if (!is_valid_ether_addr(ndev->dev_addr) && pdata != NULL) {
+ mac_src = "platform data";
+ memcpy(ndev->dev_addr, pdata->dev_addr, 6);
+ }
+
if (!is_valid_ether_addr(ndev->dev_addr)) {
/* try reading from mac */
diff --git a/include/linux/dm9000.h b/include/linux/dm9000.h
index a375046..4fb49a4 100644
--- a/include/linux/dm9000.h
+++ b/include/linux/dm9000.h
@@ -26,6 +26,7 @@
struct dm9000_plat_data {
unsigned int flags;
+ unsigned char dev_addr[6];
/* allow replacement IO routines */
--
1.5.0
--
Laurent Pinchart
CSE Semaphore Belgium
Chaussee de Bruxelles, 732A
B-1410 Waterloo
Belgium
T +32 (2) 387 42 59
F +32 (2) 387 42 75
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] dm9000: Support MAC address setting through platform data.
2008-07-23 15:41 [PATCH] dm9000: Support MAC address setting through platform data Laurent Pinchart
@ 2008-07-25 9:05 ` Ben Dooks
2008-07-25 9:23 ` Laurent Pinchart
2008-08-07 6:24 ` Jeff Garzik
1 sibling, 1 reply; 4+ messages in thread
From: Ben Dooks @ 2008-07-25 9:05 UTC (permalink / raw)
To: Laurent Pinchart; +Cc: netdev, Ben Dooks
On Wed, Jul 23, 2008 at 05:41:52PM +0200, Laurent Pinchart wrote:
> The dm9000 driver reads the chip's MAC address from the attached EEPROM. When
> no EEPROM is present, or when the MAC address is invalid, it falls back to
> reading the address from the chip.
>
> This patch lets platform code set the desired MAC address through platform
> data.
I belive we've had discussions about this before on the subject
as this is generally down to broken boot-loader behaviour.
Would people have objections to passing the mac address in on the
command line and having the driver initialise it from there? Are
there any other ethernet drivers out there with the same problem?
I've added some notes on the patch anyway.
> Signed-off-by: Laurent Pinchart <laurentp@cse-semaphore.com>
> ---
> drivers/net/dm9000.c | 3 +++
> include/linux/dm9000.h | 1 +
> 2 files changed, 4 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/net/dm9000.c b/drivers/net/dm9000.c
> index 864295e..6bc8924 100644
> --- a/drivers/net/dm9000.c
> +++ b/drivers/net/dm9000.c
> @@ -716,6 +716,11 @@ dm9000_probe(struct platform_device *pdev)
> for (i = 0; i < 6; i += 2)
> dm9000_read_eeprom(db, i / 2, ndev->dev_addr+i);
>
> + if (!is_valid_ether_addr(ndev->dev_addr) && pdata != NULL) {
> + mac_src = "platform data";
> + memcpy(ndev->dev_addr, pdata->dev_addr, 6);
> + }
> +
> if (!is_valid_ether_addr(ndev->dev_addr)) {
> /* try reading from mac */
>
> diff --git a/include/linux/dm9000.h b/include/linux/dm9000.h
> index a375046..4fb49a4 100644
> --- a/include/linux/dm9000.h
> +++ b/include/linux/dm9000.h
> @@ -26,6 +26,7 @@
>
> struct dm9000_plat_data {
> unsigned int flags;
> + unsigned char dev_addr[6];
how about unsigned char *mac_addr, so that you can detect
if the address has not been passed in easily. dev_addr is
not really descriptive enough as a name.
--
Ben (ben@fluff.org, http://www.fluff.org/)
'a smiley only costs 4 bytes'
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] dm9000: Support MAC address setting through platform data.
2008-07-25 9:05 ` Ben Dooks
@ 2008-07-25 9:23 ` Laurent Pinchart
0 siblings, 0 replies; 4+ messages in thread
From: Laurent Pinchart @ 2008-07-25 9:23 UTC (permalink / raw)
To: Ben Dooks; +Cc: netdev
[-- Attachment #1: Type: text/plain, Size: 3364 bytes --]
On Friday 25 July 2008, Ben Dooks wrote:
> On Wed, Jul 23, 2008 at 05:41:52PM +0200, Laurent Pinchart wrote:
> > The dm9000 driver reads the chip's MAC address from the attached EEPROM.
> > When no EEPROM is present, or when the MAC address is invalid, it falls
> > back to reading the address from the chip.
> >
> > This patch lets platform code set the desired MAC address through platform
> > data.
>
> I belive we've had discussions about this before on the subject
> as this is generally down to broken boot-loader behaviour.
>
> Would people have objections to passing the mac address in on the
> command line and having the driver initialise it from there? Are
> there any other ethernet drivers out there with the same problem?
That wouldn't really help here. I should have provided more background information, let's fix this.
The system I'm working on has an ISA-like bus on which users can plug extension boards. One of those board has a DM9000 chip connected directly to the bus. Having several DM9000-based extension boards in a system is a common situation.
The extension boards have a serial EEPROM connected to the bus, but no EEPROM connected to the DM9000. The EEPROM stores, among other information, the MAC address. The platform driver I wrote for the extension board reads the EEPROM content, and needs to pass the MAC address when it registers a DM9000 device.
I don't think the boot loader is the right place to fix the issue. It would involve scanning all boards on the extension bus and configuring the DM9000, which isn't really practical. Beside, the bus can be reset at runtime without involving a full system reset, in which case Linux will have to reprogram the DM9000 with a MAC address anyway.
> I've added some notes on the patch anyway.
>
> > Signed-off-by: Laurent Pinchart <laurentp@cse-semaphore.com>
> > ---
> > drivers/net/dm9000.c | 3 +++
> > include/linux/dm9000.h | 1 +
> > 2 files changed, 4 insertions(+), 0 deletions(-)
> >
> > diff --git a/drivers/net/dm9000.c b/drivers/net/dm9000.c
> > index 864295e..6bc8924 100644
> > --- a/drivers/net/dm9000.c
> > +++ b/drivers/net/dm9000.c
> > @@ -716,6 +716,11 @@ dm9000_probe(struct platform_device *pdev)
> > for (i = 0; i < 6; i += 2)
> > dm9000_read_eeprom(db, i / 2, ndev->dev_addr+i);
> >
> > + if (!is_valid_ether_addr(ndev->dev_addr) && pdata != NULL) {
> > + mac_src = "platform data";
> > + memcpy(ndev->dev_addr, pdata->dev_addr, 6);
> > + }
> > +
> > if (!is_valid_ether_addr(ndev->dev_addr)) {
> > /* try reading from mac */
> >
> > diff --git a/include/linux/dm9000.h b/include/linux/dm9000.h
> > index a375046..4fb49a4 100644
> > --- a/include/linux/dm9000.h
> > +++ b/include/linux/dm9000.h
> > @@ -26,6 +26,7 @@
> >
> > struct dm9000_plat_data {
> > unsigned int flags;
> > + unsigned char dev_addr[6];
>
> how about unsigned char *mac_addr, so that you can detect
> if the address has not been passed in easily. dev_addr is
> not really descriptive enough as a name.
mac_addr is indeed a better name. Using an unsigned char * involves extra storage. What about a DM9000_PLATF_MAC_ADDR flag instead ?
--
Laurent Pinchart
CSE Semaphore Belgium
Chaussee de Bruxelles, 732A
B-1410 Waterloo
Belgium
T +32 (2) 387 42 59
F +32 (2) 387 42 75
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 197 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] dm9000: Support MAC address setting through platform data.
2008-07-23 15:41 [PATCH] dm9000: Support MAC address setting through platform data Laurent Pinchart
2008-07-25 9:05 ` Ben Dooks
@ 2008-08-07 6:24 ` Jeff Garzik
1 sibling, 0 replies; 4+ messages in thread
From: Jeff Garzik @ 2008-08-07 6:24 UTC (permalink / raw)
To: Laurent Pinchart; +Cc: netdev, Ben Dooks
Laurent Pinchart wrote:
> The dm9000 driver reads the chip's MAC address from the attached EEPROM. When
> no EEPROM is present, or when the MAC address is invalid, it falls back to
> reading the address from the chip.
>
> This patch lets platform code set the desired MAC address through platform
> data.
>
> Signed-off-by: Laurent Pinchart <laurentp@cse-semaphore.com>
> ---
> drivers/net/dm9000.c | 3 +++
> include/linux/dm9000.h | 1 +
> 2 files changed, 4 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/net/dm9000.c b/drivers/net/dm9000.c
> index 864295e..6bc8924 100644
> --- a/drivers/net/dm9000.c
> +++ b/drivers/net/dm9000.c
> @@ -716,6 +716,11 @@ dm9000_probe(struct platform_device *pdev)
> for (i = 0; i < 6; i += 2)
> dm9000_read_eeprom(db, i / 2, ndev->dev_addr+i);
>
> + if (!is_valid_ether_addr(ndev->dev_addr) && pdata != NULL) {
> + mac_src = "platform data";
> + memcpy(ndev->dev_addr, pdata->dev_addr, 6);
> + }
> +
> if (!is_valid_ether_addr(ndev->dev_addr)) {
> /* try reading from mac */
>
> diff --git a/include/linux/dm9000.h b/include/linux/dm9000.h
> index a375046..4fb49a4 100644
> --- a/include/linux/dm9000.h
> +++ b/include/linux/dm9000.h
> @@ -26,6 +26,7 @@
>
> struct dm9000_plat_data {
> unsigned int flags;
> + unsigned char dev_addr[6];
applied
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2008-08-07 6:24 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-07-23 15:41 [PATCH] dm9000: Support MAC address setting through platform data Laurent Pinchart
2008-07-25 9:05 ` Ben Dooks
2008-07-25 9:23 ` Laurent Pinchart
2008-08-07 6:24 ` Jeff Garzik
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).