Message ID | 1472794824-6032-6-git-send-email-d-allred@ti.com |
---|---|
State | New |
Headers | show |
On 09/02/2016 12:40 AM, Daniel Allred wrote: > Adds a secure dram reservation fixup for secure > devices, when a region in the emif has been set aside > for secure world use. The size is defined by the > CONFIG_TI_SECURE_EMIF_TOTAL_REGION_SIZE config option. > > Signed-off-by: Daniel Allred <d-allred@ti.com> > --- > arch/arm/cpu/armv7/omap5/fdt.c | 64 ++++++++++++++++++++++++++++++++++++++++-- > 1 file changed, 62 insertions(+), 2 deletions(-) > > diff --git a/arch/arm/cpu/armv7/omap5/fdt.c b/arch/arm/cpu/armv7/omap5/fdt.c > index 0493cd1..da8d59b 100644 > --- a/arch/arm/cpu/armv7/omap5/fdt.c > +++ b/arch/arm/cpu/armv7/omap5/fdt.c > @@ -153,13 +153,73 @@ static int ft_hs_fixup_sram(void *fdt, bd_t *bd) > static int ft_hs_fixup_sram(void *fdt, bd_t *bd) { return 0; } > #endif > > +#if (CONFIG_TI_SECURE_EMIF_TOTAL_REGION_SIZE != 0) > +static int ft_hs_fixup_dram(void *fdt, bd_t *bd) > +{ > + const char *path, *subpath; > + int offs; > + u32 sec_mem_start = CONFIG_TI_SECURE_EMIF_REGION_START; > + u32 sec_mem_size = CONFIG_TI_SECURE_EMIF_TOTAL_REGION_SIZE; > + fdt64_t temp[2]; > + > + /* If start address is zero, place at end of DRAM */ > + if (0 == sec_mem_start) > + sec_mem_start = > + (CONFIG_SYS_SDRAM_BASE + > + (omap_sdram_size() - sec_mem_size)); > + > + /* Delete any original secure_reserved node */ > + path = "/reserved-memory/secure_reserved"; > + offs = fdt_path_offset(fdt, path); > + if (offs >= 0) > + fdt_del_node(fdt, offs); > + > + /* Add new secure_reserved node */ > + path = "/reserved-memory"; > + offs = fdt_path_offset(fdt, path); > + if (offs < 0) { > + debug("Node %s not found\n", path); > + path = "/"; > + subpath = "reserved-memory"; > + fdt_path_offset(fdt, path); Are we supposed to be doing something with the result of this call? Who sets 'offs' in this case? > + offs = fdt_add_subnode(fdt, offs, subpath); > + if (offs < 0) { > + printf("Could not create %s%s node.\n", path, subpath); > + return 1; > + } > + path = "/reserved-memory"; > + offs = fdt_path_offset(fdt, path); > + } > + > + subpath = "secure_reserved"; > + offs = fdt_add_subnode(fdt, offs, subpath); > + if (offs < 0) { > + printf("Could not create %s%s node.\n", path, subpath); > + return 1; > + } > + > + temp[0] = cpu_to_fdt64(((u64)sec_mem_start)); > + temp[1] = cpu_to_fdt64(((u64)sec_mem_size)); > + fdt_setprop_string(fdt, offs, "compatible", > + "ti,dra7-secure-memory"); > + fdt_setprop_string(fdt, offs, "status", "okay"); > + fdt_setprop(fdt, offs, "no-map", NULL, 0); > + fdt_setprop(fdt, offs, "reg", temp, sizeof(temp)); > + > + return 0; > +} > +#else > +static int ft_hs_fixup_dram(void *fdt, bd_t *bd) { return 0; } > +#endif > + > static void ft_hs_fixups(void *fdt, bd_t *bd) > { > /* Check we are running on an HS/EMU device type */ > if (GP_DEVICE != get_device_type()) { > if ((ft_hs_fixup_crossbar(fdt, bd) == 0) && > (ft_hs_disable_rng(fdt, bd) == 0) && > - (ft_hs_fixup_sram(fdt, bd) == 0)) > + (ft_hs_fixup_sram(fdt, bd) == 0) && > + (ft_hs_fixup_dram(fdt, bd) == 0)) > return; > } else { > printf("ERROR: Incorrect device type (GP) detected!"); > @@ -171,7 +231,7 @@ static void ft_hs_fixups(void *fdt, bd_t *bd) > static void ft_hs_fixups(void *fdt, bd_t *bd) > { > } > -#endif > +#endif /* #ifdef CONFIG_TI_SECURE_DEVICE */ > > /* > * Place for general cpu/SoC FDT fixups. Board specific > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
diff --git a/arch/arm/cpu/armv7/omap5/fdt.c b/arch/arm/cpu/armv7/omap5/fdt.c index 0493cd1..da8d59b 100644 --- a/arch/arm/cpu/armv7/omap5/fdt.c +++ b/arch/arm/cpu/armv7/omap5/fdt.c @@ -153,13 +153,73 @@ static int ft_hs_fixup_sram(void *fdt, bd_t *bd) static int ft_hs_fixup_sram(void *fdt, bd_t *bd) { return 0; } #endif +#if (CONFIG_TI_SECURE_EMIF_TOTAL_REGION_SIZE != 0) +static int ft_hs_fixup_dram(void *fdt, bd_t *bd) +{ + const char *path, *subpath; + int offs; + u32 sec_mem_start = CONFIG_TI_SECURE_EMIF_REGION_START; + u32 sec_mem_size = CONFIG_TI_SECURE_EMIF_TOTAL_REGION_SIZE; + fdt64_t temp[2]; + + /* If start address is zero, place at end of DRAM */ + if (0 == sec_mem_start) + sec_mem_start = + (CONFIG_SYS_SDRAM_BASE + + (omap_sdram_size() - sec_mem_size)); + + /* Delete any original secure_reserved node */ + path = "/reserved-memory/secure_reserved"; + offs = fdt_path_offset(fdt, path); + if (offs >= 0) + fdt_del_node(fdt, offs); + + /* Add new secure_reserved node */ + path = "/reserved-memory"; + offs = fdt_path_offset(fdt, path); + if (offs < 0) { + debug("Node %s not found\n", path); + path = "/"; + subpath = "reserved-memory"; + fdt_path_offset(fdt, path); + offs = fdt_add_subnode(fdt, offs, subpath); + if (offs < 0) { + printf("Could not create %s%s node.\n", path, subpath); + return 1; + } + path = "/reserved-memory"; + offs = fdt_path_offset(fdt, path); + } + + subpath = "secure_reserved"; + offs = fdt_add_subnode(fdt, offs, subpath); + if (offs < 0) { + printf("Could not create %s%s node.\n", path, subpath); + return 1; + } + + temp[0] = cpu_to_fdt64(((u64)sec_mem_start)); + temp[1] = cpu_to_fdt64(((u64)sec_mem_size)); + fdt_setprop_string(fdt, offs, "compatible", + "ti,dra7-secure-memory"); + fdt_setprop_string(fdt, offs, "status", "okay"); + fdt_setprop(fdt, offs, "no-map", NULL, 0); + fdt_setprop(fdt, offs, "reg", temp, sizeof(temp)); + + return 0; +} +#else +static int ft_hs_fixup_dram(void *fdt, bd_t *bd) { return 0; } +#endif + static void ft_hs_fixups(void *fdt, bd_t *bd) { /* Check we are running on an HS/EMU device type */ if (GP_DEVICE != get_device_type()) { if ((ft_hs_fixup_crossbar(fdt, bd) == 0) && (ft_hs_disable_rng(fdt, bd) == 0) && - (ft_hs_fixup_sram(fdt, bd) == 0)) + (ft_hs_fixup_sram(fdt, bd) == 0) && + (ft_hs_fixup_dram(fdt, bd) == 0)) return; } else { printf("ERROR: Incorrect device type (GP) detected!"); @@ -171,7 +231,7 @@ static void ft_hs_fixups(void *fdt, bd_t *bd) static void ft_hs_fixups(void *fdt, bd_t *bd) { } -#endif +#endif /* #ifdef CONFIG_TI_SECURE_DEVICE */ /* * Place for general cpu/SoC FDT fixups. Board specific
Adds a secure dram reservation fixup for secure devices, when a region in the emif has been set aside for secure world use. The size is defined by the CONFIG_TI_SECURE_EMIF_TOTAL_REGION_SIZE config option. Signed-off-by: Daniel Allred <d-allred@ti.com> --- arch/arm/cpu/armv7/omap5/fdt.c | 64 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 2 deletions(-) -- 2.7.4 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot