diff options
Diffstat (limited to 'firmware/target/arm/ata-target.h')
-rw-r--r-- | firmware/target/arm/ata-target.h | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/firmware/target/arm/ata-target.h b/firmware/target/arm/ata-target.h index 0881aaef35..82c5a5f555 100644 --- a/firmware/target/arm/ata-target.h +++ b/firmware/target/arm/ata-target.h | |||
@@ -81,3 +81,37 @@ void copy_write_sectors(const unsigned char* buf, int wordcount); | |||
81 | void ata_reset(void); | 81 | void ata_reset(void); |
82 | bool ata_is_coldstart(void); | 82 | bool ata_is_coldstart(void); |
83 | void ata_device_init(void); | 83 | void ata_device_init(void); |
84 | |||
85 | #ifdef HAVE_ATA_DMA | ||
86 | |||
87 | /* IDE DMA controller registers */ | ||
88 | #define IDE_DMA_CONTROL (*(volatile unsigned long *)(0xc3000400)) | ||
89 | #define IDE_DMA_LENGTH (*(volatile unsigned long *)(0xc3000408)) | ||
90 | #define IDE_DMA_ADDR (*(volatile unsigned long *)(0xc300040C)) | ||
91 | |||
92 | /* Maximum multi-word DMA mode supported by the controller */ | ||
93 | #define ATA_MAX_MWDMA 2 | ||
94 | |||
95 | #ifndef BOOTLOADER | ||
96 | /* The PP5020 supports UDMA 4, but it needs cpu boosting and only | ||
97 | * improves performance by ~10% with a stock disk. | ||
98 | * UDMA 2 is stable at 30 Mhz. | ||
99 | * UDMA 1 is stable at 24 Mhz. | ||
100 | */ | ||
101 | #if CPUFREQ_NORMAL >= 30000000 | ||
102 | #define ATA_MAX_UDMA 2 | ||
103 | #elif CPUFREQ_NORMAL >= 24000000 | ||
104 | #define ATA_MAX_UDMA 1 | ||
105 | #else | ||
106 | #error "CPU speeds under 24Mhz have not been tested with DMA" | ||
107 | #endif | ||
108 | #else | ||
109 | /* The bootloader runs at 24 Mhz and needs a slower mode */ | ||
110 | #define ATA_MAX_UDMA 1 | ||
111 | #endif | ||
112 | |||
113 | void ata_dma_set_mode(unsigned char mode); | ||
114 | bool ata_dma_setup(void *addr, unsigned long bytes, bool write); | ||
115 | bool ata_dma_finish(void); | ||
116 | |||
117 | #endif /* HAVE_ATA_DMA */ | ||