xref: /openbmc/linux/include/linux/ti-emif-sram.h (revision 2aec85b2)
1*2aec85b2SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
28428e5adSDave Gerlach /*
38428e5adSDave Gerlach  * TI AM33XX EMIF Routines
48428e5adSDave Gerlach  *
58428e5adSDave Gerlach  * Copyright (C) 2016-2017 Texas Instruments Inc.
68428e5adSDave Gerlach  *	Dave Gerlach
78428e5adSDave Gerlach  */
88428e5adSDave Gerlach #ifndef __LINUX_TI_EMIF_H
98428e5adSDave Gerlach #define __LINUX_TI_EMIF_H
108428e5adSDave Gerlach 
118428e5adSDave Gerlach #include <linux/kbuild.h>
128428e5adSDave Gerlach #include <linux/types.h>
138428e5adSDave Gerlach #ifndef __ASSEMBLY__
148428e5adSDave Gerlach 
158428e5adSDave Gerlach struct emif_regs_amx3 {
168428e5adSDave Gerlach 	u32 emif_sdcfg_val;
178428e5adSDave Gerlach 	u32 emif_timing1_val;
188428e5adSDave Gerlach 	u32 emif_timing2_val;
198428e5adSDave Gerlach 	u32 emif_timing3_val;
208428e5adSDave Gerlach 	u32 emif_ref_ctrl_val;
218428e5adSDave Gerlach 	u32 emif_zqcfg_val;
228428e5adSDave Gerlach 	u32 emif_pmcr_val;
238428e5adSDave Gerlach 	u32 emif_pmcr_shdw_val;
248428e5adSDave Gerlach 	u32 emif_rd_wr_level_ramp_ctrl;
258428e5adSDave Gerlach 	u32 emif_rd_wr_exec_thresh;
268428e5adSDave Gerlach 	u32 emif_cos_config;
278428e5adSDave Gerlach 	u32 emif_priority_to_cos_mapping;
288428e5adSDave Gerlach 	u32 emif_connect_id_serv_1_map;
298428e5adSDave Gerlach 	u32 emif_connect_id_serv_2_map;
308428e5adSDave Gerlach 	u32 emif_ocp_config_val;
318428e5adSDave Gerlach 	u32 emif_lpddr2_nvm_tim;
328428e5adSDave Gerlach 	u32 emif_lpddr2_nvm_tim_shdw;
338428e5adSDave Gerlach 	u32 emif_dll_calib_ctrl_val;
348428e5adSDave Gerlach 	u32 emif_dll_calib_ctrl_val_shdw;
358428e5adSDave Gerlach 	u32 emif_ddr_phy_ctlr_1;
368428e5adSDave Gerlach 	u32 emif_ext_phy_ctrl_vals[120];
378428e5adSDave Gerlach };
388428e5adSDave Gerlach 
398428e5adSDave Gerlach struct ti_emif_pm_data {
408428e5adSDave Gerlach 	void __iomem *ti_emif_base_addr_virt;
418428e5adSDave Gerlach 	phys_addr_t ti_emif_base_addr_phys;
428428e5adSDave Gerlach 	unsigned long ti_emif_sram_config;
438428e5adSDave Gerlach 	struct emif_regs_amx3 *regs_virt;
448428e5adSDave Gerlach 	phys_addr_t regs_phys;
458428e5adSDave Gerlach } __packed __aligned(8);
468428e5adSDave Gerlach 
478428e5adSDave Gerlach struct ti_emif_pm_functions {
488428e5adSDave Gerlach 	u32 save_context;
498428e5adSDave Gerlach 	u32 restore_context;
506c110561SDave Gerlach 	u32 run_hw_leveling;
518428e5adSDave Gerlach 	u32 enter_sr;
528428e5adSDave Gerlach 	u32 exit_sr;
538428e5adSDave Gerlach 	u32 abort_sr;
548428e5adSDave Gerlach } __packed __aligned(8);
558428e5adSDave Gerlach 
ti_emif_asm_offsets(void)565692fceeSDave Gerlach static inline void ti_emif_asm_offsets(void)
575692fceeSDave Gerlach {
585692fceeSDave Gerlach 	DEFINE(EMIF_SDCFG_VAL_OFFSET,
595692fceeSDave Gerlach 	       offsetof(struct emif_regs_amx3, emif_sdcfg_val));
605692fceeSDave Gerlach 	DEFINE(EMIF_TIMING1_VAL_OFFSET,
615692fceeSDave Gerlach 	       offsetof(struct emif_regs_amx3, emif_timing1_val));
625692fceeSDave Gerlach 	DEFINE(EMIF_TIMING2_VAL_OFFSET,
635692fceeSDave Gerlach 	       offsetof(struct emif_regs_amx3, emif_timing2_val));
645692fceeSDave Gerlach 	DEFINE(EMIF_TIMING3_VAL_OFFSET,
655692fceeSDave Gerlach 	       offsetof(struct emif_regs_amx3, emif_timing3_val));
665692fceeSDave Gerlach 	DEFINE(EMIF_REF_CTRL_VAL_OFFSET,
675692fceeSDave Gerlach 	       offsetof(struct emif_regs_amx3, emif_ref_ctrl_val));
685692fceeSDave Gerlach 	DEFINE(EMIF_ZQCFG_VAL_OFFSET,
695692fceeSDave Gerlach 	       offsetof(struct emif_regs_amx3, emif_zqcfg_val));
705692fceeSDave Gerlach 	DEFINE(EMIF_PMCR_VAL_OFFSET,
715692fceeSDave Gerlach 	       offsetof(struct emif_regs_amx3, emif_pmcr_val));
725692fceeSDave Gerlach 	DEFINE(EMIF_PMCR_SHDW_VAL_OFFSET,
735692fceeSDave Gerlach 	       offsetof(struct emif_regs_amx3, emif_pmcr_shdw_val));
745692fceeSDave Gerlach 	DEFINE(EMIF_RD_WR_LEVEL_RAMP_CTRL_OFFSET,
755692fceeSDave Gerlach 	       offsetof(struct emif_regs_amx3, emif_rd_wr_level_ramp_ctrl));
765692fceeSDave Gerlach 	DEFINE(EMIF_RD_WR_EXEC_THRESH_OFFSET,
775692fceeSDave Gerlach 	       offsetof(struct emif_regs_amx3, emif_rd_wr_exec_thresh));
785692fceeSDave Gerlach 	DEFINE(EMIF_COS_CONFIG_OFFSET,
795692fceeSDave Gerlach 	       offsetof(struct emif_regs_amx3, emif_cos_config));
805692fceeSDave Gerlach 	DEFINE(EMIF_PRIORITY_TO_COS_MAPPING_OFFSET,
815692fceeSDave Gerlach 	       offsetof(struct emif_regs_amx3, emif_priority_to_cos_mapping));
825692fceeSDave Gerlach 	DEFINE(EMIF_CONNECT_ID_SERV_1_MAP_OFFSET,
835692fceeSDave Gerlach 	       offsetof(struct emif_regs_amx3, emif_connect_id_serv_1_map));
845692fceeSDave Gerlach 	DEFINE(EMIF_CONNECT_ID_SERV_2_MAP_OFFSET,
855692fceeSDave Gerlach 	       offsetof(struct emif_regs_amx3, emif_connect_id_serv_2_map));
865692fceeSDave Gerlach 	DEFINE(EMIF_OCP_CONFIG_VAL_OFFSET,
875692fceeSDave Gerlach 	       offsetof(struct emif_regs_amx3, emif_ocp_config_val));
885692fceeSDave Gerlach 	DEFINE(EMIF_LPDDR2_NVM_TIM_OFFSET,
895692fceeSDave Gerlach 	       offsetof(struct emif_regs_amx3, emif_lpddr2_nvm_tim));
905692fceeSDave Gerlach 	DEFINE(EMIF_LPDDR2_NVM_TIM_SHDW_OFFSET,
915692fceeSDave Gerlach 	       offsetof(struct emif_regs_amx3, emif_lpddr2_nvm_tim_shdw));
925692fceeSDave Gerlach 	DEFINE(EMIF_DLL_CALIB_CTRL_VAL_OFFSET,
935692fceeSDave Gerlach 	       offsetof(struct emif_regs_amx3, emif_dll_calib_ctrl_val));
945692fceeSDave Gerlach 	DEFINE(EMIF_DLL_CALIB_CTRL_VAL_SHDW_OFFSET,
955692fceeSDave Gerlach 	       offsetof(struct emif_regs_amx3, emif_dll_calib_ctrl_val_shdw));
965692fceeSDave Gerlach 	DEFINE(EMIF_DDR_PHY_CTLR_1_OFFSET,
975692fceeSDave Gerlach 	       offsetof(struct emif_regs_amx3, emif_ddr_phy_ctlr_1));
985692fceeSDave Gerlach 	DEFINE(EMIF_EXT_PHY_CTRL_VALS_OFFSET,
995692fceeSDave Gerlach 	       offsetof(struct emif_regs_amx3, emif_ext_phy_ctrl_vals));
1005692fceeSDave Gerlach 	DEFINE(EMIF_REGS_AMX3_SIZE, sizeof(struct emif_regs_amx3));
1015692fceeSDave Gerlach 
1025692fceeSDave Gerlach 	BLANK();
1035692fceeSDave Gerlach 
1045692fceeSDave Gerlach 	DEFINE(EMIF_PM_BASE_ADDR_VIRT_OFFSET,
1055692fceeSDave Gerlach 	       offsetof(struct ti_emif_pm_data, ti_emif_base_addr_virt));
1065692fceeSDave Gerlach 	DEFINE(EMIF_PM_BASE_ADDR_PHYS_OFFSET,
1075692fceeSDave Gerlach 	       offsetof(struct ti_emif_pm_data, ti_emif_base_addr_phys));
1085692fceeSDave Gerlach 	DEFINE(EMIF_PM_CONFIG_OFFSET,
1095692fceeSDave Gerlach 	       offsetof(struct ti_emif_pm_data, ti_emif_sram_config));
1105692fceeSDave Gerlach 	DEFINE(EMIF_PM_REGS_VIRT_OFFSET,
1115692fceeSDave Gerlach 	       offsetof(struct ti_emif_pm_data, regs_virt));
1125692fceeSDave Gerlach 	DEFINE(EMIF_PM_REGS_PHYS_OFFSET,
1135692fceeSDave Gerlach 	       offsetof(struct ti_emif_pm_data, regs_phys));
1145692fceeSDave Gerlach 	DEFINE(EMIF_PM_DATA_SIZE, sizeof(struct ti_emif_pm_data));
1155692fceeSDave Gerlach 
1165692fceeSDave Gerlach 	BLANK();
1175692fceeSDave Gerlach 
1185692fceeSDave Gerlach 	DEFINE(EMIF_PM_SAVE_CONTEXT_OFFSET,
1195692fceeSDave Gerlach 	       offsetof(struct ti_emif_pm_functions, save_context));
1205692fceeSDave Gerlach 	DEFINE(EMIF_PM_RESTORE_CONTEXT_OFFSET,
1215692fceeSDave Gerlach 	       offsetof(struct ti_emif_pm_functions, restore_context));
1226c110561SDave Gerlach 	DEFINE(EMIF_PM_RUN_HW_LEVELING,
1236c110561SDave Gerlach 	       offsetof(struct ti_emif_pm_functions, run_hw_leveling));
1245692fceeSDave Gerlach 	DEFINE(EMIF_PM_ENTER_SR_OFFSET,
1255692fceeSDave Gerlach 	       offsetof(struct ti_emif_pm_functions, enter_sr));
1265692fceeSDave Gerlach 	DEFINE(EMIF_PM_EXIT_SR_OFFSET,
1275692fceeSDave Gerlach 	       offsetof(struct ti_emif_pm_functions, exit_sr));
1285692fceeSDave Gerlach 	DEFINE(EMIF_PM_ABORT_SR_OFFSET,
1295692fceeSDave Gerlach 	       offsetof(struct ti_emif_pm_functions, abort_sr));
1305692fceeSDave Gerlach 	DEFINE(EMIF_PM_FUNCTIONS_SIZE, sizeof(struct ti_emif_pm_functions));
1315692fceeSDave Gerlach }
1325692fceeSDave Gerlach 
1338428e5adSDave Gerlach struct gen_pool;
1348428e5adSDave Gerlach 
1358428e5adSDave Gerlach int ti_emif_copy_pm_function_table(struct gen_pool *sram_pool, void *dst);
1368428e5adSDave Gerlach int ti_emif_get_mem_type(void);
1378428e5adSDave Gerlach 
1388428e5adSDave Gerlach #endif
1398428e5adSDave Gerlach #endif /* __LINUX_TI_EMIF_H */
140