Message ID | 20190724110930.8508-3-rohan.garg@collabora.com |
---|---|
State | Superseded |
Delegated to: | Philipp Tomsich |
Headers | show |
Series | [U-Boot,v3,1/3] rockchip: rk3399: derive ethaddr from cpuid | expand |
Hi Rohan, On 2019/7/24 下午7:09, Rohan Garg wrote: > We should use the shared helpers to setup the necessary parts > > Signed-off-by: Rohan Garg <rohan.garg@collabora.com> > --- > > .../puma_rk3399/puma-rk3399.c | 108 +++--------------- > 1 file changed, 18 insertions(+), 90 deletions(-) > > diff --git a/board/theobroma-systems/puma_rk3399/puma-rk3399.c b/board/theobroma-systems/puma_rk3399/puma-rk3399.c > index 251cd2d566..fb6c7c1f0a 100644 > --- a/board/theobroma-systems/puma_rk3399/puma-rk3399.c > +++ b/board/theobroma-systems/puma_rk3399/puma-rk3399.c > @@ -17,6 +17,7 @@ > #include <asm/arch-rockchip/clock.h> > #include <asm/arch-rockchip/hardware.h> > #include <asm/arch-rockchip/grf_rk3399.h> > +#include <asm/arch-rockchip/misc.h> > #include <asm/arch-rockchip/periph.h> > #include <power/regulator.h> > #include <u-boot/sha256.h> > @@ -36,94 +37,6 @@ int board_init(void) > return 0; > } > > -static void setup_macaddr(void) > -{ > -#if CONFIG_IS_ENABLED(CMD_NET) > - int ret; > - const char *cpuid = env_get("cpuid#"); > - u8 hash[SHA256_SUM_LEN]; > - int size = sizeof(hash); > - u8 mac_addr[6]; > - > - /* Only generate a MAC address, if none is set in the environment */ > - if (env_get("ethaddr")) > - return; > - > - if (!cpuid) { > - debug("%s: could not retrieve 'cpuid#'\n", __func__); > - return; > - } > - > - ret = hash_block("sha256", (void *)cpuid, strlen(cpuid), hash, &size); > - if (ret) { > - debug("%s: failed to calculate SHA256\n", __func__); > - return; > - } > - > - /* Copy 6 bytes of the hash to base the MAC address on */ > - memcpy(mac_addr, hash, 6); > - > - /* Make this a valid MAC address and set it */ > - mac_addr[0] &= 0xfe; /* clear multicast bit */ > - mac_addr[0] |= 0x02; /* set local assignment bit (IEEE802) */ > - eth_env_set_enetaddr("ethaddr", mac_addr); > -#endif > -} > - > -static void setup_serial(void) > -{ > -#if CONFIG_IS_ENABLED(ROCKCHIP_EFUSE) > - const u32 cpuid_offset = 0x7; > - const u32 cpuid_length = 0x10; > - > - struct udevice *dev; > - int ret, i; > - u8 cpuid[cpuid_length]; > - u8 low[cpuid_length/2], high[cpuid_length/2]; > - char cpuid_str[cpuid_length * 2 + 1]; > - u64 serialno; > - char serialno_str[17]; > - > - /* retrieve the device */ > - ret = uclass_get_device_by_driver(UCLASS_MISC, > - DM_GET_DRIVER(rockchip_efuse), &dev); > - if (ret) { > - debug("%s: could not find efuse device\n", __func__); > - return; > - } > - > - /* read the cpu_id range from the efuses */ > - ret = misc_read(dev, cpuid_offset, &cpuid, sizeof(cpuid)); > - if (ret) { > - debug("%s: reading cpuid from the efuses failed\n", > - __func__); > - return; > - } > - > - memset(cpuid_str, 0, sizeof(cpuid_str)); > - for (i = 0; i < 16; i++) > - sprintf(&cpuid_str[i * 2], "%02x", cpuid[i]); > - > - debug("cpuid: %s\n", cpuid_str); > - > - /* > - * Mix the cpuid bytes using the same rules as in > - * ${linux}/drivers/soc/rockchip/rockchip-cpuinfo.c > - */ > - for (i = 0; i < 8; i++) { > - low[i] = cpuid[1 + (i << 1)]; > - high[i] = cpuid[i << 1]; > - } > - > - serialno = crc32_no_comp(0, low, 8); > - serialno |= (u64)crc32_no_comp(serialno, high, 8) << 32; > - snprintf(serialno_str, sizeof(serialno_str), "%016llx", serialno); > - > - env_set("cpuid#", cpuid_str); > - env_set("serial#", serialno_str); > -#endif > -} > - > static void setup_iodomain(void) > { > const u32 GRF_IO_VSEL_GPIO4CD_SHIFT = 3; > @@ -213,8 +126,23 @@ static int setup_boottargets(void) > > int misc_init_r(void) After misc_init_r has add into rk3399_board, then this misc_init_r() here will be multi-defined? In this case, maybe we need to remove the misc_init_r() from rk3399_board.c first? :( Thanks, - Kever > { > - setup_serial(); > - setup_macaddr(); > + const u32 cpuid_offset = 0x7; > + const u32 cpuid_length = 0x10; > + u8 cpuid[cpuid_length]; > + int ret; > + > + ret = rockchip_cpuid_from_efuse(cpuid_offset, cpuid_length, cpuid); > + if (ret) > + return ret; > + > + ret = rockchip_cpuid_set(cpuid, cpuid_length); > + if (ret) > + return ret; > + > + ret = rockchip_setup_macaddr(); > + if (ret) > + return ret; > + > setup_iodomain(); > setup_boottargets(); >
Hey On Wednesday, 24 July 2019 14:26:44 CEST Kever Yang wrote: > Hi Rohan, > > On 2019/7/24 下午7:09, Rohan Garg wrote: > > We should use the shared helpers to setup the necessary parts > > > > Signed-off-by: Rohan Garg <rohan.garg@collabora.com> > > --- > > > > .../puma_rk3399/puma-rk3399.c | 108 +++--------------- > > 1 file changed, 18 insertions(+), 90 deletions(-) > > > > diff --git a/board/theobroma-systems/puma_rk3399/puma-rk3399.c > > b/board/theobroma-systems/puma_rk3399/puma-rk3399.c index > > 251cd2d566..fb6c7c1f0a 100644 > > --- a/board/theobroma-systems/puma_rk3399/puma-rk3399.c > > +++ b/board/theobroma-systems/puma_rk3399/puma-rk3399.c > > @@ -17,6 +17,7 @@ > > > > #include <asm/arch-rockchip/clock.h> > > #include <asm/arch-rockchip/hardware.h> > > #include <asm/arch-rockchip/grf_rk3399.h> > > > > +#include <asm/arch-rockchip/misc.h> > > > > #include <asm/arch-rockchip/periph.h> > > #include <power/regulator.h> > > #include <u-boot/sha256.h> > > > > @@ -36,94 +37,6 @@ int board_init(void) > > > > return 0; > > > > } > > > > -static void setup_macaddr(void) > > -{ > > -#if CONFIG_IS_ENABLED(CMD_NET) > > - int ret; > > - const char *cpuid = env_get("cpuid#"); > > - u8 hash[SHA256_SUM_LEN]; > > - int size = sizeof(hash); > > - u8 mac_addr[6]; > > - > > - /* Only generate a MAC address, if none is set in the environment */ > > - if (env_get("ethaddr")) > > - return; > > - > > - if (!cpuid) { > > - debug("%s: could not retrieve 'cpuid#'\n", __func__); > > - return; > > - } > > - > > - ret = hash_block("sha256", (void *)cpuid, strlen(cpuid), hash, &size); > > - if (ret) { > > - debug("%s: failed to calculate SHA256\n", __func__); > > - return; > > - } > > - > > - /* Copy 6 bytes of the hash to base the MAC address on */ > > - memcpy(mac_addr, hash, 6); > > - > > - /* Make this a valid MAC address and set it */ > > - mac_addr[0] &= 0xfe; /* clear multicast bit */ > > - mac_addr[0] |= 0x02; /* set local assignment bit (IEEE802) */ > > - eth_env_set_enetaddr("ethaddr", mac_addr); > > -#endif > > -} > > - > > -static void setup_serial(void) > > -{ > > -#if CONFIG_IS_ENABLED(ROCKCHIP_EFUSE) > > - const u32 cpuid_offset = 0x7; > > - const u32 cpuid_length = 0x10; > > - > > - struct udevice *dev; > > - int ret, i; > > - u8 cpuid[cpuid_length]; > > - u8 low[cpuid_length/2], high[cpuid_length/2]; > > - char cpuid_str[cpuid_length * 2 + 1]; > > - u64 serialno; > > - char serialno_str[17]; > > - > > - /* retrieve the device */ > > - ret = uclass_get_device_by_driver(UCLASS_MISC, > > - DM_GET_DRIVER(rockchip_efuse), &dev); > > - if (ret) { > > - debug("%s: could not find efuse device\n", __func__); > > - return; > > - } > > - > > - /* read the cpu_id range from the efuses */ > > - ret = misc_read(dev, cpuid_offset, &cpuid, sizeof(cpuid)); > > - if (ret) { > > - debug("%s: reading cpuid from the efuses failed\n", > > - __func__); > > - return; > > - } > > - > > - memset(cpuid_str, 0, sizeof(cpuid_str)); > > - for (i = 0; i < 16; i++) > > - sprintf(&cpuid_str[i * 2], "%02x", cpuid[i]); > > - > > - debug("cpuid: %s\n", cpuid_str); > > - > > - /* > > - * Mix the cpuid bytes using the same rules as in > > - * ${linux}/drivers/soc/rockchip/rockchip-cpuinfo.c > > - */ > > - for (i = 0; i < 8; i++) { > > - low[i] = cpuid[1 + (i << 1)]; > > - high[i] = cpuid[i << 1]; > > - } > > - > > - serialno = crc32_no_comp(0, low, 8); > > - serialno |= (u64)crc32_no_comp(serialno, high, 8) << 32; > > - snprintf(serialno_str, sizeof(serialno_str), "%016llx", serialno); > > - > > - env_set("cpuid#", cpuid_str); > > - env_set("serial#", serialno_str); > > -#endif > > -} > > - > > > > static void setup_iodomain(void) > > { > > > > const u32 GRF_IO_VSEL_GPIO4CD_SHIFT = 3; > > > > @@ -213,8 +126,23 @@ static int setup_boottargets(void) > > > > int misc_init_r(void) > > After misc_init_r has add into rk3399_board, then this misc_init_r() > here will be multi-defined? > > In this case, maybe we need to remove the misc_init_r() from > rk3399_board.c first? :( > I'm a bit confused. I thought the idea was to hoist this code up into rk3399- board.c? On a separate note, perhaps setup_iodomain should move into a more generic helper for the rk3399 boards. I'm also not sure why setup_boottargets fiddles around with boot order, but perhaps we shouldn't be doing that? None of the other boards seem to do that ( or at least none that I could find anyway ). Cheers Rohan Garg
> On 25.07.2019, at 18:39, Rohan Garg <rohan.garg@collabora.com> wrote: > > Hey > On Wednesday, 24 July 2019 14:26:44 CEST Kever Yang wrote: >> Hi Rohan, >> >> On 2019/7/24 下午7:09, Rohan Garg wrote: >>> We should use the shared helpers to setup the necessary parts >>> >>> Signed-off-by: Rohan Garg <rohan.garg@collabora.com> >>> --- >>> >>> .../puma_rk3399/puma-rk3399.c | 108 +++--------------- >>> 1 file changed, 18 insertions(+), 90 deletions(-) >>> >>> diff --git a/board/theobroma-systems/puma_rk3399/puma-rk3399.c >>> b/board/theobroma-systems/puma_rk3399/puma-rk3399.c index >>> 251cd2d566..fb6c7c1f0a 100644 >>> --- a/board/theobroma-systems/puma_rk3399/puma-rk3399.c >>> +++ b/board/theobroma-systems/puma_rk3399/puma-rk3399.c >>> @@ -17,6 +17,7 @@ >>> >>> #include <asm/arch-rockchip/clock.h> >>> #include <asm/arch-rockchip/hardware.h> >>> #include <asm/arch-rockchip/grf_rk3399.h> >>> >>> +#include <asm/arch-rockchip/misc.h> >>> >>> #include <asm/arch-rockchip/periph.h> >>> #include <power/regulator.h> >>> #include <u-boot/sha256.h> >>> >>> @@ -36,94 +37,6 @@ int board_init(void) >>> >>> return 0; >>> >>> } >>> >>> -static void setup_macaddr(void) >>> -{ >>> -#if CONFIG_IS_ENABLED(CMD_NET) >>> - int ret; >>> - const char *cpuid = env_get("cpuid#"); >>> - u8 hash[SHA256_SUM_LEN]; >>> - int size = sizeof(hash); >>> - u8 mac_addr[6]; >>> - >>> - /* Only generate a MAC address, if none is set in the environment > */ >>> - if (env_get("ethaddr")) >>> - return; >>> - >>> - if (!cpuid) { >>> - debug("%s: could not retrieve 'cpuid#'\n", __func__); >>> - return; >>> - } >>> - >>> - ret = hash_block("sha256", (void *)cpuid, strlen(cpuid), hash, > &size); >>> - if (ret) { >>> - debug("%s: failed to calculate SHA256\n", __func__); >>> - return; >>> - } >>> - >>> - /* Copy 6 bytes of the hash to base the MAC address on */ >>> - memcpy(mac_addr, hash, 6); >>> - >>> - /* Make this a valid MAC address and set it */ >>> - mac_addr[0] &= 0xfe; /* clear multicast bit */ >>> - mac_addr[0] |= 0x02; /* set local assignment bit (IEEE802) */ >>> - eth_env_set_enetaddr("ethaddr", mac_addr); >>> -#endif >>> -} >>> - >>> -static void setup_serial(void) >>> -{ >>> -#if CONFIG_IS_ENABLED(ROCKCHIP_EFUSE) >>> - const u32 cpuid_offset = 0x7; >>> - const u32 cpuid_length = 0x10; >>> - >>> - struct udevice *dev; >>> - int ret, i; >>> - u8 cpuid[cpuid_length]; >>> - u8 low[cpuid_length/2], high[cpuid_length/2]; >>> - char cpuid_str[cpuid_length * 2 + 1]; >>> - u64 serialno; >>> - char serialno_str[17]; >>> - >>> - /* retrieve the device */ >>> - ret = uclass_get_device_by_driver(UCLASS_MISC, >>> - > DM_GET_DRIVER(rockchip_efuse), &dev); >>> - if (ret) { >>> - debug("%s: could not find efuse device\n", __func__); >>> - return; >>> - } >>> - >>> - /* read the cpu_id range from the efuses */ >>> - ret = misc_read(dev, cpuid_offset, &cpuid, sizeof(cpuid)); >>> - if (ret) { >>> - debug("%s: reading cpuid from the efuses failed\n", >>> - __func__); >>> - return; >>> - } >>> - >>> - memset(cpuid_str, 0, sizeof(cpuid_str)); >>> - for (i = 0; i < 16; i++) >>> - sprintf(&cpuid_str[i * 2], "%02x", cpuid[i]); >>> - >>> - debug("cpuid: %s\n", cpuid_str); >>> - >>> - /* >>> - * Mix the cpuid bytes using the same rules as in >>> - * ${linux}/drivers/soc/rockchip/rockchip-cpuinfo.c >>> - */ >>> - for (i = 0; i < 8; i++) { >>> - low[i] = cpuid[1 + (i << 1)]; >>> - high[i] = cpuid[i << 1]; >>> - } >>> - >>> - serialno = crc32_no_comp(0, low, 8); >>> - serialno |= (u64)crc32_no_comp(serialno, high, 8) << 32; >>> - snprintf(serialno_str, sizeof(serialno_str), "%016llx", serialno); >>> - >>> - env_set("cpuid#", cpuid_str); >>> - env_set("serial#", serialno_str); >>> -#endif >>> -} >>> - >>> >>> static void setup_iodomain(void) >>> { >>> >>> const u32 GRF_IO_VSEL_GPIO4CD_SHIFT = 3; >>> >>> @@ -213,8 +126,23 @@ static int setup_boottargets(void) >>> >>> int misc_init_r(void) >> >> After misc_init_r has add into rk3399_board, then this misc_init_r() >> here will be multi-defined? >> >> In this case, maybe we need to remove the misc_init_r() from >> rk3399_board.c first? :( >> > > I'm a bit confused. I thought the idea was to hoist this code up into rk3399- > board.c? > > On a separate note, perhaps setup_iodomain should move into a more generic > helper for the rk3399 boards. > > I'm also not sure why setup_boottargets fiddles around with boot order, but > perhaps we shouldn't be doing that? None of the other boards seem to do that ( > or at least none that I could find anyway ). Please refer to the comment above setup_boottargets() in board/theobroma-systems/puma_rk3399/puma-rk3399.c for details on why the bootorder is modified for distroboot. Please make sure that this is left in place, as it will otherwise break the expected and documented behaviour (i.e. how the “BIOS_DISABLE” signal is expected to work) for the RK3399-Q7. Thanks, Philipp.
Hi Kever, Rohan, On Wed, 2019-07-24 at 20:26 +0800, Kever Yang wrote: > Hi Rohan, > > On 2019/7/24 下午7:09, Rohan Garg wrote: > > We should use the shared helpers to setup the necessary parts > > > > Signed-off-by: Rohan Garg <rohan.garg@collabora.com> > > --- > > > > .../puma_rk3399/puma-rk3399.c | 108 +++--------------- > > 1 file changed, 18 insertions(+), 90 deletions(-) > > > > diff --git a/board/theobroma-systems/puma_rk3399/puma-rk3399.c b/board/theobroma-systems/puma_rk3399/puma-rk3399.c > > index 251cd2d566..fb6c7c1f0a 100644 > > --- a/board/theobroma-systems/puma_rk3399/puma-rk3399.c > > +++ b/board/theobroma-systems/puma_rk3399/puma-rk3399.c > > @@ -17,6 +17,7 @@ > > #include <asm/arch-rockchip/clock.h> > > #include <asm/arch-rockchip/hardware.h> > > #include <asm/arch-rockchip/grf_rk3399.h> > > +#include <asm/arch-rockchip/misc.h> > > #include <asm/arch-rockchip/periph.h> > > #include <power/regulator.h> > > #include <u-boot/sha256.h> > > @@ -36,94 +37,6 @@ int board_init(void) > > return 0; > > } > > > > -static void setup_macaddr(void) > > -{ > > -#if CONFIG_IS_ENABLED(CMD_NET) > > - int ret; > > - const char *cpuid = env_get("cpuid#"); > > - u8 hash[SHA256_SUM_LEN]; > > - int size = sizeof(hash); > > - u8 mac_addr[6]; > > - > > - /* Only generate a MAC address, if none is set in the environment */ > > - if (env_get("ethaddr")) > > - return; > > - > > - if (!cpuid) { > > - debug("%s: could not retrieve 'cpuid#'\n", __func__); > > - return; > > - } > > - > > - ret = hash_block("sha256", (void *)cpuid, strlen(cpuid), hash, &size); > > - if (ret) { > > - debug("%s: failed to calculate SHA256\n", __func__); > > - return; > > - } > > - > > - /* Copy 6 bytes of the hash to base the MAC address on */ > > - memcpy(mac_addr, hash, 6); > > - > > - /* Make this a valid MAC address and set it */ > > - mac_addr[0] &= 0xfe; /* clear multicast bit */ > > - mac_addr[0] |= 0x02; /* set local assignment bit (IEEE802) */ > > - eth_env_set_enetaddr("ethaddr", mac_addr); > > -#endif > > -} > > - > > -static void setup_serial(void) > > -{ > > -#if CONFIG_IS_ENABLED(ROCKCHIP_EFUSE) > > - const u32 cpuid_offset = 0x7; > > - const u32 cpuid_length = 0x10; > > - > > - struct udevice *dev; > > - int ret, i; > > - u8 cpuid[cpuid_length]; > > - u8 low[cpuid_length/2], high[cpuid_length/2]; > > - char cpuid_str[cpuid_length * 2 + 1]; > > - u64 serialno; > > - char serialno_str[17]; > > - > > - /* retrieve the device */ > > - ret = uclass_get_device_by_driver(UCLASS_MISC, > > - DM_GET_DRIVER(rockchip_efuse), &dev); > > - if (ret) { > > - debug("%s: could not find efuse device\n", __func__); > > - return; > > - } > > - > > - /* read the cpu_id range from the efuses */ > > - ret = misc_read(dev, cpuid_offset, &cpuid, sizeof(cpuid)); > > - if (ret) { > > - debug("%s: reading cpuid from the efuses failed\n", > > - __func__); > > - return; > > - } > > - > > - memset(cpuid_str, 0, sizeof(cpuid_str)); > > - for (i = 0; i < 16; i++) > > - sprintf(&cpuid_str[i * 2], "%02x", cpuid[i]); > > - > > - debug("cpuid: %s\n", cpuid_str); > > - > > - /* > > - * Mix the cpuid bytes using the same rules as in > > - * ${linux}/drivers/soc/rockchip/rockchip-cpuinfo.c > > - */ > > - for (i = 0; i < 8; i++) { > > - low[i] = cpuid[1 + (i << 1)]; > > - high[i] = cpuid[i << 1]; > > - } > > - > > - serialno = crc32_no_comp(0, low, 8); > > - serialno |= (u64)crc32_no_comp(serialno, high, 8) << 32; > > - snprintf(serialno_str, sizeof(serialno_str), "%016llx", serialno); > > - > > - env_set("cpuid#", cpuid_str); > > - env_set("serial#", serialno_str); > > -#endif > > -} > > - > > static void setup_iodomain(void) > > { > > const u32 GRF_IO_VSEL_GPIO4CD_SHIFT = 3; > > @@ -213,8 +126,23 @@ static int setup_boottargets(void) > > > > int misc_init_r(void) > > After misc_init_r has add into rk3399_board, then this misc_init_r() > here will be multi-defined? > > In this case, maybe we need to remove the misc_init_r() from > rk3399_board.c first? :( > > Good catch. Indeed, with the first patch applied the build would fail. Does this mean we should let each board introduce its own misc_init_r, or instead provide a common weak misc_init_r? Thanks, Ezequiel
diff --git a/board/theobroma-systems/puma_rk3399/puma-rk3399.c b/board/theobroma-systems/puma_rk3399/puma-rk3399.c index 251cd2d566..fb6c7c1f0a 100644 --- a/board/theobroma-systems/puma_rk3399/puma-rk3399.c +++ b/board/theobroma-systems/puma_rk3399/puma-rk3399.c @@ -17,6 +17,7 @@ #include <asm/arch-rockchip/clock.h> #include <asm/arch-rockchip/hardware.h> #include <asm/arch-rockchip/grf_rk3399.h> +#include <asm/arch-rockchip/misc.h> #include <asm/arch-rockchip/periph.h> #include <power/regulator.h> #include <u-boot/sha256.h> @@ -36,94 +37,6 @@ int board_init(void) return 0; } -static void setup_macaddr(void) -{ -#if CONFIG_IS_ENABLED(CMD_NET) - int ret; - const char *cpuid = env_get("cpuid#"); - u8 hash[SHA256_SUM_LEN]; - int size = sizeof(hash); - u8 mac_addr[6]; - - /* Only generate a MAC address, if none is set in the environment */ - if (env_get("ethaddr")) - return; - - if (!cpuid) { - debug("%s: could not retrieve 'cpuid#'\n", __func__); - return; - } - - ret = hash_block("sha256", (void *)cpuid, strlen(cpuid), hash, &size); - if (ret) { - debug("%s: failed to calculate SHA256\n", __func__); - return; - } - - /* Copy 6 bytes of the hash to base the MAC address on */ - memcpy(mac_addr, hash, 6); - - /* Make this a valid MAC address and set it */ - mac_addr[0] &= 0xfe; /* clear multicast bit */ - mac_addr[0] |= 0x02; /* set local assignment bit (IEEE802) */ - eth_env_set_enetaddr("ethaddr", mac_addr); -#endif -} - -static void setup_serial(void) -{ -#if CONFIG_IS_ENABLED(ROCKCHIP_EFUSE) - const u32 cpuid_offset = 0x7; - const u32 cpuid_length = 0x10; - - struct udevice *dev; - int ret, i; - u8 cpuid[cpuid_length]; - u8 low[cpuid_length/2], high[cpuid_length/2]; - char cpuid_str[cpuid_length * 2 + 1]; - u64 serialno; - char serialno_str[17]; - - /* retrieve the device */ - ret = uclass_get_device_by_driver(UCLASS_MISC, - DM_GET_DRIVER(rockchip_efuse), &dev); - if (ret) { - debug("%s: could not find efuse device\n", __func__); - return; - } - - /* read the cpu_id range from the efuses */ - ret = misc_read(dev, cpuid_offset, &cpuid, sizeof(cpuid)); - if (ret) { - debug("%s: reading cpuid from the efuses failed\n", - __func__); - return; - } - - memset(cpuid_str, 0, sizeof(cpuid_str)); - for (i = 0; i < 16; i++) - sprintf(&cpuid_str[i * 2], "%02x", cpuid[i]); - - debug("cpuid: %s\n", cpuid_str); - - /* - * Mix the cpuid bytes using the same rules as in - * ${linux}/drivers/soc/rockchip/rockchip-cpuinfo.c - */ - for (i = 0; i < 8; i++) { - low[i] = cpuid[1 + (i << 1)]; - high[i] = cpuid[i << 1]; - } - - serialno = crc32_no_comp(0, low, 8); - serialno |= (u64)crc32_no_comp(serialno, high, 8) << 32; - snprintf(serialno_str, sizeof(serialno_str), "%016llx", serialno); - - env_set("cpuid#", cpuid_str); - env_set("serial#", serialno_str); -#endif -} - static void setup_iodomain(void) { const u32 GRF_IO_VSEL_GPIO4CD_SHIFT = 3; @@ -213,8 +126,23 @@ static int setup_boottargets(void) int misc_init_r(void) { - setup_serial(); - setup_macaddr(); + const u32 cpuid_offset = 0x7; + const u32 cpuid_length = 0x10; + u8 cpuid[cpuid_length]; + int ret; + + ret = rockchip_cpuid_from_efuse(cpuid_offset, cpuid_length, cpuid); + if (ret) + return ret; + + ret = rockchip_cpuid_set(cpuid, cpuid_length); + if (ret) + return ret; + + ret = rockchip_setup_macaddr(); + if (ret) + return ret; + setup_iodomain(); setup_boottargets();
We should use the shared helpers to setup the necessary parts Signed-off-by: Rohan Garg <rohan.garg@collabora.com> --- .../puma_rk3399/puma-rk3399.c | 108 +++--------------- 1 file changed, 18 insertions(+), 90 deletions(-)