Hi all,
I was investigating the kernel boot time and process of a custom-made image for Jetson Orin Nano with the Jetson BSP with kernel 6.12. On average, the kernel boottime is around 12-13 seconds which, I would say, is quite long for an arm64 device with 6 cores.
Investigating the different steps and initcalls in the kernel boot process, I came across this:
---
Top 10 initcall durations:
* tegra_pcie_dw_driver_init -> 4467701us
* tegra_bpmp_driver_init -> 4193836us
* clk_disable_unused -> 163179us
* deferred_probe_initcall -> 120094us
* tegra_p2u_driver_init -> 69377us
* init_encrypted -> 60460us
* optee_core_init -> 59314us
* arm_smmu_driver_init -> 36234us
* fusb301_i2c_driver_init -> 34756us
* tegra_bpmp_thermal_driver_init -> 32982us
---
Top 10 probe durations:
* bpmp -> 4193443us
* 141e0000.pcie -> 2047080us
* 14160000.pcie -> 2046793us
* 140a0000.pcie -> 246941us
* 3400000.mmc -> 226069us
* 14100000.pcie -> 126565us
* bpmp:thermal -> 61638us
* firmware:optee -> 59066us
* 1-0025 -> 52823us
* 1-2 -> 36737us
I was already able to decrease the boottime by just disabling some unused pcie interfaces in the device tree, which eliminates the influence of tegra_pcie_dw_driver_init in the list above. However, to decrease the boot time even more, we need to handle with the bpmp and other initcalls (see above).
I’m not that familiar with the (workings of) BPMP, but I know it’s one of the most important and most needed components on the Jetson. Is there a way to decrease the high initcall duration (almost 4 seconds)? Does anyone experience the same?
I did take a small look in the code of the bpmp kernel module, specifically the init, and saw a busy wait-loop which just waits for a response of the bpmp. Does the bpmp really take 4 seconds to init everything and block the kernel from booting any further?
I would love to hear your opinions!