Source-Changes-HG archive

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

[src/trunk]: src/sys/arch/evbarm/gumstix + Add configuration function for NIC...



details:   https://anonhg.NetBSD.org/src/rev/890a1fae68cb
branches:  trunk
changeset: 757404:890a1fae68cb
user:      kiyohara <kiyohara%NetBSD.org@localhost>
date:      Sat Aug 28 04:39:42 2010 +0000

description:
+ Add configuration function for NIC of Chestnut43/Tobi/Tobi-Duo.
  tested Chestnut43 only.
+ Remove parenthesis for return.

diffstat:

 sys/arch/evbarm/gumstix/gxio.c |  135 ++++++++++++++++++++++++++++++++++------
 1 files changed, 113 insertions(+), 22 deletions(-)

diffs (267 lines):

diff -r 3da4eb03cb97 -r 890a1fae68cb sys/arch/evbarm/gumstix/gxio.c
--- a/sys/arch/evbarm/gumstix/gxio.c    Sat Aug 28 04:33:00 2010 +0000
+++ b/sys/arch/evbarm/gumstix/gxio.c    Sat Aug 28 04:39:42 2010 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: gxio.c,v 1.15 2010/07/10 08:17:48 kiyohara Exp $ */
+/*     $NetBSD: gxio.c,v 1.16 2010/08/28 04:39:42 kiyohara Exp $ */
 /*
  * Copyright (C) 2005, 2006, 2007 WIDE Project and SOUM Corporation.
  * All rights reserved.
@@ -31,7 +31,7 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: gxio.c,v 1.15 2010/07/10 08:17:48 kiyohara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: gxio.c,v 1.16 2010/08/28 04:39:42 kiyohara Exp $");
 
 #include "opt_cputypes.h"
 #include "opt_gumstix.h"
@@ -46,7 +46,9 @@
 
 #include <machine/bootconfig.h>
 
+#include <arm/omap/omap2_gpmcreg.h>
 #include <arm/omap/omap2_reg.h>
+#include <arm/omap/omap2_intr.h>
 #include <arm/omap/omap_var.h>
 #if defined(CPU_XSCALE_PXA270) || defined(CPU_XSCALE_PXA250)
 #include <arm/xscale/pxa2x0cpu.h>
@@ -54,11 +56,11 @@
 #include <arm/xscale/pxa2x0reg.h>
 #include <arm/xscale/pxa2x0var.h>
 #include <arm/xscale/pxa2x0_gpio.h>
+#include <evbarm/gumstix/gumstixreg.h>
 #include <evbarm/gumstix/gumstixvar.h>
 
-#if !defined(OVERO)    /* XXXXX */
+#include "ioconf.h"
 #include "locators.h"
-#endif
 
 
 struct gxioconf {
@@ -66,17 +68,20 @@
        void (*config)(void);
 };
 
-#if !defined(OVERO)    /* XXXXX */
+#if defined(GUMSTIX)
 static int gxiomatch(device_t, cfdata_t, void *);
 static void gxioattach(device_t, device_t, void *);
 static int gxiosearch(device_t, cfdata_t, const int *, void *);
 static int gxioprint(void *, const char *);
+
+CFATTACH_DECL_NEW(gxio, sizeof(struct gxio_softc),
+    gxiomatch, gxioattach, NULL, NULL);
 #endif
 
 void gxio_config_pin(void);
 void gxio_config_expansion(char *);
 static void gxio_config_gpio(const struct gxioconf *, char *);
-#if defined(CPU_XSCALE_PXA270) || defined(CPU_XSCALE_PXA250)
+#if defined(GUMSTIX)
 static void basix_config(void);
 static void cfstix_config(void);
 static void etherstix_config(void);
@@ -89,15 +94,14 @@
 static void netmmc_config(void);
 static void wifistix_config(void);
 static void wifistix_cf_config(void);
+#elif defined(OVERO)
+static void eth0_config(void);
+static void eth1_config(void);
+static void chestnut_config(void);
+static void tobi_config(void);
+static void tobiduo_config(void);
 #endif
 
