Skip to content
Snippets Groups Projects
Commit 30d45c0d authored by Stefan Roese's avatar Stefan Roese
Browse files

fdt: Add fdt_fixup_nor_flash_size() to fixup NOR FLASH size in dtb


This function can be used to update the size in the "reg" property
of the NOR FLASH device nodes. This is necessary for boards with
non-fixed NOR FLASH sizes.

Signed-off-by: default avatarStefan Roese <sr@denx.de>
Acked-by: default avatarGerald Van Baren <vanbaren@cideas.com>
Acked-by: default avatarWolfgang Denk <wd@denx.de>
parent 76706cb8
No related branches found
No related tags found
No related merge requests found
...@@ -692,3 +692,47 @@ int fdt_pci_dma_ranges(void *blob, int phb_off, struct pci_controller *hose) { ...@@ -692,3 +692,47 @@ int fdt_pci_dma_ranges(void *blob, int phb_off, struct pci_controller *hose) {
return 0; return 0;
} }
#endif #endif
#ifdef CONFIG_FDT_FIXUP_NOR_FLASH_SIZE
/*
* This function can be used to update the size in the "reg" property
* of the NOR FLASH device nodes. This is necessary for boards with
* non-fixed NOR FLASH sizes.
*/
int fdt_fixup_nor_flash_size(void *blob, int cs, u32 size)
{
char compat[][16] = { "cfi-flash", "jedec-flash" };
int off;
int len;
struct fdt_property *prop;
u32 *reg;
int i;
for (i = 0; i < 2; i++) {
off = fdt_node_offset_by_compatible(blob, -1, compat[i]);
while (off != -FDT_ERR_NOTFOUND) {
/*
* Found one compatible node, now check if this one
* has the correct CS
*/
prop = fdt_get_property_w(blob, off, "reg", &len);
if (prop) {
reg = (u32 *)&prop->data[0];
if (reg[0] == cs) {
reg[2] = size;
fdt_setprop(blob, off, "reg", reg,
3 * sizeof(u32));
return 0;
}
}
/* Move to next compatible node */
off = fdt_node_offset_by_compatible(blob, off,
compat[i]);
}
}
return -1;
}
#endif
...@@ -79,5 +79,7 @@ void ft_pci_setup(void *blob, bd_t *bd); ...@@ -79,5 +79,7 @@ void ft_pci_setup(void *blob, bd_t *bd);
void set_working_fdt_addr(void *addr); void set_working_fdt_addr(void *addr);
int fdt_resize(void *blob); int fdt_resize(void *blob);
int fdt_fixup_nor_flash_size(void *blob, int cs, u32 size);
#endif /* ifdef CONFIG_OF_LIBFDT */ #endif /* ifdef CONFIG_OF_LIBFDT */
#endif /* ifndef __FDT_SUPPORT_H */ #endif /* ifndef __FDT_SUPPORT_H */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment