diff options
| author | Tom Rini <[email protected]> | 2025-12-07 08:07:36 -0600 |
|---|---|---|
| committer | Tom Rini <[email protected]> | 2025-12-07 08:07:36 -0600 |
| commit | 9ecb7dc4b1b69f81d2f22ce80589abe21a56e731 (patch) | |
| tree | 97cdf59d11e29477a8b60df0616c430e7a67bf6d /board/phytec | |
| parent | 06e1e2e271a27a3184b05954d313c751014a6c1b (diff) | |
| parent | 7bcf0160901970f4417488982199fece129567b4 (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.c | 42 | ||||
| -rw-r--r-- | board/phytec/common/phytec_som_detection.h | 8 |
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 { |
