[PATCH 1/2] arm64: zynqmp: Add 'SPL_ZYNQMP_FIRMWARE' to Kconfig
Michal Simek
michal.simek at amd.com
Mon Jun 3 16:30:27 CEST 2024
On 6/3/24 15:34, lukas.funke-oss at weidmueller.com wrote:
> From: Lukas Funke <lukas.funke at weidmueller.com>
>
> In order to make CONFIG_IS_ENABLED() work with 'ZYNQMP_FIRMWARE'
> introduce an additional Kconfig 'SPL_ZYNQMP_FIRMWARE' which is selected
> if and only if ZYNQMP_FIRMWARE is enabled. Driver are adapted such
> that they build with and without the config being set.
>
> Signed-off-by: Lukas Funke <lukas.funke at weidmueller.com>
> ---
>
> arch/arm/mach-zynqmp/Kconfig | 2 +-
> arch/arm/mach-zynqmp/aes.c | 2 ++
> arch/arm/mach-zynqmp/cpu.c | 4 ++--
> board/xilinx/zynqmp/zynqmp.c | 4 ++--
> drivers/firmware/Kconfig | 5 +++++
> drivers/mmc/zynq_sdhci.c | 4 ++--
> drivers/pinctrl/Kconfig | 2 +-
> 7 files changed, 15 insertions(+), 8 deletions(-)
>
> diff --git a/arch/arm/mach-zynqmp/Kconfig b/arch/arm/mach-zynqmp/Kconfig
> index 0d2238ace1e..304dce45439 100644
> --- a/arch/arm/mach-zynqmp/Kconfig
> +++ b/arch/arm/mach-zynqmp/Kconfig
> @@ -36,7 +36,7 @@ config PMUFW_INIT_FILE
>
> config ZYNQMP_SPL_PM_CFG_OBJ_FILE
> string "PMU firmware configuration object to load at runtime by SPL"
> - depends on SPL
> + depends on SPL && ZYNQMP_FIRMWARE
Isn't this SPL_ZYNQMP_FIRMWARE?
> help
> Path to a binary PMU firmware configuration object to be linked
> into U-Boot SPL and loaded at runtime into the PMU firmware.
> diff --git a/arch/arm/mach-zynqmp/aes.c b/arch/arm/mach-zynqmp/aes.c
> index 8a2b7fdcbe9..100dde2f372 100644
> --- a/arch/arm/mach-zynqmp/aes.c
> +++ b/arch/arm/mach-zynqmp/aes.c
> @@ -17,6 +17,7 @@
>
> int zynqmp_aes_operation(struct zynqmp_aes *aes)
> {
> +#if CONFIG_IS_ENABLED(ZYNQMP_FIRMWARE)
> u32 ret_payload[PAYLOAD_ARG_CNT];
> int ret;
>
> @@ -54,6 +55,7 @@ int zynqmp_aes_operation(struct zynqmp_aes *aes)
> ret, ret_payload[1]);
> return -EIO;
> }
> +#endif
>
> return 0;
Very likely you want to return error if functionality is not present.
> }
> diff --git a/arch/arm/mach-zynqmp/cpu.c b/arch/arm/mach-zynqmp/cpu.c
> index 6ae27894ecd..3515be257a5 100644
> --- a/arch/arm/mach-zynqmp/cpu.c
> +++ b/arch/arm/mach-zynqmp/cpu.c
> @@ -188,7 +188,7 @@ int zynqmp_mmio_write(const u32 address,
> {
> if (IS_ENABLED(CONFIG_SPL_BUILD) || current_el() == 3)
> return zynqmp_mmio_rawwrite(address, mask, value);
> -#if defined(CONFIG_ZYNQMP_FIRMWARE)
> +#if CONFIG_IS_ENABLED(ZYNQMP_FIRMWARE)
> else
> return xilinx_pm_request(PM_MMIO_WRITE, address, mask,
> value, 0, NULL);
> @@ -207,7 +207,7 @@ int zynqmp_mmio_read(const u32 address, u32 *value)
> if (IS_ENABLED(CONFIG_SPL_BUILD) || current_el() == 3) {
> ret = zynqmp_mmio_rawread(address, value);
> }
> -#if defined(CONFIG_ZYNQMP_FIRMWARE)
> +#if CONFIG_IS_ENABLED(ZYNQMP_FIRMWARE)
> else {
> u32 ret_payload[PAYLOAD_ARG_CNT];
>
> diff --git a/board/xilinx/zynqmp/zynqmp.c b/board/xilinx/zynqmp/zynqmp.c
> index f370fb7347a..95a134b972d 100644
> --- a/board/xilinx/zynqmp/zynqmp.c
> +++ b/board/xilinx/zynqmp/zynqmp.c
> @@ -147,14 +147,14 @@ int board_init(void)
> int ret;
> #endif
>
> -#if defined(CONFIG_SPL_BUILD)
> +#if defined(CONFIG_SPL_BUILD) && CONFIG_IS_ENABLED(ZYNQMP_FIRMWARE)
> /* Check *at build time* if the filename is an non-empty string */
> if (sizeof(CONFIG_ZYNQMP_SPL_PM_CFG_OBJ_FILE) > 1)
> zynqmp_pmufw_load_config_object(zynqmp_pm_cfg_obj,
> zynqmp_pm_cfg_obj_size);
> #endif
>
> -#if defined(CONFIG_ZYNQMP_FIRMWARE)
> +#if CONFIG_IS_ENABLED(ZYNQMP_FIRMWARE)
> struct udevice *dev;
>
> uclass_get_device_by_name(UCLASS_FIRMWARE, "power-management", &dev);
> diff --git a/drivers/firmware/Kconfig b/drivers/firmware/Kconfig
> index 8789b1ea141..ae785d55d54 100644
> --- a/drivers/firmware/Kconfig
> +++ b/drivers/firmware/Kconfig
> @@ -30,6 +30,7 @@ config TI_SCI_PROTOCOL
> config ZYNQMP_FIRMWARE
> bool "ZynqMP Firmware interface"
> select FIRMWARE
> + select SPL_ZYNQMP_FIRMWARE if SPL
I don't think this is correct. Why you should connect SPL symbol with non SPL one?
I would just remove line above that I can enable/disable firmware in SPL or
U-Boot separately.
> help
> Firmware interface driver is used by different
> drivers to communicate with the firmware for
> @@ -37,6 +38,10 @@ config ZYNQMP_FIRMWARE
> Say yes to enable ZynqMP firmware interface driver.
> If in doubt, say N.
>
> +config SPL_ZYNQMP_FIRMWARE
> + bool "Enable ZynqMP Firmware interface in SPL"
Can we remove "Enable" at the beginning? Or add Enable it to ZYNQMP_FIRMWARE.
> + depends on FIRMWARE && SPL
> +
> config ARM_SMCCC_FEATURES
> bool "Arm SMCCC features discovery"
> depends on ARM_PSCI_FW
> diff --git a/drivers/mmc/zynq_sdhci.c b/drivers/mmc/zynq_sdhci.c
> index 935540d1719..3e4cae60c17 100644
> --- a/drivers/mmc/zynq_sdhci.c
> +++ b/drivers/mmc/zynq_sdhci.c
> @@ -992,7 +992,7 @@ static const struct sdhci_ops arasan_ops = {
> };
> #endif
>
> -#if defined(CONFIG_ARCH_ZYNQMP) && defined(CONFIG_ZYNQMP_FIRMWARE)
> +#if defined(CONFIG_ARCH_ZYNQMP) && CONFIG_IS_ENABLED(ZYNQMP_FIRMWARE)
> static int sdhci_zynqmp_set_dynamic_config(struct arasan_sdhci_priv *priv,
> struct udevice *dev)
> {
> @@ -1094,7 +1094,7 @@ static int arasan_sdhci_probe(struct udevice *dev)
>
> host = priv->host;
>
> -#if defined(CONFIG_ARCH_ZYNQMP) && defined(CONFIG_ZYNQMP_FIRMWARE)
> +#if defined(CONFIG_ARCH_ZYNQMP) && CONFIG_IS_ENABLED(ZYNQMP_FIRMWARE)
> if (device_is_compatible(dev, "xlnx,zynqmp-8.9a")) {
> ret = zynqmp_pm_is_function_supported(PM_IOCTL,
> IOCTL_SET_SD_CONFIG);
> diff --git a/drivers/pinctrl/Kconfig b/drivers/pinctrl/Kconfig
> index a1d53cfbdbe..d2ccfb724af 100644
> --- a/drivers/pinctrl/Kconfig
> +++ b/drivers/pinctrl/Kconfig
> @@ -335,7 +335,7 @@ config PINCTRL_K210
>
> config PINCTRL_ZYNQMP
> bool "Xilinx ZynqMP pin control driver"
> - depends on DM && PINCTRL_GENERIC && ARCH_ZYNQMP
> + depends on DM && PINCTRL_GENERIC && ARCH_ZYNQMP && ZYNQMP_FIRMWARE
> default y
> help
> Support pin multiplexing control on Xilinx ZynqMP. The driver uses
M
More information about the U-Boot
mailing list