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的内核并准备学习的时候,突然 ...
随机推荐
- Spring + mybatis 集成
具体项目可参照:https://github.com/LuoXiaoyi/springmvc 一.环境准备:Spring4.3.5 + Mybatis3.4.6 + Mybatis-Spring 1. ...
- Sharding-jdbc实现分库分表
首先在pom文件中引入需要的依赖 <dependency> <groupId>io.shardingjdbc</groupId> <artifactId> ...
- ROS新功能包PlotJuggler绘图
http://www.ros.org/news/2017/01/new-package-plotjuggler.html PlotJuggler,一个基于Qt的应用程序,允许用户加载,搜索和绘图数据. ...
- Redis之(六)配置详解
进入Redis的安装包,里面的"redis.conf"就是默认的配置文件,启动Redis Server的时候,可以指定加载某个路径下的配置文件"redis-server ...
- Swift中方法(method)所谓的lazy绑定简介
我们知道在ruby之类的动态语言中对象方法可以先从类中预先抽取,然后再应用到某个具体对象上.这称为无绑定的method对象,也可以叫做lazy绑定. 下面举个例子: irb(main):004:0&g ...
- Tomcat如何实现Comet
Comet模式是一种服务器端推技术,它的核心思想提供一种能让当服务器端往客户端发送数据的方式.Comet模式为什么会出现?刚开始人们在客户端通过不断自动刷新整个页面来更新数据,后来觉得体验不好又使用了 ...
- 剑指Offer——知识点储备-数据库基础
剑指Offer--知识点储备-数据库基础 数据库 事务 事务的四个特性(ACID): 原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Dura ...
- Python Tkinter小试
前两天看到一篇关于Python使用Tkinter 的博文,写的很好.就拿来研究了一下,改了改.现分享如下: 参考 代码 # coding:utf8 # python2.73 winxp ''''' 天 ...
- SpringMVC常用配置
关于Spring.SpringMVC我们前面几篇博客都介绍了很多,但是还不够,这些框架中涉及到的注解.配置非常多,那么我们今天再来介绍一个SpringMVC的基本配置,灵活的使用这些配置,可以让我们在 ...
- DoesNotExist at /admin/
DoesNotExist at /admin/ User has no account. Request Method: GET Request URL: http://127.0.0.1:8000/ ...