diff options
author | Cindy H Kao <evans@localhost.localdomain> | 2009-08-17 22:17:58 -0400 |
---|---|---|
committer | Inaky Perez-Gonzalez <inaky@linux.intel.com> | 2009-10-19 02:55:41 -0400 |
commit | f2696fbdb623993a9b4c05455df7ae3158a01111 (patch) | |
tree | 63dd6e4fbad1d6712bbc58038d4e04f5cfc025b5 /drivers/net/wimax | |
parent | c30836580b35ae5cab3de97a3df16878fe097868 (diff) |
wimax/iwmc3200: overwrite SDIO IOR timeout value to avoid platform hang
The default SDIO IOE wait timeout returned from iwmc3200-wimax's CCCR
is not efficient. This inefficiency will actually cause problems on
Moorestown platforms (system hang).
This is a sillicon bug that requires a software patch to by
overwritting func->enable_timeout. The new value I2400MS_IOR_TIMEOUT
is recommended and verified from the system integration results.
Future sillicon releases will have this default value corrected in the
future.
Signed-off-by: Cindy H Kao <cindy.h.kao@intel.com>
Signed-off-by: Inaky Perez-Gonzalez <inaky@linux.intel.com>
Diffstat (limited to 'drivers/net/wimax')
-rw-r--r-- | drivers/net/wimax/i2400m/i2400m-sdio.h | 2 | ||||
-rw-r--r-- | drivers/net/wimax/i2400m/sdio.c | 8 |
2 files changed, 10 insertions, 0 deletions
diff --git a/drivers/net/wimax/i2400m/i2400m-sdio.h b/drivers/net/wimax/i2400m/i2400m-sdio.h index 66884eb59b26..cfaedfa37892 100644 --- a/drivers/net/wimax/i2400m/i2400m-sdio.h +++ b/drivers/net/wimax/i2400m/i2400m-sdio.h | |||
@@ -81,6 +81,8 @@ enum { | |||
81 | I2400MS_INIT_SLEEP_INTERVAL = 10, | 81 | I2400MS_INIT_SLEEP_INTERVAL = 10, |
82 | /* How long to wait for the device to settle after reset */ | 82 | /* How long to wait for the device to settle after reset */ |
83 | I2400MS_SETTLE_TIME = 40, | 83 | I2400MS_SETTLE_TIME = 40, |
84 | /* The number of msec to wait for IOR after sending IOE */ | ||
85 | IWMC3200_IOR_TIMEOUT = 10, | ||
84 | }; | 86 | }; |
85 | 87 | ||
86 | 88 | ||
diff --git a/drivers/net/wimax/i2400m/sdio.c b/drivers/net/wimax/i2400m/sdio.c index 1429608164b0..0d64d16bd264 100644 --- a/drivers/net/wimax/i2400m/sdio.c +++ b/drivers/net/wimax/i2400m/sdio.c | |||
@@ -115,6 +115,14 @@ int i2400ms_enable_function(struct sdio_func *func) | |||
115 | err = -ENODEV; | 115 | err = -ENODEV; |
116 | while (err != 0 && time_before64(get_jiffies_64(), timeout)) { | 116 | while (err != 0 && time_before64(get_jiffies_64(), timeout)) { |
117 | sdio_claim_host(func); | 117 | sdio_claim_host(func); |
118 | /* | ||
119 | * There is a sillicon bug on the IWMC3200, where the | ||
120 | * IOE timeout will cause problems on Moorestown | ||
121 | * platforms (system hang). We explicitly overwrite | ||
122 | * func->enable_timeout here to work around the issue. | ||
123 | */ | ||
124 | if (func->device == SDIO_DEVICE_ID_INTEL_IWMC3200WIMAX) | ||
125 | func->enable_timeout = IWMC3200_IOR_TIMEOUT; | ||
118 | err = sdio_enable_func(func); | 126 | err = sdio_enable_func(func); |
119 | if (0 == err) { | 127 | if (0 == err) { |
120 | sdio_release_host(func); | 128 | sdio_release_host(func); |