diff options
Diffstat (limited to 'arch/arm/mach-omap2/prm44xx.c')
-rw-r--r-- | arch/arm/mach-omap2/prm44xx.c | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/prm44xx.c b/arch/arm/mach-omap2/prm44xx.c index 00165558fc4d..495a31a7e8a7 100644 --- a/arch/arm/mach-omap2/prm44xx.c +++ b/arch/arm/mach-omap2/prm44xx.c | |||
@@ -21,8 +21,11 @@ | |||
21 | #include <plat/cpu.h> | 21 | #include <plat/cpu.h> |
22 | #include <plat/prcm.h> | 22 | #include <plat/prcm.h> |
23 | 23 | ||
24 | #include "vp.h" | ||
24 | #include "prm44xx.h" | 25 | #include "prm44xx.h" |
25 | #include "prm-regbits-44xx.h" | 26 | #include "prm-regbits-44xx.h" |
27 | #include "prcm44xx.h" | ||
28 | #include "prminst44xx.h" | ||
26 | 29 | ||
27 | /* PRM low-level functions */ | 30 | /* PRM low-level functions */ |
28 | 31 | ||
@@ -50,3 +53,71 @@ u32 omap4_prm_rmw_inst_reg_bits(u32 mask, u32 bits, s16 inst, s16 reg) | |||
50 | 53 | ||
51 | return v; | 54 | return v; |
52 | } | 55 | } |
56 | |||
57 | /* PRM VP */ | ||
58 | |||
59 | /* | ||
60 | * struct omap4_vp - OMAP4 VP register access description. | ||
61 | * @irqstatus_mpu: offset to IRQSTATUS_MPU register for VP | ||
62 | * @tranxdone_status: VP_TRANXDONE_ST bitmask in PRM_IRQSTATUS_MPU reg | ||
63 | */ | ||
64 | struct omap4_vp { | ||
65 | u32 irqstatus_mpu; | ||
66 | u32 tranxdone_status; | ||
67 | }; | ||
68 | |||
69 | static struct omap4_vp omap4_vp[] = { | ||
70 | [OMAP4_VP_VDD_MPU_ID] = { | ||
71 | .irqstatus_mpu = OMAP4_PRM_IRQSTATUS_MPU_2_OFFSET, | ||
72 | .tranxdone_status = OMAP4430_VP_MPU_TRANXDONE_ST_MASK, | ||
73 | }, | ||
74 | [OMAP4_VP_VDD_IVA_ID] = { | ||
75 | .irqstatus_mpu = OMAP4_PRM_IRQSTATUS_MPU_OFFSET, | ||
76 | .tranxdone_status = OMAP4430_VP_IVA_TRANXDONE_ST_MASK, | ||
77 | }, | ||
78 | [OMAP4_VP_VDD_CORE_ID] = { | ||
79 | .irqstatus_mpu = OMAP4_PRM_IRQSTATUS_MPU_OFFSET, | ||
80 | .tranxdone_status = OMAP4430_VP_CORE_TRANXDONE_ST_MASK, | ||
81 | }, | ||
82 | }; | ||
83 | |||
84 | u32 omap4_prm_vp_check_txdone(u8 vp_id) | ||
85 | { | ||
86 | struct omap4_vp *vp = &omap4_vp[vp_id]; | ||
87 | u32 irqstatus; | ||
88 | |||
89 | irqstatus = omap4_prminst_read_inst_reg(OMAP4430_PRM_PARTITION, | ||
90 | OMAP4430_PRM_OCP_SOCKET_INST, | ||
91 | vp->irqstatus_mpu); | ||
92 | return irqstatus & vp->tranxdone_status; | ||
93 | } | ||
94 | |||
95 | void omap4_prm_vp_clear_txdone(u8 vp_id) | ||
96 | { | ||
97 | struct omap4_vp *vp = &omap4_vp[vp_id]; | ||
98 | |||
99 | omap4_prminst_write_inst_reg(vp->tranxdone_status, | ||
100 | OMAP4430_PRM_PARTITION, | ||
101 | OMAP4430_PRM_OCP_SOCKET_INST, | ||
102 | vp->irqstatus_mpu); | ||
103 | }; | ||
104 | |||
105 | u32 omap4_prm_vcvp_read(u8 offset) | ||
106 | { | ||
107 | return omap4_prminst_read_inst_reg(OMAP4430_PRM_PARTITION, | ||
108 | OMAP4430_PRM_DEVICE_INST, offset); | ||
109 | } | ||
110 | |||
111 | void omap4_prm_vcvp_write(u32 val, u8 offset) | ||
112 | { | ||
113 | omap4_prminst_write_inst_reg(val, OMAP4430_PRM_PARTITION, | ||
114 | OMAP4430_PRM_DEVICE_INST, offset); | ||
115 | } | ||
116 | |||
117 | u32 omap4_prm_vcvp_rmw(u32 mask, u32 bits, u8 offset) | ||
118 | { | ||
119 | return omap4_prminst_rmw_inst_reg_bits(mask, bits, | ||
120 | OMAP4430_PRM_PARTITION, | ||
121 | OMAP4430_PRM_DEVICE_INST, | ||
122 | offset); | ||
123 | } | ||