Jetson TX2 系列 MB1 平台配置
适用于: NVIDIA® Jetson™ TX2 系列设备
在 Jetson TX2 的启动序列中,MB1 使用 MB1 BCT 来配置平台特定的静态设置。MB1 在启用任何其他 CPU 之前执行。MB1 阶段由 NVIDIA 拥有,并由 NVIDIA 和 OEM 签名。
关于 MB1 BCT
MB1 BCT 指定平台特定的数据。当调用 TegraFlash 刷写平台时,它会调用 tegrabct_v2 工具来创建 MB1 BCT。它使用以下数据
• 平台配置文件
• tegrabl_mb1_bct.h 头文件
此阶段所需的 BCT 由 OEM 签名。MB1 阶段提供执行平台特定初始化的功能。它还会设置安全控制寄存器 (SCR)。
平台特定配置文件指定
• 引脚复用和 GPIO 配置
• Prod 设置
• 焊盘电压设置
• PMIC 设置
• 安全寄存器配置
这些配置文件位于
<top>/bootloader/<platform|ver>/BCT/
Jetson TX2 引脚复用和 GPIO 配置
Jetson TX2 引脚复用配置文件提供引脚复用和 GPIO 配置信息。此数据的典型格式是寄存器地址和数据,以对的形式。MB1 仅允许从此表写入引脚复用和 GPIO 地址范围。
引脚复用配置文件位于
<top>/bootloader/<platform|ver>/BCT/tegra186-mb1-bct-pinmux-gpio-<board>-<board_revision>.cfg
用法
pinmux.<address> = <value>;
其中
• pinmux 是 GPIO 和引脚复用配置数据的域名。
• <address> 是绝对寄存器地址。
• <value> 是 32 位数据值。
设备端实现
write(value, address);
示例
#### 用于引脚的引脚复用 ####
pinmux.0x02434060 = <value1>; # gen1_i2c_scl_pc5.PADCTL_CONN_GEN1_I2C_SCL_0
pinmux.0x02434064 = <value2>; # gen1_i2c_scl_pc5.PADCTL_CONN_CFG2TMC_GEN1_I2C_SCL_0
pinmux.0x02434068 = <value1>; # gen1_i2c_sda_pc6.PADCTL_CONN_GEN1_I2C_SDA_0
pinmux.0x0243406C = <value2>; # gen1_i2c_sda_pc6.PADCTL_CONN_CFG2TMC_GEN1_I2C_DA_0
::::
#### 未使用引脚的低功耗配置引脚复用 ####
pinmux.0x02434040 = <value1>; # gpio_wan4_ph0.PADCTL_CONN_GPIO_WAN4_0
pinmux.0x02434044 = <value2>; # gpio_wan4_ph0.PADCTL_CONN_CFG2TMC_GPIO_WAN4_0
pinmux.0x02434048 = <value1>; # gpio_wan3_ph1.PADCTL_CONN_GPIO_WAN3_0
pinmux.0x0243404C = <value2>; # gpio_wan3_ph1.PADCTL_CONN_CFG2TMC_GPIO_WAN3_0
Jetson TX2 Prod 配置
Jetson TX2 prod 设置是系统特性和接口以及控制器设置的配置。这是接口在给定平台上可靠工作所必需的。prod 设置在控制器级别设置,并在引脚复用级别单独设置。
此配置的格式是寄存器 address、mask 和数据 value 的元组。MB1 从 address 读取数据,根据 mask 和 value 修改数据,然后将其写回 address。
prod 配置文件位于
<top>/bootloader/<platform|ver>/BCT/tegra186-mb1-bct-prod-<board>-<board_revision>.cfg
用法
prod.<address>.<mask> = <value>;
其中
• prod 是设置的域名前缀。
• <address> 是焊盘控制寄存器地址。
• <mask> 是掩码值(4 字节,无符号)。
• <value> 是数据值(4 字节,无符号)。
设备端实现
val = read(address)
val = (val & ~mask) | (value & mask);
write(val, address);
示例
prod.0x02436010.0x00006000 = 0x00002000; # SDMMC4_DAT7, DRV_TYPE: DRIVE_2X
prod.0x02436014.0x00006000 = 0x00002000; # SDMMC4_DAT6, DRV_TYPE: DRIVE_2X
prod.0x02436018.0x00006000 = 0x00002000; # SDMMC4_DAT5, DRV_TYPE: DRIVE_2X
prod.0x0243601c.0x00006000 = 0x00002000; # SDMMC4_DAT4, DRV_TYPE: DRIVE_2X
prod.0x02436020.0x00006000 = 0x00002000; # SDMMC4_DAT3, DRV_TYPE: DRIVE_2X
Jetson TX2 焊盘电压配置
Jetson TX2 引脚和焊盘设计为支持给定接口的多个电压电平。它们可以在 1.2 伏 (V)、1.8 V 或 3.3 V 电压下运行。根据给定平台的接口和电源树,软件必须写入这些焊盘的正确电压才能启用接口。如果焊盘电压高于 I/O 电源轨,则引脚在该电平下不起作用。如果焊盘电压低于 I/O 电源轨,则可能会损坏 SoC 焊盘。因此,需要根据电源树配置正确的焊盘电压。
焊盘配置文件位于:
<top>/bootloader/<platform|ver>/BCT/tegra<t-arch>-mb1-bct-pad-quill-<board>-<board_revision>.cfg
用法
pmc.<address> = <value>;
其中
• pmc 是设置的域名前缀。
• <address> 是绝对寄存器地址。
• <value> 是 32 位数据值。
设备端实现
write(value, address);
示例
pmc.0x0c36003c = 0x0000003e; # PMC_IMPL_E_18V_PWR_0
pmc.0x0c360040 = 0x00000079; # PMC_IMPL_E_33V_PWR_0
Jetson TX2 PMIC 配置
在系统启动期间,Jetson TX2 MB1 启用系统电源轨,例如 CPU、SRAM、CORE,以及一些系统 PMIC 配置。典型的配置是
• 启用电源轨
• 设置电源轨电压
• FPS 配置
启用和设置电源轨电压可能需要
• 向设备的 I2C 命令
• MMIO 访问 SoC 寄存器,可以是读-修改-写或仅写
• 命令后的延迟
特定于电源轨的配置(例如 I2C 命令、MMIO 访问和延迟)是平台特定的。MB1 BCT 配置文件必须提供配置信息。
MB1-CFG 格式支持
• 任何序列上的 I2C、脉冲宽度调制 (PWM) 命令和 MMIO 命令。
• 任何 I2C/PWM 控制器实例。
• 设备的任何 7 位从设备地址。
• 读-修改-写格式的 MMIO 命令,以支持只读和读-修改-写格式。
• I2C 命令是读-修改-写格式,以支持只读和读-修改-写格式。
• PWM 命令用于启用和配置 PWM。
• 命令之间的任何延迟量。
• PWM/I2C/MMIO 的仅写命令。
• i2c 命令的任何大小的设备寄存器地址和数据大小。
• 400KHz 的 I2c 命令。
• 序列可以是
• 1 MMIO,1 I2C
• 1 I2C,1 MMIO
• 2 MMIO,1 I2C
• 1 MMIO,2 I2C
典型的电源轨/配置分为以下 PMIC 命令域
• 通用:通用 PMIC 配置。
• CPU:与 CPU 电源轨相关的命令。
• GPU:与 GPU 相关的命令。
• SRAM:与 SRAM 相关的命令。
• CORE:与 CORE 相关的命令。
• MEM:与内存相关的命令。
• THERMAL:用于散热配置的命令。
• SHUTDOWN:用于关机相关配置的命令。
如果未识别给定电源轨的配置,则不需要该电源轨的命令序列,因为 MB1 设备端代码会忽略该电源轨的配置。
每个电源轨都使用唯一的 ID 定义,以使解析和 BCT 二进制文件更轻松。唯一的 ID 如下所示
电源轨名称 | ID |
通用 | 1 |
CPU | 2 |
CORE | 3 |
SRAM | 4 |
GPU | 5 |
MEM | 6 |
散热 | 7 |
关机 | 8 |
PMIC 配置文件位于
<top>/bootloader/<platform|ver>/BCT/tegra<t-arch>-mb1-bct-pmic-quill-<board>-<board_revision>.cfg
用法
常用参数
pmic.<parameter> = <value>;
特定于电源轨的参数
pmic.<rail-names>.<rail-id>.<parameters> = <value>;
其中通用 <parameters> 是以下之一
参数 | 描述 |
command-retries-count | 允许的命令尝试次数。 |
wait-before-start-bus-clear-us | 等待超时,以微秒为单位,在发出总线清除命令之前。等待时间计算为 1 << n 微秒,其中 n 由此参数提供。 |
rail-count | 此配置文件中需要配置的电源轨数量。 |
示例
pmic.command-retries-count = <value>;
pmic.wait-before-start-bus-clear-us = <value>;
pmic.rail-count = <value>;
特定于电源轨的参数采用以下格式
• 特定于电源轨的命令分为块。
• 每个电源轨可以有一个或多个块。给定电源轨的每个块都从 0 开始索引。
• 每个块都包含 MMIO 或 I2C 命令。如果同时需要 MMIO 和 I2C 命令,则命令将分解为多个块。
• 如果给定块包含 I2C 类型的命令,则所有命令都发送到同一设备。如果多个设备需要 I2C 命令,则必须将其拆分为多个块。
• 如果给定块上的命令是 I2C 类型,则 MMIO 命令不需要设备地址、寄存器地址大小和寄存器数据大小参数。
• 给定块可以包含多个命令,但所有命令必须属于同一类型。
• 在给定块的每个命令之后提供延迟。延迟对于所有命令都相同。如果需要不同的延迟,则必须将其拆分为多个块。
特定于电源轨的参数以以下内容为前缀
pmic.<rail-name>.<rail-id>
参数 | 描述 |
block-count | 指定块计数。 pmic.<rail-name>.<rail-id>.block-count = <value>; 其中 <value>(对于 block-count)是给定电源轨的命令块数。 |
block | 指定块标识参数。所有块都从 0 开始索引。 pmic.<rail-name>.<rail-id>.block[index] |
type | 指定命令类型,MMIO (0) 或 I2C (1)。 |
delay | 指定给定块中每个命令后的延迟,以微秒为单位。 |
count | 指定块中的命令数。 |
I2C 类型特定参数
I2C 类型特定参数如下:
参数 | 描述 |
I2c-controller-id | I2C 的控制器 ID。 |
slave-add | 7 位从设备地址。 |
reg-data-size | 寄存器大小(以位为单位) 0 或 8:1 字节 16:2 字节 |
reg-add-size | 寄存器地址大小(以位为单位) 0 或 8:1 字节 16:2 字节 |
命令
命令可以是 MMIO 或 I2C。信息采用 <address>.<mask> = <data> 格式,以支持读-修改-写序列。所有命令都已索引,以便于给定块中的多个命令。命令按顺序发送到设备,从索引 0 开始,格式如下:
commands[command-index].<addr>.<mask> = <data>;
PWM 特定命令
PWM 特定命令如下:
命令 | 值 |
type | 2 (对于 PWM =2) |
controller-id | <0 到 7> /* 基于平台 */ |
source-frq-hz | <PWM 时钟源频率> /* 单位 Hz */ |
period-ns | <周期,单位纳秒> /* PWM 周期 */ |
min-microvolts | <占空比为 0 时 PWM 稳压器的 Vout> |
max-microvolts | <占空比为 100 时 PWM 稳压器的 Vout> |
init-microvolts | <初始化后 PWM 稳压器的 Vout。 |
enable | <1/0> /* 启用 PWM 或仅配置 */ |
例如
# 1. 设置 950mV 电压。
pmic.core.3.block[0].type = 2; # PWM 类型
pmic.core.3.block[0].controller-id = 5; #GP_PWM6
pmic.core.3.block[0].source-frq-hz = 102000000; #102MHz
pmic.core.3.block[0].period-ns = 2600; # 384K 是周期。
pmic.core.3.block[0].min-microvolts = 600000;
pmic.core.3.block[0].max-microvolts = 1200000;
pmic.core.3.block[0].init-microvolts = 950000;
pmic.core.3.block[0].enable = 1;
通用格式
以下代码片段显示了通用格式的通用参数和特定于电源轨的参数。
通用参数为
pmic.command-retries-count = <u32>;
pmic.wait-before-start-bus-clear-us = <u32>;
pmic.rail-count = <u32>;
特定于电源轨的参数为
pmic.<rail-name>.block-count
通用格式如下:
##### 块 0 ####
pmic.<rail-name>.<rail-id>.block[0].type = <0 表示 MMIO,1 表示 I2C>
pmic.<rail-name>.<rail-id>.block[0].delay = <u32>
pmic.<rail-name>.<rail-id>.block[0].count = <calculated>;
#对于 I2C 特定参数
pmic.<rail-name>.<rail-id>.block[0].I2c-controller-id = <u32>;
pmic.<rail-name>.<rail-id>.block[0].slave-add = <u32>;
pmic.<rail-name>.<rail-id>.block[0].reg-data-size = <u32>;
pmic.<rail-name>.<rail-id>.block[0].reg-add-size = <u32>;
#I2C 和 MMIO
pmic.<rail-name>.<rail-id>.block[0].commands[0].<addr>.<mask> = <data>;
pmic.<rail-name>.<rail-id>.block[0].commands[1].<addr>.<mask> = <data>;
pmic.<rail-name>.<rail-id>.block[0].commands[2].<addr>.<mask> = <data>;
pmic.<rail-name>.<rail-id>.block[0].commands[3].<addr>.<mask> = <data0>;
::::
##### 块 1 ####
pmic.<rail-name>.<rail-id>.block[1].type = <0 表示 MMIO,1 表示 I2C>
pmic.<rail-name>.<rail-id>.block[1].delay = <u32>
pmic.<rail-name>.<rail-id>.block[1].count = <Calculated>
#对于 I2C
pmic.<rail-name>.<rail-id>.block[1].I2c-controller-id
pmic.<rail-name>.<rail-id>.block[1].slave-add
pmic.<rail-name>.<rail-id>.block[1].reg-data-size
pmic.<rail-name>.<rail-id>.block[1].reg-add-size
#I2C 和 MMIO
pmic.<rail-name>.<rail-id>.block[1].commands[0].<addr>.<mask> = <data>;
pmic.<rail-name>.<rail-id>.block[1].commands[1].<addr>.<mask> = <data>;
pmic.<rail-name>.<rail-id>.block[1].commands[2].<addr>.<mask> = <data>;
pmic.<rail-name>.<rail-id>.block[1].commands[3].<addr>.<mask> = <data0>;
::::
例如,在用法中
pmic.command-retries-count = 1;
pmic.wait-before-start-bus-clear-us = 0;
pmic.rail-count = 6;
###############通用电源轨 (ID = 1) 数据 ###############
pmic.generic.1.block-count = 1;
# 1. 设置 PMIC MBLDP = 1, CNFGGLBL1 位 6 = 1
pmic.generic.1.block[0].type = 1; # I2C 类型
pmic.generic.1.block[0].i2c-controller-id = 4;
pmic.generic.1.block[0].slave-add = 0x78; # 7 位:0x3c
pmic.generic.1.block[0].reg-data-size = 8;
pmic.generic.1.block[0].reg-add-size = 8;
pmic.generic.1.block[0].delay = 10;
pmic.generic.1.block[0].count = 1;
pmic.generic.1.block[0].commands[0].0x00.0x40 = 0x40;
######################## #CORE 电源轨 (ID = 3) 数据 ###############
pmic.core.3.block-count = 2;
# 1. 设置 950mV 电压。
pmic.core.3.block[0].type = 1; # I2C 类型
pmic.core.3.block[0].i2c-controller-id = 4;
pmic.core.3.block[0].slave-add = 0x70; # 7 位:0x38
pmic.core.3.block[0].reg-data-size = 8;
pmic.core.3.block[0].reg-add-size = 8;
pmic.core.3.block[0].delay = 1000;
pmic.core.3.block[0].count = 1;
pmic.core.3.block[0].commands[0].0x07.0xFF = 0x2E;
# 2. 将 GPIO3 掉电插槽设置为 6。
pmic.core.3.block[1].type = 1; # I2C 类型
pmic.core.3.block[1].i2c-controller-id = 4;
pmic.core.3.block[1].slave-add = 0x78; # 7 位:0x3c
pmic.core.3.block[1].reg-data-size = 8;
pmic.core.3.block[1].reg-add-size = 8;
pmic.core.3.block[1].delay = 10;
PWM 特定示例
pmic.core.3.block-count = 1;
# 1. 设置 950mV 电压。
pmic.core.3.block[0].type = 2; # PWM 类型
pmic.core.3.block[0].controller-id = 5; #GP_PWM6
pmic.core.3.block[0].source-frq-hz = 102000000; #102MHz
pmic.core.3.block[0].period-ns = 2600; # 384K 是周期。
pmic.core.3.block[0].min-microvolts = 600000;
pmic.core.3.block[0].max-microvolts = 1200000;
pmic.core.3.block[0].init-microvolts = 950000;
pmic.core.3.block[0].enable = 1;
::::
配置通用电源轨
配置 PMIC 的通用电源轨时,请考虑以下事项
• 需要更正没有 OTP 的 PMIC 默认配置。但是,如果配置在默认 OTP 上,则不需要重新配置。
• 要使用 I2C 配置系统中的某些设备,则不需要平台特定配置。
• 写入 Jetson TX2 模块(系统模块或 SOM)中设备的配置,然后执行底板设备的配置。这确保如果设置包含不同的配置,则为 SOM 执行的所有 PMIC 配置都成功。
• 为了在不使用模块时帮助删除块,请在每个块中使用属性注释,如下所示
<module_name>:<device>
对于用于 PMIC 配置的 SOM
# P3310: PMIC: 设置 PMIC MBLDP = 1, CNFGGLBL1 位 6 = 1
对于 P2597 底板中的扩展器配置
# 底板 (P2597): 扩展器: 5V0_HDMI_EN
配置安全配置寄存器
Jetson TX2 设备具有单独的寄存器,用于配置桥客户端安全性、桥防火墙,称为安全配置寄存器 (SCR)。SCR 由 NVIDIA 为 Jetson TX2 平台配置,或为自定义平台重新配置。自定义配置在 MB1 阶段使用 MB1 BCT。
自定义平台重新配置的 SCR 列表在 MB1 设备端代码和 SCR 平台数据中是相同的。MB1 中硬编码的 SCR 寄存器地址只能包含来自平台的数据。数据无法屏蔽,只能按原样写入寄存器。
SCR 配置文件位于
<top>/bootloader/<platform|ver>/BCT/auto_scr.cfg
用法
scr.<reg_index>.<exclusion-info> = <32 位值>; # <reg_name>
其中
• scr 是设置的域名前缀。
• <reg_index> 是匹配的 MB1 和 CFG 文件序列,从 0 开始。
• <exclusion-info> 是以下值之一
值 | 描述 |
0 | Include: 从 BCT 加载的常规 SCR(冷启动时),从存储的上下文加载的常规 SCR(暖启动时)。 |
1 | Exclude: CFG 文件中存在数据,但不从 BCT 加载数据。允许在 MB2 或更高版本中进行 SCR 编程。 |
2 | SC7 resume: 从 BCT 编程(冷启动时),但排除暖启动。 |
MB1 代码以索引列表形式列出 SCR 寄存器绝对地址。
示例
# SCR 寄存器配置
scr.134.1 = 0x20000000; # GPIO_M_SCR_00_0
scr.135.1 = 0x20000000; # GPIO_M_SCR_01_0
其他配置
其他配置文件位于
<top>/bootloader/<platform|ver>/BCT/tegra186-mb1-bct-misc-quill-p2382.cfg
misc.cfg 中的字段如下:
字段 | 描述 | 配置示例 |
enable_can_boot | 控制早期 CAN 初始化。如果设置,则完成 spe-can 固件加载 spe-r5 处理器启动。 | enable_can_boot = 1; |
enable_blacklisting | 控制 DRAM ECC 拒绝列表 0:禁用 ECC 拒绝列表 1:启用 ECC 拒绝列表 | enable_blacklisting = 0; |
disable_sc7 | 控制 SC7 状态条目 0:启用 sc7 1:禁用 sc7 | disable_sc7 = 0; |
fuse_visibility | 默认情况下,某些熔丝无法读取或写入,因为它们不可见。如果设置此字段,MB1 将启用此类熔丝的可见性。 | fuse_visibility = 1; |
enable_vpr_resize | 控制 VPR 调整大小功能的启用。 | enable_vpr_resize=0 |
Disable_el3_bl | 用于在安全操作系统之后消除 EL3 Bl 的执行,并可以启动 EL2 引导加载程序 | Disable_el3_bl = 1 |
AOTAG
AO-TAG 寄存器在 MB1 中编程,它控制 Jetson TX2 系统允许运行的最高温度。如果温度超过该限制,则会触发自动关机。
AOTag 控制字段 | 描述 | 配置示例 |
boot_temp_threshold | 启动温度阈值,单位为千分之一摄氏度。如果温度高于此字段中指定的温度,则 MB1 等待或关闭设备。 | aotag.boot_temp_threshold = 105000; |
cooldown_temp_threshold | 冷却温度阈值,单位为千分之一摄氏度。当设备冷却到此阈值温度时,MB1 恢复启动。 | aotag.cooldown_temp_threshold = 85000; |
cooldown_temp_timeout | 包含 MB1 应等待系统温度降至“cooldown_temp_threshold”以下的最长时间。 | Cooldown_temp_timeout = 30000 |
enable_shutdown | 如果设置为 1,则当温度高于启动温度阈值时,启用使用 aotag 关机。 | aotag.enable_shutdown = 1; |
时钟
时钟控制字段保存 MB1 编程的各种模块的时钟分频器值。
时钟控制字段 | 描述 | 配置示例 |
bpmp_cpu_nic_divider | 编程 cpu nic 分频器以控制 BPMP CPU 频率。 小于字段中值的 1 的值直接写入寄存器。 | clock.bpmp_cpu_nic_divider = 1; |
bpmp_apb_divider | 编程 apb 分频器以控制 APB 总线频率。 小于字段中值的 1 的值直接写入寄存器。 | clock.bpmp_apb_divider = 1; |
axi_cbb_divider | 编程 axi_cbb 分频器以控制 AXI-CBB 总线频率。 小于字段中值的 1 的值直接写入寄存器。 | clock.axi_cbb_divider = 1; |
se_divider | 编程 se 分频器以控制 SE 控制器频率。 小于字段中值的 1 的值直接写入寄存器。 | clock.se_divider = 1; |
aon_cpu_nic_divider | 编程 cpu_nic 分频器以控制 AON(SPE) CPU 频率。 小于字段中值的 1 的值直接写入寄存器。 | clock.aon_cpu_nic_divider = 1; |
aon_apb_divider | 编程 apb 分频器以控制 AON(SPE) APB 频率。 小于字段中值的 1 的值直接写入寄存器。 | clock.aon_apb_divider = 1; |
aon_can0_divider | 编程 can0 分频器以控制 CAN0 控制器频率。 小于字段中值的 1 的值直接写入寄存器。 | clock.aon_can0_divider = 1; |
aon_can1_divider | 编程 can1 分频器以控制 CAN1 控制器频率。 小于字段中值的 1 的值直接写入寄存器。 | clock.aon_can1_divider = 1; |
osc_drive_strength | 未使用 | - |
pllaon_divp | 编程 PLL-AON 的 P 值。 小于字段中值的 1 的值直接写入寄存器。 | clock.pllaon_divp = 2; |
pllaon_divn | 编程 PLL-AON 的 N 值。 小于字段中值的 1 的值直接写入寄存器。 | clock.pllaon_divn = 25; |
pllaon_divm | 编程 PLL-AON 的 M 值。 小于字段中值的 1 的值直接写入寄存器。 | clock.pllaon_divm = 1; |
CPU 参数
这些设置包含传递给 CPU-Init FW 的初始设置。请勿更改这些设置。
字段 | 描述 | 配置示例 |
Bootcpu | 指定启动 CPU。4 表示 A57 cpu0,0 表示 Denver0。对于汽车应用,请使用 A57-cpu0。 | cpu.bootcpu = 4 |
ccplex_platform_features | 传递给 CPU-Init FW 的平台功能。 | cpu.ccplex_platform_features = 0x581; |
lsr_dvcomp_params_b_cluster | 包含用于初始化 ADC 和 DVC 的设置,ADC 和 DVC 需要在 CPU 电源轨启动之前正常工作 | cpu.lsr_dvcomp_params_b_cluster = 0xC0780F05C; |
lsr_dvcomp_params_m_cluster | 包含用于初始化 ADC 和 DVC 的设置,ADC 和 DVC 需要在 CPU 电源轨启动之前正常工作 | cpu.lsr_dvcomp_params_m_cluster = 0xC0780F05C; |
nafll_m_cluster_data | Denver 集群的初始 NAFLL 设置 | cpu.nafll_m_cluster_data = 0x11F04461; |
nafll_b_cluster_data | A57 集群的初始 NAFLL 设置 | cpu.nafll_b_cluster_data = 0x11F04461; |
AST 设置
AST 设置用于 MB1/MB2 加载的各种固件。这些是固件的虚拟地址。MB1/MB2 基于其在内存 (DRAM) 中加载固件的位置来编程相应的物理地址。通常不需要更改这些设置。
字段 | 描述 | 配置示例 |
bpmp_fw_va | BPMP-FW 的虚拟地址 | ast.bpmp_fw_va = 0x50000000; |
mb2_va | MB2-FW 的虚拟地址 | ast.mb2_va = 0x52000000; |
sce_fw_va | SCE-FW 的虚拟地址 | ast.sce_fw_va = 0x70000000; |
apr_va | APE-FW 使用的音频保护区域的虚拟地址 | ast.apr_va = 0xC0000000; |
ape_fw_va | APE-FW 的虚拟地址 | ast.ape_fw_va = 0x80000000; |
SW 预留区
这些设置指定 BL 预留区的地址和大小。
字段 | 描述 | 配置示例 |
cpubl_carveout_addr | CPU-BL 预留区的起始位置 | sw_carveout.cpubl_carveout_addr = 0x96000000; |
cpubl_carveout_size | CPU-BL 预留区的大小 | sw_carveout.cpubl_carveout_size = 0x02000000; |
mb2_carveout_size | MB2 预留区的大小 | sw_carveout.mb2_carveout_size = 0x00400000; |
调试
可以使用 BCT 标志启用禁用调试功能。
调试控制字段 | 描述 | 配置示例 |
uart_instance | 配置控制台打印的 UART 实例。 有效的 UART 实例为 1、2 和 7。 | debug.uart_instance = 1; |
enable log | 启用/禁用控制台日志记录。 | debug.enable_log = 1; |
enable_secure_settings | 未使用。 | - |
I2C 设置
这些设置指定 MB1/MB2 中 I2C 总线的工作频率(默认为 100 KHz)。
字段 | 描述 | 配置示例 |
0 | 指定 I2C 控制器实例 0 的时钟 | i2c.0 = 400; |
4 | 指定 I2C 控制器实例 4 的时钟 | i2c.4 = 1000; |
Dev 参数
这些是 MB1/MB2 使用的设备设置。
字段 | 描述 | 配置示例 |
qspi.clk_src | 指定时钟源。该值对应于 QSPI CLK SRC 寄存器中提到的内容。 0:pllp_out0 4:pllc4_muxed | devinfo.qspi.clk_src = 0; # |
qspi.clk_div | clk_div = N+1; 因此 N = 3 & clk_rate = 163.2 MHz = (408 MHz / ((N / 2) + 1)) | devinfo.qspi.clk_div = 4; |
qspi.width | 指定传输期间 QSPI BUS 的宽度 0:1 位(x1 模式) 1:2 位(x2 模式) 2:4 位(x4 模式) | devinfo.qspi.width = 2 |
qspi.dma_type | 如果传输模式为 DMA,则指定要用于传输的 DMA。对于 QSPI,在 MB1/MB2 中,应使用 BPMP-DMA。 0:GPC-DMA 1:BPMP-DMA | devinfo.qspi.dma_type = 1 |
qspi.xfer_mode | 指定传输模式 0:PIO 1:DMA | devinfo.qspi.xfer_mode = 1; |
qspi.read_dummy_cycles | 虚拟周期允许设备内部电路有更多时间来访问初始地址位置。在虚拟周期期间,IO 上的数据值是“无关紧要的”,并且可能是高阻抗。 | devinfo.qspi.read_dummy_cycles = 9 |
qspi.trimmer_val1 | QSPI 的 tx_clk_tap_delay | devinfo.qspi.trimmer_val1 = 0 |
qspi.trimmer_val2 | QSPI 的 rx_clk_tap_delay | devinfo.qspi.trimmer_val2 = 0 |
看门狗定时器控制器设置
这些设置指定看门狗定时器控制器寄存器值。这些值将由 MB1 配置。
字段 | 描述 | 配置示例 |
bpmp_wdtcr | 包含 bpmp 处理器看门狗定时器寄存器值 | wdt.bpmp_wdtcr = 0x710640; 配置为 100 秒 |
Sce_wdtcr | 包含 SCE 处理器看门狗定时器寄存器值 | wdt.sce_wdtcr = 0x707103; |
aon_wdtcr | 包含 aon 的看门狗定时器寄存器值 | wdt.aon_wdtcr = 0x700000; |
rtc2_ao_wdtcr | 包含 rtc2_ao 看门狗定时器寄存器值 | wdt.rtc2_ao_wdtcr = 0x700000; |
top_wdt0_wdtcr | 包含 top_wdt0 看门狗定时器寄存器值 | wdt.top_wdt0_wdtcr = 0x715016; |
top_wdt1_wdtcr | 包含 top_wdt1 看门狗定时器寄存器值 | wdt.top_wdt1_wdtcr = 0x710640; |
top_wdt2_wdtcr | 包含 top_wdt2 看门狗定时器寄存器值 | wdt.top_wdt2_wdtcr = 0x707103; |
PMIC
PMIC 配置文件手动创建,如下所示
1. 获取有关命令集的信息,以启用和设置每个电源轨的电压。
• 如果 OTP 值处于所需电压,请勿重新编程电压寄存器。
• 不要启用所有电源轨,请按照启动序列的建议执行。
• 电源轨的电压必须按照启动序列建议进行设置。
2. 获取有关 MB1 所需的通用设置的信息。
3. 收集所有信息后,按电源轨拆分这些命令。
4. 制作命令序列列表、命令之间的延迟,然后制作块。如果块
• 属于同一类型(例如 I2C 或 MMIO)
• 具有相同的延迟
• 与同一设备通信
如果有任何不同,它将位于不同的块中。
5. 根据上述详细信息创建配置文件。
BootROM
BOOTROM 配置文件手动创建,如下所示
1. 获取有关命令集的信息,以在不同的复位路径中发送到设备。
• 对于不同的复位路径,可能会使用相同类型的命令。从系统团队收集所有此类信息。
2. 独立制作每个复位路径所需的命令集。
3. 拾取一个复位路径的命令。
4. 制作命令序列列表。
5. 命令之间的延迟,然后从中制作块。如果块
• 属于同一类型(例如 I2C 或 MMIO)
• 具有相同的延迟
• 与同一设备通信
如果有任何不同,它将位于不同的块中。
6. 将所有块放在一个 aoblocks 中。
7. 同样,为所有复位路径制作所有 aoblocks。
8. 初始化不同的复位路径 aocommand,使用这些 aoblock 索引。
9. 基于上述细节创建配置文件。
刷写