[PATCH] board: ti: cape_detect: Add overlay name lookup table for extension boards

Andrew Davis afd at ti.com
Tue Apr 14 14:25:34 CEST 2026


On 4/14/26 3:20 AM, Kory Maincent wrote:
> From: "Kory Maincent (TI)" <kory.maincent at bootlin.com>
> 
> Some extension boards have EEPROM part numbers that do not directly match
> their devicetree overlay filenames. Introduce a static name_mapping table
> and a set_cape_overlay() helper that translates the part number and version
> strings read from the EEPROM into the correct overlay filename.
> 
> When no entry matches, fall back to the existing behavior of constructing
> the overlay name as "<part_number>-<version>.dtbo" directly from the
> EEPROM content.
> 
> Add an initial entry mapping BB-GREEN-HDMI revision 00A0 to
> am335x-bone-hdmi-00a0.dtbo.
> 
> Signed-off-by: Kory Maincent (TI) <kory.maincent at bootlin.com>
> ---
>   board/ti/common/cape_detect.c | 42 +++++++++++++++++++++++++++++++++--
>   1 file changed, 40 insertions(+), 2 deletions(-)
> 
> diff --git a/board/ti/common/cape_detect.c b/board/ti/common/cape_detect.c
> index 88fa6ae81f0..c9555779c0c 100644
> --- a/board/ti/common/cape_detect.c
> +++ b/board/ti/common/cape_detect.c
> @@ -13,6 +13,44 @@
>   
>   #include "cape_detect.h"
>   
> +struct name_mapping {
> +	char part_number[17];
> +	char version[5];
> +	char overlay[64];
> +};
> +
> +static struct name_mapping extension_mapping[] = {
> +	{
> +		"BB-GREEN-HDMI",
> +		"00A0",
> +		"am335x-bone-hdmi-00a0.dtbo",
> +	},
> +	{ /* sentinel */ }
> +};
> +
> +void set_cape_overlay(char *overlay, char *part_number, char *version)
> +{
> +	struct name_mapping *mapping;
> +
> +	for (mapping = extension_mapping; mapping->part_number[0] != 0;
> +	     mapping++) {

Does ARRAY_SIZE() make this any cleaner than a null-terminated array? Or
do you plan to generalize this in some way more?

Either way, the concept looks good to me.

Andrew

> +		if (strncmp(mapping->part_number, part_number,
> +			    sizeof(mapping->part_number)))
> +			continue;
> +
> +		if (strncmp(mapping->version, version,
> +			    sizeof(mapping->version)))
> +			continue;
> +
> +		strlcpy(overlay, mapping->overlay, sizeof(mapping->overlay));
> +		return;
> +	}
> +
> +	/* Use default name extracted from the EEPROM */
> +	snprintf(overlay, sizeof(mapping->overlay), "%s-%s.dtbo",
> +		 part_number, version);
> +}
> +
>   static void sanitize_field(char *text, size_t size)
>   {
>   	char *c = NULL;
> @@ -82,8 +120,8 @@ static int ti_extension_board_scan(struct udevice *dev,
>   
>   		printf("BeagleBone Cape: %s (0x%x)\n", eeprom_header.board_name, addr);
>   
> -		snprintf(cape.overlay, sizeof(cape.overlay), "%s-%s.dtbo",
> -			 process_cape_part_number, process_cape_version);
> +		set_cape_overlay(cape.overlay, process_cape_part_number,
> +				 process_cape_version);
>   		strlcpy(cape.name, eeprom_header.board_name,
>   			sizeof(eeprom_header.board_name));
>   		strlcpy(cape.version, process_cape_version,



More information about the U-Boot mailing list