mfd: intel-m10-bmc: Manage access to MAX 10 fw handshake registers
authorIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Mon, 17 Apr 2023 09:26:53 +0000 (12:26 +0300)
committerLee Jones <lee@kernel.org>
Thu, 15 Jun 2023 08:19:36 +0000 (09:19 +0100)
commit867cae44f8ae150d0e303cfd62a01d0d7cd7f7a5
treecf833f2624866b7429509ca631c395903d7acfa5
parente9c154eed8aa166330eb0a8dc84642a8675c31e6
mfd: intel-m10-bmc: Manage access to MAX 10 fw handshake registers

On some MAX 10 cards, the BMC firmware is not available to service
handshake registers during secure update erase and write phases at
normal speeds. This problem affects at least hwmon driver. When the MAX
10 hwmon driver tries to read the sensor values during a secure update,
the reads are slowed down (e.g., reading all D5005 sensors takes ~24s
which is magnitudes worse than the normal <0.02s).

Manage access to the handshake registers using a rw semaphore and a FW
state variable to prevent accesses during those secure update phases
and return -EBUSY instead.

If handshake_sys_reg_nranges == 0, don't update bwcfw_state as it is not
used. This avoids the locking cost.

Co-developed-by: Russ Weight <russell.h.weight@intel.com>
Signed-off-by: Russ Weight <russell.h.weight@intel.com>
Co-developed-by: Xu Yilun <yilun.xu@intel.com>
Signed-off-by: Xu Yilun <yilun.xu@intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Lee Jones <lee@kernel.org>
Link: https://lore.kernel.org/r/20230417092653.16487-5-ilpo.jarvinen@linux.intel.com
drivers/fpga/intel-m10-bmc-sec-update.c
drivers/mfd/intel-m10-bmc-core.c
drivers/mfd/intel-m10-bmc-spi.c
include/linux/mfd/intel-m10-bmc.h