#
# $Id: jer.soc,v 1.90 2013/08/14 08:32:00 ninash Exp $
#
# $Copyright: (c) 2011 Broadcom Corporation
# All Rights Reserved.$
#

debug info
debug appl rcload warn
debug appl symtab warn
debug bcm rx,tx,link,attach warn
debug soc tests warn
debug soc rx,phy,schan,reg,socmem,dma,mem,miim,mii,intr,counter,ddr warn
debug soc common err
debug sys verinet warn
debug soc physim warn

if $?QMX_A0 || $?BCM88370_A0 || $?BCM88371_A0 || $?BCM88371M_A0 || $?BCM88375_A0 || $?BCM88376_A0 || $?BCM88376M_A0 || $?BCM88377_A0 || $?BCM88378_A0 || $?BCM88379_A0 || \
   $?QMX_A1 || $?BCM88370_A1 || $?BCM88371_A1 || $?BCM88371M_A1 || $?BCM88375_A1 || $?BCM88376_A1 || $?BCM88376M_A1 || $?BCM88377_A1 || $?BCM88378_A1 || $?BCM88379_A1 ||\
   $?QMX_B0 || $?BCM88370_B0 || $?BCM88371_B0 || $?BCM88371M_B0 || $?BCM88375_B0 || $?BCM88376_B0 || $?BCM88376M_B0 || $?BCM88377_B0 || $?BCM88378_B0 || $?BCM88379_B0  \
   'local QMX 1'
if $?JERICHO_A0 || $?BCM88670_A0 || $?BCM88671_A0 || $?BCM88671M_A0 || $?BCM88672_A0 || $?BCM88673_A0 || $?BCM88674_A0 || $?BCM88675_A0 || $?BCM88675M_A0 || $?BCM88676_A0 || $?BCM88676M_A0 || $?BCM88678_A0 || $?BCM88679_A0 || \
   $?JERICHO_A1 || $?BCM88670_A1 || $?BCM88671_A1 || $?BCM88671M_A1 || $?BCM88672_A1 || $?BCM88673_A1 || $?BCM88674_A1 || $?BCM88675_A1 || $?BCM88675M_A1 || $?BCM88676_A1 || $?BCM88676M_A1 || $?BCM88678_A1 || $?BCM88679_A1 || \
   $?JERICHO_B0 || $?BCM88670_B0 || $?BCM88671_B0 || $?BCM88671M_B0 || $?BCM88672_B0 || $?BCM88673_B0 || $?BCM88674_B0 || $?BCM88675_B0 || $?BCM88675M_B0 || $?BCM88676_B0 || $?BCM88676M_B0 || $?BCM88678_B0 || $?BCM88679_B0 \
   'local JERICHO 1'
if $?BCM88680_A0 ||  $?BCM88681_A0 ||  $?BCM88682_A0 || $?BCM88683_A0 ||  $?BCM88380_A0 ||  $?BCM88381_A0 \
   'local JERPLUS 1'

if $?BCM88690_A0 \
   'local JERTWO 1'

if $?QMX \
    'rcload bcm88375_board.soc'
if $?JERICHO \
    'rcload bcm88675_board.soc'

if $?JERPLUS \
    'rcload bcm88680_board.soc'

#
# For Jericho-2:
# This will have to change when we have bcm88690_board.soc
#
if $?JERTWO \
    'rcload bcm88680_board.soc'

# Load DRAM tuning properties from local File. RcLoad will not fail if file not found, and will not show errors of missing file.
set RCError=off
debug appl shell warn
if $?QMX \
    'rcload /home/negev/bcm88375_dram_tune.soc'

if $?JERICHO \
    'rcload /home/negev/bcm88675_dram_tune.soc'

debug appl shell =
set RCError=on

set RCError=off
rcload combo28_dram.soc
set RCError=on

#Set fabric connect mode as FE for multi FAP system
if $?diag_chassis " \
   config add fabric_connect_mode.BCM88675=FE"

# Set modid:
# If diag_chassis is enabled (two line cards), and 'slot' is defined (slot is defined only when
# working without a management card - set modid to be 'slot'
# Otherwise (single line card, or management card), set modid to be 0 for unit 0, and 1 for unit != 0
if $?diag_chassis && $?slot "\
  local modid $slot" \
else "\
  local modid $unit"
