| Index: embios/trunk/target/ipodnano2g/ftl.c | 
| — | — | @@ -703,11 +703,11 @@ | 
| 704 | 704 |      uint32_t spareused = ftl_vfl_cxt[bank].spareused;
 | 
| 705 | 705 |      for (spareindex = 0; spareindex < spareused; spareindex++)
 | 
| 706 | 706 |          if (ftl_vfl_cxt[bank].remaptable[spareindex] == block)
 | 
| 707 |   | -		{
 | 
|   | 707 | +        {
 | 
| 708 | 708 |              DEBUGF("FTL: VFL: Following remapped block: %d => %d",
 | 
| 709 | 709 |                     block, ftl_vfl_cxt[bank].firstspare + spareindex);
 | 
| 710 | 710 |              return ftl_vfl_cxt[bank].firstspare + spareindex;
 | 
| 711 |   | -		}
 | 
|   | 711 | +        }
 | 
| 712 | 712 |      return block;
 | 
| 713 | 713 |  }
 | 
| 714 | 714 |  
 | 
| — | — | @@ -730,7 +730,7 @@ | 
| 731 | 731 |  {
 | 
| 732 | 732 |      if (ftl_vfl_check_remap_scheduled(bank, block) == 1) return;
 | 
| 733 | 733 |      panicf(PANIC_FATAL, "FTL: Scheduling bank %u block %u for remap!",
 | 
| 734 |   | -	       (unsigned)bank, (unsigned)block);
 | 
|   | 734 | +           (unsigned)bank, (unsigned)block);
 | 
| 735 | 735 |      if (ftl_vfl_cxt[bank].scheduledstart == ftl_vfl_cxt[bank].spareused)
 | 
| 736 | 736 |          return;
 | 
| 737 | 737 |      ftl_vfl_cxt[bank].remaptable[--ftl_vfl_cxt[bank].scheduledstart] = block;
 | 
| — | — | @@ -817,7 +817,7 @@ | 
| 818 | 818 |      uint32_t i;
 | 
| 819 | 819 |      uint32_t newblock = 0, newidx;
 | 
| 820 | 820 |      panicf(PANIC_FATAL, "FTL: Remapping bank %u block %u!",
 | 
| 821 |   | -	       (unsigned)bank, (unsigned)block);
 | 
|   | 821 | +           (unsigned)bank, (unsigned)block);
 | 
| 822 | 822 |      if (bank >= ftl_banks || block >= ftl_nand_type->blocks) return 0;
 | 
| 823 | 823 |      for (i = 0; i < ftl_vfl_cxt[bank].sparecount; i++)
 | 
| 824 | 824 |          if (ftl_vfl_cxt[bank].remaptable[i] == 0)
 | 
| — | — | @@ -904,10 +904,10 @@ | 
| 905 | 905 |                              - ftl_nand_type->userblocks - 0x17;
 | 
| 906 | 906 |      uint32_t abspage = vpage + ppb * syshyperblocks;
 | 
| 907 | 907 |      if (abspage + ftl_banks - 1 >= ftl_nand_type->blocks * ppb || abspage < ppb)
 | 
| 908 |   | -	{
 | 
|   | 908 | +    {
 | 
| 909 | 909 |          DEBUGF("FTL: Trying to read out-of-bounds vPage %u", (unsigned)vpage);
 | 
| 910 | 910 |          return 4;
 | 
| 911 |   | -	}
 | 
|   | 911 | +    }
 | 
| 912 | 912 |  
 | 
| 913 | 913 |      uint32_t bank = abspage % ftl_banks;
 | 
| 914 | 914 |      uint32_t block = abspage / (ftl_nand_type->pagesperblock * ftl_banks);
 | 
| — | — | @@ -980,11 +980,11 @@ | 
| 981 | 981 |                              - ftl_nand_type->userblocks - 0x17;
 | 
| 982 | 982 |      uint32_t abspage = vpage + ppb * syshyperblocks;
 | 
| 983 | 983 |      if (abspage + count > ftl_nand_type->blocks * ppb || abspage < ppb)
 | 
| 984 |   | -	{
 | 
|   | 984 | +    {
 | 
| 985 | 985 |          DEBUGF("FTL: Trying to write out-of-bounds vPage %u",
 | 
| 986 | 986 |                 (unsigned)vpage);
 | 
| 987 | 987 |          return 4;
 | 
| 988 |   | -	}
 | 
|   | 988 | +    }
 | 
| 989 | 989 |  
 | 
| 990 | 990 |      uint32_t bank[5];
 | 
