uefi_panel_display_bringup

The UEFI workflow is as follows:
    1. Set default panel
    2. Preconfigure MDP-related register and setup SMMU
    3. Display Dxe set mode
    4. Initialize DSI-Phy and Ctrl
    5. Initialize TG/PP and panel
    6. Display splash logo and exit UEFI
 

The UEFI workflow is as follows:
	1. Set default panel
	2. Preconfigure MDP-related register and setup SMMU
	3. Display Dxe set mode
	4. Initialize DSI-Phy and Ctrl
	5. Initialize TG/PP and panel
	6. Display splash logo and exit UEFI

The kernel bringUp in 80-PV988-84 Rev

Following sections provide the call flow for each of the above steps

The following figure shows the workflow of display panel bringup in UEFI.
      NOTE For Android devices, bring up the panel in the Linux kernel 
      before the panel bringup in the UEFI.
1:	Start

2:	Prepare panel data in one xml file per panel using existing MTP/CDP panel as reference.

3:	Modify XML data with panel init command, resolutions, timings and so on based on panel specifications.

4:	Define and configure panel GPIOs and regulators to reset panel, refer to Panel_CDP_PowerUP and Panel_CDP_PeripheralPower.

5:	Modify MDPPlatformConfigure ()
	MDPPLATFORM_CONFIG_POWERUP to connect platform panel to its reset functions.

6:	Build and flash

    Display comes up?

7:	if NO ->Debug No-> to start
	if Yes -> Enable continuous splash

8:  end

2.1.2 For boot version BOOT.XF.3.0 and later versions
  2.1.2.1 Prepare the XML file for panel configuration
  
  1. Prepare the XML data by referring to examples at <>/QcomPkg/Settings/Panel/*.xml
      The examples for panel, its resolution, and respective XML data is listed in the following table
  2. Modify the panel configuration based on the panel specifications and the UEFI XML format and save the XML file at <>/QcomPkg/Settings/Panel/*.xml
For details on all the configuration parameters related to display, see Display Drivers (ACPI and XML) Configuration Guide (80-NB116-2). The same XML syntax is shared between Windows ACPI and Linux Android UEFI display drivers
	 
  3. Add the panel name and panel xml file location to flash layout file at: <>/QcomPkg/SocPkg/<ChipsetName>/Common/Core.fdf

   For example,
#
# Display panel configuration xml
#
	FILE FREEFORM = 8cae2c55-fc5a-410b-812b-8ca22f572f36 {//uuid
	SECTION UI = "Panel_truly_wqxga_dsc_cmd.xml"
	SECTION RAW = QcomPkg/Settings/Panel/Panel_truly_wqxga_dsc_cmd.xml
}

	4. Add panel type to MDPPlatformLibPanelConfig file <>/QcomPkg/SocPkg/<ChipsetName>/Library/MDPPlatformLib/MDPPlatformLibPanelConfig.h

	MDPPlatformPanelFunctionTable
	a. Add new platform and panel xml in header files. For example,
	{
		MDPPLATFORM_PANEL_AUO_1080P_EDP, // ePanelSelected
		"Panel_auo_1080p_edp.xml", // pPanelXmlConfig
		Panel_CLS_PowerUp, // pPanel_PowerUp
		Panel_CLS_PowerDown, // pPanel_PowerDown
		Panel_CLS_Reset, // pPanel_Reset
		Panel_CLS_Peripheral_Power, // pPanel_Peripheral_Power
		Panel_CLS_Brightness_Enable, // pPanel_Brightness_Enable
		Panel_CLS_Brightness_Level // pPanel_Brightness_Level
	},

	b. Add new platform power/peripheral/backlight control functions under <>/QcomPkg/SocPkg/<ChipsetName>/Library/MDPPlatformLib/MDPPlatformLibPanelEdp.c. For
example,
	MDP_Status Panel_CLS_PowerUp(MDP_Display_IDType eDisplayId,
	Panel_PowerCtrlParams *pPowerParams){...}
	MDP_Status Panel_CLS_PowerDown(MDP_Display_IDType eDisplayId,
	Panel_PowerCtrlParams *pPowerParams){...}
	MDP_Status Panel_CLS_Peripheral_Power(MDP_Display_IDType eDisplayId,
	Panel_PowerCtrlParams *pPowerParams, bool32 bPowerUp){...}
	MDP_Status Panel_CLS_Brightness_Enable(MDP_Display_IDType eDisplayId,
	Panel_PowerCtrlParams *pPowerParams){...}
	MDP_Status Panel_CLS_Brightness_Level(MDP_Display_IDType eDisplayId,
	BacklightConfigType *pBacklightConfig){...}
	MDP_Status Panel_CLS_Reset(MDPPlatformPanelResetInfo *pResetInfo){...}

	5. Add OEM panel to uefiPanelList[0] and define its detection parameters at:<>/ QcomPkg/SocPkg/<ChipsetName>/Library/MDPPlatformLib/MDPPlatformLib.c
	
	For example,
const MDPPlatformPanelType uefiPanelList[] =
{
	MDPPLATFORM_PANEL_SHARP_4K_DSC_CMD, /* NT35950 4k
	command panel DSC mode */
	MDPPLATFORM_PANEL_SHARP_4K_DSC_VIDEO, /* NT35950 4k
	video panel DSC mode */
	MDPPLATFORM_PANEL_TRULY_WQXGA_DSC_CMD, /* Truly 2k cmd
	panel DSC mode single dsi */
	MDPPLATFORM_PANEL_TRULY_WQXGA_DSC_VIDEO, /* Truly 2k
	video panel DSC mode single dsi */
	MDPPLATFORM_PANEL_TRULY_WQXGA_DUALDSI_CMD, /* Truly 2k cmd
	panel non-DSC mode */
	MDPPLATFORM_PANEL_TRULY_WQXGA_DUALDSI_VIDEO, /* Truly 2k
	video panel non-DSC mode */
	MDPPLATFORM_PANEL_SHARP_4K_EDP, /* Sharp 4k edp
	panel */
	MDPPLATFORM_PANEL_SHARP_1080P_CMD, /* Sharp 1080P
	cmd panel */
	MDPPLATFORM_PANEL_TRULY_1080P_CMD, /* Truly 1080P
	cmd panel */
	MDPPLATFORM_PANEL_TRULY_1080P_VIDEO, /* Truly 1080P
	cmd panel */
	MDPPLATFORM_PANEL_BOE_AMOLED_WQHD_DSC_CMD, /* BOE AMOLED
	wqhd cmd panel DSC mode single dsi */
	MDPPLATFORM_PANEL_AUO_1080P_EDP, /* AUO 1080P eDP
	panel */
};

