CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sat Oct 17 21:16:27 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_intr.h Log Message: add SOR and GPU interrupt numbers To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/nvidia/tegra_intr.h 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/nvidia/tegra_intr.h diff -u src/sys/arch/arm/nvidia/tegra_intr.h:1.7 src/sys/arch/arm/nvidia/tegra_intr.h:1.8 --- src/sys/arch/arm/nvidia/tegra_intr.h:1.7 Sat Aug 1 21:20:11 2015 +++ src/sys/arch/arm/nvidia/tegra_intr.h Sat Oct 17 21:16:27 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_intr.h,v 1.7 2015/08/01 21:20:11 jmcneill Exp $ */ +/* $NetBSD: tegra_intr.h,v 1.8 2015/10/17 21:16:27 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill@@ -58,6 +58,7 @@ #define TEGRA_INTR_DISPLAYA TEGRA_INTR(73) #define TEGRA_INTR_DISPLAYB TEGRA_INTR(74) #define TEGRA_INTR_HDMI TEGRA_INTR(75) +#define TEGRA_INTR_SOR TEGRA_INTR(76) #define TEGRA_INTR_HDA TEGRA_INTR(81) #define TEGRA_INTR_I2C2 TEGRA_INTR(84) #define TEGRA_INTR_UARTD TEGRA_INTR(90) @@ -75,4 +76,6 @@ #define TEGRA_INTR_TMR8 TEGRA_INTR(154) #define TEGRA_INTR_TMR9 TEGRA_INTR(155) #define TEGRA_INTR_TMR0 TEGRA_INTR(156) +#define TEGRA_INTR_GPU TEGRA_INTR(157) +#define TEGRA_INTR_GPU_NONSTALL TEGRA_INTR(158) #endif /* _ARM_TEGRA_INTR_H */
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sat Oct 17 21:16:27 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_intr.h Log Message: add SOR and GPU interrupt numbers To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/nvidia/tegra_intr.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sat Oct 17 21:17:15 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_reg.h Log Message: add GPU, SOR, and DPAUX offsets To generate a diff of this commit: cvs rdiff -u -r1.13 -r1.14 src/sys/arch/arm/nvidia/tegra_reg.h 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/nvidia/tegra_reg.h diff -u src/sys/arch/arm/nvidia/tegra_reg.h:1.13 src/sys/arch/arm/nvidia/tegra_reg.h:1.14 --- src/sys/arch/arm/nvidia/tegra_reg.h:1.13 Sat Aug 1 21:20:11 2015 +++ src/sys/arch/arm/nvidia/tegra_reg.h Sat Oct 17 21:17:15 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_reg.h,v 1.13 2015/08/01 21:20:11 jmcneill Exp $ */ +/* $NetBSD: tegra_reg.h,v 1.14 2015/10/17 21:17:15 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill@@ -55,6 +55,8 @@ #define TEGRA_HOST1X_SIZE 0x00034000 #define TEGRA_GHOST_BASE 0x5400 #define TEGRA_GHOST_SIZE 0x0100 +#define TEGRA_GPU_BASE 0x5700 +#define TEGRA_GPU_SIZE 0x0200 #define TEGRA_PPSB_BASE 0x6000 #define TEGRA_PPSB_SIZE 0x0100 #define TEGRA_APB_BASE 0x7000 @@ -146,5 +148,9 @@ #define TEGRA_DISPLAYB_SIZE 0x0004 #define TEGRA_HDMI_OFFSET 0x0028 #define TEGRA_HDMI_SIZE 0x0004 +#define TEGRA_SOR_OFFSET 0x0054 +#define TEGRA_SOR_SIZE 0x0004 +#define TEGRA_DPAUX_OFFSET 0x005c +#define TEGRA_DPAUX_SIZE 0x0004 #endif /* _ARM_TEGRA_REG_H */
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sat Oct 17 21:17:15 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_reg.h Log Message: add GPU, SOR, and DPAUX offsets To generate a diff of this commit: cvs rdiff -u -r1.13 -r1.14 src/sys/arch/arm/nvidia/tegra_reg.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sat Oct 17 21:16:10 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_car.c tegra_carreg.h tegra_var.h Log Message: add support for enabling the GPU To generate a diff of this commit: cvs rdiff -u -r1.26 -r1.27 src/sys/arch/arm/nvidia/tegra_car.c cvs rdiff -u -r1.20 -r1.21 src/sys/arch/arm/nvidia/tegra_carreg.h cvs rdiff -u -r1.24 -r1.25 src/sys/arch/arm/nvidia/tegra_var.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sat Oct 17 21:16:10 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_car.c tegra_carreg.h tegra_var.h Log Message: add support for enabling the GPU To generate a diff of this commit: cvs rdiff -u -r1.26 -r1.27 src/sys/arch/arm/nvidia/tegra_car.c cvs rdiff -u -r1.20 -r1.21 src/sys/arch/arm/nvidia/tegra_carreg.h cvs rdiff -u -r1.24 -r1.25 src/sys/arch/arm/nvidia/tegra_var.h 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/nvidia/tegra_car.c diff -u src/sys/arch/arm/nvidia/tegra_car.c:1.26 src/sys/arch/arm/nvidia/tegra_car.c:1.27 --- src/sys/arch/arm/nvidia/tegra_car.c:1.26 Sat Aug 1 21:20:11 2015 +++ src/sys/arch/arm/nvidia/tegra_car.c Sat Oct 17 21:16:09 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_car.c,v 1.26 2015/08/01 21:20:11 jmcneill Exp $ */ +/* $NetBSD: tegra_car.c,v 1.27 2015/10/17 21:16:09 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill@@ -29,7 +29,7 @@ #include "locators.h" #include -__KERNEL_RCSID(0, "$NetBSD: tegra_car.c,v 1.26 2015/08/01 21:20:11 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: tegra_car.c,v 1.27 2015/10/17 21:16:09 jmcneill Exp $"); #include #include @@ -831,3 +831,32 @@ tegra_car_wdt_enable(u_int timer, bool e CAR_RST_SOURCE_WDT_SEL | CAR_RST_SOURCE_WDT_EN); } + +void +tegra_car_gpu_enable(void) +{ + bus_space_tag_t bst; + bus_space_handle_t bsh; + + tegra_car_get_bs(, ); + + /* Enter reset, enable clock */ + bus_space_write_4(bst, bsh, CAR_RST_DEV_X_SET_REG, CAR_DEV_X_GPU); + bus_space_write_4(bst, bsh, CAR_CLK_ENB_X_SET_REG, CAR_DEV_X_GPU); + + /* Set PLLP_OUT5 to 204MHz */ + const u_int rate = 20400; + const u_int div = howmany(tegra_car_pllp0_rate() * 2, rate) - 2; + tegra_reg_set_clear(bst, bsh, CAR_PLLP_OUTC_REG, + __SHIFTIN(div, CAR_PLLP_OUTC_OUT5_RATIO) | + CAR_PLLP_OUTC_OUT5_CLKEN, + CAR_PLLP_OUTC_OUT5_RATIO); + delay(20); + + /* Remove clamping from 3D partition in the PMC */ + tegra_pmc_remove_clamping(PMC_PARTID_TD); + delay(20); + + /* Leave reset */ + bus_space_write_4(bst, bsh, CAR_RST_DEV_X_CLR_REG, CAR_DEV_X_GPU); +} Index: src/sys/arch/arm/nvidia/tegra_carreg.h diff -u src/sys/arch/arm/nvidia/tegra_carreg.h:1.20 src/sys/arch/arm/nvidia/tegra_carreg.h:1.21 --- src/sys/arch/arm/nvidia/tegra_carreg.h:1.20 Sat Jul 25 15:50:42 2015 +++ src/sys/arch/arm/nvidia/tegra_carreg.h Sat Oct 17 21:16:09 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_carreg.h,v 1.20 2015/07/25 15:50:42 jmcneill Exp $ */ +/* $NetBSD: tegra_carreg.h,v 1.21 2015/10/17 21:16:09 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill @@ -63,6 +63,11 @@ #define CAR_PLLP_OUTB_OUT3_OVRRIDE __BIT(2) #define CAR_PLLP_OUTB_OUT3_CLKEN __BIT(1) #define CAR_PLLP_OUTB_OUT3_RSTN __BIT(0) +#define CAR_PLLP_OUTC_REG 0x67c +#define CAR_PLLP_OUTC_OUT5_RATIO __BITS(31,24) +#define CAR_PLLP_OUTC_OUT5_OVERRIDE __BIT(18) +#define CAR_PLLP_OUTC_OUT5_CLKEN __BIT(17) +#define CAR_PLLP_OUTC_OUT5_RSTN __BIT(16) #define CAR_PLLP_MISC_REG 0xac #define CAR_PLLC_BASE_REG 0x80 Index: src/sys/arch/arm/nvidia/tegra_var.h diff -u src/sys/arch/arm/nvidia/tegra_var.h:1.24 src/sys/arch/arm/nvidia/tegra_var.h:1.25 --- src/sys/arch/arm/nvidia/tegra_var.h:1.24 Sat Aug 1 21:20:11 2015 +++ src/sys/arch/arm/nvidia/tegra_var.h Sat Oct 17 21:16:09 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_var.h,v 1.24 2015/08/01 21:20:11 jmcneill Exp $ */ +/* $NetBSD: tegra_var.h,v 1.25 2015/10/17 21:16:09 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill @@ -108,6 +108,7 @@ void tegra_car_hdmi_enable(u_int); int tegra_car_dc_enable(u_int); void tegra_car_host1x_enable(void); void tegra_car_wdt_enable(u_int, bool); +void tegra_car_gpu_enable(void); struct tegra_gpio_pin; struct tegra_gpio_pin *tegra_gpio_acquire(const char *, u_int);
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sat Oct 17 21:18:16 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: files.tegra tegra_io.c Added Files: src/sys/arch/arm/nvidia: tegra_nouveau.c Log Message: Add bus glue for attaching nouveau DRM To generate a diff of this commit: cvs rdiff -u -r1.16 -r1.17 src/sys/arch/arm/nvidia/files.tegra cvs rdiff -u -r1.13 -r1.14 src/sys/arch/arm/nvidia/tegra_io.c cvs rdiff -u -r0 -r1.1 src/sys/arch/arm/nvidia/tegra_nouveau.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/nvidia/files.tegra diff -u src/sys/arch/arm/nvidia/files.tegra:1.16 src/sys/arch/arm/nvidia/files.tegra:1.17 --- src/sys/arch/arm/nvidia/files.tegra:1.16 Sat Aug 22 15:10:04 2015 +++ src/sys/arch/arm/nvidia/files.tegra Sat Oct 17 21:18:16 2015 @@ -1,4 +1,4 @@ -# $NetBSD: files.tegra,v 1.16 2015/08/22 15:10:04 jmcneill Exp $ +# $NetBSD: files.tegra,v 1.17 2015/10/17 21:18:16 jmcneill Exp $ # # Configuration info for NVIDIA Tegra ARM Peripherals # @@ -116,6 +116,10 @@ device tegracec: hdmicecbus attach tegracec at tegraio with tegra_cec file arch/arm/nvidia/tegra_cec.c tegra_cec +# GPU +attach nouveau at tegraio with tegra_nouveau +file arch/arm/nvidia/tegra_nouveau.c tegra_nouveau + # Console parameters defparam opt_tegra.h CONADDR defparam opt_tegra.h CONSPEED Index: src/sys/arch/arm/nvidia/tegra_io.c diff -u src/sys/arch/arm/nvidia/tegra_io.c:1.13 src/sys/arch/arm/nvidia/tegra_io.c:1.14 --- src/sys/arch/arm/nvidia/tegra_io.c:1.13 Sat Aug 1 21:20:11 2015 +++ src/sys/arch/arm/nvidia/tegra_io.c Sat Oct 17 21:18:16 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_io.c,v 1.13 2015/08/01 21:20:11 jmcneill Exp $ */ +/* $NetBSD: tegra_io.c,v 1.14 2015/10/17 21:18:16 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill@@ -29,7 +29,7 @@ #include "opt_tegra.h" #include -__KERNEL_RCSID(0, "$NetBSD: tegra_io.c,v 1.13 2015/08/01 21:20:11 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: tegra_io.c,v 1.14 2015/10/17 21:18:16 jmcneill Exp $"); #include #include @@ -144,6 +144,10 @@ static const struct tegra_locators tegra TEGRA_HDMI_OFFSET, TEGRA_HDMI_SIZE, NOPORT, TEGRA_INTR_HDMI }, }; +static const struct tegra_locators tegra_gpu_locators[] = { + { "nouveau", 0, TEGRA_GPU_SIZE, NOPORT, NOINTR } +}; + int tegraio_match(device_t parent, cfdata_t cf, void *aux) { @@ -171,6 +175,8 @@ tegraio_attach(device_t parent, device_t tegraio_scan(self, (bus_space_handle_t)NULL, tegra_ghost_locators, __arraycount(tegra_ghost_locators)); tegraio_scan(self, (bus_space_handle_t)NULL, + tegra_gpu_locators, __arraycount(tegra_gpu_locators)); + tegraio_scan(self, (bus_space_handle_t)NULL, tegra_pcie_locators, __arraycount(tegra_pcie_locators)); } Added files: Index: src/sys/arch/arm/nvidia/tegra_nouveau.c diff -u /dev/null src/sys/arch/arm/nvidia/tegra_nouveau.c:1.1 --- /dev/null Sat Oct 17 21:18:16 2015 +++ src/sys/arch/arm/nvidia/tegra_nouveau.c Sat Oct 17 21:18:16 2015 @@ -0,0 +1,225 @@ +/* $NetBSD: tegra_nouveau.c,v 1.1 2015/10/17 21:18:16 jmcneill Exp $ */ + +/*- + * Copyright (c) 2015 Jared D. McNeill + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + *notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + *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 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 +__KERNEL_RCSID(0, "$NetBSD: tegra_nouveau.c,v 1.1 2015/10/17 21:18:16 jmcneill Exp $"); + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + +extern char *nouveau_config; +extern char *nouveau_debug; +extern struct drm_driver *const nouveau_drm_driver; + +static int
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sat Oct 17 21:18:16 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: files.tegra tegra_io.c Added Files: src/sys/arch/arm/nvidia: tegra_nouveau.c Log Message: Add bus glue for attaching nouveau DRM To generate a diff of this commit: cvs rdiff -u -r1.16 -r1.17 src/sys/arch/arm/nvidia/files.tegra cvs rdiff -u -r1.13 -r1.14 src/sys/arch/arm/nvidia/tegra_io.c cvs rdiff -u -r0 -r1.1 src/sys/arch/arm/nvidia/tegra_nouveau.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Thu Oct 15 09:06:04 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_pcie.c tegra_pciereg.h Log Message: explicitly disable PCIe MSI as we dont support it yet To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/nvidia/tegra_pcie.c cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/nvidia/tegra_pciereg.h 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/nvidia/tegra_pcie.c diff -u src/sys/arch/arm/nvidia/tegra_pcie.c:1.3 src/sys/arch/arm/nvidia/tegra_pcie.c:1.4 --- src/sys/arch/arm/nvidia/tegra_pcie.c:1.3 Fri Oct 2 05:22:50 2015 +++ src/sys/arch/arm/nvidia/tegra_pcie.c Thu Oct 15 09:06:04 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_pcie.c,v 1.3 2015/10/02 05:22:50 msaitoh Exp $ */ +/* $NetBSD: tegra_pcie.c,v 1.4 2015/10/15 09:06:04 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill@@ -29,7 +29,7 @@ #include "locators.h" #include -__KERNEL_RCSID(0, "$NetBSD: tegra_pcie.c,v 1.3 2015/10/02 05:22:50 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: tegra_pcie.c,v 1.4 2015/10/15 09:06:04 jmcneill Exp $"); #include #include @@ -193,34 +193,51 @@ tegra_pcie_attach(device_t parent, devic } static int -tegra_pcie_intr(void *priv) +tegra_pcie_legacy_intr(struct tegra_pcie_softc *sc) { - struct tegra_pcie_softc *sc = priv; + const uint32_t msg = bus_space_read_4(sc->sc_bst, sc->sc_bsh_afi, + AFI_MSG_REG); struct tegra_pcie_ih *pcie_ih; + int rv = 0; - const uint32_t code = bus_space_read_4(sc->sc_bst, sc->sc_bsh_afi, - AFI_INTR_CODE_REG); - const uint32_t sig = bus_space_read_4(sc->sc_bst, sc->sc_bsh_afi, - AFI_INTR_SIGNATURE_REG); - bus_space_write_4(sc->sc_bst, sc->sc_bsh_afi, AFI_INTR_CODE_REG, 0); - - switch (__SHIFTOUT(code, AFI_INTR_CODE_INT_CODE)) { - case AFI_INTR_CODE_SM_MSG: + if (msg & (AFI_MSG_INT0|AFI_MSG_INT1)) { mutex_enter(>sc_lock); const u_int lastgen = sc->sc_intrgen; TAILQ_FOREACH(pcie_ih, >sc_intrs, ih_entry) { int (*callback)(void *) = pcie_ih->ih_callback; void *arg = pcie_ih->ih_arg; mutex_exit(>sc_lock); - const int rv = callback(arg); - if (rv) -return rv; + rv += callback(arg); mutex_enter(>sc_lock); if (lastgen != sc->sc_intrgen) break; } mutex_exit(>sc_lock); - return 0; + } else if (msg & (AFI_MSG_PM_PME0|AFI_MSG_PM_PME1)) { + device_printf(sc->sc_dev, "PM PME message; AFI_MSG=%08x\n", + msg); + } else { + bus_space_write_4(sc->sc_bst, sc->sc_bsh_afi, AFI_MSG_REG, msg); + rv = 1; + } + + return rv; +} + +static int +tegra_pcie_intr(void *priv) +{ + struct tegra_pcie_softc *sc = priv; + + const uint32_t code = bus_space_read_4(sc->sc_bst, sc->sc_bsh_afi, + AFI_INTR_CODE_REG); + const uint32_t sig = bus_space_read_4(sc->sc_bst, sc->sc_bsh_afi, + AFI_INTR_SIGNATURE_REG); + bus_space_write_4(sc->sc_bst, sc->sc_bsh_afi, AFI_INTR_CODE_REG, 0); + + switch (__SHIFTOUT(code, AFI_INTR_CODE_INT_CODE)) { + case AFI_INTR_CODE_SM_MSG: + return tegra_pcie_legacy_intr(sc); default: device_printf(sc->sc_dev, "intr: code %#x sig %#x\n", code, sig); @@ -231,6 +248,14 @@ tegra_pcie_intr(void *priv) static void tegra_pcie_enable(struct tegra_pcie_softc *sc) { + /* disable MSI */ + bus_space_write_4(sc->sc_bst, sc->sc_bsh_afi, + AFI_MSI_BAR_SZ_REG, 0); + bus_space_write_4(sc->sc_bst, sc->sc_bsh_afi, + AFI_MSI_FPCI_BAR_ST_REG, 0); + bus_space_write_4(sc->sc_bst, sc->sc_bsh_afi, + AFI_MSI_AXI_BAR_ST_REG, 0); + bus_space_write_4(sc->sc_bst, sc->sc_bsh_afi, AFI_SM_INTR_ENABLE_REG, 0x); bus_space_write_4(sc->sc_bst, sc->sc_bsh_afi, Index: src/sys/arch/arm/nvidia/tegra_pciereg.h diff -u src/sys/arch/arm/nvidia/tegra_pciereg.h:1.1 src/sys/arch/arm/nvidia/tegra_pciereg.h:1.2 --- src/sys/arch/arm/nvidia/tegra_pciereg.h:1.1 Sun May 3 01:07:44 2015 +++ src/sys/arch/arm/nvidia/tegra_pciereg.h Thu Oct 15 09:06:04 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_pciereg.h,v 1.1 2015/05/03 01:07:44 jmcneill Exp $ */ +/* $NetBSD: tegra_pciereg.h,v 1.2 2015/10/15 09:06:04 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill @@ -30,11 +30,15 @@ #define _ARM_TEGRA_PCIEREG_H /* AFI */ +#define AFI_MSI_BAR_SZ_REG 0x60 +#define AFI_MSI_FPCI_BAR_ST_REG 0x64 +#define AFI_MSI_AXI_BAR_ST_REG 0x68 #define AFI_INTR_MASK_REG 0xb4 #define AFI_INTR_CODE_REG 0xb8 #define AFI_INTR_SIGNATURE_REG 0xbc #define AFI_SM_INTR_ENABLE_REG 0xc4 #define AFI_AFI_INTR_ENABLE_REG 0xc8 +#define AFI_MSG_REG 0x190 #define AFI_INTR_MASK_MSI __BIT(8) #define AFI_INTR_MASK_INT __BIT(0) @@ -42,4 +46,9 @@ #define AFI_INTR_CODE_INT_CODE __BITS(4,0) #define AFI_INTR_CODE_SM_MSG 6 +#define AFI_MSG_INT1 __BITS(27,24) +#define AFI_MSG_PM_PME1 __BIT(20) +#define AFI_MSG_INT0 __BITS(11,8) +#define AFI_MSG_PM_PME0 __BIT(4) + #endif /*
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Thu Oct 15 09:06:04 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_pcie.c tegra_pciereg.h Log Message: explicitly disable PCIe MSI as we dont support it yet To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/nvidia/tegra_pcie.c cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/nvidia/tegra_pciereg.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Thu Oct 15 09:04:35 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_ahcisata.c tegra_ahcisatareg.h Log Message: disable SATA sleep feature To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/nvidia/tegra_ahcisata.c cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/nvidia/tegra_ahcisatareg.h 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/nvidia/tegra_ahcisata.c diff -u src/sys/arch/arm/nvidia/tegra_ahcisata.c:1.6 src/sys/arch/arm/nvidia/tegra_ahcisata.c:1.7 --- src/sys/arch/arm/nvidia/tegra_ahcisata.c:1.6 Sun May 24 22:30:22 2015 +++ src/sys/arch/arm/nvidia/tegra_ahcisata.c Thu Oct 15 09:04:35 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_ahcisata.c,v 1.6 2015/05/24 22:30:22 jmcneill Exp $ */ +/* $NetBSD: tegra_ahcisata.c,v 1.7 2015/10/15 09:04:35 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill@@ -29,7 +29,7 @@ #include "locators.h" #include -__KERNEL_RCSID(0, "$NetBSD: tegra_ahcisata.c,v 1.6 2015/05/24 22:30:22 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: tegra_ahcisata.c,v 1.7 2015/10/15 09:04:35 jmcneill Exp $"); #include #include @@ -129,6 +129,20 @@ tegra_ahcisata_init(struct tegra_ahcisat const u_int gen2_tx_amp = 0x18; const u_int gen2_tx_peak = 0x0a; + /* Set RX idle detection source and disable RX idle detection interrupt */ + tegra_reg_set_clear(bst, bsh, TEGRA_SATA_AUX_MISC_CNTL_1_REG, + TEGRA_SATA_AUX_MISC_CNTL_1_AUX_OR_CORE_IDLE_STATUS_SEL, 0); + tegra_reg_set_clear(bst, bsh, TEGRA_SATA_AUX_RX_STAT_INT_REG, + TEGRA_SATA_AUX_RX_STAT_INT_SATA_RX_STAT_INT_DISABLE, 0); + + /* Prevent automatic OOB sequence when coming out of reset */ + tegra_reg_set_clear(bst, bsh, TEGRA_SATA_AUX_MISC_CNTL_1_REG, + 0, TEGRA_SATA_AUX_MISC_CNTL_1_OOB_ON_POR); + + /* Disable device sleep */ + tegra_reg_set_clear(bst, bsh, TEGRA_SATA_AUX_MISC_CNTL_1_REG, + 0, TEGRA_SATA_AUX_MISC_CNTL_1_SDS_SUPPORT); + /* Enable IFPS device block */ tegra_reg_set_clear(bst, bsh, TEGRA_SATA_CONFIGURATION_REG, TEGRA_SATA_CONFIGURATION_EN_FPCI, 0); Index: src/sys/arch/arm/nvidia/tegra_ahcisatareg.h diff -u src/sys/arch/arm/nvidia/tegra_ahcisatareg.h:1.1 src/sys/arch/arm/nvidia/tegra_ahcisatareg.h:1.2 --- src/sys/arch/arm/nvidia/tegra_ahcisatareg.h:1.1 Fri May 15 17:43:35 2015 +++ src/sys/arch/arm/nvidia/tegra_ahcisatareg.h Thu Oct 15 09:04:35 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_ahcisatareg.h,v 1.1 2015/05/15 17:43:35 jmcneill Exp $ */ +/* $NetBSD: tegra_ahcisatareg.h,v 1.2 2015/10/15 09:04:35 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill @@ -53,6 +53,14 @@ #define TEGRA_T_SATA0_CFG9_BASE_ADDRESS __BITS(31,13) #define TEGRA_T_SATA0_CFG9_SPACE_TYPE __BIT(0) +#define TEGRA_SATA_AUX_MISC_CNTL_1_REG 0x1108 +#define TEGRA_SATA_AUX_MISC_CNTL_1_AUX_OR_CORE_IDLE_STATUS_SEL __BIT(18) +#define TEGRA_SATA_AUX_MISC_CNTL_1_SDS_SUPPORT __BIT(13) +#define TEGRA_SATA_AUX_MISC_CNTL_1_OOB_ON_POR __BIT(7) + +#define TEGRA_SATA_AUX_RX_STAT_INT_REG 0x110c +#define TEGRA_SATA_AUX_RX_STAT_INT_SATA_RX_STAT_INT_DISABLE __BIT(2) + #define TEGRA_T_SATA0_BKDOOR_CC_REG 0x14a4 #define TEGRA_T_SATA0_BKDOOR_CC_CLASS_CODE __BITS(31,16) #define TEGRA_T_SATA0_BKDOOR_CC_PROG_IF __BITS(15,8)
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Thu Oct 15 09:04:35 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_ahcisata.c tegra_ahcisatareg.h Log Message: disable SATA sleep feature To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/nvidia/tegra_ahcisata.c cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/nvidia/tegra_ahcisatareg.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Mon Aug 3 12:11:52 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_sdhc.c Log Message: set SDHC_FLAG_POLL_CARD_DET when we have a card detect pin To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 src/sys/arch/arm/nvidia/tegra_sdhc.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/nvidia/tegra_sdhc.c diff -u src/sys/arch/arm/nvidia/tegra_sdhc.c:1.10 src/sys/arch/arm/nvidia/tegra_sdhc.c:1.11 --- src/sys/arch/arm/nvidia/tegra_sdhc.c:1.10 Sun Aug 2 21:45:52 2015 +++ src/sys/arch/arm/nvidia/tegra_sdhc.c Mon Aug 3 12:11:52 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_sdhc.c,v 1.10 2015/08/02 21:45:52 jmcneill Exp $ */ +/* $NetBSD: tegra_sdhc.c,v 1.11 2015/08/03 12:11:52 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_sdhc.c,v 1.10 2015/08/02 21:45:52 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_sdhc.c,v 1.11 2015/08/03 12:11:52 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -119,8 +119,10 @@ tegra_sdhc_attach(device_t parent, devic if (prop_dictionary_get_cstring_nocopy(prop, wp-gpio, pin)) sc-sc_pin_wp = tegra_gpio_acquire(pin, GPIO_PIN_INPUT); - if (sc-sc_pin_cd) + if (sc-sc_pin_cd) { sc-sc.sc_vendor_card_detect = tegra_sdhc_card_detect; + sc-sc.sc_flags |= SDHC_FLAG_POLL_CARD_DET; + } if (sc-sc_pin_wp) sc-sc.sc_vendor_write_protect = tegra_sdhc_write_protect;
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Mon Aug 3 12:11:52 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_sdhc.c Log Message: set SDHC_FLAG_POLL_CARD_DET when we have a card detect pin To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 src/sys/arch/arm/nvidia/tegra_sdhc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sun Aug 2 21:45:52 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_sdhc.c Log Message: set ref clk to 204MHz so we can take advantage of UHS-I modes To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/sys/arch/arm/nvidia/tegra_sdhc.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/nvidia/tegra_sdhc.c diff -u src/sys/arch/arm/nvidia/tegra_sdhc.c:1.9 src/sys/arch/arm/nvidia/tegra_sdhc.c:1.10 --- src/sys/arch/arm/nvidia/tegra_sdhc.c:1.9 Wed Jul 29 12:11:32 2015 +++ src/sys/arch/arm/nvidia/tegra_sdhc.c Sun Aug 2 21:45:52 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_sdhc.c,v 1.9 2015/07/29 12:11:32 jmcneill Exp $ */ +/* $NetBSD: tegra_sdhc.c,v 1.10 2015/08/02 21:45:52 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_sdhc.c,v 1.9 2015/07/29 12:11:32 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_sdhc.c,v 1.10 2015/08/02 21:45:52 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -124,7 +124,7 @@ tegra_sdhc_attach(device_t parent, devic if (sc-sc_pin_wp) sc-sc.sc_vendor_write_protect = tegra_sdhc_write_protect; - tegra_car_periph_sdmmc_set_rate(sc-sc_port, 5000); + tegra_car_periph_sdmmc_set_rate(sc-sc_port, 20400); sc-sc.sc_clkbase = tegra_car_periph_sdmmc_rate(sc-sc_port) / 1000; aprint_naive(\n);
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sun Aug 2 21:45:52 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_sdhc.c Log Message: set ref clk to 204MHz so we can take advantage of UHS-I modes To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/sys/arch/arm/nvidia/tegra_sdhc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sat Aug 1 21:20:11 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: files.tegra tegra_car.c tegra_intr.h tegra_io.c tegra_reg.h tegra_var.h Added Files: src/sys/arch/arm/nvidia: tegra_cec.c tegra_cecreg.h Log Message: Add driver for Tegra HDMI CEC controller. To generate a diff of this commit: cvs rdiff -u -r1.14 -r1.15 src/sys/arch/arm/nvidia/files.tegra cvs rdiff -u -r1.25 -r1.26 src/sys/arch/arm/nvidia/tegra_car.c cvs rdiff -u -r0 -r1.1 src/sys/arch/arm/nvidia/tegra_cec.c \ src/sys/arch/arm/nvidia/tegra_cecreg.h cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/nvidia/tegra_intr.h cvs rdiff -u -r1.12 -r1.13 src/sys/arch/arm/nvidia/tegra_io.c \ src/sys/arch/arm/nvidia/tegra_reg.h cvs rdiff -u -r1.23 -r1.24 src/sys/arch/arm/nvidia/tegra_var.h 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/nvidia/files.tegra diff -u src/sys/arch/arm/nvidia/files.tegra:1.14 src/sys/arch/arm/nvidia/files.tegra:1.15 --- src/sys/arch/arm/nvidia/files.tegra:1.14 Sat May 30 13:25:55 2015 +++ src/sys/arch/arm/nvidia/files.tegra Sat Aug 1 21:20:11 2015 @@ -1,4 +1,4 @@ -# $NetBSD: files.tegra,v 1.14 2015/05/30 13:25:55 jmcneill Exp $ +# $NetBSD: files.tegra,v 1.15 2015/08/01 21:20:11 jmcneill Exp $ # # Configuration info for NVIDIA Tegra ARM Peripherals # @@ -111,6 +111,11 @@ device tegrahdmi: edid, ddc_read_edid, v attach tegrahdmi at tegraio with tegra_hdmi file arch/arm/nvidia/tegra_hdmi.c tegra_hdmi +# HDMI CEC +device tegracec: hdmicecbus +attach tegracec at tegraio with tegra_cec +file arch/arm/nvidia/tegra_cec.c tegra_cec + # Console parameters defparam opt_tegra.h CONADDR defparam opt_tegra.h CONSPEED Index: src/sys/arch/arm/nvidia/tegra_car.c diff -u src/sys/arch/arm/nvidia/tegra_car.c:1.25 src/sys/arch/arm/nvidia/tegra_car.c:1.26 --- src/sys/arch/arm/nvidia/tegra_car.c:1.25 Wed Jul 29 14:30:18 2015 +++ src/sys/arch/arm/nvidia/tegra_car.c Sat Aug 1 21:20:11 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_car.c,v 1.25 2015/07/29 14:30:18 jmcneill Exp $ */ +/* $NetBSD: tegra_car.c,v 1.26 2015/08/01 21:20:11 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_car.c,v 1.25 2015/07/29 14:30:18 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_car.c,v 1.26 2015/08/01 21:20:11 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -685,6 +685,18 @@ tegra_car_periph_i2c_enable(u_int port, } void +tegra_car_periph_cec_enable(void) +{ + bus_space_tag_t bst; + bus_space_handle_t bsh; + + tegra_car_get_bs(bst, bsh); + + bus_space_write_4(bst, bsh, CAR_CLK_ENB_W_SET_REG, CAR_DEV_W_CEC); + bus_space_write_4(bst, bsh, CAR_RST_DEV_W_CLR_REG, CAR_DEV_W_CEC); +} + +void tegra_car_hdmi_enable(u_int rate) { bus_space_tag_t bst; Index: src/sys/arch/arm/nvidia/tegra_intr.h diff -u src/sys/arch/arm/nvidia/tegra_intr.h:1.6 src/sys/arch/arm/nvidia/tegra_intr.h:1.7 --- src/sys/arch/arm/nvidia/tegra_intr.h:1.6 Sat May 30 13:25:55 2015 +++ src/sys/arch/arm/nvidia/tegra_intr.h Sat Aug 1 21:20:11 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_intr.h,v 1.6 2015/05/30 13:25:55 jmcneill Exp $ */ +/* $NetBSD: tegra_intr.h,v 1.7 2015/08/01 21:20:11 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -39,6 +39,7 @@ #define TEGRA_INTR_TMR1 TEGRA_INTR(0) #define TEGRA_INTR_TMR2 TEGRA_INTR(1) +#define TEGRA_INTR_CEC TEGRA_INTR(3) #define TEGRA_INTR_SDMMC1 TEGRA_INTR(14) #define TEGRA_INTR_SDMMC2 TEGRA_INTR(15) #define TEGRA_INTR_SDMMC3 TEGRA_INTR(19) Index: src/sys/arch/arm/nvidia/tegra_io.c diff -u src/sys/arch/arm/nvidia/tegra_io.c:1.12 src/sys/arch/arm/nvidia/tegra_io.c:1.13 --- src/sys/arch/arm/nvidia/tegra_io.c:1.12 Sat May 30 13:25:55 2015 +++ src/sys/arch/arm/nvidia/tegra_io.c Sat Aug 1 21:20:11 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_io.c,v 1.12 2015/05/30 13:25:55 jmcneill Exp $ */ +/* $NetBSD: tegra_io.c,v 1.13 2015/08/01 21:20:11 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include opt_tegra.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_io.c,v 1.12 2015/05/30 13:25:55 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_io.c,v 1.13 2015/08/01 21:20:11 jmcneill Exp $); #include sys/param.h #include sys/systm.h @@ -113,6 +113,8 @@ static const struct tegra_locators tegra TEGRA_SATA_OFFSET, TEGRA_SATA_SIZE, NOPORT, TEGRA_INTR_SATA }, { hdaudio, TEGRA_HDA_OFFSET, TEGRA_HDA_SIZE, NOPORT, TEGRA_INTR_HDA }, + { tegracec, +TEGRA_CEC_OFFSET, TEGRA_CEC_SIZE, NOPORT, TEGRA_INTR_CEC }, }; static const struct tegra_locators tegra_ahb_a2_locators[] = { Index: src/sys/arch/arm/nvidia/tegra_reg.h diff -u src/sys/arch/arm/nvidia/tegra_reg.h:1.12
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sat Aug 1 21:20:11 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: files.tegra tegra_car.c tegra_intr.h tegra_io.c tegra_reg.h tegra_var.h Added Files: src/sys/arch/arm/nvidia: tegra_cec.c tegra_cecreg.h Log Message: Add driver for Tegra HDMI CEC controller. To generate a diff of this commit: cvs rdiff -u -r1.14 -r1.15 src/sys/arch/arm/nvidia/files.tegra cvs rdiff -u -r1.25 -r1.26 src/sys/arch/arm/nvidia/tegra_car.c cvs rdiff -u -r0 -r1.1 src/sys/arch/arm/nvidia/tegra_cec.c \ src/sys/arch/arm/nvidia/tegra_cecreg.h cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/nvidia/tegra_intr.h cvs rdiff -u -r1.12 -r1.13 src/sys/arch/arm/nvidia/tegra_io.c \ src/sys/arch/arm/nvidia/tegra_reg.h cvs rdiff -u -r1.23 -r1.24 src/sys/arch/arm/nvidia/tegra_var.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Fri Jul 31 23:07:14 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_hdmi.c Log Message: extract physical address from HDMI VDSB and make it available as the physical-address device property To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/sys/arch/arm/nvidia/tegra_hdmi.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Fri Jul 31 23:07:14 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_hdmi.c Log Message: extract physical address from HDMI VDSB and make it available as the physical-address device property To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/sys/arch/arm/nvidia/tegra_hdmi.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/nvidia/tegra_hdmi.c diff -u src/sys/arch/arm/nvidia/tegra_hdmi.c:1.8 src/sys/arch/arm/nvidia/tegra_hdmi.c:1.9 --- src/sys/arch/arm/nvidia/tegra_hdmi.c:1.8 Sun Jul 26 15:12:03 2015 +++ src/sys/arch/arm/nvidia/tegra_hdmi.c Fri Jul 31 23:07:14 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_hdmi.c,v 1.8 2015/07/26 15:12:03 jmcneill Exp $ */ +/* $NetBSD: tegra_hdmi.c,v 1.9 2015/07/31 23:07:14 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_hdmi.c,v 1.8 2015/07/26 15:12:03 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_hdmi.c,v 1.9 2015/07/31 23:07:14 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -47,6 +47,8 @@ __KERNEL_RCSID(0, $NetBSD: tegra_hdmi.c #include arm/nvidia/tegra_hdmireg.h #include arm/nvidia/tegra_var.h +#define PROP_PHYSICAL_ADDRESS physical-address + static int tegra_hdmi_match(device_t, cfdata_t, void *); static void tegra_hdmi_attach(device_t, device_t, void *); @@ -243,6 +245,9 @@ tegra_hdmi_connect(struct tegra_hdmi_sof static void tegra_hdmi_disconnect(struct tegra_hdmi_softc *sc) { + prop_dictionary_t cfg = device_properties(sc-sc_dev); + + prop_dictionary_remove(cfg, PROP_PHYSICAL_ADDRESS); } static void @@ -441,9 +446,11 @@ tegra_hdmi_sor_start(struct tegra_hdmi_s static bool tegra_hdmi_is_hdmi(struct tegra_hdmi_softc *sc, const struct edid_info *ei) { + prop_dictionary_t cfg = device_properties(sc-sc_dev); char edid[128]; bool found_hdmi = false; unsigned int n, p; + uint16_t phys_addr; /* * Scan through extension blocks, looking for a CEA-861-D v3 @@ -486,9 +493,15 @@ tegra_hdmi_is_hdmi(struct tegra_hdmi_sof goto next_block; /* HDMI 24-bit IEEE registration ID is 0x000C03 */ - if (memcmp(edid[p + 1], \x03\x0c\x00, 3) == 0) + if (memcmp(edid[p + 1], \x03\x0c\x00, 3) == 0) { found_hdmi = true; +phys_addr = (edid[p + 4] 8) | edid[p + 5]; + +prop_dictionary_set_uint16(cfg, +PROP_PHYSICAL_ADDRESS, phys_addr); + } + next_block: p += (1 + blen); }
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Wed Jul 29 12:11:32 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_sdhc.c Log Message: enable ADMA2 data transfer mode To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/sys/arch/arm/nvidia/tegra_sdhc.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/nvidia/tegra_sdhc.c diff -u src/sys/arch/arm/nvidia/tegra_sdhc.c:1.8 src/sys/arch/arm/nvidia/tegra_sdhc.c:1.9 --- src/sys/arch/arm/nvidia/tegra_sdhc.c:1.8 Thu Jul 23 23:53:14 2015 +++ src/sys/arch/arm/nvidia/tegra_sdhc.c Wed Jul 29 12:11:32 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_sdhc.c,v 1.8 2015/07/23 23:53:14 jmcneill Exp $ */ +/* $NetBSD: tegra_sdhc.c,v 1.9 2015/07/29 12:11:32 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_sdhc.c,v 1.8 2015/07/23 23:53:14 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_sdhc.c,v 1.9 2015/07/29 12:11:32 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -95,7 +95,8 @@ tegra_sdhc_attach(device_t parent, devic SDHC_FLAG_NO_CLKBASE | SDHC_FLAG_NO_TIMEOUT | SDHC_FLAG_SINGLE_POWER_WRITE | - SDHC_FLAG_USE_DMA; + SDHC_FLAG_USE_DMA | + SDHC_FLAG_USE_ADMA2; if (SDMMC_8BIT_P(loc-loc_port)) { sc-sc.sc_flags |= SDHC_FLAG_8BIT_MODE; }
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Wed Jul 29 12:11:32 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_sdhc.c Log Message: enable ADMA2 data transfer mode To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/sys/arch/arm/nvidia/tegra_sdhc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Wed Jul 29 14:30:18 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_car.c Log Message: use utmip settings for 12MHz ref clk, not 13MHz To generate a diff of this commit: cvs rdiff -u -r1.24 -r1.25 src/sys/arch/arm/nvidia/tegra_car.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Wed Jul 29 14:30:18 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_car.c Log Message: use utmip settings for 12MHz ref clk, not 13MHz To generate a diff of this commit: cvs rdiff -u -r1.24 -r1.25 src/sys/arch/arm/nvidia/tegra_car.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/nvidia/tegra_car.c diff -u src/sys/arch/arm/nvidia/tegra_car.c:1.24 src/sys/arch/arm/nvidia/tegra_car.c:1.25 --- src/sys/arch/arm/nvidia/tegra_car.c:1.24 Sat Jul 25 15:50:42 2015 +++ src/sys/arch/arm/nvidia/tegra_car.c Wed Jul 29 14:30:18 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_car.c,v 1.24 2015/07/25 15:50:42 jmcneill Exp $ */ +/* $NetBSD: tegra_car.c,v 1.25 2015/07/29 14:30:18 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_car.c,v 1.24 2015/07/25 15:50:42 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_car.c,v 1.25 2015/07/29 14:30:18 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -483,9 +483,9 @@ void tegra_car_utmip_init(void) { const u_int enable_dly_count = 0x02; - const u_int stable_count = 0x33; - const u_int active_dly_count = 0x09; - const u_int xtal_freq_count = 0x7f; + const u_int stable_count = 0x2f; + const u_int active_dly_count = 0x04; + const u_int xtal_freq_count = 0x76; bus_space_tag_t bst; bus_space_handle_t bsh;
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sun Jul 26 15:12:03 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_hdmi.c Log Message: fix a few typos in the audio infoframe we build To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/nvidia/tegra_hdmi.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/nvidia/tegra_hdmi.c diff -u src/sys/arch/arm/nvidia/tegra_hdmi.c:1.7 src/sys/arch/arm/nvidia/tegra_hdmi.c:1.8 --- src/sys/arch/arm/nvidia/tegra_hdmi.c:1.7 Sat Jul 25 15:55:31 2015 +++ src/sys/arch/arm/nvidia/tegra_hdmi.c Sun Jul 26 15:12:03 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_hdmi.c,v 1.7 2015/07/25 15:55:31 jmcneill Exp $ */ +/* $NetBSD: tegra_hdmi.c,v 1.8 2015/07/26 15:12:03 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_hdmi.c,v 1.7 2015/07/25 15:55:31 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_hdmi.c,v 1.8 2015/07/26 15:12:03 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -501,13 +501,14 @@ static void tegra_hdmi_setup_audio_infoframe(struct tegra_hdmi_softc *sc) { uint8_t data[10] = { - 0x84, 0x01, 0x10, + 0x84, 0x01, 0x0a, 0x00, /* PB0 (checksum) */ 0x01, /* CT=0, CC=2ch */ - 0xc0, /* SS=0, SF=48kHz */ + 0x00, /* SS=0, SF=0 */ + 0x00, 0x00, /* CA=FR/FL */ 0x00, /* LSV=0dB, DM_INH=permitted */ - 0x00, 0x00 + 0x00 }; data[3] = tegra_hdmi_infoframe_csum(data, sizeof(data));
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sun Jul 26 15:12:03 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_hdmi.c Log Message: fix a few typos in the audio infoframe we build To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/nvidia/tegra_hdmi.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sun Jul 26 17:54:46 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_hdaudio.c Log Message: set HDAUDIO_FLAG_NO_STREAM_RESET quirk To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/nvidia/tegra_hdaudio.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/nvidia/tegra_hdaudio.c diff -u src/sys/arch/arm/nvidia/tegra_hdaudio.c:1.3 src/sys/arch/arm/nvidia/tegra_hdaudio.c:1.4 --- src/sys/arch/arm/nvidia/tegra_hdaudio.c:1.3 Sun May 10 11:04:59 2015 +++ src/sys/arch/arm/nvidia/tegra_hdaudio.c Sun Jul 26 17:54:46 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_hdaudio.c,v 1.3 2015/05/10 11:04:59 jmcneill Exp $ */ +/* $NetBSD: tegra_hdaudio.c,v 1.4 2015/07/26 17:54:46 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_hdaudio.c,v 1.3 2015/05/10 11:04:59 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_hdaudio.c,v 1.4 2015/07/26 17:54:46 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -97,6 +97,7 @@ tegra_hdaudio_attach(device_t parent, de loc-loc_size - TEGRA_HDAUDIO_OFFSET, sc-sc.sc_memh); sc-sc.sc_memvalid = true; sc-sc.sc_dmat = tio-tio_dmat; + sc-sc.sc_flags = HDAUDIO_FLAG_NO_STREAM_RESET; aprint_naive(\n); aprint_normal(: HDA\n);
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sun Jul 26 17:54:46 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_hdaudio.c Log Message: set HDAUDIO_FLAG_NO_STREAM_RESET quirk To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/nvidia/tegra_hdaudio.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sat Jul 25 15:50:42 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_car.c tegra_carreg.h tegra_hdmi.c tegra_hdmireg.h Log Message: Add HDMI audio support To generate a diff of this commit: cvs rdiff -u -r1.23 -r1.24 src/sys/arch/arm/nvidia/tegra_car.c cvs rdiff -u -r1.19 -r1.20 src/sys/arch/arm/nvidia/tegra_carreg.h cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/nvidia/tegra_hdmi.c cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/nvidia/tegra_hdmireg.h 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/nvidia/tegra_car.c diff -u src/sys/arch/arm/nvidia/tegra_car.c:1.23 src/sys/arch/arm/nvidia/tegra_car.c:1.24 --- src/sys/arch/arm/nvidia/tegra_car.c:1.23 Thu Jul 23 18:22:05 2015 +++ src/sys/arch/arm/nvidia/tegra_car.c Sat Jul 25 15:50:42 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_car.c,v 1.23 2015/07/23 18:22:05 jmcneill Exp $ */ +/* $NetBSD: tegra_car.c,v 1.24 2015/07/25 15:50:42 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_car.c,v 1.23 2015/07/23 18:22:05 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_car.c,v 1.24 2015/07/25 15:50:42 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -535,24 +535,27 @@ tegra_car_periph_hda_enable(void) tegra_car_get_bs(bst, bsh); - /* HDA */ bus_space_write_4(bst, bsh, CAR_RST_DEV_V_SET_REG, CAR_DEV_V_HDA); bus_space_write_4(bst, bsh, CAR_CLK_ENB_V_SET_REG, CAR_DEV_V_HDA); - bus_space_write_4(bst, bsh, CAR_RST_DEV_V_CLR_REG, CAR_DEV_V_HDA); - - /* HDA2CODEC_2X */ bus_space_write_4(bst, bsh, CAR_RST_DEV_V_SET_REG, CAR_DEV_V_HDA2CODEC_2X); bus_space_write_4(bst, bsh, CAR_CLK_ENB_V_SET_REG, CAR_DEV_V_HDA2CODEC_2X); - bus_space_write_4(bst, bsh, CAR_RST_DEV_V_CLR_REG, - CAR_DEV_V_HDA2CODEC_2X); - - /* HDA2HDMICODEC */ bus_space_write_4(bst, bsh, CAR_RST_DEV_W_SET_REG, CAR_DEV_W_HDA2HDMICODEC); bus_space_write_4(bst, bsh, CAR_CLK_ENB_W_SET_REG, CAR_DEV_W_HDA2HDMICODEC); + + /* configure HDA2CODEC_2X for 48 MHz */ + const u_int div = howmany(tegra_car_pllp0_rate() * 2, 4800) - 2; + bus_space_write_4(bst, bsh, CAR_CLKSRC_HDA2CODEC_2X_REG, + __SHIFTIN(CAR_CLKSRC_HDA2CODEC_2X_SRC_PLLP_OUT0, + CAR_CLKSRC_HDA2CODEC_2X_SRC) | + __SHIFTIN(div, CAR_CLKSRC_HDA2CODEC_2X_DIV)); + + bus_space_write_4(bst, bsh, CAR_RST_DEV_V_CLR_REG, CAR_DEV_V_HDA); + bus_space_write_4(bst, bsh, CAR_RST_DEV_V_CLR_REG, + CAR_DEV_V_HDA2CODEC_2X); bus_space_write_4(bst, bsh, CAR_RST_DEV_W_CLR_REG, CAR_DEV_W_HDA2HDMICODEC); } Index: src/sys/arch/arm/nvidia/tegra_carreg.h diff -u src/sys/arch/arm/nvidia/tegra_carreg.h:1.19 src/sys/arch/arm/nvidia/tegra_carreg.h:1.20 --- src/sys/arch/arm/nvidia/tegra_carreg.h:1.19 Thu Jul 23 15:07:31 2015 +++ src/sys/arch/arm/nvidia/tegra_carreg.h Sat Jul 25 15:50:42 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_carreg.h,v 1.19 2015/07/23 15:07:31 skrll Exp $ */ +/* $NetBSD: tegra_carreg.h,v 1.20 2015/07/25 15:50:42 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -390,6 +390,16 @@ #define CAR_CCLKG_BURST_POLICY_CWAKEUP_SOURCE_CLKM 0 #define CAR_CCLKG_BURST_POLICY_CWAKEUP_SOURCE_PLLX_OUT0_LJ 8 +#define CAR_CLKSRC_HDA2CODEC_2X_REG 0x3e4 +#define CAR_CLKSRC_HDA2CODEC_2X_SRC __BITS(31,29) +#define CAR_CLKSRC_HDA2CODEC_2X_SRC_PLLP_OUT0 0 +#define CAR_CLKSRC_HDA2CODEC_2X_SRC_PLLC2_OUT0 1 +#define CAR_CLKSRC_HDA2CODEC_2X_SRC_PLLC_OUT0 2 +#define CAR_CLKSRC_HDA2CODEC_2X_SRC_PLLC3_OUT0 3 +#define CAR_CLKSRC_HDA2CODEC_2X_SRC_PLLM_OUT0 4 +#define CAR_CLKSRC_HDA2CODEC_2X_SRC_CLKM 6 +#define CAR_CLKSRC_HDA2CODEC_2X_DIV __BITS(7,0) + #define CAR_CLKSRC_SATA_OOB_REG 0x420 #define CAR_CLKSRC_SATA_OOB_SRC __BITS(31,29) #define CAR_CLKSRC_SATA_OOB_SRC_PLLP_OUT0 0 @@ -462,4 +472,12 @@ #define CAR_SATA_PLL_CFG1_PADPLL_PU_POST_DLY __BITS(15,8) #define CAR_SATA_PLL_CFG1_LANE_IDDQ2_PADPLL_IDDQ_DLY __BITS(7,0) +#define CAR_CLKSRC_HDMI_AUDIO_REG 0x668 +#define CAR_CLKSRC_HDMI_AUDIO_SRC __BITS(31,29) +#define CAR_CLKSRC_HDMI_AUDIO_SRC_PLLP_OUT0 0 +#define CAR_CLKSRC_HDMI_AUDIO_SRC_PLLC_OUT0 1 +#define CAR_CLKSRC_HDMI_AUDIO_SRC_PLLC2_OUT0 2 +#define CAR_CLKSRC_HDMI_AUDIO_SRC_CLKM 3 +#define CAR_CLKSRC_HDMI_AUDIO_DIV __BITS(7,0) + #endif /* _ARM_TEGRA_CARREG_H */ Index: src/sys/arch/arm/nvidia/tegra_hdmi.c diff -u src/sys/arch/arm/nvidia/tegra_hdmi.c:1.5 src/sys/arch/arm/nvidia/tegra_hdmi.c:1.6 --- src/sys/arch/arm/nvidia/tegra_hdmi.c:1.5 Thu Jul 23 15:43:06 2015 +++ src/sys/arch/arm/nvidia/tegra_hdmi.c Sat Jul 25 15:50:42 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_hdmi.c,v 1.5 2015/07/23 15:43:06 jmcneill Exp $ */ +/* $NetBSD: tegra_hdmi.c,v 1.6 2015/07/25 15:50:42 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sat Jul 25 15:50:42 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_car.c tegra_carreg.h tegra_hdmi.c tegra_hdmireg.h Log Message: Add HDMI audio support To generate a diff of this commit: cvs rdiff -u -r1.23 -r1.24 src/sys/arch/arm/nvidia/tegra_car.c cvs rdiff -u -r1.19 -r1.20 src/sys/arch/arm/nvidia/tegra_carreg.h cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/nvidia/tegra_hdmi.c cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/nvidia/tegra_hdmireg.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sat Jul 25 15:55:31 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_hdmi.c Log Message: remove debug printfs, dont force hdmi mode To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/nvidia/tegra_hdmi.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/nvidia/tegra_hdmi.c diff -u src/sys/arch/arm/nvidia/tegra_hdmi.c:1.6 src/sys/arch/arm/nvidia/tegra_hdmi.c:1.7 --- src/sys/arch/arm/nvidia/tegra_hdmi.c:1.6 Sat Jul 25 15:50:42 2015 +++ src/sys/arch/arm/nvidia/tegra_hdmi.c Sat Jul 25 15:55:31 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_hdmi.c,v 1.6 2015/07/25 15:50:42 jmcneill Exp $ */ +/* $NetBSD: tegra_hdmi.c,v 1.7 2015/07/25 15:55:31 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_hdmi.c,v 1.6 2015/07/25 15:50:42 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_hdmi.c,v 1.7 2015/07/25 15:55:31 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -236,11 +236,6 @@ tegra_hdmi_connect(struct tegra_hdmi_sof sc-sc_curmode = mode; sc-sc_hdmimode = tegra_hdmi_is_hdmi(sc, ei); -device_printf(sc-sc_dev, connected to %s display\n, sc-sc_hdmimode ? HDMI : DVI); - if (sc-sc_hdmimode == false) { - device_printf(sc-sc_dev, forcing HDMI mode\n); - sc-sc_hdmimode = true; - } tegra_hdmi_enable(sc, pedid); }
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sat Jul 25 15:55:31 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_hdmi.c Log Message: remove debug printfs, dont force hdmi mode To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/nvidia/tegra_hdmi.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Thu Jul 23 23:53:14 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_sdhc.c Log Message: use SDHC_FLAG_NO_TIMEOUT To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/nvidia/tegra_sdhc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Thu Jul 23 23:53:14 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_sdhc.c Log Message: use SDHC_FLAG_NO_TIMEOUT To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/nvidia/tegra_sdhc.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/nvidia/tegra_sdhc.c diff -u src/sys/arch/arm/nvidia/tegra_sdhc.c:1.7 src/sys/arch/arm/nvidia/tegra_sdhc.c:1.8 --- src/sys/arch/arm/nvidia/tegra_sdhc.c:1.7 Thu Jul 23 18:22:05 2015 +++ src/sys/arch/arm/nvidia/tegra_sdhc.c Thu Jul 23 23:53:14 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_sdhc.c,v 1.7 2015/07/23 18:22:05 jmcneill Exp $ */ +/* $NetBSD: tegra_sdhc.c,v 1.8 2015/07/23 23:53:14 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_sdhc.c,v 1.7 2015/07/23 18:22:05 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_sdhc.c,v 1.8 2015/07/23 23:53:14 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -93,6 +93,7 @@ tegra_sdhc_attach(device_t parent, devic sc-sc.sc_flags = SDHC_FLAG_32BIT_ACCESS | SDHC_FLAG_NO_PWR0 | SDHC_FLAG_NO_CLKBASE | + SDHC_FLAG_NO_TIMEOUT | SDHC_FLAG_SINGLE_POWER_WRITE | SDHC_FLAG_USE_DMA; if (SDMMC_8BIT_P(loc-loc_port)) {
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: skrll Date: Thu Jul 23 15:08:19 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_dcreg.h tegra_hdmireg.h Log Message: More defines To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/nvidia/tegra_dcreg.h \ src/sys/arch/arm/nvidia/tegra_hdmireg.h 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/nvidia/tegra_dcreg.h diff -u src/sys/arch/arm/nvidia/tegra_dcreg.h:1.2 src/sys/arch/arm/nvidia/tegra_dcreg.h:1.3 --- src/sys/arch/arm/nvidia/tegra_dcreg.h:1.2 Thu Jul 23 14:31:05 2015 +++ src/sys/arch/arm/nvidia/tegra_dcreg.h Thu Jul 23 15:08:19 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_dcreg.h,v 1.2 2015/07/23 14:31:05 jmcneill Exp $ */ +/* $NetBSD: tegra_dcreg.h,v 1.3 2015/07/23 15:08:19 skrll Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -139,12 +139,20 @@ * Display DISP registers */ #define DC_DISP_DISP_SIGNAL_OPTIONS0_REG 0x1000 +#define DC_DISP_DISP_SIGNAL_OPTIONS0_M1_ENABLE __BIT(26) +#define DC_DISP_DISP_SIGNAL_OPTIONS0_M0_ENABLE __BIT(24) +#define DC_DISP_DISP_SIGNAL_OPTIONS0_V_PULSE3_ENABLE __BIT(20) +#define DC_DISP_DISP_SIGNAL_OPTIONS0_V_PULSE2_ENABLE __BIT(19) +#define DC_DISP_DISP_SIGNAL_OPTIONS0_V_PULSE1_ENABLE __BIT(18) +#define DC_DISP_DISP_SIGNAL_OPTIONS0_V_PULSE0_ENABLE __BIT(16) #define DC_DISP_DISP_SIGNAL_OPTIONS0_H_PULSE2_ENABLE __BIT(12) +#define DC_DISP_DISP_SIGNAL_OPTIONS0_H_PULSE1_ENABLE __BIT(10) +#define DC_DISP_DISP_SIGNAL_OPTIONS0_H_PULSE0_ENABLE __BIT(8) #define DC_DISP_DISP_WIN_OPTIONS_REG 0x1008 #define DC_DISP_DISP_WIN_OPTIONS_HDMI_ENABLE __BIT(30) #define DC_DISP_DISP_WIN_OPTIONS_DSI_ENABLE __BIT(29) -#define DC_DISP_DISP_WIN_OPTIONS_SOR_ENABLE __BIT(28) +#define DC_DISP_DISP_WIN_OPTIONS_SOR_ENABLE __BIT(25) #define DC_DISP_DISP_WIN_OPTIONS_CURSOR_ENABLE __BIT(16) #define DC_DISP_DISP_TIMING_OPTIONS_REG 0x1014 Index: src/sys/arch/arm/nvidia/tegra_hdmireg.h diff -u src/sys/arch/arm/nvidia/tegra_hdmireg.h:1.2 src/sys/arch/arm/nvidia/tegra_hdmireg.h:1.3 --- src/sys/arch/arm/nvidia/tegra_hdmireg.h:1.2 Thu Jul 23 14:31:05 2015 +++ src/sys/arch/arm/nvidia/tegra_hdmireg.h Thu Jul 23 15:08:19 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_hdmireg.h,v 1.2 2015/07/23 14:31:05 jmcneill Exp $ */ +/* $NetBSD: tegra_hdmireg.h,v 1.3 2015/07/23 15:08:19 skrll Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -216,7 +216,15 @@ #define HDMI_NV_PDISP_SOR_CRCA_REG0x170 #define HDMI_NV_PDISP_SOR_CRCB_REG0x174 #define HDMI_NV_PDISP_SOR_BLANK_REG0x178 + #define HDMI_NV_PDISP_SOR_SEQ_CTL_REG0x17c +#define HDMI_NV_PDISP_SOR_SEQ_CTL_SWITCH __BIT(30) +#define HDMI_NV_PDISP_SOR_SEQ_CTL_STATUS __BIT(28) +#define HDMI_NV_PDISP_SOR_SEQ_CTL_PC__BITS(19,16) +#define HDMI_NV_PDISP_SOR_SEQ_CTL_PD_PC_ALT __BITS(15,12) +#define HDMI_NV_PDISP_SOR_SEQ_CTL_PD_PC__BITS(11,8) +#define HDMI_NV_PDISP_SOR_SEQ_CTL_PU_PC_ALT __BITS(7,4) +#define HDMI_NV_PDISP_SOR_SEQ_CTL_PU_PC__BITS(3,0) #define HDMI_NV_PDISP_SOR_SEQ_INST0_REG0x180 #define HDMI_NV_PDISP_SOR_SEQ_INST1_REG0x184
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: skrll Date: Thu Jul 23 15:07:31 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_carreg.h Log Message: CAR_PLLD_BASE_REG defines To generate a diff of this commit: cvs rdiff -u -r1.18 -r1.19 src/sys/arch/arm/nvidia/tegra_carreg.h 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/nvidia/tegra_carreg.h diff -u src/sys/arch/arm/nvidia/tegra_carreg.h:1.18 src/sys/arch/arm/nvidia/tegra_carreg.h:1.19 --- src/sys/arch/arm/nvidia/tegra_carreg.h:1.18 Sat May 30 13:25:55 2015 +++ src/sys/arch/arm/nvidia/tegra_carreg.h Thu Jul 23 15:07:31 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_carreg.h,v 1.18 2015/05/30 13:25:55 jmcneill Exp $ */ +/* $NetBSD: tegra_carreg.h,v 1.19 2015/07/23 15:07:31 skrll Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -88,6 +88,20 @@ #define CAR_PLLU_BASE_DIVN __BITS(17,8) #define CAR_PLLU_BASE_DIVM __BITS(4,0) +#define CAR_PLLD_BASE_REG 0xd0 +#define CAR_PLLD_BASE_BYPASS __BIT(31) +#define CAR_PLLD_BASE_ENABLE __BIT(30) +#define CAR_PLLD_BASE_REF_DIS __BIT(29) +#define CAR_PLLD_BASE_LOCK __BIT(27) +#define CAR_PLLD_BASE_CLKENABLE_CSI __BIT(26) +#define CAR_PLLD_BASE_DSIA_CLK_SRC __BIT(25) +#define CAR_PLLD_BASE_CSI_CLK_SRC __BIT(23) +#define CAR_PLLD_BASE_DIVP __BITS(22,20) +#define CAR_PLLD_BASE_DIVN __BITS(18,8) +#define CAR_PLLD_BASE_DIVM __BITS(4,0) + +#define CAR_PLLD_MISC_REG 0xdc + #define CAR_PLLX_BASE_REG 0xe0 #define CAR_PLLX_BASE_BYPASS __BIT(31) #define CAR_PLLX_BASE_ENABLE __BIT(30)
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Thu Jul 23 14:31:05 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_dc.c tegra_dcreg.h tegra_genfb.c tegra_hdmi.c tegra_hdmireg.h Log Message: add Tegra124 HDMI support To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/nvidia/tegra_dc.c cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/nvidia/tegra_dcreg.h \ src/sys/arch/arm/nvidia/tegra_genfb.c \ src/sys/arch/arm/nvidia/tegra_hdmireg.h cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/nvidia/tegra_hdmi.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/nvidia/tegra_dc.c diff -u src/sys/arch/arm/nvidia/tegra_dc.c:1.2 src/sys/arch/arm/nvidia/tegra_dc.c:1.3 --- src/sys/arch/arm/nvidia/tegra_dc.c:1.2 Wed Jul 8 01:23:28 2015 +++ src/sys/arch/arm/nvidia/tegra_dc.c Thu Jul 23 14:31:05 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_dc.c,v 1.2 2015/07/08 01:23:28 jmcneill Exp $ */ +/* $NetBSD: tegra_dc.c,v 1.3 2015/07/23 14:31:05 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_dc.c,v 1.2 2015/07/08 01:23:28 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_dc.c,v 1.3 2015/07/23 14:31:05 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -46,7 +46,7 @@ __KERNEL_RCSID(0, $NetBSD: tegra_dc.c,v #define TEGRA_DC_NPORTS 2 #define TEGRA_DC_DEPTH 32 -#define TEGRA_DC_FBALIGN 16 +#define TEGRA_DC_FBALIGN PAGE_SIZE static int tegra_dc_match(device_t, cfdata_t, void *); static void tegra_dc_attach(device_t, device_t, void *); @@ -145,6 +145,8 @@ tegra_dc_allocmem(struct tegra_dc_softc sc-sc_dmasize = size; + memset(sc-sc_dmap, 0, size); + return 0; destroy: @@ -185,6 +187,10 @@ tegra_dc_init(struct tegra_dc_softc *sc, static void tegra_dc_init_win(struct tegra_dc_softc *sc, const struct videomode *mode) { + /* Write access control */ + DC_WRITE(sc, DC_CMD_STATE_ACCESS_REG, + DC_CMD_STATE_ACCESS_WRITE_MUX | DC_CMD_STATE_ACCESS_READ_MUX); + /* Enable window A programming */ DC_WRITE(sc, DC_CMD_DISPLAY_WINDOW_HEADER_REG, DC_CMD_DISPLAY_WINDOW_HEADER_WINDOW_A_SELECT); @@ -199,6 +205,11 @@ tegra_dc_init_win(struct tegra_dc_softc __SHIFTIN(DC_WINC_A_BYTE_SWAP_SWAP_NOSWAP, DC_WINC_A_BYTE_SWAP_SWAP)); + /* Initial DDA */ + DC_WRITE(sc, DC_WINC_A_H_INITIAL_DDA_REG, 0); + DC_WRITE(sc, DC_WINC_A_V_INITIAL_DDA_REG, 0); + DC_WRITE(sc, DC_WINC_A_DDA_INCREMENT_REG, 0x10001000); + /* Window position, size, stride */ DC_WRITE(sc, DC_WINC_A_POSITION_REG, __SHIFTIN(0, DC_WINC_A_POSITION_V) | @@ -218,6 +229,10 @@ tegra_dc_init_win(struct tegra_dc_softc DC_WRITE(sc, DC_WINBUF_A_START_ADDR_REG, (uint32_t)sc-sc_dmamap-dm_segs[0].ds_addr); + /* Offsets */ + DC_WRITE(sc, DC_WINBUF_A_ADDR_H_OFFSET_REG, 0); + DC_WRITE(sc, DC_WINBUF_A_ADDR_V_OFFSET_REG, 0); + /* Surface kind */ DC_WRITE(sc, DC_WINBUF_A_SURFACE_KIND_REG, __SHIFTIN(DC_WINBUF_A_SURFACE_KIND_SURFACE_KIND_PITCH, @@ -232,14 +247,35 @@ static void tegra_dc_init_disp(struct tegra_dc_softc *sc, const struct videomode *mode) { const u_int hspw = mode-hsync_end - mode-hsync_start; - const u_int hbp = mode-htotal - mode-hsync_start; + const u_int hbp = mode-htotal - mode-hsync_end; const u_int hfp = mode-hsync_start - mode-hdisplay; const u_int vspw = mode-vsync_end - mode-vsync_start; - const u_int vbp = mode-vtotal - mode-vsync_start; + const u_int vbp = mode-vtotal - mode-vsync_end; const u_int vfp = mode-vsync_start - mode-vdisplay; + DC_WRITE(sc, DC_DISP_DISP_TIMING_OPTIONS_REG, + __SHIFTIN(1, DC_DISP_DISP_TIMING_OPTIONS_VSYNC_POS)); + DC_WRITE(sc, DC_DISP_DISP_COLOR_CONTROL_REG, + __SHIFTIN(DC_DISP_DISP_COLOR_CONTROL_BASE_COLOR_SIZE_888, + DC_DISP_DISP_COLOR_CONTROL_BASE_COLOR_SIZE)); + DC_WRITE(sc, DC_DISP_DISP_SIGNAL_OPTIONS0_REG, + DC_DISP_DISP_SIGNAL_OPTIONS0_H_PULSE2_ENABLE); + DC_WRITE(sc, DC_DISP_H_PULSE2_CONTROL_REG, + __SHIFTIN(DC_DISP_H_PULSE2_CONTROL_V_QUAL_VACTIVE, + DC_DISP_H_PULSE2_CONTROL_V_QUAL) | + __SHIFTIN(DC_DISP_H_PULSE2_CONTROL_LAST_END_A, + DC_DISP_H_PULSE2_CONTROL_LAST)); + + u_int pulse_start = 1 + hspw + hbp - 10; + DC_WRITE(sc, DC_DISP_H_PULSE2_POSITION_A_REG, + __SHIFTIN(pulse_start, DC_DISP_H_PULSE2_POSITION_A_START) | + __SHIFTIN(pulse_start + 8, DC_DISP_H_PULSE2_POSITION_A_END)); + /* Pixel clock */ - DC_WRITE(sc, DC_DISP_DISP_CLOCK_CONTROL_REG, 0); + const u_int div = (tegra_car_plld2_rate() * 2) / (mode-dot_clock * 1000) - 2; + DC_WRITE(sc, DC_DISP_DISP_CLOCK_CONTROL_REG, + __SHIFTIN(0, DC_DISP_DISP_CLOCK_CONTROL_PIXEL_CLK_DIVIDER) | + __SHIFTIN(div, DC_DISP_DISP_CLOCK_CONTROL_SHIFT_CLK_DIVIDER)); /* Mode timings */ DC_WRITE(sc, DC_DISP_REF_TO_SYNC_REG, @@ -259,10 +295,9 @@
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Thu Jul 23 14:31:05 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_dc.c tegra_dcreg.h tegra_genfb.c tegra_hdmi.c tegra_hdmireg.h Log Message: add Tegra124 HDMI support To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/nvidia/tegra_dc.c cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/nvidia/tegra_dcreg.h \ src/sys/arch/arm/nvidia/tegra_genfb.c \ src/sys/arch/arm/nvidia/tegra_hdmireg.h cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/nvidia/tegra_hdmi.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Thu Jul 23 14:30:07 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_car.c Log Message: fix some clocks; many periph dividers are in units of 0.5x not 1x, use PLLD2 for DC, use correct pldiv value for PLLD2 To generate a diff of this commit: cvs rdiff -u -r1.21 -r1.22 src/sys/arch/arm/nvidia/tegra_car.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: skrll Date: Thu Jul 23 15:07:31 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_carreg.h Log Message: CAR_PLLD_BASE_REG defines To generate a diff of this commit: cvs rdiff -u -r1.18 -r1.19 src/sys/arch/arm/nvidia/tegra_carreg.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Thu Jul 23 14:30:07 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_car.c Log Message: fix some clocks; many periph dividers are in units of 0.5x not 1x, use PLLD2 for DC, use correct pldiv value for PLLD2 To generate a diff of this commit: cvs rdiff -u -r1.21 -r1.22 src/sys/arch/arm/nvidia/tegra_car.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/nvidia/tegra_car.c diff -u src/sys/arch/arm/nvidia/tegra_car.c:1.21 src/sys/arch/arm/nvidia/tegra_car.c:1.22 --- src/sys/arch/arm/nvidia/tegra_car.c:1.21 Sat May 30 13:25:55 2015 +++ src/sys/arch/arm/nvidia/tegra_car.c Thu Jul 23 14:30:06 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_car.c,v 1.21 2015/05/30 13:25:55 jmcneill Exp $ */ +/* $NetBSD: tegra_car.c,v 1.22 2015/07/23 14:30:06 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_car.c,v 1.21 2015/05/30 13:25:55 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_car.c,v 1.22 2015/07/23 14:30:06 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -115,7 +115,7 @@ tegra_car_init(struct tegra_car_softc *s tegra_reg_set_clear(bst, bsh, CAR_PLLD2_BASE_REG, __SHIFTIN(1, CAR_PLLD2_BASE_MDIV) | __SHIFTIN(99, CAR_PLLD2_BASE_NDIV) | - __SHIFTIN(2, CAR_PLLD2_BASE_PLDIV), + __SHIFTIN(1, CAR_PLLD2_BASE_PLDIV), CAR_PLLD2_BASE_REF_SRC_SEL | CAR_PLLD2_BASE_PLDIV | CAR_PLLD2_BASE_NDIV | CAR_PLLD2_BASE_MDIV); } @@ -348,7 +348,7 @@ tegra_car_uart_rate(u_int port) } if (__SHIFTOUT(src, CAR_CLKSRC_UART_DIV_ENB)) { - const u_int div = __SHIFTOUT(src, CAR_CLKSRC_UART_DIV) + 1; + const u_int div = (__SHIFTOUT(src, CAR_CLKSRC_UART_DIV) / 2) + 1; return src_rate / div; } else { return src_rate; @@ -374,7 +374,7 @@ tegra_car_periph_sdmmc_rate(u_int port) const uint32_t src = bus_space_read_4(bst, bsh, src_reg); - const u_int div = __SHIFTOUT(src, CAR_CLKSRC_SDMMC_DIV) + 1; + const u_int div = (__SHIFTOUT(src, CAR_CLKSRC_SDMMC_DIV) / 2) + 1; return tegra_car_pllp0_rate() / div; } @@ -428,7 +428,7 @@ tegra_car_periph_sdmmc_set_div(u_int por /* update clk div */ src = __SHIFTIN(CAR_CLKSRC_SDMMC_SRC_PLLP_OUT0, CAR_CLKSRC_SDMMC_SRC); - src |= __SHIFTIN(div - 1, CAR_CLKSRC_SDMMC_DIV); + src |= __SHIFTIN((div - 1) * 2, CAR_CLKSRC_SDMMC_DIV); bus_space_write_4(bst, bsh, src_reg, src); /* leave reset */ @@ -576,7 +576,7 @@ tegra_car_periph_sata_enable(void) bus_space_write_4(bst, bsh, CAR_CLKSRC_SATA_OOB_REG, __SHIFTIN(CAR_CLKSRC_SATA_OOB_SRC_PLLP_OUT0, CAR_CLKSRC_SATA_OOB_SRC) | - __SHIFTIN(sataoob_div - 1, CAR_CLKSRC_SATA_OOB_DIV)); + __SHIFTIN((sataoob_div - 1) * 2, CAR_CLKSRC_SATA_OOB_DIV)); /* Set SATA clock source to PLLP, 102MHz */ const u_int sata_div = 4; @@ -584,7 +584,7 @@ tegra_car_periph_sata_enable(void) CAR_CLKSRC_SATA_AUX_CLK_ENB | __SHIFTIN(CAR_CLKSRC_SATA_SRC_PLLP_OUT0, CAR_CLKSRC_SATA_SRC) | - __SHIFTIN(sata_div - 1, CAR_CLKSRC_SATA_DIV)); + __SHIFTIN((sata_div - 1) * 2, CAR_CLKSRC_SATA_DIV)); /* Ungate SAX partition in the PMC */ tegra_pmc_power(PMC_PARTID_SAX, true); @@ -715,10 +715,10 @@ tegra_car_hdmi_enable(u_int rate) } /* Set clock source to PLLD2 */ - const u_int div = howmany(tegra_car_plld2_rate(), rate); + const u_int div = (tegra_car_plld2_rate() * 2) / rate - 2; bus_space_write_4(bst, bsh, CAR_CLKSRC_HDMI_REG, __SHIFTIN(CAR_CLKSRC_HDMI_SRC_PLLD2_OUT0, CAR_CLKSRC_HDMI_SRC) | - __SHIFTIN(div - 1, CAR_CLKSRC_HDMI_DIV)); + __SHIFTIN(div, CAR_CLKSRC_HDMI_DIV)); /* Leave reset */ bus_space_write_4(bst, bsh, CAR_RST_DEV_H_CLR_REG, CAR_DEV_H_HDMI); @@ -758,9 +758,9 @@ tegra_car_dc_enable(u_int port) tegra_pmc_power(partid, true); tegra_pmc_remove_clamping(partid); - /* Select PLLP for clock source */ + /* Select PLLD2 for clock source */ bus_space_write_4(bst, bsh, src_reg, - __SHIFTIN(CAR_CLKSRC_DISP_SRC_PLLP_OUT0, + __SHIFTIN(CAR_CLKSRC_DISP_SRC_PLLD2_OUT0, CAR_CLKSRC_DISP_SRC)); /* Leave reset */
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Thu Jul 23 15:43:06 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_hdmi.c Log Message: no need for exact match on tmds mode, just use the closest match To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/nvidia/tegra_hdmi.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/nvidia/tegra_hdmi.c diff -u src/sys/arch/arm/nvidia/tegra_hdmi.c:1.4 src/sys/arch/arm/nvidia/tegra_hdmi.c:1.5 --- src/sys/arch/arm/nvidia/tegra_hdmi.c:1.4 Thu Jul 23 14:31:05 2015 +++ src/sys/arch/arm/nvidia/tegra_hdmi.c Thu Jul 23 15:43:06 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_hdmi.c,v 1.4 2015/07/23 14:31:05 jmcneill Exp $ */ +/* $NetBSD: tegra_hdmi.c,v 1.5 2015/07/23 15:43:06 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_hdmi.c,v 1.4 2015/07/23 14:31:05 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_hdmi.c,v 1.5 2015/07/23 15:43:06 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -252,11 +252,15 @@ tegra_hdmi_enable(struct tegra_hdmi_soft tegra_car_hdmi_enable(mode-dot_clock * 1000); for (n = 0; n __arraycount(tegra_hdmi_tmds_config); n++) { - if (tegra_hdmi_tmds_config[n].dot_clock == mode-dot_clock) { - tmds = tegra_hdmi_tmds_config[n]; + if (tegra_hdmi_tmds_config[n].dot_clock = mode-dot_clock) { break; } } + if (n __arraycount(tegra_hdmi_tmds_config)) { + tmds = tegra_hdmi_tmds_config[n]; + } else { + tmds = tegra_hdmi_tmds_config[__arraycount(tegra_hdmi_tmds_config) - 1]; + } if (tmds != NULL) { HDMI_WRITE(sc, HDMI_NV_PDISP_SOR_PLL0_REG, tmds-sor_pll0); HDMI_WRITE(sc, HDMI_NV_PDISP_SOR_PLL1_REG, tmds-sor_pll1);
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: skrll Date: Thu Jul 23 15:08:19 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_dcreg.h tegra_hdmireg.h Log Message: More defines To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/nvidia/tegra_dcreg.h \ src/sys/arch/arm/nvidia/tegra_hdmireg.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Thu Jul 23 15:43:06 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_hdmi.c Log Message: no need for exact match on tmds mode, just use the closest match To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/nvidia/tegra_hdmi.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Thu Jul 23 18:22:05 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_car.c tegra_sdhc.c tegra_var.h Log Message: Support fractional dividers. This lets us use 48MHz for SDMMC HS mode instead of 45.333MHz. To generate a diff of this commit: cvs rdiff -u -r1.22 -r1.23 src/sys/arch/arm/nvidia/tegra_car.c \ src/sys/arch/arm/nvidia/tegra_var.h cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/nvidia/tegra_sdhc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Thu Jul 23 18:22:05 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_car.c tegra_sdhc.c tegra_var.h Log Message: Support fractional dividers. This lets us use 48MHz for SDMMC HS mode instead of 45.333MHz. To generate a diff of this commit: cvs rdiff -u -r1.22 -r1.23 src/sys/arch/arm/nvidia/tegra_car.c \ src/sys/arch/arm/nvidia/tegra_var.h cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/nvidia/tegra_sdhc.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/nvidia/tegra_car.c diff -u src/sys/arch/arm/nvidia/tegra_car.c:1.22 src/sys/arch/arm/nvidia/tegra_car.c:1.23 --- src/sys/arch/arm/nvidia/tegra_car.c:1.22 Thu Jul 23 14:30:06 2015 +++ src/sys/arch/arm/nvidia/tegra_car.c Thu Jul 23 18:22:05 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_car.c,v 1.22 2015/07/23 14:30:06 jmcneill Exp $ */ +/* $NetBSD: tegra_car.c,v 1.23 2015/07/23 18:22:05 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_car.c,v 1.22 2015/07/23 14:30:06 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_car.c,v 1.23 2015/07/23 18:22:05 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -374,13 +374,13 @@ tegra_car_periph_sdmmc_rate(u_int port) const uint32_t src = bus_space_read_4(bst, bsh, src_reg); - const u_int div = (__SHIFTOUT(src, CAR_CLKSRC_SDMMC_DIV) / 2) + 1; + const u_int div = __SHIFTOUT(src, CAR_CLKSRC_SDMMC_DIV) + 2; - return tegra_car_pllp0_rate() / div; + return (tegra_car_pllp0_rate() * 2) / div; } int -tegra_car_periph_sdmmc_set_div(u_int port, u_int div) +tegra_car_periph_sdmmc_set_rate(u_int port, u_int rate) { bus_space_tag_t bst; bus_space_handle_t bsh; @@ -388,7 +388,7 @@ tegra_car_periph_sdmmc_set_div(u_int por u_int dev_bit; uint32_t src; - KASSERT(div 0); + KASSERT(rate 0); tegra_car_get_bs(bst, bsh); @@ -425,10 +425,12 @@ tegra_car_periph_sdmmc_set_div(u_int por /* enable clk */ bus_space_write_4(bst, bsh, enb_reg, dev_bit); + const u_int div = howmany(tegra_car_pllp0_rate() * 2, rate) - 2; + /* update clk div */ src = __SHIFTIN(CAR_CLKSRC_SDMMC_SRC_PLLP_OUT0, CAR_CLKSRC_SDMMC_SRC); - src |= __SHIFTIN((div - 1) * 2, CAR_CLKSRC_SDMMC_DIV); + src |= __SHIFTIN(div, CAR_CLKSRC_SDMMC_DIV); bus_space_write_4(bst, bsh, src_reg, src); /* leave reset */ Index: src/sys/arch/arm/nvidia/tegra_var.h diff -u src/sys/arch/arm/nvidia/tegra_var.h:1.22 src/sys/arch/arm/nvidia/tegra_var.h:1.23 --- src/sys/arch/arm/nvidia/tegra_var.h:1.22 Wed Jul 8 01:23:28 2015 +++ src/sys/arch/arm/nvidia/tegra_var.h Thu Jul 23 18:22:05 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_var.h,v 1.22 2015/07/08 01:23:28 jmcneill Exp $ */ +/* $NetBSD: tegra_var.h,v 1.23 2015/07/23 18:22:05 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -96,7 +96,7 @@ u_int tegra_car_pllp0_rate(void); u_int tegra_car_plld2_rate(void); u_int tegra_car_uart_rate(u_int); u_int tegra_car_periph_sdmmc_rate(u_int); -int tegra_car_periph_sdmmc_set_div(u_int, u_int); +int tegra_car_periph_sdmmc_set_rate(u_int, u_int); int tegra_car_periph_usb_enable(u_int); void tegra_car_periph_hda_enable(void); void tegra_car_periph_sata_enable(void); Index: src/sys/arch/arm/nvidia/tegra_sdhc.c diff -u src/sys/arch/arm/nvidia/tegra_sdhc.c:1.6 src/sys/arch/arm/nvidia/tegra_sdhc.c:1.7 --- src/sys/arch/arm/nvidia/tegra_sdhc.c:1.6 Sat May 30 18:53:39 2015 +++ src/sys/arch/arm/nvidia/tegra_sdhc.c Thu Jul 23 18:22:05 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_sdhc.c,v 1.6 2015/05/30 18:53:39 jmcneill Exp $ */ +/* $NetBSD: tegra_sdhc.c,v 1.7 2015/07/23 18:22:05 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_sdhc.c,v 1.6 2015/05/30 18:53:39 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_sdhc.c,v 1.7 2015/07/23 18:22:05 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -122,12 +122,7 @@ tegra_sdhc_attach(device_t parent, devic if (sc-sc_pin_wp) sc-sc.sc_vendor_write_protect = tegra_sdhc_write_protect; -#if notyet - tegra_car_periph_sdmmc_set_div(sc-sc_port, 1); -#else - const u_int div = howmany(tegra_car_pllp0_rate() / 1000, 5); - tegra_car_periph_sdmmc_set_div(sc-sc_port, div); -#endif + tegra_car_periph_sdmmc_set_rate(sc-sc_port, 5000); sc-sc.sc_clkbase = tegra_car_periph_sdmmc_rate(sc-sc_port) / 1000; aprint_naive(\n);
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Wed Jul 8 01:23:28 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_dc.c tegra_hdmi.c tegra_var.h Log Message: expose EDID to userland To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/nvidia/tegra_dc.c cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/nvidia/tegra_hdmi.c cvs rdiff -u -r1.21 -r1.22 src/sys/arch/arm/nvidia/tegra_var.h 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/nvidia/tegra_dc.c diff -u src/sys/arch/arm/nvidia/tegra_dc.c:1.1 src/sys/arch/arm/nvidia/tegra_dc.c:1.2 --- src/sys/arch/arm/nvidia/tegra_dc.c:1.1 Mon May 18 19:32:48 2015 +++ src/sys/arch/arm/nvidia/tegra_dc.c Wed Jul 8 01:23:28 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_dc.c,v 1.1 2015/05/18 19:32:48 jmcneill Exp $ */ +/* $NetBSD: tegra_dc.c,v 1.2 2015/07/08 01:23:28 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_dc.c,v 1.1 2015/05/18 19:32:48 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_dc.c,v 1.2 2015/07/08 01:23:28 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -296,7 +296,7 @@ tegra_dc_port(device_t dev) int tegra_dc_enable(device_t dev, device_t outputdev, -const struct videomode *mode) +const struct videomode *mode, const uint8_t *edid) { struct tegra_dc_softc * const sc = device_private(dev); prop_dictionary_t prop = device_properties(dev); @@ -339,6 +339,13 @@ tegra_dc_enable(device_t dev, device_t o sc-sc_fbdev = config_found(sc-sc_dev, tfb, tegra_dc_print); + if (sc-sc_fbdev != NULL edid != NULL) { + prop_data_t data = prop_data_create_data(edid, 128); + prop_dictionary_set(device_properties(sc-sc_fbdev), + EDID, data); + prop_object_release(data); + } + return 0; } Index: src/sys/arch/arm/nvidia/tegra_hdmi.c diff -u src/sys/arch/arm/nvidia/tegra_hdmi.c:1.2 src/sys/arch/arm/nvidia/tegra_hdmi.c:1.3 --- src/sys/arch/arm/nvidia/tegra_hdmi.c:1.2 Mon May 18 21:03:36 2015 +++ src/sys/arch/arm/nvidia/tegra_hdmi.c Wed Jul 8 01:23:28 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_hdmi.c,v 1.2 2015/05/18 21:03:36 jmcneill Exp $ */ +/* $NetBSD: tegra_hdmi.c,v 1.3 2015/07/08 01:23:28 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_hdmi.c,v 1.2 2015/05/18 21:03:36 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_hdmi.c,v 1.3 2015/07/08 01:23:28 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -92,7 +92,7 @@ struct tegra_hdmi_softc { static void tegra_hdmi_hpd(struct tegra_hdmi_softc *); static void tegra_hdmi_connect(struct tegra_hdmi_softc *); static void tegra_hdmi_disconnect(struct tegra_hdmi_softc *); -static void tegra_hdmi_enable(struct tegra_hdmi_softc *); +static void tegra_hdmi_enable(struct tegra_hdmi_softc *, const uint8_t *); static int tegra_hdmi_sor_start(struct tegra_hdmi_softc *); CFATTACH_DECL_NEW(tegra_hdmi, sizeof(struct tegra_hdmi_softc), @@ -190,13 +190,14 @@ static void tegra_hdmi_connect(struct tegra_hdmi_softc *sc) { const struct videomode *mode; - char edid[128]; + char edid[128], *pedid = NULL; struct edid_info ei; int retry = 4, error; + memset(ei, 0, sizeof(ei)); + if (sc-sc_ddcdev) { memset(edid, 0, sizeof(edid)); - memset(ei, 0, sizeof(ei)); while (--retry 0) { error = ddc_dev_read_edid(sc-sc_ddcdev, edid, @@ -212,10 +213,11 @@ tegra_hdmi_connect(struct tegra_hdmi_sof if (edid_parse(edid, ei) != 0) { device_printf(sc-sc_dev, failed to parse EDID\n); -#ifdef TEGRA_HDMI_DEBUG } else { +#ifdef TEGRA_HDMI_DEBUG edid_print(ei); #endif +pedid = edid; } } } @@ -226,7 +228,7 @@ tegra_hdmi_connect(struct tegra_hdmi_sof } sc-sc_curmode = mode; - tegra_hdmi_enable(sc); + tegra_hdmi_enable(sc, pedid); } static void @@ -235,7 +237,7 @@ tegra_hdmi_disconnect(struct tegra_hdmi_ } static void -tegra_hdmi_enable(struct tegra_hdmi_softc *sc) +tegra_hdmi_enable(struct tegra_hdmi_softc *sc, const uint8_t *edid) { const struct tegra_hdmi_tmds_config *tmds = NULL; const struct videomode *mode = sc-sc_curmode; @@ -266,7 +268,7 @@ tegra_hdmi_enable(struct tegra_hdmi_soft tmds-sor_pad_ctls0); } - tegra_dc_enable(sc-sc_displaydev, sc-sc_dev, mode); + tegra_dc_enable(sc-sc_displaydev, sc-sc_dev, mode, edid); const u_int div = (mode-dot_clock / 1000) * 4; HDMI_WRITE(sc, HDMI_NV_PDISP_SOR_REFCLK_REG, Index: src/sys/arch/arm/nvidia/tegra_var.h diff -u src/sys/arch/arm/nvidia/tegra_var.h:1.21 src/sys/arch/arm/nvidia/tegra_var.h:1.22 --- src/sys/arch/arm/nvidia/tegra_var.h:1.21 Sun May 31 14:41:59 2015 +++ src/sys/arch/arm/nvidia/tegra_var.h Wed Jul 8 01:23:28 2015 @@ -1,4 +1,4 @@
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Wed Jul 8 01:23:28 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_dc.c tegra_hdmi.c tegra_var.h Log Message: expose EDID to userland To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/nvidia/tegra_dc.c cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/nvidia/tegra_hdmi.c cvs rdiff -u -r1.21 -r1.22 src/sys/arch/arm/nvidia/tegra_var.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: skrll Date: Wed Jun 3 11:43:18 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: soc_tegra124.c Log Message: Use arm_dmb. No functional change To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/nvidia/soc_tegra124.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/nvidia/soc_tegra124.c diff -u src/sys/arch/arm/nvidia/soc_tegra124.c:1.5 src/sys/arch/arm/nvidia/soc_tegra124.c:1.6 --- src/sys/arch/arm/nvidia/soc_tegra124.c:1.5 Sun May 31 14:42:56 2015 +++ src/sys/arch/arm/nvidia/soc_tegra124.c Wed Jun 3 11:43:18 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: soc_tegra124.c,v 1.5 2015/05/31 14:42:56 jmcneill Exp $ */ +/* $NetBSD: soc_tegra124.c,v 1.6 2015/06/03 11:43:18 skrll Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -30,7 +30,7 @@ #include opt_multiprocessor.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: soc_tegra124.c,v 1.5 2015/05/31 14:42:56 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: soc_tegra124.c,v 1.6 2015/06/03 11:43:18 skrll Exp $); #include sys/param.h #include sys/bus.h @@ -150,7 +150,7 @@ tegra124_mpinit(void) tegra_pmc_power(PMC_PARTID_CPU3, true); started |= __BIT(3); for (u_int i = 0x1000; i 0; i--) { - __asm __volatile(dmb ::: memory); + arm_dmb(); if (arm_cpu_hatched == started) break; }
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: skrll Date: Wed Jun 3 11:43:18 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: soc_tegra124.c Log Message: Use arm_dmb. No functional change To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/nvidia/soc_tegra124.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sun May 31 14:41:59 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_i2c.c tegra_var.h Log Message: add external function for writing to dvc (I2C5) devices To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/nvidia/tegra_i2c.c cvs rdiff -u -r1.20 -r1.21 src/sys/arch/arm/nvidia/tegra_var.h 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/nvidia/tegra_i2c.c diff -u src/sys/arch/arm/nvidia/tegra_i2c.c:1.4 src/sys/arch/arm/nvidia/tegra_i2c.c:1.5 --- src/sys/arch/arm/nvidia/tegra_i2c.c:1.4 Sun May 17 01:26:22 2015 +++ src/sys/arch/arm/nvidia/tegra_i2c.c Sun May 31 14:41:59 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_i2c.c,v 1.4 2015/05/17 01:26:22 jmcneill Exp $ */ +/* $NetBSD: tegra_i2c.c,v 1.5 2015/05/31 14:41:59 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_i2c.c,v 1.4 2015/05/17 01:26:22 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_i2c.c,v 1.5 2015/05/31 14:41:59 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -418,3 +418,20 @@ tegra_i2c_read(struct tegra_i2c_softc *s return tegra_i2c_wait(sc, flags); } + +void +tegra_i2c_dvc_write(uint8_t addr, uint32_t data, size_t datalen) +{ + bus_space_tag_t bst = armv7_generic_bs_tag; + bus_space_handle_t bsh; + + bus_space_subregion(bst, tegra_apb_bsh, TEGRA_I2C5_OFFSET, + TEGRA_I2C5_SIZE, bsh); + + bus_space_write_4(bst, bsh, I2C_CMD_ADDR0_REG, addr 1); + bus_space_write_4(bst, bsh, I2C_CMD_DATA1_REG, data); + bus_space_write_4(bst, bsh, I2C_CNFG_REG, + __SHIFTIN(datalen - 1, I2C_CNFG_LENGTH) | + I2C_CNFG_NEW_MASTER_FSM | + I2C_CNFG_SEND); +} Index: src/sys/arch/arm/nvidia/tegra_var.h diff -u src/sys/arch/arm/nvidia/tegra_var.h:1.20 src/sys/arch/arm/nvidia/tegra_var.h:1.21 --- src/sys/arch/arm/nvidia/tegra_var.h:1.20 Sat May 30 13:25:55 2015 +++ src/sys/arch/arm/nvidia/tegra_var.h Sun May 31 14:41:59 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_var.h,v 1.20 2015/05/30 13:25:55 jmcneill Exp $ */ +/* $NetBSD: tegra_var.h,v 1.21 2015/05/31 14:41:59 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -140,6 +140,8 @@ void tegra_pmc_power(u_int, bool); void tegra_pmc_remove_clamping(u_int); void tegra_pmc_hdmi_enable(void); +void tegra_i2c_dvc_write(uint8_t, uint32_t, size_t); + psize_t tegra_mc_memsize(void); void tegra_xusbpad_sata_enable(void);
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sun May 31 14:41:59 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_i2c.c tegra_var.h Log Message: add external function for writing to dvc (I2C5) devices To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/nvidia/tegra_i2c.c cvs rdiff -u -r1.20 -r1.21 src/sys/arch/arm/nvidia/tegra_var.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sun May 31 14:42:56 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: soc_tegra124.c Log Message: set VDD_CPU to 1.4V To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/nvidia/soc_tegra124.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/nvidia/soc_tegra124.c diff -u src/sys/arch/arm/nvidia/soc_tegra124.c:1.4 src/sys/arch/arm/nvidia/soc_tegra124.c:1.5 --- src/sys/arch/arm/nvidia/soc_tegra124.c:1.4 Sun May 17 06:15:50 2015 +++ src/sys/arch/arm/nvidia/soc_tegra124.c Sun May 31 14:42:56 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: soc_tegra124.c,v 1.4 2015/05/17 06:15:50 matt Exp $ */ +/* $NetBSD: soc_tegra124.c,v 1.5 2015/05/31 14:42:56 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -30,7 +30,7 @@ #include opt_multiprocessor.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: soc_tegra124.c,v 1.4 2015/05/17 06:15:50 matt Exp $); +__KERNEL_RCSID(0, $NetBSD: soc_tegra124.c,v 1.5 2015/05/31 14:42:56 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -77,6 +77,11 @@ static struct tegra124_cpufreq_rate { void tegra124_cpuinit(void) { + /* Set VDD_CPU voltage to 1.4V */ + tegra_car_periph_i2c_enable(4, 20400); + tegra_i2c_dvc_write(0x40, 0x4f00, 2); + delay(1); + tegra_cpufreq_register(tegra124_cpufreq_func); }
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sun May 31 14:42:56 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: soc_tegra124.c Log Message: set VDD_CPU to 1.4V To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/nvidia/soc_tegra124.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sat May 30 18:53:39 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_sdhc.c Log Message: dont set SDHC_FLAG_NO_HS_BIT flag To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/nvidia/tegra_sdhc.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/nvidia/tegra_sdhc.c diff -u src/sys/arch/arm/nvidia/tegra_sdhc.c:1.5 src/sys/arch/arm/nvidia/tegra_sdhc.c:1.6 --- src/sys/arch/arm/nvidia/tegra_sdhc.c:1.5 Sun May 3 22:40:02 2015 +++ src/sys/arch/arm/nvidia/tegra_sdhc.c Sat May 30 18:53:39 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_sdhc.c,v 1.5 2015/05/03 22:40:02 jmcneill Exp $ */ +/* $NetBSD: tegra_sdhc.c,v 1.6 2015/05/30 18:53:39 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_sdhc.c,v 1.5 2015/05/03 22:40:02 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_sdhc.c,v 1.6 2015/05/30 18:53:39 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -92,7 +92,6 @@ tegra_sdhc_attach(device_t parent, devic sc-sc.sc_dmat = tio-tio_dmat; sc-sc.sc_flags = SDHC_FLAG_32BIT_ACCESS | SDHC_FLAG_NO_PWR0 | - SDHC_FLAG_NO_HS_BIT | SDHC_FLAG_NO_CLKBASE | SDHC_FLAG_SINGLE_POWER_WRITE | SDHC_FLAG_USE_DMA;
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sat May 30 18:53:39 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_sdhc.c Log Message: dont set SDHC_FLAG_NO_HS_BIT flag To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/nvidia/tegra_sdhc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sat May 30 11:10:24 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_car.c tegra_carreg.h Log Message: Use PLL LFSR as rnd source. To generate a diff of this commit: cvs rdiff -u -r1.19 -r1.20 src/sys/arch/arm/nvidia/tegra_car.c cvs rdiff -u -r1.16 -r1.17 src/sys/arch/arm/nvidia/tegra_carreg.h 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/nvidia/tegra_car.c diff -u src/sys/arch/arm/nvidia/tegra_car.c:1.19 src/sys/arch/arm/nvidia/tegra_car.c:1.20 --- src/sys/arch/arm/nvidia/tegra_car.c:1.19 Wed May 20 00:05:53 2015 +++ src/sys/arch/arm/nvidia/tegra_car.c Sat May 30 11:10:24 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_car.c,v 1.19 2015/05/20 00:05:53 jmcneill Exp $ */ +/* $NetBSD: tegra_car.c,v 1.20 2015/05/30 11:10:24 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_car.c,v 1.19 2015/05/20 00:05:53 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_car.c,v 1.20 2015/05/30 11:10:24 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -37,6 +37,8 @@ __KERNEL_RCSID(0, $NetBSD: tegra_car.c, #include sys/intr.h #include sys/systm.h #include sys/kernel.h +#include sys/rndpool.h +#include sys/rndsource.h #include arm/nvidia/tegra_reg.h #include arm/nvidia/tegra_carreg.h @@ -50,9 +52,18 @@ struct tegra_car_softc { device_t sc_dev; bus_space_tag_t sc_bst; bus_space_handle_t sc_bsh; + + kmutex_t sc_intr_lock; + kmutex_t sc_rnd_lock; + u_int sc_bytes_wanted; + void *sc_sih; + krndsource_t sc_rndsource; }; static void tegra_car_init(struct tegra_car_softc *); +static void tegra_car_rnd_attach(device_t); +static void tegra_car_rnd_intr(void *); +static void tegra_car_rnd_callback(size_t, void *); static struct tegra_car_softc *pmc_softc = NULL; @@ -91,6 +102,8 @@ tegra_car_attach(device_t parent, device aprint_verbose_dev(self, PLLU = %u Hz\n, tegra_car_pllu_rate()); aprint_verbose_dev(self, PLLP0 = %u Hz\n, tegra_car_pllp0_rate()); aprint_verbose_dev(self, PLLD2 = %u Hz\n, tegra_car_plld2_rate()); + + config_interrupts(self, tegra_car_rnd_attach); } static void @@ -108,6 +121,68 @@ tegra_car_init(struct tegra_car_softc *s } static void +tegra_car_rnd_attach(device_t self) +{ + struct tegra_car_softc * const sc = device_private(self); + + mutex_init(sc-sc_intr_lock, MUTEX_DEFAULT, IPL_SERIAL); + mutex_init(sc-sc_rnd_lock, MUTEX_DEFAULT, IPL_SERIAL); + sc-sc_bytes_wanted = 0; + sc-sc_sih = softint_establish(SOFTINT_SERIAL|SOFTINT_MPSAFE, + tegra_car_rnd_intr, sc); + if (sc-sc_sih == NULL) { + aprint_error_dev(sc-sc_dev, couldn't establish softint\n); + return; + } + + rndsource_setcb(sc-sc_rndsource, tegra_car_rnd_callback, sc); + rnd_attach_source(sc-sc_rndsource, device_xname(sc-sc_dev), + RND_TYPE_RNG, RND_FLAG_COLLECT_VALUE|RND_FLAG_HASCB); +} + +static void +tegra_car_rnd_intr(void *priv) +{ + struct tegra_car_softc * const sc = priv; + uint16_t buf[512]; + uint32_t cnt; + + mutex_enter(sc-sc_intr_lock); + while (sc-sc_bytes_wanted) { + const u_int nbytes = MIN(sc-sc_bytes_wanted, 1024); + for (cnt = 0; cnt sc-sc_bytes_wanted / 2; cnt++) { + buf[cnt] = bus_space_read_4(sc-sc_bst, sc-sc_bsh, + CAR_PLL_LFSR_REG) 0x; + } + mutex_exit(sc-sc_intr_lock); + mutex_enter(sc-sc_rnd_lock); + rnd_add_data(sc-sc_rndsource, buf, nbytes, nbytes * NBBY); + mutex_exit(sc-sc_rnd_lock); + mutex_enter(sc-sc_intr_lock); + sc-sc_bytes_wanted -= MIN(sc-sc_bytes_wanted, nbytes); + } + explicit_memset(buf, 0, sizeof(buf)); + mutex_exit(sc-sc_intr_lock); +} + +static void +tegra_car_rnd_callback(size_t bytes_wanted, void *priv) +{ + struct tegra_car_softc * const sc = priv; + + mutex_enter(sc-sc_intr_lock); + if (sc-sc_bytes_wanted == 0) { + softint_schedule(sc-sc_sih); + } + if (bytes_wanted (UINT_MAX - sc-sc_bytes_wanted)) { + sc-sc_bytes_wanted = UINT_MAX; + } else { + sc-sc_bytes_wanted += bytes_wanted; + } + mutex_exit(sc-sc_intr_lock); +} + +static void tegra_car_get_bs(bus_space_tag_t *pbst, bus_space_handle_t *pbsh) { if (pmc_softc) { Index: src/sys/arch/arm/nvidia/tegra_carreg.h diff -u src/sys/arch/arm/nvidia/tegra_carreg.h:1.16 src/sys/arch/arm/nvidia/tegra_carreg.h:1.17 --- src/sys/arch/arm/nvidia/tegra_carreg.h:1.16 Mon May 18 20:36:42 2015 +++ src/sys/arch/arm/nvidia/tegra_carreg.h Sat May 30 11:10:24 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_carreg.h,v 1.16 2015/05/18 20:36:42 jmcneill Exp $ */ +/* $NetBSD: tegra_carreg.h,v 1.17 2015/05/30 11:10:24 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -33,6 +33,9 @@ #define CAR_CLK_OUT_ENB_H_REG 0x14 #define CAR_CLK_OUT_ENB_U_REG 0x18 +#define CAR_PLL_LFSR_REG 0x54 +#define CAR_PLL_LFSR_RND __BITS(15,0) + #define
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sat May 30 11:10:24 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_car.c tegra_carreg.h Log Message: Use PLL LFSR as rnd source. To generate a diff of this commit: cvs rdiff -u -r1.19 -r1.20 src/sys/arch/arm/nvidia/tegra_car.c cvs rdiff -u -r1.16 -r1.17 src/sys/arch/arm/nvidia/tegra_carreg.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Mon May 25 10:40:23 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_pmc.c Log Message: wait for PWRGATE_TOGGLE.START to clear before submitting a new request To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/nvidia/tegra_pmc.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/nvidia/tegra_pmc.c diff -u src/sys/arch/arm/nvidia/tegra_pmc.c:1.5 src/sys/arch/arm/nvidia/tegra_pmc.c:1.6 --- src/sys/arch/arm/nvidia/tegra_pmc.c:1.5 Mon May 18 21:03:36 2015 +++ src/sys/arch/arm/nvidia/tegra_pmc.c Mon May 25 10:40:23 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_pmc.c,v 1.5 2015/05/18 21:03:36 jmcneill Exp $ */ +/* $NetBSD: tegra_pmc.c,v 1.6 2015/05/25 10:40:23 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_pmc.c,v 1.5 2015/05/18 21:03:36 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_pmc.c,v 1.6 2015/05/25 10:40:23 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -117,8 +117,9 @@ tegra_pmc_power(u_int partid, bool enabl { bus_space_tag_t bst; bus_space_handle_t bsh; - uint32_t status; + uint32_t status, toggle; bool state; + int retry = 1; tegra_pmc_get_bs(bst, bsh); @@ -127,6 +128,17 @@ tegra_pmc_power(u_int partid, bool enabl if (state == enable) return; + while (--retry 0) { + toggle = bus_space_read_4(bst, bsh, PMC_PWRGATE_TOGGLE_0_REG); + if ((toggle PMC_PWRGATE_TOGGLE_0_START) == 0) + break; + delay(1); + } + if (retry == 0) { + printf(ERROR: Couldn't enable PMC partition %#x\n, partid); + return; + } + bus_space_write_4(bst, bsh, PMC_PWRGATE_TOGGLE_0_REG, __SHIFTIN(partid, PMC_PWRGATE_TOGGLE_0_PARTID) | PMC_PWRGATE_TOGGLE_0_START);
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Mon May 25 10:40:23 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_pmc.c Log Message: wait for PWRGATE_TOGGLE.START to clear before submitting a new request To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/nvidia/tegra_pmc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sun May 24 22:30:22 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_ahcisata.c Log Message: set AHCI_QUIRK_SKIP_RESET quirk To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/nvidia/tegra_ahcisata.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sun May 24 22:30:22 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_ahcisata.c Log Message: set AHCI_QUIRK_SKIP_RESET quirk To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/nvidia/tegra_ahcisata.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/nvidia/tegra_ahcisata.c diff -u src/sys/arch/arm/nvidia/tegra_ahcisata.c:1.5 src/sys/arch/arm/nvidia/tegra_ahcisata.c:1.6 --- src/sys/arch/arm/nvidia/tegra_ahcisata.c:1.5 Fri May 15 11:50:30 2015 +++ src/sys/arch/arm/nvidia/tegra_ahcisata.c Sun May 24 22:30:22 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_ahcisata.c,v 1.5 2015/05/15 11:50:30 jmcneill Exp $ */ +/* $NetBSD: tegra_ahcisata.c,v 1.6 2015/05/24 22:30:22 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_ahcisata.c,v 1.5 2015/05/15 11:50:30 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_ahcisata.c,v 1.6 2015/05/24 22:30:22 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -89,7 +89,7 @@ tegra_ahcisata_attach(device_t parent, d bus_space_subregion(tio-tio_bst, tio-tio_bsh, loc-loc_offset + TEGRA_AHCISATA_OFFSET, loc-loc_size - TEGRA_AHCISATA_OFFSET, sc-sc.sc_ahcih); - sc-sc.sc_ahci_quirks = AHCI_QUIRK_BADPMP; + sc-sc.sc_ahci_quirks = AHCI_QUIRK_SKIP_RESET; aprint_naive(\n); aprint_normal(: SATA\n);
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: skrll Date: Fri May 22 06:27:17 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_ehci.c Log Message: Whitespace. To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/nvidia/tegra_ehci.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/nvidia/tegra_ehci.c diff -u src/sys/arch/arm/nvidia/tegra_ehci.c:1.6 src/sys/arch/arm/nvidia/tegra_ehci.c:1.7 --- src/sys/arch/arm/nvidia/tegra_ehci.c:1.6 Mon May 18 11:07:34 2015 +++ src/sys/arch/arm/nvidia/tegra_ehci.c Fri May 22 06:27:17 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_ehci.c,v 1.6 2015/05/18 11:07:34 skrll Exp $ */ +/* $NetBSD: tegra_ehci.c,v 1.7 2015/05/22 06:27:17 skrll Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_ehci.c,v 1.6 2015/05/18 11:07:34 skrll Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_ehci.c,v 1.7 2015/05/22 06:27:17 skrll Exp $); #include sys/param.h #include sys/bus.h @@ -318,11 +318,11 @@ tegra_ehci_utmip_init(struct tegra_ehci_ static int tegra_ehci_port_status(struct ehci_softc *ehci_sc, uint32_t v, int i) - { +{ struct tegra_ehci_softc * const sc = device_private(ehci_sc-sc_dev); bus_space_tag_t iot = sc-sc_bst; bus_space_handle_t ioh = sc-sc_bsh; - + i = ~(UPS_HIGH_SPEED|UPS_LOW_SPEED); uint32_t val = bus_space_read_4(iot, ioh,
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: skrll Date: Fri May 22 06:27:17 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_ehci.c Log Message: Whitespace. To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/nvidia/tegra_ehci.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Wed May 20 00:05:53 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_car.c Log Message: wait for PLLD2 lock To generate a diff of this commit: cvs rdiff -u -r1.18 -r1.19 src/sys/arch/arm/nvidia/tegra_car.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Wed May 20 00:05:53 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_car.c Log Message: wait for PLLD2 lock To generate a diff of this commit: cvs rdiff -u -r1.18 -r1.19 src/sys/arch/arm/nvidia/tegra_car.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/nvidia/tegra_car.c diff -u src/sys/arch/arm/nvidia/tegra_car.c:1.18 src/sys/arch/arm/nvidia/tegra_car.c:1.19 --- src/sys/arch/arm/nvidia/tegra_car.c:1.18 Mon May 18 21:32:05 2015 +++ src/sys/arch/arm/nvidia/tegra_car.c Wed May 20 00:05:53 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_car.c,v 1.18 2015/05/18 21:32:05 jmcneill Exp $ */ +/* $NetBSD: tegra_car.c,v 1.19 2015/05/20 00:05:53 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_car.c,v 1.18 2015/05/18 21:32:05 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_car.c,v 1.19 2015/05/20 00:05:53 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -609,6 +609,8 @@ tegra_car_hdmi_enable(u_int rate) { bus_space_tag_t bst; bus_space_handle_t bsh; + uint32_t base; + int retry = 1; tegra_car_get_bs(bst, bsh); @@ -620,12 +622,25 @@ tegra_car_hdmi_enable(u_int rate) tegra_reg_set_clear(bst, bsh, CAR_PLLD2_BASE_REG, 0, CAR_PLLD2_BASE_IDDQ); delay(2); + /* Enable lock */ + tegra_reg_set_clear(bst, bsh, CAR_PLLD2_MISC_REG, + CAR_PLLD2_MISC_LOCK_ENABLE, 0); /* Enable PLLD2 */ tegra_reg_set_clear(bst, bsh, CAR_PLLD2_BASE_REG, CAR_PLLD2_BASE_ENABLE, 0); + /* Wait for lock */ + do { + delay(2); + base = bus_space_read_4(bst, bsh, CAR_PLLD2_BASE_REG); + } while ((base CAR_PLLD2_BASE_LOCK) == 0 --retry 0); + delay(100); + if (retry == 0) { + printf(WARNING: timeout waiting for PLLD2 lock\n); + } + /* Set clock source to PLLD2 */ - const u_int div = howmany(tegra_car_plld2_rate(), rate);; + const u_int div = howmany(tegra_car_plld2_rate(), rate); bus_space_write_4(bst, bsh, CAR_CLKSRC_HDMI_REG, __SHIFTIN(CAR_CLKSRC_HDMI_SRC_PLLD2_OUT0, CAR_CLKSRC_HDMI_SRC) | __SHIFTIN(div - 1, CAR_CLKSRC_HDMI_DIV));
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Mon May 18 21:32:06 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_car.c Log Message: make sure the display controllar partition is powered on To generate a diff of this commit: cvs rdiff -u -r1.17 -r1.18 src/sys/arch/arm/nvidia/tegra_car.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/nvidia/tegra_car.c diff -u src/sys/arch/arm/nvidia/tegra_car.c:1.17 src/sys/arch/arm/nvidia/tegra_car.c:1.18 --- src/sys/arch/arm/nvidia/tegra_car.c:1.17 Mon May 18 20:36:42 2015 +++ src/sys/arch/arm/nvidia/tegra_car.c Mon May 18 21:32:05 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_car.c,v 1.17 2015/05/18 20:36:42 jmcneill Exp $ */ +/* $NetBSD: tegra_car.c,v 1.18 2015/05/18 21:32:05 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_car.c,v 1.17 2015/05/18 20:36:42 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_car.c,v 1.18 2015/05/18 21:32:05 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -641,6 +641,7 @@ tegra_car_dc_enable(u_int port) bus_space_handle_t bsh; bus_size_t src_reg; uint32_t dev_bit; + u_int partid; tegra_car_get_bs(bst, bsh); @@ -648,10 +649,12 @@ tegra_car_dc_enable(u_int port) case 0: dev_bit = CAR_DEV_L_DISP1; src_reg = CAR_CLKSRC_DISP1_REG; + partid = PMC_PARTID_DIS; break; case 1: dev_bit = CAR_DEV_L_DISP2; src_reg = CAR_CLKSRC_DISP2_REG; + partid = PMC_PARTID_DISB; break; default: return EINVAL; @@ -661,6 +664,10 @@ tegra_car_dc_enable(u_int port) bus_space_write_4(bst, bsh, CAR_RST_DEV_L_SET_REG, dev_bit); bus_space_write_4(bst, bsh, CAR_CLK_ENB_L_SET_REG, dev_bit); + /* Turn on power to display partition */ + tegra_pmc_power(partid, true); + tegra_pmc_remove_clamping(partid); + /* Select PLLP for clock source */ bus_space_write_4(bst, bsh, src_reg, __SHIFTIN(CAR_CLKSRC_DISP_SRC_PLLP_OUT0,
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Mon May 18 21:03:36 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_hdmi.c tegra_pmc.c tegra_pmcreg.h tegra_var.h Log Message: Make sure HDMI I/O is not in deep power down mode To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/nvidia/tegra_hdmi.c cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/nvidia/tegra_pmc.c cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/nvidia/tegra_pmcreg.h cvs rdiff -u -r1.18 -r1.19 src/sys/arch/arm/nvidia/tegra_var.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Mon May 18 21:03:36 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_hdmi.c tegra_pmc.c tegra_pmcreg.h tegra_var.h Log Message: Make sure HDMI I/O is not in deep power down mode To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/nvidia/tegra_hdmi.c cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/nvidia/tegra_pmc.c cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/nvidia/tegra_pmcreg.h cvs rdiff -u -r1.18 -r1.19 src/sys/arch/arm/nvidia/tegra_var.h 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/nvidia/tegra_hdmi.c diff -u src/sys/arch/arm/nvidia/tegra_hdmi.c:1.1 src/sys/arch/arm/nvidia/tegra_hdmi.c:1.2 --- src/sys/arch/arm/nvidia/tegra_hdmi.c:1.1 Mon May 18 19:32:48 2015 +++ src/sys/arch/arm/nvidia/tegra_hdmi.c Mon May 18 21:03:36 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_hdmi.c,v 1.1 2015/05/18 19:32:48 jmcneill Exp $ */ +/* $NetBSD: tegra_hdmi.c,v 1.2 2015/05/18 21:03:36 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_hdmi.c,v 1.1 2015/05/18 19:32:48 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_hdmi.c,v 1.2 2015/05/18 21:03:36 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -244,6 +244,8 @@ tegra_hdmi_enable(struct tegra_hdmi_soft KASSERT(sc-sc_curmode != NULL); + tegra_pmc_hdmi_enable(); + tegra_car_hdmi_enable(mode-dot_clock * 1000); for (n = 0; n __arraycount(tegra_hdmi_tmds_config); n++) { Index: src/sys/arch/arm/nvidia/tegra_pmc.c diff -u src/sys/arch/arm/nvidia/tegra_pmc.c:1.4 src/sys/arch/arm/nvidia/tegra_pmc.c:1.5 --- src/sys/arch/arm/nvidia/tegra_pmc.c:1.4 Fri May 15 11:50:30 2015 +++ src/sys/arch/arm/nvidia/tegra_pmc.c Mon May 18 21:03:36 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_pmc.c,v 1.4 2015/05/15 11:50:30 jmcneill Exp $ */ +/* $NetBSD: tegra_pmc.c,v 1.5 2015/05/18 21:03:36 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_pmc.c,v 1.4 2015/05/15 11:50:30 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_pmc.c,v 1.5 2015/05/18 21:03:36 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -143,3 +143,17 @@ tegra_pmc_remove_clamping(u_int partid) bus_space_write_4(bst, bsh, PMC_REMOVE_CLAMPING_CMD_0_REG, __BIT(partid)); } + +void +tegra_pmc_hdmi_enable(void) +{ + bus_space_tag_t bst; + bus_space_handle_t bsh; + + tegra_pmc_get_bs(bst, bsh); + + tegra_reg_set_clear(bst, bsh, PMC_IO_DPD_STATUS_REG, + 0, PMC_IO_DPD_STATUS_HDMI); + tegra_reg_set_clear(bst, bsh, PMC_IO_DPD2_STATUS_REG, + 0, PMC_IO_DPD2_STATUS_HV); +} Index: src/sys/arch/arm/nvidia/tegra_pmcreg.h diff -u src/sys/arch/arm/nvidia/tegra_pmcreg.h:1.3 src/sys/arch/arm/nvidia/tegra_pmcreg.h:1.4 --- src/sys/arch/arm/nvidia/tegra_pmcreg.h:1.3 Fri May 15 11:50:30 2015 +++ src/sys/arch/arm/nvidia/tegra_pmcreg.h Mon May 18 21:03:36 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_pmcreg.h,v 1.3 2015/05/15 11:50:30 jmcneill Exp $ */ +/* $NetBSD: tegra_pmcreg.h,v 1.4 2015/05/18 21:03:36 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -87,4 +87,10 @@ #define PMC_PARTID_TD 1 #define PMC_PARTID_CPU0 0 +#define PMC_IO_DPD_STATUS_REG 0x1bc +#define PMC_IO_DPD_STATUS_HDMI __BIT(28) + +#define PMC_IO_DPD2_STATUS_REG 0x1c4 +#define PMC_IO_DPD2_STATUS_HV __BIT(6) + #endif /* _ARM_TEGRA_PMCREG_H */ Index: src/sys/arch/arm/nvidia/tegra_var.h diff -u src/sys/arch/arm/nvidia/tegra_var.h:1.18 src/sys/arch/arm/nvidia/tegra_var.h:1.19 --- src/sys/arch/arm/nvidia/tegra_var.h:1.18 Mon May 18 20:36:42 2015 +++ src/sys/arch/arm/nvidia/tegra_var.h Mon May 18 21:03:36 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_var.h,v 1.18 2015/05/18 20:36:42 jmcneill Exp $ */ +/* $NetBSD: tegra_var.h,v 1.19 2015/05/18 21:03:36 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -137,6 +137,7 @@ bool tegra_mpio_pinmux_get_rcv_sel(u_int void tegra_pmc_reset(void); void tegra_pmc_power(u_int, bool); void tegra_pmc_remove_clamping(u_int); +void tegra_pmc_hdmi_enable(void); psize_t tegra_mc_memsize(void);
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Mon May 18 21:32:06 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_car.c Log Message: make sure the display controllar partition is powered on To generate a diff of this commit: cvs rdiff -u -r1.17 -r1.18 src/sys/arch/arm/nvidia/tegra_car.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: skrll Date: Mon May 18 09:56:43 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_ehci.c tegra_ehcireg.h Log Message: Re-enable EHCIF_ETTF and provide a sc_vendor_port_status to get port speed from HOSTSC1 My FS usb stick works with this change. To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/nvidia/tegra_ehci.c cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/nvidia/tegra_ehcireg.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: skrll Date: Mon May 18 11:07:34 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_ehci.c Log Message: Use the right IO handle to get HOSTPC. Also, mask out LS and HS from reported status just-in-case and misc tidyup. HS, FS and LS now all probe correctly. To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/nvidia/tegra_ehci.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/nvidia/tegra_ehci.c diff -u src/sys/arch/arm/nvidia/tegra_ehci.c:1.5 src/sys/arch/arm/nvidia/tegra_ehci.c:1.6 --- src/sys/arch/arm/nvidia/tegra_ehci.c:1.5 Mon May 18 09:56:43 2015 +++ src/sys/arch/arm/nvidia/tegra_ehci.c Mon May 18 11:07:34 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_ehci.c,v 1.5 2015/05/18 09:56:43 skrll Exp $ */ +/* $NetBSD: tegra_ehci.c,v 1.6 2015/05/18 11:07:34 skrll Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_ehci.c,v 1.5 2015/05/18 09:56:43 skrll Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_ehci.c,v 1.6 2015/05/18 11:07:34 skrll Exp $); #include sys/param.h #include sys/bus.h @@ -98,7 +98,6 @@ tegra_ehci_attach(device_t parent, devic sc-sc.sc_bus.hci_private = sc-sc; sc-sc.sc_bus.dmatag = tio-tio_dmat; sc-sc.sc_bus.usbrev = USBREV_2_0; - sc-sc.sc_vendor_port_status = tegra_ehci_port_status; sc-sc.sc_ncomp = 0; sc-sc.sc_flags = EHCIF_ETTF; sc-sc.sc_id_vendor = 0x10de; @@ -109,6 +108,7 @@ tegra_ehci_attach(device_t parent, devic loc-loc_offset + TEGRA_EHCI_REG_OFFSET, loc-loc_size - TEGRA_EHCI_REG_OFFSET, sc-sc.ioh); sc-sc.sc_vendor_init = tegra_ehci_init; + sc-sc.sc_vendor_port_status = tegra_ehci_port_status; aprint_naive(\n); aprint_normal(: USB%d\n, loc-loc_port + 1); @@ -316,14 +316,14 @@ tegra_ehci_utmip_init(struct tegra_ehci_ } } - static int -tegra_ehci_port_status(struct ehci_softc *sc, uint32_t v, int i) -{ - bus_space_tag_t iot = sc-iot; - bus_space_handle_t ioh = sc-ioh; - - i = ~UPS_HIGH_SPEED; +tegra_ehci_port_status(struct ehci_softc *ehci_sc, uint32_t v, int i) + { + struct tegra_ehci_softc * const sc = device_private(ehci_sc-sc_dev); + bus_space_tag_t iot = sc-sc_bst; + bus_space_handle_t ioh = sc-sc_bsh; + + i = ~(UPS_HIGH_SPEED|UPS_LOW_SPEED); uint32_t val = bus_space_read_4(iot, ioh, TEGRA_EHCI_HOSTPC1_DEVLC_REG);
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: skrll Date: Mon May 18 11:07:34 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_ehci.c Log Message: Use the right IO handle to get HOSTPC. Also, mask out LS and HS from reported status just-in-case and misc tidyup. HS, FS and LS now all probe correctly. To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/nvidia/tegra_ehci.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: matt Date: Sun May 17 06:15:50 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: soc_tegra124.c Log Message: Restructure a bit to make spinning a subset of cores easier. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/nvidia/soc_tegra124.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/nvidia/soc_tegra124.c diff -u src/sys/arch/arm/nvidia/soc_tegra124.c:1.3 src/sys/arch/arm/nvidia/soc_tegra124.c:1.4 --- src/sys/arch/arm/nvidia/soc_tegra124.c:1.3 Wed May 13 11:06:13 2015 +++ src/sys/arch/arm/nvidia/soc_tegra124.c Sun May 17 06:15:50 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: soc_tegra124.c,v 1.3 2015/05/13 11:06:13 jmcneill Exp $ */ +/* $NetBSD: soc_tegra124.c,v 1.4 2015/05/17 06:15:50 matt Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -30,7 +30,7 @@ #include opt_multiprocessor.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: soc_tegra124.c,v 1.3 2015/05/13 11:06:13 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: soc_tegra124.c,v 1.4 2015/05/17 06:15:50 matt Exp $); #include sys/param.h #include sys/bus.h @@ -128,7 +128,6 @@ tegra124_mpinit(void) extern void cortex_mpstart(void); bus_space_tag_t bst = armv7_generic_bs_tag; bus_space_handle_t bsh; - u_int i; bus_space_subregion(bst, tegra_ppsb_bsh, TEGRA_EVP_OFFSET, TEGRA_EVP_SIZE, bsh); @@ -139,14 +138,15 @@ tegra124_mpinit(void) bus_space_write_4(bst, bsh, EVP_RESET_VECTOR_0_REG, (uint32_t)cortex_mpstart); bus_space_barrier(bst, bsh, EVP_RESET_VECTOR_0_REG, 4, BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE); + uint32_t started = 0; - tegra_pmc_power(PMC_PARTID_CPU1, true); - tegra_pmc_power(PMC_PARTID_CPU2, true); - tegra_pmc_power(PMC_PARTID_CPU3, true); + tegra_pmc_power(PMC_PARTID_CPU1, true); started |= __BIT(1); + tegra_pmc_power(PMC_PARTID_CPU2, true); started |= __BIT(2); + tegra_pmc_power(PMC_PARTID_CPU3, true); started |= __BIT(3); - for (i = 0x1000; i 0; i--) { + for (u_int i = 0x1000; i 0; i--) { __asm __volatile(dmb ::: memory); - if (arm_cpu_hatched == 0xe) + if (arm_cpu_hatched == started) break; } #endif
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: matt Date: Sun May 17 06:15:50 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: soc_tegra124.c Log Message: Restructure a bit to make spinning a subset of cores easier. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/nvidia/soc_tegra124.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sat May 16 21:31:39 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_i2c.c tegra_i2creg.h Log Message: Support transfers 4-bytes long by reading and writing using the controller's packet-based interface instead of non-packet (normal) mode. To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/nvidia/tegra_i2c.c \ src/sys/arch/arm/nvidia/tegra_i2creg.h 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/nvidia/tegra_i2c.c diff -u src/sys/arch/arm/nvidia/tegra_i2c.c:1.1 src/sys/arch/arm/nvidia/tegra_i2c.c:1.2 --- src/sys/arch/arm/nvidia/tegra_i2c.c:1.1 Sun May 10 23:50:21 2015 +++ src/sys/arch/arm/nvidia/tegra_i2c.c Sat May 16 21:31:39 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_i2c.c,v 1.1 2015/05/10 23:50:21 jmcneill Exp $ */ +/* $NetBSD: tegra_i2c.c,v 1.2 2015/05/16 21:31:39 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_i2c.c,v 1.1 2015/05/10 23:50:21 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_i2c.c,v 1.2 2015/05/16 21:31:39 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -52,6 +52,7 @@ struct tegra_i2c_softc { bus_space_tag_t sc_bst; bus_space_handle_t sc_bsh; void * sc_ih; + u_int sc_port; struct i2c_controller sc_ic; kmutex_t sc_lock; @@ -107,6 +108,7 @@ tegra_i2c_attach(device_t parent, device sc-sc_bst = tio-tio_bst; bus_space_subregion(tio-tio_bst, tio-tio_bsh, loc-loc_offset, loc-loc_size, sc-sc_bsh); + sc-sc_port = loc-loc_port; mutex_init(sc-sc_lock, MUTEX_DEFAULT, IPL_VM); cv_init(sc-sc_cv, device_xname(self)); @@ -144,7 +146,8 @@ tegra_i2c_init(struct tegra_i2c_softc *s __SHIFTIN(0x1, I2C_CLK_DIVISOR_HSMODE)); I2C_WRITE(sc, I2C_INTERRUPT_MASK_REG, 0); - I2C_WRITE(sc, I2C_CNFG_REG, I2C_CNFG_NEW_MASTER_FSM); + I2C_WRITE(sc, I2C_CNFG_REG, + I2C_CNFG_NEW_MASTER_FSM | I2C_CNFG_PACKET_MODE_EN); I2C_SET_CLEAR(sc, I2C_SL_CNFG_REG, I2C_SL_CNFG_NEWSL, 0); } @@ -242,43 +245,42 @@ done: static int tegra_i2c_wait(struct tegra_i2c_softc *sc, int flags) { - const struct timeval timeout = { .tv_sec = 1, .tv_usec = 0 }; - struct timeval tnow, tend; - uint32_t stat; - int error; - - getmicrotime(tnow); - timeradd(tnow, timeout, tend); - - for (;;) { - getmicrotime(tnow); - if (timercmp(tnow, tend, =)) { - return ETIMEDOUT; - } + int error, retry; + uint32_t stat = 0; + + retry = (flags I2C_F_POLL) ? 10 : 100; + + while (--retry 0) { if ((flags I2C_F_POLL) == 0) { - struct timeval trem; - timersub(tend, tnow, trem); - const u_int ms = (trem.tv_sec * 1000) + - (trem.tv_usec / 1000); - KASSERT(ms 0); error = cv_timedwait_sig(sc-sc_cv, sc-sc_lock, - max(mstohz(ms), 1)); + max(mstohz(10), 1)); if (error) { return error; } } - stat = I2C_READ(sc, I2C_STATUS_REG); - if ((stat I2C_STATUS_BUSY) == 0) { + stat = I2C_READ(sc, I2C_INTERRUPT_STATUS_REG); + if (stat I2C_INTERRUPT_STATUS_PACKET_XFER_COMPLETE) { break; } if (flags I2C_F_POLL) { - delay(1); + delay(10); } } + if (retry == 0) { + stat = I2C_READ(sc, I2C_INTERRUPT_STATUS_REG); + device_printf(sc-sc_dev, timed out, status = %#x\n, stat); + return ETIMEDOUT; + } + const uint32_t err_mask = + I2C_INTERRUPT_STATUS_NOACK | + I2C_INTERRUPT_STATUS_ARB_LOST | + I2C_INTERRUPT_MASK_TIMEOUT; - if (__SHIFTOUT(stat, I2C_STATUS_CMD1_STAT) != 0) + if (stat err_mask) { + device_printf(sc-sc_dev, error, status = %#x\n, stat); return EIO; + } return 0; } @@ -287,33 +289,55 @@ static int tegra_i2c_write(struct tegra_i2c_softc *sc, i2c_addr_t addr, const uint8_t *buf, size_t buflen, int flags) { - uint32_t data, cnfg; - size_t n; - - if (buflen 4) - return EINVAL; + const uint8_t *p = buf; + size_t n, resid = buflen; + uint32_t data; + int retry; - I2C_WRITE(sc, I2C_CMD_ADDR0_REG, addr 1); - for (n = 0, data = 0; n buflen; n++) { - data |= (uint32_t)buf[n] (n * 8); - } - I2C_WRITE(sc, I2C_CMD_DATA1_REG, data); - - cnfg = I2C_READ(sc, I2C_CNFG_REG); - cnfg = ~I2C_CNFG_DEBOUNCE_CNT; - cnfg |= __SHIFTIN(2, I2C_CNFG_DEBOUNCE_CNT); - cnfg = ~I2C_CNFG_LENGTH; - cnfg |= __SHIFTIN(buflen - 1, I2C_CNFG_LENGTH); - cnfg = ~I2C_CNFG_SLV2; - cnfg = ~I2C_CNFG_CMD1; - cnfg = ~I2C_CNFG_NOACK; - cnfg = ~I2C_CNFG_A_MOD; - I2C_WRITE(sc, I2C_CNFG_REG, cnfg); + const uint32_t istatus = I2C_READ(sc, I2C_INTERRUPT_STATUS_REG); + I2C_WRITE(sc, I2C_INTERRUPT_STATUS_REG, istatus); - I2C_SET_CLEAR(sc, I2C_BUS_CONFIG_LOAD_REG, - I2C_BUS_CONFIG_LOAD_MSTR_CONFIG_LOAD, 0); + /* Generic Header 0 */ + I2C_WRITE(sc, I2C_TX_PACKET_FIFO_REG, + __SHIFTIN(I2C_IOPACKET_WORD0_PROTHDRSZ_REQ, + I2C_IOPACKET_WORD0_PROTHDRSZ) | + __SHIFTIN(sc-sc_port,
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sat May 16 21:31:39 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_i2c.c tegra_i2creg.h Log Message: Support transfers 4-bytes long by reading and writing using the controller's packet-based interface instead of non-packet (normal) mode. To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/nvidia/tegra_i2c.c \ src/sys/arch/arm/nvidia/tegra_i2creg.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sun May 17 01:26:22 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_i2c.c Log Message: initialize FIFO TX/RX trigger levels, wait for MSTR_CONFIG_LOAD to clear after setting it To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/nvidia/tegra_i2c.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sun May 17 01:26:22 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_i2c.c Log Message: initialize FIFO TX/RX trigger levels, wait for MSTR_CONFIG_LOAD to clear after setting it To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/nvidia/tegra_i2c.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/nvidia/tegra_i2c.c diff -u src/sys/arch/arm/nvidia/tegra_i2c.c:1.3 src/sys/arch/arm/nvidia/tegra_i2c.c:1.4 --- src/sys/arch/arm/nvidia/tegra_i2c.c:1.3 Sat May 16 23:09:08 2015 +++ src/sys/arch/arm/nvidia/tegra_i2c.c Sun May 17 01:26:22 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_i2c.c,v 1.3 2015/05/16 23:09:08 jmcneill Exp $ */ +/* $NetBSD: tegra_i2c.c,v 1.4 2015/05/17 01:26:22 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_i2c.c,v 1.3 2015/05/16 23:09:08 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_i2c.c,v 1.4 2015/05/17 01:26:22 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -141,6 +141,8 @@ tegra_i2c_attach(device_t parent, device static void tegra_i2c_init(struct tegra_i2c_softc *sc) { + int retry = 1; + I2C_WRITE(sc, I2C_CLK_DIVISOR_REG, __SHIFTIN(0x19, I2C_CLK_DIVISOR_STD_FAST_MODE) | __SHIFTIN(0x1, I2C_CLK_DIVISOR_HSMODE)); @@ -149,8 +151,20 @@ tegra_i2c_init(struct tegra_i2c_softc *s I2C_WRITE(sc, I2C_CNFG_REG, I2C_CNFG_NEW_MASTER_FSM | I2C_CNFG_PACKET_MODE_EN); I2C_SET_CLEAR(sc, I2C_SL_CNFG_REG, I2C_SL_CNFG_NEWSL, 0); + I2C_WRITE(sc, I2C_FIFO_CONTROL_REG, + __SHIFTIN(7, I2C_FIFO_CONTROL_TX_FIFO_TRIG) | + __SHIFTIN(0, I2C_FIFO_CONTROL_RX_FIFO_TRIG)); + I2C_WRITE(sc, I2C_BUS_CONFIG_LOAD_REG, I2C_BUS_CONFIG_LOAD_MSTR_CONFIG_LOAD); + while (--retry 0) { + if (I2C_READ(sc, I2C_BUS_CONFIG_LOAD_REG) == 0) + break; + delay(10); + } + if (retry == 0) { + device_printf(sc-sc_dev, config load timeout\n); + } } static int
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sun May 17 01:28:32 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_intr.h Log Message: add HDMI, DISPLAYA, DISPLAYB irqs To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/nvidia/tegra_intr.h 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/nvidia/tegra_intr.h diff -u src/sys/arch/arm/nvidia/tegra_intr.h:1.4 src/sys/arch/arm/nvidia/tegra_intr.h:1.5 --- src/sys/arch/arm/nvidia/tegra_intr.h:1.4 Sun May 10 23:50:21 2015 +++ src/sys/arch/arm/nvidia/tegra_intr.h Sun May 17 01:28:32 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_intr.h,v 1.4 2015/05/10 23:50:21 jmcneill Exp $ */ +/* $NetBSD: tegra_intr.h,v 1.5 2015/05/17 01:28:32 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -50,6 +50,9 @@ #define TEGRA_INTR_UARTC TEGRA_INTR(46) #define TEGRA_INTR_I2C5 TEGRA_INTR(53) #define TEGRA_INTR_I2C6 TEGRA_INTR(63) +#define TEGRA_INTR_DISPLAYA TEGRA_INTR(73) +#define TEGRA_INTR_DISPLAYB TEGRA_INTR(74) +#define TEGRA_INTR_HDMI TEGRA_INTR(75) #define TEGRA_INTR_HDA TEGRA_INTR(81) #define TEGRA_INTR_I2C2 TEGRA_INTR(84) #define TEGRA_INTR_UARTD TEGRA_INTR(90)
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sun May 17 01:28:17 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_reg.h Log Message: add graphics host offsets To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/sys/arch/arm/nvidia/tegra_reg.h 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/nvidia/tegra_reg.h diff -u src/sys/arch/arm/nvidia/tegra_reg.h:1.9 src/sys/arch/arm/nvidia/tegra_reg.h:1.10 --- src/sys/arch/arm/nvidia/tegra_reg.h:1.9 Sun May 10 23:50:21 2015 +++ src/sys/arch/arm/nvidia/tegra_reg.h Sun May 17 01:28:17 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_reg.h,v 1.9 2015/05/10 23:50:21 jmcneill Exp $ */ +/* $NetBSD: tegra_reg.h,v 1.10 2015/05/17 01:28:17 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -53,6 +53,8 @@ #define TEGRA_HOST1X_BASE 0x5000 #define TEGRA_HOST1X_SIZE 0x0010 +#define TEGRA_GHOST_BASE 0x5400 +#define TEGRA_GHOST_SIZE 0x0100 #define TEGRA_PPSB_BASE 0x6000 #define TEGRA_PPSB_SIZE 0x0100 #define TEGRA_APB_BASE 0x7000 @@ -133,4 +135,12 @@ #define TEGRA_USB3_OFFSET 0x01008000 #define TEGRA_USB3_SIZE 0x1800 +/* Graphics Host (GHOST) */ +#define TEGRA_DISPLAYA_OFFSET 0x0020 +#define TEGRA_DISPLAYA_SIZE 0x0004 +#define TEGRA_DISPLAYB_OFFSET 0x0024 +#define TEGRA_DISPLAYB_SIZE 0x0004 +#define TEGRA_HDMI_OFFSET 0x0028 +#define TEGRA_HDMI_SIZE 0x0004 + #endif /* _ARM_TEGRA_REG_H */
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sun May 17 01:28:32 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_intr.h Log Message: add HDMI, DISPLAYA, DISPLAYB irqs To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/nvidia/tegra_intr.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sun May 17 01:28:17 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_reg.h Log Message: add graphics host offsets To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/sys/arch/arm/nvidia/tegra_reg.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sat May 16 23:09:08 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_i2c.c Log Message: fix source clock divisor, set MSTR_CONFIG_LOAD after updating config, reset controller on errors, read from rx fifo before waiting for xfer to complete To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/nvidia/tegra_i2c.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/nvidia/tegra_i2c.c diff -u src/sys/arch/arm/nvidia/tegra_i2c.c:1.2 src/sys/arch/arm/nvidia/tegra_i2c.c:1.3 --- src/sys/arch/arm/nvidia/tegra_i2c.c:1.2 Sat May 16 21:31:39 2015 +++ src/sys/arch/arm/nvidia/tegra_i2c.c Sat May 16 23:09:08 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_i2c.c,v 1.2 2015/05/16 21:31:39 jmcneill Exp $ */ +/* $NetBSD: tegra_i2c.c,v 1.3 2015/05/16 23:09:08 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_i2c.c,v 1.2 2015/05/16 21:31:39 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_i2c.c,v 1.3 2015/05/16 23:09:08 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -125,7 +125,7 @@ tegra_i2c_attach(device_t parent, device aprint_normal_dev(self, interrupting on irq %d\n, loc-loc_intr); /* Recommended setting for standard mode */ - tegra_car_periph_i2c_enable(loc-loc_port, 20400); + tegra_car_periph_i2c_enable(loc-loc_port, 2040); tegra_i2c_init(sc); @@ -149,6 +149,8 @@ tegra_i2c_init(struct tegra_i2c_softc *s I2C_WRITE(sc, I2C_CNFG_REG, I2C_CNFG_NEW_MASTER_FSM | I2C_CNFG_PACKET_MODE_EN); I2C_SET_CLEAR(sc, I2C_SL_CNFG_REG, I2C_SL_CNFG_NEWSL, 0); + I2C_WRITE(sc, I2C_BUS_CONFIG_LOAD_REG, + I2C_BUS_CONFIG_LOAD_MSTR_CONFIG_LOAD); } static int @@ -239,6 +241,11 @@ done: if ((flags I2C_F_POLL) == 0) { I2C_WRITE(sc, I2C_INTERRUPT_MASK_REG, 0); } + + if (error) { + tegra_i2c_init(sc); + } + return error; } @@ -349,7 +356,7 @@ tegra_i2c_read(struct tegra_i2c_softc *s uint8_t *p = buf; size_t n, resid = buflen; uint32_t data; - int error, retry; + int retry; const uint32_t istatus = I2C_READ(sc, I2C_INTERRUPT_STATUS_REG); I2C_WRITE(sc, I2C_INTERRUPT_STATUS_REG, istatus); @@ -372,10 +379,6 @@ tegra_i2c_read(struct tegra_i2c_softc *s I2C_IOPACKET_XMITHDR_IE | I2C_IOPACKET_XMITHDR_READ | __SHIFTIN((addr 1) | 1, I2C_IOPACKET_XMITHDR_SLAVE_ADDR)); - if ((error = tegra_i2c_wait(sc, flags)) != 0) { - return error; - } - while (resid 0) { retry = 1; while (--retry 0) { @@ -399,5 +402,5 @@ tegra_i2c_read(struct tegra_i2c_softc *s p += min(resid, 4); } - return 0; + return tegra_i2c_wait(sc, flags); }
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sat May 16 23:09:08 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_i2c.c Log Message: fix source clock divisor, set MSTR_CONFIG_LOAD after updating config, reset controller on errors, read from rx fifo before waiting for xfer to complete To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/nvidia/tegra_i2c.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sat May 16 23:07:51 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_car.c Log Message: use correct enable reg for I2C5 To generate a diff of this commit: cvs rdiff -u -r1.14 -r1.15 src/sys/arch/arm/nvidia/tegra_car.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/nvidia/tegra_car.c diff -u src/sys/arch/arm/nvidia/tegra_car.c:1.14 src/sys/arch/arm/nvidia/tegra_car.c:1.15 --- src/sys/arch/arm/nvidia/tegra_car.c:1.14 Fri May 15 11:50:30 2015 +++ src/sys/arch/arm/nvidia/tegra_car.c Sat May 16 23:07:51 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_car.c,v 1.14 2015/05/15 11:50:30 jmcneill Exp $ */ +/* $NetBSD: tegra_car.c,v 1.15 2015/05/16 23:07:51 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_car.c,v 1.14 2015/05/15 11:50:30 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_car.c,v 1.15 2015/05/16 23:07:51 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -548,7 +548,7 @@ tegra_car_periph_i2c_enable(u_int port, break; case 4: rst_reg = CAR_RST_DEV_H_SET_REG; - enb_reg = CAR_CLK_ENB_V_SET_REG; + enb_reg = CAR_CLK_ENB_H_SET_REG; dev_bit = CAR_DEV_H_I2C5; clksrc_reg = CAR_CLKSRC_I2C5_REG; break;
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sat May 16 23:07:51 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_car.c Log Message: use correct enable reg for I2C5 To generate a diff of this commit: cvs rdiff -u -r1.14 -r1.15 src/sys/arch/arm/nvidia/tegra_car.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Fri May 15 11:50:30 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_ahcisata.c tegra_car.c tegra_pmc.c tegra_pmcreg.h tegra_var.h Log Message: more Tegra SATA init To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/nvidia/tegra_ahcisata.c cvs rdiff -u -r1.13 -r1.14 src/sys/arch/arm/nvidia/tegra_car.c cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/nvidia/tegra_pmc.c cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/nvidia/tegra_pmcreg.h cvs rdiff -u -r1.15 -r1.16 src/sys/arch/arm/nvidia/tegra_var.h 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/nvidia/tegra_ahcisata.c diff -u src/sys/arch/arm/nvidia/tegra_ahcisata.c:1.4 src/sys/arch/arm/nvidia/tegra_ahcisata.c:1.5 --- src/sys/arch/arm/nvidia/tegra_ahcisata.c:1.4 Thu May 14 00:00:44 2015 +++ src/sys/arch/arm/nvidia/tegra_ahcisata.c Fri May 15 11:50:30 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_ahcisata.c,v 1.4 2015/05/14 00:00:44 jmcneill Exp $ */ +/* $NetBSD: tegra_ahcisata.c,v 1.5 2015/05/15 11:50:30 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_ahcisata.c,v 1.4 2015/05/14 00:00:44 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_ahcisata.c,v 1.5 2015/05/15 11:50:30 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -89,7 +89,7 @@ tegra_ahcisata_attach(device_t parent, d bus_space_subregion(tio-tio_bst, tio-tio_bsh, loc-loc_offset + TEGRA_AHCISATA_OFFSET, loc-loc_size - TEGRA_AHCISATA_OFFSET, sc-sc.sc_ahcih); - sc-sc.sc_ahci_ports = 1; + sc-sc.sc_ahci_quirks = AHCI_QUIRK_BADPMP; aprint_naive(\n); aprint_normal(: SATA\n); @@ -102,6 +102,8 @@ tegra_ahcisata_attach(device_t parent, d tegra_car_periph_sata_enable(); + tegra_xusbpad_sata_enable(); + tegra_ahcisata_init(sc); sc-sc_ih = intr_establish(loc-loc_intr, IPL_BIO, IST_LEVEL, @@ -122,10 +124,34 @@ tegra_ahcisata_init(struct tegra_ahcisat bus_space_tag_t bst = sc-sc_bst; bus_space_handle_t bsh = sc-sc_bsh; + const u_int gen1_tx_amp = 0x18; + const u_int gen1_tx_peak = 0x04; + const u_int gen2_tx_amp = 0x18; + const u_int gen2_tx_peak = 0x0a; + /* Enable IFPS device block */ tegra_reg_set_clear(bst, bsh, TEGRA_SATA_CONFIGURATION_REG, TEGRA_SATA_CONFIGURATION_EN_FPCI, 0); + /* PHY config */ + bus_space_write_4(bst, bsh, TEGRA_T_SATA0_INDEX_REG, + TEGRA_T_SATA0_INDEX_CH1); + tegra_reg_set_clear(bst, bsh, TEGRA_T_SATA0_CHX_PHY_CTRL1_GEN1_REG, + __SHIFTIN(gen1_tx_amp, TEGRA_T_SATA0_CHX_PHY_CTRL1_GEN1_TX_AMP) | + __SHIFTIN(gen1_tx_peak, TEGRA_T_SATA0_CHX_PHY_CTRL1_GEN1_TX_PEAK), + TEGRA_T_SATA0_CHX_PHY_CTRL1_GEN1_TX_AMP | + TEGRA_T_SATA0_CHX_PHY_CTRL1_GEN1_TX_PEAK); + tegra_reg_set_clear(bst, bsh, TEGRA_T_SATA0_CHX_PHY_CTRL1_GEN2_REG, + __SHIFTIN(gen2_tx_amp, TEGRA_T_SATA0_CHX_PHY_CTRL1_GEN2_TX_AMP) | + __SHIFTIN(gen2_tx_peak, TEGRA_T_SATA0_CHX_PHY_CTRL1_GEN2_TX_PEAK), + TEGRA_T_SATA0_CHX_PHY_CTRL1_GEN2_TX_AMP | + TEGRA_T_SATA0_CHX_PHY_CTRL1_GEN2_TX_PEAK); + bus_space_write_4(bst, bsh, TEGRA_T_SATA0_CHX_PHY_CTRL11_REG, + __SHIFTIN(0x2800, TEGRA_T_SATA0_CHX_PHY_CTRL11_GEN2_RX_EQ)); + bus_space_write_4(bst, bsh, TEGRA_T_SATA0_CHX_PHY_CTRL2_REG, + __SHIFTIN(0x23, TEGRA_T_SATA0_CHX_PHY_CTRL2_CDR_CNTL_GEN1)); + bus_space_write_4(bst, bsh, TEGRA_T_SATA0_INDEX_REG, 0); + /* Backdoor update the programming interface field and class code */ tegra_reg_set_clear(bst, bsh, TEGRA_T_SATA0_CFG_SATA_REG, TEGRA_T_SATA0_CFG_SATA_BACKDOOR_PROG_IF_EN, 0); Index: src/sys/arch/arm/nvidia/tegra_car.c diff -u src/sys/arch/arm/nvidia/tegra_car.c:1.13 src/sys/arch/arm/nvidia/tegra_car.c:1.14 --- src/sys/arch/arm/nvidia/tegra_car.c:1.13 Thu May 14 10:23:03 2015 +++ src/sys/arch/arm/nvidia/tegra_car.c Fri May 15 11:50:30 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_car.c,v 1.13 2015/05/14 10:23:03 jmcneill Exp $ */ +/* $NetBSD: tegra_car.c,v 1.14 2015/05/15 11:50:30 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_car.c,v 1.13 2015/05/14 10:23:03 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_car.c,v 1.14 2015/05/15 11:50:30 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -462,39 +462,51 @@ tegra_car_periph_sata_enable(void) tegra_car_get_bs(bst, bsh); - const u_int pllp_rate = tegra_car_pllp0_rate(); + /* Assert resets */ + bus_space_write_4(bst, bsh, CAR_RST_DEV_V_SET_REG, CAR_DEV_V_SATA); + bus_space_write_4(bst, bsh, CAR_RST_DEV_W_SET_REG, CAR_DEV_W_SATACOLD); + + /* Disable software control of SATA PLL */ + tegra_reg_set_clear(bst, bsh, CAR_SATA_PLL_CFG0_REG, + 0, CAR_SATA_PLL_CFG0_PADPLL_RESET_SWCTL); /* Set
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Fri May 15 11:50:30 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_ahcisata.c tegra_car.c tegra_pmc.c tegra_pmcreg.h tegra_var.h Log Message: more Tegra SATA init To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/nvidia/tegra_ahcisata.c cvs rdiff -u -r1.13 -r1.14 src/sys/arch/arm/nvidia/tegra_car.c cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/nvidia/tegra_pmc.c cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/nvidia/tegra_pmcreg.h cvs rdiff -u -r1.15 -r1.16 src/sys/arch/arm/nvidia/tegra_var.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Fri May 15 11:49:11 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: files.tegra tegra_io.c Added Files: src/sys/arch/arm/nvidia: tegra_xusbpad.c tegra_xusbpadreg.h Log Message: Tegra XUSB PADCTL driver To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 src/sys/arch/arm/nvidia/files.tegra cvs rdiff -u -r1.8 -r1.9 src/sys/arch/arm/nvidia/tegra_io.c cvs rdiff -u -r0 -r1.1 src/sys/arch/arm/nvidia/tegra_xusbpad.c \ src/sys/arch/arm/nvidia/tegra_xusbpadreg.h 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/nvidia/files.tegra diff -u src/sys/arch/arm/nvidia/files.tegra:1.10 src/sys/arch/arm/nvidia/files.tegra:1.11 --- src/sys/arch/arm/nvidia/files.tegra:1.10 Wed May 13 11:06:13 2015 +++ src/sys/arch/arm/nvidia/files.tegra Fri May 15 11:49:10 2015 @@ -1,4 +1,4 @@ -# $NetBSD: files.tegra,v 1.10 2015/05/13 11:06:13 jmcneill Exp $ +# $NetBSD: files.tegra,v 1.11 2015/05/15 11:49:10 jmcneill Exp $ # # Configuration info for NVIDIA Tegra ARM Peripherals # @@ -47,6 +47,11 @@ device tegrampio attach tegrampio at tegraio with tegra_mpio file arch/arm/nvidia/tegra_mpio.c tegra_mpio +# XUSB PADCTL +device tegraxusbpad +attach tegraxusbpad at tegraio with tegra_xusbpad +file arch/arm/nvidia/tegra_xusbpad.c tegra_xusbpad + # UART attach com at tegraio with tegra_com file arch/arm/nvidia/tegra_com.c tegra_com needs-flag Index: src/sys/arch/arm/nvidia/tegra_io.c diff -u src/sys/arch/arm/nvidia/tegra_io.c:1.8 src/sys/arch/arm/nvidia/tegra_io.c:1.9 --- src/sys/arch/arm/nvidia/tegra_io.c:1.8 Sun May 10 23:50:21 2015 +++ src/sys/arch/arm/nvidia/tegra_io.c Fri May 15 11:49:10 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_io.c,v 1.8 2015/05/10 23:50:21 jmcneill Exp $ */ +/* $NetBSD: tegra_io.c,v 1.9 2015/05/15 11:49:10 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include opt_tegra.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_io.c,v 1.8 2015/05/10 23:50:21 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_io.c,v 1.9 2015/05/15 11:49:10 jmcneill Exp $); #include sys/param.h #include sys/systm.h @@ -73,6 +73,8 @@ static const struct tegra_locators tegra TEGRA_MC_OFFSET, TEGRA_MC_SIZE, NOPORT, NOINTR }, { tegrapmc, TEGRA_PMC_OFFSET, TEGRA_PMC_SIZE, NOPORT, NOINTR }, + { tegraxusbpad, +TEGRA_XUSB_PADCTL_OFFSET, TEGRA_XUSB_PADCTL_SIZE, NOPORT, NOINTR }, { tegrampio, TEGRA_MPIO_OFFSET, TEGRA_MPIO_SIZE, NOPORT, NOINTR }, { tegrai2c, Added files: Index: src/sys/arch/arm/nvidia/tegra_xusbpad.c diff -u /dev/null src/sys/arch/arm/nvidia/tegra_xusbpad.c:1.1 --- /dev/null Fri May 15 11:49:11 2015 +++ src/sys/arch/arm/nvidia/tegra_xusbpad.c Fri May 15 11:49:10 2015 @@ -0,0 +1,136 @@ +/* $NetBSD: tegra_xusbpad.c,v 1.1 2015/05/15 11:49:10 jmcneill Exp $ */ + +/*- + * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + *notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + *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 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 sys/cdefs.h +__KERNEL_RCSID(0, $NetBSD: tegra_xusbpad.c,v 1.1 2015/05/15 11:49:10 jmcneill Exp $); + +#include sys/param.h +#include sys/bus.h +#include sys/device.h +#include sys/intr.h +#include sys/systm.h +#include sys/kernel.h + +#include arm/nvidia/tegra_reg.h +#include arm/nvidia/tegra_xusbpadreg.h +#include arm/nvidia/tegra_var.h + +static int tegra_xusbpad_match(device_t, cfdata_t, void *); +static void tegra_xusbpad_attach(device_t, device_t, void *); + +struct tegra_xusbpad_softc { + device_t sc_dev; + bus_space_tag_t sc_bst; + bus_space_handle_t sc_bsh; +}; + +static struct
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Fri May 15 11:49:11 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: files.tegra tegra_io.c Added Files: src/sys/arch/arm/nvidia: tegra_xusbpad.c tegra_xusbpadreg.h Log Message: Tegra XUSB PADCTL driver To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 src/sys/arch/arm/nvidia/files.tegra cvs rdiff -u -r1.8 -r1.9 src/sys/arch/arm/nvidia/tegra_io.c cvs rdiff -u -r0 -r1.1 src/sys/arch/arm/nvidia/tegra_xusbpad.c \ src/sys/arch/arm/nvidia/tegra_xusbpadreg.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Fri May 15 17:43:36 UTC 2015 Added Files: src/sys/arch/arm/nvidia: tegra_ahcisatareg.h Log Message: Tegra SATA registers To generate a diff of this commit: cvs rdiff -u -r0 -r1.1 src/sys/arch/arm/nvidia/tegra_ahcisatareg.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Added files: Index: src/sys/arch/arm/nvidia/tegra_ahcisatareg.h diff -u /dev/null src/sys/arch/arm/nvidia/tegra_ahcisatareg.h:1.1 --- /dev/null Fri May 15 17:43:36 2015 +++ src/sys/arch/arm/nvidia/tegra_ahcisatareg.h Fri May 15 17:43:35 2015 @@ -0,0 +1,95 @@ +/* $NetBSD: tegra_ahcisatareg.h,v 1.1 2015/05/15 17:43:35 jmcneill Exp $ */ + +/*- + * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + *notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + *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 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. + */ + +#ifndef _ARM_TEGRA_AHCISATAREG_H +#define _ARM_TEGRA_AHCISATAREG_H + +#define TEGRA_SATA_FPCI_BAR5_REG 0x94 + +#define TEGRA_SATA_FPCI_BAR_START __BITS(31,4) +#define TEGRA_SATA_FPCI_BAR_ACCESS_TYPE __BIT(0) + +#define TEGRA_SATA_CONFIGURATION_REG 0x180 +#define TEGRA_SATA_CONFIGURATION_EN_FPCI __BIT(0) + +#define TEGRA_SATA_INTR_MASK_REG 0x188 +#define TEGRA_SATA_INTR_MASK_IP_INT __BIT(16) +#define TEGRA_SATA_INTR_MASK_MSI __BIT(8) +#define TEGRA_SATA_INTR_MASK_INT __BIT(0) + +#define TEGRA_T_SATA0_CFG1_REG 0x1004 +#define TEGRA_T_SATA0_CFG1_INTR_DISABLE __BIT(10) +#define TEGRA_T_SATA0_CFG1_SERR__BIT(8) +#define TEGRA_T_SATA0_CFG1_BUS_MASTER __BIT(2) +#define TEGRA_T_SATA0_CFG1_MEM_SPACE __BIT(1) +#define TEGRA_T_SATA0_CFG1_IO_SPACE __BIT(0) + +#define TEGRA_T_SATA0_CFG9_REG 0x1024 +#define TEGRA_T_SATA0_CFG9_BASE_ADDRESS __BITS(31,13) +#define TEGRA_T_SATA0_CFG9_SPACE_TYPE __BIT(0) + +#define TEGRA_T_SATA0_BKDOOR_CC_REG 0x14a4 +#define TEGRA_T_SATA0_BKDOOR_CC_CLASS_CODE __BITS(31,16) +#define TEGRA_T_SATA0_BKDOOR_CC_PROG_IF __BITS(15,8) + +#define TEGRA_T_SATA0_CFG_POWER_GATE_REG 0x14ac +#define TEGRA_T_SATA0_CFG_POWER_GATE_SSTS_RESTORED __BIT(23) + +#define TEGRA_T_SATA0_CFG_SATA_REG 0x154c +#define TEGRA_T_SATA0_CFG_SATA_BACKDOOR_PROG_IF_EN __BIT(12) + +#define TEGRA_T_SATA0_INDEX_REG 0x1680 +#define TEGRA_T_SATA0_INDEX_CH4__BIT(3) +#define TEGRA_T_SATA0_INDEX_CH3__BIT(2) +#define TEGRA_T_SATA0_INDEX_CH2__BIT(1) +#define TEGRA_T_SATA0_INDEX_CH1__BIT(0) + +#define TEGRA_T_SATA0_CHX_PHY_CTRL1_GEN1_REG 0x1690 +#define TEGRA_T_SATA0_CHX_PHY_CTRL1_GEN1_TX_DRV_CNTL __BITS(27,24) +#define TEGRA_T_SATA0_CHX_PHY_CTRL1_GEN1_TX_PEAK_PRE __BITS(23,20) +#define TEGRA_T_SATA0_CHX_PHY_CTRL1_GEN1_TX_CMADJ __BITS(19,16) +#define TEGRA_T_SATA0_CHX_PHY_CTRL1_GEN1_TX_PEAK __BITS(15,8) +#define TEGRA_T_SATA0_CHX_PHY_CTRL1_GEN1_TX_AMP __BITS(7,0) + +#define TEGRA_T_SATA0_CHX_PHY_CTRL1_GEN2_REG 0x1694 +#define TEGRA_T_SATA0_CHX_PHY_CTRL1_GEN2_TX_DRV_CNTL __BITS(27,24) +#define TEGRA_T_SATA0_CHX_PHY_CTRL1_GEN2_TX_PEAK_PRE __BITS(23,20) +#define TEGRA_T_SATA0_CHX_PHY_CTRL1_GEN2_TX_PEAK __BITS(19,12) +#define TEGRA_T_SATA0_CHX_PHY_CTRL1_GEN2_TX_CMADJ __BITS(11,8) +#define TEGRA_T_SATA0_CHX_PHY_CTRL1_GEN2_TX_AMP __BITS(7,0) + +#define TEGRA_T_SATA0_CHX_PHY_CTRL2_REG 0x169c +#define TEGRA_T_SATA0_CHX_PHY_CTRL2_CDR_CNTL_GEN3 __BITS(23,16) +#define TEGRA_T_SATA0_CHX_PHY_CTRL2_CDR_CNTL_GEN2 __BITS(15,8) +#define TEGRA_T_SATA0_CHX_PHY_CTRL2_CDR_CNTL_GEN1 __BITS(7,0) + +#define TEGRA_T_SATA0_CHX_PHY_CTRL11_REG 0x16d0 +#define TEGRA_T_SATA0_CHX_PHY_CTRL11_GEN2_RX_EQ __BITS(31,16) +#define TEGRA_T_SATA0_CHX_PHY_CTRL11_GEN1_RX_EQ __BITS(15,0) + +#endif /* _ARM_TEGRA_AHCISATAREG_H */
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Fri May 15 17:43:36 UTC 2015 Added Files: src/sys/arch/arm/nvidia: tegra_ahcisatareg.h Log Message: Tegra SATA registers To generate a diff of this commit: cvs rdiff -u -r0 -r1.1 src/sys/arch/arm/nvidia/tegra_ahcisatareg.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Thu May 14 10:23:03 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_car.c tegra_carreg.h Log Message: enable SATA OOB clock To generate a diff of this commit: cvs rdiff -u -r1.12 -r1.13 src/sys/arch/arm/nvidia/tegra_car.c cvs rdiff -u -r1.13 -r1.14 src/sys/arch/arm/nvidia/tegra_carreg.h 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/nvidia/tegra_car.c diff -u src/sys/arch/arm/nvidia/tegra_car.c:1.12 src/sys/arch/arm/nvidia/tegra_car.c:1.13 --- src/sys/arch/arm/nvidia/tegra_car.c:1.12 Thu May 14 00:00:44 2015 +++ src/sys/arch/arm/nvidia/tegra_car.c Thu May 14 10:23:03 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_car.c,v 1.12 2015/05/14 00:00:44 jmcneill Exp $ */ +/* $NetBSD: tegra_car.c,v 1.13 2015/05/14 10:23:03 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_car.c,v 1.12 2015/05/14 00:00:44 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_car.c,v 1.13 2015/05/14 10:23:03 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -494,6 +494,7 @@ tegra_car_periph_sata_enable(void) /* Turn on the clocks to SATA and de-assert resets */ bus_space_write_4(bst, bsh, CAR_CLK_ENB_W_SET_REG, CAR_DEV_W_SATACOLD); bus_space_write_4(bst, bsh, CAR_CLK_ENB_V_SET_REG, CAR_DEV_V_SATA); + bus_space_write_4(bst, bsh, CAR_CLK_ENB_V_SET_REG, CAR_DEV_V_SATA_OOB); bus_space_write_4(bst, bsh, CAR_RST_DEV_W_CLR_REG, CAR_DEV_W_SATACOLD); bus_space_write_4(bst, bsh, CAR_RST_DEV_V_CLR_REG, CAR_DEV_V_SATA); } Index: src/sys/arch/arm/nvidia/tegra_carreg.h diff -u src/sys/arch/arm/nvidia/tegra_carreg.h:1.13 src/sys/arch/arm/nvidia/tegra_carreg.h:1.14 --- src/sys/arch/arm/nvidia/tegra_carreg.h:1.13 Thu May 14 00:00:44 2015 +++ src/sys/arch/arm/nvidia/tegra_carreg.h Thu May 14 10:23:03 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_carreg.h,v 1.13 2015/05/14 00:00:44 jmcneill Exp $ */ +/* $NetBSD: tegra_carreg.h,v 1.14 2015/05/14 10:23:03 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -258,6 +258,7 @@ #define CAR_DEV_V_HDA __BIT(29) #define CAR_DEV_V_SATA __BIT(28) +#define CAR_DEV_V_SATA_OOB __BIT(27) #define CAR_DEV_V_ACTMON __BIT(23) #define CAR_DEV_V_ATOMICS __BIT(16) #define CAR_DEV_V_HDA2CODEC_2X __BIT(15)
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Thu May 14 10:23:03 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_car.c tegra_carreg.h Log Message: enable SATA OOB clock To generate a diff of this commit: cvs rdiff -u -r1.12 -r1.13 src/sys/arch/arm/nvidia/tegra_car.c cvs rdiff -u -r1.13 -r1.14 src/sys/arch/arm/nvidia/tegra_carreg.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Wed May 13 11:06:13 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: files.tegra soc_tegra124.c tegra_car.c tegra_carreg.h tegra_soc.c tegra_var.h Added Files: src/sys/arch/arm/nvidia: tegra_cpufreq.c Log Message: Tegra K1 CPU frequency scaling support. jetsontk1# sysctl machdep.cpu machdep.cpu.frequency.target = 2292 machdep.cpu.frequency.current = 2292 machdep.cpu.frequency.available = 2292 2100 1896 1692 1500 1296 1092 900 696 To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/sys/arch/arm/nvidia/files.tegra cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/nvidia/soc_tegra124.c cvs rdiff -u -r1.10 -r1.11 src/sys/arch/arm/nvidia/tegra_car.c cvs rdiff -u -r1.11 -r1.12 src/sys/arch/arm/nvidia/tegra_carreg.h cvs rdiff -u -r0 -r1.1 src/sys/arch/arm/nvidia/tegra_cpufreq.c cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/nvidia/tegra_soc.c cvs rdiff -u -r1.14 -r1.15 src/sys/arch/arm/nvidia/tegra_var.h 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/nvidia/files.tegra diff -u src/sys/arch/arm/nvidia/files.tegra:1.9 src/sys/arch/arm/nvidia/files.tegra:1.10 --- src/sys/arch/arm/nvidia/files.tegra:1.9 Sun May 10 23:50:21 2015 +++ src/sys/arch/arm/nvidia/files.tegra Wed May 13 11:06:13 2015 @@ -1,4 +1,4 @@ -# $NetBSD: files.tegra,v 1.9 2015/05/10 23:50:21 jmcneill Exp $ +# $NetBSD: files.tegra,v 1.10 2015/05/13 11:06:13 jmcneill Exp $ # # Configuration info for NVIDIA Tegra ARM Peripherals # @@ -14,6 +14,7 @@ file arch/arm/arm32/armv7_generic_space. file arch/arm/arm/bus_space_a4x.S file arch/arm/nvidia/tegra_soc.c +file arch/arm/nvidia/tegra_cpufreq.c file arch/arm/nvidia/soc_tegra124.c soc_tegra124 # On-board I/O @@ -89,6 +90,9 @@ defparam opt_tegra.h CONMODE # Memory parameters defparam opt_tegra.h MEMSIZE +# CPU parameters +defparam opt_tegra.h CPUFREQ_BOOT + # SOC parameters defflag opt_tegra.h SOC_TEGRAK1 defflag opt_tegra.h SOC_TEGRA124: SOC_TEGRAK1 Index: src/sys/arch/arm/nvidia/soc_tegra124.c diff -u src/sys/arch/arm/nvidia/soc_tegra124.c:1.2 src/sys/arch/arm/nvidia/soc_tegra124.c:1.3 --- src/sys/arch/arm/nvidia/soc_tegra124.c:1.2 Sun Apr 26 22:04:28 2015 +++ src/sys/arch/arm/nvidia/soc_tegra124.c Wed May 13 11:06:13 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: soc_tegra124.c,v 1.2 2015/04/26 22:04:28 jmcneill Exp $ */ +/* $NetBSD: soc_tegra124.c,v 1.3 2015/05/13 11:06:13 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -30,7 +30,7 @@ #include opt_multiprocessor.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: soc_tegra124.c,v 1.2 2015/04/26 22:04:28 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: soc_tegra124.c,v 1.3 2015/05/13 11:06:13 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -47,6 +47,80 @@ __KERNEL_RCSID(0, $NetBSD: soc_tegra124 #define EVP_RESET_VECTOR_0_REG 0x100 +static u_int tegra124_cpufreq_set_rate(u_int); +static u_int tegra124_cpufreq_get_rate(void); +static size_t tegra124_cpufreq_get_available(u_int *, size_t); + +static const struct tegra_cpufreq_func tegra124_cpufreq_func = { + .set_rate = tegra124_cpufreq_set_rate, + .get_rate = tegra124_cpufreq_get_rate, + .get_available = tegra124_cpufreq_get_available, +}; + +static struct tegra124_cpufreq_rate { + u_int rate; + u_int divm; + u_int divn; + u_int divp; +} tegra124_cpufreq_rates[] = { + { 2292, 1, 191, 0 }, + { 2100, 1, 175, 0 }, + { 1896, 1, 158, 0 }, + { 1692, 1, 141, 0 }, + { 1500, 1, 125, 0 }, + { 1296, 1, 108, 0 }, + { 1092, 1, 91, 0 }, + { 900, 1, 75, 0 }, + { 696, 1, 58, 0 } +}; + +void +tegra124_cpuinit(void) +{ + tegra_cpufreq_register(tegra124_cpufreq_func); +} + +static u_int +tegra124_cpufreq_set_rate(u_int rate) +{ + const u_int nrates = __arraycount(tegra124_cpufreq_rates); + const struct tegra124_cpufreq_rate *r = NULL; + + for (int i = 0; i nrates; i++) { + if (tegra124_cpufreq_rates[i].rate == rate) { + r = tegra124_cpufreq_rates[i]; + break; + } + } + if (r == NULL) + return EINVAL; + + tegra_car_pllx_set_rate(r-divm, r-divn, r-divp); + + return 0; +} + +static u_int +tegra124_cpufreq_get_rate(void) +{ + return tegra_car_pllx_rate() / 100; +} + +static size_t +tegra124_cpufreq_get_available(u_int *pavail, size_t maxavail) +{ + const u_int nrates = __arraycount(tegra124_cpufreq_rates); + u_int n; + + KASSERT(nrates = maxavail); + + for (n = 0; n nrates; n++) { + pavail[n] = tegra124_cpufreq_rates[n].rate; + } + + return nrates; +} + void tegra124_mpinit(void) { Index: src/sys/arch/arm/nvidia/tegra_car.c diff -u src/sys/arch/arm/nvidia/tegra_car.c:1.10 src/sys/arch/arm/nvidia/tegra_car.c:1.11 --- src/sys/arch/arm/nvidia/tegra_car.c:1.10 Sun May 10 23:56:21 2015 +++ src/sys/arch/arm/nvidia/tegra_car.c Wed May 13 11:06:13 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_car.c,v 1.10 2015/05/10 23:56:21 jmcneill Exp $ */ +/*
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Wed May 13 11:06:13 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: files.tegra soc_tegra124.c tegra_car.c tegra_carreg.h tegra_soc.c tegra_var.h Added Files: src/sys/arch/arm/nvidia: tegra_cpufreq.c Log Message: Tegra K1 CPU frequency scaling support. jetsontk1# sysctl machdep.cpu machdep.cpu.frequency.target = 2292 machdep.cpu.frequency.current = 2292 machdep.cpu.frequency.available = 2292 2100 1896 1692 1500 1296 1092 900 696 To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/sys/arch/arm/nvidia/files.tegra cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/nvidia/soc_tegra124.c cvs rdiff -u -r1.10 -r1.11 src/sys/arch/arm/nvidia/tegra_car.c cvs rdiff -u -r1.11 -r1.12 src/sys/arch/arm/nvidia/tegra_carreg.h cvs rdiff -u -r0 -r1.1 src/sys/arch/arm/nvidia/tegra_cpufreq.c cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/nvidia/tegra_soc.c cvs rdiff -u -r1.14 -r1.15 src/sys/arch/arm/nvidia/tegra_var.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Thu May 14 00:00:44 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_ahcisata.c tegra_car.c tegra_carreg.h Log Message: fix SATA controller init To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/nvidia/tegra_ahcisata.c cvs rdiff -u -r1.11 -r1.12 src/sys/arch/arm/nvidia/tegra_car.c cvs rdiff -u -r1.12 -r1.13 src/sys/arch/arm/nvidia/tegra_carreg.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Thu May 14 00:00:44 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: tegra_ahcisata.c tegra_car.c tegra_carreg.h Log Message: fix SATA controller init To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/nvidia/tegra_ahcisata.c cvs rdiff -u -r1.11 -r1.12 src/sys/arch/arm/nvidia/tegra_car.c cvs rdiff -u -r1.12 -r1.13 src/sys/arch/arm/nvidia/tegra_carreg.h 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/nvidia/tegra_ahcisata.c diff -u src/sys/arch/arm/nvidia/tegra_ahcisata.c:1.3 src/sys/arch/arm/nvidia/tegra_ahcisata.c:1.4 --- src/sys/arch/arm/nvidia/tegra_ahcisata.c:1.3 Sun May 10 15:31:48 2015 +++ src/sys/arch/arm/nvidia/tegra_ahcisata.c Thu May 14 00:00:44 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_ahcisata.c,v 1.3 2015/05/10 15:31:48 jmcneill Exp $ */ +/* $NetBSD: tegra_ahcisata.c,v 1.4 2015/05/14 00:00:44 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_ahcisata.c,v 1.3 2015/05/10 15:31:48 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_ahcisata.c,v 1.4 2015/05/14 00:00:44 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -54,6 +54,8 @@ struct tegra_ahcisata_softc { bus_space_tag_t sc_bst; bus_space_handle_t sc_bsh; void *sc_ih; + + struct tegra_gpio_pin *sc_pin_power; }; static void tegra_ahcisata_init(struct tegra_ahcisata_softc *); @@ -73,6 +75,8 @@ tegra_ahcisata_attach(device_t parent, d struct tegra_ahcisata_softc * const sc = device_private(self); struct tegraio_attach_args * const tio = aux; const struct tegra_locators * const loc = tio-tio_loc; + prop_dictionary_t prop = device_properties(self); + const char *pin; sc-sc_bst = tio-tio_bst; bus_space_subregion(tio-tio_bst, tio-tio_bsh, @@ -81,7 +85,7 @@ tegra_ahcisata_attach(device_t parent, d sc-sc.sc_atac.atac_dev = self; sc-sc.sc_dmat = tio-tio_dmat; sc-sc.sc_ahcit = tio-tio_bst; - sc-sc.sc_ahcis = loc-loc_size; + sc-sc.sc_ahcis = loc-loc_size - TEGRA_AHCISATA_OFFSET; bus_space_subregion(tio-tio_bst, tio-tio_bsh, loc-loc_offset + TEGRA_AHCISATA_OFFSET, loc-loc_size - TEGRA_AHCISATA_OFFSET, sc-sc.sc_ahcih); @@ -90,6 +94,12 @@ tegra_ahcisata_attach(device_t parent, d aprint_naive(\n); aprint_normal(: SATA\n); + if (prop_dictionary_get_cstring_nocopy(prop, power-gpio, pin)) { + sc-sc_pin_power = tegra_gpio_acquire(pin, GPIO_PIN_OUTPUT); + if (sc-sc_pin_power) + tegra_gpio_write(sc-sc_pin_power, 1); + } + tegra_car_periph_sata_enable(); tegra_ahcisata_init(sc); Index: src/sys/arch/arm/nvidia/tegra_car.c diff -u src/sys/arch/arm/nvidia/tegra_car.c:1.11 src/sys/arch/arm/nvidia/tegra_car.c:1.12 --- src/sys/arch/arm/nvidia/tegra_car.c:1.11 Wed May 13 11:06:13 2015 +++ src/sys/arch/arm/nvidia/tegra_car.c Thu May 14 00:00:44 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_car.c,v 1.11 2015/05/13 11:06:13 jmcneill Exp $ */ +/* $NetBSD: tegra_car.c,v 1.12 2015/05/14 00:00:44 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_car.c,v 1.11 2015/05/13 11:06:13 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_car.c,v 1.12 2015/05/14 00:00:44 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -462,6 +462,23 @@ tegra_car_periph_sata_enable(void) tegra_car_get_bs(bst, bsh); + const u_int pllp_rate = tegra_car_pllp0_rate(); + + /* Set SATA_OOB clock source to PLLP, 204MHz */ + const u_int sataoob_div = pllp_rate / 2; + bus_space_write_4(bst, bsh, CAR_CLKSRC_SATA_OOB_REG, + __SHIFTIN(CAR_CLKSRC_SATA_SRC_PLLP_OUT0, + CAR_CLKSRC_SATA_SRC) | + __SHIFTIN(sataoob_div - 1, CAR_CLKSRC_SATA_OOB_DIV)); + + /* Set SATA clock source to PLLP, 102MHz */ + const u_int sata_div = pllp_rate / 1; + bus_space_write_4(bst, bsh, CAR_CLKSRC_SATA_REG, + CAR_CLKSRC_SATA_AUX_CLK_ENB | + __SHIFTIN(CAR_CLKSRC_SATA_SRC_PLLP_OUT0, + CAR_CLKSRC_SATA_SRC) | + __SHIFTIN(sata_div - 1, CAR_CLKSRC_SATA_DIV)); + /* Enable CML clock for SATA */ tegra_reg_set_clear(bst, bsh, CAR_PLLE_AUX_REG, CAR_PLLE_AUX_CML1_OEN, 0); @@ -475,6 +492,7 @@ tegra_car_periph_sata_enable(void) tegra_pmc_power(PMC_PARTID_SAX, true); /* Turn on the clocks to SATA and de-assert resets */ + bus_space_write_4(bst, bsh, CAR_CLK_ENB_W_SET_REG, CAR_DEV_W_SATACOLD); bus_space_write_4(bst, bsh, CAR_CLK_ENB_V_SET_REG, CAR_DEV_V_SATA); bus_space_write_4(bst, bsh, CAR_RST_DEV_W_CLR_REG, CAR_DEV_W_SATACOLD); bus_space_write_4(bst, bsh, CAR_RST_DEV_V_CLR_REG, CAR_DEV_V_SATA); Index: src/sys/arch/arm/nvidia/tegra_carreg.h diff -u src/sys/arch/arm/nvidia/tegra_carreg.h:1.12
CVS commit: src/sys/arch/arm/nvidia
Module Name:src Committed By: jmcneill Date: Sun May 10 23:50:21 UTC 2015 Modified Files: src/sys/arch/arm/nvidia: files.tegra tegra_car.c tegra_carreg.h tegra_intr.h tegra_io.c tegra_reg.h tegra_var.h Added Files: src/sys/arch/arm/nvidia: tegra_i2c.c tegra_i2creg.h Log Message: Tegra I2C driver To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/sys/arch/arm/nvidia/files.tegra \ src/sys/arch/arm/nvidia/tegra_car.c src/sys/arch/arm/nvidia/tegra_reg.h cvs rdiff -u -r1.10 -r1.11 src/sys/arch/arm/nvidia/tegra_carreg.h cvs rdiff -u -r0 -r1.1 src/sys/arch/arm/nvidia/tegra_i2c.c \ src/sys/arch/arm/nvidia/tegra_i2creg.h cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/nvidia/tegra_intr.h cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/nvidia/tegra_io.c cvs rdiff -u -r1.13 -r1.14 src/sys/arch/arm/nvidia/tegra_var.h 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/nvidia/files.tegra diff -u src/sys/arch/arm/nvidia/files.tegra:1.8 src/sys/arch/arm/nvidia/files.tegra:1.9 --- src/sys/arch/arm/nvidia/files.tegra:1.8 Thu May 7 23:55:11 2015 +++ src/sys/arch/arm/nvidia/files.tegra Sun May 10 23:50:21 2015 @@ -1,4 +1,4 @@ -# $NetBSD: files.tegra,v 1.8 2015/05/07 23:55:11 jmcneill Exp $ +# $NetBSD: files.tegra,v 1.9 2015/05/10 23:50:21 jmcneill Exp $ # # Configuration info for NVIDIA Tegra ARM Peripherals # @@ -50,6 +50,11 @@ file arch/arm/nvidia/tegra_mpio.c tegra attach com at tegraio with tegra_com file arch/arm/nvidia/tegra_com.c tegra_com needs-flag +# I2C +device tegrai2c: i2cbus, i2cexec +attach tegrai2c at tegraio with tegra_i2c +file arch/arm/nvidia/tegra_i2c.c tegra_i2c + # RTC device tegrartc attach tegrartc at tegraio with tegra_rtc Index: src/sys/arch/arm/nvidia/tegra_car.c diff -u src/sys/arch/arm/nvidia/tegra_car.c:1.8 src/sys/arch/arm/nvidia/tegra_car.c:1.9 --- src/sys/arch/arm/nvidia/tegra_car.c:1.8 Sun May 10 15:31:48 2015 +++ src/sys/arch/arm/nvidia/tegra_car.c Sun May 10 23:50:21 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_car.c,v 1.8 2015/05/10 15:31:48 jmcneill Exp $ */ +/* $NetBSD: tegra_car.c,v 1.9 2015/05/10 23:50:21 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include locators.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: tegra_car.c,v 1.8 2015/05/10 15:31:48 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: tegra_car.c,v 1.9 2015/05/10 23:50:21 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -437,3 +437,70 @@ tegra_car_periph_sata_enable(void) bus_space_write_4(bst, bsh, CAR_RST_DEV_W_CLR_REG, CAR_DEV_W_SATACOLD); bus_space_write_4(bst, bsh, CAR_RST_DEV_V_CLR_REG, CAR_DEV_V_SATA); } + +int +tegra_car_periph_i2c_enable(u_int port, u_int rate) +{ + bus_space_tag_t bst; + bus_space_handle_t bsh; + bus_size_t rst_reg, enb_reg, clksrc_reg; + uint32_t dev_bit; + + tegra_car_get_bs(bst, bsh); + + switch (port) { + case 0: + rst_reg = CAR_RST_DEV_L_SET_REG; + enb_reg = CAR_CLK_ENB_L_SET_REG; + dev_bit = CAR_DEV_L_I2C1; + clksrc_reg = CAR_CLKSRC_I2C1_REG; + break; + case 1: + rst_reg = CAR_RST_DEV_H_SET_REG; + enb_reg = CAR_CLK_ENB_H_SET_REG; + dev_bit = CAR_DEV_H_I2C2; + clksrc_reg = CAR_CLKSRC_I2C2_REG; + break; + case 2: + rst_reg = CAR_RST_DEV_U_SET_REG; + enb_reg = CAR_CLK_ENB_U_SET_REG; + dev_bit = CAR_DEV_U_I2C3; + clksrc_reg = CAR_CLKSRC_I2C3_REG; + break; + case 3: + rst_reg = CAR_RST_DEV_V_SET_REG; + enb_reg = CAR_CLK_ENB_V_SET_REG; + dev_bit = CAR_DEV_V_I2C4; + clksrc_reg = CAR_CLKSRC_I2C4_REG; + break; + case 4: + rst_reg = CAR_RST_DEV_H_SET_REG; + enb_reg = CAR_CLK_ENB_V_SET_REG; + dev_bit = CAR_DEV_H_I2C5; + clksrc_reg = CAR_CLKSRC_I2C5_REG; + break; + case 5: + rst_reg = CAR_RST_DEV_X_SET_REG; + enb_reg = CAR_CLK_ENB_X_SET_REG; + dev_bit = CAR_DEV_X_I2C6; + clksrc_reg = CAR_CLKSRC_I2C6_REG; + break; + default: + return EINVAL; + } + + /* Enter reset, enable clock */ + bus_space_write_4(bst, bsh, rst_reg, dev_bit); + bus_space_write_4(bst, bsh, enb_reg, dev_bit); + + /* Set clock source to PLLP */ + const u_int div = howmany(tegra_car_pllp0_rate() / 1000, rate / 1000); + bus_space_write_4(bst, bsh, clksrc_reg, + __SHIFTIN(CAR_CLKSRC_I2C_SRC_PLLP_OUT0, CAR_CLKSRC_I2C_SRC) | + __SHIFTIN(div - 1, CAR_CLKSRC_I2C_DIV)); + + /* Leave reset */ + bus_space_write_4(bst, bsh, rst_reg+4, dev_bit); + + return 0; +} Index: src/sys/arch/arm/nvidia/tegra_reg.h diff -u src/sys/arch/arm/nvidia/tegra_reg.h:1.8 src/sys/arch/arm/nvidia/tegra_reg.h:1.9 --- src/sys/arch/arm/nvidia/tegra_reg.h:1.8 Thu May 7 23:55:11 2015 +++ src/sys/arch/arm/nvidia/tegra_reg.h Sun May 10 23:50:21 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_reg.h,v 1.8 2015/05/07 23:55:11 jmcneill Exp $ */ +/* $NetBSD: tegra_reg.h,v 1.9 2015/05/10 23:50:21 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill jmcne...@invisible.ca @@ -78,6 +78,18 @@