* Porting Cora Z7 Board to barebox @ 2025-04-28 17:20 johannes 2025-04-29 8:34 ` Sascha Hauer 0 siblings, 1 reply; 5+ messages in thread From: johannes @ 2025-04-28 17:20 UTC (permalink / raw) To: barebox I have a Cora Z7 board which I want to port to barebox. The Cora Z7 embeds an Zynq 7000 SoC with a single core Cortex-A9 and 512 MB DDR3 memory. Barebox already supports the Zynq 7000 and the Avnet Zedboard. I have some questions and maybe you can point me in the right direction: When I am compiling barebox with the zynq_defconfig, as an output I get the file barebox-avnet-zedboard.img. This file contains the PBL, barebox proper and the device tree, right? The Cora Z7 uses a different memory configuration compared to the Zedboard. My first idea was to use Xilinx FSBL and let the FSBL start barebox. The FSBL can start an ELF file. But if I use just the compiled barebox file, the device tree is missing, right? Is there a way to hard code the UART to use for the barebox console for barebox proper? The Zynq on the Cora Z7 only embeds a single core Cortex A9 while the SoC on the Zedboard embeds a dual core Cortex A9. Does this affect the cores initialization in arch/arm/mach_zynq? I am looking forward to your replies. Thank you and best regards, Johannes Roith ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Porting Cora Z7 Board to barebox 2025-04-28 17:20 Porting Cora Z7 Board to barebox johannes @ 2025-04-29 8:34 ` Sascha Hauer 2025-04-29 9:49 ` Ahmad Fatoum 0 siblings, 1 reply; 5+ messages in thread From: Sascha Hauer @ 2025-04-29 8:34 UTC (permalink / raw) To: johannes; +Cc: barebox Hi Johannes, On Mon, Apr 28, 2025 at 07:20:01PM +0200, johannes@gnu-linux.rocks wrote: > I have a Cora Z7 board which I want to port to barebox. The Cora Z7 embeds an > Zynq 7000 SoC with a single core Cortex-A9 and 512 MB DDR3 memory. Barebox > already supports the Zynq 7000 and the Avnet Zedboard. > > I have some questions and maybe you can point me in the right direction: > > When I am compiling barebox with the zynq_defconfig, as an output I get the file > barebox-avnet-zedboard.img. This file contains the PBL, barebox proper and the > device tree, right? Right. > > The Cora Z7 uses a different memory configuration compared to the Zedboard. My > first idea was to use Xilinx FSBL and let the FSBL start barebox. The FSBL can > start an ELF file. But if I use just the compiled barebox file, the device tree > is missing, right? In case of the Zedboard you could take start_avnet_zedboard.pbl. This contains all necessary components including device tree and barebox proper. However, this binary is linked to 0x0 and the FSBL will likely load it there. I don't know where the FSBL itself is located. > Is there a way to hard code the UART to use for the barebox > console for barebox proper? Why do you want to hardcode it? Setting the console via device tree is just fine. For debugging your early code I recommend CONFIG_DEBUG_LL. For zynq the UART is hardcoded to ZYNQ_UART1_BASE_ADDR in include/mach/zynq/debug_ll.h. You can change it in this file. With CONFIG_DEBUG_LL enabled you can put putc_ll() in your code. > > The Zynq on the Cora Z7 only embeds a single core Cortex A9 while the SoC on the > Zedboard embeds a dual core Cortex A9. Does this affect the cores initialization > in arch/arm/mach_zynq? I don't think so. I haven't used Zynq myself though. Regards, Sascha -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Porting Cora Z7 Board to barebox 2025-04-29 8:34 ` Sascha Hauer @ 2025-04-29 9:49 ` Ahmad Fatoum 2025-05-01 12:16 ` Johannes Roith 0 siblings, 1 reply; 5+ messages in thread From: Ahmad Fatoum @ 2025-04-29 9:49 UTC (permalink / raw) To: Sascha Hauer, johannes; +Cc: barebox Hi, On 4/29/25 10:34, Sascha Hauer wrote: > In case of the Zedboard you could take start_avnet_zedboard.pbl. This > contains all necessary components including device tree and barebox > proper. > > However, this binary is linked to 0x0 and the FSBL will likely load it > there. I don't know where the FSBL itself is located. The pbl files tend to be a bit bigger, because they are meant only as input to objcopy. You can add to images/Makefile.zynq, e.g. image-$(CONFIG_MACH_ZEDBOARD) += start_avnet_zedboard.elf And it will generate a much more compact ELF file that should be interchangeable (I had tested this on ZynqMP). >> Is there a way to hard code the UART to use for the barebox >> console for barebox proper? > > Why do you want to hardcode it? Setting the console via device tree is > just fine. > > For debugging your early code I recommend CONFIG_DEBUG_LL. For zynq the > UART is hardcoded to ZYNQ_UART1_BASE_ADDR in include/mach/zynq/debug_ll.h. > You can change it in this file. > > With CONFIG_DEBUG_LL enabled you can put putc_ll() in your code. CONFIG_DEBUG_PBL is also often useful. >> The Zynq on the Cora Z7 only embeds a single core Cortex A9 while the SoC on the >> Zedboard embeds a dual core Cortex A9. Does this affect the cores initialization >> in arch/arm/mach_zynq? > > I don't think so. I haven't used Zynq myself though. Cheers, Ahmad > > Regards, > Sascha > -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Porting Cora Z7 Board to barebox 2025-04-29 9:49 ` Ahmad Fatoum @ 2025-05-01 12:16 ` Johannes Roith 2025-05-01 13:56 ` Johannes Roith 0 siblings, 1 reply; 5+ messages in thread From: Johannes Roith @ 2025-05-01 12:16 UTC (permalink / raw) To: Ahmad Fatoum; +Cc: barebox Hi, thanks for the fast replies. Am Tue, Apr 29, 2025 at 11:49:40AM +0200 schrieb Ahmad Fatoum: > Hi, > > On 4/29/25 10:34, Sascha Hauer wrote: > > In case of the Zedboard you could take start_avnet_zedboard.pbl. This > > contains all necessary components including device tree and barebox > > proper. > > > > However, this binary is linked to 0x0 and the FSBL will likely load it > > there. I don't know where the FSBL itself is located. Can I change the address to which barebox is linked to? E.g. in Vitis the application is linked to 0x10000 and the FSBL starting this application to 0x0. > > The pbl files tend to be a bit bigger, because they are meant only > as input to objcopy. You can add to images/Makefile.zynq, e.g. > > image-$(CONFIG_MACH_ZEDBOARD) += start_avnet_zedboard.elf > > And it will generate a much more compact ELF file that should > be interchangeable (I had tested this on ZynqMP). > > >> Is there a way to hard code the UART to use for the barebox > >> console for barebox proper? > > > > Why do you want to hardcode it? Setting the console via device tree is > > just fine. > > > > For debugging your early code I recommend CONFIG_DEBUG_LL. For zynq the > > UART is hardcoded to ZYNQ_UART1_BASE_ADDR in include/mach/zynq/debug_ll.h. > > You can change it in this file. > > > > With CONFIG_DEBUG_LL enabled you can put putc_ll() in your code. > > CONFIG_DEBUG_PBL is also often useful. > > >> The Zynq on the Cora Z7 only embeds a single core Cortex A9 while the SoC on the > >> Zedboard embeds a dual core Cortex A9. Does this affect the cores initialization > >> in arch/arm/mach_zynq? > > > > I don't think so. I haven't used Zynq myself though. > > Cheers, > Ahmad > > > > > Regards, > > Sascha > > > > -- > Pengutronix e.K. | | > Steuerwalder Str. 21 | http://www.pengutronix.de/ | > 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | > Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | > The good news is, I can boot barebox (PBL and proper) now and sometimes also can Linux. Here is the output of my barebox: Digilent Cora Z7 PBL uncompress.c: memory at 0x00000000, size 0x20000000 mmu: enabling MMU, ttb @ 0x1ffd0000 endmem = 0x20000000 arm_mem_scratch = 0x1fff8000+0x00008000 arm_mem_stack = 0x1ffe9000+0x0000f000 arm_mem_ttb = 0x1ffd0000+0x00010000 arm_mem_barebox_image = 0x1fe00000+0x00200000 arm_mem_early_malloc = 0x1fde0000+0x00020000 membase = 0x00000000+0x20000000 uncompress.c: uncompressing barebox binary at 0x00006270 (size 0x00029c0c) to 0x1fe00000 (uncompressed size: 0x0006c0e8) uncompress.c: jumping to uncompressed image at 0x1fe00000 barebox 2025.04.0-00215-gdacb19ae3252-dirty #11 Wed Apr 30 22:22:15 CEST 2025 Board: Digilent Cora Z7 ERROR: could not get clock /axi/dma-controller@f8003000:apb_pclk(0) ERROR: could not get clock /axi/etb@f8801000:apb_pclk(0) ERROR: could not get clock /axi/tpiu@f8803000:apb_pclk(0) ERROR: could not get clock /axi/funnel@f8804000:apb_pclk(0) ERROR: could not get clock /axi/ptm@f889c000:apb_pclk(0) ERROR: could not get clock /axi/ptm@f889d000:apb_pclk(0) mdio_bus: miibus0: probed macb e000b000.ethernet@e000b000.of: Cadence GEM at 0xe000b000 arasan-sdhci e0100000.mmc@e0100000.of: registered as mmc0 malloc space: 0x17e00000 -> 0x1fdfffff (size 128 MiB) arasan-sdhci e0100000.mmc@e0100000.of: error while transferring data for command 6 arasan-sdhci e0100000.mmc@e0100000.of: state = 0x01f70202 , interrupt = 0x00208000 mmc0: Card's startup fails with -74 barebox-environment chosen:environment-sd.of: probe failed: No such file or directory environment load /dev/env0: No such file or directory Maybe you have to create the partition. Do you know what to do about the "could not get clock errors"? Do I have to take care about them or just ignore them? The more critical error comes from the SD card. Every second boot I am getting the errors shown above, sometimes the card is started correctly. Also when barebox can startup the mmc0, when starting the Linux Kernel sometimes the rootfs on /dev/mmcblk0p2 is not found and the SD Card is not detected. So, there seems to be something wrong with the SD Card interface... In lowlevel.c I am setting the clock divider for the sdio0 interface to 10 and the Source for generated clock is IO PLL. Therefore, the sdio IP should get a 100 MHz input clock. IS this correct? Do you know which clockrate the driver expects? Or do you have any other idea what could case the error? In case I can fix the remaining errors I would like to bring the changes upstream and send a patch. Here I also have some questions: I added the following files and folder: arch/arm/boards/digilent-cora/ arch/arm/dts/zynq-cora.dts dts/src/arm/xilinx/zynq-cora.dts arch/arm/boards/digilent-cora/ is a copy of arch/arm/boards/avnet-zed/ with my changes applied. In the Copyright, should I keep the existing name and just add mine as a second author? If I understand it correctly, the files in dts/src are imported from the Linux kernel git repo, right? In this case I should try to bring my modified device tree mainline to Linux first and then commit my changes to barebox? Or is there another file location I can drop my device tree temporarily until it is available in Linux? And a last question: How can I change the default boot method in barebox from net to mmc0? Thanks and best regards, Johannes ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Porting Cora Z7 Board to barebox 2025-05-01 12:16 ` Johannes Roith @ 2025-05-01 13:56 ` Johannes Roith 0 siblings, 0 replies; 5+ messages in thread From: Johannes Roith @ 2025-05-01 13:56 UTC (permalink / raw) To: Ahmad Fatoum; +Cc: barebox Am Thu, May 01, 2025 at 02:16:44PM +0200 schrieb Johannes Roith: > Hi, > > thanks for the fast replies. > > Am Tue, Apr 29, 2025 at 11:49:40AM +0200 schrieb Ahmad Fatoum: > > Hi, > > > > On 4/29/25 10:34, Sascha Hauer wrote: > > > In case of the Zedboard you could take start_avnet_zedboard.pbl. This > > > contains all necessary components including device tree and barebox > > > proper. > > > > > > However, this binary is linked to 0x0 and the FSBL will likely load it > > > there. I don't know where the FSBL itself is located. > > Can I change the address to which barebox is linked to? E.g. in Vitis > the application is linked to 0x10000 and the FSBL starting this > application to 0x0. > > > > > The pbl files tend to be a bit bigger, because they are meant only > > as input to objcopy. You can add to images/Makefile.zynq, e.g. > > > > image-$(CONFIG_MACH_ZEDBOARD) += start_avnet_zedboard.elf > > > > And it will generate a much more compact ELF file that should > > be interchangeable (I had tested this on ZynqMP). > > > > >> Is there a way to hard code the UART to use for the barebox > > >> console for barebox proper? > > > > > > Why do you want to hardcode it? Setting the console via device tree is > > > just fine. > > > > > > For debugging your early code I recommend CONFIG_DEBUG_LL. For zynq the > > > UART is hardcoded to ZYNQ_UART1_BASE_ADDR in include/mach/zynq/debug_ll.h. > > > You can change it in this file. > > > > > > With CONFIG_DEBUG_LL enabled you can put putc_ll() in your code. > > > > CONFIG_DEBUG_PBL is also often useful. > > > > >> The Zynq on the Cora Z7 only embeds a single core Cortex A9 while the SoC on the > > >> Zedboard embeds a dual core Cortex A9. Does this affect the cores initialization > > >> in arch/arm/mach_zynq? > > > > > > I don't think so. I haven't used Zynq myself though. > > > > Cheers, > > Ahmad > > > > > > > > Regards, > > > Sascha > > > > > > > -- > > Pengutronix e.K. | | > > Steuerwalder Str. 21 | http://www.pengutronix.de/ | > > 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | > > Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | > > > > The good news is, I can boot barebox (PBL and proper) now and sometimes > also can Linux. Here is the output of my barebox: > > Digilent Cora Z7 PBL > uncompress.c: memory at 0x00000000, size 0x20000000 > mmu: enabling MMU, ttb @ 0x1ffd0000 > endmem = 0x20000000 > arm_mem_scratch = 0x1fff8000+0x00008000 > arm_mem_stack = 0x1ffe9000+0x0000f000 > arm_mem_ttb = 0x1ffd0000+0x00010000 > arm_mem_barebox_image = 0x1fe00000+0x00200000 > arm_mem_early_malloc = 0x1fde0000+0x00020000 > membase = 0x00000000+0x20000000 > uncompress.c: uncompressing barebox binary at 0x00006270 (size 0x00029c0c) to 0x1fe00000 (uncompressed size: 0x0006c0e8) > uncompress.c: jumping to uncompressed image at 0x1fe00000 > > > barebox 2025.04.0-00215-gdacb19ae3252-dirty #11 Wed Apr 30 22:22:15 CEST 2025 > > > Board: Digilent Cora Z7 > ERROR: could not get clock /axi/dma-controller@f8003000:apb_pclk(0) > ERROR: could not get clock /axi/etb@f8801000:apb_pclk(0) > ERROR: could not get clock /axi/tpiu@f8803000:apb_pclk(0) > ERROR: could not get clock /axi/funnel@f8804000:apb_pclk(0) > ERROR: could not get clock /axi/ptm@f889c000:apb_pclk(0) > ERROR: could not get clock /axi/ptm@f889d000:apb_pclk(0) > mdio_bus: miibus0: probed > macb e000b000.ethernet@e000b000.of: Cadence GEM at 0xe000b000 > arasan-sdhci e0100000.mmc@e0100000.of: registered as mmc0 > malloc space: 0x17e00000 -> 0x1fdfffff (size 128 MiB) > arasan-sdhci e0100000.mmc@e0100000.of: error while transferring data for command 6 > arasan-sdhci e0100000.mmc@e0100000.of: state = 0x01f70202 , interrupt = 0x00208000 > mmc0: Card's startup fails with -74 > barebox-environment chosen:environment-sd.of: probe failed: No such file or directory > environment load /dev/env0: No such file or directory > Maybe you have to create the partition. > > > Do you know what to do about the "could not get clock errors"? Do I have > to take care about them or just ignore them? > > The more critical error comes from the SD card. Every second boot I am > getting the errors shown above, sometimes the card is started correctly. > > Also when barebox can startup the mmc0, when starting the Linux Kernel > sometimes the rootfs on /dev/mmcblk0p2 is not found and the SD Card is > not detected. So, there seems to be something wrong with the SD Card > interface... Maybe because I missed the rootwait argument for the Linux Kernel Commandline... > > In lowlevel.c I am setting the clock divider for the sdio0 interface to 10 > and the Source for generated clock is IO PLL. Therefore, the sdio IP > should get a 100 MHz input clock. IS this correct? Do you know which > clockrate the driver expects? > > Or do you have any other idea what could case the error? Ok, I found out that maybe 100 MHz is a little bit to slow for this SD Card IP. When setting the clock to 200 MHz or 250 MHz, the mmc0 gets detected all the time by barebox. > > In case I can fix the remaining errors I would like to bring the changes > upstream and send a patch. Here I also have some questions: > > I added the following files and folder: > > arch/arm/boards/digilent-cora/ > arch/arm/dts/zynq-cora.dts > dts/src/arm/xilinx/zynq-cora.dts > > arch/arm/boards/digilent-cora/ is a copy of arch/arm/boards/avnet-zed/ > with my changes applied. In the Copyright, should I keep the existing > name and just add mine as a second author? > > If I understand it correctly, the files in dts/src are imported from the > Linux kernel git repo, right? In this case I should try to bring my > modified device tree mainline to Linux first and then commit my changes > to barebox? Or is there another file location I can drop my device tree > temporarily until it is available in Linux? > > And a last question: How can I change the default boot method in barebox > from net to mmc0? > > Thanks and best regards, > Johannes > ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-05-01 13:57 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2025-04-28 17:20 Porting Cora Z7 Board to barebox johannes 2025-04-29 8:34 ` Sascha Hauer 2025-04-29 9:49 ` Ahmad Fatoum 2025-05-01 12:16 ` Johannes Roith 2025-05-01 13:56 ` Johannes Roith
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox