WRAP.1E and geode.c

Walter C. Pelissero walter at pelissero.de
Fri May 20 01:05:13 GMT 2005


Reading geode.c it appears (at least to me) that the led devices are
created for the WRAP.1C but not for the WRAP.1E.

Guessing from the dmesg output

  $ dmesg
  Copyright (c) 1992-2004 The FreeBSD Project.
  Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
	  The Regents of the University of California. All rights reserved.
  FreeBSD 5.3-RELEASE #0: Sun Mar 20 17:12:36 CET 2005
      root at daemon5.neon1.net:/m0n0wall/kernels/wrap
  Timecounter "i8254" frequency 1193182 Hz quality 0
  CPU: Geode(TM) Integrated Processor by National Semi (266.65-MHz 586-class CPU)
    Origin = "Geode by NSC"  Id = 0x540  Stepping = 0
    Features=0x808131<FPU,TSC,MSR,CX8,CMOV,MMX>
  real memory  = 134217728 (128 MB)
  avail memory = 109277184 (104 MB)
  npx0: [FAST]
  npx0: <math processor> on motherboard
  npx0: INT 16 interface
  pcib0: <Host to PCI bridge> pcibus 0 on motherboard
  pci0: <PCI bus> on pcib0
  sis0: <NatSemi DP8381[56] 10/100BaseTX> port 0x1000-0x10ff mem 0x80000000-0x80000fff irq 10 at device 14.0 on pci0
  sis0: Silicon Revision: DP83816A
  miibus0: <MII bus> on sis0
  ukphy0: <Generic IEEE 802.3u media interface> on miibus0
  ukphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
  sis0: Ethernet address: 00:0d:b9:01:12:04
  sis1: <NatSemi DP8381[56] 10/100BaseTX> port 0x1400-0x14ff mem 0x80040000-0x80040fff irq 9 at device 15.0 on pci0
  sis1: Silicon Revision: DP83816A
  miibus1: <MII bus> on sis1
  ukphy1: <Generic IEEE 802.3u media interface> on miibus1
  ukphy1:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
  sis1: Ethernet address: 00:0d:b9:01:12:05
  sis2: <NatSemi DP8381[56] 10/100BaseTX> port 0x1800-0x18ff mem 0x80080000-0x80080fff irq 11 at device 16.0 on pci0
  sis2: Silicon Revision: DP83816A
  miibus2: <MII bus> on sis2
  ukphy2: <Generic IEEE 802.3u media interface> on miibus2
  ukphy2:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
  sis2: Ethernet address: 00:0d:b9:01:12:06
  Geode GPIO@ = f400
  isab0: <PCI-ISA bridge> port 0xf600-0xf63f,0xf400-0xf43f at device 18.0 on pci0
  isa0: <ISA bus> on isab0
  pci0: <bridge, PCI-unknown> at device 18.1 (no driver attached)
  atapci0: <National Geode SC1100 ATA33 controller> port 0xfc00-0xfc0f,0x376,0x170-0x177,0x3f6,0x1f0-0x1f7 at device 18.2 on pci0
  ata0: channel #0 on atapci0
  pci0: <multimedia, audio> at device 18.3 (no driver attached)
* Geode CBA@ 0x9000
* Geode rev: 06 03
  Timecounter "Geode" frequency 27000000 Hz quality 1000
  pci0: <bridge, PCI-unknown> at device 18.5 (no driver attached)
  cpu0 on motherboard
  pmtimer0 on isa0
  sio0 at port 0x3f8-0x3ff irq 4 flags 0x30 on isa0
  sio0: type 16550A, console
  sio1: configured irq 3 not in bitmap of probed irqs 0
  sio1: port may not be enabled
  sio1 at port 0x2f8-0x2ff irq 3 on isa0
  sio1: type 16550A
  Timecounters tick every 1.000 msec
  Fast IPsec: Initialized Security Association Processing.
  IP Filter: v3.4.35 initialized.  Default = block all, Logging = enabled
  md0: Preloaded image </mfsroot> 16777216 bytes at 0xc0740624
  ad0: FAILURE - SETFEATURES ENABLE RCACHE status=51<READY,DSC,ERROR> error=4<ABORTED>
  ad0: FAILURE - SETFEATURES DISABLE WCACHE status=51<READY,DSC,ERROR> error=4<ABORTED>
  ad0: 15MB <SanDisk SDCFB-16/Vdg 1.23> [490/2/32] at ata0-master PIO4
  Mounting root from ufs:/dev/md0
  ipfw2 initialized, divert disabled, rule-based forwarding enabled, default to accept, logging disabled

I'd say the WRAP.1E has a PCI device ID 0x0515100b as it falls in
the first if-branch of the following code (from geode.c):

  static int
  geode_probe(device_t self)
  {

	  if (pci_get_devid(self) == 0x0515100b) {
		  if (geode_counter == 0) {
			  /*
			   * The address of the CBA is written to this register
			   * by the bios, see p161 in data sheet.
			   */
			  cba = pci_read_config(self, 0x64, 4);
			  printf("Geode CBA@ 0x%x\n", cba);
			  geode_counter = cba + 0x08;
			  outl(cba + 0x0d, 2);
			  printf("Geode rev: %02x %02x\n",
				  inb(cba + 0x3c), inb(cba + 0x3d));
			  tc_init(&geode_timecounter);
			  EVENTHANDLER_REGISTER(watchdog_list, geode_watchdog,
			      NULL, 0);
		  }
	  } else if (pci_get_devid(self) == 0x0510100b) {
		  gpio = pci_read_config(self, PCIR_BAR(0), 4);
		  gpio &= ~0x1f;
		  printf("Geode GPIO@ = %x\n", gpio);
		  if (NULL != 
		      bios_string(0xf0000, 0xf0100, "Soekris Engineering", 0)) {
			  printf("Soekris Engineering NET4801 platform\n");
			  led1b = 20;
			  led1 = led_create(led_func, &led1b, "error");
		  } else if (NULL !=
		      bios_string(0xf9000, 0xf9000, "PC Engines WRAP.1C ", 0)) {
			  printf("PC Engines WRAP.1C platfrom\n");
			  led1b = -2;
			  led2b = -3;
			  led3b = -18;
			  led1 = led_create(led_func, &led1b, "led1");
			  led2 = led_create(led_func, &led2b, "led2");
			  led3 = led_create(led_func, &led3b, "led3");
			  /*
			   * Turn on first LED so we don't make people think
			   * their box just died.
			   */
			  led_func(&led1b, 1);
		  }
	  }
	  return (ENXIO);
  }

Reading the PC-Engines documentation it looks to me as WRAP.1C and
WRAP1.E were identical when it comes to the LEDs, thus it would be
nice to have the same entries in /dev.

Anyone with a better understanding of this platform cares to comment
on this?

-- 
walter pelissero
http://www.pelissero.de


More information about the freebsd-hackers mailing list