请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TDA4VH-Q1 工具与软件:
嗨的体验
PCIe 条形空间是否可以在用户 mmap?时配置为可缓存
static int pci_endpoint_test_mmap(struct file *file, struct vm_area_struct *vma)
{
struct pci_endpoint_test *test = to_endpoint_test(file->private_data);
size_t size = vma->vm_end - vma->vm_start;
u64 phyaddrstart = ((u64)vma->vm_pgoff) << PAGE_SHIFT;
struct pci_dev *pdev = NULL;
struct device *dev = NULL;
bool remotecheck;
bool localcheck;
if(!test || !test->pdev){
return -EINVAL;
}
pdev = test->pdev;
dev = &pdev->dev;
remotecheck = pci_endpoint_memory_remote_check(test,phyaddrstart,size);
localcheck = pci_endpoint_memory_local_check(test,phyaddrstart,size);
if(!remotecheck && !localcheck){
dev_err(dev, "Mmap memory not valid 0x%llx !!! \n",phyaddrstart);
return -EPERM;;
}
if (!(file->f_flags & O_SYNC)) {
dev_warn(dev, "NoCache cfg for PCIe memory !!! \n");
file->f_flags |= O_SYNC;
}
//nocache normal (default)
//vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
if (remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff,
size, vma->vm_page_prot)) {
return -EAGAIN;
}
return 0;
}
当 PCIe 条配置为可缓存时、写入和读取数据会不一致。 我们是否需要额外配置?
Quanli
谢谢
