aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/memory/jedec_ddr_data.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2019-07-19 20:13:56 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2019-07-19 20:13:56 -0400
commit8362fd64f07eaef7155c94fca8dee91c4f99a666 (patch)
tree2d16af7d7b8cbb5765727493f796d453580fc107 /drivers/memory/jedec_ddr_data.c
parent24e44913aa746098349370a0f279733c0cadcba7 (diff)
parent8c0993621c3e5fa52e5425ef2a0f67a0cde07092 (diff)
Merge tag 'armsoc-drivers' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc
Pull ARM SoC-related driver updates from Olof Johansson: "Various driver updates for platforms and a couple of the small driver subsystems we merge through our tree: - A driver for SCU (system control) on NXP i.MX8QXP - Qualcomm Always-on Subsystem messaging driver (AOSS QMP) - Qualcomm PM support for MSM8998 - Support for a newer version of DRAM PHY driver for Broadcom (DPFE) - Reset controller support for Bitmain BM1880 - TI SCI (System Control Interface) support for CPU control on AM654 processors - More TI sysc refactoring and rework" * tag 'armsoc-drivers' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: (84 commits) reset: remove redundant null check on pointer dev soc: rockchip: work around clang warning dt-bindings: reset: imx7: Fix the spelling of 'indices' soc: imx: Add i.MX8MN SoC driver support soc: aspeed: lpc-ctrl: Fix probe error handling soc: qcom: geni: Add support for ACPI firmware: ti_sci: Fix gcc unused-but-set-variable warning firmware: ti_sci: Use the correct style for SPDX License Identifier soc: imx8: Use existing of_root directly soc: imx8: Fix potential kernel dump in error path firmware/psci: psci_checker: Park kthreads before stopping them memory: move jedec_ddr.h from include/memory to drivers/memory/ memory: move jedec_ddr_data.c from lib/ to drivers/memory/ MAINTAINERS: Remove myself as qcom maintainer soc: aspeed: lpc-ctrl: make parameter optional soc: qcom: apr: Don't use reg for domain id soc: qcom: fix QCOM_AOSS_QMP dependency and build errors memory: tegra: Fix -Wunused-const-variable firmware: tegra: Early resume BPMP soc/tegra: Select pinctrl for Tegra194 ...
Diffstat (limited to 'drivers/memory/jedec_ddr_data.c')
-rw-r--r--drivers/memory/jedec_ddr_data.c133
1 files changed, 133 insertions, 0 deletions
diff --git a/drivers/memory/jedec_ddr_data.c b/drivers/memory/jedec_ddr_data.c
new file mode 100644
index 000000000000..ed601d813175
--- /dev/null
+++ b/drivers/memory/jedec_ddr_data.c
@@ -0,0 +1,133 @@
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * DDR addressing details and AC timing parameters from JEDEC specs
4 *
5 * Copyright (C) 2012 Texas Instruments, Inc.
6 *
7 * Aneesh V <aneesh@ti.com>
8 */
9
10#include <linux/export.h>
11
12#include "jedec_ddr.h"
13
14/* LPDDR2 addressing details from JESD209-2 section 2.4 */
15const struct lpddr2_addressing
16 lpddr2_jedec_addressing_table[NUM_DDR_ADDR_TABLE_ENTRIES] = {
17 {B4, T_REFI_15_6, T_RFC_90}, /* 64M */
18 {B4, T_REFI_15_6, T_RFC_90}, /* 128M */
19 {B4, T_REFI_7_8, T_RFC_90}, /* 256M */
20 {B4, T_REFI_7_8, T_RFC_90}, /* 512M */
21 {B8, T_REFI_7_8, T_RFC_130}, /* 1GS4 */
22 {B8, T_REFI_3_9, T_RFC_130}, /* 2GS4 */
23 {B8, T_REFI_3_9, T_RFC_130}, /* 4G */
24 {B8, T_REFI_3_9, T_RFC_210}, /* 8G */
25 {B4, T_REFI_7_8, T_RFC_130}, /* 1GS2 */
26 {B4, T_REFI_3_9, T_RFC_130}, /* 2GS2 */
27};
28EXPORT_SYMBOL_GPL(lpddr2_jedec_addressing_table);
29
30/* LPDDR2 AC timing parameters from JESD209-2 section 12 */
31const struct lpddr2_timings
32 lpddr2_jedec_timings[NUM_DDR_TIMING_TABLE_ENTRIES] = {
33 /* Speed bin 400(200 MHz) */
34 [0] = {
35 .max_freq = 200000000,
36 .min_freq = 10000000,
37 .tRPab = 21000,
38 .tRCD = 18000,
39 .tWR = 15000,
40 .tRAS_min = 42000,
41 .tRRD = 10000,
42 .tWTR = 10000,
43 .tXP = 7500,
44 .tRTP = 7500,
45 .tCKESR = 15000,
46 .tDQSCK_max = 5500,
47 .tFAW = 50000,
48 .tZQCS = 90000,
49 .tZQCL = 360000,
50 .tZQinit = 1000000,
51 .tRAS_max_ns = 70000,
52 .tDQSCK_max_derated = 6000,
53 },
54 /* Speed bin 533(266 MHz) */
55 [1] = {
56 .max_freq = 266666666,
57 .min_freq = 10000000,
58 .tRPab = 21000,
59 .tRCD = 18000,
60 .tWR = 15000,
61 .tRAS_min = 42000,
62 .tRRD = 10000,
63 .tWTR = 7500,
64 .tXP = 7500,
65 .tRTP = 7500,
66 .tCKESR = 15000,
67 .tDQSCK_max = 5500,
68 .tFAW = 50000,
69 .tZQCS = 90000,
70 .tZQCL = 360000,
71 .tZQinit = 1000000,
72 .tRAS_max_ns = 70000,
73 .tDQSCK_max_derated = 6000,
74 },
75 /* Speed bin 800(400 MHz) */
76 [2] = {
77 .max_freq = 400000000,
78 .min_freq = 10000000,
79 .tRPab = 21000,
80 .tRCD = 18000,
81 .tWR = 15000,
82 .tRAS_min = 42000,
83 .tRRD = 10000,
84 .tWTR = 7500,
85 .tXP = 7500,
86 .tRTP = 7500,
87 .tCKESR = 15000,
88 .tDQSCK_max = 5500,
89 .tFAW = 50000,
90 .tZQCS = 90000,
91 .tZQCL = 360000,
92 .tZQinit = 1000000,
93 .tRAS_max_ns = 70000,
94 .tDQSCK_max_derated = 6000,
95 },
96 /* Speed bin 1066(533 MHz) */
97 [3] = {
98 .max_freq = 533333333,
99 .min_freq = 10000000,
100 .tRPab = 21000,
101 .tRCD = 18000,
102 .tWR = 15000,
103 .tRAS_min = 42000,
104 .tRRD = 10000,
105 .tWTR = 7500,
106 .tXP = 7500,
107 .tRTP = 7500,
108 .tCKESR = 15000,
109 .tDQSCK_max = 5500,
110 .tFAW = 50000,
111 .tZQCS = 90000,
112 .tZQCL = 360000,
113 .tZQinit = 1000000,
114 .tRAS_max_ns = 70000,
115 .tDQSCK_max_derated = 5620,
116 },
117};
118EXPORT_SYMBOL_GPL(lpddr2_jedec_timings);
119
120const struct lpddr2_min_tck lpddr2_jedec_min_tck = {
121 .tRPab = 3,
122 .tRCD = 3,
123 .tWR = 3,
124 .tRASmin = 3,
125 .tRRD = 2,
126 .tWTR = 2,
127 .tXP = 2,
128 .tRTP = 2,
129 .tCKE = 3,
130 .tCKESR = 3,
131 .tFAW = 8
132};
133EXPORT_SYMBOL_GPL(lpddr2_jedec_min_tck);