diff options
Diffstat (limited to 'arch/arm')
39 files changed, 212 insertions, 206 deletions
diff --git a/arch/arm/boot/dts/am4372.dtsi b/arch/arm/boot/dts/am4372.dtsi index 8a099bc10c1e..ebe4fa691860 100644 --- a/arch/arm/boot/dts/am4372.dtsi +++ b/arch/arm/boot/dts/am4372.dtsi | |||
@@ -796,7 +796,7 @@ | |||
796 | }; | 796 | }; |
797 | 797 | ||
798 | ocp2scp0: ocp2scp@483a8000 { | 798 | ocp2scp0: ocp2scp@483a8000 { |
799 | compatible = "ti,omap-ocp2scp"; | 799 | compatible = "ti,am437x-ocp2scp", "ti,omap-ocp2scp"; |
800 | #address-cells = <1>; | 800 | #address-cells = <1>; |
801 | #size-cells = <1>; | 801 | #size-cells = <1>; |
802 | ranges; | 802 | ranges; |
@@ -815,7 +815,7 @@ | |||
815 | }; | 815 | }; |
816 | 816 | ||
817 | ocp2scp1: ocp2scp@483e8000 { | 817 | ocp2scp1: ocp2scp@483e8000 { |
818 | compatible = "ti,omap-ocp2scp"; | 818 | compatible = "ti,am437x-ocp2scp", "ti,omap-ocp2scp"; |
819 | #address-cells = <1>; | 819 | #address-cells = <1>; |
820 | #size-cells = <1>; | 820 | #size-cells = <1>; |
821 | ranges; | 821 | ranges; |
diff --git a/arch/arm/boot/dts/am57xx-beagle-x15.dts b/arch/arm/boot/dts/am57xx-beagle-x15.dts index bd48dba16748..e580f4ffbde0 100644 --- a/arch/arm/boot/dts/am57xx-beagle-x15.dts +++ b/arch/arm/boot/dts/am57xx-beagle-x15.dts | |||
@@ -87,6 +87,7 @@ | |||
87 | gpios = <&tps659038_gpio 1 GPIO_ACTIVE_HIGH>; | 87 | gpios = <&tps659038_gpio 1 GPIO_ACTIVE_HIGH>; |
88 | gpio-fan,speed-map = <0 0>, | 88 | gpio-fan,speed-map = <0 0>, |
89 | <13000 1>; | 89 | <13000 1>; |
90 | #cooling-cells = <2>; | ||
90 | }; | 91 | }; |
91 | 92 | ||
92 | extcon_usb1: extcon_usb1 { | 93 | extcon_usb1: extcon_usb1 { |
@@ -442,6 +443,7 @@ | |||
442 | pinctrl-0 = <&tmp102_pins_default>; | 443 | pinctrl-0 = <&tmp102_pins_default>; |
443 | interrupt-parent = <&gpio7>; | 444 | interrupt-parent = <&gpio7>; |
444 | interrupts = <16 IRQ_TYPE_LEVEL_LOW>; | 445 | interrupts = <16 IRQ_TYPE_LEVEL_LOW>; |
446 | #thermal-sensor-cells = <1>; | ||
445 | }; | 447 | }; |
446 | }; | 448 | }; |
447 | 449 | ||
@@ -551,3 +553,50 @@ | |||
551 | &usb2 { | 553 | &usb2 { |
552 | dr_mode = "peripheral"; | 554 | dr_mode = "peripheral"; |
553 | }; | 555 | }; |
556 | |||
557 | &cpu_trips { | ||
558 | cpu_alert1: cpu_alert1 { | ||
559 | temperature = <50000>; /* millicelsius */ | ||
560 | hysteresis = <2000>; /* millicelsius */ | ||
561 | type = "active"; | ||
562 | }; | ||
563 | }; | ||
564 | |||
565 | &cpu_cooling_maps { | ||
566 | map1 { | ||
567 | trip = <&cpu_alert1>; | ||
568 | cooling-device = <&gpio_fan THERMAL_NO_LIMIT THERMAL_NO_LIMIT>; | ||
569 | }; | ||
570 | }; | ||
571 | |||
572 | &thermal_zones { | ||
573 | board_thermal: board_thermal { | ||
574 | polling-delay-passive = <1250>; /* milliseconds */ | ||
575 | polling-delay = <1500>; /* milliseconds */ | ||
576 | |||
577 | /* sensor ID */ | ||
578 | thermal-sensors = <&tmp102 0>; | ||
579 | |||
580 | board_trips: trips { | ||
581 | board_alert0: board_alert { | ||
582 | temperature = <40000>; /* millicelsius */ | ||
583 | hysteresis = <2000>; /* millicelsius */ | ||
584 | type = "active"; | ||
585 | }; | ||
586 | |||
587 | board_crit: board_crit { | ||
588 | temperature = <105000>; /* millicelsius */ | ||
589 | hysteresis = <0>; /* millicelsius */ | ||
590 | type = "critical"; | ||
591 | }; | ||
592 | }; | ||
593 | |||
594 | board_cooling_maps: cooling-maps { | ||
595 | map0 { | ||
596 | trip = <&board_alert0>; | ||
597 | cooling-device = | ||
598 | <&gpio_fan THERMAL_NO_LIMIT THERMAL_NO_LIMIT>; | ||
599 | }; | ||
600 | }; | ||
601 | }; | ||
602 | }; | ||
diff --git a/arch/arm/boot/dts/at91-sama5d3_xplained.dts b/arch/arm/boot/dts/at91-sama5d3_xplained.dts index fec1fca2ad66..6c4bc53cbf4e 100644 --- a/arch/arm/boot/dts/at91-sama5d3_xplained.dts +++ b/arch/arm/boot/dts/at91-sama5d3_xplained.dts | |||
@@ -167,7 +167,13 @@ | |||
167 | 167 | ||
168 | macb1: ethernet@f802c000 { | 168 | macb1: ethernet@f802c000 { |
169 | phy-mode = "rmii"; | 169 | phy-mode = "rmii"; |
170 | #address-cells = <1>; | ||
171 | #size-cells = <0>; | ||
170 | status = "okay"; | 172 | status = "okay"; |
173 | |||
174 | ethernet-phy@1 { | ||
175 | reg = <0x1>; | ||
176 | }; | ||
171 | }; | 177 | }; |
172 | 178 | ||
173 | dbgu: serial@ffffee00 { | 179 | dbgu: serial@ffffee00 { |
diff --git a/arch/arm/boot/dts/dra7.dtsi b/arch/arm/boot/dts/dra7.dtsi index a0afce7ad482..fe55938bc978 100644 --- a/arch/arm/boot/dts/dra7.dtsi +++ b/arch/arm/boot/dts/dra7.dtsi | |||
@@ -185,6 +185,18 @@ | |||
185 | }; | 185 | }; |
186 | }; | 186 | }; |
187 | 187 | ||
188 | bandgap: bandgap@4a0021e0 { | ||
189 | reg = <0x4a0021e0 0xc | ||
190 | 0x4a00232c 0xc | ||
191 | 0x4a002380 0x2c | ||
192 | 0x4a0023C0 0x3c | ||
193 | 0x4a002564 0x8 | ||
194 | 0x4a002574 0x50>; | ||
195 | compatible = "ti,dra752-bandgap"; | ||
196 | interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>; | ||
197 | #thermal-sensor-cells = <1>; | ||
198 | }; | ||
199 | |||
188 | cm_core_aon: cm_core_aon@4a005000 { | 200 | cm_core_aon: cm_core_aon@4a005000 { |
189 | compatible = "ti,dra7-cm-core-aon"; | 201 | compatible = "ti,dra7-cm-core-aon"; |
190 | reg = <0x4a005000 0x2000>; | 202 | reg = <0x4a005000 0x2000>; |
@@ -1435,6 +1447,17 @@ | |||
1435 | status = "disabled"; | 1447 | status = "disabled"; |
1436 | }; | 1448 | }; |
1437 | }; | 1449 | }; |
1450 | |||
1451 | thermal_zones: thermal-zones { | ||
1452 | #include "omap4-cpu-thermal.dtsi" | ||
1453 | #include "omap5-gpu-thermal.dtsi" | ||
1454 | #include "omap5-core-thermal.dtsi" | ||
1455 | }; | ||
1456 | |||
1457 | }; | ||
1458 | |||
1459 | &cpu_thermal { | ||
1460 | polling-delay = <500>; /* milliseconds */ | ||
1438 | }; | 1461 | }; |
1439 | 1462 | ||
1440 | /include/ "dra7xx-clocks.dtsi" | 1463 | /include/ "dra7xx-clocks.dtsi" |
diff --git a/arch/arm/boot/dts/dra72x.dtsi b/arch/arm/boot/dts/dra72x.dtsi index f7fb0d0ef25a..03d742f8d572 100644 --- a/arch/arm/boot/dts/dra72x.dtsi +++ b/arch/arm/boot/dts/dra72x.dtsi | |||
@@ -20,6 +20,11 @@ | |||
20 | device_type = "cpu"; | 20 | device_type = "cpu"; |
21 | compatible = "arm,cortex-a15"; | 21 | compatible = "arm,cortex-a15"; |
22 | reg = <0>; | 22 | reg = <0>; |
23 | |||
24 | /* cooling options */ | ||
25 | cooling-min-level = <0>; | ||
26 | cooling-max-level = <2>; | ||
27 | #cooling-cells = <2>; /* min followed by max */ | ||
23 | }; | 28 | }; |
24 | }; | 29 | }; |
25 | 30 | ||
diff --git a/arch/arm/boot/dts/dra74x.dtsi b/arch/arm/boot/dts/dra74x.dtsi index 00eeed789b4b..cc560a70926f 100644 --- a/arch/arm/boot/dts/dra74x.dtsi +++ b/arch/arm/boot/dts/dra74x.dtsi | |||
@@ -31,6 +31,11 @@ | |||
31 | clock-names = "cpu"; | 31 | clock-names = "cpu"; |
32 | 32 | ||
33 | clock-latency = <300000>; /* From omap-cpufreq driver */ | 33 | clock-latency = <300000>; /* From omap-cpufreq driver */ |
34 | |||
35 | /* cooling options */ | ||
36 | cooling-min-level = <0>; | ||
37 | cooling-max-level = <2>; | ||
38 | #cooling-cells = <2>; /* min followed by max */ | ||
34 | }; | 39 | }; |
35 | cpu@1 { | 40 | cpu@1 { |
36 | device_type = "cpu"; | 41 | device_type = "cpu"; |
diff --git a/arch/arm/boot/dts/exynos5250-spring.dts b/arch/arm/boot/dts/exynos5250-spring.dts index f02775487cd4..d075a68ac078 100644 --- a/arch/arm/boot/dts/exynos5250-spring.dts +++ b/arch/arm/boot/dts/exynos5250-spring.dts | |||
@@ -429,7 +429,6 @@ | |||
429 | &mmc_0 { | 429 | &mmc_0 { |
430 | status = "okay"; | 430 | status = "okay"; |
431 | num-slots = <1>; | 431 | num-slots = <1>; |
432 | supports-highspeed; | ||
433 | broken-cd; | 432 | broken-cd; |
434 | card-detect-delay = <200>; | 433 | card-detect-delay = <200>; |
435 | samsung,dw-mshc-ciu-div = <3>; | 434 | samsung,dw-mshc-ciu-div = <3>; |
@@ -437,11 +436,8 @@ | |||
437 | samsung,dw-mshc-ddr-timing = <1 2>; | 436 | samsung,dw-mshc-ddr-timing = <1 2>; |
438 | pinctrl-names = "default"; | 437 | pinctrl-names = "default"; |
439 | pinctrl-0 = <&sd0_clk &sd0_cmd &sd0_cd &sd0_bus4 &sd0_bus8>; | 438 | pinctrl-0 = <&sd0_clk &sd0_cmd &sd0_cd &sd0_bus4 &sd0_bus8>; |
440 | 439 | bus-width = <8>; | |
441 | slot@0 { | 440 | cap-mmc-highspeed; |
442 | reg = <0>; | ||
443 | bus-width = <8>; | ||
444 | }; | ||
445 | }; | 441 | }; |
446 | 442 | ||
447 | /* | 443 | /* |
@@ -451,7 +447,6 @@ | |||
451 | &mmc_1 { | 447 | &mmc_1 { |
452 | status = "okay"; | 448 | status = "okay"; |
453 | num-slots = <1>; | 449 | num-slots = <1>; |
454 | supports-highspeed; | ||
455 | broken-cd; | 450 | broken-cd; |
456 | card-detect-delay = <200>; | 451 | card-detect-delay = <200>; |
457 | samsung,dw-mshc-ciu-div = <3>; | 452 | samsung,dw-mshc-ciu-div = <3>; |
@@ -459,11 +454,8 @@ | |||
459 | samsung,dw-mshc-ddr-timing = <1 2>; | 454 | samsung,dw-mshc-ddr-timing = <1 2>; |
460 | pinctrl-names = "default"; | 455 | pinctrl-names = "default"; |
461 | pinctrl-0 = <&sd1_clk &sd1_cmd &sd1_cd &sd1_bus4>; | 456 | pinctrl-0 = <&sd1_clk &sd1_cmd &sd1_cd &sd1_bus4>; |
462 | 457 | bus-width = <4>; | |
463 | slot@0 { | 458 | cap-sd-highspeed; |
464 | reg = <0>; | ||
465 | bus-width = <4>; | ||
466 | }; | ||
467 | }; | 459 | }; |
468 | 460 | ||
469 | &pinctrl_0 { | 461 | &pinctrl_0 { |
@@ -490,7 +482,7 @@ | |||
490 | 482 | ||
491 | power_key_irq: power-key-irq { | 483 | power_key_irq: power-key-irq { |
492 | samsung,pins = "gpx1-3"; | 484 | samsung,pins = "gpx1-3"; |
493 | samsung,pin-function = <0>; | 485 | samsung,pin-function = <0xf>; |
494 | samsung,pin-pud = <0>; | 486 | samsung,pin-pud = <0>; |
495 | samsung,pin-drv = <0>; | 487 | samsung,pin-drv = <0>; |
496 | }; | 488 | }; |
@@ -518,7 +510,7 @@ | |||
518 | 510 | ||
519 | lid_irq: lid-irq { | 511 | lid_irq: lid-irq { |
520 | samsung,pins = "gpx3-5"; | 512 | samsung,pins = "gpx3-5"; |
521 | samsung,pin-function = <0>; | 513 | samsung,pin-function = <0xf>; |
522 | samsung,pin-pud = <0>; | 514 | samsung,pin-pud = <0>; |
523 | samsung,pin-drv = <0>; | 515 | samsung,pin-drv = <0>; |
524 | }; | 516 | }; |
diff --git a/arch/arm/boot/dts/omap4-cpu-thermal.dtsi b/arch/arm/boot/dts/omap4-cpu-thermal.dtsi index cb9458feb2e3..ab7f87ae96f0 100644 --- a/arch/arm/boot/dts/omap4-cpu-thermal.dtsi +++ b/arch/arm/boot/dts/omap4-cpu-thermal.dtsi | |||
@@ -18,7 +18,7 @@ cpu_thermal: cpu_thermal { | |||
18 | /* sensor ID */ | 18 | /* sensor ID */ |
19 | thermal-sensors = <&bandgap 0>; | 19 | thermal-sensors = <&bandgap 0>; |
20 | 20 | ||
21 | trips { | 21 | cpu_trips: trips { |
22 | cpu_alert0: cpu_alert { | 22 | cpu_alert0: cpu_alert { |
23 | temperature = <100000>; /* millicelsius */ | 23 | temperature = <100000>; /* millicelsius */ |
24 | hysteresis = <2000>; /* millicelsius */ | 24 | hysteresis = <2000>; /* millicelsius */ |
@@ -31,7 +31,7 @@ cpu_thermal: cpu_thermal { | |||
31 | }; | 31 | }; |
32 | }; | 32 | }; |
33 | 33 | ||
34 | cooling-maps { | 34 | cpu_cooling_maps: cooling-maps { |
35 | map0 { | 35 | map0 { |
36 | trip = <&cpu_alert0>; | 36 | trip = <&cpu_alert0>; |
37 | cooling-device = | 37 | cooling-device = |
diff --git a/arch/arm/mach-cns3xxx/pm.c b/arch/arm/mach-cns3xxx/pm.c index fb38c726e987..f46b78dd6136 100644 --- a/arch/arm/mach-cns3xxx/pm.c +++ b/arch/arm/mach-cns3xxx/pm.c | |||
@@ -73,7 +73,6 @@ static void cns3xxx_pwr_soft_rst_force(unsigned int block) | |||
73 | 73 | ||
74 | __raw_writel(reg, PM_SOFT_RST_REG); | 74 | __raw_writel(reg, PM_SOFT_RST_REG); |
75 | } | 75 | } |
76 | EXPORT_SYMBOL(cns3xxx_pwr_soft_rst_force); | ||
77 | 76 | ||
78 | void cns3xxx_pwr_soft_rst(unsigned int block) | 77 | void cns3xxx_pwr_soft_rst(unsigned int block) |
79 | { | 78 | { |
diff --git a/arch/arm/mach-exynos/exynos.c b/arch/arm/mach-exynos/exynos.c index f44c2e05c82e..8576a9f734bd 100644 --- a/arch/arm/mach-exynos/exynos.c +++ b/arch/arm/mach-exynos/exynos.c | |||
@@ -206,7 +206,7 @@ static void __init exynos_dt_machine_init(void) | |||
206 | if (!IS_ENABLED(CONFIG_SMP)) | 206 | if (!IS_ENABLED(CONFIG_SMP)) |
207 | exynos_sysram_init(); | 207 | exynos_sysram_init(); |
208 | 208 | ||
209 | #ifdef CONFIG_ARM_EXYNOS_CPUIDLE | 209 | #if defined(CONFIG_SMP) && defined(CONFIG_ARM_EXYNOS_CPUIDLE) |
210 | if (of_machine_is_compatible("samsung,exynos4210")) | 210 | if (of_machine_is_compatible("samsung,exynos4210")) |
211 | exynos_cpuidle.dev.platform_data = &cpuidle_coupled_exynos_data; | 211 | exynos_cpuidle.dev.platform_data = &cpuidle_coupled_exynos_data; |
212 | #endif | 212 | #endif |
diff --git a/arch/arm/mach-exynos/pm.c b/arch/arm/mach-exynos/pm.c index e6209dadc00d..5685250693fd 100644 --- a/arch/arm/mach-exynos/pm.c +++ b/arch/arm/mach-exynos/pm.c | |||
@@ -181,6 +181,7 @@ void exynos_enter_aftr(void) | |||
181 | cpu_pm_exit(); | 181 | cpu_pm_exit(); |
182 | } | 182 | } |
183 | 183 | ||
184 | #if defined(CONFIG_SMP) && defined(CONFIG_ARM_EXYNOS_CPUIDLE) | ||
184 | static atomic_t cpu1_wakeup = ATOMIC_INIT(0); | 185 | static atomic_t cpu1_wakeup = ATOMIC_INIT(0); |
185 | 186 | ||
186 | static int exynos_cpu0_enter_aftr(void) | 187 | static int exynos_cpu0_enter_aftr(void) |
@@ -302,3 +303,4 @@ struct cpuidle_exynos_data cpuidle_coupled_exynos_data = { | |||
302 | .pre_enter_aftr = exynos_pre_enter_aftr, | 303 | .pre_enter_aftr = exynos_pre_enter_aftr, |
303 | .post_enter_aftr = exynos_post_enter_aftr, | 304 | .post_enter_aftr = exynos_post_enter_aftr, |
304 | }; | 305 | }; |
306 | #endif /* CONFIG_SMP && CONFIG_ARM_EXYNOS_CPUIDLE */ | ||
diff --git a/arch/arm/mach-mvebu/pmsu.c b/arch/arm/mach-mvebu/pmsu.c index 8b9f5e202ccf..4f4e22206ae5 100644 --- a/arch/arm/mach-mvebu/pmsu.c +++ b/arch/arm/mach-mvebu/pmsu.c | |||
@@ -415,6 +415,9 @@ static __init int armada_38x_cpuidle_init(void) | |||
415 | void __iomem *mpsoc_base; | 415 | void __iomem *mpsoc_base; |
416 | u32 reg; | 416 | u32 reg; |
417 | 417 | ||
418 | pr_warn("CPU idle is currently broken on Armada 38x: disabling"); | ||
419 | return 0; | ||
420 | |||
418 | np = of_find_compatible_node(NULL, NULL, | 421 | np = of_find_compatible_node(NULL, NULL, |
419 | "marvell,armada-380-coherency-fabric"); | 422 | "marvell,armada-380-coherency-fabric"); |
420 | if (!np) | 423 | if (!np) |
@@ -476,6 +479,16 @@ static int __init mvebu_v7_cpu_pm_init(void) | |||
476 | return 0; | 479 | return 0; |
477 | of_node_put(np); | 480 | of_node_put(np); |
478 | 481 | ||
482 | /* | ||
483 | * Currently the CPU idle support for Armada 38x is broken, as | ||
484 | * the CPU hotplug uses some of the CPU idle functions it is | ||
485 | * broken too, so let's disable it | ||
486 | */ | ||
487 | if (of_machine_is_compatible("marvell,armada380")) { | ||
488 | cpu_hotplug_disable(); | ||
489 | pr_warn("CPU hotplug support is currently broken on Armada 38x: disabling"); | ||
490 | } | ||
491 | |||
479 | if (of_machine_is_compatible("marvell,armadaxp")) | 492 | if (of_machine_is_compatible("marvell,armadaxp")) |
480 | ret = armada_xp_cpuidle_init(); | 493 | ret = armada_xp_cpuidle_init(); |
481 | else if (of_machine_is_compatible("marvell,armada370")) | 494 | else if (of_machine_is_compatible("marvell,armada370")) |
@@ -489,7 +502,8 @@ static int __init mvebu_v7_cpu_pm_init(void) | |||
489 | return ret; | 502 | return ret; |
490 | 503 | ||
491 | mvebu_v7_pmsu_enable_l2_powerdown_onidle(); | 504 | mvebu_v7_pmsu_enable_l2_powerdown_onidle(); |
492 | platform_device_register(&mvebu_v7_cpuidle_device); | 505 | if (mvebu_v7_cpuidle_device.name) |
506 | platform_device_register(&mvebu_v7_cpuidle_device); | ||
493 | cpu_pm_register_notifier(&mvebu_v7_cpu_pm_notifier); | 507 | cpu_pm_register_notifier(&mvebu_v7_cpu_pm_notifier); |
494 | 508 | ||
495 | return 0; | 509 | return 0; |
diff --git a/arch/arm/mach-omap1/pm.c b/arch/arm/mach-omap1/pm.c index 34b4c0044961..dd94567c3628 100644 --- a/arch/arm/mach-omap1/pm.c +++ b/arch/arm/mach-omap1/pm.c | |||
@@ -71,13 +71,7 @@ static unsigned int mpui7xx_sleep_save[MPUI7XX_SLEEP_SAVE_SIZE]; | |||
71 | static unsigned int mpui1510_sleep_save[MPUI1510_SLEEP_SAVE_SIZE]; | 71 | static unsigned int mpui1510_sleep_save[MPUI1510_SLEEP_SAVE_SIZE]; |
72 | static unsigned int mpui1610_sleep_save[MPUI1610_SLEEP_SAVE_SIZE]; | 72 | static unsigned int mpui1610_sleep_save[MPUI1610_SLEEP_SAVE_SIZE]; |
73 | 73 | ||
74 | #ifndef CONFIG_OMAP_32K_TIMER | 74 | static unsigned short enable_dyn_sleep; |
75 | |||
76 | static unsigned short enable_dyn_sleep = 0; | ||
77 | |||
78 | #else | ||
79 | |||
80 | static unsigned short enable_dyn_sleep = 1; | ||
81 | 75 | ||
82 | static ssize_t idle_show(struct kobject *kobj, struct kobj_attribute *attr, | 76 | static ssize_t idle_show(struct kobject *kobj, struct kobj_attribute *attr, |
83 | char *buf) | 77 | char *buf) |
@@ -90,8 +84,9 @@ static ssize_t idle_store(struct kobject *kobj, struct kobj_attribute *attr, | |||
90 | { | 84 | { |
91 | unsigned short value; | 85 | unsigned short value; |
92 | if (sscanf(buf, "%hu", &value) != 1 || | 86 | if (sscanf(buf, "%hu", &value) != 1 || |
93 | (value != 0 && value != 1)) { | 87 | (value != 0 && value != 1) || |
94 | printk(KERN_ERR "idle_sleep_store: Invalid value\n"); | 88 | (value != 0 && !IS_ENABLED(CONFIG_OMAP_32K_TIMER))) { |
89 | pr_err("idle_sleep_store: Invalid value\n"); | ||
95 | return -EINVAL; | 90 | return -EINVAL; |
96 | } | 91 | } |
97 | enable_dyn_sleep = value; | 92 | enable_dyn_sleep = value; |
@@ -101,7 +96,6 @@ static ssize_t idle_store(struct kobject *kobj, struct kobj_attribute *attr, | |||
101 | static struct kobj_attribute sleep_while_idle_attr = | 96 | static struct kobj_attribute sleep_while_idle_attr = |
102 | __ATTR(sleep_while_idle, 0644, idle_show, idle_store); | 97 | __ATTR(sleep_while_idle, 0644, idle_show, idle_store); |
103 | 98 | ||
104 | #endif | ||
105 | 99 | ||
106 | static void (*omap_sram_suspend)(unsigned long r0, unsigned long r1) = NULL; | 100 | static void (*omap_sram_suspend)(unsigned long r0, unsigned long r1) = NULL; |
107 | 101 | ||
@@ -115,16 +109,11 @@ void omap1_pm_idle(void) | |||
115 | { | 109 | { |
116 | extern __u32 arm_idlect1_mask; | 110 | extern __u32 arm_idlect1_mask; |
117 | __u32 use_idlect1 = arm_idlect1_mask; | 111 | __u32 use_idlect1 = arm_idlect1_mask; |
118 | int do_sleep = 0; | ||
119 | 112 | ||
120 | local_fiq_disable(); | 113 | local_fiq_disable(); |
121 | 114 | ||
122 | #if defined(CONFIG_OMAP_MPU_TIMER) && !defined(CONFIG_OMAP_DM_TIMER) | 115 | #if defined(CONFIG_OMAP_MPU_TIMER) && !defined(CONFIG_OMAP_DM_TIMER) |
123 | #warning Enable 32kHz OS timer in order to allow sleep states in idle | ||
124 | use_idlect1 = use_idlect1 & ~(1 << 9); | 116 | use_idlect1 = use_idlect1 & ~(1 << 9); |
125 | #else | ||
126 | if (enable_dyn_sleep) | ||
127 | do_sleep = 1; | ||
128 | #endif | 117 | #endif |
129 | 118 | ||
130 | #ifdef CONFIG_OMAP_DM_TIMER | 119 | #ifdef CONFIG_OMAP_DM_TIMER |
@@ -134,10 +123,12 @@ void omap1_pm_idle(void) | |||
134 | if (omap_dma_running()) | 123 | if (omap_dma_running()) |
135 | use_idlect1 &= ~(1 << 6); | 124 | use_idlect1 &= ~(1 << 6); |
136 | 125 | ||
137 | /* We should be able to remove the do_sleep variable and multiple | 126 | /* |
127 | * We should be able to remove the do_sleep variable and multiple | ||
138 | * tests above as soon as drivers, timer and DMA code have been fixed. | 128 | * tests above as soon as drivers, timer and DMA code have been fixed. |
139 | * Even the sleep block count should become obsolete. */ | 129 | * Even the sleep block count should become obsolete. |
140 | if ((use_idlect1 != ~0) || !do_sleep) { | 130 | */ |
131 | if ((use_idlect1 != ~0) || !enable_dyn_sleep) { | ||
141 | 132 | ||
142 | __u32 saved_idlect1 = omap_readl(ARM_IDLECT1); | 133 | __u32 saved_idlect1 = omap_readl(ARM_IDLECT1); |
143 | if (cpu_is_omap15xx()) | 134 | if (cpu_is_omap15xx()) |
@@ -635,15 +626,25 @@ static const struct platform_suspend_ops omap_pm_ops = { | |||
635 | 626 | ||
636 | static int __init omap_pm_init(void) | 627 | static int __init omap_pm_init(void) |
637 | { | 628 | { |
638 | 629 | int error = 0; | |
639 | #ifdef CONFIG_OMAP_32K_TIMER | ||
640 | int error; | ||
641 | #endif | ||
642 | 630 | ||
643 | if (!cpu_class_is_omap1()) | 631 | if (!cpu_class_is_omap1()) |
644 | return -ENODEV; | 632 | return -ENODEV; |
645 | 633 | ||
646 | printk("Power Management for TI OMAP.\n"); | 634 | pr_info("Power Management for TI OMAP.\n"); |
635 | |||
636 | if (!IS_ENABLED(CONFIG_OMAP_32K_TIMER)) | ||
637 | pr_info("OMAP1 PM: sleep states in idle disabled due to no 32KiHz timer\n"); | ||
638 | |||
639 | if (!IS_ENABLED(CONFIG_OMAP_DM_TIMER)) | ||
640 | pr_info("OMAP1 PM: sleep states in idle disabled due to no DMTIMER support\n"); | ||
641 | |||
642 | if (IS_ENABLED(CONFIG_OMAP_32K_TIMER) && | ||
643 | IS_ENABLED(CONFIG_OMAP_DM_TIMER)) { | ||
644 | /* OMAP16xx only */ | ||
645 | pr_info("OMAP1 PM: sleep states in idle enabled\n"); | ||
646 | enable_dyn_sleep = 1; | ||
647 | } | ||
647 | 648 | ||
648 | /* | 649 | /* |
649 | * We copy the assembler sleep/wakeup routines to SRAM. | 650 | * We copy the assembler sleep/wakeup routines to SRAM. |
@@ -693,17 +694,15 @@ static int __init omap_pm_init(void) | |||
693 | omap_pm_init_debugfs(); | 694 | omap_pm_init_debugfs(); |
694 | #endif | 695 | #endif |
695 | 696 | ||
696 | #ifdef CONFIG_OMAP_32K_TIMER | ||
697 | error = sysfs_create_file(power_kobj, &sleep_while_idle_attr.attr); | 697 | error = sysfs_create_file(power_kobj, &sleep_while_idle_attr.attr); |
698 | if (error) | 698 | if (error) |
699 | printk(KERN_ERR "sysfs_create_file failed: %d\n", error); | 699 | printk(KERN_ERR "sysfs_create_file failed: %d\n", error); |
700 | #endif | ||
701 | 700 | ||
702 | if (cpu_is_omap16xx()) { | 701 | if (cpu_is_omap16xx()) { |
703 | /* configure LOW_PWR pin */ | 702 | /* configure LOW_PWR pin */ |
704 | omap_cfg_reg(T20_1610_LOW_PWR); | 703 | omap_cfg_reg(T20_1610_LOW_PWR); |
705 | } | 704 | } |
706 | 705 | ||
707 | return 0; | 706 | return error; |
708 | } | 707 | } |
709 | __initcall(omap_pm_init); | 708 | __initcall(omap_pm_init); |
diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig index 2b8e47788062..1041b19485ab 100644 --- a/arch/arm/mach-omap2/Kconfig +++ b/arch/arm/mach-omap2/Kconfig | |||
@@ -69,6 +69,7 @@ config SOC_DRA7XX | |||
69 | select ARM_GIC | 69 | select ARM_GIC |
70 | select HAVE_ARM_ARCH_TIMER | 70 | select HAVE_ARM_ARCH_TIMER |
71 | select IRQ_CROSSBAR | 71 | select IRQ_CROSSBAR |
72 | select ARM_ERRATA_798181 if SMP | ||
72 | 73 | ||
73 | config ARCH_OMAP2PLUS | 74 | config ARCH_OMAP2PLUS |
74 | bool | 75 | bool |
@@ -278,27 +279,6 @@ config OMAP3_SDRC_AC_TIMING | |||
278 | wish to say no. Selecting yes without understanding what is | 279 | wish to say no. Selecting yes without understanding what is |
279 | going on could result in system crashes; | 280 | going on could result in system crashes; |
280 | 281 | ||
281 | config OMAP4_ERRATA_I688 | ||
282 | bool "OMAP4 errata: Async Bridge Corruption" | ||
283 | depends on (ARCH_OMAP4 || SOC_OMAP5) && !ARCH_MULTIPLATFORM | ||
284 | select ARCH_HAS_BARRIERS | ||
285 | help | ||
286 | If a data is stalled inside asynchronous bridge because of back | ||
287 | pressure, it may be accepted multiple times, creating pointer | ||
288 | misalignment that will corrupt next transfers on that data path | ||
289 | until next reset of the system (No recovery procedure once the | ||
290 | issue is hit, the path remains consistently broken). Async bridge | ||
291 | can be found on path between MPU to EMIF and MPU to L3 interconnect. | ||
292 | This situation can happen only when the idle is initiated by a | ||
293 | Master Request Disconnection (which is trigged by software when | ||
294 | executing WFI on CPU). | ||
295 | The work-around for this errata needs all the initiators connected | ||
296 | through async bridge must ensure that data path is properly drained | ||
297 | before issuing WFI. This condition will be met if one Strongly ordered | ||
298 | access is performed to the target right before executing the WFI. | ||
299 | In MPU case, L3 T2ASYNC FIFO and DDR T2ASYNC FIFO needs to be drained. | ||
300 | IO barrier ensure that there is no synchronisation loss on initiators | ||
301 | operating on both interconnect port simultaneously. | ||
302 | endmenu | 282 | endmenu |
303 | 283 | ||
304 | endif | 284 | endif |
diff --git a/arch/arm/mach-omap2/common.c b/arch/arm/mach-omap2/common.c index 484cdadfb187..eae6a0e87c90 100644 --- a/arch/arm/mach-omap2/common.c +++ b/arch/arm/mach-omap2/common.c | |||
@@ -30,5 +30,4 @@ int __weak omap_secure_ram_reserve_memblock(void) | |||
30 | void __init omap_reserve(void) | 30 | void __init omap_reserve(void) |
31 | { | 31 | { |
32 | omap_secure_ram_reserve_memblock(); | 32 | omap_secure_ram_reserve_memblock(); |
33 | omap_barrier_reserve_memblock(); | ||
34 | } | 33 | } |
diff --git a/arch/arm/mach-omap2/common.h b/arch/arm/mach-omap2/common.h index 46e24581d624..cf3cf22ecd42 100644 --- a/arch/arm/mach-omap2/common.h +++ b/arch/arm/mach-omap2/common.h | |||
@@ -200,9 +200,6 @@ void __init omap4_map_io(void); | |||
200 | void __init omap5_map_io(void); | 200 | void __init omap5_map_io(void); |
201 | void __init ti81xx_map_io(void); | 201 | void __init ti81xx_map_io(void); |
202 | 202 | ||
203 | /* omap_barriers_init() is OMAP4 only */ | ||
204 | void omap_barriers_init(void); | ||
205 | |||
206 | /** | 203 | /** |
207 | * omap_test_timeout - busy-loop, testing a condition | 204 | * omap_test_timeout - busy-loop, testing a condition |
208 | * @cond: condition to test until it evaluates to true | 205 | * @cond: condition to test until it evaluates to true |
diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c index c4871c55bd8b..1eeff6be260d 100644 --- a/arch/arm/mach-omap2/io.c +++ b/arch/arm/mach-omap2/io.c | |||
@@ -306,7 +306,6 @@ void __init am33xx_map_io(void) | |||
306 | void __init omap4_map_io(void) | 306 | void __init omap4_map_io(void) |
307 | { | 307 | { |
308 | iotable_init(omap44xx_io_desc, ARRAY_SIZE(omap44xx_io_desc)); | 308 | iotable_init(omap44xx_io_desc, ARRAY_SIZE(omap44xx_io_desc)); |
309 | omap_barriers_init(); | ||
310 | } | 309 | } |
311 | #endif | 310 | #endif |
312 | 311 | ||
@@ -314,7 +313,6 @@ void __init omap4_map_io(void) | |||
314 | void __init omap5_map_io(void) | 313 | void __init omap5_map_io(void) |
315 | { | 314 | { |
316 | iotable_init(omap54xx_io_desc, ARRAY_SIZE(omap54xx_io_desc)); | 315 | iotable_init(omap54xx_io_desc, ARRAY_SIZE(omap54xx_io_desc)); |
317 | omap_barriers_init(); | ||
318 | } | 316 | } |
319 | #endif | 317 | #endif |
320 | /* | 318 | /* |
diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c index 78064b0d4db5..176eef6ef338 100644 --- a/arch/arm/mach-omap2/mux.c +++ b/arch/arm/mach-omap2/mux.c | |||
@@ -1053,7 +1053,7 @@ static void __init omap_mux_init_list(struct omap_mux_partition *partition, | |||
1053 | struct omap_mux *entry; | 1053 | struct omap_mux *entry; |
1054 | 1054 | ||
1055 | #ifdef CONFIG_OMAP_MUX | 1055 | #ifdef CONFIG_OMAP_MUX |
1056 | if (!superset->muxnames || !superset->muxnames[0]) { | 1056 | if (!superset->muxnames[0]) { |
1057 | superset++; | 1057 | superset++; |
1058 | continue; | 1058 | continue; |
1059 | } | 1059 | } |
diff --git a/arch/arm/mach-omap2/omap-secure.h b/arch/arm/mach-omap2/omap-secure.h index dec2b05d184b..af2851fbcdf0 100644 --- a/arch/arm/mach-omap2/omap-secure.h +++ b/arch/arm/mach-omap2/omap-secure.h | |||
@@ -70,13 +70,6 @@ extern u32 rx51_secure_dispatcher(u32 idx, u32 process, u32 flag, u32 nargs, | |||
70 | extern u32 rx51_secure_update_aux_cr(u32 set_bits, u32 clear_bits); | 70 | extern u32 rx51_secure_update_aux_cr(u32 set_bits, u32 clear_bits); |
71 | extern u32 rx51_secure_rng_call(u32 ptr, u32 count, u32 flag); | 71 | extern u32 rx51_secure_rng_call(u32 ptr, u32 count, u32 flag); |
72 | 72 | ||
73 | #ifdef CONFIG_OMAP4_ERRATA_I688 | ||
74 | extern int omap_barrier_reserve_memblock(void); | ||
75 | #else | ||
76 | static inline void omap_barrier_reserve_memblock(void) | ||
77 | { } | ||
78 | #endif | ||
79 | |||
80 | #ifdef CONFIG_SOC_HAS_REALTIME_COUNTER | 73 | #ifdef CONFIG_SOC_HAS_REALTIME_COUNTER |
81 | void set_cntfreq(void); | 74 | void set_cntfreq(void); |
82 | #else | 75 | #else |
diff --git a/arch/arm/mach-omap2/omap4-common.c b/arch/arm/mach-omap2/omap4-common.c index 7bb116a6f86f..16350eefa66c 100644 --- a/arch/arm/mach-omap2/omap4-common.c +++ b/arch/arm/mach-omap2/omap4-common.c | |||
@@ -51,75 +51,6 @@ static void __iomem *twd_base; | |||
51 | 51 | ||
52 | #define IRQ_LOCALTIMER 29 | 52 | #define IRQ_LOCALTIMER 29 |
53 | 53 | ||
54 | #ifdef CONFIG_OMAP4_ERRATA_I688 | ||
55 | /* Used to implement memory barrier on DRAM path */ | ||
56 | #define OMAP4_DRAM_BARRIER_VA 0xfe600000 | ||
57 | |||
58 | void __iomem *dram_sync, *sram_sync; | ||
59 | |||
60 | static phys_addr_t paddr; | ||
61 | static u32 size; | ||
62 | |||
63 | void omap_bus_sync(void) | ||
64 | { | ||
65 | if (dram_sync && sram_sync) { | ||
66 | writel_relaxed(readl_relaxed(dram_sync), dram_sync); | ||
67 | writel_relaxed(readl_relaxed(sram_sync), sram_sync); | ||
68 | isb(); | ||
69 | } | ||
70 | } | ||
71 | EXPORT_SYMBOL(omap_bus_sync); | ||
72 | |||
73 | static int __init omap4_sram_init(void) | ||
74 | { | ||
75 | struct device_node *np; | ||
76 | struct gen_pool *sram_pool; | ||
77 | |||
78 | np = of_find_compatible_node(NULL, NULL, "ti,omap4-mpu"); | ||
79 | if (!np) | ||
80 | pr_warn("%s:Unable to allocate sram needed to handle errata I688\n", | ||
81 | __func__); | ||
82 | sram_pool = of_get_named_gen_pool(np, "sram", 0); | ||
83 | if (!sram_pool) | ||
84 | pr_warn("%s:Unable to get sram pool needed to handle errata I688\n", | ||
85 | __func__); | ||
86 | else | ||
87 | sram_sync = (void *)gen_pool_alloc(sram_pool, PAGE_SIZE); | ||
88 | |||
89 | return 0; | ||
90 | } | ||
91 | omap_arch_initcall(omap4_sram_init); | ||
92 | |||
93 | /* Steal one page physical memory for barrier implementation */ | ||
94 | int __init omap_barrier_reserve_memblock(void) | ||
95 | { | ||
96 | |||
97 | size = ALIGN(PAGE_SIZE, SZ_1M); | ||
98 | paddr = arm_memblock_steal(size, SZ_1M); | ||
99 | |||
100 | return 0; | ||
101 | } | ||
102 | |||
103 | void __init omap_barriers_init(void) | ||
104 | { | ||
105 | struct map_desc dram_io_desc[1]; | ||
106 | |||
107 | dram_io_desc[0].virtual = OMAP4_DRAM_BARRIER_VA; | ||
108 | dram_io_desc[0].pfn = __phys_to_pfn(paddr); | ||
109 | dram_io_desc[0].length = size; | ||
110 | dram_io_desc[0].type = MT_MEMORY_RW_SO; | ||
111 | iotable_init(dram_io_desc, ARRAY_SIZE(dram_io_desc)); | ||
112 | dram_sync = (void __iomem *) dram_io_desc[0].virtual; | ||
113 | |||
114 | pr_info("OMAP4: Map 0x%08llx to 0x%08lx for dram barrier\n", | ||
115 | (long long) paddr, dram_io_desc[0].virtual); | ||
116 | |||
117 | } | ||
118 | #else | ||
119 | void __init omap_barriers_init(void) | ||
120 | {} | ||
121 | #endif | ||
122 | |||
123 | void gic_dist_disable(void) | 54 | void gic_dist_disable(void) |
124 | { | 55 | { |
125 | if (gic_dist_base_addr) | 56 | if (gic_dist_base_addr) |
diff --git a/arch/arm/mach-omap2/sleep44xx.S b/arch/arm/mach-omap2/sleep44xx.S index b84a0122d823..ad1bb9431e94 100644 --- a/arch/arm/mach-omap2/sleep44xx.S +++ b/arch/arm/mach-omap2/sleep44xx.S | |||
@@ -333,11 +333,9 @@ ENDPROC(omap4_cpu_resume) | |||
333 | 333 | ||
334 | #endif /* defined(CONFIG_SMP) && defined(CONFIG_PM) */ | 334 | #endif /* defined(CONFIG_SMP) && defined(CONFIG_PM) */ |
335 | 335 | ||
336 | #ifndef CONFIG_OMAP4_ERRATA_I688 | ||
337 | ENTRY(omap_bus_sync) | 336 | ENTRY(omap_bus_sync) |
338 | ret lr | 337 | ret lr |
339 | ENDPROC(omap_bus_sync) | 338 | ENDPROC(omap_bus_sync) |
340 | #endif | ||
341 | 339 | ||
342 | ENTRY(omap_do_wfi) | 340 | ENTRY(omap_do_wfi) |
343 | stmfd sp!, {lr} | 341 | stmfd sp!, {lr} |
diff --git a/arch/arm/mach-s3c24xx/Kconfig b/arch/arm/mach-s3c24xx/Kconfig index 79c49ff77f6e..23bec3a85b22 100644 --- a/arch/arm/mach-s3c24xx/Kconfig +++ b/arch/arm/mach-s3c24xx/Kconfig | |||
@@ -39,14 +39,14 @@ config CPU_S3C2412 | |||
39 | bool "SAMSUNG S3C2412" | 39 | bool "SAMSUNG S3C2412" |
40 | select CPU_ARM926T | 40 | select CPU_ARM926T |
41 | select S3C2412_COMMON_CLK | 41 | select S3C2412_COMMON_CLK |
42 | select S3C2412_PM if PM | 42 | select S3C2412_PM if PM_SLEEP |
43 | help | 43 | help |
44 | Support for the S3C2412 and S3C2413 SoCs from the S3C24XX line | 44 | Support for the S3C2412 and S3C2413 SoCs from the S3C24XX line |
45 | 45 | ||
46 | config CPU_S3C2416 | 46 | config CPU_S3C2416 |
47 | bool "SAMSUNG S3C2416/S3C2450" | 47 | bool "SAMSUNG S3C2416/S3C2450" |
48 | select CPU_ARM926T | 48 | select CPU_ARM926T |
49 | select S3C2416_PM if PM | 49 | select S3C2416_PM if PM_SLEEP |
50 | select S3C2443_COMMON_CLK | 50 | select S3C2443_COMMON_CLK |
51 | help | 51 | help |
52 | Support for the S3C2416 SoC from the S3C24XX line | 52 | Support for the S3C2416 SoC from the S3C24XX line |
@@ -55,7 +55,7 @@ config CPU_S3C2440 | |||
55 | bool "SAMSUNG S3C2440" | 55 | bool "SAMSUNG S3C2440" |
56 | select CPU_ARM920T | 56 | select CPU_ARM920T |
57 | select S3C2410_COMMON_CLK | 57 | select S3C2410_COMMON_CLK |
58 | select S3C2410_PM if PM | 58 | select S3C2410_PM if PM_SLEEP |
59 | help | 59 | help |
60 | Support for S3C2440 Samsung Mobile CPU based systems. | 60 | Support for S3C2440 Samsung Mobile CPU based systems. |
61 | 61 | ||
@@ -63,7 +63,7 @@ config CPU_S3C2442 | |||
63 | bool "SAMSUNG S3C2442" | 63 | bool "SAMSUNG S3C2442" |
64 | select CPU_ARM920T | 64 | select CPU_ARM920T |
65 | select S3C2410_COMMON_CLK | 65 | select S3C2410_COMMON_CLK |
66 | select S3C2410_PM if PM | 66 | select S3C2410_PM if PM_SLEEP |
67 | help | 67 | help |
68 | Support for S3C2442 Samsung Mobile CPU based systems. | 68 | Support for S3C2442 Samsung Mobile CPU based systems. |
69 | 69 | ||
@@ -228,11 +228,6 @@ config H1940BT | |||
228 | This is a simple driver that is able to control | 228 | This is a simple driver that is able to control |
229 | the state of built in bluetooth chip on h1940. | 229 | the state of built in bluetooth chip on h1940. |
230 | 230 | ||
231 | config PM_H1940 | ||
232 | bool | ||
233 | help | ||
234 | Internal node for H1940 and related PM | ||
235 | |||
236 | config MACH_N30 | 231 | config MACH_N30 |
237 | bool "Acer N30 family" | 232 | bool "Acer N30 family" |
238 | select S3C_DEV_NAND | 233 | select S3C_DEV_NAND |
@@ -362,6 +357,7 @@ if CPU_S3C2416 | |||
362 | config S3C2416_PM | 357 | config S3C2416_PM |
363 | bool | 358 | bool |
364 | select S3C2412_PM_SLEEP | 359 | select S3C2412_PM_SLEEP |
360 | select SAMSUNG_WAKEMASK | ||
365 | help | 361 | help |
366 | Internal config node to apply S3C2416 power management | 362 | Internal config node to apply S3C2416 power management |
367 | 363 | ||
@@ -584,6 +580,11 @@ config MACH_SMDK2443 | |||
584 | 580 | ||
585 | endif # CPU_S3C2443 | 581 | endif # CPU_S3C2443 |
586 | 582 | ||
583 | config PM_H1940 | ||
584 | bool | ||
585 | help | ||
586 | Internal node for H1940 and related PM | ||
587 | |||
587 | endmenu # SAMSUNG S3C24XX SoCs Support | 588 | endmenu # SAMSUNG S3C24XX SoCs Support |
588 | 589 | ||
589 | endif # ARCH_S3C24XX | 590 | endif # ARCH_S3C24XX |
diff --git a/arch/arm/mach-s3c24xx/Makefile b/arch/arm/mach-s3c24xx/Makefile index b40a22fe082a..05920c8a5764 100644 --- a/arch/arm/mach-s3c24xx/Makefile +++ b/arch/arm/mach-s3c24xx/Makefile | |||
@@ -32,7 +32,8 @@ obj-$(CONFIG_CPU_S3C2443) += s3c2443.o | |||
32 | 32 | ||
33 | # PM | 33 | # PM |
34 | 34 | ||
35 | obj-$(CONFIG_PM) += pm.o irq-pm.o sleep.o | 35 | obj-$(CONFIG_PM) += pm.o |
36 | obj-$(CONFIG_PM_SLEEP) += irq-pm.o sleep.o | ||
36 | 37 | ||
37 | # common code | 38 | # common code |
38 | 39 | ||
diff --git a/arch/arm/mach-s3c24xx/include/mach/pm-core.h b/arch/arm/mach-s3c24xx/include/mach/pm-core.h index 2eef7e6f7675..69459dbbdcad 100644 --- a/arch/arm/mach-s3c24xx/include/mach/pm-core.h +++ b/arch/arm/mach-s3c24xx/include/mach/pm-core.h | |||
@@ -10,6 +10,11 @@ | |||
10 | * it under the terms of the GNU General Public License version 2 as | 10 | * it under the terms of the GNU General Public License version 2 as |
11 | * published by the Free Software Foundation. | 11 | * published by the Free Software Foundation. |
12 | */ | 12 | */ |
13 | #include <linux/delay.h> | ||
14 | #include <linux/io.h> | ||
15 | |||
16 | #include "regs-clock.h" | ||
17 | #include "regs-irq.h" | ||
13 | 18 | ||
14 | static inline void s3c_pm_debug_init_uart(void) | 19 | static inline void s3c_pm_debug_init_uart(void) |
15 | { | 20 | { |
@@ -42,8 +47,23 @@ static inline void s3c_pm_arch_stop_clocks(void) | |||
42 | __raw_writel(0x00, S3C2410_CLKCON); /* turn off clocks over sleep */ | 47 | __raw_writel(0x00, S3C2410_CLKCON); /* turn off clocks over sleep */ |
43 | } | 48 | } |
44 | 49 | ||
45 | static void s3c_pm_show_resume_irqs(int start, unsigned long which, | 50 | /* s3c2410_pm_show_resume_irqs |
46 | unsigned long mask); | 51 | * |
52 | * print any IRQs asserted at resume time (ie, we woke from) | ||
53 | */ | ||
54 | static inline void s3c_pm_show_resume_irqs(int start, unsigned long which, | ||
55 | unsigned long mask) | ||
56 | { | ||
57 | int i; | ||
58 | |||
59 | which &= ~mask; | ||
60 | |||
61 | for (i = 0; i <= 31; i++) { | ||
62 | if (which & (1L<<i)) { | ||
63 | S3C_PMDBG("IRQ %d asserted at resume\n", start+i); | ||
64 | } | ||
65 | } | ||
66 | } | ||
47 | 67 | ||
48 | static inline void s3c_pm_arch_show_resume_irqs(void) | 68 | static inline void s3c_pm_arch_show_resume_irqs(void) |
49 | { | 69 | { |
diff --git a/arch/arm/mach-s3c24xx/pm-s3c2416.c b/arch/arm/mach-s3c24xx/pm-s3c2416.c index 44923895f558..c0e328e37bd6 100644 --- a/arch/arm/mach-s3c24xx/pm-s3c2416.c +++ b/arch/arm/mach-s3c24xx/pm-s3c2416.c | |||
@@ -23,6 +23,7 @@ | |||
23 | 23 | ||
24 | #include "s3c2412-power.h" | 24 | #include "s3c2412-power.h" |
25 | 25 | ||
26 | #ifdef CONFIG_PM_SLEEP | ||
26 | extern void s3c2412_sleep_enter(void); | 27 | extern void s3c2412_sleep_enter(void); |
27 | 28 | ||
28 | static int s3c2416_cpu_suspend(unsigned long arg) | 29 | static int s3c2416_cpu_suspend(unsigned long arg) |
@@ -70,7 +71,7 @@ static __init int s3c2416_pm_init(void) | |||
70 | } | 71 | } |
71 | 72 | ||
72 | arch_initcall(s3c2416_pm_init); | 73 | arch_initcall(s3c2416_pm_init); |
73 | 74 | #endif | |
74 | 75 | ||
75 | static void s3c2416_pm_resume(void) | 76 | static void s3c2416_pm_resume(void) |
76 | { | 77 | { |
diff --git a/arch/arm/mach-s3c24xx/pm.c b/arch/arm/mach-s3c24xx/pm.c index b19256ec8d40..5d510bca0844 100644 --- a/arch/arm/mach-s3c24xx/pm.c +++ b/arch/arm/mach-s3c24xx/pm.c | |||
@@ -50,6 +50,7 @@ | |||
50 | 50 | ||
51 | #define PFX "s3c24xx-pm: " | 51 | #define PFX "s3c24xx-pm: " |
52 | 52 | ||
53 | #ifdef CONFIG_PM_SLEEP | ||
53 | static struct sleep_save core_save[] = { | 54 | static struct sleep_save core_save[] = { |
54 | /* we restore the timings here, with the proviso that the board | 55 | /* we restore the timings here, with the proviso that the board |
55 | * brings the system up in an slower, or equal frequency setting | 56 | * brings the system up in an slower, or equal frequency setting |
@@ -67,6 +68,7 @@ static struct sleep_save core_save[] = { | |||
67 | SAVE_ITEM(S3C2410_BANKCON4), | 68 | SAVE_ITEM(S3C2410_BANKCON4), |
68 | SAVE_ITEM(S3C2410_BANKCON5), | 69 | SAVE_ITEM(S3C2410_BANKCON5), |
69 | }; | 70 | }; |
71 | #endif | ||
70 | 72 | ||
71 | /* s3c_pm_check_resume_pin | 73 | /* s3c_pm_check_resume_pin |
72 | * | 74 | * |
@@ -121,7 +123,7 @@ void s3c_pm_configure_extint(void) | |||
121 | } | 123 | } |
122 | } | 124 | } |
123 | 125 | ||
124 | 126 | #ifdef CONFIG_PM_SLEEP | |
125 | void s3c_pm_restore_core(void) | 127 | void s3c_pm_restore_core(void) |
126 | { | 128 | { |
127 | s3c_pm_do_restore_core(core_save, ARRAY_SIZE(core_save)); | 129 | s3c_pm_do_restore_core(core_save, ARRAY_SIZE(core_save)); |
@@ -131,4 +133,4 @@ void s3c_pm_save_core(void) | |||
131 | { | 133 | { |
132 | s3c_pm_do_save(core_save, ARRAY_SIZE(core_save)); | 134 | s3c_pm_do_save(core_save, ARRAY_SIZE(core_save)); |
133 | } | 135 | } |
134 | 136 | #endif | |
diff --git a/arch/arm/mach-s3c24xx/s3c2410.c b/arch/arm/mach-s3c24xx/s3c2410.c index 2a6985a4a0ff..5061d66ca10c 100644 --- a/arch/arm/mach-s3c24xx/s3c2410.c +++ b/arch/arm/mach-s3c24xx/s3c2410.c | |||
@@ -121,7 +121,7 @@ int __init s3c2410_init(void) | |||
121 | { | 121 | { |
122 | printk("S3C2410: Initialising architecture\n"); | 122 | printk("S3C2410: Initialising architecture\n"); |
123 | 123 | ||
124 | #ifdef CONFIG_PM | 124 | #ifdef CONFIG_PM_SLEEP |
125 | register_syscore_ops(&s3c2410_pm_syscore_ops); | 125 | register_syscore_ops(&s3c2410_pm_syscore_ops); |
126 | register_syscore_ops(&s3c24xx_irq_syscore_ops); | 126 | register_syscore_ops(&s3c24xx_irq_syscore_ops); |
127 | #endif | 127 | #endif |
diff --git a/arch/arm/mach-s3c24xx/s3c2412.c b/arch/arm/mach-s3c24xx/s3c2412.c index ecf2c77ab88b..64a13605cfc3 100644 --- a/arch/arm/mach-s3c24xx/s3c2412.c +++ b/arch/arm/mach-s3c24xx/s3c2412.c | |||
@@ -172,7 +172,7 @@ int __init s3c2412_init(void) | |||
172 | { | 172 | { |
173 | printk("S3C2412: Initialising architecture\n"); | 173 | printk("S3C2412: Initialising architecture\n"); |
174 | 174 | ||
175 | #ifdef CONFIG_PM | 175 | #ifdef CONFIG_PM_SLEEP |
176 | register_syscore_ops(&s3c2412_pm_syscore_ops); | 176 | register_syscore_ops(&s3c2412_pm_syscore_ops); |
177 | register_syscore_ops(&s3c24xx_irq_syscore_ops); | 177 | register_syscore_ops(&s3c24xx_irq_syscore_ops); |
178 | #endif | 178 | #endif |
diff --git a/arch/arm/mach-s3c24xx/s3c2416.c b/arch/arm/mach-s3c24xx/s3c2416.c index bfd4da86deb8..3f8ca2a3ef17 100644 --- a/arch/arm/mach-s3c24xx/s3c2416.c +++ b/arch/arm/mach-s3c24xx/s3c2416.c | |||
@@ -98,7 +98,7 @@ int __init s3c2416_init(void) | |||
98 | s3c_adc_setname("s3c2416-adc"); | 98 | s3c_adc_setname("s3c2416-adc"); |
99 | s3c_rtc_setname("s3c2416-rtc"); | 99 | s3c_rtc_setname("s3c2416-rtc"); |
100 | 100 | ||
101 | #ifdef CONFIG_PM | 101 | #ifdef CONFIG_PM_SLEEP |
102 | register_syscore_ops(&s3c2416_pm_syscore_ops); | 102 | register_syscore_ops(&s3c2416_pm_syscore_ops); |
103 | register_syscore_ops(&s3c24xx_irq_syscore_ops); | 103 | register_syscore_ops(&s3c24xx_irq_syscore_ops); |
104 | register_syscore_ops(&s3c2416_irq_syscore_ops); | 104 | register_syscore_ops(&s3c2416_irq_syscore_ops); |
diff --git a/arch/arm/mach-s3c24xx/s3c2440.c b/arch/arm/mach-s3c24xx/s3c2440.c index 03d379f1fc52..eb733555fab5 100644 --- a/arch/arm/mach-s3c24xx/s3c2440.c +++ b/arch/arm/mach-s3c24xx/s3c2440.c | |||
@@ -57,11 +57,11 @@ int __init s3c2440_init(void) | |||
57 | 57 | ||
58 | /* register suspend/resume handlers */ | 58 | /* register suspend/resume handlers */ |
59 | 59 | ||
60 | #ifdef CONFIG_PM | 60 | #ifdef CONFIG_PM_SLEEP |
61 | register_syscore_ops(&s3c2410_pm_syscore_ops); | 61 | register_syscore_ops(&s3c2410_pm_syscore_ops); |
62 | register_syscore_ops(&s3c24xx_irq_syscore_ops); | 62 | register_syscore_ops(&s3c24xx_irq_syscore_ops); |
63 | #endif | ||
64 | register_syscore_ops(&s3c244x_pm_syscore_ops); | 63 | register_syscore_ops(&s3c244x_pm_syscore_ops); |
64 | #endif | ||
65 | 65 | ||
66 | /* register our system device for everything else */ | 66 | /* register our system device for everything else */ |
67 | 67 | ||
diff --git a/arch/arm/mach-s3c24xx/s3c2442.c b/arch/arm/mach-s3c24xx/s3c2442.c index 7b043349f1c8..893998ede022 100644 --- a/arch/arm/mach-s3c24xx/s3c2442.c +++ b/arch/arm/mach-s3c24xx/s3c2442.c | |||
@@ -60,11 +60,11 @@ int __init s3c2442_init(void) | |||
60 | { | 60 | { |
61 | printk("S3C2442: Initialising architecture\n"); | 61 | printk("S3C2442: Initialising architecture\n"); |
62 | 62 | ||
63 | #ifdef CONFIG_PM | 63 | #ifdef CONFIG_PM_SLEEP |
64 | register_syscore_ops(&s3c2410_pm_syscore_ops); | 64 | register_syscore_ops(&s3c2410_pm_syscore_ops); |
65 | register_syscore_ops(&s3c24xx_irq_syscore_ops); | 65 | register_syscore_ops(&s3c24xx_irq_syscore_ops); |
66 | #endif | ||
67 | register_syscore_ops(&s3c244x_pm_syscore_ops); | 66 | register_syscore_ops(&s3c244x_pm_syscore_ops); |
67 | #endif | ||
68 | 68 | ||
69 | return device_register(&s3c2442_dev); | 69 | return device_register(&s3c2442_dev); |
70 | } | 70 | } |
diff --git a/arch/arm/mach-s3c24xx/s3c244x.c b/arch/arm/mach-s3c24xx/s3c244x.c index 177f97802745..b14119585dc7 100644 --- a/arch/arm/mach-s3c24xx/s3c244x.c +++ b/arch/arm/mach-s3c24xx/s3c244x.c | |||
@@ -108,7 +108,7 @@ static int __init s3c2442_core_init(void) | |||
108 | core_initcall(s3c2442_core_init); | 108 | core_initcall(s3c2442_core_init); |
109 | 109 | ||
110 | 110 | ||
111 | #ifdef CONFIG_PM | 111 | #ifdef CONFIG_PM_SLEEP |
112 | static struct sleep_save s3c244x_sleep[] = { | 112 | static struct sleep_save s3c244x_sleep[] = { |
113 | SAVE_ITEM(S3C2440_DSC0), | 113 | SAVE_ITEM(S3C2440_DSC0), |
114 | SAVE_ITEM(S3C2440_DSC1), | 114 | SAVE_ITEM(S3C2440_DSC1), |
@@ -127,12 +127,9 @@ static void s3c244x_resume(void) | |||
127 | { | 127 | { |
128 | s3c_pm_do_restore(s3c244x_sleep, ARRAY_SIZE(s3c244x_sleep)); | 128 | s3c_pm_do_restore(s3c244x_sleep, ARRAY_SIZE(s3c244x_sleep)); |
129 | } | 129 | } |
130 | #else | ||
131 | #define s3c244x_suspend NULL | ||
132 | #define s3c244x_resume NULL | ||
133 | #endif | ||
134 | 130 | ||
135 | struct syscore_ops s3c244x_pm_syscore_ops = { | 131 | struct syscore_ops s3c244x_pm_syscore_ops = { |
136 | .suspend = s3c244x_suspend, | 132 | .suspend = s3c244x_suspend, |
137 | .resume = s3c244x_resume, | 133 | .resume = s3c244x_resume, |
138 | }; | 134 | }; |
135 | #endif | ||
diff --git a/arch/arm/mach-s3c64xx/Kconfig b/arch/arm/mach-s3c64xx/Kconfig index 26ca2427e53d..eff95e950d81 100644 --- a/arch/arm/mach-s3c64xx/Kconfig +++ b/arch/arm/mach-s3c64xx/Kconfig | |||
@@ -189,6 +189,7 @@ endchoice | |||
189 | config SMDK6410_WM1190_EV1 | 189 | config SMDK6410_WM1190_EV1 |
190 | bool "Support Wolfson Microelectronics 1190-EV1 PMIC card" | 190 | bool "Support Wolfson Microelectronics 1190-EV1 PMIC card" |
191 | depends on MACH_SMDK6410 | 191 | depends on MACH_SMDK6410 |
192 | depends on I2C=y | ||
192 | select MFD_WM8350_I2C | 193 | select MFD_WM8350_I2C |
193 | select REGULATOR | 194 | select REGULATOR |
194 | select REGULATOR_WM8350 | 195 | select REGULATOR_WM8350 |
@@ -203,6 +204,7 @@ config SMDK6410_WM1190_EV1 | |||
203 | config SMDK6410_WM1192_EV1 | 204 | config SMDK6410_WM1192_EV1 |
204 | bool "Support Wolfson Microelectronics 1192-EV1 PMIC card" | 205 | bool "Support Wolfson Microelectronics 1192-EV1 PMIC card" |
205 | depends on MACH_SMDK6410 | 206 | depends on MACH_SMDK6410 |
207 | depends on I2C=y | ||
206 | select MFD_WM831X | 208 | select MFD_WM831X |
207 | select MFD_WM831X_I2C | 209 | select MFD_WM831X_I2C |
208 | select REGULATOR | 210 | select REGULATOR |
@@ -269,8 +271,8 @@ config MACH_SMARTQ7 | |||
269 | 271 | ||
270 | config MACH_WLF_CRAGG_6410 | 272 | config MACH_WLF_CRAGG_6410 |
271 | bool "Wolfson Cragganmore 6410" | 273 | bool "Wolfson Cragganmore 6410" |
274 | depends on I2C=y | ||
272 | select CPU_S3C6410 | 275 | select CPU_S3C6410 |
273 | select I2C | ||
274 | select LEDS_GPIO_REGISTER | 276 | select LEDS_GPIO_REGISTER |
275 | select S3C64XX_DEV_SPI0 | 277 | select S3C64XX_DEV_SPI0 |
276 | select S3C64XX_SETUP_FB_24BPP | 278 | select S3C64XX_SETUP_FB_24BPP |
diff --git a/arch/arm/mach-s3c64xx/Makefile b/arch/arm/mach-s3c64xx/Makefile index 12f67b61ca5f..17f4b07ec763 100644 --- a/arch/arm/mach-s3c64xx/Makefile +++ b/arch/arm/mach-s3c64xx/Makefile | |||
@@ -16,7 +16,8 @@ obj-$(CONFIG_CPU_S3C6410) += s3c6410.o | |||
16 | 16 | ||
17 | # PM | 17 | # PM |
18 | 18 | ||
19 | obj-$(CONFIG_PM) += pm.o irq-pm.o sleep.o | 19 | obj-$(CONFIG_PM) += pm.o |
20 | obj-$(CONFIG_PM_SLEEP) += irq-pm.o sleep.o | ||
20 | obj-$(CONFIG_CPU_IDLE) += cpuidle.o | 21 | obj-$(CONFIG_CPU_IDLE) += cpuidle.o |
21 | 22 | ||
22 | # DMA support | 23 | # DMA support |
diff --git a/arch/arm/mach-s3c64xx/mach-smdk6410.c b/arch/arm/mach-s3c64xx/mach-smdk6410.c index 661eb662d051..b7447a92276e 100644 --- a/arch/arm/mach-s3c64xx/mach-smdk6410.c +++ b/arch/arm/mach-s3c64xx/mach-smdk6410.c | |||
@@ -209,7 +209,7 @@ static struct platform_device smdk6410_smsc911x = { | |||
209 | }; | 209 | }; |
210 | 210 | ||
211 | #ifdef CONFIG_REGULATOR | 211 | #ifdef CONFIG_REGULATOR |
212 | static struct regulator_consumer_supply smdk6410_b_pwr_5v_consumers[] __initdata = { | 212 | static struct regulator_consumer_supply smdk6410_b_pwr_5v_consumers[] = { |
213 | REGULATOR_SUPPLY("PVDD", "0-001b"), | 213 | REGULATOR_SUPPLY("PVDD", "0-001b"), |
214 | REGULATOR_SUPPLY("AVDD", "0-001b"), | 214 | REGULATOR_SUPPLY("AVDD", "0-001b"), |
215 | }; | 215 | }; |
diff --git a/arch/arm/mach-s3c64xx/pm.c b/arch/arm/mach-s3c64xx/pm.c index aaf7bea4032f..75b14e756383 100644 --- a/arch/arm/mach-s3c64xx/pm.c +++ b/arch/arm/mach-s3c64xx/pm.c | |||
@@ -194,6 +194,7 @@ void s3c_pm_debug_smdkled(u32 set, u32 clear) | |||
194 | } | 194 | } |
195 | #endif | 195 | #endif |
196 | 196 | ||
197 | #ifdef CONFIG_PM_SLEEP | ||
197 | static struct sleep_save core_save[] = { | 198 | static struct sleep_save core_save[] = { |
198 | SAVE_ITEM(S3C64XX_MEM0DRVCON), | 199 | SAVE_ITEM(S3C64XX_MEM0DRVCON), |
199 | SAVE_ITEM(S3C64XX_MEM1DRVCON), | 200 | SAVE_ITEM(S3C64XX_MEM1DRVCON), |
@@ -238,6 +239,7 @@ void s3c_pm_save_core(void) | |||
238 | s3c_pm_do_save(misc_save, ARRAY_SIZE(misc_save)); | 239 | s3c_pm_do_save(misc_save, ARRAY_SIZE(misc_save)); |
239 | s3c_pm_do_save(core_save, ARRAY_SIZE(core_save)); | 240 | s3c_pm_do_save(core_save, ARRAY_SIZE(core_save)); |
240 | } | 241 | } |
242 | #endif | ||
241 | 243 | ||
242 | /* since both s3c6400 and s3c6410 share the same sleep pm calls, we | 244 | /* since both s3c6400 and s3c6410 share the same sleep pm calls, we |
243 | * put the per-cpu code in here until any new cpu comes along and changes | 245 | * put the per-cpu code in here until any new cpu comes along and changes |
diff --git a/arch/arm/plat-samsung/include/plat/pm.h b/arch/arm/plat-samsung/include/plat/pm.h index e17d871b934c..7f415ce74591 100644 --- a/arch/arm/plat-samsung/include/plat/pm.h +++ b/arch/arm/plat-samsung/include/plat/pm.h | |||
@@ -43,7 +43,11 @@ extern unsigned long s3c_irqwake_eintmask; | |||
43 | 43 | ||
44 | /* IRQ masks for IRQs allowed to go to sleep (see irq.c) */ | 44 | /* IRQ masks for IRQs allowed to go to sleep (see irq.c) */ |
45 | extern unsigned long s3c_irqwake_intallow; | 45 | extern unsigned long s3c_irqwake_intallow; |
46 | #ifdef CONFIG_PM_SLEEP | ||
46 | extern unsigned long s3c_irqwake_eintallow; | 47 | extern unsigned long s3c_irqwake_eintallow; |
48 | #else | ||
49 | #define s3c_irqwake_eintallow 0 | ||
50 | #endif | ||
47 | 51 | ||
48 | /* per-cpu sleep functions */ | 52 | /* per-cpu sleep functions */ |
49 | 53 | ||
@@ -58,16 +62,20 @@ extern unsigned long s3c_pm_flags; | |||
58 | 62 | ||
59 | extern int s3c2410_cpu_suspend(unsigned long); | 63 | extern int s3c2410_cpu_suspend(unsigned long); |
60 | 64 | ||
61 | #ifdef CONFIG_SAMSUNG_PM | 65 | #ifdef CONFIG_PM_SLEEP |
62 | extern int s3c_irq_wake(struct irq_data *data, unsigned int state); | 66 | extern int s3c_irq_wake(struct irq_data *data, unsigned int state); |
63 | extern int s3c_irqext_wake(struct irq_data *data, unsigned int state); | ||
64 | extern void s3c_cpu_resume(void); | 67 | extern void s3c_cpu_resume(void); |
65 | #else | 68 | #else |
66 | #define s3c_irq_wake NULL | 69 | #define s3c_irq_wake NULL |
67 | #define s3c_irqext_wake NULL | ||
68 | #define s3c_cpu_resume NULL | 70 | #define s3c_cpu_resume NULL |
69 | #endif | 71 | #endif |
70 | 72 | ||
73 | #ifdef CONFIG_SAMSUNG_PM | ||
74 | extern int s3c_irqext_wake(struct irq_data *data, unsigned int state); | ||
75 | #else | ||
76 | #define s3c_irqext_wake NULL | ||
77 | #endif | ||
78 | |||
71 | #ifdef CONFIG_S3C_PM_DEBUG_LED_SMDK | 79 | #ifdef CONFIG_S3C_PM_DEBUG_LED_SMDK |
72 | /** | 80 | /** |
73 | * s3c_pm_debug_smdkled() - Debug PM suspend/resume via SMDK Board LEDs | 81 | * s3c_pm_debug_smdkled() - Debug PM suspend/resume via SMDK Board LEDs |
diff --git a/arch/arm/plat-samsung/pm-debug.c b/arch/arm/plat-samsung/pm-debug.c index 39609601f407..64e15da33b42 100644 --- a/arch/arm/plat-samsung/pm-debug.c +++ b/arch/arm/plat-samsung/pm-debug.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <plat/pm-common.h> | 23 | #include <plat/pm-common.h> |
24 | 24 | ||
25 | #ifdef CONFIG_SAMSUNG_ATAGS | 25 | #ifdef CONFIG_SAMSUNG_ATAGS |
26 | #include <plat/pm.h> | ||
26 | #include <mach/pm-core.h> | 27 | #include <mach/pm-core.h> |
27 | #else | 28 | #else |
28 | static inline void s3c_pm_debug_init_uart(void) {} | 29 | static inline void s3c_pm_debug_init_uart(void) {} |
diff --git a/arch/arm/plat-samsung/pm.c b/arch/arm/plat-samsung/pm.c index f8c0f9797dcf..82777c649774 100644 --- a/arch/arm/plat-samsung/pm.c +++ b/arch/arm/plat-samsung/pm.c | |||
@@ -65,26 +65,6 @@ int s3c_irqext_wake(struct irq_data *data, unsigned int state) | |||
65 | return 0; | 65 | return 0; |
66 | } | 66 | } |
67 | 67 | ||
68 | /* s3c2410_pm_show_resume_irqs | ||
69 | * | ||
70 | * print any IRQs asserted at resume time (ie, we woke from) | ||
71 | */ | ||
72 | static void __maybe_unused s3c_pm_show_resume_irqs(int start, | ||
73 | unsigned long which, | ||
74 | unsigned long mask) | ||
75 | { | ||
76 | int i; | ||
77 | |||
78 | which &= ~mask; | ||
79 | |||
80 | for (i = 0; i <= 31; i++) { | ||
81 | if (which & (1L<<i)) { | ||
82 | S3C_PMDBG("IRQ %d asserted at resume\n", start+i); | ||
83 | } | ||
84 | } | ||
85 | } | ||
86 | |||
87 | |||
88 | void (*pm_cpu_prep)(void); | 68 | void (*pm_cpu_prep)(void); |
89 | int (*pm_cpu_sleep)(unsigned long); | 69 | int (*pm_cpu_sleep)(unsigned long); |
90 | 70 | ||