高通UEFI研究[六]

 

 

 

UEFI PMIC部分研究

1、PMIC驱动结构

2、

DriverSource pathFunctionality
AdcDxe<src root> \uefi\edk2\QcomPkg\
Drivers\AdcDxe
 Provides abstraction of ADC functionality through
protocols
 Not platform-specific
AdcLib<src root> \uefi\edk2\QcomPkg\
Library\AdcLibB
 Implements register-level access of ADC functionalities
 Platform-specific
QcomChargerDxe<src root> \uefi\edk2\QcomPkg\
Drivers\QcomChargerDxe
 Provides abstraction of charging and gauge
functionality of the system
 Interface between Microsoft® UEFI charger applications
or other high-level UEFI applications (such as FLASH)
 Battery management customization
PmicShutdownLib<src root> \uefi\edk2\QcomPkg\
Library\PmicShutdownLib
 Implementation of boot time and runtime
shutdown/reset functionality
PmicDxe<src root> \uefi\edk2\QcomPkg\
Drivers\PmicDxe
 Provides abstraction of most PMIC functionalities
through protocols (see Section 3.3.1)
 Not platform-specific
PmicLib<src root> \uefi\edk2\QcomPkg\
Library\PmicLib
 Implements register-level access of PMIC functionality
 Platform-specific
SPMIDxe<src root> \uefi\edk2\QcomPkg\
Drivers\SPMIDxe
 Implementation of SPMI communication with PMIC

3、UEFI PMIC protocols

PMIC protocolsHeader fileUsage
PMIC_CLKBUFF_PROTOCOLEFIPmicClkBuff.hProtocol for the PMIC CLK buffer
PMIC_GPIO_PROTOCOLEFIPmicGpio.hProtocol for PMIC GPIO
PMIC_IBB_PROTOCOLEFIPmicIbb.hProtocol for PMIC IBB
PMIC_LAB_PROTOCOLEFIPmicLab.hProtocol for PMIC LAB
PMIC_LPG_PROTOCOLEFIPmicLpg.hProtocol for PMIC LPG
PMIC_MIPIBIF_PROTOCOLEFIPmicMipiBif.hProtocol for PMIC MipiBif
PMIC_MPP_PROTOCOLEFIPmicMpp.hProtocol for PMIC MPP
PMIC_PWM_PROTOCOLEFIPmicPwm.hProtocol for PMIC PWM
PMIC_PWRON_PROTOCOLEFIPmicPwrOn.hProtocol for PMIC PON
PMIC_RGB_LED_PROTOCOLEFIPmicRgbLed.hProtocol for PMIC RGB
PMIC_RTC_PROTOCOLEFIPmicRTC.hProtocol for PMIC RTC
PMIC_SCHG_PROTOCOLEFIPmicSchg.hProtocol for PMIC SCHG
PMIC_FG_PROTOCOLEFIPmicFg.hProtocol for PMIC FG
PMIC_VIB_PROTOCOLEFIPmicVib.hProtocol for PMIC VIB
PMIC_VREG_PROTOCOLEFIPmicVreg.hProtocol for PMIC LPG
PMIC_PWM_PROTOCOLEFIPmicPwm.hProtocol for PMIC VREG
PMIC_WLED_PROTOCOLEFIPmicWled.hProtocol for PMIC WLED

4、UEFI PMIC driver call flow

