[Letux-kernel] LX20 prototype is booting

H. Nikolaus Schaller hns at goldelico.com
Tue Apr 29 14:52:03 CEST 2025


Hi Andreas,

> Am 29.04.2025 um 10:04 schrieb H. Nikolaus Schaller <hns at goldelico.com>:
> 
> 
> 
>> Am 29.04.2025 um 09:52 schrieb Andreas Kemnade <andreas at kemnade.info>:
>> 
>> Am Tue, 29 Apr 2025 08:48:47 +0200
>> schrieb "H. Nikolaus Schaller" <hns at goldelico.com>:
>> 
>>>> Am 29.04.2025 um 07:48 schrieb H. Nikolaus Schaller <hns at goldelico.com>:
>>>> 
>>>> 
>>>> 
>>>>> Am 28.04.2025 um 22:18 schrieb H. Nikolaus Schaller <hns at goldelico.com>:
>>>>> 
>>>>> So there is something wrong with passing or processing the command line...
>>>>> Maybe kernel gets stuck in some loop.
>>>>> Shouldn't be very difficult to analyse.  
>>>> 
>>>> Ok, it turns out to be stuck in this panic (which can not be printed before standard printk is set up):
>>>> 
>>>> https://elixir.bootlin.com/linux/v6.1.28/source/drivers/of/fdt.c#L1265
>>>> 
>>>> So I have to analyse why memblock_alloc() fails. AFAIR we had a similar issue with the X1600.  
>>> 
>>> Ok, it appears that there is no mem= entry in the command line... Hence there is no early
>>> memory which can be allocated and
>>> 
>>> https://elixir.bootlin.com/linux/v6.1.28/source/mm/memblock.c#L295
>>> 
>>> fails to set the end (which is 0 by default) to a reasonable value.
>>> 
>>> This is consistent with that our 6.15 kernel and the sudomaker 6.1 kernel show the same
>>> failure.
>>> 
>>> So we have to find the fix in our U-Boot and not the kernel. And it is likely something
>>> very simple...
>>> 
>> Does the chosen/memory node exists and/or is properly populated
>> (manually or by U-Boot)
> 
> Yes, it exists and should be the set up as in LX16 U-Boot (they share the source code for this - only some CONFIG may be different).

You had the right intuition!

Indeed there is code in our U-Boot to set up the memory node in the FDT after load. But it requires to have some
default entry in the FDT. I.e. it does not create a /memory.

And, the x2000.dtsi we have found on github doesn't define one. My early own experiments had one but it got
deleted by replacing...

I finally found by printing the return status of fdt_fixup_memory_banks() which was 136...

With that fixed, I can now boot up to:

calibrate_delay_converge()

So let's see what happens there (or does not happen but should).

BTW: there is one interesting difference between LX16 and LX20. On LX16 the boot log starts to print
while the parse_early_param() is processed. On the LX20 there is no such activity on the console between
my ll_printk() calls (although I can see "loglevel=7 console=ttyS2,115200 ignore_loglevel".
 
BR,
Nikolaus




More information about the Letux-kernel mailing list