All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] board: amlogic: vim3: fix setup ethernet mac from efuse
@ 2021-01-12 11:42 ` Artem Lapkin
  0 siblings, 0 replies; 12+ messages in thread
From: Artem Lapkin @ 2021-01-12 11:42 UTC (permalink / raw)
  To: u-boot

Fix reading built-in ethernet MAC address from efuse

NOTE: MAC is stored in ASCII format, 1bytes = 2characters by 0 offset

if mac from efuse not valid we use meson_generate_serial_ethaddr

NOTE: remake odroid-n2.c from Neil Armstrong <narmstrong@baylibre.com>

Signed-off-by: Artem Lapkin <art@khadas.com>
---
 board/amlogic/vim3/vim3.c | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/board/amlogic/vim3/vim3.c b/board/amlogic/vim3/vim3.c
index 824fff8262..87d9fe1f02 100644
--- a/board/amlogic/vim3/vim3.c
+++ b/board/amlogic/vim3/vim3.c
@@ -139,26 +139,42 @@ int meson_ft_board_setup(void *blob, struct bd_info *bd)
 }
 
 #define EFUSE_MAC_OFFSET	0
-#define EFUSE_MAC_SIZE		6
+#define EFUSE_MAC_SIZE		12
+#define MAC_ADDR_LEN		6
 
 int misc_init_r(void)
 {
-	uint8_t mac_addr[EFUSE_MAC_SIZE];
+	u8 mac_addr[MAC_ADDR_LEN];
+	char efuse_mac_addr[EFUSE_MAC_SIZE], tmp[3];
 	ssize_t len;
 
 	meson_eth_init(PHY_INTERFACE_MODE_RGMII, 0);
 
 	if (!eth_env_get_enetaddr("ethaddr", mac_addr)) {
 		len = meson_sm_read_efuse(EFUSE_MAC_OFFSET,
-					  mac_addr, EFUSE_MAC_SIZE);
+					  efuse_mac_addr, EFUSE_MAC_SIZE);
 		if (len != EFUSE_MAC_SIZE)
 			return 0;
 
+		/* MAC is stored in ASCII format, 1bytes = 2characters */
+		for (int i = 0; i < 6; i++) {
+			tmp[0] = efuse_mac_addr[i * 2];
+			tmp[1] = efuse_mac_addr[i * 2 + 1];
+			tmp[2] = '\0';
+			mac_addr[i] = simple_strtoul(tmp, NULL, 16);
+		}
+
 		if (is_valid_ethaddr(mac_addr))
 			eth_env_set_enetaddr("ethaddr", mac_addr);
 		else
 			meson_generate_serial_ethaddr();
+
+		eth_env_get_enetaddr("ethaddr", mac_addr);
+		printf("[i] setup onboard mac %02X:%02X:%02X:%02X:%02X:%02X\n",
+		       mac_addr[0], mac_addr[1], mac_addr[2],
+		       mac_addr[3], mac_addr[4], mac_addr[5]);
 	}
 
 	return 0;
 }
+
-- 
2.25.1

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH] board: amlogic: vim3: fix setup ethernet mac from efuse
@ 2021-01-12 11:42 ` Artem Lapkin
  0 siblings, 0 replies; 12+ messages in thread
From: Artem Lapkin @ 2021-01-12 11:42 UTC (permalink / raw)
  To: narmstrong
  Cc: u-boot, u-boot-amlogic, m.szyprowski, jh80.chung, art, nick, gouwa

Fix reading built-in ethernet MAC address from efuse

NOTE: MAC is stored in ASCII format, 1bytes = 2characters by 0 offset

if mac from efuse not valid we use meson_generate_serial_ethaddr

NOTE: remake odroid-n2.c from Neil Armstrong <narmstrong@baylibre.com>

Signed-off-by: Artem Lapkin <art@khadas.com>
---
 board/amlogic/vim3/vim3.c | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/board/amlogic/vim3/vim3.c b/board/amlogic/vim3/vim3.c
index 824fff8262..87d9fe1f02 100644
--- a/board/amlogic/vim3/vim3.c
+++ b/board/amlogic/vim3/vim3.c
@@ -139,26 +139,42 @@ int meson_ft_board_setup(void *blob, struct bd_info *bd)
 }
 
 #define EFUSE_MAC_OFFSET	0
-#define EFUSE_MAC_SIZE		6
+#define EFUSE_MAC_SIZE		12
+#define MAC_ADDR_LEN		6
 
 int misc_init_r(void)
 {
-	uint8_t mac_addr[EFUSE_MAC_SIZE];
+	u8 mac_addr[MAC_ADDR_LEN];
+	char efuse_mac_addr[EFUSE_MAC_SIZE], tmp[3];
 	ssize_t len;
 
 	meson_eth_init(PHY_INTERFACE_MODE_RGMII, 0);
 
 	if (!eth_env_get_enetaddr("ethaddr", mac_addr)) {
 		len = meson_sm_read_efuse(EFUSE_MAC_OFFSET,
-					  mac_addr, EFUSE_MAC_SIZE);
+					  efuse_mac_addr, EFUSE_MAC_SIZE);
 		if (len != EFUSE_MAC_SIZE)
 			return 0;
 
+		/* MAC is stored in ASCII format, 1bytes = 2characters */
+		for (int i = 0; i < 6; i++) {
+			tmp[0] = efuse_mac_addr[i * 2];
+			tmp[1] = efuse_mac_addr[i * 2 + 1];
+			tmp[2] = '\0';
+			mac_addr[i] = simple_strtoul(tmp, NULL, 16);
+		}
+
 		if (is_valid_ethaddr(mac_addr))
 			eth_env_set_enetaddr("ethaddr", mac_addr);
 		else
 			meson_generate_serial_ethaddr();
+
+		eth_env_get_enetaddr("ethaddr", mac_addr);
+		printf("[i] setup onboard mac %02X:%02X:%02X:%02X:%02X:%02X\n",
+		       mac_addr[0], mac_addr[1], mac_addr[2],
+		       mac_addr[3], mac_addr[4], mac_addr[5]);
 	}
 
 	return 0;
 }
