From dceceef05264cdeff0e2c60b8cb00719d7d7baeb Mon Sep 17 00:00:00 2001 From: Marcin Bukat Date: Sun, 5 Jun 2011 10:26:06 +0000 Subject: Move dbg_hw_info() into target tree. FS#11735 by me git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29964 a1c6a512-1295-4272-9138-f99709370657 --- apps/debug_menu.c | 355 ------------------------------------------------------ 1 file changed, 355 deletions(-) (limited to 'apps/debug_menu.c') diff --git a/apps/debug_menu.c b/apps/debug_menu.c index a43dd0a768..b557f46dc3 100644 --- a/apps/debug_menu.c +++ b/apps/debug_menu.c @@ -416,361 +416,6 @@ static bool dbg_buffering_thread(void) #endif /* CONFIG_CODEC */ #endif /* HAVE_LCD_BITMAP */ - -#if (CONFIG_CPU == SH7034 || defined(CPU_COLDFIRE)) -/* Tool function to read the flash manufacturer and type, if available. - Only chips which could be reprogrammed in system will return values. - (The mode switch addresses vary between flash manufacturers, hence addr1/2) */ - /* In IRAM to avoid problems when running directly from Flash */ -static bool dbg_flash_id(unsigned* p_manufacturer, unsigned* p_device, - unsigned addr1, unsigned addr2) - ICODE_ATTR __attribute__((noinline)); -static bool dbg_flash_id(unsigned* p_manufacturer, unsigned* p_device, - unsigned addr1, unsigned addr2) - -{ - unsigned not_manu, not_id; /* read values before switching to ID mode */ - unsigned manu, id; /* read values when in ID mode */ - -#if CONFIG_CPU == SH7034 - volatile unsigned char* flash = (unsigned char*)0x2000000; /* flash mapping */ -#elif defined(CPU_COLDFIRE) - volatile unsigned short* flash = (unsigned short*)0; /* flash mapping */ -#endif - int old_level; /* saved interrupt level */ - - not_manu = flash[0]; /* read the normal content */ - not_id = flash[1]; /* should be 'A' (0x41) and 'R' (0x52) from the "ARCH" marker */ - - /* disable interrupts, prevent any stray flash access */ - old_level = disable_irq_save(); - - flash[addr1] = 0xAA; /* enter command mode */ - flash[addr2] = 0x55; - flash[addr1] = 0x90; /* ID command */ - /* Atmel wants 20ms pause here */ - /* sleep(HZ/50); no sleeping possible while interrupts are disabled */ - - manu = flash[0]; /* read the IDs */ - id = flash[1]; - - flash[0] = 0xF0; /* reset flash (back to normal read mode) */ - /* Atmel wants 20ms pause here */ - /* sleep(HZ/50); no sleeping possible while interrupts are disabled */ - - restore_irq(old_level); /* enable interrupts again */ - - /* I assume success if the obtained values are different from - the normal flash content. This is not perfectly bulletproof, they - could theoretically be the same by chance, causing us to fail. */ - if (not_manu != manu || not_id != id) /* a value has changed */ - { - *p_manufacturer = manu; /* return the results */ - *p_device = id; - return true; /* success */ - } - return false; /* fail */ -} -#endif /* (CONFIG_CPU == SH7034 || CPU_COLDFIRE) */ - -#if (CONFIG_PLATFORM & PLATFORM_NATIVE) -#ifdef CPU_PP -static int perfcheck(void) -{ - int result; - - asm ( - "mrs r2, CPSR \n" - "orr r0, r2, #0xc0 \n" /* disable IRQ and FIQ */ - "msr CPSR_c, r0 \n" - "mov %[res], #0 \n" - "ldr r0, [%[timr]] \n" - "add r0, r0, %[tmo] \n" - "1: \n" - "add %[res], %[res], #1 \n" - "ldr r1, [%[timr]] \n" - "cmp r1, r0 \n" - "bmi 1b \n" - "msr CPSR_c, r2 \n" /* reset IRQ and FIQ state */ - : - [res]"=&r"(result) - : - [timr]"r"(&USEC_TIMER), - [tmo]"r"( -#if CONFIG_CPU == PP5002 - 16000 -#else /* PP5020/5022/5024 */ - 10226 -#endif - ) - : - "r0", "r1", "r2" - ); - return result; -} -#endif - -#ifdef HAVE_LCD_BITMAP -static bool dbg_hw_info(void) -{ -#if CONFIG_CPU == SH7034 - int bitmask = HW_MASK; - int rom_version = ROM_VERSION; - unsigned manu, id; /* flash IDs */ - bool got_id; /* flag if we managed to get the flash IDs */ - unsigned rom_crc = 0xffffffff; /* CRC32 of the boot ROM */ - bool has_bootrom; /* flag for boot ROM present */ - int oldmode; /* saved memory guard mode */ - - oldmode = system_memory_guard(MEMGUARD_NONE); /* disable memory guard */ - - /* get flash ROM type */ - got_id = dbg_flash_id(&manu, &id, 0x5555, 0x2AAA); /* try SST, Atmel, NexFlash */ - if (!got_id) - got_id = dbg_flash_id(&manu, &id, 0x555, 0x2AA); /* try AMD, Macronix */ - - /* check if the boot ROM area is a flash mirror */ - has_bootrom = (memcmp((char*)0, (char*)0x02000000, 64*1024) != 0); - if (has_bootrom) /* if ROM and Flash different */ - { - /* calculate CRC16 checksum of boot ROM */ - rom_crc = crc_32((unsigned char*)0x0000, 64*1024, 0xffffffff); - } - - system_memory_guard(oldmode); /* re-enable memory guard */ - - lcd_setfont(FONT_SYSFIXED); - lcd_clear_display(); - - lcd_puts(0, 0, "[Hardware info]"); - - lcd_putsf(0, 1, "ROM: %d.%02d", rom_version/100, rom_version%100); - - lcd_putsf(0, 2, "Mask: 0x%04x", bitmask); - - if (got_id) - lcd_putsf(0, 3, "Flash: M=%02x D=%02x", manu, id); - else - lcd_puts(0, 3, "Flash: M=?? D=??"); /* unknown, sorry */ - - if (has_bootrom) - { - if (rom_crc == 0x56DBA4EE) /* known Version 1 */ - lcd_puts(0, 4, "Boot ROM: V1"); - else - lcd_putsf(0, 4, "ROMcrc: 0x%08x", rom_crc); - } - else - { - lcd_puts(0, 4, "Boot ROM: none"); - } - - lcd_update(); - - while (!(action_userabort(TIMEOUT_BLOCK))); - -#elif CONFIG_CPU == MCF5249 || CONFIG_CPU == MCF5250 - unsigned manu, id; /* flash IDs */ - int got_id; /* flag if we managed to get the flash IDs */ - int oldmode; /* saved memory guard mode */ - int line = 0; - - oldmode = system_memory_guard(MEMGUARD_NONE); /* disable memory guard */ - - /* get flash ROM type */ - got_id = dbg_flash_id(&manu, &id, 0x5555, 0x2AAA); /* try SST, Atmel, NexFlash */ - if (!got_id) - got_id = dbg_flash_id(&manu, &id, 0x555, 0x2AA); /* try AMD, Macronix */ - - system_memory_guard(oldmode); /* re-enable memory guard */ - - lcd_setfont(FONT_SYSFIXED); - lcd_clear_display(); - - lcd_puts(0, line++, "[Hardware info]"); - - if (got_id) - lcd_putsf(0, line++, "Flash: M=%04x D=%04x", manu, id); - else - lcd_puts(0, line++, "Flash: M=???? D=????"); /* unknown, sorry */ - -#ifdef IAUDIO_X5 - { - struct ds2411_id id; - - lcd_puts(0, ++line, "Serial Number:"); - - got_id = ds2411_read_id(&id); - - if (got_id == DS2411_OK) - { - lcd_putsf(0, ++line, " FC=%02x", (unsigned)id.family_code); - lcd_putsf(0, ++line, " ID=%02X %02X %02X %02X %02X %02X", - (unsigned)id.uid[0], (unsigned)id.uid[1], (unsigned)id.uid[2], - (unsigned)id.uid[3], (unsigned)id.uid[4], (unsigned)id.uid[5]); - lcd_putsf(0, ++line, " CRC=%02X", (unsigned)id.crc); - } - else - { - lcd_putsf(0, ++line, "READ ERR=%d", got_id); - } - } -#endif - - lcd_update(); - - while (!(action_userabort(TIMEOUT_BLOCK))); - -#elif defined(CPU_PP502x) - int line = 0; - char pp_version[] = { (PP_VER2 >> 24) & 0xff, (PP_VER2 >> 16) & 0xff, - (PP_VER2 >> 8) & 0xff, (PP_VER2) & 0xff, - (PP_VER1 >> 24) & 0xff, (PP_VER1 >> 16) & 0xff, - (PP_VER1 >> 8) & 0xff, (PP_VER1) & 0xff, '\0' }; - - lcd_setfont(FONT_SYSFIXED); - lcd_clear_display(); - - lcd_puts(0, line++, "[Hardware info]"); - -#ifdef IPOD_ARCH - lcd_putsf(0, line++, "HW rev: 0x%08lx", IPOD_HW_REVISION); -#endif - -#ifdef IPOD_COLOR - extern int lcd_type; /* Defined in lcd-colornano.c */ - - lcd_putsf(0, line++, "LCD type: %d", lcd_type); -#endif - - lcd_putsf(0, line++, "PP version: %s", pp_version); - - lcd_putsf(0, line++, "Est. clock (kHz): %d", perfcheck()); - - lcd_update(); - - while (!(action_userabort(TIMEOUT_BLOCK))); - -#elif CONFIG_CPU == PP5002 - int line = 0; - char pp_version[] = { (PP_VER4 >> 8) & 0xff, PP_VER4 & 0xff, - (PP_VER3 >> 8) & 0xff, PP_VER3 & 0xff, - (PP_VER2 >> 8) & 0xff, PP_VER2 & 0xff, - (PP_VER1 >> 8) & 0xff, PP_VER1 & 0xff, '\0' }; - - - lcd_setfont(FONT_SYSFIXED); - lcd_clear_display(); - - lcd_puts(0, line++, "[Hardware info]"); - -#ifdef IPOD_ARCH - lcd_putsf(0, line++, "HW rev: 0x%08lx", IPOD_HW_REVISION); -#endif - - lcd_putsf(0, line++, "PP version: %s", pp_version); - - lcd_putsf(0, line++, "Est. clock (kHz): %d", perfcheck()); - - lcd_update(); - - while (!(action_userabort(TIMEOUT_BLOCK))); - -#else - /* Define this function in your target tree */ - return __dbg_hw_info(); -#endif /* CONFIG_CPU */ - lcd_setfont(FONT_UI); - return false; -} -#else /* !HAVE_LCD_BITMAP */ -static bool dbg_hw_info(void) -{ - int button; - int currval = 0; - int rom_version = ROM_VERSION; - unsigned manu, id; /* flash IDs */ - bool got_id; /* flag if we managed to get the flash IDs */ - unsigned rom_crc = 0xffffffff; /* CRC32 of the boot ROM */ - bool has_bootrom; /* flag for boot ROM present */ - int oldmode; /* saved memory guard mode */ - - oldmode = system_memory_guard(MEMGUARD_NONE); /* disable memory guard */ - - /* get flash ROM type */ - got_id = dbg_flash_id(&manu, &id, 0x5555, 0x2AAA); /* try SST, Atmel, NexFlash */ - if (!got_id) - got_id = dbg_flash_id(&manu, &id, 0x555, 0x2AA); /* try AMD, Macronix */ - - /* check if the boot ROM area is a flash mirror */ - has_bootrom = (memcmp((char*)0, (char*)0x02000000, 64*1024) != 0); - if (has_bootrom) /* if ROM and Flash different */ - { - /* calculate CRC16 checksum of boot ROM */ - rom_crc = crc_32((unsigned char*)0x0000, 64*1024, 0xffffffff); - } - - system_memory_guard(oldmode); /* re-enable memory guard */ - - lcd_clear_display(); - - lcd_puts(0, 0, "[HW Info]"); - while(1) - { - switch(currval) - { - case 0: - lcd_putsf(0, 1, "ROM: %d.%02d", - rom_version/100, rom_version%100); - break; - case 1: - if (got_id) - lcd_putsf(0, 1, "Flash:%02x,%02x", manu, id); - else - lcd_puts(0, 1, "Flash:??,??"); /* unknown, sorry */ - break; - case 2: - if (has_bootrom) - { - if (rom_crc == 0x56DBA4EE) /* known Version 1 */ - lcd_puts(0, 1, "BootROM: V1"); - else if (rom_crc == 0x358099E8) - lcd_puts(0, 1, "BootROM: V2"); - /* alternative boot ROM found in one single player so far */ - else - lcd_putsf(0, 1, "R: %08x", rom_crc); - } - else - lcd_puts(0, 1, "BootROM: no"); - } - - lcd_update(); - - button = get_action(CONTEXT_SETTINGS,TIMEOUT_BLOCK); - - switch(button) - { - case ACTION_STD_CANCEL: - return false; - - case ACTION_SETTINGS_DEC: - currval--; - if(currval < 0) - currval = 2; - break; - - case ACTION_SETTINGS_INC: - currval++; - if(currval > 2) - currval = 0; - break; - } - } - return false; -} -#endif /* !HAVE_LCD_BITMAP */ -#endif /* PLATFORM_NATIVE */ - #if (CONFIG_PLATFORM & PLATFORM_NATIVE) static const char* dbg_partitions_getname(int selected_item, void *data, char *buffer, size_t buffer_len) -- cgit v1.2.3