git: baabb919345f - main - mpi3mr: mpi headers update to latest

From: Sumit Saxena <ssaxena_at_FreeBSD.org>
Date: Thu, 06 Jun 2024 10:39:28 UTC
The branch main has been updated by ssaxena:

URL: https://cgit.FreeBSD.org/src/commit/?id=baabb919345f05e9892c4048a1521e5da1403060

commit baabb919345f05e9892c4048a1521e5da1403060
Author:     Chandrakanth patil <chandrakanth.patil@broadcom.com>
AuthorDate: 2024-03-19 07:23:07 +0000
Commit:     Sumit Saxena <ssaxena@FreeBSD.org>
CommitDate: 2024-06-06 10:39:15 +0000

    mpi3mr: mpi headers update to latest
    
    Reviewed by:            imp
    Approved by:            imp
    Differential revision:  https://reviews.freebsd.org/D44428
---
 sys/dev/mpi3mr/mpi/mpi30_api.h       |   4 +-
 sys/dev/mpi3mr/mpi/mpi30_cnfg.h      | 170 +++++++++++++++++++++++++++--------
 sys/dev/mpi3mr/mpi/mpi30_image.h     |  49 +++++-----
 sys/dev/mpi3mr/mpi/mpi30_init.h      |  11 +--
 sys/dev/mpi3mr/mpi/mpi30_ioc.h       |  80 +++++++++--------
 sys/dev/mpi3mr/mpi/mpi30_pci.h       |   5 +-
 sys/dev/mpi3mr/mpi/mpi30_raid.h      |   5 +-
 sys/dev/mpi3mr/mpi/mpi30_sas.h       |   5 +-
 sys/dev/mpi3mr/mpi/mpi30_targ.h      |  10 ++-
 sys/dev/mpi3mr/mpi/mpi30_tool.h      |   8 +-
 sys/dev/mpi3mr/mpi/mpi30_transport.h |  29 +++---
 sys/dev/mpi3mr/mpi/mpi30_type.h      |   5 +-
 sys/dev/mpi3mr/mpi3mr.c              |  26 +++---
 sys/dev/mpi3mr/mpi3mr_cam.c          |   4 +-
 14 files changed, 251 insertions(+), 160 deletions(-)

diff --git a/sys/dev/mpi3mr/mpi/mpi30_api.h b/sys/dev/mpi3mr/mpi/mpi30_api.h
index aa7b54ec470e..0c070672a16b 100644
--- a/sys/dev/mpi3mr/mpi/mpi30_api.h
+++ b/sys/dev/mpi3mr/mpi/mpi30_api.h
@@ -1,7 +1,7 @@
 /*
- * SPDX-License-Identifier: BSD-2-Clause
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
  *
- * Copyright (c) 2016-2023, Broadcom Inc. All rights reserved.
+ * Copyright (c) 2016-2024, Broadcom Inc. All rights reserved.
  * Support: <fbsd-storage-driver.pdl@broadcom.com>
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/sys/dev/mpi3mr/mpi/mpi30_cnfg.h b/sys/dev/mpi3mr/mpi/mpi30_cnfg.h
index d1ae2ebfa372..410ed0471f78 100644
--- a/sys/dev/mpi3mr/mpi/mpi30_cnfg.h
+++ b/sys/dev/mpi3mr/mpi/mpi30_cnfg.h
@@ -1,7 +1,7 @@
 /*
- * SPDX-License-Identifier: BSD-2-Clause
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
  *
- * Copyright (c) 2016-2023, Broadcom Inc. All rights reserved.
+ * Copyright (c) 2016-2024, Broadcom Inc. All rights reserved.
  * Support: <fbsd-storage-driver.pdl@broadcom.com>
  *
  * Redistribution and use in source and binary forms, with or without
@@ -185,7 +185,7 @@ typedef struct _MPI3_CONFIG_PAGE_HEADER
  *              Common definitions used by Configuration Pages           *
  ****************************************************************************/
 
-/**** Defines for Negotiated Link Rates ****/
+/**** Defines for NegotiatedLinkRates ****/
 #define MPI3_SAS_NEG_LINK_RATE_LOGICAL_MASK                   (0xF0)
 #define MPI3_SAS_NEG_LINK_RATE_LOGICAL_SHIFT                  (4)
 #define MPI3_SAS_NEG_LINK_RATE_PHYSICAL_MASK                  (0x0F)
@@ -486,6 +486,7 @@ typedef struct _MPI3_MAN6_GPIO_ENTRY
 #define MPI3_MAN6_GPIO_EXTINT_PARAM1_FLAGS_SOURCE_GENERIC                     (0x00)
 #define MPI3_MAN6_GPIO_EXTINT_PARAM1_FLAGS_SOURCE_CABLE_MGMT                  (0x10)
 #define MPI3_MAN6_GPIO_EXTINT_PARAM1_FLAGS_SOURCE_ACTIVE_CABLE_OVERCURRENT    (0x20)
+#define MPI3_MAN6_GPIO_EXTINT_PARAM1_FLAGS_ACK_REQUIRED                       (0x02)
 
 #define MPI3_MAN6_GPIO_EXTINT_PARAM1_FLAGS_TRIGGER_MASK                       (0x01)
 #define MPI3_MAN6_GPIO_EXTINT_PARAM1_FLAGS_TRIGGER_EDGE                       (0x00)
@@ -1073,7 +1074,7 @@ typedef struct _MPI3_MAN_PAGE12
 #define MPI3_MAN12_FLAGS_SDATAOUT_TYPE_PUSH_PULL                     (0x0000)
 #define MPI3_MAN12_FLAGS_SDATAOUT_TYPE_OPEN_DRAIN                    (0x0001)
 
-/**** Defines for the SioClkFreq field ****/
+/**** Defines for the SClockFreq field ****/
 #define MPI3_MAN12_SIO_CLK_FREQ_MIN                                  (32)        /* 32 Hz min SIO Clk Freq */
 #define MPI3_MAN12_SIO_CLK_FREQ_MAX                                  (100000)    /* 100 KHz max SIO Clk Freq */
 
@@ -1306,7 +1307,7 @@ typedef struct _MPI3_MAN_PAGE20
 #define MPI3_MAN20_ALLOWEDPERSON_EHBA_ALLOWED                        (0x01)
 #define MPI3_MAN20_ALLOWEDPERSON_EHBA_NOT_ALLOWED                    (0x00)
 
-/**** Defines for the NonpremuimFeatures field ****/
+/**** Defines for the NonpremiumFeatures field ****/
 #define MPI3_MAN20_NONPREMUIM_DISABLE_PD_DEGRADED_MASK               (0x01)
 #define MPI3_MAN20_NONPREMUIM_DISABLE_PD_DEGRADED_ENABLED            (0x00)
 #define MPI3_MAN20_NONPREMUIM_DISABLE_PD_DEGRADED_DISABLED           (0x01)
@@ -1338,6 +1339,23 @@ typedef struct _MPI3_MAN_PAGE21
 #define MPI3_MAN21_FLAGS_SES_VPD_ASSOC_DEFAULT                       (0x00000000)
 #define MPI3_MAN21_FLAGS_SES_VPD_ASSOC_OEM_SPECIFIC                  (0x00000001)
 
+/*****************************************************************************
+ *              Manufacturing Page 22                                        *
+ ****************************************************************************/
+
+typedef struct _MPI3_MAN_PAGE22
+{
+    MPI3_CONFIG_PAGE_HEADER         Header;                                            /* 0x00 */
+    U32                             Reserved08;                                        /* 0x08 */
+    U16                             NumEUI64;                                          /* 0x0C */
+    U16                             Reserved0E;                                        /* 0x0E */
+    U64                             BaseEUI64;                                         /* 0x10 */
+} MPI3_MAN_PAGE22, MPI3_POINTER PTR_MPI3_MAN_PAGE22,
+  Mpi3ManPage22_t, MPI3_POINTER pMpi3ManPage22_t;
+
+/**** Defines for the PageVersion field ****/
+#define MPI3_MAN22_PAGEVERSION                                       (0x00)
+
 /*****************************************************************************
  *              Manufacturing Pages 32-63 (ProductSpecific)                  *
  ****************************************************************************/
@@ -1434,13 +1452,21 @@ typedef struct _MPI3_IO_UNIT_PAGE2
  *              IO Unit Page 3                                               *
  ****************************************************************************/
 
