Hello Hoa,


On 27 July 2018 at 04:12, Hoa Nguyen Duc <satou.kazuyoshi.2212@gmail.com> wrote:
Dear All,

My name is Nguyen Duc Hoa, come from Vietnam. 

I am working on Zynq Zybo-Z7  for porting optee to secure world. 
I just had a trouble when Op-TEE OS is loading the kernel image(zImage). 

Below image is my flow.


I refered from below topic and build up my system.


"U-Boot will load TEE and zImage, so need to verify the two images in
U-Boot. `kernel_entry` will run into the address passed to bootm. When
optee returns back, it will directly runs into the load address of zImage
and continue booting kernel. "

But on my side, in stage of booting kernel, I got an "kernel panic". (full log is attached)



It looks like your kernel is trying to access a memory-mapped register that is not accessible (zynq_early_slcr_init()). Perhaps it is configured for secure-world access only by OP-TEE or a previous stage bootloader? I don't know this platform enough to be able to say who should configure this register when a secure OS is present (bootloader, OP-TEE or the kernel). But it may very well be that secure world takes care of it, and the kernel should not touch it in this case. If this is true, you may need to modify the DT so that the kernel won't access the device (remove some node I suppose).

PS: Please avoid sending screen captures, images or binary files in general. Text is usually more convenient in e-mail list discussions.

-- 
Jerome

 

Following is how I did it:

1. Build OP-TEE with:

make PLATFORM=zynq7k CROSS_COMPILE="ccache arm-linux-gnueabihf-" ARCH=arm   CFG_TEE_CORE_LOG_LEVEL=4 CFG_DT_ADDR=0x02A00000 CFG_DT=y CFG_TEE_TA_MALLOC_DEBUG=y CFG_TEE_CORE_MALLOC_DEBUG=y CFG_TEE_CORE_USER_MEM_DEBUG=4 CFG_TEE_TA_LOG_LEVEL=4 CFG_NS_ENTRY_ADDR=0x03000000

arm-linux-gnueabihf-objcopy -O binary tee.elf tee.bin

2. Use mkimage to produce the uTee image. Make it looks like uImage so the bootm command can boot it.

./mkimage -A arm -O linux -C none -a 0x3E000000 -e 0x3E000000  -d tee.bin uTee

3. Make the linux kernel use xilinx_zynq_defconfig

Enable OpTee and EARLYCON

# OPTEE stuff
CONFIG_TEE=y
CONFIG_OPTEE=y
CONFIG_ARM_PSCI_FW=y
CONFIG_HAVE_ARM_SMCCC=y
CONFIG_SERIAL_EARLYCON=y

+ DTS file is attached

+ Make kernel by below command
make ARCH=arm xilinx_zynq_defconfig
CROSS_COMPILE=arm-linux-gnueabihf- make ARCH=arm


4.   In u-boot kernel, load everything in place and use bootm to enter OP-TEE

mmcinfo ; fatload mmc 0 0x03000000 zImage ; fatload mmc 0 0x02A00000 zImage-zynq-zybo-z7.dtb ; fatload mmc 0:1 0x3E000000  uTee;  setenv bootargs earlyprintk console=ttyPS0,115200 root=/dev/mmcblk0p2 rw rootwait ; bootm 0x3E000000 - 0x02A00000 ; 


*** QUESTIONS ***
1. Is this flow correct?

2. I refer to this thread mail

and I saw that in my side, after back to non secure world, it seem to be u-boot's environment variables was changed.

For purpose of booting kernel, I must keep the u-boot's context and OpTEE OS switch to non-secure world this context will be restore, do I?


So anyone have better understanding about this flow, it will be helpful for my further development. 

Thank you very much in advance.



_______________________________________________
Tee-dev mailing list
Tee-dev@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/tee-dev