159fb659bSPaul Walmsley /*
259fb659bSPaul Walmsley  * OMAP2/3 Clock Management (CM) register definitions
359fb659bSPaul Walmsley  *
459fb659bSPaul Walmsley  * Copyright (C) 2007-2009 Texas Instruments, Inc.
559fb659bSPaul Walmsley  * Copyright (C) 2007-2010 Nokia Corporation
659fb659bSPaul Walmsley  * Paul Walmsley
759fb659bSPaul Walmsley  *
859fb659bSPaul Walmsley  * This program is free software; you can redistribute it and/or modify
959fb659bSPaul Walmsley  * it under the terms of the GNU General Public License version 2 as
1059fb659bSPaul Walmsley  * published by the Free Software Foundation.
1159fb659bSPaul Walmsley  *
1259fb659bSPaul Walmsley  * The CM hardware modules on the OMAP2/3 are quite similar to each
1359fb659bSPaul Walmsley  * other.  The CM modules/instances on OMAP4 are quite different, so
1459fb659bSPaul Walmsley  * they are handled in a separate file.
1559fb659bSPaul Walmsley  */
1659fb659bSPaul Walmsley #ifndef __ARCH_ASM_MACH_OMAP2_CM2XXX_3XXX_H
1759fb659bSPaul Walmsley #define __ARCH_ASM_MACH_OMAP2_CM2XXX_3XXX_H
1859fb659bSPaul Walmsley 
1959fb659bSPaul Walmsley #include "prcm-common.h"
2059fb659bSPaul Walmsley 
2159fb659bSPaul Walmsley /*
2259fb659bSPaul Walmsley  * Module specific CM register offsets from CM_BASE + domain offset
2359fb659bSPaul Walmsley  * Use cm_{read,write}_mod_reg() with these registers.
2459fb659bSPaul Walmsley  * These register offsets generally appear in more than one PRCM submodule.
2559fb659bSPaul Walmsley  */
2659fb659bSPaul Walmsley 
2759fb659bSPaul Walmsley /* Common between OMAP2 and OMAP3 */
2859fb659bSPaul Walmsley 
2959fb659bSPaul Walmsley #define CM_FCLKEN					0x0000
3059fb659bSPaul Walmsley #define CM_FCLKEN1					CM_FCLKEN
3159fb659bSPaul Walmsley #define CM_CLKEN					CM_FCLKEN
3259fb659bSPaul Walmsley #define CM_ICLKEN					0x0010
3359fb659bSPaul Walmsley #define CM_ICLKEN1					CM_ICLKEN
3459fb659bSPaul Walmsley #define CM_ICLKEN2					0x0014
3559fb659bSPaul Walmsley #define CM_ICLKEN3					0x0018
3659fb659bSPaul Walmsley #define CM_IDLEST					0x0020
3759fb659bSPaul Walmsley #define CM_IDLEST1					CM_IDLEST
3859fb659bSPaul Walmsley #define CM_IDLEST2					0x0024
39ff4ae5d9SPaul Walmsley #define OMAP2430_CM_IDLEST3				0x0028
4059fb659bSPaul Walmsley #define CM_AUTOIDLE					0x0030
4159fb659bSPaul Walmsley #define CM_AUTOIDLE1					CM_AUTOIDLE
4259fb659bSPaul Walmsley #define CM_AUTOIDLE2					0x0034
4359fb659bSPaul Walmsley #define CM_AUTOIDLE3					0x0038
4459fb659bSPaul Walmsley #define CM_CLKSEL					0x0040
4559fb659bSPaul Walmsley #define CM_CLKSEL1					CM_CLKSEL
4659fb659bSPaul Walmsley #define CM_CLKSEL2					0x0044
4759fb659bSPaul Walmsley #define OMAP2_CM_CLKSTCTRL				0x0048
4859fb659bSPaul Walmsley 
4959fb659bSPaul Walmsley #ifndef __ASSEMBLER__
5059fb659bSPaul Walmsley 
51ff4ae5d9SPaul Walmsley #include <linux/io.h>
5259fb659bSPaul Walmsley 
53ff4ae5d9SPaul Walmsley static inline u32 omap2_cm_read_mod_reg(s16 module, u16 idx)
54ff4ae5d9SPaul Walmsley {
55ff4ae5d9SPaul Walmsley 	return __raw_readl(cm_base + module + idx);
56ff4ae5d9SPaul Walmsley }
5759fb659bSPaul Walmsley 
58ff4ae5d9SPaul Walmsley static inline void omap2_cm_write_mod_reg(u32 val, s16 module, u16 idx)
59ff4ae5d9SPaul Walmsley {
60ff4ae5d9SPaul Walmsley 	__raw_writel(val, cm_base + module + idx);
61ff4ae5d9SPaul Walmsley }
6255ae3507SPaul Walmsley 
63ff4ae5d9SPaul Walmsley /* Read-modify-write a register in a CM module. Caller must lock */
64ff4ae5d9SPaul Walmsley static inline u32 omap2_cm_rmw_mod_reg_bits(u32 mask, u32 bits, s16 module,
65ff4ae5d9SPaul Walmsley 					    s16 idx)
66ff4ae5d9SPaul Walmsley {
67ff4ae5d9SPaul Walmsley 	u32 v;
6855ae3507SPaul Walmsley 
69ff4ae5d9SPaul Walmsley 	v = omap2_cm_read_mod_reg(module, idx);
70ff4ae5d9SPaul Walmsley 	v &= ~mask;
71ff4ae5d9SPaul Walmsley 	v |= bits;
72ff4ae5d9SPaul Walmsley 	omap2_cm_write_mod_reg(v, module, idx);
730fd0c21bSPaul Walmsley 
74ff4ae5d9SPaul Walmsley 	return v;
75ff4ae5d9SPaul Walmsley }
76ff4ae5d9SPaul Walmsley 
77ff4ae5d9SPaul Walmsley static inline u32 omap2_cm_set_mod_reg_bits(u32 bits, s16 module, s16 idx)
78ff4ae5d9SPaul Walmsley {
79ff4ae5d9SPaul Walmsley 	return omap2_cm_rmw_mod_reg_bits(bits, bits, module, idx);
80ff4ae5d9SPaul Walmsley }
81ff4ae5d9SPaul Walmsley 
82ff4ae5d9SPaul Walmsley static inline u32 omap2_cm_clear_mod_reg_bits(u32 bits, s16 module, s16 idx)
83ff4ae5d9SPaul Walmsley {
84ff4ae5d9SPaul Walmsley 	return omap2_cm_rmw_mod_reg_bits(bits, 0x0, module, idx);
85ff4ae5d9SPaul Walmsley }
8692618ff8SPaul Walmsley 
8759fb659bSPaul Walmsley #endif
8859fb659bSPaul Walmsley 
8959fb659bSPaul Walmsley /* CM register bits shared between 24XX and 3430 */
9059fb659bSPaul Walmsley 
9159fb659bSPaul Walmsley /* CM_CLKSEL_GFX */
9259fb659bSPaul Walmsley #define OMAP_CLKSEL_GFX_SHIFT				0
9359fb659bSPaul Walmsley #define OMAP_CLKSEL_GFX_MASK				(0x7 << 0)
9459fb659bSPaul Walmsley 
9559fb659bSPaul Walmsley /* CM_ICLKEN_GFX */
9659fb659bSPaul Walmsley #define OMAP_EN_GFX_SHIFT				0
9759fb659bSPaul Walmsley #define OMAP_EN_GFX_MASK				(1 << 0)
9859fb659bSPaul Walmsley 
9959fb659bSPaul Walmsley /* CM_IDLEST_GFX */
10059fb659bSPaul Walmsley #define OMAP_ST_GFX_MASK				(1 << 0)
10159fb659bSPaul Walmsley 
102f0611a5cSPaul Walmsley 
10359fb659bSPaul Walmsley #endif
104