mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	ARM: ux500: Fix regression while init PM domains
The commitafece3ab9a("PM / Domains: Add time accounting to various genpd states") causes a boot regression for ux500. The problem occurs when the ux500 machine code calls pm_genpd_init(), which since the above change triggers a call to ktime_get(). More precisely, because ux500 initializes PM domains in the init_IRQ() phase of the boot, timekeeping has not yet been initialized. Fix the problem by moving the initialization of the PM domains to after timekeeping has been initialized. Fixes:afece3ab9a("PM / Domains: Add time accounting to various genpd..") Cc: Thara Gopinath <thara.gopinath@linaro.org> Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
		
							parent
							
								
									8633e4f2e9
								
							
						
					
					
						commit
						72ecd79386
					
				
					 2 changed files with 4 additions and 4 deletions
				
			
		| 
						 | 
					@ -32,6 +32,7 @@
 | 
				
			||||||
#include <asm/mach/arch.h>
 | 
					#include <asm/mach/arch.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "db8500-regs.h"
 | 
					#include "db8500-regs.h"
 | 
				
			||||||
 | 
					#include "pm_domains.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int __init ux500_l2x0_unlock(void)
 | 
					static int __init ux500_l2x0_unlock(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -157,6 +158,9 @@ static const struct of_device_id u8500_local_bus_nodes[] = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void __init u8500_init_machine(void)
 | 
					static void __init u8500_init_machine(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						/* Initialize ux500 power domains */
 | 
				
			||||||
 | 
						ux500_pm_domains_init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* automatically probe child nodes of dbx5x0 devices */
 | 
						/* automatically probe child nodes of dbx5x0 devices */
 | 
				
			||||||
	if (of_machine_is_compatible("st-ericsson,u8540"))
 | 
						if (of_machine_is_compatible("st-ericsson,u8540"))
 | 
				
			||||||
		of_platform_populate(NULL, u8500_local_bus_nodes,
 | 
							of_platform_populate(NULL, u8500_local_bus_nodes,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,7 +19,6 @@
 | 
				
			||||||
#include <linux/of_address.h>
 | 
					#include <linux/of_address.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "db8500-regs.h"
 | 
					#include "db8500-regs.h"
 | 
				
			||||||
#include "pm_domains.h"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ARM WFI Standby signal register */
 | 
					/* ARM WFI Standby signal register */
 | 
				
			||||||
#define PRCM_ARM_WFI_STANDBY    (prcmu_base + 0x130)
 | 
					#define PRCM_ARM_WFI_STANDBY    (prcmu_base + 0x130)
 | 
				
			||||||
| 
						 | 
					@ -203,7 +202,4 @@ void __init ux500_pm_init(u32 phy_base, u32 size)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Set up ux500 suspend callbacks. */
 | 
						/* Set up ux500 suspend callbacks. */
 | 
				
			||||||
	suspend_set_ops(UX500_SUSPEND_OPS);
 | 
						suspend_set_ops(UX500_SUSPEND_OPS);
 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* Initialize ux500 power domains */
 | 
					 | 
				
			||||||
	ux500_pm_domains_init();
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue