linux/drivers/platform/x86
Stephen Boyd e0b4ab3bb9 platform/x86: intel_scu_ipc: Check status after timeout in busy_loop()
It's possible for the polling loop in busy_loop() to get scheduled away
for a long time.

  status = ipc_read_status(scu); // status = IPC_STATUS_BUSY
  <long time scheduled away>
  if (!(status & IPC_STATUS_BUSY))

If this happens, then the status bit could change while the task is
scheduled away and this function would never read the status again after
timing out. Instead, the function will return -ETIMEDOUT when it's
possible that scheduling didn't work out and the status bit was cleared.
Bit polling code should always check the bit being polled one more time
after the timeout in case this happens.

Fix this by reading the status once more after the while loop breaks.
The readl_poll_timeout() macro implements all of this, and it is
shorter, so use that macro here to consolidate code and fix this.

There were some concerns with using readl_poll_timeout() because it uses
timekeeping, and timekeeping isn't running early on or during the late
stages of system suspend or early stages of system resume, but an audit
of the code concluded that this code isn't called during those times so
it is safe to use the macro.

Cc: Prashant Malani <pmalani@chromium.org>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Reviewed-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
Fixes: e7b7ab3847 ("platform/x86: intel_scu_ipc: Sleeping is fine when polling")
Signed-off-by: Stephen Boyd <swboyd@chromium.org>
Link: https://lore.kernel.org/r/20230913212723.3055315-2-swboyd@chromium.org
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
2023-09-18 15:14:22 +02:00
..
amd platform/x86/amd/pmc: Fix build error with randconfig 2023-08-28 10:43:57 +02:00
dell Merge remote-tracking branch 'pdx86/fixes' into pdx86/for-next 2023-08-23 17:30:50 +02:00
hp platform/x86: hp-bioscfg: Update steps order list elements are evaluated 2023-08-21 18:56:18 +02:00
intel platform-drivers-x86 for v6.6-1 2023-09-01 09:16:47 -07:00
siemens platform/x86/siemens: simatic-ipc-batt: fix logical error for BX-59A 2023-08-10 10:46:13 +02:00
x86-android-tablets platform/x86: x86-android-tablets: Add support for extra buttons on Cyberbook T116 2023-05-09 11:54:43 +02:00
acer-wireless.c
acer-wmi.c platform/x86: acer-wmi: Convert to platform remove callback returning void 2023-03-07 12:19:13 +01:00
acerhdf.c Thermal control updates for 6.4-rc1 2023-04-25 18:32:43 -07:00
adv_swbutton.c platform/x86: adv_swbutton: Convert to platform remove callback returning void 2023-03-07 12:19:26 +01:00
amilo-rfkill.c platform/x86: amilo-rfkill: Convert to platform remove callback returning void 2023-03-07 12:19:43 +01:00
apple-gmux.c platform/x86: apple-gmux: don't use be32_to_cpu and cpu_to_be32 2023-06-16 16:47:44 +02:00
asus-laptop.c
asus-nb-wmi.c platform/x86: asus-wmi: Support 2023 ROG X16 tablet mode 2023-09-11 13:26:13 +02:00
asus-tf103c-dock.c platform/x86: asus-tf103c-dock: Switch back to use struct i2c_driver's .probe() 2023-06-13 12:32:45 +02:00
asus-wireless.c
asus-wmi.c platform/x86: asus-wmi: corrections to egpu safety check 2023-08-30 15:25:18 +02:00
asus-wmi.h
barco-p50-gpio.c platform/x86: barco-p50-gpio: Convert to platform remove callback returning void 2023-03-07 12:19:45 +01:00
classmate-laptop.c platform/x86: classmate: mark SPI related data as maybe unused 2023-03-16 16:10:54 +01:00
compal-laptop.c platform/x86: compal-laptop: Convert to platform remove callback returning void 2023-03-07 12:19:47 +01:00
dual_accel_detect.h
eeepc-laptop.c Fix nomenclature for USB and PCI wireless devices 2023-08-25 12:56:49 +03:00
eeepc-wmi.c
firmware_attributes_class.c
firmware_attributes_class.h
fujitsu-laptop.c
fujitsu-tablet.c
gigabyte-wmi.c platform/x86: gigabyte: constify pointers to hwmon_channel_info 2023-05-16 10:36:56 +02:00
gpd-pocket-fan.c
hdaps.c
huawei-wmi.c platform/x86: huawei-wmi: Silence ambient light sensor 2023-07-25 16:38:03 +02:00
ibm_rtl.c platform/x86: ibm_rtl: move to use bus_get_dev_root() 2023-03-17 15:29:06 +01:00
ideapad-laptop.c platform/x86: ideapad-laptop: Add support for keyboard backlights using KBLC ACPI symbol 2023-08-28 10:48:53 +02:00
ideapad-laptop.h platform/x86: Add driver for Yoga Tablet Mode switch 2023-04-06 12:33:34 +02:00
intel_ips.c
intel_ips.h
intel_scu_ipc.c platform/x86: intel_scu_ipc: Check status after timeout in busy_loop() 2023-09-18 15:14:22 +02:00
intel_scu_ipcutil.c
intel_scu_pcidrv.c platform/x86: intel_scu_pcidrv: Add back PCI ID for Medfield 2023-05-08 17:35:08 +02:00
intel_scu_pltdrv.c
intel_scu_wdt.c
Kconfig platform/x86: mlx-platform: Add dependency on PCI to Kconfig 2023-08-30 15:13:41 +02:00
lenovo-ymc.c platform/x86: lenovo-ymc: Add Lenovo Yoga 7 14ACN6 to ec_trigger_quirk_dmi_table 2023-08-21 13:08:32 +02:00
lenovo-yogabook.c platform/x86: lenovo-yogabook: Rename lenovo-yogabook-wmi to lenovo-yogabook 2023-05-09 12:36:09 +02:00
lg-laptop.c
Makefile Immutable branch between pdx86 simatic branch and LED due for the v6.6 merge window 2023-07-31 16:05:44 +02:00
meraki-mx100.c
mlx-platform.c platform: mellanox: Add initial support for PCIe based programming logic device 2023-08-23 17:31:30 +02:00
msi-ec.c platform/x86: msi-ec: Fix the build 2023-08-09 21:57:50 +02:00
msi-ec.h platform/x86: Add new msi-ec driver 2023-03-27 16:10:20 +02:00
msi-laptop.c platform/x86: msi-laptop: Fix rfkill out-of-sync on MSI Wind U100 2023-07-25 16:35:58 +02:00
msi-wmi.c
mxm-wmi.c
nvidia-wmi-ec-backlight.c platform/x86: nvidia-wmi-ec-backlight: Add force module parameter 2023-02-18 11:45:52 +01:00
p2sb.c
panasonic-laptop.c
pcengines-apuv2.c platform/x86: pcengines-apuv2: Drop platform:pcengines-apuv2 module-alias 2023-03-16 16:14:52 +01:00
pmc_atom.c
samsung-laptop.c
samsung-q10.c platform/x86: samsung-q10: Convert to platform remove callback returning void 2023-03-07 12:20:44 +01:00
sel3350-platform.c platform/x86: Add SEL-3350 platform driver 2023-07-14 15:30:41 +02:00
serial-multi-instantiate.c ACPI: scan: Create platform device for CS35L56 2023-07-31 16:03:39 +02:00
sony-laptop.c platform/x86: sony: mark SPI related data as maybe unused 2023-03-16 16:11:03 +01:00
system76_acpi.c platform/x86: system76: Handle new KBLED ACPI methods 2023-07-26 11:00:07 +02:00
think-lmi.c platform/x86: think-lmi: Use kfree_sensitive instead of kfree 2023-07-25 15:30:57 +02:00
think-lmi.h
thinkpad_acpi.c Merge remote-tracking branch 'pdx86/fixes' into pdx86/for-next 2023-08-23 17:30:50 +02:00
topstar-laptop.c
toshiba_acpi.c platform/x86: toshiba: constify pointers to hwmon_channel_info 2023-05-16 10:36:56 +02:00
toshiba_bluetooth.c
toshiba_haps.c
toshiba-wmi.c
touchscreen_dmi.c platform/x86: touchscreen_dmi.c: small changes for Archos 101 Cesium Educ tablet 2023-07-14 15:58:38 +02:00
uv_sysfs.c x86/platform/uv: Make kobj_type structure constant 2023-02-10 17:24:37 +01:00
winmate-fm07-keys.c
wireless-hotkey.c
wmi-bmof.c platform/x86: wmi-bmof: Simplify read_bmof() 2023-07-31 16:07:41 +02:00
wmi.c platform/x86: wmi: Replace open coded guid_parse_and_compare() 2023-07-10 14:48:42 +02:00
xiaomi-wmi.c
xo1-rfkill.c platform/x86: xo1-rfkill: Convert to platform remove callback returning void 2023-03-07 12:20:50 +01:00
xo15-ebook.c