On Mon, Aug 28, 2017 at 09:32:04AM +0300, Artturi Alm wrote: > On Sat, Aug 26, 2017 at 09:29:31PM +0200, Mark Kettenis wrote: > > > From: "Stephen Graf" <s_g...@telus.net> > > > Date: Sat, 26 Aug 2017 11:58:58 -0700 > > > > > > Thank you again for your suggestions. I tried to follow your example but > > > it > > > did not work out as expected. > > > For some reason the gpioctl set command is not working at secure level 0 > > > and > > > without that it is impossible to do anything with the device later. > > > > You should run the diff that Artturi send in an early mail. That > > produces output like: > > > > i'm almost overtired atm., but after comparing datasheets i decided to > take a quick look at sxipio again, and stumbled upon these shifts. > > sxipio_config_pin: > 337 mux = (config & GPIO_CONFIG_OUTPUT) ? 1 : 0; > 338 off = (pin & 0x7) << 2; > 339 SXICMS4(sc, SXIPIO_CFG(port, pin), 0x7 << off, mux << off); > > sxipio_attach_gpio: > 460 /* Get pin configuration. */ > 461 reg = SXIREAD4(sc, SXIPIO_CFG(port, pin)); > 462 cfg = (reg >> (pin & 0x7)) & 0x7; > > 1:1? > -Artturi >
So, i was thinking something like this (untested): diff --git a/sys/dev/fdt/sxipio.c b/sys/dev/fdt/sxipio.c index 643226ecd19..9de710ffd5c 100644 --- a/sys/dev/fdt/sxipio.c +++ b/sys/dev/fdt/sxipio.c @@ -446,7 +446,7 @@ sxipio_attach_gpio(struct device *parent) uint32_t reg; int port, pin; int cfg, state; - int i; + int i, off; for (i = 0; i < sc->sc_npins; i++) { /* Skip pins that have no gpio function. */ @@ -459,7 +459,8 @@ sxipio_attach_gpio(struct device *parent) /* Get pin configuration. */ reg = SXIREAD4(sc, SXIPIO_CFG(port, pin)); - cfg = (reg >> (pin & 0x7)) & 0x7; + off = (pin & 0x7) << 2; + cfg = (reg >> off) & 0x7; /* Skip pins that have been assigned other functions. */ if (cfg != SXIPIO_GPIO_IN && cfg != SXIPIO_GPIO_OUT) just figured how the output below does ie. miss some supposed to be i2c-pins. -Artturi > > > > A0 mux 5<gmac>- skipping > > > A1 mux 2<emac>- skipping > > > A2 mux 5<gmac>- skipping > > > A3 mux 2<emac>- skipping > > > A4 mux 5<gmac>- skipping > > > A5 mux 2<emac>- skipping > > > A6 mux 5<gmac>- skipping > > > A7 mux 2<emac>- skipping > > > A8 mux 5<gmac>- skipping > > > A9 mux 2<emac>- skipping > > > A10 mux 5<gmac>- skipping > > > A11 mux 2<emac>- skipping > > > A12 mux 5<gmac>- skipping > > > A13 mux 2<emac>- skipping > > > A14 mux 5<gmac>- skipping > > > A15 mux 2<emac>- skipping > > > A16 mux 5<gmac>- skipping > > > A17 mux 2<emac>- skipping > > > B0 mux 2<i2c0>- skipping > > > B1 mux 1<gpio_out>- adding > > > B2 mux 0<gpio_in>- adding > > > B3 mux 4<spdif>- skipping > > > B4 mux 2<ir0>- skipping > > > B5 mux 1<gpio_out>- adding > > > B6 mux 0<gpio_in>- adding > > > B7 mux 0<gpio_in>- adding > > > B8 mux 1<gpio_out>- adding > > > B9 mux 0<gpio_in>- adding > > > B10 mux 0<gpio_in>- adding > > > B11 mux 0<gpio_in>- adding > > > B12 mux 0<gpio_in>- adding > > > B13 mux 0<gpio_in>- adding > > > B14 mux 0<gpio_in>- adding > > > B15 mux 0<gpio_in>- adding > > > B16 mux 0<gpio_in>- adding > > > B17 mux 0<gpio_in>- adding > > > B18 mux 0<gpio_in>- adding > > > B19 mux 0<gpio_in>- adding > > > B20 mux 0<gpio_in>- adding > > > B21 mux 0<gpio_in>- adding > > > B22 mux 0<gpio_in>- adding > > > B23 mux 4<invalid>- skipping > > > 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 > > > C17 mux 0<gpio_in>- adding > > > C18 mux 0<gpio_in>- adding > > > C19 mux 0<gpio_in>- adding > > > C20 mux 0<gpio_in>- adding > > > C21 mux 0<gpio_in>- adding > > > C22 mux 0<gpio_in>- adding > > > C23 mux 0<gpio_in>- adding > > > C24 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 > > > D18 mux 0<gpio_in>- adding > > > D19 mux 0<gpio_in>- adding > > > D20 mux 0<gpio_in>- adding > > > D21 mux 0<gpio_in>- adding > > > D22 mux 0<gpio_in>- adding > > > D23 mux 0<gpio_in>- adding > > > D24 mux 0<gpio_in>- adding > > > D25 mux 0<gpio_in>- adding > > > D26 mux 0<gpio_in>- adding > > > D27 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 > > > F0 mux 2<mmc0>- skipping > > > F1 mux 1<gpio_out>- adding > > > F2 mux 0<gpio_in>- adding > > > F3 mux 4<jtag>- skipping > > > F4 mux 2<mmc0>- skipping > > > F5 mux 1<gpio_out>- 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 > > > H0 mux 0<gpio_in>- adding > > > H1 mux 0<gpio_in>- adding > > > H2 mux 0<gpio_in>- adding > > > H3 mux 0<gpio_in>- adding > > > H4 mux 0<gpio_in>- adding > > > H5 mux 0<gpio_in>- adding > > > H6 mux 0<gpio_in>- adding > > > H7 mux 0<gpio_in>- adding > > > H8 mux 0<gpio_in>- adding > > > H9 mux 0<gpio_in>- adding > > > H10 mux 0<gpio_in>- adding > > > H11 mux 0<gpio_in>- adding > > > H12 mux 0<gpio_in>- adding > > > H13 mux 0<gpio_in>- adding > > > H14 mux 0<gpio_in>- adding > > > H15 mux 0<gpio_in>- adding > > > H16 mux 0<gpio_in>- adding > > > H17 mux 0<gpio_in>- adding > > > H18 mux 0<gpio_in>- adding > > > H19 mux 0<gpio_in>- adding > > > H20 mux 0<gpio_in>- adding > > > H21 mux 0<gpio_in>- adding > > > H22 mux 0<gpio_in>- adding > > > H23 mux 0<gpio_in>- adding > > > H24 mux 0<gpio_in>- adding > > > H25 mux 0<gpio_in>- adding > > > H26 mux 0<gpio_in>- adding > > > H27 mux 0<gpio_in>- adding > > > I0 mux 0<gpio_in>- adding > > > I1 mux 0<gpio_in>- adding > > > I2 mux 0<gpio_in>- adding > > > I3 mux 0<gpio_in>- adding > > > I4 mux 0<gpio_in>- adding > > > I5 mux 0<gpio_in>- adding > > > I6 mux 0<gpio_in>- adding > > > I7 mux 0<gpio_in>- adding > > > I8 mux 0<gpio_in>- adding > > > I9 mux 0<gpio_in>- adding > > > I10 mux 0<gpio_in>- adding > > > I11 mux 0<gpio_in>- adding > > > I12 mux 0<gpio_in>- adding > > > I13 mux 0<gpio_in>- adding > > > I14 mux 0<gpio_in>- adding > > > I15 mux 0<gpio_in>- adding > > > I16 mux 0<gpio_in>- adding > > > I17 mux 0<gpio_in>- adding > > > I18 mux 0<gpio_in>- adding > > > I19 mux 0<gpio_in>- adding > > > I20 mux 0<gpio_in>- adding > > > I21 mux 0<gpio_in>- adding > > > > which allows us to see how the pins are configured and whether they're > > made available.