xref: /rk3399_rockchip-uboot/arch/arm/include/asm/arch-rockchip/sdram_phy_px30.h (revision b8dc613cbc483a8abfcf4203e4fa0e18f60b1d27)
174803decSYouMin Chen /* SPDX-License-Identifier:     GPL-2.0+ */
274803decSYouMin Chen /*
374803decSYouMin Chen  * Copyright (C) 2018 Rockchip Electronics Co., Ltd
474803decSYouMin Chen  */
574803decSYouMin Chen 
674803decSYouMin Chen #ifndef _ASM_ARCH_SDRAM_PHY_PX30_H
774803decSYouMin Chen #define _ASM_ARCH_SDRAM_PHY_PX30_H
8*5685f66aSYouMin Chen #include <asm/arch/sdram_common.h>
974803decSYouMin Chen #include <asm/arch/sdram_phy_ron_rtt_px30.h>
1074803decSYouMin Chen 
1174803decSYouMin Chen struct ddr_phy_regs {
1274803decSYouMin Chen 	u32 phy[5][2];
1374803decSYouMin Chen };
1474803decSYouMin Chen 
1574803decSYouMin Chen #define PHY_REG(base, n)		((base) + 4 * (n))
1674803decSYouMin Chen 
1774803decSYouMin Chen /* PHY_REG0 */
1874803decSYouMin Chen #define DIGITAL_DERESET			BIT(3)
1974803decSYouMin Chen #define ANALOG_DERESET			BIT(2)
2074803decSYouMin Chen #define DIGITAL_RESET			(0 << 3)
2174803decSYouMin Chen #define ANALOG_RESET			(0 << 2)
2274803decSYouMin Chen 
2374803decSYouMin Chen /* PHY_REG1 */
2474803decSYouMin Chen #define PHY_DDR2			(0)
2574803decSYouMin Chen #define PHY_LPDDR2			(1)
2674803decSYouMin Chen #define PHY_DDR3			(2)
2774803decSYouMin Chen #define PHY_LPDDR3			(3)
2874803decSYouMin Chen #define PHY_DDR4			(4)
2974803decSYouMin Chen #define PHY_BL_4			(0 << 2)
3074803decSYouMin Chen #define PHY_BL_8			BIT(2)
3174803decSYouMin Chen 
3274803decSYouMin Chen /* PHY_REG2 */
3374803decSYouMin Chen #define PHY_DTT_EN			BIT(0)
3474803decSYouMin Chen #define PHY_DTT_DISB			(0 << 0)
3574803decSYouMin Chen #define PHY_WRITE_LEVELING_EN		BIT(2)
3674803decSYouMin Chen #define PHY_WRITE_LEVELING_DISB		(0 << 2)
3774803decSYouMin Chen #define PHY_SELECT_CS0			(2)
3874803decSYouMin Chen #define PHY_SELECT_CS1			(1)
3974803decSYouMin Chen #define PHY_SELECT_CS0_1		(0)
4074803decSYouMin Chen #define PHY_WRITE_LEVELING_SELECTCS(n)	((n) << 6)
4174803decSYouMin Chen #define PHY_DATA_TRAINING_SELECTCS(n)	((n) << 4)
4274803decSYouMin Chen 
4374803decSYouMin Chen struct ddr_phy_skew {
4474803decSYouMin Chen 	u32 a0_a1_skew[15];
4574803decSYouMin Chen 	u32 cs0_dm0_skew[11];
4674803decSYouMin Chen 	u32 cs0_dm1_skew[11];
4774803decSYouMin Chen 	u32 cs0_dm2_skew[11];
4874803decSYouMin Chen 	u32 cs0_dm3_skew[11];
4974803decSYouMin Chen 	u32 cs1_dm0_skew[11];
5074803decSYouMin Chen 	u32 cs1_dm1_skew[11];
5174803decSYouMin Chen 	u32 cs1_dm2_skew[11];
5274803decSYouMin Chen 	u32 cs1_dm3_skew[11];
5374803decSYouMin Chen };
5474803decSYouMin Chen 
5574803decSYouMin Chen void phy_soft_reset(void __iomem *phy_base);
5674803decSYouMin Chen void phy_dram_set_bw(void __iomem *phy_base, u32 bw);
5774803decSYouMin Chen void phy_cfg(void __iomem *phy_base,
5874803decSYouMin Chen 	     struct ddr_phy_regs *phy_regs, struct ddr_phy_skew *skew,
5974803decSYouMin Chen 	     struct sdram_base_params *base, u32 bw);
6074803decSYouMin Chen int phy_data_training(void __iomem *phy_base, u32 cs, u32 dramtype);
6174803decSYouMin Chen 
6274803decSYouMin Chen #endif
63