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);