[OpenBIOS] [commit] r1306 - in trunk/openbios-devel: arch/ppc/qemu drivers
repository service
svn at openbios.org
Fri May 30 14:11:45 CEST 2014
Author: agraf
Date: Fri May 30 14:11:44 2014
New Revision: 1306
URL: http://tracker.coreboot.org/trac/openbios/changeset/1306
Log:
PPC: Pass real tbfreq to udelay
The IDE code waits for some operations to finish within a certain amount of
time. That waiting code delays based on the timebase, but doesn't know about
the frequency of the timebase.
In cases where we know the frequency - like via QEMU's fwcfg interface - base
the calculation on that frequency value.
This fixes issues where OpenBIOS thought it ran into IDE timeouts.
Signed-off-by: Alexander Graf <agraf at suse.de>
Modified:
trunk/openbios-devel/arch/ppc/qemu/init.c
trunk/openbios-devel/drivers/timer.c
Modified: trunk/openbios-devel/arch/ppc/qemu/init.c
==============================================================================
--- trunk/openbios-devel/arch/ppc/qemu/init.c Thu May 29 00:15:33 2014 (r1305)
+++ trunk/openbios-devel/arch/ppc/qemu/init.c Fri May 30 14:11:44 2014 (r1306)
@@ -220,6 +220,9 @@
#endif
}
+/* From drivers/timer.c */
+extern unsigned long timer_freq;
+
static void
cpu_generic_init(const struct cpudef *cpu)
{
@@ -279,7 +282,8 @@
push_str("tlb-size");
fword("property");
- PUSH(fw_cfg_read_i32(FW_CFG_PPC_TBFREQ));
+ timer_freq = fw_cfg_read_i32(FW_CFG_PPC_TBFREQ);
+ PUSH(timer_freq);
fword("encode-int");
push_str("timebase-frequency");
fword("property");
Modified: trunk/openbios-devel/drivers/timer.c
==============================================================================
--- trunk/openbios-devel/drivers/timer.c Thu May 29 00:15:33 2014 (r1305)
+++ trunk/openbios-devel/drivers/timer.c Fri May 30 14:11:44 2014 (r1306)
@@ -79,15 +79,11 @@
/*
* TODO: pass via lb table
*/
-
-unsigned long get_timer_freq(void)
-{
- return 10000000 / 4;
-}
+unsigned long timer_freq = 10000000 / 4;
void udelay(unsigned int usecs)
{
- unsigned long ticksperusec = get_timer_freq() / 1000000;
+ unsigned long ticksperusec = timer_freq / 1000000;
_wait_ticks(ticksperusec * usecs);
}
More information about the OpenBIOS
mailing list