shithub: riscv

Download patch

ref: e760ded4943d802d7012514d56e18a8ddb54cc56
parent: 524f8c2d5374e34bbb665e7a52484859ae9e3e59
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Sat Jun 18 09:19:55 EDT 2022

imx8/usdhc: implement highspeed mode (50Mhz)

--- a/sys/src/9/imx8/usdhc.c
+++ b/sys/src/9/imx8/usdhc.c
@@ -10,6 +10,7 @@
 enum {
 	Initfreq	= 400000,	/* initialisation frequency for MMC */
 	SDfreq		= 25*Mhz,	/* standard SD frequency */
+	SDfreqhs	= 50*Mhz,	/* highspeed frequency */
 	DTO		= 14,		/* data timeout exponent (guesswork) */
 
 	GoIdle		= 0,		/* mmc/sdio go idle state */
@@ -446,6 +447,15 @@
 				WR(Control0, (RR(Control0) & ~DwidthMask) | Dwidth4);
 				break;
 			}
+		} else {
+			/*
+			 * If card switched into high speed mode, increase clock speed
+			 */
+			if((arg&0x8000000F) == 0x80000001){
+				delay(1);
+				usdhcclk(SDfreqhs);
+				delay(1);
+			}
 		}
 	}else if(cmd == IORWdirect && (arg & ~0xFF) == (1<<31|0<<28|7<<9)){
 		switch(arg & 0x3){
@@ -518,4 +528,5 @@
 	usdhccmd,
 	usdhciosetup,
 	usdhcio,
+	.highspeed = 1,
 };