
On Tuesday 11 August 2020 10:58:47 Tom Rini wrote:
On Tue, Aug 11, 2020 at 03:22:48PM +0200, Pali Rohár wrote:
On Tuesday 11 August 2020 09:08:33 Tom Rini wrote:
On Tue, Aug 11, 2020 at 02:39:53PM +0200, Stefan Roese wrote:
Hi Pali,
On 11.08.20 10:00, Pali Rohár wrote:
Hello!
On Tuesday 11 August 2020 08:37:46 Stefan Roese wrote:
Hi Tom, Hi Pali,
(added Pali because of the Nokia RX51 issue)
Could you please send me a link to "problematic" patch? As you have not inlined it in this email.
https://gitlab.denx.de/u-boot/custodians/u-boot-marvell/-/commit/7196447f2e7...
Its a rebase of the original patch.
On 07.08.20 21:21, Tom Rini wrote: > On Thu, Jul 30, 2020 at 12:51:10PM +0200, Stefan Roese wrote: > > > Since commit 86cf1c82850f ("configs: Migrate CONFIG_NR_DRAM_BANKS") & > > commit 999a772d9f24 ("Kconfig: Migrate CONFIG_NR_DRAM_BANKS"), > > CONFIG_NR_DRAM_BANKS is always defined with a value (4 is default). > > It makes no sense to still carry code that is guarded with > > "#ifndef CONFIG_NR_DRAM_BANKS" (and similar). This patch removes > > all these unreferenced code paths. > > > > Also complete remove bi_memstart & bi_memsize from the board-info > > struct. As now bi_dram[] is always enabled and should be used instead. > > This removes the redundant varriables. > > > > Signed-off-by: Stefan Roese sr@denx.de > > Cc: Daniel Schwierzeck daniel.schwierzeck@gmail.com > > Cc: Tom Rini trini@konsulko.com > > Cc: Ramon Fried ramon.fried@gmail.com > > Cc: Simon Glass sjg@chromium.org > > Cc: Michal Simek michal.simek@xilinx.com > > Reviewed-by: Daniel Schwierzeck daniel.schwierzeck@gmail.com > > I don't see quite how, but this is breaking running > test/nokia_rx51_test.sh (or, my fixup of this to apply to current master > was wrong, and is what's breaking the test). Please rebase and confirm > that test passes as well, thanks!
I've checked the issue with nokia_rx51_test.sh and could not find any issues in the patch. My assumption now is, that the very old Linux kernel (2.6.28) that is used in this Nokia test, still uses the bd_info struct in Linux to pass the memory information (via bd_memstart & bi_memsize), as was also done in the very old PowerPC days. With this patch now and the removal of these fields from bd_info, this might explain why this kernel does not boot any more (no output on the serial console at all).
Pali, could you please check if my assumption is correct here? And if yes, could please switch the test to using a newer kernel version? Or remove the Linux kernel booting from the test?
Yes, Nokia N900 uses "old" ATAGs. But we cannot remove it. New kernel version does not contain Maemo patches which are required for Maemo system which is still widely used. And yes, people are using it with U-Boot.
Second reason why we cannot remove support for ATAGs is that Nokia's signed first stage bootloader pass other setup data via ATAGs for kernel and U-Boot N900 board code parses it, reuse it and pass to kernel.
And replacing first stage bootloader is not possible because it is signed and signing keys are secret (now probably lost).
Okay. But this patch is not removing ATAG support, but removes 2 member from the bd_info struct (bi_memstart & bi_memsize), which are replaced (superseeded) by the bi_dram[].start/.size values. And AFAICT, the generation of the memory ATAG is already done based on these values:
setup_memory_tags() in arch/arm/lib/bootm.c
So I still fail to understand, why booting of this old kernel using ATAGs does not work with this patch applied. Perhaps you could give it a quick test? That would be really helpful. Here again the gitlab branch that you can use for some tests:
https://gitlab.denx.de/u-boot/custodians/u-boot-marvell/-/commits/remove-con...
I can do some tests on real N900 device at the end of week. But I doubt that I could debug something on device if kernel does not print any message.
Running u-boot and kernel in N900 emulator with debug serial console is easier and you can do it too locally. If you look at that test script test/nokia_rx51_test.sh you could see that it downloads & compile qemu and prepare OneNAND MTD image with compiled u-boot + kernel binary.
You can also run that test script locally, it does not require root and all data it stores into temporary "nokia_rx51_tmp" directory. This could help you to test your changes without need to push them to travis/gitlab ci testing.
So, I also thought maybe changing bd_t was it, and reverted just that part locally, and it was still breaking. It's also only breaking in one of the three boot tests, if I follow things correctly.
What about trying to *not* remove first two members of struct bd_info? Maybe it is part of ABI structure? https://gitlab.denx.de/u-boot/custodians/u-boot-marvell/-/commit/7196447f2e7...
Not changing the structure is what I tried and it still failed, unless I made a thinko when I was checking it out. Can you please look in to this a bit?
Yes, I looked at that patch and seems it is really breaking something related to dram banks.
I applied following debug patch
diff --git a/common/board_f.c b/common/board_f.c index 51e9544b8e..ae6d37b574 100644 --- a/common/board_f.c +++ b/common/board_f.c @@ -9,6 +9,8 @@ * Marius Groeger mgroeger@sysgo.de */
+#define DEBUG + #include <common.h> #include <bloblist.h> #include <bootstage.h> @@ -603,9 +606,17 @@ int setup_bdinfo(void) { struct bd_info *bd = gd->bd;
+ debug("Calling setup_bdinfo\n"); + + debug("CONFIG_NR_DRAM_BANKS is %u\n", CONFIG_NR_DRAM_BANKS); + + debug("Previous bd->bi_dram[0].start=%u bd->bi_dram[0].size=%u\n", bd->bi_dram[0].start, bd->bi_dram[0].size); + bd->bi_dram[0].start = gd->ram_base; /* start of memory */ bd->bi_dram[0].size = gd->ram_size; /* size in bytes */
+ debug("New bd->bi_dram[0].start=%u bd->bi_dram[0].size=%u\n", bd->bi_dram[0].start, bd->bi_dram[0].size); + if (IS_ENABLED(CONFIG_SYS_HAS_SRAM)) { bd->bi_sramstart = CONFIG_SYS_SRAM_BASE; /* start of SRAM */ bd->bi_sramsize = CONFIG_SYS_SRAM_SIZE; /* size of SRAM */
and run u-boot in qemu n900 emulator. It printed following:
Calling setup_bdinfo CONFIG_NR_DRAM_BANKS is 2 Previous bd->bi_dram[0].start=2147483648 bd->bi_dram[0].size=134217728 New bd->bi_dram[0].start=2147483648 bd->bi_dram[0].size=268435456
So it looks like that Stefan's patch is overwriting bi_dram with incorrect value. It sets only bi_diram[0] (first member) even there are two banks.
I applied following patch on top of Stefan's
diff --git a/common/board_f.c b/common/board_f.c index 51e9544b8e..d6bf23e397 100644 --- a/common/board_f.c +++ b/common/board_f.c @@ -603,8 +606,10 @@ int setup_bdinfo(void) { struct bd_info *bd = gd->bd;
+#if 0 bd->bi_dram[0].start = gd->ram_base; /* start of memory */ bd->bi_dram[0].size = gd->ram_size; /* size in bytes */ +#endif
if (IS_ENABLED(CONFIG_SYS_HAS_SRAM)) { bd->bi_sramstart = CONFIG_SYS_SRAM_BASE; /* start of SRAM */
and then booting Maemo kernel started working.
So this just prove that above overwriting of bd->di_dram is incorrect or incomplete.
For me the most suspicious is why Stefan's patch is overwriting only bd->bi_dram[0] even when CONFIG_NR_DRAM_BANKS is set to 2.
It looks like that for OMAP3 is bi_dram structure filled by function dram_init_banksize() from file arch/arm/mach-omap2/omap3/sdrc.c
I hope that these information helps you to debug and fix Stefan patch. Now thanks to nokia_rx51_test.sh it is easy to test and debug all changes for N900 in simulator. Moreover it is possible to use gdb to connect to qemu which in which is running u-boot. So these kind of problems should be possible to debug without real N900 hw, just in qemu and gdb.