[PATCH v2] time: Fix get_ticks being non-monotonic
Michael Opdenacker
michael.opdenacker at bootlin.com
Mon Mar 1 17:40:49 CET 2021
Hi Simon,
I'm back working on this old issue. Thanks for your help with this!
So, SPL support for Atmel/Microchip SAMA5D3 is still broken in the
latest mainline, at least for the Xplained board with the MMC configuration.
My comments and further questions below...
On 11/22/20 12:07 AM, Simon Glass wrote:
> Hi Michael,
>
> On Thu, 19 Nov 2020 at 04:23, Michael Opdenacker
> <michael.opdenacker at bootlin.com> wrote:
>> Hi,
>>
>> Sorry, no messaging quoting, I was not subscribed to the list at that time.
>>
>> Merging this change into master actually broke the SPL on
>> Atmel/Microchip SAMA5D3, at least booting from MMC:
>>
>> RomBOOT
>>
>> <debug_uart>
>> Could not initialize timer (err -11)
>>
>> Could not initialize timer (err -11)
>>
>> Could not initialize timer (err -11)
>> ...
>>
>> I'll look for a fix, but suggestions are welcome!
Now, it's:
Could not initialize timer (err -19)
(-19 is -ENODEV /* No such device */)
> The board might need CONFIG_TIMER_EARLY, but otherwise I think it is a
> case of figuring out why the timer is used before it is available.
I tried to enable CONFIG_TIMER_EARLY but it fails at link time:
LD u-boot
arm-linux-ld.bfd: lib/built-in.o: in function `get_tbclk':
/home/mike/work/git/git.denx.de/u-boot/lib/time.c:70: undefined
reference to `timer_early_get_rate'
arm-linux-ld.bfd: lib/built-in.o: in function `get_ticks':
/home/mike/work/git/git.denx.de/u-boot/lib/time.c:90: undefined
reference to `timer_early_get_count'
make: *** [Makefile:1765: u-boot] Error 1
This is not a surprise, as according to
https://elixir.bootlin.com/u-boot/latest/C/ident/timer_early_get_rate,
timer_early_get_rate() is not implemented on ARM, only on sandbox
(drivers/timer/sandbox_timer.c) and on x86 (drivers/timer/tsc_timer.c).
So, I'm moving to your second suggestion...
>
> You can use dm_dump_all() to print out available devices and whether
> they are probed.
Done, I added dm_dump_all to lib/time.c right before the panic() message:
Class Index Probed Driver Name
-----------------------------------------------------------
root 0 [ + ] root_driver root_driver
simple_bus 0 [ ] simple_bus `-- ahb
simple_bus 1 [ ] simple_bus `-- apb
mmc 0 [ ] atmel-mci |-- mmc at f0000000
blk 0 [ ] mmc_blk | `-- mmc at f0000000.blk
mmc 1 [ ] atmel-mci |-- mmc at f8000000
blk 1 [ ] mmc_blk | `-- mmc at f8000000.blk
serial 0 [ ] serial_atmel |-- serial at ffffee00
pinctrl 0 [ ] atmel_sama5d3_pinctrl |-- pinctrl at fffff200
pinconfig 0 [ ] pinconfig | |-- dbgu
pinconfig 1 [ ] pinconfig | | `-- dbgu-0
pinconfig 2 [ ] pinconfig | |-- mmc0
pinconfig 3 [ ] pinconfig | | |-- mmc0_clk_cmd_dat0
pinconfig 4 [ ] pinconfig | | |-- mmc0_dat1_3
pinconfig 5 [ ] pinconfig | | `-- mmc0_dat4_7
pinconfig 6 [ ] pinconfig | |-- mmc1
pinconfig 7 [ ] pinconfig | | |-- mmc1_clk_cmd_dat0
pinconfig 8 [ ] pinconfig | | `-- mmc1_dat1_3
pinconfig 9 [ ] pinconfig | |-- spi0
pinconfig 10 [ ] pinconfig | | `-- spi0-0
pinconfig 11 [ ] pinconfig | |-- spi1
pinconfig 12 [ ] pinconfig | | `-- spi1-0
pinconfig 13 [ ] pinconfig | `-- board
pinconfig 14 [ ] pinconfig | |-- mmc0_cd
pinconfig 15 [ ] pinconfig | `-- mmc1_cd
gpio 0 [ ] atmel_at91rm9200_gpio |-- gpio at fffff200
gpio 1 [ ] atmel_at91rm9200_gpio |-- gpio at fffff400
gpio 2 [ ] atmel_at91rm9200_gpio |-- gpio at fffff600
gpio 3 [ ] atmel_at91rm9200_gpio |-- gpio at fffff800
gpio 4 [ ] atmel_at91rm9200_gpio |-- gpio at fffffa00
simple_bus 2 [ ] at91-pmc `-- pmc at fffffc00
clk 0 [ ] at91sam9x5-utmi-clk |-- utmick
clk 1 [ ] at91-master-clk |-- masterck
misc 0 [ ] sam9x5-periph-clk `-- periphck
clk 2 [ ] periph-clk |-- dbgu_clk at 2
clk 3 [ ] periph-clk |-- pioA_clk at 6
clk 4 [ ] periph-clk |-- pioB_clk at 7
clk 5 [ ] periph-clk |-- pioC_clk at 8
clk 6 [ ] periph-clk |-- pioD_clk at 9
clk 7 [ ] periph-clk |-- pioE_clk at 10
clk 8 [ ] periph-clk |-- mci0_clk at 21
clk 9 [ ] periph-clk |-- mci1_clk at 22
clk 10 [ ] periph-clk |-- spi0_clk at 24
clk 11 [ ] periph-clk `-- spi1_clk at 25
Could not initialize timer (err -19)
I'm not familiar enough with U-Boot yet (and with SAMA5D3 support
either) to see why the timer device is missing here, but I hope our
Microchip friends can give us further clues...
Thanks again,
Cheers,
Michael.
--
Michael Opdenacker, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
More information about the U-Boot
mailing list