sunxi: use random parts of SID to set ethaddr
PATCH 1/1 sunxi: use random parts of SID to set ethaddr
From: Jonathan Liu <[email protected]>
Similar to the USB NIC found on OMAP5uEVM, PandaBoard and BeagleBoard-XM boards, the sunxi SoCs have a NIC onboard without an embedded MAC address.
Just like the omap used on these boards, the sunxi SoCs do have a unique chip id, in the form of the 128 bit SID register:
http://linux-sunxi.org/SID_Register_Guide
So mimick the BeagleBoard-XM board code (commit 548a64d8) and use the chip id to generate a unique fixed MAC address.
We check for the SID not being all 0, since some early A20 batches shipped without having there SID programmed.
Note we use specific parts of the 128 bits, since some parts indicate the SoC family / revision, and thus are fixed. The algorithm for this was taken from the linux-sunxi.org kernels.
--- board/sunxi/board.c | 28 ++++++++++++++++++++++++++++ include/configs/sunxi-common.h | 2 ++ 2 files changed, 30 insertions(+)
board/sunxi/board.c +28 -0
@@ -19,9 +19,12 @@#include <axp209.h> #endif #include <asm/arch/clock.h> +#include <asm/arch/cpu.h> #include <asm/arch/dram.h> #include <asm/arch/gpio.h> #include <asm/arch/mmc.h> +#include <asm/io.h> +#include <net.h> DECLARE_GLOBAL_DATA_PTR ;
@@ -157,3 +160,28 @@ void sunxi_board_init(void)printf ("Failed to set core voltage! Can't set CPU frequency\n" ); }#endif + +#ifdef CONFIG_MISC_INIT_R +int misc_init_r (void ) +{ +if (!getenv ("ethaddr" )) { +uint32_t reg_val =readl (SUNXI_SID_BASE ); + +if (reg_val) { +uint8_t mac_addr[6 ]; + + mac_addr[0 ] =0x02 ;/* Non OUI / registered MAC address */ + mac_addr[1 ] = (reg_val >>0 ) &0xff ; + reg_val =readl (SUNXI_SID_BASE +0x0c ); + mac_addr[2 ] = (reg_val >>24 ) &0xff ; + mac_addr[3 ] = (reg_val >>16 ) &0xff ; + mac_addr[4 ] = (reg_val >>8 ) &0xff ; + mac_addr[5 ] = (reg_val >>0 ) &0xff ; + +eth_setenv_enetaddr ("ethaddr" , mac_addr); + } + } + +return 0 ; +} +#endif
include/configs/sunxi-common.h +2 -0
@@ -207,6 +207,8 @@#define CONFIG_ENV_IS_NOWHERE #endif +#define CONFIG_MISC_INIT_R +#ifndef CONFIG_SPL_BUILD #include <config_distro_defaults.h> #endif
Signature · 1 line
2.0.0
PATCH 1/1 sunxi: use random parts of SID to set ethaddr
Quoted 15 lines · Hans de Goede
From: Jonathan Liu <[email protected]>
Similar to the USB NIC found on OMAP5uEVM, PandaBoard and BeagleBoard-XM boards, the sunxi SoCs have a NIC onboard without an embedded MAC address.
Just like the omap used on these boards, the sunxi SoCs do have a unique chip id, in the form of the 128 bit SID register:
http://linux-sunxi.org/SID_Register_GuideSo mimick the BeagleBoard-XM board code (commit
548a64d8) and use the chip id to generate a unique fixed MAC address.We check for the SID not being all 0, since some early A20 batches shipped without having there SID programmed.
Quoted 7 lines
Note we use specific parts of the 128 bits, since some parts indicate the SoC family / revision, and thus are fixed. The algorithm for this was taken from the linux-sunxi.org kernels.
Signed-off-by Jonathan Liu <[email protected]>[hdegoede at redhat.com: Expanded the commit message with some more info]Signed-off-by Hans de Goede <[email protected]>
PATCH 1/1 sunxi: use random parts of SID to set ethaddr
Quoted 20 lines · On Sat, 14 Jun 2014 10:46:37 +0100 Ian Campbell <[email protected]> wrote:
Quoted 19 lines · Hans de Goede
From: Jonathan Liu <[email protected]>
Similar to the USB NIC found on OMAP5uEVM, PandaBoard and BeagleBoard-XM boards, the sunxi SoCs have a NIC onboard without an embedded MAC address.
Just like the omap used on these boards, the sunxi SoCs do have a unique chip id, in the form of the 128 bit SID register:
http://linux-sunxi.org/SID_Register_GuideSo mimick the BeagleBoard-XM board code (commit
548a64d8) and use the chip id to generate a unique fixed MAC address.We check for the SID not being all 0, since some early A20 batches shipped without having there SID programmed.
Note we use specific parts of the 128 bits, since some parts indicate the SoC family / revision, and thus are fixed. The algorithm for this was taken from the linux-sunxi.org kernels.
Quoted 5 lines
Quoted 3 lines
Signed-off-by Jonathan Liu <[email protected]>[hdegoede at redhat.com: Expanded the commit message with some more info]Signed-off-by Hans de Goede <[email protected]>Acked-by Ian Campbell <[email protected]>
Signature · 2 lines
Best regards, Siarhei Siamashka