* [U-Boot] [RFC PATCH v2 0/2] Make most DDR non-secure in MMU while keep a small block secure
@ 2015-11-11 22:50 York Sun
2015-11-11 22:50 ` [U-Boot] [RFC PATCH v2 1/2] Reserve secure memory York Sun
2015-11-11 22:50 ` [U-Boot] [RFC PATCH v2 2/2] armv8: fsl-layerscape: Make DDR non secure in MMU tables York Sun
0 siblings, 2 replies; 7+ messages in thread
From: York Sun @ 2015-11-11 22:50 UTC (permalink / raw)
To: u-boot
This set is to change MMU tables so DDR is in non-secure mode that
non-secure master such as SDHC DMA can access the data. To mix
secure and non-secure MMU entries, the MMU tables themselves have
to be in secure memory. A small portion memory is reserved at the
end of DDR (before debug server and MC) to host secure application
and the MMU tables.
This is different from existing armv7 secure_ram_addr() solution.
U-boot can run in the middle of memory if the memory is large.
Having security memory at the very end simplifies MMU setup.
Changes in v2:
Do not use CONFIG_SYS_MEM_TOP_HIDE mechanism
Move gd->arch.secure_ram to gd->secure_ram.
Change the calculation of gd->secure_ram accordingly.
Chnage commit message slightly accordingly.
Changes in v1:
Initial patch.
Depends on http://patchwork.ozlabs.org/patch/540248/
York Sun (2):
Reserve secure memory
armv8: fsl-layerscape: Make DDR non secure in MMU tables
README | 8 ++
arch/arm/cpu/armv8/fsl-layerscape/cpu.c | 126 ++++++++++++++++++++++--
arch/arm/include/asm/arch-fsl-layerscape/cpu.h | 12 ++-
board/freescale/ls2085a/ddr.c | 13 +++
board/freescale/ls2085aqds/ddr.c | 13 +++
board/freescale/ls2085ardb/ddr.c | 13 +++
common/board_f.c | 9 ++
common/cmd_bdinfo.c | 4 +
include/asm-generic/global_data.h | 1 +
include/configs/ls2085a_common.h | 6 ++
10 files changed, 192 insertions(+), 13 deletions(-)
--
1.7.9.5
^ permalink raw reply [flat|nested] 7+ messages in thread
* [U-Boot] [RFC PATCH v2 1/2] Reserve secure memory
2015-11-11 22:50 [U-Boot] [RFC PATCH v2 0/2] Make most DDR non-secure in MMU while keep a small block secure York Sun
@ 2015-11-11 22:50 ` York Sun
2015-11-12 2:17 ` Thomas Chou
2015-11-11 22:50 ` [U-Boot] [RFC PATCH v2 2/2] armv8: fsl-layerscape: Make DDR non secure in MMU tables York Sun
1 sibling, 1 reply; 7+ messages in thread
From: York Sun @ 2015-11-11 22:50 UTC (permalink / raw)
To: u-boot
Secure memory is at the end of memory, separated and reserved
from OS, tracked by gd->secure_ram. Secure memory can host
MMU tables, security monitor, etc.
Signed-off-by: York Sun <yorksun@freescale.com>
---
Changes in v2:
Do not use CONFIG_SYS_MEM_TOP_HIDE mechanism
Changes in v1:
Initial patch.
Depends on http://patchwork.ozlabs.org/patch/540248/
README | 8 ++++++++
common/board_f.c | 9 +++++++++
include/asm-generic/global_data.h | 1 +
include/configs/ls2085a_common.h | 6 ++++++
4 files changed, 24 insertions(+)
diff --git a/README b/README
index ef8d437..61cbc82 100644
--- a/README
+++ b/README
@@ -3881,6 +3881,14 @@ Configuration Settings:
Scratch address used by the alternate memory test
You only need to set this if address zero isn't writeable
+- CONFIG_SYS_MEM_RESERVE_SECURE
+ If defined, the size of CONFIG_SYS_MEM_RESERVE_SECURE memory
+ is substracted from total RAM and won't be reported to OS.
+ This memory can be used as secure memory. A variable
+ gd->secure_ram is used to track the location. In systems
+ the RAM base is not zero, or RAM is divided into banks,
+ this variable needs to be recalcuated to get the address.
+
- CONFIG_SYS_MEM_TOP_HIDE (PPC only):
If CONFIG_SYS_MEM_TOP_HIDE is defined in the board config header,
this specified memory area will get subtracted from the top
diff --git a/common/board_f.c b/common/board_f.c
index 725eb18..8061105 100644
--- a/common/board_f.c
+++ b/common/board_f.c
@@ -323,6 +323,15 @@ static int setup_dest_addr(void)
* Ram is setup, size stored in gd !!
*/
debug("Ram size: %08lX\n", (ulong)gd->ram_size);
+#ifdef CONFIG_SYS_MEM_RESERVE_SECURE
+ /* Reserve memory for secure MMU tables, and/or security monitor */
+ gd->ram_size -= CONFIG_SYS_MEM_RESERVE_SECURE;
+ /*
+ * Record secure memory location. Need recalcuate if memory splits
+ * into banks, or the ram base is not zero.
+ */
+ gd->secure_ram = gd->ram_size;
+#endif
#if defined(CONFIG_SYS_MEM_TOP_HIDE)
/*
* Subtract specified amount of memory to hide so that it won't
diff --git a/include/asm-generic/global_data.h b/include/asm-generic/global_data.h
index d0383f3..336f3a0 100644
--- a/include/asm-generic/global_data.h
+++ b/include/asm-generic/global_data.h
@@ -58,6 +58,7 @@ typedef struct global_data {
unsigned long relocaddr; /* Start address of U-Boot in RAM */
phys_size_t ram_size; /* RAM size */
+ phys_addr_t secure_ram; /* Secure memory addr */
unsigned long mon_len; /* monitor len */
unsigned long irq_sp; /* irq stack pointer */
unsigned long start_addr_sp; /* start_addr_stackpointer */
diff --git a/include/configs/ls2085a_common.h b/include/configs/ls2085a_common.h
index 0011e72..adf132c 100644
--- a/include/configs/ls2085a_common.h
+++ b/include/configs/ls2085a_common.h
@@ -75,6 +75,12 @@
#define CONFIG_SYS_FSL_DDR_MAIN_NUM_CTRLS 2
/*
+ * Reserve secure memory
+ * To be aligned with MMU block size
+ */
+#define CONFIG_SYS_MEM_RESERVE_SECURE (2048 * 1024) /* 2MB */
+
+/*
* SMP Definitinos
*/
#define CPU_RELEASE_ADDR secondary_boot_func
--
1.7.9.5
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [U-Boot] [RFC PATCH v2 2/2] armv8: fsl-layerscape: Make DDR non secure in MMU tables
2015-11-11 22:50 [U-Boot] [RFC PATCH v2 0/2] Make most DDR non-secure in MMU while keep a small block secure York Sun
2015-11-11 22:50 ` [U-Boot] [RFC PATCH v2 1/2] Reserve secure memory York Sun
@ 2015-11-11 22:50 ` York Sun
1 sibling, 0 replies; 7+ messages in thread
From: York Sun @ 2015-11-11 22:50 UTC (permalink / raw)
To: u-boot
DDR has been set as secure in MMU tables. Non-secure master such
as SDHC DMA cannot access data correctly. Mixing secure and non-
secure MMU entries requirs the MMU tables themselves in secure
memory. This patch moves MMU tables into a secure DDR area.
Early MMU tables are changed to set DDR as non-secure. Before
setting final MMU tables in secure DDR, existing MMU needs to be
updated with a secure DDR entry. A new table is added into final
MMU tables so secure memory can have 2MB granuality.
"bdinfo" command shows gd->secure_ram value.
Signed-off-by: York Sun <yorksun@freescale.com>
---
Changes in v2:
Move gd->arch.secure_ram to gd->secure_ram.
Change the calculation of gd->secure_ram accordingly.
Chnage commit message slightly accordingly.
Changes in v1: None
arch/arm/cpu/armv8/fsl-layerscape/cpu.c | 126 ++++++++++++++++++++++--
arch/arm/include/asm/arch-fsl-layerscape/cpu.h | 12 ++-
board/freescale/ls2085a/ddr.c | 13 +++
board/freescale/ls2085aqds/ddr.c | 13 +++
board/freescale/ls2085ardb/ddr.c | 13 +++
common/cmd_bdinfo.c | 4 +
6 files changed, 168 insertions(+), 13 deletions(-)
diff --git a/arch/arm/cpu/armv8/fsl-layerscape/cpu.c b/arch/arm/cpu/armv8/fsl-layerscape/cpu.c
index 9d1c70f..a372b3f 100644
--- a/arch/arm/cpu/armv8/fsl-layerscape/cpu.c
+++ b/arch/arm/cpu/armv8/fsl-layerscape/cpu.c
@@ -207,10 +207,86 @@ static inline void early_mmu_setup(void)
}
/*
+ * Called from early mmu setup. The phys_addr needs to be in
+ * the table and aligned. This function sets the block to secure.
+ */
+static inline int fixup_early_secure_ddr(u64 *level0_table,
+ phys_addr_t phys_addr)
+{
+ int ret = 0;
+#ifdef CONFIG_FSL_PPA_RESERVED_DRAM_SIZE
+ struct table_info table = {};
+ struct sys_mmu_table ddr_entry = {
+ 0, 0, BLOCK_SIZE_L1, MT_NORMAL, PMD_SECT_OUTER_SHARE
+ };
+
+ ddr_entry.virt_addr = phys_addr;
+ ddr_entry.phys_addr = phys_addr;
+ ret = find_table(&ddr_entry, &table, level0_table);
+ if (!ret)
+ ret = set_block_entry(&ddr_entry, &table);
+#endif
+
+ return ret;
+}
+/*
+ * Called from final mmu setup. The phys_addr is new, non-existing
+ * address. A new sub table is created @level2_table_secure.
+ */
+static inline int final_secure_ddr(u64 *level0_table,
+ u64 *level2_table_secure,
+ phys_addr_t phys_addr)
+{
+ int ret = 0;
+#ifdef CONFIG_FSL_PPA_RESERVED_DRAM_SIZE
+ struct table_info table = {};
+ struct sys_mmu_table ddr_entry = {
+ 0, 0, BLOCK_SIZE_L1, MT_NORMAL,
+ PMD_SECT_OUTER_SHARE | PMD_SECT_NS
+ };
+ u64 index;
+
+ /* Need to create a new table */
+ ddr_entry.virt_addr = phys_addr & ~(BLOCK_SIZE_L1 - 1);
+ ddr_entry.phys_addr = phys_addr & ~(BLOCK_SIZE_L1 - 1);
+ ret = find_table(&ddr_entry, &table, level0_table);
+ if (ret)
+ return ret;
+ index = (ddr_entry.virt_addr - table.table_base) >> SECTION_SHIFT_L1;
+ set_pgtable_table(table.ptr, index, level2_table_secure);
+ table.ptr = level2_table_secure;
+ table.table_base = ddr_entry.virt_addr;
+ table.entry_size = BLOCK_SIZE_L2;
+ ret = set_block_entry(&ddr_entry, &table);
+ if (ret) {
+ printf("MMU error: could not fill non-secure ddr block entries\n");
+ return ret;
+ }
+ ddr_entry.virt_addr = phys_addr;
+ ddr_entry.phys_addr = phys_addr;
+ ddr_entry.size = CONFIG_FSL_PPA_RESERVED_DRAM_SIZE;
+ ddr_entry.attribute = PMD_SECT_OUTER_SHARE;
+ ret = find_table(&ddr_entry, &table, level0_table);
+ if (ret) {
+ printf("MMU error: could not find secure ddr table\n");
+ return ret;
+ }
+ ret = set_block_entry(&ddr_entry, &table);
+ if (ret)
+ printf("MMU error: could not set secure ddr block entry\n");
+#endif
+
+ return ret;
+}
+
+/*
* The final tables look similar to early tables, but different in detail.
* These tables are in DRAM. Sub tables are added to enable cache for
* QBMan and OCRAM.
*
+ * Put the MMU table in secure memory if gd->secure_ram is set.
+ * OCRAM will be not used for this purpose so gd->secure_ram can't be 0.
+ *
* Level 1 table 0 contains 512 entries for each 1GB from 0 to 512GB.
* Level 1 table 1 contains 512 entries for each 1GB from 512GB to 1TB.
* Level 2 table 0 contains 512 entries for each 2MB from 0 to 1GB.
@@ -224,17 +300,35 @@ static inline void early_mmu_setup(void)
static inline void final_mmu_setup(void)
{
unsigned int el, i;
- u64 *level0_table = (u64 *)gd->arch.tlb_addr;
- u64 *level1_table0 = (u64 *)(gd->arch.tlb_addr + 0x1000);
- u64 *level1_table1 = (u64 *)(gd->arch.tlb_addr + 0x2000);
- u64 *level2_table0 = (u64 *)(gd->arch.tlb_addr + 0x3000);
-#ifdef CONFIG_FSL_LSCH3
- u64 *level2_table1 = (u64 *)(gd->arch.tlb_addr + 0x4000);
-#elif defined(CONFIG_FSL_LSCH2)
- u64 *level2_table1 = (u64 *)(gd->arch.tlb_addr + 0x4000);
- u64 *level2_table2 = (u64 *)(gd->arch.tlb_addr + 0x5000);
+ u64 *level0_table = gd->secure_ram ? (u64 *)gd->secure_ram
+ : (u64 *)gd->arch.tlb_addr;
+ u64 *level1_table0 = level0_table + 512;
+ u64 *level1_table1 = level1_table0 + 512;
+ u64 *level2_table0 = level1_table1 + 512;
+ u64 *level2_table1 = level2_table0 + 512;
+#ifdef CONFIG_FSL_LSCH2
+ u64 *level2_table2 = level2_table1 + 512;
#endif
+ u64 *level2_table_secure;
struct table_info table = {level0_table, 0, BLOCK_SIZE_L0};
+ u64 secure_ram = gd->secure_ram & ~(BLOCK_SIZE_L1 - 1);
+
+ /*
+ * Modify the early MMU table to create a secure memory
+ * to host the table
+ */
+ if (!fixup_early_secure_ddr((u64 *)CONFIG_SYS_FSL_OCRAM_BASE,
+ secure_ram)) {
+ flush_dcache_range(CONFIG_SYS_FSL_OCRAM_BASE,
+ CONFIG_SYS_FSL_OCRAM_BASE + 0x5000);
+ asm volatile(
+ "tlbi vae3, %0\n"
+ "dsb sy\n"
+ "isb"
+ : : "r" (secure_ram) : "memory");
+ } else {
+ printf("MMU error: Failed to create early MMU secure DDR\n");
+ }
/* Invalidate all table entries */
memset(level0_table, 0, PGTABLE_SIZE);
@@ -269,6 +363,20 @@ static inline void final_mmu_setup(void)
&final_mmu_table[i]);
}
}
+ /* Set the PPA memory to secure */
+ if (gd->secure_ram) {
+#ifdef CONFIG_FSL_LSCH3
+ level2_table_secure = level2_table1 + 512;
+#elif defined(CONFIG_FSL_LSCH2)
+ level2_table_secure = level2_table2 + 512;
+#endif
+ /* update tlb pointer */
+ gd->arch.tlb_addr = gd->secure_ram;
+ if (!final_secure_ddr(level0_table,
+ level2_table_secure,
+ gd->secure_ram))
+ gd->secure_ram |= 1; /* set the valid flag */
+ }
/* flush new MMU table */
flush_dcache_range(gd->arch.tlb_addr,
diff --git a/arch/arm/include/asm/arch-fsl-layerscape/cpu.h b/arch/arm/include/asm/arch-fsl-layerscape/cpu.h
index b4b85a8..a13a3d3 100644
--- a/arch/arm/include/asm/arch-fsl-layerscape/cpu.h
+++ b/arch/arm/include/asm/arch-fsl-layerscape/cpu.h
@@ -129,12 +129,14 @@ static const struct sys_mmu_table early_mmu_table[] = {
{ CONFIG_SYS_FLASH_BASE, CONFIG_SYS_FSL_IFC_BASE1,
CONFIG_SYS_FSL_IFC_SIZE1, MT_DEVICE_NGNRNE, PMD_SECT_NON_SHARE },
{ CONFIG_SYS_FSL_DRAM_BASE1, CONFIG_SYS_FSL_DRAM_BASE1,
- CONFIG_SYS_FSL_DRAM_SIZE1, MT_NORMAL, PMD_SECT_OUTER_SHARE },
+ CONFIG_SYS_FSL_DRAM_SIZE1, MT_NORMAL,
+ PMD_SECT_OUTER_SHARE | PMD_SECT_NS},
{ CONFIG_SYS_FSL_DCSR_BASE, CONFIG_SYS_FSL_DCSR_BASE,
CONFIG_SYS_FSL_DCSR_SIZE, MT_DEVICE_NGNRNE,
PMD_SECT_NON_SHARE | PMD_SECT_PXN | PMD_SECT_UXN },
{ CONFIG_SYS_FSL_DRAM_BASE2, CONFIG_SYS_FSL_DRAM_BASE2,
- CONFIG_SYS_FSL_DRAM_SIZE2, MT_NORMAL, PMD_SECT_OUTER_SHARE },
+ CONFIG_SYS_FSL_DRAM_SIZE2, MT_NORMAL,
+ PMD_SECT_OUTER_SHARE | PMD_SECT_NS },
#elif defined(CONFIG_FSL_LSCH2)
{ CONFIG_SYS_FSL_CCSR_BASE, CONFIG_SYS_FSL_CCSR_BASE,
CONFIG_SYS_FSL_CCSR_SIZE, MT_DEVICE_NGNRNE,
@@ -161,7 +163,8 @@ static const struct sys_mmu_table final_mmu_table[] = {
{ CONFIG_SYS_FSL_OCRAM_BASE, CONFIG_SYS_FSL_OCRAM_BASE,
CONFIG_SYS_FSL_OCRAM_SIZE, MT_NORMAL, PMD_SECT_NON_SHARE },
{ CONFIG_SYS_FSL_DRAM_BASE1, CONFIG_SYS_FSL_DRAM_BASE1,
- CONFIG_SYS_FSL_DRAM_SIZE1, MT_NORMAL, PMD_SECT_OUTER_SHARE },
+ CONFIG_SYS_FSL_DRAM_SIZE1, MT_NORMAL,
+ PMD_SECT_OUTER_SHARE | PMD_SECT_NS },
{ CONFIG_SYS_FSL_QSPI_BASE2, CONFIG_SYS_FSL_QSPI_BASE2,
CONFIG_SYS_FSL_QSPI_SIZE2, MT_DEVICE_NGNRNE,
PMD_SECT_NON_SHARE | PMD_SECT_PXN | PMD_SECT_UXN },
@@ -208,7 +211,8 @@ static const struct sys_mmu_table final_mmu_table[] = {
CONFIG_SYS_FSL_PEBUF_SIZE, MT_DEVICE_NGNRNE,
PMD_SECT_NON_SHARE | PMD_SECT_PXN | PMD_SECT_UXN },
{ CONFIG_SYS_FSL_DRAM_BASE2, CONFIG_SYS_FSL_DRAM_BASE2,
- CONFIG_SYS_FSL_DRAM_SIZE2, MT_NORMAL, PMD_SECT_OUTER_SHARE },
+ CONFIG_SYS_FSL_DRAM_SIZE2, MT_NORMAL,
+ PMD_SECT_OUTER_SHARE | PMD_SECT_NS },
#elif defined(CONFIG_FSL_LSCH2)
{ CONFIG_SYS_FSL_BOOTROM_BASE, CONFIG_SYS_FSL_BOOTROM_BASE,
CONFIG_SYS_FSL_BOOTROM_SIZE, MT_DEVICE_NGNRNE,
diff --git a/board/freescale/ls2085a/ddr.c b/board/freescale/ls2085a/ddr.c
index 4884fa2..c68819d 100644
--- a/board/freescale/ls2085a/ddr.c
+++ b/board/freescale/ls2085a/ddr.c
@@ -174,14 +174,27 @@ void dram_init_banksize(void)
phys_size_t dp_ddr_size;
#endif
+ /*
+ * gd->secure_ram tracks the location of secure memory.
+ * It was set as if the memory starts from 0.
+ * The address needs to add the offset of its bank.
+ */
gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
if (gd->ram_size > CONFIG_SYS_LS2_DDR_BLOCK1_SIZE) {
gd->bd->bi_dram[0].size = CONFIG_SYS_LS2_DDR_BLOCK1_SIZE;
gd->bd->bi_dram[1].start = CONFIG_SYS_DDR_BLOCK2_BASE;
gd->bd->bi_dram[1].size = gd->ram_size -
CONFIG_SYS_LS2_DDR_BLOCK1_SIZE;
+#ifdef CONFIG_SYS_MEM_RESERVE_SECURE
+ gd->secure_ram = gd->bd->bi_dram[1].start +
+ gd->secure_ram -
+ CONFIG_SYS_LS2_DDR_BLOCK1_SIZE;
+#endif
} else {
gd->bd->bi_dram[0].size = gd->ram_size;
+#ifdef CONFIG_SYS_MEM_RESERVE_SECURE
+ gd->secure_ram = gd->bd->bi_dram[0].start + gd->secure_ram;
+#endif
}
#ifdef CONFIG_SYS_DP_DDR_BASE_PHY
diff --git a/board/freescale/ls2085aqds/ddr.c b/board/freescale/ls2085aqds/ddr.c
index 8d71ae1..c7aaf3e 100644
--- a/board/freescale/ls2085aqds/ddr.c
+++ b/board/freescale/ls2085aqds/ddr.c
@@ -164,14 +164,27 @@ void dram_init_banksize(void)
phys_size_t dp_ddr_size;
#endif
+ /*
+ * gd->secure_ram tracks the location of secure memory.
+ * It was set as if the memory starts from 0.
+ * The address needs to add the offset of its bank.
+ */
gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
if (gd->ram_size > CONFIG_SYS_LS2_DDR_BLOCK1_SIZE) {
gd->bd->bi_dram[0].size = CONFIG_SYS_LS2_DDR_BLOCK1_SIZE;
gd->bd->bi_dram[1].start = CONFIG_SYS_DDR_BLOCK2_BASE;
gd->bd->bi_dram[1].size = gd->ram_size -
CONFIG_SYS_LS2_DDR_BLOCK1_SIZE;
+#ifdef CONFIG_SYS_MEM_RESERVE_SECURE
+ gd->secure_ram = gd->bd->bi_dram[1].start +
+ gd->secure_ram -
+ CONFIG_SYS_LS2_DDR_BLOCK1_SIZE;
+#endif
} else {
gd->bd->bi_dram[0].size = gd->ram_size;
+#ifdef CONFIG_SYS_MEM_RESERVE_SECURE
+ gd->secure_ram = gd->bd->bi_dram[0].start + gd->secure_ram;
+#endif
}
#ifdef CONFIG_SYS_DP_DDR_BASE_PHY
diff --git a/board/freescale/ls2085ardb/ddr.c b/board/freescale/ls2085ardb/ddr.c
index 8d71ae1..c7aaf3e 100644
--- a/board/freescale/ls2085ardb/ddr.c
+++ b/board/freescale/ls2085ardb/ddr.c
@@ -164,14 +164,27 @@ void dram_init_banksize(void)
phys_size_t dp_ddr_size;
#endif
+ /*
+ * gd->secure_ram tracks the location of secure memory.
+ * It was set as if the memory starts from 0.
+ * The address needs to add the offset of its bank.
+ */
gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
if (gd->ram_size > CONFIG_SYS_LS2_DDR_BLOCK1_SIZE) {
gd->bd->bi_dram[0].size = CONFIG_SYS_LS2_DDR_BLOCK1_SIZE;
gd->bd->bi_dram[1].start = CONFIG_SYS_DDR_BLOCK2_BASE;
gd->bd->bi_dram[1].size = gd->ram_size -
CONFIG_SYS_LS2_DDR_BLOCK1_SIZE;
+#ifdef CONFIG_SYS_MEM_RESERVE_SECURE
+ gd->secure_ram = gd->bd->bi_dram[1].start +
+ gd->secure_ram -
+ CONFIG_SYS_LS2_DDR_BLOCK1_SIZE;
+#endif
} else {
gd->bd->bi_dram[0].size = gd->ram_size;
+#ifdef CONFIG_SYS_MEM_RESERVE_SECURE
+ gd->secure_ram = gd->bd->bi_dram[0].start + gd->secure_ram;
+#endif
}
#ifdef CONFIG_SYS_DP_DDR_BASE_PHY
diff --git a/common/cmd_bdinfo.c b/common/cmd_bdinfo.c
index adda55a..73530b6 100644
--- a/common/cmd_bdinfo.c
+++ b/common/cmd_bdinfo.c
@@ -382,6 +382,10 @@ static int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc,
print_num("-> size", bd->bi_dram[i].size);
}
+#ifdef CONFIG_FSL_LAYERSCAPE
+ if (gd->secure_ram & 0x1)
+ print_num("Secure ram", gd->secure_ram & ~1);
+#endif
#if defined(CONFIG_CMD_NET) && !defined(CONFIG_DM_ETH)
print_eths();
#endif
--
1.7.9.5
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [U-Boot] [RFC PATCH v2 1/2] Reserve secure memory
2015-11-11 22:50 ` [U-Boot] [RFC PATCH v2 1/2] Reserve secure memory York Sun
@ 2015-11-12 2:17 ` Thomas Chou
2015-11-12 3:34 ` York Sun
0 siblings, 1 reply; 7+ messages in thread
From: Thomas Chou @ 2015-11-12 2:17 UTC (permalink / raw)
To: u-boot
Hi York,
On 2015?11?12? 06:50, York Sun wrote:
> diff --git a/include/asm-generic/global_data.h b/include/asm-generic/global_data.h
> index d0383f3..336f3a0 100644
> --- a/include/asm-generic/global_data.h
> +++ b/include/asm-generic/global_data.h
> @@ -58,6 +58,7 @@ typedef struct global_data {
>
> unsigned long relocaddr; /* Start address of U-Boot in RAM */
> phys_size_t ram_size; /* RAM size */
> + phys_addr_t secure_ram; /* Secure memory addr */
Shouldn't this be included only if CONFIG_SYS_MEM_RESERVE_SECURE ?
> unsigned long mon_len; /* monitor len */
> unsigned long irq_sp; /* irq stack pointer */
> unsigned long start_addr_sp; /* start_addr_stackpointer */
Best regards,
Thomas
^ permalink raw reply [flat|nested] 7+ messages in thread
* [U-Boot] [RFC PATCH v2 1/2] Reserve secure memory
2015-11-12 2:17 ` Thomas Chou
@ 2015-11-12 3:34 ` York Sun
2015-11-12 6:28 ` Scott Wood
0 siblings, 1 reply; 7+ messages in thread
From: York Sun @ 2015-11-12 3:34 UTC (permalink / raw)
To: u-boot
On 11/11/2015 06:17 PM, Thomas Chou wrote:
> Hi York,
>
> On 2015?11?12? 06:50, York Sun wrote:
>> diff --git a/include/asm-generic/global_data.h b/include/asm-generic/global_data.h
>> index d0383f3..336f3a0 100644
>> --- a/include/asm-generic/global_data.h
>> +++ b/include/asm-generic/global_data.h
>> @@ -58,6 +58,7 @@ typedef struct global_data {
>>
>> unsigned long relocaddr; /* Start address of U-Boot in RAM */
>> phys_size_t ram_size; /* RAM size */
>> + phys_addr_t secure_ram; /* Secure memory addr */
>
> Shouldn't this be included only if CONFIG_SYS_MEM_RESERVE_SECURE ?
It can be. It will require checking CONFIG_SYS_MEM_RESERVE_SECURE every time
this variable is used. I will add it in next version.
Thanks.
York
^ permalink raw reply [flat|nested] 7+ messages in thread
* [U-Boot] [RFC PATCH v2 1/2] Reserve secure memory
2015-11-12 3:34 ` York Sun
@ 2015-11-12 6:28 ` Scott Wood
2015-11-12 16:42 ` York Sun
0 siblings, 1 reply; 7+ messages in thread
From: Scott Wood @ 2015-11-12 6:28 UTC (permalink / raw)
To: u-boot
On Wed, 2015-11-11 at 19:34 -0800, York Sun wrote:
>
> On 11/11/2015 06:17 PM, Thomas Chou wrote:
> > Hi York,
> >
> > On 2015?11?12? 06:50, York Sun wrote:
> > > diff --git a/include/asm-generic/global_data.h b/include/asm
> > > -generic/global_data.h
> > > index d0383f3..336f3a0 100644
> > > --- a/include/asm-generic/global_data.h
> > > +++ b/include/asm-generic/global_data.h
> > > @@ -58,6 +58,7 @@ typedef struct global_data {
> > >
> > > unsigned long relocaddr; /* Start address of U-Boot in
> > > RAM */
> > > phys_size_t ram_size; /* RAM size */
> > > + phys_addr_t secure_ram; /* Secure memory addr */
> >
> > Shouldn't this be included only if CONFIG_SYS_MEM_RESERVE_SECURE ?
>
> It can be. It will require checking CONFIG_SYS_MEM_RESERVE_SECURE every time
> this variable is used. I will add it in next version.
Why would that be better than leaving it unifdeffed?
-Scott
^ permalink raw reply [flat|nested] 7+ messages in thread
* [U-Boot] [RFC PATCH v2 1/2] Reserve secure memory
2015-11-12 6:28 ` Scott Wood
@ 2015-11-12 16:42 ` York Sun
0 siblings, 0 replies; 7+ messages in thread
From: York Sun @ 2015-11-12 16:42 UTC (permalink / raw)
To: u-boot
On 11/11/2015 10:28 PM, Scott Wood wrote:
> On Wed, 2015-11-11 at 19:34 -0800, York Sun wrote:
>>
>> On 11/11/2015 06:17 PM, Thomas Chou wrote:
>>> Hi York,
>>>
>>> On 2015?11?12? 06:50, York Sun wrote:
>>>> diff --git a/include/asm-generic/global_data.h b/include/asm
>>>> -generic/global_data.h
>>>> index d0383f3..336f3a0 100644
>>>> --- a/include/asm-generic/global_data.h
>>>> +++ b/include/asm-generic/global_data.h
>>>> @@ -58,6 +58,7 @@ typedef struct global_data {
>>>>
>>>> unsigned long relocaddr; /* Start address of U-Boot in
>>>> RAM */
>>>> phys_size_t ram_size; /* RAM size */
>>>> + phys_addr_t secure_ram; /* Secure memory addr */
>>>
>>> Shouldn't this be included only if CONFIG_SYS_MEM_RESERVE_SECURE ?
>>
>> It can be. It will require checking CONFIG_SYS_MEM_RESERVE_SECURE every time
>> this variable is used. I will add it in next version.
>
> Why would that be better than leaving it unifdeffed?
Save a few bytes? I prefer not to use ifdef if possible, but I understand some
platforms don't want to spare a few bytes.
York
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2015-11-12 16:42 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-11-11 22:50 [U-Boot] [RFC PATCH v2 0/2] Make most DDR non-secure in MMU while keep a small block secure York Sun
2015-11-11 22:50 ` [U-Boot] [RFC PATCH v2 1/2] Reserve secure memory York Sun
2015-11-12 2:17 ` Thomas Chou
2015-11-12 3:34 ` York Sun
2015-11-12 6:28 ` Scott Wood
2015-11-12 16:42 ` York Sun
2015-11-11 22:50 ` [U-Boot] [RFC PATCH v2 2/2] armv8: fsl-layerscape: Make DDR non secure in MMU tables York Sun
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.