+
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH] board: amlogic: vim3: fix setup ethernet mac from efuse
  2021-01-12 11:42 ` Artem Lapkin
@ 2021-01-12 13:21   ` Neil Armstrong
  -1 siblings, 0 replies; 12+ messages in thread
From: Neil Armstrong @ 2021-01-12 13:21 UTC (permalink / raw)
  To: u-boot

Hi Artem,

On 12/01/2021 12:42, Artem Lapkin wrote:
> Fix reading built-in ethernet MAC address from efuse
> 
> NOTE: MAC is stored in ASCII format, 1bytes = 2characters by 0 offset
> 
> if mac from efuse not valid we use meson_generate_serial_ethaddr
> 
> NOTE: remake odroid-n2.c from Neil Armstrong <narmstrong@baylibre.com>
> 
> Signed-off-by: Artem Lapkin <art@khadas.com>
> ---
>  board/amlogic/vim3/vim3.c | 22 +++++++++++++++++++---
>  1 file changed, 19 insertions(+), 3 deletions(-)
> 
> diff --git a/board/amlogic/vim3/vim3.c b/board/amlogic/vim3/vim3.c
> index 824fff8262..87d9fe1f02 100644
> --- a/board/amlogic/vim3/vim3.c
> +++ b/board/amlogic/vim3/vim3.c
> @@ -139,26 +139,42 @@ int meson_ft_board_setup(void *blob, struct bd_info *bd)
>  }
>  
>  #define EFUSE_MAC_OFFSET	0
> -#define EFUSE_MAC_SIZE		6
> +#define EFUSE_MAC_SIZE		12
> +#define MAC_ADDR_LEN		6
>  
>  int misc_init_r(void)
>  {
> -	uint8_t mac_addr[EFUSE_MAC_SIZE];
> +	u8 mac_addr[MAC_ADDR_LEN];
> +	char efuse_mac_addr[EFUSE_MAC_SIZE], tmp[3];
>  	ssize_t len;
>  
>  	meson_eth_init(PHY_INTERFACE_MODE_RGMII, 0);
>  
>  	if (!eth_env_get_enetaddr("ethaddr", mac_addr)) {
>  		len = meson_sm_read_efuse(EFUSE_MAC_OFFSET,
> -					  mac_addr, EFUSE_MAC_SIZE);
> +					  efuse_mac_addr, EFUSE_MAC_SIZE);
>  		if (len != EFUSE_MAC_SIZE)
>  			return 0;
>  
> +		/* MAC is stored in ASCII format, 1bytes = 2characters */
> +		for (int i = 0; i < 6; i++) {
> +			tmp[0] = efuse_mac_addr[i * 2];
> +			tmp[1] = efuse_mac_addr[i * 2 + 1];
> +			tmp[2] = '\0';
> +			mac_addr[i] = simple_strtoul(tmp, NULL, 16);
> +		}
> +
>  		if (is_valid_ethaddr(mac_addr))
>  			eth_env_set_enetaddr("ethaddr", mac_addr);
>  		else
>  			meson_generate_serial_ethaddr();
> +
> +		eth_env_get_enetaddr("ethaddr", mac_addr);
> +		printf("[i] setup onboard mac %02X:%02X:%02X:%02X:%02X:%02X\n",
> +		       mac_addr[0], mac_addr[1], mac_addr[2],
> +		       mac_addr[3], mac_addr[4], mac_addr[5]);


Yes, it's not necessary to print the MAC, I'll drop while applying.

>  	}
>  
>  	return 0;
>  }
> +
> 

Applying to u-boot-amlogic

