Re: [PATCH] toradex: tdx-cfg-block: add new toradex oui range

2022-07-06 Thread Tom Rini
On Mon, Jun 20, 2022 at 04:57:45PM +0200, Philippe Schenker wrote:

> From: Philippe Schenker 
> 
> Add new Toradex MAC OUI (8c:06:cb), to the config block. With this change
> we extend the possible serial-numbers as follows:
> 
> For serial-numbers -16777215 OUI 00:14:2d is taken
> For serial-numbers 16777216-33554431 OUI 8c:06:cb is taken
> 
> Lower 24-bit of the serial number are used in the NIC part of the
> MAC address, the complete serial number can be calculated using the OUI.
> 
> Signed-off-by: Philippe Schenker 
> Reviewed-by: Francesco Dolcini 
> Reviewed-by: Fabio Estevam 
> Acked-by: Marcel Ziswiler 

Applied to u-boot/next, thanks!

-- 
Tom


signature.asc
Description: PGP signature


Re: [PATCH] toradex: tdx-cfg-block: add new toradex oui range

2022-06-20 Thread Fabio Estevam
On Mon, Jun 20, 2022 at 11:59 AM Philippe Schenker  wrote:
>
> From: Philippe Schenker 
>
> Add new Toradex MAC OUI (8c:06:cb), to the config block. With this change
> we extend the possible serial-numbers as follows:
>
> For serial-numbers -16777215 OUI 00:14:2d is taken
> For serial-numbers 16777216-33554431 OUI 8c:06:cb is taken
>
> Lower 24-bit of the serial number are used in the NIC part of the
> MAC address, the complete serial number can be calculated using the OUI.
>
> Signed-off-by: Philippe Schenker 
> Reviewed-by: Francesco Dolcini 

Reviewed-by: Fabio Estevam 


[PATCH] toradex: tdx-cfg-block: add new toradex oui range

2022-06-20 Thread Philippe Schenker
From: Philippe Schenker 

Add new Toradex MAC OUI (8c:06:cb), to the config block. With this change
we extend the possible serial-numbers as follows:

For serial-numbers -16777215 OUI 00:14:2d is taken
For serial-numbers 16777216-33554431 OUI 8c:06:cb is taken

Lower 24-bit of the serial number are used in the NIC part of the
MAC address, the complete serial number can be calculated using the OUI.

Signed-off-by: Philippe Schenker 
Reviewed-by: Francesco Dolcini 

---

 board/toradex/common/tdx-cfg-block.c | 42 +---
 board/toradex/common/tdx-cfg-block.h |  2 ++
 board/toradex/common/tdx-common.c|  5 +---
 3 files changed, 41 insertions(+), 8 deletions(-)

diff --git a/board/toradex/common/tdx-cfg-block.c 
b/board/toradex/common/tdx-cfg-block.c
index 6c8cf4592d..053c03ddf2 100644
--- a/board/toradex/common/tdx-cfg-block.c
+++ b/board/toradex/common/tdx-cfg-block.c
@@ -159,6 +159,42 @@ const char * const toradex_display_adapters[] = {
[159] = "Verdin DSI to LVDS Adapter",
 };
 
+const u32 toradex_ouis[] = {
+   [0] = 0x00142dUL,
+   [1] = 0x8c06cbUL,
+};
+
+static u32 get_serial_from_mac(struct toradex_eth_addr *eth_addr)
+{
+   int i;
+   u32 oui = ntohl(eth_addr->oui) >> 8;
+   u32 nic = ntohl(eth_addr->nic) >> 8;
+
+   for (i = 0; i < ARRAY_SIZE(toradex_ouis); i++) {
+   if (toradex_ouis[i] == oui)
+   break;
+   }
+
+   return (u32)((i << 24) + nic);
+}
+
+void get_mac_from_serial(u32 tdx_serial, struct toradex_eth_addr *eth_addr)
+{
+   u8 oui_index = tdx_serial >> 24;
+   u32 nic = tdx_serial & GENMASK(23, 0);
+   u32 oui;
+
+   if (oui_index >= ARRAY_SIZE(toradex_ouis)) {
+   puts("Can't find OUI for this serial#\n");
+   oui_index = 0;
+   }
+
+   oui = toradex_ouis[oui_index];
+
+   eth_addr->oui = htonl(oui << 8);
+   eth_addr->nic = htonl(nic << 8);
+}
+
 #ifdef CONFIG_TDX_CFG_BLOCK_IS_IN_MMC
 static int tdx_cfg_block_mmc_storage(u8 *config_block, int write)
 {
@@ -331,8 +367,7 @@ int read_tdx_cfg_block(void)
memcpy(_eth_addr, config_block + offset,
   6);
 
-   /* NIC part of MAC address is serial number */
-   tdx_serial = ntohl(tdx_eth_addr.nic) >> 8;
+   tdx_serial = get_serial_from_mac(_eth_addr);
break;
case TAG_HW:
memcpy(_hw_tag, config_block + offset, 8);
@@ -950,8 +985,7 @@ static int do_cfgblock_create(struct cmd_tbl *cmdtp, int 
flag, int argc,
}
 
/* Convert serial number to MAC address (the storage format) */
-   tdx_eth_addr.oui = htonl(0x00142dUL << 8);
-   tdx_eth_addr.nic = htonl(tdx_serial << 8);
+   get_mac_from_serial(tdx_serial, _eth_addr);
 
/* Valid Tag */
write_tag(config_block, , TAG_VALID, NULL, 0);
diff --git a/board/toradex/common/tdx-cfg-block.h 
b/board/toradex/common/tdx-cfg-block.h
index 43e662e41d..1790698486 100644
--- a/board/toradex/common/tdx-cfg-block.h
+++ b/board/toradex/common/tdx-cfg-block.h
@@ -114,4 +114,6 @@ int read_tdx_cfg_block_carrier(void);
 
 int try_migrate_tdx_cfg_block_carrier(void);
 
+void get_mac_from_serial(u32 tdx_serial, struct toradex_eth_addr *eth_addr);
+
 #endif /* _TDX_CFG_BLOCK_H */
diff --git a/board/toradex/common/tdx-common.c 
b/board/toradex/common/tdx-common.c
index 9db4553e0f..211d3c35e0 100644
--- a/board/toradex/common/tdx-common.c
+++ b/board/toradex/common/tdx-common.c
@@ -20,8 +20,6 @@
 #include 
 #include "tdx-common.h"
 
-#define TORADEX_OUI 0x00142dUL
-
 #ifdef CONFIG_TDX_CFG_BLOCK
 static char tdx_serial_str[9];
 static char tdx_board_rev_str[6];
@@ -85,8 +83,7 @@ int show_board_info(void)
 
if (read_tdx_cfg_block()) {
printf("MISSING TORADEX CONFIG BLOCK\n");
-   tdx_eth_addr.oui = htonl(TORADEX_OUI << 8);
-   tdx_eth_addr.nic = htonl(tdx_serial << 8);
+   get_mac_from_serial(tdx_serial, _eth_addr);
checkboard();
} else {
sprintf(tdx_serial_str, "%08u", tdx_serial);
-- 
2.36.1