ARMV8 datasheet学习笔记4:AArch64系统级体系结构之Generic timer

1.前言

2.generate timer

2.1 概述

  1. 提供了一个系统计数器,用来实时测量流逝的时间;
  2. 提供了一个虚拟计数器,用来测量某个虚拟机上流逝的虚拟时间;
  3. 定时器,每隔一段时间会触发事件,支持正向计时和倒计时;
  4. 通用timer实现必须包含一个内存映射的系统组件:提供system counter;

 2.2 完整的generic timer组件

  • System counter
  • Generic timer的PE实现

(1)一个物理的counter,它访问system counter的计数值;

(2)一个虚拟的counter,它访问虚拟时间;

(3)一组timers,所有的异常级别都实现了一个timer:

EL1物理timer;

EL2物理timer;

EL3物理timer;

虚拟timer

  • Generic timer系统级的内存映射实现

(1)内存映射的counter模块(必须),控制了system counter;

(2)内存映射的timer模块(必须),控制system timer;

(3)内存映射的timers(可选)

2.3 System Counter

 

概述

  1. 规格

(1)       Width:至少56bit;

(2)       频率:支持固定频率,典型是1-50MHZ;

(3)       ROLL-OVER:翻转时间不少于40 years;

(4)       Accuracy:未指定,24小时不多于10S;

(5)       Start-up:从0开始。

  1. System counter一旦配置并运行,必须提供统一的 system time view;
  2. System counter电源域必须常开;
  3. 为了支持低功耗,低频率可以一个时钟累加一个比1大的数;

初始化并读取system counter频率

系统启动阶段,初始化system counter的时钟;

System counter的内存映射控制

需要通过内存映射(ioremap??)的方式对system counter进行控制:

  1. 使能和禁用计数器;
  2. 设置计数器的值;
  3. 改变操作模式,更新频率或步长值;
  4. 使能halt-on-debug,可以用来suspend counting.

3. AArch64 generic timer

3.1 Physical counter(包含system connter的count值)

访问physical counter

通过访问CNTPCT_EL0来获取64bit物理count值

虚拟counter

指示虚拟时间

事件流

通过system counter周期性的产生事件

 3.2 多个定时器

实现的timers

如果EL3使用AArch64则实现的定时器有:

  1. EL1物理定时器;
  2. Non-secure EL2物理定时器;
  3. Secure EL3物理定时器;

timer的输出

  1. 提供一个输出信号给sysem;
  2. 如果PE连到GIC,会想PE发送PPI信号

Timer regs

  1. 一个64bit compare值寄存器,提供了64bit无符加计数器;
  2. 一个32bit timer寄存器,提供了32bit有符号减计数器;
  3. 一个32bit control寄存器

4. 参考文档

[1] DDI0487A_k_armv8_arm_iss10775.pdf

原文地址:https://www.cnblogs.com/smartjourneys/p/6848154.html