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

Daniel Schultz d.schultz at phytec.de
Mon Nov 24 09:25:06 CET 2025


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 <d.schultz at phytec.de>
Reviewed-by: Teresa Remmet <t.remmet at phytec.de>
Tested-by: Dominik Haller <d.haller at phytec.de>
---
Changes in v2:
  Fixed three spelling errors.

  "addition" -> "additional"
  "specifiction" -> "specification"
  "differnt" -> "different"

 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 {
-- 
2.25.1



More information about the U-Boot mailing list