+typedef enum _MPI3_IOUNIT3_THRESHOLD
+{
+    MPI3_IOUNIT3_THRESHOLD_WARNING              = 0,
+    MPI3_IOUNIT3_THRESHOLD_CRITICAL             = 1,
+    MPI3_IOUNIT3_THRESHOLD_FATAL                = 2,
+    MPI3_IOUNIT3_THRESHOLD_LOW                  = 3,
+    MPI3_IOUNIT3_NUM_THRESHOLDS
+} MPI3_IOUNIT3_THRESHOLD;
+
 typedef struct _MPI3_IO_UNIT3_SENSOR
 {
     U16             Flags;                                      /* 0x00 */
     U8              ThresholdMargin;                            /* 0x02 */
     U8              Reserved03;                                 /* 0x03 */
-    U16             Threshold[3];                               /* 0x04 */
-    U16             Reserved0A;                                 /* 0x0A */
+    U16             Threshold[MPI3_IOUNIT3_NUM_THRESHOLDS];     /* 0x04 */
     U32             Reserved0C;                                 /* 0x0C */
     U32             Reserved10;                                 /* 0x10 */
     U32             Reserved14;                                 /* 0x14 */
@@ -1448,6 +1474,7 @@ typedef struct _MPI3_IO_UNIT3_SENSOR
   Mpi3IOUnit3Sensor_t, MPI3_POINTER pMpi3IOUnit3Sensor_t;
 
 /**** Defines for the Flags field ****/
+#define MPI3_IOUNIT3_SENSOR_FLAGS_LOW_THRESHOLD_VALID           (0x0020)
 #define MPI3_IOUNIT3_SENSOR_FLAGS_FATAL_EVENT_ENABLED           (0x0010)
 #define MPI3_IOUNIT3_SENSOR_FLAGS_FATAL_ACTION_ENABLED          (0x0008)
 #define MPI3_IOUNIT3_SENSOR_FLAGS_CRITICAL_EVENT_ENABLED        (0x0004)
@@ -1591,7 +1618,7 @@ typedef struct _MPI3_IO_UNIT_PAGE5
 #define MPI3_IOUNIT5_FLAGS_POWER_CAPABLE_SPINUP            (0x02)
 #define MPI3_IOUNIT5_FLAGS_AUTO_PORT_ENABLE                (0x01)
 
-/**** Defines for the PHY field ****/
+/**** Defines for the Phy field ****/
 #define MPI3_IOUNIT5_PHY_SPINUP_GROUP_MASK                 (0x03)
 
 /*****************************************************************************
@@ -1621,11 +1648,33 @@ typedef struct _MPI3_IO_UNIT_PAGE6
 #define MPI3_IOUNIT8_DIGEST_MAX                   (1)
 #endif  /* MPI3_IOUNIT8_DIGEST_MAX */
 
-typedef union _MPI3_IOUNIT8_DIGEST
+typedef union _MPI3_IOUNIT8_RAW_DIGEST
 {
     U32                             Dword[16];
     U16                             Word[32];
     U8                              Byte[64];
+} MPI3_IOUNIT8_RAW_DIGEST, MPI3_POINTER PTR_MPI3_IOUNIT8_RAW_DIGEST,
+  Mpi3IOUnit8RawDigest_t, MPI3_POINTER pMpi3IOUnit8RawDigest_t;
+
+typedef struct _MPI3_IOUNIT8_METADATA_DIGEST
+{
+    U8                              SlotStatus;                        /* 0x00 */
+    U8                              Reserved01[3];                     /* 0x01 */
+    U32                             Reserved04[3];                     /* 0x04 */
+    MPI3_IOUNIT8_RAW_DIGEST         DigestData;                        /* 0x10 */
+} MPI3_IOUNIT8_METADATA_DIGEST, MPI3_POINTER PTR_MPI3_IOUNIT8_METADATA_DIGEST,
+  Mpi3IOUnit8MetadataDigest_t, MPI3_POINTER pMpi3IOUnit8MetadataDigest_t;
+
+/**** Defines for the SlotStatus field ****/
+#define MPI3_IOUNIT8_METADATA_DIGEST_SLOTSTATUS_UNUSED                 (0x00)
+#define MPI3_IOUNIT8_METADATA_DIGEST_SLOTSTATUS_UPDATE_PENDING         (0x01)
+#define MPI3_IOUNIT8_METADATA_DIGEST_SLOTSTATUS_VALID                  (0x03)
+#define MPI3_IOUNIT8_METADATA_DIGEST_SLOTSTATUS_INVALID                (0x07)
+
+typedef union _MPI3_IOUNIT8_DIGEST
+{
+    MPI3_IOUNIT8_RAW_DIGEST         RawDigest[MPI3_IOUNIT8_DIGEST_MAX];
+    MPI3_IOUNIT8_METADATA_DIGEST    MetadataDigest[MPI3_IOUNIT8_DIGEST_MAX];
 } MPI3_IOUNIT8_DIGEST, MPI3_POINTER PTR_MPI3_IOUNIT8_DIGEST,
   Mpi3IOUnit8Digest_t, MPI3_POINTER pMpi3IOUnit8Digest_t;
 
@@ -1633,8 +1682,9 @@ typedef struct _MPI3_IO_UNIT_PAGE8
 {
     MPI3_CONFIG_PAGE_HEADER         Header;                             /* 0x00 */
     U8                              SBMode;                             /* 0x08 */
-    U8                              SbState;                            /* 0x09 */
-    U16                             Reserved0A;                         /* 0x0A */
+    U8                              SBState;                            /* 0x09 */
+    U8                              Flags;                              /* 0x0A */
+    U8                              Reserved0A;                         /* 0x0B */
     U8                              NumSlots;                           /* 0x0C */
     U8                              SlotsAvailable;                     /* 0x0D */
     U8                              CurrentKeyEncryptionAlgo;           /* 0x0E */
@@ -1642,22 +1692,27 @@ typedef struct _MPI3_IO_UNIT_PAGE8
     MPI3_VERSION_UNION              CurrentSvn;                         /* 0x10 */
     U32                             Reserved14;                         /* 0x14 */
     U32                             CurrentKey[128];                    /* 0x18 */
-    MPI3_IOUNIT8_DIGEST             Digest[MPI3_IOUNIT8_DIGEST_MAX];    /* 0x218 */  /* variable length */
+    MPI3_IOUNIT8_DIGEST             Digest;                             /* 0x218 */  /* variable length */
 } MPI3_IO_UNIT_PAGE8, MPI3_POINTER PTR_MPI3_IO_UNIT_PAGE8,
   Mpi3IOUnitPage8_t, MPI3_POINTER pMpi3IOUnitPage8_t;
 
 /**** Defines for the PageVersion field ****/
-#define MPI3_IOUNIT8_PAGEVERSION                  (0x00)
+#define MPI3_IOUNIT8_PAGEVERSION                                  (0x00)
 
 /**** Defines for the SBMode field ****/
-#define MPI3_IOUNIT8_SBMODE_SECURE_DEBUG          (0x04)
-#define MPI3_IOUNIT8_SBMODE_HARD_SECURE           (0x02)
-#define MPI3_IOUNIT8_SBMODE_CONFIG_SECURE         (0x01)
+#define MPI3_IOUNIT8_SBMODE_SECURE_DEBUG                          (0x04)
+#define MPI3_IOUNIT8_SBMODE_HARD_SECURE                           (0x02)
+#define MPI3_IOUNIT8_SBMODE_CONFIG_SECURE                         (0x01)
 
 /**** Defines for the SBState field ****/
-#define MPI3_IOUNIT8_SBSTATE_SVN_UPDATE_PENDING   (0x04)
-#define MPI3_IOUNIT8_SBSTATE_KEY_UPDATE_PENDING   (0x02)
-#define MPI3_IOUNIT8_SBSTATE_SECURE_BOOT_ENABLED  (0x01)
+#define MPI3_IOUNIT8_SBSTATE_SVN_UPDATE_PENDING                   (0x04)
+#define MPI3_IOUNIT8_SBSTATE_KEY_UPDATE_PENDING                   (0x02)
+#define MPI3_IOUNIT8_SBSTATE_SECURE_BOOT_ENABLED                  (0x01)
+
+/**** Defines for the Flags field ****/
+#define MPI3_IOUNIT8_FLAGS_DIGESTFORM_MASK                        (0x07)
+#define MPI3_IOUNIT8_FLAGS_DIGESTFORM_RAW                         (0x00)
+#define MPI3_IOUNIT8_FLAGS_DIGESTFORM_DIGEST_WITH_METADATA        (0x01)
 
 /*****************************************************************************
  *              IO Unit Page 9                                               *
@@ -1908,6 +1963,38 @@ typedef struct _MPI3_IO_UNIT_PAGE15
 /**** Defines for the NumPowerBudgetData field ****/
 #define MPI3_IOUNIT15_NUMPOWERBUDGETDATA_POWER_BUDGETING_DISABLED   (0x00)
 
+/*****************************************************************************
+ *              IO Unit Page 16                                              *
+ ****************************************************************************/
+
+#ifndef MPI3_IOUNIT16_ERROR_MAX
+#define MPI3_IOUNIT16_ERROR_MAX                                      (1)
+#endif /* MPI3_IOUNIT16_ERROR_MAX */
+
+typedef struct _MPI3_IOUNIT16_ERROR
+{
+    U32                             Offset;                                   /* 0x00 */
+    U32                             Reserved04;                               /* 0x04 */
+    U64                             Count;                                    /* 0x08 */
+    U64                             Timestamp;                                /* 0x10 */
+} MPI3_IOUNIT16_ERROR, MPI3_POINTER PTR_MPI3_IOUNIT16_ERROR,
+  Mpi3IOUnit16Error_t, MPI3_POINTER pMpi3IOUnit16Error_t;
+
+typedef struct _MPI3_IO_UNIT_PAGE16
+{
+    MPI3_CONFIG_PAGE_HEADER         Header;                                   /* 0x00 */
+    U64                             TotalErrorCount;                          /* 0x08 */
+    U32                             Reserved10[3];                            /* 0x10 */
+    U8                              NumErrors;                                /* 0x1C */
+    U8                              MaxErrorsTracked;                         /* 0x1D */
+    U16                             Reserved1E;                               /* 0x1E */
+    MPI3_IOUNIT16_ERROR             Error[MPI3_IOUNIT16_ERROR_MAX];           /* 0x20 */ /* variable length */
+} MPI3_IO_UNIT_PAGE16, MPI3_POINTER PTR_MPI3_IO_UNIT_PAGE16,
+  Mpi3IOUnitPage16_t, MPI3_POINTER pMpi3IOUnitPage16_t;
+
+/**** Defines for the PageVersion field ****/
+#define MPI3_IOUNIT16_PAGEVERSION                                   (0x00)
+
 /*****************************************************************************
  *              IOC Configuration Pages                                      *
  ****************************************************************************/
@@ -1973,7 +2060,8 @@ typedef struct _MPI3_IOC_PAGE2
  *              Driver Configuration Pages                                  *
  ****************************************************************************/
 
-/**** Defines for the Flags field ****/
+/**** Defines for the Flags field  in Driver Pages 10, 20, and 30 ****/
+/****    NOT used in Driver Page 1 Flags field                    ****/
 #define MPI3_DRIVER_FLAGS_ADMINRAIDPD_BLOCKED               (0x0010)
 #define MPI3_DRIVER_FLAGS_OOBRAIDPD_BLOCKED                 (0x0008)
 #define MPI3_DRIVER_FLAGS_OOBRAIDVD_BLOCKED                 (0x0004)
@@ -2006,7 +2094,7 @@ typedef struct _MPI3_ALLOWED_CMD_NVME
 } MPI3_ALLOWED_CMD_NVME, MPI3_POINTER PTR_MPI3_ALLOWED_CMD_NVME,
   Mpi3AllowedCmdNvme_t, MPI3_POINTER pMpi3AllowedCmdNvme_t;
 
