Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 27 Sep 2015 15:29:49 -0300
From:      Luiz Otavio O Souza <lists.br@gmail.com>
To:        sparvu@kronometrix.org
Cc:        "freebsd-arm@freebsd.org" <freebsd-arm@freebsd.org>
Subject:   Re: RBPI2 ds1307 rtc kernel panic
Message-ID:  <CAB=2f8y2Lcp5eHyc=nbgQ_-OZyJOrNwKqK4wstnH77kd47hZag@mail.gmail.com>
In-Reply-To: <5607C63D.2010203@kronometrix.org>
References:  <5607C63D.2010203@kronometrix.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On 27 September 2015 at 07:34, Stefan Parvu wrote:
>
> Im seeing kernel panics after I have compiled support for DS1307 RTC
> device on RBPI2 hardware:
>
> panic: sleepq_add: td 0xc395b000 to sleep on wchan 0xc39fa380 with
> sleeping prohibited
>
> The system here:
>
> iichb0: <BCM2708/2835 BSC controller> mem 0x205000-0x20501f irq 61 on
> simplebus0
> iicbus0: <OFW I2C bus> on iichb0
> iic0: <I2C generic I/O> on iicbus0
> iichb1: <BCM2708/2835 BSC controller> mem 0x804000-0x80401f irq 61 on
> simplebus0
> iicbus1: <OFW I2C bus> on iichb1
> iic1: <I2C generic I/O> on iicbus1
> ds13070: <Maxim DS1307 RTC> at addr 0xd0 on iicbus1
>
>
> FreeBSD rpi2 11.0-CURRENT FreeBSD 11.0-CURRENT #0 r288098: Thu Aug 20
> 04:00:38 UTC 2015     root@rpi2:/usr/obj/usr/src/sys/KPI2  arm
>
>
> I have compiled the kernel by Vadim's procedure [1] but modified for
> RBPI2: bcm2836.dtsi:  https://github.com/vzaigrin/ds1307/issues/1
>
> Anyone any ideas why the crash ?
> Many thanks
>
> [1]
> https://vzaigrin.wordpress.com/2015/08/04/real-time-clock-on-raspberry-pi-with-freebsd-11/
>
> --
> Stefan Parvu <sparvu@kronometrix.org>

The crash happens when you enable ntpd with an i2c RTC, this is a know issue.

There are two workarounds:

1) sysctl machdep.rtc_save_period=0

2) use gpioiic(4) instead of the hardware i2c controller.  gpioiic
doesn't sleeps and this will prevent the crash. The setup of gpioiic
requires a few more steps, so usually the option 1 is preferred.

The crash happens because ntpd tries to update the RTC from a callout
and callout functions should not sleep (which happens with most of i2c
controllers we support on ARM).

Also, I committed the change that includes #address-cells and
#size-cells to RPi2 DTS file (bcm2836.dtsi). Thanks Jukka for noticing
this.

Luiz



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAB=2f8y2Lcp5eHyc=nbgQ_-OZyJOrNwKqK4wstnH77kd47hZag>