armv8: Move secure_ram variable out of generic global data
Secure_ram variable was put in generic global data. But only ARMv8 uses this variable. Move it to ARM specific data structure. Signed-off-by: York Sun <york.sun@nxp.com>
This commit is contained in:
parent
3a592a1349
commit
e61a7534e3
3
README
3
README
@ -3766,10 +3766,11 @@ Configuration Settings:
|
||||
You only need to set this if address zero isn't writeable
|
||||
|
||||
- CONFIG_SYS_MEM_RESERVE_SECURE
|
||||
Only implemented for ARMv8 for now.
|
||||
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
|
||||
gd->arch.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.
|
||||
|
||||
|
@ -289,8 +289,8 @@ static inline int final_secure_ddr(u64 *level0_table,
|
||||
* 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 valid.
|
||||
* OCRAM will be not used for this purpose so gd->secure_ram can't be 0.
|
||||
* Put the MMU table in secure memory if gd->arch.secure_ram is valid.
|
||||
* OCRAM will be not used for this purpose so gd->arch.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.
|
||||
@ -321,13 +321,13 @@ static inline void final_mmu_setup(void)
|
||||
|
||||
if (el == 3) {
|
||||
/*
|
||||
* Only use gd->secure_ram if the address is recalculated
|
||||
* Only use gd->arch.secure_ram if the address is recalculated
|
||||
* Align to 4KB for MMU table
|
||||
*/
|
||||
if (gd->secure_ram & MEM_RESERVE_SECURE_MAINTAINED)
|
||||
level0_table = (u64 *)(gd->secure_ram & ~0xfff);
|
||||
if (gd->arch.secure_ram & MEM_RESERVE_SECURE_MAINTAINED)
|
||||
level0_table = (u64 *)(gd->arch.secure_ram & ~0xfff);
|
||||
else
|
||||
printf("MMU warning: gd->secure_ram is not maintained, disabled.\n");
|
||||
printf("MMU warning: gd->arch.secure_ram is not maintained, disabled.\n");
|
||||
}
|
||||
#endif
|
||||
level1_table0 = level0_table + 512;
|
||||
@ -374,7 +374,7 @@ static inline void final_mmu_setup(void)
|
||||
}
|
||||
/* Set the secure memory to secure in MMU */
|
||||
#ifdef CONFIG_SYS_MEM_RESERVE_SECURE
|
||||
if (el == 3 && gd->secure_ram & MEM_RESERVE_SECURE_MAINTAINED) {
|
||||
if (el == 3 && gd->arch.secure_ram & MEM_RESERVE_SECURE_MAINTAINED) {
|
||||
#ifdef CONFIG_FSL_LSCH3
|
||||
level2_table_secure = level2_table1 + 512;
|
||||
#elif defined(CONFIG_FSL_LSCH2)
|
||||
@ -382,10 +382,10 @@ static inline void final_mmu_setup(void)
|
||||
#endif
|
||||
if (!final_secure_ddr(level0_table,
|
||||
level2_table_secure,
|
||||
gd->secure_ram & ~0x3)) {
|
||||
gd->secure_ram |= MEM_RESERVE_SECURE_SECURED;
|
||||
gd->arch.secure_ram & ~0x3)) {
|
||||
gd->arch.secure_ram |= MEM_RESERVE_SECURE_SECURED;
|
||||
debug("Now MMU table is in secured memory at 0x%llx\n",
|
||||
gd->secure_ram & ~0x3);
|
||||
gd->arch.secure_ram & ~0x3);
|
||||
} else {
|
||||
printf("MMU warning: Failed to secure DDR\n");
|
||||
}
|
||||
|
@ -44,6 +44,20 @@ struct arch_global_data {
|
||||
unsigned long tlb_emerg;
|
||||
#endif
|
||||
#endif
|
||||
#ifdef CONFIG_SYS_MEM_RESERVE_SECURE
|
||||
#define MEM_RESERVE_SECURE_SECURED 0x1
|
||||
#define MEM_RESERVE_SECURE_MAINTAINED 0x2
|
||||
#define MEM_RESERVE_SECURE_ADDR_MASK (~0x3)
|
||||
/*
|
||||
* Secure memory addr
|
||||
* This variable needs maintenance if the RAM base is not zero,
|
||||
* or if RAM splits into non-consecutive banks. It also has a
|
||||
* flag indicating the secure memory is marked as secure by MMU.
|
||||
* Flags used: 0x1 secured
|
||||
* 0x2 maintained
|
||||
*/
|
||||
phys_addr_t secure_ram;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_OMAP_COMMON
|
||||
u32 omap_boot_device;
|
||||
|
@ -128,7 +128,7 @@ phys_size_t initdram(int board_type)
|
||||
void dram_init_banksize(void)
|
||||
{
|
||||
/*
|
||||
* gd->secure_ram tracks the location of secure memory.
|
||||
* gd->arch.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.
|
||||
*/
|
||||
@ -139,16 +139,17 @@ void dram_init_banksize(void)
|
||||
gd->bd->bi_dram[1].size = gd->ram_size -
|
||||
CONFIG_SYS_DDR_BLOCK1_SIZE;
|
||||
#ifdef CONFIG_SYS_MEM_RESERVE_SECURE
|
||||
gd->secure_ram = gd->bd->bi_dram[1].start +
|
||||
gd->secure_ram -
|
||||
CONFIG_SYS_DDR_BLOCK1_SIZE;
|
||||
gd->secure_ram |= MEM_RESERVE_SECURE_MAINTAINED;
|
||||
gd->arch.secure_ram = gd->bd->bi_dram[1].start +
|
||||
gd->arch.secure_ram -
|
||||
CONFIG_SYS_DDR_BLOCK1_SIZE;
|
||||
gd->arch.secure_ram |= MEM_RESERVE_SECURE_MAINTAINED;
|
||||
#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;
|
||||
gd->secure_ram |= MEM_RESERVE_SECURE_MAINTAINED;
|
||||
gd->arch.secure_ram = gd->bd->bi_dram[0].start +
|
||||
gd->arch.secure_ram;
|
||||
gd->arch.secure_ram |= MEM_RESERVE_SECURE_MAINTAINED;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
@ -189,7 +189,7 @@ phys_size_t initdram(int board_type)
|
||||
void dram_init_banksize(void)
|
||||
{
|
||||
/*
|
||||
* gd->secure_ram tracks the location of secure memory.
|
||||
* gd->arch.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.
|
||||
*/
|
||||
@ -200,16 +200,17 @@ void dram_init_banksize(void)
|
||||
gd->bd->bi_dram[1].size = gd->ram_size -
|
||||
CONFIG_SYS_DDR_BLOCK1_SIZE;
|
||||
#ifdef CONFIG_SYS_MEM_RESERVE_SECURE
|
||||
gd->secure_ram = gd->bd->bi_dram[1].start +
|
||||
gd->secure_ram -
|
||||
CONFIG_SYS_DDR_BLOCK1_SIZE;
|
||||
gd->secure_ram |= MEM_RESERVE_SECURE_MAINTAINED;
|
||||
gd->arch.secure_ram = gd->bd->bi_dram[1].start +
|
||||
gd->arch.secure_ram -
|
||||
CONFIG_SYS_DDR_BLOCK1_SIZE;
|
||||
gd->arch.secure_ram |= MEM_RESERVE_SECURE_MAINTAINED;
|
||||
#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;
|
||||
gd->secure_ram |= MEM_RESERVE_SECURE_MAINTAINED;
|
||||
gd->arch.secure_ram = gd->bd->bi_dram[0].start +
|
||||
gd->arch.secure_ram;
|
||||
gd->arch.secure_ram |= MEM_RESERVE_SECURE_MAINTAINED;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
@ -177,7 +177,7 @@ void dram_init_banksize(void)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* gd->secure_ram tracks the location of secure memory.
|
||||
* gd->arch.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.
|
||||
*/
|
||||
@ -188,16 +188,17 @@ void dram_init_banksize(void)
|
||||
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;
|
||||
gd->secure_ram |= MEM_RESERVE_SECURE_MAINTAINED;
|
||||
gd->arch.secure_ram = gd->bd->bi_dram[1].start +
|
||||
gd->arch.secure_ram -
|
||||
CONFIG_SYS_LS2_DDR_BLOCK1_SIZE;
|
||||
gd->arch.secure_ram |= MEM_RESERVE_SECURE_MAINTAINED;
|
||||
#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;
|
||||
gd->secure_ram |= MEM_RESERVE_SECURE_MAINTAINED;
|
||||
gd->arch.secure_ram = gd->bd->bi_dram[0].start +
|
||||
gd->arch.secure_ram;
|
||||
gd->arch.secure_ram |= MEM_RESERVE_SECURE_MAINTAINED;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -177,7 +177,7 @@ void dram_init_banksize(void)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* gd->secure_ram tracks the location of secure memory.
|
||||
* gd->arch.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.
|
||||
*/
|
||||
@ -188,16 +188,17 @@ void dram_init_banksize(void)
|
||||
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;
|
||||
gd->secure_ram |= MEM_RESERVE_SECURE_MAINTAINED;
|
||||
gd->arch.secure_ram = gd->bd->bi_dram[1].start +
|
||||
gd->arch.secure_ram -
|
||||
CONFIG_SYS_LS2_DDR_BLOCK1_SIZE;
|
||||
gd->arch.secure_ram |= MEM_RESERVE_SECURE_MAINTAINED;
|
||||
#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;
|
||||
gd->secure_ram |= MEM_RESERVE_SECURE_MAINTAINED;
|
||||
gd->arch.secure_ram = gd->bd->bi_dram[0].start +
|
||||
gd->arch.secure_ram;
|
||||
gd->arch.secure_ram |= MEM_RESERVE_SECURE_MAINTAINED;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -177,7 +177,7 @@ void dram_init_banksize(void)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* gd->secure_ram tracks the location of secure memory.
|
||||
* gd->arch.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.
|
||||
*/
|
||||
@ -188,16 +188,17 @@ void dram_init_banksize(void)
|
||||
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;
|
||||
gd->secure_ram |= MEM_RESERVE_SECURE_MAINTAINED;
|
||||
gd->arch.secure_ram = gd->bd->bi_dram[1].start +
|
||||
gd->arch.secure_ram -
|
||||
CONFIG_SYS_LS2_DDR_BLOCK1_SIZE;
|
||||
gd->arch.secure_ram |= MEM_RESERVE_SECURE_MAINTAINED;
|
||||
#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;
|
||||
gd->secure_ram |= MEM_RESERVE_SECURE_MAINTAINED;
|
||||
gd->arch.secure_ram = gd->bd->bi_dram[0].start +
|
||||
gd->arch.secure_ram;
|
||||
gd->arch.secure_ram |= MEM_RESERVE_SECURE_MAINTAINED;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -385,9 +385,9 @@ static int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc,
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SYS_MEM_RESERVE_SECURE
|
||||
if (gd->secure_ram & MEM_RESERVE_SECURE_SECURED) {
|
||||
if (gd->arch.secure_ram & MEM_RESERVE_SECURE_SECURED) {
|
||||
print_num("Secure ram",
|
||||
gd->secure_ram & MEM_RESERVE_SECURE_ADDR_MASK);
|
||||
gd->arch.secure_ram & MEM_RESERVE_SECURE_ADDR_MASK);
|
||||
}
|
||||
#endif
|
||||
#if defined(CONFIG_CMD_NET) && !defined(CONFIG_DM_ETH)
|
||||
|
@ -339,7 +339,7 @@ static int setup_dest_addr(void)
|
||||
* Record secure memory location. Need recalcuate if memory splits
|
||||
* into banks, or the ram base is not zero.
|
||||
*/
|
||||
gd->secure_ram = gd->ram_size;
|
||||
gd->arch.secure_ram = gd->ram_size;
|
||||
#endif
|
||||
/*
|
||||
* Subtract specified amount of memory to hide so that it won't
|
||||
|
@ -55,20 +55,6 @@ typedef struct global_data {
|
||||
|
||||
unsigned long relocaddr; /* Start address of U-Boot in RAM */
|
||||
phys_size_t ram_size; /* RAM size */
|
||||
#ifdef CONFIG_SYS_MEM_RESERVE_SECURE
|
||||
#define MEM_RESERVE_SECURE_SECURED 0x1
|
||||
#define MEM_RESERVE_SECURE_MAINTAINED 0x2
|
||||
#define MEM_RESERVE_SECURE_ADDR_MASK (~0x3)
|
||||
/*
|
||||
* Secure memory addr
|
||||
* This variable needs maintenance if the RAM base is not zero,
|
||||
* or if RAM splits into non-consecutive banks. It also has a
|
||||
* flag indicating the secure memory is marked as secure by MMU.
|
||||
* Flags used: 0x1 secured
|
||||
* 0x2 maintained
|
||||
*/
|
||||
phys_addr_t secure_ram;
|
||||
#endif
|
||||
unsigned long mon_len; /* monitor len */
|
||||
unsigned long irq_sp; /* irq stack pointer */
|
||||
unsigned long start_addr_sp; /* start_addr_stackpointer */
|
||||
|
Loading…
Reference in New Issue
Block a user