Skip to content
This repository was archived by the owner on Aug 13, 2025. It is now read-only.

Commit 91d804e

Browse files
committed
FastbootCmds: add oem command to enable mainline optimization
In order to better support non-android operating systems, such as postmarketOS (@postmarketOS, https://postmarketos.org/), add a custom oem command {en,dis}able-mainline-optimization, which can be used to toggle different behavior to improve UX when using such systems. Right now it does not do anything on its own except printing whether mainline optimization is enabled or not when executing `fastboot oem device-info`. Change-Id: Icf4323e1402e97a9f81045a5f3225385876e0fce Signed-off-by: Alexander Martinz <[email protected]>
1 parent b5825ac commit 91d804e

File tree

3 files changed

+62
-0
lines changed

3 files changed

+62
-0
lines changed

QcomModulePkg/Include/Library/DeviceInfo.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ typedef struct device_info {
5656
CHAR8 user_public_key[MAX_USER_KEY_SIZE];
5757
UINT64 rollback_index[MAX_VB_PARTITIONS];
5858
CHAR8 Display_Cmdline[MAX_DISPLAY_CMDLINE_LEN];
59+
BOOLEAN is_mainline_optimization_enabled;
5960
} DeviceInfo;
6061

6162
struct verified_boot_verity_mode {
@@ -72,6 +73,7 @@ BOOLEAN IsUnlocked (VOID);
7273
BOOLEAN IsUnlockCritical (VOID);
7374
BOOLEAN IsEnforcing (VOID);
7475
BOOLEAN IsChargingScreenEnable (VOID);
76+
BOOLEAN IsMainlineOptimizationEnabled (VOID);
7577
BOOLEAN IsUserPublicKeySet (VOID);
7678
VOID
7779
GetBootloaderVersion (CHAR8 *BootloaderVersion, UINT32 Len);
@@ -80,6 +82,8 @@ GetRadioVersion (CHAR8 *RadioVersion, UINT32 Len);
8082
EFI_STATUS
8183
EnableChargingScreen (BOOLEAN IsEnabled);
8284
EFI_STATUS
85+
EnableMainlineOptimization (BOOLEAN IsEnabled);
86+
EFI_STATUS
8387
EnableEnforcingMode (BOOLEAN IsEnabled);
8488
EFI_STATUS
8589
SetDeviceUnlockValue (UINT32 Type, BOOLEAN State);

QcomModulePkg/Library/BootLib/DeviceInfo.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,11 @@ BOOLEAN IsChargingScreenEnable (VOID)
5757
return DevInfo.is_charger_screen_enabled;
5858
}
5959

60+
BOOLEAN IsMainlineOptimizationEnabled (VOID)
61+
{
62+
return DevInfo.is_mainline_optimization_enabled;
63+
}
64+
6065
BOOLEAN IsUserPublicKeySet (VOID)
6166
{
6267
CHAR8 *UserKeyBuffer = NULL;
@@ -108,6 +113,24 @@ EnableChargingScreen (BOOLEAN IsEnabled)
108113
return Status;
109114
}
110115

116+
EFI_STATUS
117+
EnableMainlineOptimization (BOOLEAN IsEnabled)
118+
{
119+
EFI_STATUS Status = EFI_SUCCESS;
120+
121+
if (IsMainlineOptimizationEnabled () != IsEnabled) {
122+
DevInfo.is_mainline_optimization_enabled = IsEnabled;
123+
Status = ReadWriteDeviceInfo (WRITE_CONFIG, &DevInfo, sizeof (DevInfo));
124+
if (Status != EFI_SUCCESS) {
125+
DEBUG ((EFI_D_ERROR, "Error %a mainline optimization: %r\n",
126+
(IsEnabled ? "Enabling" : "Disabling"), Status));
127+
return Status;
128+
}
129+
}
130+
131+
return Status;
132+
}
133+
111134
EFI_STATUS
112135
StoreDisplayCmdLine (CONST CHAR8 *CmdLine, UINT32 CmdLineLen)
113136
{
@@ -309,6 +332,7 @@ EFI_STATUS DeviceInfoInit (VOID)
309332
}
310333
DevInfo.is_charger_screen_enabled = FALSE;
311334
DevInfo.verity_mode = TRUE;
335+
DevInfo.is_mainline_optimization_enabled = FALSE;
312336
Status =
313337
ReadWriteDeviceInfo (WRITE_CONFIG, (VOID *)&DevInfo, sizeof (DevInfo));
314338
if (Status != EFI_SUCCESS) {

QcomModulePkg/Library/FastbootLib/FastbootCmds.c

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3010,6 +3010,34 @@ CmdOemDisableChargerScreen (CONST CHAR8 *Arg, VOID *Data, UINT32 Size)
30103010
}
30113011
}
30123012

3013+
STATIC VOID
3014+
CmdOemEnableMainlineOptimization (CONST CHAR8 *Arg, VOID *Data, UINT32 Size)
3015+
{
3016+
EFI_STATUS Status;
3017+
DEBUG ((EFI_D_INFO, "Enabling mainline optimization\n"));
3018+
3019+
Status = EnableMainlineOptimization (TRUE);
3020+
if (Status != EFI_SUCCESS) {
3021+
FastbootFail ("Failed to enable mainline optimization");
3022+
} else {
3023+
FastbootOkay ("");
3024+
}
3025+
}
3026+
3027+
STATIC VOID
3028+
CmdOemDisableMainlineOptimization (CONST CHAR8 *Arg, VOID *Data, UINT32 Size)
3029+
{
3030+
EFI_STATUS Status;
3031+
DEBUG ((EFI_D_INFO, "Disabling mainline optimization\n"));
3032+
3033+
Status = EnableMainlineOptimization (FALSE);
3034+
if (Status != EFI_SUCCESS) {
3035+
FastbootFail ("Failed to disable mainline optimization");
3036+
} else {
3037+
FastbootOkay ("");
3038+
}
3039+
}
3040+
30133041
STATIC VOID
30143042
CmdOemOffModeCharger (CONST CHAR8 *Arg, VOID *Data, UINT32 Size)
30153043
{
@@ -3255,6 +3283,10 @@ CmdOemDevinfo (CONST CHAR8 *arg, VOID *data, UINT32 sz)
32553283
IsUserPublicKeySet () ? "true" : "false");
32563284
FastbootInfo (DeviceInfo);
32573285
WaitForTransferComplete ();
3286+
AsciiSPrint (DeviceInfo, sizeof (DeviceInfo), "Mainline optimization enabled: %a",
3287+
IsMainlineOptimizationEnabled () ? "true" : "false");
3288+
FastbootInfo (DeviceInfo);
3289+
WaitForTransferComplete ();
32583290
FastbootOkay ("");
32593291
}
32603292

@@ -3698,6 +3730,8 @@ FastbootCommandSetup (IN VOID *Base, IN UINT64 Size)
36983730
#endif
36993731
{"oem enable-charger-screen", CmdOemEnableChargerScreen},
37003732
{"oem disable-charger-screen", CmdOemDisableChargerScreen},
3733+
{"oem enable-mainline-optimization", CmdOemEnableMainlineOptimization},
3734+
{"oem disable-mainline-optimization", CmdOemDisableMainlineOptimization},
37013735
{"oem off-mode-charge", CmdOemOffModeCharger},
37023736
{"oem select-display-panel", CmdOemSelectDisplayPanel},
37033737
{"oem device-info", CmdOemDevinfo},

0 commit comments

Comments
 (0)