Browse Source

修改DMA配置,修复总线冲突导致的系统异常

huangliang 1 month ago
parent
commit
64ac61db3b

+ 6 - 6
linux/arch/arm/boot/dts/arkmicro/ark1668ed.dtsi

@@ -494,10 +494,10 @@
 			gpio-mux-pins = <189>;
 		};
 #if 1
-		dmac: dmac@40200000 {
+		dmac: dmac@40E00000 {
 			compatible = "arkmicro,ark-dma";
-			reg = <0x40200000 0x1000>;
-			interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
+			reg = <0x40e00000 0x1000>;
+			interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;//A7(5)	M7(15)
 			dma-channels = <8>;
 			dma-masters = <2>;
 			chan_allocation_order = <1>;
@@ -540,7 +540,7 @@
 			nco-reg = <0x5000007c>;
 			//full-duplex-mode;
 			index = <0>;
-			dmas = <&dmac 16 1 0>, <&dmac 17 1 0>;
+			dmas = <&dmac 16 0 1>, <&dmac 17 1 0>;
 			dma-names = "rx", "tx";
 			clocks = <&i2s0_adac_clk>;
 			pinctrl-0 = <&pinctrl_i2s0dac_sadata_out0 &pinctrl_i2s0dac_sadata_out1 &pinctrl_i2s0dac_sadata_out2
@@ -560,7 +560,7 @@
 			nco-reg = <0x50000084>;
 			//full-duplex-mode;
 			index = <1>;
-			dmas = <&dmac 18 1 0>, <&dmac 19 1 0>;
+			dmas = <&dmac 18 0 1>, <&dmac 19 1 0>;
 			dma-names = "rx", "tx";
 			clocks = <&i2s1_adac_clk>;
 			pinctrl-0 = <&pinctrl_i2s1dac_sadata_out0 &pinctrl_i2s1dac_sadata_out1 &pinctrl_i2s1dac_sadata_out2
@@ -580,7 +580,7 @@
 			nco-reg = <0x5000008c>;
 			full-duplex-mode;
 			index = <2>;
-			dmas = <&dmac 20 1 0>, <&dmac 21 1 0>;
+			dmas = <&dmac 20 0 1>, <&dmac 21 1 0>;
 			dma-names = "rx", "tx";
 			clocks = <&i2s2_adac_clk>;
 			#sound-dai-cells = <0>;

+ 5 - 0
u-boot/board/arkmicro/ark1668ed_devb/ark1668ed_devb.c

@@ -27,6 +27,8 @@ DECLARE_GLOBAL_DATA_PTR;
 #define rSYS_SOFTRESET_CTL		(*(volatile unsigned int *)0x50000068)
 #define rSYS_SOFTRESET_CTL1		(*(volatile unsigned int *)0x5000006c)
 
+#define rSYS_DMAREQ_SEL_REG		(*(volatile unsigned int *)0x500000DC)
+
 #define rMFC_MON_CFG            (*(volatile unsigned int *)0x500000E8)
 
 #define rSYS_ANALOG_REG0		(*(volatile unsigned int *)0x50000100)
@@ -225,6 +227,9 @@ int board_init(void)
 
 	dwmci_select_pad();
 
+	/* set dma_req(from dsp dma) */
+	rSYS_DMAREQ_SEL_REG = 0xffffffff;
+
 	return 0;
 }
 

+ 5 - 0
u-boot/board/arkmicro/ark1668ed_devb_emmc/ark1668ed_devb_emmc.c

@@ -27,6 +27,8 @@ DECLARE_GLOBAL_DATA_PTR;
 #define rSYS_SOFTRESET_CTL		(*(volatile unsigned int *)0x50000068)
 #define rSYS_SOFTRESET_CTL1		(*(volatile unsigned int *)0x5000006c)
 
+#define rSYS_DMAREQ_SEL_REG		(*(volatile unsigned int *)0x500000DC)
+
 #define rMFC_MON_CFG            (*(volatile unsigned int *)0x500000E8)
 
 #define rSYS_ANALOG_REG0		(*(volatile unsigned int *)0x50000100)
@@ -149,6 +151,9 @@ int board_init(void)
 	SDMMC_CLK_CFG &= ~((0x1F << 0) | (0x1 << 6) | (0x1 << 7));
 	SDMMC_CLK_CFG |=  (1 << 7) | (1 << 6) | 2;
 
+	/* set dma_req(from dsp dma) */
+	rSYS_DMAREQ_SEL_REG = 0xffffffff;
+
 	return 0;
 }
 //#ifndef CONFIG_DM_SERIAL