Support verdex and verdex-pro.
And + Support LCD controller. + Support SMSC LAN 9117 Ethernet controller. + Comment outed 'options GXIO_DEFAULT_EXPANSION'. As for verdex-pro being sold now, this option becomes obstructive. + Remove some usb devices in GUMSTIX. + Update GUMSTIX. Also Fix ARM ABI in gumstix_start.S. Thanks Brett Slager <bds at ifgd.net>. Calculate RAM size in gumstix_start.S.
This commit is contained in:
parent
5bb9b7a6ef
commit
1c10f508e4
|
@ -1,4 +1,4 @@
|
||||||
# $NetBSD: GUMSTIX,v 1.36 2009/04/21 03:00:29 nonaka Exp $
|
# $NetBSD: GUMSTIX,v 1.37 2009/08/09 07:10:13 kiyohara Exp $
|
||||||
#
|
#
|
||||||
# GUMSTIX -- Gumstix. Inc. gumstix platforms kernel
|
# GUMSTIX -- Gumstix. Inc. gumstix platforms kernel
|
||||||
#
|
#
|
||||||
|
@ -14,7 +14,8 @@ maxusers 32
|
||||||
# CPU options
|
# CPU options
|
||||||
|
|
||||||
# For XScale systems
|
# For XScale systems
|
||||||
options CPU_XSCALE_PXA250 # Support the XScale core
|
options CPU_XSCALE_PXA250 # Support the basix/connex motherboards
|
||||||
|
options CPU_XSCALE_PXA270 # Support the verdex motherboards
|
||||||
makeoptions CPUFLAGS="-mcpu=xscale"
|
makeoptions CPUFLAGS="-mcpu=xscale"
|
||||||
|
|
||||||
# Architecture options
|
# Architecture options
|
||||||
|
@ -146,6 +147,7 @@ options MIIVERBOSE # Verbose MII autoconfuration messages
|
||||||
#options PERFCTRS # performance counters
|
#options PERFCTRS # performance counters
|
||||||
options DIAGNOSTIC # internally consistency checks
|
options DIAGNOSTIC # internally consistency checks
|
||||||
options DEBUG
|
options DEBUG
|
||||||
|
#options LOCKDEBUG
|
||||||
#options PMAP_DEBUG # Enable pmap_debug_level code
|
#options PMAP_DEBUG # Enable pmap_debug_level code
|
||||||
#options VERBOSE_INIT_ARM # verbose bootstraping messages
|
#options VERBOSE_INIT_ARM # verbose bootstraping messages
|
||||||
options DDB # in-kernel debugger
|
options DDB # in-kernel debugger
|
||||||
|
@ -153,11 +155,12 @@ options DDB # in-kernel debugger
|
||||||
#options KGDB
|
#options KGDB
|
||||||
#options DEBUG_KGDB
|
#options DEBUG_KGDB
|
||||||
makeoptions DEBUG="-g -O2" # compile full symbol table
|
makeoptions DEBUG="-g -O2" # compile full symbol table
|
||||||
options SYMTAB_SPACE=420000
|
options SYMTAB_SPACE=450000
|
||||||
#options AUDIO_DEBUG=2
|
#options AUDIO_DEBUG=2
|
||||||
|
|
||||||
config netbsd root on ? type ?
|
config netbsd root on ? type ?
|
||||||
config netbsd-sm0 root on sm0 type nfs
|
config netbsd-sm0 root on sm0 type nfs
|
||||||
|
config netbsd-smsh0 root on smsh0 type nfs
|
||||||
|
|
||||||
# The main bus device
|
# The main bus device
|
||||||
mainbus0 at root
|
mainbus0 at root
|
||||||
|
@ -172,14 +175,14 @@ pxaintc0 at pxaip? # interrupt controller
|
||||||
options PXAGPIO_HAS_GPION_INTRS
|
options PXAGPIO_HAS_GPION_INTRS
|
||||||
|
|
||||||
pxagpio0 at pxaip? # GPIO
|
pxagpio0 at pxaip? # GPIO
|
||||||
pxartc0 at pxaip? # RTC
|
pxartc0 at pxaip? addr 0x40900000 # RTC
|
||||||
|
|
||||||
# cotulla integrated 16550 UARTs
|
# cotulla integrated 16550 UARTs
|
||||||
options COM_PXA2X0
|
options COM_PXA2X0
|
||||||
com0 at pxaip? addr 0x40100000 intr 22 # Full Function UART
|
com0 at pxaip? addr 0x40100000 intr 22 # Full Function UART
|
||||||
com1 at pxaip? addr 0x40700000 intr 20 # Standard UART (console-st)
|
com1 at pxaip? addr 0x40700000 intr 20 # Standard UART (console-st)
|
||||||
com2 at pxaip? addr 0x40200000 intr 21 # Bluetooth UART (older -bt)
|
com2 at pxaip? addr 0x40200000 intr 21 # Bluetooth UART (older bt)
|
||||||
com3 at pxaip? addr 0x41600000 intr 7 # Hardware UART(console-hw, -bt)
|
com3 at pxaip? addr 0x41600000 intr 7 # Hardware UART(console-hw, bt)
|
||||||
options FFUARTCONSOLE
|
options FFUARTCONSOLE
|
||||||
#options STUARTCONSOLE
|
#options STUARTCONSOLE
|
||||||
#options BTUARTCONSOLE
|
#options BTUARTCONSOLE
|
||||||
|
@ -193,17 +196,19 @@ options PXA2X0_DMAC_DMOVER_CONCURRENCY=4 # Enable dmover(9) backend
|
||||||
#options PXA2X0_DMAC_FIXED_PRIORITY # Don't want multiple priority
|
#options PXA2X0_DMAC_FIXED_PRIORITY # Don't want multiple priority
|
||||||
|
|
||||||
# AC97 Audio support
|
# AC97 Audio support
|
||||||
pxaacu0 at pxaip? addr 0x40500000 intr 14
|
pxaacu0 at pxaip? addr 0x40500000 intr 14 # Audiostix, Audiostx2, GPSstix
|
||||||
|
|
||||||
# Audio support
|
# Audio support
|
||||||
audio* at audiobus?
|
audio* at audiobus?
|
||||||
|
|
||||||
# LCD
|
# LCD
|
||||||
#lcd0 at pxaip?
|
lcd0 at pxaip? addr 0x44000000 # consoleLCD-vx,consoleLCD16-vx
|
||||||
#wsdisplay* at lcd? console ?
|
wsdisplay* at lcd? console ?
|
||||||
|
|
||||||
# USB Controller and Devices
|
# USB Host/Device Controller
|
||||||
pxaudc0 at pxaip? # USB Device Controller
|
ohci0 at pxaip? addr 0x4c000000 intr 3 # consoleLCD-vx,consoleLCD16-vx
|
||||||
|
# ALSO NEEDS pxaudc
|
||||||
|
pxaudc0 at pxaip? addr 0x40600000
|
||||||
|
|
||||||
# integrated MMC/SD contoller
|
# integrated MMC/SD contoller
|
||||||
pxamci0 at pxaip? addr 0x41100000 size 0x48
|
pxamci0 at pxaip? addr 0x41100000 size 0x48
|
||||||
|
@ -217,25 +222,34 @@ ld* at sdmmc?
|
||||||
# gumstix device support
|
# gumstix device support
|
||||||
gxio0 at pxaip?
|
gxio0 at pxaip?
|
||||||
options GXIO_BLUETOOTH_ON_HWUART # Bluetooth module on HWUART
|
options GXIO_BLUETOOTH_ON_HWUART # Bluetooth module on HWUART
|
||||||
options GXIO_DEFAULT_EXPANSION="\"netCF\""
|
#options GXIO_DEFAULT_EXPANSION="\"netCF\""
|
||||||
|
|
||||||
# gumstix expantion boards
|
# gumstix expantion boards
|
||||||
|
|
||||||
# SMC 91C111
|
# SMC 91C111
|
||||||
sm0 at gxio? addr 0x04000300 gpirq 36 # etherstix, net{MMC,CF,DUO}
|
sm0 at gxio? addr 0x04000300 gpirq ?
|
||||||
|
#sm0 at gxio? addr 0x04000300 gpirq 36 # etherstix,netMMC,netCF,netDUO
|
||||||
|
#sm0 at gxio? addr 0x04000300 gpirq 99 # netCF-vx
|
||||||
sm1 at gxio? addr 0x08000300 gpirq 27 # netDUO(2nd NIC)
|
sm1 at gxio? addr 0x08000300 gpirq 27 # netDUO(2nd NIC)
|
||||||
|
|
||||||
|
# SMSC LAN9117
|
||||||
|
smsh0 at gxio? addr 0x04000300 gpirq 99 # netmicroSD-vx, netpro-vx
|
||||||
|
|
||||||
# Inter-Integrated Circuit controller
|
# Inter-Integrated Circuit controller
|
||||||
gxiic0 at pxaip?
|
gxiic0 at pxaip? addr 0x40300000
|
||||||
iic* at gxiic?
|
iic* at gxiic?
|
||||||
#dsrtc* at iic? addr 0x68 # Can mount DS1307 at console, breakout
|
#dsrtc* at iic? addr 0x68 # Can mount DS1307 at console, breakout
|
||||||
|
|
||||||
# integrated PCMCIA/CF controller
|
# integrated PCMCIA/CF controller
|
||||||
pxapcic0 at pxaip? # cfstix, netCF
|
pxapcic0 at pxaip? addr 0x20000000 # cfstix, netCF
|
||||||
|
|
||||||
# PCMCIA bus support
|
# PCMCIA bus support
|
||||||
pcmcia* at pxapcic?
|
pcmcia* at pxapcic?
|
||||||
|
|
||||||
|
# Marvell 88W8385
|
||||||
|
#malo* at pcmcia? function ? # wifistix, netwifimicrosd, netpro-vx
|
||||||
|
|
||||||
|
|
||||||
# PCMCIA serial interfaces
|
# PCMCIA serial interfaces
|
||||||
com* at pcmcia? function ? # Modems and serial cards
|
com* at pcmcia? function ? # Modems and serial cards
|
||||||
|
|
||||||
|
@ -258,182 +272,61 @@ sqphy* at mii? phy ? # Seeq 80220/80221/80223 PHYs
|
||||||
#slhci* at pcmcia? function ? # ScanLogic SL811HS
|
#slhci* at pcmcia? function ? # ScanLogic SL811HS
|
||||||
|
|
||||||
# USB bus support
|
# USB bus support
|
||||||
|
usb* at ohci?
|
||||||
#usb* at slhci?
|
#usb* at slhci?
|
||||||
|
|
||||||
# USB Hubs
|
# USB Hubs
|
||||||
#uhub* at usb?
|
uhub* at usb?
|
||||||
#uhub* at uhub? port ?
|
uhub* at uhub? port ?
|
||||||
|
|
||||||
# USB HID device
|
# USB HID device
|
||||||
#uhidev* at uhub? port ? configuration ? interface ?
|
uhidev* at uhub? port ? configuration ? interface ?
|
||||||
|
|
||||||
# USB Mice
|
# USB Mice
|
||||||
#ums* at uhidev? reportid ?
|
ums* at uhidev? reportid ?
|
||||||
#wsmouse* at ums? mux 0
|
wsmouse* at ums? mux 0
|
||||||
|
|
||||||
# USB eGalax touch-panel
|
# USB Keyboards
|
||||||
#uep* at uhub? port ?
|
ukbd* at uhidev? reportid ?
|
||||||
#wsmouse* at uep? mux 0
|
wskbd* at ukbd? console ? mux 1
|
||||||
|
|
||||||
# USB Keyboards
|
|
||||||
#ukbd* at uhidev? reportid ?
|
|
||||||
#wskbd* at ukbd? console ? mux 1
|
|
||||||
|
|
||||||
# USB serial adapter
|
|
||||||
#ucycom* at uhidev? reportid ?
|
|
||||||
|
|
||||||
# USB Generic HID devices
|
|
||||||
#uhid* at uhidev? reportid ?
|
|
||||||
|
|
||||||
# USB Printer
|
|
||||||
#ulpt* at uhub? port ? configuration ? interface ?
|
|
||||||
|
|
||||||
# USB Modem
|
|
||||||
#umodem* at uhub? port ? configuration ?
|
|
||||||
#ucom* at umodem?
|
|
||||||
|
|
||||||
# Huawei E220 3G/HSDPA modem
|
|
||||||
#uhmodem* at uhub? port ? configuration ? interface ?
|
|
||||||
#ucom* at uhmodem? portno ?
|
|
||||||
|
|
||||||
# USB Mass Storage
|
# USB Mass Storage
|
||||||
#umass* at uhub? port ? configuration ? interface ?
|
umass* at uhub? port ? configuration ? interface ?
|
||||||
#wd* at umass?
|
#wd* at umass?
|
||||||
|
|
||||||
# USB audio
|
# SCSI bus support
|
||||||
#uaudio* at uhub? port ? configuration ?
|
scsibus* at scsi?
|
||||||
|
|
||||||
# USB MIDI
|
# SCSI devices
|
||||||
#umidi* at uhub? port ? configuration ?
|
sd* at scsibus? target ? lun ? # SCSI disk drives
|
||||||
|
|
||||||
# USB IrDA
|
|
||||||
# USB-IrDA bridge spec
|
|
||||||
#uirda* at uhub? port ? configuration ? interface ?
|
|
||||||
#irframe* at uirda?
|
|
||||||
|
|
||||||
#stuirda* at uhub? port ? configuration ? interface ?
|
|
||||||
#irframe* at stuirda?
|
|
||||||
|
|
||||||
# SigmaTel STIr4200 USB/IrDA Bridge
|
|
||||||
#ustir* at uhub? port ?
|
|
||||||
#irframe* at ustir?
|
|
||||||
|
|
||||||
# USB Ethernet adapters
|
|
||||||
#aue* at uhub? port ? # ADMtek AN986 Pegasus based adapters
|
|
||||||
#axe* at uhub? port ? # ASIX AX88172 based adapters
|
|
||||||
#cdce* at uhub? port ? # CDC, Ethernet Networking Control Model
|
|
||||||
#cue* at uhub? port ? # CATC USB-EL1201A based adapters
|
|
||||||
#kue* at uhub? port ? # Kawasaki LSI KL5KUSB101B based adapters
|
|
||||||
#udav* at uhub? port ? # Davicom DM9601 based adapters
|
|
||||||
#url* at uhub? port ? # Realtek RTL8150L based adapters
|
|
||||||
|
|
||||||
# USB 802.11 adapters
|
|
||||||
#atu* at uhub? port ? # Atmel AT76C50XX based adapters
|
|
||||||
#ral* at uhub? port ? # Ralink Technology RT25x0 802.11a/b/g
|
|
||||||
#rum* at uhub? port ? # Ralink Technology RT2501/RT2601 802.11a/b/g
|
|
||||||
#zyd* at uhub? port ? # Zydas ZD1211
|
|
||||||
|
|
||||||
# Prolific PL2301/PL2302 host-to-host adapter
|
|
||||||
#upl* at uhub? port ?
|
|
||||||
|
|
||||||
# Serial adapters
|
|
||||||
#ubsa* at uhub? port ? # Belkin serial adapter
|
|
||||||
#ucom* at ubsa? portno ?
|
|
||||||
|
|
||||||
#uchcom* at uhub? port ? # WinChipHead CH341/CH340 serial adapter
|
|
||||||
#ucom* at uchcom? portno ?
|
|
||||||
|
|
||||||
#uftdi* at uhub? port ? # FTDI FT8U100AX serial adapter
|
|
||||||
#ucom* at uftdi? portno ?
|
|
||||||
|
|
||||||
#uipaq* at uhub? port ? # iPAQ PDAs
|
|
||||||
#ucom* at uipaq? portno ?
|
|
||||||
|
|
||||||
#umct* at uhub? port ? # MCT USB-RS232 serial adapter
|
|
||||||
#ucom* at umct? portno ?
|
|
||||||
|
|
||||||
#uplcom* at uhub? port ? # I/O DATA USB-RSAQ2 serial adapter
|
|
||||||
#ucom* at uplcom? portno ?
|
|
||||||
|
|
||||||
#uslsa* at uhub? port ? # Silicon Labs USB-RS232 serial adapter
|
|
||||||
#ucom* at uslsa? portno ?
|
|
||||||
|
|
||||||
#uvscom* at uhub? port ? # SUNTAC Slipper U VS-10U serial adapter
|
|
||||||
#ucom* at uvscom? portno ?
|
|
||||||
|
|
||||||
# Diamond Multimedia Rio 500
|
|
||||||
#urio* at uhub? port ?
|
|
||||||
|
|
||||||
# USB Handspring Visor
|
|
||||||
#uvisor* at uhub? port ?
|
|
||||||
#ucom* at uvisor?
|
|
||||||
|
|
||||||
# Kyocera AIR-EDGE PHONE
|
|
||||||
#ukyopon* at uhub? port ?
|
|
||||||
#ucom* at ukyopon? portno ?
|
|
||||||
|
|
||||||
# USB scanners
|
|
||||||
#uscanner* at uhub? port ?
|
|
||||||
|
|
||||||
# USB scanners that use SCSI emulation, e.g., HP5300
|
|
||||||
#usscanner* at uhub? port ?
|
|
||||||
|
|
||||||
# Topfield TF5000PVR range of DVB recorders
|
|
||||||
#utoppy* at uhub? port ?
|
|
||||||
|
|
||||||
# Y@P firmware loader
|
|
||||||
#uyap* at uhub? port ?
|
|
||||||
|
|
||||||
# D-Link DSB-R100 USB radio
|
|
||||||
#udsbr* at uhub? port ?
|
|
||||||
#radio* at udsbr?
|
|
||||||
|
|
||||||
# USB Generic driver
|
|
||||||
#ugen* at uhub? port ?
|
|
||||||
# On ugen bulk endpoints, perform read-ahead and write-behind.
|
|
||||||
#options UGEN_BULK_RA_WB
|
|
||||||
|
|
||||||
# USB 3G datacards
|
|
||||||
#u3g* at uhub? port ?
|
|
||||||
#ucom* at u3g?
|
|
||||||
|
|
||||||
# USB generic serial port (e.g., data over cellular)
|
|
||||||
#ugensa* at uhub? port ?
|
|
||||||
#ucom* at ugensa?
|
|
||||||
|
|
||||||
# Bluetooth Controller and Device support
|
# Bluetooth Controller and Device support
|
||||||
|
|
||||||
# Bluetooth PCMCIA Controllers
|
# Bluetooth PCMCIA Controllers
|
||||||
#bt3c* at pcmcia? function ? # 3Com 3CRWB6096-A
|
|
||||||
#btbc* at pcmcia? function ? # AnyCom BlueCard LSE041/039/139
|
#btbc* at pcmcia? function ? # AnyCom BlueCard LSE041/039/139
|
||||||
|
|
||||||
# Bluetooth SDIO Controllers
|
|
||||||
#sbt* at sdmmc?
|
|
||||||
|
|
||||||
# Bluetooth USB Controllers
|
# Bluetooth USB Controllers
|
||||||
#ubt* at uhub? port ?
|
#ubt* at uhub? port ?
|
||||||
|
|
||||||
# Bluetooth Device Hub
|
# Bluetooth Device Hub
|
||||||
#bthub* at bcsp?
|
bthub* at bcsp?
|
||||||
#bthub* at bt3c?
|
|
||||||
#bthub* at btbc?
|
#bthub* at btbc?
|
||||||
bthub* at btuart?
|
bthub* at btuart?
|
||||||
#bthub* at sbt?
|
|
||||||
#bthub* at ubt?
|
#bthub* at ubt?
|
||||||
|
|
||||||
# Bluetooth HID support
|
# Bluetooth HID support
|
||||||
#bthidev* at bthub?
|
bthidev* at bthub?
|
||||||
|
|
||||||
# Bluetooth Mouse
|
# Bluetooth Mouse
|
||||||
#btms* at bthidev? reportid ?
|
btms* at bthidev? reportid ?
|
||||||
#wsmouse* at btms? mux 0
|
wsmouse* at btms? mux 0
|
||||||
|
|
||||||
# Bluetooth Keyboard
|
# Bluetooth Keyboard
|
||||||
#btkbd* at bthidev? reportid ?
|
btkbd* at bthidev? reportid ?
|
||||||
#wskbd* at btkbd? console ? mux 1
|
wskbd* at btkbd? console ? mux 1
|
||||||
|
|
||||||
# Bluetooth Audio support
|
# Bluetooth Audio support
|
||||||
#btsco* at bthub?
|
btsco* at bthub?
|
||||||
|
|
||||||
# Pseudo-Devices
|
# Pseudo-Devices
|
||||||
|
|
||||||
|
@ -456,7 +349,7 @@ pseudo-device cgd 4 # cryptographic disk devices
|
||||||
#options RF_INCLUDE_PARITY_DECLUSTERING_DS=1
|
#options RF_INCLUDE_PARITY_DECLUSTERING_DS=1
|
||||||
#pseudo-device fss 4 # file system snapshot device
|
#pseudo-device fss 4 # file system snapshot device
|
||||||
|
|
||||||
pseudo-device md 1 # memory disk device (ramdisk)
|
#pseudo-device md 1 # memory disk device (ramdisk)
|
||||||
pseudo-device vnd # disk-like interface to files
|
pseudo-device vnd # disk-like interface to files
|
||||||
options VND_COMPRESSION # compressed vnd(4)
|
options VND_COMPRESSION # compressed vnd(4)
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
# $NetBSD: GUMSTIX_INSTALL,v 1.2 2007/02/19 05:36:13 briggs Exp $
|
# $NetBSD: GUMSTIX_INSTALL,v 1.3 2009/08/09 07:10:13 kiyohara Exp $
|
||||||
#
|
#
|
||||||
# GUMSTIX_INSTALL -- GUMSTIX kernel with installation-sized
|
# GUMSTIX_INSTALL -- GUMSTIX kernel with installation-sized
|
||||||
# ramdisk
|
# ramdisk
|
||||||
#
|
#
|
||||||
|
|
||||||
include "arch/evbarm/conf/GUMSTIX"
|
include "arch/evbarm/conf/GUMSTIX"
|
||||||
no pseudo-device md
|
|
||||||
include "arch/evbarm/conf/INSTALL"
|
include "arch/evbarm/conf/INSTALL"
|
||||||
|
|
||||||
options BOOTHOWTO=RB_SINGLE
|
options BOOTHOWTO=RB_SINGLE
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# $NetBSD: files.gumstix,v 1.13 2009/04/21 03:00:29 nonaka Exp $
|
# $NetBSD: files.gumstix,v 1.14 2009/08/09 07:10:13 kiyohara Exp $
|
||||||
#
|
#
|
||||||
# Gumstix. Inc. Gumstix boards configuration info
|
# Gumstix. Inc. Gumstix boards configuration info
|
||||||
#
|
#
|
||||||
|
@ -20,8 +20,8 @@ attach sm at gxio with sm_gxio
|
||||||
file arch/evbarm/gumstix/if_sm_gxio.c sm_gxio
|
file arch/evbarm/gumstix/if_sm_gxio.c sm_gxio
|
||||||
|
|
||||||
# PCMCIA/CF socket
|
# PCMCIA/CF socket
|
||||||
attach pxapcic at pxaip with pxapcic_gxpcic
|
attach pxapcic at pxaip with gxpcic
|
||||||
file arch/evbarm/gumstix/gxpcic.c pxapcic_gxpcic
|
file arch/evbarm/gumstix/gxpcic.c gxpcic
|
||||||
|
|
||||||
# Inter-Integrated Circuit controller
|
# Inter-Integrated Circuit controller
|
||||||
device gxiic: pxaiic, i2cbus
|
device gxiic: pxaiic, i2cbus
|
||||||
|
@ -33,3 +33,11 @@ include "dev/sdmmc/files.sdmmc"
|
||||||
# MMC/SD controller
|
# MMC/SD controller
|
||||||
attach pxamci at pxaip with gxmci
|
attach pxamci at pxaip with gxmci
|
||||||
file arch/evbarm/gumstix/gxmci.c gxmci
|
file arch/evbarm/gumstix/gxmci.c gxmci
|
||||||
|
|
||||||
|
# SMSC LAN9118
|
||||||
|
attach smsh at gxio with smsh_gxio
|
||||||
|
file arch/evbarm/gumstix/if_smsh_gxio.c smsh_gxio
|
||||||
|
|
||||||
|
# LCD frame buffer
|
||||||
|
attach lcd at pxaip with gxlcd
|
||||||
|
file arch/evbarm/gumstix/gxlcd.c gxlcd
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: gumstix_machdep.c,v 1.14 2009/03/18 10:22:27 cegger Exp $ */
|
/* $NetBSD: gumstix_machdep.c,v 1.15 2009/08/09 07:10:13 kiyohara Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2005, 2006, 2007 WIDE Project and SOUM Corporation.
|
* Copyright (C) 2005, 2006, 2007 WIDE Project and SOUM Corporation.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -259,6 +259,7 @@ struct user *proc0paddr;
|
||||||
/* Prototypes */
|
/* Prototypes */
|
||||||
static void read_system_serial(void);
|
static void read_system_serial(void);
|
||||||
static void process_kernel_args(int, char *[]);
|
static void process_kernel_args(int, char *[]);
|
||||||
|
static void process_kernel_args_line(char *);
|
||||||
#ifdef KGDB
|
#ifdef KGDB
|
||||||
static void kgdb_port_init(void);
|
static void kgdb_port_init(void);
|
||||||
#endif
|
#endif
|
||||||
|
@ -271,6 +272,8 @@ bs_protos(bs_notimpl);
|
||||||
#include <dev/ic/comvar.h>
|
#include <dev/ic/comvar.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "lcd.h"
|
||||||
|
|
||||||
#ifndef CONSPEED
|
#ifndef CONSPEED
|
||||||
#define CONSPEED B115200 /* It's a setting of the default of u-boot */
|
#define CONSPEED B115200 /* It's a setting of the default of u-boot */
|
||||||
#endif
|
#endif
|
||||||
|
@ -423,6 +426,12 @@ static const struct pmap_devmap gumstix_devmap[] = {
|
||||||
_S(4 * COM_NPORTS),
|
_S(4 * COM_NPORTS),
|
||||||
VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE,
|
VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
GUMSTIX_LCDC_VBASE,
|
||||||
|
_A(PXA2X0_LCDC_BASE),
|
||||||
|
_S(4 * COM_NPORTS),
|
||||||
|
VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE,
|
||||||
|
},
|
||||||
{0, 0, 0, 0, 0}
|
{0, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -448,7 +457,8 @@ initarm(void *arg)
|
||||||
{
|
{
|
||||||
extern vaddr_t xscale_cache_clean_addr;
|
extern vaddr_t xscale_cache_clean_addr;
|
||||||
extern uint32_t *u_boot_args[];
|
extern uint32_t *u_boot_args[];
|
||||||
enum { r3 = 0, r4 = 1, r5 = 2, r6 = 3 }; /* args from u-boot */
|
extern uint32_t ram_size;
|
||||||
|
enum { r0 = 0, r1 = 1, r2 = 2, r3 = 3 }; /* args from u-boot */
|
||||||
int loop;
|
int loop;
|
||||||
int loop1;
|
int loop1;
|
||||||
u_int l1pagetable;
|
u_int l1pagetable;
|
||||||
|
@ -506,10 +516,20 @@ initarm(void *arg)
|
||||||
* Examine the boot args string for options we need to know about
|
* Examine the boot args string for options we need to know about
|
||||||
* now.
|
* now.
|
||||||
*/
|
*/
|
||||||
process_kernel_args((int)u_boot_args[r6], (char **)u_boot_args[r5]);
|
#define SDRAM_START 0xa0000000UL
|
||||||
|
if (((uint32_t)u_boot_args[r0] & 0xf0000000) != SDRAM_START)
|
||||||
|
/* Maybe r0 is 'argc'. We are booted by command 'go'. */
|
||||||
|
process_kernel_args((int)u_boot_args[r0],
|
||||||
|
(char **)u_boot_args[r1]);
|
||||||
|
else
|
||||||
|
/*
|
||||||
|
* Maybe r3 is 'boot args string' of 'bootm'. This string is
|
||||||
|
* linely.
|
||||||
|
*/
|
||||||
|
process_kernel_args_line((char *)u_boot_args[r3]);
|
||||||
|
|
||||||
memstart = 0xa0000000UL;
|
memstart = SDRAM_START;
|
||||||
memsize = 0x04000000UL; /* 64MB */
|
memsize = ram_size;
|
||||||
|
|
||||||
#ifdef VERBOSE_INIT_ARM
|
#ifdef VERBOSE_INIT_ARM
|
||||||
printf("initarm: Configuring system ...\n");
|
printf("initarm: Configuring system ...\n");
|
||||||
|
@ -920,21 +940,14 @@ read_system_serial(void)
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char busheader_name[] = "busheader=";
|
||||||
static void
|
static void
|
||||||
process_kernel_args(int argc, char *argv[])
|
process_kernel_args(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
static const char busheader_name[] = "busheader=";
|
|
||||||
int gxio_configured = 0, i, j;
|
int gxio_configured = 0, i, j;
|
||||||
|
|
||||||
boothowto = 0;
|
boothowto = 0;
|
||||||
|
|
||||||
/*
|
|
||||||
* XXXXX: The value of argc is wrong. The number of arguments is
|
|
||||||
* corrected in the do_go() of u-boot. However, it is not actually
|
|
||||||
* corrected.
|
|
||||||
*/
|
|
||||||
argc --;
|
|
||||||
|
|
||||||
for (i = 1, j = 0; i < argc; i++) {
|
for (i = 1, j = 0; i < argc; i++) {
|
||||||
if (!strncmp(argv[i], busheader_name, strlen(busheader_name))) {
|
if (!strncmp(argv[i], busheader_name, strlen(busheader_name))) {
|
||||||
/* configure for GPIOs of busheader side */
|
/* configure for GPIOs of busheader side */
|
||||||
|
@ -959,6 +972,34 @@ process_kernel_args(int argc, char *argv[])
|
||||||
gxio_config_expansion(NULL);
|
gxio_config_expansion(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
process_kernel_args_line(char *args)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
char expansion[256], *p, c;
|
||||||
|
|
||||||
|
boothowto = 0;
|
||||||
|
|
||||||
|
strncpy(bootargs, args, sizeof(bootargs));
|
||||||
|
p = strstr(bootargs, busheader_name);
|
||||||
|
if (p == NULL)
|
||||||
|
gxio_config_expansion(NULL);
|
||||||
|
else {
|
||||||
|
i = 0;
|
||||||
|
do {
|
||||||
|
c = *(p + strlen(busheader_name) + i);
|
||||||
|
if (c == ' ')
|
||||||
|
c = '\0';
|
||||||
|
expansion[i++] = c;
|
||||||
|
} while (c != '\0');
|
||||||
|
gxio_config_expansion(expansion);
|
||||||
|
strcpy(p, p + i);
|
||||||
|
}
|
||||||
|
boot_args = bootargs;
|
||||||
|
|
||||||
|
parse_mi_bootargs(boot_args);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef KGDB
|
#ifdef KGDB
|
||||||
#ifndef KGDB_DEVNAME
|
#ifndef KGDB_DEVNAME
|
||||||
#define KGDB_DEVNAME "ffuart"
|
#define KGDB_DEVNAME "ffuart"
|
||||||
|
@ -1060,6 +1101,13 @@ consinit(void)
|
||||||
|
|
||||||
#endif /* NCOM */
|
#endif /* NCOM */
|
||||||
|
|
||||||
|
#if NLCD > 0
|
||||||
|
{
|
||||||
|
extern void gxlcd_cnattach(void);
|
||||||
|
|
||||||
|
gxlcd_cnattach();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef KGDB
|
#ifdef KGDB
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: gumstix_start.S,v 1.5 2007/10/17 19:54:12 garbled Exp $ */
|
/* $NetBSD: gumstix_start.S,v 1.6 2009/08/09 07:10:13 kiyohara Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2005, 2006 WIDE Project and SOUM Corporation.
|
* Copyright (C) 2005, 2006 WIDE Project and SOUM Corporation.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -81,7 +81,7 @@
|
||||||
mrc p15, 0, tmp, c2, c0, 0 /* arbitrary read of CP15 */ ;\
|
mrc p15, 0, tmp, c2, c0, 0 /* arbitrary read of CP15 */ ;\
|
||||||
mov tmp, tmp /* wait for it to complete */ ;\
|
mov tmp, tmp /* wait for it to complete */ ;\
|
||||||
CPWAIT_BRANCH /* branch to next insn */
|
CPWAIT_BRANCH /* branch to next insn */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Kernel start routine for GUMSTIX
|
* Kernel start routine for GUMSTIX
|
||||||
* this code is excuted at the very first after the kernel is loaded
|
* this code is excuted at the very first after the kernel is loaded
|
||||||
|
@ -97,30 +97,53 @@ _C_LABEL(gumstix_start):
|
||||||
* in VA 0xc0200000..
|
* in VA 0xc0200000..
|
||||||
*/
|
*/
|
||||||
/* save u-boot's args */
|
/* save u-boot's args */
|
||||||
adr r0, u_boot_args
|
adr r4, u_boot_args
|
||||||
nop
|
nop
|
||||||
nop
|
nop
|
||||||
nop
|
nop
|
||||||
stmia r0!, {r3, r4, r5, r6}
|
stmia r4!, {r0, r1, r2, r3}
|
||||||
nop
|
nop
|
||||||
nop
|
nop
|
||||||
nop
|
nop
|
||||||
|
|
||||||
|
/* Calculate RAM size */
|
||||||
|
adr r4, ram_size
|
||||||
|
ldr r0, [r4]
|
||||||
|
0:
|
||||||
|
add r3, r4, r0
|
||||||
|
ldr r1, [r3]
|
||||||
|
cmp r0, r1
|
||||||
|
beq 2f
|
||||||
|
1:
|
||||||
|
add r0, r0, r0 /* r0 <<= 1 */
|
||||||
|
str r0, [r4]
|
||||||
|
b 0b
|
||||||
|
2:
|
||||||
|
mvn r1, r1 /* r1 ^= 0xffffffff */
|
||||||
|
str r1, [r3]
|
||||||
|
ldr r2, [r4]
|
||||||
|
cmp r1, r2
|
||||||
|
beq 3f
|
||||||
|
str r0, [r3] /* restore */
|
||||||
|
b 1b
|
||||||
|
3:
|
||||||
|
str r0, [r4]
|
||||||
|
|
||||||
/* build page table from scratch */
|
/* build page table from scratch */
|
||||||
ldr r0, Lstartup_pagetable /* pagetable */
|
ldr r0, Lstartup_pagetable /* pagetable */
|
||||||
adr r4, mmu_init_table
|
adr r4, mmu_init_table
|
||||||
b 3f
|
b 5f
|
||||||
|
|
||||||
2:
|
4:
|
||||||
str r3, [r0, r2]
|
str r3, [r0, r2]
|
||||||
add r2, r2, #4
|
add r2, r2, #4
|
||||||
add r3, r3, #(L1_S_SIZE)
|
add r3, r3, #(L1_S_SIZE)
|
||||||
adds r1, r1, #-1
|
adds r1, r1, #-1
|
||||||
bhi 2b
|
bhi 4b
|
||||||
3:
|
5:
|
||||||
ldmia r4!, {r1, r2, r3} /* # of sections, PA|attr, VA */
|
ldmia r4!, {r1, r2, r3} /* # of sections, PA|attr, VA */
|
||||||
cmp r1, #0
|
cmp r1, #0
|
||||||
bne 2b
|
bne 4b
|
||||||
|
|
||||||
mcr p15, 0, r0, c2, c0, 0 /* Set TTB */
|
mcr p15, 0, r0, c2, c0, 0 /* Set TTB */
|
||||||
mcr p15, 0, r0, c8, c7, 0 /* Flush TLB */
|
mcr p15, 0, r0, c8, c7, 0 /* Flush TLB */
|
||||||
|
@ -151,7 +174,11 @@ Lstartup_pagetable:
|
||||||
|
|
||||||
.globl _C_LABEL(u_boot_args)
|
.globl _C_LABEL(u_boot_args)
|
||||||
u_boot_args:
|
u_boot_args:
|
||||||
.space 16 /* r3, r4, r5, r6 */
|
.space 16 /* r0, r1, r2, r3 */
|
||||||
|
|
||||||
|
.globl _C_LABEL(ram_size)
|
||||||
|
ram_size:
|
||||||
|
.word 0x04000000 /* 64Mbyte */
|
||||||
|
|
||||||
|
|
||||||
#define MMU_INIT(va,pa,n_sec,attr) \
|
#define MMU_INIT(va,pa,n_sec,attr) \
|
||||||
|
@ -159,7 +186,7 @@ u_boot_args:
|
||||||
.word 4 * ((va) >> L1_S_SHIFT) ; \
|
.word 4 * ((va) >> L1_S_SHIFT) ; \
|
||||||
.word (pa) | (attr) ;
|
.word (pa) | (attr) ;
|
||||||
|
|
||||||
mmu_init_table:
|
mmu_init_table:
|
||||||
/* fill all table VA==PA */
|
/* fill all table VA==PA */
|
||||||
MMU_INIT(0x00000000, 0x00000000,
|
MMU_INIT(0x00000000, 0x00000000,
|
||||||
1 << (32 - L1_S_SHIFT), L1_TYPE_S | L1_S_AP(AP_KRW))
|
1 << (32 - L1_S_SHIFT), L1_TYPE_S | L1_S_AP(AP_KRW))
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: gumstixreg.h,v 1.3 2007/01/18 10:06:47 kiyohara Exp $ */
|
/* $NetBSD: gumstixreg.h,v 1.4 2009/08/09 07:10:13 kiyohara Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2005, 2006 WIDE Project and SOUM Corporation.
|
* Copyright (C) 2005, 2006 WIDE Project and SOUM Corporation.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -48,6 +48,7 @@
|
||||||
#define GUMSTIX_STUART_VBASE 0xfd400000
|
#define GUMSTIX_STUART_VBASE 0xfd400000
|
||||||
#define GUMSTIX_BTUART_VBASE 0xfd500000
|
#define GUMSTIX_BTUART_VBASE 0xfd500000
|
||||||
#define GUMSTIX_HWUART_VBASE 0xfd600000
|
#define GUMSTIX_HWUART_VBASE 0xfd600000
|
||||||
|
#define GUMSTIX_LCDC_VBASE 0xfd700000
|
||||||
|
|
||||||
|
|
||||||
#define ioreg_read(a) (*(volatile unsigned *)(a))
|
#define ioreg_read(a) (*(volatile unsigned *)(a))
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: gumstixvar.h,v 1.3 2008/05/11 08:23:17 kiyohara Exp $ */
|
/* $NetBSD: gumstixvar.h,v 1.4 2009/08/09 07:10:13 kiyohara Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2005, 2006 WIDE Project and SOUM Corporation.
|
* Copyright (C) 2005, 2006 WIDE Project and SOUM Corporation.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -68,4 +68,16 @@ struct gxio_attach_args {
|
||||||
#define gxio_intr_disestablish(sc, cookie) \
|
#define gxio_intr_disestablish(sc, cookie) \
|
||||||
pxa2x0_gpio_intr_disestablish((cookie))
|
pxa2x0_gpio_intr_disestablish((cookie))
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* gxpcic
|
||||||
|
*/
|
||||||
|
struct gxpcic_slot_irqs {
|
||||||
|
int valid;
|
||||||
|
int cd; /* PCDn */
|
||||||
|
int prdy; /* PRDYn/~IRQn */
|
||||||
|
};
|
||||||
|
extern struct gxpcic_slot_irqs gxpcic_slot_irqs[2];
|
||||||
|
extern int gxpcic_gpio_reset;
|
||||||
|
|
||||||
#endif /* _EVBARM_GUMSTIXVAR_H_ */
|
#endif /* _EVBARM_GUMSTIXVAR_H_ */
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: gxio.c,v 1.9 2009/03/18 10:22:27 cegger Exp $ */
|
/* $NetBSD: gxio.c,v 1.10 2009/08/09 07:10:13 kiyohara Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2005, 2006, 2007 WIDE Project and SOUM Corporation.
|
* Copyright (C) 2005, 2006, 2007 WIDE Project and SOUM Corporation.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -31,13 +31,14 @@
|
||||||
* POSSIBILITY OF SUCH DAMAGE.
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
__KERNEL_RCSID(0, "$NetBSD: gxio.c,v 1.9 2009/03/18 10:22:27 cegger Exp $");
|
__KERNEL_RCSID(0, "$NetBSD: gxio.c,v 1.10 2009/08/09 07:10:13 kiyohara Exp $");
|
||||||
|
|
||||||
#include "opt_gxio.h"
|
#include "opt_gxio.h"
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <sys/device.h>
|
#include <sys/device.h>
|
||||||
#include <sys/errno.h>
|
#include <sys/errno.h>
|
||||||
|
#include <sys/kernel.h>
|
||||||
|
|
||||||
#include <sys/systm.h>
|
#include <sys/systm.h>
|
||||||
|
|
||||||
|
@ -57,9 +58,9 @@ struct gxioconf {
|
||||||
void (*config)(void);
|
void (*config)(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
static int gxiomatch(device_t, struct cfdata *, void *);
|
static int gxiomatch(device_t, cfdata_t, void *);
|
||||||
static void gxioattach(device_t, device_t, void *);
|
static void gxioattach(device_t, device_t, void *);
|
||||||
static int gxiosearch(device_t, struct cfdata *, const int *, void *);
|
static int gxiosearch(device_t, cfdata_t, const int *, void *);
|
||||||
static int gxioprint(void *, const char *);
|
static int gxioprint(void *, const char *);
|
||||||
|
|
||||||
void gxio_config_pin(void);
|
void gxio_config_pin(void);
|
||||||
|
@ -71,7 +72,10 @@ static void etherstix_config(void);
|
||||||
static void netcf_config(void);
|
static void netcf_config(void);
|
||||||
static void netduommc_config(void);
|
static void netduommc_config(void);
|
||||||
static void netduo_config(void);
|
static void netduo_config(void);
|
||||||
|
static void netmicrosd_config(void);
|
||||||
|
static void netwifimicrosd_config(void);
|
||||||
static void netmmc_config(void);
|
static void netmmc_config(void);
|
||||||
|
static void wifistix_config(void);
|
||||||
static void wifistix_cf_config(void);
|
static void wifistix_cf_config(void);
|
||||||
|
|
||||||
CFATTACH_DECL_NEW(
|
CFATTACH_DECL_NEW(
|
||||||
|
@ -79,24 +83,29 @@ CFATTACH_DECL_NEW(
|
||||||
|
|
||||||
char busheader[MAX_BOOT_STRING];
|
char busheader[MAX_BOOT_STRING];
|
||||||
|
|
||||||
static struct pxa2x0_gpioconf boarddep_gpioconf[] = {
|
#if defined(CPU_XSCALE_PXA250)
|
||||||
|
static struct pxa2x0_gpioconf pxa255dep_gpioconf[] = {
|
||||||
/* Bluetooth module configuration */
|
/* Bluetooth module configuration */
|
||||||
{ 7, GPIO_OUT | GPIO_SET }, /* power on */
|
{ 7, GPIO_OUT | GPIO_SET }, /* power on */
|
||||||
{ 12, GPIO_ALT_FN_1_OUT }, /* 32kHz out. required by SingleStone */
|
{ 12, GPIO_ALT_FN_1_OUT }, /* 32kHz out. required by SingleStone */
|
||||||
|
|
||||||
/* AC97 configuration */
|
/* AC97 configuration */
|
||||||
{ 29, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* SDATA_IN0 */
|
{ 29, GPIO_ALT_FN_1_IN }, /* SDATA_IN0 */
|
||||||
|
|
||||||
|
/* FFUART configuration */
|
||||||
|
{ 35, GPIO_ALT_FN_1_IN }, /* CTS */
|
||||||
|
{ 41, GPIO_ALT_FN_2_OUT }, /* RTS */
|
||||||
|
|
||||||
#ifndef GXIO_BLUETOOTH_ON_HWUART
|
#ifndef GXIO_BLUETOOTH_ON_HWUART
|
||||||
/* BTUART configuration */
|
/* BTUART configuration */
|
||||||
{ 44, GPIO_ALT_FN_1_IN }, /* BTCST */
|
{ 44, GPIO_ALT_FN_1_IN }, /* BTCTS */
|
||||||
{ 45, GPIO_ALT_FN_2_OUT }, /* BTRST */
|
{ 45, GPIO_ALT_FN_2_OUT }, /* BTRTS */
|
||||||
#else
|
#else
|
||||||
/* HWUART configuration */
|
/* HWUART configuration */
|
||||||
{ 42, GPIO_ALT_FN_3_IN }, /* HWRXD */
|
{ 42, GPIO_ALT_FN_3_IN }, /* HWRXD */
|
||||||
{ 43, GPIO_ALT_FN_3_OUT }, /* HWTXD */
|
{ 43, GPIO_ALT_FN_3_OUT }, /* HWTXD */
|
||||||
{ 44, GPIO_ALT_FN_3_IN }, /* HWCST */
|
{ 44, GPIO_ALT_FN_3_IN }, /* HWCTS */
|
||||||
{ 45, GPIO_ALT_FN_3_OUT }, /* HWRST */
|
{ 45, GPIO_ALT_FN_3_OUT }, /* HWRTS */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef GXIO_BLUETOOTH_ON_HWUART
|
#ifndef GXIO_BLUETOOTH_ON_HWUART
|
||||||
|
@ -109,28 +118,65 @@ static struct pxa2x0_gpioconf boarddep_gpioconf[] = {
|
||||||
|
|
||||||
{ -1 }
|
{ -1 }
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
#if defined(CPU_XSCALE_PXA270)
|
||||||
|
static struct pxa2x0_gpioconf verdexdep_gpioconf[] = {
|
||||||
|
/* Bluetooth module configuration */
|
||||||
|
{ 9, GPIO_ALT_FN_3_OUT }, /* CHOUT<0> */
|
||||||
|
|
||||||
|
/* FFUART configuration */
|
||||||
|
{ 27, GPIO_ALT_FN_3_OUT }, /* FFRTS */
|
||||||
|
{ 34, GPIO_ALT_FN_1_IN }, /* FFRXD */
|
||||||
|
{ 39, GPIO_ALT_FN_2_OUT }, /* FFTXD */
|
||||||
|
{ 100, GPIO_ALT_FN_3_IN }, /* FFCTS */
|
||||||
|
|
||||||
|
/* BTUART configuration */
|
||||||
|
{ 42, GPIO_ALT_FN_1_IN }, /* BTRXD */
|
||||||
|
{ 43, GPIO_ALT_FN_2_OUT }, /* BTTXD */
|
||||||
|
{ 44, GPIO_ALT_FN_1_IN }, /* BTCTS */
|
||||||
|
{ 45, GPIO_ALT_FN_2_OUT }, /* BTRTS */
|
||||||
|
|
||||||
|
/* AC97 configuration */
|
||||||
|
{ 29, GPIO_ALT_FN_1_IN }, /* SDATA_IN0 */
|
||||||
|
|
||||||
|
{ -1 }
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
static const struct gxioconf busheader_conf[] = {
|
static const struct gxioconf busheader_conf[] = {
|
||||||
{ "basix", basix_config },
|
{ "basix", basix_config },
|
||||||
{ "cfstix", cfstix_config },
|
{ "cfstix", cfstix_config },
|
||||||
{ "etherstix", etherstix_config },
|
{ "etherstix", etherstix_config },
|
||||||
{ "netcf", netcf_config },
|
{ "netcf", netcf_config },
|
||||||
|
{ "netcf-vx", netcf_config },
|
||||||
{ "netduo-mmc", netduommc_config },
|
{ "netduo-mmc", netduommc_config },
|
||||||
{ "netduo", netduo_config },
|
{ "netduo", netduo_config },
|
||||||
|
{ "netmicrosd", netmicrosd_config },
|
||||||
|
{ "netmicrosd-vx", netmicrosd_config },
|
||||||
|
{ "netwifimicrosd", netwifimicrosd_config },
|
||||||
{ "netmmc", netmmc_config },
|
{ "netmmc", netmmc_config },
|
||||||
|
{ "netpro-vx", netwifimicrosd_config },
|
||||||
{ "wifistix-cf", wifistix_cf_config },
|
{ "wifistix-cf", wifistix_cf_config },
|
||||||
{ "wifistix", cfstix_config },
|
{ "wifistix", wifistix_config },
|
||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int gxpcic_gpio_reset;
|
||||||
|
struct gxpcic_slot_irqs gxpcic_slot_irqs[2] = { { 0, -1, -1 }, { 0, -1, -1 } };
|
||||||
|
|
||||||
|
|
||||||
/* ARGSUSED */
|
/* ARGSUSED */
|
||||||
static int
|
static int
|
||||||
gxiomatch(device_t parent, struct cfdata *match, void *aux)
|
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_tag_t iot = &pxa2x0_bs_tag;
|
||||||
bus_space_handle_t ioh;
|
bus_space_handle_t ioh;
|
||||||
|
|
||||||
|
if (strcmp(pxa->pxa_name, match->cf_name) != 0 ||
|
||||||
|
pxa->pxa_addr != PXAIPCF_ADDR_DEFAULT)
|
||||||
|
return 0;
|
||||||
|
|
||||||
if (bus_space_map(iot,
|
if (bus_space_map(iot,
|
||||||
PXA2X0_MEMCTL_BASE, PXA2X0_MEMCTL_SIZE, 0, &ioh))
|
PXA2X0_MEMCTL_BASE, PXA2X0_MEMCTL_SIZE, 0, &ioh))
|
||||||
return (0);
|
return (0);
|
||||||
|
@ -164,7 +210,7 @@ gxioattach(device_t parent, device_t self, void *aux)
|
||||||
|
|
||||||
/* ARGSUSED */
|
/* ARGSUSED */
|
||||||
static int
|
static int
|
||||||
gxiosearch(device_t parent, struct cfdata *cf, const int *ldesc, void *aux)
|
gxiosearch(device_t parent, cfdata_t cf, const int *ldesc, void *aux)
|
||||||
{
|
{
|
||||||
struct gxio_softc *sc = device_private(parent);
|
struct gxio_softc *sc = device_private(parent);
|
||||||
struct gxio_attach_args gxa;
|
struct gxio_attach_args gxa;
|
||||||
|
@ -200,6 +246,7 @@ gxioprint(void *aux, const char *name)
|
||||||
void
|
void
|
||||||
gxio_config_pin(void)
|
gxio_config_pin(void)
|
||||||
{
|
{
|
||||||
|
#if defined(CPU_XSCALE_PXA250)
|
||||||
struct pxa2x0_gpioconf *gumstix_gpioconf[] = {
|
struct pxa2x0_gpioconf *gumstix_gpioconf[] = {
|
||||||
pxa25x_com_ffuart_gpioconf,
|
pxa25x_com_ffuart_gpioconf,
|
||||||
pxa25x_com_stuart_gpioconf,
|
pxa25x_com_stuart_gpioconf,
|
||||||
|
@ -209,32 +256,52 @@ gxio_config_pin(void)
|
||||||
pxa25x_com_hwuart_gpioconf,
|
pxa25x_com_hwuart_gpioconf,
|
||||||
pxa25x_i2c_gpioconf,
|
pxa25x_i2c_gpioconf,
|
||||||
pxa25x_pxaacu_gpioconf,
|
pxa25x_pxaacu_gpioconf,
|
||||||
boarddep_gpioconf,
|
pxa255dep_gpioconf,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
#if defined(CPU_XSCALE_PXA270)
|
||||||
|
struct pxa2x0_gpioconf *verdex_gpioconf[] = {
|
||||||
|
pxa27x_com_ffuart_gpioconf,
|
||||||
|
pxa27x_com_stuart_gpioconf,
|
||||||
|
pxa27x_com_btuart_gpioconf,
|
||||||
|
pxa27x_i2c_gpioconf,
|
||||||
|
pxa27x_pxaacu_gpioconf,
|
||||||
|
pxa27x_pxamci_gpioconf,
|
||||||
|
pxa27x_ohci_gpioconf,
|
||||||
|
verdexdep_gpioconf,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
/* XXX: turn off for power of bluetooth module */
|
/* XXX: turn off for power of bluetooth module */
|
||||||
pxa2x0_gpio_set_function(7, GPIO_OUT | GPIO_CLR);
|
pxa2x0_gpio_set_function(7, GPIO_OUT | GPIO_CLR);
|
||||||
delay(100);
|
delay(100);
|
||||||
|
|
||||||
|
#if defined(CPU_XSCALE_PXA270) && defined(CPU_XSCALE_PXA250)
|
||||||
|
pxa2x0_gpio_config(
|
||||||
|
(CPU_IS_PXA250) ? gumstix_gpioconf : verdex_gpioconf);
|
||||||
|
#else
|
||||||
|
#if defined(CPU_XSCALE_PXA270)
|
||||||
|
pxa2x0_gpio_config(verdex_gpioconf);
|
||||||
|
#else
|
||||||
pxa2x0_gpio_config(gumstix_gpioconf);
|
pxa2x0_gpio_config(gumstix_gpioconf);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gxio_config_expansion(char *expansion)
|
gxio_config_expansion(char *expansion)
|
||||||
{
|
{
|
||||||
#ifdef GXIO_DEFAULT_EXPANSION
|
|
||||||
char default_expansion[] = GXIO_DEFAULT_EXPANSION;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (expansion == NULL) {
|
if (expansion == NULL) {
|
||||||
#ifndef GXIO_DEFAULT_EXPANSION
|
|
||||||
return;
|
|
||||||
#else
|
|
||||||
printf("not specified 'busheader=' in the boot args.\n");
|
printf("not specified 'busheader=' in the boot args.\n");
|
||||||
|
#ifdef GXIO_DEFAULT_EXPANSION
|
||||||
printf("configure default expansion (%s)\n",
|
printf("configure default expansion (%s)\n",
|
||||||
GXIO_DEFAULT_EXPANSION);
|
GXIO_DEFAULT_EXPANSION);
|
||||||
expansion = default_expansion;
|
expansion = GXIO_DEFAULT_EXPANSION;
|
||||||
|
#else
|
||||||
|
return;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
gxio_config_gpio(busheader_conf, expansion);
|
gxio_config_gpio(busheader_conf, expansion);
|
||||||
|
@ -275,14 +342,35 @@ static void
|
||||||
cfstix_config(void)
|
cfstix_config(void)
|
||||||
{
|
{
|
||||||
u_int gpio, npoe_fn;
|
u_int gpio, npoe_fn;
|
||||||
|
#if defined(CPU_XSCALE_PXA270) && defined(CPU_XSCALE_PXA250)
|
||||||
|
int bvd = (CPU_IS_PXA250) ? 4 : 111;
|
||||||
|
#else
|
||||||
|
#if defined(CPU_XSCALE_PXA270)
|
||||||
|
const int bvd = 111;
|
||||||
|
#else
|
||||||
|
const int bvd = 4;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (CPU_IS_PXA250) {
|
||||||
|
gxpcic_slot_irqs[0].valid = 1;
|
||||||
|
gxpcic_slot_irqs[0].cd = 11;
|
||||||
|
gxpcic_slot_irqs[0].prdy = 26;
|
||||||
|
gxpcic_gpio_reset = 8;
|
||||||
|
} else {
|
||||||
|
gxpcic_slot_irqs[0].valid = 1;
|
||||||
|
gxpcic_slot_irqs[0].cd = 104;
|
||||||
|
gxpcic_slot_irqs[0].prdy = 96;
|
||||||
|
gxpcic_gpio_reset = 97;
|
||||||
|
}
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
/* this configuration set by pxa2x0_pcic.c::pxapcic_attach_common() */
|
/* PCD/PRDY set by pxa2x0_pcic.c::pxapcic_attach_common() */
|
||||||
#else
|
#else
|
||||||
pxa2x0_gpio_set_function(11, GPIO_IN); /* PCD1 */
|
pxa2x0_gpio_set_function(11, GPIO_IN); /* PCD1 */
|
||||||
pxa2x0_gpio_set_function(26, GPIO_IN); /* PRDY1/~IRQ1 */
|
pxa2x0_gpio_set_function(26, GPIO_IN); /* PRDY1/~IRQ1 */
|
||||||
#endif
|
#endif
|
||||||
pxa2x0_gpio_set_function(4, GPIO_IN); /* BVD1/~STSCHG1 */
|
pxa2x0_gpio_set_function(bvd, GPIO_IN); /* BVD1/~STSCHG1 */
|
||||||
|
|
||||||
for (gpio = 48, npoe_fn = 0; gpio <= 53 ; gpio++)
|
for (gpio = 48, npoe_fn = 0; gpio <= 53 ; gpio++)
|
||||||
npoe_fn |= pxa2x0_gpio_get_function(gpio);
|
npoe_fn |= pxa2x0_gpio_get_function(gpio);
|
||||||
|
@ -292,9 +380,15 @@ cfstix_config(void)
|
||||||
pxa2x0_gpio_set_function(49, GPIO_ALT_FN_2_OUT); /* nPWE */
|
pxa2x0_gpio_set_function(49, GPIO_ALT_FN_2_OUT); /* nPWE */
|
||||||
pxa2x0_gpio_set_function(50, GPIO_ALT_FN_2_OUT); /* nPIOR */
|
pxa2x0_gpio_set_function(50, GPIO_ALT_FN_2_OUT); /* nPIOR */
|
||||||
pxa2x0_gpio_set_function(51, GPIO_ALT_FN_2_OUT); /* nPIOW */
|
pxa2x0_gpio_set_function(51, GPIO_ALT_FN_2_OUT); /* nPIOW */
|
||||||
pxa2x0_gpio_set_function(52, GPIO_ALT_FN_2_OUT); /* nPCE1 */
|
if (CPU_IS_PXA250) {
|
||||||
pxa2x0_gpio_set_function(53, GPIO_ALT_FN_2_OUT); /* nPCE2 */
|
pxa2x0_gpio_set_function(52, GPIO_ALT_FN_2_OUT); /* nPCE1 */
|
||||||
pxa2x0_gpio_set_function(54, GPIO_ALT_FN_2_OUT); /* pSKTSEL */
|
pxa2x0_gpio_set_function(53, GPIO_ALT_FN_2_OUT); /* nPCE2 */
|
||||||
|
pxa2x0_gpio_set_function(54, GPIO_ALT_FN_2_OUT); /* pSKTSEL */
|
||||||
|
} else {
|
||||||
|
pxa2x0_gpio_set_function(102, GPIO_ALT_FN_1_OUT); /* nPCE1 */
|
||||||
|
pxa2x0_gpio_set_function(105, GPIO_ALT_FN_1_OUT); /* nPCE2 */
|
||||||
|
pxa2x0_gpio_set_function(79, GPIO_ALT_FN_1_OUT); /* pSKTSEL */
|
||||||
|
}
|
||||||
pxa2x0_gpio_set_function(55, GPIO_ALT_FN_2_OUT); /* nPREG */
|
pxa2x0_gpio_set_function(55, GPIO_ALT_FN_2_OUT); /* nPREG */
|
||||||
pxa2x0_gpio_set_function(56, GPIO_ALT_FN_1_IN); /* nPWAIT */
|
pxa2x0_gpio_set_function(56, GPIO_ALT_FN_1_IN); /* nPWAIT */
|
||||||
pxa2x0_gpio_set_function(57, GPIO_ALT_FN_1_IN); /* nIOIS16 */
|
pxa2x0_gpio_set_function(57, GPIO_ALT_FN_1_IN); /* nIOIS16 */
|
||||||
|
@ -303,13 +397,32 @@ cfstix_config(void)
|
||||||
static void
|
static void
|
||||||
etherstix_config(void)
|
etherstix_config(void)
|
||||||
{
|
{
|
||||||
|
extern struct cfdata cfdata[];
|
||||||
|
#if defined(CPU_XSCALE_PXA270) && defined(CPU_XSCALE_PXA250)
|
||||||
|
int rst = (CPU_IS_PXA250) ? 80 : 32;
|
||||||
|
int irq = (CPU_IS_PXA250) ? 36 : 99;
|
||||||
|
#else
|
||||||
|
#if defined(CPU_XSCALE_PXA270)
|
||||||
|
const int rst = 32, irq = 99;
|
||||||
|
#else
|
||||||
|
const int rst = 80, irq = 36;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
int i;
|
||||||
|
|
||||||
pxa2x0_gpio_set_function(49, GPIO_ALT_FN_2_OUT); /* nPWE */
|
pxa2x0_gpio_set_function(49, GPIO_ALT_FN_2_OUT); /* nPWE */
|
||||||
pxa2x0_gpio_set_function(15, GPIO_ALT_FN_2_OUT); /* nCS 1 */
|
pxa2x0_gpio_set_function(15, GPIO_ALT_FN_2_OUT); /* nCS 1 */
|
||||||
pxa2x0_gpio_set_function(80, GPIO_OUT | GPIO_SET); /* RESET 1 */
|
pxa2x0_gpio_set_function(rst, GPIO_OUT | GPIO_SET); /* RESET 1 */
|
||||||
delay(1);
|
delay(1);
|
||||||
pxa2x0_gpio_set_function(80, GPIO_OUT | GPIO_CLR);
|
pxa2x0_gpio_set_function(rst, GPIO_OUT | GPIO_CLR);
|
||||||
delay(50000);
|
delay(50000);
|
||||||
|
|
||||||
|
for (i = 0; cfdata[i].cf_name != NULL; i++)
|
||||||
|
if (strcmp(cfdata[i].cf_name, "sm") == 0 &&
|
||||||
|
strcmp(cfdata[i].cf_atname, "sm_gxio") == 0 &&
|
||||||
|
cfdata[i].cf_loc[GXIOCF_ADDR] == 0x04000300 &&
|
||||||
|
cfdata[i].cf_loc[GXIOCF_GPIRQ] == GXIOCF_GPIRQ_DEFAULT)
|
||||||
|
cfdata[i].cf_loc[GXIOCF_GPIRQ] = irq;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -318,6 +431,12 @@ netcf_config(void)
|
||||||
|
|
||||||
etherstix_config();
|
etherstix_config();
|
||||||
cfstix_config();
|
cfstix_config();
|
||||||
|
if (CPU_IS_PXA270) {
|
||||||
|
/* Overwrite */
|
||||||
|
gxpcic_slot_irqs[0].cd = 104;
|
||||||
|
gxpcic_slot_irqs[0].prdy = 109;
|
||||||
|
gxpcic_gpio_reset = 110;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -341,6 +460,33 @@ netduo_config(void)
|
||||||
delay(50000);
|
delay(50000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
netmicrosd_config(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* MicroSD(mci) always configure on PXA270 */
|
||||||
|
|
||||||
|
pxa2x0_gpio_set_function(49, GPIO_ALT_FN_2_OUT); /* nPWE */
|
||||||
|
pxa2x0_gpio_set_function(15, GPIO_ALT_FN_2_OUT); /* nCS 1 */
|
||||||
|
pxa2x0_gpio_set_function(107, GPIO_OUT | GPIO_CLR); /* RESET 1 */
|
||||||
|
delay(hz / 2);
|
||||||
|
pxa2x0_gpio_set_function(107, GPIO_OUT | GPIO_SET);
|
||||||
|
delay(50000);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
netwifimicrosd_config(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
netmicrosd_config();
|
||||||
|
|
||||||
|
cfstix_config();
|
||||||
|
/* However use pxamci. */
|
||||||
|
pxa2x0_gpio_set_function(111, GPIO_CLR | GPIO_ALT_FN_1_IN);
|
||||||
|
/* XXXX: Power to Marvell 88W8385??? */
|
||||||
|
pxa2x0_gpio_set_function(80, GPIO_OUT | GPIO_SET);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
netmmc_config(void)
|
netmmc_config(void)
|
||||||
{
|
{
|
||||||
|
@ -349,10 +495,24 @@ netmmc_config(void)
|
||||||
basix_config();
|
basix_config();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
wifistix_config(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
cfstix_config();
|
||||||
|
|
||||||
|
/* XXXX: Power to Marvell 88W8385??? */
|
||||||
|
pxa2x0_gpio_set_function(80, GPIO_OUT | GPIO_SET);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
wifistix_cf_config(void)
|
wifistix_cf_config(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
gxpcic_slot_irqs[1].valid = 1;
|
||||||
|
gxpcic_slot_irqs[1].cd = 36;
|
||||||
|
gxpcic_slot_irqs[1].prdy = 27;
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
/* this configuration set by pxa2x0_pcic.c::pxapcic_attach_common() */
|
/* this configuration set by pxa2x0_pcic.c::pxapcic_attach_common() */
|
||||||
#else
|
#else
|
||||||
|
@ -362,4 +522,7 @@ wifistix_cf_config(void)
|
||||||
pxa2x0_gpio_set_function(18, GPIO_IN); /* BVD2/~STSCHG2 */
|
pxa2x0_gpio_set_function(18, GPIO_IN); /* BVD2/~STSCHG2 */
|
||||||
|
|
||||||
cfstix_config();
|
cfstix_config();
|
||||||
|
|
||||||
|
/* XXXX: Power to Marvell 88W8385??? */
|
||||||
|
pxa2x0_gpio_set_function(80, GPIO_OUT | GPIO_SET);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,217 @@
|
||||||
|
/* $NetBSD: gxlcd.c,v 1.1 2009/08/09 07:10:13 kiyohara Exp $ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2002, 2003 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. 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* LCD driver for Gumstix consoleLCD-vx and compatible.
|
||||||
|
* (based on the Intel Lubbock driver).
|
||||||
|
*
|
||||||
|
* Controlling LCD is almost completely done through PXA2X0's
|
||||||
|
* integrated LCD controller. Codes for it is arm/xscale/pxa2x0_lcd.c.
|
||||||
|
*
|
||||||
|
* Codes in this file provide platform specific things including:
|
||||||
|
* LCD on/off switch and backlight
|
||||||
|
* LCD panel geometry
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__KERNEL_RCSID(0, "$NetBSD: gxlcd.c,v 1.1 2009/08/09 07:10:13 kiyohara Exp $");
|
||||||
|
|
||||||
|
#include <sys/param.h>
|
||||||
|
#include <sys/systm.h>
|
||||||
|
#include <sys/conf.h>
|
||||||
|
#include <sys/uio.h>
|
||||||
|
#include <sys/malloc.h>
|
||||||
|
|
||||||
|
#include <dev/cons.h>
|
||||||
|
#include <dev/wscons/wsconsio.h>
|
||||||
|
#include <dev/wscons/wsdisplayvar.h>
|
||||||
|
#include <dev/wscons/wscons_callbacks.h>
|
||||||
|
|
||||||
|
#include <machine/bus.h>
|
||||||
|
|
||||||
|
#include <arm/xscale/pxa2x0var.h>
|
||||||
|
#include <arm/xscale/pxa2x0reg.h>
|
||||||
|
#include <arm/xscale/pxa2x0_lcd.h>
|
||||||
|
#include <arm/xscale/pxa2x0_gpio.h>
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef CURRENT_DISPLAY
|
||||||
|
#define CURRENT_DISPLAY samsung_lte430wq_f0c
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
static int gxlcd_match(device_t, cfdata_t, void *);
|
||||||
|
static void gxlcd_attach(device_t, device_t, void *);
|
||||||
|
|
||||||
|
void gxlcd_cnattach(void);
|
||||||
|
|
||||||
|
static int gxlcd_ioctl(void *, void *, u_long, void *, int, struct lwp *);
|
||||||
|
static int gxlcd_show_screen(void *, void *, int,
|
||||||
|
void (*)(void *, int, int), void *);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* wsdisplay glue
|
||||||
|
*/
|
||||||
|
static struct pxa2x0_wsscreen_descr gxlcd_std_screen = {
|
||||||
|
.c = {
|
||||||
|
.name = "std",
|
||||||
|
.textops = &pxa2x0_lcd_emulops,
|
||||||
|
.fontwidth = 8,
|
||||||
|
.fontheight = 16,
|
||||||
|
.capabilities = WSSCREEN_WSCOLORS,
|
||||||
|
},
|
||||||
|
.depth = 16, /* bits per pixel */
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wsscreen_descr *gxlcd_scr_descr[] = {
|
||||||
|
&gxlcd_std_screen.c
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wsscreen_list gxlcd_screen_list = {
|
||||||
|
.nscreens = __arraycount(gxlcd_scr_descr),
|
||||||
|
.screens = gxlcd_scr_descr,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct wsdisplay_accessops gxlcd_accessops = {
|
||||||
|
gxlcd_ioctl,
|
||||||
|
pxa2x0_lcd_mmap,
|
||||||
|
pxa2x0_lcd_alloc_screen,
|
||||||
|
pxa2x0_lcd_free_screen,
|
||||||
|
gxlcd_show_screen,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
const struct lcd_panel_geometry samsung_lte430wq_f0c =
|
||||||
|
{
|
||||||
|
480, /* Width */
|
||||||
|
272, /* Height */
|
||||||
|
0, /* No extra lines */
|
||||||
|
|
||||||
|
LCDPANEL_ACTIVE | LCDPANEL_PCP,
|
||||||
|
1, /* clock divider */
|
||||||
|
0, /* AC bias pin freq */
|
||||||
|
|
||||||
|
41, /* horizontal sync pulse width */
|
||||||
|
4, /* BLW */
|
||||||
|
8, /* ELW */
|
||||||
|
|
||||||
|
10, /* vertical sync pulse width */
|
||||||
|
2, /* BFW */
|
||||||
|
4, /* EFW */
|
||||||
|
};
|
||||||
|
|
||||||
|
static int gxlcd_console;
|
||||||
|
|
||||||
|
|
||||||
|
CFATTACH_DECL_NEW(gxlcd, sizeof(struct pxa2x0_lcd_softc),
|
||||||
|
gxlcd_match, gxlcd_attach, NULL, NULL);
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
gxlcd_match(device_t parent, cfdata_t match, void *aux)
|
||||||
|
{
|
||||||
|
struct pxaip_attach_args *pxa = aux;
|
||||||
|
|
||||||
|
if (strcmp(pxa->pxa_name, match->cf_name) != 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
pxa->pxa_size = PXA2X0_LCDC_SIZE;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gxlcd_attach(device_t parent, device_t self, void *aux)
|
||||||
|
{
|
||||||
|
struct pxa2x0_lcd_softc *sc = (struct pxa2x0_lcd_softc *)self;
|
||||||
|
struct wsemuldisplaydev_attach_args aa;
|
||||||
|
|
||||||
|
pxa2x0_lcd_attach_sub(sc, aux, &CURRENT_DISPLAY);
|
||||||
|
|
||||||
|
aa.console = gxlcd_console;
|
||||||
|
aa.scrdata = &gxlcd_screen_list;
|
||||||
|
aa.accessops = &gxlcd_accessops;
|
||||||
|
aa.accesscookie = sc;
|
||||||
|
|
||||||
|
pxa2x0_lcd_setup_wsscreen(&gxlcd_std_screen, &CURRENT_DISPLAY, NULL);
|
||||||
|
|
||||||
|
(void) config_found(self, &aa, wsemuldisplaydevprint);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gxlcd_cnattach(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
pxa2x0_lcd_cnattach(&gxlcd_std_screen, &CURRENT_DISPLAY);
|
||||||
|
|
||||||
|
gxlcd_console = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* wsdisplay accessops overrides
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
gxlcd_ioctl(void *v, void *vs, u_long cmd, void *data, int flag, struct lwp *l)
|
||||||
|
{
|
||||||
|
int res = EINVAL;
|
||||||
|
|
||||||
|
switch (cmd) {
|
||||||
|
case WSDISPLAYIO_SVIDEO:
|
||||||
|
if (*(int *)data == WSDISPLAYIO_VIDEO_ON)
|
||||||
|
pxa2x0_gpio_set_function(17, GPIO_IN);
|
||||||
|
else
|
||||||
|
pxa2x0_gpio_set_function(17, GPIO_OUT | GPIO_CLR);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (res == EINVAL)
|
||||||
|
res = pxa2x0_lcd_ioctl(v, vs, cmd, data, flag, l);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
gxlcd_show_screen(void *v, void *cookie, int waitok,
|
||||||
|
void (*cb_func)(void *, int, int), void *cb_arg)
|
||||||
|
{
|
||||||
|
int error;
|
||||||
|
|
||||||
|
error = pxa2x0_lcd_show_screen(v, cookie, waitok, cb_func, cb_arg);
|
||||||
|
if (error)
|
||||||
|
return (error);
|
||||||
|
|
||||||
|
/* Turn on LCD */
|
||||||
|
pxa2x0_gpio_set_function(17, GPIO_IN);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: gxpcic.c,v 1.10 2009/03/18 10:22:27 cegger Exp $ */
|
/* $NetBSD: gxpcic.c,v 1.11 2009/08/09 07:10:13 kiyohara Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2005, 2006 WIDE Project and SOUM Corporation.
|
* Copyright (C) 2005, 2006 WIDE Project and SOUM Corporation.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -94,15 +94,10 @@
|
||||||
|
|
||||||
#define HAVE_CARD(r) (!((r) & GPIO_SET))
|
#define HAVE_CARD(r) (!((r) & GPIO_SET))
|
||||||
|
|
||||||
#define GXIO_GPIRQ11_CD1 11
|
|
||||||
#define GXIO_GPIRQ26_PRDY1 26
|
|
||||||
#define GXIO_GPIRQ27_PRDY2 27
|
|
||||||
#define GXIO_GPIRQ36_CD2 36
|
|
||||||
|
|
||||||
|
static int gxpcic_match(device_t, cfdata_t, void *);
|
||||||
static int gxpcic_match(device_t, struct cfdata *, void *);
|
|
||||||
static void gxpcic_attach(device_t, device_t, void *);
|
static void gxpcic_attach(device_t, device_t, void *);
|
||||||
static void gxpcic_pcic_socket_setup(struct pxapcic_socket *);
|
static void gxpcic_socket_setup(struct pxapcic_socket *);
|
||||||
|
|
||||||
static u_int gxpcic_read(struct pxapcic_socket *, int);
|
static u_int gxpcic_read(struct pxapcic_socket *, int);
|
||||||
static void gxpcic_write(struct pxapcic_socket *, int, u_int);
|
static void gxpcic_write(struct pxapcic_socket *, int, u_int);
|
||||||
|
@ -115,10 +110,10 @@ __inline void gxpcic_cpld_clk(void);
|
||||||
__inline u_char gxpcic_cpld_read_bits(int bits);
|
__inline u_char gxpcic_cpld_read_bits(int bits);
|
||||||
static int gxpcic_count_slot(struct pxapcic_softc *);
|
static int gxpcic_count_slot(struct pxapcic_softc *);
|
||||||
|
|
||||||
CFATTACH_DECL_NEW(pxapcic_gxpcic, sizeof(struct pxapcic_softc),
|
CFATTACH_DECL_NEW(gxpcic, sizeof(struct pxapcic_softc),
|
||||||
gxpcic_match, gxpcic_attach, NULL, NULL);
|
gxpcic_match, gxpcic_attach, NULL, NULL);
|
||||||
|
|
||||||
static struct pxapcic_tag gxpcic_pcic_functions = {
|
static struct pxapcic_tag gxpcic_functions = {
|
||||||
gxpcic_read,
|
gxpcic_read,
|
||||||
gxpcic_write,
|
gxpcic_write,
|
||||||
gxpcic_set_power,
|
gxpcic_set_power,
|
||||||
|
@ -127,22 +122,18 @@ static struct pxapcic_tag gxpcic_pcic_functions = {
|
||||||
gxpcic_intr_disestablish,
|
gxpcic_intr_disestablish,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct {
|
|
||||||
int cd;
|
|
||||||
int prdy;
|
|
||||||
} gxpcic_slot_irqs[] = {
|
|
||||||
{ GXIO_GPIRQ11_CD1, GXIO_GPIRQ26_PRDY1 },
|
|
||||||
{ GXIO_GPIRQ36_CD2, GXIO_GPIRQ27_PRDY2 }
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
gxpcic_match(device_t parent, struct cfdata *cf, void *aux)
|
gxpcic_match(device_t parent, cfdata_t match, void *aux)
|
||||||
{
|
{
|
||||||
|
struct pxaip_attach_args *pxa = aux;
|
||||||
struct pxa2x0_gpioconf *gpioconf;
|
struct pxa2x0_gpioconf *gpioconf;
|
||||||
u_int reg;
|
u_int reg;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
if (strcmp(pxa->pxa_name, match->cf_name) != 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check GPIO configuration. If you use these, it is sure already
|
* Check GPIO configuration. If you use these, it is sure already
|
||||||
* to have been set by gxio.
|
* to have been set by gxio.
|
||||||
|
@ -152,8 +143,11 @@ gxpcic_match(device_t parent, struct cfdata *cf, void *aux)
|
||||||
for (i = 0; gpioconf[i].pin != -1; i++) {
|
for (i = 0; gpioconf[i].pin != -1; i++) {
|
||||||
reg = pxa2x0_gpio_get_function(gpioconf[i].pin);
|
reg = pxa2x0_gpio_get_function(gpioconf[i].pin);
|
||||||
if (GPIO_FN(reg) != GPIO_FN(gpioconf[i].value) ||
|
if (GPIO_FN(reg) != GPIO_FN(gpioconf[i].value) ||
|
||||||
GPIO_FN_IS_OUT(reg) != GPIO_FN_IS_OUT(gpioconf[i].value))
|
GPIO_FN_IS_OUT(reg) != GPIO_FN_IS_OUT(gpioconf[i].value)) {
|
||||||
return (0);
|
if (!CPU_IS_PXA250 && gpioconf[i].pin == 111)
|
||||||
|
continue;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1; /* match */
|
return 1; /* match */
|
||||||
|
@ -163,7 +157,7 @@ static void
|
||||||
gxpcic_attach(device_t parent, device_t self, void *aux)
|
gxpcic_attach(device_t parent, device_t self, void *aux)
|
||||||
{
|
{
|
||||||
struct pxapcic_softc *sc = device_private(self);
|
struct pxapcic_softc *sc = device_private(self);
|
||||||
struct pxaip_attach_args *pxa = (struct pxaip_attach_args *)aux;
|
struct pxaip_attach_args *pxa = aux;
|
||||||
int nslot, i;
|
int nslot, i;
|
||||||
|
|
||||||
sc->sc_dev = self;
|
sc->sc_dev = self;
|
||||||
|
@ -172,30 +166,36 @@ gxpcic_attach(device_t parent, device_t self, void *aux)
|
||||||
nslot = gxpcic_count_slot(sc);
|
nslot = gxpcic_count_slot(sc);
|
||||||
|
|
||||||
for (i = 0; i < nslot; i++) {
|
for (i = 0; i < nslot; i++) {
|
||||||
|
if (!gxpcic_slot_irqs[i].valid)
|
||||||
|
continue;
|
||||||
sc->sc_irqpin[i] = gxpcic_slot_irqs[i].prdy;
|
sc->sc_irqpin[i] = gxpcic_slot_irqs[i].prdy;
|
||||||
sc->sc_irqcfpin[i] = gxpcic_slot_irqs[i].cd;
|
sc->sc_irqcfpin[i] = gxpcic_slot_irqs[i].cd;
|
||||||
}
|
}
|
||||||
sc->sc_nslots = nslot;
|
sc->sc_nslots = nslot;
|
||||||
|
|
||||||
pxapcic_attach_common(sc, &gxpcic_pcic_socket_setup);
|
pxapcic_attach_common(sc, &gxpcic_socket_setup);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gxpcic_pcic_socket_setup(struct pxapcic_socket *so)
|
gxpcic_socket_setup(struct pxapcic_socket *so)
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
struct pxapcic_softc *sc = so->sc;
|
struct pxapcic_softc *sc = so->sc;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* 3.3V only? */
|
/* 3.3V only? */
|
||||||
so->power_capability = PXAPCIC_POWER_3V;
|
so->power_capability = PXAPCIC_POWER_3V;
|
||||||
so->pcictag_cookie = NULL;
|
so->pcictag_cookie = NULL;
|
||||||
so->pcictag = &gxpcic_pcic_functions;
|
so->pcictag = &gxpcic_functions;
|
||||||
|
|
||||||
|
#if 0 /* We use already set values by u-boot. */
|
||||||
bus_space_write_4(sc->sc_iot, sc->sc_memctl_ioh,
|
bus_space_write_4(sc->sc_iot, sc->sc_memctl_ioh,
|
||||||
MEMCTL_MCMEM(so->socket), MC_TIMING_VAL(9 ,9, 29));
|
MEMCTL_MCMEM(so->socket), MC_TIMING_VAL(9 ,9, 29));
|
||||||
bus_space_write_4(sc->sc_iot, sc->sc_memctl_ioh,
|
bus_space_write_4(sc->sc_iot, sc->sc_memctl_ioh,
|
||||||
MEMCTL_MCATT(so->socket), MC_TIMING_VAL(9 ,9, 29));
|
MEMCTL_MCATT(so->socket), MC_TIMING_VAL(9 ,9, 29));
|
||||||
bus_space_write_4(sc->sc_iot, sc->sc_memctl_ioh,
|
bus_space_write_4(sc->sc_iot, sc->sc_memctl_ioh,
|
||||||
MEMCTL_MCIO(so->socket), MC_TIMING_VAL(5 ,5, 16));
|
MEMCTL_MCIO(so->socket), MC_TIMING_VAL(5 ,5, 16));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static u_int
|
static u_int
|
||||||
|
@ -317,8 +317,8 @@ gxpcic_count_slot(struct pxapcic_softc *sc)
|
||||||
pce1 = pxa2x0_gpio_get_function(52);
|
pce1 = pxa2x0_gpio_get_function(52);
|
||||||
pce2 = pxa2x0_gpio_get_function(53);
|
pce2 = pxa2x0_gpio_get_function(53);
|
||||||
|
|
||||||
/* Reset */
|
/* RESET */
|
||||||
pxa2x0_gpio_set_function(8, GPIO_OUT | GPIO_SET);
|
pxa2x0_gpio_set_function(gxpcic_gpio_reset, GPIO_OUT | GPIO_CLR);
|
||||||
|
|
||||||
/* Setup the shift register */
|
/* Setup the shift register */
|
||||||
pxa2x0_gpio_set_function(52, GPIO_OUT | GPIO_SET);
|
pxa2x0_gpio_set_function(52, GPIO_OUT | GPIO_SET);
|
||||||
|
@ -340,7 +340,8 @@ gxpcic_count_slot(struct pxapcic_softc *sc)
|
||||||
nslot = 2;
|
nslot = 2;
|
||||||
|
|
||||||
delay(50);
|
delay(50);
|
||||||
pxa2x0_gpio_set_function(8, GPIO_OUT | GPIO_CLR); /* clr RESET */
|
/* clear RESET */
|
||||||
|
pxa2x0_gpio_set_function(gxpcic_gpio_reset, GPIO_OUT | GPIO_CLR);
|
||||||
|
|
||||||
pxa2x0_gpio_set_function(48, poe);
|
pxa2x0_gpio_set_function(48, poe);
|
||||||
pxa2x0_gpio_set_function(52, pce1);
|
pxa2x0_gpio_set_function(52, pce1);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: if_sm_gxio.c,v 1.6 2008/05/11 08:23:17 kiyohara Exp $ */
|
/* $NetBSD: if_sm_gxio.c,v 1.7 2009/08/09 07:10:13 kiyohara Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2005, 2006 WIDE Project and SOUM Corporation.
|
* Copyright (C) 2005, 2006 WIDE Project and SOUM Corporation.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -61,7 +61,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
__KERNEL_RCSID(0, "$NetBSD: if_sm_gxio.c,v 1.6 2008/05/11 08:23:17 kiyohara Exp $");
|
__KERNEL_RCSID(0, "$NetBSD: if_sm_gxio.c,v 1.7 2009/08/09 07:10:13 kiyohara Exp $");
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <sys/device.h>
|
#include <sys/device.h>
|
||||||
|
@ -114,18 +114,18 @@ sm_gxio_match(device_t parent, struct cfdata *match, void *aux)
|
||||||
struct gxio_attach_args *gxa = aux;
|
struct gxio_attach_args *gxa = aux;
|
||||||
bus_space_tag_t iot = gxa->gxa_iot;
|
bus_space_tag_t iot = gxa->gxa_iot;
|
||||||
bus_space_handle_t ioh;
|
bus_space_handle_t ioh;
|
||||||
u_int16_t tmp;
|
uint16_t tmp;
|
||||||
int rv = 0;
|
int rv = 0;
|
||||||
extern const char *smc91cxx_idstrs[];
|
extern const char *smc91cxx_idstrs[];
|
||||||
|
|
||||||
/* Disallow wildcarded values. */
|
/* Disallow wildcarded values. */
|
||||||
if (gxa->gxa_addr == GXIOCF_ADDR_DEFAULT)
|
if (gxa->gxa_addr == GXIOCF_ADDR_DEFAULT)
|
||||||
return (0);
|
return 0;
|
||||||
if (gxa->gxa_gpirq == GXIOCF_GPIRQ_DEFAULT)
|
if (gxa->gxa_gpirq == GXIOCF_GPIRQ_DEFAULT)
|
||||||
return (0);
|
return 0;
|
||||||
|
|
||||||
if (bus_space_map(iot, gxa->gxa_addr, SMC_IOSIZE, 0, &ioh) != 0)
|
if (bus_space_map(iot, gxa->gxa_addr, SMC_IOSIZE, 0, &ioh) != 0)
|
||||||
return (0);
|
return 0;
|
||||||
|
|
||||||
/* Check that high byte of BANK_SELECT is what we expect. */
|
/* Check that high byte of BANK_SELECT is what we expect. */
|
||||||
tmp = bus_space_read_2(iot, ioh, BANK_SELECT_REG_W);
|
tmp = bus_space_read_2(iot, ioh, BANK_SELECT_REG_W);
|
||||||
|
@ -160,22 +160,24 @@ sm_gxio_match(device_t parent, struct cfdata *match, void *aux)
|
||||||
|
|
||||||
out:
|
out:
|
||||||
bus_space_unmap(iot, ioh, SMC_IOSIZE);
|
bus_space_unmap(iot, ioh, SMC_IOSIZE);
|
||||||
return (rv);
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ARGSUSED */
|
/* ARGSUSED */
|
||||||
void
|
static void
|
||||||
sm_gxio_attach(device_t parent, device_t self, void *aux)
|
sm_gxio_attach(device_t parent, device_t self, void *aux)
|
||||||
{
|
{
|
||||||
struct sm_gxio_softc *gsc = device_private(self);
|
struct sm_gxio_softc *gsc = device_private(self);
|
||||||
struct smc91cxx_softc *sc = &gsc->sc_smc;
|
struct smc91cxx_softc *sc = &gsc->sc_smc;
|
||||||
struct gxio_attach_args *gxa = aux;
|
struct gxio_attach_args *gxa = aux;
|
||||||
bus_space_handle_t ioh;
|
bus_space_handle_t ioh;
|
||||||
u_int8_t myea[ETHER_ADDR_LEN];
|
uint8_t myea[ETHER_ADDR_LEN];
|
||||||
|
|
||||||
aprint_normal("\n");
|
aprint_normal("\n");
|
||||||
aprint_naive("\n");
|
aprint_naive("\n");
|
||||||
|
|
||||||
|
KASSERT(system_serial_high != 0 || system_serial_low != 0);
|
||||||
|
|
||||||
/* Map i/o space. */
|
/* Map i/o space. */
|
||||||
if (bus_space_map(gxa->gxa_iot, gxa->gxa_addr, SMC_IOSIZE, 0, &ioh))
|
if (bus_space_map(gxa->gxa_iot, gxa->gxa_addr, SMC_IOSIZE, 0, &ioh))
|
||||||
panic("sm_gxio_attach: can't map i/o space");
|
panic("sm_gxio_attach: can't map i/o space");
|
||||||
|
@ -186,17 +188,14 @@ sm_gxio_attach(device_t parent, device_t self, void *aux)
|
||||||
/* should always be enabled */
|
/* should always be enabled */
|
||||||
sc->sc_flags |= SMC_FLAGS_ENABLED;
|
sc->sc_flags |= SMC_FLAGS_ENABLED;
|
||||||
|
|
||||||
if (system_serial_high != 0 || system_serial_low != 0) {
|
myea[0] = ((system_serial_high >> 8) & 0xfe) | 0x02;
|
||||||
myea[0] = ((system_serial_high >> 8) & 0xfe) | 0x02;
|
myea[1] = system_serial_high;
|
||||||
myea[1] = system_serial_high;
|
myea[2] = system_serial_low >> 24;
|
||||||
myea[2] = system_serial_low >> 24;
|
myea[3] = system_serial_low >> 16;
|
||||||
myea[3] = system_serial_low >> 16;
|
myea[4] = system_serial_low >> 8;
|
||||||
myea[4] = system_serial_low >> 8;
|
myea[5] = (system_serial_low & 0xc0) |
|
||||||
myea[5] = (system_serial_low & 0xc0) |
|
(1 << 4) | ((ether_serial_digit++) & 0x0f);
|
||||||
(1 << 4) | ((ether_serial_digit++) & 0x0f);
|
smc91cxx_attach(sc, myea);
|
||||||
smc91cxx_attach(sc, myea);
|
|
||||||
} else
|
|
||||||
smc91cxx_attach(sc, NULL);
|
|
||||||
|
|
||||||
/* Establish the interrupt handler. */
|
/* Establish the interrupt handler. */
|
||||||
gsc->sc_ih = gxio_intr_establish(gxa->gxa_sc,
|
gsc->sc_ih = gxio_intr_establish(gxa->gxa_sc,
|
||||||
|
|
|
@ -0,0 +1,146 @@
|
||||||
|
/* $NetBSD: if_smsh_gxio.c,v 1.1 2009/08/09 07:10:13 kiyohara Exp $ */
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2008 KIYOHARA Takashi
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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: if_smsh_gxio.c,v 1.1 2009/08/09 07:10:13 kiyohara Exp $");
|
||||||
|
|
||||||
|
#include <sys/param.h>
|
||||||
|
#include <sys/device.h>
|
||||||
|
#include <sys/errno.h>
|
||||||
|
#include <sys/bus.h>
|
||||||
|
#include <sys/systm.h>
|
||||||
|
|
||||||
|
#include <evbarm/gumstix/gumstixvar.h>
|
||||||
|
|
||||||
|
#include <net/if.h>
|
||||||
|
#include <net/if_ether.h>
|
||||||
|
#include <net/if_media.h>
|
||||||
|
|
||||||
|
#include <dev/mii/miivar.h>
|
||||||
|
|
||||||
|
#include <dev/ic/lan9118var.h>
|
||||||
|
#include <dev/ic/lan9118reg.h>
|
||||||
|
|
||||||
|
#include "locators.h"
|
||||||
|
|
||||||
|
|
||||||
|
static int smsh_gxio_match(device_t, struct cfdata *, void *);
|
||||||
|
static void smsh_gxio_attach(device_t, device_t, void *);
|
||||||
|
|
||||||
|
static int ether_serial_digit = 1;
|
||||||
|
|
||||||
|
struct smsh_gxio_softc {
|
||||||
|
struct lan9118_softc sc_smsh;
|
||||||
|
void *sc_ih;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Board independent DMA stuffs, if uses master DMA.
|
||||||
|
* We use PXA2x0's DMA.
|
||||||
|
*/
|
||||||
|
struct dmac_xfer *sc_txfer;
|
||||||
|
struct dmac_xfer *sc_rxfer;
|
||||||
|
};
|
||||||
|
|
||||||
|
CFATTACH_DECL_NEW(smsh_gxio, sizeof(struct smsh_gxio_softc),
|
||||||
|
smsh_gxio_match, smsh_gxio_attach, NULL, NULL);
|
||||||
|
|
||||||
|
|
||||||
|
/* ARGSUSED */
|
||||||
|
static int
|
||||||
|
smsh_gxio_match(device_t parent, struct cfdata *match, void *aux)
|
||||||
|
{
|
||||||
|
struct gxio_attach_args *gxa = aux;
|
||||||
|
bus_space_tag_t iot = gxa->gxa_iot;
|
||||||
|
bus_space_handle_t ioh;
|
||||||
|
uint32_t val;
|
||||||
|
int rv = 0;
|
||||||
|
|
||||||
|
/* Disallow wildcarded values. */
|
||||||
|
if (gxa->gxa_addr == GXIOCF_ADDR_DEFAULT)
|
||||||
|
return 0;
|
||||||
|
if (gxa->gxa_gpirq == GXIOCF_GPIRQ_DEFAULT)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (bus_space_map(iot, gxa->gxa_addr, LAN9118_IOSIZE, 0, &ioh) != 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
bus_space_write_4(iot, ioh, LAN9118_BYTE_TEST, 0);
|
||||||
|
val = bus_space_read_4(iot, ioh, LAN9118_BYTE_TEST);
|
||||||
|
if (val == LAN9118_BYTE_TEST_VALUE)
|
||||||
|
/* Assume we have an SMSC LAN9117 */
|
||||||
|
rv = 1;
|
||||||
|
if (ether_serial_digit > 15)
|
||||||
|
rv = 0;
|
||||||
|
|
||||||
|
bus_space_unmap(iot, ioh, LAN9118_IOSIZE);
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ARGSUSED */
|
||||||
|
static void
|
||||||
|
smsh_gxio_attach(device_t parent, device_t self, void *aux)
|
||||||
|
{
|
||||||
|
struct smsh_gxio_softc *gsc = device_private(self);
|
||||||
|
struct lan9118_softc *sc = &gsc->sc_smsh;
|
||||||
|
struct gxio_attach_args *gxa = aux;
|
||||||
|
|
||||||
|
aprint_normal("\n");
|
||||||
|
aprint_naive("\n");
|
||||||
|
|
||||||
|
KASSERT(system_serial_high != 0 || system_serial_low != 0);
|
||||||
|
|
||||||
|
sc->sc_dev = self;
|
||||||
|
|
||||||
|
/* Map i/o space. */
|
||||||
|
if (bus_space_map(gxa->gxa_iot, gxa->gxa_addr, LAN9118_IOSIZE, 0,
|
||||||
|
&sc->sc_ioh))
|
||||||
|
panic("sms_gxio_attach: can't map i/o space");
|
||||||
|
sc->sc_iot = gxa->gxa_iot;
|
||||||
|
|
||||||
|
sc->sc_enaddr[0] = ((system_serial_high >> 8) & 0xfe) | 0x02;
|
||||||
|
sc->sc_enaddr[1] = system_serial_high;
|
||||||
|
sc->sc_enaddr[2] = system_serial_low >> 24;
|
||||||
|
sc->sc_enaddr[3] = system_serial_low >> 16;
|
||||||
|
sc->sc_enaddr[4] = system_serial_low >> 8;
|
||||||
|
sc->sc_enaddr[5] = (system_serial_low & 0xc0) |
|
||||||
|
(1 << 4) | ((ether_serial_digit++) & 0x0f);
|
||||||
|
sc->sc_flags = LAN9118_FLAGS_NO_EEPROM;
|
||||||
|
if (lan9118_attach(sc) != 0) {
|
||||||
|
bus_space_unmap(sc->sc_iot, sc->sc_ioh, LAN9118_IOSIZE);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Establish the interrupt handler. */
|
||||||
|
gsc->sc_ih = gxio_intr_establish(gxa->gxa_sc,
|
||||||
|
gxa->gxa_gpirq, IST_EDGE_FALLING, IPL_NET, lan9118_intr, sc);
|
||||||
|
if (gsc->sc_ih == NULL) {
|
||||||
|
aprint_error_dev(self,
|
||||||
|
"couldn't establish interrupt handler\n");
|
||||||
|
bus_space_unmap(sc->sc_iot, sc->sc_ioh, LAN9118_IOSIZE);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue