Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
8418804e
Commit
8418804e
authored
Nov 05, 2014
by
Michael Ellerman
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'topic/pm-power-off' into next
parents
8a97577a
9178ba29
Changes
21
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
66 additions
and
58 deletions
+66
-58
arch/powerpc/include/asm/machdep.h
arch/powerpc/include/asm/machdep.h
+0
-1
arch/powerpc/kernel/setup-common.c
arch/powerpc/kernel/setup-common.c
+3
-3
arch/powerpc/platforms/44x/ppc476.c
arch/powerpc/platforms/44x/ppc476.c
+1
-1
arch/powerpc/platforms/52xx/efika.c
arch/powerpc/platforms/52xx/efika.c
+2
-1
arch/powerpc/platforms/83xx/mcu_mpc8349emitx.c
arch/powerpc/platforms/83xx/mcu_mpc8349emitx.c
+4
-4
arch/powerpc/platforms/85xx/corenet_generic.c
arch/powerpc/platforms/85xx/corenet_generic.c
+1
-1
arch/powerpc/platforms/85xx/sgy_cts1000.c
arch/powerpc/platforms/85xx/sgy_cts1000.c
+2
-2
arch/powerpc/platforms/cell/celleb_setup.c
arch/powerpc/platforms/cell/celleb_setup.c
+2
-2
arch/powerpc/platforms/cell/qpace_setup.c
arch/powerpc/platforms/cell/qpace_setup.c
+1
-1
arch/powerpc/platforms/cell/setup.c
arch/powerpc/platforms/cell/setup.c
+1
-1
arch/powerpc/platforms/chrp/setup.c
arch/powerpc/platforms/chrp/setup.c
+2
-1
arch/powerpc/platforms/embedded6xx/gamecube.c
arch/powerpc/platforms/embedded6xx/gamecube.c
+2
-1
arch/powerpc/platforms/embedded6xx/linkstation.c
arch/powerpc/platforms/embedded6xx/linkstation.c
+3
-1
arch/powerpc/platforms/embedded6xx/wii.c
arch/powerpc/platforms/embedded6xx/wii.c
+2
-1
arch/powerpc/platforms/maple/setup.c
arch/powerpc/platforms/maple/setup.c
+2
-2
arch/powerpc/platforms/powermac/setup.c
arch/powerpc/platforms/powermac/setup.c
+2
-1
arch/powerpc/platforms/powernv/setup.c
arch/powerpc/platforms/powernv/setup.c
+2
-2
arch/powerpc/platforms/ps3/setup.c
arch/powerpc/platforms/ps3/setup.c
+1
-1
arch/powerpc/platforms/pseries/setup.c
arch/powerpc/platforms/pseries/setup.c
+30
-29
arch/powerpc/sysdev/fsl_soc.c
arch/powerpc/sysdev/fsl_soc.c
+1
-1
arch/powerpc/xmon/xmon.c
arch/powerpc/xmon/xmon.c
+2
-1
No files found.
arch/powerpc/include/asm/machdep.h
View file @
8418804e
...
...
@@ -142,7 +142,6 @@ struct machdep_calls {
#endif
void
(
*
restart
)(
char
*
cmd
);
void
(
*
power_off
)(
void
);
void
(
*
halt
)(
void
);
void
(
*
panic
)(
char
*
str
);
void
(
*
cpu_die
)(
void
);
...
...
arch/powerpc/kernel/setup-common.c
View file @
8418804e
...
...
@@ -139,8 +139,8 @@ void machine_restart(char *cmd)
void
machine_power_off
(
void
)
{
machine_shutdown
();
if
(
p
pc_md
.
power_off
)
p
pc_md
.
power_off
();
if
(
p
m_
power_off
)
p
m_
power_off
();
#ifdef CONFIG_SMP
smp_send_stop
();
#endif
...
...
@@ -151,7 +151,7 @@ void machine_power_off(void)
/* Used by the G5 thermal driver */
EXPORT_SYMBOL_GPL
(
machine_power_off
);
void
(
*
pm_power_off
)(
void
)
=
machine_power_off
;
void
(
*
pm_power_off
)(
void
);
EXPORT_SYMBOL_GPL
(
pm_power_off
);
void
machine_halt
(
void
)
...
...
arch/powerpc/platforms/44x/ppc476.c
View file @
8418804e
...
...
@@ -94,7 +94,7 @@ static int avr_probe(struct i2c_client *client,
{
avr_i2c_client
=
client
;
ppc_md
.
restart
=
avr_reset_system
;
p
pc_md
.
power_off
=
avr_power_off_system
;
p
m_
power_off
=
avr_power_off_system
;
return
0
;
}
...
...
arch/powerpc/platforms/52xx/efika.c
View file @
8418804e
...
...
@@ -212,6 +212,8 @@ static int __init efika_probe(void)
DMA_MODE_READ
=
0x44
;
DMA_MODE_WRITE
=
0x48
;
pm_power_off
=
rtas_power_off
;
return
1
;
}
...
...
@@ -225,7 +227,6 @@ define_machine(efika)
.
init_IRQ
=
mpc52xx_init_irq
,
.
get_irq
=
mpc52xx_get_irq
,
.
restart
=
rtas_restart
,
.
power_off
=
rtas_power_off
,
.
halt
=
rtas_halt
,
.
set_rtc_time
=
rtas_set_rtc_time
,
.
get_rtc_time
=
rtas_get_rtc_time
,
...
...
arch/powerpc/platforms/83xx/mcu_mpc8349emitx.c
View file @
8418804e
...
...
@@ -167,10 +167,10 @@ static int mcu_probe(struct i2c_client *client, const struct i2c_device_id *id)
if
(
ret
)
goto
err
;
/* XXX: this is potentially racy, but there is no lock for p
pc_md
*/
if
(
!
p
pc_md
.
power_off
)
{
/* XXX: this is potentially racy, but there is no lock for p
m_power_off
*/
if
(
!
p
m_
power_off
)
{
glob_mcu
=
mcu
;
p
pc_md
.
power_off
=
mcu_power_off
;
p
m_
power_off
=
mcu_power_off
;
dev_info
(
&
client
->
dev
,
"will provide power-off service
\n
"
);
}
...
...
@@ -197,7 +197,7 @@ static int mcu_remove(struct i2c_client *client)
device_remove_file
(
&
client
->
dev
,
&
dev_attr_status
);
if
(
glob_mcu
==
mcu
)
{
p
pc_md
.
power_off
=
NULL
;
p
m_
power_off
=
NULL
;
glob_mcu
=
NULL
;
}
...
...
arch/powerpc/platforms/85xx/corenet_generic.c
View file @
8418804e
...
...
@@ -170,7 +170,7 @@ static int __init corenet_generic_probe(void)
ppc_md
.
get_irq
=
ehv_pic_get_irq
;
ppc_md
.
restart
=
fsl_hv_restart
;
p
pc_md
.
power_off
=
fsl_hv_halt
;
p
m_
power_off
=
fsl_hv_halt
;
ppc_md
.
halt
=
fsl_hv_halt
;
#ifdef CONFIG_SMP
/*
...
...
arch/powerpc/platforms/85xx/sgy_cts1000.c
View file @
8418804e
...
...
@@ -120,7 +120,7 @@ static int gpio_halt_probe(struct platform_device *pdev)
/* Register our halt function */
ppc_md
.
halt
=
gpio_halt_cb
;
p
pc_md
.
power_off
=
gpio_halt_cb
;
p
m_
power_off
=
gpio_halt_cb
;
printk
(
KERN_INFO
"gpio-halt: registered GPIO %d (%d trigger, %d"
" irq).
\n
"
,
gpio
,
trigger
,
irq
);
...
...
@@ -137,7 +137,7 @@ static int gpio_halt_remove(struct platform_device *pdev)
free_irq
(
irq
,
halt_node
);
ppc_md
.
halt
=
NULL
;
p
pc_md
.
power_off
=
NULL
;
p
m_
power_off
=
NULL
;
gpio_free
(
gpio
);
...
...
arch/powerpc/platforms/cell/celleb_setup.c
View file @
8418804e
...
...
@@ -142,6 +142,7 @@ static int __init celleb_probe_beat(void)
powerpc_firmware_features
|=
FW_FEATURE_CELLEB_ALWAYS
|
FW_FEATURE_BEAT
|
FW_FEATURE_LPAR
;
hpte_init_beat_v3
();
pm_power_off
=
beat_power_off
;
return
1
;
}
...
...
@@ -190,6 +191,7 @@ static int __init celleb_probe_native(void)
powerpc_firmware_features
|=
FW_FEATURE_CELLEB_ALWAYS
;
hpte_init_native
();
pm_power_off
=
rtas_power_off
;
return
1
;
}
...
...
@@ -204,7 +206,6 @@ define_machine(celleb_beat) {
.
setup_arch
=
celleb_setup_arch_beat
,
.
show_cpuinfo
=
celleb_show_cpuinfo
,
.
restart
=
beat_restart
,
.
power_off
=
beat_power_off
,
.
halt
=
beat_halt
,
.
get_rtc_time
=
beat_get_rtc_time
,
.
set_rtc_time
=
beat_set_rtc_time
,
...
...
@@ -230,7 +231,6 @@ define_machine(celleb_native) {
.
setup_arch
=
celleb_setup_arch_native
,
.
show_cpuinfo
=
celleb_show_cpuinfo
,
.
restart
=
rtas_restart
,
.
power_off
=
rtas_power_off
,
.
halt
=
rtas_halt
,
.
get_boot_time
=
rtas_get_boot_time
,
.
get_rtc_time
=
rtas_get_rtc_time
,
...
...
arch/powerpc/platforms/cell/qpace_setup.c
View file @
8418804e
...
...
@@ -127,6 +127,7 @@ static int __init qpace_probe(void)
return
0
;
hpte_init_native
();
pm_power_off
=
rtas_power_off
;
return
1
;
}
...
...
@@ -137,7 +138,6 @@ define_machine(qpace) {
.
setup_arch
=
qpace_setup_arch
,
.
show_cpuinfo
=
qpace_show_cpuinfo
,
.
restart
=
rtas_restart
,
.
power_off
=
rtas_power_off
,
.
halt
=
rtas_halt
,
.
get_boot_time
=
rtas_get_boot_time
,
.
get_rtc_time
=
rtas_get_rtc_time
,
...
...
arch/powerpc/platforms/cell/setup.c
View file @
8418804e
...
...
@@ -259,6 +259,7 @@ static int __init cell_probe(void)
return
0
;
hpte_init_native
();
pm_power_off
=
rtas_power_off
;
return
1
;
}
...
...
@@ -269,7 +270,6 @@ define_machine(cell) {
.
setup_arch
=
cell_setup_arch
,
.
show_cpuinfo
=
cell_show_cpuinfo
,
.
restart
=
rtas_restart
,
.
power_off
=
rtas_power_off
,
.
halt
=
rtas_halt
,
.
get_boot_time
=
rtas_get_boot_time
,
.
get_rtc_time
=
rtas_get_rtc_time
,
...
...
arch/powerpc/platforms/chrp/setup.c
View file @
8418804e
...
...
@@ -585,6 +585,8 @@ static int __init chrp_probe(void)
DMA_MODE_READ
=
0x44
;
DMA_MODE_WRITE
=
0x48
;
pm_power_off
=
rtas_power_off
;
return
1
;
}
...
...
@@ -597,7 +599,6 @@ define_machine(chrp) {
.
show_cpuinfo
=
chrp_show_cpuinfo
,
.
init_IRQ
=
chrp_init_IRQ
,
.
restart
=
rtas_restart
,
.
power_off
=
rtas_power_off
,
.
halt
=
rtas_halt
,
.
time_init
=
chrp_time_init
,
.
set_rtc_time
=
chrp_set_rtc_time
,
...
...
arch/powerpc/platforms/embedded6xx/gamecube.c
View file @
8418804e
...
...
@@ -67,6 +67,8 @@ static int __init gamecube_probe(void)
if
(
!
of_flat_dt_is_compatible
(
dt_root
,
"nintendo,gamecube"
))
return
0
;
pm_power_off
=
gamecube_power_off
;
return
1
;
}
...
...
@@ -80,7 +82,6 @@ define_machine(gamecube) {
.
probe
=
gamecube_probe
,
.
init_early
=
gamecube_init_early
,
.
restart
=
gamecube_restart
,
.
power_off
=
gamecube_power_off
,
.
halt
=
gamecube_halt
,
.
init_IRQ
=
flipper_pic_probe
,
.
get_irq
=
flipper_pic_get_irq
,
...
...
arch/powerpc/platforms/embedded6xx/linkstation.c
View file @
8418804e
...
...
@@ -147,6 +147,9 @@ static int __init linkstation_probe(void)
if
(
!
of_flat_dt_is_compatible
(
root
,
"linkstation"
))
return
0
;
pm_power_off
=
linkstation_power_off
;
return
1
;
}
...
...
@@ -158,7 +161,6 @@ define_machine(linkstation){
.
show_cpuinfo
=
linkstation_show_cpuinfo
,
.
get_irq
=
mpic_get_irq
,
.
restart
=
linkstation_restart
,
.
power_off
=
linkstation_power_off
,
.
halt
=
linkstation_halt
,
.
calibrate_decr
=
generic_calibrate_decr
,
};
arch/powerpc/platforms/embedded6xx/wii.c
View file @
8418804e
...
...
@@ -211,6 +211,8 @@ static int __init wii_probe(void)
if
(
!
of_flat_dt_is_compatible
(
dt_root
,
"nintendo,wii"
))
return
0
;
pm_power_off
=
wii_power_off
;
return
1
;
}
...
...
@@ -226,7 +228,6 @@ define_machine(wii) {
.
init_early
=
wii_init_early
,
.
setup_arch
=
wii_setup_arch
,
.
restart
=
wii_restart
,
.
power_off
=
wii_power_off
,
.
halt
=
wii_halt
,
.
init_IRQ
=
wii_pic_probe
,
.
get_irq
=
flipper_pic_get_irq
,
...
...
arch/powerpc/platforms/maple/setup.c
View file @
8418804e
...
...
@@ -169,7 +169,7 @@ static void __init maple_use_rtas_reboot_and_halt_if_present(void)
if
(
rtas_service_present
(
"system-reboot"
)
&&
rtas_service_present
(
"power-off"
))
{
ppc_md
.
restart
=
rtas_restart
;
p
pc_md
.
power_off
=
rtas_power_off
;
p
m_
power_off
=
rtas_power_off
;
ppc_md
.
halt
=
rtas_halt
;
}
}
...
...
@@ -312,6 +312,7 @@ static int __init maple_probe(void)
alloc_dart_table
();
hpte_init_native
();
pm_power_off
=
maple_power_off
;
return
1
;
}
...
...
@@ -325,7 +326,6 @@ define_machine(maple) {
.
pci_irq_fixup
=
maple_pci_irq_fixup
,
.
pci_get_legacy_ide_irq
=
maple_pci_get_legacy_ide_irq
,
.
restart
=
maple_restart
,
.
power_off
=
maple_power_off
,
.
halt
=
maple_halt
,
.
get_boot_time
=
maple_get_boot_time
,
.
set_rtc_time
=
maple_set_rtc_time
,
...
...
arch/powerpc/platforms/powermac/setup.c
View file @
8418804e
...
...
@@ -632,6 +632,8 @@ static int __init pmac_probe(void)
smu_cmdbuf_abs
=
memblock_alloc_base
(
4096
,
4096
,
0x80000000UL
);
#endif
/* CONFIG_PMAC_SMU */
pm_power_off
=
pmac_power_off
;
return
1
;
}
...
...
@@ -663,7 +665,6 @@ define_machine(powermac) {
.
get_irq
=
NULL
,
/* changed later */
.
pci_irq_fixup
=
pmac_pci_irq_fixup
,
.
restart
=
pmac_restart
,
.
power_off
=
pmac_power_off
,
.
halt
=
pmac_halt
,
.
time_init
=
pmac_time_init
,
.
get_boot_time
=
pmac_get_boot_time
,
...
...
arch/powerpc/platforms/powernv/setup.c
View file @
8418804e
...
...
@@ -268,7 +268,7 @@ static void __init pnv_setup_machdep_opal(void)
ppc_md
.
get_rtc_time
=
opal_get_rtc_time
;
ppc_md
.
set_rtc_time
=
opal_set_rtc_time
;
ppc_md
.
restart
=
pnv_restart
;
p
pc_md
.
power_off
=
pnv_power_off
;
p
m_
power_off
=
pnv_power_off
;
ppc_md
.
halt
=
pnv_halt
;
ppc_md
.
machine_check_exception
=
opal_machine_check
;
ppc_md
.
mce_check_early_recovery
=
opal_mce_check_early_recovery
;
...
...
@@ -285,7 +285,7 @@ static void __init pnv_setup_machdep_rtas(void)
ppc_md
.
set_rtc_time
=
rtas_set_rtc_time
;
}
ppc_md
.
restart
=
rtas_restart
;
p
pc_md
.
power_off
=
rtas_power_off
;
p
m_
power_off
=
rtas_power_off
;
ppc_md
.
halt
=
rtas_halt
;
}
#endif
/* CONFIG_PPC_POWERNV_RTAS */
...
...
arch/powerpc/platforms/ps3/setup.c
View file @
8418804e
...
...
@@ -248,6 +248,7 @@ static int __init ps3_probe(void)
ps3_mm_init
();
ps3_mm_vas_create
(
&
htab_size
);
ps3_hpte_init
(
htab_size
);
pm_power_off
=
ps3_power_off
;
DBG
(
" <- %s:%d
\n
"
,
__func__
,
__LINE__
);
return
1
;
...
...
@@ -278,7 +279,6 @@ define_machine(ps3) {
.
calibrate_decr
=
ps3_calibrate_decr
,
.
progress
=
ps3_progress
,
.
restart
=
ps3_restart
,
.
power_off
=
ps3_power_off
,
.
halt
=
ps3_halt
,
#if defined(CONFIG_KEXEC)
.
kexec_cpu_down
=
ps3_kexec_cpu_down
,
...
...
arch/powerpc/platforms/pseries/setup.c
View file @
8418804e
...
...
@@ -659,6 +659,34 @@ static void __init pSeries_init_early(void)
pr_debug
(
" <- pSeries_init_early()
\n
"
);
}
/**
* pseries_power_off - tell firmware about how to power off the system.
*
* This function calls either the power-off rtas token in normal cases
* or the ibm,power-off-ups token (if present & requested) in case of
* a power failure. If power-off token is used, power on will only be
* possible with power button press. If ibm,power-off-ups token is used
* it will allow auto poweron after power is restored.
*/
static
void
pseries_power_off
(
void
)
{
int
rc
;
int
rtas_poweroff_ups_token
=
rtas_token
(
"ibm,power-off-ups"
);
if
(
rtas_flash_term_hook
)
rtas_flash_term_hook
(
SYS_POWER_OFF
);
if
(
rtas_poweron_auto
==
0
||
rtas_poweroff_ups_token
==
RTAS_UNKNOWN_SERVICE
)
{
rc
=
rtas_call
(
rtas_token
(
"power-off"
),
2
,
1
,
NULL
,
-
1
,
-
1
);
printk
(
KERN_INFO
"RTAS power-off returned %d
\n
"
,
rc
);
}
else
{
rc
=
rtas_call
(
rtas_poweroff_ups_token
,
0
,
1
,
NULL
);
printk
(
KERN_INFO
"RTAS ibm,power-off-ups returned %d
\n
"
,
rc
);
}
for
(;;);
}
/*
* Called very early, MMU is off, device-tree isn't unflattened
*/
...
...
@@ -741,6 +769,8 @@ static int __init pSeries_probe(void)
else
hpte_init_native
();
pm_power_off
=
pseries_power_off
;
pr_debug
(
"Machine is%s LPAR !
\n
"
,
(
powerpc_firmware_features
&
FW_FEATURE_LPAR
)
?
""
:
" not"
);
...
...
@@ -754,34 +784,6 @@ static int pSeries_pci_probe_mode(struct pci_bus *bus)
return
PCI_PROBE_NORMAL
;
}
/**
* pSeries_power_off - tell firmware about how to power off the system.
*
* This function calls either the power-off rtas token in normal cases
* or the ibm,power-off-ups token (if present & requested) in case of
* a power failure. If power-off token is used, power on will only be
* possible with power button press. If ibm,power-off-ups token is used
* it will allow auto poweron after power is restored.
*/
static
void
pSeries_power_off
(
void
)
{
int
rc
;
int
rtas_poweroff_ups_token
=
rtas_token
(
"ibm,power-off-ups"
);
if
(
rtas_flash_term_hook
)
rtas_flash_term_hook
(
SYS_POWER_OFF
);
if
(
rtas_poweron_auto
==
0
||
rtas_poweroff_ups_token
==
RTAS_UNKNOWN_SERVICE
)
{
rc
=
rtas_call
(
rtas_token
(
"power-off"
),
2
,
1
,
NULL
,
-
1
,
-
1
);
printk
(
KERN_INFO
"RTAS power-off returned %d
\n
"
,
rc
);
}
else
{
rc
=
rtas_call
(
rtas_poweroff_ups_token
,
0
,
1
,
NULL
);
printk
(
KERN_INFO
"RTAS ibm,power-off-ups returned %d
\n
"
,
rc
);
}
for
(;;);
}
#ifndef CONFIG_PCI
void
pSeries_final_fixup
(
void
)
{
}
#endif
...
...
@@ -796,7 +798,6 @@ define_machine(pseries) {
.
pcibios_fixup
=
pSeries_final_fixup
,
.
pci_probe_mode
=
pSeries_pci_probe_mode
,
.
restart
=
rtas_restart
,
.
power_off
=
pSeries_power_off
,
.
halt
=
rtas_halt
,
.
panic
=
rtas_os_term
,
.
get_boot_time
=
rtas_get_boot_time
,
...
...
arch/powerpc/sysdev/fsl_soc.c
View file @
8418804e
...
...
@@ -238,7 +238,7 @@ void fsl_hv_restart(char *cmd)
/*
* Halt the current partition
*
* This function should be assigned to the p
pc_md.
power_off and ppc_md.halt
* This function should be assigned to the p
m_
power_off and ppc_md.halt
* function pointers, to shut down the partition when we're running under
* the Freescale hypervisor.
*/
...
...
arch/powerpc/xmon/xmon.c
View file @
8418804e
...
...
@@ -981,7 +981,8 @@ static void bootcmds(void)
else
if
(
cmd
==
'h'
)
ppc_md
.
halt
();
else
if
(
cmd
==
'p'
)
ppc_md
.
power_off
();
if
(
pm_power_off
)
pm_power_off
();
}
static
int
cpu_cmd
(
void
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment