[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