Как аннулировать кэш данных L1 для определенного диапазона памяти на PowerPC PQ-III e500? - PullRequest
2 голосов
/ 30 мая 2011

Специальный блок памяти будет периодически обновляться задачей DMA. Когда другая Задача пыталась часто искать данные в этом блоке, существует MCE (Machine Check Exception) о проверке четности кэша данных L1. Могу ли я сделать недействительным кэш данных L1 для этого блока памяти полностью или только после обновления DMA?

В libogc есть интересный API, такой как:

void DCInvalidateRange(void *startaddress,u32 len); 

    .globl DCInvalidateRange
DCInvalidateRange:
    cmplwi r4, 0   # zero or negative size?
    blelr
    clrlwi. r5, r3, 27  # check for lower bits set in address
    beq 1f
    addi r4, r4, 0x20 
1:
    addi r4, r4, 0x1f
    srwi r4, r4, 5
    mtctr r4
2:
    dcbi r0, r3
    addi r3, r3, 0x20
    bdnz 2b
    blr

Я не знаком ни с ASM, ни с ASM на PowerPC. Будут ли люди рекомендовать ссылки или описания этой операции?

1 Ответ

2 голосов
/ 23 июня 2011

Вот лучший ресурс, Руководство по средам программирования PowerPC

Есть ли у вас конкретные вопросы о кеше?

Работая с DMA, ваш выбор отслеживаетсяили очистка кеша.Чтобы получить эту ошибку, вы, вероятно, включили отслеживание.Таким образом, проблема, вероятно, в том, что у вас есть данные в кеше L1, которые не инициализированы.

Есть второй ресурс, E500 Core Справочное руководство , который я не смог загрузить в данный момент, но которыйдолжен дать хорошее описание того, как инициализировать кеш.Я все время пользуюсь книгой E-600.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...