diff options
| author | Heinrich Schuchardt <xypron.glpk@gmx.de> | 2020-07-25 21:38:49 +0200 | 
|---|---|---|
| committer | Simon Glass <sjg@chromium.org> | 2020-08-22 07:58:39 -0600 | 
| commit | ae6b33dcc342e8539f4f69aba238748e9e89280a (patch) | |
| tree | ca97266266553e62a86e10c9c8a9ae1f15f3ae3f /include/dm/read.h | |
| parent | 2e6132d835631946b7a67dedd8f5bc902304b0f9 (diff) | |
dm: fix ofnode_read_addr/size_cells()
In the case of the live tree ofnode_read_addr_cells() and
ofnode_read_size_cells() return the #address-cells and #size-cells defined
in the parent node. With the patch the same is done for a non-live tree.
The only consumer of these functions is currently the CFI flash driver.
This patch fixes the incorrect parsing of the device tree leading to
'saveenv' failing on qemu_arm64_defconfig.
For testing qemu-system-aarch64 has to be called with
    -drive if=pflash,format=raw,index=1,file=envstore.img
to provide the flash memory. envstore.img must be 64 MiB large.
Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Stefan Roese <sr@denx.de>
Diffstat (limited to 'include/dm/read.h')
| -rw-r--r-- | include/dm/read.h | 10 | 
1 files changed, 6 insertions, 4 deletions
| diff --git a/include/dm/read.h b/include/dm/read.h index 487ec9e9c93..cac7dd5f187 100644 --- a/include/dm/read.h +++ b/include/dm/read.h @@ -878,14 +878,16 @@ static inline int dev_count_phandle_with_args(const struct udevice *dev,  static inline int dev_read_addr_cells(const struct udevice *dev)  { -	/* NOTE: this call should walk up the parent stack */ -	return fdt_address_cells(gd->fdt_blob, dev_of_offset(dev)); +	int parent = fdt_parent_offset(gd->fdt_blob, dev_of_offset(dev)); + +	return fdt_address_cells(gd->fdt_blob, parent);  }  static inline int dev_read_size_cells(const struct udevice *dev)  { -	/* NOTE: this call should walk up the parent stack */ -	return fdt_size_cells(gd->fdt_blob, dev_of_offset(dev)); +	int parent = fdt_parent_offset(gd->fdt_blob, dev_of_offset(dev)); + +	return fdt_size_cells(gd->fdt_blob, parent);  }  static inline int dev_read_simple_addr_cells(const struct udevice *dev) | 
