root/sys/arch/arm/imx/imxpciereg.h
/*      $NetBSD: imxpciereg.h,v 1.4 2024/02/07 04:20:26 msaitoh Exp $   */

/*
 * Copyright (c) 2015 Ryo Shimizu
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef _ARM_IMX_IMX6_PCIEREG_H_
#define _ARM_IMX_IMX6_PCIEREG_H_

/* PCIe EP Mode Registers */
#define PCIE_EP_DEVICEID                        0x00000000
#define PCIE_EP_COMMAND                         0x00000004
#define PCIE_EP_BIST                            0x0000000c
#define PCIE_EP_BAR0                            0x00000010
#define PCIE_EP_MASK0                           0x00000010
#define PCIE_EP_MASK1                           0x00000014
#define PCIE_EP_MASK2                           0x00000018
#define PCIE_EP_MASK3                           0x0000001c
#define PCIE_EP_CISP                            0x00000028
#define PCIE_EP_SSID                            0x0000002c
#define PCIE_EP_EROMBAR                         0x00000030
#define PCIE_EP_EROMMASK                        0x00000030
#define PCIE_EP_CAPPR                           0x00000034
#define PCIE_EP_ILR                             0x0000003c
#define PCIE_EP_AER                             0x00000100
#define PCIE_EP_UESR                            0x00000104
#define PCIE_EP_UEMR                            0x00000108
#define PCIE_EP_UESEVR                          0x0000010c
#define PCIE_EP_CESR                            0x00000110
#define PCIE_EP_CEMR                            0x00000114
#define PCIE_EP_ACCR                            0x00000118
#define PCIE_EP_HLR                             0x0000011c
#define PCIE_EP_VCECHR                          0x00000140
#define PCIE_EP_PVCCR1                          0x00000144
#define PCIE_EP_PVCCR2                          0x00000148
#define PCIE_EP_PVCCSR                          0x0000014c
#define PCIE_EP_VCRCR                           0x00000150
#define PCIE_EP_VCRCONR                         0x00000154
#define PCIE_EP_VCRSR                           0x00000158

/* PCIe RC Mode Registers */
#define PCIE_RC_DEVICEID                        0x00000000
#define PCIE_RC_COMMAND                         0x00000004
#define PCIE_RC_REVID                           0x00000008
#define PCIE_RC_BIST                            0x0000000c
#define PCIE_RC_BAR0                            0x00000010
#define PCIE_RC_BAR1                            0x00000014
#define PCIE_RC_BNR                             0x00000018
#define PCIE_RC_IOBLSSR                         0x0000001c
#define PCIE_RC_MEM_BLR                         0x00000020
#define PCIE_RC_PREF_MEM_BLR                    0x00000024
#define PCIE_RC_PREF_BASE_U32                   0x00000028
#define PCIE_RC_PREF_LIM_U32                    0x0000002c
#define PCIE_RC_IO_BASE_LIM_U16                 0x00000030
#define PCIE_RC_CAPPR                           0x00000034
#define PCIE_RC_EROMBAR                         0x00000038
#define PCIE_RC_EROMMASK                        0x00000038
#define PCIE_RC_PMCR                            0x00000040
#define PCIE_RC_PMCSR                           0x00000044
#define PCIE_RC_CIDR                            0x00000070
#define PCIE_RC_DCR                             0x00000074
#define PCIE_RC_DCONR                           0x00000078
#define PCIE_RC_LCR                             0x0000007c
#define  PCIE_RC_LCR_MAX_LINK_SPEEDS            __BITS(3, 0)
#define  PCIE_RC_LCR_MAX_LINK_SPEEDS_GEN1       __SHIFTIN(0x1, PCIE_RC_LCR_MAX_LINK_SPEEDS)
#define  PCIE_RC_LCR_MAX_LINK_SPEEDS_GEN2       __SHIFTIN(0x2, PCIE_RC_LCR_MAX_LINK_SPEEDS)
#define PCIE_RC_LCSR                            0x00000080
#define  PCIE_RC_LCSR_LINK_SPEED                __BITS(19, 16)
#define PCIE_RC_SCR                             0x00000084
#define PCIE_RC_SCSR                            0x00000088
#define PCIE_RC_RCCR                            0x0000008c
#define PCIE_RC_RSR                             0x00000090
#define PCIE_RC_DCR2                            0x00000094
#define PCIE_RC_DCSR2                           0x00000098
#define PCIE_RC_LCR2                            0x0000009c
#define PCIE_RC_LCSR2                           0x000000a0
#define PCIE_RC_AER                             0x00000100
#define PCIE_RC_UESR                            0x00000104
#define PCIE_RC_UEMR                            0x00000108
#define PCIE_RC_UESEVR                          0x0000010c
#define PCIE_RC_CESR                            0x00000110
#define PCIE_RC_CEMR                            0x00000114
#define PCIE_RC_ACCR                            0x00000118
#define PCIE_RC_HLR                             0x0000011c
#define PCIE_RC_RECR                            0x0000012c
#define PCIE_RC_RESR                            0x00000130
#define PCIE_RC_ESIR                            0x00000134
#define PCIE_RC_VCECHR                          0x00000140
#define PCIE_RC_PVCCR1                          0x00000144
#define PCIE_RC_PVCCR2                          0x00000148
#define PCIE_RC_PVCCSR                          0x0000014c
#define PCIE_RC_VCRCR                           0x00000150
#define PCIE_RC_VCRCONR                         0x00000154
#define PCIE_RC_VCRSR                           0x00000158