Neil

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] board: amlogic: vim3: fix setup ethernet mac from efuse
@ 2021-01-12 13:21   ` Neil Armstrong
  0 siblings, 0 replies; 12+ messages in thread
From: Neil Armstrong @ 2021-01-12 13:21 UTC (permalink / raw)
  To: Artem Lapkin
  Cc: u-boot, u-boot-amlogic, m.szyprowski, jh80.chung, art, nick, gouwa

Hi Artem,

On 12/01/2021 12:42, Artem Lapkin wrote:
> Fix reading built-in ethernet MAC address from efuse
> 
> NOTE: MAC is stored in ASCII format, 1bytes = 2characters by 0 offset
> 
> if mac from efuse not valid we use meson_generate_serial_ethaddr
> 
> NOTE: remake odroid-n2.c from Neil Armstrong <narmstrong@baylibre.com>
> 
> Signed-off-by: Artem Lapkin <art@khadas.com>
> ---
>  board/amlogic/vim3/vim3.c | 22 +++++++++++++++++++---
>  1 file changed, 19 insertions(+), 3 deletions(-)
> 
> diff --git a/board/amlogic/vim3/vim3.c b/board/amlogic/vim3/vim3.c
> index 824fff8262..87d9fe1f02 100644
> --- a/board/amlogic/vim3/vim3.c
> +++ b/board/amlogic/vim3/vim3.c
> @@ -139,26 +139,42 @@ int meson_ft_board_setup(void *blob, struct bd_info *bd)
>  }
>  
>  #define EFUSE_MAC_OFFSET	0
> -#define EFUSE_MAC_SIZE		6
> +#define EFUSE_MAC_SIZE		12
> +#define MAC_ADDR_LEN		6
>  
>  int misc_init_r(void)
>  {
> -	uint8_t mac_addr[EFUSE_MAC_SIZE];
> +	u8 mac_addr[MAC_ADDR_LEN];
> +	char efuse_mac_addr[EFUSE_MAC_SIZE], tmp[3];
>  	ssize_t len;
>  
>  	meson_eth_init(PHY_INTERFACE_MODE_RGMII, 0);
>  
>  	if (!eth_env_get_enetaddr("ethaddr", mac_addr)) {
>  		len = meson_sm_read_efuse(EFUSE_MAC_OFFSET,
> -					  mac_addr, EFUSE_MAC_SIZE);
> +					  efuse_mac_addr, EFUSE_MAC_SIZE);
>  		if (len != EFUSE_MAC_SIZE)
>  			return 0;
>  
> +		/* MAC is stored in ASCII format, 1bytes = 2characters */
> +		for (int i = 0; i < 6; i++) {
> +			tmp[0] = efuse_mac_addr[i * 2];
> +			tmp[1] = efuse_mac_addr[i * 2 + 1];
> +			tmp[2] = '\0';
> +			mac_addr[i] = simple_strtoul(tmp, NULL, 16);
> +		}
> +
>  		if (is_valid_ethaddr(mac_addr))
>  			eth_env_set_enetaddr("ethaddr", mac_addr);
>  		else
>  			meson_generate_serial_ethaddr();
> +
> +		eth_env_get_enetaddr("ethaddr", mac_addr);
> +		printf("[i] setup onboard mac %02X:%02X:%02X:%02X:%02X:%02X\n",
> +		       mac_addr[0], mac_addr[1], mac_addr[2],
> +		       mac_addr[3], mac_addr[4], mac_addr[5]);


Yes, it's not necessary to print the MAC, I'll drop while applying.

>  	}
>  
>  	return 0;
>  }
> +
> 

Applying to u-boot-amlogic

Neil

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH] board: amlogic: vim3: fix setup ethernet mac from efuse
  2021-01-12  5:03   ` Artem Lapkin
@ 2021-01-12 12:12     ` Marek Szyprowski
  -1 siblings, 0 replies; 12+ messages in thread
From: Marek Szyprowski @ 2021-01-12 12:12 UTC (permalink / raw)
  To: u-boot

Hi Artem,

On 12.01.2021 06:03, Artem Lapkin wrote:
> Fix reading built-in ethernet MAC address from efuse
>
> NOTE: MAC is stored in ASCII format, 1bytes = 2characters by 0 offset
>
> if mac from efuse not valid we use meson_generate_serial_ethaddr
>
> NOTE: remake odroid-n2.c variant from Neil Armstrong <narmstrong@baylibre.com>
>
> Signed-off-by: Artem Lapkin <art@khadas.com>

First of all, thanks pointing again at this issue.

I've implemented reading of MAC address from EFUSE for VIM boards and I 
was convinced that it is stored in binary format. I've based my 
assumptions on the vendor code, especially the message from the vendor 
kernel:

[??? 4.028236] efusekeynum: 1
[??? 4.031072] efusekeyname:???????????? mac??? offset:???? 0 size:???? 6
[??? 4.037542] efuse efuse: probe OK!

and the vendors dts:

https://github.com/khadas/linux/blob/khadas-vims-4.9.y/arch/arm64/boot/dts/amlogic/kvim3_linux.dts#L506

which both points that the EFUSE key has only 6 bytes, what means binary 
format. I didn't check it further what is really stored there.

Now I checked again and it looks that the DTS (and thus vendor's kernel 
message) is incorrect, as the MAC is stored in ASCII and occupies 12 
bytes in efuse. One can check that with vendor's kernel:

# cat /sys/class/efuse/userdata
0x00: 43 38 36 33 31 34 37 30 41 38 44 37 00 00 00 00
0x10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
...

This means that your patch is correct, although I would change it a bit.

BTW, the Odroid N2/C4 boards don't have MAC stored explicitly in the 
EFUSE, but the boards UUID. The original code use the last bytes of the 
UUID as the MAC address.

> ---
>   board/amlogic/vim3/vim3.c | 22 +++++++++++++++++++---
>   1 file changed, 19 insertions(+), 3 deletions(-)
>
> diff --git a/board/amlogic/vim3/vim3.c b/board/amlogic/vim3/vim3.c
> index 824fff8262..87d9fe1f02 100644
> --- a/board/amlogic/vim3/vim3.c
> +++ b/board/amlogic/vim3/vim3.c
> @@ -139,26 +139,42 @@ int meson_ft_board_setup(void *blob, struct bd_info *bd)
>   }
>   
>   #define EFUSE_MAC_OFFSET	0
> -#define EFUSE_MAC_SIZE		6
> +#define EFUSE_MAC_SIZE		12
> +#define MAC_ADDR_LEN		6
>   
>   int misc_init_r(void)
>   {
> -	uint8_t mac_addr[EFUSE_MAC_SIZE];
> +	uint8_t mac_addr[MAC_ADDR_LEN];
> +	char efuse_mac_addr[EFUSE_MAC_SIZE], tmp[3];
>   	ssize_t len;
>   
>   	meson_eth_init(PHY_INTERFACE_MODE_RGMII, 0);
>   
>   	if (!eth_env_get_enetaddr("ethaddr", mac_addr)) {
>   		len = meson_sm_read_efuse(EFUSE_MAC_OFFSET,
> -					  mac_addr, EFUSE_MAC_SIZE);
> +					  efuse_mac_addr, EFUSE_MAC_SIZE);
>   		if (len != EFUSE_MAC_SIZE)
>   			return 0;
>   
> +		/* MAC is stored in ASCII format, 1bytes = 2characters */
> +		for (int i = 0; i < 6; i++) {
> +			tmp[0] = efuse_mac_addr[i * 2];
> +			tmp[1] = efuse_mac_addr[i * 2 + 1];
> +			tmp[2] = '\0';
> +			mac_addr[i] = simple_strtoul(tmp, NULL, 16);
> +		}
> +
>   		if (is_valid_ethaddr(mac_addr))
>   			eth_env_set_enetaddr("ethaddr", mac_addr);
>   		else
>   			meson_generate_serial_ethaddr();

Now the above code is the same as for Odroid N2/C4, so it can be moved 
to arch/arm/mach-meson/board-common.c, maybe as 
meson_read_efuse_mac_addr() with the offset as parameter, so it can be 
directly used by Odroids and VIMs.

> +
> +		eth_env_get_enetaddr("ethaddr", mac_addr);
> +		printf("[i] setup onboard mac %02X:%02X:%02X:%02X:%02X:%02X\n",
> +			mac_addr[0],mac_addr[1],mac_addr[2],
> +			mac_addr[3],mac_addr[4],mac_addr[5]);

I'm not really convinced that this message has to be displayed. If so, 
then use "%pM" for printing MAC address.

>   	}
>   
>   	return 0;
>   }
> +

Best regards
-- 
Marek Szyprowski, PhD
Samsung R&D Institute Poland

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] board: amlogic: vim3: fix setup ethernet mac from efuse
@ 2021-01-12 12:12     ` Marek Szyprowski
  0 siblings, 0 replies; 12+ messages in thread
