Subversion Repositories freemyipod

Rev

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

Rev 213 Rev 223
Line 2251... Line 2251...
2251
    cputs(CONSOLE_BOOT, "Scanning flash...\n");
2251
    cputs(CONSOLE_BOOT, "Scanning flash...\n");
2252
#ifdef HAVE_LCD
2252
#ifdef HAVE_LCD
2253
    lcdconsole_progressbar(&progressbar, 0, ftl_nand_type->userblocks + 0x17);
2253
    lcdconsole_progressbar(&progressbar, 0, ftl_nand_type->userblocks + 0x17);
2254
#endif
2254
#endif
2255
    uint32_t ppb = ftl_nand_type->pagesperblock * ftl_banks;
2255
    uint32_t ppb = ftl_nand_type->pagesperblock * ftl_banks;
2256
    memset(&ftl_cxt, 0x00, 0x800);
2256
    memset(&ftl_cxt, 0x00, sizeof(ftl_cxt));
2257
    memset(ftl_map, 0xff, 0x4000);
2257
    memset(ftl_map, 0xff, sizeof(ftl_map));
2258
    memset(blk_usn, 0x00, 0x8000);
2258
    memset(blk_usn, 0x00, sizeof(blk_usn));
2259
    memset(blk_type, 0x00, 0x2000);
2259
    memset(blk_type, 0x00, sizeof(blk_type));
2260
    memset(ftl_erasectr, 0x00, 0x4000);
2260
    memset(ftl_erasectr, 0x00, sizeof(ftl_erasectr));
2261
    memset(erasectr_usn, 0xff, 32);
2261
    memset(erasectr_usn, 0xff, sizeof(erasectr_usn));
2262
    user_usn = 0;
2262
    user_usn = 0;
2263
    meta_usn = 0xffffffff;
2263
    meta_usn = 0xffffffff;
2264
    for (i = 0; i < ftl_nand_type->userblocks + 0x17; i++)
2264
    for (i = 0; i < ftl_nand_type->userblocks + 0x17; i++)
2265
    {
2265
    {
2266
        uint32_t ret = ftl_vfl_read((i + 1) * ppb - 1, 0, &ftl_sparebuffer[0], 1, 0);
2266
        uint32_t ret = ftl_vfl_read((i + 1) * ppb - 1, 0, &ftl_sparebuffer[0], 1, 0);
Line 2519... Line 2519...
2519
uint32_t ftl_init(void)
2519
uint32_t ftl_init(void)
2520
{
2520
{
2521
    if (ftl_initialized) return 0;
2521
    if (ftl_initialized) return 0;
2522
    mutex_init(&ftl_mtx);
2522
    mutex_init(&ftl_mtx);
2523
    uint32_t i;
2523
    uint32_t i;
2524
    uint32_t result = 0;
-
 
2525
    uint32_t foundsignature, founddevinfo, blockwiped, repaired, skip;
-
 
2526
    int rc;
2524
    int rc;
2527
    if ((rc = nand_device_init()) != 0) //return 1;
2525
    if ((rc = nand_device_init()) != 0)
2528
        panicf(PANIC_FATAL, "FTL: Lowlevel NAND driver init failed: %d", rc);
2526
        panicf(PANIC_FATAL, "FTL: Lowlevel NAND driver init failed: %d", rc);
2529
    ftl_banks = 0;
2527
    ftl_banks = 0;
2530
    for (i = 0; i < 4; i++)
2528
    for (i = 0; i < 4; i++)
2531
        if (nand_get_device_type(i) != 0) ftl_banks = i + 1;
2529
        if (nand_get_device_type(i) != 0) ftl_banks = i + 1;
2532
    ftl_nand_type = nand_get_device_type(0);
2530
    ftl_nand_type = nand_get_device_type(0);
2533
    foundsignature = 0;
-
 
2534
    blockwiped = 1;
-
 
2535
    for (i = 0; i < ftl_nand_type->pagesperblock; i++)
-
 
2536
    {
-
 
2537
        result = nand_read_page(0, i, ftl_buffer, NULL, 1, 1);
-
 
2538
        if ((result & 0x11F) == 0)
-
 
2539
        {
-
 
2540
            blockwiped = 0;
-
 
2541
            if (((uint32_t*)ftl_buffer)[0] != 0x41303034) continue;
-
 
2542
            foundsignature = 1;
-
 
2543
            break;
-
 
2544
        }
-
 
2545
        else if ((result & 2) != 2) blockwiped = 0;
-
 
2546
    }
-
 
2547
 
2531
 
2548
    founddevinfo = ftl_has_devinfo();
2532
    if (!ftl_has_devinfo())
2549
 
-
 
2550
    repaired = 0;
-
 
2551
    skip = 0;
-
 
2552
    if (founddevinfo == 0)
-
 
2553
    {
2533
    {
2554
           DEBUGF("FTL: No DEVICEINFO found!");
2534
           DEBUGF("FTL: No DEVICEINFO found!");
2555
        return -1;
2535
        return -1;
2556
    }
2536
    }
2557
    if (foundsignature != 0 && (result & 0x11F) != 0)
-
 
2558
    {
-
 
2559
        DEBUGF("FTL: Problem with the signature!");
-
 
2560
        return -2;
-
 
2561
    }
-
 
2562
    if (ftl_vfl_open() == 0)
2537
    if (ftl_vfl_open() == 0)
2563
    {
2538
    {
2564
        if (ftl_open() == 0)
2539
        if (ftl_open() == 0)
2565
        {
2540
        {
2566
            ftl_initialized = true;
2541
            ftl_initialized = true;
Line 2582... Line 2557...
2582
        }
2557
        }
2583
    }
2558
    }
2584
 
2559
 
2585
    DEBUGF("FTL: Initialization failed!");
2560
    DEBUGF("FTL: Initialization failed!");
2586
 
2561
 
2587
    return -3;
2562
    return -2;
2588
}
2563
}