-/**** Defines for the CommandFlags field ****/
+/**** Defines for the NVMeCmdFlags field ****/
 #define MPI3_DRIVER_ALLOWEDCMD_NVMECMDFLAGS_SUBQ_TYPE_MASK     (0x80)
 #define MPI3_DRIVER_ALLOWEDCMD_NVMECMDFLAGS_SUBQ_TYPE_IO       (0x00)
 #define MPI3_DRIVER_ALLOWEDCMD_NVMECMDFLAGS_SUBQ_TYPE_ADMIN    (0x80)
@@ -2057,6 +2145,8 @@ typedef struct _MPI3_DRIVER_PAGE0
 #define MPI3_DRIVER0_PAGEVERSION                                    (0x00)
 
 /**** Defines for the BSDOptions field ****/
+#define MPI3_DRIVER0_BSDOPTS_DEVICEEXPOSURE_DISABLE                 (0x00000020)
+#define MPI3_DRIVER0_BSDOPTS_WRITECACHE_DISABLE                     (0x00000010)
 #define MPI3_DRIVER0_BSDOPTS_HEADLESS_MODE_ENABLE                   (0x00000008)
 #define MPI3_DRIVER0_BSDOPTS_DIS_HII_CONFIG_UTIL                    (0x00000004)
 #define MPI3_DRIVER0_BSDOPTS_REGISTRATION_MASK                      (0x00000003)
@@ -2263,14 +2353,6 @@ typedef union _MPI3_SECURITY_NONCE
 } MPI3_SECURITY_NONCE, MPI3_POINTER PTR_MPI3_SECURITY_NONCE,
   Mpi3SecurityNonce_t, MPI3_POINTER pMpi3SecurityNonce_t;
 
-typedef union _MPI3_SECURITY_ROOT_DIGEST
-{
-    U32                             Dword[16];
-    U16                             Word[32];
-    U8                              Byte[64];
-} MPI3_SECURITY_ROOT_DIGEST, MPI3_POINTER PTR_MPI3_SECURITY_ROOT_DIGEST,
-  Mpi3SecurityRootDigest_t, MPI3_POINTER pMpi3SecurityRootDigest_t;
-
 /*****************************************************************************
  *              Security Page 0                                             *
  ****************************************************************************/
@@ -2382,17 +2464,25 @@ typedef struct _MPI3_SECURITY_PAGE1
 #define MPI3_SECURITY2_TRUSTED_ROOT_MAX      1
 #endif  /* MPI3_SECURITY2_TRUSTED_ROOT_MAX */
 
+#ifndef MPI3_SECURITY2_ROOT_LEN
+#define MPI3_SECURITY2_ROOT_LEN      4
+#endif  /* MPI3_SECURITY2_ROOT_LEN */
+
 typedef struct _MPI3_SECURITY2_TRUSTED_ROOT
 {
     U8                              Level;                                        /* 0x00 */
     U8                              HashAlgorithm;                                /* 0x01 */
     U16                             TrustedRootFlags;                             /* 0x02 */
     U32                             Reserved04[3];                                /* 0x04 */
-    MPI3_SECURITY_ROOT_DIGEST       RootDigest;                                   /* 0x10 */
+    U8                              Root[MPI3_SECURITY2_ROOT_LEN];                /* 0x10 */ /* variable length */
 } MPI3_SECURITY2_TRUSTED_ROOT, MPI3_POINTER PTR_MPI3_SECURITY2_TRUSTED_ROOT,
   Mpi3Security2TrustedRoot_t, MPI3_POINTER pMpi3Security2TrustedRoot_t;
 
 /**** Defines for the TrustedRootFlags field ****/
+#define MPI3_SECURITY2_TRUSTEDROOT_TRUSTEDROOTFLAGS_ROOTFORM_MASK                  (0xF000)
+#define MPI3_SECURITY2_TRUSTEDROOT_TRUSTEDROOTFLAGS_ROOTFORM_SHIFT                 (12)
+#define MPI3_SECURITY2_TRUSTEDROOT_TRUSTEDROOTFLAGS_ROOTFORM_DIGEST                (0x0000)
+#define MPI3_SECURITY2_TRUSTEDROOT_TRUSTEDROOTFLAGS_ROOTFORM_DERCERT               (0x1000)
 #define MPI3_SECURITY2_TRUSTEDROOT_TRUSTEDROOTFLAGS_HASHALGOSOURCE_MASK            (0x0006)
 #define MPI3_SECURITY2_TRUSTEDROOT_TRUSTEDROOTFLAGS_HASHALGOSOURCE_SHIFT           (1)
 #define MPI3_SECURITY2_TRUSTEDROOT_TRUSTEDROOTFLAGS_HASHALGOSOURCE_HA_FIELD        (0x0000)
@@ -2407,7 +2497,8 @@ typedef struct _MPI3_SECURITY_PAGE2
     MPI3_SECURITY_NONCE             Nonce;                                         /* 0x50 */
     U32                             Reserved90[3];                                 /* 0x90 */
     U8                              NumRoots;                                      /* 0x9C */
-    U8                              Reserved9D[3];                                 /* 0x9D */
+    U8                              Reserved9D;                                    /* 0x9D */
+    U16                             RootElementSize;                               /* 0x9E */
     MPI3_SECURITY2_TRUSTED_ROOT     TrustedRoot[MPI3_SECURITY2_TRUSTED_ROOT_MAX];  /* 0xA0 */ /* variable length */
 } MPI3_SECURITY_PAGE2, MPI3_POINTER PTR_MPI3_SECURITY_PAGE2,
   Mpi3SecurityPage2_t, MPI3_POINTER pMpi3SecurityPage2_t;
