GIC-500是ARM GICv3的一个实现,它只支持ARMv8核和实现了GIC Stream协议的GIC CPU Interface,比如Cortex-A53。

关于GIC有四份相关文档:《Cortex-A53 TRM》介绍了GIC CPU Interface;《ARMv8-A Architecture Profile》提供了GIC CPU Interface的细节;《GIC-500 TRM》介绍了GICv3的一个实现;《GICv3/4 Architecture Specification》介绍了GIC架构细节规范。

这四份文档可以分为两部分:GIC CPU Interface和GIC本身。

1 Introduction

SGIs - Software Generated Interrupts

ITS - Interrupt Translation Service

LPIs - Locality-specific Peripheral Interrupts

SPIs - Shared Peripheral Interrupts

PPIs - Private Peripheral Interrupts

1.1 About the GIC-500

GIC-500支持高达128核,只支持ARMv8架构的核和GIC Stream Protocol接口的GIC CPU接口,Physical interrupt signals,SGIs,从AXI4 slave端口产生的中断,ITS提供ID转换等功能。

GIC-500从AXI4 Slave或者Physical interrupt inputs接收中断,和CPU通过AXI4-Stream接口连接,通过AXI4 Slave端口被编程。

GIC CPU interface属于GIC一部分,但不属于GIC-500,而更倾向于属于ARMv8 core的一部分。

GIC-500的Distributor->Redistributor->Cluster->Core的拓扑结构:

ARM架构通过MPIDR(Multiprocessor Affinity Register)寄存器给给每个CPU制定一个逻辑地址。

ARMv7支持三层,ARMv8支持四层,MPIDR有着明显的分层结构,<Aff3>.<Aff2>.<Aff1>.<Aff0>。

GIC-500只支持两层,所以MPIDR的值只能是0.0.c.d,c是process层,d是core层。GIC-500支持128 core或者32 processor,并且每processor不超过8 core。

1.3 Features

  • 支持高达128 core
  • affinity-level 1支持高达32 cluster
  • 每cluster高达8 core
  • 16个SGIs,ID0-ID15
  • 16个PPIs,ID16-ID31
  • 基于Affinity的可编程中断路由
  • 中断屏蔽和优先级控制
  • 每中断可配置32个优先级

2 Functional Description

2.1 About the functions

ICB: Interrupt Control Block.

ICB State RAM是保存SPIs、PPIs、SGIs各种配置的地方。同样LPI State RAM和ITE State RAM是保存LPIs和ITS设置的地方。

2.2 Interfaces

从Figure 2-1可以看出GIC-500和外部的接口包括:AXI4 Slave Interface、AXI4 Master Interface、RAM Interfaces、Physical interrupt signals、GIC-500 Stream Protocal Interface。

AXI4 Slave Interface:可以通过此接口对GIC-500所有部分编程,包括Distributor、Redistributor、ITS。同时也负责处理message-based中断,也即通过写AXI4 slave interface产生的中断。message-based中断可以产生SGI/LPI类型的中断。

AXI4 Master Interface:GIC-500通过此接口访问主内存,包括ITS的translation tables、ITS command queue、LPI配置表、LPI pending table等。

RAM Interfaces:和各种State RAM接口。

Physical interrupt signals:产生SPIs和PPIs类型中断的信号,可配置成level-sensitive、edge-triggered。

GIC-500 Stream Protocal Interface:用于发送中断给CPU核,并且从CPU接收激活中断的通知。

2.3 Operation

GIC-500可以分成三个主要部分:ITS(将外设message-based中断翻译成LPIs)、Distributor(接收Wire interrupts或者编程接口过来的中断,然后根据优先级发送到CPU Interface)、Redistributor(每CPU核一个Redistributor,保存每个核的PPIs/SGIs/:PIs状态)。

GIC-500支持不同类型的中断,主要包括:

SGIs - 是核间中断,从一个核触发发送到另外核。一个核上触发的中断,并不影响其他核上同样中断号,并且每个核的SGI设置都是独立的。可以通过System register或者GICD_SGIR触发中断,共16个独立的SGIs,ID0-ID15。

PPIs - 用于和CPU和紧耦合的外设,因此PPI仅发送到相关的CPU核。一个核上触发的PPI总段并不会影响其他核相同ID号的PPI,而且每个核的PPI设置也是相互独立的。

SPIs - 用于不和特定CPU和紧耦合的外设,一个核上触发的SPI中断,同时也会激活其他核上的中断。但是也可以通过编程设置SPI到特定的核。GIC-500只允许一个核响应SPI中断,SPI的设置是核间共享的。SPI可以被wire input或者AXI4 slave programming interface触发。GIC-500支持高达960各终端,spi[991:32]。

LPIs - 多用于产生message-based类型中断的外设,一个LPI同一时刻只能指向一个核。

Interrupt group:Group 0、Group 1 Secure、Group 1 Non-secure。

Interrupt triggering:Level-sensitive(这种类型的中断会一直pending,直到被asserted)和Edge-triggered(上升沿触发导致中断变成pending状态,直到被CPU interface activated时清pending位)。

Power Management:GIC-500不仅支持对应的核被关闭,同时自身也可以被关闭。通过GICR_WAKER寄存器来设置。

2.4 Clocking and resets

GIC-500仅有一个时钟输入clk,和一根reset信号resetn。

3 Programmers Model

3.2 The GIC-500 register map

GICD - GIC Distributor register

GICR - GIC Redistributor register

GITS - GIC Interrupt Translation Service register

4 相关延伸

在每个平台的实现中都会对中断资源进行定义,这是一个GIC-500对应的中断控制器设置:

/* 0-15:  SGI (software generated interrupts)
* 16-31: PPI (private peripheral interrupts)
* 32+: SPI (shared peripheral interrupts)
*/ #define GIC_PPI_START 16
#define GIC_SPI_START 32 /*
* software generated interrupts
*/
#define SGI0_INT (0)
#define SGI1_INT (1)
#define SGI2_INT (2)
#define SGI3_INT (3)
#define SGI4_INT (4)
#define SGI5_INT (5)
#define SGI6_INT (6)
#define SGI7_INT (7)
#define SGI8_INT (8)
#define SGI9_INT (9)
#define SGI10_INT (10)
#define SGI11_INT (11)
#define SGI12_INT (12)
#define SGI13_INT (13)
#define SGI14_INT (14)
#define SGI15_INT (15) /*
* private peripheral interrupts
*/
...
/*
* shared peripheral interrupts
*/
#define WDT_INT (GIC_SPI_START+0)
... #define NR_SOC_IRQS (GIC_SPI_START+77)

更深入的分析,就需要和Linux kernel中GIC相关代码结合了。