-#if !defined(OVERO)    /* XXXXX */
-CFATTACH_DECL_NEW(
-    gxio, sizeof(struct gxio_softc), gxiomatch, gxioattach, NULL, NULL);
-#endif
-
-char busheader[MAX_BOOT_STRING];
-
 #if defined(CPU_XSCALE_PXA250)
 static struct pxa2x0_gpioconf pxa255dep_gpioconf[] = {
        /* Bluetooth module configuration */
@@ -161,7 +165,7 @@
 #endif
 
 static const struct gxioconf busheader_conf[] = {
-#if defined(CPU_XSCALE_PXA270) || defined(CPU_XSCALE_PXA250)
+#if defined(GUMSTIX)
        { "basix",              basix_config },
        { "cfstix",             cfstix_config },
        { "etherstix",          etherstix_config },
@@ -176,6 +180,10 @@
        { "netpro-vx",          netwifimicrosd_config },
        { "wifistix-cf",        wifistix_cf_config },
        { "wifistix",           wifistix_config },
+#elif defined(OVERO)
+       { "chestnut43",         chestnut_config },
+       { "tobi",               tobi_config },
+       { "tobi-duo",           tobiduo_config },
 #endif
        { NULL }
 };
@@ -184,11 +192,12 @@
 struct gxpcic_slot_irqs gxpcic_slot_irqs[2] = { { 0, -1, -1 }, { 0, -1, -1 } };
 
 
-#if !defined(OVERO)    /* XXXXX */
+#if defined(GUMSTIX)
 /* ARGSUSED */
 static int
 gxiomatch(device_t parent, cfdata_t match, void *aux)
 {
+
        struct pxaip_attach_args *pxa = aux;
        bus_space_tag_t iot = &pxa2x0_bs_tag;
        bus_space_handle_t ioh;
@@ -199,11 +208,11 @@
 
        if (bus_space_map(iot,
            PXA2X0_MEMCTL_BASE, PXA2X0_MEMCTL_SIZE, 0, &ioh))
-               return (0);
+               return 0;
        bus_space_unmap(iot, ioh, PXA2X0_MEMCTL_SIZE);
 
        /* nothing */
-       return (1);
+       return 1;
 }
 
 /* ARGSUSED */
@@ -223,7 +232,7 @@
                return;
 
        /*
-        *  Attach each gumstix expansion of busheader side devices
+        *  Attach each gumstix(busheader)/overo expansion board devices.
         */
        config_search_ia(gxiosearch, self, "gxio", NULL);
 }
@@ -243,7 +252,7 @@
        if (config_match(parent, cf, &gxa))
                config_attach(parent, cf, &gxa, gxioprint);
 
-       return (0);
+       return 0;
 }
 
 /* ARGSUSED */
@@ -256,7 +265,7 @@
                printf(" addr 0x%lx", gxa->gxa_addr);
        if (gxa->gxa_gpirq > 0)
                printf(" gpirq %d", gxa->gxa_gpirq);
-       return (UNCONF);
+       return UNCONF;
 }
 #endif
 
@@ -322,7 +331,7 @@
 {
 
        if (expansion == NULL) {
-               printf("not specified 'busheader=' in the boot args.\n");
+               printf("not specified 'expansion=' in the boot args.\n");
 #ifdef GXIO_DEFAULT_EXPANSION
                printf("configure default expansion (%s)\n",
                    GXIO_DEFAULT_EXPANSION);
@@ -352,7 +361,8 @@
 }
 
 
-#if defined(CPU_XSCALE_PXA270) || defined(CPU_XSCALE_PXA250)
+#if defined(GUMSTIX)
+
 static void
 basix_config(void)
 {
@@ -571,4 +581,85 @@
        /* Power to Marvell 88W8385 */
        pxa2x0_gpio_set_function(80, GPIO_OUT | GPIO_SET);
 }
+
+#elif defined(OVERO)
+
+static void
+eth0_config(void)
+{
+       extern struct cfdata cfdata[];
+       cfdata_t cf = &cfdata[0];
+
+       /*
+        * ETH0 connects via CS5.  It use GPIO 176 for IRQ.
+        */
+
+       while (cf->cf_name != NULL) {
+               if (strcmp(cf->cf_name, "smsh") == 0 &&
+                   cf->cf_loc[GPMCCF_INTR] == PIC_MAXSOURCES + 176)
+                       break;
+               cf++;
+       }
+       if (cf->cf_name == NULL ||
+           cf->cf_loc[GPMCCF_ADDR] == GPMCCF_ADDR_DEFAULT)
+               return;
+
+       ioreg_write(OVERO_GPMC_VBASE + GPMC_CONFIG7_5,
+           GPMC_CONFIG7_CSVALID |
+           GPMC_CONFIG7(GPMC_CONFIG7_MASK_16M, cf->cf_loc[GPMCCF_ADDR]));
+
+       /*
+        * Maybe need NRESET and delay(9).
+        * However delay(9) needs to attach mputmr.
+        */
+}
+
+static void
+eth1_config(void)
+{
+       extern struct cfdata cfdata[];
+       cfdata_t cf = &cfdata[0];
+
+       /*
+        * ETH1 connects via CS4.  It use GPIO 65 for IRQ.
+        */
+
+       while (cf->cf_name != NULL) {
+               if (strcmp(cf->cf_name, "smsh") == 0 &&
+                   cf->cf_loc[GPMCCF_INTR] == PIC_MAXSOURCES + 65)
+                       break;
+               cf++;
+       }
+       if (cf->cf_name == NULL ||
+           cf->cf_loc[GPMCCF_ADDR] == GPMCCF_ADDR_DEFAULT)
+               return;
+
+       ioreg_write(OVERO_GPMC_VBASE + GPMC_CONFIG7_4,
+           GPMC_CONFIG7_CSVALID |
+           GPMC_CONFIG7(GPMC_CONFIG7_MASK_16M, cf->cf_loc[GPMCCF_ADDR]));
+
+       /* ETH1 is sure to be reset with ETH0. */
+}
+
+static void
+chestnut_config(void)
+{
+
+       eth0_config();
+}
+
+static void
+tobi_config(void)
+{
+
+       eth0_config();
+}
+
+static void
+tobiduo_config(void)
+{
+
+       eth0_config();
+       eth1_config();
+}
 #endif



Home | Main Index | Thread Index | Old Index