Update to HI 1.0.6

Change-Id: I0f127f7460be2a5d2eda5be2868c91f58cac03c0
diff --git a/include/pmu_ethosu.h b/include/pmu_ethosu.h
index 41614e7..7eb5c09 100644
--- a/include/pmu_ethosu.h
+++ b/include/pmu_ethosu.h
@@ -105,6 +105,9 @@
     ETHOSU_PMU_AXI_LATENCY_256,
     ETHOSU_PMU_AXI_LATENCY_512,
     ETHOSU_PMU_AXI_LATENCY_1024,
+    ETHOSU_PMU_ECC_DMA,
+    ETHOSU_PMU_ECC_SB0,
+    ETHOSU_PMU_ECC_SB1,
 
     ETHOSU_PMU_SENTINEL // End-marker (not event)
 };
diff --git a/src/ethosu55_interface.h b/src/ethosu55_interface.h
index f5c5692..b6834a8 100644
--- a/src/ethosu55_interface.h
+++ b/src/ethosu55_interface.h
@@ -40,7 +40,7 @@
 
 #define NNX_ARCH_VERSION_MAJOR 1
 #define NNX_ARCH_VERSION_MINOR 0
-#define NNX_ARCH_VERSION_PATCH 1
+#define NNX_ARCH_VERSION_PATCH 6
 
 // Register offsets
 
@@ -99,7 +99,8 @@
 #define NPU_REG_DEBUG_ADDRESS 0x0144
 #define NPU_REG_DEBUG_MISC 0x0148
 #define NPU_REG_DEBUGCORE 0x014C
-#define DEBUG_REGISTERS_SIZE 0x0150
+#define NPU_REG_DEBUG_BLOCK 0x0150
+#define DEBUG_REGISTERS_SIZE 0x0154
 
 //
 // Register subpage ID
@@ -565,6 +566,8 @@
 #define NPU_REG_CURRENT_QREAD 0x027C
 #define NPU_REG_DMA_SCALE_SRC 0x0280
 #define NPU_REG_DMA_SCALE_SRC_HI 0x0284
+#define NPU_REG_CURRENT_BLOCK 0x02B4
+#define NPU_REG_CURRENT_OP 0x02B8
 #define NPU_REG_CURRENT_CMD 0x02BC
 #define TSU_DEBUG_REGISTERS_SIZE 0x02C0
 
@@ -588,6 +591,26 @@
     LUT_END   = 23,
 };
 
+enum class axi_mem_encoding_type : uint8_t
+{
+    DEVICE_NON_BUFFERABLE                 = 0x0,
+    DEVICE_BUFFERABLE                     = 0x1,
+    NORMAL_NON_CACHEABLE_NON_BUFFERABLE   = 0x2,
+    NORMAL_NON_CACHEABLE_BUFFERABLE       = 0x3,
+    WRITE_THROUGH_NO_ALLOCATE             = 0x4,
+    WRITE_THROUGH_READ_ALLOCATE           = 0x5,
+    WRITE_THROUGH_WRITE_ALLOCATE          = 0x6,
+    WRITE_THROUGH_READ_AND_WRITE_ALLOCATE = 0x7,
+    WRITE_BACK_NO_ALLOCATE                = 0x8,
+    WRITE_BACK_READ_ALLOCATE              = 0x9,
+    WRITE_BACK_WRITE_ALLOCATE             = 0xA,
+    WRITE_BACK_READ_AND_WRITE_ALLOCATE    = 0xB,
+    RESERVED_12                           = 0xC,
+    RESERVED_13                           = 0xD,
+    RESERVED_14                           = 0xE,
+    RESERVED_15                           = 0xF,
+};
+
 enum class clip_range : uint8_t
 {
     OFM_PRECISION = 0,
@@ -835,6 +858,9 @@
     AXI_LATENCY_256              = 0xa4,
     AXI_LATENCY_512              = 0xa5,
     AXI_LATENCY_1024             = 0xa6,
+    ECC_DMA                      = 0xb0,
+    ECC_SB0                      = 0xb1,
+    ECC_SB1                      = 0x1b1,
 };
 
 enum class pooling_mode : uint16_t
@@ -872,6 +898,7 @@
 
 enum class shram_size : uint8_t
 {
+    SHRAM_96KB = 0x60,
     SHRAM_48KB = 0x30,
     SHRAM_24KB = 0x18,
     SHRAM_16KB = 0x10,
@@ -908,6 +935,26 @@
     ACTIVATION_LUT_END   = 23,
 };
 
