File tree Expand file tree Collapse file tree 3 files changed +50
-0
lines changed
Expand file tree Collapse file tree 3 files changed +50
-0
lines changed Original file line number Diff line number Diff line change @@ -821,6 +821,38 @@ u8 db8500_prcmu_get_power_state_result(void)
821821 return readb (tcdm_base + PRCM_ACK_MB0_AP_PWRSTTR_STATUS );
822822}
823823
824+ #define PRCMU_A9_MASK_REQ 0x00000328
825+ #define PRCMU_A9_MASK_REQ_MASK 0x00000001
826+ #define PRCMU_GIC_DELAY 1
827+
828+ /* This function decouple the gic from the prcmu */
829+ int db8500_prcmu_gic_decouple (void )
830+ {
831+ u32 val = readl (_PRCMU_BASE + PRCMU_A9_MASK_REQ );
832+
833+ /* Set bit 0 register value to 1 */
834+ writel (val | PRCMU_A9_MASK_REQ_MASK , _PRCMU_BASE + PRCMU_A9_MASK_REQ );
835+
836+ /* Make sure the register is updated */
837+ readl (_PRCMU_BASE + PRCMU_A9_MASK_REQ );
838+
839+ /* Wait a few cycles for the gic mask completion */
840+ udelay (PRCMU_GIC_DELAY );
841+
842+ return 0 ;
843+ }
844+
845+ /* This function recouple the gic with the prcmu */
846+ int db8500_prcmu_gic_recouple (void )
847+ {
848+ u32 val = readl (_PRCMU_BASE + PRCMU_A9_MASK_REQ );
849+
850+ /* Set bit 0 register value to 0 */
851+ writel (val & ~PRCMU_A9_MASK_REQ_MASK , _PRCMU_BASE + PRCMU_A9_MASK_REQ );
852+
853+ return 0 ;
854+ }
855+
824856/* This function should only be called while mb0_transfer.lock is held. */
825857static void config_wakeups (void )
826858{
Original file line number Diff line number Diff line change @@ -580,6 +580,8 @@ int db8500_prcmu_load_a9wdog(u8 id, u32 val);
580580void db8500_prcmu_system_reset (u16 reset_code );
581581int db8500_prcmu_set_power_state (u8 state , bool keep_ulp_clk , bool keep_ap_pll );
582582u8 db8500_prcmu_get_power_state_result (void );
583+ int db8500_prcmu_gic_decouple (void );
584+ int db8500_prcmu_gic_recouple (void );
583585void db8500_prcmu_enable_wakeups (u32 wakeups );
584586int db8500_prcmu_set_epod (u16 epod_id , u8 epod_state );
585587int db8500_prcmu_request_clock (u8 clock , bool enable );
Original file line number Diff line number Diff line change @@ -281,6 +281,22 @@ static inline u8 prcmu_get_power_state_result(void)
281281 return db8500_prcmu_get_power_state_result ();
282282}
283283
284+ static inline int prcmu_gic_decouple (void )
285+ {
286+ if (cpu_is_u5500 ())
287+ return - EINVAL ;
288+ else
289+ return db8500_prcmu_gic_decouple ();
290+ }
291+
292+ static inline int prcmu_gic_recouple (void )
293+ {
294+ if (cpu_is_u5500 ())
295+ return - EINVAL ;
296+ else
297+ return db8500_prcmu_gic_recouple ();
298+ }
299+
284300static inline int prcmu_set_epod (u16 epod_id , u8 epod_state )
285301{
286302 if (cpu_is_u5500 ())
You can’t perform that action at this time.
0 commit comments