2024-05-16 05:08:36

by Nobuaki Tsunashima

[permalink] [raw]
Subject: [PATCH] Bluetooth: Patch for CYW4373 hci up fail issue

CYW4373 ROM FW has an issue that it claims LE_Read_Transmit_Power command
as supported in a response of Read_Local_Supported_Command command but
rejects the LE_Read_Transmit_Power command with "Unknown HCI Command"
status.
Due to the issue, Bluetooth driver of 5.15 and later kernel fails to hci up.
Especially in USB i/f case, it would be difficult to download patch FW that includes
Its fix unless hci is up. The patch forces the driver to skip LE_Read_Transmit_Power
Command when it detects CYW4373 with ROM FW build.

Signed-off-by: Nobuaki Tsunashima <[email protected]>

---
drivers/bluetooth/btbcm.c | 32 +++++++++++++++++++++++++++++++-
drivers/bluetooth/btusb.c | 4 ++++
2 files changed, 35 insertions(+), 1 deletion(-)

diff --git a/drivers/bluetooth/btbcm.c b/drivers/bluetooth/btbcm.c
index 0a5445ac5e1b..c64d1ddd140d 100644
--- a/drivers/bluetooth/btbcm.c
+++ b/drivers/bluetooth/btbcm.c
@@ -437,18 +437,48 @@ static const struct dmi_system_id disable_broken_read_transmit_power[] = {
{ }
};

+struct bcm_chip_version_table {
+ u8 chip_id;
+ u16 baseline;
+};
+#define BCM_ROMFW_BASELINE_NUM 0xFFFF
+static const struct bcm_chip_version_table disable_broken_read_transmit_power_by_chip_ver[] = {
+ {0x87, BCM_ROMFW_BASELINE_NUM} /* CYW4373/4373E */
+};
+static bool btbcm_is_disable_broken_read_tx_power_by_chip_ver(u8 chip_id, u16 baseline)
+{
+ int i;
+ int table_size = sizeof(disable_broken_read_transmit_power_by_chip_ver)/sizeof(disable_broken_read_transmit_power_by_chip_ver[0]);
+ struct bcm_chip_version_table *entry = &disable_broken_read_transmit_power_by_chip_ver[0];
+
+ for( i=0 ; i<table_size ; i++, entry++)
+ {
+ if( (chip_id == entry->chip_id) && (baseline == entry->baseline) )
+ return true;
+ }
+
+ return false;
+}
+
static int btbcm_read_info(struct hci_dev *hdev)
{
struct sk_buff *skb;
+ u8 chip_id;
+ u16 baseline;

/* Read Verbose Config Version Info */
skb = btbcm_read_verbose_config(hdev);
if (IS_ERR(skb))
return PTR_ERR(skb);
-
+ chip_id = skb->data[1];
+ baseline = skb->data[3] | (skb->data[4] << 8);
bt_dev_info(hdev, "BCM: chip id %u", skb->data[1]);
kfree_skb(skb);

+ /* Check Chip ID and disable broken Read LE Min/Max Tx Power */
+ if (btbcm_is_disable_broken_read_tx_power_by_chip_ver(chip_id, baseline))
+ set_bit(HCI_QUIRK_BROKEN_READ_TRANSMIT_POWER, &hdev->quirks);
+
return 0;
}

diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index d31edad7a056..52561c8d8828 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -142,6 +142,10 @@ static const struct usb_device_id btusb_table[] = {
{ USB_VENDOR_AND_INTERFACE_INFO(0x04ca, 0xff, 0x01, 0x01),
.driver_info = BTUSB_BCM_PATCHRAM },

+ /* Cypress devices with vendor specific id */
+ { USB_VENDOR_AND_INTERFACE_INFO(0x04b4, 0xff, 0x01, 0x01),
+ .driver_info = BTUSB_BCM_PATCHRAM },
+
/* Broadcom devices with vendor specific id */
{ USB_VENDOR_AND_INTERFACE_INFO(0x0a5c, 0xff, 0x01, 0x01),
.driver_info = BTUSB_BCM_PATCHRAM },
--
2.25.1



2024-05-16 05:33:22

by bluez.test.bot

[permalink] [raw]
Subject: RE: Bluetooth: Patch for CYW4373 hci up fail issue

This is automated email and please do not reply to this email!

Dear submitter,

Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=853578

---Test result---

Test Summary:
CheckPatch FAIL 1.07 seconds
GitLint FAIL 0.44 seconds
SubjectPrefix PASS 0.07 seconds
BuildKernel PASS 29.54 seconds
CheckAllWarning WARNING 32.16 seconds
CheckSparse WARNING 37.46 seconds
CheckSmatch FAIL 35.73 seconds
BuildKernel32 PASS 28.33 seconds
TestRunnerSetup PASS 516.67 seconds
TestRunner_l2cap-tester PASS 20.34 seconds
TestRunner_iso-tester PASS 32.56 seconds
TestRunner_bnep-tester PASS 4.66 seconds
TestRunner_mgmt-tester PASS 111.34 seconds
TestRunner_rfcomm-tester PASS 7.24 seconds
TestRunner_sco-tester PASS 14.90 seconds
TestRunner_ioctl-tester PASS 7.65 seconds
TestRunner_mesh-tester PASS 5.78 seconds
TestRunner_smp-tester PASS 6.68 seconds
TestRunner_userchan-tester PASS 4.90 seconds
IncrementalBuild PASS 27.20 seconds

Details
##############################
Test: CheckPatch - FAIL
Desc: Run checkpatch.pl script
Output:
Bluetooth: Patch for CYW4373 hci up fail issue
WARNING: Prefer a maximum 75 chars per line (possible unwrapped commit description?)
#84:
Due to the issue, Bluetooth driver of 5.15 and later kernel fails to hci up.

WARNING: line length of 138 exceeds 100 columns
#114: FILE: drivers/bluetooth/btbcm.c:451:
+ int table_size = sizeof(disable_broken_read_transmit_power_by_chip_ver)/sizeof(disable_broken_read_transmit_power_by_chip_ver[0]);

WARNING: Prefer ARRAY_SIZE(disable_broken_read_transmit_power_by_chip_ver)
#114: FILE: drivers/bluetooth/btbcm.c:451:
+ int table_size = sizeof(disable_broken_read_transmit_power_by_chip_ver)/sizeof(disable_broken_read_transmit_power_by_chip_ver[0]);

ERROR: that open brace { should be on the previous line
#117: FILE: drivers/bluetooth/btbcm.c:454:
+ for( i=0 ; i<table_size ; i++, entry++)
+ {

ERROR: spaces required around that '=' (ctx:VxV)
#117: FILE: drivers/bluetooth/btbcm.c:454:
+ for( i=0 ; i<table_size ; i++, entry++)
^

ERROR: spaces required around that '<' (ctx:VxV)
#117: FILE: drivers/bluetooth/btbcm.c:454:
+ for( i=0 ; i<table_size ; i++, entry++)
^

ERROR: space prohibited after that open parenthesis '('
#117: FILE: drivers/bluetooth/btbcm.c:454:
+ for( i=0 ; i<table_size ; i++, entry++)

ERROR: space required before the open parenthesis '('
#117: FILE: drivers/bluetooth/btbcm.c:454:
+ for( i=0 ; i<table_size ; i++, entry++)

ERROR: space prohibited after that open parenthesis '('
#119: FILE: drivers/bluetooth/btbcm.c:456:
+ if( (chip_id == entry->chip_id) && (baseline == entry->baseline) )

ERROR: space prohibited before that close parenthesis ')'
#119: FILE: drivers/bluetooth/btbcm.c:456:
+ if( (chip_id == entry->chip_id) && (baseline == entry->baseline) )

ERROR: space required before the open parenthesis '('
#119: FILE: drivers/bluetooth/btbcm.c:456:
+ if( (chip_id == entry->chip_id) && (baseline == entry->baseline) )

WARNING: From:/Signed-off-by: email name mismatch: 'From: [email protected]' != 'Signed-off-by: Nobuaki Tsunashima <[email protected]>'

total: 8 errors, 4 warnings, 59 lines checked

NOTE: For some of the reported defects, checkpatch may be able to
mechanically convert to the typical style using --fix or --fix-inplace.

/github/workspace/src/src/13665743.patch has style problems, please review.

NOTE: Ignored message types: UNKNOWN_COMMIT_ID

NOTE: If any of the errors are false positives, please report
them to the maintainer, see CHECKPATCH in MAINTAINERS.


##############################
Test: GitLint - FAIL
Desc: Run gitlint
Output:
Bluetooth: Patch for CYW4373 hci up fail issue

WARNING: I3 - ignore-body-lines: gitlint will be switching from using Python regex 'match' (match beginning) to 'search' (match anywhere) semantics. Please review your ignore-body-lines.regex option accordingly. To remove this warning, set general.regex-style-search=True. More details: https://jorisroovers.github.io/gitlint/configuration/#regex-style-search
8: B1 Line exceeds max length (84>80): "Especially in USB i/f case, it would be difficult to download patch FW that includes"
9: B1 Line exceeds max length (84>80): "Its fix unless hci is up. The patch forces the driver to skip LE_Read_Transmit_Power"
##############################
Test: CheckAllWarning - WARNING
Desc: Run linux kernel with all warning enabled
Output:
drivers/bluetooth/btbcm.c: In function ‘btbcm_is_disable_broken_read_tx_power_by_chip_ver’:drivers/bluetooth/btbcm.c:453:41: warning: initialization discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers] 453 | struct bcm_chip_version_table *entry = &disable_broken_read_transmit_power_by_chip_ver[0]; | ^
##############################
Test: CheckSparse - WARNING
Desc: Run sparse tool with linux kernel
Output:
drivers/bluetooth/btbcm.c: In function ‘btbcm_is_disable_broken_read_tx_power_by_chip_ver’:drivers/bluetooth/btbcm.c:453:41: warning: initialization discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]drivers/bluetooth/btbcm.c:453:95: warning: incorrect type in initializer (different modifiers)drivers/bluetooth/btbcm.c:453:95: expected struct bcm_chip_version_table *entrydrivers/bluetooth/btbcm.c:453:95: got struct bcm_chip_version_table const *
##############################
Test: CheckSmatch - FAIL
Desc: Run smatch tool with source
Output:

Segmentation fault (core dumped)
make[4]: *** [scripts/Makefile.build:244: net/bluetooth/hci_core.o] Error 139
make[4]: *** Deleting file 'net/bluetooth/hci_core.o'
make[3]: *** [scripts/Makefile.build:485: net/bluetooth] Error 2
make[2]: *** [scripts/Makefile.build:485: net] Error 2
make[2]: *** Waiting for unfinished jobs....
Segmentation fault (core dumped)
make[4]: *** [scripts/Makefile.build:244: drivers/bluetooth/bcm203x.o] Error 139
make[4]: *** Deleting file 'drivers/bluetooth/bcm203x.o'
make[4]: *** Waiting for unfinished jobs....
Segmentation fault (core dumped)
make[4]: *** [scripts/Makefile.build:244: drivers/bluetooth/bpa10x.o] Error 139
make[4]: *** Deleting file 'drivers/bluetooth/bpa10x.o'
make[3]: *** [scripts/Makefile.build:485: drivers/bluetooth] Error 2
make[2]: *** [scripts/Makefile.build:485: drivers] Error 2
make[1]: *** [/github/workspace/src/src/Makefile:1919: .] Error 2
make: *** [Makefile:240: __sub-make] Error 2


---
Regards,
Linux Bluetooth

2024-05-16 19:47:16

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH] Bluetooth: Patch for CYW4373 hci up fail issue

