summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
Diffstat (limited to 'firmware')
-rw-r--r--firmware/target/arm/s5l8702/ipod6g/storage_ata-ipod6g.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/firmware/target/arm/s5l8702/ipod6g/storage_ata-ipod6g.c b/firmware/target/arm/s5l8702/ipod6g/storage_ata-ipod6g.c
index 7f5a19b9d0..a924b82959 100644
--- a/firmware/target/arm/s5l8702/ipod6g/storage_ata-ipod6g.c
+++ b/firmware/target/arm/s5l8702/ipod6g/storage_ata-ipod6g.c
@@ -74,7 +74,7 @@ static int ata_reset(void);
74static void ata_power_down(void); 74static void ata_power_down(void);
75 75
76#ifdef ATA_HAVE_BBT 76#ifdef ATA_HAVE_BBT
77char ata_bbt_buf[ATA_BBT_PAGES * 64]; 77char ata_bbt_buf[ATA_BBT_PAGES * 64] STORAGE_ALIGN_ATTR;
78uint16_t (*ata_bbt)[0x20]; 78uint16_t (*ata_bbt)[0x20];
79uint64_t ata_virtual_sectors; 79uint64_t ata_virtual_sectors;
80uint32_t ata_last_offset; 80uint32_t ata_last_offset;
@@ -679,10 +679,13 @@ static int ata_power_up(void)
679 udmatime = 0x3050a52; 679 udmatime = 0x3050a52;
680 param = 0x41; 680 param = 0x41;
681 } 681 }
682 else if (ata_identify_data[88] & BIT(0))
683 {
684 param = 0x40;
685 }
682 if (ata_identify_data[88] & BITRANGE(0, 4)) 686 if (ata_identify_data[88] & BITRANGE(0, 4))
683 { 687 {
684 ata_dma_flags = BIT(2) | BIT(3) | BIT(9) | BIT(10); 688 ata_dma_flags = BIT(2) | BIT(3) | BIT(9) | BIT(10);
685 param |= 0x40;
686 } 689 }
687 } 690 }
688 ata_dma = param ? true : false; 691 ata_dma = param ? true : false;
@@ -907,7 +910,7 @@ int ata_bbt_translate(uint64_t sector, uint32_t count, uint64_t* phys, uint32_t*
907 910
908static int ata_rw_sectors(uint64_t sector, uint32_t count, void* buffer, bool write) 911static int ata_rw_sectors(uint64_t sector, uint32_t count, void* buffer, bool write)
909{ 912{
910 if (((uint32_t)buffer) & 0xf) 913 if (STORAGE_OVERLAP((uint32_t)buffer))
911 { 914 {
912 while (count) 915 while (count)
913 { 916 {