Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/arm/xscale Support Intel PXA250 and PXA210 applicat...
details: https://anonhg.NetBSD.org/src/rev/7d5b5b78baa7
branches: trunk
changeset: 538414:7d5b5b78baa7
user: bsh <bsh%NetBSD.org@localhost>
date: Sat Oct 19 19:31:38 2002 +0000
description:
Support Intel PXA250 and PXA210 application processors.
diffstat:
sys/arch/arm/xscale/pxa2x0.c | 280 ++++++++++++
sys/arch/arm/xscale/pxa2x0_a4x_io.S | 103 ++++
sys/arch/arm/xscale/pxa2x0_a4x_space.c | 133 +++++
sys/arch/arm/xscale/pxa2x0_dma.c | 70 +++
sys/arch/arm/xscale/pxa2x0_intr.c | 404 +++++++++++++++++
sys/arch/arm/xscale/pxa2x0_intr.h | 161 +++++++
sys/arch/arm/xscale/pxa2x0_irq.S | 116 +++++
sys/arch/arm/xscale/pxa2x0_lcd.c | 749 +++++++++++++++++++++++++++++++++
sys/arch/arm/xscale/pxa2x0_lcd.h | 149 ++++++
sys/arch/arm/xscale/pxa2x0_space.c | 254 +++++++++++
sys/arch/arm/xscale/pxa2x0reg.h | 327 ++++++++++++++
sys/arch/arm/xscale/pxa2x0var.h | 101 ++++
12 files changed, 2847 insertions(+), 0 deletions(-)
diffs (truncated from 2895 to 300 lines):
diff -r 85bf9da2032e -r 7d5b5b78baa7 sys/arch/arm/xscale/pxa2x0.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/arch/arm/xscale/pxa2x0.c Sat Oct 19 19:31:38 2002 +0000
@@ -0,0 +1,280 @@
+/* $NetBSD: pxa2x0.c,v 1.1 2002/10/19 19:31:38 bsh Exp $ */
+
+/*
+ * Copyright (c) 2002 Genetec Corporation. All rights reserved.
+ * Written by Hiroyuki Bessho for Genetec Corporation.
+ *
+ * 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.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed for the NetBSD Project by
+ * Genetec Corporation.
+ * 4. The name of Genetec Corporation may not be used to endorse or
+ * promote products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY GENETEC CORPORATION ``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 CORPORATION
+ * 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.
+ *
+ *
+ * Autoconfiguration support for the Intel PXA2[15]0 application
+ * processor. This code is derived from arm/sa11x0/sa11x0.c
+ */
+
+/*-
+ * Copyright (c) 2001, The NetBSD Foundation, Inc. All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by IWAMOTO Toshihiro and Ichiro FUKUHARA.
+ *
+ * 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.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the NetBSD
+ * Foundation, Inc. and its contributors.
+ * 4. Neither the name of The NetBSD Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ */
+/*-
+ * Copyright (c) 1999
+ * Shin Takemura and PocketBSD Project. All rights reserved.
+ *
+ * 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.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the PocketBSD project
+ * and its contributors.
+ * 4. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 THE REGENTS OR CONTRIBUTORS 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/device.h>
+#include <sys/kernel.h>
+#include <sys/reboot.h>
+
+#include <machine/cpu.h>
+#include <machine/bus.h>
+
+#include <arm/cpufunc.h>
+#include <arm/mainbus/mainbus.h>
+#include <arm/xscale/pxa2x0reg.h>
+#include <arm/xscale/pxa2x0var.h>
+
+#include "locators.h"
+
+/* prototypes */
+static int pxa2x0_match(struct device *, struct cfdata *, void *);
+static void pxa2x0_attach(struct device *, struct device *, void *);
+static int pxa2x0_search(struct device *, struct cfdata *, void *);
+
+/* attach structures */
+CFATTACH_DECL(pxaip, sizeof(struct pxa2x0_softc), pxa2x0_match, pxa2x0_attach,
+ NULL, NULL);
+
+extern struct bus_space pxa2x0_bs_tag;
+
+struct pxa2x0_softc *pxa2x0_softc;
+
+static int
+pxa2x0_print(void *aux, const char *name)
+{
+ struct pxa2x0_attach_args *sa = (struct pxa2x0_attach_args*)aux;
+
+ if (sa->pxa_size)
+ printf(" addr 0x%lx", sa->pxa_addr);
+ if (sa->pxa_size > 1)
+ printf("-0x%lx", sa->pxa_addr + sa->pxa_size - 1);
+ if (sa->pxa_intr > 1)
+ printf(" intr %d", sa->pxa_intr);
+ if (sa->pxa_gpio != -1)
+ printf(" gpio %d", sa->pxa_gpio);
+
+ return (UNCONF);
+}
+
+int
+pxa2x0_match(struct device *parent, struct cfdata *match, void *aux)
+{
+ return 1;
+}
+
+void
+pxa2x0_attach(struct device *parent, struct device *self, void *aux)
+{
+ struct pxa2x0_softc *sc = (struct pxa2x0_softc*)self;
+ bus_space_tag_t iot;
+ const char *which_registers; /* for panic message */
+
+#define FAIL(which) do { \
+ which_registers=(which); goto abort; }while(/*CONSTCOND*/0)
+
+ pxa2x0_softc = sc;
+ sc->saip.sc_iot = iot = &pxa2x0_bs_tag;
+
+ if (bus_space_map(iot,
+ PXA2X0_INTCTL_BASE, PXA2X0_INTCTL_SIZE,
+ 0, &sc->saip.sc_ioh))
+ FAIL("intc");
+
+ /* Map the GPIO registers */
+ if (bus_space_map(iot, PXA2X0_GPIO_BASE, PXA2X0_GPIO_SIZE,
+ 0, &sc->saip.sc_gpioh))
+ FAIL("GPIO");
+
+ /* Map the DMA controller registers */
+ if (bus_space_map(iot, PXA2X0_DMAC_BASE, PXA2X0_DMAC_SIZE,
+ 0, &sc->saip.sc_dmach))
+ FAIL("DMAC");
+
+ /* Memory controller */
+ if( bus_space_map(iot, PXA2X0_MEMCTL_BASE,
+ PXA2X0_MEMCTL_SIZE, 0, &sc->sc_memctl_ioh) )
+ FAIL("MEMC");
+ /* Clock manager */
+ if( bus_space_map(iot, PXA2X0_CLKMAN_BASE,
+ PXA2X0_CLKMAN_SIZE, 0, &sc->sc_clkman_ioh) )
+ FAIL("CLK");
+
+ /* Real time clock */
+ if( bus_space_map(iot, PXA2X0_RTC_BASE,
+ PXA2X0_RTC_SIZE, 0, &sc->sc_rtc_ioh) )
+ FAIL("RTC");
+
+#if 1
+ /* This takes 2 secs at most. */
+ {
+ int cpuclock;
+
+ cpuclock = pxa2x0_measure_cpuclock( sc ) / 1000;
+ printf( " CPU clock = %d.%03d MHz", cpuclock/1000, cpuclock%1000 );
+ }
+#endif
+ printf("\n");
+
+ pxa2x0_set_intcbase(sc->saip.sc_ioh);
+ pxa2x0_intr_init();
+
+ /*
+ * Attach devices.
+ */
+ config_search(pxa2x0_search, self, NULL);
+ return;
+
+ abort:
+ panic("%s: unable to map %s registers\n",
+ self->dv_xname, which_registers);
+
+#undef FAIL
+}
+
+int
+pxa2x0_search(struct device *parent, struct cfdata *cf, void *aux)
+{
+ struct pxa2x0_softc *sc = (struct pxa2x0_softc *)parent;
+ struct pxa2x0_attach_args aa;
+
+ aa.pxa_sc = sc;
+ aa.pxa_iot = sc->saip.sc_iot;
+ aa.pxa_addr = cf->cf_loc[PXAIPCF_ADDR];
+ aa.pxa_size = cf->cf_loc[PXAIPCF_SIZE];
+ aa.pxa_index = cf->cf_loc[PXAIPCF_INDEX];
+ aa.pxa_sa.sa_membase = 0;
+ aa.pxa_sa.sa_memsize = 0;
+ aa.pxa_intr = cf->cf_loc[PXAIPCF_INTR];
+ aa.pxa_gpio = cf->cf_loc[PXAIPCF_GPIO];
+
+ if (config_match(parent, cf, &aa))
+ config_attach(parent, cf, &aa, pxa2x0_print);
+
+ return 0;
+}
+
+static inline uint32_t
+read_clock_counter(void)
+{
+ uint32_t x;
+ __asm __volatile("mrc p14, 0, %0, c1, c0, 0" : "=r" (x) );
+
+ return x;
+}
+
+int
+pxa2x0_measure_cpuclock( struct pxa2x0_softc *sc )
+{
+ uint32_t rtc0, rtc1, start, end;
+ uint32_t pmcr_save;
+ bus_space_tag_t iot = sc->saip.sc_iot;
+ bus_space_handle_t rtc_ioh = sc->sc_rtc_ioh;
+ int irq = disable_interrupts(I32_bit|F32_bit);
+
+ __asm __volatile( "mrc p14, 0, %0, c0, c0, 0" : "=r" (pmcr_save) );
+ /* Enable clock counter */
+ __asm __volatile( "mcr p14, 0, %0, c0, c0, 0" : : "r" (0x0001) );
+
+ rtc0 = bus_space_read_4( iot, rtc_ioh, RTC_RCNR );
+ /* Wait for next second starts */
+ while( (rtc1 = bus_space_read_4( iot, rtc_ioh, RTC_RCNR )) == rtc0 )
+ ;
+ start = read_clock_counter();
+ while( rtc1 == bus_space_read_4( iot, rtc_ioh, RTC_RCNR ) )
+ ; /* Wait for 1sec */
+ end = read_clock_counter();
+
+ __asm __volatile( "mcr p14, 0, %0, c0, c0, 0" : : "r" (pmcr_save) );
+ restore_interrupts(irq);
+
+ return end - start;
+}
+
+void
+pxa2x0_turbo_mode( int f )
+{
+ __asm __volatile("mcr p14, 0, %0, c6, c0, 0" : : "r" (f));
+}
diff -r 85bf9da2032e -r 7d5b5b78baa7 sys/arch/arm/xscale/pxa2x0_a4x_io.S
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/arch/arm/xscale/pxa2x0_a4x_io.S Sat Oct 19 19:31:38 2002 +0000
@@ -0,0 +1,103 @@
+/* $NetBSD: pxa2x0_a4x_io.S,v 1.1 2002/10/19 19:31:39 bsh Exp $ */
+
+/*
+ * Copyright (c) 2002 Genetec Corporation. All rights reserved.
+ * Written by Hiroyuki Bessho for Genetec Corporation.
+ *
+ * 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
Home |
Main Index |
Thread Index |
Old Index