VladislavS 39 24 ноября, 2015 Опубликовано 24 ноября, 2015 · Жалоба Здравствуйте, Проц Atmel SAM9X25. Включил MMU, ICache и DCache на оперативку. Похоже, процессор перестал видеть входной буфер Ethernet контроллера из-за того что EMAC в режиме DMA пишет в память данные, а кэш не уведомляет. У основных DMA-контроллеров процессора есть бит, что буфер Cacheble, а у EMAС свой DMA и как его подкрутить не понятно. Отключить кэш на эту страницу памяти можно, но... Куда рыть? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 57 24 ноября, 2015 Опубликовано 24 ноября, 2015 · Жалоба У основных DMA-контроллеров процессора есть бит, что буфер Cacheble, а у EMAС свой DMA и как его подкрутить не понятно. Отключить кэш на эту страницу памяти можно, но... Куда рыть? DMA контроллер тут ни при чем. Это настройки регионов MMU, нужно объявить некешируемый регион и туда указать адрес EMAC. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 24 ноября, 2015 Опубликовано 24 ноября, 2015 · Жалоба DMA контроллер тут ни при чем. Это настройки регионов MMU, нужно объявить некешируемый регион и туда указать адрес EMAC. Понятно, что это выход. Хотелось бы знать, все так делают или есть другие способы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 24 ноября, 2015 Опубликовано 24 ноября, 2015 · Жалоба Понятно, что это выход. Хотелось бы знать, все так делают или есть другие способы? Еще можно делать invalidate для буфера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 57 24 ноября, 2015 Опубликовано 24 ноября, 2015 · Жалоба Еще можно делать invalidate для буфера. Так-то оно так, но буфер бывает большой, а кэша жалко :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 24 ноября, 2015 Опубликовано 24 ноября, 2015 · Жалоба Так-то оно так, но буфер бывает большой, а кэша жалко :laughing: Что жалко - забивать кэш буфером? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 57 24 ноября, 2015 Опубликовано 24 ноября, 2015 · Жалоба Что жалко - забивать кэш буфером? Да. Кеш всего 32кб, а буфер занимает половину, вытесняя код программы, в следствие чего теряется быстродействие.... Зачем, когда можно просто объявить его в некэшируемом регионе :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 24 ноября, 2015 Опубликовано 24 ноября, 2015 · Жалоба Да. Кеш всего 32кб, а буфер занимает половину, вытесняя код программы, в следствие чего теряется быстродействие.... Код программы он вытеснить как раз не может, I/D раздельные. Зачем, когда можно просто объявить его в некэшируемом регионе :laughing: Если с буфером предполагается "плотно поработать", то кэширование может понадобится. Но тут уж надо смотреть по обстоятельствам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 25 ноября, 2015 Опубликовано 25 ноября, 2015 · Жалоба Если с буфером предполагается "плотно поработать", то кэширование может понадобится. Но тут уж надо смотреть по обстоятельствам. Если надо плотно работать, можно скопировать его в кэшируемую область. Разместил буфер в некэщируемой области - заработало, как и ожидалось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 57 25 ноября, 2015 Опубликовано 25 ноября, 2015 · Жалоба Если надо плотно работать, можно скопировать его в кэшируемую область. Все правильно, сам тоже так делал, копировал не весь буфер а нужный кусок в кэшируемую область и там его расколупывал Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться