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