@@ -3052,7 +3143,7 @@ typedef struct _MPI3_SAS_PHY_PAGE4
  *              Common definitions used by PCIe Configuration Pages          *
  ****************************************************************************/
 
-/**** Defines for Negotiated Link Rates ****/
+/**** Defines for NegotiatedLinkRates ****/
 #define MPI3_PCIE_LINK_RETIMERS_MASK                    (0x30)
 #define MPI3_PCIE_LINK_RETIMERS_SHIFT                   (4)
 #define MPI3_PCIE_NEG_LINK_RATE_MASK                    (0x0F)
@@ -3219,8 +3310,8 @@ typedef struct _MPI3_PCIE_IO_UNIT_PAGE1
 #define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_PERST_OVERRIDE_BACKPLANE_ERROR          (0x60000000)
 #define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_REFCLK_OVERRIDE_MASK                    (0x1C000000)
 #define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_REFCLK_OVERRIDE_NONE                    (0x00000000)
-#define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_REFCLK_OVERRIDE_DEASSERT                (0x04000000)
-#define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_REFCLK_OVERRIDE_ASSERT                  (0x08000000)
+#define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_REFCLK_OVERRIDE_ENABLE                  (0x04000000)
+#define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_REFCLK_OVERRIDE_DISABLE                 (0x08000000)
 #define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_REFCLK_OVERRIDE_BACKPLANE_ERROR         (0x0C000000)
 #define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_PARTIAL_CAPACITY_ENABLE                 (0x00000100)
 #define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_LINK_OVERRIDE_DISABLE                   (0x00000080)
@@ -3362,12 +3453,14 @@ typedef struct _MPI3_PCIE_SWITCH_PAGE1
 /**** Defines for the PageVersion field ****/
 #define MPI3_PCIESWITCH1_PAGEVERSION        (0x00)
 
-/**** Defines for the FLAGS field ****/
+/**** Defines for the Flags field ****/
 #define MPI3_PCIESWITCH1_FLAGS_ASPMSTATE_MASK     (0x0C)
 #define MPI3_PCIESWITCH1_FLAGS_ASPMSTATE_SHIFT    (2)
+
 /*** use MPI3_PCIE_ASPM_ENABLE_ defines for ASPMState field values ***/
 #define MPI3_PCIESWITCH1_FLAGS_ASPMSUPPORT_MASK     (0x03)
 #define MPI3_PCIESWITCH1_FLAGS_ASPMSUPPORT_SHIFT    (0)
+
 /*** use MPI3_PCIE_ASPM_SUPPORT_ defines for ASPMSupport field values ***/
 
 /**** Defines for the NegotiatedLinkRate field - use MPI3_PCIE_NEG_LINK_RATE_ defines ****/
@@ -3454,6 +3547,8 @@ typedef struct _MPI3_ENCLOSURE_PAGE0
     U16                             SEPDevHandle;           /* 0x1A */
     U8                              ChassisSlot;            /* 0x1C */
     U8                              Reserved1D[3];          /* 0x1D */
+    U32                             ReceptacleIDs;          /* 0x20 */
+    U32                             Reserved24;             /* 0x24 */
 } MPI3_ENCLOSURE_PAGE0, MPI3_POINTER PTR_MPI3_ENCLOSURE_PAGE0,
   Mpi3EnclosurePage0_t, MPI3_POINTER pMpi3EnclosurePage0_t;
 
@@ -3474,7 +3569,8 @@ typedef struct _MPI3_ENCLOSURE_PAGE0
 #define MPI3_ENCLS0_FLAGS_MNG_IOC_SES                   (0x0001)
 #define MPI3_ENCLS0_FLAGS_MNG_SES_ENCLOSURE             (0x0002)
 
-/**** Defines for the PhysicalPort field - use MPI3_DEVICE0_PHYPORT_ defines ****/
+/**** Defines for the ReceptacleIDs field ****/
+#define MPI3_ENCLS0_RECEPTACLEIDS_NOT_REPORTED          (0x00000000)
 
 /*****************************************************************************
  *              Device Configuration Pages                                   *
@@ -3577,7 +3673,7 @@ typedef struct _MPI3_DEVICE0_PCIE_FORMAT
 #define MPI3_DEVICE0_PCIE_CAP_ASPM_SHIFT                    (6)
 /*** use MPI3_PCIE_ASPM_SUPPORT_  defines for ASPM field values ***/
 
-/**** Defines for the RecoverMethod field ****/
+/**** Defines for the RecoveryInfo field ****/
 #define MPI3_DEVICE0_PCIE_RECOVER_METHOD_MASK               (0xE0)
 #define MPI3_DEVICE0_PCIE_RECOVER_METHOD_NS_MGMT            (0x00)
 #define MPI3_DEVICE0_PCIE_RECOVER_METHOD_FORMAT             (0x20)
diff --git a/sys/dev/mpi3mr/mpi/mpi30_image.h b/sys/dev/mpi3mr/mpi/mpi30_image.h
index 7b953cb3b1a6..917763b3e921 100644
--- a/sys/dev/mpi3mr/mpi/mpi30_image.h
+++ b/sys/dev/mpi3mr/mpi/mpi30_image.h
@@ -1,7 +1,7 @@
 /*
- * SPDX-License-Identifier: BSD-2-Clause
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
  *
- * Copyright (c) 2016-2023, Broadcom Inc. All rights reserved.
+ * Copyright (c) 2016-2024, Broadcom Inc. All rights reserved.
  * Support: <fbsd-storage-driver.pdl@broadcom.com>
  *
  * Redistribution and use in source and binary forms, with or without
@@ -38,7 +38,6 @@
  * Broadcom Inc. (Broadcom) MPI3MR Adapter FreeBSD
  *
  */
-
 #ifndef MPI30_IMAGE_H
 #define MPI30_IMAGE_H     1
 
@@ -119,12 +118,19 @@ typedef struct _MPI3_COMPONENT_IMAGE_HEADER
 #define MPI3_IMAGE_HEADER_SIGNATURE1_RMC                      (0x20434D52)  /* string "RMC "  */
 #define MPI3_IMAGE_HEADER_SIGNATURE1_SMM                      (0x204D4D53)  /* string "SMM "  */
 #define MPI3_IMAGE_HEADER_SIGNATURE1_PSW                      (0x20575350)  /* string "PSW "  */
-
+#define MPI3_IMAGE_HEADER_SIGNATURE1_CSW                      (0x20575343)  /* string "CSW "  */
 
 /**** Definitions for Signature2 field ****/
 #define MPI3_IMAGE_HEADER_SIGNATURE2_VALUE                    (0x50584546)
 
 /**** Definitions for Flags field ****/
+#define MPI3_IMAGE_HEADER_FLAGS_SIGNED_UEFI_MASK              (0x00000300)
+#define MPI3_IMAGE_HEADER_FLAGS_SIGNED_UEFI_UNSPECIFIED       (0x00000000)
+#define MPI3_IMAGE_HEADER_FLAGS_SIGNED_UEFI_NOT_SIGNED        (0x00000100)
+#define MPI3_IMAGE_HEADER_FLAGS_SIGNED_UEFI_MICROSOFT_SIGNED  (0x00000200)
+#define MPI3_IMAGE_HEADER_FLAGS_CERT_CHAIN_FORMAT_MASK        (0x000000C0)
+#define MPI3_IMAGE_HEADER_FLAGS_CERT_CHAIN_FORMAT_DEVICE_CERT (0x00000000)
+#define MPI3_IMAGE_HEADER_FLAGS_CERT_CHAIN_FORMAT_ALIAS_CERT  (0x00000040)
 #define MPI3_IMAGE_HEADER_FLAGS_DEVICE_KEY_BASIS_MASK         (0x00000030)
 #define MPI3_IMAGE_HEADER_FLAGS_DEVICE_KEY_BASIS_CDI          (0x00000000)
 #define MPI3_IMAGE_HEADER_FLAGS_DEVICE_KEY_BASIS_DI           (0x00000010)
@@ -216,12 +222,14 @@ typedef struct _MPI3_CI_MANIFEST_MPI
 
 /* defines for the ReleaseLevel field */
 #define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_DEV                        (0x00)
+#define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_PRE_PRODUCTION             (0x08)
 #define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_PREALPHA                   (0x10)
 #define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_ALPHA                      (0x20)
 #define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_BETA                       (0x30)
 #define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_RC                         (0x40)
 #define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_GCA                        (0x50)
 #define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_POINT                      (0x60)
+#define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_DIAG                       (0xF0)
 
 /* defines for the Flags field */
 #define MPI3_CI_MANIFEST_MPI_FLAGS_DIAG_AUTHORIZATION                 (0x01)