/* PCIe Port Logic Registers */
#define PCIE_PL_ALTRTR                          0x00000700
#define PCIE_PL_VSDR                            0x00000704
#define PCIE_PL_PFLR                            0x00000708
#define  PCIE_PL_PFLR_LOW_POWER_ENTRANCE_COUNT  __BITS(31, 24)
#define  PCIE_PL_PFLR_LINK_STATE                __BITS(21, 16)
#define  PCIE_PL_PFLR_FORCE_LINK                __BIT(15)
#define  PCIE_PL_PFLR_LINK_NUMBER               __BITS(7, 0)
#define PCIE_PL_AFLACR                          0x0000070c
#define PCIE_PL_PLCR                            0x00000710
#define  PCIE_PL_PLCR_LINK_MODE_ENABLE          __BITS(21, 16)
#define PCIE_PL_LSR                             0x00000714
#define PCIE_PL_SNR                             0x00000718
#define PCIE_PL_STRFM1                          0x0000071c
#define PCIE_PL_STRFM2                          0x00000720
#define PCIE_PL_AMODNPSR                        0x00000724
#define PCIE_PL_DEBUG0                          0x00000728
#define  PCIE_PL_DEBUG0_XMLH_LTSSM_STATE        __BITS(0, 5)
#define PCIE_PL_DEBUG1                          0x0000072c
#define  PCIE_PL_DEBUG1_XMLH_LINK_UP            __BIT(4)
#define  PCIE_PL_DEBUG1_XMLH_LINK_IN_TRAINING   __BIT(29)
#define PCIE_PL_TPFCSR                          0x00000730
#define PCIE_PL_TNFCSR                          0x00000734
#define PCIE_PL_TCFCSR                          0x00000738
#define PCIE_PL_QSR                             0x0000073c
#define PCIE_PL_VCTAR1                          0x00000740
#define PCIE_PL_VCTAR2                          0x00000744
#define PCIE_PL_VC0PRQC                         0x00000748
#define PCIE_PL_VC0NRQC                         0x0000074c
#define PCIE_PL_VC0CRQC                         0x00000750
#define PCIE_PL_VCNPRQC                         0x00000754
#define PCIE_PL_VCNNRQC                         0x00000758
#define PCIE_PL_VCNCRQC                         0x0000075c
#define PCIE_PL_VC0PBD                          0x000007a8
#define PCIE_PL_VC0NPBD                         0x000007ac
#define PCIE_PL_VC0CBD                          0x000007b0
#define PCIE_PL_VC1PBD                          0x000007b4
#define PCIE_PL_VC1NPBD                         0x000007b8
#define PCIE_PL_VC1CBD                          0x000007bc
#define PCIE_PL_G2CR                            0x0000080c
#define  PCIE_PL_G2CR_DIRECTED_SPEED_CHANGE     __BIT(17)
#define  PCIE_PL_G2CR_PREDETERMINED_NUMBER_OF_LANES     __BITS(16, 8)
#define PCIE_PL_PHY_STATUS                      0x00000810
#define  PCIE_PL_PHY_STATUS_ACK                 __BIT(16)
#define  PCIE_PL_PHY_STATUS_DATA                __BITS(0, 15)
#define PCIE_PL_PHY_CTRL                        0x00000814
#define  PCIE_PL_PHY_CTRL_RD                    __BIT(19)
#define  PCIE_PL_PHY_CTRL_WR                    __BIT(18)
#define  PCIE_PL_PHY_CTRL_CAP_DAT               __BIT(17)
#define  PCIE_PL_PHY_CTRL_CAP_ADR               __BIT(16)
#define  PCIE_PL_PHY_CTRL_DATA                  __BITS(0, 15)
#define PCIE_PL_MRCCR0                          0x00000818
#define PCIE_PL_MRCCR1                          0x0000081c
#define PCIE_PL_MSICA                           0x00000820
#define PCIE_PL_MSICUA                          0x00000824
#define PCIE_PL_MSICIN_ENB                      0x00000828
#define PCIE_PL_MSICIN_MASK                     0x0000082c
#define PCIE_PL_MSICIN_STATUS                   0x00000830
#define PCIE_PL_MSICGPIO                        0x00000888

