mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-12-09 13:15:18 -05:00
AMS Sansa: FS#10669 Reimplement Voltage scaling.
Reimplement voltage scaling on AMS Sansas at 1.10v during unboosted operation to improve runtimes. The voltage is now also boosted during disk access if a µSD is present. This prevents the µSD problems we saw on the last implementation. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@23193 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
2b94830112
commit
562e41bae5
2 changed files with 24 additions and 4 deletions
|
|
@ -812,6 +812,11 @@ void sd_enable(bool on)
|
||||||
#if defined(HAVE_BUTTON_LIGHT) && defined(HAVE_MULTIDRIVE)
|
#if defined(HAVE_BUTTON_LIGHT) && defined(HAVE_MULTIDRIVE)
|
||||||
extern int buttonlight_is_on;
|
extern int buttonlight_is_on;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_HOTSWAP
|
||||||
|
static bool cpu_boosted = false;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (sd_enabled == on)
|
if (sd_enabled == on)
|
||||||
return; /* nothing to do */
|
return; /* nothing to do */
|
||||||
if(on)
|
if(on)
|
||||||
|
|
@ -830,6 +835,14 @@ void sd_enable(bool on)
|
||||||
CGU_IDE |= (1<<7) /* AHB interface enable */ |
|
CGU_IDE |= (1<<7) /* AHB interface enable */ |
|
||||||
(1<<6) /* interface enable */;
|
(1<<6) /* interface enable */;
|
||||||
sd_enabled = true;
|
sd_enabled = true;
|
||||||
|
|
||||||
|
#ifdef HAVE_HOTSWAP
|
||||||
|
if(card_detect_target()) /* If SD card present Boost cpu for voltage */
|
||||||
|
{
|
||||||
|
cpu_boosted = true;
|
||||||
|
cpu_boost(true);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -844,6 +857,14 @@ void sd_enable(bool on)
|
||||||
#endif /* HAVE_MULTIDRIVE */
|
#endif /* HAVE_MULTIDRIVE */
|
||||||
CGU_IDE &= ~((1<<7)|(1<<6));
|
CGU_IDE &= ~((1<<7)|(1<<6));
|
||||||
sd_enabled = false;
|
sd_enabled = false;
|
||||||
|
|
||||||
|
#ifdef HAVE_HOTSWAP
|
||||||
|
if(cpu_boosted)
|
||||||
|
{
|
||||||
|
cpu_boost(false);
|
||||||
|
cpu_boosted = false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -335,14 +335,13 @@ void set_cpu_frequency(long frequency)
|
||||||
{
|
{
|
||||||
if(frequency == CPUFREQ_MAX)
|
if(frequency == CPUFREQ_MAX)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_ADJUSTABLE_CPU_VOLTAGE
|
|
||||||
/* Increasing frequency so boost voltage before change */
|
/* Increasing frequency so boost voltage before change */
|
||||||
ascodec_write(AS3514_CVDD_DCDC3, (AS314_CP_DCDC3_SETTING | CVDD_1_20));
|
ascodec_write(AS3514_CVDD_DCDC3, (AS314_CP_DCDC3_SETTING | CVDD_1_20));
|
||||||
|
|
||||||
/* Wait for voltage to be at least 1.20v before making fclk > 200 MHz */
|
/* Wait for voltage to be at least 1.20v before making fclk > 200 MHz */
|
||||||
while(adc_read(ADC_CVDD) < 480) /* 480 * .0025 = 1.20V */
|
while(adc_read(ADC_CVDD) < 480) /* 480 * .0025 = 1.20V */
|
||||||
;
|
;
|
||||||
#endif
|
|
||||||
asm volatile(
|
asm volatile(
|
||||||
"mrc p15, 0, r0, c1, c0 \n"
|
"mrc p15, 0, r0, c1, c0 \n"
|
||||||
|
|
||||||
|
|
@ -365,10 +364,10 @@ void set_cpu_frequency(long frequency)
|
||||||
"bic r0, r0, #3<<30 \n" /* fastbus clocking */
|
"bic r0, r0, #3<<30 \n" /* fastbus clocking */
|
||||||
"mcr p15, 0, r0, c1, c0 \n"
|
"mcr p15, 0, r0, c1, c0 \n"
|
||||||
: : : "r0" );
|
: : : "r0" );
|
||||||
#ifdef HAVE_ADJUSTABLE_CPU_VOLTAGE
|
|
||||||
/* Decreasing frequency so reduce voltage after change */
|
/* Decreasing frequency so reduce voltage after change */
|
||||||
ascodec_write(AS3514_CVDD_DCDC3, (AS314_CP_DCDC3_SETTING | CVDD_1_10));
|
ascodec_write(AS3514_CVDD_DCDC3, (AS314_CP_DCDC3_SETTING | CVDD_1_10));
|
||||||
#endif
|
|
||||||
cpu_frequency = CPUFREQ_NORMAL;
|
cpu_frequency = CPUFREQ_NORMAL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue