[Upstream] [PATCH 2/2] board: phytec: phytec_som_detection: Add support for phyFLEX

Dominik Haller d.haller at phytec.de
Thu Nov 20 03:06:05 CET 2025


Hi Daniel,

the phyFLEX-AM62Lx is not upstream yet but since our som detection is
in sync with upstream:


Tested-by: Dominik Haller <d.haller at phytec.de>


On Mo, 2025-11-10 at 05:52 -0800, Daniel Schultz wrote:
> phyFLEX are SoMs based on the FPSC standard.
> 
> Add addition "SOM types" for the phyFLEX modules base on the
> FPSC Gamma specifiction. These modules come in four differnt
> variants; prototypes (PT), standard product (SP), KSP (KP) and
> KSM (KM).
> 
> Signed-off-by: Daniel Schultz <d.schultz at phytec.de>
> ---
>  board/phytec/common/phytec_som_detection.c | 38
> ++++++++++++++++++++--
>  board/phytec/common/phytec_som_detection.h |  8 +++--
>  2 files changed, 41 insertions(+), 5 deletions(-)
> 
> diff --git a/board/phytec/common/phytec_som_detection.c
> b/board/phytec/common/phytec_som_detection.c
> index ff1711c24b4..0e30ed9b1bb 100644
> --- a/board/phytec/common/phytec_som_detection.c
> +++ b/board/phytec/common/phytec_som_detection.c
> @@ -308,14 +308,24 @@ static int phytec_get_product_name(struct
> phytec_eeprom_data *data,
>  	case 7:
>  		som_type = 1;
>  		break;
> +	case 8:
> +	case 9:
> +	case 10:
> +	case 11:
> +		som_type = SOM_TYPE_PFL_G;
> +		break;
>  	default:
>  		pr_err("%s: Invalid SOM type: %i\n", __func__, api2-
> >som_type);
>  		return -EINVAL;
>  	};
>  
> -	len = snprintf(product, PHYTEC_PRODUCT_NAME_MAX_LEN + 1,
> "%s-%03u",
> +	const char *fmt = (som_type == SOM_TYPE_PFL_G) ? "%s-%02u" :
> "%s-%03u";
> +
> +	len = snprintf(product, PHYTEC_PRODUCT_NAME_MAX_LEN + 1,
> fmt,
>  		       phytec_som_type_str[som_type], api2->som_no);
> -	if (len != PHYTEC_PRODUCT_NAME_STD_LEN)
> +	if (som_type != SOM_TYPE_PFL_G && len !=
> PHYTEC_PRODUCT_NAME_PCX_LEN)
> +		return -EINVAL;
> +	if (som_type == SOM_TYPE_PFL_G && len !=
> PHYTEC_PRODUCT_NAME_PFL_LEN)
>  		return -EINVAL;
>  	return 0;
>  }
> @@ -327,6 +337,7 @@ static int phytec_get_part_number(struct
> phytec_eeprom_data *data,
>  	struct phytec_api2_data *api2;
>  	unsigned int ksp_type;
>  	int res, len;
> +	char *variant = "SP";
>  
>  	if (!data->valid || data->payload.api_rev < PHYTEC_API_REV2)
>  		return -EINVAL;
> @@ -341,7 +352,7 @@ static int phytec_get_part_number(struct
> phytec_eeprom_data *data,
>  		len = snprintf(part, PHYTEC_PART_NUMBER_MAX_LEN + 1,
>  			       "%s-%s.%s", product_name, api2->opt,
>  			       api2->bom_rev);
> -		if (len < PHYTEC_PART_NUMBER_STD_LEN)
> +		if (len < PHYTEC_PART_NUMBER_PCX_LEN)
>  			return -EINVAL;
>  		return 0;
>  	}
> @@ -353,6 +364,27 @@ static int phytec_get_part_number(struct
> phytec_eeprom_data *data,
>  		return 0;
>  	}
>  
> +	if (api2->som_type >= 8 && api2->som_type <= 11) {
> +		switch (api2->som_type) {
> +		case 8:
> +			variant = "PT";
> +			break;
> +		case 10:
> +			variant = "KP";
> +			break;
> +		case 11:
> +			variant = "KM";
> +			break;
> +		}
> +
> +		len = snprintf(part, PHYTEC_PART_NUMBER_MAX_LEN + 1,
> +			       "%s-%s%03u.%s", product_name,
> variant,
> +			       api2->ksp_no, api2->bom_rev);
> +		if (len != PHYTEC_PART_NUMBER_PFL_LEN)
> +			return -EINVAL;
> +		return 0;
> +	}
> +
>  	switch (api2->som_type) {
>  	case 4:
>  		ksp_type = 3;
> diff --git a/board/phytec/common/phytec_som_detection.h
> b/board/phytec/common/phytec_som_detection.h
> index 187424a2b44..fdfd3c969ff 100644
> --- a/board/phytec/common/phytec_som_detection.h
> +++ b/board/phytec/common/phytec_som_detection.h
> @@ -18,10 +18,12 @@
>  #define PHYTEC_GET_OPTION(option) \
>  	(((option) > '9') ? (option) - 'A' + 10 : (option) - '0')
>  
> -#define PHYTEC_PRODUCT_NAME_STD_LEN	7	// PCx-000
> +#define PHYTEC_PRODUCT_NAME_PCX_LEN	7	// PCx-000
> +#define PHYTEC_PRODUCT_NAME_PFL_LEN	8	// PFL-x-00
>  #define PHYTEC_PRODUCT_NAME_KSP_LEN	8	// KSP-0000
>  #define PHYTEC_PRODUCT_NAME_MAX_LEN	PHYTEC_PRODUCT_NAME_KSP_LEN
> -#define PHYTEC_PART_NUMBER_STD_LEN	11	// PCx-000-
> \w{1,17}.Ax
> +#define PHYTEC_PART_NUMBER_PCX_LEN	11	// PCx-000-
> \w{1,17}.Ax
> +#define PHYTEC_PART_NUMBER_PFL_LEN	17	// PFL-x-00-xx000.Ax
>  #define PHYTEC_PART_NUMBER_KSP_LEN	11	// KSP-0000.Ax
>  #define PHYTEC_PART_NUMBER_STD_KSP_LEN	16	// PCx-000-KSx00.Ax
>  #define PHYTEC_PART_NUMBER_MAX_LEN	PHYTEC_PRODUCT_NAME_MAX_LEN
> + 21
> @@ -38,6 +40,7 @@ enum phytec_som_type_str {
>  	SOM_TYPE_PCL,
>  	SOM_TYPE_KSM,
>  	SOM_TYPE_KSP,
> +	SOM_TYPE_PFL_G,
>  };
>  
>  static const char * const phytec_som_type_str[] = {
> @@ -45,6 +48,7 @@ static const char * const phytec_som_type_str[] = {
>  	"PCL",
>  	"KSM",
>  	"KSP",
> +	"PFL-G",
>  };
>  
>  struct phytec_api0_data {



More information about the U-Boot mailing list