[oe-commits] org.oe.dev merge of '250b98d355e1a4b79caaec9ef041f42db95a2b7f'

thesing commit oe at amethyst.openembedded.net
Thu Jul 31 23:26:36 UTC 2008


merge of '250b98d355e1a4b79caaec9ef041f42db95a2b7f'
     and '597f2d2c1d1ea251c244da83e5677a24b328d3f4'

Author: thesing at openembedded.org
Branch: org.openembedded.dev
Revision: 42cb81c40550397bea69b71bcc8768f0b8b81476
ViewMTN: http://monotone.openembedded.org/revision/info/42cb81c40550397bea69b71bcc8768f0b8b81476
Files:
1
packages/linux/linux-rp.inc
packages/dsplink/files/ticel-config
packages/images/fso-image-console.bb
packages/linux/linux-omap2-git/beagleboard/serialfix.diff
conf/machine/htcpolaris.conf
packages/linux/linux-omap2-git/beagleboard/01-gptimer_maintain_tldr_lt_0xffffffff
packages/linux/linux-omap2-git/beagleboard/02-gptimer_clear_tocr
packages/linux/linux-omap2-git/beagleboard/03-gptimer_double_write_tocr
packages/linux/linux-omap2-git/beagleboard/04-gptimer_add_debug
packages/swfdec/swfdec-mozilla_0.7.4.bb
packages/swfdec/swfdec_0.7.4.bb
conf/distro/include/sane-srcrevs.inc
packages/dsplink/codec-engine_2.10.bb
packages/dsplink/dsplink_1.50.bb
packages/ffmpeg/ffmpeg_git.bb
packages/ffmpeg/omapfbplay_git.bb
packages/freesmartphone/frameworkd_git.bb
packages/gypsy/gypsy.inc
packages/gypsy/gypsy_svn.bb
packages/linux/linux-kaiser_2.6.24+git.bb
packages/linux/linux-omap2_git.bb
packages/linux/linux-rp-2.6.26/zaurus-i2c-init.patch
packages/linux/linux-rp_2.6.26.bb
packages/u-boot/u-boot_git.bb
Diffs:

#
# mt diff -r250b98d355e1a4b79caaec9ef041f42db95a2b7f -r42cb81c40550397bea69b71bcc8768f0b8b81476
#
#
#
# patch "packages/linux/linux-rp.inc"
#  from [2c46a07cacd6773da1465135b93706ce46d94b79]
#    to [d5e693d8ce0306dd5f561a01017f7f042f4cf537]
#
============================================================
--- packages/linux/linux-rp.inc	2c46a07cacd6773da1465135b93706ce46d94b79
+++ packages/linux/linux-rp.inc	d5e693d8ce0306dd5f561a01017f7f042f4cf537
@@ -65,6 +65,24 @@ module_autoload_power_collie = "power"
 module_autoload_leds-locomo_collie = "leds-locomo"
 module_autoload_power_collie = "power"
 
