From mboxrd@z Thu Jan 1 00:00:00 1970 Date: Sun, 3 Jan 2016 05:53:47 +0100 From: David du Colombier <0intro@gmail.com> To: 9fans@9fans.net Message-ID: <20160103055347.3fd67946@neon.9fans.fr> In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Subject: Re: [9fans] rpi emmc Topicbox-Message-UUID: 7d53e7a6-ead9-11e9-9d60-3106f5b1d025 > in diffing bls' version and sources, i see some significant > differences, but it's not clear which one is more up-to-date. Brian Stuart's version is more up-to-date. Brian Stuart based his changes on the latest changes from Richard Miller, available in /n/sources/contrib/miller/9/bcm. term% ape/diff -Nru /n/sources/plan9/sys/src/9/bcm/emmc.c /n/sources/contrib/miller/9/bcm/emmc.c --- /n/sources/plan9/sys/src/9/bcm/emmc.c Tue Jan 29 22:07:37 2013 +++ /n/sources/contrib/miller/9/bcm/emmc.c Wed Mar 11 12:23:33 2015 @@ -178,7 +178,11 @@ static int datadone(void*) { - return emmc.datadone; + int i; + + u32int *r = (u32int*)EMMCREGS; + i = r[Interrupt]; + return i & (Datadone|Err); } static int @@ -310,9 +314,9 @@ if((c & Respmask) == Resp48busy){ WR(Irpten, Datadone|Err); tsleep(&emmc.r, datadone, 0, 3000); - i = emmc.datadone; - emmc.datadone = 0; WR(Irpten, 0); + emmc.datadone = 0; + i = r[Interrupt]; if((i & Datadone) == 0) print("emmcio: no Datadone after CMD%d\n", cmd); if(i & Err) @@ -380,11 +384,13 @@ &r[Data], buf, len); if(dmawait(DmaChanEmmc) < 0) error(Eio); + if(!write) + cachedinvse(buf, len); WR(Irpten, Datadone|Err); tsleep(&emmc.r, datadone, 0, 3000); - i = emmc.datadone; - emmc.datadone = 0; WR(Irpten, 0); + emmc.datadone = 0; + i = r[Interrupt]; if((i & Datadone) == 0){ print("emmcio: %d timeout intr %ux stat %ux\n", write, i, r[Status]); @@ -407,13 +413,11 @@ mmcinterrupt(Ureg*, void*) { u32int *r; - int i; - r = (u32int*)EMMCREGS; - i = r[Interrupt]; - r[Interrupt] = i & (Datadone|Err); - emmc.datadone = i; - wakeup(&emmc.r); + if(r[Interrupt]&(Datadone|Err)){ + WR(Irpten, 0); + wakeup(&emmc.r); + } } SDio sdio = { -- David du Colombier