Hi Kever,
On 2020-04-17 08:48, Kever Yang wrote:
Hi Justin,
On 2020/4/1 上午1:25, Justin Swartz wrote:
If OP-TEE is configured, it makes sense to use
CONFIG_OPTEE_TZDRAM_BASE
and CONFIG_OPTEE_TZDRAM_SIZE to declare the boundaries of the
TrustZone
memory reserved for OP-TEE instead of assuming that a 32MB reservation
is
always in place.
In this case, the following calculations may be used to determine the
boundaries of DRAM bank 0 and 1 which surround the TrustZone
reservation:
[DRAM bank 0]
base = CONFIG_SYS_DRAM_BASE
size = CONFIG_OPTEE_TZDRAM_BASE - CONFIG_SYS_SDRAM_BASE
[DRAM bank 1]
base = CONFIG_OPTEE_TZDRAM_BASE + CONFIG_OPTEE_TZDRAM_SIZE
size = top of memory - base of DRAM bank 1
We do not use CONFIG_OPTEE_TZDRAM_BASE and code in lib/optee/ for
rockchip platform now,
and this patch update to use this macro without adapt other code will
break the boards already
run with it.
Considering that this block of code is guarded by "#ifdef
CONFIG_SPL_OPTEE",
why wouldn't it make sense to use the pair of CONFIG_OPTEE_TZDRAM_BASE
and
CONFIG_OPTEE_TZDRAM_SIZE pair to define the boundaries of the TrustZone
reservation?
Surely not every configuration requires a 32MB reservation at a fixed
offset?
I am curious to know which boards will break with these changes applied
considering that the current calculation of the DRAM bank 1 size appears
to be incorrect.
From an RK3229 based device, with 1024MB of RAM, here is an excerpt from
the output of the bdinfo command prior to applying the patch:
=> bdinfo
arch_number = 0x00000000
boot_params = 0x00000000
DRAM bank = 0x00000000
-> start = 0x60000000
-> size = 0x08400000
DRAM bank = 0x00000001
-> start = 0x6a400000
-> size = 0x95c00000
baudrate = 1500000 bps
TLB addr = 0x9fff0000
relocaddr = 0x9ff7c000
reloc off = 0x3ef7c000
irq_sp = 0x9df6d040
sp start = 0x9df6d030
Early malloc usage: 6c4 / 800
fdt_blob = 0x9df6d058
And after applying the patch:
=> bdinfo
arch_number = 0x00000000
boot_params = 0x00000000
DRAM bank = 0x00000000
-> start = 0x60000000
-> size = 0x08400000
DRAM bank = 0x00000001
-> start = 0x68600000
-> size = 0x37a00000
baudrate = 1500000 bps
TLB addr = 0x9fff0000
relocaddr = 0x9ff81000
reloc off = 0x3ef81000
irq_sp = 0x9df71580
sp start = 0x9df71570
Early malloc usage: 6ac / 800
fdt_blob = 0x9df71598
Notice the difference in reported DRAM bank 1 sizes, and the lower DRAM
bank
1 starting offset after patching.
As much as I might wish that this device has 0x95c00000 bytes (+-2396MB)
to spare beyond OP-TEE, it really doesn't. :)
Kind Regards,
Justin
Thanks,
- Kever
Signed-off-by: Justin Swartz <justin.swa...@risingedge.co.za>
---
arch/arm/mach-rockchip/sdram.c | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/arch/arm/mach-rockchip/sdram.c
b/arch/arm/mach-rockchip/sdram.c
index 530644c043..def2c23294 100644
--- a/arch/arm/mach-rockchip/sdram.c
+++ b/arch/arm/mach-rockchip/sdram.c
@@ -55,16 +55,14 @@ int dram_init_banksize(void)
- CONFIG_SYS_SDRAM_BASE;
gd->bd->bi_dram[1].start = tos_parameter->tee_mem.phy_addr +
tos_parameter->tee_mem.size;
- gd->bd->bi_dram[1].size = gd->bd->bi_dram[0].start
- + top - gd->bd->bi_dram[1].start;
+ gd->bd->bi_dram[1].size = top - gd->bd->bi_dram[1].start;
} else {
gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
- gd->bd->bi_dram[0].size = 0x8400000;
- /* Reserve 32M for OPTEE with TA */
- gd->bd->bi_dram[1].start = CONFIG_SYS_SDRAM_BASE
- + gd->bd->bi_dram[0].size + 0x2000000;
- gd->bd->bi_dram[1].size = gd->bd->bi_dram[0].start
- + top - gd->bd->bi_dram[1].start;
+ gd->bd->bi_dram[0].size = CONFIG_OPTEE_TZDRAM_BASE
+ - CONFIG_SYS_SDRAM_BASE;
+ gd->bd->bi_dram[1].start = CONFIG_OPTEE_TZDRAM_BASE
+ + CONFIG_OPTEE_TZDRAM_SIZE;
+ gd->bd->bi_dram[1].size = top - gd->bd->bi_dram[1].start;
}
#else
gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;