/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2019 MediaTek Inc. * Author: Sagy Shih */ #ifndef __DRAMC_H__ #define __DRAMC_H__ struct mr_info_t { unsigned int mr_index; unsigned int mr_value; }; struct reg_ctrl_t { unsigned int offset; unsigned int mask; unsigned int shift; }; struct fmeter_dev_t { unsigned int version; unsigned int crystal_freq; unsigned int shu_of; struct reg_ctrl_t shu_lv; struct reg_ctrl_t pll_id; struct reg_ctrl_t pll_md[2]; struct reg_ctrl_t sdmpcw[2]; struct reg_ctrl_t prediv[2]; struct reg_ctrl_t posdiv[2]; struct reg_ctrl_t ckdiv4[2]; struct reg_ctrl_t cldiv2[2]; struct reg_ctrl_t fbksel[2]; #ifdef CONFIG_MEDIATEK_DRAMC struct reg_ctrl_t dqsopen[2]; #endif struct reg_ctrl_t dqopen[2]; #ifdef CONFIG_MEDIATEK_DRAMC struct reg_ctrl_t ckdiv4_ca[2]; #endif }; struct mr4_dev_t { unsigned int version; struct reg_ctrl_t mr4_rg; }; struct dramc_dev_t { unsigned int dram_type; unsigned int support_ch_cnt; unsigned int ch_cnt; unsigned int rk_cnt; unsigned int mr_cnt; unsigned int freq_cnt; unsigned int *rk_size; unsigned int *freq_step; struct mr_info_t *mr_info_ptr; void __iomem **dramc_chn_base_ao; void __iomem **dramc_chn_base_nao; void __iomem **ddrphy_chn_base_ao; void __iomem **ddrphy_chn_base_nao; void __iomem *sleep_base; void *mr4_dev_ptr; void *fmeter_dev_ptr; }; enum DRAM_TYPE { TYPE_DDR1 = 1, TYPE_LPDDR2, TYPE_LPDDR3, TYPE_PCDDR3, TYPE_LPDDR4, TYPE_LPDDR4X, TYPE_LPDDR4P, TYPE_LPDDR5 }; #ifdef CONFIG_MEDIATEK_DRAMC #define DPM_IRQ_CHA 0 #define DPM_IRQ_CHB 1 #endif int mtk_dramc_get_steps_freq(unsigned int step); unsigned int mtk_dramc_get_ddr_type(void); unsigned int mtk_dramc_get_data_rate(void); unsigned int mtk_dramc_get_mr4(unsigned int ch); #endif /* __DRAMC_H__ */