Module Name: src
Committed By: jmcneill
Date: Sun Nov 24 10:27:37 UTC 2019
Modified Files:
src/sys/arch/arm/sunxi: sun50i_a64_ccu.c sunxi_dwhdmi.c
sunxi_platform.c
Log Message:
Try to avoid changing hardware settings when the "nomodeset" kernel arg
is present.
To generate a diff of this commit:
cvs rdiff -u -r1.19 -r1.20 src/sys/arch/arm/sunxi/sun50i_a64_ccu.c
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/sunxi/sunxi_dwhdmi.c
cvs rdiff -u -r1.37 -r1.38 src/sys/arch/arm/sunxi/sunxi_platform.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/arm/sunxi/sun50i_a64_ccu.c
diff -u src/sys/arch/arm/sunxi/sun50i_a64_ccu.c:1.19 src/sys/arch/arm/sunxi/sun50i_a64_ccu.c:1.20
--- src/sys/arch/arm/sunxi/sun50i_a64_ccu.c:1.19 Sat Nov 23 22:46:53 2019
+++ src/sys/arch/arm/sunxi/sun50i_a64_ccu.c Sun Nov 24 10:27:37 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: sun50i_a64_ccu.c,v 1.19 2019/11/23 22:46:53 jmcneill Exp $ */
+/* $NetBSD: sun50i_a64_ccu.c,v 1.20 2019/11/24 10:27:37 jmcneill Exp $ */
/*-
* Copyright (c) 2017 Jared McNeill <[email protected]>
@@ -28,7 +28,7 @@
#include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: sun50i_a64_ccu.c,v 1.19 2019/11/23 22:46:53 jmcneill Exp $");
+__KERNEL_RCSID(1, "$NetBSD: sun50i_a64_ccu.c,v 1.20 2019/11/24 10:27:37 jmcneill Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -601,6 +601,8 @@ sun50i_a64_ccu_attach(device_t parent, d
{
struct sunxi_ccu_softc * const sc = device_private(self);
struct fdt_attach_args * const faa = aux;
+ prop_dictionary_t prop = device_properties(self);
+ bool nomodeset;
sc->sc_dev = self;
sc->sc_phandle = faa->faa_phandle;
@@ -618,19 +620,23 @@ sun50i_a64_ccu_attach(device_t parent, d
aprint_naive("\n");
aprint_normal(": A64 CCU\n");
- /* Set DE parent to PLL_DE */
- clk_set_parent(&sc->sc_clks[A64_CLK_DE].base, &sc->sc_clks[A64_CLK_PLL_DE].base);
- clk_set_rate(&sc->sc_clks[A64_CLK_PLL_DE].base, 420000000);
-
- /* Set video PLLs to 297 MHz */
- clk_set_rate(&sc->sc_clks[A64_CLK_PLL_VIDEO0].base, 297000000);
- clk_set_rate(&sc->sc_clks[A64_CLK_PLL_VIDEO1].base, 297000000);
-
- /* Set TCON1 parent to PLL_VIDEO1(1X) */
- clk_set_parent(&sc->sc_clks[A64_CLK_TCON1].base, &sc->sc_clks[A64_CLK_PLL_VIDEO1].base);
-
- /* Set HDMI parent to PLL_VIDEO1(1X) */
- clk_set_parent(&sc->sc_clks[A64_CLK_HDMI].base, &sc->sc_clks[A64_CLK_PLL_VIDEO1].base);
+ nomodeset = false;
+ prop_dictionary_get_bool(prop, "nomodeset", &nomodeset);
+ if (!nomodeset) {
+ /* Set DE parent to PLL_DE */
+ clk_set_parent(&sc->sc_clks[A64_CLK_DE].base, &sc->sc_clks[A64_CLK_PLL_DE].base);
+ clk_set_rate(&sc->sc_clks[A64_CLK_PLL_DE].base, 420000000);
+
+ /* Set video PLLs to 297 MHz */
+ clk_set_rate(&sc->sc_clks[A64_CLK_PLL_VIDEO0].base, 297000000);
+ clk_set_rate(&sc->sc_clks[A64_CLK_PLL_VIDEO1].base, 297000000);
+
+ /* Set TCON1 parent to PLL_VIDEO1(1X) */
+ clk_set_parent(&sc->sc_clks[A64_CLK_TCON1].base, &sc->sc_clks[A64_CLK_PLL_VIDEO1].base);
+
+ /* Set HDMI parent to PLL_VIDEO1(1X) */
+ clk_set_parent(&sc->sc_clks[A64_CLK_HDMI].base, &sc->sc_clks[A64_CLK_PLL_VIDEO1].base);
+ }
sunxi_ccu_print(sc);
}
Index: src/sys/arch/arm/sunxi/sunxi_dwhdmi.c
diff -u src/sys/arch/arm/sunxi/sunxi_dwhdmi.c:1.7 src/sys/arch/arm/sunxi/sunxi_dwhdmi.c:1.8
--- src/sys/arch/arm/sunxi/sunxi_dwhdmi.c:1.7 Sat Nov 23 18:55:08 2019
+++ src/sys/arch/arm/sunxi/sunxi_dwhdmi.c Sun Nov 24 10:27:37 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: sunxi_dwhdmi.c,v 1.7 2019/11/23 18:55:08 jmcneill Exp $ */
+/* $NetBSD: sunxi_dwhdmi.c,v 1.8 2019/11/24 10:27:37 jmcneill Exp $ */
/*-
* Copyright (c) 2019 Jared D. McNeill <[email protected]>
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sunxi_dwhdmi.c,v 1.7 2019/11/23 18:55:08 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sunxi_dwhdmi.c,v 1.8 2019/11/24 10:27:37 jmcneill Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -228,12 +228,20 @@ sunxi_dwhdmi_attach(device_t parent, dev
{
struct sunxi_dwhdmi_softc * const sc = device_private(self);
struct fdt_attach_args * const faa = aux;
+ prop_dictionary_t prop = device_properties(self);
const int phandle = faa->faa_phandle;
struct clk *clk_iahb, *clk_isfr, *clk_tmds;
struct fdtbus_reset *rst;
+ bool is_disabled;
bus_addr_t addr;
bus_size_t size;
+ if (prop_dictionary_get_bool(prop, "disabled", &is_disabled) && is_disabled) {
+ aprint_naive("\n");
+ aprint_normal(": HDMI TX (disabled)\n");
+ return;
+ }
+
if (fdtbus_get_reg(phandle, 0, &addr, &size) != 0) {
aprint_error(": couldn't get registers\n");
return;
Index: src/sys/arch/arm/sunxi/sunxi_platform.c
diff -u src/sys/arch/arm/sunxi/sunxi_platform.c:1.37 src/sys/arch/arm/sunxi/sunxi_platform.c:1.38
--- src/sys/arch/arm/sunxi/sunxi_platform.c:1.37 Mon Jun 17 05:27:01 2019
+++ src/sys/arch/arm/sunxi/sunxi_platform.c Sun Nov 24 10:27:37 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: sunxi_platform.c,v 1.37 2019/06/17 05:27:01 mrg Exp $ */
+/* $NetBSD: sunxi_platform.c,v 1.38 2019/11/24 10:27:37 jmcneill Exp $ */
/*-
* Copyright (c) 2017 Jared McNeill <[email protected]>
@@ -31,7 +31,7 @@
#include "opt_console.h"
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sunxi_platform.c,v 1.37 2019/06/17 05:27:01 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sunxi_platform.c,v 1.38 2019/11/24 10:27:37 jmcneill Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -230,11 +230,17 @@ sunxi_platform_device_register(device_t
}
}
- if (device_is_a(self, "sunxidrm")) {
+ if (device_is_a(self, "sunxidrm") || device_is_a(self, "dwhdmi")) {
if (get_bootconf_option(boot_args, "nomodeset", BOOTOPT_TYPE_BOOLEAN, &val))
if (val)
prop_dictionary_set_bool(prop, "disabled", true);
}
+
+ if (device_is_a(self, "sun50ia64ccu0")) {
+ if (get_bootconf_option(boot_args, "nomodeset", BOOTOPT_TYPE_BOOLEAN, &val))
+ if (val)
+ prop_dictionary_set_bool(prop, "nomodeset", true);
+ }
}
static u_int