SSU_DTBO使用参考


1. 背景

该文档基于SigmaStar DTB overlay功能,如需了解该功能可以先阅读文档《SSU_DTBO功能介绍》进行了解。该文档会以pioneer5平台上padmux dtbo的使用作为例子,大致介绍截至到本文的完成前SigmaStar DTB overlay功能如何去配置使用。

2. 配置架构

2.1. 设备树dtb配置

对于Pioneer5平台,目前我们有三种规格的开发板,分别是:

BGA 16x16 EVB board:SSC028A-S01A-S

BGA 16x16 DEMO board:SSZ028A-S01A-M

BGA 19x19 EVB board:SSC028B-S01A-S

在目前P5 AOSP Kernel中,这些开发板编译Kernel时都使用的是同一个dts:

arch/arm64/boot/dts/sstar/pioneer5-android.dts

按照目前的设计,我们在"pioneer5-android.dts"中包含了:所有开发板公共的设定 + SSC028A-S01A-S开发板特有的设定,形如:

由上图不难看出,通用的设定都已经写在了"pioneer5.dtsi"和"pioneer5-android.dts"正文中,并通过导入"pioneer5-ssc028a-s01a-s-padmux.dtsi"和"pioneer5-ssc028a-s01a-s-panel.dtsi" 使编译出来的"pioneer5-android.dtb"默认支持BGA 16x16 EVB board

2.2. 叠加设备树配置

对于Pioneer5平台,其编译dtbo.img使用的配置文件在:

dtbo/pioneer5.json

其内容大致如下:

// dtbo/pioneer5.json
{
    "entries": {
        "dtbo_1": {
            "dts":"dtbo/pioneer5-ssz028a-s01a-m.dts"
        },
        "dtbo_2": {
            "dts":"dtbo/pioneer5-ssc028b-s01a-s.dts"
        },
        "dtbo_3": {
            "dts":"dtbo/panel-SAT070AT50H18BH.dts"
        },
        .....
        "dtbo_8": {
            "dts":"dtbo/panel-M270HVN02.dts"
        },
        "dtbo_9": {
            "dts":"dtbo/panel-DV150X0M.dts"
        }
    }
}

按照目前的设计,因为pioneer5-android.dts默认支持SSC028A-S01A-S,对于SSZ028A-S01A-M和SSC028B-S01A-S分别有pioneer5-ssz028a-s01a-m.dts和pioneer5-ssc028b-s01a-s.dts用于描述他们与SSC028A-S01A-S的配置差异

以pioneer5-ssz028a-s01a-m.dts为例,因为SSZ028A-S01A-M的padmux配置和SSC028A-S01A-S有所差异,于是有:

// dtbo/pioneer5-ssz028a-s01a-m.dts
/* The DTBO setting of SSZ028A-S01A-M board */

/dts-v1/;
/plugin/;

#include "../drivers/sstar/include/pioneer5/padmux.h"
#include "../drivers/sstar/include/pioneer5/gpio.h"
#include "../drivers/sstar/include/mdrv_puse.h"

/ {
    compatible = "sstar_dtbo,ssz028a_s01a_m";
};

&padmux {
    compatible = "sstar,padmux";
    schematic =
        // SDMMC0
        <PAD_I2C0_SDA            PINMUX_FOR_I2C0_MODE_1          MDRV_PUSE_I2C0_SDA>,
        <PAD_I2C0_SCL            PINMUX_FOR_I2C0_MODE_1          MDRV_PUSE_I2C0_SCL>,
        <PAD_I2C1_SDA            PINMUX_FOR_I2C1_MODE_1          MDRV_PUSE_I2C1_SDA>,
        <PAD_I2C1_SCL            PINMUX_FOR_I2C1_MODE_1          MDRV_PUSE_I2C1_SCL>,
        // I2C5 for touch panel
        <PAD_I2C5_SCL            PINMUX_FOR_I2C5_MODE_1          MDRV_PUSE_I2C5_SCL>,
        <PAD_I2C5_SDA            PINMUX_FOR_I2C5_MODE_1          MDRV_PUSE_I2C5_SDA>,
+-- 54 lines: TTL24--------------------------------------------------------------------------------------------------------------------------------------------------------------------
        // DMIC
        <PAD_SR_PDN1             PINMUX_FOR_DMIC_8CH_MODE_2      MDRV_PUSE_DMIC2_CLK>,
        <PAD_SR_MCLK1            PINMUX_FOR_DMIC_8CH_MODE_2      MDRV_PUSE_DMIC2_D0>,
        <PAD_SR_RST1             PINMUX_FOR_DMIC_8CH_MODE_2      MDRV_PUSE_DMIC2_D1>,
        <PAD_I2C1_SDA            PINMUX_FOR_DMIC_8CH_MODE_2      MDRV_PUSE_DMIC2_D2>,
        <PAD_I2C1_SCL            PINMUX_FOR_DMIC_8CH_MODE_2      MDRV_PUSE_DMIC2_D3>,
        // SPDIF
        <PAD_SPDIF_TX            PINMUX_FOR_SPDIF_MODE_1         MDRV_PUSE_AIO_SPDIF_TX>,

        <GPIO_NR                 PINMUX_FOR_UNKNOWN_MODE         MDRV_PUSE_NA>;
    status = "ok";
};

3. 验证DTB Overlay

3.1 U-boot dtbo overlay

将dtbo.img编译出来烧录到开发板后,按照《SigmaStar DTB overlay功能介绍》需要打开相关的U-boot Kconfig启动DTB Overlay功能并将pioneer5-ssz028a-s01a-m.dtbo的/compatible属性"sstar_dtbo,ssz028a_s01a_m"添加到U-boot的环境变量"uboot_dtbo_list"中命令形如:

env set uboot_dtbo_list ' sstar_dtbo,ssz028a_s01a_m;
env save

U-boot启动过程中会出现如下log:

U-Boot 2021.10 (Dec 13 2022 - 15:04:07 +0800)

SoC: SigmaStar pioneer5
Model: PIONEER5
Version: P5##gb9e34cd
DRAM:  256 MiB
Info: Load env from raw partition env
Info: Uboot dtb overlay success

可以通过U-boot环境变量fdtcontroladdr获取到U-boot dtb在内存中的位置后,使用fdt命令查看overlay前后差异。

3.2 Kernel dtbo overlay

将dtbo.img编译出来烧录到开发板后,按照《SigmaStar DTB overlay功能介绍》需要打开相关的U-boot Kconfig启动DTB Overlay功能并将pioneer5-ssz028a-s01a-m.dtbo的/compatible属性"sstar_dtbo,ssz028a_s01a_m"添加到U-boot的环境变量"kernel_dtbo_list"中命令形如:

env set kernel_dtbo_list ' sstar_dtbo,ssz028a_s01a_m;
env save

启动Kernel过程中会出现如下log:

Booting kernel at 0x20200000 with fdt at 24000000 ramdisk 0x25000000:0x00d05d0a...


   Uncompressing Kernel Image
## Flattened Device Tree blob at 24000000
   Booting using the fdt blob at 0x24000000
Info: kernel address offset 0xfe0000000
Info: Kernel dtb overlay success
   Using Device Tree in place at 0000001004000000, end 000000100401b265

可以查看节点:

od -t x4 -w 12 /proc/device-tree/soc/padmux/schematic

对比DTB overlay前后的内容查看效果。