Changes to Phase5 hardware support:

- Rework p5pb driver - simplify, cleanup, make more flexible.
- Add p5membar driver, which handles PCI resources autoconfigured by the firmware.
- Introduce intermediate p5bus layer, between zbus and CSPPC/BPPC on-board devices (p5pb, cbiiisc, bppcsc).
- Add experimental G-REX support to p5pb (first slot support only).
- Split CV64/3D PCI bridge support into separate cv3dpb driver (to be committed later).

Approved by phx.
This commit is contained in:
rkujawa 2012-01-10 20:29:49 +00:00
parent 3ad69fe553
commit 363ad7afb3
15 changed files with 673 additions and 204 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: amiga_init.c,v 1.124 2011/07/10 21:02:37 mhitch Exp $ */
/* $NetBSD: amiga_init.c,v 1.125 2012/01/10 20:29:49 rkujawa Exp $ */
/*
* Copyright (c) 1994 Michael L. Hitch
@ -38,7 +38,7 @@
#include "ser.h"
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: amiga_init.c,v 1.124 2011/07/10 21:02:37 mhitch Exp $");
__KERNEL_RCSID(0, "$NetBSD: amiga_init.c,v 1.125 2012/01/10 20:29:49 rkujawa Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@ -331,6 +331,16 @@ start_c(id, fphystart, fphysize, cphysize, esym_addr, flags, inh_sync,
ncd = RELOC(ncfdev, int); ncd > 0; ncd--, cd++) {
int bd_type = cd->rom.type & (ERT_TYPEMASK | ERTF_MEMLIST);
/*
* Hack to support p5bus and p5pb on CyberStorm Mk-III / PPC
* and Blizzard PPC. XXX: this hack should only be active if
* non-autoconfiguring CyberVision PPC or BlizzardVision PPC
* was found.
*/
if (cd->rom.manid == 8512 &&
(cd->rom.prodid == 100 || cd->rom.prodid == 110))
RELOC(ZBUSAVAIL, u_int) += m68k_round_page(0x1400000);
if (bd_type != ERT_ZORROIII &&
(bd_type != ERT_ZORROII || isztwopa(cd->addr)))
continue; /* It's not Z2 or Z3 I/O board */
@ -345,6 +355,7 @@ start_c(id, fphystart, fphysize, cphysize, esym_addr, flags, inh_sync,
(cd->rom.flags & ERT_Z3_SSMASK) == 0)
cd->size = 0x10000 <<
((cd->rom.type - 1) & ERT_MEMMASK);
RELOC(ZBUSAVAIL, u_int) += m68k_round_page(cd->size);
}

View File

@ -1,4 +1,4 @@
# $NetBSD: DRACO,v 1.148 2011/12/26 13:09:03 mlelstv Exp $
# $NetBSD: DRACO,v 1.149 2012/01/10 20:29:49 rkujawa Exp $
#
# This file was automatically created.
# Changes will be lost when make is run in this directory.
@ -29,7 +29,7 @@ include "arch/amiga/conf/std.amiga"
options INCLUDE_CONFIG_FILE # embed config file in kernel binary
#ident "GENERIC-$Revision: 1.148 $"
#ident "GENERIC-$Revision: 1.149 $"
maxusers 8

View File

@ -1,4 +1,4 @@
# $NetBSD: GENERIC,v 1.278 2011/12/26 13:09:03 mlelstv Exp $
# $NetBSD: GENERIC,v 1.279 2012/01/10 20:29:49 rkujawa Exp $
#
# This file was automatically created.
# Changes will be lost when make is run in this directory.
@ -29,7 +29,7 @@ include "arch/amiga/conf/std.amiga"
options INCLUDE_CONFIG_FILE # embed config file in kernel binary
#ident "GENERIC-$Revision: 1.278 $"
#ident "GENERIC-$Revision: 1.279 $"
maxusers 8
@ -271,6 +271,8 @@ options KFONT_CONS_ISO8859_1
#options FONT_VT220L8x10
#options FONT_VT220ISO8x16
p5bus0 at zbus0 # Phase5 CSPPC/BPPC internal bus
grfcc0 at mainbus0 # custom chips
grfrt0 at zbus0 # retina II
grfrh0 at zbus0 # retina III
@ -402,7 +404,7 @@ mgnsc0 at zbus0 # Magnum scsi
scsibus* at mgnsc0
wesc0 at zbus0 # Warp Engine scsi
scsibus* at wesc0
bppcsc0 at zbus0 # BlizzardPPC 603e+ scsi
bppcsc0 at p5bus0 # BlizzardPPC 603e+ scsi
scsibus* at bppcsc0
afsc0 at zbus0 # A4091 scsi
scsibus* at afsc0
@ -420,7 +422,7 @@ cbsc0 at zbus0 # CyberSCSI I
scsibus* at cbsc0
cbiisc0 at zbus0 # CyberSCSI II
scsibus* at cbiisc0
cbiiisc0 at zbus0 # Cyberstorm mk.III/Cyberstorm PPC SCSI
cbiiisc0 at p5bus0 # Cyberstorm mk.III/Cyberstorm PPC SCSI
scsibus* at cbiiisc0
empsc0 at zbus0 # Emplant scsi
scsibus* at empsc0
@ -468,14 +470,20 @@ uk* at scsibus? target ? lun ? # scsi unknown
# PCI bus support
options PCIVERBOSE # verbose PCI device autoconfig messages
#options PCI_CONFIG_DUMP
options PCI_NETBSD_CONFIGURE
options PCI_NETBSD_CONFIGURE # used only by mppb(4)
p5pb0 at zbus0 # Phase5 PCI bridge (CVPPC/BVPPC)
p5pb0 at p5bus0 # Phase5 PCI bridge (CVPPC/BVPPC/G-REX)
p5membar* at zbus0 # Phase5 PCI bridge autoconfiguring BARs
#options P5PB_OLD_FIRMWARE # enable support for p5pb with old fw
#options P5PB_GENFB # enable genfb support for CVPPC/BVPPC
#options P5PB_DEBUG # enable excessive debug for p5pb
pci* at p5pb0
mppb* at zbus0 # Matay Prometheus Zorro-PCI bridge
mppb* at zbus0 # Matay Prometheus Zorro-PCI bridge
pci* at mppb?
ne* at pci? # NE2000 Ethernet
#genfb* at pci? # generic fb, CVPPC/BVPPC only
ne* at pci? # NE2000 Ethernet
# Bluetooth Controller and Device support
# tested only with btuart on an A1200

