void topology_init_cpu_capacity_cppc(void)
 {
+       u64 capacity, capacity_scale = 0;
        struct cppc_perf_caps perf_caps;
        int cpu;
 
                    (perf_caps.highest_perf >= perf_caps.nominal_perf) &&
                    (perf_caps.highest_perf >= perf_caps.lowest_perf)) {
                        raw_capacity[cpu] = perf_caps.highest_perf;
+                       capacity_scale = max_t(u64, capacity_scale, raw_capacity[cpu]);
+
+                       per_cpu(capacity_freq_ref, cpu) = cppc_perf_to_khz(&perf_caps, raw_capacity[cpu]);
+
                        pr_debug("cpu_capacity: CPU%d cpu_capacity=%u (raw).\n",
                                 cpu, raw_capacity[cpu]);
                        continue;
                goto exit;
        }
 
-       topology_normalize_cpu_scale();
+       for_each_possible_cpu(cpu) {
+               capacity = raw_capacity[cpu];
+               capacity = div64_u64(capacity << SCHED_CAPACITY_SHIFT,
+                                    capacity_scale);
+               topology_set_cpu_scale(cpu, capacity);
+               pr_debug("cpu_capacity: CPU%d cpu_capacity=%lu\n",
+                       cpu, topology_get_cpu_scale(cpu));
+       }
+
        schedule_work(&update_topology_flags_work);
        pr_debug("cpu_capacity: cpu_capacity initialization done\n");