in diffing bls' version and sources, i see some significant differences, but
it's not clear which one is more up-to-date.

anyone?

- erik

----

; 9diff emmc.c
/n/sources/plan9/sys/src/9/bcm/emmc.c:178,184 - emmc.c:178,188
  static int
  datadone(void*)
  {
-       return emmc.datadone;
+       int i;
+ 
+       u32int *r = (u32int*)EMMCREGS;
+       i = r[Interrupt];
+       return i & (Datadone|Err);
  }
  
  static int
/n/sources/plan9/sys/src/9/bcm/emmc.c:310,318 - emmc.c:314,322
        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)
/n/sources/plan9/sys/src/9/bcm/emmc.c:380,390 - emmc.c:384,396
                        &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]);
/n/sources/plan9/sys/src/9/bcm/emmc.c:407,419 - emmc.c:413,423
  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 = {

Reply via email to