Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/arm/samsung Add support for Samsung Exynos USB.
details: https://anonhg.NetBSD.org/src/rev/9bd64917e23c
branches: trunk
changeset: 323847:9bd64917e23c
user: jmcneill <jmcneill%NetBSD.org@localhost>
date: Tue Jul 03 16:09:04 2018 +0000
description:
Add support for Samsung Exynos USB.
diffstat:
sys/arch/arm/samsung/exynos_ehci.c | 132 ++++++++------
sys/arch/arm/samsung/exynos_ohci.c | 130 ++++++++------
sys/arch/arm/samsung/exynos_usb3.c | 180 --------------------
sys/arch/arm/samsung/exynos_usbdrdphy.c | 288 ++++++++++++++++++++++++++++++++
sys/arch/arm/samsung/exynos_usbphy.c | 270 +++++++++++++++++++++++++----
sys/arch/arm/samsung/files.exynos | 21 +-
6 files changed, 677 insertions(+), 344 deletions(-)
diffs (truncated from 1243 to 300 lines):
diff -r 6ee6bacabfc5 -r 9bd64917e23c sys/arch/arm/samsung/exynos_ehci.c
--- a/sys/arch/arm/samsung/exynos_ehci.c Tue Jul 03 16:06:41 2018 +0000
+++ b/sys/arch/arm/samsung/exynos_ehci.c Tue Jul 03 16:09:04 2018 +0000
@@ -1,12 +1,9 @@
-/* $NetBSD: exynos_ehci.c,v 1.3 2018/04/09 16:21:09 jakllsch Exp $ */
+/* $NetBSD: exynos_ehci.c,v 1.4 2018/07/03 16:09:04 jmcneill Exp $ */
/*-
- * Copyright (c) 2014 The NetBSD Foundation, Inc.
+ * Copyright (c) 2015-2018 Jared McNeill <jmcneill%invisible.ca@localhost>
* All rights reserved.
*
- * This code is derived from software contributed to The NetBSD Foundation
- * by Reinoud Zandijk.
- *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
@@ -16,107 +13,132 @@
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
*/
-#include "locators.h"
-#include "ohci.h"
-#include "ehci.h"
-
#include <sys/cdefs.h>
-
-__KERNEL_RCSID(1, "$NetBSD: exynos_ehci.c,v 1.3 2018/04/09 16:21:09 jakllsch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: exynos_ehci.c,v 1.4 2018/07/03 16:09:04 jmcneill Exp $");
#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/intr.h>
#include <sys/bus.h>
#include <sys/device.h>
-#include <sys/proc.h>
-#include <sys/queue.h>
-#include <sys/kmem.h>
-#include <sys/gpio.h>
+#include <sys/intr.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
#include <dev/usb/usb.h>
#include <dev/usb/usbdi.h>
#include <dev/usb/usbdivar.h>
#include <dev/usb/usb_mem.h>
-
#include <dev/usb/ehcireg.h>
#include <dev/usb/ehcivar.h>
-#include <arm/samsung/exynos_reg.h>
-#include <arm/samsung/exynos_var.h>
-
#include <dev/fdt/fdtvar.h>
static int exynos_ehci_match(device_t, cfdata_t, void *);
static void exynos_ehci_attach(device_t, device_t, void *);
-CFATTACH_DECL_NEW(exynos_ehci, sizeof(struct ehci_softc),
- exynos_ehci_match, exynos_ehci_attach, NULL, NULL);
-
+CFATTACH_DECL2_NEW(exynos_ehci, sizeof(struct ehci_softc),
+ exynos_ehci_match, exynos_ehci_attach, NULL,
+ ehci_activate, NULL, ehci_childdet);
static int
exynos_ehci_match(device_t parent, cfdata_t cf, void *aux)
{
- const char * const compatible[] = { "samsung,exynos5-ehci",
- NULL };
+ const char * const compatible[] = {
+ "samsung,exynos4210-ehci",
+ NULL
+ };
struct fdt_attach_args * const faa = aux;
+
return of_match_compatible(faa->faa_phandle, compatible);
}
-
static void
exynos_ehci_attach(device_t parent, device_t self, void *aux)
{
- struct ehci_softc *sc = device_private(self);
+ struct ehci_softc * const sc = device_private(self);
struct fdt_attach_args * const faa = aux;
+ const int phandle = faa->faa_phandle;
+ struct fdtbus_phy *phy;
+ struct clk *clk;
+ char intrstr[128];
bus_addr_t addr;
bus_size_t size;
- int error;
+ int error, child;
+ void *ih;
- if (fdtbus_get_reg(faa->faa_phandle, 0, &addr, &size) != 0) {
+ if (fdtbus_get_reg(phandle, 0, &addr, &size) != 0) {
aprint_error(": couldn't get registers\n");
return;
}
+ /* Enable clocks */
+ clk = fdtbus_clock_get(phandle, "usbhost");
+ if (clk == NULL || clk_enable(clk) != 0) {
+ aprint_error(": couldn't enable clock\n");
+ return;
+ }
+
+ /* Enable phys for each port */
+ for (child = OF_child(phandle); child; child = OF_peer(child)) {
+ phy = fdtbus_phy_get_index(child, 0);
+ if (phy && fdtbus_phy_enable(phy, true) != 0)
+ aprint_error(": couldn't enable phy for %s\n",
+ fdtbus_get_string(child, "name"));
+ }
+
sc->sc_dev = self;
- sc->iot = faa->faa_bst;
- sc->sc_size = size;
+ sc->sc_bus.ub_hcpriv = sc;
sc->sc_bus.ub_dmatag = faa->faa_dmat;
- sc->sc_bus.ub_hcpriv = sc;
sc->sc_bus.ub_revision = USBREV_2_0;
- sc->sc_ncomp = 0;
-
- error = bus_space_map(sc->iot, addr, size, 0, &sc->ioh);
- if (error) {
- aprint_error(": couldn't map %#llx: %d",
- (uint64_t)addr, error);
+ if (of_hasprop(phandle, "has-transaction-translator"))
+ sc->sc_flags |= EHCIF_ETTF;
+ else
+ sc->sc_ncomp = 1;
+ sc->sc_size = size;
+ sc->iot = faa->faa_bst;
+ if (bus_space_map(sc->iot, addr, size, 0, &sc->ioh) != 0) {
+ aprint_error(": couldn't map registers\n");
return;
}
+ aprint_naive("\n");
+ aprint_normal(": Exynos EHCI\n");
- aprint_naive(": EHCI USB controller\n");
- aprint_normal(": EHCI NOT IMPLEMENTED\n");
+ /* Disable interrupts */
+ sc->sc_offs = EREAD1(sc, EHCI_CAPLENGTH);
+ EOWRITE4(sc, EHCI_USBINTR, 0);
+
+ if (!fdtbus_intr_str(phandle, 0, intrstr, sizeof(intrstr))) {
+ aprint_error_dev(self, "failed to decode interrupt\n");
+ return;
+ }
- /* attach */
+ ih = fdtbus_intr_establish(phandle, 0, IPL_USB, FDT_INTR_MPSAFE,
+ ehci_intr, sc);
+ if (ih == NULL) {
+ aprint_error_dev(self, "couldn't establish interrupt on %s\n",
+ intrstr);
+ return;
+ }
+ aprint_normal_dev(self, "interrupting on %s\n", intrstr);
+
error = ehci_init(sc);
if (error) {
aprint_error_dev(self, "init failed, error = %d\n", error);
- /* disable : TBD */
return;
}
+
sc->sc_child = config_found(self, &sc->sc_bus, usbctlprint);
}
diff -r 6ee6bacabfc5 -r 9bd64917e23c sys/arch/arm/samsung/exynos_ohci.c
--- a/sys/arch/arm/samsung/exynos_ohci.c Tue Jul 03 16:06:41 2018 +0000
+++ b/sys/arch/arm/samsung/exynos_ohci.c Tue Jul 03 16:09:04 2018 +0000
@@ -1,12 +1,9 @@
-/* $NetBSD: exynos_ohci.c,v 1.2 2016/04/23 10:15:28 skrll Exp $ */
+/* $NetBSD: exynos_ohci.c,v 1.3 2018/07/03 16:09:04 jmcneill Exp $ */
/*-
- * Copyright (c) 2014 The NetBSD Foundation, Inc.
+ * Copyright (c) 2015-2018 Jared McNeill <jmcneill%invisible.ca@localhost>
* All rights reserved.
*
- * This code is derived from software contributed to The NetBSD Foundation
- * by Reinoud Zandijk.
- *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
@@ -16,105 +13,128 @@
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
*/
-#include "locators.h"
-#include "ohci.h"
-#include "ehci.h"
-
#include <sys/cdefs.h>
-
-__KERNEL_RCSID(1, "$NetBSD: exynos_ohci.c,v 1.2 2016/04/23 10:15:28 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: exynos_ohci.c,v 1.3 2018/07/03 16:09:04 jmcneill Exp $");
#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/intr.h>
#include <sys/bus.h>
#include <sys/device.h>
-#include <sys/proc.h>
-#include <sys/queue.h>
-#include <sys/kmem.h>
-#include <sys/gpio.h>
+#include <sys/intr.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
#include <dev/usb/usb.h>
#include <dev/usb/usbdi.h>
#include <dev/usb/usbdivar.h>
#include <dev/usb/usb_mem.h>
-
#include <dev/usb/ohcireg.h>
#include <dev/usb/ohcivar.h>
-#include <arm/samsung/exynos_reg.h>
-#include <arm/samsung/exynos_var.h>
-
#include <dev/fdt/fdtvar.h>
static int exynos_ohci_match(device_t, cfdata_t, void *);
static void exynos_ohci_attach(device_t, device_t, void *);
-CFATTACH_DECL_NEW(exynos_ohci, sizeof(struct ohci_softc),
- exynos_ohci_match, exynos_ohci_attach, NULL, NULL);
-
+CFATTACH_DECL2_NEW(exynos_ohci, sizeof(struct ohci_softc),
+ exynos_ohci_match, exynos_ohci_attach, NULL,
+ ohci_activate, NULL, ohci_childdet);
static int
exynos_ohci_match(device_t parent, cfdata_t cf, void *aux)
{
- const char * const compatible[] = { "samsung,exynos5-ohci",
- NULL };
+ const char * const compatible[] = {
+ "samsung,exynos4210-ohci",
Home |
Main Index |
Thread Index |
Old Index