Mainline:Broadcom Kona/BCM590xx/RTC: Difference between revisions

No edit summary
No edit summary
 
(10 intermediate revisions by the same user not shown)
Line 10: Line 10:
!Offset
!Offset
!Purpose
!Purpose
!Mask
!Value
!Value
|-
|-
|0
|0
|Second
|Second (<code>SC</code>)
|0x3F
|Current second, from 0 to 59.
|Current second, from 0 to 59.
|-
|-
|1
|1
|Minute
|Minute (<code>MN</code>)
|0x3F
|Current minute of the hour, from 0 to 59.
|Current minute of the hour, from 0 to 59.
|-
|-
|2
|2
|Hour
|Hour (<code>HR</code>)
|0x1F
|Current hour of the day, from 0 to 23.
|Current hour of the day, from 0 to 23.
|-
|-
|3
|3
|Day of month
|Weekday (<code>WD</code>)
|Day of month, starting from 0.
|0x07
|Day of week, from 0 to 6. Appears to roll over whenever the day changes; {{speculation|the hardware does not enforce a specific start.}} Sets itself to 0 on reset. '''Not used in downstream.'''<br>{{speculation|The day of month sets itself to 0 on reset, which should be an invalid value, but would suggest that the range is 0 -> Sunday, 6 -> Monday, but there is no downstream code to confirm this.}}
|-
|-
|4
|4
|Month
|Day of month (<code>DT</code>)
|Number of the month. Sets itself to 0 on reset; 1 to 12 represent January-December. {{speculation|...or does it? The downstream driver would suggest so, but it seems weird. Investigate.}}
|0x1F
|Day of month, starting from 1. Sets itself to 0 on reset.
|-
|-
|5
|5
|Year
|Month (<code>MT_WD</code>)
|0x0F
|Number of the month. 1 to 12 represent January-December.
|-
|6
|Year (<code>YR</code>)
|0xFF
|Amount of years since 2000 (0 = 2000, 1 = 2001, etc.)
|Amount of years since 2000 (0 = 2000, 1 = 2001, etc.)
|}
|}


This exact format is used for both the time and alarm registers.
This exact format is used for both the time and alarm registers. The masks are enforced by hardware - any bit written outside of the mask gets ignored.
 
TODO: What happens on year overflow? Is there a reason as to why the downstream driver limits the values it gets?


== Getting the time ==
== Getting the time ==
Line 46: Line 56:


There are interrupts for updates of each of the time values.
There are interrupts for updates of each of the time values.
The default reset value is <code>0 0 0 0 0 1 7</code> (2007-01-00 00:00:00, weekday 0). Notably, the day of month is invalid (0).
If the date overflows (1 second after 2255-12-31 23:59:59), the clock returns to 2255-12-01 00:00:00.
=== Adjustment IRQ ===
There is an RTCADJ IRQ that is supposed to fire when the RTC value is invalid (at least according to the comments of the downstream driver, and the downstream BCM59055 RTC driver). However, I haven't been able to get it to fire in my testing.


== Alarm ==
== Alarm ==