UEFI的流程

UEFI跟uboot一样都是在在kernel加载启动之前,正确的引导指定启动服务,并向内核传递信息,代替原先的uboot。它包含了上电、驱动实现,以及os环境的建立和应用程序(类似于fastboot)。这个os是UEFI自己独立运行独有。

UEFI由XBL和ABL组成:

  • XBL:原先的LK移到这里,负责驱动和充电功能,属于高通的私有代码。其中大量的使用了protocol,包含了驱动函数指针和数据,也就是驱动,在ABL可以直接调用。

  • ABL:应用程序,主要作用是加载引导kernel,和fastboot。在Android 代码测。

lcd流程:

  • DisplayDxeInitialize 函数入口:Drivers/DisplayDxe/DisplayDxe.inf 文件中ENTRY_POINT=DisplayDxeInitialize。位置:BOOT.XF.4.1\boot_images\QcomPkg\Drivers\DisplayDxe\DisplayDxe.c

  • CreateEventEx:创建回调函数,关于给屏幕上下电

  • DisplayPwr_InitLPMSupport:初始化相关,如电源、时钟。

  • MDPSetProperty:初始化ABL上下文,获得支持的屏。位置QcomPkg\Library\MDPLib\MDPLib.c

  • Display_Utils_Initialize:通过 MDP_DISPLAY_PROPERTY_ABL_INTERFACE_INIT 类型进入

  • CheckTargetPanelSupport:获取所有的panel 列表

  • MDPPlatformConfigure:获取gPanelList数组,保存在psPanelDTInfo中,从头文件#include "MDPPlatformLib.h"可以看出,调用的是 /MDPPlatformLibBoot/MDPPlatformLib.c 中的代码

  • MDP_SetBootServiceVariable: QcomTokenSpace GUID 配置变量PanelCount和PanelList

  • CheckPanelOverride:检查ABL是否有配置覆盖

  • MDPInit:初始化屏。位置boot_images/QcomPkg/Library/MDPLib/MDPLib.c

  • MDP_OSAL_CALLOC:分配 DSI 和 I2C 相关的缓存内存资源

  • MDPPlatformConfigure:判断是否有硬件加速

  • MDPPlatformConfigure:获取平台芯片id

  • sInitParam.aSupportedDisplays[MDP_DISPLAY_PRIMARY]):如果配置了MDP_DISPLAY_PRIMARY

  • MDPPower:上电

  • MDPDetect:检查默认配置的屏幕,通过MDPDetectPanel 读取LCD id,选择具体屏的xml

  • DisplayDxeSelectMode:配置显示屏的模式

  • MDPSetProperty:使能主屏显示prop属性

  • InstallMultipleProtocolInterfaces:仅当检测到面板时才安装显示协议。

UEFI之display的移植:

  1. BOOT.XF.4.1/boot_images/QcomPkg/Settings/Panel下复制一份xml修改其中的数据:Panel_cptf_xxxx_1440_vid.xml

  1. SocPkg/AgattiPkg/LAA/Core.fdf :把该xml加入编译,guid可以用工具生成

FILE FREEFORM = 439836d3-599f-4156-a671-f98a64d8482b {SECTION UI = "Panel_cptf_xxxxx_1440_vid.xml"SECTION RAW = QcomPkg/Settings/Panel/Panel_cptf_ili8911_1440_vid.xml}
  1. Include/Library/MDPPlatformLib.h 添加lcd宏:MDPPLATFORM_PANEL_xxxxx_1440_HDPLUS_VIDEO

  1. SocPkg/AgattiPkg/Library/MDPPlatformLib/MDPPlatformLibPanelConfig.h,将lcd宏、功能函数、xml绑定

 { MDPPLATFORM_PANEL_xxxxx_1440_HDPLUS_VIDEO,               // ePanelSelected"Panel_cptf_xxxx_1440_vid.xml",                          // pPanelXmlConfigPanel_Default_PowerUp,                                      // pPanel_PowerUpPanel_Default_PowerDown,                                     // pPanel_PowerDownPanel_Default_Reset,                                        // pPanel_ResetPanel_Default_Peripheral_Power,                             // pPanel_Peripheral_PowerPanel_Default_Brightness_Enable,                            // pPanel_Brightness_EnablePanel_Default_Brightness_Level                              // pPanel_Brightness_Level},
  1. SocPkg/AgattiPkg/Library/MDPPlatformLib/MDPPlatformLib.c: fastBootPanelList和uefiPanelList

  • 添加fastBootPanelList:将lcd宏和xml及kernel的dts绑定

  PANEL_CREATE_ENTRY("cpft_xxxx_1440_vid",      MDPPLATFORM_PANEL_xxxxx_1440_HDPLUS_VIDEO,  "qcom,mdss_dsi_cpft_xxxx_video:",   DISP_INTF_DSI, DISP_TOPOLOGY_CONFIG_NONE,  DISP_TIMING_CONFIG_NONE,PLL_OVERRIDE_NONE, DISP_MODE_SINGLE_DSI | DISP_MODE_SKIP_BOOTLOADER,  DISP_MODE_SINGLE_DSI | DISP_MODE_SKIP_BOOTLOADER,     DISP_MODE_SINGLE_DSI | DISP_MODE_SKIP_BOOTLOADER),
  • uefiPanelList:将LCD的id和lcd宏绑定,读取id后会选择该lcd宏,选取该lcd配置

{  0x06,                                                  // uCmdType0x05,                                              // total number of retry on failures{{{0xDA, 0x00},                                       // address to read ID1{0xid, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}     // expected readback}, {{0xDB, 0x00},                                       // address to read ID2{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}     // expected readback},{{0xDC, 0x00},                                       // address to read ID3{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}     // expected readback}},0,                                                     // Lane remap order {0, 1, 2, 3}NULL,                                               // psPanelCfg (panel configuration)0,                                                     // uPanelCfgSizeMDPPLATFORM_PANEL_xxxxx_1440_HDPLUS_VIDEO,          // eSelectedPanel 0                                                      // uFlags},
  1. ./SocPkg/AgattiPkg/Library/MDPPlatformLib/MDPPlatformLibPanelCommon.h 设置修改lcd rest gpio:

#define DEFAULT_DISP_RESET_GPIO           82 
  1. 如果开机需要修改gpio的配置状态,可以修改SocPkg/AgattiPkg/Settings/TLMM/loader/TLMMChipset.xml

uefi-kernel之lcd移植

  1. vendor/qcom/proprietary/devicetree-4.19/qcom:复制其他panel dtsi并修改相关的proch值

&mdss_mdp {dsi_cpft_xxxx_video: qcom,mdss_dsi_cpft_xxxx_video {qcom,mdss-dsi-panel-name = "cptf xxxx video mode dsi panel";qcom,mdss-dsi-panel-controller = <&mdss_dsi0>;qcom,mdss-dsi-panel-type = "dsi_video_mode";qcom,mdss-dsi-panel-destination = "display_1";....
  1. ./bengal-sde-display.dtsi 添加头文件 :

#include "dsi-panel-cpft-xxxx-1440-plus-vid.dtsi"
  1. ./scuba-idp.dtsi添加电源、reset、背光模式

&dsi_cpft_xxxx_video {qcom,panel-supply-entries = <&dsi_panel_pwr_supply_no_labibb>;qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_dcs";qcom,bl-pmic-pwm-period-usecs = <100>;qcom,mdss-dsi-bl-min-level = <1>;qcom,mdss-dsi-bl-max-level = <4095>;qcom,platform-reset-gpio = <&tlmm 82 0>;qcom,platform-reset-gpio-always-on;qcom,platform-en-gpio = <&tlmm 105 0>;
};
  1. 添加clock时序:记得用2.0.0的时序表格

&dsi_cpft_xxxx_video {qcom,mdss-dsi-t-clk-post = <0x09>;qcom,mdss-dsi-t-clk-pre = <0x15>;qcom,dsi-select-clocks = "mux_byte_clk0", "mux_pixel_clk0","src_byte_clk0", "src_pixel_clk0","shadow_byte_clk0", "shadow_pixel_clk0";qcom,mdss-dsi-display-timings {timing@0 {qcom,mdss-dsi-panel-phy-timings =[1C 19 02 03 01 02 04 a01C 19 02 03 01 02 04 a01C 19 02 03 01 02 04 a01C 19 02 03 01 02 04 a01C 07 02 03 01 02 04 a0         ];qcom,display-topology = <1 0 1>;qcom,default-topology-index = <0>;};};
};
  1. 如果没有亮屏,可以试试息屏在亮屏。如果可以亮屏,则是xbl没亮问题而引起kernel亮屏失败。

我所理解的高通UEFI之display的流程和移植相关推荐

  1. 高通UEFI研究[三]

    QTI针对UEFI规范使用TianocoreEDK2实现. 它是一种开放源代码实施,可从www.tianocore.org/edk2/获得. TianoCore EDK II提供了现代,适用于UEFI ...

  2. 高通 UEFI:ABL(一)

    高通平台下的UEFI由XBL+ABL组成,主要完成各种客制化的需求实现,例如通过拉特定的gpio进入fastboot/recovery模式,读取ufs寿命,LCD兼容框架的实现等,想要实现客制化首先要 ...

  3. 我所理解的高通平台Lcd驱动框架

    帧缓冲(framebuffer)是 Linux 系统为显示设备提供的一个接口,它将显示缓冲区抽象,屏蔽图像硬件的底层差异,允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作.用户不必关系物理显示 ...

  4. 高通SDX12平台:启动流程梳理

    高通SDX12平台 启动流程梳理 1. 高通平台CPU类型介绍 通常我们所说的CPU如高通平台MSM8998.苹果A12, 华为海思平台(麒麟980.990)等,这些我们虽然叫CPU,但并不是只有一个 ...

  5. 高通SDM660芯片的启动流程

    高通芯片启动流程 QSEE 运行在安全模式并且只能被OEM签名. UEFI启动: bootable/bootloader/edk2/QcomModulePkg/Library/BootLib/Boot ...

  6. 高通Camera bring up软件流程【转】

    本文转载自:http://blog.csdn.net/liwei16611/article/details/51279658 高通camera bring up分为两种类型:YUV和bayer bri ...

  7. Android10 高通平台 softap热点基本流程2

    上一篇讲到SoftApManager.IdleState状态中处理CMD_START消息,这个消息用来打开热点功能.我们从这里继续看热点功能基本流程. public boolean processMe ...

  8. 高通MDM平台-搜网流程

    引言 样机上电之后如何自动选择合适的网络进行附着,如何对选择的小区确实是否可以驻守,本文将以高通平台为例,讲述从识别SIM开始,到注册到合适的小区这整个流程. 架构 LTE协议栈基本分为NAS(Non ...

  9. 从高通手动搜网代码流程看sd脚本的执行

    前记: 这是我好多年前写的一个文档了.有一年没有做modem侧了,最近一直在做AP原生拨号盘和框架.发现自己原来比较喜欢看协议文档,也喜欢对着协议看代码实现.看一个协议的过程中,总是发现原来还有更多相 ...

最新文章

  1. 【转】解密“设计模式”
  2. 高并发測试工具webbench
  3. HTML DOM那点儿事儿
  4. Java中的紧凑堆外结构/组合
  5. spring mvc学习(34):restful的delete
  6. 一文搞懂IT基础知识,讲通HTTP、TCP、IP、以太网
  7. Java基础学习总结(122)——Java八种基本数据类型的包装类及其装箱拆箱详解
  8. Kattis - whatdoesthefoxsay —— 字符串
  9. Linux中文档与目录的特殊权限
  10. matlab2016a下载包及安装教程
  11. Disunity_V0.5.0 提取Unity生成的APK资源的后续探索
  12. 软件生命周期是指什么?
  13. jmail 发送html,如何利用Jmail组件在线发送邮件
  14. 2022年R2移动式压力容器充装操作证考试题库及答案
  15. 163邮箱注册登录官网是什么?163邮箱登陆流程在这里
  16. Vue + element 实现课程表
  17. cpu性能测试软件 国际象棋,Fritz Chess Benchmark
  18. Discuz!论坛教程之去掉帖子列表页的附件图标的方法
  19. 计算机科学与技术反思录。
  20. 人工智能 α-β剪枝

热门文章

  1. Codeforces - Jeremy Bearimy
  2. Efficient Cinimatic Lighting(Jeremy Vickery)-1 Basic theory
  3. 反编译工具java知乎_GDA反编译器更新至3.66:支持污点传播分析、方法签名、python脚本...
  4. 谷粒商城-04-P44-P60
  5. web项目中上传的图片项目重新部署之后被清空如何解决?
  6. 开吃吧无线订餐机 改变餐饮O2O外卖行业
  7. 代码签名是如何工作的,为什么需要代码签名?
  8. 计算机网络如何选择路由器,路由器上网方式如何选择?
  9. JAVA学习(四):Java流程控制语句(顺序结构、if条件语句、switch条件语句、循环语句与跳转语句)
  10. win7下ie6兼容测试之Windows7(win7)下 XP Mode 下载、安装、设置完全图解