Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 788 → Rev 789

/shark/trunk/drivers/cpu/include/drivers/shark_cpu26.h
58,5 → 58,7
int CPU26_get_frequencies(int *buf);
int CPU26_show_frequencies(char *buf);
 
int CPU26_set_suspend_modulation(unsigned char on_duration, unsigned char off_duration);
 
#endif
/shark/trunk/drivers/cpu/cpufreq/gx-suspmod.c
333,6 → 333,64
dprintk("suspend modulation w/ clock speed: %d kHz.\n", freqs.new);
}
 
 
void gx_force_values(unsigned char on_duration, unsigned char off_duration) {
 
u8 suscfg, pmer1;
unsigned long flags;
 
if (off_duration == 0) { /* 100% of CPU speed, it is special case */
local_irq_save(flags);
pci_write_config_byte(gx_params->cs55x0, PCI_SUSCFG, (gx_params->pci_suscfg & ~(SUSMOD)));
pci_read_config_byte(gx_params->cs55x0, PCI_SUSCFG, &(gx_params->pci_suscfg));
local_irq_restore(flags);
dprintk("suspend modulation disabled: cpu runs 100 percent speed.\n");
return;
}
 
local_irq_save(flags);
switch (gx_params->cs55x0->device) {
case PCI_DEVICE_ID_CYRIX_5530_LEGACY:
pmer1 = gx_params->pci_pmer1 | IRQ_SPDUP | VID_SPDUP;
/* FIXME: need to test other values -- Zwane,Miura */
pci_write_config_byte(gx_params->cs55x0, PCI_IRQTC, 4); /* typical 2 to 4ms */
pci_write_config_byte(gx_params->cs55x0, PCI_VIDTC, 100);/* typical 50 to 100ms */
pci_write_config_byte(gx_params->cs55x0, PCI_PMER1, pmer1);
 
if (gx_params->pci_rev < 0x10) { /* CS5530(rev 1.2, 1.3) */
suscfg = gx_params->pci_suscfg | SUSMOD;
} else { /* CS5530A,B.. */
suscfg = gx_params->pci_suscfg | SUSMOD | PWRSVE;
}
break;
case PCI_DEVICE_ID_CYRIX_5520:
case PCI_DEVICE_ID_CYRIX_5510:
suscfg = gx_params->pci_suscfg | SUSMOD;
break;
default:
local_irq_restore(flags);
dprintk("fatal: try to set unknown chipset.\n");
return;
}
 
gx_params->off_duration = off_duration;
gx_params->on_duration = on_duration;
 
pci_write_config_byte(gx_params->cs55x0, PCI_MODOFF, gx_params->off_duration);
pci_write_config_byte(gx_params->cs55x0, PCI_MODON, gx_params->on_duration);
 
pci_write_config_byte(gx_params->cs55x0, PCI_SUSCFG, suscfg);
pci_read_config_byte(gx_params->cs55x0, PCI_SUSCFG, &suscfg);
 
local_irq_restore(flags);
 
gx_params->pci_suscfg = suscfg;
 
dprintk("suspend modulation w/ duration of ON:%d us, OFF:%d us\n",
gx_params->on_duration * 32, gx_params->off_duration * 32);
 
}
 
/****************************************************************
* High level functions *
****************************************************************/
/shark/trunk/drivers/cpu/shark/shark_cpu.c
74,12 → 74,29
 
int res;
 
res = cpufreq_target(target_freq, relation);
TRACER_LOGEVENT(FTrace_EVT_cycles_per_msec,0,clk_per_msec);
return res;
if (dvs_installed != DVS_NONE && dvs_installed != DVS_MEDIAGX_GEODE) {
res = cpufreq_target(target_freq, relation);
TRACER_LOGEVENT(FTrace_EVT_cycles_per_msec,0,clk_per_msec);
return res;
} else {
return -1;
}
 
}
 
extern void gx_force_values(unsigned char on_duration, unsigned char off_duration);
 
int CPU26_set_suspend_modulation(unsigned char on_duration, unsigned char off_duration) {
 
if (dvs_installed == DVS_MEDIAGX_GEODE) {
gx_force_values(on_duration, off_duration);
return 0;
}
 
return -1;
 
}
 
inline int CPU26_get_cur_frequency()
{
return cpufreq_get_cur_freq();