我们使用linux-4.1.13的内核,用mmc2,想让它工作在IRQ模式,按照doc里面的ti-omap-hsmmc.txt里面讲的,dts设置如下:
&mmc2 {
vmmc-supply = <&vmmcsd_fixed>;
compatible = "ti,am33xx-hsmmc";
pinctrl-names = "default", "idle";
pinctrl-0 = <&mmc2_pins>;
pinctrl-1 = <&mmc2_idle>;
interrupts-extended = <&intc 28 &gpio0 23 0>;
bus-width = <4>;
status = "okay";
keep-power-in-suspend;
ti,needs-special-hs-handling;
#address-cells = <1>;
#size-cells = <0>;
};
mmc2_pins: pinmux_mmc2_pins {
pinctrl-single,pins = <
0x80 (PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_csn1.mmc1_clk */
0x84 (PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_csn2.mmc1_cmd */
0x20 (PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_ad8.mmc1_dat0 */
0x24 (PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_ad9.mmc1_dat1 */
0x28 (PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_ad10.mmc1_dat2 */
0x2c (PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_ad11.mmc1_dat3 */
0x64 (PIN_OUTPUT_PULLUP | MUX_MODE7) /* gpmc_a9.RESETn */
0x60 (PIN_OUTPUT_PULLUP | MUX_MODE7) /* gpmc_a8.PDn */
>;
};
mmc2_idle: pinmux_mmc2_idle {
pinctrl-single,pins = <
0x24 (0x3f) /* gpmc_ad9.mmc1_dat1 */
>;
};
但是在dma写数据的时候失败,麻烦帮忙看一下是什么问题?
[ 9.962572] blk_mode:1, ioport:65536
[ 9.962588] mmc1: starting CMD53 arg 92000100 flags 000001b5
[ 9.962596] mmc1: blksz 256 blocks 1 flags 00000100 tsac 1000 ms nsac 0
[ 9.988279] mmc1: req done (CMD53): 0: 00002000 00000000 00000000 00000000
[ 9.988287] mmc1: 0 bytes transferred: -84
[ 9.988355] mwifiex_sdio mmc1:0001:1: FW download, write iomem (0) failed @ 0
[ 10.002361] mmc1: starting CMD52 arg 90000004 flags 00000195
[ 10.002414] mmc1: req done (CMD52): 0: 00001004 00000000 00000000 00000000
Jian Zhou:
DMA映射是怎么做的?
Bing Yao:
回复 Jian Zhou:
DMA是默认的设置,调用的am33xx.dtsi这个文件。
mmc2: mmc@481d8000 { compatible = "ti,omap4-hsmmc"; ti,hwmods = "mmc2"; ti,needs-special-reset; dmas = <&edma 2 &edma 3>; dma-names = "tx", "rx"; interrupts = <28>; interrupt-parent = <&intc>; reg = <0x481d8000 0x1000>; status = "disabled"; };
Bing Yao:
回复 Jian Zhou:
对了,我们使用轮询模式是正常的(compatible = "ti,omap4-hsmmc";),但是,就是IRQ模式的时候出错.