Module Name:    src
Committed By:   skrll
Date:           Tue Jan  3 12:37:08 UTC 2017

Modified Files:
        src/sys/arch/arm/nvidia: tegra_xusb.c

Log Message:
Do some more error checking.

PR/51551


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/nvidia/tegra_xusb.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_xusb.c
diff -u src/sys/arch/arm/nvidia/tegra_xusb.c:1.1 src/sys/arch/arm/nvidia/tegra_xusb.c:1.2
--- src/sys/arch/arm/nvidia/tegra_xusb.c:1.1	Mon Sep 26 20:05:03 2016
+++ src/sys/arch/arm/nvidia/tegra_xusb.c	Tue Jan  3 12:37:08 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: tegra_xusb.c,v 1.1 2016/09/26 20:05:03 jakllsch Exp $ */
+/* $NetBSD: tegra_xusb.c,v 1.2 2017/01/03 12:37:08 skrll Exp $ */
 
 /*
  * Copyright (c) 2016 Jonathan A. Kollasch
@@ -30,7 +30,7 @@
 #include "opt_tegra.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tegra_xusb.c,v 1.1 2016/09/26 20:05:03 jakllsch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tegra_xusb.c,v 1.2 2017/01/03 12:37:08 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -109,6 +109,14 @@ tegra_xusb_match(device_t parent, cfdata
 	return of_match_compatible(faa->faa_phandle, compatible);
 }
 
+#define tegra_xusb_attach_check(sc, cond, fmt, ...)			\
+    do {								\
+	if (cond) {							\
+		aprint_error_dev(sc->sc_dev, fmt, ## __VA_ARGS__);	\
+		return;							\
+	}								\
+    } while (0)
+
 static void
 tegra_xusb_attach(device_t parent, device_t self, void *aux)
 {
@@ -206,24 +214,35 @@ tegra_xusb_attach(device_t parent, devic
 	rate = clk_get_rate(clk);
 	error = clk_enable(clk); /* XXX set frequency */
 	device_printf(sc->sc_dev, "rate %u error %d\n", rate, error);
+	tegra_xusb_attach_check(sc, error, "failed to enable pll_e clock");
 
 	clk = fdtbus_clock_get(faa->faa_phandle, "xusb_host_src");
 	error = clk_set_parent(clk, pll_p_out0);
+	tegra_xusb_attach_check(sc, error, "failed to set xusb_host_src clock parent");
+	
 	rate = clk_get_rate(clk);
 	device_printf(sc->sc_dev, "rate %u error %d\n", rate, error);
 	error = clk_set_rate(clk, 102000000);
+	tegra_xusb_attach_check(sc, error, "failed to set xusb_host_src clock rate");
+
 	rate = clk_get_rate(clk);
 	error = clk_enable(clk); /* XXX set frequency */
 	device_printf(sc->sc_dev, "rate %u error %d\n", rate, error);
+	tegra_xusb_attach_check(sc, error, "failed to enable xusb_host_src clock");
 
 	clk = fdtbus_clock_get(faa->faa_phandle, "xusb_falcon_src");
 	error = clk_set_parent(clk, pll_p_out0);
+	tegra_xusb_attach_check(sc, error, "failed to set xusb_falcon_src clock parent");
+
 	rate = clk_get_rate(clk);
 	device_printf(sc->sc_dev, "rate %u error %d\n", rate, error);
 	error = clk_set_rate(clk, 204000000);
+	tegra_xusb_attach_check(sc, error, "failed to set xusb_falcon_src clock rate");
+
 	rate = clk_get_rate(clk);
 	error = clk_enable(clk);
 	device_printf(sc->sc_dev, "rate %u error %d\n", rate, error);
+	tegra_xusb_attach_check(sc, error, "failed to enable xusb_falcon_src clock");
 
 	clk = fdtbus_clock_get(faa->faa_phandle, "xusb_host");
 	rate = clk_get_rate(clk);
@@ -234,32 +253,35 @@ tegra_xusb_attach(device_t parent, devic
 	rate = clk_get_rate(clk);
 	error = clk_enable(clk); /* XXX set frequency */
 	device_printf(sc->sc_dev, "xusb_ss rate %u error %d\n", rate, error);
+	tegra_xusb_attach_check(sc, error, "failed to enable xusb_ss clock");
 
 	psc->sc_clk_ss_src = fdtbus_clock_get(faa->faa_phandle, "xusb_ss_src");
-	if (psc->sc_clk_ss_src == NULL) {
-		printf("psc->sc_clk_ss_src %p\n", psc->sc_clk_ss_src);
-		Debugger();
-	}
-	error = 0;
+	tegra_xusb_attach_check(sc, psc->sc_clk_ss_src == NULL,
+		"failed to get xusb_ss_src clock");
 	rate = clk_get_rate(psc->sc_clk_ss_src);
-	device_printf(sc->sc_dev, "xusb_ss_src rate %u error %d\n", rate,
-	    error);
+	device_printf(sc->sc_dev, "xusb_ss_src rate %u\n", rate);
 
 	error = clk_set_rate(psc->sc_clk_ss_src, 2000000);
 	rate = clk_get_rate(psc->sc_clk_ss_src);
 	device_printf(sc->sc_dev, "xusb_ss_src rate %u error %d\n", rate,
 	    error);
+	tegra_xusb_attach_check(sc, error, "failed to get xusb_ss_src clock rate");
 
 	error = clk_set_parent(psc->sc_clk_ss_src, pll_u_480);
+	tegra_xusb_attach_check(sc, error, "failed to set xusb_ss_src clock parent");
+
 	rate = clk_get_rate(psc->sc_clk_ss_src);
-	device_printf(sc->sc_dev, "ss_src rate %u error %d\n", rate, error);
+	device_printf(sc->sc_dev, "ss_src rate %u\n", rate);
+	tegra_xusb_attach_check(sc, error, "failed to set xusb_ss_src clock rate");
 
 	error = clk_set_rate(psc->sc_clk_ss_src, 120000000);
 	rate = clk_get_rate(psc->sc_clk_ss_src);
 	device_printf(sc->sc_dev, "ss_src rate %u error %d\n", rate, error);
+	tegra_xusb_attach_check(sc, error, "failed to get xusb_ss_src clock rate");
 
 	error = clk_enable(psc->sc_clk_ss_src);
 	device_printf(sc->sc_dev, "ss_src rate %u error %d\n", rate, error);
+	tegra_xusb_attach_check(sc, error, "failed to enable xusb_ss_src clock");
 
 #if 0
 	clk = fdtbus_clock_get(faa->faa_phandle, "xusb_hs_src");
@@ -270,9 +292,12 @@ tegra_xusb_attach(device_t parent, devic
 
 	clk = fdtbus_clock_get(faa->faa_phandle, "xusb_fs_src");
 	error = clk_set_parent(clk, pll_u_48);
+	tegra_xusb_attach_check(sc, error, "failed to set xusb_fs_src clock parent");
+
 	rate = clk_get_rate(clk);
 	error = clk_enable(clk); /* XXX set frequency */
 	device_printf(sc->sc_dev, "rate %u error %d\n", rate, error);
+	tegra_xusb_attach_check(sc, error, "failed to enable xusb_fs_src clock");
 
 	rst = fdtbus_reset_get(faa->faa_phandle, "xusb_host");
 	fdtbus_reset_deassert(rst);

Reply via email to