Update to qatlib 26.02.0 @ fe4bb4b6 Add patch to force 32 bit MMIO CSR reads for GCC 16.1 Resolves: RHEL-115834 Signed-off-by: Vladislav Dronov <vdronov@redhat.com>
33 lines
1.4 KiB
Diff
33 lines
1.4 KiB
Diff
diff --git a/quickassist/lookaside/access_layer/src/qat_direct/include/adf_platform_common.h b/quickassist/lookaside/access_layer/src/qat_direct/include/adf_platform_common.h
|
|
index 6956a5e02502..449ba2978a93 100644
|
|
--- a/quickassist/lookaside/access_layer/src/qat_direct/include/adf_platform_common.h
|
|
+++ b/quickassist/lookaside/access_layer/src/qat_direct/include/adf_platform_common.h
|
|
@@ -258,8 +258,21 @@ static inline unsigned int modulo(unsigned int data, unsigned int shift)
|
|
#define ICP_ADF_CSR_WR(csrAddr, csrOffset, val) \
|
|
(void)((*((volatile Cpa32U *)(((Cpa8U *)csrAddr) + csrOffset)) = (val)))
|
|
|
|
-/* CSR read macro */
|
|
-#define ICP_ADF_CSR_RD(csrAddr, csrOffset) \
|
|
- (*((volatile Cpa32U *)(((Cpa8U *)csrAddr) + csrOffset)))
|
|
+/*
|
|
+ * Force MMIO loads to remain 32-bit wide. GCC 16 may otherwise narrow a
|
|
+ * volatile 32-bit CSR read to a byte access when only one bit is tested,
|
|
+ * which breaks QAT mailbox CSRs that require DWORD transactions.
|
|
+ */
|
|
+static inline unsigned int icp_adf_csr_rd(void *csrAddr, unsigned int csrOffset)
|
|
+{
|
|
+ const volatile void *addr = ((char *)csrAddr) + csrOffset;
|
|
+ unsigned int val;
|
|
+
|
|
+ __asm__ __volatile__("movl (%1), %0" : "=r"(val) : "r"(addr) : "memory");
|
|
+
|
|
+ return val;
|
|
+}
|
|
+
|
|
+#define ICP_ADF_CSR_RD(csrAddr, csrOffset) icp_adf_csr_rd(csrAddr, csrOffset)
|
|
|
|
#endif /* ADF_PLATFORM_COMMON_H */
|
|
--
|
|
2.54.0
|
|
|