Subversion Repositories freemyipod

Rev

Rev 543 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 543 Rev 636
Line 224... Line 224...
224
            | (3 << DMACON_BURST_LEN_SHIFT);
224
            | (3 << DMACON_BURST_LEN_SHIFT);
225
    while ((DMAALLST & DMAALLST_CHAN3_MASK))
225
    while ((DMAALLST & DMAALLST_CHAN3_MASK))
226
        DMACOM3 = DMACOM_CLEARBOTHDONE;
226
        DMACOM3 = DMACOM_CLEARBOTHDONE;
227
    DMABASE3 = buffer;
227
    DMABASE3 = buffer;
228
    DMATCNT3 = (size >> 4) - 1;
228
    DMATCNT3 = (size >> 4) - 1;
-
 
229
    if (direction) clean_dcache();
229
    clean_dcache();
230
    else invalidate_dcache();
230
    DMACOM3 = 4;
231
    DMACOM3 = 4;
231
}
232
}
232
 
233
 
233
static uint32_t nand_transfer_data_collect(uint32_t direction)
234
static uint32_t nand_transfer_data_collect(uint32_t direction)
234
{
235
{
235
    uint32_t timeout = USEC_TIMER + 20000;
236
    uint32_t timeout = USEC_TIMER + 20000;
236
    while (DMAALLST & DMAALLST_DMABUSY3)
237
    while (DMAALLST & DMAALLST_DMABUSY3)
237
        if (nand_timeout(timeout)) return 1;
238
        if (nand_timeout(timeout)) return 1;
238
    if (!direction) invalidate_dcache();
-
 
239
    if (nand_wait_addrdone()) return 1;
239
    if (nand_wait_addrdone()) return 1;
240
    if (!direction) FMCTRL1 = FMCTRL1_CLEARRFIFO | FMCTRL1_CLEARWFIFO;
240
    if (!direction) FMCTRL1 = FMCTRL1_CLEARRFIFO | FMCTRL1_CLEARWFIFO;
241
    else FMCTRL1 = FMCTRL1_CLEARRFIFO;
241
    else FMCTRL1 = FMCTRL1_CLEARRFIFO;
242
    return 0;
242
    return 0;
243
}
243
}
Line 257... Line 257...
257
    ECC_INT_CLR = 1;
257
    ECC_INT_CLR = 1;
258
    SRCPND = (1 << IRQ_ECC);
258
    SRCPND = (1 << IRQ_ECC);
259
    ECC_UNK1 = size;
259
    ECC_UNK1 = size;
260
    ECC_DATA_PTR = databuffer;
260
    ECC_DATA_PTR = databuffer;
261
    ECC_SPARE_PTR = sparebuffer;
261
    ECC_SPARE_PTR = sparebuffer;
262
    clean_dcache();
262
    invalidate_dcache();
263
    ECC_CTRL = type;
263
    ECC_CTRL = type;
264
}
264
}
265
 
265
 
266
static uint32_t ecc_collect(void)
266
static uint32_t ecc_collect(void)
267
{
267
{
268
    uint32_t timeout = USEC_TIMER + 20000;
268
    uint32_t timeout = USEC_TIMER + 20000;
269
    while (!(SRCPND & (1 << IRQ_ECC)))
269
    while (!(SRCPND & (1 << IRQ_ECC)))
270
        if (nand_timeout(timeout)) return ecc_unlock(1);
270
        if (nand_timeout(timeout)) return ecc_unlock(1);
271
    invalidate_dcache();
-
 
272
    ECC_INT_CLR = 1;
271
    ECC_INT_CLR = 1;
273
    SRCPND = (1 << IRQ_ECC);
272
    SRCPND = (1 << IRQ_ECC);
274
    return ecc_unlock(ECC_RESULT);
273
    return ecc_unlock(ECC_RESULT);
275
}
274
}
276
 
275