summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorPeng Fan <[email protected]>2026-05-25 11:09:39 +0800
committerTom Rini <[email protected]>2026-06-11 10:02:32 -0600
commit53e9c41847c24b422ecd21421204d4e6a0c07d76 (patch)
treeb5309a48d592a63611c1d0b018fb61361f172176 /drivers
parenta566d32693600bbbe405ca5a7f4ab07f71f45e86 (diff)
dm: core: use DT region size when mapping device addresses
Update dev_read_addr_*_ptr() and dev_remap_addr_*() helpers to use dev_read_addr_size_*() and pass the DT-provided region size to map_sysmem() / map_physmem() instead of 0. Ensure mappings are consistent with the size defined in the device tree and avoids implicit or unbounded mappings. When the DT does not provide a size, the behavior remains unchanged since size is initialized to 0. Signed-off-by: Peng Fan <[email protected]>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/core/read.c34
1 files changed, 22 insertions, 12 deletions
diff --git a/drivers/core/read.c b/drivers/core/read.c
index c0d7a969db2..ba48862f44b 100644
--- a/drivers/core/read.c
+++ b/drivers/core/read.c
@@ -132,12 +132,14 @@ fdt_addr_t dev_read_addr_index(const struct udevice *dev, int index)
void *dev_read_addr_index_ptr(const struct udevice *dev, int index)
{
- fdt_addr_t addr = dev_read_addr_index(dev, index);
+ fdt_addr_t addr;
+ fdt_size_t size = 0;
+ addr = dev_read_addr_size_index(dev, index, &size);
if (addr == FDT_ADDR_T_NONE)
return NULL;
- return map_sysmem(addr, 0);
+ return map_sysmem(addr, size);
}
fdt_addr_t dev_read_addr_size_index(const struct udevice *dev, int index,
@@ -157,17 +159,19 @@ void *dev_read_addr_size_index_ptr(const struct udevice *dev, int index,
if (addr == FDT_ADDR_T_NONE)
return NULL;
- return map_sysmem(addr, 0);
+ return map_sysmem(addr, *size);
}
void *dev_remap_addr_index(const struct udevice *dev, int index)
{
- fdt_addr_t addr = dev_read_addr_index(dev, index);
+ fdt_addr_t addr;
+ fdt_size_t size = 0;
+ addr = dev_read_addr_size_index(dev, index, &size);
if (addr == FDT_ADDR_T_NONE)
return NULL;
- return map_physmem(addr, 0, MAP_NOCACHE);
+ return map_physmem(addr, size, MAP_NOCACHE);
}
fdt_addr_t dev_read_addr_name(const struct udevice *dev, const char *name)
@@ -182,12 +186,14 @@ fdt_addr_t dev_read_addr_name(const struct udevice *dev, const char *name)
void *dev_read_addr_name_ptr(const struct udevice *dev, const char *name)
{
- fdt_addr_t addr = dev_read_addr_name(dev, name);
+ fdt_addr_t addr;
+ fdt_size_t size = 0;
+ addr = dev_read_addr_size_name(dev, name, &size);
if (addr == FDT_ADDR_T_NONE)
return NULL;
- return map_sysmem(addr, 0);
+ return map_sysmem(addr, size);
}
fdt_addr_t dev_read_addr_size_name(const struct udevice *dev, const char *name,
@@ -209,17 +215,19 @@ void *dev_read_addr_size_name_ptr(const struct udevice *dev, const char *name,
if (addr == FDT_ADDR_T_NONE)
return NULL;
- return map_sysmem(addr, 0);
+ return map_sysmem(addr, *size);
}
void *dev_remap_addr_name(const struct udevice *dev, const char *name)
{
- fdt_addr_t addr = dev_read_addr_name(dev, name);
+ fdt_addr_t addr;
+ fdt_size_t size = 0;
+ addr = dev_read_addr_size_name(dev, name, &size);
if (addr == FDT_ADDR_T_NONE)
return NULL;
- return map_physmem(addr, 0, MAP_NOCACHE);
+ return map_physmem(addr, size, MAP_NOCACHE);
}
fdt_addr_t dev_read_addr(const struct udevice *dev)
@@ -229,12 +237,14 @@ fdt_addr_t dev_read_addr(const struct udevice *dev)
void *dev_read_addr_ptr(const struct udevice *dev)
{
- fdt_addr_t addr = dev_read_addr(dev);
+ fdt_addr_t addr;
+ fdt_size_t size = 0;
+ addr = dev_read_addr_size(dev, &size);
if (addr == FDT_ADDR_T_NONE)
return NULL;
- return map_sysmem(addr, 0);
+ return map_sysmem(addr, size);
}
void *dev_remap_addr(const struct udevice *dev)