ARM: tegra: powermon: Fix copyrights from GPLv3 to GPLv2
[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 <mach/hardware.h>
31 #include "common.h"
32 #include "iomap.h"
33
34 #define AHB_ARBITRATION_DISABLE         0x00
35 #define AHB_ARBITRATION_PRIORITY_CTRL   0x04
36 #define   AHB_PRIORITY_WEIGHT(x)        (((x) & 0x7) << 29)
37 #define   PRIORITY_SELECT_USB BIT(6)
38 #define   PRIORITY_SELECT_USB2 BIT(18)
39 #define   PRIORITY_SELECT_USB3 BIT(17)
40
41 #define AHB_GIZMO_AHB_MEM               0x0c
42 #define   ENB_FAST_REARBITRATE BIT(2)
43 #define   DONT_SPLIT_AHB_WR     BIT(7)
44 #define   WR_WAIT_COMMIT_ON_1K  BIT(8)
45 #define   EN_USB_WAIT_COMMIT_ON_1K_STALL        BIT(9)
46
47 #define AHB_GIZMO_APB_DMA               0x10
48 #define AHB_GIZMO_IDE                   0x18
49 #define AHB_GIZMO_USB                   0x1c
50 #define AHB_GIZMO_AHB_XBAR_BRIDGE       0x20
51 #define AHB_GIZMO_CPU_AHB_BRIDGE        0x24
52 #define AHB_GIZMO_COP_AHB_BRIDGE        0x28
53 #define AHB_GIZMO_XBAR_APB_CTLR         0x2c
54 #define AHB_GIZMO_VCP_AHB_BRIDGE        0x30
55 #define AHB_GIZMO_NAND                  0x3c
56 #define AHB_GIZMO_SDMMC4                0x44
57 #define AHB_GIZMO_XIO                   0x48
58 #if !defined(CONFIG_ARCH_TEGRA_3x_SOC)
59 #define AHB_GIZMO_SE                    0x4c
60 #define AHB_GIZMO_TZRAM                 0x50
61 #endif
62 #define AHB_GIZMO_BSEV                  0x60
63 #define AHB_GIZMO_BSEA                  0x70
64 #define AHB_GIZMO_NOR                   0x74
65 #define AHB_GIZMO_USB2                  0x78
66 #define AHB_GIZMO_USB3                  0x7c
67 #define   IMMEDIATE     BIT(18)
68
69 #define AHB_GIZMO_SDMMC1                0x80
70 #define AHB_GIZMO_SDMMC2                0x84
71 #define AHB_GIZMO_SDMMC3                0x88
72 #define AHB_MEM_PREFETCH_CFG_X          0xd8
73 #define AHB_ARBITRATION_XBAR_CTRL       0xdc
74 #if !defined(CONFIG_ARCH_TEGRA_3x_SOC)
75 #define AHB_MEM_PREFETCH_CFG5           0xc8
76 #define AHB_MEM_PREFETCH_CFG6           0xcc
77 #endif
78 #define AHB_MEM_PREFETCH_CFG3           0xe0
79 #define AHB_MEM_PREFETCH_CFG4           0xe4
80 #define AHB_MEM_PREFETCH_CFG1           0xec
81 #define AHB_MEM_PREFETCH_CFG2           0xf0
82 #define   PREFETCH_ENB  BIT(31)
83 #define   MST_ID(x)     (((x) & 0x1f) << 26)
84 #define   AHBDMA_MST_ID MST_ID(5)
85 #define   USB_MST_ID    MST_ID(6)
86 #define   USB2_MST_ID   MST_ID(18)
87 #define   USB3_MST_ID   MST_ID(17)
88 #define   ADDR_BNDRY(x) (((x) & 0xf) << 21)
89 #define   INACTIVITY_TIMEOUT(x) (((x) & 0xffff) << 0)
90
91 #define AHB_ARBITRATION_AHB_MEM_WRQUE_MST_ID    0xf8
92
93
94 static inline unsigned long gizmo_readl(unsigned long offset)
95 {
96         return readl(IO_TO_VIRT(TEGRA_AHB_GIZMO_BASE + offset));
97 }
98
99 static inline void gizmo_writel(unsigned long value, unsigned long offset)
100 {
101         writel(value, IO_TO_VIRT(TEGRA_AHB_GIZMO_BASE + offset));
102 }
103
104 #ifdef CONFIG_PM
105
106 #if !defined(CONFIG_ARCH_TEGRA_3x_SOC)
107 static u32 ahb_gizmo[33];
108 #else
109 static u32 ahb_gizmo[29];
110 #endif
111
112 int tegra_ahbgizmo_suspend(void)
113 {
114         ahb_gizmo[0] = gizmo_readl(AHB_ARBITRATION_DISABLE);
115         ahb_gizmo[1] = gizmo_readl(AHB_ARBITRATION_PRIORITY_CTRL);
116         ahb_gizmo[2] = gizmo_readl(AHB_GIZMO_AHB_MEM);
117         ahb_gizmo[3] = gizmo_readl(AHB_GIZMO_APB_DMA);
118         ahb_gizmo[4] = gizmo_readl(AHB_GIZMO_IDE);
119         ahb_gizmo[5] = gizmo_readl(AHB_GIZMO_USB);
120         ahb_gizmo[6] = gizmo_readl(AHB_GIZMO_AHB_XBAR_BRIDGE);
121         ahb_gizmo[7] = gizmo_readl(AHB_GIZMO_CPU_AHB_BRIDGE);
122         ahb_gizmo[8] = gizmo_readl(AHB_GIZMO_COP_AHB_BRIDGE);
123         ahb_gizmo[9] = gizmo_readl(AHB_GIZMO_XBAR_APB_CTLR);
124         ahb_gizmo[10] = gizmo_readl(AHB_GIZMO_VCP_AHB_BRIDGE);
125         ahb_gizmo[11] = gizmo_readl(AHB_GIZMO_NAND);
126         ahb_gizmo[12] = gizmo_readl(AHB_GIZMO_SDMMC4);
127         ahb_gizmo[13] = gizmo_readl(AHB_GIZMO_XIO);
128         ahb_gizmo[14] = gizmo_readl(AHB_GIZMO_BSEV);
129         ahb_gizmo[15] = gizmo_readl(AHB_GIZMO_BSEA);
130         ahb_gizmo[16] = gizmo_readl(AHB_GIZMO_NOR);
131         ahb_gizmo[17] = gizmo_readl(AHB_GIZMO_USB2);
132         ahb_gizmo[18] = gizmo_readl(AHB_GIZMO_USB3);
133         ahb_gizmo[19] = gizmo_readl(AHB_GIZMO_SDMMC1);
134         ahb_gizmo[20] = gizmo_readl(AHB_GIZMO_SDMMC2);
135         ahb_gizmo[21] = gizmo_readl(AHB_GIZMO_SDMMC3);
136         ahb_gizmo[22] = gizmo_readl(AHB_MEM_PREFETCH_CFG_X);
137         ahb_gizmo[23] = gizmo_readl(AHB_ARBITRATION_XBAR_CTRL);
138         ahb_gizmo[24] = gizmo_readl(AHB_MEM_PREFETCH_CFG3);
139         ahb_gizmo[25] = gizmo_readl(AHB_MEM_PREFETCH_CFG4);
140         ahb_gizmo[26] = gizmo_readl(AHB_MEM_PREFETCH_CFG1);
141         ahb_gizmo[27] = gizmo_readl(AHB_MEM_PREFETCH_CFG2);
142         ahb_gizmo[28] = gizmo_readl(AHB_ARBITRATION_AHB_MEM_WRQUE_MST_ID);
143 #if !defined(CONFIG_ARCH_TEGRA_3x_SOC)
144         ahb_gizmo[29] = gizmo_readl(AHB_MEM_PREFETCH_CFG5);
145         ahb_gizmo[30] = gizmo_readl(AHB_MEM_PREFETCH_CFG6);
146         ahb_gizmo[31] = gizmo_readl(AHB_GIZMO_SE);
147         ahb_gizmo[32] = gizmo_readl(AHB_GIZMO_TZRAM);
148 #endif
149         return 0;
150 }
151
152 void tegra_ahbgizmo_resume(void)
153 {
154         gizmo_writel(ahb_gizmo[0],  AHB_ARBITRATION_DISABLE);
155         gizmo_writel(ahb_gizmo[1],  AHB_ARBITRATION_PRIORITY_CTRL);
156         gizmo_writel(ahb_gizmo[2],  AHB_GIZMO_AHB_MEM);
157         gizmo_writel(ahb_gizmo[3],  AHB_GIZMO_APB_DMA);
158         gizmo_writel(ahb_gizmo[4],  AHB_GIZMO_IDE);
159         gizmo_writel(ahb_gizmo[5],  AHB_GIZMO_USB);
160         gizmo_writel(ahb_gizmo[6],  AHB_GIZMO_AHB_XBAR_BRIDGE);
161         gizmo_writel(ahb_gizmo[7],  AHB_GIZMO_CPU_AHB_BRIDGE);
162         gizmo_writel(ahb_gizmo[8],  AHB_GIZMO_COP_AHB_BRIDGE);
163         gizmo_writel(ahb_gizmo[9],  AHB_GIZMO_XBAR_APB_CTLR);
164         gizmo_writel(ahb_gizmo[10], AHB_GIZMO_VCP_AHB_BRIDGE);
165         gizmo_writel(ahb_gizmo[11], AHB_GIZMO_NAND);
166         gizmo_writel(ahb_gizmo[12], AHB_GIZMO_SDMMC4);
167         gizmo_writel(ahb_gizmo[13], AHB_GIZMO_XIO);
168         gizmo_writel(ahb_gizmo[14], AHB_GIZMO_BSEV);
169         gizmo_writel(ahb_gizmo[15], AHB_GIZMO_BSEA);
170         gizmo_writel(ahb_gizmo[16], AHB_GIZMO_NOR);
171         gizmo_writel(ahb_gizmo[17], AHB_GIZMO_USB2);
172         gizmo_writel(ahb_gizmo[18], AHB_GIZMO_USB3);
173         gizmo_writel(ahb_gizmo[19], AHB_GIZMO_SDMMC1);
174         gizmo_writel(ahb_gizmo[20], AHB_GIZMO_SDMMC2);
175         gizmo_writel(ahb_gizmo[21], AHB_GIZMO_SDMMC3);
176         ahb_gizmo_writel(ahb_gizmo[22],
177                 IO_ADDRESS(TEGRA_AHB_GIZMO_BASE + AHB_MEM_PREFETCH_CFG_X));
178         gizmo_writel(ahb_gizmo[23], AHB_ARBITRATION_XBAR_CTRL);
179         ahb_gizmo_writel(ahb_gizmo[24],
180                 IO_ADDRESS(TEGRA_AHB_GIZMO_BASE + AHB_MEM_PREFETCH_CFG3));
181         ahb_gizmo_writel(ahb_gizmo[25],
182                 IO_ADDRESS(TEGRA_AHB_GIZMO_BASE + AHB_MEM_PREFETCH_CFG4));
183         ahb_gizmo_writel(ahb_gizmo[26],
184                 IO_ADDRESS(TEGRA_AHB_GIZMO_BASE + AHB_MEM_PREFETCH_CFG1));
185         ahb_gizmo_writel(ahb_gizmo[27],
186                 IO_ADDRESS(TEGRA_AHB_GIZMO_BASE + AHB_MEM_PREFETCH_CFG2));
187         gizmo_writel(ahb_gizmo[28], AHB_ARBITRATION_AHB_MEM_WRQUE_MST_ID);
188 #if !defined(CONFIG_ARCH_TEGRA_3x_SOC)
189         gizmo_writel(ahb_gizmo[29], AHB_MEM_PREFETCH_CFG5);
190         gizmo_writel(ahb_gizmo[30], AHB_MEM_PREFETCH_CFG6);
191         gizmo_writel(ahb_gizmo[31], AHB_GIZMO_SE);
192         gizmo_writel(ahb_gizmo[32], AHB_GIZMO_TZRAM);
193 #endif
194 }
195 #else
196 #define tegra_ahbgizmo_suspend NULL
197 #define tegra_ahbgizmo_resume NULL
198 #endif
199
200 static struct syscore_ops tegra_ahbgizmo_syscore_ops = {
201         .suspend = tegra_ahbgizmo_suspend,
202         .resume = tegra_ahbgizmo_resume,
203 };
204
205 static int __init tegra_init_ahb_gizmo(void)
206 {
207         register_syscore_ops(&tegra_ahbgizmo_syscore_ops);
208
209         return 0;
210 }
211 postcore_initcall(tegra_init_ahb_gizmo);