| 991 | 991 |      uint32_t block[5];
 | 
| — | — | @@ -1095,11 +1095,11 @@ | 
| 1096 | 1096 |                                          vflcxtidx = k;
 | 
| 1097 | 1097 |                                      }
 | 
| 1098 | 1098 |                          if (vflcxtidx == 4)
 | 
| 1099 |   | -						{
 | 
|   | 1099 | +                        {
 | 
| 1100 | 1100 |                              DEBUGF("FTL: No VFL CXT block found on bank %u!",
 | 
| 1101 | 1101 |                                     (unsigned)i);
 | 
| 1102 |   | -						    return 1;
 | 
| 1103 |   | -						}
 | 
|   | 1102 | +                            return 1;
 | 
|   | 1103 | +                        }
 | 
| 1104 | 1104 |                          last = 0;
 | 
| 1105 | 1105 |                          uint32_t max = ftl_nand_type->pagesperblock;
 | 
| 1106 | 1106 |                          for (k = 8; k < max; k += 8)
 | 
| — | — | @@ -1126,10 +1126,10 @@ | 
| 1127 | 1127 |                      }
 | 
| 1128 | 1128 |          }
 | 
| 1129 | 1129 |          else
 | 
| 1130 |   | -		{
 | 
|   | 1130 | +        {
 | 
| 1131 | 1131 |              DEBUGF("FTL: Couldn't load bank %u lowlevel BBT!", (unsigned)i);
 | 
| 1132 |   | -		    return 1;
 | 
| 1133 |   | -		}
 | 
|   | 1132 | +            return 1;
 | 
|   | 1133 | +        }
 | 
| 1134 | 1134 |      cxt = ftl_vfl_get_newest_cxt();
 | 
| 1135 | 1135 |      for (i = 0; i < ftl_banks; i++)
 | 
| 1136 | 1136 |          memcpy(ftl_vfl_cxt[i].ftlctrlblocks, cxt->ftlctrlblocks, 6);
 | 
| — | — | @@ -1192,10 +1192,10 @@ | 
| 1193 | 1193 |      }
 | 
| 1194 | 1194 |  
 | 
| 1195 | 1195 |      if (ftlcxtfound == 0)
 | 
| 1196 |   | -	{
 | 
|   | 1196 | +    {
 | 
| 1197 | 1197 |          DEBUGF("FTL: Couldn't find FTL CXT page!");
 | 
| 1198 |   | -	    return 1;
 | 
| 1199 |   | -	}
 | 
|   | 1198 | +        return 1;
 | 
|   | 1199 | +    }
 | 
| 1200 | 1200 |  
 | 
| 1201 | 1201 |      DEBUGF("FTL: Successfully read FTL context block");
 | 
| 1202 | 1202 |      uint32_t pagestoread = ftl_nand_type->userblocks >> 10;
 | 
