Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/arm/imx driver to use EPIT as system clock for i.MX...



details:   https://anonhg.NetBSD.org/src/rev/6ed11c3cc291
branches:  trunk
changeset: 758691:6ed11c3cc291
user:      bsh <bsh%NetBSD.org@localhost>
date:      Sat Nov 13 06:51:37 2010 +0000

description:
driver to use EPIT as system clock for i.MX31 and i.MX51,
by Hashimoto Kenichi.

diffstat:

 sys/arch/arm/imx/imx31_clock.c |  114 +++++++++++++++++++++++++++++++++++
 sys/arch/arm/imx/imx51_clock.c |  130 +++++++++++++++++++++++++++++++++++++++++
 sys/arch/arm/imx/imxclock.c    |  126 +++++++++++++++++++++++++++++++++++++++-
 sys/arch/arm/imx/imxclockvar.h |   18 +++++
 sys/arch/arm/imx/imxepitreg.h  |   51 ++++++++++++++++
 5 files changed, 438 insertions(+), 1 deletions(-)

diffs (truncated from 471 to 300 lines):

diff -r 57f6f2e080ac -r 6ed11c3cc291 sys/arch/arm/imx/imx31_clock.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/arch/arm/imx/imx31_clock.c    Sat Nov 13 06:51:37 2010 +0000
@@ -0,0 +1,114 @@
+/*     $NetBSD: imx31_clock.c,v 1.1 2010/11/13 06:51:37 bsh Exp $ */
+/*
+ * Copyright (c) 2009,2010  Genetec corp.  All rights reserved.
+ * Written by Hashimoto Kenichi for Genetec corp.
+ *
+ * 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 GENETEC CORP. ``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 GENETEC CORP.
+ * 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 <sys/param.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/evcnt.h>
+#include <sys/atomic.h>
+#include <sys/time.h>
+#include <sys/timetc.h>
+
+#include <sys/types.h>
+#include <sys/device.h>
+
+#include <machine/intr.h>
+#include <machine/bus.h>
+
+#include <arm/cpu.h>
+#include <arm/armreg.h>
+#include <arm/cpufunc.h>
+
+#include <arm/imx/imx31reg.h>
+#include <arm/imx/imx31var.h>
+#include <arm/imx/imx31_ccmvar.h>
+#include <arm/imx/imxclockvar.h>
+
+static int imxclock_match(device_t, struct cfdata *, void *);
+static void imxclock_attach(device_t, device_t, void *);
+
+struct imxclock_softc *epit1_sc = NULL;
+struct imxclock_softc *epit2_sc = NULL;
+
+CFATTACH_DECL_NEW(imxclock, sizeof(struct imxclock_softc),
+    imxclock_match, imxclock_attach, NULL, NULL);
+
+static int
+imxclock_match(device_t parent, struct cfdata *match, void *aux)
+{
+       struct aips_attach_args *aipsa = aux;
+
+       if ( (aipsa->aipsa_addr != EPIT1_BASE) &&
+            (aipsa->aipsa_addr != EPIT2_BASE) ) {
+               return 0;
+       }
+
+       return 2;
+}
+
+static void
+imxclock_attach(device_t parent, device_t self, void *aux)
+{
+       struct imxclock_softc *sc = device_private(self);
+       struct aips_attach_args *aipsa = aux;
+
+       aprint_normal("\n");
+
+       sc->sc_dev = self;
+       sc->sc_iot = aipsa->aipsa_memt;
+       sc->sc_intr = aipsa->aipsa_intr;
+
+       KASSERT((sc->sc_intr == IRQ_EPIT1) || (sc->sc_intr == IRQ_EPIT2));
+
+       switch ( aipsa->aipsa_addr ) {
+       case EPIT1_BASE:
+               epit1_sc = sc;
+               break;
+       case EPIT2_BASE:
+               epit2_sc = sc;
+               break;
+       default:
+               panic("%s: invalid address %p", self->dv_xname, (void *)aipsa->aipsa_addr);
+               break;
+       }
+
+       if (bus_space_map(aipsa->aipsa_memt, aipsa->aipsa_addr,
+               aipsa->aipsa_size, 0, &sc->sc_ioh)) {
+               panic("%s: Cannot map registers", device_xname(self));
+       }
+}
+
+int
+imxclock_get_timerfreq(struct imxclock_softc *sc)
+{
+       struct imx31_clocks clk;
+       imx31_get_clocks(&clk);
+
+       return clk.ipg_clk;
+}
+
+
diff -r 57f6f2e080ac -r 6ed11c3cc291 sys/arch/arm/imx/imx51_clock.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/arch/arm/imx/imx51_clock.c    Sat Nov 13 06:51:37 2010 +0000
@@ -0,0 +1,130 @@
+/*     $NetBSD: imx51_clock.c,v 1.1 2010/11/13 06:51:37 bsh Exp $ */
+/*
+ * Copyright (c) 2009  Genetec corp.  All rights reserved.
+ * Written by Hashimoto Kenichi for Genetec corp.
+ *
+ * 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 GENETEC CORP. ``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 GENETEC CORP.
+ * 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 <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: imx51_clock.c,v 1.1 2010/11/13 06:51:37 bsh Exp $");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/evcnt.h>
+#include <sys/atomic.h>
+#include <sys/time.h>
+#include <sys/timetc.h>
+
+#include <sys/types.h>
+#include <sys/device.h>
+
+#include <dev/clock_subr.h>
+
+#include <machine/intr.h>
+#include <machine/bus.h>
+
+#include <arm/cpufunc.h>
+
+#include <arm/imx/imx51reg.h>
+#include <arm/imx/imx51var.h>
+#include <arm/imx/imxepitreg.h>
+//#include <arm/imx/imx51_ccmvar.h> notyet
+#include <arm/imx/imxclockvar.h>
+
+#include "imxccm.h"    /* if CCM driver is configured into the kernel */
+#include "opt_imx51clk.h"
+
+
+
+static int imxclock_match(device_t, struct cfdata *, void *);
+static void imxclock_attach(device_t, device_t, void *);
+
+struct imxclock_softc *epit1_sc = NULL;
+struct imxclock_softc *epit2_sc = NULL;
+
+CFATTACH_DECL_NEW(imxclock, sizeof(struct imxclock_softc),
+    imxclock_match, imxclock_attach, NULL, NULL);
+
+static int
+imxclock_match(device_t parent, struct cfdata *match, void *aux)
+{
+       struct axi_attach_args *aa = aux;
+
+       if ( (aa->aa_addr != EPIT1_BASE) &&
+            (aa->aa_addr != EPIT2_BASE) ) {
+               return 0;
+       }
+
+       return 2;
+}
+
+static void
+imxclock_attach(device_t parent, device_t self, void *aux)
+{
+       struct imxclock_softc *sc = device_private(self);
+       struct axi_attach_args *aa = aux;
+
+       aprint_normal("\n");
+
+       sc->sc_dev = self;
+       sc->sc_iot = aa->aa_iot;
+       sc->sc_intr = aa->aa_irq;
+
+       KASSERT((sc->sc_intr == IRQ_EPIT1) || (sc->sc_intr == IRQ_EPIT2));
+
+       switch ( aa->aa_addr ) {
+       case EPIT1_BASE:
+               epit1_sc = sc;
+               break;
+       case EPIT2_BASE:
+               epit2_sc = sc;
+               break;
+       default:
+               panic("%s: invalid address %p", self->dv_xname, (void *)aa->aa_addr);
+               break;
+       }
+
+       if (bus_space_map(aa->aa_iot, aa->aa_addr, aa->aa_size, 0, &sc->sc_ioh))
+               panic("%s: Cannot map registers", device_xname(self));
+}
+
+int
+imxclock_get_timerfreq(struct imxclock_softc *sc)
+{
+       unsigned int ipg_freq;
+#if NIMXCCM > 0
+       struct imx51_clocks clk;
+
+       imx51_get_clocks(&clk);
+
+       ipg_freq = clk.ipg_clk;
+#else
+#ifndef        IMX51_IPGCLK_FREQ
+#error IMX51_IPGCLK_FREQ need to be defined.
+#endif
+       ipg_freq = IMX51_IPGCLK_FREQ;
+#endif
+
+       return ipg_freq;
+}
+
diff -r 57f6f2e080ac -r 6ed11c3cc291 sys/arch/arm/imx/imxclock.c
--- a/sys/arch/arm/imx/imxclock.c       Sat Nov 13 06:44:11 2010 +0000
+++ b/sys/arch/arm/imx/imxclock.c       Sat Nov 13 06:51:37 2010 +0000
@@ -1,9 +1,105 @@
+/*     $NetBSD: imxclock.c,v 1.3 2010/11/13 06:51:37 bsh Exp $ */
+/*
+ * Copyright (c) 2009, 2010  Genetec corp.  All rights reserved.
+ * Written by Hashimoto Kenichi for Genetec corp.
+ *
+ * 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 GENETEC CORP. ``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 GENETEC CORP.
+ * 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.
+ */
+
+/*
+ * common part for i.MX31 and i.MX51
+ */
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/evcnt.h>
+#include <sys/atomic.h>
+#include <sys/time.h>
+#include <sys/timetc.h>
+
 #include <sys/types.h>
-#include <sys/time.h>
+#include <sys/device.h>
+
+#include <machine/intr.h>



Home | Main Index | Thread Index | Old Index