1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * Copyright (C) 2015
4  * Toradex, Inc.
5  *
6  * Authors: Stefan Agner
7  *          Sanchayan Maity
8  */
9 
10 #ifndef __ASM_ARCH_VF610_DDRMC_H
11 #define __ASM_ARCH_VF610_DDRMC_H
12 
13 #include <asm/arch/iomux-vf610.h>
14 
15 struct ddr3_jedec_timings {
16 	u8 tinit;
17 	u32 trst_pwron;
18 	u32 cke_inactive;
19 	u8 wrlat;
20 	u8 caslat_lin;
21 	u8 trc;
22 	u8 trrd;
23 	u8 tccd;
24 	u8 tbst_int_interval;
25 	u8 tfaw;
26 	u8 trp;
27 	u8 twtr;
28 	u8 tras_min;
29 	u8 tmrd;
30 	u8 trtp;
31 	u32 tras_max;
32 	u8 tmod;
33 	u8 tckesr;
34 	u8 tcke;
35 	u8 trcd_int;
36 	u8 tras_lockout;
37 	u8 tdal;
38 	u8 bstlen;
39 	u16 tdll;
40 	u8 trp_ab;
41 	u16 tref;
42 	u8 trfc;
43 	u16 tref_int;
44 	u8 tpdex;
45 	u8 txpdll;
46 	u8 txsnr;
47 	u16 txsr;
48 	u8 cksrx;
49 	u8 cksre;
50 	u8 freq_chg_en;
51 	u16 zqcl;
52 	u16 zqinit;
53 	u8 zqcs;
54 	u8 ref_per_zq;
55 	u8 zqcs_rotate;
56 	u8 aprebit;
57 	u8 cmd_age_cnt;
58 	u8 age_cnt;
59 	u8 q_fullness;
60 	u8 odt_rd_mapcs0;
61 	u8 odt_wr_mapcs0;
62 	u8 wlmrd;
63 	u8 wldqsen;
64 };
65 
66 struct ddrmc_cr_setting {
67 	u32	setting;
68 	int	cr_rnum; /* CR register ; -1 for last entry */
69 };
70 
71 struct ddrmc_phy_setting {
72 	u32	setting;
73 	int	phy_rnum; /* PHY register ; -1 for last entry */
74 };
75 
76 void ddrmc_setup_iomux(const iomux_v3_cfg_t *pads, int pads_count);
77 void ddrmc_phy_init(void);
78 void ddrmc_ctrl_init_ddr3(struct ddr3_jedec_timings const *timings,
79 			  struct ddrmc_cr_setting *board_cr_settings,
80 			  struct ddrmc_phy_setting *board_phy_settings,
81 			  int col_diff, int row_diff);
82 
83 #endif
84