[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Bug] Bring up Dom0 on Arm board



        Hi Julien Grall,
        Thank you for your reply.

> (+ Bertrand and Stefano)

> Hello,

> On 06/01/2023 06:41, 蔡力刚 wrote:
>>   I try to run Xen on a Rockchip RK3588 board and encountered some problems.
>>   The command I used:
>>   load mmc 1:1 0xC400000 dom0-Image;
>>   load mmc 1:1 0x47C00000 xen4.14.5;

We have made a lot of improvement since Xen 4.14. This is also out of 
support since January 2022. It is still security supported but not for 
long (July 2023).

Would you be able to try Xen 4.17 (this was released a month ago)?

I also tried the Xen4.17.0, But failed to run xl command in dom0, the error like below:
root@RK3588:~# xl list
libxl: error: libxl_utils.c:820:libxl_cpu_bitmap_alloc: failed to retrieve the maximum number of cpus
libxl: error: libxl_utils.c:820:libxl_cpu_bitmap_alloc: failed to retrieve the maximum number of cpus
libxl: error: libxl_utils.c:820:libxl_cpu_bitmap_alloc: failed to retrieve the maximum number of cpus
libxl: error: libxl_domain.c:334:libxl_list_domain: getting domain info list: Permission denied
libxl_list_domain failed.

In Rootfs, Xen tool version is 4.14.3,
I suspect that Xen tool and Xen hypervisor version conflict cause this problem, is that right?

And although I used Xen4.17.0, The problems I mentioned are still there,
The Device tree generation failed error, the dev mali0 and mmcblk2 still failed to run.

>>   load mmc 1:1 0x47E00000 rk3588-evb7-lp4-v10-linux.dtb
>>   fdt addr 0x47E00000
>>   fdt resize 1024
>>   fdt set /chosen \#address-cells <0x2>
>>   fdt set /chosen \#size-cells <0x2>
>>   fdt set /chosen xen,xen-bootargs "console=dtuart dtuart=serial2 dom0_mem=4G dom0_max_vcpus=4 vwfi=native sched=null"
>>   fdt mknod /chosen dom0
>>   fdt set /chosen/dom0 compatible "xen,linux-zimage" "xen,multiboot-module" "multiboot,module"
>>   fdt set /chosen/dom0 reg <0x0 0xC400000 0x0 0x2000000>
>>   fdt set /chosen xen,dom0-bootargs "console=hvc0 earlycon=xen earlyprintk=xen clk_ignore_unused root=/dev/mmcblk0p6 rw rootwait"
>>   setenv fdt_high 0xffffffffffffffff
>>   booti 0x47C00000 - 0x47E00000
>>   1. Device tree generation failed errors.
>>   when I used the default dtb to run xen, Painc occured on xen.
>>   log:
>>   (XEN) Unable to get irq 0 for /pcie@fe180000/legacy-interrupt-controller
>>   (XEN) Device tree generation failed (-1).
>>   (XEN)
>>   (XEN) ****************************************
>>   (XEN) Panic on CPU 0:
>>   (XEN) Could not set up DOM0 guest OS
>>   (XEN) ****************************************
>>   (XEN)
>>   (XEN) Reboot in five seconds...
>>   the dtb:
>>   pcie2x1l1_intc: legacy-interrupt-controller {
>>   interrupt-controller;
>>   #address-cells = <0>;
>>   #interrupt-cells = <1>;
>>   interrupt-parent = <&gic>;
>>   interrupts = <GIC_SPI 245 IRQ_TYPE_EDGE_RISING>;
>>   }; >   I modified the legacy-interrupt-controller of interrupts from 
>> IRQ_TYPE_EDGE_RISING to IRQ_TYPE_LEVEL_HIGH.

Based on this change, I would say the call to irq_set_spi_type() (called 
from platform_get_irq()) will return -1. The function will validate the 
type and will throw an error if there is a problem.

Can you confirm whether the interrupt is shared with another device? Is 
it described twice in the DT?

If yes to one of the two questions. Is the type different?

You could also print the old and new type in irq_set_spi_type() to 
confirm the difference.

It may cause by the interrupt interrupt-controller@fe600000,
set the interrupt IRQ_TYPE_LEVEL_HIGH first according to interrupt-controller@fe600000 ,
then irq_set_spi_type() try to set the interrupt IRQ_TYPE_EDGE_RISING  according to
pcie2x1l1_intc: legacy-interrupt-controller, but return -1.
the gic: interrupt-controller@fe600000 like below:

