missing crypto power domain on rk3588 ?

From: Corentin Labbe
Date: Tue Apr 04 2023 - 15:25:00 EST


Hello

My rk3588 crypto driver was working on vendor sources, but it fail to probe on upstream.
[ 0.000000] Linux version 6.3.0-rc5-next-20230404-00102-gabc278021096-dirty (compile@Red) (aarch64-unknown-linux-gnu-gcc (Gentoo 11.3.1_p20230120-r1 p7) 11.3.1 20230120, GNU ld (Gentoo 2.37_p1 p2) 2.37) #335 SMP PREEMPT Tue Apr 4 18:57:05 CEST 2023
[ 0.000000] Machine model: Radxa ROCK 5 Model B
[ 0.000000] efi: UEFI not found.
[ 0.000000] OF: reserved mem: 0x00000003fc000000..0x00000003fc4fffff (5120 KiB) nomap non-reusable gap1@3,fc000000
[ 0.000000] OF: reserved mem: 0x00000003fff00000..0x00000003ffffffff (1024 KiB) nomap non-reusable gap2@3,fff00000
[ 0.000000] NUMA: No NUMA configuration found
[ 0.000000] NUMA: Faking a node at [mem 0x0000000000200000-0x00000003ffffffff]
[ 0.000000] NUMA: NODE_DATA [mem 0x3fdf30900-0x3fdf32fff]
[ 0.000000] Zone ranges:
[ 0.000000] DMA [mem 0x0000000000200000-0x00000000ffffffff]
[ 0.000000] DMA32 empty
[ 0.000000] Normal [mem 0x0000000100000000-0x00000003ffffffff]ted using timer frequency.. 48.00 BogoMIPS (lpj=96000)
[ 0.000654] pid_max: default: 32768 minimum: 301
[ 0.000740] LSM: initializing lsm=capability
[ 0.000874] Mount-cache hash table entries: 32768 (order: 6, 262144 bytes, linear)
[ 0.000923] Mountpoint-cache hash table entries: 32768 (order: 6, 262144 bytes, linear)
[ 0.003399] RCU Tasks: Setting shift to 3 and lim to 1 rcu_task_cb_adjust=1.
[ 0.003513] RCU Tasks Trace: Setting shift to 3 and lim to 1 rcu_task_cb_adjust=1.
[ 0.003772] rcu: Hierarchical SRCU implementation.
[ 0.003779] rcu: Max phase no-delay instances is 1000.
[ 0.005149] EFI services will not be available.
[ 0.005642] smp: Bringing up secondary CPUs ...
[ 0.006325] Detected VIPT I-cache on CPU1
[ 0.006397] GICv3: CPU1: found redistributor 100 region 0:0x000000030000.g00
[ 0.006434] CPU1io@fec30000
[ 0.032224] gpio gpiochip3: Static allocation of GPIO base is deprecated, use dynamic allocation.
[ 0.032293] rockchip-gpio fec40000.gpio: probed /pinctrl/gpio@fec40000
[ 0.032351] gpio gpiochip4: Static allocation of GPIO base is deprecated, use dynamic allocation.
[ 0.032419] rockchip-gpio fec50000.gpio: probed /pinctrl/gpio@fec50000
[ 0.032761] KASLR disabled due to lack of seed
[ 0.033169] HugeTLB: registered 1.00 GiB page size, pre-allocated 0 pages
[ 0.033172] HugeTLB: 0 KiB vmemmap can be freed for a 1.00 GiB page
[ 0.033174] HugeTLB: registered 32.0 MiB page size, pre-allocated 0 pages
[ 0.033175] HugeTLB: 0 KiB vmemmap can be freed for a 32.0 MiB page
[ 0.033177] HugeTLB: registered 2.00 MiB page size, pre-allocated 0 pages
[ 0.033178] HugeTLB: 0 KiB vmemmap can be freed for a 2.00 MiB page
[ 0.033180] HugeTLB: registered 64.0 KiB page size, pre-allocated 0 pages
[ 0.033182] HugeTLB: 0 KiB vmemmap can be freed for a 64.0 KiB page
[ 0.033959] ACPI: Interpreter disabled.
[ 0.034168] iommu: Default domain type: Translated
[ 0.034170] iommu: DMA domain TLB invalidation policy: strict mode
[ 0.034276] SCSI subsystem initialized
[ 0.034528] pps_core: LinuxPPS API ver. 1 registered
[ 0.034530] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@xxxxxxxx>
[ 0.034542] t.com
ck support registered
c: GHES probing device list is empty
[ 0.297154] sdhci: Secure Digital Host Controller Interface driver
[ 0.298153] sdhci: Copyright(c) Pierre Ossman
[ 0.298668] Synopsys Designware Multimedia Card Interface Driver
[ 0.299348] sdhci-pltfm: SDHCI platform and OF driver helper
[ 0.300751] sdhci-dwcmshc fe2e0000.mmc: Disabling HS200/HS400, frequency too low (24000000)
[ 0.301644] ledtrig-cpu: registered to indicate activity on CPUs
[ 0.302304] scmi_protocol scmi_dev.1: Enabled polling mode TX channel - prot_id:16
[ 0.303027] arm-scmi firmware:scmi: SCMI Notifications - Core Enabled.
[ 0.303630] arm-scmi firmware:scmi: SCMI Protocol v2.0 'rockchip:' Firmware version 0x0
[ 0.307827] SMCCC: SOC_ID: ARCH_FEATURES(ARCH_SOC_ID) returned error: fffffffffffffffd
[ 0.308559] rk2_crypto_probe:512
[ 0.308841] rk2_crypto_probe:523
[ 0.309124] rk2_crypto_probe:530
[ 0.309410] rk2_crypto_probe:537
[ 0.309714] rk2_crypto_probe:547
[ 0.310001] SError Interrupt on CPU6, code 0x00000000be000411 -- SError
[ 0.310005] CPU: 6 PID: 1 Comm: swapper/0 Not tainted 6.3.0-rc5-next-20230404-00102-gabc278021096-dirty #335
[ 0.310009] Hardware name: Radxa ROCK 5 Model B (DT)
[ 0.310011] pstate: 40400009 (nZcv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[ 0.310014] pc : devm_kvasprintf+0x40/0xd4
[ 0.310023] lr : devm_kasprintf+0x58/0x80
[ 0.310028] sp : ffff80000aa4b9d0
[ 0.310029] x29: ffff80000aa4b9d0 x28: 0000000000000000 x27: ffff000102e21c80
[ 0.310034] x26: ffff8000093400b0 x25: ffff8000092bf090 x24: ffff0001014a3010
[ 0.310037] x23: ffff8000091d8e78 x22: 0000000000000cc0 x21: 0000000000002000
[ 0.310041] x20: ffff0001014a3010 x19: ffff80000aa4ba70 x18: ffffffffffffffff
[ 0.310044] x17: 666666666666203a x16: 726f727265206465 x15: ffff80008aa4b7a7
[ 0.310047] x14: 0000000000000000 x13: ffff80000a757380 x12: 00000000000002e5
[ 0.310050] x11: 00000000000000f7 x10: ffff80000a7af380 x9 : ffff80000aa4baf0
[ 0.310053] x8 : ffff80000aa4baf0 x7 : ffff80000a7af380 x6 : ffff80000aa4baf0
[ 0.310057] x5 : 00000000ffffffd8 x4 : ffff000100238478 x3 : ffff80000aa4ba10
[ 0.310060] x2 : ffff8000091d8e78 x1 : 0000000000000cc0 x0 : 0b5cf7c14451b300
[ 0.310064] Kernel panic - not syncing: Asynchronous SError Interrupt
Matched prompt #9: Kernel panic - not syncing
Setting prompt string to ['end Kernel panic[^\\r]*\\r', '/ #', '~ #', 'sh-5.1#', 'Login timed out', 'Login incorrect']
[ 0.310066] CPU: 6 PID: 1 Comm: swapper/0 Not tainted 6.3.0-rc5-next-20230404-00102-gabc278021096-dirty #335
[ 0.310069] Hardware name: Radxa ROCK 5 Model B (DT)
[ 0.310070] Call trace:
[ 0.310071] dump_backtrace+0x90/0xe8
[ 0.310078] show_stack+0x18/0x24
[ 0.310082] dump_stack_lvl+0x48/0x60
[ 0.310088] dump_stack+0x18/0x24
[ 0.310091] panic+0x35c/0x370
[ 0.310097] add_taint+0x0/0xbc
[ 0.310100] arm64_serror_panic+0x6c/0x78
[ 0.310103] do_serror+0x3c/0x78
[ 0.310105] el1h_64_error_handler+0x30/0x48
[ 0.310111] el1h_64_error+0x64/0x68
[ 0.310113] devm_kvasprintf+0x40/0xd4
[ 0.310118] devm_kasprintf+0x58/0x80
[ 0.310122] __devm_ioremap_resource+0x16c/0x268
[ 0.310127] devm_ioremap_resource+0x14/0x20
[ 0.310131] devm_platform_ioremap_resource+0x70/0x7c
[ 0.310135] rk2_crypto_probe+0x104/0x624
[ 0.310139] platform_probe+0x68/0xdc
[ 0.310143] really_probe+0x148/0x2ac
[ 0.310147] __driver_probe_device+0x78/0xe0
[ 0.310150] driver_probe_device+0x3c/0x15c
[ 0.310153] __driver_attach+0x94/0x19c
[ 0.310155] bus_for_each_dev+0x74/0xd4
[ 0.310158] driver_attach+0x24/0x30
[ 0.310160] bus_add_driver+0xe4/0x1e8
[ 0.310163] driver_register+0x60/0x128
[ 0.310166] __platform_driver_register+0x28/0x34
[ 0.310170] crypto_driver_init+0x1c/0x28
[ 0.310174] do_one_initcall+0x6c/0x1b0
[ 0.310176] kernel_init_freeable+0x1c0/0x2ac
[ 0.310181] kernel_init+0x24/0x1dc
[ 0.310183] ret_from_fork+0x10/0x20
[ 0.310187] SMP: stopping secondary CPUs
[ 0.310274] Kernel Offset: disabled
[ 0.310275] CPU features: 0xc00000,00e00a0c,6400720b
[ 0.310278] Memory Limit: none
96729] ghes_edac: GHES probing device list is empty
[ 0.297154] sdhci: Secure Digital Host Controller Interface driver
[ 0.298153] sdhci: Copyright(c) Pierre Ossman
[ 0.298668] Synopsys Designware Multimedia Card Interface Driver
[ 0.299348] sdhci-pltfm: SDHCI platform and OF driver helper
[ 0.300751] sdhci-dwcmshc fe2e0000.mmc: Disabling HS200/HS400, frequency too low (24000000)
[ 0.301644] ledtrig-cpu: registered to indicate activity on CPUs
[ 0.302304] scmi_protocol scmi_dev.1: Enabled polling mode TX channel - prot_id:16
[ 0.303027] arm-scmi firmware:scmi: SCMI Notifications - Core Enabled.
[ 0.303630] arm-scmi firmware:scmi: SCMI Protocol v2.0 'rockchip:' Firmware version 0x0
[ 0.307827] SMCCC: SOC_ID: ARCH_FEATURES(ARCH_SOC_ID) returned error: fffffffffffffffd
[ 0.308559] rk2_crypto_probe:512
[ 0.308841] rk2_crypto_probe:523
[ 0.309124] rk2_crypto_probe:530
[ 0.309410] rk2_crypto_probe:537
[ 0.309714] rk2_crypto_probe:547
[ 0.310001] SError Interrupt on CPU6, code 0x00000000be000411 -- SError
[ 0.310005] CPU: 6 PID: 1 Comm: swapper/0 Not tainted 6.3.0-rc5-next-20230404-00102-gabc278021096-dirty #335
[ 0.310009] Hardware name: Radxa ROCK 5 Model B (DT)
[ 0.310011] pstate: 40400009 (nZcv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[ 0.310014] pc : devm_kvasprintf+0x40/0xd4
[ 0.310023] lr : devm_kasprintf+0x58/0x80
[ 0.310028] sp : ffff80000aa4b9d0
[ 0.310029] x29: ffff80000aa4b9d0 x28: 0000000000000000 x27: ffff000102e21c80
[ 0.310034] x26: ffff8000093400b0 x25: ffff8000092bf090 x24: ffff0001014a3010
[ 0.310037] x23: ffff8000091d8e78 x22: 0000000000000cc0 x21: 0000000000002000
[ 0.310041] x20: ffff0001014a3010 x19: ffff80000aa4ba70 x18: ffffffffffffffff
[ 0.310044] x17: 666666666666203a x16: 726f727265206465 x15: ffff80008aa4b7a7
[ 0.310047] x14: 0000000000000000 x13: ffff80000a757380 x12: 00000000000002e5
[ 0.310050] x11: 00000000000000f7 x10: ffff80000a7af380 x9 : ffff80000aa4baf0
[ 0.310053] x8 : ffff80000aa4baf0 x7 : ffff80000a7af380 x6 : ffff80000aa4baf0
[ 0.310057] x5 : 00000000ffffffd8 x4 : ffff000100238478 x3 : ffff80000aa4ba10
[ 0.310060] x2 : ffff8000091d8e78 x1 : 0000000000000cc0 x0 : 0b5cf7c14451b300
[ 0.310064] Kernel panic - not syncing: Asynchronous SError Interrupt
[ 0.310066] CPU: 6 PID: 1 Comm: swapper/0 Not tainted 6.3.0-rc5-next-20230404-00102-gabc278021096-dirty #335
[ 0.310069] Hardware name: Radxa ROCK 5 Model B (DT)
[ 0.310070] Call trace:
[ 0.310071] dump_backtrace+0x90/0xe8
[ 0.310078] show_stack+0x18/0x24
[ 0.310082] dump_stack_lvl+0x48/0x60
[ 0.310088] dump_stack+0x18/0x24
[ 0.310091] panic+0x35c/0x370
[ 0.310097] add_taint+0x0/0xbc
[ 0.310100] arm64_serror_panic+0x6c/0x78
[ 0.310103] do_serror+0x3c/0x78
[ 0.310105] el1h_64_error_handler+0x30/0x48
[ 0.310111] el1h_64_error+0x64/0x68
[ 0.310113] devm_kvasprintf+0x40/0xd4
[ 0.310118] devm_kasprintf+0x58/0x80
[ 0.310122] __devm_ioremap_resource+0x16c/0x268
[ 0.310127] devm_ioremap_resource+0x14/0x20
[ 0.310131] devm_platform_ioremap_resource+0x70/0x7c
[ 0.310135] rk2_crypto_probe+0x104/0x624
[ 0.310139] platform_probe+0x68/0xdc
[ 0.310143] really_probe+0x148/0x2ac
[ 0.310147] __driver_probe_device+0x78/0xe0
[ 0.310150] driver_probe_device+0x3c/0x15c
[ 0.310153] __driver_attach+0x94/0x19c
[ 0.310155] bus_for_each_dev+0x74/0xd4
[ 0.310158] driver_attach+0x24/0x30
[ 0.310160] bus_add_driver+0xe4/0x1e8
[ 0.310163] driver_register+0x60/0x128
[ 0.310166] __platform_driver_register+0x28/0x34
[ 0.310170] crypto_driver_init+0x1c/0x28
[ 0.310174] do_one_initcall+0x6c/0x1b0
[ 0.310176] kernel_init_freeable+0x1c0/0x2ac
[ 0.310181] kernel_init+0x24/0x1dc
[ 0.310183] ret_from_fork+0x10/0x20
[ 0.310187] SMP: stopping secondary CPUs
[ 0.310274] Kernel Offset: disabled
[ 0.310275] CPU features: 0xc00000,00e00a0c,6400720b
[ 0.310278] Memory Limit: none

Asking for help on #linux-rockchip, I was guide to missing power domain, so I tried to add missing bits
--- a/drivers/soc/rockchip/pm_domains.c
+++ b/drivers/soc/rockchip/pm_domains.c
@@ -1053,6 +1053,7 @@ static const struct rockchip_domain_info rk3588_pm_domains[] = {
[RK3588_PD_SDIO] = DOMAIN_RK3588("sdio", 0x4, BIT(10), 0, BIT(24), 0x4, BIT(3), BIT(19), false),
[RK3588_PD_USB] = DOMAIN_RK3588("usb", 0x4, BIT(11), 0, BIT(25), 0x4, BIT(4), BIT(20), true),
[RK3588_PD_SDMMC] = DOMAIN_RK3588("sdmmc", 0x4, BIT(13), 0, BIT(26), 0x0, 0, 0, false),
+ [RK3588_PD_CRYPTO] = DOMAIN_RK3588("crypto", 0x4, BIT(14), 0, BIT(27), 0x0, 0, 0, false),
};

--- a/arch/arm64/boot/dts/rockchip/rk3588s.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3588s.dtsi
@@ -816,6 +816,12 @@ power-domain@RK3588_PD_SDMMC {
pm_qos = <&qos_sdmmc>;
#power-domain-cells = <0>;
};
+ power-domain@RK3588_PD_CRYPTO {
+ reg = <RK3588_PD_CRYPTO>;
+ pm_qos = <&qos_cryptos>,
+ <&qos_cryptons>;
+ #power-domain-cells = <0>;
+ };
};
};

@@ -854,6 +860,16 @@ qos_sdmmc: qos@fdf3d800 {
reg = <0x0 0xfdf3d800 0x0 0x20>;
};

+ qos_cryptos: qos@fdf3d000 {
+ compatible = "rockchip,rk3588-qos", "syscon";
+ reg = <0x0 0xfdf3d000 0x0 0x20>;
+ };
+
+ qos_cryptons: qos@fdf3d200 {
+ compatible = "rockchip,rk3588-qos", "syscon";
+ reg = <0x0 0xfdf3d200 0x0 0x20>;
+ };
+

And in the crypto node:
power-domains = <&power RK3588_PD_CRYPTO>;

But I still get the same problem.
Thanks for any help debugging this.