mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-12-08 12:45:26 -05:00
sd-as3525v2: prevent DTO error and DMA problems
We should check sd_wait_for_tran_state() after transfering to prevent data timeout error. Also we should disable DMA channel manually. Should be used with g#1270, without it freezes still can occur on data transfering. Change-Id: If8c6e5547ab14d66237bccf65f83affc7a346e5e
This commit is contained in:
parent
a24abd2a47
commit
219e116fdf
1 changed files with 12 additions and 7 deletions
|
|
@ -867,13 +867,6 @@ sd_transfer_retry_with_reinit:
|
|||
|
||||
MCI_BYTCNT = transfer * SD_BLOCK_SIZE;
|
||||
|
||||
ret = sd_wait_for_tran_state(drive);
|
||||
if (ret < 0)
|
||||
{
|
||||
ret -= 25;
|
||||
goto sd_transfer_error;
|
||||
}
|
||||
|
||||
int arg = start;
|
||||
if(!(card_info[drive].ocr & (1<<30))) /* not SDHC */
|
||||
arg *= SD_BLOCK_SIZE;
|
||||
|
|
@ -907,6 +900,18 @@ sd_transfer_retry_with_reinit:
|
|||
goto sd_transfer_error;
|
||||
}
|
||||
|
||||
ret = sd_wait_for_tran_state(drive);
|
||||
if (ret < 0)
|
||||
{
|
||||
ret -= 25;
|
||||
goto sd_transfer_error;
|
||||
}
|
||||
|
||||
/* According to datasheet DMA channel should be automatically disabled
|
||||
* when transfer completes. But it not true for DMA_PERI_SD.
|
||||
* Disable DMA channel manually to prevent problems with DMA. */
|
||||
dma_disable_channel(1);
|
||||
|
||||
if(!retry)
|
||||
{
|
||||
if(!write && !aligned)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue