[PATCH] Use todc on Mot PReP platforms
From: Matt Porter <mporter@kernel.crashing.org>
Date: 2005-08-10 17:26:25
Subsystem:
the rest · Maintainer:
Linus Torvalds
This restores behavior from 2.4 where PReP platforms identified as Motorola would calibrate the decrementer using the RTC. On real Motorola PReP hardware this isn't needed. However, in order to boot a stock 2.6 PReP kernel on qemu (which emulates a Motorola PReP system) it is necessary to allow it to calibrate the decrementer using an emulated RTC. If the decrementer rate is read from residual data then timing is screwed since a qemu PReP system typically runs much faster than the original hardware. If anybody has objections to this as the default, let me know. It still works (as did 2.4) on a couple of my Mot PReP boxes and doesn't affect the IBM PReP paths. My goal with this is to be able to run a stock 2.6 defconfig PReP build on qemu. -Matt
diff --git a/arch/ppc/platforms/prep_setup.c b/arch/ppc/platforms/prep_setup.c
--- a/arch/ppc/platforms/prep_setup.c
+++ b/arch/ppc/platforms/prep_setup.c@@ -940,8 +940,7 @@ prep_calibrate_decr(void) tb_to_us = mulhwu_scale_factor(freq/divisor, 1000000); tb_ticks_per_jiffy = freq / HZ / divisor; } - } - else + } else todc_calibrate_decr(); }
@@ -1155,16 +1154,17 @@ prep_init(unsigned long r3, unsigned lon ppc_md.time_init = todc_time_init; if (_prep_type == _PREP_IBM) { + ppc_md.calibrate_decr = prep_calibrate_decr; ppc_md.rtc_read_val = todc_mc146818_read_val; ppc_md.rtc_write_val = todc_mc146818_write_val; TODC_INIT(TODC_TYPE_MC146818, RTC_PORT(0), NULL, RTC_PORT(1), 8); } else { + ppc_md.calibrate_decr = todc_calibrate_decr; TODC_INIT(TODC_TYPE_MK48T59, PREP_NVRAM_AS0, PREP_NVRAM_AS1, PREP_NVRAM_DATA, 8); } - ppc_md.calibrate_decr = prep_calibrate_decr; ppc_md.set_rtc_time = todc_set_rtc_time; ppc_md.get_rtc_time = todc_get_rtc_time;