clocksource/drivers/arm_arch_timer: Fix XGene-1 TVAL register math error
[linux-2.6-microblaze.git] / drivers / clocksource / arm_arch_timer.c
index a7ff775..933bb96 100644 (file)
@@ -806,6 +806,9 @@ static u64 __arch_timer_check_delta(void)
                /*
                 * XGene-1 implements CVAL in terms of TVAL, meaning
                 * that the maximum timer range is 32bit. Shame on them.
+                *
+                * Note that TVAL is signed, thus has only 31 of its
+                * 32 bits to express magnitude.
                 */
                MIDR_ALL_VERSIONS(MIDR_CPU_MODEL(ARM_CPU_IMP_APM,
                                                 APM_CPU_PART_POTENZA)),
@@ -813,8 +816,8 @@ static u64 __arch_timer_check_delta(void)
        };
 
        if (is_midr_in_range_list(read_cpuid_id(), broken_cval_midrs)) {
-               pr_warn_once("Broken CNTx_CVAL_EL1, limiting width to 32bits");
-               return CLOCKSOURCE_MASK(32);
+               pr_warn_once("Broken CNTx_CVAL_EL1, using 31 bit TVAL instead.\n");
+               return CLOCKSOURCE_MASK(31);
        }
 #endif
        return CLOCKSOURCE_MASK(arch_counter_get_width());