[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