[PATCH 5/5] spi: ti_qspi: Use device APIs

Peng Fan (OSS) peng.fan at oss.nxp.com
Wed May 27 04:35:28 CEST 2026


From: Peng Fan <peng.fan at nxp.com>

Convert the driver to use driver model APIs for phandle parsing and address
handling instead of legacy FDT interfaces.

Replace fdt_getprop() parsing of "syscon-chipselects" with
dev_read_phandle_with_args(), and switch address-related helpers
from devfdt_*() to dev_read_*() variants.

Also update "num-cs" handling to use dev_read_u32_default().

Remove direct dependencies on gd->fdt_blob and simplify the code while
keeping the existing behavior.

No functional changes.

Signed-off-by: Peng Fan <peng.fan at nxp.com>
---
 drivers/spi/ti_qspi.c | 21 +++++++++------------
 1 file changed, 9 insertions(+), 12 deletions(-)

diff --git a/drivers/spi/ti_qspi.c b/drivers/spi/ti_qspi.c
index 1f2494e592c..4768bc22990 100644
--- a/drivers/spi/ti_qspi.c
+++ b/drivers/spi/ti_qspi.c
@@ -417,10 +417,10 @@ static int ti_qspi_probe(struct udevice *bus)
 static void *map_syscon_chipselects(struct udevice *bus)
 {
 #if CONFIG_IS_ENABLED(SYSCON)
+	struct ofnode_phandle_args args;
 	struct udevice *syscon;
 	struct regmap *regmap;
-	const fdt32_t *cell;
-	int len, err;
+	int err;
 
 	err = uclass_get_device_by_phandle(UCLASS_SYSCON, bus,
 					   "syscon-chipselects", &syscon);
@@ -437,17 +437,16 @@ static void *map_syscon_chipselects(struct udevice *bus)
 		return NULL;
 	}
 
-	cell = fdt_getprop(gd->fdt_blob, dev_of_offset(bus),
-			   "syscon-chipselects", &len);
-	if (len < 2*sizeof(fdt32_t)) {
+	err = dev_read_phandle_with_args(bus, "syscon-chipselects", NULL, 0, 0, &args);
+	if (err || args.args_count < 1) {
 		debug("%s: offset not available\n", __func__);
 		return NULL;
 	}
 
-	return fdtdec_get_number(cell + 1, 1) + regmap_get_range(regmap, 0);
+	return args.args[0] + regmap_get_range(regmap, 0);
 #else
 	fdt_addr_t addr;
-	addr = devfdt_get_addr_index(bus, 2);
+	addr = dev_read_addr_index(bus, 2);
 	return (addr == FDT_ADDR_T_NONE) ? NULL :
 		map_physmem(addr, 0, MAP_NOCACHE);
 #endif
@@ -456,15 +455,13 @@ static void *map_syscon_chipselects(struct udevice *bus)
 static int ti_qspi_of_to_plat(struct udevice *bus)
 {
 	struct ti_qspi_priv *priv = dev_get_priv(bus);
-	const void *blob = gd->fdt_blob;
-	int node = dev_of_offset(bus);
 	fdt_addr_t mmap_addr;
-	fdt_addr_t mmap_size;
+	fdt_size_t mmap_size;
 
 	priv->ctrl_mod_mmap = map_syscon_chipselects(bus);
 	priv->base = map_physmem(dev_read_addr(bus),
 				 sizeof(struct ti_qspi_regs), MAP_NOCACHE);
-	mmap_addr = devfdt_get_addr_size_index(bus, 1, &mmap_size);
+	mmap_addr = dev_read_addr_size_index(bus, 1, &mmap_size);
 	priv->memory_map = map_physmem(mmap_addr, mmap_size, MAP_NOCACHE);
 	priv->mmap_size = mmap_size;
 
@@ -473,7 +470,7 @@ static int ti_qspi_of_to_plat(struct udevice *bus)
 		debug("Error: Max frequency missing\n");
 		return -ENODEV;
 	}
-	priv->num_cs = fdtdec_get_int(blob, node, "num-cs", 4);
+	priv->num_cs = dev_read_u32_default(bus, "num-cs", 4);
 
 	debug("%s: regs=<0x%x>, max-frequency=%d\n", __func__,
 	      (int)priv->base, priv->max_hz);

-- 
2.51.0



More information about the U-Boot mailing list