@@ -314,9 +322,9 @@ typedef struct _MPI3_SUPPORTED_DEVICES_DATA
 } MPI3_SUPPORTED_DEVICES_DATA, MPI3_POINTER PTR_MPI3_SUPPORTED_DEVICES_DATA,
   Mpi3SupportedDevicesData_t, MPI3_POINTER pMpi3SupportedDevicesData_t;
 
-#ifndef MPI3_ENCRYPTED_HASH_MAX
-#define MPI3_ENCRYPTED_HASH_MAX                      (1)
-#endif  /* MPI3_ENCRYPTED_HASH_MAX */
+#ifndef MPI3_PUBLIC_KEY_MAX
+#define MPI3_PUBLIC_KEY_MAX                          (1)
+#endif  /* MPI3_PUBLIC_KEY_MAX */
 
 /* Encrypted Hash Entry Format */
 typedef struct _MPI3_ENCRYPTED_HASH_ENTRY
@@ -325,8 +333,10 @@ typedef struct _MPI3_ENCRYPTED_HASH_ENTRY
     U8                      HashAlgorithm;                                  /* 0x01 */
     U8                      EncryptionAlgorithm;                            /* 0x02 */
     U8                      Reserved03;                                     /* 0x03 */
-    U32                     Reserved04;                                     /* 0x04 */
-    U32                     EncryptedHash[MPI3_ENCRYPTED_HASH_MAX];         /* 0x08 */   /* variable length */
+    U16                     PublicKeySize;                                  /* 0x04 */
+    U16                     SignatureSize;                                  /* 0x06 */
+    U32                     PublicKey[MPI3_PUBLIC_KEY_MAX];                 /* 0x08 */     /* variable length */
+    /*                      Signature     - offset of this field must be calculated */     /* variable length */
 } MPI3_ENCRYPTED_HASH_ENTRY, MPI3_POINTER PTR_MPI3_ENCRYPTED_HASH_ENTRY,
   Mpi3EncryptedHashEntry_t, MPI3_POINTER pMpi3EncryptedHashEntry_t;
 
@@ -358,24 +368,9 @@ typedef struct _MPI3_ENCRYPTED_HASH_ENTRY
 #define MPI3_ENCRYPTION_ALGORITHM_ECDSA_P256         (0x07)   /* NIST secp256r1 curve */
 #define MPI3_ENCRYPTION_ALGORITHM_ECDSA_P384         (0x08)   /* NIST secp384r1 curve */
 #define MPI3_ENCRYPTION_ALGORITHM_ECDSA_P521         (0x09)   /* NIST secp521r1 curve */
-
-
-#ifndef MPI3_PUBLIC_KEY_MAX
-#define MPI3_PUBLIC_KEY_MAX                          (1)
-#endif  /* MPI3_PUBLIC_KEY_MAX */
-
-/* Encrypted Key with Hash Entry Format */
-typedef struct _MPI3_ENCRYPTED_KEY_WITH_HASH_ENTRY
-{
-    U8                      HashImageType;                                  /* 0x00 */
-    U8                      HashAlgorithm;                                  /* 0x01 */
-    U8                      EncryptionAlgorithm;                            /* 0x02 */
-    U8                      Reserved03;                                     /* 0x03 */
-    U32                     Reserved04;                                     /* 0x04 */
-    U32                     PublicKey[MPI3_PUBLIC_KEY_MAX];                 /* 0x08 */     /* variable length */
-    /*                      EncryptedHash - offset of this field must be calculated */     /* variable length */
-} MPI3_ENCRYPTED_KEY_WITH_HASH_ENTRY, MPI3_POINTER PTR_MPI3_ENCRYPTED_KEY_WITH_HASH_ENTRY,
-  Mpi3EncryptedKeyWithHashEntry_t, MPI3_POINTER pMpi3EncryptedKeyWithHashEntry_t;
+#define MPI3_ENCRYPTION_ALGORITHM_LMS_HSS            (0x0A)   /* Leighton-Micali Signature (LMS) -
+							       * Hierarchical Signature System (HSS)
+							       */
 
 #ifndef MPI3_ENCRYPTED_HASH_ENTRY_MAX
 #define MPI3_ENCRYPTED_HASH_ENTRY_MAX               (1)
diff --git a/sys/dev/mpi3mr/mpi/mpi30_init.h b/sys/dev/mpi3mr/mpi/mpi30_init.h
index c0ba14909ac1..361fb690fbe6 100644
--- a/sys/dev/mpi3mr/mpi/mpi30_init.h
+++ b/sys/dev/mpi3mr/mpi/mpi30_init.h
@@ -1,7 +1,7 @@
 /*
- * SPDX-License-Identifier: BSD-2-Clause
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
  *
- * Copyright (c) 2016-2023, Broadcom Inc. All rights reserved.
+ * Copyright (c) 2016-2024, Broadcom Inc. All rights reserved.
  * Support: <fbsd-storage-driver.pdl@broadcom.com>
  *
  * Redistribution and use in source and binary forms, with or without
@@ -38,7 +38,6 @@
  * Broadcom Inc. (Broadcom) MPI3MR Adapter FreeBSD
  *
  */
-
 #ifndef MPI30_INIT_H
 #define MPI30_INIT_H     1
 
@@ -78,7 +77,7 @@ typedef struct _MPI3_SCSI_IO_REQUEST
     U16                     ChangeCount;                    /* 0x08 */
     U16                     DevHandle;                      /* 0x0A */
     U32                     Flags;                          /* 0x0C */
-    U32                     SkipCount;                      /* 0x10 */
+    U32                     IOCUseOnly10;                   /* 0x10 */
     U32                     DataLength;                     /* 0x14 */
     U8                      LUN[8];                         /* 0x18 */
     MPI3_SCSI_IO_CDB_UNION  CDB;                            /* 0x20 */
@@ -91,10 +90,12 @@ typedef struct _MPI3_SCSI_IO_REQUEST
 #define MPI3_SCSIIO_MSGFLAGS_DIVERT_TO_FIRMWARE               (0x40)
 
 /**** Defines for the Flags field ****/
-#define MPI3_SCSIIO_FLAGS_LARGE_CDB                           (0x60000000)
+#define MPI3_SCSIIO_FLAGS_LARGE_CDB_MASK                      (0x60000000)
 #define MPI3_SCSIIO_FLAGS_CDB_16_OR_LESS                      (0x00000000)
 #define MPI3_SCSIIO_FLAGS_CDB_GREATER_THAN_16                 (0x20000000)
 #define MPI3_SCSIIO_FLAGS_CDB_IN_SEPARATE_BUFFER              (0x40000000)
+#define MPI3_SCSIIO_FLAGS_CDB_PRODUCT_SPECIFIC                (0x60000000)
+#define MPI3_SCSIIO_FLAGS_IOC_USE_ONLY_27_MASK                (0x18000000)
 #define MPI3_SCSIIO_FLAGS_TASKATTRIBUTE_MASK                  (0x07000000)
 #define MPI3_SCSIIO_FLAGS_TASKATTRIBUTE_SIMPLEQ               (0x00000000)
 #define MPI3_SCSIIO_FLAGS_TASKATTRIBUTE_HEADOFQ               (0x01000000)
diff --git a/sys/dev/mpi3mr/mpi/mpi30_ioc.h b/sys/dev/mpi3mr/mpi/mpi30_ioc.h
index 77f6be5b2694..2d45a55b89e8 100644
--- a/sys/dev/mpi3mr/mpi/mpi30_ioc.h
+++ b/sys/dev/mpi3mr/mpi/mpi30_ioc.h
@@ -1,7 +1,7 @@
 /*
- * SPDX-License-Identifier: BSD-2-Clause
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
  *
- * Copyright (c) 2016-2023, Broadcom Inc. All rights reserved.
+ * Copyright (c) 2016-2024, Broadcom Inc. All rights reserved.
  * Support: <fbsd-storage-driver.pdl@broadcom.com>
  *
  * Redistribution and use in source and binary forms, with or without
@@ -38,7 +38,6 @@
  * Broadcom Inc. (Broadcom) MPI3MR Adapter FreeBSD
  *
  */
-
 #ifndef MPI30_IOC_H
 #define MPI30_IOC_H     1
 
@@ -76,17 +75,19 @@ typedef struct _MPI3_IOC_INIT_REQUEST
   Mpi3IOCInitRequest_t, MPI3_POINTER pMpi3IOCInitRequest_t;
 
 /**** Defines for the MsgFlags field ****/
