Device tree customization
,
DALCHIPINFO_ID_MSM8226 = 158,
boot_images\core\api\systemdrivers\DDIPlatformInfo.h
...
DALPLATFORMINFO_TYPE_CDP = 0x01, /**< Target is a MSM CDP/SURF device. */
DALPLATFORMINFO_TYPE_MTP_MSM = 0x08, /**< Target is a MSM MTP device. */
DALPLATFORMINFO_TYPE_QRD = 0x0B, /**< Target is a QRD device. */
DT Header
About dt.img format, please refer to dtbtool.txt and bootable\bootloader\lk\platform\msm_shared\smem.h
kernel\arch\arm\boot\dts\msm8226-cdp.dts
model = "Qualcomm MSM 8226 CDP";
compatible = "qcom,msm8226-cdp", "qcom,msm8226", "qcom,cdp";
qcom,msm-id = <145 1 0>;
kernel\arch\arm\boot\dts\msm8226-mtp.dts
model = "Qualcomm MSM 8226 MTP";
compatible = "qcom,msm8226-mtp", "qcom,msm8226", "qcom,mtp";
qcom,msm-id = <145 8 0>;
kernel\arch\arm\boot\dts\msm8226-qrd.dts
model = "Qualcomm MSM 8226 QRD";
compatible = "qcom,msm8226-qrd", "qcom,msm8226", "qcom,qrd";
qcom,msm-id = <145 11 0>;
kernel\arch\arm\boot\dts\msm8916-qrd-skuh.dts
model = "Qualcomm Technologies, Inc. MSM 8916 QRD SKUH";
compatible = "qcom,msm8916-qrd-skuh", "qcom,msm8916-qrd", "qcom,msm8916", "qcom,qrd";
qcom,board-id = <0x1000b 0> , <0x1000b 4>;
Notes: Here subtype = 0/4; major version= 01 minor version = 00, platform type = 0b
CDT Description XML
boot_images\core\boot\secboot3\scripts\jedec_lpddr2_single_channel.xml
<device id="cdb0">
<props name="platform_id" type="DALPROP_ATTR_TYPE_BYTE_SEQ">
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, end
</props>
</device>
Example of 8x26 device
CDP:
0x03, 0x01, 0x01, 0x00, 0x00, 0x00, end
MTP:
0x03, 0x08, 0x01, 0x00, 0x00, 0x00, end
QRD:
0x03, 0x0B, 0x01, 0x00, 0x00, 0x00, end
Example of 8916 device
QRD SKUH:
0x03, 0x0B, 0x01, 0x00, 0x04, 0x00, end
Byte 0: platform_id Version
Byte 1: platform_id type:
0x01: Target is a SURF device
0x08: Target is a MTP device
0x0B: Target is a QRD device
Byte 2: platform_id major platform version
Byte 3: platform_id minor platform version
Byte 4: platform_id subtype
What's you need do?
Generate CDT image and boot_cdt_array.c
- cd boot_images\core\boot\secboot3\scripts
- modify <jedec_lpddr2_single_channel.xml>
- python cdt_generator.py jedec_lpddr2_single_channel.xml <cdt image>.bin
Program CDT image on device
cd boot_images/core/boot/secboot3/scripts/emmc_cdt_program_scripts
python ../../../../storage/tools/ptool/ptool.py -x partition.xml -p 2
modify <jedec_lpddr2_single_channel.xml>
QRD HW V2:
0x03, 0x0B, 0x02, 0x00, 0x00, 0x00, end
python cdt_generator.py jedec_lpddr2_single_channel.xml platform_ddr.bin
cp platform_ddr.bin emmc_cdt_program_scripts
T32
run platform_ddr_emmc_cdt_program.cmm
QPST
platform_ddr_prog_cfg.xml
Change default CDT in sbl1 image
- copy boot_cdt_array.c to boot_images\core\boot\secboot3\hw\msm8x26
- modify config_data_table[] in boot_cdt_array.c
- rebuild sbl1
- program sbl1 image
> fastboot flash sbl1 sb1.mbn or use QPST emmcdownload.exe
Generate DT Binary
- <modify dts>
- dtc -p 1024 -O dtb -o msm8626.dtb msm8626.dts
- cat zImage msm8626.dtb > boot.img
- program boot image
> fastboot flash boot boot.img
Temp workaround
After previous step, if the device still stop at LK(usb port fastboot), you can try this temp workaround
bootable\bootloader\lk\platform\msm_shared\dev_tree.c
struct dt_entry * dev_tree_get_entry_ptr(struct dt_table *table)
{
<snip>
//workaround: find out the DTB entry index from boot.img(or dt.img)
// change below code, force return expected expected dt_entry_ptr,
if((dt_entry_ptr->platform_id == board_platform_id()) /* &&
(dt_entry_ptr->variant_id == 1) &&
(dt_entry_ptr->soc_rev == 0)*/ )
{
return dt_entry_ptr ++;
How to debug
When mismatch issue happens, lk normally will print error log with below format:
ERROR: Unable to find suitable device tree for device ( [ chipset id ] [ soc version ] [ platform id type] [ platform subtype] )
for example as below
ERROR: Unable to find suitable device tree for device (164/0x00010001/11/0)
Match Procedure
1. SBL will get chipset id, soc version from H/W regiser
2. SBL fetch platform id type and platform subtype from CDT partitioin
3. SBL write those information into share memory
4. LK get those information and try to find suitable DTS entry.
[chipset id] and [soc version]:
For device:
read from H/W register, can not modify
For DTS:
qcom,msm-id = <chipset_id, soc version>
[Platform id type] and [platform subtype]:
For device, defined in CDT xml file with below format:
boot_images\core\boot\secboot3\scripts\jedec_lpddr2_single_channel.xml
<device id="cdb0">
<props name="platform_id" type="DALPROP_ATTR_TYPE_BYTE_SEQ">
0x03, 0x0B, 0x01, 0x00, 0x04, 0x00, end
</props>
</device>
Byte 0: platform_id Version
Byte 1: platform_id type:
0x01: Target is a SURF device
0x08: Target is a MTP device
0x0B: Target is a QRD device
Byte 2: platform_id major platform version
Byte 3: platform_id minor platform version
Byte 4: platform_id subtype
So what you need is to care about Byte 1 and Byte 4
For DTS:
qcom,board-id = <platform_id, subtype_id>
Device tree customization的更多相关文章
- Device Tree(二):基本概念
转自:http://www.wowotech.net/linux_kenrel/dt_basic_concept.html 一.前言 一些背景知识(例如:为何要引入Device Tree,这个机制是用 ...
- Linux and the Device Tree
来之\kernel\Documentation\devicetree\usage-model.txt Linux and the Device Tree ----------------------- ...
- linux下的device tree
在我个人的理解,device tree就是描述硬件设备的,目前有什么配置,把这些配置信息告诉linux内核,让内核去识别,增强了内核的通用性,不用因为平台不同而每次都要编译新内核了. 配置device ...
- Device Tree(三):代码分析【转】
转自:http://www.wowotech.net/linux_kenrel/dt-code-analysis.html Device Tree(三):代码分析 作者:linuxer 发布于:201 ...
- ARM Linux 3.x的设备树(Device Tree)
http://blog.csdn.net/21cnbao/article/details/8457546 宋宝华 Barry Song <21cnbao@gmail.com> 1. ...
- Device Tree Usage( DTS文件语法)
http://elinux.org/Device_Tree_Usage Device Tree Usage Top Device Tree page This page walks throu ...
- ARM Linux 3.x的设备树(Device Tree)
1. ARM Device Tree起源 Linus Torvalds在2011年3月17日的ARM Linux邮件列表宣称“this whole ARM thing is a f*cking pai ...
- Device Tree(三):代码分析
一.前言 Device Tree总共有三篇,分别是: 1.为何要引入Device Tree,这个机制是用来解决什么问题的?(请参考引入Device Tree的原因) 2.Device Tree的基础概 ...
- Device Tree(一):背景介绍
一.前言 作为一个多年耕耘在linux 2.6.23内核的开发者,各个不同项目中各种不同周边外设驱动的开发以及各种琐碎的.扯皮的俗务占据了大部分的时间.当有机会下载3.14的内核并准备学习的时候,突然 ...
随机推荐
- 通过内核修改centos密码
在开机启动的时候按键盘上的"E"键会进入如下界面. 选择相应的内核,再次按"E",出现下图,选择第二项,再次按"E"键 经过第二步,这个画面 ...
- SpringSecurity 进行自定义Token校验
背景 Spring Security默认使用「用户名/密码」的方式进行登陆校验,并通过cookie的方式存留登陆信息.在一些定制化场景,比如希望单独使用token串进行部分页面的访问权限控制时,默认方 ...
- Openstack: Single node Installation and External Network Accessing Configuration Guide
Summary of installation Step 0: Prerequisites Step 1: Create Openstack hostsystem Step 2: Config Ope ...
- 全面剖析Redis Cluster原理和应用
全面剖析Redis Cluster原理和应用 1.Redis Cluster总览 1.1 设计原则和初衷 在官方文档Cluster Spec中,作者详细介绍了Redis集群为什么要设计成现在的样子.最 ...
- Linux系统中查询发行版本号以及内核版本的命令总结
了解Linux发行版本的版本号是一项非常重要的事情,大多数软件对系统的版本都有要求,发行版本号与软件不匹配,软件将无法安装或者无法使用.这边集合市面上流行的Linux发行版本版本号查询方法.有了这边文 ...
- Python logging 模块和使用经验
记录下常用的一些东西,每次用总是查文档有点小麻烦. py2.7 日志应该是生产应用的重要生命线,谁都不应该掉以轻心 有益原则 级别分离 日志系统通常有下面几种级别,看情况是使用 FATAL - 导致程 ...
- 如果用一个循环数组q[0..m-1]表示队列时,该队列只有一个队列头指针front,不设队列尾指针rear,求这个队列中从队列投到队列尾的元素个数(包含队列头、队列尾)。
#include <iostream> using namespace std; //循环队列(少用一个空间)长度 #define M (8+1) typedef struct node ...
- Struts 2 标签库
<s:if>标签 拥有一个test属性,其表达式的值用来决定标签里内容是否显示 <s:if test="#request.username=='clf'"> ...
- scala for spark
写了点scala的内容,方便看spark源码,估计一两天就能看完,内容比较粗浅. 下载地址: http://download.csdn.net/detail/lsshlsw/7983541
- Blue Path(基于cocos2dx 3.0)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=498 iTunes下载:http ...