+enum axi_mem_encoding_type
+{
+    AXI_MEM_ENCODING_TYPE_DEVICE_NON_BUFFERABLE                 = 0x0,
+    AXI_MEM_ENCODING_TYPE_DEVICE_BUFFERABLE                     = 0x1,
+    AXI_MEM_ENCODING_TYPE_NORMAL_NON_CACHEABLE_NON_BUFFERABLE   = 0x2,
+    AXI_MEM_ENCODING_TYPE_NORMAL_NON_CACHEABLE_BUFFERABLE       = 0x3,
+    AXI_MEM_ENCODING_TYPE_WRITE_THROUGH_NO_ALLOCATE             = 0x4,
+    AXI_MEM_ENCODING_TYPE_WRITE_THROUGH_READ_ALLOCATE           = 0x5,
+    AXI_MEM_ENCODING_TYPE_WRITE_THROUGH_WRITE_ALLOCATE          = 0x6,
+    AXI_MEM_ENCODING_TYPE_WRITE_THROUGH_READ_AND_WRITE_ALLOCATE = 0x7,
+    AXI_MEM_ENCODING_TYPE_WRITE_BACK_NO_ALLOCATE                = 0x8,
+    AXI_MEM_ENCODING_TYPE_WRITE_BACK_READ_ALLOCATE              = 0x9,
+    AXI_MEM_ENCODING_TYPE_WRITE_BACK_WRITE_ALLOCATE             = 0xA,
+    AXI_MEM_ENCODING_TYPE_WRITE_BACK_READ_AND_WRITE_ALLOCATE    = 0xB,
+    AXI_MEM_ENCODING_TYPE_RESERVED_12                           = 0xC,
+    AXI_MEM_ENCODING_TYPE_RESERVED_13                           = 0xD,
+    AXI_MEM_ENCODING_TYPE_RESERVED_14                           = 0xE,
+    AXI_MEM_ENCODING_TYPE_RESERVED_15                           = 0xF,
+};
+
 enum clip_range
 {
     CLIP_RANGE_OFM_PRECISION = 0,
@@ -1155,6 +1202,9 @@
     PMU_EVENT_TYPE_AXI_LATENCY_256              = 0xa4,
     PMU_EVENT_TYPE_AXI_LATENCY_512              = 0xa5,
     PMU_EVENT_TYPE_AXI_LATENCY_1024             = 0xa6,
+    PMU_EVENT_TYPE_ECC_DMA                      = 0xb0,
+    PMU_EVENT_TYPE_ECC_SB0                      = 0xb1,
+    PMU_EVENT_TYPE_ECC_SB1                      = 0x1b1,
 };
 
 enum pooling_mode
@@ -1192,6 +1242,7 @@
 
 enum shram_size
 {
+    SHRAM_SIZE_SHRAM_96KB = 0x60,
     SHRAM_SIZE_SHRAM_48KB = 0x30,
     SHRAM_SIZE_SHRAM_24KB = 0x18,
     SHRAM_SIZE_SHRAM_16KB = 0x10,
@@ -1238,8 +1289,8 @@
   public:
     CONSTEXPR id_r() :
         version_status(static_cast<uint32_t>(1)), version_minor(static_cast<uint32_t>(0x0)),
-        version_major(static_cast<uint32_t>(0x0)), product_major(static_cast<uint32_t>(4)),
-        arch_patch_rev(static_cast<uint32_t>(1)), arch_minor_rev(static_cast<uint32_t>(0)),
+        version_major(static_cast<uint32_t>(0x1)), product_major(static_cast<uint32_t>(4)),
+        arch_patch_rev(static_cast<uint32_t>(6)), arch_minor_rev(static_cast<uint32_t>(0)),
         arch_major_rev(static_cast<uint32_t>(1))
     {
     }
@@ -1398,7 +1449,9 @@
             uint32_t pmu_irq_raised : 1;  // 0=No PMU IRQ, 1=PMU IRQ raised. Cleared by using command register bit 1
             uint32_t wd_fault : 1; // Weight decoder state: 0=no fault 1=weight decoder decompression fault. Can only be
                                    // cleared by reset
-            uint32_t reserved0 : 3;
+            uint32_t ecc_fault : 1; // ECC state for internal RAMs: 0=no fault 1=ECC fault signalled. Can only be
+                                    // cleared by reset
+            uint32_t reserved0 : 2;
             uint32_t faulting_interface : 1; // Faulting interface on bus abort. 0=AXI-M0 1=AXI-M1
             uint32_t faulting_channel : 4;  // Faulting channel on a bus abort. Read: 0=Cmd 1=IFM 2=Weights 3=Scale+Bias
                                             // 4=Mem2Mem; Write: 8=OFM 9=Mem2Mem
@@ -1413,8 +1466,9 @@
         bus_status(static_cast<uint32_t>(0x0)), reset_status(static_cast<uint32_t>(0x1)),
         cmd_parse_error(static_cast<uint32_t>(0x0)), cmd_end_reached(static_cast<uint32_t>(0x0)),
         pmu_irq_raised(static_cast<uint32_t>(0x0)), wd_fault(static_cast<uint32_t>(0x0)),
-        reserved0(static_cast<uint32_t>(0)), faulting_interface(static_cast<uint32_t>(0x0)),
-        faulting_channel(static_cast<uint32_t>(0x0)), irq_history_mask(static_cast<uint32_t>(0x0))
+        ecc_fault(static_cast<uint32_t>(0x0)), reserved0(static_cast<uint32_t>(0)),
+        faulting_interface(static_cast<uint32_t>(0x0)), faulting_channel(static_cast<uint32_t>(0x0)),
+        irq_history_mask(static_cast<uint32_t>(0x0))
     {
     }
     CONSTEXPR status_r(uint32_t init) : word(init) {}
@@ -1558,6 +1612,21 @@
         wd_fault = ((1u << 1) - 1) & static_cast<uint32_t>(value);
         return *this;
     }
