From a26519680af29afe33d9a45041dee660c47d6498 Mon Sep 17 00:00:00 2001 From: Daniel Ankers Date: Thu, 21 Dec 2006 18:32:47 +0000 Subject: Fix bug accessing data above 4Gb in Sansa git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11828 a1c6a512-1295-4272-9138-f99709370657 --- firmware/target/arm/sandisk/sansa-e200/ata-e200.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'firmware') diff --git a/firmware/target/arm/sandisk/sansa-e200/ata-e200.c b/firmware/target/arm/sandisk/sansa-e200/ata-e200.c index 8323574d69..87a70a5d32 100644 --- a/firmware/target/arm/sandisk/sansa-e200/ata-e200.c +++ b/firmware/target/arm/sandisk/sansa-e200/ata-e200.c @@ -32,6 +32,7 @@ #define BLOCK_SIZE (512) #define SECTOR_SIZE (512) +#define BLOCKS_PER_BANK 0x7a7800 #define STATUS_REG (*(volatile unsigned int *)(0x70008204)) #define REG_1 (*(volatile unsigned int *)(0x70008208)) @@ -440,7 +441,7 @@ void sd_init_device(void) BLOCK_SIZE_REG = card->block_size; /* If this card is > 4Gb, then we need to enable bank switching */ - if(card->numblocks > 0x7a77ff) + if(card->numblocks >= BLOCKS_PER_BANK) { SD_STATE_REG = TRAN; BLOCK_COUNT_REG = 1; @@ -502,10 +503,10 @@ int ata_read_sectors(IF_MV2(int drive,) /* TODO: Select device */ if(current_card == 0) { - if(start > 0x7a77ff) + if(start >= BLOCKS_PER_BANK) { sd_select_bank(1); - start-=0x7a77ff; + start -= BLOCKS_PER_BANK; } else { sd_select_bank(0); } @@ -571,12 +572,12 @@ int ata_write_sectors(IF_MV2(int drive,) ata_led(true); if(current_card == 0) { - if(start <= 0x7a77ff) + if(start < BLOCKS_PER_BANK) { sd_select_bank(0); } else { sd_select_bank(1); - start -= 0x7a77ff; + start -= BLOCKS_PER_BANK; } } -- cgit v1.2.3