Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 22 Oct 2019 15:57:16 +0200
From:      Emmanuel Vadot <manu@bidouilliste.com>
To:        Gary Otten <gdotten@gmail.com>
Cc:        freebsd-arm@freebsd.org, mmel@freebsd.org
Subject:   Re: GPIO on Olimex A64 board. Bank E not working.
Message-ID:  <20191022155716.3ebf30f63e02409aee2a6679@bidouilliste.com>
In-Reply-To: <20191018134326.dce3f37b8418ea9a2c0095a1@bidouilliste.com>
References:  <CABZQu%2Bg%2BtixWWM=nZevrLG4nvdaoTySTHJpfknMff51iWw9Gig@mail.gmail.com> <20191015131842.370e113b9f494ead760b9b6f@bidouilliste.com> <CABZQu%2BgNj10BPm7XDeHakKvHJ7vWTMUBo=xUudEwoSGMqc2Xzw@mail.gmail.com> <20191015175901.1d0173f27798f15c25c037de@bidouilliste.com> <CABZQu%2BhLKqnHbDKngbFd1NFZZvSC2kKyY_iU-3DDUdhuVV%2BoJA@mail.gmail.com> <20191018133131.3063a80860e4906e0fd67f2c@bidouilliste.com> <20191018134326.dce3f37b8418ea9a2c0095a1@bidouilliste.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, 18 Oct 2019 13:43:26 +0200
Emmanuel Vadot <manu@bidouilliste.com> wrote:

> On Fri, 18 Oct 2019 13:31:31 +0200
> Emmanuel Vadot <manu@bidouilliste.com> wrote:
> 
> > On Tue, 15 Oct 2019 13:26:46 -0400
> > Gary Otten <gdotten@gmail.com> wrote:
> > 
> > > Ok, I placed  hw.regulator.disable_unused=0 in /boot/loader.conf.  Here is
> > > the results, also still no output on the E bank.
> > > 
> > > root@:/dev # sysctl hw.regulator
> > > hw.regulator.dc1sw.uvolt: 0
> > > hw.regulator.dc1sw.always_on: 0
> > > hw.regulator.dc1sw.boot_on: 0
> > > hw.regulator.dc1sw.enable_cnt: 0
> > > hw.regulator.dc1sw.enable_delay: 0
> > > hw.regulator.dc1sw.ramp_delay: 0
> > > hw.regulator.dc1sw.max_uamp: 0
> > > hw.regulator.dc1sw.min_uamp: 0
> > > hw.regulator.dc1sw.max_uvolt: 0
> > > hw.regulator.dc1sw.min_uvolt: 0
> > > hw.regulator.ldo-io1.always_on: 0
> > > hw.regulator.ldo-io1.boot_on: 0
> > > hw.regulator.ldo-io1.enable_cnt: 0
> > > hw.regulator.ldo-io1.enable_delay: 0
> > > hw.regulator.ldo-io1.ramp_delay: 0
> > > hw.regulator.ldo-io1.max_uamp: 0
> > > hw.regulator.ldo-io1.min_uamp: 0
> > > hw.regulator.ldo-io1.max_uvolt: 3300000
> > > hw.regulator.ldo-io1.min_uvolt: 700000
> > > hw.regulator.ldo-io0.always_on: 0
> > > hw.regulator.ldo-io0.boot_on: 0
> > > hw.regulator.ldo-io0.enable_cnt: 0
> > > hw.regulator.ldo-io0.enable_delay: 0
> > > hw.regulator.ldo-io0.ramp_delay: 0
> > > hw.regulator.ldo-io0.max_uamp: 0
> > > hw.regulator.ldo-io0.min_uamp: 0
> > > hw.regulator.ldo-io0.max_uvolt: 3300000
> > > hw.regulator.ldo-io0.min_uvolt: 700000
> > > hw.regulator.vdd-cpus.uvolt: 1100000
> > > hw.regulator.vdd-cpus.always_on: 1
> > > hw.regulator.vdd-cpus.boot_on: 0
> > > hw.regulator.vdd-cpus.enable_cnt: 0
> > > hw.regulator.vdd-cpus.enable_delay: 0
> > > hw.regulator.vdd-cpus.ramp_delay: 0
> > > hw.regulator.vdd-cpus.max_uamp: 0
> > > hw.regulator.vdd-cpus.min_uamp: 0
> > > hw.regulator.vdd-cpus.max_uvolt: 1100000
> > > hw.regulator.vdd-cpus.min_uvolt: 1100000
> > > hw.regulator.vcc-1v2-hsic.uvolt: 1200000
> > > hw.regulator.vcc-1v2-hsic.always_on: 0
> > > hw.regulator.vcc-1v2-hsic.boot_on: 0
> > > hw.regulator.vcc-1v2-hsic.enable_cnt: 0
> > > hw.regulator.vcc-1v2-hsic.enable_delay: 0
> > > hw.regulator.vcc-1v2-hsic.ramp_delay: 0
> > > hw.regulator.vcc-1v2-hsic.max_uamp: 0
> > > hw.regulator.vcc-1v2-hsic.min_uamp: 0
> > > hw.regulator.vcc-1v2-hsic.max_uvolt: 1200000
> > > hw.regulator.vcc-1v2-hsic.min_uvolt: 1200000
> > > hw.regulator.eldo3.always_on: 0
> > > hw.regulator.eldo3.boot_on: 0
> > > hw.regulator.eldo3.enable_cnt: 0
> > > hw.regulator.eldo3.enable_delay: 0
> > > hw.regulator.eldo3.ramp_delay: 0
> > > hw.regulator.eldo3.max_uamp: 0
> > > hw.regulator.eldo3.min_uamp: 0
> > > hw.regulator.eldo3.max_uvolt: 1900000
> > > hw.regulator.eldo3.min_uvolt: 700000
> > > hw.regulator.vcc-dvdd-csi.uvolt: 1800000
> > > hw.regulator.vcc-dvdd-csi.always_on: 0
> > > hw.regulator.vcc-dvdd-csi.boot_on: 0
> > > hw.regulator.vcc-dvdd-csi.enable_cnt: 0
> > > hw.regulator.vcc-dvdd-csi.enable_delay: 0
> > > hw.regulator.vcc-dvdd-csi.ramp_delay: 0
> > > hw.regulator.vcc-dvdd-csi.max_uamp: 0
> > > hw.regulator.vcc-dvdd-csi.min_uamp: 0
> > > hw.regulator.vcc-dvdd-csi.max_uvolt: 1800000
> > > hw.regulator.vcc-dvdd-csi.min_uvolt: 1800000
> > > hw.regulator.cpvdd.uvolt: 1800000
> > > hw.regulator.cpvdd.always_on: 0
> > > hw.regulator.cpvdd.boot_on: 0
> > > hw.regulator.cpvdd.enable_cnt: 0
> > > hw.regulator.cpvdd.enable_delay: 0
> > > hw.regulator.cpvdd.ramp_delay: 0
> > > hw.regulator.cpvdd.max_uamp: 0
> > > hw.regulator.cpvdd.min_uamp: 0
> > > hw.regulator.cpvdd.max_uvolt: 1800000
> > > hw.regulator.cpvdd.min_uvolt: 1800000
> > > hw.regulator.vcc-pll-avcc.uvolt: 3000000
> > > hw.regulator.vcc-pll-avcc.always_on: 1
> > > hw.regulator.vcc-pll-avcc.boot_on: 0
> > > hw.regulator.vcc-pll-avcc.enable_cnt: 0
> > > hw.regulator.vcc-pll-avcc.enable_delay: 0
> > > hw.regulator.vcc-pll-avcc.ramp_delay: 0
> > > hw.regulator.vcc-pll-avcc.max_uamp: 0
> > > hw.regulator.vcc-pll-avcc.min_uamp: 0
> > > hw.regulator.vcc-pll-avcc.max_uvolt: 3000000
> > > hw.regulator.vcc-pll-avcc.min_uvolt: 3000000
> > > hw.regulator.vcc-pl.uvolt: 3300000
> > > hw.regulator.vcc-pl.always_on: 1
> > > hw.regulator.vcc-pl.boot_on: 0
> > > hw.regulator.vcc-pl.enable_cnt: 0
> > > hw.regulator.vcc-pl.enable_delay: 0
> > > hw.regulator.vcc-pl.ramp_delay: 0
> > > hw.regulator.vcc-pl.max_uamp: 0
> > > hw.regulator.vcc-pl.min_uamp: 0
> > > hw.regulator.vcc-pl.max_uvolt: 3300000
> > > hw.regulator.vcc-pl.min_uvolt: 3300000
> > > hw.regulator.vcc-pe.uvolt: 2800000
> > > hw.regulator.vcc-pe.always_on: 1
> > > hw.regulator.vcc-pe.boot_on: 0
> > > hw.regulator.vcc-pe.enable_cnt: 0
> > > hw.regulator.vcc-pe.enable_delay: 0
> > > hw.regulator.vcc-pe.ramp_delay: 0
> > > hw.regulator.vcc-pe.max_uamp: 0
> > > hw.regulator.vcc-pe.min_uamp: 0
> > > hw.regulator.vcc-pe.max_uvolt: 2800000
> > > hw.regulator.vcc-pe.min_uvolt: 2800000
> > 
> >  I've just realized that boot_on isn't 1 so u-boot will not enabled the
> > regulator and we won't too.
> >  I guess that Linux (or armbian) hack on this. We are not supposed to
> > enable a regulator if boot-on is set, only the bootloader is supposed
> > to do that. And the always-on property is only there so we don't
> > disable it if no device "claimed" it.
> 
>  So, after asking on some linux-related irc channel, it seems that
> the Linux kernel enable a regulator if always-on or boot-on is set
> which doesn't reflect what the binding docs says and the regulator
> framework on FreeBSD is based on what the doc says ... I guess we
> should do the same.
>  mmel@ what's your view on this ?

 You might want to try https://reviews.freebsd.org/D22106

 I haven't tested, only compile the code.

> >  The proper patch would be to set the boot-on property in the dts used
> > by u-boot. Easiest way to test that is to :
> > 
> >  $ cd freebsd-ports/sysutils/u-boot-a64-olinuxino/
> >  $ make patch
> >  ...
> >  $ edit work/u-boot-2019.07/arch/arm/dts/sun50i-a64-olinuxino.dts and
> > add 'regulator-boot-on;' under the '&reg_aldo1' node.
> >  $ make
> >  $ dd the new u-boot
> > 
> > > hw.regulator.vcc-wifi-io.uvolt: 3300000
> > > hw.regulator.vcc-wifi-io.always_on: 0
> > > hw.regulator.vcc-wifi-io.boot_on: 0
> > > hw.regulator.vcc-wifi-io.enable_cnt: 0
> > > hw.regulator.vcc-wifi-io.enable_delay: 0
> > > hw.regulator.vcc-wifi-io.ramp_delay: 0
> > > hw.regulator.vcc-wifi-io.max_uamp: 0
> > > hw.regulator.vcc-wifi-io.min_uamp: 0
> > > hw.regulator.vcc-wifi-io.max_uvolt: 3300000
> > > hw.regulator.vcc-wifi-io.min_uvolt: 3300000
> > > hw.regulator.vcc-avdd-csi.uvolt: 2800000
> > > hw.regulator.vcc-avdd-csi.always_on: 0
> > > hw.regulator.vcc-avdd-csi.boot_on: 0
> > > hw.regulator.vcc-avdd-csi.enable_cnt: 0
> > > hw.regulator.vcc-avdd-csi.enable_delay: 0
> > > hw.regulator.vcc-avdd-csi.ramp_delay: 0
> > > hw.regulator.vcc-avdd-csi.max_uamp: 0
> > > hw.regulator.vcc-avdd-csi.min_uamp: 0
> > > hw.regulator.vcc-avdd-csi.max_uvolt: 2800000
> > > hw.regulator.vcc-avdd-csi.min_uvolt: 2800000
> > > hw.regulator.vcc-mipi.uvolt: 3300000
> > > hw.regulator.vcc-mipi.always_on: 0
> > > hw.regulator.vcc-mipi.boot_on: 0
> > > hw.regulator.vcc-mipi.enable_cnt: 0
> > > hw.regulator.vcc-mipi.enable_delay: 0
> > > hw.regulator.vcc-mipi.ramp_delay: 0
> > > hw.regulator.vcc-mipi.max_uamp: 0
> > > hw.regulator.vcc-mipi.min_uamp: 0
> > > hw.regulator.vcc-mipi.max_uvolt: 3300000
> > > hw.regulator.vcc-mipi.min_uvolt: 3300000
> > > hw.regulator.vcc-hdmi.uvolt: 3300000
> > > hw.regulator.vcc-hdmi.always_on: 0
> > > hw.regulator.vcc-hdmi.boot_on: 0
> > > hw.regulator.vcc-hdmi.enable_cnt: 0
> > > hw.regulator.vcc-hdmi.enable_delay: 0
> > > hw.regulator.vcc-hdmi.ramp_delay: 0
> > > hw.regulator.vcc-hdmi.max_uamp: 0
> > > hw.regulator.vcc-hdmi.min_uamp: 0
> > > hw.regulator.vcc-hdmi.max_uvolt: 3300000
> > > hw.regulator.vcc-hdmi.min_uvolt: 3300000
> > > hw.regulator.vdd-sys.uvolt: 1100000
> > > hw.regulator.vdd-sys.always_on: 1
> > > hw.regulator.vdd-sys.boot_on: 0
> > > hw.regulator.vdd-sys.enable_cnt: 0
> > > hw.regulator.vdd-sys.enable_delay: 0
> > > hw.regulator.vdd-sys.ramp_delay: 0
> > > hw.regulator.vdd-sys.max_uamp: 0
> > > hw.regulator.vdd-sys.min_uamp: 0
> > > hw.regulator.vdd-sys.max_uvolt: 1100000
> > > hw.regulator.vdd-sys.min_uvolt: 1100000
> > > hw.regulator.vcc-ddr3.uvolt: 1360000
> > > hw.regulator.vcc-ddr3.always_on: 1
> > > hw.regulator.vcc-ddr3.boot_on: 0
> > > hw.regulator.vcc-ddr3.enable_cnt: 0
> > > hw.regulator.vcc-ddr3.enable_delay: 0
> > > hw.regulator.vcc-ddr3.ramp_delay: 0
> > > hw.regulator.vcc-ddr3.max_uamp: 0
> > > hw.regulator.vcc-ddr3.min_uamp: 0
> > > hw.regulator.vcc-ddr3.max_uvolt: 1360000
> > > hw.regulator.vcc-ddr3.min_uvolt: 1360000
> > > hw.regulator.dcdc4.uvolt: 1100000
> > > hw.regulator.dcdc4.always_on: 0
> > > hw.regulator.dcdc4.boot_on: 0
> > > hw.regulator.dcdc4.enable_cnt: 0
> > > hw.regulator.dcdc4.enable_delay: 0
> > > hw.regulator.dcdc4.ramp_delay: 0
> > > hw.regulator.dcdc4.max_uamp: 0
> > > hw.regulator.dcdc4.min_uamp: 0
> > > hw.regulator.dcdc4.max_uvolt: 1300000
> > > hw.regulator.dcdc4.min_uvolt: 500000
> > > hw.regulator.dcdc3.uvolt: 1100000
> > > hw.regulator.dcdc3.always_on: 0
> > > hw.regulator.dcdc3.boot_on: 0
> > > hw.regulator.dcdc3.enable_cnt: 0
> > > hw.regulator.dcdc3.enable_delay: 0
> > > hw.regulator.dcdc3.ramp_delay: 0
> > > hw.regulator.dcdc3.max_uamp: 0
> > > hw.regulator.dcdc3.min_uamp: 0
> > > hw.regulator.dcdc3.max_uvolt: 1300000
> > > hw.regulator.dcdc3.min_uvolt: 500000
> > > hw.regulator.vdd-cpux.uvolt: 1100000
> > > hw.regulator.vdd-cpux.always_on: 1
> > > hw.regulator.vdd-cpux.boot_on: 0
> > > hw.regulator.vdd-cpux.enable_cnt: 0
> > > hw.regulator.vdd-cpux.enable_delay: 0
> > > hw.regulator.vdd-cpux.ramp_delay: 0
> > > hw.regulator.vdd-cpux.max_uamp: 0
> > > hw.regulator.vdd-cpux.min_uamp: 0
> > > hw.regulator.vdd-cpux.max_uvolt: 1300000
> > > hw.regulator.vdd-cpux.min_uvolt: 1040000
> > > hw.regulator.vcc-3v3.uvolt: 3300000
> > > hw.regulator.vcc-3v3.always_on: 1
> > > hw.regulator.vcc-3v3.boot_on: 0
> > > hw.regulator.vcc-3v3.enable_cnt: 2
> > > hw.regulator.vcc-3v3.enable_delay: 0
> > > hw.regulator.vcc-3v3.ramp_delay: 0
> > > hw.regulator.vcc-3v3.max_uamp: 0
> > > hw.regulator.vcc-3v3.min_uamp: 0
> > > hw.regulator.vcc-3v3.max_uvolt: 3300000
> > > hw.regulator.vcc-3v3.min_uvolt: 3300000
> > > hw.regulator.usb1-vbus.uvolt: 5000000
> > > hw.regulator.usb1-vbus.always_on: 0
> > > hw.regulator.usb1-vbus.boot_on: 1
> > > hw.regulator.usb1-vbus.enable_cnt: 1
> > > hw.regulator.usb1-vbus.enable_delay: 0
> > > hw.regulator.usb1-vbus.ramp_delay: 0
> > > hw.regulator.usb1-vbus.max_uamp: 0
> > > hw.regulator.usb1-vbus.min_uamp: 0
> > > hw.regulator.usb1-vbus.max_uvolt: 5000000
> > > hw.regulator.usb1-vbus.min_uvolt: 5000000
> > > 
> > > On Tue, Oct 15, 2019 at 11:59 AM Emmanuel Vadot <manu@bidouilliste.com>
> > > wrote:
> > > 
> > > > On Tue, 15 Oct 2019 11:46:14 -0400
> > > > Gary Otten <gdotten@gmail.com> wrote:
> > > >
> > > > > Thanks for your response.
> > > > >
> > > > > Freebsd Version 12.0-STABLE
> > > > >
> > > > > root@:/dev # sysctl hw.regulator.vcc-pe
> > > > > hw.regulator.vcc-pe.uvolt: 2800000
> > > > > hw.regulator.vcc-pe.always_on: 1
> > > > > hw.regulator.vcc-pe.boot_on: 0
> > > > > hw.regulator.vcc-pe.enable_cnt: 0
> > > >
> > > >  That's the problem.
> > > >  Can you try with hw.regulator.disable_unused=0 in /boot/loader.conf ?
> > > >  Something is wrong somewhere as we should enable this regulator as the
> > > > always-on prop is set. I'll try to have a look this week.
> > > >
> > > > > hw.regulator.vcc-pe.enable_delay: 0
> > > > > hw.regulator.vcc-pe.ramp_delay: 0
> > > > > hw.regulator.vcc-pe.max_uamp: 0
> > > > > hw.regulator.vcc-pe.min_uamp: 0
> > > > > hw.regulator.vcc-pe.max_uvolt: 2800000
> > > > > hw.regulator.vcc-pe.min_uvolt: 2800000
> > > > >
> > > > > Yes I am testing the pins with a multimeter, I am not seeing any voltage
> > > > > swings at all on Port E.   On the external connector I see 5V on pin 1,
> > > > 3.3
> > > > > on pin 3 and the correct voltage( software setting) on the other pins,
> > > > > except bank E.
> > > > >
> > > > > PB0-PB4   voltage corresponds to software setting.
> > > > > PC4,PC7  voltage corresponds to software setting.
> > > > > PE0-PE17 no voltage swings, doesn't work.
> > > > > PL7-PL12   voltage corresponds to software setting.
> > > > >
> > > > > I don't know if it will  help, but if I make output on a pin low, still
> > > > > when I switch the that pin from In to out,  , I see a small voltage swing
> > > > > in the milli volt range, but when I switch the PE pins from in to out, I
> > > > > don't see that small swing.  Its as if they is no software connection to
> > > > > the PE pins.
> > > > >
> > > > > On Tue, Oct 15, 2019 at 7:18 AM Emmanuel Vadot <manu@bidouilliste.com>
> > > > > wrote:
> > > > >
> > > > > >
> > > > > >  Hi Gary,
> > > > > >
> > > > > > On Mon, 14 Oct 2019 14:46:12 -0400
> > > > > > Gary Otten <gdotten@gmail.com> wrote:
> > > > > >
> > > > > > > I have successfully booted the FreeBSD on the Olimex board which has
> > > > the
> > > > > > > Allwinner A64. I have been experimenting with the gpios,  again with
> > > > > > > success. However the 40 pin connector on the Olimex board exposes
> > > > GPIO
> > > > > > pins
> > > > > > > PB0 - PB4 which function normally (voltage corresponds to software
> > > > > > setting
> > > > > > > for that pin)  and then PE0-PE17 which don't.     I have played with
> > > > most
> > > > > > > of the PE0- PE17 pins with various settings, again nothing works, no
> > > > > > signs
> > > > > > > of activity. I have successfully lit the LED (PE17) with the armbian
> > > > > > > (linux) distribution for this board so I know it should work.
> > > > > > >
> > > > > > > Example
> > > > > > > gpioctl -f /dev/gpioc0 -c PB0 OUT
> > > > > > > gpioctl -f /dev/gpioc0 PB0 1
> > > > > > >
> > > > > > > The pin PB0 then goes high (1) as expected.
> > > > > > >
> > > > > > > gpioctl -f /dev/gpioc0 -c PE17 OUT
> > > > > > > gpioctl -f /dev/gpioc0 PE17 1
> > > > > > >
> > > > > > > No activity on PE17
> > > > > > >
> > > > > > >
> > > > > > > I have dug into the the driver code a bit and the files containing
> > > > the
> > > > > > > settings for this board/processor, but I have had no luck figuring it
> > > > > > out.
> > > > > > >  I have studied the Allwinner a64 manual but I haven't had luck
> > > > figuring
> > > > > > > out any other settings that might work.    I think I am missing a
> > > > simple
> > > > > > > setting but can't figure it out, does anyone know how to get pins
> > > > PE0 to
> > > > > > > PE17 to work? Thanks.
> > > > > >
> > > > > >  What version of FreeBSD are you booting on this board ?
> > > > > >  PE is a bit special on the Olinuxino as it's also used for MIPI-CSI
> > > > > > and it's drived at 2.8V by default. It's using the regulator ALDO1 from
> > > > > > the AXP PMIC and you should be able to confirm that it's enabled by
> > > > > > doing sysctl hw.regulator.vcc-pe
> > > > > >  Check for the .enable sysctl
> > > > > >  It should be on as there is the always-on property in the DTS.
> > > > > >  By default I think that the gpio pins are configured for 20mA so I
> > > > > > don't know if it would be enough for this led. If you have a multimeter
> > > > > > it would be good to confirm if you have any voltage on the ext
> > > > > > connector (you can use any PE pins, from what I see from the schematics
> > > > > > they are all safe to play with).
> > > > > >
> > > > > > --
> > > > > > Emmanuel Vadot <manu@bidouilliste.com>
> > > > > >
> > > >
> > > >
> > > > --
> > > > Emmanuel Vadot <manu@bidouilliste.com>
> > > >
> > 
> > 
> > -- 
> > Emmanuel Vadot <manu@bidouilliste.com> <manu@freebsd.org>
> > _______________________________________________
> > freebsd-arm@freebsd.org mailing list
> > https://lists.freebsd.org/mailman/listinfo/freebsd-arm
> > To unsubscribe, send any mail to "freebsd-arm-unsubscribe@freebsd.org"
> 
> 
> -- 
> Emmanuel Vadot <manu@bidouilliste.com> <manu@freebsd.org>


-- 
Emmanuel Vadot <manu@bidouilliste.com> <manu@freebsd.org>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20191022155716.3ebf30f63e02409aee2a6679>