rockchip: misc: protect serial# from getting overwritten
authorHeiko Stuebner <heiko.stuebner@theobroma-systems.com>
Fri, 29 Nov 2019 15:40:43 +0000 (16:40 +0100)
committerKever Yang <kever.yang@rock-chips.com>
Thu, 5 Dec 2019 15:53:07 +0000 (23:53 +0800)
serial# is one of the vendor properties and thus protected from being
overwritten if already set. If env_set is called anyway this result in
some nasty warnings, so check for presence before trying that.

In the same direction check for the presence of cpuid# and compare it
to the actual hardware and emit a warning if they don't match.

Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
Reviewed-by: Kever Yang <kever.yang@rock-chips.com>
arch/arm/mach-rockchip/misc.c

index 546377e61d9989022ed568d2aff4e600458a04a9..6dbb9bde483a0ede9a276fa1743680833569409e 100644 (file)
@@ -92,6 +92,7 @@ int rockchip_cpuid_set(const u8 *cpuid, const u32 cpuid_length)
        char cpuid_str[cpuid_length * 2 + 1];
        u64 serialno;
        char serialno_str[17];
+       const char *oldid;
        int i;
 
        memset(cpuid_str, 0, sizeof(cpuid_str));
@@ -113,8 +114,16 @@ int rockchip_cpuid_set(const u8 *cpuid, const u32 cpuid_length)
        serialno |= (u64)crc32_no_comp(serialno, high, 8) << 32;
        snprintf(serialno_str, sizeof(serialno_str), "%016llx", serialno);
 
+       oldid = env_get("cpuid#");
+       if (oldid && strcmp(oldid, cpuid_str) != 0)
+               printf("cpuid: value %s present in env does not match hardware %s\n",
+                      oldid, cpuid_str);
+
        env_set("cpuid#", cpuid_str);
-       env_set("serial#", serialno_str);
+
+       /* Only generate serial# when none is set yet */
+       if (!env_get("serial#"))
+               env_set("serial#", serialno_str);
 
        return 0;
 }