This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TDA4VH-Q1:TDA4VH:可针对 PCIE BAR 实现高速缓冲?

Guru**** 2555150 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1409250/tda4vh-q1-tda4vh-cacheable-for-pcie-bar

器件型号: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

谢谢