2015-02-26 3 views
1

Я попытался использовать CMA (смежный блок памяти), настроенный с помощью DT. Но как я могу получить доступ к выделенной области памяти из модуля?Ядро Linux: CMA и дерево устройств

Это DT часть:

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

    dsp_reserved: [email protected] { 
     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»?

Спасибо за помощь, Sven

ответ

1

Я нашел решение (называемое в функции зонда()):

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); 
+0

ли зарезервированную память после of_parse_phandle вызова() автоматически должны быть забронированы для специальных драйвер (который разбор DT). И следующий вызов dma_alloc_coherent будет выделять область dma внутри памяти из dsp_reserved? – cosinus0

Смежные вопросы