1 Generic Timer

The following are the requirements related to ARM Generic Timer [1] interface exposed by Xen to Arm64 domains.

1.1 Probe the Generic Timer device tree node from a domain

XenSwdgn~arm64_generic_timer_probe_dt~1

Description: Xen shall generate a device tree node for the Generic Timer (in accordance to ARM architected timer device tree binding [2]) in the domain device tree.

Rationale:

Comments: Domains can detect the presence of the Generic Timer device tree node.

Covers:

1.2 Read system counter frequency

XenSwdgn~arm64_generic_timer_read_freq~1

Description: Xen shall expose the frequency of the system counter to the domains in CNTFRQEL0 register.

Rationale:

Comments:

Covers:

1.3 Access CNTKCTLEL1 system register from a domain

XenSwdgn~arm64_generic_timer_access_cntkctlel1~1

Description: Xen shall expose Counter-timer Kernel Control register (CNTKCTLEL1) to the domains.

Rationale:

Comments:

Covers:

1.4 Access virtual timer from a domain

XenSwdgn~arm64_generic_timer_access_virtual_timer~1

Description: Xen shall expose the virtual timer registers (CNTVCTEL0, CNTVCTL_EL0, CNTVCVAL_EL0, CNTVTVAL_EL0) to the domains.

Rationale:

Comments:

Covers:

1.5 Access physical timer from a domain

XenSwdgn~arm64_generic_timer_access_physical_timer~1

Description: Xen shall expose physical timer registers (CNTPCTEL0, CNTPCTL_EL0, CNTPCVAL_EL0, CNTPTVAL_EL0) to the domains.

Rationale:

Comments:

Covers:

1.6 Trigger the virtual timer interrupt from a domain

XenSwdgn~arm64_generic_timer_trigger_virtual_interrupt~1

Description: Xen shall generate virtual timer interrupts to domains when the virtual timer condition is met.

Rationale:

Comments:

Covers:

1.7 Trigger the physical timer interrupt from a domain

XenSwdgn~arm64_generic_timer_trigger_physical_interrupt~1

Description: Xen shall generate physical timer interrupts to domains when the physical timer condition is met.

Rationale:

Comments:

Covers:

2 Assumption of Use on the Platform

2.1 Expose system timer frequency via register

XenSwdgn~arm64_generic_timer_plat_program_cntfrq_el0~1

Description: CNTFRQEL0 register shall be programmed with the value of the system timer frequency.

Rationale: Xen reads the CNTFRQEL0 register to get the value of system timer frequency.

Comments: While there is a provision to get this value by reading the "clock-frequency" dt property [2], the use of this property is strongly discouraged.

Covers:

[1] Arm Architecture Reference Manual for A-profile architecture, Chapter 11 [2] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/timer/arm,arch_timer.yaml