-#define MPI3_IOCINIT_MSGFLAGS_HOSTMETADATA_MASK          (0x03)
-#define MPI3_IOCINIT_MSGFLAGS_HOSTMETADATA_NOT_USED      (0x00)
-#define MPI3_IOCINIT_MSGFLAGS_HOSTMETADATA_SEPARATED     (0x01)
-#define MPI3_IOCINIT_MSGFLAGS_HOSTMETADATA_INLINE        (0x02)
-#define MPI3_IOCINIT_MSGFLAGS_HOSTMETADATA_BOTH          (0x03)
+#define MPI3_IOCINIT_MSGFLAGS_WRITESAMEDIVERT_SUPPORTED     (0x08)
+#define MPI3_IOCINIT_MSGFLAGS_SCSIIOSTATUSREPLY_SUPPORTED   (0x04)
+#define MPI3_IOCINIT_MSGFLAGS_HOSTMETADATA_MASK             (0x03)
+#define MPI3_IOCINIT_MSGFLAGS_HOSTMETADATA_NOT_USED         (0x00)
+#define MPI3_IOCINIT_MSGFLAGS_HOSTMETADATA_SEPARATED        (0x01)
+#define MPI3_IOCINIT_MSGFLAGS_HOSTMETADATA_INLINE           (0x02)
+#define MPI3_IOCINIT_MSGFLAGS_HOSTMETADATA_BOTH             (0x03)
 
 /**** Defines for the WhoInit field ****/
-#define MPI3_WHOINIT_NOT_INITIALIZED                     (0x00)
-#define MPI3_WHOINIT_ROM_BIOS                            (0x02)
-#define MPI3_WHOINIT_HOST_DRIVER                         (0x03)
-#define MPI3_WHOINIT_MANUFACTURER                        (0x04)
+#define MPI3_WHOINIT_NOT_INITIALIZED                        (0x00)
+#define MPI3_WHOINIT_ROM_BIOS                               (0x02)
+#define MPI3_WHOINIT_HOST_DRIVER                            (0x03)
+#define MPI3_WHOINIT_MANUFACTURER                           (0x04)
 
 /**** Defines for the DriverInformationAddress field */
 typedef struct _MPI3_DRIVER_INFO_LAYOUT
@@ -173,6 +174,8 @@ typedef struct _MPI3_IOC_FACTS_DATA
     U16                     MaxIOThrottleGroup;                 /* 0x62 */
     U16                     IOThrottleLow;                      /* 0x64 */
     U16                     IOThrottleHigh;                     /* 0x66 */
+    U32                     DiagFdlSize;                        /* 0x68 */
+    U32                     DiagTtySize;                        /* 0x6C */
 } MPI3_IOC_FACTS_DATA, MPI3_POINTER PTR_MPI3_IOC_FACTS_DATA,
   Mpi3IOCFactsData_t, MPI3_POINTER pMpi3IOCFactsData_t;
 
@@ -183,13 +186,13 @@ typedef struct _MPI3_IOC_FACTS_DATA
 #define MPI3_IOCFACTS_CAPABILITY_INT_COALESCE_MASK            (0x00000600)
 #define MPI3_IOCFACTS_CAPABILITY_INT_COALESCE_FIXED_THRESHOLD (0x00000000)
 #define MPI3_IOCFACTS_CAPABILITY_INT_COALESCE_OUTSTANDING_IO  (0x00000200)
-#define MPI3_IOCFACTS_CAPABILITY_COMPLETE_RESET_CAPABLE       (0x00000100)
-#define MPI3_IOCFACTS_CAPABILITY_SEG_DIAG_TRACE_ENABLED       (0x00000080)
-#define MPI3_IOCFACTS_CAPABILITY_SEG_DIAG_FW_ENABLED          (0x00000040)
-#define MPI3_IOCFACTS_CAPABILITY_SEG_DIAG_DRIVER_ENABLED      (0x00000020)
-#define MPI3_IOCFACTS_CAPABILITY_ADVANCED_HOST_PD_ENABLED     (0x00000010)
-#define MPI3_IOCFACTS_CAPABILITY_RAID_CAPABLE                 (0x00000008)
-#define MPI3_IOCFACTS_CAPABILITY_MULTIPATH_ENABLED            (0x00000002)
+#define MPI3_IOCFACTS_CAPABILITY_COMPLETE_RESET_SUPPORTED     (0x00000100)
+#define MPI3_IOCFACTS_CAPABILITY_SEG_DIAG_TRACE_SUPPORTED     (0x00000080)
+#define MPI3_IOCFACTS_CAPABILITY_SEG_DIAG_FW_SUPPORTED        (0x00000040)
+#define MPI3_IOCFACTS_CAPABILITY_SEG_DIAG_DRIVER_SUPPORTED    (0x00000020)
+#define MPI3_IOCFACTS_CAPABILITY_ADVANCED_HOST_PD_SUPPORTED   (0x00000010)
+#define MPI3_IOCFACTS_CAPABILITY_RAID_SUPPORTED               (0x00000008)
+#define MPI3_IOCFACTS_CAPABILITY_MULTIPATH_SUPPORTED          (0x00000002)
 #define MPI3_IOCFACTS_CAPABILITY_COALESCE_CTRL_SUPPORTED      (0x00000001)
 
 /**** WhoInit values are defined under IOCInit Request Message definition ****/
@@ -234,22 +237,29 @@ typedef struct _MPI3_IOC_FACTS_DATA
 #define MPI3_IOCFACTS_MAX_DATA_LENGTH_NOT_REPORTED            (0x0000)
 
 /**** Defines for the Flags field ****/
-#define MPI3_IOCFACTS_FLAGS_SIGNED_NVDATA_REQUIRED            (0x00010000)
-#define MPI3_IOCFACTS_FLAGS_DMA_ADDRESS_WIDTH_MASK            (0x0000FF00)
-#define MPI3_IOCFACTS_FLAGS_DMA_ADDRESS_WIDTH_SHIFT           (8)
-#define MPI3_IOCFACTS_FLAGS_INITIAL_PORT_ENABLE_MASK          (0x00000030)
-#define MPI3_IOCFACTS_FLAGS_INITIAL_PORT_ENABLE_NOT_STARTED   (0x00000000)
-#define MPI3_IOCFACTS_FLAGS_INITIAL_PORT_ENABLE_IN_PROGRESS   (0x00000010)
-#define MPI3_IOCFACTS_FLAGS_INITIAL_PORT_ENABLE_COMPLETE      (0x00000020)
-#define MPI3_IOCFACTS_FLAGS_PERSONALITY_MASK                  (0x0000000F)
-#define MPI3_IOCFACTS_FLAGS_PERSONALITY_EHBA                  (0x00000000)
-#define MPI3_IOCFACTS_FLAGS_PERSONALITY_RAID_DDR              (0x00000002)
+#define MPI3_IOCFACTS_FLAGS_SIGNED_NVDATA_REQUIRED             (0x00010000)
+#define MPI3_IOCFACTS_FLAGS_DMA_ADDRESS_WIDTH_MASK             (0x0000FF00)
+#define MPI3_IOCFACTS_FLAGS_DMA_ADDRESS_WIDTH_SHIFT            (8)
+#define MPI3_IOCFACTS_FLAGS_MAX_REQ_PER_REPLY_QUEUE_LIMIT      (0x00000040)
+#define MPI3_IOCFACTS_FLAGS_INITIAL_PORT_ENABLE_MASK           (0x00000030)
+#define MPI3_IOCFACTS_FLAGS_INITIAL_PORT_ENABLE_NOT_STARTED    (0x00000000)
+#define MPI3_IOCFACTS_FLAGS_INITIAL_PORT_ENABLE_IN_PROGRESS    (0x00000010)
+#define MPI3_IOCFACTS_FLAGS_INITIAL_PORT_ENABLE_COMPLETE       (0x00000020)
+#define MPI3_IOCFACTS_FLAGS_PERSONALITY_MASK                   (0x0000000F)
+#define MPI3_IOCFACTS_FLAGS_PERSONALITY_EHBA                   (0x00000000)
+#define MPI3_IOCFACTS_FLAGS_PERSONALITY_RAID_DDR               (0x00000002)
 
 /**** Defines for the IOThrottleDataLength field ****/
-#define MPI3_IOCFACTS_IO_THROTTLE_DATA_LENGTH_NOT_REQUIRED    (0x0000)
+#define MPI3_IOCFACTS_IO_THROTTLE_DATA_LENGTH_NOT_REQUIRED     (0x0000)
 
