1*9ba91637STony Han /* SPDX-License-Identifier: BSD-2-Clause */ 2*9ba91637STony Han /* 3*9ba91637STony Han * Microchip SAMA7 UDDR Controller and DDR3 PHY Controller registers offsets 4*9ba91637STony Han * and bit definitions. 5*9ba91637STony Han * 6*9ba91637STony Han * Copyright (C) [2024] Microchip Technology Inc. and its subsidiaries 7*9ba91637STony Han * 8*9ba91637STony Han * Author: Tony Han <tony.han@microchip.com> 9*9ba91637STony Han */ 10*9ba91637STony Han 11*9ba91637STony Han #ifndef __SAMA7_DDR_H__ 12*9ba91637STony Han #define __SAMA7_DDR_H__ 13*9ba91637STony Han 14*9ba91637STony Han /* DDR3PHY */ 15*9ba91637STony Han /* DDR3PHY PHY Initialization Register */ 16*9ba91637STony Han #define DDR3PHY_PIR 0x04 17*9ba91637STony Han #define DDR3PHY_PIR_DLLBYP BIT(17) /* DLL Bypass */ 18*9ba91637STony Han #define DDR3PHY_PIR_ITMSRST BIT(4) /* Interface Timing Module Soft Reset */ 19*9ba91637STony Han #define DDR3PHY_PIR_DLLLOCK BIT(2) /* DLL Lock */ 20*9ba91637STony Han #define DDR3PHY_PIR_DLLSRST BIT(1) /* DLL Soft Rest */ 21*9ba91637STony Han #define DDR3PHY_PIR_INIT BIT(0) /* Initialization Trigger */ 22*9ba91637STony Han 23*9ba91637STony Han /* DDR3PHY PHY General Configuration Register */ 24*9ba91637STony Han #define DDR3PHY_PGCR 0x08 25*9ba91637STony Han #define DDR3PHY_PGCR_CKDV1 BIT(13) /* CK# Disable Value */ 26*9ba91637STony Han #define DDR3PHY_PGCR_CKDV0 BIT(12) /* CK Disable Value */ 27*9ba91637STony Han 28*9ba91637STony Han /* DDR3PHY PHY General Status Register */ 29*9ba91637STony Han #define DDR3PHY_PGSR 0x0C 30*9ba91637STony Han #define DDR3PHY_PGSR_IDONE BIT(0) /* Initialization Done */ 31*9ba91637STony Han 32*9ba91637STony Han /* DDR3PHY AC DLL Control Register */ 33*9ba91637STony Han #define DDR3PHY_ACDLLCR 0x14 34*9ba91637STony Han #define DDR3PHY_ACDLLCR_DLLSRST BIT(30) /* DLL Soft Reset */ 35*9ba91637STony Han 36*9ba91637STony Han /* DDR3PHY AC I/O Configuration Register */ 37*9ba91637STony Han #define DDR3PHY_ACIOCR 0x24 38*9ba91637STony Han #define DDR3PHY_ACIOCR_CSPDD_CS0 BIT(18) /* CS#[0] Power Down Driver */ 39*9ba91637STony Han #define DDR3PHY_ACIOCR_CKPDD_CK0 BIT(8) /* CK[0] Power Down Driver */ 40*9ba91637STony Han #define DDR3PHY_ACIORC_ACPDD BIT(3) /* AC Power Down Driver */ 41*9ba91637STony Han 42*9ba91637STony Han /* DDR3PHY DATX8 Common Configuration Register */ 43*9ba91637STony Han #define DDR3PHY_DXCCR 0x28 44*9ba91637STony Han #define DDR3PHY_DXCCR_DXPDR BIT(3) /* Data Power Down Receiver */ 45*9ba91637STony Han 46*9ba91637STony Han /* DDR3PHY DDR System General Configuration Register */ 47*9ba91637STony Han #define DDR3PHY_DSGCR 0x2C 48*9ba91637STony Han #define DDR3PHY_DSGCR_ODTPDD_ODT0 BIT(20) /* ODT[0] Power Down Driver */ 49*9ba91637STony Han 50*9ba91637STony Han /* ZQ status register 0 */ 51*9ba91637STony Han #define DDR3PHY_ZQ0SR0 0x188 52*9ba91637STony Han /* impedance select offset */ 53*9ba91637STony Han #define DDR3PHY_ZQ0SR0_PDO_OFF 0 /* Pull-down output */ 54*9ba91637STony Han #define DDR3PHY_ZQ0SR0_PUO_OFF 5 /* Pull-up output */ 55*9ba91637STony Han #define DDR3PHY_ZQ0SR0_PDODT_OFF 10 /* Pull-down on-die termination*/ 56*9ba91637STony Han #define DDR3PHY_ZQ0SRO_PUODT_OFF 15 /* Pull-up on-die termination */ 57*9ba91637STony Han 58*9ba91637STony Han /* DDR3PHY DATX8 DLL Control Register */ 59*9ba91637STony Han #define DDR3PHY_DX0DLLCR 0x1CC 60*9ba91637STony Han #define DDR3PHY_DX1DLLCR 0x20C /* DATX8 DLL Control Register */ 61*9ba91637STony Han #define DDR3PHY_DXDLLCR_DLLDIS BIT(31) /* DLL Disable */ 62*9ba91637STony Han 63*9ba91637STony Han /* UDDRC */ 64*9ba91637STony Han /* UDDRC Operating Mode Status Register */ 65*9ba91637STony Han #define UDDRC_STAT 0x04 66*9ba91637STony Han /* SDRAM is not in Self-refresh */ 67*9ba91637STony Han #define UDDRC_STAT_SELFREF_TYPE_DIS SHIFT_U32(0, 4) 68*9ba91637STony Han /* SDRAM is in Self-refresh, which was caused by PHY Master Request */ 69*9ba91637STony Han #define UDDRC_STAT_SELFREF_TYPE_PHY SHIFT_U32(1, 4) 70*9ba91637STony Han /* SDRAM is in Self-refresh, which was not caused solely under 71*9ba91637STony Han * Automatic Self-refresh control 72*9ba91637STony Han */ 73*9ba91637STony Han #define UDDRC_STAT_SELFREF_TYPE_SW SHIFT_U32(2, 4) 74*9ba91637STony Han /* SDRAM is in Self-refresh, which was caused by Automatic Self-refresh only */ 75*9ba91637STony Han #define UDDRC_STAT_SELFREF_TYPE_AUTO SHIFT_U32(3, 4) 76*9ba91637STony Han #define UDDRC_STAT_SELFREF_TYPE_MSK GENMASK_32(5, 4) 77*9ba91637STony Han #define UDDRC_STAT_OPMODE_INIT 0 78*9ba91637STony Han #define UDDRC_STAT_OPMODE_NORMAL 1 79*9ba91637STony Han #define UDDRC_STAT_OPMODE_PWRDOWN 2 80*9ba91637STony Han #define UDDRC_STAT_OPMODE_SELF_REFRESH 3 81*9ba91637STony Han #define UDDRC_STAT_OPMODE_MSK GENMASK_32(2, 0) 82*9ba91637STony Han 83*9ba91637STony Han /* UDDRC Low Power Control Register */ 84*9ba91637STony Han #define UDDRC_PWRCTL 0x30 85*9ba91637STony Han #define UDDRC_PWRCTL_SELFREF_EN BIT(0) /* Automatic self-refresh */ 86*9ba91637STony Han #define UDDRC_PWRCTL_SELFREF_SW BIT(5) /* Software self-refresh */ 87*9ba91637STony Han 88*9ba91637STony Han /* UDDRC DFI Miscellaneous Control Register */ 89*9ba91637STony Han #define UDDRC_DFIMISC 0x1B0 90*9ba91637STony Han /* PHY initialization complete enable signal */ 91*9ba91637STony Han #define UDDRC_DFIMISC_DFI_INIT_COMPLETE_EN BIT(0) 92*9ba91637STony Han 93*9ba91637STony Han /* UDDRC Software Register Programming Control Enable */ 94*9ba91637STony Han #define UDDRC_SWCTRL 0x320 95*9ba91637STony Han /* Enable quasi-dynamic register programming outside reset */ 96*9ba91637STony Han #define UDDRC_SWCTRL_SW_DONE BIT(0) 97*9ba91637STony Han 98*9ba91637STony Han /* UDDRC Software Register Programming Control Status */ 99*9ba91637STony Han #define UDDRC_SWSTAT 0x324 100*9ba91637STony Han #define UDDRC_SWSTAT_SW_DONE_ACK BIT(0) /* Register programming done */ 101*9ba91637STony Han 102*9ba91637STony Han /* UDDRC Port Status Register */ 103*9ba91637STony Han #define UDDRC_PSTAT 0x3FC 104*9ba91637STony Han /* Read + writes outstanding transactions on all ports */ 105*9ba91637STony Han #define UDDRC_PSTAT_ALL_PORTS 0x1F001F 106*9ba91637STony Han 107*9ba91637STony Han #define UDDRC_PCTRL_0 0x490 /* Port 0 Control Register */ 108*9ba91637STony Han #define UDDRC_PCTRL_1 0x540 /* Port 1 Control Register */ 109*9ba91637STony Han #define UDDRC_PCTRL_2 0x5F0 /* Port 2 Control Register */ 110*9ba91637STony Han #define UDDRC_PCTRL_3 0x6A0 /* Port 3 Control Register */ 111*9ba91637STony Han #define UDDRC_PCTRL_4 0x750 /* Port 4 Control Register */ 112*9ba91637STony Han 113*9ba91637STony Han #endif /* __SAMA7_DDR_H__ */ 114