1*7e080842SHaojian Zhuang /* 2*7e080842SHaojian Zhuang * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved. 3*7e080842SHaojian Zhuang * 4*7e080842SHaojian Zhuang * SPDX-License-Identifier: BSD-3-Clause 5*7e080842SHaojian Zhuang */ 6*7e080842SHaojian Zhuang 7*7e080842SHaojian Zhuang #ifndef __DW_UFS_H__ 8*7e080842SHaojian Zhuang #define __DW_UFS_H__ 9*7e080842SHaojian Zhuang 10*7e080842SHaojian Zhuang #include <sys/types.h> 11*7e080842SHaojian Zhuang 12*7e080842SHaojian Zhuang /* Bus Throtting */ 13*7e080842SHaojian Zhuang #define BUSTHRTL 0xC0 14*7e080842SHaojian Zhuang /* Outstanding OCP Requests */ 15*7e080842SHaojian Zhuang #define OOCPR 0xC4 16*7e080842SHaojian Zhuang /* Fatal Error Interrupt Enable */ 17*7e080842SHaojian Zhuang #define FEIE 0xC8 18*7e080842SHaojian Zhuang /* C-Port Direct Access Configuration register */ 19*7e080842SHaojian Zhuang #define CDACFG 0xD0 20*7e080842SHaojian Zhuang /* C-Port Direct Access Transmit 1 register */ 21*7e080842SHaojian Zhuang #define CDATX1 0xD4 22*7e080842SHaojian Zhuang /* C-Port Direct Access Transmit 2 register */ 23*7e080842SHaojian Zhuang #define CDATX2 0xD8 24*7e080842SHaojian Zhuang /* C-Port Direct Access Receive 1 register */ 25*7e080842SHaojian Zhuang #define CDARX1 0xDC 26*7e080842SHaojian Zhuang /* C-Port Direct Access Receive 2 register */ 27*7e080842SHaojian Zhuang #define CDARX2 0xE0 28*7e080842SHaojian Zhuang /* C-Port Direct Access Status register */ 29*7e080842SHaojian Zhuang #define CDASTA 0xE4 30*7e080842SHaojian Zhuang /* UPIU Loopback Configuration register */ 31*7e080842SHaojian Zhuang #define LBMCFG 0xF0 32*7e080842SHaojian Zhuang /* UPIU Loopback Status */ 33*7e080842SHaojian Zhuang #define LBMSTA 0xF4 34*7e080842SHaojian Zhuang /* Debug register */ 35*7e080842SHaojian Zhuang #define DBG 0xF8 36*7e080842SHaojian Zhuang /* HClk Divider register */ 37*7e080842SHaojian Zhuang #define HCLKDIV 0xFC 38*7e080842SHaojian Zhuang 39*7e080842SHaojian Zhuang #define TX_HIBERN8TIME_CAP_OFFSET 0x000F 40*7e080842SHaojian Zhuang #define TX_FSM_STATE_OFFSET 0x0041 41*7e080842SHaojian Zhuang #define TX_FSM_STATE_LINE_RESET 7 42*7e080842SHaojian Zhuang #define TX_FSM_STATE_LINE_CFG 6 43*7e080842SHaojian Zhuang #define TX_FSM_STATE_HS_BURST 5 44*7e080842SHaojian Zhuang #define TX_FSM_STATE_LS_BURST 4 45*7e080842SHaojian Zhuang #define TX_FSM_STATE_STALL 3 46*7e080842SHaojian Zhuang #define TX_FSM_STATE_SLEEP 2 47*7e080842SHaojian Zhuang #define TX_FSM_STATE_HIBERN8 1 48*7e080842SHaojian Zhuang #define TX_FSM_STATE_DISABLE 0 49*7e080842SHaojian Zhuang 50*7e080842SHaojian Zhuang #define RX_MIN_ACTIVATETIME_CAP_OFFSET 0x008F 51*7e080842SHaojian Zhuang #define RX_HS_G2_SYNC_LENGTH_CAP_OFFSET 0x0094 52*7e080842SHaojian Zhuang #define RX_HS_G3_SYNC_LENGTH_CAP_OFFSET 0x0095 53*7e080842SHaojian Zhuang 54*7e080842SHaojian Zhuang #define PA_AVAIL_TX_DATA_LANES_OFFSET 0x1520 55*7e080842SHaojian Zhuang #define PA_TX_SKIP_OFFSET 0x155C 56*7e080842SHaojian Zhuang #define PA_TX_SKIP_PERIOD_OFFSET 0x155D 57*7e080842SHaojian Zhuang #define PA_LOCAL_TX_LCC_ENABLE_OFFSET 0x155E 58*7e080842SHaojian Zhuang #define PA_ACTIVE_TX_DATA_LANES_OFFSET 0x1560 59*7e080842SHaojian Zhuang #define PA_CONNECTED_TX_DATA_LANES_OFFSET 0x1561 60*7e080842SHaojian Zhuang #define PA_TX_TRAILING_CLOCKS_OFFSET 0x1564 61*7e080842SHaojian Zhuang #define PA_TX_GEAR_OFFSET 0x1568 62*7e080842SHaojian Zhuang #define PA_TX_TERMINATION_OFFSET 0x1569 63*7e080842SHaojian Zhuang #define PA_HS_SERIES_OFFSET 0x156A 64*7e080842SHaojian Zhuang #define PA_PWR_MODE_OFFSET 0x1571 65*7e080842SHaojian Zhuang #define PA_ACTIVE_RX_DATA_LANES_OFFSET 0x1580 66*7e080842SHaojian Zhuang #define PA_CONNECTED_RX_DATA_LANES_OFFSET 0x1581 67*7e080842SHaojian Zhuang #define PA_RX_PWR_STATUS_OFFSET 0x1582 68*7e080842SHaojian Zhuang #define PA_RX_GEAR_OFFSET 0x1583 69*7e080842SHaojian Zhuang #define PA_RX_TERMINATION_OFFSET 0x1584 70*7e080842SHaojian Zhuang #define PA_SCRAMBLING_OFFSET 0x1585 71*7e080842SHaojian Zhuang #define PA_MAX_RX_PWM_GEAR_OFFSET 0x1586 72*7e080842SHaojian Zhuang #define PA_MAX_RX_HS_GEAR_OFFSET 0x1587 73*7e080842SHaojian Zhuang #define PA_PACP_REQ_TIMEOUT_OFFSET 0x1590 74*7e080842SHaojian Zhuang #define PA_PACP_REQ_EOB_TIMEOUT_OFFSET 0x1591 75*7e080842SHaojian Zhuang #define PA_REMOTE_VER_INFO_OFFSET 0x15A0 76*7e080842SHaojian Zhuang #define PA_LOGICAL_LANE_MAP_OFFSET 0x15A1 77*7e080842SHaojian Zhuang #define PA_TACTIVATE_OFFSET 0x15A8 78*7e080842SHaojian Zhuang #define PA_PWR_MODE_USER_DATA0_OFFSET 0x15B0 79*7e080842SHaojian Zhuang #define PA_PWR_MODE_USER_DATA1_OFFSET 0x15B1 80*7e080842SHaojian Zhuang #define PA_PWR_MODE_USER_DATA2_OFFSET 0x15B2 81*7e080842SHaojian Zhuang #define PA_PWR_MODE_USER_DATA3_OFFSET 0x15B3 82*7e080842SHaojian Zhuang #define PA_PWR_MODE_USER_DATA4_OFFSET 0x15B4 83*7e080842SHaojian Zhuang #define PA_PWR_MODE_USER_DATA5_OFFSET 0x15B5 84*7e080842SHaojian Zhuang 85*7e080842SHaojian Zhuang #define DL_TC0_TX_FC_THRESHOLD_OFFSET 0x2040 86*7e080842SHaojian Zhuang #define DL_AFC0_CREDIT_THRESHOLD_OFFSET 0x2044 87*7e080842SHaojian Zhuang #define DL_TC0_OUT_ACK_THRESHOLD_OFFSET 0x2045 88*7e080842SHaojian Zhuang 89*7e080842SHaojian Zhuang #define DME_FC0_PROTECTION_TIMEOUT_OFFSET 0xD041 90*7e080842SHaojian Zhuang #define DME_TC0_REPLAY_TIMEOUT_OFFSET 0xD042 91*7e080842SHaojian Zhuang #define DME_AFC0_REQ_TIMEOUT_OFFSET 0xD043 92*7e080842SHaojian Zhuang #define DME_FC1_PROTECTION_TIMEOUT_OFFSET 0xD044 93*7e080842SHaojian Zhuang #define DME_TC1_REPLAY_TIMEOUT_OFFSET 0xD045 94*7e080842SHaojian Zhuang #define DME_AFC1_REQ_TIMEOUT_OFFSET 0xD046 95*7e080842SHaojian Zhuang 96*7e080842SHaojian Zhuang #define VS_MPHY_CFG_UPDT_OFFSET 0xD085 97*7e080842SHaojian Zhuang #define VS_MK2_EXTN_SUPPORT_OFFSET 0xD0AB 98*7e080842SHaojian Zhuang #define VS_MPHY_DISABLE_OFFSET 0xD0C1 99*7e080842SHaojian Zhuang #define VS_MPHY_DISABLE_MPHYDIS (1 << 0) 100*7e080842SHaojian Zhuang 101*7e080842SHaojian Zhuang typedef struct dw_ufs_params { 102*7e080842SHaojian Zhuang uintptr_t reg_base; 103*7e080842SHaojian Zhuang uintptr_t desc_base; 104*7e080842SHaojian Zhuang size_t desc_size; 105*7e080842SHaojian Zhuang unsigned long flags; 106*7e080842SHaojian Zhuang } dw_ufs_params_t; 107*7e080842SHaojian Zhuang 108*7e080842SHaojian Zhuang int dw_ufs_init(dw_ufs_params_t *params); 109*7e080842SHaojian Zhuang 110*7e080842SHaojian Zhuang #endif /* __DW_UFS_H__ */ 111