diff --git a/audio/aidl.mk b/audio/aidl.mk index 1044148..ae64e13 100644 --- a/audio/aidl.mk +++ b/audio/aidl.mk @@ -9,3 +9,6 @@ BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs-common/audio/sepolicy/aidl include device/google/gs-common/audio/common.mk DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE += device/google/gs-common/audio/aidl/device_framework_matrix_product.xml + +PRODUCT_PROPERTY_OVERRIDES += \ + vendor.audio_hal.aidl.enable=true diff --git a/audio/sepolicy/common/property_contexts b/audio/sepolicy/common/property_contexts index aa981f1..1749ac8 100644 --- a/audio/sepolicy/common/property_contexts +++ b/audio/sepolicy/common/property_contexts @@ -8,3 +8,4 @@ vendor.audiodump.output.dir u:object_r:vendor_audio_prop:s0 vendor.audiodump.encode.disable u:object_r:vendor_audio_prop:s0 vendor.audiodump.log.cca.updated u:object_r:vendor_audio_prop:s0 vendor.audiodump.cca.config u:object_r:vendor_audio_prop:s0 +vendor.audio_hal.aidl.enable u:object_r:vendor_audio_prop:s0 diff --git a/audio/sepolicy/common/rild.te b/audio/sepolicy/common/rild.te new file mode 100644 index 0000000..fe86848 --- /dev/null +++ b/audio/sepolicy/common/rild.te @@ -0,0 +1 @@ +get_prop(rild, vendor_audio_prop); diff --git a/audio/sepolicy/common/vendor_init.te b/audio/sepolicy/common/vendor_init.te new file mode 100644 index 0000000..26f3fa8 --- /dev/null +++ b/audio/sepolicy/common/vendor_init.te @@ -0,0 +1,2 @@ +# Audio property +set_prop(vendor_init, vendor_audio_prop) diff --git a/edgetpu/edgetpu.mk b/edgetpu/edgetpu.mk index 862de56..2f0f77c 100644 --- a/edgetpu/edgetpu.mk +++ b/edgetpu/edgetpu.mk @@ -27,4 +27,4 @@ PRODUCT_PACKAGES += libedgetpu_dba.google BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs-common/edgetpu/sepolicy # Tflite Darwinn delegate property -PRODUCT_VENDOR_PROPERTIES += vendor.edgetpu.tflite_delegate.force_disable_io_coherency=1 +PRODUCT_VENDOR_PROPERTIES += vendor.edgetpu.tflite_delegate.force_disable_io_coherency=0 diff --git a/modem/Android.bp b/modem/Android.bp index 2bf023c..84bdd61 100644 --- a/modem/Android.bp +++ b/modem/Android.bp @@ -18,7 +18,9 @@ cc_binary { "-Werror", ], shared_libs: [ + "libbase", "libdump", + "liblog", ], vendor: true, relative_install_path: "dump", diff --git a/modem/dump_modemlog.cpp b/modem/dump_modemlog.cpp index 216cffe..5aaa554 100644 --- a/modem/dump_modemlog.cpp +++ b/modem/dump_modemlog.cpp @@ -14,9 +14,47 @@ * limitations under the License. */ #include +#include +#include + +#define MODEM_LOGGING_PERSIST_PROPERTY "persist.vendor.sys.modem.logging.enable" +#define MODEM_LOGGING_PROPERTY "vendor.sys.modem.logging.enable" +#define MODEM_LOGGING_STATUS_PROPERTY "vendor.sys.modem.logging.status" +#define MODEM_LOGGING_NUMBER_BUGREPORT_PROPERTY "persist.vendor.sys.modem.logging.br_num" +#define MODEM_LOGGING_PATH_PROPERTY "vendor.sys.modem.logging.log_path" +#define MODEM_LOG_PREFIX "sbuff_" int main() { - dumpLogs("/data/vendor/radio/extended_logs", "/data/vendor/radio/logs/always-on/all_logs", 20, "extended_log_"); + bool modemLogEnabled = ::android::base::GetBoolProperty(MODEM_LOGGING_PERSIST_PROPERTY, false); + if (modemLogEnabled && ::android::base::GetProperty(MODEM_LOGGING_PATH_PROPERTY, "") == MODEM_LOG_DIRECTORY) { + bool modemLogStarted = ::android::base::GetBoolProperty(MODEM_LOGGING_STATUS_PROPERTY, false); + int maxFileNum = ::android::base::GetIntProperty(MODEM_LOGGING_NUMBER_BUGREPORT_PROPERTY, 100); + + if (modemLogStarted) { + ::android::base::SetProperty(MODEM_LOGGING_PROPERTY, "false"); + ALOGD("Stopping modem logging...\n"); + } else { + ALOGD("modem logging is not running\n"); + } + + for (int i = 0; i < 15; i++) { + if (!::android::base::GetBoolProperty(MODEM_LOGGING_STATUS_PROPERTY, false)) { + ALOGD("modem logging stopped\n"); + sleep(1); + break; + } + sleep(1); + } + + dumpLogs(MODEM_LOG_DIRECTORY, BUGREPORT_PACKING_DIR, maxFileNum, MODEM_LOG_PREFIX); + + if (modemLogStarted) { + ALOGD("Restarting modem logging...\n"); + ::android::base::SetProperty(MODEM_LOGGING_PROPERTY, "true"); + } + } + + dumpLogs("/data/vendor/radio/extended_logs", BUGREPORT_PACKING_DIR, 20, "extended_log_"); copyFile("/mnt/vendor/efs/nv_normal.bin", "/data/vendor/radio/logs/always-on/all_logs/nv_normal.bin"); copyFile("/mnt/vendor/efs/nv_protected.bin", "/data/vendor/radio/logs/always-on/all_logs/nv_protected.bin"); return 0; diff --git a/modem/sepolicy/dump_modemlog.te b/modem/sepolicy/dump_modemlog.te index c49bd5e..0afcedf 100644 --- a/modem/sepolicy/dump_modemlog.te +++ b/modem/sepolicy/dump_modemlog.te @@ -4,6 +4,9 @@ userdebug_or_eng(` allow dump_modemlog mnt_vendor_file:dir search; allow dump_modemlog modem_efs_file:dir search; allow dump_modemlog modem_efs_file:file r_file_perms; + allow dump_modemlog vendor_slog_file:dir r_dir_perms; + allow dump_modemlog vendor_slog_file:file r_file_perms; allow dump_modemlog radio_vendor_data_file:dir create_dir_perms; allow dump_modemlog radio_vendor_data_file:file create_file_perms; + set_prop(dump_modemlog, vendor_modem_prop) ') diff --git a/powerstats/AdaptiveDvfsStateResidencyDataProvider.cpp b/powerstats/AdaptiveDvfsStateResidencyDataProvider.cpp new file mode 100644 index 0000000..28b076c --- /dev/null +++ b/powerstats/AdaptiveDvfsStateResidencyDataProvider.cpp @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "AdaptiveDvfsStateResidencyDataProvider.h" + +#include +#include +#include + +#include +#include + +using android::base::Split; +using android::base::Trim; + +namespace aidl { +namespace android { +namespace hardware { +namespace power { +namespace stats { + +AdaptiveDvfsStateResidencyDataProvider::AdaptiveDvfsStateResidencyDataProvider( + std::string path, + uint64_t clockRate, + std::string powerEntityName, + std::string freqPath) + : DvfsStateResidencyDataProvider(path, clockRate, {}) { + std::unique_ptr fp(fopen(freqPath.c_str(), "r"), fclose); + if (!fp) { + PLOG(ERROR) << __func__ << ":Failed to open file " << freqPath; + return; + } + + size_t len = 0; + char *line = nullptr; + std::string suffix = "MHz"; + std::vector> states = {}; + std::vector parts; + std::string freqStr; + + while (getline(&line, &len, fp.get()) != -1) { + parts = Split(line, " "); + if (parts.size() > 0) { + freqStr = Trim(parts[0]); + states.push_back(std::make_pair( + freqStr.substr(0, freqStr.length() - 3) + suffix, + freqStr)); + } + } + + mPowerEntities.push_back({powerEntityName, std::move(states)}); +} + +bool AdaptiveDvfsStateResidencyDataProvider::getStateResidencies( + std::unordered_map> *residencies) { + return DvfsStateResidencyDataProvider::getStateResidencies(residencies); +} + +std::unordered_map> + AdaptiveDvfsStateResidencyDataProvider::getInfo() { + return DvfsStateResidencyDataProvider::getInfo(); +} + +} // namespace stats +} // namespace power +} // namespace hardware +} // namespace android +} // namespace aidl diff --git a/powerstats/DvfsStateResidencyDataProvider.cpp b/powerstats/DvfsStateResidencyDataProvider.cpp index 511159e..c7561d6 100644 --- a/powerstats/DvfsStateResidencyDataProvider.cpp +++ b/powerstats/DvfsStateResidencyDataProvider.cpp @@ -37,7 +37,7 @@ namespace stats { DvfsStateResidencyDataProvider::DvfsStateResidencyDataProvider(std::string path, uint64_t clockRate, std::vector cfgs) - : mPath(std::move(path)), mClockRate(clockRate), mPowerEntities(std::move(cfgs)) {} + : mPowerEntities(std::move(cfgs)), mPath(std::move(path)), mClockRate(clockRate) {} int32_t DvfsStateResidencyDataProvider::matchEntity(char const *line) { for (int32_t i = 0; i < mPowerEntities.size(); i++) { diff --git a/powerstats/include/AdaptiveDvfsStateResidencyDataProvider.h b/powerstats/include/AdaptiveDvfsStateResidencyDataProvider.h new file mode 100644 index 0000000..661b940 --- /dev/null +++ b/powerstats/include/AdaptiveDvfsStateResidencyDataProvider.h @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#pragma once + +#include "DvfsStateResidencyDataProvider.h" + +namespace aidl { +namespace android { +namespace hardware { +namespace power { +namespace stats { + +class AdaptiveDvfsStateResidencyDataProvider : public DvfsStateResidencyDataProvider { + public: + /* + * path - path to dvfs sysfs node. + * clockRate - clock rate in KHz. + * powerEntityName - power entity name to parse. + * freqPath - path to frequency table. + */ + AdaptiveDvfsStateResidencyDataProvider( + std::string path, + uint64_t clockRate, + std::string powerEntityName, + std::string freqPath); + ~AdaptiveDvfsStateResidencyDataProvider() = default; + + /* + * See IStateResidencyDataProvider::getStateResidencies + */ + bool getStateResidencies( + std::unordered_map> *residencies) override; + + /* + * See IStateResidencyDataProvider::getInfo + */ + std::unordered_map> getInfo() override; +}; + +} // namespace stats +} // namespace power +} // namespace hardware +} // namespace android +} // namespace aidl diff --git a/powerstats/include/DvfsStateResidencyDataProvider.h b/powerstats/include/DvfsStateResidencyDataProvider.h index ca8ab22..0aeafb7 100644 --- a/powerstats/include/DvfsStateResidencyDataProvider.h +++ b/powerstats/include/DvfsStateResidencyDataProvider.h @@ -51,6 +51,9 @@ class DvfsStateResidencyDataProvider : public PowerStats::IStateResidencyDataPro */ std::unordered_map> getInfo() override; + protected: + std::vector mPowerEntities; + private: int32_t matchEntity(char const *line); int32_t matchState(char const *line, const Config& powerEntity); @@ -58,7 +61,6 @@ class DvfsStateResidencyDataProvider : public PowerStats::IStateResidencyDataPro const std::string mPath; const uint64_t mClockRate; - std::vector mPowerEntities; }; } // namespace stats