Easyelectronics.ru

Электроника для всех
Текущее время: 20 июн 2019, 20:34

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Операции с кэшем (Invalidate, Flush)
СообщениеДобавлено: 16 июл 2018, 10:58 
Заглядывает иногда

Зарегистрирован: 27 мар 2018, 14:17
Сообщения: 52
Здравствуйте. Разбирая текст исходного кода функций драйвера SD host controller на zynq - натолкнулся на функции оперирующие кэшем.

Вот исходный код драйвера для работы с SD Host Controller

https://github.com/Xilinx/embeddedsw/bl ... rc/xsdps.c

Итак, там есть есть функция настройки записи в карту:
s32 XSdPs_WritePolled(XSdPs *InstancePtr, u32 Arg, u32 BlkCnt, const u8 *Buff)

в ней есть вызов функции Xil_DCacheFlushRange((INTPTR)Buff, BlkCnt * XSDPS_BLK_SIZE_512_MASK);

Соответственно в функции чтения с карты:

s32 XSdPs_ReadPolled(XSdPs *InstancePtr, u32 Arg, u32 BlkCnt, u8 *Buff)

есть вызов функции Xil_DCacheInvalidateRange((INTPTR)Buff, BlkCnt * XSDPS_BLK_SIZE_512_MASK);

Если смысл Flush мне еще как-то понятен (сброс кэша в память, если я не ошибаюсь), но смысл функции инвалидации кэша Xil_DCacheInvalidateRange() мне вообще неясен. Как я понял, данные функции необходимы для правильного использования DMA при передаче данных из буфера *Buff в карту и из карты в него же. Что такое инвалидация кэша и почему при настройке ДМА производятся вышеуказанные операции с кэшем? Затрагивает ли каким-либо образом работа ДМА контроллера кэш-память процессора?

Спасибо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Операции с кэшем (Invalidate, Flush)
СообщениеДобавлено: 16 июл 2018, 11:17 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 3179
Кэш - это небольшой блок, читаемый откуда-то (с карты) и работа с этим блоком идет в ОЗУ. Закончили работать, че-то поменяли - надо записать обратно на карту. Это и есть flush. А если меняли-меняли, а потом подумали - "а ну ево нах, ничо не надо" - это и есть invalidate. Или "а ну освободи место от предыдущей работы для новых даннных" - это тоже invalidate.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Операции с кэшем (Invalidate, Flush)
СообщениеДобавлено: 16 июл 2018, 15:36 
Заглядывает иногда

Зарегистрирован: 27 мар 2018, 14:17
Сообщения: 52
BusMaster писал(а):
Кэш - это небольшой блок, читаемый откуда-то (с карты) и работа с этим блоком идет в ОЗУ. Закончили работать, че-то поменяли - надо записать обратно на карту. Это и есть flush. А если меняли-меняли, а потом подумали - "а ну ево нах, ничо не надо" - это и есть invalidate. Или "а ну освободи место от предыдущей работы для новых даннных" - это тоже invalidate.


ДМА работает каким-либо образом к кэшем?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Операции с кэшем (Invalidate, Flush)
СообщениеДобавлено: 16 июл 2018, 16:05 
Заглядывает иногда

Зарегистрирован: 26 сен 2015, 03:02
Сообщения: 82
Про zynq не знаю, но обычно кэш памяти только у процессора, а не DMA.

Если периферийное устройство что-либо записало в память через DMA, то до процессора это может не дойти - при обращении к памяти кэш-контроллер ему подсунет старые данные. После инвалидации кэша процессор прочитает данные корректно, непосредственно из самой памяти.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Операции с кэшем (Invalidate, Flush)
СообщениеДобавлено: 17 июл 2018, 09:31 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 804
sirius11 писал(а):
ДМА работает каким-либо образом к кэшем?

У меня прикол был с Ethernet. Настроил буферы, дескрипторы, прерывания. Вскакивает прерывание, смотрю отладчиком - вот же он пакет, а программа не видит его. Пришлось отключить кэширование этой области. Всё это было на процессоре с MMU во внешней SDRAM.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB