summaryrefslogtreecommitdiff
path: root/board/phytec
diff options
context:
space:
mode:
authorTom Rini <[email protected]>2025-12-07 08:07:36 -0600
committerTom Rini <[email protected]>2025-12-07 08:07:36 -0600
commit9ecb7dc4b1b69f81d2f22ce80589abe21a56e731 (patch)
tree97cdf59d11e29477a8b60df0616c430e7a67bf6d /board/phytec
parent06e1e2e271a27a3184b05954d313c751014a6c1b (diff)
parent7bcf0160901970f4417488982199fece129567b4 (diff)
Merge patch series "board: phytec: phytec_som_detection: Add missing assignment"
This series from Daniel Schultz <[email protected]> lays the groundwork for the phyFLEX SOMs from phytec. Link: https://lore.kernel.org/r/[email protected]
Diffstat (limited to 'board/phytec')
-rw-r--r--board/phytec/common/phytec_som_detection.c42
-rw-r--r--board/phytec/common/phytec_som_detection.h8
2 files changed, 43 insertions, 7 deletions
diff --git a/board/phytec/common/phytec_som_detection.c b/board/phytec/common/phytec_som_detection.c
index 136f4486eb0..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,18 +352,39 @@ 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;
}
if (api2->som_type <= 3) {
- snprintf(part, PHYTEC_PART_NUMBER_MAX_LEN + 1, "%s.%s",
- product_name, api2->bom_rev);
+ len = snprintf(part, PHYTEC_PART_NUMBER_MAX_LEN + 1, "%s.%s",
+ product_name, api2->bom_rev);
if (len != PHYTEC_PART_NUMBER_KSP_LEN)
return -EINVAL;
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 {