From e153fc34adb19736647c815363a13a69d8dd46e8 Mon Sep 17 00:00:00 2001 From: samou Date: Tue, 31 Oct 2023 16:39:26 +0000 Subject: [PATCH 1/2] bcl: Support thismeal binary Add command for dump_power to create thismeal.txt from thismeal.bin. Support BatteryMitigationService to monitor brownout event and generate thismeal.bin. Test: /vendor/bin/hw/battery_mitigation -d Bug: 293899466 Change-Id: I3fcbd62af25204a7469dd3952a91cd6d281bccd7 Signed-off-by: samou --- battery_mitigation/battery_mitigation.cpp | 118 ++++++++++++++++++---- 1 file changed, 96 insertions(+), 22 deletions(-) diff --git a/battery_mitigation/battery_mitigation.cpp b/battery_mitigation/battery_mitigation.cpp index a09b8a4..79c7ec1 100644 --- a/battery_mitigation/battery_mitigation.cpp +++ b/battery_mitigation/battery_mitigation.cpp @@ -18,15 +18,18 @@ #include #include +#include #include #include #define COUNT_LIMIT 10 using android::hardware::google::pixel::BatteryMitigation; +using android::hardware::google::pixel::BatteryMitigationService; using android::hardware::google::pixel::MitigationConfig; android::sp bmSp; +android::sp batteryMitigationService; const struct MitigationConfig::Config cfg = { .SystemPath = { @@ -86,10 +89,52 @@ const struct MitigationConfig::EventThreadConfig eventThreadCfg = { .TriggeredIdxPath = "/sys/devices/virtual/pmic/mitigation/br_stats/triggered_idx", .BrownoutStatsPath = "/sys/devices/virtual/pmic/mitigation/br_stats/stats", .StoringPath = "/data/vendor/mitigation/thismeal.bin", - .BackupPath = "/data/vendor/mitigation/lastmeal.bin", + .ParsedThismealPath = "/data/vendor/mitigation/thismeal.txt", + .ParsedLastmealPath = "/data/vendor/mitigation/lastmeal.txt", .FvpStatsPath = "/sys/devices/platform/acpm_stats/fvp_stats", - .PcieModemPath = "/sys/devices/platform/12100000.pcie/power_stats", - .PcieWifiPath = "/sys/devices/platform/13120000.pcie/power_stats", + .PmicCommon = { + /* Main Pmic */ + { + .OdpmDir = "/sys/bus/iio/devices/iio:device0", + .OdpmEnabledRailsPath = "/sys/bus/iio/devices/iio:device0/enabled_rails", + .PmicNamePath = "/sys/bus/iio/devices/iio:device0/name", + }, + /* Sub Pmic */ + { + .OdpmDir = "/sys/bus/iio/devices/iio:device1", + .OdpmEnabledRailsPath = "/sys/bus/iio/devices/iio:device1/enabled_rails", + .PmicNamePath = "/sys/bus/iio/devices/iio:device1/name", + }, + }, + .PlatformSpecific = { + /* MIN_SUPPORTED_PLATFORM */ + { + .MainPmicName = "s2mpg10-odpm\n", + .SubPmicName = "s2mpg11-odpm\n", + .PcieModemPath = "/sys/devices/platform/11920000.pcie/power_stats", + .PcieWifiPath = "/sys/devices/platform/14520000.pcie/power_stats", + }, + { + .MainPmicName = "s2mpg12-odpm\n", + .SubPmicName = "s2mpg13-odpm\n", + .PcieModemPath = "/sys/devices/platform/11920000.pcie/power_stats", + .PcieWifiPath = "/sys/devices/platform/14520000.pcie/power_stats", + }, + { + .MainPmicName = "s2mpg14-odpm\n", + .SubPmicName = "s2mpg15-odpm\n", + .PcieModemPath = "/sys/devices/platform/12100000.pcie/power_stats", + .PcieWifiPath = "/sys/devices/platform/13120000.pcie/power_stats", + }, + /* MAX_SUPPORTED_PLATFORM */ + { + .MainPmicName = "s2mpg14-odpm\n", + .SubPmicName = "s2mpg15-odpm\n", + .PcieModemPath = "/sys/devices/platform/12100000.pcie/power_stats", + .PcieWifiPath = "/sys/devices/platform/13120000.pcie/power_stats", + }, + + }, }; const char kReadyFilePath[] = "/sys/devices/virtual/pmic/mitigation/instruction/ready"; @@ -106,31 +151,60 @@ std::string GetSystemProperty(std::string property) { return std::string(value); } -int main(int /*argc*/, char ** /*argv*/) { +int main(int argc, char **argv) { + std::string cdt = GetSystemProperty(kCDTProperty); + int platformNum = atoi(cdt.substr(5, 1).c_str()); + batteryMitigationService = new BatteryMitigationService(eventThreadCfg, + platformNum); + if (!batteryMitigationService) { + return 0; + } + bool platformSupported = batteryMitigationService->isPlatformSupported(); + bool brownoutStatsBinarySupported = batteryMitigationService->isBrownoutStatsBinarySupported(); + if (argc == 2) { + if(strcmp(argv[1], "-d") == 0 && + brownoutStatsBinarySupported && + platformSupported) { + /* Create thismeal.txt from thismeal.bin */ + batteryMitigationService->genParsedMeal(eventThreadCfg.ParsedThismealPath); + } + return 0; + } + setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_AUDIO); auto batteryMitigationStartTime = std::chrono::system_clock::now(); ABinderProcess_setThreadPoolMaxThreadCount(1); ABinderProcess_startThreadPool(); - bmSp = new BatteryMitigation(cfg, eventThreadCfg); - if (!bmSp) { - return 0; - } - std::string cdt = GetSystemProperty(kCDTProperty); - int platform_num = atoi(cdt.substr(5, 1).c_str()); - if (platform_num >= MIN_SUPPORTED_PLATFORM) { - bmSp->startBrownoutEventThread(); - } - bool mitigationLogTimeValid = bmSp->isMitigationLogTimeValid(batteryMitigationStartTime, - cfg.LogFilePath, - cfg.TimestampFormat, - kTimestampRegex); + + bool mitigationLogTimeValid; std::string reason = android::base::GetProperty(kBRRequestedProperty, ""); - if (!reason.empty() && mitigationLogTimeValid) { - std::ifstream src(cfg.LogFilePath, std::ios::in); - std::ofstream dst(kLastMealPath, std::ios::out); - dst << src.rdbuf(); - android::base::SetProperty(kLastMealProperty, "1"); + if (brownoutStatsBinarySupported) { + /* Create lastmeal.txt if the dump time in thismeal.bin are valid */ + mitigationLogTimeValid = batteryMitigationService->isTimeValid(eventThreadCfg.StoringPath, + batteryMitigationStartTime); + if (!reason.empty() && mitigationLogTimeValid && + batteryMitigationService->genParsedMeal(eventThreadCfg.ParsedLastmealPath)) { + android::base::SetProperty(kLastMealProperty, "1"); + } + /* Start BrownoutEventThread to poll brownout event from kernel */ + batteryMitigationService->startBrownoutEventThread(); + } else{ + bmSp = new BatteryMitigation(cfg); + if (!bmSp) { + return 0; + } + mitigationLogTimeValid = bmSp->isMitigationLogTimeValid(batteryMitigationStartTime, + cfg.LogFilePath, + cfg.TimestampFormat, + kTimestampRegex); + if (!reason.empty() && mitigationLogTimeValid) { + std::ifstream src(cfg.LogFilePath, std::ios::in); + std::ofstream dst(kLastMealPath, std::ios::out); + dst << src.rdbuf(); + android::base::SetProperty(kLastMealProperty, "1"); + } } + bool isBatteryMitigationReady = false; std::string ready_str; int val = 0; From 6498d1c798fa7a0d687a2582b9f3b7a346e78c20 Mon Sep 17 00:00:00 2001 From: Eden Shih Date: Thu, 2 Nov 2023 06:56:01 +0000 Subject: [PATCH 2/2] Add DiagnosticsTool domain for SELinux access. Bug: 301300623 Change-Id: Ic71cd664e1c6c99300666bf73eb27486a710d4b5 --- diagnosticstool/diagnosticstool.mk | 1 + diagnosticstool/sepolicy/diagnosticstool_app.te | 4 ++++ diagnosticstool/sepolicy/seapp_contexts | 2 ++ 3 files changed, 7 insertions(+) create mode 100644 diagnosticstool/diagnosticstool.mk create mode 100644 diagnosticstool/sepolicy/diagnosticstool_app.te create mode 100644 diagnosticstool/sepolicy/seapp_contexts diff --git a/diagnosticstool/diagnosticstool.mk b/diagnosticstool/diagnosticstool.mk new file mode 100644 index 0000000..67fbd88 --- /dev/null +++ b/diagnosticstool/diagnosticstool.mk @@ -0,0 +1 @@ +PRODUCT_PRIVATE_SEPOLICY_DIRS += device/google/gs-common/diagnosticstool/sepolicy diff --git a/diagnosticstool/sepolicy/diagnosticstool_app.te b/diagnosticstool/sepolicy/diagnosticstool_app.te new file mode 100644 index 0000000..d1874e6 --- /dev/null +++ b/diagnosticstool/sepolicy/diagnosticstool_app.te @@ -0,0 +1,4 @@ +type diagnosticstool_app, domain; +app_domain(diagnosticstool_app) + +allow diagnosticstool_app app_api_service:service_manager find; diff --git a/diagnosticstool/sepolicy/seapp_contexts b/diagnosticstool/sepolicy/seapp_contexts new file mode 100644 index 0000000..3c601cd --- /dev/null +++ b/diagnosticstool/sepolicy/seapp_contexts @@ -0,0 +1,2 @@ +# Diagnostics Tool +user=_app seinfo=platform name=com.google.android.apps.diagnosticstool domain=diagnosticstool_app isPrivApp=true levelFrom=user