From: Marek Szyprowski @ 2021-01-12 12:12 UTC (permalink / raw)
  To: Artem Lapkin, narmstrong
  Cc: u-boot, u-boot-amlogic, jh80.chung, art, nick, gouwa

Hi Artem,

On 12.01.2021 06:03, Artem Lapkin wrote:
> Fix reading built-in ethernet MAC address from efuse
>
> NOTE: MAC is stored in ASCII format, 1bytes = 2characters by 0 offset
>
> if mac from efuse not valid we use meson_generate_serial_ethaddr
>
> NOTE: remake odroid-n2.c variant from Neil Armstrong <narmstrong@baylibre.com>
>
> Signed-off-by: Artem Lapkin <art@khadas.com>

First of all, thanks pointing again at this issue.

I've implemented reading of MAC address from EFUSE for VIM boards and I 
was convinced that it is stored in binary format. I've based my 
assumptions on the vendor code, especially the message from the vendor 
kernel:

[    4.028236] efusekeynum: 1
[    4.031072] efusekeyname:             mac    offset:     0 size:     6
[    4.037542] efuse efuse: probe OK!

and the vendors dts:

https://github.com/khadas/linux/blob/khadas-vims-4.9.y/arch/arm64/boot/dts/amlogic/kvim3_linux.dts#L506

which both points that the EFUSE key has only 6 bytes, what means binary 
format. I didn't check it further what is really stored there.

Now I checked again and it looks that the DTS (and thus vendor's kernel 
message) is incorrect, as the MAC is stored in ASCII and occupies 12 
bytes in efuse. One can check that with vendor's kernel:

# cat /sys/class/efuse/userdata
0x00: 43 38 36 33 31 34 37 30 41 38 44 37 00 00 00 00
0x10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
...

This means that your patch is correct, although I would change it a bit.

BTW, the Odroid N2/C4 boards don't have MAC stored explicitly in the 
EFUSE, but the boards UUID. The original code use the last bytes of the 
UUID as the MAC address.

> ---
>   board/amlogic/vim3/vim3.c | 22 +++++++++++++++++++---
>   1 file changed, 19 insertions(+), 3 deletions(-)
>
> diff --git a/board/amlogic/vim3/vim3.c b/board/amlogic/vim3/vim3.c
> index 824fff8262..87d9fe1f02 100644
> --- a/board/amlogic/vim3/vim3.c
> +++ b/board/amlogic/vim3/vim3.c
> @@ -139,26 +139,42 @@ int meson_ft_board_setup(void *blob, struct bd_info *bd)
>   }
>   
>   #define EFUSE_MAC_OFFSET	0
> -#define EFUSE_MAC_SIZE		6
> +#define EFUSE_MAC_SIZE		12
> +#define MAC_ADDR_LEN		6
>   
>   int misc_init_r(void)
>   {
> -	uint8_t mac_addr[EFUSE_MAC_SIZE];
> +	uint8_t mac_addr[MAC_ADDR_LEN];
> +	char efuse_mac_addr[EFUSE_MAC_SIZE], tmp[3];
>   	ssize_t len;
>   
>   	meson_eth_init(PHY_INTERFACE_MODE_RGMII, 0);
>   
>   	if (!eth_env_get_enetaddr("ethaddr", mac_addr)) {
>   		len = meson_sm_read_efuse(EFUSE_MAC_OFFSET,
> -					  mac_addr, EFUSE_MAC_SIZE);
> +					  efuse_mac_addr, EFUSE_MAC_SIZE);
>   		if (len != EFUSE_MAC_SIZE)
>   			return 0;
>   
> +		/* MAC is stored in ASCII format, 1bytes = 2characters */
> +		for (int i = 0; i < 6; i++) {
> +			tmp[0] = efuse_mac_addr[i * 2];
> +			tmp[1] = efuse_mac_addr[i * 2 + 1];
> +			tmp[2] = '\0';
> +			mac_addr[i] = simple_strtoul(tmp, NULL, 16);
> +		}
> +
>   		if (is_valid_ethaddr(mac_addr))
>   			eth_env_set_enetaddr("ethaddr", mac_addr);
>   		else
>   			meson_generate_serial_ethaddr();

Now the above code is the same as for Odroid N2/C4, so it can be moved 
to arch/arm/mach-meson/board-common.c, maybe as 
meson_read_efuse_mac_addr() with the offset as parameter, so it can be 
directly used by Odroids and VIMs.

> +
> +		eth_env_get_enetaddr("ethaddr", mac_addr);
> +		printf("[i] setup onboard mac %02X:%02X:%02X:%02X:%02X:%02X\n",
> +			mac_addr[0],mac_addr[1],mac_addr[2],
> +			mac_addr[3],mac_addr[4],mac_addr[5]);

I'm not really convinced that this message has to be displayed. If so, 
then use "%pM" for printing MAC address.

>   	}
>   
>   	return 0;
>   }
> +

