Skip site navigation (1)Skip section navigation (2)
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>