[U-Boot,2/2] rockchip: misc: protect serial# from getting overwritten
diff mbox series

Message ID 20191129154043.17395-2-heiko@sntech.de
State Accepted
Commit fd3a7ae8e6fa58a566dae182098effc61c2d9efd
Delegated to: Kever Yang
Headers show
Series
  • [U-Boot,1/2] rockchip: misc: don't fail if eth_addr already set
Related show

Commit Message

Heiko Stuebner Nov. 29, 2019, 3:40 p.m. UTC
From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>

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>
---
 arch/arm/mach-rockchip/misc.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

Comments

Kever Yang Dec. 1, 2019, 1:47 p.m. UTC | #1
On 2019/11/29 下午11:40, Heiko Stuebner wrote:
> From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
>
> 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>

Thanks,
- Kever
> ---
>   arch/arm/mach-rockchip/misc.c | 11 ++++++++++-
>   1 file changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm/mach-rockchip/misc.c b/arch/arm/mach-rockchip/misc.c
> index d0fb3d07a7..545b98baad 100644
> --- a/arch/arm/mach-rockchip/misc.c
> +++ b/arch/arm/mach-rockchip/misc.c
> @@ -91,6 +91,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));
> @@ -112,8 +113,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;
>   }

Patch
diff mbox series

diff --git a/arch/arm/mach-rockchip/misc.c b/arch/arm/mach-rockchip/misc.c
index d0fb3d07a7..545b98baad 100644
--- a/arch/arm/mach-rockchip/misc.c
+++ b/arch/arm/mach-rockchip/misc.c
@@ -91,6 +91,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));
@@ -112,8 +113,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;
 }