Best regards
-- 
Marek Szyprowski, PhD
Samsung R&D Institute Poland


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH] board: amlogic: vim3: fix setup ethernet mac from efuse
  2021-01-12  5:03   ` Artem Lapkin
@ 2021-01-12 11:08     ` Jaehoon Chung
  -1 siblings, 0 replies; 12+ messages in thread
From: Jaehoon Chung @ 2021-01-12 11:08 UTC (permalink / raw)
  To: u-boot

On 1/12/21 2:03 PM, Artem Lapkin wrote:
> Fix reading built-in ethernet MAC address from efuse
> 
> NOTE: MAC is stored in ASCII format, 1bytes = 2characters by 0 offset
> 
> if mac from efuse not valid we use meson_generate_serial_ethaddr
> 
> NOTE: remake odroid-n2.c variant from Neil Armstrong <narmstrong@baylibre.com>
> 
> Signed-off-by: Artem Lapkin <art@khadas.com>
> ---
>  board/amlogic/vim3/vim3.c | 22 +++++++++++++++++++---
>  1 file changed, 19 insertions(+), 3 deletions(-)
> 
> diff --git a/board/amlogic/vim3/vim3.c b/board/amlogic/vim3/vim3.c
> index 824fff8262..87d9fe1f02 100644
> --- a/board/amlogic/vim3/vim3.c
> +++ b/board/amlogic/vim3/vim3.c
> @@ -139,26 +139,42 @@ int meson_ft_board_setup(void *blob, struct bd_info *bd)
>  }
>  
>  #define EFUSE_MAC_OFFSET	0
> -#define EFUSE_MAC_SIZE		6
> +#define EFUSE_MAC_SIZE		12
> +#define MAC_ADDR_LEN		6
>  
>  int misc_init_r(void)
>  {
> -	uint8_t mac_addr[EFUSE_MAC_SIZE];
> +	uint8_t mac_addr[MAC_ADDR_LEN];
> +	char efuse_mac_addr[EFUSE_MAC_SIZE], tmp[3];
>  	ssize_t len;
>  
>  	meson_eth_init(PHY_INTERFACE_MODE_RGMII, 0);
>  
>  	if (!eth_env_get_enetaddr("ethaddr", mac_addr)) {
>  		len = meson_sm_read_efuse(EFUSE_MAC_OFFSET,
> -					  mac_addr, EFUSE_MAC_SIZE);
> +					  efuse_mac_addr, EFUSE_MAC_SIZE);
>  		if (len != EFUSE_MAC_SIZE)
>  			return 0;
>  
> +		/* MAC is stored in ASCII format, 1bytes = 2characters */
> +		for (int i = 0; i < 6; i++) {
> +			tmp[0] = efuse_mac_addr[i * 2];
> +			tmp[1] = efuse_mac_addr[i * 2 + 1];
> +			tmp[2] = '\0';
> +			mac_addr[i] = simple_strtoul(tmp, NULL, 16);
> +		}
> +
>  		if (is_valid_ethaddr(mac_addr))
>  			eth_env_set_enetaddr("ethaddr", mac_addr);
>  		else
>  			meson_generate_serial_ethaddr();
> +
> +		eth_env_get_enetaddr("ethaddr", mac_addr);
> +		printf("[i] setup onboard mac %02X:%02X:%02X:%02X:%02X:%02X\n",
> +			mac_addr[0],mac_addr[1],mac_addr[2],
> +			mac_addr[3],mac_addr[4],mac_addr[5]);

Doesn't need to print mac. If you have to print mac address, then fix the checkpatch error, plz.

ERROR: space required after that ',' (ctx:VxV)
#62: FILE: board/amlogic/vim3/vim3.c:174:
+                       mac_addr[0],mac_addr[1],mac_addr[2],
                                   ^
..

>  	}
>  
>  	return 0;
>  }
> +

Not need whitespace.

Best Regards,
Jaehoon Chung

