From 54a31d3eccac7201d7c9153b19a5ed4c93069eb3 Mon Sep 17 00:00:00 2001 From: kettenis Date: Sat, 23 Dec 2017 10:23:34 +0000 Subject: [PATCH] Use regmap interface to tweak "SYSREG" PHY configuration registers and remove exsysreg(4). The exsysreg(4) driver would no longer attach as syscon(4) would match its node in the device tree. As a result the driver corss-call would panic. Makes te Odroid-XU4 work again. --- sys/arch/armv7/conf/GENERIC | 3 +- sys/arch/armv7/conf/RAMDISK | 3 +- sys/arch/armv7/exynos/exehci.c | 21 ++++-- sys/arch/armv7/exynos/exsysreg.c | 100 ---------------------------- sys/arch/armv7/exynos/exsysregvar.h | 23 ------- sys/arch/armv7/exynos/files.exynos | 6 +- 6 files changed, 18 insertions(+), 138 deletions(-) delete mode 100644 sys/arch/armv7/exynos/exsysreg.c delete mode 100644 sys/arch/armv7/exynos/exsysregvar.h diff --git a/sys/arch/armv7/conf/GENERIC b/sys/arch/armv7/conf/GENERIC index 7239fae95fa..9a959034c70 100644 --- a/sys/arch/armv7/conf/GENERIC +++ b/sys/arch/armv7/conf/GENERIC @@ -1,4 +1,4 @@ -# $OpenBSD: GENERIC,v 1.102 2017/12/18 20:23:16 kettenis Exp $ +# $OpenBSD: GENERIC,v 1.103 2017/12/23 10:23:34 kettenis Exp $ # # For further information on compiling OpenBSD kernels, see the config(8) # man page. @@ -130,7 +130,6 @@ wsdisplay* at simplefb? #wsdisplay* at exdisplay? console ? exclock* at fdt? early 1 expower* at fdt? early 1 -exsysreg* at fdt? early 1 exmct* at fdt? early 1 exdog* at fdt? exgpio* at fdt? early 1 diff --git a/sys/arch/armv7/conf/RAMDISK b/sys/arch/armv7/conf/RAMDISK index 921b0435e08..baf96a207f9 100644 --- a/sys/arch/armv7/conf/RAMDISK +++ b/sys/arch/armv7/conf/RAMDISK @@ -1,4 +1,4 @@ -# $OpenBSD: RAMDISK,v 1.94 2017/12/18 20:23:16 kettenis Exp $ +# $OpenBSD: RAMDISK,v 1.95 2017/12/23 10:23:34 kettenis Exp $ machine armv7 arm @@ -122,7 +122,6 @@ syscon* at fdt? early 1 #wsdisplay* at exdisplay? console ? exclock* at fdt? early 1 expower* at fdt? early 1 -exsysreg* at fdt? early 1 exmct* at fdt? early 1 exdog* at fdt? exgpio* at fdt? early 1 diff --git a/sys/arch/armv7/exynos/exehci.c b/sys/arch/armv7/exynos/exehci.c index f63bcd41e48..6cff8880116 100644 --- a/sys/arch/armv7/exynos/exehci.c +++ b/sys/arch/armv7/exynos/exehci.c @@ -1,4 +1,4 @@ -/* $OpenBSD: exehci.c,v 1.7 2017/03/10 21:26:19 kettenis Exp $ */ +/* $OpenBSD: exehci.c,v 1.8 2017/12/23 10:23:34 kettenis Exp $ */ /* * Copyright (c) 2012-2013 Patrick Wildt * @@ -29,8 +29,6 @@ #include #include -#include - #include #include #include @@ -74,6 +72,10 @@ #define EHCI_CTRL_ENAINCR8 (1 << 27) #define EHCI_CTRL_ENAINCR16 (1 << 26) +/* SYSREG registers */ +#define USB20PHY_CFG 0x230 +#define USB20PHY_CFG_HOST_LINK_EN (1 << 0) + /* PMU registers */ #define USB_HOST_POWER_5250 0x708 #define USB_HOST_POWER_54XX 0x70c @@ -216,8 +218,8 @@ exehci_detach(struct device *self, int flags) void exehci_setup(struct exehci_softc *sc) { - struct regmap *pmurm; - uint32_t pmureg; + struct regmap *pmurm, *sysrm; + uint32_t pmureg, sysreg; bus_size_t offset; uint32_t val; int node; @@ -229,7 +231,14 @@ exehci_setup(struct exehci_softc *sc) delay(3000); #endif - exsysreg_usbhost_mode(1); + /* Enable host mode. */ + sysreg = OF_getpropint(sc->sc_phy, "samsung,sysreg-phandle", 0); + sysrm = regmap_byphandle(sysreg); + if (sysrm) { + val = regmap_read_4(sysrm, USB20PHY_CFG); + val |= USB20PHY_CFG_HOST_LINK_EN; + regmap_write_4(sysrm, USB20PHY_CFG, val); + } /* Power up the PHY block. */ pmureg = OF_getpropint(sc->sc_phy, "samsung,pmureg-phandle", 0); diff --git a/sys/arch/armv7/exynos/exsysreg.c b/sys/arch/armv7/exynos/exsysreg.c deleted file mode 100644 index 97a2dc8895d..00000000000 --- a/sys/arch/armv7/exynos/exsysreg.c +++ /dev/null @@ -1,100 +0,0 @@ -/* $OpenBSD: exsysreg.c,v 1.5 2017/03/04 18:17:24 kettenis Exp $ */ -/* - * Copyright (c) 2012-2013 Patrick Wildt - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include - -/* registers */ -#define SYSREG_USB20PHY_CFG 0x230 - -/* bits and bytes */ -#define SYSREG_USB20PHY_CFG_HOST_LINK_EN (1 << 0) - -#define HREAD4(sc, reg) \ - (bus_space_read_4((sc)->sc_iot, (sc)->sc_ioh, (reg))) -#define HWRITE4(sc, reg, val) \ - bus_space_write_4((sc)->sc_iot, (sc)->sc_ioh, (reg), (val)) -#define HSET4(sc, reg, bits) \ - HWRITE4((sc), (reg), HREAD4((sc), (reg)) | (bits)) -#define HCLR4(sc, reg, bits) \ - HWRITE4((sc), (reg), HREAD4((sc), (reg)) & ~(bits)) - -struct exsysreg_softc { - struct device sc_dev; - bus_space_tag_t sc_iot; - bus_space_handle_t sc_ioh; -}; - -struct exsysreg_softc *exsysreg_sc; - -int exsysreg_match(struct device *, void *, void *); -void exsysreg_attach(struct device *, struct device *, void *); - -struct cfattach exsysreg_ca = { - sizeof (struct exsysreg_softc), exsysreg_match, exsysreg_attach -}; - -struct cfdriver exsysreg_cd = { - NULL, "exsysreg", DV_DULL -}; - -int -exsysreg_match(struct device *parent, void *match, void *aux) -{ - struct fdt_attach_args *faa = aux; - - return OF_is_compatible(faa->fa_node, "samsung,exynos5-sysreg"); -} - -void -exsysreg_attach(struct device *parent, struct device *self, void *aux) -{ - struct exsysreg_softc *sc = (struct exsysreg_softc *)self; - struct fdt_attach_args *faa = aux; - - sc->sc_iot = faa->fa_iot; - - if (bus_space_map(sc->sc_iot, faa->fa_reg[0].addr, - faa->fa_reg[0].size, 0, &sc->sc_ioh)) - panic("%s: bus_space_map failed!", __func__); - - printf("\n"); - - exsysreg_sc = sc; -} - -void -exsysreg_usbhost_mode(int on) -{ - struct exsysreg_softc *sc = exsysreg_sc; - KASSERT(sc); - - if (on) - HSET4(sc, SYSREG_USB20PHY_CFG, SYSREG_USB20PHY_CFG_HOST_LINK_EN); - else - HCLR4(sc, SYSREG_USB20PHY_CFG, SYSREG_USB20PHY_CFG_HOST_LINK_EN); -} diff --git a/sys/arch/armv7/exynos/exsysregvar.h b/sys/arch/armv7/exynos/exsysregvar.h deleted file mode 100644 index de4bbb0463e..00000000000 --- a/sys/arch/armv7/exynos/exsysregvar.h +++ /dev/null @@ -1,23 +0,0 @@ -/* $OpenBSD: exsysregvar.h,v 1.1 2015/01/26 02:48:24 bmercer Exp $ */ -/* - * Copyright (c) 2012-2013 Patrick Wildt - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef EXSYSREGVAR_H -#define EXSYSREGVAR_H - -void exsysreg_usbhost_mode(int); - -#endif /* EXSYSREGVAR_H */ diff --git a/sys/arch/armv7/exynos/files.exynos b/sys/arch/armv7/exynos/files.exynos index b7d18786ef2..d49c4ae7ebd 100644 --- a/sys/arch/armv7/exynos/files.exynos +++ b/sys/arch/armv7/exynos/files.exynos @@ -1,4 +1,4 @@ -# $OpenBSD: files.exynos,v 1.11 2017/05/21 17:47:01 kettenis Exp $ +# $OpenBSD: files.exynos,v 1.12 2017/12/23 10:23:34 kettenis Exp $ # serial ports device exuart @@ -17,10 +17,6 @@ device expower attach expower at fdt file arch/armv7/exynos/expower.c expower -device exsysreg -attach exsysreg at fdt -file arch/armv7/exynos/exsysreg.c exsysreg - device exmct attach exmct at fdt file arch/armv7/exynos/exmct.c exmct -- 2.20.1