[PATCH 5/5] spi: cadence-xspi: Add workaround for old Marvell firmwares
From: Paul Cercueil
Date: Wed Nov 04 2026 - 05:12:34 EST
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.
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);
+
+ 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