@RealTimeLib@PmicDxe
EFI_QCOM_PMIC_PWRON_PROTOCOL *pmic_pwron;
Status = gBS->LocateProtocol(&gQcomPmicPwrOnProtocolGuid, NULL, (VOID**)
&pmic_pwron;
Status = pmic_pwron->GetPonPblStatus (
RTCInternal.nPmicIndex,
EFI_PM_PWRON_PON_PBL_STATUS_XVDD_RB_OCCURRED,
&pmicWasBatteryRemoved);
EFI_QCOM_PMIC_PWRON_PROTOCOL
PmicPwronProtocolImplementation =
{
PMIC_PWRON_REVISION,

EFI_PmicPwronGetPonPblStatus,
};
struct _EFI_QCOM_PMIC_PWRON_PROTOCOL {
UINT32 Revision;

EFI_PM_PWRON_GET_PON_PBL_STATUS GetPonPblStatus;
};
EFI_STATUS EFIAPI EFI_PmicPwronGetPonPblStatus
(
IN UINT32 PmicDeviceIndex,
IN EFI_PM_PWRON_PON_PBL_STATUS_TYPE PblStatusType,
OUT BOOLEAN *Status
) {

errFlag = pm_pon_pbl_status_get(PmicDeviceIndex,
(pm_pwron_pon_pbl_status_type)PblStatusType, Status);

return EFI_SUCCESS;
}
@PmicLib
pm_err_flag_type pm_pon_pbl_status_get(unsigned pmic_device_index,
pm_pwron_pon_pbl_status_type pbl_status_type, boolean *status)
{

return ((pm_pwron_data_type*)mappedResource)->ipwron_get_pon_pbl_status(
mappedResource,
pbl_status_type, status,
(uint8)resourceIndex);

}
pmiC_PmicResource* pm_pwron_driver_init( pmiC_PmicDevice *device )
{
...
pmiC_PmicResource_Init(pwron, PWRON_ModuleType, device);

((pm_pwron_data_type*)pwron)->ipwron_get_pon_pbl_status
= pm_pwron_get_pon_pbl_status_alg;

 

5、

6、PMIC各文件夹介绍

    API – boot_images\QcomPkg\Include\api\systemdrivers\pmic
     Structure – boot_images\QcomPkg\Library\PmicLib
     Directory structure

FolderDescription
appHigh-level application drivers:
• Dead battery charging
• Reset APIs
• RGB/WLED interface
commSPMI communication interface files
configPMIC specific configuration files
driversLow-level drivers for each PMIC module
frameworkCommon code required to load PMIC configuration:
• SPMI initialization
• XBL core PMIC initialization
• XBL loader PMIC initialization
• Load chipset specific configuration
• Fuel gauge SRAM
npaNode power architecture interface (see the
Regulator/NPA Software Architecture diagram)
pmic_devicesPMIC hardware version information
psiEntry point to the PMIC ELF image
scriptsDebug scripts
targetMSM chipset specific configuration files
• PMIC PBS RAM sequence – PMIC warm reset
and sleep enter/exit sequences are defined here
• PMIC SBL (boot) sequence – All essential PMIC
module configuration is done here
utilsRequired utility functions for PMIC drivers (internal)

7、LAB  IBB解释以及输出电源

Display ± bias A.

LCD/AMOLED boost (LAB) for + B.

Inverting buck/boost (IBB) for -

8、NPA相关

A driver may use the Node Power Architecture (NPA) to represent 
resources controlled by the driver

(1).定义npa node definition

    static npa_resource_definition sleep_uber_resource[] = 
    { 
      {
        "/sleep/uber",        /* Name */
        "on/off",             /* Units */
        0x7,                  /* Max State */
        &npa_or_plugin,       /* Plugin */
        NPA_RESOURCE_DEFAULT, /* Attributes */
        NULL,                 /* User Data */
      }
    };

    npa_node_definition sleep_uber_node = 
    { 
      "/node/sleep/uber", /* name */
      sleep_uber_driver,  /* driver_fcn */
      NPA_NODE_DEFAULT,   /* attributes */
      NULL,               /* data */
      0, NULL,            /* dependency count, dependency list */
      NPA_ARRAY(sleep_uber_resource)
    };
 
(2).npa_define_node(&sleep_uber_node, initial_state, NULL),调用这个函数初始化这个NPA node 
(3).创建Client

  uber_node_handle = npa_create_sync_client("/sleep/uber",
                                            "sleep",
                                            NPA_CLIENT_REQUIRED);
 
(4).npa_issue_required_request(uber_node_handle, request) : request

NPA client的创建函数是:npa_create_sync_client() 
NPA clien request的函数是:npa_issue_required_request() 
NPA client创建并request这个资源,必须要适用像下面这样的npa node。这个可以直接像下面这样定义。然后再使用。

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
高通UEFI高通公司为了支持其处理器和芯片组在Android设备上的引导和初始化而开发的软件模块。UEFI(统一扩展固件界面)是一种新型的固件标准,取代了过去的BIOS(基本输入输出系统)。高通UEFI开发Android开发文档主要提供了有关在使用高通处理器和芯片组的Android设备上进行开发的指导和说明。 该文档首先介绍了如何正确设置开发环境,包括安装必要的软件和驱动程序。接着,文档介绍了高通UEFI的架构和工作原理,包括引导流程、启动流程和初始化过程。开发人员可以深入了解UEFI在Android设备上的作用和功能。 文档还提供了如何进行UEFI开发的具体指导,包括如何编写UEFI应用程序、如何调试和测试UEFI应用程序以及如何进行项目集成等。针对不同的开发需求,文档也提供了各种开发和定制UEFI的选项和工具,使开发人员能够根据实际情况进行灵活的开发和调试。 此外,文档还包含了一些实际案例和示例代码,帮助开发人员更好地理解如何使用高通UEFI开发Android设备,并且提供了一些常见问题和解决方案以供参考。 总而言之,高通UEFI开发Android开发文档为开发人员提供了一个全面的指南,帮助他们理解和应用高通UEFI在Android设备上的开发和定制。通过这些文档,开发人员可以更加有效地利用高通UEFI提供的功能和特性,为Android设备开发出更加稳定和高性能的引导和初始化软件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值