expr $modid==1; if $? "local modid 2"

if $?module_id " \
  local modid $module_id"

echo "$unit: modid=$modid"

# Set base_modid:
# Id base_module_id is set, then set base_modid to have base_module_id value.
# Otherwise, set base_modid to be 0.
if $?base_module_id " \
  local base_modid $base_module_id" \
else " \
  local base_modid 0"

expr $base_modid > 0
if $? " \
  echo '$unit: base_modid=$base_modid'"

if $?diag_chassis " \
  local nof_devices 2" \
else "\
  local nof_devices 1"

if $?n_devices " \
  local nof_devices $n_devices"

expr $nof_devices > 1
if $? " \
  echo '$unit: nof_devices=$nof_devices'"

if $?mng_cpu " \
  echo '$unit:management card - polling is set on'; \
  config add polled_irq_mode.BCM88675=1; \
  config add schan_intr_enable.BCM88675=0; \
  config add tdma_intr_enable.BCM88675=0; \
  config add tslam_intr_enable.BCM88675=0; \
  config add miim_intr_enable.BCM88675=0; "

#Counters unavailable in cmodel
if $?cmodel " \
  config add counter_engine_sampling_interval=0;"

#default values in a case which these parameters are not exist
if !$?diag_cosq_disable "\
  local diag_cosq_disable 0"
if !$?warmboot "\
  local warmboot 0"
if !$?diag_disable "\
  local diag_disable 0"
if !$?diag_no_itmh_prog_mode "\
  local diag_no_itmh_prog_mode 0"
if !$?l2_mode "\
  local l2_mode 0"

if $?JERPLUS "\
  local diag_disable 0"
local init_others NoLinkscan=0
if $?JERPLUS "\
  local init_others 'NoIntr=1 NoLinkscan=1 NoApplStk=0'"

#Disable interrupts in cmodel
if $?cmodel "\
  local no_intr 1" \
else "\
  local no_intr 0"

#
# For Jericho-2, we TEMPORARILY disable some components to quickly enable
# a working PCID version.
# 
if $?JERTWO "\
  local no_soc 0"

if $?JERTWO "\
  local no_intr 1"


#INIT_DNX ModID=$modid NofDevices=$nof_devices CosqDisable=$diag_cosq_disable NoAppl=$diag_disable Warmboot=$warmboot NoRxLos=1 $init_others NoItmhProgMode=$diag_no_itmh_prog_mode L2Mode=$l2_mode NoIntr=$no_intr NoSoc=$no_soc

INIT_DNX

#LED support section start
#Program of LED0
local ledcode_0 '02 05 67 2D 02 01 67 2D 02 11 67 2D 02 09 67 2D\
 02 15 67 2D 02 0D 67 2D 86 E0 3A 06 28 32 00 32\
 01 B7 97 75 3E 16 E0 CA 06 70 3E 77 3A 67 33 75\
 3A 77 1C 12 A0 F8 15 1A 00 57 32 0E 87 57 32 0F\
 87 57' #sdk88670.hex

#Program of LED1
local ledcode_1 '02 1D 67 2D 02 2D 67 2D 02 05 67 2D 02 0D 67 2D\
 02 09 67 2D 02 01 67 2D 86 E0 3A 06 28 32 00 32\
 01 B7 97 75 3E 16 E0 CA 06 70 3E 77 3A 67 33 75\
 3A 77 1C 12 A0 F8 15 1A 00 57 32 0E 87 57 32 0F\
 87 57' #sdk88670.hex


#Program of LED2
local ledcode_2 '02 01 67 2D 02 09 67 2D 02 0D 67 2D 02 05 67 2D\
 02 2D 67 2D 02 1D 67 2D 86 E0 3A 06 28 32 00 32\
 01 B7 97 75 3E 16 E0 CA 06 70 3E 77 3A 67 33 75\
 3A 77 1C 12 A0 F8 15 1A 00 57 32 0E 87 57 32 0F\
 87 57' #sdk88670.hex

# Download LED code into LED processors and enable (if applicable).
if $?feature_led_proc && !$?simulator \
    "led 0 prog $ledcode_0; \
     led 1 prog $ledcode_1; \
     led 2 prog $ledcode_2; \
     led auto on; \
     led 0 start; \
     led 1 start; \
     led 2 start"


echo "dnx.soc: Done............................."

