12c248adeSVarun Wadekar /* 2*308dce40SVarun Wadekar * Copyright (c) 2021-2022, NVIDIA Corporation. All rights reserved. 32c248adeSVarun Wadekar * 42c248adeSVarun Wadekar * SPDX-License-Identifier: BSD-3-Clause 52c248adeSVarun Wadekar */ 62c248adeSVarun Wadekar 72c248adeSVarun Wadekar /* 82c248adeSVarun Wadekar * Driver for GIC-600AE Fault Management Unit 92c248adeSVarun Wadekar */ 102c248adeSVarun Wadekar 112c248adeSVarun Wadekar #include <assert.h> 12*308dce40SVarun Wadekar #include <inttypes.h> 132c248adeSVarun Wadekar 142c248adeSVarun Wadekar #include <arch_helpers.h> 152c248adeSVarun Wadekar #include <common/debug.h> 162c248adeSVarun Wadekar #include <drivers/arm/gic600ae_fmu.h> 172c248adeSVarun Wadekar #include <drivers/arm/gicv3.h> 182c248adeSVarun Wadekar 192c248adeSVarun Wadekar /* GIC-600 AE FMU specific register offsets */ 202c248adeSVarun Wadekar 212c248adeSVarun Wadekar /* GIC-600 AE FMU specific macros */ 222c248adeSVarun Wadekar #define FMU_ERRIDR_NUM U(44) 232c248adeSVarun Wadekar #define FMU_ERRIDR_NUM_MASK U(0xFFFF) 242c248adeSVarun Wadekar 252c248adeSVarun Wadekar /* Safety mechanisms for GICD block */ 262c248adeSVarun Wadekar static char *gicd_sm_info[] = { 272c248adeSVarun Wadekar "Reserved", 282c248adeSVarun Wadekar "GICD dual lockstep error", 292c248adeSVarun Wadekar "GICD AXI4 slave interface error", 302c248adeSVarun Wadekar "GICD-PPI AXI4-Stream interface error", 312c248adeSVarun Wadekar "GICD-ITS AXI4-Stream interface error", 322c248adeSVarun Wadekar "GICD-SPI-Collator AXI4-Stream interface error", 332c248adeSVarun Wadekar "GICD AXI4 master interface error", 342c248adeSVarun Wadekar "SPI RAM DED error", 352c248adeSVarun Wadekar "SGI RAM DED error", 362c248adeSVarun Wadekar "Reserved", 372c248adeSVarun Wadekar "LPI RAM DED error", 382c248adeSVarun Wadekar "GICD-remote-GICD AXI4-Stream interface error", 392c248adeSVarun Wadekar "GICD Q-Channel interface error", 402c248adeSVarun Wadekar "GICD P-Channel interface error", 412c248adeSVarun Wadekar "SPI RAM address decode error", 422c248adeSVarun Wadekar "SGI RAM address decode error", 432c248adeSVarun Wadekar "Reserved", 442c248adeSVarun Wadekar "LPI RAM address decode error", 452c248adeSVarun Wadekar "FMU dual lockstep error", 462c248adeSVarun Wadekar "FMU ping ACK error", 472c248adeSVarun Wadekar "FMU APB parity error", 482c248adeSVarun Wadekar "GICD-Wake AXI4-Stream interface error", 492c248adeSVarun Wadekar "GICD PageOffset or Chip ID error", 502c248adeSVarun Wadekar "MBIST REQ error", 512c248adeSVarun Wadekar "SPI RAM SEC error", 522c248adeSVarun Wadekar "SGI RAM SEC error", 532c248adeSVarun Wadekar "Reserved", 542c248adeSVarun Wadekar "LPI RAM SEC error", 552c248adeSVarun Wadekar "User custom SM0 error", 562c248adeSVarun Wadekar "User custom SM1 error", 572c248adeSVarun Wadekar "GICD-ITS Monolithic switch error", 582c248adeSVarun Wadekar "GICD-ITS Q-Channel interface error", 592c248adeSVarun Wadekar "GICD-ITS Monolithic interface error", 602c248adeSVarun Wadekar "GICD FMU ClkGate override" 612c248adeSVarun Wadekar }; 622c248adeSVarun Wadekar 632c248adeSVarun Wadekar /* Safety mechanisms for PPI block */ 642c248adeSVarun Wadekar static char *ppi_sm_info[] = { 652c248adeSVarun Wadekar "Reserved", 662c248adeSVarun Wadekar "PPI dual lockstep error", 672c248adeSVarun Wadekar "PPI-GICD AXI4-Stream interface error", 682c248adeSVarun Wadekar "PPI-CPU-IF AXI4-Stream interface error", 692c248adeSVarun Wadekar "PPI Q-Channel interface error", 702c248adeSVarun Wadekar "PPI RAM DED error", 712c248adeSVarun Wadekar "PPI RAM address decode error", 722c248adeSVarun Wadekar "PPI RAM SEC error", 732c248adeSVarun Wadekar "PPI User0 SM", 742c248adeSVarun Wadekar "PPI User1 SM", 752c248adeSVarun Wadekar "MBIST REQ error", 762c248adeSVarun Wadekar "PPI interrupt parity protection error", 772c248adeSVarun Wadekar "PPI FMU ClkGate override" 782c248adeSVarun Wadekar }; 792c248adeSVarun Wadekar 802c248adeSVarun Wadekar /* Safety mechanisms for ITS block */ 812c248adeSVarun Wadekar static char *its_sm_info[] = { 822c248adeSVarun Wadekar "Reserved", 832c248adeSVarun Wadekar "ITS dual lockstep error", 842c248adeSVarun Wadekar "ITS-GICD AXI4-Stream interface error", 852c248adeSVarun Wadekar "ITS AXI4 slave interface error", 862c248adeSVarun Wadekar "ITS AXI4 master interface error", 872c248adeSVarun Wadekar "ITS Q-Channel interface error", 882c248adeSVarun Wadekar "ITS RAM DED error", 892c248adeSVarun Wadekar "ITS RAM address decode error", 902c248adeSVarun Wadekar "Bypass ACE switch error", 912c248adeSVarun Wadekar "ITS RAM SEC error", 922c248adeSVarun Wadekar "ITS User0 SM", 932c248adeSVarun Wadekar "ITS User1 SM", 942c248adeSVarun Wadekar "ITS-GICD Monolithic interface error", 952c248adeSVarun Wadekar "MBIST REQ error", 962c248adeSVarun Wadekar "ITS FMU ClkGate override" 972c248adeSVarun Wadekar }; 982c248adeSVarun Wadekar 992c248adeSVarun Wadekar /* Safety mechanisms for SPI Collator block */ 1002c248adeSVarun Wadekar static char *spicol_sm_info[] = { 1012c248adeSVarun Wadekar "Reserved", 1022c248adeSVarun Wadekar "SPI Collator dual lockstep error", 1032c248adeSVarun Wadekar "SPI-Collator-GICD AXI4-Stream interface error", 1042c248adeSVarun Wadekar "SPI Collator Q-Channel interface error", 1052c248adeSVarun Wadekar "SPI Collator Q-Channel clock error", 1062c248adeSVarun Wadekar "SPI interrupt parity error" 1072c248adeSVarun Wadekar }; 1082c248adeSVarun Wadekar 1092c248adeSVarun Wadekar /* Safety mechanisms for Wake Request block */ 1102c248adeSVarun Wadekar static char *wkrqst_sm_info[] = { 1112c248adeSVarun Wadekar "Reserved", 1122c248adeSVarun Wadekar "Wake dual lockstep error", 1132c248adeSVarun Wadekar "Wake-GICD AXI4-Stream interface error" 1142c248adeSVarun Wadekar }; 1152c248adeSVarun Wadekar 116*308dce40SVarun Wadekar /* Helper function to find detailed information for a specific IERR */ 117*308dce40SVarun Wadekar static char __unused *ras_ierr_to_str(unsigned int blkid, unsigned int ierr) 118*308dce40SVarun Wadekar { 119*308dce40SVarun Wadekar char *str = NULL; 120*308dce40SVarun Wadekar 121*308dce40SVarun Wadekar /* Find the correct record */ 122*308dce40SVarun Wadekar switch (blkid) { 123*308dce40SVarun Wadekar case FMU_BLK_GICD: 124*308dce40SVarun Wadekar assert(ierr < ARRAY_SIZE(gicd_sm_info)); 125*308dce40SVarun Wadekar str = gicd_sm_info[ierr]; 126*308dce40SVarun Wadekar break; 127*308dce40SVarun Wadekar 128*308dce40SVarun Wadekar case FMU_BLK_SPICOL: 129*308dce40SVarun Wadekar assert(ierr < ARRAY_SIZE(spicol_sm_info)); 130*308dce40SVarun Wadekar str = spicol_sm_info[ierr]; 131*308dce40SVarun Wadekar break; 132*308dce40SVarun Wadekar 133*308dce40SVarun Wadekar case FMU_BLK_WAKERQ: 134*308dce40SVarun Wadekar assert(ierr < ARRAY_SIZE(wkrqst_sm_info)); 135*308dce40SVarun Wadekar str = wkrqst_sm_info[ierr]; 136*308dce40SVarun Wadekar break; 137*308dce40SVarun Wadekar 138*308dce40SVarun Wadekar case FMU_BLK_ITS0...FMU_BLK_ITS7: 139*308dce40SVarun Wadekar assert(ierr < ARRAY_SIZE(its_sm_info)); 140*308dce40SVarun Wadekar str = its_sm_info[ierr]; 141*308dce40SVarun Wadekar break; 142*308dce40SVarun Wadekar 143*308dce40SVarun Wadekar case FMU_BLK_PPI0...FMU_BLK_PPI31: 144*308dce40SVarun Wadekar assert(ierr < ARRAY_SIZE(ppi_sm_info)); 145*308dce40SVarun Wadekar str = ppi_sm_info[ierr]; 146*308dce40SVarun Wadekar break; 147*308dce40SVarun Wadekar 148*308dce40SVarun Wadekar default: 149*308dce40SVarun Wadekar assert(false); 150*308dce40SVarun Wadekar break; 151*308dce40SVarun Wadekar } 152*308dce40SVarun Wadekar 153*308dce40SVarun Wadekar return str; 154*308dce40SVarun Wadekar } 155*308dce40SVarun Wadekar 156*308dce40SVarun Wadekar /* 157*308dce40SVarun Wadekar * Probe for error in memory-mapped registers containing error records. 158*308dce40SVarun Wadekar * Upon detecting an error, set probe data to the index of the record 159*308dce40SVarun Wadekar * in error, and return 1; otherwise, return 0. 160*308dce40SVarun Wadekar */ 161*308dce40SVarun Wadekar int gic600_fmu_probe(uint64_t base, int *probe_data) 162*308dce40SVarun Wadekar { 163*308dce40SVarun Wadekar uint64_t gsr; 164*308dce40SVarun Wadekar 165*308dce40SVarun Wadekar assert(base != 0UL); 166*308dce40SVarun Wadekar 167*308dce40SVarun Wadekar /* 168*308dce40SVarun Wadekar * Read ERR_GSR to find the error record 'M' 169*308dce40SVarun Wadekar */ 170*308dce40SVarun Wadekar gsr = gic_fmu_read_errgsr(base); 171*308dce40SVarun Wadekar if (gsr == U(0)) { 172*308dce40SVarun Wadekar return 0; 173*308dce40SVarun Wadekar } 174*308dce40SVarun Wadekar 175*308dce40SVarun Wadekar /* Return the index of the record in error */ 176*308dce40SVarun Wadekar if (probe_data != NULL) { 177*308dce40SVarun Wadekar *probe_data = (int)__builtin_ctzll(gsr); 178*308dce40SVarun Wadekar } 179*308dce40SVarun Wadekar 180*308dce40SVarun Wadekar return 1; 181*308dce40SVarun Wadekar } 182*308dce40SVarun Wadekar 183*308dce40SVarun Wadekar /* 184*308dce40SVarun Wadekar * The handler function to read RAS records and find the safety 185*308dce40SVarun Wadekar * mechanism with the error. 186*308dce40SVarun Wadekar */ 187*308dce40SVarun Wadekar int gic600_fmu_ras_handler(uint64_t base, int probe_data) 188*308dce40SVarun Wadekar { 189*308dce40SVarun Wadekar uint64_t errstatus; 190*308dce40SVarun Wadekar unsigned int blkid = (unsigned int)probe_data, ierr, serr; 191*308dce40SVarun Wadekar 192*308dce40SVarun Wadekar assert(base != 0UL); 193*308dce40SVarun Wadekar 194*308dce40SVarun Wadekar /* 195*308dce40SVarun Wadekar * FMU_ERRGSR indicates the ID of the GIC 196*308dce40SVarun Wadekar * block that faulted. 197*308dce40SVarun Wadekar */ 198*308dce40SVarun Wadekar assert(blkid <= FMU_BLK_PPI31); 199*308dce40SVarun Wadekar 200*308dce40SVarun Wadekar /* 201*308dce40SVarun Wadekar * Find more information by reading FMU_ERR<M>STATUS 202*308dce40SVarun Wadekar * register 203*308dce40SVarun Wadekar */ 204*308dce40SVarun Wadekar errstatus = gic_fmu_read_errstatus(base, blkid); 205*308dce40SVarun Wadekar 206*308dce40SVarun Wadekar /* 207*308dce40SVarun Wadekar * If FMU_ERR<M>STATUS.V is set to 0, no RAS records 208*308dce40SVarun Wadekar * need to be scanned. 209*308dce40SVarun Wadekar */ 210*308dce40SVarun Wadekar if ((errstatus & FMU_ERRSTATUS_V_BIT) == U(0)) { 211*308dce40SVarun Wadekar return 0; 212*308dce40SVarun Wadekar } 213*308dce40SVarun Wadekar 214*308dce40SVarun Wadekar /* 215*308dce40SVarun Wadekar * FMU_ERR<M>STATUS.IERR indicates which Safety Mechanism 216*308dce40SVarun Wadekar * reported the error. 217*308dce40SVarun Wadekar */ 218*308dce40SVarun Wadekar ierr = (errstatus >> FMU_ERRSTATUS_IERR_SHIFT) & 219*308dce40SVarun Wadekar FMU_ERRSTATUS_IERR_MASK; 220*308dce40SVarun Wadekar 221*308dce40SVarun Wadekar /* 222*308dce40SVarun Wadekar * FMU_ERR<M>STATUS.SERR indicates architecturally 223*308dce40SVarun Wadekar * defined primary error code. 224*308dce40SVarun Wadekar */ 225*308dce40SVarun Wadekar serr = errstatus & FMU_ERRSTATUS_SERR_MASK; 226*308dce40SVarun Wadekar 227*308dce40SVarun Wadekar ERROR("**************************************\n"); 228*308dce40SVarun Wadekar ERROR("RAS %s Error detected by GIC600 AE FMU\n", 229*308dce40SVarun Wadekar ((errstatus & FMU_ERRSTATUS_UE_BIT) != 0U) ? 230*308dce40SVarun Wadekar "Uncorrectable" : "Corrected"); 231*308dce40SVarun Wadekar ERROR("\tStatus = 0x%lx \n", errstatus); 232*308dce40SVarun Wadekar ERROR("\tBlock ID = 0x%x\n", blkid); 233*308dce40SVarun Wadekar ERROR("\tSafety Mechanism ID = 0x%x (%s)\n", ierr, 234*308dce40SVarun Wadekar ras_ierr_to_str(blkid, ierr)); 235*308dce40SVarun Wadekar ERROR("\tArchitecturally defined primary error code = 0x%x\n", 236*308dce40SVarun Wadekar serr); 237*308dce40SVarun Wadekar ERROR("**************************************\n"); 238*308dce40SVarun Wadekar 239*308dce40SVarun Wadekar /* Clear FMU_ERR<M>STATUS */ 240*308dce40SVarun Wadekar gic_fmu_write_errstatus(base, probe_data, errstatus); 241*308dce40SVarun Wadekar 242*308dce40SVarun Wadekar return 0; 243*308dce40SVarun Wadekar } 244*308dce40SVarun Wadekar 2452c248adeSVarun Wadekar /* 2462c248adeSVarun Wadekar * Initialization sequence for the FMU 2472c248adeSVarun Wadekar * 2482c248adeSVarun Wadekar * 1. enable error detection for error records that are passed in the blk_present_mask 2492c248adeSVarun Wadekar * 2. enable MBIST REQ and FMU Clk Gate override safety mechanisms for error records 2502c248adeSVarun Wadekar * that are present on the platform 2512c248adeSVarun Wadekar * 2522c248adeSVarun Wadekar * The platforms are expected to pass `errctlr_ce_en` and `errctlr_ue_en`. 2532c248adeSVarun Wadekar */ 2542c248adeSVarun Wadekar void gic600_fmu_init(uint64_t base, uint64_t blk_present_mask, 2552c248adeSVarun Wadekar bool errctlr_ce_en, bool errctlr_ue_en) 2562c248adeSVarun Wadekar { 2572c248adeSVarun Wadekar unsigned int num_blk = gic_fmu_read_erridr(base) & FMU_ERRIDR_NUM_MASK; 2582c248adeSVarun Wadekar uint64_t errctlr; 2592c248adeSVarun Wadekar uint32_t smen; 2602c248adeSVarun Wadekar 2612c248adeSVarun Wadekar INFO("GIC600-AE FMU supports %d error records\n", num_blk); 2622c248adeSVarun Wadekar 2632c248adeSVarun Wadekar assert(num_blk == FMU_ERRIDR_NUM); 2642c248adeSVarun Wadekar 2652c248adeSVarun Wadekar /* sanitize block present mask */ 2662c248adeSVarun Wadekar blk_present_mask &= FMU_BLK_PRESENT_MASK; 2672c248adeSVarun Wadekar 2682c248adeSVarun Wadekar /* Enable error detection for all error records */ 2692c248adeSVarun Wadekar for (unsigned int i = 0U; i < num_blk; i++) { 2702c248adeSVarun Wadekar 2712c248adeSVarun Wadekar /* Skip next steps if the block is not present */ 2722c248adeSVarun Wadekar if ((blk_present_mask & BIT(i)) == 0U) { 2732c248adeSVarun Wadekar continue; 2742c248adeSVarun Wadekar } 2752c248adeSVarun Wadekar 2762c248adeSVarun Wadekar /* Read the error record control register */ 2772c248adeSVarun Wadekar errctlr = gic_fmu_read_errctlr(base, i); 2782c248adeSVarun Wadekar 2792c248adeSVarun Wadekar /* Enable error reporting and logging, if it is disabled */ 2802c248adeSVarun Wadekar if ((errctlr & FMU_ERRCTLR_ED_BIT) == 0U) { 2812c248adeSVarun Wadekar errctlr |= FMU_ERRCTLR_ED_BIT; 2822c248adeSVarun Wadekar } 2832c248adeSVarun Wadekar 2842c248adeSVarun Wadekar /* Enable client provided ERRCTLR settings */ 2852c248adeSVarun Wadekar errctlr |= (errctlr_ce_en ? (FMU_ERRCTLR_CI_BIT | FMU_ERRCTLR_CE_EN_BIT) : 0); 2862c248adeSVarun Wadekar errctlr |= (errctlr_ue_en ? FMU_ERRCTLR_UI_BIT : 0U); 2872c248adeSVarun Wadekar 2882c248adeSVarun Wadekar gic_fmu_write_errctlr(base, i, errctlr); 2892c248adeSVarun Wadekar } 2902c248adeSVarun Wadekar 2912c248adeSVarun Wadekar /* 2922c248adeSVarun Wadekar * Enable MBIST REQ error and FMU CLK gate override safety mechanisms for 2932c248adeSVarun Wadekar * all blocks 2942c248adeSVarun Wadekar * 2952c248adeSVarun Wadekar * GICD, SMID 23 and SMID 33 2962c248adeSVarun Wadekar * PPI, SMID 10 and SMID 12 2972c248adeSVarun Wadekar * ITS, SMID 13 and SMID 14 2982c248adeSVarun Wadekar */ 2992c248adeSVarun Wadekar if ((blk_present_mask & BIT(FMU_BLK_GICD)) != 0U) { 3002c248adeSVarun Wadekar smen = (GICD_MBIST_REQ_ERROR << FMU_SMEN_SMID_SHIFT) | 3012c248adeSVarun Wadekar (FMU_BLK_GICD << FMU_SMEN_BLK_SHIFT); 3022c248adeSVarun Wadekar gic_fmu_write_smen(base, smen); 3032c248adeSVarun Wadekar 3042c248adeSVarun Wadekar smen = (GICD_FMU_CLKGATE_ERROR << FMU_SMEN_SMID_SHIFT) | 3052c248adeSVarun Wadekar (FMU_BLK_GICD << FMU_SMEN_BLK_SHIFT); 3062c248adeSVarun Wadekar gic_fmu_write_smen(base, smen); 3072c248adeSVarun Wadekar } 3082c248adeSVarun Wadekar 3092c248adeSVarun Wadekar for (unsigned int i = FMU_BLK_PPI0; i < FMU_BLK_PPI31; i++) { 3102c248adeSVarun Wadekar if ((blk_present_mask & BIT(i)) != 0U) { 3112c248adeSVarun Wadekar smen = (PPI_MBIST_REQ_ERROR << FMU_SMEN_SMID_SHIFT) | 3122c248adeSVarun Wadekar (i << FMU_SMEN_BLK_SHIFT); 3132c248adeSVarun Wadekar gic_fmu_write_smen(base, smen); 3142c248adeSVarun Wadekar 3152c248adeSVarun Wadekar smen = (PPI_FMU_CLKGATE_ERROR << FMU_SMEN_SMID_SHIFT) | 3162c248adeSVarun Wadekar (i << FMU_SMEN_BLK_SHIFT); 3172c248adeSVarun Wadekar gic_fmu_write_smen(base, smen); 3182c248adeSVarun Wadekar } 3192c248adeSVarun Wadekar } 3202c248adeSVarun Wadekar 3212c248adeSVarun Wadekar for (unsigned int i = FMU_BLK_ITS0; i < FMU_BLK_ITS7; i++) { 3222c248adeSVarun Wadekar if ((blk_present_mask & BIT(i)) != 0U) { 3232c248adeSVarun Wadekar smen = (ITS_MBIST_REQ_ERROR << FMU_SMEN_SMID_SHIFT) | 3242c248adeSVarun Wadekar (i << FMU_SMEN_BLK_SHIFT); 3252c248adeSVarun Wadekar gic_fmu_write_smen(base, smen); 3262c248adeSVarun Wadekar 3272c248adeSVarun Wadekar smen = (ITS_FMU_CLKGATE_ERROR << FMU_SMEN_SMID_SHIFT) | 3282c248adeSVarun Wadekar (i << FMU_SMEN_BLK_SHIFT); 3292c248adeSVarun Wadekar gic_fmu_write_smen(base, smen); 3302c248adeSVarun Wadekar } 3312c248adeSVarun Wadekar } 3322c248adeSVarun Wadekar } 3332c248adeSVarun Wadekar 3342c248adeSVarun Wadekar /* 3352c248adeSVarun Wadekar * This function enable the GICD background ping engine. The GICD sends ping 3362c248adeSVarun Wadekar * messages to each remote GIC block, and expects a PING_ACK back within the 3372c248adeSVarun Wadekar * specified timeout. Pings need to be enabled after programming the timeout 3382c248adeSVarun Wadekar * value. 3392c248adeSVarun Wadekar */ 3402c248adeSVarun Wadekar void gic600_fmu_enable_ping(uint64_t base, uint64_t blk_present_mask, 3412c248adeSVarun Wadekar unsigned int timeout_val, unsigned int interval_diff) 3422c248adeSVarun Wadekar { 3432c248adeSVarun Wadekar /* 3442c248adeSVarun Wadekar * Populate the PING Mask to skip a specific block while generating 3452c248adeSVarun Wadekar * background ping messages and enable the ping mechanism. 3462c248adeSVarun Wadekar */ 3472c248adeSVarun Wadekar gic_fmu_write_pingmask(base, ~blk_present_mask); 3482c248adeSVarun Wadekar gic_fmu_write_pingctlr(base, (interval_diff << FMU_PINGCTLR_INTDIFF_SHIFT) | 3492c248adeSVarun Wadekar (timeout_val << FMU_PINGCTLR_TIMEOUTVAL_SHIFT) | FMU_PINGCTLR_EN_BIT); 3502c248adeSVarun Wadekar } 3512c248adeSVarun Wadekar 3522c248adeSVarun Wadekar /* Print the safety mechanism description for a given block */ 3532c248adeSVarun Wadekar void gic600_fmu_print_sm_info(uint64_t base, unsigned int blk, unsigned int smid) 3542c248adeSVarun Wadekar { 3552c248adeSVarun Wadekar if (blk == FMU_BLK_GICD && smid <= FMU_SMID_GICD_MAX) { 3562c248adeSVarun Wadekar INFO("GICD, SMID %d: %s\n", smid, gicd_sm_info[smid]); 3572c248adeSVarun Wadekar } 3582c248adeSVarun Wadekar 3592c248adeSVarun Wadekar if (blk == FMU_BLK_SPICOL && smid <= FMU_SMID_SPICOL_MAX) { 3602c248adeSVarun Wadekar INFO("SPI Collator, SMID %d: %s\n", smid, spicol_sm_info[smid]); 3612c248adeSVarun Wadekar } 3622c248adeSVarun Wadekar 3632c248adeSVarun Wadekar if (blk == FMU_BLK_WAKERQ && (smid <= FMU_SMID_WAKERQ_MAX)) { 3642c248adeSVarun Wadekar INFO("Wake Request, SMID %d: %s\n", smid, wkrqst_sm_info[smid]); 3652c248adeSVarun Wadekar } 3662c248adeSVarun Wadekar 3672c248adeSVarun Wadekar if (((blk >= FMU_BLK_ITS0) && (blk <= FMU_BLK_ITS7)) && (smid <= FMU_SMID_ITS_MAX)) { 3682c248adeSVarun Wadekar INFO("ITS, SMID %d: %s\n", smid, its_sm_info[smid]); 3692c248adeSVarun Wadekar } 3702c248adeSVarun Wadekar 3712c248adeSVarun Wadekar if (((blk >= FMU_BLK_PPI0) && (blk <= FMU_BLK_PPI31)) && (smid <= FMU_SMID_PPI_MAX)) { 3722c248adeSVarun Wadekar INFO("PPI, SMID %d: %s\n", smid, ppi_sm_info[smid]); 3732c248adeSVarun Wadekar } 3742c248adeSVarun Wadekar } 375