summaryrefslogtreecommitdiff
path: root/board/phytec
diff options
context:
space:
mode:
authorDaniel Schultz <[email protected]>2025-11-24 00:25:06 -0800
committerTom Rini <[email protected]>2025-12-07 08:07:07 -0600
commit7bcf0160901970f4417488982199fece129567b4 (patch)
treef399ea0162e3983fdc8138521b42a5b1f0d62e28 /board/phytec
parent9ce3d264e3b79b91d997eaa89dcd51488259c2b9 (diff)
board: phytec: phytec_som_detection: Add support for phyFLEX
phyFLEX are SoMs based on the FPSC standard. Add additional "SOM types" for the phyFLEX modules base on the FPSC Gamma specification. These modules come in four different variants; prototypes (PT), standard product (SP), KSP (KP) and KSM (KM). Signed-off-by: Daniel Schultz <[email protected]> Reviewed-by: Teresa Remmet <[email protected]> Tested-by: Dominik Haller <[email protected]>
Diffstat (limited to 'board/phytec')
-rw-r--r--board/phytec/common/phytec_som_detection.c38
-rw-r--r--board/phytec/common/phytec_som_detection.h8
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 {