mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-12 08:16:43 +07:00
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>
This commit is contained in:
parent
c30836580b
commit
f2696fbdb6
@ -81,6 +81,8 @@ enum {
|
||||
I2400MS_INIT_SLEEP_INTERVAL = 10,
|
||||
/* How long to wait for the device to settle after reset */
|
||||
I2400MS_SETTLE_TIME = 40,
|
||||
/* The number of msec to wait for IOR after sending IOE */
|
||||
IWMC3200_IOR_TIMEOUT = 10,
|
||||
};
|
||||
|
||||
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user