// ATU_R_BaseAddress 0x900
#define PCIE_PL_IATUVR                          0x00000900
// ATU_VIEWPORT_R (ATU_R_BaseAddress + 0x0)

#define PCIE_PL_IATURC1                         0x00000904
// ATU_REGION_CTRL1_R (ATU_R_BaseAddress + 0x4)
#define  PCIE_PL_IATURC1_FUNC                   __BITS(22, 20)
#define  PCIE_PL_IATURC1_AT                     __BITS(17, 16)
#define  PCIE_PL_IATURC1_ATTR                   __BITS(10, 9)
#define  PCIE_PL_IATURC1_TD                     __BIT(8)
#define  PCIE_PL_IATURC1_TC                     __BITS(7, 5)
#define  PCIE_PL_IATURC1_TYPE                   __BITS(4, 0)
#define   PCIE_PL_IATURC1_TYPE_IO               __SHIFTIN(0, PCIE_PL_IATURC1_TYPE)
#define   PCIE_PL_IATURC1_TYPE_MEM              __SHIFTIN(2, PCIE_PL_IATURC1_TYPE)
#define   PCIE_PL_IATURC1_TYPE_CFG0             __SHIFTIN(4, PCIE_PL_IATURC1_TYPE)
#define   PCIE_PL_IATURC1_TYPE_CFG1             __SHIFTIN(5, PCIE_PL_IATURC1_TYPE)

#define PCIE_PL_IATURC2                         0x00000908
// ATU_REGION_CTRL2_R (ATU_R_BaseAddress + 0x8)
#define  PCIE_PL_IATURC2_REGION_ENABLE          __BIT(31)

#define PCIE_PL_IATURLBA                        0x0000090c
// ATU_REGION_LOWBASE_R (ATU_R_BaseAddress + 0xC)

