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