RapidIO的启动与初始化

RapidIO的启动与初始化

  1. 概述

RapidIO的启动与初始化主要包括以下几个方面的内容:

  1. 系统初始化
  2. 器件枚举
  3. 路由表配置
  4. 存储器映射

一旦配置好RapidIO系统,系统就会在RapidIO互连结构中透明地传递I/O事务。从软件角度观察,由于软件并不与RapidIO硬件进行交互,所以,RapidIO对软件是透明的。例如,某一地址空间被映射到RapidIO网络上的某一器件中或被配置为与该器件相关,当处理器发送一个对该地址空间的读取指令时,该指令会引发RapidIO READ事务:由端点正确地生成相关的RapidIO包,并将其发送到RapidIO网络中,响应包返回的数据被转发回处理器以完成读取操作。该过程完全由硬件控制的,软件并不关心数据是来自高速缓存还是本地存储器或远程存储设备。这一点与以太网差别巨大,在以太网中,比如包的生成等需要大量的软件干预。

RapidIO具有多种操作模式,但只有工作在存储器映射I/O总线模式下,对软件才是透明的。而使用消息传递逻辑层事务时,必须编写软件来显示地使用该事务。硬件不会自动处理该事务。软件还可用于支持流交换结构逻辑层事务。使用这一事务支持在RapidIO中传输数据流。数据流实例可能包括:以太网包、ATM信元、甚至MPEG-2之类的数字视频流。流交换结构扩展可分割数据并保证在RapidIO结构中高质量地传输数据。

对RapidIO自身的配置也能体现出RapidIO对软件的可见性。这是指RapdiIO硬件和系统软件间需要进行交互以初始化RapidIO端点,确保链路的运行并正确地收发数据包,如此才能正确配置系统中的交换机,并建立存储器映射以提供期望的器件间的系统可见性。

 

既然是概述,就是先了解个大概,不做深究。这段文字基本上让我们了解了“大概”。

2. RapidIO系统启动过程

  1. host CPU获取引导代码(如果需要),如果有两个host,则两者是都可获取初始引导代码。
  2. 开始执行系统探测和枚举算法。
  3. 枚举所有器件并将相关器件信息记录到器件数据库,建立host和所有endpoint之间的路由。
    1. 计算并配置host与所有endpoint器件之间,以及不同的endpoint器件之间的最优路径。
    2. 用最优路径信息配置switch。
    3. 在器件数据库中存储最优路径并以此替换器件数据库中原有的路由信息。
  4. 映射地址空间

 

疑问:

  1. 引导代码是指什么?host如何获得自己的代码?
  2. Host是怎么来的?认为指定?如何指定?
  1. 启动要求

为了正确启动系统,需要下列系统状态。

系统上电后,若有多个host进行系统枚举操作,自动将系统中的器件初始化为下列状态:

系统器件的基本器件ID被初始化为下列值:

  1. 设置endpoint ID为0xFF(若ID为16bit,则该值为0xFFFF)。
  2. 设置引导代码器件ID为0xFE(若ID为16bit,则该值为0x00FE)。
  3. 设置host ID为0x00(若ID为16bit,则该值为0x0000)。

系统初始化完成之后,所有器件都会拥有一个唯一的ID值,在系统初始化完成之间,先将器件的ID设置为刚才描述的三个值之一。

RapidIO物理层链路会对自身进行初始化。详细见物理层协议规范

设置所有引导代码器件和主机器件间的交换机的默认路由状态为:把所有对器件ID为0xFE的请求路由到相应的引导代码器件,从引导代码器件把所有响应包路由回发出请求的主机,这将允许主机器件从很可能是flash ROM存储器件的引导代码器件中检索引导代码。RapidIO系统应仅有一个引导代码器件,经过配置,所有系统中的交换机会将目的地址为0xFE的请求转发到引导代码器件。

 

疑问:

  1. 这些ID是咋设定的?由谁、在什么时候、又是通过什么方法来设定的?
  2. 引导代码器件是什么样的器件?RapidIO规范中有描述吗?
  3. 物理层链路初始化的大概内容、过程、方法?
  4. 所有引导代码器件和主机器件间的交换机的默认路由状态,这句话好难理解。如何理解“路由”,作为名词的“路由”是什么?作为动词的“路由”咋进行的?

 

3. 枚举

使用枚举过程发现系统中所有RapidIO连接器件并为其分配唯一的器件ID。尽管RapidIO网络非常灵活并具有多种特征和能力,采用某些假设或限制可以显著地简化枚举过程,这些假设和限制是:仅有两个主机可以同时枚举一个网络。为了增强容错性,在一个网络上可以有两个主机,由系统集成者决定哪两个设备作为主机进行枚举。实际上只有一个主机完成网络枚举工作(称为获胜主机),另一个主机必须退避并等待枚举结束,或者假如获胜主机枚举失败并发生枚举超时时间,则由另一主机重新枚举网络。

