From nobody Tue Jan 11 14:25:22 2022 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 5C2C11946FB1; Tue, 11 Jan 2022 14:25:23 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4JYCdv0Q4Xz4gw4; Tue, 11 Jan 2022 14:25:23 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E1F781A85D; Tue, 11 Jan 2022 14:25:22 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 20BEPMpH092108; Tue, 11 Jan 2022 14:25:22 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 20BEPMnG092107; Tue, 11 Jan 2022 14:25:22 GMT (envelope-from git) Date: Tue, 11 Jan 2022 14:25:22 GMT Message-Id: <202201111425.20BEPMnG092107@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Andriy Gapon Subject: git: 94f4afd7720b - main - rk805 / rk808: re-add system poweroff support List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: avg X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 94f4afd7720b1b5c55bfb486aabb5fd98fc92678 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1641911123; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ohOAdkgabwHI3kYfSWxB3Iz2hiBv480WLFgcpeXShqY=; b=Ncgj8BIHdW7Fqjz4pDOQ4EynPXw6sm2X2GlCBI8J/4Bp9JmGBHDTBlFptA5ElWyPAW1N/h dTNqlKKvqYGgAz2I42yQfrs8XKQ4eXgKAH+7R6G+2/DKah5C6iuTRffkStkI2WyfzPhn71 sYJV9Qf9VgMTgI72r/OxgcCjX1G8v6GwKSc0xFDdP5dbeKk9oebF8gFfldXgVnfHekgYCg tCr1J4w6/tHo7PFt+SJ+YmT8/d/AQS5VwGi3YyhXScSg8nh7Hx27cQxv6pMtRlm1XubREz /wcpDdTTdW81vdDbbr40NeOzuxNrUCrrms5w3ljWlQCilTZYdL+cz7adrBfb3w== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1641911123; a=rsa-sha256; cv=none; b=leaQ3eUFKCClophTzVYFE5u2aBtBxoFKTUC0IeTEHE1ardkNIkm1tV+yWLDFRPoWcwLwAw SogEzaNMq4HuFM+lU4mHFuEKqdApj3XwYFNpipXKeWZnyhCoN4NoKeuLUWU0d/VQJO0Fga koeuiYVnTSnbR1mfa/CScisqasK5FLPNAcBkYBUNxCVdhl6rTXMC9m8mB9IQhVQZq7Lb1z cDA4K3rtkEdj9wfL0u5BZnER9sIwS4H450ev00J5Mc685crszD4pfUgdud0GMBMmfJVwNW m/hZSSxxEExAvr6spbR1Xik1xeVojFBzsrAXnqzUIavJopKZ+1Lyc+VJcSFttA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by avg: URL: https://cgit.FreeBSD.org/src/commit/?id=94f4afd7720b1b5c55bfb486aabb5fd98fc92678 commit 94f4afd7720b1b5c55bfb486aabb5fd98fc92678 Author: Andriy Gapon AuthorDate: 2022-01-11 14:22:36 +0000 Commit: Andriy Gapon CommitDate: 2022-01-11 14:22:36 +0000 rk805 / rk808: re-add system poweroff support This was lost by accident in 98c60dc31f. Reviewed by: manu MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D33844 --- sys/dev/iicbus/pmic/rockchip/rk805.c | 2 ++ sys/dev/iicbus/pmic/rockchip/rk808.c | 2 ++ sys/dev/iicbus/pmic/rockchip/rk808reg.h | 4 ++++ sys/dev/iicbus/pmic/rockchip/rk8xx.c | 38 ++++++++++++++++++++++++++++++++- sys/dev/iicbus/pmic/rockchip/rk8xx.h | 6 ++++++ 5 files changed, 51 insertions(+), 1 deletion(-) diff --git a/sys/dev/iicbus/pmic/rockchip/rk805.c b/sys/dev/iicbus/pmic/rockchip/rk805.c index e8752a3a7bef..b3182d4909a6 100644 --- a/sys/dev/iicbus/pmic/rockchip/rk805.c +++ b/sys/dev/iicbus/pmic/rockchip/rk805.c @@ -176,6 +176,8 @@ rk805_attach(device_t dev) sc->rtc_regs.ctrl_ampm_mask = RK805_RTC_AMPM_MODE; sc->rtc_regs.ctrl_gettime_mask = RK805_RTC_GET_TIME; sc->rtc_regs.ctrl_readsel_mask = RK805_RTC_READSEL; + sc->dev_ctrl.dev_ctrl_reg = RK805_DEV_CTRL; + sc->dev_ctrl.pwr_off_mask = RK805_DEV_CTRL_OFF; return (rk8xx_attach(sc)); } diff --git a/sys/dev/iicbus/pmic/rockchip/rk808.c b/sys/dev/iicbus/pmic/rockchip/rk808.c index 34d1884db088..b9214fc74b61 100644 --- a/sys/dev/iicbus/pmic/rockchip/rk808.c +++ b/sys/dev/iicbus/pmic/rockchip/rk808.c @@ -251,6 +251,8 @@ rk808_attach(device_t dev) sc->rtc_regs.ctrl_ampm_mask = RK808_RTC_AMPM_MODE; sc->rtc_regs.ctrl_gettime_mask = RK808_RTC_GET_TIME; sc->rtc_regs.ctrl_readsel_mask = RK808_RTC_READSEL; + sc->dev_ctrl.dev_ctrl_reg = RK808_DEV_CTRL; + sc->dev_ctrl.pwr_off_mask = RK808_DEV_CTRL_OFF; return (rk8xx_attach(sc)); } diff --git a/sys/dev/iicbus/pmic/rockchip/rk808reg.h b/sys/dev/iicbus/pmic/rockchip/rk808reg.h index 054cac45f1d6..444b1fded12e 100644 --- a/sys/dev/iicbus/pmic/rockchip/rk808reg.h +++ b/sys/dev/iicbus/pmic/rockchip/rk808reg.h @@ -107,6 +107,10 @@ #define RK808_LDO8_ON_VSEL 0x49 #define RK808_LDO8_SLEEP_VSEL 0x4A +#define RK808_DEV_CTRL 0x4B +#define RK808_DEV_CTRL_OFF (1 << 0) +#define RK808_DEV_CTRL_SLP (1 << 1) + enum rk808_regulator { RK808_BUCK1 = 0, RK808_BUCK2, diff --git a/sys/dev/iicbus/pmic/rockchip/rk8xx.c b/sys/dev/iicbus/pmic/rockchip/rk8xx.c index 46f9ed24ca39..0e6839ff0152 100644 --- a/sys/dev/iicbus/pmic/rockchip/rk8xx.c +++ b/sys/dev/iicbus/pmic/rockchip/rk8xx.c @@ -31,8 +31,10 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include +#include #include #include #include @@ -76,7 +78,6 @@ rk8xx_start(void *pdev) dev = pdev; sc = device_get_softc(dev); - sc->dev = dev; /* No version register in RK808 */ if (bootverbose && sc->type == RK805) { @@ -101,6 +102,30 @@ rk8xx_start(void *pdev) config_intrhook_disestablish(&sc->intr_hook); } +static void +rk8xx_poweroff(void *arg, int howto) +{ + struct rk8xx_softc *sc = arg; + int error; + uint8_t val; + + if ((howto & RB_POWEROFF) == 0) + return; + + device_printf(sc->dev, "Powering off...\n"); + error = rk8xx_read(sc->dev, sc->dev_ctrl.dev_ctrl_reg, &val, 1); + if (error == 0) { + val |= sc->dev_ctrl.pwr_off_mask; + error = rk8xx_write(sc->dev, sc->dev_ctrl.dev_ctrl_reg, + &val, 1); + + /* Wait a bit for the command to take effect. */ + if (error == 0) + DELAY(100); + } + device_printf(sc->dev, "Power off failed\n"); +} + int rk8xx_attach(struct rk8xx_softc *sc) { @@ -117,6 +142,17 @@ rk8xx_attach(struct rk8xx_softc *sc) rk8xx_attach_regulators(sc); + if (OF_hasprop(ofw_bus_get_node(sc->dev), + "rockchip,system-power-controller")) { + /* + * The priority is chosen to override PSCI and EFI shutdown + * methods as those two just hang without powering off on Rock64 + * at least. + */ + EVENTHANDLER_REGISTER(shutdown_final, rk8xx_poweroff, sc, + SHUTDOWN_PRI_LAST - 2); + } + return (0); } diff --git a/sys/dev/iicbus/pmic/rockchip/rk8xx.h b/sys/dev/iicbus/pmic/rockchip/rk8xx.h index 738209f5871e..739b57c5f0bb 100644 --- a/sys/dev/iicbus/pmic/rockchip/rk8xx.h +++ b/sys/dev/iicbus/pmic/rockchip/rk8xx.h @@ -85,6 +85,11 @@ struct rk8xx_rtc_reg { uint8_t ctrl_readsel_mask; }; +struct rk8xx_dev_ctrl { + uint8_t dev_ctrl_reg; + uint8_t pwr_off_mask; +}; + struct rk8xx_softc { device_t dev; struct mtx mtx; @@ -98,6 +103,7 @@ struct rk8xx_softc { int nregs; struct rk8xx_rtc_reg rtc_regs; + struct rk8xx_dev_ctrl dev_ctrl; }; int rk8xx_read(device_t dev, uint8_t reg, uint8_t *data, uint8_t size);