1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2021-2022, NVIDIA Corporation. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu /* 8*91f16700Schasinglulu * Driver for GIC-600AE Fault Management Unit 9*91f16700Schasinglulu */ 10*91f16700Schasinglulu 11*91f16700Schasinglulu #include <assert.h> 12*91f16700Schasinglulu #include <inttypes.h> 13*91f16700Schasinglulu 14*91f16700Schasinglulu #include <arch_helpers.h> 15*91f16700Schasinglulu #include <common/debug.h> 16*91f16700Schasinglulu #include <drivers/arm/gic600ae_fmu.h> 17*91f16700Schasinglulu #include <drivers/arm/gicv3.h> 18*91f16700Schasinglulu 19*91f16700Schasinglulu /* GIC-600 AE FMU specific register offsets */ 20*91f16700Schasinglulu 21*91f16700Schasinglulu /* GIC-600 AE FMU specific macros */ 22*91f16700Schasinglulu #define FMU_ERRIDR_NUM U(44) 23*91f16700Schasinglulu #define FMU_ERRIDR_NUM_MASK U(0xFFFF) 24*91f16700Schasinglulu 25*91f16700Schasinglulu /* Safety mechanisms for GICD block */ 26*91f16700Schasinglulu static char *gicd_sm_info[] = { 27*91f16700Schasinglulu "Reserved", 28*91f16700Schasinglulu "GICD dual lockstep error", 29*91f16700Schasinglulu "GICD AXI4 slave interface error", 30*91f16700Schasinglulu "GICD-PPI AXI4-Stream interface error", 31*91f16700Schasinglulu "GICD-ITS AXI4-Stream interface error", 32*91f16700Schasinglulu "GICD-SPI-Collator AXI4-Stream interface error", 33*91f16700Schasinglulu "GICD AXI4 master interface error", 34*91f16700Schasinglulu "SPI RAM DED error", 35*91f16700Schasinglulu "SGI RAM DED error", 36*91f16700Schasinglulu "Reserved", 37*91f16700Schasinglulu "LPI RAM DED error", 38*91f16700Schasinglulu "GICD-remote-GICD AXI4-Stream interface error", 39*91f16700Schasinglulu "GICD Q-Channel interface error", 40*91f16700Schasinglulu "GICD P-Channel interface error", 41*91f16700Schasinglulu "SPI RAM address decode error", 42*91f16700Schasinglulu "SGI RAM address decode error", 43*91f16700Schasinglulu "Reserved", 44*91f16700Schasinglulu "LPI RAM address decode error", 45*91f16700Schasinglulu "FMU dual lockstep error", 46*91f16700Schasinglulu "FMU ping ACK error", 47*91f16700Schasinglulu "FMU APB parity error", 48*91f16700Schasinglulu "GICD-Wake AXI4-Stream interface error", 49*91f16700Schasinglulu "GICD PageOffset or Chip ID error", 50*91f16700Schasinglulu "MBIST REQ error", 51*91f16700Schasinglulu "SPI RAM SEC error", 52*91f16700Schasinglulu "SGI RAM SEC error", 53*91f16700Schasinglulu "Reserved", 54*91f16700Schasinglulu "LPI RAM SEC error", 55*91f16700Schasinglulu "User custom SM0 error", 56*91f16700Schasinglulu "User custom SM1 error", 57*91f16700Schasinglulu "GICD-ITS Monolithic switch error", 58*91f16700Schasinglulu "GICD-ITS Q-Channel interface error", 59*91f16700Schasinglulu "GICD-ITS Monolithic interface error", 60*91f16700Schasinglulu "GICD FMU ClkGate override" 61*91f16700Schasinglulu }; 62*91f16700Schasinglulu 63*91f16700Schasinglulu /* Safety mechanisms for PPI block */ 64*91f16700Schasinglulu static char *ppi_sm_info[] = { 65*91f16700Schasinglulu "Reserved", 66*91f16700Schasinglulu "PPI dual lockstep error", 67*91f16700Schasinglulu "PPI-GICD AXI4-Stream interface error", 68*91f16700Schasinglulu "PPI-CPU-IF AXI4-Stream interface error", 69*91f16700Schasinglulu "PPI Q-Channel interface error", 70*91f16700Schasinglulu "PPI RAM DED error", 71*91f16700Schasinglulu "PPI RAM address decode error", 72*91f16700Schasinglulu "PPI RAM SEC error", 73*91f16700Schasinglulu "PPI User0 SM", 74*91f16700Schasinglulu "PPI User1 SM", 75*91f16700Schasinglulu "MBIST REQ error", 76*91f16700Schasinglulu "PPI interrupt parity protection error", 77*91f16700Schasinglulu "PPI FMU ClkGate override" 78*91f16700Schasinglulu }; 79*91f16700Schasinglulu 80*91f16700Schasinglulu /* Safety mechanisms for ITS block */ 81*91f16700Schasinglulu static char *its_sm_info[] = { 82*91f16700Schasinglulu "Reserved", 83*91f16700Schasinglulu "ITS dual lockstep error", 84*91f16700Schasinglulu "ITS-GICD AXI4-Stream interface error", 85*91f16700Schasinglulu "ITS AXI4 slave interface error", 86*91f16700Schasinglulu "ITS AXI4 master interface error", 87*91f16700Schasinglulu "ITS Q-Channel interface error", 88*91f16700Schasinglulu "ITS RAM DED error", 89*91f16700Schasinglulu "ITS RAM address decode error", 90*91f16700Schasinglulu "Bypass ACE switch error", 91*91f16700Schasinglulu "ITS RAM SEC error", 92*91f16700Schasinglulu "ITS User0 SM", 93*91f16700Schasinglulu "ITS User1 SM", 94*91f16700Schasinglulu "ITS-GICD Monolithic interface error", 95*91f16700Schasinglulu "MBIST REQ error", 96*91f16700Schasinglulu "ITS FMU ClkGate override" 97*91f16700Schasinglulu }; 98*91f16700Schasinglulu 99*91f16700Schasinglulu /* Safety mechanisms for SPI Collator block */ 100*91f16700Schasinglulu static char *spicol_sm_info[] = { 101*91f16700Schasinglulu "Reserved", 102*91f16700Schasinglulu "SPI Collator dual lockstep error", 103*91f16700Schasinglulu "SPI-Collator-GICD AXI4-Stream interface error", 104*91f16700Schasinglulu "SPI Collator Q-Channel interface error", 105*91f16700Schasinglulu "SPI Collator Q-Channel clock error", 106*91f16700Schasinglulu "SPI interrupt parity error" 107*91f16700Schasinglulu }; 108*91f16700Schasinglulu 109*91f16700Schasinglulu /* Safety mechanisms for Wake Request block */ 110*91f16700Schasinglulu static char *wkrqst_sm_info[] = { 111*91f16700Schasinglulu "Reserved", 112*91f16700Schasinglulu "Wake dual lockstep error", 113*91f16700Schasinglulu "Wake-GICD AXI4-Stream interface error" 114*91f16700Schasinglulu }; 115*91f16700Schasinglulu 116*91f16700Schasinglulu /* Helper function to find detailed information for a specific IERR */ 117*91f16700Schasinglulu static char __unused *ras_ierr_to_str(unsigned int blkid, unsigned int ierr) 118*91f16700Schasinglulu { 119*91f16700Schasinglulu char *str = NULL; 120*91f16700Schasinglulu 121*91f16700Schasinglulu /* Find the correct record */ 122*91f16700Schasinglulu switch (blkid) { 123*91f16700Schasinglulu case FMU_BLK_GICD: 124*91f16700Schasinglulu assert(ierr < ARRAY_SIZE(gicd_sm_info)); 125*91f16700Schasinglulu str = gicd_sm_info[ierr]; 126*91f16700Schasinglulu break; 127*91f16700Schasinglulu 128*91f16700Schasinglulu case FMU_BLK_SPICOL: 129*91f16700Schasinglulu assert(ierr < ARRAY_SIZE(spicol_sm_info)); 130*91f16700Schasinglulu str = spicol_sm_info[ierr]; 131*91f16700Schasinglulu break; 132*91f16700Schasinglulu 133*91f16700Schasinglulu case FMU_BLK_WAKERQ: 134*91f16700Schasinglulu assert(ierr < ARRAY_SIZE(wkrqst_sm_info)); 135*91f16700Schasinglulu str = wkrqst_sm_info[ierr]; 136*91f16700Schasinglulu break; 137*91f16700Schasinglulu 138*91f16700Schasinglulu case FMU_BLK_ITS0...FMU_BLK_ITS7: 139*91f16700Schasinglulu assert(ierr < ARRAY_SIZE(its_sm_info)); 140*91f16700Schasinglulu str = its_sm_info[ierr]; 141*91f16700Schasinglulu break; 142*91f16700Schasinglulu 143*91f16700Schasinglulu case FMU_BLK_PPI0...FMU_BLK_PPI31: 144*91f16700Schasinglulu assert(ierr < ARRAY_SIZE(ppi_sm_info)); 145*91f16700Schasinglulu str = ppi_sm_info[ierr]; 146*91f16700Schasinglulu break; 147*91f16700Schasinglulu 148*91f16700Schasinglulu default: 149*91f16700Schasinglulu assert(false); 150*91f16700Schasinglulu break; 151*91f16700Schasinglulu } 152*91f16700Schasinglulu 153*91f16700Schasinglulu return str; 154*91f16700Schasinglulu } 155*91f16700Schasinglulu 156*91f16700Schasinglulu /* 157*91f16700Schasinglulu * Probe for error in memory-mapped registers containing error records. 158*91f16700Schasinglulu * Upon detecting an error, set probe data to the index of the record 159*91f16700Schasinglulu * in error, and return 1; otherwise, return 0. 160*91f16700Schasinglulu */ 161*91f16700Schasinglulu int gic600_fmu_probe(uint64_t base, int *probe_data) 162*91f16700Schasinglulu { 163*91f16700Schasinglulu uint64_t gsr; 164*91f16700Schasinglulu 165*91f16700Schasinglulu assert(base != 0UL); 166*91f16700Schasinglulu 167*91f16700Schasinglulu /* 168*91f16700Schasinglulu * Read ERR_GSR to find the error record 'M' 169*91f16700Schasinglulu */ 170*91f16700Schasinglulu gsr = gic_fmu_read_errgsr(base); 171*91f16700Schasinglulu if (gsr == U(0)) { 172*91f16700Schasinglulu return 0; 173*91f16700Schasinglulu } 174*91f16700Schasinglulu 175*91f16700Schasinglulu /* Return the index of the record in error */ 176*91f16700Schasinglulu if (probe_data != NULL) { 177*91f16700Schasinglulu *probe_data = (int)__builtin_ctzll(gsr); 178*91f16700Schasinglulu } 179*91f16700Schasinglulu 180*91f16700Schasinglulu return 1; 181*91f16700Schasinglulu } 182*91f16700Schasinglulu 183*91f16700Schasinglulu /* 184*91f16700Schasinglulu * The handler function to read RAS records and find the safety 185*91f16700Schasinglulu * mechanism with the error. 186*91f16700Schasinglulu */ 187*91f16700Schasinglulu int gic600_fmu_ras_handler(uint64_t base, int probe_data) 188*91f16700Schasinglulu { 189*91f16700Schasinglulu uint64_t errstatus; 190*91f16700Schasinglulu unsigned int blkid = (unsigned int)probe_data, ierr, serr; 191*91f16700Schasinglulu 192*91f16700Schasinglulu assert(base != 0UL); 193*91f16700Schasinglulu 194*91f16700Schasinglulu /* 195*91f16700Schasinglulu * FMU_ERRGSR indicates the ID of the GIC 196*91f16700Schasinglulu * block that faulted. 197*91f16700Schasinglulu */ 198*91f16700Schasinglulu assert(blkid <= FMU_BLK_PPI31); 199*91f16700Schasinglulu 200*91f16700Schasinglulu /* 201*91f16700Schasinglulu * Find more information by reading FMU_ERR<M>STATUS 202*91f16700Schasinglulu * register 203*91f16700Schasinglulu */ 204*91f16700Schasinglulu errstatus = gic_fmu_read_errstatus(base, blkid); 205*91f16700Schasinglulu 206*91f16700Schasinglulu /* 207*91f16700Schasinglulu * If FMU_ERR<M>STATUS.V is set to 0, no RAS records 208*91f16700Schasinglulu * need to be scanned. 209*91f16700Schasinglulu */ 210*91f16700Schasinglulu if ((errstatus & FMU_ERRSTATUS_V_BIT) == U(0)) { 211*91f16700Schasinglulu return 0; 212*91f16700Schasinglulu } 213*91f16700Schasinglulu 214*91f16700Schasinglulu /* 215*91f16700Schasinglulu * FMU_ERR<M>STATUS.IERR indicates which Safety Mechanism 216*91f16700Schasinglulu * reported the error. 217*91f16700Schasinglulu */ 218*91f16700Schasinglulu ierr = (errstatus >> FMU_ERRSTATUS_IERR_SHIFT) & 219*91f16700Schasinglulu FMU_ERRSTATUS_IERR_MASK; 220*91f16700Schasinglulu 221*91f16700Schasinglulu /* 222*91f16700Schasinglulu * FMU_ERR<M>STATUS.SERR indicates architecturally 223*91f16700Schasinglulu * defined primary error code. 224*91f16700Schasinglulu */ 225*91f16700Schasinglulu serr = errstatus & FMU_ERRSTATUS_SERR_MASK; 226*91f16700Schasinglulu 227*91f16700Schasinglulu ERROR("**************************************\n"); 228*91f16700Schasinglulu ERROR("RAS %s Error detected by GIC600 AE FMU\n", 229*91f16700Schasinglulu ((errstatus & FMU_ERRSTATUS_UE_BIT) != 0U) ? 230*91f16700Schasinglulu "Uncorrectable" : "Corrected"); 231*91f16700Schasinglulu ERROR("\tStatus = 0x%lx \n", errstatus); 232*91f16700Schasinglulu ERROR("\tBlock ID = 0x%x\n", blkid); 233*91f16700Schasinglulu ERROR("\tSafety Mechanism ID = 0x%x (%s)\n", ierr, 234*91f16700Schasinglulu ras_ierr_to_str(blkid, ierr)); 235*91f16700Schasinglulu ERROR("\tArchitecturally defined primary error code = 0x%x\n", 236*91f16700Schasinglulu serr); 237*91f16700Schasinglulu ERROR("**************************************\n"); 238*91f16700Schasinglulu 239*91f16700Schasinglulu /* Clear FMU_ERR<M>STATUS */ 240*91f16700Schasinglulu gic_fmu_write_errstatus(base, probe_data, errstatus); 241*91f16700Schasinglulu 242*91f16700Schasinglulu return 0; 243*91f16700Schasinglulu } 244*91f16700Schasinglulu 245*91f16700Schasinglulu /* 246*91f16700Schasinglulu * Initialization sequence for the FMU 247*91f16700Schasinglulu * 248*91f16700Schasinglulu * 1. enable error detection for error records that are passed in the blk_present_mask 249*91f16700Schasinglulu * 2. enable MBIST REQ and FMU Clk Gate override safety mechanisms for error records 250*91f16700Schasinglulu * that are present on the platform 251*91f16700Schasinglulu * 252*91f16700Schasinglulu * The platforms are expected to pass `errctlr_ce_en` and `errctlr_ue_en`. 253*91f16700Schasinglulu */ 254*91f16700Schasinglulu void gic600_fmu_init(uint64_t base, uint64_t blk_present_mask, 255*91f16700Schasinglulu bool errctlr_ce_en, bool errctlr_ue_en) 256*91f16700Schasinglulu { 257*91f16700Schasinglulu unsigned int num_blk = gic_fmu_read_erridr(base) & FMU_ERRIDR_NUM_MASK; 258*91f16700Schasinglulu uint64_t errctlr; 259*91f16700Schasinglulu uint32_t smen; 260*91f16700Schasinglulu 261*91f16700Schasinglulu INFO("GIC600-AE FMU supports %d error records\n", num_blk); 262*91f16700Schasinglulu 263*91f16700Schasinglulu assert(num_blk == FMU_ERRIDR_NUM); 264*91f16700Schasinglulu 265*91f16700Schasinglulu /* sanitize block present mask */ 266*91f16700Schasinglulu blk_present_mask &= FMU_BLK_PRESENT_MASK; 267*91f16700Schasinglulu 268*91f16700Schasinglulu /* Enable error detection for all error records */ 269*91f16700Schasinglulu for (unsigned int i = 0U; i < num_blk; i++) { 270*91f16700Schasinglulu 271*91f16700Schasinglulu /* 272*91f16700Schasinglulu * Disable all safety mechanisms for blocks that are not 273*91f16700Schasinglulu * present and skip the next steps. 274*91f16700Schasinglulu */ 275*91f16700Schasinglulu if ((blk_present_mask & BIT(i)) == 0U) { 276*91f16700Schasinglulu gic_fmu_disable_all_sm_blkid(base, i); 277*91f16700Schasinglulu continue; 278*91f16700Schasinglulu } 279*91f16700Schasinglulu 280*91f16700Schasinglulu /* Read the error record control register */ 281*91f16700Schasinglulu errctlr = gic_fmu_read_errctlr(base, i); 282*91f16700Schasinglulu 283*91f16700Schasinglulu /* Enable error reporting and logging, if it is disabled */ 284*91f16700Schasinglulu if ((errctlr & FMU_ERRCTLR_ED_BIT) == 0U) { 285*91f16700Schasinglulu errctlr |= FMU_ERRCTLR_ED_BIT; 286*91f16700Schasinglulu } 287*91f16700Schasinglulu 288*91f16700Schasinglulu /* Enable client provided ERRCTLR settings */ 289*91f16700Schasinglulu errctlr |= (errctlr_ce_en ? (FMU_ERRCTLR_CI_BIT | FMU_ERRCTLR_CE_EN_BIT) : 0); 290*91f16700Schasinglulu errctlr |= (errctlr_ue_en ? FMU_ERRCTLR_UI_BIT : 0U); 291*91f16700Schasinglulu 292*91f16700Schasinglulu gic_fmu_write_errctlr(base, i, errctlr); 293*91f16700Schasinglulu } 294*91f16700Schasinglulu 295*91f16700Schasinglulu /* 296*91f16700Schasinglulu * Enable MBIST REQ error and FMU CLK gate override safety mechanisms for 297*91f16700Schasinglulu * all blocks 298*91f16700Schasinglulu * 299*91f16700Schasinglulu * GICD, SMID 23 and SMID 33 300*91f16700Schasinglulu * PPI, SMID 10 and SMID 12 301*91f16700Schasinglulu * ITS, SMID 13 and SMID 14 302*91f16700Schasinglulu */ 303*91f16700Schasinglulu if ((blk_present_mask & BIT(FMU_BLK_GICD)) != 0U) { 304*91f16700Schasinglulu smen = (GICD_MBIST_REQ_ERROR << FMU_SMEN_SMID_SHIFT) | 305*91f16700Schasinglulu (FMU_BLK_GICD << FMU_SMEN_BLK_SHIFT) | 306*91f16700Schasinglulu FMU_SMEN_EN_BIT; 307*91f16700Schasinglulu gic_fmu_write_smen(base, smen); 308*91f16700Schasinglulu 309*91f16700Schasinglulu smen = (GICD_FMU_CLKGATE_ERROR << FMU_SMEN_SMID_SHIFT) | 310*91f16700Schasinglulu (FMU_BLK_GICD << FMU_SMEN_BLK_SHIFT) | 311*91f16700Schasinglulu FMU_SMEN_EN_BIT; 312*91f16700Schasinglulu gic_fmu_write_smen(base, smen); 313*91f16700Schasinglulu } 314*91f16700Schasinglulu 315*91f16700Schasinglulu for (unsigned int i = FMU_BLK_PPI0; i < FMU_BLK_PPI31; i++) { 316*91f16700Schasinglulu if ((blk_present_mask & BIT(i)) != 0U) { 317*91f16700Schasinglulu smen = (PPI_MBIST_REQ_ERROR << FMU_SMEN_SMID_SHIFT) | 318*91f16700Schasinglulu (i << FMU_SMEN_BLK_SHIFT) | 319*91f16700Schasinglulu FMU_SMEN_EN_BIT; 320*91f16700Schasinglulu gic_fmu_write_smen(base, smen); 321*91f16700Schasinglulu 322*91f16700Schasinglulu smen = (PPI_FMU_CLKGATE_ERROR << FMU_SMEN_SMID_SHIFT) | 323*91f16700Schasinglulu (i << FMU_SMEN_BLK_SHIFT) | 324*91f16700Schasinglulu FMU_SMEN_EN_BIT; 325*91f16700Schasinglulu gic_fmu_write_smen(base, smen); 326*91f16700Schasinglulu } 327*91f16700Schasinglulu } 328*91f16700Schasinglulu 329*91f16700Schasinglulu for (unsigned int i = FMU_BLK_ITS0; i < FMU_BLK_ITS7; i++) { 330*91f16700Schasinglulu if ((blk_present_mask & BIT(i)) != 0U) { 331*91f16700Schasinglulu smen = (ITS_MBIST_REQ_ERROR << FMU_SMEN_SMID_SHIFT) | 332*91f16700Schasinglulu (i << FMU_SMEN_BLK_SHIFT) | 333*91f16700Schasinglulu FMU_SMEN_EN_BIT; 334*91f16700Schasinglulu gic_fmu_write_smen(base, smen); 335*91f16700Schasinglulu 336*91f16700Schasinglulu smen = (ITS_FMU_CLKGATE_ERROR << FMU_SMEN_SMID_SHIFT) | 337*91f16700Schasinglulu (i << FMU_SMEN_BLK_SHIFT) | 338*91f16700Schasinglulu FMU_SMEN_EN_BIT; 339*91f16700Schasinglulu gic_fmu_write_smen(base, smen); 340*91f16700Schasinglulu } 341*91f16700Schasinglulu } 342*91f16700Schasinglulu } 343*91f16700Schasinglulu 344*91f16700Schasinglulu /* 345*91f16700Schasinglulu * This function enable the GICD background ping engine. The GICD sends ping 346*91f16700Schasinglulu * messages to each remote GIC block, and expects a PING_ACK back within the 347*91f16700Schasinglulu * specified timeout. Pings need to be enabled after programming the timeout 348*91f16700Schasinglulu * value. 349*91f16700Schasinglulu */ 350*91f16700Schasinglulu void gic600_fmu_enable_ping(uint64_t base, uint64_t blk_present_mask, 351*91f16700Schasinglulu unsigned int timeout_val, unsigned int interval_diff) 352*91f16700Schasinglulu { 353*91f16700Schasinglulu /* 354*91f16700Schasinglulu * Populate the PING Mask to skip a specific block while generating 355*91f16700Schasinglulu * background ping messages and enable the ping mechanism. 356*91f16700Schasinglulu */ 357*91f16700Schasinglulu gic_fmu_write_pingmask(base, ~blk_present_mask); 358*91f16700Schasinglulu gic_fmu_write_pingctlr(base, (interval_diff << FMU_PINGCTLR_INTDIFF_SHIFT) | 359*91f16700Schasinglulu (timeout_val << FMU_PINGCTLR_TIMEOUTVAL_SHIFT) | FMU_PINGCTLR_EN_BIT); 360*91f16700Schasinglulu } 361*91f16700Schasinglulu 362*91f16700Schasinglulu /* Print the safety mechanism description for a given block */ 363*91f16700Schasinglulu void gic600_fmu_print_sm_info(uint64_t base, unsigned int blk, unsigned int smid) 364*91f16700Schasinglulu { 365*91f16700Schasinglulu if (blk == FMU_BLK_GICD && smid <= FMU_SMID_GICD_MAX) { 366*91f16700Schasinglulu INFO("GICD, SMID %d: %s\n", smid, gicd_sm_info[smid]); 367*91f16700Schasinglulu } 368*91f16700Schasinglulu 369*91f16700Schasinglulu if (blk == FMU_BLK_SPICOL && smid <= FMU_SMID_SPICOL_MAX) { 370*91f16700Schasinglulu INFO("SPI Collator, SMID %d: %s\n", smid, spicol_sm_info[smid]); 371*91f16700Schasinglulu } 372*91f16700Schasinglulu 373*91f16700Schasinglulu if (blk == FMU_BLK_WAKERQ && (smid <= FMU_SMID_WAKERQ_MAX)) { 374*91f16700Schasinglulu INFO("Wake Request, SMID %d: %s\n", smid, wkrqst_sm_info[smid]); 375*91f16700Schasinglulu } 376*91f16700Schasinglulu 377*91f16700Schasinglulu if (((blk >= FMU_BLK_ITS0) && (blk <= FMU_BLK_ITS7)) && (smid <= FMU_SMID_ITS_MAX)) { 378*91f16700Schasinglulu INFO("ITS, SMID %d: %s\n", smid, its_sm_info[smid]); 379*91f16700Schasinglulu } 380*91f16700Schasinglulu 381*91f16700Schasinglulu if (((blk >= FMU_BLK_PPI0) && (blk <= FMU_BLK_PPI31)) && (smid <= FMU_SMID_PPI_MAX)) { 382*91f16700Schasinglulu INFO("PPI, SMID %d: %s\n", smid, ppi_sm_info[smid]); 383*91f16700Schasinglulu } 384*91f16700Schasinglulu } 385