s390/time: add support for the TOD clock epoch extension
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Thu, 27 Oct 2016 10:41:39 +0000 (12:41 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Wed, 26 Jul 2017 06:25:14 +0000 (08:25 +0200)
commit6e2ef5e4f6cc57344762932d70d38ba4ec65fa8b
tree51e148a3b1e6991260af2ac51e6b1a6d5eb0f83a
parent45be0a02f8110a13502fac6167a893c7c0eff432
s390/time: add support for the TOD clock epoch extension

The TOD epoch extension adds 8 epoch bits to the TOD clock to provide
a continuous clock after 2042/09/17. The store-clock-extended (STCKE)
instruction will store the epoch index in the first byte of the
16 bytes stored by the instruction. The read_boot_clock64 and the
read_presistent_clock64 functions need to take the additional bits
into account to give the correct result after 2042/09/17.

The clock-comparator register will stay 64 bit wide. The comparison
of the clock-comparator with the TOD clock is limited to bytes
1 to 8 of the extended TOD format. To deal with the overflow problem
due to an epoch change the clock-comparator sign control in CR0 can
be used to switch the comparison of the 64-bit TOD clock with the
clock-comparator to a signed comparison.

The decision between the signed vs. unsigned clock-comparator
comparisons is done at boot time. Only if the TOD clock is in the
second half of a 142 year epoch the signed comparison is used.
This solves the epoch overflow issue as long as the machine is
booted at least once in an epoch.

Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
12 files changed:
arch/s390/include/asm/lowcore.h
arch/s390/include/asm/setup.h
arch/s390/include/asm/timex.h
arch/s390/kernel/asm-offsets.c
arch/s390/kernel/debug.c
arch/s390/kernel/early.c
arch/s390/kernel/head.S
arch/s390/kernel/head64.S
arch/s390/kernel/irq.c
arch/s390/kernel/setup.c
arch/s390/kernel/time.c
arch/s390/lib/delay.c