> 

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] board: amlogic: vim3: fix setup ethernet mac from efuse
@ 2021-01-12 11:08     ` Jaehoon Chung
  0 siblings, 0 replies; 12+ messages in thread
From: Jaehoon Chung @ 2021-01-12 11:08 UTC (permalink / raw)
  To: Artem Lapkin, narmstrong
  Cc: u-boot, u-boot-amlogic, m.szyprowski, art, nick, gouwa

On 1/12/21 2:03 PM, Artem Lapkin wrote:
> Fix reading built-in ethernet MAC address from efuse
> 
> NOTE: MAC is stored in ASCII format, 1bytes = 2characters by 0 offset
> 
> if mac from efuse not valid we use meson_generate_serial_ethaddr
> 
> NOTE: remake odroid-n2.c variant from Neil Armstrong <narmstrong@baylibre.com>
> 
> Signed-off-by: Artem Lapkin <art@khadas.com>
> ---
>  board/amlogic/vim3/vim3.c | 22 +++++++++++++++++++---
>  1 file changed, 19 insertions(+), 3 deletions(-)
> 
> diff --git a/board/amlogic/vim3/vim3.c b/board/amlogic/vim3/vim3.c
> index 824fff8262..87d9fe1f02 100644
> --- a/board/amlogic/vim3/vim3.c
> +++ b/board/amlogic/vim3/vim3.c
> @@ -139,26 +139,42 @@ int meson_ft_board_setup(void *blob, struct bd_info *bd)
>  }
>  
>  #define EFUSE_MAC_OFFSET	0
> -#define EFUSE_MAC_SIZE		6
> +#define EFUSE_MAC_SIZE		12
> +#define MAC_ADDR_LEN		6
>  
>  int misc_init_r(void)
>  {
> -	uint8_t mac_addr[EFUSE_MAC_SIZE];
> +	uint8_t mac_addr[MAC_ADDR_LEN];
> +	char efuse_mac_addr[EFUSE_MAC_SIZE], tmp[3];
>  	ssize_t len;
>  
>  	meson_eth_init(PHY_INTERFACE_MODE_RGMII, 0);
>  
>  	if (!eth_env_get_enetaddr("ethaddr", mac_addr)) {
>  		len = meson_sm_read_efuse(EFUSE_MAC_OFFSET,
> -					  mac_addr, EFUSE_MAC_SIZE);
> +					  efuse_mac_addr, EFUSE_MAC_SIZE);
>  		if (len != EFUSE_MAC_SIZE)
>  			return 0;
>  
> +		/* MAC is stored in ASCII format, 1bytes = 2characters */
> +		for (int i = 0; i < 6; i++) {
> +			tmp[0] = efuse_mac_addr[i * 2];
> +			tmp[1] = efuse_mac_addr[i * 2 + 1];
> +			tmp[2] = '\0';
> +			mac_addr[i] = simple_strtoul(tmp, NULL, 16);
> +		}
> +
>  		if (is_valid_ethaddr(mac_addr))
>  			eth_env_set_enetaddr("ethaddr", mac_addr);
>  		else
>  			meson_generate_serial_ethaddr();
> +
> +		eth_env_get_enetaddr("ethaddr", mac_addr);
> +		printf("[i] setup onboard mac %02X:%02X:%02X:%02X:%02X:%02X\n",
> +			mac_addr[0],mac_addr[1],mac_addr[2],
> +			mac_addr[3],mac_addr[4],mac_addr[5]);

Doesn't need to print mac. If you have to print mac address, then fix the checkpatch error, plz.

ERROR: space required after that ',' (ctx:VxV)
#62: FILE: board/amlogic/vim3/vim3.c:174:
+                       mac_addr[0],mac_addr[1],mac_addr[2],
                                   ^
..

>  	}
>  
>  	return 0;
>  }
> +

Not need whitespace.

Best Regards,
Jaehoon Chung

> 


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH] board: amlogic: vim3: fix setup ethernet mac from efuse
@ 2021-01-12  5:03   ` Artem Lapkin
  0 siblings, 0 replies; 12+ messages in thread
From: Artem Lapkin @ 2021-01-12  5:03 UTC (permalink / raw)
  To: u-boot

Fix reading built-in ethernet MAC address from efuse

NOTE: MAC is stored in ASCII format, 1bytes = 2characters by 0 offset

if mac from efuse not valid we use meson_generate_serial_ethaddr

NOTE: remake odroid-n2.c variant from Neil Armstrong <narmstrong@baylibre.com>

Signed-off-by: Artem Lapkin <art@khadas.com>
---
 board/amlogic/vim3/vim3.c | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/board/amlogic/vim3/vim3.c b/board/amlogic/vim3/vim3.c
index 824fff8262..87d9fe1f02 100644
--- a/board/amlogic/vim3/vim3.c
+++ b/board/amlogic/vim3/vim3.c
@@ -139,26 +139,42 @@ int meson_ft_board_setup(void *blob, struct bd_info *bd)
 }
 
 #define EFUSE_MAC_OFFSET	0
-#define EFUSE_MAC_SIZE		6
+#define EFUSE_MAC_SIZE		12
+#define MAC_ADDR_LEN		6
 
 int misc_init_r(void)
 {
-	uint8_t mac_addr[EFUSE_MAC_SIZE];
+	uint8_t mac_addr[MAC_ADDR_LEN];
+	char efuse_mac_addr[EFUSE_MAC_SIZE], tmp[3];
 	ssize_t len;
 
 	meson_eth_init(PHY_INTERFACE_MODE_RGMII, 0);
 
 	if (!eth_env_get_enetaddr("ethaddr", mac_addr)) {
 		len = meson_sm_read_efuse(EFUSE_MAC_OFFSET,
-					  mac_addr, EFUSE_MAC_SIZE);
+					  efuse_mac_addr, EFUSE_MAC_SIZE);
 		if (len != EFUSE_MAC_SIZE)
 			return 0;
 
+		/* MAC is stored in ASCII format, 1bytes = 2characters */
+		for (int i = 0; i < 6; i++) {
+			tmp[0] = efuse_mac_addr[i * 2];
+			tmp[1] = efuse_mac_addr[i * 2 + 1];
+			tmp[2] = '\0';
+			mac_addr[i] = simple_strtoul(tmp, NULL, 16);
+		}
+
 		if (is_valid_ethaddr(mac_addr))
 			eth_env_set_enetaddr("ethaddr", mac_addr);
 		else
 			meson_generate_serial_ethaddr();
+
+		eth_env_get_enetaddr("ethaddr", mac_addr);
+		printf("[i] setup onboard mac %02X:%02X:%02X:%02X:%02X:%02X\n",
+			mac_addr[0],mac_addr[1],mac_addr[2],
+			mac_addr[3],mac_addr[4],mac_addr[5]);
 	}
 
 	return 0;
 }
