[PATCH v5 04/12] arm: mvebu: clearfog: initial ClearFog Base variant
Joel Johnson
mrjoel at lixil.net
Mon Mar 23 16:27:54 CET 2020
On 2020-03-23 03:11, Stefan Roese wrote:
> On 27.01.20 21:01, Joel Johnson wrote:
>> Add a unique entry for ClearFog Base variant, reflected in the board
>> name and adjusted SerDes topology.
>>
>> Signed-off-by: Joel Johnson <mrjoel at lixil.net>
>>
>> ---
>>
>> v2 changes:
>> - reworked based on Baruch's run-time TLV EEPROM detection series
>> v3 changes:
>> - rebased on mvebu merged run-time TLV EEPROM detection series
>> - minor update to help test regarding runtime detection failures
>> v4 changes:
>> - use runtime static config adjust instead of #ifdef in cases where
>> hardware EEPROM detection fails or is disabled in build
>> SPL size change for defconfig increases 36 bytes (122893 to
>> 122929)
>> SPL size change for defconfig+Base increases 60 bytes (122893 to
>> 122953)
>> - add placeholder support for EEPROM based Clearfog Pro, based on
>> initial name confirmation from Baruch. I wanted to include the
>> check
>> at least in the patch for review to indicate expected usage to
>> ensure that a Clearfog Pro EEPROM device boots correctly even if
>> the
>> image is built with Base static configuration. If there are other
>> prerelease concerns and this should be added separately later,
>> I'd
>> be fine with that too.
>> - Note that this approach *does not* currently provide any
>> mechanism
>> for EEPROM detected boards to have their SFP speed changed or
>> switch
>> between PCIE/SATA signalling. I'm assuming that will be done
>> based on
>> hardware detection, but confirmation/acceptance in review would
>> be
>> appreciated so it can be revisited if needed.
>> v5 changes:
>> - only make Base variant adjustment based on runtime configuration
>>
>> ---
>> arch/arm/mach-mvebu/Kconfig | 2 ++
>> board/solidrun/clearfog/Kconfig | 18 ++++++++++++++++++
>> board/solidrun/clearfog/clearfog.c | 29
>> +++++++++++++++++++++++------
>> 3 files changed, 43 insertions(+), 6 deletions(-)
>> create mode 100644 board/solidrun/clearfog/Kconfig
>>
>> diff --git a/arch/arm/mach-mvebu/Kconfig b/arch/arm/mach-mvebu/Kconfig
>> index bc5eaa5a76..161dee937f 100644
>> --- a/arch/arm/mach-mvebu/Kconfig
>> +++ b/arch/arm/mach-mvebu/Kconfig
>> @@ -280,4 +280,6 @@ config SECURED_MODE_CSK_INDEX
>> default 0
>> depends on SECURED_MODE_IMAGE
>> +source "board/solidrun/clearfog/Kconfig"
>> +
>> endif
>> diff --git a/board/solidrun/clearfog/Kconfig
>> b/board/solidrun/clearfog/Kconfig
>> new file mode 100644
>> index 0000000000..936d5918f8
>> --- /dev/null
>> +++ b/board/solidrun/clearfog/Kconfig
>> @@ -0,0 +1,18 @@
>> +menu "ClearFog configuration"
>> + depends on TARGET_CLEARFOG
>> +
>> +config TARGET_CLEARFOG_BASE
>> + bool "Use ClearFog Base static configuration"
>> + help
>> + Use the ClearFog Base as the static configuration instead of the
>> + default which uses the ClearFog Pro.
>> +
>> + Runtime board detection is always attempted and used if available.
>> The
>> + static configuration is used as a fallback in cases where runtime
>> + detection is disabled, is not available in hardware, or otherwise
>> fails.
>> +
>> + Only newer revisions of the ClearFog product line support runtime
>> + detection via additional EEPROM hardware. This option enables
>> selecting
>> + the Base variant for older hardware revisions.
>> +
>> +endmenu
>> diff --git a/board/solidrun/clearfog/clearfog.c
>> b/board/solidrun/clearfog/clearfog.c
>> index 9b31902c70..c873d00905 100644
>> --- a/board/solidrun/clearfog/clearfog.c
>> +++ b/board/solidrun/clearfog/clearfog.c
>> @@ -42,6 +42,7 @@ static void cf_read_tlv_data(void)
>> read_tlv_data(&cf_tlv_data);
>> }
>> +/* The starting board_serdes_map reflects original Clearfog Pro
>> usage */
>> static struct serdes_map board_serdes_map[] = {
>> {SATA0, SERDES_SPEED_3_GBPS, SERDES_DEFAULT_MODE, 0, 0},
>> {SGMII1, SERDES_SPEED_1_25_GBPS, SERDES_DEFAULT_MODE, 0, 0},
>> @@ -51,6 +52,13 @@ static struct serdes_map board_serdes_map[] = {
>> {SGMII2, SERDES_SPEED_1_25_GBPS, SERDES_DEFAULT_MODE, 0, 0},
>> };
>> +void config_cfbase_serdes_map(void)
>> +{
>> + board_serdes_map[4].serdes_type = USB3_HOST0;
>> + board_serdes_map[4].serdes_speed = SERDES_SPEED_5_GBPS;
>> + board_serdes_map[4].serdes_mode = SERDES_DEFAULT_MODE;
>> +}
>> +
>> int hws_board_topology_load(struct serdes_map **serdes_map_array, u8
>> *count)
>> {
>> cf_read_tlv_data();
>> @@ -59,12 +67,17 @@ int hws_board_topology_load(struct serdes_map
>> **serdes_map_array, u8 *count)
>> board_serdes_map[0].serdes_type = PEX0;
>> board_serdes_map[0].serdes_speed = SERDES_SPEED_5_GBPS;
>> board_serdes_map[0].serdes_mode = PEX_ROOT_COMPLEX_X1;
>> - }
>> -
>> - if (sr_product_is(&cf_tlv_data, "Clearfog Base")) {
>> - board_serdes_map[4].serdes_type = USB3_HOST0;
>> - board_serdes_map[4].serdes_speed = SERDES_SPEED_5_GBPS;
>> - board_serdes_map[4].serdes_mode = SERDES_DEFAULT_MODE;
>> + } else if (sr_product_is(&cf_tlv_data, "Clearfog Pro")) {
>> + /* handle recognized product as noop, no adjustment required */
>> + } else if (sr_product_is(&cf_tlv_data, "Clearfog Base")) {
>> + config_cfbase_serdes_map();
>> + } else if (IS_ENABLED(CONFIG_TARGET_CLEARFOG_BASE)) {
>> + /*
>> + * Fallback to static default. Runtime detection failed,
>> + * hardware support is not present, EEPROM is corrupt,
>> + * or an unrecognized product name is present.
>> + */
>> + config_cfbase_serdes_map();
>> }
>
> Would it make sense to add a message, if no board type has been
> "detected" here at all (else case)?
>
> Thanks,
> Stefan
I suppose it could, I was using the printed board model but that itself
isn't enough to distinguish between an EEPROM detected unit and a static
fallback.
Joel
More information about the U-Boot
mailing list