diff --git a/fix-bt-1.patch b/fix-bt-1.patch new file mode 100644 index 0000000..db3a39e --- /dev/null +++ b/fix-bt-1.patch @@ -0,0 +1,54 @@ +From 56c318bf3cc9208c772c7e6d01e88380d2155c67 Mon Sep 17 00:00:00 2001 +From: "tzu-hsien.huang" +Date: Fri, 26 Aug 2022 11:22:03 +0200 +Subject: [PATCH] Additionally check le_set_event_mask command resturn status + with UNSUPPORTED_LMP_OR_LL_PARAMETER +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +In GD BT stack, stack will check each return status of HCI Commands. E.g. reset , le_set_event_mask, set_event_mask …etc. +In BT spec 5.2, SIG add some parameters for le_set_event_mask for le audio, like LE Terminate BIG Complete event: Supported. +However, some legacy chips do not support LE Audio feature, and controller will return Status: Unsupported LMP Parameter Value when it receives this HCI Command +When it checks the return value and find the status is not SUCCESS, it will cause FAIL and cannot be compatible with old legacy chip. +After brushing GSI, Bluetooth will turn off automatically when it is turned on. +So all CTS test will always fail. + +Check le_set_event_mask command return status with SUCCESS or UNSUPPORTED_LMP_OR_LL_PARAMETER + +Bug: 239662211 +Test: CtsBluetoothTestCases +Change-Id: I2b0cede7f47eecd2124a386e958773289eb6f11c +--- + system/gd/hci/controller.cc | 11 ++++++++++- + 1 file changed, 10 insertions(+), 1 deletion(-) + +diff --git a/system/gd/hci/controller.cc b/system/gd/hci/controller.cc +index da5986fcb7..8be21a20a3 100644 +--- a/system/gd/hci/controller.cc ++++ b/system/gd/hci/controller.cc +@@ -540,7 +540,7 @@ struct Controller::impl { + void le_set_event_mask(uint64_t le_event_mask) { + std::unique_ptr packet = LeSetEventMaskBuilder::Create(le_event_mask); + hci_->EnqueueCommand(std::move(packet), module_.GetHandler()->BindOnceOn( +- this, &Controller::impl::check_status)); ++ this, &Controller::impl::check_event_mask_status)); + } + + template +@@ -551,6 +551,15 @@ struct Controller::impl { + ASSERT(status_view.GetStatus() == ErrorCode::SUCCESS); + } + ++ template ++ void check_event_mask_status(CommandCompleteView view) { ++ ASSERT(view.IsValid()); ++ auto status_view = T::Create(view); ++ ASSERT(status_view.IsValid()); ++ ASSERT(status_view.GetStatus() == ErrorCode::SUCCESS || ++ status_view.GetStatus() == ErrorCode::UNSUPPORTED_LMP_OR_LL_PARAMETER); ++ } ++ + #define OP_CODE_MAPPING(name) \ + case OpCode::name: { \ + uint16_t index = (uint16_t)OpCodeIndex::name; \ diff --git a/fix-bt-2.patch b/fix-bt-2.patch new file mode 100644 index 0000000..1988806 --- /dev/null +++ b/fix-bt-2.patch @@ -0,0 +1,40 @@ +From bf9a555f96cceb9ce49344e5055c2afa479df21d Mon Sep 17 00:00:00 2001 +From: Peter Cai +Date: Fri, 26 Aug 2022 11:23:30 +0200 +Subject: [PATCH] gd: hci: Ignore unexpected status events + +For some reason, on some old devices, the controller will report a +remote to support SNIFF_SUBRATING even when it does not. Just ignore the +error here (the status event comes from the failure response). + +Change-Id: Ifb9a65fd77f21d15a8dc1ced9240194d38218ef6 +--- + system/gd/hci/hci_layer.cc | 15 +++++++-------- + 1 file changed, 7 insertions(+), 8 deletions(-) + +diff --git a/system/gd/hci/hci_layer.cc b/system/gd/hci/hci_layer.cc +index 57d7e55fff..b5a9d065be 100644 +--- a/system/gd/hci/hci_layer.cc ++++ b/system/gd/hci/hci_layer.cc +@@ -195,14 +195,13 @@ struct HciLayer::impl { + EventView::Create(PacketView(std::make_shared>(std::vector())))); + command_queue_.front().GetCallback()->Invoke(move(command_complete_view)); + } else { +- ASSERT_LOG( +- command_queue_.front().waiting_for_status_ == is_status, +- "0x%02hx (%s) was not expecting %s event", +- op_code, +- OpCodeText(op_code).c_str(), +- logging_id.c_str()); +- +- command_queue_.front().GetCallback()->Invoke(move(response_view)); ++ if (command_queue_.front().waiting_for_status_ == is_status) { ++ command_queue_.front().GetCallback()->Invoke(move(response_view)); ++ } else { ++ CommandCompleteView command_complete_view = CommandCompleteView::Create( ++ EventView::Create(PacketView(std::make_shared>(std::vector())))); ++ command_queue_.front().GetCallback()->Invoke(move(command_complete_view)); ++ } + } + + command_queue_.pop_front(); diff --git a/fix-bt-3.patch b/fix-bt-3.patch new file mode 100644 index 0000000..235886b --- /dev/null +++ b/fix-bt-3.patch @@ -0,0 +1,33 @@ +From 6c794ea2b4247a3359453cb178cfd0f8e2d38f56 Mon Sep 17 00:00:00 2001 +From: Sugakesshaa <83747297+bheatleyyy@users.noreply.github.com> +Date: Fri, 9 Sep 2022 03:35:26 +0800 +Subject: [PATCH] Nuke condition check for controller + +--- + system/gd/hci/controller.cc | 13 +++---------- + 1 file changed, 3 insertions(+), 10 deletions(-) + +diff --git a/system/gd/hci/controller.cc b/system/gd/hci/controller.cc +index 8be21a20a3..dbece21c6e 100644 +--- a/system/gd/hci/controller.cc ++++ b/system/gd/hci/controller.cc +@@ -66,16 +66,9 @@ struct Controller::impl { + + hci_->EnqueueCommand(ReadBufferSizeBuilder::Create(), + handler->BindOnceOn(this, &Controller::impl::read_buffer_size_complete_handler)); +- +- if (is_supported(OpCode::LE_READ_BUFFER_SIZE_V2)) { +- hci_->EnqueueCommand( +- LeReadBufferSizeV2Builder::Create(), +- handler->BindOnceOn(this, &Controller::impl::le_read_buffer_size_v2_handler)); +- } else { +- hci_->EnqueueCommand( +- LeReadBufferSizeV1Builder::Create(), +- handler->BindOnceOn(this, &Controller::impl::le_read_buffer_size_handler)); +- } ++ ++ hci_->EnqueueCommand(LeReadBufferSizeV1Builder::Create(), ++ handler->BindOnceOn(this, &Controller::impl::le_read_buffer_size_handler)); + + hci_->EnqueueCommand( + LeReadFilterAcceptListSizeBuilder::Create(), diff --git a/fix-bt-le.patch b/fix-bt-le.patch new file mode 100644 index 0000000..caa907a --- /dev/null +++ b/fix-bt-le.patch @@ -0,0 +1,90 @@ +From 6ad0718fa87dfbaa2bd95ab23f60f485a896e84b Mon Sep 17 00:00:00 2001 +From: nyyu +Date: Fri, 30 Sep 2022 22:40:43 +0200 +Subject: [PATCH] bt: disable le + +Change-Id: I5c258b1401fcd6fbfa98c98849db209688f52d3c +--- + system/gd/hci/controller.cc | 13 +++++++------ + system/gd/hci/hci_layer.cc | 4 ++-- + system/stack/btm/btm_ble_gap.cc | 4 +++- + 3 files changed, 12 insertions(+), 9 deletions(-) + +diff --git a/system/gd/hci/controller.cc b/system/gd/hci/controller.cc +index dbece21c6e..572df09bce 100644 +--- a/system/gd/hci/controller.cc ++++ b/system/gd/hci/controller.cc +@@ -145,8 +145,9 @@ struct Controller::impl { + handler->BindOnceOn(this, &Controller::impl::le_set_host_feature_handler)); + } + +- hci_->EnqueueCommand(LeGetVendorCapabilitiesBuilder::Create(), +- handler->BindOnceOn(this, &Controller::impl::le_get_vendor_capabilities_handler)); ++ /*hci_->EnqueueCommand(LeGetVendorCapabilitiesBuilder::Create(), ++ handler->BindOnceOn(this, &Controller::impl::le_get_vendor_capabilities_handler));*/ ++ le_get_vendor_capabilities_handler(); + + // We only need to synchronize the last read. Make BD_ADDR to be the last one. + std::promise promise; +@@ -400,8 +401,8 @@ struct Controller::impl { + le_periodic_advertiser_list_size_ = complete_view.GetPeriodicAdvertiserListSize(); + } + +- void le_get_vendor_capabilities_handler(CommandCompleteView view) { +- auto complete_view = LeGetVendorCapabilitiesCompleteView::Create(view); ++ void le_get_vendor_capabilities_handler(/*CommandCompleteView view*/) { ++ //auto complete_view = LeGetVendorCapabilitiesCompleteView::Create(view); + + vendor_capabilities_.is_supported_ = 0x00; + vendor_capabilities_.max_advt_instances_ = 0x00; +@@ -420,7 +421,7 @@ struct Controller::impl { + vendor_capabilities_.a2dp_source_offload_capability_mask_ = 0x00; + vendor_capabilities_.bluetooth_quality_report_support_ = 0x00; + +- if (complete_view.IsValid()) { ++ /*if (complete_view.IsValid()) { + vendor_capabilities_.is_supported_ = 0x01; + + // v0.55 +@@ -471,7 +472,7 @@ struct Controller::impl { + } + vendor_capabilities_.a2dp_source_offload_capability_mask_ = v98.GetA2dpSourceOffloadCapabilityMask(); + vendor_capabilities_.bluetooth_quality_report_support_ = v98.GetBluetoothQualityReportSupport(); +- } ++ }*/ + } + + void set_event_mask(uint64_t event_mask) { +diff --git a/system/gd/hci/hci_layer.cc b/system/gd/hci/hci_layer.cc +index b5a9d065be..fa0be65701 100644 +--- a/system/gd/hci/hci_layer.cc ++++ b/system/gd/hci/hci_layer.cc +@@ -180,8 +180,8 @@ struct HciLayer::impl { + LOG_ERROR("Discarding event that came after timeout 0x%02hx (%s)", op_code, OpCodeText(op_code).c_str()); + return; + } +- ASSERT_LOG(waiting_command_ == op_code, "Waiting for 0x%02hx (%s), got 0x%02hx (%s)", waiting_command_, +- OpCodeText(waiting_command_).c_str(), op_code, OpCodeText(op_code).c_str()); ++ /*ASSERT_LOG(waiting_command_ == op_code, "Waiting for 0x%02hx (%s), got 0x%02hx (%s)", waiting_command_, ++ OpCodeText(waiting_command_).c_str(), op_code, OpCodeText(op_code).c_str());*/ + + bool is_vendor_specific = static_cast(op_code) & (0x3f << 10); + CommandStatusView status_view = CommandStatusView::Create(event); +diff --git a/system/stack/btm/btm_ble_gap.cc b/system/stack/btm/btm_ble_gap.cc +index 76f6c6f62c..4d7f10312c 100644 +--- a/system/stack/btm/btm_ble_gap.cc ++++ b/system/stack/btm/btm_ble_gap.cc +@@ -619,7 +619,9 @@ static void btm_ble_vendor_capability_vsc_cmpl_cback( + BTM_TRACE_DEBUG("%s", __func__); + + /* Check status of command complete event */ +- CHECK(p_vcs_cplt_params->opcode == HCI_BLE_VENDOR_CAP); ++ if(p_vcs_cplt_params->opcode != HCI_BLE_VENDOR_CAP) ++ return; ++ + CHECK(p_vcs_cplt_params->param_len > 0); + + const uint8_t* p = p_vcs_cplt_params->p_param_buf; +-- +2.37.3 + diff --git a/fix-build-kernel-header.patch b/fix-build-kernel-header.patch deleted file mode 100644 index 9bbef77..0000000 --- a/fix-build-kernel-header.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 3c8dd9d84ec1b52ddd449ccaf7a8f94f9d0f2932 Mon Sep 17 00:00:00 2001 -From: nyyu -Date: Sun, 25 Sep 2022 14:54:37 +0200 -Subject: [PATCH] fix: build kernel header - ---- - build/soong/Android.bp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/build/soong/Android.bp b/build/soong/Android.bp -index 5cbcd19b..02ed36da 100644 ---- a/build/soong/Android.bp -+++ b/build/soong/Android.bp -@@ -21,7 +21,7 @@ lineage_generator { - name: "generated_kernel_includes", - - // The headers make command -- cmd: "$(PATH_OVERRIDE_SOONG) $(KERNEL_MAKE_CMD) $(KERNEL_MAKE_FLAGS) -C $(TARGET_KERNEL_SOURCE) O=$(KERNEL_BUILD_OUT_PREFIX)$(genDir) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) headers_install", -+ cmd: "mkdir -p $(KERNEL_BUILD_OUT_PREFIX)$(genDir) && $(PATH_OVERRIDE_SOONG) $(KERNEL_MAKE_CMD) $(KERNEL_MAKE_FLAGS) -C $(TARGET_KERNEL_SOURCE) O=$(KERNEL_BUILD_OUT_PREFIX)$(genDir) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) headers_install", - - // Directories that can be imported by a cc_* module generated_headers property - export_include_dirs: [ --- -2.37.3 - diff --git a/sync.sh b/sync.sh index 069ef41..f05fd19 100644 --- a/sync.sh +++ b/sync.sh @@ -1,4 +1,5 @@ #!/bin/bash -e +# shellcheck disable=SC2250,SC2154,SC2086,SC1091,SC2312 . build/envsetup.sh @@ -21,11 +22,14 @@ for i in "${tmp[@]}"; do IFS=: read -r folder commit <<<"${i}" if [[ "${folder}" != lineage/* && "${before[${folder}]}" != "${commit}" ]]; then cd "${folder}" || continue - { - echo "## ${folder} ${before[${folder}]}..${commit}" - git --no-pager log --pretty=format:"- %s" "${before[${folder}]}".."${commit}" - echo - } >>"${changelog}" + log=$(git --no-pager log --pretty=format:"- %s" "${before[${folder}]}".."${commit}") + if [[ $(echo "$log" | wc -l) != 0 ]]; then + { + echo "## ${folder} ${before[${folder}]}..${commit}" + echo "$log" + echo + } >>"${changelog}" + fi cd "${TOPDIR}" || continue fi done @@ -53,15 +57,21 @@ cd hardware/qcom-caf/msm8974/audio git am $DRONE_WORKSPACE_BASE/fix-audio-build.patch || git am --abort cd $TOPDIR -#lineage -#cd vendor/lineage -#git am $DRONE_WORKSPACE_BASE/fix-build-kernel-header.patch || git am --abort -#cd $TOPDIR +#bluetooth +cd packages/modules/Bluetooth +git am $DRONE_WORKSPACE_BASE/fix-bt-1.patch || git am --abort +git am $DRONE_WORKSPACE_BASE/fix-bt-2.patch || git am --abort +git am $DRONE_WORKSPACE_BASE/fix-bt-3.patch || git am --abort +git am $DRONE_WORKSPACE_BASE/fix-bt-le.patch || git am --abort +cd $TOPDIR + +cd hardware/interfaces +git reset --hard ad2871f7 +cd $TOPDIR #safetynet repopick -f 334348 -P system/core repopick -f 334343 334344 -P frameworks/base #misc -repopick 336186 -repopick 338888 \ No newline at end of file +repopick 338888