[RESEND PATCH] spi: cadence_qspi: Select flash subnode at runtime

Neha Malcom Francis n-francis at ti.com
Tue Sep 12 11:37:16 CEST 2023


Hi Udit

On 07/09/23 14:51, Udit Kumar wrote:
> Currently spi driver gets flash parameter from first subnode.
> 
> Few boards have more than one flash with different parameters
> and selection of flash is done by on board switch settings.
> In such case, uboot needs to be recompiled with updated
> device tree to align with board switch settings.
> 
> This patch allows to select flash node at runtime.
> 
> Boards those are supporting multiple flashes
> needs to implement cadence_qspi_get_subnode function and return correct
> flash node.
> 
> Cc: Apurva Nandan <a-nandan at ti.com>
> Signed-off-by: Udit Kumar <u-kumar1 at ti.com>
> ---
> One of such platform is J721S2 EVM
> link https://www.ti.com/lit/pdf/spruj67

I think this link is wrong, may be you mean
https://www.ti.com/lit/pdf/spruj69

> Fig 3.1, Page 18 has details of two flashes connected with one controller.
> 
>   drivers/spi/cadence_qspi.c | 7 ++++++-
>   drivers/spi/cadence_qspi.h | 1 +
>   2 files changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/spi/cadence_qspi.c b/drivers/spi/cadence_qspi.c
> index cc3a54f295..7a02ceed10 100644
> --- a/drivers/spi/cadence_qspi.c
> +++ b/drivers/spi/cadence_qspi.c
> @@ -40,6 +40,11 @@ __weak int cadence_qspi_versal_flash_reset(struct udevice *dev)
>   	return 0;
>   }
>   
> +__weak ofnode  cadence_qspi_get_subnode(struct udevice *dev)

Extra space after ofnode.

> +{
> +	return dev_read_first_subnode(dev);
> +}
> +
>   static int cadence_spi_write_speed(struct udevice *bus, uint hz)
>   {
>   	struct cadence_spi_priv *priv = dev_get_priv(bus);
> @@ -401,7 +406,7 @@ static int cadence_spi_of_to_plat(struct udevice *bus)
>   	plat->is_dma = dev_read_bool(bus, "cdns,is-dma");
>   
>   	/* All other parameters are embedded in the child node */
> -	subnode = dev_read_first_subnode(bus);
> +	subnode = cadence_qspi_get_subnode(bus);
>   	if (!ofnode_valid(subnode)) {
>   		printf("Error: subnode with SPI flash config missing!\n");
>   		return -ENODEV;
> diff --git a/drivers/spi/cadence_qspi.h b/drivers/spi/cadence_qspi.h
> index 1c59d1a9d9..12825f8911 100644
> --- a/drivers/spi/cadence_qspi.h
> +++ b/drivers/spi/cadence_qspi.h
> @@ -304,6 +304,7 @@ int cadence_qspi_apb_dma_read(struct cadence_spi_priv *priv,
>   int cadence_qspi_apb_wait_for_dma_cmplt(struct cadence_spi_priv *priv);
>   int cadence_qspi_apb_exec_flash_cmd(void *reg_base, unsigned int reg);
>   int cadence_qspi_versal_flash_reset(struct udevice *dev);
> +ofnode cadence_qspi_get_subnode(struct udevice *dev);
>   void cadence_qspi_apb_enable_linear_mode(bool enable);
>   
>   #endif /* __CADENCE_QSPI_H__ */

But otherwise
Reviewed-by: Neha Malcom Francis <n-francis at ti.com>

-- 
Thanking You
Neha Malcom Francis


More information about the U-Boot mailing list