| — | — | @@ -1205,10 +1205,10 @@ | 
| 1206 | 1206 |      {
 | 
| 1207 | 1207 |          if ((ftl_vfl_read(ftl_cxt.ftl_map_pages[i],
 | 
| 1208 | 1208 |                            ftl_buffer, &ftl_sparebuffer[0], 1, 1) & 0x11F) != 0)
 | 
| 1209 |   | -		{
 | 
|   | 1209 | +        {
 | 
| 1210 | 1210 |              DEBUGF("FTL: Failed to read block map page %u", (unsigned)i);
 | 
| 1211 | 1211 |              return 1;
 | 
| 1212 |   | -		}
 | 
|   | 1212 | +        }
 | 
| 1213 | 1213 |  
 | 
| 1214 | 1214 |          uint32_t toread = 2048;
 | 
| 1215 | 1215 |          if (toread > (ftl_nand_type->userblocks << 1) - (i << 11))
 | 
| — | — | @@ -1225,10 +1225,10 @@ | 
| 1226 | 1226 |      {
 | 
| 1227 | 1227 |          if ((ftl_vfl_read(ftl_cxt.ftl_erasectr_pages[i],
 | 
| 1228 | 1228 |                            ftl_buffer, &ftl_sparebuffer[0], 1, 1) & 0x11F) != 0)
 | 
| 1229 |   | -		{
 | 
|   | 1229 | +        {
 | 
| 1230 | 1230 |              DEBUGF("FTL: Failed to read erase counter page %u", (unsigned)i);
 | 
| 1231 | 1231 |              return 1;
 | 
| 1232 |   | -		}
 | 
|   | 1232 | +        }
 | 
| 1233 | 1233 |  
 | 
| 1234 | 1234 |          uint32_t toread = 2048;
 | 
| 1235 | 1235 |          if (toread > ((ftl_nand_type->userblocks + 23) << 1) - (i << 11))
 | 
| — | — | @@ -1316,10 +1316,10 @@ | 
| 1317 | 1317 |      DEBUGF("FTL: Reading %d sectors starting at %d", count, sector);
 | 
| 1318 | 1318 |  #endif
 | 
| 1319 | 1319 |  
 | 
| 1320 |   | -	if ((uint32_t)buffer & (CACHEALIGN_SIZE - 1))
 | 
| 1321 |   | -		panicf(PANIC_KILLTHREAD,
 | 
| 1322 |   | -		       "ftl_read: Misaligned data buffer at %08X (sector %lu, count %lu)",
 | 
| 1323 |   | -			   (unsigned int)buffer, sector, count);
 | 
|   | 1320 | +    if ((uint32_t)buffer & (CACHEALIGN_SIZE - 1))
 | 
|   | 1321 | +        panicf(PANIC_KILLTHREAD,
 | 
|   | 1322 | +               "ftl_read: Misaligned data buffer at %08X (sector %lu, count %lu)",
 | 
|   | 1323 | +               (unsigned int)buffer, sector, count);
 | 
| 1324 | 1324 |  
 | 
| 1325 | 1325 |      if (sector + count > ftl_nand_type->userblocks * ppb)
 | 
| 1326 | 1326 |      {
 | 
| — | — | @@ -1341,14 +1341,14 @@ | 
| 1342 | 1342 |          if (logentry != NULL)
 | 
| 1343 | 1343 |          {
 | 
| 1344 | 1344 |  #ifdef FTL_TRACE
 | 
| 1345 |   | -	        DEBUGF("FTL: Block %d has a log entry", block);
 | 
|   | 1345 | +            DEBUGF("FTL: Block %d has a log entry", block);
 | 
| 1346 | 1346 |  #endif
 | 
| 1347 | 1347 |              if (logentry->scatteredvblock != 0xFFFF
 | 
| 1348 | 1348 |               && logentry->pageoffsets[page] != 0xFFFF)
 | 
| 1349 | 1349 |              {
 | 
| 1350 | 1350 |  #ifdef FTL_TRACE
 | 
| 1351 |   | -   		     DEBUGF("FTL: Found page %d at block %d, page %d", page,
 | 
| 1352 |   | -          		    (*logentry).scatteredvblock, (*logentry).pageoffsets[page]);
 | 
|   | 1351 | +                DEBUGF("FTL: Found page %d at block %d, page %d", page,
 | 
|   | 1352 | +                      (*logentry).scatteredvblock, (*logentry).pageoffsets[page]);
 | 
| 1353 | 1353 |  #endif
 | 
| 1354 | 1354 |                  abspage = logentry->scatteredvblock * ppb
 | 
| 1355 | 1355 |                          + logentry->pageoffsets[page];
 | 
| — | — | @@ -1370,7 +1370,7 @@ | 
| 1371 | 1371 |                      memset(&((uint8_t*)buffer)[(i + j) << 11], 0, 0x800);
 | 
| 1372 | 1372 |                  else if ((ret & (0xd << (j << 2))) || ftl_sparebuffer[j].user.eccmark != 0xFF)
 | 
| 1373 | 1373 |                  {
 | 
| 1374 |   | -		            DEBUGF("FTL: Error while reading sector %d!", (sector + i));
 | 
|   | 1374 | +                    DEBUGF("FTL: Error while reading sector %d!", (sector + i));
 | 
| 1375 | 1375 |                      error = -3;
 | 
| 1376 | 1376 |                      memset(&((uint8_t*)buffer)[(i + j) << 11], 0, 0x800);
 | 
| 1377 | 1377 |                  }
 | 
| — | — | @@ -1383,7 +1383,7 @@ | 
| 1384 | 1384 |              if (ret & 2) memset(&((uint8_t*)buffer)[i << 11], 0, 0x800);
 | 
| 1385 | 1385 |              else if ((ret & 0x11D) != 0 || ftl_sparebuffer[0].user.eccmark != 0xFF)
 | 
| 1386 | 1386 |              {
 | 
| 1387 |   | -	            DEBUGF("FTL: Error while reading sector %d!", (sector + i));
 | 
|   | 1387 | +                DEBUGF("FTL: Error while reading sector %d!", (sector + i));
 | 
| 1388 | 1388 |                  error = -4;
 | 
| 1389 | 1389 |                  memset(&((uint8_t*)buffer)[i << 11], 0, 0x800);
 | 
| 1390 | 1390 |              }
 | 
| — | — | @@ -1981,10 +1981,10 @@ | 
| 1982 | 1982 |      DEBUGF("FTL: Writing %d sectors starting at %d", count, sector);
 | 
| 1983 | 1983 |  #endif
 | 
| 1984 | 1984 |  
 | 
| 1985 |   | -	if ((uint32_t)buffer & (CACHEALIGN_SIZE - 1))
 | 
| 1986 |   | -		panicf(PANIC_KILLTHREAD,
 | 
| 1987 |   | -		       "ftl_write: Misaligned data buffer at %08X (sector %lu, count %lu)",
 | 
| 1988 |   | -			   (unsigned int)buffer, sector, count);
 | 
|   | 1985 | +    if ((uint32_t)buffer & (CACHEALIGN_SIZE - 1))
 | 
|   | 1986 | +        panicf(PANIC_KILLTHREAD,
 | 
|   | 1987 | +               "ftl_write: Misaligned data buffer at %08X (sector %lu, count %lu)",
 | 
|   | 1988 | +               (unsigned int)buffer, sector, count);
 | 
| 1989 | 1989 |  
 | 
| 1990 | 1990 |      if (sector + count > ftl_nand_type->userblocks * ppb)
 | 
| 1991 | 1991 |      {
 | 
| — | — | @@ -1999,7 +1999,7 @@ | 
| 2000 | 2000 |      {
 | 
| 2001 | 2001 |          for (i = 0; i < 3; i++)
 | 
| 2002 | 2002 |          {
 | 
| 2003 |   | -		    DEBUGF("FTL: Marking dirty, try %d", i);
 | 
|   | 2003 | +            DEBUGF("FTL: Marking dirty, try %d", i);
 | 
| 2004 | 2004 |              if (ftl_next_ctrl_pool_page() != 0)
 | 
| 2005 | 2005 |              {
 | 
| 2006 | 2006 |                  mutex_unlock(&ftl_mtx);
 | 
| — | — | @@ -2018,7 +2018,7 @@ | 
| 2019 | 2019 |              mutex_unlock(&ftl_mtx);
 | 
| 2020 | 2020 |              return -4;
 | 
| 2021 | 2021 |          }
 | 
| 2022 |   | -    	DEBUGF("FTL: Wrote dirty mark to %d", ftl_cxt.ftlctrlpage);
 | 
|   | 2022 | +        DEBUGF("FTL: Wrote dirty mark to %d", ftl_cxt.ftlctrlpage);
 | 
| 2023 | 2023 |          ftl_cxt.clean_flag = 0;
 | 
| 2024 | 2024 |      }
 | 
| 2025 | 2025 |  
 | 
| — | — | @@ -2036,7 +2036,7 @@ | 
| 2037 | 2037 |          if (page == 0 && count - i >= ppb)
 | 
| 2038 | 2038 |          {
 | 
| 2039 | 2039 |  #ifdef FTL_TRACE
 | 
| 2040 |   | -		    DEBUGF("FTL: Going to write a full hyperblock in one shot");
 | 
|   | 2040 | +            DEBUGF("FTL: Going to write a full hyperblock in one shot");
 | 
| 2041 | 2041 |  #endif
 | 
| 2042 | 2042 |              uint32_t vblock = logentry->scatteredvblock;
 | 
| 2043 | 2043 |              logentry->scatteredvblock = 0xFFFF;
 | 
| — | — | @@ -2043,7 +2043,7 @@ | 
| 2044 | 2044 |              if (logentry->pagesused != 0)
 | 
| 2045 | 2045 |              {
 | 
| 2046 | 2046 |  #ifdef FTL_TRACE
 | 
| 2047 |   | -    			DEBUGF("FTL: Scattered block had some pages already used, committing");
 | 
|   | 2047 | +                DEBUGF("FTL: Scattered block had some pages already used, committing");
 | 
| 2048 | 2048 |  #endif
 | 
| 2049 | 2049 |                  ftl_release_pool_block(vblock);
 | 
| 2050 | 2050 |                  vblock = ftl_allocate_pool_block();
 | 
| — | — | @@ -2085,7 +2085,7 @@ | 
| 2086 | 2086 |              if (logentry->pagesused == ppb)
 | 
| 2087 | 2087 |              {
 | 
| 2088 | 2088 |  #ifdef FTL_TRACE
 | 
| 2089 |   | -    			DEBUGF("FTL: Scattered block is full, committing");
 | 
|   | 2089 | +                DEBUGF("FTL: Scattered block is full, committing");
 | 
| 2090 | 2090 |  #endif
 | 
| 2091 | 2091 |                  ftl_remove_scattered_block(logentry);
 | 
| 2092 | 2092 |                  logentry = ftl_allocate_log_entry(block);
 | 
| — | — | @@ -2166,7 +2166,7 @@ | 
| 2167 | 2167 |      if (ftl_cxt.clean_flag == 1) return 0;
 | 
| 2168 | 2168 |  
 | 
| 2169 | 2169 |      mutex_lock(&ftl_mtx, TIMEOUT_BLOCK);
 | 
| 2170 |   | -	
 | 
|   | 2170 | +    
 | 
| 2171 | 2171 |  #ifdef FTL_TRACE
 | 
| 2172 | 2172 |      DEBUGF("FTL: Syncing");
 | 
| 2173 | 2173 |  #endif
 | 
| — | — | @@ -2549,7 +2549,7 @@ | 
| 2550 | 2550 |      skip = 0;
 | 
| 2551 | 2551 |      if (founddevinfo == 0)
 | 
| 2552 | 2552 |      {
 | 
| 2553 |   | -	   	DEBUGF("FTL: No DEVICEINFO found!");
 | 
|   | 2553 | +           DEBUGF("FTL: No DEVICEINFO found!");
 | 
| 2554 | 2554 |          return -1;
 | 
| 2555 | 2555 |      }
 | 
| 2556 | 2556 |      if (foundsignature != 0 && (result & 0x11F) != 0)
 | 
| — | — | @@ -2558,27 +2558,27 @@ | 
| 2559 | 2559 |          return -2;
 | 
| 2560 | 2560 |      }
 | 
| 2561 | 2561 |      if (ftl_vfl_open() == 0)
 | 
| 2562 |   | -	{
 | 
|   | 2562 | +    {
 | 
| 2563 | 2563 |          if (ftl_open() == 0)
 | 
| 2564 | 2564 |          {
 | 
| 2565 | 2565 |              ftl_initialized = true;
 | 
| 2566 | 2566 |              return 0;
 | 
| 2567 | 2567 |          }
 | 
| 2568 |   | -		cprintf(CONSOLE_BOOT, "The FTL seems to be damaged. Forcing check.\n");
 | 
| 2569 |   | -		if (ftl_repair() != 0)
 | 
| 2570 |   | -			cprintf(CONSOLE_BOOT, "FTL recovery failed. Use disk mode to recover.\n");
 | 
| 2571 |   | -		else
 | 
| 2572 |   | -		{
 | 
| 2573 |   | -			cprintf(CONSOLE_BOOT, "FTL recovery finished. Trying to mount again...\n");
 | 
| 2574 |   | -	        if (ftl_open() == 0)
 | 
|   | 2568 | +        cprintf(CONSOLE_BOOT, "The FTL seems to be damaged. Forcing check.\n");
 | 
|   | 2569 | +        if (ftl_repair() != 0)
 | 
|   | 2570 | +            cprintf(CONSOLE_BOOT, "FTL recovery failed. Use disk mode to recover.\n");
 | 
|   | 2571 | +        else
 | 
|   | 2572 | +        {
 | 
|   | 2573 | +            cprintf(CONSOLE_BOOT, "FTL recovery finished. Trying to mount again...\n");
 | 
|   | 2574 | +            if (ftl_open() == 0)
 | 
| 2575 | 2575 |              {
 | 
| 2576 |   | -			    cprintf(CONSOLE_BOOT, "Mount succeeded.\n");
 | 
|   | 2576 | +                cprintf(CONSOLE_BOOT, "Mount succeeded.\n");
 | 
| 2577 | 2577 |                  ftl_initialized = true;
 | 
| 2578 | 2578 |                  return 0;
 | 
| 2579 | 2579 |              }
 | 
| 2580 |   | -			cprintf(CONSOLE_BOOT, "Mounting FTL failed again, use disk mode to recover.\n");
 | 
| 2581 |   | -		}
 | 
| 2582 |   | -	}
 | 
|   | 2580 | +            cprintf(CONSOLE_BOOT, "Mounting FTL failed again, use disk mode to recover.\n");
 | 
|   | 2581 | +        }
 | 
|   | 2582 | +    }
 | 
| 2583 | 2583 |  
 | 
| 2584 | 2584 |      DEBUGF("FTL: Initialization failed!");
 | 
| 2585 | 2585 |  
 |