gic: interrupt-controller@fe600000 {
    compatible = "arm,gic-v3";
    #interrupt-cells = <3>;
    #address-cells = <2>;
    #size-cells = <2>;
    ranges;
    interrupt-controller;

    reg = <0x0 0xfe600000 0 0x10000>, /* GICD */
             <0x0 0xfe680000 0 0x100000>; /* GICR */
    interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
    its0: msi-controller@fe640000 {
        compatible = "arm,gic-v3-its";
        msi-controller;
        #msi-cells = <1>;
        reg = <0x0 0xfe640000 0x0 0x20000>;
    };
    its1: msi-controller@fe660000 {
        compatible = "arm,gic-v3-its";
        msi-controller;
        #msi-cells = <1>;
        reg = <0x0 0xfe660000 0x0 0x20000>;
    };
};

>>   And bring up Xen successed, through I not sure the modification is correct.
>>   2. After boot up, I tried to input in the console but failed.
>>   I added some log in api do_trap_guest_sync, try_handle_mmio as below:
>>   In function do_trap_guest_sync:
>>   static unsigned long ec = 0;
>>   if(hsr.ec != ec)
>>   {
>>   gprintk(XENLOG_INFO, "do_trap_guest_sync hsr.ec=%x \n", hsr.ec);
>>   ec = hsr.ec;
>>   }
>>   In function try_handle_mmio:
>>   gprintk(XENLOG_INFO, "handler->addr: %lx\n", handler->addr);
>>   Then everytime I type enter in the console, console show the log below:
>>   (XEN) d0v0 do_trap_guest_sync hsr.ec=24
>>   (XEN) d0v0 handler->addr: fe600000
>>   (XEN) d0v0 handler->addr: fe600000
>>   (XEN) d0v0 do_trap_guest_sync hsr.ec=18
>>   Is that something wrong with the GIC interrupt ?
A few questions:
   * What is the corresponding device in the host physical address space 
for 0xfe600000?
   * What is the UART on your board? Is there any specific workaround 
required?

0xfe600000 is:  gic: interrupt-controller@fe600000, full content above.

The UART is 8250, I set menuconfig in Debugging Options, the config like below:
[*]   Early printk (Early printk via 8250 UART)  --->
(0Xfeb50000) Early printk, physical base address of debug UART
(2)   Early printk, left-shift to apply to the register offsets within the 8250 UART

I found that if I config the early printk in xen, I don't need the xen,dom0-bootargs=
"console=hvc0 earlycon=xen earlyprintk=xen" anymore, is that right?

>>   3. In Dom0, the dev mali0 and mmcblk2 is missing, and weston running failed.
> Do you have any log in the kernel indicating why the mali and/or the mmc 
> driver didn't load?

> Also, can you confirm that the same kernel image works without Xen?