-/**** Defines for the IOThrottleDataLength field ****/
-#define MPI3_IOCFACTS_MAX_IO_THROTTLE_GROUP_NOT_REQUIRED      (0x0000)
+/**** Defines for the MaxIOThrottleGroup field ****/
+#define MPI3_IOCFACTS_MAX_IO_THROTTLE_GROUP_NOT_REQUIRED       (0x0000)
+
+/**** Defines for the DiagFdlSize field ****/
+#define MPI3_IOCFACTS_DIAGFDLSIZE_NOT_SUPPORTED                (0x00000000)
+
+/**** Defines for the DiagTtySize field ****/
+#define MPI3_IOCFACTS_DIAGTTYSIZE_NOT_SUPPORTED                (0x00000000)
 
 /*****************************************************************************
  *              Management Passthrough Request Message                      *
@@ -440,9 +450,9 @@ typedef struct _MPI3_EVENT_NOTIFICATION_REQUEST
 } MPI3_EVENT_NOTIFICATION_REQUEST, MPI3_POINTER PTR_MPI3_EVENT_NOTIFICATION_REQUEST,
   Mpi3EventNotificationRequest_t, MPI3_POINTER pMpi3EventNotificationRequest_t;
 
-/**** Defines for the SASBroadcastPrimitiveMasks field - use MPI3_EVENT_PRIMITIVE_ values ****/
+/**** Defines for the SASBroadcastPrimitiveMasks field - use MPI3_EVENT_BROADCAST_PRIMITIVE_ values ****/
 
-/**** Defines for the SASNotifyPrimitiveMasks field - use MPI3_EVENT_NOTIFY_ values ****/
+/**** Defines for the SASNotifyPrimitiveMasks field - use MPI3_EVENT_NOTIFY_PRIMITIVE_ values ****/
 
 /**** Defines for the EventMasks field - use MPI3_EVENT_ values ****/
 
@@ -716,7 +726,7 @@ typedef struct _MPI3_EVENT_SAS_TOPO_PHY_ENTRY
 {
     U16             AttachedDevHandle;      /* 0x00 */
     U8              LinkRate;               /* 0x02 */
-    U8              Status;                 /* 0x03 */
+    U8              PhyStatus;              /* 0x03 */
 } MPI3_EVENT_SAS_TOPO_PHY_ENTRY, MPI3_POINTER PTR_MPI3_EVENT_SAS_TOPO_PHY_ENTRY,
   Mpi3EventSasTopoPhyEntry_t, MPI3_POINTER pMpi3EventSasTopoPhyEntry_t;
 
diff --git a/sys/dev/mpi3mr/mpi/mpi30_pci.h b/sys/dev/mpi3mr/mpi/mpi30_pci.h
index f15dab2a5a9c..008ec7059b76 100644
--- a/sys/dev/mpi3mr/mpi/mpi30_pci.h
+++ b/sys/dev/mpi3mr/mpi/mpi30_pci.h
@@ -1,7 +1,7 @@
 /*
- * SPDX-License-Identifier: BSD-2-Clause
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
  *
- * Copyright (c) 2016-2023, Broadcom Inc. All rights reserved.
+ * Copyright (c) 2016-2024, Broadcom Inc. All rights reserved.
  * Support: <fbsd-storage-driver.pdl@broadcom.com>
  *
  * Redistribution and use in source and binary forms, with or without
@@ -38,7 +38,6 @@
  * Broadcom Inc. (Broadcom) MPI3MR Adapter FreeBSD
  *
  */
-
 #ifndef MPI30_PCI_H
 #define MPI30_PCI_H     1
 
diff --git a/sys/dev/mpi3mr/mpi/mpi30_raid.h b/sys/dev/mpi3mr/mpi/mpi30_raid.h
index fe2c4baffd3c..85941544e8fe 100644
--- a/sys/dev/mpi3mr/mpi/mpi30_raid.h
+++ b/sys/dev/mpi3mr/mpi/mpi30_raid.h
@@ -1,7 +1,7 @@
 /*
- * SPDX-License-Identifier: BSD-2-Clause
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
  *
- * Copyright (c) 2016-2023, Broadcom Inc. All rights reserved.
+ * Copyright (c) 2016-2024, Broadcom Inc. All rights reserved.
  * Support: <fbsd-storage-driver.pdl@broadcom.com>
  *
  * Redistribution and use in source and binary forms, with or without
@@ -38,7 +38,6 @@
  * Broadcom Inc. (Broadcom) MPI3MR Adapter FreeBSD
  *
  */
-
 #ifndef MPI30_RAID_H
 #define MPI30_RAID_H     1
 
diff --git a/sys/dev/mpi3mr/mpi/mpi30_sas.h b/sys/dev/mpi3mr/mpi/mpi30_sas.h
index c28de07c9fdd..fc55fba4747f 100644
--- a/sys/dev/mpi3mr/mpi/mpi30_sas.h
+++ b/sys/dev/mpi3mr/mpi/mpi30_sas.h
@@ -1,7 +1,7 @@
 /*
- * SPDX-License-Identifier: BSD-2-Clause
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
  *
- * Copyright (c) 2016-2023, Broadcom Inc. All rights reserved.
+ * Copyright (c) 2016-2024, Broadcom Inc. All rights reserved.
  * Support: <fbsd-storage-driver.pdl@broadcom.com>
  *
  * Redistribution and use in source and binary forms, with or without
@@ -38,7 +38,6 @@
  * Broadcom Inc. (Broadcom) MPI3MR Adapter FreeBSD
  *
  */
-
 #ifndef MPI30_SAS_H
 #define MPI30_SAS_H     1
 
diff --git a/sys/dev/mpi3mr/mpi/mpi30_targ.h b/sys/dev/mpi3mr/mpi/mpi30_targ.h
index d9aee48a6437..646b5287d502 100644
--- a/sys/dev/mpi3mr/mpi/mpi30_targ.h
+++ b/sys/dev/mpi3mr/mpi/mpi30_targ.h
@@ -1,7 +1,7 @@
 /*
- * SPDX-License-Identifier: BSD-2-Clause
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
  *
- * Copyright (c) 2016-2023, Broadcom Inc. All rights reserved.
+ * Copyright (c) 2016-2024, Broadcom Inc. All rights reserved.
  * Support: <fbsd-storage-driver.pdl@broadcom.com>
  *
  * Redistribution and use in source and binary forms, with or without
@@ -38,7 +38,6 @@
  * Broadcom Inc. (Broadcom) MPI3MR Adapter FreeBSD
  *
  */
-
 #ifndef MPI30_TARG_H
 #define MPI30_TARG_H     1
 
@@ -191,7 +190,7 @@ typedef struct _MPI3_TARGET_ASSIST_REQUEST
     U16                     QueueTag;                   /* 0x12 */
     U16                     IoIndex;                    /* 0x14 */
     U16                     InitiatorConnectionTag;     /* 0x16 */
-    U32                     SkipCount;                  /* 0x18 */
+    U32                     IOCUseOnly18;               /* 0x18 */
     U32                     DataLength;                 /* 0x1C */
     U32                     PortTransferLength;         /* 0x20 */
     U32                     PrimaryReferenceTag;        /* 0x24 */
@@ -206,6 +205,8 @@ typedef struct _MPI3_TARGET_ASSIST_REQUEST
 #define MPI3_TARGET_ASSIST_MSGFLAGS_METASGL_VALID           (0x80)
 
 /**** Defines for the Flags field ****/
+#define MPI3_TARGET_ASSIST_FLAGS_IOC_USE_ONLY_23_MASK       (0x00800000)
+#define MPI3_TARGET_ASSIST_FLAGS_IOC_USE_ONLY_22_MASK       (0x00400000)
 #define MPI3_TARGET_ASSIST_FLAGS_REPOST_CMD_BUFFER          (0x00200000)
 #define MPI3_TARGET_ASSIST_FLAGS_AUTO_STATUS                (0x00100000)
 #define MPI3_TARGET_ASSIST_FLAGS_DATADIRECTION_MASK         (0x000C0000)
@@ -243,6 +244,7 @@ typedef struct _MPI3_TARGET_STATUS_SEND_REQUEST
   Mpi3TargetStatusSendRequest_t, MPI3_POINTER pMpi3TargetStatusSendRequest_t;
 
 /**** Defines for the Flags field ****/
+#define MPI3_TSS_FLAGS_IOC_USE_ONLY_6_MASK              (0x0040)
 #define MPI3_TSS_FLAGS_REPOST_CMD_BUFFER                (0x0020)
 #define MPI3_TSS_FLAGS_AUTO_SEND_GOOD_STATUS            (0x0010)
 