+
-- 
2.25.1

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH] board: amlogic: vim3: fix setup ethernet mac from efuse
@ 2021-01-12  5:03   ` Artem Lapkin
  0 siblings, 0 replies; 12+ messages in thread
From: Artem Lapkin @ 2021-01-12  5:03 UTC (permalink / raw)
  To: narmstrong
  Cc: u-boot, u-boot-amlogic, m.szyprowski, jh80.chung, art, nick, gouwa

Fix reading built-in ethernet MAC address from efuse

NOTE: MAC is stored in ASCII format, 1bytes = 2characters by 0 offset

if mac from efuse not valid we use meson_generate_serial_ethaddr

NOTE: remake odroid-n2.c variant from Neil Armstrong <narmstrong@baylibre.com>

Signed-off-by: Artem Lapkin <art@khadas.com>
---
 board/amlogic/vim3/vim3.c | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/board/amlogic/vim3/vim3.c b/board/amlogic/vim3/vim3.c
index 824fff8262..87d9fe1f02 100644
--- a/board/amlogic/vim3/vim3.c
+++ b/board/amlogic/vim3/vim3.c
@@ -139,26 +139,42 @@ int meson_ft_board_setup(void *blob, struct bd_info *bd)
 }
 
 #define EFUSE_MAC_OFFSET	0
-#define EFUSE_MAC_SIZE		6
+#define EFUSE_MAC_SIZE		12
+#define MAC_ADDR_LEN		6
 
 int misc_init_r(void)
 {
-	uint8_t mac_addr[EFUSE_MAC_SIZE];
+	uint8_t mac_addr[MAC_ADDR_LEN];
+	char efuse_mac_addr[EFUSE_MAC_SIZE], tmp[3];
 	ssize_t len;
 
 	meson_eth_init(PHY_INTERFACE_MODE_RGMII, 0);
 
 	if (!eth_env_get_enetaddr("ethaddr", mac_addr)) {
 		len = meson_sm_read_efuse(EFUSE_MAC_OFFSET,
-					  mac_addr, EFUSE_MAC_SIZE);
+					  efuse_mac_addr, EFUSE_MAC_SIZE);
 		if (len != EFUSE_MAC_SIZE)
 			return 0;
 
+		/* MAC is stored in ASCII format, 1bytes = 2characters */
+		for (int i = 0; i < 6; i++) {
+			tmp[0] = efuse_mac_addr[i * 2];
+			tmp[1] = efuse_mac_addr[i * 2 + 1];
+			tmp[2] = '\0';
+			mac_addr[i] = simple_strtoul(tmp, NULL, 16);
+		}
+
 		if (is_valid_ethaddr(mac_addr))
 			eth_env_set_enetaddr("ethaddr", mac_addr);
 		else
 			meson_generate_serial_ethaddr();
+
+		eth_env_get_enetaddr("ethaddr", mac_addr);
+		printf("[i] setup onboard mac %02X:%02X:%02X:%02X:%02X:%02X\n",
+			mac_addr[0],mac_addr[1],mac_addr[2],
+			mac_addr[3],mac_addr[4],mac_addr[5]);
 	}
 
 	return 0;
 }
+
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH] board: amlogic: vim3: fix setup ethernet mac from efuse
  2021-01-12  4:30 ` Artem Lapkin
