Enable USB support for MC-R700.

This commit is contained in:
takemura 2002-05-03 11:37:48 +00:00
parent 0a602aa3de
commit 9582b7c775
2 changed files with 78 additions and 4 deletions

View File

@ -1,4 +1,4 @@
# $NetBSD: GENERIC,v 1.120 2002/04/27 12:36:47 shin Exp $
# $NetBSD: GENERIC,v 1.121 2002/05/03 11:37:48 takemura Exp $
#
# GENERIC machine description file
#
@ -24,7 +24,7 @@ include "arch/hpcmips/conf/std.hpcmips.tx39"
options INCLUDE_CONFIG_FILE # embed config file in kernel binary
#ident "GENERIC-$Revision: 1.120 $"
#ident "GENERIC-$Revision: 1.121 $"
maxusers 16
@ -365,6 +365,14 @@ pci* at vrc4172pci?
hpcioman8 at vrc4172gpio0 platform FUJITSU_INTERTOP_IT310
hpcin* at hpcioman8 evtype PCIINTR id PCIINTR_00_00_01 port 7 level 0 connect 1
#
# MC-R700
#
options VRC4172PCI_MCR700_SUPPORT
vrc4172pci0 at vr4102ip? addr 0x0aff0cf8 size 0x8 platform NEC_MCR_700
hpcioman9 at vrgiu? platform NEC_MCR_700
hpcin* at hpcioman9 evtype PCIINTR id PCIINTR_00_00_01 port 13 level 0 connect 1
# IO module manager (virtual bridge) DO NOT DELETE
txioman* at txsim?
# iochip 0 TX39 internal IO

View File

@ -1,4 +1,4 @@
/* $NetBSD: vrc4172pci.c,v 1.2 2002/04/14 08:00:00 takemura Exp $ */
/* $NetBSD: vrc4172pci.c,v 1.3 2002/05/03 11:37:49 takemura Exp $ */
/*-
* Copyright (c) 2002 TAKEMURA Shin
@ -49,11 +49,12 @@
#include <hpcmips/vr/vrc4172pcireg.h>
#include "pci.h"
#include "opt_vrc4172pci.h"
#ifdef DEBUG
#define DPRINTF(args) printf args
#else
#define DPRINTF(args)
#define DPRINTF(args) while (0) {}
#endif
struct vrc4172pci_softc {
@ -63,6 +64,13 @@ struct vrc4172pci_softc {
bus_space_handle_t sc_ioh;
struct hpcmips_pci_chipset sc_pc;
#ifdef VRC4172PCI_MCR700_SUPPORT
pcireg_t sc_fake_baseaddr;
hpcio_chip_t sc_iochip;
#if 0
hpcio_intr_handle_t sc_ih;
#endif
#endif /* VRC4172PCI_MCR700_SUPPORT */
};
static int vrc4172pci_match(struct device *, struct cfdata *, void *);
@ -88,6 +96,11 @@ static const struct evcnt *vrc4172pci_intr_evcnt(pci_chipset_tag_t,
static void *vrc4172pci_intr_establish(pci_chipset_tag_t,
pci_intr_handle_t, int, int (*)(void *), void *);
static void vrc4172pci_intr_disestablish(pci_chipset_tag_t, void *);
#ifdef VRC4172PCI_MCR700_SUPPORT
#if 0
static int vrc4172pci_mcr700_intr(void *arg);
#endif
#endif
struct cfattach vrc4172pci_ca = {
sizeof(struct vrc4172pci_softc), vrc4172pci_match, vrc4172pci_attach
@ -137,6 +150,20 @@ vrc4172pci_attach(struct device *parent, struct device *self, void *aux)
}
printf("\n");
#ifdef VRC4172PCI_MCR700_SUPPORT
if (platid_match(&platid, &platid_mask_MACH_NEC_MCR_700)) {
/* power USB controller on MC-R700 */
sc->sc_iochip = va->va_gpio_chips[VRIP_IOCHIP_VRGIU];
hpcio_portwrite(sc->sc_iochip, 45, 1);
sc->sc_fake_baseaddr = 0x0afe0000;
#if 0
sc->sc_ih = hpcio_intr_establish(sc->sc_iochip, 1,
HPCIO_INTR_EDGE|HPCIO_INTR_HOLD,
vrc4172pci_mcr700_intr, sc);
#endif
}
#endif /* VRC4172PCI_MCR700_SUPPORT */
pc->pc_dev = &sc->sc_dev;
pc->pc_attach_hook = vrc4172pci_attach_hook;
pc->pc_bus_maxdevs = vrc4172pci_bus_maxdevs;
@ -246,10 +273,23 @@ vrc4172pci_conf_read(pci_chipset_tag_t pc, pcitag_t tag, int reg)
struct vrc4172pci_softc *sc = (struct vrc4172pci_softc *)pc->pc_dev;
u_int32_t val;
#ifdef VRC4172PCI_MCR700_SUPPORT
if (sc->sc_fake_baseaddr != 0 &&
tag == vrc4172pci_make_tag(pc, 0, 0, 1) &&
reg == PCI_MAPREG_START) {
val = sc->sc_fake_baseaddr;
goto out;
}
#endif /* VRC4172PCI_MCR700_SUPPORT */
tag |= VRC4172PCI_CONFADDR_CONFIGEN;
vrc4172pci_write(sc, VRC4172PCI_CONFAREG, tag | reg);
val = vrc4172pci_read(sc, VRC4172PCI_CONFDREG);
#ifdef VRC4172PCI_MCR700_SUPPORT
out:
#endif
DPRINTF(("%s: conf_read: tag = 0x%08x, reg = 0x%x, val = 0x%08x\n",
sc->sc_dev.dv_xname, (u_int32_t)tag, reg, val));
@ -264,6 +304,16 @@ vrc4172pci_conf_write(pci_chipset_tag_t pc, pcitag_t tag, int reg,
DPRINTF(("%s: conf_write: tag = 0x%08x, reg = 0x%x, val = 0x%08x\n",
sc->sc_dev.dv_xname, (u_int32_t)tag, reg, (u_int32_t)data));
#ifdef VRC4172PCI_MCR700_SUPPORT
if (sc->sc_fake_baseaddr != 0 &&
tag == vrc4172pci_make_tag(pc, 0, 0, 1) &&
reg == PCI_MAPREG_START) {
sc->sc_fake_baseaddr = (data & 0xfffff000);
return;
}
#endif /* VRC4172PCI_MCR700_SUPPORT */
tag |= VRC4172PCI_CONFADDR_CONFIGEN;
vrc4172pci_write(sc, VRC4172PCI_CONFAREG, tag | reg);
@ -326,3 +376,19 @@ vrc4172pci_intr_disestablish(pci_chipset_tag_t pc, void *cookie)
DPRINTF(("vrc4172pci_intr_disestablish: %p\n", cookie));
config_unhook(cookie);
}
#ifdef VRC4172PCI_MCR700_SUPPORT
#if 0
int
vrc4172pci_mcr700_intr(void *arg)
{
struct vrc4172pci_softc *sc = arg;
hpcio_intr_clear(sc->sc_iochip, sc->sc_ih);
printf("USB port %s\n", hpcio_portread(sc->sc_iochip, 1) ? "ON" : "OFF");
hpcio_portwrite(sc->sc_iochip, 45, hpcio_portread(sc->sc_iochip, 1));
return (0);
}
#endif
#endif /* VRC4172PCI_MCR700_SUPPORT */