Mike (mwester) wrote:
Tested. The write fix is *definitely* needed as well; revision 4080 fixes both read and write. Thanks all - we're pretty close to being able to call the .24 kernel "stable" for the gta01, I think.

No we're not. I spoke too soon, that'll teach me to always test thoroughly. Reads work fine with this change, but writes fail in strange ways. My apologies to anyone inconvenienced by my erroneous declaration of success :(

We need to decrement fifo as we write the unaligned data out in the first loop (s3cmci.c):

               host->pio_bytes -= fifo;
               host->pio_count += fifo;

               /* we might have an unaligned start of data */
-                while ((unsigned long)host->pio_ptr & 0x03)
+                while (((unsigned long)host->pio_ptr & 0x03) && fifo--)
writeb(*(host->pio_ptr++), host->base + host->sdidata_b);

               /* and a major chunk of data in the middle */
               for (; fifo >= 4; fifo -=4) {
                       writel(*(u32 *) host->pio_ptr, to_ptr);
                       host->pio_ptr += 4;
               }

               /* as well as some non-modulo-four trailer */
               while (fifo--)
writeb(*(host->pio_ptr++), host->base + host->sdidata_b);
       }

       enable_imask(host, S3C2410_SDIIMSK_TXFIFOHALF);


Still not thoroughly tested, and it sure is slow with all that debug going to the console, but it works better than it did a few minutes ago.

Mike (mwester)

Reply via email to