Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 7 Apr 2018 21:34:13 +0200
From:      Milan Obuch <freebsd-arm@dino.sk>
To:        freebsd-arm@freebsd.org
Subject:   Problem with regulator_shutdown() introduced in r331989
Message-ID:  <20180407213413.0103754b@zeta.dino.sk>

next in thread | raw e-mail | index | archive | help
Hi,

after some time with running slightly older sources based kernel I
decided to upgrade, but current sources based kernel does not boot on
Orange Pi Zero, maybe on other Allwinner based boards too, I did not
test them. Problem manifests itself on console with following:

Release APs
CPU(3) applied BP hardening: not necessary
CPU(1) applied BP hardening: not necessary
CPU(2) applied BP hardening: not necessary
WARNING: WITNESS option enabled, expect reduced performance.
regulator: shuting down vcc3v0
Trying to mount root from ufs:/dev/mmcsd0s2a [rw]...
GEOM: new disk mmcsd0
regulator: shuting down vcc5v0
regulator: shuting down vcc-wifi
mmc0: panic: Invalid enable count
cpuid = 0
time = 1
KDB: stack backtrace:
db_trace_self() at db_trace_self
	 pc = 0xc03be8dc  lr = 0xc00bba1c (db_trace_self_wrapper+0x30)
	 sp = 0xc0713c90  fp = 0xc0713da8
db_trace_self_wrapper() at db_trace_self_wrapper+0x30
	 pc = 0xc00bba1c  lr = 0xc01ea0d8 (vpanic+0x154)
	 sp = 0xc0713db0  fp = 0xc0713dd0
	 r4 = 0x00000100  r5 = 0x00000001
	 r6 = 0xc0431ec1  r7 = 0xc0553cc8
vpanic() at vpanic+0x154
	 pc = 0xc01ea0d8  lr = 0xc01e9ed0 (doadump)
	 sp = 0xc0713dd8  fp = 0xc0713dec
	 r4 = 0xc0431ec1  r5 = 0xc0713df4
	 r6 = 0x00000000  r7 = 0x00000000
	 r8 = 0xc2df0400  r9 = 0xc053b988
	r10 = 0xc1b71e80
doadump() at doadump
	 pc = 0xc01e9ed0  lr = 0xc00cd9e8 (regnode_fixed_enable+0x150)
	 sp = 0xc0713df4  fp = 0xc0713e20
	 r4 = 0x00000000  r5 = 0xc1b71e80
regnode_fixed_enable() at regnode_fixed_enable+0x150
	 pc = 0xc00cd9e8  lr = 0xc00cbb60 (regnode_stop+0x1d4)
	 sp = 0xc0713e28  fp = 0xc0713e48
	 r4 = 0x00000000  r5 = 0xc2ded780
	 r6 = 0xc2ded7b4  r7 = 0xc0504a00
	 r8 = 0xc05cacc8  r9 = 0xc053b988
	r10 = 0xc05cabd0
regnode_stop() at regnode_stop+0x1d4
	 pc = 0xc00cbb60  lr = 0xc00cd2f0 (regulator_shutdown+0x9c)
	 sp = 0xc0713e50  fp = 0xc0713e68
	 r4 = 0xc0548a54  r5 = 0xc2ded780
	 r6 = 0xc0431da6  r7 = 0xc0551c8c
regulator_shutdown() at regulator_shutdown+0x9c
	 pc = 0xc00cd2f0  lr = 0xc0189500 (mi_startup+0x18c)
	 sp = 0xc0713e70  fp = 0xc0713e90
	 r4 = 0xc05caccc  r5 = 0x00000001
	 r6 = 0xc053ac6c  r7 = 0x00000000
mi_startup() at mi_startup+0x18c
	 pc = 0xc0189500  lr = 0xc0000244 (_start+0x144)
	 sp = 0xc0713e98  fp = 0x00000000
	 r4 = 0xc0000378  r5 = 0xc05e4000
	 r6 = 0x42050680  r7 = 0x00c52078
	 r8 = 0xc06dc000  r9 = 0x00000002
	r10 = 0x01c28000
_start() at _start+0x144
	 pc = 0xc0000244  lr = 0xc0000244 (_start+0x144)
	 sp = 0xc0713e98  fp = 0x00000000
KDB: enter: panic
[ thread pid 0 tid 100000 ]
Stopped at      $d.3:   ldrb    r15, [r15, r15, ror r15]!
db> 

I can override it with either manually entering

set hw.regulator.disable_unused=0

on loader prompt, or putting line

hw.regulator.disable_unused=0

into /boot/loader.conf file.

Either way, system boots then normally and works as expected. Has
anybody any explanation what's going on? What purpose does this
function actually serve? Reading source, disabling unused regulatos
looks like a way to conserve power, but I am not sure if I think about
it the right way. Anyway, something is wrong - why has mmc0 invalid
enable count? Looks strange to me...

Regards,
Milan



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