Add support for the Certance CP-3100.

"The Certance CP3100 product family provides high-end disk-to-disk-to-tape
(D2D2T) functionality for small-to-medium businesses."

To software, the unit is very similar to the IQ80321 and IQ31244 eval
boards from Intel. As such, we share almost all of their code.

Onboard hardware:
 - IOP321 XScale CPU. Core clock is 600MHz.
 - 256MB SDRAM (not sure if that's true for all)
 - Four-port Intel i31244 SATA controller. One port is connected to the
   internal disk. The remaining three are available on the back-panel.
 - Dual GigE ports on the back panel, using an Intel i82546EB controller.
 - Two Symbios Logic 53c1010 SCSI controllers, one in host mode the other
   in target mode. Both SCSI busses are available on the back panel.
   Note that NetBSD does not support SCSI target mode.
 - 8MB of NOR Flash, containing a fairly vanilla Redboot together with
   a minimal compressed Linux image.
 - Some front-panel LEDS (not supported).
 - Serial console.

Contributed by Wasabi Systems, Inc.
This commit is contained in:
scw 2006-11-08 23:49:02 +00:00
parent d3089a454e
commit 5bfa580df1
6 changed files with 587 additions and 0 deletions

254
sys/arch/evbarm/conf/CP3100 Normal file
View File

@ -0,0 +1,254 @@
# $NetBSD: CP3100,v 1.1 2006/11/08 23:49:02 scw Exp $
#
# CP3100 -- Certance CP3100 Kernel
#
include "arch/evbarm/conf/std.cp3100"
#options INCLUDE_CONFIG_FILE # embed config file in kernel binary
# estimated number of users
maxusers 32
# Standard system options
options RTC_OFFSET=0 # hardware clock is this many mins. west of GMT
options NTP # NTP phase/frequency locked loop
#options NMBCLUSTERS=1024
# CPU options
# For XScale systems
options CPU_XSCALE_80321 # Support the XScale core
makeoptions CPUFLAGS="-mcpu=xscale"
# Architecture options
options XSCALE_CACHE_READ_WRITE_ALLOCATE
#options HZ=512
# File systems
file-system FFS # UFS
file-system LFS # log-structured file system
file-system MFS # memory file system
file-system NFS # Network file system
#file-system ADOSFS # AmigaDOS-compatible file system
#file-system EXT2FS # second extended file system (linux)
#file-system CD9660 # ISO 9660 + Rock Ridge file system
#file-system MSDOSFS # MS-DOS file system
file-system FDESC # /dev/fd
file-system KERNFS # /kern
file-system NULLFS # loopback file system
#file-system PORTAL # portal filesystem (still experimental)
file-system PROCFS # /proc
#file-system UMAPFS # NULLFS + uid and gid remapping
#file-system UNION # union file system
file-system PTYFS # /dev/pts/N support
# File system options
#options QUOTA # UFS quotas
#options FFS_EI # FFS Endian Independant support
options NFSSERVER
options SOFTDEP
#options FFS_NO_SNAPSHOT # No FFS snapshot support
# Networking options
options GATEWAY # packet forwarding
options INET # IP + ICMP + TCP + UDP
options INET6 # IPV6
#options IPSEC # IP security
#options IPSEC_ESP # IP security (encryption part; define w/ IPSEC)
#options IPSEC_NAT_T # IPsec NAT traversal (NAT-T)
#options IPSEC_DEBUG # debug for IP security
#options MROUTING # IP multicast routing
#options PIM # Protocol Independent Multicast
#options NS # XNS
#options NSIP # XNS tunneling over IP
#options ISO,TPIP # OSI
#options EON # OSI tunneling over IP
#options CCITT,LLC,HDLC # X.25
#options NETATALK # AppleTalk networking
#options PFIL_HOOKS # pfil(9) packet filter hooks
#options PPP_BSDCOMP # BSD-Compress compression support for PPP
#options PPP_DEFLATE # Deflate compression support for PPP
#options PPP_FILTER # Active filter support for PPP (requires bpf)
options IPFILTER_LOG # ipmon(8) log support
options IPFILTER_LOOKUP # ippool(8) support
#options TCP_DEBUG # Record last TCP_NDEBUG packets with SO_DEBUG
options NFS_BOOT_BOOTP
options NFS_BOOT_DHCP
#options NFS_BOOT_BOOTPARAM
# Compatibility options
#options COMPAT_43 # 4.3BSD compatibility.
#options COMPAT_30 # NetBSD 3.0 compatibility.
#options COMPAT_20 # NetBSD 2.0 compatibility.
#options COMPAT_16 # NetBSD 1.6 compatibility.
#options COMPAT_15 # NetBSD 1.5 compatibility.
#options COMPAT_14 # NetBSD 1.4 compatibility.
#options COMPAT_13 # NetBSD 1.3 compatibility.
#options COMPAT_12 # NetBSD 1.2 compatibility.
#options COMPAT_11 # NetBSD 1.1 compatibility.
#options COMPAT_10 # NetBSD 1.0 compatibility.
#options COMPAT_09 # NetBSD 0.9 compatibility.
#options TCP_COMPAT_42 # 4.2BSD TCP/IP bug compat. Not recommended.
options COMPAT_BSDPTY # /dev/[pt]ty?? ptys.
# Shared memory options
options SYSVMSG # System V-like message queues
options SYSVSEM # System V-like semaphores
#options SEMMNI=10 # number of semaphore identifiers
#options SEMMNS=60 # number of semaphores in system
#options SEMUME=10 # max number of undo entries per process
#options SEMMNU=30 # number of undo structures in system
options SYSVSHM # System V-like memory sharing
options SHMMAXPGS=2048 # 2048 pages is the default
options P1003_1B_SEMAPHORE # p1003.1b semaphore support
# Device options
#options MEMORY_DISK_HOOKS # boottime setup of ramdisk
#options MEMORY_DISK_ROOT_SIZE=3400 # Size in blocks
#options MEMORY_DISK_IS_ROOT # use memory disk as root
# Console options. The default console is speed is 115200 baud.
options CONSPEED=115200 # Console speed
# Miscellaneous kernel options
options KTRACE # system call tracing, a la ktrace(1)
options IRQSTATS # manage IRQ statistics
#options LKM # loadable kernel modules
#options KMEMSTATS # kernel memory statistics
#options SCSIVERBOSE # Verbose SCSI errors
#options PCIVERBOSE # Verbose PCI descriptions
#options MIIVERBOSE # Verbose MII autoconfuration messages
#options PCI_CONFIG_DUMP # verbosely dump PCI config space
#options DDB_KEYCODE=0x40
options USERCONF # userconf(4) support
#options PIPE_SOCKETPAIR # smaller, but slower pipe(2)
#options SYSCTL_INCLUDE_DESCR # Include sysctl descriptions in kernel
# Development and Debugging options
options PERFCTRS # performance counters
options DIAGNOSTIC # internally consistency checks
#options DEBUG
#options PMAP_DEBUG # Enable pmap_debug_level code
#options IPKDB # remote kernel debugging
#options VERBOSE_INIT_ARM # verbose bootstraping messages
options DDB # in-kernel debugger
options DDB_HISTORY_SIZE=100 # Enable history editing in DDB
#makeoptions DEBUG="-g" # compile full symbol table
options SYMTAB_SPACE=310000
config netbsd root on ? type ?
config netbsd-wm0 root on wm0 type nfs
config netbsd-wd0 root on wd0a type ffs
# The main bus device
mainbus0 at root
# The boot CPU
cpu0 at mainbus?
# On-board device support
obio* at mainbus?
# Console UART.
# Note: "xint 4" is actually the HPI# pin
com0 at obio? addr 0xfe800000 xint 4
# i80321 I/O Processor peripheral support
iopxs* at mainbus?
iopaau* at iopxs? # Application Accelerator Unit
iopiic* at iopxs? # I2C Controller Unit(s)
iic0 at iopiic?
iic1 at iopiic?
iopwdog* at iopxs? # Watchdog timer
pci0 at iopxs? bus ? # PCI/PCI-X support
# IIC Devices
m41trtc0 at iic1 addr 0x68 # M41T11 Realtime Clock
#
# Storage devices
#
# Serial ATA: i31244
artsata* at pci? dev ? function ? # Intel i31244 SATA controller
atabus* at ata?
# ATA Disks
wd* at atabus? drive ? flags 0x0000
# SCSI: Symbios Logic 53c1010
#
# Wire down the Target/Host instances. Disable the target contoller for
# now as we don't currently support SCSI target mode.
siop0 at pci0 dev 2 function 1 # Host controller
#siop1 at pci0 dev 2 function 0 # Target controller
scsibus* at scsi?
# SCSI Devices
sd* at scsibus? target ? lun ? # SCSI disk drives
st* at scsibus? target ? lun ? # SCSI tape drives
cd* at scsibus? target ? lun ? # SCSI CD-ROM drives
ch* at scsibus? target ? lun ? # SCSI autochangers
ses* at scsibus? target ? lun ? # SCSI Enclosure Services devices
ss* at scsibus? target ? lun ? # SCSI Scanners
uk* at scsibus? target ? lun ? # SCSI unknown
#
# Networking devices
#
# PCI network devices
wm* at pci? dev ? function ? # Intel i82546EB Gig-E
# MII/PHY support
makphy* at mii? phy ? # Marvell 88E1000 PHYs
# Pseudo-Devices
# disk/mass storage pseudo-devices
pseudo-device ccd 4 # concatenated/striped disk devices
#pseudo-device cgd 4 # cryptographic disk devices
pseudo-device raid 8 # RAIDframe disk driver
options RAID_AUTOCONFIG # auto-configuration of RAID components
# Options to enable various other RAIDframe RAID types.
#options RF_INCLUDE_EVENODD=1
#options RF_INCLUDE_RAID5_RS=1
#options RF_INCLUDE_PARITYLOGGING=1
#options RF_INCLUDE_CHAINDECLUSTER=1
#options RF_INCLUDE_INTERDECLUSTER=1
#options RF_INCLUDE_PARITY_DECLUSTERING=1
#options RF_INCLUDE_PARITY_DECLUSTERING_DS=1
#pseudo-device fss 4 # file system snapshot device
#pseudo-device md 1 # memory disk device (ramdisk)
pseudo-device vnd # disk-like interface to files
options VND_COMPRESSION # compressed vnd(4)
# network pseudo-devices
pseudo-device bpfilter # Berkeley packet filter
pseudo-device ipfilter # IP filter (firewall) and NAT
pseudo-device loop # network loopback
#pseudo-device tun # network tunneling over tty
#pseudo-device vlan # IEEE 802.1q encapsulation
#pseudo-device bridge # simple inter-network bridging
# miscellaneous pseudo-devices
pseudo-device pty # pseudo-terminals
pseudo-device rnd # /dev/random and in-kernel generator
pseudo-device clockctl # user control of clock subsystem
pseudo-device ksyms # /dev/ksyms
# data mover pseudo-devices
#pseudo-device swdmover # softare dmover(9) back-end
#pseudo-device dmoverio # /dev/dmover dmover(9) interface

View File

@ -0,0 +1,27 @@
# $NetBSD: files.cp3100,v 1.1 2006/11/08 23:49:02 scw Exp $
#
# Certance CP3100 configuration info
#
# Use the generic ARM soft interrupt code.
file arch/arm/arm/softintr.c
file arch/evbarm/iq80321/iq80321_machdep.c
file arch/evbarm/cp3100/cp3100_pci.c
file arch/evbarm/cp3100/cp3100_leds.c
# CP3100 on-board devices
device obio {addr, [size = -1], [width = -1], [xint = -1]}: bus_space_generic
attach obio at mainbus
file arch/evbarm/iq80321/obio.c obio
file arch/evbarm/iq80321/obio_space.c obio
# on-board TI 165C50 UART
attach com at obio with com_obio
file arch/evbarm/iq80321/com_obio.c com_obio
# i80321 I/O Processor CPU support
include "arch/arm/xscale/files.i80321"
attach iopxs at mainbus with iopxs_mainbus
file arch/evbarm/iq80321/i80321_mainbus.c iopxs_mainbus

View File

@ -0,0 +1,27 @@
# $NetBSD: std.cp3100,v 1.1 2006/11/08 23:49:02 scw Exp $
#
# Standard NetBSD/evbarm options for CP3100
machine evbarm arm
include "conf/std" # MI standard options
# Pull in CP3100 config definitions.
include "arch/evbarm/conf/files.cp3100"
options EXEC_ELF32
options EXEC_AOUT
options EXEC_SCRIPT
# To support easy transit to ../arch/arm/arm32
options ARM32
makeoptions BOARDTYPE="cp3100"
makeoptions BOARDMKFRAG="${THISARM}/conf/mk.iq80321"
options ARM_INTR_IMPL="<arch/arm/xscale/i80321_intr.h>"
# Console UART is on HPI, so enable HPI-specific code
options I80321_HPI_ENABLED
# We need to configure the PCI bus.
options PCI_NETBSD_CONFIGURE

View File

@ -0,0 +1,59 @@
$NetBSD: README,v 1.1 2006/11/08 23:49:02 scw Exp $
"The Certance CP3100 product family provides high-end disk-to-disk-to-tape
(D2D2T) functionality for small-to-medium businesses."
Physically, the CP3100 is designed to fit in a single 5.25" half-height
drive bay. Storage is provided by a removable SATA disk integral to the unit.
To software, the hardware is very similar to the IQ80321 and IQ31244 eval
boards from Intel. As such, we share almost all of their code.
Onboard hardware:
- IOP321 XScale CPU. Core clock is 600MHz.
- 256MB SDRAM (not sure if that's true for all)
- Four-port Intel i31244 SATA controller. One port is connected to the
internal disk. The remaining three are available on the back-panel.
- Dual GigE ports on the back panel, using an Intel i82546EB controller.
- Two Symbios Logic 53c1010 SCSI controllers, one in host mode the other
in target mode. Both SCSI busses are available on the back panel.
Note that NetBSD does not support SCSI target mode.
- 8MB of NOR Flash, containing a fairly vanilla Redboot together with
a minimal compressed Linux image.
- Some front-panel LEDS (not yet supported).
- Serial console.
Power is provided via a standard 4-pin Molex connector (5v/Gnd/Gnd/12v).
The serial console is available on the back-panel "MISC" pins. Looking
at the back-panel, with the Molex power connector at the bottom left,
the MISC connector pin-out is:
M I S C
1 3 5 7 9 11
. . . . . .
. . . . . .
2 4 6 8 10 12
There should be a jumper between pins 11-12. The serial console is
available on pins 8, 9, and 10:
8 - Gnd
9 - Tx
10 - Rx
No TTL-RS232 level conversion is needed. Serial parameters are 115200 8N1.
Getting NetBSD onto the CP3100 is a breeze. Simply break into Redboot by
sending ^C before it loads the Linux kernel. Run "fconfig" to set the
network parameters to suit your set up (and set "Run script" to "false"
while you're in there). Drop "netbsd.bin" onto your TFTP server, and
load it onto the CP3100 using "load -r -b 0x200000 netbsd.bin" followed
by "go".
The IQ80321 version of gzboot works fine with the CP3100, so you can use
Redboot to program a gzboot/kernel image into onboard Flash and have it
boot NetBSD on power-up.

View File

@ -0,0 +1,60 @@
/* $NetBSD: cp3100_leds.c,v 1.1 2006/11/08 23:49:02 scw Exp $ */
/*
* Copyright 2006 Wasabi Systems, Inc.
* All rights reserved.
*
* Written by Steve C. Woodford for Wasabi Systems, Inc.
*
* 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
* Wasabi Systems, Inc.
* 4. The name of Wasabi Systems, Inc. may not be used to endorse
* or promote products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``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 WASABI SYSTEMS, INC
* 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: cp3100_leds.c,v 1.1 2006/11/08 23:49:02 scw Exp $");
#include <sys/param.h>
#include <sys/systm.h>
#include <machine/bus.h>
#include <evbarm/iq80321/iq80321reg.h>
#include <evbarm/iq80321/iq80321var.h>
/*
* Empty functions to keep the iq80321 code happy
*/
void
iq80321_7seg(char a, char b)
{
}
void
iq80321_7seg_snake(void)
{
}

View File

@ -0,0 +1,160 @@
/* $NetBSD: cp3100_pci.c,v 1.1 2006/11/08 23:49:02 scw Exp $ */
/*
* Copyright 2006 Wasabi Systems, Inc.
* All rights reserved.
*
* Written by Steve C. Woodford for Wasabi Systems, Inc.
*
* 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
* Wasabi Systems, Inc.
* 4. The name of Wasabi Systems, Inc. may not be used to endorse
* or promote products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``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 WASABI SYSTEMS, INC
* 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.
*/
/*
* CP3100 PCI interrupt support.
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: cp3100_pci.c,v 1.1 2006/11/08 23:49:02 scw Exp $");
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/device.h>
#include <machine/autoconf.h>
#include <machine/bus.h>
#include <evbarm/iq80321/iq80321reg.h>
#include <evbarm/iq80321/iq80321var.h>
#include <arm/xscale/i80321reg.h>
#include <arm/xscale/i80321var.h>
#include <dev/pci/pcidevs.h>
#include <dev/pci/ppbreg.h>
int iq80321_pci_intr_map(struct pci_attach_args *, pci_intr_handle_t *);
const char *iq80321_pci_intr_string(void *, pci_intr_handle_t);
const struct evcnt *iq80321_pci_intr_evcnt(void *, pci_intr_handle_t);
void *iq80321_pci_intr_establish(void *, pci_intr_handle_t,
int, int (*func)(void *), void *);
void iq80321_pci_intr_disestablish(void *, void *);
void
iq80321_pci_init(pci_chipset_tag_t pc, void *cookie)
{
pc->pc_intr_v = cookie; /* the i80321 softc */
pc->pc_intr_map = iq80321_pci_intr_map;
pc->pc_intr_string = iq80321_pci_intr_string;
pc->pc_intr_evcnt = iq80321_pci_intr_evcnt;
pc->pc_intr_establish = iq80321_pci_intr_establish;
pc->pc_intr_disestablish = iq80321_pci_intr_disestablish;
}
int
iq80321_pci_intr_map(struct pci_attach_args *pa, pci_intr_handle_t *ihp)
{
struct i80321_softc *sc = pa->pa_pc->pc_intr_v;
int b, d, f;
uint32_t busno;
busno = bus_space_read_4(sc->sc_st, sc->sc_atu_sh, ATU_PCIXSR);
busno = PCIXSR_BUSNO(busno);
if (busno == 0xff)
busno = 0;
pci_decompose_tag(pa->pa_pc, pa->pa_intrtag, &b, &d, &f);
/* No mappings for devices not on our bus. */
if (b != busno)
goto no_mapping;
switch (d) {
case 0: /* i82546EB Dual GigE */
/*
* This is a dual-function chip which uses INTA and INTB,
* connected to XINT0 and XINT1 respectively.
*/
if (f != 0 && f != 1)
goto no_mapping;
*ihp = ICU_INT_XINT(f);
return (0);
case 1: /* i31244 S-ATA Interface */
*ihp = ICU_INT_XINT(2);
return (0);
case 2: /* Symbios Logic 53c1010 SCSI Controllers */
case 3:
/*
* Both controllers share a single pin
*/
*ihp = ICU_INT_XINT(3);
return (0);
default:
no_mapping:
printf("iq80321_pci_intr_map: no mapping for %d/%d/%d/%c\n",
pa->pa_bus, pa->pa_device, pa->pa_function,
'@' + pa->pa_intrpin);
return (1);
}
return (0);
}
const char *
iq80321_pci_intr_string(void *v, pci_intr_handle_t ih)
{
return (i80321_irqnames[ih]);
}
const struct evcnt *
iq80321_pci_intr_evcnt(void *v, pci_intr_handle_t ih)
{
/* XXX For now. */
return (NULL);
}
void *
iq80321_pci_intr_establish(void *v, pci_intr_handle_t ih, int ipl,
int (*func)(void *), void *arg)
{
return (i80321_intr_establish(ih, ipl, func, arg));
}
void
iq80321_pci_intr_disestablish(void *v, void *cookie)
{
i80321_intr_disestablish(cookie);
}