set_memory_uc эквивалент для ARM? - PullRequest
       115

set_memory_uc эквивалент для ARM?

0 голосов
/ 05 ноября 2018

Я пытаюсь кросс-скомпилировать драйвер JetSttream для соединения FPGA через PCIe с процессором ARM (hf) Cortex A (на модуле NVIDIA TK1).

На странице github упоминается, что она была портирована на ядро ​​Linux версии 3.10, которая также является версией ядра Linux 4 Tegra (L4T).

Реализация функции драйвера mmap, по-видимому, использует конкретные функции ядра x86 для установки некоторых атрибутов кэша: set_memory_uc и set_memory_wb . Вот исходный код mmap, упомянутые функции используются внизу:

static int mmap(struct file* file, struct vm_area_struct* vma) {
    int ret;
    int slot     = (uintptr_t)PDE_DATA(__parent(__parent(file->f_path.dentry))->d_inode);
    int channel  = (uintptr_t)proc_get_parent_data(file->f_inode);
    int bufferNo = (uintptr_t)PDE_DATA(file->f_inode);

    struct fpga_board* board = &FPCI3.boards[slot];
    struct buffer* buffer = &board->channel[channel].buffer[bufferNo];

    //printk("DATA Board id %d:%d:%d\n", slot, channel, buffer);

    vma->vm_flags |= VM_IO | VM_DONTEXPAND | VM_DONTDUMP;
    //vma->vm_page_prot = 0;
    vma->vm_page_prot   = pgprot_noncached(vma->vm_page_prot);

    //return ENOMEM;
    set_memory_uc((uintptr_t)buffer->memoryAddress, getPageCount(BUF_SIZE));
    ret=dma_mmap_attrs(&board->pcidev->dev, vma, buffer->memoryAddress, buffer->dmaAddress, BUF_SIZE, 0);
    set_memory_wb((uintptr_t)buffer->memoryAddress, getPageCount(BUF_SIZE));
    return ret;
}

(Как) я могу воспроизвести предполагаемое поведение для моего процессора ARM?

Источник

Редактировать: здесь упоминается, что они относятся к x86, и, конечно, он не компилируется из-за их отсутствия: Ссылка

...