枚举算法根据上电后器件的ID值设置优先级。获胜主机的上电主机器件ID值较大,失败主机的上电主机器件ID值较小。失败主机进入等待状态直到获胜主机完成枚举或直到状态超时后才退出该状态。

如果两个主处理器各自的优先级唯一,优先级机制绝不会导致死锁。开始阶段由两个主机并行执行枚举过程,直到它们在某一器件上相遇,相遇时优先机制可以确保有一个主机获胜,而另一个主机退避(进入等待状态)。

枚举结束后,系统中其它主机能通过被动发现(passively discovery)收集网络中对其有用的拓扑信息,如路由表和存储器映射信息。(这段话说得太概括!咋被动发现和收集拓扑信息的?)

所有参与枚举过程的主机在系统初始化过程开始前将自身的器件ID改成唯一的值。(启动要求上不是有一点要将host ID设为0吗?咋理解“改成唯一”?谁来该?如何保证唯一?),器件的主机基本器件ID锁定CSR使用该值来确保同一时刻仅有一个主机可以对某一器件进行操作,(没理解这句话,这个寄存器是如何确保的),发现主机可用的ID值为0x00(0x0000)或0x01(0x0001)。器件ID为0x00(0x0000)的主机的优先级比器件ID2为0x01(0x0001)的主机低。

所有参加枚举的主机器件应当把自己的主机使能位(端口通过控制CSR)置为1,交换器件没有主机使能位。(不置1能叫主机吗?谁来置的?咋置的?)

当获胜主机释放失败主机的锁定时枚举完成(如何释放的?啥时释放的?)。失败主机负责检测自己是否被获胜主机锁定(通过啥来锁定的?),并随后检测获胜主机是否释放了对自己的锁定(咋检测?)

如前面所述,可以使用的两个主机枚举RapidIO网络。通常认为上电后主机器件ID较高的主机的优先级高于其他主机。该预先设定好的优先级使得仅有一个主机(高优先级主机)能赢得枚举任务,此时失败主机进入等待状态。

如果获胜主机没有成功枚举整个网络,失败主机的等待状态超时,则失败主机将尝试枚举网络。在开发使(open)8位器件ID系统中,失败主机必须在超时或重新引导枚举任务之前等待15秒。闭合后(closed)或16位期间ID系统的超时周期长度可能与开放式系统不同。

 

疑问:

  1. 一直就没说咋枚举的?枚举算法?
  2. 两个host之间是如何竞争的?
  3. 退出的host在潜伏甚至有可能再度成为host,这段时间它都干啥了?啥时真正退出?退出之后成为端点,是不是有host来对其进行配置?

 

  1. 地址空间映射

地址空间映射通常发生在器件枚举后,器件枚举完成后建立一个存储系统中器件和互连信息的数据库,枚举完成后系统可能进行地址空间映射操作。

RapidIO器件的可寻址存储区对系统中其它RapidIO器件完全或部分可见。器件把自身的存储区映射到必须被所有器件共享的单一全局地址空间,RapidIO模型并没有建立这样的地址空间,而是期望所有器件都拥有自己的独立地址区。器件可提供的单一地址空间最多为63位寻址空间,寻址单位为双字,为了提高包的效率,任意器件的地址长度可以是34、50或66位。由目标器件选择地址长度,通过查询处理部件特征CAR,可以判定目标器件支持的地址字段长度,通过对处理部件逻辑层控制CSR进行编程来选择实际使用的长度。CAR告知系统端点支持的存储器长度,通过设置CSR选择实际使用的长度,见有关寄存器的详细描述。一旦配置完毕,所有发送到给定端点的可寻址存储器的事务必须使用选择的存储器长度。

RapidIO端点设置为可见的地址范围与端点器件ID一起组成系统中唯一的地址。通过地址转换逻辑把这个唯一的地址映射到系统中其它器件的本地地址空间,这意味着对任何给定的有器件地址和器件ID联合组成的物理地址,可能有很多该地址的虚拟表示被映射到系统中其它器件,表面看来是发往本地地址的事务实际上会通过RapidIO结构传输到目标器件物理地址。

 

疑问:

  1. 从这段描述里我们是不是可以这么去理解地址空间的映射?
    1. 一个器件,如果它有开放到RapidIO上的存储空间,这个存储空间在器件自己内部有一个“本地地址”;在RapidIO空间有一个“RapidIO全局地址”,这是如何把自己映射(或叫)到RapidIO空间的问题,如果RapidIO空间出现这些地址,则会通过RapidIO架构,转换为对这个器件内存的访问。
    2. 一个器件如何对别的器件进行访问呢?那么它要开辟一块存储空间。这个空间只有地址(本地的地址),但没有内容,简单说就是只有房号,却没有房子。这个地址会映射成“RapidIO全局地址”,这也是要访问的器件的内存在RapidIO中的地址。从而实现对这个器件的访问。
  2. 映射是如何实现的?

 

你可能感兴趣的:(RapidIO)