diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2015-09-05 00:33:57 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2015-09-05 00:33:57 +0200 |
commit | faf3f0df06f7a994d58eb48cff7a6ccaa0b847a6 (patch) | |
tree | de4940980d63442c4bd00fae56546be8928af415 /sys/src/9 | |
parent | b9eb7258bdb1b244af91dbe75595d55d3de810d4 (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.c | 13 |
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 = { |