rtc: armada38x: Follow the new recommendation for errata implementation
authorGregory CLEMENT <gregory.clement@free-electrons.com>
Wed, 21 Dec 2016 10:28:16 +0000 (11:28 +0100)
committerAlexandre Belloni <alexandre.belloni@free-electrons.com>
Wed, 11 Jan 2017 16:23:03 +0000 (17:23 +0100)
commit844a3073c9896dd252810e388c2fd881efb22d66
tree02d175884e5898de94a400c170f5de2b714b2889
parente3dcb74991b792cb9eecae7cd5227b436f8e69ce
rtc: armada38x: Follow the new recommendation for errata implementation

According to RES-3124064:

The device supports CPU write and read access to the RTC time register.
However, due to this restriction, read and write from/to internal RTC
register may fail.

Workaround:
General setup:
1. Configure the RTC Mbus Bridge Timing Control register (offset 0x184A0)
   to value 0xFD4D4FFF
   Write RTC WRCLK Period to its maximum value (0x3FF)
   Write RTC WRCLK setup to 0x29
   Write RTC WRCLK High Time to 0x53 (default value)
   Write RTC Read Output Delay to its maximum value (0x1F)
   Mbus - Read All Byte Enable to 0x1 (default value)
2. Configure the RTC Test Configuration Register (offset 0xA381C) bit3
   to '1' (Reserved, Marvell internal)

For any RTC register read operation:
1. Read the requested register 100 times.
2. Find the result that appears most frequently and use this result
   as the correct value.

For any RTC register write operation:
1. Issue two dummy writes of 0x0 to the RTC Status register (offset
   0xA3800).
2. Write the time to the RTC Time register (offset 0xA380C).

This patch is based on the work of Shaker Daibes

Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
drivers/rtc/rtc-armada38x.c