@ 2021-01-12  4:56   ` Jaehoon Chung
  0 siblings, 0 replies; 12+ messages in thread
From: Jaehoon Chung @ 2021-01-12  4:56 UTC (permalink / raw)
  To: Artem Lapkin, narmstrong; +Cc: u-boot-amlogic, m.szyprowski, art, nick, gouwa

Hi Artem,

On 1/12/21 1:30 PM, Artem Lapkin wrote:
> Fix reading built-in ethernet MAC address from efuse
> 
> NOTE: MAC is stored in ASCII format, 1bytes = 2characters by 0 offset
> 
> if mac from efuse not valid we use meson_generate_serial_ethaddr

Could you resend patch after adding u-boot mailing list?

Best Regards,
Jaehoon Chung

> 
> NOTE: remake odroid-n2.c variant from Neil Armstrong <narmstrong@baylibre.com>
> 
> Signed-off-by: Artem Lapkin <art@khadas.com>
> ---
>  board/amlogic/vim3/vim3.c | 22 +++++++++++++++++++---
>  1 file changed, 19 insertions(+), 3 deletions(-)
> 
> diff --git a/board/amlogic/vim3/vim3.c b/board/amlogic/vim3/vim3.c
> index 824fff8262..87d9fe1f02 100644
> --- a/board/amlogic/vim3/vim3.c
> +++ b/board/amlogic/vim3/vim3.c
> @@ -139,26 +139,42 @@ int meson_ft_board_setup(void *blob, struct bd_info *bd)
>  }
>  
>  #define EFUSE_MAC_OFFSET	0
> -#define EFUSE_MAC_SIZE		6
> +#define EFUSE_MAC_SIZE		12
> +#define MAC_ADDR_LEN		6
>  
>  int misc_init_r(void)
>  {
> -	uint8_t mac_addr[EFUSE_MAC_SIZE];
> +	uint8_t mac_addr[MAC_ADDR_LEN];
> +	char efuse_mac_addr[EFUSE_MAC_SIZE], tmp[3];
>  	ssize_t len;
>  
>  	meson_eth_init(PHY_INTERFACE_MODE_RGMII, 0);
>  
>  	if (!eth_env_get_enetaddr("ethaddr", mac_addr)) {
>  		len = meson_sm_read_efuse(EFUSE_MAC_OFFSET,
> -					  mac_addr, EFUSE_MAC_SIZE);
> +					  efuse_mac_addr, EFUSE_MAC_SIZE);
>  		if (len != EFUSE_MAC_SIZE)
>  			return 0;
>  
> +		/* MAC is stored in ASCII format, 1bytes = 2characters */
> +		for (int i = 0; i < 6; i++) {
> +			tmp[0] = efuse_mac_addr[i * 2];
> +			tmp[1] = efuse_mac_addr[i * 2 + 1];
> +			tmp[2] = '\0';
> +			mac_addr[i] = simple_strtoul(tmp, NULL, 16);
> +		}
> +
>  		if (is_valid_ethaddr(mac_addr))
>  			eth_env_set_enetaddr("ethaddr", mac_addr);
>  		else
>  			meson_generate_serial_ethaddr();
> +
> +		eth_env_get_enetaddr("ethaddr", mac_addr);
> +		printf("[i] setup onboard mac %02X:%02X:%02X:%02X:%02X:%02X\n",
> +			mac_addr[0],mac_addr[1],mac_addr[2],
> +			mac_addr[3],mac_addr[4],mac_addr[5]);
>  	}
>  
>  	return 0;
>  }
> +
> 


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH] board: amlogic: vim3: fix setup ethernet mac from efuse
@ 2021-01-12  4:30 ` Artem Lapkin
  2021-01-12  4:56   ` Jaehoon Chung
  0 siblings, 1 reply; 12+ messages in thread
From: Artem Lapkin @ 2021-01-12  4:30 UTC (permalink / raw)
  To: narmstrong; +Cc: u-boot-amlogic, m.szyprowski, jh80.chung, art, nick, gouwa

Fix reading built-in ethernet MAC address from efuse

NOTE: MAC is stored in ASCII format, 1bytes = 2characters by 0 offset

if mac from efuse not valid we use meson_generate_serial_ethaddr

NOTE: remake odroid-n2.c variant from Neil Armstrong <narmstrong@baylibre.com>

Signed-off-by: Artem Lapkin <art@khadas.com>
---
 board/amlogic/vim3/vim3.c | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/board/amlogic/vim3/vim3.c b/board/amlogic/vim3/vim3.c
index 824fff8262..87d9fe1f02 100644
--- a/board/amlogic/vim3/vim3.c
+++ b/board/amlogic/vim3/vim3.c
@@ -139,26 +139,42 @@ int meson_ft_board_setup(void *blob, struct bd_info *bd)
 }
 
 #define EFUSE_MAC_OFFSET	0
-#define EFUSE_MAC_SIZE		6
+#define EFUSE_MAC_SIZE		12
+#define MAC_ADDR_LEN		6
 
 int misc_init_r(void)
 {
-	uint8_t mac_addr[EFUSE_MAC_SIZE];
+	uint8_t mac_addr[MAC_ADDR_LEN];
+	char efuse_mac_addr[EFUSE_MAC_SIZE], tmp[3];
 	ssize_t len;
 
 	meson_eth_init(PHY_INTERFACE_MODE_RGMII, 0);
 
 	if (!eth_env_get_enetaddr("ethaddr", mac_addr)) {
 		len = meson_sm_read_efuse(EFUSE_MAC_OFFSET,
-					  mac_addr, EFUSE_MAC_SIZE);
+					  efuse_mac_addr, EFUSE_MAC_SIZE);
 		if (len != EFUSE_MAC_SIZE)
 			return 0;
 
+		/* MAC is stored in ASCII format, 1bytes = 2characters */
+		for (int i = 0; i < 6; i++) {
+			tmp[0] = efuse_mac_addr[i * 2];
+			tmp[1] = efuse_mac_addr[i * 2 + 1];
+			tmp[2] = '\0';
+			mac_addr[i] = simple_strtoul(tmp, NULL, 16);
+		}
+
 		if (is_valid_ethaddr(mac_addr))
 			eth_env_set_enetaddr("ethaddr", mac_addr);
 		else
 			meson_generate_serial_ethaddr();
+
+		eth_env_get_enetaddr("ethaddr", mac_addr);
+		printf("[i] setup onboard mac %02X:%02X:%02X:%02X:%02X:%02X\n",
+			mac_addr[0],mac_addr[1],mac_addr[2],
+			mac_addr[3],mac_addr[4],mac_addr[5]);
 	}
 
 	return 0;
 }
+
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2021-01-12 13:22 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-12 11:42 [PATCH] board: amlogic: vim3: fix setup ethernet mac from efuse Artem Lapkin
2021-01-12 11:42 ` Artem Lapkin
2021-01-12 13:21 ` Neil Armstrong
2021-01-12 13:21   ` Neil Armstrong
     [not found] <CGME20210112050445epcas1p19c5a31ae23bda75d62c393433f4e89d9@epcas1p1.samsung.com>
2021-01-12  5:03 ` Artem Lapkin
2021-01-12  5:03   ` Artem Lapkin
2021-01-12 11:08   ` Jaehoon Chung
2021-01-12 11:08     ` Jaehoon Chung
2021-01-12 12:12   ` Marek Szyprowski
2021-01-12 12:12     ` Marek Szyprowski
     [not found] <CGME20210112043201epcas1p2eddcb51eed5f193425cacb7b5d51326e@epcas1p2.samsung.com>
2021-01-12  4:30 ` Artem Lapkin
2021-01-12  4:56   ` Jaehoon Chung

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.