Pārlūkot izejas kodu

提高sd/mmc/sdio时钟频率

huangliang 2 gadi atpakaļ
vecāks
revīzija
b1ed44d647

+ 21 - 9
linux/arch/arm/boot/dts/ark1668e.dtsi

@@ -317,9 +317,13 @@
 				reg = <0x58>;
 				index-offset = <8>;
 				index-mask = <0xf>;
-				index-value = <3>;
-				enable-reg = <0x58>;
-				enable-offset = <5>;			
+				index-value = <1>;
+				div-offset = <0>;
+				div-mask = <0x1f>;
+				div-value = <10>;
+				div-mode = <ARK_CLK_DIVMODE_PONEDOUBLE>;
+				enable-reg = <0x58 0x58>;
+				enable-offset = <5 7>;
 			};
 
 			mmc1clk: mmc1clk {
@@ -329,9 +333,13 @@
 				reg = <0x5c>;
 				index-offset = <8>;
 				index-mask = <0xf>;
-				index-value = <3>;
-				enable-reg = <0x5c>;
-				enable-offset = <5>;			
+				index-value = <1>;
+				div-offset = <0>;
+				div-mask = <0x1f>;
+				div-value = <10>;
+				div-mode = <ARK_CLK_DIVMODE_PONEDOUBLE>;
+				enable-reg = <0x5c 0x5c>;
+				enable-offset = <5 7>;
 			};
 
 			mmc2clk: mmc2clk {
@@ -341,9 +349,13 @@
 				reg = <0x7c>;
 				index-offset = <8>;
 				index-mask = <0xf>;
-				index-value = <3>;
-				enable-reg = <0x7c>;
-				enable-offset = <5>;			
+				index-value = <1>;
+				div-offset = <0>;
+				div-mask = <0x1f>;
+				div-value = <10>;
+				div-mode = <ARK_CLK_DIVMODE_PONEDOUBLE>;
+				enable-reg = <0x7c 0x7c>;
+				enable-offset = <5 7>;
 			};
 
 			lcdclk: lcdclk {

+ 11 - 5
u-boot/board/arkmicro/ark1668e_devb/ark1668e_devb.c

@@ -124,7 +124,7 @@ static void usb_controller_reset(void)
 	rSYS_USB1_CFG = 0x3c2e0020;
 }
 
-#define ARK_MMC_CLK     	24000000
+#define ARK_MMC_CLK     	48000000
 struct dwmci_host dwmcihost[2];
 static int ark_dwmci_init(char *name,u32 regbase, int bus_width, int index)
 {
@@ -136,10 +136,16 @@ static int ark_dwmci_init(char *name,u32 regbase, int bus_width, int index)
 	//dwmci_reset();
 
 	/* config clk in sample delay */
-	rSYS_SD_CLK_CFG &= ~(0x7f << 13);
-	rSYS_SD_CLK_CFG |= 52 << 13;
-	rSYS_SD1_CLK_CFG &= ~(0x7f << 13);
-	rSYS_SD1_CLK_CFG |= 52 << 13;
+	//rSYS_SD_CLK_CFG &= ~(0x7f << 13);
+	//rSYS_SD_CLK_CFG |= 52 << 13;
+	//rSYS_SD1_CLK_CFG &= ~(0x7f << 13);
+	//rSYS_SD1_CLK_CFG |= 52 << 13;
+
+	/* mmc clk axipll(480M) / ((4 + 1) * 2) */
+	rSYS_SD_CLK_CFG &= ~0xfff;
+	rSYS_SD_CLK_CFG |= (1 << 8) | (1 << 7) | (1 << 5) | 4;
+	rSYS_SD1_CLK_CFG &= ~0xfff;
+	rSYS_SD1_CLK_CFG |= (1 << 8) | (1 << 7) | (1 << 5) | 4;
 
     host->name = name;
     host->ioaddr = (void *)regbase;

+ 7 - 1
u-boot/board/arkmicro/ark1668e_devb_emmc/ark1668e_devb_emmc.c

@@ -233,7 +233,7 @@ static void usb_controller_reset(void)
 	udelay(10);
 }
 
-#define ARK_MMC_CLK     	24000000
+#define ARK_MMC_CLK     	48000000
 struct dwmci_host dwmcihost[2];
 static int ark_dwmci_init(char *name,u32 regbase, int bus_width, int index)
 {
@@ -250,6 +250,12 @@ static int ark_dwmci_init(char *name,u32 regbase, int bus_width, int index)
 	//rSYS_SD1_CLK_CFG &= ~(0x7f << 13);
 	//rSYS_SD1_CLK_CFG |= 52 << 13;
 
+	/* mmc clk axipll(480M) / ((4 + 1) * 2) */
+	rSYS_SD_CLK_CFG &= ~0xfff;
+	rSYS_SD_CLK_CFG |= (1 << 8) | (1 << 7) | (1 << 5) | 4;
+	rSYS_SD1_CLK_CFG &= ~0xfff;
+	rSYS_SD1_CLK_CFG |= (1 << 8) | (1 << 7) | (1 << 5) | 4;
+
     host->name = name;
     host->ioaddr = (void *)regbase;
     host->buswidth = bus_width;