реклама на сайте
подробности

 
 
> Device driver + DMA, dma_set_mask и dma_set_coherent_mask
Gleb80
сообщение Jul 2 2015, 11:13
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 75
Регистрация: 25-09-08
Из: Москва
Пользователь №: 40 470



Приветствую уважаемые! Осваиваю тему написания драйверов устройств под Linux с использованием DMA. Читаю документацию по DMA API. Там есть такие слова:
The query for streaming mappings is performed via a call to
dma_set_mask():

int dma_set_mask(struct device *dev, u64 mask);

The query for consistent allocations is performed via a call
to dma_set_coherent_mask():

int dma_set_coherent_mask(struct device *dev, u64 mask);

В целом понятно, что функции проверяют способность DMA аппаратуры работать с адресами, маска которых передается в параметре mask. Но мне не понятно следующее:
1. Что подразумевается под streaming mappings и под consistent allocations?
2. В чем различие этих двух ф-ций?
3. Что значит слово coherent в данном контексте?

Сообщение отредактировал Gleb80 - Jul 2 2015, 11:15
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
dm.pogrebnoy
сообщение Jul 6 2015, 14:51
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 747
Регистрация: 11-04-07
Пользователь №: 26 933



В продолжении темы, если позволите. Есть задача передавать данные посредством DMA Linux из памяти DDR во внешнее устройство и назад. Столкнулся с проблемой, что не могу принять более 128Кбайт данных от устройства, когда как в устройство данных отсылаются хорошо. Для моего контроллера DMA важно, что бы буфер в памяти лежал физически непрерывно. Для этого выделил системе CMA область, для инициализации буфера использую функцию dmam_alloc_coherent().
Через символьное устройство имею доступ к этим буферам. На передачу очень похоже что все работает (вижу внутрисистемным аппаратным отладчиком). А вот на прием данных в буфер DDR записывается только первые 128Кбайт. Какой здесь может быть подвох?

P.S. Если кого-нибудь не затруднит, можете взглянуть на модуль ядра, который я использую. http://forums.xilinx.com/xlnx/attachments/...3/1/dma_proxy.c


--------------------
Go to the top of the page
 
+Quote Post
Gleb80
сообщение Jul 7 2015, 15:15
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 75
Регистрация: 25-09-08
Из: Москва
Пользователь №: 40 470



Цитата(dm.pogrebnoy @ Jul 6 2015, 17:51) *
не могу принять более 128Кбайт данных от устройства


а это может быть как-то связано с размером страницы виртуальной памяти, которую выделяет ОС?
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 15:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01383 секунд с 7
ELECTRONIX ©2004-2016