arm, davinci: Add function lpsc_syncreset()
This patch adds a function lpsc_syncreset that allows setting a lpsc module into Sync Reset state. Signed-off-by: Christian Riesch <christian.riesch@omicron.at> Cc: Heiko Schocher <hs@denx.de> Cc: Paulraj Sandeep <s-paulraj@ti.com> Cc: Albert ARIBAUD <albert.u.boot@aribaud.net> Acked-by: Heiko Schocher <hs@denx.de> Tested-by: Heiko Schocher <hs@denx.de> Signed-off-by: Sandeep Paulraj <s-paulraj@ti.com>
This commit is contained in:
		
							parent
							
								
									eb40d05fcc
								
							
						
					
					
						commit
						fab19c142e
					
				|  | @ -46,7 +46,7 @@ | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| /* Works on Always On power domain only (no PD argument) */ | /* Works on Always On power domain only (no PD argument) */ | ||||||
| void lpsc_on(unsigned int id) | static void lpsc_transition(unsigned int id, unsigned int state) | ||||||
| { | { | ||||||
| 	dv_reg_p mdstat, mdctl, ptstat, ptcmd; | 	dv_reg_p mdstat, mdctl, ptstat, ptcmd; | ||||||
| #ifdef CONFIG_SOC_DA8XX | #ifdef CONFIG_SOC_DA8XX | ||||||
|  | @ -83,10 +83,10 @@ void lpsc_on(unsigned int id) | ||||||
| 	while (readl(ptstat) & 0x01) | 	while (readl(ptstat) & 0x01) | ||||||
| 		continue; | 		continue; | ||||||
| 
 | 
 | ||||||
| 	if ((readl(mdstat) & PSC_MDSTAT_STATE) == 0x03) | 	if ((readl(mdstat) & PSC_MDSTAT_STATE) == state) | ||||||
| 		return; /* Already on and enabled */ | 		return; /* Already in that state */ | ||||||
| 
 | 
 | ||||||
| 	writel(readl(mdctl) | 0x03, mdctl); | 	writel((readl(mdctl) & ~PSC_MDCTL_NEXT) | state, mdctl); | ||||||
| 
 | 
 | ||||||
| 	switch (id) { | 	switch (id) { | ||||||
| #ifdef CONFIG_SOC_DM644X | #ifdef CONFIG_SOC_DM644X | ||||||
|  | @ -114,10 +114,20 @@ void lpsc_on(unsigned int id) | ||||||
| 
 | 
 | ||||||
| 	while (readl(ptstat) & 0x01) | 	while (readl(ptstat) & 0x01) | ||||||
| 		continue; | 		continue; | ||||||
| 	while ((readl(mdstat) & PSC_MDSTAT_STATE) != 0x03) | 	while ((readl(mdstat) & PSC_MDSTAT_STATE) != state) | ||||||
| 		continue; | 		continue; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void lpsc_on(unsigned int id) | ||||||
|  | { | ||||||
|  | 	lpsc_transition(id, 0x03); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void lpsc_syncreset(unsigned int id) | ||||||
|  | { | ||||||
|  | 	lpsc_transition(id, 0x01); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /* Not all DaVinci chips have a DSP power domain. */ | /* Not all DaVinci chips have a DSP power domain. */ | ||||||
| #ifdef CONFIG_SOC_DM644X | #ifdef CONFIG_SOC_DM644X | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -292,6 +292,7 @@ typedef volatile unsigned int *	dv_reg_p; | ||||||
| #endif /* CONFIG_SOC_DA8XX */ | #endif /* CONFIG_SOC_DA8XX */ | ||||||
| 
 | 
 | ||||||
| void lpsc_on(unsigned int id); | void lpsc_on(unsigned int id); | ||||||
|  | void lpsc_syncreset(unsigned int id); | ||||||
| void dsp_on(void); | void dsp_on(void); | ||||||
| 
 | 
 | ||||||
| void davinci_enable_uart0(void); | void davinci_enable_uart0(void); | ||||||
|  | @ -358,6 +359,7 @@ struct davinci_psc_regs { | ||||||
| #endif /* CONFIG_SOC_DA8XX */ | #endif /* CONFIG_SOC_DA8XX */ | ||||||
| 
 | 
 | ||||||
| #define PSC_MDSTAT_STATE		0x3f | #define PSC_MDSTAT_STATE		0x3f | ||||||
|  | #define PSC_MDCTL_NEXT			0x07 | ||||||
| 
 | 
 | ||||||
| #ifndef CONFIG_SOC_DA8XX | #ifndef CONFIG_SOC_DA8XX | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue