高通UEFI研究[六]

UEFI PMIC部分研究

1、PMIC驱动结构

2、

Driver Source path Functionality
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 protocols Header file Usage
PMIC_CLKBUFF_PROTOCOL EFIPmicClkBuff.h Protocol for the PMIC CLK buffer
PMIC_GPIO_PROTOCOL EFIPmicGpio.h Protocol for PMIC GPIO
PMIC_IBB_PROTOCOL EFIPmicIbb.h Protocol for PMIC IBB
PMIC_LAB_PROTOCOL EFIPmicLab.h Protocol for PMIC LAB
PMIC_LPG_PROTOCOL EFIPmicLpg.h Protocol for PMIC LPG
PMIC_MIPIBIF_PROTOCOL EFIPmicMipiBif.h Protocol for PMIC MipiBif
PMIC_MPP_PROTOCOL EFIPmicMpp.h Protocol for PMIC MPP
PMIC_PWM_PROTOCOL EFIPmicPwm.h Protocol for PMIC PWM
PMIC_PWRON_PROTOCOL EFIPmicPwrOn.h Protocol for PMIC PON
PMIC_RGB_LED_PROTOCOL EFIPmicRgbLed.h Protocol for PMIC RGB
PMIC_RTC_PROTOCOL EFIPmicRTC.h Protocol for PMIC RTC
PMIC_SCHG_PROTOCOL EFIPmicSchg.h Protocol for PMIC SCHG
PMIC_FG_PROTOCOL EFIPmicFg.h Protocol for PMIC FG
PMIC_VIB_PROTOCOL EFIPmicVib.h Protocol for PMIC VIB
PMIC_VREG_PROTOCOL EFIPmicVreg.h Protocol for PMIC LPG
PMIC_PWM_PROTOCOL EFIPmicPwm.h Protocol for PMIC VREG
PMIC_WLED_PROTOCOL EFIPmicWled.h Protocol 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、

扫描二维码关注公众号,回复: 9868307 查看本文章

6、PMIC各文件夹介绍

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

Folder Description
app High-level application drivers:
• Dead battery charging
• Reset APIs
• RGB/WLED interface
comm SPMI communication interface files
config PMIC specific configuration files
drivers Low-level drivers for each PMIC module
framework Common code required to load PMIC configuration:
• SPMI initialization
• XBL core PMIC initialization
• XBL loader PMIC initialization
• Load chipset specific configuration
• Fuel gauge SRAM
npa Node power architecture interface (see the
Regulator/NPA Software Architecture diagram)
pmic_devices PMIC hardware version information
psi Entry point to the PMIC ELF image
scripts Debug scripts
target MSM 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
utils Required 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。这个可以直接像下面这样定义。然后再使用。

发布了25 篇原创文章 · 获赞 0 · 访问量 995

猜你喜欢

转载自blog.csdn.net/jlgcumt/article/details/104842586