]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
xen: xenguest_arm64: map all VIRTIO MMIO region
authorPeng Fan <peng.fan@nxp.com>
Fri, 26 Jan 2024 10:29:38 +0000 (18:29 +0800)
committerTom Rini <trini@konsulko.com>
Fri, 1 Mar 2024 23:34:08 +0000 (18:34 -0500)
When run `virtio scan` on i.MX95, there is abort when accessing virtio
mmio region. The issue is the mmio region is not mapped. So let's map
all virtio mmio regions.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
board/xen/xenguest_arm64/xenguest_arm64.c

index 244070a242da1452dc3e160c5655eeb9d327a1a5..1d2946f4fde808eb24a11aaf1caa26261dd6dc53 100644 (file)
@@ -31,6 +31,9 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
+#define GUEST_VIRTIO_MMIO_BASE 0x2000000
+#define GUEST_VIRTIO_MMIO_SIZE 0x100000
+
 int board_init(void)
 {
        return 0;
@@ -212,6 +215,15 @@ static int setup_mem_map(void)
                                PTE_BLOCK_INNER_SHARE);
        i++;
 
+       if (CONFIG_IS_ENABLED(VIRTIO_MMIO)) {
+               xen_mem_map[i].virt = GUEST_VIRTIO_MMIO_BASE;
+               xen_mem_map[i].phys = GUEST_VIRTIO_MMIO_BASE;
+               xen_mem_map[i].size = GUEST_VIRTIO_MMIO_SIZE;
+               xen_mem_map[i].attrs = (PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
+                                       PTE_BLOCK_NON_SHARE);
+               i++;
+       }
+
        mem = get_next_memory_node(blob, -1);
        if (mem < 0) {
                printf("%s: Missing /memory node\n", __func__);
@@ -219,6 +231,11 @@ static int setup_mem_map(void)
        }
 
        for (; i < MAX_MEM_MAP_REGIONS; i++) {
+               if (CONFIG_IS_ENABLED(VIRTIO_MMIO)) {
+                       ret = fdt_node_check_compatible(blob, mem, "virtio,mmio");
+                       if (!ret)
+                               continue;
+               }
                ret = fdt_get_resource(blob, mem, "reg", reg++, &res);
                if (ret == -FDT_ERR_NOTFOUND) {
                        reg = 0;