Hi Daniel, the phyFLEX-AM62Lx is not upstream yet but since our som detection is in sync with upstream:
Tested-by: Dominik Haller <[email protected]> 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 <[email protected]> > --- > 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 {

