Re: [PATCH 5/5] spi: cadence-xspi: Add workaround for old Marvell firmwares
From: Jisheng Zhang
Date: Sat Nov 07 2026 - 08:42:04 EST
On Wed, Nov 04, 2026 at 11:06:43AM +0100, Paul Cercueil wrote:
> From: Tanmay Jagdale <tanmay@xxxxxxxxxxx>
>
> Older firmwares from Marvell used the cdns,xspi-nor compatible string
> for the Marvell-specific xSPI IP, which is incompatible.
>
> Add a workaround to support this by assuming that if the "xfer" resource
> is found, it means that a Marvell IP is used.
> S>
> Signed-off-by: Tanmay Jagdale <tanmay@xxxxxxxxxxx>
> Co-developed-by: Paul Cercueil <paul.cercueil@xxxxxxxxxxx>
> Signed-off-by: Paul Cercueil <paul.cercueil@xxxxxxxxxxx>
> ---
> drivers/spi/spi-cadence-xspi.c | 18 ++++++++++++++----
> 1 file changed, 14 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/spi/spi-cadence-xspi.c b/drivers/spi/spi-cadence-xspi.c
> index 48a109f3fcdb..d326589a6ca3 100644
> --- a/drivers/spi/spi-cadence-xspi.c
> +++ b/drivers/spi/spi-cadence-xspi.c
> @@ -1301,11 +1301,21 @@ static int cdns_xspi_probe(struct platform_device *pdev)
> }
>
> #ifdef CONFIG_64BIT
> - if (cdns_xspi->driver_data->mrvl_hw_overlay) {
> - res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "xfer");
> - if (!res)
> - res = platform_get_resource(pdev, IORESOURCE_MEM, 3);
> + res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "xfer");
> + if (!res)
> + res = platform_get_resource(pdev, IORESOURCE_MEM, 3);
This moves the mrvl specific code to all users, so I believe this
needs dt-binding update.
>From another side, this assumes other users doesn't have 4th resource
but what about if they have? they will get "Marvell-specific xfer
resource passed, but ..." warning below, this confuse the users.
I don't think this workaround can be added to all users.
Lastly, does the "firmware" mean dtb? But per my grep, I didn't
find any mrvl dts(i) uses "cdns,xspi-nor" compatible string, so
this means the dtb is outside upstream, then can the firmware
be fixed instead?
> +
> + if (res && !cdns_xspi->driver_data->mrvl_hw_overlay) {
> + /*
> + * Handle old Marvell firmwares using the cdns,xspi-nor string
> + * instead of the marvell,cn10-xspi-nor string.
> + */
> + dev_warn(dev, "Marvell-specific xfer resource passed, but using the cdns,xspi-nor compatible string. Please fix firmware!\n");
>
> + cdns_xspi->driver_data = &marvell_driver_data;
> + }
> +
> + if (cdns_xspi->driver_data->mrvl_hw_overlay) {
> cdns_xspi->xferbase = devm_ioremap_resource(dev, res);
> if (IS_ERR(cdns_xspi->xferbase)) {
> dev_info(dev, "XFER register base not found, set it\n");
> --
> 2.47.3
>