[PATCH] wdog: imx-wd: distinguish for WICR/WMCR support

Sascha Hauer s.hauer at pengutronix.de
Mon Jul 4 23:36:53 PDT 2016


On Tue, Jul 05, 2016 at 12:40:29AM +0200, Alexander Kurz wrote:
> 
> 
> On Mon, 4 Jul 2016, Sascha Hauer wrote:
> 
> > On Sat, Jul 02, 2016 at 04:50:02PM +0200, Alexander Kurz wrote:
> > > The IMX watchdog driver currently distinguishes two variants: imx1-wdt
> > > using a 32-bit register interface and imx21-wdt with a 16-bit register
> > > interface.
> > > Further distinguishment is required: the i.MX21, i.MX27 and i.MX31 SOC
> > > do provide a three register interface (WCR, WSR, WRSR) while later SOC
> > > starting with i.MX25 provide two additional registers (WICR and WMCR).
> > > The five-register interface is also used on i.MX35, and Cortex-A based
> > > i.MX SOC.
> > > 
> > > With commit 4cc0a3d9c547 ("wdog: imx-wd: Disable watchdog powerdown counter")
> > > one of the extended registers (WMCR) got used first.
> > > 
> > > Make imx-wd distinguish between the three and five register Watchdog Timers
> > > and introduce the five register support as imx25-wdt.
> > > 
> > > Note on DTS: keep the i.MX related DTS in sync with linux and make the
> > > existing programming model fsl,imx21-wdt behave like fsl,imx25-wdt for
> > > the mean time until this is addressed upstream in linux.
> > > 
> > > fixes: 4cc0a3d9c547 ("wdog: imx-wd: Disable watchdog powerdown counter")
> > 
> > So beginning with 4cc0a3d9c547 i.MX21, i.MX27 and i.MX31 accidently use
> > the five-register interface. What are the practical consequences? Does
> > the driver still work properly on these SoCs?
> The access of this non-existing register triggers a crash of a barebox run 
> out of the factory shipped u-boot on an MX31 based Kindle-DX (u-boot gets 
> re-started, probably some abort handler) - I dont have any JTAG interface 
> running yet to see what's going on in detail.

Just tested on i.MX27, it doesn't crash there. I noticed some time ago
that i.MX27 and i.MX31 behave differently when accessing non existent
registers.

> 
> > 
> > I'm aksing because even with this patch...
> > 
> > >  		.compatible = "fsl,imx21-wdt",
> > > -		.data = &imx21_wd_ops,
> > > +		/* FIXME: backward compaibility for imported linux DTS
> > > +		   Most references to fsl,imx21-wdt from linux imported DTS
> > > +		   linux actually mean fsl,imx25-wdt. Make fsl,imx21-wdt
> > > +		   behave like fsl,imx25-wdt for the mean time until
> > > +		   this is fixed there */
> > > +		.data = &imx25_wd_ops,
> > > +	}, {
> > 
> > ...device tree based i.MX21/27/31 boards still use the five-register
> > interface. There are no i.MX21/31 based device tree boards, but there
> > are some i.MX27 boards with device tree support.
> Yes, this point is open.
> I did not want to break the sync between the linux und barebox IMX DTS 
> stock. My Idea was:
> 1) do this first fix in barebox which will not cover DTS (do 
>  workaround "wdt21 behaves like wdt25") 
> 2) fix it in linux, wait till next rc which contains the fix
> 3) linux DTS gets imported into barebox, and the workarkound wdt21 behaves   
>  like wdt25" can be removed

Sounds good. How about encapsulating the WMCR access in a

	if (cpu_is_mx25() || cpu_is_mx35() || cpu_is_mx51() ||
	    cpu_is_mx53() || cpu_is_mx6())

until we can properly distinguish between the different watchdog units?

Sascha

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



More information about the barebox mailing list