Message ID | 1411786300-22149-1-git-send-email-swarren@wwwdotorg.org |
---|---|
State | Accepted |
Delegated to: | Albert ARIBAUD |
Headers | show |
On Saturday, September 27, 2014 at 04:51:39 AM, Stephen Warren wrote: > The built-in SMSC 95xx chip doesn't know its own MAC address. Instead, > we must query it from the VC firmware; it's probably encoded in fuses > on the BCM2835. > > Signed-off-by: Stephen Warren <swarren@wwwdotorg.org> > --- > v2: Don't set usbethaddr if it's already set > --- > arch/arm/include/asm/arch-bcm2835/mbox.h | 14 ++++++++++++++ > board/raspberrypi/rpi_b/rpi_b.c | 29 > +++++++++++++++++++++++++++++ include/configs/rpi_b.h | > 1 + > 3 files changed, 44 insertions(+) > > diff --git a/arch/arm/include/asm/arch-bcm2835/mbox.h > b/arch/arm/include/asm/arch-bcm2835/mbox.h index dded857..61f427d 100644 > --- a/arch/arm/include/asm/arch-bcm2835/mbox.h > +++ b/arch/arm/include/asm/arch-bcm2835/mbox.h > @@ -119,6 +119,20 @@ struct bcm2835_mbox_tag_hdr { > * }; > */ > > +#define BCM2835_MBOX_TAG_GET_MAC_ADDRESS 0x00010003 > + > +struct bcm2835_mbox_tag_get_mac_address { > + struct bcm2835_mbox_tag_hdr tag_hdr; > + union { > + struct { > + } req; > + struct { > + u8 mac[6]; > + u8 pad[2]; > + } resp; Well, can't this be a simple u32 here ? [...] Who will pick this series , shall I pick it ? Best regards, Marek Vasut
On 09/27/2014 01:43 PM, Marek Vasut wrote: > On Saturday, September 27, 2014 at 04:51:39 AM, Stephen Warren wrote: >> The built-in SMSC 95xx chip doesn't know its own MAC address. Instead, >> we must query it from the VC firmware; it's probably encoded in fuses >> on the BCM2835. >> >> Signed-off-by: Stephen Warren <swarren@wwwdotorg.org> >> --- >> v2: Don't set usbethaddr if it's already set >> --- >> arch/arm/include/asm/arch-bcm2835/mbox.h | 14 ++++++++++++++ >> board/raspberrypi/rpi_b/rpi_b.c | 29 >> +++++++++++++++++++++++++++++ include/configs/rpi_b.h | >> 1 + >> 3 files changed, 44 insertions(+) >> >> diff --git a/arch/arm/include/asm/arch-bcm2835/mbox.h >> b/arch/arm/include/asm/arch-bcm2835/mbox.h index dded857..61f427d 100644 >> --- a/arch/arm/include/asm/arch-bcm2835/mbox.h >> +++ b/arch/arm/include/asm/arch-bcm2835/mbox.h >> @@ -119,6 +119,20 @@ struct bcm2835_mbox_tag_hdr { >> * }; >> */ >> >> +#define BCM2835_MBOX_TAG_GET_MAC_ADDRESS 0x00010003 >> + >> +struct bcm2835_mbox_tag_get_mac_address { >> + struct bcm2835_mbox_tag_hdr tag_hdr; >> + union { >> + struct { >> + } req; >> + struct { >> + u8 mac[6]; >> + u8 pad[2]; >> + } resp; > > Well, can't this be a simple u32 here ? If you ignore the fact the message format really is 6 individual bytes, sure:-P. > [...] > > Who will pick this series , shall I pick it ? That sounds reasonable to me; they depend on your patches. I suppose Albert might want to ack that.
On Tuesday, September 30, 2014 at 06:21:46 AM, Stephen Warren wrote: > On 09/27/2014 01:43 PM, Marek Vasut wrote: > > On Saturday, September 27, 2014 at 04:51:39 AM, Stephen Warren wrote: > >> The built-in SMSC 95xx chip doesn't know its own MAC address. Instead, > >> we must query it from the VC firmware; it's probably encoded in fuses > >> on the BCM2835. > >> > >> Signed-off-by: Stephen Warren <swarren@wwwdotorg.org> > >> --- > >> v2: Don't set usbethaddr if it's already set > >> --- > >> > >> arch/arm/include/asm/arch-bcm2835/mbox.h | 14 ++++++++++++++ > >> board/raspberrypi/rpi_b/rpi_b.c | 29 > >> > >> +++++++++++++++++++++++++++++ include/configs/rpi_b.h | > >> 1 + > >> > >> 3 files changed, 44 insertions(+) > >> > >> diff --git a/arch/arm/include/asm/arch-bcm2835/mbox.h > >> b/arch/arm/include/asm/arch-bcm2835/mbox.h index dded857..61f427d 100644 > >> --- a/arch/arm/include/asm/arch-bcm2835/mbox.h > >> +++ b/arch/arm/include/asm/arch-bcm2835/mbox.h > >> @@ -119,6 +119,20 @@ struct bcm2835_mbox_tag_hdr { > >> > >> * }; > >> */ > >> > >> +#define BCM2835_MBOX_TAG_GET_MAC_ADDRESS 0x00010003 > >> + > >> +struct bcm2835_mbox_tag_get_mac_address { > >> + struct bcm2835_mbox_tag_hdr tag_hdr; > >> + union { > >> + struct { > >> + } req; > >> + struct { > >> + u8 mac[6]; > >> + u8 pad[2]; > >> + } resp; > > > > Well, can't this be a simple u32 here ? > > If you ignore the fact the message format really is 6 individual bytes, > sure:-P. Aw, u64 then. Anyway, it's not critical, it's just that the code looks a bit iffy, that's all. > > [...] > > > > Who will pick this series , shall I pick it ? > > That sounds reasonable to me; they depend on your patches. I suppose > Albert might want to ack that. OK, I placed it into u-boot-usb/topic/dwc2-20140930 for now. Best regards, Marek Vasut
diff --git a/arch/arm/include/asm/arch-bcm2835/mbox.h b/arch/arm/include/asm/arch-bcm2835/mbox.h index dded857..61f427d 100644 --- a/arch/arm/include/asm/arch-bcm2835/mbox.h +++ b/arch/arm/include/asm/arch-bcm2835/mbox.h @@ -119,6 +119,20 @@ struct bcm2835_mbox_tag_hdr { * }; */ +#define BCM2835_MBOX_TAG_GET_MAC_ADDRESS 0x00010003 + +struct bcm2835_mbox_tag_get_mac_address { + struct bcm2835_mbox_tag_hdr tag_hdr; + union { + struct { + } req; + struct { + u8 mac[6]; + u8 pad[2]; + } resp; + } body; +}; + #define BCM2835_MBOX_TAG_GET_ARM_MEMORY 0x00010005 struct bcm2835_mbox_tag_get_arm_mem { diff --git a/board/raspberrypi/rpi_b/rpi_b.c b/board/raspberrypi/rpi_b/rpi_b.c index 220bb90..a92c1ec 100644 --- a/board/raspberrypi/rpi_b/rpi_b.c +++ b/board/raspberrypi/rpi_b/rpi_b.c @@ -31,6 +31,12 @@ struct msg_get_arm_mem { u32 end_tag; }; +struct msg_get_mac_address { + struct bcm2835_mbox_hdr hdr; + struct bcm2835_mbox_tag_get_mac_address get_mac_address; + u32 end_tag; +}; + struct msg_set_power_state { struct bcm2835_mbox_hdr hdr; struct bcm2835_mbox_tag_set_power_state set_power_state; @@ -62,6 +68,29 @@ int dram_init(void) return 0; } +int misc_init_r(void) +{ + ALLOC_ALIGN_BUFFER(struct msg_get_mac_address, msg, 1, 16); + int ret; + + if (getenv("usbethaddr")) + return 0; + + BCM2835_MBOX_INIT_HDR(msg); + BCM2835_MBOX_INIT_TAG(&msg->get_mac_address, GET_MAC_ADDRESS); + + ret = bcm2835_mbox_call_prop(BCM2835_MBOX_PROP_CHAN, &msg->hdr); + if (ret) { + printf("bcm2835: Could not query MAC address\n"); + /* Ignore error; not critical */ + return 0; + } + + eth_setenv_enetaddr("usbethaddr", msg->get_mac_address.body.resp.mac); + + return 0; +} + static int power_on_module(u32 module) { ALLOC_ALIGN_BUFFER(struct msg_set_power_state, msg_pwr, 1, 16); diff --git a/include/configs/rpi_b.h b/include/configs/rpi_b.h index 9a53232..3c3ba9a 100644 --- a/include/configs/rpi_b.h +++ b/include/configs/rpi_b.h @@ -182,6 +182,7 @@ #define CONFIG_USB_STORAGE #define CONFIG_USB_HOST_ETHER #define CONFIG_USB_ETHER_SMSC95XX +#define CONFIG_MISC_INIT_R #endif #endif
The built-in SMSC 95xx chip doesn't know its own MAC address. Instead, we must query it from the VC firmware; it's probably encoded in fuses on the BCM2835. Signed-off-by: Stephen Warren <swarren@wwwdotorg.org> --- v2: Don't set usbethaddr if it's already set --- arch/arm/include/asm/arch-bcm2835/mbox.h | 14 ++++++++++++++ board/raspberrypi/rpi_b/rpi_b.c | 29 +++++++++++++++++++++++++++++ include/configs/rpi_b.h | 1 + 3 files changed, 44 insertions(+)