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 email@example.com:/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 -^-