Re: [Query] Unable to probe reserved-memory carveouts in DomU with Xen
"Padhi, Beleswar" <[email protected]>
| Newsgroups | org.xenproject.lists.xen-devel |
|---|---|
| Message-ID | <[email protected]> |
Hello,
Thanks for the response! I see, this would solve the cma problem. But
there are usecases
when we want to use the reserved-memory node; one example is the
firmware for
remote processors. In that case, how do we passthrough reserved-memory
nodes to
DomUs?
Example:
60
61 mcu_r52_0_fw_memory_region: memory@a1000000 {
62 compatible = "shared-dma-pool";
63 reg = <0x00 0xa1000000 0x00 0x100000>;
64 no-map;
65 };
Thanks,
Beleswar
On 7/24/2026 1:52 PM, Orzel, Michal wrote:
> Hi,
>
> I'm afraid this will not work. The reason is that Xen only copies nodes from the
> passthrough DTB to final DTB that are placed under `/passthrough` node and
> `/aliases`. /reserved-memory needs to be under root node `/`, therefore it will
> not be copied. However, it seems like you are not using CMA node specifying a
> fixed memory region (using `reg`) but size. In that case you should be able to
> achieve the same using `cma=128M` kernel cmdline parameter.
>
> ~Michal
>
> On 24-Jul-26 08:55, Beleswar Prasad Padhi wrote:
>> Hi all,
>>
>> I have been trying to use reserved-memory carveouts in DomU, but failing constantly.
>>
>> This is the log from Dom1 boot:
>>
>> [ 0.000000] earlycon: uart8250 at MMIO32 0x0000000053914000 (options '115200n
>> 8')
>> [ 0.000000] printk: legacy bootconsole [uart8250] enabled
>> [ 0.000000] Xen 4.21 support found
>> [ 0.000000] efi: UEFI not found.
>> *[ 0.000000] OF: reserved mem: Reserved memory: No reserved-memory node in the DT*
>> [ 0.000000] Zone ranges:
>> [ 0.000000] DMA [mem 0x0000000040000000-0x0000000051ffffff]
>> [ 0.000000] DMA32 empty
>> [ 0.000000] Normal empty
>> [ 0.000000] Movable zone start for each node
>> [ 0.000000] Early memory node ranges
>> [ 0.000000] node 0: [mem 0x0000000040000000-0x0000000051ffffff]
>> [ 0.000000] Initmem setup node 0 [mem 0x0000000040000000-0x0000000051ffffff]
>> [ 0.000000] On node 0, zone DMA: 24576 pages in unavailable ranges
>> [ 0.000000] cma: Reserved 32 MiB at 0x000000004f800000
>>
>> This is my passthrough.dts:
>>
>> 1 /*
>> 2 * This is a partial DT for passthrough node to DomU.
>> 3 */
>> 4 #include <dt-bindings/interrupt-controller/irq.h>
>> 5 #include <dt-bindings/interrupt-controller/arm-gic.h>
>> 6
>> 7 /dts-v1/;
>> 8
>> 9 / {
>> 10 #address-cells = <2>;
>> 11 #size-cells = <1>;
>> 12
>> ~ 13 reserved-memory {
>> ~ 14 #address-cells = <2>;
>> ~ 15 #size-cells = <2>;
>> + 16 ranges;
>> + 17
>> + 18 /* CMA region for framebuffer allocation */
>> + 19 linux,cma {
>> + 20 compatible = "shared-dma-pool";
>> + 21 reusable;
>> + 22 size = <0x00 0x08000000>; /* 128MB CMA pool */
>> + 23 linux,cma-default;
>> + 24 };
>> 25 };
>> 26
>> 27 passthrough {
>> 28 compatible = "simple-bus";
>> 29 ranges;
>> 30 #address-cells = <2>;
>> 31 #size-cells = <1>;
>> 32
>> 33 misc_clk: misc_clk {
>> 34 #clock-cells = <0>;
>> 35 clock-frequency = <100000000>;
>> 36 compatible = "fixed-clock";
>> 37 };
>>
>> 73 uart@53914000 {
>> 74 compatible = "ns16550a";
>> 75 reg = <0x00 0x53914000 0x1000>;
>> ~_ 76 interrupts = <0 302 4>;
>> 77 reg-shift = <2>;
>> 78 reg-io-width = <4>;
>> 79 clocks = <&misc_clk>;
>> 80 oversampling-rate = <16>;
>> 81 programmable-char-timeout = <4>;
>> 82 status = "okay";
>> 83 xen,path = "/bus@100000/bus@22000000/uart@53914000";
>> 84 xen,reg = <0x0 0x53914000 0x1000 0x0 0x53914000>;
>> 85 xen,force-assign-without-iommu;
>> 86 };
>> 87 };
>>
>> 88 };
>>
>>
>> And this is my dom1.cfg file:
>>
>> 1 name = "dom1"
>> 2 memory = 256
>> 3 vcpus = 4
>> 4
>> 5 kernel = "/boot/xen-dom1/Image"
>> 6 extra = "console=ttyS0,115200n8 earlycon=uart8250,mmio32,0x53914000,115200n8 loglevel=8 root=/dev/xvda rw"
>> 7
>> 8 # UART1 (0x53914000) passthrough to Dom1 console
>> 9 iomem = ["0x53914,1"]
>> 11 irqs = [ 334 ]
>> 12 dtdev = [ "/bus@100000/bus@22000000/uart@53914000"]
>> 13 vif = ["script=vif-route"]
>> 14 device_tree = "/boot/xen-dom1/passthrough.dtb"
>> 15 #
>> 17 disk = ["phy:/dev/vda2,xvda,rw"]
>>
>>
>> Am I doing something wrong? Any help or debugging leads would be really appreciated...
>>
>> Thank you,
>> Beleswar
>>
>>