Module Name: src Committed By: jmcneill Date: Tue Sep 19 20:45:09 UTC 2017
Modified Files: src/sys/arch/arm/nvidia: tegra210_car.c Log Message: Add some xusb clocks (not working yet) To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/nvidia/tegra210_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/tegra210_car.c diff -u src/sys/arch/arm/nvidia/tegra210_car.c:1.1 src/sys/arch/arm/nvidia/tegra210_car.c:1.2 --- src/sys/arch/arm/nvidia/tegra210_car.c:1.1 Fri Jul 21 01:01:22 2017 +++ src/sys/arch/arm/nvidia/tegra210_car.c Tue Sep 19 20:45:09 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra210_car.c,v 1.1 2017/07/21 01:01:22 jmcneill Exp $ */ +/* $NetBSD: tegra210_car.c,v 1.2 2017/09/19 20:45:09 jmcneill Exp $ */ /*- * Copyright (c) 2015-2017 Jared McNeill <jmcne...@invisible.ca> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: tegra210_car.c,v 1.1 2017/07/21 01:01:22 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: tegra210_car.c,v 1.2 2017/09/19 20:45:09 jmcneill Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -424,6 +424,18 @@ static const char *mux_i2c_p[] = { "PLL_P", "PLL_C2_OUT0", "PLL_C", "PLL_C4_OUT0", NULL, "PLL_C4_OUT1", "CLK_M", "PLL_C4_OUT2" }; +static const char *mux_xusb_host_p[] = + { "CLK_M", "PLL_P", NULL, NULL, + NULL, "PLL_REF", NULL, NULL }; + +static const char *mux_xusb_fs_p[] = + { "CLK_M", NULL, "PLL_U_48M", NULL, + "PLL_P", NULL, "PLL_U_480M", NULL }; + +static const char *mux_xusb_ss_p[] = + { "CLK_M", "PLL_REF", "CLK_32K", "PLL_U_480M", + NULL, NULL, NULL, NULL }; + static struct tegra_clk tegra210_car_clocks[] = { CLK_FIXED("CLK_M", TEGRA210_REF_FREQ), @@ -444,6 +456,9 @@ static struct tegra_clk tegra210_car_clo CLK_PLL("PLL_REF", "CLK_M", CAR_PLLREFE_BASE_REG, CAR_PLLREFE_BASE_DIVM, CAR_PLLREFE_BASE_DIVN, CAR_PLLREFE_BASE_DIVP), + CLK_FIXED_DIV("PLL_U_480M", "PLL_U", 1), + CLK_FIXED_DIV("PLL_U_48M", "PLL_U", 10), + CLK_MUX("MUX_UARTA", CAR_CLKSRC_UARTA_REG, CAR_CLKSRC_UART_SRC, mux_uart_p), CLK_MUX("MUX_UARTB", CAR_CLKSRC_UARTB_REG, CAR_CLKSRC_UART_SRC, @@ -469,6 +484,19 @@ static struct tegra_clk tegra210_car_clo CLK_MUX("MUX_I2C5", CAR_CLKSRC_I2C5_REG, CAR_CLKSRC_I2C_SRC, mux_i2c_p), CLK_MUX("MUX_I2C6", CAR_CLKSRC_I2C6_REG, CAR_CLKSRC_I2C_SRC, mux_i2c_p), + CLK_MUX("MUX_XUSB_HOST", + CAR_CLKSRC_XUSB_HOST_REG, CAR_CLKSRC_XUSB_HOST_SRC, + mux_xusb_host_p), + CLK_MUX("MUX_XUSB_FALCON", + CAR_CLKSRC_XUSB_FALCON_REG, CAR_CLKSRC_XUSB_FALCON_SRC, + mux_xusb_host_p), + CLK_MUX("MUX_XUSB_SS", + CAR_CLKSRC_XUSB_SS_REG, CAR_CLKSRC_XUSB_SS_SRC, + mux_xusb_ss_p), + CLK_MUX("MUX_XUSB_FS", + CAR_CLKSRC_XUSB_FS_REG, CAR_CLKSRC_XUSB_FS_SRC, + mux_xusb_fs_p), + CLK_DIV("DIV_UARTA", "MUX_UARTA", CAR_CLKSRC_UARTA_REG, CAR_CLKSRC_UART_DIV), CLK_DIV("DIV_UARTB", "MUX_UARTB", @@ -500,6 +528,15 @@ static struct tegra_clk tegra210_car_clo CLK_DIV("DIV_I2C6", "MUX_I2C6", CAR_CLKSRC_I2C6_REG, CAR_CLKSRC_I2C_DIV), + CLK_DIV("XUSB_HOST_SRC", "MUX_XUSB_HOST", + CAR_CLKSRC_XUSB_HOST_REG, CAR_CLKSRC_XUSB_HOST_DIV), + CLK_DIV("XUSB_SS_SRC", "MUX_XUSB_SS", + CAR_CLKSRC_XUSB_SS_REG, CAR_CLKSRC_XUSB_SS_DIV), + CLK_DIV("XUSB_FS_SRC", "MUX_XUSB_FS", + CAR_CLKSRC_XUSB_FS_REG, CAR_CLKSRC_XUSB_FS_DIV), + CLK_DIV("XUSB_FALCON_SRC", "MUX_XUSB_FALCON", + CAR_CLKSRC_XUSB_FALCON_REG, CAR_CLKSRC_XUSB_FALCON_DIV), + CLK_GATE_L("UARTA", "DIV_UARTA", CAR_DEV_L_UARTA), CLK_GATE_L("UARTB", "DIV_UARTB", CAR_DEV_L_UARTB), CLK_GATE_H("UARTC", "DIV_UARTC", CAR_DEV_H_UARTC), @@ -514,16 +551,23 @@ static struct tegra_clk tegra210_car_clo CLK_GATE_V("I2C4", "DIV_I2C4", CAR_DEV_V_I2C4), CLK_GATE_H("I2C5", "DIV_I2C5", CAR_DEV_H_I2C5), CLK_GATE_X("I2C6", "DIV_I2C6", CAR_DEV_X_I2C6), + CLK_GATE_U("XUSB_HOST", "XUSB_HOST_SRC", CAR_DEV_U_XUSB_HOST), + CLK_GATE_W("XUSB_SS", "XUSB_SS_SRC", CAR_DEV_W_XUSB_SS), + CLK_GATE_H("FUSE", "CLK_M", CAR_DEV_H_FUSE), }; struct tegra210_init_parent { const char *clock; const char *parent; } tegra210_init_parents[] = { - { "SDMMC1", "PLL_P" }, - { "SDMMC2", "PLL_P" }, - { "SDMMC3", "PLL_P" }, - { "SDMMC4", "PLL_P" }, + { "SDMMC1", "PLL_P" }, + { "SDMMC2", "PLL_P" }, + { "SDMMC3", "PLL_P" }, + { "SDMMC4", "PLL_P" }, + { "XUSB_HOST_SRC", "PLL_P" }, + { "XUSB_FALCON_SRC", "PLL_P" }, + { "XUSB_SS_SRC", "PLL_U_480M" }, + { "XUSB_FS_SRC", "PLL_U_48M" }, }; struct tegra210_car_rst { @@ -572,9 +616,12 @@ struct tegra210_car_softc { }; static void tegra210_car_init(struct tegra210_car_softc *); +static void tegra210_car_utmip_init(struct tegra210_car_softc *); +static void tegra210_car_xusb_init(struct tegra210_car_softc *); static void tegra210_car_watchdog_init(struct tegra210_car_softc *); static void tegra210_car_parent_init(struct tegra210_car_softc *); + CFATTACH_DECL_NEW(tegra210_car, sizeof(struct tegra210_car_softc), tegra210_car_match, tegra210_car_attach, NULL, NULL); @@ -651,10 +698,8 @@ static void tegra210_car_init(struct tegra210_car_softc *sc) { tegra210_car_parent_init(sc); -#if notyet tegra210_car_utmip_init(sc); tegra210_car_xusb_init(sc); -#endif tegra210_car_watchdog_init(sc); } @@ -683,7 +728,6 @@ tegra210_car_parent_init(struct tegra210 } } -#if notyet static void tegra210_car_utmip_init(struct tegra210_car_softc *sc) { @@ -761,7 +805,6 @@ tegra210_car_xusb_init(struct tegra210_c tegra_reg_set_clear(bst, bsh, CAR_CLKSRC_XUSB_SS_REG, CAR_CLKSRC_XUSB_SS_HS_CLK_BYPASS, 0); } -#endif static void tegra210_car_watchdog_init(struct tegra210_car_softc *sc)