ARM: tegra: loki: fix build error due to warning
[linux-3.10.git] / arch / arm / mach-tegra / ahb.c
1 /*
2  * arch/arm/mach-tegra/ahb.c
3  *
4  * Copyright (C) 2011 Google, Inc.
5  *
6  * Copyright (c) 2012-2013, NVIDIA CORPORATION.  All rights reserved.
7  *
8  * Author:
9  *      Jay Cheng <jacheng@nvidia.com>
10  *      James Wylder <james.wylder@motorola.com>
11  *      Benoit Goby <benoit@android.com>
12  *      Colin Cross <ccross@android.com>
13  *
14  * This software is licensed under the terms of the GNU General Public
15  * License version 2, as published by the Free Software Foundation, and
16  * may be copied, distributed, and modified under those terms.
17  *
18  * This program is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21  * GNU General Public License for more details.
22  *
23  */
24
25 #include <linux/kernel.h>
26 #include <linux/init.h>
27 #include <linux/io.h>
28 #include <linux/syscore_ops.h>
29
30 #include "common.h"
31 #include "iomap.h"
32
33 #define AHB_ARBITRATION_DISABLE         0x00
34 #define AHB_ARBITRATION_PRIORITY_CTRL   0x04
35 #define   AHB_PRIORITY_WEIGHT(x)        (((x) & 0x7) << 29)
36 #define   PRIORITY_SELECT_USB BIT(6)
37 #define   PRIORITY_SELECT_USB2 BIT(18)
38 #define   PRIORITY_SELECT_USB3 BIT(17)
39
40 #define AHB_GIZMO_AHB_MEM               0x0c
41 #define   ENB_FAST_REARBITRATE BIT(2)
42 #define   DONT_SPLIT_AHB_WR     BIT(7)
43 #define   WR_WAIT_COMMIT_ON_1K  BIT(8)
44 #define   EN_USB_WAIT_COMMIT_ON_1K_STALL        BIT(9)
45
46 #define AHB_GIZMO_APB_DMA               0x10
47 #define AHB_GIZMO_IDE                   0x18
48 #define AHB_GIZMO_USB                   0x1c
49 #define AHB_GIZMO_AHB_XBAR_BRIDGE       0x20
50 #define AHB_GIZMO_CPU_AHB_BRIDGE        0x24
51 #define AHB_GIZMO_COP_AHB_BRIDGE        0x28
52 #define AHB_GIZMO_XBAR_APB_CTLR         0x2c
53 #define AHB_GIZMO_VCP_AHB_BRIDGE        0x30
54 #define AHB_GIZMO_NAND                  0x3c
55 #define AHB_GIZMO_SDMMC4                0x44
56 #define AHB_GIZMO_XIO                   0x48
57 #if !defined(CONFIG_ARCH_TEGRA_3x_SOC)
58 #define AHB_GIZMO_SE                    0x4c
59 #define AHB_GIZMO_TZRAM                 0x50
60 #endif
61 #define AHB_GIZMO_BSEV                  0x60
62 #define AHB_GIZMO_BSEA                  0x70
63 #define AHB_GIZMO_NOR                   0x74
64 #define AHB_GIZMO_USB2                  0x78
65 #define AHB_GIZMO_USB3                  0x7c
66 #define   IMMEDIATE     BIT(18)
67
68 #define AHB_GIZMO_SDMMC1                0x80
69 #define AHB_GIZMO_SDMMC2                0x84
70 #define AHB_GIZMO_SDMMC3                0x88
71 #define AHB_MEM_PREFETCH_CFG_X          0xd8
72 #define AHB_ARBITRATION_XBAR_CTRL       0xdc
73 #if !defined(CONFIG_ARCH_TEGRA_3x_SOC)
74 #define AHB_MEM_PREFETCH_CFG5           0xc8
75 #define AHB_MEM_PREFETCH_CFG6           0xcc
76 #endif
77 #define AHB_MEM_PREFETCH_CFG3           0xe0
78 #define AHB_MEM_PREFETCH_CFG4           0xe4
79 #define AHB_MEM_PREFETCH_CFG1           0xec
80 #define AHB_MEM_PREFETCH_CFG2           0xf0
81 #define   PREFETCH_ENB  BIT(31)
82 #define   MST_ID(x)     (((x) & 0x1f) << 26)
83 #define   AHBDMA_MST_ID MST_ID(5)
84 #define   USB_MST_ID    MST_ID(6)
85 #define   USB2_MST_ID   MST_ID(18)
86 #define   USB3_MST_ID   MST_ID(17)
87 #define   ADDR_BNDRY(x) (((x) & 0xf) << 21)
88 #define   INACTIVITY_TIMEOUT(x) (((x) & 0xffff) << 0)
89
90 #define AHB_ARBITRATION_AHB_MEM_WRQUE_MST_ID    0xf8
91
92
93 static inline unsigned long gizmo_readl(unsigned long offset)
94 {
95         return readl(IO_TO_VIRT(TEGRA_AHB_GIZMO_BASE + offset));
96 }
97
98 static inline void gizmo_writel(unsigned long value, unsigned long offset)
99 {
100         writel(value, IO_TO_VIRT(TEGRA_AHB_GIZMO_BASE + offset));
101 }
102
103 #ifdef CONFIG_PM
104
105 #if !defined(CONFIG_ARCH_TEGRA_3x_SOC)
106 static u32 ahb_gizmo[33];
107 #else
108 static u32 ahb_gizmo[29];
109 #endif
110
111 int tegra_ahbgizmo_suspend(void)
112 {
113         ahb_gizmo[0] = gizmo_readl(AHB_ARBITRATION_DISABLE);
114         ahb_gizmo[1] = gizmo_readl(AHB_ARBITRATION_PRIORITY_CTRL);
115         ahb_gizmo[2] = gizmo_readl(AHB_GIZMO_AHB_MEM);
116         ahb_gizmo[3] = gizmo_readl(AHB_GIZMO_APB_DMA);
117         ahb_gizmo[4] = gizmo_readl(AHB_GIZMO_IDE);
118         ahb_gizmo[5] = gizmo_readl(AHB_GIZMO_USB);
119         ahb_gizmo[6] = gizmo_readl(AHB_GIZMO_AHB_XBAR_BRIDGE);
120         ahb_gizmo[7] = gizmo_readl(AHB_GIZMO_CPU_AHB_BRIDGE);
121         ahb_gizmo[8] = gizmo_readl(AHB_GIZMO_COP_AHB_BRIDGE);
122         ahb_gizmo[9] = gizmo_readl(AHB_GIZMO_XBAR_APB_CTLR);
123         ahb_gizmo[10] = gizmo_readl(AHB_GIZMO_VCP_AHB_BRIDGE);
124         ahb_gizmo[11] = gizmo_readl(AHB_GIZMO_NAND);
125         ahb_gizmo[12] = gizmo_readl(AHB_GIZMO_SDMMC4);
126         ahb_gizmo[13] = gizmo_readl(AHB_GIZMO_XIO);
127         ahb_gizmo[14] = gizmo_readl(AHB_GIZMO_BSEV);
128         ahb_gizmo[15] = gizmo_readl(AHB_GIZMO_BSEA);
129         ahb_gizmo[16] = gizmo_readl(AHB_GIZMO_NOR);
130         ahb_gizmo[17] = gizmo_readl(AHB_GIZMO_USB2);
131         ahb_gizmo[18] = gizmo_readl(AHB_GIZMO_USB3);
132         ahb_gizmo[19] = gizmo_readl(AHB_GIZMO_SDMMC1);
133         ahb_gizmo[20] = gizmo_readl(AHB_GIZMO_SDMMC2);
134         ahb_gizmo[21] = gizmo_readl(AHB_GIZMO_SDMMC3);
135         ahb_gizmo[22] = gizmo_readl(AHB_MEM_PREFETCH_CFG_X);
136         ahb_gizmo[23] = gizmo_readl(AHB_ARBITRATION_XBAR_CTRL);
137         ahb_gizmo[24] = gizmo_readl(AHB_MEM_PREFETCH_CFG3);
138         ahb_gizmo[25] = gizmo_readl(AHB_MEM_PREFETCH_CFG4);
139         ahb_gizmo[26] = gizmo_readl(AHB_MEM_PREFETCH_CFG1);
140         ahb_gizmo[27] = gizmo_readl(AHB_MEM_PREFETCH_CFG2);
141         ahb_gizmo[28] = gizmo_readl(AHB_ARBITRATION_AHB_MEM_WRQUE_MST_ID);
142 #if !defined(CONFIG_ARCH_TEGRA_3x_SOC)
143         ahb_gizmo[29] = gizmo_readl(AHB_MEM_PREFETCH_CFG5);
144         ahb_gizmo[30] = gizmo_readl(AHB_MEM_PREFETCH_CFG6);
145         ahb_gizmo[31] = gizmo_readl(AHB_GIZMO_SE);
146         ahb_gizmo[32] = gizmo_readl(AHB_GIZMO_TZRAM);
147 #endif
148         return 0;
149 }
150
151 void tegra_ahbgizmo_resume(void)
152 {
153         gizmo_writel(ahb_gizmo[0],  AHB_ARBITRATION_DISABLE);
154         gizmo_writel(ahb_gizmo[1],  AHB_ARBITRATION_PRIORITY_CTRL);
155         gizmo_writel(ahb_gizmo[2],  AHB_GIZMO_AHB_MEM);
156         gizmo_writel(ahb_gizmo[3],  AHB_GIZMO_APB_DMA);
157         gizmo_writel(ahb_gizmo[4],  AHB_GIZMO_IDE);
158         gizmo_writel(ahb_gizmo[5],  AHB_GIZMO_USB);
159         gizmo_writel(ahb_gizmo[6],  AHB_GIZMO_AHB_XBAR_BRIDGE);
160         gizmo_writel(ahb_gizmo[7],  AHB_GIZMO_CPU_AHB_BRIDGE);
161         gizmo_writel(ahb_gizmo[8],  AHB_GIZMO_COP_AHB_BRIDGE);
162         gizmo_writel(ahb_gizmo[9],  AHB_GIZMO_XBAR_APB_CTLR);
163         gizmo_writel(ahb_gizmo[10], AHB_GIZMO_VCP_AHB_BRIDGE);
164         gizmo_writel(ahb_gizmo[11], AHB_GIZMO_NAND);
165         gizmo_writel(ahb_gizmo[12], AHB_GIZMO_SDMMC4);
166         gizmo_writel(ahb_gizmo[13], AHB_GIZMO_XIO);
167         gizmo_writel(ahb_gizmo[14], AHB_GIZMO_BSEV);
168         gizmo_writel(ahb_gizmo[15], AHB_GIZMO_BSEA);
169         gizmo_writel(ahb_gizmo[16], AHB_GIZMO_NOR);
170         gizmo_writel(ahb_gizmo[17], AHB_GIZMO_USB2);
171         gizmo_writel(ahb_gizmo[18], AHB_GIZMO_USB3);
172         gizmo_writel(ahb_gizmo[19], AHB_GIZMO_SDMMC1);
173         gizmo_writel(ahb_gizmo[20], AHB_GIZMO_SDMMC2);
174         gizmo_writel(ahb_gizmo[21], AHB_GIZMO_SDMMC3);
175         ahb_gizmo_writel(ahb_gizmo[22],
176                 IO_ADDRESS(TEGRA_AHB_GIZMO_BASE + AHB_MEM_PREFETCH_CFG_X));
177         gizmo_writel(ahb_gizmo[23], AHB_ARBITRATION_XBAR_CTRL);
178         ahb_gizmo_writel(ahb_gizmo[24],
179                 IO_ADDRESS(TEGRA_AHB_GIZMO_BASE + AHB_MEM_PREFETCH_CFG3));
180         ahb_gizmo_writel(ahb_gizmo[25],
181                 IO_ADDRESS(TEGRA_AHB_GIZMO_BASE + AHB_MEM_PREFETCH_CFG4));
182         ahb_gizmo_writel(ahb_gizmo[26],
183                 IO_ADDRESS(TEGRA_AHB_GIZMO_BASE + AHB_MEM_PREFETCH_CFG1));
184         ahb_gizmo_writel(ahb_gizmo[27],
185                 IO_ADDRESS(TEGRA_AHB_GIZMO_BASE + AHB_MEM_PREFETCH_CFG2));
186         gizmo_writel(ahb_gizmo[28], AHB_ARBITRATION_AHB_MEM_WRQUE_MST_ID);
187 #if !defined(CONFIG_ARCH_TEGRA_3x_SOC)
188         gizmo_writel(ahb_gizmo[29], AHB_MEM_PREFETCH_CFG5);
189         gizmo_writel(ahb_gizmo[30], AHB_MEM_PREFETCH_CFG6);
190         gizmo_writel(ahb_gizmo[31], AHB_GIZMO_SE);
191         gizmo_writel(ahb_gizmo[32], AHB_GIZMO_TZRAM);
192 #endif
193 }
194 #else
195 #define tegra_ahbgizmo_suspend NULL
196 #define tegra_ahbgizmo_resume NULL
197 #endif
198
199 static struct syscore_ops tegra_ahbgizmo_syscore_ops = {
200         .suspend = tegra_ahbgizmo_suspend,
201         .resume = tegra_ahbgizmo_resume,
202 };
203
204 static int __init tegra_init_ahb_gizmo(void)
205 {
206         register_syscore_ops(&tegra_ahbgizmo_syscore_ops);
207
208         return 0;
209 }
210 postcore_initcall(tegra_init_ahb_gizmo);