diff --git a/sys/dev/mpi3mr/mpi/mpi30_tool.h b/sys/dev/mpi3mr/mpi/mpi30_tool.h
index 55fb53601863..e11ddf068555 100644
--- a/sys/dev/mpi3mr/mpi/mpi30_tool.h
+++ b/sys/dev/mpi3mr/mpi/mpi30_tool.h
@@ -1,7 +1,7 @@
 /*
- * SPDX-License-Identifier: BSD-2-Clause
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
  *
- * Copyright (c) 2016-2023, Broadcom Inc. All rights reserved.
+ * Copyright (c) 2016-2024, Broadcom Inc. All rights reserved.
  * Support: <fbsd-storage-driver.pdl@broadcom.com>
  *
  * Redistribution and use in source and binary forms, with or without
@@ -38,7 +38,6 @@
  * Broadcom Inc. (Broadcom) MPI3MR Adapter FreeBSD
  *
  */
-
 #ifndef MPI30_TOOL_H
 #define MPI30_TOOL_H     1
 
@@ -366,6 +365,7 @@ typedef struct _MPI3_DIAG_BUFFER_POST_REQUEST
 #define MPI3_DIAG_BUFFER_TYPE_FW                            (0x02)
 #define MPI3_DIAG_BUFFER_TYPE_DRIVER                        (0x10)
 #define MPI3_DIAG_BUFFER_TYPE_FDL                           (0x20)
+#define MPI3_DIAG_BUFFER_TYPE_TTY                           (0x30)
 #define MPI3_DIAG_BUFFER_MIN_PRODUCT_SPECIFIC               (0xF0)
 #define MPI3_DIAG_BUFFER_MAX_PRODUCT_SPECIFIC               (0xFF)
 
@@ -388,7 +388,7 @@ typedef struct _MPI3_DRIVER_BUFFER_HEADER
 } MPI3_DRIVER_BUFFER_HEADER, MPI3_POINTER PTR_MPI3_DRIVER_BUFFER_HEADER,
   Mpi3DriverBufferHeader_t, MPI3_POINTER pMpi3DriverBufferHeader_t;
 
-/**** Defines for the Type field ****/
+/**** Defines for the Signature field ****/
 #define MPI3_DRIVER_DIAG_BUFFER_HEADER_SIGNATURE_CIRCULAR                (0x43495243)
 
 /**** Defines for the Flags field ****/
diff --git a/sys/dev/mpi3mr/mpi/mpi30_transport.h b/sys/dev/mpi3mr/mpi/mpi30_transport.h
index 436496411309..860c27a2dd42 100644
--- a/sys/dev/mpi3mr/mpi/mpi30_transport.h
+++ b/sys/dev/mpi3mr/mpi/mpi30_transport.h
@@ -1,7 +1,7 @@
 /*
- * SPDX-License-Identifier: BSD-2-Clause
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
  *
- * Copyright (c) 2016-2023, Broadcom Inc. All rights reserved.
+ * Copyright (c) 2016-2024, Broadcom Inc. All rights reserved.
  * Support: <fbsd-storage-driver.pdl@broadcom.com>
  *
  * Redistribution and use in source and binary forms, with or without
@@ -37,10 +37,8 @@
  *
  * Broadcom Inc. (Broadcom) MPI3MR Adapter FreeBSD
  *
- */
-
-/*
- * Version History
+ *
+ *  Version History
  *  ---------------
  *
  *  Date      Version       Description
@@ -72,7 +70,11 @@
  *  09-02-22  03.00.27.00  Corresponds to Fusion-MPT MPI 3.0 Specification Rev 27.
  *  10-20-22  03.00.27.01  Corresponds to Fusion-MPT MPI 3.0 Specification Rev 27 - Interim Release 1.
  *  12-02-22  03.00.28.00  Corresponds to Fusion-MPT MPI 3.0 Specification Rev 28.
- *  02-24-22  03.00.29.00  Corresponds to Fusion-MPT MPI 3.0 Specification Rev 29.
+ *  02-24-23  03.00.29.00  Corresponds to Fusion-MPT MPI 3.0 Specification Rev 29.
+ *  05-19-23  03.00.30.00  Corresponds to Fusion-MPT MPI 3.0 Specification Rev 30.
+ *  08-18-23  03.00.30.01  Corresponds to Fusion-MPT MPI 3.0 Specification Rev 30 - Interim Release 1.
+ *  11-17-23  03.00.31.00  Corresponds to Fusion-MPT MPI 3.0 Specification Rev 31
+ *  02-16-24  03.00.32.00  Corresponds to Fusion-MPT MPI 3.0 Specification Rev 32
  */
 #ifndef MPI30_TRANSPORT_H
 #define MPI30_TRANSPORT_H     1
@@ -101,7 +103,7 @@ typedef union _MPI3_VERSION_UNION
 /****** Version constants for this revision ****/
 #define MPI3_VERSION_MAJOR                                              (3)
 #define MPI3_VERSION_MINOR                                              (0)
-#define MPI3_VERSION_UNIT                                               (29)
+#define MPI3_VERSION_UNIT                                               (32)
 #define MPI3_VERSION_DEV                                                (0)
 
 /****** DevHandle definitions *****/
@@ -425,15 +427,9 @@ typedef struct _MPI3_STATUS_REPLY_DESCRIPTOR
 } MPI3_STATUS_REPLY_DESCRIPTOR, MPI3_POINTER PTR_MPI3_STATUS_REPLY_DESCRIPTOR,
   Mpi3StatusReplyDescriptor_t, MPI3_POINTER pMpi3StatusReplyDescriptor_t;
 
-/**** Defines for the IOCStatus field ****/
-#define MPI3_REPLY_DESCRIPT_STATUS_IOCSTATUS_LOGINFOAVAIL               (0x8000)
-#define MPI3_REPLY_DESCRIPT_STATUS_IOCSTATUS_STATUS_MASK                (0x7FFF)
+/**** Use MPI3_IOCSTATUS_ defines for the IOCStatus field ****/
 
-/**** Defines for the IOCLogInfo field ****/
-#define MPI3_REPLY_DESCRIPT_STATUS_IOCLOGINFO_TYPE_MASK                 (0xF0000000)
-#define MPI3_REPLY_DESCRIPT_STATUS_IOCLOGINFO_TYPE_NO_INFO              (0x00000000)
-#define MPI3_REPLY_DESCRIPT_STATUS_IOCLOGINFO_TYPE_SAS                  (0x30000000)
-#define MPI3_REPLY_DESCRIPT_STATUS_IOCLOGINFO_DATA_MASK                 (0x0FFFFFFF)
+/**** Use MPI3_IOCLOGINFO_ defines for the IOCLogInfo field ****/
 
 /*****************************************************************************
  *              Union of Reply Descriptors                                   *
@@ -652,7 +648,6 @@ typedef struct _MPI3_DEFAULT_REPLY
 #define MPI3_FUNCTION_MAX_PRODUCT_SPECIFIC          (0xFF)  /* End of the product-specific range of function codes */
 
 /**** Defines for IOCStatus ****/
-#define MPI3_IOCSTATUS_LOG_INFO_AVAIL_MASK          (0x8000)
 #define MPI3_IOCSTATUS_LOG_INFO_AVAILABLE           (0x8000)
 #define MPI3_IOCSTATUS_STATUS_MASK                  (0x7FFF)
 
diff --git a/sys/dev/mpi3mr/mpi/mpi30_type.h b/sys/dev/mpi3mr/mpi/mpi30_type.h
index 267ede701762..815becadcf25 100644
--- a/sys/dev/mpi3mr/mpi/mpi30_type.h
+++ b/sys/dev/mpi3mr/mpi/mpi30_type.h
@@ -1,7 +1,7 @@
 /*
- * SPDX-License-Identifier: BSD-2-Clause
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
  *
- * Copyright (c) 2016-2023, Broadcom Inc. All rights reserved.
+ * Copyright (c) 2016-2024, Broadcom Inc. All rights reserved.
  * Support: <fbsd-storage-driver.pdl@broadcom.com>
  *
  * Redistribution and use in source and binary forms, with or without
@@ -38,7 +38,6 @@
  * Broadcom Inc. (Broadcom) MPI3MR Adapter FreeBSD
  *
  */
-
 #ifndef MPI30_TYPE_H
 #define MPI30_TYPE_H     1
 
diff --git a/sys/dev/mpi3mr/mpi3mr.c b/sys/dev/mpi3mr/mpi3mr.c
index c592d5734d38..99a331c9baf0 100644
--- a/sys/dev/mpi3mr/mpi3mr.c
+++ b/sys/dev/mpi3mr/mpi3mr.c
@@ -2268,7 +2268,7 @@ mpi3mr_display_ioc_info(struct mpi3mr_softc *sc)
         printf("Capabilities=(");
 
         if (sc->facts.ioc_capabilities &
*** 97 LINES SKIPPED ***