static PlatformDSIDetectParams uefiPanelList[] = {
// Panel #0 - Sharp 4k DSC Command Mode Panel (2160 x 3840 24bpp)
ID:0x8000
{
	0x06, // uCmdType
	0x05, // total
	
	number of retry on failures
	{
		{{0xDA, 0x00}, // address to
		read ID1
		{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // expected
		readback
		},
		{{0xDB, 0x00}, // address to
		read ID2
		{0x80, 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, //
		uPanelCfgSize
		MDPPLATFORM_PANEL_SHARP_4K_DSC_CMD, //
		eSelectedPanel
		0 // uFlags
	},

2.1.2.2 Define panel functions table

With the new UEFI display architecture, the MDPPlatformLib is restructured to support common
panel functions and customized OEM APIs for specific panel functions, which are not present on the
reference panel). Follow the steps to define the panel functions table:
	1. Refer to MDPPlatformLibPanelCommon.c for common panel functions and configurations.
	2. If the OEM panel uses the same common panel functions, then add the OEM panel to
		sMDPPlatformPanelFunction[] and connect function APIs at: <>/QcomPkg/SocPkg/
			ChipsetName/Library/MDPPlatformLib/MDPPlatformLibPanelConfig.h.
Example:
DPPlatformPanelFunctionTable
sMDPPlatformPanelFunction[MDPPLATFORM_PANEL_MAX] =
{
	MDPPLATFORM_PANEL_NONE, //
	ePanelSelected
	NULL, NULL, NULL, NULL, NULL, NULL, NULL
	...
	{
	MDPPLATFORM_PANEL_AUO_1080P_EDP, //
	ePanelSelected
	"Panel_auo_1080p_edp.xml", //
	pPanelXmlConfig
	Panel_CLS_PowerUp, //
	pPanel_PowerUp
	Panel_CLS_PowerDown, //
	pPanel_PowerDown
	Panel_CLS_Reset, // pPanel_Reset
	Panel_CLS_Peripheral_Power, //
	pPanel_Peripheral_Power
	Panel_CLS_Brightness_Enable, //
	pPanel_Brightness_Enable
	Panel_CLS_Brightness_Level //
	pPanel_Brightness_Level
	},
};

3. If the MDPPlatformLibPanelCommon.c does not contain the panel functions that OEM panel
	supports, then do one of the following:
	
	□ Modify MDPPlatformLibPanelCommon.c
	OR
	□ Prepare new files. For example, MDPPlatformLibPanelEdp.c.
	
2.1.2.3 Add platform panel to config file

To report the panel being used, as shown below in the MDPPlatformLib.c, add panel to the platform
in SetupPlatformPanelConfig():

	case EFI_PLATFORMINFO_TYPE_CLS:
	pPlatformPanel->eSelectedPanel = MDPPLATFORM_PANEL_AUO_1080P_EDP;
	break;
	case EFI_PLATFORMINFO_TYPE_RUMI:
	default:
	pPlatformPanel->eSelectedPanel = MDPPLATFORM_PANEL_NONE;
	break;
2.2 Configure panel GPIOs
	The following API is an example of the power-up configuration for the primary panel of an MTP device.
	OEMs must modify these platforms as required.
	
MDP_Status MDPPlatformConfigure(MDP_Display_IDType eDisplayId,
MDPPlatformConfigType eConfig, MDPPlatformParams *pPlatformParams)
{ }
	The TLMM GPIO needed for a panel on a device CDP/MTP, is available at: boot_images/
	QcomPkg/<ChipsetPkg>/Library/MDPPlatformLib/MDPPlatformLib.c
	
	@boot_images/QcomPkg/SocPkg/<ChipsetName>/Library/MDPPlatformLib/
	MDPPlatformLibPanelCommon.c
	MDPPlatformPanelGpioType sDefaultMDPPanelGpio =
	{
		24, // uDispResetGpio
		MDP_TE_GPIO_82, // eDispTeGpio
		26, // eDispModeGpio
	};
2.3 Configure power supplies
	
	Display power supplies are configured as following in the pm_config_pam.c file at: boot_images/
	boot/QcomPkg/SocPkg/<ChipsetName>/Settings/PMIC/pm_config_pam.c:
	
#define PMIC_NPA_CLIENT_NODE_DISP_EXT_DP "/node/pmic/client/disp_ext_dp"
#define PMIC_NPA_CLIENT_NODE_DISP_PRIM "/node/pmic/client/disp_prim"
#define PMIC_NPA_CLIENT_NODE_DISP_PRIM_AMOLED "/node/pmic/client/disp_prim_amoled"

The default power supply regulators for display are configured as following:
{
	PMIC_NPA_GROUP_ID_DISP_DP_ALT, // Resource Name
	PMIC_NPA_MODE_ID_GENERIC_ACTIVE, // Maximum Value
	NPA_RESOURCE_DEFAULT | NPA_RESOURCE_DRIVER_UNCONDITIONAL_FIRST, //
	Resource Attribute
	(void*) pm_pam_disp_dp_alt_rails_info, // Resource User Data
	PMIC_NPA_CLIENT_NODE_DISP_DP_ALT, // Node Name
	NPA_NODE_DEFAULT, // Node Attributes
	NULL,
	pm_pam_deps_disp_dp_alt, // Node Dependency
	
NPA_ARRAY_SIZE(pm_pam_deps_disp_dp_alt), // Deps Count
{
	PMIC_NPA_GROUP_ID_DISP_EDP, // Resource Name
	PMIC_NPA_MODE_ID_GENERIC_ACTIVE, // Maximum Value
	NPA_RESOURCE_SINGLE_CLIENT | NPA_RESOURCE_DRIVER_UNCONDITIONAL, //
	Resource Attribute
	(void*) pm_pam_disp_edp_rails_info, // Resource User Data
	PMIC_NPA_CLIENT_NODE_DISP_EDP, // Node Name
	NPA_NODE_DEFAULT, // Node Attributes
	NULL,
	pm_pam_deps_disp_edp, // Node Dependency
	NPA_ARRAY_SIZE(pm_pam_deps_disp_edp), // Deps Count
},
{
	PMIC_NPA_GROUP_ID_DISP_EXT_DP, // Resource Name
	PMIC_NPA_MODE_ID_GENERIC_ACTIVE, // Maximum Value
	NPA_RESOURCE_SINGLE_CLIENT | NPA_RESOURCE_DRIVER_UNCONDITIONAL, //
	Resource Attribute
	(void*) pm_pam_disp_ext_dp_rails_info, // Resource User Data
	PMIC_NPA_CLIENT_NODE_DISP_EXT_DP, // Node Name
	NPA_NODE_DEFAULT, // Node Attributes
	NULL,
	pm_pam_deps_disp_ext_dp, // Node Dependency
	NPA_ARRAY_SIZE(pm_pam_deps_disp_ext_dp), // Deps Count
},
{
	PMIC_NPA_GROUP_ID_DISP_PRIM, // Resource Name
	PMIC_NPA_MODE_ID_GENERIC_ACTIVE, // Maximum Value
	NPA_RESOURCE_SINGLE_CLIENT | NPA_RESOURCE_DRIVER_UNCONDITIONAL, //
	Resource Attribute
	(void*) pm_pam_disp_prim_rails_info, // Resource User Data
	PMIC_NPA_CLIENT_NODE_DISP_PRIM, // Node Name
	NPA_NODE_DEFAULT, // Node Attributes
	NULL,
	pm_pam_deps_disp_prim, // Node Dependency
	NPA_ARRAY_SIZE(pm_pam_deps_disp_prim), // Deps Count
},
As per the node-mapping definition, the power supply regulators are configured to enable display
power. If these configurations are not working, ensure to measure the voltage at regulator output and
contact QCT PMIC team for assistance.
For any additional power needs (for example, lab and ibb) of the panel, use
Panel_CDP_PeripheralPower API as shown below:
	@<directory>/boot_images/Qcompkg/SocPkg/<ChipsetName>/Library/MDPPlatformLib/MDPPlatformLib.c
    static MDP_Status Panel_CDP_PeripheralPower(MDP_Display_IDType eDisplayId,
		Panel_PowerCtrlParams *pPowerParams, bool32 bPowerUp)

NOTE :When panel does not require additional power supplies, then the
		Panel_CDP_PeripheralPower API throws an error, "please comment call to Panel_CDP_PeripheralPower".

2.4 Configure backlight

1. Configure the backlight interface type in QcomPkg/Include/Library/MDPTypes.h
	/** Defines the OEM backlight configuration options.
	*/
typedef enum
{
	MDP_PANEL_BACKLIGHTTYPE_NONE = 0, /**< No backlight adjustment is
	available. */
	MDP_PANEL_BACKLIGHTTYPE_PMIC, /**< Backlight is controlled through
	PMIC PWM or WLED. For OLED, PMIC uses SWIRE to control brightness */
	MDP_PANEL_BACKLIGHTTYPE_I2C, /**< Backlight is controlled through
	I2C. */
	MDP_PANEL_BACKLIGHTTYPE_DSI, /**< Backlight is controlled through
	the DSI command. */
	MDP_PANEL_BACKLIGHTTYPE_ACPI, /**< Backlight is controlled through
	the ACPI method. */
	MDP_PANEL_BACKLIGHTTYPE_MAX, /**< Enumeration marker for the max.
	*/
	MDP_PANEL_BACKLIGHTTYPE_FORCE_32BIT = 0x7FFFFFFF /**< Forces the
	enumeration to 32 bits. */
} MDP_Panel_BacklightType;	

2. Configure the backlight pmic driver type in QcomPkg/Include/Library/MDPTypes.h
	/** PMIC control method for backlight control.
	*/
	typedef enum
	{
		MDP_PMIC_BACKLIGHT_CONTROLTYPE_NONE = 0,
		/**< No backlight control method. */
		MDP_PMIC_BACKLIGHT_CONTROLTYPE_LPG,
		/**< Backlight controlled through LPG module. */
		MDP_PMIC_BACKLIGHT_CONTROLTYPE_WLED,
		/**< Backlight controlled through WLED module. */
		MDP_PMIC_BACKLIGHT_CONTROLTYPE_MAX,
		/**< Enumeration marker for the max. */
		MDP_PMIC_BACKLIGHT_CONTROLTYPE_FORCE_32BIT = 0X7FFFFFFF
		/**< Forces the enumeration to 32 bits. */
	} MDP_PmicBacklightControlType;
3. Configure the bit width (DSI panel only) – 8bits or 10 bits in QcomPkg/Settings/Panel/panel_xxx.xml	

	<BacklightBitWidth>10</BacklightBitWidth>
	
2.5 Enable panel power and reset power-up sequence	

	Add new panel power on/off/reset, backlight enable/backlight level functions in QcomPkg\SocPkg
\<ChipsetName>\Library\MDPPlatformLib\MDPPlatformLibPanelConfig.h

	MDPPlatformPanelFunctionTable
sMDPPlatformPanelFunction[MDPPLATFORM_PANEL_MAX] =
{
	…{
		MDPPLATFORM_PANEL_AUO_1080P_EDP, // ePanelSelected
		"Panel_auo_1080p_edp.xml", // pPanelXmlConfig
		Panel_CLS_PowerUp, // pPanel_PowerUp
		Panel_CLS_PowerDown, //
		pPanel_PowerDown
		Panel_CLS_Reset, // pPanel_Reset
		Panel_CLS_Peripheral_Power, //
		pPanel_Peripheral_Power
		Panel_CLS_Brightness_Enable, //
		pPanel_Brightness_Enable
		Panel_CLS_Brightness_Level //
		pPanel_Brightness_Level
	},

};
#endif // __MDP_PLATFORM_LIB_PANEL_CONFIG__H__

2.6 Build UEFI
		For UEFI compilation information, see boot_images\QcomPkg\Docs\BuildingUEFI.txt
	
			1. Build UEFI into XBL image:
				boot_images/QcomPkg$ ./edksetup.sh
				boot_images/QcomPkg$ make –C <PATH> boot_images/BaseTools/Source/C
		For MSM8998:
				Linux Android – python ../buildit.py --variant LA -r DEBUG -t Msm8998Pkg
				Windows – python ../buildit.py --variant WP -r DEBUG -t Msm8998Pkg
		For SDM660:
				boot_images/QcomPkg$ python buildit.py --variant LA -r DEBUG -t Sdm660Pkg
			2. Flash XBL image:
				fastboot flash xbl xbl.elf
		
2.7 Disable continuous splash screen
	Continuous splash screen is enabled by default and supported by the UEFI driver.
To disable continuous splash screen, in <DisplayPrimaryFlags> add
	MDP_PANEL_FLAG_DISABLE_SEAMLESS_SPLASH 0x01000000
	This command makes the driver de-initialize Adreno DPU and turn off the display when exiting in MDPExitBoot.
	
	Splash address is defined in QcomPkg\SocPkg\<ChipsetPkg>\Common\uefiplat.cfg as:
	0x9D400000, 0x02400000, "Display Reserved", AddMem, MEM_RES, WRITE_THROUGH,
	MaxMem, WRITE_THROUGH_XN
3.1 Enable logs for debugging
	Follow the steps below to enable serial output logs for debugging,
	
	1. Refer to the following two logging APIs as well as to the following figure.
	#define EFI_D_WARN DEBUG_WARN’
	…
	#define EFI_D_ERROR DEBUG_ERROR	
	
	Default Log level is defined in debuglib.h
	
	2. Enable the MDP_Log_Message as follows:
@Include/Library/MDPSystem.h:
void MDP_Log_Message(MDP_LogLevel uLogType, char *pLogString, ...);
	typedef enum
	{
		MDP_LOGLEVEL_ERROR,
		MDP_LOGLEVEL_WARN,
		MDP_LOGLEVEL_INFO,
	} MDP_LogLevel;
	
	NOTE: Use TRACE32 to implement the single-step debugging or to obtain the Adreno DPU register dump
4 Panel-specific customizations

	The panel bringup and customizations require modifications in MDPPlatformLib.c file. Additional
configurations such as panel init sequence, reset sequence, power supplies, panel ID, and panel auto
detection can also be done by modifying MDPPlatformLib.c.

4.1 Set primary DSI
	To set DSI0 or DSI1 as primary, define DSIControllerMapping in MDPPlatformLib.c as follows:
	■ For DSI0: <DSIControllerMapping>0</DSIControllerMapping>
	■ For DSI1: <DSIControllerMapping>1</DSIControllerMapping>
4.2 Enable LP11 reset
	To enable reset when lanes are in LP11 state, add the following in MDPPlatformLib.c:
	<DSILP11AtInit>True</DSILP11AtInit>
4.3 Configure display ON/OFF command timing in Command mode
	By default, the ON commands are sent before high-speed data transmission.
	However, to send ON command after high-speed data transmission and avoid a garbage screen,
	define the DSIForceCmdInVideoHS in panel XML file.
4.4 Configure BLLP power state in Video mode
	Many panels have mandatory requirements for the power modes in BLLP. To configure different power
	modes, the following nodes are available:
■ DSIHsaHseAfterVsVe: Specifies Pulse mode for the panel
	□ 0 = Does not send HSA/HE following VS/VE packet (default)
	□ 1 = Sends HSA/HE following VS/VE packet
■ DSILowPowerModeInHFP: Determines DSI lane state during horizontal front porch (HFP)blanking period.
■ DSILowPowerModeInHBP: Determines DSI lane state during horizontal back porch (HBP)blanking period.
■ DSILowPowerModeInHSA: Determines DSI lane state during horizontal sync active (HSA) mode.
■ DSILowPowerModeInBLLPEOF: Determines DSI lane state during BLLP EOF.
■ DSILowPowerModeInBLLP: Determines DSI lane state during BLLP.

	As the HSA, HBP, and HFP are too short for the DSI link to transition between HS and LP modes. Attempting to transition between HS and LP modes may result in a DSI FIFO overflow. Hence, in the HS mode set the DSILowPowerModeInHFP/HBP/HSAproperties corresponding to the register bits of DSI_VIDEO_MODE_CTRL to 0.

	HS mode to LP mode transfer transition time from DSI Tx is approximately 2 µs. The actual duration depends the PHY timing parameters.
	Some panels require that the LP11 state be entered only once during the BLLP period such as in the discontinuous clock mode. To enter LP11 state only once in BLLP period, set DSILowPowerModeInBLLPEOF to 1 and retain all other *PowerMode properties at 0 in the panel XML definition

4.5 Panel orientation	

	If the panel is mounted upside down, verify whether the panel supports a flip from the driver IC side. If
flip is not enabled from the driver IC, enable the relevant flip by defining PanelOrientation in panel
XML definition. This property is defined with one of the following values:
	■ 2 – Flips vertically
	■ 0 – no flip (default)
	
4.6 Change DSI host escape clock

	Some panels require a specific value for DSI TLpx parameter and hence requires a different escape
clock value and not the standard escape clock value of 19.2 MHz.
To change the host escape clock value, in panel.xml define DSIEscapeClockFrequency as
following:
<DSIEscapeClockFrequency>9600000</DSIEscapeClockFrequency>

	NOTE It is not possible to support every value for escape clock. Hence, a nearest possible value
is configured. 19200000 is the default value when no value is specified

4.7 Configure DSC parameters
	For OEMs using VESA DSC compresure panel, the DSC Command mode or Video mode panel must
be configured with different parameters for DSIDSCSlicePerPacket

	Command mode
	<DSIDSCSlicePerPacket>1</DSIDSCSlicePerPacket>
	Video mode
	<DSIDSCSlicePerPacket>2</DSIDSCSlicePerPacket>
	For other DSC related setting, refer to the panel/DDIC vendor

4.8 Configure panel refresh rate

		The panel refresh rate is configurable in the UEFI stage.
For example:
	When the panel refresh rate is 60 hz: 60=0x3c:
	<DSIRefreshRate>0x3C0000</DSIRefreshRate>
	When the panel refresh rate is 120 hz: 120=0x78:
	<DSIRefreshRate>0x780000</DSIRefreshRate>
	
4.9 Command panel TE GPIOs

		The TLMM TE GPIOs available for each chip are defined at @boot_images/QcomPkg/SocPkg/
<ChipsetName>/Library/MDPPlatformLib/ MDPPlatformLibPanelCommon.c
Pimary and secondary TE GPIO pin selection must be within the assigned values for proper function.

	/* Display TE gpio function table */
		MDPPlatformTeGpioFunctionType gMDPTeGpioTable[MDP_TE_GPIO_MAX] =
	{
	…
	};
	
	Primary and secondary panel TE GPIO pins are defined with default values on the Qualcomm
platform, as shown as follows.
If the OEM platform requires different GPIOs, modify the eDispTeGpio pin.

	MDPPlatformPanelGpioType sDefaultMDPPanelGpio =
	{
		24, // uDispResetGpio
		MDP_TE_GPIO_82, // eDispTeGpio
		26, // eDispModeGpio
	};

/* Secondary panel GPIO setting */

	MDPPlatformPanelGpioType sSecondaryPanelGPIO =
	{
		25, // uDispResetGpio
		MDP_TE_GPIO_83, // eDispTeGpio
		0, // eDispModeGpio
	};

	Then, define the following property in the Panel XML config file to map the TLMM GPIO to the Adreno
DPU mdp_vsync signal. Refer to Display Drivers (ACPI and XML) User Guide (80-NB116-2) for more
information.

	<DSITEvSyncSelect>x</DSITEvSyncSelect> //0 mdp_vsync_p;1 mdp_vsync_s;
2:mdp_vsync_e

	The following is an example with MDP_TE_GPIO_84 (mdp_vsync_e) configured as the primary
display TE source

	MDPPlatformPanelGpioType sDefaultMDPPanelGpio =
	{
		24,// uDispResetGpio
		MDP_TE_GPIO_84,// eDispTeGpio
		26,// eDispModeGpio
	};
	<DSITEvSyncSelect>2</DSITEvSyncSelect> //2: map mdp_vsync_e to primary display mdp_vsync signal

A.1 UEFI implementation
UEFI is implemented in two parts:
	■ XBL core contains chipset-specific core protocols (drivers) and core applications (such ascharging). XBL core is part of the non-HLOS boot images code.
	■ ABL contains chipset-independent applications such as fastboot. ABL is part of the open-source
	Linux Android source tree on Code Aurora Forum. ABL source is BSD-licensed.
	Little Kernel (LK) device drivers are moved into the XBL core. Leveraging drivers from XBL core
	reduces code duplication. The Linux loader and fastboot functionality are refactored as standalone
	UEFI applications. Customers transitioning from LK need to ensure that their LK modifications are
	ported to XBL Core and ABL.
	
	Access to QTI-specific software drivers are exposed via standard UEFI protocols or protocol
	extensions, where necessary.
	For details on UEFI components, QTI UEFI components and UEFI implementation see Linux Android
	UEFI Integration User Guide (80-P2484-37).
	There are two types of drivers, early DXE phase drivers and UEFI drivers. As UEFI Protocols are
	implemented in the UEFI driver, it is important that UEFI Protocols are defined in the UEFI
	Specification. Otherwise UEFI driver needs to be converted to a DXE driver.


 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值