Hi,

kernel test robot noticed the following build warnings:

[auto build test WARNING on bluetooth/master]
[also build test WARNING on bluetooth-next/master linus/master v6.9 next-20240516]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Nobuaki-Tsunashima-infineon-com/Bluetooth-Patch-for-CYW4373-hci-up-fail-issue/20240516-131000
base: https://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth.git master
patch link: https://lore.kernel.org/r/6267800d70ae4344acaba3486b54bc0c%40infineon.com
patch subject: [PATCH] Bluetooth: Patch for CYW4373 hci up fail issue
config: arm-pxa_defconfig (https://download.01.org/0day-ci/archive/20240517/[email protected]/config)
compiler: arm-linux-gnueabi-gcc (GCC) 13.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240517/[email protected]/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/

All warnings (new ones prefixed by >>):

drivers/bluetooth/btbcm.c: In function 'btbcm_is_disable_broken_read_tx_power_by_chip_ver':
>> drivers/bluetooth/btbcm.c:453:48: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
453 | struct bcm_chip_version_table *entry = &disable_broken_read_transmit_power_by_chip_ver[0];
| ^


vim +/const +453 drivers/bluetooth/btbcm.c

440
441 struct bcm_chip_version_table {
442 u8 chip_id;
443 u16 baseline;
444 };
445 #define BCM_ROMFW_BASELINE_NUM 0xFFFF
446 static const struct bcm_chip_version_table disable_broken_read_transmit_power_by_chip_ver[] = {
447 {0x87, BCM_ROMFW_BASELINE_NUM} /* CYW4373/4373E */
448 };
449 static bool btbcm_is_disable_broken_read_tx_power_by_chip_ver(u8 chip_id, u16 baseline)
450 {
451 int i;
452 int table_size = sizeof(disable_broken_read_transmit_power_by_chip_ver)/sizeof(disable_broken_read_transmit_power_by_chip_ver[0]);
> 453 struct bcm_chip_version_table *entry = &disable_broken_read_transmit_power_by_chip_ver[0];
454
455 for( i=0 ; i<table_size ; i++, entry++)
456 {
457 if( (chip_id == entry->chip_id) && (baseline == entry->baseline) )
458 return true;
459 }
460
461 return false;
462 }
463

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

2024-05-16 20:58:19

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH] Bluetooth: Patch for CYW4373 hci up fail issue

Hi,

kernel test robot noticed the following build errors:

[auto build test ERROR on bluetooth/master]
[also build test ERROR on bluetooth-next/master linus/master v6.9 next-20240516]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Nobuaki-Tsunashima-infineon-com/Bluetooth-Patch-for-CYW4373-hci-up-fail-issue/20240516-131000
base: https://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth.git master
patch link: https://lore.kernel.org/r/6267800d70ae4344acaba3486b54bc0c%40infineon.com
patch subject: [PATCH] Bluetooth: Patch for CYW4373 hci up fail issue
config: x86_64-buildonly-randconfig-003-20240517 (https://download.01.org/0day-ci/archive/20240517/[email protected]/config)
compiler: clang version 18.1.5 (https://github.com/llvm/llvm-project 617a15a9eac96088ae5e9134248d8236e34b91b1)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240517/[email protected]/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/

All errors (new ones prefixed by >>):

>> drivers/bluetooth/btbcm.c:453:33: error: initializing 'struct bcm_chip_version_table *' with an expression of type 'const struct bcm_chip_version_table *' discards qualifiers [-Werror,-Wincompatible-pointer-types-discards-qualifiers]
453 | struct bcm_chip_version_table *entry = &disable_broken_read_transmit_power_by_chip_ver[0];
| ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.


vim +453 drivers/bluetooth/btbcm.c

440
441 struct bcm_chip_version_table {
442 u8 chip_id;
443 u16 baseline;
444 };
445 #define BCM_ROMFW_BASELINE_NUM 0xFFFF
446 static const struct bcm_chip_version_table disable_broken_read_transmit_power_by_chip_ver[] = {
447 {0x87, BCM_ROMFW_BASELINE_NUM} /* CYW4373/4373E */
448 };
449 static bool btbcm_is_disable_broken_read_tx_power_by_chip_ver(u8 chip_id, u16 baseline)
450 {
451 int i;
452 int table_size = sizeof(disable_broken_read_transmit_power_by_chip_ver)/sizeof(disable_broken_read_transmit_power_by_chip_ver[0]);
> 453 struct bcm_chip_version_table *entry = &disable_broken_read_transmit_power_by_chip_ver[0];
454
455 for( i=0 ; i<table_size ; i++, entry++)
456 {
457 if( (chip_id == entry->chip_id) && (baseline == entry->baseline) )
458 return true;
459 }
460
461 return false;
462 }
463

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

2024-05-16 23:22:54

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH] Bluetooth: Patch for CYW4373 hci up fail issue

Hi,

kernel test robot noticed the following build warnings:

[auto build test WARNING on bluetooth/master]
[also build test WARNING on bluetooth-next/master linus/master v6.9 next-20240516]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Nobuaki-Tsunashima-infineon-com/Bluetooth-Patch-for-CYW4373-hci-up-fail-issue/20240516-131000
base: https://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth.git master
patch link: https://lore.kernel.org/r/6267800d70ae4344acaba3486b54bc0c%40infineon.com
patch subject: [PATCH] Bluetooth: Patch for CYW4373 hci up fail issue
config: i386-randconfig-062-20240517 (https://download.01.org/0day-ci/archive/20240517/[email protected]/config)
compiler: gcc-13 (Ubuntu 13.2.0-4ubuntu3) 13.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240517/[email protected]/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/

sparse warnings: (new ones prefixed by >>)
>> drivers/bluetooth/btbcm.c:453:95: sparse: sparse: incorrect type in initializer (different modifiers) @@ expected struct bcm_chip_version_table *entry @@ got struct bcm_chip_version_table const * @@
drivers/bluetooth/btbcm.c:453:95: sparse: expected struct bcm_chip_version_table *entry
drivers/bluetooth/btbcm.c:453:95: sparse: got struct bcm_chip_version_table const *

vim +453 drivers/bluetooth/btbcm.c

440
441 struct bcm_chip_version_table {
442 u8 chip_id;
443 u16 baseline;
444 };
445 #define BCM_ROMFW_BASELINE_NUM 0xFFFF
446 static const struct bcm_chip_version_table disable_broken_read_transmit_power_by_chip_ver[] = {
447 {0x87, BCM_ROMFW_BASELINE_NUM} /* CYW4373/4373E */
448 };
449 static bool btbcm_is_disable_broken_read_tx_power_by_chip_ver(u8 chip_id, u16 baseline)
450 {
451 int i;
452 int table_size = sizeof(disable_broken_read_transmit_power_by_chip_ver)/sizeof(disable_broken_read_transmit_power_by_chip_ver[0]);
> 453 struct bcm_chip_version_table *entry = &disable_broken_read_transmit_power_by_chip_ver[0];
454
455 for( i=0 ; i<table_size ; i++, entry++)
456 {
457 if( (chip_id == entry->chip_id) && (baseline == entry->baseline) )
458 return true;
459 }
460
461 return false;
462 }
463

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki