uboot/drivers/net/cortina_ni.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0+ */
   2
   3/*
   4 * Copyright (C) 2020 Cortina Access Inc.
   5 * Author: Aaron Tseng <aaron.tseng@cortina-access.com>
   6 *
   7 * Ethernet MAC Driver for all supported CAxxxx SoCs
   8 */
   9
  10#ifndef __CORTINA_NI_H
  11#define __CORTINA_NI_H
  12
  13#include <asm/types.h>
  14#include <asm/io.h>
  15#include <config.h>
  16
  17#define GE_MAC_INTF_GMII                0x0
  18#define GE_MAC_INTF_MII                 0x1
  19#define GE_MAC_INTF_RGMII_1000          0x2
  20#define GE_MAC_INTF_RGMII_100           0x3
  21
  22/* Defines the base and top address in CPU XRA
  23 * for packets to cpu instance 0
  24 * 0x300 * 8-byte = 6K-byte
  25 */
  26#define RX_TOP_ADDR                     0x02FF
  27#define RX_BASE_ADDR                    0x0000
  28
  29/* Defines the base and top address in CPU XRAM
  30 * for packets from cpu instance 0.
  31 * 0x100 * 8-byte = 2K-byte
  32 */
  33#define TX_TOP_ADDR                     0x03FF
  34#define TX_BASE_ADDR                    0x0300
  35
  36struct port_map_s {
  37        u32 phy_addr;
  38        u32 port;
  39};
  40
  41struct gphy_cal_s {
  42        u32 reg_off;
  43        u32 value;
  44};
  45
  46#if !defined(__ASSEMBLER__) && !defined(__ASSEMBLY__)
  47struct cortina_ni_priv {
  48        u32 ni_xram_base;
  49        u32 rx_xram_base_adr;
  50        u32 rx_xram_end_adr;
  51        u16 rx_xram_start;
  52        u16 rx_xram_end;
  53        u32 tx_xram_base_adr;
  54        u32 tx_xram_end_adr;
  55        u16 tx_xram_start;
  56        u16 tx_xram_end;
  57        u32 valid_port_map;
  58        u32 valid_port_num;
  59        u32 init_rgmii;
  60        u32 gphy_num;
  61        struct port_map_s port_map[5];
  62        struct gphy_cal_s gphy_values[10];
  63        void __iomem *glb_base_addr;
  64        void __iomem *per_mdio_base_addr;
  65        void __iomem *ni_hv_base_addr;
  66
  67        struct mii_dev *mdio_bus;
  68        struct phy_device *phydev;
  69        int phy_interface;
  70        int active_port;
  71};
  72
  73struct NI_HEADER_X_T {
  74        u32 next_link           : 10; /* bits  9: 0 */
  75        u32 bytes_valid         :  4; /* bits 13:10 */
  76        u32 reserved            : 16; /* bits 29:14 */
  77        u32 hdr_a               :  1; /* bits 30:30 */
  78        u32 ownership           :  1; /* bits 31:31 */
  79};
  80
  81struct NI_PACKET_STATUS {
  82        u32 packet_size       : 14; /* bits 13:0 */
  83        u32 byte_valid        :  4; /* bits 17:14 */
  84        u32 pfc               :  1; /* bits 18:18 */
  85        u32 valid             :  1; /* bits 19:19 */
  86        u32 drop              :  1; /* bits 20:20 */
  87        u32 runt              :  1; /* bits 21:21 */
  88        u32 oversize          :  1; /* bits 22:22 */
  89        u32 jumbo             :  1; /* bits 23:23 */
  90        u32 link_status       :  1; /* bits 24:24 */
  91        u32 jabber            :  1; /* bits 25:25 */
  92        u32 crc_error         :  1; /* bits 26:26 */
  93        u32 pause             :  1; /* bits 27:27 */
  94        u32 oam               :  1; /* bits 28:28 */
  95        u32 unknown_opcode    :  1; /* bits 29:29 */
  96        u32 multicast         :  1; /* bits 30:30 */
  97        u32 broadcast         :  1; /* bits 31:31 */
  98};
  99
 100struct NI_MDIO_OPER_T {
 101        u32 reserved       : 2; /* bits  1:0 */
 102        u32 reg_off        : 5; /* bits  6:2 */
 103        u32 phy_addr       : 5; /* bits 11:7 */
 104        u32 reg_base       : 20; /* bits 31:12 */
 105};
 106
 107#define __MDIO_WR_FLAG                          (0)
 108#define __MDIO_RD_FLAG                          (1)
 109#define __MDIO_ACCESS_TIMEOUT                   (1000000)
 110#define CA_MDIO_ADDR_MIN                        (1)
 111#define CA_MDIO_ADDR_MAX                        (31)
 112
 113#endif /* !__ASSEMBLER__ */
 114
 115/* HW REG */
 116struct NI_HV_GLB_MAC_ADDR_CFG0_t {
 117        u32 mac_addr0            : 32; /* bits 31:0 */
 118};
 119
 120struct NI_HV_GLB_MAC_ADDR_CFG1_t {
 121        u32 mac_addr1            :  8; /* bits 7:0 */
 122        u32 rsrvd1               : 24;
 123};
 124
 125struct NI_HV_PT_PORT_STATIC_CFG_t {
 126        u32 int_cfg              :  4; /* bits 3:0 */
 127        u32 phy_mode             :  1; /* bits 4:4 */
 128        u32 rmii_clksrc          :  1; /* bits 5:5 */
 129        u32 inv_clk_in           :  1; /* bits 6:6 */
 130        u32 inv_clk_out          :  1; /* bits 7:7 */
 131        u32 inv_rxclk_out        :  1; /* bits 8:8 */
 132        u32 tx_use_gefifo        :  1; /* bits 9:9 */
 133        u32 smii_tx_stat         :  1; /* bits 10:10 */
 134        u32 crs_polarity         :  1; /* bits 11:11 */
 135        u32 lpbk_mode            :  2; /* bits 13:12 */
 136        u32 gmii_like_half_duplex_en :  1; /* bits 14:14 */
 137        u32 sup_tx_to_rx_lpbk_data :  1; /* bits 15:15 */
 138        u32 rsrvd1               :  8;
 139        u32 mac_addr6            :  8; /* bits 31:24 */
 140};
 141
 142struct NI_HV_XRAM_CPUXRAM_CFG_t {
 143        u32 rx_0_cpu_pkt_dis     :  1; /* bits 0:0 */
 144        u32 rsrvd1               :  8;
 145        u32 tx_0_cpu_pkt_dis     :  1; /* bits 9:9 */
 146        u32 rsrvd2               :  1;
 147        u32 rx_x_drop_err_pkt    :  1; /* bits 11:11 */
 148        u32 xram_mgmt_dis_drop_ovsz_pkt :  1; /* bits 12:12 */
 149        u32 xram_mgmt_term_large_pkt :  1; /* bits 13:13 */
 150        u32 xram_mgmt_promisc_mode :  2; /* bits 15:14 */
 151        u32 xram_cntr_debug_mode :  1; /* bits 16:16 */
 152        u32 xram_cntr_op_code    :  2; /* bits 18:17 */
 153        u32 rsrvd3               :  2;
 154        u32 xram_rx_mgmtfifo_srst :  1; /* bits 21:21 */
 155        u32 xram_dma_fifo_srst   :  1; /* bits 22:22 */
 156        u32 rsrvd4               :  9;
 157};
 158
 159struct NI_HV_PT_RXMAC_CFG_t {
 160        u32 rx_en                :  1; /* bits 0:0 */
 161        u32 rsrvd1               :  7;
 162        u32 rx_flow_disable      :  1; /* bits 8:8 */
 163        u32 rsrvd2               :  3;
 164        u32 rx_flow_to_tx_en     :  1; /* bits 12:12 */
 165        u32 rx_pfc_disable       :  1; /* bits 13:13 */
 166        u32 rsrvd3               : 15;
 167        u32 send_pg_data         :  1; /* bits 29:29 */
 168        u32 rsrvd4               :  2;
 169};
 170
 171struct NI_HV_PT_TXMAC_CFG_t {
 172        u32 tx_en                :  1; /* bits 0:0 */
 173        u32 rsrvd1               :  7;
 174        u32 mac_crc_calc_en      :  1; /* bits 8:8 */
 175        u32 tx_ipg_sel           :  3; /* bits 11:9 */
 176        u32 tx_flow_disable      :  1; /* bits 12:12 */
 177        u32 tx_drain             :  1; /* bits 13:13 */
 178        u32 tx_pfc_disable       :  1; /* bits 14:14 */
 179        u32 tx_pau_sel           :  2; /* bits 16:15 */
 180        u32 rsrvd2               :  9;
 181        u32 tx_auto_xon          :  1; /* bits 26:26 */
 182        u32 rsrvd3               :  1;
 183        u32 pass_thru_hdr        :  1; /* bits 28:28 */
 184        u32 rsrvd4               :  3;
 185};
 186
 187struct NI_HV_GLB_INTF_RST_CONFIG_t {
 188        u32 intf_rst_p0          :  1; /* bits 0:0 */
 189        u32 intf_rst_p1          :  1; /* bits 1:1 */
 190        u32 intf_rst_p2          :  1; /* bits 2:2 */
 191        u32 intf_rst_p3          :  1; /* bits 3:3 */
 192        u32 intf_rst_p4          :  1; /* bits 4:4 */
 193        u32 mac_rx_rst_p0        :  1; /* bits 5:5 */
 194        u32 mac_rx_rst_p1        :  1; /* bits 6:6 */
 195        u32 mac_rx_rst_p2        :  1; /* bits 7:7 */
 196        u32 mac_rx_rst_p3        :  1; /* bits 8:8 */
 197        u32 mac_rx_rst_p4        :  1; /* bits 9:9 */
 198        u32 mac_tx_rst_p0        :  1; /* bits 10:10 */
 199        u32 mac_tx_rst_p1        :  1; /* bits 11:11 */
 200        u32 mac_tx_rst_p2        :  1; /* bits 12:12 */
 201        u32 mac_tx_rst_p3        :  1; /* bits 13:13 */
 202        u32 mac_tx_rst_p4        :  1; /* bits 14:14 */
 203        u32 port_rst_p5          :  1; /* bits 15:15 */
 204        u32 pcs_rst_p6           :  1; /* bits 16:16 */
 205        u32 pcs_rst_p7           :  1; /* bits 17:17 */
 206        u32 mac_rst_p6           :  1; /* bits 18:18 */
 207        u32 mac_rst_p7           :  1; /* bits 19:19 */
 208        u32 rsrvd1               : 12;
 209};
 210
 211struct NI_HV_GLB_STATIC_CFG_t {
 212        u32 port_to_cpu          :  4; /* bits 3:0 */
 213        u32 mgmt_pt_to_fe_also   :  1; /* bits 4:4 */
 214        u32 txcrc_chk_en         :  1; /* bits 5:5 */
 215        u32 p4_rgmii_tx_clk_phase :  2; /* bits 7:6 */
 216        u32 p4_rgmii_tx_data_order :  1; /* bits 8:8 */
 217        u32 rsrvd1               :  7;
 218        u32 rxmib_mode           :  1; /* bits 16:16 */
 219        u32 txmib_mode           :  1; /* bits 17:17 */
 220        u32 eth_sch_rdy_pkt      :  1; /* bits 18:18 */
 221        u32 rsrvd2               :  1;
 222        u32 rxaui_mode           :  2; /* bits 21:20 */
 223        u32 rxaui_sigdet         :  2; /* bits 23:22 */
 224        u32 cnt_op_mode          :  3; /* bits 26:24 */
 225        u32 rsrvd3               :  5;
 226};
 227
 228struct GLOBAL_BLOCK_RESET_t {
 229        u32 reset_ni             :  1; /* bits 0:0 */
 230        u32 reset_l2fe           :  1; /* bits 1:1 */
 231        u32 reset_l2tm           :  1; /* bits 2:2 */
 232        u32 reset_l3fe           :  1; /* bits 3:3 */
 233        u32 reset_sdram          :  1; /* bits 4:4 */
 234        u32 reset_tqm            :  1; /* bits 5:5 */
 235        u32 reset_pcie0          :  1; /* bits 6:6 */
 236        u32 reset_pcie1          :  1; /* bits 7:7 */
 237        u32 reset_pcie2          :  1; /* bits 8:8 */
 238        u32 reset_sata           :  1; /* bits 9:9 */
 239        u32 reset_gic400         :  1; /* bits 10:10 */
 240        u32 rsrvd1               :  2;
 241        u32 reset_usb            :  1; /* bits 13:13 */
 242        u32 reset_flash          :  1; /* bits 14:14 */
 243        u32 reset_per            :  1; /* bits 15:15 */
 244        u32 reset_dma            :  1; /* bits 16:16 */
 245        u32 reset_rtc            :  1; /* bits 17:17 */
 246        u32 reset_pe0            :  1; /* bits 18:18 */
 247        u32 reset_pe1            :  1; /* bits 19:19 */
 248        u32 reset_rcpu0          :  1; /* bits 20:20 */
 249        u32 reset_rcpu1          :  1; /* bits 21:21 */
 250        u32 reset_sadb           :  1; /* bits 22:22 */
 251        u32 rsrvd2               :  1;
 252        u32 reset_rcrypto        :  1; /* bits 24:24 */
 253        u32 reset_ldma           :  1; /* bits 25:25 */
 254        u32 reset_fbm            :  1; /* bits 26:26 */
 255        u32 reset_eaxi           :  1; /* bits 27:27 */
 256        u32 reset_sd             :  1; /* bits 28:28 */
 257        u32 reset_otprom         :  1; /* bits 29:29 */
 258        u32 rsrvd3               :  2;
 259};
 260
 261struct PER_MDIO_ADDR_t {
 262        u32 mdio_addr            :  5; /* bits 4:0 */
 263        u32 rsrvd1               :  3;
 264        u32 mdio_offset          :  5; /* bits 12:8 */
 265        u32 rsrvd2               :  2;
 266        u32 mdio_rd_wr           :  1; /* bits 15:15 */
 267        u32 mdio_st              :  1; /* bits 16:16 */
 268        u32 rsrvd3               :  1;
 269        u32 mdio_op              :  2; /* bits 19:18 */
 270        u32 rsrvd4               : 12;
 271};
 272
 273struct PER_MDIO_CTRL_t {
 274        u32 mdiodone             :  1; /* bits 0:0 */
 275        u32 rsrvd1               :  6;
 276        u32 mdiostart            :  1; /* bits 7:7 */
 277        u32 rsrvd2               : 24;
 278};
 279
 280struct PER_MDIO_RDDATA_t {
 281        u32 mdio_rddata          : 16; /* bits 15:0 */
 282        u32 rsrvd1               : 16;
 283};
 284
 285/* XRAM */
 286
 287struct NI_HV_XRAM_CPUXRAM_ADRCFG_RX_t {
 288        u32 rx_base_addr         : 10; /* bits 9:0 */
 289        u32 rsrvd1               :  6;
 290        u32 rx_top_addr          : 10; /* bits 25:16 */
 291        u32 rsrvd2               :  6;
 292};
 293
 294struct NI_HV_XRAM_CPUXRAM_ADRCFG_TX_0_t {
 295        u32 tx_base_addr         : 10; /* bits 9:0 */
 296        u32 rsrvd1               :  6;
 297        u32 tx_top_addr          : 10; /* bits 25:16 */
 298        u32 rsrvd2               :  6;
 299};
 300
 301struct NI_HV_XRAM_CPUXRAM_CPU_STA_RX_0_t {
 302        u32 pkt_wr_ptr           : 10; /* bits 9:0 */
 303        u32 rsrvd1               :  5;
 304        u32 int_colsc_thresh_reached :  1; /* bits 15:15 */
 305        u32 rsrvd2               : 16;
 306};
 307
 308struct NI_HV_XRAM_CPUXRAM_CPU_CFG_RX_0_t {
 309        u32 pkt_rd_ptr           : 10; /* bits 9:0 */
 310        u32 rsrvd1               : 22;
 311};
 312
 313struct NI_HV_XRAM_CPUXRAM_CPU_CFG_TX_0_t {
 314        u32 pkt_wr_ptr           : 10; /* bits 9:0 */
 315        u32 rsrvd1               : 22;
 316};
 317
 318struct GLOBAL_GLOBAL_CONFIG_t {
 319        u32 rsrvd1               :  4;
 320        u32 wd_reset_subsys_enable :  1; /* bits 4:4 */
 321        u32 rsrvd2               :  1;
 322        u32 wd_reset_all_blocks  :  1; /* bits 6:6 */
 323        u32 wd_reset_remap       :  1; /* bits 7:7 */
 324        u32 wd_reset_ext_reset   :  1; /* bits 8:8 */
 325        u32 ext_reset            :  1; /* bits 9:9 */
 326        u32 cfg_pcie_0_clken     :  1; /* bits 10:10 */
 327        u32 cfg_sata_clken       :  1; /* bits 11:11 */
 328        u32 cfg_pcie_1_clken     :  1; /* bits 12:12 */
 329        u32 rsrvd3               :  1;
 330        u32 cfg_pcie_2_clken     :  1; /* bits 14:14 */
 331        u32 rsrvd4               :  2;
 332        u32 ext_eth_refclk       :  1; /* bits 17:17 */
 333        u32 refclk_sel           :  2; /* bits 19:18 */
 334        u32 rsrvd5               :  7;
 335        u32 l3fe_pd              :  1; /* bits 27:27 */
 336        u32 offload0_pd          :  1; /* bits 28:28 */
 337        u32 offload1_pd          :  1; /* bits 29:29 */
 338        u32 crypto_pd            :  1; /* bits 30:30 */
 339        u32 core_pd              :  1; /* bits 31:31 */
 340};
 341
 342struct GLOBAL_IO_DRIVE_CONTROL_t {
 343        u32 gmac_dp              :  3; /* bits 2:0 */
 344        u32 gmac_dn              :  3; /* bits 5:3 */
 345        u32 gmac_mode            :  2; /* bits 7:6 */
 346        u32 gmac_ds              :  1; /* bits 8:8 */
 347        u32 flash_ds             :  1; /* bits 9:9 */
 348        u32 nu_ds                :  1; /* bits 10:10 */
 349        u32 ssp_ds               :  1; /* bits 11:11 */
 350        u32 spi_ds               :  1; /* bits 12:12 */
 351        u32 gpio_ds              :  1; /* bits 13:13 */
 352        u32 misc_ds              :  1; /* bits 14:14 */
 353        u32 eaxi_ds              :  1; /* bits 15:15 */
 354        u32 sd_ds                :  8; /* bits 23:16 */
 355        u32 rsrvd1               :  8;
 356};
 357
 358struct NI_HV_GLB_INIT_DONE_t {
 359        u32 rsrvd1               :  1;
 360        u32 ni_init_done         :  1; /* bits 1:1 */
 361        u32 rsrvd2               : 30;
 362};
 363
 364struct NI_HV_PT_PORT_GLB_CFG_t {
 365        u32 speed                :  1; /* bits 0:0 */
 366        u32 duplex               :  1; /* bits 1:1 */
 367        u32 link_status          :  1; /* bits 2:2 */
 368        u32 link_stat_mask       :  1; /* bits 3:3 */
 369        u32 rsrvd1               :  7;
 370        u32 power_dwn_rx         :  1; /* bits 11:11 */
 371        u32 power_dwn_tx         :  1; /* bits 12:12 */
 372        u32 tx_intf_lp_time      :  1; /* bits 13:13 */
 373        u32 rsrvd2               : 18;
 374};
 375
 376#define NI_HV_GLB_INIT_DONE_OFFSET                      0x004
 377#define NI_HV_GLB_INTF_RST_CONFIG_OFFSET                0x008
 378#define NI_HV_GLB_STATIC_CFG_OFFSET                     0x00c
 379
 380#define NI_HV_PT_PORT_STATIC_CFG_OFFSET                 NI_HV_PT_BASE
 381#define NI_HV_PT_PORT_GLB_CFG_OFFSET                    (0x4 + NI_HV_PT_BASE)
 382#define NI_HV_PT_RXMAC_CFG_OFFSET                       (0x8 + NI_HV_PT_BASE)
 383#define NI_HV_PT_TXMAC_CFG_OFFSET                       (0x14 + NI_HV_PT_BASE)
 384
 385#define NI_HV_XRAM_CPUXRAM_ADRCFG_RX_OFFSET             NI_HV_XRAM_BASE
 386#define NI_HV_XRAM_CPUXRAM_ADRCFG_TX_0_OFFSET           (0x4 + NI_HV_XRAM_BASE)
 387#define NI_HV_XRAM_CPUXRAM_CFG_OFFSET                   (0x8 + NI_HV_XRAM_BASE)
 388#define NI_HV_XRAM_CPUXRAM_CPU_CFG_RX_0_OFFSET          (0xc + NI_HV_XRAM_BASE)
 389#define NI_HV_XRAM_CPUXRAM_CPU_STA_RX_0_OFFSET          (0x10 + NI_HV_XRAM_BASE)
 390#define NI_HV_XRAM_CPUXRAM_CPU_CFG_TX_0_OFFSET          (0x24 + NI_HV_XRAM_BASE)
 391#define NI_HV_XRAM_CPUXRAM_CPU_STAT_TX_0_OFFSET         (0x28 + NI_HV_XRAM_BASE)
 392
 393#define PER_MDIO_CFG_OFFSET                             0x00
 394#define PER_MDIO_ADDR_OFFSET                            0x04
 395#define PER_MDIO_WRDATA_OFFSET                          0x08
 396#define PER_MDIO_RDDATA_OFFSET                          0x0C
 397#define PER_MDIO_CTRL_OFFSET                            0x10
 398
 399#define APB0_NI_HV_PT_STRIDE                            160
 400
 401#endif /* __CORTINA_NI_H */
 402