+
+#package kernel cmdline
+PACKAGES_append += "kernel-cmdline"
+FILES_kernel-cmdline = "/boot/kernel-cmdline*"
+PKG_kernel-cmdline = "kernel-cmdline-${KERNEL_VERSION}"
+RRECOMMENDS_kernel-base += "kernel-cmdline"
+
+pkg_postinst_kernel-cmdline () {
+	cd /boot; update-alternatives --install /boot/kernel-cmdline kernel-cmdline kernel-cmdline-${KERNEL_VERSION} ${KERNEL_PRIORITY} || true
+}
+
+pkg_postrm_kernel-cmdline () {
+	cd /boot; update-alternatives --remove kernel-cmdline kernel-cmdline-${KERNEL_VERSION} || true
+}
+do_install_append () {
+	echo "${CMDLINE_CON} ${CMDLINE_MEM} ${CMDLINE_ROTATE} ${CMDLINE_OTHER} ${CMDLINE_DEBUG}"> "${D}/boot/kernel-cmdline-${KERNEL_VERSION}"
+}
+
 do_configure() {
 	rm -f ${S}/.config
 


#
# mt diff -r597f2d2c1d1ea251c244da83e5677a24b328d3f4 -r42cb81c40550397bea69b71bcc8768f0b8b81476
#
#
#
# delete "packages/dsplink/files/ticel-config"
# 
# delete "packages/images/fso-image-console.bb"
# 
# delete "packages/linux/linux-omap2-git/beagleboard/serialfix.diff"
# 
# add_file "conf/machine/htcpolaris.conf"
#  content [bace1967854f817e81f88e99cda797aeadd07831]
# 
# add_file "packages/linux/linux-omap2-git/beagleboard/01-gptimer_maintain_tldr_lt_0xffffffff"
#  content [52c65326341dfb4f4c9dad1e8e1236459f47bba9]
# 
# add_file "packages/linux/linux-omap2-git/beagleboard/02-gptimer_clear_tocr"
#  content [1a7bc59d07a513afbc2746556e259f05d53d6399]
# 
# add_file "packages/linux/linux-omap2-git/beagleboard/03-gptimer_double_write_tocr"
#  content [8a1765af8eda0841b0182cf0e1cfc8a2d946f9ab]
# 
# add_file "packages/linux/linux-omap2-git/beagleboard/04-gptimer_add_debug"
#  content [550cb7c6d6b7070905727ffbfe899338a3abb4c9]
# 
# add_file "packages/swfdec/swfdec-mozilla_0.7.4.bb"
#  content [3b786eeb603090b3e0f7353aae7c9c2bd33ad7e4]
# 
# add_file "packages/swfdec/swfdec_0.7.4.bb"
#  content [0762edf2e24dc90e87a5d8b2bd766b981a1bc058]
# 
# patch "conf/distro/include/sane-srcrevs.inc"
#  from [e2c436b6fbab2ec117c633586d6e53ad5cf0fc6c]
#    to [728a45d37a508823fda1cfd83bb3650ef5d90e8a]
# 
# patch "packages/dsplink/codec-engine_2.10.bb"
#  from [332e3019b56cf0c6eaf5edf7c8fb23451cb14134]
#    to [163e8a7925cf09ffaea2ad9d8caba979718cd2d4]
# 
# patch "packages/dsplink/dsplink_1.50.bb"
#  from [0de167bdd761e3c8b3fb707da0f0c1d1b048402b]
#    to [433cc5e3ea3a71746f3232fa0b654152ee7e4171]
# 
# patch "packages/ffmpeg/ffmpeg_git.bb"
#  from [e3046b95c386745454ecdf90ff6eed7e7cea6039]
#    to [302e26dbd823c718b9a63c94a5d6d018b5fe9d49]
# 
# patch "packages/ffmpeg/omapfbplay_git.bb"
#  from [4649b54f81c86dc3f8fa7324ed4a5b8ccc3d764c]
#    to [090aadc107c8cd4a265045153958712162056f03]
# 
# patch "packages/freesmartphone/frameworkd_git.bb"
#  from [e15c6137cdb52decb3c0d85136658ae85f33ae9d]
#    to [a88563d4a70d9669a0ca31aad5bd7a0321820d99]
# 
# patch "packages/gypsy/gypsy.inc"
#  from [85b5dc8a1cf38b17b7eae3af2cd38122493263fa]
#    to [5fb8e8e91bd9fee39685e712d4fca8e0d630db21]
# 
# patch "packages/gypsy/gypsy_svn.bb"
#  from [44f510e7ce1634f707ccc12a237e279b457d624f]
#    to [959f3fb0bc39cc779ebe9635ea7b98fcdd64e294]
# 
# patch "packages/linux/linux-kaiser_2.6.24+git.bb"
#  from [4c1d297ed2650a9ec5c683f87ef9189967a1afde]
#    to [179f47a7546391b82d05471702ef85d5ff831bc9]
# 
# patch "packages/linux/linux-omap2_git.bb"
#  from [d1968e8ba7639627d6db87ba953b800c24ef27ea]
#    to [df75156ba05c33c4903ee65406bd8aecc88a7c49]
# 
# patch "packages/linux/linux-rp-2.6.26/zaurus-i2c-init.patch"
#  from [e87d480dedb22e40b8be1f27bad9b1b4946c405a]
#    to [2e74a69e842e3c0680535808d03f43717cb19a5d]
# 
# patch "packages/linux/linux-rp_2.6.26.bb"
#  from [ff9b4547b7210312365df450c44cf68b21e2987a]
#    to [3fe7077dd4707984593d30eb66cafde62b2120f6]
# 
# patch "packages/u-boot/u-boot_git.bb"
#  from [20da764e37d8eda3e5848758576cfe8a9671a2a6]
#    to [77d3411a0511c6640be31d9e6a41b663ef6533c3]
#
============================================================
--- conf/machine/htcpolaris.conf	bace1967854f817e81f88e99cda797aeadd07831
+++ conf/machine/htcpolaris.conf	bace1967854f817e81f88e99cda797aeadd07831
@@ -0,0 +1,23 @@
+#@TYPE: Machine
+#@NAME: HTC Polaris phone
+#@DESCRIPTION: Machine configuration for HTC Polaris phone
+TARGET_ARCH = "arm"
+PACKAGE_EXTRA_ARCHS = "armv4 armv4t armv5te armv6"
+ 
+PREFERRED_PROVIDER_virtual/xserver = "xserver-kdrive"
+XSERVER = "xserver-kdrive-fbdev"
+ 
+GUI_MACHINE_CLASS = "smallscreen"
+MACHINE_DISPLAY_WIDTH_PIXELS = "240"
+MACHINE_DISPLAY_HEIGHT_PIXELS = "320"
+ 
+TARGET_CC_ARCH = "-march=armv6j -mtune=arm1136jf-s"
+FEED_ARCH = "armv6"
+BASE_PACKAGE_ARCH = "armv6"
+ 
+
+IMAGE_FSTYPES ?= "tar.gz cpio.gz"
+ 
+PREFERRED_PROVIDER_virtual/kernel = "linux-kaiser"
+ 
+MACHINE_FEATURES = "kernel26 touchscreen screen keyboard bluetooth"
============================================================
--- packages/linux/linux-omap2-git/beagleboard/01-gptimer_maintain_tldr_lt_0xffffffff	52c65326341dfb4f4c9dad1e8e1236459f47bba9
+++ packages/linux/linux-omap2-git/beagleboard/01-gptimer_maintain_tldr_lt_0xffffffff	52c65326341dfb4f4c9dad1e8e1236459f47bba9
@@ -0,0 +1,64 @@
+OMAP2/3 GPTIMER: don't load GPTIMER with 0xffffffff
+
+From: Paul Walmsley <paul at pwsan.com>
+
+3430 TRM 16.2.4.2 states:
+
+     Do not put the overflow value (0xFFFFFFFF) in the GPTi.TLDR register
+     because it can lead to undesired results.
+
+3430 TRM 16.2.4.7 states:
+
+     In the non-PWM mode, GTPi.TLDR must be maintained at less than or
+     equal to 0xFFFF FFFE.
+
+This patch contains some debugging code, and so is not yet intended for
+merging into linux-omap.
+---
+
+ arch/arm/mach-omap2/timer-gp.c |   17 ++++++++++++++++-
+ 1 files changed, 16 insertions(+), 1 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/timer-gp.c b/arch/arm/mach-omap2/timer-gp.c
+index 557603f..edc0c9e 100644
+--- a/arch/arm/mach-omap2/timer-gp.c
++++ b/arch/arm/mach-omap2/timer-gp.c
+@@ -59,6 +59,11 @@ static struct irqaction omap2_gp_timer_irq = {
+ static int omap2_gp_timer_set_next_event(unsigned long cycles,
+ 					 struct clock_event_device *evt)
+ {
++	if (cycles == 0) {
++		pr_err("*** cycles = 0! fixing\n");
++		cycles = 1;
++	}
++
+ 	omap_dm_timer_set_load_start(gptimer, 0, 0xffffffff - cycles);
+ 
+ 	return 0;
+@@ -76,6 +81,15 @@ static void omap2_gp_timer_set_mode(enum clock_event_mode mode,
+ 		period = clk_get_rate(omap_dm_timer_get_fclk(gptimer)) / HZ;
+ 		period -= 1;
+ 
++		/* 
++		 * Unlikely that this will ever be hit since periodic
++		 * mode is rarely used 
++		 */
++		if (period == 0) {
++			pr_err("*** period = 0! fixing\n");
++			period = 1;
++		}
++
+ 		omap_dm_timer_set_load_start(gptimer, 1, 0xffffffff - period);
+ 		break;
+ 	case CLOCK_EVT_MODE_ONESHOT:
+@@ -117,8 +131,9 @@ static void __init omap2_gp_clockevent_init(void)
+ 				     clockevent_gpt.shift);
+ 	clockevent_gpt.max_delta_ns =
+ 		clockevent_delta2ns(0xffffffff, &clockevent_gpt);
++	/* per 3430 TRM table 16-11 */
+ 	clockevent_gpt.min_delta_ns =
+-		clockevent_delta2ns(1, &clockevent_gpt);
++		clockevent_delta2ns(2, &clockevent_gpt);
+ 
+ 	clockevent_gpt.cpumask = cpumask_of_cpu(0);
+ 	clockevents_register_device(&clockevent_gpt);
============================================================
--- packages/linux/linux-omap2-git/beagleboard/02-gptimer_clear_tocr	1a7bc59d07a513afbc2746556e259f05d53d6399
+++ packages/linux/linux-omap2-git/beagleboard/02-gptimer_clear_tocr	1a7bc59d07a513afbc2746556e259f05d53d6399
@@ -0,0 +1,98 @@
+OMAP2/3 GPTIMER: clear TOCR register after timer overflow interrupt and during load
+
+From: Paul Walmsley <paul at pwsan.com>
+
+There appears to be a hardware bug in the 1-ms tick generation section
+of the GPTIMER blocks on some OMAP3530 chips.  TOCR is sometimes
+incremented when a a timer overflow event occurs and TPIR = TPNR =
+TOWR = TOCR = 0, in contradiction of 34xx TRM 16.2.4.2.1.  When TOCR
+is incremented under these conditions, the timer will not generate any
+further overflow interrupts.  (The kernel currently relies on overflow
+interrupts to generate ticks and drive the scheduler.)
+
+This patch works around the bug by clearing TOCR in the GPTIMER
+overflow ISR and in the timer load functions.
+
+The precise sequence of hardware events needed to reproduce this bug
+is still unknown.  Without this patch, the bug is consistently
+observable on several BeagleBoards (including mine and Koen's) within
+a few minutes of boot.  It's not clear whether this bug is present on
+all OMAP3 revisions, or whether it is simply specific to certain
+OMAP3530ES2.2 lots.
+
+This patch fixes the "serial hangs" reported by some BeagleBoard
+users.  During these hangs, characters are still received from the
+serial port, so magic SysRq will still work; but characters are never
+delivered on to the underlying line discipline.  The 8250 serial code
+calls tty_flip_buffer_push(), which calls schedule_delayed_work() to
+defer passing the input buffer to the line discipline, but since no
+timer tick ever arrives, the delayed work function is never called .
+
+The patch should also fix some other sporadic boot hangs reported by
+BeagleBoard users that are due to timer interrupt non-delivery.
+---
+
+ arch/arm/mach-omap2/timer-gp.c      |    1 +
+ arch/arm/plat-omap/dmtimer.c        |    9 ++++++++-
+ include/asm-arm/arch-omap/dmtimer.h |    2 ++
+ 3 files changed, 11 insertions(+), 1 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/timer-gp.c b/arch/arm/mach-omap2/timer-gp.c
+index edc0c9e..869fe14 100644
+--- a/arch/arm/mach-omap2/timer-gp.c
++++ b/arch/arm/mach-omap2/timer-gp.c
+@@ -44,6 +44,7 @@ static irqreturn_t omap2_gp_timer_interrupt(int irq, void *dev_id)
+ 	struct omap_dm_timer *gpt = (struct omap_dm_timer *)dev_id;
+ 	struct clock_event_device *evt = &clockevent_gpt;
+ 
++	omap_dm_timer_clear_ovf_cnt(gpt);
+ 	omap_dm_timer_write_status(gpt, OMAP_TIMER_INT_OVERFLOW);
+ 
+ 	evt->event_handler(evt);
+diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c
+index f22506a..18a1e68 100644
+--- a/arch/arm/plat-omap/dmtimer.c
++++ b/arch/arm/plat-omap/dmtimer.c
+@@ -543,6 +543,8 @@ void omap_dm_timer_set_load(struct omap_dm_timer *timer, int autoreload,
+ 	while (readl(timer->io_base + (OMAP_TIMER_WRITE_PEND_REG & 0xff)))
+ 		cpu_relax();
+ 
++	omap_dm_timer_clear_ovf_cnt(timer);
++
+ 	omap_dm_timer_write_reg(timer, OMAP_TIMER_TRIGGER_REG, 0);
+ }
+ 
+@@ -561,6 +563,7 @@ void omap_dm_timer_set_load_start(struct omap_dm_timer *timer, int autoreload,
+ 
+ 	omap_dm_timer_write_reg(timer, OMAP_TIMER_COUNTER_REG, load);
+ 	omap_dm_timer_write_reg(timer, OMAP_TIMER_LOAD_REG, load);
++	omap_dm_timer_clear_ovf_cnt(timer);
+ 	omap_dm_timer_write_reg(timer, OMAP_TIMER_CTRL_REG, l);
+ }
+ 
+@@ -611,7 +614,11 @@ void omap_dm_timer_set_int_enable(struct omap_dm_timer *timer,
+ 				  unsigned int value)
+ {
+ 	omap_dm_timer_write_reg(timer, OMAP_TIMER_INT_EN_REG, value);
+-	omap_dm_timer_write_reg(timer, OMAP_TIMER_WAKEUP_EN_REG, value);
++}
++
++void omap_dm_timer_clear_ovf_cnt(struct omap_dm_timer *timer)
++{
++	omap_dm_timer_write_reg(timer, OMAP_TIMER_TICK_INT_MASK_SET_REG, 0);
+ }
+ 
+ unsigned int omap_dm_timer_read_status(struct omap_dm_timer *timer)
+diff --git a/include/asm-arm/arch-omap/dmtimer.h b/include/asm-arm/arch-omap/dmtimer.h
+index 02b29e8..7b1138b 100644
+--- a/include/asm-arm/arch-omap/dmtimer.h
++++ b/include/asm-arm/arch-omap/dmtimer.h
+@@ -73,6 +73,8 @@ void omap_dm_timer_set_prescaler(struct omap_dm_timer *timer, int prescaler);
+ 
+ void omap_dm_timer_set_int_enable(struct omap_dm_timer *timer, unsigned int value);
+ 
++void omap_dm_timer_clear_ovf_cnt(struct omap_dm_timer *timer);
++
+ unsigned int omap_dm_timer_read_status(struct omap_dm_timer *timer);
+ void omap_dm_timer_write_status(struct omap_dm_timer *timer, unsigned int value);
+ unsigned int omap_dm_timer_read_counter(struct omap_dm_timer *timer);
============================================================
--- packages/linux/linux-omap2-git/beagleboard/03-gptimer_double_write_tocr	8a1765af8eda0841b0182cf0e1cfc8a2d946f9ab
+++ packages/linux/linux-omap2-git/beagleboard/03-gptimer_double_write_tocr	8a1765af8eda0841b0182cf0e1cfc8a2d946f9ab
@@ -0,0 +1,25 @@
+OMAP3 GPTIMER: TOCR clears sometimes require two writes
+
+From: Paul Walmsley <paul at pwsan.com>
+
+Some GPTIMER register changes do not take effect with a single write;
+they require two writes for some reason.  Could be related to the
+existing 3430 errata "GPTimer 1,2, and 10: first write access to TCRR
+register discarded"
+---
+
+ arch/arm/plat-omap/dmtimer.c |    1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c
+index 18a1e68..4a5ada7 100644
+--- a/arch/arm/plat-omap/dmtimer.c
++++ b/arch/arm/plat-omap/dmtimer.c
+@@ -619,6 +619,7 @@ void omap_dm_timer_set_int_enable(struct omap_dm_timer *timer,
+ void omap_dm_timer_clear_ovf_cnt(struct omap_dm_timer *timer)
+ {
+ 	omap_dm_timer_write_reg(timer, OMAP_TIMER_TICK_INT_MASK_SET_REG, 0);
++	omap_dm_timer_write_reg(timer, OMAP_TIMER_TICK_INT_MASK_SET_REG, 0);
+ }
+ 
+ unsigned int omap_dm_timer_read_status(struct omap_dm_timer *timer)
============================================================
--- packages/linux/linux-omap2-git/beagleboard/04-gptimer_add_debug	550cb7c6d6b7070905727ffbfe899338a3abb4c9
+++ packages/linux/linux-omap2-git/beagleboard/04-gptimer_add_debug	550cb7c6d6b7070905727ffbfe899338a3abb4c9
@@ -0,0 +1,105 @@
+Add extra debug for the q_d_w_o() when work fn is already active.
+
+From: Paul Walmsley <paul at pwsan.com>
+
+
+---
+
+ arch/arm/mach-omap2/timer-gp.c      |    3 ++-
+ arch/arm/plat-omap/dmtimer.c        |   18 ++++++++++++++++++
+ include/asm-arm/arch-omap/dmtimer.h |    1 +
+ kernel/workqueue.c                  |   12 ++++++++++++
+ 4 files changed, 33 insertions(+), 1 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/timer-gp.c b/arch/arm/mach-omap2/timer-gp.c
+index 869fe14..4db3252 100644
+--- a/arch/arm/mach-omap2/timer-gp.c
++++ b/arch/arm/mach-omap2/timer-gp.c
+@@ -37,6 +37,7 @@
+ #include <asm/arch/dmtimer.h>
+ 
+ static struct omap_dm_timer *gptimer;
++struct omap_dm_timer *gptimer_pub;
+ static struct clock_event_device clockevent_gpt;
+ 
+ static irqreturn_t omap2_gp_timer_interrupt(int irq, void *dev_id)
+@@ -114,7 +115,7 @@ static void __init omap2_gp_clockevent_init(void)
+ {
+ 	u32 tick_rate;
+ 
+-	gptimer = omap_dm_timer_request_specific(1);
++	gptimer = gptimer_pub = omap_dm_timer_request_specific(1);
+ 	BUG_ON(gptimer == NULL);
+ 
+ #if defined(CONFIG_OMAP_32K_TIMER)
+diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c
+index 4a5ada7..3242495 100644
+--- a/arch/arm/plat-omap/dmtimer.c
++++ b/arch/arm/plat-omap/dmtimer.c
+@@ -622,6 +622,24 @@ void omap_dm_timer_clear_ovf_cnt(struct omap_dm_timer *timer)
+ 	omap_dm_timer_write_reg(timer, OMAP_TIMER_TICK_INT_MASK_SET_REG, 0);
+ }
+ 
++void omap_dm_timer_dump_int_enable(struct omap_dm_timer *timer)
++{
++	u32 l;
++	l = omap_dm_timer_read_reg(timer, OMAP_TIMER_COUNTER_REG);
++	pr_err("GPT TCRR: %08x\n", l);
++	l = omap_dm_timer_read_reg(timer, OMAP_TIMER_STAT_REG);
++	pr_err("GPT TISR: %08x\n", l);
++	l = omap_dm_timer_read_reg(timer, OMAP_TIMER_TICK_INT_MASK_SET_REG);
++	pr_err("GPT TOCR: %08x\n", l);
++	l = omap_dm_timer_read_reg(timer, OMAP_TIMER_TICK_INT_MASK_COUNT_REG);
++	pr_err("GPT TOWR: %08x\n", l);
++	l = omap_dm_timer_read_reg(timer, OMAP_TIMER_TICK_POS_REG);
++	pr_err("GPT TPIR: %08x\n", l);
++	l = omap_dm_timer_read_reg(timer, OMAP_TIMER_TICK_NEG_REG);
++	pr_err("GPT TNIR: %08x\n", l);
++}
++
++
+ unsigned int omap_dm_timer_read_status(struct omap_dm_timer *timer)
+ {
+ 	unsigned int l;
+diff --git a/include/asm-arm/arch-omap/dmtimer.h b/include/asm-arm/arch-omap/dmtimer.h
+index 7b1138b..db57015 100644
+--- a/include/asm-arm/arch-omap/dmtimer.h
++++ b/include/asm-arm/arch-omap/dmtimer.h
+@@ -73,6 +73,7 @@ void omap_dm_timer_set_prescaler(struct omap_dm_timer *timer, int prescaler);
+ 
+ void omap_dm_timer_set_int_enable(struct omap_dm_timer *timer, unsigned int value);
+ 
++void omap_dm_timer_dump_int_enable(struct omap_dm_timer *timer);
+ void omap_dm_timer_clear_ovf_cnt(struct omap_dm_timer *timer);
+ 
+ unsigned int omap_dm_timer_read_status(struct omap_dm_timer *timer);
+diff --git a/kernel/workqueue.c b/kernel/workqueue.c
+index ce77995..65b3b9a 100644
+--- a/kernel/workqueue.c
++++ b/kernel/workqueue.c
+@@ -33,6 +33,9 @@
+ #include <linux/kallsyms.h>
+ #include <linux/debug_locks.h>
+ #include <linux/lockdep.h>
++#include <asm/arch/dmtimer.h>
++
++extern struct omap_dm_timer *gptimer_pub;
+ 
+ /*
+  * The per-CPU workqueue (if single thread, we always use the first
+@@ -235,6 +238,15 @@ int queue_delayed_work_on(int cpu, struct workqueue_struct *wq,
+ 		else
+ 			add_timer(timer);
+ 		ret = 1;
++	} else {
++		s64 texp;
++		u64 now = ktime_to_ns(ktime_get());
++		u64 ens = jiffies_to_usecs(dwork->timer.expires) * 1000;
++		texp = ens - now;
++		if (texp < 0) {
++			pr_err("** Timer workaround\n");
++			omap_dm_timer_dump_int_enable(gptimer_pub);
++		}
+ 	}
+ 	return ret;
+ }
============================================================
--- packages/swfdec/swfdec-mozilla_0.7.4.bb	3b786eeb603090b3e0f7353aae7c9c2bd33ad7e4
+++ packages/swfdec/swfdec-mozilla_%s
>>> DIFF TRUNCATED @ 16K






More information about the Openembedded-commits mailing list