aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/mpr/mpr_sas_lsi.c
diff options
context:
space:
mode:
authorAlfredo Dal'Ava Junior <alfredo@FreeBSD.org>2021-03-02 14:05:15 +0000
committerAlfredo Dal'Ava Junior <alfredo@FreeBSD.org>2021-03-03 01:21:42 +0000
commit71900a794da046ad5322caae2774aed5b3d361b9 (patch)
tree4f48bde964850ee0cb1348399d27360072608833 /sys/dev/mpr/mpr_sas_lsi.c
parentc04199affeacbd9e9dda3aaf5ca0b1b180031e78 (diff)
downloadsrc-71900a794da046ad5322caae2774aed5b3d361b9.tar.gz
src-71900a794da046ad5322caae2774aed5b3d361b9.zip
mpr: big-endian support
This fixes mpr driver on big-endian devices. Tested on powerpc64 and powerpc64le targets using a SAS9300-8i card (LSISAS3008 pci vendor=0x1000 device=0x0097) Submitted by: Andre Fernando da Silva <andre.silva@eldorado.org.br> Reviewed by: luporl, alfredo, Sreekanth Reddy <sreekanth.reddy@broadcom.com> (by email) Sponsored by: Eldorado Research Institute (eldorado.org.br) MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D25785
Diffstat (limited to 'sys/dev/mpr/mpr_sas_lsi.c')
-rw-r--r--sys/dev/mpr/mpr_sas_lsi.c21
1 files changed, 10 insertions, 11 deletions
diff --git a/sys/dev/mpr/mpr_sas_lsi.c b/sys/dev/mpr/mpr_sas_lsi.c
index db4cbbb24440..3d698cc4d431 100644
--- a/sys/dev/mpr/mpr_sas_lsi.c
+++ b/sys/dev/mpr/mpr_sas_lsi.c
@@ -160,11 +160,11 @@ mprsas_evt_handler(struct mpr_softc *sc, uintptr_t data,
}
bcopy(event->EventData, fw_event->event_data, sz);
- fw_event->event = event->Event;
- if ((event->Event == MPI2_EVENT_SAS_TOPOLOGY_CHANGE_LIST ||
- event->Event == MPI2_EVENT_PCIE_TOPOLOGY_CHANGE_LIST ||
- event->Event == MPI2_EVENT_SAS_ENCL_DEVICE_STATUS_CHANGE ||
- event->Event == MPI2_EVENT_IR_CONFIGURATION_CHANGE_LIST) &&
+ fw_event->event = le16toh(event->Event);
+ if ((fw_event->event == MPI2_EVENT_SAS_TOPOLOGY_CHANGE_LIST ||
+ fw_event->event == MPI2_EVENT_PCIE_TOPOLOGY_CHANGE_LIST ||
+ fw_event->event == MPI2_EVENT_SAS_ENCL_DEVICE_STATUS_CHANGE ||
+ fw_event->event == MPI2_EVENT_IR_CONFIGURATION_CHANGE_LIST) &&
sc->track_mapping_events)
sc->pending_map_events++;
@@ -173,9 +173,9 @@ mprsas_evt_handler(struct mpr_softc *sc, uintptr_t data,
* are processed. Increment the startup_refcount and decrement it after
* events are processed.
*/
- if ((event->Event == MPI2_EVENT_SAS_TOPOLOGY_CHANGE_LIST ||
- event->Event == MPI2_EVENT_PCIE_TOPOLOGY_CHANGE_LIST ||
- event->Event == MPI2_EVENT_IR_CONFIGURATION_CHANGE_LIST) &&
+ if ((fw_event->event == MPI2_EVENT_SAS_TOPOLOGY_CHANGE_LIST ||
+ fw_event->event == MPI2_EVENT_PCIE_TOPOLOGY_CHANGE_LIST ||
+ fw_event->event == MPI2_EVENT_IR_CONFIGURATION_CHANGE_LIST) &&
sc->wait_for_port_enable)
mprsas_startup_increment(sc->sassc);
@@ -867,9 +867,8 @@ mprsas_add_device(struct mpr_softc *sc, u16 handle, u8 linkrate)
parent_devinfo = le32toh(parent_config_page.DeviceInfo);
}
}
- /* TODO Check proper endianness */
- sas_address = config_page.SASAddress.High;
- sas_address = (sas_address << 32) | config_page.SASAddress.Low;
+ sas_address = htole32(config_page.SASAddress.High);
+ sas_address = (sas_address << 32) | htole32(config_page.SASAddress.Low);
mpr_dprint(sc, MPR_MAPPING, "Handle 0x%04x SAS Address from SAS device "
"page0 = %jx\n", handle, sas_address);