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