diff options
Diffstat (limited to 'firmware/target/mips/ingenic_jz47xx/ata-sd-jz4760.c')
-rw-r--r-- | firmware/target/mips/ingenic_jz47xx/ata-sd-jz4760.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/firmware/target/mips/ingenic_jz47xx/ata-sd-jz4760.c b/firmware/target/mips/ingenic_jz47xx/ata-sd-jz4760.c index 1960fcbd35..3810852686 100644 --- a/firmware/target/mips/ingenic_jz47xx/ata-sd-jz4760.c +++ b/firmware/target/mips/ingenic_jz47xx/ata-sd-jz4760.c | |||
@@ -57,8 +57,6 @@ static struct semaphore sd_wakeup[NUM_DRIVES]; | |||
57 | 57 | ||
58 | static int use_4bit[NUM_DRIVES]; | 58 | static int use_4bit[NUM_DRIVES]; |
59 | static int num_6[NUM_DRIVES]; | 59 | static int num_6[NUM_DRIVES]; |
60 | static int sd2_0[NUM_DRIVES]; | ||
61 | |||
62 | 60 | ||
63 | //#define DEBUG(x...) logf(x) | 61 | //#define DEBUG(x...) logf(x) |
64 | #define DEBUG(x, ...) | 62 | #define DEBUG(x, ...) |
@@ -698,7 +696,7 @@ static inline unsigned int jz_sd_calc_clkrt(const int drive, unsigned int rate) | |||
698 | unsigned int clkrt = 0; | 696 | unsigned int clkrt = 0; |
699 | unsigned int clk_src = cpu_frequency / __cpm_get_mscdiv(); /* MSC_CLK */ | 697 | unsigned int clk_src = cpu_frequency / __cpm_get_mscdiv(); /* MSC_CLK */ |
700 | 698 | ||
701 | if (!sd2_0[drive] && rate > SD_CLOCK_FAST) | 699 | if (!card[drive].sd2plus && rate > SD_CLOCK_FAST) |
702 | rate = SD_CLOCK_FAST; | 700 | rate = SD_CLOCK_FAST; |
703 | 701 | ||
704 | while (rate < clk_src) | 702 | while (rate < clk_src) |
@@ -1192,7 +1190,6 @@ static int sd_init_card_state(const int drive, struct sd_request *request) | |||
1192 | (request->response[3+i*4]<< 8) | request->response[4+i*4]); | 1190 | (request->response[3+i*4]<< 8) | request->response[4+i*4]); |
1193 | 1191 | ||
1194 | sd_parse_csd(&card[drive]); | 1192 | sd_parse_csd(&card[drive]); |
1195 | sd2_0[drive] = (card_extract_bits(card[drive].csd, 127, 2) == 1); | ||
1196 | 1193 | ||
1197 | logf("CSD: %08lx%08lx%08lx%08lx", card[drive].csd[0], card[drive].csd[1], card[drive].csd[2], card[drive].csd[3]); | 1194 | logf("CSD: %08lx%08lx%08lx%08lx", card[drive].csd[0], card[drive].csd[1], card[drive].csd[2], card[drive].csd[3]); |
1198 | DEBUG("SD card is ready"); | 1195 | DEBUG("SD card is ready"); |
@@ -1261,7 +1258,7 @@ static int sd_select_card(const int drive) | |||
1261 | if (retval) | 1258 | if (retval) |
1262 | return retval; | 1259 | return retval; |
1263 | 1260 | ||
1264 | if (sd2_0[drive]) | 1261 | if (card[drive].sd2plus) |
1265 | { | 1262 | { |
1266 | retval = sd_read_switch(drive, &request); | 1263 | retval = sd_read_switch(drive, &request); |
1267 | if (!retval) | 1264 | if (!retval) |
@@ -1292,7 +1289,6 @@ static int __sd_init_device(const int drive) | |||
1292 | /* Initialise card data as blank */ | 1289 | /* Initialise card data as blank */ |
1293 | memset(&card[drive], 0, sizeof(tCardInfo)); | 1290 | memset(&card[drive], 0, sizeof(tCardInfo)); |
1294 | 1291 | ||
1295 | sd2_0[drive] = 0; | ||
1296 | num_6[drive] = 0; | 1292 | num_6[drive] = 0; |
1297 | use_4bit[drive] = 0; | 1293 | use_4bit[drive] = 0; |
1298 | active[drive] = 0; | 1294 | active[drive] = 0; |
@@ -1402,7 +1398,7 @@ static inline void sd_stop_transfer(const int drive) | |||
1402 | mutex_unlock(&sd_mtx[drive]); | 1398 | mutex_unlock(&sd_mtx[drive]); |
1403 | } | 1399 | } |
1404 | 1400 | ||
1405 | int sd_transfer_sectors(IF_MD(const int drive,) unsigned long start, int count, void* buf, bool write) | 1401 | int sd_transfer_sectors(IF_MD(const int drive,) sector_t start, int count, void* buf, bool write) |
1406 | { | 1402 | { |
1407 | struct sd_request request; | 1403 | struct sd_request request; |
1408 | struct sd_response_r1 r1; | 1404 | struct sd_response_r1 r1; |
@@ -1427,11 +1423,12 @@ int sd_transfer_sectors(IF_MD(const int drive,) unsigned long start, int count, | |||
1427 | if ((retval = sd_unpack_r1(&request, &r1))) | 1423 | if ((retval = sd_unpack_r1(&request, &r1))) |
1428 | goto err; | 1424 | goto err; |
1429 | 1425 | ||
1426 | // XXX 64-bit | ||
1430 | sd_send_cmd(drive, &request, | 1427 | sd_send_cmd(drive, &request, |
1431 | (count > 1) ? | 1428 | (count > 1) ? |
1432 | (write ? SD_WRITE_MULTIPLE_BLOCK : SD_READ_MULTIPLE_BLOCK) : | 1429 | (write ? SD_WRITE_MULTIPLE_BLOCK : SD_READ_MULTIPLE_BLOCK) : |
1433 | (write ? SD_WRITE_BLOCK : SD_READ_SINGLE_BLOCK), | 1430 | (write ? SD_WRITE_BLOCK : SD_READ_SINGLE_BLOCK), |
1434 | sd2_0[drive] ? start : (start * SD_BLOCK_SIZE), | 1431 | card[drive].sd2plus ? start : (start * SD_BLOCK_SIZE), |
1435 | count, SD_BLOCK_SIZE, RESPONSE_R1, buf); | 1432 | count, SD_BLOCK_SIZE, RESPONSE_R1, buf); |
1436 | if ((retval = sd_unpack_r1(&request, &r1))) | 1433 | if ((retval = sd_unpack_r1(&request, &r1))) |
1437 | goto err; | 1434 | goto err; |
@@ -1451,12 +1448,12 @@ err: | |||
1451 | return retval; | 1448 | return retval; |
1452 | } | 1449 | } |
1453 | 1450 | ||
1454 | int sd_read_sectors(IF_MD(int drive,) unsigned long start, int count, void* buf) | 1451 | int sd_read_sectors(IF_MD(int drive,) sector_t start, int count, void* buf) |
1455 | { | 1452 | { |
1456 | return sd_transfer_sectors(IF_MD(drive,) start, count, buf, false); | 1453 | return sd_transfer_sectors(IF_MD(drive,) start, count, buf, false); |
1457 | } | 1454 | } |
1458 | 1455 | ||
1459 | int sd_write_sectors(IF_MD(int drive,) unsigned long start, int count, const void* buf) | 1456 | int sd_write_sectors(IF_MD(int drive,) sector_t start, int count, const void* buf) |
1460 | { | 1457 | { |
1461 | return sd_transfer_sectors(IF_MD(drive,) start, count, (void*)buf, true); | 1458 | return sd_transfer_sectors(IF_MD(drive,) start, count, (void*)buf, true); |
1462 | } | 1459 | } |