forked from len0rd/rockbox
CPU boosting support for ipod nano and video. The rest of the targets
are either untested or do not work with the current code. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@9070 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
4ba14d9113
commit
f6e856774c
5 changed files with 71 additions and 18 deletions
|
@ -1049,7 +1049,9 @@ bool dbg_ports(void)
|
||||||
lcd_puts(0, line++, buf);
|
lcd_puts(0, line++, buf);
|
||||||
snprintf(buf, sizeof(buf), "GPIO_D: %02x", gpio_d);
|
snprintf(buf, sizeof(buf), "GPIO_D: %02x", gpio_d);
|
||||||
lcd_puts(0, line++, buf);
|
lcd_puts(0, line++, buf);
|
||||||
|
unsigned hehe = 0x12345678;
|
||||||
|
snprintf(buf, sizeof(buf), "%x %x", hehe, swap32(hehe));
|
||||||
|
lcd_puts(0, line++, buf);
|
||||||
lcd_update();
|
lcd_update();
|
||||||
button = button_get_w_tmo(HZ/10);
|
button = button_get_w_tmo(HZ/10);
|
||||||
|
|
||||||
|
@ -1183,16 +1185,24 @@ bool dbg_cpufreq(void)
|
||||||
|
|
||||||
switch(button)
|
switch(button)
|
||||||
{
|
{
|
||||||
|
#if (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD)
|
||||||
|
case BUTTON_MENU:
|
||||||
|
#else
|
||||||
case BUTTON_UP:
|
case BUTTON_UP:
|
||||||
|
#endif
|
||||||
cpu_boost(true);
|
cpu_boost(true);
|
||||||
break;
|
break;
|
||||||
|
#if (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD)
|
||||||
|
case BUTTON_PLAY:
|
||||||
|
#else
|
||||||
case BUTTON_DOWN:
|
case BUTTON_DOWN:
|
||||||
|
#endif
|
||||||
cpu_boost(false);
|
cpu_boost(false);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
|
#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
|
||||||
(CONFIG_KEYPAD == IRIVER_H300_PAD)
|
(CONFIG_KEYPAD == IRIVER_H300_PAD) || \
|
||||||
|
(CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD)
|
||||||
case BUTTON_SELECT:
|
case BUTTON_SELECT:
|
||||||
#else
|
#else
|
||||||
case BUTTON_PLAY:
|
case BUTTON_PLAY:
|
||||||
|
@ -1201,8 +1211,12 @@ bool dbg_cpufreq(void)
|
||||||
boost_counter = 0;
|
boost_counter = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#if (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD)
|
||||||
|
case BUTTON_LEFT:
|
||||||
|
#else
|
||||||
case SETTINGS_CANCEL:
|
case SETTINGS_CANCEL:
|
||||||
case SETTINGS_OK2:
|
case SETTINGS_OK2:
|
||||||
|
#endif
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,7 +73,7 @@
|
||||||
#define ROM_START 0x00000000
|
#define ROM_START 0x00000000
|
||||||
|
|
||||||
/* Define this to the CPU frequency */
|
/* Define this to the CPU frequency */
|
||||||
#define CPU_FREQ 11289600
|
#define CPU_FREQ 24000000
|
||||||
|
|
||||||
#define CONFIG_LCD LCD_IPODNANO
|
#define CONFIG_LCD LCD_IPODNANO
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@
|
||||||
#define CONFIG_LED LED_VIRTUAL
|
#define CONFIG_LED LED_VIRTUAL
|
||||||
|
|
||||||
/* Define this if you have adjustable CPU frequency */
|
/* Define this if you have adjustable CPU frequency */
|
||||||
//#define HAVE_ADJUSTABLE_CPU_FREQ
|
#define HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
|
|
||||||
#define BOOTFILE_EXT "ipod"
|
#define BOOTFILE_EXT "ipod"
|
||||||
#define BOOTFILE "rockbox." BOOTFILE_EXT
|
#define BOOTFILE "rockbox." BOOTFILE_EXT
|
||||||
|
|
|
@ -97,7 +97,7 @@
|
||||||
#define CONFIG_LED LED_VIRTUAL
|
#define CONFIG_LED LED_VIRTUAL
|
||||||
|
|
||||||
/* Define this if you have adjustable CPU frequency */
|
/* Define this if you have adjustable CPU frequency */
|
||||||
//#define HAVE_ADJUSTABLE_CPU_FREQ
|
#define HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
|
|
||||||
#define BOOTFILE_EXT "ipod"
|
#define BOOTFILE_EXT "ipod"
|
||||||
#define BOOTFILE "rockbox." BOOTFILE_EXT
|
#define BOOTFILE "rockbox." BOOTFILE_EXT
|
||||||
|
|
|
@ -305,8 +305,11 @@ static inline void invalidate_icache(void)
|
||||||
|
|
||||||
/* TODO: Implement set_irq_level and check CPU frequencies */
|
/* TODO: Implement set_irq_level and check CPU frequencies */
|
||||||
|
|
||||||
#define CPUFREQ_DEFAULT CPU_FREQ
|
#define CPUFREQ_DEFAULT_MULT 8
|
||||||
#define CPUFREQ_NORMAL 37500000
|
#define CPUFREQ_DEFAULT 240000000
|
||||||
|
#define CPUFREQ_NORMAL_MULT 10
|
||||||
|
#define CPUFREQ_NORMAL 30000000
|
||||||
|
#define CPUFREQ_MAX_MULT 25
|
||||||
#define CPUFREQ_MAX 75000000
|
#define CPUFREQ_MAX 75000000
|
||||||
|
|
||||||
static inline unsigned short swap16(unsigned short value)
|
static inline unsigned short swap16(unsigned short value)
|
||||||
|
|
|
@ -1200,21 +1200,55 @@ static void ipod_init_cache(void)
|
||||||
inb(i);
|
inb(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ipod_set_cpu_speed(void)
|
/* Only these two support CPU boosting at the moment */
|
||||||
|
#if defined(APPLE_IPODNANO) || defined(APPLE_IPODVIDEO)
|
||||||
|
void set_cpu_frequency(long frequency)
|
||||||
{
|
{
|
||||||
|
unsigned long postmult;
|
||||||
|
|
||||||
|
if (frequency == CPUFREQ_NORMAL)
|
||||||
|
postmult = CPUFREQ_NORMAL_MULT;
|
||||||
|
else if (frequency == CPUFREQ_MAX)
|
||||||
|
postmult = CPUFREQ_MAX_MULT;
|
||||||
|
else
|
||||||
|
postmult = CPUFREQ_DEFAULT_MULT;
|
||||||
|
cpu_frequency = frequency;
|
||||||
|
|
||||||
|
/* Enable PLL? */
|
||||||
outl(inl(0x70000020) | (1<<30), 0x70000020);
|
outl(inl(0x70000020) | (1<<30), 0x70000020);
|
||||||
|
|
||||||
/* Set run state to 24MHz */
|
/* Select 24MHz crystal as clock source? */
|
||||||
outl((inl(0x60006020) & 0x0fffff0f) | 0x20000020, 0x60006020);
|
outl((inl(0x60006020) & 0x0fffff0f) | 0x20000020, 0x60006020);
|
||||||
|
|
||||||
/* 75 MHz (24/8)*25 */
|
/* Clock frequency = (24/8)*postmult */
|
||||||
outl(0xaa021908, 0x60006034);
|
outl(0xaa020000 | 8 | (postmult << 8), 0x60006034);
|
||||||
|
/* Wait for PLL relock? */
|
||||||
udelay(2000);
|
udelay(2000);
|
||||||
|
|
||||||
|
/* Select PLL as clock source? */
|
||||||
|
outl((inl(0x60006020) & 0x0fffff0f) | 0x20000070, 0x60006020);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
void ipod_set_cpu_frequency(void)
|
||||||
|
{
|
||||||
|
/* Enable PLL? */
|
||||||
|
outl(inl(0x70000020) | (1<<30), 0x70000020);
|
||||||
|
|
||||||
|
/* Select 24MHz crystal as clock source? */
|
||||||
|
outl((inl(0x60006020) & 0x0fffff0f) | 0x20000020, 0x60006020);
|
||||||
|
|
||||||
|
/* Clock frequency = (24/8)*25 = 75MHz */
|
||||||
|
outl(0xaa020000 | 8 | (25 << 8), 0x60006034);
|
||||||
|
/* Wait for PLL relock? */
|
||||||
|
udelay(2000);
|
||||||
|
|
||||||
|
/* Select PLL as clock source? */
|
||||||
outl((inl(0x60006020) & 0x0fffff0f) | 0x20000070, 0x60006020);
|
outl((inl(0x60006020) & 0x0fffff0f) | 0x20000070, 0x60006020);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif /* BOOTLOADER */
|
||||||
|
|
||||||
void system_init(void)
|
void system_init(void)
|
||||||
{
|
{
|
||||||
#ifndef BOOTLOADER
|
#ifndef BOOTLOADER
|
||||||
|
@ -1230,7 +1264,9 @@ void system_init(void)
|
||||||
outl(-1, 0x60001038);
|
outl(-1, 0x60001038);
|
||||||
outl(-1, 0x60001028);
|
outl(-1, 0x60001028);
|
||||||
outl(-1, 0x6000101c);
|
outl(-1, 0x6000101c);
|
||||||
ipod_set_cpu_speed();
|
#if !defined(APPLE_IPODNANO) && !defined(APPLE_IPODVIDEO)
|
||||||
|
ipod_set_cpu_frequency();
|
||||||
|
#endif
|
||||||
ipod_init_cache();
|
ipod_init_cache();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue