Step 1: OEMs can create their own device tree by adding "qcom,msm-id/qcom,board-id" entry at the top of their file. The hardware variant ID has to be unique and created by the OEMs. Please refer to slides 10-13 in doc # 80-ND928-80

,
  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的更多相关文章

  1. Device Tree(二):基本概念

    转自:http://www.wowotech.net/linux_kenrel/dt_basic_concept.html 一.前言 一些背景知识(例如:为何要引入Device Tree,这个机制是用 ...

  2. Linux and the Device Tree

    来之\kernel\Documentation\devicetree\usage-model.txt Linux and the Device Tree ----------------------- ...

  3. linux下的device tree

    在我个人的理解,device tree就是描述硬件设备的,目前有什么配置,把这些配置信息告诉linux内核,让内核去识别,增强了内核的通用性,不用因为平台不同而每次都要编译新内核了. 配置device ...

  4. Device Tree(三):代码分析【转】

    转自:http://www.wowotech.net/linux_kenrel/dt-code-analysis.html Device Tree(三):代码分析 作者:linuxer 发布于:201 ...

  5. ARM Linux 3.x的设备树(Device Tree)

    http://blog.csdn.net/21cnbao/article/details/8457546 宋宝华 Barry Song <21cnbao@gmail.com> 1.     ...

  6. Device Tree Usage( DTS文件语法)

    http://elinux.org/Device_Tree_Usage Device Tree Usage     Top Device Tree page This page walks throu ...

  7. 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 ...

  8. Device Tree(三):代码分析

    一.前言 Device Tree总共有三篇,分别是: 1.为何要引入Device Tree,这个机制是用来解决什么问题的?(请参考引入Device Tree的原因) 2.Device Tree的基础概 ...

  9. Device Tree(一):背景介绍

    一.前言 作为一个多年耕耘在linux 2.6.23内核的开发者,各个不同项目中各种不同周边外设驱动的开发以及各种琐碎的.扯皮的俗务占据了大部分的时间.当有机会下载3.14的内核并准备学习的时候,突然 ...

随机推荐

  1. 如何搭建lamp(CentOS7+Apache+MySQL+PHP)环境

    我的环境:虚拟机是:VMware-workstation-full-8.0.0-471780.exe:Linux系统用的是:CentOS-7-x86_64-Minimal-1503-01.ios;(阿 ...

  2. jQuery 遍历 – 过滤

    缩小搜索元素的范围 三个最基本的过滤方法是:first(), last() 和 eq(),它们允许您基于其在一组元素中的位置来选择一个特定的元素. 其他过滤方法,比如 filter() 和 not() ...

  3. Jmeter(二)_基础元件

    测试计划(Test Plan) 它用来描述一个测试方案,包含与本次性能测试所有相关的功能.也就说本次测试的所有内容是于基于一个计划的. "函数测试模式"复选框,如果被选择,它会使J ...

  4. jQuery中$(function()与(function($)等的区别详细讲解

    (function($) {-})(jQuery); 这里实际上是匿名函数,如下: function(arg){-} 这就定义了一个匿名函数,参数为arg 而调用函数时,是在函数后面写上括号和实参的, ...

  5. 改善database schema

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/50422102 本文作者:苏生米沿 Hibernate 读取你java模型类的映射元数据 ...

  6. GDAL创建图像提示Driver xxx does not support XXX creation option的原因

    经常在群里有人问,创建图像的时候为什么老是提示下面的信息. CPLError: Driver GTiff does not support DCAP_CREATE creation option Wa ...

  7. sum,filter和map参数里面的玄机

    首先是sum函数. 最常见的用法似乎是: >>> sum([1,2,3]) 6 但其实这是默认首个元素是数字0.我们可以指定其他数字: >>> sum([1,2,3 ...

  8. TextView + Spanned实现图文混排以及图片点击交互

    最近要实现图文混排的需求,webview过大,所以想到了用SpannableStringBuilder来实现. 不过参考了大量国内文章,大多数是教你如何实现图文混排,并没有提及图片点击交互的.有翻阅了 ...

  9. syslog(),closelog()与openlog()--日志操作函数

    在典型的 LINUX 安装中,/var/log/messages 包含所有的系统消息,/var/log/mail 包含来自邮件系统的其它日志消息,/var/log/debug 可能包含调试消息.根据你 ...

  10. MPAndroidChart——饼图

    MPAndroidChart--饼图 MPAndroidChart是安卓下的一个开源图形库,很多效果,简单看几个效果图 Github地址:https://github.com/PhilJay/MPAn ...