65c8bd1a1a7dff1ce11df4188fc627e56f88b254
[h-e-n] / drivers / dsp / bridge / hw / hw_prcm.h
1 /*
2  * hw_prcm.h
3  *
4  * DSP-BIOS Bridge driver support functions for TI OMAP processors.
5  *
6  * Copyright (C) 2007 Texas Instruments, Inc.
7  *
8  * This package is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 as
10  * published by the Free Software Foundation.
11  *
12  * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
13  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
14  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
15  */
16
17 /*
18  *  ======== hw_prcm.h ========
19  *  Description:
20  *      PRCM types and API declarations
21  *
22  *! Revision History:
23  *! ================
24  *! 16 Feb 2003 sb: Initial version
25  */
26
27 #ifndef __HW_PRCM_H
28 #define __HW_PRCM_H
29
30 /* HW_ClkModule:  Enumerated Type used to specify the clock domain */
31
32 enum HW_ClkModule_t {
33 /* DSP Domain */
34     HW_CLK_DSP_CPU,
35     HW_CLK_DSP_IPI_MMU,
36     HW_CLK_IVA_ARM,
37     HW_CLK_IVA_COP,     /* IVA Coprocessor */
38
39 /* Core Domain */
40     HW_CLK_FN_WDT4,     /* Functional Clock */
41     HW_CLK_FN_WDT3,
42     HW_CLK_FN_UART2,
43     HW_CLK_FN_UART1,
44     HW_CLK_GPT5,
45     HW_CLK_GPT6,
46     HW_CLK_GPT7,
47     HW_CLK_GPT8,
48
49     HW_CLK_IF_WDT4,     /* Interface Clock */
50     HW_CLK_IF_WDT3,
51     HW_CLK_IF_UART2,
52     HW_CLK_IF_UART1,
53     HW_CLK_IF_MBOX
54
55 } ;
56
57 enum HW_ClkSubsys_t {
58     HW_CLK_DSPSS,
59     HW_CLK_IVASS
60 } ;
61
62 /* HW_GPtimers:  General purpose timers */
63 enum HW_GPtimer_t {
64     HW_GPT5 = 5,
65     HW_GPT6 = 6,
66     HW_GPT7 = 7,
67     HW_GPT8 = 8
68 } ;
69
70
71 /* GP timers Input clock type:  General purpose timers */
72 enum HW_Clocktype_t {
73     HW_CLK_32KHz = 0,
74     HW_CLK_SYS   = 1,
75     HW_CLK_EXT   = 2
76 } ;
77
78 /* HW_ClkDiv:  Clock divisors */
79 enum HW_ClkDiv_t {
80     HW_CLK_DIV_1 = 0x1,
81     HW_CLK_DIV_2 = 0x2,
82     HW_CLK_DIV_3 = 0x3,
83     HW_CLK_DIV_4 = 0x4,
84     HW_CLK_DIV_6 = 0x6,
85     HW_CLK_DIV_8 = 0x8,
86     HW_CLK_DIV_12 = 0xC
87 } ;
88
89 /* HW_RstModule:  Enumerated Type used to specify the module to be reset */
90 enum HW_RstModule_t {
91     HW_RST1_IVA2,  /* Reset the DSP */
92     HW_RST2_IVA2,  /* Reset MMU and LEON HWa */
93     HW_RST3_IVA2   /* Reset LEON sequencer */
94 } ;
95
96 /* HW_PwrModule:  Enumerated Type used to specify the power domain */
97 enum HW_PwrModule_t {
98 /* Domains */
99     HW_PWR_DOMAIN_CORE,
100     HW_PWR_DOMAIN_MPU,
101     HW_PWR_DOMAIN_WAKEUP,
102     HW_PWR_DOMAIN_DSP,
103
104 /* Sub-domains */
105     HW_PWR_DSP_IPI,     /* IPI = Intrusive Port Interface */
106     HW_PWR_IVA_ISP       /* ISP = Intrusive Slave Port */
107 } ;
108
109 enum HW_PwrState_t {
110     HW_PWR_STATE_OFF,
111     HW_PWR_STATE_RET,
112     HW_PWR_STATE_INACT,
113     HW_PWR_STATE_ON = 3
114 } ;
115
116 enum HW_ForceState_t {
117     HW_FORCE_OFF,
118     HW_FORCE_ON
119 } ;
120
121 enum HW_IdleState_t {
122     HW_ACTIVE,
123     HW_STANDBY
124
125 } ;
126
127 enum HW_TransitionState_t {
128     HW_AUTOTRANS_DIS,
129     HW_SW_SUP_SLEEP,
130     HW_SW_SUP_WAKEUP,
131     HW_AUTOTRANS_EN
132 } ;
133
134
135 extern HW_STATUS HW_RST_Reset(const void __iomem *baseAddress,
136                                  enum HW_RstModule_t r);
137
138 extern HW_STATUS HW_RST_UnReset(const void __iomem *baseAddress,
139                                    enum HW_RstModule_t r);
140
141 extern HW_STATUS HW_RSTCTRL_RegGet(const void __iomem *baseAddress,
142                                              enum HW_RstModule_t p,
143                                              u32 *value);
144 extern HW_STATUS HW_RSTST_RegGet(const void __iomem *baseAddress,
145                                            enum HW_RstModule_t p, u32 *value);
146
147 extern HW_STATUS HW_PWR_PowerStateSet(const u32 baseAddress,
148                                                 enum HW_PwrModule_t p,
149                                                 enum HW_PwrState_t value);
150
151 extern HW_STATUS HW_CLK_SetInputClock(const u32 baseAddress,
152                                         enum HW_GPtimer_t gpt,
153                                         enum HW_Clocktype_t c);
154
155 extern HW_STATUS HW_PWR_IVA2StateGet(const void __iomem *baseAddress,
156                                         enum HW_PwrModule_t p,
157                                         enum HW_PwrState_t *value);
158
159 extern HW_STATUS HW_PWRST_IVA2RegGet(const void __iomem *baseAddress,
160                                                 u32 *value);
161
162 extern HW_STATUS HW_PWR_IVA2PowerStateSet(const void __iomem *baseAddress,
163                                             enum HW_PwrModule_t p,
164                                             enum HW_PwrState_t value);
165
166 extern HW_STATUS HW_PWR_CLKCTRL_IVA2RegSet(const void __iomem *baseAddress,
167                                              enum HW_TransitionState_t val);
168
169 #endif  /* __HW_PRCM_H */