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.

[参考译文] TMDS64EVM:在 GPMC 上使用 DMA 传输

Guru**** 2489685 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1557286/tmds64evm-using-dma-transfer-on-gpmc

器件型号:TMDS64EVM


工具/软件:

您好:  

我使用 GPMC 读取外部 NAND 存储器。

我的 dts 文件如下所示:

&gpmc0 {
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&mygpmc1_pins_default>;
	#address-cells = <2>;
	#size-cells = <1>;
	ranges = <2 0 0x00 0x50000000 0x1000000>; /* CS2 @addr 0x50000000, size 0x1000000 */
	
	nand@2,0 {
		compatible = "ti, am64-nand";
		reg = <2 0 0x100>; //cs2
		bank-width = <2>;
		nand-bus-width = <16>;
		
		gpmc,mux-add-data = <2>; // 2 for address-data multiplexing mode.
		gpmc,cs-on-ns = <0>;
		gpmc,cs-rd-off-ns = <190>;
		gpmc,cs-wr-off-ns = <190>; 
		gpmc,adv-on-ns = <0>;
		gpmc,adv-rd-off-ns = <40>;
		gpmc,adv-wr-off-ns = <40>;
		gpmc,oe-on-ns = <80>;
		gpmc,oe-off-ns = <190>;
		gpmc,we-on-ns = <80>;
		gpmc,we-off-ns = <170>;
		gpmc,rd-cycle-ns = <190>;
		gpmc,wr-cycle-ns = <190>;
		gpmc,access-ns = <150>;
		gpmc,page-burst-access-ns = <6>;
		gpmc,bus-turnaround-ns = <12>;
		gpmc,cycle2cycle-delay-ns = <20>;
		gpmc,wr-data-mux-bus-ns = <90>;
		gpmc,wr-access-ns = <190>;
		gpmc,cycle2cycle-samecsen;
		gpmc,cycle2cycle-diffcsen;
	};
}

使用我的代码中的 memcpy 来读取存储器、此器件似乎可以正常工作。

我想知道如何实现 DMA 传输以加快存储器读取速度。

 在 DTS 文件中添加以下行是否足够?  

		ti,nand-xfer-type = "prefetch-dma";

通过添加该线路、CPU 负载似乎相同、我希望此负载会随着 DMA 传输的使用而降低。

是否有任何 AM64 处理器在 GPMC 上实现 DMA 的示例?

此致、  

Julien

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

    您好 Julien、

    内核 dmaegine 有一个 API dmaengine_prep_dma_mac_memcpy()、可用于为 memcpy 设置 DMA 通道。 您可以尝试替换 CPU memcpy。

    您可以以 drivers/mTD/nand/onenand/onenand_OMAP2.c 或 drivers/spi/spi-cadence quadspi.c 为例使用内核驱动程序。