Commit 90315ad8 authored by Dean Luick's avatar Dean Luick Committed by Doug Ledford

IB/hfi1: Guard against concurrent I2C access across all chains

The discrete ASIC board design makes the two I2C chains not
independent of each other.  That is, only one chain can safely
be accessed at a time.  For discrete ASIC devices, adjust the
resource locking so that access to one I2C chain will lock both
of the chains.
Reviewed-by: default avatarEaswar Hariharan <easwar.hariharan@intel.com>
Signed-off-by: default avatarDean Luick <dean.luick@intel.com>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent 623bba2d
...@@ -1413,8 +1413,15 @@ static int __acquire_chip_resource(struct hfi1_devdata *dd, u32 resource) ...@@ -1413,8 +1413,15 @@ static int __acquire_chip_resource(struct hfi1_devdata *dd, u32 resource)
if (resource & CR_DYN_MASK) { if (resource & CR_DYN_MASK) {
/* a dynamic resource is in use if either HFI has set the bit */ /* a dynamic resource is in use if either HFI has set the bit */
if (dd->pcidev->device == PCI_DEVICE_ID_INTEL0 &&
(resource & (CR_I2C1 | CR_I2C2))) {
/* discrete devices must serialize across both chains */
all_bits = resource_mask(0, CR_I2C1 | CR_I2C2) |
resource_mask(1, CR_I2C1 | CR_I2C2);
} else {
all_bits = resource_mask(0, resource) | all_bits = resource_mask(0, resource) |
resource_mask(1, resource); resource_mask(1, resource);
}
my_bit = resource_mask(dd->hfi1_id, resource); my_bit = resource_mask(dd->hfi1_id, resource);
} else { } else {
/* non-dynamic resources are not split between HFIs */ /* non-dynamic resources are not split between HFIs */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment