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 <peng.fan@nxp.com>
This commit is contained in:
+22
-12
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user