summaryrefslogtreecommitdiffstats
path: root/target/linux/s3c24xx/patches-2.6.24/1284-fix-one-mmc-race.patch.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/s3c24xx/patches-2.6.24/1284-fix-one-mmc-race.patch.patch')
-rw-r--r--target/linux/s3c24xx/patches-2.6.24/1284-fix-one-mmc-race.patch.patch133
1 files changed, 0 insertions, 133 deletions
diff --git a/target/linux/s3c24xx/patches-2.6.24/1284-fix-one-mmc-race.patch.patch b/target/linux/s3c24xx/patches-2.6.24/1284-fix-one-mmc-race.patch.patch
deleted file mode 100644
index 7acd823e36..0000000000
--- a/target/linux/s3c24xx/patches-2.6.24/1284-fix-one-mmc-race.patch.patch
+++ /dev/null
@@ -1,133 +0,0 @@
-From d744c88c149269b95ec068c8615e492375415d6d Mon Sep 17 00:00:00 2001
-From: Andy Green <andy@openmoko.com>
-Date: Wed, 27 Aug 2008 04:09:30 +0900
-Subject: [PATCH] fix-one-mmc-race.patch
-
-Some boots from Qi trigger a symptom from this interesting race -->
-
-[ 2.730000] Unable to handle kernel NULL pointer dereference at virtual address 00000248
-[ 2.730000] pgd = c0004000
-[ 2.735000] [00000248] *pgd=00000000
-[ 2.735000] Internal error: Oops: 5 [#1] PREEMPT
-[ 2.735000] Modules linked in:
-[ 2.735000] CPU: 0 Not tainted (2.6.24-stable10_0c1587137aaf0ee3-mokodev #1071)
-[ 2.735000] PC is at pcf50633_voltage_set+0x1c/0xfc
-[ 2.735000] LR is at gta02_glamo_mmc_set_power+0xdc/0x128
-[ 2.735000] pc : [<c01df570>] lr : [<c0034324>] psr: 60000013
-[ 2.735000] sp : c7c57eb0 ip : c7c57ec8 fp : c7c57ec4
-[ 2.735000] r10: c7cfca28 r9 : 00000000 r8 : c7c57f68
-[ 2.735000] r7 : c7cfca68 r6 : c7cfcae0 r5 : 00000c80 r4 : 00000000
-[ 2.735000] r3 : 00000000 r2 : 00000c80 r1 : 0000000a r0 : 00000c80
-[ 2.735000] Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel
-[ 2.735000] Control: c000717f Table: 30004000 DAC: 00000017
-[ 2.735000] Process kmmcd (pid: 102, stack limit = 0xc7c56268)
-[ 2.735000] Stack: (0xc7c57eb0 to 0xc7c58000)
-[ 2.735000] 7ea0: c0608c58 00000c80 c7c57edc c7c57ec8
-[ 2.735000] 7ec0: c0034324 c01df564 c7cfca28 c7cfc800 c7c57f1c c7c57ee0 c0194de0 c0034258
-[ 2.735000] 7ee0: c7c57f34 c7c57ef0 c01e6230 c005de5c 60000013 c7cfca28 c7cfc800 60000013
-[ 2.735000] 7f00: c7cfca68 c7c57f68 00000000 c01e6778 c7c57f34 c7c57f20 c01e5d68 c0194da8
-[ 2.735000] 7f20: c7cfc800 c7cfca08 c7c57f5c c7c57f38 c01e6810 c01e5cbc c0059278 c7c57f48
-[ 2.735000] 7f40: c02d2ba0 00000002 c7c44420 c7c56000 c7c57f9c c7c57f60 c00592e0 c01e6788
-[ 2.735000] 7f60: 00000002 c0059278 c0608d74 c04321cc c036e16c 00000000 c7c57fb0 c7c44420
-[ 2.735000] 7f80: c7c56000 00000000 00000000 00000000 c7c57fd4 c7c57fa0 c005a068 c00591ec
-[ 2.735000] 7fa0: c02d0624 00000000 c7c4c0e0 c005dc2c c7c57fb0 c7c57fb0 00000000 c7c56000
-[ 2.735000] 7fc0: c7c44420 c0059f84 c7c57ff4 c7c57fd8 c005db28 c0059f94 00000000 00000000
-[ 2.735000] 7fe0: 00000000 00000000 00000000 c7c57ff8 c004b170 c005dad8 ffffffff ffffffff
-[ 2.735000] Backtrace:
-[ 2.735000] [<c01df554>] (pcf50633_voltage_set+0x0/0xfc) from [<c0034324>] (gta02_glamo_mmc_set_power+0xdc/0x128)
-[ 2.735000] r5:00000c80 r4:c0608c58
-[ 2.735000] [<c0034248>] (gta02_glamo_mmc_set_power+0x0/0x128) from [<c0194de0>] (glamo_mci_set_ios+0x48/0x254)
-[ 2.735000] r5:c7cfc800 r4:c7cfca28
-[ 2.735000] [<c0194d98>] (glamo_mci_set_ios+0x0/0x254) from [<c01e5d68>] (mmc_power_up+0xbc/0x100)
-[ 2.735000] [<c01e5cac>] (mmc_power_up+0x0/0x100) from [<c01e6810>] (mmc_rescan+0x98/0x1a8)
-[ 2.735000] r5:c7cfca08 r4:c7cfc800
-[ 2.735000] [<c01e6778>] (mmc_rescan+0x0/0x1a8) from [<c00592e0>] (run_workqueue+0x104/0x208)
-[ 2.735000] r6:c7c56000 r5:c7c44420 r4:00000002
-[ 2.735000] [<c00591dc>] (run_workqueue+0x0/0x208) from [<c005a068>] (worker_thread+0xe4/0xf8)
-[ 2.735000] [<c0059f84>] (worker_thread+0x0/0xf8) from [<c005db28>] (kthread+0x60/0x94)
-[ 2.735000] r6:c0059f84 r5:c7c44420 r4:c7c56000
-[ 2.735000] [<c005dac8>] (kthread+0x0/0x94) from [<c004b170>] (do_exit+0x0/0x6f4)
-[ 2.735000] r6:00000000 r5:00000000 r4:00000000
-[ 2.735000] Code: e351000a e1a04000 e1a00002 8a000032 (e5943248)
-[ 2.745000] ---[ end trace 123ec1d286354824 ]---
-
-This problem was caused by insufficient timeout waiting for pcf50633 to resume
-and broken code to detect timeout exhaustion.
-
-Although I'd like to think it has something to do with mmc resume woes it should make a panic
-and subsequent emergency spew on UART2 if that had been the case.
-
-Took the opportunity to move the stuff to show completion of probe to later in the
-pcf50633 probe and tighten readiness test.
-
-Signed-off-by: Andy Green <andy@openmoko.com>
----
- arch/arm/mach-s3c2440/mach-gta02.c | 4 ++--
- drivers/i2c/chips/pcf50633.c | 12 ++++++++----
- 2 files changed, 10 insertions(+), 6 deletions(-)
-
-diff --git a/arch/arm/mach-s3c2440/mach-gta02.c b/arch/arm/mach-s3c2440/mach-gta02.c
-index eadf88a..c15f072 100644
---- a/arch/arm/mach-s3c2440/mach-gta02.c
-+++ b/arch/arm/mach-s3c2440/mach-gta02.c
-@@ -1357,7 +1357,7 @@ static void
- gta02_glamo_mmc_set_power(unsigned char power_mode, unsigned short vdd)
- {
- int mv = 1650;
-- int timeout = 100;
-+ int timeout = 500;
-
- printk(KERN_DEBUG "mmc_set_power(power_mode=%u, vdd=%u\n",
- power_mode, vdd);
-@@ -1377,7 +1377,7 @@ gta02_glamo_mmc_set_power(unsigned char power_mode, unsigned short vdd)
- while (pcf50633_ready(pcf50633_global) && (timeout--))
- msleep(5);
-
-- if (!timeout) {
-+ if (timeout < 0) {
- printk(KERN_ERR"gta02_glamo_mmc_set_power "
- "BAILING on timeout\n");
- return;
-diff --git a/drivers/i2c/chips/pcf50633.c b/drivers/i2c/chips/pcf50633.c
-index b90ea8c..bac307e 100644
---- a/drivers/i2c/chips/pcf50633.c
-+++ b/drivers/i2c/chips/pcf50633.c
-@@ -2151,8 +2151,6 @@ static int pcf50633_detect(struct i2c_adapter *adapter, int address, int kind)
- goto exit_free;
- }
-
-- pcf50633_global = pcf;
--
- init_resume_dependency_list(&pcf->resume_dependency);
-
- populate_sysfs_group(pcf);
-@@ -2228,11 +2226,13 @@ static int pcf50633_detect(struct i2c_adapter *adapter, int address, int kind)
- backlight_update_status(pcf->backlight);
- }
-
-- pcf->probe_completed = 1;
--
- if (pcf->pdata->flag_use_apm_emulation)
- apm_get_power_status = pcf50633_get_power_status;
-
-+ pcf->probe_completed = 1;
-+ pcf50633_global = pcf;
-+ dev_info(&new_client->dev, "probe completed\n");
-+
- /* if platform was interested, give him a chance to register
- * platform devices that switch power with us as the parent
- * at registration time -- ensures suspend / resume ordering
-@@ -2476,6 +2476,10 @@ int pcf50633_ready(struct pcf50633_data *pcf)
- if (!pcf)
- return -EACCES;
-
-+ /* this was seen during boot with Qi, mmc_rescan racing us */
-+ if (!pcf->probe_completed)
-+ return -EACCES;
-+
- if ((pcf->suspend_state != PCF50633_SS_RUNNING) &&
- (pcf->suspend_state < PCF50633_SS_COMPLETED_RESUME))
- return -EBUSY;
---
-1.5.6.5
-