[U-Boot] [PATCH] Revert "imx: wdog: correct wcr register settings"
Fabio Estevam
festevam at gmail.com
Fri Oct 2 01:11:35 CEST 2015
On Thu, Oct 1, 2015 at 5:50 PM, Wolfgang Denk <wd at denx.de> wrote:
> On ARM (a LE architecture), clrsetbits_le16() maps down into:
>
> clrsetbits_le16 ->
> out_le16 / in_le16 ->
> out_arch, w,le16 / in_arch, w,le16 ->
> __raw_writew(cpu_to_le16()) / le16__to_cpu(__raw_readw()) ->
> __raw_writew() / __raw_readw()
>
> while
>
> writew() ->
> __raw_writew(cpu_to_le16(v),__mem_pci(c))
> __raw_writew()
>
> Both map into __raw_writew() [which then boild down into
> __arch_putw() which is just a volatile unsigned short write access.
>
> So both clrsetbits_le16() and writew() are little endian accessors.
> In which way would one write other data to the device than the other?
Yes, you are right.
The issue seems to be related to the effect of writing doing
'writew(WCR_WDE, &wdog->wcr)', which writes 0x40 to the register WCR
versus 'clrsetbits_le16(&wdog->wcr, 0, WCR_WDE)' which only enables
the WDE bit.
The kernel driver also does the full write to the WCR register(like we
used to have prior to 623d96e89aca6)
https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/drivers/watchdog/imx2_wdt.c?id=refs/tags/v4.2.2#n86
This has also the effect of clearing the SRS bit.
By the way we need to implement erratum ERR004346 (WDOG: WDOG SRS bit
requires to be
written twice) in U-boot, but this is an unrelated issue.
So the revert seems to be appropriate. The commit log should be adjusted though.
Regards,
Fabio Estevam
More information about the U-Boot
mailing list