View File

@ -1,4 +1,4 @@
# $NetBSD: GENERIC.in,v 1.90 2011/12/26 13:07:24 mlelstv Exp $
# $NetBSD: GENERIC.in,v 1.91 2012/01/10 20:29:50 rkujawa Exp $
#
##
# GENERIC machine description file
@ -52,7 +52,7 @@ include "arch/amiga/conf/std.amiga"
options INCLUDE_CONFIG_FILE # embed config file in kernel binary
#ident "GENERIC-$Revision: 1.90 $"
#ident "GENERIC-$Revision: 1.91 $"
m4_ifdef(`INSTALL_CONFIGURATION', `m4_dnl
makeoptions COPTS="-Os"
@ -329,6 +329,8 @@ m4_ifdef(`AMIGA_CONFIGURATION', `m4_dnl
')m4_dnl
m4_ifdef(`AMIGA_CONFIGURATION', `m4_dnl
p5bus0 at zbus0 # Phase5 CSPPC/BPPC internal bus
grfcc0 at mainbus0 # custom chips
grfrt0 at zbus0 # retina II
')m4_dnl
@ -483,7 +485,7 @@ mgnsc0 at zbus0 # Magnum scsi
scsibus* at mgnsc0
wesc0 at zbus0 # Warp Engine scsi
scsibus* at wesc0
bppcsc0 at zbus0 # BlizzardPPC 603e+ scsi
bppcsc0 at p5bus0 # BlizzardPPC 603e+ scsi
scsibus* at bppcsc0
afsc0 at zbus0 # A4091 scsi
scsibus* at afsc0
@ -501,7 +503,7 @@ cbsc0 at zbus0 # CyberSCSI I
scsibus* at cbsc0
cbiisc0 at zbus0 # CyberSCSI II
scsibus* at cbiisc0
cbiiisc0 at zbus0 # Cyberstorm mk.III/Cyberstorm PPC SCSI
cbiiisc0 at p5bus0 # Cyberstorm mk.III/Cyberstorm PPC SCSI
scsibus* at cbiiisc0
empsc0 at zbus0 # Emplant scsi
scsibus* at empsc0
@ -555,14 +557,20 @@ m4_ifdef(`AMIGA_CONFIGURATION', `m4_dnl
# PCI bus support
options PCIVERBOSE # verbose PCI device autoconfig messages
#options PCI_CONFIG_DUMP
options PCI_NETBSD_CONFIGURE
options PCI_NETBSD_CONFIGURE # used only by mppb(4)
p5pb0 at zbus0 # Phase5 PCI bridge (CVPPC/BVPPC)
p5pb0 at p5bus0 # Phase5 PCI bridge (CVPPC/BVPPC/G-REX)
p5membar* at zbus0 # Phase5 PCI bridge autoconfiguring BARs
#options P5PB_OLD_FIRMWARE # enable support for p5pb with old fw
#options P5PB_GENFB # enable genfb support for CVPPC/BVPPC
#options P5PB_DEBUG # enable excessive debug for p5pb
pci* at p5pb0
mppb* at zbus0 # Matay Prometheus Zorro-PCI bridge
mppb* at zbus0 # Matay Prometheus Zorro-PCI bridge
pci* at mppb?
ne* at pci? # NE2000 Ethernet
#genfb* at pci? # generic fb, CVPPC/BVPPC only
ne* at pci? # NE2000 Ethernet
# Bluetooth Controller and Device support
# tested only with btuart on an A1200

View File

@ -1,4 +1,4 @@
# $NetBSD: INSTALL,v 1.100 2011/12/26 13:09:03 mlelstv Exp $
# $NetBSD: INSTALL,v 1.101 2012/01/10 20:29:50 rkujawa Exp $
#
# This file was automatically created.
# Changes will be lost when make is run in this directory.
@ -29,7 +29,7 @@ include "arch/amiga/conf/std.amiga"
options INCLUDE_CONFIG_FILE # embed config file in kernel binary
#ident "GENERIC-$Revision: 1.100 $"
#ident "GENERIC-$Revision: 1.101 $"
makeoptions COPTS="-Os"
@ -225,6 +225,8 @@ options KFONT_CONS_ISO8859_1
#options FONT_VT220L8x10
#options FONT_VT220ISO8x16
p5bus0 at zbus0 # Phase5 CSPPC/BPPC internal bus
grfcc0 at mainbus0 # custom chips
grfrt0 at zbus0 # retina II
grfrh0 at zbus0 # retina III
@ -348,7 +350,7 @@ mgnsc0 at zbus0 # Magnum scsi
scsibus* at mgnsc0
wesc0 at zbus0 # Warp Engine scsi
scsibus* at wesc0
bppcsc0 at zbus0 # BlizzardPPC 603e+ scsi
bppcsc0 at p5bus0 # BlizzardPPC 603e+ scsi
scsibus* at bppcsc0
afsc0 at zbus0 # A4091 scsi
scsibus* at afsc0
@ -366,7 +368,7 @@ cbsc0 at zbus0 # CyberSCSI I
scsibus* at cbsc0
cbiisc0 at zbus0 # CyberSCSI II
scsibus* at cbiisc0
cbiiisc0 at zbus0 # Cyberstorm mk.III/Cyberstorm PPC SCSI
cbiiisc0 at p5bus0 # Cyberstorm mk.III/Cyberstorm PPC SCSI
scsibus* at cbiiisc0
empsc0 at zbus0 # Emplant scsi
scsibus* at empsc0
@ -412,14 +414,20 @@ ch* at scsibus? target ? lun ? # scsi autochangers
# PCI bus support
options PCIVERBOSE # verbose PCI device autoconfig messages
#options PCI_CONFIG_DUMP
options PCI_NETBSD_CONFIGURE
options PCI_NETBSD_CONFIGURE # used only by mppb(4)
p5pb0 at zbus0 # Phase5 PCI bridge (CVPPC/BVPPC)
p5pb0 at p5bus0 # Phase5 PCI bridge (CVPPC/BVPPC/G-REX)
p5membar* at zbus0 # Phase5 PCI bridge autoconfiguring BARs
#options P5PB_OLD_FIRMWARE # enable support for p5pb with old fw
#options P5PB_GENFB # enable genfb support for CVPPC/BVPPC
#options P5PB_DEBUG # enable excessive debug for p5pb
pci* at p5pb0
mppb* at zbus0 # Matay Prometheus Zorro-PCI bridge
mppb* at zbus0 # Matay Prometheus Zorro-PCI bridge
pci* at mppb?
ne* at pci? # NE2000 Ethernet
#genfb* at pci? # generic fb, CVPPC/BVPPC only
ne* at pci? # NE2000 Ethernet
# Bluetooth Controller and Device support
# tested only with btuart on an A1200

View File

@ -1,4 +1,4 @@
# $NetBSD: files.amiga,v 1.150 2011/12/15 14:25:12 phx Exp $
# $NetBSD: files.amiga,v 1.151 2012/01/10 20:29:50 rkujawa Exp $
# maxpartitions must be first item in files.${ARCH}.newconf
maxpartitions 16 # NOTE THAT AMIGA IS SPECIAL!
@ -33,6 +33,10 @@ defflag P5PPC68KBOARD
defflag LEV6_DEFER
defflag DEVRELOAD
defflag opt_p5pb.h P5PB_GENFB
defflag opt_p5pb.h P5PB_OLD_FIRMWARE
defflag opt_p5pb.h P5PB_DEBUG
defparam IOBZCLOCK
device mainbus {}
@ -355,11 +359,6 @@ device wesc: scsi, asiop
attach wesc at zbus
file arch/amiga/dev/wesc.c wesc needs-flag
# Phase5 Blizzard 603e+ SCSI
device bppcsc: scsi, asiop
attach bppcsc at zbus
file arch/amiga/dev/bppcsc.c bppcsc needs-flag
# C= A4091 & A4000T
device afsc: scsi, asiop
attach afsc at zbus
@ -371,11 +370,6 @@ file arch/amiga/dev/afsc.c afsc | aftsc needs-flag
define siopng
file arch/amiga/dev/siop2.c siopng
# CyberStorm MKIII scsi
device cbiiisc: scsi, siopng
attach cbiiisc at zbus
file arch/amiga/dev/cbiiisc.c cbiiisc needs-flag
# Emulex ESP216 & FAS216 controllers
# FastlaneZ3
@ -498,13 +492,32 @@ include "compat/ossaudio/files.ossaudio"
# Bluetooth stack
include "dev/bluetooth/files.bluetooth"
# Phase5 BPPC/CSPPC internal bus
device p5bus {}
attach p5bus at zbus
file arch/amiga/dev/p5bus.c p5bus
device p5membar {}
attach p5membar at zbus
file arch/amiga/pci/p5membar.c p5membar
# CyberStorm MKIII scsi
device cbiiisc: scsi, siopng
attach cbiiisc at p5bus
file arch/amiga/dev/cbiiisc.c cbiiisc needs-flag
# Phase5 Blizzard 603e+ SCSI
device bppcsc: scsi, asiop
attach bppcsc at p5bus
file arch/amiga/dev/bppcsc.c bppcsc needs-flag
# PCI bus
file arch/amiga/pci/p5pb.c pci
file arch/amiga/pci/mppb.c pci
file arch/amiga/pci/pci_machdep.c pci
device p5pb: pcibus
attach p5pb at zbus
attach p5pb at p5bus
device mppb: pcibus
attach mppb at zbus

View File

@ -1,4 +1,4 @@
/* $NetBSD: bppcsc.c,v 1.1 2011/01/14 10:01:12 phx Exp $ */
/* $NetBSD: bppcsc.c,v 1.2 2012/01/10 20:29:50 rkujawa Exp $ */
/*
* Copyright (c) 1982, 1990 The Regents of the University of California.
@ -59,7 +59,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: bppcsc.c,v 1.1 2011/01/14 10:01:12 phx Exp $");
__KERNEL_RCSID(0, "$NetBSD: bppcsc.c,v 1.2 2012/01/10 20:29:50 rkujawa Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@ -79,6 +79,7 @@ __KERNEL_RCSID(0, "$NetBSD: bppcsc.c,v 1.1 2011/01/14 10:01:12 phx Exp $");
#include <amiga/dev/siopreg.h>
#include <amiga/dev/siopvar.h>
#include <amiga/dev/zbusvar.h>
#include <amiga/dev/p5busvar.h>
#define BPPC_SCSI_OFF 0xf40000
#define BPPC_PUPROM_OFF 0xf00010
@ -99,15 +100,13 @@ CFATTACH_DECL(bppcsc, sizeof(struct siop_softc),
int
bppcscmatch(struct device *pdp, struct cfdata *cfp, void *auxp)
{
struct zbus_args *zap;
char *p5type;
struct p5bus_attach_args *p5baa;
p5baa = (struct p5bus_attach_args *) auxp;
if (strcmp(p5baa->p5baa_name, "bppcsc") == 0)
return 1;
zap = auxp;
if (zap->manid == 8512 && zap->prodid == 110) {
p5type = (char *)__UNVOLATILE(ztwomap(BPPC_PUPROM_OFF));
if (p5type[0] == 'I') /* only "+" model has SCSI */
return 1;
}
return 0 ;
}

View File

@ -1,4 +1,4 @@
/* $NetBSD: cbiiisc.c,v 1.19 2010/12/20 00:25:25 matt Exp $ */
/* $NetBSD: cbiiisc.c,v 1.20 2012/01/10 20:29:50 rkujawa Exp $ */
/*
* Copyright (c) 1982, 1990 The Regents of the University of California.
@ -58,7 +58,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: cbiiisc.c,v 1.19 2010/12/20 00:25:25 matt Exp $");
__KERNEL_RCSID(0, "$NetBSD: cbiiisc.c,v 1.20 2012/01/10 20:29:50 rkujawa Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@ -79,6 +79,7 @@ __KERNEL_RCSID(0, "$NetBSD: cbiiisc.c,v 1.19 2010/12/20 00:25:25 matt Exp $");
#include <amiga/dev/siopreg.h>
#include <amiga/dev/siopvar.h>
#include <amiga/dev/zbusvar.h>
#include <amiga/dev/p5busvar.h>
void cbiiiscattach(struct device *, struct device *, void *);
int cbiiiscmatch(struct device *, struct cfdata *, void *);
@ -99,26 +100,25 @@ CFATTACH_DECL(cbiiisc, sizeof(struct siop_softc),
int
cbiiiscmatch(struct device *pdp, struct cfdata *cfp, void *auxp)
{
struct zbus_args *zap;
struct p5bus_attach_args *p5baa;
zap = auxp;
if (zap->manid == 8512 && zap->prodid == 100)
return(1);
return(0);
p5baa = (struct p5bus_attach_args *) auxp;
if (strcmp(p5baa->p5baa_name, "cbiiisc") == 0)
return 1;
return 0;
}
void
cbiiiscattach(struct device *pdp, struct device *dp, void *auxp)
{
struct siop_softc *sc = (struct siop_softc *)dp;
struct zbus_args *zap;
siop_regmap_p rp;
struct scsipi_adapter *adapt = &sc->sc_adapter;
struct scsipi_channel *chan = &sc->sc_channel;
printf("\n");
zap = auxp;
aprint_normal(": CyberStorm PPC/Mk-III SCSI host adapter\n");
sc->sc_siopp = rp = ztwomap(0xf40000);
/* siopng_dump_registers(sc); */

209
sys/arch/amiga/dev/p5bus.c Normal file
View File

@ -0,0 +1,209 @@
/* $NetBSD: p5bus.c,v 1.1 2012/01/10 20:29:50 rkujawa Exp $ */
/*-
* Copyright (c) 2011, 2012 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
* by Radoslaw Kujawa.
*
* 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 THE NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
*/
/* Driver for internal BlizzardPPC, CyberStorm Mk-III/PPC bus. */
#include <sys/cdefs.h>
#include <sys/systm.h>
#include <sys/types.h>
#include <sys/device.h>
#include <sys/kmem.h>
#include <amiga/dev/zbusvar.h>
#include <amiga/dev/p5busvar.h>
#define ZORRO_MANID_P5 8512
#define ZORRO_PRODID_CSPPC 100
#define ZORRO_PRODID_BPPC 110
#define P5_ROM_OFF 0xF00010
#define P5_SN_LEN 7
static int p5bus_match(struct device *pdp, struct cfdata *cfp, void *auxp);
static void p5bus_attach(device_t parent, device_t self, void *aux);
static char* p5bus_cardsn(void);
static int p5bus_print(void *aux, const char *str);
static void p5bus_callback(device_t self);
struct p5bus_softc {
device_t sc_dev;
uint8_t sc_cardtype;
uint8_t sc_has_scsi;
#define P5BUS_SCSI_NONE 0
#define P5BUS_SCSI_710 1 /* NCR 53C710 */
#define P5BUS_SCSI_770 2 /* NCR 53C770 */
uint8_t sc_has_ppc;
#define P5BUS_PPC_NONE 0 /* CS Mk-III only */
#define P5BUS_PPC_OK 1 /* has working PPC CPU */
uint8_t sc_has_pci;
#define P5BUS_PCI_NONE 0
#define P5BUS_PCI_CVPPC 1 /* CyberVisionPPC / BlizzardVisionPPC */
#define P5BUS_PCI_GREX 2 /* G-REX (not yet) */
};
CFATTACH_DECL_NEW(p5bus, sizeof(struct p5bus_softc),
p5bus_match, p5bus_attach, NULL, NULL);
static int
p5bus_match(struct device *pdp, struct cfdata *cfp, void *auxp)
{
struct zbus_args *zap;
zap = auxp;
if (zap->manid != ZORRO_MANID_P5)
return 0;
if ((zap->prodid != ZORRO_PRODID_BPPC) &&
(zap->prodid != ZORRO_PRODID_CSPPC))
return 0;
return 1;
}
static void
p5bus_attach(device_t parent, device_t self, void *aux)
{
struct p5bus_softc *sc;
struct zbus_args *zap;
struct p5bus_attach_args p5baa;
char *sn;
zap = aux;
sc = device_private(self);
sc->sc_dev = self;
sn = p5bus_cardsn();
aprint_normal(": Phase5 PowerUP on-board bus\n");
/* "Detect" what devices are present and attach the right drivers. */
if (zap->prodid == ZORRO_PRODID_CSPPC) {
if (sn[0] == 'F') {
aprint_normal_dev(sc->sc_dev,
"CyberStorm Mk-III (sn %s)\n", sn);
sc->sc_has_ppc = P5BUS_PPC_NONE;
} else {
aprint_normal_dev(sc->sc_dev,
"CyberStorm PPC 604e (sn %s)\n", sn);
sc->sc_has_ppc = P5BUS_PPC_OK;
}
sc->sc_cardtype = P5_CARDTYPE_CS;
sc->sc_has_scsi = P5BUS_SCSI_770;
} else if (zap->prodid == ZORRO_PRODID_BPPC) {
if (sn[0] == 'I') { /* only "+" model has SCSI */
aprint_normal_dev(sc->sc_dev,
"BlizzardPPC 603e (sn %s)\n", sn);
sc->sc_has_scsi = P5BUS_SCSI_NONE;
} else {
aprint_normal_dev(sc->sc_dev,
"BlizzardPPC 603e+ (sn %s)\n", sn);
sc->sc_has_scsi = P5BUS_SCSI_710;
}
sc->sc_cardtype = P5_CARDTYPE_BPPC;
sc->sc_has_ppc = P5BUS_PPC_OK;
}
sc->sc_has_pci = P5BUS_PCI_CVPPC; /* XXX: insert probe here? */
p5baa.p5baa_cardtype = sc->sc_cardtype;
/* Attach the SCSI host adapters. */
switch (sc->sc_has_scsi) {
case P5BUS_SCSI_710:
strcpy(p5baa.p5baa_name, "bppcsc");
config_found_ia(sc->sc_dev, "p5bus", &p5baa, p5bus_print);
break;
case P5BUS_SCSI_770:
strcpy(p5baa.p5baa_name, "cbiiisc");
config_found_ia(sc->sc_dev, "p5bus", &p5baa, p5bus_print);
break;
default:
break;
}
/*
* We need to wait for possible p5membar attachments. Defer the rest
* until parent (zbus) is completely configured.
*/
config_defer(self, p5bus_callback);
}
/* Continue the attachment. */
static void
p5bus_callback(device_t self) {
struct p5bus_attach_args p5baa;
struct p5bus_softc *sc;
sc = device_private(self);
p5baa.p5baa_cardtype = sc->sc_cardtype;
if (sc->sc_has_pci) {
strcpy(p5baa.p5baa_name, "p5pb");
config_found_ia(sc->sc_dev, "p5bus", &p5baa, p5bus_print);
}
}
/* Get serial number of the card. */
static char *
p5bus_cardsn()
{
char *snr, *sn;
sn = kmem_zalloc(P5_SN_LEN + 1, KM_SLEEP);
snr = (char *)__UNVOLATILE(ztwomap(P5_ROM_OFF));
memcpy(sn, snr, P5_SN_LEN);
return sn;
}
static int
p5bus_print(void *aux, const char *str)
{
if (str == NULL)
return 0;
printf("%s ", str);
return 0;
}

View File

@ -0,0 +1,41 @@
/* $NetBSD: p5busvar.h,v 1.1 2012/01/10 20:29:50 rkujawa Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
* by Radoslaw Kujawa.
*
* 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 THE NETBSD FOUNDATION, INC. 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 FOUNDATION 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/types.h>
#define P5_CARDTYPE_CS 1 /* CyberStorm PPC/Mk-III */
#define P5_CARDTYPE_BPPC 2 /* BlizzardPPC */
struct p5bus_attach_args {
char p5baa_name[32];
uint8_t p5baa_cardtype;
};

View File

@ -0,0 +1,120 @@
/* $NetBSD: p5membar.c,v 1.1 2012/01/10 20:29:50 rkujawa Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
* by Radoslaw Kujawa.
*
* 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 THE NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
*/
/*
* Handle autoconfigured PCI resources on some revisions of CyberVision PPC,
* BlizzardVision PPC graphics cards and all G-REX PCI busboards.
*/
#include <sys/types.h>
#include <sys/param.h>
#include <sys/time.h>
#include <sys/systm.h>
#include <sys/errno.h>
#include <sys/device.h>
#include <sys/malloc.h>
#include <sys/extent.h>
#include <uvm/uvm_extern.h>
#include <machine/bus.h>
#include <machine/cpu.h>
#include <m68k/bus_dma.h>
#include <amiga/dev/zbusvar.h>
#include <amiga/pci/p5pbreg.h>
#include <amiga/pci/p5pbvar.h>
#include <amiga/pci/p5membarvar.h>
/* Zorro IDs */
#define ZORRO_MANID_P5 8512
#define ZORRO_PRODID_P5PB 101 /* CVPPC/BVPPC/G-REX */
static int p5membar_match(struct device *, struct cfdata *, void *);
static void p5membar_attach(struct device *, struct device *, void *);
CFATTACH_DECL_NEW(p5membar, sizeof(struct p5membar_softc),
p5membar_match, p5membar_attach, NULL, NULL);
static int
p5membar_match(device_t parent, cfdata_t cf, void *aux)
{
struct zbus_args *zap;
zap = aux;
if (zap->manid != ZORRO_MANID_P5)
return 0;
if (zap->prodid != ZORRO_PRODID_P5PB)
return 0;
return 1;
}
static void
p5membar_attach(device_t parent, device_t self, void *aux)
{
struct zbus_args *zap;
struct p5membar_softc *sc;
sc = device_private(self);
zap = aux;
sc->sc_dev = self;
sc->sc_base = zap->pa;
sc->sc_size = zap->size;
if ((bus_addr_t) zap->pa == P5BUS_PCI_CONF_BASE) {
aprint_normal(": PCI config area, %d kB\n",
zap->size / 1024);
sc->sc_type = P5MEMBAR_TYPE_INTERNAL;
} else if ((bus_addr_t) zap->pa == P5BUS_PCI_IO_BASE) {
aprint_normal(": PCI I/O area, %d kB\n",
zap->size / 1024);
sc->sc_type = P5MEMBAR_TYPE_INTERNAL;
} else if ((bus_addr_t) zap->pa == P5BUS_PCI_BRIDGE_BASE) {
aprint_normal(": PCI bridge, %d kB\n",
zap->size / 1024);
sc->sc_type = P5MEMBAR_TYPE_INTERNAL;
} else {
aprint_normal(": PCI memory BAR, %d kB\n",
zap->size / 1024);
sc->sc_type = P5MEMBAR_TYPE_MEMORY;
}
/*
* Do nothing here, p5pb should find the p5membar devices
* and do the right(tm) thing.
*/
}

View File

@ -0,0 +1,45 @@
/* $NetBSD: p5membarvar.h,v 1.1 2012/01/10 20:29:50 rkujawa Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
* by Radoslaw Kujawa.
*
* 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 THE NETBSD FOUNDATION, INC. 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 FOUNDATION 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/types.h>
#include <sys/device.h>
struct p5membar_softc {
device_t sc_dev;
uint8_t sc_type;
#define P5MEMBAR_TYPE_INTERNAL 1 /* internal stuff, don't touch */
#define P5MEMBAR_TYPE_MEMORY 2 /* PCI memory BAR */
volatile char *sc_base; /* base PA */
uint32_t sc_size;
};

View File

@ -1,4 +1,4 @@
/* $NetBSD: p5pb.c,v 1.4 2011/10/07 23:08:33 rkujawa Exp $ */
/* $NetBSD: p5pb.c,v 1.5 2012/01/10 20:29:50 rkujawa Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@ -37,6 +37,7 @@
#include <sys/device.h>
#include <sys/malloc.h>
#include <sys/extent.h>
#include <sys/kmem.h>
#include <uvm/uvm_extern.h>
@ -45,52 +46,22 @@
#include <m68k/bus_dma.h>
#include <amiga/dev/zbusvar.h>
#include <amiga/dev/p5busvar.h>
#include <amiga/pci/p5pbreg.h>
#include <amiga/pci/p5pbvar.h>
#include <amiga/pci/p5membarvar.h>
#include <dev/pci/pcivar.h>
#include <dev/pci/pcireg.h>
#include <dev/pci/pcidevs.h>
#include <dev/pci/pciconf.h>
/* Zorro IDs */
#define ZORRO_MANID_P5 8512
#define ZORRO_PRODID_BPPC 110 /* BlizzardPPC */
#define ZORRO_PRODID_CSPPC 100 /* CyberStormPPC */
#define ZORRO_PRODID_P5PB 101 /* CVPPC/BVPPC/G-REX */
#define ZORRO_PRODID_CV643D_Z3 67 /* CV64/3D */
/* Initial CVPPC/BVPPC resolution as configured by the firmware */
#define P5GFX_WIDTH 640
#define P5GFX_HEIGHT 480
#define P5GFX_DEPTH 8
#define P5GFX_LINEBYTES 640
/* #define P5PB_MATCH_CV643D 1 */
/* #define P5PB_DEBUG 1 */
static struct p5pb_bridge_type p5pb_bridge_cvppc = {
"Phase5 CVPPC/BVPPC PCI bridge",
false,
true,
1,
};
static struct p5pb_bridge_type p5pb_bridge_cv643d = {
"Phase5 CyberVision 64/3D PCI bridge",
false,
false,
1,
};
/* const struct p5pb_bridge_type p5pb_bridge_grex {
"DCE Computer G-REX PCI bridge",
true,
false,
5
}
*/
static int p5pb_match(struct device *, struct cfdata *, void *);
static void p5pb_attach(struct device *, struct device *, void *);
void p5pb_set_props(struct p5pb_softc *sc);
@ -107,63 +78,25 @@ void p5pb_pci_decompose_tag(pci_chipset_tag_t pc, pcitag_t tag,
int *bp, int *dp, int *fp);
int p5pb_pci_intr_map(const struct pci_attach_args *pa,
pci_intr_handle_t *ihp);
bool p5pb_bus_map_cv643d(struct p5pb_softc *sc);
static bool p5pb_bus_map_cvppc(struct p5pb_softc *sc);
bool p5pb_bus_map_cvppc(struct p5pb_softc *sc);
bool p5pb_bus_map_grex(struct p5pb_softc *sc);
bool p5pb_bus_map_common(struct p5pb_softc *sc);
uint8_t p5pb_find_resources(struct p5pb_softc *sc);
CFATTACH_DECL_NEW(p5pb, sizeof(struct p5pb_softc),
p5pb_match, p5pb_attach, NULL, NULL);
static int p5pb_present = 0;
static int
p5pb_match(device_t parent, cfdata_t cf, void *aux)
{
struct zbus_args *zap;
struct p5bus_attach_args *p5baa;
zap = aux;
p5baa = (struct p5bus_attach_args *) aux;
if (zap->manid != ZORRO_MANID_P5)
return 0;
if (strcmp(p5baa->p5baa_name, "p5pb") == 0)
return 1;
#ifdef I_HAVE_P5PB_REALLY
/*
* At least some firmware versions do not create AutoConfig entries for
* CyberVisionPPC/BlizzardVisionPPC (product ID 0101). There's no "nice"
* way to detect the PCI bus in this case. At least check for CSPPC/BPPC.
*/
if ((zap->prodid != ZORRO_PRODID_BPPC) &&
(zap->prodid != ZORRO_PRODID_CSPPC)) {
if (!p5pb_present) {
p5pb_present = 1;
return 100; /* XXX: This will break SCSI! */
}
}
#endif
if ((zap->prodid != ZORRO_PRODID_P5PB)
#ifdef P5PB_MATCH_CV643D
/*
* This should not be used now, because CV64/3D grf driver does
* attach directly to Zorro bus. Might get useful if we ever get
* virgefb..
*/
&& (zap->prodid != ZORRO_PRODID_CV643D_Z3)
#endif
)
return 0;
#ifdef P5PB_DEBUG
aprint_normal("p5pb matched by Zorro ID %d, %d\n", zap->manid,
zap->prodid);
#endif
if (p5pb_present)
return 0; /* Allow only one. */
p5pb_present = 1;
return 10;
return 0;
}
@ -172,35 +105,40 @@ p5pb_attach(device_t parent, device_t self, void *aux)
{
struct p5pb_softc *sc;
struct pcibus_attach_args pba;
struct p5pb_bridge_type *bt;
struct zbus_args *zap;
sc = device_private(self);
pci_chipset_tag_t pc = &sc->apc;
sc->sc_dev = self;
zap = aux;
if(zap->prodid == ZORRO_PRODID_CV643D_Z3) {
bt = &p5pb_bridge_cv643d;
sc->p5pb_bus_map = &p5pb_bus_map_cv643d;
sc->ba = zap->va;
if (p5pb_find_resources(sc) > 0) {
sc->p5pb_bus_map = &p5pb_bus_map_grex;
} else {
bt = &p5pb_bridge_cvppc;
sc->p5pb_bus_map = p5pb_bus_map_cvppc;
#ifdef P5PB_OLD_FIRMWARE
sc->p5pb_bus_map = &p5pb_bus_map_cvppc;
#else
aprint_normal(": no PCI bridges detected\n");
return;
#endif /* P5PB_OLD_FIRMWARE */
}
aprint_normal(": Phase5 CVPPC/BVPPC/G-REX PCI bridge\n");
if(!p5pb_bus_map_common(sc)) {
aprint_error_dev(self,
"couldn't map PCI configuration and I/O spaces\n");
return;
}
if(!(sc->p5pb_bus_map(sc))) {
aprint_error_dev(self,
"couldn't map PCI configuration registers\n");
"couldn't map PCI memory space\n");
return;
}
aprint_normal(": %s\n", bt->name);
#ifdef P5PB_DEBUG
aprint_normal("p5pb: mapped %x -> %x, %x -> %x\n, %x -> %x\n",
P5BUS_PCI_CONF_BASE, sc->pci_conf_area.base,
P5BUS_PCI_IO_BASE, sc->pci_conf_area.base,
P5BUS_PCI_IO_BASE, sc->pci_io_area.base,
P5BUS_PCI_MEM_BASE, sc->pci_mem_area.base );
#endif
@ -227,11 +165,54 @@ p5pb_attach(device_t parent, device_t self, void *aux)
pba.pba_bus = 0;
pba.pba_bridgetag = NULL;
#ifdef P5PB_GENFB
p5pb_set_props(sc);
#endif /* P5PB_GENFB */
config_found_ia(self, "pcibus", &pba, pcibusprint);
}
/*
* Find autoconfigured resuorces (for boards running G-REX firmware). Return the
* total number of found resources.
*/
uint8_t
p5pb_find_resources(struct p5pb_softc *sc)
{
uint8_t i, rv;
struct p5pb_autoconf_entry *auto_entry;
struct p5membar_softc *membar_sc;
device_t p5membar_dev;
rv = 0;
TAILQ_INIT(&sc->auto_bars);
/* 255 should be enough for everybody */
for(i = 0; i < 255; i++) {
if ((p5membar_dev =
device_find_by_driver_unit("p5membar", i)) != NULL) {
rv++;
membar_sc = device_private(p5membar_dev);
if (membar_sc->sc_type == P5MEMBAR_TYPE_INTERNAL)
continue;
auto_entry =
kmem_alloc(sizeof(struct p5pb_autoconf_entry),
KM_SLEEP);
auto_entry->base = membar_sc->sc_base;
auto_entry->size = membar_sc->sc_size;
TAILQ_INSERT_TAIL(&sc->auto_bars, auto_entry, entries);
}
}
return rv;
}
/*
* Set properties needed to support fb driver. These are read later during
* autoconfg in device_register().
@ -298,7 +279,7 @@ p5pb_pci_conf_write(pci_chipset_tag_t pc, pcitag_t tag, int reg, pcireg_t val)
int
p5pb_pci_bus_maxdevs(pci_chipset_tag_t pc, int busno)
{
/* G-Rex has max 5 slots. CVPPC/BVPPC has only 1. */
/* G-REX has max 5 slots. CVPPC/BVPPC has only 1. */
return 1;
}
@ -317,13 +298,48 @@ p5pb_pci_intr_map(const struct pci_attach_args *pa, pci_intr_handle_t *ihp)
return 0;
}
static bool
p5pb_bus_map_cvppc(struct p5pb_softc *sc)
/* PCI memory mapping done G-REX-style. */
bool
p5pb_bus_map_grex(struct p5pb_softc *sc)
{
struct p5pb_autoconf_entry *membar_entry;
bus_addr_t bar_address;
bus_addr_t pci_mem_highest;
pci_mem_highest = P5BUS_PCI_MEM_BASE;
#ifdef P5PB_DEBUG
aprint_normal("p5pb: p5pb_bus_map_grex called\n");
#endif /* P5PB_DEBUG */
/* Determine the highest address used by any PCI card. */
TAILQ_FOREACH(membar_entry, &sc->auto_bars, entries) {
bar_address = (bus_addr_t) membar_entry->base;
if ((bar_address + membar_entry->size) > pci_mem_highest)
pci_mem_highest = bar_address + membar_entry->size;
#ifdef P5PB_DEBUG
aprint_normal("p5pb: memory BAR at %p, highest address %x\n",
membar_entry->base, pci_mem_highest);
#endif /* P5PB_DEBUG */
}
sc->pci_mem_area.base = (bus_addr_t) zbusmap(
(void *) P5BUS_PCI_MEM_BASE, pci_mem_highest - P5BUS_PCI_MEM_BASE);
sc->pci_mem_area.absm = &amiga_bus_stride_1swap_abs;
return true;
}
/* Map things common for all supported bridges. */
bool
p5pb_bus_map_common(struct p5pb_softc *sc)
{
#ifdef P5PB_DEBUG
aprint_normal("p5pb: p5pb_bus_map_cvppc called\n");
aprint_normal("p5pb: p5pb_bus_map_common called\n");
#endif /* P5PB_DEBUG */
/* Setup bus space mappings. */
sc->pci_conf_area.base = (bus_addr_t) zbusmap(
(void *) P5BUS_PCI_CONF_BASE, P5BUS_PCI_CONF_SIZE);
sc->pci_conf_area.absm = &amiga_bus_stride_1;
@ -332,47 +348,32 @@ p5pb_bus_map_cvppc(struct p5pb_softc *sc)
(void *) P5BUS_PCI_IO_BASE, P5BUS_PCI_IO_SIZE);
sc->pci_io_area.absm = &amiga_bus_stride_1swap_abs;
sc->pci_mem_area.base = (bus_addr_t) zbusmap(
(void *) P5BUS_PCI_MEM_BASE, P5BUS_PCI_MEM_SIZE);
sc->pci_mem_area.absm = &amiga_bus_stride_1swap_abs;
sc->apc.pci_conf_datat = &(sc->pci_conf_area);
sc->apc.pci_conf_addresst = &(sc->pci_conf_area);
if (bus_space_map(sc->apc.pci_conf_addresst, OFF_PCI_CONF_ADDR,
256, 0, &sc->apc.pci_conf_addressh))
return false;
if (bus_space_map(sc->apc.pci_conf_datat, OFF_PCI_CONF_DATA,
256, 0, &sc->apc.pci_conf_datah))
return false;
/* XXX */
/* if (bus_space_map(sc->apc.pci_conf_addresst, OFF_PCI_CONF_ADDR,
256, 0, &sc->apc.pci_conf_addressh))
return false; */
return true;
}
/* Hard-coded memory mapping for CVPPC/BVPPC (without G-REX firmware). */
bool
p5pb_bus_map_cv643d(struct p5pb_softc *sc) {
p5pb_bus_map_cvppc(struct p5pb_softc *sc)
{
#ifdef P5PB_DEBUG
aprint_normal("p5pb: p5pb_bus_map_cv643d called, ba = %x\n",
(bus_addr_t) sc->ba);
aprint_normal("p5pb: p5pb_bus_map_cvppc called\n");
#endif /* P5PB_DEBUG */
sc->pci_mem_area.base = (bus_addr_t) zbusmap(
(void *) P5BUS_PCI_MEM_BASE, P5BUS_PCI_MEM_SIZE);
sc->pci_mem_area.absm = &amiga_bus_stride_1swap_abs;
sc->pci_conf_area.base = (bus_addr_t) sc->ba + CV643D_PCI_CONF_BASE;
sc->pci_conf_area.absm = &amiga_bus_stride_1;
sc->pci_mem_area.base = (bus_addr_t) sc->ba + CV643D_PCI_MEM_BASE;
sc->pci_mem_area.absm = &amiga_bus_stride_1;
sc->pci_io_area.base = (bus_addr_t) sc->ba + CV643D_PCI_IO_BASE;
sc->pci_io_area.absm = &amiga_bus_stride_1;
sc->apc.pci_conf_datat = &(sc->pci_conf_area);
if (bus_space_map(sc->apc.pci_conf_datat, 0,
CV643D_PCI_CONF_SIZE, 0, &sc->apc.pci_conf_datah))
return false;
return true;
}

View File

@ -1,4 +1,4 @@
/* $NetBSD: p5pbreg.h,v 1.3 2011/10/07 08:44:21 rkujawa Exp $ */
/* $NetBSD: p5pbreg.h,v 1.4 2012/01/10 20:29:50 rkujawa Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@ -58,10 +58,13 @@
#define P5BUS_PCI_IO_BASE 0xFFFA0000
#define P5BUS_PCI_IO_SIZE 0x0000FFFF
#define P5BUS_PCI_BRIDGE_BASE 0xFFFE0000
#define P5BUS_PCI_BRIDGE_SIZE 0x0000FFFF /* 4kB on some fw revs */
#define OFF_PCI_CONF_DATA 0x00000000
#define OFF_PCI_CONF_ADDR 0x00020000
#define P5BUS_CONF_ENDIAN 0x0000 /* PCI_CONF_ADDR + offset */
#define P5BUS_CONF_ENDIAN 0x0000 /* PCI_BRIDGE_BASE + offset */
#define P5BUS_CONF_ENDIAN_BIG 0x02 /* to switch into BE mode */
#define P5BUS_CONF_INTR 0x0010 /* ? XXX interrupt enable? */
#define P5BUS_CONF_INTR_INT2 0x01 /* ? XXX INT2? */

View File

@ -1,4 +1,4 @@
/* $NetBSD: p5pbvar.h,v 1.1 2011/10/07 08:44:21 rkujawa Exp $ */
/* $NetBSD: p5pbvar.h,v 1.2 2012/01/10 20:29:50 rkujawa Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@ -36,23 +36,26 @@
#include <dev/pci/pciconf.h>
#include <machine/pci_machdep.h>
struct p5pb_bridge_type {
const char *name; /* descriptive name */
bool configure_bus; /* should we configure the bus? */
bool set_genfb_props;/* should we set props for genfb(4)? */
int maxdevs; /* max number of devices on the bus */
struct p5pb_autoconf_entry {
volatile char *base;
uint32_t size;
TAILQ_ENTRY(p5pb_autoconf_entry) entries;
};
struct p5pb_softc {
device_t sc_dev;
volatile char *ba;
struct bus_space_tag pci_conf_area;
struct bus_space_tag pci_mem_area;
struct bus_space_tag pci_io_area;
struct amiga_pci_chipset apc;
struct p5pb_bridge_type bridge_type;
bool (*p5pb_bus_map)(struct p5pb_softc *);
device_t sc_dev;
volatile char *ba;
struct bus_space_tag pci_conf_area;
struct bus_space_tag pci_mem_area;
struct bus_space_tag pci_io_area;
struct amiga_pci_chipset apc;
/* list of preconfigured BARs */
TAILQ_HEAD(, p5pb_autoconf_entry) auto_bars;
bool(*p5pb_bus_map)(struct p5pb_softc *);
};
#endif /* _AMIGA_P5PBVAR_H_ */