aarch64的TCR寄存器介绍

271 篇文章 412 订阅
本文深入探讨了ARMv8架构中的TCR寄存器,包括其重要比特位如T1SZ、T0SZ、ORGN、IRGN、SH、TG、IPS等的功能,并提供了示例来展示如何设置inner/outer cache的属性。通过理解这些寄存器,可以更好地掌握内存管理和高速缓存配置在高性能计算中的应用。
摘要由CSDN通过智能技术生成

快速链接:
.
👉👉👉 个人博客笔记导读目录(全部) 👈👈👈

在这里插入图片描述

★★★个人博客导读首页—点击此处 ★★★

相关文章
1、ARM架构中MMU/TLB/Cache的一些概念和寄存器
2、ARMV8-aarch64的MMU学习笔记

一、TCR寄存器

在ARM Core中(aarch64),还有几个相关的系统寄存器:

  • TCR_EL1 banked
  • TCR_EL2
  • TCR_EL3
    在这里插入图片描述
比特位功能说明
ORGN1、IRGN1、ORGN0、IRGN0cache属性**outer/inner cableability的属性(如直写模式、回写模式)
SH1、SH0cache的共享方式cache的共享属性配置(如non-shareable, outer/inner shareable)
TG0/TG1Granule sizeGranule size(其实就是页面的大小,4k/16k/64k)
IPS物理地址size物理地址size,如32bit/36bit/40bit
EPD1、EPD0-TTBR_EL1/TTBR_EL0的enable和disable
TBI1、TBI0-top addr是ignore,还是用于MTE的计算
A1-ASID的选择,是使用TTBR_EL1中的,还是使用TTBR_EL0中的
AS-ASID是使用8bit,还是使用16bit
(1)、T1SZ、T0SZ
  • T1SZ, bits [21:16] 通过TTBR1寻址的内存区域的大小偏移量,也就是TTBR1基地址下的一级页表的大小
  • T0SZ, bits [5:0]
(2)、ORGN1、IRGN1、ORGN0、IRGN0

在这里插入图片描述
其实可以总结为这样:
在这里插入图片描述

(3)、SH1、SH0

SH1, bits [29:28]
SH0, bits [13:12]
在这里插入图片描述
其实可以总结为这样:
在这里插入图片描述
Shareable的很容易理解,就是某个地址的可能被别人使用。我们在定义某个页属性的时候会给出。Non-Shareable就是只有自己使用。当然,定义成Non-Shareable不表示别人不可以用。某个地址A如果在核1上映射成Shareable,核2映射成Non-Shareable,并且两个核通过CCI400相连。那么核1在访问A的时候,总线会去监听核2,而核2访问A的时候,总线直接访问内存,不监听核1。显然这种做法是错误的。

对于Inner和Outer Shareable,有个简单的的理解,就是认为他们都是一个东西。在最近的ARM A系列处理器上上,配置处理器RTL的时候,会选择是不是把inner的传输送到ACE口上。当存在多个处理器簇或者需要双向一致性的GPU时,就需要设成送到ACE端口。这样,内部的操作,无论inner shareable还是outershareable,都会经由CCI广播到别的ACE口上。

(4)、TG0/TG1 - Granule size

在这里插入图片描述

(5)、IPS

在这里插入图片描述

(6)、EPD1、EPD0

在这里插入图片描述

(7)、TBI1、TBI0

在这里插入图片描述

(8)、A1

在这里插入图片描述

(10)、AS

在这里插入图片描述

除了以上介绍的bit之外,剩余的bit都是特有功能使用或reserved的
在这里插入图片描述

二、示例展示
1、设置inner/outer cache的属性(只写模式/回写模式/write allocate/No-write allocate)

如下代码所示,设置

#define TCR_IRGN_WBWA		((UL(1) << 8) | (UL(1) << 24))   //使用TTBR0和使用TTBR1时后的inner cache的属性设置

#define TCR_ORGN_WBWA		((UL(1) << 10) | (UL(1) << 26))   //使用TTBR0和使用TTBR1时后的outer cache的属性设置

#define TCR_CACHE_FLAGS	TCR_IRGN_WBWA | TCR_ORGN_WBWA   // inner + outer cache的属性值


ENTRY(__cpu_setup)
......
	/*
	 * Set/prepare TCR and TTBR. We use 512GB (39-bit) address range for
	 * both user and kernel.
	 */
	ldr	x10, =TCR_TxSZ(VA_BITS) | TCR_CACHE_FLAGS | TCR_SMP_FLAGS | \
			TCR_TG_FLAGS | TCR_ASID16 | TCR_TBI0 | TCR_A1
	tcr_set_idmap_t0sz	x10, x9

......
	msr	tcr_el1, x10
	ret					// return to head.S
ENDPROC(__cpu_setup)

属性设置了1,也就是回写模式、write allocate模式
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码改变世界ctw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值