Boot without xen, the mali0 log like below:
root@RK3588:/# dmesg | grep mali
[    4.192093] mali fb000000.gpu: Kernel DDK version g12p0-01eac0
[    4.192148] mali fb000000.gpu: Looking up mali-supply from device tree
[    4.194569] mali fb000000.gpu: Looking up mem-supply from device tree
[    4.194747] mali fb000000.gpu: Looking up mali-supply from device tree
[    4.194792] mali fb000000.gpu: Looking up mem-supply from device tree
[    4.195383] mali fb000000.gpu: leakage=16
[    4.195457] mali fb000000.gpu: Looking up mali-supply from device tree
[    4.197004] mali fb000000.gpu: pvtm=858
[    4.197099] mali fb000000.gpu: pvtm-volt-sel=2
[    4.198437] mali fb000000.gpu: avs=0
[    4.201271] W : [File] : drivers/gpu/arm/bifrost/platform/rk/mali_kbase_config_rk.c; [Line] : 136; [Func] : 
kbase_platform_rk_init(); power-off-delay-ms not available.
[    4.206668] mali fb000000.gpu: GPU hardware issue table may need updating:
[    4.206683] mali fb000000.gpu: GPU identified as 0x7 arch 10.8.6 r0p0 status 0
[    4.206810] mali fb000000.gpu: No priority control manager is configured
[    4.206823] mali fb000000.gpu: No memory group manager is configured
[    4.206852] mali fb000000.gpu: Protected memory allocator not available
[    4.208342] mali fb000000.gpu: Couldn't find power_model DT node matching 'arm,mali-simple-power-model'
[    4.208356] mali fb000000.gpu: Error -22, no DT entry: mali-simple-power-model.static-coefficient = 1*[0]
[    4.208572] mali fb000000.gpu: Error -22, no DT entry: mali-simple-power-model.dynamic-coefficient = 1*[0]
[    4.208766] mali fb000000.gpu: Error -22, no DT entry: mali-simple-power-model.ts = 4*[0]
[    4.208958] mali fb000000.gpu: Error -22, no DT entry: mali-simple-power-model.thermal-zone = ''
[    4.212287] mali fb000000.gpu: Using configured power model mali-lodx-power-model, and fallback mali-simple-power-model
[    4.212539] mali fb000000.gpu: l=10000 h=85000 hyst=5000 l_limit=0 h_limit=800000000 h_table=0
[    4.214528] mali fb000000.gpu: Probed as mali0
[    4.318492] I : [File] : drivers/gpu/arm/mali400/mali/linux/mali_kernel_linux.c; [Line] : 405; [Func] : mali_module_init(); 
svn_rev_string_from_arm of this mali_ko is '', rk_ko_ver is '5', built at '10:04:19', on 'Dec 12 2022'.
[    6.959913] mali fb000000.gpu: Loading Mali firmware 0x1010000
[    6.960491] mali fb000000.gpu: Protected memory allocator not found, Firmware protected mode entry will not be supported
[    6.960498] mali fb000000.gpu: Protected memory allocator not found, Firmware protected mode entry will not be supported
[    6.960503] mali fb000000.gpu: Protected memory allocator not found, Firmware protected mode entry will not be supported

Boot with xen, the mali0 log like below:
[    2.969638] I : [File] : drivers/gpu/arm/mali400/mali/linux/mali_kernel_linux.c; [Line] : 405; [Func] : mali_module_init();
 svn_rev_string_from_arm of this mali_ko is '', rk_ko_ver is '5', built at '14:06:00', on 'Dec 16 2022'.