#define PCIE_PL_IATURUBA                        0x00000910
// ATU_REGION_UPBASE_R (ATU_R_BaseAddress + 0x10)

#define PCIE_PL_IATURLA                         0x00000914
// ATU_REGION_LIMIT_ADDR_R (ATU_R_BaseAddress + 0x14)

#define PCIE_PL_IATURLTA                        0x00000918
// ATU_REGION_LOW_TRGT_ADDR_R (ATU_R_BaseAddress + 0x18)

#define PCIE_PL_IATURUTA                        0x0000091c
// ATU_REGION_UP_TRGT_ADDR_R (ATU_R_BaseAddress + 0x1C)

/* PCIe PHY registers */
#define PCIE_PHY_IDCODE_LO                      0x0000
#define PCIE_PHY_IDCODE_HI                      0x0001
#define PCIE_PHY_DEBUG                          0x0002
#define PCIE_PHY_RTUNE_DEBUG                    0x0003
#define PCIE_PHY_RTUNE_STAT                     0x0004
#define PCIE_PHY_SS_PHASE                       0x0005
#define PCIE_PHY_SS_FREQ                        0x0006
#define PCIE_PHY_ATEOVRD                        0x0010
#define  ATEOVRD_EN                             __BIT(2)
#define  REF_USB2_EN                            __BIT(1)
#define  REF_CLKDIV2                            __BIT(0)
#define PCIE_PHY_MPLL_OVRD_IN_LO                0x0011
#define PCIE_PHY_MPLL_OVRD_IN_HI                0x0011
#define  RES_ACK_IN_OVRD                        __BIT(15)
#define  RES_ACK_IN                             __BIT(14)
#define  RES_REQ_IN_OVRD                        __BIT(13)
#define  RES_REQ_IN                             __BIT(12)
#define  RTUNE_REQ_OVRD                         __BIT(11)
#define  RTUNE_REQ                              __BIT(10)
#define  MPLL_MULTIPLIER_OVRD                   __BIT(9)
#define  MPLL_MULTIPLIER                        __BITS(8, 2)
#define  MPLL_EN_OVRD                           __BIT(1)
#define  MPLL_EN                                __BIT(0)
#define PCIE_PHY_SSC_OVRD_IN                    0x0013
#define PCIE_PHY_BS_OVRD_IN                     0x0014
#define PCIE_PHY_LEVEL_OVRD_IN                  0x0015
#define PCIE_PHY_SUP_OVRD_OUT                   0x0016
#define PCIE_PHY_MPLL_ASIC_IN                   0x0017
#define PCIE_PHY_BS_ASIC_IN                     0x0018
#define PCIE_PHY_LEVEL_ASIC_IN                  0x0019
#define PCIE_PHY_SSC_ASIC_IN                    0x001a
#define PCIE_PHY_SUP_ASIC_OUT                   0x001b
#define PCIE_PHY_ATEOVRD_STATUS                 0x001c
#define PCIE_PHY_SCOPE_ENABLES                  0x0020
#define PCIE_PHY_SCOPE_SAMPLES                  0x0021
#define PCIE_PHY_SCOPE_COUNT                    0x0022
#define PCIE_PHY_SCOPE_CTL                      0x0023
#define PCIE_PHY_SCOPE_MASK_000                 0x0024
#define PCIE_PHY_SCOPE_MASK_001                 0x0025
#define PCIE_PHY_SCOPE_MASK_010                 0x0026
#define PCIE_PHY_SCOPE_MASK_011                 0x0027
#define PCIE_PHY_SCOPE_MASK_100                 0x0028
#define PCIE_PHY_SCOPE_MASK_101                 0x0029
#define PCIE_PHY_SCOPE_MASK_110                 0x002a
#define PCIE_PHY_SCOPE_MASK_111                 0x002b
#define PCIE_PHY_MPLL_LOOP_CTL                  0x0030
#define PCIE_PHY_MPLL_ATB_MEAS2                 0x0032
#define PCIE_PHY_MPLL_OVR                       0x0033
#define PCIE_PHY_RTUNE_RTUNE_CTRL               0x0034
#define PCIE_PHY_TX_OVRD_IN_LO                  0x1000
#define PCIE_PHY_TX_OVRD_IN_HI                  0x1001
#define PCIE_PHY_TX_OVRD_DRV_LO                 0x1003
#define PCIE_PHY_TX_OVRD_OUT                    0x1004
#define PCIE_PHY_RX_OVRD_IN_LO                  0x1005
#define  PCIE_PHY_RX_OVRD_IN_LO_RX_PLL_EN_OVRD  __BIT(3)
#define  PCIE_PHY_RX_OVRD_IN_LO_RX_DATA_EN_OVRD __BIT(5)
#define PCIE_PHY_RX_OVRD_IN_HI                  0x1006
#define PCIE_PHY_RX_OVRD_OUT                    0x1007
#define PCIE_PHY_TX_ASIC_IN                     0x1008
#define PCIE_PHY_TX_ASIC_DRV_LO                 0x1009
#define PCIE_PHY_TX_ASIC_DRV_HI                 0x100a
#define PCIE_PHY_TX_ASIC_OUT                    0x100b
#define PCIE_PHY_RX_ASIC_IN                     0x100c
#define PCIE_PHY_RX_ASIC_OUT                    0x100d
#define  PCIE_PHY_RX_ASIC_OUT_LOS               __BIT(2)
#define  PCIE_PHY_RX_ASIC_OUT_PLL_STATE         __BIT(1)
#define  PCIE_PHY_RX_ASIC_OUT_VALID             __BIT(0)
#define PCIE_PHY_TX_VMD_FSM_TX_VCM_0            0x1011
#define PCIE_PHY_TX_VMD_FSM_TX_VCM_1            0x1012
#define PCIE_PHY_TX_VMD_FSM_TX_VCM_DEBUG_IN     0x1013
#define PCIE_PHY_TX_VMD_FSM_TX_VCM_DEBUG_OUT    0x1014
#define PCIE_PHY_TX_LBERT_CTL                   0x1015
#define PCIE_PHY_RX_LBERT_CTL                   0x1016
#define PCIE_PHY_RX_LBERT_ERR                   0x1017
#define PCIE_PHY_RX_SCOPE_CTL                   0x1018
#define PCIE_PHY_RX_SCOPE_PHASE                 0x1019
#define PCIE_PHY_RX_DPLL_FREQ                   0x101a
#define PCIE_PHY_RX_CDR_CTL                     0x101b
#define PCIE_PHY_RX_CDR_CDR_FSM_DEBUG           0x101c
#define PCIE_PHY_RX_CDR_LOCK_VEC_OVRD           0x101d
#define PCIE_PHY_RX_CDR_LOCK_VEC                0x101e
#define PCIE_PHY_RX_CDR_ADAP_FSM                0x101f
#define PCIE_PHY_RX_ATB0                        0x1020
#define PCIE_PHY_RX_ATB1                        0x1021
#define PCIE_PHY_RX_ENPWR0                      0x1022
#define PCIE_PHY_RX_PMIX_PHASE                  0x1023
#define PCIE_PHY_RX_ENPWR1                      0x1024
#define PCIE_PHY_RX_ENPWR2                      0x1025
#define PCIE_PHY_RX_SCOPE                       0x1026
#define PCIE_PHY_TX_TXDRV_CNTRL                 0x102b
#define PCIE_PHY_TX_POWER_CTL                   0x102c
#define PCIE_PHY_TX_ALT_BLOCK                   0x102d
#define PCIE_PHY_TX_ALT_AND_LOOPBACK            0x102e
#define PCIE_PHY_TX_TX_ATB_REG                  0x102f

#endif /* _ARM_IMX_IMX6_PCIEREG_H_ */