Date: Sat, 4 Jul 2020 13:45:50 +0300 From: Daniel Braniss <danny@cs.huji.ac.il> To: =?utf-8?Q?Manuel_St=C3=BChn?= <freebsdnewbie@freenet.de> Cc: "freebsd-arm@freebsd.org" <arm@freebsd.org> Subject: Re: allwinner/i2c interrupt storm detected Message-ID: <E315DAED-3BDB-44CB-83D8-B8400BD4951F@cs.huji.ac.il> In-Reply-To: <20200704122944.64723bbb606d6e73128d2568@freenet.de> References: <10ACCB56-E18D-4102-B4E2-094157854AB7@cs.huji.ac.il> <20200704122944.64723bbb606d6e73128d2568@freenet.de>
next in thread | previous in thread | raw e-mail | index | archive | help
> On 4 Jul 2020, at 13:29, Manuel St=C3=BChn <freebsdnewbie@freenet.de> = wrote: >=20 > On Tue, 30 Jun 2020 16:01:41 +0300 > Daniel Braniss <danny@cs.huji.ac.il <mailto:danny@cs.huji.ac.il>> = wrote: >=20 >> Hi, >>=20 >> after a long time I decided to try and upgrade to stable 12.1 r362793 = since I saw some changes where done=20 >> with respect to the DTS and twsi.c,=20 >>=20 >> if nothing is connected to the i2c, i2c -s just hangs, >>=20 >> if something is connected this is what i get on the console after = typing ?i2c -s? >>=20 >>=20 >> Hardware may not support START/STOP scanning; trinterrupt storm = detected on "gic0,s6:"; throttling interrupt source >> ying less-reliable read method. >> interrupt storm detected on "gic0,s6:"; throttling interrupt source >> interrupt storm detected on "gic0,s6:"; throttling interrupt source >> ? >>=20 >> and >> neo-04> vmstat -i >> interrupt total = rate >> gic0,p13:-ic_timer0 16052 = 164 >> gic0,s0: uart2 318 = 3 >> gic0,s6: iichb0 13034 = 133 >> gic0,s60: aw_mmc0 1293 = 13 >> gic0,s82: awg0 334 = 3 >> gic0,s120: pmu0 49725 = 509 >> cpu0:rendezvous 18 = 0 >> cpu1:rendezvous 50 = 1 >> cpu2:rendezvous 51 = 1 >> cpu3:rendezvous 40 = 0 >> cpu0:preempt 2691 = 28 >> cpu1:preempt 3165 = 32 >> cpu2:preempt 2778 = 28 >> cpu3:preempt 2986 = 31 >> cpu0:hardclock 15 = 0 >> Total 92550 = 946 >>=20 >>=20 >> the hardware is an NanoPi Neo >> ---<<BOOT>>--- >> KDB: debugger backends: ddb >> KDB: current backend: ddb >> Copyright (c) 1992-2020 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 is a registered trademark of The FreeBSD Foundation. >> FreeBSD 12.1-STABLE #0 r362793M: Tue Jun 30 11:39:11 IDT 2020 >> = danny@nrnd:/home/obj/nrnd/arm/neo/vol/rnd/stable/12/arm.armv7/sys/AWGEN = arm >> FreeBSD clang version 10.0.0 (git@github.com = <mailto:git@github.com>:llvm/llvm-project.git = llvmorg-10.0.0-0-gd32170dbd5b) >> VT: init without driver. >> No PSCI/SMCCC call function found >> CPU: ARM Cortex-A7 r0p5 (ECO: 0x00000000) >> ? >>=20 >=20 > I do not have a IRQ-Storm on my NanoPI NEO2, but a "i2s -s" does never = return. Commit v356609 broke i2c-support on my hardware (reverting this = single commit fixed it, bugreport filed: = https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D247576 = <https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D247576>). >=20 > Perhaps it is worth a try for you also to revert this commit and test = again... >=20 before the latest changes it works fine, and if you add my patch to it, = i2s -s will not hang: > -- twsi.c (revision 346538) > +++ twsi.c (working copy) > @@ -458,8 +458,15 @@ > if (sc->msg->len =3D=3D 1) > sc->control_val &=3D ~TWSI_CONTROL_ACK; > TWSI_WRITE(sc, sc->reg_control, sc->control_val | = TWSI_CONTROL_START); > - while (sc->error =3D=3D 0 && sc->transfer !=3D 0) { > - pause_sbt("twsi", SBT_1MS * 30, SBT_1MS, 0); > + { > + int count =3D 10; > + while (sc->error =3D=3D 0 && sc->transfer !=3D = 0) { > + pause_sbt("twsi", SBT_1MS * 30, = SBT_1MS, 0); > + if(count-- =3D=3D 0) { > + sc->error =3D EDEADLK; > + break; > + } > + } > } >=20 > debugf(dev, "Done with msg[%d]\n", i); cheers, danny >=20 > BR > Manuel
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?E315DAED-3BDB-44CB-83D8-B8400BD4951F>