From 06072939224d0a0e1502f0c72ef6174d8b042a52 Mon Sep 17 00:00:00 2001 From: Anand S Date: Mon, 11 Nov 2024 12:32:25 +0530 Subject: [PATCH 01/81] Revert "sm6375-common: Switch to Thermal 2.0 mock" This reverts commit e03aec71126929af5d6d9a0ca7891d89d1bd7baf. Reason for revert: We're switching to QTI AIDL thermal. Change-Id: I27b78d5dcc32e0dce31a39d2a71ba4b3b9892a50 --- common.mk | 2 +- sepolicy/vendor/file_contexts | 1 - sepolicy/vendor/hal_thermal_default.te | 8 -------- sepolicy/vendor/property.te | 3 --- sepolicy/vendor/property_contexts | 3 --- sepolicy/vendor/thermal-engine.te | 7 ------- sepolicy/vendor/vendor_thermal-engine.te | 4 ++++ 7 files changed, 5 insertions(+), 23 deletions(-) delete mode 100644 sepolicy/vendor/hal_thermal_default.te delete mode 100644 sepolicy/vendor/thermal-engine.te create mode 100644 sepolicy/vendor/vendor_thermal-engine.te diff --git a/common.mk b/common.mk index e43d987..4a590a1 100644 --- a/common.mk +++ b/common.mk @@ -435,7 +435,7 @@ PRODUCT_COPY_FILES += \ # Thermal PRODUCT_PACKAGES += \ - android.hardware.thermal@2.0-service.mock \ + android.hardware.thermal@2.0-service.qti \ android.hardware.thermal@2.0 \ android.hardware.thermal@2.0.vendor diff --git a/sepolicy/vendor/file_contexts b/sepolicy/vendor/file_contexts index 8a3e731..dd9dffd 100644 --- a/sepolicy/vendor/file_contexts +++ b/sepolicy/vendor/file_contexts @@ -94,7 +94,6 @@ # Thermal /dev/mmi_sys_temp u:object_r:vendor_thermal_device:s0 -/(vendor|system/vendor)/bin/hw/android\.hardware\.thermal@2\.0-service\.mock u:object_r:hal_thermal_default_exec:s0 # Vendor init scripts /(vendor|system/vendor)/bin/load_touch\.sh u:object_r:vendor_qti_init_shell_exec:s0 diff --git a/sepolicy/vendor/hal_thermal_default.te b/sepolicy/vendor/hal_thermal_default.te deleted file mode 100644 index 2ccabe4..0000000 --- a/sepolicy/vendor/hal_thermal_default.te +++ /dev/null @@ -1,8 +0,0 @@ -allow hal_thermal_default sysfs_thermal:dir r_dir_perms; -allow hal_thermal_default sysfs_thermal:file rw_file_perms; -allow hal_thermal_default proc_stat:file r_file_perms; - -allow hal_thermal_default self:netlink_kobject_uevent_socket create_socket_perms_no_ioctl; - -# read thermal config -get_prop(hal_thermal_default, vendor_thermal_prop) diff --git a/sepolicy/vendor/property.te b/sepolicy/vendor/property.te index bb50574..167417c 100644 --- a/sepolicy/vendor/property.te +++ b/sepolicy/vendor/property.te @@ -5,6 +5,3 @@ vendor_internal_prop(vendor_mot_fingerprint_prop); vendor_internal_prop(vendor_mot_hw_prop); vendor_internal_prop(vendor_mot_touch_prop); vendor_internal_prop(vendor_mot_nfc_prop); - -# Thermal engine -vendor_internal_prop(vendor_thermal_prop) diff --git a/sepolicy/vendor/property_contexts b/sepolicy/vendor/property_contexts index 252414c..f1e63b1 100644 --- a/sepolicy/vendor/property_contexts +++ b/sepolicy/vendor/property_contexts @@ -21,6 +21,3 @@ vendor.nfc.fw_status u:object_r:vendor_mot_nfc_prop:s0 persist.vendor.hardware.fingerprint u:object_r:vendor_mot_fingerprint_prop:s0 vendor.hw.fps.ident u:object_r:vendor_mot_fingerprint_prop:s0 vendor.hw.fingerprint.status u:object_r:vendor_mot_fingerprint_prop:s0 - -# Thermal engine -vendor.thermal.config u:object_r:vendor_thermal_prop:s0 diff --git a/sepolicy/vendor/thermal-engine.te b/sepolicy/vendor/thermal-engine.te deleted file mode 100644 index 7791706..0000000 --- a/sepolicy/vendor/thermal-engine.te +++ /dev/null @@ -1,7 +0,0 @@ -allow vendor_thermal-engine { proc_stat proc_loadavg }:file r_file_perms; -allow vendor_thermal-engine vendor_thermal_device:chr_file rw_file_perms; -rw_dir_file(vendor_thermal-engine, vendor_sysfs_battery_supply) -rw_dir_file(vendor_thermal-engine, vendor_sysfs_usb_supply) - -set_prop(vendor_thermal-engine, vendor_thermal_prop); -r_dir_file(vendor_thermal-engine, sysfs_thermal) diff --git a/sepolicy/vendor/vendor_thermal-engine.te b/sepolicy/vendor/vendor_thermal-engine.te new file mode 100644 index 0000000..b76e121 --- /dev/null +++ b/sepolicy/vendor/vendor_thermal-engine.te @@ -0,0 +1,4 @@ +allow vendor_thermal-engine { proc_stat proc_loadavg }:file r_file_perms; +allow vendor_thermal-engine vendor_thermal_device:chr_file rw_file_perms; +r_dir_file(vendor_thermal-engine, vendor_sysfs_battery_supply) +r_dir_file(vendor_thermal-engine, vendor_sysfs_usb_supply) From f194c4c58c04bf459d733c30d361913d6572cf31 Mon Sep 17 00:00:00 2001 From: Michael Bestas Date: Thu, 26 Sep 2024 01:39:32 +0300 Subject: [PATCH 02/81] sm6375-common: Switch to AIDL thermal HAL Change-Id: I6ae621194044ab66fad69b9ef997b3b347bf6120 --- common.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common.mk b/common.mk index 4a590a1..5497fcd 100644 --- a/common.mk +++ b/common.mk @@ -435,7 +435,7 @@ PRODUCT_COPY_FILES += \ # Thermal PRODUCT_PACKAGES += \ - android.hardware.thermal@2.0-service.qti \ + android.hardware.thermal-service.qti \ android.hardware.thermal@2.0 \ android.hardware.thermal@2.0.vendor From add45126b8b7af909025feda0bae2b379a8ed7be Mon Sep 17 00:00:00 2001 From: Michael Bestas Date: Thu, 26 Sep 2024 01:39:46 +0300 Subject: [PATCH 03/81] sm6375-common: Switch to AIDL USB HAL Change-Id: I70f6a4e57eef577d86987bfae44f381a4f107624 --- common.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common.mk b/common.mk index 5497fcd..32a2d7c 100644 --- a/common.mk +++ b/common.mk @@ -455,7 +455,7 @@ PRODUCT_PACKAGES_DEBUG += \ # USB PRODUCT_PACKAGES += \ - android.hardware.usb@1.3-service-qti \ + android.hardware.usb-service.qti \ init.qcom.usb.rc \ init.qcom.usb.sh From c1d90ad0584386c2966613df6c79cf0e697c1c38 Mon Sep 17 00:00:00 2001 From: Michael Bestas Date: Wed, 11 Sep 2024 00:04:13 +0300 Subject: [PATCH 04/81] sm6375-common: Shim widevine with libcrypto_shim The following change https://github.com/google/boringssl/commit/e202e51cb0912f36dafbd2e67cf04d6ec82f3180 removed symbols that our libs require. Change-Id: I1325c34ecec3d339dd68c665010ecb36fa2e6a29 --- common.mk | 3 ++- extract-files.sh | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/common.mk b/common.mk index 32a2d7c..8362ec5 100644 --- a/common.mk +++ b/common.mk @@ -192,7 +192,8 @@ PRODUCT_PACKAGES += \ # DRM PRODUCT_PACKAGES += \ android.hardware.drm@1.4.vendor \ - android.hardware.drm-service.clearkey + android.hardware.drm-service.clearkey \ + libcrypto_shim # fastbootd PRODUCT_PACKAGES += \ diff --git a/extract-files.sh b/extract-files.sh index 76b9436..d4c94b6 100755 --- a/extract-files.sh +++ b/extract-files.sh @@ -80,6 +80,10 @@ function blob_fixup() { [ "$2" = "" ] && return 0 sed -ni '/default.*fqname/!p' "${2}" ;; + vendor/lib64/libwvhidl.so) + [ "$2" = "" ] && return 0 + grep -q libcrypto_shim.so "${2}" || "${PATCHELF}" --add-needed "libcrypto_shim.so" "${2}" + ;; *) return 1 ;; From 22c8464422de31d9bb15df04ce86d6b34c864840 Mon Sep 17 00:00:00 2001 From: LuK1337 Date: Sat, 12 Oct 2024 17:42:02 +0200 Subject: [PATCH 05/81] sm6375-common: Shim WFD with libgui_shim/libinput_shim Change-Id: I42bf06bc6b19942303031ef0147dafa6df127fe5 --- common.mk | 2 ++ extract-files.sh | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/common.mk b/common.mk index 8362ec5..4234432 100644 --- a/common.mk +++ b/common.mk @@ -503,6 +503,8 @@ PRODUCT_VENDOR_MOVE_ENABLED := true # WiFi Display PRODUCT_PACKAGES += \ libavservices_minijail \ + libgui_shim \ + libinput_shim \ libnl \ libpng.vendor \ libwfdaac_vendor diff --git a/extract-files.sh b/extract-files.sh index d4c94b6..858df67 100755 --- a/extract-files.sh +++ b/extract-files.sh @@ -65,9 +65,14 @@ fi function blob_fixup() { case "${1}" in + system_ext/lib*/libwfdmmsrc_system.so) + [ "$2" = "" ] && return 0 + grep -q "libgui_shim.so" "${2}" || "${PATCHELF}" --add-needed "libgui_shim.so" "${2}" + ;; system_ext/lib64/libwfdnative.so) [ "$2" = "" ] && return 0 "${PATCHELF}" --remove-needed "android.hidl.base@1.0.so" "${2}" + grep -q "libinput_shim.so" "${2}" || "${PATCHELF}" --add-needed "libinput_shim.so" "${2}" ;; system_ext/etc/permissions/moto-telephony.xml) [ "$2" = "" ] && return 0 From e1c4d04fe03ffd7ca5901ca60a62122bd4c0c52e Mon Sep 17 00:00:00 2001 From: Michael Bestas Date: Sun, 29 Sep 2024 11:24:29 +0300 Subject: [PATCH 06/81] sm6375-common: Sync extract scripts with 22 templates Change-Id: I7963ae050cfb193c5d0c2636da9c1e8f82bcdbdb --- extract-files.sh | 2 ++ setup-makefiles.sh | 2 ++ 2 files changed, 4 insertions(+) diff --git a/extract-files.sh b/extract-files.sh index 858df67..0ae0e58 100755 --- a/extract-files.sh +++ b/extract-files.sh @@ -14,6 +14,8 @@ if [[ ! -d "${MY_DIR}" ]]; then MY_DIR="${PWD}"; fi ANDROID_ROOT="${MY_DIR}/../../.." +export TARGET_ENABLE_CHECKELF=false + HELPER="${ANDROID_ROOT}/tools/extract-utils/extract_utils.sh" if [ ! -f "${HELPER}" ]; then echo "Unable to find helper script at ${HELPER}" diff --git a/setup-makefiles.sh b/setup-makefiles.sh index c64c683..5ac6ed1 100755 --- a/setup-makefiles.sh +++ b/setup-makefiles.sh @@ -14,6 +14,8 @@ if [[ ! -d "${MY_DIR}" ]]; then MY_DIR="${PWD}"; fi ANDROID_ROOT="${MY_DIR}/../../.." +export TARGET_ENABLE_CHECKELF=false + HELPER="${ANDROID_ROOT}/tools/extract-utils/extract_utils.sh" if [ ! -f "${HELPER}" ]; then echo "Unable to find helper script at ${HELPER}" From f125b49b3b06413f5038789151fc04a0a555562d Mon Sep 17 00:00:00 2001 From: Nolen Johnson Date: Sun, 27 Oct 2024 16:57:40 -0400 Subject: [PATCH 07/81] sm6375-common: Ensure we build the vendor version of libcrypto_shim Reference: Ia42de59ff157cddc930a111f8ce5e36e645055ed Change-Id: I9c9340b37a1ad0d6c22d3947541fe1196a5efeec --- common.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common.mk b/common.mk index 4234432..c886bdc 100644 --- a/common.mk +++ b/common.mk @@ -193,7 +193,7 @@ PRODUCT_PACKAGES += \ PRODUCT_PACKAGES += \ android.hardware.drm@1.4.vendor \ android.hardware.drm-service.clearkey \ - libcrypto_shim + libcrypto_shim.vendor # fastbootd PRODUCT_PACKAGES += \ From 8451ea6b976abf3269413157ccaf3af53459a6b5 Mon Sep 17 00:00:00 2001 From: Anand S Date: Tue, 12 Nov 2024 12:08:26 +0530 Subject: [PATCH 08/81] sm6375-common: Fix VINTF Compatibility check * We're already inheriting these from QTI FCM. So it throws error while running VINTF check since these are only defined in manifest and not in device FCM. Change-Id: If3c68b027fe7337ed2bc936f0035477ccca4d9b6 --- manifest.xml | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/manifest.xml b/manifest.xml index 8be8c05..a08e6e3 100644 --- a/manifest.xml +++ b/manifest.xml @@ -90,15 +90,6 @@ @1.5::IRadio/slot1 @1.5::IRadio/slot2 - - android.hardware.radio.config - hwbinder - 1.2 - - IRadioConfig - default - - android.hardware.secure_element hwbinder @@ -588,15 +579,5 @@ imsrtpservice - - vendor.qti.hardware.qccsyshal - hwbinder - 1.2 - - IQccsyshal - qccsyshal - - @1.2::IQccsyshal/qccsyshal - From a10ea3beb1f782d5915f5f3abf7b37c244e2ae47 Mon Sep 17 00:00:00 2001 From: dianlujitao Date: Tue, 17 Dec 2024 13:04:33 +0530 Subject: [PATCH 09/81] sm6375-common: Nuke ATFWD It's normally not used at all. Change-Id: Idb824b3b8c783b6ac962e604df05f9154beb4ed2 --- proprietary-files.txt | 3 --- rootdir/bin/init.qcom.early_boot.sh | 9 --------- rootdir/etc/init/hw/init.qcom.rc | 11 ----------- 3 files changed, 23 deletions(-) diff --git a/proprietary-files.txt b/proprietary-files.txt index 96750ec..7cc8a6a 100644 --- a/proprietary-files.txt +++ b/proprietary-files.txt @@ -655,7 +655,6 @@ system_ext/etc/permissions/qti_permissions.xml system_ext/framework/qcrilhook.jar -system_ext/priv-app/qcrilmsgtunnel/qcrilmsgtunnel.apk -vendor/app/IWlanService/IWlanService.apk -vendor/bin/ATFWD-daemon vendor/bin/adpl vendor/bin/hw/qcrilNrd vendor/bin/ks @@ -738,7 +737,6 @@ vendor/etc/qcril_database/upgrade/ecc/9_version_qcrildb.sql vendor/etc/qcril_database/upgrade/other/2_version_add_wps_config_qcrilnr.sql vendor/etc/qcril_database/upgrade/other/3_version_update_wps_config_qcrilnr.sql vendor/etc/qcril_database/upgrade/other/6_version_change_property_table_qcrilnr.sql -vendor/etc/seccomp_policy/atfwd@2.0.policy vendor/etc/seccomp_policy/qcrilnr@2.0.policy vendor/etc/ssg/ta_config.json vendor/etc/ssg/tz_whitelist.json @@ -781,7 +779,6 @@ vendor/lib64/qcrild_libqcrilnrutils.so vendor/lib64/qtiril-utils.so vendor/lib64/qtiwakelock.so vendor/lib64/vendor.qti.hardware.radio.am@1.0.so -vendor/lib64/vendor.qti.hardware.radio.atcmdfwd@1.0.so vendor/lib64/vendor.qti.hardware.radio.internal.deviceinfo@1.0.so vendor/lib64/vendor.qti.hardware.radio.lpa@1.0.so vendor/lib64/vendor.qti.hardware.radio.lpa@1.1.so diff --git a/rootdir/bin/init.qcom.early_boot.sh b/rootdir/bin/init.qcom.early_boot.sh index 01d14b7..ad8f106 100644 --- a/rootdir/bin/init.qcom.early_boot.sh +++ b/rootdir/bin/init.qcom.early_boot.sh @@ -441,15 +441,6 @@ case "$target" in ;; esac -baseband=`getprop ro.baseband` -#enable atfwd daemon all targets except sda, apq, qcs -case "$baseband" in - "apq" | "sda" | "qcs" ) - setprop persist.vendor.radio.atfwd.start false;; - *) - setprop persist.vendor.radio.atfwd.start true;; -esac - #set default lcd density #Since lcd density has read only #property, it will not overwrite previous set diff --git a/rootdir/etc/init/hw/init.qcom.rc b/rootdir/etc/init/hw/init.qcom.rc index 5aad4d4..03a9d48 100644 --- a/rootdir/etc/init/hw/init.qcom.rc +++ b/rootdir/etc/init/hw/init.qcom.rc @@ -397,12 +397,6 @@ on property:sys.boot_completed=1 #Reinit lmkd to reconfigure lmkd properties setprop lmkd.reinit 1 -on property:persist.vendor.radio.atfwd.start=false - stop vendor.atfwd - -on property:vendor.radio.atfwd.start=false - stop vendor.atfwd - # corefile limit on property:persist.debug.trace=1 mkdir /data/core 0777 root root @@ -572,11 +566,6 @@ on property:sys.boot_completed=1 on property:ro.vendor.ril.mbn_copy_completed=1 write /data/vendor/radio/copy_complete 1 -service vendor.atfwd /vendor/bin/ATFWD-daemon - class late_start - user system - group system radio - service hostapd_fst /vendor/bin/hw/hostapd -dd -g /data/vendor/wifi/hostapd/global class main capabilities NET_ADMIN NET_RAW From 1c4218f9e264545a364b4e2cd5a10bb0d366b04c Mon Sep 17 00:00:00 2001 From: Marc Bourgoin Date: Sun, 10 Nov 2024 12:54:18 -0700 Subject: [PATCH 10/81] sm6375-common: Rework ims patches Change-Id: Ib8589f65c8cbcd362a74141555546dc9c5caac2c --- ...pl-Return-0-in-getWfcMDN-in-any-case.patch | 34 +++++---- ...n-t-call-setSubscriptionProperty-for.patch | 13 ++-- ...remove-uses-library-for-moto-ims-ext.patch | 9 ++- ...RECEIVER_EXPORTED-for-registerRecei.patch} | 17 +++-- ...ms-globally-set-RECEIVER_EXPORTED-f.patch} | 73 ++++++++++--------- 5 files changed, 81 insertions(+), 65 deletions(-) rename ims-patches/{0004-ims-globally-set-RECEIVER_EXPORTED-for-registerReceiver.patch => 0004-ims-globally-set-RECEIVER_EXPORTED-for-registerRecei.patch} (94%) rename ims-patches/{0005-fixup-ims-globally-set-RECEIVER_EXPORTED-for-registe.patch => 0005-PATCH-5-5-fixup-ims-globally-set-RECEIVER_EXPORTED-f.patch} (95%) diff --git a/ims-patches/0001-ImsConfigImpl-Return-0-in-getWfcMDN-in-any-case.patch b/ims-patches/0001-ImsConfigImpl-Return-0-in-getWfcMDN-in-any-case.patch index a30b78a..46eecd5 100644 --- a/ims-patches/0001-ImsConfigImpl-Return-0-in-getWfcMDN-in-any-case.patch +++ b/ims-patches/0001-ImsConfigImpl-Return-0-in-getWfcMDN-in-any-case.patch @@ -1,35 +1,39 @@ -From cfd224560c7d76c9bc219eb2c12b099e1537956c Mon Sep 17 00:00:00 2001 +From 0f3f402c9718d24a66d3a59b36c167de848fcff9 Mon Sep 17 00:00:00 2001 From: Erfan Abdi Date: Sun, 26 Jan 2020 20:23:44 +0330 -Subject: [PATCH 1/3] ImsConfigImpl: Return 0 in getWfcMDN in any case +Subject: [PATCH 1/5] ImsConfigImpl: Return 0 in getWfcMDN in any case --- - smali/org/codeaurora/ims/ImsConfigImpl.smali | 14 -------------- - 1 file changed, 14 deletions(-) + smali/org/codeaurora/ims/ImsConfigImpl.smali | 13 ------------- + 1 file changed, 13 deletions(-) diff --git a/smali/org/codeaurora/ims/ImsConfigImpl.smali b/smali/org/codeaurora/ims/ImsConfigImpl.smali -index 8daf3342..b2ab6538 100644 +index 644a553..c921038 100644 --- a/smali/org/codeaurora/ims/ImsConfigImpl.smali +++ b/smali/org/codeaurora/ims/ImsConfigImpl.smali -@@ -1385,22 +1385,8 @@ +@@ -1471,22 +1471,9 @@ .param p1, "subid" # I - - .line 814 -- iget-object v0, p0, Lorg/codeaurora/ims/ImsConfigImpl;->mContext:Landroid/content/Context; + + .line 849 +- const-string v0, "wfc_ims_mdn" - -- const-string v1, "wfc_ims_mdn" +- iget-object v1, p0, Lorg/codeaurora/ims/ImsConfigImpl;->mContext:Landroid/content/Context; - -- invoke-static {p1, v1, v0}, Landroid/telephony/SubscriptionManager;->getSubscriptionProperty(ILjava/lang/String;Landroid/content/Context;)Ljava/lang/String; +- invoke-virtual {p0, p1, v0, v1}, Lorg/codeaurora/ims/ImsConfigImpl;->getSubscriptionProperty(ILjava/lang/String;Landroid/content/Context;)Ljava/lang/String; - - move-result-object v0 - -- .line 816 +- .line 851 - .local v0, "mdn":Ljava/lang/String; - if-nez v0, :cond_0 -- + const-string v0, "0" - -- .line 817 + +- .line 852 - :cond_0 return-object v0 .end method + +-- +2.43.0 + diff --git a/ims-patches/0002-ImsConfigImpl-don-t-call-setSubscriptionProperty-for.patch b/ims-patches/0002-ImsConfigImpl-don-t-call-setSubscriptionProperty-for.patch index 43a706d..4496855 100644 --- a/ims-patches/0002-ImsConfigImpl-don-t-call-setSubscriptionProperty-for.patch +++ b/ims-patches/0002-ImsConfigImpl-don-t-call-setSubscriptionProperty-for.patch @@ -1,7 +1,7 @@ -From ab173b9875550f2462b8ed80ada0dff9bd2804d0 Mon Sep 17 00:00:00 2001 +From 9f41786278a80f4e8f8629ae13b1d5cc38c85fde Mon Sep 17 00:00:00 2001 From: Vachounet Date: Wed, 27 Jan 2021 23:28:48 +0100 -Subject: [PATCH 2/3] ImsConfigImpl: don't call setSubscriptionProperty for +Subject: [PATCH 2/5] ImsConfigImpl: don't call setSubscriptionProperty for wfc_ims_mdn --- @@ -9,11 +9,11 @@ Subject: [PATCH 2/3] ImsConfigImpl: don't call setSubscriptionProperty for 1 file changed, 70 deletions(-) diff --git a/smali/org/codeaurora/ims/ImsConfigImpl.smali b/smali/org/codeaurora/ims/ImsConfigImpl.smali -index c921038c..c38fe206 100644 +index c921038..c38fe20 100644 --- a/smali/org/codeaurora/ims/ImsConfigImpl.smali +++ b/smali/org/codeaurora/ims/ImsConfigImpl.smali @@ -3070,76 +3070,6 @@ - + .line 790 :cond_2 - if-ne p1, v2, :cond_3 @@ -87,5 +87,8 @@ index c921038c..c38fe206 100644 - :cond_3 - :goto_1 const/16 v3, 0x2c - + const/4 v5, 0x1 +-- +2.43.0 + diff --git a/ims-patches/0003-ims-remove-uses-library-for-moto-ims-ext.patch b/ims-patches/0003-ims-remove-uses-library-for-moto-ims-ext.patch index 64fffe3..2111514 100644 --- a/ims-patches/0003-ims-remove-uses-library-for-moto-ims-ext.patch +++ b/ims-patches/0003-ims-remove-uses-library-for-moto-ims-ext.patch @@ -1,7 +1,7 @@ -From cadd5ec3e6f097bd5619e22bf827fb685e38c1d2 Mon Sep 17 00:00:00 2001 +From 4dd42142e2fbb2afd60ca6d8b4ac497c8d978f74 Mon Sep 17 00:00:00 2001 From: Andrew Hexen Date: Thu, 25 May 2023 11:51:44 -0700 -Subject: [PATCH 3/3] ims: remove uses-library for moto-ims-ext +Subject: [PATCH 3/5] ims: remove uses-library for moto-ims-ext * This was added in 13 which breaks ims: 'java.lang.ClassNotFoundException org/codeaurora/ims/utils/QtiCarrierConfigHelper/ImsService.java' @@ -13,7 +13,7 @@ Signed-off-by: Andrew Hexen 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml -index 3b3dc516..6f4b3de4 100644 +index 3b3dc51..6f4b3de 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -48,9 +48,8 @@ @@ -28,3 +28,6 @@ index 3b3dc516..6f4b3de4 100644 - \ No newline at end of file + +-- +2.43.0 + diff --git a/ims-patches/0004-ims-globally-set-RECEIVER_EXPORTED-for-registerReceiver.patch b/ims-patches/0004-ims-globally-set-RECEIVER_EXPORTED-for-registerRecei.patch similarity index 94% rename from ims-patches/0004-ims-globally-set-RECEIVER_EXPORTED-for-registerReceiver.patch rename to ims-patches/0004-ims-globally-set-RECEIVER_EXPORTED-for-registerRecei.patch index 6f0ce62..dfd70cd 100644 --- a/ims-patches/0004-ims-globally-set-RECEIVER_EXPORTED-for-registerReceiver.patch +++ b/ims-patches/0004-ims-globally-set-RECEIVER_EXPORTED-for-registerRecei.patch @@ -1,7 +1,7 @@ -From 789e1c4dace46b872198b5180ea77afb1b1a2c17 Mon Sep 17 00:00:00 2001 +From 74cc53ffea595daf25e176fb1783641994fb794d Mon Sep 17 00:00:00 2001 From: SGCMarkus Date: Wed, 21 Feb 2024 19:18:49 +0100 -Subject: [PATCH] ims: globally set RECEIVER_EXPORTED for registerReceiver +Subject: [PATCH 4/5] ims: globally set RECEIVER_EXPORTED for registerReceiver E AndroidRuntime: FATAL EXCEPTION: main E AndroidRuntime: Process: org.codeaurora.ims, PID: 3692 @@ -15,7 +15,7 @@ E AndroidRuntime: java.lang.RuntimeException: Unable to create service org.codea 5 files changed, 18 insertions(+), 6 deletions(-) diff --git a/smali/com/qualcomm/ims/vt/LowBatteryHandler.smali b/smali/com/qualcomm/ims/vt/LowBatteryHandler.smali -index d69a656b..deff6dba 100644 +index d69a656..deff6db 100644 --- a/smali/com/qualcomm/ims/vt/LowBatteryHandler.smali +++ b/smali/com/qualcomm/ims/vt/LowBatteryHandler.smali @@ -150,7 +150,9 @@ @@ -30,7 +30,7 @@ index d69a656b..deff6dba 100644 .line 49 return-void diff --git a/smali/org/codeaurora/ims/ImsCallModification.smali b/smali/org/codeaurora/ims/ImsCallModification.smali -index 3c209dfd..a18213bf 100644 +index 3c209df..a18213b 100644 --- a/smali/org/codeaurora/ims/ImsCallModification.smali +++ b/smali/org/codeaurora/ims/ImsCallModification.smali @@ -300,7 +300,9 @@ @@ -45,7 +45,7 @@ index 3c209dfd..a18213bf 100644 .line 141 const-string v0, "Registering car mode receiver" diff --git a/smali/org/codeaurora/ims/ImsConfigImpl.smali b/smali/org/codeaurora/ims/ImsConfigImpl.smali -index c38fe206..4daeb745 100644 +index c38fe20..4daeb74 100644 --- a/smali/org/codeaurora/ims/ImsConfigImpl.smali +++ b/smali/org/codeaurora/ims/ImsConfigImpl.smali @@ -668,7 +668,9 @@ @@ -60,7 +60,7 @@ index c38fe206..4daeb745 100644 .line 257 new-instance v1, Landroid/os/HandlerThread; diff --git a/smali/org/codeaurora/ims/ImsServiceSub.smali b/smali/org/codeaurora/ims/ImsServiceSub.smali -index 4a4a489d..579abd88 100644 +index 4a4a489..579abd8 100644 --- a/smali/org/codeaurora/ims/ImsServiceSub.smali +++ b/smali/org/codeaurora/ims/ImsServiceSub.smali @@ -1074,7 +1074,9 @@ @@ -75,7 +75,7 @@ index 4a4a489d..579abd88 100644 .line 312 iget-object v2, p0, Lorg/codeaurora/ims/ImsServiceSub;->mImsServiceStateReceiver:Lorg/codeaurora/ims/ImsServiceStateReceiver; diff --git a/smali/org/codeaurora/ims/ImsSubController.smali b/smali/org/codeaurora/ims/ImsSubController.smali -index 3f21add4..e0f6feb0 100644 +index 3f21add..e0f6feb 100644 --- a/smali/org/codeaurora/ims/ImsSubController.smali +++ b/smali/org/codeaurora/ims/ImsSubController.smali @@ -416,7 +416,9 @@ @@ -100,3 +100,6 @@ index 3f21add4..e0f6feb0 100644 .line 752 iput-boolean v3, p0, Lorg/codeaurora/ims/ImsSubController;->mIsReceiverRegistered:Z +-- +2.43.0 + diff --git a/ims-patches/0005-fixup-ims-globally-set-RECEIVER_EXPORTED-for-registe.patch b/ims-patches/0005-PATCH-5-5-fixup-ims-globally-set-RECEIVER_EXPORTED-f.patch similarity index 95% rename from ims-patches/0005-fixup-ims-globally-set-RECEIVER_EXPORTED-for-registe.patch rename to ims-patches/0005-PATCH-5-5-fixup-ims-globally-set-RECEIVER_EXPORTED-f.patch index 0a62b3a..18a9389 100644 --- a/ims-patches/0005-fixup-ims-globally-set-RECEIVER_EXPORTED-for-registe.patch +++ b/ims-patches/0005-PATCH-5-5-fixup-ims-globally-set-RECEIVER_EXPORTED-f.patch @@ -1,8 +1,8 @@ -From 9aa16907f82bd04629f8516b3c2ca082a6d73e67 Mon Sep 17 00:00:00 2001 +From 799edb94515218e27a8d18e7ae1ce1aef379355a Mon Sep 17 00:00:00 2001 From: Cosmin Tanislav Date: Fri, 9 Aug 2024 10:47:24 +0300 -Subject: [PATCH 5/5] fixup! ims: globally set RECEIVER_EXPORTED for - registerReceiver +Subject: [PATCH 5/5] [PATCH 5/5] fixup! ims: globally set RECEIVER_EXPORTED + for registerReceiver Use new locals for the RECEIVER_EXPORTED parameter to avoid conflicts. @@ -31,12 +31,12 @@ java.lang.Object (declaration of 'org.codeaurora.ims.ImsCallModification' appear 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/smali/com/qualcomm/ims/vt/LowBatteryHandler.smali b/smali/com/qualcomm/ims/vt/LowBatteryHandler.smali -index deff6dba..6a7e841d 100644 +index deff6db..6a7e841 100644 --- a/smali/com/qualcomm/ims/vt/LowBatteryHandler.smali +++ b/smali/com/qualcomm/ims/vt/LowBatteryHandler.smali @@ -101,7 +101,7 @@ .end method - + .method private constructor (Ljava/util/List;Landroid/content/Context;)V - .locals 3 + .locals 4 @@ -44,24 +44,24 @@ index deff6dba..6a7e841d 100644 .annotation system Ldalvik/annotation/Signature; value = { @@ -150,9 +150,9 @@ - + invoke-direct {v1, v2}, Landroid/content/IntentFilter;->(Ljava/lang/String;)V - + - const/4 v2, 0x2 + const/4 v3, 0x2 - + - invoke-virtual {p2, v0, v1, v2}, Landroid/content/Context;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;I)Landroid/content/Intent; + invoke-virtual {p2, v0, v1, v3}, Landroid/content/Context;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;I)Landroid/content/Intent; - + .line 49 return-void diff --git a/smali/org/codeaurora/ims/ImsCallModification.smali b/smali/org/codeaurora/ims/ImsCallModification.smali -index a18213bf..cae0c88f 100644 +index a18213b..cae0c88 100644 --- a/smali/org/codeaurora/ims/ImsCallModification.smali +++ b/smali/org/codeaurora/ims/ImsCallModification.smali @@ -179,7 +179,7 @@ .end method - + .method public constructor (Lorg/codeaurora/ims/ImsCallSessionImpl;Landroid/content/Context;Lorg/codeaurora/ims/ImsSenderRxr;Landroid/os/Looper;)V - .locals 3 + .locals 4 @@ -69,12 +69,12 @@ index a18213bf..cae0c88f 100644 .param p2, "context" # Landroid/content/Context; .param p3, "senderRxr" # Lorg/codeaurora/ims/ImsSenderRxr; diff --git a/smali/org/codeaurora/ims/ImsConfigImpl.smali b/smali/org/codeaurora/ims/ImsConfigImpl.smali -index 4daeb745..d91ef4fb 100644 +index 4daeb74..d91ef4f 100644 --- a/smali/org/codeaurora/ims/ImsConfigImpl.smali +++ b/smali/org/codeaurora/ims/ImsConfigImpl.smali @@ -414,7 +414,7 @@ .end method - + .method public constructor (Lorg/codeaurora/ims/ImsServiceSub;Lorg/codeaurora/ims/ImsSenderRxr;Landroid/content/Context;)V - .locals 4 + .locals 5 @@ -82,24 +82,24 @@ index 4daeb745..d91ef4fb 100644 .param p2, "senderRxr" # Lorg/codeaurora/ims/ImsSenderRxr; .param p3, "context" # Landroid/content/Context; @@ -668,9 +668,9 @@ - + iget-object v2, p0, Lorg/codeaurora/ims/ImsConfigImpl;->mBroadcastReceiver:Landroid/content/BroadcastReceiver; - + - const/4 v3, 0x2 + const/4 v4, 0x2 - + - invoke-virtual {v1, v2, v0, v3}, Landroid/content/Context;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;I)Landroid/content/Intent; + invoke-virtual {v1, v2, v0, v4}, Landroid/content/Context;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;I)Landroid/content/Intent; - + .line 257 new-instance v1, Landroid/os/HandlerThread; diff --git a/smali/org/codeaurora/ims/ImsServiceSub.smali b/smali/org/codeaurora/ims/ImsServiceSub.smali -index 579abd88..839b79d9 100644 +index 579abd8..839b79d 100644 --- a/smali/org/codeaurora/ims/ImsServiceSub.smali +++ b/smali/org/codeaurora/ims/ImsServiceSub.smali @@ -622,7 +622,7 @@ .end method - + .method public constructor (Landroid/content/Context;ILorg/codeaurora/ims/ImsSenderRxr;Lorg/codeaurora/ims/ImsSubController;)V - .locals 5 + .locals 6 @@ -107,24 +107,24 @@ index 579abd88..839b79d9 100644 .param p2, "phoneId" # I .param p3, "senderRxr" # Lorg/codeaurora/ims/ImsSenderRxr; @@ -1074,9 +1074,9 @@ - + iget-object v3, p0, Lorg/codeaurora/ims/ImsServiceSub;->mImsServiceStateReceiver:Lorg/codeaurora/ims/ImsServiceStateReceiver; - + - const/4 v4, 0x2 + const/4 v5, 0x2 - + - invoke-virtual {v2, v3, v0, v4}, Landroid/content/Context;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;I)Landroid/content/Intent; + invoke-virtual {v2, v3, v0, v5}, Landroid/content/Context;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;I)Landroid/content/Intent; - + .line 312 iget-object v2, p0, Lorg/codeaurora/ims/ImsServiceSub;->mImsServiceStateReceiver:Lorg/codeaurora/ims/ImsServiceStateReceiver; diff --git a/smali/org/codeaurora/ims/ImsSubController.smali b/smali/org/codeaurora/ims/ImsSubController.smali -index e0f6feb0..1cbc3a2f 100644 +index e0f6feb..1cbc3a2 100644 --- a/smali/org/codeaurora/ims/ImsSubController.smali +++ b/smali/org/codeaurora/ims/ImsSubController.smali @@ -301,7 +301,7 @@ .end method - + .method public constructor (Landroid/content/Context;Ljava/util/List;Ljava/util/List;Landroid/os/Looper;)V - .locals 3 + .locals 4 @@ -132,35 +132,38 @@ index e0f6feb0..1cbc3a2f 100644 .param p4, "looper" # Landroid/os/Looper; .annotation system Ldalvik/annotation/Signature; @@ -416,9 +416,9 @@ - + invoke-direct {v1, v2}, Landroid/content/IntentFilter;->(Ljava/lang/String;)V - + - const/4 v2, 0x2 + const/4 v3, 0x2 - + - invoke-virtual {p1, v0, v1, v2}, Landroid/content/Context;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;I)Landroid/content/Intent; + invoke-virtual {p1, v0, v1, v3}, Landroid/content/Context;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;I)Landroid/content/Intent; - + .line 217 iput-object p2, p0, Lorg/codeaurora/ims/ImsSubController;->mSenderRxrs:Ljava/util/List; @@ -1037,7 +1037,7 @@ .end method - + .method private handleRafInfo()V - .locals 10 + .locals 11 - + .line 705 iget v0, p0, Lorg/codeaurora/ims/ImsSubController;->mNumMultiModeStacks:I @@ -1269,9 +1269,9 @@ - + invoke-direct {v5, v6}, Landroid/content/IntentFilter;->(Ljava/lang/String;)V - + - const/4 v3, 0x2 + const/4 v10, 0x2 - + - invoke-virtual {v2, v4, v5, v3}, Landroid/content/Context;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;I)Landroid/content/Intent; + invoke-virtual {v2, v4, v5, v10}, Landroid/content/Context;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;I)Landroid/content/Intent; - + .line 752 iput-boolean v3, p0, Lorg/codeaurora/ims/ImsSubController;->mIsReceiverRegistered:Z +-- +2.43.0 + From f58c3b584a749dd2cd75cbdc6a1b253747234e64 Mon Sep 17 00:00:00 2001 From: Anand S Date: Wed, 15 Jan 2025 15:35:30 +0530 Subject: [PATCH 11/81] sm6375-common: Drop DT2W from common tree * It wasn't working anyways, and we're using custom sensors HAL to handle DT2W. Change-Id: Ic23bea4ebef2766bc5161c178fa1869e43e8b8b4 --- configs/powerhint.json | 14 -------------- .../common/Frameworks/res/values/config.xml | 3 --- 2 files changed, 17 deletions(-) diff --git a/configs/powerhint.json b/configs/powerhint.json index 24a59e6..6e269db 100644 --- a/configs/powerhint.json +++ b/configs/powerhint.json @@ -330,14 +330,6 @@ ], "ResetOnInit": true }, - { - "Name": "DoubleTapToWakeEnable", - "Path": "/sys/class/sensors/dt-gesture/enable", - "Values": [ - "1", - "0" - ], - }, { "Name": "PowerHALMainState", "Path": "vendor.powerhal.state", @@ -640,12 +632,6 @@ "Duration": 5000, "Value": "1497600000" }, - { - "PowerHint": "DOUBLE_TAP_TO_WAKE", - "Node": "DoubleTapToWakeEnable", - "Duration": 0, - "Value": "1" - }, { "PowerHint": "FIXED_PERFORMANCE", "Node": "CPUBigClusterMaxFreq", diff --git a/resource-overlay/common/Frameworks/res/values/config.xml b/resource-overlay/common/Frameworks/res/values/config.xml index 1bd0d6b..b9450fc 100644 --- a/resource-overlay/common/Frameworks/res/values/config.xml +++ b/resource-overlay/common/Frameworks/res/values/config.xml @@ -359,7 +359,4 @@ true - - - true From 0b4dabfabaec4c74f7f853e01d140574e8481bef Mon Sep 17 00:00:00 2001 From: Moeta Yuko Date: Fri, 17 Jan 2025 14:26:27 +0530 Subject: [PATCH 12/81] sm6375-coommon: remove OMX * OMX HW video codecs are no longer used after enabling Codec2 * OMX HW audio codecs won't work without QCOM A/V enhancements, which we don't have on Lineage. Change-Id: I65852151c8fb6387add5fc4402ba3f13c97b5f64 --- common.mk | 19 ++++--------------- manifest.xml | 13 ------------- proprietary-files.txt | 23 ----------------------- 3 files changed, 4 insertions(+), 51 deletions(-) diff --git a/common.mk b/common.mk index c886bdc..8aa385a 100644 --- a/common.mk +++ b/common.mk @@ -253,6 +253,10 @@ PRODUCT_PACKAGES += \ android.hardware.keymaster@4.1.vendor # Media +PRODUCT_PACKAGES += \ + libcodec2_hidl@1.0.vendor \ + libcodec2_vndk.vendor + PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/media/init.qti.media.sh:$(TARGET_COPY_OUT_VENDOR)/bin/init.qti.media.sh \ $(LOCAL_PATH)/media/init.qti.media.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/init.qti.media.rc @@ -290,21 +294,6 @@ PRODUCT_PACKAGES += \ PRODUCT_PACKAGES += \ android.hardware.neuralnetworks@1.3.vendor -# OMX -PRODUCT_PACKAGES += \ - libcodec2_hidl@1.0.vendor \ - libcodec2_vndk.vendor \ - libmm-omxcore \ - libOmxAacEnc \ - libOmxAmrEnc \ - libOmxCore \ - libOmxEvrcEnc \ - libOmxG711Enc \ - libOmxQcelp13Enc \ - libstagefrighthw \ - libstagefright_softomx.vendor \ - libstagefright_softomx_plugin.vendor - # Permissions PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.audio.pro.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.audio.pro.xml \ diff --git a/manifest.xml b/manifest.xml index a08e6e3..5631413 100644 --- a/manifest.xml +++ b/manifest.xml @@ -60,19 +60,6 @@ @4.1::IKeymasterDevice/default - - android.hardware.media.omx - hwbinder - 1.0 - - IOmx - default - - - IOmxStore - default - - android.hardware.nfc hwbinder diff --git a/proprietary-files.txt b/proprietary-files.txt index 7cc8a6a..799e18a 100644 --- a/proprietary-files.txt +++ b/proprietary-files.txt @@ -542,29 +542,6 @@ vendor/etc/media_holi/video_system_specs.json # OEM vendor/bin/motobox -# OMX -vendor/lib/libOmxAacDec.so -vendor/lib/libOmxAlacDec.so -vendor/lib/libOmxAmrDec.so -vendor/lib/libOmxAmrwbplusDec.so -vendor/lib/libOmxApeDec.so -vendor/lib/libOmxDsdDec.so -vendor/lib/libOmxEvrcDec.so -vendor/lib/libOmxG711Dec.so -vendor/lib/libOmxQcelp13Dec.so -vendor/lib/libOmxVideoDSMode.so -vendor/lib/libOmxWmaDec.so -vendor/lib/libdsd2pcm.so -vendor/lib64/libOmxAacDec.so -vendor/lib64/libOmxAlacDec.so -vendor/lib64/libOmxAmrDec.so -vendor/lib64/libOmxAmrwbplusDec.so -vendor/lib64/libOmxApeDec.so -vendor/lib64/libOmxEvrcDec.so -vendor/lib64/libOmxG711Dec.so -vendor/lib64/libOmxQcelp13Dec.so -vendor/lib64/libOmxWmaDec.so - # Peripheral manager vendor/bin/pm-proxy vendor/bin/pm-service From c1ab7949ac31f0a27e1468bcdf7a7b72d853cd70 Mon Sep 17 00:00:00 2001 From: Anand S Date: Fri, 17 Jan 2025 14:52:38 +0530 Subject: [PATCH 13/81] sm6375-common: Update from MMI-U1UGS34.23-82-2-6 * From fogos_g-user 14 U1UGS34.23-82-2-6 e21904 release-keys. Change-Id: If8b8175ac813f905585ddc956bf0519a988ab890 --- proprietary-files.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proprietary-files.txt b/proprietary-files.txt index 799e18a..ee12a53 100644 --- a/proprietary-files.txt +++ b/proprietary-files.txt @@ -1,4 +1,4 @@ -# All unpinned blobs are extracted from fogos_g-user 14 U1UGS34M.23-82-2-3 da6528 release-keys +# All unpinned blobs are extracted from fogos_g-user 14 U1UGS34.23-82-2-6 e21904 release-keys # ADSP vendor/bin/adsprpcd From 2710a972f068e79de7c22930b576dc9d00c7cf00 Mon Sep 17 00:00:00 2001 From: Aaron Kling Date: Wed, 14 Aug 2024 01:44:45 -0500 Subject: [PATCH 14/81] sm7325-common: Enable elf checks Change-Id: Ia6c9a381abb3384c77532d75e02fd84c841a4d1e --- extract-files.sh | 2 +- setup-makefiles.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/extract-files.sh b/extract-files.sh index 0ae0e58..f9f962b 100755 --- a/extract-files.sh +++ b/extract-files.sh @@ -14,7 +14,7 @@ if [[ ! -d "${MY_DIR}" ]]; then MY_DIR="${PWD}"; fi ANDROID_ROOT="${MY_DIR}/../../.." -export TARGET_ENABLE_CHECKELF=false +export TARGET_ENABLE_CHECKELF=true HELPER="${ANDROID_ROOT}/tools/extract-utils/extract_utils.sh" if [ ! -f "${HELPER}" ]; then diff --git a/setup-makefiles.sh b/setup-makefiles.sh index 5ac6ed1..c34cbf0 100755 --- a/setup-makefiles.sh +++ b/setup-makefiles.sh @@ -14,7 +14,7 @@ if [[ ! -d "${MY_DIR}" ]]; then MY_DIR="${PWD}"; fi ANDROID_ROOT="${MY_DIR}/../../.." -export TARGET_ENABLE_CHECKELF=false +export TARGET_ENABLE_CHECKELF=true HELPER="${ANDROID_ROOT}/tools/extract-utils/extract_utils.sh" if [ ! -f "${HELPER}" ]; then From b29c3f156d151ff9147b6f67c528a2754b5097e4 Mon Sep 17 00:00:00 2001 From: Aaron Kling Date: Fri, 17 Jan 2025 15:31:23 +0530 Subject: [PATCH 15/81] sm6375-common: Add vendor soong imports to extract Change-Id: Ib19e69dc35af6b04519eeb695228af65f3d01d2a --- setup-makefiles.sh | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/setup-makefiles.sh b/setup-makefiles.sh index c34cbf0..5a5bbad 100755 --- a/setup-makefiles.sh +++ b/setup-makefiles.sh @@ -23,6 +23,20 @@ if [ ! -f "${HELPER}" ]; then fi source "${HELPER}" +function vendor_imports() { + cat <>"$1" + "device/motorola/sm6375-common", + "hardware/qcom-caf/common/libqti-perfd-client", + "hardware/qcom-caf/sm8350", + "hardware/qcom-caf/wlan", + "hardware/motorola", + "vendor/qcom/opensource/commonsys/display", + "vendor/qcom/opensource/commonsys-intf/display", + "vendor/qcom/opensource/dataservices", + "vendor/qcom/opensource/display", +EOF +} + # Initialize the helper for common setup_vendor "${DEVICE_COMMON}" "${VENDOR_COMMON:-$VENDOR}" "${ANDROID_ROOT}" true From 8d167757f051833cdb9ab401416e0b2b6aa9665b Mon Sep 17 00:00:00 2001 From: Aaron Kling Date: Tue, 29 Aug 2023 13:22:44 -0500 Subject: [PATCH 16/81] sm6375-common: Remove elf files in copy files check New extract files uses packages instead of copy files Change-Id: I337c07d13bd350958d4808e1693cc6e03753a96c --- BoardConfigCommon.mk | 1 - 1 file changed, 1 deletion(-) diff --git a/BoardConfigCommon.mk b/BoardConfigCommon.mk index 9b07b7a..8e1b027 100644 --- a/BoardConfigCommon.mk +++ b/BoardConfigCommon.mk @@ -38,7 +38,6 @@ TARGET_NO_BOOTLOADER := true # BUILD_BROKEN_* BUILD_BROKEN_DUP_RULES := true -BUILD_BROKEN_ELF_PREBUILT_PRODUCT_COPY_FILES := true BUILD_BROKEN_INCORRECT_PARTITION_IMAGES := true # Kernel From 8994ad487a00166517e70a18bb56fc8c83b2d1f3 Mon Sep 17 00:00:00 2001 From: Cosmin Tanislav Date: Sat, 17 Aug 2024 02:23:32 +0300 Subject: [PATCH 17/81] sm6375-common: fix com.qualcomm.qti.dpm.api@1.0 ELF checks Change-Id: I759752ccc133d7047d415eb83c5d3c55820437a4 --- proprietary-files.txt | 2 +- setup-makefiles.sh | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/proprietary-files.txt b/proprietary-files.txt index ee12a53..44ccbd3 100644 --- a/proprietary-files.txt +++ b/proprietary-files.txt @@ -316,7 +316,7 @@ system_ext/lib64/vendor.qti.hardware.dpmservice@1.0.so -system_ext/priv-app/dpmserviceapp/dpmserviceapp.apk vendor/bin/dpmQmiMgr vendor/etc/init/dpmQmiMgr.rc -vendor/lib64/com.qualcomm.qti.dpm.api@1.0.so +vendor/lib64/com.qualcomm.qti.dpm.api@1.0.so;MODULE=com.qualcomm.qti.dpm.api@1.0-vendor vendor/lib64/libdpmqmihal.so # DRM diff --git a/setup-makefiles.sh b/setup-makefiles.sh index 5a5bbad..13824dd 100755 --- a/setup-makefiles.sh +++ b/setup-makefiles.sh @@ -37,6 +37,27 @@ function vendor_imports() { EOF } +function lib_to_package_fixup_vendor_variants() { + if [ "$2" != "vendor" ]; then + return 1 + fi + + case "$1" in + com.qualcomm.qti.dpm.api@1.0) + echo "$1-vendor" + ;; + *) + return 1 + ;; + esac +} + +function lib_to_package_fixup() { + lib_to_package_fixup_clang_rt_ubsan_standalone "$1" || + lib_to_package_fixup_proto_3_9_1 "$1" || + lib_to_package_fixup_vendor_variants "$@" +} + # Initialize the helper for common setup_vendor "${DEVICE_COMMON}" "${VENDOR_COMMON:-$VENDOR}" "${ANDROID_ROOT}" true From fd4205dfc2618c5cff4c2d9c1768804235889f16 Mon Sep 17 00:00:00 2001 From: Michael Bestas Date: Sun, 25 Aug 2024 08:30:58 +0300 Subject: [PATCH 18/81] sm6375-common: fix vendor.qti.hardware.fm@1.0 ELF checks Change-Id: I43f0824f88c24dd9d039f9075090c17f4266ab2d --- proprietary-files.txt | 2 +- setup-makefiles.sh | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/proprietary-files.txt b/proprietary-files.txt index 44ccbd3..1eb6b40 100644 --- a/proprietary-files.txt +++ b/proprietary-files.txt @@ -343,7 +343,7 @@ vendor/lib64/vendor.qti.hardware.eid@1.0.so # FM vendor/lib64/hw/vendor.qti.hardware.fm@1.0-impl.so -vendor/lib64/vendor.qti.hardware.fm@1.0.so +vendor/lib64/vendor.qti.hardware.fm@1.0.so;MODULE=vendor.qti.hardware.fm@1.0-vendor # Gatekeeper vendor/bin/hw/android.hardware.gatekeeper@1.0-service-qti diff --git a/setup-makefiles.sh b/setup-makefiles.sh index 13824dd..8232781 100755 --- a/setup-makefiles.sh +++ b/setup-makefiles.sh @@ -43,7 +43,8 @@ function lib_to_package_fixup_vendor_variants() { fi case "$1" in - com.qualcomm.qti.dpm.api@1.0) + com.qualcomm.qti.dpm.api@1.0 | \ + vendor.qti.hardware.fm@1.0) echo "$1-vendor" ;; *) From 79e052ca905ba3cd8b33bdb0e4baad9c6e525082 Mon Sep 17 00:00:00 2001 From: Cosmin Tanislav Date: Sat, 17 Aug 2024 02:03:24 +0300 Subject: [PATCH 19/81] sm6375-common: fix vendor.qti.imsrtpservice@3.0 ELF checks Change-Id: Ia1995d0a3360317843685082e3226ab30f124d09 --- proprietary-files.txt | 2 +- setup-makefiles.sh | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/proprietary-files.txt b/proprietary-files.txt index 1eb6b40..c8d4740 100644 --- a/proprietary-files.txt +++ b/proprietary-files.txt @@ -865,7 +865,7 @@ vendor/lib64/vendor.qti.ims.rcsuce@1.0.so vendor/lib64/vendor.qti.ims.rcsuce@1.1.so vendor/lib64/vendor.qti.ims.rcsuce@1.2.so vendor/lib64/vendor.qti.imsrtpservice@3.0-service-Impl.so -vendor/lib64/vendor.qti.imsrtpservice@3.0.so +vendor/lib64/vendor.qti.imsrtpservice@3.0.so;MODULE=vendor.qti.imsrtpservice@3.0-vendor # Sensors vendor/bin/hw/vendor.qti.hardware.sensorscalibrate@1.0-service diff --git a/setup-makefiles.sh b/setup-makefiles.sh index 8232781..50c3ca7 100755 --- a/setup-makefiles.sh +++ b/setup-makefiles.sh @@ -44,7 +44,8 @@ function lib_to_package_fixup_vendor_variants() { case "$1" in com.qualcomm.qti.dpm.api@1.0 | \ - vendor.qti.hardware.fm@1.0) + vendor.qti.hardware.fm@1.0 | \ + vendor.qti.imsrtpservice@3.0) echo "$1-vendor" ;; *) From 629de4a8a4d371081f3255bff0b94603e063397e Mon Sep 17 00:00:00 2001 From: Cosmin Tanislav Date: Sun, 18 Aug 2024 09:52:31 +0300 Subject: [PATCH 20/81] sm6375-common: skip dependencies which aren't defined in .bp Change-Id: I01a653661856495788c05b720c0577dac44998a4 --- setup-makefiles.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/setup-makefiles.sh b/setup-makefiles.sh index 50c3ca7..cfd1526 100755 --- a/setup-makefiles.sh +++ b/setup-makefiles.sh @@ -48,6 +48,9 @@ function lib_to_package_fixup_vendor_variants() { vendor.qti.imsrtpservice@3.0) echo "$1-vendor" ;; + libqsap_sdk | \ + libril | \ + libwpa_client) ;; *) return 1 ;; From 3bd00e49f0c19170af647171ccb56e1d7f1e52f0 Mon Sep 17 00:00:00 2001 From: Michael Bestas Date: Sun, 25 Aug 2024 09:00:48 +0300 Subject: [PATCH 21/81] sm6375-common: Disable ELF checks for certain libraries Change-Id: I61dbc3559b43becc22f69ae2c1c3e8edf95e2483 --- proprietary-files.txt | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/proprietary-files.txt b/proprietary-files.txt index c8d4740..b8f0aff 100644 --- a/proprietary-files.txt +++ b/proprietary-files.txt @@ -153,12 +153,14 @@ vendor/etc/cne/wqeclient/VZW/VZW_profile5.xml vendor/etc/cne/wqeclient/VZW/VZW_profile6.xml vendor/etc/default-permissions/com.qualcomm.qti.cne.xml vendor/etc/init/cnd.rc -vendor/lib64/libcne.so +# libcne depends on libwpa_client, which is a gnu makefile target +vendor/lib64/libcne.so;DISABLE_CHECKELF vendor/lib64/libcneapiclient.so vendor/lib64/libcneoplookup.so vendor/lib64/libcneqmiutils.so vendor/lib64/libwms.so -vendor/lib64/libwqe.so +# libwqe depends on libwpa_client, which is a gnu makefile target +vendor/lib64/libwqe.so;DISABLE_CHECKELF vendor/lib64/libxml.so vendor/lib64/vendor.qti.data.factory@2.0.so vendor/lib64/vendor.qti.data.factory@2.1.so @@ -354,7 +356,8 @@ vendor/lib64/hw/android.hardware.gatekeeper@1.0-impl-qti.so -vendor/app/CACertService/CACertService.apk vendor/bin/hw/android.hardware.gnss@2.1-service-qti vendor/bin/loc_launcher -vendor/bin/lowi-server +# lowi-server depends on libwpa_client, which is a gnu makefile target +vendor/bin/lowi-server;DISABLE_CHECKELF vendor/bin/mlid vendor/bin/xtra-daemon vendor/bin/xtwifi-client @@ -721,10 +724,12 @@ vendor/lib64/deviceInfoServiceModuleNr.so vendor/lib64/libconfigdb.so vendor/lib64/liblog_vendor.so vendor/lib64/liblqe.so -vendor/lib64/libmdmcutback.so +# libmdmcutback depends on libqsap_sdk, which is a gnu makefile target +vendor/lib64/libmdmcutback.so;DISABLE_CHECKELF vendor/lib64/libmdmdetect.so vendor/lib64/libminkdescriptor.so -vendor/lib64/libmotext_inf.so +# libmotext_inf depends on libril, which is a gnu makefile target +vendor/lib64/libmotext_inf.so;DISABLE_CHECKELF vendor/lib64/libnetmgr.so vendor/lib64/libnetmgr_common.so vendor/lib64/libnetmgr_nr_fusion.so @@ -746,7 +751,8 @@ vendor/lib64/libqsocket.so vendor/lib64/libril-db.so vendor/lib64/libril-qc-ltedirectdisc.so vendor/lib64/libril-qc-radioconfig.so -vendor/lib64/libril-qcril-hook-oem.so +# libril-qcril-hook-oem depends on libril, which is a gnu makefile target +vendor/lib64/libril-qcril-hook-oem.so;DISABLE_CHECKELF vendor/lib64/librilqmimiscservices.so vendor/lib64/librilqmiservices.so vendor/lib64/libsystem_health_mon.so From f48f093f6a7ade4a7cd5930a6e115b19cb4e4192 Mon Sep 17 00:00:00 2001 From: Michael Bestas Date: Sun, 25 Aug 2024 09:47:33 +0300 Subject: [PATCH 22/81] sm6375-common: Libraries are now automatically added to PRODUCT_PACKAGES Change-Id: Ie92fe02b7e6279195bf28944942c815db773b798 --- proprietary-files.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/proprietary-files.txt b/proprietary-files.txt index b8f0aff..e04dd50 100644 --- a/proprietary-files.txt +++ b/proprietary-files.txt @@ -898,7 +898,7 @@ vendor/lib64/vendor.qti.hardware.sensorscalibrate@1.0.so # Snapdragon Computer Vision Engine vendor/lib/libfastcvdsp_stub.so --vendor/lib/libfastcvopt.so +vendor/lib/libfastcvopt.so vendor/lib/libscveCommon.so vendor/lib/libscveCommon_stub.so vendor/lib/libscveObjectSegmentation.so @@ -910,7 +910,7 @@ vendor/lib/rfsa/adsp/libscveT2T_skel.so vendor/lib/vendor.qti.hardware.scve.objecttracker@1.0.so vendor/lib/vendor.qti.hardware.scve.panorama@1.0.so vendor/lib64/libfastcvdsp_stub.so --vendor/lib64/libfastcvopt.so +vendor/lib64/libfastcvopt.so vendor/lib64/libscveCommon.so vendor/lib64/libscveCommon_stub.so vendor/lib64/libscveObjectSegmentation.so @@ -930,8 +930,8 @@ vendor/lib64/vendor.qti.hardware.soter@1.0.so # Thermal engine vendor/bin/thermal-engine vendor/etc/init/init_thermal-engine.rc --vendor/lib/libthermalclient.so --vendor/lib64/libthermalclient.so +vendor/lib/libthermalclient.so +vendor/lib64/libthermalclient.so # Time services -vendor/app/TimeService/TimeService.apk From 78a3586e4edf0c83bb0d9d98fee3c77cca2f5ca6 Mon Sep 17 00:00:00 2001 From: Demon000 Date: Fri, 17 Jan 2025 16:21:01 +0530 Subject: [PATCH 23/81] sm6375-common: do not manually build dependencies Change-Id: I4046d8eeabfc70842898b7034f75cdd6bcfc441b --- common.mk | 118 ++++-------------------------------------------------- 1 file changed, 8 insertions(+), 110 deletions(-) diff --git a/common.mk b/common.mk index 8aa385a..13a26ea 100644 --- a/common.mk +++ b/common.mk @@ -78,10 +78,6 @@ PRODUCT_PACKAGES += \ PRODUCT_PACKAGES_DEBUG += \ bootctl -# Ant -PRODUCT_PACKAGES += \ - com.dsi.ant@1.0.vendor - # Atrace PRODUCT_PACKAGES += \ android.hardware.atrace@1.0-service @@ -92,7 +88,6 @@ PRODUCT_PACKAGES += \ android.hardware.audio.effect@6.0-impl \ android.hardware.audio.service \ android.hardware.bluetooth@1.0 \ - android.hardware.bluetooth@1.0.vendor \ android.hardware.bluetooth.audio-impl \ android.hardware.soundtrigger@2.3-impl \ audioadsprpcd \ @@ -134,26 +129,10 @@ PRODUCT_COPY_FILES += \ frameworks/av/services/audiopolicy/config/r_submix_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/r_submix_audio_policy_configuration.xml \ frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/usb_audio_policy_configuration.xml -# Authsecret -PRODUCT_PACKAGES += \ - android.hardware.authsecret@1.0.vendor - -# Bluetooth -PRODUCT_PACKAGES += \ - android.hardware.bluetooth@1.0.vendor \ - vendor.qti.hardware.bluetooth_audio@2.1.vendor \ - vendor.qti.hardware.btconfigstore@1.0.vendor \ - vendor.qti.hardware.btconfigstore@2.0.vendor - # Camera PRODUCT_PACKAGES += \ android.hardware.camera.provider@2.4-impl \ - android.hardware.camera.provider@2.4-service_64 \ - libcamera2ndk_vendor \ - libexif.vendor:64 \ - libgui_vendor \ - libyuv.vendor:64 \ - vendor.qti.hardware.camera.postproc@1.0.vendor + android.hardware.camera.provider@2.4-service_64 # Charger WITH_LINEAGE_CHARGER := false @@ -167,42 +146,23 @@ PRODUCT_PACKAGES += \ android.hardware.graphics.mapper@3.0-impl-qti-display \ android.hardware.graphics.mapper@4.0-impl-qti-display \ init.qti.display_boot.sh \ - libdisplayconfig.qti \ - libdisplayconfig.system.qti \ - libmemutils \ - libqdMetaData \ - libsdmcore \ - libsdmutils \ - libtinyxml \ - vendor.display.config@1.15.vendor \ - vendor.display.config@2.0 \ - vendor.display.config@2.0.vendor \ vendor.qti.hardware.display.allocator-service \ vendor.qti.hardware.display.composer-service \ - vendor.qti.hardware.display.mapper@1.1.vendor \ - vendor.qti.hardware.display.mapper@2.0.vendor \ - vendor.qti.hardware.display.mapper@3.0.vendor \ - vendor.qti.hardware.display.mapper@4.0.vendor \ - vendor.qti.hardware.display.mapperextensions@1.0.vendor \ - vendor.qti.hardware.display.mapperextensions@1.1.vendor \ - vendor.qti.hardware.display.mapperextensions@1.2.vendor \ - vendor.qti.hardware.display.mapperextensions@1.3.vendor \ - vendor.qti.hardware.memtrack-service + vendor.qti.hardware.memtrack-service \ + libdisplayconfig.system.qti # DRM PRODUCT_PACKAGES += \ - android.hardware.drm@1.4.vendor \ - android.hardware.drm-service.clearkey \ - libcrypto_shim.vendor + android.hardware.drm-service.clearkey # fastbootd PRODUCT_PACKAGES += \ android.hardware.fastboot@1.1-impl.custom \ fastbootd -# Gatekeeper +# Framework detect PRODUCT_PACKAGES += \ - android.hardware.gatekeeper@1.0.vendor + libvndfwk_detect_jni.qti.vendor # Needed by CNE app # GPS PRODUCT_PACKAGES += \ @@ -216,11 +176,6 @@ PRODUCT_PACKAGES += \ android.hardware.health@2.1-impl.recovery \ android.hardware.health@2.1-service -# HIDL -PRODUCT_PACKAGES += \ - libhidltransport.vendor \ - libhwbinder.vendor - # Init PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/rootdir/etc/fstab.qcom:$(TARGET_COPY_OUT_VENDOR_RAMDISK)/first_stage_ramdisk/fstab.qcom @@ -248,10 +203,6 @@ PRODUCT_COPY_FILES += \ # Kernel PRODUCT_ENABLE_UFFD_GC := false -# Keymaster -PRODUCT_PACKAGES += \ - android.hardware.keymaster@4.1.vendor - # Media PRODUCT_PACKAGES += \ libcodec2_hidl@1.0.vendor \ @@ -278,22 +229,11 @@ PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/media/blair/media_codecs_blair.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_blair.xml \ $(LOCAL_PATH)/media/blair/media_profiles_blair.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_profiles_blair.xml -PRODUCT_PACKAGES += \ - android.hardware.media.omx@1.0-service \ - libstagefright_omx.vendor \ - libavservices_minijail \ - libavservices_minijail.vendor \ - libcodec2_hidl@1.0.vendor - # Moto hardware PRODUCT_PACKAGES += \ MotoActions \ MotoCommonOverlay -# Neural Networks -PRODUCT_PACKAGES += \ - android.hardware.neuralnetworks@1.3.vendor - # Permissions PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.audio.pro.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.audio.pro.xml \ @@ -354,41 +294,13 @@ PRODUCT_PACKAGES += \ PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/configs/powerhint.json:$(TARGET_COPY_OUT_VENDOR)/etc/powerhint.json -# QMI -PRODUCT_PACKAGES += \ - libjson \ - libjsoncpp.vendor \ - libcurl.vendor \ - libnetutils.vendor:64 \ - libqti_vndfwk_detect \ - libqti_vndfwk_detect.vendor \ - libsqlite.vendor:64 \ - libvndfwk_detect_jni.qti \ - libvndfwk_detect_jni.qti.vendor - # RenderScript PRODUCT_PACKAGES += \ android.hardware.renderscript@1.0-impl -# RIL -PRODUCT_PACKAGES += \ - android.hardware.radio@1.5.vendor \ - android.hardware.radio.config@1.2.vendor \ - android.hardware.radio.deprecated@1.0.vendor \ - android.system.net.netd@1.1.vendor \ - libion.vendor \ - libprotobuf-cpp-full \ - libprotobuf-cpp-full-3.9.1-vendorcompat \ - libprotobuf-cpp-lite-3.9.1-vendorcompat \ - librmnetctl \ - libsysutils.vendor \ - libxml2 - # Sensors PRODUCT_PACKAGES += \ - android.frameworks.sensorservice@1.0.vendor \ - android.hardware.sensors@2.0-service.multihal \ - libsensorndkbridge + android.hardware.sensors@2.0-service.multihal # Soong namespaces PRODUCT_SOONG_NAMESPACES += \ @@ -425,14 +337,7 @@ PRODUCT_COPY_FILES += \ # Thermal PRODUCT_PACKAGES += \ - android.hardware.thermal-service.qti \ - android.hardware.thermal@2.0 \ - android.hardware.thermal@2.0.vendor - -# Trusted UI -PRODUCT_PACKAGES += \ - android.hidl.memory.block@1.0.vendor \ - vendor.qti.hardware.systemhelper@1.0.vendor + android.hardware.thermal-service.qti # Update engine PRODUCT_PACKAGES += \ @@ -473,12 +378,6 @@ PRODUCT_PACKAGES += \ libwpa_client \ libwifi-hal-ctrl \ libwifi-hal-qcom \ - vendor.qti.hardware.wifi.hostapd@1.0.vendor \ - vendor.qti.hardware.wifi.hostapd@1.1.vendor \ - vendor.qti.hardware.wifi.hostapd@1.2.vendor \ - vendor.qti.hardware.wifi.supplicant@2.0.vendor \ - vendor.qti.hardware.wifi.supplicant@2.1.vendor \ - vendor.qti.hardware.wifi.supplicant@2.2.vendor \ wpa_supplicant \ wpa_supplicant.conf @@ -491,7 +390,6 @@ PRODUCT_VENDOR_MOVE_ENABLED := true # WiFi Display PRODUCT_PACKAGES += \ - libavservices_minijail \ libgui_shim \ libinput_shim \ libnl \ From 3e5115e37472a1abf0708063f8a9fbf7d7ea4438 Mon Sep 17 00:00:00 2001 From: Michael Bestas Date: Tue, 27 Aug 2024 22:05:28 +0300 Subject: [PATCH 24/81] sm6375-common: Sync extract scripts with templates Change-Id: I98a36854c5a0c0390592911bb2558b34eff77efc --- extract-files.sh | 52 ++++++++++++++++++++++++---------------------- setup-makefiles.sh | 5 +---- 2 files changed, 28 insertions(+), 29 deletions(-) diff --git a/extract-files.sh b/extract-files.sh index f9f962b..e4097e5 100755 --- a/extract-files.sh +++ b/extract-files.sh @@ -2,7 +2,6 @@ # # SPDX-FileCopyrightText: 2016 The CyanogenMod Project # SPDX-FileCopyrightText: 2017-2024 The LineageOS Project -# # SPDX-License-Identifier: Apache-2.0 # @@ -14,7 +13,9 @@ if [[ ! -d "${MY_DIR}" ]]; then MY_DIR="${PWD}"; fi ANDROID_ROOT="${MY_DIR}/../../.." -export TARGET_ENABLE_CHECKELF=true +# If XML files don't have comments before the XML header, use this flag +# Can still be used with broken XML files by using blob_fixup +export TARGET_DISABLE_XML_FIXING=true HELPER="${ANDROID_ROOT}/tools/extract-utils/extract_utils.sh" if [ ! -f "${HELPER}" ]; then @@ -34,29 +35,29 @@ SECTION= while [ "${#}" -gt 0 ]; do case "${1}" in - --only-common ) - ONLY_COMMON=true - ;; - --only-firmware ) - ONLY_FIRMWARE=true - ;; - --only-target ) - ONLY_TARGET=true - ;; - -n | --no-cleanup ) - CLEAN_VENDOR=false - ;; - -k | --kang ) - KANG="--kang" - ;; - -s | --section ) - SECTION="${2}" - shift - CLEAN_VENDOR=false - ;; - * ) - SRC="${1}" - ;; + --only-common) + ONLY_COMMON=true + ;; + --only-firmware) + ONLY_FIRMWARE=true + ;; + --only-target) + ONLY_TARGET=true + ;; + -n | --no-cleanup) + CLEAN_VENDOR=false + ;; + -k | --kang) + KANG="--kang" + ;; + -s | --section) + SECTION="${2}" + shift + CLEAN_VENDOR=false + ;; + *) + SRC="${1}" + ;; esac shift done @@ -81,6 +82,7 @@ function blob_fixup() { sed -i "s#/system/#/system_ext/#" "${2}" ;; system_ext/priv-app/ims/ims.apk) + [ "$2" = "" ] && return 0 apktool_patch "${2}" "$MY_DIR/ims-patches" ;; vendor/etc/vintf/manifest/vendor.dolby.media.c2@1.0-service.xml) diff --git a/setup-makefiles.sh b/setup-makefiles.sh index cfd1526..15314b4 100755 --- a/setup-makefiles.sh +++ b/setup-makefiles.sh @@ -2,7 +2,6 @@ # # SPDX-FileCopyrightText: 2016 The CyanogenMod Project # SPDX-FileCopyrightText: 2017-2024 The LineageOS Project -# # SPDX-License-Identifier: Apache-2.0 # @@ -14,8 +13,6 @@ if [[ ! -d "${MY_DIR}" ]]; then MY_DIR="${PWD}"; fi ANDROID_ROOT="${MY_DIR}/../../.." -export TARGET_ENABLE_CHECKELF=true - HELPER="${ANDROID_ROOT}/tools/extract-utils/extract_utils.sh" if [ ! -f "${HELPER}" ]; then echo "Unable to find helper script at ${HELPER}" @@ -83,7 +80,7 @@ if [ -s "${MY_DIR}/../../${VENDOR}/${DEVICE}/proprietary-files.txt" ]; then write_headers # The standard device blobs - write_makefiles "${MY_DIR}/../../${VENDOR}/${DEVICE}/proprietary-files.txt" + write_makefiles "${MY_DIR}/../../${VENDOR}/${DEVICE}/proprietary-files.txt" true if [ -f "${MY_DIR}/../../${VENDOR}/${DEVICE}/proprietary-firmware.txt" ]; then append_firmware_calls_to_makefiles "${MY_DIR}/../../${VENDOR}/${DEVICE}/proprietary-firmware.txt" From f1bc5e83351313d14c3e5442d97d9a25b982a87a Mon Sep 17 00:00:00 2001 From: Michael Bestas Date: Tue, 10 Sep 2024 01:42:47 +0300 Subject: [PATCH 25/81] sm6375-common: extract-files improvements Change-Id: I517698ca3b5a93e10a5b167417631c7f8d0ab9e2 --- proprietary-files.txt | 17 ++++++++--------- setup-makefiles.sh | 4 ++-- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/proprietary-files.txt b/proprietary-files.txt index e04dd50..86b461e 100644 --- a/proprietary-files.txt +++ b/proprietary-files.txt @@ -1,5 +1,10 @@ # All unpinned blobs are extracted from fogos_g-user 14 U1UGS34.23-82-2-6 e21904 release-keys +# Current blobs with ELF checks disabled: +# libcne, libwqe, lowi-server, mutualex depend on libwpa_client, which is a gnu makefile target +# libmdmcutback depends on libqsap_sdk, which is a gnu makefile target +# libmotext_inf, libril-qcril-hook-oem depend on libril, which is a gnu makefile target + # ADSP vendor/bin/adsprpcd vendor/bin/dspservice @@ -153,13 +158,11 @@ vendor/etc/cne/wqeclient/VZW/VZW_profile5.xml vendor/etc/cne/wqeclient/VZW/VZW_profile6.xml vendor/etc/default-permissions/com.qualcomm.qti.cne.xml vendor/etc/init/cnd.rc -# libcne depends on libwpa_client, which is a gnu makefile target vendor/lib64/libcne.so;DISABLE_CHECKELF vendor/lib64/libcneapiclient.so vendor/lib64/libcneoplookup.so vendor/lib64/libcneqmiutils.so vendor/lib64/libwms.so -# libwqe depends on libwpa_client, which is a gnu makefile target vendor/lib64/libwqe.so;DISABLE_CHECKELF vendor/lib64/libxml.so vendor/lib64/vendor.qti.data.factory@2.0.so @@ -318,7 +321,7 @@ system_ext/lib64/vendor.qti.hardware.dpmservice@1.0.so -system_ext/priv-app/dpmserviceapp/dpmserviceapp.apk vendor/bin/dpmQmiMgr vendor/etc/init/dpmQmiMgr.rc -vendor/lib64/com.qualcomm.qti.dpm.api@1.0.so;MODULE=com.qualcomm.qti.dpm.api@1.0-vendor +vendor/lib64/com.qualcomm.qti.dpm.api@1.0.so;MODULE_SUFFIX=_vendor vendor/lib64/libdpmqmihal.so # DRM @@ -345,7 +348,7 @@ vendor/lib64/vendor.qti.hardware.eid@1.0.so # FM vendor/lib64/hw/vendor.qti.hardware.fm@1.0-impl.so -vendor/lib64/vendor.qti.hardware.fm@1.0.so;MODULE=vendor.qti.hardware.fm@1.0-vendor +vendor/lib64/vendor.qti.hardware.fm@1.0.so;MODULE_SUFFIX=_vendor # Gatekeeper vendor/bin/hw/android.hardware.gatekeeper@1.0-service-qti @@ -356,7 +359,6 @@ vendor/lib64/hw/android.hardware.gatekeeper@1.0-impl-qti.so -vendor/app/CACertService/CACertService.apk vendor/bin/hw/android.hardware.gnss@2.1-service-qti vendor/bin/loc_launcher -# lowi-server depends on libwpa_client, which is a gnu makefile target vendor/bin/lowi-server;DISABLE_CHECKELF vendor/bin/mlid vendor/bin/xtra-daemon @@ -724,11 +726,9 @@ vendor/lib64/deviceInfoServiceModuleNr.so vendor/lib64/libconfigdb.so vendor/lib64/liblog_vendor.so vendor/lib64/liblqe.so -# libmdmcutback depends on libqsap_sdk, which is a gnu makefile target vendor/lib64/libmdmcutback.so;DISABLE_CHECKELF vendor/lib64/libmdmdetect.so vendor/lib64/libminkdescriptor.so -# libmotext_inf depends on libril, which is a gnu makefile target vendor/lib64/libmotext_inf.so;DISABLE_CHECKELF vendor/lib64/libnetmgr.so vendor/lib64/libnetmgr_common.so @@ -751,7 +751,6 @@ vendor/lib64/libqsocket.so vendor/lib64/libril-db.so vendor/lib64/libril-qc-ltedirectdisc.so vendor/lib64/libril-qc-radioconfig.so -# libril-qcril-hook-oem depends on libril, which is a gnu makefile target vendor/lib64/libril-qcril-hook-oem.so;DISABLE_CHECKELF vendor/lib64/librilqmimiscservices.so vendor/lib64/librilqmiservices.so @@ -871,7 +870,7 @@ vendor/lib64/vendor.qti.ims.rcsuce@1.0.so vendor/lib64/vendor.qti.ims.rcsuce@1.1.so vendor/lib64/vendor.qti.ims.rcsuce@1.2.so vendor/lib64/vendor.qti.imsrtpservice@3.0-service-Impl.so -vendor/lib64/vendor.qti.imsrtpservice@3.0.so;MODULE=vendor.qti.imsrtpservice@3.0-vendor +vendor/lib64/vendor.qti.imsrtpservice@3.0.so;MODULE_SUFFIX=_vendor # Sensors vendor/bin/hw/vendor.qti.hardware.sensorscalibrate@1.0-service diff --git a/setup-makefiles.sh b/setup-makefiles.sh index 15314b4..699ec39 100755 --- a/setup-makefiles.sh +++ b/setup-makefiles.sh @@ -43,7 +43,7 @@ function lib_to_package_fixup_vendor_variants() { com.qualcomm.qti.dpm.api@1.0 | \ vendor.qti.hardware.fm@1.0 | \ vendor.qti.imsrtpservice@3.0) - echo "$1-vendor" + echo "$1_vendor" ;; libqsap_sdk | \ libril | \ @@ -80,7 +80,7 @@ if [ -s "${MY_DIR}/../../${VENDOR}/${DEVICE}/proprietary-files.txt" ]; then write_headers # The standard device blobs - write_makefiles "${MY_DIR}/../../${VENDOR}/${DEVICE}/proprietary-files.txt" true + write_makefiles "${MY_DIR}/../../${VENDOR}/${DEVICE}/proprietary-files.txt" if [ -f "${MY_DIR}/../../${VENDOR}/${DEVICE}/proprietary-firmware.txt" ]; then append_firmware_calls_to_makefiles "${MY_DIR}/../../${VENDOR}/${DEVICE}/proprietary-firmware.txt" From 8dba08430d4623a1d85bf2bc9bfc6a74222f4cb4 Mon Sep 17 00:00:00 2001 From: LuK1337 Date: Fri, 17 Jan 2025 16:34:29 +0530 Subject: [PATCH 26/81] sm6375-common: Turn 64-bit rfsa copy into symlink Change-Id: I2d2be3e37d2618523937178480c4f3d433d1dee7 --- proprietary-files.txt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/proprietary-files.txt b/proprietary-files.txt index 86b461e..b8c3664 100644 --- a/proprietary-files.txt +++ b/proprietary-files.txt @@ -39,10 +39,8 @@ vendor/lib/rfsa/adsp/libmctfengine_skel.so vendor/lib/rfsa/adsp/libneat_1_1_skel.so vendor/lib/rfsa/adsp/libscveObjectSegmentation_skel.so vendor/lib/rfsa/adsp/libscveT2T_skel.so -vendor/lib/rfsa/adsp/libsns_device_mode_skel.so -vendor/lib/rfsa/adsp/libsns_low_lat_stream_skel.so -vendor/lib64/rfsa/adsp/libsns_device_mode_skel.so -vendor/lib64/rfsa/adsp/libsns_low_lat_stream_skel.so +vendor/lib/rfsa/adsp/libsns_device_mode_skel.so;SYMLINK=vendor/lib64/rfsa/adsp/libsns_device_mode_skel.so +vendor/lib/rfsa/adsp/libsns_low_lat_stream_skel.so;SYMLINK=vendor/lib64/rfsa/adsp/libsns_low_lat_stream_skel.so # ANT+ system_ext/lib/com.qualcomm.qti.ant@1.0.so From 25839098919b2dd217b3a1f7ba3cf30f5d2976b3 Mon Sep 17 00:00:00 2001 From: Michael Bestas Date: Sun, 3 Nov 2024 07:33:51 +0200 Subject: [PATCH 27/81] sm6375-common: Switch to python extract-utils Change-Id: Ida4b83459d9739ac880b26a91df974e1db8423e9 --- extract-files.py | 84 ++++++++++++++++++++++++++ extract-files.sh | 145 --------------------------------------------- setup-makefiles.py | 1 + setup-makefiles.sh | 91 ---------------------------- 4 files changed, 85 insertions(+), 236 deletions(-) create mode 100755 extract-files.py delete mode 100755 extract-files.sh create mode 100755 setup-makefiles.py delete mode 100755 setup-makefiles.sh diff --git a/extract-files.py b/extract-files.py new file mode 100755 index 0000000..676e3ee --- /dev/null +++ b/extract-files.py @@ -0,0 +1,84 @@ +#!/usr/bin/env -S PYTHONPATH=../../../tools/extract-utils python3 +# +# SPDX-FileCopyrightText: 2024 The LineageOS Project +# SPDX-License-Identifier: Apache-2.0 +# + +from extract_utils.fixups_blob import ( + blob_fixup, + blob_fixups_user_type, +) +from extract_utils.fixups_lib import ( + lib_fixup_remove, + lib_fixup_remove_arch_suffix, + lib_fixup_vendorcompat, + lib_fixups_user_type, + libs_clang_rt_ubsan, + libs_proto_3_9_1, +) +from extract_utils.main import ( + ExtractUtils, + ExtractUtilsModule, +) + +namespace_imports = [ + 'device/motorola/sm6375-common', + 'hardware/qcom-caf/common/libqti-perfd-client', + 'hardware/qcom-caf/sm8350', + 'hardware/qcom-caf/wlan', + 'hardware/motorola', + 'vendor/qcom/opensource/commonsys/display', + 'vendor/qcom/opensource/commonsys-intf/display', + 'vendor/qcom/opensource/dataservices', + 'vendor/qcom/opensource/display', +] + + +def lib_fixup_vendor_suffix(lib: str, partition: str, *args, **kwargs): + return f'{lib}_{partition}' if partition == 'vendor' else None + + +lib_fixups: lib_fixups_user_type = { + libs_clang_rt_ubsan: lib_fixup_remove_arch_suffix, + libs_proto_3_9_1: lib_fixup_vendorcompat, + ( + 'com.qualcomm.qti.dpm.api@1.0', + 'vendor.qti.hardware.fm@1.0', + 'vendor.qti.imsrtpservice@3.0', + ): lib_fixup_vendor_suffix, + ( + 'libqsap_sdk', + 'libril', + 'libwpa_client', + ): lib_fixup_remove, +} + +blob_fixups: blob_fixups_user_type = { + 'system_ext/etc/permissions/moto-telephony.xml': blob_fixup() + .regex_replace('/system/', '/system_ext/'), + 'system_ext/priv-app/ims/ims.apk': blob_fixup() + .apktool_patch('ims-patches'), + 'vendor/lib64/libwvhidl.so': blob_fixup() + .add_needed('libcrypto_shim.so'), + ('system_ext/lib/libwfdmmsrc_system.so', 'system_ext/lib64/libwfdmmsrc_system.so'): blob_fixup() + .add_needed('libgui_shim.so'), + 'system_ext/lib64/libwfdnative.so': blob_fixup() + .add_needed('libinput_shim.so'), + 'vendor/etc/vintf/manifest/vendor.dolby.media.c2@1.0-service.xml': blob_fixup() + .regex_replace('IComponentStore/default9', 'IComponentStore/default'), + 'vendor/etc/qcril_database/qcrilNr.db': blob_fixup(), + 'vendor/etc/qcril_database/upgrade/config/*': blob_fixup() + .regex_replace('persist.vendor.radio.poweron_opt/1', 'persist.vendor.radio.poweron_opt/0'), +} # fmt: skip + +module = ExtractUtilsModule( + 'sm6375-common', + 'motorola', + blob_fixups=blob_fixups, + lib_fixups=lib_fixups, + namespace_imports=namespace_imports, +) + +if __name__ == '__main__': + utils = ExtractUtils.device(module) + utils.run() diff --git a/extract-files.sh b/extract-files.sh deleted file mode 100755 index e4097e5..0000000 --- a/extract-files.sh +++ /dev/null @@ -1,145 +0,0 @@ -#!/bin/bash -# -# SPDX-FileCopyrightText: 2016 The CyanogenMod Project -# SPDX-FileCopyrightText: 2017-2024 The LineageOS Project -# SPDX-License-Identifier: Apache-2.0 -# - -set -e - -# Load extract_utils and do some sanity checks -MY_DIR="${BASH_SOURCE%/*}" -if [[ ! -d "${MY_DIR}" ]]; then MY_DIR="${PWD}"; fi - -ANDROID_ROOT="${MY_DIR}/../../.." - -# If XML files don't have comments before the XML header, use this flag -# Can still be used with broken XML files by using blob_fixup -export TARGET_DISABLE_XML_FIXING=true - -HELPER="${ANDROID_ROOT}/tools/extract-utils/extract_utils.sh" -if [ ! -f "${HELPER}" ]; then - echo "Unable to find helper script at ${HELPER}" - exit 1 -fi -source "${HELPER}" - -# Default to sanitizing the vendor folder before extraction -CLEAN_VENDOR=true - -ONLY_COMMON= -ONLY_FIRMWARE= -ONLY_TARGET= -KANG= -SECTION= - -while [ "${#}" -gt 0 ]; do - case "${1}" in - --only-common) - ONLY_COMMON=true - ;; - --only-firmware) - ONLY_FIRMWARE=true - ;; - --only-target) - ONLY_TARGET=true - ;; - -n | --no-cleanup) - CLEAN_VENDOR=false - ;; - -k | --kang) - KANG="--kang" - ;; - -s | --section) - SECTION="${2}" - shift - CLEAN_VENDOR=false - ;; - *) - SRC="${1}" - ;; - esac - shift -done - -if [ -z "${SRC}" ]; then - SRC="adb" -fi - -function blob_fixup() { - case "${1}" in - system_ext/lib*/libwfdmmsrc_system.so) - [ "$2" = "" ] && return 0 - grep -q "libgui_shim.so" "${2}" || "${PATCHELF}" --add-needed "libgui_shim.so" "${2}" - ;; - system_ext/lib64/libwfdnative.so) - [ "$2" = "" ] && return 0 - "${PATCHELF}" --remove-needed "android.hidl.base@1.0.so" "${2}" - grep -q "libinput_shim.so" "${2}" || "${PATCHELF}" --add-needed "libinput_shim.so" "${2}" - ;; - system_ext/etc/permissions/moto-telephony.xml) - [ "$2" = "" ] && return 0 - sed -i "s#/system/#/system_ext/#" "${2}" - ;; - system_ext/priv-app/ims/ims.apk) - [ "$2" = "" ] && return 0 - apktool_patch "${2}" "$MY_DIR/ims-patches" - ;; - vendor/etc/vintf/manifest/vendor.dolby.media.c2@1.0-service.xml) - [ "$2" = "" ] && return 0 - sed -ni '/default.*fqname/!p' "${2}" - ;; - vendor/lib64/libwvhidl.so) - [ "$2" = "" ] && return 0 - grep -q libcrypto_shim.so "${2}" || "${PATCHELF}" --add-needed "libcrypto_shim.so" "${2}" - ;; - *) - return 1 - ;; - vendor/etc/qcril_database/qcrilNr.db|\ - vendor/etc/qcril_database/upgrade/config/*) - sed -i '/persist.vendor.radio.poweron_opt/ s/1/0/g' "${2}" - ;; - esac - return 0 -} -function blob_fixup_dry() { - blob_fixup "$1" "" -} - -function prepare_firmware() { - if [ "${SRC}" != "adb" ]; then - local STAR="${ANDROID_ROOT}"/lineage/scripts/motorola/star.sh - for IMAGE in bootloader radio; do - if [ -f "${SRC}/${IMAGE}.img" ]; then - echo "Extracting Motorola star image ${SRC}/${IMAGE}.img" - sh "${STAR}" "${SRC}/${IMAGE}.img" "${SRC}" - fi - done - local INFO="${ANDROID_ROOT}"/lineage/scripts/motorola/info.sh - ./${INFO} "${SRC}" - fi -} - -if [ -z "${ONLY_FIRMWARE}" ] && [ -z "${ONLY_TARGET}" ]; then - # Initialize the helper for common device - setup_vendor "${DEVICE_COMMON}" "${VENDOR_COMMON:-$VENDOR}" "${ANDROID_ROOT}" true "${CLEAN_VENDOR}" - - extract "${MY_DIR}/proprietary-files.txt" "${SRC}" "${KANG}" --section "${SECTION}" -fi - -if [ -z "${ONLY_COMMON}" ] && [ -s "${MY_DIR}/../../${VENDOR}/${DEVICE}/proprietary-files.txt" ]; then - # Reinitialize the helper for device - source "${MY_DIR}/../../${VENDOR}/${DEVICE}/extract-files.sh" - setup_vendor "${DEVICE}" "${VENDOR}" "${ANDROID_ROOT}" false "${CLEAN_VENDOR}" - - if [ -z "${ONLY_FIRMWARE}" ]; then - extract "${MY_DIR}/../../${VENDOR}/${DEVICE}/proprietary-files.txt" "${SRC}" "${KANG}" --section "${SECTION}" - fi - - if [ -z "${SECTION}" ] && [ -f "${MY_DIR}/../../${VENDOR}/${DEVICE}/proprietary-firmware.txt" ]; then - extract_firmware "${MY_DIR}/../../${VENDOR}/${DEVICE}/proprietary-firmware.txt" "${SRC}" - fi -fi - -"${MY_DIR}/setup-makefiles.sh" diff --git a/setup-makefiles.py b/setup-makefiles.py new file mode 100755 index 0000000..32947cf --- /dev/null +++ b/setup-makefiles.py @@ -0,0 +1 @@ +#!./extract-files.py --regenerate_makefiles diff --git a/setup-makefiles.sh b/setup-makefiles.sh deleted file mode 100755 index 699ec39..0000000 --- a/setup-makefiles.sh +++ /dev/null @@ -1,91 +0,0 @@ -#!/bin/bash -# -# SPDX-FileCopyrightText: 2016 The CyanogenMod Project -# SPDX-FileCopyrightText: 2017-2024 The LineageOS Project -# SPDX-License-Identifier: Apache-2.0 -# - -set -e - -# Load extract_utils and do some sanity checks -MY_DIR="${BASH_SOURCE%/*}" -if [[ ! -d "${MY_DIR}" ]]; then MY_DIR="${PWD}"; fi - -ANDROID_ROOT="${MY_DIR}/../../.." - -HELPER="${ANDROID_ROOT}/tools/extract-utils/extract_utils.sh" -if [ ! -f "${HELPER}" ]; then - echo "Unable to find helper script at ${HELPER}" - exit 1 -fi -source "${HELPER}" - -function vendor_imports() { - cat <>"$1" - "device/motorola/sm6375-common", - "hardware/qcom-caf/common/libqti-perfd-client", - "hardware/qcom-caf/sm8350", - "hardware/qcom-caf/wlan", - "hardware/motorola", - "vendor/qcom/opensource/commonsys/display", - "vendor/qcom/opensource/commonsys-intf/display", - "vendor/qcom/opensource/dataservices", - "vendor/qcom/opensource/display", -EOF -} - -function lib_to_package_fixup_vendor_variants() { - if [ "$2" != "vendor" ]; then - return 1 - fi - - case "$1" in - com.qualcomm.qti.dpm.api@1.0 | \ - vendor.qti.hardware.fm@1.0 | \ - vendor.qti.imsrtpservice@3.0) - echo "$1_vendor" - ;; - libqsap_sdk | \ - libril | \ - libwpa_client) ;; - *) - return 1 - ;; - esac -} - -function lib_to_package_fixup() { - lib_to_package_fixup_clang_rt_ubsan_standalone "$1" || - lib_to_package_fixup_proto_3_9_1 "$1" || - lib_to_package_fixup_vendor_variants "$@" -} - -# Initialize the helper for common -setup_vendor "${DEVICE_COMMON}" "${VENDOR_COMMON:-$VENDOR}" "${ANDROID_ROOT}" true - -# Warning headers and guards -write_headers "bangkk fogos" - -# The standard common blobs -write_makefiles "${MY_DIR}/proprietary-files.txt" - -# Finish -write_footers - -if [ -s "${MY_DIR}/../../${VENDOR}/${DEVICE}/proprietary-files.txt" ]; then - # Reinitialize the helper for device - setup_vendor "${DEVICE}" "${VENDOR}" "${ANDROID_ROOT}" false - - # Warning headers and guards - write_headers - - # The standard device blobs - write_makefiles "${MY_DIR}/../../${VENDOR}/${DEVICE}/proprietary-files.txt" - - if [ -f "${MY_DIR}/../../${VENDOR}/${DEVICE}/proprietary-firmware.txt" ]; then - append_firmware_calls_to_makefiles "${MY_DIR}/../../${VENDOR}/${DEVICE}/proprietary-firmware.txt" - fi - - # Finish - write_footers -fi From 73b61767a5f76f68bab1d76907e5c1dd0c0c8f03 Mon Sep 17 00:00:00 2001 From: Anand S Date: Sat, 18 Jan 2025 01:09:42 +0530 Subject: [PATCH 28/81] sm6375-common: Remove duplicate blobs Change-Id: I2dd1c83d83cfffe6ff8f0bd5e2f7eba117b9f663 --- proprietary-files.txt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/proprietary-files.txt b/proprietary-files.txt index b8c3664..a97a51b 100644 --- a/proprietary-files.txt +++ b/proprietary-files.txt @@ -423,7 +423,6 @@ vendor/lib64/vendor.qti.gnss@3.0.so vendor/lib64/vendor.qti.gnss@4.0-service.so vendor/lib64/vendor.qti.gnss@4.0.so vendor/lib64/vendor.qti.hardware.cacert@1.0.so -vendor/lib64/vendor.qti.hardware.qccsyshal@1.0.so # Graphics - Adreno vendor/lib/egl/eglSubDriverAndroid.so @@ -784,7 +783,6 @@ vendor/lib64/vendor.qti.hardware.radio.uim_remote_server@1.0.so # Ril - IMS (APK) system/etc/permissions/moto-telephony.xml:system_ext/etc/permissions/moto-telephony.xml system/framework/moto-telephony.jar:system_ext/framework/moto-telephony.jar -system_ext/lib64/libimsmedia_jni.so # RIL - IMS -system_ext/app/ImsRcsService/ImsRcsService.apk @@ -902,8 +900,6 @@ vendor/lib/libscveObjectSegmentation.so vendor/lib/libscveObjectSegmentation_stub.so vendor/lib/libscveObjectTracker.so vendor/lib/libscveObjectTracker_stub.so -vendor/lib/rfsa/adsp/libscveObjectSegmentation_skel.so -vendor/lib/rfsa/adsp/libscveT2T_skel.so vendor/lib/vendor.qti.hardware.scve.objecttracker@1.0.so vendor/lib/vendor.qti.hardware.scve.panorama@1.0.so vendor/lib64/libfastcvdsp_stub.so @@ -1030,7 +1026,6 @@ vendor/firmware/vpu20_4v_unsigned.mbn vendor/bin/hw/android.hardware.drm@1.3-service.widevine vendor/etc/init/android.hardware.drm@1.3-service.widevine.rc -vendor/etc/vintf/manifest/manifest_android.hardware.drm@1.3-service.widevine.xml -vendor/lib64/libtrustedapploader.so vendor/lib64/libwvhidl.so # WiFi From 43b0d1baea6d97dde5da80aa9514e00c6ec7371a Mon Sep 17 00:00:00 2001 From: LuK1337 Date: Wed, 6 Nov 2024 11:56:59 +0100 Subject: [PATCH 29/81] sm6375-common: Use common lib_fixups Change-Id: I862e547f3375184729eb1a909bb7d6f676d45dfe --- extract-files.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/extract-files.py b/extract-files.py index 676e3ee..c5fb453 100755 --- a/extract-files.py +++ b/extract-files.py @@ -10,11 +10,8 @@ from extract_utils.fixups_blob import ( ) from extract_utils.fixups_lib import ( lib_fixup_remove, - lib_fixup_remove_arch_suffix, - lib_fixup_vendorcompat, + lib_fixups, lib_fixups_user_type, - libs_clang_rt_ubsan, - libs_proto_3_9_1, ) from extract_utils.main import ( ExtractUtils, @@ -39,8 +36,7 @@ def lib_fixup_vendor_suffix(lib: str, partition: str, *args, **kwargs): lib_fixups: lib_fixups_user_type = { - libs_clang_rt_ubsan: lib_fixup_remove_arch_suffix, - libs_proto_3_9_1: lib_fixup_vendorcompat, + **lib_fixups, ( 'com.qualcomm.qti.dpm.api@1.0', 'vendor.qti.hardware.fm@1.0', From 94d2bec5813086ff63f32da1aa9b6578b927ce31 Mon Sep 17 00:00:00 2001 From: Nolen Johnson Date: Wed, 27 Nov 2024 00:25:15 -0500 Subject: [PATCH 30/81] sm6375-common: Nuke update-sha1sums.py * We have py extract to do this now. Change-Id: I031938ddb78e8f343864da521dc577cfcb67ee45 --- update-sha1sums.py | 73 ---------------------------------------------- 1 file changed, 73 deletions(-) delete mode 100755 update-sha1sums.py diff --git a/update-sha1sums.py b/update-sha1sums.py deleted file mode 100755 index e2d9ae5..0000000 --- a/update-sha1sums.py +++ /dev/null @@ -1,73 +0,0 @@ -#!/usr/bin/env python -# -# Copyright (C) 2016 The CyanogenMod Project -# Copyright (C) 2017-2020 The LineageOS 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. -# - -import os -import sys -from hashlib import sha1 - -device='sm6375-common' -vendor='motorola' - -with open('proprietary-files.txt', 'r') as f: - lines = f.read().splitlines() -vendorPath = '../../../vendor/' + vendor + '/' + device + '/proprietary' -needSHA1 = False - - -def cleanup(): - for index, line in enumerate(lines): - # Skip empty or commented lines - if len(line) == 0 or line[0] == '#' or '|' not in line: - continue - - # Drop SHA1 hash, if existing - lines[index] = line.split('|')[0] - - -def update(): - for index, line in enumerate(lines): - # Skip empty lines - if len(line) == 0: - continue - - # Check if we need to set SHA1 hash for the next files - if line[0] == '#': - needSHA1 = (' - from' in line) - continue - - if needSHA1: - # Remove existing SHA1 hash - line = line.split('|')[0] - - filePath = line.split(';')[0].split(':')[-1] - if filePath[0] == '-': - filePath = filePath[1:] - - with open(os.path.join(vendorPath, filePath), 'rb') as f: - hash = sha1(f.read()).hexdigest() - - lines[index] = '%s|%s' % (line, hash) - - -if len(sys.argv) == 2 and sys.argv[1] == '-c': - cleanup() -else: - update() - -with open('proprietary-files.txt', 'w') as file: - file.write('\n'.join(lines) + '\n') From 46dc4b19fca553bb1a7290ac807503727243f2a8 Mon Sep 17 00:00:00 2001 From: Ahmed ElArabawy Date: Mon, 9 Dec 2019 13:25:20 -0800 Subject: [PATCH 31/81] sm6375-common: Wifi: Replace config_wifi_dual_band_support As part of the 6GHz band support, there is now more than 2 bands and hence config_wifi_dual_band_support is misleading. This commit replaces this config with config_wifi5ghzSupport which is more reflecting to the device support check. Bug: 145936758 Bug: 139354972 Test: Builds and Wifi runs successfully. Change-Id: I6a1a18965b8020049f9b395ae97b6d84e4f5ae94 --- resource-overlay/common/Frameworks/res/values/config.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resource-overlay/common/Frameworks/res/values/config.xml b/resource-overlay/common/Frameworks/res/values/config.xml index b9450fc..cd197e4 100644 --- a/resource-overlay/common/Frameworks/res/values/config.xml +++ b/resource-overlay/common/Frameworks/res/values/config.xml @@ -119,8 +119,8 @@ 7 - - true + + true true From e006c6600d997a9b2e295978c8b2d5794922c723 Mon Sep 17 00:00:00 2001 From: Anand S Date: Sun, 19 Jan 2025 19:51:14 +0530 Subject: [PATCH 32/81] sm6375-common: Explicitly override persist.vendor.radio.poweron_opt Change-Id: I30f05ce600a2396579396a71023472efab988abf --- extract-files.py | 3 --- vendor.prop | 1 + 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/extract-files.py b/extract-files.py index c5fb453..14cc685 100755 --- a/extract-files.py +++ b/extract-files.py @@ -62,9 +62,6 @@ blob_fixups: blob_fixups_user_type = { .add_needed('libinput_shim.so'), 'vendor/etc/vintf/manifest/vendor.dolby.media.c2@1.0-service.xml': blob_fixup() .regex_replace('IComponentStore/default9', 'IComponentStore/default'), - 'vendor/etc/qcril_database/qcrilNr.db': blob_fixup(), - 'vendor/etc/qcril_database/upgrade/config/*': blob_fixup() - .regex_replace('persist.vendor.radio.poweron_opt/1', 'persist.vendor.radio.poweron_opt/0'), } # fmt: skip module = ExtractUtilsModule( diff --git a/vendor.prop b/vendor.prop index ab078ec..334a74b 100644 --- a/vendor.prop +++ b/vendor.prop @@ -284,6 +284,7 @@ persist.vendor.radio.msgtunnel.start=true persist.vendor.radio.mt_sms_ack=30 persist.vendor.radio.no_wait_for_card=1 persist.vendor.radio.oem_ind_to_both=0 +persist.vendor.radio.poweron_opt=0 persist.vendor.radio.procedure_bytes=SKIP persist.vendor.radio.qcril_uim_vcc_feature=1 persist.vendor.radio.rat_on=combine From 4f1dfdbbe011a8c61e2252d1d5a80b10d5ed07e3 Mon Sep 17 00:00:00 2001 From: LuK1337 Date: Sun, 19 Jan 2025 20:12:38 +0530 Subject: [PATCH 33/81] sm6375-common: Add extra blobs to make checkelf happy Change-Id: I34945e373b62714538813cc0fd12ee8ad4f04e1f --- proprietary-files.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/proprietary-files.txt b/proprietary-files.txt index a97a51b..245390e 100644 --- a/proprietary-files.txt +++ b/proprietary-files.txt @@ -79,6 +79,9 @@ vendor/lib64/soundfx/libshoebox.so # Bluetooth vendor/bin/hw/android.hardware.bluetooth@1.0-service-qti vendor/etc/init/android.hardware.bluetooth@1.0-service-qti.rc +vendor/lib/hw/android.hardware.bluetooth@1.0-impl-qti.so +vendor/lib/libbtnv.so +vendor/lib/libsoc_helper.so vendor/lib64/hw/android.hardware.bluetooth@1.0-impl-qti.so vendor/lib64/libbtnv.so vendor/lib64/libsoc_helper.so @@ -156,6 +159,7 @@ vendor/etc/cne/wqeclient/VZW/VZW_profile5.xml vendor/etc/cne/wqeclient/VZW/VZW_profile6.xml vendor/etc/default-permissions/com.qualcomm.qti.cne.xml vendor/etc/init/cnd.rc +vendor/lib/libxml.so vendor/lib64/libcne.so;DISABLE_CHECKELF vendor/lib64/libcneapiclient.so vendor/lib64/libcneoplookup.so @@ -719,6 +723,9 @@ vendor/etc/qcril_database/upgrade/other/6_version_change_property_table_qcrilnr. vendor/etc/seccomp_policy/qcrilnr@2.0.policy vendor/etc/ssg/ta_config.json vendor/etc/ssg/tz_whitelist.json +vendor/lib/libconfigdb.so +vendor/lib/libmdmdetect.so +vendor/lib/libnetmgr.so vendor/lib64/deviceInfoServiceModuleNr.so vendor/lib64/libconfigdb.so vendor/lib64/liblog_vendor.so @@ -1079,6 +1086,7 @@ system_ext/lib64/libwfduibcsink.so system_ext/lib64/libwfduibcsinkinterface.so system_ext/lib64/libwfduibcsrc.so system_ext/lib64/libwfduibcsrcinterface.so +system_ext/lib64/vendor.qti.hardware.wifidisplaysession@1.0.so -system_ext/priv-app/WfdService/WfdService.apk vendor/bin/wfdhdcphalservice vendor/bin/wfdvndservice @@ -1118,3 +1126,4 @@ vendor/lib/libwfduibcsrcinterface_proprietary.so vendor/lib/libwfdutils_proprietary.so vendor/lib/vendor.qti.hardware.wifidisplaysession@1.0.so vendor/lib/vendor.qti.hardware.wifidisplaysessionl@1.0-halimpl.so +vendor/lib64/vendor.qti.hardware.wifidisplaysession@1.0.so;MODULE_SUFFIX=_vendor From f444e38f54fb22ef631f76b768f835709dda7ea6 Mon Sep 17 00:00:00 2001 From: Marc Bourgoin Date: Mon, 20 Jan 2025 03:26:06 +0530 Subject: [PATCH 34/81] sm6375-common: Fix a few more ELF checks Change-Id: I6cf0937ccba61156d404637c780cc9ded4e301f0 --- extract-files.py | 8 ++++++++ proprietary-files.txt | 24 ++++++++++++------------ 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/extract-files.py b/extract-files.py index 14cc685..e061c98 100755 --- a/extract-files.py +++ b/extract-files.py @@ -39,13 +39,21 @@ lib_fixups: lib_fixups_user_type = { **lib_fixups, ( 'com.qualcomm.qti.dpm.api@1.0', + 'lib-imsvtutils', + 'libmmosal', + 'vendor.qti.diaghal@1.0', 'vendor.qti.hardware.fm@1.0', + 'vendor.qti.hardware.qccsyshal@1.0', + 'vendor.qti.hardware.wifidisplaysession@1.0', 'vendor.qti.imsrtpservice@3.0', ): lib_fixup_vendor_suffix, ( + 'libdiag_system', + 'libdpmframework', 'libqsap_sdk', 'libril', 'libwpa_client', + 'vendor.qti.qspmhal@1.0', ): lib_fixup_remove, } diff --git a/proprietary-files.txt b/proprietary-files.txt index 245390e..b234eb0 100644 --- a/proprietary-files.txt +++ b/proprietary-files.txt @@ -254,8 +254,8 @@ system_ext/lib64/vendor.qti.diaghal@1.0.so vendor/bin/diag-router vendor/etc/init/vendor.qti.diag.rc -vendor/etc/vintf/manifest/vendor.qti.diag.hal.service.xml -vendor/lib/vendor.qti.diaghal@1.0.so -vendor/lib64/vendor.qti.diaghal@1.0.so +vendor/lib/vendor.qti.diaghal@1.0.so;MODULE_SUFFIX=_vendor +vendor/lib64/vendor.qti.diaghal@1.0.so;MODULE_SUFFIX=_vendor # Display - HDR vendor/lib64/libhdr_stub.so @@ -312,12 +312,12 @@ system_ext/framework/dpmapi.jar system_ext/lib/com.qualcomm.qti.dpm.api@1.0.so system_ext/lib/libdpmctmgr.so system_ext/lib/libdpmfdmgr.so -system_ext/lib/libdpmframework.so +system_ext/lib/libdpmframework.so;DISABLE_CHECKELF system_ext/lib/libdpmtcm.so system_ext/lib64/com.qualcomm.qti.dpm.api@1.0.so system_ext/lib64/libdpmctmgr.so system_ext/lib64/libdpmfdmgr.so -system_ext/lib64/libdpmframework.so +system_ext/lib64/libdpmframework.so;DISABLE_CHECKELF system_ext/lib64/libdpmtcm.so system_ext/lib64/vendor.qti.hardware.dpmservice@1.0.so -system_ext/priv-app/dpmserviceapp/dpmserviceapp.apk @@ -439,7 +439,7 @@ vendor/lib/libC2D2.so vendor/lib/libCB.so vendor/lib/libOpenCL.so vendor/lib/libVkLayer_q3dtools.so -vendor/lib/libadreno_app_profiles.so +vendor/lib/libadreno_app_profiles.so;DISABLE_CHECKELF vendor/lib/libadreno_utils.so vendor/lib/libc2d30_bltlib.so vendor/lib/libgpudataproducer.so @@ -531,7 +531,7 @@ vendor/etc/seccomp_policy/codec2.vendor.base-arm.policy vendor/etc/seccomp_policy/codec2.vendor.ext-arm.policy vendor/etc/video_system_specs.json -vendor/etc/vintf/manifest/vendor.dolby.media.c2@1.0-service.xml -vendor/lib/libmmosal.so +vendor/lib/libmmosal.so;MODULE_SUFFIX=_vendor vendor/lib/libqcodec2_base.so vendor/lib/libqcodec2_basecodec.so vendor/lib/libqcodec2_core.so @@ -539,7 +539,7 @@ vendor/lib/libqcodec2_hooks.so vendor/lib/libqcodec2_platform.so vendor/lib/libqcodec2_utils.so vendor/lib/libqcodec2_v4l2codec.so -vendor/lib64/libmmosal.so +vendor/lib64/libmmosal.so;MODULE_SUFFIX=_vendor # Media configs vendor/etc/media_blair/video_system_specs.json @@ -575,8 +575,8 @@ system_ext/lib64/vendor.qti.hardware.qccsyshal@1.0.so system_ext/lib64/vendor.qti.hardware.qccsyshal@1.1.so system_ext/lib64/vendor.qti.hardware.qccsyshal@1.2-halimpl.so system_ext/lib64/vendor.qti.hardware.qccsyshal@1.2.so -vendor/lib/vendor.qti.hardware.qccsyshal@1.0.so -vendor/lib64/vendor.qti.hardware.qccsyshal@1.0.so +vendor/lib/vendor.qti.hardware.qccsyshal@1.0.so;MODULE_SUFFIX=_vendor +vendor/lib64/vendor.qti.hardware.qccsyshal@1.0.so;MODULE_SUFFIX=_vendor # QMI system/etc/permissions/privapp-permissions-qti.xml @@ -810,8 +810,8 @@ system_ext/framework/vendor.qti.ims.rcsuce-V1.2-java.jar system_ext/lib64/lib-imsvideocodec.so system_ext/lib64/lib-imsvt.so system_ext/lib64/lib-imsvtextutils.so -system_ext/lib64/lib-imsvtutils.so -system_ext/lib64/libdiag_system.so +system_ext/lib64/lib-imsvtutils.so;DISABLE_CHECKELF +system_ext/lib64/libdiag_system.so;DISABLE_CHECKELF system_ext/lib64/libimscamera_jni.so system_ext/lib64/libimsmedia_jni.so system_ext/lib64/vendor.qti.imsrtpservice@3.0.so @@ -1124,6 +1124,6 @@ vendor/lib/libwfduibcsinkinterface_proprietary.so vendor/lib/libwfduibcsrc_proprietary.so vendor/lib/libwfduibcsrcinterface_proprietary.so vendor/lib/libwfdutils_proprietary.so -vendor/lib/vendor.qti.hardware.wifidisplaysession@1.0.so +vendor/lib/vendor.qti.hardware.wifidisplaysession@1.0.so;MODULE_SUFFIX=_vendor vendor/lib/vendor.qti.hardware.wifidisplaysessionl@1.0-halimpl.so vendor/lib64/vendor.qti.hardware.wifidisplaysession@1.0.so;MODULE_SUFFIX=_vendor From d17fd6452b20063c7d741c907d2828aa490eb38b Mon Sep 17 00:00:00 2001 From: Michael Bestas Date: Mon, 20 Jan 2025 03:31:15 +0530 Subject: [PATCH 35/81] sm6375-common: Disable ELF checks on device specific libs Change-Id: Iff53502e94cee5a065b75300992a632aca84e0c3 --- extract-files.py | 1 + proprietary-files.txt | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/extract-files.py b/extract-files.py index e061c98..600a6d7 100755 --- a/extract-files.py +++ b/extract-files.py @@ -52,6 +52,7 @@ lib_fixups: lib_fixups_user_type = { 'libdpmframework', 'libqsap_sdk', 'libril', + 'libthermalclient', 'libwpa_client', 'vendor.qti.qspmhal@1.0', ): lib_fixup_remove, diff --git a/proprietary-files.txt b/proprietary-files.txt index b234eb0..e735368 100644 --- a/proprietary-files.txt +++ b/proprietary-files.txt @@ -4,6 +4,7 @@ # libcne, libwqe, lowi-server, mutualex depend on libwpa_client, which is a gnu makefile target # libmdmcutback depends on libqsap_sdk, which is a gnu makefile target # libmotext_inf, libril-qcril-hook-oem depend on libril, which is a gnu makefile target +# thermal-engine depends on libthermalclient, which is device specific # ADSP vendor/bin/adsprpcd @@ -928,7 +929,7 @@ vendor/lib64/hw/vendor.qti.hardware.soter@1.0-impl.so vendor/lib64/vendor.qti.hardware.soter@1.0.so # Thermal engine -vendor/bin/thermal-engine +vendor/bin/thermal-engine;DISABLE_CHECKELF vendor/etc/init/init_thermal-engine.rc vendor/lib/libthermalclient.so vendor/lib64/libthermalclient.so From 493a34357789d4d038f687a1b537db5df85e065a Mon Sep 17 00:00:00 2001 From: Marc Bourgoin Date: Mon, 20 Jan 2025 03:36:27 +0530 Subject: [PATCH 36/81] sm6375-common: Nuke some unused 32bit blobs Change-Id: I55e74a8d4b9c753849dc6faab24e84d8190e0823 --- proprietary-files.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/proprietary-files.txt b/proprietary-files.txt index e735368..db0ccc1 100644 --- a/proprietary-files.txt +++ b/proprietary-files.txt @@ -197,8 +197,6 @@ vendor/lib64/hw/vendor.qti.hardware.capabilityconfigstore@1.0-impl.so # CVP vendor/lib/libcvp_common.so -vendor/lib/libcvpcpuRev_skel.so -vendor/lib/vendor.qti.hardware.cvp@1.0.so vendor/lib64/libcvp_common.so vendor/lib64/libcvpcpuRev_skel.so vendor/lib64/vendor.qti.hardware.cvp@1.0.so From 4f6162e8edd0aac7863918dafca1b97a7f366422 Mon Sep 17 00:00:00 2001 From: Michael Bestas Date: Sun, 25 Aug 2024 21:46:46 +0300 Subject: [PATCH 37/81] sm6375-common: Patch libwfdservice to resolve duplicate dependencies Fixes: error: module "libwfdservice" variant "android_arm_armv8-a_cortex-a76_static": depends on multiple versions of the same aidl_interface: android.media.audio.common.types-V2-cpp-source, android.media.audio.common.types-V3-cpp-source Change-Id: I8086a80fcc238d6b03d16640ee2c4e134129bbab --- extract-files.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/extract-files.py b/extract-files.py index 600a6d7..aab93cf 100755 --- a/extract-files.py +++ b/extract-files.py @@ -69,6 +69,8 @@ blob_fixups: blob_fixups_user_type = { .add_needed('libgui_shim.so'), 'system_ext/lib64/libwfdnative.so': blob_fixup() .add_needed('libinput_shim.so'), + ('system_ext/lib/libwfdservice.so', 'system_ext/lib64/libwfdservice.so'): blob_fixup() + .replace_needed('android.media.audio.common.types-V2-cpp.so', 'android.media.audio.common.types-V3-cpp.so'), 'vendor/etc/vintf/manifest/vendor.dolby.media.c2@1.0-service.xml': blob_fixup() .regex_replace('IComponentStore/default9', 'IComponentStore/default'), } # fmt: skip From ddb23ebb41c03b48dd1796b27b89aef48b0a2e30 Mon Sep 17 00:00:00 2001 From: Nick Reuter Date: Sat, 7 Dec 2024 15:59:17 -0600 Subject: [PATCH 38/81] sm6375-common: Bump libwfdservice to android.media.audio.common.types-V4 Change-Id: I81060d8c73430a9598c676e18dc04e31a2f31c0c --- extract-files.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extract-files.py b/extract-files.py index aab93cf..483055a 100755 --- a/extract-files.py +++ b/extract-files.py @@ -70,7 +70,7 @@ blob_fixups: blob_fixups_user_type = { 'system_ext/lib64/libwfdnative.so': blob_fixup() .add_needed('libinput_shim.so'), ('system_ext/lib/libwfdservice.so', 'system_ext/lib64/libwfdservice.so'): blob_fixup() - .replace_needed('android.media.audio.common.types-V2-cpp.so', 'android.media.audio.common.types-V3-cpp.so'), + .replace_needed('android.media.audio.common.types-V2-cpp.so', 'android.media.audio.common.types-V4-cpp.so'), 'vendor/etc/vintf/manifest/vendor.dolby.media.c2@1.0-service.xml': blob_fixup() .regex_replace('IComponentStore/default9', 'IComponentStore/default'), } # fmt: skip From 967a55f175082b6976f5525fb7c01ed72c960314 Mon Sep 17 00:00:00 2001 From: Nick Reuter Date: Tue, 10 Dec 2024 20:32:13 -0600 Subject: [PATCH 39/81] sm6375-common: Address missing libbinder symbols in libwfdnative _ZN7android6binder12atrace_beginEmPKc _ZN7android6binder10atrace_endEm Change-Id: I942d51721461dbbf9c8d0f2f32128529bb7480c3 --- extract-files.py | 1 + 1 file changed, 1 insertion(+) diff --git a/extract-files.py b/extract-files.py index 483055a..7e3c888 100755 --- a/extract-files.py +++ b/extract-files.py @@ -68,6 +68,7 @@ blob_fixups: blob_fixups_user_type = { ('system_ext/lib/libwfdmmsrc_system.so', 'system_ext/lib64/libwfdmmsrc_system.so'): blob_fixup() .add_needed('libgui_shim.so'), 'system_ext/lib64/libwfdnative.so': blob_fixup() + .add_needed('libbinder_shim.so') .add_needed('libinput_shim.so'), ('system_ext/lib/libwfdservice.so', 'system_ext/lib64/libwfdservice.so'): blob_fixup() .replace_needed('android.media.audio.common.types-V2-cpp.so', 'android.media.audio.common.types-V4-cpp.so'), From 2efc5625de754f6b7147108278d8bb0d1ec16eb8 Mon Sep 17 00:00:00 2001 From: Edwin Moquete Date: Thu, 31 Oct 2024 16:40:42 +0000 Subject: [PATCH 40/81] sm6375-common: Enable ELF checks for libril-qcril-hook-oem.so * And moto deps. Change-Id: I5079c44b4ea3cd5f94ade580272704e4f37c2385 --- extract-files.py | 3 --- proprietary-files.txt | 4 ++-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/extract-files.py b/extract-files.py index 7e3c888..c8de9ee 100755 --- a/extract-files.py +++ b/extract-files.py @@ -30,11 +30,9 @@ namespace_imports = [ 'vendor/qcom/opensource/display', ] - def lib_fixup_vendor_suffix(lib: str, partition: str, *args, **kwargs): return f'{lib}_{partition}' if partition == 'vendor' else None - lib_fixups: lib_fixups_user_type = { **lib_fixups, ( @@ -51,7 +49,6 @@ lib_fixups: lib_fixups_user_type = { 'libdiag_system', 'libdpmframework', 'libqsap_sdk', - 'libril', 'libthermalclient', 'libwpa_client', 'vendor.qti.qspmhal@1.0', diff --git a/proprietary-files.txt b/proprietary-files.txt index db0ccc1..cdde9e6 100644 --- a/proprietary-files.txt +++ b/proprietary-files.txt @@ -732,7 +732,7 @@ vendor/lib64/liblqe.so vendor/lib64/libmdmcutback.so;DISABLE_CHECKELF vendor/lib64/libmdmdetect.so vendor/lib64/libminkdescriptor.so -vendor/lib64/libmotext_inf.so;DISABLE_CHECKELF +vendor/lib64/libmotext_inf.so vendor/lib64/libnetmgr.so vendor/lib64/libnetmgr_common.so vendor/lib64/libnetmgr_nr_fusion.so @@ -754,7 +754,7 @@ vendor/lib64/libqsocket.so vendor/lib64/libril-db.so vendor/lib64/libril-qc-ltedirectdisc.so vendor/lib64/libril-qc-radioconfig.so -vendor/lib64/libril-qcril-hook-oem.so;DISABLE_CHECKELF +vendor/lib64/libril-qcril-hook-oem.so vendor/lib64/librilqmimiscservices.so vendor/lib64/librilqmiservices.so vendor/lib64/libsystem_health_mon.so From 6676ba9e2004d1fa7ef141a5b59a4a7a12564e48 Mon Sep 17 00:00:00 2001 From: Anand S Date: Mon, 20 Jan 2025 13:48:19 +0530 Subject: [PATCH 41/81] sm6375-common: Drop duplicate rootdir scripts * Already being included in vendor. Change-Id: Ic9f9ebad2ed83685722554d8334da3902007c43b --- rootdir/bin/init.qcom.sensors.sh | 33 -------------------------------- 1 file changed, 33 deletions(-) delete mode 100644 rootdir/bin/init.qcom.sensors.sh diff --git a/rootdir/bin/init.qcom.sensors.sh b/rootdir/bin/init.qcom.sensors.sh deleted file mode 100644 index dcc0556..0000000 --- a/rootdir/bin/init.qcom.sensors.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/vendor/bin/sh -# Copyright (c) 2020 The Linux Foundation. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# * Neither the name of The Linux Foundation nor -# the names of its contributors may be used to endorse or promote -# products derived from this software without specific prior written -# permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# - -# -# Function to start sensors for SSC enabled platforms -# -cp /vendor/etc/sensors/scripts/* /data/vendor/sensors/scripts/ -chmod a+rw /data/vendor/sensors/scripts/* From 6b98e8ab7cef901acac95762d0bc2733949e756c Mon Sep 17 00:00:00 2001 From: Anand S Date: Mon, 20 Jan 2025 22:10:23 +0530 Subject: [PATCH 42/81] !fixup: sm6375-common: Fix a few more ELF checks Change-Id: I68e8f23bda9794408f5653e66d4f37f45f2c0f22 --- extract-files.py | 2 -- proprietary-files.txt | 21 ++++++++++----------- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/extract-files.py b/extract-files.py index c8de9ee..788ad92 100755 --- a/extract-files.py +++ b/extract-files.py @@ -37,7 +37,6 @@ lib_fixups: lib_fixups_user_type = { **lib_fixups, ( 'com.qualcomm.qti.dpm.api@1.0', - 'lib-imsvtutils', 'libmmosal', 'vendor.qti.diaghal@1.0', 'vendor.qti.hardware.fm@1.0', @@ -47,7 +46,6 @@ lib_fixups: lib_fixups_user_type = { ): lib_fixup_vendor_suffix, ( 'libdiag_system', - 'libdpmframework', 'libqsap_sdk', 'libthermalclient', 'libwpa_client', diff --git a/proprietary-files.txt b/proprietary-files.txt index cdde9e6..0efea24 100644 --- a/proprietary-files.txt +++ b/proprietary-files.txt @@ -301,7 +301,7 @@ vendor/lib64/vendor.display.postproc@1.0.so # DPM system/framework/tcmclient.jar -system_ext/bin/dpmd +system_ext/bin/dpmd;DISABLE_CHECKELF system_ext/etc/dpm/dpm.conf system_ext/etc/init/dpmd.rc system_ext/etc/permissions/com.qti.dpmframework.xml @@ -309,15 +309,15 @@ system_ext/etc/permissions/dpmapi.xml system_ext/framework/com.qti.dpmframework.jar system_ext/framework/dpmapi.jar system_ext/lib/com.qualcomm.qti.dpm.api@1.0.so -system_ext/lib/libdpmctmgr.so -system_ext/lib/libdpmfdmgr.so +system_ext/lib/libdpmctmgr.so;DISABLE_CHECKELF +system_ext/lib/libdpmfdmgr.so;DISABLE_CHECKELF system_ext/lib/libdpmframework.so;DISABLE_CHECKELF -system_ext/lib/libdpmtcm.so +system_ext/lib/libdpmtcm.so;DISABLE_CHECKELF system_ext/lib64/com.qualcomm.qti.dpm.api@1.0.so -system_ext/lib64/libdpmctmgr.so -system_ext/lib64/libdpmfdmgr.so +system_ext/lib64/libdpmctmgr.so;DISABLE_CHECKELF +system_ext/lib64/libdpmfdmgr.so;DISABLE_CHECKELF system_ext/lib64/libdpmframework.so;DISABLE_CHECKELF -system_ext/lib64/libdpmtcm.so +system_ext/lib64/libdpmtcm.so;DISABLE_CHECKELF system_ext/lib64/vendor.qti.hardware.dpmservice@1.0.so -system_ext/priv-app/dpmserviceapp/dpmserviceapp.apk vendor/bin/dpmQmiMgr @@ -806,11 +806,10 @@ system_ext/framework/vendor.qti.ims.rcssip-V1.2-java.jar system_ext/framework/vendor.qti.ims.rcsuce-V1.0-java.jar system_ext/framework/vendor.qti.ims.rcsuce-V1.1-java.jar system_ext/framework/vendor.qti.ims.rcsuce-V1.2-java.jar -system_ext/lib64/lib-imsvideocodec.so -system_ext/lib64/lib-imsvt.so -system_ext/lib64/lib-imsvtextutils.so +system_ext/lib64/lib-imsvideocodec.so;DISABLE_CHECKELF +system_ext/lib64/lib-imsvt.so;DISABLE_CHECKELF +system_ext/lib64/lib-imsvtextutils.so;DISABLE_CHECKELF system_ext/lib64/lib-imsvtutils.so;DISABLE_CHECKELF -system_ext/lib64/libdiag_system.so;DISABLE_CHECKELF system_ext/lib64/libimscamera_jni.so system_ext/lib64/libimsmedia_jni.so system_ext/lib64/vendor.qti.imsrtpservice@3.0.so From eb87fd229e64f004c3bd309ac584c498bdcb9eba Mon Sep 17 00:00:00 2001 From: Aaron Kling Date: Tue, 12 Sep 2023 16:08:51 -0500 Subject: [PATCH 43/81] sm6375-common: Re-enable broken dup rules check All failures of this have been resolved Change-Id: I56a923ac90b98e63c093c8cb65cb1059dde57c49 --- BoardConfigCommon.mk | 1 - 1 file changed, 1 deletion(-) diff --git a/BoardConfigCommon.mk b/BoardConfigCommon.mk index 8e1b027..0bfb373 100644 --- a/BoardConfigCommon.mk +++ b/BoardConfigCommon.mk @@ -37,7 +37,6 @@ TARGET_2ND_CPU_VARIANT_RUNTIME := kryo385 TARGET_NO_BOOTLOADER := true # BUILD_BROKEN_* -BUILD_BROKEN_DUP_RULES := true BUILD_BROKEN_INCORRECT_PARTITION_IMAGES := true # Kernel From 52912b992559c98d049717667f6714cba9cc6f43 Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Sun, 23 Jun 2024 12:29:15 +0100 Subject: [PATCH 44/81] sm6375-common: Move to new RFS install_symlink targets Change-Id: I9560fd0da00958d9349a0881b5a5f64a2c02e495 --- Android.mk | 65 +----------------------------------------------------- common.mk | 3 +++ 2 files changed, 4 insertions(+), 64 deletions(-) diff --git a/Android.mk b/Android.mk index e612a75..077ecd3 100644 --- a/Android.mk +++ b/Android.mk @@ -36,68 +36,6 @@ $(FSG_MOUNT_POINT): $(LOCAL_INSTALLED_MODULE) ALL_DEFAULT_INSTALLED_MODULES += $(FIRMWARE_MOUNT_POINT) $(BT_FIRMWARE_MOUNT_POINT) $(DSP_MOUNT_POINT) $(FSG_MOUNT_POINT) -RFS_MSM_ADSP_SYMLINKS := $(TARGET_OUT_VENDOR)/rfs/msm/adsp/ -$(RFS_MSM_ADSP_SYMLINKS): $(LOCAL_INSTALLED_MODULE) - @echo "Creating RFS MSM ADSP folder structure: $@" - @rm -rf $@/* - @mkdir -p $(dir $@)/readonly/vendor - $(hide) ln -sf /data/vendor/tombstones/rfs/lpass $@/ramdumps - $(hide) ln -sf /mnt/vendor/persist/rfs/msm/adsp $@/readwrite - $(hide) ln -sf /mnt/vendor/persist/rfs/shared $@/shared - $(hide) ln -sf /mnt/vendor/persist/hlos_rfs/shared $@/hlos - $(hide) ln -sf /vendor/firmware_mnt $@/readonly/firmware - $(hide) ln -sf /vendor/firmware $@/readonly/vendor/firmware - -RFS_MSM_CDSP_SYMLINKS := $(TARGET_OUT_VENDOR)/rfs/msm/cdsp/ -$(RFS_MSM_CDSP_SYMLINKS): $(LOCAL_INSTALLED_MODULE) - @echo "Creating RFS MSM CDSP folder structure: $@" - @rm -rf $@/* - @mkdir -p $(dir $@)/readonly/vendor - $(hide) ln -sf /data/vendor/tombstones/rfs/cdsp $@/ramdumps - $(hide) ln -sf /mnt/vendor/persist/rfs/msm/cdsp $@/readwrite - $(hide) ln -sf /mnt/vendor/persist/rfs/shared $@/shared - $(hide) ln -sf /mnt/vendor/persist/hlos_rfs/shared $@/hlos - $(hide) ln -sf /vendor/firmware_mnt $@/readonly/firmware - $(hide) ln -sf /vendor/firmware $@/readonly/vendor/firmware - -RFS_MSM_MPSS_SYMLINKS := $(TARGET_OUT_VENDOR)/rfs/msm/mpss/ -$(RFS_MSM_MPSS_SYMLINKS): $(LOCAL_INSTALLED_MODULE) - @echo "Creating RFS MSM MPSS folder structure: $@" - @rm -rf $@/* - @mkdir -p $(dir $@)/readonly/fsg - @mkdir -p $(dir $@)/readonly/vendor - $(hide) ln -sf /data/vendor/tombstones/rfs/modem $@/ramdumps - $(hide) ln -sf /mnt/vendor/persist/rfs/msm/mpss $@/readwrite - $(hide) ln -sf /mnt/vendor/persist/rfs/shared $@/shared - $(hide) ln -sf /mnt/vendor/persist/hlos_rfs/shared $@/hlos - $(hide) ln -sf /vendor/firmware_mnt $@/readonly/firmware - $(hide) ln -sf /vendor/firmware $@/readonly/vendor/firmware - $(hide) ln -sf /vendor/fsg $@/readonly/vendor/fsg - -RFS_MSM_SLPI_SYMLINKS := $(TARGET_OUT_VENDOR)/rfs/msm/slpi/ -$(RFS_MSM_SLPI_SYMLINKS): $(LOCAL_INSTALLED_MODULE) - @echo "Creating RFS MSM SLPI folder structure: $@" - @rm -rf $@/* - @mkdir -p $(dir $@)/readonly/vendor - $(hide) ln -sf /data/vendor/tombstones/rfs/slpi $@/ramdumps - $(hide) ln -sf /mnt/vendor/persist/rfs/msm/slpi $@/readwrite - $(hide) ln -sf /mnt/vendor/persist/rfs/shared $@/shared - $(hide) ln -sf /mnt/vendor/persist/hlos_rfs/shared $@/hlos - $(hide) ln -sf /vendor/firmware_mnt $@/readonly/firmware - $(hide) ln -sf /vendor/firmware $@/readonly/vendor/firmware - -RFS_MSM_WPSS_SYMLINKS := $(TARGET_OUT_VENDOR)/rfs/msm/wpss/ -$(RFS_MSM_WPSS_SYMLINKS): $(LOCAL_INSTALLED_MODULE) - @echo "Creating RFS MSM WPSS folder structure: $@" - @rm -rf $@/* - @mkdir -p $(dir $@)/readonly/vendor - $(hide) ln -sf /data/vendor/tombstones/rfs/wpss $@/ramdumps - $(hide) ln -sf /mnt/vendor/persist/rfs/msm/wpss $@/readwrite - $(hide) ln -sf /mnt/vendor/persist/rfs/shared $@/shared - $(hide) ln -sf /mnt/vendor/persist/hlos_rfs/shared $@/hlos - $(hide) ln -sf /vendor/firmware_mnt $@/readonly/firmware - $(hide) ln -sf /vendor/firmware $@/readonly/vendor/firmware - WIFI_FIRMWARE_SYMLINKS := $(TARGET_OUT_VENDOR)/firmware/wlan/qca_cld $(WIFI_FIRMWARE_SYMLINKS): $(LOCAL_INSTALLED_MODULE) @echo "Creating wifi firmware symlinks: $@" @@ -105,8 +43,7 @@ $(WIFI_FIRMWARE_SYMLINKS): $(LOCAL_INSTALLED_MODULE) $(hide) ln -sf /mnt/vendor/persist/wlan_mac.bin $@/wlan_mac.bin $(hide) ln -sf /vendor/etc/wifi/WCNSS_qcom_cfg.ini $@/WCNSS_qcom_cfg.ini -ALL_DEFAULT_INSTALLED_MODULES += $(RFS_MSM_ADSP_SYMLINKS) $(RFS_MSM_CDSP_SYMLINKS) $(RFS_MSM_MPSS_SYMLINKS) \ - $(RFS_MSM_WPSS_SYMLINKS) $(RFS_MSM_SLPI_SYMLINKS) $(WIFI_FIRMWARE_SYMLINKS) +ALL_DEFAULT_INSTALLED_MODULES += $(WIFI_FIRMWARE_SYMLINKS) IMS_LIBS := libimscamera_jni.so libimsmedia_jni.so IMS_SYMLINKS := $(addprefix $(TARGET_OUT_SYSTEM_EXT_APPS_PRIVILEGED)/ims/lib/arm64/,$(notdir $(IMS_LIBS))) diff --git a/common.mk b/common.mk index 13a26ea..57238c6 100644 --- a/common.mk +++ b/common.mk @@ -23,6 +23,9 @@ $(call inherit-product, $(SRC_TARGET_DIR)/product/emulated_storage.mk) # Installs gsi keys into ramdisk, to boot a GSI with verified boot. $(call inherit-product, $(SRC_TARGET_DIR)/product/developer_gsi_keys.mk) +# Add common definitions for Qualcomm +$(call inherit-product, hardware/qcom-caf/common/common.mk) + # Overlays DEVICE_PACKAGE_OVERLAYS += \ $(LOCAL_PATH)/overlay-lineage From d3d8da216efe2ab793b6ac0384967161a8af9733 Mon Sep 17 00:00:00 2001 From: Michael Bestas Date: Sun, 23 Jun 2024 22:51:54 +0300 Subject: [PATCH 45/81] sm6375-common: Create rfs fsg symlink Change-Id: Id337670d40aeb598e4b2507bd94d4885344c675c --- Android.bp | 19 +++++++++++++++++++ Android.mk | 2 +- common.mk | 10 +++++++++- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/Android.bp b/Android.bp index 5908f71..d688382 100644 --- a/Android.bp +++ b/Android.bp @@ -1,6 +1,25 @@ +// +// Copyright (C) 2022-2024 The LineageOS Project +// SPDX-License-Identifier: Apache-2.0 +// + soong_namespace { imports: [ "hardware/google/interfaces", "hardware/google/pixel" ], } + +install_symlink { + name: "rfs_mdm_mpss_readonly_vendor_fsg_symlink", + vendor: true, + installed_location: "rfs/mdm/mpss/readonly/vendor/fsg", + symlink_target: "/vendor/fsg", +} + +install_symlink { + name: "rfs_msm_mpss_readonly_vendor_fsg_symlink", + vendor: true, + installed_location: "rfs/msm/mpss/readonly/vendor/fsg", + symlink_target: "/vendor/fsg", +} diff --git a/Android.mk b/Android.mk index 077ecd3..0a41925 100644 --- a/Android.mk +++ b/Android.mk @@ -1,5 +1,5 @@ # -# Copyright (C) 2022-2023 The LineageOS Project +# Copyright (C) 2022-2024 The LineageOS Project # # SPDX-License-Identifier: Apache-2.0 # diff --git a/common.mk b/common.mk index 57238c6..7a3b7d0 100644 --- a/common.mk +++ b/common.mk @@ -1,5 +1,5 @@ # -# Copyright (C) 2022 The LineageOS Project +# Copyright (C) 2022-2024 The LineageOS Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -301,6 +301,14 @@ PRODUCT_COPY_FILES += \ PRODUCT_PACKAGES += \ android.hardware.renderscript@1.0-impl +# RFS MDM MPSS symlinks +PRODUCT_PACKAGES += \ + rfs_mdm_mpss_readonly_vendor_fsg_symlink + +# RFS MSM MPSS symlinks +PRODUCT_PACKAGES += \ + rfs_msm_mpss_readonly_vendor_fsg_symlink + # Sensors PRODUCT_PACKAGES += \ android.hardware.sensors@2.0-service.multihal From fbc5d3df98e4491bc7d4794c51275b8475e402ca Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Sun, 23 Jun 2024 15:42:45 +0100 Subject: [PATCH 46/81] sm6375-common: Declare IMS libs as symlinks during extraction Change-Id: Ia1b8097d28dd4888232fe383b830515b1b9bafaa --- Android.mk | 10 ---------- proprietary-files.txt | 4 ++-- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/Android.mk b/Android.mk index 0a41925..5bc423e 100644 --- a/Android.mk +++ b/Android.mk @@ -45,16 +45,6 @@ $(WIFI_FIRMWARE_SYMLINKS): $(LOCAL_INSTALLED_MODULE) ALL_DEFAULT_INSTALLED_MODULES += $(WIFI_FIRMWARE_SYMLINKS) -IMS_LIBS := libimscamera_jni.so libimsmedia_jni.so -IMS_SYMLINKS := $(addprefix $(TARGET_OUT_SYSTEM_EXT_APPS_PRIVILEGED)/ims/lib/arm64/,$(notdir $(IMS_LIBS))) -$(IMS_SYMLINKS): $(LOCAL_INSTALLED_MODULE) - @echo "IMS lib link: $@" - @mkdir -p $(dir $@) - @rm -rf $@ - $(hide) ln -sf /system_ext/lib64/$(notdir $@) $@ - -ALL_DEFAULT_INSTALLED_MODULES += $(IMS_SYMLINKS) - CNE_APP_SYMLINKS := $(TARGET_OUT_VENDOR)/app/CneApp/lib/arm64 $(CNE_APP_SYMLINKS): $(LOCAL_INSTALLED_MODULE) @echo "Creating CneApp symlinks: $@" diff --git a/proprietary-files.txt b/proprietary-files.txt index 0efea24..0ec5f16 100644 --- a/proprietary-files.txt +++ b/proprietary-files.txt @@ -810,8 +810,8 @@ system_ext/lib64/lib-imsvideocodec.so;DISABLE_CHECKELF system_ext/lib64/lib-imsvt.so;DISABLE_CHECKELF system_ext/lib64/lib-imsvtextutils.so;DISABLE_CHECKELF system_ext/lib64/lib-imsvtutils.so;DISABLE_CHECKELF -system_ext/lib64/libimscamera_jni.so -system_ext/lib64/libimsmedia_jni.so +system_ext/lib64/libimscamera_jni.so;SYMLINK=system_ext/priv-app/ims/lib/arm64/libimscamera_jni.so +system_ext/lib64/libimsmedia_jni.so;SYMLINK=system_ext/priv-app/ims/lib/arm64/libimsmedia_jni.so system_ext/lib64/vendor.qti.imsrtpservice@3.0.so system_ext/lib64/vendor.qti.imsrtpservice@3.1.so system_ext/lib64/vendor.qti.ImsRtpService-V1-ndk.so From 2437053b0cbe59722a31125f62e1986ba08b479f Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Thu, 28 Mar 2024 13:11:44 +0000 Subject: [PATCH 47/81] sm6375-common: Declare EGL libs as symlinks during extraction Change-Id: I4b2f3e79b5e518889d9771bf8990e27babca8b61 --- proprietary-files.txt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/proprietary-files.txt b/proprietary-files.txt index 0ec5f16..16d844e 100644 --- a/proprietary-files.txt +++ b/proprietary-files.txt @@ -429,10 +429,10 @@ vendor/lib64/vendor.qti.hardware.cacert@1.0.so # Graphics - Adreno vendor/lib/egl/eglSubDriverAndroid.so -vendor/lib/egl/libEGL_adreno.so +vendor/lib/egl/libEGL_adreno.so;SYMLINK=vendor/lib/libEGL_adreno.so vendor/lib/egl/libGLESv1_CM_adreno.so -vendor/lib/egl/libGLESv2_adreno.so -vendor/lib/egl/libq3dtools_adreno.so +vendor/lib/egl/libGLESv2_adreno.so;SYMLINK=vendor/lib/libGLESv2_adreno.so +vendor/lib/egl/libq3dtools_adreno.so;SYMLINK=vendor/lib/libq3dtools_adreno.so vendor/lib/egl/libq3dtools_esx.so vendor/lib/libC2D2.so vendor/lib/libCB.so @@ -448,10 +448,10 @@ vendor/lib/libkernelmanager.so vendor/lib/libllvm-glnext.so vendor/lib/libllvm-qcom.so vendor/lib64/egl/eglSubDriverAndroid.so -vendor/lib64/egl/libEGL_adreno.so +vendor/lib64/egl/libEGL_adreno.so;SYMLINK=vendor/lib64/libEGL_adreno.so vendor/lib64/egl/libGLESv1_CM_adreno.so -vendor/lib64/egl/libGLESv2_adreno.so -vendor/lib64/egl/libq3dtools_adreno.so +vendor/lib64/egl/libGLESv2_adreno.so;SYMLINK=vendor/lib64/libGLESv2_adreno.so +vendor/lib64/egl/libq3dtools_adreno.so;SYMLINK=vendor/lib64/libq3dtools_adreno.so vendor/lib64/egl/libq3dtools_esx.so vendor/lib64/libC2D2.so vendor/lib64/libCB.so From 0d9104907281fb840dc8ffd2c4781885d06d4001 Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Thu, 28 Mar 2024 14:12:52 +0000 Subject: [PATCH 48/81] sm6375-common: Mark CNE symlink target as required package Change-Id: I0bfe65ba61b6aa9916fe6459be2a84d772939a2f --- Android.mk | 8 -------- proprietary-files.txt | 2 +- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/Android.mk b/Android.mk index 5bc423e..6c6c24d 100644 --- a/Android.mk +++ b/Android.mk @@ -45,14 +45,6 @@ $(WIFI_FIRMWARE_SYMLINKS): $(LOCAL_INSTALLED_MODULE) ALL_DEFAULT_INSTALLED_MODULES += $(WIFI_FIRMWARE_SYMLINKS) -CNE_APP_SYMLINKS := $(TARGET_OUT_VENDOR)/app/CneApp/lib/arm64 -$(CNE_APP_SYMLINKS): $(LOCAL_INSTALLED_MODULE) - @echo "Creating CneApp symlinks: $@" - @mkdir -p $@ - $(hide) ln -sf /vendor/lib64/libvndfwk_detect_jni.qti.so $@/libvndfwk_detect_jni.qti.so - -ALL_DEFAULT_INSTALLED_MODULES += $(CNE_APP_SYMLINKS) - EXPAT_SYMLINKS := $(TARGET_OUT_VENDOR_EXECUTABLES)/expat $(EXPAT_SYMLINKS): $(LOCAL_INSTALLED_MODULE) @echo "Expat bin link: $@" diff --git a/proprietary-files.txt b/proprietary-files.txt index 16d844e..d43681f 100644 --- a/proprietary-files.txt +++ b/proprietary-files.txt @@ -127,7 +127,7 @@ vendor/etc/charger_fstab.qti vendor/etc/init/vendor.qti.hardware.charger_monitor@1.0-service.rc # CNE --vendor/app/CneApp/CneApp.apk +-vendor/app/CneApp/CneApp.apk;REQUIRED=CneApp.libvndfwk_detect_jni.qti_symlink vendor/bin/cnd vendor/etc/cne/mwqem.conf vendor/etc/cne/profileMwqem.xml From f72567d2c681a9b62ac94a0fd64c36a648044a3a Mon Sep 17 00:00:00 2001 From: dianlujitao Date: Sat, 29 Jun 2024 23:22:59 +0800 Subject: [PATCH 49/81] sm6375-common: declare expat as symlink during extraction Change-Id: I98f6793151a8c4a7ed216a7775c6899e17bca89e --- Android.mk | 9 --------- proprietary-files.txt | 2 +- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/Android.mk b/Android.mk index 6c6c24d..2ef7cb6 100644 --- a/Android.mk +++ b/Android.mk @@ -45,13 +45,4 @@ $(WIFI_FIRMWARE_SYMLINKS): $(LOCAL_INSTALLED_MODULE) ALL_DEFAULT_INSTALLED_MODULES += $(WIFI_FIRMWARE_SYMLINKS) -EXPAT_SYMLINKS := $(TARGET_OUT_VENDOR_EXECUTABLES)/expat -$(EXPAT_SYMLINKS): $(LOCAL_INSTALLED_MODULE) - @echo "Expat bin link: $@" - @rm -rf $@ - @mkdir -p $(dir $@) - $(hide) ln -sf motobox $@ - -ALL_DEFAULT_INSTALLED_MODULES += $(EXPAT_SYMLINKS) - endif diff --git a/proprietary-files.txt b/proprietary-files.txt index d43681f..f6d4130 100644 --- a/proprietary-files.txt +++ b/proprietary-files.txt @@ -545,7 +545,7 @@ vendor/etc/media_blair/video_system_specs.json vendor/etc/media_holi/video_system_specs.json # OEM -vendor/bin/motobox +vendor/bin/motobox;SYMLINK=vendor/bin/expat # Peripheral manager vendor/bin/pm-proxy From f5c6781fbc31025d78097b890f82dd7b07f55c39 Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Mon, 20 Jan 2025 21:58:29 +0530 Subject: [PATCH 50/81] sm6375-common: Convert WiFi firmware symlink to install_symlink target The last bit that was preventing building hermetic images. Change-Id: I75bb7de4593a7992f6015317cf97e088beeba0cb --- Android.bp | 14 ++++++++++++++ Android.mk | 10 ---------- common.mk | 5 +++++ 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/Android.bp b/Android.bp index d688382..6d951e8 100644 --- a/Android.bp +++ b/Android.bp @@ -23,3 +23,17 @@ install_symlink { installed_location: "rfs/msm/mpss/readonly/vendor/fsg", symlink_target: "/vendor/fsg", } + +install_symlink { + name: "firmware_wlan_mac.bin_symlink", + vendor: true, + installed_location: "firmware/wlan/qca_cld/wlan_mac.bin", + symlink_target: "/mnt/vendor/persist/wlan_mac.bin", +} + +install_symlink { + name: "firmware_WCNSS_qcom_cfg.ini_symlink", + vendor: true, + installed_location: "firmware/wlan/qca_cld/WCNSS_qcom_cfg.ini", + symlink_target: "/vendor/etc/wifi/WCNSS_qcom_cfg.ini", +} diff --git a/Android.mk b/Android.mk index 2ef7cb6..0f0ed03 100644 --- a/Android.mk +++ b/Android.mk @@ -35,14 +35,4 @@ $(FSG_MOUNT_POINT): $(LOCAL_INSTALLED_MODULE) @mkdir -p $(TARGET_OUT_VENDOR)/fsg ALL_DEFAULT_INSTALLED_MODULES += $(FIRMWARE_MOUNT_POINT) $(BT_FIRMWARE_MOUNT_POINT) $(DSP_MOUNT_POINT) $(FSG_MOUNT_POINT) - -WIFI_FIRMWARE_SYMLINKS := $(TARGET_OUT_VENDOR)/firmware/wlan/qca_cld -$(WIFI_FIRMWARE_SYMLINKS): $(LOCAL_INSTALLED_MODULE) - @echo "Creating wifi firmware symlinks: $@" - @mkdir -p $@ - $(hide) ln -sf /mnt/vendor/persist/wlan_mac.bin $@/wlan_mac.bin - $(hide) ln -sf /vendor/etc/wifi/WCNSS_qcom_cfg.ini $@/WCNSS_qcom_cfg.ini - -ALL_DEFAULT_INSTALLED_MODULES += $(WIFI_FIRMWARE_SYMLINKS) - endif diff --git a/common.mk b/common.mk index 7a3b7d0..d514e06 100644 --- a/common.mk +++ b/common.mk @@ -392,6 +392,11 @@ PRODUCT_PACKAGES += \ wpa_supplicant \ wpa_supplicant.conf +# WiFi firmware symlinks +PRODUCT_PACKAGES += \ + firmware_wlan_mac.bin_symlink \ + firmware_WCNSS_qcom_cfg.ini_symlink + PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/wifi/WCNSS_qcom_cfg.ini:$(TARGET_COPY_OUT_VENDOR)/etc/wifi/WCNSS_qcom_cfg.ini \ $(LOCAL_PATH)/wifi/p2p_supplicant_overlay.conf:$(TARGET_COPY_OUT_VENDOR)/etc/wifi/p2p_supplicant_overlay.conf \ From 7ab7fcb72423229edac2a6a71b3b02e355eb0b6a Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Sun, 23 Jun 2024 12:39:38 +0100 Subject: [PATCH 51/81] sm6375-common: Unset BUILD_BROKEN_INCORRECT_PARTITION_IMAGES Qualcomm targets can now build hermetic partitions. Change-Id: I241105e01d85fea983b34846ca675666ac07541b --- BoardConfigCommon.mk | 3 --- 1 file changed, 3 deletions(-) diff --git a/BoardConfigCommon.mk b/BoardConfigCommon.mk index 0bfb373..142f79b 100644 --- a/BoardConfigCommon.mk +++ b/BoardConfigCommon.mk @@ -36,9 +36,6 @@ TARGET_2ND_CPU_VARIANT_RUNTIME := kryo385 # Bootloader TARGET_NO_BOOTLOADER := true -# BUILD_BROKEN_* -BUILD_BROKEN_INCORRECT_PARTITION_IMAGES := true - # Kernel BOARD_BOOT_HEADER_VERSION := 3 BOARD_KERNEL_BASE := 0x00000000 From 9469797e13a923b15202ec69939fc259c4bf062e Mon Sep 17 00:00:00 2001 From: Michael Bestas Date: Mon, 13 Jan 2025 11:03:38 +0200 Subject: [PATCH 52/81] sm6375-common: Migrate mount point creation out of Android.mk Change-Id: Id5986b8a740e45f864eecdd2bd82d9455f128d6b --- Android.mk | 26 -------------------------- common.mk | 7 +++++++ 2 files changed, 7 insertions(+), 26 deletions(-) diff --git a/Android.mk b/Android.mk index 0f0ed03..d3e9025 100644 --- a/Android.mk +++ b/Android.mk @@ -9,30 +9,4 @@ LOCAL_PATH := $(call my-dir) ifneq ($(filter bangkk fogos,$(TARGET_DEVICE)),) subdir_makefiles=$(call first-makefiles-under,$(LOCAL_PATH)) $(foreach mk,$(subdir_makefiles),$(info including $(mk) ...)$(eval include $(mk))) - -include $(CLEAR_VARS) - -# A/B builds require us to create the mount points at compile time. -# Just creating it for all cases since it does not hurt. -FIRMWARE_MOUNT_POINT := $(TARGET_OUT_VENDOR)/firmware_mnt -$(FIRMWARE_MOUNT_POINT): $(LOCAL_INSTALLED_MODULE) - @echo "Creating $(FIRMWARE_MOUNT_POINT)" - @mkdir -p $(TARGET_OUT_VENDOR)/firmware_mnt - -BT_FIRMWARE_MOUNT_POINT := $(TARGET_OUT_VENDOR)/bt_firmware -$(BT_FIRMWARE_MOUNT_POINT): $(LOCAL_INSTALLED_MODULE) - @echo "Creating $(BT_FIRMWARE_MOUNT_POINT)" - @mkdir -p $(TARGET_OUT_VENDOR)/bt_firmware - -DSP_MOUNT_POINT := $(TARGET_OUT_VENDOR)/dsp -$(DSP_MOUNT_POINT): $(LOCAL_INSTALLED_MODULE) - @echo "Creating $(DSP_MOUNT_POINT)" - @mkdir -p $(TARGET_OUT_VENDOR)/dsp - -FSG_MOUNT_POINT := $(TARGET_OUT_VENDOR)/fsg -$(FSG_MOUNT_POINT): $(LOCAL_INSTALLED_MODULE) - @echo "Creating $(FSG_MOUNT_POINT)" - @mkdir -p $(TARGET_OUT_VENDOR)/fsg - -ALL_DEFAULT_INSTALLED_MODULES += $(FIRMWARE_MOUNT_POINT) $(BT_FIRMWARE_MOUNT_POINT) $(DSP_MOUNT_POINT) $(FSG_MOUNT_POINT) endif diff --git a/common.mk b/common.mk index d514e06..62669ab 100644 --- a/common.mk +++ b/common.mk @@ -14,6 +14,13 @@ # limitations under the License. # +# Partitions +PRODUCT_PACKAGES += \ + vendor_bt_firmware_mountpoint \ + vendor_dsp_mountpoint \ + vendor_firmware_mnt_mountpoint \ + vendor_fsg_mountpoint + PRODUCT_BUILD_SUPER_PARTITION := false PRODUCT_USE_DYNAMIC_PARTITIONS := true From da6c6ed6df6adb1005ae8ef3aaf66a7d1775c901 Mon Sep 17 00:00:00 2001 From: Michael Bestas Date: Mon, 2 Dec 2024 02:11:42 +0200 Subject: [PATCH 53/81] sm6375-common: overlay: Convert Android.mk to bp Change-Id: I4f55c426943dd6b64524ad8a7207dd2b865bf972 --- resource-overlay/Android.mk | 1 - resource-overlay/common/Android.mk | 1 - .../common/CarrierConfig/Android.bp | 10 ++++++++++ .../common/CarrierConfig/Android.mk | 17 ----------------- resource-overlay/common/Frameworks/Android.bp | 9 +++++++++ resource-overlay/common/Frameworks/Android.mk | 14 -------------- resource-overlay/common/SystemUI/Android.bp | 9 +++++++++ resource-overlay/common/SystemUI/Android.mk | 14 -------------- resource-overlay/common/Telecomm/Android.bp | 9 +++++++++ resource-overlay/common/Telecomm/Android.mk | 16 ---------------- resource-overlay/common/Telephony/Android.bp | 9 +++++++++ resource-overlay/common/Telephony/Android.mk | 14 -------------- resource-overlay/common/Wifi/Android.bp | 9 +++++++++ resource-overlay/common/Wifi/Android.mk | 14 -------------- resource-overlay/holi/Android.mk | 1 - resource-overlay/holi/Frameworks/Android.bp | 9 +++++++++ resource-overlay/holi/Frameworks/Android.mk | 14 -------------- resource-overlay/holi/Wifi/Android.bp | 9 +++++++++ resource-overlay/holi/Wifi/Android.mk | 14 -------------- 19 files changed, 73 insertions(+), 120 deletions(-) delete mode 100644 resource-overlay/Android.mk delete mode 100644 resource-overlay/common/Android.mk create mode 100644 resource-overlay/common/CarrierConfig/Android.bp delete mode 100644 resource-overlay/common/CarrierConfig/Android.mk create mode 100644 resource-overlay/common/Frameworks/Android.bp delete mode 100644 resource-overlay/common/Frameworks/Android.mk create mode 100644 resource-overlay/common/SystemUI/Android.bp delete mode 100644 resource-overlay/common/SystemUI/Android.mk create mode 100644 resource-overlay/common/Telecomm/Android.bp delete mode 100644 resource-overlay/common/Telecomm/Android.mk create mode 100644 resource-overlay/common/Telephony/Android.bp delete mode 100644 resource-overlay/common/Telephony/Android.mk create mode 100644 resource-overlay/common/Wifi/Android.bp delete mode 100644 resource-overlay/common/Wifi/Android.mk delete mode 100644 resource-overlay/holi/Android.mk create mode 100644 resource-overlay/holi/Frameworks/Android.bp delete mode 100644 resource-overlay/holi/Frameworks/Android.mk create mode 100644 resource-overlay/holi/Wifi/Android.bp delete mode 100644 resource-overlay/holi/Wifi/Android.mk diff --git a/resource-overlay/Android.mk b/resource-overlay/Android.mk deleted file mode 100644 index 5053e7d..0000000 --- a/resource-overlay/Android.mk +++ /dev/null @@ -1 +0,0 @@ -include $(call all-subdir-makefiles) diff --git a/resource-overlay/common/Android.mk b/resource-overlay/common/Android.mk deleted file mode 100644 index 5053e7d..0000000 --- a/resource-overlay/common/Android.mk +++ /dev/null @@ -1 +0,0 @@ -include $(call all-subdir-makefiles) diff --git a/resource-overlay/common/CarrierConfig/Android.bp b/resource-overlay/common/CarrierConfig/Android.bp new file mode 100644 index 0000000..df1a2c2 --- /dev/null +++ b/resource-overlay/common/CarrierConfig/Android.bp @@ -0,0 +1,10 @@ +// +// SPDX-FileCopyrightText: 2024-2025 The LineageOS Project +// SPDX-License-Identifier: Apache-2.0 +// + +runtime_resource_overlay { + name: "CarrierConfigResCommon_Sys", + aaptflags: ["--keep-raw-values"], + product_specific: true, +} diff --git a/resource-overlay/common/CarrierConfig/Android.mk b/resource-overlay/common/CarrierConfig/Android.mk deleted file mode 100644 index 110f2a4..0000000 --- a/resource-overlay/common/CarrierConfig/Android.mk +++ /dev/null @@ -1,17 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_PRODUCT_MODULE := true -LOCAL_CERTIFICATE := platform - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res - -LOCAL_PACKAGE_NAME := CarrierConfigResCommon_Sys - -LOCAL_SDK_VERSION := current - -LOCAL_AAPT_FLAGS := --keep-raw-values - -include $(BUILD_RRO_PACKAGE) diff --git a/resource-overlay/common/Frameworks/Android.bp b/resource-overlay/common/Frameworks/Android.bp new file mode 100644 index 0000000..56c30aa --- /dev/null +++ b/resource-overlay/common/Frameworks/Android.bp @@ -0,0 +1,9 @@ +// +// SPDX-FileCopyrightText: 2024-2025 The LineageOS Project +// SPDX-License-Identifier: Apache-2.0 +// + +runtime_resource_overlay { + name: "FrameworksResCommon_Sys", + product_specific: true, +} diff --git a/resource-overlay/common/Frameworks/Android.mk b/resource-overlay/common/Frameworks/Android.mk deleted file mode 100644 index b9d6646..0000000 --- a/resource-overlay/common/Frameworks/Android.mk +++ /dev/null @@ -1,14 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_PRODUCT_MODULE := true -LOCAL_CERTIFICATE := platform - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res - -LOCAL_PACKAGE_NAME := FrameworksResCommon_Sys -LOCAL_SDK_VERSION := current - -include $(BUILD_RRO_PACKAGE) diff --git a/resource-overlay/common/SystemUI/Android.bp b/resource-overlay/common/SystemUI/Android.bp new file mode 100644 index 0000000..412628c --- /dev/null +++ b/resource-overlay/common/SystemUI/Android.bp @@ -0,0 +1,9 @@ +// +// SPDX-FileCopyrightText: 2024-2025 The LineageOS Project +// SPDX-License-Identifier: Apache-2.0 +// + +runtime_resource_overlay { + name: "SystemUIResCommon_Sys", + product_specific: true, +} diff --git a/resource-overlay/common/SystemUI/Android.mk b/resource-overlay/common/SystemUI/Android.mk deleted file mode 100644 index b40fbe9..0000000 --- a/resource-overlay/common/SystemUI/Android.mk +++ /dev/null @@ -1,14 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_PRODUCT_MODULE := true -LOCAL_CERTIFICATE := platform - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res - -LOCAL_PACKAGE_NAME := SystemUIResCommon_Sys -LOCAL_SDK_VERSION := current - -include $(BUILD_RRO_PACKAGE) diff --git a/resource-overlay/common/Telecomm/Android.bp b/resource-overlay/common/Telecomm/Android.bp new file mode 100644 index 0000000..f5cb999 --- /dev/null +++ b/resource-overlay/common/Telecomm/Android.bp @@ -0,0 +1,9 @@ +// +// SPDX-FileCopyrightText: 2024-2025 The LineageOS Project +// SPDX-License-Identifier: Apache-2.0 +// + +runtime_resource_overlay { + name: "TelecommResCommon_Sys", + product_specific: true, +} diff --git a/resource-overlay/common/Telecomm/Android.mk b/resource-overlay/common/Telecomm/Android.mk deleted file mode 100644 index 9858458..0000000 --- a/resource-overlay/common/Telecomm/Android.mk +++ /dev/null @@ -1,16 +0,0 @@ -ifeq ($(TARGET_FWK_SUPPORTS_FULL_VALUEADDS), true) -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_PRODUCT_MODULE := true -LOCAL_CERTIFICATE := platform - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res - -LOCAL_PACKAGE_NAME := TelecommResCommon_Sys -LOCAL_SDK_VERSION := current - -include $(BUILD_RRO_PACKAGE) -endif diff --git a/resource-overlay/common/Telephony/Android.bp b/resource-overlay/common/Telephony/Android.bp new file mode 100644 index 0000000..9a14af6 --- /dev/null +++ b/resource-overlay/common/Telephony/Android.bp @@ -0,0 +1,9 @@ +// +// SPDX-FileCopyrightText: 2024-2025 The LineageOS Project +// SPDX-License-Identifier: Apache-2.0 +// + +runtime_resource_overlay { + name: "TelephonyResCommon_Sys", + product_specific: true, +} diff --git a/resource-overlay/common/Telephony/Android.mk b/resource-overlay/common/Telephony/Android.mk deleted file mode 100644 index 232f580..0000000 --- a/resource-overlay/common/Telephony/Android.mk +++ /dev/null @@ -1,14 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_PRODUCT_MODULE := true -LOCAL_CERTIFICATE := platform - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res - -LOCAL_PACKAGE_NAME := TelephonyResCommon_Sys -LOCAL_SDK_VERSION := current - -include $(BUILD_RRO_PACKAGE) diff --git a/resource-overlay/common/Wifi/Android.bp b/resource-overlay/common/Wifi/Android.bp new file mode 100644 index 0000000..8132a05 --- /dev/null +++ b/resource-overlay/common/Wifi/Android.bp @@ -0,0 +1,9 @@ +// +// SPDX-FileCopyrightText: 2024-2025 The LineageOS Project +// SPDX-License-Identifier: Apache-2.0 +// + +runtime_resource_overlay { + name: "WifiResCommon_Sys", + product_specific: true, +} diff --git a/resource-overlay/common/Wifi/Android.mk b/resource-overlay/common/Wifi/Android.mk deleted file mode 100644 index 3bff4e6..0000000 --- a/resource-overlay/common/Wifi/Android.mk +++ /dev/null @@ -1,14 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_PRODUCT_MODULE := true -LOCAL_CERTIFICATE := platform - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res - -LOCAL_PACKAGE_NAME := WifiResCommon_Sys -LOCAL_SDK_VERSION := current - -include $(BUILD_RRO_PACKAGE) diff --git a/resource-overlay/holi/Android.mk b/resource-overlay/holi/Android.mk deleted file mode 100644 index 5053e7d..0000000 --- a/resource-overlay/holi/Android.mk +++ /dev/null @@ -1 +0,0 @@ -include $(call all-subdir-makefiles) diff --git a/resource-overlay/holi/Frameworks/Android.bp b/resource-overlay/holi/Frameworks/Android.bp new file mode 100644 index 0000000..0e0b40d --- /dev/null +++ b/resource-overlay/holi/Frameworks/Android.bp @@ -0,0 +1,9 @@ +// +// SPDX-FileCopyrightText: 2024-2025 The LineageOS Project +// SPDX-License-Identifier: Apache-2.0 +// + +runtime_resource_overlay { + name: "FrameworksResTarget", + vendor: true, +} diff --git a/resource-overlay/holi/Frameworks/Android.mk b/resource-overlay/holi/Frameworks/Android.mk deleted file mode 100644 index b5d09b0..0000000 --- a/resource-overlay/holi/Frameworks/Android.mk +++ /dev/null @@ -1,14 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_VENDOR_MODULE := true -LOCAL_CERTIFICATE := platform - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res - -LOCAL_PACKAGE_NAME := FrameworksResTarget -LOCAL_SDK_VERSION := current - -include $(BUILD_RRO_PACKAGE) diff --git a/resource-overlay/holi/Wifi/Android.bp b/resource-overlay/holi/Wifi/Android.bp new file mode 100644 index 0000000..80f6d42 --- /dev/null +++ b/resource-overlay/holi/Wifi/Android.bp @@ -0,0 +1,9 @@ +// +// SPDX-FileCopyrightText: 2024-2025 The LineageOS Project +// SPDX-License-Identifier: Apache-2.0 +// + +runtime_resource_overlay { + name: "WifiResTarget", + vendor: true, +} diff --git a/resource-overlay/holi/Wifi/Android.mk b/resource-overlay/holi/Wifi/Android.mk deleted file mode 100644 index b1fe113..0000000 --- a/resource-overlay/holi/Wifi/Android.mk +++ /dev/null @@ -1,14 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_VENDOR_MODULE := true -LOCAL_CERTIFICATE := platform - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res - -LOCAL_PACKAGE_NAME := WifiResTarget -LOCAL_SDK_VERSION := current - -include $(BUILD_RRO_PACKAGE) From 8e4608fb0a4f5d5fec980ac7cdf97d11c9b30e33 Mon Sep 17 00:00:00 2001 From: Michael Bestas Date: Mon, 2 Dec 2024 00:28:56 +0200 Subject: [PATCH 54/81] sm6375-common: Remove unused Android.mk Change-Id: I98105c127066f7de7012a1895d19c96356105921 --- Android.mk | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 Android.mk diff --git a/Android.mk b/Android.mk deleted file mode 100644 index d3e9025..0000000 --- a/Android.mk +++ /dev/null @@ -1,12 +0,0 @@ -# -# Copyright (C) 2022-2024 The LineageOS Project -# -# SPDX-License-Identifier: Apache-2.0 -# - -LOCAL_PATH := $(call my-dir) - -ifneq ($(filter bangkk fogos,$(TARGET_DEVICE)),) -subdir_makefiles=$(call first-makefiles-under,$(LOCAL_PATH)) -$(foreach mk,$(subdir_makefiles),$(info including $(mk) ...)$(eval include $(mk))) -endif From 52b5ccd4f34fb57cafe84ce81f01287bc3e9cf4b Mon Sep 17 00:00:00 2001 From: Anand S Date: Sat, 1 Feb 2025 00:38:50 +0530 Subject: [PATCH 55/81] sm6375-common: Add patches for qcrilNr.db and sql * Fix it during extraction. * Since we moved to py extract utils, adding patches does the job. Change-Id: I7f56ecaac51abb6525c6022d92eac1c285ab0688 --- extract-files.py | 4 +++ qcril-patches/6.0_config.sql.patch | 30 ++++++++++++++++++++++ qcril-patches/qcrilNr.db.patch | 41 ++++++++++++++++++++++++++++++ vendor.prop | 1 - 4 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 qcril-patches/6.0_config.sql.patch create mode 100644 qcril-patches/qcrilNr.db.patch diff --git a/extract-files.py b/extract-files.py index 788ad92..92cae4e 100755 --- a/extract-files.py +++ b/extract-files.py @@ -69,6 +69,10 @@ blob_fixups: blob_fixups_user_type = { .replace_needed('android.media.audio.common.types-V2-cpp.so', 'android.media.audio.common.types-V4-cpp.so'), 'vendor/etc/vintf/manifest/vendor.dolby.media.c2@1.0-service.xml': blob_fixup() .regex_replace('IComponentStore/default9', 'IComponentStore/default'), + 'vendor/etc/qcril_database/qcrilNr.db': blob_fixup() + .patch_file('qcril-patches/qcrilNr.db.patch'), + 'vendor/etc/qcril_database/upgrade/config/6.0_config.sql': blob_fixup() + .patch_file('qcril-patches/6.0_config.sql.patch'), } # fmt: skip module = ExtractUtilsModule( diff --git a/qcril-patches/6.0_config.sql.patch b/qcril-patches/6.0_config.sql.patch new file mode 100644 index 0000000..9106044 --- /dev/null +++ b/qcril-patches/6.0_config.sql.patch @@ -0,0 +1,30 @@ +From 4ed8978b35fd6b6723f995d534b534c4c4071c49 Mon Sep 17 00:00:00 2001 +From: SagarMakhar +Date: Tue, 1 Oct 2024 23:59:30 +0530 +Subject: [PATCH] sm6375-common: Fix persist.vendor.radio.poweron_opt to 0 + +* If this value 1 breaks SMS receiving + +Change-Id: I6f045b67c4a84b246471fa9249fa883fc78c1ee1 +--- + .../vendor/etc/qcril_database/qcrilNr.db | Bin 106496 -> 106496 bytes + .../upgrade/config/6.0_config.sql | 2 +- + 2 files changed, 1 insertion(+), 1 deletion(-) + +diff --git a/6.0_config.sql b/6.0_config.sql +index d178cf1..3a4c811 100644 +--- a/6.0_config.sql ++++ b/6.0_config.sql +@@ -104,7 +104,7 @@ INSERT OR REPLACE INTO qcril_properties_table(property, def_val) VALUES("persist + INSERT OR REPLACE INTO qcril_properties_table(property, def_val) VALUES("persist.vendor.radio.csg_info_avlbl", "0"); + INSERT OR REPLACE INTO qcril_properties_table(property, def_val) VALUES("persist.vendor.radio.cs_srv_type", "0"); + INSERT OR REPLACE INTO qcril_properties_table(property, def_val) VALUES("persist.vendor.radio.limit_rac_change", "0"); +-INSERT OR REPLACE INTO qcril_properties_table(property, def_val) VALUES("persist.vendor.radio.poweron_opt", "1"); ++INSERT OR REPLACE INTO qcril_properties_table(property, def_val) VALUES("persist.vendor.radio.poweron_opt", "0"); + INSERT OR REPLACE INTO qcril_properties_table(property) VALUES("persist.vendor.radio.sglte_target"); + INSERT OR REPLACE INTO qcril_properties_table(property) VALUES("persist.vendor.radio.nitz_plmn_0"); + INSERT OR REPLACE INTO qcril_properties_table(property) VALUES("persist.vendor.radio.nitz_plmn_1"); + +-- +GitLab + diff --git a/qcril-patches/qcrilNr.db.patch b/qcril-patches/qcrilNr.db.patch new file mode 100644 index 0000000..a1cce6e --- /dev/null +++ b/qcril-patches/qcrilNr.db.patch @@ -0,0 +1,41 @@ +From 4ed8978b35fd6b6723f995d534b534c4c4071c49 Mon Sep 17 00:00:00 2001 +From: SagarMakhar +Date: Tue, 1 Oct 2024 23:59:30 +0530 +Subject: [PATCH] sm6375-common: Fix persist.vendor.radio.poweron_opt to 0 + +* If this value 1 breaks SMS receiving + +Change-Id: I6f045b67c4a84b246471fa9249fa883fc78c1ee1 +--- + .../vendor/etc/qcril_database/qcrilNr.db | Bin 106496 -> 106496 bytes + .../upgrade/config/6.0_config.sql | 2 +- + 2 files changed, 1 insertion(+), 1 deletion(-) + +diff --git a/qcrilNr.db b/qcrilNr.db +index da4cbc60ddfefce5e42ca2b2512db4354c6dec0e..5e2ff97d7bafc4db15b9166b1be284e61508dac8 100644 +GIT binary patch +delta 528 +zcmYL^&r4KM9K}6zXB-H`B-X1h?7x#0{x!>Msl3zVs +zV!?xJF%jXRhapZEk${N=duLY>jt$|z<{EJ-meRaX)x@VFhE*!Jqzxb0giMR$w=@Xv +z`54lm*AltwBd5-HeUKD+H96@n@`n$HnGyyd;ms2Ipn;h(s_i1~)A$rmOX%U1O{CZr +zU@$I{De&|WdYKE*!TSL&8_CS^L7){60^Bw-Jj;_=4b*Em%S^=vvJZLjrAmjZIKzbs +zYP#%C1?RhsjHmc}OD$>Os*$!8UTnwpBUORL(X3xyum+P3z`I +zO@VtWILD(VZWu9-BT8=|$?bXl%IG@wb??u0OxThG#7<0}^X{5%zf;!0FT#zXg4{ +C_@I;k + +delta 540 +zcmYL^%}Z2a6vpS7cRnCRoPxf@sqi{8&XC-LQCpR87e%yj)o2rqB^II4bv~Z4|$OKH<0xC^0=eGvTtfwOBBxNp&U8!&hm=lq`MJ?A|2FR{A5j~MqNl6n^BR}TXm +z^$_Kphm>W}4%_!I6qDNu%s&8O&mywc0ShuLEFxtjRkK}^=NdZWgE|yd{-gC0GEqCG +zbj0GksZed+5sGrBgkfFrU6r`FPbVgFPxzyR9EZy2*1R4xvW7j~{&NlEHtKm|J1h@* +z@T7#`1Vc*{RQMJrl$Y^ + +-- +GitLab + diff --git a/vendor.prop b/vendor.prop index 334a74b..ab078ec 100644 --- a/vendor.prop +++ b/vendor.prop @@ -284,7 +284,6 @@ persist.vendor.radio.msgtunnel.start=true persist.vendor.radio.mt_sms_ack=30 persist.vendor.radio.no_wait_for_card=1 persist.vendor.radio.oem_ind_to_both=0 -persist.vendor.radio.poweron_opt=0 persist.vendor.radio.procedure_bytes=SKIP persist.vendor.radio.qcril_uim_vcc_feature=1 persist.vendor.radio.rat_on=combine From 600d9f7c4fb10055e829a8dee2453813cc2eea05 Mon Sep 17 00:00:00 2001 From: Anand S Date: Mon, 3 Feb 2025 10:18:15 +0530 Subject: [PATCH 56/81] sm6375-common: Add missing lib * F linker : CANNOT LINK EXECUTABLE "/system/system_ext/bin/dpmd": library "libdiag_system.so" not found: needed by main executable. Change-Id: If4aaa2650ba2b98a663e73dc88fe5561de3c16e1 --- proprietary-files.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/proprietary-files.txt b/proprietary-files.txt index f6d4130..706a82a 100644 --- a/proprietary-files.txt +++ b/proprietary-files.txt @@ -810,6 +810,7 @@ system_ext/lib64/lib-imsvideocodec.so;DISABLE_CHECKELF system_ext/lib64/lib-imsvt.so;DISABLE_CHECKELF system_ext/lib64/lib-imsvtextutils.so;DISABLE_CHECKELF system_ext/lib64/lib-imsvtutils.so;DISABLE_CHECKELF +system_ext/lib64/libdiag_system.so;DISABLE_CHECKELF system_ext/lib64/libimscamera_jni.so;SYMLINK=system_ext/priv-app/ims/lib/arm64/libimscamera_jni.so system_ext/lib64/libimsmedia_jni.so;SYMLINK=system_ext/priv-app/ims/lib/arm64/libimsmedia_jni.so system_ext/lib64/vendor.qti.imsrtpservice@3.0.so From 208b65c9ddfc1cde01b1421178226be9a7cbc668 Mon Sep 17 00:00:00 2001 From: daniml3 Date: Wed, 25 Sep 2024 23:41:32 +0530 Subject: [PATCH 57/81] sm6375-common: powerhint: Set 1 second timeout for interaction boosts * Having no timeout makes the boosts to be permanently triggered until some other hint overrides it, for example, making the minimum frequency to be stuck at 1248mhz Signed-off-by: daniml3 Change-Id: I5edb50f937d0ccede5bc3463572010b20d75fe78 --- configs/powerhint.json | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/configs/powerhint.json b/configs/powerhint.json index 6e269db..349492e 100644 --- a/configs/powerhint.json +++ b/configs/powerhint.json @@ -377,115 +377,115 @@ { "PowerHint": "INTERACTION", "Node": "CPUBigClusterMinFreq", - "Duration": 0, + "Duration": 1000, "Value": "1651200" }, { "PowerHint": "INTERACTION", "Node": "CPULittleClusterMinFreq", - "Duration": 0, + "Duration": 1000, "Value": "1113600" }, { "PowerHint": "INTERACTION", "Node": "UclampTAMin", - "Duration": 0, + "Duration": 1000, "Value": "50" }, { "PowerHint": "INTERACTION", "Node": "UclampTALatency", - "Duration": 0, + "Duration": 1000, "Value": "1" }, { "PowerHint": "INTERACTION", "Node": "SchedPreferSpread", - "Duration": 0, + "Duration": 1000, "Value": "2" }, { "PowerHint": "INTERACTION", "Node": "SchedBusyHystNs", - "Duration": 0, + "Duration": 1000, "Value": "99000000" }, { "PowerHint": "INTERACTION", "Node": "SchedBusyHystEnableCPUs", - "Duration": 0, + "Duration": 1000, "Value": "192" }, { "PowerHint": "INTERACTION", "Node": "SchedMinTaskUtilForBoost", - "Duration": 0, + "Duration": 1000, "Value": "0" }, { "PowerHint": "INTERACTION", "Node": "SchedMinTaskUtilForColoc", - "Duration": 0, + "Duration": 1000, "Value": "0" }, { "PowerHint": "INTERACTION", "Node": "CPUBWHystTriggerCount", - "Duration": 0, + "Duration": 1000, "Value": "0" }, { "PowerHint": "INTERACTION", "Node": "CPUBWHystLength", - "Duration": 0, + "Duration": 1000, "Value": "0" }, { "PowerHint": "INTERACTION", "Node": "CPUBWHistMemory", - "Duration": 0, + "Duration": 1000, "Value": "0" }, { "PowerHint": "INTERACTION", "Node": "CPUBWMinFreq", - "Duration": 0, + "Duration": 1000, "Value": "7980" }, { "PowerHint": "INTERACTION", "Node": "CPUDDRLatLittleMinFreq", - "Duration": 0, + "Duration": 1000, "Value": "7980" }, { "PowerHint": "INTERACTION", "Node": "CPUDDRLatBigMinFreq", - "Duration": 0, + "Duration": 1000, "Value": "7980" }, { "PowerHint": "INTERACTION", "Node": "CPUDDRLatfloorLittleMinFreq", - "Duration": 0, + "Duration": 1000, "Value": "7980" }, { "PowerHint": "INTERACTION", "Node": "CPUDDRLatfloorBigMinFreq", - "Duration": 0, + "Duration": 1000, "Value": "7980" }, { "PowerHint": "INTERACTION", "Node": "L3LittleClusterMinFreq", - "Duration": 0, + "Duration": 1000, "Value": "1171200000" }, { "PowerHint": "INTERACTION", "Node": "L3BigClusterMinFreq", - "Duration": 0, + "Duration": 1000, "Value": "1171200000" }, { From e854c59f76a391136a9e7c7dda42d902bcf67f70 Mon Sep 17 00:00:00 2001 From: DennySPB Date: Thu, 26 Sep 2024 09:01:19 +0530 Subject: [PATCH 58/81] sm6375-common:powerhint: Decrease launch boost to 3sec * 5s is just too much long plus battery drainer Change-Id: I7e037c45cd2296a8bbd67d6bd63c212c0ef2a805 --- configs/powerhint.json | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/configs/powerhint.json b/configs/powerhint.json index 349492e..22f9fff 100644 --- a/configs/powerhint.json +++ b/configs/powerhint.json @@ -527,19 +527,19 @@ { "PowerHint": "LAUNCH", "Node": "CPUBigClusterMaxFreq", - "Duration": 5000, + "Duration": 3000, "Value": "9999999" }, { "PowerHint": "LAUNCH", "Node": "CPUBigClusterMinFreq", - "Duration": 5000, + "Duration": 3000, "Value": "9999999" }, { "PowerHint": "LAUNCH", "Node": "CPULittleClusterMinFreq", - "Duration": 5000, + "Duration": 3000, "Value": "9999999" }, { @@ -557,79 +557,79 @@ { "PowerHint": "LAUNCH", "Node": "CPUBWHystTriggerCount", - "Duration": 5000, + "Duration": 3000, "Value": "0" }, { "PowerHint": "LAUNCH", "Node": "CPUBWHystLength", - "Duration": 5000, + "Duration": 3000, "Value": "0" }, { "PowerHint": "LAUNCH", "Node": "CPUBWHistMemory", - "Duration": 5000, + "Duration": 3000, "Value": "0" }, { "PowerHint": "LAUNCH", "Node": "CPUBWMinFreq", - "Duration": 5000, + "Duration": 3000, "Value": "7980" }, { "PowerHint": "LAUNCH", "Node": "CPUDDRLatLittleMinFreq", - "Duration": 5000, + "Duration": 3000, "Value": "7980" }, { "PowerHint": "LAUNCH", "Node": "CPUDDRLatBigMinFreq", - "Duration": 5000, + "Duration": 3000, "Value": "7980" }, { "PowerHint": "LAUNCH", "Node": "CPUDDRLatfloorLittleMinFreq", - "Duration": 5000, + "Duration": 3000, "Value": "7980" }, { "PowerHint": "LAUNCH", "Node": "CPUDDRLatfloorBigMinFreq", - "Duration": 5000, + "Duration": 3000, "Value": "7980" }, { "PowerHint": "LAUNCH", "Node": "GPUForceClkOn", - "Duration": 5000, + "Duration": 3000, "Value": "1" }, { "PowerHint": "LAUNCH", "Node": "GPUForceRailOn", - "Duration": 5000, + "Duration": 3000, "Value": "1" }, { "PowerHint": "LAUNCH", "Node": "GPUIdleTimer", - "Duration": 5000, + "Duration": 3000, "Value": "10000" }, { "PowerHint": "LAUNCH", "Node": "L3LittleClusterMinFreq", - "Duration": 5000, + "Duration": 3000, "Value": "1497600000" }, { "PowerHint": "LAUNCH", "Node": "L3BigClusterMinFreq", - "Duration": 5000, + "Duration": 3000, "Value": "1497600000" }, { From bf06a689e72d364d386eeb8ba400632279e0a866 Mon Sep 17 00:00:00 2001 From: Vivekachooz Date: Tue, 25 Feb 2025 14:40:30 +0530 Subject: [PATCH 59/81] sm6375-common: powerhint: Retune powerhint Change-Id: I9faaa5e69d3c0091a69c8fdc3d80c614e98c7e34 --- configs/powerhint.json | 158 +++++++++-------------------------------- 1 file changed, 33 insertions(+), 125 deletions(-) diff --git a/configs/powerhint.json b/configs/powerhint.json index 22f9fff..8cdd252 100644 --- a/configs/powerhint.json +++ b/configs/powerhint.json @@ -6,10 +6,10 @@ "Values": [ "9999999", "1708800", - "1651200", - "1516800" + "576000", + "300000" ], - "DefaultIndex": 3, + "DefaultIndex": 0, "ResetOnInit": true }, { @@ -17,13 +17,14 @@ "Path": "/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq", "Values": [ "9999999", + "1708800", "1324800", "1113600", "691200", "576000", "300000" ], - "DefaultIndex": 5, + "DefaultIndex": 6, "ResetOnInit": true }, { @@ -53,7 +54,7 @@ "1900800", "1516800" ], - "DefaultIndex": 3, + "DefaultIndex": 0, "ResetOnInit": true }, { @@ -61,10 +62,13 @@ "Path": "/sys/devices/system/cpu/cpu6/cpufreq/scaling_min_freq", "Values": [ "9999999", + "2054400", "1651200", + "1228800", "691200", "0" ], + "DefaultIndex": 5, "ResetOnInit": true }, { @@ -110,72 +114,20 @@ "Path": "/dev/cpuctl/foreground/cpu.uclamp.min", "Values": [ "0", + "50", "100" ], "DefaultIndex": 0, "ResetOnInit": true }, - { - "Name": "SchedPreferSpread", - "Path": "/proc/sys/kernel/sched_prefer_spread", - "Values": [ - "2", - "0" - ], - "ResetOnInit": true - }, - { - "Name": "SchedBusyHystNs", - "Path": "/proc/sys/kernel/sched_busy_hyst_ns", - "Values": [ - "99000000", - "3000000", - "0" - ], - "ResetOnInit": true - }, - { - "Name": "SchedBusyHystEnableCPUs", - "Path": "/proc/sys/kernel/sched_busy_hysteresis_enable_cpus", - "Values": [ - "192", - "15", - "0" - ], - "ResetOnInit": true - }, - { - "Name": "SchedMinTaskUtilForBoost", - "Path": "/proc/sys/kernel/sched_min_task_util_for_boost", - "Values": [ - "0", - "51" - ], - "ResetOnInit": true - }, - { - "Name": "SchedMinTaskUtilForColoc", - "Path": "/proc/sys/kernel/sched_min_task_util_for_colocation", - "Values": [ - "0", - "35" - ], - "ResetOnInit": true - }, { "Name": "GPUMaxFreq", "Path": "/sys/class/kgsl/kgsl-3d0/max_pwrlevel", "Values": [ "0", - "1", - "2" + "1" ], - "Comments": [ - "0 => 840000000", - "1 => 650000000", - "2 => 266000000" - ], - "DefaultIndex": 2, + "DefaultIndex": 0, "ResetOnInit": true }, { @@ -184,14 +136,8 @@ "Values": [ "0", "1", - "2", - "3" - ], - "Comments": [ - "0 => 840000000", - "1 => 650000000", - "2 => 490000000", - "3 => 266000000" + "3", + "5" ], "ResetOnInit": true }, @@ -218,7 +164,7 @@ "Path": "/sys/class/kgsl/kgsl-3d0/idle_timer", "Values": [ "10000", - "58" + "80" ], "ResetOnInit": true }, @@ -263,9 +209,7 @@ "Path": "/sys/class/devfreq/soc:qcom,cpu-cpu-ddr-bw/min_freq", "Values": [ "7980", - "6881", - "5931", - "3879", + "5161", "762" ], "ResetOnInit": true @@ -366,7 +310,7 @@ "PowerHint": "SUSTAINED_PERFORMANCE", "Node": "CPULittleClusterMaxFreq", "Duration": 0, - "Value": "1651200" + "Value": "1708800" }, { "PowerHint": "SUSTAINED_PERFORMANCE", @@ -384,7 +328,7 @@ "PowerHint": "INTERACTION", "Node": "CPULittleClusterMinFreq", "Duration": 1000, - "Value": "1113600" + "Value": "1708800" }, { "PowerHint": "INTERACTION", @@ -395,38 +339,20 @@ { "PowerHint": "INTERACTION", "Node": "UclampTALatency", - "Duration": 1000, + "Duration": 0, "Value": "1" }, { "PowerHint": "INTERACTION", - "Node": "SchedPreferSpread", + "Node": "UclampFgMin", "Duration": 1000, - "Value": "2" + "Value": "50" }, { "PowerHint": "INTERACTION", - "Node": "SchedBusyHystNs", + "Node": "GPUMinFreq", "Duration": 1000, - "Value": "99000000" - }, - { - "PowerHint": "INTERACTION", - "Node": "SchedBusyHystEnableCPUs", - "Duration": 1000, - "Value": "192" - }, - { - "PowerHint": "INTERACTION", - "Node": "SchedMinTaskUtilForBoost", - "Duration": 1000, - "Value": "0" - }, - { - "PowerHint": "INTERACTION", - "Node": "SchedMinTaskUtilForColoc", - "Duration": 1000, - "Value": "0" + "Value": "3" }, { "PowerHint": "INTERACTION", @@ -450,7 +376,7 @@ "PowerHint": "INTERACTION", "Node": "CPUBWMinFreq", "Duration": 1000, - "Value": "7980" + "Value": "5161" }, { "PowerHint": "INTERACTION", @@ -512,18 +438,6 @@ "Duration": 0, "Value": "20000" }, - { - "PowerHint": "INTERACTIVE", - "Node": "SchedBusyHystNs", - "Duration": 0, - "Value": "3000000" - }, - { - "PowerHint": "INTERACTIVE", - "Node": "SchedBusyHystEnableCPUs", - "Duration": 0, - "Value": "15" - }, { "PowerHint": "LAUNCH", "Node": "CPUBigClusterMaxFreq", @@ -546,7 +460,7 @@ "PowerHint": "LAUNCH", "Node": "UclampTAMin", "Duration": 3000, - "Value": "50" + "Value": "100" }, { "PowerHint": "LAUNCH", @@ -687,22 +601,16 @@ "Value": "0" }, { - "PowerHint": "Flipendo", - "Node": "CPULittleClusterMaxFreq", - "Duration": 0, - "Value": "1651200" - }, - { - "PowerHint": "Flipendo", - "Node": "CPUBigClusterMaxFreq", - "Duration": 0, - "Value": "1516800" - }, - { - "PowerHint": "DISPLAY_INACTIVE", + "PowerHint": "EXPENSIVE_RENDERING", "Node": "CPULittleClusterMinFreq", "Duration": 0, - "Value": "300000" + "Value": "1708800" + }, + { + "PowerHint": "EXPENSIVE_RENDERING", + "Node": "CPUBigClusterMinFreq", + "Duration": 0, + "Value": "1651200" } ] } From c0cc3b0db4474aa494e476e377b8b0eb65d97e57 Mon Sep 17 00:00:00 2001 From: Demon000 Date: Fri, 4 Apr 2025 18:26:32 +0530 Subject: [PATCH 60/81] sm6375-common: switch to common QCOM AIDL bootctrl HAL Change-Id: I04ab771d3b1c38b58913607fbff1bb3b55e1fe25 --- bootctrl/1.1/impl/Android.bp | 24 - bootctrl/1.1/impl/BootControl.cpp | 132 -- bootctrl/1.1/impl/BootControl.h | 75 - bootctrl/1.1/libboot_control_qti/Android.bp | 38 - .../libboot_control_qti.cpp | 754 -------- .../libboot_control_qti/libboot_control_qti.h | 50 - bootctrl/Android.bp | 44 - bootctrl/NOTICE | 26 - bootctrl/boot_control.cpp | 703 -------- common.mk | 7 +- gpt-utils/Android.bp | 41 - gpt-utils/gpt-utils.cpp | 1520 ----------------- gpt-utils/gpt-utils.h | 193 --- gpt-utils/recovery-ufs-bsg.cpp | 255 --- gpt-utils/recovery-ufs-bsg.h | 131 -- gpt-utils/sparse_crc32.cpp | 97 -- gpt-utils/sparse_crc32.h | 24 - 17 files changed, 2 insertions(+), 4112 deletions(-) delete mode 100644 bootctrl/1.1/impl/Android.bp delete mode 100644 bootctrl/1.1/impl/BootControl.cpp delete mode 100644 bootctrl/1.1/impl/BootControl.h delete mode 100644 bootctrl/1.1/libboot_control_qti/Android.bp delete mode 100644 bootctrl/1.1/libboot_control_qti/libboot_control_qti.cpp delete mode 100644 bootctrl/1.1/libboot_control_qti/libboot_control_qti.h delete mode 100644 bootctrl/Android.bp delete mode 100644 bootctrl/NOTICE delete mode 100644 bootctrl/boot_control.cpp delete mode 100644 gpt-utils/Android.bp delete mode 100644 gpt-utils/gpt-utils.cpp delete mode 100644 gpt-utils/gpt-utils.h delete mode 100644 gpt-utils/recovery-ufs-bsg.cpp delete mode 100644 gpt-utils/recovery-ufs-bsg.h delete mode 100644 gpt-utils/sparse_crc32.cpp delete mode 100644 gpt-utils/sparse_crc32.h diff --git a/bootctrl/1.1/impl/Android.bp b/bootctrl/1.1/impl/Android.bp deleted file mode 100644 index 3c8e3a7..0000000 --- a/bootctrl/1.1/impl/Android.bp +++ /dev/null @@ -1,24 +0,0 @@ -filegroup { - name: "android.hardware.boot@1.1-impl-qti_src", - srcs: ["BootControl.cpp"], -} - -cc_defaults { - name: "android.hardware.boot@1.1-impl-qti_defaults", - defaults: [ - "hidl_defaults", - "libboot_control_qti_defaults", - ], - relative_install_path: "hw", - vendor: true, - recovery_available: true, - srcs: [":android.hardware.boot@1.1-impl-qti_src"], - shared_libs: [ - "liblog", - "libhidlbase", - "libhardware", - "libutils", - "android.hardware.boot@1.0", - "android.hardware.boot@1.1", - ], -} diff --git a/bootctrl/1.1/impl/BootControl.cpp b/bootctrl/1.1/impl/BootControl.cpp deleted file mode 100644 index 4094d25..0000000 --- a/bootctrl/1.1/impl/BootControl.cpp +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (c) 2020, The Linux Foundation. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of The Linux Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#define LOG_TAG "android.hardware.boot@1.1-impl-qti" - -#include - -#include - -#include "BootControl.h" - -namespace android { -namespace hardware { -namespace boot { -namespace V1_1 { -namespace implementation { - -using ::android::hardware::boot::V1_0::CommandResult; - -bool BootControl::Init() { - return bootcontrol_init(); -} - -Return BootControl::getNumberSlots() { - return get_number_slots(); -} - -Return BootControl::getCurrentSlot() { - return get_current_slot(); -} - -Return BootControl::markBootSuccessful(markBootSuccessful_cb _hidl_cb) { - int ret = mark_boot_successful(); - struct CommandResult cr; - cr.success = (ret == 0); - cr.errMsg = strerror(-ret); - _hidl_cb(cr); - return Void(); -} - -Return BootControl::setActiveBootSlot(uint32_t slot, setActiveBootSlot_cb _hidl_cb) { - int ret = set_active_boot_slot(slot); - struct CommandResult cr; - cr.success = (ret == 0); - cr.errMsg = strerror(-ret); - _hidl_cb(cr); - return Void(); -} - -Return BootControl::setSlotAsUnbootable(uint32_t slot, setSlotAsUnbootable_cb _hidl_cb) { - int ret = set_slot_as_unbootable(slot); - struct CommandResult cr; - cr.success = (ret == 0); - cr.errMsg = strerror(-ret); - _hidl_cb(cr); - return Void(); -} - -Return BootControl::isSlotBootable(uint32_t slot) { - int32_t ret = is_slot_bootable(slot); - if (ret < 0) { - return BoolResult::INVALID_SLOT; - } - return ret ? BoolResult::TRUE : BoolResult::FALSE; -} - -Return BootControl::isSlotMarkedSuccessful(uint32_t slot) { - int32_t ret = is_slot_marked_successful(slot); - if (ret < 0) { - return BoolResult::INVALID_SLOT; - } - return ret ? BoolResult::TRUE : BoolResult::FALSE; -} - -Return BootControl::getSuffix(uint32_t slot, getSuffix_cb _hidl_cb) { - hidl_string ans; - const char* suffix = get_suffix(slot); - if (suffix) { - ans = suffix; - } - _hidl_cb(ans); - return Void(); -} - -Return BootControl::setSnapshotMergeStatus(MergeStatus status) { - return set_snapshot_merge_status(status); -} - -Return BootControl::getSnapshotMergeStatus() { - return get_snapshot_merge_status(); -} - -IBootControl* HIDL_FETCH_IBootControl(const char* /* hal */) { - auto module = std::make_unique(); - if (!module->Init()) { - ALOGE("Could not initialize BootControl module"); - return nullptr; - } - return module.release(); -} - -} // namespace implementation -} // namespace V1_1 -} // namespace boot -} // namespace hardware -} // namespace android diff --git a/bootctrl/1.1/impl/BootControl.h b/bootctrl/1.1/impl/BootControl.h deleted file mode 100644 index d33ec0c..0000000 --- a/bootctrl/1.1/impl/BootControl.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (c) 2020, The Linux Foundation. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of The Linux Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#pragma once - -#include -#include -#include -#include - -namespace android { -namespace hardware { -namespace boot { -namespace V1_1 { -namespace implementation { - -using ::android::hardware::Return; -using ::android::hardware::Void; -using ::android::hardware::boot::V1_0::BoolResult; -using ::android::hardware::boot::V1_1::IBootControl; -using ::android::hardware::boot::V1_1::MergeStatus; - -class BootControl : public IBootControl { - public: - bool Init(); - - // Methods from ::android::hardware::boot::V1_0::IBootControl follow. - Return getNumberSlots() override; - Return getCurrentSlot() override; - Return markBootSuccessful(markBootSuccessful_cb _hidl_cb) override; - Return setActiveBootSlot(uint32_t slot, setActiveBootSlot_cb _hidl_cb) override; - Return setSlotAsUnbootable(uint32_t slot, setSlotAsUnbootable_cb _hidl_cb) override; - Return isSlotBootable(uint32_t slot) override; - Return isSlotMarkedSuccessful(uint32_t slot) override; - Return getSuffix(uint32_t slot, getSuffix_cb _hidl_cb) override; - - // Methods from ::android::hardware::boot::V1_1::IBootControl follow. - Return setSnapshotMergeStatus(MergeStatus status) override; - Return getSnapshotMergeStatus() override; - -}; - -extern "C" IBootControl* HIDL_FETCH_IBootControl(const char* name); - -} // namespace implementation -} // namespace V1_1 -} // namespace boot -} // namespace hardware -} // namespace android diff --git a/bootctrl/1.1/libboot_control_qti/Android.bp b/bootctrl/1.1/libboot_control_qti/Android.bp deleted file mode 100644 index 10cef14..0000000 --- a/bootctrl/1.1/libboot_control_qti/Android.bp +++ /dev/null @@ -1,38 +0,0 @@ -filegroup { - name: "libboot_control_qti_src", - srcs: ["libboot_control_qti.cpp"], -} - -cc_library_headers { - name: "libboot_control_qti_headers", - vendor: true, - recovery_available: true, - export_include_dirs: ["."], -} - -cc_defaults { - name: "libboot_control_qti_defaults", - vendor: true, - recovery_available: true, - shared_libs: [ - "android.hardware.boot@1.1", - "libbase", - "libcutils", - "liblog", - "libz", - ], - static_libs: [ - "libboot_control", - "libbootloader_message_vendor", - "libfstab", - ], - owner: "qti", - cflags: [ - "-Wall", - "-Werror", - ], - srcs: [ - ":libboot_control_qti_src", - ], - header_libs: ["libboot_control_qti_headers"], -} diff --git a/bootctrl/1.1/libboot_control_qti/libboot_control_qti.cpp b/bootctrl/1.1/libboot_control_qti/libboot_control_qti.cpp deleted file mode 100644 index 371be6d..0000000 --- a/bootctrl/1.1/libboot_control_qti/libboot_control_qti.cpp +++ /dev/null @@ -1,754 +0,0 @@ -/* - * Copyright (c) 2016,2020, The Linux Foundation. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of The Linux Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -//#define LOG_NDEBUG 0 -#define LOG_TAG "bootcontrolhal" - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define BOOTDEV_DIR "/dev/block/bootdevice/by-name" -#define BOOT_IMG_PTN_NAME "boot" -#define LUN_NAME_END_LOC 14 -#define BOOT_SLOT_PROP "ro.boot.slot_suffix" -#define BOARD_PLATFORM_PROP "ro.build.product" -#define GVMQ_PLATFORM "msmnile_gvmq" - -#define SLOT_ACTIVE 1 -#define SLOT_INACTIVE 2 -#define UPDATE_SLOT(pentry, guid, slot_state) ({ \ - memcpy(pentry, guid, TYPE_GUID_SIZE); \ - if (slot_state == SLOT_ACTIVE)\ - *(pentry + AB_FLAG_OFFSET) = AB_SLOT_ACTIVE_VAL; \ - else if (slot_state == SLOT_INACTIVE) \ - *(pentry + AB_FLAG_OFFSET) = (*(pentry + AB_FLAG_OFFSET)& \ - ~AB_PARTITION_ATTR_SLOT_ACTIVE); \ - }) - -using namespace std; -const char *slot_suffix_arr[] = { - AB_SLOT_A_SUFFIX, - AB_SLOT_B_SUFFIX, - NULL}; - -enum part_attr_type { - ATTR_SLOT_ACTIVE = 0, - ATTR_BOOT_SUCCESSFUL, - ATTR_UNBOOTABLE, -}; - -bool mGvmqPlatform = false; - -using ::android::bootable::GetMiscVirtualAbMergeStatus; -using ::android::bootable::InitMiscVirtualAbMessageIfNeeded; -using ::android::bootable::SetMiscVirtualAbMergeStatus; -using ::android::hardware::boot::V1_1::MergeStatus; - -//Get the value of one of the attribute fields for a partition. -static int get_partition_attribute(char *partname, - enum part_attr_type part_attr) -{ - struct gpt_disk *disk = NULL; - uint8_t *pentry = NULL; - int retval = -1; - uint8_t *attr = NULL; - if (!partname) - goto error; - disk = gpt_disk_alloc(); - if (!disk) { - ALOGE("%s: Failed to alloc disk struct", __func__); - goto error; - } - if (gpt_disk_get_disk_info(partname, disk)) { - ALOGE("%s: Failed to get disk info", __func__); - goto error; - } - pentry = gpt_disk_get_pentry(disk, partname, PRIMARY_GPT); - if (!pentry) { - ALOGE("%s: pentry does not exist in disk struct", - __func__); - goto error; - } - attr = pentry + AB_FLAG_OFFSET; - if (part_attr == ATTR_SLOT_ACTIVE) - retval = !!(*attr & AB_PARTITION_ATTR_SLOT_ACTIVE); - else if (part_attr == ATTR_BOOT_SUCCESSFUL) - retval = !!(*attr & AB_PARTITION_ATTR_BOOT_SUCCESSFUL); - else if (part_attr == ATTR_UNBOOTABLE) - retval = !!(*attr & AB_PARTITION_ATTR_UNBOOTABLE); - else - retval = -1; - gpt_disk_free(disk); - return retval; -error: - if (disk) - gpt_disk_free(disk); - return retval; -} - -//Set a particular attribute for all the partitions in a -//slot -static int update_slot_attribute(const char *slot, - enum part_attr_type ab_attr) -{ - unsigned int i = 0; - char buf[PATH_MAX]; - struct stat st; - struct gpt_disk *disk = NULL; - uint8_t *pentry = NULL; - uint8_t *pentry_bak = NULL; - int rc = -1; - uint8_t *attr = NULL; - uint8_t *attr_bak = NULL; - char partName[MAX_GPT_NAME_SIZE + 1] = {0}; - const char ptn_list[][MAX_GPT_NAME_SIZE] = { AB_PTN_LIST }; - int slot_name_valid = 0; - if (!slot) { - ALOGE("%s: Invalid argument", __func__); - goto error; - } - for (i = 0; slot_suffix_arr[i] != NULL; i++) - { - if (!strncmp(slot, slot_suffix_arr[i], - strlen(slot_suffix_arr[i]))) - slot_name_valid = 1; - } - if (!slot_name_valid) { - ALOGE("%s: Invalid slot name", __func__); - goto error; - } - for (i=0; i < ARRAY_SIZE(ptn_list); i++) { - memset(buf, '\0', sizeof(buf)); - //Check if A/B versions of this ptn exist - snprintf(buf, sizeof(buf) - 1, - "%s/%s%s", - BOOT_DEV_DIR, - ptn_list[i], - AB_SLOT_A_SUFFIX - ); - if (stat(buf, &st)) { - //partition does not have _a version - continue; - } - memset(buf, '\0', sizeof(buf)); - snprintf(buf, sizeof(buf) - 1, - "%s/%s%s", - BOOT_DEV_DIR, - ptn_list[i], - AB_SLOT_B_SUFFIX - ); - if (stat(buf, &st)) { - //partition does not have _a version - continue; - } - memset(partName, '\0', sizeof(partName)); - snprintf(partName, - sizeof(partName) - 1, - "%s%s", - ptn_list[i], - slot); - disk = gpt_disk_alloc(); - if (!disk) { - ALOGE("%s: Failed to alloc disk struct", - __func__); - goto error; - } - rc = gpt_disk_get_disk_info(partName, disk); - if (rc != 0) { - ALOGE("%s: Failed to get disk info for %s", - __func__, - partName); - goto error; - } - pentry = gpt_disk_get_pentry(disk, partName, PRIMARY_GPT); - pentry_bak = gpt_disk_get_pentry(disk, partName, SECONDARY_GPT); - if (!pentry || !pentry_bak) { - ALOGE("%s: Failed to get pentry/pentry_bak for %s", - __func__, - partName); - goto error; - } - attr = pentry + AB_FLAG_OFFSET; - attr_bak = pentry_bak + AB_FLAG_OFFSET; - if (ab_attr == ATTR_BOOT_SUCCESSFUL) { - *attr = (*attr) | AB_PARTITION_ATTR_BOOT_SUCCESSFUL; - *attr_bak = (*attr_bak) | - AB_PARTITION_ATTR_BOOT_SUCCESSFUL; - } else if (ab_attr == ATTR_UNBOOTABLE) { - *attr = (*attr) | AB_PARTITION_ATTR_UNBOOTABLE; - *attr_bak = (*attr_bak) | AB_PARTITION_ATTR_UNBOOTABLE; - } else if (ab_attr == ATTR_SLOT_ACTIVE) { - *attr = (*attr) | AB_PARTITION_ATTR_SLOT_ACTIVE; - *attr_bak = (*attr) | AB_PARTITION_ATTR_SLOT_ACTIVE; - } else { - ALOGE("%s: Unrecognized attr", __func__); - goto error; - } - if (gpt_disk_update_crc(disk)) { - ALOGE("%s: Failed to update crc for %s", - __func__, - partName); - goto error; - } - if (gpt_disk_commit(disk)) { - ALOGE("%s: Failed to write back entry for %s", - __func__, - partName); - goto error; - } - gpt_disk_free(disk); - disk = NULL; - } - return 0; -error: - if (disk) - gpt_disk_free(disk); - return -1; -} - -static int boot_control_check_slot_sanity(unsigned slot) -{ - uint32_t num_slots = get_number_slots(); - if ((num_slots < 1) || (slot > num_slots - 1)) { - ALOGE("Invalid slot number"); - return -1; - } - return 0; - -} - -//Return a gpt disk structure representing the disk that holds -//partition. -static struct gpt_disk* boot_ctl_get_disk_info(char *partition) -{ - struct gpt_disk *disk = NULL; - if (!partition) - return NULL; - disk = gpt_disk_alloc(); - if (!disk) { - ALOGE("%s: Failed to alloc disk", - __func__); - goto error; - } - if (gpt_disk_get_disk_info(partition, disk)) { - ALOGE("failed to get disk info for %s", - partition); - goto error; - } - return disk; -error: - if (disk) - gpt_disk_free(disk); - return NULL; -} - -//The argument here is a vector of partition names(including the slot suffix) -//that lie on a single disk -static int boot_ctl_set_active_slot_for_partitions(vector part_list, - unsigned slot) -{ - char buf[PATH_MAX] = {0}; - struct gpt_disk *diskA = NULL; - struct gpt_disk *diskB = NULL; - char slotA[MAX_GPT_NAME_SIZE + 1] = {0}; - char slotB[MAX_GPT_NAME_SIZE + 1] = {0}; - char active_guid[TYPE_GUID_SIZE + 1] = {0}; - char inactive_guid[TYPE_GUID_SIZE + 1] = {0}; - //Pointer to the partition entry of current 'A' partition - uint8_t *pentryA = NULL; - uint8_t *pentryA_bak = NULL; - //Pointer to partition entry of current 'B' partition - uint8_t *pentryB = NULL; - uint8_t *pentryB_bak = NULL; - struct stat st; - vector::iterator partition_iterator; - - for (partition_iterator = part_list.begin(); - partition_iterator != part_list.end(); - partition_iterator++) { - //Chop off the slot suffix from the partition name to - //make the string easier to work with. - string prefix = *partition_iterator; - if (prefix.size() < (strlen(AB_SLOT_A_SUFFIX) + 1)) { - ALOGE("Invalid partition name: %s", prefix.c_str()); - goto error; - } - prefix.resize(prefix.size() - strlen(AB_SLOT_A_SUFFIX)); - //Check if A/B versions of this ptn exist - snprintf(buf, sizeof(buf) - 1, "%s/%s%s", BOOT_DEV_DIR, - prefix.c_str(), - AB_SLOT_A_SUFFIX); - if (stat(buf, &st)) - continue; - memset(buf, '\0', sizeof(buf)); - snprintf(buf, sizeof(buf) - 1, "%s/%s%s", BOOT_DEV_DIR, - prefix.c_str(), - AB_SLOT_B_SUFFIX); - if (stat(buf, &st)) - continue; - memset(slotA, 0, sizeof(slotA)); - memset(slotB, 0, sizeof(slotB)); - snprintf(slotA, sizeof(slotA) - 1, "%s%s", prefix.c_str(), - AB_SLOT_A_SUFFIX); - snprintf(slotB, sizeof(slotB) - 1,"%s%s", prefix.c_str(), - AB_SLOT_B_SUFFIX); - //Get the disks containing the partitions that were passed in. - if (!diskA) { - diskA = boot_ctl_get_disk_info(slotA); - if (!diskA) - goto error; - } - if (!diskB) { - diskB = boot_ctl_get_disk_info(slotB); - if (!diskB) - goto error; - } - //Get partition entry for slot A & B from the primary - //and backup tables. - pentryA = gpt_disk_get_pentry(diskA, slotA, PRIMARY_GPT); - pentryA_bak = gpt_disk_get_pentry(diskA, slotA, SECONDARY_GPT); - pentryB = gpt_disk_get_pentry(diskB, slotB, PRIMARY_GPT); - pentryB_bak = gpt_disk_get_pentry(diskB, slotB, SECONDARY_GPT); - if ( !pentryA || !pentryA_bak || !pentryB || !pentryB_bak) { - //None of these should be NULL since we have already - //checked for A & B versions earlier. - ALOGE("Slot pentries for %s not found.", - prefix.c_str()); - goto error; - } - memset(active_guid, '\0', sizeof(active_guid)); - memset(inactive_guid, '\0', sizeof(inactive_guid)); - if (get_partition_attribute(slotA, ATTR_SLOT_ACTIVE) == 1) { - //A is the current active slot - memcpy((void*)active_guid, (const void*)pentryA, - TYPE_GUID_SIZE); - memcpy((void*)inactive_guid,(const void*)pentryB, - TYPE_GUID_SIZE); - } else if (get_partition_attribute(slotB, - ATTR_SLOT_ACTIVE) == 1) { - //B is the current active slot - memcpy((void*)active_guid, (const void*)pentryB, - TYPE_GUID_SIZE); - memcpy((void*)inactive_guid, (const void*)pentryA, - TYPE_GUID_SIZE); - } else { - ALOGE("Both A & B for %s are inactive..Aborting", - prefix.c_str()); - goto error; - } - if (!strncmp(slot_suffix_arr[slot], AB_SLOT_A_SUFFIX, - strlen(AB_SLOT_A_SUFFIX))){ - //Mark A as active in primary table - UPDATE_SLOT(pentryA, active_guid, SLOT_ACTIVE); - //Mark A as active in backup table - UPDATE_SLOT(pentryA_bak, active_guid, SLOT_ACTIVE); - //Mark B as inactive in primary table - UPDATE_SLOT(pentryB, inactive_guid, SLOT_INACTIVE); - //Mark B as inactive in backup table - UPDATE_SLOT(pentryB_bak, inactive_guid, SLOT_INACTIVE); - } else if (!strncmp(slot_suffix_arr[slot], AB_SLOT_B_SUFFIX, - strlen(AB_SLOT_B_SUFFIX))){ - //Mark B as active in primary table - UPDATE_SLOT(pentryB, active_guid, SLOT_ACTIVE); - //Mark B as active in backup table - UPDATE_SLOT(pentryB_bak, active_guid, SLOT_ACTIVE); - //Mark A as inavtive in primary table - UPDATE_SLOT(pentryA, inactive_guid, SLOT_INACTIVE); - //Mark A as inactive in backup table - UPDATE_SLOT(pentryA_bak, inactive_guid, SLOT_INACTIVE); - } else { - //Something has gone terribly terribly wrong - ALOGE("%s: Unknown slot suffix!", __func__); - goto error; - } - - if (diskA) { - if (gpt_disk_update_crc(diskA) != 0) { - ALOGE("%s: Failed to update gpt_disk crc", - __func__); - goto error; - } - } - if (diskB) { - if (gpt_disk_update_crc(diskB) != 0) { - ALOGE("%s: Failed to update gpt_disk crc", - __func__); - goto error; - } - } - } - //write updated content to disk - if (diskA) { - if (gpt_disk_commit(diskA)) { - ALOGE("Failed to commit disk entry"); - goto error; - } - gpt_disk_free(diskA); - } - if (diskB) { - if (gpt_disk_commit(diskB)) { - ALOGE("Failed to commit disk entry"); - goto error; - } - gpt_disk_free(diskB); - } - return 0; - -error: - if (diskA) - gpt_disk_free(diskA); - if (diskB) - gpt_disk_free(diskB); - return -1; -} - -bool bootcontrol_init() -{ - char platform[256]; - property_get(BOARD_PLATFORM_PROP , platform, ""); - if (!strncmp(platform, GVMQ_PLATFORM, strlen(GVMQ_PLATFORM))) - mGvmqPlatform = true; - return InitMiscVirtualAbMessageIfNeeded(); -} - -unsigned get_number_slots() -{ - if (mGvmqPlatform) - return 2; - - struct dirent *de = NULL; - DIR *dir_bootdev = NULL; - unsigned slot_count = 0; - dir_bootdev = opendir(BOOTDEV_DIR); - if (!dir_bootdev) { - ALOGE("%s: Failed to open bootdev dir (%s)", - __func__, - strerror(errno)); - goto error; - } - while ((de = readdir(dir_bootdev))) { - if (de->d_name[0] == '.') - continue; - if (!strncmp(de->d_name, BOOT_IMG_PTN_NAME, - strlen(BOOT_IMG_PTN_NAME))) - slot_count++; - } - closedir(dir_bootdev); - return slot_count; -error: - if (dir_bootdev) - closedir(dir_bootdev); - return 0; -} - -unsigned get_current_slot() -{ - uint32_t num_slots = 0; - char bootSlotProp[PROPERTY_VALUE_MAX] = {'\0'}; - unsigned i = 0; - num_slots = get_number_slots(); - if (num_slots <= 1) { - //Slot 0 is the only slot around. - return 0; - } - property_get(BOOT_SLOT_PROP, bootSlotProp, "N/A"); - if (!strncmp(bootSlotProp, "N/A", strlen("N/A"))) { - ALOGE("%s: Unable to read boot slot property", - __func__); - goto error; - } - //Iterate through a list of partitons named as boot+suffix - //and see which one is currently active. - for (i = 0; slot_suffix_arr[i] != NULL ; i++) { - if (!strncmp(bootSlotProp, - slot_suffix_arr[i], - strlen(slot_suffix_arr[i]))) - return i; - } -error: - //The HAL spec requires that we return a number between - //0 to num_slots - 1. Since something went wrong here we - //are just going to return the default slot. - return 0; -} - -int mark_boot_successful(){ - if (mGvmqPlatform) { - std::string err; - std::string misc_blk_device = get_bootloader_message_blk_device(&err); - if (misc_blk_device.empty()) { - ALOGE("Could not find bootloader message block device: %s", err.c_str()); - return -1; - } - bootloader_message boot; - if (!read_bootloader_message_from(&boot, misc_blk_device, &err)) { - ALOGE(" Failed to read from %s due to %s ", misc_blk_device.c_str(), err.c_str()); - return -1; - } - ALOGV(" bootloader_message is : boot.reserved[0] = %c, boot.reserved[1] = %c", - boot.reserved[0], boot.reserved[1]); - boot.reserved[2] = 'y'; - if (!write_bootloader_message_to(boot, misc_blk_device, &err)) { - ALOGE("Failed to write to %s because : %s", misc_blk_device.c_str(), err.c_str()); - return -1; - } - bootloader_message boot_verify; - if (!read_bootloader_message_from(&boot_verify, misc_blk_device, &err)) { - ALOGE("Failed to read from %s due to %s ", misc_blk_device.c_str(), err.c_str()); - return -1; - } - ALOGV(" bootloader_message : boot_verify.reserved[0] = %c, boot_verify.reserved[1] = %c,boot_verify.reserved[2] = %c", - boot_verify.reserved[0],boot_verify.reserved[1], boot_verify.reserved[2]); - } - - unsigned cur_slot = 0; - cur_slot = get_current_slot(); - if (update_slot_attribute(slot_suffix_arr[cur_slot], - ATTR_BOOT_SUCCESSFUL)) { - goto error; - } - return 0; -error: - ALOGE("%s: Failed to mark boot successful", __func__); - return -1; -} - -int set_active_boot_slot(unsigned slot) -{ - if (mGvmqPlatform) { - std::string err; - std::string misc_blk_device = get_bootloader_message_blk_device(&err); - if (misc_blk_device.empty()) { - ALOGE("Could not find bootloader message block device: %s", err.c_str()); - return -1; - } - unsigned current_slot = get_current_slot(); - uint32_t num_slots = get_number_slots(); - if ((num_slots < 1) || (current_slot > num_slots - 1)) { - ALOGE("Invalid slot number"); - return -1; - } - bootloader_message boot; - if(current_slot == 0) - boot.reserved[0] = 'a'; - else - boot.reserved[0] = 'b'; - if(slot == 0) - boot.reserved[1] = 'a'; - else - boot.reserved[1] = 'b'; - boot.reserved[2] = '\0'; - if (!write_bootloader_message_to(boot, misc_blk_device, &err)) { - ALOGE("Failed to write to %s because : %s", misc_blk_device.c_str(), err.c_str()); - return -1; - } - bootloader_message boot_verify; - if (!read_bootloader_message_from(&boot_verify, misc_blk_device, &err)) { - ALOGE("Failed to read from %s due to %s ", misc_blk_device.c_str(), err.c_str()); - return -1; - } - ALOGV("bootloader_message is : boot_verify.reserved[0] = %c, boot_verify.reserved[1] = %c,boot_verify.reserved[2] = %c", - boot_verify.reserved[0],boot_verify.reserved[1], boot_verify.reserved[2]); - } - map> ptn_map; - vector ptn_vec; - const char ptn_list[][MAX_GPT_NAME_SIZE] = { AB_PTN_LIST }; - uint32_t i; - int rc = -1; - int is_ufs = gpt_utils_is_ufs_device(); - map>::iterator map_iter; - - if (boot_control_check_slot_sanity(slot)) { - ALOGE("%s: Bad arguments", __func__); - goto error; - } - //The partition list just contains prefixes(without the _a/_b) of the - //partitions that support A/B. In order to get the layout we need the - //actual names. To do this we append the slot suffix to every member - //in the list. - for (i = 0; i < ARRAY_SIZE(ptn_list); i++) { - //XBL & XBL_CFG are handled differrently for ufs devices so - //ignore them - if (is_ufs && (!strncmp(ptn_list[i], - PTN_XBL, - strlen(PTN_XBL)) - || !strncmp(ptn_list[i], - PTN_XBL_CFG, - strlen(PTN_XBL_CFG)))) - continue; - //The partition list will be the list of partitions - //corresponding to the slot being set active - string cur_ptn = ptn_list[i]; - cur_ptn.append(slot_suffix_arr[slot]); - ptn_vec.push_back(cur_ptn); - - } - //The partition map gives us info in the following format: - // [path_to_block_device_1]--> - // [path_to_block_device_2]--> - // ... - // ... - // eg: - // [/dev/block/sdb]---> - if (gpt_utils_get_partition_map(ptn_vec, ptn_map)) { - ALOGE("%s: Failed to get partition map", - __func__); - goto error; - } - for (map_iter = ptn_map.begin(); map_iter != ptn_map.end(); map_iter++){ - if (map_iter->second.size() < 1) - continue; - if (boot_ctl_set_active_slot_for_partitions(map_iter->second, - slot)) { - ALOGE("%s: Failed to set active slot", __func__); - goto error; - } - } - if (is_ufs) { - if (!strncmp(slot_suffix_arr[slot], AB_SLOT_A_SUFFIX, - strlen(AB_SLOT_A_SUFFIX))){ - //Set xbl_a as the boot lun - rc = gpt_utils_set_xbl_boot_partition(NORMAL_BOOT); - } else if (!strncmp(slot_suffix_arr[slot], AB_SLOT_B_SUFFIX, - strlen(AB_SLOT_B_SUFFIX))){ - //Set xbl_b as the boot lun - rc = gpt_utils_set_xbl_boot_partition(BACKUP_BOOT); - } else { - //Something has gone terribly terribly wrong - ALOGE("%s: Unknown slot suffix!", __func__); - goto error; - } - if (rc) { - ALOGE("%s: Failed to switch xbl boot partition", - __func__); - goto error; - } - } - return 0; -error: - return -1; -} - -int set_slot_as_unbootable(unsigned slot) -{ - if (boot_control_check_slot_sanity(slot) != 0) { - ALOGE("%s: Argument check failed", __func__); - goto error; - } - if (update_slot_attribute(slot_suffix_arr[slot], - ATTR_UNBOOTABLE)) { - goto error; - } - return 0; -error: - ALOGE("%s: Failed to mark slot unbootable", __func__); - return -1; -} -int is_slot_bootable(unsigned slot) -{ - int attr = 0; - char bootPartition[MAX_GPT_NAME_SIZE + 1] = {0}; - - if (boot_control_check_slot_sanity(slot) != 0) { - ALOGE("%s: Argument check failed", __func__); - goto error; - } - snprintf(bootPartition, - sizeof(bootPartition) - 1, "boot%s", - slot_suffix_arr[slot]); - attr = get_partition_attribute(bootPartition, ATTR_UNBOOTABLE); - if (attr >= 0) - return !attr; -error: - return -1; -} - -int is_slot_marked_successful(unsigned slot) -{ - int attr = 0; - char bootPartition[MAX_GPT_NAME_SIZE + 1] = {0}; - - if (boot_control_check_slot_sanity(slot) != 0) { - ALOGE("%s: Argument check failed", __func__); - goto error; - } - snprintf(bootPartition, - sizeof(bootPartition) - 1, - "boot%s", slot_suffix_arr[slot]); - attr = get_partition_attribute(bootPartition, ATTR_BOOT_SUCCESSFUL); - if (attr >= 0) - return attr; -error: - return -1; -} - -const char* get_suffix(unsigned slot) -{ - if (boot_control_check_slot_sanity(slot) != 0) - return NULL; - else - return slot_suffix_arr[slot]; -} - -bool set_snapshot_merge_status(MergeStatus status) -{ - bool retval = SetMiscVirtualAbMergeStatus(get_current_slot(), status); - ALOGI("%s: MergeStatus = %d, current_slot = %d, returning: %s \n", __func__, - status, get_current_slot(), retval ? "true" : "false"); - return retval; -} - -MergeStatus get_snapshot_merge_status() -{ - MergeStatus status; - if (!GetMiscVirtualAbMergeStatus(get_current_slot(), &status)) { - ALOGI("%s: MergeStatus read from misc failed, returning unknown\n", __func__); - return MergeStatus::UNKNOWN; - } - ALOGI("%s: Returning MergeStatus = %d\n", __func__, status); - return status; -} diff --git a/bootctrl/1.1/libboot_control_qti/libboot_control_qti.h b/bootctrl/1.1/libboot_control_qti/libboot_control_qti.h deleted file mode 100644 index b055a49..0000000 --- a/bootctrl/1.1/libboot_control_qti/libboot_control_qti.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2020, The Linux Foundation. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of The Linux Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#pragma once - -#include -#include - -using MergeStatus = ::android::hardware::boot::V1_1::MergeStatus; - -// IBootControl 1.0 methods -bool bootcontrol_init(); -unsigned get_number_slots(); -unsigned get_current_slot(); -int mark_boot_successful(); -int set_active_boot_slot(unsigned slot); -int set_slot_as_unbootable(unsigned slot); -int is_slot_bootable(unsigned slot); -int is_slot_marked_successful(unsigned slot); -const char* get_suffix(unsigned slot); - -// IBootControl 1.1 methods -bool set_snapshot_merge_status(MergeStatus status); -MergeStatus get_snapshot_merge_status(); diff --git a/bootctrl/Android.bp b/bootctrl/Android.bp deleted file mode 100644 index ea51dc3..0000000 --- a/bootctrl/Android.bp +++ /dev/null @@ -1,44 +0,0 @@ -filegroup { - name: "bootctrl_hal_src", - srcs: [ - "boot_control.cpp", - ], -} - -cc_defaults { - name: "bootctrl_hal_defaults", - proprietary: true, - recovery_available: true, - header_libs: [ - "libhardware_headers", - "libsystem_headers", - ], - shared_libs: [ - "libcutils", - "liblog", - "libz", - ], - owner: "qti", - relative_install_path: "hw", - cflags: [ - "-Wall", - "-Werror", - ], - srcs: [ - ":bootctrl_hal_src", - ], - -} - -cc_library { - name: "bootctrl.holi", - defaults: ["bootctrl_hal_defaults"], - static_libs: ["libgptutils.moto_holi"], -} - -cc_library_shared { - name: "android.hardware.boot@1.1-impl-qti", - stem: "android.hardware.boot@1.0-impl-1.1-qti", - defaults: ["android.hardware.boot@1.1-impl-qti_defaults"], - static_libs: ["libgptutils.moto_holi"], -} diff --git a/bootctrl/NOTICE b/bootctrl/NOTICE deleted file mode 100644 index 820d40c..0000000 --- a/bootctrl/NOTICE +++ /dev/null @@ -1,26 +0,0 @@ -Copyright (c) 2016, The Linux Foundation. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of The Linux Foundation nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/bootctrl/boot_control.cpp b/bootctrl/boot_control.cpp deleted file mode 100644 index 726b245..0000000 --- a/bootctrl/boot_control.cpp +++ /dev/null @@ -1,703 +0,0 @@ -/* - * Copyright (c) 2016, The Linux Foundation. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of The Linux Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include -#include -#include -#include -#ifdef __cplusplus -extern "C" { -#endif -#include -#define LOG_TAG "bootcontrolhal" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "gpt-utils.h" - -#define BOOTDEV_DIR "/dev/block/bootdevice/by-name" -#define BOOT_IMG_PTN_NAME "boot" -#define LUN_NAME_END_LOC 14 -#define BOOT_SLOT_PROP "ro.boot.slot_suffix" - -#define SLOT_ACTIVE 1 -#define SLOT_INACTIVE 2 -#define UPDATE_SLOT(pentry, guid, slot_state) ({ \ - memcpy(pentry, guid, TYPE_GUID_SIZE); \ - if (slot_state == SLOT_ACTIVE)\ - *(pentry + AB_FLAG_OFFSET) = AB_SLOT_ACTIVE_VAL; \ - else if (slot_state == SLOT_INACTIVE) \ - *(pentry + AB_FLAG_OFFSET) = (*(pentry + AB_FLAG_OFFSET)& \ - ~AB_PARTITION_ATTR_SLOT_ACTIVE); \ - }) - -using namespace std; -const char *slot_suffix_arr[] = { - AB_SLOT_A_SUFFIX, - AB_SLOT_B_SUFFIX, - NULL}; - -enum part_attr_type { - ATTR_SLOT_ACTIVE = 0, - ATTR_BOOT_SUCCESSFUL, - ATTR_UNBOOTABLE, -}; - -void boot_control_init(struct boot_control_module *module) -{ - if (!module) { - ALOGE("Invalid argument passed to %s", __func__); - return; - } - return; -} - -//Get the value of one of the attribute fields for a partition. -static int get_partition_attribute(char *partname, - enum part_attr_type part_attr) -{ - struct gpt_disk *disk = NULL; - uint8_t *pentry = NULL; - int retval = -1; - uint8_t *attr = NULL; - if (!partname) - goto error; - disk = gpt_disk_alloc(); - if (!disk) { - ALOGE("%s: Failed to alloc disk struct", __func__); - goto error; - } - if (gpt_disk_get_disk_info(partname, disk)) { - ALOGE("%s: Failed to get disk info", __func__); - goto error; - } - pentry = gpt_disk_get_pentry(disk, partname, PRIMARY_GPT); - if (!pentry) { - ALOGE("%s: pentry does not exist in disk struct", - __func__); - goto error; - } - attr = pentry + AB_FLAG_OFFSET; - if (part_attr == ATTR_SLOT_ACTIVE) - retval = !!(*attr & AB_PARTITION_ATTR_SLOT_ACTIVE); - else if (part_attr == ATTR_BOOT_SUCCESSFUL) - retval = !!(*attr & AB_PARTITION_ATTR_BOOT_SUCCESSFUL); - else if (part_attr == ATTR_UNBOOTABLE) - retval = !!(*attr & AB_PARTITION_ATTR_UNBOOTABLE); - else - retval = -1; - gpt_disk_free(disk); - return retval; -error: - if (disk) - gpt_disk_free(disk); - return retval; -} - -//Set a particular attribute for all the partitions in a -//slot -static int update_slot_attribute(const char *slot, - enum part_attr_type ab_attr) -{ - unsigned int i = 0; - char buf[PATH_MAX]; - struct stat st; - struct gpt_disk *disk = NULL; - uint8_t *pentry = NULL; - uint8_t *pentry_bak = NULL; - int rc = -1; - uint8_t *attr = NULL; - uint8_t *attr_bak = NULL; - char partName[MAX_GPT_NAME_SIZE + 1] = {0}; - const char ptn_list[][MAX_GPT_NAME_SIZE] = { AB_PTN_LIST }; - int slot_name_valid = 0; - if (!slot) { - ALOGE("%s: Invalid argument", __func__); - goto error; - } - for (i = 0; slot_suffix_arr[i] != NULL; i++) - { - if (!strncmp(slot, slot_suffix_arr[i], - strlen(slot_suffix_arr[i]))) - slot_name_valid = 1; - } - if (!slot_name_valid) { - ALOGE("%s: Invalid slot name", __func__); - goto error; - } - for (i=0; i < ARRAY_SIZE(ptn_list); i++) { - memset(buf, '\0', sizeof(buf)); - //Check if A/B versions of this ptn exist - snprintf(buf, sizeof(buf) - 1, - "%s/%s%s", - BOOT_DEV_DIR, - ptn_list[i], - AB_SLOT_A_SUFFIX - ); - if (stat(buf, &st)) { - //partition does not have _a version - continue; - } - memset(buf, '\0', sizeof(buf)); - snprintf(buf, sizeof(buf) - 1, - "%s/%s%s", - BOOT_DEV_DIR, - ptn_list[i], - AB_SLOT_B_SUFFIX - ); - if (stat(buf, &st)) { - //partition does not have _a version - continue; - } - memset(partName, '\0', sizeof(partName)); - snprintf(partName, - sizeof(partName) - 1, - "%s%s", - ptn_list[i], - slot); - disk = gpt_disk_alloc(); - if (!disk) { - ALOGE("%s: Failed to alloc disk struct", - __func__); - goto error; - } - rc = gpt_disk_get_disk_info(partName, disk); - if (rc != 0) { - ALOGE("%s: Failed to get disk info for %s", - __func__, - partName); - goto error; - } - pentry = gpt_disk_get_pentry(disk, partName, PRIMARY_GPT); - pentry_bak = gpt_disk_get_pentry(disk, partName, SECONDARY_GPT); - if (!pentry || !pentry_bak) { - ALOGE("%s: Failed to get pentry/pentry_bak for %s", - __func__, - partName); - goto error; - } - attr = pentry + AB_FLAG_OFFSET; - attr_bak = pentry_bak + AB_FLAG_OFFSET; - if (ab_attr == ATTR_BOOT_SUCCESSFUL) { - *attr = (*attr) | AB_PARTITION_ATTR_BOOT_SUCCESSFUL; - *attr_bak = (*attr_bak) | - AB_PARTITION_ATTR_BOOT_SUCCESSFUL; - } else if (ab_attr == ATTR_UNBOOTABLE) { - *attr = (*attr) | AB_PARTITION_ATTR_UNBOOTABLE; - *attr_bak = (*attr_bak) | AB_PARTITION_ATTR_UNBOOTABLE; - } else if (ab_attr == ATTR_SLOT_ACTIVE) { - *attr = (*attr) | AB_PARTITION_ATTR_SLOT_ACTIVE; - *attr_bak = (*attr) | AB_PARTITION_ATTR_SLOT_ACTIVE; - } else { - ALOGE("%s: Unrecognized attr", __func__); - goto error; - } - if (gpt_disk_update_crc(disk)) { - ALOGE("%s: Failed to update crc for %s", - __func__, - partName); - goto error; - } - if (gpt_disk_commit(disk)) { - ALOGE("%s: Failed to write back entry for %s", - __func__, - partName); - goto error; - } - gpt_disk_free(disk); - disk = NULL; - } - return 0; -error: - if (disk) - gpt_disk_free(disk); - return -1; -} - -unsigned get_number_slots(struct boot_control_module *module) -{ - struct dirent *de = NULL; - DIR *dir_bootdev = NULL; - unsigned slot_count = 0; - if (!module) { - ALOGE("%s: Invalid argument", __func__); - goto error; - } - dir_bootdev = opendir(BOOTDEV_DIR); - if (!dir_bootdev) { - ALOGE("%s: Failed to open bootdev dir (%s)", - __func__, - strerror(errno)); - goto error; - } - while ((de = readdir(dir_bootdev))) { - if (de->d_name[0] == '.') - continue; - if (!strncmp(de->d_name, BOOT_IMG_PTN_NAME, - strlen(BOOT_IMG_PTN_NAME))) - slot_count++; - } - closedir(dir_bootdev); - return slot_count; -error: - if (dir_bootdev) - closedir(dir_bootdev); - return 0; -} - -unsigned get_current_slot(struct boot_control_module *module) -{ - uint32_t num_slots = 0; - char bootSlotProp[PROPERTY_VALUE_MAX] = {'\0'}; - unsigned i = 0; - if (!module) { - ALOGE("%s: Invalid argument", __func__); - goto error; - } - num_slots = get_number_slots(module); - if (num_slots <= 1) { - //Slot 0 is the only slot around. - return 0; - } - property_get(BOOT_SLOT_PROP, bootSlotProp, "N/A"); - if (!strncmp(bootSlotProp, "N/A", strlen("N/A"))) { - ALOGE("%s: Unable to read boot slot property", - __func__); - goto error; - } - //Iterate through a list of partitons named as boot+suffix - //and see which one is currently active. - for (i = 0; slot_suffix_arr[i] != NULL ; i++) { - if (!strncmp(bootSlotProp, - slot_suffix_arr[i], - strlen(slot_suffix_arr[i]))) - return i; - } -error: - //The HAL spec requires that we return a number between - //0 to num_slots - 1. Since something went wrong here we - //are just going to return the default slot. - return 0; -} - -static int boot_control_check_slot_sanity(struct boot_control_module *module, - unsigned slot) -{ - if (!module) - return -1; - uint32_t num_slots = get_number_slots(module); - if ((num_slots < 1) || (slot > num_slots - 1)) { - ALOGE("Invalid slot number"); - return -1; - } - return 0; - -} - -int mark_boot_successful(struct boot_control_module *module) -{ - unsigned cur_slot = 0; - if (!module) { - ALOGE("%s: Invalid argument", __func__); - goto error; - } - cur_slot = get_current_slot(module); - if (update_slot_attribute(slot_suffix_arr[cur_slot], - ATTR_BOOT_SUCCESSFUL)) { - goto error; - } - return 0; -error: - ALOGE("%s: Failed to mark boot successful", __func__); - return -1; -} - -const char *get_suffix(struct boot_control_module *module, unsigned slot) -{ - if (boot_control_check_slot_sanity(module, slot) != 0) - return NULL; - else - return slot_suffix_arr[slot]; -} - - -//Return a gpt disk structure representing the disk that holds -//partition. -static struct gpt_disk* boot_ctl_get_disk_info(char *partition) -{ - struct gpt_disk *disk = NULL; - if (!partition) - return NULL; - disk = gpt_disk_alloc(); - if (!disk) { - ALOGE("%s: Failed to alloc disk", - __func__); - goto error; - } - if (gpt_disk_get_disk_info(partition, disk)) { - ALOGE("failed to get disk info for %s", - partition); - goto error; - } - return disk; -error: - if (disk) - gpt_disk_free(disk); - return NULL; -} - -//The argument here is a vector of partition names(including the slot suffix) -//that lie on a single disk -static int boot_ctl_set_active_slot_for_partitions(vector part_list, - unsigned slot) -{ - char buf[PATH_MAX] = {0}; - struct gpt_disk *diskA = NULL; - struct gpt_disk *diskB = NULL; - char slotA[MAX_GPT_NAME_SIZE + 1] = {0}; - char slotB[MAX_GPT_NAME_SIZE + 1] = {0}; - char active_guid[TYPE_GUID_SIZE + 1] = {0}; - char inactive_guid[TYPE_GUID_SIZE + 1] = {0}; - //Pointer to the partition entry of current 'A' partition - uint8_t *pentryA = NULL; - uint8_t *pentryA_bak = NULL; - //Pointer to partition entry of current 'B' partition - uint8_t *pentryB = NULL; - uint8_t *pentryB_bak = NULL; - struct stat st; - vector::iterator partition_iterator; - - for (partition_iterator = part_list.begin(); - partition_iterator != part_list.end(); - partition_iterator++) { - //Chop off the slot suffix from the partition name to - //make the string easier to work with. - string prefix = *partition_iterator; - if (prefix.size() < (strlen(AB_SLOT_A_SUFFIX) + 1)) { - ALOGE("Invalid partition name: %s", prefix.c_str()); - goto error; - } - prefix.resize(prefix.size() - strlen(AB_SLOT_A_SUFFIX)); - //Check if A/B versions of this ptn exist - snprintf(buf, sizeof(buf) - 1, "%s/%s%s", BOOT_DEV_DIR, - prefix.c_str(), - AB_SLOT_A_SUFFIX); - if (stat(buf, &st)) - continue; - memset(buf, '\0', sizeof(buf)); - snprintf(buf, sizeof(buf) - 1, "%s/%s%s", BOOT_DEV_DIR, - prefix.c_str(), - AB_SLOT_B_SUFFIX); - if (stat(buf, &st)) - continue; - memset(slotA, 0, sizeof(slotA)); - memset(slotB, 0, sizeof(slotB)); - snprintf(slotA, sizeof(slotA) - 1, "%s%s", prefix.c_str(), - AB_SLOT_A_SUFFIX); - snprintf(slotB, sizeof(slotB) - 1,"%s%s", prefix.c_str(), - AB_SLOT_B_SUFFIX); - //Get the disks containing the partitions that were passed in. - if (!diskA) { - diskA = boot_ctl_get_disk_info(slotA); - if (!diskA) - goto error; - } - if (!diskB) { - diskB = boot_ctl_get_disk_info(slotB); - if (!diskB) - goto error; - } - //Get partition entry for slot A & B from the primary - //and backup tables. - pentryA = gpt_disk_get_pentry(diskA, slotA, PRIMARY_GPT); - pentryA_bak = gpt_disk_get_pentry(diskA, slotA, SECONDARY_GPT); - pentryB = gpt_disk_get_pentry(diskB, slotB, PRIMARY_GPT); - pentryB_bak = gpt_disk_get_pentry(diskB, slotB, SECONDARY_GPT); - if ( !pentryA || !pentryA_bak || !pentryB || !pentryB_bak) { - //None of these should be NULL since we have already - //checked for A & B versions earlier. - ALOGE("Slot pentries for %s not found.", - prefix.c_str()); - goto error; - } - memset(active_guid, '\0', sizeof(active_guid)); - memset(inactive_guid, '\0', sizeof(inactive_guid)); - if (get_partition_attribute(slotA, ATTR_SLOT_ACTIVE) == 1) { - //A is the current active slot - memcpy((void*)active_guid, (const void*)pentryA, - TYPE_GUID_SIZE); - memcpy((void*)inactive_guid,(const void*)pentryB, - TYPE_GUID_SIZE); - } else if (get_partition_attribute(slotB, - ATTR_SLOT_ACTIVE) == 1) { - //B is the current active slot - memcpy((void*)active_guid, (const void*)pentryB, - TYPE_GUID_SIZE); - memcpy((void*)inactive_guid, (const void*)pentryA, - TYPE_GUID_SIZE); - } else { - ALOGE("Both A & B for %s are inactive..Aborting", - prefix.c_str()); - goto error; - } - if (!strncmp(slot_suffix_arr[slot], AB_SLOT_A_SUFFIX, - strlen(AB_SLOT_A_SUFFIX))){ - //Mark A as active in primary table - UPDATE_SLOT(pentryA, active_guid, SLOT_ACTIVE); - //Mark A as active in backup table - UPDATE_SLOT(pentryA_bak, active_guid, SLOT_ACTIVE); - //Mark B as inactive in primary table - UPDATE_SLOT(pentryB, inactive_guid, SLOT_INACTIVE); - //Mark B as inactive in backup table - UPDATE_SLOT(pentryB_bak, inactive_guid, SLOT_INACTIVE); - } else if (!strncmp(slot_suffix_arr[slot], AB_SLOT_B_SUFFIX, - strlen(AB_SLOT_B_SUFFIX))){ - //Mark B as active in primary table - UPDATE_SLOT(pentryB, active_guid, SLOT_ACTIVE); - //Mark B as active in backup table - UPDATE_SLOT(pentryB_bak, active_guid, SLOT_ACTIVE); - //Mark A as inavtive in primary table - UPDATE_SLOT(pentryA, inactive_guid, SLOT_INACTIVE); - //Mark A as inactive in backup table - UPDATE_SLOT(pentryA_bak, inactive_guid, SLOT_INACTIVE); - } else { - //Something has gone terribly terribly wrong - ALOGE("%s: Unknown slot suffix!", __func__); - goto error; - } - - if (diskA) { - if (gpt_disk_update_crc(diskA) != 0) { - ALOGE("%s: Failed to update gpt_disk crc", - __func__); - goto error; - } - } - if (diskB) { - if (gpt_disk_update_crc(diskB) != 0) { - ALOGE("%s: Failed to update gpt_disk crc", - __func__); - goto error; - } - } - } - //write updated content to disk - if (diskA) { - if (gpt_disk_commit(diskA)) { - ALOGE("Failed to commit disk entry"); - goto error; - } - gpt_disk_free(diskA); - } - if (diskB) { - if (gpt_disk_commit(diskB)) { - ALOGE("Failed to commit disk entry"); - goto error; - } - gpt_disk_free(diskB); - } - return 0; - -error: - if (diskA) - gpt_disk_free(diskA); - if (diskB) - gpt_disk_free(diskB); - return -1; -} - -int set_active_boot_slot(struct boot_control_module *module, unsigned slot) -{ - map> ptn_map; - vector ptn_vec; - const char ptn_list[][MAX_GPT_NAME_SIZE] = { AB_PTN_LIST }; - uint32_t i; - int rc = -1; - int is_ufs = gpt_utils_is_ufs_device(); - map>::iterator map_iter; - - if (boot_control_check_slot_sanity(module, slot)) { - ALOGE("%s: Bad arguments", __func__); - goto error; - } - //The partition list just contains prefixes(without the _a/_b) of the - //partitions that support A/B. In order to get the layout we need the - //actual names. To do this we append the slot suffix to every member - //in the list. - for (i = 0; i < ARRAY_SIZE(ptn_list); i++) { - //XBL & XBL_CFG are handled differrently for ufs devices so - //ignore them - if (is_ufs && (!strncmp(ptn_list[i], - PTN_XBL, - strlen(PTN_XBL)) - || !strncmp(ptn_list[i], - PTN_XBL_CFG, - strlen(PTN_XBL_CFG)))) - continue; - //The partition list will be the list of partitions - //corresponding to the slot being set active - string cur_ptn = ptn_list[i]; - cur_ptn.append(slot_suffix_arr[slot]); - ptn_vec.push_back(cur_ptn); - - } - //The partition map gives us info in the following format: - // [path_to_block_device_1]--> - // [path_to_block_device_2]--> - // ... - // ... - // eg: - // [/dev/block/sdb]---> - if (gpt_utils_get_partition_map(ptn_vec, ptn_map)) { - ALOGE("%s: Failed to get partition map", - __func__); - goto error; - } - for (map_iter = ptn_map.begin(); map_iter != ptn_map.end(); map_iter++){ - if (map_iter->second.size() < 1) - continue; - if (boot_ctl_set_active_slot_for_partitions(map_iter->second, - slot)) { - ALOGE("%s: Failed to set active slot", __func__); - goto error; - } - } - if (is_ufs) { - if (!strncmp(slot_suffix_arr[slot], AB_SLOT_A_SUFFIX, - strlen(AB_SLOT_A_SUFFIX))){ - //Set xbl_a as the boot lun - rc = gpt_utils_set_xbl_boot_partition(NORMAL_BOOT); - } else if (!strncmp(slot_suffix_arr[slot], AB_SLOT_B_SUFFIX, - strlen(AB_SLOT_B_SUFFIX))){ - //Set xbl_b as the boot lun - rc = gpt_utils_set_xbl_boot_partition(BACKUP_BOOT); - } else { - //Something has gone terribly terribly wrong - ALOGE("%s: Unknown slot suffix!", __func__); - goto error; - } - if (rc) { - ALOGE("%s: Failed to switch xbl boot partition", - __func__); - goto error; - } - } - return 0; -error: - return -1; -} - -int set_slot_as_unbootable(struct boot_control_module *module, unsigned slot) -{ - if (boot_control_check_slot_sanity(module, slot) != 0) { - ALOGE("%s: Argument check failed", __func__); - goto error; - } - if (update_slot_attribute(slot_suffix_arr[slot], - ATTR_UNBOOTABLE)) { - goto error; - } - return 0; -error: - ALOGE("%s: Failed to mark slot unbootable", __func__); - return -1; -} - -int is_slot_bootable(struct boot_control_module *module, unsigned slot) -{ - int attr = 0; - char bootPartition[MAX_GPT_NAME_SIZE + 1] = {0}; - - if (boot_control_check_slot_sanity(module, slot) != 0) { - ALOGE("%s: Argument check failed", __func__); - goto error; - } - snprintf(bootPartition, - sizeof(bootPartition) - 1, "boot%s", - slot_suffix_arr[slot]); - attr = get_partition_attribute(bootPartition, ATTR_UNBOOTABLE); - if (attr >= 0) - return !attr; -error: - return -1; -} - -int is_slot_marked_successful(struct boot_control_module *module, unsigned slot) -{ - int attr = 0; - char bootPartition[MAX_GPT_NAME_SIZE + 1] = {0}; - - if (boot_control_check_slot_sanity(module, slot) != 0) { - ALOGE("%s: Argument check failed", __func__); - goto error; - } - snprintf(bootPartition, - sizeof(bootPartition) - 1, - "boot%s", slot_suffix_arr[slot]); - attr = get_partition_attribute(bootPartition, ATTR_BOOT_SUCCESSFUL); - if (attr >= 0) - return attr; -error: - return -1; -} - -static hw_module_methods_t boot_control_module_methods = { - .open = NULL, -}; - -boot_control_module_t HAL_MODULE_INFO_SYM = { - .common = { - .tag = HARDWARE_MODULE_TAG, - .module_api_version = 1, - .hal_api_version = 0, - .id = BOOT_CONTROL_HARDWARE_MODULE_ID, - .name = "Boot control HAL", - .author = "Code Aurora Forum", - .methods = &boot_control_module_methods, - }, - .init = boot_control_init, - .getNumberSlots = get_number_slots, - .getCurrentSlot = get_current_slot, - .markBootSuccessful = mark_boot_successful, - .setActiveBootSlot = set_active_boot_slot, - .setSlotAsUnbootable = set_slot_as_unbootable, - .isSlotBootable = is_slot_bootable, - .getSuffix = get_suffix, - .isSlotMarkedSuccessful = is_slot_marked_successful, -}; -#ifdef __cplusplus -} -#endif diff --git a/common.mk b/common.mk index 62669ab..baa7510 100644 --- a/common.mk +++ b/common.mk @@ -79,11 +79,8 @@ PRODUCT_COPY_FILES += \ # Boot control PRODUCT_PACKAGES += \ - android.hardware.boot@1.1-impl-qti \ - android.hardware.boot@1.1-impl-qti.recovery \ - android.hardware.boot@1.1-service \ - bootctrl.holi \ - bootctrl.holi.recovery + android.hardware.boot-service.qti \ + android.hardware.boot-service.qti.recovery PRODUCT_PACKAGES_DEBUG += \ bootctl diff --git a/gpt-utils/Android.bp b/gpt-utils/Android.bp deleted file mode 100644 index fd90b79..0000000 --- a/gpt-utils/Android.bp +++ /dev/null @@ -1,41 +0,0 @@ -// -// Copyright (C) 2018 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. -// - - -cc_library { - name: "libgptutils.moto_holi", - vendor: true, - recovery_available: true, - shared_libs: [ - "libcutils", - "liblog", - "libz", - ], - cflags: [ - "-Wall", - "-Werror", - "-D_BSG_FRAMEWORK_KERNEL_HEADERS", - ], - srcs: [ - "gpt-utils.cpp", - "recovery-ufs-bsg.cpp", - ], - owner: "qti", - header_libs: [ - "generated_kernel_headers", - ], - export_include_dirs: ["."], -} diff --git a/gpt-utils/gpt-utils.cpp b/gpt-utils/gpt-utils.cpp deleted file mode 100644 index 7c3a9bb..0000000 --- a/gpt-utils/gpt-utils.cpp +++ /dev/null @@ -1,1520 +0,0 @@ -/* - * Copyright (c) 2013,2016,2020 The Linux Foundation. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of The Linux Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#define _LARGEFILE64_SOURCE /* enable lseek64() */ - -/****************************************************************************** - * INCLUDE SECTION - ******************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#ifndef __STDC_FORMAT_MACROS -#define __STDC_FORMAT_MACROS -#endif -#include - - -#define LOG_TAG "gpt-utils" -#include -#include -#include "gpt-utils.h" -#include -#include - - -/****************************************************************************** - * DEFINE SECTION - ******************************************************************************/ -#define BLK_DEV_FILE "/dev/block/mmcblk0" -/* list the names of the backed-up partitions to be swapped */ -/* extension used for the backup partitions - tzbak, abootbak, etc. */ -#define BAK_PTN_NAME_EXT "bak" -#define XBL_PRIMARY "/dev/block/bootdevice/by-name/xbl" -#define XBL_BACKUP "/dev/block/bootdevice/by-name/xblbak" -#define XBL_AB_PRIMARY "/dev/block/bootdevice/by-name/xbl_a" -#define XBL_AB_SECONDARY "/dev/block/bootdevice/by-name/xbl_b" -/* GPT defines */ -#define MAX_LUNS 26 -//This will allow us to get the root lun path from the path to the partition. -//i.e: from /dev/block/sdaXXX get /dev/block/sda. The assumption here is that -//the boot critical luns lie between sda to sdz which is acceptable because -//only user added external disks,etc would lie beyond that limit which do not -//contain partitions that interest us here. -#define PATH_TRUNCATE_LOC (sizeof("/dev/block/sda") - 1) - -//From /dev/block/sda get just sda -#define LUN_NAME_START_LOC (sizeof("/dev/block/") - 1) -#define BOOT_LUN_A_ID 1 -#define BOOT_LUN_B_ID 2 -/****************************************************************************** - * MACROS - ******************************************************************************/ - - -#define GET_4_BYTES(ptr) ((uint32_t) *((uint8_t *)(ptr)) | \ - ((uint32_t) *((uint8_t *)(ptr) + 1) << 8) | \ - ((uint32_t) *((uint8_t *)(ptr) + 2) << 16) | \ - ((uint32_t) *((uint8_t *)(ptr) + 3) << 24)) - -#define GET_8_BYTES(ptr) ((uint64_t) *((uint8_t *)(ptr)) | \ - ((uint64_t) *((uint8_t *)(ptr) + 1) << 8) | \ - ((uint64_t) *((uint8_t *)(ptr) + 2) << 16) | \ - ((uint64_t) *((uint8_t *)(ptr) + 3) << 24) | \ - ((uint64_t) *((uint8_t *)(ptr) + 4) << 32) | \ - ((uint64_t) *((uint8_t *)(ptr) + 5) << 40) | \ - ((uint64_t) *((uint8_t *)(ptr) + 6) << 48) | \ - ((uint64_t) *((uint8_t *)(ptr) + 7) << 56)) - -#define PUT_4_BYTES(ptr, y) *((uint8_t *)(ptr)) = (y) & 0xff; \ - *((uint8_t *)(ptr) + 1) = ((y) >> 8) & 0xff; \ - *((uint8_t *)(ptr) + 2) = ((y) >> 16) & 0xff; \ - *((uint8_t *)(ptr) + 3) = ((y) >> 24) & 0xff; - -/****************************************************************************** - * TYPES - ******************************************************************************/ -using namespace std; -enum gpt_state { - GPT_OK = 0, - GPT_BAD_SIGNATURE, - GPT_BAD_CRC -}; -//List of LUN's containing boot critical images. -//Required in the case of UFS devices -struct update_data { - char lun_list[MAX_LUNS][PATH_MAX]; - uint32_t num_valid_entries; -}; - -int32_t set_boot_lun(char *sg_dev,uint8_t boot_lun_id); -/****************************************************************************** - * FUNCTIONS - ******************************************************************************/ -/** - * ========================================================================== - * - * \brief Read/Write len bytes from/to block dev - * - * \param [in] fd block dev file descriptor (returned from open) - * \param [in] rw RW flag: 0 - read, != 0 - write - * \param [in] offset block dev offset [bytes] - RW start position - * \param [in] buf Pointer to the buffer containing the data - * \param [in] len RW size in bytes. Buf must be at least that big - * - * \return 0 on success - * - * ========================================================================== - */ -static int blk_rw(int fd, int rw, int64_t offset, uint8_t *buf, unsigned len) -{ - int r; - - if (lseek64(fd, offset, SEEK_SET) < 0) { - fprintf(stderr, "block dev lseek64 %" PRIi64 " failed: %s\n", offset, - strerror(errno)); - return -1; - } - - if (rw) - r = write(fd, buf, len); - else - r = read(fd, buf, len); - - if (r < 0) - fprintf(stderr, "block dev %s failed: %s\n", rw ? "write" : "read", - strerror(errno)); - else - r = 0; - - return r; -} - - - -/** - * ========================================================================== - * - * \brief Search within GPT for partition entry with the given name - * or it's backup twin (name-bak). - * - * \param [in] ptn_name Partition name to seek - * \param [in] pentries_start Partition entries array start pointer - * \param [in] pentries_end Partition entries array end pointer - * \param [in] pentry_size Single partition entry size [bytes] - * - * \return First partition entry pointer that matches the name or NULL - * - * ========================================================================== - */ -static uint8_t *gpt_pentry_seek(const char *ptn_name, - const uint8_t *pentries_start, - const uint8_t *pentries_end, - uint32_t pentry_size) -{ - char *pentry_name; - unsigned len = strlen(ptn_name); - unsigned i; - char name8[MAX_GPT_NAME_SIZE] = {0}; // initialize with null - - for (pentry_name = (char *) (pentries_start + PARTITION_NAME_OFFSET); - pentry_name < (char *) pentries_end; - pentry_name += pentry_size) { - - /* Partition names in GPT are UTF-16 - ignoring UTF-16 2nd byte */ - for (i = 0; i < sizeof(name8) / 2; i++) - name8[i] = pentry_name[i * 2]; - name8[i] = '\0'; - - if (!strncmp(ptn_name, name8, len)) { - if (name8[len] == 0 || !strcmp(&name8[len], BAK_PTN_NAME_EXT)) - return (uint8_t *) (pentry_name - PARTITION_NAME_OFFSET); - } - } - - return NULL; -} - - - -/** - * ========================================================================== - * - * \brief Swaps boot chain in GPT partition entries array - * - * \param [in] pentries_start Partition entries array start - * \param [in] pentries_end Partition entries array end - * \param [in] pentry_size Single partition entry size - * - * \return 0 on success, 1 if no backup partitions found - * - * ========================================================================== - */ -static int gpt_boot_chain_swap(const uint8_t *pentries_start, - const uint8_t *pentries_end, - uint32_t pentry_size) -{ - const char ptn_swap_list[][MAX_GPT_NAME_SIZE] = { PTN_SWAP_LIST }; - - int backup_not_found = 1; - unsigned i; - - for (i = 0; i < ARRAY_SIZE(ptn_swap_list); i++) { - uint8_t *ptn_entry; - uint8_t *ptn_bak_entry; - uint8_t ptn_swap[PTN_ENTRY_SIZE]; - //Skip the xbl partition on UFS devices. That is handled - //seperately. - if (gpt_utils_is_ufs_device() && !strncmp(ptn_swap_list[i], - PTN_XBL, - strlen(PTN_XBL))) - continue; - - ptn_entry = gpt_pentry_seek(ptn_swap_list[i], pentries_start, - pentries_end, pentry_size); - if (ptn_entry == NULL) - continue; - - ptn_bak_entry = gpt_pentry_seek(ptn_swap_list[i], - ptn_entry + pentry_size, pentries_end, pentry_size); - if (ptn_bak_entry == NULL) { - fprintf(stderr, "'%s' partition not backup - skip safe update\n", - ptn_swap_list[i]); - continue; - } - - /* swap primary <-> backup partition entries */ - memcpy(ptn_swap, ptn_entry, PTN_ENTRY_SIZE); - memcpy(ptn_entry, ptn_bak_entry, PTN_ENTRY_SIZE); - memcpy(ptn_bak_entry, ptn_swap, PTN_ENTRY_SIZE); - backup_not_found = 0; - } - - return backup_not_found; -} - - - -/** - * ========================================================================== - * - * \brief Sets secondary GPT boot chain - * - * \param [in] fd block dev file descriptor - * \param [in] boot Boot chain to switch to - * - * \return 0 on success - * - * ========================================================================== - */ -static int gpt2_set_boot_chain(int fd, enum boot_chain boot) -{ - int64_t gpt2_header_offset; - uint64_t pentries_start_offset; - uint32_t gpt_header_size; - uint32_t pentry_size; - uint32_t pentries_array_size; - - uint8_t *gpt_header = NULL; - uint8_t *pentries = NULL; - uint32_t crc; - uint32_t crc_zero; - uint32_t blk_size = 0; - int r; - - - crc_zero = crc32(0L, Z_NULL, 0); - if (ioctl(fd, BLKSSZGET, &blk_size) != 0) { - fprintf(stderr, "Failed to get GPT device block size: %s\n", - strerror(errno)); - r = -1; - goto EXIT; - } - gpt_header = (uint8_t*)malloc(blk_size); - if (!gpt_header) { - fprintf(stderr, "Failed to allocate memory to hold GPT block\n"); - r = -1; - goto EXIT; - } - gpt2_header_offset = lseek64(fd, 0, SEEK_END) - blk_size; - if (gpt2_header_offset < 0) { - fprintf(stderr, "Getting secondary GPT header offset failed: %s\n", - strerror(errno)); - r = -1; - goto EXIT; - } - - /* Read primary GPT header from block dev */ - r = blk_rw(fd, 0, blk_size, gpt_header, blk_size); - - if (r) { - fprintf(stderr, "Failed to read primary GPT header from blk dev\n"); - goto EXIT; - } - pentries_start_offset = - GET_8_BYTES(gpt_header + PENTRIES_OFFSET) * blk_size; - pentry_size = GET_4_BYTES(gpt_header + PENTRY_SIZE_OFFSET); - pentries_array_size = - GET_4_BYTES(gpt_header + PARTITION_COUNT_OFFSET) * pentry_size; - - pentries = (uint8_t *) calloc(1, pentries_array_size); - if (pentries == NULL) { - fprintf(stderr, - "Failed to alloc memory for GPT partition entries array\n"); - r = -1; - goto EXIT; - } - /* Read primary GPT partititon entries array from block dev */ - r = blk_rw(fd, 0, pentries_start_offset, pentries, pentries_array_size); - if (r) - goto EXIT; - - crc = crc32(crc_zero, pentries, pentries_array_size); - if (GET_4_BYTES(gpt_header + PARTITION_CRC_OFFSET) != crc) { - fprintf(stderr, "Primary GPT partition entries array CRC invalid\n"); - r = -1; - goto EXIT; - } - - /* Read secondary GPT header from block dev */ - r = blk_rw(fd, 0, gpt2_header_offset, gpt_header, blk_size); - if (r) - goto EXIT; - - gpt_header_size = GET_4_BYTES(gpt_header + HEADER_SIZE_OFFSET); - pentries_start_offset = - GET_8_BYTES(gpt_header + PENTRIES_OFFSET) * blk_size; - - if (boot == BACKUP_BOOT) { - r = gpt_boot_chain_swap(pentries, pentries + pentries_array_size, - pentry_size); - if (r) - goto EXIT; - } - - crc = crc32(crc_zero, pentries, pentries_array_size); - PUT_4_BYTES(gpt_header + PARTITION_CRC_OFFSET, crc); - - /* header CRC is calculated with this field cleared */ - PUT_4_BYTES(gpt_header + HEADER_CRC_OFFSET, 0); - crc = crc32(crc_zero, gpt_header, gpt_header_size); - PUT_4_BYTES(gpt_header + HEADER_CRC_OFFSET, crc); - - /* Write the modified GPT header back to block dev */ - r = blk_rw(fd, 1, gpt2_header_offset, gpt_header, blk_size); - if (!r) - /* Write the modified GPT partititon entries array back to block dev */ - r = blk_rw(fd, 1, pentries_start_offset, pentries, - pentries_array_size); - -EXIT: - if(gpt_header) - free(gpt_header); - if (pentries) - free(pentries); - return r; -} - -/** - * ========================================================================== - * - * \brief Checks GPT state (header signature and CRC) - * - * \param [in] fd block dev file descriptor - * \param [in] gpt GPT header to be checked - * \param [out] state GPT header state - * - * \return 0 on success - * - * ========================================================================== - */ -static int gpt_get_state(int fd, enum gpt_instance gpt, enum gpt_state *state) -{ - int64_t gpt_header_offset; - uint32_t gpt_header_size; - uint8_t *gpt_header = NULL; - uint32_t crc; - uint32_t crc_zero; - uint32_t blk_size = 0; - - *state = GPT_OK; - - crc_zero = crc32(0L, Z_NULL, 0); - if (ioctl(fd, BLKSSZGET, &blk_size) != 0) { - fprintf(stderr, "Failed to get GPT device block size: %s\n", - strerror(errno)); - goto error; - } - gpt_header = (uint8_t*)malloc(blk_size); - if (!gpt_header) { - fprintf(stderr, "gpt_get_state:Failed to alloc memory for header\n"); - goto error; - } - if (gpt == PRIMARY_GPT) - gpt_header_offset = blk_size; - else { - gpt_header_offset = lseek64(fd, 0, SEEK_END) - blk_size; - if (gpt_header_offset < 0) { - fprintf(stderr, "gpt_get_state:Seek to end of GPT part fail\n"); - goto error; - } - } - - if (blk_rw(fd, 0, gpt_header_offset, gpt_header, blk_size)) { - fprintf(stderr, "gpt_get_state: blk_rw failed\n"); - goto error; - } - if (memcmp(gpt_header, GPT_SIGNATURE, sizeof(GPT_SIGNATURE))) - *state = GPT_BAD_SIGNATURE; - gpt_header_size = GET_4_BYTES(gpt_header + HEADER_SIZE_OFFSET); - - crc = GET_4_BYTES(gpt_header + HEADER_CRC_OFFSET); - /* header CRC is calculated with this field cleared */ - PUT_4_BYTES(gpt_header + HEADER_CRC_OFFSET, 0); - if (crc32(crc_zero, gpt_header, gpt_header_size) != crc) - *state = GPT_BAD_CRC; - free(gpt_header); - return 0; -error: - if (gpt_header) - free(gpt_header); - return -1; -} - - - -/** - * ========================================================================== - * - * \brief Sets GPT header state (used to corrupt and fix GPT signature) - * - * \param [in] fd block dev file descriptor - * \param [in] gpt GPT header to be checked - * \param [in] state GPT header state to set (GPT_OK or GPT_BAD_SIGNATURE) - * - * \return 0 on success - * - * ========================================================================== - */ -static int gpt_set_state(int fd, enum gpt_instance gpt, enum gpt_state state) -{ - int64_t gpt_header_offset; - uint32_t gpt_header_size; - uint8_t *gpt_header = NULL; - uint32_t crc; - uint32_t crc_zero; - uint32_t blk_size = 0; - - crc_zero = crc32(0L, Z_NULL, 0); - if (ioctl(fd, BLKSSZGET, &blk_size) != 0) { - fprintf(stderr, "Failed to get GPT device block size: %s\n", - strerror(errno)); - goto error; - } - gpt_header = (uint8_t*)malloc(blk_size); - if (!gpt_header) { - fprintf(stderr, "Failed to alloc memory for gpt header\n"); - goto error; - } - if (gpt == PRIMARY_GPT) - gpt_header_offset = blk_size; - else { - gpt_header_offset = lseek64(fd, 0, SEEK_END) - blk_size; - if (gpt_header_offset < 0) { - fprintf(stderr, "Failed to seek to end of GPT device\n"); - goto error; - } - } - if (blk_rw(fd, 0, gpt_header_offset, gpt_header, blk_size)) { - fprintf(stderr, "Failed to r/w gpt header\n"); - goto error; - } - if (state == GPT_OK) - memcpy(gpt_header, GPT_SIGNATURE, sizeof(GPT_SIGNATURE)); - else if (state == GPT_BAD_SIGNATURE) - *gpt_header = 0; - else { - fprintf(stderr, "gpt_set_state: Invalid state\n"); - goto error; - } - - gpt_header_size = GET_4_BYTES(gpt_header + HEADER_SIZE_OFFSET); - - /* header CRC is calculated with this field cleared */ - PUT_4_BYTES(gpt_header + HEADER_CRC_OFFSET, 0); - crc = crc32(crc_zero, gpt_header, gpt_header_size); - PUT_4_BYTES(gpt_header + HEADER_CRC_OFFSET, crc); - - if (blk_rw(fd, 1, gpt_header_offset, gpt_header, blk_size)) { - fprintf(stderr, "gpt_set_state: blk write failed\n"); - goto error; - } - return 0; -error: - if(gpt_header) - free(gpt_header); - return -1; -} - -int get_scsi_node_from_bootdevice(const char *bootdev_path, - char *sg_node_path, - size_t buf_size) -{ - char sg_dir_path[PATH_MAX] = {0}; - char real_path[PATH_MAX] = {0}; - DIR *scsi_dir = NULL; - struct dirent *de; - int node_found = 0; - if (!bootdev_path || !sg_node_path) { - fprintf(stderr, "%s : invalid argument\n", - __func__); - goto error; - } - if (readlink(bootdev_path, real_path, sizeof(real_path) - 1) < 0) { - fprintf(stderr, "failed to resolve link for %s(%s)\n", - bootdev_path, - strerror(errno)); - goto error; - } - if(strlen(real_path) < PATH_TRUNCATE_LOC + 1){ - fprintf(stderr, "Unrecognized path :%s:\n", - real_path); - goto error; - } - //For the safe side in case there are additional partitions on - //the XBL lun we truncate the name. - real_path[PATH_TRUNCATE_LOC] = '\0'; - if(strlen(real_path) < LUN_NAME_START_LOC + 1){ - fprintf(stderr, "Unrecognized truncated path :%s:\n", - real_path); - goto error; - } - //This will give us /dev/block/sdb/device/scsi_generic - //which contains a file sgY whose name gives us the path - //to /dev/sgY which we return - snprintf(sg_dir_path, sizeof(sg_dir_path) - 1, - "/sys/block/%s/device/scsi_generic", - &real_path[LUN_NAME_START_LOC]); - scsi_dir = opendir(sg_dir_path); - if (!scsi_dir) { - fprintf(stderr, "%s : Failed to open %s(%s)\n", - __func__, - sg_dir_path, - strerror(errno)); - goto error; - } - while((de = readdir(scsi_dir))) { - if (de->d_name[0] == '.') - continue; - else if (!strncmp(de->d_name, "sg", 2)) { - snprintf(sg_node_path, - buf_size -1, - "/dev/%s", - de->d_name); - fprintf(stderr, "%s:scsi generic node is :%s:\n", - __func__, - sg_node_path); - node_found = 1; - break; - } - } - if(!node_found) { - fprintf(stderr,"%s: Unable to locate scsi generic node\n", - __func__); - goto error; - } - closedir(scsi_dir); - return 0; -error: - if (scsi_dir) - closedir(scsi_dir); - return -1; -} - - - -//Swtich betwieen using either the primary or the backup -//boot LUN for boot. This is required since UFS boot partitions -//cannot have a backup GPT which is what we use for failsafe -//updates of the other 'critical' partitions. This function will -//not be invoked for emmc targets and on UFS targets is only required -//to be invoked for XBL. -// -//The algorithm to do this is as follows: -//- Find the real block device(eg: /dev/block/sdb) that corresponds -// to the /dev/block/bootdevice/by-name/xbl(bak) symlink -// -//- Once we have the block device 'node' name(sdb in the above example) -// use this node to to locate the scsi generic device that represents -// it by checking the file /sys/block/sdb/device/scsi_generic/sgY -// -//- Once we locate sgY we call the query ioctl on /dev/sgy to switch -//the boot lun to either LUNA or LUNB -int gpt_utils_set_xbl_boot_partition(enum boot_chain chain) -{ - struct stat st; - ///sys/block/sdX/device/scsi_generic/ - char sg_dev_node[PATH_MAX] = {0}; - uint8_t boot_lun_id = 0; - const char *boot_dev = NULL; - - if (chain == BACKUP_BOOT) { - boot_lun_id = BOOT_LUN_B_ID; - if (!stat(XBL_BACKUP, &st)) - boot_dev = XBL_BACKUP; - else if (!stat(XBL_AB_SECONDARY, &st)) - boot_dev = XBL_AB_SECONDARY; - else { - fprintf(stderr, "%s: Failed to locate secondary xbl\n", - __func__); - goto error; - } - } else if (chain == NORMAL_BOOT) { - boot_lun_id = BOOT_LUN_A_ID; - if (!stat(XBL_PRIMARY, &st)) - boot_dev = XBL_PRIMARY; - else if (!stat(XBL_AB_PRIMARY, &st)) - boot_dev = XBL_AB_PRIMARY; - else { - fprintf(stderr, "%s: Failed to locate primary xbl\n", - __func__); - goto error; - } - } else { - fprintf(stderr, "%s: Invalid boot chain id\n", __func__); - goto error; - } - //We need either both xbl and xblbak or both xbl_a and xbl_b to exist at - //the same time. If not the current configuration is invalid. - if((stat(XBL_PRIMARY, &st) || - stat(XBL_BACKUP, &st)) && - (stat(XBL_AB_PRIMARY, &st) || - stat(XBL_AB_SECONDARY, &st))) { - fprintf(stderr, "%s:primary/secondary XBL prt not found(%s)\n", - __func__, - strerror(errno)); - goto error; - } - fprintf(stderr, "%s: setting %s lun as boot lun\n", - __func__, - boot_dev); - if (get_scsi_node_from_bootdevice(boot_dev, - sg_dev_node, - sizeof(sg_dev_node))) { - fprintf(stderr, "%s: Failed to get scsi node path for xblbak\n", - __func__); - goto error; - } - /* set boot lun using /dev/sg or /dev/ufs-bsg* */ - if (set_boot_lun(sg_dev_node, boot_lun_id)) { - fprintf(stderr, "%s: Failed to set xblbak as boot partition\n", - __func__); - goto error; - } - return 0; -error: - return -1; -} - -int gpt_utils_is_ufs_device() -{ - char bootdevice[PROPERTY_VALUE_MAX] = {0}; - property_get("ro.boot.bootdevice", bootdevice, "N/A"); - if (strlen(bootdevice) < strlen(".ufshc") + 1) - return 0; - return (!strncmp(&bootdevice[strlen(bootdevice) - strlen(".ufshc")], - ".ufshc", - sizeof(".ufshc"))); -} -//dev_path is the path to the block device that contains the GPT image that -//needs to be updated. This would be the device which holds one or more critical -//boot partitions and their backups. In the case of EMMC this function would -//be invoked only once on /dev/block/mmcblk1 since it holds the GPT image -//containing all the partitions For UFS devices it could potentially be -//invoked multiple times, once for each LUN containing critical image(s) and -//their backups -int prepare_partitions(enum boot_update_stage stage, const char *dev_path) -{ - int r = 0; - int fd = -1; - int is_ufs = gpt_utils_is_ufs_device(); - enum gpt_state gpt_prim, gpt_second; - enum boot_update_stage internal_stage; - struct stat xbl_partition_stat; - - if (!dev_path) { - fprintf(stderr, "%s: Invalid dev_path\n", - __func__); - r = -1; - goto EXIT; - } - fd = open(dev_path, O_RDWR); - if (fd < 0) { - fprintf(stderr, "%s: Opening '%s' failed: %s\n", - __func__, - BLK_DEV_FILE, - strerror(errno)); - r = -1; - goto EXIT; - } - r = gpt_get_state(fd, PRIMARY_GPT, &gpt_prim) || - gpt_get_state(fd, SECONDARY_GPT, &gpt_second); - if (r) { - fprintf(stderr, "%s: Getting GPT headers state failed\n", - __func__); - goto EXIT; - } - - /* These 2 combinations are unexpected and unacceptable */ - if (gpt_prim == GPT_BAD_CRC || gpt_second == GPT_BAD_CRC) { - fprintf(stderr, "%s: GPT headers CRC corruption detected, aborting\n", - __func__); - r = -1; - goto EXIT; - } - if (gpt_prim == GPT_BAD_SIGNATURE && gpt_second == GPT_BAD_SIGNATURE) { - fprintf(stderr, "%s: Both GPT headers corrupted, aborting\n", - __func__); - r = -1; - goto EXIT; - } - - /* Check internal update stage according GPT headers' state */ - if (gpt_prim == GPT_OK && gpt_second == GPT_OK) - internal_stage = UPDATE_MAIN; - else if (gpt_prim == GPT_BAD_SIGNATURE) - internal_stage = UPDATE_BACKUP; - else if (gpt_second == GPT_BAD_SIGNATURE) - internal_stage = UPDATE_FINALIZE; - else { - fprintf(stderr, "%s: Abnormal GPTs state: primary (%d), secondary (%d), " - "aborting\n", __func__, gpt_prim, gpt_second); - r = -1; - goto EXIT; - } - - /* Stage already set - ready for update, exitting */ - if ((int) stage == (int) internal_stage - 1) - goto EXIT; - /* Unexpected stage given */ - if (stage != internal_stage) { - r = -1; - goto EXIT; - } - - switch (stage) { - case UPDATE_MAIN: - if (is_ufs) { - if(stat(XBL_PRIMARY, &xbl_partition_stat)|| - stat(XBL_BACKUP, &xbl_partition_stat)){ - //Non fatal error. Just means this target does not - //use XBL but relies on sbl whose update is handled - //by the normal methods. - fprintf(stderr, "%s: xbl part not found(%s).Assuming sbl in use\n", - __func__, - strerror(errno)); - } else { - //Switch the boot lun so that backup boot LUN is used - r = gpt_utils_set_xbl_boot_partition(BACKUP_BOOT); - if(r){ - fprintf(stderr, "%s: Failed to set xbl backup partition as boot\n", - __func__); - goto EXIT; - } - } - } - //Fix up the backup GPT table so that it actually points to - //the backup copy of the boot critical images - fprintf(stderr, "%s: Preparing for primary partition update\n", - __func__); - r = gpt2_set_boot_chain(fd, BACKUP_BOOT); - if (r) { - if (r < 0) - fprintf(stderr, - "%s: Setting secondary GPT to backup boot failed\n", - __func__); - /* No backup partitions - do not corrupt GPT, do not flag error */ - else - r = 0; - goto EXIT; - } - //corrupt the primary GPT so that the backup(which now points to - //the backup boot partitions is used) - r = gpt_set_state(fd, PRIMARY_GPT, GPT_BAD_SIGNATURE); - if (r) { - fprintf(stderr, "%s: Corrupting primary GPT header failed\n", - __func__); - goto EXIT; - } - break; - case UPDATE_BACKUP: - if (is_ufs) { - if(stat(XBL_PRIMARY, &xbl_partition_stat)|| - stat(XBL_BACKUP, &xbl_partition_stat)){ - //Non fatal error. Just means this target does not - //use XBL but relies on sbl whose update is handled - //by the normal methods. - fprintf(stderr, "%s: xbl part not found(%s).Assuming sbl in use\n", - __func__, - strerror(errno)); - } else { - //Switch the boot lun so that backup boot LUN is used - r = gpt_utils_set_xbl_boot_partition(NORMAL_BOOT); - if(r) { - fprintf(stderr, "%s: Failed to set xbl backup partition as boot\n", - __func__); - goto EXIT; - } - } - } - //Fix the primary GPT header so that is used - fprintf(stderr, "%s: Preparing for backup partition update\n", - __func__); - r = gpt_set_state(fd, PRIMARY_GPT, GPT_OK); - if (r) { - fprintf(stderr, "%s: Fixing primary GPT header failed\n", - __func__); - goto EXIT; - } - //Corrupt the scondary GPT header - r = gpt_set_state(fd, SECONDARY_GPT, GPT_BAD_SIGNATURE); - if (r) { - fprintf(stderr, "%s: Corrupting secondary GPT header failed\n", - __func__); - goto EXIT; - } - break; - case UPDATE_FINALIZE: - //Undo the changes we had made in the UPDATE_MAIN stage so that the - //primary/backup GPT headers once again point to the same set of - //partitions - fprintf(stderr, "%s: Finalizing partitions\n", - __func__); - r = gpt2_set_boot_chain(fd, NORMAL_BOOT); - if (r < 0) { - fprintf(stderr, "%s: Setting secondary GPT to normal boot failed\n", - __func__); - goto EXIT; - } - - r = gpt_set_state(fd, SECONDARY_GPT, GPT_OK); - if (r) { - fprintf(stderr, "%s: Fixing secondary GPT header failed\n", - __func__); - goto EXIT; - } - break; - default:; - } - -EXIT: - if (fd >= 0) { - fsync(fd); - close(fd); - } - return r; -} - -int add_lun_to_update_list(char *lun_path, struct update_data *dat) -{ - uint32_t i = 0; - struct stat st; - if (!lun_path || !dat){ - fprintf(stderr, "%s: Invalid data", - __func__); - return -1; - } - if (stat(lun_path, &st)) { - fprintf(stderr, "%s: Unable to access %s. Skipping adding to list", - __func__, - lun_path); - return -1; - } - if (dat->num_valid_entries == 0) { - fprintf(stderr, "%s: Copying %s into lun_list[%d]\n", - __func__, - lun_path, - i); - strlcpy(dat->lun_list[0], lun_path, - PATH_MAX * sizeof(char)); - dat->num_valid_entries = 1; - } else { - for (i = 0; (i < dat->num_valid_entries) && - (dat->num_valid_entries < MAX_LUNS - 1); i++) { - //Check if the current LUN is not already part - //of the lun list - if (!strncmp(lun_path,dat->lun_list[i], - strlen(dat->lun_list[i]))) { - //LUN already in list..Return - return 0; - } - } - fprintf(stderr, "%s: Copying %s into lun_list[%d]\n", - __func__, - lun_path, - dat->num_valid_entries); - //Add LUN path lun list - strlcpy(dat->lun_list[dat->num_valid_entries], lun_path, - PATH_MAX * sizeof(char)); - dat->num_valid_entries++; - } - return 0; -} - -int prepare_boot_update(enum boot_update_stage stage) -{ - int is_ufs = gpt_utils_is_ufs_device(); - struct stat ufs_dir_stat; - struct update_data data; - int rcode = 0; - uint32_t i = 0; - int is_error = 0; - const char ptn_swap_list[][MAX_GPT_NAME_SIZE] = { PTN_SWAP_LIST }; - //Holds /dev/block/bootdevice/by-name/*bak entry - char buf[PATH_MAX] = {0}; - //Holds the resolved path of the symlink stored in buf - char real_path[PATH_MAX] = {0}; - - if (!is_ufs) { - //emmc device. Just pass in path to mmcblk0 - return prepare_partitions(stage, BLK_DEV_FILE); - } else { - //Now we need to find the list of LUNs over - //which the boot critical images are spread - //and set them up for failsafe updates.To do - //this we find out where the symlinks for the - //each of the paths under - ///dev/block/bootdevice/by-name/PTN_SWAP_LIST - //actually point to. - fprintf(stderr, "%s: Running on a UFS device\n", - __func__); - memset(&data, '\0', sizeof(struct update_data)); - for (i=0; i < ARRAY_SIZE(ptn_swap_list); i++) { - //XBL on UFS does not follow the convention - //of being loaded based on well known GUID'S. - //We take care of switching the UFS boot LUN - //explicitly later on. - if (!strncmp(ptn_swap_list[i], - PTN_XBL, - strlen(PTN_XBL))) - continue; - snprintf(buf, sizeof(buf), - "%s/%sbak", - BOOT_DEV_DIR, - ptn_swap_list[i]); - if (stat(buf, &ufs_dir_stat)) { - continue; - } - if (readlink(buf, real_path, sizeof(real_path) - 1) < 0) - { - fprintf(stderr, "%s: readlink error. Skipping %s", - __func__, - strerror(errno)); - } else { - if(strlen(real_path) < PATH_TRUNCATE_LOC + 1){ - fprintf(stderr, "Unknown path.Skipping :%s:\n", - real_path); - } else { - real_path[PATH_TRUNCATE_LOC] = '\0'; - add_lun_to_update_list(real_path, &data); - } - } - memset(buf, '\0', sizeof(buf)); - memset(real_path, '\0', sizeof(real_path)); - } - for (i=0; i < data.num_valid_entries; i++) { - fprintf(stderr, "%s: Preparing %s for update stage %d\n", - __func__, - data.lun_list[i], - stage); - rcode = prepare_partitions(stage, data.lun_list[i]); - if (rcode != 0) - { - fprintf(stderr, "%s: Failed to prepare %s.Continuing..\n", - __func__, - data.lun_list[i]); - is_error = 1; - } - } - } - if (is_error) - return -1; - return 0; -} - -//Given a parttion name(eg: rpm) get the path to the block device that -//represents the GPT disk the partition resides on. In the case of emmc it -//would be the default emmc dev(/dev/block/mmcblk0). In the case of UFS we look -//through the /dev/block/bootdevice/by-name/ tree for partname, and resolve -//the path to the LUN from there. -static int get_dev_path_from_partition_name(const char *partname, - char *buf, - size_t buflen) -{ - struct stat st; - char path[PATH_MAX] = {0}; - if (!partname || !buf || buflen < ((PATH_TRUNCATE_LOC) + 1)) { - ALOGE("%s: Invalid argument", __func__); - goto error; - } - if (gpt_utils_is_ufs_device()) { - //Need to find the lun that holds partition partname - snprintf(path, sizeof(path), - "%s/%s", - BOOT_DEV_DIR, - partname); - if (stat(path, &st)) { - goto error; - } - if (readlink(path, buf, buflen) < 0) - { - goto error; - } else { - buf[PATH_TRUNCATE_LOC] = '\0'; - } - } else { - snprintf(buf, buflen, BLK_DEV_FILE); - } - return 0; - -error: - return -1; -} - -int gpt_utils_get_partition_map(vector& ptn_list, - map>& partition_map) { - char devpath[PATH_MAX] = {'\0'}; - map>::iterator it; - if (ptn_list.size() < 1) { - fprintf(stderr, "%s: Invalid ptn list\n", __func__); - goto error; - } - //Go through the passed in list - for (uint32_t i = 0; i < ptn_list.size(); i++) - { - //Key in the map is the path to the device that holds the - //partition - if (get_dev_path_from_partition_name(ptn_list[i].c_str(), - devpath, - sizeof(devpath))) { - //Not necessarily an error. The partition may just - //not be present. - continue; - } - string path = devpath; - it = partition_map.find(path); - if (it != partition_map.end()) { - it->second.push_back(ptn_list[i]); - } else { - vector str_vec; - str_vec.push_back( ptn_list[i]); - partition_map.insert(pair> - (path, str_vec)); - } - memset(devpath, '\0', sizeof(devpath)); - } - return 0; -error: - return -1; -} - -//Get the block size of the disk represented by decsriptor fd -static uint32_t gpt_get_block_size(int fd) -{ - uint32_t block_size = 0; - if (fd < 0) { - ALOGE("%s: invalid descriptor", - __func__); - goto error; - } - if (ioctl(fd, BLKSSZGET, &block_size) != 0) { - ALOGE("%s: Failed to get GPT dev block size : %s", - __func__, - strerror(errno)); - goto error; - } - return block_size; -error: - return 0; -} - -//Write the GPT header present in the passed in buffer back to the -//disk represented by fd -static int gpt_set_header(uint8_t *gpt_header, int fd, - enum gpt_instance instance) -{ - uint32_t block_size = 0; - off64_t gpt_header_offset = 0; - if (!gpt_header || fd < 0) { - ALOGE("%s: Invalid arguments", - __func__); - goto error; - } - block_size = gpt_get_block_size(fd); - if (block_size == 0) { - ALOGE("%s: Failed to get block size", __func__); - goto error; - } - if (instance == PRIMARY_GPT) - gpt_header_offset = block_size; - else - gpt_header_offset = lseek64(fd, 0, SEEK_END) - block_size; - if (gpt_header_offset <= 0) { - ALOGE("%s: Failed to get gpt header offset",__func__); - goto error; - } - if (blk_rw(fd, 1, gpt_header_offset, gpt_header, block_size)) { - ALOGE("%s: Failed to write back GPT header", __func__); - goto error; - } - return 0; -error: - return -1; -} - -//Read out the GPT header for the disk that contains the partition partname -static uint8_t* gpt_get_header(const char *partname, enum gpt_instance instance) -{ - uint8_t* hdr = NULL; - char devpath[PATH_MAX] = {0}; - int64_t hdr_offset = 0; - uint32_t block_size = 0; - int fd = -1; - if (!partname) { - ALOGE("%s: Invalid partition name", __func__); - goto error; - } - if (get_dev_path_from_partition_name(partname, devpath, sizeof(devpath)) - != 0) { - ALOGE("%s: Failed to resolve path for %s", - __func__, - partname); - goto error; - } - fd = open(devpath, O_RDWR); - if (fd < 0) { - ALOGE("%s: Failed to open %s : %s", - __func__, - devpath, - strerror(errno)); - goto error; - } - block_size = gpt_get_block_size(fd); - if (block_size == 0) - { - ALOGE("%s: Failed to get gpt block size for %s", - __func__, - partname); - goto error; - } - - hdr = (uint8_t*)malloc(block_size); - if (!hdr) { - ALOGE("%s: Failed to allocate memory for gpt header", - __func__); - } - if (instance == PRIMARY_GPT) - hdr_offset = block_size; - else { - hdr_offset = lseek64(fd, 0, SEEK_END) - block_size; - } - if (hdr_offset < 0) { - ALOGE("%s: Failed to get gpt header offset", - __func__); - goto error; - } - if (blk_rw(fd, 0, hdr_offset, hdr, block_size)) { - ALOGE("%s: Failed to read GPT header from device", - __func__); - goto error; - } - close(fd); - return hdr; -error: - if (fd >= 0) - close(fd); - if (hdr) - free(hdr); - return NULL; -} - -//Returns the partition entry array based on the -//passed in buffer which contains the gpt header. -//The fd here is the descriptor for the 'disk' which -//holds the partition -static uint8_t* gpt_get_pentry_arr(uint8_t *hdr, int fd) -{ - uint64_t pentries_start = 0; - uint32_t pentry_size = 0; - uint32_t block_size = 0; - uint32_t pentries_arr_size = 0; - uint8_t *pentry_arr = NULL; - int rc = 0; - if (!hdr) { - ALOGE("%s: Invalid header", __func__); - goto error; - } - if (fd < 0) { - ALOGE("%s: Invalid fd", __func__); - goto error; - } - block_size = gpt_get_block_size(fd); - if (!block_size) { - ALOGE("%s: Failed to get gpt block size for", - __func__); - goto error; - } - pentries_start = GET_8_BYTES(hdr + PENTRIES_OFFSET) * block_size; - pentry_size = GET_4_BYTES(hdr + PENTRY_SIZE_OFFSET); - pentries_arr_size = - GET_4_BYTES(hdr + PARTITION_COUNT_OFFSET) * pentry_size; - pentry_arr = (uint8_t*)calloc(1, pentries_arr_size); - if (!pentry_arr) { - ALOGE("%s: Failed to allocate memory for partition array", - __func__); - goto error; - } - rc = blk_rw(fd, 0, - pentries_start, - pentry_arr, - pentries_arr_size); - if (rc) { - ALOGE("%s: Failed to read partition entry array", - __func__); - goto error; - } - return pentry_arr; -error: - if (pentry_arr) - free(pentry_arr); - return NULL; -} - -static int gpt_set_pentry_arr(uint8_t *hdr, int fd, uint8_t* arr) -{ - uint32_t block_size = 0; - uint64_t pentries_start = 0; - uint32_t pentry_size = 0; - uint32_t pentries_arr_size = 0; - int rc = 0; - if (!hdr || fd < 0 || !arr) { - ALOGE("%s: Invalid argument", __func__); - goto error; - } - block_size = gpt_get_block_size(fd); - if (!block_size) { - ALOGE("%s: Failed to get gpt block size for", - __func__); - goto error; - } - pentries_start = GET_8_BYTES(hdr + PENTRIES_OFFSET) * block_size; - pentry_size = GET_4_BYTES(hdr + PENTRY_SIZE_OFFSET); - pentries_arr_size = - GET_4_BYTES(hdr + PARTITION_COUNT_OFFSET) * pentry_size; - rc = blk_rw(fd, 1, - pentries_start, - arr, - pentries_arr_size); - if (rc) { - ALOGE("%s: Failed to read partition entry array", - __func__); - goto error; - } - return 0; -error: - return -1; -} - - - -//Allocate a handle used by calls to the "gpt_disk" api's -struct gpt_disk * gpt_disk_alloc() -{ - struct gpt_disk *disk; - disk = (struct gpt_disk *)malloc(sizeof(struct gpt_disk)); - if (!disk) { - ALOGE("%s: Failed to allocate memory", __func__); - goto end; - } - memset(disk, 0, sizeof(struct gpt_disk)); -end: - return disk; -} - -//Free previously allocated/initialized handle -void gpt_disk_free(struct gpt_disk *disk) -{ - if (!disk) - return; - if (disk->hdr) - free(disk->hdr); - if (disk->hdr_bak) - free(disk->hdr_bak); - if (disk->pentry_arr) - free(disk->pentry_arr); - if (disk->pentry_arr_bak) - free(disk->pentry_arr_bak); - free(disk); - return; -} - -//fills up the passed in gpt_disk struct with information about the -//disk represented by path dev. Returns 0 on success and -1 on error. -int gpt_disk_get_disk_info(const char *dev, struct gpt_disk *dsk) -{ - - struct gpt_disk *disk = NULL; - int fd = -1; - uint32_t gpt_header_size = 0; - uint32_t crc_zero; - - crc_zero = crc32(0L, Z_NULL, 0); - if (!dsk || !dev) { - ALOGE("%s: Invalid arguments", __func__); - goto error; - } - disk = dsk; - disk->hdr = gpt_get_header(dev, PRIMARY_GPT); - if (!disk->hdr) { - ALOGE("%s: Failed to get primary header", __func__); - goto error; - } - gpt_header_size = GET_4_BYTES(disk->hdr + HEADER_SIZE_OFFSET); - disk->hdr_crc = crc32(crc_zero, disk->hdr, gpt_header_size); - disk->hdr_bak = gpt_get_header(dev, SECONDARY_GPT); - if (!disk->hdr_bak) { - ALOGE("%s: Failed to get backup header", __func__); - goto error; - } - disk->hdr_bak_crc = crc32(crc_zero, disk->hdr_bak, gpt_header_size); - - //Descriptor for the block device. We will use this for further - //modifications to the partition table - if (get_dev_path_from_partition_name(dev, - disk->devpath, - sizeof(disk->devpath)) != 0) { - ALOGE("%s: Failed to resolve path for %s", - __func__, - dev); - goto error; - } - fd = open(disk->devpath, O_RDWR); - if (fd < 0) { - ALOGE("%s: Failed to open %s: %s", - __func__, - disk->devpath, - strerror(errno)); - goto error; - } - disk->pentry_arr = gpt_get_pentry_arr(disk->hdr, fd); - if (!disk->pentry_arr) { - ALOGE("%s: Failed to obtain partition entry array", - __func__); - goto error; - } - disk->pentry_arr_bak = gpt_get_pentry_arr(disk->hdr_bak, fd); - if (!disk->pentry_arr_bak) { - ALOGE("%s: Failed to obtain backup partition entry array", - __func__); - goto error; - } - disk->pentry_size = GET_4_BYTES(disk->hdr + PENTRY_SIZE_OFFSET); - disk->pentry_arr_size = - GET_4_BYTES(disk->hdr + PARTITION_COUNT_OFFSET) * - disk->pentry_size; - disk->pentry_arr_crc = GET_4_BYTES(disk->hdr + PARTITION_CRC_OFFSET); - disk->pentry_arr_bak_crc = GET_4_BYTES(disk->hdr_bak + - PARTITION_CRC_OFFSET); - disk->block_size = gpt_get_block_size(fd); - close(fd); - disk->is_initialized = GPT_DISK_INIT_MAGIC; - return 0; -error: - if (fd >= 0) - close(fd); - return -1; -} - -//Get pointer to partition entry from a allocated gpt_disk structure -uint8_t* gpt_disk_get_pentry(struct gpt_disk *disk, - const char *partname, - enum gpt_instance instance) -{ - uint8_t *ptn_arr = NULL; - if (!disk || !partname || disk->is_initialized != GPT_DISK_INIT_MAGIC) { - ALOGE("%s: Invalid argument",__func__); - goto error; - } - ptn_arr = (instance == PRIMARY_GPT) ? - disk->pentry_arr : disk->pentry_arr_bak; - return (gpt_pentry_seek(partname, ptn_arr, - ptn_arr + disk->pentry_arr_size , - disk->pentry_size)); -error: - return NULL; -} - -//Update CRC values for the various components of the gpt_disk -//structure. This function should be called after any of the fields -//have been updated before the structure contents are written back to -//disk. -int gpt_disk_update_crc(struct gpt_disk *disk) -{ - uint32_t gpt_header_size = 0; - uint32_t crc_zero; - crc_zero = crc32(0L, Z_NULL, 0); - if (!disk || (disk->is_initialized != GPT_DISK_INIT_MAGIC)) { - ALOGE("%s: invalid argument", __func__); - goto error; - } - //Recalculate the CRC of the primary partiton array - disk->pentry_arr_crc = crc32(crc_zero, - disk->pentry_arr, - disk->pentry_arr_size); - //Recalculate the CRC of the backup partition array - disk->pentry_arr_bak_crc = crc32(crc_zero, - disk->pentry_arr_bak, - disk->pentry_arr_size); - //Update the partition CRC value in the primary GPT header - PUT_4_BYTES(disk->hdr + PARTITION_CRC_OFFSET, disk->pentry_arr_crc); - //Update the partition CRC value in the backup GPT header - PUT_4_BYTES(disk->hdr_bak + PARTITION_CRC_OFFSET, - disk->pentry_arr_bak_crc); - //Update the CRC value of the primary header - gpt_header_size = GET_4_BYTES(disk->hdr + HEADER_SIZE_OFFSET); - //Header CRC is calculated with its own CRC field set to 0 - PUT_4_BYTES(disk->hdr + HEADER_CRC_OFFSET, 0); - PUT_4_BYTES(disk->hdr_bak + HEADER_CRC_OFFSET, 0); - disk->hdr_crc = crc32(crc_zero, disk->hdr, gpt_header_size); - disk->hdr_bak_crc = crc32(crc_zero, disk->hdr_bak, gpt_header_size); - PUT_4_BYTES(disk->hdr + HEADER_CRC_OFFSET, disk->hdr_crc); - PUT_4_BYTES(disk->hdr_bak + HEADER_CRC_OFFSET, disk->hdr_bak_crc); - return 0; -error: - return -1; -} - -//Write the contents of struct gpt_disk back to the actual disk -int gpt_disk_commit(struct gpt_disk *disk) -{ - int fd = -1; - if (!disk || (disk->is_initialized != GPT_DISK_INIT_MAGIC)){ - ALOGE("%s: Invalid args", __func__); - goto error; - } - fd = open(disk->devpath, O_RDWR | O_DSYNC); - if (fd < 0) { - ALOGE("%s: Failed to open %s: %s", - __func__, - disk->devpath, - strerror(errno)); - goto error; - } - //Write the primary header - if(gpt_set_header(disk->hdr, fd, PRIMARY_GPT) != 0) { - ALOGE("%s: Failed to update primary GPT header", - __func__); - goto error; - } - //Write back the primary partition array - if (gpt_set_pentry_arr(disk->hdr, fd, disk->pentry_arr)) { - ALOGE("%s: Failed to write primary GPT partition arr", - __func__); - goto error; - } - //Write back the secondary header - if(gpt_set_header(disk->hdr_bak, fd, SECONDARY_GPT) != 0) { - ALOGE("%s: Failed to update secondary GPT header", - __func__); - goto error; - } - //Write back the secondary partition array - if (gpt_set_pentry_arr(disk->hdr_bak, fd, disk->pentry_arr_bak)) { - ALOGE("%s: Failed to write secondary GPT partition arr", - __func__); - goto error; - } - fsync(fd); - close(fd); - return 0; -error: - if (fd >= 0) - close(fd); - return -1; -} diff --git a/gpt-utils/gpt-utils.h b/gpt-utils/gpt-utils.h deleted file mode 100644 index 938587b..0000000 --- a/gpt-utils/gpt-utils.h +++ /dev/null @@ -1,193 +0,0 @@ -/* - * Copyright (c) 2013,2016, The Linux Foundation. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of The Linux Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __GPT_UTILS_H__ -#define __GPT_UTILS_H__ -#include -#include -#include -#ifdef __cplusplus -extern "C" { -#endif -#include -#include -/****************************************************************************** - * GPT HEADER DEFINES - ******************************************************************************/ -#define GPT_SIGNATURE "EFI PART" -#define HEADER_SIZE_OFFSET 12 -#define HEADER_CRC_OFFSET 16 -#define PRIMARY_HEADER_OFFSET 24 -#define BACKUP_HEADER_OFFSET 32 -#define FIRST_USABLE_LBA_OFFSET 40 -#define LAST_USABLE_LBA_OFFSET 48 -#define PENTRIES_OFFSET 72 -#define PARTITION_COUNT_OFFSET 80 -#define PENTRY_SIZE_OFFSET 84 -#define PARTITION_CRC_OFFSET 88 - -#define TYPE_GUID_OFFSET 0 -#define TYPE_GUID_SIZE 16 -#define PTN_ENTRY_SIZE 128 -#define UNIQUE_GUID_OFFSET 16 -#define FIRST_LBA_OFFSET 32 -#define LAST_LBA_OFFSET 40 -#define ATTRIBUTE_FLAG_OFFSET 48 -#define PARTITION_NAME_OFFSET 56 -#define MAX_GPT_NAME_SIZE 72 - -/****************************************************************************** - * AB RELATED DEFINES - ******************************************************************************/ -//Bit 48 onwords in the attribute field are the ones where we are allowed to -//store our AB attributes. -#define AB_FLAG_OFFSET (ATTRIBUTE_FLAG_OFFSET + 6) -#define GPT_DISK_INIT_MAGIC 0xABCD -#define AB_PARTITION_ATTR_SLOT_ACTIVE (0x1<<2) -#define AB_PARTITION_ATTR_BOOT_SUCCESSFUL (0x1<<6) -#define AB_PARTITION_ATTR_UNBOOTABLE (0x1<<7) -#define AB_SLOT_ACTIVE_VAL 0x3F -#define AB_SLOT_INACTIVE_VAL 0x0 -#define AB_SLOT_ACTIVE 1 -#define AB_SLOT_INACTIVE 0 -#define AB_SLOT_A_SUFFIX "_a" -#define AB_SLOT_B_SUFFIX "_b" -#define PTN_XBL "xbl" -#define PTN_XBL_CFG "xbl_config" -#define PTN_SWAP_LIST PTN_XBL, PTN_XBL_CFG, "sbl1", "rpm", "tz", "aboot", "abl", "hyp", "lksecapp", "keymaster", "cmnlib", "cmnlib32", "cmnlib64", "pmic", "apdp", "devcfg", "hosd", "keystore", "msadp", "mdtp", "mdtpsecapp", "dsp", "aop", "qupfw", "vbmeta", "dtbo", "imagefv", "ImageFv", "multiimgoem", "multiimgqti", "uefisecapp", "shrm", "cpucp" -#define AB_PTN_LIST PTN_SWAP_LIST, "boot", "system", "vendor", "odm", "modem", "bluetooth", "fsg", "logo", "mdm1m9kefs3", "prov", "spss", "storsec", "vbmeta_system", "vendor_boot" -#define BOOT_DEV_DIR "/dev/block/bootdevice/by-name" - -/****************************************************************************** - * HELPER MACROS - ******************************************************************************/ -#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) -/****************************************************************************** - * TYPES - ******************************************************************************/ -enum boot_update_stage { - UPDATE_MAIN = 1, - UPDATE_BACKUP, - UPDATE_FINALIZE -}; - -enum gpt_instance { - PRIMARY_GPT = 0, - SECONDARY_GPT -}; - -enum boot_chain { - NORMAL_BOOT = 0, - BACKUP_BOOT -}; - -struct gpt_disk { - //GPT primary header - uint8_t *hdr; - //primary header crc - uint32_t hdr_crc; - //GPT backup header - uint8_t *hdr_bak; - //backup header crc - uint32_t hdr_bak_crc; - //Partition entries array - uint8_t *pentry_arr; - //Partition entries array for backup table - uint8_t *pentry_arr_bak; - //Size of the pentry array - uint32_t pentry_arr_size; - //Size of each element in the pentry array - uint32_t pentry_size; - //CRC of the partition entry array - uint32_t pentry_arr_crc; - //CRC of the backup partition entry array - uint32_t pentry_arr_bak_crc; - //Path to block dev representing the disk - char devpath[PATH_MAX]; - //Block size of disk - uint32_t block_size; - uint32_t is_initialized; -}; - -/****************************************************************************** - * FUNCTION PROTOTYPES - ******************************************************************************/ -int prepare_boot_update(enum boot_update_stage stage); -//GPT disk methods -struct gpt_disk* gpt_disk_alloc(); -//Free previously allocated gpt_disk struct -void gpt_disk_free(struct gpt_disk *disk); -//Get the details of the disk holding the partition whose name -//is passed in via dev -int gpt_disk_get_disk_info(const char *dev, struct gpt_disk *disk); - -//Get pointer to partition entry from a allocated gpt_disk structure -uint8_t* gpt_disk_get_pentry(struct gpt_disk *disk, - const char *partname, - enum gpt_instance instance); - -//Update the crc fields of the modified disk structure -int gpt_disk_update_crc(struct gpt_disk *disk); - -//Write the contents of struct gpt_disk back to the actual disk -int gpt_disk_commit(struct gpt_disk *disk); - -//Return if the current device is UFS based or not -int gpt_utils_is_ufs_device(); - -//Swtich betwieen using either the primary or the backup -//boot LUN for boot. This is required since UFS boot partitions -//cannot have a backup GPT which is what we use for failsafe -//updates of the other 'critical' partitions. This function will -//not be invoked for emmc targets and on UFS targets is only required -//to be invoked for XBL. -// -//The algorithm to do this is as follows: -//- Find the real block device(eg: /dev/block/sdb) that corresponds -// to the /dev/block/bootdevice/by-name/xbl(bak) symlink -// -//- Once we have the block device 'node' name(sdb in the above example) -// use this node to to locate the scsi generic device that represents -// it by checking the file /sys/block/sdb/device/scsi_generic/sgY -// -//- Once we locate sgY we call the query ioctl on /dev/sgy to switch -//the boot lun to either LUNA or LUNB -int gpt_utils_set_xbl_boot_partition(enum boot_chain chain); - -//Given a vector of partition names as a input and a reference to a map, -//populate the map to indicate which physical disk each of the partitions -//sits on. The key in the map is the path to the block device where the -//partiton lies and the value is a vector of strings indicating which of -//the passed in partiton names sits on that device. -int gpt_utils_get_partition_map(std::vector& partition_list, - std::map>& partition_map); -#ifdef __cplusplus -} -#endif -#endif /* __GPT_UTILS_H__ */ diff --git a/gpt-utils/recovery-ufs-bsg.cpp b/gpt-utils/recovery-ufs-bsg.cpp deleted file mode 100644 index 4249aa6..0000000 --- a/gpt-utils/recovery-ufs-bsg.cpp +++ /dev/null @@ -1,255 +0,0 @@ -/* - * Copyright (c) 2020 The Linux Foundation. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of The Linux Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - -#define LOG_TAG "recovery_ufs" - -#include "recovery-ufs-bsg.h" - -#ifndef _BSG_FRAMEWORK_KERNEL_HEADERS -#ifndef _GENERIC_KERNEL_HEADERS -#include -#include -#endif -#endif - -//Size of the buffer that needs to be passed to the UFS ioctl -#define UFS_ATTR_DATA_SIZE 32 - -#ifdef _BSG_FRAMEWORK_KERNEL_HEADERS -static int get_ufs_bsg_dev(void) -{ - DIR *dir; - struct dirent *ent; - int ret = -ENODEV; - - if ((dir = opendir ("/dev")) != NULL) { - /* read all the files and directories within directory */ - while ((ent = readdir(dir)) != NULL) { - if (!strcmp(ent->d_name, "ufs-bsg") || - !strcmp(ent->d_name, "ufs-bsg0")) { - snprintf(ufs_bsg_dev, FNAME_SZ, "/dev/%s", ent->d_name); - ret = 0; - break; - } - } - if (ret) - ALOGE("could not find the ufs-bsg dev\n"); - closedir (dir); - } else { - /* could not open directory */ - ALOGE("could not open /dev (error no: %d)\n", errno); - ret = -EINVAL; - } - - return ret; -} - -int ufs_bsg_dev_open(void) -{ - int ret; - if (!fd_ufs_bsg) { - fd_ufs_bsg = open(ufs_bsg_dev, O_RDWR); - ret = errno; - if (fd_ufs_bsg < 0) { - ALOGE("Unable to open %s (error no: %d)", - ufs_bsg_dev, errno); - fd_ufs_bsg = 0; - return ret; - } - } - return 0; -} - -void ufs_bsg_dev_close(void) -{ - if (fd_ufs_bsg) { - close(fd_ufs_bsg); - fd_ufs_bsg = 0; - } -} - -static int ufs_bsg_ioctl(int fd, struct ufs_bsg_request *req, - struct ufs_bsg_reply *rsp, __u8 *buf, __u32 buf_len, - enum bsg_ioctl_dir dir) -{ - int ret; - struct sg_io_v4 sg_io{}; - - sg_io.guard = 'Q'; - sg_io.protocol = BSG_PROTOCOL_SCSI; - sg_io.subprotocol = BSG_SUB_PROTOCOL_SCSI_TRANSPORT; - sg_io.request_len = sizeof(*req); - sg_io.request = (__u64)req; - sg_io.response = (__u64)rsp; - sg_io.max_response_len = sizeof(*rsp); - if (dir == BSG_IOCTL_DIR_FROM_DEV) { - sg_io.din_xfer_len = buf_len; - sg_io.din_xferp = (__u64)(buf); - } else { - sg_io.dout_xfer_len = buf_len; - sg_io.dout_xferp = (__u64)(buf); - } - - ret = ioctl(fd, SG_IO, &sg_io); - if (ret) - ALOGE("%s: Error from sg_io ioctl (return value: %d, error no: %d, reply result from LLD: %d\n)", - __func__, ret, errno, rsp->result); - - if (sg_io.info || rsp->result) { - ALOGE("%s: Error from sg_io info (check sg info: device_status: 0x%x, transport_status: 0x%x, driver_status: 0x%x, reply result from LLD: %d\n)", - __func__, sg_io.device_status, sg_io.transport_status, - sg_io.driver_status, rsp->result); - ret = -EAGAIN; - } - - return ret; -} - -static void compose_ufs_bsg_query_req(struct ufs_bsg_request *req, __u8 func, - __u8 opcode, __u8 idn, __u8 index, __u8 sel, - __u16 length) -{ - struct utp_upiu_header *hdr = &req->upiu_req.header; - struct utp_upiu_query *qr = &req->upiu_req.qr; - - req->msgcode = UTP_UPIU_QUERY_REQ; - hdr->dword_0 = DWORD(UTP_UPIU_QUERY_REQ, 0, 0, 0); - hdr->dword_1 = DWORD(0, func, 0, 0); - hdr->dword_2 = DWORD(0, 0, length >> 8, (__u8)length); - qr->opcode = opcode; - qr->idn = idn; - qr->index = index; - qr->selector = sel; - qr->length = htobe16(length); -} - - -static int ufs_query_attr(int fd, __u32 value, - __u8 func, __u8 opcode, __u8 idn, - __u8 index, __u8 sel) -{ - struct ufs_bsg_request req{}; - struct ufs_bsg_reply rsp{}; - enum bsg_ioctl_dir dir = BSG_IOCTL_DIR_FROM_DEV; - int ret = 0; - - if (opcode == QUERY_REQ_OP_WRITE_DESC || opcode == QUERY_REQ_OP_WRITE_ATTR) - dir = BSG_IOCTL_DIR_TO_DEV; - - req.upiu_req.qr.value = htobe32(value); - - compose_ufs_bsg_query_req(&req, func, opcode, idn, index, sel, 0); - - ret = ufs_bsg_ioctl(fd, &req, &rsp, 0, 0, dir); - if (ret) - ALOGE("%s: Error from ufs_bsg_ioctl (return value: %d, error no: %d\n)", - __func__, ret, errno); - - return ret; -} - -int32_t set_boot_lun(char *sg_dev __unused,uint8_t lun_id) -{ - int32_t ret; - __u32 boot_lun_id = lun_id; - - ret = get_ufs_bsg_dev(); - if (ret) - return ret; - ALOGV("Found the ufs bsg dev: %s\n", ufs_bsg_dev); - - ret = ufs_bsg_dev_open(); - if (ret) - return ret; - ALOGV("Opened ufs bsg dev: %s\n", ufs_bsg_dev); - - ret = ufs_query_attr(fd_ufs_bsg, boot_lun_id, QUERY_REQ_FUNC_STD_WRITE, - QUERY_REQ_OP_WRITE_ATTR, QUERY_ATTR_IDN_BOOT_LU_EN, 0, 0); - if (ret) { - ALOGE("Error requesting ufs attr idn %d via query ioctl (return value: %d, error no: %d)", - QUERY_ATTR_IDN_BOOT_LU_EN, ret, errno); - goto out; - } -out: - ufs_bsg_dev_close(); - return ret; -} -#endif - -#ifndef _BSG_FRAMEWORK_KERNEL_HEADERS -int32_t set_boot_lun(char *sg_dev, uint8_t boot_lun_id) -{ -#ifndef _GENERIC_KERNEL_HEADERS - int fd = -1; - int rc; - struct ufs_ioctl_query_data *data = NULL; - size_t ioctl_data_size = sizeof(struct ufs_ioctl_query_data) + UFS_ATTR_DATA_SIZE; - - data = (struct ufs_ioctl_query_data*)malloc(ioctl_data_size); - if (!data) { - fprintf(stderr, "%s: Failed to alloc query data struct\n", - __func__); - goto error; - } - memset(data, 0, ioctl_data_size); - data->opcode = UPIU_QUERY_OPCODE_WRITE_ATTR; - data->idn = QUERY_ATTR_IDN_BOOT_LU_EN; - data->buf_size = UFS_ATTR_DATA_SIZE; - data->buffer[0] = boot_lun_id; - fd = open(sg_dev, O_RDWR); - if (fd < 0) { - fprintf(stderr, "%s: Failed to open %s(%s)\n", - __func__, - sg_dev, - strerror(errno)); - goto error; - } - rc = ioctl(fd, UFS_IOCTL_QUERY, data); - if (rc) { - fprintf(stderr, "%s: UFS query ioctl failed(%s)\n", - __func__, - strerror(errno)); - goto error; - } - close(fd); - free(data); - return 0; -error: - if (fd >= 0) - close(fd); - if (data) - free(data); - return -1; -#else - return 0; -#endif -} -#endif - diff --git a/gpt-utils/recovery-ufs-bsg.h b/gpt-utils/recovery-ufs-bsg.h deleted file mode 100644 index fafea5f..0000000 --- a/gpt-utils/recovery-ufs-bsg.h +++ /dev/null @@ -1,131 +0,0 @@ -#ifndef __RECOVERY_UFS_BSG_H__ -#define __RECOVERY_UFS_BSG_H__ - -/* - * Copyright (c) 2020 The Linux Foundation. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of The Linux Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef ANDROID -#include "cutils/log.h" -#endif - -#ifdef OE -#include -#define LOGI(...) syslog(LOG_NOTICE, "INFO:" __VA_ARGS__) -#define LOGV(...) syslog(LOG_NOTICE,"VERB:" __VA_ARGS__) -#define LOGD(...) syslog(LOG_DEBUG,"DBG:" __VA_ARGS__) -#define LOGE(...) syslog(LOG_ERR,"ERR:" __VA_ARGS__) -#define LOGW(...) syslog(LOG_WARNING,"WRN:" __VA_ARGS__) -#define strlcat(d,s,l) snprintf(d+strlen(d),l,"%s",s) -#endif - - - -#define FNAME_SZ 64 - -#define SG_IO 0x2285 - -#define DWORD(b3, b2, b1, b0) htobe32((b3 << 24) | (b2 << 16) |\ - (b1 << 8) | b0) - -/* UFS BSG device nodes */ -char ufs_bsg_dev[FNAME_SZ] = "/dev/ufs-bsg"; - -int fd_ufs_bsg; - -int32_t set_ufs_lun(uint8_t lun_id); - -#ifdef _BSG_FRAMEWORK_KERNEL_HEADERS -/* UPIU Transaction Codes */ -enum { - UTP_UPIU_NOP_OUT = 0x00, - UTP_UPIU_COMMAND = 0x01, - UTP_UPIU_DATA_OUT = 0x02, - UTP_UPIU_TASK_REQ = 0x04, - UTP_UPIU_QUERY_REQ = 0x16, -}; - -/* UPIU Query Function field */ -enum { - QUERY_REQ_FUNC_STD_READ = 0x01, - QUERY_REQ_FUNC_STD_WRITE = 0x81, -}; - -enum query_req_opcode { - QUERY_REQ_OP_READ_DESC = 0x1, - QUERY_REQ_OP_WRITE_DESC = 0x2, - QUERY_REQ_OP_READ_ATTR = 0x3, - QUERY_REQ_OP_WRITE_ATTR = 0x4, - QUERY_REQ_OP_READ_FLAG = 0x5, - QUERY_REQ_OP_SET_FLAG = 0x6, - QUERY_REQ_OP_CLEAR_FLAG = 0x7, - QUERY_REQ_OP_TOGGLE_FLAG = 0x8, -}; - -enum query_desc_idn { - QUERY_DESC_IDN_DEVICE = 0x0, - QUERY_DESC_IDN_UNIT = 0x2, - QUERY_DESC_IDN_GEOMETRY = 0x7, -}; - -enum query_desc_size { - QUERY_DESC_SIZE_DEVICE = 0x40, - QUERY_DESC_SIZE_GEOMETRY = 0x48, - QUERY_DESC_SIZE_UNIT = 0x23, -}; - -enum bsg_ioctl_dir { - BSG_IOCTL_DIR_TO_DEV, - BSG_IOCTL_DIR_FROM_DEV, -}; - -enum query_attr_idn { - QUERY_ATTR_IDN_BOOT_LU_EN = 0x00, - QUERY_ATTR_IDN_RESERVED = 0x01, - QUERY_ATTR_IDN_POWER_MODE = 0x02, - QUERY_ATTR_IDN_ACTIVE_ICC_LVL = 0x03, -}; -#endif /* _BSG_FRAMEWORK_KERNEL_HEADERS */ - -#endif /* __RECOVERY_UFS_BSG_H__ */ diff --git a/gpt-utils/sparse_crc32.cpp b/gpt-utils/sparse_crc32.cpp deleted file mode 100644 index 267322c..0000000 --- a/gpt-utils/sparse_crc32.cpp +++ /dev/null @@ -1,97 +0,0 @@ -/*- - * COPYRIGHT (C) 1986 Gary S. Brown. You may use this program, or - * code or tables extracted from it, as desired without restriction. - */ - -/* - * First, the polynomial itself and its table of feedback terms. The - * polynomial is - * X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0 - * - * Note that we take it "backwards" and put the highest-order term in - * the lowest-order bit. The X^32 term is "implied"; the LSB is the - * X^31 term, etc. The X^0 term (usually shown as "+1") results in - * the MSB being 1 - * - * Note that the usual hardware shift register implementation, which - * is what we're using (we're merely optimizing it by doing eight-bit - * chunks at a time) shifts bits into the lowest-order term. In our - * implementation, that means shifting towards the right. Why do we - * do it this way? Because the calculated CRC must be transmitted in - * order from highest-order term to lowest-order term. UARTs transmit - * characters in order from LSB to MSB. By storing the CRC this way - * we hand it to the UART in the order low-byte to high-byte; the UART - * sends each low-bit to hight-bit; and the result is transmission bit - * by bit from highest- to lowest-order term without requiring any bit - * shuffling on our part. Reception works similarly - * - * The feedback terms table consists of 256, 32-bit entries. Notes - * - * The table can be generated at runtime if desired; code to do so - * is shown later. It might not be obvious, but the feedback - * terms simply represent the results of eight shift/xor opera - * tions for all combinations of data and CRC register values - * - * The values must be right-shifted by eight bits by the "updcrc - * logic; the shift must be unsigned (bring in zeroes). On some - * hardware you could probably optimize the shift in assembler by - * using byte-swap instructions - * polynomial $edb88320 - * - * - * CRC32 code derived from work by Gary S. Brown. - */ - -/* Code taken from FreeBSD 8 */ -#include -#include - -static uint32_t crc32_tab[] = { - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, - 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, - 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, - 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, - 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, - 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, - 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, - 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, - 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, - 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, - 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, - 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, - 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, - 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, - 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, - 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, - 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, - 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, - 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, - 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, - 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, - 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, - 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, - 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, - 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, - 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, - 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, - 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, - 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, - 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d}; - -/* - * A function that calculates the CRC-32 based on the table above is - * given below for documentation purposes. An equivalent implementation - * of this function that's actually used in the kernel can be found - * in sys/libkern.h, where it can be inlined. - */ - -uint32_t sparse_crc32(uint32_t crc_in, const void* buf, size_t size) { - const uint8_t* p = reinterpret_cast(buf); - uint32_t crc; - - crc = crc_in ^ ~0U; - while (size--) crc = crc32_tab[(crc ^ *p++) & 0xFF] ^ (crc >> 8); - return crc ^ ~0U; -} diff --git a/gpt-utils/sparse_crc32.h b/gpt-utils/sparse_crc32.h deleted file mode 100644 index 2702c4f..0000000 --- a/gpt-utils/sparse_crc32.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (C) 2010 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. - */ - -#ifndef _LIBSPARSE_SPARSE_CRC32_H_ -#define _LIBSPARSE_SPARSE_CRC32_H_ - -#include - -uint32_t sparse_crc32(uint32_t crc, const void* buf, size_t size); - -#endif From de472a95f9fd0a04b0204ac54707132d63dd3f3a Mon Sep 17 00:00:00 2001 From: Michael Bestas Date: Fri, 4 Apr 2025 18:30:23 +0530 Subject: [PATCH 61/81] sm6375-common: Add hardware/motorola to soong namespaces Change-Id: I1606d2dc9cef82a4ce9d8764c1f52b59d183e9b2 --- common.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/common.mk b/common.mk index baa7510..6affb59 100644 --- a/common.mk +++ b/common.mk @@ -323,6 +323,7 @@ PRODUCT_SOONG_NAMESPACES += \ hardware/google/interfaces \ hardware/google/pixel \ hardware/lineage/interfaces/power-libperfmgr \ + hardware/motorola \ hardware/qcom-caf/common/libqti-perfd-client # Telephony From 118e788bb453c0aa1ae1014f8ab0262d55604618 Mon Sep 17 00:00:00 2001 From: tejas101k Date: Fri, 4 Apr 2025 18:33:34 +0530 Subject: [PATCH 62/81] sm6375-common: Drop android.hardware.tetheroffload.config from manifest Causes hotspot to crash Change-Id: I4714f2bdf88833979bffd6090e3fbd631e9a22d6 --- manifest.xml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/manifest.xml b/manifest.xml index 5631413..70f908a 100644 --- a/manifest.xml +++ b/manifest.xml @@ -96,15 +96,6 @@ default - - android.hardware.tetheroffload.config - hwbinder - 1.0 - - IOffloadConfig - default - - android.hardware.tetheroffload.control hwbinder From 949bc437d25a742d68dc599689dd91b874ffbe91 Mon Sep 17 00:00:00 2001 From: Anand S Date: Fri, 4 Apr 2025 18:35:25 +0530 Subject: [PATCH 63/81] sm6375-common: sepolicy: Drop duplicate genfs entries Change-Id: I2c60c04641350e5d53987399f35234a1f977e368 --- sepolicy/vendor/genfs_contexts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/sepolicy/vendor/genfs_contexts b/sepolicy/vendor/genfs_contexts index 917e220..1492c53 100644 --- a/sepolicy/vendor/genfs_contexts +++ b/sepolicy/vendor/genfs_contexts @@ -69,9 +69,6 @@ genfscon sysfs /devices/virtual/touchscreen genfscon sysfs /devices/platform/soc/a94000.i2c/i2c-2/2-0049/touchscreen u:object_r:vendor_sysfs_touchpanel:s0 genfscon sysfs /devices/platform/soc/4a80000.spi/spi_master/spi0/spi0.[01] u:object_r:vendor_sysfs_touchpanel:s0 -# USB -genfscon sysfs /devices/platform/soc/4e00000.ssusb/mode u:object_r:vendor_sysfs_usb_device:s0 - # Vibrator genfscon sysfs /devices/platform/soc/984000.i2c/i2c-0/0-005a/leds/vibrator u:object_r:sysfs_vibrator:s0 genfscon sysfs /sys/devices/platform/soc/soc:ldo_vib/leds/vibrator(/.*)? u:object_r:vendor_sysfs_vibrator:s0 @@ -89,7 +86,6 @@ genfscon sysfs /devices/platform/soc/soc:mmi,charger/power_supply/mmi_battery/po genfscon sysfs /devices/platform/soc/1c40000.qcom,spmi/spmi-0/spmi0-02/1c40000.qcom,spmi:qcom,pm7250b@2:qcom,qpnp-smb5-mmi/power_supply/battery/wakeup u:object_r:sysfs_wakeup:s0 genfscon sysfs /devices/platform/soc/1c40000.qcom,spmi/spmi-0/spmi0-02/1c40000.qcom,spmi:qcom,pm7250b@2:qcom,qpnp-smb5-mmi/power_supply/mmi_battery/wakeup u:object_r:sysfs_wakeup:s0 genfscon sysfs /devices/platform/soc/1c40000.qcom,spmi/spmi-0/spmi0-02/1c40000.qcom,spmi:qcom,pm7250b@2:qcom,qpnp-smb5/power_supply/qcom_battery/wakeup u:object_r:sysfs_wakeup:s0 -genfscon sysfs /devices/platform/soc/1c40000.qcom,spmi/spmi-0/spmi0-02/1c40000.qcom,spmi:qcom,pm7250b@2:qcom,qpnp-smb5/power_supply/usb/wakeup u:object_r:sysfs_wakeup:s0 genfscon sysfs /devices/platform/soc/4c90000.i2c/i2c-2/2-006a/power_supply/bq25960-standalone/wakeup u:object_r:sysfs_wakeup:s0 genfscon sysfs /devices/platform/soc/soc:mmi_chrg_manager/power_supply/mmi_chrg_manager/wakeup u:object_r:sysfs_wakeup:s0 genfscon sysfs /devices/platform/soc/soc:qcom,msm-audio-apr/soc:qcom,msm-audio-apr:qcom,q6core-audio/soc:qcom,msm-audio-apr:qcom,q6core-audio:sound/Listen u:object_r:sysfs_wakeup:s0 From b12cf76a55960ec656984429785f30273f92ff08 Mon Sep 17 00:00:00 2001 From: Giovanni Ricca Date: Fri, 11 Apr 2025 14:38:58 +0530 Subject: [PATCH 64/81] sm6375-common: Temporarily downgrade kernel clang version 19.0.1 doesn't boot for us. Let's keep using the old one for now. Change-Id: I6693b36674539c20870be49d564b652a93478de1 --- BoardConfigCommon.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/BoardConfigCommon.mk b/BoardConfigCommon.mk index 142f79b..7364e47 100644 --- a/BoardConfigCommon.mk +++ b/BoardConfigCommon.mk @@ -54,6 +54,7 @@ BOARD_KERNEL_PAGESIZE := 4096 BOARD_KERNEL_SEPARATED_DTBO := true BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOT_HEADER_VERSION) TARGET_KERNEL_ADDITIONAL_FLAGS := DTC_EXT=$(shell pwd)/prebuilts/misc/linux-x86/dtc/dtc LLVM=1 +TARGET_KERNEL_CLANG_VERSION := r530567 TARGET_KERNEL_SOURCE := kernel/motorola/sm6375 # Platform From f894c36737edc3928edf0f7192d31ee5634b8270 Mon Sep 17 00:00:00 2001 From: Anand S Date: Tue, 15 Apr 2025 22:34:07 +0530 Subject: [PATCH 65/81] sm6375-common: Label rhodep/rhodei fingerprint service Change-Id: I41d3a08857023fe7b62e778cbe8a6da3b6889783 --- sepolicy/vendor/file_contexts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sepolicy/vendor/file_contexts b/sepolicy/vendor/file_contexts index dd9dffd..c795a0c 100644 --- a/sepolicy/vendor/file_contexts +++ b/sepolicy/vendor/file_contexts @@ -56,9 +56,12 @@ /(vendor|system/vendor)/bin/hw/android\.hardware\.biometrics\.fingerprint@2\.1-service-ets u:object_r:hal_fingerprint_default_exec:s0 /(vendor|system/vendor)/bin/hw/android\.hardware\.biometrics\.fingerprint@2\.1-service-fpc u:object_r:hal_fingerprint_default_exec:s0 /(vendor|system/vendor)/bin/hw/android\.hardware\.biometrics\.fingerprint@2\.1-service\.fogos u:object_r:hal_fingerprint_default_exec:s0 +/(vendor|system/vendor)/bin/hw/android\.hardware\.biometrics\.fingerprint@2\.1-service\.rhodei u:object_r:hal_fingerprint_default_exec:s0 +/(vendor|system/vendor)/bin/hw/android\.hardware\.biometrics\.fingerprint@2\.1-service\.rhodep u:object_r:hal_fingerprint_default_exec:s0 /data/vendor/.fps(/.*)? u:object_r:fingerprint_vendor_data_file:s0 /data/vendor/egis(/.*)? u:object_r:fingerprint_vendor_data_file:s0 /data/vendor/fpc(/.*)? u:object_r:fingerprint_vendor_data_file:s0 +/data/vendor/focal(/.*)? u:object_r:fingerprint_vendor_data_file:s0 /data/vendor/gf_data(/.*)? u:object_r:fingerprint_vendor_data_file:s0 /dev/esfp0 u:object_r:egis_device:s0 /dev/goodix_fp u:object_r:goodix_device:s0 @@ -90,6 +93,8 @@ # Touch /(vendor|system/vendor)/bin/hw/vendor\.lineage\.touch@1\.0-service\.bangkk u:object_r:hal_lineage_touch_default_exec:s0 /(vendor|system/vendor)/bin/hw/vendor\.lineage\.touch@1\.0-service\.fogos u:object_r:hal_lineage_touch_default_exec:s0 +/(vendor|system/vendor)/bin/hw/vendor\.lineage\.touch@1\.0-service\.rhodei u:object_r:hal_lineage_touch_default_exec:s0 +/(vendor|system/vendor)/bin/hw/vendor\.lineage\.touch@1\.0-service\.rhodep u:object_r:hal_lineage_touch_default_exec:s0 /sys/devices/platform/soc/4a80000\.spi/spi_master/spi0/spi0\.[01]/touchscreen/primary(/.*)? u:object_r:vendor_sysfs_touchpanel:s0 # Thermal @@ -100,6 +105,7 @@ /(vendor|system/vendor)/bin/init\.mmi\.laser\.sh u:object_r:vendor_mmi_laser_exec:s0 /(vendor|system/vendor)/bin/init\.mmi\.touch\.sh u:object_r:vendor_init_touch_exec:s0 /(vendor|system/vendor)/bin/hw/android\.hardware\.biometrics\.fingerprint@2\.1-goodixservice u:object_r:hal_fingerprint_default_exec:s0 +/(vendor|system/vendor)/bin/hw/android\.hardware\.biometrics\.fingerprint@2\.1-focalservice u:object_r:hal_fingerprint_default_exec:s0 /(vendor|system/vendor)/bin/init\.oem\.(fingerprint2|fingerprint\.overlay)\.sh u:object_r:vendor_init_fingerprint_exec:s0 /(vendor|system/vendor)/bin/init\.oem\.hw\.sh u:object_r:vendor_init_hw_exec:s0 From b53ed0077cdfeaf574f4a48c2b21c1a628aab2a6 Mon Sep 17 00:00:00 2001 From: Cosmin Tanislav Date: Fri, 21 Mar 2025 12:48:34 +0200 Subject: [PATCH 66/81] sm6375-common: use common RFS FSG symlink Change-Id: Ibd1eb2b3f6e7fd6982eb1bc1c995ba9ba75e3ec3 --- Android.bp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/Android.bp b/Android.bp index 6d951e8..ae3d0cd 100644 --- a/Android.bp +++ b/Android.bp @@ -17,13 +17,6 @@ install_symlink { symlink_target: "/vendor/fsg", } -install_symlink { - name: "rfs_msm_mpss_readonly_vendor_fsg_symlink", - vendor: true, - installed_location: "rfs/msm/mpss/readonly/vendor/fsg", - symlink_target: "/vendor/fsg", -} - install_symlink { name: "firmware_wlan_mac.bin_symlink", vendor: true, From 38b601ffbe0728e2335484df9281817ff44f547e Mon Sep 17 00:00:00 2001 From: LuK1337 Date: Tue, 1 Apr 2025 16:11:23 +0200 Subject: [PATCH 67/81] sm6375-common: Add libwfdservice_shim for WFD e69a5be2449122f90220151f9d01ace15221facf | AOSP in system/hardware/interfaces broke the ABI ;'( Change-Id: I3badfc56581a6bf3de5d7e996fa51f59eb164aae --- extract-files.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/extract-files.py b/extract-files.py index 92cae4e..79deec9 100755 --- a/extract-files.py +++ b/extract-files.py @@ -54,6 +54,8 @@ lib_fixups: lib_fixups_user_type = { } blob_fixups: blob_fixups_user_type = { + 'system_ext/bin/wfdservice': blob_fixup() + .add_needed('libwfdservice_shim.so'), 'system_ext/etc/permissions/moto-telephony.xml': blob_fixup() .regex_replace('/system/', '/system_ext/'), 'system_ext/priv-app/ims/ims.apk': blob_fixup() From a5f7bafa78147ac16d850b4d02351b393f29c409 Mon Sep 17 00:00:00 2001 From: basamaryan Date: Sat, 8 Mar 2025 16:48:11 -0500 Subject: [PATCH 68/81] sm6375-common: Unset VNDK flag Change-Id: I2ef63b9e95b35e23b6026b3f28bbb70590b427c1 --- common.mk | 3 --- 1 file changed, 3 deletions(-) diff --git a/common.mk b/common.mk index 6affb59..2b99758 100644 --- a/common.mk +++ b/common.mk @@ -383,9 +383,6 @@ PRODUCT_PACKAGES += \ PRODUCT_COPY_FILES += \ vendor/qcom/opensource/vibrator/excluded-input-devices.xml:$(TARGET_COPY_OUT_VENDOR)/etc/excluded-input-devices.xml -# VNDK -PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := strict - # WiFi PRODUCT_PACKAGES += \ android.hardware.wifi-service \ From aad3703afedc07f7e84f65d55eeddce372af83a9 Mon Sep 17 00:00:00 2001 From: Michael Bestas Date: Mon, 31 Mar 2025 20:44:08 +0300 Subject: [PATCH 69/81] sm6375-common: Remove unused RFS MDM MPSS symlink Change-Id: Ib61df731835f70e566308c272d56430fb00c1531 --- Android.bp | 7 ------- common.mk | 4 ---- 2 files changed, 11 deletions(-) diff --git a/Android.bp b/Android.bp index ae3d0cd..872766b 100644 --- a/Android.bp +++ b/Android.bp @@ -10,13 +10,6 @@ soong_namespace { ], } -install_symlink { - name: "rfs_mdm_mpss_readonly_vendor_fsg_symlink", - vendor: true, - installed_location: "rfs/mdm/mpss/readonly/vendor/fsg", - symlink_target: "/vendor/fsg", -} - install_symlink { name: "firmware_wlan_mac.bin_symlink", vendor: true, diff --git a/common.mk b/common.mk index 2b99758..954efca 100644 --- a/common.mk +++ b/common.mk @@ -305,10 +305,6 @@ PRODUCT_COPY_FILES += \ PRODUCT_PACKAGES += \ android.hardware.renderscript@1.0-impl -# RFS MDM MPSS symlinks -PRODUCT_PACKAGES += \ - rfs_mdm_mpss_readonly_vendor_fsg_symlink - # RFS MSM MPSS symlinks PRODUCT_PACKAGES += \ rfs_msm_mpss_readonly_vendor_fsg_symlink From c4adc79acf9e282428ebd68124b97edd79ff2243 Mon Sep 17 00:00:00 2001 From: Michael Bestas Date: Mon, 31 Mar 2025 18:09:05 +0300 Subject: [PATCH 70/81] sm6375-common: Unset BUILD_BROKEN_VENDOR_PROPERTY_NAMESPACE We don't need this Change-Id: I3ae4826687c8f11730636f177501ea31e419d84e --- BoardConfigCommon.mk | 1 - 1 file changed, 1 deletion(-) diff --git a/BoardConfigCommon.mk b/BoardConfigCommon.mk index 7364e47..8f67a92 100644 --- a/BoardConfigCommon.mk +++ b/BoardConfigCommon.mk @@ -171,7 +171,6 @@ ENABLE_VENDOR_RIL_SERVICE := true # SELinux include device/lineage/sepolicy/libperfmgr/sepolicy.mk include device/qcom/sepolicy_vndr/SEPolicy.mk -BUILD_BROKEN_VENDOR_PROPERTY_NAMESPACE := true BOARD_VENDOR_SEPOLICY_DIRS += $(COMMON_PATH)/sepolicy/vendor PRODUCT_PRIVATE_SEPOLICY_DIRS += $(COMMON_PATH)/sepolicy/private PRODUCT_PUBLIC_SEPOLICY_DIRS += $(COMMON_PATH)/sepolicy/public From 3e8ae7bbded6725fe99c2ba6c4861073c1eac941 Mon Sep 17 00:00:00 2001 From: Anand S Date: Wed, 16 Apr 2025 20:47:11 +0530 Subject: [PATCH 71/81] sm6375-common: Label mmi-discrete-charger wakeup node Change-Id: I11842e43fc6390d6722ef619bf029b1e9c9c7257 --- sepolicy/vendor/genfs_contexts | 1 + 1 file changed, 1 insertion(+) diff --git a/sepolicy/vendor/genfs_contexts b/sepolicy/vendor/genfs_contexts index 1492c53..97a46ec 100644 --- a/sepolicy/vendor/genfs_contexts +++ b/sepolicy/vendor/genfs_contexts @@ -83,6 +83,7 @@ genfscon sysfs /devices/platform/soc/soc:mmi,charger/wakeup genfscon sysfs /devices/platform/soc/soc:mmi,charger/power/wakeup u:object_r:sysfs_wakeup:s0 genfscon sysfs /devices/platform/soc/soc:mmi,charger/power_supply/mmi_battery/wakeup u:object_r:sysfs_wakeup:s0 genfscon sysfs /devices/platform/soc/soc:mmi,charger/power_supply/mmi_battery/power/wakeup u:object_r:sysfs_wakeup:s0 +genfscon sysfs /devices/platform/soc/soc:mmi,discrete-charging/power_supply/battery/wakeup u:object_r:sysfs_wakeup:s0 genfscon sysfs /devices/platform/soc/1c40000.qcom,spmi/spmi-0/spmi0-02/1c40000.qcom,spmi:qcom,pm7250b@2:qcom,qpnp-smb5-mmi/power_supply/battery/wakeup u:object_r:sysfs_wakeup:s0 genfscon sysfs /devices/platform/soc/1c40000.qcom,spmi/spmi-0/spmi0-02/1c40000.qcom,spmi:qcom,pm7250b@2:qcom,qpnp-smb5-mmi/power_supply/mmi_battery/wakeup u:object_r:sysfs_wakeup:s0 genfscon sysfs /devices/platform/soc/1c40000.qcom,spmi/spmi-0/spmi0-02/1c40000.qcom,spmi:qcom,pm7250b@2:qcom,qpnp-smb5/power_supply/qcom_battery/wakeup u:object_r:sysfs_wakeup:s0 From 484f46a6056aa7cab480fcfd3f2813f9c5eb0959 Mon Sep 17 00:00:00 2001 From: Dobsgw Date: Tue, 22 Apr 2025 12:01:31 +0530 Subject: [PATCH 72/81] sm6375-common: rootdir: Fix PowerHAL nodes Fix for: libperfmgr: Failed to write to node: /sys/devices/system/cpu/cpu0/cpufreq/schedutil/up_rate_limit_us with value: 2000, fd: -1 libperfmgr: Failed to write to node: /sys/devices/system/cpu/cpu0/cpufreq/schedutil/down_rate_limit_us with value: 2000, fd: -1 libperfmgr: Failed to write to node: /sys/devices/system/cpu/cpu6/cpufreq/schedutil/up_rate_limit_us with value: 2000, fd: -1 libperfmgr: Failed to write to node: /sys/devices/system/cpu/cpu6/cpufreq/schedutil/down_rate_limit_us with value: 2000, fd: -1 Change-Id: I1e232a488ed8e7d87607f543425b6138cd6df53a --- rootdir/etc/init/hw/init.qcom.rc | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/rootdir/etc/init/hw/init.qcom.rc b/rootdir/etc/init/hw/init.qcom.rc index 03a9d48..7a16641 100644 --- a/rootdir/etc/init/hw/init.qcom.rc +++ b/rootdir/etc/init/hw/init.qcom.rc @@ -397,6 +397,16 @@ on property:sys.boot_completed=1 #Reinit lmkd to reconfigure lmkd properties setprop lmkd.reinit 1 + # Power hal + chown system system /sys/devices/system/cpu/cpu0/cpufreq/schedutil/up_rate_limit_us + chown system system /sys/devices/system/cpu/cpu0/cpufreq/schedutil/down_rate_limit_us + chown system system /sys/devices/system/cpu/cpu6/cpufreq/schedutil/up_rate_limit_us + chown system system /sys/devices/system/cpu/cpu6/cpufreq/schedutil/down_rate_limit_us + chmod 0664 /sys/devices/system/cpu/cpu0/cpufreq/schedutil/up_rate_limit_us + chmod 0664 /sys/devices/system/cpu/cpu0/cpufreq/schedutil/down_rate_limit_us + chmod 0664 /sys/devices/system/cpu/cpu6/cpufreq/schedutil/up_rate_limit_us + chmod 0664 /sys/devices/system/cpu/cpu6/cpufreq/schedutil/down_rate_limit_us + # corefile limit on property:persist.debug.trace=1 mkdir /data/core 0777 root root From dddd2bc8c5a00a2ba65660df9dbe972e73764cf4 Mon Sep 17 00:00:00 2001 From: Dhina17 Date: Thu, 24 Apr 2025 19:10:52 +0530 Subject: [PATCH 73/81] sm6375-common: sepolicy: Add rules for focaltech fp Change-Id: I9bf360696c6362b42e532228bf3ec9c1e684f163 --- sepolicy/vendor/device.te | 1 + sepolicy/vendor/file_contexts | 2 ++ sepolicy/vendor/hal_fingerprint_default.te | 5 +++++ sepolicy/vendor/vndservice.te | 1 + sepolicy/vendor/vndservice_contexts | 1 + 5 files changed, 10 insertions(+) create mode 100644 sepolicy/vendor/vndservice.te create mode 100644 sepolicy/vendor/vndservice_contexts diff --git a/sepolicy/vendor/device.te b/sepolicy/vendor/device.te index fc470fd..d39eb5b 100644 --- a/sepolicy/vendor/device.te +++ b/sepolicy/vendor/device.te @@ -1,6 +1,7 @@ # Fingerprint type egis_device, dev_type; type etsd_device, dev_type; +type focaltech_fp_device, dev_type; type goodix_device, dev_type; # Moto partitions diff --git a/sepolicy/vendor/file_contexts b/sepolicy/vendor/file_contexts index c795a0c..c712ca7 100644 --- a/sepolicy/vendor/file_contexts +++ b/sepolicy/vendor/file_contexts @@ -62,8 +62,10 @@ /data/vendor/egis(/.*)? u:object_r:fingerprint_vendor_data_file:s0 /data/vendor/fpc(/.*)? u:object_r:fingerprint_vendor_data_file:s0 /data/vendor/focal(/.*)? u:object_r:fingerprint_vendor_data_file:s0 +/data/vendor/focaltech(/.*)? u:object_r:fingerprint_vendor_data_file:s0 /data/vendor/gf_data(/.*)? u:object_r:fingerprint_vendor_data_file:s0 /dev/esfp0 u:object_r:egis_device:s0 +/dev/focaltech_fp u:object_r:focaltech_fp_device:s0 /dev/goodix_fp u:object_r:goodix_device:s0 /sys/devices/soc/0.et320(/.*)? u:object_r:vendor_sysfs_fingerprint:s0 diff --git a/sepolicy/vendor/hal_fingerprint_default.te b/sepolicy/vendor/hal_fingerprint_default.te index 0d79bb5..d16c49c 100644 --- a/sepolicy/vendor/hal_fingerprint_default.te +++ b/sepolicy/vendor/hal_fingerprint_default.te @@ -1,12 +1,14 @@ allow hal_fingerprint_default { etsd_device egis_device + focaltech_fp_device goodix_device tee_device graphics_device }: chr_file rw_file_perms; allow hal_fingerprint_default self:binder { call transfer }; +allow hal_fingerprint_default self:netlink_kobject_uevent_socket create_socket_perms_no_ioctl; allow hal_fingerprint_default self:netlink_socket create_socket_perms_no_ioctl; r_dir_file(hal_fingerprint_default, firmware_file) get_prop(hal_fingerprint_default, build_bootimage_prop) @@ -19,6 +21,9 @@ allow hal_fingerprint_default uhid_device:chr_file rw_file_perms; allow hal_fingerprint_default vendor_sysfs_fingerprint:{ file lnk_file } read; allow hal_fingerprint_default vendor_data_tzstorage_file:dir rw_dir_perms; allow hal_fingerprint_default vendor_data_tzstorage_file:file create_file_perms; +allow hal_fingerprint_default vndbinder_device:chr_file rw_file_perms; +binder_call(hal_fingerprint_default, vndservicemanager); +allow hal_fingerprint_default hal_fingerprint_vndservice:service_manager add; binder_call(hal_fingerprint_default, hal_fingerprint_default) binder_call(hal_fingerprint_default, hal_health_default) diff --git a/sepolicy/vendor/vndservice.te b/sepolicy/vendor/vndservice.te new file mode 100644 index 0000000..4e57aa3 --- /dev/null +++ b/sepolicy/vendor/vndservice.te @@ -0,0 +1 @@ +type hal_fingerprint_vndservice, vndservice_manager_type; diff --git a/sepolicy/vendor/vndservice_contexts b/sepolicy/vendor/vndservice_contexts new file mode 100644 index 0000000..ac0bbc3 --- /dev/null +++ b/sepolicy/vendor/vndservice_contexts @@ -0,0 +1 @@ +FocalFingerprintService u:object_r:hal_fingerprint_vndservice:s0 From 5b907a19e0fcde8fd84834ff9c94a9d801ca156e Mon Sep 17 00:00:00 2001 From: Anand S Date: Fri, 25 Apr 2025 13:42:44 +0530 Subject: [PATCH 74/81] sm6375-common: Address rhodep vibrator denials Change-Id: Ia9d5e0ec5a808f6f82ca36e8c8273b94c6961f09 --- sepolicy/vendor/file_contexts | 1 + sepolicy/vendor/genfs_contexts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/sepolicy/vendor/file_contexts b/sepolicy/vendor/file_contexts index c712ca7..3c2f631 100644 --- a/sepolicy/vendor/file_contexts +++ b/sepolicy/vendor/file_contexts @@ -117,6 +117,7 @@ # Vibrator /sys/devices/platform/soc/990000.i2c/i2c-1/1-005a/leds/vibrator(/.*)? u:object_r:vendor_sysfs_vibrator:s0 +/sys/devices/platform/soc/soc:ldo_vib/leds/vibrator(/.*)? u:object_r:vendor_sysfs_vibrator:s0 # Wakeups /sys/devices/virtual/input/input[0-9]+/wakeup[0-9]+(/.*)? u:object_r:sysfs_wakeup:s0 diff --git a/sepolicy/vendor/genfs_contexts b/sepolicy/vendor/genfs_contexts index 97a46ec..83748fc 100644 --- a/sepolicy/vendor/genfs_contexts +++ b/sepolicy/vendor/genfs_contexts @@ -71,7 +71,7 @@ genfscon sysfs /devices/platform/soc/4a80000.spi/spi_master/spi0/spi0.[01] # Vibrator genfscon sysfs /devices/platform/soc/984000.i2c/i2c-0/0-005a/leds/vibrator u:object_r:sysfs_vibrator:s0 -genfscon sysfs /sys/devices/platform/soc/soc:ldo_vib/leds/vibrator(/.*)? u:object_r:vendor_sysfs_vibrator:s0 +genfscon sysfs /devices/platform/soc/soc:ldo_vib/leds/vibrator u:object_r:vendor_sysfs_vibrator:s0 # Wakeup genfscon sysfs /devices/platform/soc/984000.i2c/i2c-0/0-005a/wakeup/wakeup u:object_r:sysfs_wakeup:s0 From 3992e14abebb68f2f82f571b8def8fff07c2a2ac Mon Sep 17 00:00:00 2001 From: Michael Bestas Date: Sun, 27 Apr 2025 16:33:57 +0530 Subject: [PATCH 75/81] sm6375-common: Get rid of TARGET_RECOVERY_DEVICE_DIRS Change-Id: Id32dc00987178a6e9b0fd7fac0f4598f1b3be7e3 --- BoardConfigCommon.mk | 1 - common.mk | 3 +++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/BoardConfigCommon.mk b/BoardConfigCommon.mk index 8f67a92..e738742 100644 --- a/BoardConfigCommon.mk +++ b/BoardConfigCommon.mk @@ -161,7 +161,6 @@ TARGET_NO_RECOVERY := true TARGET_RECOVERY_PIXEL_FORMAT := RGBX_8888 TARGET_USERIMAGES_USE_EXT4 := true TARGET_USERIMAGES_USE_F2FS := true -TARGET_RECOVERY_DEVICE_DIRS += $(COMMON_PATH) TARGET_RECOVERY_FSTAB := $(COMMON_PATH)/rootdir/etc/fstab.qcom TARGET_RECOVERY_WIPE := $(COMMON_PATH)/recovery/recovery.wipe diff --git a/common.mk b/common.mk index 954efca..63334bc 100644 --- a/common.mk +++ b/common.mk @@ -198,6 +198,9 @@ $(foreach f,$(wildcard $(LOCAL_PATH)/rootdir/etc/init/*.rc),\ $(foreach f,$(wildcard $(LOCAL_PATH)/rootdir/bin/*.sh),\ $(eval PRODUCT_COPY_FILES += $(f):$(TARGET_COPY_OUT_VENDOR)/bin/$(notdir $f))) +PRODUCT_COPY_FILES += \ + $(LOCAL_PATH)/recovery/root/init.recovery.qcom.rc:recovery/root/init.recovery.qcom.rc + # IPACM PRODUCT_PACKAGES += \ ipacm \ From e5559edd52ae47403147618dc5d6531193354cd8 Mon Sep 17 00:00:00 2001 From: Yumi Yukimura Date: Fri, 2 May 2025 15:31:38 +0530 Subject: [PATCH 76/81] sm6375-common: manifest: Bump target-level to 6 Change-Id: I8d419d248f29b7d316a87d55e19ae7ff141e19a5 --- manifest.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/manifest.xml b/manifest.xml index 70f908a..9215312 100644 --- a/manifest.xml +++ b/manifest.xml @@ -1,4 +1,4 @@ - + android.hardware.audio hwbinder @@ -557,5 +557,4 @@ imsrtpservice - From 8df2921cda381fa215cbd5f97bbbf71dddabfa44 Mon Sep 17 00:00:00 2001 From: Tyler Wear Date: Fri, 2 May 2025 15:32:50 +0530 Subject: [PATCH 77/81] sm6375-common: tetheroffload: Version 1.1 Update tetheroffload to version 1.1. Change-Id: I004e44e416a88a1b39a4c80366df9008722f096b --- manifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.xml b/manifest.xml index 9215312..54da6ca 100644 --- a/manifest.xml +++ b/manifest.xml @@ -99,7 +99,7 @@ android.hardware.tetheroffload.control hwbinder - 1.0 + 1.1 IOffloadControl default From 96620c897e05f45cb36a1bfa5b6f5650219c2624 Mon Sep 17 00:00:00 2001 From: Roopesh Nataraja Date: Fri, 2 May 2025 15:28:21 +0530 Subject: [PATCH 78/81] sm6375-common: vintf: Remove schedulerservice from device compatibility matrix android.frameworks.schedulerservice is deprecated and limited to max-level=5 in framework manifest. Hence, remove it from device compatibility matrix to allow super image generation. Change-Id: Icbeeeb07c9ba8c094a1c531e0a67bd1dbac8b926 --- compatibility_matrix.xml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/compatibility_matrix.xml b/compatibility_matrix.xml index bffde98..6f5e71f 100644 --- a/compatibility_matrix.xml +++ b/compatibility_matrix.xml @@ -26,14 +26,6 @@ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --> - - android.frameworks.schedulerservice - 1.0 - - ISchedulingPolicyService - default - - android.frameworks.sensorservice 1.0 From dd9784f9559c3ddf85233a5e745760eb6e9d224d Mon Sep 17 00:00:00 2001 From: Anand S Date: Thu, 8 May 2025 22:42:41 +0530 Subject: [PATCH 79/81] Revert "[TMP] Revert "sm7325-common: Enable LZ4 compression for ramdisks"" This reverts commit ba9668d8353eb1f142a31336f6ccd290f2f947b4. Change-Id: Ife78bfc42077f7502bb2030d27cab5d110b8de30 --- BoardConfigCommon.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/BoardConfigCommon.mk b/BoardConfigCommon.mk index e738742..add9a4e 100644 --- a/BoardConfigCommon.mk +++ b/BoardConfigCommon.mk @@ -53,6 +53,7 @@ BOARD_KERNEL_IMAGE_NAME := Image BOARD_KERNEL_PAGESIZE := 4096 BOARD_KERNEL_SEPARATED_DTBO := true BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOT_HEADER_VERSION) +BOARD_RAMDISK_USE_LZ4 := true TARGET_KERNEL_ADDITIONAL_FLAGS := DTC_EXT=$(shell pwd)/prebuilts/misc/linux-x86/dtc/dtc LLVM=1 TARGET_KERNEL_CLANG_VERSION := r530567 TARGET_KERNEL_SOURCE := kernel/motorola/sm6375 From 6c053535b2c7fd27fcdd30cf8e1ad7f841c5b8f4 Mon Sep 17 00:00:00 2001 From: Sevenrock Date: Thu, 15 May 2025 20:37:14 +0530 Subject: [PATCH 80/81] sm6375-common: rootdir: create /data/vendor/focaltech Change-Id: I0f935b0be92a44cbd9a90702a0531504aa621ecc --- rootdir/etc/init/hw/init.mmi.rc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/rootdir/etc/init/hw/init.mmi.rc b/rootdir/etc/init/hw/init.mmi.rc index 19ba89e..4aa6544 100644 --- a/rootdir/etc/init/hw/init.mmi.rc +++ b/rootdir/etc/init/hw/init.mmi.rc @@ -258,6 +258,9 @@ on post-fs-data mkdir /data/vendor/fpc 0700 system system mkdir /data/vendor/.fps 0770 system vendor_fingerp + mkdir /data/vendor/focaltech 0770 system system + restorecon /data/vendor/focaltech + # Required by touchRec for write the touch data mkdir /data/vendor/touchrec 0770 input input chown input input /data/vendor/touchrec/bootindex From f80c8c1dde6947029b63558a6a98d1d0ce010f99 Mon Sep 17 00:00:00 2001 From: Anand S Date: Thu, 15 May 2025 20:39:09 +0530 Subject: [PATCH 81/81] sm6375-common: ueventd: Set permissions for focaltech fps Change-Id: I2d93047e9d566f73cf4cb42254adba256cde7bbc --- rootdir/etc/ueventd.rc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/rootdir/etc/ueventd.rc b/rootdir/etc/ueventd.rc index 0e8fbba..f8730d8 100644 --- a/rootdir/etc/ueventd.rc +++ b/rootdir/etc/ueventd.rc @@ -342,6 +342,9 @@ firmware_directories /vendor/firmware_mnt/image/ /sys/class/fts/touch_aoi aoi_set 0660 root system /sys/class/fts/touch_aoi power_set 0660 root system +#Focaltech FPS +/dev/focaltech_fp 0660 system system + # Goodix fingerprint device /dev/goodix_fp 0660 system system