uboot/drivers/phy/marvell/comphy_a3700.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0+ */
   2/*
   3 * Copyright (C) 2015-2016 Marvell International Ltd.
   4 */
   5
   6#ifndef _COMPHY_A3700_H_
   7#define _COMPHY_A3700_H_
   8
   9#include "comphy_core.h"
  10#include "comphy_hpipe.h"
  11
  12#define MVEBU_REG(offs)                 \
  13        ((void __iomem *)(ulong)MVEBU_REGISTER(offs))
  14
  15#define DEFAULT_REFCLK_MHZ              25
  16#define PLL_SET_DELAY_US                600
  17#define PLL_LOCK_TIMEOUT                1000
  18#define POLL_16B_REG                    1
  19#define POLL_32B_REG                    0
  20
  21/*
  22 * COMPHY SB definitions
  23 */
  24#define COMPHY_SEL_ADDR                 MVEBU_REG(0x0183FC)
  25
  26#define COMPHY_PHY_CFG1_ADDR(lane)      MVEBU_REG(0x018300 + (1 - lane) * 0x28)
  27#define rb_pin_pu_iveref                BIT(1)
  28#define rb_pin_reset_core               BIT(11)
  29#define rb_pin_reset_comphy             BIT(12)
  30#define rb_pin_pu_pll                   BIT(16)
  31#define rb_pin_pu_rx                    BIT(17)
  32#define rb_pin_pu_tx                    BIT(18)
  33#define rb_pin_tx_idle                  BIT(19)
  34#define rf_gen_rx_sel_shift             22
  35#define rf_gen_rx_select                (0x0F << rf_gen_rx_sel_shift)
  36#define rf_gen_tx_sel_shift             26
  37#define rf_gen_tx_select                (0x0F << rf_gen_tx_sel_shift)
  38#define rb_phy_rx_init                  BIT(30)
  39
  40#define COMPHY_PHY_STAT1_ADDR(lane)     MVEBU_REG(0x018318 + (1 - lane) * 0x28)
  41#define rb_rx_init_done                 BIT(0)
  42#define rb_pll_ready_rx                 BIT(2)
  43#define rb_pll_ready_tx                 BIT(3)
  44
  45/*
  46 * PCIe/USB/SGMII definitions
  47 */
  48#define PCIE_BASE                       MVEBU_REG(0x070000)
  49#define PCIETOP_BASE                    MVEBU_REG(0x080000)
  50#define PCIE_RAMBASE                    MVEBU_REG(0x08C000)
  51#define PCIEPHY_BASE                    MVEBU_REG(0x01F000)
  52#define PCIEPHY_SHFT                    2
  53
  54#define USB32_BASE                      MVEBU_REG(0x050000) /* usb3 device */
  55#define USB32H_BASE                     MVEBU_REG(0x058000) /* usb3 host */
  56#define USB3PHY_BASE                    MVEBU_REG(0x05C000)
  57#define USB2PHY_BASE                    MVEBU_REG(0x05D000)
  58#define USB2PHY2_BASE                   MVEBU_REG(0x05F000)
  59#define USB32_CTRL_BASE                 MVEBU_REG(0x05D800)
  60#define USB3PHY_SHFT                    2
  61#define USB3PHY_LANE2_REG_BASE_OFFSET   0x200
  62
  63static inline void __iomem *sgmiiphy_addr(u32 lane, u32 addr)
  64{
  65        addr = (addr & 0x00007FF) * 2;
  66        if (lane == 1)
  67                return PCIEPHY_BASE + addr;
  68        else
  69                return USB3PHY_BASE + addr;
  70}
  71
  72/* units */
  73enum phy_unit {
  74        PCIE = 1,
  75        USB3 = 2,
  76};
  77
  78static inline void __iomem *phy_addr(enum phy_unit unit, u32 addr)
  79{
  80        if (unit == PCIE)
  81                return PCIEPHY_BASE + addr * PCIEPHY_SHFT;
  82        else
  83                return USB3PHY_BASE + addr * USB3PHY_SHFT;
  84}
  85
  86/* bit definition for USB32_CTRL_BASE (USB32 Control Mode) */
  87#define usb32_ctrl_id_mode              BIT(0)
  88#define usb32_ctrl_soft_id              BIT(1)
  89#define usb32_ctrl_int_mode             BIT(4)
  90
  91#define PWR_PLL_CTRL                    0x01
  92#define rf_phy_mode_shift               5
  93#define rf_phy_mode_mask                (0x7 << rf_phy_mode_shift)
  94#define rf_ref_freq_sel_shift           0
  95#define rf_ref_freq_sel_mask            (0x1F << rf_ref_freq_sel_shift)
  96#define PHY_MODE_SGMII                  0x4
  97
  98#define KVCO_CAL_CTRL                   0x02
  99#define rb_use_max_pll_rate             BIT(12)
 100#define rb_force_calibration_done       BIT(9)
 101
 102#define DIG_LB_EN                       0x23
 103#define rf_data_width_shift             10
 104#define rf_data_width_mask              (0x3 << rf_data_width_shift)
 105
 106#define SYNC_PATTERN                    0x24
 107#define phy_txd_inv                     BIT(10)
 108#define phy_rxd_inv                     BIT(11)
 109
 110#define SYNC_MASK_GEN                   0x25
 111#define rb_idle_sync_en                 BIT(12)
 112
 113#define UNIT_CTRL                       0x48
 114
 115#define GEN2_SETTINGS_2                 0x3e
 116#define g2_tx_ssc_amp                   BIT(14)
 117
 118#define GEN2_SETTINGS_3                 0x3f
 119
 120#define GEN3_SETTINGS_3                 0x112
 121
 122#define MISC_REG0                       0x4f
 123#define rb_clk100m_125m_en              BIT(4)
 124#define rb_clk500m_en                   BIT(7)
 125#define rb_ref_clk_sel                  BIT(10)
 126
 127#define UNIT_IFACE_REF_CLK_CTRL         0x51
 128#define rb_ref1m_gen_div_force          BIT(8)
 129#define rf_ref1m_gen_div_value_shift    0
 130#define rf_ref1m_gen_div_value_mask     (0xFF << rf_ref1m_gen_div_value_shift)
 131
 132#define UNIT_ERR_CNT_CONST_CTRL         0x6a
 133#define rb_fast_dfe_enable              BIT(13)
 134
 135#define MISC_REG1                       0x73
 136#define bf_sel_bits_pcie_force          BIT(15)
 137
 138#define LANE_CFG0                       0x180
 139#define bf_use_max_pll_rate             BIT(9)
 140
 141#define LANE_CFG1                       0x181
 142#define bf_use_max_pll_rate             BIT(9)
 143#define prd_txdeemph1_mask              BIT(15)
 144#define tx_det_rx_mode                  BIT(6)
 145#define gen2_tx_data_dly_deft           (2 << 3)
 146#define gen2_tx_data_dly_mask           (BIT(3) | BIT(4))
 147#define tx_elec_idle_mode_en            BIT(0)
 148
 149#define LANE_CFG4                       0x188
 150#define bf_spread_spectrum_clock_en     BIT(7)
 151
 152#define LANE_STAT1                      0x183
 153#define rb_txdclk_pclk_en               BIT(0)
 154
 155#define GLOB_PHY_CTRL0                  0x1c1
 156#define bf_soft_rst                     BIT(0)
 157#define bf_mode_refdiv                  0x30
 158#define rb_mode_core_clk_freq_sel       BIT(9)
 159#define rb_mode_pipe_width_32           BIT(3)
 160
 161#define TEST_MODE_CTRL                  0x1c2
 162#define rb_mode_margin_override         BIT(2)
 163
 164#define GLOB_CLK_SRC_LO                 0x1c3
 165#define bf_cfg_sel_20b                  BIT(15)
 166
 167#define PWR_MGM_TIM1                    0x1d0
 168
 169#define PCIE_REF_CLK_ADDR               (PCIE_BASE + 0x4814)
 170
 171#define USB3_CTRPUL_VAL_REG             (0x20 + USB32_BASE)
 172#define USB3H_CTRPUL_VAL_REG            (0x3454 + USB32H_BASE)
 173#define rb_usb3_ctr_100ns               0xff000000
 174
 175#define USB2_OTG_PHY_CTRL_ADDR          (0x820 + USB2PHY_BASE)
 176#define rb_usb2phy_suspm                BIT(14)
 177#define rb_usb2phy_pu                   BIT(0)
 178
 179#define USB2_PHY_OTG_CTRL_ADDR          (0x34 + USB2PHY_BASE)
 180#define rb_pu_otg                       BIT(4)
 181
 182#define USB2_PHY_CHRGR_DET_ADDR         (0x38 + USB2PHY_BASE)
 183#define rb_cdp_en                       BIT(2)
 184#define rb_dcp_en                       BIT(3)
 185#define rb_pd_en                        BIT(4)
 186#define rb_pu_chrg_dtc                  BIT(5)
 187#define rb_cdp_dm_auto                  BIT(7)
 188#define rb_enswitch_dp                  BIT(12)
 189#define rb_enswitch_dm                  BIT(13)
 190
 191#define USB2_CAL_CTRL_ADDR              (0x8 + USB2PHY_BASE)
 192#define rb_usb2phy_pllcal_done          BIT(31)
 193#define rb_usb2phy_impcal_done          BIT(23)
 194
 195#define USB2_PLL_CTRL0_ADDR             (0x0 + USB2PHY_BASE)
 196#define rb_usb2phy_pll_ready            BIT(31)
 197
 198#define USB2_RX_CHAN_CTRL1_ADDR         (0x18 + USB2PHY_BASE)
 199#define rb_usb2phy_sqcal_done           BIT(31)
 200
 201#define USB2_PHY2_CTRL_ADDR             (0x804 + USB2PHY2_BASE)
 202#define rb_usb2phy2_suspm               BIT(7)
 203#define rb_usb2phy2_pu                  BIT(0)
 204#define USB2_PHY2_CAL_CTRL_ADDR         (0x8 + USB2PHY2_BASE)
 205#define USB2_PHY2_PLL_CTRL0_ADDR        (0x0 + USB2PHY2_BASE)
 206#define USB2_PHY2_RX_CHAN_CTRL1_ADDR    (0x18 + USB2PHY2_BASE)
 207
 208#define USB2_PHY_BASE(usb32)    (usb32 == 0 ? USB2PHY2_BASE : USB2PHY_BASE)
 209#define USB2_PHY_CTRL_ADDR(usb32) \
 210        (usb32 == 0 ? USB2_PHY2_CTRL_ADDR : USB2_OTG_PHY_CTRL_ADDR)
 211#define RB_USB2PHY_SUSPM(usb32) \
 212        (usb32 == 0 ? rb_usb2phy2_suspm : rb_usb2phy_suspm)
 213#define RB_USB2PHY_PU(usb32) \
 214        (usb32 == 0 ? rb_usb2phy2_pu : rb_usb2phy_pu)
 215#define USB2_PHY_CAL_CTRL_ADDR(usb32) \
 216        (usb32 == 0 ? USB2_PHY2_CAL_CTRL_ADDR : USB2_CAL_CTRL_ADDR)
 217#define USB2_PHY_RX_CHAN_CTRL1_ADDR(usb32) \
 218        (usb32 == 0 ? USB2_PHY2_RX_CHAN_CTRL1_ADDR : USB2_RX_CHAN_CTRL1_ADDR)
 219#define USB2_PHY_PLL_CTRL0_ADDR(usb32) \
 220        (usb32 == 0 ? USB2_PHY2_PLL_CTRL0_ADDR : USB2_PLL_CTRL0_ADDR)
 221
 222/*
 223 * SATA definitions
 224 */
 225#define AHCI_BASE                       MVEBU_REG(0xE0000)
 226
 227#define rh_vsreg_addr                   (AHCI_BASE + 0x178)
 228#define rh_vsreg_data                   (AHCI_BASE + 0x17C)
 229#define rh_vs0_a                        (AHCI_BASE + 0xA0)
 230#define rh_vs0_d                        (AHCI_BASE + 0xA4)
 231
 232#define vphy_sync_pattern_reg           0x224
 233#define bs_txd_inv                      BIT(10)
 234#define bs_rxd_inv                      BIT(11)
 235
 236#define vphy_loopback_reg0              0x223
 237#define bs_phyintf_40bit                0x0C00
 238#define bs_pll_ready_tx                 0x10
 239
 240#define vphy_power_reg0                 0x201
 241
 242#define vphy_calctl_reg                 0x202
 243#define bs_max_pll_rate                 BIT(12)
 244
 245#define vphy_reserve_reg                0x0e
 246#define bs_phyctrl_frm_pin              BIT(13)
 247
 248#define vsata_ctrl_reg                  0x00
 249#define bs_phy_pu_pll                   BIT(6)
 250
 251/*
 252 * SDIO/eMMC definitions
 253 */
 254#define SDIO_BASE                       MVEBU_REG(0xD8000)
 255
 256#define SDIO_HOST_CTRL1_ADDR            (SDIO_BASE + 0x28)
 257#define SDIO_SDHC_FIFO_ADDR             (SDIO_BASE + 0x12C)
 258#define SDIO_CAP_12_ADDR                (SDIO_BASE + 0x40)
 259#define SDIO_ENDIAN_ADDR                (SDIO_BASE + 0x1A4)
 260#define SDIO_PHY_TIMING_ADDR            (SDIO_BASE + 0x170)
 261#define SDIO_PHY_PAD_CTRL0_ADDR         (SDIO_BASE + 0x178)
 262#define SDIO_DLL_RST_ADDR               (SDIO_BASE + 0x148)
 263
 264#endif /* _COMPHY_A3700_H_ */
 265