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

feature.c (214132B)


      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  * Functions returning TRUE/FALSE providing chip/feature matrix.
      8  * TRUE means chip supports feature.
      9  *
     10  * File:        feature.c
     11  * Purpose:     Define features by chip, functionally.
     12  */
     13 
     14 #include <shared/bsl.h>
     15 #include <sal/types.h>
     16 #include <soc/drv.h>
     17 #include <soc/cm.h>
     18 #include <soc/debug.h>
     19 #ifdef BCM_GREYHOUND_SUPPORT
     20 #include <soc/greyhound.h>
     21 #endif
     22 #ifdef BCM_HURRICANE3_SUPPORT
     23 #include <soc/hurricane3.h>
     24 #include <soc/wolfhound2.h>
     25 #endif
     26 #ifdef BCM_GREYHOUND2_SUPPORT
     27 #include <soc/greyhound2.h>
     28 #endif
     29 
     30 #if defined(BCM_TOMAHAWK_SUPPORT)
     31 #include <soc/tomahawk.h>
     32 #endif
     33 #if defined(BCM_TOMAHAWK2_SUPPORT)
     34 #include <soc/tomahawk2.h>
     35 #endif
     36 #include <bcm/types.h>
     37 
     38 #if defined(SOC_FEATURE_DEBUG)
     39 #define BSL_LAYER_SOURCE (BSL_L_SOC | BSL_S_COMMON)
     40 #define SOC_FEATURE_DEBUG_PRINT(_x) LOG_VERBOSE(_x)
     41 #else
     42 #define SOC_FEATURE_DEBUG_PRINT(_x)
     43 #endif
     44 
     45 char    *soc_feature_name[] = SOC_FEATURE_NAME_INITIALIZER;
     46 
     47 #ifdef  BCM_88732
     48 /*
     49  * BCM88732 A0
     50  */
     51 int
     52 soc_features_bcm88732_a0(int unit, soc_feature_t feature)
     53 {
     54     uint16      dev_id;
     55     uint8       rev_id;
     56 
     57     SOC_FEATURE_DEBUG_PRINT((" 88732_a0"));
     58     soc_cm_get_id(unit, &dev_id, &rev_id);
     59     switch (feature) {
     60     case soc_feature_no_bridging:
     61     case soc_feature_no_higig:
     62     case soc_feature_no_mirror:
     63     case soc_feature_no_learning:
     64     case soc_feature_xmac:
     65     case soc_feature_dcb_type22:
     66     case soc_feature_counter_parity:
     67     case soc_feature_eee:
     68     case soc_feature_priority_flow_control:
     69     case soc_feature_storm_control:
     70     case soc_feature_flex_port:
     71     case soc_feature_xy_tcam:
     72     case soc_feature_dscp_map_per_port:
     73         return TRUE;
     74     case soc_feature_dcb_type16:
     75     case soc_feature_arl_hashed:
     76     case soc_feature_class_based_learning:
     77     case soc_feature_lpm_prefix_length_max_128:
     78     case soc_feature_tunnel_gre:
     79     case soc_feature_tunnel_any_in_6:
     80     case soc_feature_fifo_dma:
     81     case soc_feature_subport:
     82     case soc_feature_lpm_tcam:
     83     case soc_feature_ip_mcast:
     84     case soc_feature_ip_mcast_repl:
     85     case soc_feature_l3:
     86     case soc_feature_l3_ip6:
     87     case soc_feature_l3_lookup_cmd:
     88     case soc_feature_l3_sgv:
     89     case soc_feature_higig2:
     90     case soc_feature_bigmac_rxcnt_bug:
     91     case soc_feature_vlan_action:
     92     case soc_feature_mac_based_vlan:
     93     case soc_feature_ip_subnet_based_vlan:
     94     case soc_feature_vlan_translation:
     95     case soc_feature_vlan_ctrl:
     96     case soc_feature_color_prio_map:
     97     case soc_feature_virtual_switching:
     98     case soc_feature_gport_service_counters:
     99     case soc_feature_l2_multiple:
    100     case soc_feature_l2_hashed:
    101     case soc_feature_l2_lookup_cmd:
    102     case soc_feature_l2_lookup_retry:
    103     case soc_feature_l2_user_table:
    104     case soc_feature_filter:
    105     case soc_feature_field:
    106     case soc_feature_port_lag_failover:
    107     case soc_feature_e2ecc:
    108     case soc_feature_mem_cache:
    109     case soc_feature_ser_parity:
    110     case soc_feature_l3_ecmp_2k_groups:
    111         return FALSE;
    112     default:
    113         return soc_features_bcm56820_a0(unit, feature);
    114     }
    115 }
    116 #endif
    117 
    118 #ifdef  BCM_5675
    119 /*
    120  * BCM5675 A0
    121  */
    122 int
    123 soc_features_bcm5675_a0(int unit, soc_feature_t feature)
    124 {
    125     uint16      dev_id;
    126     uint8       rev_id;
    127 
    128     SOC_FEATURE_DEBUG_PRINT((" 5675_a0"));
    129     soc_cm_get_id(unit, &dev_id, &rev_id);
    130 
    131     switch (feature) {
    132     case soc_feature_stat_dma:
    133     case soc_feature_dcb_type4:
    134     case soc_feature_led_proc:
    135     case soc_feature_xgxs_v2:
    136     case soc_feature_bigmac_fault_stat:
    137     case soc_feature_fabric_debug:
    138     case soc_feature_srcmod_filter:
    139     case soc_feature_modmap:
    140     case soc_feature_ip_mcast:
    141     case soc_feature_tx_fast_path:
    142     case soc_feature_policer_mode_flow_rate_committed:
    143         return TRUE;
    144     default:
    145         return FALSE;
    146     }
    147 }
    148 #endif  /* BCM_5675 */
    149 
    150 #if defined(BCM_56504) || defined(BCM_56102) || defined(BCM_56304) || \
    151     defined(BCM_56514) || defined(BCM_56112) || defined(BCM_56314)
    152 /*
    153  * BCM56504 A0
    154  */
    155 int
    156 soc_features_bcm56504_a0(int unit, soc_feature_t feature)
    157 {
    158     uint16      dev_id;
    159     uint8       rev_id;
    160     int         l3disable;
    161     int         a0;
    162     int         helix;
    163 
    164     SOC_FEATURE_DEBUG_PRINT((" 56504_a0"));
    165     soc_cm_get_id(unit, &dev_id, &rev_id);
    166 
    167     a0    = (rev_id == BCM56504_A0_REV_ID);
    168     helix = (dev_id == BCM56404_DEVICE_ID);
    169 
    170     l3disable = (dev_id == BCM56305_DEVICE_ID ||
    171                  dev_id == BCM56306_DEVICE_ID ||
    172                  dev_id == BCM56307_DEVICE_ID ||
    173                  dev_id == BCM56308_DEVICE_ID ||
    174                  dev_id == BCM56309_DEVICE_ID ||
    175                  dev_id == BCM56315_DEVICE_ID ||
    176                  dev_id == BCM56316_DEVICE_ID ||
    177                  dev_id == BCM56317_DEVICE_ID ||
    178                  dev_id == BCM56318_DEVICE_ID ||
    179                  dev_id == BCM56319_DEVICE_ID ||
    180                  dev_id == BCM56516_DEVICE_ID ||
    181                  dev_id == BCM56517_DEVICE_ID ||
    182                  dev_id == BCM56518_DEVICE_ID ||
    183                  dev_id == BCM56519_DEVICE_ID ||
    184                  dev_id == BCM56700_DEVICE_ID ||
    185                  dev_id == BCM56701_DEVICE_ID);
    186 
    187     l3disable = (l3disable ||
    188                  dev_id == BCM53301_DEVICE_ID ||
    189                  dev_id == BCM56218_DEVICE_ID);
    190 
    191     l3disable = (l3disable ||
    192                  (SOC_SWITCH_BYPASS_MODE(unit) != SOC_SWITCH_BYPASS_MODE_NONE));
    193 
    194     switch (feature) {
    195         case soc_feature_table_dma:
    196         case soc_feature_tslam_dma:
    197         case soc_feature_dcb_type9:
    198         case soc_feature_schmsg_alias:
    199         case soc_feature_l2_lookup_cmd:
    200         case soc_feature_l2_user_table:
    201         case soc_feature_aging_extended:
    202         case soc_feature_arl_hashed:
    203         case soc_feature_l2_modfifo:
    204         case soc_feature_phy_cl45:
    205         case soc_feature_mdio_enhanced:
    206         case soc_feature_schan_hw_timeout:
    207         case soc_feature_stat_dma:
    208         case soc_feature_cpuport_stat_dma:
    209         case soc_feature_cpuport_switched:
    210         case soc_feature_cpuport_mirror:
    211         case soc_feature_fe_gig_macs:
    212         case soc_feature_trimac:
    213         case soc_feature_cos_rx_dma:
    214         case soc_feature_xgxs_lcpll:
    215         case soc_feature_dodeca_serdes:
    216         case soc_feature_xgxs_v5:
    217         case soc_feature_txdma_purge:
    218         case soc_feature_rxdma_cleanup:
    219         case soc_feature_fe_maxframe:   /* fe_maxfr = MAXFR + 1 */
    220         case soc_feature_vlan_mc_flood_ctrl: /* Per VLAN PFM support */
    221 
    222         case soc_feature_l2_hashed:
    223         case soc_feature_l2_lookup_retry:
    224         case soc_feature_arl_insert_ovr:
    225         case soc_feature_cfap_pool:
    226         case soc_feature_stg_xgs:
    227         case soc_feature_stg:
    228         case soc_feature_stack_my_modid:
    229         case soc_feature_remap_ut_prio:
    230         case soc_feature_led_proc:
    231         case soc_feature_field:
    232         case soc_feature_bigmac_fault_stat:
    233         case soc_feature_ingress_metering:
    234         case soc_feature_egress_metering:
    235         case soc_feature_stat_jumbo_adj:
    236         case soc_feature_stat_xgs3:
    237         case soc_feature_trunk_egress:
    238         case soc_feature_color:
    239         case soc_feature_dscp:
    240         case soc_feature_dscp_map_mode_all:
    241             /* Only 2 mapping modes. All or None */
    242         case soc_feature_egr_vlan_check:
    243         case soc_feature_xgs1_mirror:
    244         case soc_feature_vlan_translation:
    245         case soc_feature_trunk_extended:
    246         case soc_feature_bucket_support:
    247         case soc_feature_hg_trunk_override:
    248         case soc_feature_hg_trunking:
    249         case soc_feature_field_mirror_pkts_ctl:
    250         case soc_feature_unknown_ipmc_tocpu:
    251         case soc_feature_basic_dos_ctrl:
    252         case soc_feature_proto_pkt_ctrl:
    253         case soc_feature_stat_dma_error_ack:
    254         case soc_feature_asf:
    255         case soc_feature_xport_convertible:
    256         case soc_feature_sgmii_autoneg:
    257         case soc_feature_sample_offset8:
    258         case soc_feature_extended_pci_error:
    259         case soc_feature_l3_defip_ecmp_count:
    260         case soc_feature_field_action_l2_change:
    261         case soc_feature_special_egr_ip_tunnel_ser:
    262         case soc_feature_ser_parity:
    263         case soc_feature_field_tcam_hitless_update_on_modify:
    264             return TRUE;
    265         case soc_feature_l3_defip_map:  /* Map out unused L3_DEFIP blocks */
    266             return a0;
    267         case soc_feature_status_link_fail:
    268         case soc_feature_egr_vlan_pfm:  /* MH PFM control per VLAN FB A0 */
    269         case soc_feature_asf_no_10_100:
    270             return (rev_id < BCM56504_B0_REV_ID);
    271         case soc_feature_ipmc_repl_freeze:
    272             return (rev_id < BCM56504_B2_REV_ID);
    273         case soc_feature_policer_mode_flow_rate_committed:
    274             return (dev_id == BCM56504_DEVICE_ID); /* Only for Firebolt proper */
    275         case soc_feature_lpm_tcam:
    276         case soc_feature_ip_mcast:
    277         case soc_feature_ip_mcast_repl:
    278         case soc_feature_l3:
    279         case soc_feature_l3_ip6:
    280         case soc_feature_l3_lookup_cmd:
    281         case soc_feature_l3_sgv:
    282             return !l3disable;
    283         case soc_feature_field_slices8:
    284             return helix;
    285         case soc_feature_field_slices4:
    286         case soc_feature_fp_based_routing:
    287         case soc_feature_fp_routing_mirage:
    288             return (dev_id == BCM53300_DEVICE_ID);
    289         default:
    290             return FALSE;
    291     }
    292 }
    293 
    294 /*
    295  * BCM56504 B0
    296  */
    297 int
    298 soc_features_bcm56504_b0(int unit, soc_feature_t feature)
    299 {
    300     uint16      dev_id;
    301     uint8       rev_id;
    302 
    303     SOC_FEATURE_DEBUG_PRINT((" 56504_b0"));
    304     soc_cm_get_id(unit, &dev_id, &rev_id);
    305 
    306     switch (feature) {
    307     case soc_feature_l2x_parity:
    308     case soc_feature_l3defip_parity:
    309             if (SAL_BOOT_BCMSIM) {
    310                 return FALSE;
    311             }
    312             /* Fall through */
    313     case soc_feature_parity_err_tocpu:
    314     case soc_feature_nip_l3_err_tocpu:
    315     case soc_feature_l3mtu_fail_tocpu:
    316     case soc_feature_meter_adjust:      /* Adjust for IPG */
    317     case soc_feature_field_mirror_ovr:
    318     case soc_feature_field_udf_higig:
    319     case soc_feature_field_udf_ethertype:
    320     case soc_feature_field_comb_read:
    321     case soc_feature_field_wide:
    322     case soc_feature_field_slice_enable:
    323     case soc_feature_field_cos:
    324     case soc_feature_field_color_indep:
    325     case soc_feature_field_qual_drop:
    326     case soc_feature_field_qual_IpType:
    327     case soc_feature_field_qual_Ip6High:
    328     case soc_feature_src_modid_blk:
    329     case soc_feature_dbgc_higig_lkup:
    330     case soc_feature_port_trunk_index:
    331     case soc_feature_color_inner_cfi:
    332     case soc_feature_untagged_vt_miss:
    333     case soc_feature_module_loopback:
    334     case soc_feature_tunnel_dscp_trust:
    335     case soc_feature_higig_lookup:
    336     case soc_feature_egr_l3_mtu:
    337     case soc_feature_egr_mirror_path:
    338     case soc_feature_port_egr_block_ctl:
    339     case soc_feature_ipmc_group_mtu:
    340     case soc_feature_tunnel_6to4_secure:
    341     case soc_feature_stat_dma_error_ack:
    342     case soc_feature_big_icmpv6_ping_check:
    343     case soc_feature_src_modid_blk_ucast_override:
    344     case soc_feature_egress_blk_ucast_override:
    345     case soc_feature_static_pfm:
    346     case soc_feature_dcb_type13:
    347     case soc_feature_sample_thresh16:
    348         return TRUE;
    349     case soc_feature_src_mac_group:
    350     case soc_feature_remote_learn_trust:
    351         return (rev_id >= BCM56504_B2_REV_ID);
    352     case soc_feature_dcb_type9:
    353     case soc_feature_field_mirror_pkts_ctl:
    354     case soc_feature_l3x_parity:
    355     case soc_feature_sample_offset8:
    356         return FALSE;
    357     default:
    358         return soc_features_bcm56504_a0(unit, feature);
    359     }
    360 }
    361 #endif  /* BCM_565[01]4 BCM_561[01]2 BCM_563[01]4 */
    362 
    363 #ifdef  BCM_56102
    364 /*
    365  * BCM56102 A0
    366  */
    367 int
    368 soc_features_bcm56102_a0(int unit, soc_feature_t feature)
    369 {
    370     SOC_FEATURE_DEBUG_PRINT((" 56102_a0"));
    371     switch (feature) {
    372     case soc_feature_l2x_parity:
    373     case soc_feature_parity_err_tocpu:
    374     case soc_feature_meter_adjust:      /* Adjust for IPG */
    375     case soc_feature_field_slices8:
    376     case soc_feature_xgxs_power:
    377     case soc_feature_field_mirror_ovr:
    378     case soc_feature_src_modid_blk:
    379     case soc_feature_field_udf_higig:
    380     case soc_feature_field_comb_read:
    381     case soc_feature_egr_mirror_path:
    382     case soc_feature_egr_vlan_check:
    383     case soc_feature_vlan_translation:
    384     case soc_feature_ipmc_repl_freeze:
    385     case soc_feature_stat_dma_error_ack:
    386     case soc_feature_big_icmpv6_ping_check:
    387     case soc_feature_asf_no_10_100:
    388     case soc_feature_static_pfm:
    389     case soc_feature_reset_delay:
    390         return TRUE;
    391     case soc_feature_egr_vlan_pfm:  /* MH PFM control per VLAN FB A0 only */
    392     case soc_feature_status_link_fail:
    393     case soc_feature_field_mirror_pkts_ctl:
    394     case soc_feature_l3x_parity:
    395     case soc_feature_l3_defip_ecmp_count:
    396         return FALSE;
    397     default:
    398         return soc_features_bcm56504_a0(unit, feature);
    399     }
    400 }
    401 #endif  /* BCM_56102 */
    402 
    403 #ifdef  BCM_56112
    404 /*
    405  * BCM56112 A0
    406  */
    407 int
    408 soc_features_bcm56112_a0(int unit, soc_feature_t feature)
    409 {
    410     SOC_FEATURE_DEBUG_PRINT((" 56112_a0"));
    411     switch (feature) {
    412     case soc_feature_l2x_parity:
    413     case soc_feature_parity_err_tocpu:
    414     case soc_feature_nip_l3_err_tocpu:
    415     case soc_feature_meter_adjust:      /* Adjust for IPG */
    416     case soc_feature_field_slices8:
    417     case soc_feature_field_qual_Ip6High:
    418     case soc_feature_xgxs_power:
    419     case soc_feature_lmd:
    420     case soc_feature_field_mirror_ovr:
    421     case soc_feature_src_modid_blk:
    422     case soc_feature_field_udf_higig:
    423     case soc_feature_field_comb_read:
    424     case soc_feature_egr_mirror_path:
    425     case soc_feature_egr_vlan_check:
    426     case soc_feature_remote_learn_trust:
    427     case soc_feature_ipmc_group_mtu:
    428     case soc_feature_src_mac_group:
    429     case soc_feature_stat_dma_error_ack:
    430     case soc_feature_reset_delay:
    431         return TRUE;
    432     case soc_feature_ipmc_repl_freeze:
    433     case soc_feature_egr_vlan_pfm:  /* MH PFM control per VLAN FB A0 only */
    434     case soc_feature_status_link_fail:
    435     case soc_feature_asf_no_10_100:
    436     case soc_feature_l3x_parity:
    437     case soc_feature_l3_defip_ecmp_count:
    438         return FALSE;
    439     default:
    440         return soc_features_bcm56504_b0(unit, feature);
    441     }
    442 }
    443 #endif  /* BCM_56112 */
    444 
    445 #ifdef  BCM_56304
    446 /*
    447  * BCM56304 B0
    448  */
    449 int
    450 soc_features_bcm56304_b0(int unit, soc_feature_t feature)
    451 {
    452     uint16      dev_id;
    453     uint8       rev_id;
    454 
    455     SOC_FEATURE_DEBUG_PRINT((" 56304_b0"));
    456     soc_cm_get_id(unit, &dev_id, &rev_id);
    457 
    458     switch (feature) {
    459     case soc_feature_l2x_parity:
    460     case soc_feature_parity_err_tocpu:
    461     case soc_feature_meter_adjust:      /* Adjust for IPG */
    462     case soc_feature_field_slices8:
    463     case soc_feature_field_mirror_ovr:
    464     case soc_feature_src_modid_blk:
    465     case soc_feature_field_udf_higig:
    466     case soc_feature_field_comb_read:
    467     case soc_feature_egr_mirror_path:
    468     case soc_feature_egr_vlan_check:
    469     case soc_feature_xgxs_power:
    470     case soc_feature_vlan_translation:
    471     case soc_feature_ipmc_repl_freeze:
    472     case soc_feature_stat_dma_error_ack:
    473     case soc_feature_big_icmpv6_ping_check:
    474     case soc_feature_asf_no_10_100:
    475     case soc_feature_static_pfm:
    476     case soc_feature_reset_delay:
    477     case soc_feature_sample_thresh16:
    478         return TRUE;
    479     case soc_feature_egr_vlan_pfm:  /* MH PFM control per VLAN FB A0 only */
    480     case soc_feature_status_link_fail:
    481     case soc_feature_field_mirror_pkts_ctl:
    482     case soc_feature_l3x_parity:
    483     case soc_feature_sample_offset8:
    484     case soc_feature_l3_defip_ecmp_count:
    485         return FALSE;
    486     case soc_feature_fp_based_routing:
    487     case soc_feature_fp_routing_mirage:
    488         return (dev_id == BCM53300_DEVICE_ID);
    489     default:
    490         return soc_features_bcm56504_a0(unit, feature);
    491     }
    492 }
    493 #endif  /* BCM_56304 */
    494 
    495 #ifdef  BCM_56314
    496 /*
    497  * BCM56314 A0
    498  */
    499 int
    500 soc_features_bcm56314_a0(int unit, soc_feature_t feature)
    501 {
    502     uint16      dev_id;
    503     uint8       rev_id;
    504 
    505     SOC_FEATURE_DEBUG_PRINT((" 56314_a0"));
    506     soc_cm_get_id(unit, &dev_id, &rev_id);
    507 
    508     switch (feature) {
    509     case soc_feature_l2x_parity:
    510     case soc_feature_parity_err_tocpu:
    511     case soc_feature_nip_l3_err_tocpu:
    512     case soc_feature_meter_adjust:      /* Adjust for IPG */
    513     case soc_feature_field_slices8:
    514     case soc_feature_field_qual_Ip6High:
    515     case soc_feature_field_mirror_ovr:
    516     case soc_feature_src_modid_blk:
    517     case soc_feature_field_udf_higig:
    518     case soc_feature_field_comb_read:
    519     case soc_feature_egr_mirror_path:
    520     case soc_feature_egr_vlan_check:
    521     case soc_feature_xgxs_power:
    522     case soc_feature_lmd:
    523     case soc_feature_remote_learn_trust:
    524     case soc_feature_ipmc_group_mtu:
    525     case soc_feature_src_mac_group:
    526     case soc_feature_stat_dma_error_ack:
    527     case soc_feature_reset_delay:
    528         return TRUE;
    529     case soc_feature_ipmc_repl_freeze:
    530     case soc_feature_egr_vlan_pfm:  /* MH PFM control per VLAN FB A0 only */
    531     case soc_feature_status_link_fail:
    532     case soc_feature_asf_no_10_100:
    533     case soc_feature_l3x_parity:
    534     case soc_feature_l3_defip_ecmp_count:
    535         return FALSE;
    536     default:
    537         return soc_features_bcm56504_b0(unit, feature);
    538     }
    539 }
    540 #endif  /* BCM_56314 */
    541 
    542 #ifdef  BCM_56800
    543 /*
    544  * BCM56800 A0
    545  */
    546 int
    547 soc_features_bcm56800_a0(int unit, soc_feature_t feature)
    548 {
    549     uint16      dev_id;
    550     uint8       rev_id;
    551     int         fabric;
    552 
    553     SOC_FEATURE_DEBUG_PRINT((" 56800_a0"));
    554     soc_cm_get_id(unit, &dev_id, &rev_id);
    555 
    556     fabric = (dev_id == BCM56700_DEVICE_ID ||
    557               dev_id == BCM56701_DEVICE_ID ||
    558               dev_id == BCM56720_DEVICE_ID ||
    559               dev_id == BCM56721_DEVICE_ID ||
    560               dev_id == BCM56725_DEVICE_ID);
    561 
    562     switch (feature) {
    563     case soc_feature_dcb_type11:
    564     case soc_feature_higig2:
    565     case soc_feature_color:
    566     case soc_feature_color_inner_cfi:
    567     case soc_feature_untagged_vt_miss:
    568     case soc_feature_module_loopback:
    569     case soc_feature_xgxs_v6:
    570     case soc_feature_egr_l3_mtu:
    571     case soc_feature_egr_vlan_check:
    572     case soc_feature_hg_trunk_failover:
    573     case soc_feature_hg_trunking:
    574     case soc_feature_hg_trunk_override:
    575     case soc_feature_vlan_translation:
    576     case soc_feature_modmap:
    577     case soc_feature_two_ingress_pipes:
    578     case soc_feature_force_forward:
    579     case soc_feature_port_egr_block_ctl:
    580     case soc_feature_remote_learn_trust:
    581     case soc_feature_ipmc_group_mtu:
    582     case soc_feature_bigmac_rxcnt_bug:
    583     case soc_feature_cpu_proto_prio:
    584     case soc_feature_nip_l3_err_tocpu:
    585     case soc_feature_tunnel_6to4_secure:
    586     case soc_feature_field_wide:
    587     case soc_feature_field_qual_Ip6High:
    588     case soc_feature_field_mirror_ovr:
    589     case soc_feature_field_udf_ethertype:
    590     case soc_feature_field_comb_read:
    591     case soc_feature_field_slice_enable:
    592     case soc_feature_field_cos:
    593     case soc_feature_field_qual_drop:
    594     case soc_feature_field_qual_IpType:
    595     case soc_feature_field_udf_higig:
    596     case soc_feature_field_color_indep:
    597     case soc_feature_port_flow_hash:
    598     case soc_feature_trunk_group_size:
    599     case soc_feature_stat_dma_error_ack:
    600     case soc_feature_l3mtu_fail_tocpu:
    601     case soc_feature_src_modid_blk_opcode_override:
    602     case soc_feature_src_modid_blk_ucast_override:
    603     case soc_feature_egress_blk_ucast_override:
    604     case soc_feature_ipmc_repl_penultimate:
    605     case soc_feature_sgmii_autoneg:
    606     case soc_feature_l3x_parity:
    607     case soc_feature_tunnel_dscp_trust:
    608         return TRUE;
    609     case soc_feature_dcb_type9:
    610     case soc_feature_egr_vlan_pfm:  /* MH PFM control per VLAN FB A0 only */
    611     case soc_feature_txdma_purge:
    612     case soc_feature_xgxs_lcpll:
    613     case soc_feature_xgxs_v5:
    614     case soc_feature_asf_no_10_100:
    615     case soc_feature_ipmc_repl_freeze:
    616         return FALSE;
    617     case soc_feature_ctr_xaui_activity:
    618         return (rev_id == BCM56800_A0_REV_ID);
    619     case soc_feature_urpf:
    620         return !fabric;
    621     case soc_feature_arl_hashed:
    622     case soc_feature_l2_user_table:
    623     case soc_feature_trunk_egress:
    624     case soc_feature_proto_pkt_ctrl:
    625     case soc_feature_xport_convertible:
    626         if (fabric) {
    627             return FALSE;
    628         }
    629         /* Fall through */
    630     default:
    631         return soc_features_bcm56304_b0(unit, feature);
    632     }
    633 }
    634 #endif  /* BCM_56800 */
    635 
    636 #ifdef  BCM_56624
    637 /*
    638  * BCM56624 A0
    639  */
    640 int
    641 soc_features_bcm56624_a0(int unit, soc_feature_t feature)
    642 {
    643     uint16      dev_id;
    644     uint8       rev_id;
    645 
    646     SOC_FEATURE_DEBUG_PRINT((" 56624_a0"));
    647     soc_cm_get_id(unit, &dev_id, &rev_id);
    648 
    649     switch (feature) {
    650     case soc_feature_dcb_type14:
    651     case soc_feature_table_hi:      /* > 32 bits in PBM */
    652     case soc_feature_vlan_ctrl:          /* per VLAN property control */
    653     case soc_feature_igmp_mld_support:
    654     case soc_feature_trunk_group_overlay:
    655     case soc_feature_dscp:
    656     case soc_feature_dscp_map_per_port:
    657     case soc_feature_mac_learn_limit:
    658     case soc_feature_system_mac_learn_limit:
    659     case soc_feature_class_based_learning:
    660     case soc_feature_storm_control:
    661     case soc_feature_aging_extended:
    662     case soc_feature_unimac:
    663     case soc_feature_dual_hash:
    664     case soc_feature_l3_entry_key_type:
    665     case soc_feature_generic_table_ops:
    666     case soc_feature_mem_push_pop:
    667     case soc_feature_lpm_prefix_length_max_128:
    668     case soc_feature_color_prio_map:
    669     case soc_feature_tunnel_gre:
    670     case soc_feature_tunnel_any_in_6:
    671     case soc_feature_field_virtual_slice_group:
    672     case soc_feature_field_intraslice_double_wide:
    673     case soc_feature_field_egress_flexible_v6_key:
    674     case soc_feature_field_multi_stage:
    675     case soc_feature_field_ingress_global_meter_pools:
    676     case soc_feature_field_egress_global_counters:
    677     case soc_feature_field_ing_egr_separate_packet_byte_counters:
    678     case soc_feature_field_ingress_ipbm:
    679     case soc_feature_field_egress_metering:
    680     case soc_feature_dcb_reason_hi:
    681     case soc_feature_trunk_group_size:
    682     case soc_feature_multi_sbus_cmds:
    683     case soc_feature_esm_support:
    684     case soc_feature_fifo_dma:
    685     case soc_feature_ipfix:
    686     case soc_feature_src_mac_group:
    687     case soc_feature_higig_lookup:
    688     case soc_feature_xgxs_v7:
    689     case soc_feature_mpls:
    690     case soc_feature_mpls_software_failover:
    691     case soc_feature_subport:
    692     case soc_feature_l2_pending:
    693     case soc_feature_vlan_translation_range:
    694     case soc_feature_vlan_action:
    695     case soc_feature_mac_based_vlan:
    696     case soc_feature_ip_subnet_based_vlan:
    697     case soc_feature_packet_rate_limit:
    698     case soc_feature_hw_stats_calc:
    699     case soc_feature_sample_thresh16:
    700     case soc_feature_virtual_switching:
    701     case soc_feature_enhanced_dos_ctrl:
    702     case soc_feature_use_double_freq_for_ddr_pll:
    703     case soc_feature_ignore_cmic_xgxs_pll_status:
    704     case soc_feature_rcpu_1:
    705     case soc_feature_l3_ingress_interface:
    706     case soc_feature_ppa_bypass:
    707     case soc_feature_egr_dscp_map_per_port:
    708     case soc_feature_l3_dynamic_ecmp_group:
    709     case soc_feature_modport_map_profile:
    710     case soc_feature_qos_profile:
    711     case soc_feature_field_action_l2_change:
    712     case soc_feature_vfi_mc_flood_ctrl:
    713     case soc_feature_mem_cache:
    714     case soc_feature_ser_parity:
    715 #ifdef INCLUDE_RCPU
    716     case soc_feature_rcpu_priority:
    717     case soc_feature_rcpu_tc_mapping:
    718 #endif /* INCLUDE_RCPU */
    719     case soc_feature_system_reserved_vlan:
    720     case soc_feature_ing_l2tunnel_tpid_parser:
    721     case soc_feature_egr_ipmc_mem_field_l3_payload_valid:
    722     case soc_feature_regs_as_mem:
    723         return TRUE;
    724     case soc_feature_xgxs_v6:
    725     case soc_feature_dcb_type11:
    726     case soc_feature_fe_gig_macs:
    727     case soc_feature_ctr_xaui_activity:
    728     case soc_feature_stat_dma_error_ack:
    729     case soc_feature_two_ingress_pipes:
    730     case soc_feature_field_slices8:
    731     case soc_feature_ipmc_group_mtu:
    732     case soc_feature_egr_l3_mtu:
    733     case soc_feature_trimac:
    734     case soc_feature_unknown_ipmc_tocpu:
    735     case soc_feature_sample_offset8:
    736     case soc_feature_reset_delay:
    737     case soc_feature_l3_defip_ecmp_count:
    738     case soc_feature_tunnel_dscp_trust:
    739         return FALSE;
    740     case soc_feature_always_drive_dbus:
    741         return (dev_id == BCM56624_DEVICE_ID || dev_id == BCM56626_DEVICE_ID ||
    742                 dev_id == BCM56628_DEVICE_ID || dev_id == BCM56629_DEVICE_ID)
    743                 && rev_id == BCM56624_A1_REV_ID;
    744     case soc_feature_pause_control_update:
    745         return ((dev_id == BCM56624_DEVICE_ID) && 
    746                 ((rev_id == BCM56624_A1_REV_ID) || (rev_id == BCM56624_B0_REV_ID)));
    747     default:
    748         return soc_features_bcm56800_a0(unit, feature);
    749     }
    750 }
    751 
    752 /*
    753  * BCM56624 B0
    754  */
    755 int
    756 soc_features_bcm56624_b0(int unit, soc_feature_t feature)
    757 {
    758     uint16      dev_id;
    759     uint8       rev_id;
    760     int         flexible_xgport;
    761 
    762     SOC_FEATURE_DEBUG_PRINT((" 56624_b0"));
    763     soc_cm_get_id(unit, &dev_id, &rev_id);
    764 
    765     flexible_xgport = FALSE;
    766     if ((dev_id == BCM56626_DEVICE_ID && rev_id != BCM56626_B0_REV_ID) ||
    767         (dev_id == BCM56628_DEVICE_ID && rev_id != BCM56628_B0_REV_ID)) {
    768         flexible_xgport =
    769             soc_property_get(unit, spn_FLEX_XGPORT, flexible_xgport);
    770     }
    771 
    772     switch (feature) {
    773     case soc_feature_xgport_one_xe_six_ge:
    774     case soc_feature_sample_thresh24:
    775     case soc_feature_flexible_dma_steps:
    776         return TRUE;
    777     case soc_feature_sample_thresh16:
    778     case soc_feature_use_double_freq_for_ddr_pll:
    779     case soc_feature_ignore_cmic_xgxs_pll_status:
    780         return FALSE;
    781     case soc_feature_flexible_xgport:
    782         return flexible_xgport;
    783     default:
    784         return soc_features_bcm56624_a0(unit, feature);
    785     }
    786 }
    787 #endif  /* BCM_56624 */
    788 
    789 #ifdef  BCM_56680
    790 /*
    791  * BCM56680 A0
    792  */
    793 int
    794 soc_features_bcm56680_a0(int unit, soc_feature_t feature)
    795 {
    796     uint16      dev_id;
    797     uint8       rev_id;
    798 
    799     SOC_FEATURE_DEBUG_PRINT((" 56680_a0"));
    800     soc_cm_get_id(unit, &dev_id, &rev_id);
    801 
    802     switch (feature) {
    803     case soc_feature_esm_support:
    804         return FALSE;
    805     default:
    806         return soc_features_bcm56624_a0(unit, feature);
    807     }
    808 }
    809 
    810 /*
    811  * BCM56680 B0
    812  */
    813 int
    814 soc_features_bcm56680_b0(int unit, soc_feature_t feature)
    815 {
    816     uint16      dev_id;
    817     uint8       rev_id;
    818 
    819     SOC_FEATURE_DEBUG_PRINT((" 56680_b0"));
    820     soc_cm_get_id(unit, &dev_id, &rev_id);
    821 
    822     switch (feature) {
    823     case soc_feature_esm_support:
    824     case soc_feature_flexible_xgport:
    825         return FALSE;
    826     default:
    827         return soc_features_bcm56624_b0(unit, feature);
    828     }
    829 }
    830 #endif  /* BCM_56680 */
    831 
    832 #ifdef  BCM_56634
    833 /*
    834  * BCM56634 A0
    835  */
    836 int
    837 soc_features_bcm56634_a0(int unit, soc_feature_t feature)
    838 {
    839     uint16      dev_id;
    840     uint8       rev_id;
    841     int         esm = TRUE;
    842     int         flex_port;
    843     soc_info_t  *si = &SOC_INFO(unit);
    844 
    845     SOC_FEATURE_DEBUG_PRINT((" 56634_a0"));
    846     soc_cm_get_id(unit, &dev_id, &rev_id);
    847 
    848     if (dev_id == 0xb639 || dev_id == 0xb526 || dev_id == 0xb538) {
    849         esm = FALSE;
    850     }
    851 
    852     switch (dev_id) {
    853     case BCM56636_DEVICE_ID:
    854     case BCM56638_DEVICE_ID:
    855     case BCM56639_DEVICE_ID:
    856         flex_port = TRUE;
    857         break;
    858     default:
    859         flex_port = FALSE;
    860     }
    861 
    862     switch (feature) {
    863     case soc_feature_oam:
    864     case soc_feature_time_support:
    865     case soc_feature_timesync_support:
    866     case soc_feature_dcb_type19:
    867     case soc_feature_gport_service_counters:
    868     case soc_feature_counter_parity:
    869     case soc_feature_ip_source_bind:
    870     case soc_feature_auto_multicast:
    871     case soc_feature_mpls_failover:
    872     case soc_feature_embedded_higig:
    873     case soc_feature_field_qualify_gport:
    874     case soc_feature_field_action_timestamp:
    875     case soc_feature_field_action_l2_change:
    876     case soc_feature_field_action_redirect_ipmc:
    877     case soc_feature_field_action_redirect_nexthop:
    878     case soc_feature_field_slice_dest_entity_select:
    879     case soc_feature_field_virtual_queue:
    880     case soc_feature_field_vfp_flex_counter:
    881     case soc_feature_field_packet_based_metering:
    882     case soc_feature_tunnel_protocol_match:
    883     case soc_feature_ipfix_rate:
    884     case soc_feature_ipfix_flow_mirror:
    885     case soc_feature_vlan_queue_map:
    886     case soc_feature_subport_enhanced:
    887     case soc_feature_mirror_flexible:
    888     case soc_feature_qos_profile:
    889     case soc_feature_fast_egr_cell_count:
    890     case soc_feature_lport_tab_profile:
    891     case soc_feature_failover:
    892     case soc_feature_ecmp_failover:
    893     case soc_feature_rx_timestamp:
    894     case soc_feature_sysport_remap:
    895     case soc_feature_timestamp_counter:
    896     case soc_feature_ser_parity:
    897     case soc_feature_pkt_tx_align:
    898     case soc_feature_mpls_enhanced:
    899     case soc_feature_e2ecc:
    900     case soc_feature_src_modid_blk_profile:
    901     case soc_feature_vpd_profile:
    902     case soc_feature_color_prio_map_profile:
    903     case soc_feature_vlan_vp:
    904     case soc_feature_mem_cache:
    905     case soc_feature_ipmc_remap:
    906     case soc_feature_proxy_port_property:
    907     case soc_feature_udf_support:
    908     case soc_feature_hg_proxy_module_config:
    909     case soc_feature_regs_as_mem:
    910         return TRUE;
    911     case soc_feature_led_data_offset_a0:
    912         /*All chips of Trident and Trident+ have no this feature */
    913         if(((dev_id >= BCM56840_DEVICE_ID) && (dev_id <= BCM56849_DEVICE_ID)) ||
    914             (dev_id == BCM56549_DEVICE_ID) ||
    915             (dev_id == BCM56053_DEVICE_ID) ||
    916             (dev_id == BCM56831_DEVICE_ID) ||
    917             (dev_id == BCM56835_DEVICE_ID) ||
    918             (dev_id == BCM56838_DEVICE_ID)) {
    919             return FALSE;
    920         } else {
    921             return TRUE;
    922         }
    923     case soc_feature_wlan:
    924     case soc_feature_egr_mirror_true:
    925     case soc_feature_mim:
    926     case soc_feature_internal_loopback:
    927     case soc_feature_mmu_virtual_ports:
    928         return si->internal_loopback;
    929     case soc_feature_flex_port:
    930         return flex_port;
    931     case soc_feature_esm_support:
    932         return esm;
    933     case soc_feature_dcb_type14:
    934     case soc_feature_use_double_freq_for_ddr_pll:
    935     case soc_feature_xgport_one_xe_six_ge:
    936     case soc_feature_flexible_xgport:
    937     case soc_feature_vfi_mc_flood_ctrl:
    938     case soc_feature_ppa_bypass:
    939         return FALSE;
    940     case soc_feature_priority_flow_control:
    941         return (rev_id != BCM56634_A0_REV_ID);
    942     case soc_feature_field_action_fabric_queue:
    943         return TRUE;
    944     case soc_feature_field_stage_half_slice:
    945          return (dev_id == BCM56538_DEVICE_ID);
    946     default:
    947         return soc_features_bcm56624_b0(unit, feature);
    948     }
    949 }
    950 
    951 /*
    952  * BCM56634 B0
    953  */
    954 int
    955 soc_features_bcm56634_b0(int unit, soc_feature_t feature)
    956 {
    957     uint16      dev_id;
    958     uint8       rev_id;
    959     int         mim, defip_hole = FALSE, mpls = TRUE, oam = TRUE;
    960     soc_info_t  *si = &SOC_INFO(unit);
    961 
    962     SOC_FEATURE_DEBUG_PRINT((" 56634_a0"));
    963     soc_cm_get_id(unit, &dev_id, &rev_id);
    964     mim = si->internal_loopback;
    965     if (dev_id == 0xb538) {
    966         mpls = mim = oam = FALSE;
    967         defip_hole = TRUE;
    968     }
    969 
    970     switch (feature) {
    971     case soc_feature_gmii_clkout:
    972         return TRUE;
    973     case soc_feature_l3_defip_hole:  /* Hole in L3_DEFIP block */
    974         return defip_hole;
    975     case soc_feature_unimac_tx_crs:
    976     case soc_feature_esm_rxfifo_resync:
    977     case soc_feature_ppa_match_vp:
    978         return TRUE;
    979     case soc_feature_mpls:
    980     case soc_feature_mpls_failover:
    981     case soc_feature_mpls_software_failover:
    982     case soc_feature_mpls_enhanced:
    983         return mpls;
    984     case soc_feature_mim:
    985         return mim;
    986     case soc_feature_oam:
    987         return oam;
    988     case soc_feature_mim_reserve_default_port:
    989         return TRUE;
    990     case soc_feature_esm_l2_lookup_for_ip6:
    991         return (dev_id == BCM56630_DEVICE_ID ||
    992                 dev_id == BCM56634_DEVICE_ID ||
    993                 dev_id == BCM56636_DEVICE_ID ||
    994                 dev_id == BCM56638_DEVICE_ID ||
    995                 dev_id == BCM56639_DEVICE_ID);
    996     default:
    997         return soc_features_bcm56634_a0(unit, feature);
    998     }
    999 }
   1000 #endif  /* BCM_56634 */
   1001 
   1002 #ifdef  BCM_56524
   1003 /*
   1004  * BCM56524 A0
   1005  */
   1006 int
   1007 soc_features_bcm56524_a0(int unit, soc_feature_t feature)
   1008 {
   1009     uint16      dev_id;
   1010     uint8       rev_id;
   1011     int         fp_stage_half_slice;
   1012 
   1013     SOC_FEATURE_DEBUG_PRINT((" 56524_a0"));
   1014     soc_cm_get_id(unit, &dev_id, &rev_id);
   1015 
   1016     fp_stage_half_slice = (dev_id == BCM56520_DEVICE_ID ||
   1017                            dev_id == BCM56521_DEVICE_ID ||
   1018                            dev_id == BCM56522_DEVICE_ID ||
   1019                            dev_id == BCM56524_DEVICE_ID ||
   1020                            dev_id == BCM56526_DEVICE_ID ||
   1021                            dev_id == BCM56534_DEVICE_ID);
   1022 
   1023     switch (feature) {
   1024     case soc_feature_esm_support:
   1025         return FALSE;
   1026     case soc_feature_field_stage_half_slice:
   1027         return fp_stage_half_slice;
   1028     case soc_feature_flex_port:
   1029         return (dev_id == BCM56526_DEVICE_ID);
   1030     default:
   1031         return soc_features_bcm56634_a0(unit, feature);
   1032     }
   1033 }
   1034 
   1035 /*
   1036  * BCM56524 B0
   1037  */
   1038 int
   1039 soc_features_bcm56524_b0(int unit, soc_feature_t feature)
   1040 {
   1041     uint16      dev_id;
   1042     uint8       rev_id;
   1043     int         mpls = TRUE, mim = TRUE, oam = TRUE, defip_hole = TRUE;
   1044 
   1045     SOC_FEATURE_DEBUG_PRINT((" 56524_a0"));
   1046     soc_cm_get_id(unit, &dev_id, &rev_id);
   1047     if (dev_id == 0xb534) {
   1048         mpls = mim = oam = FALSE;
   1049     }
   1050     if (dev_id == 0xb630) {
   1051         defip_hole = FALSE;
   1052     }
   1053     switch (feature) {
   1054     case soc_feature_gmii_clkout:
   1055         return TRUE;
   1056     case soc_feature_l3_defip_hole:  /* Hole in L3_DEFIP block */
   1057         return defip_hole;
   1058     case soc_feature_unimac_tx_crs:
   1059         return TRUE;
   1060     case soc_feature_mpls:
   1061     case soc_feature_mpls_failover:
   1062     case soc_feature_mpls_enhanced:
   1063         return mpls;
   1064     case soc_feature_mim:
   1065         return mim;
   1066     case soc_feature_oam:
   1067         return oam;
   1068     default:
   1069         return soc_features_bcm56524_a0(unit, feature);
   1070     }
   1071 }
   1072 #endif  /* BCM_56524 */
   1073 
   1074 #ifdef  BCM_56685
   1075 /*
   1076  * BCM56685 A0
   1077  */
   1078 int
   1079 soc_features_bcm56685_a0(int unit, soc_feature_t feature)
   1080 {
   1081     uint16      dev_id;
   1082     uint8       rev_id;
   1083 
   1084     SOC_FEATURE_DEBUG_PRINT((" 56685_a0"));
   1085     soc_cm_get_id(unit, &dev_id, &rev_id);
   1086 
   1087     switch (feature) {
   1088     case soc_feature_esm_support:
   1089     case soc_feature_wlan:
   1090         return FALSE;
   1091     case soc_feature_field_stage_half_slice:
   1092         return TRUE;
   1093     default:
   1094         return soc_features_bcm56634_a0(unit, feature);
   1095     }
   1096 }
   1097 
   1098 /*
   1099  * BCM56685 B0
   1100  */
   1101 int
   1102 soc_features_bcm56685_b0(int unit, soc_feature_t feature)
   1103 {
   1104     switch (feature) {
   1105     case soc_feature_gmii_clkout:
   1106         return TRUE;
   1107     case soc_feature_unimac_tx_crs:
   1108         return TRUE;
   1109     default:
   1110         return soc_features_bcm56685_a0(unit, feature);
   1111     }
   1112 }
   1113 #endif  /* BCM_56685 */
   1114 
   1115 #ifdef  BCM_56334
   1116 /*
   1117  * BCM56334 A0
   1118  */
   1119 int
   1120 soc_features_bcm56334_a0(int unit, soc_feature_t feature)
   1121 {
   1122     uint16      dev_id;
   1123     uint8       rev_id;
   1124     int             helix3 = FALSE;
   1125 
   1126     SOC_FEATURE_DEBUG_PRINT((" 56334_a0"));
   1127     soc_cm_get_id(unit, &dev_id, &rev_id);
   1128 
   1129     helix3 = (dev_id == BCM56320_DEVICE_ID || dev_id == BCM56321_DEVICE_ID);
   1130 
   1131     switch (feature) {
   1132     case soc_feature_esm_support:
   1133     case soc_feature_ipfix:
   1134     case soc_feature_dcb_type14:
   1135     case soc_feature_register_hi:   /* > 32 bits in PBM */
   1136     case soc_feature_table_hi:      /* > 32 bits in PBM */
   1137     case soc_feature_ppa_bypass:
   1138     case soc_feature_vfi_mc_flood_ctrl:
   1139     case soc_feature_pkt_tx_align:
   1140     case soc_feature_sample_thresh16:
   1141         return FALSE;
   1142     case soc_feature_urpf:
   1143     case soc_feature_oam:
   1144     case soc_feature_mim:
   1145     case soc_feature_mpls:
   1146     case soc_feature_mpls_enhanced:
   1147         return !helix3;
   1148     case soc_feature_lpm_tcam:
   1149     case soc_feature_ip_mcast:
   1150     case soc_feature_ip_mcast_repl:
   1151     case soc_feature_l3:
   1152     case soc_feature_l3_ip6:
   1153     case soc_feature_l3_lookup_cmd:
   1154     case soc_feature_l3_sgv:
   1155     case soc_feature_subport:
   1156     case soc_feature_vlan_egr_it_inner_replace:
   1157     case soc_feature_vlan_vp:
   1158     case soc_feature_vpd_profile:
   1159     case soc_feature_ppa_match_vp:
   1160     case soc_feature_fifo_dma_active:
   1161     case soc_feature_ser_parity:
   1162         return TRUE;
   1163     case soc_feature_delay_core_pll_lock:
   1164         return (dev_id == BCM56333_DEVICE_ID);
   1165     case soc_feature_dcb_type20:
   1166     case soc_feature_field_slices8:
   1167     case soc_feature_field_meter_pools8:
   1168     case soc_feature_field_action_timestamp:
   1169     case soc_feature_internal_loopback:
   1170     case soc_feature_vlan_queue_map:
   1171     case soc_feature_subport_enhanced:
   1172     case soc_feature_qos_profile:
   1173     case soc_feature_field_action_l2_change:
   1174     case soc_feature_field_action_redirect_nexthop:
   1175     case soc_feature_rx_timestamp:
   1176     case soc_feature_rx_timestamp_upper:
   1177     case soc_feature_led_data_offset_a0:
   1178     case soc_feature_timesync_support:
   1179     case soc_feature_timestamp_counter:
   1180     case soc_feature_time_support:
   1181     case soc_feature_flex_port:
   1182     case soc_feature_lport_tab_profile:
   1183     case soc_feature_field_virtual_queue:
   1184     case soc_feature_gmii_clkout:
   1185     case soc_feature_priority_flow_control:
   1186     case soc_feature_field_slice_dest_entity_select:
   1187     case soc_feature_ptp:
   1188     case soc_feature_field_packet_based_metering:
   1189     case soc_feature_color_prio_map_profile:
   1190     case soc_feature_field_oam_actions:
   1191     case soc_feature_regs_as_mem:
   1192     case soc_feature_l3_ecmp_2k_groups:
   1193         return TRUE;
   1194     default:
   1195         return soc_features_bcm56624_a0(unit, feature);
   1196     }
   1197 }
   1198 
   1199 /*
   1200  * BCM56334 B0
   1201  */
   1202 int
   1203 soc_features_bcm56334_b0(int unit, soc_feature_t feature)
   1204 {
   1205     uint16      dev_id;
   1206     uint8       rev_id;
   1207     int         defip_map = FALSE;
   1208 
   1209     SOC_FEATURE_DEBUG_PRINT((" 56334_b0"));
   1210     soc_cm_get_id(unit, &dev_id, &rev_id);
   1211 
   1212     if ((dev_id == 0xb230) || (dev_id == 0xb231)) {
   1213         defip_map = TRUE;
   1214     }
   1215 
   1216     switch (feature) {
   1217     case soc_feature_l3_defip_map:  /* Map out unused L3_DEFIP blocks */
   1218         return defip_map;
   1219     default:
   1220         return soc_features_bcm56334_a0(unit, feature);
   1221     }
   1222 }
   1223 #endif /* BCM_56334 */
   1224 
   1225 #ifdef BCM_56142
   1226 
   1227 /*
   1228  * BCM56142 A0
   1229  */
   1230 int
   1231 soc_features_bcm56142_a0(int unit, soc_feature_t feature)
   1232 {
   1233     uint16      dev_id;
   1234     uint8       rev_id;
   1235 
   1236     SOC_FEATURE_DEBUG_PRINT((" 56142_a0"));
   1237     soc_cm_get_id(unit, &dev_id, &rev_id);
   1238 
   1239     switch (feature) {
   1240         case soc_feature_vlan_queue_map:
   1241         case soc_feature_field_multi_stage:
   1242         case soc_feature_mpls:
   1243         case soc_feature_mpls_enhanced:
   1244         case soc_feature_mim:
   1245         case soc_feature_oam:
   1246         case soc_feature_field_slices8:
   1247         case soc_feature_subport:
   1248         case soc_feature_subport_enhanced:
   1249         case soc_feature_lpm_prefix_length_max_128:
   1250         case soc_feature_class_based_learning:
   1251         case soc_feature_urpf:
   1252         case soc_feature_l3_ingress_interface:
   1253         case soc_feature_ipmc_repl_penultimate:
   1254         case soc_feature_trunk_group_size:
   1255         case soc_feature_xgs1_mirror:
   1256         case soc_feature_failover:
   1257         case soc_feature_vlan_vp:
   1258         case soc_feature_ptp:
   1259         case soc_feature_ppa_match_vp:
   1260         case soc_feature_field_oam_actions:
   1261         case soc_feature_ser_parity:
   1262         case soc_feature_mem_cache:
   1263         case soc_feature_virtual_switching:
   1264         case soc_feature_port_flow_hash:
   1265         case soc_feature_egr_ipmc_mem_field_l3_payload_valid:
   1266             return FALSE;
   1267         case soc_feature_field_slices4:
   1268         case soc_feature_linear_drr_weight:
   1269         case soc_feature_egr_dscp_map_per_port:
   1270         case soc_feature_port_trunk_index:
   1271         case soc_feature_eee:
   1272         case soc_feature_l2_no_vfi:
   1273         case soc_feature_int_common_init:
   1274         case soc_feature_no_tunnel:
   1275         case soc_feature_field_qual_vlanformat_reverse:
   1276             return TRUE;
   1277         default:
   1278             return soc_features_bcm56334_a0(unit, feature);
   1279     }
   1280 }
   1281 #endif /* BCM_56142 */
   1282 
   1283 #ifdef BCM_56150
   1284 
   1285 /*
   1286  * BCM56150 A0
   1287  */
   1288 int
   1289 soc_features_bcm56150_a0(int unit, soc_feature_t feature)
   1290 {
   1291     uint16      dev_id;
   1292     uint8       rev_id;
   1293     int         gphy, field_slice_size_128;
   1294     int         fp_stage_multi_stage;
   1295 
   1296     SOC_FEATURE_DEBUG_PRINT((" 56150_a0"));
   1297     soc_cm_get_id(unit, &dev_id, &rev_id);
   1298 
   1299     gphy = ((dev_id == BCM56150_DEVICE_ID) ||
   1300                     (dev_id == BCM56152_DEVICE_ID) ||
   1301                     (dev_id == BCM53342_DEVICE_ID) ||
   1302                     (dev_id == BCM53343_DEVICE_ID) ||
   1303                     (dev_id == BCM53344_DEVICE_ID) ||
   1304                     (dev_id == BCM53346_DEVICE_ID) ||
   1305                     (dev_id == BCM53333_DEVICE_ID) ||
   1306                     (dev_id == BCM53334_DEVICE_ID));
   1307     field_slice_size_128 = ((dev_id == BCM53342_DEVICE_ID) ||
   1308                             (dev_id == BCM53343_DEVICE_ID) ||
   1309                             (dev_id == BCM53344_DEVICE_ID) ||
   1310                             (dev_id == BCM53346_DEVICE_ID) ||
   1311                             (dev_id == BCM53347_DEVICE_ID) ||
   1312                             (dev_id == BCM53393_DEVICE_ID) ||
   1313                             (dev_id == BCM53394_DEVICE_ID));
   1314     fp_stage_multi_stage = ((dev_id != BCM53342_DEVICE_ID) &&
   1315                             (dev_id != BCM53343_DEVICE_ID) &&
   1316                             (dev_id != BCM53344_DEVICE_ID) &&
   1317                             (dev_id != BCM53346_DEVICE_ID) &&
   1318                             (dev_id != BCM53347_DEVICE_ID) &&
   1319                             (dev_id != BCM53393_DEVICE_ID) &&
   1320                             (dev_id != BCM53394_DEVICE_ID));
   1321 
   1322     switch (feature) {
   1323         case soc_feature_dcb_type20:
   1324         case soc_feature_field_slices4:
   1325         case soc_feature_special_egr_ip_tunnel_ser:
   1326         case soc_feature_virtual_switching:
   1327             return FALSE;
   1328         case soc_feature_iproc:
   1329         case soc_feature_new_sbus_format:
   1330         case soc_feature_new_sbus_old_resp:
   1331         case soc_feature_sbusdma:
   1332         case soc_feature_cmicm:
   1333         case soc_feature_cpureg_dump:
   1334         case soc_feature_xlmac:
   1335         case soc_feature_logical_port_num:
   1336         case soc_feature_xy_tcam:
   1337         case soc_feature_xy_tcam_direct:
   1338         case soc_feature_unified_port:
   1339         case soc_feature_dcb_type30:
   1340         case soc_feature_field_slices8:
   1341         case soc_feature_field_virtual_slice_group:
   1342         case soc_feature_field_intraslice_double_wide:
   1343         case soc_feature_oam:
   1344         case soc_feature_generic_counters:
   1345         case soc_feature_higig_misc_speed_support:
   1346         case soc_feature_led_data_offset_a0:
   1347         case soc_feature_time_support:
   1348         case soc_feature_time_v3:
   1349         case soc_feature_timesync_support:
   1350         case soc_feature_timesync_v3:
   1351         case soc_feature_gmii_clkout:
   1352         case soc_feature_fifo_dma_hu2:
   1353         case soc_feature_eee_bb_mode:
   1354         case soc_feature_ser_parity:
   1355         case soc_feature_mem_cache:
   1356         case soc_feature_ser_engine:
   1357         case soc_feature_regs_as_mem:
   1358         case soc_feature_mem_parity_eccmask:
   1359         case soc_feature_int_common_init:
   1360         case soc_feature_inner_tpid_enable:
   1361         case soc_feature_uc:
   1362         case soc_feature_iproc_ddr:
   1363         case soc_feature_ptp:
   1364         case soc_feature_hr2_dual_hash:
   1365         case soc_feature_field_udf_offset_hg_114B:
   1366         case soc_feature_field_udf_offset_hg2_110B:
   1367         case soc_feature_eee_stat_clear_directly:
   1368         case soc_feature_cosq_hol_drop_packet_count:
   1369             return TRUE;
   1370         case soc_feature_gphy:
   1371             return gphy;
   1372         case soc_feature_field_slice_size128:
   1373             return field_slice_size_128;
   1374         case soc_feature_field_multi_stage:
   1375             return fp_stage_multi_stage;
   1376         case soc_feature_timesync_timestampingmode:
   1377             return TRUE;
   1378         case soc_feature_uc_image_name_with_no_chip_rev:
   1379             return TRUE;
   1380         case soc_feature_ip_source_bind:
   1381             return TRUE;
   1382         default:
   1383             return soc_features_bcm56142_a0(unit, feature);
   1384     }
   1385 }
   1386 #endif /* BCM_56150 */
   1387 
   1388 #ifdef BCM_53400
   1389 
   1390 /*
   1391  * BCM53400 A0
   1392  */
   1393 int
   1394 soc_features_bcm53400_a0(int unit, soc_feature_t feature)
   1395 {
   1396     SOC_FEATURE_DEBUG_PRINT((" 53400_a0"));
   1397 
   1398     return _soc_greyhound_features(unit,feature);
   1399 }
   1400 #endif /* BCM_53400 */
   1401 
   1402 #ifdef BCM_56160
   1403 
   1404 /*
   1405  * BCM56160 A0
   1406  */
   1407 int
   1408 soc_features_bcm56160_a0(int unit, soc_feature_t feature)
   1409 {
   1410     SOC_FEATURE_DEBUG_PRINT((" 56160_a0"));
   1411 
   1412     return _soc_hurricane3_features(unit,feature);
   1413 }
   1414 #endif /* BCM_56160 */
   1415 
   1416 #if defined(BCM_53540)
   1417 /*
   1418  * BCM53540 A0
   1419  */
   1420 int
   1421 soc_features_bcm53540_a0(int unit, soc_feature_t feature)
   1422 {
   1423     SOC_FEATURE_DEBUG_PRINT((" 53540_a0"));
   1424 
   1425     return soc_wolfhound2_features(unit, feature);
   1426 }
   1427 #endif /* BCM_53540 */
   1428 
   1429 #ifdef BCM_53570
   1430 
   1431 /*
   1432  * BCM53570 A0
   1433  */
   1434 int
   1435 soc_features_bcm53570_a0(int unit, soc_feature_t feature)
   1436 {
   1437     SOC_FEATURE_DEBUG_PRINT((" 53570_a0"));
   1438 
   1439     return _soc_greyhound2_features(unit,feature);
   1440 }
   1441 
   1442 /*
   1443  * BCM53570 B0
   1444  */
   1445 int
   1446 soc_features_bcm53570_b0(int unit, soc_feature_t feature)
   1447 {
   1448     SOC_FEATURE_DEBUG_PRINT((" 53570_b0"));
   1449 
   1450     return _soc_greyhound2_features(unit,feature);
   1451 }
   1452 #endif /* BCM_53570 */
   1453 
   1454 #if defined(BCM_56218) || defined(BCM_56224) || defined(BCM_53314)
   1455 /*
   1456  * BCM56218 A0
   1457  */
   1458 int
   1459 soc_features_bcm56218_a0(int unit, soc_feature_t feature)
   1460 {
   1461     uint32  rcpu = SOC_IS_RCPU_UNIT(unit);
   1462     int     l3_disable, field_slices4, field_slices2, fe_ports;
   1463     uint16  dev_id;
   1464     uint8   rev_id;
   1465 
   1466     SOC_FEATURE_DEBUG_PRINT((" 56218_a0"));
   1467     soc_cm_get_id(unit, &dev_id, &rev_id);
   1468 
   1469     l3_disable = (dev_id == BCM53716_DEVICE_ID);
   1470 
   1471     field_slices4 = (dev_id == BCM53718_DEVICE_ID ||
   1472                      dev_id == BCM53714_DEVICE_ID);
   1473 
   1474     field_slices2 = (dev_id == BCM53716_DEVICE_ID);
   1475 
   1476     fe_ports = (dev_id == BCM56014_DEVICE_ID ||
   1477                 dev_id == BCM56018_DEVICE_ID ||
   1478                 dev_id == BCM56024_DEVICE_ID ||
   1479                 dev_id == BCM56025_DEVICE_ID);
   1480 
   1481     switch (feature) {
   1482         case soc_feature_l2x_parity:
   1483             if (SAL_BOOT_BCMSIM) {
   1484                 return FALSE;
   1485             }
   1486             /* Fall through */
   1487         case soc_feature_parity_err_tocpu:
   1488         case soc_feature_nip_l3_err_tocpu:
   1489         case soc_feature_meter_adjust:      /* Adjust for IPG */
   1490         case soc_feature_src_modid_blk:
   1491         case soc_feature_dcb_type12:
   1492         case soc_feature_schmsg_alias:
   1493         case soc_feature_l2_lookup_cmd:
   1494         case soc_feature_l2_user_table:
   1495         case soc_feature_aging_extended:
   1496         case soc_feature_arl_hashed:
   1497         case soc_feature_l2_modfifo:
   1498         case soc_feature_mdio_enhanced:
   1499         case soc_feature_schan_hw_timeout:
   1500         case soc_feature_cpuport_switched:
   1501         case soc_feature_cpuport_mirror:
   1502         case soc_feature_fe_gig_macs:
   1503         case soc_feature_trimac:
   1504         case soc_feature_cos_rx_dma:
   1505         case soc_feature_xgxs_lcpll:
   1506         case soc_feature_dodeca_serdes:
   1507         case soc_feature_rxdma_cleanup:
   1508         case soc_feature_fe_maxframe:   /* fe_maxfr = MAXFR + 1 */
   1509         case soc_feature_vlan_mc_flood_ctrl: /* Per VLAN PFM support */
   1510 
   1511         case soc_feature_trunk_extended:
   1512         case soc_feature_l2_hashed:
   1513         case soc_feature_l2_lookup_retry:
   1514         case soc_feature_arl_insert_ovr:
   1515         case soc_feature_cfap_pool:
   1516         case soc_feature_stg_xgs:
   1517         case soc_feature_stg:
   1518         case soc_feature_stack_my_modid:
   1519         case soc_feature_remap_ut_prio:
   1520         case soc_feature_led_proc:
   1521         case soc_feature_ingress_metering:
   1522         case soc_feature_egress_metering:
   1523         case soc_feature_stat_jumbo_adj:
   1524         case soc_feature_stat_xgs3:
   1525         case soc_feature_color:
   1526         case soc_feature_dscp:
   1527         case soc_feature_dscp_map_mode_all:
   1528         case soc_feature_register_hi:   /* > 32 bits in PBM */
   1529         case soc_feature_table_hi:      /* > 32 bits in PBM */
   1530         case soc_feature_port_egr_block_ctl:
   1531         case soc_feature_higig2:
   1532         case soc_feature_storm_control:
   1533         case soc_feature_hw_stats_calc:
   1534         case soc_feature_cpu_proto_prio:
   1535         case soc_feature_linear_drr_weight:     /* Linear DRR Weight calc */
   1536         case soc_feature_igmp_mld_support:      /* IGMP/MLD snooping support */
   1537         case soc_feature_enhanced_dos_ctrl:
   1538         case soc_feature_src_mac_group:
   1539         case soc_feature_tunnel_6to4_secure:
   1540         /* Raptor supports DSCP map per port */
   1541         case soc_feature_dscp_map_per_port:
   1542         case soc_feature_src_trunk_port_bridge:
   1543         case soc_feature_big_icmpv6_ping_check:
   1544         case soc_feature_src_modid_blk_ucast_override:
   1545         case soc_feature_src_modid_blk_opcode_override:
   1546         case soc_feature_egress_blk_ucast_override:
   1547         case soc_feature_rcpu_1:
   1548         case soc_feature_phy_cl45:
   1549         case soc_feature_static_pfm:
   1550         case soc_feature_sgmii_autoneg:
   1551         case soc_feature_module_loopback:
   1552         case soc_feature_sample_thresh16:
   1553         case soc_feature_extended_pci_error:
   1554         case soc_feature_directed_mirror_only:
   1555         case soc_feature_tunnel_dscp_trust:
   1556             return TRUE;
   1557         case soc_feature_post:
   1558             return (rev_id <= BCM56018_A1_REV_ID);
   1559 
   1560         case soc_feature_field:         /* Field Processor */
   1561         case soc_feature_field_mirror_ovr:
   1562         case soc_feature_field_udf_higig2:
   1563         case soc_feature_field_udf_ethertype:
   1564         case soc_feature_field_comb_read:
   1565         case soc_feature_field_wide:
   1566         case soc_feature_field_slice_enable:
   1567         case soc_feature_field_cos:
   1568         case soc_feature_field_color_indep:
   1569         case soc_feature_field_qual_drop:
   1570         case soc_feature_field_qual_IpType:
   1571         case soc_feature_field_qual_Ip6High:
   1572         case soc_feature_field_ingress_ipbm:
   1573         case soc_feature_field_virtual_slice_group:
   1574         case soc_feature_system_mac_learn_limit:
   1575             return TRUE;
   1576         case soc_feature_field_slices8:
   1577             return !field_slices2 && !field_slices4; /* If not 2, 4, it is 8 */
   1578 
   1579         case soc_feature_field_slices4:
   1580             return field_slices4;
   1581 
   1582         case soc_feature_field_slices2:
   1583             return field_slices2;
   1584 
   1585         case soc_feature_l3:
   1586         case soc_feature_l3_ip6:
   1587         case soc_feature_fp_based_routing:
   1588             return !l3_disable;
   1589 
   1590         case soc_feature_table_dma:
   1591         case soc_feature_tslam_dma:
   1592         case soc_feature_stat_dma:
   1593         case soc_feature_cpuport_stat_dma:
   1594             return (rcpu) ? FALSE : TRUE;
   1595 
   1596         case soc_feature_fe_ports:
   1597             return fe_ports;
   1598 
   1599         case soc_feature_stat_dma_error_ack:
   1600         case soc_feature_sample_offset8:
   1601         default:
   1602             return FALSE;
   1603 
   1604     }
   1605 }
   1606 #endif  /* BCM_56218 */
   1607 
   1608 #ifdef  BCM_56224
   1609 /*
   1610  * BCM56224 A0
   1611  */
   1612 int
   1613 soc_features_bcm56224_a0(int unit, soc_feature_t feature)
   1614 {
   1615     int     l3_disable, field_slices4;
   1616     uint16  dev_id;
   1617     uint8   rev_id;
   1618 
   1619     SOC_FEATURE_DEBUG_PRINT((" 56224_a0"));
   1620     soc_cm_get_id(unit, &dev_id, &rev_id);
   1621 
   1622     l3_disable = (dev_id == BCM56225_DEVICE_ID ||
   1623                   dev_id == BCM56227_DEVICE_ID ||
   1624                   dev_id == BCM56229_DEVICE_ID ||
   1625                   dev_id == BCM56025_DEVICE_ID ||
   1626                   dev_id == BCM53724_DEVICE_ID ||
   1627                   dev_id == BCM53726_DEVICE_ID);
   1628 
   1629     field_slices4 = (dev_id == BCM53724_DEVICE_ID ||
   1630                      dev_id == BCM53726_DEVICE_ID);
   1631 
   1632     switch (feature) {
   1633         case soc_feature_l2x_parity:
   1634             if (SAL_BOOT_BCMSIM) {
   1635                 return FALSE;
   1636             } else {
   1637                 return TRUE;
   1638             }
   1639         case soc_feature_l3x_parity:
   1640         case soc_feature_l3defip_parity:
   1641             if (SAL_BOOT_BCMSIM) {
   1642                 return FALSE;
   1643             }
   1644             /* Fall through */
   1645         case soc_feature_lpm_tcam:
   1646         case soc_feature_ip_mcast:
   1647         case soc_feature_ip_mcast_repl:
   1648         case soc_feature_l3:
   1649         case soc_feature_l3_ip6:
   1650         case soc_feature_l3_lookup_cmd:
   1651         case soc_feature_l3_sgv:
   1652         case soc_feature_ipmc_lookup:
   1653             return !l3_disable;
   1654         case soc_feature_l3mtu_fail_tocpu:
   1655             return FALSE;
   1656         case soc_feature_unimac:
   1657         case soc_feature_dual_hash:
   1658         case soc_feature_dcb_type15:
   1659         case soc_feature_vlan_ctrl:
   1660         case soc_feature_color:
   1661         case soc_feature_force_forward:
   1662         case soc_feature_color_prio_map:
   1663         case soc_feature_hg_trunk_override:
   1664         case soc_feature_hg_trunking:
   1665         case soc_feature_port_trunk_index:
   1666         case soc_feature_vlan_translation:
   1667         case soc_feature_egr_vlan_check:
   1668         case soc_feature_xgxs_lcpll:
   1669         case soc_feature_bucket_support:
   1670         case soc_feature_ip_ep_mem_parity:
   1671         case soc_feature_mac_learn_limit:
   1672 #ifdef INCLUDE_RCPU
   1673         case soc_feature_rcpu_priority:
   1674 #endif /* INCLUDE_RCPU */
   1675         case soc_feature_forwarding_db_no_support:
   1676         case soc_feature_link_status_get_need_phy_read_twice:
   1677             return TRUE;
   1678         case soc_feature_field_slices4:
   1679             return field_slices4;
   1680         case soc_feature_register_hi:   /* > 32 bits in PBM */
   1681         case soc_feature_table_hi:      /* > 32 bits in PBM */
   1682         case soc_feature_trimac:
   1683         case soc_feature_dcb_type12:
   1684         case soc_feature_field_slices8:
   1685         case soc_feature_fp_based_routing:
   1686             return FALSE;
   1687         case soc_feature_post:
   1688             return ((dev_id == BCM56024_DEVICE_ID) ||
   1689                     (dev_id == BCM56025_DEVICE_ID));
   1690         case soc_feature_mdio_setup:
   1691             return (((dev_id == BCM56024_DEVICE_ID) ||
   1692                     (dev_id == BCM56025_DEVICE_ID)) &&
   1693                     (rev_id >= BCM56024_B0_REV_ID));
   1694         default:
   1695             return soc_features_bcm56218_a0(unit, feature);
   1696     }
   1697 }
   1698 
   1699 int
   1700 soc_features_bcm56224_b0(int unit, soc_feature_t feature)
   1701 {
   1702     SOC_FEATURE_DEBUG_PRINT((" 56224_b0"));
   1703     switch (feature) {
   1704         case soc_feature_dcb_type18:
   1705         case soc_feature_fast_egr_cell_count:
   1706             return TRUE;
   1707         case soc_feature_dcb_type15:
   1708         case soc_feature_post:
   1709             return FALSE;
   1710         default:
   1711             return soc_features_bcm56224_a0(unit, feature);
   1712     }
   1713 }
   1714 #endif /* BCM_56224 */
   1715 
   1716 #ifdef  BCM_53314
   1717 /*
   1718  * BCM53314 A0
   1719  */
   1720 int
   1721 soc_features_bcm53314_a0(int unit, soc_feature_t feature)
   1722 {
   1723     int     field_slices4, hawkeye_a0_war;
   1724     uint16  dev_id;
   1725     uint8   rev_id;
   1726 
   1727     SOC_FEATURE_DEBUG_PRINT((" 53314_a0"));
   1728     soc_cm_get_id(unit, &dev_id, &rev_id);
   1729 
   1730     field_slices4 = (dev_id == BCM53312_DEVICE_ID ||
   1731                      dev_id == BCM53313_DEVICE_ID ||
   1732                      dev_id == BCM53314_DEVICE_ID ||
   1733                      dev_id == BCM53322_DEVICE_ID ||
   1734                      dev_id == BCM53323_DEVICE_ID ||
   1735                      dev_id == BCM53324_DEVICE_ID );
   1736 
   1737     hawkeye_a0_war = (rev_id == BCM53314_A0_REV_ID);
   1738 
   1739     switch (feature) {
   1740         case soc_feature_l2x_parity:
   1741             if (SAL_BOOT_BCMSIM) {
   1742                 return FALSE;
   1743             } else {
   1744                 return TRUE;
   1745             }
   1746         case soc_feature_l3x_parity:
   1747         case soc_feature_l3defip_parity:
   1748         case soc_feature_hg_trunk_override:
   1749         case soc_feature_hg_trunking:
   1750             return FALSE;
   1751         case soc_feature_l3:
   1752         case soc_feature_l3_ip6:
   1753         case soc_feature_fp_based_routing:
   1754         case soc_feature_fp_routing_hk:
   1755             return TRUE;
   1756         case soc_feature_lpm_tcam:
   1757         case soc_feature_ip_mcast:
   1758         case soc_feature_ip_mcast_repl:
   1759         case soc_feature_l3_lookup_cmd:
   1760         case soc_feature_l3_sgv:
   1761         case soc_feature_l3mtu_fail_tocpu:
   1762         case soc_feature_ipmc_lookup:
   1763             return FALSE;
   1764         case soc_feature_unimac:
   1765         case soc_feature_dual_hash:
   1766         case soc_feature_dcb_type17:
   1767         case soc_feature_vlan_ctrl:
   1768         case soc_feature_color:
   1769         case soc_feature_force_forward:
   1770         case soc_feature_color_prio_map:
   1771         case soc_feature_port_trunk_index:
   1772         case soc_feature_vlan_translation:
   1773         case soc_feature_egr_vlan_check:
   1774         case soc_feature_bucket_support:
   1775         case soc_feature_ip_ep_mem_parity:
   1776         case soc_feature_fast_egr_cell_count:
   1777 #ifdef INCLUDE_RCPU
   1778         case soc_feature_rcpu_priority:
   1779 #endif /* INCLUDE_RCPU */
   1780         case soc_feature_phy_lb_needed_in_mac_lb:
   1781         case soc_feature_rx_timestamp:
   1782         case soc_feature_mac_learn_limit:
   1783         case soc_feature_system_mac_learn_limit:
   1784         case soc_feature_timesync_support:
   1785             return TRUE;
   1786         case soc_feature_field_slices4:
   1787             return field_slices4;
   1788         case soc_feature_xgxs_lcpll:
   1789         case soc_feature_register_hi:   /* > 32 bits in PBM */
   1790         case soc_feature_table_hi:      /* > 32 bits in PBM */
   1791         case soc_feature_trimac:
   1792         case soc_feature_dcb_type12:
   1793         case soc_feature_dcb_type15:
   1794         case soc_feature_field_slices8:
   1795         case soc_feature_static_pfm:
   1796             return FALSE;
   1797         case soc_feature_hawkeye_a0_war:
   1798             return hawkeye_a0_war;
   1799         default:
   1800             return soc_features_bcm56218_a0(unit, feature);
   1801     }
   1802 }
   1803 
   1804 /*
   1805  * BCM53324 A0
   1806  */
   1807 int
   1808 soc_features_bcm53324_a0(int unit, soc_feature_t feature)
   1809 {
   1810     uint16      dev_id;
   1811     uint8       rev_id;
   1812 
   1813     SOC_FEATURE_DEBUG_PRINT((" 53324_a0"));
   1814     soc_cm_get_id(unit, &dev_id, &rev_id);
   1815 
   1816     switch (feature) {
   1817         case soc_feature_field_slices4:
   1818         case soc_feature_eee:
   1819             return TRUE;
   1820         case soc_feature_hawkeye_a0_war:
   1821             return FALSE;
   1822         default:
   1823             return soc_features_bcm53314_a0(unit, feature);
   1824     }
   1825 }
   1826 #endif /* BCM_53314 */
   1827 
   1828 #ifdef  BCM_56514
   1829 /*
   1830  * BCM56514 A0
   1831  */
   1832 int
   1833 soc_features_bcm56514_a0(int unit, soc_feature_t feature)
   1834 {
   1835     uint16      dev_id;
   1836     uint8       rev_id;
   1837     int         l3disable;
   1838 #ifndef EXCLUDE_BCM56324
   1839     int         helix2;
   1840 #endif /* EXCLUDE_BCM56324 */
   1841 
   1842     SOC_FEATURE_DEBUG_PRINT((" 56514_a0"));
   1843     soc_cm_get_id(unit, &dev_id, &rev_id);
   1844 
   1845 #ifndef EXCLUDE_BCM56324
   1846     helix2 = (dev_id == BCM56324_DEVICE_ID ||
   1847               dev_id == BCM56322_DEVICE_ID);
   1848 #endif /* EXCLUDE_BCM56324 */
   1849 
   1850     l3disable = (dev_id == BCM56516_DEVICE_ID ||
   1851                  dev_id == BCM56517_DEVICE_ID ||
   1852                  dev_id == BCM56518_DEVICE_ID ||
   1853                  dev_id == BCM56519_DEVICE_ID);
   1854 
   1855     switch (feature) {
   1856     case soc_feature_l3_defip_map:  /* Map out unused L3_DEFIP blocks */
   1857     case soc_feature_status_link_fail:
   1858     case soc_feature_egr_vlan_pfm:  /* MH PFM control per VLAN FB A0 */
   1859     case soc_feature_ipmc_repl_freeze:
   1860     case soc_feature_basic_dos_ctrl:
   1861     case soc_feature_proto_pkt_ctrl:
   1862     case soc_feature_dcb_type9:
   1863     case soc_feature_unknown_ipmc_tocpu:
   1864     case soc_feature_stat_dma_error_ack:
   1865     case soc_feature_asf_no_10_100:
   1866     case soc_feature_txdma_purge:
   1867     case soc_feature_l3_defip_ecmp_count:
   1868         return FALSE;  /* Override the 56504 B0 values*/
   1869     case soc_feature_cpu_proto_prio:
   1870     case soc_feature_enhanced_dos_ctrl:
   1871     case soc_feature_igmp_mld_support:   /* IGMP/MLD snooping support */
   1872     case soc_feature_vlan_ctrl:          /* per VLAN property control */
   1873     case soc_feature_trunk_group_size:   /* trunk group size support  */
   1874     case soc_feature_dcb_type13:
   1875     case soc_feature_hw_stats_calc:
   1876     case soc_feature_dscp_map_per_port:
   1877     case soc_feature_src_modid_blk_opcode_override:
   1878     case soc_feature_dual_hash:
   1879     case soc_feature_field_multi_stage:
   1880     case soc_feature_field_virtual_slice_group:
   1881     case soc_feature_field_qual_Ip6High:
   1882     case soc_feature_field_intraslice_double_wide:
   1883     case soc_feature_linear_drr_weight:     /* Linear DRR Weight calc */
   1884     case soc_feature_src_trunk_port_bridge:
   1885     case soc_feature_lmd:
   1886     case soc_feature_field_intraslice_basic_key:
   1887     case soc_feature_force_forward:
   1888     case soc_feature_color_prio_map:
   1889     case soc_feature_field_egress_global_counters:
   1890     case soc_feature_src_mac_group:
   1891     case soc_feature_packet_rate_limit:
   1892     case soc_feature_field_action_l2_change:
   1893     case soc_feature_field_egress_metering:
   1894     case soc_feature_mem_cache:
   1895     case soc_feature_l3x_parity:
   1896         return TRUE;
   1897 #ifndef EXCLUDE_BCM56324
   1898     case soc_feature_field_slices8:
   1899         return helix2;
   1900     case soc_feature_urpf:
   1901         return !helix2 && !l3disable;
   1902     case soc_feature_l3defip_parity:
   1903         if (helix2) {
   1904             return FALSE;
   1905         }
   1906         /* Fall through */
   1907 #else
   1908     case soc_feature_urpf:
   1909         return !l3disable;
   1910 #endif /* EXCLUDE_BCM56324 */
   1911     default:
   1912         return soc_features_bcm56504_b0(unit, feature);
   1913     }
   1914 }
   1915 #endif  /* BCM_56514 */
   1916 
   1917 #ifdef  BCM_56820
   1918 /*
   1919  * BCM56820 A0
   1920  */
   1921 int
   1922 soc_features_bcm56820_a0(int unit, soc_feature_t feature)
   1923 {
   1924     uint16      dev_id;
   1925     uint8       rev_id;
   1926     int         bypass_mode;
   1927 
   1928     SOC_FEATURE_DEBUG_PRINT((" 56820_a0"));
   1929     soc_cm_get_id(unit, &dev_id, &rev_id);
   1930 
   1931     bypass_mode =
   1932         soc_property_get(unit, spn_SWITCH_BYPASS_MODE,
   1933                          SOC_SWITCH_BYPASS_MODE_NONE);
   1934 
   1935     switch (feature) {
   1936     case soc_feature_dcb_type16:
   1937     case soc_feature_unimac:
   1938     case soc_feature_xgxs_v7:
   1939     case soc_feature_trunk_group_overlay:
   1940     case soc_feature_trunk_group_size:
   1941     case soc_feature_vlan_ctrl:          /* per VLAN property control */
   1942     case soc_feature_force_forward:
   1943     case soc_feature_hw_stats_calc:
   1944     case soc_feature_dual_hash:
   1945     case soc_feature_l2_overflow:
   1946     case soc_feature_generic_table_ops:
   1947     case soc_feature_igmp_mld_support:
   1948     case soc_feature_mem_push_pop:
   1949     case soc_feature_src_mac_group:
   1950     case soc_feature_higig_lookup:
   1951     case soc_feature_lpm_prefix_length_max_128:
   1952     case soc_feature_fifo_dma:
   1953     case soc_feature_l2_pending:
   1954     case soc_feature_packet_rate_limit:
   1955     case soc_feature_sample_thresh16:
   1956     case soc_feature_enhanced_dos_ctrl:
   1957     case soc_feature_status_link_fail:
   1958     case soc_feature_src_trunk_port_bridge:
   1959     case soc_feature_egr_dscp_map_per_port:
   1960     case soc_feature_port_lag_failover:
   1961     case soc_feature_l3_dynamic_ecmp_group:
   1962     case soc_feature_l3_ecmp_2k_groups:
   1963     case soc_feature_e2ecc:
   1964     case soc_feature_mem_cache:
   1965     case soc_feature_ser_parity:
   1966     case soc_feature_field_egress_metering:
   1967 #ifdef INCLUDE_RCPU
   1968     case soc_feature_rcpu_1:
   1969     case soc_feature_rcpu_priority:
   1970     case soc_feature_rcpu_tc_mapping:
   1971 #endif /* INCLUDE_RCPU */
   1972         return TRUE;
   1973     case soc_feature_lpm_tcam:
   1974     case soc_feature_ip_mcast:
   1975     case soc_feature_ip_mcast_repl:
   1976     case soc_feature_l3:
   1977     case soc_feature_l3_ip6:
   1978     case soc_feature_l3_lookup_cmd:
   1979     case soc_feature_l3_sgv:
   1980     case soc_feature_field_egress_flexible_v6_key:
   1981     case soc_feature_field_multi_stage:
   1982     case soc_feature_field_egress_global_counters:
   1983     case soc_feature_vlan_translation:
   1984     case soc_feature_untagged_vt_miss:
   1985     case soc_feature_egr_l3_mtu:
   1986     case soc_feature_ipmc_group_mtu:
   1987     case soc_feature_tunnel_gre:
   1988     case soc_feature_tunnel_any_in_6:
   1989     case soc_feature_tunnel_6to4_secure:
   1990     case soc_feature_unknown_ipmc_tocpu:
   1991     case soc_feature_class_based_learning:
   1992     case soc_feature_storm_control:
   1993     case soc_feature_vlan_translation_range:
   1994     case soc_feature_vlan_action:
   1995     case soc_feature_mac_based_vlan:
   1996     case soc_feature_ip_subnet_based_vlan:
   1997     case soc_feature_color:
   1998     case soc_feature_color_prio_map:
   1999     case soc_feature_subport:
   2000     case soc_feature_dscp:
   2001     case soc_feature_dscp_map_per_port:
   2002         /* In bypass mode, all of these features are unusable */
   2003         return bypass_mode == SOC_SWITCH_BYPASS_MODE_NONE;
   2004    case soc_feature_field:
   2005     case soc_feature_field_virtual_slice_group:
   2006     case soc_feature_field_intraslice_double_wide:
   2007     case soc_feature_field_ing_egr_separate_packet_byte_counters:
   2008     case soc_feature_field_ingress_global_meter_pools:
   2009     case soc_feature_field_ingress_two_slice_types:
   2010     case soc_feature_field_slices12:
   2011     case soc_feature_field_meter_pools4:
   2012     case soc_feature_field_ingress_ipbm:
   2013         /* In L3 + FP bypass mode, IFP is unavailable */
   2014         return bypass_mode != SOC_SWITCH_BYPASS_MODE_L3_AND_FP;
   2015     case soc_feature_xgxs_v6:
   2016     case soc_feature_dcb_type11:
   2017     case soc_feature_fe_gig_macs:
   2018     case soc_feature_stat_dma_error_ack:
   2019     case soc_feature_ctr_xaui_activity:
   2020     case soc_feature_field_slices8:
   2021     case soc_feature_trimac:
   2022     case soc_feature_sample_offset8:
   2023         return FALSE;
   2024     case soc_feature_ignore_cmic_xgxs_pll_status:
   2025     case soc_feature_delay_core_pll_lock:
   2026         return (rev_id == BCM56820_A0_REV_ID);
   2027     case soc_feature_priority_flow_control:
   2028         return (rev_id != BCM56820_A0_REV_ID);
   2029     case soc_feature_pkt_tx_align:
   2030         return (rev_id >= BCM56820_B0_REV_ID);
   2031     default:
   2032         return soc_features_bcm56800_a0(unit, feature);
   2033     }
   2034 }
   2035 #endif /* BCM_56820 */
   2036 
   2037 #ifdef  BCM_56840
   2038 /*
   2039  * BCM56840 A0
   2040  */
   2041 int
   2042 soc_features_bcm56840_a0(int unit, soc_feature_t feature)
   2043 {
   2044     uint16      dev_id;
   2045     uint8       rev_id;
   2046 
   2047     SOC_FEATURE_DEBUG_PRINT((" 56840_a0"));
   2048 
   2049     soc_cm_get_id(unit, &dev_id, &rev_id);
   2050 
   2051     switch (feature) {
   2052     case soc_feature_dcb_type19:
   2053     case soc_feature_multi_sbus_cmds:
   2054     case soc_feature_esm_support:
   2055     case soc_feature_ipfix:
   2056     case soc_feature_ipfix_rate:
   2057     case soc_feature_ipfix_flow_mirror:
   2058     case soc_feature_mac_learn_limit:
   2059     case soc_feature_system_mac_learn_limit:
   2060     case soc_feature_oam:
   2061     case soc_feature_internal_loopback:
   2062     case soc_feature_embedded_higig:
   2063     case soc_feature_trunk_egress:
   2064     case soc_feature_bigmac_rxcnt_bug:
   2065     case soc_feature_xgs1_mirror:
   2066     case soc_feature_sysport_remap:
   2067     case soc_feature_timestamp_counter:
   2068     case soc_feature_l3_defip_map:
   2069     case soc_feature_pkt_tx_align:
   2070         return FALSE;
   2071     case soc_feature_special_egr_ip_tunnel_ser:
   2072         if ((rev_id == BCM56841_B0_REV_ID) ||
   2073             (rev_id == BCM56843_B0_REV_ID) ||
   2074             (rev_id == BCM56845_B0_REV_ID)) {
   2075             return TRUE;
   2076         } else {
   2077             return FALSE;
   2078         }
   2079     case soc_feature_field_intraslice_double_wide:
   2080     case soc_feature_dcb_type21:
   2081     case soc_feature_xmac:
   2082     case soc_feature_logical_port_num:
   2083     case soc_feature_mmu_config_property:
   2084     case soc_feature_l2_bulk_control:
   2085     case soc_feature_l2_bulk_bypass_replace:
   2086     case soc_feature_two_ingress_pipes:
   2087     case soc_feature_generic_counters:
   2088     case soc_feature_niv:
   2089     case soc_feature_trunk_extended_only:
   2090     case soc_feature_hg_trunk_override_profile:
   2091     case soc_feature_hg_dlb:
   2092     case soc_feature_shared_trunk_member_table:
   2093     case soc_feature_ets:
   2094     case soc_feature_qcn:
   2095     case soc_feature_priority_flow_control:
   2096     case soc_feature_vp_group_ingress_vlan_membership:
   2097     case soc_feature_eee:
   2098     case soc_feature_ctr_xaui_activity:
   2099     case soc_feature_vlan_egr_it_inner_replace:
   2100     case soc_feature_flex_port:
   2101     case soc_feature_ser_parity:
   2102     case soc_feature_xy_tcam:
   2103     case soc_feature_vlan_pri_cfi_action:
   2104     case soc_feature_vlan_copy_action:
   2105     case soc_feature_modport_map_dest_is_port_or_trunk:
   2106     case soc_feature_mirror_encap_profile:
   2107     case soc_feature_directed_mirror_only:
   2108     case soc_feature_rtag1_6_max_portcnt_less_than_rtag7:
   2109     case soc_feature_mem_cache:
   2110     case soc_feature_mirror_control_mem:
   2111     case soc_feature_mirror_table_trunk:
   2112     case soc_feature_gmii_clkout:
   2113     case soc_feature_fifo_dma_active:
   2114     case soc_feature_regs_as_mem:
   2115     case soc_feature_fp_meter_ser_verify:
   2116     case soc_feature_vlan_protocol_pkt_ctrl:
   2117     case soc_feature_field_egress_metering:
   2118     case soc_feature_ifp_redirect_to_dvp:
   2119     case soc_feature_nh_for_ifp_actions:
   2120     case soc_feature_hg_proxy_module_config:
   2121     case soc_feature_l2_cache_use_my_station:
   2122     case soc_feature_efp_meter_table_write_ignore_nack:
   2123     case soc_feature_mirror_rspan_no_mtp0:
   2124         return TRUE;
   2125     case soc_feature_bucket_update_freeze:
   2126         return rev_id < BCM56840_B0_REV_ID;
   2127     case soc_feature_hg_trunk_16_members:
   2128         return rev_id >= BCM56840_B0_REV_ID;
   2129     case soc_feature_field_egress_flexible_v6_key:
   2130     case soc_feature_field_multi_stage:
   2131     case soc_feature_field_egress_global_counters:
   2132     case soc_feature_vlan_translation:
   2133     case soc_feature_untagged_vt_miss:
   2134     case soc_feature_tunnel_gre:
   2135     case soc_feature_tunnel_any_in_6:
   2136     case soc_feature_tunnel_6to4_secure:
   2137     case soc_feature_class_based_learning:
   2138     case soc_feature_storm_control:
   2139     case soc_feature_vlan_translation_range:
   2140     case soc_feature_vlan_action:
   2141     case soc_feature_mac_based_vlan:
   2142     case soc_feature_ip_subnet_based_vlan:
   2143     case soc_feature_color:
   2144     case soc_feature_color_prio_map:
   2145     case soc_feature_dscp:
   2146     case soc_feature_dscp_map_per_port:
   2147     case soc_feature_field:
   2148     case soc_feature_field_virtual_slice_group:
   2149     case soc_feature_field_ing_egr_separate_packet_byte_counters:
   2150     case soc_feature_field_ingress_global_meter_pools:
   2151     case soc_feature_field_ingress_two_slice_types:
   2152     case soc_feature_field_slices10:
   2153     case soc_feature_field_meter_pools4:
   2154     case soc_feature_field_ingress_ipbm:
   2155     case soc_feature_src_modid_base_index:
   2156     case soc_feature_field_action_redirect_ecmp:
   2157     case soc_feature_field_slice_dest_entity_select:
   2158         if (SOC_IS_XGS_FABRIC(unit)) {
   2159 #if defined(BCM_TOMAHAWK_SUPPORT)
   2160             return (SOC_SWITCH_BYPASS_MODE(unit) == SOC_SWITCH_BYPASS_MODE_NONE)
   2161                     || (SOC_SWITCH_BYPASS_MODE(unit) == SOC_SWITCH_BYPASS_MODE_EFP);
   2162 #else
   2163             return (SOC_SWITCH_BYPASS_MODE(unit) == SOC_SWITCH_BYPASS_MODE_NONE);
   2164 #endif
   2165         } else {
   2166             return TRUE;
   2167         }
   2168         break;
   2169     case soc_feature_urpf:
   2170     case soc_feature_lpm_tcam:
   2171     case soc_feature_ip_mcast:
   2172     case soc_feature_ip_mcast_repl:
   2173     case soc_feature_l3:
   2174     case soc_feature_l3_ingress_interface:
   2175     case soc_feature_trill:
   2176     case soc_feature_l3_ip6:
   2177     case soc_feature_l3_lookup_cmd:
   2178     case soc_feature_l3_sgv:
   2179     case soc_feature_wesp:
   2180     case soc_feature_mim:
   2181     case soc_feature_mim_peer_sharing:
   2182     case soc_feature_mpls:
   2183     case soc_feature_subport:
   2184         if (SOC_IS_XGS_FABRIC(unit)) {
   2185             return FALSE;
   2186         } else {
   2187             return TRUE;
   2188         }
   2189     case soc_feature_higig_misc_speed_support:
   2190         return ((dev_id == BCM56841_DEVICE_ID && rev_id >= BCM56841_B0_REV_ID) ||
   2191                 (dev_id == BCM56843_DEVICE_ID && rev_id >= BCM56843_B0_REV_ID));
   2192     default:
   2193         return soc_features_bcm56634_a0(unit, feature);
   2194     }
   2195 }
   2196 
   2197 /*
   2198  * BCM56840 B0
   2199  */
   2200 int
   2201 soc_features_bcm56840_b0(int unit, soc_feature_t feature)
   2202 {
   2203     uint16      dev_id;
   2204     uint8       rev_id;
   2205 
   2206     SOC_FEATURE_DEBUG_PRINT((" 56840_b0"));
   2207     soc_cm_get_id(unit, &dev_id, &rev_id);
   2208 
   2209     if (dev_id == BCM56838_DEVICE_ID) {
   2210         if ((feature == soc_feature_vlan_translation) ||
   2211             (feature == soc_feature_vlan_translation_range) ||
   2212             (feature == soc_feature_vlan_vp) ||
   2213             (feature == soc_feature_mim) ||
   2214             (feature == soc_feature_trill) ||
   2215             (feature == soc_feature_trill_ttl) ||
   2216             (feature == soc_feature_fcoe) ||
   2217             (feature == soc_feature_pim_bidir) ||
   2218             (feature == soc_feature_mpls) ||
   2219             (feature == soc_feature_mpls_enhanced) ||
   2220             (feature == soc_feature_mpls_failover) ||
   2221             (feature == soc_feature_mpls_software_failover) ||
   2222             (feature == soc_feature_priority_flow_control) ||
   2223             (feature == soc_feature_ets) ||
   2224             (feature == soc_feature_qcn) ||
   2225             (feature == soc_feature_asf) ||
   2226             (feature == soc_feature_tunnel_6to4_secure) ||
   2227             (feature == soc_feature_tunnel_any_in_6) ||
   2228             (feature == soc_feature_tunnel_gre) ||
   2229             (feature == soc_feature_mac_based_vlan)) {
   2230             return FALSE;
   2231         }
   2232     }
   2233 
   2234     if (dev_id == BCM56831_DEVICE_ID) {
   2235         if ((feature == soc_feature_vlan_vp) ||
   2236             (feature == soc_feature_mim) ||
   2237             (feature == soc_feature_trill) ||
   2238             (feature == soc_feature_trill_ttl) ||
   2239             (feature == soc_feature_pim_bidir) ||
   2240             (feature == soc_feature_mpls) ||
   2241             (feature == soc_feature_mpls_enhanced) ||
   2242             (feature == soc_feature_mpls_failover) ||
   2243             (feature == soc_feature_mpls_software_failover) ||
   2244             (feature == soc_feature_ets) ||
   2245             (feature == soc_feature_tunnel_6to4_secure) ||
   2246             (feature == soc_feature_tunnel_any_in_6) ||
   2247             (feature == soc_feature_tunnel_gre) ||
   2248             (feature == soc_feature_vxlan) ||
   2249             (feature == soc_feature_advanced_flex_counter)||
   2250             (feature == soc_feature_urpf) ||
   2251             (feature == soc_feature_lpm_tcam) ||
   2252             (feature == soc_feature_ip_mcast) ||
   2253             (feature == soc_feature_ip_mcast_repl) ||
   2254             (feature == soc_feature_l3) ||
   2255             (feature == soc_feature_l3_ingress_interface) ||
   2256             (feature == soc_feature_l3_ip6) ||
   2257             (feature == soc_feature_l3_lookup_cmd) ||
   2258             (feature == soc_feature_l3_sgv) ||
   2259             (feature == soc_feature_l3_iif_profile) ||
   2260             (feature == soc_feature_l3_iif_zero_invalid) ||
   2261             (feature == soc_feature_l3_ecmp_1k_groups) ||
   2262             (feature == soc_feature_l3_extended_host_entry) ||
   2263             (feature == soc_feature_l3_host_ecmp_group) ||
   2264             (feature == soc_feature_repl_l3_intf_use_next_hop) ||
   2265             (feature == soc_feature_virtual_port_routing) ||
   2266             (feature == soc_feature_nat) ||
   2267             (feature == soc_feature_wesp) ||
   2268             (feature == soc_feature_l3_defip_map) ||
   2269             (feature == soc_feature_l3_ip4_options_profile) ||
   2270             (feature == soc_feature_l3_shared_defip_table)||
   2271             (feature == soc_feature_subport) ||
   2272             (feature == soc_feature_ip_subnet_based_vlan)){
   2273             return FALSE;
   2274         }
   2275     }
   2276 
   2277     if (dev_id == BCM56835_DEVICE_ID) {
   2278         if ((feature == soc_feature_mim) ||
   2279             (feature == soc_feature_mpls) ||
   2280             (feature == soc_feature_mpls_enhanced) ||
   2281             (feature == soc_feature_mpls_failover) ||
   2282             (feature == soc_feature_mpls_software_failover)) {
   2283             return FALSE;
   2284         }
   2285     }
   2286 
   2287 
   2288     if (dev_id == BCM56847_DEVICE_ID) {
   2289         if ((feature == soc_feature_mim)) {
   2290             return FALSE;
   2291         }
   2292     }
   2293 
   2294     switch (feature) {
   2295     case soc_feature_vp_group_egress_vlan_membership:
   2296     case soc_feature_xy_tcam_direct:
   2297     case soc_feature_higig_misc_speed_support:
   2298     case soc_feature_field_qual_my_station_hit:
   2299     case soc_feature_vlan_protocol_pkt_ctrl:
   2300     case soc_feature_bucket_update_freeze:
   2301     case soc_feature_special_egr_ip_tunnel_ser:
   2302     case soc_feature_evt_replace_tpid_only:
   2303         return TRUE;
   2304     case soc_feature_l3_ecmp_1k_groups:
   2305         return (dev_id == BCM56842_DEVICE_ID ||
   2306                 dev_id == BCM56844_DEVICE_ID ||
   2307                 dev_id == BCM56846_DEVICE_ID ||
   2308                 dev_id == BCM56549_DEVICE_ID ||
   2309                 dev_id == BCM56053_DEVICE_ID ||
   2310                 dev_id == BCM56831_DEVICE_ID ||
   2311                 dev_id == BCM56835_DEVICE_ID ||
   2312                 dev_id == BCM56838_DEVICE_ID ||
   2313                 dev_id == BCM56847_DEVICE_ID ||
   2314                 dev_id == BCM56849_DEVICE_ID);
   2315     case soc_feature_l2_bulk_bypass_replace:
   2316     case soc_feature_rtag1_6_max_portcnt_less_than_rtag7:
   2317     case soc_feature_hg_trunk_16_members:
   2318         return FALSE;
   2319     case soc_feature_trill_ttl:
   2320         if (SOC_IS_XGS_FABRIC(unit)) {
   2321             return FALSE;
   2322         } else {
   2323             return TRUE;
   2324         }
   2325     default:
   2326         return soc_features_bcm56840_a0(unit, feature);
   2327     }
   2328 }
   2329 #endif  /* BCM_56840 */
   2330 
   2331 #ifdef  BCM_56725
   2332 /*
   2333  * BCM56725 A0
   2334  */
   2335 int
   2336 soc_features_bcm56725_a0(int unit, soc_feature_t feature)
   2337 {
   2338     SOC_FEATURE_DEBUG_PRINT((" 56725_a0"));
   2339     switch (feature) {
   2340     case soc_feature_unimac:
   2341     case soc_feature_class_based_learning:
   2342     case soc_feature_lpm_prefix_length_max_128:
   2343     case soc_feature_tunnel_gre:
   2344     case soc_feature_tunnel_any_in_6:
   2345     case soc_feature_fifo_dma:
   2346     case soc_feature_subport:
   2347     case soc_feature_lpm_tcam:
   2348     case soc_feature_ip_mcast:
   2349     case soc_feature_ip_mcast_repl:
   2350     case soc_feature_l3:
   2351     case soc_feature_l3_ip6:
   2352     case soc_feature_l3_lookup_cmd:
   2353     case soc_feature_l3_sgv:
   2354         return FALSE;
   2355     default:
   2356         return soc_features_bcm56820_a0(unit, feature);
   2357     }
   2358 }
   2359 #endif /* BCM_56725 */
   2360 
   2361 #ifdef  BCM_56640
   2362 /*
   2363  * BCM56640 A0
   2364  */
   2365 int
   2366 soc_features_bcm56640_a0(int unit, soc_feature_t feature)
   2367 {
   2368     uint16      dev_id;
   2369     uint8       rev_id;
   2370     int         metro_dis, l3_reddefip;
   2371     int         fp_mp8;
   2372     int         fp_stage_half_slice;
   2373     int         fp_stage_quarter_slice;
   2374     int         ranger_plus_device_support;
   2375     int         regex_dis;
   2376     int         vp_dscp_map = FALSE;
   2377     int         tr3_only;
   2378     int         ext_addr_class;
   2379 
   2380     SOC_FEATURE_DEBUG_PRINT((" 56640_a0"));
   2381     soc_cm_get_id(unit, &dev_id, &rev_id);
   2382     metro_dis = (dev_id == BCM56545_DEVICE_ID ||
   2383                  dev_id == BCM56546_DEVICE_ID ||
   2384                  dev_id == BCM56044_DEVICE_ID ||
   2385                  dev_id == BCM56045_DEVICE_ID ||
   2386                  dev_id == BCM56046_DEVICE_ID ||
   2387                  dev_id == BCM56346_DEVICE_ID ||
   2388                  dev_id == BCM56345_DEVICE_ID);
   2389     l3_reddefip = (dev_id == BCM56540_DEVICE_ID ||
   2390                    dev_id == BCM56541_DEVICE_ID ||
   2391                    dev_id == BCM56542_DEVICE_ID ||
   2392                    dev_id == BCM56543_DEVICE_ID ||
   2393                    dev_id == BCM56544_DEVICE_ID ||
   2394                    dev_id == BCM56545_DEVICE_ID ||
   2395                    dev_id == BCM56346_DEVICE_ID ||
   2396                    dev_id == BCM56345_DEVICE_ID ||
   2397                    dev_id == BCM56546_DEVICE_ID);
   2398 
   2399     fp_mp8 = l3_reddefip;
   2400 
   2401     fp_stage_half_slice = (dev_id == BCM56540_DEVICE_ID ||
   2402                            dev_id == BCM56541_DEVICE_ID ||
   2403                            dev_id == BCM56542_DEVICE_ID ||
   2404                            dev_id == BCM56543_DEVICE_ID ||
   2405                            dev_id == BCM56544_DEVICE_ID ||
   2406                            dev_id == BCM56545_DEVICE_ID ||
   2407                            dev_id == BCM56546_DEVICE_ID ||
   2408                            dev_id == BCM56044_DEVICE_ID ||
   2409                            dev_id == BCM56045_DEVICE_ID ||
   2410                            dev_id == BCM56046_DEVICE_ID);
   2411 
   2412     fp_stage_quarter_slice = (dev_id == BCM56044_DEVICE_ID ||
   2413                               dev_id == BCM56045_DEVICE_ID ||
   2414                               dev_id == BCM56046_DEVICE_ID);
   2415 
   2416     ranger_plus_device_support =
   2417                    (dev_id == BCM56044_DEVICE_ID ||
   2418                     dev_id == BCM56045_DEVICE_ID ||
   2419                     dev_id == BCM56046_DEVICE_ID);
   2420 
   2421     regex_dis = (dev_id == BCM56044_DEVICE_ID ||
   2422                  dev_id == BCM56045_DEVICE_ID ||
   2423                  dev_id == BCM56046_DEVICE_ID ||
   2424                  dev_id == BCM56543_DEVICE_ID);
   2425     vp_dscp_map = (dev_id == BCM56340_DEVICE_ID ||
   2426                    dev_id == BCM56342_DEVICE_ID ||
   2427                    dev_id == BCM56540_DEVICE_ID ||
   2428                    dev_id == BCM56541_DEVICE_ID ||
   2429                    dev_id == BCM56542_DEVICE_ID ||
   2430                    dev_id == BCM56544_DEVICE_ID ||
   2431                    dev_id == BCM56547_DEVICE_ID || 
   2432                    dev_id == BCM56640_DEVICE_ID ||
   2433                    dev_id == BCM56643_DEVICE_ID || 
   2434                    dev_id == BCM56644_DEVICE_ID ||
   2435                    dev_id == BCM56648_DEVICE_ID ||
   2436                    dev_id == BCM56649_DEVICE_ID);  
   2437 
   2438     tr3_only = (dev_id == BCM56640_DEVICE_ID ||
   2439                 dev_id == BCM56643_DEVICE_ID ||
   2440                 dev_id == BCM56644_DEVICE_ID ||
   2441                 dev_id == BCM56648_DEVICE_ID ||
   2442                 dev_id == BCM56649_DEVICE_ID);
   2443 
   2444     ext_addr_class = (dev_id == BCM56640_DEVICE_ID ||
   2445                       dev_id == BCM56643_DEVICE_ID ||
   2446                       dev_id == BCM56644_DEVICE_ID ||
   2447                       dev_id == BCM56648_DEVICE_ID ||
   2448                       dev_id == BCM56649_DEVICE_ID ||
   2449                       dev_id == BCM56340_DEVICE_ID ||
   2450                       dev_id == BCM56342_DEVICE_ID ||
   2451                       dev_id == BCM56344_DEVICE_ID ||
   2452                       dev_id == BCM56345_DEVICE_ID ||
   2453                       dev_id == BCM56346_DEVICE_ID);
   2454 
   2455     switch (feature) {
   2456     case soc_feature_mpls:
   2457     case soc_feature_oam:
   2458         return !metro_dis;
   2459     case soc_feature_vp_dscp_map:
   2460         return vp_dscp_map;
   2461     case soc_feature_l3_reduced_defip_table:
   2462         return l3_reddefip;
   2463     case soc_feature_field_meter_pools8:
   2464         return fp_mp8;
   2465     case soc_feature_field_stage_half_slice:
   2466         return fp_stage_half_slice;
   2467     case soc_feature_etu_support:
   2468     case soc_feature_esm_support:
   2469     case soc_feature_esm_correction:
   2470         return ((dev_id == BCM56640_DEVICE_ID) ||
   2471                 (dev_id == BCM56643_DEVICE_ID) ||
   2472                 (dev_id == BCM56545_DEVICE_ID));
   2473     case soc_feature_cmac:
   2474         return ((dev_id == BCM56640_DEVICE_ID) ||
   2475                 (dev_id == BCM56044_DEVICE_ID) ||
   2476                 (dev_id == BCM56543_DEVICE_ID));
   2477     case soc_feature_static_repl_head_alloc:
   2478     case soc_feature_cpu_bp_toggle:
   2479         return (rev_id < BCM56640_B0_REV_ID);
   2480     case soc_feature_repl_head_ptr_replace:
   2481     case soc_feature_l2_overflow:
   2482     case soc_feature_tr3_sp_vector_mask:
   2483     case soc_feature_cmic_reserved_queues:
   2484     case soc_feature_l3_extended_host_entry:
   2485         return (rev_id >= BCM56640_B0_REV_ID);
   2486     case soc_feature_wlan:
   2487     case soc_feature_regex:
   2488         return !regex_dis;
   2489     case soc_feature_urpf:
   2490     case soc_feature_ecmp_dlb:
   2491     case soc_feature_mim:
   2492     case soc_feature_failover:
   2493     case soc_feature_ecmp_failover:
   2494     case soc_feature_global_meter:
   2495     case soc_feature_mpls_software_failover:
   2496     case soc_feature_mpls_failover:
   2497     case soc_feature_mpls_enhanced:
   2498     case soc_feature_mpls_entropy:
   2499          return !ranger_plus_device_support;
   2500     case soc_feature_no_vrf_stats:
   2501          return ranger_plus_device_support;
   2502     case soc_feature_system_mac_learn_limit:
   2503     case soc_feature_internal_loopback:
   2504     case soc_feature_trunk_egress:
   2505     case soc_feature_bigmac_rxcnt_bug:
   2506     case soc_feature_two_ingress_pipes:
   2507     case soc_feature_unimac:
   2508     case soc_feature_dcb_type21:
   2509     case soc_feature_gport_service_counters:
   2510     case soc_feature_field_vfp_flex_counter:
   2511     case soc_feature_flexible_dma_steps:
   2512     case soc_feature_field_ingress_two_slice_types:
   2513     case soc_feature_field_slices10:
   2514     case soc_feature_field_meter_pools4:
   2515     case soc_feature_asf:
   2516     case soc_feature_port_lag_failover:
   2517     case soc_feature_fp_meter_ser_verify:
   2518     case soc_feature_pkt_tx_align:
   2519     case soc_feature_special_egr_ip_tunnel_ser:
   2520     case soc_feature_l3_256_defip_table:
   2521     case soc_feature_mim_peer_sharing:
   2522         return FALSE;
   2523     case soc_feature_new_sbus_format:
   2524     case soc_feature_cmicm:
   2525     case soc_feature_cpureg_dump:
   2526     case soc_feature_mcs:
   2527     case soc_feature_uc:
   2528     case soc_feature_cmicm_extended_interrupts:
   2529     case soc_feature_ism_memory:
   2530     case soc_feature_sbusdma:
   2531     case soc_feature_tslam_dma:
   2532     case soc_feature_table_dma:
   2533     case soc_feature_fifo_dma:
   2534     case soc_feature_stat_dma:
   2535     case soc_feature_multi_sbus_cmds:
   2536     case soc_feature_dcb_type23:
   2537     case soc_feature_logical_port_num:
   2538     case soc_feature_unified_port:
   2539     case soc_feature_generic_counters:
   2540     case soc_feature_stat_xgs3:
   2541     case soc_feature_ipfix:
   2542     case soc_feature_ipfix_rate:
   2543     case soc_feature_ipfix_flow_mirror:
   2544     case soc_feature_xy_tcam:
   2545     case soc_feature_mac_learn_limit:
   2546     case soc_feature_axp:
   2547     case soc_feature_l3_ecmp_1k_groups:
   2548     case soc_feature_time_support:
   2549     case soc_feature_hg_dlb_member_id:
   2550     case soc_feature_lag_dlb:
   2551     case soc_feature_advanced_flex_counter:
   2552     case soc_feature_ets:
   2553     case soc_feature_qcn:
   2554     case soc_feature_l2gre:
   2555     case soc_feature_vlan_double_tag_range_compress:
   2556     case soc_feature_vlan_protocol_pkt_ctrl:
   2557     case soc_feature_embedded_higig:
   2558     case soc_feature_remote_encap:
   2559     case soc_feature_rx_reason_overlay:
   2560     case soc_feature_ptp:
   2561     case soc_feature_timesync_support:
   2562     case soc_feature_field_oam_actions:
   2563     case soc_feature_egr_mirror_true:
   2564     case soc_feature_flex_port:
   2565     case soc_feature_ep_redirect:
   2566     case soc_feature_repl_l3_intf_use_next_hop:
   2567     case soc_feature_bfd:
   2568     case soc_feature_port_extension:
   2569     case soc_feature_port_extender_vp_sharing:
   2570     case soc_feature_gmii_clkout:
   2571     case soc_feature_service_queuing:
   2572     case soc_feature_l3_defip_map:
   2573     case soc_feature_vlan_xlate_dtag_range:
   2574     case soc_feature_field_ingress_cosq_override:
   2575     case soc_feature_bhh:
   2576     case soc_feature_post:
   2577     case soc_feature_field_egress_tocpu:
   2578     case soc_feature_ser_fifo:
   2579     case soc_feature_rx_timestamp_upper:
   2580     case soc_feature_mirror_cos:
   2581     case soc_feature_epc_linkflap_recover:
   2582     case soc_feature_l3_shared_defip_table: 
   2583     case soc_feature_l3_nh_attr_table:
   2584     case soc_feature_mpls_5_label_parsing:
   2585     case soc_feature_xmac_reset_on_mode_change:
   2586     case soc_feature_vc_and_swap_table_overlaid:
   2587     case soc_feature_faults_multi_ep_get:
   2588     case soc_feature_egr_nh_class_id_valid:
   2589     case soc_feature_hg_proxy_module_config:
   2590     case soc_feature_l3_tunnel_expanded_mod_mask:
   2591     case soc_feature_mpls_nh_ttl_control:
   2592     case soc_feature_mpls_frr_lookup:
   2593         return TRUE;
   2594     case soc_feature_field_stage_quarter_slice:
   2595         return fp_stage_quarter_slice; 
   2596     case soc_feature_field_egress_metering:
   2597         if (dev_id == BCM56640_DEVICE_ID) {
   2598             if ((rev_id == BCM56640_A0_REV_ID) ||
   2599                 (rev_id == BCM56640_A1_REV_ID)) {
   2600                 return FALSE;
   2601             }
   2602         }
   2603         return TRUE;
   2604     case soc_feature_l3_lpm_scaling_enable:
   2605         if (soc_property_get(unit, spn_LPM_SCALING_ENABLE, 0)) {
   2606             return TRUE;
   2607         }
   2608         return FALSE;
   2609     case soc_feature_l3_lpm_128b_entries_reserved:
   2610         if (soc_property_get(unit, spn_LPM_SCALING_ENABLE, 0)) {
   2611             if(soc_property_get(unit, spn_LPM_IPV6_128B_RESERVED, 1)) {
   2612                 return TRUE;
   2613             }
   2614             return FALSE;
   2615         }
   2616         return TRUE;
   2617     case soc_feature_timesync_timestampingmode:
   2618         /* TR3 B0 and above support 48bit timestamping */
   2619         return (dev_id >= BCM56640_DEVICE_ID &&
   2620                 dev_id <= BCM56649_DEVICE_ID &&
   2621                 rev_id >= BCM56640_B0_REV_ID);
   2622     case soc_feature_vlan_vfi:
   2623     case soc_feature_vlan_egress_membership_l3_only:
   2624         return tr3_only;
   2625     case soc_feature_extended_address_class:
   2626         return ext_addr_class;
   2627     case soc_feature_linkscan_continuous:
   2628         return (dev_id == BCM56648_DEVICE_ID);
   2629     case soc_feature_skip_null_table_lkup:
   2630         return ((dev_id == BCM56044_DEVICE_ID) ||
   2631                 (dev_id == BCM56045_DEVICE_ID) ||
   2632                 (dev_id == BCM56046_DEVICE_ID));
   2633     default:
   2634         return soc_features_bcm56840_b0(unit, feature);
   2635     }
   2636 }
   2637 #endif  /* BCM_56640 */
   2638 
   2639 #ifdef  BCM_56340
   2640 /*
   2641  * BCM56340 A0
   2642  */
   2643 int
   2644 soc_features_bcm56340_a0(int unit, soc_feature_t feature)
   2645 {
   2646     uint16      dev_id;
   2647     uint8       rev_id;
   2648     int         ehost_mode;
   2649 
   2650     soc_cm_get_id(unit, &dev_id, &rev_id);
   2651 
   2652     SOC_FEATURE_DEBUG_PRINT((" 56340_a0"));
   2653     ehost_mode   = !(soc_cm_get_bus_type(unit) & SOC_AXI_DEV_TYPE);
   2654 
   2655     switch (feature) {
   2656     case soc_feature_esm_support:
   2657     case soc_feature_ipfix:
   2658     case soc_feature_ipfix_rate:
   2659     case soc_feature_ipfix_flow_mirror:
   2660     case soc_feature_ecmp_dlb:
   2661     case soc_feature_mcs:
   2662     case soc_feature_static_repl_head_alloc:
   2663         return FALSE;
   2664     case soc_feature_uc:
   2665         return ehost_mode;
   2666     case soc_feature_wlan:
   2667     case soc_feature_urpf:
   2668     case soc_feature_failover:
   2669     case soc_feature_ecmp_failover:
   2670          return !((dev_id == BCM56040_DEVICE_ID) ||
   2671                   (dev_id == BCM56041_DEVICE_ID) || 
   2672                   (dev_id == BCM56042_DEVICE_ID) ||
   2673                   (dev_id == BCM56047_DEVICE_ID) ||
   2674                   (dev_id == BCM56048_DEVICE_ID) ||
   2675                   (dev_id == BCM56049_DEVICE_ID));
   2676     case soc_feature_oam:
   2677     case soc_feature_regex:
   2678     case soc_feature_mim:
   2679     case soc_feature_global_meter:
   2680     case soc_feature_mpls:
   2681     case soc_feature_mpls_software_failover:
   2682     case soc_feature_mpls_failover:
   2683     case soc_feature_mpls_enhanced:
   2684     case soc_feature_mpls_entropy:
   2685     case soc_feature_l3_shared_defip_table:
   2686         return !((dev_id == BCM56040_DEVICE_ID) ||
   2687                  (dev_id == BCM56041_DEVICE_ID) ||
   2688                  (dev_id == BCM56042_DEVICE_ID) ||
   2689                  (dev_id == BCM56047_DEVICE_ID) ||
   2690                  (dev_id == BCM56048_DEVICE_ID) ||
   2691                  (dev_id == BCM56049_DEVICE_ID) ||
   2692                  (dev_id == BCM56346_DEVICE_ID) ||
   2693                  (dev_id == BCM56345_DEVICE_ID));
   2694 
   2695     case soc_feature_iproc:
   2696     case soc_feature_l2_overflow:
   2697     case soc_feature_tr3_sp_vector_mask:
   2698     case soc_feature_repl_head_ptr_replace:
   2699     case soc_feature_ser_hw_bg_read:
   2700     case soc_feature_cmic_reserved_queues:
   2701     case soc_feature_l3_expanded_defip_table:
   2702     case soc_feature_timestamp_counter:  
   2703     case soc_feature_time_support:       
   2704     case soc_feature_ptp:               
   2705     case soc_feature_epc_linkflap_recover:
   2706     case soc_feature_l3_extended_host_entry:
   2707         return TRUE;
   2708     case soc_feature_timesync_support:
   2709          return  !((dev_id == BCM56346_DEVICE_ID) ||
   2710                   (dev_id == BCM56345_DEVICE_ID));
   2711     case soc_feature_l3_256_defip_table:
   2712     case soc_feature_field_stage_half_slice:
   2713     case soc_feature_field_stage_ingress_256_half_slice:
   2714     case soc_feature_field_stage_egress_256_half_slice:
   2715     case soc_feature_field_stage_lookup_512_half_slice:
   2716     case soc_feature_no_vrf_stats:
   2717         return ((dev_id == BCM56040_DEVICE_ID) ||
   2718                 (dev_id == BCM56041_DEVICE_ID) ||
   2719                 (dev_id == BCM56042_DEVICE_ID));
   2720     case soc_feature_advanced_flex_counter:
   2721         return !((dev_id == BCM56047_DEVICE_ID) ||
   2722                  (dev_id == BCM56048_DEVICE_ID) ||
   2723                  (dev_id == BCM56049_DEVICE_ID) ||
   2724                  (dev_id == BCM56345_DEVICE_ID) ||
   2725                  (dev_id == BCM56346_DEVICE_ID));
   2726     case soc_feature_l3:
   2727     case soc_feature_vlan_translation:
   2728     case soc_feature_lpm_tcam:
   2729     case soc_feature_ip_mcast:
   2730     case soc_feature_niv:
   2731         return !((BCM56047_DEVICE_ID == dev_id) ||
   2732                  (BCM56048_DEVICE_ID == dev_id) ||
   2733                  (BCM56049_DEVICE_ID == dev_id));
   2734     case soc_feature_l3_32k_defip_table:
   2735         return ((dev_id == BCM56547_DEVICE_ID) ||
   2736                 (dev_id == BCM56548_DEVICE_ID) ||
   2737                 (dev_id == BCM56548H_DEVICE_ID));
   2738     case soc_feature_timesync_timestampingmode:
   2739     case soc_feature_time_synce_divisor_setting:
   2740         return TRUE;
   2741     case soc_feature_lpm_atomic_write:
   2742         if (soc_property_get(unit, spn_LPM_SCALING_ENABLE, 0) &&
   2743             soc_property_get(unit, spn_LPM_ATOMIC_WRITE, 0)) {
   2744             return TRUE;
   2745         }
   2746         return FALSE;
   2747     case soc_feature_configurable_storm_control_meter_mapping:
   2748         return TRUE;
   2749 
   2750     case soc_feature_uc_image_name_with_no_chip_rev:
   2751     case soc_feature_shg_support_remote_port:
   2752     case soc_feature_ecmp_hash_bit_count_select:
   2753         return TRUE;
   2754     default:
   2755         return soc_features_bcm56640_a0(unit, feature);
   2756 
   2757     }
   2758 
   2759 }
   2760 #endif  /* BCM_56340 */
   2761 
   2762 #ifdef  BCM_56850
   2763 /*
   2764  * BCM56850 A0
   2765  */
   2766 int
   2767 soc_features_bcm56850_a0(int unit, soc_feature_t feature)
   2768 {
   2769     uint16      dev_id;
   2770     uint8       rev_id;
   2771     int         feature_enable;
   2772     SOC_FEATURE_DEBUG_PRINT((" 56850_a0"));
   2773 
   2774     soc_cm_get_id(unit, &dev_id, &rev_id);
   2775 
   2776     feature_enable = (dev_id != BCM56830_DEVICE_ID);
   2777 
   2778     if (dev_id == BCM56830_DEVICE_ID) {
   2779         if ((feature == soc_feature_qcn) ||
   2780             (feature == soc_feature_tunnel_6to4_secure) ||
   2781             (feature == soc_feature_tunnel_any_in_6) ||
   2782             (feature == soc_feature_tunnel_gre) ||
   2783             (feature == soc_feature_hg_dlb) ||
   2784             (feature == soc_feature_xport_convertible) ||
   2785             (feature == soc_feature_ets) ||
   2786             (feature == soc_feature_mpls_enhanced) ||
   2787             (feature == soc_feature_mpls_failover) ||
   2788             (feature == soc_feature_virtual_switching) ||
   2789             (feature == soc_feature_subport_enhanced) ||
   2790             (feature == soc_feature_mpls_software_failover) ||
   2791             (feature == soc_feature_field_action_l2_change)) {
   2792             return FALSE;
   2793         }
   2794 
   2795         if ((feature == soc_feature_int_common_init) ||
   2796             (feature == soc_feature_field_stage_lookup_256_half_slice) ||
   2797             (feature == soc_feature_field_stage_egress_256_half_slice) ||
   2798             (feature == soc_feature_field_stage_ingress_512_half_slice) ||
   2799             (feature == soc_feature_field_slices8)) {
   2800             return TRUE;
   2801         }
   2802     }
   2803 
   2804     if (dev_id == BCM56834_DEVICE_ID) {
   2805         if ((feature == soc_feature_ets) ||
   2806             (feature == soc_feature_subport)||
   2807             (feature == soc_feature_l2gre) ||
   2808             (feature == soc_feature_l2gre_default_tunnel) ||
   2809             (feature == soc_feature_vxlan) ||
   2810             (feature == soc_feature_mpls) ||
   2811             (feature == soc_feature_mpls_enhanced) ||
   2812             (feature == soc_feature_mpls_failover) ||
   2813             (feature == soc_feature_mpls_software_failover) ||
   2814             (feature == soc_feature_tunnel_6to4_secure) ||
   2815             (feature == soc_feature_tunnel_any_in_6) ||
   2816             (feature == soc_feature_tunnel_gre) ||
   2817             (feature == soc_feature_vlan_vp) ||
   2818             (feature == soc_feature_vp_lag) ||
   2819             (feature == soc_feature_mim) ||
   2820             (feature == soc_feature_trill) ||
   2821             (feature == soc_feature_trill_ttl) ||
   2822             (feature == soc_feature_fcoe) ||
   2823             (feature == soc_feature_vxlan) ||
   2824             (feature == soc_feature_urpf) ||
   2825             (feature == soc_feature_pim_bidir) ||
   2826             (feature == soc_feature_lpm_tcam) ||
   2827             (feature == soc_feature_alpm) ||
   2828             (feature == soc_feature_alpm_flex_stat) ||
   2829             (feature == soc_feature_alpm_flex_stat_v6_64) ||
   2830             (feature == soc_feature_ip_mcast) ||
   2831             (feature == soc_feature_ip_mcast_repl) ||
   2832             (feature == soc_feature_l3) ||
   2833             (feature == soc_feature_l3_ingress_interface) ||
   2834             (feature == soc_feature_l3_ip6) ||
   2835             (feature == soc_feature_l3_lookup_cmd) ||
   2836             (feature == soc_feature_l3_sgv) ||
   2837             (feature == soc_feature_l3_iif_profile) ||
   2838             (feature == soc_feature_l3_iif_zero_invalid) ||
   2839             (feature == soc_feature_l3_ecmp_1k_groups) ||
   2840             (feature == soc_feature_l3_extended_host_entry) ||
   2841             (feature == soc_feature_l3_host_ecmp_group) ||
   2842             (feature == soc_feature_repl_l3_intf_use_next_hop) ||
   2843             (feature == soc_feature_virtual_port_routing) ||
   2844             (feature == soc_feature_nat) ||
   2845             (feature == soc_feature_wesp) ||
   2846             (feature == soc_feature_l3_defip_map) ||
   2847             (feature == soc_feature_l3_ip4_options_profile) ||
   2848             (feature == soc_feature_l3_shared_defip_table) ||
   2849             (feature == soc_feature_virtual_switching) ||
   2850             (feature == soc_feature_subport_enhanced) ||
   2851             (feature == soc_feature_redirect_nh_to_ecmp_for_mpls_php)) {
   2852             return FALSE;
   2853         }
   2854         if (feature == soc_feature_int_common_init) {
   2855             return TRUE;
   2856         }
   2857     }
   2858 
   2859     switch (feature) {
   2860     case soc_feature_dcb_type21:
   2861     case soc_feature_xmac:
   2862     case soc_feature_unimac:
   2863     case soc_feature_gport_service_counters:
   2864     case soc_feature_field_vfp_flex_counter:
   2865     case soc_feature_fp_meter_ser_verify:
   2866     case soc_feature_field_meter_pools4:
   2867     case soc_feature_special_egr_ip_tunnel_ser:
   2868     case soc_feature_ctr_xaui_activity:
   2869         return FALSE;
   2870     case soc_feature_nexthop_share_dvp:
   2871     case soc_feature_dcb_type26:
   2872     case soc_feature_cmicm:
   2873     case soc_feature_cmicm_multi_dma_cmc:
   2874     case soc_feature_cmicm_multi_schan_cmc:    
   2875     case soc_feature_mem_parity_eccmask:
   2876     case soc_feature_mcs:
   2877     case soc_feature_uc:
   2878     case soc_feature_sbusdma:
   2879     case soc_feature_new_sbus_format:
   2880     case soc_feature_unified_port:
   2881     case soc_feature_xlmac:
   2882     case soc_feature_vlan_double_tag_range_compress:
   2883     case soc_feature_split_repl_group_table:
   2884     case soc_feature_shared_hash_mem:
   2885     case soc_feature_endpoint_queuing:
   2886     case soc_feature_service_queuing:
   2887     case soc_feature_mac_virtual_port:
   2888     case soc_feature_ing_vp_vlan_membership:
   2889     case soc_feature_egr_vp_vlan_membership:
   2890     case soc_feature_vlan_egress_membership_l3_only:
   2891     case soc_feature_vlan_xlate_dtag_range:
   2892     case soc_feature_min_resume_limit_1:
   2893     case soc_feature_hg_dlb_member_id:
   2894     case soc_feature_hg_dlb_id_equal_hg_tid:
   2895     case soc_feature_min_cell_per_queue:
   2896     case soc_feature_post:
   2897     case soc_feature_time_support:
   2898     case soc_feature_timesync_support:
   2899     case soc_feature_ptp:
   2900     case soc_feature_l3_ip4_options_profile:
   2901     case soc_feature_ser_fifo:
   2902     case soc_feature_l2_overflow:
   2903     case soc_feature_field_meter_pools8:
   2904     case soc_feature_overlaid_address_class:
   2905     case soc_feature_mirror_cos:
   2906     case soc_feature_field_ingress_cosq_override:
   2907     case soc_feature_l2_hw_aging_bug:
   2908     case soc_feature_flex_hashing:
   2909     case soc_feature_udf_hashing:
   2910     case soc_feature_extended_hash:
   2911     case soc_feature_mbist:
   2912     case soc_feature_reserve_vp_lag_resource_index_zero:
   2913     case soc_feature_rx_timestamp_upper:
   2914     case soc_feature_ecmp_hash_bit_count_select:
   2915     case soc_feature_trill_egr_dvp_classid:
   2916     case soc_feature_hg_proxy_module_config:
   2917     case soc_feature_remote_encap:
   2918     case soc_feature_port_group_for_ivxlt:
   2919     case soc_feature_truncate_cpu_copy:
   2920     case soc_feature_cpureg_dump:
   2921     case soc_feature_pgw_mac_pfc_frame:
   2922     case soc_feature_inner_vlan_range_check:
   2923     case soc_feature_ifp_timestamptocpu_optimized:
   2924     case soc_feature_ecn_dscp_map_mode:
   2925     case soc_feature_vlan_xlate_iif_with_dummy_vp:
   2926     case soc_feature_ser_log_info:
   2927     case soc_feature_ser_error_stat:
   2928         return TRUE;
   2929     case soc_feature_bfd:
   2930         return SOC_IS_XGS_FABRIC(unit) ? FALSE : TRUE;
   2931     case soc_feature_advanced_flex_counter:
   2932     case soc_feature_port_extension:
   2933     case soc_feature_port_extender_vp_sharing:
   2934     case soc_feature_hg_resilient_hash:
   2935     case soc_feature_lag_resilient_hash:
   2936     case soc_feature_ecmp_resilient_hash:
   2937     case soc_feature_fcoe:
   2938     case soc_feature_advanced_flex_counter_dual_pipe:
   2939         return feature_enable;
   2940     case soc_feature_cmac:
   2941         return (dev_id == BCM56850_DEVICE_ID || dev_id == BCM56852_DEVICE_ID ||
   2942                 dev_id == BCM56853_DEVICE_ID || dev_id == BCM56750_DEVICE_ID);
   2943     case soc_feature_urpf:
   2944     case soc_feature_pim_bidir:
   2945     case soc_feature_lpm_tcam:
   2946     case soc_feature_alpm:
   2947     case soc_feature_ip_mcast:
   2948     case soc_feature_ip_mcast_repl:
   2949     case soc_feature_l3:
   2950     case soc_feature_l3_shared_defip_table:
   2951     case soc_feature_l3_ingress_interface:
   2952     case soc_feature_l3_ip6:
   2953     case soc_feature_l3_lookup_cmd:
   2954     case soc_feature_l3_sgv:
   2955     case soc_feature_l3_iif_profile:
   2956     case soc_feature_l3_iif_zero_invalid:
   2957     case soc_feature_l3_ecmp_1k_groups:
   2958     case soc_feature_l3_extended_host_entry:
   2959     case soc_feature_l3_host_ecmp_group:
   2960     case soc_feature_repl_l3_intf_use_next_hop:
   2961     case soc_feature_virtual_port_routing:
   2962     case soc_feature_nat:
   2963     case soc_feature_wesp:
   2964     case soc_feature_mpls:
   2965     case soc_feature_mim:
   2966     case soc_feature_trill:
   2967     case soc_feature_l2gre:
   2968     case soc_feature_l2gre_default_tunnel:
   2969     case soc_feature_td2_l2gre:
   2970     case soc_feature_vxlan:
   2971     case soc_feature_subport:
   2972     case soc_feature_l3_defip_map:
   2973     case soc_feature_redirect_nh_to_ecmp_for_mpls_php:
   2974     case soc_feature_td2_style_l3_defip_cnt:
   2975     case soc_feature_vp_lag:
   2976         if (SOC_IS_XGS_FABRIC(unit)) {
   2977             return FALSE;
   2978         } else {
   2979             return feature_enable;
   2980         }
   2981     case soc_feature_alpm_flex_stat:
   2982     case soc_feature_alpm_flex_stat_v6_64:
   2983         if (SOC_IS_XGS_FABRIC(unit)) {
   2984             return FALSE;
   2985         } else {
   2986             return (feature_enable &&
   2987                     soc_property_get(unit, spn_ALPM_FLEX_STAT_SUPPORT, 0));
   2988         }
   2989     case soc_feature_cmic_reserved_queues:
   2990         return (rev_id >= BCM56850_A1_REV_ID) ? TRUE : FALSE;
   2991     case soc_feature_pgw_mac_rsv_mask_remap:
   2992         return rev_id <= BCM56850_A1_REV_ID ? TRUE : FALSE;
   2993     case soc_feature_shared_hash_ins:
   2994         return (rev_id == BCM56850_A0_REV_ID ||
   2995                 rev_id == BCM56850_A1_REV_ID) ? TRUE : FALSE;
   2996     case soc_feature_port_lag_failover:
   2997     case soc_feature_ipmc_use_configured_dest_mac:
   2998         return TRUE;
   2999     case soc_feature_l3_lpm_scaling_enable:
   3000         if (soc_property_get(unit, spn_L3_ALPM_ENABLE, 0)) {
   3001             return FALSE;
   3002         }
   3003         if (soc_property_get(unit, spn_LPM_SCALING_ENABLE, 0)) {
   3004             return TRUE;
   3005         }
   3006         return FALSE;
   3007     case soc_feature_l3_lpm_128b_entries_reserved:
   3008         if (soc_property_get(unit, spn_L3_ALPM_ENABLE, 0)) {
   3009             return FALSE;
   3010         }
   3011         if (soc_property_get(unit, spn_LPM_SCALING_ENABLE, 0)) {
   3012             if(soc_property_get(unit, spn_LPM_IPV6_128B_RESERVED, 1)) {
   3013                 return TRUE;
   3014             }
   3015             return FALSE;
   3016         }
   3017         return TRUE;
   3018     case soc_feature_hw_stats_calc:
   3019         return (dev_id >= BCM56850_DEVICE_ID && 
   3020             dev_id <= BCM56855_DEVICE_ID) ? FALSE : TRUE;
   3021 
   3022     case soc_feature_lpm_atomic_write:
   3023         if (soc_property_get(unit, spn_LPM_SCALING_ENABLE, 0) &&
   3024             soc_property_get(unit, spn_LPM_ATOMIC_WRITE, 0)) {
   3025             return TRUE;
   3026         }
   3027         return FALSE;
   3028 
   3029     case soc_feature_uc_image_name_with_no_chip_rev:
   3030     case soc_feature_alpm_hit_bits_not_support:
   3031         return TRUE;
   3032     default:
   3033         return soc_features_bcm56840_b0(unit, feature);
   3034     }
   3035 }
   3036 #endif  /* BCM_56850 */
   3037 
   3038 #ifdef  BCM_56960
   3039 /*
   3040  * BCM56960 A0
   3041  * --- IMPORTANT : PLEASE READ BEFORE MODIFYING THIS FUNCTION ---
   3042   * BCM56960 Tomahawk Switch can operate in three different latency modes:
   3043   * Low (L2) latency, Balanced (L2/L3) latency and Normal latency modes.
   3044   * In each latency mode, the switch supports varied set of features.
   3045   *
   3046   * If you are adding a 'new' feature to this function that is subject to latency
   3047   * aspects, its availability should NOT be determined directly in this function
   3048   * and is to be figured out by applying the latency bypass filters by passing
   3049   * it to soc_th_latency_bypassed() function defined in latency.c, and its
   3050   * latency aspects need to be resolved in soc_th_latency_bypassed() function.
   3051   *
   3052   * Note: 'new' in above refers to a feature that was introduced in 56960 and
   3053   *       not a legacy feature that existed in parent SKU. Legacy features must
   3054   *       be handled in soc_th_latency_bypassed() function.
   3055   *
   3056   * Refer to latency arch spec, to determine if your feature is subject to latency
   3057   * aspects.
   3058   *
   3059   * If your feature is not subject to latency aspects, it shall be directly dealt
   3060   * (as in enabled/disabled) within this function and need not be handled in
   3061   * soc_th_latency_bypassed() function.
   3062   */
   3063 int
   3064 soc_features_bcm56960_a0(int unit, soc_feature_t feature)
   3065 {
   3066     uint8  rev_id;
   3067     uint16 dev_id;
   3068 
   3069     SOC_FEATURE_DEBUG_PRINT((DK_VERBOSE," 56960_a0"));
   3070     soc_cm_get_id(unit, &dev_id, &rev_id);
   3071 
   3072     if ((dev_id == BCM56168_DEVICE_ID) || (dev_id == BCM56169_DEVICE_ID)) {
   3073         if ((feature == soc_feature_l3_1k_defip_table) ||
   3074             (feature == soc_feature_th_pkt_trace_sw_war)) {
   3075             return TRUE;
   3076         }
   3077 
   3078         if ((feature == soc_feature_fcoe) ||
   3079             (feature == soc_feature_qcn) ||
   3080             (feature == soc_feature_tunnel_6to4_secure) ||
   3081             (feature == soc_feature_tunnel_any_in_6) ||
   3082             (feature == soc_feature_tunnel_gre) ||
   3083             (feature == soc_feature_oam) ||
   3084             (feature == soc_feature_alpm) ||
   3085             (feature == soc_feature_urpf) ||
   3086             (feature == soc_feature_mpls) ||
   3087             (feature == soc_feature_mpls_enhanced) ||
   3088             (feature == soc_feature_mpls_failover) ||
   3089             (feature == soc_feature_mpls_software_failover) ||
   3090             (feature == soc_feature_mim) ||
   3091             (feature == soc_feature_trill) ||
   3092             (feature == soc_feature_trill_ttl) ||
   3093             (feature == soc_feature_l3_lpm_scaling_enable) ||
   3094             (feature == soc_feature_advanced_flex_counter) ||
   3095             (feature == soc_feature_centralized_counter) ||
   3096             (feature == soc_feature_counter_eviction) ||
   3097             (feature == soc_feature_vp_lag)) {
   3098             return FALSE;
   3099         }
   3100     }
   3101 
   3102     switch (feature) {
   3103     /*
   3104      * Following features are NOT subject to latency and are supported
   3105      * under all latency modes
   3106      */
   3107     /* ------- FEATURES NOT SUBJECT TO LATENCY ASPECTS ------- START */
   3108     case soc_feature_uc:
   3109     case soc_feature_uc_mhost:
   3110     case soc_feature_mmu_hw_flush:
   3111         if (SAL_BOOT_SIMULATION) {
   3112             return FALSE;
   3113         }
   3114     case soc_feature_multi_pipe_mapped_ports:
   3115     case soc_feature_tsce:
   3116     case soc_feature_tscf:
   3117     case soc_feature_iproc:
   3118     case soc_feature_dcb_type32:
   3119     case soc_feature_clmac:
   3120     case soc_feature_sbus_format_v4:
   3121     case soc_feature_xy_tcam_28nm:
   3122     case soc_feature_l2_bulk_unified_table:
   3123     case soc_feature_extended_cmic_error:
   3124     case soc_feature_cmicm_extended_interrupts:
   3125     case soc_feature_cmicm_multi_dma_cmc:
   3126     case soc_feature_cmicm_multi_schan_cmc:        
   3127     case soc_feature_sbusdma:
   3128     case soc_feature_mem_parity_eccmask:
   3129     case soc_feature_cmicd_v2:
   3130     case soc_feature_counter_eviction:
   3131     case soc_feature_asymmetric_dual_modid:
   3132     case soc_feature_time_v3:
   3133     case soc_feature_timesync_v3:
   3134     case soc_feature_timesync_timestampingmode:
   3135     case soc_feature_timesync_time_capture:
   3136     case soc_feature_time_synce_divisor_setting:
   3137     case soc_feature_unique_acc_type_access:
   3138     case soc_feature_asf_multimode:
   3139     case soc_feature_led_cmicd_v2:
   3140     case soc_feature_no_higig_plus:
   3141     case soc_feature_llfc_force_xon:
   3142     case soc_feature_continuous_dma:
   3143     case soc_feature_cos_rx_dma:
   3144     case soc_feature_ecn_wred:
   3145     case soc_feature_extended_view_no_trunk_support:
   3146     case soc_feature_cmicm:
   3147     case soc_feature_turbo_boot:
   3148 #ifdef INCLUDE_AVS
   3149     case soc_feature_avs:
   3150 #endif /* INCLUDE_AVS */
   3151     case soc_feature_oob_fc:
   3152     case soc_feature_oob_stats:
   3153     case soc_feature_flexport_based_speed_set:
   3154     case soc_feature_flex_counter_opaque_stat_id:
   3155     case soc_feature_pfc_deadlock:
   3156     case soc_feature_deprecated_api:
   3157     case soc_feature_centralized_counter:
   3158     case soc_feature_rx_pkt_hdr_format_higig2:
   3159     case soc_feature_dump_socmem_uses_dma:
   3160     case soc_feature_ing_l2tunnel_tpid_parser:
   3161     case soc_feature_trill_egr_dvp_classid:
   3162     case soc_feature_hg_proxy_module_config:
   3163     case soc_feature_stat_multi_pipe_support:
   3164     case soc_feature_no_lls:
   3165     case soc_feature_vlan_xlate_iif_with_dummy_vp:
   3166     case soc_feature_td2_style_l3_defip_cnt:
   3167     case soc_feature_disable_rx_on_port:
   3168     case soc_feature_flex_stat_egr_queue_congestion_marked:
   3169     case soc_feature_hash_fcoe_field:
   3170         return TRUE;
   3171 
   3172     /* ---- Features conditionally supported ---- */
   3173     case soc_feature_th_a0_sw_war:
   3174         /* Enable this feature for A0 rev of BCM5696X */
   3175         if ((((BCM56960_DEVICE_ID & 0xFFF0) == (dev_id & 0xFFF0)) ||
   3176             (dev_id == BCM56930_DEVICE_ID)) && (BCM56960_A0_REV_ID == rev_id)) {
   3177             return TRUE;
   3178         } else {
   3179             return FALSE;
   3180         }
   3181     case soc_feature_portmod:
   3182 #if 1
   3183         return FALSE;
   3184 #endif
   3185     case soc_feature_mirror_ing_egr_single:
   3186         /* Enable this feature for B1 rev of BCM56960 */
   3187         if (((dev_id == BCM56960_DEVICE_ID) && (BCM56960_B1_REV_ID == rev_id)) ||
   3188             ((dev_id == BCM56961_DEVICE_ID) && (BCM56961_B1_REV_ID == rev_id)) ||
   3189             ((dev_id == BCM56962_DEVICE_ID) && (BCM56962_B1_REV_ID == rev_id)) ||
   3190             ((dev_id == BCM56963_DEVICE_ID) && (BCM56963_B1_REV_ID == rev_id)) ||
   3191             ((dev_id == BCM56930_DEVICE_ID) && (BCM56930_B1_REV_ID == rev_id)) ||
   3192             ((dev_id == BCM56968_DEVICE_ID) && (BCM56968_B1_REV_ID == rev_id))) {
   3193             return TRUE;
   3194         } else {
   3195             return FALSE;
   3196         }
   3197     /*
   3198      * Feature used to enable SW WAR for supporting
   3199      * TH A0 and B0 random sampling.
   3200      */
   3201     case soc_feature_th_tflow:
   3202     /* To support CTC Manipulate SW WAR for TH Field Module. */
   3203     case soc_feature_th_fp_ctc_manipulate: 
   3204         /* Enable this feature for A0 and B0 rev of BCM5696X */
   3205         if (((BCM56960_DEVICE_ID & 0xFFF0) == (dev_id & 0xFFF0)) &&
   3206             ((BCM56960_B0_REV_ID == rev_id) ||
   3207             (BCM56960_A0_REV_ID == rev_id))) {
   3208             return TRUE;
   3209         } else {
   3210             return FALSE;
   3211         }
   3212     case soc_feature_th_pkt_trace_sw_war:
   3213         if (((BCM56960_DEVICE_ID & 0xFFF0) == (dev_id & 0xFFF0)) ||
   3214             (dev_id == BCM56930_DEVICE_ID)) {
   3215             return TRUE;
   3216         } else {
   3217             return FALSE;
   3218         }
   3219     /* ------- FEATURES NOT SUPPORTED IN TOMAHAWK ------- */
   3220     case soc_feature_dcb_type26:
   3221     case soc_feature_lag_dlb:
   3222     case soc_feature_hg_dlb:
   3223     case soc_feature_hg_dlb_member_id:
   3224     case soc_feature_hg_resilient_hash:
   3225     case soc_feature_lag_resilient_hash:
   3226     case soc_feature_ecmp_resilient_hash:
   3227     case soc_feature_pgw_mac_rsv_mask_remap:
   3228     case soc_feature_mcs: /* Temporarily disable to make rc pass after cmic change */
   3229     case soc_feature_fcoe:
   3230     case soc_feature_e2ecc:
   3231     case soc_feature_shared_hash_ins:
   3232     case soc_feature_qcn:
   3233     case soc_feature_field_ingress_two_slice_types:
   3234     case soc_feature_field_ingress_ipbm:
   3235 /*    case soc_feature_portmod: */
   3236     case soc_feature_ecmp_failover:
   3237     case soc_feature_endpoint_queuing:
   3238     case soc_feature_service_queuing:
   3239     case soc_feature_advanced_flex_counter_dual_pipe:
   3240     case soc_feature_asf:  /* TH supports asf_multimode in lieu of asf */
   3241     case soc_feature_cmic_reserved_queues:
   3242     case soc_feature_ecn_dscp_map_mode:
   3243         return FALSE;
   3244 
   3245     case soc_feature_uc_image_name_with_no_chip_rev:
   3246         return TRUE;
   3247     case soc_feature_snap:
   3248     case soc_feature_CnTag:
   3249         return TRUE;
   3250 
   3251     case soc_feature_fp_class_map_no_support:
   3252 #if 0
   3253     case soc_feature_fp_ltid_match_all_parts:
   3254 #endif
   3255         return TRUE;
   3256     case soc_feature_alpm_hit_bits_not_support:
   3257         return FALSE;
   3258     case soc_feature_decouple_protocol_vlan:
   3259         return (soc_property_get(unit, spn_PROTOCOL_VLAN_COUPLED_MODE, 0));
   3260 	/*
   3261      * IMPORTANT: All features NOT specified above are either subject to latency or their
   3262      * support is determined through the parent SKUs' feature check functions. Both these
   3263      * cases need to be handled in latency.c :: soc_th_latency_bypassed() function
   3264      */
   3265     default:
   3266         /* apply 'switch latency bypass' filter */
   3267         return (!soc_th_latency_bypassed(unit, feature));
   3268     }
   3269 }
   3270 #endif  /* BCM_56960 */
   3271 
   3272 #ifdef BCM_56980
   3273 /*
   3274  * BCM56980_A0
   3275  */
   3276 int
   3277 soc_features_bcm56980_a0(int unit, soc_feature_t feature)
   3278 {
   3279 
   3280     SOC_FEATURE_DEBUG_PRINT((DK_VERBOSE," 56980_a0"));
   3281     switch (feature) {
   3282     case soc_feature_dcb_type38:
   3283     case soc_feature_base_valid:
   3284     case soc_feature_xy_tcam_lpt:
   3285     case soc_feature_cmicx:
   3286     case soc_feature_cpu_tx_proc:
   3287     case soc_feature_arl_hashed:
   3288     case soc_feature_l2_user_table:
   3289     case soc_feature_l2_no_vfi:
   3290     case soc_feature_vlan_pbmp_profile_mgmt:
   3291     case soc_feature_mpls:
   3292     case soc_feature_mpls_ecn:
   3293     case soc_feature_mpls_lsr_ecmp:
   3294     case soc_feature_ecn_wred:
   3295     case soc_feature_int_common_init:
   3296     case soc_feature_fp_no_dvp_support:
   3297     case soc_feature_fp_no_inner_vlan_support:
   3298     case soc_feature_tunnel_term_hash_table:
   3299     case soc_feature_l2mc_table_no_shared_ipmc:
   3300     case soc_feature_ifp_no_narrow_mode_support:
   3301     case soc_feature_cd_mib:
   3302     case soc_feature_advanced_flex_counter:
   3303     case soc_feature_fastlag:
   3304     case soc_feature_no_fp_data_qual_api_support:
   3305     case soc_feature_port_leverage:
   3306     case soc_feature_udf_selector_support:
   3307     case soc_feature_th3_style_simple_mpls:
   3308     case soc_feature_vfp_no_inner_ip_fields_support:
   3309     case soc_feature_post_ifp_single_stage_ecmp:
   3310     case soc_feature_l3_ecmp_4k_groups:
   3311     case soc_feature_l3_ecmp_weighted:
   3312     case soc_feature_distributed_hit_bits:
   3313     case soc_feature_color_prio_map:
   3314     case soc_feature_l3_ecmp_hier_tbl:
   3315     case soc_feature_th3_style_fp:
   3316     case soc_feature_range_check_group_support:
   3317     case soc_feature_ecmp_dlb:
   3318     case soc_feature_ecmp_dlb_optimized:
   3319     case soc_feature_ecmp_dlb_property_force_set:
   3320     case soc_feature_th3_style_dlb:
   3321     case soc_feature_dgm:
   3322     case soc_feature_agm_support_for_dgm:
   3323     case soc_feature_pstats:
   3324     case soc_feature_ingress_dest_port_enable:
   3325     case soc_feature_tcam_scan_engine:
   3326     case soc_feature_inband_network_telemetry:
   3327     case soc_feature_latency_monitor:
   3328     case soc_feature_visibility:
   3329     case soc_feature_timestamp:
   3330     case soc_feature_time_support:
   3331     case soc_feature_flexport_based_speed_set:
   3332     case soc_feature_mpls_5_label_parsing:
   3333     case soc_feature_iddq_new_default:
   3334     case soc_feature_hw_etrap:
   3335     case soc_feature_port_lag_failover:
   3336     case soc_feature_mpls_swap_label_preserve:
   3337     case soc_feature_dlb_flow_monitoring:
   3338     case soc_feature_failover_fixed_nh_offset:
   3339     case soc_feature_xy_tcam_x0y:
   3340     case soc_feature_egr_l3_mtu:
   3341     case soc_feature_sw_mmu_flush_rqe_operation:
   3342     case soc_feature_ecmp_rh_1k_unique_members:
   3343     case soc_feature_field_ingress_two_slice_types:
   3344     case soc_feature_collector:
   3345         return TRUE;
   3346     case soc_feature_uc_int_turnaround:
   3347 #ifdef INCLUDE_INT
   3348         return TRUE;
   3349 #else
   3350         return FALSE;
   3351 #endif /* INCLUDE_INT */
   3352     case soc_feature_avs_openloop:
   3353 #ifdef INCLUDE_AVS
   3354         return TRUE;
   3355 #else
   3356         return FALSE;
   3357 #endif /* INCLUDE_AVS */
   3358     case soc_feature_alpm2:
   3359 #ifdef ALPM_ENABLE
   3360             return TRUE;
   3361 #else
   3362             return FALSE;
   3363 #endif
   3364     case soc_feature_sum:
   3365 #ifdef INCLUDE_SUM
   3366         return TRUE;
   3367 #else
   3368         return FALSE;
   3369 #endif /* INCLUDE_SUM */
   3370     case soc_feature_portmod:
   3371 #if 1
   3372         return TRUE;
   3373 #endif
   3374     case soc_feature_untethered_otp:
   3375 #if 1
   3376         return (SAL_BOOT_SIMULATION ? FALSE : TRUE) ? TRUE : FALSE;
   3377 #endif
   3378     case soc_feature_force_forward:
   3379     case soc_feature_pim_bidir:
   3380     case soc_feature_mim:
   3381     case soc_feature_mim_peer_sharing:
   3382     case soc_feature_hg_trunking:
   3383     case soc_feature_higig_lookup:
   3384     case soc_feature_higig2:
   3385     case soc_feature_hg_trunk_failover:
   3386     case soc_feature_hg_trunk_override:
   3387     case soc_feature_hg_trunk_override_profile:
   3388     case soc_feature_fcoe:
   3389     case soc_feature_vxlan:
   3390     case soc_feature_vrf_aware_vxlan_termination:
   3391     case soc_feature_l2gre:
   3392     case soc_feature_td2_l2gre:
   3393     case soc_feature_l2gre_default_tunnel:
   3394     case soc_feature_niv:
   3395     case soc_feature_trill:
   3396     case soc_feature_trill_ttl:
   3397     case soc_feature_trill_egr_dvp_classid:
   3398     case soc_feature_subport:
   3399     case soc_feature_subport_enhanced:
   3400     case soc_feature_port_extension:
   3401     case soc_feature_rcpu_1:
   3402     case soc_feature_rcpu_priority:
   3403     case soc_feature_rcpu_tc_mapping:
   3404     case soc_feature_cmicm:
   3405     case soc_feature_multi_sbus_cmds:
   3406     case soc_feature_cmicm_multi_dma_cmc:
   3407     case soc_feature_vpd_profile:
   3408     case soc_feature_src_modid_base_index:
   3409     case soc_feature_dcb_type32:
   3410     case soc_feature_vlan_queue_map:
   3411     case soc_feature_vlan_copy_action:
   3412     case soc_feature_vlan_xlate:
   3413     case soc_feature_vlan_xlate_dtag_range:
   3414     case soc_feature_vlan_translation:
   3415     case soc_feature_vlan_translation_range:
   3416     case soc_feature_mac_based_vlan:
   3417     case soc_feature_ip_subnet_based_vlan:
   3418     case soc_feature_system_reserved_vlan:
   3419     case soc_feature_vlan_vfi_membership:
   3420     case soc_feature_vlan_vp:
   3421     case soc_feature_ing_vp_vlan_membership:
   3422     case soc_feature_egr_vp_vlan_membership:
   3423     case soc_feature_vlan_egr_it_inner_replace:
   3424     case soc_feature_vlan_double_tag_range_compress:
   3425     case soc_feature_inner_vlan_range_check:
   3426     case soc_feature_vp_group_egress_vlan_membership:
   3427     case soc_feature_vp_group_ingress_vlan_membership:
   3428     case soc_feature_l2_modfifo:
   3429     case soc_feature_mac_learn_limit:
   3430     case soc_feature_system_mac_learn_limit:
   3431     case soc_feature_class_based_learning:
   3432     case soc_feature_l2_bulk_control:
   3433     case soc_feature_l2_bulk_unified_table:
   3434     case soc_feature_l2_hw_aging_bug:
   3435     case soc_feature_l2_entry_used_as_my_station:
   3436     case soc_feature_linkphy_coe:
   3437     case soc_feature_subtag_coe:
   3438     case soc_feature_hgproxy_subtag_coe:
   3439     case soc_feature_ism_memory:
   3440     case soc_feature_esm_support:
   3441     case soc_feature_riot:
   3442     case soc_feature_nat:
   3443     case soc_feature_vp_lag:
   3444     case soc_feature_virtual_switching:
   3445     case soc_feature_failover:
   3446     case soc_feature_mpls_failover:
   3447     case soc_feature_virtual_port_routing:
   3448     case soc_feature_field_egress_metering:
   3449     case soc_feature_l3_extended_host_entry:
   3450     case soc_feature_storm_control:
   3451     case soc_feature_eee:
   3452     case soc_feature_color_inner_cfi:
   3453     case soc_feature_fp_nw_tcam_prio_order_war:
   3454     case soc_feature_urpf:
   3455     case soc_feature_ecmp_round_robin:
   3456     case soc_feature_field_action_l2_change:
   3457     case soc_feature_decouple_protocol_vlan:
   3458     case soc_feature_xgs5_flexport_legacy_mode:
   3459     case soc_feature_pgw_mac_pfc_frame:
   3460     case soc_feature_pgw_mac_control_frame:
   3461     case soc_feature_shared_trunk_member_table:
   3462     case soc_feature_gmii_clkout:
   3463     case soc_feature_proxy_port_property:
   3464     case soc_feature_auto_multicast:
   3465     case soc_feature_ptp:
   3466     case soc_feature_src_modid_blk_profile:
   3467     case soc_feature_modmap:
   3468     case soc_feature_modport_map_profile:
   3469     case soc_feature_modport_map_dest_is_port_or_trunk:
   3470     case soc_feature_src_modid_blk_opcode_override:
   3471     case soc_feature_src_modid_blk_ucast_override:
   3472     case soc_feature_asymmetric_dual_modid:
   3473     case soc_feature_hg_proxy_module_config:
   3474     case soc_feature_timesync_time_capture:
   3475     case soc_feature_hash_fcoe_field:
   3476     case soc_feature_enable_flow_based_udf_extraction:
   3477         return FALSE;
   3478     default:
   3479         return soc_features_bcm56960_a0(unit, feature);
   3480     }
   3481 }
   3482 
   3483 int
   3484 soc_features_bcm56980_b0(int unit, soc_feature_t feature)
   3485 {
   3486 
   3487     SOC_FEATURE_DEBUG_PRINT((DK_VERBOSE," 56980_a0"));
   3488     switch (feature) {
   3489         default:
   3490             return soc_features_bcm56980_a0(unit, feature);
   3491     }
   3492 }
   3493 #endif
   3494 
   3495 #ifdef  BCM_56870
   3496 /*
   3497  * BCM56870 A0
   3498  */
   3499 int
   3500 soc_features_bcm56870_a0(int unit, soc_feature_t feature)
   3501 {
   3502     int flow_init_mode = soc_property_get(unit, "flow_init_mode", 0);
   3503     uint8  rev_id;
   3504     uint16 dev_id;
   3505 
   3506     SOC_FEATURE_DEBUG_PRINT((DK_VERBOSE," 56870_a0"));
   3507 
   3508     soc_cm_get_id(unit, &dev_id, &rev_id);
   3509 
   3510 
   3511     switch (feature) {
   3512     case soc_feature_dcb_type36:
   3513     case soc_feature_egr_vlan_control_is_memory:
   3514     case soc_feature_cxl_mib:
   3515     case soc_feature_cancun:
   3516     case soc_feature_iddq_new_default:
   3517     case soc_feature_no_egr_ipmc_cfg:
   3518     case soc_feature_generic_dest:
   3519     case soc_feature_base_valid:
   3520     case soc_feature_vlan_vfi_untag_profile:
   3521     case soc_feature_vlan_vfi_membership:
   3522     case soc_feature_vlan_filter:
   3523     case soc_feature_td2p_multi_modid:
   3524     case soc_feature_xy_tcam_lpt:
   3525     case soc_feature_l2mc_table_no_shared_ipmc:
   3526     case soc_feature_multi_next_hops_on_port:
   3527     case soc_feature_deprecated_api:
   3528     case soc_feature_egr_lport_tab_profile:
   3529     case soc_feature_split_repl_head_table:
   3530     case soc_feature_multiple_split_horizon_group:
   3531     case soc_feature_egr_l3_next_hop_next_ptr:
   3532     case soc_feature_td3_style_proxy:
   3533     case soc_feature_src_tgid_valid:
   3534     case soc_feature_egr_intf_vlan_vfi_deoverlay:
   3535     case soc_feature_td3_style_riot:
   3536     case soc_feature_hg_proxy_second_pass:
   3537     case soc_feature_mem_access_data_type:
   3538     case soc_feature_egr_all_profile:
   3539     case soc_feature_portmod:
   3540     case soc_feature_vp_sharing:
   3541     case soc_feature_l2_entry_used_as_my_station:
   3542     case soc_feature_vfi_from_vlan_tables:
   3543     case soc_feature_vfi_profile:
   3544     case soc_feature_egr_vlan_xlate_key_on_dvp:
   3545     case soc_feature_egr_modport_to_nhi:
   3546     case soc_feature_subport:
   3547     case soc_feature_subport_enhanced:
   3548     case soc_feature_separate_ing_lport_rtag7_profile:
   3549     case soc_feature_ecmp_dlb:
   3550     case soc_feature_ecmp_dlb_optimized:
   3551     case soc_feature_td3_dlb:
   3552     case soc_feature_hgt_lag_dlb_optimized:
   3553     case soc_feature_riot:
   3554     case soc_feature_counter_eviction:
   3555     case soc_feature_mysta_profile:
   3556     case soc_feature_pstats:
   3557     case soc_feature_mpls_segment_routing:
   3558     case soc_feature_td3_style_mpls:
   3559     case soc_feature_my_station_2:
   3560     case soc_feature_l3_ecmp_4k_groups:
   3561     case soc_feature_failover:
   3562     case soc_feature_ingress_failover:
   3563     case soc_feature_td2p_mpls_linear_protection:
   3564     case soc_feature_egress_failover:
   3565     case soc_feature_ecmp_failover:
   3566     case soc_feature_failover_mpls_check:
   3567     case soc_feature_mpls_enhanced:
   3568     case soc_feature_timestamp:
   3569     case soc_feature_robust_hash_byte_boundary_alignment:
   3570     case soc_feature_clmac_16byte_interface_mode:
   3571     case soc_feature_egr_vxlate_supports_dgpp:
   3572     case soc_feature_l3_egr_intf_zero_invalid:
   3573     case soc_feature_rtag7_port_profile:
   3574     case soc_feature_egr_ip_tnl_mpls_double_wide:
   3575     case soc_feature_reserve_shg_network_port:
   3576     case soc_feature_td3_style_dlb_rh:
   3577     case soc_feature_ecmp_resilient_hash:
   3578     case soc_feature_dvp_2_config_required:
   3579     case soc_feature_ingress_dest_port_enable:
   3580     case soc_feature_td3_style_fp:
   3581     case soc_feature_l2_modfifo_def:
   3582     case soc_feature_ifp_action_profiling:
   3583     case soc_feature_mpls_5_label_parsing:
   3584     case soc_feature_fp_qual_recovery_with_group_create:
   3585     case soc_feature_tcb:
   3586     case soc_feature_ecmp_dlb_property_force_set:
   3587     case soc_feature_mpls_ecn:
   3588     case soc_feature_intcn_to_exp_nosupport:
   3589     case soc_feature_flexport_no_legacy:
   3590     case soc_feature_flexible_higig_hdr:
   3591     case soc_feature_vlan_multicast_queue_map:
   3592     case soc_feature_udf_td3x_support:
   3593     case soc_feature_hg_resilient_hash:
   3594     case soc_feature_lag_resilient_hash:
   3595     case soc_feature_l3_ip4_options_profile:
   3596     case soc_feature_stat_egr_multi_pipe_support:
   3597     case soc_feature_pm_refclk_master:
   3598     case soc_feature_td2p_dvp_mirroring:
   3599     case soc_feature_sflow_ing_mem:
   3600     case soc_feature_ipmc_l2_use_vlan_vpn:
   3601     case soc_feature_mor_dma:
   3602     case soc_feature_pm_fc_merge_mode:
   3603     case soc_feature_no_fp_data_qual_api_support:
   3604     case soc_feature_time_support:
   3605     case soc_feature_time_v3:
   3606     case soc_feature_timesync_support:
   3607     case soc_feature_timesync_block_iproc:
   3608     case soc_feature_ipmc_defip:
   3609     case soc_feature_pvlan_on_vfi:
   3610     case soc_feature_port_leverage:
   3611     case soc_feature_vxlan_decoupled_mode:
   3612     case soc_feature_asymmetric_dual_modid:        
   3613     case soc_feature_vxlan_evpn:
   3614     case soc_feature_flex_stat_egr_queue_congestion_marked:
   3615     case soc_feature_erspan3_support:
   3616     case soc_feature_td3_lpm_ipmc_war:
   3617     case soc_feature_preserve_otag_before_itag:    
   3618     case soc_feature_ing_vlan_xlate_second_lookup:
   3619     case soc_feature_egr_vlan_xlate_second_lookup:
   3620     case soc_feature_hash_flex_bin:
   3621         return TRUE;
   3622     case soc_feature_alpm2:
   3623 #ifdef ALPM_ENABLE
   3624         if (soc_property_get(unit, "l3_alpm2", 1)) {
   3625             return TRUE;
   3626         } else 
   3627 #endif
   3628         {
   3629             return FALSE;
   3630         }
   3631     case soc_feature_multi_level_ecmp:
   3632     case soc_feature_dgm:
   3633     case soc_feature_key_type_valid_on_vp_vlan_membership:
   3634         return TRUE;
   3635     case soc_feature_vrf_aware_vxlan_termination:
   3636     case soc_feature_alpm_flex_stat_v6_64:
   3637     case soc_feature_flex_hashing:
   3638     case soc_feature_udf_hashing:
   3639         return FALSE;
   3640     case soc_feature_lag_dlb:
   3641         return soc_property_get(unit, spn_DLB_HGT_LAG_SELECTION, 0);
   3642     case soc_feature_hg_dlb:
   3643         return !soc_property_get(unit, spn_DLB_HGT_LAG_SELECTION, 0);
   3644     case soc_feature_dcb_type32:
   3645     case soc_feature_egr_vlan_check:
   3646     case soc_feature_cmicm:
   3647     case soc_feature_cmicd_v2:
   3648     case soc_feature_rcpu_1:
   3649     case soc_feature_rcpu_priority:
   3650     case soc_feature_rcpu_tc_mapping:
   3651     case soc_feature_udf_support:
   3652     case soc_feature_trill:
   3653     
   3654     case soc_feature_split_repl_group_table:
   3655     case soc_feature_multi_sbus_cmds:
   3656     case soc_feature_static_pfm:
   3657     /* ING_WESP_PROTO_CONTROL is removed from TD3 */
   3658     case soc_feature_wesp:
   3659     case soc_feature_egr_ipmc_cfg2_is_memory:
   3660     case soc_feature_cmicm_multi_dma_cmc:
   3661     case soc_feature_fp_nw_tcam_prio_order_war:
   3662     case soc_feature_ecmp_resilient_hash_optimized:
   3663     case soc_feature_xgs5_flexport_legacy_mode:
   3664     case soc_feature_pgw_mac_pfc_frame:
   3665     case soc_feature_pgw_mac_control_frame:
   3666     case soc_feature_tcam_scan_engine:
   3667     case soc_feature_niv:
   3668     case soc_feature_hgproxy_subtag_coe:
   3669     case soc_feature_snap:
   3670     case soc_feature_CnTag:
   3671     case soc_feature_l2_tunnel_transit_payload_tpid_parser:
   3672     case soc_feature_mirror_rspan_no_mtp0:
   3673         return FALSE;
   3674     case soc_feature_hierarchical_ecmp:
   3675         return FALSE;
   3676     /*
   3677      * In TD3, vfp_key_control_2 register is not avaliable.
   3678      */
   3679     case soc_feature_vfp_no_inner_ip_fields_support:
   3680         return TRUE;
   3681     case soc_feature_cmicx:
   3682         return TRUE;
   3683     case soc_feature_bfd:
   3684         return TRUE;
   3685     /* Enabling Swap to Self feature*/
   3686     case soc_feature_mpls_swap_label_preserve:
   3687     case soc_feature_mpls_special_label:
   3688         return TRUE;
   3689     /* Enabling FCoE feature */
   3690     case soc_feature_fcoe:
   3691         return TRUE;
   3692     case soc_feature_td3_reduced_pm:
   3693         return ((dev_id == BCM56873_DEVICE_ID)? TRUE:FALSE);
   3694     /* Flex flow feature */
   3695     case soc_feature_flex_flow:
   3696         return ((flow_init_mode == 0) ? FALSE : TRUE);
   3697     case soc_feature_vxlan:
   3698     case soc_feature_l2gre:
   3699         if (flow_init_mode) {
   3700             return FALSE;
   3701         }
   3702     case soc_feature_iproc_14_tx_arbiter_priority:
   3703         return TRUE;
   3704 #ifdef INCLUDE_AVS
   3705     case soc_feature_avs_openloop:
   3706         return TRUE;
   3707 #endif /* INCLUDE_AVS */
   3708     case soc_feature_decouple_protocol_vlan:
   3709         return FALSE;
   3710     case soc_feature_ifp_no_inports_support:
   3711         if (soc_property_get(unit, spn_IFP_INPORTS_SUPPORT_ENABLE, 0) == 1) {
   3712             return FALSE;
   3713         }
   3714         return TRUE;
   3715     case soc_feature_xy_tcam_x0y:
   3716         return TRUE;
   3717 #ifdef INCLUDE_IFA
   3718     case soc_feature_ifa:
   3719         return TRUE;
   3720 #endif /* INCLUDE_IFA*/
   3721 #ifdef BCM_COLLECTOR_SUPPORT
   3722     case soc_feature_collector:
   3723         return TRUE;
   3724 #endif /* BCM_COLLECTOR_SUPPORT*/
   3725 #ifdef INCLUDE_TELEMETRY
   3726     case soc_feature_telemetry:
   3727         return TRUE;
   3728 #endif /* INCLUDE_TELEMETRY*/
   3729     case soc_feature_extended_view_no_trunk_support:
   3730         return FALSE;
   3731     case soc_feature_timesync_time_capture:
   3732     case soc_feature_hash_fcoe_field:
   3733     case soc_feature_twamp_owamp_support:
   3734         return FALSE;
   3735     case soc_feature_large_scale_nat:
   3736     case soc_feature_vfi_switched_l2_change_fields:
   3737     /*
   3738      * large_scale_nat and l2_change_fields are enabled
   3739      * in l3_init.c depending on loaded cancun version
   3740      */
   3741         return FALSE;
   3742 
   3743     default:
   3744         return soc_features_bcm56960_a0(unit, feature);
   3745     }
   3746 }
   3747 
   3748 #endif
   3749 
   3750 
   3751 #ifdef  BCM_56370
   3752 /*
   3753  * BCM56370 A0
   3754  */
   3755 int
   3756 soc_features_bcm56370_a0(int unit, soc_feature_t feature)
   3757 {
   3758     SOC_FEATURE_DEBUG_PRINT((DK_VERBOSE," 56370_a0"));
   3759     switch (feature) {
   3760 
   3761     case soc_feature_fcoe:
   3762     case soc_feature_hgproxy_subtag_coe:
   3763     case soc_feature_nat:
   3764     case soc_feature_mpls_ecn:
   3765     case soc_feature_clmac_16byte_interface_mode:
   3766     case soc_feature_oob_fc:
   3767     case soc_feature_oob_stats:
   3768     case soc_feature_uc:
   3769     case soc_feature_ptp:
   3770     case soc_feature_ifa:
   3771     case soc_feature_telemetry:
   3772     case soc_feature_bfd:
   3773         return FALSE;
   3774 
   3775     case soc_feature_trill: 
   3776     case soc_feature_split_repl_group_table: /* Should be TRUE? */
   3777     case soc_feature_fp_nw_tcam_prio_order_war: /* Should be disabled? */
   3778     case soc_feature_asf_multimode:
   3779     case soc_feature_iproc_14_tx_arbiter_priority:
   3780     case soc_feature_uc_flowtracker_learn:
   3781     case soc_feature_uc_flowtracker_export:
   3782     case soc_feature_l3_ecmp_2k_groups:
   3783     case soc_feature_l3_ecmp_4k_groups:
   3784         return FALSE;
   3785     case soc_feature_alpm_addr_xlate:
   3786     case soc_feature_field_flowtracker_support:
   3787     case soc_feature_l3_mtu_size_default:
   3788     case soc_feature_skip_port_initial_copy_count:
   3789     case soc_feature_flex_flowtracker_ver_1:
   3790     case soc_feature_bscan_ft_fifodma_support:
   3791     case soc_feature_field_single_pipe_support:
   3792     case soc_feature_field_slices18:
   3793     case soc_feature_hx5_style_ifp_no_narrow_mode_support:
   3794     case soc_feature_broadscan_dos_ctrl:
   3795     case soc_feature_helix5_ecn:
   3796     case soc_feature_vlan_wirelss_traffic_select:
   3797     case soc_feature_bscan_fae_port_flow_exclude:
   3798     case soc_feature_hx5_ft_32bit_param_update:
   3799     case soc_feature_range_check_group_support:
   3800     case soc_feature_flex_stat_ing_tcp_flags_support:
   3801     case soc_feature_flex_stat_int_cn_support:
   3802     case soc_feature_flowtracker_ver_1_metering:
   3803     case soc_feature_flowtracker_ver_1_bidirectional:
   3804     case soc_feature_flowtracker_ver_1_dos_attack_check:
   3805     case soc_feature_flowtracker_ver_1_32K_ft_table:
   3806     case soc_feature_flowtracker_ver_1_collector_copy:
   3807     case soc_feature_flowtracker_ver_1_ipfix_remote_collector:
   3808     case soc_feature_use_smbus2_for_i2c:
   3809     case soc_feature_iproc_ddr:
   3810     case soc_feature_time_support:
   3811     case soc_feature_portmod:
   3812     case soc_feature_time_v3:
   3813     case soc_feature_time_v3_no_bs:
   3814     case soc_feature_timesync_support:
   3815     case soc_feature_chip_config_read_war:
   3816     case soc_feature_hx5_oam_support:
   3817     case soc_feature_twamp_owamp_support:
   3818          return TRUE;
   3819 
   3820     case soc_feature_flowtracker_ver_1_alu32_0_1_banks:
   3821     case soc_feature_flowtracker_ver_1_16K_ft_table:
   3822     case soc_feature_flowtracker_ver_1_8K_ft_table:
   3823         return FALSE;
   3824 
   3825     case soc_feature_untethered_otp:
   3826 #if 1
   3827         return (!SAL_BOOT_SIMULATION);
   3828 #endif
   3829 
   3830 #ifdef BCM_COLLECTOR_SUPPORT
   3831     case soc_feature_collector:
   3832         return TRUE;
   3833 #endif /* BCM_COLLECTOR_SUPPORT*/
   3834 
   3835 #ifdef SOC_L3_ECMP_PROTECTED_ACCESS_SUPPORT
   3836     case soc_feature_l3_ecmp_protected_access:
   3837 #if 1
   3838         return (!SAL_BOOT_SIMULATION || SAL_BOOT_QUICKTURN);
   3839 #endif
   3840 #endif /* SOC_L3_ECMP_PROTECTED_ACCESS_SUPPORT */
   3841 
   3842     default:
   3843         return soc_features_bcm56870_a0(unit, feature);
   3844     }
   3845 }
   3846 #endif  /* BCM_56370 */
   3847 
   3848 
   3849 #ifdef  BCM_56770
   3850 /*
   3851  * BCM56770 A0
   3852  */
   3853 int
   3854 soc_features_bcm56770_a0(int unit, soc_feature_t feature)
   3855 {
   3856     SOC_FEATURE_DEBUG_PRINT((DK_VERBOSE," 56770_a0"));
   3857 
   3858     switch (feature) {
   3859     case soc_feature_field_single_pipe_support:
   3860     case soc_feature_flex_stat_ing_tcp_flags_support:
   3861     case soc_feature_time_support:
   3862     case soc_feature_timesync_time_capture:
   3863     case soc_feature_iproc:
   3864     case soc_feature_portmod:
   3865     case soc_feature_time_v3:
   3866         return TRUE;
   3867     case soc_feature_ptp:
   3868     case soc_feature_twamp_owamp_support:
   3869         return FALSE;
   3870     case soc_feature_untethered_otp:
   3871 #if 1
   3872         return (!SAL_BOOT_SIMULATION);
   3873 #endif
   3874     default:
   3875         return soc_features_bcm56870_a0(unit, feature);
   3876     }
   3877 
   3878 }
   3879 #endif  /* BCM_56770 */
   3880 
   3881 
   3882 #ifdef  BCM_56965
   3883 /*
   3884  * BCM56965 A0
   3885  */
   3886 int
   3887 soc_features_bcm56965_a0(int unit, soc_feature_t feature)
   3888 {
   3889     uint16 dev_id;
   3890     uint8  rev_id;
   3891 
   3892     SOC_FEATURE_DEBUG_PRINT((DK_VERBOSE," 56965_a0"));
   3893     switch (feature) {
   3894     case soc_feature_cxl_mib:
   3895     case soc_feature_iddq_new_default:
   3896         return TRUE;
   3897     case soc_feature_extended_view_no_trunk_support:
   3898         return FALSE;
   3899 #ifdef SW_AUTONEG_SUPPORT        
   3900     case soc_feature_sw_autoneg:
   3901        soc_cm_get_id(unit, &dev_id, &rev_id);
   3902         if((dev_id == BCM56965_DEVICE_ID) && (rev_id == BCM56965_A0_REV_ID)) {
   3903         return TRUE;
   3904         } else { 
   3905             return FALSE;
   3906         }                
   3907 #endif           
   3908     default:
   3909         return soc_features_bcm56960_a0(unit, feature);
   3910     }
   3911 }
   3912 #endif  /* BCM_56965 */
   3913 
   3914 #ifdef  BCM_56970
   3915 /*
   3916  * BCM56970 A0
   3917  */
   3918 int
   3919 soc_features_bcm56970_a0(int unit, soc_feature_t feature)
   3920 {
   3921     uint8  rev_id;
   3922     uint16 dev_id;
   3923     SOC_FEATURE_DEBUG_PRINT((" 56970_a0"));
   3924     soc_cm_get_id(unit, &dev_id, &rev_id);
   3925 
   3926     if (soc_th2_latency_bypassed(unit, feature))
   3927         return FALSE;
   3928 
   3929     if (dev_id == BCM56971_DEVICE_ID) {
   3930         if ((feature == soc_feature_oob_fc) ||
   3931             (feature == soc_feature_oob_stats)) {
   3932             return FALSE;
   3933         }
   3934     }
   3935 
   3936     switch (feature) {
   3937     case soc_feature_eeprom_iproc:
   3938     case soc_feature_xy_tcam_lpt:
   3939     case soc_feature_ingress_dest_port_enable:
   3940     case soc_feature_egr_mmu_cell_credit_is_memory:
   3941     case soc_feature_ing_trill_adjacency_is_memory:
   3942     case soc_feature_mmu_sed:
   3943     case soc_feature_mpls_swap_label_preserve:
   3944     case soc_feature_cmicd_v3:
   3945     case soc_feature_cmicd_v4:
   3946     case soc_feature_led_cmicd_v4:
   3947     case soc_feature_clmac_16byte_interface_mode:
   3948     case soc_feature_mpls_segment_routing:
   3949     case soc_feature_mpls_ecn:
   3950     case soc_feature_ecmp_failover:
   3951     case soc_feature_ecmp_failover_config_check:
   3952     case soc_feature_ecmp_dlb:
   3953     case soc_feature_ecmp_dlb_optimized:
   3954     case soc_feature_dgm:
   3955     case soc_feature_hgt_lag_dlb_optimized:
   3956     case soc_feature_ecmp_dlb_property_force_set:
   3957     case soc_feature_mem_parity_eccmask:
   3958     case soc_feature_pm_refclk_master:
   3959     case soc_feature_mpls_5_label_parsing:
   3960     case soc_feature_mpls_frr_lookup:
   3961     case soc_feature_cxl_mib:
   3962     case soc_feature_field_multi_pipe_enhanced:
   3963     case soc_feature_timestamp:
   3964     case soc_feature_tcb:
   3965     case soc_feature_port_leverage:
   3966 #ifdef INCLUDE_PSTATS
   3967     case soc_feature_pstats:
   3968 #endif /* INCLUDE_PSTATS */
   3969     case soc_feature_egr_ip_tnl_mpls_double_wide:
   3970     case soc_feature_l3_tunnel_expanded_mod_mask:
   3971     case soc_feature_flexport_no_legacy:
   3972     case soc_feature_iddq_new_default:
   3973     case soc_feature_uc:
   3974     case soc_feature_uc_mhost:
   3975 #ifdef INCLUDE_AVS
   3976     case soc_feature_avs_openloop:
   3977 #endif /* INCLUDE_AVS */
   3978     case soc_feature_ptp:
   3979     case soc_feature_ukernel_debug:
   3980     case soc_feature_timesync_time_capture:
   3981         return TRUE;
   3982     case soc_feature_half_of_l3_defip_ipv4_capacity:
   3983         if (((BCM56970_DEVICE_ID & 0xFFF0) == (dev_id & 0xFFF0)) && 
   3984             (BCM56970_A0_REV_ID == rev_id)) {
   3985             return TRUE;
   3986         } else {
   3987             return FALSE;
   3988         }
   3989     case soc_feature_agm_support_for_dgm:
   3990         if (((BCM56970_DEVICE_ID & 0xFFF0) == (dev_id & 0xFFF0)) &&
   3991             (BCM56970_A0_REV_ID == rev_id)) { /* BCM5697x_A0 */
   3992             return FALSE;
   3993         } else {
   3994             return TRUE;
   3995         }
   3996     case soc_feature_xy_tcam_x0y:
   3997         return TRUE;
   3998     case soc_feature_portmod:
   3999 #if 1
   4000         return TRUE;
   4001 #endif
   4002     case soc_feature_l3_ecmp_2k_groups:
   4003         return FALSE;
   4004     case soc_feature_lag_dlb:
   4005         return soc_property_get(unit, spn_DLB_HGT_LAG_SELECTION, 0);
   4006     case soc_feature_hg_dlb:
   4007         return !soc_property_get(unit, spn_DLB_HGT_LAG_SELECTION, 0);
   4008     case soc_feature_mor_dma:
   4009         return TRUE;
   4010     case soc_feature_xgs5_flexport_legacy_mode:
   4011     case soc_feature_pgw_mac_pfc_frame:
   4012     case soc_feature_pgw_mac_control_frame:
   4013     case soc_feature_fp_nw_tcam_prio_order_war:
   4014     case soc_feature_extended_view_no_trunk_support:
   4015     case soc_feature_mirror_rspan_no_mtp0:
   4016     case soc_feature_hash_fcoe_field:
   4017         return FALSE;
   4018     case soc_feature_untethered_otp:
   4019 #if 1
   4020         return (!SAL_BOOT_SIMULATION);
   4021 #endif
   4022 #ifdef SW_AUTONEG_SUPPORT
   4023     case soc_feature_sw_autoneg:
   4024        soc_cm_get_id(unit, &dev_id, &rev_id);
   4025         if(((BCM56970_DEVICE_ID & 0xFFF0) == (dev_id & 0xFFF0)) && 
   4026             (BCM56970_A0_REV_ID == rev_id)) {
   4027             return TRUE;
   4028         } else {
   4029             return FALSE;
   4030         }
   4031 #endif
   4032     case soc_feature_tcam_scan_engine:
   4033         if(((BCM56970_DEVICE_ID & 0xFFF0) == (dev_id & 0xFFF0)) && 
   4034             (BCM56970_A0_REV_ID == rev_id)) {
   4035             return FALSE;
   4036         } else {
   4037 #if 1
   4038             return FALSE;
   4039 #endif
   4040         }
   4041     case soc_feature_decouple_protocol_vlan:
   4042         return (soc_property_get(unit, spn_PROTOCOL_VLAN_COUPLED_MODE, 0));
   4043 #ifdef BCM_COLLECTOR_SUPPORT
   4044     case soc_feature_collector:
   4045         return TRUE;
   4046 #endif /* BCM_COLLECTOR_SUPPORT*/
   4047 #ifdef INCLUDE_TELEMETRY
   4048     case soc_feature_telemetry:
   4049         return TRUE;
   4050 #endif /* INCLUDE_TELEMETRY*/
   4051     default:
   4052         return soc_features_bcm56960_a0(unit, feature);
   4053     }
   4054 }
   4055 #endif  /* BCM_56970 */
   4056 
   4057 #ifdef  BCM_56440
   4058 /*
   4059  * BCM56440 A0
   4060  */
   4061 int
   4062 soc_features_bcm56440_a0(int unit, soc_feature_t feature)
   4063 {
   4064     int     ddr3_disable, l3;
   4065     uint16  dev_id;
   4066     uint8   rev_id;
   4067     int     dynamic_update;
   4068     uint8   vlan_xlate;
   4069     int     mpls, mim;
   4070     int     spri_vector;
   4071     int     shaper_update;
   4072     int     toggled_read;
   4073     int     ipmc_mode;
   4074     int     ipmc_reduced_mode = 0;
   4075     int     mmu_reduced_int_buffer;
   4076     
   4077     SOC_FEATURE_DEBUG_PRINT((" 56440_a0"));
   4078     soc_cm_get_id(unit, &dev_id, &rev_id);
   4079 
   4080     ddr3_disable = ((dev_id == BCM56445_DEVICE_ID) ||
   4081                     (dev_id == BCM56446_DEVICE_ID) ||
   4082                     (dev_id == BCM56447_DEVICE_ID) ||
   4083                     (dev_id == BCM56448_DEVICE_ID) ||
   4084                     (dev_id == BCM56241_DEVICE_ID) ||
   4085                     (dev_id == BCM55441_DEVICE_ID));
   4086 
   4087     dynamic_update = soc_property_get(unit, spn_MMU_DYNAMIC_SCHED_UPDATE, 0);
   4088     dynamic_update = ((dev_id == BCM56445_DEVICE_ID) &&
   4089                       (rev_id == BCM56445_A0_REV_ID) &&
   4090                       dynamic_update);
   4091 
   4092     vlan_xlate     = (rev_id == BCM56440_B0_REV_ID);
   4093     mpls = ((dev_id != BCM55441_DEVICE_ID) &&
   4094             (dev_id != BCM55440_DEVICE_ID));
   4095     mim = (dev_id != BCM55441_DEVICE_ID);
   4096     l3 = (dev_id == BCM55440_DEVICE_ID);
   4097     spri_vector = soc_property_get(unit, spn_MMU_STRICT_PRI_VECTOR_MODE, 1);
   4098     spri_vector = ((rev_id != BCM56440_A0_REV_ID) && spri_vector);
   4099     shaper_update = (rev_id == BCM56440_A0_REV_ID);
   4100     toggled_read = (rev_id == BCM56440_A0_REV_ID);
   4101 
   4102     if (rev_id == BCM56440_B0_REV_ID) {
   4103         ipmc_mode = soc_property_get(unit, spn_IPMC_INDEPENDENT_MODE, 0);
   4104         if (ipmc_mode == 1 &&
   4105             soc_property_get(unit, spn_IPMC_REDUCED_TABLE_SIZE, 0)) {
   4106             ipmc_reduced_mode = 1;
   4107         }
   4108     }
   4109 
   4110     mmu_reduced_int_buffer = ((dev_id == BCM56240_DEVICE_ID) ||
   4111                               (dev_id == BCM56241_DEVICE_ID) ||
   4112                               (dev_id == BCM56242_DEVICE_ID) ||
   4113                               (dev_id == BCM56243_DEVICE_ID) ||
   4114                               (dev_id == BCM56245_DEVICE_ID) ||
   4115                               (dev_id == BCM56246_DEVICE_ID));
   4116 
   4117     switch (feature) {
   4118     case soc_feature_dcb_type21:
   4119     case soc_feature_logical_port_num:
   4120     case soc_feature_wlan:
   4121     case soc_feature_gport_service_counters:
   4122     case soc_feature_priority_flow_control:
   4123 #ifndef _KATANA_DEBUG
   4124     /* Temporarily Disabled until implementation complete */
   4125     case soc_feature_field_vfp_flex_counter:
   4126     case soc_feature_ctr_xaui_activity:
   4127 #endif
   4128     case soc_feature_asf:
   4129     case soc_feature_qcn:
   4130     case soc_feature_egr_mirror_true:
   4131     case soc_feature_trill:
   4132     case soc_feature_two_ingress_pipes:
   4133     case soc_feature_niv:
   4134     case soc_feature_mim_peer_sharing:
   4135     case soc_feature_ip_source_bind:
   4136     case soc_feature_vp_group_ingress_vlan_membership:
   4137     case soc_feature_vp_group_egress_vlan_membership:
   4138     case soc_feature_ets:
   4139     case soc_feature_field_ingress_two_slice_types:
   4140     case soc_feature_mmu_config_property:
   4141     case soc_feature_rtag1_6_max_portcnt_less_than_rtag7:
   4142     case soc_feature_hg_dlb:
   4143     case soc_feature_bucket_update_freeze:
   4144     case soc_feature_hg_trunk_16_members:
   4145     case soc_feature_field_meter_pools4:
   4146     case soc_feature_fp_meter_ser_verify:
   4147     case soc_feature_special_egr_ip_tunnel_ser:
   4148     case soc_feature_ifp_redirect_to_dvp:
   4149     case soc_feature_l2_cache_use_my_station:
   4150     case soc_feature_flex_port:
   4151         return FALSE;
   4152     case soc_feature_dcb_type24:
   4153     case soc_feature_multi_sbus_cmds:
   4154     case soc_feature_cmicm:
   4155     case soc_feature_cpureg_dump:
   4156     case soc_feature_mcs:
   4157     case soc_feature_uc:
   4158     case soc_feature_bfd:
   4159     case soc_feature_oam:
   4160     case soc_feature_ptp:
   4161     case soc_feature_mpls_entropy:
   4162     case soc_feature_bhh:
   4163     case soc_feature_mem_cache:
   4164     case soc_feature_xy_tcam:
   4165     case soc_feature_l3_defip_map:
   4166     case soc_feature_egr_ipmc_mem_field_l3_payload_valid:
   4167     case soc_feature_color_inner_cfi:
   4168     case soc_feature_faults_multi_ep_get:
   4169     case soc_feature_ecmp_1k_paths_4_subgroups:
   4170         return TRUE;
   4171     case soc_feature_field_slices12:
   4172     case soc_feature_field_meter_pools12:
   4173         if ((dev_id == BCM55441_DEVICE_ID) ||
   4174             (dev_id == BCM56240_DEVICE_ID) ||
   4175             (dev_id == BCM56241_DEVICE_ID) ||
   4176             (dev_id == BCM56242_DEVICE_ID) ||
   4177             (dev_id == BCM56243_DEVICE_ID) ||
   4178             (dev_id == BCM56245_DEVICE_ID) ||
   4179             (dev_id == BCM56246_DEVICE_ID)) {
   4180             return FALSE;
   4181         } else {
   4182             return TRUE;
   4183         }
   4184     case soc_feature_field_virtual_slice_group:
   4185     case soc_feature_field_intraslice_double_wide:
   4186     case soc_feature_field_egress_flexible_v6_key:
   4187     case soc_feature_field_multi_stage:
   4188     case soc_feature_field_ingress_global_meter_pools:
   4189     case soc_feature_field_egress_global_counters:
   4190     case soc_feature_field_ing_egr_separate_packet_byte_counters:
   4191     case soc_feature_field_ingress_ipbm:
   4192     case soc_feature_field_egress_metering:
   4193     case soc_feature_global_meter:
   4194     case soc_feature_mac_learn_limit:
   4195     case soc_feature_advanced_flex_counter:
   4196     case soc_feature_time_support:
   4197     case soc_feature_vlan_double_tag_range_compress:
   4198     case soc_feature_field_packet_based_metering:
   4199     case soc_feature_vlan_protocol_pkt_ctrl:
   4200     case soc_feature_extended_queueing:
   4201     case soc_feature_rx_timestamp_upper:
   4202     case soc_feature_field_oam_actions:
   4203     case soc_feature_gmii_clkout:
   4204     case soc_feature_vlan_xlate_dtag_range:
   4205     case soc_feature_post:
   4206     case soc_feature_timesync_support:
   4207     case soc_feature_egr_l3_mtu:
   4208     case soc_feature_mpls_5_label_parsing:
   4209     case soc_feature_hg_proxy_module_config:
   4210     case soc_feature_mpls_nh_ttl_control:
   4211         return TRUE;
   4212     case soc_feature_ces:
   4213         /* For now, set this feature to False. During SOC reset, this may be
   4214          * set to TRUE as per 1588 / CES  Enable Bond Option..
   4215         */
   4216         return FALSE;
   4217     case soc_feature_field_slices8:
   4218     case soc_feature_field_meter_pools8:
   4219         if ((dev_id == BCM55441_DEVICE_ID) ||
   4220             (dev_id == BCM56240_DEVICE_ID) ||
   4221             (dev_id == BCM56241_DEVICE_ID) ||
   4222             (dev_id == BCM56242_DEVICE_ID) ||
   4223             (dev_id == BCM56243_DEVICE_ID) ||
   4224             (dev_id == BCM56245_DEVICE_ID) ||
   4225             (dev_id == BCM56246_DEVICE_ID)) {
   4226             return TRUE;
   4227         } else {
   4228             return FALSE;
   4229         }
   4230     case soc_feature_ddr3:
   4231         return !ddr3_disable;
   4232     case soc_feature_dynamic_sched_update:
   4233         return dynamic_update;
   4234     case soc_feature_vlan_xlate:
   4235         return vlan_xlate;
   4236     case soc_feature_mpls:
   4237         return mpls;
   4238     case soc_feature_mim:
   4239         return mim;
   4240     case soc_feature_vector_based_spri:
   4241         return spri_vector;
   4242     case soc_feature_cosq_gport_stat_ability:
   4243         /* variants that support <= 1k queues */
   4244         return ddr3_disable;
   4245     case soc_feature_dynamic_shaper_update:
   4246         return shaper_update;
   4247     case soc_feature_counter_toggled_read:
   4248         return toggled_read;
   4249     case soc_feature_ipmc_reduced_table_size:
   4250         return ipmc_reduced_mode;
   4251     case soc_feature_mmu_reduced_internal_buffer:
   4252         return mmu_reduced_int_buffer;
   4253     case soc_feature_urpf:
   4254     case soc_feature_lpm_tcam:
   4255     case soc_feature_ip_mcast:
   4256     case soc_feature_ip_mcast_repl:
   4257     case soc_feature_l3:
   4258     case soc_feature_l3_ingress_interface:
   4259     case soc_feature_l3_ip6:
   4260     case soc_feature_l3_lookup_cmd:
   4261     case soc_feature_l3_sgv:
   4262     case soc_feature_subport:
   4263         return !l3;
   4264     case soc_feature_l3_max_2_defip_tcams:
   4265         if ((dev_id == BCM56240_DEVICE_ID) ||
   4266             (dev_id == BCM56241_DEVICE_ID) ||
   4267             (dev_id == BCM56242_DEVICE_ID) ||
   4268             (dev_id == BCM56243_DEVICE_ID) ||
   4269             (dev_id == BCM56245_DEVICE_ID) ||
   4270             (dev_id == BCM56246_DEVICE_ID)) {
   4271             return TRUE;
   4272         } else {
   4273             return FALSE;
   4274         }
   4275     default:
   4276         return soc_features_bcm56840_a0(unit, feature);
   4277     }
   4278 }
   4279 
   4280 /*
   4281  * BCM56440 B0
   4282  */
   4283 int
   4284 soc_features_bcm56440_b0(int unit, soc_feature_t feature)
   4285 {
   4286     switch (feature) {
   4287     case soc_feature_oam_lookup_bypass_cpu_tx_packets:
   4288          return TRUE;
   4289     default:
   4290         return soc_features_bcm56440_a0(unit, feature);
   4291     }
   4292 
   4293     return TRUE;
   4294 }
   4295 #endif  /* BCM_56440 */
   4296 
   4297 #ifdef BCM_PETRA_SUPPORT
   4298 int
   4299 soc_features_bcm88650_a0(int unit, soc_feature_t feature)
   4300 {
   4301     COMPILER_REFERENCE(unit);
   4302     SOC_FEATURE_DEBUG_PRINT((" 88650_a0"));
   4303 
   4304     switch (feature) {
   4305     case soc_feature_sbusdma:
   4306     case soc_feature_cmicm:
   4307     case soc_feature_mcs:
   4308     case soc_feature_uc:
   4309     case soc_feature_new_sbus_format:
   4310     case soc_feature_tslam_dma:
   4311     case soc_feature_table_dma:
   4312     case soc_feature_logical_port_num:
   4313     case soc_feature_short_cmic_error:
   4314     case soc_feature_controlled_counters:
   4315     case soc_feature_dcb_type28:
   4316     case soc_feature_cos_rx_dma:
   4317     case soc_feature_schan_hw_timeout:
   4318     case soc_feature_ddr3:
   4319     case soc_feature_tunnel_gre:
   4320     case soc_feature_generic_counters:
   4321     case soc_feature_led_proc:
   4322     case soc_feature_led_data_offset_a0:
   4323     case soc_feature_time_support:
   4324     case soc_feature_ptp:
   4325     case soc_feature_linkscan_lock_per_unit:
   4326 #ifdef INCLUDE_RCPU
   4327     case soc_feature_rcpu_1:
   4328 #endif /* INCLUDE_RCPU */
   4329         return TRUE;
   4330     default:
   4331         return FALSE;
   4332     }
   4333 
   4334    return TRUE;
   4335 }
   4336 
   4337 
   4338 int
   4339 soc_features_bcm88650_b0(int unit, soc_feature_t feature)
   4340 {
   4341     COMPILER_REFERENCE(unit);
   4342     SOC_FEATURE_DEBUG_PRINT((" 88650_b0"));
   4343 
   4344     switch (feature) {
   4345     case soc_feature_sbusdma:
   4346     case soc_feature_cmicm:
   4347     case soc_feature_mcs:
   4348     case soc_feature_uc:
   4349     case soc_feature_new_sbus_format:
   4350     case soc_feature_tslam_dma:
   4351     case soc_feature_table_dma:
   4352     case soc_feature_logical_port_num:
   4353     case soc_feature_short_cmic_error:
   4354     case soc_feature_controlled_counters:
   4355     case soc_feature_dcb_type28:
   4356     case soc_feature_cos_rx_dma:
   4357     case soc_feature_schan_hw_timeout:
   4358     case soc_feature_ddr3:
   4359     case soc_feature_tunnel_gre:
   4360     case soc_feature_generic_counters:
   4361     case soc_feature_led_proc:
   4362     case soc_feature_led_data_offset_a0:
   4363     case soc_feature_time_support:
   4364     case soc_feature_ptp:
   4365     case soc_feature_timesync_support:
   4366     case soc_feature_linkscan_lock_per_unit:
   4367 #ifdef INCLUDE_RCPU
   4368     case soc_feature_rcpu_1:
   4369 #endif /* INCLUDE_RCPU */
   4370        return TRUE;
   4371     default:
   4372         return FALSE;
   4373     }
   4374 
   4375    return TRUE;
   4376 }
   4377 
   4378 
   4379 #endif /* BCM_PETRA_SUPPORT */
   4380 
   4381 #ifdef BCM_PETRA_SUPPORT
   4382 int
   4383 soc_features_bcm88660_a0(int unit, soc_feature_t feature)
   4384 {
   4385     COMPILER_REFERENCE(unit);
   4386     SOC_FEATURE_DEBUG_PRINT((" 88660_a0"));
   4387 
   4388     switch (feature) {
   4389     case soc_feature_sbusdma:
   4390     case soc_feature_cmicm:
   4391     case soc_feature_mcs:
   4392     case soc_feature_uc:
   4393     case soc_feature_new_sbus_format:
   4394     case soc_feature_tslam_dma:
   4395     case soc_feature_table_dma:
   4396     case soc_feature_logical_port_num:
   4397     case soc_feature_short_cmic_error:
   4398     case soc_feature_controlled_counters:
   4399     case soc_feature_dcb_type28:
   4400     case soc_feature_cos_rx_dma:
   4401     case soc_feature_schan_hw_timeout:
   4402     case soc_feature_ddr3:
   4403     case soc_feature_tunnel_gre:
   4404     case soc_feature_generic_counters:
   4405     case soc_feature_led_proc:
   4406     case soc_feature_led_data_offset_a0:
   4407     case soc_feature_time_support:
   4408     case soc_feature_ptp:
   4409     case soc_feature_timesync_support:
   4410     case soc_feature_linkscan_lock_per_unit:
   4411 #ifdef INCLUDE_RCPU
   4412     case soc_feature_rcpu_1:
   4413 #endif /* INCLUDE_RCPU */
   4414         return TRUE;
   4415     default:
   4416         return FALSE;
   4417     }
   4418 
   4419    return TRUE;
   4420 }
   4421 
   4422 #endif /* BCM_PETRA_SUPPORT */
   4423 
   4424 #ifdef BCM_88202_A0
   4425 int
   4426 soc_features_bcm88202_a0(int unit, soc_feature_t feature)
   4427 {
   4428     COMPILER_REFERENCE(unit);
   4429     SOC_FEATURE_DEBUG_PRINT((" 88202_a0"));
   4430 
   4431     switch (feature) {
   4432     case soc_feature_sbusdma:
   4433     case soc_feature_cmicm:
   4434     case soc_feature_mcs:
   4435     case soc_feature_uc:
   4436     case soc_feature_new_sbus_format:
   4437     case soc_feature_tslam_dma:
   4438     case soc_feature_table_dma:
   4439     case soc_feature_logical_port_num:
   4440     case soc_feature_short_cmic_error:
   4441     case soc_feature_controlled_counters:
   4442     case soc_feature_dcb_type28:
   4443     case soc_feature_cos_rx_dma:
   4444     case soc_feature_schan_hw_timeout:
   4445     case soc_feature_tunnel_gre:
   4446     case soc_feature_generic_counters:
   4447     case soc_feature_time_support:
   4448     case soc_feature_linkscan_lock_per_unit:
   4449 #ifdef INCLUDE_RCPU
   4450     case soc_feature_rcpu_1:
   4451 #endif /* INCLUDE_RCPU */
   4452         return TRUE;
   4453     default:
   4454         return FALSE;
   4455     }
   4456 
   4457    return TRUE;
   4458 }
   4459 #endif /* BCM_88202_A0 */
   4460 
   4461 #ifdef BCM_2801PM_A0
   4462 int
   4463 soc_features_bcm2801pm_a0(int unit, soc_feature_t feature)
   4464 {
   4465     COMPILER_REFERENCE(unit);
   4466     SOC_FEATURE_DEBUG_PRINT((" 88650_a0"));
   4467 
   4468     switch (feature) {
   4469     case soc_feature_sbusdma:
   4470     case soc_feature_cmicm:
   4471     case soc_feature_new_sbus_format:
   4472     case soc_feature_tslam_dma:
   4473     case soc_feature_table_dma:
   4474     case soc_feature_logical_port_num:
   4475     case soc_feature_short_cmic_error:
   4476     case soc_feature_schan_hw_timeout:
   4477     case soc_feature_time_support:
   4478     case soc_feature_linkscan_lock_per_unit:
   4479         return TRUE;
   4480     default:
   4481         return FALSE;
   4482     }
   4483 
   4484    return TRUE;
   4485 }
   4486 #endif /* BCM_2801PM_A0 */
   4487 
   4488 #ifdef BCM_88675
   4489 int
   4490 soc_features_bcm88675_a0(int unit, soc_feature_t feature)
   4491 {
   4492     COMPILER_REFERENCE(unit);
   4493     SOC_FEATURE_DEBUG_PRINT((" 88675_a0"));
   4494 
   4495     switch (feature) {
   4496     /* General */
   4497     case soc_feature_iproc:
   4498     case soc_feature_cmicm:
   4499     case soc_feature_uc:
   4500     case soc_feature_uc_mhost:
   4501     /* DMA */
   4502     case soc_feature_sbusdma:
   4503     case soc_feature_dcb_type28:
   4504     case soc_feature_cos_rx_dma:
   4505     case soc_feature_tslam_dma:
   4506     case soc_feature_table_dma:
   4507     case soc_feature_cmicm_multi_dma_cmc:
   4508     /* SCHAN */
   4509     case soc_feature_new_sbus_format:
   4510     case soc_feature_sbus_format_v4:
   4511     case soc_feature_schan_hw_timeout:
   4512     /* Interrupts */
   4513     case soc_feature_short_cmic_error:
   4514     case soc_feature_cmicm_extended_interrupts:
   4515     case soc_feature_portmod:
   4516     /* Fabric */
   4517     case soc_feature_fabric_cell_pcp:
   4518     /* Ports */
   4519     case soc_feature_logical_port_num:
   4520     case soc_feature_controlled_counters:
   4521     case soc_feature_generic_counters:
   4522     case soc_feature_linkscan_lock_per_unit:
   4523 #ifdef INCLUDE_RCPU
   4524     case soc_feature_rcpu_1:
   4525 #endif /* INCLUDE_RCPU */
   4526     case soc_feature_time_support:
   4527     case soc_feature_ptp:
   4528     case soc_feature_timesync_support:
   4529     case soc_feature_timesync_timestampingmode:
   4530     /* Leds */
   4531     case soc_feature_led_proc:
   4532     case soc_feature_led_data_offset_a0:
   4533     case soc_feature_led_cmicd_v2:
   4534     /*SAT*/
   4535     case soc_feature_sat:
   4536         return TRUE;
   4537     default:
   4538         return FALSE;
   4539     }
   4540 
   4541     return TRUE;
   4542 }
   4543 #endif
   4544 
   4545 #ifdef BCM_88675_B0
   4546 int
   4547 soc_features_bcm88675_b0(int unit, soc_feature_t feature)
   4548 {
   4549     return soc_features_bcm88675_a0(unit,feature);
   4550 }
   4551 #endif
   4552 
   4553 #ifdef BCM_88375_A0
   4554 int
   4555 soc_features_bcm88375_a0(int unit, soc_feature_t feature)
   4556 {
   4557     COMPILER_REFERENCE(unit);
   4558     SOC_FEATURE_DEBUG_PRINT((" 88375_a0"));
   4559 
   4560     switch (feature) {
   4561     /* General */
   4562     case soc_feature_iproc:
   4563     case soc_feature_cmicm:
   4564     case soc_feature_uc:
   4565     case soc_feature_uc_mhost:
   4566     /* DMA */
   4567     case soc_feature_sbusdma:
   4568     case soc_feature_dcb_type28:
   4569     case soc_feature_cos_rx_dma:
   4570     case soc_feature_tslam_dma:
   4571     case soc_feature_table_dma:
   4572     case soc_feature_cmicm_multi_dma_cmc:        
   4573     /* SCHAN */    
   4574     case soc_feature_new_sbus_format:
   4575     case soc_feature_sbus_format_v4:
   4576     case soc_feature_schan_hw_timeout:
   4577     /* Interrupts */
   4578     case soc_feature_short_cmic_error:
   4579     case soc_feature_cmicm_extended_interrupts:
   4580     case soc_feature_portmod:
   4581     /* Fabric */
   4582     case soc_feature_fabric_cell_pcp:
   4583     /* Ports */
   4584     case soc_feature_logical_port_num:
   4585     case soc_feature_generic_counters:
   4586     case soc_feature_controlled_counters:
   4587 #ifdef INCLUDE_RCPU
   4588     case soc_feature_rcpu_1:
   4589 #endif /* INCLUDE_RCPU */
   4590     /*case soc_feature_mcs:*/
   4591     case soc_feature_time_support:
   4592     case soc_feature_ptp:
   4593     case soc_feature_timesync_support:
   4594     case soc_feature_timesync_timestampingmode:
   4595     /* Leds */
   4596     case soc_feature_led_proc:
   4597     case soc_feature_led_data_offset_a0:
   4598     case soc_feature_led_cmicd_v2:
   4599 	/*SAT*/
   4600     case soc_feature_sat:
   4601         return TRUE;
   4602     default:
   4603         return FALSE;
   4604     }
   4605 
   4606     return TRUE;
   4607 }
   4608 #endif /* BCM_88375_A0 */
   4609 
   4610 
   4611 #ifdef BCM_88375_B0
   4612 int
   4613 soc_features_bcm88375_b0(int unit, soc_feature_t feature)
   4614 {
   4615     COMPILER_REFERENCE(unit);
   4616     SOC_FEATURE_DEBUG_PRINT((" 88375_a0"));
   4617 
   4618     switch (feature) {
   4619     /* General */
   4620     case soc_feature_iproc:
   4621     case soc_feature_cmicm:
   4622     case soc_feature_uc:
   4623     case soc_feature_uc_mhost:
   4624     /* DMA */
   4625     case soc_feature_sbusdma:
   4626     case soc_feature_dcb_type28:
   4627     case soc_feature_cos_rx_dma:
   4628     case soc_feature_tslam_dma:
   4629     case soc_feature_table_dma:
   4630     case soc_feature_cmicm_multi_dma_cmc:
   4631     /* SCHAN */ 
   4632     case soc_feature_new_sbus_format:
   4633     case soc_feature_sbus_format_v4:
   4634     case soc_feature_schan_hw_timeout:
   4635     /* Interrupts */
   4636     case soc_feature_short_cmic_error:
   4637     case soc_feature_cmicm_extended_interrupts:
   4638     case soc_feature_portmod:
   4639     /* Fabric */
   4640     case soc_feature_fabric_cell_pcp:
   4641     /* Ports */
   4642     case soc_feature_logical_port_num:
   4643     case soc_feature_generic_counters:
   4644     case soc_feature_controlled_counters:
   4645     case soc_feature_linkscan_lock_per_unit:
   4646 #ifdef INCLUDE_RCPU
   4647     case soc_feature_rcpu_1:
   4648 #endif /* INCLUDE_RCPU */
   4649     
   4650     /*case soc_feature_mcs:*/
   4651     case soc_feature_time_support:
   4652     case soc_feature_ptp:
   4653     case soc_feature_timesync_support:
   4654     case soc_feature_timesync_timestampingmode:
   4655     /* Leds */
   4656     case soc_feature_led_proc:
   4657     case soc_feature_led_data_offset_a0:
   4658     case soc_feature_led_cmicd_v2:
   4659         return TRUE;
   4660     default:
   4661         return FALSE;
   4662     }
   4663 
   4664     return TRUE;
   4665 }
   4666 #endif /* BCM_88375_B0 */
   4667 
   4668 
   4669 #ifdef BCM_88680
   4670 int
   4671 soc_features_bcm88680_a0(int unit, soc_feature_t feature)
   4672 {
   4673     COMPILER_REFERENCE(unit);
   4674     SOC_FEATURE_DEBUG_PRINT((" 88680_a0"));
   4675 
   4676     switch (feature) {
   4677     /* General */
   4678     case soc_feature_iproc:
   4679     case soc_feature_cmicm:
   4680     case soc_feature_uc:
   4681     case soc_feature_uc_mhost:
   4682     /* DMA */
   4683     case soc_feature_sbusdma:
   4684     case soc_feature_dcb_type28:
   4685     case soc_feature_cos_rx_dma:
   4686     case soc_feature_tslam_dma:
   4687     case soc_feature_table_dma:
   4688     case soc_feature_cmicm_multi_dma_cmc:    
   4689     /* SCHAN */
   4690     case soc_feature_new_sbus_format:
   4691     case soc_feature_sbus_format_v4:
   4692     case soc_feature_schan_hw_timeout:
   4693     /* Interrupts */
   4694     case soc_feature_short_cmic_error:
   4695     case soc_feature_cmicm_extended_interrupts:
   4696     case soc_feature_portmod:
   4697     /* Fabric */
   4698     case soc_feature_fabric_cell_pcp:
   4699     /* Ports */
   4700     case soc_feature_logical_port_num:
   4701     case soc_feature_controlled_counters:
   4702     case soc_feature_generic_counters:
   4703     case soc_feature_uc_image_name_with_no_chip_rev:
   4704 #ifdef INCLUDE_RCPU
   4705     case soc_feature_rcpu_1:
   4706 #endif /* INCLUDE_RCPU */
   4707     
   4708     case soc_feature_time_support:
   4709     case soc_feature_ptp:
   4710     case soc_feature_timesync_support:
   4711     case soc_feature_timesync_timestampingmode:
   4712     /* Leds */
   4713     case soc_feature_led_proc:
   4714     case soc_feature_led_data_offset_a0:
   4715     case soc_feature_led_cmicd_v2:
   4716     /*SAT*/
   4717     case soc_feature_sat:
   4718         return TRUE;
   4719     default:
   4720         return FALSE;
   4721     }
   4722 
   4723     return TRUE;
   4724 }
   4725 #endif
   4726 
   4727 #ifdef BCM_88690_A0
   4728 int
   4729 soc_features_bcm88690_a0(int unit, soc_feature_t feature)
   4730 {
   4731     COMPILER_REFERENCE(unit);
   4732     SOC_FEATURE_DEBUG_PRINT((" 88690_a0"));
   4733 
   4734     switch (feature) {
   4735     /* General */
   4736     case soc_feature_prop_suffix_group_with_revision:
   4737     case soc_feature_iproc:
   4738     case soc_feature_cmicx:
   4739     case soc_feature_no_ep_to_cpu:
   4740     case soc_feature_extended_cmic_error:
   4741     case soc_feature_cmicm_multi_schan_cmc:        
   4742     case soc_feature_cmicd_v2:
   4743     case soc_feature_cmic_reserved_queues:
   4744     case soc_feature_uc:
   4745     case soc_feature_uc_mhost:
   4746     case soc_feature_easy_reload_wb_compat:
   4747     case soc_feature_mem_direct_acc_last_used_first:
   4748     /* DMA */
   4749     case soc_feature_sbusdma:
   4750     case soc_feature_dcb_type39:
   4751     case soc_feature_cos_rx_dma:
   4752     case soc_feature_tslam_dma:
   4753     case soc_feature_table_dma:
   4754     /* SCHAN */
   4755     case soc_feature_new_sbus_format:
   4756     case soc_feature_sbus_format_v4:
   4757     case soc_feature_blkid_extended_format:
   4758     case soc_feature_schan_hw_timeout:
   4759     case soc_feature_schan_err_check:
   4760     /* Interrupts */
   4761 #ifdef PERHAPS_LESS_INFORMATIOM_LATER
   4762     case soc_feature_short_cmic_error:
   4763 #endif
   4764     case soc_feature_cmicm_extended_interrupts:
   4765     case soc_feature_portmod:
   4766     /* Fabric */
   4767     case soc_feature_fabric_cell_pcp:
   4768     /* Ports */
   4769     case soc_feature_logical_port_num:
   4770     case soc_feature_controlled_counters:
   4771     case soc_feature_ignore_controlled_counter_priority:
   4772     case soc_feature_generic_counters:
   4773     case soc_feature_linkscan_lock_per_unit:
   4774     case soc_feature_linkscan_remove_port_info:
   4775 #ifdef INCLUDE_RCPU
   4776     case soc_feature_rcpu_1:
   4777 #endif /* INCLUDE_RCPU */
   4778     case soc_feature_time_support:
   4779     case soc_feature_ptp:
   4780     case soc_feature_timesync_support:
   4781     /* Leds */
   4782     case soc_feature_led_proc:
   4783     case soc_feature_led_data_offset_a0:
   4784     case soc_feature_led_cmicd_v2:
   4785     /*SAT*/
   4786     case soc_feature_sat:
   4787         return TRUE;
   4788     default:
   4789         return FALSE;
   4790     }
   4791 
   4792     return TRUE;
   4793 }
   4794 #endif
   4795 
   4796 #ifdef BCM_88690_B0
   4797 int
   4798 soc_features_bcm88690_b0(int unit, soc_feature_t feature)
   4799 {
   4800     COMPILER_REFERENCE(unit);
   4801     SOC_FEATURE_DEBUG_PRINT((" 88690_b0"));
   4802 
   4803     switch (feature) {
   4804     /* General */
   4805     case soc_feature_prop_suffix_group_with_revision:
   4806     case soc_feature_iproc:
   4807     case soc_feature_cmicx:
   4808     case soc_feature_no_ep_to_cpu:
   4809     case soc_feature_extended_cmic_error:
   4810     case soc_feature_cmicm_multi_schan_cmc:        
   4811     case soc_feature_cmicd_v2:
   4812     case soc_feature_cmic_reserved_queues:
   4813     case soc_feature_uc:
   4814     case soc_feature_uc_mhost:
   4815     case soc_feature_easy_reload_wb_compat:
   4816     case soc_feature_mem_direct_acc_last_used_first:
   4817     /* DMA */
   4818     case soc_feature_sbusdma:
   4819     case soc_feature_dcb_type39:
   4820     case soc_feature_cos_rx_dma:
   4821     case soc_feature_tslam_dma:
   4822     case soc_feature_table_dma:
   4823     /* SCHAN */
   4824     case soc_feature_new_sbus_format:
   4825     case soc_feature_sbus_format_v4:
   4826     case soc_feature_blkid_extended_format:
   4827     case soc_feature_schan_hw_timeout:
   4828     case soc_feature_schan_err_check:
   4829     /* Interrupts */
   4830 #ifdef PERHAPS_LESS_INFORMATIOM_LATER
   4831     case soc_feature_short_cmic_error:
   4832 #endif
   4833     case soc_feature_cmicm_extended_interrupts:
   4834     case soc_feature_portmod:
   4835     /* Fabric */
   4836     case soc_feature_fabric_cell_pcp:
   4837     /* Ports */
   4838     case soc_feature_logical_port_num:
   4839     case soc_feature_controlled_counters:
   4840     case soc_feature_ignore_controlled_counter_priority:
   4841     case soc_feature_generic_counters:
   4842     case soc_feature_linkscan_lock_per_unit:
   4843 #ifdef INCLUDE_RCPU
   4844     case soc_feature_rcpu_1:
   4845 #endif /* INCLUDE_RCPU */
   4846     case soc_feature_time_support:
   4847     case soc_feature_ptp:
   4848     case soc_feature_timesync_support:
   4849     /* Leds */
   4850     case soc_feature_led_proc:
   4851     case soc_feature_led_data_offset_a0:
   4852     case soc_feature_led_cmicd_v2:
   4853     /*SAT*/
   4854     case soc_feature_sat:
   4855         return TRUE;
   4856     default:
   4857         return FALSE;
   4858     }
   4859 
   4860     return TRUE;
   4861 }
   4862 #endif
   4863 
   4864 #ifdef BCM_88800_A0
   4865 int
   4866 soc_features_bcm88800_a0(int unit, soc_feature_t feature)
   4867 {
   4868     COMPILER_REFERENCE(unit);
   4869     SOC_FEATURE_DEBUG_PRINT((" 88800_a0"));
   4870 
   4871     switch (feature) {
   4872     /* General */
   4873     case soc_feature_prop_suffix_group_with_revision:
   4874     case soc_feature_iproc:
   4875     case soc_feature_cmicx:
   4876     case soc_feature_no_ep_to_cpu:
   4877     case soc_feature_extended_cmic_error:
   4878     case soc_feature_cmicm_multi_schan_cmc:        
   4879     case soc_feature_cmicd_v2:
   4880     case soc_feature_cmic_reserved_queues:
   4881     case soc_feature_uc:
   4882     case soc_feature_uc_mhost:
   4883     case soc_feature_easy_reload_wb_compat:
   4884     case soc_feature_mem_direct_acc_last_used_first:
   4885     /* DMA */
   4886     case soc_feature_sbusdma:
   4887     case soc_feature_dcb_type39:
   4888     case soc_feature_cos_rx_dma:
   4889     case soc_feature_tslam_dma:
   4890     case soc_feature_table_dma:
   4891     /* SCHAN */
   4892     case soc_feature_new_sbus_format:
   4893     case soc_feature_sbus_format_v4:
   4894     case soc_feature_blkid_extended_format:
   4895     case soc_feature_schan_hw_timeout:
   4896     case soc_feature_schan_err_check:
   4897     /* Interrupts */
   4898 #ifdef PERHAPS_LESS_INFORMATIOM_LATER
   4899     case soc_feature_short_cmic_error:
   4900 #endif
   4901     case soc_feature_cmicm_extended_interrupts:
   4902     case soc_feature_portmod:
   4903     /* Fabric */
   4904     case soc_feature_fabric_cell_pcp:
   4905     /* Ports */
   4906     case soc_feature_logical_port_num:
   4907     case soc_feature_controlled_counters:
   4908     case soc_feature_generic_counters:
   4909     case soc_feature_linkscan_lock_per_unit:
   4910     case soc_feature_linkscan_remove_port_info:
   4911 #ifdef INCLUDE_RCPU
   4912     case soc_feature_rcpu_1:
   4913 #endif /* INCLUDE_RCPU */
   4914     case soc_feature_time_support:
   4915     case soc_feature_ptp:
   4916     case soc_feature_timesync_support:
   4917     /* Leds */
   4918     case soc_feature_led_proc:
   4919     case soc_feature_led_data_offset_a0:
   4920     case soc_feature_led_cmicd_v2:
   4921     /*SAT*/
   4922     case soc_feature_sat:
   4923         return TRUE;
   4924     default:
   4925         return FALSE;
   4926     }
   4927 
   4928     return TRUE;
   4929 }
   4930 #endif
   4931 
   4932 #ifdef BCM_88470_A0
   4933 int
   4934 soc_features_bcm88470_a0(int unit, soc_feature_t feature)
   4935 {
   4936     uint16 dev_id = 0;
   4937     uint8 rev_id = 0;
   4938     COMPILER_REFERENCE(unit);
   4939     SOC_FEATURE_DEBUG_PRINT((" 88375_a0"));
   4940 
   4941 
   4942     switch (feature) {
   4943     /* General */
   4944     case soc_feature_iproc:
   4945     case soc_feature_cmicm:
   4946     case soc_feature_uc:
   4947     case soc_feature_uc_mhost:
   4948     /* DMA */
   4949     case soc_feature_sbusdma:
   4950     case soc_feature_dcb_type28:
   4951     case soc_feature_cos_rx_dma:
   4952     case soc_feature_tslam_dma:
   4953     case soc_feature_table_dma:
   4954     case soc_feature_cmicm_multi_dma_cmc:    
   4955     /* SCHAN */
   4956     case soc_feature_new_sbus_format:
   4957     case soc_feature_sbus_format_v4:
   4958     case soc_feature_schan_hw_timeout:
   4959     /* Interrupts */
   4960     case soc_feature_short_cmic_error:
   4961     case soc_feature_cmicm_extended_interrupts:
   4962     case soc_feature_portmod:
   4963     /* Fabric */
   4964     case soc_feature_fabric_cell_pcp:
   4965     /* Ports */
   4966     case soc_feature_logical_port_num:
   4967     case soc_feature_generic_counters:
   4968     case soc_feature_linkscan_lock_per_unit:
   4969     case soc_feature_controlled_counters:
   4970     case soc_feature_uc_image_name_with_no_chip_rev:
   4971 #ifdef INCLUDE_RCPU
   4972     case soc_feature_rcpu_1:
   4973 #endif /* INCLUDE_RCPU */
   4974     case soc_feature_time_support:
   4975     case soc_feature_ptp:
   4976     case soc_feature_timesync_support:
   4977     case soc_feature_timesync_timestampingmode:
   4978     /* Leds */
   4979     case soc_feature_led_proc:
   4980     case soc_feature_led_data_offset_a0:
   4981     case soc_feature_led_cmicd_v2:
   4982     /*SAT*/
   4983     case soc_feature_sat:
   4984         return TRUE;
   4985     case soc_feature_tdpll_outputclk_synce3:
   4986         return TRUE;
   4987     case soc_feature_packet_tdm_marking:
   4988         soc_cm_get_id(unit, &dev_id, &rev_id);
   4989         if (BCM88474_DEVICE_ID == dev_id) {
   4990             return TRUE;
   4991         } else {
   4992             return FALSE;
   4993         }
   4994     default:
   4995         return FALSE;
   4996     }
   4997 
   4998     return TRUE;
   4999 }
   5000 #endif /* BCM_88470_A0 */
   5001 
   5002 #ifdef BCM_88470_B0
   5003 int
   5004 soc_features_bcm88470_b0(int unit, soc_feature_t feature)
   5005 {
   5006     return soc_features_bcm88470_a0(unit,feature);
   5007 }
   5008 #endif
   5009 
   5010 #ifdef BCM_88270_A0
   5011 int
   5012 soc_features_bcm88270_a0(int unit, soc_feature_t feature)
   5013 {
   5014     COMPILER_REFERENCE(unit);
   5015     SOC_FEATURE_DEBUG_PRINT((" 88270_a0"));
   5016 
   5017 
   5018     switch (feature) {
   5019     /* General */
   5020     case soc_feature_iproc:
   5021     case soc_feature_cmicm:
   5022     case soc_feature_uc:
   5023     case soc_feature_uc_mhost:
   5024     /* DMA */
   5025     case soc_feature_sbusdma:
   5026     case soc_feature_dcb_type28:
   5027     case soc_feature_cos_rx_dma:
   5028     case soc_feature_tslam_dma:
   5029     case soc_feature_table_dma:
   5030     case soc_feature_cmicm_multi_dma_cmc:
   5031     /* SCHAN */
   5032     case soc_feature_new_sbus_format:
   5033     case soc_feature_sbus_format_v4:
   5034     case soc_feature_schan_hw_timeout:
   5035     /* Interrupts */
   5036     case soc_feature_short_cmic_error:
   5037     case soc_feature_cmicm_extended_interrupts:
   5038     case soc_feature_portmod:
   5039     /* Fabric */
   5040     case soc_feature_no_fabric:
   5041 	/* TDM */
   5042     case soc_feature_no_tdm:
   5043     /* Ports */
   5044     case soc_feature_logical_port_num:
   5045     case soc_feature_generic_counters:
   5046 	case soc_feature_linkscan_lock_per_unit:
   5047     case soc_feature_uc_image_name_with_no_chip_rev:
   5048 #ifdef INCLUDE_RCPU
   5049     case soc_feature_rcpu_1:
   5050 #endif /* INCLUDE_RCPU */
   5051     case soc_feature_controlled_counters:
   5052     case soc_feature_time_support:
   5053     case soc_feature_ptp:
   5054     case soc_feature_timesync_support:
   5055     case soc_feature_timesync_timestampingmode:
   5056     case soc_feature_sat:
   5057     /* Leds */
   5058     case soc_feature_led_proc:
   5059     case soc_feature_led_data_offset_a0:
   5060     case soc_feature_led_cmicd_v2:
   5061         return TRUE;
   5062     default:
   5063         return FALSE;
   5064     }
   5065 
   5066     return TRUE;
   5067 }
   5068 #endif /* BCM_88270_A0 */
   5069 
   5070 #ifdef BCM_8206_A0
   5071 int
   5072 soc_features_bcm8206_a0(int unit, soc_feature_t feature)
   5073 {
   5074     COMPILER_REFERENCE(unit);
   5075     SOC_FEATURE_DEBUG_PRINT((" 88375_a0"));
   5076 
   5077 
   5078     switch (feature) {
   5079     /* DMA */
   5080     case soc_feature_sbusdma:
   5081     case soc_feature_dcb_type28:
   5082     case soc_feature_cos_rx_dma:
   5083     case soc_feature_tslam_dma:
   5084     case soc_feature_table_dma:
   5085     /* SCHAN */
   5086     case soc_feature_new_sbus_format:
   5087     case soc_feature_sbus_format_v4:
   5088     case soc_feature_schan_hw_timeout:
   5089     /* Interrupts */
   5090     case soc_feature_portmod:
   5091     /* Fabric */
   5092     case soc_feature_fabric_cell_pcp:
   5093     /* Ports */
   5094     case soc_feature_logical_port_num:
   5095     case soc_feature_generic_counters:
   5096 	case soc_feature_linkscan_lock_per_unit:
   5097     case soc_feature_controlled_counters:
   5098         return TRUE;
   5099     default:
   5100         return FALSE;
   5101     }
   5102 
   5103     return TRUE;
   5104 }
   5105 #endif /* BCM_8206_A0 */
   5106 
   5107 #ifdef BCM_88750
   5108 
   5109 
   5110 int
   5111 soc_features_bcm88750_a0(int unit, soc_feature_t feature)
   5112 {
   5113     COMPILER_REFERENCE(unit);
   5114     SOC_FEATURE_DEBUG_PRINT((" 88750_a0"));
   5115 
   5116     switch (feature) {
   5117     case soc_feature_controlled_counters:
   5118     case soc_feature_tslam_dma:
   5119     case soc_feature_table_dma:
   5120     case soc_feature_short_cmic_error:
   5121     case soc_feature_linkscan_pause_timeout:
   5122     case soc_feature_linkscan_lock_per_unit:
   5123     case soc_feature_easy_reload_wb_compat:
   5124         return TRUE;
   5125     default:
   5126         return FALSE;
   5127     }
   5128 
   5129     return TRUE;
   5130 }
   5131 
   5132 
   5133 
   5134 int
   5135 soc_features_bcm88750_b0(int unit, soc_feature_t feature)
   5136 {
   5137     COMPILER_REFERENCE(unit);
   5138     SOC_FEATURE_DEBUG_PRINT((" 88750_b0"));
   5139 
   5140     switch (feature) {
   5141     case soc_feature_controlled_counters:
   5142     case soc_feature_tslam_dma:
   5143     case soc_feature_table_dma:
   5144     case soc_feature_short_cmic_error:
   5145     case soc_feature_linkscan_pause_timeout:
   5146     case soc_feature_linkscan_lock_per_unit:
   5147     case soc_feature_easy_reload_wb_compat:
   5148         return TRUE;
   5149     default:
   5150         return FALSE;
   5151     }
   5152 
   5153     return TRUE;
   5154 }
   5155 
   5156 #ifdef BCM_88754_A0
   5157 int
   5158 soc_features_bcm88754_a0(int unit, soc_feature_t feature)
   5159 {
   5160     COMPILER_REFERENCE(unit);
   5161     SOC_FEATURE_DEBUG_PRINT((" 88750_b0"));
   5162 
   5163     switch (feature) {
   5164     case soc_feature_controlled_counters:
   5165     case soc_feature_tslam_dma:
   5166     case soc_feature_table_dma:
   5167     case soc_feature_short_cmic_error:
   5168     case soc_feature_schan_err_check:
   5169     case soc_feature_linkscan_pause_timeout:
   5170     case soc_feature_linkscan_lock_per_unit:
   5171     case soc_feature_easy_reload_wb_compat:
   5172         return TRUE;
   5173     default:
   5174         return FALSE;
   5175     }
   5176 
   5177     return TRUE;
   5178 }
   5179 #endif /*BCM_88754_A0*/
   5180 
   5181 #endif /* BCM_88750 */
   5182 
   5183 #ifdef BCM_88950
   5184 int
   5185 soc_features_bcm88950_a0(int unit, soc_feature_t feature)
   5186 {
   5187     COMPILER_REFERENCE(unit);
   5188     SOC_FEATURE_DEBUG_PRINT((" 88950_a0"));
   5189 
   5190     /* Will be added later */
   5191     switch (feature) {
   5192     /* General */
   5193     case soc_feature_iproc:
   5194     case soc_feature_cmicm:
   5195     /* DMA */
   5196     case soc_feature_sbusdma: 
   5197     case soc_feature_tslam_dma:
   5198     case soc_feature_table_dma:
   5199     /* SCHAN */
   5200     case soc_feature_new_sbus_format:
   5201     case soc_feature_sbus_format_v4:
   5202     case soc_feature_schan_hw_timeout:
   5203     /* Interrupts */
   5204     case soc_feature_short_cmic_error:
   5205     case soc_feature_cmicm_extended_interrupts:
   5206     /* Others */
   5207     case soc_feature_controlled_counters:
   5208     case soc_feature_linkscan_pause_timeout:
   5209     case soc_feature_linkscan_lock_per_unit:
   5210     case soc_feature_easy_reload_wb_compat:
   5211     case soc_feature_portmod:
   5212     case soc_feature_fabric_cell_pcp:
   5213     case soc_feature_fe_mc_id_range:
   5214     case soc_feature_fe_mc_priority_mode_enable:
   5215         return TRUE;
   5216     default:
   5217         return FALSE;
   5218     }
   5219 
   5220     return TRUE;
   5221 }
   5222 #endif
   5223 
   5224 #ifdef BCM_88790
   5225 int
   5226 soc_features_bcm88790_a0(int unit, soc_feature_t feature)
   5227 {
   5228     COMPILER_REFERENCE(unit);
   5229     SOC_FEATURE_DEBUG_PRINT((" 88790_a0"));
   5230 
   5231     /* Will be added later */
   5232     switch (feature) {
   5233     /* General */
   5234     case soc_feature_prop_suffix_group_with_revision:
   5235     case soc_feature_iproc:
   5236 	case soc_feature_cmicx:
   5237 	case soc_feature_extended_cmic_error:
   5238     case soc_feature_cmicm_multi_schan_cmc:        
   5239     case soc_feature_cmicd_v2:
   5240     case soc_feature_cmic_reserved_queues:
   5241     /* DMA */
   5242     case soc_feature_sbusdma: 
   5243     case soc_feature_tslam_dma:
   5244     case soc_feature_table_dma:
   5245     /* SCHAN */
   5246     case soc_feature_new_sbus_format:
   5247     case soc_feature_sbus_format_v4:
   5248     case soc_feature_schan_hw_timeout:
   5249     /* Interrupts */
   5250 #ifdef PERHAPS_LESS_INFORMATIOM_LATER
   5251     case soc_feature_short_cmic_error:
   5252 #endif
   5253     case soc_feature_cmicm_extended_interrupts:
   5254     /* Others */
   5255     case soc_feature_controlled_counters:
   5256     case soc_feature_linkscan_pause_timeout:
   5257     case soc_feature_linkscan_lock_per_unit:
   5258     case soc_feature_easy_reload_wb_compat:
   5259     case soc_feature_portmod:
   5260     case soc_feature_fabric_cell_pcp:
   5261     case soc_feature_fe_mc_id_range:
   5262     case soc_feature_fe_mc_priority_mode_enable:
   5263         return TRUE;
   5264     default:
   5265         return FALSE;
   5266     }
   5267 
   5268     return TRUE;
   5269 }
   5270 #endif
   5271 
   5272 
   5273 
   5274 #ifdef  BCM_56450
   5275 /*
   5276  * BCM56450 A0
   5277  */
   5278 int
   5279 soc_features_bcm56450_a0(int unit, soc_feature_t feature)
   5280 {
   5281     uint16  dev_id;
   5282     uint8   rev_id;
   5283     int     ddr3_disable = 0;
   5284     int     pack_mode = 0;
   5285     int     ehost_mode = 0;
   5286     int     ext_mem_port_count = 0;
   5287     int     l3 = 0;  
   5288     int     mpls = 0;
   5289     int     mim = 0;
   5290     int     niv_enable = 1;
   5291     int     flex_stat_compression_tbl_share = 0;
   5292     int     flex_stat_compaction_support = 0;
   5293     int     global_meter_compression_share = 0;
   5294     int     global_meter_compaction_support = 0;
   5295     int     flex_stat_attributes_class = 0;
   5296 
   5297     SOC_FEATURE_DEBUG_PRINT((" 56450_a0"));
   5298     soc_cm_get_id(unit, &dev_id, &rev_id);
   5299     ddr3_disable = (dev_id == BCM56456_DEVICE_ID) ||
   5300                    (dev_id == BCM56457_DEVICE_ID) ||
   5301                    (dev_id == BCM56458_DEVICE_ID) ||
   5302                    (dev_id == BCM56248_DEVICE_ID) ||
   5303                    (dev_id == BCM55455_DEVICE_ID);
   5304     /* If  external memory available for give KT2 variant */
   5305     if (!ddr3_disable) {
   5306         /* Get number of external memorory port count defined by
   5307            by config variable pbmp_ext_mem */
   5308         SOC_PBMP_COUNT(PBMP_EXT_MEM (unit), ext_mem_port_count);
   5309     }
   5310     mpls = l3 = mim = (dev_id == BCM55450_DEVICE_ID) ||
   5311         (dev_id == BCM55455_DEVICE_ID);
   5312     /* if external memory ports are available */
   5313     if (ext_mem_port_count) {
   5314         pack_mode  = soc_property_get(unit, spn_MMU_MULTI_PACKETS_PER_CELL, 0);
   5315     }
   5316     ehost_mode   = !(soc_cm_get_bus_type(unit) & SOC_AXI_DEV_TYPE);
   5317     niv_enable = soc_property_get(unit, spn_NIV_ENABLE, 1);
   5318     flex_stat_compression_tbl_share = soc_property_get(unit,
   5319             spn_FLEX_STAT_COMPRESSION_SHARE, 0);
   5320     flex_stat_compaction_support = soc_property_get(unit,
   5321             spn_FLEX_STAT_COMPACTION_SUPPORT, 0);
   5322     global_meter_compression_share = soc_property_get(unit,
   5323             spn_GLOBAL_METER_COMPRESSION_SHARE, 0);
   5324     global_meter_compaction_support = soc_property_get(unit,
   5325             spn_GLOBAL_METER_COMPACTION_SUPPORT, 0);
   5326     flex_stat_attributes_class = soc_property_get(unit,
   5327             spn_FLEX_STAT_ATTRIBUTES_CLASS, 0);
   5328 
   5329     switch (feature) {
   5330     case soc_feature_ces:
   5331     case soc_feature_unimac:
   5332     case soc_feature_dcb_type24:
   5333     case soc_feature_field_slices10:
   5334     case soc_feature_field_slices12:
   5335     case soc_feature_field_meter_pools12:
   5336     case soc_feature_mcs:
   5337     case soc_feature_counter_toggled_read:
   5338     case soc_feature_vpd_profile:
   5339     case soc_feature_cpu_as_olp:
   5340         return FALSE;
   5341     case soc_feature_uc:
   5342         return ehost_mode;
   5343     case soc_feature_gmii_clkout:
   5344     case soc_feature_oam:
   5345     case soc_feature_iproc:
   5346     case soc_feature_new_sbus_format:
   5347     case soc_feature_sbusdma:
   5348     case soc_feature_dcb_type29:
   5349     case soc_feature_ep_redirect:
   5350     case soc_feature_linkphy_coe:
   5351     case soc_feature_subtag_coe:
   5352     case soc_feature_priority_flow_control:/*Should be set true for katana too*/
   5353     case soc_feature_vector_based_spri:
   5354     case soc_feature_new_sbus_old_resp:
   5355     case soc_feature_field_egress_tocpu:
   5356     case soc_feature_global_meter:
   5357     case soc_feature_failover:
   5358     case soc_feature_field_ingress_cosq_override:
   5359     case soc_feature_service_queuing:
   5360     case soc_feature_multiple_split_horizon_group:
   5361     case soc_feature_cmic_reserved_queues:
   5362     case soc_feature_mem_cache:
   5363     case soc_feature_egr_mirror_true:
   5364     case soc_feature_lltag:
   5365     case soc_feature_mem_parity_eccmask:
   5366     case soc_feature_timestamp_counter:
   5367     case soc_feature_time_support:
   5368     case soc_feature_ptp:
   5369     case soc_feature_bhh:
   5370     case soc_feature_xy_tcam:
   5371     case soc_feature_inner_tpid_enable:
   5372     case soc_feature_vlan_xlate:
   5373     case soc_feature_int_common_init:
   5374     case soc_feature_special_egr_ip_tunnel_ser:
   5375     case soc_feature_egr_ipmc_mem_field_l3_payload_valid:
   5376     case soc_feature_olp:
   5377     case soc_feature_xmac:
   5378     case soc_feature_xmac_reset_on_mode_change:
   5379     case soc_feature_faults_multi_ep_get:
   5380     case soc_feature_egr_nh_class_id_valid:
   5381     case soc_feature_hg_proxy_module_config:
   5382     case soc_feature_flex_port:
   5383     case soc_feature_oam_pm:
   5384     case soc_feature_mpls_frr_lookup:
   5385     case soc_feature_e2efc:
   5386         return TRUE;
   5387     case soc_feature_urpf:
   5388     case soc_feature_lpm_tcam:
   5389     case soc_feature_ip_mcast:
   5390     case soc_feature_ip_mcast_repl:
   5391     case soc_feature_l3:
   5392     case soc_feature_l3_ingress_interface:
   5393     case soc_feature_l3_ip6:
   5394     case soc_feature_l3_lookup_cmd:
   5395     case soc_feature_l3_sgv:
   5396     case soc_feature_subport:
   5397     case soc_feature_subport_enhanced:
   5398     case soc_feature_l3_defip_advanced_lookup:
   5399     case soc_feature_l3_defip_map:
   5400     case soc_feature_egr_l3_mtu:
   5401     case soc_feature_port_extension:
   5402     case soc_feature_port_extension_kt2_key_type:
   5403     case soc_feature_dvp_group_pruning:
   5404     case soc_feature_l3_kt2_shared_defip_table:
   5405     case soc_feature_shared_defip_stat_support:
   5406     case soc_feature_l3_ingress_intf_kt2_recover:
   5407         return !l3;
   5408     case soc_feature_mpls:    
   5409     case soc_feature_mpls_software_failover:
   5410     case soc_feature_mpls_failover:
   5411     case soc_feature_mpls_enhanced:
   5412     case soc_feature_mpls_entropy:
   5413     case soc_feature_virtual_switching:
   5414     case soc_feature_vp_dscp_map:
   5415         return !mpls; 
   5416     case soc_feature_mim:
   5417         return !mim;
   5418     case soc_feature_ddr3:
   5419         return !ddr3_disable;
   5420     case soc_feature_mmu_packing:
   5421         return pack_mode;
   5422     case soc_feature_timesync_timestampingmode:
   5423         return TRUE;
   5424     case soc_feature_ukernel_debug:
   5425     case soc_feature_oob_fc: 
   5426         return TRUE;
   5427     case soc_feature_niv:
   5428         return niv_enable;
   5429     case soc_feature_flex_stat_compression_share:
   5430         return flex_stat_compression_tbl_share;
   5431     case soc_feature_flex_stat_compaction_support:
   5432         return flex_stat_compaction_support;
   5433     case soc_feature_global_meter_compression_share:
   5434         return global_meter_compression_share;
   5435     case soc_feature_global_meter_compaction_support:
   5436         return global_meter_compaction_support;
   5437     case soc_feature_flex_stat_attributes_class:
   5438         return flex_stat_attributes_class;
   5439     case soc_feature_egr_vxlate_supports_dgpp:
   5440         return TRUE;
   5441     default:
   5442         return soc_features_bcm56440_a0(unit, feature);
   5443     }
   5444 }
   5445 
   5446 /*
   5447  * BCM56450 B0
   5448  */
   5449 int
   5450 soc_features_bcm56450_b0(int unit, soc_feature_t feature)
   5451 {
   5452     return soc_features_bcm56450_a0(unit, feature);
   5453 }
   5454 
   5455 /*
   5456  * BCM56450 B1
   5457  */
   5458 int
   5459 soc_features_bcm56450_b1(int unit, soc_feature_t feature)
   5460 {
   5461     return soc_features_bcm56450_a0(unit, feature);
   5462 }
   5463 
   5464 #endif  /* BCM_56450 */
   5465 
   5466 #ifdef  BCM_56260
   5467 /*
   5468  * BCM56260 A0
   5469  */
   5470 int
   5471 soc_features_bcm56260_a0(int unit, soc_feature_t feature)
   5472 {
   5473     uint16  dev_id;
   5474     uint8   rev_id;
   5475     int     ddr3_disable = 0;
   5476     int     pack_mode = 0;
   5477     int     ext_mem_port_count = 0;
   5478     int     mmu_reduced_int_buffer = 0;
   5479     int     field_slices8 = 0;
   5480     int dev_is_saber2 = 0;
   5481     int dev_is_sb2plus = 0;
   5482     int dev_is_dagger2 = 0;
   5483     SOC_FEATURE_DEBUG_PRINT(("56260_a0"));
   5484     soc_cm_get_id(unit, &dev_id, &rev_id);
   5485     ddr3_disable = (dev_id == BCM56265_DEVICE_ID) ||
   5486                    (dev_id == BCM56266_DEVICE_ID) ||
   5487                    (dev_id == BCM56267_DEVICE_ID) ||
   5488                    (dev_id == BCM56268_DEVICE_ID) ||
   5489                    (dev_id == BCM56465_DEVICE_ID) ||
   5490                    (dev_id == BCM56466_DEVICE_ID) ||
   5491                    (dev_id == BCM56467_DEVICE_ID) ||
   5492                    (dev_id == BCM56468_DEVICE_ID) ||
   5493                    (dev_id == BCM56233_DEVICE_ID);
   5494     /* If  external memory available for give SB2 variant */
   5495     if (!ddr3_disable) {
   5496         /* Get number of external memorory port count defined by
   5497            by config variable pbmp_ext_mem */
   5498         SOC_PBMP_COUNT(PBMP_EXT_MEM (unit), ext_mem_port_count);
   5499     }
   5500     /* if external memory ports are available */
   5501     if (ext_mem_port_count) {
   5502         pack_mode  = soc_property_get(unit, spn_MMU_MULTI_PACKETS_PER_CELL, 0);
   5503     }
   5504 
   5505    dev_is_saber2 = (dev_id == BCM56265_DEVICE_ID) ||
   5506                    (dev_id == BCM56266_DEVICE_ID) ||
   5507                    (dev_id == BCM56267_DEVICE_ID) ||
   5508                    (dev_id == BCM56268_DEVICE_ID) ||
   5509                    (dev_id == BCM56260_DEVICE_ID) ||
   5510                    (dev_id == BCM56261_DEVICE_ID) ||
   5511                    (dev_id == BCM56262_DEVICE_ID) ||
   5512                    (dev_id == BCM56263_DEVICE_ID);
   5513   
   5514     dev_is_sb2plus = (dev_id == BCM56460_DEVICE_ID) ||
   5515                   (dev_id == BCM56461_DEVICE_ID) ||
   5516                   (dev_id == BCM56462_DEVICE_ID) ||
   5517                   (dev_id == BCM56463_DEVICE_ID) ||
   5518                   (dev_id == BCM56465_DEVICE_ID) ||
   5519                   (dev_id == BCM56466_DEVICE_ID) ||
   5520                   (dev_id == BCM56467_DEVICE_ID) ||
   5521                   (dev_id == BCM56468_DEVICE_ID) ;
   5522 
   5523 
   5524    dev_is_dagger2 = (dev_id == BCM56233_DEVICE_ID);
   5525    mmu_reduced_int_buffer = (dev_id == BCM56233_DEVICE_ID);
   5526    field_slices8 = (dev_id == BCM56233_DEVICE_ID);
   5527 
   5528     switch (feature) {
   5529     case soc_feature_l3_lpm_128b_entries_reserved:
   5530         if (dev_is_saber2 || dev_is_dagger2) {
   5531             return FALSE;
   5532         } else {
   5533             if (soc_property_get(unit, spn_LPM_SCALING_ENABLE, 0)) {
   5534                 return (soc_property_get(unit, spn_LPM_IPV6_128B_RESERVED, 1));
   5535             }
   5536             return TRUE;
   5537         }
   5538     case soc_feature_l3_lpm_scaling_enable:
   5539         if (dev_is_saber2 || dev_is_dagger2) {
   5540             return (soc_property_get(unit, spn_LPM_SCALING_ENABLE, 1));
   5541         } else {
   5542             return (soc_property_get(unit, spn_LPM_SCALING_ENABLE, 0));
   5543         }
   5544     case soc_feature_mmu_reduced_internal_buffer:
   5545         return mmu_reduced_int_buffer;
   5546     case soc_feature_field_slices8:
   5547     case soc_feature_field_meter_pools8:
   5548         return field_slices8;
   5549     case soc_feature_field_slices12:
   5550     case soc_feature_field_meter_pools12:
   5551         if (dev_is_dagger2) {
   5552             return FALSE;
   5553         } else {
   5554             return TRUE;
   5555         }
   5556     case soc_feature_oam:
   5557     case soc_feature_oam_service_pri_map:
   5558     case soc_feature_eth_lm_dm:
   5559     case soc_feature_led_data_offset_a0:
   5560     case soc_feature_ctr_xaui_activity:
   5561     case soc_feature_olp:
   5562     case soc_feature_cpu_as_olp:
   5563     case soc_feature_egr_ipmc_mem_field_l3_payload_valid:
   5564     case soc_feature_vp_group_ingress_vlan_membership:
   5565     case soc_feature_vp_group_egress_vlan_membership:
   5566     case soc_feature_faults_multi_ep_get:
   5567     case soc_feature_shared_defip_stat_support:
   5568         return TRUE;
   5569     case soc_feature_xmac:
   5570     case soc_feature_ecmp_1k_paths_4_subgroups:
   5571         return FALSE;
   5572     case soc_feature_timesync_support:
   5573     case soc_feature_time_support:
   5574     case soc_feature_time_v3:
   5575     case soc_feature_ptp:
   5576     case soc_feature_ukernel_debug:
   5577     case soc_feature_uc_ulink:
   5578     case soc_feature_uc_image_name_with_no_chip_rev:
   5579         return TRUE;
   5580     case soc_feature_xy_tcam:
   5581     case soc_feature_xy_tcam_direct:
   5582     case soc_feature_xy_tcam_28nm:
   5583     case soc_feature_xlmac:
   5584     case soc_feature_iproc:
   5585     case soc_feature_iproc_7:
   5586     case soc_feature_cmicm:
   5587     case soc_feature_uc:
   5588     case soc_feature_uc_mhost:
   5589     case soc_feature_avs:
   5590     case soc_feature_special_egr_ip_tunnel_ser:
   5591     case soc_feature_oob_fc:
   5592         return TRUE;
   5593     case soc_feature_sbus_format_v4:
   5594         return soc_property_get(unit, "sbus_v4", 1);
   5595     case soc_feature_sat:
   5596         if ((SAL_BOOT_PLISIM || SAL_BOOT_BCMSIM)) {
   5597             return FALSE;
   5598         }
   5599         return TRUE;
   5600     case soc_feature_ddr3:
   5601          if ((SAL_BOOT_PLISIM || SAL_BOOT_BCMSIM)) {
   5602              return FALSE;
   5603          }
   5604         return !ddr3_disable;
   5605     case soc_feature_mmu_packing:
   5606         return pack_mode;
   5607     case soc_feature_egress_object_mac_da_replace:
   5608         if (soc_property_get(unit, spn_EGRESS_OBJECT_MAC_DA_REPLACE, 0)) {
   5609             return TRUE;
   5610         }
   5611         return FALSE;
   5612     case soc_feature_sb2plus_1k_ecmp_groups:
   5613         return dev_is_sb2plus;
   5614     case soc_feature_global_meter_compression_share:
   5615     case soc_feature_global_meter_compaction_support:
   5616     case soc_feature_flex_stat_attributes_class:
   5617         return FALSE;
   5618     case soc_feature_general_cascade:
   5619         if (soc_property_get(unit, spn_GENERAL_CASCADE_MODE, 0)) {
   5620             return TRUE;
   5621         }
   5622         return FALSE;
   5623     case soc_feature_subport:
   5624     case soc_feature_subport_enhanced:
   5625     case soc_feature_linkphy_coe:
   5626     case soc_feature_subtag_coe:
   5627     case soc_feature_flex_port:
   5628     case soc_feature_hgproxy_subtag_coe:
   5629      /* Fall through to kt2 incase its not dagger2 device */
   5630         if (dev_is_dagger2) {
   5631             return FALSE;
   5632         }
   5633     default:
   5634         return soc_features_bcm56450_a0(unit, feature);
   5635     }
   5636 }
   5637 
   5638 /*
   5639  * BCM56260 B0
   5640  */
   5641 int
   5642 soc_features_bcm56260_b0(int unit, soc_feature_t feature)
   5643 {
   5644     return soc_features_bcm56260_a0(unit, feature);
   5645 }
   5646 
   5647 #endif  /* BCM_56260 */
   5648 
   5649 
   5650 #ifdef  BCM_56270
   5651 /*
   5652  *  * BCM53460 A0
   5653  */
   5654 int
   5655 soc_features_bcm53460_a0(int unit, soc_feature_t feature)
   5656 {
   5657 
   5658     SOC_FEATURE_DEBUG_PRINT(("53460_a0"));
   5659 
   5660     switch (feature) {
   5661     case soc_feature_ddr3:
   5662     case soc_feature_l3:
   5663     case soc_feature_mpls:
   5664     case soc_feature_field_slices12:
   5665     case soc_feature_uc:
   5666     case soc_feature_field_slices8:
   5667     case soc_feature_field_multi_stage:
   5668     case soc_feature_virtual_switching:
   5669     case soc_feature_egr_mirror_true:
   5670     case soc_feature_general_cascade:
   5671         return FALSE;
   5672     case soc_feature_field_slices4:
   5673     case soc_feature_fp_qual_recovery_with_group_create:
   5674     case soc_feature_untethered_otp:
   5675     case soc_feature_discontinuous_pp_port:
   5676     case soc_feature_l3_iif_under_4k:
   5677     case soc_feature_mirror_four_port_trunk:
   5678     case soc_feature_hg_trunk_groups_max_2:
   5679     case soc_feature_hg_trunk_group_members_max_4:
   5680     case soc_feature_mirror_flexible:
   5681         return TRUE;
   5682     default:
   5683         return soc_features_bcm56260_a0(unit, feature);
   5684     }
   5685 }
   5686 
   5687 
   5688 /*
   5689  * BCM56270 A0
   5690  */
   5691 int
   5692 soc_features_bcm56270_a0(int unit, soc_feature_t feature)
   5693 {
   5694     uint16      dev_id;
   5695     uint8       rev_id;
   5696 
   5697     soc_cm_get_id(unit, &dev_id, &rev_id);
   5698 
   5699     if ((dev_id == BCM53460_DEVICE_ID) ||(dev_id == BCM53461_DEVICE_ID)) {
   5700         return soc_features_bcm53460_a0(unit, feature);
   5701     }
   5702 
   5703     SOC_FEATURE_DEBUG_PRINT(("56270_a0"));
   5704 
   5705     switch (feature) {
   5706     case soc_feature_l3_iif_under_4k:
   5707     case soc_feature_l3_iif_zero_invalid:
   5708     case soc_feature_field_slices8:
   5709     case soc_feature_mirror_four_port_trunk:
   5710     case soc_feature_flex_stat_ing_pools_4:
   5711     case soc_feature_hg_trunk_groups_max_2:
   5712     case soc_feature_hg_trunk_group_members_max_4:
   5713     case soc_feature_fp_qual_recovery_with_group_create:
   5714     case soc_feature_discontinuous_pp_port:
   5715         return TRUE;
   5716     case soc_feature_ddr3:
   5717     case soc_feature_field_slices12:
   5718     case soc_feature_general_cascade:
   5719         return FALSE;
   5720     case soc_feature_untethered_otp:
   5721         return FALSE;
   5722     case soc_feature_uc:
   5723     case soc_feature_uc_mhost:
   5724         return (!SAL_BOOT_SIMULATION);
   5725     case soc_feature_uc_image_name_with_no_chip_rev:
   5726         return TRUE;
   5727 /* Disabling it for now */
   5728 #if 0 
   5729 #if 1
   5730         return (!SAL_BOOT_SIMULATION);
   5731 #endif
   5732 #endif
   5733     default:
   5734         return soc_features_bcm56260_a0(unit, feature);
   5735     }
   5736 }
   5737 #endif  /* BCM_56270 */
   5738 
   5739 #ifdef  BCM_56860
   5740 /*
   5741  * BCM56860 A0
   5742  */
   5743 int
   5744 soc_features_bcm56860_a0(int unit, soc_feature_t feature)
   5745 {
   5746     uint16      dev_id;
   5747     uint8       rev_id;
   5748     uint8       a0;
   5749     uint8       dc_enable;
   5750     uint8       asf;
   5751     int         bypass_mode;
   5752     uint8       l2_l3_only;
   5753     uint8       coe;
   5754     int         fp_stage_quarter_slice;
   5755     int         alpm = 1;
   5756     int         riot = 1;
   5757     int         fabric = 0;
   5758     int         spri_vector;
   5759     int         alpm_no_hit;
   5760 
   5761     spri_vector = soc_property_get(unit, spn_MMU_STRICT_PRI_VECTOR_MODE, 1);
   5762     bypass_mode = soc_property_get(unit, spn_SWITCH_BYPASS_MODE,
   5763                         SOC_SWITCH_BYPASS_MODE_NONE);
   5764     if (bypass_mode != SOC_SWITCH_BYPASS_MODE_L3_AND_FP) {
   5765         bypass_mode = SOC_SWITCH_BYPASS_MODE_NONE;
   5766     }
   5767 
   5768     SOC_FEATURE_DEBUG_PRINT((" 56860_a0"));
   5769     soc_cm_get_id(unit, &dev_id, &rev_id);
   5770     
   5771     a0 = ((BCM56860_DEVICE_ID == dev_id && BCM56860_A0_REV_ID == rev_id)
   5772             || (BCM56861_DEVICE_ID == dev_id && BCM56861_A0_REV_ID == rev_id)
   5773             || (BCM56862_DEVICE_ID == dev_id && BCM56862_A0_REV_ID == rev_id)
   5774             || (BCM56864_DEVICE_ID == dev_id && BCM56864_A0_REV_ID == rev_id)
   5775             || (BCM56865_DEVICE_ID == dev_id && BCM56865_A0_REV_ID == rev_id)
   5776             || (BCM56866_DEVICE_ID == dev_id && BCM56866_A0_REV_ID == rev_id)
   5777             || (BCM56867_DEVICE_ID == dev_id && BCM56867_A0_REV_ID == rev_id)
   5778             || (BCM56868_DEVICE_ID == dev_id && BCM56868_A0_REV_ID == rev_id)
   5779             || (BCM56832_DEVICE_ID == dev_id && BCM56832_A0_REV_ID == rev_id)
   5780             || (BCM56833_DEVICE_ID == dev_id && BCM56833_A0_REV_ID == rev_id)
   5781             || (BCM56836_DEVICE_ID == dev_id && BCM56836_A0_REV_ID == rev_id));
   5782 
   5783     dc_enable = ((BCM56867_DEVICE_ID != dev_id)
   5784                     && (BCM56868_DEVICE_ID != dev_id)
   5785                     && (BCM56833_DEVICE_ID != dev_id)
   5786                     && (BCM56836_DEVICE_ID != dev_id)
   5787                     && (BCM56832_DEVICE_ID != dev_id));
   5788 
   5789     asf = ((BCM56867_DEVICE_ID != dev_id)
   5790             && (BCM56866_DEVICE_ID != dev_id)
   5791             && (BCM56833_DEVICE_ID != dev_id)
   5792             && (BCM56836_DEVICE_ID != dev_id)
   5793             && (BCM56832_DEVICE_ID != dev_id));
   5794 
   5795     l2_l3_only = ((BCM56833_DEVICE_ID == dev_id)
   5796                     || (BCM56832_DEVICE_ID == dev_id)
   5797                     || (BCM56836_DEVICE_ID == dev_id)
   5798                     || (BCM56868_DEVICE_ID == dev_id));
   5799 
   5800     coe = ((BCM56833_DEVICE_ID != dev_id)
   5801               && (BCM56860_DEVICE_ID != dev_id)
   5802               && (BCM56861_DEVICE_ID != dev_id)
   5803               && (BCM56862_DEVICE_ID != dev_id)
   5804               && (BCM56864_DEVICE_ID != dev_id)
   5805               && (BCM56865_DEVICE_ID != dev_id)
   5806               && (BCM56868_DEVICE_ID != dev_id)
   5807               && (BCM56832_DEVICE_ID != dev_id)
   5808               && (BCM56836_DEVICE_ID != dev_id));
   5809 
   5810     fp_stage_quarter_slice = (dev_id == BCM56832_DEVICE_ID || dev_id == BCM56833_DEVICE_ID) ? TRUE:FALSE ;
   5811 
   5812     if (dev_id == BCM56832_DEVICE_ID || dev_id == BCM56868_DEVICE_ID) {
   5813         alpm = 0;
   5814     }
   5815 
   5816     if ((BCM56868_DEVICE_ID == dev_id) || (BCM56832_DEVICE_ID == dev_id)
   5817             || (BCM56833_DEVICE_ID == dev_id)) {
   5818         riot = 0;
   5819     }
   5820 
   5821     fabric = (BCM56868_DEVICE_ID == dev_id);
   5822 
   5823     alpm_no_hit = ((BCM56833_DEVICE_ID == dev_id)
   5824                     || (BCM56836_DEVICE_ID == dev_id)
   5825                     || (BCM56862_DEVICE_ID == dev_id)
   5826                     || (BCM56864_DEVICE_ID == dev_id)
   5827                     || (BCM56865_DEVICE_ID == dev_id)
   5828                     || (BCM56866_DEVICE_ID == dev_id));
   5829 
   5830     switch (feature) {
   5831     case soc_feature_shared_bank_lp_disabled:
   5832         return (a0 && (BCM56867_DEVICE_ID != dev_id));
   5833     case soc_feature_l3_2k_defip_table:
   5834             return (BCM56832_DEVICE_ID == dev_id);
   5835     case soc_feature_l3_lpm_scaling_enable:
   5836         if (soc_property_get(unit, spn_L3_ALPM_ENABLE, 0)) {
   5837             return FALSE;
   5838         }
   5839         if (BCM56868_DEVICE_ID == dev_id) {
   5840             return FALSE;
   5841         } else
   5842         if (BCM56832_DEVICE_ID == dev_id) {
   5843             return (soc_property_get(unit, spn_LPM_SCALING_ENABLE, 1));
   5844         } else {
   5845             return (soc_property_get(unit, spn_LPM_SCALING_ENABLE, 0));
   5846         }
   5847     case soc_feature_l3_lpm_128b_entries_reserved:
   5848         if (soc_property_get(unit, spn_L3_ALPM_ENABLE, 0)) {
   5849             return FALSE;
   5850         }
   5851         if (BCM56868_DEVICE_ID == dev_id) {
   5852             return FALSE;
   5853         } else
   5854         if (BCM56832_DEVICE_ID == dev_id) {
   5855             if (soc_property_get(unit, spn_LPM_SCALING_ENABLE, 1)) {
   5856                 return (soc_property_get(unit, spn_LPM_IPV6_128B_RESERVED, 0));
   5857             }
   5858         } else {
   5859             if (soc_property_get(unit, spn_LPM_SCALING_ENABLE, 0)) {
   5860                 return (soc_property_get(unit, spn_LPM_IPV6_128B_RESERVED, 1));
   5861             }
   5862             return (TRUE);
   5863         }
   5864     case soc_feature_urpf:
   5865         return ((BCM56832_DEVICE_ID != dev_id)
   5866                 && (BCM56868_DEVICE_ID != dev_id));
   5867     case soc_feature_td2p_mpls_entropy_label:
   5868     case soc_feature_mim:
   5869     case soc_feature_mim_bvid_insertion_control:
   5870     case soc_feature_mpls_lsr_ecmp:
   5871     case soc_feature_mpls:
   5872     case soc_feature_mpls_software_failover:
   5873     case soc_feature_mpls_failover:
   5874     case soc_feature_mpls_enhanced:
   5875     case soc_feature_td2p_mpls_linear_protection:
   5876     case soc_feature_failover:
   5877         return ((BCM56832_DEVICE_ID != dev_id)
   5878                 && (BCM56868_DEVICE_ID != dev_id) 
   5879                 && (bypass_mode == SOC_SWITCH_BYPASS_MODE_NONE));
   5880     case soc_feature_clmac:
   5881     case soc_feature_cport_clmac:
   5882         return ((BCM56833_DEVICE_ID != dev_id) &&
   5883                    (BCM56861_DEVICE_ID != dev_id) && 
   5884                    (BCM56864_DEVICE_ID != dev_id) &&
   5885                    (BCM56832_DEVICE_ID != dev_id));
   5886     case soc_feature_clmac_partial_support:
   5887         return (BCM56865_DEVICE_ID == dev_id);
   5888     case soc_feature_hgproxy_subtag_coe:
   5889     case soc_feature_egr_lport_tab_profile:
   5890         return (coe);
   5891     case soc_feature_vxlan:
   5892     case soc_feature_vrf_aware_vxlan_termination:
   5893     case soc_feature_l2gre:
   5894     case soc_feature_td2_l2gre:
   5895     case soc_feature_l2gre_default_tunnel:
   5896         return !l2_l3_only;
   5897     case soc_feature_multi_level_ecmp:
   5898     case soc_feature_ecmp_failover:
   5899     case soc_feature_ecmp_resilient_hash:
   5900     case soc_feature_l3_dynamic_ecmp_group:
   5901     case soc_feature_field_action_redirect_ecmp:
   5902         return (BCM56868_DEVICE_ID != dev_id);
   5903     case soc_feature_riot:
   5904         return (riot);
   5905     case soc_feature_asf:
   5906         return (asf);
   5907     case soc_feature_fcoe:
   5908     case soc_feature_nat:
   5909     case soc_feature_trill:
   5910     case soc_feature_trill_ttl:
   5911         return (dc_enable);
   5912     case soc_feature_td2p_ovstb_toggle:
   5913     case soc_feature_td2p_fp_sw_war:
   5914     case soc_feature_td2p_a0_sw_war:
   5915         return a0;
   5916     case soc_feature_vpd_profile:
   5917     case soc_feature_vlan_action:
   5918     case soc_feature_misc_i2e_hgclass_combo_profile:
   5919         return bypass_mode != SOC_SWITCH_BYPASS_MODE_L3_AND_FP;
   5920     case soc_feature_vector_based_spri:
   5921         return spri_vector;
   5922     case soc_feature_dcb_type33:
   5923     case soc_feature_xy_tcam_28nm:
   5924     case soc_feature_td2p_multi_modid:
   5925     case soc_feature_vlan_vfi_membership:
   5926     case soc_feature_vlan_filter:
   5927     case soc_feature_egr_vlan_control_is_memory:
   5928     case soc_feature_vlan_egress_membership_l3_only:
   5929     case soc_feature_meter_control_is_memory:
   5930     case soc_feature_shaper_control_is_memory:
   5931     case soc_feature_td2p_style_egr_outer_tpid:
   5932     case soc_feature_td2p_dvp_mirroring:
   5933     case soc_feature_my_station_2:
   5934     case soc_feature_l2_entry_used_as_my_station:
   5935     case soc_feature_ingress_dest_port_enable:
   5936     case soc_feature_llfc_force_xon:
   5937     case soc_feature_parity_injection_l2:
   5938     case soc_feature_egr_modport_to_nhi:
   5939     case soc_feature_rtag7_port_profile: 
   5940     case soc_feature_vfi_zero_invalid:
   5941     case soc_feature_egr_ipmc_cfg2_is_memory:
   5942     case soc_feature_vp_sharing:
   5943     case soc_feature_vfi_from_vlan_tables:
   5944     case soc_feature_egr_vlan_xlate_key_on_dvp:
   5945     case soc_feature_enable_lp: 
   5946     case soc_feature_pgw_mac_control_frame:
   5947     case soc_feature_pgw_mac_pfc_frame:
   5948     case soc_feature_hg_proxy_second_pass:
   5949     case soc_feature_robust_hash: 
   5950     case soc_feature_multi_next_hops_on_port:   
   5951     case soc_feature_use_flex_ctr_oam_lm:    
   5952     case soc_feature_ipmc_to_l2mc_table_size_2_to_3:
   5953     case soc_feature_advanced_flex_counter:
   5954     case soc_feature_separate_ing_lport_rtag7_profile:
   5955     case soc_feature_vfi_profile:
   5956     case soc_feature_vfi_combo_profile:
   5957     case soc_feature_higig_over_ethernet:
   5958     case soc_feature_no_higig_plus:
   5959     case soc_feature_key_type_valid_on_vp_vlan_membership:
   5960     case soc_feature_prigrp_to_obm_prio_map:
   5961     case soc_feature_ipmc_l2_use_vlan_vpn:
   5962     case soc_feature_ipmc_defip:
   5963     case soc_feature_egress_failover:
   5964     case soc_feature_ingress_failover:
   5965     case soc_feature_time_synce_divisor_setting:
   5966     case soc_feature_olp:
   5967     case soc_feature_turbo_boot:
   5968     case soc_feature_cpu_as_olp:
   5969     case soc_feature_management_port_lanes:
   5970     case soc_feature_tcam_shift:
   5971     case soc_feature_same_vlan_pruning_override:
   5972     case soc_feature_nh_ifp_action_src_dst_mac_swap:
   5973     case soc_feature_l2_use_l3_class_id:
   5974     case soc_feature_ing_vlan_xlate_second_lookup:
   5975     case soc_feature_l3_ecmp_4k_groups:
   5976     case soc_feature_dvp_2_config_required:
   5977     case soc_feature_vlan_xlate_has_class_id:
   5978     case soc_feature_l2_drop_mc_mac:
   5979     case soc_feature_hg_proxy_module_config:
   5980     case soc_feature_lls_port_mema_config_match:
   5981     case soc_feature_no_sw_rx_los:
   5982     case soc_feature_my_station_tcam_check:
   5983         return TRUE;
   5984     case soc_feature_dcb_type26:
   5985     case soc_feature_egr_vlan_check:
   5986     case soc_feature_cmic_reserved_queues: /* there are additional 6 Qs-no rsrv*/
   5987     case soc_feature_min_cell_per_queue:
   5988     /* SW based hash insert for L3_ENTRY tables is not required for TD2 Plus */
   5989     case soc_feature_shared_hash_ins:
   5990     case soc_feature_egr_dscp_map_per_port:
   5991     case soc_feature_l2_hw_aging_bug:
   5992     case soc_feature_pgw_mac_rsv_mask_remap:
   5993     case soc_feature_efp_meter_table_write_ignore_nack:
   5994     case soc_feature_mirror_rspan_no_mtp0:
   5995         return FALSE;
   5996 
   5997     case soc_feature_portmod:
   5998         return TRUE;
   5999     case soc_feature_reset_xlport_block_tsc12:
   6000         return TRUE;
   6001     /* This new feature is currently disabled, add once validated */
   6002     case soc_feature_egr_qos_combo_profile:
   6003         return TRUE;
   6004     case soc_feature_ptp:
   6005     case soc_feature_time_support:
   6006     case soc_feature_timesync_support:
   6007     case soc_feature_timesync_timestampingmode:
   6008     case soc_feature_uc_image_name_with_no_chip_rev:
   6009         return TRUE;
   6010     case soc_feature_field_stage_quarter_slice:
   6011     case soc_feature_field_quarter_slice_single_tcam:
   6012         return fp_stage_quarter_slice;
   6013     case soc_feature_alpm:
   6014         return alpm;
   6015     case soc_feature_alpm_flex_stat:
   6016     case soc_feature_alpm_flex_stat_v6_64:
   6017         return alpm && soc_property_get(unit, spn_ALPM_FLEX_STAT_SUPPORT, 0);
   6018     case soc_feature_no_l2_remote_trunk:
   6019         return TRUE;
   6020     case soc_feature_l3:
   6021     case soc_feature_l3x_parity:
   6022     case soc_feature_l3mtu_fail_tocpu:
   6023     case soc_feature_l3_shared_defip_table:
   6024     case soc_feature_l3_ip4_options_profile:
   6025     case soc_feature_l3_entry_key_type:
   6026     case soc_feature_l3_egr_intf_zero_invalid:
   6027     case soc_feature_l3_ingress_interface:
   6028     case soc_feature_l3_ip6:
   6029     case soc_feature_l3_lookup_cmd:
   6030     case soc_feature_l3_sgv:
   6031     case soc_feature_l3_ecmp_1k_groups:
   6032     case soc_feature_l3_extended_host_entry:
   6033     case soc_feature_l3_host_ecmp_group:
   6034     case soc_feature_l3_iif_profile:
   6035     case soc_feature_l3_iif_zero_invalid:
   6036     case soc_feature_l3_defip_map:
   6037     case soc_feature_nip_l3_err_tocpu:
   6038     case soc_feature_egr_l3_next_hop_next_ptr:
   6039     case soc_feature_ing_l3_next_hop_encoded_dest:
   6040     case soc_feature_repl_l3_intf_use_next_hop:
   6041     case soc_feature_lpm_tcam:
   6042     case soc_feature_subport:
   6043     case soc_feature_subport_enhanced:
   6044     case soc_feature_wesp:
   6045     case soc_feature_pim_bidir:
   6046     case soc_feature_virtual_port_routing:
   6047     case soc_feature_vp_lag:
   6048     case soc_feature_fp_based_oam: /* Oam feature based on FP */
   6049     case soc_feature_uc_ccm:
   6050     case soc_feature_niv:
   6051     case soc_feature_port_extension:
   6052         return (BCM56868_DEVICE_ID != dev_id);
   6053     case soc_feature_no_tunnel:
   6054         return (BCM56868_DEVICE_ID == dev_id);
   6055     case soc_feature_ukernel_debug:
   6056     case soc_feature_mpls_xgs5_nw_port_match:
   6057     case soc_feature_vlan_xlate_iif_with_dummy_vp:
   6058     case soc_feature_egr_vxlate_supports_dgpp:
   6059         return TRUE;
   6060     case soc_feature_alpm_hit_bits_not_support:
   6061         return (alpm_no_hit);
   6062     case soc_feature_xport_convertible:
   6063         if (fabric) {
   6064             return FALSE;
   6065         }
   6066         /* Fall through */
   6067     default:
   6068         return soc_features_bcm56850_a0(unit, feature);
   6069     }
   6070 }
   6071 #endif /* BCM_56860 */
   6072 
   6073 #ifdef  BCM_56560
   6074 /*
   6075  *  * BCM56560 A0
   6076  */
   6077 int
   6078 soc_features_bcm56560_a0(int unit, soc_feature_t feature)
   6079 {
   6080     SOC_FEATURE_DEBUG_PRINT((DK_VERBOSE," 56560_a0"));
   6081 
   6082     switch (feature) {
   6083     case soc_feature_clmac:
   6084     case soc_feature_tscf:
   6085     case soc_feature_dcb_type35:
   6086     case soc_feature_xy_tcam_28nm:
   6087     case soc_feature_cport_clmac:
   6088     case soc_feature_new_sbus_format:
   6089     case soc_feature_sbus_format_v4:
   6090     case soc_feature_iproc:
   6091     case soc_feature_cmicd_v2:
   6092     case soc_feature_cmicd_v3:
   6093     case soc_feature_multiple_split_horizon_group:
   6094     case soc_feature_mpls_entropy:
   6095     case soc_feature_mpls_segment_routing:
   6096     case soc_feature_mpls_frr_lookup:
   6097     case soc_feature_l3_tunnel_mode_fld_is_keytype:
   6098     case soc_feature_ep_redirect_v2:
   6099     case soc_feature_egr_mirror_true:
   6100     case soc_feature_advanced_flex_counter:
   6101     case soc_feature_flex_ctr_mpls_3_label_count:
   6102     case soc_feature_global_meter:
   6103     case soc_feature_global_meter_mef_10dot3:
   6104     case soc_feature_global_meter_macro_micro_same_pool:
   6105     case soc_feature_global_meter_pool_priority_descending:
   6106     case soc_feature_mpls_5_label_parsing:
   6107     case soc_feature_olp:
   6108     case soc_feature_cpu_as_olp:
   6109     case soc_feature_fp_based_oam:
   6110     case soc_feature_fp_based_sat:
   6111     case soc_feature_mpls_exp_to_phb_cng_map:
   6112     case soc_feature_fp_oam_drop_control:
   6113     case soc_feature_oam_pm:
   6114     case soc_feature_reserve_shg_network_port:
   6115     case soc_feature_cpureg_dump:
   6116     case soc_feature_egr_vlan_xlate_second_lookup:
   6117     case soc_feature_ptp:
   6118     case soc_feature_timesync_support:
   6119     case soc_feature_timesync_timestampingmode:
   6120     case soc_feature_time_support:
   6121     case soc_feature_time_v3:
   6122     case soc_feature_tdpll_outputclk_xgpll3:
   6123     case soc_feature_l3_tunnel_mpls_frr:
   6124     case soc_feature_cmicm:
   6125     case soc_feature_cmicm_extended_interrupts:
   6126     case soc_feature_uc:
   6127     case soc_feature_uc_mhost:
   6128     case soc_feature_l3_ecmp_4k_groups:
   6129     case soc_feature_mpls_entry_second_label_lookup:
   6130     case soc_feature_xlportb0:
   6131     case soc_feature_bhh:
   6132     case soc_feature_mpls_lm_dm:
   6133     case soc_feature_egr_vxlate_supports_dgpp:
   6134     case soc_feature_mpls_xgs5_nw_port_match:
   6135     case soc_feature_ctr_xaui_activity:
   6136     case soc_feature_egr_ipmc_mem_field_l3_payload_valid:
   6137     case soc_feature_int_common_init:
   6138     case soc_feature_vp_dscp_map:
   6139     case soc_feature_multi_tunnel_label_count:
   6140     case soc_feature_oam_split_counter_pools:
   6141     case soc_feature_egr_nh_class_id_valid:
   6142     case soc_feature_l3_tunnel_expanded_mod_mask:
   6143     case soc_feature_fp_qual_recovery_with_group_create:
   6144     case soc_feature_mmu_hqos_four_level:
   6145     case soc_feature_egr_ip_tnl_mpls_double_wide:
   6146     case soc_feature_oob_fc:
   6147     case soc_feature_pm_fc_merge_mode:
   6148     case soc_feature_no_sw_rx_los:
   6149     case soc_feature_l2_activity_freeze_ser:
   6150         return TRUE;
   6151     case soc_feature_dcb_type26:
   6152     case soc_feature_egr_vlan_check:
   6153     case soc_feature_cmic_reserved_queues: /* there are additional 6 Qs-no rsrv*/
   6154     case soc_feature_pgw_mac_rsv_mask_remap:
   6155     case soc_feature_wlan:
   6156     /* SW based hash insert for L3_ENTRY tables is not required */
   6157     case soc_feature_shared_hash_ins:
   6158     /* APACHE is a single pipe device */
   6159     case soc_feature_two_ingress_pipes:
   6160     case soc_feature_split_repl_group_table:
   6161     case soc_feature_dcb_type33:
   6162     case soc_feature_ipmc_to_l2mc_table_size_2_to_3:
   6163     case soc_feature_reset_xlport_block_tsc12:
   6164     case soc_feature_advanced_flex_counter_dual_pipe:
   6165     case soc_feature_tcam_shift:
   6166     case soc_feature_pgw_mac_control_frame:
   6167     case soc_feature_pgw_mac_pfc_frame:
   6168     case soc_feature_mcs:
   6169     case soc_feature_vlan_xlate_iif_with_dummy_vp:
   6170     case soc_feature_td2_style_l3_defip_cnt:
   6171         return FALSE;
   6172 
   6173     case soc_feature_portmod:
   6174 
   6175     case soc_feature_hierarchical_protection:
   6176         return TRUE;
   6177 
   6178     case soc_feature_hgproxy_subtag_coe:
   6179     case soc_feature_egr_lport_tab_profile:
   6180         return TRUE;
   6181 
   6182     /* Enabling Swap to Self feature*/
   6183     case soc_feature_mpls_swap_label_preserve:
   6184          return TRUE; 
   6185 
   6186     case soc_feature_mmu_3k_uc_queue : 
   6187     case soc_feature_mmu_1k_uc_queue : 
   6188          return FALSE; 
   6189 
   6190     case soc_feature_td2p_style_egr_outer_tpid:
   6191         return (SOC_SWITCH_BYPASS_MODE(unit) != SOC_SWITCH_BYPASS_MODE_L3_AND_FP);
   6192 
   6193     case soc_feature_untethered_otp:
   6194 #if 1
   6195         return (!SAL_BOOT_SIMULATION);
   6196 #endif
   6197 
   6198     case soc_feature_apache_ovst_toggle:
   6199         /*   True for A0/B0 parts */
   6200         return TRUE;
   6201 
   6202     case soc_feature_uc_image_name_with_no_chip_rev:
   6203         return TRUE;
   6204     default:
   6205         return soc_features_bcm56860_a0(unit, feature);
   6206     }
   6207 }
   6208 
   6209 /*
   6210  * BCM56560 B0
   6211  */
   6212 int
   6213 soc_features_bcm56560_b0(int unit, soc_feature_t feature)
   6214 {
   6215     uint16      dev_id;
   6216     uint8       rev_id;
   6217 
   6218     soc_cm_get_id(unit, &dev_id, &rev_id);
   6219 
   6220     switch (feature) {
   6221     case soc_feature_xlportb0:
   6222     case soc_feature_no_l2_remote_trunk:
   6223         return FALSE;
   6224     case soc_feature_clport_gen2:
   6225     case soc_feature_iddq_new_default:
   6226         return TRUE;
   6227     case soc_feature_apache_round_robin_fp_lag:
   6228         return TRUE;
   6229     case soc_feature_tdpll_outputclk_synce3:
   6230     case soc_feature_tdpll_outputclk_xgpll3:
   6231         return TRUE;
   6232     case soc_feature_mmu_repl_alloc_unfrag:
   6233         if (BCM56761_DEVICE_ID == dev_id) {
   6234             return TRUE;
   6235         } else {
   6236             return FALSE;
   6237         }
   6238     case soc_feature_defip_2_tcams_with_separate_rpf:
   6239        if ((BCM56069_DEVICE_ID == dev_id) || (BCM56761_DEVICE_ID == dev_id)) {
   6240             return TRUE;
   6241         } else {
   6242             return FALSE;
   6243         }
   6244     case soc_feature_l3_lpm_scaling_enable:
   6245         if (soc_property_get(unit, spn_L3_ALPM_ENABLE, 0)) {
   6246             return FALSE;
   6247         }
   6248        if ((BCM56069_DEVICE_ID == dev_id) || (BCM56761_DEVICE_ID == dev_id)) {
   6249             return TRUE;
   6250         } else {
   6251             if (soc_property_get(unit, spn_LPM_SCALING_ENABLE, 0)) {
   6252                 return TRUE;
   6253             }
   6254             return FALSE;
   6255         }
   6256     case soc_feature_l3_lpm_128b_entries_reserved:
   6257         if (soc_property_get(unit, spn_L3_ALPM_ENABLE, 0)) {
   6258             return FALSE;
   6259         }
   6260         if ((BCM56069_DEVICE_ID == dev_id) || (BCM56761_DEVICE_ID == dev_id)) {
   6261             return FALSE;
   6262         } else {
   6263             if (soc_property_get(unit, spn_LPM_SCALING_ENABLE, 0)) {
   6264                 if(soc_property_get(unit, spn_LPM_IPV6_128B_RESERVED, 1)) {
   6265                     return TRUE;
   6266                 }
   6267                 return FALSE;
   6268             }
   6269             return TRUE;
   6270         }
   6271 #ifdef SW_AUTONEG_SUPPORT        
   6272     case soc_feature_sw_autoneg:
   6273         return TRUE;    
   6274 #endif        
   6275     default:
   6276         return soc_features_bcm56560_a0(unit, feature);
   6277     }
   6278 
   6279     return TRUE;
   6280 }
   6281 
   6282 #endif /* BCM_56560 */
   6283 
   6284 #ifdef BCM_83207_A0
   6285 int
   6286 soc_features_bcm83207_a0(int unit, soc_feature_t feature)
   6287 {
   6288     COMPILER_REFERENCE(unit);
   6289     SOC_FEATURE_DEBUG_PRINT((DK_VERBOSE," 83207_a0"));
   6290 
   6291     /* Will be added later */
   6292     switch (feature) { 
   6293     /* General */ 
   6294     case soc_feature_cmicm: 
   6295     /* DMA */ 
   6296     case soc_feature_sbusdma: 
   6297     case soc_feature_dcb_type28: 
   6298     case soc_feature_cos_rx_dma: 
   6299     case soc_feature_tslam_dma: 
   6300     case soc_feature_table_dma: 
   6301     /* SCHAN */ 
   6302     case soc_feature_new_sbus_format: 
   6303     /* case soc_feature_sbus_format_v4:  */
   6304     case soc_feature_schan_hw_timeout: 
   6305     /* Interrupts */ 
   6306     /* case soc_feature_short_cmic_error:  */
   6307   
   6308 #if defined(PLISIM)
   6309         if (!SAL_BOOT_PLISIM)
   6310 #endif
   6311         {
   6312             return FALSE; 
   6313         }
   6314         return TRUE;
   6315     default: 
   6316         return FALSE; 
   6317     } 
   6318 
   6319     return TRUE;
   6320 }
   6321 #endif /* BCM_83207_A0 */
   6322 
   6323 #ifdef BCM_83208_A0
   6324 int
   6325 soc_features_bcm83208_a0(int unit, soc_feature_t feature)
   6326 {
   6327     COMPILER_REFERENCE(unit);
   6328     SOC_FEATURE_DEBUG_PRINT((DK_VERBOSE," 83208_a0"));
   6329 
   6330     /* Will be added later */
   6331     switch (feature) { 
   6332     /* General */ 
   6333     case soc_feature_cmicm: 
   6334     /* DMA */ 
   6335     case soc_feature_sbusdma: 
   6336     case soc_feature_dcb_type28: 
   6337     case soc_feature_cos_rx_dma: 
   6338     case soc_feature_tslam_dma: 
   6339     case soc_feature_table_dma: 
   6340     /* SCHAN */ 
   6341     case soc_feature_new_sbus_format: 
   6342     /* case soc_feature_sbus_format_v4:  */
   6343     case soc_feature_schan_hw_timeout: 
   6344     /* Interrupts */ 
   6345     /* case soc_feature_short_cmic_error:  */
   6346   
   6347 #if defined(PLISIM)
   6348         if (!SAL_BOOT_PLISIM)
   6349 #endif
   6350         {
   6351             return FALSE; 
   6352         }
   6353         return TRUE;
   6354     default: 
   6355         return FALSE; 
   6356     } 
   6357 
   6358     return TRUE;
   6359 }
   6360 #endif /* BCM_83208_A0 */
   6361 
   6362 #ifdef  BCM_56670
   6363 
   6364 /*
   6365  * BCM56560 B0
   6366  */
   6367 int
   6368 soc_features_bcm56670_a0(int unit, soc_feature_t feature)
   6369 {
   6370     int         rsvd1enable = 0;
   6371     uint16      dev_id;
   6372     uint8       rev_id;
   6373     uint32      vlan_tag = BCM_VLAN_INVALID;
   6374 
   6375     soc_cm_get_id(unit, &dev_id, &rev_id);
   6376     rsvd1enable = (dev_id == BCM56671_DEVICE_ID);
   6377 
   6378     switch (feature) {
   6379     case soc_feature_egr_lport_tab_profile:
   6380     case soc_feature_hgproxy_subtag_coe:
   6381     case soc_feature_riot:
   6382     case soc_feature_ep_redirect_v2:
   6383     case soc_feature_fcoe:
   6384     case soc_feature_field_ingress_two_slice_types:
   6385     case soc_feature_global_meter:
   6386     case soc_feature_advanced_flex_counter:
   6387     case soc_feature_alpm:
   6388     case soc_feature_vp_lag:
   6389     case soc_feature_trill:
   6390     case soc_feature_tunnel_6to4_secure:
   6391     case soc_feature_tunnel_gre:
   6392     case soc_feature_ing_vp_vlan_membership:
   6393     case soc_feature_egr_vp_vlan_membership:
   6394     case soc_feature_cxl_mib:
   6395     case soc_feature_l3_2k_defip_table:
   6396     case soc_feature_hierarchical_ecmp:
   6397     case soc_feature_l3_ecmp_2k_groups:
   6398     case soc_feature_l3_ecmp_4k_groups:
   6399     case soc_feature_service_queuing:
   6400     case soc_feature_endpoint_queuing:
   6401     case soc_feature_egr_mirror_true:
   6402     case soc_feature_xlportb0:
   6403     case soc_feature_clport_gen2:
   6404     case soc_feature_qcn:
   6405     case soc_feature_multi_level_ecmp:
   6406     case soc_feature_asf:
   6407     case soc_feature_misc_i2e_hgclass_combo_profile:
   6408     case soc_feature_mmu_hqos_four_level:
   6409     case soc_feature_oob_fc:
   6410     case soc_feature_bfd:
   6411     case soc_feature_bhh:
   6412     case soc_feature_mpls_lm_dm:
   6413     case soc_feature_oam_pm:
   6414  
   6415         return FALSE;
   6416     case soc_feature_rsvd1_intf:
   6417         return rsvd1enable;
   6418     case soc_feature_l3_iif_under_4k:
   6419     /* Monterey has only 512 groups.
   6420      * But enabling l3_ecmp_1k_groups to use the implementation.
   6421      * Max groups and max paths are restricted in respective macros.
   6422      */
   6423     case soc_feature_l3_ecmp_1k_groups:
   6424     case soc_feature_no_fp_data_qual_api_support:
   6425     case soc_feature_qos_profile:
   6426     case soc_feature_l3_iif_zero_invalid:
   6427     /* Monterey does not share l2mc with ipmc */
   6428     case soc_feature_l2mc_table_no_shared_ipmc:
   6429     case soc_feature_roe:
   6430     case soc_feature_xflow_macsec_poll_intr:
   6431     case soc_feature_preemption:
   6432     case soc_feature_preempt_mib_support:
   6433     case soc_feature_portmod:
   6434     case soc_feature_iddq_new_default:
   6435     case soc_feature_pm_refclk_master:
   6436     case soc_feature_obm_tpid_sync:
   6437     case soc_feature_ser_scrub_delay:
   6438     case soc_feature_apache_round_robin_fp_lag:
   6439     case soc_feature_monterey_a0_fp_sw_war:
   6440     case soc_feature_l3defip_rp_l3iif_resolve:
   6441         return TRUE;
   6442     case soc_feature_roe_custom:
   6443         if ((BCM56671_DEVICE_ID) == (dev_id)) {
   6444             return TRUE;
   6445         } else {
   6446             return FALSE;
   6447         }
   6448     case soc_feature_xflow_macsec:
   6449     case soc_feature_xflow_macsec_olp:
   6450         vlan_tag = soc_property_get(unit, spn_XFLOW_MACSEC_OLP_VLAN, BCM_VLAN_INVALID);
   6451         if(BCM_VLAN_VALID(vlan_tag)) {
   6452             return TRUE;
   6453         } else {
   6454             return FALSE;
   6455         }
   6456     case soc_feature_xflow_macsec_stat:
   6457         return FALSE;
   6458     case soc_feature_mont_roe_classid_sw_war:
   6459         return TRUE;
   6460     case soc_feature_rsvd4_support:
   6461         if ((BCM56671_DEVICE_ID) == (dev_id)) { 
   6462              return TRUE;
   6463         } else {
   6464              return FALSE;
   6465         }
   6466     default:
   6467        return soc_features_bcm56560_a0(unit, feature);
   6468     }
   6469 
   6470     return TRUE;
   6471 }
   6472 int
   6473 soc_features_bcm56670_b0(int unit, soc_feature_t feature)
   6474 {
   6475 
   6476     switch (feature) {
   6477         case soc_feature_xflow_macsec_poll_intr:
   6478             return FALSE;
   6479         case soc_feature_mont_roe_classid_sw_war:
   6480         case soc_feature_xflow_macsec_stat:
   6481         case soc_feature_monterey_b0_fp_sw_war:
   6482             return TRUE;
   6483 
   6484         default :
   6485             return soc_features_bcm56670_a0(unit, feature);
   6486     }
   6487 }
   6488 #endif /* BCM_56670 */
   6489 
   6490 /*
   6491  * Function:    soc_feature_init
   6492  * Purpose:     initialize features into the SOC_CONTROL cache
   6493  * Parameters:  unit    - the device
   6494  * Returns:     void
   6495  */
   6496 void
   6497 soc_feature_init(int unit)
   6498 {
   6499     soc_feature_t       f;
   6500 
   6501     assert(COUNTOF(soc_feature_name) == (soc_feature_count + 1));
   6502 
   6503     sal_memset(SOC_CONTROL(unit)->features, 0,
   6504                sizeof(SOC_CONTROL(unit)->features));
   6505     for (f = 0; f < soc_feature_count; f++) {
   6506         SOC_FEATURE_DEBUG_PRINT(("%s : ", soc_feature_name[f]));
   6507         if (SOC_DRIVER(unit)->feature(unit, f)) {
   6508             SOC_FEATURE_DEBUG_PRINT((" TRUE\n"));
   6509             SOC_FEATURE_SET(unit, f);
   6510         } else {
   6511             SOC_FEATURE_DEBUG_PRINT((" FALSE\n"));
   6512         }
   6513     }
   6514 #if 0
   6515 
   6516 #ifdef BCM_CMICX_SUPPORT
   6517     if (
   6518 #ifdef PLISIM
   6519         !SAL_BOOT_PLISIM &&
   6520 #endif
   6521        SOC_FEATURE_GET(unit, soc_feature_cmicm) && soc_is_cmicx(unit)) {
   6522         SOC_FEATURE_SET(unit, soc_feature_cmicx);
   6523         SOC_FEATURE_CLEAR(unit, soc_feature_cmicm);
   6524         /* Clear cmicm_multi_dma_cmc as in the case of cmicx we
   6525          * use soc_feature_cmicx for all our code checks. There are no
   6526          * legacy modes in the case case of cmicx. We will start
   6527          * with multi dma cmc.
   6528          */
   6529         SOC_FEATURE_CLEAR(unit, soc_feature_cmicm_multi_dma_cmc);
   6530         /* Once we detect that that we have cmicx as part of our
   6531          * platform, we disable dcb type 32 and enable type 36.
   6532          * Once we detect cmicx we shoudl sart using the dcb
   6533          * associated with cmicx and not use dcb format of
   6534          * tomahawk.
   6535          */
   6536         SOC_FEATURE_CLEAR(unit, soc_feature_dcb_type32);
   6537         SOC_FEATURE_SET(unit, soc_feature_dcb_type36);
   6538     }
   6539 #endif
   6540 #endif
   6541 }
   6542 
   6543 #ifdef BCM_TOMAHAWK_SUPPORT
   6544 int
   6545 soc_flex_counter_feature_init(int unit)
   6546 {
   6547     int rv = SOC_E_NONE;
   6548     uint8  rev_id = 0;
   6549     uint16 dev_id = 0;
   6550     uint32 rval = 0;
   6551     uint32 skew = 0;
   6552 
   6553     soc_cm_get_id(unit, &dev_id, &rev_id);
   6554 
   6555     if ((dev_id == BCM56168_DEVICE_ID) || (dev_id == BCM56169_DEVICE_ID)) {
   6556         SOC_IF_ERROR_RETURN(READ_TOP_DEV_REV_IDr(unit, &rval));
   6557         skew = soc_reg_field_get(unit, TOP_DEV_REV_IDr, rval, DEVICE_SKEWf);
   6558 
   6559         if (skew == 0x9) {
   6560             SOC_FEATURE_SET(unit, soc_feature_advanced_flex_counter);
   6561             SOC_FEATURE_SET(unit, soc_feature_centralized_counter);
   6562             SOC_FEATURE_SET(unit, soc_feature_counter_eviction);
   6563         }
   6564     }
   6565 
   6566     return rv;
   6567 }
   6568 #endif