diff options
author | Rafaël Carré <rafael.carre@gmail.com> | 2010-06-22 09:02:56 +0000 |
---|---|---|
committer | Rafaël Carré <rafael.carre@gmail.com> | 2010-06-22 09:02:56 +0000 |
commit | 5a44e43870d6f172aebb9d659cec5427d587f587 (patch) | |
tree | b9252e7a22db90249ed7c138b07196009db1e54a /firmware/target/arm/as3525/sd-as3525v2.c | |
parent | ac9287bdb5b94d575b5130ccdc2fe25c45ca395e (diff) | |
download | rockbox-5a44e43870d6f172aebb9d659cec5427d587f587.tar.gz rockbox-5a44e43870d6f172aebb9d659cec5427d587f587.zip |
revert r26953 + r26954
test_disk says everything is alright but playback is buggy, especially
when playing lossless files
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27044 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/as3525/sd-as3525v2.c')
-rw-r--r-- | firmware/target/arm/as3525/sd-as3525v2.c | 31 |
1 files changed, 6 insertions, 25 deletions
diff --git a/firmware/target/arm/as3525/sd-as3525v2.c b/firmware/target/arm/as3525/sd-as3525v2.c index 238cd7a5eb..386b76e758 100644 --- a/firmware/target/arm/as3525/sd-as3525v2.c +++ b/firmware/target/arm/as3525/sd-as3525v2.c @@ -789,8 +789,6 @@ static int sd_transfer_sectors(IF_MD2(int drive,) unsigned long start, #ifndef HAVE_MULTIDRIVE const int drive = 0; #endif - bool aligned = !((uintptr_t)buf & (CACHEALIGN_SIZE - 1)); - mutex_lock(&sd_mtx); #ifndef BOOTLOADER @@ -830,34 +828,17 @@ static int sd_transfer_sectors(IF_MD2(int drive,) unsigned long start, last_disk_activity = current_tick; dma_retain(); - if(aligned) - { - if(write) - clean_dcache_range(buf, count * SECTOR_SIZE); - else - dump_dcache_range(buf, count * SECTOR_SIZE); - } - const int cmd = write ? SD_WRITE_MULTIPLE_BLOCK : SD_READ_MULTIPLE_BLOCK; do { - void *dma_buf; + void *dma_buf = aligned_buffer; unsigned int transfer = count; + if(transfer > UNALIGNED_NUM_SECTORS) + transfer = UNALIGNED_NUM_SECTORS; - if(aligned) - { - dma_buf = AS3525_PHYSICAL_ADDR(buf); - } - else - { - dma_buf = aligned_buffer; - if(transfer > UNALIGNED_NUM_SECTORS) - transfer = UNALIGNED_NUM_SECTORS; - - if(write) - memcpy(uncached_buffer, buf, transfer * SD_BLOCK_SIZE); - } + if(write) + memcpy(uncached_buffer, buf, transfer * SD_BLOCK_SIZE); /* Interrupt handler might set this to true during transfer */ retry = false; @@ -912,7 +893,7 @@ static int sd_transfer_sectors(IF_MD2(int drive,) unsigned long start, if(!retry) { - if(!write && !aligned) + if(!write) memcpy(buf, uncached_buffer, transfer * SD_BLOCK_SIZE); buf += transfer * SD_BLOCK_SIZE; start += transfer; |