Dear lists, First of all, let me say thanks to Stefan for his patch and help on porting. Without his patch, I couldn't figure out what shall I do and what to do with CBFS on ARM. Following is the first thought on how to implement it, justing using qemu-arm (versatilepb) as an example. After power on, At 0x0, start execution at reset from src/cpu/arm/arm926ejs/start.S. It will simply jump to the actual start code. Following, it will set CPU to SVC32 mode and do some basic setup then go toboard-specific lowlevel_init function to init the ram. After that, ram is ready to use. Because it is easier initing ram than X86, no romstage needed. After set the sp pointer, we move to CBFS and find the ramstage then move it to ram and run it. We do some init in ramstage and then move to payload.
src/mainboard/emulation/qemu-arm will be the dir for this board. In this dir, Kconfig will set some configs for this board, including CPU and its variant type, rambase address of this board and so on. lowlevel.S will be the place where ram and console init code placed. src/arch/arm will be the key dir that holds arm-specific lib, headers and Makefile just like X86's. src/cpu/arm/arm926ejs is for all cpu that uses arm926ejs core. CPU variant will be a subdir under this dir and holding CPU variant-specific lib and headers.
Thanks, Hamo
On Sat, Jun 11, 2011 at 7:27 AM, Hamo hamo.by@gmail.com wrote:
Dear lists, First of all, let me say thanks to Stefan for his patch and help on porting. Without his patch, I couldn't figure out what shall I do and what to do with CBFS on ARM. Following is the first thought on how to implement it, justing using qemu-arm (versatilepb) as an example. After power on, At 0x0, start execution at reset from src/cpu/arm/arm926ejs/start.S. It will simply jump to the actual start code. Following, it will set CPU to SVC32 mode and do some basic setup then go toboard-specific lowlevel_init function to init the ram. After that, ram is ready to use. Because it is easier initing ram than X86, no romstage needed. After set the sp pointer, we move to CBFS and find the ramstage then move it to ram and run it. We do some init in ramstage and then move to payload.
src/mainboard/emulation/qemu-arm will be the dir for this board. In this dir, Kconfig will set some configs for this board, including CPU and its variant type, rambase address of this board and so on. lowlevel.S will be the place where ram and console init code placed. src/arch/arm will be the key dir that holds arm-specific lib, headers and Makefile just like X86's. src/cpu/arm/arm926ejs is for all cpu that uses arm926ejs core. CPU variant will be a subdir under this dir and holding CPU variant-specific lib and headers.
Thanks, Hamo
Hi Hamo,
This seems like a reasonable layout. Do you have any specific concerns about the implementation?
Marc