【问题标题】:Linux kernel: CMA & Device TreeLinux 内核:CMA 和设备树
【发布时间】:2015-02-28 02:05:43
【问题描述】:

我尝试使用配置了 DT 的 CMA(连续内存分配器)。但是我怎样才能从模块中访问分配的内存区域呢?

这是DT部分:

reserved-memory {
    #address-cells = <1>;
    #size-cells = <1>;
    ranges;

    dsp_reserved: dsp@83400000 {
        reg = <0x83400000 0x400000>;
        no-map;
    };
};

c64_dsp {
    compatible = "c64-dsp";
    interrupt-parent = <&intc>;
    interrupts = <26>;
    memory-region = <&dsp_reserved>;
};

如何在自己的驱动程序中获取保留的内存区域“dsp_reserved”?这个区域是否已经被“dma_alloc_coherent”请求了?有没有类似“platform_get_irq”的函数?

感谢您的帮助, 斯文

【问题讨论】:

    标签: linux kernel kernel-module device-tree


    【解决方案1】:

    我找到了一个解决方案(在 probe() 函数中调用):

    memory = of_parse_phandle(dev->of_node, "memory-region", 0);
    if (!memory) {
        return -ENODEV;
    }
    
    addr = of_translate_address(memory,
                 of_get_address(memory, 0, &memory_size, NULL));
    
    virt_addr = phys_to_virt(addr);
    

    【讨论】:

    • 在调用 of_parse_phandle() 后保留的内存是否应该为您的特殊驱动程序(解析 DT)预订。而下一次调用 dma_alloc_coherent 将从 dsp_reserved 分配内存中的 dma 区域?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 2015-04-13
    • 2023-01-03
    • 2021-03-23
    • 2012-06-13
    • 1970-01-01
    • 2011-02-10
    相关资源
    最近更新 更多