阅读GIC-500 Technical Reference Manual笔记的更多相关文章

  1. 阅读Cortex-A53 Technical Reference Manual笔记

    1. 前言 一颗芯片最主要的就是CPU核了,处理CPU Core之外,还存在很多其他IP,包括Graphical.Multimedia.Memory Controller.USB Controller ...

  2. Oracle Global Finanicals Technical Reference(一个)

    Skip Headers Oracle Global Finanicals Oracle Global Financials Technical Reference Manual Release 11 ...

  3. Oracle Global Finanicals Technical Reference(一)

    Skip Headers Oracle Global Finanicals Oracle Global Financials Technical Reference Manual Release 11 ...

  4. Oracle Global Finanicals Technical Reference(二)

    Skip Headers Oracle Global Finanicals Oracle Global Financials Technical Reference Manual Release 11 ...

  5. 阅读ARM Memory(L1/L2/MMU)笔记

    <ARM Architecture Reference Manual ARMv8-A>里面有Memory层级框架图,从中可以看出L1.L2.DRAM.Disk.MMU之间的关系,以及他们在 ...

  6. 阅读 ‘External Memory PHY Interface (ALTMEMPHY)’笔记

    阅读 ‘External Memory PHY Interface (ALTMEMPHY)’笔记 1.PLL reference clock frequency 此处控制器输入时钟设置为100MHz, ...

  7. OpenCASCADE6.8.0 Reference Manual Serach Problem

    OpenCASCADE6.8.0 Reference Manual Serach Problem eryar@163.com 1. Problem 有网友反映OpenCASCADE6.8.0的Refe ...

  8. 阅读《LEARNING HARD C#学习笔记》知识点总结与摘要系列文章索引

    从发表第一篇文章到最后一篇文章,时间间隔有整整一个月,虽只有5篇文章,但每一篇文章都是我吸收<LEARNING HARD C#学习笔记>这本书的内容要点及网上各位大牛们的经验,没有半点废话 ...

  9. 阅读《LEARNING HARD C#学习笔记》知识点总结与摘要三

    最近工作较忙,手上有几个项目等着我独立开发设计,所以平时工作日的时候没有太多时间,下班累了就不想动,也就周末有点时间,今天我花了一个下午的时间来继续总结与整理书中要点,在整理的过程中,发现了书中的一些 ...

随机推荐

  1. Linux多线程编程初探

    Linux线程介绍 进程与线程 典型的UNIX/Linux进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情.有了多个控制线程后,在程序设计时可以把进程设计成在同一时刻做不止一件事,每个线程 ...

  2. HOW to Use QP_PREQ_PUB.PRICE_REQUEST API to Price an Item

    In this Document Goal   Solution   References APPLIES TO: Oracle Advanced Pricing - Version 11.5.10 ...

  3. 【57】android图片印刻,阳刻,素描图效果处理

    介绍我参与开发的妙趣剪纸app使用的图片处理相关的技术 关于妙趣剪纸,各大android商店都可以下载,下面贴出小米商店的链接 妙趣剪纸下载 软件效果截图 如何实现上面的图片处理效果呢 1.初始化高斯 ...

  4. Google官方网络框架-Volley的使用解析Json以及加载网络图片方法

    Google官方网络框架-Volley的使用解析Json以及加载网络图片方法 Volley是什么? Google I/O 大会上,Google 推出 Volley的一个网络框架 Volley适合什么场 ...

  5. disable table 失败的处理

    相信每一个维护hbase集群的运维人员一定碰到过disable失败,陷入无穷的"Region has been PENDING_CLOSE for too long..."状态,此 ...

  6. CRF资料

    与最大熵模型相似,条件随机场(Conditional random fields,CRFs)是一种机器学习模型,在自然语言处理的许多领域(如词性标注.中文分词.命名实体识别等)都有比较好的应用效果.条 ...

  7. PHP基本的语法结构

    学过C语言的话,上手PHP语言就非常快了,如果你有bash shell的基础,那恭喜你,上手PHP会更快,我们先来了解一下一些比较简单的东西,界定符和注释在PHP中的写法: 一 php文档的语法结构 ...

  8. 存储引擎-Bitcast

    Bitcast是一种日志型的基于hash表结构的健值对的存储系统,最早追溯于Riak分布式数据库. 目前,Berkeley DB,Tokyo Cabinet,Innostore都使用了这种存储引擎.使 ...

  9. rails中link_to与button_to的一个功能差异

    页面中本来设计一个按钮,功能是当按下时跳转到index方法,然后实现一段功能.关键是其中需要传递一个参数show_all,其值为true. index方法中通过判断是否含有该参数来实现不同的逻辑,类似 ...

  10. MATLAB三点确定圆

    function [circleCenter,radius] = ThreePointCircle(obj,x,y,z) A=[x(1)-y(1),x(2)-y(2);z(1)-y(1),z(2)-y ...