diff options
Diffstat (limited to 'arch/x86/kernel/cpu/cpufreq/cpufreq-nforce2.c')
| -rw-r--r-- | arch/x86/kernel/cpu/cpufreq/cpufreq-nforce2.c | 54 |
1 files changed, 29 insertions, 25 deletions
diff --git a/arch/x86/kernel/cpu/cpufreq/cpufreq-nforce2.c b/arch/x86/kernel/cpu/cpufreq/cpufreq-nforce2.c index 965ea52767ac..733093d60436 100644 --- a/arch/x86/kernel/cpu/cpufreq/cpufreq-nforce2.c +++ b/arch/x86/kernel/cpu/cpufreq/cpufreq-nforce2.c | |||
| @@ -32,7 +32,7 @@ | |||
| 32 | * nforce2_chipset: | 32 | * nforce2_chipset: |
| 33 | * FSB is changed using the chipset | 33 | * FSB is changed using the chipset |
| 34 | */ | 34 | */ |
| 35 | static struct pci_dev *nforce2_chipset_dev; | 35 | static struct pci_dev *nforce2_dev; |
| 36 | 36 | ||
| 37 | /* fid: | 37 | /* fid: |
| 38 | * multiplier * 10 | 38 | * multiplier * 10 |
| @@ -56,7 +56,9 @@ MODULE_PARM_DESC(fid, "CPU multiplier to use (11.5 = 115)"); | |||
| 56 | MODULE_PARM_DESC(min_fsb, | 56 | MODULE_PARM_DESC(min_fsb, |
| 57 | "Minimum FSB to use, if not defined: current FSB - 50"); | 57 | "Minimum FSB to use, if not defined: current FSB - 50"); |
| 58 | 58 | ||
| 59 | #define dprintk(msg...) cpufreq_debug_printk(CPUFREQ_DEBUG_DRIVER, "cpufreq-nforce2", msg) | 59 | #define PFX "cpufreq-nforce2: " |
| 60 | #define dprintk(msg...) cpufreq_debug_printk(CPUFREQ_DEBUG_DRIVER, \ | ||
| 61 | "cpufreq-nforce2", msg) | ||
| 60 | 62 | ||
| 61 | /** | 63 | /** |
| 62 | * nforce2_calc_fsb - calculate FSB | 64 | * nforce2_calc_fsb - calculate FSB |
| @@ -118,11 +120,11 @@ static void nforce2_write_pll(int pll) | |||
| 118 | int temp; | 120 | int temp; |
| 119 | 121 | ||
| 120 | /* Set the pll addr. to 0x00 */ | 122 | /* Set the pll addr. to 0x00 */ |
| 121 | pci_write_config_dword(nforce2_chipset_dev, NFORCE2_PLLADR, 0); | 123 | pci_write_config_dword(nforce2_dev, NFORCE2_PLLADR, 0); |
| 122 | 124 | ||
| 123 | /* Now write the value in all 64 registers */ | 125 | /* Now write the value in all 64 registers */ |
| 124 | for (temp = 0; temp <= 0x3f; temp++) | 126 | for (temp = 0; temp <= 0x3f; temp++) |
| 125 | pci_write_config_dword(nforce2_chipset_dev, NFORCE2_PLLREG, pll); | 127 | pci_write_config_dword(nforce2_dev, NFORCE2_PLLREG, pll); |
| 126 | 128 | ||
| 127 | return; | 129 | return; |
| 128 | } | 130 | } |
| @@ -139,8 +141,8 @@ static unsigned int nforce2_fsb_read(int bootfsb) | |||
| 139 | u32 fsb, temp = 0; | 141 | u32 fsb, temp = 0; |
| 140 | 142 | ||
| 141 | /* Get chipset boot FSB from subdevice 5 (FSB at boot-time) */ | 143 | /* Get chipset boot FSB from subdevice 5 (FSB at boot-time) */ |
| 142 | nforce2_sub5 = pci_get_subsys(PCI_VENDOR_ID_NVIDIA, | 144 | nforce2_sub5 = pci_get_subsys(PCI_VENDOR_ID_NVIDIA, 0x01EF, |
| 143 | 0x01EF, PCI_ANY_ID, PCI_ANY_ID, NULL); | 145 | PCI_ANY_ID, PCI_ANY_ID, NULL); |
| 144 | if (!nforce2_sub5) | 146 | if (!nforce2_sub5) |
| 145 | return 0; | 147 | return 0; |
| 146 | 148 | ||
| @@ -148,13 +150,13 @@ static unsigned int nforce2_fsb_read(int bootfsb) | |||
| 148 | fsb /= 1000000; | 150 | fsb /= 1000000; |
| 149 | 151 | ||
| 150 | /* Check if PLL register is already set */ | 152 | /* Check if PLL register is already set */ |
| 151 | pci_read_config_byte(nforce2_chipset_dev, NFORCE2_PLLENABLE, (u8 *)&temp); | 153 | pci_read_config_byte(nforce2_dev, NFORCE2_PLLENABLE, (u8 *)&temp); |
| 152 | 154 | ||
| 153 | if (bootfsb || !temp) | 155 | if (bootfsb || !temp) |
| 154 | return fsb; | 156 | return fsb; |
| 155 | 157 | ||
| 156 | /* Use PLL register FSB value */ | 158 | /* Use PLL register FSB value */ |
| 157 | pci_read_config_dword(nforce2_chipset_dev, NFORCE2_PLLREG, &temp); | 159 | pci_read_config_dword(nforce2_dev, NFORCE2_PLLREG, &temp); |
| 158 | fsb = nforce2_calc_fsb(temp); | 160 | fsb = nforce2_calc_fsb(temp); |
| 159 | 161 | ||
| 160 | return fsb; | 162 | return fsb; |
| @@ -174,18 +176,18 @@ static int nforce2_set_fsb(unsigned int fsb) | |||
| 174 | int pll = 0; | 176 | int pll = 0; |
| 175 | 177 | ||
| 176 | if ((fsb > max_fsb) || (fsb < NFORCE2_MIN_FSB)) { | 178 | if ((fsb > max_fsb) || (fsb < NFORCE2_MIN_FSB)) { |
| 177 | printk(KERN_ERR "cpufreq: FSB %d is out of range!\n", fsb); | 179 | printk(KERN_ERR PFX "FSB %d is out of range!\n", fsb); |
| 178 | return -EINVAL; | 180 | return -EINVAL; |
| 179 | } | 181 | } |
| 180 | 182 | ||
| 181 | tfsb = nforce2_fsb_read(0); | 183 | tfsb = nforce2_fsb_read(0); |
| 182 | if (!tfsb) { | 184 | if (!tfsb) { |
| 183 | printk(KERN_ERR "cpufreq: Error while reading the FSB\n"); | 185 | printk(KERN_ERR PFX "Error while reading the FSB\n"); |
| 184 | return -EINVAL; | 186 | return -EINVAL; |
| 185 | } | 187 | } |
| 186 | 188 | ||
| 187 | /* First write? Then set actual value */ | 189 | /* First write? Then set actual value */ |
| 188 | pci_read_config_byte(nforce2_chipset_dev, NFORCE2_PLLENABLE, (u8 *)&temp); | 190 | pci_read_config_byte(nforce2_dev, NFORCE2_PLLENABLE, (u8 *)&temp); |
| 189 | if (!temp) { | 191 | if (!temp) { |
| 190 | pll = nforce2_calc_pll(tfsb); | 192 | pll = nforce2_calc_pll(tfsb); |
| 191 | 193 | ||
| @@ -197,7 +199,7 @@ static int nforce2_set_fsb(unsigned int fsb) | |||
| 197 | 199 | ||
| 198 | /* Enable write access */ | 200 | /* Enable write access */ |
| 199 | temp = 0x01; | 201 | temp = 0x01; |
| 200 | pci_write_config_byte(nforce2_chipset_dev, NFORCE2_PLLENABLE, (u8)temp); | 202 | pci_write_config_byte(nforce2_dev, NFORCE2_PLLENABLE, (u8)temp); |
| 201 | 203 | ||
| 202 | diff = tfsb - fsb; | 204 | diff = tfsb - fsb; |
| 203 | 205 | ||
| @@ -222,7 +224,7 @@ static int nforce2_set_fsb(unsigned int fsb) | |||
| 222 | } | 224 | } |
| 223 | 225 | ||
| 224 | temp = 0x40; | 226 | temp = 0x40; |
| 225 | pci_write_config_byte(nforce2_chipset_dev, NFORCE2_PLLADR, (u8)temp); | 227 | pci_write_config_byte(nforce2_dev, NFORCE2_PLLADR, (u8)temp); |
| 226 | 228 | ||
| 227 | return 0; | 229 | return 0; |
| 228 | } | 230 | } |
| @@ -244,7 +246,8 @@ static unsigned int nforce2_get(unsigned int cpu) | |||
| 244 | * nforce2_target - set a new CPUFreq policy | 246 | * nforce2_target - set a new CPUFreq policy |
| 245 | * @policy: new policy | 247 | * @policy: new policy |
| 246 | * @target_freq: the target frequency | 248 | * @target_freq: the target frequency |
| 247 | * @relation: how that frequency relates to achieved frequency (CPUFREQ_RELATION_L or CPUFREQ_RELATION_H) | 249 | * @relation: how that frequency relates to achieved frequency |
| 250 | * (CPUFREQ_RELATION_L or CPUFREQ_RELATION_H) | ||
| 248 | * | 251 | * |
| 249 | * Sets a new CPUFreq policy. | 252 | * Sets a new CPUFreq policy. |
| 250 | */ | 253 | */ |
| @@ -276,7 +279,7 @@ static int nforce2_target(struct cpufreq_policy *policy, | |||
| 276 | /* local_irq_save(flags); */ | 279 | /* local_irq_save(flags); */ |
| 277 | 280 | ||
| 278 | if (nforce2_set_fsb(target_fsb) < 0) | 281 | if (nforce2_set_fsb(target_fsb) < 0) |
| 279 | printk(KERN_ERR "cpufreq: Changing FSB to %d failed\n", | 282 | printk(KERN_ERR PFX "Changing FSB to %d failed\n", |
| 280 | target_fsb); | 283 | target_fsb); |
| 281 | else | 284 | else |
| 282 | dprintk("Changed FSB successfully to %d\n", | 285 | dprintk("Changed FSB successfully to %d\n", |
| @@ -327,8 +330,8 @@ static int nforce2_cpu_init(struct cpufreq_policy *policy) | |||
| 327 | /* FIX: Get FID from CPU */ | 330 | /* FIX: Get FID from CPU */ |
| 328 | if (!fid) { | 331 | if (!fid) { |
| 329 | if (!cpu_khz) { | 332 | if (!cpu_khz) { |
| 330 | printk(KERN_WARNING | 333 | printk(KERN_WARNING PFX |
| 331 | "cpufreq: cpu_khz not set, can't calculate multiplier!\n"); | 334 | "cpu_khz not set, can't calculate multiplier!\n"); |
| 332 | return -ENODEV; | 335 | return -ENODEV; |
| 333 | } | 336 | } |
| 334 | 337 | ||
| @@ -343,7 +346,7 @@ static int nforce2_cpu_init(struct cpufreq_policy *policy) | |||
| 343 | } | 346 | } |
| 344 | } | 347 | } |
| 345 | 348 | ||
| 346 | printk(KERN_INFO "cpufreq: FSB currently at %i MHz, FID %d.%d\n", fsb, | 349 | printk(KERN_INFO PFX "FSB currently at %i MHz, FID %d.%d\n", fsb, |
| 347 | fid / 10, fid % 10); | 350 | fid / 10, fid % 10); |
| 348 | 351 | ||
| 349 | /* Set maximum FSB to FSB at boot time */ | 352 | /* Set maximum FSB to FSB at boot time */ |
| @@ -392,17 +395,18 @@ static struct cpufreq_driver nforce2_driver = { | |||
| 392 | */ | 395 | */ |
| 393 | static unsigned int nforce2_detect_chipset(void) | 396 | static unsigned int nforce2_detect_chipset(void) |
| 394 | { | 397 | { |
| 395 | nforce2_chipset_dev = pci_get_subsys(PCI_VENDOR_ID_NVIDIA, | 398 | nforce2_dev = pci_get_subsys(PCI_VENDOR_ID_NVIDIA, |
| 396 | PCI_DEVICE_ID_NVIDIA_NFORCE2, | 399 | PCI_DEVICE_ID_NVIDIA_NFORCE2, |
| 397 | PCI_ANY_ID, PCI_ANY_ID, NULL); | 400 | PCI_ANY_ID, PCI_ANY_ID, NULL); |
| 398 | 401 | ||
| 399 | if (nforce2_chipset_dev == NULL) | 402 | if (nforce2_dev == NULL) |
| 400 | return -ENODEV; | 403 | return -ENODEV; |
| 401 | 404 | ||
| 402 | printk(KERN_INFO "cpufreq: Detected nForce2 chipset revision %X\n", | 405 | printk(KERN_INFO PFX "Detected nForce2 chipset revision %X\n", |
| 403 | nforce2_chipset_dev->revision); | 406 | nforce2_dev->revision); |
| 404 | printk(KERN_INFO | 407 | printk(KERN_INFO PFX |
| 405 | "cpufreq: FSB changing is maybe unstable and can lead to crashes and data loss.\n"); | 408 | "FSB changing is maybe unstable and can lead to " |
| 409 | "crashes and data loss.\n"); | ||
| 406 | 410 | ||
| 407 | return 0; | 411 | return 0; |
| 408 | } | 412 | } |
| @@ -420,7 +424,7 @@ static int __init nforce2_init(void) | |||
| 420 | 424 | ||
| 421 | /* detect chipset */ | 425 | /* detect chipset */ |
| 422 | if (nforce2_detect_chipset()) { | 426 | if (nforce2_detect_chipset()) { |
| 423 | printk(KERN_ERR "cpufreq: No nForce2 chipset.\n"); | 427 | printk(KERN_INFO PFX "No nForce2 chipset.\n"); |
| 424 | return -ENODEV; | 428 | return -ENODEV; |
| 425 | } | 429 | } |
| 426 | 430 | ||
