From: kettenis Date: Sat, 23 Dec 2017 10:23:34 +0000 (+0000) Subject: Use regmap interface to tweak "SYSREG" PHY configuration registers and X-Git-Url: http://artulab.com/gitweb/?a=commitdiff_plain;h=54a31d3eccac7201d7c9153b19a5ed4c93069eb3;p=openbsd 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. --- 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