А как у вас был подключен S2MM канал в PL? Я пытаюсь сказать, если сигнала tlast в принципе нет в шине, а из АЦП его нет, то блок уйдет в ресет, что бы с ним программно ни делали.
Через только dma-proxy нельзя ловить данные из АЦП, потому что там нет tlast, tkeep сигналов, соответственно необходимо что-то свое городить в PL, но чтобы об этом узнать, нужно изучать документацию на DMA блок. Я ведь к тому и клоню, что абстракций над DMA блоком немало (DMAEngine, dma-proxy), но польза от них сводится на нет, как только появляется желание сделать что-то хоть сколь-нибудь необычное, ведь все равно придется изучать принципы работы блока.
Да, если с настройками в цинке все просто - поставил галочку на HPC, указал ширину, потом на PL дизайне поднял два бита AxCACHE как надо и выставил AxPROT, то с CCI немного более мудрёно:
Где-то я слышал, что с каких-то недавних версий CCI включен по умолчанию, не могу найти этому подтверждение, знаю лишь что на 2021.2 мне пришлось его включать самому.
Мораль здесь простая - нужно проверять обязательно.
А как у вас был подключен S2MM канал в PL?
Я пытаюсь сказать, если сигнала tlast в принципе нет в шине, а из АЦП его нет, то блок уйдет в ресет, что бы с ним программно ни делали.
Через только dma-proxy нельзя ловить данные из АЦП, потому что там нет tlast, tkeep сигналов, соответственно необходимо что-то свое городить в PL, но чтобы об этом узнать, нужно изучать документацию на DMA блок.
Я ведь к тому и клоню, что абстракций над DMA блоком немало (DMAEngine, dma-proxy), но польза от них сводится на нет, как только появляется желание сделать что-то хоть сколь-нибудь необычное, ведь все равно придется изучать принципы работы блока.
Да, если с настройками в цинке все просто - поставил галочку на HPC, указал ширину, потом на PL дизайне поднял два бита AxCACHE как надо и выставил AxPROT, то с CCI немного более мудрёно:
нужно записать в регистр цинка LPD_SLCR https://docs.amd.com/r/en-US/ug1087-zynq-ultrascale-registers/lpd_smmu-LPD_SLCR-Register соответствующий AxCACHE бит. Но беда в том что сделать это можно лишь когда APU в ресете. С линуксом xilinx предлагает провернуть это через Register Initialization Table https://docs.amd.com/r/2021.1-English/ug1283-bootgen-user-guide/Zynq-UltraScale-MPSoC-Register-Initialization-Table
Через petalinux tools это выглядит как создание "regs.init" файла со следующим содержимым
И потом упаковка его в образ для запуска
Где-то я слышал, что с каких-то недавних версий CCI включен по умолчанию, не могу найти этому подтверждение, знаю лишь что на 2021.2 мне пришлось его включать самому.
Мораль здесь простая - нужно проверять обязательно.