Blame view

kernel/linux-rt-4.4.41/include/linux/platform_data/emif_plat.h 4.06 KB
5113f6f70   김현기   kernel add
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
  /*
   * Definitions for TI EMIF device platform data
   *
   * Copyright (C) 2012 Texas Instruments, Inc.
   *
   * Aneesh V <aneesh@ti.com>
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License version 2 as
   * published by the Free Software Foundation.
   */
  #ifndef __EMIF_PLAT_H
  #define __EMIF_PLAT_H
  
  /* Low power modes - EMIF_PWR_MGMT_CTRL */
  #define EMIF_LP_MODE_DISABLE				0
  #define EMIF_LP_MODE_CLOCK_STOP				1
  #define EMIF_LP_MODE_SELF_REFRESH			2
  #define EMIF_LP_MODE_PWR_DN				4
  
  /* Hardware capabilities */
  #define	EMIF_HW_CAPS_LL_INTERFACE			0x00000001
  
  /*
   * EMIF IP Revisions
   *	EMIF4D  - Used in OMAP4
   *	EMIF4D5 - Used in OMAP5
   */
  #define	EMIF_4D						1
  #define	EMIF_4D5					2
  
  /*
   * PHY types
   *	ATTILAPHY  - Used in OMAP4
   *	INTELLIPHY - Used in OMAP5
   */
  #define	EMIF_PHY_TYPE_ATTILAPHY				1
  #define	EMIF_PHY_TYPE_INTELLIPHY			2
  
  /* Custom config requests */
  #define EMIF_CUSTOM_CONFIG_LPMODE			0x00000001
  #define EMIF_CUSTOM_CONFIG_TEMP_ALERT_POLL_INTERVAL	0x00000002
  #define EMIF_CUSTOM_CONFIG_EXTENDED_TEMP_PART		0x00000004
  
  #ifndef __ASSEMBLY__
  /**
   * struct ddr_device_info - All information about the DDR device except AC
   *		timing parameters
   * @type:	Device type (LPDDR2-S4, LPDDR2-S2 etc)
   * @density:	Device density
   * @io_width:	Bus width
   * @cs1_used:	Whether there is a DDR device attached to the second
   *		chip-select(CS1) of this EMIF instance
   * @cal_resistors_per_cs: Whether there is one calibration resistor per
   *		chip-select or whether it's a single one for both
   * @manufacturer: Manufacturer name string
   */
  struct ddr_device_info {
  	u32	type;
  	u32	density;
  	u32	io_width;
  	u32	cs1_used;
  	u32	cal_resistors_per_cs;
  	char	manufacturer[10];
  };
  
  /**
   * struct emif_custom_configs - Custom configuration parameters/policies
   *		passed from the platform layer
   * @mask:	Mask to indicate which configs are requested
   * @lpmode:	LPMODE to be used in PWR_MGMT_CTRL register
   * @lpmode_timeout_performance: Timeout before LPMODE entry when higher
   *		performance is desired at the cost of power (typically
   *		at higher OPPs)
   * @lpmode_timeout_power: Timeout before LPMODE entry when better power
   *		savings is desired and performance is not important
   *		(typically at lower loads indicated by lower OPPs)
   * @lpmode_freq_threshold: The DDR frequency threshold to identify between
   *		the above two cases:
   *		timeout = (freq >= lpmode_freq_threshold) ?
   *			lpmode_timeout_performance :
   *			lpmode_timeout_power;
   * @temp_alert_poll_interval_ms: LPDDR2 MR4 polling interval at nominal
   *		temperature(in milliseconds). When temperature is high
   *		polling is done 4 times as frequently.
   */
  struct emif_custom_configs {
  	u32 mask;
  	u32 lpmode;
  	u32 lpmode_timeout_performance;
  	u32 lpmode_timeout_power;
  	u32 lpmode_freq_threshold;
  	u32 temp_alert_poll_interval_ms;
  };
  
  /**
   * struct emif_platform_data - Platform data passed on EMIF platform
   *				device creation. Used by the driver.
   * @hw_caps:		Hw capabilities of the EMIF IP in the respective SoC
   * @device_info:	Device info structure containing information such
   *			as type, bus width, density etc
   * @timings:		Timings information from device datasheet passed
   *			as an array of 'struct lpddr2_timings'. Can be NULL
   *			if if default timings are ok
   * @timings_arr_size:	Size of the timings array. Depends on the number
   *			of different frequencies for which timings data
   *			is provided
   * @min_tck:		Minimum value of some timing parameters in terms
   *			of number of cycles. Can be NULL if default values
   *			are ok
   * @custom_configs:	Custom configurations requested by SoC or board
   *			code and the data for them. Can be NULL if default
   *			configurations done by the driver are ok. See
   *			documentation for 'struct emif_custom_configs' for
   *			more details
   */
  struct emif_platform_data {
  	u32 hw_caps;
  	struct ddr_device_info *device_info;
  	const struct lpddr2_timings *timings;
  	u32 timings_arr_size;
  	const struct lpddr2_min_tck *min_tck;
  	struct emif_custom_configs *custom_configs;
  	u32 ip_rev;
  	u32 phy_type;
  };
  #endif /* __ASSEMBLY__ */
  
  #endif /* __LINUX_EMIF_H */