]> git.karo-electronics.de Git - mv-sheeva.git/commitdiff
Pull bugzilla-7880 into release branch
authorLen Brown <len.brown@intel.com>
Sun, 22 Jul 2007 06:25:03 +0000 (02:25 -0400)
committerLen Brown <len.brown@intel.com>
Sun, 22 Jul 2007 06:25:03 +0000 (02:25 -0400)
1  2 
arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c

index 18c8b67ea3a75ce4b5d740e1eb8a68b3cda46915,9ba2b69fc64aeb4c1fc14fdaa2a4715cace8d181..6f846bee2103d4b17eec817d4a6e4501b675194c
@@@ -167,13 -167,11 +167,13 @@@ static void do_drv_read(struct drv_cmd 
  
  static void do_drv_write(struct drv_cmd *cmd)
  {
 -      u32 h = 0;
 +      u32 lo, hi;
  
        switch (cmd->type) {
        case SYSTEM_INTEL_MSR_CAPABLE:
 -              wrmsr(cmd->addr.msr.reg, cmd->val, h);
 +              rdmsr(cmd->addr.msr.reg, lo, hi);
 +              lo = (lo & ~INTEL_MSR_RANGE) | (cmd->val & INTEL_MSR_RANGE);
 +              wrmsr(cmd->addr.msr.reg, lo, hi);
                break;
        case SYSTEM_IO_CAPABLE:
                acpi_os_write_port((acpi_io_address)cmd->addr.io.port,
@@@ -374,6 -372,7 +374,6 @@@ static int acpi_cpufreq_target(struct c
        struct cpufreq_freqs freqs;
        cpumask_t online_policy_cpus;
        struct drv_cmd cmd;
 -      unsigned int msr;
        unsigned int next_state = 0; /* Index into freq_table */
        unsigned int next_perf_state = 0; /* Index into perf table */
        unsigned int i;
        case SYSTEM_INTEL_MSR_CAPABLE:
                cmd.type = SYSTEM_INTEL_MSR_CAPABLE;
                cmd.addr.msr.reg = MSR_IA32_PERF_CTL;
 -              msr =
 -                  (u32) perf->states[next_perf_state].
 -                  control & INTEL_MSR_RANGE;
 -              cmd.val = get_cur_val(online_policy_cpus);
 -              cmd.val = (cmd.val & ~INTEL_MSR_RANGE) | msr;
 +              cmd.val = (u32) perf->states[next_perf_state].control;
                break;
        case SYSTEM_IO_CAPABLE:
                cmd.type = SYSTEM_IO_CAPABLE;
@@@ -665,8 -668,8 +665,8 @@@ static int acpi_cpufreq_cpu_init(struc
        data->max_freq = perf->states[0].core_frequency * 1000;
        /* table init */
        for (i=0; i<perf->state_count; i++) {
-               if (i>0 && perf->states[i].core_frequency ==
-                   perf->states[i-1].core_frequency)
+               if (i>0 && perf->states[i].core_frequency >=
+                   data->freq_table[valid_states-1].frequency / 1000)
                        continue;
  
                data->freq_table[valid_states].index = i;