1*6706b115SCodrin Ciubotariu /* 2*6706b115SCodrin Ciubotariu * vsc9953.h 3*6706b115SCodrin Ciubotariu * 4*6706b115SCodrin Ciubotariu * Driver for the Vitesse VSC9953 L2 Switch 5*6706b115SCodrin Ciubotariu * 6*6706b115SCodrin Ciubotariu * This software may be used and distributed according to the 7*6706b115SCodrin Ciubotariu * terms of the GNU Public License, Version 2, incorporated 8*6706b115SCodrin Ciubotariu * herein by reference. 9*6706b115SCodrin Ciubotariu * 10*6706b115SCodrin Ciubotariu * Copyright 2013 Freescale Semiconductor, Inc. 11*6706b115SCodrin Ciubotariu * 12*6706b115SCodrin Ciubotariu */ 13*6706b115SCodrin Ciubotariu 14*6706b115SCodrin Ciubotariu #ifndef _VSC9953_H_ 15*6706b115SCodrin Ciubotariu #define _VSC9953_H_ 16*6706b115SCodrin Ciubotariu 17*6706b115SCodrin Ciubotariu #include <config.h> 18*6706b115SCodrin Ciubotariu #include <miiphy.h> 19*6706b115SCodrin Ciubotariu #include <asm/types.h> 20*6706b115SCodrin Ciubotariu #include <malloc.h> 21*6706b115SCodrin Ciubotariu 22*6706b115SCodrin Ciubotariu #define VSC9953_OFFSET (CONFIG_SYS_CCSRBAR_DEFAULT + 0x800000) 23*6706b115SCodrin Ciubotariu 24*6706b115SCodrin Ciubotariu #define VSC9953_SYS_OFFSET 0x010000 25*6706b115SCodrin Ciubotariu #define VSC9953_DEV_GMII_OFFSET 0x100000 26*6706b115SCodrin Ciubotariu #define VSC9953_QSYS_OFFSET 0x200000 27*6706b115SCodrin Ciubotariu #define VSC9953_ANA_OFFSET 0x280000 28*6706b115SCodrin Ciubotariu #define VSC9953_DEVCPU_GCB 0x070000 29*6706b115SCodrin Ciubotariu #define VSC9953_ES0 0x040000 30*6706b115SCodrin Ciubotariu #define VSC9953_IS1 0x050000 31*6706b115SCodrin Ciubotariu #define VSC9953_IS2 0x060000 32*6706b115SCodrin Ciubotariu 33*6706b115SCodrin Ciubotariu #define T1040_SWITCH_GMII_DEV_OFFSET 0x010000 34*6706b115SCodrin Ciubotariu #define VSC9953_PHY_REGS_OFFST 0x0000AC 35*6706b115SCodrin Ciubotariu 36*6706b115SCodrin Ciubotariu #define CONFIG_VSC9953_SOFT_SWC_RST_ENA 0x00000001 37*6706b115SCodrin Ciubotariu #define CONFIG_VSC9953_CORE_ENABLE 0x80 38*6706b115SCodrin Ciubotariu #define CONFIG_VSC9953_MEM_ENABLE 0x40 39*6706b115SCodrin Ciubotariu #define CONFIG_VSC9953_MEM_INIT 0x20 40*6706b115SCodrin Ciubotariu 41*6706b115SCodrin Ciubotariu #define CONFIG_VSC9953_PORT_ENA 0x00003a00 42*6706b115SCodrin Ciubotariu #define CONFIG_VSC9953_MAC_ENA_CFG 0x00000011 43*6706b115SCodrin Ciubotariu #define CONFIG_VSC9953_MAC_MODE_CFG 0x00000011 44*6706b115SCodrin Ciubotariu #define CONFIG_VSC9953_MAC_IFG_CFG 0x00000515 45*6706b115SCodrin Ciubotariu #define CONFIG_VSC9953_MAC_HDX_CFG 0x00001043 46*6706b115SCodrin Ciubotariu #define CONFIG_VSC9953_CLOCK_CFG 0x00000001 47*6706b115SCodrin Ciubotariu #define CONFIG_VSC9953_CLOCK_CFG_1000M 0x00000001 48*6706b115SCodrin Ciubotariu #define CONFIG_VSC9953_PFC_FC 0x00000001 49*6706b115SCodrin Ciubotariu #define CONFIG_VSC9953_PFC_FC_QSGMII 0x00000000 50*6706b115SCodrin Ciubotariu #define CONFIG_VSC9953_MAC_FC_CFG 0x04700000 51*6706b115SCodrin Ciubotariu #define CONFIG_VSC9953_MAC_FC_CFG_QSGMII 0x00700000 52*6706b115SCodrin Ciubotariu #define CONFIG_VSC9953_PAUSE_CFG 0x001ffffe 53*6706b115SCodrin Ciubotariu #define CONFIG_VSC9953_TOT_TAIL_DROP_LVL 0x000003ff 54*6706b115SCodrin Ciubotariu #define CONFIG_VSC9953_FRONT_PORT_MODE 0x00000000 55*6706b115SCodrin Ciubotariu #define CONFIG_VSC9953_MAC_MAX_LEN 0x000005ee 56*6706b115SCodrin Ciubotariu 57*6706b115SCodrin Ciubotariu #define CONFIG_VSC9953_VCAP_MV_CFG 0x0000ffff 58*6706b115SCodrin Ciubotariu #define CONFIG_VSC9953_VCAP_UPDATE_CTRL 0x01000004 59*6706b115SCodrin Ciubotariu #define VSC9953_MAX_PORTS 10 60*6706b115SCodrin Ciubotariu #define VSC9953_PORT_CHECK(port) \ 61*6706b115SCodrin Ciubotariu (((port) < 0 || (port) >= VSC9953_MAX_PORTS) ? 0 : 1) 62*6706b115SCodrin Ciubotariu #define VSC9953_INTERNAL_PORT_CHECK(port) ( \ 63*6706b115SCodrin Ciubotariu ( \ 64*6706b115SCodrin Ciubotariu (port) < VSC9953_MAX_PORTS - 2 || (port) >= VSC9953_MAX_PORTS \ 65*6706b115SCodrin Ciubotariu ) ? 0 : 1 \ 66*6706b115SCodrin Ciubotariu ) 67*6706b115SCodrin Ciubotariu 68*6706b115SCodrin Ciubotariu #define DEFAULT_VSC9953_MDIO_NAME "VSC9953_MDIO0" 69*6706b115SCodrin Ciubotariu 70*6706b115SCodrin Ciubotariu #define MIIMIND_OPR_PEND 0x00000004 71*6706b115SCodrin Ciubotariu 72*6706b115SCodrin Ciubotariu struct vsc9953_mdio_info { 73*6706b115SCodrin Ciubotariu struct vsc9953_mii_mng *regs; 74*6706b115SCodrin Ciubotariu char *name; 75*6706b115SCodrin Ciubotariu }; 76*6706b115SCodrin Ciubotariu 77*6706b115SCodrin Ciubotariu /* VSC9953 ANA structure for T1040 U-boot*/ 78*6706b115SCodrin Ciubotariu 79*6706b115SCodrin Ciubotariu struct vsc9953_ana_port { 80*6706b115SCodrin Ciubotariu u32 vlan_cfg; 81*6706b115SCodrin Ciubotariu u32 drop_cfg; 82*6706b115SCodrin Ciubotariu u32 qos_cfg; 83*6706b115SCodrin Ciubotariu u32 vcap_cfg; 84*6706b115SCodrin Ciubotariu u32 vcap_s1_key_cfg[3]; 85*6706b115SCodrin Ciubotariu u32 vcap_s2_cfg; 86*6706b115SCodrin Ciubotariu u32 qos_pcp_dei_map_cfg[16]; 87*6706b115SCodrin Ciubotariu u32 cpu_fwd_cfg; 88*6706b115SCodrin Ciubotariu u32 cpu_fwd_bpdu_cfg; 89*6706b115SCodrin Ciubotariu u32 cpu_fwd_garp_cfg; 90*6706b115SCodrin Ciubotariu u32 cpu_fwd_ccm_cfg; 91*6706b115SCodrin Ciubotariu u32 port_cfg; 92*6706b115SCodrin Ciubotariu u32 pol_cfg; 93*6706b115SCodrin Ciubotariu u32 reserved[34]; 94*6706b115SCodrin Ciubotariu }; 95*6706b115SCodrin Ciubotariu 96*6706b115SCodrin Ciubotariu struct vsc9953_ana_pol { 97*6706b115SCodrin Ciubotariu u32 pol_pir_cfg; 98*6706b115SCodrin Ciubotariu u32 pol_cir_cfg; 99*6706b115SCodrin Ciubotariu u32 pol_mode_cfg; 100*6706b115SCodrin Ciubotariu u32 pol_pir_state; 101*6706b115SCodrin Ciubotariu u32 pol_cir_state; 102*6706b115SCodrin Ciubotariu u32 reserved1[3]; 103*6706b115SCodrin Ciubotariu }; 104*6706b115SCodrin Ciubotariu 105*6706b115SCodrin Ciubotariu struct vsc9953_ana_ana_tables { 106*6706b115SCodrin Ciubotariu u32 entry_lim[11]; 107*6706b115SCodrin Ciubotariu u32 an_moved; 108*6706b115SCodrin Ciubotariu u32 mach_data; 109*6706b115SCodrin Ciubotariu u32 macl_data; 110*6706b115SCodrin Ciubotariu u32 mac_access; 111*6706b115SCodrin Ciubotariu u32 mact_indx; 112*6706b115SCodrin Ciubotariu u32 vlan_access; 113*6706b115SCodrin Ciubotariu u32 vlan_tidx; 114*6706b115SCodrin Ciubotariu }; 115*6706b115SCodrin Ciubotariu 116*6706b115SCodrin Ciubotariu struct vsc9953_ana_ana { 117*6706b115SCodrin Ciubotariu u32 adv_learn; 118*6706b115SCodrin Ciubotariu u32 vlan_mask; 119*6706b115SCodrin Ciubotariu u32 anag_efil; 120*6706b115SCodrin Ciubotariu u32 an_events; 121*6706b115SCodrin Ciubotariu u32 storm_limit_burst; 122*6706b115SCodrin Ciubotariu u32 storm_limit_cfg[4]; 123*6706b115SCodrin Ciubotariu u32 isolated_prts; 124*6706b115SCodrin Ciubotariu u32 community_ports; 125*6706b115SCodrin Ciubotariu u32 auto_age; 126*6706b115SCodrin Ciubotariu u32 mac_options; 127*6706b115SCodrin Ciubotariu u32 learn_disc; 128*6706b115SCodrin Ciubotariu u32 agen_ctrl; 129*6706b115SCodrin Ciubotariu u32 mirror_ports; 130*6706b115SCodrin Ciubotariu u32 emirror_ports; 131*6706b115SCodrin Ciubotariu u32 flooding; 132*6706b115SCodrin Ciubotariu u32 flooding_ipmc; 133*6706b115SCodrin Ciubotariu u32 sflow_cfg[11]; 134*6706b115SCodrin Ciubotariu u32 port_mode[12]; 135*6706b115SCodrin Ciubotariu }; 136*6706b115SCodrin Ciubotariu 137*6706b115SCodrin Ciubotariu struct vsc9953_ana_pgid { 138*6706b115SCodrin Ciubotariu u32 port_grp_id[91]; 139*6706b115SCodrin Ciubotariu }; 140*6706b115SCodrin Ciubotariu 141*6706b115SCodrin Ciubotariu struct vsc9953_ana_pfc { 142*6706b115SCodrin Ciubotariu u32 pfc_cfg; 143*6706b115SCodrin Ciubotariu u32 reserved1[15]; 144*6706b115SCodrin Ciubotariu }; 145*6706b115SCodrin Ciubotariu 146*6706b115SCodrin Ciubotariu struct vsc9953_ana_pol_misc { 147*6706b115SCodrin Ciubotariu u32 pol_flowc[10]; 148*6706b115SCodrin Ciubotariu u32 reserved1[17]; 149*6706b115SCodrin Ciubotariu u32 pol_hyst; 150*6706b115SCodrin Ciubotariu }; 151*6706b115SCodrin Ciubotariu 152*6706b115SCodrin Ciubotariu struct vsc9953_ana_common { 153*6706b115SCodrin Ciubotariu u32 aggr_cfg; 154*6706b115SCodrin Ciubotariu u32 cpuq_cfg; 155*6706b115SCodrin Ciubotariu u32 cpuq_8021_cfg; 156*6706b115SCodrin Ciubotariu u32 dscp_cfg; 157*6706b115SCodrin Ciubotariu u32 dscp_rewr_cfg; 158*6706b115SCodrin Ciubotariu u32 vcap_rng_type_cfg; 159*6706b115SCodrin Ciubotariu u32 vcap_rng_val_cfg; 160*6706b115SCodrin Ciubotariu u32 discard_cfg; 161*6706b115SCodrin Ciubotariu u32 fid_cfg; 162*6706b115SCodrin Ciubotariu }; 163*6706b115SCodrin Ciubotariu 164*6706b115SCodrin Ciubotariu struct vsc9953_analyzer { 165*6706b115SCodrin Ciubotariu struct vsc9953_ana_port port[11]; 166*6706b115SCodrin Ciubotariu u32 reserved1[9536]; 167*6706b115SCodrin Ciubotariu struct vsc9953_ana_pol pol[164]; 168*6706b115SCodrin Ciubotariu struct vsc9953_ana_ana_tables ana_tables; 169*6706b115SCodrin Ciubotariu u32 reserved2[14]; 170*6706b115SCodrin Ciubotariu struct vsc9953_ana_ana ana; 171*6706b115SCodrin Ciubotariu u32 reserved3[22]; 172*6706b115SCodrin Ciubotariu struct vsc9953_ana_pgid port_id_tbl; 173*6706b115SCodrin Ciubotariu u32 reserved4[549]; 174*6706b115SCodrin Ciubotariu struct vsc9953_ana_pfc pfc[10]; 175*6706b115SCodrin Ciubotariu struct vsc9953_ana_pol_misc pol_misc; 176*6706b115SCodrin Ciubotariu u32 reserved5[196]; 177*6706b115SCodrin Ciubotariu struct vsc9953_ana_common common; 178*6706b115SCodrin Ciubotariu }; 179*6706b115SCodrin Ciubotariu /* END VSC9953 ANA structure for T1040 U-boot*/ 180*6706b115SCodrin Ciubotariu 181*6706b115SCodrin Ciubotariu /* VSC9953 DEV_GMII structure for T1040 U-boot*/ 182*6706b115SCodrin Ciubotariu 183*6706b115SCodrin Ciubotariu struct vsc9953_dev_gmii_port_mode { 184*6706b115SCodrin Ciubotariu u32 clock_cfg; 185*6706b115SCodrin Ciubotariu u32 port_misc; 186*6706b115SCodrin Ciubotariu u32 reserved1; 187*6706b115SCodrin Ciubotariu u32 eee_cfg; 188*6706b115SCodrin Ciubotariu }; 189*6706b115SCodrin Ciubotariu 190*6706b115SCodrin Ciubotariu struct vsc9953_dev_gmii_mac_cfg_status { 191*6706b115SCodrin Ciubotariu u32 mac_ena_cfg; 192*6706b115SCodrin Ciubotariu u32 mac_mode_cfg; 193*6706b115SCodrin Ciubotariu u32 mac_maxlen_cfg; 194*6706b115SCodrin Ciubotariu u32 mac_tags_cfg; 195*6706b115SCodrin Ciubotariu u32 mac_adv_chk_cfg; 196*6706b115SCodrin Ciubotariu u32 mac_ifg_cfg; 197*6706b115SCodrin Ciubotariu u32 mac_hdx_cfg; 198*6706b115SCodrin Ciubotariu u32 mac_fc_mac_low_cfg; 199*6706b115SCodrin Ciubotariu u32 mac_fc_mac_high_cfg; 200*6706b115SCodrin Ciubotariu u32 mac_sticky; 201*6706b115SCodrin Ciubotariu }; 202*6706b115SCodrin Ciubotariu 203*6706b115SCodrin Ciubotariu struct vsc9953_dev_gmii { 204*6706b115SCodrin Ciubotariu struct vsc9953_dev_gmii_port_mode port_mode; 205*6706b115SCodrin Ciubotariu struct vsc9953_dev_gmii_mac_cfg_status mac_cfg_status; 206*6706b115SCodrin Ciubotariu }; 207*6706b115SCodrin Ciubotariu 208*6706b115SCodrin Ciubotariu /* END VSC9953 DEV_GMII structure for T1040 U-boot*/ 209*6706b115SCodrin Ciubotariu 210*6706b115SCodrin Ciubotariu /* VSC9953 QSYS structure for T1040 U-boot*/ 211*6706b115SCodrin Ciubotariu 212*6706b115SCodrin Ciubotariu struct vsc9953_qsys_hsch { 213*6706b115SCodrin Ciubotariu u32 cir_cfg; 214*6706b115SCodrin Ciubotariu u32 reserved1; 215*6706b115SCodrin Ciubotariu u32 se_cfg; 216*6706b115SCodrin Ciubotariu u32 se_dwrr_cfg[8]; 217*6706b115SCodrin Ciubotariu u32 cir_state; 218*6706b115SCodrin Ciubotariu u32 reserved2[20]; 219*6706b115SCodrin Ciubotariu }; 220*6706b115SCodrin Ciubotariu 221*6706b115SCodrin Ciubotariu struct vsc9953_qsys_sys { 222*6706b115SCodrin Ciubotariu u32 port_mode[12]; 223*6706b115SCodrin Ciubotariu u32 switch_port_mode[11]; 224*6706b115SCodrin Ciubotariu u32 stat_cnt_cfg; 225*6706b115SCodrin Ciubotariu u32 eee_cfg[10]; 226*6706b115SCodrin Ciubotariu u32 eee_thrs; 227*6706b115SCodrin Ciubotariu u32 igr_no_sharing; 228*6706b115SCodrin Ciubotariu u32 egr_no_sharing; 229*6706b115SCodrin Ciubotariu u32 sw_status[11]; 230*6706b115SCodrin Ciubotariu u32 ext_cpu_cfg; 231*6706b115SCodrin Ciubotariu u32 cpu_group_map; 232*6706b115SCodrin Ciubotariu u32 reserved1[23]; 233*6706b115SCodrin Ciubotariu }; 234*6706b115SCodrin Ciubotariu 235*6706b115SCodrin Ciubotariu struct vsc9953_qsys_qos_cfg { 236*6706b115SCodrin Ciubotariu u32 red_profile[16]; 237*6706b115SCodrin Ciubotariu u32 res_qos_mode; 238*6706b115SCodrin Ciubotariu }; 239*6706b115SCodrin Ciubotariu 240*6706b115SCodrin Ciubotariu struct vsc9953_qsys_drop_cfg { 241*6706b115SCodrin Ciubotariu u32 egr_drop_mode; 242*6706b115SCodrin Ciubotariu }; 243*6706b115SCodrin Ciubotariu 244*6706b115SCodrin Ciubotariu struct vsc9953_qsys_mmgt { 245*6706b115SCodrin Ciubotariu u32 eq_cntrl; 246*6706b115SCodrin Ciubotariu u32 reserved1; 247*6706b115SCodrin Ciubotariu }; 248*6706b115SCodrin Ciubotariu 249*6706b115SCodrin Ciubotariu struct vsc9953_qsys_hsch_misc { 250*6706b115SCodrin Ciubotariu u32 hsch_misc_cfg; 251*6706b115SCodrin Ciubotariu u32 reserved1[546]; 252*6706b115SCodrin Ciubotariu }; 253*6706b115SCodrin Ciubotariu 254*6706b115SCodrin Ciubotariu struct vsc9953_qsys_res_ctrl { 255*6706b115SCodrin Ciubotariu u32 res_cfg; 256*6706b115SCodrin Ciubotariu u32 res_stat; 257*6706b115SCodrin Ciubotariu 258*6706b115SCodrin Ciubotariu }; 259*6706b115SCodrin Ciubotariu 260*6706b115SCodrin Ciubotariu struct vsc9953_qsys_reg { 261*6706b115SCodrin Ciubotariu struct vsc9953_qsys_hsch hsch[108]; 262*6706b115SCodrin Ciubotariu struct vsc9953_qsys_sys sys; 263*6706b115SCodrin Ciubotariu struct vsc9953_qsys_qos_cfg qos_cfg; 264*6706b115SCodrin Ciubotariu struct vsc9953_qsys_drop_cfg drop_cfg; 265*6706b115SCodrin Ciubotariu struct vsc9953_qsys_mmgt mmgt; 266*6706b115SCodrin Ciubotariu struct vsc9953_qsys_hsch_misc hsch_misc; 267*6706b115SCodrin Ciubotariu struct vsc9953_qsys_res_ctrl res_ctrl[1024]; 268*6706b115SCodrin Ciubotariu }; 269*6706b115SCodrin Ciubotariu 270*6706b115SCodrin Ciubotariu /* END VSC9953 QSYS structure for T1040 U-boot*/ 271*6706b115SCodrin Ciubotariu 272*6706b115SCodrin Ciubotariu /* VSC9953 SYS structure for T1040 U-boot*/ 273*6706b115SCodrin Ciubotariu 274*6706b115SCodrin Ciubotariu struct vsc9953_sys_stat { 275*6706b115SCodrin Ciubotariu u32 rx_cntrs[64]; 276*6706b115SCodrin Ciubotariu u32 tx_cntrs[64]; 277*6706b115SCodrin Ciubotariu u32 drop_cntrs[64]; 278*6706b115SCodrin Ciubotariu u32 reserved1[6]; 279*6706b115SCodrin Ciubotariu }; 280*6706b115SCodrin Ciubotariu 281*6706b115SCodrin Ciubotariu struct vsc9953_sys_sys { 282*6706b115SCodrin Ciubotariu u32 reset_cfg; 283*6706b115SCodrin Ciubotariu u32 reserved1; 284*6706b115SCodrin Ciubotariu u32 vlan_etype_cfg; 285*6706b115SCodrin Ciubotariu u32 port_mode[12]; 286*6706b115SCodrin Ciubotariu u32 front_port_mode[10]; 287*6706b115SCodrin Ciubotariu u32 frame_aging; 288*6706b115SCodrin Ciubotariu u32 stat_cfg; 289*6706b115SCodrin Ciubotariu u32 reserved2[50]; 290*6706b115SCodrin Ciubotariu }; 291*6706b115SCodrin Ciubotariu 292*6706b115SCodrin Ciubotariu struct vsc9953_sys_pause_cfg { 293*6706b115SCodrin Ciubotariu u32 pause_cfg[11]; 294*6706b115SCodrin Ciubotariu u32 pause_tot_cfg; 295*6706b115SCodrin Ciubotariu u32 tail_drop_level[11]; 296*6706b115SCodrin Ciubotariu u32 tot_tail_drop_lvl; 297*6706b115SCodrin Ciubotariu u32 mac_fc_cfg[10]; 298*6706b115SCodrin Ciubotariu }; 299*6706b115SCodrin Ciubotariu 300*6706b115SCodrin Ciubotariu struct vsc9953_sys_mmgt { 301*6706b115SCodrin Ciubotariu u16 free_cnt; 302*6706b115SCodrin Ciubotariu }; 303*6706b115SCodrin Ciubotariu 304*6706b115SCodrin Ciubotariu struct vsc9953_system_reg { 305*6706b115SCodrin Ciubotariu struct vsc9953_sys_stat stat; 306*6706b115SCodrin Ciubotariu struct vsc9953_sys_sys sys; 307*6706b115SCodrin Ciubotariu struct vsc9953_sys_pause_cfg pause_cfg; 308*6706b115SCodrin Ciubotariu struct vsc9953_sys_mmgt mmgt; 309*6706b115SCodrin Ciubotariu }; 310*6706b115SCodrin Ciubotariu 311*6706b115SCodrin Ciubotariu /* END VSC9953 SYS structure for T1040 U-boot*/ 312*6706b115SCodrin Ciubotariu 313*6706b115SCodrin Ciubotariu 314*6706b115SCodrin Ciubotariu /* VSC9953 DEVCPU_GCB structure for T1040 U-boot*/ 315*6706b115SCodrin Ciubotariu 316*6706b115SCodrin Ciubotariu struct vsc9953_chip_regs { 317*6706b115SCodrin Ciubotariu u32 chipd_id; 318*6706b115SCodrin Ciubotariu u32 gpr; 319*6706b115SCodrin Ciubotariu u32 soft_rst; 320*6706b115SCodrin Ciubotariu }; 321*6706b115SCodrin Ciubotariu 322*6706b115SCodrin Ciubotariu struct vsc9953_gpio { 323*6706b115SCodrin Ciubotariu u32 gpio_out_set[10]; 324*6706b115SCodrin Ciubotariu u32 gpio_out_clr[10]; 325*6706b115SCodrin Ciubotariu u32 gpio_out[10]; 326*6706b115SCodrin Ciubotariu u32 gpio_in[10]; 327*6706b115SCodrin Ciubotariu }; 328*6706b115SCodrin Ciubotariu 329*6706b115SCodrin Ciubotariu struct vsc9953_mii_mng { 330*6706b115SCodrin Ciubotariu u32 miimstatus; 331*6706b115SCodrin Ciubotariu u32 reserved1; 332*6706b115SCodrin Ciubotariu u32 miimcmd; 333*6706b115SCodrin Ciubotariu u32 miimdata; 334*6706b115SCodrin Ciubotariu u32 miimcfg; 335*6706b115SCodrin Ciubotariu u32 miimscan_0; 336*6706b115SCodrin Ciubotariu u32 miimscan_1; 337*6706b115SCodrin Ciubotariu u32 miiscan_lst_rslts; 338*6706b115SCodrin Ciubotariu u32 miiscan_lst_rslts_valid; 339*6706b115SCodrin Ciubotariu }; 340*6706b115SCodrin Ciubotariu 341*6706b115SCodrin Ciubotariu struct vsc9953_mii_read_scan { 342*6706b115SCodrin Ciubotariu u32 mii_scan_results_sticky[2]; 343*6706b115SCodrin Ciubotariu }; 344*6706b115SCodrin Ciubotariu 345*6706b115SCodrin Ciubotariu struct vsc9953_devcpu_gcb { 346*6706b115SCodrin Ciubotariu struct vsc9953_chip_regs chip_regs; 347*6706b115SCodrin Ciubotariu struct vsc9953_gpio gpio; 348*6706b115SCodrin Ciubotariu struct vsc9953_mii_mng mii_mng[2]; 349*6706b115SCodrin Ciubotariu struct vsc9953_mii_read_scan mii_read_scan; 350*6706b115SCodrin Ciubotariu }; 351*6706b115SCodrin Ciubotariu 352*6706b115SCodrin Ciubotariu /* END VSC9953 DEVCPU_GCB structure for T1040 U-boot*/ 353*6706b115SCodrin Ciubotariu 354*6706b115SCodrin Ciubotariu /* VSC9953 IS* structure for T1040 U-boot*/ 355*6706b115SCodrin Ciubotariu 356*6706b115SCodrin Ciubotariu struct vsc9953_vcap_core_cfg { 357*6706b115SCodrin Ciubotariu u32 vcap_update_ctrl; 358*6706b115SCodrin Ciubotariu u32 vcap_mv_cfg; 359*6706b115SCodrin Ciubotariu }; 360*6706b115SCodrin Ciubotariu 361*6706b115SCodrin Ciubotariu struct vsc9953_vcap { 362*6706b115SCodrin Ciubotariu struct vsc9953_vcap_core_cfg vcap_core_cfg; 363*6706b115SCodrin Ciubotariu }; 364*6706b115SCodrin Ciubotariu 365*6706b115SCodrin Ciubotariu /* END VSC9953 IS* structure for T1040 U-boot*/ 366*6706b115SCodrin Ciubotariu 367*6706b115SCodrin Ciubotariu #define VSC9953_PORT_INFO_INITIALIZER(idx) \ 368*6706b115SCodrin Ciubotariu { \ 369*6706b115SCodrin Ciubotariu .enabled = 0, \ 370*6706b115SCodrin Ciubotariu .phyaddr = 0, \ 371*6706b115SCodrin Ciubotariu .index = idx, \ 372*6706b115SCodrin Ciubotariu .phy_regs = NULL, \ 373*6706b115SCodrin Ciubotariu .enet_if = PHY_INTERFACE_MODE_NONE, \ 374*6706b115SCodrin Ciubotariu .bus = NULL, \ 375*6706b115SCodrin Ciubotariu .phydev = NULL, \ 376*6706b115SCodrin Ciubotariu } 377*6706b115SCodrin Ciubotariu 378*6706b115SCodrin Ciubotariu /* Structure to describe a VSC9953 port */ 379*6706b115SCodrin Ciubotariu struct vsc9953_port_info { 380*6706b115SCodrin Ciubotariu u8 enabled; 381*6706b115SCodrin Ciubotariu u8 phyaddr; 382*6706b115SCodrin Ciubotariu int index; 383*6706b115SCodrin Ciubotariu void *phy_regs; 384*6706b115SCodrin Ciubotariu phy_interface_t enet_if; 385*6706b115SCodrin Ciubotariu struct mii_dev *bus; 386*6706b115SCodrin Ciubotariu struct phy_device *phydev; 387*6706b115SCodrin Ciubotariu }; 388*6706b115SCodrin Ciubotariu 389*6706b115SCodrin Ciubotariu /* Structure to describe a VSC9953 switch */ 390*6706b115SCodrin Ciubotariu struct vsc9953_info { 391*6706b115SCodrin Ciubotariu struct vsc9953_port_info port[VSC9953_MAX_PORTS]; 392*6706b115SCodrin Ciubotariu }; 393*6706b115SCodrin Ciubotariu 394*6706b115SCodrin Ciubotariu void vsc9953_init(bd_t *bis); 395*6706b115SCodrin Ciubotariu 396*6706b115SCodrin Ciubotariu void vsc9953_port_info_set_mdio(int port, struct mii_dev *bus); 397*6706b115SCodrin Ciubotariu void vsc9953_port_info_set_phy_address(int port, int address); 398*6706b115SCodrin Ciubotariu void vsc9953_port_enable(int port); 399*6706b115SCodrin Ciubotariu void vsc9953_port_disable(int port); 400*6706b115SCodrin Ciubotariu void vsc9953_port_info_set_phy_int(int port, phy_interface_t phy_int); 401*6706b115SCodrin Ciubotariu 402*6706b115SCodrin Ciubotariu #endif /* _VSC9953_H_ */ 403