P2020的LAW分析

来源:互联网 发布:三维测量的算法 编辑:程序博客网 时间:2024/05/29 10:26

概述

LAW(local access window)顾名思义,使用一个类似窗口的东西来管理CPU的地址空间。

根据P2020Reference Manual所描述的,总共12个LAW,每个可以映射4K至32G大小的地址空间到目的接口。除过CCSR与默认的0xFF80_0000-0xFFFF_FFFF这段8M的bootrom外,所有的地址空间都需要由LAW映射管理。这点很重要,当CPU上电复位时,由于P2020为32位大端模式,从0xFFFF_FFFC地址处开始取指令(uboot或者e500mc内核的PBI)进行执行,而这段代码的物理地址可以直接由默认的LAW状态进行映射。

LAW与其他地址映射功能的区别

LAW定义了从事件设备源头到目标的内部联系关系,以及这种联系如何到达的。当LAW转换完成时,LAW所配置的目的接口控制器才可能会进行额外的其他映射。例如RapidIO或PCIE接口拥有ATMU,可以把本地地址映射到外部地址空间。
下图就是一个地址空间的映射图例子。

可以得到此时LAW配置的情况:

LAW寄存器

要想启用LAW的相关功能,必须要配置对应的寄存器。接下来列出配置LAW所需要的两组寄存器。
LAW寄存器的基地址由CCSR配置(所有的与外设相关配置寄存器都通过CCSR指定),与其他设备如DDR、eLBC类似,也是通过一个基地址+偏移量来访问指定的寄存器的。对于LAW,基地址为0x0_0000。

LAW基址寄存器(LAW_LAWBARn)

该寄存器共32位,其中低8位为无效位,因为LAW映射的空间最小为4K。高24位用来指示LAW的n号窗口基地址。该地址必须与LAW_LAWARn[SIZE](下文介绍)所定义的大小对齐。
地址计算: 0h base + C08h offset + (32d × i), where i=0d to 11d

LAW属性寄存器(LAW_LAWARn)

该寄存器用来使能指定的LAW,定义它的大小,指定目的接口(eLBC,DDR等)。
地址计算: 0h base + C10h offset + (32d × i), where i=0d to 11d

EN:1:LAWn使能,并结合其他该编号的LAW寄存器,定义一个LAW区域。
0:关闭LAWn,与其他相关的该编号对应的LAW寄存器。
TRGT:用来给当一个地址被LAWn的区域所捕获到时,指示正确地目的接口(eLBC、DDR等),下表中描述。
SIZE:表示从LAW基地址开始的地址空间大小,范围从4K到32G。001011 4 Kbytes
001100 8 Kbytes
001101 16 Kbytes
... 2 (size+1)bytes
100010 32 Gbytes。
由于总共有12个LAW,它们的配置寄都是通过LAW_LAWBARn与LAW_LAWARn两组寄存器进行的,因此这里不一一介绍了。


注意,当两个LAW配置的地址重合时,较低编号的LAW有优先权。
LAW的相关配置内容就是这些了,笔者主要参照了Freescale提供的《P2020Reference Manual》,再加上自己的一些理解。最近也一直在看PowerPC的资料,欢迎大家讨论交流。
0 0