FSL P5020/Cyrus+ Board: Poweroff and Restart Support
Christian Zigotzky
chzigotzky at xenosoft.de
Sat Mar 21 23:50:22 AEDT 2020
Hello,
We would like to add poweroff and restart support for the Cyrus+ board
[1] [2] to the mainline vanilla kernel.
There is a patch for adding poweroff and restart support. (attached)
It works but I am not sure if it is good enough for the mainline vanilla
kernel.
Please post some suggestions and comments about this patch.
Thanks,
Christian
[1] http://wiki.amiga.org/index.php?title=X5000
[2] https://www.amigaos.net/hardware/133/amigaone-x5000
-------------- next part --------------
diff -rupN a/arch/powerpc/boot/dts/fsl/cyrus_p5020.dts b/arch/powerpc/boot/dts/fsl/cyrus_p5020.dts
--- a/arch/powerpc/boot/dts/fsl/cyrus_p5020.dts 2020-02-10 01:08:48.000000000 +0100
+++ b/arch/powerpc/boot/dts/fsl/cyrus_p5020.dts 2020-02-10 08:49:47.953680947 +0100
@@ -146,6 +146,25 @@
0 0x00010000>;
};
};
+
+ gpio-poweroff {
+ compatible = "gpio-poweroff";
+ gpios = <&gpio0 3 1>;
+ };
+
+ gpio-restart {
+ compatible = "gpio-restart";
+ gpios = <&gpio0 2 1>;
+ };
+
+ leds {
+ compatible = "gpio-leds";
+ hdd {
+ label = "Disk activity";
+ gpios = <&gpio0 5 0>;
+ linux,default-trigger = "disk-activity";
+ };
+ };
};
/include/ "p5020si-post.dtsi"
diff -rupN a/arch/powerpc/platforms/85xx/corenet_generic.c b/arch/powerpc/platforms/85xx/corenet_generic.c
--- a/arch/powerpc/platforms/85xx/corenet_generic.c 2020-02-10 01:08:48.000000000 +0100
+++ b/arch/powerpc/platforms/85xx/corenet_generic.c 2020-02-10 08:49:47.953680947 +0100
@@ -46,6 +46,16 @@ void __init corenet_gen_pic_init(void)
mpic_init(mpic);
}
+/* If someone has registered a poweroff callback, invoke it */
+static void __noreturn corenet_generic_halt(void)
+{
+ if (pm_power_off)
+ pm_power_off();
+
+ /* Should not return */
+ for(;;);
+}
+
/*
* Setup the architecture
*/
@@ -99,6 +109,15 @@ static const struct of_device_id of_devi
{
.name = "handles",
},
+ {
+ .name = "gpio-poweroff",
+ },
+ {
+ .name = "gpio-restart",
+ },
+ {
+ .name = "leds",
+ },
{}
};
@@ -149,6 +168,8 @@ static int __init corenet_generic_probe(
extern struct smp_ops_t smp_85xx_ops;
#endif
+ ppc_md.halt = corenet_generic_halt;
+
if (of_device_compatible_match(of_root, boards))
return 1;
More information about the Linuxppc-dev
mailing list