Finally found some time to look at better support on the Tadpole SPARCle 500SX laptop that I've had for over a year now. The SPARCle seems to be based on the Blade 100 and Blade 150 (500, 550 or 650Mhz UltraSPARC-II), but housed in a laptop case. Unfortunately, there isn't much hardware documentation available (unlike the 3GX), but Solaris drivers are still available from Tadpole.

There is a user manual showing ports and pin-outs, so I made up an RJ12 6P6C to DB9 cable to use the serial port as console, while trying to get things working. Simple things to fix were to match the Altera ebus bridge, and to use the PROM mapping for the clock to attach a few more devices. Also, after a bit of hunting, the framebuffer could be matched too. The keyboard shows up as an 8042 (PS/2) controller chip, so I could modify the sparc driver to make a sparc64 driver.

Now, the SPARCle boots, and some important devices are matched (clock, framebuffer and keyboard/mouse. However, the key bindings are all wrong, so the keyboard still isn't usable. Looking at the OpenBSD code, they have a workaround for controllers that can't handle AT to XT scan code translation, and The PS/2 Keyboard Interface was a very useful reference for how the 8042 works. The SPARCle works slightly differently to a standard 8042 (no translation support), and has some additional, non-standard scan codes. It also doesn't seem to map all the keys (for example the screen brightness keys) through the 8042 (at least with a trivial wsev to read keyboard events, I see nothing reported for these keys).

Modifying our 8042 driver to do a similar translation to the one done in OpenBSD, adding the extra key scan codes, fixing up the other pckbc users, adding pckbc at ebus to sparc64 GENERIC, and committing the header file that I forgot makes the SPARCle a lot more usable.

Investigating cardbus bridge attach failures showed that the firmware didn't set up the PCI root bridge correctly. I have a possible patch, but I'm not sure if it's complete enough to commit. Also, i2cscan showed me that there was something at addresses 0x50 and 0x51 on the i²c bus attached to the ALI7101 SMBus controller. With a fix to the sparc64 iic properties, and to handle indirect attachment, I could add the indirect configuration for spdmem to the kernel configuration. dmesg is now:

Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
    2006, 2007, 2008, 2009, 2010, 2011, 2012
    The NetBSD Foundation, Inc.  All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
    The Regents of the University of California.  All rights reserved.

NetBSD 6.99.11 (ULTRA-PCI) #38: Fri Nov  2 17:35:48 GMT 2012
        root@orion.coris.org.uk:/tmp/obj/sparc64/usr/src/sys/arch/sparc64/compil
e/ULTRA-PCI
total memory = 512 MB
avail memory = 484 MB
timecounter: Timecounters tick every 10.000 msec
mainbus0 (root): TAD,SPARCLE (SPARCLE 500SX): hostid 80ce005c
cpu0 at mainbus0: SUNW,UltraSPARC-IIe @ 500 MHz, UPA id 0
cpu0: 16K instruction (32 b/l), 16K data (32 b/l), 256K external (64 b/l)
psycho0 at mainbus0
psycho0: pci108e,a001: impl 0, version 0: ign 7c0 bus range 0 to 0; PCI bus 0
pci0 at psycho0
pci0: i/o space, memory space enabled
ebus0 at pci0 dev 12 function 0
ebus0: Altera product 0x0000, revision 0x01
flashprom at ebus0 addr 0-fffff not configured
clock0 at ebus0 addr 0-1fff: mk48t59
ebus_attach: idprom: incomplete
ebus1 at pci0 dev 7 function 0
ebus1: Acer Labs M1533 PCI-ISA Bridge, revision 0x00
lpt0 at ebus1 addr 0-ffff
com0 at ebus1 addr 3f8-3ff ipl 2b: ns16550a, working fifo
pckbc0 at ebus1 addr 60-67, 60-67 ipl 29 ipl 26 ipl 2a: cnattach ok
pckbd0 at pckbc0 (kbd slot)
wskbd0 at pckbd0: console keyboard
pms0 at pckbc0 (aux slot)
wsmouse0 at pms0 mux 0
TAD,wb-memstick at ebus1 addr 148-14f ipl e not configured
TAD,wb-sdcard at ebus1 addr 358-35f ipl a not configured
alipm0 at pci0 dev 17 function 0: 74KHz clock
iic0 at alipm0: I2C bus
spdmem0 at iic0 addr 0x50
spdmem0: SDRAM, data ECC, 512MB, 143MHz (PC-133)
spdmem0: 13 rows, 10 cols, 2 banks, 4 banks/chip, 7.0ns cycle time
spdmem0: tAA-tRCD-tRP-tRAS: 3-15-15-45
spdmem0: voltage LvTTL (not 5V tolerant), refresh time 7.8us (self-refreshing)
tlp0 at pci0 dev 1 function 0: Davicom DM9102A Ethernet, pass 3.1
tlp0: interrupting at ivec 3006
tlp0: Ethernet address 00:00:83:ce:00:5c
dmphy0 at tlp0 phy 1: DM9102 10/100 media interface, rev. 0
dmphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
wi0 at pci0 dev 11 function 0: Intersil PRISM2.5 Mini-PCI WLAN (rev. 0x01)
wi0: interrupting at ivec 14
wi0: 802.11 address 00:90:96:4b:0c:8b
wi0: using RF:PRISM2.5 MAC:ISL3874A(Mini-PCI)
wi0: Intersil Firmware: Primary (1.0.7), Station (1.4.9)
wi0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
ohci0 at pci0 dev 2 function 0: NEC USB Host Controller (rev. 0x43)
ohci0: interrupting at ivec 1c
ohci0: OHCI version 1.0
usb0 at ohci0: USB revision 1.0
ohci1 at pci0 dev 2 function 1: NEC USB Host Controller (rev. 0x43)
ohci1: interrupting at ivec 1d
ohci1: OHCI version 1.0
usb1 at ohci1: USB revision 1.0
ehci0 at pci0 dev 2 function 2: NEC USB2 Host Controller (rev. 0x04)
ehci0: interrupting at ivec 1e
ehci0: EHCI version 1.0
ehci0: companion controllers, 3 ports each: ohci0 ohci1
usb2 at ehci0: USB revision 2.0
cbb0 at pci0 dev 3 function 0: Texas Instruments PCI1225 PCI-CardBus Bridge (rev
. 0x01)
autri0 at pci0 dev 8 function 0: Acer Labs M5451 AC-Link Controller Audio Device
 (rev. 0x01)
autri0: interrupting at ivec 23
autri0: ac97: SigmaTel STAC9721/23 codec; 18 bit DAC, 18 bit ADC, SigmaTel 3D
audio0 at autri0: full duplex, playback, capture, mmap, independent
midi0 at autri0: 4DWAVE MIDI UART
aceride0 at pci0 dev 13 function 0: Acer Labs M5229 UDMA IDE Controller (rev. 0x
c3)
aceride0: bus-master DMA support present
aceride0: using PIO transfers above 137GB as workaround for 48bit DMA access bug
, expect reduced performance
aceride0: primary channel configured to native-PCI mode
aceride0: using ivec 180c for native-PCI interrupt
atabus0 at aceride0 channel 0
aceride0: secondary channel configured to native-PCI mode
atabus1 at aceride0 channel 1
machfb0 at pci0 dev 19 function 0: ATI Technologies Rage L Mobility (PCI) (rev. 
0x64)
machfb0: using MMIO aperture
machfb0: 16 MB aperture at 0x03000000, 4 KB registers at 0x0000a000
machfb0: 128 KB ROM at 0x00020000
machfb0: 8192 KB SDRAM 55.815 MHz, maximum RAMDAC clock 230 MHz
machfb0: initial resolution 1400x1050 at 8 bpp
machfb0: attached to /dev/fb0
wsdisplay0 at machfb0 kbdmux 1: console (default, vt100 emulation), using wskbd0
wsmux1: connecting to wsdisplay0
wsdisplay0: screen 1-3 added (default, vt100 emulation)
direct rendering for machfb0 unsupported
cbb0: cacheline 0x10 lattimer 0xff
cbb0: bhlc 0x82ff10
cbb0: interrupting at ivec 1a
cardslot0 at cbb0
cardbus0 at cardslot0: bus 1
pcmcia0 at cardslot0
pcons at mainbus0 not configured
timecounter: Timecounter "clockinterrupt" frequency 100 Hz quality 0
timecounter: Timecounter "tick-counter" frequency 500000000 Hz quality 100
No counter-timer -- using %tick at 500MHz as system clock.
uhub0 at usb0: NEC OHCI root hub, class 9/0, rev 1.00/1.00, addr 1
uhub0: 3 ports with 3 removable, self powered
uhub1 at usb1: NEC OHCI root hub, class 9/0, rev 1.00/1.00, addr 1
uhub1: 2 ports with 2 removable, self powered
uhub2 at usb2: NEC EHCI root hub, class 9/0, rev 2.00/1.00, addr 1
uhub2: 5 ports with 5 removable, self powered
IPsec: Initialized Security Association Processing.
wd0 at atabus0 drive 0
wd0: <IC25N040ATCS04-0>
wd0: drive supports 16-sector PIO transfers, LBA addressing
wd0: 38154 MB, 77520 cyl, 16 head, 63 sec, 512 bytes/sect x 78140160 sectors
wd0: drive supports PIO mode 4, DMA mode 2, Ultra-DMA mode 5 (Ultra/100)
wd0(aceride0:0:0): using PIO mode 4, Ultra-DMA mode 4 (Ultra/66) (using DMA)
atapibus0 at atabus1: 2 targets
cd0 at atapibus0 drive 0: <TOSHIBA DVD-ROM SD-R2212, 234Q327001, 1013> cdrom removable
cd0: drive supports PIO mode 4, DMA mode 2, Ultra-DMA mode 2 (Ultra/33)
cd0(aceride0:1:0): using PIO mode 4, Ultra-DMA mode 2 (Ultra/33) (using DMA)
Kernelized RAIDframe activated
root on tlp0
    

Things still left to fix are working out how the extra keys are mapped, and how to drive the PMU. It's not currently possible to use the cardbus port nor the audio, which I suspect is because the PMU defaults to powering them down. The ALI 7101 is named "ebut" by the firmware, and there are 4 keys "E1" to "E4" above the keyboard, so I assume that the 7101 is being used for more than just an i²c controller.


-^- More notes -^-