[PATCH v5 04/12] arm: mvebu: clearfog: initial ClearFog Base variant
Stefan Roese
sr at denx.de
Mon Mar 23 10:11:54 CET 2020
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
More information about the U-Boot
mailing list