diff options
author | Cindy H Kao <evans@localhost.localdomain> | 2009-08-18 04:17:58 +0200 |
---|---|---|
committer | Inaky Perez-Gonzalez <inaky@linux.intel.com> | 2009-10-19 08:55:41 +0200 |
commit | f2696fbdb623993a9b4c05455df7ae3158a01111 (patch) | |
tree | 63dd6e4fbad1d6712bbc58038d4e04f5cfc025b5 /drivers/net/wimax/i2400m/sdio.c | |
parent | wimax/i2400m: Make boot retries a BUS-specific parameter (diff) | |
download | linux-f2696fbdb623993a9b4c05455df7ae3158a01111.tar.xz linux-f2696fbdb623993a9b4c05455df7ae3158a01111.zip |
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/i2400m/sdio.c')
-rw-r--r-- | drivers/net/wimax/i2400m/sdio.c | 8 |
1 files changed, 8 insertions, 0 deletions
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) err = -ENODEV; while (err != 0 && time_before64(get_jiffies_64(), timeout)) { sdio_claim_host(func); + /* + * There is a sillicon bug on the IWMC3200, where the + * IOE timeout will cause problems on Moorestown + * platforms (system hang). We explicitly overwrite + * func->enable_timeout here to work around the issue. + */ + if (func->device == SDIO_DEVICE_ID_INTEL_IWMC3200WIMAX) + func->enable_timeout = IWMC3200_IOR_TIMEOUT; err = sdio_enable_func(func); if (0 == err) { sdio_release_host(func); |