Thank you for all your help and time so far. I am an engineer by training and profession and In school we always jokingly used to say "If all else fails use brute force (F!)".
So to try out your theory I conducted the following test. I added a line to sxipio.c: /* Get pin configuration. */ reg = SXIREAD4(sc, SXIPIO_CFG(port, pin)); off = (pin & 0x7) << 2; cfg = (reg >> off) & 0x7; if(cfg == 7) cfg = 0; for (m = 0; m < 8; m++) if (sc->sc_pins[i].funcs[m].mux == cfg) break; printf("%c%d mux %d<%s>%s", 'A' + (u_int)sc->sc_pins[i].port, sc->sc_pins[i].pin, cfg, m >= 8 ? "invalid" : sc->sc_pins[i].funcs[m].name, cfg < 2 ? "- adding\n" : "- skipping\n"); /* Skip pins that have been assigned other functions. */ and got the results below: Trying to boot from MMC1 U-Boot 2017.09-rc2 (Aug 22 2017 - 00:26:16 -0600) Allwinner Technology CPU: Allwinner H3 (SUN8I 1680) Model: Xunlong Orange Pi One DRAM: 512 MiB MMC: SUNXI SD/MMC: 0 *** Warning - bad CRC, using default environment In: serial Out: serial Err: serial Net: phy interface0 eth0: ethernet@1c30000 starting USB... USB0: USB EHCI 1.00 USB1: USB OHCI 1.0 scanning bus 0 for devices... 2 USB Device(s) found scanning usb for storage devices... 0 Storage Device(s) found Hit any key to stop autoboot: 0 switch to partitions #0, OK mmc0 is current device Scanning mmc 0:1... reading /sun8i-h3-orangepi-one.dtb 14504 bytes read in 25 ms (566.4 KiB/s) Found EFI removable media binary efi/boot/bootarm.efi reading efi/boot/bootarm.efi 67356 bytes read in 36 ms (1.8 MiB/s) ## Starting EFI application at 42000000 ... Scanning disks on usb... Scanning disks on mmc... MMC Device 1 not found MMC Device 2 not found MMC Device 3 not found Found 5 disks >> OpenBSD/armv7 BOOTARM 1.0 boot> booting sd0a:/bsd: 3906928+165972+496428 [282683+90+518560+243869]=0x56101c OpenBSD/armv7 booting ... arg0 0xc086101c arg1 0x0 arg2 0x48000000 Allocating page tables freestart = 0x40862000, free_pages = 128926 (0x0001f79e) IRQ stack: p0x40890000 v0xc0890000 ABT stack: p0x40891000 v0xc0891000 UND stack: p0x40892000 v0xc0892000 SVC stack: p0x40893000 v0xc0893000 Creating L1 page table at 0x40864000 Mapping kernel Constructing L2 page tables undefined page pmap [ using 1045660 bytes of bsd ELF symbol table ] board type: 0 Copyright (c) 1982, 1986, 1989, 1991, 1993 The Regents of the University of California. All rights reserved. Copyright (c) 1995-2017 OpenBSD. All rights reserved. https://www.OpenBSD.org OpenBSD 6.2-beta (GENERIC) #6: Mon Aug 28 19:01:57 PDT 2017 sysad...@openbsdop1.graf.lan:/usr/src/sys/arch/armv7/compile/GENERIC real mem = 536870912 (512MB) avail mem = 517378048 (493MB) mainbus0 at root: Xunlong Orange Pi One cpu0 at mainbus0: ARM Cortex-A7 r0p5 (ARMv7) cpu0: DC enabled IC enabled WB disabled EABT branch prediction enabled cpu0: 32KB(32b/l,2way) I-cache, 32KB(64b/l,4way) wr-back D-cache cortex0 at mainbus0 sxiccmu0 at mainbus0 psci0 at mainbus0 simplebus0 at mainbus0: "soc" sxiccmu1 at simplebus0 sxipio0 at simplebus0: 94 pins sxipio1 at simplebus0: 12 pins sximmc0 at simplebus0 sdmmc0 at sximmc0: 4-bit, sd high-speed, mmc high-speed, dma ehci0 at simplebus0 usb0 at ehci0: USB revision 2.0 uhub0 at usb0 configuration 1 interface 0 "Generic EHCI root hub" rev 2.00/1.00 addr 1 ehci1 at simplebus0 usb1 at ehci1: USB revision 2.0 uhub1 at usb1 configuration 1 interface 0 "Generic EHCI root hub" rev 2.00/1.00 addr 1 sxidog0 at simplebus0 com0 at simplebus0: ns16550, no working fifo com0: console ampintc0 at simplebus0 nirq 160, ncpu 4 sxirtc0 at simplebus0 A0 mux 0<gpio_in>- adding A1 mux 0<gpio_in>- adding A2 mux 0<gpio_in>- adding A3 mux 0<gpio_in>- adding A4 mux 2<uart0>- skipping A5 mux 2<uart0>- skipping A6 mux 0<gpio_in>- adding A7 mux 0<gpio_in>- adding A8 mux 0<gpio_in>- adding A9 mux 0<gpio_in>- adding A10 mux 0<gpio_in>- adding A11 mux 0<gpio_in>- adding A12 mux 0<gpio_in>- adding A13 mux 0<gpio_in>- adding A14 mux 0<gpio_in>- adding A15 mux 0<gpio_in>- adding A16 mux 0<gpio_in>- adding A17 mux 0<gpio_in>- adding A18 mux 0<gpio_in>- adding A19 mux 0<gpio_in>- adding A20 mux 0<gpio_in>- adding A21 mux 0<gpio_in>- adding C0 mux 0<gpio_in>- adding C1 mux 0<gpio_in>- adding C2 mux 0<gpio_in>- adding C3 mux 0<gpio_in>- adding C4 mux 0<gpio_in>- adding C5 mux 0<gpio_in>- adding C6 mux 0<gpio_in>- adding C7 mux 0<gpio_in>- adding C8 mux 0<gpio_in>- adding C9 mux 0<gpio_in>- adding C10 mux 0<gpio_in>- adding C11 mux 0<gpio_in>- adding C12 mux 0<gpio_in>- adding C13 mux 0<gpio_in>- adding C14 mux 0<gpio_in>- adding C15 mux 0<gpio_in>- adding C16 mux 0<gpio_in>- adding D0 mux 0<gpio_in>- adding D1 mux 0<gpio_in>- adding D2 mux 0<gpio_in>- adding D3 mux 0<gpio_in>- adding D4 mux 0<gpio_in>- adding D5 mux 0<gpio_in>- adding D6 mux 0<gpio_in>- adding D7 mux 0<gpio_in>- adding D8 mux 0<gpio_in>- adding D9 mux 0<gpio_in>- adding D10 mux 0<gpio_in>- adding D11 mux 0<gpio_in>- adding D12 mux 0<gpio_in>- adding D13 mux 0<gpio_in>- adding D14 mux 0<gpio_in>- adding D15 mux 0<gpio_in>- adding D16 mux 0<gpio_in>- adding D17 mux 0<gpio_in>- adding E0 mux 0<gpio_in>- adding E1 mux 0<gpio_in>- adding E2 mux 0<gpio_in>- adding E3 mux 0<gpio_in>- adding E4 mux 0<gpio_in>- adding E5 mux 0<gpio_in>- adding E6 mux 0<gpio_in>- adding E7 mux 0<gpio_in>- adding E8 mux 0<gpio_in>- adding E9 mux 0<gpio_in>- adding E10 mux 0<gpio_in>- adding E11 mux 0<gpio_in>- adding E12 mux 0<gpio_in>- adding E13 mux 0<gpio_in>- adding E14 mux 0<gpio_in>- adding E15 mux 0<gpio_in>- adding F0 mux 2<mmc0>- skipping F1 mux 2<mmc0>- skipping F2 mux 2<mmc0>- skipping F3 mux 2<mmc0>- skipping F4 mux 2<mmc0>- skipping F5 mux 2<mmc0>- skipping F6 mux 0<gpio_in>- adding G0 mux 0<gpio_in>- adding G1 mux 0<gpio_in>- adding G2 mux 0<gpio_in>- adding G3 mux 0<gpio_in>- adding G4 mux 0<gpio_in>- adding G5 mux 0<gpio_in>- adding G6 mux 0<gpio_in>- adding G7 mux 0<gpio_in>- adding G8 mux 0<gpio_in>- adding G9 mux 0<gpio_in>- adding G10 mux 0<gpio_in>- adding G11 mux 0<gpio_in>- adding G12 mux 0<gpio_in>- adding G13 mux 0<gpio_in>- adding gpio0 at sxipio0: 32 pins gpio1 at sxipio0: 32 pins gpio2 at sxipio0: 32 pins gpio3 at sxipio0: 32 pins gpio4 at sxipio0: 32 pins gpio5 at sxipio0: 32 pins gpio6 at sxipio0: 32 pins A0 mux 0<gpio_in>- adding A1 mux 0<gpio_in>- adding A2 mux 0<gpio_in>- adding A3 mux 0<gpio_in>- adding A4 mux 0<gpio_in>- adding A5 mux 0<gpio_in>- adding A6 mux 0<gpio_in>- adding A7 mux 0<gpio_in>- adding A8 mux 0<gpio_in>- adding A9 mux 0<gpio_in>- adding A10 mux 0<gpio_in>- adding A11 mux 0<gpio_in>- adding gpio7 at sxipio1: 32 pins agtimer0 at mainbus0: tick rate 24000 KHz scsibus0 at sdmmc0: 2 targets, initiator 0 sd0 at scsibus0 targ 1 lun 0: <SD/MMC, SL16G, 0080> SCSI2 0/direct removable sd0: 15193MB, 512 bytes/sector, 31116288 sectors run0 at uhub1 port 1 configuration 1 interface 0 "Ralink 802.11 n WLAN" rev 2.00/1.01 addr 2 run0: MAC/BBP RT3070 (rev 0x0201), RF RT3020 (MIMO 1T1R), address 00:1f:cf:52:86:52 vscsi0 at root scsibus1 at vscsi0: 256 targets softraid0 at root scsibus2 at softraid0: 256 targets boot device: sd0 root on sd0a (e50fea1f8609b974.a) swap on sd0b dump on sd0b Automatic boot in progress: starting file system checks. /dev/sd0a (e50fea1f8609b974.a): file system is clean; not checking /dev/sd0l (e50fea1f8609b974.l): file system is clean; not checking /dev/sd0d (e50fea1f8609b974.d): file system is clean; not checking /dev/sd0f (e50fea1f8609b974.f): file system is clean; not checking /dev/sd0g (e50fea1f8609b974.g): file system is clean; not checking /dev/sd0h (e50fea1f8609b974.h): file system is clean; not checking /dev/sd0k (e50fea1f8609b974.k): file system is clean; not checking /dev/sd0j (e50fea1f8609b974.j): file system is clean; not checking /dev/sd0e (e50fea1f8609b974.e): file system is clean; not checking setting tty flags pf enabled starting network DHCPREQUEST on run0 to 255.255.255.255 DHCPACK from 192.168.1.253 (cc:5d:4e:ad:f4:0f) bound to 192.168.1.6 -- renewal in 43200 seconds. reordering libraries: done. starting early daemons: syslogd pflogd ntpd. starting RPC daemons:. savecore: no core dump checking quotas: done. clearing /tmp In rc.securelevel, setting gpio. PA15 pin 15: caps: in out, flags: in -> out PD14 pin 14: caps: in out, flags: in -> out PL10 pin 10: caps: in out, flags: in -> out kern.securelevel: 0 -> 1 creating runtime link editor directory cache. preserving editor files. starting network daemons: sshd smtpd sndiod. starting local daemons: cron. Mon Aug 28 20:45:24 PDT 2017 OpenBSD/armv7 (openbsdop1.graf.lan) (console) login: sysadmin Password: Last login: Mon Aug 28 20:36:25 on ttyp0 from 192.168.1.3 OpenBSD 6.2-beta (GENERIC) #6: Mon Aug 28 19:01:57 PDT 2017 Welcome to OpenBSD: The proactively secure Unix-like operating system. Please use the sendbug(1) utility to report bugs in the system. Before reporting a bug, please try to reproduce it with the latest version of the code. With bug reports, please try to ensure that enough information to reproduce the problem is enclosed, and if a known fix for it exists, include that as well. You have new mail. $ su Password: # gpioctl gpio0 15 toggle pin 15: state 0 -> 1 # gpioctl gpio0 15 toggle pin 15: state 1 -> 0 # gpioctl gpio0 15 toggle pin 15: state 0 -> 1 # gpioctl gpio0 15 toggle pin 15: state 1 -> 0 # gpioctl gpio0 15 toggle pin 15: state 0 -> 1 # gpioctl gpio0 15 toggle pin 15: state 1 -> 0 # And the red light goes on and off! -----Original Message----- From: owner-...@openbsd.org [mailto:owner-...@openbsd.org] On Behalf Of Mark Kettenis Sent: Monday, August 28, 2017 11:05 AM To: s_g...@telus.net Cc: artturi....@gmail.com; arm@openbsd.org Subject: Re: looking for help on gpio setup on orange pi one > From: "Stephen Graf" <s_g...@telus.net> > Date: Mon, 28 Aug 2017 10:30:51 -0700 > > I tied your suggested change with the following results. > Not yet what I am thinking is correct. > sxirtc0 at simplebus0 > A0 mux 7<invalid>- skipping > A1 mux 7<invalid>- skipping > A2 mux 7<invalid>- skipping > A3 mux 7<invalid>- skipping > A4 mux 2<uart0>- skipping > A5 mux 2<uart0>- skipping > A6 mux 7<invalid>- skipping > A7 mux 7<invalid>- skipping > A8 mux 7<invalid>- skipping > A9 mux 7<invalid>- skipping > A10 mux 7<invalid>- skipping > A11 mux 7<invalid>- skipping > A12 mux 7<invalid>- skipping > A13 mux 7<invalid>- skipping > A14 mux 7<invalid>- skipping > A15 mux 7<invalid>- skipping > A16 mux 7<invalid>- skipping > A17 mux 7<invalid>- skipping > A18 mux 7<invalid>- skipping > A19 mux 7<invalid>- skipping > A20 mux 7<invalid>- skipping > A21 mux 7<invalid>- skipping > C0 mux 7<invalid>- skipping > C1 mux 7<invalid>- skipping > C2 mux 7<invalid>- skipping > C3 mux 7<invalid>- skipping > C4 mux 7<invalid>- skipping > C5 mux 7<invalid>- skipping > C6 mux 7<invalid>- skipping > C7 mux 7<invalid>- skipping > C8 mux 7<invalid>- skipping > C9 mux 7<invalid>- skipping > C10 mux 7<invalid>- skipping > C11 mux 7<invalid>- skipping > C12 mux 7<invalid>- skipping > C13 mux 7<invalid>- skipping > C14 mux 7<invalid>- skipping > C15 mux 7<invalid>- skipping > C16 mux 7<invalid>- skipping > D0 mux 7<invalid>- skipping > D1 mux 7<invalid>- skipping > D2 mux 7<invalid>- skipping > D3 mux 7<invalid>- skipping > D4 mux 7<invalid>- skipping > D5 mux 7<invalid>- skipping > D6 mux 7<invalid>- skipping > D7 mux 7<invalid>- skipping > D8 mux 7<invalid>- skipping > D9 mux 7<invalid>- skipping > D10 mux 7<invalid>- skipping > D11 mux 7<invalid>- skipping > D12 mux 7<invalid>- skipping > D13 mux 7<invalid>- skipping > D14 mux 7<invalid>- skipping > D15 mux 7<invalid>- skipping > D16 mux 7<invalid>- skipping > D17 mux 7<invalid>- skipping > E0 mux 7<invalid>- skipping > E1 mux 7<invalid>- skipping > E2 mux 7<invalid>- skipping > E3 mux 7<invalid>- skipping > E4 mux 7<invalid>- skipping > E5 mux 7<invalid>- skipping > E6 mux 7<invalid>- skipping > E7 mux 7<invalid>- skipping > E8 mux 7<invalid>- skipping > E9 mux 7<invalid>- skipping > E10 mux 7<invalid>- skipping > E11 mux 7<invalid>- skipping > E12 mux 7<invalid>- skipping > E13 mux 7<invalid>- skipping > E14 mux 7<invalid>- skipping > E15 mux 7<invalid>- skipping > F0 mux 2<mmc0>- skipping > F1 mux 2<mmc0>- skipping > F2 mux 2<mmc0>- skipping > F3 mux 2<mmc0>- skipping > F4 mux 2<mmc0>- skipping > F5 mux 2<mmc0>- skipping > F6 mux 0<gpio_in>- adding > G0 mux 7<invalid>- skipping > G1 mux 7<invalid>- skipping > G2 mux 7<invalid>- skipping > G3 mux 7<invalid>- skipping > G4 mux 7<invalid>- skipping > G5 mux 7<invalid>- skipping > G6 mux 7<invalid>- skipping > G7 mux 7<invalid>- skipping > G8 mux 7<invalid>- skipping > G9 mux 7<invalid>- skipping > G10 mux 7<invalid>- skipping > G11 mux 7<invalid>- skipping > G12 mux 7<invalid>- skipping > G13 mux 7<invalid>- skipping > gpio0 at sxipio0: 32 pins > gpio1 at sxipio0: 32 pins > gpio2 at sxipio0: 32 pins > gpio3 at sxipio0: 32 pins > gpio4 at sxipio0: 32 pins > gpio5 at sxipio0: 32 pins > gpio6 at sxipio0: 32 pins > A0 mux 7<invalid>- skipping > A1 mux 7<invalid>- skipping > A2 mux 7<invalid>- skipping > A3 mux 7<invalid>- skipping > A4 mux 7<invalid>- skipping > A5 mux 7<invalid>- skipping > A6 mux 7<invalid>- skipping > A7 mux 7<invalid>- skipping > A8 mux 7<invalid>- skipping > A9 mux 7<invalid>- skipping > A10 mux 7<invalid>- skipping > A11 mux 7<invalid>- skipping > gpio7 at sxipio1: 32 pins Actually this starts to make sense. If you look at page 316 and further of the H3 data sheet: http://linux-sunxi.org/images/4/4b/Allwinner_H3_Datasheet_V1.2.pdf you'll see that the pins most pins come up in state 7 "IO disable". I think we can allow configurtion of pins thet are left in this state without too much risk. I don't have much time to look into this right now myself. But please remind me in the 2nd half of september if nothing happens before then.