Boot without xen, the mmcblk2 log like below:
root@RK3588:/# dmesg |grep sdmmc
root@RK3588:/# dmesg |grep mmc
[    1.842460] Kernel command line: storagemedia=emmc androidboot.storagemedia=emmc androidboot.mode=normal  
androidboot.verifiedbootstate=orange rw rootwait earlycon=uart8250,mmio32,0xfeb50000 
console=ttyFIQ0 irqchip.gicv3_pseudo_nmi=0 root=PARTUUID=614e0000-0000
[    3.981216] dwmmc_rockchip fe2c0000.mmc: IDMAC supports 32-bit address mode.
[    3.981321] dwmmc_rockchip fe2c0000.mmc: Using internal DMA controller.
[    3.981349] dwmmc_rockchip fe2c0000.mmc: Version ID is 270a
[    3.981435] dwmmc_rockchip fe2c0000.mmc: DW MMC controller at irq 77,32 bit host data width,256 deep fifo
[    3.981588] dwmmc_rockchip fe2c0000.mmc: Looking up vmmc-supply from device tree
[    3.982932] dwmmc_rockchip fe2c0000.mmc: Looking up vqmmc-supply from device tree
[    3.983121] sdhci-dwcmshc fe2e0000.mmc: Looking up vmmc-supply from device tree
[    3.983135] sdhci-dwcmshc fe2e0000.mmc: Looking up vmmc-supply property in node /mmc@fe2e0000 failed
[    3.983168] sdhci-dwcmshc fe2e0000.mmc: Looking up vqmmc-supply from device tree
[    3.983177] sdhci-dwcmshc fe2e0000.mmc: Looking up vqmmc-supply property in node /mmc@fe2e0000 failed
[    3.983294] dwmmc_rockchip fe2c0000.mmc: Failed getting OCR mask: -22
[    3.983461] dwmmc_rockchip fe2c0000.mmc: could not set regulator OCR (-22)
[    3.983473] dwmmc_rockchip fe2c0000.mmc: failed to enable vmmc regulator
[    3.995539] mmc_host mmc2: Bus speed (slot 0) = 400000Hz (slot req 400000Hz, actual 400000HZ div = 0)
[    4.012246] mmc0: SDHCI controller on fe2e0000.mmc [fe2e0000.mmc] using ADMA
[    4.043129] mmc_host mmc2: Bus speed (slot 0) = 49500000Hz (slot req 50000000Hz, actual 49500000HZ div = 0)
[    4.043689] mmc2: new high speed SDHC card at address 0007
[    4.044681] mmcblk2: mmc2:0007 SD8GB 7.21 GiB 
[    4.047294]  mmcblk2: p1
[    4.060614] mmc0: new HS400 Enhanced strobe MMC card at address 0001
[    4.061406] mmcblk0: mmc0:0001 BJTD4R 29.1 GiB 
[    4.061539] mmcblk0boot0: mmc0:0001 BJTD4R partition 1 4.00 MiB
[    4.061663] mmcblk0boot1: mmc0:0001 BJTD4R partition 2 4.00 MiB
[    4.062273] mmcblk0rpmb: mmc0:0001 BJTD4R partition 3 4.00 MiB, chardev (236:0)
[    4.068960]  mmcblk0: p1 p2 p3 p4 p5 p6 p7 p8
[    5.835901] EXT4-fs (mmcblk0p6): recovery complete
[    5.836462] EXT4-fs (mmcblk0p6): mounted filesystem with ordered data mode. Opts: (null)
[    5.839971]     storagemedia=emmc
[    5.867859] EXT4-fs (mmcblk0p6): re-mounted. Opts: (null)
[    6.409008] FAT-fs (mmcblk2p1): utf8 is not a recommended IO charset for FAT filesystems, filesystem will be case sensitive!
[    6.414043] FAT-fs (mmcblk2p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
[    7.039362] EXT4-fs (mmcblk0p7): mounting ext2 file system using the ext4 subsystem
[    7.040313] EXT4-fs (mmcblk0p7): warning: mounting unchecked fs, running e2fsck is recommended
[    7.041225] EXT4-fs (mmcblk0p7): mounted filesystem without journal. Opts: (null)
[    7.162903] EXT4-fs (mmcblk0p8): mounting ext2 file system using the ext4 subsystem
[    7.165824] EXT4-fs (mmcblk0p8): warning: mounting unchecked fs, running e2fsck is recommended
[    7.172777] EXT4-fs (mmcblk0p8): mounted filesystem without journal. Opts: (null)

Boot with xen, the mmcblk2(sdmmc) log like below:
root@RK3588:/sys/firmware# dmesg |grep sdmmc
[   69.563072] rockchip-pm-domain fd8d8000.power-management:power-controller: 
Looking up sdmmc-supply from device tree
[   69.563112] rockchip-pm-domain fd8d8000.power-management:power-controller: 
Looking up sdmmc-supply property in node /power-management@fd8d8000/power-controller failed

>>   While I can't input in the console, I tried use console via ssh.
>>   In the /dev list, I can't find mali0 and mmcblk2(sdcard),
>>   In u-boot mode, mmcblk2 can be recognized, I loaded dom0-Image, xen, and dtb from mmcblk2.
>>   While booting without xen, the mali0 and mmcblk2 can be recognized,
>>   Is that something wrong with xen while Initialize the driver?
>>   4. xl command can not executed, and seems to be suspended.

xl requires the initscript (or systemd service) to be executed. The fact 
it hangs usually means this didn't happen.

Just in case, can you also check that your kernel has been build with 
Xen support?

initscript is xendriverdomain? I tried the command in dom0 like below:
(xl list command suspended)
root@RK3588:/# ./etc/init.d/xendriverdomain restart
root@RK3588:/# 
root@RK3588:/# ps aux |grep xen
root        59  0.0  0.0      0     0 ?        S    00:00   0:00 [xenbus]
root        60  0.0  0.0      0     0 ?        S    00:00   0:00 [xenwatch]
root       165  0.0  0.0      0     0 ?        D    00:00   0:00 [xenbus_probe]
root      5993  0.0  0.0   3044   380 pts/0    S+   00:09   0:00 grep xen
root@RK3588:/# xl list
Name                                        ID   Mem VCPUs      State   Time(s)

I config the kernel according the manuals:
https://wiki.xenproject.org/wiki/Mainline_Linux_Kernel_Configs#Configuring_the_Kernel_for_dom0_Support
And used the kernel/arch/arm64/boot/Image as the dom0-Image.
How can I check the Kernel has been build with Xen support?
I used to check the kernel by Image file modification time.

>>   Type the xl list or xl create command via ssh console, the command not responding until type ctrl+c.
>>   Type xl info command succeed, and show some info in the console.

> Cheers,

> -- 
> Julien Grall

        Best regards
        Cailigang

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.