* [PATCH] toradex: tdx-cfg-block: add new toradex oui range
@ 2022-06-20 14:57 Philippe Schenker
2022-06-20 19:11 ` Fabio Estevam
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Philippe Schenker @ 2022-06-20 14:57 UTC (permalink / raw)
To: u-boot
Cc: Philippe Schenker, Francesco Dolcini, Denys Drozdov,
Marcel Ziswiler, Oleksandr Suvorov, Simon Glass, Stefan Agner
From: Philippe Schenker <philippe.schenker@toradex.com>
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 00000000-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 <philippe.schenker@toradex.com>
Reviewed-by: Francesco Dolcini <francesco.dolcini@toradex.com>
---
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(&tdx_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(&tdx_eth_addr);
break;
case TAG_HW:
memcpy(&tdx_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, &tdx_eth_addr);
/* Valid Tag */
write_tag(config_block, &offset, 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 <asm/setup.h>
#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, &tdx_eth_addr);
checkboard();
} else {
sprintf(tdx_serial_str, "%08u", tdx_serial);
--
2.36.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] toradex: tdx-cfg-block: add new toradex oui range
2022-06-20 14:57 [PATCH] toradex: tdx-cfg-block: add new toradex oui range Philippe Schenker
@ 2022-06-20 19:11 ` Fabio Estevam
2022-07-01 5:19 ` Marcel Ziswiler
2022-07-07 1:56 ` Tom Rini
2 siblings, 0 replies; 4+ messages in thread
From: Fabio Estevam @ 2022-06-20 19:11 UTC (permalink / raw)
To: Philippe Schenker
Cc: U-Boot-Denx, Philippe Schenker, Francesco Dolcini, Denys Drozdov,
Marcel Ziswiler, Simon Glass
On Mon, Jun 20, 2022 at 11:59 AM Philippe Schenker <dev@pschenker.ch> wrote:
>
> From: Philippe Schenker <philippe.schenker@toradex.com>
>
> 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 00000000-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 <philippe.schenker@toradex.com>
> Reviewed-by: Francesco Dolcini <francesco.dolcini@toradex.com>
Reviewed-by: Fabio Estevam <festevam@denx.de>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] toradex: tdx-cfg-block: add new toradex oui range
2022-06-20 14:57 [PATCH] toradex: tdx-cfg-block: add new toradex oui range Philippe Schenker
2022-06-20 19:11 ` Fabio Estevam
@ 2022-07-01 5:19 ` Marcel Ziswiler
2022-07-07 1:56 ` Tom Rini
2 siblings, 0 replies; 4+ messages in thread
From: Marcel Ziswiler @ 2022-07-01 5:19 UTC (permalink / raw)
To: dev, u-boot
Cc: Philippe Schenker, sjg, stefan.agner, Francesco Dolcini,
oleksandr.suvorov, Denys Drozdov
On Mon, 2022-06-20 at 16:57 +0200, Philippe Schenker wrote:
> From: Philippe Schenker <philippe.schenker@toradex.com>
>
> 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 00000000-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 <philippe.schenker@toradex.com>
> Reviewed-by: Francesco Dolcini <francesco.dolcini@toradex.com>
Acked-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
> ---
>
> 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(&tdx_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(&tdx_eth_addr);
> break;
> case TAG_HW:
> memcpy(&tdx_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, &tdx_eth_addr);
>
> /* Valid Tag */
> write_tag(config_block, &offset, 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 <asm/setup.h>
> #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, &tdx_eth_addr);
> checkboard();
> } else {
> sprintf(tdx_serial_str, "%08u", tdx_serial);
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] toradex: tdx-cfg-block: add new toradex oui range
2022-06-20 14:57 [PATCH] toradex: tdx-cfg-block: add new toradex oui range Philippe Schenker
2022-06-20 19:11 ` Fabio Estevam
2022-07-01 5:19 ` Marcel Ziswiler
@ 2022-07-07 1:56 ` Tom Rini
2 siblings, 0 replies; 4+ messages in thread
From: Tom Rini @ 2022-07-07 1:56 UTC (permalink / raw)
To: Philippe Schenker
Cc: u-boot, Philippe Schenker, Francesco Dolcini, Denys Drozdov,
Marcel Ziswiler, Oleksandr Suvorov, Simon Glass, Stefan Agner
[-- Attachment #1: Type: text/plain, Size: 833 bytes --]
On Mon, Jun 20, 2022 at 04:57:45PM +0200, Philippe Schenker wrote:
> From: Philippe Schenker <philippe.schenker@toradex.com>
>
> 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 00000000-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 <philippe.schenker@toradex.com>
> Reviewed-by: Francesco Dolcini <francesco.dolcini@toradex.com>
> Reviewed-by: Fabio Estevam <festevam@denx.de>
> Acked-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Applied to u-boot/next, thanks!
--
Tom
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2022-07-07 1:58 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-20 14:57 [PATCH] toradex: tdx-cfg-block: add new toradex oui range Philippe Schenker
2022-06-20 19:11 ` Fabio Estevam
2022-07-01 5:19 ` Marcel Ziswiler
2022-07-07 1:56 ` Tom Rini
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.