Module Name:    src
Committed By:   jmcneill
Date:           Thu Sep 21 23:44:26 UTC 2017

Modified Files:
        src/sys/arch/arm/nvidia: tegra210_car.c tegra210_carreg.h

Log Message:
Setup PLLU


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/nvidia/tegra210_car.c
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/nvidia/tegra210_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/tegra210_car.c
diff -u src/sys/arch/arm/nvidia/tegra210_car.c:1.3 src/sys/arch/arm/nvidia/tegra210_car.c:1.4
--- src/sys/arch/arm/nvidia/tegra210_car.c:1.3	Thu Sep 21 22:54:39 2017
+++ src/sys/arch/arm/nvidia/tegra210_car.c	Thu Sep 21 23:44:26 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: tegra210_car.c,v 1.3 2017/09/21 22:54:39 jmcneill Exp $ */
+/* $NetBSD: tegra210_car.c,v 1.4 2017/09/21 23:44:26 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.3 2017/09/21 22:54:39 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tegra210_car.c,v 1.4 2017/09/21 23:44:26 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -768,7 +768,26 @@ tegra210_car_xusb_init(struct tegra210_c
 	const bus_space_handle_t bsh = sc->sc_bsh;
 	uint32_t val;
 
-	/* XXX do this all better */
+	/*
+	 * Set up the PLLU (enable in software).
+	 */
+	tegra_reg_set_clear(bst, bsh, CAR_PLLU_BASE_REG, CAR_PLLU_BASE_OVERRIDE, 0);
+	tegra_reg_set_clear(bst, bsh, CAR_PLLU_MISC_REG, CAR_PLLU_MISC_IDDQ, 0);
+	tegra_reg_set_clear(bst, bsh, CAR_PLLU_MISC_REG, 0, CAR_PLLU_MISC_IDDQ);
+	tegra_reg_set_clear(bst, bsh, CAR_PLLU_OUTA_REG, 0, CAR_PLLU_OUTA_OUT1_RSTN);
+	tegra_reg_set_clear(bst, bsh, CAR_PLLU_OUTA_REG, 0, CAR_PLLU_OUTA_OUT2_RSTN);
+	delay(5);
+	tegra_reg_set_clear(bst, bsh, CAR_PLLU_BASE_REG, CAR_PLLU_BASE_ENABLE, 0);
+	do {
+		delay(2);
+		val = bus_space_read_4(bst, bsh, CAR_PLLU_BASE_REG);
+	} while ((val & CAR_PLLU_BASE_LOCK) == 0);
+	tegra_reg_set_clear(bst, bsh, CAR_PLLU_BASE_REG, CAR_PLLU_BASE_CLKENABLE_ICUSB, 0);
+	tegra_reg_set_clear(bst, bsh, CAR_PLLU_BASE_REG, CAR_PLLU_BASE_CLKENABLE_HSIC, 0);
+	tegra_reg_set_clear(bst, bsh, CAR_PLLU_BASE_REG, CAR_PLLU_BASE_CLKENABLE_USB, 0);
+	tegra_reg_set_clear(bst, bsh, CAR_PLLU_OUTA_REG, CAR_PLLU_OUTA_OUT1_RSTN, 0);
+	tegra_reg_set_clear(bst, bsh, CAR_PLLU_OUTA_REG, CAR_PLLU_OUTA_OUT2_RSTN, 0);
+	delay(2);
 
 	bus_space_write_4(bst, bsh, CAR_CLK_ENB_W_SET_REG, CAR_DEV_W_XUSB);
 

Index: src/sys/arch/arm/nvidia/tegra210_carreg.h
diff -u src/sys/arch/arm/nvidia/tegra210_carreg.h:1.1 src/sys/arch/arm/nvidia/tegra210_carreg.h:1.2
--- src/sys/arch/arm/nvidia/tegra210_carreg.h:1.1	Fri Jul 21 01:01:22 2017
+++ src/sys/arch/arm/nvidia/tegra210_carreg.h	Thu Sep 21 23:44:26 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: tegra210_carreg.h,v 1.1 2017/07/21 01:01:22 jmcneill Exp $ */
+/* $NetBSD: tegra210_carreg.h,v 1.2 2017/09/21 23:44:26 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2017 Jared McNeill <jmcne...@invisible.ca>
@@ -97,6 +97,25 @@
 #define CAR_PLLU_BASE_DIVN		__BITS(15,8)
 #define CAR_PLLU_BASE_DIVM		__BITS(4,0)
 
+#define	CAR_PLLU_OUTA_REG	0xc4
+#define	CAR_PLLU_OUTA_OUT2_RATIO	__BITS(31,24)
+#define	CAR_PLLU_OUTA_OUT2_OVRRIDE	__BIT(18)
+#define	CAR_PLLU_OUTA_OUT2_CLKEN	__BIT(17)
+#define	CAR_PLLU_OUTA_OUT2_RSTN		__BIT(16)
+#define	CAR_PLLU_OUTA_OUT1_RATIO	__BITS(15,8)
+#define	CAR_PLLU_OUTA_OUT1_OVRRIDE	__BIT(2)
+#define	CAR_PLLU_OUTA_OUT1_CLKEN	__BIT(1)
+#define	CAR_PLLU_OUTA_OUT1_RSTN		__BIT(0)
+
+#define	CAR_PLLU_MISC_REG	0xcc
+#define	CAR_PLLU_MISC_IDDQ		__BIT(31)
+#define	CAR_PLLU_MISC_FREQLOCK		__BIT(30)
+#define	CAR_PLLU_MISC_EN_LCKDET		__BIT(29)
+#define	CAR_PLLU_MISC_PTS		__BITS(28,27)
+#define	CAR_PLLU_MISC_KCP		__BITS(26,25)
+#define	CAR_PLLU_MISC_KVCO		__BIT(24)
+#define	CAR_PLLU_MISC_SETUP		__BITS(23,0)
+
 #define CAR_PLLD_BASE_REG	0xd0
 #define CAR_PLLD_BASE_BYPASS		__BIT(31)
 #define CAR_PLLD_BASE_ENABLE		__BIT(30)

Reply via email to