summaryrefslogtreecommitdiff
path: root/sys/src/9
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2015-09-05 00:33:57 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2015-09-05 00:33:57 +0200
commitfaf3f0df06f7a994d58eb48cff7a6ccaa0b847a6 (patch)
treede4940980d63442c4bd00fae56546be8928af415 /sys/src/9
parentb9eb7258bdb1b244af91dbe75595d55d3de810d4 (diff)
zynq: fix cache flush bug for emmc driver (have to invalidate cache *before* read)
Diffstat (limited to 'sys/src/9')
-rw-r--r--sys/src/9/zynq/emmc.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/sys/src/9/zynq/emmc.c b/sys/src/9/zynq/emmc.c
index f13d68ac3..8308d11f8 100644
--- a/sys/src/9/zynq/emmc.c
+++ b/sys/src/9/zynq/emmc.c
@@ -351,8 +351,13 @@ emmciosetup(int write, void *buf, int bsize, int bcount)
pa = PADDR(buf);
if(write){
+ /* flush cache before write */
cleandse((uchar*)buf, (uchar*)buf+len);
clean2pa(pa, pa+len);
+ } else {
+ /* invalidate cache before read */
+ invaldse((uchar*)buf, (uchar*)buf+len);
+ inval2pa(pa, pa+len);
}
r = emmc.regs;
@@ -362,7 +367,7 @@ emmciosetup(int write, void *buf, int bsize, int bcount)
}
static void
-emmcio(int write, uchar *buf, int len)
+emmcio(int write, uchar *, int)
{
u32int *r;
int i;
@@ -387,12 +392,6 @@ emmcio(int write, uchar *buf, int len)
}
if(i)
r[Interrupt] = i;
-
- if(!write){
- uintptr pa = PADDR(buf);
- invaldse((uchar*)buf, (uchar*)buf+len);
- inval2pa(pa, pa+len);
- }
}
SDio sdio = {