+    CONSTEXPR uint32_t get_ecc_fault() const
+    {
+        uint32_t value = static_cast<uint32_t>(ecc_fault);
+        return value;
+    }
+    uint32_t get_ecc_fault() const volatile
+    {
+        uint32_t value = static_cast<uint32_t>(ecc_fault);
+        return value;
+    }
+    CONSTEXPR status_r &set_ecc_fault(uint32_t value)
+    {
+        ecc_fault = ((1u << 1) - 1) & static_cast<uint32_t>(value);
+        return *this;
+    }
     CONSTEXPR uint32_t get_faulting_interface() const
     {
         uint32_t value = static_cast<uint32_t>(faulting_interface);
@@ -2183,7 +2252,7 @@
         {
             uint32_t macs_per_cc : 4;        // The log2(macs/clock cycle). Valid encoding range is 5 to 8 for 32 to 256
                                              // MACs/clock cycle.
-            uint32_t cmd_stream_version : 4; // command stream version accepted by this NPU. Set to 0 for Ethos-U55 EAC.
+            uint32_t cmd_stream_version : 4; // command stream version accepted by this NPU.
             uint32_t shram_size : 8;         // Size in KB of SHRAM in the range 8 to 48.
             uint32_t reserved0 : 12;
             uint32_t product : 4; // Product configuration
@@ -2334,7 +2403,7 @@
 #endif //__cplusplus
 };
 
-// regioncfg_r - Base pointer configuration. Bits[2*k+1:2*k] give the memory type for REGION[k]
+// regioncfg_r - Region memory type configuration. Bits[2*k+1:2*k] give the memory type for REGION[k]
 struct regioncfg_r
 {
 #ifdef __cplusplus
@@ -2525,7 +2594,7 @@
         {
             uint32_t max_beats : 2; // Burst split alignment: 0=64 bytes, 1=128 bytes, 2=256 bytes, 3=reserved
             uint32_t reserved0 : 2;
-            uint32_t memtype : 4; // Memtype
+            uint32_t memtype : 4; // Memtype to be used to encode AxCACHE signals
             uint32_t reserved1 : 8;
             uint32_t
                 max_outstanding_read_m1 : 8; // Maximum number of outstanding AXI read transactions - 1 in range 0 to 31
@@ -2537,7 +2606,8 @@
 #ifdef __cplusplus
   public:
     CONSTEXPR axi_limit0_r() :
-        max_beats(static_cast<uint32_t>(0x0)), reserved0(static_cast<uint32_t>(0)), memtype(static_cast<uint32_t>(0)),
+        max_beats(static_cast<uint32_t>(0x0)), reserved0(static_cast<uint32_t>(0)),
+        memtype(static_cast<uint32_t>(::axi_mem_encoding_type::DEVICE_NON_BUFFERABLE)),
         reserved1(static_cast<uint32_t>(0)), max_outstanding_read_m1(static_cast<uint32_t>(0x00)),
         max_outstanding_write_m1(static_cast<uint32_t>(0x00))
     {
@@ -2578,17 +2648,17 @@
         max_beats = ((1u << 2) - 1) & static_cast<uint32_t>(value);
         return *this;
     }
-    CONSTEXPR uint32_t get_memtype() const
+    CONSTEXPR ::axi_mem_encoding_type get_memtype() const
     {
-        uint32_t value = static_cast<uint32_t>(memtype);
+        ::axi_mem_encoding_type value = static_cast<::axi_mem_encoding_type>(memtype);
         return value;
     }
-    uint32_t get_memtype() const volatile
+    ::axi_mem_encoding_type get_memtype() const volatile
     {
-        uint32_t value = static_cast<uint32_t>(memtype);
+        ::axi_mem_encoding_type value = static_cast<::axi_mem_encoding_type>(memtype);
         return value;
     }
-    CONSTEXPR axi_limit0_r &set_memtype(uint32_t value)
+    CONSTEXPR axi_limit0_r &set_memtype(::axi_mem_encoding_type value)
     {
         memtype = ((1u << 4) - 1) & static_cast<uint32_t>(value);
         return *this;
@@ -2638,7 +2708,7 @@
         {
             uint32_t max_beats : 2; // Burst split alignment: 0=64 bytes, 1=128 bytes, 2=256 bytes, 3=reserved
             uint32_t reserved0 : 2;
-            uint32_t memtype : 4; // Memtype
+            uint32_t memtype : 4; // Memtype to be used to encode AxCACHE signals
             uint32_t reserved1 : 8;
             uint32_t
                 max_outstanding_read_m1 : 8; // Maximum number of outstanding AXI read transactions - 1 in range 0 to 31
@@ -2650,7 +2720,8 @@
 #ifdef __cplusplus
   public:
     CONSTEXPR axi_limit1_r() :
-        max_beats(static_cast<uint32_t>(0x0)), reserved0(static_cast<uint32_t>(0)), memtype(static_cast<uint32_t>(0)),
+        max_beats(static_cast<uint32_t>(0x0)), reserved0(static_cast<uint32_t>(0)),
+        memtype(static_cast<uint32_t>(::axi_mem_encoding_type::DEVICE_NON_BUFFERABLE)),
         reserved1(static_cast<uint32_t>(0)), max_outstanding_read_m1(static_cast<uint32_t>(0x00)),
         max_outstanding_write_m1(static_cast<uint32_t>(0x00))
     {
@@ -2691,17 +2762,17 @@
         max_beats = ((1u << 2) - 1) & static_cast<uint32_t>(value);
         return *this;
     }
-    CONSTEXPR uint32_t get_memtype() const
+    CONSTEXPR ::axi_mem_encoding_type get_memtype() const
     {
-        uint32_t value = static_cast<uint32_t>(memtype);
+        ::axi_mem_encoding_type value = static_cast<::axi_mem_encoding_type>(memtype);
         return value;
     }
-    uint32_t get_memtype() const volatile
+    ::axi_mem_encoding_type get_memtype() const volatile
     {
-        uint32_t value = static_cast<uint32_t>(memtype);
+        ::axi_mem_encoding_type value = static_cast<::axi_mem_encoding_type>(memtype);
         return value;
     }
-    CONSTEXPR axi_limit1_r &set_memtype(uint32_t value)
+    CONSTEXPR axi_limit1_r &set_memtype(::axi_mem_encoding_type value)
     {
         memtype = ((1u << 4) - 1) & static_cast<uint32_t>(value);
         return *this;
@@ -2751,7 +2822,7 @@
         {
             uint32_t max_beats : 2; // Burst split alignment: 0=64 bytes, 1=128 bytes, 2=256 bytes, 3=reserved
             uint32_t reserved0 : 2;
-            uint32_t memtype : 4; // Memtype
+            uint32_t memtype : 4; // Memtype to be used to encode AxCACHE signals
             uint32_t reserved1 : 8;
             uint32_t
                 max_outstanding_read_m1 : 8; // Maximum number of outstanding AXI read transactions - 1 in range 0 to 31
@@ -2763,7 +2834,8 @@
 #ifdef __cplusplus
   public:
     CONSTEXPR axi_limit2_r() :
-        max_beats(static_cast<uint32_t>(0x0)), reserved0(static_cast<uint32_t>(0)), memtype(static_cast<uint32_t>(0)),
+        max_beats(static_cast<uint32_t>(0x0)), reserved0(static_cast<uint32_t>(0)),
+        memtype(static_cast<uint32_t>(::axi_mem_encoding_type::DEVICE_NON_BUFFERABLE)),
         reserved1(static_cast<uint32_t>(0)), max_outstanding_read_m1(static_cast<uint32_t>(0x00)),
         max_outstanding_write_m1(static_cast<uint32_t>(0x00))
     {
@@ -2804,17 +2876,17 @@
         max_beats = ((1u << 2) - 1) & static_cast<uint32_t>(value);
         return *this;
     }
-    CONSTEXPR uint32_t get_memtype() const
+    CONSTEXPR ::axi_mem_encoding_type get_memtype() const
     {
-        uint32_t value = static_cast<uint32_t>(memtype);
+        ::axi_mem_encoding_type value = static_cast<::axi_mem_encoding_type>(memtype);
         return value;
     }
-    uint32_t get_memtype() const volatile
+    ::axi_mem_encoding_type get_memtype() const volatile
     {
-        uint32_t value = static_cast<uint32_t>(memtype);
+        ::axi_mem_encoding_type value = static_cast<::axi_mem_encoding_type>(memtype);
         return value;
     }
-    CONSTEXPR axi_limit2_r &set_memtype(uint32_t value)
+    CONSTEXPR axi_limit2_r &set_memtype(::axi_mem_encoding_type value)
     {
         memtype = ((1u << 4) - 1) & static_cast<uint32_t>(value);
         return *this;
@@ -2864,7 +2936,7 @@
         {
             uint32_t max_beats : 2; // Burst split alignment: 0=64 bytes, 1=128 bytes, 2=256 bytes, 3=reserved
             uint32_t reserved0 : 2;
-            uint32_t memtype : 4; // Memtype
+            uint32_t memtype : 4; // Memtype to be used to encode AxCACHE signals
             uint32_t reserved1 : 8;
             uint32_t
                 max_outstanding_read_m1 : 8; // Maximum number of outstanding AXI read transactions - 1 in range 0 to 31
@@ -2876,7 +2948,8 @@
 #ifdef __cplusplus
   public:
     CONSTEXPR axi_limit3_r() :
-        max_beats(static_cast<uint32_t>(0x0)), reserved0(static_cast<uint32_t>(0)), memtype(static_cast<uint32_t>(0)),
+        max_beats(static_cast<uint32_t>(0x0)), reserved0(static_cast<uint32_t>(0)),
+        memtype(static_cast<uint32_t>(::axi_mem_encoding_type::DEVICE_NON_BUFFERABLE)),
         reserved1(static_cast<uint32_t>(0)), max_outstanding_read_m1(static_cast<uint32_t>(0x00)),
         max_outstanding_write_m1(static_cast<uint32_t>(0x00))
     {
@@ -2917,17 +2990,17 @@
         max_beats = ((1u << 2) - 1) & static_cast<uint32_t>(value);
         return *this;
     }
-    CONSTEXPR uint32_t get_memtype() const
+    CONSTEXPR ::axi_mem_encoding_type get_memtype() const
     {
-        uint32_t value = static_cast<uint32_t>(memtype);
+        ::axi_mem_encoding_type value = static_cast<::axi_mem_encoding_type>(memtype);
         return value;
     }
-    uint32_t get_memtype() const volatile
+    ::axi_mem_encoding_type get_memtype() const volatile
     {
-        uint32_t value = static_cast<uint32_t>(memtype);
+        ::axi_mem_encoding_type value = static_cast<::axi_mem_encoding_type>(memtype);
         return value;
     }
-    CONSTEXPR axi_limit3_r &set_memtype(uint32_t value)
+    CONSTEXPR axi_limit3_r &set_memtype(::axi_mem_encoding_type value)
     {
         memtype = ((1u << 4) - 1) & static_cast<uint32_t>(value);
         return *this;
@@ -7792,7 +7865,8 @@
     uint32_t DEBUG_ADDRESS;     // 0x144
     uint32_t DEBUG_MISC;        // 0x148
     uint32_t DEBUGCORE;         // 0x14c
-    uint32_t unused5[12];
+    uint32_t DEBUG_BLOCK;       // 0x150
+    uint32_t unused5[11];
     STRUCT pmcr_r PMCR;             // 0x180
     STRUCT pmcntenset_r PMCNTENSET; // 0x184
     STRUCT pmcntenclr_r PMCNTENCLR; // 0x188
@@ -7840,8 +7914,10 @@
     uint32_t CURRENT_QREAD;      // 0x27c
     uint32_t DMA_SCALE_SRC;      // 0x280
     uint32_t DMA_SCALE_SRC_HI;   // 0x284
-    uint32_t unused8[13];
-    uint32_t CURRENT_CMD; // 0x2bc
+    uint32_t unused8[11];
+    uint32_t CURRENT_BLOCK; // 0x2b4
+    uint32_t CURRENT_OP;    // 0x2b8
+    uint32_t CURRENT_CMD;   // 0x2bc
     uint32_t unused9[16];
     uint32_t PMEVCNTR[4]; // 0x300
     uint32_t unused10[28];
@@ -8010,7 +8086,7 @@
     }
     void reset()
     {
-        ID                 = 268517377;
+        ID                 = 268845313;
         STATUS             = 8;
         CMD                = 12;
         RESET              = 0;
@@ -8065,6 +8141,7 @@
         DEBUG_ADDRESS      = 0;
         DEBUG_MISC         = 0;
         DEBUGCORE          = 0;
+        DEBUG_BLOCK        = 0;
         KERNEL_X           = 0;
         KERNEL_Y           = 0;
         KERNEL_W_M1        = 0;
@@ -8099,6 +8176,8 @@
         CURRENT_QREAD      = 0;
         DMA_SCALE_SRC      = 0;
         DMA_SCALE_SRC_HI   = 0;
+        CURRENT_BLOCK      = 0;
+        CURRENT_OP         = 0;
         CURRENT_CMD        = 0;
         IFM_PAD_TOP        = 0;
         IFM_PAD_LEFT       = 0;
@@ -8360,6 +8439,8 @@
             return access_type_t::RW;
         case 332:
             return access_type_t::RW;
+        case 336:
+            return access_type_t::RW;
         case 512:
             return access_type_t::RO;
         case 516:
@@ -8428,6 +8509,10 @@
             return access_type_t::RO;
         case 644:
             return access_type_t::RO;
+        case 692:
+            return access_type_t::RO;
+        case 696:
+            return access_type_t::RO;
         case 700:
             return access_type_t::RO;
         case 2048:
@@ -10773,7 +10858,7 @@
 #endif //__cplusplus
 };
 
-// 0=1-core, 1=2-core depth
+// 0=1-core, 1=2-core depth (this command is Ethos-U65 only and UNPREDICTABLE for Ethos-U55)
 struct npu_set_parallel_mode_t
 {
     uint32_t cmd_code : 10;     // NPU_SET_PARALLEL_MODE
@@ -13815,6 +13900,24 @@
     SEP FUNC(activation, TANH) SEP FUNC(activation, SIGMOID) SEP FUNC(activation, LUT_START)                           \
         SEP FUNC(activation, LUT_END)
 
+#define EXPAND_AXI_MEM_ENCODING_TYPE(FUNC, SEP)                                                                        \
+    FUNC(axi_mem_encoding_type, DEVICE_NON_BUFFERABLE)                                                                 \
+    SEP FUNC(axi_mem_encoding_type, DEVICE_BUFFERABLE)                                                                 \
+        SEP FUNC(axi_mem_encoding_type, NORMAL_NON_CACHEABLE_NON_BUFFERABLE)                                           \
+            SEP FUNC(axi_mem_encoding_type, NORMAL_NON_CACHEABLE_BUFFERABLE)                                           \
+                SEP FUNC(axi_mem_encoding_type, WRITE_THROUGH_NO_ALLOCATE)                                             \
+                    SEP FUNC(axi_mem_encoding_type, WRITE_THROUGH_READ_ALLOCATE)                                       \
+                        SEP FUNC(axi_mem_encoding_type, WRITE_THROUGH_WRITE_ALLOCATE)                                  \
+                            SEP FUNC(axi_mem_encoding_type, WRITE_THROUGH_READ_AND_WRITE_ALLOCATE)                     \
+                                SEP FUNC(axi_mem_encoding_type, WRITE_BACK_NO_ALLOCATE)                                \
+                                    SEP FUNC(axi_mem_encoding_type, WRITE_BACK_READ_ALLOCATE)                          \
+                                        SEP FUNC(axi_mem_encoding_type, WRITE_BACK_WRITE_ALLOCATE)                     \
+                                            SEP FUNC(axi_mem_encoding_type, WRITE_BACK_READ_AND_WRITE_ALLOCATE)        \
+                                                SEP FUNC(axi_mem_encoding_type, RESERVED_12)                           \
+                                                    SEP FUNC(axi_mem_encoding_type, RESERVED_13)                       \
+                                                        SEP FUNC(axi_mem_encoding_type, RESERVED_14)                   \
+                                                            SEP FUNC(axi_mem_encoding_type, RESERVED_15)
+
 #define EXPAND_CLIP_RANGE(FUNC, SEP)                                                                                   \
     FUNC(clip_range, OFM_PRECISION)                                                                                    \
     SEP FUNC(clip_range, FORCE_UINT8) SEP FUNC(clip_range, FORCE_INT8) SEP FUNC(clip_range, FORCE_INT16)
@@ -13909,91 +14012,95 @@
     FUNC(ofm_precision, U8)                                                                                            \
     SEP FUNC(ofm_precision, S8) SEP FUNC(ofm_precision, U16) SEP FUNC(ofm_precision, S16) SEP FUNC(ofm_precision, S32)
 
-#define EXPAND_PMU_EVENT_TYPE(FUNC, SEP)                                                                                          \
-    FUNC(pmu_event_type, NO_EVENT)                                                                                                \
-    SEP FUNC(pmu_event_type, CYCLE) SEP FUNC(pmu_event_type, NPU_IDLE) SEP FUNC(                                                  \
-        pmu_event_type, CC_STALLED_ON_BLOCKDEP) SEP FUNC(pmu_event_type,                                                          \
-                                                         CC_STALLED_ON_SHRAM_RECONFIG) SEP FUNC(pmu_event_type,                   \
-                                                                                                NPU_ACTIVE)                       \
-        SEP FUNC(pmu_event_type, MAC_ACTIVE) SEP FUNC(pmu_event_type, MAC_ACTIVE_8BIT) SEP FUNC(                                  \
-            pmu_event_type, MAC_ACTIVE_16BIT) SEP FUNC(pmu_event_type, MAC_DPU_ACTIVE) SEP FUNC(pmu_event_type,                   \
-                                                                                                MAC_STALLED_BY_WD_ACC)            \
-            SEP FUNC(pmu_event_type, MAC_STALLED_BY_WD) SEP FUNC(pmu_event_type, MAC_STALLED_BY_ACC) SEP FUNC(                    \
-                pmu_event_type, MAC_STALLED_BY_IB) SEP FUNC(pmu_event_type,                                                       \
-                                                            MAC_ACTIVE_32BIT) SEP FUNC(pmu_event_type,                            \
-                                                                                       MAC_STALLED_BY_INT_W)                      \
-                SEP FUNC(pmu_event_type, MAC_STALLED_BY_INT_ACC) SEP FUNC(pmu_event_type, AO_ACTIVE) SEP FUNC(                    \
-                    pmu_event_type, AO_ACTIVE_8BIT) SEP FUNC(pmu_event_type,                                                      \
-                                                             AO_ACTIVE_16BIT) SEP FUNC(pmu_event_type,                            \
-                                                                                       AO_STALLED_BY_OFMP_OB)                     \
-                    SEP FUNC(pmu_event_type, AO_STALLED_BY_OFMP) SEP FUNC(pmu_event_type, AO_STALLED_BY_OB) SEP FUNC(             \
-                        pmu_event_type,                                                                                           \
-                        AO_STALLED_BY_ACC_IB) SEP FUNC(pmu_event_type,                                                            \
-                                                       AO_STALLED_BY_ACC) SEP FUNC(pmu_event_type,                                \
-                                                                                   AO_STALLED_BY_IB) SEP FUNC(pmu_event_type,     \
-                                                                                                              WD_ACTIVE) SEP      \
-                        FUNC(pmu_event_type, WD_STALLED) SEP FUNC(pmu_event_type, WD_STALLED_BY_WS) SEP FUNC(                     \
-                            pmu_event_type,                                                                                       \
-                            WD_STALLED_BY_WD_BUF) SEP                                                                             \
-                            FUNC(pmu_event_type, WD_PARSE_ACTIVE) SEP FUNC(pmu_event_type, WD_PARSE_STALLED) SEP FUNC(            \
-                                pmu_event_type,                                                                                   \
-                                WD_PARSE_STALLED_IN) SEP FUNC(pmu_event_type,                                                     \
-                                                              WD_PARSE_STALLED_OUT) SEP                                           \
-                                FUNC(pmu_event_type, WD_TRANS_WS) SEP FUNC(pmu_event_type, WD_TRANS_WB) SEP FUNC(                 \
-                                    pmu_event_type,                                                                               \
-                                    WD_TRANS_DW0) SEP FUNC(pmu_event_type,                                                        \
-                                                           WD_TRANS_DW1) SEP FUNC(pmu_event_type,                                 \
-                                                                                  AXI0_RD_TRANS_ACCEPTED) SEP                     \
-                                    FUNC(pmu_event_type, AXI0_RD_TRANS_COMPLETED) SEP FUNC(                                       \
-                                        pmu_event_type,                                                                           \
-                                        AXI0_RD_DATA_BEAT_RECEIVED) SEP FUNC(pmu_event_type, AXI0_RD_TRAN_REQ_STALLED)            \
-                                        SEP FUNC(pmu_event_type,                                                                  \
-                                                 AXI0_WR_TRANS_ACCEPTED) SEP FUNC(pmu_event_type,                                 \
-                                                                                  AXI0_WR_TRANS_COMPLETED_M)                      \
-                                            SEP FUNC(pmu_event_type, AXI0_WR_TRANS_COMPLETED_S) SEP FUNC(                         \
-                                                pmu_event_type,                                                                   \
-                                                AXI0_WR_DATA_BEAT_WRITTEN)                                                        \
-                                                SEP FUNC(pmu_event_type, AXI0_WR_TRAN_REQ_STALLED) SEP FUNC(                      \
-                                                    pmu_event_type,                                                               \
-                                                    AXI0_WR_DATA_BEAT_STALLED) SEP                                                \
-                                                    FUNC(pmu_event_type, AXI0_ENABLED_CYCLES) SEP FUNC(                           \
-                                                        pmu_event_type,                                                           \
-                                                        AXI0_RD_STALL_LIMIT) SEP FUNC(pmu_event_type,                             \
-                                                                                      AXI0_WR_STALL_LIMIT) SEP                    \
-                                                        FUNC(pmu_event_type, AXI1_RD_TRANS_ACCEPTED) SEP FUNC(                    \
-                                                            pmu_event_type,                                                       \
-                                                            AXI1_RD_TRANS_COMPLETED) SEP FUNC(pmu_event_type,                     \
-                                                                                              AXI1_RD_DATA_BEAT_RECEIVED) SEP     \
-                                                            FUNC(pmu_event_type, AXI1_RD_TRAN_REQ_STALLED) SEP FUNC(              \
-                                                                pmu_event_type,                                                   \
-                                                                AXI1_WR_TRANS_ACCEPTED) SEP                                       \
-                                                                FUNC(pmu_event_type, AXI1_WR_TRANS_COMPLETED_M) SEP FUNC(         \
-                                                                    pmu_event_type,                                               \
-                                                                    AXI1_WR_TRANS_COMPLETED_S) SEP                                \
-                                                                    FUNC(pmu_event_type, AXI1_WR_DATA_BEAT_WRITTEN) SEP FUNC(     \
-                                                                        pmu_event_type,                                           \
-                                                                        AXI1_WR_TRAN_REQ_STALLED) SEP                             \
-                                                                        FUNC(pmu_event_type, AXI1_WR_DATA_BEAT_STALLED) SEP FUNC( \
-                                                                            pmu_event_type,                                       \
-                                                                            AXI1_ENABLED_CYCLES) SEP                              \
-                                                                            FUNC(pmu_event_type, AXI1_RD_STALL_LIMIT) SEP FUNC(   \
-                                                                                pmu_event_type,                                   \
-                                                                                AXI1_WR_STALL_LIMIT) SEP                          \
-                                                                                FUNC(pmu_event_type, AXI_LATENCY_ANY) SEP FUNC(   \
-                                                                                    pmu_event_type,                               \
-                                                                                    AXI_LATENCY_32) SEP                           \
-                                                                                    FUNC(pmu_event_type,                          \
-                                                                                         AXI_LATENCY_64) SEP                      \
-                                                                                        FUNC(pmu_event_type,                      \
-                                                                                             AXI_LATENCY_128) SEP                 \
-                                                                                            FUNC(pmu_event_type,                  \
-                                                                                                 AXI_LATENCY_256) SEP             \
-                                                                                                FUNC(                             \
-                                                                                                    pmu_event_type,               \
-                                                                                                    AXI_LATENCY_512) SEP          \
-                                                                                                    FUNC(                         \
-                                                                                                        pmu_event_type,           \
-                                                                                                        AXI_LATENCY_1024)
+#define EXPAND_PMU_EVENT_TYPE(FUNC, SEP)                                                                                           \
+    FUNC(pmu_event_type, NO_EVENT)                                                                                                 \
+    SEP FUNC(pmu_event_type, CYCLE) SEP FUNC(pmu_event_type, NPU_IDLE) SEP FUNC(                                                   \
+        pmu_event_type, CC_STALLED_ON_BLOCKDEP) SEP FUNC(pmu_event_type,                                                           \
+                                                         CC_STALLED_ON_SHRAM_RECONFIG) SEP FUNC(pmu_event_type,                    \
+                                                                                                NPU_ACTIVE)                        \
+        SEP FUNC(pmu_event_type, MAC_ACTIVE) SEP FUNC(pmu_event_type, MAC_ACTIVE_8BIT) SEP FUNC(                                   \
+            pmu_event_type, MAC_ACTIVE_16BIT) SEP FUNC(pmu_event_type, MAC_DPU_ACTIVE) SEP FUNC(pmu_event_type,                    \
+                                                                                                MAC_STALLED_BY_WD_ACC)             \
+            SEP FUNC(pmu_event_type, MAC_STALLED_BY_WD) SEP FUNC(pmu_event_type, MAC_STALLED_BY_ACC) SEP FUNC(                     \
+                pmu_event_type, MAC_STALLED_BY_IB) SEP FUNC(pmu_event_type,                                                        \
+                                                            MAC_ACTIVE_32BIT) SEP FUNC(pmu_event_type,                             \
+                                                                                       MAC_STALLED_BY_INT_W)                       \
+                SEP FUNC(pmu_event_type, MAC_STALLED_BY_INT_ACC) SEP FUNC(pmu_event_type, AO_ACTIVE) SEP FUNC(                     \
+                    pmu_event_type, AO_ACTIVE_8BIT) SEP FUNC(pmu_event_type,                                                       \
+                                                             AO_ACTIVE_16BIT) SEP FUNC(pmu_event_type,                             \
+                                                                                       AO_STALLED_BY_OFMP_OB)                      \
+                    SEP FUNC(pmu_event_type, AO_STALLED_BY_OFMP) SEP FUNC(pmu_event_type, AO_STALLED_BY_OB) SEP FUNC(              \
+                        pmu_event_type,                                                                                            \
+                        AO_STALLED_BY_ACC_IB) SEP FUNC(pmu_event_type,                                                             \
+                                                       AO_STALLED_BY_ACC) SEP FUNC(pmu_event_type,                                 \
+                                                                                   AO_STALLED_BY_IB) SEP FUNC(pmu_event_type,      \
+                                                                                                              WD_ACTIVE) SEP       \
+                        FUNC(pmu_event_type, WD_STALLED) SEP FUNC(pmu_event_type, WD_STALLED_BY_WS) SEP FUNC(                      \
+                            pmu_event_type,                                                                                        \
+                            WD_STALLED_BY_WD_BUF) SEP                                                                              \
+                            FUNC(pmu_event_type, WD_PARSE_ACTIVE) SEP FUNC(pmu_event_type, WD_PARSE_STALLED) SEP FUNC(             \
+                                pmu_event_type,                                                                                    \
+                                WD_PARSE_STALLED_IN) SEP FUNC(pmu_event_type,                                                      \
+                                                              WD_PARSE_STALLED_OUT) SEP                                            \
+                                FUNC(pmu_event_type, WD_TRANS_WS) SEP FUNC(pmu_event_type, WD_TRANS_WB) SEP FUNC(                  \
+                                    pmu_event_type,                                                                                \
+                                    WD_TRANS_DW0) SEP FUNC(pmu_event_type,                                                         \
+                                                           WD_TRANS_DW1) SEP FUNC(pmu_event_type,                                  \
+                                                                                  AXI0_RD_TRANS_ACCEPTED) SEP                      \
+                                    FUNC(pmu_event_type, AXI0_RD_TRANS_COMPLETED) SEP FUNC(                                        \
+                                        pmu_event_type,                                                                            \
+                                        AXI0_RD_DATA_BEAT_RECEIVED) SEP FUNC(pmu_event_type, AXI0_RD_TRAN_REQ_STALLED)             \
+                                        SEP FUNC(pmu_event_type,                                                                   \
+                                                 AXI0_WR_TRANS_ACCEPTED) SEP FUNC(pmu_event_type,                                  \
+                                                                                  AXI0_WR_TRANS_COMPLETED_M)                       \
+                                            SEP FUNC(pmu_event_type, AXI0_WR_TRANS_COMPLETED_S) SEP FUNC(                          \
+                                                pmu_event_type,                                                                    \
+                                                AXI0_WR_DATA_BEAT_WRITTEN)                                                         \
+                                                SEP FUNC(pmu_event_type, AXI0_WR_TRAN_REQ_STALLED) SEP FUNC(                       \
+                                                    pmu_event_type,                                                                \
+                                                    AXI0_WR_DATA_BEAT_STALLED) SEP                                                 \
+                                                    FUNC(pmu_event_type, AXI0_ENABLED_CYCLES) SEP FUNC(                            \
+                                                        pmu_event_type,                                                            \
+                                                        AXI0_RD_STALL_LIMIT) SEP FUNC(pmu_event_type,                              \
+                                                                                      AXI0_WR_STALL_LIMIT) SEP                     \
+                                                        FUNC(pmu_event_type, AXI1_RD_TRANS_ACCEPTED) SEP FUNC(                     \
+                                                            pmu_event_type,                                                        \
+                                                            AXI1_RD_TRANS_COMPLETED) SEP FUNC(pmu_event_type,                      \
+                                                                                              AXI1_RD_DATA_BEAT_RECEIVED) SEP      \
+                                                            FUNC(pmu_event_type, AXI1_RD_TRAN_REQ_STALLED) SEP FUNC(               \
+                                                                pmu_event_type,                                                    \
+                                                                AXI1_WR_TRANS_ACCEPTED) SEP                                        \
+                                                                FUNC(pmu_event_type, AXI1_WR_TRANS_COMPLETED_M) SEP FUNC(          \
+                                                                    pmu_event_type,                                                \
+                                                                    AXI1_WR_TRANS_COMPLETED_S) SEP                                 \
+                                                                    FUNC(pmu_event_type, AXI1_WR_DATA_BEAT_WRITTEN) SEP FUNC(      \
+                                                                        pmu_event_type,                                            \
+                                                                        AXI1_WR_TRAN_REQ_STALLED) SEP                              \
+                                                                        FUNC(pmu_event_type, AXI1_WR_DATA_BEAT_STALLED) SEP FUNC(  \
+                                                                            pmu_event_type,                                        \
+                                                                            AXI1_ENABLED_CYCLES) SEP FUNC(pmu_event_type,          \
+                                                                                                          AXI1_RD_STALL_LIMIT) SEP \
+                                                                            FUNC(pmu_event_type, AXI1_WR_STALL_LIMIT) SEP FUNC(    \
+                                                                                pmu_event_type,                                    \
+                                                                                AXI_LATENCY_ANY) SEP FUNC(pmu_event_type,          \
+                                                                                                          AXI_LATENCY_32) SEP      \
+                                                                                FUNC(pmu_event_type, AXI_LATENCY_64) SEP FUNC(     \
+                                                                                    pmu_event_type,                                \
+                                                                                    AXI_LATENCY_128) SEP                           \
+                                                                                    FUNC(pmu_event_type,                           \
+                                                                                         AXI_LATENCY_256) SEP                      \
+                                                                                        FUNC(pmu_event_type,                       \
+                                                                                             AXI_LATENCY_512) SEP                  \
+                                                                                            FUNC(pmu_event_type,                   \
+                                                                                                 AXI_LATENCY_1024) SEP             \
+                                                                                                FUNC(pmu_event_type,               \
+                                                                                                     ECC_DMA) SEP                  \
+                                                                                                    FUNC(                          \
+                                                                                                        pmu_event_type,            \
+                                                                                                        ECC_SB0) SEP               \
+                                                                                                        FUNC(                      \
+                                                                                                            pmu_event_type,        \
+                                                                                                            ECC_SB1)
 
 #define EXPAND_POOLING_MODE(FUNC, SEP)                                                                                 \
     FUNC(pooling_mode, MAX) SEP FUNC(pooling_mode, AVERAGE) SEP FUNC(pooling_mode, REDUCE_SUM)
@@ -14008,7 +14115,8 @@
 #define EXPAND_SECURITY_LEVEL(FUNC, SEP) FUNC(security_level, SECURE) SEP FUNC(security_level, NON_SECURE)
 
 #define EXPAND_SHRAM_SIZE(FUNC, SEP)                                                                                   \
-    FUNC(shram_size, SHRAM_48KB) SEP FUNC(shram_size, SHRAM_24KB) SEP FUNC(shram_size, SHRAM_16KB)
+    FUNC(shram_size, SHRAM_96KB)                                                                                       \
+    SEP FUNC(shram_size, SHRAM_48KB) SEP FUNC(shram_size, SHRAM_24KB) SEP FUNC(shram_size, SHRAM_16KB)
 
 #define EXPAND_STATE(FUNC, SEP) FUNC(state, STOPPED) SEP FUNC(state, RUNNING)