openbcm

Git mirror of https://github.com/Broadcom-Network-Switching-Software/OpenBCM
git clone git://git.finwo.net/mirror/broadcom/openbcm
Log | Files | Refs | README

reg_skip.c (205026B)


      1 /*
      2  * 
      3  * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file.
      4  * 
      5  * Copyright 2007-2019 Broadcom Inc. All rights reserved.
      6  *
      7  * Diag routines to identify registers that are only implemented
      8  * on a subset of ports/cos.
      9  */
     10 
     11 #include <appl/diag/system.h>
     12 #if defined(BCM_ESW_SUPPORT) || defined(BCM_SAND_SUPPORT)
     13 #include <soc/mcm/memregs.h>
     14 #endif
     15 #ifdef BCM_TRIDENT2_SUPPORT
     16 #include <soc/trident2.h>
     17 #endif /* BCM_TRIDENT2_SUPPORT */
     18 #ifdef BCM_TOMAHAWK_SUPPORT
     19 #include <soc/tomahawk.h>
     20 #include <shared/bsl.h>
     21 #endif /* BCM_TOMAHAWK_SUPPORT */
     22 #ifdef BCM_TOMAHAWK2_SUPPORT
     23 #include <soc/tomahawk2.h>
     24 #endif /* BCM_TOMAHAWK2_SUPPORT */
     25 #ifdef BCM_TOMAHAWK3_SUPPORT
     26 #include <soc/tomahawk3.h>
     27 #endif /* BCM_TOMAHAWK3_SUPPORT */
     28 #ifdef BCM_DFE_SUPPORT
     29 #include <soc/dfe/cmn/dfe_drv.h>
     30 #endif /*BCM_DFE_SUPPORT*/
     31 #define _MAP_REG_MASK_SUBSETS(unit, i, count, arr) \
     32     for (i = 0; i < count; i++) {\
     33         *arr[i] = SOC_REG_MASK_SUBSET(unit)[i];\
     34     }
     35 
     36 #define _INIT_REG_MASK_SUBSETS(unit, i, count, arr) \
     37     SOC_REG_MASK_SUBSET(unit) = sal_alloc(count * sizeof(pbmp_t *),\
     38                                           "per unit reg mask subsets");\
     39     if (NULL == SOC_REG_MASK_SUBSET(unit)) {\
     40         return SOC_E_MEMORY;\
     41     }\
     42     sal_memset(SOC_REG_MASK_SUBSET(unit), 0, count * sizeof(pbmp_t *));\
     43     for (i = 0; i < count; i++) {\
     44         SOC_REG_MASK_SUBSET(unit)[i] = sal_alloc(sizeof(pbmp_t),\
     45                                                  "reg mask subsets");\
     46         if (NULL == SOC_REG_MASK_SUBSET(unit)[i]) {\
     47             return SOC_E_MEMORY;\
     48         }\
     49         *mask_map_arr[i] = SOC_REG_MASK_SUBSET(unit)[i];\
     50     }
     51 
     52 #define CHECK_FEATURE_BLK(feat, blk) \
     53     (SOC_REG_BLOCK_IS(unit, ainfo->reg, blk) && \
     54     (!soc_feature(unit, feat)))
     55 
     56 /*
     57  * Description:
     58  *  There are many per-port registers in Triumph which only exist on
     59  *  a subset of ports as described by PORTLIST and PERPORT_MASKBITS
     60  *  attributes in the regsfile. There are also several indexed registers
     61  *  with different number of elements depending on the port as described
     62  *  by the NUMELS_PERPORT attribute. These routines identify whether
     63  *  a register should be skipped for a given port/cos index. These routines 
     64  *  also adjust the mask for these special registers so unimplemented
     65  *  bits get skipped during register tests. 
     66  */
     67 
     68 
     69 
     70 #ifdef BCM_TRIUMPH_SUPPORT
     71 STATIC int
     72 reg_mask_subset_tr(int unit, soc_regaddrinfo_t *ainfo, uint64 *mask)
     73 {
     74     pbmp_t *tr_8pg_ports;
     75     pbmp_t *tr_higig_ports;
     76     pbmp_t *tr_24q_ports;
     77     pbmp_t *tr_non_cpu_ports;
     78     pbmp_t *tr_all_ports;
     79 #define _REG_MASK_SUBSET_MAX_TR 5
     80     pbmp_t **mask_map_arr[_REG_MASK_SUBSET_MAX_TR];
     81     int i, count = _REG_MASK_SUBSET_MAX_TR;
     82     uint64 temp_mask;
     83     pbmp_t *pbmp;
     84 
     85     mask_map_arr[0] = &tr_8pg_ports;
     86     mask_map_arr[1] = &tr_higig_ports;
     87     mask_map_arr[2] = &tr_24q_ports;
     88     mask_map_arr[3] = &tr_non_cpu_ports;
     89     mask_map_arr[4] = &tr_all_ports;
     90     if (NULL == SOC_REG_MASK_SUBSET(unit)) {
     91         _INIT_REG_MASK_SUBSETS(unit, i, count, mask_map_arr);
     92         
     93         /* 8PG_PORTS = [2,14,26..31] */
     94         SOC_PBMP_CLEAR(*tr_8pg_ports);
     95         if (IS_XE_PORT(unit, 2) || IS_HG_PORT(unit, 2)) {
     96             SOC_PBMP_PORT_ADD(*tr_8pg_ports, 2);
     97         }
     98         if (IS_XE_PORT(unit, 14) || IS_HG_PORT(unit, 14)) {
     99             SOC_PBMP_PORT_ADD(*tr_8pg_ports, 14);
    100         }
    101         if (IS_XE_PORT(unit, 26) || IS_HG_PORT(unit, 26)) {
    102             SOC_PBMP_PORT_ADD(*tr_8pg_ports, 26);
    103         }
    104         if (IS_XE_PORT(unit, 27) || IS_HG_PORT(unit, 27)) {
    105             SOC_PBMP_PORT_ADD(*tr_8pg_ports, 27);
    106         }
    107         SOC_PBMP_PORT_ADD(*tr_8pg_ports, 28);
    108         SOC_PBMP_PORT_ADD(*tr_8pg_ports, 29);
    109         SOC_PBMP_PORT_ADD(*tr_8pg_ports, 30); 
    110         SOC_PBMP_PORT_ADD(*tr_8pg_ports, 31);
    111 
    112         /* Higig ports [0,2,14,26,27,28,29,30,31] */
    113         SOC_PBMP_CLEAR(*tr_higig_ports);
    114         SOC_PBMP_PORT_ADD(*tr_higig_ports, 0);
    115         SOC_PBMP_PORT_ADD(*tr_higig_ports, 2);
    116         SOC_PBMP_PORT_ADD(*tr_higig_ports, 14);
    117         SOC_PBMP_PORT_ADD(*tr_higig_ports, 26);
    118         SOC_PBMP_PORT_ADD(*tr_higig_ports, 27);
    119         SOC_PBMP_PORT_ADD(*tr_higig_ports, 28);
    120         SOC_PBMP_PORT_ADD(*tr_higig_ports, 29);
    121         SOC_PBMP_PORT_ADD(*tr_higig_ports, 30);
    122         SOC_PBMP_PORT_ADD(*tr_higig_ports, 31);
    123 
    124         /*  24Q_PORTS = [2,3,14,15,26..32,43] */
    125         SOC_PBMP_CLEAR(*tr_24q_ports);
    126         SOC_PBMP_PORT_ADD(*tr_24q_ports, 2);
    127         SOC_PBMP_PORT_ADD(*tr_24q_ports, 3);
    128         SOC_PBMP_PORT_ADD(*tr_24q_ports, 14);
    129         SOC_PBMP_PORT_ADD(*tr_24q_ports, 15);
    130         SOC_PBMP_PORT_ADD(*tr_24q_ports, 26);
    131         SOC_PBMP_PORT_ADD(*tr_24q_ports, 27);
    132         SOC_PBMP_PORT_ADD(*tr_24q_ports, 28);
    133         SOC_PBMP_PORT_ADD(*tr_24q_ports, 29);
    134         SOC_PBMP_PORT_ADD(*tr_24q_ports, 30);
    135         SOC_PBMP_PORT_ADD(*tr_24q_ports, 31);
    136         SOC_PBMP_PORT_ADD(*tr_24q_ports, 32);
    137         SOC_PBMP_PORT_ADD(*tr_24q_ports, 43);
    138 
    139         /* all port except CMIC */
    140         SOC_PBMP_CLEAR(*tr_non_cpu_ports);
    141         SOC_PBMP_ASSIGN(*tr_non_cpu_ports, PBMP_ALL(unit));
    142         SOC_PBMP_PORT_REMOVE(*tr_non_cpu_ports, 0);
    143  
    144         /* All ports */
    145         SOC_PBMP_CLEAR(*tr_all_ports); 
    146         SOC_PBMP_ASSIGN(*tr_all_ports, PBMP_ALL(unit)); 
    147     }
    148     if (!SOC_PORT_VALID(unit, ainfo->port)) {
    149         return 0;
    150     }
    151     _MAP_REG_MASK_SUBSETS(unit, i, count, mask_map_arr);
    152  
    153     switch(ainfo->reg) {
    154         case MAC_CTRLr:
    155         case MAC_XGXS_CTRLr:
    156         case MAC_XGXS_STATr:
    157         case MAC_TXMUXCTRLr:
    158         case MAC_CNTMAXSZr:
    159         case MAC_CORESPARE0r:
    160         case MAC_TXCTRLr:
    161         case MAC_TXMACSAr:
    162         case MAC_TXMAXSZr:
    163         case MAC_TXPSETHRr:
    164         case MAC_TXSPARE0r:
    165         case ITPOKr:
    166         case ITXPFr: 
    167         case ITFCSr:
    168         case ITUCr:
    169         case ITMCAr:
    170         case ITBCAr:
    171         case ITOVRr:
    172         case ITFRGr:
    173         case ITPKTr:
    174         case IT64r:
    175         case IT127r:
    176         case IT255r:
    177         case IT511r:
    178         case IT1023r:
    179         case IT1518r:
    180         case IT2047r:
    181         case IT4095r:
    182         case IT9216r:
    183         case IT16383r:
    184         case ITMAXr:
    185         case ITUFLr:
    186         case ITERRr:
    187         case ITBYTr:
    188         case MAC_RXCTRLr:
    189         case MAC_RXMACSAr:
    190         case MAC_RXMAXSZr:
    191         case MAC_RXLSSCTRLr:
    192         case MAC_RXLSSSTATr:
    193         case MAC_RXSPARE0r:
    194         case IR64r:
    195         case IR127r:
    196         case IR255r:
    197         case IR511r:
    198         case IR1023r:
    199         case IR1518r:
    200         case IR2047r:
    201         case IR4095r:
    202         case IR9216r:
    203         case IR16383r:
    204         case IRMAXr:
    205         case IRPKTr:
    206         case IRFCSr:
    207         case IRUCr:
    208         case IRMCAr:
    209         case IRBCAr:
    210         case IRXCFr:
    211         case IRXPFr:
    212         case IRXUOr:
    213         case IRJBRr:
    214         case IROVRr:
    215         case IRFLRr:
    216         case IRPOKr:
    217         case IRMEGr:
    218         case IRMEBr:
    219         case IRBYTr:
    220         case IRUNDr:
    221         case IRFRGr:
    222         case IRERBYTr:
    223         case IRERPKTr:
    224         case IRJUNKr:
    225         case MAC_TXLLFCCTRLr:
    226         case MAC_TXLLFCMSGFLDSr:
    227         case MAC_RXLLFCMSGFLDSr:
    228         case MAC_RXLLFCMSGCNTr:
    229             if (IS_GE_PORT(unit, ainfo->port)) {
    230                 goto skip;
    231             }
    232             break;
    233         default:
    234             break;
    235     }
    236 
    237     switch(ainfo->reg) {
    238         case IE2E_CONTROLr:
    239         case ING_MODMAP_CTRLr:
    240         case IHG_LOOKUPr:
    241         case ICONTROL_OPCODE_BITMAPr:
    242         case UNKNOWN_HGI_BITMAPr:
    243         case IUNHGIr:
    244         case ICTRLr:
    245         case IBCASTr:
    246         case ILTOMCr:
    247         case IIPMCr:
    248         case IUNKOPCr:
    249             pbmp = tr_higig_ports;
    250             break;
    251         case PG_THRESH_SELr:
    252         case PORT_PRI_GRP0r:
    253         case PORT_PRI_GRP1r:
    254         case PORT_PRI_XON_ENABLEr:
    255             pbmp = tr_8pg_ports;
    256             break;
    257         case ECN_CONFIGr:
    258         case HOL_STAT_PORTr:
    259         case PORT_WREDPARAM_CELLr:
    260         case PORT_WREDPARAM_YELLOW_CELLr:
    261         case PORT_WREDPARAM_RED_CELLr:
    262         case PORT_WREDPARAM_NONTCP_CELLr:
    263         case PORT_WREDCONFIG_CELLr:
    264         case PORT_WREDAVGQSIZE_CELLr:
    265         case PORT_WREDPARAM_PACKETr:
    266         case PORT_WREDPARAM_YELLOW_PACKETr:
    267         case PORT_WREDPARAM_RED_PACKETr:
    268         case PORT_WREDPARAM_NONTCP_PACKETr:
    269         case PORT_WREDCONFIG_PACKETr:
    270         case PORT_WREDAVGQSIZE_PACKETr:
    271         case ESCONFIGr:
    272         case COSMASKr:
    273         case MINSPCONFIGr:
    274             pbmp = tr_non_cpu_ports;
    275             break;
    276         /* ING_PORTS_24Q */
    277         case ING_COS_MODEr:
    278         /* MMU_24Q_PORTS */
    279         case COS_MODEr:
    280         case S1V_CONFIGr:
    281         case S1V_COSWEIGHTSr:
    282         case S1V_COSMASKr:
    283         case S1V_MINSPCONFIGr:
    284         case S1V_WDRRCOUNTr:
    285             pbmp = tr_24q_ports;
    286             break;
    287         /* MMU_PERPORTPERCOS_REGS */
    288         case OP_QUEUE_CONFIG_CELLr:
    289         case OP_QUEUE_CONFIG1_CELLr:
    290         case OP_QUEUE_CONFIG_PACKETr:
    291         case OP_QUEUE_CONFIG1_PACKETr:
    292         case OP_QUEUE_LIMIT_YELLOW_CELLr:
    293         case OP_QUEUE_LIMIT_YELLOW_PACKETr:
    294         case OP_QUEUE_LIMIT_RED_CELLr:
    295         case OP_QUEUE_LIMIT_RED_PACKETr:
    296         case OP_QUEUE_RESET_OFFSET_CELLr:
    297         case OP_QUEUE_RESET_OFFSET_PACKETr:
    298         case OP_QUEUE_MIN_COUNT_CELLr:
    299         case OP_QUEUE_MIN_COUNT_PACKETr:
    300         case OP_QUEUE_SHARED_COUNT_CELLr:
    301         case OP_QUEUE_SHARED_COUNT_PACKETr:
    302         case OP_QUEUE_TOTAL_COUNT_CELLr:
    303         case OP_QUEUE_TOTAL_COUNT_PACKETr:
    304         case OP_QUEUE_RESET_VALUE_CELLr:
    305         case OP_QUEUE_RESET_VALUE_PACKETr:
    306         case DROP_PKT_CNTr:
    307         case DROP_BYTE_CNTr:
    308             if (ainfo->port == 0) {
    309                 return 0;
    310             } else if (ainfo->idx < 8) {
    311                 pbmp = tr_all_ports;
    312             } else if (ainfo->idx < 24) {
    313                 pbmp = tr_24q_ports;
    314             } else {
    315                 goto skip;
    316             }
    317             break;
    318         /* MMU_PERPORTPERCOS_NOCPU_REGS */
    319         case WREDPARAM_CELLr:
    320         case WREDPARAM_YELLOW_CELLr:
    321         case WREDPARAM_RED_CELLr:
    322         case WREDPARAM_NONTCP_CELLr:
    323         case WREDCONFIG_CELLr:
    324         case WREDAVGQSIZE_CELLr:
    325         case WREDPARAM_PACKETr:
    326         case WREDPARAM_YELLOW_PACKETr:
    327         case WREDPARAM_RED_PACKETr:
    328         case WREDPARAM_NONTCP_PACKETr:
    329         case WREDCONFIG_PACKETr:
    330         case WREDAVGQSIZE_PACKETr:
    331         /* MMU_MTRO_REGS */
    332         case MINBUCKETCONFIG_64r:
    333         case MINBUCKETr:
    334         case MAXBUCKETCONFIG_64r:
    335         case MAXBUCKETr:
    336         /* MMU_ES_REGS */
    337         case COSWEIGHTSr:
    338         case WDRRCOUNTr:
    339             if (ainfo->port == 0) {
    340                 goto skip;
    341             } else if (ainfo->idx < 8) {
    342                 pbmp = tr_all_ports;
    343             } else {
    344                 pbmp = tr_24q_ports;
    345             }
    346             break;
    347         /* MMU_PERPORTPERPRI_REGS */
    348         case PG_RESET_OFFSET_CELLr:
    349         case PG_RESET_OFFSET_PACKETr:
    350         case PG_RESET_FLOOR_CELLr:
    351         case PG_MIN_CELLr:
    352         case PG_MIN_PACKETr:
    353         case PG_HDRM_LIMIT_CELLr:
    354         case PG_HDRM_LIMIT_PACKETr:
    355         case PG_COUNT_CELLr:
    356         case PG_COUNT_PACKETr:
    357         case PG_MIN_COUNT_CELLr:
    358         case PG_MIN_COUNT_PACKETr:
    359         case PG_PORT_MIN_COUNT_CELLr:
    360         case PG_PORT_MIN_COUNT_PACKETr:
    361         case PG_SHARED_COUNT_CELLr:
    362         case PG_SHARED_COUNT_PACKETr:
    363         case PG_HDRM_COUNT_CELLr:
    364         case PG_HDRM_COUNT_PACKETr:
    365         case PG_GBL_HDRM_COUNTr:
    366         case PG_RESET_VALUE_CELLr:
    367         case PG_RESET_VALUE_PACKETr:
    368             if (ainfo->idx == 0) {
    369                 pbmp = tr_all_ports;
    370             } else {
    371                 pbmp = tr_8pg_ports;
    372             }
    373             break;
    374         default:
    375             pbmp = tr_all_ports;
    376             break; 
    377     }
    378 
    379     if (!SOC_PBMP_MEMBER(*pbmp, ainfo->port)) {
    380         goto skip; 
    381     }
    382 
    383     if (mask != NULL) {
    384         switch(ainfo->reg) {
    385             case HOL_STAT_PORTr:
    386             case ECN_CONFIGr:
    387                 if (!SOC_PBMP_MEMBER(*tr_24q_ports, ainfo->port)) {
    388                     /* adjust mask for ports without 24 queues */
    389                     COMPILER_64_SET(temp_mask, 0, 0x000000ff);
    390                     COMPILER_64_AND(*mask, temp_mask);
    391                 }
    392                 break;
    393             case TOQ_QUEUESTAT_64r:
    394             case TOQ_ACTIVATEQ_64r:
    395             case TOQEMPTY_64r:
    396             case DEQ_AGINGMASK_64r:
    397                 if (SOC_PBMP_MEMBER(*tr_24q_ports, ainfo->port)) {
    398                     /* adjust mask for ports with 24 queues */
    399                     COMPILER_64_SET(temp_mask, 0, 0x00ffffff);
    400                     COMPILER_64_AND(*mask, temp_mask);
    401                 } else if (ainfo->port != 0) {
    402                     /* remaining ports only have 8 queues */
    403                     COMPILER_64_SET(temp_mask, 0, 0x000000ff);
    404                     COMPILER_64_AND(*mask, temp_mask);
    405                 }
    406                 break;
    407         }
    408     }
    409     return 0; 
    410 skip:
    411     /* set mask to all 0's so test will skip it */
    412     if (mask != NULL) {
    413         COMPILER_64_SET(*mask, 0, 0);
    414     }
    415     return 1;
    416 }
    417 #endif /* BCM_TRIUMPH_SUPPORT */
    418 
    419 #ifdef BCM_SHADOW_SUPPORT
    420 STATIC int
    421 reg_mask_subset_sh(int unit, soc_regaddrinfo_t *ainfo, uint64 *mask)
    422 {
    423     pbmp_t *sh_non_cpu_ports;
    424     pbmp_t *sh_non_il_non_cpu_ports;
    425     pbmp_t *sh_port_link_ports;
    426     pbmp_t *sh_il_ports;
    427     pbmp_t *sh_all_ports;
    428 #define _REG_MASK_SUBSET_MAX_SH 5
    429     pbmp_t **mask_map_arr[_REG_MASK_SUBSET_MAX_SH];
    430     int i, count = _REG_MASK_SUBSET_MAX_SH;
    431     pbmp_t *pbmp;
    432 
    433     mask_map_arr[0] = &sh_non_cpu_ports;
    434     mask_map_arr[1] = &sh_non_il_non_cpu_ports;
    435     mask_map_arr[2] = &sh_port_link_ports;
    436     mask_map_arr[3] = &sh_il_ports;
    437     mask_map_arr[4] = &sh_all_ports;
    438     if (NULL == SOC_REG_MASK_SUBSET(unit)) {
    439         _INIT_REG_MASK_SUBSETS(unit, i, count, mask_map_arr);
    440         
    441         /* all port except CMIC */
    442         SOC_PBMP_CLEAR(*sh_non_cpu_ports);
    443         SOC_PBMP_ASSIGN(*sh_non_cpu_ports, PBMP_ALL(unit));
    444         SOC_PBMP_PORT_REMOVE(*sh_non_cpu_ports, 0);
    445 
    446         /* All ports except Interlaken and CPU */
    447         SOC_PBMP_CLEAR(*sh_non_il_non_cpu_ports);
    448         SOC_PBMP_ASSIGN(*sh_non_il_non_cpu_ports, PBMP_PORT_ALL(unit));
    449         SOC_PBMP_REMOVE(*sh_non_il_non_cpu_ports, PBMP_IL_ALL(unit));
    450 
    451         /* All port link ports */
    452         SOC_PBMP_CLEAR(*sh_port_link_ports);
    453         SOC_PBMP_ASSIGN(*sh_port_link_ports, PBMP_ALL(unit));
    454         SOC_PBMP_PORT_REMOVE(*sh_port_link_ports, 0);
    455         SOC_PBMP_WORD_SET(*sh_port_link_ports, 0, 
    456                           (SOC_PBMP_WORD_GET(*sh_port_link_ports, 0) & 0x1ff));
    457 
    458         /* All Interlaken ports */
    459         SOC_PBMP_CLEAR(*sh_il_ports);
    460         SOC_PBMP_ASSIGN(*sh_il_ports, PBMP_PORT_ALL(unit));
    461         SOC_PBMP_REMOVE(*sh_il_ports, *sh_port_link_ports);
    462 
    463         /* All ports */
    464         SOC_PBMP_CLEAR(*sh_all_ports);
    465         SOC_PBMP_ASSIGN(*sh_all_ports, PBMP_ALL(unit));
    466     }
    467     if (!SOC_PORT_VALID(unit, ainfo->port)) {
    468         return 0;
    469     }
    470     _MAP_REG_MASK_SUBSETS(unit, i, count, mask_map_arr);
    471 
    472     switch(ainfo->reg) {
    473         case BUCKET_ECCr:
    474         case CONFIG_ECCr:
    475         case HOL_STAT_PORTr:
    476         case TOQ_QUEUESTATr:
    477         case TOQ_ACTIVATEQr:
    478         case TOQEMPTYr:
    479         case ECN_CONFIGr:
    480         case ES_PORTGRP_WDRR_WEIGHTSr:
    481         case MTRO_SHAPE_MINMASKr:
    482         case MMU_TO_XLP_BKP_STATUSr:
    483         case XLP_TO_MMU_BKP_STATUSr:
    484         case PORT_WREDPARAM_CELLr:
    485         case PORT_WREDPARAM_YELLOW_CELLr:
    486         case PORT_WREDPARAM_RED_CELLr:
    487         case PORT_WREDPARAM_NONTCP_CELLr:
    488         case PORT_WREDCONFIG_CELLr:
    489         case PORT_WREDAVGQSIZE_CELLr:
    490         case PORT_LB_WREDAVGQSIZE_CELLr:
    491         case PORT_WREDCONFIG_ECCPr:
    492         case PORT_WREDPARAM_END_CELLr:
    493         case PORT_WREDPARAM_PRI0_END_CELLr:
    494         case PORT_WREDPARAM_PRI0_START_CELLr:
    495         case PORT_WREDPARAM_RED_END_CELLr:
    496         case PORT_WREDPARAM_RED_START_CELLr:
    497         case PORT_WREDPARAM_START_CELLr:
    498         case PORT_WREDPARAM_YELLOW_END_CELLr:
    499         case PORT_WREDPARAM_YELLOW_START_CELLr:
    500         case PORT_WRED_THD_0_ECCPr:
    501         case PORT_WRED_THD_1_ECCPr:
    502         case WREDPARAM_CELLr:
    503         case WREDPARAM_YELLOW_CELLr:
    504         case WREDPARAM_RED_CELLr:
    505         case WREDPARAM_NONTCP_CELLr:
    506         case WREDCONFIG_CELLr:
    507         case WREDAVGQSIZE_CELLr:
    508         case WREDPARAM_END_CELLr:
    509         case WREDPARAM_PRI0_END_CELLr:
    510         case WREDPARAM_PRI0_START_CELLr:
    511         case WREDPARAM_RED_END_CELLr:
    512         case WREDPARAM_RED_START_CELLr:
    513         case WREDPARAM_START_CELLr:
    514         case WREDPARAM_YELLOW_END_CELLr:
    515         case WREDPARAM_YELLOW_START_CELLr:
    516         case WREDCONFIG_ECCPr:
    517         case WRED_DEBUG_ENQ_DROP_PORTr:
    518         case WRED_THD_0_ECCPr:
    519         case WRED_THD_1_ECCPr:
    520         case COSWEIGHTSr:
    521         case MINSPCONFIGr:
    522         case WDRRCOUNTr:
    523         case MINBUCKETCONFIGr:
    524         case MINBUCKETCONFIG1r:
    525         case MINBUCKETr:
    526         case MAXBUCKETCONFIGr:
    527         case MAXBUCKETCONFIG1r:
    528         case MAXBUCKETr:
    529         case MMU_TO_XPORT_BKPr:
    530         case DEQ_AGINGMASKr:
    531         case MMU_LLFC_RX_CONFIGr:
    532         case XPORT_TO_MMU_BKPr:
    533         case UNIMAC_PFC_CTRLr:
    534         case MAC_PFC_REFRESH_CTRLr:
    535         case MAC_PFC_TYPEr:
    536         case MAC_PFC_OPCODEr:
    537         case MAC_PFC_DA_0r:
    538         case MAC_PFC_DA_1r:
    539         case MACSEC_PROG_TX_CRCr:
    540         case MACSEC_CNTRLr:
    541         case TS_STATUS_CNTRLr:
    542         case TX_TS_DATAr:
    543         case BMAC_PFC_CTRLr:
    544         case BMAC_PFC_TYPEr:
    545         case BMAC_PFC_OPCODEr:
    546         case BMAC_PFC_DA_LOr:
    547         case BMAC_PFC_DA_HIr:
    548         case BMAC_PFC_COS0_XOFF_CNTr:
    549         case BMAC_PFC_COS1_XOFF_CNTr:
    550         case BMAC_PFC_COS2_XOFF_CNTr:
    551         case BMAC_PFC_COS3_XOFF_CNTr:
    552         case BMAC_PFC_COS4_XOFF_CNTr:
    553         case BMAC_PFC_COS5_XOFF_CNTr:
    554         case BMAC_PFC_COS6_XOFF_CNTr:
    555         case BMAC_PFC_COS7_XOFF_CNTr:
    556         case BMAC_PFC_COS8_XOFF_CNTr:
    557         case BMAC_PFC_COS9_XOFF_CNTr:
    558         case BMAC_PFC_COS10_XOFF_CNTr:
    559         case BMAC_PFC_COS11_XOFF_CNTr:
    560         case BMAC_PFC_COS12_XOFF_CNTr:
    561         case BMAC_PFC_COS13_XOFF_CNTr:
    562         case BMAC_PFC_COS14_XOFF_CNTr:
    563         case BMAC_PFC_COS15_XOFF_CNTr:
    564         case PFC_COS0_XOFF_CNTr:
    565         case PFC_COS1_XOFF_CNTr:
    566         case PFC_COS2_XOFF_CNTr:
    567         case PFC_COS3_XOFF_CNTr:
    568         case PFC_COS4_XOFF_CNTr:
    569         case PFC_COS5_XOFF_CNTr:
    570         case PFC_COS6_XOFF_CNTr:
    571         case PFC_COS7_XOFF_CNTr:
    572         case PFC_COS8_XOFF_CNTr:
    573         case PFC_COS9_XOFF_CNTr:
    574         case PFC_COS10_XOFF_CNTr:
    575         case PFC_COS11_XOFF_CNTr:
    576         case PFC_COS12_XOFF_CNTr:
    577         case PFC_COS13_XOFF_CNTr:
    578         case PFC_COS14_XOFF_CNTr:
    579         case PFC_COS15_XOFF_CNTr:
    580             pbmp = sh_non_cpu_ports;
    581             break;
    582         default:
    583             pbmp = sh_all_ports;
    584             break;
    585     }
    586 
    587     switch(ainfo->reg) {
    588         /* EP_PERPORTPERCOS_REGS */
    589         case EGR_PERQ_XMT_COUNTERSr:
    590         /* MMU_PERPORTPERCOS_REGS */
    591         case OP_QUEUE_CONFIGr:
    592         case OP_QUEUE_RESET_OFFSETr:
    593         case OP_QUEUE_MIN_COUNTr:
    594         case OP_QUEUE_SHARED_COUNTr:
    595         case OP_QUEUE_TOTAL_COUNTr:
    596         case OP_QUEUE_RESET_VALUEr:
    597         case OP_QUEUE_LIMIT_YELLOWr:
    598         case OP_QUEUE_LIMIT_REDr:
    599         case HOLDROP_PKT_CNTr:
    600             if (ainfo->port == 0) {
    601                 return 0;
    602             } else if (ainfo->idx < 10) { 
    603                 pbmp = sh_all_ports;
    604             } else {
    605                 goto skip;
    606             }
    607             break;
    608         default:
    609             break;
    610     }
    611 
    612     if (SOC_REG_BLOCK_IS(unit, ainfo->reg, SOC_BLK_XLPORT)) {
    613         pbmp = sh_non_il_non_cpu_ports;
    614     } else if ((SOC_REG_BLOCK_IS(unit, ainfo->reg, SOC_BLK_MS_ISEC)) ||
    615                (SOC_REG_BLOCK_IS(unit, ainfo->reg, SOC_BLK_MS_ESEC))) { 
    616         pbmp = sh_port_link_ports;
    617     } else if (SOC_REG_BLOCK_IS(unit, ainfo->reg, SOC_BLK_IL)) {
    618         pbmp = sh_il_ports;
    619     }
    620 
    621     if (!SOC_PBMP_MEMBER(*pbmp, ainfo->port)) {
    622         goto skip;
    623     }
    624     return 0;
    625 
    626 skip:
    627     /* set mask to all 0's so test will skip it */
    628     if (mask != NULL) {
    629         COMPILER_64_SET(*mask, 0, 0);
    630     }
    631     return 1;
    632 }
    633 #endif /* BCM_SHADOW_SUPPORT */
    634 
    635 #ifdef BCM_SCORPION_SUPPORT
    636 STATIC int
    637 reg_mask_subset_sc(int unit, soc_regaddrinfo_t *ainfo, uint64 *mask)
    638 {
    639     pbmp_t *sc_no_ports;
    640     pbmp_t *sc_xports;
    641     pbmp_t *sc_non_cpu_ports;
    642     pbmp_t *sc_all_ports;
    643 #define _REG_MASK_SUBSET_MAX_SC 4
    644     pbmp_t **mask_map_arr[_REG_MASK_SUBSET_MAX_SC];
    645     int i, count = _REG_MASK_SUBSET_MAX_SC;
    646     pbmp_t *pbmp;
    647 
    648     mask_map_arr[0] = &sc_no_ports;
    649     mask_map_arr[1] = &sc_xports;
    650     mask_map_arr[2] = &sc_non_cpu_ports;
    651     mask_map_arr[3] = &sc_all_ports;
    652     if (NULL == SOC_REG_MASK_SUBSET(unit)) {
    653         _INIT_REG_MASK_SUBSETS(unit, i, count, mask_map_arr);
    654         
    655         /* all port except CMIC */
    656         SOC_PBMP_CLEAR(*sc_non_cpu_ports);
    657         SOC_PBMP_ASSIGN(*sc_non_cpu_ports, PBMP_ALL(unit));
    658         SOC_PBMP_PORT_REMOVE(*sc_non_cpu_ports, 0);
    659 
    660         SOC_PBMP_CLEAR(*sc_xports);
    661         SOC_PBMP_ASSIGN(*sc_xports, PBMP_GX_ALL(unit));
    662         SOC_PBMP_PORT_REMOVE(*sc_xports, 0);
    663 
    664         /* All ports */
    665         SOC_PBMP_CLEAR(*sc_all_ports);
    666         SOC_PBMP_ASSIGN(*sc_all_ports, PBMP_ALL(unit));
    667 
    668         /* No ports */
    669         SOC_PBMP_CLEAR(*sc_no_ports);
    670     }
    671     if (!SOC_PORT_VALID(unit, ainfo->port)) {
    672         return 0;
    673     }
    674     _MAP_REG_MASK_SUBSETS(unit, i, count, mask_map_arr);
    675 
    676     switch(ainfo->reg) {
    677         case HOL_STAT_PORTr:
    678         case TOQ_QUEUESTATr:
    679         case TOQ_ACTIVATEQr:
    680         case TOQEMPTYr:
    681         case ECN_CONFIGr:
    682         case PORT_WREDPARAM_CELLr:
    683         case PORT_WREDPARAM_YELLOW_CELLr:
    684         case PORT_WREDPARAM_RED_CELLr:
    685         case PORT_WREDPARAM_NONTCP_CELLr:
    686         case PORT_WREDCONFIG_CELLr:
    687         case PORT_WREDAVGQSIZE_CELLr:
    688         case WREDPARAM_CELLr:
    689         case WREDPARAM_YELLOW_CELLr:
    690         case WREDPARAM_RED_CELLr:
    691         case WREDPARAM_NONTCP_CELLr:
    692         case WREDCONFIG_CELLr:
    693         case WREDAVGQSIZE_CELLr:
    694         case COSWEIGHTSr:
    695         case MINSPCONFIGr:
    696         case WDRRCOUNTr:
    697         case MINBUCKETCONFIGr:
    698         case MINBUCKETCONFIG1r:
    699         case MINBUCKETr:
    700         case MAXBUCKETCONFIGr:
    701         case MAXBUCKETCONFIG1r:
    702         case MAXBUCKETr:
    703         case MMU_TO_XPORT_BKPr:
    704         case DEQ_AGINGMASKr:
    705             pbmp = sc_non_cpu_ports;
    706             break;
    707         case MMU_LLFC_RX_CONFIGr:
    708         case XPORT_TO_MMU_BKPr:
    709             pbmp = sc_xports;
    710             break;
    711         case UNIMAC_PFC_CTRLr:
    712         case MAC_PFC_REFRESH_CTRLr:
    713         case MAC_PFC_TYPEr:
    714         case MAC_PFC_OPCODEr:
    715         case MAC_PFC_DA_0r:
    716         case MAC_PFC_DA_1r:
    717         case MACSEC_PROG_TX_CRCr:
    718         case MACSEC_CNTRLr:
    719         case TS_STATUS_CNTRLr:
    720         case TX_TS_DATAr:
    721             if (soc_feature(unit, soc_feature_priority_flow_control)) {
    722                 pbmp = sc_non_cpu_ports;
    723             } else {
    724                 pbmp = sc_no_ports;
    725             }
    726             break;
    727         case BMAC_PFC_CTRLr:
    728         case BMAC_PFC_TYPEr:
    729         case BMAC_PFC_OPCODEr:
    730         case BMAC_PFC_DA_LOr:
    731         case BMAC_PFC_DA_HIr:
    732         case BMAC_PFC_COS0_XOFF_CNTr:
    733         case BMAC_PFC_COS1_XOFF_CNTr:
    734         case BMAC_PFC_COS2_XOFF_CNTr:
    735         case BMAC_PFC_COS3_XOFF_CNTr:
    736         case BMAC_PFC_COS4_XOFF_CNTr:
    737         case BMAC_PFC_COS5_XOFF_CNTr:
    738         case BMAC_PFC_COS6_XOFF_CNTr:
    739         case BMAC_PFC_COS7_XOFF_CNTr:
    740         case BMAC_PFC_COS8_XOFF_CNTr:
    741         case BMAC_PFC_COS9_XOFF_CNTr:
    742         case BMAC_PFC_COS10_XOFF_CNTr:
    743         case BMAC_PFC_COS11_XOFF_CNTr:
    744         case BMAC_PFC_COS12_XOFF_CNTr:
    745         case BMAC_PFC_COS13_XOFF_CNTr:
    746         case BMAC_PFC_COS14_XOFF_CNTr:
    747         case BMAC_PFC_COS15_XOFF_CNTr:
    748         case PFC_COS0_XOFF_CNTr:
    749         case PFC_COS1_XOFF_CNTr:
    750         case PFC_COS2_XOFF_CNTr:
    751         case PFC_COS3_XOFF_CNTr:
    752         case PFC_COS4_XOFF_CNTr:
    753         case PFC_COS5_XOFF_CNTr:
    754         case PFC_COS6_XOFF_CNTr:
    755         case PFC_COS7_XOFF_CNTr:
    756         case PFC_COS8_XOFF_CNTr:
    757         case PFC_COS9_XOFF_CNTr:
    758         case PFC_COS10_XOFF_CNTr:
    759         case PFC_COS11_XOFF_CNTr:
    760         case PFC_COS12_XOFF_CNTr:
    761         case PFC_COS13_XOFF_CNTr:
    762         case PFC_COS14_XOFF_CNTr:
    763         case PFC_COS15_XOFF_CNTr:
    764             if (soc_feature(unit, soc_feature_priority_flow_control)) {
    765                 pbmp = sc_xports;
    766             } else {
    767                 pbmp = sc_no_ports;
    768             }
    769             break;
    770         default:
    771             pbmp = sc_all_ports;
    772             break;
    773     }
    774 
    775     switch(ainfo->reg) {
    776         /* EP_PERPORTPERCOS_REGS */
    777         case EGR_PERQ_XMT_COUNTERSr:
    778         /* MMU_PERPORTPERCOS_REGS */
    779         case OP_QUEUE_CONFIGr:
    780         case OP_QUEUE_RESET_OFFSETr:
    781         case OP_QUEUE_MIN_COUNTr:
    782         case OP_QUEUE_SHARED_COUNTr:
    783         case OP_QUEUE_TOTAL_COUNTr:
    784         case OP_QUEUE_RESET_VALUEr:
    785         case OP_QUEUE_LIMIT_YELLOWr:
    786         case OP_QUEUE_LIMIT_REDr:
    787         case HOLDROP_PKT_CNTr:
    788             if (ainfo->port == 0) {
    789                 return 0;
    790             } else if (ainfo->idx < 10) { 
    791                 pbmp = sc_all_ports;
    792             } else {
    793                 goto skip;
    794             }
    795             break;
    796         default:
    797             break;
    798     }
    799     
    800     if (!SOC_PBMP_MEMBER(*pbmp, ainfo->port)) {
    801         goto skip;
    802     }
    803     return 0;
    804 
    805 skip:
    806     /* set mask to all 0's so test will skip it */
    807     if (mask != NULL) {
    808         COMPILER_64_SET(*mask, 0, 0);
    809     }
    810     return 1;
    811 }
    812 #endif /* BCM_SCORPION_SUPPORT */
    813 
    814 #ifdef BCM_TRIUMPH2_SUPPORT
    815 STATIC int
    816 reg_mask_subset_tr2(int unit, soc_regaddrinfo_t *ainfo, uint64 *mask)
    817 {
    818     pbmp_t *ch_2pg_ports;
    819     pbmp_t *ch_8pg_ports;
    820     pbmp_t *ch_24q_ports;
    821     pbmp_t *ch_24q_ports_with_cpu;
    822     pbmp_t *ch_ext_ports;
    823     pbmp_t *ch_non_cpu_ports;
    824     pbmp_t *ch_all_ports;
    825     pbmp_t *ch_lb_ports;
    826     pbmp_t *ch_all_ports_with_mmu;
    827     pbmp_t *ch_gxports;
    828     pbmp_t *ch_cmic;
    829 #define _REG_MASK_SUBSET_MAX_TR2 11
    830     pbmp_t **mask_map_arr[_REG_MASK_SUBSET_MAX_TR2];
    831     int i, count = _REG_MASK_SUBSET_MAX_TR2;
    832     uint64 temp_mask;
    833     pbmp_t *pbmp;
    834 
    835     mask_map_arr[0] = &ch_2pg_ports;
    836     mask_map_arr[1] = &ch_8pg_ports;
    837     mask_map_arr[2] = &ch_24q_ports;
    838     mask_map_arr[3] = &ch_24q_ports_with_cpu;
    839     mask_map_arr[4] = &ch_ext_ports;
    840     mask_map_arr[5] = &ch_non_cpu_ports;
    841     mask_map_arr[6] = &ch_all_ports;
    842     mask_map_arr[7] = &ch_lb_ports;
    843     mask_map_arr[8] = &ch_all_ports_with_mmu;
    844     mask_map_arr[9] = &ch_gxports;
    845     mask_map_arr[10] = &ch_cmic;
    846     if (NULL == SOC_REG_MASK_SUBSET(unit)) {
    847         _INIT_REG_MASK_SUBSETS(unit, i, count, mask_map_arr);
    848 
    849         /* 8PG_PORTS = [26..30,34,38,42,46,50,54] */
    850         SOC_PBMP_CLEAR(*ch_8pg_ports);
    851         SOC_PBMP_PORT_ADD(*ch_8pg_ports, 26);
    852         SOC_PBMP_PORT_ADD(*ch_8pg_ports, 27);
    853         SOC_PBMP_PORT_ADD(*ch_8pg_ports, 28);
    854         SOC_PBMP_PORT_ADD(*ch_8pg_ports, 29);
    855         SOC_PBMP_PORT_ADD(*ch_8pg_ports, 30); 
    856         SOC_PBMP_PORT_ADD(*ch_8pg_ports, 34);
    857         SOC_PBMP_PORT_ADD(*ch_8pg_ports, 38);
    858         SOC_PBMP_PORT_ADD(*ch_8pg_ports, 42);
    859         SOC_PBMP_PORT_ADD(*ch_8pg_ports, 46);
    860         SOC_PBMP_PORT_ADD(*ch_8pg_ports, 50);
    861         SOC_PBMP_PORT_ADD(*ch_8pg_ports, 54);
    862 
    863         /*  24Q_PORTS = [26..31,34,38,39,42,43,46,50,51,54] */
    864         SOC_PBMP_CLEAR(*ch_24q_ports);
    865         SOC_PBMP_PORT_ADD(*ch_24q_ports, 26);
    866         SOC_PBMP_PORT_ADD(*ch_24q_ports, 27);
    867         SOC_PBMP_PORT_ADD(*ch_24q_ports, 28);
    868         SOC_PBMP_PORT_ADD(*ch_24q_ports, 29);
    869         SOC_PBMP_PORT_ADD(*ch_24q_ports, 30);
    870         SOC_PBMP_PORT_ADD(*ch_24q_ports, 31);
    871         SOC_PBMP_PORT_ADD(*ch_24q_ports, 34);
    872         SOC_PBMP_PORT_ADD(*ch_24q_ports, 38);
    873         SOC_PBMP_PORT_ADD(*ch_24q_ports, 39);
    874         SOC_PBMP_PORT_ADD(*ch_24q_ports, 42);
    875         SOC_PBMP_PORT_ADD(*ch_24q_ports, 43);
    876         SOC_PBMP_PORT_ADD(*ch_24q_ports, 46);
    877         SOC_PBMP_PORT_ADD(*ch_24q_ports, 50);
    878         SOC_PBMP_PORT_ADD(*ch_24q_ports, 51);
    879         SOC_PBMP_PORT_ADD(*ch_24q_ports, 54);
    880         SOC_PBMP_ASSIGN(*ch_24q_ports_with_cpu, *ch_24q_ports);
    881         SOC_PBMP_PORT_ADD(*ch_24q_ports_with_cpu, 0);
    882 
    883         /* 2PG_PORTS = [0,1..25,31..33,35..37,39..41,43..45,47..49,51..53,55,56] */
    884         SOC_PBMP_CLEAR(*ch_2pg_ports);
    885         SOC_PBMP_ASSIGN(*ch_2pg_ports, PBMP_ALL(unit));
    886         SOC_PBMP_PORT_REMOVE(*ch_2pg_ports, 26);
    887         SOC_PBMP_PORT_REMOVE(*ch_2pg_ports, 27);
    888         SOC_PBMP_PORT_REMOVE(*ch_2pg_ports, 28);
    889         SOC_PBMP_PORT_REMOVE(*ch_2pg_ports, 29);
    890         SOC_PBMP_PORT_REMOVE(*ch_2pg_ports, 30); 
    891         SOC_PBMP_PORT_REMOVE(*ch_2pg_ports, 34);
    892         SOC_PBMP_PORT_REMOVE(*ch_2pg_ports, 38);
    893         SOC_PBMP_PORT_REMOVE(*ch_2pg_ports, 42);
    894         SOC_PBMP_PORT_REMOVE(*ch_2pg_ports, 46);
    895         SOC_PBMP_PORT_REMOVE(*ch_2pg_ports, 50);
    896         SOC_PBMP_PORT_REMOVE(*ch_2pg_ports, 54);
    897         SOC_PBMP_PORT_ADD(*ch_2pg_ports, 55);
    898         SOC_PBMP_PORT_ADD(*ch_2pg_ports, 56);
    899 
    900         /* GXPORTS = [26, 27, 28, 29] */
    901         SOC_PBMP_CLEAR(*ch_gxports);
    902         SOC_PBMP_PORT_ADD(*ch_gxports, 26);
    903         SOC_PBMP_PORT_ADD(*ch_gxports, 27);
    904         SOC_PBMP_PORT_ADD(*ch_gxports, 28);
    905         SOC_PBMP_PORT_ADD(*ch_gxports, 29);
    906        
    907         /* Loopback pbmp */
    908         SOC_PBMP_CLEAR(*ch_lb_ports);
    909         SOC_PBMP_ASSIGN(*ch_lb_ports, PBMP_LB(unit));
    910 
    911         /* All ports except CMIC */
    912         SOC_PBMP_CLEAR(*ch_non_cpu_ports);
    913         SOC_PBMP_ASSIGN(*ch_non_cpu_ports, PBMP_ALL(unit));
    914         SOC_PBMP_PORT_REMOVE(*ch_non_cpu_ports, 0);
    915 
    916         /* All ports except CMIC and loopback - external ports */
    917         SOC_PBMP_CLEAR(*ch_ext_ports);
    918         SOC_PBMP_ASSIGN(*ch_ext_ports, PBMP_ALL(unit));
    919         SOC_PBMP_PORT_REMOVE(*ch_ext_ports, 0);
    920         SOC_PBMP_PORT_REMOVE(*ch_ext_ports, 54);
    921  
    922         /* All ports (excluding the internal MMU ports) */
    923         SOC_PBMP_CLEAR(*ch_all_ports); 
    924         SOC_PBMP_ASSIGN(*ch_all_ports, PBMP_ALL(unit)); 
    925 
    926         /* All ports (including the internal MMU ports) */
    927         SOC_PBMP_CLEAR(*ch_all_ports_with_mmu); 
    928         SOC_PBMP_ASSIGN(*ch_all_ports_with_mmu, PBMP_ALL(unit)); 
    929         SOC_PBMP_PORT_ADD(*ch_all_ports_with_mmu, 55);
    930         SOC_PBMP_PORT_ADD(*ch_all_ports_with_mmu, 56);
    931 
    932         /* CPU port */
    933         SOC_PBMP_CLEAR(*ch_cmic); 
    934         SOC_PBMP_ASSIGN(*ch_cmic, PBMP_CMIC(unit));
    935     }
    936     if (!SOC_PORT_VALID(unit, ainfo->port)) {
    937         return 0;
    938     }
    939     _MAP_REG_MASK_SUBSETS(unit, i, count, mask_map_arr);
    940  
    941     switch(ainfo->reg) {
    942         case MAC_CTRLr:
    943         case MAC_XGXS_CTRLr:
    944         case MAC_XGXS_STATr:
    945         case MAC_TXMUXCTRLr:
    946         case MAC_CNTMAXSZr:
    947         case MAC_CORESPARE0r:
    948         case MAC_TXCTRLr:
    949         case MAC_TXMACSAr:
    950         case MAC_TXMAXSZr:
    951         case MAC_TXPSETHRr:
    952         case MAC_TXSPARE0r:
    953         case MAC_TXPPPCTRLr:
    954         case ITPOKr:
    955         case ITXPFr: 
    956         case ITFCSr:
    957         case ITXPPr:
    958         case ITUCr:
    959         case ITMCAr:
    960         case ITBCAr:
    961         case ITOVRr:
    962         case ITFRGr:
    963         case ITPKTr:
    964         case IT64r:
    965         case IT127r:
    966         case IT255r:
    967         case IT511r:
    968         case IT1023r:
    969         case IT1518r:
    970         case IT2047r:
    971         case IT4095r:
    972         case IT9216r:
    973         case IT16383r:
    974         case ITMAXr:
    975         case ITUFLr:
    976         case ITERRr:
    977         case ITBYTr:
    978         case MAC_RXCTRLr:
    979         case MAC_RXMACSAr:
    980         case MAC_RXMAXSZr:
    981         case MAC_RXLSSCTRLr:
    982         case MAC_RXLSSSTATr:
    983         case MAC_RXSPARE0r:
    984         case IR64r:
    985         case IR127r:
    986         case IR255r:
    987         case IR511r:
    988         case IR1023r:
    989         case IR1518r:
    990         case IR2047r:
    991         case IR4095r:
    992         case IR9216r:
    993         case IR16383r:
    994         case IRMAXr:
    995         case IRPKTr:
    996         case IRFCSr:
    997         case IRUCr:
    998         case IRMCAr:
    999         case IRBCAr:
   1000         case IRXCFr:
   1001         case IRXPFr:
   1002         case IRXPPr:
   1003         case IRXUOr:
   1004         case IRJBRr:
   1005         case IROVRr:
   1006         case IRFLRr:
   1007         case IRPOKr:
   1008         case IRMEGr:
   1009         case IRMEBr:
   1010         case IRBYTr:
   1011         case IRUNDr:
   1012         case IRFRGr:
   1013         case IRERBYTr:
   1014         case IRERPKTr:
   1015         case IRJUNKr:
   1016         case MAC_TXLLFCCTRLr:
   1017         case MAC_TXLLFCMSGFLDSr:
   1018         case MAC_RXLLFCMSGFLDSr:
   1019         case MAC_RXLLFCMSGCNTr:
   1020             if (IS_GE_PORT(unit, ainfo->port)) {
   1021                 goto skip;
   1022             }
   1023             break;
   1024         case EGR_PORT_REQUESTSr:
   1025             if (IS_LB_PORT(unit, ainfo->port)) {
   1026                 goto skip;
   1027             }
   1028             break;
   1029         case MAC_PFC_COS0_XOFF_CNTr:
   1030         case MAC_PFC_COS1_XOFF_CNTr:
   1031         case MAC_PFC_COS2_XOFF_CNTr:
   1032         case MAC_PFC_COS3_XOFF_CNTr:
   1033         case MAC_PFC_COS4_XOFF_CNTr:
   1034         case MAC_PFC_COS5_XOFF_CNTr:
   1035         case MAC_PFC_COS6_XOFF_CNTr:
   1036         case MAC_PFC_COS7_XOFF_CNTr:
   1037         case MAC_PFC_COS8_XOFF_CNTr:
   1038         case MAC_PFC_COS9_XOFF_CNTr:
   1039         case MAC_PFC_COS10_XOFF_CNTr:
   1040         case MAC_PFC_COS11_XOFF_CNTr:
   1041         case MAC_PFC_COS12_XOFF_CNTr:
   1042         case MAC_PFC_COS13_XOFF_CNTr:
   1043         case MAC_PFC_COS14_XOFF_CNTr:
   1044         case MAC_PFC_COS15_XOFF_CNTr:
   1045             /* Not implemented in HW */
   1046             goto skip;
   1047             break;
   1048         default:
   1049             break;
   1050     }
   1051 
   1052     switch(ainfo->reg) {
   1053         case PG_THRESH_SELr:
   1054         case PORT_PRI_GRP0r:
   1055         case PORT_PRI_GRP1r:
   1056         case PORT_PRI_XON_ENABLEr:
   1057             pbmp = ch_8pg_ports;
   1058             break;
   1059         case PG_THRESH_SEL2r:
   1060         case PORT_PRI_GRP2r:
   1061             pbmp = ch_2pg_ports;
   1062             break;
   1063         case ECN_CONFIGr:
   1064         case HOL_STAT_PORTr:
   1065         case PORT_WREDPARAM_CELLr:
   1066         case PORT_WREDPARAM_YELLOW_CELLr:
   1067         case PORT_WREDPARAM_RED_CELLr:
   1068         case PORT_WREDPARAM_NONTCP_CELLr:
   1069         case PORT_WREDCONFIG_CELLr:
   1070         case PORT_WREDAVGQSIZE_CELLr:
   1071         case PORT_WREDPARAM_PACKETr:
   1072         case PORT_WREDPARAM_YELLOW_PACKETr:
   1073         case PORT_WREDPARAM_RED_PACKETr:
   1074         case PORT_WREDPARAM_NONTCP_PACKETr:
   1075         case PORT_WREDCONFIG_PACKETr:
   1076         case PORT_WREDAVGQSIZE_PACKETr:
   1077         case BKPMETERINGCONFIG_64r:
   1078         case BKPMETERINGBUCKETr:
   1079         case MTRI_IFGr:
   1080             pbmp = ch_ext_ports;
   1081             break;
   1082         case COSMASKr:
   1083         case MINSPCONFIGr:
   1084             pbmp = ch_non_cpu_ports;
   1085             break;
   1086         case S1V_CONFIGr:
   1087         case S1V_COSWEIGHTSr:
   1088         case S1V_COSMASKr:
   1089         case S1V_MINSPCONFIGr:
   1090         case S1V_WDRRCOUNTr:
   1091             pbmp = ch_24q_ports;
   1092             break;
   1093         /* MMU_WLP_PERCOS_REGS */
   1094         case OP_QUEUE_FIRST_FRAGMENT_CONFIG_CELLr:
   1095         case OP_QUEUE_FIRST_FRAGMENT_RESET_OFFSET_CELLr:
   1096         case OP_QUEUE_FIRST_FRAGMENT_CONFIG_PACKETr:
   1097         case OP_QUEUE_FIRST_FRAGMENT_RESET_OFFSET_PACKETr:
   1098         case OP_QUEUE_FIRST_FRAGMENT_COUNT_CELLr:
   1099         case OP_QUEUE_FIRST_FRAGMENT_COUNT_PACKETr:
   1100         case OP_QUEUE_REDIRECT_CONFIG_CELLr:
   1101         case OP_QUEUE_REDIRECT_RESET_OFFSET_CELLr:
   1102         case OP_QUEUE_REDIRECT_CONFIG_PACKETr:
   1103         case OP_QUEUE_REDIRECT_RESET_OFFSET_PACKETr:
   1104         case OP_QUEUE_REDIRECT_COUNT_CELLr:
   1105         case OP_QUEUE_REDIRECT_COUNT_PACKETr:
   1106         case OP_QUEUE_REDIRECT_XQ_CONFIG_PACKETr:
   1107         case OP_QUEUE_REDIRECT_XQ_RESET_OFFSET_PACKETr:
   1108         case OP_QUEUE_REDIRECT_XQ_COUNT_PACKETr:
   1109         case OP_PORT_FIRST_FRAGMENT_DISC_RESUME_THD_CELLr:
   1110         case OP_PORT_FIRST_FRAGMENT_DISC_RESUME_THD_PACKETr:
   1111         case OP_PORT_FIRST_FRAGMENT_DISC_SET_THD_CELLr:
   1112         case OP_PORT_FIRST_FRAGMENT_DISC_SET_THD_PACKETr:
   1113         case OP_PORT_FIRST_FRAGMENT_COUNT_CELLr:
   1114         case OP_PORT_FIRST_FRAGMENT_COUNT_PACKETr:
   1115         case FIRST_FRAGMENT_DROP_STATE_CELLr:
   1116         case FIRST_FRAGMENT_DROP_STATE_PACKETr:
   1117         case OP_PORT_REDIRECT_COUNT_CELLr:
   1118         case OP_PORT_REDIRECT_COUNT_PACKETr:
   1119         case REDIRECT_DROP_STATE_CELLr:
   1120         case REDIRECT_DROP_STATE_PACKETr:
   1121         case REDIRECT_XQ_DROP_STATE_PACKETr: 
   1122         case OP_PORT_REDIRECT_DISC_RESUME_THD_CELLr:
   1123         case OP_PORT_REDIRECT_DISC_RESUME_THD_PACKETr:
   1124         case OP_PORT_REDIRECT_DISC_SET_THD_CELLr:
   1125         case OP_PORT_REDIRECT_DISC_SET_THD_PACKETr:
   1126         case OP_PORT_REDIRECT_XQ_DISC_RESUME_THD_PACKETr:
   1127         case OP_PORT_REDIRECT_XQ_DISC_SET_THD_PACKETr:
   1128         case OP_PORT_REDIRECT_XQ_COUNT_PACKETr:
   1129             pbmp = ch_lb_ports;
   1130             break;
   1131         case PORT_MIN_CELLr:
   1132         case PORT_MIN_PACKETr:
   1133         case PORT_SHARED_LIMIT_CELLr:
   1134         case PORT_SHARED_LIMIT_PACKETr:
   1135         case PORT_COUNT_CELLr:
   1136         case PORT_COUNT_PACKETr:
   1137         case PORT_MIN_COUNT_CELLr:
   1138         case PORT_MIN_COUNT_PACKETr:
   1139         case PORT_SHARED_COUNT_CELLr:
   1140         case PORT_SHARED_COUNT_PACKETr:
   1141             pbmp = ch_all_ports_with_mmu;
   1142             break;
   1143         default:
   1144             pbmp = ch_all_ports;
   1145             break;
   1146     }
   1147 
   1148     switch(ainfo->reg) {
   1149         /* MMU_PERPORTPERCOS_REGS */
   1150         case OP_QUEUE_CONFIG_CELLr:
   1151         case OP_QUEUE_CONFIG1_CELLr:
   1152         case OP_QUEUE_CONFIG_PACKETr:
   1153         case OP_QUEUE_CONFIG1_PACKETr:
   1154         case OP_QUEUE_LIMIT_YELLOW_CELLr:
   1155         case OP_QUEUE_LIMIT_YELLOW_PACKETr:
   1156         case OP_QUEUE_LIMIT_RED_CELLr:
   1157         case OP_QUEUE_LIMIT_RED_PACKETr:
   1158         case OP_QUEUE_RESET_OFFSET_CELLr:
   1159         case OP_QUEUE_RESET_OFFSET_PACKETr:
   1160         case OP_QUEUE_MIN_COUNT_CELLr:
   1161         case OP_QUEUE_MIN_COUNT_PACKETr:
   1162         case OP_QUEUE_SHARED_COUNT_CELLr:
   1163         case OP_QUEUE_SHARED_COUNT_PACKETr:
   1164         case OP_QUEUE_TOTAL_COUNT_CELLr:
   1165         case OP_QUEUE_TOTAL_COUNT_PACKETr:
   1166         case OP_QUEUE_RESET_VALUE_CELLr:
   1167         case OP_QUEUE_RESET_VALUE_PACKETr:
   1168         case OP_QUEUE_LIMIT_RESUME_COLOR_CELLr:
   1169         case OP_QUEUE_LIMIT_RESUME_COLOR_PACKETr:
   1170         /* MMU_PERPORTPERCOS_REGS_CTR */
   1171         case DROP_PKT_CNTr:
   1172         case DROP_BYTE_CNTr:
   1173             if (ainfo->port == 0) {
   1174                 return 0;
   1175             } else if (ainfo->idx < 8) {
   1176                 pbmp = ch_all_ports;
   1177             } else if ((ainfo->idx < 24) && (ainfo->port == 54)) {
   1178                 goto skip;
   1179             } else if ((ainfo->idx < 24)) {
   1180                 pbmp = ch_24q_ports;
   1181             } else {
   1182                 pbmp = ch_cmic;
   1183             }
   1184             break;
   1185 
   1186         /* MMU_PERPORTPERCOS_NOCPU_REGS */
   1187         case WREDPARAM_CELLr:
   1188         case WREDPARAM_YELLOW_CELLr:
   1189         case WREDPARAM_RED_CELLr:
   1190         case WREDPARAM_NONTCP_CELLr:
   1191         case WREDCONFIG_CELLr:
   1192         case WREDAVGQSIZE_CELLr:
   1193         case WREDPARAM_PACKETr:
   1194         case WREDPARAM_YELLOW_PACKETr:
   1195         case WREDPARAM_RED_PACKETr:
   1196         case WREDPARAM_NONTCP_PACKETr:
   1197         case WREDCONFIG_PACKETr:
   1198         case WREDAVGQSIZE_PACKETr:
   1199             if (ainfo->port == 0) {
   1200                 goto skip;
   1201             } else if (ainfo->idx < 8) {
   1202                 pbmp = ch_non_cpu_ports;
   1203             } else {
   1204                 pbmp = ch_24q_ports;
   1205             }
   1206             break;
   1207 
   1208         /* MMU_MTRO_REGS */
   1209         case MINBUCKETCONFIG_64r:
   1210         case MINBUCKETr:
   1211         case MAXBUCKETCONFIG_64r:
   1212         case MAXBUCKETr:
   1213             if (ainfo->idx < 8) {
   1214                 pbmp = ch_all_ports;
   1215             } else if (ainfo->idx < 26) {
   1216                 pbmp = ch_24q_ports_with_cpu;
   1217             } else {
   1218                 pbmp = ch_cmic;
   1219             }
   1220             break;
   1221 
   1222         /* MMU_ES_REGS */
   1223         case COSWEIGHTSr:
   1224         case WDRRCOUNTr:
   1225             if (ainfo->idx < 8) {
   1226                 pbmp = ch_all_ports;
   1227             } else if (ainfo->idx < 10) {
   1228                 pbmp = ch_24q_ports_with_cpu;
   1229             } else {
   1230                 pbmp = ch_cmic;
   1231             }
   1232             break;
   1233 
   1234         /* MMU_PERPORTPERPRI_REGS */
   1235         case PG_RESET_OFFSET_CELLr:
   1236         case PG_RESET_OFFSET_PACKETr:
   1237         case PG_RESET_FLOOR_CELLr:
   1238         
   1239         case PG_MIN_CELLr:
   1240         case PG_MIN_PACKETr:
   1241         case PG_HDRM_LIMIT_CELLr:
   1242         case PG_HDRM_LIMIT_PACKETr:
   1243         case PG_COUNT_CELLr:
   1244         case PG_COUNT_PACKETr:
   1245         case PG_MIN_COUNT_CELLr:
   1246         case PG_MIN_COUNT_PACKETr:
   1247         case PG_PORT_MIN_COUNT_CELLr:
   1248         case PG_PORT_MIN_COUNT_PACKETr:
   1249         case PG_SHARED_COUNT_CELLr:
   1250         case PG_SHARED_COUNT_PACKETr:
   1251         case PG_HDRM_COUNT_CELLr:
   1252         case PG_HDRM_COUNT_PACKETr:
   1253         case PG_GBL_HDRM_COUNTr:
   1254         case PG_RESET_VALUE_CELLr:
   1255         case PG_RESET_VALUE_PACKETr:
   1256             if (ainfo->idx < 2) {
   1257                 pbmp = ch_all_ports_with_mmu;
   1258             } else {
   1259                 pbmp = ch_8pg_ports;
   1260             }
   1261             break;
   1262  
   1263         default:
   1264             break; 
   1265     }
   1266 
   1267     if (!SOC_PBMP_MEMBER(*pbmp, ainfo->port)) {
   1268         goto skip; 
   1269     }
   1270 
   1271     if (mask != NULL) {
   1272         switch(ainfo->reg) {
   1273             case HOL_STAT_PORTr:
   1274             case ECN_CONFIGr:
   1275                 if (!SOC_PBMP_MEMBER(*ch_24q_ports, ainfo->port)) {
   1276                     /* adjust mask for ports without 24 queues */
   1277                     COMPILER_64_SET(temp_mask, 0, 0x000000ff);
   1278                     COMPILER_64_AND(*mask, temp_mask);
   1279                 }
   1280                 break;
   1281             case TOQ_QUEUESTAT_64r:
   1282             case TOQ_ACTIVATEQ_64r:
   1283             case TOQEMPTY_64r:
   1284             case DEQ_AGINGMASK_64r:
   1285             case SHAPING_MODEr:
   1286             case EAV_MAXBUCKET_64r:
   1287             case EAV_MINBUCKET_64r:
   1288                 if (SOC_PBMP_MEMBER(*ch_24q_ports, ainfo->port)) {
   1289                     /* adjust mask for ports with 24 queues */
   1290                     COMPILER_64_SET(temp_mask, 0, 0x00ffffff);
   1291                     COMPILER_64_AND(*mask, temp_mask);
   1292                 } else if (ainfo->port != 0) {
   1293                     /* remaining ports only have 8 queues */
   1294                     COMPILER_64_SET(temp_mask, 0, 0x000000ff);
   1295                     COMPILER_64_AND(*mask, temp_mask);
   1296                 }
   1297                 break;
   1298         }
   1299     }
   1300     return 0; 
   1301 skip:
   1302     /* set mask to all 0's so test will skip it */
   1303     if (mask != NULL) {
   1304         COMPILER_64_SET(*mask, 0, 0);
   1305     }
   1306     return 1;
   1307 }
   1308 #endif /* BCM_TRIUMPH2_SUPPORT */
   1309 
   1310 #ifdef BCM_ENDURO_SUPPORT
   1311 STATIC int
   1312 reg_mask_subset_en(int unit, soc_regaddrinfo_t *ainfo, uint64 *mask)
   1313 {
   1314     pbmp_t *en_8pg_ports;
   1315     pbmp_t *en_higig_ports;
   1316     pbmp_t *en_24q_ports;
   1317     pbmp_t *en_24q_ports_with_cpu;
   1318     pbmp_t *en_non_cpu_ports;
   1319     pbmp_t *en_all_ports;
   1320     pbmp_t *en_cmic;
   1321 #define _REG_MASK_SUBSET_MAX_EN 7
   1322     pbmp_t **mask_map_arr[_REG_MASK_SUBSET_MAX_EN];
   1323     int i, count = _REG_MASK_SUBSET_MAX_EN;
   1324     uint64 temp_mask;
   1325     pbmp_t *pbmp;
   1326 
   1327     mask_map_arr[0] = &en_8pg_ports;
   1328     mask_map_arr[1] = &en_higig_ports;
   1329     mask_map_arr[2] = &en_24q_ports;
   1330     mask_map_arr[3] = &en_24q_ports_with_cpu;
   1331     mask_map_arr[4] = &en_non_cpu_ports;
   1332     mask_map_arr[5] = &en_all_ports;
   1333     mask_map_arr[6] = &en_cmic;
   1334     if (NULL == SOC_REG_MASK_SUBSET(unit)) {
   1335         _INIT_REG_MASK_SUBSETS(unit, i, count, mask_map_arr);
   1336 
   1337         /* Higig ports [0,26,27,28,29] */
   1338         SOC_PBMP_CLEAR(*en_higig_ports);
   1339         SOC_PBMP_PORT_ADD(*en_higig_ports, 0);
   1340         SOC_PBMP_PORT_ADD(*en_higig_ports, 26);
   1341         SOC_PBMP_PORT_ADD(*en_higig_ports, 27);
   1342         SOC_PBMP_PORT_ADD(*en_higig_ports, 28);
   1343         SOC_PBMP_PORT_ADD(*en_higig_ports, 29);
   1344 
   1345         /*  24Q_PORTS = [26,27,28,29] */
   1346         SOC_PBMP_CLEAR(*en_24q_ports);
   1347         SOC_PBMP_PORT_ADD(*en_24q_ports, 26);
   1348         SOC_PBMP_PORT_ADD(*en_24q_ports, 27);
   1349         SOC_PBMP_PORT_ADD(*en_24q_ports, 28);
   1350         SOC_PBMP_PORT_ADD(*en_24q_ports, 29);
   1351         SOC_PBMP_ASSIGN(*en_24q_ports_with_cpu, *en_24q_ports);
   1352         SOC_PBMP_PORT_ADD(*en_24q_ports_with_cpu, 0);
   1353 
   1354         SOC_PBMP_CLEAR(*en_8pg_ports);
   1355         SOC_PBMP_PORT_ADD(*en_8pg_ports, 26);
   1356         SOC_PBMP_PORT_ADD(*en_8pg_ports, 27);
   1357         SOC_PBMP_PORT_ADD(*en_8pg_ports, 28);
   1358         SOC_PBMP_PORT_ADD(*en_8pg_ports, 29);
   1359 
   1360         /* all port except CMIC */
   1361         SOC_PBMP_CLEAR(*en_non_cpu_ports);
   1362         SOC_PBMP_ASSIGN(*en_non_cpu_ports, PBMP_ALL(unit));
   1363         SOC_PBMP_PORT_REMOVE(*en_non_cpu_ports, 0);
   1364  
   1365         /* All ports */
   1366         SOC_PBMP_CLEAR(*en_all_ports); 
   1367         SOC_PBMP_ASSIGN(*en_all_ports, PBMP_ALL(unit)); 
   1368  
   1369         /* CPU port */
   1370         SOC_PBMP_CLEAR(*en_cmic); 
   1371         SOC_PBMP_ASSIGN(*en_cmic, PBMP_CMIC(unit));
   1372     }
   1373     if (!SOC_PORT_VALID(unit, ainfo->port)) {
   1374         return 0;
   1375     }
   1376     _MAP_REG_MASK_SUBSETS(unit, i, count, mask_map_arr);
   1377  
   1378     switch(ainfo->reg) {
   1379         case MAC_CTRLr:
   1380         case MAC_XGXS_CTRLr:
   1381         case MAC_XGXS_STATr:
   1382         case MAC_TXMUXCTRLr:
   1383         case MAC_CNTMAXSZr:
   1384         case MAC_CORESPARE0r:
   1385         case MAC_TXCTRLr:
   1386         case MAC_TXMACSAr:
   1387         case MAC_TXMAXSZr:
   1388         case MAC_TXPSETHRr:
   1389         case MAC_TXSPARE0r:
   1390         case MAC_TXPPPCTRLr:
   1391         case ITPOKr:
   1392         case ITXPFr: 
   1393         case ITFCSr:
   1394         case ITUCr:
   1395         case ITUCAr:
   1396         case ITMCAr:
   1397         case ITBCAr:
   1398         case ITOVRr:
   1399         case ITFRGr:
   1400         case ITPKTr:
   1401         case IT64r:
   1402         case IT127r:
   1403         case IT255r:
   1404         case IT511r:
   1405         case IT1023r:
   1406         case IT1518r:
   1407         case IT2047r:
   1408         case IT4095r:
   1409         case IT9216r:
   1410         case IT16383r:
   1411         case ITMAXr:
   1412         case ITUFLr:
   1413         case ITERRr:
   1414         case ITBYTr:
   1415         case MAC_RXCTRLr:
   1416         case MAC_RXMACSAr:
   1417         case MAC_RXMAXSZr:
   1418         case MAC_RXLSSCTRLr:
   1419         case MAC_RXLSSSTATr:
   1420         case MAC_RXSPARE0r:
   1421         case IR64r:
   1422         case IR127r:
   1423         case IR255r:
   1424         case IR511r:
   1425         case IR1023r:
   1426         case IR1518r:
   1427         case IR2047r:
   1428         case IR4095r:
   1429         case IR9216r:
   1430         case IR16383r:
   1431         case IRMAXr:
   1432         case IRPKTr:
   1433         case IRFCSr:
   1434         case IRUCAr:
   1435         case IRMCAr:
   1436         case IRBCAr:
   1437         case IRXCFr:
   1438         case IRXPFr:
   1439         case IRXUOr:
   1440         case IRJBRr:
   1441         case IROVRr:
   1442         case IRFLRr:
   1443         case IRPOKr:
   1444         case IRMEGr:
   1445         case IRMEBr:
   1446         case IRBYTr:
   1447         case IRUNDr:
   1448         case IRFRGr:
   1449         case IRERBYTr:
   1450         case IRERPKTr:
   1451         case IRJUNKr:
   1452         case MAC_TXLLFCCTRLr:
   1453         case MAC_TXLLFCMSGFLDSr:
   1454         case MAC_RXLLFCMSGFLDSr:
   1455         case MAC_RXLLFCMSGCNTr:
   1456             if (IS_GE_PORT(unit, ainfo->port)) {
   1457                 goto skip;
   1458             }
   1459             break;
   1460         default:
   1461             break;
   1462     }
   1463 
   1464     switch(ainfo->reg) {
   1465         case IE2E_CONTROLr:
   1466         case ING_MODMAP_CTRLr:
   1467         case IHG_LOOKUPr:
   1468         case ICONTROL_OPCODE_BITMAPr:
   1469         case UNKNOWN_HGI_BITMAPr:
   1470         case IUNHGIr:
   1471         case ICTRLr:
   1472         case IBCASTr:
   1473         case ILTOMCr:
   1474         case IIPMCr:
   1475         case IUNKOPCr:
   1476             pbmp = en_higig_ports;
   1477             break;
   1478         case PG_THRESH_SELr:
   1479         case PORT_PRI_GRP0r:
   1480         case PORT_PRI_GRP1r:
   1481         case PORT_PRI_XON_ENABLEr:
   1482             pbmp = en_8pg_ports;
   1483             break;
   1484         case ECN_CONFIGr:
   1485         case HOL_STAT_PORTr:
   1486         case PORT_WREDPARAM_CELLr:
   1487         case PORT_WREDPARAM_YELLOW_CELLr:
   1488         case PORT_WREDPARAM_RED_CELLr:
   1489         case PORT_WREDPARAM_NONTCP_CELLr:
   1490         case PORT_WREDCONFIG_CELLr:
   1491         case PORT_WREDAVGQSIZE_CELLr:
   1492         case PORT_WREDPARAM_PACKETr:
   1493         case PORT_WREDPARAM_YELLOW_PACKETr:
   1494         case PORT_WREDPARAM_RED_PACKETr:
   1495         case PORT_WREDPARAM_NONTCP_PACKETr:
   1496         case PORT_WREDCONFIG_PACKETr:
   1497         case PORT_WREDAVGQSIZE_PACKETr:
   1498         case COSMASKr:
   1499         case MINSPCONFIGr:
   1500         case EGRMETERINGCONFIG_64r:
   1501         case EGRMETERINGBUCKETr:
   1502             pbmp = en_non_cpu_ports;
   1503             break;
   1504         case ING_COS_MODEr:
   1505         case COS_MODEr:
   1506         case S1V_CONFIGr:
   1507         case S1V_COSWEIGHTSr:
   1508         case S1V_COSMASKr:
   1509         case S1V_MINSPCONFIGr:
   1510         case S1V_WDRRCOUNTr:
   1511             pbmp = en_24q_ports;
   1512             break;
   1513         default:
   1514             pbmp = en_all_ports;
   1515             break;
   1516     }
   1517 
   1518     switch(ainfo->reg) {
   1519         /* MMU_PERPORTPERCOS_REGS */
   1520         case OP_QUEUE_CONFIG_CELLr:
   1521         case OP_QUEUE_CONFIG1_CELLr:
   1522         case OP_QUEUE_CONFIG_PACKETr:
   1523         case OP_QUEUE_CONFIG1_PACKETr:
   1524         case OP_QUEUE_LIMIT_YELLOW_CELLr:
   1525         case OP_QUEUE_LIMIT_YELLOW_PACKETr:
   1526         case OP_QUEUE_LIMIT_RED_CELLr:
   1527         case OP_QUEUE_LIMIT_RED_PACKETr:
   1528         case OP_QUEUE_RESET_OFFSET_CELLr:
   1529         case OP_QUEUE_RESET_OFFSET_PACKETr:
   1530         case OP_QUEUE_MIN_COUNT_CELLr:
   1531         case OP_QUEUE_MIN_COUNT_PACKETr:
   1532         case OP_QUEUE_SHARED_COUNT_CELLr:
   1533         case OP_QUEUE_SHARED_COUNT_PACKETr:
   1534         case OP_QUEUE_TOTAL_COUNT_CELLr:
   1535         case OP_QUEUE_TOTAL_COUNT_PACKETr:
   1536         case OP_QUEUE_RESET_VALUE_CELLr:
   1537         case OP_QUEUE_RESET_VALUE_PACKETr:
   1538         case OP_QUEUE_LIMIT_RESUME_COLOR_CELLr:
   1539         case OP_QUEUE_LIMIT_RESUME_COLOR_PACKETr:
   1540         /* MMU_PERPORTPERCOS_REGS_CTR */
   1541         case DROP_PKT_CNTr:
   1542         case DROP_BYTE_CNTr:
   1543             if (ainfo->port == 0) {
   1544                 return 0;
   1545             } else if (ainfo->idx < 8) {
   1546                 pbmp = en_all_ports;
   1547             } else if (ainfo->idx < 24) {
   1548                 pbmp = en_24q_ports;
   1549             } else {
   1550                 pbmp = en_cmic;
   1551             }
   1552             break;
   1553         /* MMU_PERPORTPERCOS_NOCPU_REGS */
   1554         case WREDPARAM_CELLr:
   1555         case WREDPARAM_YELLOW_CELLr:
   1556         case WREDPARAM_RED_CELLr:
   1557         case WREDPARAM_NONTCP_CELLr:
   1558         case WREDCONFIG_CELLr:
   1559         case WREDAVGQSIZE_CELLr:
   1560         case WREDPARAM_PACKETr:
   1561         case WREDPARAM_YELLOW_PACKETr:
   1562         case WREDPARAM_RED_PACKETr:
   1563         case WREDPARAM_NONTCP_PACKETr:
   1564         case WREDCONFIG_PACKETr:
   1565         case WREDAVGQSIZE_PACKETr:
   1566             if (ainfo->port == 0) {
   1567                 goto skip;
   1568             } else if (ainfo->idx < 8) {
   1569                 pbmp = en_non_cpu_ports;
   1570             } else {
   1571                 pbmp = en_24q_ports;
   1572             }
   1573             break;
   1574 
   1575 
   1576         /* MMU_MTRO_REGS */
   1577         case MINBUCKETCONFIG_64r:
   1578         case MINBUCKETr:
   1579         case MAXBUCKETCONFIG_64r:
   1580         case MAXBUCKETr:
   1581             if (ainfo->port == 0) {
   1582                 goto skip;
   1583             } else if (ainfo->idx < 8) {
   1584                 pbmp = en_all_ports;
   1585             } else if (ainfo->idx < 26) {
   1586                 pbmp = en_24q_ports_with_cpu;
   1587             } else {
   1588                 pbmp = en_cmic;
   1589             }
   1590             break;
   1591 
   1592         /* MMU_ES_REGS */
   1593         case COSWEIGHTSr:
   1594         case WDRRCOUNTr:
   1595             if (ainfo->idx < 8) {
   1596                 pbmp = en_all_ports;
   1597             } else if (ainfo->idx < 10) {
   1598                 pbmp = en_24q_ports_with_cpu;
   1599             } else {
   1600                 pbmp = en_cmic;
   1601             }
   1602             break;
   1603         /* MMU_PERPORTPERPRI_REGS */
   1604         case PG_RESET_OFFSET_CELLr:
   1605         case PG_RESET_OFFSET_PACKETr:
   1606         case PG_RESET_FLOOR_CELLr:
   1607         
   1608         case PG_MIN_CELLr:
   1609         case PG_MIN_PACKETr:
   1610         case PG_HDRM_LIMIT_CELLr:
   1611         case PG_HDRM_LIMIT_PACKETr:
   1612         case PG_COUNT_CELLr:
   1613         case PG_COUNT_PACKETr:
   1614         case PG_MIN_COUNT_CELLr:
   1615         case PG_MIN_COUNT_PACKETr:
   1616         case PG_PORT_MIN_COUNT_CELLr:
   1617         case PG_PORT_MIN_COUNT_PACKETr:
   1618         case PG_SHARED_COUNT_CELLr:
   1619         case PG_SHARED_COUNT_PACKETr:
   1620         case PG_HDRM_COUNT_CELLr:
   1621         case PG_HDRM_COUNT_PACKETr:
   1622         case PG_GBL_HDRM_COUNTr:
   1623         case PG_RESET_VALUE_CELLr:
   1624         case PG_RESET_VALUE_PACKETr:
   1625             if (ainfo->idx != 0) {
   1626                 pbmp = en_8pg_ports;
   1627             }
   1628             break;
   1629         default:
   1630             break; 
   1631     }
   1632 
   1633     if (!SOC_PBMP_MEMBER(*pbmp, ainfo->port)) {
   1634         goto skip; 
   1635     }
   1636 
   1637     if (mask != NULL) {
   1638         switch(ainfo->reg) {
   1639             case HOL_STAT_PORTr:
   1640             case ECN_CONFIGr:
   1641                 if (!SOC_PBMP_MEMBER(*en_24q_ports, ainfo->port)) {
   1642                     /* adjust mask for ports without 24 queues */
   1643                     COMPILER_64_SET(temp_mask, 0, 0x000000ff);
   1644                     COMPILER_64_AND(*mask, temp_mask);
   1645                 }
   1646                 break;
   1647             case TOQ_QUEUESTAT_64r:
   1648             case TOQ_ACTIVATEQ_64r:
   1649             case TOQEMPTY_64r:
   1650             case DEQ_AGINGMASK_64r:
   1651                 if (SOC_PBMP_MEMBER(*en_24q_ports, ainfo->port)) {
   1652                     /* adjust mask for ports with 24 queues */
   1653                     COMPILER_64_SET(temp_mask, 0, 0x00ffffff);
   1654                     COMPILER_64_AND(*mask, temp_mask);
   1655                 } else if (ainfo->port != 0) {
   1656                     /* remaining ports only have 8 queues */
   1657                     COMPILER_64_SET(temp_mask, 0, 0x000000ff);
   1658                     COMPILER_64_AND(*mask, temp_mask);
   1659                 }
   1660                 break;
   1661         }
   1662     }
   1663     return 0; 
   1664 skip:
   1665     /* set mask to all 0's so test will skip it */
   1666     if (mask != NULL) {
   1667         COMPILER_64_SET(*mask, 0, 0);
   1668     }
   1669     return 1;
   1670 }
   1671 #endif /* BCM_ENDURO_SUPPORT */
   1672 
   1673 #ifdef BCM_HURRICANE1_SUPPORT
   1674 STATIC int
   1675 reg_mask_subset_hu(int unit, soc_regaddrinfo_t *ainfo, uint64 *mask)
   1676 {
   1677     pbmp_t *hu_8pg_ports;
   1678     pbmp_t *hu_24q_ports;
   1679     pbmp_t *hu_24q_ports_with_cpu;
   1680     pbmp_t *hu_higig_ports;
   1681     pbmp_t *hu_non_cpu_ports;
   1682     pbmp_t *hu_all_ports;
   1683 #define _REG_MASK_SUBSET_MAX_HU 6
   1684     pbmp_t **mask_map_arr[_REG_MASK_SUBSET_MAX_HU];
   1685     int i, count = _REG_MASK_SUBSET_MAX_HU;
   1686     uint64 temp_mask;
   1687     pbmp_t *pbmp;
   1688 
   1689     mask_map_arr[0] = &hu_8pg_ports;
   1690     mask_map_arr[1] = &hu_24q_ports;
   1691     mask_map_arr[2] = &hu_24q_ports_with_cpu;
   1692     mask_map_arr[3] = &hu_higig_ports;
   1693     mask_map_arr[4] = &hu_non_cpu_ports;
   1694     mask_map_arr[5] = &hu_all_ports;
   1695     if (NULL == SOC_REG_MASK_SUBSET(unit)) {
   1696         _INIT_REG_MASK_SUBSETS(unit, i, count, mask_map_arr);
   1697 
   1698         /* Higig ports [0,26,27,28,29] */
   1699         SOC_PBMP_CLEAR(*hu_higig_ports);
   1700         SOC_PBMP_PORT_ADD(*hu_higig_ports, 0);
   1701         SOC_PBMP_PORT_ADD(*hu_higig_ports, 26);
   1702         SOC_PBMP_PORT_ADD(*hu_higig_ports, 27);
   1703         SOC_PBMP_PORT_ADD(*hu_higig_ports, 28);
   1704         SOC_PBMP_PORT_ADD(*hu_higig_ports, 29);
   1705 
   1706         /*  24Q_PORTS = NONE */
   1707         SOC_PBMP_CLEAR(*hu_24q_ports);
   1708         SOC_PBMP_ASSIGN(*hu_24q_ports_with_cpu, *hu_24q_ports);
   1709         SOC_PBMP_PORT_ADD(*hu_24q_ports_with_cpu, 0);
   1710 
   1711         SOC_PBMP_CLEAR(*hu_8pg_ports);
   1712         SOC_PBMP_PORT_ADD(*hu_8pg_ports, 26);
   1713         SOC_PBMP_PORT_ADD(*hu_8pg_ports, 27);
   1714         SOC_PBMP_PORT_ADD(*hu_8pg_ports, 28);
   1715         SOC_PBMP_PORT_ADD(*hu_8pg_ports, 29);
   1716 
   1717         /* all port except CMIC */
   1718         SOC_PBMP_CLEAR(*hu_non_cpu_ports);
   1719         SOC_PBMP_ASSIGN(*hu_non_cpu_ports, PBMP_ALL(unit));
   1720         SOC_PBMP_PORT_REMOVE(*hu_non_cpu_ports, 0);
   1721  
   1722         /* All ports */
   1723         SOC_PBMP_CLEAR(*hu_all_ports); 
   1724         SOC_PBMP_ASSIGN(*hu_all_ports, PBMP_ALL(unit)); 
   1725     }
   1726     if (!SOC_PORT_VALID(unit, ainfo->port)) {
   1727         return 0;
   1728     }
   1729     if (!SOC_REG_IS_VALID(unit, ainfo->reg)) {
   1730         goto skip;
   1731     }
   1732     _MAP_REG_MASK_SUBSETS(unit, i, count, mask_map_arr);
   1733  
   1734     switch(ainfo->reg) {
   1735         case MAC_CTRLr:
   1736         case MAC_XGXS_CTRLr:
   1737         case MAC_XGXS_STATr:
   1738         case MAC_TXMUXCTRLr:
   1739         case MAC_CNTMAXSZr:
   1740         case MAC_CORESPARE0r:
   1741         case MAC_TXCTRLr:
   1742         case MAC_TXMACSAr:
   1743         case MAC_TXMAXSZr:
   1744         case MAC_TXPSETHRr:
   1745         case MAC_TXSPARE0r:
   1746         case MAC_TXPPPCTRLr:
   1747         case ITPOKr:
   1748         case ITXPFr: 
   1749         case ITFCSr:
   1750         case ITUCr:
   1751         case ITUCAr:
   1752         case ITMCAr:
   1753         case ITBCAr:
   1754         case ITOVRr:
   1755         case ITFRGr:
   1756         case ITPKTr:
   1757         case IT64r:
   1758         case IT127r:
   1759         case IT255r:
   1760         case IT511r:
   1761         case IT1023r:
   1762         case IT1518r:
   1763         case IT2047r:
   1764         case IT4095r:
   1765         case IT9216r:
   1766         case IT16383r:
   1767         case ITMAXr:
   1768         case ITUFLr:
   1769         case ITERRr:
   1770         case ITBYTr:
   1771         case MAC_RXCTRLr:
   1772         case MAC_RXMACSAr:
   1773         case MAC_RXMAXSZr:
   1774         case MAC_RXLSSCTRLr:
   1775         case MAC_RXLSSSTATr:
   1776         case MAC_RXSPARE0r:
   1777         case IR64r:
   1778         case IR127r:
   1779         case IR255r:
   1780         case IR511r:
   1781         case IR1023r:
   1782         case IR1518r:
   1783         case IR2047r:
   1784         case IR4095r:
   1785         case IR9216r:
   1786         case IR16383r:
   1787         case IRMAXr:
   1788         case IRPKTr:
   1789         case IRFCSr:
   1790         case IRUCAr:
   1791         case IRMCAr:
   1792         case IRBCAr:
   1793         case IRXCFr:
   1794         case IRXPFr:
   1795         case IRXUOr:
   1796         case IRJBRr:
   1797         case IROVRr:
   1798         case IRFLRr:
   1799         case IRPOKr:
   1800         case IRMEGr:
   1801         case IRMEBr:
   1802         case IRBYTr:
   1803         case IRUNDr:
   1804         case IRFRGr:
   1805         case IRERBYTr:
   1806         case IRERPKTr:
   1807         case IRJUNKr:
   1808         case ITXPPr:
   1809         case IRXPPr:
   1810         case MAC_TXLLFCCTRLr:
   1811         case MAC_TXLLFCMSGFLDSr:
   1812         case MAC_RXLLFCMSGFLDSr:
   1813         case MAC_RXLLFCMSGCNTr:
   1814             if (IS_GE_PORT(unit, ainfo->port)) {
   1815                 goto skip;
   1816             }
   1817             break;
   1818         default:
   1819             break;
   1820     }
   1821 
   1822     switch(ainfo->reg) {
   1823         case IE2E_CONTROLr:
   1824         case ING_MODMAP_CTRLr:
   1825         case IHG_LOOKUPr:
   1826         case ICONTROL_OPCODE_BITMAPr:
   1827         case UNKNOWN_HGI_BITMAPr:
   1828         case IUNHGIr:
   1829         case ICTRLr:
   1830         case IBCASTr:
   1831         case ILTOMCr:
   1832         case IIPMCr:
   1833         case IUNKOPCr:
   1834             pbmp = hu_higig_ports;
   1835             break;
   1836         case HOL_STAT_PORTr:
   1837             pbmp = hu_non_cpu_ports;
   1838             break;
   1839         case ING_COS_MODEr:
   1840             pbmp = hu_24q_ports;
   1841             break;
   1842         default:
   1843             pbmp = hu_all_ports;
   1844             break;
   1845     }
   1846 
   1847     if (!SOC_PBMP_MEMBER(*pbmp, ainfo->port)) {
   1848         goto skip; 
   1849     }
   1850 
   1851 
   1852     if (mask != NULL) {
   1853         switch(ainfo->reg) {
   1854             case HOL_STAT_PORTr:
   1855                 if (!SOC_PBMP_MEMBER(*hu_24q_ports, ainfo->port)) {
   1856                     /* adjust mask for ports without 24 queues */
   1857                     COMPILER_64_SET(temp_mask, 0, 0x000000ff);
   1858                     COMPILER_64_AND(*mask, temp_mask);
   1859                 }
   1860                 break;
   1861             case TOQ_QUEUESTAT_64r:
   1862             case TOQ_ACTIVATEQ_64r:
   1863             case TOQEMPTY_64r:
   1864             case DEQ_AGINGMASK_64r:
   1865                 if (SOC_PBMP_MEMBER(*hu_24q_ports, ainfo->port)) {
   1866                     /* adjust mask for ports with 24 queues */
   1867                     COMPILER_64_SET(temp_mask, 0, 0x00ffffff);
   1868                     COMPILER_64_AND(*mask, temp_mask);
   1869                 } else if (ainfo->port != 0) {
   1870                     /* remaining ports only have 8 queues */
   1871                     COMPILER_64_SET(temp_mask, 0, 0x000000ff);
   1872                     COMPILER_64_AND(*mask, temp_mask);
   1873                 }
   1874                 break;
   1875             case MAC_MODEr:
   1876                 /* skip LINK_STATUS bit */
   1877                 COMPILER_64_SET(temp_mask, 0, 0x0000000f);
   1878                 COMPILER_64_AND(*mask, temp_mask);
   1879                 break;
   1880         }
   1881     }
   1882     return 0; 
   1883 skip:
   1884     /* set mask to all 0's so test will skip it */
   1885     if (mask != NULL) {
   1886         COMPILER_64_SET(*mask, 0, 0);
   1887     }
   1888     return 1;
   1889 }
   1890 #endif /* BCM_HURRICANE_SUPPORT */
   1891 
   1892 #ifdef BCM_TRIDENT_SUPPORT
   1893 STATIC int
   1894 reg_mask_subset_trident(int unit, soc_regaddrinfo_t *ainfo, uint64 *mask)
   1895 {
   1896     soc_info_t *si;
   1897     uint64 temp_mask;
   1898 
   1899     switch (ainfo->reg) {
   1900     case PQEPARITYERRORADRr:
   1901     case PQ_C0_PORT_A_CMDr:
   1902     case PQ_C0_PORT_A_DATA_0r:
   1903     case PQ_C0_PORT_A_DATA_1r:
   1904     case PQ_C0_PORT_A_DATA_2r:
   1905     case PQ_C0_PORT_A_DATA_3r:
   1906     case PQ_C0_PORT_A_RADDRr:
   1907     case PQ_C0_PORT_A_WADDRr:
   1908     case PQ_C0_PORT_B_CMDr:
   1909     case PQ_C0_PORT_B_DATA_0r:
   1910     case PQ_C0_PORT_B_DATA_1r:
   1911     case PQ_C0_PORT_B_DATA_2r:
   1912     case PQ_C0_PORT_B_DATA_3r:
   1913     case PQ_C0_PORT_B_RADDRr:
   1914     case PQ_C0_PORT_B_WADDRr:
   1915     case PQ_C1_PORT_A_CMDr:
   1916     case PQ_C1_PORT_A_DATA_0r:
   1917     case PQ_C1_PORT_A_DATA_1r:
   1918     case PQ_C1_PORT_A_DATA_2r:
   1919     case PQ_C1_PORT_A_DATA_3r:
   1920     case PQ_C1_PORT_A_RADDRr:
   1921     case PQ_C1_PORT_A_WADDRr:
   1922     case PQ_C1_PORT_B_CMDr:
   1923     case PQ_C1_PORT_B_DATA_0r:
   1924     case PQ_C1_PORT_B_DATA_1r:
   1925     case PQ_C1_PORT_B_DATA_2r:
   1926     case PQ_C1_PORT_B_DATA_3r:
   1927     case PQ_C1_PORT_B_RADDRr:
   1928     case PQ_C1_PORT_B_WADDRr:
   1929     case PQ_C2_PORT_A_CMDr:
   1930     case PQ_C2_PORT_A_DATA_0r:
   1931     case PQ_C2_PORT_A_DATA_1r:
   1932     case PQ_C2_PORT_A_DATA_2r:
   1933     case PQ_C2_PORT_A_DATA_3r:
   1934     case PQ_C2_PORT_A_RADDRr:
   1935     case PQ_C2_PORT_A_WADDRr:
   1936     case PQ_C2_PORT_B_CMDr:
   1937     case PQ_C2_PORT_B_DATA_0r:
   1938     case PQ_C2_PORT_B_DATA_1r:
   1939     case PQ_C2_PORT_B_DATA_2r:
   1940     case PQ_C2_PORT_B_DATA_3r:
   1941     case PQ_C2_PORT_B_RADDRr:
   1942     case PQ_C2_PORT_B_WADDRr:
   1943     case PQ_C3_PORT_A_CMDr:
   1944     case PQ_C3_PORT_A_DATA_0r:
   1945     case PQ_C3_PORT_A_DATA_1r:
   1946     case PQ_C3_PORT_A_DATA_2r:
   1947     case PQ_C3_PORT_A_DATA_3r:
   1948     case PQ_C3_PORT_A_RADDRr:
   1949     case PQ_C3_PORT_A_WADDRr:
   1950     case PQ_C3_PORT_B_CMDr:
   1951     case PQ_C3_PORT_B_DATA_0r:
   1952     case PQ_C3_PORT_B_DATA_1r:
   1953     case PQ_C3_PORT_B_DATA_2r:
   1954     case PQ_C3_PORT_B_DATA_3r:
   1955     case PQ_C3_PORT_B_RADDRr:
   1956     case PQ_C3_PORT_B_WADDRr:
   1957     case PQ_MODULE_CONTROLr:
   1958     case PQ_PROGRAM_GOr:
   1959         goto skip;
   1960         break;
   1961     default:
   1962         break;
   1963     }
   1964 
   1965     if (!SOC_PORT_VALID(unit, ainfo->port)) {
   1966         return 0;
   1967     }
   1968 
   1969     si = &SOC_INFO(unit);
   1970 
   1971     switch (ainfo->reg) {
   1972     case XMAC_CTRLr:
   1973     case XMAC_MODEr:
   1974     case XMAC_SPARE0r:
   1975     case XMAC_SPARE1r:
   1976     case XMAC_TX_CTRLr:
   1977     case XMAC_TX_MAC_SAr:
   1978     case XMAC_RX_CTRLr:
   1979     case XMAC_RX_MAC_SAr:
   1980     case XMAC_RX_MAX_SIZEr:
   1981     case XMAC_RX_VLAN_TAGr:
   1982     case XMAC_RX_LSS_CTRLr:
   1983     case XMAC_RX_LSS_STATUSr:
   1984     case XMAC_CLEAR_RX_LSS_STATUSr:
   1985     case XMAC_PAUSE_CTRLr:
   1986     case XMAC_PFC_CTRLr:
   1987     case XMAC_PFC_TYPEr:
   1988     case XMAC_PFC_OPCODEr:
   1989     case XMAC_PFC_DAr:
   1990     case XMAC_LLFC_CTRLr:
   1991     case XMAC_TX_LLFC_MSG_FIELDSr:
   1992     case XMAC_RX_LLFC_MSG_FIELDSr:
   1993     case XMAC_HCFC_CTRLr:
   1994     case XMAC_TX_TIMESTAMP_FIFO_DATAr:
   1995     case XMAC_TX_TIMESTAMP_FIFO_STATUSr:
   1996     case XMAC_FIFO_STATUSr:
   1997     case XMAC_CLEAR_FIFO_STATUSr:
   1998     case XMAC_TX_FIFO_CREDITSr:
   1999     case XMAC_EEE_CTRLr:
   2000     case XMAC_EEE_TIMERSr:
   2001         /* Skip Xmac registers when the XLPORT is used as GE port */
   2002         if (IS_GE_PORT(unit, ainfo->port)) {
   2003             goto skip;
   2004         }
   2005         break;
   2006 
   2007 
   2008     case DROP_PKT_CNT_OVQr:
   2009         /* @OVQ_PORT_DROP_REGS (all ports except cpu port) */
   2010     case DEQ_AGINGMASKr:
   2011     case MCQ_FIFO_BASE_REGr:
   2012     case MCQ_FIFO_EMPTY_REGr:
   2013         /* PORTLIST => [1..65] */
   2014     case COSMASKr:
   2015     case MINSPCONFIGr:
   2016     case S3_CONFIGr:
   2017     case S3_CONFIG_MCr:
   2018     case S3_COSMASKr:
   2019     case S3_COSMASK_MCr:
   2020     case S3_MINSPCONFIGr:
   2021     case S3_MINSPCONFIG_MCr:
   2022     case S2_CONFIGr:
   2023     case S2_COSWEIGHTSr:
   2024     case S2_COSMASKr:
   2025     case S2_MINSPCONFIGr:
   2026     case S2_WERRCOUNTr:
   2027     case S2_S3_ROUTINGr:
   2028         /* @MMU_NO_CPU_PORTS (all ports except cpu port) */
   2029     case PORT_LLFC_CFGr:
   2030         /* @PFC_PORT_CFG_REGS (all ports except cpu port) */
   2031     case S3_MINBUCKETCONFIG_64r:
   2032     case S3_MINBUCKETr:
   2033     case S3_MAXBUCKETCONFIG_64r:
   2034     case S3_MAXBUCKETr:
   2035         /* @MMU_MTRO_S3_REG (all ports except cpu port) */
   2036     case S2_MINBUCKETCONFIG_64r:
   2037     case S2_MINBUCKETr:
   2038     case S2_MAXBUCKETCONFIG_64r:
   2039     case S2_MAXBUCKETr:
   2040         /* @MMU_MTRO_S2_REG (all ports except cpu port) */
   2041     case OVQ_MCQ_CREDITSr:
   2042     case OVQ_MCQ_STATEr:
   2043         /* @OVQ_PORT_COS_REGS (all ports except cpu port) */
   2044         if (IS_CPU_PORT(unit, ainfo->port)) {
   2045             goto skip;
   2046         }
   2047         break;
   2048 
   2049     case XPORT_TO_MMU_BKPr:
   2050         /* @PFC_PORT_STS_REGS (all ports except cpu and lb port) */
   2051     case BKPMETERINGCONFIG_64r:
   2052     case BKPMETERINGBUCKETr:
   2053     case MTRI_IFGr:
   2054         /* @MMU_MTRI_PORTS (all ports except cpu and lb port) */
   2055     case OP_UC_PORT_CONFIG_CELLr:
   2056     case OP_UC_PORT_CONFIG1_CELLr:
   2057     case OP_UC_PORT_LIMIT_COLOR_CELLr:
   2058     case OP_UC_PORT_SHARED_COUNT_CELLr:
   2059     case OP_UC_PORT_LIMIT_RESUME_COLOR_CELLr:
   2060     case UCQ_COS_EMPTY_REGr:
   2061     case PORT_SP_WRED_CONFIGr:
   2062     case PORT_SP_WRED_AVG_QSIZEr:
   2063         /* PORTLIST => [1..32,34..65] */
   2064     case OP_UC_QUEUE_MIN_COUNT_CELLr:
   2065     case OP_UC_QUEUE_SHARED_COUNT_CELLr:
   2066     case OP_UC_QUEUE_TOTAL_COUNT_CELLr:
   2067     case OP_UC_QUEUE_RESET_VALUE_CELLr:
   2068         /* @THDO_UC_PORT_COS_REGS (all ports except cpu and lb port) */
   2069     case WRED_CONFIGr:
   2070     case WRED_AVG_QSIZEr:
   2071         /* @MMU_PERPORTPERCOS_NOCPU_REGS (all ports except cpu and lb port) */
   2072         if (IS_CPU_PORT(unit, ainfo->port) || IS_LB_PORT(unit, ainfo->port)) {
   2073             goto skip;
   2074         }
   2075         break;
   2076 
   2077     case OP_EX_QUEUE_MIN_COUNT_CELLr:
   2078     case OP_EX_QUEUE_SHARED_COUNT_CELLr:
   2079     case OP_EX_QUEUE_TOTAL_COUNT_CELLr:
   2080     case OP_EX_QUEUE_RESET_VALUE_CELLr:
   2081         /* @THDO_EX_PORT_COS_REGS (extended queue ports) */
   2082     case OP_EX_PORT_CONFIG_SPID_0r:
   2083     case OP_EX_PORT_CONFIG_SPID_1r:
   2084     case OP_EX_PORT_CONFIG_SPID_2r:
   2085     case OP_EX_PORT_CONFIG_SPID_3r:
   2086     case OP_EX_PORT_CONFIG_SPID_4r:
   2087     case OP_EX_PORT_CONFIG_COS_MIN_0r:
   2088     case OP_EX_PORT_CONFIG_COS_MIN_1r:
   2089     case OP_EX_PORT_CONFIG_COS_MIN_2r:
   2090     case UCQ_EXTCOS1_EMPTY_REGr:
   2091         /* PORTLIST => [1..4,34..37] */
   2092     case DMVOQ_WRED_CONFIGr:
   2093     case VOQ_WRED_AVG_QSIZEr:
   2094         /* @MMU_PERPORTPERVOQ_NOCPU_REGS (extended queue ports) */
   2095         if (!si->port_num_ext_cosq[ainfo->port]) {
   2096             goto skip;
   2097         }
   2098         break;
   2099 
   2100     case COSWEIGHTSr:
   2101     case WERRCOUNTr:
   2102         /* @MMU_ES_REGS */
   2103         if (!IS_CPU_PORT(unit, ainfo->port)) {
   2104             if (ainfo->idx >= 7) {
   2105                 goto skip;
   2106             }
   2107         }
   2108         break;
   2109 
   2110     case S3_COSWEIGHTSr:
   2111     case S3_WERRCOUNTr:
   2112         /* @MMU_ES_S3_REGS */
   2113         if (!si->port_num_ext_cosq[ainfo->port]) {
   2114             if (IS_CPU_PORT(unit, ainfo->port) || ainfo->idx >= 8) {
   2115                 goto skip;
   2116             }
   2117         }
   2118         break;
   2119 
   2120     case MINBUCKETCONFIG_64r:
   2121     case MINBUCKETr:
   2122     case MAXBUCKETCONFIG_64r:
   2123     case MAXBUCKETr:
   2124         /* @MMU_MTRO_REGS */
   2125         if (IS_CPU_PORT(unit, ainfo->port)) {
   2126             if (ainfo->idx >= 48) {
   2127                 goto skip;
   2128             }
   2129         } else if (IS_LB_PORT(unit, ainfo->port)) {
   2130             if (ainfo->idx >= 5) {
   2131                 goto skip;
   2132             }
   2133         } else if (!si->port_num_ext_cosq[ainfo->port]) {
   2134             if (ainfo->idx >= 15) {
   2135                 goto skip;
   2136             }
   2137         }
   2138         break;
   2139 
   2140     case OP_QUEUE_CONFIG_CELLr:
   2141     case OP_QUEUE_CONFIG1_CELLr:
   2142     case OP_QUEUE_LIMIT_COLOR_CELLr:
   2143     case OP_QUEUE_RESET_OFFSET_CELLr:
   2144     case OP_QUEUE_MIN_COUNT_CELLr:
   2145     case OP_QUEUE_SHARED_COUNT_CELLr:
   2146     case OP_QUEUE_TOTAL_COUNT_CELLr:
   2147     case OP_QUEUE_RESET_VALUE_CELLr:
   2148     case OP_QUEUE_LIMIT_RESUME_COLOR_CELLr:
   2149         /* @THDO_PORT_COS_REGS */
   2150         if (!IS_CPU_PORT(unit, ainfo->port)) {
   2151             if (ainfo->idx >= 5) {
   2152                 goto skip;
   2153             }
   2154         }
   2155         break;
   2156     default:
   2157         break;
   2158     }
   2159 
   2160     if (mask != NULL) {
   2161         switch (ainfo->reg) {
   2162         case SHAPING_CONTROLr:
   2163         case RESET_ON_EMPTY_MAX_64r:
   2164             if (!si->port_num_ext_cosq[ainfo->port]) {
   2165                 COMPILER_64_SET(temp_mask, 0, 0x007fffff);
   2166                 COMPILER_64_AND(*mask, temp_mask);
   2167             }
   2168             break;
   2169         default:
   2170             break;
   2171         }
   2172     }
   2173 
   2174     return 0;
   2175 skip:
   2176     /* set mask to all 0's so test will skip it */
   2177     if (mask != NULL) {
   2178         COMPILER_64_SET(*mask, 0, 0);
   2179     }
   2180     return 1;
   2181 }
   2182 #endif /* BCM_TRIDENT_SUPPORT */
   2183 
   2184 #ifdef BCM_TRIDENT2_SUPPORT
   2185 STATIC int
   2186 reg_mask_subset_trident2(int unit, soc_regaddrinfo_t *ainfo, uint64 *mask)
   2187 {
   2188     soc_info_t *si;
   2189     int port, phy_port = 0, mmu_port = 0;
   2190     int pgw, xlp, blk, index;
   2191     int instance_mask = 0;
   2192 
   2193     port = ainfo->port;
   2194     if (REG_PORT_ANY != port) {
   2195         instance_mask = port & SOC_REG_ADDR_INSTANCE_MASK;
   2196         port &= (~SOC_REG_ADDR_INSTANCE_MASK);
   2197     }
   2198 
   2199     if (!instance_mask) {
   2200         if (!SOC_PORT_VALID(unit, port)) {
   2201             return 0;
   2202         }
   2203         si = &SOC_INFO(unit);
   2204         phy_port = si->port_l2p_mapping[ainfo->port];
   2205         mmu_port = si->port_p2m_mapping[phy_port];
   2206     }
   2207 
   2208     if ((ainfo->block >= 0) && !SOC_INFO(unit).block_valid[ainfo->block]) {
   2209         goto skip;
   2210     }
   2211 
   2212     switch (ainfo->reg) {
   2213     case PORT_INITIAL_COPY_COUNT_WIDTHr:
   2214     case MMU_PORT_TO_LOGIC_PORT_MAPPINGr:
   2215     case MMU_PORT_TO_PHY_PORT_MAPPINGr:
   2216     case MMU_TO_XPORT_BKPr:
   2217     case CHFC2PFC_STATEr:
   2218     case QCN_PFC_STATEr:
   2219         /* @MMU_PORT_LIST */
   2220     case XPORT_TO_MMU_BKPr:
   2221         /* @PFC_PORT_STS_REGS */
   2222     case MTRI_IFGr:
   2223         /* @MMU_MTRI_PORTS */
   2224     case THDI_INPUT_PORT_XON_ENABLESr:
   2225     case THDI_PORT_PRI_GRP0r:
   2226     case THDI_PORT_PRI_GRP1r:
   2227     case THDI_PORT_PG_SPIDr:
   2228     case THDI_PORT_LIMIT_STATESr:
   2229     case THDI_FLOW_CONTROL_XOFF_STATEr:
   2230         /* MMU_THDI_PORTS */
   2231     case THDU_PORT_E2ECC_COS_SPIDr:
   2232         /* THDU_UC_PORT_LIST */
   2233     case ASF_PORT_CFGr:
   2234     case ENQ_ASF_ERRORr:
   2235         /* @ENQ_PORT_LIST */
   2236         break;
   2237     case HSP_SCHED_PORT_CONFIGr:
   2238     case HSP_SCHED_L0_NODE_CONFIGr:
   2239     case HSP_SCHED_L0_NODE_WEIGHTr:
   2240     case HSP_SCHED_L0_NODE_CONNECTION_CONFIGr:
   2241     case HSP_SCHED_L1_NODE_CONFIGr:
   2242     case HSP_SCHED_L1_NODE_WEIGHTr:
   2243     case HSP_SCHED_L2_UC_QUEUE_CONFIGr:
   2244     case HSP_SCHED_L2_MC_QUEUE_CONFIGr:
   2245     case HSP_SCHED_L2_UC_QUEUE_WEIGHTr:
   2246     case HSP_SCHED_L2_MC_QUEUE_WEIGHTr:
   2247         /* @HSP_PORT_LIST => [0..15,64..79] */
   2248         if (!(mmu_port >= 0 && mmu_port <= 15) &&
   2249             !(mmu_port >= 64 && mmu_port <= 79)) {
   2250             goto skip;
   2251         }
   2252         break;
   2253     case MMU_THDM_DB_PORTSP_SHARED_COUNTr:
   2254     case MMU_THDM_DB_PORTSP_TOTAL_COUNTr:
   2255     case MMU_THDM_DB_PORTSP_THRESHOLD_PROFILE_SELr:
   2256     case MMU_THDM_MCQE_PORTSP_SHARED_COUNTr:
   2257     case MMU_THDM_MCQE_PORTSP_TOTAL_COUNTr:
   2258     case MMU_THDM_MCQE_PORTSP_THRESHOLD_PROFILE_SELr:
   2259         /* @THDM_PORT_LIST */
   2260         break;
   2261     case PGW_OBM0_CONTROLr:
   2262     case PGW_OBM0_SHARED_CONFIGr:
   2263     case PGW_OBM0_NIV_ETHERTYPEr:
   2264     case PGW_OBM0_PE_ETHERTYPEr:
   2265     case PGW_OBM0_OUTER_TPIDr:
   2266     case PGW_OBM0_INNER_TPIDr:
   2267     case PGW_OBM0_PRIORITY_MAPr:
   2268     case PGW_OBM0_THRESHOLDr:
   2269     case PGW_OBM0_THRESHOLD2r:
   2270     case PGW_OBM0_LOW_PRI_DROP_PROBr:
   2271     case PGW_OBM0_TM_CONTROLr:
   2272     case PGW_OBM0_ECC_ENABLEr:
   2273     case PGW_OBM0_ECC_STATUSr:
   2274     case PGW_OBM0_USE_COUNTERr:
   2275     case PGW_OBM0_MAX_USAGEr:
   2276     case PGW_OBM0_LOW_PRI_PKT_DROPr:
   2277     case PGW_OBM0_LOW_PRI_BYTE_DROPr:
   2278     case PGW_OBM0_HIGH_PRI_PKT_DROPr:
   2279     case PGW_OBM0_HIGH_PRI_BYTE_DROPr:
   2280     case PGW_OBM1_CONTROLr:
   2281     case PGW_OBM1_SHARED_CONFIGr:
   2282     case PGW_OBM1_NIV_ETHERTYPEr:
   2283     case PGW_OBM1_PE_ETHERTYPEr:
   2284     case PGW_OBM1_OUTER_TPIDr:
   2285     case PGW_OBM1_INNER_TPIDr:
   2286     case PGW_OBM1_PRIORITY_MAPr:
   2287     case PGW_OBM1_THRESHOLDr:
   2288     case PGW_OBM1_THRESHOLD2r:
   2289     case PGW_OBM1_LOW_PRI_DROP_PROBr:
   2290     case PGW_OBM1_TM_CONTROLr:
   2291     case PGW_OBM1_ECC_ENABLEr:
   2292     case PGW_OBM1_ECC_STATUSr:
   2293     case PGW_OBM1_USE_COUNTERr:
   2294     case PGW_OBM1_MAX_USAGEr:
   2295     case PGW_OBM1_LOW_PRI_PKT_DROPr:
   2296     case PGW_OBM1_LOW_PRI_BYTE_DROPr:
   2297     case PGW_OBM1_HIGH_PRI_PKT_DROPr:
   2298     case PGW_OBM1_HIGH_PRI_BYTE_DROPr:
   2299     case PGW_OBM2_CONTROLr:
   2300     case PGW_OBM2_SHARED_CONFIGr:
   2301     case PGW_OBM2_NIV_ETHERTYPEr:
   2302     case PGW_OBM2_PE_ETHERTYPEr:
   2303     case PGW_OBM2_OUTER_TPIDr:
   2304     case PGW_OBM2_INNER_TPIDr:
   2305     case PGW_OBM2_PRIORITY_MAPr:
   2306     case PGW_OBM2_THRESHOLDr:
   2307     case PGW_OBM2_THRESHOLD2r:
   2308     case PGW_OBM2_LOW_PRI_DROP_PROBr:
   2309     case PGW_OBM2_TM_CONTROLr:
   2310     case PGW_OBM2_ECC_ENABLEr:
   2311     case PGW_OBM2_ECC_STATUSr:
   2312     case PGW_OBM2_USE_COUNTERr:
   2313     case PGW_OBM2_MAX_USAGEr:
   2314     case PGW_OBM2_LOW_PRI_PKT_DROPr:
   2315     case PGW_OBM2_LOW_PRI_BYTE_DROPr:
   2316     case PGW_OBM2_HIGH_PRI_PKT_DROPr:
   2317     case PGW_OBM2_HIGH_PRI_BYTE_DROPr:
   2318     case PGW_OBM3_CONTROLr:
   2319     case PGW_OBM3_SHARED_CONFIGr:
   2320     case PGW_OBM3_NIV_ETHERTYPEr:
   2321     case PGW_OBM3_PE_ETHERTYPEr:
   2322     case PGW_OBM3_OUTER_TPIDr:
   2323     case PGW_OBM3_INNER_TPIDr:
   2324     case PGW_OBM3_PRIORITY_MAPr:
   2325     case PGW_OBM3_THRESHOLDr:
   2326     case PGW_OBM3_THRESHOLD2r:
   2327     case PGW_OBM3_LOW_PRI_DROP_PROBr:
   2328     case PGW_OBM3_TM_CONTROLr:
   2329     case PGW_OBM3_ECC_ENABLEr:
   2330     case PGW_OBM3_ECC_STATUSr:
   2331     case PGW_OBM3_USE_COUNTERr:
   2332     case PGW_OBM3_MAX_USAGEr:
   2333     case PGW_OBM3_LOW_PRI_PKT_DROPr:
   2334     case PGW_OBM3_LOW_PRI_BYTE_DROPr:
   2335     case PGW_OBM3_HIGH_PRI_PKT_DROPr:
   2336     case PGW_OBM3_HIGH_PRI_BYTE_DROPr:
   2337         switch (ainfo->reg) {
   2338         case PGW_OBM0_CONTROLr:
   2339         case PGW_OBM0_SHARED_CONFIGr:
   2340         case PGW_OBM0_NIV_ETHERTYPEr:
   2341         case PGW_OBM0_PE_ETHERTYPEr:
   2342         case PGW_OBM0_OUTER_TPIDr:
   2343         case PGW_OBM0_INNER_TPIDr:
   2344         case PGW_OBM0_PRIORITY_MAPr:
   2345         case PGW_OBM0_THRESHOLDr:
   2346         case PGW_OBM0_THRESHOLD2r:
   2347         case PGW_OBM0_LOW_PRI_DROP_PROBr:
   2348         case PGW_OBM0_TM_CONTROLr:
   2349         case PGW_OBM0_ECC_ENABLEr:
   2350         case PGW_OBM0_ECC_STATUSr:
   2351         case PGW_OBM0_USE_COUNTERr:
   2352         case PGW_OBM0_MAX_USAGEr:
   2353         case PGW_OBM0_LOW_PRI_PKT_DROPr:
   2354         case PGW_OBM0_LOW_PRI_BYTE_DROPr:
   2355         case PGW_OBM0_HIGH_PRI_PKT_DROPr:
   2356         case PGW_OBM0_HIGH_PRI_BYTE_DROPr:
   2357             xlp = 0;
   2358             break;
   2359         case PGW_OBM1_CONTROLr:
   2360         case PGW_OBM1_SHARED_CONFIGr:
   2361         case PGW_OBM1_NIV_ETHERTYPEr:
   2362         case PGW_OBM1_PE_ETHERTYPEr:
   2363         case PGW_OBM1_OUTER_TPIDr:
   2364         case PGW_OBM1_INNER_TPIDr:
   2365         case PGW_OBM1_PRIORITY_MAPr:
   2366         case PGW_OBM1_THRESHOLDr:
   2367         case PGW_OBM1_THRESHOLD2r:
   2368         case PGW_OBM1_LOW_PRI_DROP_PROBr:
   2369         case PGW_OBM1_TM_CONTROLr:
   2370         case PGW_OBM1_ECC_ENABLEr:
   2371         case PGW_OBM1_ECC_STATUSr:
   2372         case PGW_OBM1_USE_COUNTERr:
   2373         case PGW_OBM1_MAX_USAGEr:
   2374         case PGW_OBM1_LOW_PRI_PKT_DROPr:
   2375         case PGW_OBM1_LOW_PRI_BYTE_DROPr:
   2376         case PGW_OBM1_HIGH_PRI_PKT_DROPr:
   2377         case PGW_OBM1_HIGH_PRI_BYTE_DROPr:
   2378             xlp = 1;
   2379             break;
   2380         case PGW_OBM2_CONTROLr:
   2381         case PGW_OBM2_SHARED_CONFIGr:
   2382         case PGW_OBM2_NIV_ETHERTYPEr:
   2383         case PGW_OBM2_PE_ETHERTYPEr:
   2384         case PGW_OBM2_OUTER_TPIDr:
   2385         case PGW_OBM2_INNER_TPIDr:
   2386         case PGW_OBM2_PRIORITY_MAPr:
   2387         case PGW_OBM2_THRESHOLDr:
   2388         case PGW_OBM2_THRESHOLD2r:
   2389         case PGW_OBM2_LOW_PRI_DROP_PROBr:
   2390         case PGW_OBM2_TM_CONTROLr:
   2391         case PGW_OBM2_ECC_ENABLEr:
   2392         case PGW_OBM2_ECC_STATUSr:
   2393         case PGW_OBM2_USE_COUNTERr:
   2394         case PGW_OBM2_MAX_USAGEr:
   2395         case PGW_OBM2_LOW_PRI_PKT_DROPr:
   2396         case PGW_OBM2_LOW_PRI_BYTE_DROPr:
   2397         case PGW_OBM2_HIGH_PRI_PKT_DROPr:
   2398         case PGW_OBM2_HIGH_PRI_BYTE_DROPr:
   2399             xlp = 2;
   2400             break;
   2401         case PGW_OBM3_CONTROLr:
   2402         case PGW_OBM3_SHARED_CONFIGr:
   2403         case PGW_OBM3_NIV_ETHERTYPEr:
   2404         case PGW_OBM3_PE_ETHERTYPEr:
   2405         case PGW_OBM3_OUTER_TPIDr:
   2406         case PGW_OBM3_INNER_TPIDr:
   2407         case PGW_OBM3_PRIORITY_MAPr:
   2408         case PGW_OBM3_THRESHOLDr:
   2409         case PGW_OBM3_THRESHOLD2r:
   2410         case PGW_OBM3_LOW_PRI_DROP_PROBr:
   2411         case PGW_OBM3_TM_CONTROLr:
   2412         case PGW_OBM3_ECC_ENABLEr:
   2413         case PGW_OBM3_ECC_STATUSr:
   2414         case PGW_OBM3_USE_COUNTERr:
   2415         case PGW_OBM3_MAX_USAGEr:
   2416         case PGW_OBM3_LOW_PRI_PKT_DROPr:
   2417         case PGW_OBM3_LOW_PRI_BYTE_DROPr:
   2418         case PGW_OBM3_HIGH_PRI_PKT_DROPr:
   2419         case PGW_OBM3_HIGH_PRI_BYTE_DROPr:
   2420             xlp = 3;
   2421             break;
   2422         default:
   2423             return SOC_E_INTERNAL;
   2424         }
   2425         pgw = port;
   2426         index = pgw * 4 + xlp;
   2427         for (blk = 0; SOC_BLOCK_TYPE(unit, blk) >= 0; blk++) {
   2428             if (SOC_BLOCK_TYPE(unit, blk) != SOC_BLK_XLPORT) {
   2429                 continue;
   2430             }
   2431             if (SOC_BLOCK_NUMBER(unit, blk) == index) {
   2432                 if (!SOC_INFO(unit).block_valid[blk]) {
   2433                     goto skip;
   2434                 }
   2435             }
   2436         }
   2437         break;
   2438     default:
   2439         break;
   2440     }
   2441 
   2442     return 0;
   2443 skip:
   2444     /* set mask to all 0's so test will skip it */
   2445     if (mask != NULL) {
   2446         COMPILER_64_SET(*mask, 0, 0);
   2447     }
   2448     return 1;
   2449 }
   2450 #endif /* BCM_TRIDENT2_SUPPORT */
   2451 #ifdef BCM_TOMAHAWK3_SUPPORT
   2452 STATIC int
   2453 reg_mask_subset_tomahawk3(int unit, soc_regaddrinfo_t *ainfo, uint64 *mask)
   2454 {
   2455     /* Enable all register accesses */
   2456     soc_info_t *si;
   2457     int phy_port, port_value;
   2458     soc_reg_t reg=ainfo->reg;
   2459     soc_reg_t reg_excep_list[]={MMU_CRB_DEVICE_PORT_TO_MMU_PORT_MAPPINGr,
   2460                                 MMU_RQE_REPL_PORT_AGG_MAPr};
   2461     int reg_index, num_regs, add_exception = 0;
   2462 
   2463 
   2464     if (!SOC_PORT_VALID(unit, ainfo->port)) {
   2465            return 0;
   2466     }
   2467     si = &SOC_INFO(unit);
   2468     if (SOC_REG_BLOCK_IN_LIST(unit, reg, SOC_BLK_MMU_GLB) ||
   2469         SOC_REG_BLOCK_IN_LIST(unit, reg, SOC_BLK_MMU_ITM) ||
   2470         SOC_REG_BLOCK_IN_LIST(unit, reg, SOC_BLK_MMU_EB)) {
   2471         num_regs = sizeof(reg_excep_list) / sizeof(soc_reg_t);
   2472         for(reg_index = 0;reg_index < num_regs;reg_index++) {
   2473             if (reg_excep_list[reg_index] == reg) {
   2474                 add_exception = 1;
   2475                 break;
   2476             }
   2477         }
   2478         if (add_exception) {
   2479             port_value = ainfo->port;
   2480         } else {
   2481             phy_port = si->port_l2p_mapping[ainfo->port];
   2482             port_value = si->port_p2m_mapping[phy_port];
   2483         }
   2484     } else {
   2485         port_value = ainfo->port;
   2486     }
   2487     if (!SOC_REG_PORT_IDX_VALID(unit, reg, port_value, ainfo->idx)) {
   2488         goto skip;
   2489     }
   2490 
   2491     return 0;
   2492 
   2493 skip:
   2494     /* set mask to all 0's so test will skip it */
   2495     if (mask != NULL) {
   2496         COMPILER_64_SET(*mask, 0, 0);
   2497     }
   2498     return 1;
   2499 
   2500 }
   2501 #endif
   2502 
   2503 #ifdef BCM_TOMAHAWK_SUPPORT
   2504 
   2505 STATIC int
   2506 reg_mask_subset_tomahawk(int unit, soc_regaddrinfo_t *ainfo, uint64 *mask)
   2507 {
   2508     soc_info_t *si;
   2509     soc_reg_t reg;
   2510     int phy_port, port_value, inst;
   2511     int instance_mask = 0;
   2512     int xpe, acc_type, base_type;
   2513     soc_reg_info_t *reginfo;
   2514 
   2515     reg = ainfo->reg;
   2516     reginfo = &SOC_REG_INFO(unit, reg);
   2517 
   2518     if (REG_PORT_ANY != ainfo->port) {
   2519         instance_mask = ainfo->port & SOC_REG_ADDR_INSTANCE_MASK;
   2520         if (instance_mask) {
   2521             inst = ainfo->port & ~SOC_REG_ADDR_INSTANCE_MASK;
   2522             if (SOC_REG_BLOCK_IN_LIST(unit, reg, SOC_BLK_MMU_XPE)) {
   2523                 if (SOC_REG_UNIQUE_ACC(unit, reg) != NULL) {
   2524                     switch (reginfo->regtype) {
   2525                     case soc_layerreg:
   2526                         break;
   2527                     default:
   2528                         reg = SOC_REG_UNIQUE_ACC(unit, reg)[0];
   2529                         break;
   2530                     }
   2531                 }
   2532                 acc_type = SOC_REG_ACC_TYPE(unit, reg);
   2533                 xpe = acc_type < SOC_MAX_NUM_PIPES ? acc_type : -1;
   2534                 base_type = SOC_REG_BASE_TYPE(unit, reg);
   2535                 if (soc_tomahawk_xpe_base_index_check(unit, base_type, xpe,
   2536                                                       inst, NULL) < 0) {
   2537                     goto skip;
   2538                 }
   2539             } else if (SOC_REG_BLOCK_IN_LIST(unit, reg, SOC_BLK_MMU_SC)) {
   2540                 if (SOC_REG_UNIQUE_ACC(unit, reg) != NULL) {
   2541                     reg = SOC_REG_UNIQUE_ACC(unit, reg)[0];
   2542                 }
   2543                 acc_type = SOC_REG_ACC_TYPE(unit, reg);
   2544                 xpe = acc_type < SOC_MAX_NUM_PIPES ? acc_type : -1;
   2545                 base_type = SOC_REG_BASE_TYPE(unit, reg);
   2546                 if (soc_tomahawk_sc_base_index_check(unit, base_type, xpe,
   2547                                                      inst, NULL) < 0) {
   2548                     goto skip;
   2549                 }
   2550 #ifdef BCM_TOMAHAWK2_SUPPORT
   2551             } else if (SOC_REG_BLOCK_IN_LIST(unit, reg, SOC_BLK_MMU_SED)) {
   2552                 if (SOC_REG_UNIQUE_ACC(unit, reg) != NULL) {
   2553                     reg = SOC_REG_UNIQUE_ACC(unit, reg)[0];
   2554                 }
   2555                 acc_type = SOC_REG_ACC_TYPE(unit, reg);
   2556                 xpe = acc_type < SOC_MAX_NUM_PIPES ? acc_type : -1;
   2557                 base_type = SOC_REG_BASE_TYPE(unit, reg);
   2558                 if (soc_tomahawk2_sed_base_index_check(unit, base_type, xpe,
   2559                                                        inst, NULL) < 0) {
   2560                     goto skip;
   2561                 }
   2562 #endif /* BCM_TOMAHAWK2_SUPPORT */
   2563             }
   2564         } else {
   2565             if (!SOC_PORT_VALID(unit, ainfo->port)) {
   2566                 return 0;
   2567             }
   2568             si = &SOC_INFO(unit);
   2569             if (SOC_REG_BLOCK_IN_LIST(unit, reg, SOC_BLK_MMU_GLB) ||
   2570                 SOC_REG_BLOCK_IN_LIST(unit, reg, SOC_BLK_MMU_XPE) ||
   2571                 SOC_REG_BLOCK_IN_LIST(unit, reg, SOC_BLK_MMU_SED) ||
   2572                 SOC_REG_BLOCK_IN_LIST(unit, reg, SOC_BLK_MMU_SC)) {
   2573                 phy_port = si->port_l2p_mapping[ainfo->port];
   2574                 port_value = si->port_p2m_mapping[phy_port];
   2575             } else {
   2576                 port_value = ainfo->port;
   2577             }
   2578             if (!SOC_REG_PORT_IDX_VALID(unit, reg, port_value, ainfo->idx)) {
   2579                 goto skip;
   2580             }
   2581         }
   2582     } else {
   2583 #if defined(BCM_TOMAHAWK2_SUPPORT) || defined(BCM_TRIDENT3_SUPPORT)
   2584         if (SOC_IS_TOMAHAWK2(unit) || SOC_IS_TRIDENT3X(unit)) {
   2585             if (SOC_REG_BLOCK_IN_LIST(unit, reg, SOC_BLK_OTPC)) {
   2586                 inst = SOC_BLOCK_NUMBER(unit, ainfo->block);
   2587                 /* Can not read OTPC1 registers */
   2588                 if (inst == 1) {
   2589                     goto skip;
   2590                 }
   2591             }
   2592         }
   2593 #endif /* BCM_TOMAHAWK2_SUPPORT || BCM_TRIDENT3_SUPPORT*/
   2594     }
   2595 
   2596     if (SOC_IS_TRIDENT3X(unit)) {
   2597         switch (ainfo->reg) {
   2598             case XLPORT_MIB_RSC_RAM_CONTROLr:
   2599             /* RH_DLB_SELECTION field in ENHANCED_HASHING_CONTROL needs to be set to 1
   2600              *  in oder to use RH. This can't be set by default to 1 in init time.
   2601              *  Hence skip RH related following registers during test.
   2602              */
   2603             case RH_ECMP1_DROPSr:
   2604             case RH_ECMP1_DROPS_PIPE0r:
   2605             case RH_ECMP1_DROPS_PIPE1r:
   2606             case RH_ECMP2_DROPSr:
   2607             case RH_ECMP2_DROPS_PIPE0r:
   2608             case RH_ECMP2_DROPS_PIPE1r:
   2609             case RH_HGT_DROPSr:
   2610             case RH_HGT_DROPS_PIPE0r:
   2611             case RH_HGT_DROPS_PIPE1r:
   2612             case RH_LAG_DROPSr:
   2613             case RH_LAG_DROPS_PIPE0r:
   2614             case RH_LAG_DROPS_PIPE1r:
   2615             /* CCH psuedo registers need to be skipped */
   2616             case FLEXIBLE_IPV6_EXT_HDRr:
   2617             case ING_FCOE_ETHERTYPEr:
   2618             case ING_L2_TUNNEL_PARSE_CONTROLr:
   2619             case MIM_ETHERTYPEr:
   2620             case ING_PACKET_PROCESSING_CONTROL_0r:
   2621             case ING_PACKET_PROCESSING_CONTROL_1r:
   2622 #ifdef BCM_HELIX5_SUPPORT
   2623            case TOP_XG_PLL0_CTRL_0r:
   2624            case TOP_XG_PLL0_CTRL_1r:
   2625            case TOP_XG_PLL0_CTRL_2r:
   2626            case TOP_XG_PLL0_CTRL_3r:
   2627            case TOP_XG_PLL0_CTRL_4r:
   2628            case TOP_XG_PLL0_CTRL_5r:
   2629            case TOP_XG_PLL0_CTRL_6r:
   2630            case TOP_XG_PLL0_CTRL_7r:
   2631            case TOP_XG_PLL0_CTRL_8r:
   2632            case TOP_XG_PLL0_CTRL_9r:
   2633            case TOP_XG_PLL0_CTRL_10r:
   2634            case TOP_XG_PLL0_CTRL_11r:
   2635            case TOP_XG_PLL0_CTRL_12r:
   2636            case TOP_XG_PLL0_CTRL_13r:
   2637            case TOP_XG_PLL0_STATUSr:
   2638            case TOP_XG_PLL1_CTRL_0r:
   2639            case TOP_XG_PLL1_CTRL_1r:
   2640            case TOP_XG_PLL1_CTRL_2r:
   2641            case TOP_XG_PLL1_CTRL_3r:
   2642            case TOP_XG_PLL1_CTRL_4r:
   2643            case TOP_XG_PLL1_CTRL_5r:
   2644            case TOP_XG_PLL1_CTRL_6r:
   2645            case TOP_XG_PLL1_CTRL_7r:
   2646            case TOP_XG_PLL1_CTRL_8r:
   2647            case TOP_XG_PLL1_CTRL_9r:
   2648            case TOP_XG_PLL1_CTRL_10r:
   2649            case TOP_XG_PLL1_CTRL_11r:
   2650            case TOP_XG_PLL1_CTRL_12r:
   2651            case TOP_XG_PLL1_CTRL_13r:
   2652            case TOP_XG_PLL1_STATUSr:
   2653            case TOP_HW_TAP_CONTROLr:
   2654 #endif
   2655                 goto skip;
   2656             default:
   2657                 if (SOC_REG_BLOCK_IS(unit, ainfo->reg, SOC_BLK_AVS)) {
   2658                     /* Skip AVS block registers */
   2659                    goto skip;
   2660                 }
   2661                 break;
   2662         }
   2663     }
   2664  
   2665     return 0;
   2666 
   2667 skip:
   2668     /* set mask to all 0's so test will skip it */
   2669     if (mask != NULL) {
   2670         COMPILER_64_SET(*mask, 0, 0);
   2671     }
   2672     return 1;
   2673 }
   2674 #endif /* BCM_TOMAHAWK_SUPPORT */
   2675 
   2676 #ifdef BCM_APACHE_SUPPORT
   2677 STATIC int
   2678 reg_mask_subset_apache(int unit, soc_regaddrinfo_t *ainfo, uint64 *mask)
   2679 {
   2680     int port, instance_mask = 0;
   2681 
   2682     port = ainfo->port;
   2683 
   2684     if (REG_PORT_ANY != port) {
   2685 
   2686         instance_mask = port & SOC_REG_ADDR_INSTANCE_MASK;
   2687         if (instance_mask) {
   2688             port &= (~SOC_REG_ADDR_INSTANCE_MASK);
   2689         }
   2690 
   2691         /* CLPORT registers - Only CL and CLG2 ports */
   2692         if (((ainfo->reg >= CLPORT_CNTMAXSIZEr) &&
   2693              (ainfo->reg <= CLPORT_XGXS_COUNTER_MODEr)) &&
   2694             (!(IS_CL_PORT(unit, port) || IS_CLG2_PORT(unit, port)))) {
   2695 
   2696             goto skip;
   2697         }
   2698 
   2699         /* CLMAC registers - Only CL ports */
   2700         if (((ainfo->reg >= CLMAC_CLEAR_ECC_STATUSr) &&
   2701              (ainfo->reg <= CLMAC_TX_MAC_SAr)) &&
   2702             (!IS_CL_PORT(unit, port))) {
   2703 
   2704             goto skip;
   2705         }
   2706 
   2707         /* CLG2MAC registers - Only CLG2 ports */
   2708         if (((ainfo->reg >= CLG2MAC_CLEAR_ECC_STATUSr) &&
   2709              (ainfo->reg <= CLG2MAC_TX_MAC_SAr)) &&
   2710             (!IS_CLG2_PORT(unit, port))) {
   2711 
   2712             goto skip;
   2713         }
   2714 
   2715 
   2716         /* XLPORT registers - Only XL, XLB0 and CXX ports */
   2717         if (((ainfo->reg >= XLPORT_CNTMAXSIZEr) &&
   2718              (ainfo->reg <= XLPORT_XGXS_COUNTER_MODEr)) &&
   2719             (!(IS_XL_PORT(unit, port) || IS_XLB0_PORT(unit, port) || IS_CXX_PORT(unit, port)))) {
   2720 
   2721             goto skip;
   2722         }
   2723 
   2724         /* XLMAC registers - Only XL ports */
   2725         if (((ainfo->reg >= XLMAC_CLEAR_ECC_STATUSr) &&
   2726              (ainfo->reg <= XLMAC_TX_MAC_SAr)) &&
   2727             (!IS_XL_PORT(unit, port))) {
   2728 
   2729             goto skip;
   2730         }
   2731 
   2732         /* XLMAC_B0 registers - Only XLB0 ports */
   2733         if (((ainfo->reg >= XLMAC_B0_CLEAR_ECC_STATUSr) &&
   2734              (ainfo->reg <= XLMAC_B0_TX_MAC_SAr)) &&
   2735             (!IS_XLB0_PORT(unit, port))) {
   2736 
   2737             goto skip;
   2738         }
   2739 
   2740         /* SOC_REG_PORT_IDX_VALID check should be done with appropriate
   2741          * port type; mmu port for mmu block registers. phy port for port registers
   2742  */
   2743         if (SOC_REG_BLOCK_IN_LIST(unit, ainfo->reg, SOC_BLK_MMU)) {
   2744             /* mmu port */
   2745             port = SOC_INFO(unit).port_p2m_mapping[SOC_INFO(unit).port_l2p_mapping[port]];
   2746         } else if (SOC_BLOCK_IN_LIST(SOC_REG_INFO(unit, ainfo->reg).block, SOC_BLK_PORT)) {
   2747             /* phy port */
   2748             port = SOC_INFO(unit).port_l2p_mapping[port];
   2749         }
   2750 
   2751         /* Per-Port register is not implemented in the regsiter array */
   2752         if (!SOC_REG_PORT_IDX_VALID(unit,ainfo->reg, port, ainfo->idx)) {
   2753             goto skip;
   2754         }
   2755 
   2756     } else {
   2757         if (!SOC_INFO(unit).block_valid[ainfo->block]) {
   2758             goto skip;
   2759         }
   2760     }
   2761 
   2762     switch (ainfo->reg) {
   2763 
   2764 #ifdef TR_TESTS_EXCLUDE
   2765     case CFAPCONFIGr:
   2766     case CFAPFULLSETPOINTr:
   2767     case CFAPFULLRESETPOINTr:
   2768         /* Only a few values (See regsfile) can be set. Skip. */
   2769         goto skip;
   2770 #endif
   2771     case AVS_REG_PMB_SLAVE_AVS_PWD_ACC_CONTROLr:
   2772     case AVS_REG_PMB_SLAVE_AVS_PWD_CONTROLr:
   2773     case AVS_REG_PMB_SLAVE_AVS_ROSC_CONTROLr:
   2774     case AVS_REG_PMB_SLAVE_AVS_ROSC_H_THRESHOLDr:
   2775     case AVS_REG_PMB_SLAVE_AVS_ROSC_S_THRESHOLDr:
   2776     case AVS_REG_PMB_SLAVE_BPCM_CONTROLr:
   2777         /* ARS wrappers stubbed out in QT. Register access will fail */
   2778          if (SAL_BOOT_QUICKTURN) {
   2779              goto skip;
   2780          }
   2781          break;  
   2782 #if defined(BCM_MONTEREY_SUPPORT) 
   2783      case SP_GLB_MIB_CTRLr :
   2784      case XLPORT_TXPI_CSR_CTRL1r :
   2785               if (SOC_IS_MONTEREY(unit)) { 
   2786                   goto skip;
   2787                } 
   2788 #endif 
   2789     default:
   2790         break;
   2791     }
   2792 
   2793     return 0;
   2794 
   2795 skip:
   2796 
   2797     /* set mask to all 0's so test will skip it */
   2798     if (mask != NULL) {
   2799         COMPILER_64_SET(*mask, 0, 0);
   2800     }
   2801     return 1;
   2802 }
   2803 #endif /* BCM_APACHE_SUPPORT */
   2804 
   2805 #ifdef BCM_TRIUMPH3_SUPPORT
   2806 STATIC int
   2807 reg_mask_subset_tr3(int unit, soc_regaddrinfo_t *ainfo, uint64 *mask)
   2808 {
   2809     pbmp_t *tr3_8mcq_ports_32_35;
   2810     pbmp_t *tr3_8mcq_ports_36_39;
   2811     pbmp_t *tr3_10mcq_ports_40_47;
   2812     pbmp_t *tr3_10mcq_ports_48_55;
   2813     pbmp_t *tr3_wlan_encap_ports;
   2814     pbmp_t *tr3_pass_thru_ports;
   2815     pbmp_t *tr3_cpu_ports;
   2816     pbmp_t *tr3_high_speed_ports;
   2817     pbmp_t *tr3_all_ports;
   2818     pbmp_t *tr3_cl_ports;
   2819     pbmp_t *tr3_repl_head_ports;
   2820     pbmp_t *tr3_ports_none;
   2821 #define _REG_MASK_SUBSET_MAX_TR3 12
   2822     pbmp_t **mask_map_arr[_REG_MASK_SUBSET_MAX_TR3];
   2823     int i, count = _REG_MASK_SUBSET_MAX_TR3;
   2824     uint64 temp_mask;
   2825     pbmp_t *pbmp;
   2826     soc_port_t port;
   2827     uint16 dev_id;
   2828     uint8 rev_id;
   2829 
   2830     mask_map_arr[0] = &tr3_8mcq_ports_32_35;
   2831     mask_map_arr[1] = &tr3_8mcq_ports_36_39;
   2832     mask_map_arr[2] = &tr3_10mcq_ports_40_47;
   2833     mask_map_arr[3] = &tr3_10mcq_ports_48_55;
   2834     mask_map_arr[4] = &tr3_wlan_encap_ports;
   2835     mask_map_arr[5] = &tr3_pass_thru_ports;
   2836     mask_map_arr[6] = &tr3_cpu_ports;
   2837     mask_map_arr[7] = &tr3_high_speed_ports;
   2838     mask_map_arr[8] = &tr3_all_ports;
   2839     mask_map_arr[9] = &tr3_cl_ports;
   2840     mask_map_arr[10] = &tr3_repl_head_ports;
   2841     mask_map_arr[11] = &tr3_ports_none;
   2842     if (NULL == SOC_REG_MASK_SUBSET(unit)) {
   2843         soc_info_t *si = &SOC_INFO(unit);
   2844         soc_port_t mmu_port, phy_port;
   2845         
   2846         _INIT_REG_MASK_SUBSETS(unit, i, count, mask_map_arr);
   2847 
   2848         /* 8MCQ = MMU[32-35] */
   2849         SOC_PBMP_CLEAR(*tr3_8mcq_ports_32_35);
   2850         for (mmu_port = 32; mmu_port < 36; mmu_port++) {
   2851             phy_port = si->port_m2p_mapping[mmu_port];
   2852             port = (phy_port == -1) ? -1 : si->port_p2l_mapping[phy_port];
   2853             if (-1 != port) {
   2854                 SOC_PBMP_PORT_ADD(*tr3_8mcq_ports_32_35, port);
   2855             }
   2856         }
   2857 
   2858         /* 8MCQ = MMU[36-39] */
   2859         SOC_PBMP_CLEAR(*tr3_8mcq_ports_36_39);
   2860         for (mmu_port = 36; mmu_port < 40; mmu_port++) {
   2861             phy_port = si->port_m2p_mapping[mmu_port];
   2862             port = (phy_port == -1) ? -1 : si->port_p2l_mapping[phy_port];
   2863             if (-1 != port) {
   2864                 SOC_PBMP_PORT_ADD(*tr3_8mcq_ports_36_39, port);
   2865             }
   2866         }
   2867 
   2868         /* 10MCQ = MMU[40-55] */
   2869         SOC_PBMP_CLEAR(*tr3_10mcq_ports_40_47);
   2870         for (mmu_port = 40; mmu_port < 48; mmu_port++) {
   2871             phy_port = si->port_m2p_mapping[mmu_port];
   2872             port = (phy_port == -1) ? -1 : si->port_p2l_mapping[phy_port];
   2873             if (-1 != port) {
   2874                 SOC_PBMP_PORT_ADD(*tr3_10mcq_ports_40_47, port);
   2875             }
   2876         }
   2877 
   2878         SOC_PBMP_CLEAR(*tr3_10mcq_ports_48_55);
   2879         for (mmu_port = 48; mmu_port < 56; mmu_port++) {
   2880             phy_port = si->port_m2p_mapping[mmu_port];
   2881             port = (phy_port == -1) ? -1 : si->port_p2l_mapping[phy_port];
   2882             if (-1 != port) {
   2883                 SOC_PBMP_PORT_ADD(*tr3_10mcq_ports_48_55, port);
   2884             }
   2885         }
   2886 
   2887         /* CPU port = MMU[59] */
   2888         SOC_PBMP_CLEAR(*tr3_cpu_ports);
   2889         SOC_PBMP_PORT_ADD(*tr3_cpu_ports, CMIC_PORT(unit));
   2890 
   2891         /* WLAN Encap = MMU[56] */
   2892         SOC_PBMP_CLEAR(*tr3_wlan_encap_ports);
   2893         SOC_PBMP_PORT_ADD(*tr3_wlan_encap_ports,
   2894                           AXP_PORT(unit, SOC_AXP_NLF_WLAN_ENCAP));
   2895 
   2896         /* Pass thru = MMU[58] */
   2897         SOC_PBMP_CLEAR(*tr3_pass_thru_ports);
   2898         SOC_PBMP_PORT_ADD(*tr3_pass_thru_ports,
   2899                           AXP_PORT(unit, SOC_AXP_NLF_PASSTHRU));
   2900 
   2901         /* High speed ports = MMU[48,52] */
   2902         SOC_PBMP_CLEAR(*tr3_high_speed_ports);
   2903         phy_port = si->port_m2p_mapping[48];
   2904         port = (phy_port == -1) ? -1 : si->port_p2l_mapping[phy_port];
   2905         if (-1 != port) {
   2906             SOC_PBMP_PORT_ADD(*tr3_high_speed_ports, port);
   2907         }
   2908         phy_port = si->port_m2p_mapping[52];
   2909         port = (phy_port == -1) ? -1 : si->port_p2l_mapping[phy_port];
   2910         if (-1 != port) {
   2911             SOC_PBMP_PORT_ADD(*tr3_high_speed_ports, port);
   2912         }
   2913 
   2914         /* CE ports */
   2915         SOC_PBMP_CLEAR(*tr3_cl_ports);
   2916         PBMP_CE_ITER(unit, port) {
   2917             SOC_PBMP_PORT_ADD(*tr3_cl_ports, port);
   2918         }
   2919         PBMP_HG_ITER(unit, port) {
   2920             if (si->port_speed_max[port] >= 100000) {
   2921                 SOC_PBMP_PORT_ADD(*tr3_cl_ports, port);
   2922             }
   2923         }
   2924 
   2925         /* All ports */
   2926         SOC_PBMP_CLEAR(*tr3_all_ports); 
   2927         SOC_PBMP_ASSIGN(*tr3_all_ports, PBMP_ALL(unit)); 
   2928 
   2929         /* Ports for REPL_HEAD_PTR_REPLACE */
   2930         SOC_PBMP_ASSIGN(*tr3_repl_head_ports, *tr3_all_ports);
   2931         SOC_PBMP_PORT_REMOVE(*tr3_repl_head_ports, CMIC_PORT(unit));
   2932 
   2933         SOC_PBMP_CLEAR(*tr3_ports_none);
   2934     }
   2935 
   2936     /* Non-port register */
   2937     if (mask != NULL) {
   2938         switch(ainfo->reg) {
   2939         case ETU_CONFIG0r:
   2940             if (!soc_feature(unit, soc_feature_esm_support)) {
   2941                  goto skip;
   2942 	    }
   2943             if (!soc_feature(unit, soc_feature_etu_support)) {
   2944                 /* HBIT_MEM_PSM_VDD bits are stuck without ESM */
   2945                 COMPILER_64_SET(temp_mask, 0, 0x00027fff);
   2946                 COMPILER_64_AND(*mask, temp_mask);
   2947 	     }
   2948             break;
   2949         case TOP_XG_PLL0_CTRL_0r:
   2950         case TOP_XG_PLL1_CTRL_0r:
   2951         case TOP_XG_PLL2_CTRL_0r:
   2952         case TOP_XG_PLL3_CTRL_0r:
   2953         case AUX_ARB_CONTROL_2r:
   2954         case TOP_TAP_CONTROLr:
   2955             
   2956             goto skip;
   2957        case ESMIF_CNP_SEARCH_REQ_COUNTr:
   2958        case ESMIF_CUR_PENDING_COST0r:
   2959        case ESMIF_CUR_PENDING_COST1r:
   2960        case ESMIF_CUR_PENDING_COST2r:
   2961        case ESMIF_DROP_COUNTr:
   2962        case ESMIF_INIT_CONFIGr:
   2963        case ESMIF_MAX_PENDING_COST0r:
   2964        case ESMIF_MAX_PENDING_COST1r:
   2965        case ESMIF_MAX_PENDING_COST2r:
   2966        case ESMIF_MULTI_ECC_PARITY_ERROR_LOGr:
   2967        case ESM_ADM_CTRL_FIFO_STATUSr:
   2968        case ESM_ADM_THR_DROP_ALL_COST0r:
   2969        case ESM_ADM_THR_DROP_ALL_COST1r:
   2970        case ESM_ADM_THR_DROP_ALL_COST2r:
   2971        case ESM_ADM_THR_DROP_ALL_RESET_COST0r:
   2972        case ESM_ADM_THR_DROP_ALL_RESET_COST1r:
   2973        case ESM_ADM_THR_DROP_ALL_RESET_COST2r:
   2974        case ESM_ADM_THR_DROP_OPT_COST0r:
   2975        case ESM_ADM_THR_DROP_OPT_COST1r:
   2976        case ESM_ADM_THR_DROP_OPT_COST2r:
   2977        case ESM_ADM_THR_DROP_OPT_RESET_COST0r:
   2978        case ESM_ADM_THR_DROP_OPT_RESET_COST1r:
   2979        case ESM_ADM_THR_DROP_OPT_RESET_COST2r:
   2980        case ESM_AGE_CNTr:
   2981        case ESM_AXP_THR_XOFF_COST0r:
   2982        case ESM_AXP_THR_XOFF_COST1r:
   2983        case ESM_AXP_THR_XOFF_COST2r:
   2984        case ESM_AXP_THR_XOFF_RESET_COST0r:
   2985        case ESM_AXP_THR_XOFF_RESET_COST1r:
   2986        case ESM_AXP_THR_XOFF_RESET_COST2r:
   2987        case ESM_CONTAINER_SELECTr:
   2988        case ESM_CTLr:
   2989        case ESM_ERR_CTLr:
   2990        case ESM_ET_HWTL_CONTROLr:
   2991        case ESM_ET_HWTL_EVENT_ERR_INFOr:
   2992        case ESM_ET_HWTL_MM_INFOr:
   2993        case ESM_ET_HWTL_STATUS_0r:
   2994        case ESM_ET_HWTL_STATUS_1r:
   2995        case ESM_ET_RSP_CBA_MM_INFOr:
   2996        case ESM_ET_RSP_FIFO_STATUSr:
   2997        case ESM_EVENT_ERR_STATUS_INTRr:
   2998        case ESM_EVENT_ERR_STATUS_INTR_ENABLEr:
   2999        case ESM_EXT_HITBIT_CONTROLr:
   3000        case ESM_FIFO_MAX_COUNTSr:
   3001        case ESM_KEYGEN_CTLr:
   3002        case ESM_L2_AGE_CTLr:
   3003        case ESM_L2_AGE_STATUSr:
   3004        case ESM_MAX_LATENCY_RECORDEDr:
   3005        case ESM_MEMORY_DBGCTRL_0r:
   3006        case ESM_MEMORY_DBGCTRL_1r:
   3007        case ESM_MEMORY_DBGCTRL_2r:
   3008        case ESM_MEMORY_DBGCTRL_3r:
   3009        case ESM_MEMORY_DBGCTRL_4r:
   3010        case ESM_MISC_CONTROLr:
   3011        case ESM_MISC_STATUSr:
   3012        case ESM_MODE_PER_PORTr:
   3013        case ESM_OPT_REQ_INTERVALr:
   3014        case ESM_PER_PORT_AGE_CONTROLr:
   3015        case ESM_PER_PORT_REPL_CONTROLr:
   3016        case ESM_PKT_TYPE_ID_CAM_BIST_CONFIGr:
   3017        case ESM_PKT_TYPE_ID_CAM_BIST_DBGCTRLr:
   3018        case ESM_PKT_TYPE_ID_CAM_BIST_DBG_DATAr:
   3019        case ESM_PKT_TYPE_ID_CAM_BIST_STATUSr:
   3020        case ESM_PKT_TYPE_ID_CAM_DBGCTRLr:
   3021        case ESM_PPA_STATUSr:
   3022        case ESM_REQUEST_LANE_MAPr:
   3023        case ESM_REUSE_COUNTER_0r:
   3024        case ESM_REUSE_COUNTER_1r:
   3025        case ESM_REUSE_COUNTER_2r:
   3026        case ESM_REUSE_COUNTER_3r:
   3027        case ESM_SEARCH_PROFILE_BASEr:
   3028        case ETU_CONFIG1r:
   3029        case ETU_CONFIG2r:
   3030        case ETU_CONFIG4r:
   3031             if (!soc_feature(unit, soc_feature_esm_support)) {
   3032             goto skip;
   3033             }
   3034        /*coverity[unterminated_case:FALSE]*/	    
   3035         case ICFG_EN_COR_ERR_RPTr:
   3036         case IPARS_EN_COR_ERR_RPTr:
   3037         case IESMIF_EN_COR_ERR_RPTr:
   3038         case EGR_EL3_EN_COR_ERR_RPTr:
   3039         case EGR_EHCPM_EN_COR_ERR_RPTr:
   3040         case EGR_1588_TIMER_VALUEr:
   3041         case EGR_1588_EGRESS_CTRLr:
   3042         case EGR_1588_TIMER_DEBUGr:
   3043         case EGR_1588_PARSING_CONTROLr:
   3044         case LLS_CONFIG0r:
   3045         case LLS_SP_WERR_DYN_CHANGE_0r:
   3046         case LLS_SP_WERR_DYN_CHANGE_1r:
   3047         case LLS_SP_WERR_DYN_CHANGE_2r:
   3048         case LLS_SP_WERR_DYN_CHANGE_3r:
   3049         case LLS_SP_WERR_DYN_CHANGE_0Ar:
   3050         case LLS_SP_WERR_DYN_CHANGE_1Ar:
   3051         case LLS_SP_WERR_DYN_CHANGE_2Ar:
   3052         case LLS_SP_WERR_DYN_CHANGE_3Ar:
   3053         case LLS_SP_WERR_DYN_CHANGE_0Br:
   3054         case LLS_SP_WERR_DYN_CHANGE_1Br:
   3055         case LLS_SP_WERR_DYN_CHANGE_2Br:
   3056         case LLS_SP_WERR_DYN_CHANGE_3Br:
   3057         case LLS_TDM_CAL_CFGr:
   3058         case LLS_FC_CONFIGr:   
   3059         case ISM_INTR_MASKr:
   3060         case PORT_MODE_REGr:
   3061         case PORT_TS_TIMER_31_0_REGr:
   3062         case PORT_TS_TIMER_47_32_REGr:
   3063         case XMAC_OSTS_TIMESTAMP_ADJUSTr:
   3064             soc_cm_get_id(unit, &dev_id, &rev_id);
   3065             if (rev_id < BCM56640_B0_REV_ID) {
   3066                 goto skip;
   3067             }
   3068         default:
   3069             break;
   3070         }
   3071     }
   3072 
   3073     if (!SOC_PORT_VALID(unit, ainfo->port)) {
   3074         return 0;
   3075     }
   3076     _MAP_REG_MASK_SUBSETS(unit, i, count, mask_map_arr);
   3077 
   3078     switch (ainfo->reg) {
   3079     case MCQ_FIFO_BASE_REG_32_35r:
   3080         /* PORTLIST => MMU[32..35] 8 MCQ (High-speed) */
   3081         pbmp = tr3_8mcq_ports_32_35;
   3082         break;
   3083     case MCQ_FIFO_BASE_REG_36_39r:
   3084         /* PORTLIST => MMU[36..39] 8 MCQ (High-speed) */
   3085         pbmp = tr3_8mcq_ports_36_39;
   3086         break;
   3087     case MCQ_FIFO_BASE_REGr:
   3088         /* PORTLIST => MMU[40..55] 10 MCQ (High-speed) */
   3089         pbmp = tr3_10mcq_ports_40_47;
   3090         break;
   3091     case MCQ_FIFO_BASE_REG_48_55r:
   3092         /* PORTLIST => MMU[40..55] 10 MCQ (High-speed) */
   3093         pbmp = tr3_10mcq_ports_48_55;
   3094         break;
   3095     case MCQ_FIFO_BASE_REG_56r:
   3096         /* PORTLIST => [56] */
   3097         pbmp = tr3_wlan_encap_ports;
   3098         break;
   3099     case MCQ_FIFO_BASE_REG_PASSTHRUr:
   3100         /* PORTLIST => [58] */
   3101         pbmp = tr3_pass_thru_ports;
   3102         break;
   3103     case MCQ_FIFO_BASE_REG_CPUr:
   3104         /* PORTLIST => [59] */
   3105         pbmp = tr3_cpu_ports;
   3106         break;
   3107 
   3108     case HES_PORT_CONFIGr:
   3109     case HES_L0_CONFIGr:
   3110     case HES_Q_MINSPr:
   3111     case HES_Q_COSMASKr:
   3112     case HES_Q_COSWEIGHTSr:
   3113     case HES_Q_WERRCOUNTr:
   3114         /* @MMU_HSP_PORT_NUMBERS (High-speed ports [48,52])*/
   3115         pbmp = tr3_high_speed_ports;
   3116         break;
   3117 
   3118     case CMAC_CTRLr:
   3119     case CMAC_MODEr:
   3120     case CMAC_SPARE0r:
   3121     case CMAC_SPARE1r:
   3122     case CMAC_TX_CTRLr:
   3123     case CMAC_TX_MAC_SAr:
   3124     case CMAC_RX_CTRLr:
   3125     case CMAC_RX_MAC_SAr:
   3126     case CMAC_RX_MAX_SIZEr:
   3127     case CMAC_RX_VLAN_TAGr:
   3128     case CMAC_RX_LSS_CTRLr:
   3129     case CMAC_RX_LSS_STATUSr:
   3130     case CMAC_CLEAR_RX_LSS_STATUSr:
   3131     case CMAC_PAUSE_CTRLr:
   3132     case CMAC_PFC_CTRLr:
   3133     case CMAC_PFC_TYPEr:
   3134     case CMAC_PFC_OPCODEr:
   3135     case CMAC_PFC_DAr:
   3136     case CMAC_LLFC_CTRLr:
   3137     case CMAC_TX_LLFC_MSG_FIELDSr:
   3138     case CMAC_RX_LLFC_MSG_FIELDSr:
   3139     case CMAC_HCFC_CTRLr:
   3140     case CMAC_TX_TIMESTAMP_FIFO_DATAr:
   3141     case CMAC_TX_TIMESTAMP_FIFO_STATUSr:
   3142     case CMAC_FIFO_STATUSr:
   3143     case CMAC_CLEAR_FIFO_STATUSr:
   3144     case CMAC_TX_FIFO_CREDITSr:
   3145     case CMAC_EEE_CTRLr:
   3146     case CMAC_EEE_TIMERSr:
   3147     case CMAC_EEE_1_SEC_LINK_STATUS_TIMERr:
   3148     case CMAC_TIMESTAMP_ADJUSTr:
   3149     case CMAC_MACSEC_CTRLr:
   3150     case CMAC_ECC_CTRLr:
   3151     case CMAC_ECC_STATUSr:
   3152     case CMAC_CLEAR_ECC_STATUSr:
   3153     case CMAC_VERSION_IDr:
   3154         /* CMAC registers (Only CL configured ports)*/
   3155         pbmp = tr3_cl_ports;
   3156         break;
   3157 
   3158     case REPL_HEAD_PTR_REPLACEr:
   3159         if (!soc_feature(unit, soc_feature_repl_head_ptr_replace)) {
   3160             pbmp = tr3_ports_none;
   3161             break;
   3162         }
   3163         /* [0..56,58,60,61] */
   3164         pbmp = tr3_repl_head_ports;
   3165         break;
   3166     
   3167     case THDO_PORT_E2ECC_COS_SPIDr:
   3168     case PORT_SW_FLOW_CONTROLr:
   3169         soc_cm_get_id(unit, &dev_id, &rev_id);
   3170         if ((rev_id < BCM56640_B0_REV_ID) && !SOC_IS_HELIX4(unit)) {
   3171             pbmp = tr3_ports_none;
   3172             break;
   3173         }
   3174         /* Fall through */
   3175 
   3176     default:
   3177         pbmp = tr3_all_ports;
   3178         break;
   3179     }
   3180 
   3181     if ((soc_portreg == SOC_REG_INFO(unit, ainfo->reg).regtype) &&
   3182         (!SOC_PBMP_MEMBER(*pbmp, ainfo->port))) {
   3183         goto skip; 
   3184     }
   3185 
   3186     switch (ainfo->reg) {
   3187 
   3188     case DEQ_AGINGMASKr:
   3189         /* PORTLIST => MMU[0..58,60..62] Non-CPU */
   3190     case XPORT_TO_MMU_BKPr:
   3191         /* @PFC_PORT_STS_REGS Non-CPU */
   3192     case BKPMETERINGCONFIG_64r:
   3193     case BKPMETERINGBUCKETr:
   3194     case MTRI_IFGr:
   3195         /* @MMU_MTRI_PORTS = MMU[0..58,60..62] */
   3196         if (IS_CPU_PORT(unit, ainfo->port)) {
   3197             goto skip;
   3198         }
   3199         break;
   3200     case OP_PORT_CONFIG_CELLr:
   3201     case OP_PORT_CONFIG1_CELLr:
   3202     case OP_PORT_LIMIT_COLOR_CELLr:
   3203     case OP_PORT_SHARED_COUNT_CELLr:
   3204     case OP_PORT_TOTAL_COUNT_CELLr:
   3205     case OP_PORT_LIMIT_RESUME_COLOR_CELLr:
   3206         /* @THDO_MC_PORT_LIST = MMU[0..56,58..62] */
   3207         if (ainfo->port > AXP_PORT(unit, SOC_AXP_NLF_SM)) {
   3208             goto skip;
   3209         }
   3210         break;
   3211 
   3212     case MCQ_FIFO_BASE_REG_CPUr:
   3213         /* PORTLIST => [59] */
   3214     case OP_CPU_QUEUE_BST_STATr:
   3215     case OP_CPU_QUEUE_BST_THRESHOLDr:
   3216         /* @THDO_CPU_BST_REGS */
   3217         if (!IS_CPU_PORT(unit, ainfo->port)) {
   3218             goto skip;
   3219         }
   3220         break;
   3221 
   3222     case L0_COSWEIGHTSr:
   3223     case L0_WERRCOUNTr:
   3224         /* @MMU_ES_REGS[0-9]=[48,52] */
   3225         if (!SOC_PBMP_MEMBER(*tr3_high_speed_ports, ainfo->port)) {
   3226             goto skip;
   3227         }
   3228         break;
   3229 
   3230     case OVQ_MCQ_CREDITSr:
   3231     case OVQ_MCQ_STATEr:
   3232         /* @OVQ_PORT_COS_REGS (all ports except cpu and lb port) */
   3233         if (ainfo->port == AXP_PORT(unit, SOC_AXP_NLF_WLAN_DECAP)) {
   3234             goto skip;
   3235         }
   3236         /* Fall thru */
   3237     case OP_QUEUE_CONFIG_CELLr:
   3238     case OP_QUEUE_CONFIG1_CELLr:
   3239     case OP_QUEUE_LIMIT_COLOR_CELLr:
   3240     case OP_QUEUE_RESET_OFFSET_CELLr:
   3241     case OP_QUEUE_MIN_COUNT_CELLr:
   3242     case OP_QUEUE_SHARED_COUNT_CELLr:
   3243     case OP_QUEUE_TOTAL_COUNT_CELLr:
   3244     case OP_QUEUE_RESET_VALUE_CELLr:
   3245     case OP_QUEUE_LIMIT_RESUME_COLOR_CELLr:
   3246         /* @THDO_PORT_COS_REGS */
   3247         if ((ainfo->port == AXP_PORT(unit, SOC_AXP_NLF_SM)) || 
   3248             (ainfo->port == AXP_PORT(unit, SOC_AXP_NLF_WLAN_DECAP))) {
   3249              if (ainfo->idx >= 1) {
   3250                 goto skip;
   3251             }
   3252         } else if (SOC_PBMP_MEMBER(*tr3_10mcq_ports_40_47, ainfo->port) ||
   3253                    SOC_PBMP_MEMBER(*tr3_10mcq_ports_48_55, ainfo->port)) {
   3254              if (ainfo->idx >= 10) {
   3255                 goto skip;
   3256             }
   3257         } else if (!IS_CPU_PORT(unit, ainfo->port)) {
   3258              if (ainfo->idx >= 8) {
   3259                 goto skip;
   3260             }
   3261         }
   3262         /* Else CPU port, all queues allowed */
   3263         break;
   3264     case TOP_HW_TAP_MEM_ECC_CTRLr:
   3265         if (SOC_IS_HELIX4(unit)) {
   3266             goto skip;
   3267         }
   3268     default:
   3269         break;
   3270     }
   3271 
   3272     return 0;
   3273 skip:
   3274     /* set mask to all 0's so test will skip it */
   3275     if (mask != NULL) {
   3276         COMPILER_64_SET(*mask, 0, 0);
   3277     }
   3278     return 1;
   3279 }
   3280 #endif /* BCM_TRIUMPH3_SUPPORT */
   3281 
   3282 #if 0 /* #ifdef BCM_KATANA_SUPPORT */
   3283 /* Remove this completely once the new function is fully verified */
   3284 STATIC int
   3285 reg_mask_subset_katana(int unit, soc_regaddrinfo_t *ainfo, uint64 *mask)
   3286 {
   3287     soc_info_t *si;
   3288     int i;
   3289     static int kt_port_init = 0;
   3290     static pbmp_t kt_ipipe_higig_ports;
   3291     static pbmp_t kt_epipe_ports_subports;
   3292     static pbmp_t kt_ports_0_35;
   3293     static pbmp_t kt_ports_25_28;
   3294     static pbmp_t kt_mmu_mtri_ports;
   3295     static pbmp_t kt_all_ports;
   3296     uint64 temp_mask;
   3297     pbmp_t *pbmp;
   3298 
   3299     if (!kt_port_init) {
   3300 
   3301         /* IPIPE_HIGIG_PORTS = [0,25,26,27,28,29,30,31] */
   3302         SOC_PBMP_CLEAR(kt_ipipe_higig_ports);
   3303         SOC_PBMP_PORT_ADD(kt_ipipe_higig_ports, 0);
   3304         for (i = 25; i <= 31; i++) {
   3305             SOC_PBMP_PORT_ADD(kt_ipipe_higig_ports, i);
   3306         }
   3307 
   3308         /* EPIPE_PORTS_SUBPORTS = [0..38] */
   3309         SOC_PBMP_CLEAR(kt_epipe_ports_subports);
   3310         for (i = 0; i <= 38; i++) {
   3311             SOC_PBMP_PORT_ADD(kt_epipe_ports_subports, i);
   3312         }
   3313 
   3314         /* [0..35] */
   3315         /*  @MMU_THDO_PORTS = [0..35] */
   3316         /*  @MMU_RQE_PORTS = [0..35]; */
   3317         SOC_PBMP_CLEAR(kt_ports_0_35);
   3318         for (i = 0; i <= 35; i++) {
   3319             SOC_PBMP_PORT_ADD(kt_ports_0_35, i);
   3320         }
   3321 
   3322         /* PFC_PORT_STS_REGS = [25..28] */
   3323         SOC_PBMP_CLEAR(kt_ports_25_28);
   3324         for (i = 25; i <= 28; i++) {
   3325             SOC_PBMP_PORT_ADD(kt_ports_25_28, i);
   3326         }
   3327         /* @MMU_MTRI_PORTS = [1..35] */
   3328         SOC_PBMP_CLEAR(kt_mmu_mtri_ports);
   3329         for (i = 1; i <= 35; i++) {
   3330             SOC_PBMP_PORT_ADD(kt_mmu_mtri_ports, i);
   3331         }
   3332                 
   3333         /* All ports */
   3334         SOC_PBMP_CLEAR(kt_all_ports); 
   3335         SOC_PBMP_ASSIGN(kt_all_ports, PBMP_ALL(unit)); 
   3336  
   3337         kt_port_init = 1; 
   3338     }
   3339 
   3340 
   3341     if (!SOC_PORT_VALID(unit, ainfo->port)) {
   3342         return 0;
   3343     }
   3344 
   3345     si = &SOC_INFO(unit);
   3346 
   3347     switch (ainfo->reg) {
   3348         /* IPIPE_HIGIG_PORTS = [0,25,26,27,28,29,30,31] */
   3349         case IUNHGIr:
   3350         case ICTRLr:
   3351         case IBCASTr:
   3352         case ILTOMCr:
   3353         case IIPMCr:
   3354         case IUNKOPCr:
   3355             pbmp = &kt_ipipe_higig_ports;
   3356             break;
   3357 
   3358         /* EPIPE_PORTS_SUBPORTS = [0..38] */
   3359         case EGR_VLAN_CONTROL_1r:
   3360         case EGR_IPMC_CFG2r:
   3361         case EGR_PORT_TO_NHI_MAPPINGr:
   3362         case EGR_VLAN_CONTROL_2r:
   3363         case EGR_VLAN_CONTROL_3r:
   3364         case EGR_PVLAN_EPORT_CONTROLr:
   3365         case EGR_INGRESS_PORT_TPID_SELECTr:
   3366         case EGR_VLAN_LOGICAL_TO_PHYSICAL_MAPPINGr:
   3367         case EGR_DBGr:
   3368         case EGR_MODMAP_CTRLr:
   3369         case EGR_SF_SRC_MODID_CHECKr:
   3370         case EGR_SHAPING_CONTROLr:
   3371         case EGR_COUNTER_CONTROLr:
   3372         case EGR_MTUr:
   3373         case EGR_PORT_1r:
   3374         case EGR_1588_INGRESS_CTRLr:
   3375         case EGR_1588_EGRESS_CTRLr:
   3376         case EGR_1588_LINK_DELAYr:
   3377         case EGR_LOGICAL_TO_PHYSICAL_PORT_NUMBER_MAPPINGr:
   3378         case TDBGC0r:
   3379         case TDBGC1r:
   3380         case TDBGC2r:
   3381         case TDBGC3r:
   3382         case TDBGC4r:
   3383         case TDBGC5r:
   3384         case TDBGC6r:
   3385         case TDBGC7r:
   3386         case TDBGC8r:
   3387         case TDBGC9r:
   3388         case TDBGC10r:
   3389         case TDBGC11r:
   3390             pbmp = &kt_epipe_ports_subports;
   3391             break;
   3392 
   3393         /* [0..35] */
   3394         case DEQ_EFIFO_CFGr:
   3395         case DEQ_EFIFO_STATUS_DEBUGr:
   3396         case DEQ_EFIFO_EMPTY_FULL_STATUS_DEBUGr:
   3397         case DEQ_EFIFO_WATERMARK_DEBUGr:
   3398         case MMU_TO_XPORT_BKPr:
   3399         case PORT_MAX_SHARED_CELLr:
   3400         case THDIEMA_PORT_MAX_SHARED_CELLr:
   3401         case THDIEXT_PORT_MAX_SHARED_CELLr:
   3402         case THDIQEN_PORT_MAX_SHARED_CELLr:
   3403         case THDIRQE_PORT_MAX_SHARED_CELLr:
   3404         case PORT_MAX_PKT_SIZEr:
   3405         case THDIEMA_PORT_MAX_PKT_SIZEr:
   3406         case THDIEXT_PORT_MAX_PKT_SIZEr:
   3407         case THDIQEN_PORT_MAX_PKT_SIZEr:
   3408         case THDIRQE_PORT_MAX_PKT_SIZEr:
   3409         case PORT_RESUME_LIMIT_CELLr:
   3410         case THDIEMA_PORT_RESUME_LIMIT_CELLr:
   3411         case THDIEXT_PORT_RESUME_LIMIT_CELLr:
   3412         case THDIQEN_PORT_RESUME_LIMIT_CELLr:
   3413         case THDIRQE_PORT_RESUME_LIMIT_CELLr:
   3414         case PORT_PG_SPIDr:
   3415         case THDIEMA_PORT_PG_SPIDr:
   3416         case THDIEXT_PORT_PG_SPIDr:
   3417         case THDIQEN_PORT_PG_SPIDr:
   3418         case THDIRQE_PORT_PG_SPIDr:
   3419         case PG_PORT_MIN_COUNT_CELLr:
   3420         case THDIEMA_PG_PORT_MIN_COUNT_CELLr:
   3421         case THDIEXT_PG_PORT_MIN_COUNT_CELLr:
   3422         case THDIQEN_PG_PORT_MIN_COUNT_CELLr:
   3423         case THDIRQE_PG_PORT_MIN_COUNT_CELLr:
   3424         case PORT_FC_STATUSr:
   3425         case THDIEMA_PORT_FC_STATUSr:
   3426         case THDIEXT_PORT_FC_STATUSr:
   3427         case THDIQEN_PORT_FC_STATUSr:
   3428         case THDIRQE_PORT_FC_STATUSr:
   3429         case FLOW_CONTROL_XOFF_STATEr:
   3430         case THDIEMA_FLOW_CONTROL_XOFF_STATEr:
   3431         case THDIEXT_FLOW_CONTROL_XOFF_STATEr:
   3432         case THDIQEN_FLOW_CONTROL_XOFF_STATEr:
   3433         case THDIRQE_FLOW_CONTROL_XOFF_STATEr:
   3434         case TOQ_EG_CREDITr:
   3435         case TOQ_PORT_BW_CTRLr:
   3436         case E2EFC_PORT_MAPPINGr:
   3437             pbmp = &kt_ports_0_35;
   3438             break;
   3439 
   3440         case PG_SHARED_LIMIT_CELLr:
   3441         case THDIEMA_PG_SHARED_LIMIT_CELLr:
   3442         case THDIEXT_PG_SHARED_LIMIT_CELLr:
   3443         case THDIQEN_PG_SHARED_LIMIT_CELLr:
   3444         case THDIRQE_PG_SHARED_LIMIT_CELLr:
   3445         case PG_RESET_OFFSET_CELLr:
   3446         case THDIEMA_PG_RESET_OFFSET_CELLr:
   3447         case THDIEXT_PG_RESET_OFFSET_CELLr:
   3448         case THDIQEN_PG_RESET_OFFSET_CELLr:
   3449         case THDIRQE_PG_RESET_OFFSET_CELLr:
   3450         case PG_RESET_FLOOR_CELLr:
   3451         case THDIEMA_PG_RESET_FLOOR_CELLr:
   3452         case THDIEXT_PG_RESET_FLOOR_CELLr:
   3453         case THDIQEN_PG_RESET_FLOOR_CELLr:
   3454         case THDIRQE_PG_RESET_FLOOR_CELLr:
   3455         case PG_MIN_CELLr:
   3456         case THDIEMA_PG_MIN_CELLr:
   3457         case THDIEXT_PG_MIN_CELLr:
   3458         case THDIQEN_PG_MIN_CELLr:
   3459         case THDIRQE_PG_MIN_CELLr:
   3460         case PG_HDRM_LIMIT_CELLr:
   3461         case THDIEMA_PG_HDRM_LIMIT_CELLr:
   3462         case THDIEXT_PG_HDRM_LIMIT_CELLr:
   3463         case THDIQEN_PG_HDRM_LIMIT_CELLr:
   3464         case THDIRQE_PG_HDRM_LIMIT_CELLr:
   3465         case PG_MIN_COUNT_CELLr:
   3466         case THDIEMA_PG_MIN_COUNT_CELLr:
   3467         case THDIEXT_PG_MIN_COUNT_CELLr:
   3468         case THDIQEN_PG_MIN_COUNT_CELLr:
   3469         case THDIRQE_PG_MIN_COUNT_CELLr:
   3470         case PG_SHARED_COUNT_CELLr:
   3471         case THDIEMA_PG_SHARED_COUNT_CELLr:
   3472         case THDIEXT_PG_SHARED_COUNT_CELLr:
   3473         case THDIQEN_PG_SHARED_COUNT_CELLr:
   3474         case THDIRQE_PG_SHARED_COUNT_CELLr:
   3475         case PG_HDRM_COUNT_CELLr:
   3476         case THDIEMA_PG_HDRM_COUNT_CELLr:
   3477         case THDIEXT_PG_HDRM_COUNT_CELLr:
   3478         case THDIQEN_PG_HDRM_COUNT_CELLr:
   3479         case THDIRQE_PG_HDRM_COUNT_CELLr:
   3480         case PG_GBL_HDRM_COUNTr:
   3481         case THDIEMA_PG_GBL_HDRM_COUNTr:
   3482         case THDIEXT_PG_GBL_HDRM_COUNTr:
   3483         case THDIQEN_PG_GBL_HDRM_COUNTr:
   3484         case THDIRQE_PG_GBL_HDRM_COUNTr:
   3485         case PG_RESET_VALUE_CELLr:
   3486         case THDIEMA_PG_RESET_VALUE_CELLr:
   3487         case THDIEXT_PG_RESET_VALUE_CELLr:
   3488         case THDIQEN_PG_RESET_VALUE_CELLr:
   3489         case THDIRQE_PG_RESET_VALUE_CELLr:
   3490             if (ainfo->idx == 0) {
   3491                 pbmp = &kt_ports_0_35;
   3492             } else {
   3493                 pbmp = &kt_ports_25_28;
   3494             }
   3495             break;
   3496 
   3497         /* PFC_PORT_STS/CFG_REGS = [25..28] */
   3498         case XPORT_TO_MMU_BKPr:
   3499         case PORT_LLFC_CFGr:
   3500         case INTFI_PORT_CFGr:
   3501         case PORT_MIN_CELLr:
   3502         case THDIEMA_PORT_MIN_CELLr:
   3503         case THDIEXT_PORT_MIN_CELLr:
   3504         case THDIQEN_PORT_MIN_CELLr:
   3505         case THDIRQE_PORT_MIN_CELLr:
   3506         case PORT_PRI_GRP0r:
   3507         case THDIEMA_PORT_PRI_GRP0r:
   3508         case THDIEXT_PORT_PRI_GRP0r:
   3509         case THDIQEN_PORT_PRI_GRP0r:
   3510         case THDIRQE_PORT_PRI_GRP0r:
   3511         case PORT_PRI_GRP1r:
   3512         case THDIEMA_PORT_PRI_GRP1r:
   3513         case THDIEXT_PORT_PRI_GRP1r:
   3514         case THDIQEN_PORT_PRI_GRP1r:
   3515         case THDIRQE_PORT_PRI_GRP1r:
   3516         case PORT_PRI_XON_ENABLEr:
   3517         case THDIEMA_PORT_PRI_XON_ENABLEr:
   3518         case THDIEXT_PORT_PRI_XON_ENABLEr:
   3519         case THDIQEN_PORT_PRI_XON_ENABLEr:
   3520         case THDIRQE_PORT_PRI_XON_ENABLEr:
   3521         case PORT_COUNT_CELLr:
   3522         case THDIEMA_PORT_COUNT_CELLr:
   3523         case THDIEXT_PORT_COUNT_CELLr:
   3524         case THDIQEN_PORT_COUNT_CELLr:
   3525         case THDIRQE_PORT_COUNT_CELLr:
   3526         case PORT_MIN_COUNT_CELLr:
   3527         case THDIEMA_PORT_MIN_COUNT_CELLr:
   3528         case THDIEXT_PORT_MIN_COUNT_CELLr:
   3529         case THDIQEN_PORT_MIN_COUNT_CELLr:
   3530         case THDIRQE_PORT_MIN_COUNT_CELLr:
   3531         case PORT_SHARED_COUNT_CELLr:
   3532         case THDIEMA_PORT_SHARED_COUNT_CELLr:
   3533         case THDIEXT_PORT_SHARED_COUNT_CELLr:
   3534         case THDIQEN_PORT_SHARED_COUNT_CELLr:
   3535         case THDIRQE_PORT_SHARED_COUNT_CELLr:
   3536         case PORT_SHARED_MAX_PG_ENABLEr:
   3537         case THDIEMA_PORT_SHARED_MAX_PG_ENABLEr:
   3538         case THDIEXT_PORT_SHARED_MAX_PG_ENABLEr:
   3539         case THDIQEN_PORT_SHARED_MAX_PG_ENABLEr:
   3540         case THDIRQE_PORT_SHARED_MAX_PG_ENABLEr:
   3541         case PORT_MIN_PG_ENABLEr:
   3542         case THDIEMA_PORT_MIN_PG_ENABLEr:
   3543         case THDIEXT_PORT_MIN_PG_ENABLEr:
   3544         case THDIQEN_PORT_MIN_PG_ENABLEr:
   3545         case THDIRQE_PORT_MIN_PG_ENABLEr:
   3546             pbmp = &kt_ports_25_28;
   3547             break;
   3548 
   3549         /* @MMU_MTRI_PORTS = [1..35] */
   3550         case BKPMETERINGCONFIG_64r:
   3551         case BKPMETERINGBUCKETr:
   3552         case MTRI_IFGr:
   3553             pbmp = &kt_mmu_mtri_ports;
   3554             break;
   3555 
   3556         /*  @MMU_THDO_PORTS = [0..35] */
   3557         case OP_E2ECC_PORT_CONFIGr:
   3558             pbmp = &kt_ports_0_35;
   3559             break;
   3560 
   3561         /*  @MMU_RQE_PORTS = [0..35]; */
   3562         case RQE_PORT_CONFIGr:
   3563         case RQE_MIRROR_CONFIGr:
   3564             pbmp = &kt_ports_0_35;
   3565             break;
   3566 
   3567         case MAC_PFC_CTRLr:
   3568             /* These are not implemented in Katana */
   3569             goto skip;
   3570 
   3571         default:
   3572             pbmp = &kt_all_ports;
   3573             break;
   3574     }
   3575 
   3576     if ((soc_portreg == SOC_REG_INFO(unit, ainfo->reg).regtype) &&
   3577         (!SOC_PBMP_MEMBER(*pbmp, ainfo->port))) {
   3578         goto skip; 
   3579     }
   3580 
   3581     if (mask != NULL) {
   3582         switch (ainfo->reg) {
   3583         case SHAPING_CONTROLr:
   3584         case RESET_ON_EMPTY_MAX_64r:
   3585             if (!si->port_num_ext_cosq[ainfo->port]) {
   3586                 COMPILER_64_SET(temp_mask, 0, 0x007fffff);
   3587                 COMPILER_64_AND(*mask, temp_mask);
   3588             }
   3589             break;
   3590         default:
   3591             break;
   3592         }
   3593     }
   3594 
   3595     return 0;
   3596 
   3597 skip:
   3598     /* set mask to all 0's so test will skip it */
   3599     if (mask != NULL) {
   3600         COMPILER_64_SET(*mask, 0, 0);
   3601     }
   3602     return 1;
   3603 }
   3604 #endif /* BCM_KATANA_SUPPORT */
   3605 
   3606 #ifdef BCM_KATANA_SUPPORT
   3607 STATIC int
   3608 reg_mask_subset_katanax(int unit, soc_regaddrinfo_t *ainfo, uint64 *mask)
   3609 {
   3610     soc_info_t *si;
   3611     uint64 temp_mask;
   3612     uint16 dev_id;
   3613     uint8  rev_id;
   3614     int rv = 0;
   3615     soc_cm_get_id(unit, &dev_id, &rev_id);
   3616 
   3617     si = &SOC_INFO(unit);
   3618 
   3619     if (!SOC_REG_PORT_IDX_VALID(unit,ainfo->reg, ainfo->port, ainfo->idx)) {
   3620         /* set mask to all 0's so test will skip it */
   3621         if (mask != NULL) {
   3622             COMPILER_64_SET(*mask, 0, 0);
   3623         }
   3624         return 1;
   3625     }
   3626 
   3627     /* Validate block accesses against variant features */
   3628     if (CHECK_FEATURE_BLK(soc_feature_ces, SOC_BLK_CES) ||
   3629         CHECK_FEATURE_BLK(soc_feature_ddr3, SOC_BLK_CI)) {
   3630         if (mask != NULL) {
   3631             COMPILER_64_SET(*mask, 0, 0);
   3632         }
   3633         return 1;
   3634     }
   3635 
   3636     if (mask != NULL) {
   3637         switch (ainfo->reg) {
   3638         case SHAPING_CONTROLr:
   3639         case RESET_ON_EMPTY_MAX_64r:
   3640             if (!si->port_num_ext_cosq[ainfo->port]) {
   3641                 COMPILER_64_SET(temp_mask, 0, 0x007fffff);
   3642                 COMPILER_64_AND(*mask, temp_mask);
   3643             }
   3644             break;
   3645         case CFAPIFULLRESETPOINTr:
   3646         case CFAPEFULLRESETPOINTr:
   3647         case CFAPIFULLSETPOINTr:
   3648         case CFAPEFULLSETPOINTr:
   3649         case MAC_PFC_CTRLr:
   3650         case CFAPICONFIGr:
   3651         case CHFC_TC2PRI_TBL_ECC_CONFIGr:
   3652         case MMU_INTFO_CONGST_STr:
   3653         case RXLP_DFC_CPU_UPDATE_REFRESHr:
   3654         case RXLP_DFC_STATUS_HIr:
   3655         case RXLP_DFC_STATUS_LOr:
   3656         case THDI_TO_OOBFC_SP_STr:
   3657         case THDO_TO_OOBFC_SP_STr:
   3658         case CFAPIOTPCONFIGr:
   3659             COMPILER_64_SET(*mask, 0, 0);
   3660             rv = 1;
   3661             break;
   3662         case CFAPECONFIGr:
   3663         case CFAPEOTPCONFIGr:
   3664         case EMC_CFGr:
   3665         case EMC_CSDB_MEM_DEBUGr:
   3666         case EMC_ECC_DEBUG_0r:
   3667         case EMC_ECC_DEBUG_1r:
   3668         case EMC_ERRB_0_MEM_DEBUGr:
   3669         case EMC_ERRB_1_MEM_DEBUGr:
   3670         case EMC_ERRB_FIFO_NFULL_THRESHOLDr:
   3671         case EMC_ERROR_MASK_0r:
   3672         case EMC_ERROR_MASK_1r:
   3673         case EMC_ERROR_MASK_2r:
   3674         case EMC_ERROR_MASK_3r:
   3675         case EMC_EWRB_0_MEM_DEBUGr:
   3676         case EMC_EWRB_1_MEM_DEBUGr:
   3677         case EMC_EWRB_FIFO_NFULL_THRESHOLDr:
   3678         case EMC_FREE_POOL_SIZESr:
   3679         case EMC_IRRB_THRESHOLDSr:
   3680         case EMC_IWRB_MEM_DEBUGr:
   3681         case EMC_IWRB_SIZEr:
   3682         case EMC_RFCQ_MEM_DEBUGr:
   3683         case EMC_RSFP_MEM_DEBUGr:
   3684         case EMC_SWAT_MEM_DEBUGr:
   3685         case EMC_WCMT_MEM_DEBUGr:
   3686         case EMC_WLCT_MEM_DEBUGr:
   3687         case EMC_WLCT_MERGED_RETURN_WTAG_FIFO_MEM_DEBUGr:
   3688         case EMC_WLCT_MERGED_RETURN_WTAG_FIFO_NFULL_THRESHOLDr:
   3689         case EMC_WTFP_MEM_DEBUGr:
   3690         case EMC_WTOQ_MEM_DEBUGr:
   3691         case EMC_WTOQ_BUFFER_ECC_STATUS_DEBUGr:
   3692         case GLOBAL_WRED_AVG_QSIZE_BUFFERE_POOL0r:
   3693         case GLOBAL_WRED_AVG_QSIZE_BUFFERE_POOL1r:
   3694         case GLOBAL_WRED_AVG_QSIZE_BUFFERIr:
   3695         case GLOBAL_WRED_AVG_QSIZE_FRACTION_BUFFERE_POOL0r:
   3696         case GLOBAL_WRED_AVG_QSIZE_FRACTION_BUFFERE_POOL1r:
   3697         case GLOBAL_WRED_AVG_QSIZE_FRACTION_BUFFERIr:
   3698         case GLOBAL_WRED_AVG_QSIZE_FRACTION_QENTRYr:
   3699         case GLOBAL_WRED_AVG_QSIZE_QENTRYr:
   3700         case GLOBAL_WRED_CONFIG_BUFFERE_POOL0r:
   3701         case GLOBAL_WRED_CONFIG_BUFFERE_POOL1r:
   3702         case GLOBAL_WRED_CONFIG_BUFFERIr:
   3703         case GLOBAL_WRED_CONFIG_QENTRYr:
   3704         case GLOBAL_WRED_DROP_THD_NONTCP_BUFFERE_POOL0r:
   3705         case GLOBAL_WRED_DROP_THD_NONTCP_BUFFERE_POOL1r:
   3706         case GLOBAL_WRED_DROP_THD_NONTCP_BUFFERIr:
   3707         case GLOBAL_WRED_DROP_THD_NONTCP_QENTRYr:
   3708         case GLOBAL_WRED_DROP_THD_TCP_BUFFERE_POOL0r:
   3709         case GLOBAL_WRED_DROP_THD_TCP_BUFFERE_POOL1r:
   3710         case GLOBAL_WRED_DROP_THD_TCP_BUFFERIr:
   3711         case GLOBAL_WRED_DROP_THD_TCP_QENTRYr:
   3712         case HCFC_ERRr:
   3713         case INTFI_CFGr:
   3714         case INTFI_DEBUGr:
   3715         case INTFI_ECC_CONTROLr:
   3716         case INTFI_ECC_INTR_MASKr:
   3717         case INTFI_MAP_L0_TBL_ADDRr:
   3718         case INTFI_MAP_L1_TBL_ADDRr:
   3719         case INTFI_MAP_L2_TBL_ADDRr:
   3720         case INTFI_OOBFC_MSG_RX_FAILED_CNTr:
   3721         case INTFO_FCN_ENr:
   3722         case INTFO_HW_UPDATE_DISr:
   3723         case INTFO_OOBFC_MSG_RX_FAILED_CNTr:
   3724         case ITE_CONFIGr:
   3725         case ITE_SCHED_WRR_WEIGHT_COS0r:
   3726         case ITE_SCHED_WRR_WEIGHT_COS1r:
   3727         case ITE_SCHED_WRR_WEIGHT_COS2r:
   3728         case ITE_SCHED_WRR_WEIGHT_COS3r:
   3729         case ITE_SCHED_WRR_WEIGHT_COS4r:
   3730         case ITE_SCHED_WRR_WEIGHT_COS5r:
   3731         case ITE_SCHED_WRR_WEIGHT_COS6r:
   3732         case ITE_SCHED_WRR_WEIGHT_COS7r:
   3733         case MMU1_PLL_DEBUGr:
   3734         case MMU2_PLL_DEBUGr:
   3735         case MMU_ADM_ECC_COUNTERSr:
   3736         case MMU_ADM_ECC_DEBUG_0r:
   3737         case MMU_ADM_ECC_ERROR_0_MASKr:
   3738         case MMU_ADM_QUEUE_DB_DEBUGr:
   3739         case MMU_E2EFC_CNT_DEBUG_STATUS_0r:
   3740         case MMU_E2EFC_CNT_DEBUG_STATUS_1r:
   3741         case MMU_E2EFC_ERROR_0_MASKr:
   3742         case MMU_ENQ_CBP_STORE_DEBUG_0r:
   3743         case MMU_ENQ_CFAPI_INTERNAL_RECYCLE_DEBUG_0r:
   3744         case MMU_ENQ_CFG_ECC_DEBUG_0r:
   3745         case MMU_ENQ_CFG_ECC_ERROR_0_MASKr:
   3746         case MMU_ENQ_CONFIG_0r:
   3747         case MMU_ENQ_DEST_PPP_CFG_0r:
   3748         case MMU_ENQ_DEST_PPP_CFG_1r:
   3749         case MMU_ENQ_DEST_PPP_CFG_2r:
   3750         case MMU_ENQ_DEST_PPP_CFG_3r:
   3751         case MMU_ENQ_DEST_PPP_CFG_4r:
   3752         case MMU_ENQ_DEST_PPP_CFG_5r:
   3753         case MMU_ENQ_ECC_COUNTERSr:
   3754         case MMU_ENQ_EMA_COS_TO_FIFO_LOOKUP_0r:
   3755         case MMU_ENQ_EMA_COS_TO_FIFO_LOOKUP_2r:
   3756         case MMU_ENQ_EMA_COS_TO_FIFO_LOOKUP_3r:
   3757         case MMU_ENQ_EMA_COS_TO_FIFO_LOOKUP_1r:
   3758         case MMU_ENQ_EMA_COS_TO_FIFO_PROFILE_1r:
   3759         case MMU_ENQ_EMA_COS_TO_FIFO_PROFILE_2r:
   3760         case MMU_ENQ_EMA_QUEUE_SELECT_0r:
   3761         case MMU_ENQ_EMA_QUEUE_SELECT_1r:
   3762         case MMU_ENQ_ERROR_0_MASKr:
   3763         case MMU_ENQ_FAPCONFIG_0r:
   3764         case MMU_ENQ_FAPINIT_0r:
   3765         case MMU_ENQ_FAP_ECC_DEBUG_0r:
   3766         case MMU_ENQ_FAP_ECC_ERROR_0_MASKr:
   3767         case MMU_ENQ_ILLEGAL_CELL_TYPE_0r:
   3768         case MMU_ENQ_IP_PRI_TO_PG_PROFILE_0r:
   3769         case MMU_ENQ_ITE_REORDER_DEBUG_0r:
   3770         case MMU_ENQ_MISSING_START_ERR_STAT_0r:
   3771         case MMU_ENQ_MISSING_START_ERR_STAT_1r:
   3772         case MMU_ENQ_PACKING_REAS_FIFO_PROFILE_THRESHr:
   3773         case MMU_ENQ_PACKING_REAS_FIFO_THRESH_PROFILE_0r:
   3774         case MMU_ENQ_PACKING_REAS_FIFO_THRESH_PROFILE_1r:
   3775         case MMU_ENQ_PACKING_REAS_FIFO_THRESH_PROFILE_2r:
   3776         case MMU_ENQ_PACK_PKT_LEN_FIFO_DEBUG_0r:
   3777         case MMU_ENQ_PACK_SRC_CTXT_FIFO_DEBUG_0r:
   3778         case MMU_ENQ_PROFILE_0_PRI_GRP0r:
   3779         case MMU_ENQ_PROFILE_0_PRI_GRP1r:
   3780         case MMU_ENQ_PROFILE_1_PRI_GRP0r:
   3781         case MMU_ENQ_PROFILE_1_PRI_GRP1r:
   3782         case MMU_ENQ_PROFILE_2_PRI_GRP0r:
   3783         case MMU_ENQ_PROFILE_2_PRI_GRP1r:
   3784         case MMU_ENQ_PROFILE_3_PRI_GRP0r:
   3785         case MMU_ENQ_PROFILE_3_PRI_GRP1r:
   3786         case MMU_ENQ_RQE_QUEUE_SELECT_0r:
   3787         case MMU_ENQ_RQE_QUEUE_SELECT_1r:
   3788         case MMU_ENQ_RQE_WR_COMPLETE_DEBUG_0r:
   3789         case MMU_ENQ_SOP_STORE_DEBUG_0r:
   3790         case MMU_ENQ_SRC_PORT_STATE_DEBUG_0r:
   3791         case MMU_ENQ_START_BY_START_ERR_STAT_0r:
   3792         case MMU_ENQ_START_BY_START_ERR_STAT_1r:
   3793         case MMU_ENQ_TRACE_IF_CONTROLr:
   3794         case MMU_IPCTR_CONFIG_0r:
   3795         case MMU_IPCTR_COUNTER1_SNAPr:
   3796         case MMU_IPCTR_ECC_COUNTERSr:
   3797         case MMU_IPCTR_ECC_DEBUG_0r:
   3798         case MMU_IPCTR_ECC_ERROR_0_MASKr:
   3799         case MMU_ITE_CFG_ECC_DEBUG_0r:
   3800         case TOP_MISC_CONTROL_0r:
   3801              if (!soc_feature(unit, soc_feature_ddr3) ||
   3802                               (SOC_DDR3_NUM_MEMORIES(unit) == 0)) {
   3803                  COMPILER_64_SET(*mask, 0, 0);
   3804                  rv = 1;
   3805               }
   3806               break;
   3807         default:
   3808             break;
   3809         }
   3810     }
   3811 
   3812     return rv;
   3813 }
   3814 #endif /* BCM_KATANAX_SUPPORT */
   3815 #ifdef BCM_SABER2_SUPPORT
   3816 STATIC int
   3817 reg_mask_subset_saber2(int unit, soc_regaddrinfo_t *ainfo, uint64 *mask)
   3818 {
   3819     int rv = 0;
   3820 #if 0
   3821     soc_info_t *si;
   3822     si = &SOC_INFO(unit);
   3823 #endif
   3824 
   3825    if (!SOC_REG_PORT_IDX_VALID(unit,ainfo->reg, ainfo->port, ainfo->idx)) {
   3826       /* set mask to all 0's so test will skip it */
   3827        if (mask != NULL) {
   3828            COMPILER_64_SET(*mask, 0, 0);
   3829        }
   3830        return 1;
   3831    }
   3832 
   3833 
   3834     /* Validate block accesses against variant features */
   3835     if (CHECK_FEATURE_BLK(soc_feature_ddr3, SOC_BLK_CI)) {
   3836         if (mask != NULL) {
   3837             COMPILER_64_SET(*mask, 0, 0);
   3838         }
   3839         return 1;
   3840     }
   3841 
   3842     if (!soc_feature(unit,soc_feature_ddr3)) {
   3843         switch(ainfo->reg) {
   3844         case CI0_TO_EMC_CELL_DATA_RETURN_COUNT_DEBUGr:
   3845         case CI0_TO_EMC_WTAG_RETURN_COUNT_DEBUGr:
   3846         case CI1_TO_EMC_CELL_DATA_RETURN_COUNT_DEBUGr:
   3847         case CI1_TO_EMC_WTAG_RETURN_COUNT_DEBUGr:
   3848         case EMC_CFGr:
   3849         case EMC_BUFFER_EMPTY_FULL_STATUS_DEBUGr:
   3850         case EMC_CI_FULL_STATUS_DEBUGr:
   3851         case EMC_CSDB_0_BUFFER_PAR_STATUS_DEBUGr:
   3852         case EMC_CSDB_1_BUFFER_PAR_STATUS_DEBUGr:
   3853         case EMC_CSDB_MEM_DEBUGr:
   3854         case EMC_ECC_DEBUG_0r:
   3855         case EMC_ECC_DEBUG_1r:
   3856         case EMC_ERRORr:
   3857         case EMC_ERROR_0r:
   3858         case EMC_ERROR_MASK_0r:
   3859         case EMC_ERROR_1r:
   3860         case EMC_ERROR_MASK_1r:
   3861         case EMC_ERROR_2r:
   3862         case EMC_ERROR_MASK_2r:
   3863         case EMC_ERROR_3r:
   3864         case EMC_ERROR_MASK_3r:
   3865         case EMC_FIXED_PATTERN_DEBUGr:
   3866         case EMC_FREE_POOL_SIZESr:
   3867         case EMC_GLOBAL_1B_ECC_ERROR_COUNT_DEBUGr:
   3868         case EMC_GLOBAL_2B_ECC_ERROR_COUNT_DEBUGr:
   3869         case EMC_IRRB_BUFFER_ECC_STATUS_DEBUGr:
   3870         case EMC_IRRB_BUFFER_FILL_LEVEL_DEBUGr:
   3871         case EMC_IRRB_BUFFER_WATERMARK_DEBUGr:
   3872         case EMC_IRRB_MEM_DEBUGr:
   3873         case EMC_IRRB_THRESHOLDSr:
   3874         case EMC_RFCQ_BUFFER_ECC_STATUS_DEBUGr:
   3875 	case EMC_RFCQ_BUFFER_FILL_LEVEL_DEBUGr:
   3876 	case EMC_RFCQ_BUFFER_WATERMARK_DEBUGr: 
   3877         case EMC_RFCQ_MEM_DEBUGr: 
   3878   	case EMC_RSFP_BUFFER_ECC_STATUS_DEBUGr: 
   3879 	case EMC_RSFP_BUFFER_FILL_LEVEL_DEBUGr: 
   3880 	case EMC_RSFP_MEM_DEBUGr: 
   3881         case EMC_SWAT_BUFFER_ECC_STATUS_DEBUGr: 
   3882   	case EMC_SWAT_MEM_DEBUGr: 
   3883 	case EMC_TO_CI0_RD_REQ_COUNT_DEBUGr: 
   3884   	case EMC_TO_CI0_WR_REQ_COUNT_DEBUGr: 
   3885 	case EMC_TO_CI1_RD_REQ_COUNT_DEBUGr: 
   3886   	case EMC_TO_CI1_WR_REQ_COUNT_DEBUGr: 
   3887   	case EMC_TO_ITE_WR_REQ_PKT_COMPLETE_COUNT_DEBUGr: 
   3888   	case EMC_WLCT_BUFFER_ECC_STATUS_DEBUGr: 
   3889 	case EMC_WLCT_MEM_DEBUGr: 
   3890   	case EMC_WLCT_MERGED_RETURN_WTAG_FIFO_ECC_STATUS_DEBUGr: 
   3891   	case EMC_WLCT_MERGED_RETURN_WTAG_FIFO_FILL_LEVEL_DEBUGr: 
   3892   	case EMC_WLCT_MERGED_RETURN_WTAG_FIFO_MEM_DEBUGr: 
   3893   	case EMC_WLCT_MERGED_RETURN_WTAG_FIFO_NFULL_THRESHOLDr: 
   3894   	case EMC_WLCT_MERGED_RETURN_WTAG_FIFO_WATERMARK_DEBUGr: 
   3895   	case EMC_WTFP_BUFFER_ECC_STATUS_DEBUGr: 
   3896 	case EMC_WTFP_BUFFER_FILL_LEVEL_DEBUGr: 
   3897   	case EMC_WTFP_MEM_DEBUGr: 
   3898 	case EMC_WTOQ_BUFFER_ECC_STATUS_DEBUGr: 
   3899   	case EMC_WTOQ_BUFFER_FILL_LEVEL_DEBUGr: 
   3900 	case EMC_WTOQ_MEM_DEBUGr: 
   3901   	case ITE_TO_EMC_WR_REQ_EOP_COUNT_DEBUGr: 
   3902 	case ITE_TO_EMC_WR_REQ_SOP_COUNT_DEBUGr: 
   3903   	case MMU_ITE_EMC_BACKPRESSURE_DEBUG_CONFIGr: 
   3904   	case MMU_ITE_EMC_BACKPRESSURE_DEBUG_STATUSr:
   3905              if (mask != NULL) {
   3906                  COMPILER_64_SET(*mask, 0, 0);
   3907              }
   3908              return 1;
   3909         }
   3910     }
   3911     
   3912     if (mask != NULL) {
   3913         switch (ainfo->reg) {
   3914 #if 0 
   3915         case AVS_REG_PVT_MNTR_CONFIG_PVT_MNTR_SW_RESETBr:
   3916 #endif
   3917 /* Shouldn't touch Controlling registers :-) */
   3918 	case CMIC_XGXS0_PLL_CONTROL_1r:
   3919 	case CMIC_XGXS0_PLL_CONTROL_2r:
   3920 	case CMIC_XGXS0_PLL_CONTROL_3r:
   3921 	case CMIC_XGXS0_PLL_CONTROL_4r:
   3922 	case CMIC_XGXS1_PLL_CONTROL_1r:
   3923 	case CMIC_XGXS1_PLL_CONTROL_2r:
   3924 	case CMIC_XGXS1_PLL_CONTROL_3r:
   3925 	case CMIC_XGXS1_PLL_CONTROL_4r:
   3926 	case CMIC_XGXS2_PLL_CONTROL_1r:
   3927 	case CMIC_XGXS2_PLL_CONTROL_2r:
   3928 	case CMIC_XGXS2_PLL_CONTROL_3r:
   3929 	case CMIC_XGXS2_PLL_CONTROL_4r:
   3930 	case CMIC_XGXS3_PLL_CONTROL_1r:
   3931 	case CMIC_XGXS3_PLL_CONTROL_2r:
   3932 	case CMIC_XGXS3_PLL_CONTROL_3r:
   3933 	case CMIC_XGXS3_PLL_CONTROL_4r:
   3934 	case CMIC_MISC_CONTROLr:
   3935 	case CMIC_SBUS_RING_MAP_0_7r:
   3936 	case CMIC_SBUS_RING_MAP_8_15r:
   3937 	case CMIC_SBUS_RING_MAP_16_23r:
   3938 	case CMIC_SBUS_RING_MAP_24_31r:
   3939 	case TOP_SOFT_RESET_REGr:
   3940 	case TOP_SOFT_RESET_REG_2r:
   3941 	case TOP_SOFT_RESET_REG_3r:
   3942 	case TOP_XGXS0_PLL_STATUSr:
   3943 	case TOP_XGXS1_PLL_STATUSr:
   3944 	case TOP_MISC_CONTROL_0r:
   3945 	case TOP_MISC_CONTROL_1r:
   3946 	case TOP_MISC_CONTROL_2r:
   3947 	case TOP_MISC_CONTROL_3r:
   3948 	case TOP_TIME_SYNC_PLL_STATUSr:
   3949 	case TOP_BROAD_SYNC0_PLL_STATUSr:
   3950 	case TOP_BROAD_SYNC1_PLL_STATUSr:
   3951 	case TOP_CORE_PLL0_CTRL_REGISTER_0r:
   3952 	case TOP_CORE_PLL0_CTRL_REGISTER_1r:
   3953 	case TOP_CORE_PLL0_CTRL_REGISTER_2r:
   3954 	case TOP_CORE_PLL0_CTRL_REGISTER_3r:
   3955 	case TOP_CORE_PLL0_CTRL_REGISTER_4r:
   3956 	case TOP_CORE_PLL0_CTRL_REGISTER_5r:
   3957 	case TOP_TIME_SYNC_PLL_CTRL_REGISTER_1r:
   3958 	case TOP_TIME_SYNC_PLL_CTRL_REGISTER_2r:
   3959 	case TOP_TIME_SYNC_PLL_CTRL_REGISTER_3r:
   3960 	case TOP_TIME_SYNC_PLL_CTRL_REGISTER_4r:
   3961 	case TOP_TIME_SYNC_PLL_CTRL_REGISTER_5r:
   3962 	case TOP_XGXS0_PLL_CONTROL_1r:
   3963 	case TOP_XGXS0_PLL_CONTROL_2r:
   3964 	case TOP_XGXS0_PLL_CONTROL_3r:
   3965 	case TOP_XGXS0_PLL_CONTROL_4r:
   3966 	case TOP_XGXS0_PLL_CONTROL_5r:
   3967 	case TOP_XGXS0_PLL_CONTROL_6r:
   3968 	case TOP_XGXS0_PLL_CONTROL_7r:
   3969 	case TOP_XGXS0_PLL_CONTROL_8r:
   3970 	case TOP_XGXS1_PLL_CONTROL_1r:
   3971 	case TOP_XGXS1_PLL_CONTROL_2r:
   3972 	case TOP_XGXS1_PLL_CONTROL_3r:
   3973 	case TOP_XGXS1_PLL_CONTROL_4r:
   3974 	case TOP_XGXS1_PLL_CONTROL_5r:
   3975 	case TOP_XGXS1_PLL_CONTROL_6r:
   3976 	case TOP_XGXS1_PLL_CONTROL_7r:
   3977 	case TOP_XGXS1_PLL_CONTROL_8r:
   3978 	case IPROC_WRAP_IPROC_DDR_PLL_CTRL_0r:
   3979 	case IPROC_WRAP_IPROC_DDR_PLL_CTRL_1r:
   3980 	case IPROC_WRAP_IPROC_DDR_PLL_CTRL_2r:
   3981 	case IPROC_WRAP_IPROC_DDR_PLL_CTRL_3r:
   3982 	case IPROC_WRAP_IPROC_DDR_PLL_CTRL_4r:
   3983 	case IPROC_WRAP_IPROC_DDR_PLL_CTRL_5r:
   3984 	case IPROC_WRAP_IPROC_DDR_PLL_CTRL_6r:
   3985 	case IPROC_WRAP_IPROC_DDR_PLL_CTRL_7r:
   3986 	case IPROC_WRAP_IPROC_DDR_PLL_CTRL_8r:
   3987 	case TOP_BROAD_SYNC0_PLL_CTRL_REGISTER_0r:
   3988 	case TOP_BROAD_SYNC0_PLL_CTRL_REGISTER_1r:
   3989 	case TOP_BROAD_SYNC0_PLL_CTRL_REGISTER_2r:
   3990 	case TOP_BROAD_SYNC0_PLL_CTRL_REGISTER_3r:
   3991 	case TOP_BROAD_SYNC0_PLL_CTRL_REGISTER_4r:
   3992 	case TOP_BROAD_SYNC0_PLL_CTRL_REGISTER_5r:
   3993 	case TOP_BROAD_SYNC0_PLL_CTRL_REGISTER_6r:
   3994 	case TOP_BROAD_SYNC0_PLL_CTRL_REGISTER_7r:
   3995 	case TOP_BROAD_SYNC1_PLL_CTRL_REGISTER_0r:
   3996 	case TOP_BROAD_SYNC1_PLL_CTRL_REGISTER_1r:
   3997 	case TOP_BROAD_SYNC1_PLL_CTRL_REGISTER_2r:
   3998 	case TOP_BROAD_SYNC1_PLL_CTRL_REGISTER_3r:
   3999 	case TOP_BROAD_SYNC1_PLL_CTRL_REGISTER_4r:
   4000 	case TOP_BROAD_SYNC1_PLL_CTRL_REGISTER_5r:
   4001 	case TOP_BROAD_SYNC1_PLL_CTRL_REGISTER_6r:
   4002 	case TOP_BROAD_SYNC1_PLL_CTRL_REGISTER_7r:
   4003 	case CMIC_SBUS_TIMEOUTr:
   4004 	case TOP_MMU_DDR_PHY_CTRLr:
   4005 	case TOP_CI_PHY_CONTROLr:
   4006 	case XPORT_XGXS_CTRLr:
   4007 	case CI_RESETr:
   4008 	case EGR_HW_RESET_CONTROL_1r:
   4009 	case ING_HW_RESET_CONTROL_2r:
   4010 	case IP0_INTR_STATUSr:
   4011 
   4012 	/* Special Registers */
   4013 	case CFAPEFULLRESETPOINTr:
   4014 	case CFAPEFULLSETPOINTr:
   4015 	case CFAPICONFIGr:
   4016 	case CFAPIFULLRESETPOINTr:
   4017 	case CFAPIFULLSETPOINTr:
   4018 	case CHFC_TC2PRI_TBL_ECC_CONFIGr:
   4019 	case MMU_INTFO_CONGST_STr:
   4020 	case OAMP_ERROR_INITIATION_DATAr:
   4021 	case OAMP_INDIRECT_COMMANDr:
   4022 	case OAMP_INDIRECT_COMMAND_WR_DATAr:
   4023 	case OAMP_INTERRUPT_REGISTER_TESTr:
   4024 	case OAMP_SAT_RX_STATr:
   4025 	case PARITY_ERROR_STATUS_0r:
   4026 	case THDIEMA_PARITY_ERROR_STATUS_0r:
   4027 	case THDIEXT_PARITY_ERROR_STATUS_0r:
   4028 	case THDIQEN_PARITY_ERROR_STATUS_0r:
   4029 	case THDIRQE_PARITY_ERROR_STATUS_0r:
   4030 	case THDI_TO_OOBFC_SP_STr:
   4031 	case THDO_TO_OOBFC_SP_STr:
   4032 	case RXLP_DFC_CPU_UPDATE_REFRESHr:
   4033 	case RXLP_DFC_STATUS_HIr:
   4034 	case RXLP_DFC_STATUS_LOr:
   4035 
   4036  
   4037 	case BKPMETERINGBUCKETr:
   4038 	case BKPMETERINGCONFIG_64r:
   4039 	case MTRI_IFGr:
   4040 	case OP_E2ECC_PORT_CONFIGr:
   4041                  COMPILER_64_SET(*mask, 0, 0);
   4042                  rv = 1;
   4043                  break;
   4044         default:
   4045              /* Cannot play with AVS block related registers :-). 
   4046                 Better to ignore as system might retaliate */
   4047              if (SOC_REG_BLOCK_IS(unit, ainfo->reg, SOC_BLK_AVS)) {
   4048                  COMPILER_64_SET(*mask, 0, 0);
   4049                  rv = 1;
   4050                  break;
   4051              }
   4052              break;
   4053         }
   4054     }
   4055     return rv;
   4056 }
   4057 #endif /* BCM_SABER2_SUPPORT */
   4058 
   4059 #ifdef BCM_HURRICANE2_SUPPORT
   4060 STATIC int
   4061 reg_mask_subset_hurricane2(int unit, soc_regaddrinfo_t *ainfo, uint64 *mask)
   4062 {
   4063     if (!SOC_REG_PORT_IDX_VALID(unit,ainfo->reg, ainfo->port, ainfo->idx)) {
   4064         /* set mask to all 0's so test will skip it */
   4065         if (mask != NULL) {
   4066             COMPILER_64_SET(*mask, 0, 0);
   4067         }
   4068         return 1;
   4069     }
   4070 
   4071     if (mask != NULL) {
   4072         switch (ainfo->reg) {
   4073         case TOP_BROAD_SYNC0_LCPLL_FBDIV_CTRL_1r:
   4074         case TOP_BROAD_SYNC1_LCPLL_FBDIV_CTRL_1r:
   4075         case TOP_BS_PLL0_CTRL_0r:
   4076         case TOP_BS_PLL0_CTRL_1r:
   4077         case TOP_BS_PLL1_CTRL_0r:
   4078         case TOP_BS_PLL1_CTRL_1r:
   4079         case TOP_TS_PLL_CTRL_4r:
   4080             COMPILER_64_SET(*mask, 0, 0);
   4081             return 1;
   4082         default:
   4083             break;
   4084         }
   4085     }
   4086 
   4087     return 0;
   4088 }
   4089 #endif /* BCM_HURRICANE2_SUPPORT */
   4090 
   4091 #ifdef BCM_GREYHOUND_SUPPORT
   4092 STATIC int
   4093 reg_mask_subset_greyhound(int unit, soc_regaddrinfo_t *ainfo, uint64 *mask)
   4094 {
   4095     int rv = 0;
   4096 
   4097     if (!SOC_REG_PORT_IDX_VALID(unit,ainfo->reg, ainfo->port, ainfo->idx)) {
   4098         /* set mask to all 0's so test will skip it */
   4099         if (mask != NULL) {
   4100             COMPILER_64_SET(*mask, 0, 0);
   4101         }
   4102         return 1;
   4103     }
   4104 
   4105     if (mask != NULL) {
   4106         switch (ainfo->reg) {
   4107         case TOP_BROAD_SYNC0_LCPLL_FBDIV_CTRL_0r:
   4108         case TOP_BROAD_SYNC0_LCPLL_FBDIV_CTRL_1r:
   4109         case TOP_BROAD_SYNC1_LCPLL_FBDIV_CTRL_0r:
   4110         case TOP_BROAD_SYNC1_LCPLL_FBDIV_CTRL_1r:
   4111         case TOP_XG0_LCPLL_FBDIV_CTRL_0r:
   4112         case TOP_XG0_LCPLL_FBDIV_CTRL_1r:
   4113         case TOP_XG1_LCPLL_FBDIV_CTRL_0r:
   4114         case TOP_XG1_LCPLL_FBDIV_CTRL_1r:
   4115             COMPILER_64_SET(*mask, 0, 0);
   4116             rv = 1;
   4117             break;
   4118         default:
   4119             break;
   4120         }
   4121     }
   4122 
   4123     return rv;
   4124 }
   4125 #endif /* BCM_GREYHOUND_SUPPORT */
   4126 
   4127 #ifdef BCM_HURRICANE3_SUPPORT
   4128 STATIC int
   4129 reg_mask_subset_hurricane3(int unit, soc_regaddrinfo_t *ainfo, uint64 *mask)
   4130 {
   4131     if (!SOC_REG_PORT_IDX_VALID(unit,ainfo->reg, ainfo->port, ainfo->idx)) {
   4132         /* set mask to all 0's so test will skip it */
   4133         if (mask != NULL) {
   4134             COMPILER_64_SET(*mask, 0, 0);
   4135         }
   4136         return 1;
   4137     }
   4138 
   4139     if (mask != NULL) {
   4140         switch (ainfo->reg) {
   4141         case TOP_BROAD_SYNC0_LCPLL_FBDIV_CTRL_0r:
   4142         case TOP_BROAD_SYNC0_LCPLL_FBDIV_CTRL_1r:
   4143         case TOP_BROAD_SYNC1_LCPLL_FBDIV_CTRL_0r:
   4144         case TOP_BROAD_SYNC1_LCPLL_FBDIV_CTRL_1r:
   4145         case TOP_BS_PLL0_CTRL_0r:
   4146         case TOP_BS_PLL0_CTRL_1r:
   4147         case TOP_BS_PLL1_CTRL_0r:
   4148         case TOP_BS_PLL1_CTRL_1r:
   4149         case TOP_TS_PLL_CTRL_4r:
   4150         case TOP_XG0_LCPLL_FBDIV_CTRL_0r:
   4151         case TOP_XG0_LCPLL_FBDIV_CTRL_1r:
   4152         case TOP_XG1_LCPLL_FBDIV_CTRL_0r:
   4153         case TOP_XG1_LCPLL_FBDIV_CTRL_1r:
   4154         case AVS_REG_PVT_MNTR_CONFIG_PVT_MNTR_CTRLr:
   4155         case AVS_REG_PMB_SLAVE_AVS_PWD_ACC_CONTROLr:
   4156                 /* 
   4157                  * The bit 27 of register, AVS_REG_PMB_SLAVE_AVS_PWD_ACC_CONTROL,
   4158                  * is a DONE bit. The "NOTEST" should be added for this register in the regprofile.
   4159                  * Once the regfile is updated, this register should be removed from here.
   4160                  */
   4161             COMPILER_64_SET(*mask, 0, 0);
   4162             return 1;
   4163         default:
   4164             break;
   4165         }
   4166     }
   4167 
   4168     return 0;
   4169 }
   4170 #endif /* BCM_HURRICANE3_SUPPORT */
   4171 
   4172 
   4173 /*
   4174  * Function: reg_mask_subset
   4175  * 
   4176  * Description: 
   4177  *   Returns 1 if the register is not implemented in HW for the 
   4178  *   specified port/cos. Returns 0 if the register is implemented
   4179  *   in HW. If "mask" argument is supplied, the mask is modified
   4180  *   to only include bits that are implemented in HW for the specified
   4181  *   port/cos index.
   4182  */
   4183 int
   4184 reg_mask_subset(int unit, soc_regaddrinfo_t *ainfo, uint64 *mask)
   4185 {
   4186 #ifdef BCM_TRIUMPH2_SUPPORT
   4187     if (SOC_IS_TRIUMPH2(unit) || SOC_IS_APOLLO(unit) ||
   4188         SOC_IS_VALKYRIE2(unit)) {
   4189         return (reg_mask_subset_tr2(unit, ainfo, mask));
   4190     }
   4191 #endif
   4192 #ifdef BCM_HURRICANE1_SUPPORT
   4193     if (SOC_IS_HURRICANE(unit)) {
   4194         return (reg_mask_subset_hu(unit, ainfo, mask));
   4195     }
   4196 #endif
   4197 #ifdef BCM_ENDURO_SUPPORT
   4198     if (SOC_IS_ENDURO(unit)) {
   4199         return (reg_mask_subset_en(unit, ainfo, mask));
   4200     }
   4201 #endif
   4202 #ifdef BCM_TRIUMPH3_SUPPORT
   4203     if (SOC_IS_TRIUMPH3(unit)) {
   4204         return (reg_mask_subset_tr3(unit, ainfo, mask));
   4205     }
   4206 #endif
   4207 #ifdef BCM_TOMAHAWK3_SUPPORT
   4208     if (SOC_IS_TOMAHAWK3(unit)) {
   4209         return (reg_mask_subset_tomahawk3(unit, ainfo, mask));
   4210     }
   4211 #endif
   4212 #ifdef BCM_TOMAHAWK_SUPPORT
   4213     if (SOC_IS_TOMAHAWKX(unit) || SOC_IS_TRIDENT3X(unit)) {
   4214         return (reg_mask_subset_tomahawk(unit, ainfo, mask));
   4215     }
   4216 #endif
   4217 #ifdef BCM_APACHE_SUPPORT
   4218     if (SOC_IS_APACHE(unit)) {
   4219         return (reg_mask_subset_apache(unit, ainfo, mask));
   4220     }
   4221 #endif
   4222 #ifdef BCM_TRIDENT2_SUPPORT
   4223     if (SOC_IS_TD2_TT2(unit)) {
   4224         return (reg_mask_subset_trident2(unit, ainfo, mask));
   4225     }
   4226 #endif
   4227 #ifdef BCM_TRIDENT_SUPPORT
   4228     if (SOC_IS_TD_TT(unit)) {
   4229         return (reg_mask_subset_trident(unit, ainfo, mask));
   4230     }
   4231 #endif
   4232 
   4233 #ifdef BCM_SABER2_SUPPORT
   4234     if (SOC_IS_SABER2(unit)) {
   4235         return (reg_mask_subset_saber2(unit, ainfo, mask));
   4236     }
   4237 #endif
   4238 #ifdef BCM_KATANA_SUPPORT
   4239     if (SOC_IS_KATANA(unit)) {
   4240         return (reg_mask_subset_katanax(unit, ainfo, mask));
   4241     }
   4242 #endif
   4243 #ifdef BCM_KATANA2_SUPPORT
   4244     if (SOC_IS_KATANA2(unit)) {
   4245         return (reg_mask_subset_katanax(unit, ainfo, mask));
   4246     }
   4247 #endif
   4248 #ifdef BCM_HURRICANE2_SUPPORT
   4249     if (SOC_IS_HURRICANE2(unit)) {
   4250         return (reg_mask_subset_hurricane2(unit, ainfo, mask));
   4251     }
   4252 #endif
   4253 #ifdef BCM_HURRICANE3_SUPPORT
   4254     if (SOC_IS_HURRICANE3(unit)||SOC_IS_GREYHOUND2(unit)) {
   4255         return (reg_mask_subset_hurricane3(unit, ainfo, mask));
   4256     }
   4257 #endif
   4258 #ifdef BCM_GREYHOUND_SUPPORT
   4259     if (SOC_IS_GREYHOUND(unit)) {
   4260         return (reg_mask_subset_greyhound(unit, ainfo, mask));
   4261     }
   4262 #endif
   4263 #ifdef BCM_TRIUMPH_SUPPORT
   4264     /* This case is a sort of 'catch-All" for triumph Family. So
   4265      * Make sure this comes after others like Hu, En, Kt, Kt2 etc */
   4266     if (SOC_IS_TR_VL(unit)) {
   4267         return (reg_mask_subset_tr(unit, ainfo, mask));
   4268     }
   4269 #endif
   4270 #ifdef BCM_SHADOW_SUPPORT
   4271     if (SOC_IS_SHADOW(unit)) {
   4272         return (reg_mask_subset_sh(unit, ainfo, mask));
   4273     }
   4274 #endif
   4275 #ifdef BCM_SCORPION_SUPPORT
   4276     if (SOC_IS_SC_CQ(unit)) {
   4277         return (reg_mask_subset_sc(unit, ainfo, mask));
   4278     }
   4279 #endif
   4280     return 0;
   4281 }
   4282 
   4283 /* Some registers need to be skipped only in reset value test,
   4284  * -Not- in RW test. So, we can't use the NOTEST flag. List those regs here
   4285  * For RW test, use the reg_mask_subset
   4286  */
   4287 int
   4288 rval_test_skip_reg(int unit, soc_regaddrinfo_t *ainfo, reg_data_t *rd)
   4289 {
   4290 #ifdef BCM_KATANA_SUPPORT
   4291     if (SOC_IS_KATANA(unit)) {
   4292         switch (ainfo->reg) {
   4293             case TOP_MISC_STATUSr:
   4294             case TOP_SWITCH_FEATURE_ENABLE_1r:
   4295             case TOP_SWITCH_FEATURE_ENABLE_2r:
   4296             case TOP_SWITCH_FEATURE_ENABLE_4r:
   4297             case TOP_THERMAL_PVTMON_RESULT_0r:
   4298             case TOP_THERMAL_PVTMON_RESULT_1r:
   4299             case TOP_THERMAL_PVTMON_RESULT_2r:
   4300             case TOP_THERMAL_PVTMON_RESULT_3r:
   4301             case TOP_XGXS_MDIO_CONFIG_0r:
   4302             case TOP_XGXS_MDIO_CONFIG_1r:
   4303             case TOP_XGXS_MDIO_CONFIG_2r:
   4304             case TOP_XGXS_MDIO_CONFIG_3r:
   4305             case TOP_MMU_PLL1_CTRL1r:
   4306             case TOP_MMU_PLL1_CTRL3r:
   4307             case TOP_MMU_PLL2_CTRL1r:
   4308             case TOP_MMU_PLL2_CTRL3r:
   4309             case TOP_MMU_PLL3_CTRL1r:
   4310             case TOP_MMU_PLL3_CTRL3r:
   4311             case TOP_MMU_PLL_STATUS0r:
   4312             case TOP_MMU_PLL_STATUS1r:
   4313             case QUAD0_SERDES_STATUS0r:
   4314             case QUAD0_SERDES_STATUS1r:
   4315             case QUAD1_SERDES_STATUS0r:
   4316             case QUAD0_SERDES_CTRLr:
   4317             case QUAD1_SERDES_CTRLr:
   4318             case MAC_MODEr:
   4319             case OAM_SEC_NS_COUNTER_64r:
   4320             case MMU_ITE_DEBUG_STATUS_0r:
   4321             case TOP_MISC_CONTROL_2r:
   4322             case XPORT_XGXS_NEWCTL_REGr:
   4323             case CI0_TO_EMC_CELL_DATA_RETURN_COUNT_DEBUGr:
   4324             case CI0_TO_EMC_WTAG_RETURN_COUNT_DEBUGr:
   4325             case CI1_TO_EMC_CELL_DATA_RETURN_COUNT_DEBUGr:
   4326             case CI1_TO_EMC_WTAG_RETURN_COUNT_DEBUGr:
   4327             case CI2_TO_EMC_CELL_DATA_RETURN_COUNT_DEBUGr:
   4328             case CI2_TO_EMC_WTAG_RETURN_COUNT_DEBUGr:
   4329             case EMC_BUFFER_EMPTY_FULL_STATUS_DEBUGr:
   4330             case EMC_CFGr:
   4331             case EMC_CI_FULL_STATUS_DEBUGr:
   4332             case EMC_CSDB_0_BUFFER_PAR_STATUS_DEBUGr:
   4333             case EMC_CSDB_1_BUFFER_PAR_STATUS_DEBUGr:
   4334             case EMC_CSDB_2_BUFFER_PAR_STATUS_DEBUGr:
   4335             case EMC_CSDB_MEM_DEBUGr:
   4336             case EMC_ECC_DEBUGr:
   4337             case EMC_ERRB_BUFFER_ECC_STATUS_DEBUGr:
   4338             case EMC_ERRB_BUFFER_FILL_LEVEL_DEBUGr:
   4339             case EMC_ERRB_BUFFER_WATERMARK_DEBUGr:
   4340             case EMC_ERRB_MEM_DEBUGr:
   4341             case EMC_ERRORr:
   4342             case EMC_ERROR_0r:
   4343             case EMC_ERROR_1r:
   4344             case EMC_ERROR_2r:
   4345             case EMC_ERROR_MASK_0r:
   4346             case EMC_ERROR_MASK_1r:
   4347             case EMC_ERROR_MASK_2r:
   4348             case EMC_EWRB_BUFFER_0_ECC_STATUS_DEBUGr:
   4349             case EMC_EWRB_BUFFER_1_ECC_STATUS_DEBUGr:
   4350             case EMC_EWRB_BUFFER_FILL_LEVEL_DEBUGr:
   4351             case EMC_EWRB_BUFFER_WATERMARK_DEBUGr:
   4352             case EMC_EWRB_MEM_DEBUGr:
   4353             case EMC_FREE_POOL_SIZESr:
   4354             case EMC_GLOBAL_1B_ECC_ERROR_COUNT_DEBUGr:
   4355             case EMC_GLOBAL_2B_ECC_ERROR_COUNT_DEBUGr:
   4356             case EMC_IRRB_BUFFER_ECC_STATUS_DEBUGr:
   4357             case EMC_IRRB_BUFFER_FILL_LEVEL_DEBUGr:
   4358             case EMC_IRRB_BUFFER_WATERMARK_DEBUGr:
   4359             case EMC_IRRB_THRESHOLDSr:
   4360             case EMC_IWRB_BUFFER_ECC_STATUS_DEBUGr:
   4361             case EMC_IWRB_BUFFER_FILL_LEVEL_DEBUGr:
   4362             case EMC_IWRB_BUFFER_WATERMARK_DEBUGr:
   4363             case EMC_IWRB_MEM_DEBUGr:
   4364             case EMC_IWRB_SIZEr:
   4365             case EMC_RFCQ_BUFFER_ECC_STATUS_DEBUGr:
   4366             case EMC_RFCQ_BUFFER_FILL_LEVEL_DEBUGr:
   4367             case EMC_RFCQ_BUFFER_WATERMARK_DEBUGr:
   4368             case EMC_RFCQ_MEM_DEBUGr:
   4369             case EMC_RSFP_BUFFER_ECC_STATUS_DEBUGr:
   4370             case EMC_RSFP_BUFFER_FILL_LEVEL_DEBUGr:
   4371             case EMC_RSFP_MEM_DEBUGr:
   4372             case EMC_SWAT_BUFFER_ECC_STATUS_DEBUGr:
   4373             case EMC_SWAT_MEM_DEBUGr:
   4374             case EMC_TO_CI0_RD_REQ_COUNT_DEBUGr:
   4375             case EMC_TO_CI0_WR_REQ_COUNT_DEBUGr:
   4376             case EMC_TO_CI1_RD_REQ_COUNT_DEBUGr:
   4377             case EMC_TO_CI1_WR_REQ_COUNT_DEBUGr:
   4378             case EMC_TO_CI2_RD_REQ_COUNT_DEBUGr:
   4379             case EMC_TO_CI2_WR_REQ_COUNT_DEBUGr:
   4380             case EMC_WCMT_BUFFER_ECC_STATUS_DEBUGr:
   4381             case EMC_WCMT_MEM_DEBUGr:
   4382             case EMC_WLCT0_LOWER_A_BUFFER_ECC_STATUS_DEBUGr:
   4383             case EMC_WLCT0_LOWER_B_BUFFER_ECC_STATUS_DEBUGr:
   4384             case EMC_WLCT0_UPPER_A_BUFFER_ECC_STATUS_DEBUGr:
   4385             case EMC_WLCT0_UPPER_B_BUFFER_ECC_STATUS_DEBUGr:
   4386             case EMC_WLCT1_LOWER_A_BUFFER_ECC_STATUS_DEBUGr:
   4387             case EMC_WLCT1_LOWER_B_BUFFER_ECC_STATUS_DEBUGr:
   4388             case EMC_WLCT1_UPPER_A_BUFFER_ECC_STATUS_DEBUGr:
   4389             case EMC_WLCT1_UPPER_B_BUFFER_ECC_STATUS_DEBUGr:
   4390             case EMC_WLCT2_LOWER_A_BUFFER_ECC_STATUS_DEBUGr:
   4391             case EMC_WLCT2_LOWER_B_BUFFER_ECC_STATUS_DEBUGr:
   4392             case EMC_WLCT2_UPPER_A_BUFFER_ECC_STATUS_DEBUGr:
   4393             case EMC_WLCT2_UPPER_B_BUFFER_ECC_STATUS_DEBUGr:
   4394             case EMC_WLCT_MEM_DEBUGr:
   4395             case EMC_WTFP_BUFFER_ECC_STATUS_DEBUGr:
   4396             case EMC_WTFP_BUFFER_FILL_LEVEL_DEBUGr:
   4397             case EMC_WTFP_MEM_DEBUGr:
   4398             case EMC_WTOQ_BUFFER_ECC_STATUS_DEBUGr:
   4399             case EMC_WTOQ_BUFFER_FILL_LEVEL_DEBUGr:
   4400             case EMC_WTOQ_MEM_DEBUGr:
   4401             case TOP_SWITCH_FEATURE_ENABLE_3r:
   4402             case QSTRUCT_FAPOTPCONFIG_0r:
   4403             case QSTRUCT_FAPOTPCONFIG_1r:
   4404             case QSTRUCT_FAPOTPCONFIG_2r:
   4405             case QSTRUCT_FAPOTPCONFIG_3r:
   4406             case QSTRUCT_FAPCONFIG_0r:
   4407             case QSTRUCT_FAPCONFIG_1r:
   4408             case QSTRUCT_FAPCONFIG_2r:
   4409             case QSTRUCT_FAPCONFIG_3r:
   4410             case CFAPEOTPCONFIGr:
   4411                 return 1;   /* Skip these registers */
   4412             default:
   4413                 return 0;
   4414         }
   4415     }
   4416 #endif 
   4417 #ifdef BCM_SABER2_SUPPORT
   4418     if(SOC_IS_SABER2(unit)) {
   4419         switch (ainfo->reg) {
   4420             case OAMP_GLOBAL_SYS_HEADER_CFGr:
   4421             case OAMP_INDIRECT_WR_MASKr:
   4422             case OAMP_REG_0086r:
   4423             case OAMP_REG_0090r:
   4424             case OAMP_REG_0091r:
   4425             case OAMP_REG_00ADr:
   4426 #ifdef BCM_METROLITE_SUPPORT
   4427             case OAMP_PE_CONSTr:
   4428             case OAMP_PE_PTRr:
   4429             case XLPORT_XGXS_COUNTER_MODEr:
   4430 #endif
   4431                 if (SAL_BOOT_QUICKTURN) {
   4432 #ifdef SABER2_DEBUG
   4433                     LOG_WARN(BSL_LS_APPL_COMMON,
   4434                             (BSL_META_U(unit, "Skipping register %s\n"), 
   4435                              SOC_REG_NAME(unit, ainfo->reg)));
   4436 #endif
   4437                     return 1;
   4438                 } else {
   4439                     return 0;
   4440                 }
   4441             case TOP_CI_PHY_CONTROLr:
   4442             case AVS_REG_HW_MNTR_LAST_MEASURED_SENSORr:
   4443             case AVS_REG_PMB_SLAVE_BPCM_IDr:
   4444             case AVS_REG_RO_REGISTERS_0_CEN_ROSC_STATUSr:
   4445             case AVS_REG_RO_REGISTERS_0_PVT_0P85V_0_MNTR_STATUSr:
   4446             case AVS_REG_RO_REGISTERS_0_PVT_0P85V_1_MNTR_STATUSr:
   4447             case AVS_REG_RO_REGISTERS_0_PVT_1P8V_MNTR_STATUSr:
   4448             case AVS_REG_RO_REGISTERS_0_PVT_1V_0_MNTR_STATUSr:
   4449             case AVS_REG_RO_REGISTERS_0_PVT_1V_1_MNTR_STATUSr:
   4450             case AVS_REG_RO_REGISTERS_0_PVT_3P3V_MNTR_STATUSr:
   4451             case AVS_REG_RO_REGISTERS_0_PVT_TEMPERATURE_MNTR_STATUSr:
   4452             case AVS_REG_TEMPERATURE_MONITOR_TEMPERATURE_MEASUREMENT_STATUSr:
   4453             case AVS_REG_TOP_CTRL_VTRAP_STATUSr:
   4454             case XLMAC_RX_LSS_STATUSr:
   4455             case XLPORT_LED_CHAIN_CONFIGr:
   4456             case CI_ERRORr:
   4457             case CI_RESETr:
   4458             case MMU_ITE_DEBUG_STATUS_0r:
   4459             case TOP_SWITCH_FEATURE_ENABLE_0r:
   4460             case TOP_SWITCH_FEATURE_ENABLE_1r:
   4461             case TOP_SWITCH_FEATURE_ENABLE_2r:
   4462             case TOP_SWITCH_FEATURE_ENABLE_3r:
   4463             case TOP_SWITCH_FEATURE_ENABLE_4r:
   4464             case TOP_SWITCH_FEATURE_ENABLE_5r:
   4465             case TOP_SWITCH_FEATURE_ENABLE_6r:
   4466             case TOP_SWITCH_FEATURE_ENABLE_7r:
   4467             case TOP_XGXS_MDIO_CONFIG_0r:
   4468             case TOP_PVTMON_RESULT_0r:
   4469             case TOP_PVTMON_RESULT_1r:
   4470             case OAMP_ECC_1B_ERR_CNTr:
   4471             case OAMP_ECC_2B_ERR_CNTr:
   4472             case OAMP_GTIMER_CONFIGURATIONr:
   4473             case OAMP_INDIRECT_COMMANDr:
   4474             case OAMP_REG_0087r:
   4475             case OAMP_REG_00AEr:
   4476             case TOP_CI_DDR_PHY_REG_CTRLr:
   4477             case TOP_CI_DDR_PHY_REG_DATAr:
   4478             case TOP_HW_TAP_MEM_ECC_CTRLr:
   4479             case TOP_HW_TAP_MEM_ECC_STATUSr:
   4480             case TOP_MISC_STATUS_0r:
   4481             case TOP_MMU_DDR_PHY_CTRLr:
   4482             case TOP_RESCAL_STATUS_0r:
   4483             case TOP_UC_TAP_READ_DATAr:
   4484             case TOP_XGXS0_PLL_CONTROL_3r:
   4485             case TOP_XGXS0_PLL_CONTROL_4r:
   4486             case TOP_XGXS1_PLL_CONTROL_3r:
   4487             case TOP_BROAD_SYNC0_PLL_CTRL_REGISTER_3r:
   4488             case TOP_BROAD_SYNC1_PLL_CTRL_REGISTER_3r:
   4489             case OAMP_STAT_INTERRUPT_MESSAGEr: 
   4490             case TOP_BROAD_SYNC0_LCPLL_FBDIV_CTRL_1r:
   4491             case TOP_BROAD_SYNC1_LCPLL_FBDIV_CTRL_1r:
   4492             case TOP_MASTER_LCPLL_FBDIV_CTRL_0r:
   4493             case TOP_MASTER_LCPLL_FBDIV_CTRL_1r:
   4494             case TOP_SERDES_LCPLL_FBDIV_CTRL_0r:
   4495             case TOP_SERDES_LCPLL_FBDIV_CTRL_1r:
   4496             case TOP_BROAD_SYNC1_LCPLL_FBDIV_CTRL_0r:
   4497             case TOP_BROAD_SYNC0_LCPLL_FBDIV_CTRL_0r:
   4498             case CFAPIOTPCONFIGr:
   4499             case TOP_TAP_CONTROLr:
   4500 
   4501                 return 1;  /* Skip these registers */
   4502             default:
   4503                 if ((SAL_BOOT_QUICKTURN) && 
   4504                         (SOC_REG_BLOCK_IS(unit, ainfo->reg, SOC_BLK_AVS))) {
   4505                     /* Skip AVS block registers */
   4506 #ifdef SABER2_DEBUG
   4507                     LOG_WARN(BSL_LS_APPL_COMMON,
   4508                             (BSL_META_U(unit, "Skipping register %s\n"), 
   4509                              SOC_REG_NAME(unit, ainfo->reg)));
   4510 #endif
   4511                     return 1;
   4512                 }
   4513                 return 0;
   4514         }
   4515     }
   4516 #endif
   4517 
   4518 #ifdef BCM_KATANA2_SUPPORT
   4519     if (SOC_IS_KATANA2(unit)) {
   4520         uint16 dev_id;
   4521         uint8  rev_id;
   4522         soc_cm_get_id(unit, &dev_id, &rev_id);
   4523         switch (ainfo->reg) {
   4524             case TOP_HW_TAP_MEM_ECC_CTRLr:
   4525             case TOP_MISC_CONTROL_1r:
   4526             case TOP_MISC_STATUS_0r:
   4527             case TOP_MMU_PLL_INITr:
   4528             case TOP_MMU_PLL_STATUS0r:
   4529             case TOP_MMU_PLL_STATUS1r:
   4530             case TOP_PVTMON_RESULT_0r:
   4531             case TOP_PVTMON_RESULT_1r:
   4532             case TOP_PVTMON_RESULT_2r:
   4533             case TOP_PVTMON_RESULT_3r:
   4534             case TOP_SWITCH_FEATURE_ENABLE_0r:
   4535             case TOP_SWITCH_FEATURE_ENABLE_1r:
   4536             case TOP_SWITCH_FEATURE_ENABLE_2r:
   4537             case TOP_SWITCH_FEATURE_ENABLE_3r:
   4538             case TOP_SWITCH_FEATURE_ENABLE_4r:
   4539             case TOP_SWITCH_FEATURE_ENABLE_5r:
   4540             case TOP_SWITCH_FEATURE_ENABLE_6r:
   4541             case TOP_SW_BOND_OVRD_CTRL0r:
   4542             case TOP_SW_BOND_OVRD_CTRL1r:
   4543             case TOP_UC_TAP_READ_DATAr:
   4544             case MMU_ITE_DEBUG_STATUS_0r:
   4545             case XMAC_RX_LSS_STATUSr:
   4546             case TOP_MISC_CONTROL_2r:
   4547             case TOP_XGXS_MDIO_CONFIG_0r:
   4548             case TOP_XGXS_MDIO_CONFIG_1r:
   4549             case TOP_XGXS_MDIO_CONFIG_2r:
   4550             case TOP_XGXS_MDIO_CONFIG_3r:
   4551             case TOP_MMU_PLL1_CTRL1r:
   4552             case TOP_MMU_PLL1_CTRL3r:
   4553             case TOP_MMU_PLL2_CTRL1r:
   4554             case TOP_MMU_PLL2_CTRL3r:
   4555             case TOP_MMU_PLL3_CTRL1r:
   4556             case TOP_MMU_PLL3_CTRL3r:
   4557             case XPORT_XGXS_NEWCTL_REGr:
   4558             case TOP_TAP_CONTROLr:
   4559             case TOP_MEM_PWR_DWN_BITMAP1_STATUSr:
   4560             case TOP_BROAD_SYNC0_LCPLL_FBDIV_CTRL_1r:
   4561             case TOP_BROAD_SYNC0_PLL_CTRL_REGISTER_0r:
   4562             case TOP_BROAD_SYNC0_PLL_CTRL_REGISTER_1r:
   4563             case TOP_BROAD_SYNC1_LCPLL_FBDIV_CTRL_1r:
   4564             case TOP_BROAD_SYNC1_PLL_CTRL_REGISTER_0r:
   4565             case TOP_BROAD_SYNC1_PLL_CTRL_REGISTER_1r:
   4566                 return 1;   /* Skip these registers */
   4567             case CFAPECONFIGr:
   4568             case CFAPEOTPCONFIGr:
   4569             case CI0_TO_EMC_CELL_DATA_RETURN_COUNT_DEBUGr:
   4570             case CI0_TO_EMC_WTAG_RETURN_COUNT_DEBUGr:
   4571             case CI1_TO_EMC_CELL_DATA_RETURN_COUNT_DEBUGr:
   4572             case CI1_TO_EMC_WTAG_RETURN_COUNT_DEBUGr:
   4573             case CI2_TO_EMC_CELL_DATA_RETURN_COUNT_DEBUGr:
   4574             case CI2_TO_EMC_WTAG_RETURN_COUNT_DEBUGr:
   4575             case CI3_TO_EMC_CELL_DATA_RETURN_COUNT_DEBUGr:
   4576             case CI3_TO_EMC_WTAG_RETURN_COUNT_DEBUGr:
   4577             case CI4_TO_EMC_CELL_DATA_RETURN_COUNT_DEBUGr:
   4578             case CI4_TO_EMC_WTAG_RETURN_COUNT_DEBUGr:
   4579             case CI5_TO_EMC_CELL_DATA_RETURN_COUNT_DEBUGr:
   4580             case CI5_TO_EMC_WTAG_RETURN_COUNT_DEBUGr:
   4581             case EMC_BUFFER_EMPTY_FULL_STATUS_DEBUGr:
   4582             case EMC_CFGr:
   4583             case EMC_CI_FULL_STATUS_DEBUGr:
   4584             case EMC_CSDB_0_BUFFER_PAR_STATUS_DEBUGr:
   4585             case EMC_CSDB_1_BUFFER_PAR_STATUS_DEBUGr:
   4586             case EMC_CSDB_2_BUFFER_PAR_STATUS_DEBUGr:
   4587             case EMC_CSDB_3_BUFFER_PAR_STATUS_DEBUGr:
   4588             case EMC_CSDB_4_BUFFER_PAR_STATUS_DEBUGr:
   4589             case EMC_CSDB_5_BUFFER_PAR_STATUS_DEBUGr:
   4590             case EMC_CSDB_MEM_DEBUGr:
   4591             case EMC_ECC_DEBUG_0r:
   4592             case EMC_ECC_DEBUG_1r:
   4593             case EMC_ERRB_0_BUFFER_ECC_STATUS_DEBUGr:
   4594             case EMC_ERRB_0_BUFFER_FILL_LEVEL_DEBUGr:
   4595             case EMC_ERRB_0_BUFFER_WATERMARK_DEBUGr:
   4596             case EMC_ERRB_0_MEM_DEBUGr:
   4597             case EMC_ERRB_1_BUFFER_ECC_STATUS_DEBUGr:
   4598             case EMC_ERRB_1_BUFFER_FILL_LEVEL_DEBUGr:
   4599             case EMC_ERRB_1_BUFFER_WATERMARK_DEBUGr:
   4600             case EMC_ERRB_1_MEM_DEBUGr:
   4601             case EMC_ERRB_FIFO_NFULL_THRESHOLDr:
   4602             case EMC_ERRORr:
   4603             case EMC_ERROR_0r:
   4604             case EMC_ERROR_1r:
   4605             case EMC_ERROR_2r:
   4606             case EMC_ERROR_3r:
   4607             case EMC_ERROR_MASK_0r:
   4608             case EMC_ERROR_MASK_1r:
   4609             case EMC_ERROR_MASK_2r:
   4610             case EMC_ERROR_MASK_3r:
   4611             case EMC_EWRB_0_BUFFER_0_ECC_STATUS_DEBUGr:
   4612             case EMC_EWRB_0_BUFFER_1_ECC_STATUS_DEBUGr:
   4613             case EMC_EWRB_0_BUFFER_FILL_LEVEL_DEBUGr:
   4614             case EMC_EWRB_0_BUFFER_WATERMARK_DEBUGr:
   4615             case EMC_EWRB_0_MEM_DEBUGr:
   4616             case EMC_EWRB_1_BUFFER_0_ECC_STATUS_DEBUGr:
   4617             case EMC_EWRB_1_BUFFER_1_ECC_STATUS_DEBUGr:
   4618             case EMC_EWRB_1_BUFFER_FILL_LEVEL_DEBUGr:
   4619             case EMC_EWRB_1_BUFFER_WATERMARK_DEBUGr:
   4620             case EMC_EWRB_1_MEM_DEBUGr:
   4621             case EMC_EWRB_FIFO_NFULL_THRESHOLDr:
   4622             case EMC_FREE_POOL_SIZESr:
   4623             case EMC_GLOBAL_1B_ECC_ERROR_COUNT_DEBUGr:
   4624             case EMC_GLOBAL_2B_ECC_ERROR_COUNT_DEBUGr:
   4625             case EMC_IRRB_BUFFER_ECC_STATUS_DEBUGr:
   4626             case EMC_IRRB_BUFFER_FILL_LEVEL_DEBUGr:
   4627             case EMC_IRRB_BUFFER_WATERMARK_DEBUGr:
   4628             case EMC_IRRB_THRESHOLDSr:
   4629             case EMC_IWRB_BUFFER_ECC_STATUS_DEBUGr:
   4630             case EMC_IWRB_BUFFER_FILL_LEVEL_DEBUGr:
   4631             case EMC_IWRB_BUFFER_WATERMARK_DEBUGr:
   4632             case EMC_IWRB_MEM_DEBUGr:
   4633             case EMC_IWRB_SIZEr:
   4634             case EMC_RFCQ_BUFFER_ECC_STATUS_DEBUGr:
   4635             case EMC_RFCQ_BUFFER_FILL_LEVEL_DEBUGr:
   4636             case EMC_RFCQ_BUFFER_WATERMARK_DEBUGr:
   4637             case EMC_RFCQ_MEM_DEBUGr:
   4638             case EMC_RSFP_BUFFER_ECC_STATUS_DEBUGr:
   4639             case EMC_RSFP_BUFFER_FILL_LEVEL_DEBUGr:
   4640             case EMC_RSFP_MEM_DEBUGr:
   4641             case EMC_SWAT_BUFFER_ECC_STATUS_DEBUGr:
   4642             case EMC_SWAT_MEM_DEBUGr:
   4643             case EMC_TO_CI0_RD_REQ_COUNT_DEBUGr:
   4644             case EMC_TO_CI0_WR_REQ_COUNT_DEBUGr:
   4645             case EMC_TO_CI1_RD_REQ_COUNT_DEBUGr:
   4646             case EMC_TO_CI1_WR_REQ_COUNT_DEBUGr:
   4647             case EMC_TO_CI2_RD_REQ_COUNT_DEBUGr:
   4648             case EMC_TO_CI2_WR_REQ_COUNT_DEBUGr:
   4649             case EMC_TO_CI3_RD_REQ_COUNT_DEBUGr:
   4650             case EMC_TO_CI3_WR_REQ_COUNT_DEBUGr:
   4651             case EMC_TO_CI4_RD_REQ_COUNT_DEBUGr:
   4652             case EMC_TO_CI4_WR_REQ_COUNT_DEBUGr:
   4653             case EMC_TO_CI5_RD_REQ_COUNT_DEBUGr:
   4654             case EMC_TO_CI5_WR_REQ_COUNT_DEBUGr:
   4655             case EMC_WCMT_BUFFER_ECC_STATUS_DEBUGr:
   4656             case EMC_WCMT_MEM_DEBUGr:
   4657             case EMC_WLCT0_LOWER_A_BUFFER_ECC_STATUS_DEBUGr:
   4658             case EMC_WLCT0_LOWER_B_BUFFER_ECC_STATUS_DEBUGr:
   4659             case EMC_WLCT0_MERGED_RETURN_WTAG_FIFO_ECC_STATUS_DEBUGr:
   4660             case EMC_WLCT0_UPPER_A_BUFFER_ECC_STATUS_DEBUGr:
   4661             case EMC_WLCT0_UPPER_B_BUFFER_ECC_STATUS_DEBUGr:
   4662             case EMC_WLCT1_LOWER_A_BUFFER_ECC_STATUS_DEBUGr:
   4663             case EMC_WLCT1_LOWER_B_BUFFER_ECC_STATUS_DEBUGr:
   4664             case EMC_WLCT1_MERGED_RETURN_WTAG_FIFO_ECC_STATUS_DEBUGr:
   4665             case EMC_WLCT1_UPPER_A_BUFFER_ECC_STATUS_DEBUGr:
   4666             case EMC_WLCT1_UPPER_B_BUFFER_ECC_STATUS_DEBUGr:
   4667             case EMC_WLCT2_LOWER_A_BUFFER_ECC_STATUS_DEBUGr:
   4668             case EMC_WLCT2_LOWER_B_BUFFER_ECC_STATUS_DEBUGr:
   4669             case EMC_WLCT2_MERGED_RETURN_WTAG_FIFO_ECC_STATUS_DEBUGr:
   4670             case EMC_WLCT2_UPPER_A_BUFFER_ECC_STATUS_DEBUGr:
   4671             case EMC_WLCT2_UPPER_B_BUFFER_ECC_STATUS_DEBUGr:
   4672             case EMC_WLCT_MEM_DEBUGr:
   4673             case EMC_WLCT_MERGED_RETURN_WTAG_FIFO_MEM_DEBUGr:
   4674             case EMC_WLCT_MERGED_RETURN_WTAG_FIFO_NFULL_THRESHOLDr:
   4675             case EMC_WTFP_BUFFER_ECC_STATUS_DEBUGr:
   4676             case EMC_WTFP_BUFFER_FILL_LEVEL_DEBUGr:
   4677             case EMC_WTFP_MEM_DEBUGr:
   4678             case EMC_WTOQ_BUFFER_ECC_STATUS_DEBUGr:
   4679             case EMC_WTOQ_BUFFER_FILL_LEVEL_DEBUGr:
   4680             case EMC_WTOQ_MEM_DEBUGr:
   4681             case EXT_BUFFER_POOL_CONG_STATEr:
   4682             case FC_MAP_TBL2_ECC_ERR1r:
   4683             case FC_MAP_TBL2_ECC_ERR2r:
   4684             case GLOBAL_WRED_AVG_QSIZE_BUFFERE_POOL0r:
   4685             case GLOBAL_WRED_AVG_QSIZE_BUFFERE_POOL1r:
   4686             case GLOBAL_WRED_AVG_QSIZE_BUFFERIr:
   4687             case GLOBAL_WRED_AVG_QSIZE_FRACTION_BUFFERE_POOL0r:
   4688             case GLOBAL_WRED_AVG_QSIZE_FRACTION_BUFFERE_POOL1r:
   4689             case TOP_MEM_PWR_DWN_BITMAP0_STATUSr:
   4690             case QSTRUCT_FAPCONFIG_0r:
   4691             case QSTRUCT_FAPCONFIG_1r:
   4692             case QSTRUCT_FAPCONFIG_2r:
   4693             case QSTRUCT_FAPCONFIG_3r:
   4694             case QSTRUCT_FAPOTPCONFIG_0r:
   4695             case QSTRUCT_FAPOTPCONFIG_1r:
   4696             case QSTRUCT_FAPOTPCONFIG_2r:
   4697             case QSTRUCT_FAPOTPCONFIG_3r:
   4698             if ((dev_id == BCM56248_DEVICE_ID) ||
   4699                 (dev_id == BCM56456_DEVICE_ID) ||
   4700                 (dev_id == BCM55455_DEVICE_ID))
   4701                 return 1;
   4702             default:
   4703                 return 0;
   4704         }
   4705     }
   4706 #endif
   4707 #ifdef BCM_HURRICANE2_SUPPORT
   4708     if (SOC_IS_HURRICANE2(unit)) {
   4709         switch (ainfo->reg) {
   4710             case TOP_MISC_CONTROL_3r:
   4711             case CMICTXCOSMASKr:
   4712             case MAC_MODEr:
   4713             case TOP_UC_TAP_READ_DATAr:
   4714             case XLMAC_RX_LSS_STATUSr:
   4715                 return 1;   /* Skip these registers */
   4716             default:
   4717                 return 0;
   4718         }
   4719     }
   4720 #endif
   4721 #ifdef BCM_GREYHOUND_SUPPORT
   4722     if(SOC_IS_GREYHOUND(unit)) {
   4723         uint16 dev_id;
   4724         uint8  rev_id;
   4725         soc_cm_get_id(unit, &dev_id, &rev_id);
   4726         switch (ainfo->reg) {
   4727             case CMICTXCOSMASKr:
   4728             case PGW_CTRL_0r:
   4729             case XLPORT_LED_CHAIN_CONFIGr:
   4730             case TOP_XG1_LCPLL_FBDIV_CTRL_1r:
   4731             case TOP_XG_PLL0_CTRL_5r:
   4732             case TOP_XG_PLL0_CTRL_6r:
   4733             case TOP_XG_PLL0_CTRL_7r:
   4734             case TOP_XG_PLL1_CTRL_1r:
   4735             case TOP_XG_PLL1_CTRL_5r: 
   4736             case TOP_XG_PLL1_CTRL_6r:
   4737             case TOP_XG_PLL1_CTRL_7r:
   4738             case TOP_BS_PLL0_CTRL_0r:
   4739             case TOP_BS_PLL0_CTRL_1r:
   4740             case TOP_BS_PLL0_CTRL_5r:
   4741             case TOP_BS_PLL0_CTRL_6r:
   4742             case TOP_BS_PLL0_CTRL_7r:
   4743             case TOP_BS_PLL1_CTRL_0r:
   4744             case TOP_BS_PLL1_CTRL_1r:
   4745             case TOP_BS_PLL1_CTRL_5r:
   4746             case TOP_BS_PLL1_CTRL_6r:
   4747             case TOP_BS_PLL1_CTRL_7r:
   4748             case SPEED_LIMIT_ENTRY0_PHYSICAL_PORT_NUMBERr:
   4749             case SPEED_LIMIT_ENTRY1_PHYSICAL_PORT_NUMBERr:
   4750             case SPEED_LIMIT_ENTRY2_PHYSICAL_PORT_NUMBERr:
   4751             case SPEED_LIMIT_ENTRY3_PHYSICAL_PORT_NUMBERr:                
   4752             case SPEED_LIMIT_ENTRY4_PHYSICAL_PORT_NUMBERr:
   4753             case SPEED_LIMIT_ENTRY8_PHYSICAL_PORT_NUMBERr:
   4754             case SPEED_LIMIT_ENTRY9_PHYSICAL_PORT_NUMBERr:
   4755             case SPEED_LIMIT_ENTRY10_PHYSICAL_PORT_NUMBERr:
   4756             case SPEED_LIMIT_ENTRY11_PHYSICAL_PORT_NUMBERr:
   4757             case SPEED_LIMIT_ENTRY13_PHYSICAL_PORT_NUMBERr:
   4758             case SPEED_LIMIT_ENTRY14_PHYSICAL_PORT_NUMBERr:
   4759             case SPEED_LIMIT_ENTRY15_PHYSICAL_PORT_NUMBERr:
   4760             case SPEED_LIMIT_ENTRY16_PHYSICAL_PORT_NUMBERr:
   4761             case SPEED_LIMIT_ENTRY18_PHYSICAL_PORT_NUMBERr:
   4762             case SPEED_LIMIT_ENTRY22_PHYSICAL_PORT_NUMBERr:
   4763             case SPEED_LIMIT_ENTRY23_PHYSICAL_PORT_NUMBERr:
   4764             case TOP_PVTMON_CTRL_0r:
   4765             case AVS_REG_HW_MNTR_SEQUENCER_MASK_PVT_MNTRr:
   4766                 return 1;
   4767             case CFAPFULLTHRESHOLDr:
   4768                 if ((dev_id == BCM53422_DEVICE_ID) || (dev_id == BCM53424_DEVICE_ID) ||
   4769                     (dev_id == BCM53426_DEVICE_ID)) {
   4770                     return 1;
   4771                 }
   4772                 break;
   4773             default:
   4774                 break;
   4775         }
   4776     }
   4777 #endif
   4778 #ifdef BCM_HURRICANE3_SUPPORT
   4779     if(SOC_IS_HURRICANE3(unit)) {
   4780         if (soc_feature(unit, soc_feature_wh2)) {
   4781             switch (ainfo->reg) {
   4782                 case CMICTXCOSMASKr:
   4783                 case GPORT_SGMII0_CTRL_REGr:
   4784                 case GPORT_SGMII1_CTRL_REGr:
   4785                 case TOP_SOFT_RESET_REGr:
   4786                 case TOP_QGPHY_CTRL_0r:
   4787                 case TOP_SGMII_CTRL_REGr:
   4788                 case TOP_QGPHY_CTRL_2r:
   4789                 case TOP_XG_PLL0_CTRL_3r:
   4790                 case GPORT_XGXS0_CTRL_REGr:
   4791                 case TOP_BS_PLL0_CTRL_3r:
   4792                 case TOP_BS_PLL0_CTRL_5r:
   4793                 case TOP_BS_PLL0_CTRL_6r:
   4794                 case TOP_BS_PLL0_CTRL_7r:
   4795                 case TOP_XG_PLL0_CTRL_5r:
   4796                 case TOP_XG_PLL0_CTRL_6r:
   4797                 case TOP_XG_PLL0_CTRL_7r:
   4798                     return 1;
   4799                 default:
   4800                     break;
   4801             }
   4802         } else {
   4803             uint16 dev_id;
   4804             uint8  rev_id;
   4805             soc_cm_get_id(unit, &dev_id, &rev_id);
   4806             switch (ainfo->reg) {
   4807                 case CMICTXCOSMASKr:
   4808                 case PGW_CTRL_0r:
   4809                 case XLPORT_LED_CHAIN_CONFIGr:
   4810                 case TOP_BS_PLL0_CTRL_0r:
   4811                 case TOP_BS_PLL0_CTRL_1r:
   4812                 case TOP_BS_PLL0_CTRL_3r:
   4813                 case TOP_BS_PLL0_CTRL_5r:
   4814                 case TOP_BS_PLL0_CTRL_6r:
   4815                 case TOP_BS_PLL0_CTRL_7r:
   4816                 case TOP_BS_PLL1_CTRL_0r:
   4817                 case TOP_BS_PLL1_CTRL_1r:
   4818                 case TOP_BS_PLL1_CTRL_3r:
   4819                 case TOP_BS_PLL1_CTRL_5r:
   4820                 case TOP_BS_PLL1_CTRL_6r:
   4821                 case TOP_BS_PLL1_CTRL_7r:
   4822                 case TOP_XG1_LCPLL_FBDIV_CTRL_1r:
   4823                 case TOP_XG_PLL0_CTRL_1r:
   4824                 case TOP_XG_PLL0_CTRL_5r:
   4825                 case TOP_XG_PLL0_CTRL_6r:
   4826                 case TOP_XG_PLL0_CTRL_7r:
   4827                 case TOP_XG_PLL1_CTRL_1r:
   4828                 case TOP_XG_PLL1_CTRL_5r:
   4829                 case TOP_XG_PLL1_CTRL_6r:
   4830                 case TOP_XG_PLL1_CTRL_7r:
   4831                 case SPEED_LIMIT_ENTRY0_PHYSICAL_PORT_NUMBERr:
   4832                 case SPEED_LIMIT_ENTRY4_PHYSICAL_PORT_NUMBERr:
   4833                 case SPEED_LIMIT_ENTRY8_PHYSICAL_PORT_NUMBERr:
   4834                 case SPEED_LIMIT_ENTRY13_PHYSICAL_PORT_NUMBERr:
   4835                 case SPEED_LIMIT_ENTRY14_PHYSICAL_PORT_NUMBERr:
   4836                 case SPEED_LIMIT_ENTRY15_PHYSICAL_PORT_NUMBERr:
   4837                 case SPEED_LIMIT_ENTRY16_PHYSICAL_PORT_NUMBERr:
   4838                 case SPEED_LIMIT_ENTRY18_PHYSICAL_PORT_NUMBERr:
   4839                 case SPEED_LIMIT_ENTRY22_PHYSICAL_PORT_NUMBERr:
   4840                 case SPEED_LIMIT_ENTRY23_PHYSICAL_PORT_NUMBERr:
   4841                 case TOP_PVTMON_CTRL_0r:
   4842                 case AVS_REG_HW_MNTR_SEQUENCER_MASK_PVT_MNTRr:
   4843                 case GPORT_XGXS0_CTRL_REGr:
   4844                 case TPCEr:
   4845                     return 1;
   4846                 case CFAPFULLTHRESHOLDr:
   4847                     if (dev_id == BCM53434_DEVICE_ID) {
   4848                         return 1;
   4849                     }
   4850                     break;
   4851                 default:
   4852                     break;
   4853             }
   4854         }
   4855     }
   4856 #endif
   4857 #ifdef BCM_GREYHOUND2_SUPPORT
   4858     if(SOC_IS_GREYHOUND2(unit)) {
   4859         uint16 dev_id;
   4860         uint8  rev_id;
   4861         soc_cm_get_id(unit, &dev_id, &rev_id);
   4862         switch (ainfo->reg) {
   4863             case CMICTXCOSMASKr:
   4864             case PGW_CTRL_0r:
   4865             case PGW_CL_LED_CHAIN_CONFIGr:
   4866             case PGW_GE_LED_CHAIN_CONFIGr:
   4867             case PGW_XL_LED_CHAIN_CONFIGr:
   4868             case XLPORT_LED_CHAIN_CONFIGr:
   4869             case CLPORT_LED_CHAIN_CONFIGr:
   4870             case TOP_XG1_LCPLL_FBDIV_CTRL_1r:
   4871             case TOP_XG_PLL0_CTRL_6r:
   4872             case TOP_XG_PLL0_CTRL_3r:
   4873             case TOP_XG_PLL0_CTRL_7r:
   4874             case TOP_XG_PLL1_CTRL_1r:
   4875             case TOP_XG_PLL1_CTRL_3r:
   4876             case TOP_XG_PLL1_CTRL_6r:
   4877             case SPEED_LIMIT_ENTRY0_PHYSICAL_PORT_NUMBERr:
   4878             case SPEED_LIMIT_ENTRY4_PHYSICAL_PORT_NUMBERr:
   4879             case SPEED_LIMIT_ENTRY8_PHYSICAL_PORT_NUMBERr:
   4880             case SPEED_LIMIT_ENTRY13_PHYSICAL_PORT_NUMBERr:
   4881             case SPEED_LIMIT_ENTRY14_PHYSICAL_PORT_NUMBERr:
   4882             case SPEED_LIMIT_ENTRY15_PHYSICAL_PORT_NUMBERr:
   4883             case SPEED_LIMIT_ENTRY16_PHYSICAL_PORT_NUMBERr:
   4884             case SPEED_LIMIT_ENTRY18_PHYSICAL_PORT_NUMBERr:
   4885             case SPEED_LIMIT_ENTRY22_PHYSICAL_PORT_NUMBERr:
   4886             case SPEED_LIMIT_ENTRY23_PHYSICAL_PORT_NUMBERr:
   4887             case TOP_PVTMON_CTRL_0r:
   4888             case AVS_REG_HW_MNTR_SEQUENCER_MASK_PVT_MNTRr:
   4889             case GPORT_XGXS0_CTRL_REGr:
   4890             case XLPORT_XGXS0_CTRL_REGr:
   4891             case CLPORT_XGXS0_CTRL_REGr:
   4892             case GPORT_SGMII0_CTRL_REGr:
   4893             case GPORT_SGMII1_CTRL_REGr:
   4894             case SR_RX_FLOW_ID_CONTROLr:
   4895             case SR_TX_FLOW_ID_CONTROLr:
   4896                 return 1;
   4897             default:
   4898                 break;
   4899         }
   4900     }
   4901 #endif
   4902 #ifdef BCM_DFE_SUPPORT
   4903     if(SOC_IS_DFE(unit)) {
   4904         int rv, is_filtered = 0;
   4905 
   4906         rv =  MBCM_DFE_DRIVER_CALL(unit, mbcm_dfe_drv_test_reg_default_val_filter, (unit, ainfo->reg, &is_filtered));
   4907         if (rv == BCM_E_NONE && is_filtered)
   4908         {
   4909             return 1; /* Skip these registers */
   4910         }
   4911     }
   4912 #endif
   4913 #ifdef BCM_DNXF_SUPPORT
   4914     if(SOC_IS_DNXF(unit)) {
   4915 		if (sal_strstr(SOC_REG_NAME(unit, ainfo->reg), "AVS_") != NULL) {
   4916 			return 1; /* Skip broadcast registers (sw only registers)*/
   4917 		}
   4918         switch(ainfo->reg) {
   4919 	   case MESH_TOPOLOGY_GLOBAL_MEM_OPTIONSr:
   4920 	   case MESH_TOPOLOGY_RESERVED_MTCPr:
   4921 
   4922 	   case ECI_BLOCKS_POWER_DOWNr:
   4923 	   case CMIC_CPS_RESETr:
   4924 	   case ECI_BLOCKS_SOFT_RESETr:
   4925 	   case ECI_BLOCKS_SOFT_INITr:
   4926 	   case ECI_BLOCKS_SBUS_RESETr:
   4927 	   case ECI_AUTO_DOC_NAME_20r:
   4928 	   case ECI_ECC_ERR_1B_MONITOR_MEM_MASKr:
   4929 	   case ECI_ECC_ERR_2B_MONITOR_MEM_MASKr:
   4930 	   case ECI_ECC_INTERRUPT_REGISTER_MASKr:
   4931 	   case ECI_ENABLE_DYNAMIC_MEMORY_ACCESSr:
   4932 	   case ECI_FAP_GLOBAL_GENERAL_CFG_2r:
   4933 	   case ECI_FE_GLOBAL_GENERAL_CFG_1r:
   4934 	   case ECI_INTERRUPT_MASK_REGISTERr:
   4935        case ECI_INDIRECT_COMMAND_ADDRESSr:
   4936        case ECI_TAP_CPU_INTERFACE_COMMANDr:
   4937 	   case FMAC_ASYNC_FIFO_CONFIGURATIONr:
   4938 	   case FMAC_RETIMERr:
   4939 	   /*In these registers the read value
   4940 		  will always be different than write value by design*/
   4941 	   case ECI_INDIRECT_COMMANDr:
   4942 	   case FSRD_INDIRECT_COMMANDr:
   4943 	   case RTP_INDIRECT_COMMANDr:
   4944 	   case DCL_INDIRECT_COMMANDr:
   4945 	   /*SBUS last in chain*/
   4946 	   case QRH_SBUS_BROADCAST_IDr:
   4947 	   case LCM_SBUS_BROADCAST_IDr:
   4948 	   case FSRD_SBUS_BROADCAST_IDr:
   4949 	   case CCH_SBUS_BROADCAST_IDr:
   4950 	   case FMAC_SBUS_BROADCAST_IDr:
   4951 	   case DCML_SBUS_BROADCAST_IDr:
   4952 	   case DCH_SBUS_BROADCAST_IDr:
   4953 	   case FMAC_SBUS_LAST_IN_CHAINr:
   4954 	   case FSRD_SBUS_LAST_IN_CHAINr:
   4955 	   case DCH_SBUS_LAST_IN_CHAINr:
   4956 	   case DCML_SBUS_LAST_IN_CHAINr:
   4957 	   case LCM_SBUS_LAST_IN_CHAINr:
   4958 	   case QRH_SBUS_LAST_IN_CHAINr:
   4959 	   case CCS_SBUS_LAST_IN_CHAINr:
   4960 	   case CCH_SBUS_LAST_IN_CHAINr:
   4961 	   case RTP_SBUS_LAST_IN_CHAINr:
   4962 	   case MESH_TOPOLOGY_SBUS_LAST_IN_CHAINr:
   4963 	   case ECI_SBUS_LAST_IN_CHAINr:
   4964 	   case OCCG_REG_0087r:
   4965 	   case BRDC_CCH_SBUS_BROADCAST_IDr:
   4966 	   case BRDC_DCML_SBUS_BROADCAST_IDr:
   4967 	   case BRDC_LCM_SBUS_BROADCAST_IDr:
   4968 	   case BRDC_QRH_SBUS_BROADCAST_IDr:
   4969 	   /*the following registers are filtered temporarily- the length of these registers should be amended according to the block they are in 
   4970 	   (need to be the longest line of a register that is RW instead of always 640 bit)*/
   4971 	   case DCL_INDIRECT_COMMAND_WR_DATAr:
   4972 	   case ECI_INDIRECT_COMMAND_WR_DATAr:
   4973 	   case FSRD_INDIRECT_COMMAND_WR_DATAr:
   4974 	   case RTP_INDIRECT_COMMAND_WR_DATAr:
   4975 	   /*the following registers should not exist in data base and therefore filtered*/
   4976 					
   4977 	   /*the following registers are filtered because they relate to Pll*/ 
   4978 	   case ECI_REG_0172r:
   4979 	   case ECI_AUTO_DOC_NAME_19r:
   4980 	   case ECI_REG_016Cr:
   4981 	   case ECI_PRM_PLL_CONTROL_STATUSr:
   4982 	   case RTP_ENABLE_DYNAMIC_MEMORY_ACCESSr:
   4983 	   case QRH_ENABLE_DYNAMIC_MEMORY_ACCESSr:
   4984 	   case MCT_ENABLE_DYNAMIC_MEMORY_ACCESSr:
   4985 	   case DCML_ENABLE_DYNAMIC_MEMORY_ACCESSr:
   4986 	   case FSRD_ENABLE_DYNAMIC_MEMORY_ACCESSr:
   4987 	   case BRDC_DCML_ENABLE_DYNAMIC_MEMORY_ACCESSr:
   4988 	   case BRDC_QRH_ENABLE_DYNAMIC_MEMORY_ACCESSr:
   4989        case ECI_ECIC_BLOCKS_RESETr:
   4990        case ECI_MISC_PLL_0_CONFIGr:
   4991        case ECI_MISC_PLL_1_CONFIGr:
   4992        case ECI_MISC_PLL_2_CONFIGr:
   4993        case ECI_MISC_PLL_3_CONFIGr:
   4994        case FMAC_ECC_ERR_1B_MONITOR_MEM_MASKr:
   4995        case FMAC_ECC_ERR_2B_MONITOR_MEM_MASKr:
   4996        case FMAC_ECC_INTERRUPT_REGISTER_MASKr:
   4997        case FMAC_FMAL_GENERAL_CONFIGURATIONr:
   4998        case FMAC_FMAL_RX_GENERAL_CONFIGURATIONr:
   4999        case FMAC_FMAL_STATISTICS_OUTPUT_CONTROLr:
   5000        case FMAC_FMAL_TX_COMMA_BURST_CONFIGURATIONr:
   5001        case FMAC_FMAL_TX_CONTROL_BURST_CONFIGURATIONr:
   5002        case FMAC_FMAL_TX_GENERAL_CONFIGURATIONr:
   5003        case FMAC_FPS_CONFIGURATION_RX_SYNCr:
   5004        case FMAC_INTERRUPT_MASK_REGISTERr:
   5005        case FMAC_LEAKY_BUCKET_CONTROL_REGISTERr:
   5006        case FMAC_LINK_LEVEL_FLOW_CONTROL_ENABLE_REGISTERr:
   5007        case FMAC_PAR_ERR_MEM_MASKr:
   5008        case FMAC_RECEIVE_RESET_REGISTERr:
   5009        case FMAC_FE_GLOBAL_GENERAL_CFG_1r:
   5010        case FMAC_RSF_CONFIGURATIONr:
   5011        case FMAC_TX_LANE_SWAP_0r:
   5012        case FMAC_TX_LANE_SWAP_1r:
   5013        case FMAC_TX_LANE_SWAP_2r:
   5014        case FMAC_TX_LANE_SWAP_3r:
   5015        case DCML_INDIRECT_COMMANDr:
   5016                return 1; /* Skip these registers */
   5017             default:
   5018                 break;
   5019 		}
   5020     }
   5021 #endif
   5022 
   5023 #ifdef BCM_DNX_SUPPORT
   5024     if(SOC_IS_DNX(unit)) {
   5025 		if (sal_strstr(SOC_REG_NAME(unit, ainfo->reg), "AN_") != NULL) {
   5026 			return 1; /* Skip broadcast registers (sw only registers)*/
   5027 		}
   5028 		if (sal_strstr(SOC_REG_NAME(unit, ainfo->reg), "BRDC_") != NULL) {
   5029 			return 1; /* Skip broadcast registers (sw only registers)*/
   5030 		}
   5031         switch(ainfo->reg) {
   5032 
   5033             /*SBUS last in chain*/
   5034             case CDMAC_ECC_STATUSr:
   5035             case CDPORT_INTR_STATUSr:
   5036             case CDPORT_LINKSTATUS_DOWNr:
   5037             case CDPORT_TSC_PLL_LOCK_STATUSr:
   5038             case CDPORT_GENERAL_SPARE0_REGr:
   5039             case CDPORT_GENERAL_SPARE1_REGr:
   5040             case CDPORT_GENERAL_SPARE2_REGr:
   5041             case CDPORT_SBUS_CONTROLr:
   5042             case CDPORT_GENERAL_SPARE3_REGr:
   5043             case CDPORT_INTR_ENABLEr:
   5044             case CDPORT_MAC_CONTROLr:
   5045             case CDPORT_MODE_REGr:
   5046             case CDPORT_TSC_MEM_CTRLr:
   5047             case CDPORT_XGXS0_CTRL_REGr:
   5048             case BDM_SBUS_BROADCAST_IDr:
   5049             case CDUM_SBUS_BROADCAST_IDr:
   5050             case CDU_SBUS_BROADCAST_IDr:
   5051             case CFC_SBUS_BROADCAST_IDr:
   5052             case CGM_SBUS_BROADCAST_IDr:
   5053             case CRPS_SBUS_BROADCAST_IDr:
   5054             case DDHA_SBUS_BROADCAST_IDr:
   5055             case DDHB_SBUS_BROADCAST_IDr:
   5056             case DDP_SBUS_BROADCAST_IDr:
   5057             case DHC_SBUS_BROADCAST_IDr:
   5058             case DQM_SBUS_BROADCAST_IDr:
   5059             case ECGM_SBUS_BROADCAST_IDr:
   5060             case ECI_SBUS_BROADCAST_IDr:
   5061             case EDB_SBUS_BROADCAST_IDr:
   5062             case EPNI_SBUS_BROADCAST_IDr:
   5063             case EPRE_SBUS_BROADCAST_IDr:
   5064             case EPS_SBUS_BROADCAST_IDr:
   5065             case ERPP_SBUS_BROADCAST_IDr:
   5066             case ETPPA_SBUS_BROADCAST_IDr:
   5067             case ETPPB_SBUS_BROADCAST_IDr:
   5068             case ETPPC_SBUS_BROADCAST_IDr:
   5069             case EVNT_SBUS_BROADCAST_IDr:
   5070             case FCR_SBUS_BROADCAST_IDr:
   5071             case FCT_SBUS_BROADCAST_IDr:
   5072             case FDA_SBUS_BROADCAST_IDr:
   5073             case FDR_SBUS_BROADCAST_IDr:
   5074             case FDTL_SBUS_BROADCAST_IDr:
   5075             case FDT_SBUS_BROADCAST_IDr:
   5076             case FMAC_SBUS_BROADCAST_IDr:
   5077             case FQP_SBUS_BROADCAST_IDr:
   5078             case FSRD_SBUS_BROADCAST_IDr:
   5079             case HBC_SBUS_BROADCAST_IDr:
   5080             case HBMC_SBUS_BROADCAST_IDr:
   5081             case ILE_SBUS_BROADCAST_IDr:
   5082             case IPPA_SBUS_BROADCAST_IDr:
   5083             case IPPB_SBUS_BROADCAST_IDr:
   5084             case IPPC_SBUS_BROADCAST_IDr:
   5085             case IPPD_SBUS_BROADCAST_IDr:
   5086             case IPPE_SBUS_BROADCAST_IDr:
   5087             case IPPF_SBUS_BROADCAST_IDr:
   5088             case IPS_SBUS_BROADCAST_IDr:
   5089             case IPT_SBUS_BROADCAST_IDr:
   5090             case IQM_SBUS_BROADCAST_IDr:
   5091             case IRE_SBUS_BROADCAST_IDr:
   5092             case ITPPD_SBUS_BROADCAST_IDr:
   5093             case ITPP_SBUS_BROADCAST_IDr:
   5094             case KAPS_SBUS_BROADCAST_IDr:
   5095             case MACT_SBUS_BROADCAST_IDr:
   5096             case MCP_SBUS_BROADCAST_IDr:
   5097             case MDB_SBUS_BROADCAST_IDr:
   5098             case MESH_TOPOLOGY_SBUS_BROADCAST_IDr:
   5099             case MRPS_SBUS_BROADCAST_IDr:
   5100             case MTM_SBUS_BROADCAST_IDr:
   5101             case NMG_SBUS_BROADCAST_IDr:
   5102             case OAMP_SBUS_BROADCAST_IDr:
   5103             case OCB_SBUS_BROADCAST_IDr:
   5104             case OLP_SBUS_BROADCAST_IDr:
   5105             case PDM_SBUS_BROADCAST_IDr:
   5106             case PEM_SBUS_BROADCAST_IDr:
   5107             case PQP_SBUS_BROADCAST_IDr:
   5108             case RQP_SBUS_BROADCAST_IDr:
   5109             case RTP_SBUS_BROADCAST_IDr:
   5110             case SCH_SBUS_BROADCAST_IDr:
   5111             case SIF_SBUS_BROADCAST_IDr:
   5112             case SPB_SBUS_BROADCAST_IDr:
   5113             case SQM_SBUS_BROADCAST_IDr:
   5114             case TCAM_SBUS_BROADCAST_IDr:
   5115             case TDU_SBUS_BROADCAST_IDr:
   5116             /*suspects */
   5117             case ECI_ECIC_MDIO_CONFIGr:
   5118             case ECI_ECIC_MISC_RESETr:
   5119             case ECI_BLOCKS_POWER_DOWNr:
   5120             case ECI_BLOCKS_SBUS_RESETr:
   5121             case ECI_BLOCKS_SOFT_INITr:
   5122             case ECI_BLOCKS_SOFT_RESETr:
   5123             case ECI_TAP_CPU_INTERFACE_COMMANDr:
   5124             case ECI_TS_PLL_CONFIGURATIONSr:
   5125             /* Skipping indirrect command registers */
   5126             case CDU_INDIRECT_COMMANDr:
   5127             case CDUM_INDIRECT_COMMANDr:
   5128             case CFC_INDIRECT_COMMANDr:
   5129             case CGM_INDIRECT_COMMANDr:
   5130             case CRPS_INDIRECT_COMMANDr:
   5131             case DDHA_INDIRECT_COMMANDr:
   5132             case DDHB_INDIRECT_COMMANDr:
   5133             case DHC_INDIRECT_COMMANDr:
   5134             case DQM_INDIRECT_COMMANDr:
   5135             case ECGM_INDIRECT_COMMANDr:
   5136             case ECI_INDIRECT_COMMANDr:
   5137             case EDB_INDIRECT_COMMANDr:
   5138             case EPNI_INDIRECT_COMMANDr:
   5139             case EPS_INDIRECT_COMMANDr:
   5140             case ERPP_INDIRECT_COMMANDr:
   5141             case ETPPA_INDIRECT_COMMANDr:
   5142             case ETPPB_INDIRECT_COMMANDr:
   5143             case ETPPC_INDIRECT_COMMANDr:
   5144             case EVNT_INDIRECT_COMMANDr:
   5145             case FCR_INDIRECT_COMMANDr:
   5146             case FCT_INDIRECT_COMMANDr:
   5147             case FDR_INDIRECT_COMMANDr:
   5148             case FDT_INDIRECT_COMMANDr:
   5149             case FQP_INDIRECT_COMMANDr:
   5150             case FSRD_INDIRECT_COMMANDr:
   5151             case HBC_INDIRECT_COMMANDr:
   5152             case HBMC_INDIRECT_COMMANDr:
   5153             case ILE_INDIRECT_COMMANDr:
   5154             case IPPA_INDIRECT_COMMANDr:
   5155             case IPPB_INDIRECT_COMMANDr:
   5156             case IPPC_INDIRECT_COMMANDr:
   5157             case IPPD_INDIRECT_COMMANDr:
   5158             case IPPE_INDIRECT_COMMANDr:
   5159             case IPPF_INDIRECT_COMMANDr:
   5160             case IPS_INDIRECT_COMMANDr:
   5161             case IPT_INDIRECT_COMMANDr:
   5162             case IQM_INDIRECT_COMMANDr:
   5163             case IRE_INDIRECT_COMMANDr:
   5164             case ITPP_INDIRECT_COMMANDr:
   5165             case ITPPD_INDIRECT_COMMANDr:
   5166             case KAPS_INDIRECT_COMMANDr:
   5167             case MACT_INDIRECT_COMMANDr:
   5168             case MCP_INDIRECT_COMMANDr:
   5169             case MDB_INDIRECT_COMMANDr:
   5170             case MRPS_INDIRECT_COMMANDr:
   5171             case MTM_INDIRECT_COMMANDr:
   5172             case OAMP_INDIRECT_COMMANDr:
   5173             case OCB_INDIRECT_COMMANDr:
   5174             case OLP_INDIRECT_COMMANDr:
   5175             case PEM_INDIRECT_COMMANDr:
   5176             case PQP_INDIRECT_COMMANDr:
   5177             case RQP_INDIRECT_COMMANDr:
   5178             case RTP_INDIRECT_COMMANDr:
   5179             case SCH_INDIRECT_COMMANDr:
   5180             case SPB_INDIRECT_COMMANDr:
   5181             case SQM_INDIRECT_COMMANDr:
   5182             case TCAM_INDIRECT_COMMANDr:
   5183             /* Read only register and driven by another registers */
   5184             case MDB_ARM_KAPS_GLOBAL_EVENTr:
   5185             case MDB_ARM_KAPS_IBC_COMMAND_WORDr:
   5186             case MDB_ARM_KAPS_IBC_FIFO_CORRECTABLE_STATUSr:
   5187             case MDB_ARM_KAPS_IBC_FIFO_UNCORRECTABLE_STATUSr:
   5188             case MDB_ARM_KAPS_IBC_QUEUE_STATUSr:
   5189             case MDB_ARM_KAPS_IBC_RESPONSE_DATAr:
   5190             case MDB_ARM_KAPS_MEMORY_A_ERRORr:
   5191             case MDB_ARM_KAPS_MEMORY_B_ERRORr:
   5192             case MDB_ARM_KAPS_REVISIONr:
   5193             case MDB_ARM_KAPS_R_5_AXI_ERROR_STATUS_0r:
   5194             case MDB_ARM_KAPS_R_5_AXI_ERROR_STATUS_1r:
   5195             case MDB_ARM_KAPS_R_5_CORE_MEM_CONTROLr:
   5196             case MDB_ARM_KAPS_R_5_DAP_APB_CTRLr:
   5197             case MDB_ARM_KAPS_R_5_DAP_APB_RDATAr:
   5198             case MDB_ARM_KAPS_R_5_DEBUG_STATUSr:
   5199             case MDB_ARM_KAPS_R_5_DEBUG_STATUS_EVENT_BUS_0r:
   5200             case MDB_ARM_KAPS_R_5_DEBUG_STATUS_EVENT_BUS_1r:
   5201             case MDB_ARM_KAPS_R_5_ECC_ERR_RD_TCM_Ar:
   5202             case MDB_ARM_KAPS_R_5_ECC_ERR_RD_TCM_B_0r:
   5203             case MDB_ARM_KAPS_R_5_ECC_ERR_RD_TCM_B_1r:
   5204             case MDB_ARM_KAPS_R_5_ECC_ERR_WR_TCM_Ar:
   5205             case MDB_ARM_KAPS_R_5_ECC_ERR_WR_TCM_B_0r:
   5206             case MDB_ARM_KAPS_R_5_ECC_ERR_WR_TCM_B_1r:
   5207             case MDB_ARM_KAPS_R_5_FIFO_MON_EVENTr:
   5208             case MDB_ARM_KAPS_SEARCH_0_A_ERRORr:
   5209             case MDB_ARM_KAPS_SEARCH_0_B_ERRORr:
   5210             case MDB_ARM_KAPS_SEARCH_1_A_ERRORr:
   5211             case MDB_ARM_KAPS_SEARCH_1_B_ERRORr:
   5212             case MDB_ARM_KAPS_STATUS_CFIFOr:
   5213             case MDB_ARM_KAPS_STATUS_RFIFOr:
   5214             
   5215             case CDMAC_ECC_CTRLr:
   5216             case CDMAC_LINK_INTR_CTRLr:
   5217             case CDMAC_MEM_CTRLr:
   5218             case CDMAC_MIB_COUNTER_MODEr:
   5219             case CDMAC_MIB_COUNTER_PROG_RANGE_CNTR0r:
   5220             case CDMAC_MIB_COUNTER_PROG_RANGE_CNTR1r:
   5221             case CDMAC_MIB_COUNTER_PROG_RANGE_CNTR2r:
   5222             case CDMAC_MIB_COUNTER_PROG_RANGE_CNTR3r:
   5223             case ILKN_X4_CONTROL0_ILKN_CONTROL0r:
   5224             case MAIN0_ECC_1B_ERR_INTERRUPT_ENr:
   5225             case MAIN0_ECC_2B_ERR_INTERRUPT_ENr:
   5226             case MAIN0_ECC_CORRUPT_CONTROL_0r:
   5227             case MAIN0_ECC_CORRUPT_CONTROL_1r:
   5228             case MAIN0_ECC_DISABLE_CONTROLr:
   5229             case MAIN0_SETUPr:
   5230             case MAIN0_TICK_CONTROL_0r:
   5231             case MAIN0_TICK_CONTROL_1r:
   5232             case MAIN0_TM_CONTROLr:
   5233             case PKTGEN0_PCS_SEEDA0r:
   5234             case PKTGEN0_PCS_SEEDA1r:
   5235             case PKTGEN0_PCS_SEEDA2r:
   5236             case PKTGEN0_PCS_SEEDA3r:
   5237             case PKTGEN0_PCS_SEEDB0r:
   5238             case PKTGEN0_PCS_SEEDB1r:
   5239             case PKTGEN0_PCS_SEEDB2r:
   5240             case PKTGEN0_PCS_SEEDB3r:
   5241             case PKTGEN0_PKTGENCTRL1r:
   5242             case PKTGEN0_PRTPCONTROLr:
   5243             case PKTGEN1_ERRORMASK0r:
   5244             case PKTGEN1_ERRORMASK1r:
   5245             case PKTGEN1_ERRORMASK2r:
   5246             case PKTGEN1_ERRORMASK3r:
   5247             case PKTGEN1_ERRORMASK4r:
   5248             case PKTGEN1_GLASTEST_CONTROLr:
   5249             case PMD_X1_CONTROLr:
   5250             case PMD_X1_FCLK_PERIODr:
   5251             case PMD_X1_PM_TIMER_OFFSETr:
   5252             case PMD_X4_CONTROLr:
   5253             case PMD_X4_MODEr:
   5254             case PMD_X4_OVERRIDEr:
   5255             case PMD_X4_RX_FIXED_LATENCYr:
   5256             case PMD_X4_TX_FIXED_LATENCYr:
   5257             case PMD_X4_UI_VALUE_HIr:
   5258             case PMD_X4_UI_VALUE_LOr:
   5259             case RX_X1_CONTROL0_RS_FEC_CONFIGr:
   5260             case RX_X1_CONTROL0_RX_LANE_SWAPr:
   5261             case RX_X4_CONTROL0_DECODE_CONTROL_0r:
   5262             case RX_X4_CONTROL0_PMA_CONTROL_0r:
   5263             case RX_X4_CONTROL0_RS_FEC_RX_CONTROL_0r:
   5264             case RX_X4_CONTROL0_RS_FEC_TIMERr:
   5265             case RX_X4_CONTROL0_RX_TS_CONTROLr:
   5266             case RX_X4_FEC_CONTROL_FEC_0r:
   5267             case RX_X4_FEC_CONTROL_FEC_1r:
   5268             case RX_X4_FEC_CONTROL_FEC_2r:
   5269             case RX_X4_STATUS1_RL_MODE_SW_CONTROLr:
   5270             case SC_X1_CONTROL_PIPELINE_RESET_COUNTr:
   5271             case SC_X1_CONTROL_TX_RESET_COUNTr:
   5272             case SC_X4_CONTROL_CONTROLr:
   5273             case SC_X4_CONTROL_SPARE0r:
   5274             case SC_X4_CONTROL_SW_SPARE1r:
   5275             case SYNCE_X4_FRACTIONAL_DIVr:
   5276             case SYNCE_X4_INTEGER_DIVr:
   5277             case TX_X1_CONTROL0_GLAS_TPMA_CONTROLr:
   5278             case TX_X1_CONTROL0_TX_LANE_SWAPr:
   5279             case TX_X4_CONTROL0_MISCr:
   5280             case TX_X4_CONTROL0_RS_SYMBOLr:
   5281             case TX_X4_CONTROL0_TX_TS_CONTROLr:
   5282             case TX_X4_CONTROL0_ERROR_CONTROLr:
   5283             /* Skipped after consultin with ASIC */
   5284             case IPT_SHAPER_STATUSr:
   5285             case MACT_RESERVED_SPARE_0r:
   5286             case MESH_TOPOLOGY_SPECIAL_CLOCK_CONTROLSr:
   5287             case FMAC_GTIMER_CONFIGURATIONr:
   5288             case FSRD_GTIMER_CONFIGURATIONr:
   5289             /* Registers filled during init */
   5290 
   5291             case CDUM_INDIRECT_FORCE_BUBBLEr:
   5292             case CDU_INDIRECT_FORCE_BUBBLEr:
   5293             case CFC_INDIRECT_FORCE_BUBBLEr:
   5294             case CGM_INDIRECT_FORCE_BUBBLEr:
   5295             case CRPS_INDIRECT_FORCE_BUBBLEr:
   5296             case DDHA_INDIRECT_FORCE_BUBBLEr:
   5297             case DDHA_INDIRECT_WR_MASKr:
   5298             case DDHB_INDIRECT_FORCE_BUBBLEr:
   5299             case DDHB_INDIRECT_WR_MASKr:
   5300             case DHC_INDIRECT_FORCE_BUBBLEr:
   5301             case DHC_INDIRECT_WR_MASKr:
   5302             case DQM_INDIRECT_FORCE_BUBBLEr:
   5303             case ECGM_INDIRECT_FORCE_BUBBLEr:
   5304             case ECI_FAB_0_PLL_CONFIGURATIONSr:
   5305             case ECI_FAB_1_PLL_CONFIGURATIONSr:
   5306             case ECI_INDIRECT_FORCE_BUBBLEr:
   5307             case ECI_NIF_0_PLL_CONFIGURATIONSr:
   5308             case ECI_NIF_1_PLL_CONFIGURATIONSr:
   5309             case ECI_PIR_CONFIGURATIONSr:
   5310             case ECI_RESERVED_20r:
   5311             case ECI_RESERVED_22r:
   5312             case ECI_SBUS_LAST_IN_CHAINr:
   5313             case EDB_INDIRECT_FORCE_BUBBLEr:
   5314             case EPNI_INDIRECT_FORCE_BUBBLEr:
   5315             case EPS_INDIRECT_FORCE_BUBBLEr:
   5316             case ERPP_INDIRECT_FORCE_BUBBLEr:
   5317             case ERPP_INDIRECT_WR_MASKr:
   5318             case ETPPA_INDIRECT_FORCE_BUBBLEr:
   5319             case ETPPB_INDIRECT_FORCE_BUBBLEr:
   5320             case ETPPC_INDIRECT_FORCE_BUBBLEr:
   5321             case EVNT_INDIRECT_FORCE_BUBBLEr:
   5322             case FCR_INDIRECT_FORCE_BUBBLEr:
   5323             case FCT_INDIRECT_FORCE_BUBBLEr:
   5324             case FDR_INDIRECT_FORCE_BUBBLEr:
   5325             case FDT_INDIRECT_FORCE_BUBBLEr:
   5326             case FMAC_RETIMERr:
   5327             case FMAC_SBUS_LAST_IN_CHAINr:
   5328             case FQP_INDIRECT_FORCE_BUBBLEr:
   5329             case FSRD_INDIRECT_FORCE_BUBBLEr:
   5330             case FSRD_SBUS_LAST_IN_CHAINr:
   5331             case HBC_DATA_SOURCE_CONFIGr:
   5332             case HBC_ENABLE_DYNAMIC_MEMORY_ACCESSr:
   5333             case HBC_HBM_COLUMN_ACCESS_TIMINGSr:
   5334             case HBC_HBM_CONFIGr:
   5335             case HBC_HBM_CPU_CONTROLr:
   5336             case HBC_HBM_MODE_REGISTERSr:
   5337             case HBC_HBM_MODE_REGISTER_MANAGER_CONFIGr:
   5338             case HBC_HBM_REFRESH_INTERVALSr:
   5339             case HBC_HBM_REFRESH_TIMINGSr:
   5340             case HBC_HBM_ROW_ACCESS_TIMINGSr:
   5341             case HBC_INDIRECT_COMMAND_ADDRESSr:
   5342             case HBC_INDIRECT_COMMAND_WR_DATAr:
   5343             case HBC_PIPELINES_CONFIGr:
   5344             case HBC_SBUS_LAST_IN_CHAINr:
   5345             case HBC_TSM_CONFIGr:
   5346             case HBMC_ENABLE_DYNAMIC_MEMORY_ACCESSr:
   5347             case HBMC_HBM_PHY_CHANNEL_CONTROLr:
   5348             case HBMC_HBM_PHY_CONTROLr:
   5349             case HBMC_HBM_PLL_CONFIGr:
   5350             case HBMC_HBM_RESET_CONTROLr:
   5351             case HBMC_INDIRECT_COMMAND_ADDRESSr:
   5352             case HBMC_INDIRECT_COMMAND_WR_DATAr:
   5353             case HBMC_INDIRECT_FORCE_BUBBLEr:
   5354             case ILE_INDIRECT_FORCE_BUBBLEr:
   5355             case IPPA_INDIRECT_FORCE_BUBBLEr:
   5356             case IPPA_INDIRECT_WR_MASKr:
   5357             case IPPB_FLPACS_TCAM_PROTECTION_MACHINE_CONFIGURATIONr:
   5358             case IPPB_FLPBCS_TCAM_PROTECTION_MACHINE_CONFIGURATIONr:
   5359             case IPPB_INDIRECT_FORCE_BUBBLEr:
   5360             case IPPB_INDIRECT_WR_MASKr:
   5361             case IPPC_INDIRECT_FORCE_BUBBLEr:
   5362             case IPPC_INDIRECT_WR_MASKr:
   5363             case IPPC_SPECIAL_CLOCK_CONTROLSr:
   5364             case IPPD_INDIRECT_FORCE_BUBBLEr:
   5365             case IPPD_SPECIAL_CLOCK_CONTROLSr:
   5366             case IPPE_INDIRECT_FORCE_BUBBLEr:
   5367             case IPPF_INDIRECT_FORCE_BUBBLEr:
   5368             case IPS_INDIRECT_FORCE_BUBBLEr:
   5369             case IPT_FLOW_CONTROL_DEBUGr:
   5370             case IPT_INDIRECT_FORCE_BUBBLEr:
   5371             case IQM_INDIRECT_FORCE_BUBBLEr:
   5372             case IRE_INDIRECT_FORCE_BUBBLEr:
   5373             case ITPPD_INDIRECT_FORCE_BUBBLEr:
   5374             case ITPP_INDIRECT_FORCE_BUBBLEr:
   5375             case KAPS_INDIRECT_FORCE_BUBBLEr:
   5376             case MACT_INDIRECT_FORCE_BUBBLEr:
   5377             case MCP_INDIRECT_FORCE_BUBBLEr:
   5378             case MDB_INDIRECT_FORCE_BUBBLEr:
   5379             case MRPS_INDIRECT_FORCE_BUBBLEr:
   5380             case MTM_INDIRECT_FORCE_BUBBLEr:
   5381             case OAMP_INDIRECT_FORCE_BUBBLEr:
   5382             case OCB_INDIRECT_FORCE_BUBBLEr:
   5383             case OLP_INDIRECT_FORCE_BUBBLEr:
   5384             case PEM_INDIRECT_FORCE_BUBBLEr:
   5385             case PQP_INDIRECT_FORCE_BUBBLEr:
   5386             case RQP_INDIRECT_FORCE_BUBBLEr:
   5387             case RTP_INDIRECT_FORCE_BUBBLEr:
   5388             case SCH_INDIRECT_FORCE_BUBBLEr:
   5389             case SPB_INDIRECT_FORCE_BUBBLEr:
   5390             case SQM_INDIRECT_FORCE_BUBBLEr:
   5391             case TCAM_INDIRECT_FORCE_BUBBLEr:
   5392             case TDU_ADDRESS_TRANSLATION_CONFIGr:
   5393             case TDU_ADDRESS_TRANSLATION_MATRIXr:
   5394             case TDU_DRAM_BLOCKED_CONFIGr:
   5395             case TDU_READ_DATA_PATH_CONFIGr:
   5396             case TDU_READ_REQUEST_PATH_CONFIGr:
   5397             case TDU_SBUS_LAST_IN_CHAINr:
   5398             case TDU_WRITE_REQUEST_PATH_CONFIGr:
   5399             case SCH_INDIRECT_COMMAND_ADDRESSr:
   5400             case SCH_DVS_NIF_CONFIGr:
   5401             case SCH_DVS_CONFIGr:
   5402                return 1; /* Skip these registers */
   5403             default:
   5404                 break;
   5405 		}
   5406     }
   5407 #endif
   5408 
   5409 #ifdef BCM_PETRA_SUPPORT
   5410     if(SOC_IS_ARAD(unit) && !SOC_IS_JERICHO(unit)) {
   5411         switch(ainfo->reg) {
   5412             case ECI_VERSION_REGISTERr:
   5413                return 1; /* Skip these registers */
   5414             default:
   5415                 break;
   5416         }
   5417     }
   5418     if(SOC_IS_ARDON(unit)) {
   5419         switch(ainfo->reg) {
   5420             case ECI_AVSr:
   5421             case FMAC_ASYNC_FIFO_CONFIGURATIONr:
   5422             case EDB_ESEM_MANAGEMENT_UNIT_CONFIGURATION_REGISTERr:
   5423             case EPNI_ESEM_MANAGEMENT_UNIT_CONFIGURATION_REGISTERr:
   5424                return 1; /* Skip these registers */
   5425             default:
   5426                 break;
   5427         }
   5428     }
   5429     if (SOC_IS_JERICHO_PLUS_ONLY(unit)) {
   5430         switch(ainfo->reg) {
   5431        
   5432         /* clk time changed - Witing for MCM release*/
   5433         case CFC_GTIMER_CONFIGURATIONr:
   5434         case DRCA_GTIMER_CONFIGURATIONr:
   5435         case DRCB_GTIMER_CONFIGURATIONr:
   5436         case DRCC_GTIMER_CONFIGURATIONr:
   5437         case DRCD_GTIMER_CONFIGURATIONr:
   5438         case DRCE_GTIMER_CONFIGURATIONr:
   5439         case DRCF_GTIMER_CONFIGURATIONr:
   5440         case DRCG_GTIMER_CONFIGURATIONr:
   5441         case DRCH_GTIMER_CONFIGURATIONr:
   5442         case OAMP_GTIMER_CONFIGURATIONr:
   5443 
   5444         /* we configure these on init */
   5445             /* Broadcast */
   5446         case CGM_SBUS_BROADCAST_IDr:
   5447         case EGQ_SBUS_BROADCAST_IDr:
   5448         case IHB_SBUS_BROADCAST_IDr:
   5449         case IHP_SBUS_BROADCAST_IDr:
   5450         case IPS_SBUS_BROADCAST_IDr:
   5451         case IQM_SBUS_BROADCAST_IDr:
   5452         case EPNI_SBUS_BROADCAST_IDr:
   5453         case FSRD_SBUS_BROADCAST_IDr:
   5454         case SCH_SBUS_BROADCAST_IDr:
   5455         case KAPS_BBS_SBUS_BROADCAST_IDr:
   5456         case FMAC_SBUS_BROADCAST_IDr:
   5457             /* Last in chain */
   5458         case EPNI_SBUS_LAST_IN_CHAINr:
   5459         case ECI_SBUS_LAST_IN_CHAINr: 
   5460         case EGQ_SBUS_LAST_IN_CHAINr:
   5461         case KAPS_BBS_SBUS_LAST_IN_CHAINr:
   5462         case CGM_SBUS_LAST_IN_CHAINr:
   5463         case FMAC_SBUS_LAST_IN_CHAINr:
   5464         case IHB_SBUS_LAST_IN_CHAINr:
   5465         case IHP_SBUS_LAST_IN_CHAINr:
   5466         case IPS_SBUS_LAST_IN_CHAINr:
   5467         case IQM_SBUS_LAST_IN_CHAINr:
   5468         case SCH_SBUS_LAST_IN_CHAINr:
   5469         case DRCH_REG_0087r:
   5470 
   5471         /* INDIRECT_COMMAND register is a special register and there is no meaning for the "default value". */
   5472         case CFC_INDIRECT_COMMANDr:
   5473         case OAMP_INDIRECT_COMMANDr:
   5474 
   5475         case EPNI_INDIRECT_WR_MASKr:
   5476         case EPNI_ECC_ERR_2B_MONITOR_MEM_MASKr:
   5477         case FCR_ECC_ERR_1B_MONITOR_MEM_MASKr:
   5478         case FCR_ECC_ERR_2B_MONITOR_MEM_MASKr:
   5479         case FDA_ECC_ERR_1B_MONITOR_MEM_MASKr:
   5480         case FDA_ECC_ERR_2B_MONITOR_MEM_MASKr:
   5481         case KAPS_BBS_INDIRECT_WR_MASKr:
   5482         case KAPS_BBS_KAPS_BB_ERROR_REGISTER_MASKr:
   5483         case MESH_TOPOLOGY_GLOBAL_GENERAL_CFG_1r:
   5484         case ECI_BLOCKS_SBUS_RESETr:
   5485         case ECI_BLOCKS_SOFT_RESETr:
   5486         case EDB_INDIRECT_WR_MASKr:
   5487         case IHP_PROTOCOL_TRAPS_PROGRAM_SELECTr:
   5488        
   5489         /* read error */
   5490         case EGQ_INDIRECT_WR_MASKr:
   5491         /* default value should be 0 */
   5492         case FDT_ECC_ERR_1B_MONITOR_MEM_MASKr:
   5493         case FDT_ECC_ERR_2B_MONITOR_MEM_MASKr:
   5494             return 1; /* Skip these registers */
   5495 
   5496             default:
   5497                 break;
   5498         }
   5499     }
   5500     if(SOC_IS_JERICHO(unit)) {
   5501         if (ainfo->reg<rd->start_from || ainfo->reg > rd->start_from + rd->count ) {
   5502             return 1;
   5503         }
   5504         if (!(rd->flags & REGTEST_FLAG_INC_PORT_MACROS)) {
   5505             soc_block_types_t regblktype = SOC_REG_INFO(unit, ainfo->reg).block; 
   5506             if (blocks_can_be_disabled(regblktype)) {
   5507                 return 1;
   5508             }
   5509         }
   5510 
   5511         switch(ainfo->reg) {
   5512 
   5513             case EPNI_CFG_LINK_FIFOS_FIXED_LATENCY_SETTINGr:
   5514             case ECI_CM_PLL_CONFIGr:
   5515             case ECI_UC_PLL_CONFIGr:
   5516             case ECI_NIF_PMH_PLL_CONFIGr:
   5517             case ECI_NIF_PML_0_PLL_CONFIGr:
   5518             case ECI_NIF_PML_1_PLL_CONFIGr:
   5519             case FSRD_SBUS_LAST_IN_CHAINr:
   5520             case ECI_ECIC_BLOCKS_RESETr:
   5521             case ECI_FAB_1_PLL_CONFIGr:
   5522             case MESH_TOPOLOGY_GLOBAL_MEM_OPTIONSr:
   5523             case MESH_TOPOLOGY_RESERVED_MTCPr:
   5524             case ECI_FAB_0_PLL_CONFIGr:
   5525 		    case MRPS_SBUS_BROADCAST_IDr:
   5526 			case MRPS_SBUS_LAST_IN_CHAINr:
   5527 			case MTRPS_EM_SBUS_BROADCAST_IDr:
   5528 			case MTRPS_EM_SBUS_LAST_IN_CHAINr:
   5529 			case SCH_SBUS_BROADCAST_IDr:
   5530 			case SCH_SBUS_LAST_IN_CHAINr:
   5531 			case CFC_GTIMER_CONFIGURATIONr:
   5532 			case CFC_INDIRECT_COMMANDr:
   5533 			case OAMP_GTIMER_CONFIGURATIONr:
   5534 			case OAMP_INDIRECT_COMMANDr:
   5535 			case CGM_SBUS_LAST_IN_CHAINr:
   5536 			case DRCA_GTIMER_CONFIGURATIONr:
   5537 			case DRCB_GTIMER_CONFIGURATIONr:
   5538 			case DRCC_GTIMER_CONFIGURATIONr:
   5539 			case DRCD_GTIMER_CONFIGURATIONr:
   5540 			case DRCE_GTIMER_CONFIGURATIONr:
   5541 			case DRCF_GTIMER_CONFIGURATIONr:
   5542 			case DRCG_GTIMER_CONFIGURATIONr:
   5543 			case DRCH_GTIMER_CONFIGURATIONr:
   5544 			case DRCH_REG_0087r:
   5545 			case ECI_SBUS_LAST_IN_CHAINr:
   5546 			case EGQ_SBUS_LAST_IN_CHAINr:
   5547 			case EPNI_SBUS_LAST_IN_CHAINr:
   5548 			case FMAC_SBUS_BROADCAST_IDr:
   5549 			case FMAC_SBUS_LAST_IN_CHAINr:
   5550 			case FSRD_SBUS_BROADCAST_IDr:
   5551 			case IHB_SBUS_LAST_IN_CHAINr:
   5552 			case IHP_PROTOCOL_TRAPS_PROGRAM_SELECTr:
   5553 			case IHP_SBUS_LAST_IN_CHAINr:
   5554 			case IPS_SBUS_LAST_IN_CHAINr:
   5555 			case IQM_SBUS_LAST_IN_CHAINr:
   5556 			case MESH_TOPOLOGY_GLOBAL_GENERAL_CFG_1r:
   5557 
   5558 #if defined(PLISIM)
   5559                 /* list that we dont get the reset values back from the registers on jer pcid*/
   5560 
   5561             case ILKN_SLE_RX_AFIFO_WMr:
   5562             case ILKN_SLE_RX_BURSTr:
   5563             case ILKN_SLE_RX_CAL_INBANDr:
   5564             case ILKN_SLE_RX_CAL_INBAND_DYNr:
   5565             case ILKN_SLE_RX_CAL_OUTBANDr:
   5566             case ILKN_SLE_RX_CAL_OUTBAND_DYNr:
   5567             case ILKN_SLE_RX_DEBUG_HOLD_0r:
   5568             case ILKN_SLE_RX_DEBUG_HOLD_1r:
   5569             case ILKN_SLE_RX_DEBUG_HOLD_2r:
   5570             case ILKN_SLE_RX_DEBUG_HOLD_3r:
   5571             case ILKN_SLE_RX_EXT_INT_2_ND_MASKr:
   5572             case ILKN_SLE_RX_EXT_INT_FORCEr:
   5573             case ILKN_SLE_RX_EXT_INT_MASKr:
   5574             case ILKN_SLE_RX_INT_2_ND_MASKr:
   5575             case ILKN_SLE_RX_INT_FORCEr:
   5576             case ILKN_SLE_RX_INT_MASKr:
   5577             case ILKN_SLE_RX_LANE_2r:
   5578             case ILKN_SLE_RX_METAFRAMEr:
   5579             case ILKN_SLE_RX_REMAP_LANE_14_10r:
   5580             case ILKN_SLE_RX_REMAP_LANE_19_15r:
   5581             case ILKN_SLE_RX_REMAP_LANE_24_20r:
   5582             case ILKN_SLE_RX_REMAP_LANE_29_25r:
   5583             case ILKN_SLE_RX_REMAP_LANE_34_30r:
   5584             case ILKN_SLE_RX_REMAP_LANE_39_35r:
   5585             case ILKN_SLE_RX_REMAP_LANE_44_40r:
   5586             case ILKN_SLE_RX_REMAP_LANE_47_45r:
   5587             case ILKN_SLE_RX_REMAP_LANE_4_0r:
   5588             case ILKN_SLE_RX_REMAP_LANE_9_5r:
   5589             case ILKN_SLE_RX_RETRANSMIT_CONFIGr:
   5590             case ILKN_SLE_RX_RETRANSMIT_TIME_CONFIGr:
   5591             case ILKN_SLE_RX_RETRANSMIT_TIME_CONFIG_2r:
   5592             case ILKN_SLE_RX_SERDES_TEST_CNTLr:
   5593             case ILKN_SLE_RX_SERDES_TEST_PATTERNAr:
   5594             case ILKN_SLE_RX_SERDES_TEST_PATTERNBr:
   5595             case ILKN_SLE_RX_SERDES_TEST_PATTERNCr:
   5596             case ILKN_SLE_TX_AFIFO_WMr:
   5597             case ILKN_SLE_TX_BURSTr:
   5598             case ILKN_SLE_TX_CAL_INBANDr:
   5599             case ILKN_SLE_TX_CAL_INBAND_DYNr:
   5600             case ILKN_SLE_TX_CAL_OUTBANDr:
   5601             case ILKN_SLE_TX_CAL_OUTBAND_DYNr:
   5602             case ILKN_SLE_TX_DEBUG_HOLD_0r:
   5603             case ILKN_SLE_TX_DEBUG_HOLD_1r:
   5604             case ILKN_SLE_TX_DEBUG_HOLD_2r:
   5605             case ILKN_SLE_TX_DEBUG_HOLD_3r:
   5606             case ILKN_SLE_TX_FIFO_CFGr:
   5607             case ILKN_SLE_TX_INT_2_ND_MASKr:
   5608             case ILKN_SLE_TX_INT_FORCEr:
   5609             case ILKN_SLE_TX_INT_MASKr:
   5610             case ILKN_SLE_TX_LANE_2r:
   5611             case ILKN_SLE_TX_METAFRAMEr:
   5612             case ILKN_SLE_TX_REMAP_LANE_14_10r:
   5613             case ILKN_SLE_TX_REMAP_LANE_19_15r:
   5614             case ILKN_SLE_TX_REMAP_LANE_24_20r:
   5615             case ILKN_SLE_TX_REMAP_LANE_29_25r:
   5616             case ILKN_SLE_TX_REMAP_LANE_34_30r:
   5617             case ILKN_SLE_TX_REMAP_LANE_39_35r:
   5618             case ILKN_SLE_TX_REMAP_LANE_44_40r:
   5619             case ILKN_SLE_TX_REMAP_LANE_47_45r:
   5620             case ILKN_SLE_TX_REMAP_LANE_4_0r:
   5621             case ILKN_SLE_TX_REMAP_LANE_9_5r:
   5622             case ILKN_SLE_TX_RETRANSMIT_CONFIGr:
   5623             case ILKN_SLE_TX_SERDES_TEST_CNTLr:
   5624             case ILKN_SLE_TX_SERDES_TEST_PATTERNAr:
   5625             case ILKN_SLE_TX_SERDES_TEST_PATTERNBr:
   5626             case ILKN_SLE_TX_SERDES_TEST_PATTERNCr:
   5627 #endif   /*(PLISIM) */
   5628 
   5629                 return 1; /* Skip these registers */
   5630             default:
   5631                 break;
   5632         }
   5633         if (SOC_IS_QUX(unit)) {
   5634             /* XLMAC registers cannot access when reset, need confirm(Nir) */
   5635             if ((ainfo->addr & 0xffff0000) == 0x60000) {
   5636                 /* chip reset cannot reset it */
   5637                return 1;
   5638             }
   5639             switch (ainfo->reg) {
   5640                 /* reset chip cannot reach */
   5641                 case CGM_REG_0501r:
   5642                 case EDB_SBUS_LAST_IN_CHAINr:
   5643                 case EPNI_CHICKEN_BIT_VECTORr:
   5644 				    return 1;
   5645                 default:
   5646                     break;
   5647             }
   5648         }
   5649         if(SOC_IS_QAX(unit)) {
   5650 
   5651             if (sal_strstr(SOC_REG_NAME(unit, ainfo->reg), "BROADCAST") != NULL) {
   5652                 return 1; /* Skip broadcast registers (sw only registers)*/
   5653             }
   5654             switch (ainfo->reg) {
   5655              /**
   5656               * DQM - need to review further 
   5657               * regarding other registers 
   5658               * pem,mmu,ipsec_wrapper_b,eci is indeed last in his sbus 
   5659               * chainYaar/Nir - can you comment if that's ok ? 
   5660               * (Tomer) 
   5661               */
   5662                 case  IPSEC_SPU_WRAPPER_TOP_SBUS_LAST_IN_CHAINr:
   5663                 case  MMU_SBUS_LAST_IN_CHAINr:
   5664                 case  PEM_SBUS_LAST_IN_CHAINr:
   5665                 case  ECI_SBUS_LAST_IN_CHAINr:
   5666                 case  DQM_SBUS_LAST_IN_CHAINr:
   5667 
   5668               /**
   5669                * default of this registers is reset(0) but when reset chip 
   5670                * cant be access 
   5671                */
   5672                 case  ECI_BLOCKS_SBUS_RESETr:
   5673                 case  ECI_BLOCKS_SOFT_RESETr:
   5674 
   5675              /**
   5676               * the reset of this values does not apear at excel 
   5677               * and its not 0's 
   5678               */
   5679                 case  ECI_OGER_1027r:
   5680                 case  ECI_OGER_1028r:
   5681                 /* need confirm (Yael) */
   5682                 case ILB_LBRG_CONFIGURATIONr:
   5683                 /**
   5684                  * following registers are not set to default values after init 
   5685                  * (mirror registers) tomer & ariel
   5686                  * CGM_RRP_MIRROR,DQM_DEQ_DRX_DCC_MIRROR,SQM_DEQ_DRX_DCC_MIRROR 
   5687                  */
   5688                 case  CGM_REG_0504r:
   5689                 case  DQM_REG_0119r:
   5690                 case  SQM_REG_0122r:
   5691 
   5692 
   5693                 /**
   5694                  * The PRGE_DEBUG_DATA can be updated by the block - the 
   5695                  * differentce here is OK. (Ofer landau)
   5696                  */
   5697                 case  IPSEC_REG_014Ar:
   5698 
   5699                     return 1; /* Skip these registers */
   5700                 default:
   5701                     break;
   5702             }
   5703         }
   5704     }
   5705 #endif    
   5706 #ifdef BCM_APACHE_SUPPORT
   5707     if (SOC_IS_APACHE(unit)) {
   5708         switch (ainfo->reg) {
   5709             case TOP_TSC_AFE_PLL_STATUSr: 
   5710             case TOP_MISC_CONTROLr:
   5711             case TOP_MISC_CONTROL_2r:
   5712                 /* registers have different values then their reset values */
   5713                 return 1;
   5714             case TOP_TSC_ENABLEr:
   5715             case TOP_CORE_CLK_FREQ_SELr: 
   5716                 /* Overwritten by init soc */
   5717             case XLPORT_TSC_PLL_LOCK_STATUSr:
   5718             case CLPORT_TSC_PLL_LOCK_STATUSr:
   5719             case XLPORT_LED_CHAIN_CONFIGr:
   5720             case CLPORT_LED_CHAIN_CONFIGr:
   5721             case CXXPORT_LED_CHAIN_CONFIGr:
   5722                 /* Changes depending on chip top level integration. */
   5723                 return 1;
   5724             case CFAPCONFIGr:
   5725             case CFAPFULLSETPOINTr:
   5726             case CFAPFULLRESETPOINTr:
   5727                 /* registers have different values then their reset values */
   5728                 return 1;
   5729             case AVS_REG_PMB_SLAVE_AVS_PWD_ACC_CONTROLr:
   5730             case AVS_REG_PMB_SLAVE_AVS_PWD_CONTROLr:
   5731             case AVS_REG_PMB_SLAVE_AVS_ROSC_CONTROLr:
   5732             case AVS_REG_PMB_SLAVE_AVS_ROSC_H_THRESHOLDr:
   5733             case AVS_REG_PMB_SLAVE_AVS_ROSC_S_THRESHOLDr:
   5734             case AVS_REG_PMB_SLAVE_BPCM_CONTROLr:
   5735                 /* ARS wrappers stubbed out in QT. Register access will fail */
   5736                 if (SAL_BOOT_QUICKTURN) {
   5737                     return 1;
   5738                 } else {
   5739                     break;
   5740                 }
   5741             case L2_ISS_BANK_CONFIGr:
   5742             case L3_ISS_BANK_CONFIGr:
   5743             case L2_ISS_LOG_TO_PHY_BANK_MAPr:
   5744             case L3_ISS_LOG_TO_PHY_BANK_MAPr:
   5745                 /* Changes dependent on config properties set during initialization */
   5746                 return 1;
   5747             case TOP_HW_TAP_MEM_IF_ECC_CTRLr:
   5748             case TOP_HW_TAP_MEM_OTP_ECC_CTRLr:
   5749             case TOP_TAP_CONTROLr:
   5750                 /*Following registers are capturing the ECC for chip level memories,
   5751                 so reset value of 0x0 will not match*/
   5752                 return 1;
   5753             case TOP_UC_TAP_CONTROLr:
   5754             case TOP_UC_TAP_WRITE_DATAr:
   5755                 /* OVSTB toggle sequence run during soc init  */
   5756                 return (soc_feature(unit, soc_feature_apache_ovst_toggle));
   5757 
   5758             case TOP_PVTMON_0_INTR_THRESHOLDr:
   5759             case TOP_PVTMON_1_INTR_THRESHOLDr:
   5760             case TOP_PVTMON_2_INTR_THRESHOLDr:
   5761             case TOP_PVTMON_3_INTR_THRESHOLDr:
   5762             case TOP_PVTMON_4_INTR_THRESHOLDr:
   5763             case TOP_PVTMON_5_INTR_THRESHOLDr:
   5764             case TOP_PVTMON_6_INTR_THRESHOLDr:
   5765             case TOP_PVTMON_7_INTR_THRESHOLDr:
   5766             case TOP_PVTMON_MASKr:
   5767                 /*  Registers programmed to non-default value during SOC init */
   5768                 return 1;
   5769             default:
   5770                 break;
   5771         }
   5772     }
   5773 #endif /* BCM_APACHE_SUPPORT */
   5774 
   5775 #ifdef BCM_MONTEREY_SUPPORT
   5776     if (SOC_IS_MONTEREY(unit)) {
   5777         switch (ainfo->reg) {
   5778             case XLPORT_PMD_PLL_CTRL_CONFIGr:
   5779                 /*  Registers programmed to non-default value during SOC init */
   5780                 return 1;
   5781             default:
   5782                 break;
   5783         }
   5784     }
   5785 #endif /* BCM_MONTEREY_SUPPORT */
   5786 #ifdef BCM_TRIDENT2_SUPPORT
   5787     if (SOC_IS_TRIDENT2(unit)) {
   5788         uint16 dev_id;
   5789         uint8  rev_id;
   5790         int    skew_id;
   5791         uint32 rval;
   5792 
   5793         READ_TOP_DEV_REV_IDr(unit, &rval);
   5794         skew_id = soc_reg_field_get(unit, TOP_DEV_REV_IDr, rval, DEVICE_SKEWf);
   5795         soc_cm_get_id(unit, &dev_id, &rev_id);
   5796         switch (ainfo->reg) {
   5797             case TOP_CORE_CLK_FREQ_SELr: 
   5798                 if (rev_id == BCM56850_A0_REV_ID || 
   5799                     (BCM56851_DEVICE_ID == dev_id && skew_id == 2)) { /*56851P*/
   5800                     return 1;
   5801                 }
   5802                 break;
   5803             default:
   5804                 break;
   5805         }
   5806     }
   5807 #endif
   5808 #ifdef BCM_TRIDENT2PLUS_SUPPORT
   5809     if (SOC_IS_TD2P_TT2P(unit)) {
   5810         uint16 dev_id;
   5811         uint8  rev_id;
   5812 
   5813         soc_cm_get_id(unit, &dev_id, &rev_id);
   5814 
   5815         switch (ainfo->reg) {
   5816             case TOP_CORE_CLK_FREQ_SELr:
   5817                 if (BCM56833_DEVICE_ID == dev_id 
   5818                         || BCM56861_DEVICE_ID == dev_id
   5819                         || BCM56864_DEVICE_ID == dev_id
   5820                         || BCM56832_DEVICE_ID == dev_id) {
   5821                     /*
   5822                      * Register has different value than it's reset default
   5823                      * value.
   5824                      */
   5825                     return 1;
   5826                 }
   5827                 break;
   5828             case TOP_MISC_CONTROLr: 
   5829             case TOP_TSC_DISABLEr: 
   5830                 /* registers have different values than their reset values */
   5831                 return 1;
   5832             default:
   5833                 break;
   5834         }
   5835     }
   5836 #endif /* !BCM_TRIDENT2PLUS_SUPPORT */
   5837 #ifdef BCM_TOMAHAWKPLUS_SUPPORT
   5838     if (SOC_IS_TOMAHAWKPLUS(unit)) {
   5839         switch (ainfo->reg) {
   5840             /* registers have different read-only values then their default values */
   5841             case TOP_HW_TAP_MEM_ECC_CTRL_0r:
   5842             case TOP_HW_TAP_MEM_ECC_CTRL_1r:
   5843             case TOP_TAP_CONTROLr:
   5844                 return 1;
   5845             default:
   5846                 break;
   5847         }
   5848     }
   5849 #endif /* !BCM_TOMAHAWKPLUS_SUPPORT */
   5850 
   5851 #ifdef BCM_TOMAHAWK2_SUPPORT
   5852     if (SOC_IS_TOMAHAWK2(unit)) {
   5853         switch (ainfo->reg) {
   5854             case IS_OPP_SCHED_CFGr:
   5855             case IS_OPP_SCHED_CFG_PIPE0r:
   5856             case IS_OPP_SCHED_CFG_PIPE1r:
   5857             case IS_OPP_SCHED_CFG_PIPE2r:
   5858             case IS_OPP_SCHED_CFG_PIPE3r:
   5859             case IS_TDM_CONFIGr:
   5860             case IS_TDM_CONFIG_PIPE0r:
   5861             case IS_TDM_CONFIG_PIPE1r:
   5862             case IS_TDM_CONFIG_PIPE2r:
   5863             case IS_TDM_CONFIG_PIPE3r:
   5864             case TOP_XG_PLL0_CTRL_5r:
   5865             /* registers have different read-only values then their default values */
   5866             case TOP_HW_TAP_MEM_ECC_CTRL_0r:
   5867             case TOP_HW_TAP_MEM_ECC_CTRL_1r:
   5868             case TOP_TAP_CONTROLr:
   5869             /* This register would be modified during init soc */
   5870             case IDB_SER_CONTROLr:
   5871                 /* Skip these registers */
   5872                 return 1;
   5873             default:
   5874                 break;
   5875         }
   5876     }
   5877 #endif
   5878 
   5879 #ifdef BCM_TOMAHAWK3_SUPPORT
   5880     if (SOC_IS_TOMAHAWK3(unit)) {
   5881         switch (ainfo->reg) {
   5882             /* this reg has read-only fields */
   5883             case CDMAC_FIFO_STATUSr:
   5884             case CDMAC_RX_LSS_STATUSr:
   5885             /* This reg has different value for diff dpr clock freq */
   5886             case EPOST_SLOT_PIPELINE_CONFIGr:
   5887             case SLOT_PIPELINE_CONFIGr:
   5888             /* This reg changes its state after deassertion of reset
   5889                so skipping the register */
   5890             case MMU_RQE_INFOTBL_FP_INITr:
   5891                 return 1;
   5892             default:
   5893                 break;
   5894         }
   5895     }
   5896 #endif
   5897 
   5898 #ifdef BCM_TRIDENT3_SUPPORT
   5899             if (SOC_IS_TRIDENT3X(unit)) {
   5900                 switch (ainfo->reg) {
   5901                     /* Ingress Scheduler registers need to be programmed during init to get access to IP/EP block
   5902                      * skip following IS_* registers from TR1 test
   5903                      */
   5904                     case IS_OPP_SCHED_CFGr:
   5905                     case IS_OPP_SCHED_CFG_PIPE0r:
   5906                     case IS_OPP_SCHED_CFG_PIPE1r:
   5907                     case IS_TDM_CONFIGr:
   5908                     case IS_TDM_CONFIG_PIPE0r:
   5909                     case IS_TDM_CONFIG_PIPE1r:
   5910                     case TOP_XG_PLL0_CTRL_5r:
   5911                     /* registers have different read-only values then their default values */
   5912                     case TOP_HW_TAP_MEM_ECC_CTRL_0r:
   5913                     case TOP_HW_TAP_MEM_ECC_CTRL_1r:
   5914                     case TOP_TAP_CONTROLr:
   5915                     /* RH_DLB_SELECTION field in ENHANCED_HASHING_CONTROL needs to be set to 1
   5916                      *  in oder to use RH. This can't be set by default to 1 in init time.
   5917                      *  Hence skip RH related following registers during test.
   5918                      */
   5919                     case RH_ECMP1_DROPSr:
   5920                     case RH_ECMP1_DROPS_PIPE0r:
   5921                     case RH_ECMP1_DROPS_PIPE1r:
   5922                     case RH_ECMP2_DROPSr:
   5923                     case RH_ECMP2_DROPS_PIPE0r:
   5924                     case RH_ECMP2_DROPS_PIPE1r:
   5925                     /* This register would be modified during init soc */
   5926                     case IDB_SER_CONTROLr:
   5927                     case IDB_SER_CONTROL_64r:
   5928                     case TOP_MISC_GENERIC_CONTROLr:
   5929                     case CHIP_CONFIGr:
   5930                         /* Skip these registers */
   5931                         return 1;
   5932                     default:
   5933                         if (SOC_REG_BLOCK_IS(unit, ainfo->reg, SOC_BLK_AVS)) {
   5934                             /* Skip AVS block registers */
   5935                             return 1;
   5936                         }
   5937                         break;
   5938                 }
   5939             }
   5940 #endif
   5941 
   5942     if (SOC_REG_INFO(unit, ainfo->reg).flags &
   5943         (SOC_REG_FLAG_IGNORE_DEFAULT | SOC_REG_FLAG_RO | SOC_REG_FLAG_WO | SOC_REG_FLAG_INTERRUPT | SOC_REG_FLAG_GENERAL_COUNTER | SOC_REG_FLAG_SIGNAL)) {
   5944         return 1;   /* no testable bits */
   5945     }
   5946 
   5947     return 0;
   5948 }
   5949