mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-25 06:00:43 +00:00
ARM: rpi_b: query internal MAC address from firmware
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>
This commit is contained in:
parent
72d5702c44
commit
4f80a06df3
3 changed files with 44 additions and 0 deletions
|
@ -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 {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue