From 55dc5819e4276a2e26bf0927f8a5152b68a85049 Mon Sep 17 00:00:00 2001 From: Clayton Craft Date: Sat, 3 Jul 2021 17:38:55 -0700 Subject: [PATCH] pine64-pinebookpro: add service for setting low power state on boot (MR 2306) This adds a very basic openrc runscript that sets the power state on /dev/nvme0 to level 2, which seems(?) to be the lowest operational power state based on some cursory internet searching (and querying the nvme drives I have, Samsung EVO and Pro) The drive path is hard coded, but could be made configurable later on. I basically wanted to get something in pmaports quickly, since this power stuff is a major source of instability for me and probably others too who add nvme drives to this device. --- .../device-pine64-pinebookpro/APKBUILD | 26 ++++++++++++++----- .../device-pine64-pinebookpro.post-install | 1 + .../device-pine64-pinebookpro.post-upgrade | 1 + .../nvme-powersave.initd | 26 +++++++++++++++++++ 4 files changed, 48 insertions(+), 6 deletions(-) create mode 120000 device/testing/device-pine64-pinebookpro/device-pine64-pinebookpro.post-upgrade create mode 100644 device/testing/device-pine64-pinebookpro/nvme-powersave.initd diff --git a/device/testing/device-pine64-pinebookpro/APKBUILD b/device/testing/device-pine64-pinebookpro/APKBUILD index 25584039e..3f863ab39 100644 --- a/device/testing/device-pine64-pinebookpro/APKBUILD +++ b/device/testing/device-pine64-pinebookpro/APKBUILD @@ -1,21 +1,29 @@ # Reference: pkgname=device-pine64-pinebookpro pkgdesc="PINE64 Pinebook Pro" -pkgver=1 -pkgrel=1 +pkgver=2 +pkgrel=0 url="https://postmarketos.org" license="MIT" arch="aarch64" options="!check !archcheck" -depends="postmarketos-base linux-postmarketos-rockchip u-boot-pinebookpro mesa-dri-gallium alsa-ucm-conf" +depends=" + alsa-ucm-conf + linux-postmarketos-rockchip + mesa-dri-gallium + nvme-cli + postmarketos-base + u-boot-pinebookpro + " makedepends="devicepkg-dev" subpackages="$pkgname-nonfree-firmware:nonfree_firmware" -install="$pkgname.post-install" +install="$pkgname.post-install $pkgname.post-upgrade" source=" deviceinfo extlinux.conf 10-pinebookpro.hwdb mem_sleep.conf + nvme-powersave.initd ucm/rockchip,es8316-codec.conf ucm/HiFi " @@ -43,6 +51,9 @@ package() { install -D -m644 "$srcdir"/HiFi \ "$pkgdir"/usr/share/alsa/ucm2/rockchip_es8316/HiFi + install -D -m755 "$srcdir"/nvme-powersave.initd \ + "$pkgdir"/etc/init.d/nvme-powersave + } nonfree_firmware() { @@ -51,9 +62,12 @@ nonfree_firmware() { mkdir "$subpkgdir" } -sha512sums="68a5ba3b3115fa3c0d202566326052118ade7e8e2f8b6804d09a15ed63ec33fa5098354fd79ad24ee166f901f1349f3f0e4af5efc3924c6424d63e6b31de7542 deviceinfo +sha512sums=" +68a5ba3b3115fa3c0d202566326052118ade7e8e2f8b6804d09a15ed63ec33fa5098354fd79ad24ee166f901f1349f3f0e4af5efc3924c6424d63e6b31de7542 deviceinfo cdcb1d36440c29d411691990c1170d9665b13b1c551b35825720d23b6ae40311ce91c3b2b7a089deaacd7a33c6febe4f81dc75d71dd4bed887291221d56dc1d2 extlinux.conf d3988fe83c54228d743f4a8c190e9530404a436a7fbc0b004bf20d3986b502d864717d8cc9c76812e599266bf84cb08f9a86e1bfd220875799c5a022aea588ec 10-pinebookpro.hwdb bcae155e24a151d3c098833680b83b6004a329962f115480d560ebe19257eab87286b8a4c194e456c067ca54fb53e59a5a16b022cea13c11135b0855145db563 mem_sleep.conf +2abfa31fa56028339efc6d2b6cb838f310990d7110ac4dd996bc4cfcf90f0a8770e70f28f77f7b6929d110e494bc33731302f16b9717729f991c2732be0731d5 nvme-powersave.initd 846384cab3e9581a03007cf4f39f8538315e804d1573903dd223d22d5ca0b6f260e348467aead5124689288fb7d2ec22c1e9aba8e89683efdbd33ddfe10de852 rockchip,es8316-codec.conf -558f08b56425e0ceeea8d4815eeb862a2b801ba1b26b4dc28f4d0ec991ed9dfef14113172a224191eb2de5d0b57a741e4c48f1307bda2a69595944bd58731be1 HiFi" +558f08b56425e0ceeea8d4815eeb862a2b801ba1b26b4dc28f4d0ec991ed9dfef14113172a224191eb2de5d0b57a741e4c48f1307bda2a69595944bd58731be1 HiFi +" diff --git a/device/testing/device-pine64-pinebookpro/device-pine64-pinebookpro.post-install b/device/testing/device-pine64-pinebookpro/device-pine64-pinebookpro.post-install index e1afcf54b..2883a3265 100644 --- a/device/testing/device-pine64-pinebookpro/device-pine64-pinebookpro.post-install +++ b/device/testing/device-pine64-pinebookpro/device-pine64-pinebookpro.post-install @@ -4,4 +4,5 @@ echo "UPDATING HWDB..." udevadm hwdb --update +rc-update add nvme-powersave boot rc-update add sysfsconf default diff --git a/device/testing/device-pine64-pinebookpro/device-pine64-pinebookpro.post-upgrade b/device/testing/device-pine64-pinebookpro/device-pine64-pinebookpro.post-upgrade new file mode 120000 index 000000000..d8270f62b --- /dev/null +++ b/device/testing/device-pine64-pinebookpro/device-pine64-pinebookpro.post-upgrade @@ -0,0 +1 @@ +device-pine64-pinebookpro.post-install \ No newline at end of file diff --git a/device/testing/device-pine64-pinebookpro/nvme-powersave.initd b/device/testing/device-pine64-pinebookpro/nvme-powersave.initd new file mode 100644 index 000000000..773554109 --- /dev/null +++ b/device/testing/device-pine64-pinebookpro/nvme-powersave.initd @@ -0,0 +1,26 @@ +#!/sbin/openrc-run +name="NVMe power state config" +description="Set NVMe power state to lowest operational level" + +nvme_command="/usr/sbin/nvme" +nvme_opts="-f 2 -v 2" + +depend() { + need localmount +} + +start() { + ebegin "Setting low power state for NVMe drive" + if [ ! -e /dev/nvme0 ]; then + einfo "No NVMe drive found at /dev/nvme0" + eend 0 + return 0 + fi + + if ! ${nvme_command} set-feature /dev/nvme0 ${nvme_opts}; then + eerror "Error setting PM state." + eend 1 + return 1 + fi + eend 0 +}