Rockbox open source high quality audio player as a Music Player Daemon
mpris rockbox mpd libadwaita audio rust zig deno
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

emBIOS backports part three: Make the NAND flash driver return more useful error codes if initialization fails.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27782 a1c6a512-1295-4272-9138-f99709370657

+22 -24
+21 -23
firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c
··· 45 45 46 46 #define NAND_STATUS_READY 0x40 47 47 48 - #define NAND_DEVICEINFOTABLE_ENTRIES 33 49 - 50 48 static const struct nand_device_info_type nand_deviceinfotable[] = 51 49 { 52 50 {0x1580F1EC, 1024, 968, 0x40, 6, 2, 1, 2, 1}, ··· 88 86 static uint8_t nand_twp[4]; 89 87 static uint8_t nand_tunk2[4]; 90 88 static uint8_t nand_tunk3[4]; 91 - static uint32_t nand_type[4]; 89 + static int nand_type[4]; 92 90 static int nand_powered = 0; 93 91 static int nand_interleaved = 0; 94 92 static int nand_cached = 0; ··· 307 305 { 308 306 mutex_lock(&nand_mtx); 309 307 uint32_t result; 310 - if (nand_reset(bank)) return nand_unlock(0xFFFFFFFF); 311 - if (nand_send_cmd(0x90)) return nand_unlock(0xFFFFFFFF); 308 + if (nand_reset(bank)) return nand_unlock(0xFFFFFFFE); 309 + if (nand_send_cmd(0x90)) return nand_unlock(0xFFFFFFFD); 312 310 FMANUM = 0; 313 311 FMADDR0 = 0; 314 312 FMCTRL1 = FMCTRL1_DOTRANSADDR; 315 - if (nand_wait_cmddone()) return nand_unlock(0xFFFFFFFF); 313 + if (nand_wait_cmddone()) return nand_unlock(0xFFFFFFFC); 316 314 FMDNUM = 4; 317 315 FMCTRL1 = FMCTRL1_DOREADDATA; 318 - if (nand_wait_addrdone()) return nand_unlock(0xFFFFFFFF); 316 + if (nand_wait_addrdone()) return nand_unlock(0xFFFFFFFB); 319 317 result = FMFIFO; 320 318 FMCTRL1 = FMCTRL1_CLEARRFIFO; 321 319 return nand_unlock(result); ··· 351 349 sleep(HZ / 20); 352 350 nand_last_activity_value = current_tick; 353 351 for (i = 0; i < 4; i++) 354 - { 355 - if(nand_type[i] != 0xFFFFFFFF) 356 - { 357 - if(nand_reset(i)) 352 + if (nand_type[i] >= 0) 353 + if (nand_reset(i)) 358 354 panicf("nand_power_up: nand_reset(bank=%d) failed.",(unsigned int)i); 359 - } 360 - } 361 355 nand_powered = 1; 362 356 nand_last_activity_value = current_tick; 363 357 mutex_unlock(&nand_mtx); ··· 516 510 { 517 511 for (i = 0; i < 4; i++) 518 512 { 519 - if (nand_type[i] == 0xFFFFFFFF) continue; 513 + if (nand_type[i] < 0) continue; 520 514 void* databuf = (void*)0; 521 515 void* sparebuf = (void*)0; 522 516 if (databuffer) databuf = (void*)((uint32_t)databuffer + 0x800 * i); ··· 534 528 led(true); 535 529 if (!nand_powered) nand_power_up(); 536 530 uint8_t status[4]; 537 - for (i = 0; i < 4; i++) status[i] = (nand_type[i] == 0xFFFFFFFF); 531 + for (i = 0; i < 4; i++) status[i] = (nand_type[i] < 0); 538 532 for (i = 0; i < 4; i++) 539 533 { 540 534 if (!status[i]) ··· 628 622 + 0x40 * (i - 1))) << 1; 629 623 } 630 624 for (i = 0; i < 4; i++) 631 - if (nand_type[i] != 0xFFFFFFFF) 625 + if (nand_type[i] < 0) 632 626 rc |= status[i] << (i << 2); 633 627 return nand_unlock(rc); 634 628 } ··· 686 680 if (!nand_powered) nand_power_up(); 687 681 for (i = 0; i < 4; i++) 688 682 { 689 - if (nand_type[i] == 0xFFFFFFFF) continue; 683 + if (nand_type[i] < 0) continue; 690 684 nand_set_fmctrl0(i, 0); 691 685 if (nand_send_cmd(NAND_CMD_BLOCKERASE)) 692 686 { ··· 705 699 } 706 700 for (i = 0; i < 4; i++) 707 701 { 708 - if (nand_type[i] == 0xFFFFFFFF) continue; 702 + if (nand_type[i] < 0) continue; 709 703 if (rc & (1 << i)) continue; 710 704 if (nand_wait_status_ready(i)) rc |= 1 << i; 711 705 } ··· 715 709 716 710 const struct nand_device_info_type* nand_get_device_type(uint32_t bank) 717 711 { 718 - if (nand_type[bank] == 0xFFFFFFFF) 712 + if (nand_type[bank] < 0) 719 713 return (struct nand_device_info_type*)0; 720 714 return &nand_deviceinfotable[nand_type[bank]]; 721 715 } ··· 734 728 } 735 729 } 736 730 737 - uint32_t nand_device_init(void) 731 + int nand_device_init(void) 738 732 { 739 733 mutex_init(&nand_mtx); 740 734 wakeup_init(&nand_wakeup); ··· 746 740 747 741 /* Assume there are 0 banks, to prevent 748 742 nand_power_up from talking with them yet. */ 749 - for(i = 0; i < 4; i++) nand_type[i] = 0xFFFFFFFF; 743 + for (i = 0; i < 4; i++) nand_type[i] = -1; 750 744 nand_power_up(); 751 745 752 746 /* Now that the flash is powered on, detect how ··· 758 752 nand_tunk2[i] = 7; 759 753 nand_tunk3[i] = 7; 760 754 type = nand_get_chip_type(i); 761 - if (type == 0xFFFFFFFF) continue; 755 + if (type >= 0xFFFFFFF0) 756 + { 757 + nand_type[i] = (int)type; 758 + continue; 759 + } 762 760 for (j = 0; ; j++) 763 761 { 764 762 if (j == ARRAYLEN(nand_deviceinfotable)) break; ··· 773 771 nand_tunk2[i] = nand_deviceinfotable[nand_type[i]].tunk2; 774 772 nand_tunk3[i] = nand_deviceinfotable[nand_type[i]].tunk3; 775 773 } 776 - if (nand_type[0] == 0xFFFFFFFF) return 1; 774 + if (nand_type[0] < 0) return nand_type[0]; 777 775 nand_interleaved = ((nand_type[0] >> 22) & 1); 778 776 nand_cached = ((nand_type[0] >> 23) & 1); 779 777
+1 -1
firmware/target/arm/s5l8700/ipodnano2g/nand-target.h
··· 55 55 56 56 const struct nand_device_info_type* nand_get_device_type(uint32_t bank); 57 57 uint32_t nand_reset(uint32_t bank); 58 - uint32_t nand_device_init(void); 58 + int nand_device_init(void); 59 59 void nand_set_active(void); 60 60 long nand_last_activity(void); 61 61 void nand_power_up(void);