linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/3] arm64: allwinner: a64: add bluetooth support for Pinebook
@ 2020-07-05 19:51 Vasily Khoruzhick
  2020-07-05 19:51 ` [PATCH 1/3] Bluetooth: Add new quirk for broken local ext features max_page Vasily Khoruzhick
                   ` (2 more replies)
  0 siblings, 3 replies; 14+ messages in thread
From: Vasily Khoruzhick @ 2020-07-05 19:51 UTC (permalink / raw)
  To: Rob Herring, Maxime Ripard, Chen-Yu Tsai, Marcel Holtmann,
	Johan Hedberg, David S. Miller, Jakub Kicinski, devicetree,
	linux-arm-kernel, linux-kernel, linux-bluetooth, netdev,
	Ondrej Jirman
  Cc: Vasily Khoruzhick

Pinebook uses RTL8723CS for WiFi and bluetooth. Unfortunately RTL8723CS
has broken BT-4.1 support, so it requires a quirk.

Add a quirk, wire up 8723CS support in btrtl and enable bluetooth
in Pinebook dts.

Vasily Khoruzhick (3):
  Bluetooth: Add new quirk for broken local ext features max_page
  Bluetooth: btrtl: add support for the RTL8723CS
  arm64: allwinner: a64: enable Bluetooth On Pinebook

 .../dts/allwinner/sun50i-a64-pinebook.dts     |  12 ++
 drivers/bluetooth/btrtl.c                     | 128 +++++++++++++++++-
 drivers/bluetooth/btrtl.h                     |  12 ++
 drivers/bluetooth/hci_h5.c                    |   6 +
 include/net/bluetooth/hci.h                   |   7 +
 net/bluetooth/hci_event.c                     |   4 +-
 6 files changed, 165 insertions(+), 4 deletions(-)

-- 
2.27.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 1/3] Bluetooth: Add new quirk for broken local ext features max_page
  2020-07-05 19:51 [PATCH 0/3] arm64: allwinner: a64: add bluetooth support for Pinebook Vasily Khoruzhick
@ 2020-07-05 19:51 ` Vasily Khoruzhick
  2020-07-07 16:03   ` Marcel Holtmann
  2020-07-05 19:51 ` [PATCH 2/3] Bluetooth: btrtl: add support for the RTL8723CS Vasily Khoruzhick
  2020-07-05 19:51 ` [PATCH 3/3] arm64: allwinner: a64: enable Bluetooth On Pinebook Vasily Khoruzhick
  2 siblings, 1 reply; 14+ messages in thread
From: Vasily Khoruzhick @ 2020-07-05 19:51 UTC (permalink / raw)
  To: Rob Herring, Maxime Ripard, Chen-Yu Tsai, Marcel Holtmann,
	Johan Hedberg, David S. Miller, Jakub Kicinski, devicetree,
	linux-arm-kernel, linux-kernel, linux-bluetooth, netdev,
	Ondrej Jirman
  Cc: Vasily Khoruzhick

Some adapters (e.g. RTL8723CS) advertise that they have more than
2 pages for local ext features, but they don't support any features
declared in these pages. RTL8723CS reports max_page = 2 and declares
support for sync train and secure connection, but it responds with
either garbage or with error in status on corresponding commands.

Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
---
 include/net/bluetooth/hci.h | 7 +++++++
 net/bluetooth/hci_event.c   | 4 +++-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
index 16ab6ce87883..8e4c16210d18 100644
--- a/include/net/bluetooth/hci.h
+++ b/include/net/bluetooth/hci.h
@@ -227,6 +227,13 @@ enum {
 	 * supported.
 	 */
 	HCI_QUIRK_VALID_LE_STATES,
+
+	/* When this quirk is set, max_page for local extended features
+	 * is set to 1, even if controller reports higher number. Some
+	 * controllers (e.g. RTL8723CS) report more pages, but they
+	 * don't actually support features declared there.
+	 */
+	HCI_QUIRK_BROKEN_LOCAL_EXT_FTR_MAX_PAGE,
 };
 
 /* HCI device flags */
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index cfeaee347db3..df3232828978 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -700,7 +700,9 @@ static void hci_cc_read_local_ext_features(struct hci_dev *hdev,
 	if (rp->status)
 		return;
 
-	if (hdev->max_page < rp->max_page)
+	if (!test_bit(HCI_QUIRK_BROKEN_LOCAL_EXT_FTR_MAX_PAGE,
+		      &hdev->quirks) &&
+	    hdev->max_page < rp->max_page)
 		hdev->max_page = rp->max_page;
 
 	if (rp->page < HCI_MAX_PAGES)
-- 
2.27.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 2/3] Bluetooth: btrtl: add support for the RTL8723CS
  2020-07-05 19:51 [PATCH 0/3] arm64: allwinner: a64: add bluetooth support for Pinebook Vasily Khoruzhick
  2020-07-05 19:51 ` [PATCH 1/3] Bluetooth: Add new quirk for broken local ext features max_page Vasily Khoruzhick
@ 2020-07-05 19:51 ` Vasily Khoruzhick
  2020-07-07 16:01   ` Marcel Holtmann
  2020-07-07 23:17   ` kernel test robot
  2020-07-05 19:51 ` [PATCH 3/3] arm64: allwinner: a64: enable Bluetooth On Pinebook Vasily Khoruzhick
  2 siblings, 2 replies; 14+ messages in thread
From: Vasily Khoruzhick @ 2020-07-05 19:51 UTC (permalink / raw)
  To: Rob Herring, Maxime Ripard, Chen-Yu Tsai, Marcel Holtmann,
	Johan Hedberg, David S. Miller, Jakub Kicinski, devicetree,
	linux-arm-kernel, linux-kernel, linux-bluetooth, netdev,
	Ondrej Jirman
  Cc: Vasily Khoruzhick

The Realtek RTL8723CS is SDIO WiFi chip. It also contains a Bluetooth
module which is connected via UART to the host.

It shares lmp subversion with 8703B, so Realtek's userspace
initialization tool (rtk_hciattach) differentiates varieties of RTL8723CS
(CG, VF, XX) with RTL8703B using vendor's command to read chip type.

Also this chip declares support for some features it doesn't support
so add a quirk to indicate that these features are broken.

Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
---
 drivers/bluetooth/btrtl.c  | 128 ++++++++++++++++++++++++++++++++++++-
 drivers/bluetooth/btrtl.h  |  12 ++++
 drivers/bluetooth/hci_h5.c |   6 ++
 3 files changed, 143 insertions(+), 3 deletions(-)

diff --git a/drivers/bluetooth/btrtl.c b/drivers/bluetooth/btrtl.c
index 3a9afc905f24..8c7b35abe492 100644
--- a/drivers/bluetooth/btrtl.c
+++ b/drivers/bluetooth/btrtl.c
@@ -17,8 +17,12 @@
 
 #define VERSION "0.1"
 
+#define RTL_CHIP_8723CS_CG	3
+#define RTL_CHIP_8723CS_VF	4
+#define RTL_CHIP_8723CS_XX	5
 #define RTL_EPATCH_SIGNATURE	"Realtech"
 #define RTL_ROM_LMP_3499	0x3499
+#define RTL_ROM_LMP_8703B	0x8703
 #define RTL_ROM_LMP_8723A	0x1200
 #define RTL_ROM_LMP_8723B	0x8723
 #define RTL_ROM_LMP_8723D	0x8873
@@ -31,6 +35,7 @@
 #define IC_MATCH_FL_HCIREV	(1 << 1)
 #define IC_MATCH_FL_HCIVER	(1 << 2)
 #define IC_MATCH_FL_HCIBUS	(1 << 3)
+#define IC_MATCH_FL_CHIP_TYPE	(1 << 4)
 #define IC_INFO(lmps, hcir) \
 	.match_flags = IC_MATCH_FL_LMPSUBV | IC_MATCH_FL_HCIREV, \
 	.lmp_subver = (lmps), \
@@ -42,6 +47,7 @@ struct id_table {
 	__u16 hci_rev;
 	__u8 hci_ver;
 	__u8 hci_bus;
+	__u8 chip_type;
 	bool config_needed;
 	bool has_rom_version;
 	char *fw_name;
@@ -89,6 +95,39 @@ static const struct id_table ic_id_table[] = {
 	  .fw_name  = "rtl_bt/rtl8723b_fw.bin",
 	  .cfg_name = "rtl_bt/rtl8723b_config" },
 
+	/* 8723CS-CG */
+	{ .match_flags = IC_MATCH_FL_LMPSUBV | IC_MATCH_FL_CHIP_TYPE |
+			 IC_MATCH_FL_HCIBUS,
+	  .lmp_subver = RTL_ROM_LMP_8703B,
+	  .chip_type = RTL_CHIP_8723CS_CG,
+	  .hci_bus = HCI_UART,
+	  .config_needed = true,
+	  .has_rom_version = true,
+	  .fw_name  = "rtl_bt/rtl8723cs_cg_fw.bin",
+	  .cfg_name = "rtl_bt/rtl8723cs_cg_config" },
+
+	/* 8723CS-VF */
+	{ .match_flags = IC_MATCH_FL_LMPSUBV | IC_MATCH_FL_CHIP_TYPE |
+			 IC_MATCH_FL_HCIBUS,
+	  .lmp_subver = RTL_ROM_LMP_8703B,
+	  .chip_type = RTL_CHIP_8723CS_VF,
+	  .hci_bus = HCI_UART,
+	  .config_needed = true,
+	  .has_rom_version = true,
+	  .fw_name  = "rtl_bt/rtl8723cs_vf_fw.bin",
+	  .cfg_name = "rtl_bt/rtl8723cs_vf_config" },
+
+	/* 8723CS-XX */
+	{ .match_flags = IC_MATCH_FL_LMPSUBV | IC_MATCH_FL_CHIP_TYPE |
+			 IC_MATCH_FL_HCIBUS,
+	  .lmp_subver = RTL_ROM_LMP_8703B,
+	  .chip_type = RTL_CHIP_8723CS_XX,
+	  .hci_bus = HCI_UART,
+	  .config_needed = true,
+	  .has_rom_version = true,
+	  .fw_name  = "rtl_bt/rtl8723cs_xx_fw.bin",
+	  .cfg_name = "rtl_bt/rtl8723cs_xx_config" },
+
 	/* 8723D */
 	{ IC_INFO(RTL_ROM_LMP_8723B, 0xd),
 	  .config_needed = true,
@@ -171,7 +210,8 @@ static const struct id_table ic_id_table[] = {
 	};
 
 static const struct id_table *btrtl_match_ic(u16 lmp_subver, u16 hci_rev,
-					     u8 hci_ver, u8 hci_bus)
+					     u8 hci_ver, u8 hci_bus,
+					     u8 chip_type)
 {
 	int i;
 
@@ -188,6 +228,9 @@ static const struct id_table *btrtl_match_ic(u16 lmp_subver, u16 hci_rev,
 		if ((ic_id_table[i].match_flags & IC_MATCH_FL_HCIBUS) &&
 		    (ic_id_table[i].hci_bus != hci_bus))
 			continue;
+		if ((ic_id_table[i].match_flags & IC_MATCH_FL_CHIP_TYPE) &&
+		    (ic_id_table[i].chip_type != chip_type))
+			continue;
 
 		break;
 	}
@@ -270,6 +313,7 @@ static int rtlbt_parse_firmware(struct hci_dev *hdev,
 		{ RTL_ROM_LMP_8723B, 1 },
 		{ RTL_ROM_LMP_8821A, 2 },
 		{ RTL_ROM_LMP_8761A, 3 },
+		{ RTL_ROM_LMP_8703B, 7 },
 		{ RTL_ROM_LMP_8822B, 8 },
 		{ RTL_ROM_LMP_8723B, 9 },	/* 8723D */
 		{ RTL_ROM_LMP_8821A, 10 },	/* 8821C */
@@ -545,6 +589,48 @@ static int btrtl_setup_rtl8723b(struct hci_dev *hdev,
 	return ret;
 }
 
+static bool rtl_has_chip_type(u16 lmp_subver)
+{
+	switch (lmp_subver) {
+	case RTL_ROM_LMP_8703B:
+		return true;
+	default:
+		break;
+	}
+
+	return  false;
+}
+
+static int rtl_read_chip_type(struct hci_dev *hdev, u8 *type)
+{
+	struct rtl_chip_type_evt *chip_type;
+	struct sk_buff *skb;
+	const unsigned char cmd_buf[] = {0x00, 0x94, 0xa0, 0x00, 0xb0};
+
+	/* Read RTL chip type command */
+	skb = __hci_cmd_sync(hdev, 0xfc61, 5, cmd_buf, HCI_INIT_TIMEOUT);
+	if (IS_ERR(skb)) {
+		rtl_dev_err(hdev, "Read chip type failed (%ld)",
+			    PTR_ERR(skb));
+		return PTR_ERR(skb);
+	}
+
+	if (skb->len != sizeof(*chip_type)) {
+		rtl_dev_err(hdev, "RTL chip type event length mismatch");
+		kfree_skb(skb);
+		return -EIO;
+	}
+
+	chip_type = (struct rtl_chip_type_evt *)skb->data;
+	rtl_dev_info(hdev, "chip_type status=%x type=%x",
+		     chip_type->status, chip_type->type);
+
+	*type = chip_type->type & 0x0f;
+
+	kfree_skb(skb);
+	return 0;
+}
+
 void btrtl_free(struct btrtl_device_info *btrtl_dev)
 {
 	kvfree(btrtl_dev->fw_data);
@@ -561,7 +647,7 @@ struct btrtl_device_info *btrtl_initialize(struct hci_dev *hdev,
 	struct hci_rp_read_local_version *resp;
 	char cfg_name[40];
 	u16 hci_rev, lmp_subver;
-	u8 hci_ver;
+	u8 hci_ver, chip_type = 0;
 	int ret;
 
 	btrtl_dev = kzalloc(sizeof(*btrtl_dev), GFP_KERNEL);
@@ -586,8 +672,14 @@ struct btrtl_device_info *btrtl_initialize(struct hci_dev *hdev,
 	lmp_subver = le16_to_cpu(resp->lmp_subver);
 	kfree_skb(skb);
 
+	if (rtl_has_chip_type(lmp_subver)) {
+		ret = rtl_read_chip_type(hdev, &chip_type);
+		if (ret)
+			goto err_free;
+	}
+
 	btrtl_dev->ic_info = btrtl_match_ic(lmp_subver, hci_rev, hci_ver,
-					    hdev->bus);
+					    hdev->bus, chip_type);
 
 	if (!btrtl_dev->ic_info) {
 		rtl_dev_info(hdev, "unknown IC info, lmp subver %04x, hci rev %04x, hci ver %04x",
@@ -660,6 +752,7 @@ int btrtl_download_firmware(struct hci_dev *hdev,
 	case RTL_ROM_LMP_8821A:
 	case RTL_ROM_LMP_8761A:
 	case RTL_ROM_LMP_8822B:
+	case RTL_ROM_LMP_8703B:
 		return btrtl_setup_rtl8723b(hdev, btrtl_dev);
 	default:
 		rtl_dev_info(hdev, "assuming no firmware upload needed");
@@ -678,7 +771,12 @@ int btrtl_setup_realtek(struct hci_dev *hdev)
 		return PTR_ERR(btrtl_dev);
 
 	ret = btrtl_download_firmware(hdev, btrtl_dev);
+	if (ret)
+		goto out_free;
 
+	btrtl_apply_quirks(hdev, btrtl_dev);
+
+out_free:
 	btrtl_free(btrtl_dev);
 
 	/* Enable controller to do both LE scan and BR/EDR inquiry
@@ -818,6 +916,24 @@ int btrtl_get_uart_settings(struct hci_dev *hdev,
 }
 EXPORT_SYMBOL_GPL(btrtl_get_uart_settings);
 
+void btrtl_apply_quirks(struct hci_dev *hdev,
+			struct btrtl_device_info *btrtl_dev)
+{
+	switch (btrtl_dev->ic_info->lmp_subver) {
+	case RTL_ROM_LMP_8703B:
+		/* 8723CS reports two pages for local ext features,
+		 * but it doesn't support any features from page 2 -
+		 * it either responds with garbage or with error status
+		 */
+		set_bit(HCI_QUIRK_BROKEN_LOCAL_EXT_FTR_MAX_PAGE,
+			&hdev->quirks);
+		break;
+	default:
+		break;
+	}
+}
+EXPORT_SYMBOL_GPL(btrtl_apply_quirks);
+
 MODULE_AUTHOR("Daniel Drake <drake@endlessm.com>");
 MODULE_DESCRIPTION("Bluetooth support for Realtek devices ver " VERSION);
 MODULE_VERSION(VERSION);
@@ -827,6 +943,12 @@ MODULE_FIRMWARE("rtl_bt/rtl8723b_fw.bin");
 MODULE_FIRMWARE("rtl_bt/rtl8723b_config.bin");
 MODULE_FIRMWARE("rtl_bt/rtl8723bs_fw.bin");
 MODULE_FIRMWARE("rtl_bt/rtl8723bs_config.bin");
+MODULE_FIRMWARE("rtl_bt/rtl8723cs_cg_fw.bin");
+MODULE_FIRMWARE("rtl_bt/rtl8723cs_cg_config.bin");
+MODULE_FIRMWARE("rtl_bt/rtl8723cs_vf_fw.bin");
+MODULE_FIRMWARE("rtl_bt/rtl8723cs_vf_config.bin");
+MODULE_FIRMWARE("rtl_bt/rtl8723cs_xx_fw.bin");
+MODULE_FIRMWARE("rtl_bt/rtl8723cs_xx_config.bin");
 MODULE_FIRMWARE("rtl_bt/rtl8723ds_fw.bin");
 MODULE_FIRMWARE("rtl_bt/rtl8723ds_config.bin");
 MODULE_FIRMWARE("rtl_bt/rtl8761a_fw.bin");
diff --git a/drivers/bluetooth/btrtl.h b/drivers/bluetooth/btrtl.h
index 2a582682136d..152ed2ece4c2 100644
--- a/drivers/bluetooth/btrtl.h
+++ b/drivers/bluetooth/btrtl.h
@@ -14,6 +14,11 @@
 
 struct btrtl_device_info;
 
+struct rtl_chip_type_evt {
+	__u8 status;
+	__u8 type;
+} __packed;
+
 struct rtl_download_cmd {
 	__u8 index;
 	__u8 data[RTL_FRAG_LEN];
@@ -60,6 +65,8 @@ int btrtl_get_uart_settings(struct hci_dev *hdev,
 			    struct btrtl_device_info *btrtl_dev,
 			    unsigned int *controller_baudrate,
 			    u32 *device_baudrate, bool *flow_control);
+void btrtl_apply_quirks(struct hci_dev *hdev,
+			struct btrtl_device_info *btrtl_dev);
 
 #else
 
@@ -96,6 +103,11 @@ static inline int btrtl_get_uart_settings(struct hci_dev *hdev,
 					  bool *flow_control)
 {
 	return -ENOENT;
+
+static inline void btrtl_apply_quirks(struct hci_dev *hdev,
+			struct btrtl_device_info *btrtl_dev)
+{
+}
 }
 
 #endif
diff --git a/drivers/bluetooth/hci_h5.c b/drivers/bluetooth/hci_h5.c
index e60b2e0773db..c34acab9e8ac 100644
--- a/drivers/bluetooth/hci_h5.c
+++ b/drivers/bluetooth/hci_h5.c
@@ -904,6 +904,10 @@ static int h5_btrtl_setup(struct h5 *h5)
 	err = btrtl_download_firmware(h5->hu->hdev, btrtl_dev);
 	/* Give the device some time before the hci-core sends it a reset */
 	usleep_range(10000, 20000);
+	if (err)
+		goto out_free;
+
+	btrtl_apply_quirks(h5->hu->hdev, btrtl_dev);
 
 out_free:
 	btrtl_free(btrtl_dev);
@@ -1020,6 +1024,8 @@ static const struct of_device_id rtl_bluetooth_of_match[] = {
 	  .data = (const void *)&rtl_vnd },
 	{ .compatible = "realtek,rtl8723bs-bt",
 	  .data = (const void *)&rtl_vnd },
+	{ .compatible = "realtek,rtl8723cs-bt",
+	  .data = (const void *)&rtl_vnd },
 #endif
 	{ },
 };
-- 
2.27.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 3/3] arm64: allwinner: a64: enable Bluetooth On Pinebook
  2020-07-05 19:51 [PATCH 0/3] arm64: allwinner: a64: add bluetooth support for Pinebook Vasily Khoruzhick
  2020-07-05 19:51 ` [PATCH 1/3] Bluetooth: Add new quirk for broken local ext features max_page Vasily Khoruzhick
  2020-07-05 19:51 ` [PATCH 2/3] Bluetooth: btrtl: add support for the RTL8723CS Vasily Khoruzhick
@ 2020-07-05 19:51 ` Vasily Khoruzhick
  2020-07-06 11:47   ` Maxime Ripard
  2 siblings, 1 reply; 14+ messages in thread
From: Vasily Khoruzhick @ 2020-07-05 19:51 UTC (permalink / raw)
  To: Rob Herring, Maxime Ripard, Chen-Yu Tsai, Marcel Holtmann,
	Johan Hedberg, David S. Miller, Jakub Kicinski, devicetree,
	linux-arm-kernel, linux-kernel, linux-bluetooth, netdev,
	Ondrej Jirman
  Cc: Vasily Khoruzhick

Pinebook has an RTL8723CS WiFi + BT chip, BT is connected to UART1
and uses PL5 as device wake GPIO, PL6 as host wake GPIO the I2C
controlling signals are connected to R_I2C bus.

Enable it in the device tree.

Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
---
 .../arm64/boot/dts/allwinner/sun50i-a64-pinebook.dts | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-pinebook.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-pinebook.dts
index 64b1c54f87c0..e63ff271be4e 100644
--- a/arch/arm64/boot/dts/allwinner/sun50i-a64-pinebook.dts
+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-pinebook.dts
@@ -408,6 +408,18 @@ &uart0 {
 	status = "okay";
 };
 
+&uart1 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>;
+	status = "okay";
+
+	bluetooth {
+		compatible = "realtek,rtl8723cs-bt";
+		device-wake-gpios = <&r_pio 0 5 GPIO_ACTIVE_LOW>; /* PL5 */
+		host-wake-gpios = <&r_pio 0 6 GPIO_ACTIVE_HIGH>; /* PL6 */
+	};
+};
+
 &usb_otg {
 	dr_mode = "host";
 };
-- 
2.27.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [PATCH 3/3] arm64: allwinner: a64: enable Bluetooth On Pinebook
  2020-07-05 19:51 ` [PATCH 3/3] arm64: allwinner: a64: enable Bluetooth On Pinebook Vasily Khoruzhick
@ 2020-07-06 11:47   ` Maxime Ripard
  2020-07-13  5:14     ` Vasily Khoruzhick
  0 siblings, 1 reply; 14+ messages in thread
From: Maxime Ripard @ 2020-07-06 11:47 UTC (permalink / raw)
  To: Vasily Khoruzhick
  Cc: Ondrej Jirman, devicetree, Johan Hedberg, netdev,
	Marcel Holtmann, linux-kernel, linux-bluetooth, Chen-Yu Tsai,
	Rob Herring, Jakub Kicinski, David S. Miller, linux-arm-kernel

Hi,

On Sun, Jul 05, 2020 at 12:51:10PM -0700, Vasily Khoruzhick wrote:
> Pinebook has an RTL8723CS WiFi + BT chip, BT is connected to UART1
> and uses PL5 as device wake GPIO, PL6 as host wake GPIO the I2C
> controlling signals are connected to R_I2C bus.
> 
> Enable it in the device tree.
> 
> Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
> ---
>  .../arm64/boot/dts/allwinner/sun50i-a64-pinebook.dts | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
> 
> diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-pinebook.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-pinebook.dts
> index 64b1c54f87c0..e63ff271be4e 100644
> --- a/arch/arm64/boot/dts/allwinner/sun50i-a64-pinebook.dts
> +++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-pinebook.dts
> @@ -408,6 +408,18 @@ &uart0 {
>  	status = "okay";
>  };
>  
> +&uart1 {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>;
> +	status = "okay";

You probably need uart-has-rtscts here

> +
> +	bluetooth {
> +		compatible = "realtek,rtl8723cs-bt";
> +		device-wake-gpios = <&r_pio 0 5 GPIO_ACTIVE_LOW>; /* PL5 */
> +		host-wake-gpios = <&r_pio 0 6 GPIO_ACTIVE_HIGH>; /* PL6 */
> +	};

And max-speed I guess?

Maxime
>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2/3] Bluetooth: btrtl: add support for the RTL8723CS
  2020-07-05 19:51 ` [PATCH 2/3] Bluetooth: btrtl: add support for the RTL8723CS Vasily Khoruzhick
@ 2020-07-07 16:01   ` Marcel Holtmann
  2020-07-13  5:07     ` Vasily Khoruzhick
  2020-07-07 23:17   ` kernel test robot
  1 sibling, 1 reply; 14+ messages in thread
From: Marcel Holtmann @ 2020-07-07 16:01 UTC (permalink / raw)
  To: Vasily Khoruzhick
  Cc: Ondrej Jirman, devicetree, Johan Hedberg, netdev, kernel list,
	Maxime Ripard, linux-bluetooth, Chen-Yu Tsai, Rob Herring,
	Jakub Kicinski, David S. Miller, linux-arm-kernel

Hi Vasily,

> The Realtek RTL8723CS is SDIO WiFi chip. It also contains a Bluetooth
> module which is connected via UART to the host.
> 
> It shares lmp subversion with 8703B, so Realtek's userspace
> initialization tool (rtk_hciattach) differentiates varieties of RTL8723CS
> (CG, VF, XX) with RTL8703B using vendor's command to read chip type.
> 
> Also this chip declares support for some features it doesn't support
> so add a quirk to indicate that these features are broken.
> 
> Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
> ---
> drivers/bluetooth/btrtl.c  | 128 ++++++++++++++++++++++++++++++++++++-
> drivers/bluetooth/btrtl.h  |  12 ++++
> drivers/bluetooth/hci_h5.c |   6 ++
> 3 files changed, 143 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/bluetooth/btrtl.c b/drivers/bluetooth/btrtl.c
> index 3a9afc905f24..8c7b35abe492 100644
> --- a/drivers/bluetooth/btrtl.c
> +++ b/drivers/bluetooth/btrtl.c
> @@ -17,8 +17,12 @@
> 
> #define VERSION "0.1"
> 
> +#define RTL_CHIP_8723CS_CG	3
> +#define RTL_CHIP_8723CS_VF	4
> +#define RTL_CHIP_8723CS_XX	5
> #define RTL_EPATCH_SIGNATURE	"Realtech"
> #define RTL_ROM_LMP_3499	0x3499
> +#define RTL_ROM_LMP_8703B	0x8703
> #define RTL_ROM_LMP_8723A	0x1200
> #define RTL_ROM_LMP_8723B	0x8723
> #define RTL_ROM_LMP_8723D	0x8873
> @@ -31,6 +35,7 @@
> #define IC_MATCH_FL_HCIREV	(1 << 1)
> #define IC_MATCH_FL_HCIVER	(1 << 2)
> #define IC_MATCH_FL_HCIBUS	(1 << 3)
> +#define IC_MATCH_FL_CHIP_TYPE	(1 << 4)
> #define IC_INFO(lmps, hcir) \
> 	.match_flags = IC_MATCH_FL_LMPSUBV | IC_MATCH_FL_HCIREV, \
> 	.lmp_subver = (lmps), \
> @@ -42,6 +47,7 @@ struct id_table {
> 	__u16 hci_rev;
> 	__u8 hci_ver;
> 	__u8 hci_bus;
> +	__u8 chip_type;
> 	bool config_needed;
> 	bool has_rom_version;
> 	char *fw_name;
> @@ -89,6 +95,39 @@ static const struct id_table ic_id_table[] = {
> 	  .fw_name  = "rtl_bt/rtl8723b_fw.bin",
> 	  .cfg_name = "rtl_bt/rtl8723b_config" },
> 
> +	/* 8723CS-CG */
> +	{ .match_flags = IC_MATCH_FL_LMPSUBV | IC_MATCH_FL_CHIP_TYPE |
> +			 IC_MATCH_FL_HCIBUS,
> +	  .lmp_subver = RTL_ROM_LMP_8703B,
> +	  .chip_type = RTL_CHIP_8723CS_CG,
> +	  .hci_bus = HCI_UART,
> +	  .config_needed = true,
> +	  .has_rom_version = true,
> +	  .fw_name  = "rtl_bt/rtl8723cs_cg_fw.bin",
> +	  .cfg_name = "rtl_bt/rtl8723cs_cg_config" },
> +
> +	/* 8723CS-VF */
> +	{ .match_flags = IC_MATCH_FL_LMPSUBV | IC_MATCH_FL_CHIP_TYPE |
> +			 IC_MATCH_FL_HCIBUS,
> +	  .lmp_subver = RTL_ROM_LMP_8703B,
> +	  .chip_type = RTL_CHIP_8723CS_VF,
> +	  .hci_bus = HCI_UART,
> +	  .config_needed = true,
> +	  .has_rom_version = true,
> +	  .fw_name  = "rtl_bt/rtl8723cs_vf_fw.bin",
> +	  .cfg_name = "rtl_bt/rtl8723cs_vf_config" },
> +
> +	/* 8723CS-XX */
> +	{ .match_flags = IC_MATCH_FL_LMPSUBV | IC_MATCH_FL_CHIP_TYPE |
> +			 IC_MATCH_FL_HCIBUS,
> +	  .lmp_subver = RTL_ROM_LMP_8703B,
> +	  .chip_type = RTL_CHIP_8723CS_XX,
> +	  .hci_bus = HCI_UART,
> +	  .config_needed = true,
> +	  .has_rom_version = true,
> +	  .fw_name  = "rtl_bt/rtl8723cs_xx_fw.bin",
> +	  .cfg_name = "rtl_bt/rtl8723cs_xx_config" },
> +
> 	/* 8723D */
> 	{ IC_INFO(RTL_ROM_LMP_8723B, 0xd),
> 	  .config_needed = true,
> @@ -171,7 +210,8 @@ static const struct id_table ic_id_table[] = {
> 	};
> 
> static const struct id_table *btrtl_match_ic(u16 lmp_subver, u16 hci_rev,
> -					     u8 hci_ver, u8 hci_bus)
> +					     u8 hci_ver, u8 hci_bus,
> +					     u8 chip_type)
> {
> 	int i;
> 
> @@ -188,6 +228,9 @@ static const struct id_table *btrtl_match_ic(u16 lmp_subver, u16 hci_rev,
> 		if ((ic_id_table[i].match_flags & IC_MATCH_FL_HCIBUS) &&
> 		    (ic_id_table[i].hci_bus != hci_bus))
> 			continue;
> +		if ((ic_id_table[i].match_flags & IC_MATCH_FL_CHIP_TYPE) &&
> +		    (ic_id_table[i].chip_type != chip_type))
> +			continue;
> 
> 		break;
> 	}
> @@ -270,6 +313,7 @@ static int rtlbt_parse_firmware(struct hci_dev *hdev,
> 		{ RTL_ROM_LMP_8723B, 1 },
> 		{ RTL_ROM_LMP_8821A, 2 },
> 		{ RTL_ROM_LMP_8761A, 3 },
> +		{ RTL_ROM_LMP_8703B, 7 },
> 		{ RTL_ROM_LMP_8822B, 8 },
> 		{ RTL_ROM_LMP_8723B, 9 },	/* 8723D */
> 		{ RTL_ROM_LMP_8821A, 10 },	/* 8821C */
> @@ -545,6 +589,48 @@ static int btrtl_setup_rtl8723b(struct hci_dev *hdev,
> 	return ret;
> }
> 
> +static bool rtl_has_chip_type(u16 lmp_subver)
> +{
> +	switch (lmp_subver) {
> +	case RTL_ROM_LMP_8703B:
> +		return true;
> +	default:
> +		break;
> +	}
> +
> +	return  false;
> +}
> +
> +static int rtl_read_chip_type(struct hci_dev *hdev, u8 *type)
> +{
> +	struct rtl_chip_type_evt *chip_type;
> +	struct sk_buff *skb;
> +	const unsigned char cmd_buf[] = {0x00, 0x94, 0xa0, 0x00, 0xb0};
> +
> +	/* Read RTL chip type command */
> +	skb = __hci_cmd_sync(hdev, 0xfc61, 5, cmd_buf, HCI_INIT_TIMEOUT);
> +	if (IS_ERR(skb)) {
> +		rtl_dev_err(hdev, "Read chip type failed (%ld)",
> +			    PTR_ERR(skb));
> +		return PTR_ERR(skb);
> +	}
> +
> +	if (skb->len != sizeof(*chip_type)) {
> +		rtl_dev_err(hdev, "RTL chip type event length mismatch");
> +		kfree_skb(skb);
> +		return -EIO;
> +	}
> +
> +	chip_type = (struct rtl_chip_type_evt *)skb->data;
> +	rtl_dev_info(hdev, "chip_type status=%x type=%x",
> +		     chip_type->status, chip_type->type);
> +
> +	*type = chip_type->type & 0x0f;
> +
> +	kfree_skb(skb);
> +	return 0;
> +}
> +
> void btrtl_free(struct btrtl_device_info *btrtl_dev)
> {
> 	kvfree(btrtl_dev->fw_data);
> @@ -561,7 +647,7 @@ struct btrtl_device_info *btrtl_initialize(struct hci_dev *hdev,
> 	struct hci_rp_read_local_version *resp;
> 	char cfg_name[40];
> 	u16 hci_rev, lmp_subver;
> -	u8 hci_ver;
> +	u8 hci_ver, chip_type = 0;
> 	int ret;
> 
> 	btrtl_dev = kzalloc(sizeof(*btrtl_dev), GFP_KERNEL);
> @@ -586,8 +672,14 @@ struct btrtl_device_info *btrtl_initialize(struct hci_dev *hdev,
> 	lmp_subver = le16_to_cpu(resp->lmp_subver);
> 	kfree_skb(skb);
> 
> +	if (rtl_has_chip_type(lmp_subver)) {
> +		ret = rtl_read_chip_type(hdev, &chip_type);
> +		if (ret)
> +			goto err_free;
> +	}
> +
> 	btrtl_dev->ic_info = btrtl_match_ic(lmp_subver, hci_rev, hci_ver,
> -					    hdev->bus);
> +					    hdev->bus, chip_type);
> 
> 	if (!btrtl_dev->ic_info) {
> 		rtl_dev_info(hdev, "unknown IC info, lmp subver %04x, hci rev %04x, hci ver %04x",
> @@ -660,6 +752,7 @@ int btrtl_download_firmware(struct hci_dev *hdev,
> 	case RTL_ROM_LMP_8821A:
> 	case RTL_ROM_LMP_8761A:
> 	case RTL_ROM_LMP_8822B:
> +	case RTL_ROM_LMP_8703B:
> 		return btrtl_setup_rtl8723b(hdev, btrtl_dev);
> 	default:
> 		rtl_dev_info(hdev, "assuming no firmware upload needed");
> @@ -678,7 +771,12 @@ int btrtl_setup_realtek(struct hci_dev *hdev)
> 		return PTR_ERR(btrtl_dev);
> 
> 	ret = btrtl_download_firmware(hdev, btrtl_dev);
> +	if (ret)
> +		goto out_free;
> 
> +	btrtl_apply_quirks(hdev, btrtl_dev);
> +
> +out_free:
> 	btrtl_free(btrtl_dev);
> 
> 	/* Enable controller to do both LE scan and BR/EDR inquiry
> @@ -818,6 +916,24 @@ int btrtl_get_uart_settings(struct hci_dev *hdev,
> }
> EXPORT_SYMBOL_GPL(btrtl_get_uart_settings);
> 
> +void btrtl_apply_quirks(struct hci_dev *hdev,
> +			struct btrtl_device_info *btrtl_dev)
> +{
> +	switch (btrtl_dev->ic_info->lmp_subver) {
> +	case RTL_ROM_LMP_8703B:
> +		/* 8723CS reports two pages for local ext features,
> +		 * but it doesn't support any features from page 2 -
> +		 * it either responds with garbage or with error status
> +		 */
> +		set_bit(HCI_QUIRK_BROKEN_LOCAL_EXT_FTR_MAX_PAGE,
> +			&hdev->quirks);
> +		break;
> +	default:
> +		break;
> +	}
> +}
> +EXPORT_SYMBOL_GPL(btrtl_apply_quirks);
> +
> MODULE_AUTHOR("Daniel Drake <drake@endlessm.com>");
> MODULE_DESCRIPTION("Bluetooth support for Realtek devices ver " VERSION);
> MODULE_VERSION(VERSION);
> @@ -827,6 +943,12 @@ MODULE_FIRMWARE("rtl_bt/rtl8723b_fw.bin");
> MODULE_FIRMWARE("rtl_bt/rtl8723b_config.bin");
> MODULE_FIRMWARE("rtl_bt/rtl8723bs_fw.bin");
> MODULE_FIRMWARE("rtl_bt/rtl8723bs_config.bin");
> +MODULE_FIRMWARE("rtl_bt/rtl8723cs_cg_fw.bin");
> +MODULE_FIRMWARE("rtl_bt/rtl8723cs_cg_config.bin");
> +MODULE_FIRMWARE("rtl_bt/rtl8723cs_vf_fw.bin");
> +MODULE_FIRMWARE("rtl_bt/rtl8723cs_vf_config.bin");
> +MODULE_FIRMWARE("rtl_bt/rtl8723cs_xx_fw.bin");
> +MODULE_FIRMWARE("rtl_bt/rtl8723cs_xx_config.bin");
> MODULE_FIRMWARE("rtl_bt/rtl8723ds_fw.bin");
> MODULE_FIRMWARE("rtl_bt/rtl8723ds_config.bin");
> MODULE_FIRMWARE("rtl_bt/rtl8761a_fw.bin");
> diff --git a/drivers/bluetooth/btrtl.h b/drivers/bluetooth/btrtl.h
> index 2a582682136d..152ed2ece4c2 100644
> --- a/drivers/bluetooth/btrtl.h
> +++ b/drivers/bluetooth/btrtl.h
> @@ -14,6 +14,11 @@
> 
> struct btrtl_device_info;
> 
> +struct rtl_chip_type_evt {
> +	__u8 status;
> +	__u8 type;
> +} __packed;
> +
> struct rtl_download_cmd {
> 	__u8 index;
> 	__u8 data[RTL_FRAG_LEN];
> @@ -60,6 +65,8 @@ int btrtl_get_uart_settings(struct hci_dev *hdev,
> 			    struct btrtl_device_info *btrtl_dev,
> 			    unsigned int *controller_baudrate,
> 			    u32 *device_baudrate, bool *flow_control);
> +void btrtl_apply_quirks(struct hci_dev *hdev,
> +			struct btrtl_device_info *btrtl_dev);
> 
> #else
> 
> @@ -96,6 +103,11 @@ static inline int btrtl_get_uart_settings(struct hci_dev *hdev,
> 					  bool *flow_control)
> {
> 	return -ENOENT;
> +
> +static inline void btrtl_apply_quirks(struct hci_dev *hdev,
> +			struct btrtl_device_info *btrtl_dev)
> +{
> +}
> }

this hunk is fundamentally broken.

Regards

Marcel


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 1/3] Bluetooth: Add new quirk for broken local ext features max_page
  2020-07-05 19:51 ` [PATCH 1/3] Bluetooth: Add new quirk for broken local ext features max_page Vasily Khoruzhick
@ 2020-07-07 16:03   ` Marcel Holtmann
  2020-07-13  5:08     ` Vasily Khoruzhick
  0 siblings, 1 reply; 14+ messages in thread
From: Marcel Holtmann @ 2020-07-07 16:03 UTC (permalink / raw)
  To: Vasily Khoruzhick
  Cc: Ondrej Jirman, devicetree, Johan Hedberg,
	open list:NETWORKING [GENERAL],
	kernel list, Maxime Ripard, linux-bluetooth, Chen-Yu Tsai,
	Rob Herring, Jakub Kicinski, David S. Miller, linux-arm-kernel

Hi Vasily,

> Some adapters (e.g. RTL8723CS) advertise that they have more than
> 2 pages for local ext features, but they don't support any features
> declared in these pages. RTL8723CS reports max_page = 2 and declares
> support for sync train and secure connection, but it responds with
> either garbage or with error in status on corresponding commands.

please send the btmon for this so I can see what the controller is responding.

Regards

Marcel


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2/3] Bluetooth: btrtl: add support for the RTL8723CS
  2020-07-05 19:51 ` [PATCH 2/3] Bluetooth: btrtl: add support for the RTL8723CS Vasily Khoruzhick
  2020-07-07 16:01   ` Marcel Holtmann
@ 2020-07-07 23:17   ` kernel test robot
  1 sibling, 0 replies; 14+ messages in thread
From: kernel test robot @ 2020-07-07 23:17 UTC (permalink / raw)
  To: Vasily Khoruzhick, Rob Herring, Maxime Ripard, Chen-Yu Tsai,
	Marcel Holtmann, Johan Hedberg, David S. Miller, Jakub Kicinski,
	devicetree, linux-arm-kernel
  Cc: clang-built-linux, kbuild-all, netdev

[-- Attachment #1: Type: text/plain, Size: 2106 bytes --]

Hi Vasily,

I love your patch! Yet something to improve:

[auto build test ERROR on bluetooth-next/master]
[also build test ERROR on sunxi/sunxi/for-next v5.8-rc4 next-20200707]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use  as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Vasily-Khoruzhick/arm64-allwinner-a64-add-bluetooth-support-for-Pinebook/20200706-035246
base:   https://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git master
config: powerpc64-randconfig-r005-20200707 (attached as .config)
compiler: clang version 11.0.0 (https://github.com/llvm/llvm-project 02946de3802d3bc65bc9f2eb9b8d4969b5a7add8)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install powerpc64 cross compiling tool for clang build
        # apt-get install binutils-powerpc64-linux-gnu
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=powerpc64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   In file included from drivers/bluetooth/hci_h5.c:21:
>> drivers/bluetooth/btrtl.h:109:1: error: function definition is not allowed here
   {
   ^
   1 error generated.

vim +109 drivers/bluetooth/btrtl.h

    98	
    99	static inline int btrtl_get_uart_settings(struct hci_dev *hdev,
   100						  struct btrtl_device_info *btrtl_dev,
   101						  unsigned int *controller_baudrate,
   102						  u32 *device_baudrate,
   103						  bool *flow_control)
   104	{
   105		return -ENOENT;
   106	
   107	static inline void btrtl_apply_quirks(struct hci_dev *hdev,
   108				struct btrtl_device_info *btrtl_dev)
 > 109	{
   110	}
   111	}
   112	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 30162 bytes --]

[-- Attachment #3: Type: text/plain, Size: 176 bytes --]

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2/3] Bluetooth: btrtl: add support for the RTL8723CS
  2020-07-07 16:01   ` Marcel Holtmann
@ 2020-07-13  5:07     ` Vasily Khoruzhick
  0 siblings, 0 replies; 14+ messages in thread
From: Vasily Khoruzhick @ 2020-07-13  5:07 UTC (permalink / raw)
  To: Marcel Holtmann
  Cc: Ondrej Jirman, devicetree, Johan Hedberg, netdev, kernel list,
	Maxime Ripard, linux-bluetooth, Chen-Yu Tsai, Rob Herring,
	Jakub Kicinski, David S. Miller, arm-linux

On Tue, Jul 7, 2020 at 9:01 AM Marcel Holtmann <marcel@holtmann.org> wrote:
>
> Hi Vasily,
>
> > The Realtek RTL8723CS is SDIO WiFi chip. It also contains a Bluetooth
> > module which is connected via UART to the host.
> >
> > It shares lmp subversion with 8703B, so Realtek's userspace
> > initialization tool (rtk_hciattach) differentiates varieties of RTL8723CS
> > (CG, VF, XX) with RTL8703B using vendor's command to read chip type.
> >
> > Also this chip declares support for some features it doesn't support
> > so add a quirk to indicate that these features are broken.
> >
> > Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
> > ---
> > drivers/bluetooth/btrtl.c  | 128 ++++++++++++++++++++++++++++++++++++-
> > drivers/bluetooth/btrtl.h  |  12 ++++
> > drivers/bluetooth/hci_h5.c |   6 ++
> > 3 files changed, 143 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/bluetooth/btrtl.c b/drivers/bluetooth/btrtl.c
> > index 3a9afc905f24..8c7b35abe492 100644
> > --- a/drivers/bluetooth/btrtl.c
> > +++ b/drivers/bluetooth/btrtl.c
> > @@ -17,8 +17,12 @@
> >
> > #define VERSION "0.1"
> >
> > +#define RTL_CHIP_8723CS_CG   3
> > +#define RTL_CHIP_8723CS_VF   4
> > +#define RTL_CHIP_8723CS_XX   5
> > #define RTL_EPATCH_SIGNATURE  "Realtech"
> > #define RTL_ROM_LMP_3499      0x3499
> > +#define RTL_ROM_LMP_8703B    0x8703
> > #define RTL_ROM_LMP_8723A     0x1200
> > #define RTL_ROM_LMP_8723B     0x8723
> > #define RTL_ROM_LMP_8723D     0x8873
> > @@ -31,6 +35,7 @@
> > #define IC_MATCH_FL_HCIREV    (1 << 1)
> > #define IC_MATCH_FL_HCIVER    (1 << 2)
> > #define IC_MATCH_FL_HCIBUS    (1 << 3)
> > +#define IC_MATCH_FL_CHIP_TYPE        (1 << 4)
> > #define IC_INFO(lmps, hcir) \
> >       .match_flags = IC_MATCH_FL_LMPSUBV | IC_MATCH_FL_HCIREV, \
> >       .lmp_subver = (lmps), \
> > @@ -42,6 +47,7 @@ struct id_table {
> >       __u16 hci_rev;
> >       __u8 hci_ver;
> >       __u8 hci_bus;
> > +     __u8 chip_type;
> >       bool config_needed;
> >       bool has_rom_version;
> >       char *fw_name;
> > @@ -89,6 +95,39 @@ static const struct id_table ic_id_table[] = {
> >         .fw_name  = "rtl_bt/rtl8723b_fw.bin",
> >         .cfg_name = "rtl_bt/rtl8723b_config" },
> >
> > +     /* 8723CS-CG */
> > +     { .match_flags = IC_MATCH_FL_LMPSUBV | IC_MATCH_FL_CHIP_TYPE |
> > +                      IC_MATCH_FL_HCIBUS,
> > +       .lmp_subver = RTL_ROM_LMP_8703B,
> > +       .chip_type = RTL_CHIP_8723CS_CG,
> > +       .hci_bus = HCI_UART,
> > +       .config_needed = true,
> > +       .has_rom_version = true,
> > +       .fw_name  = "rtl_bt/rtl8723cs_cg_fw.bin",
> > +       .cfg_name = "rtl_bt/rtl8723cs_cg_config" },
> > +
> > +     /* 8723CS-VF */
> > +     { .match_flags = IC_MATCH_FL_LMPSUBV | IC_MATCH_FL_CHIP_TYPE |
> > +                      IC_MATCH_FL_HCIBUS,
> > +       .lmp_subver = RTL_ROM_LMP_8703B,
> > +       .chip_type = RTL_CHIP_8723CS_VF,
> > +       .hci_bus = HCI_UART,
> > +       .config_needed = true,
> > +       .has_rom_version = true,
> > +       .fw_name  = "rtl_bt/rtl8723cs_vf_fw.bin",
> > +       .cfg_name = "rtl_bt/rtl8723cs_vf_config" },
> > +
> > +     /* 8723CS-XX */
> > +     { .match_flags = IC_MATCH_FL_LMPSUBV | IC_MATCH_FL_CHIP_TYPE |
> > +                      IC_MATCH_FL_HCIBUS,
> > +       .lmp_subver = RTL_ROM_LMP_8703B,
> > +       .chip_type = RTL_CHIP_8723CS_XX,
> > +       .hci_bus = HCI_UART,
> > +       .config_needed = true,
> > +       .has_rom_version = true,
> > +       .fw_name  = "rtl_bt/rtl8723cs_xx_fw.bin",
> > +       .cfg_name = "rtl_bt/rtl8723cs_xx_config" },
> > +
> >       /* 8723D */
> >       { IC_INFO(RTL_ROM_LMP_8723B, 0xd),
> >         .config_needed = true,
> > @@ -171,7 +210,8 @@ static const struct id_table ic_id_table[] = {
> >       };
> >
> > static const struct id_table *btrtl_match_ic(u16 lmp_subver, u16 hci_rev,
> > -                                          u8 hci_ver, u8 hci_bus)
> > +                                          u8 hci_ver, u8 hci_bus,
> > +                                          u8 chip_type)
> > {
> >       int i;
> >
> > @@ -188,6 +228,9 @@ static const struct id_table *btrtl_match_ic(u16 lmp_subver, u16 hci_rev,
> >               if ((ic_id_table[i].match_flags & IC_MATCH_FL_HCIBUS) &&
> >                   (ic_id_table[i].hci_bus != hci_bus))
> >                       continue;
> > +             if ((ic_id_table[i].match_flags & IC_MATCH_FL_CHIP_TYPE) &&
> > +                 (ic_id_table[i].chip_type != chip_type))
> > +                     continue;
> >
> >               break;
> >       }
> > @@ -270,6 +313,7 @@ static int rtlbt_parse_firmware(struct hci_dev *hdev,
> >               { RTL_ROM_LMP_8723B, 1 },
> >               { RTL_ROM_LMP_8821A, 2 },
> >               { RTL_ROM_LMP_8761A, 3 },
> > +             { RTL_ROM_LMP_8703B, 7 },
> >               { RTL_ROM_LMP_8822B, 8 },
> >               { RTL_ROM_LMP_8723B, 9 },       /* 8723D */
> >               { RTL_ROM_LMP_8821A, 10 },      /* 8821C */
> > @@ -545,6 +589,48 @@ static int btrtl_setup_rtl8723b(struct hci_dev *hdev,
> >       return ret;
> > }
> >
> > +static bool rtl_has_chip_type(u16 lmp_subver)
> > +{
> > +     switch (lmp_subver) {
> > +     case RTL_ROM_LMP_8703B:
> > +             return true;
> > +     default:
> > +             break;
> > +     }
> > +
> > +     return  false;
> > +}
> > +
> > +static int rtl_read_chip_type(struct hci_dev *hdev, u8 *type)
> > +{
> > +     struct rtl_chip_type_evt *chip_type;
> > +     struct sk_buff *skb;
> > +     const unsigned char cmd_buf[] = {0x00, 0x94, 0xa0, 0x00, 0xb0};
> > +
> > +     /* Read RTL chip type command */
> > +     skb = __hci_cmd_sync(hdev, 0xfc61, 5, cmd_buf, HCI_INIT_TIMEOUT);
> > +     if (IS_ERR(skb)) {
> > +             rtl_dev_err(hdev, "Read chip type failed (%ld)",
> > +                         PTR_ERR(skb));
> > +             return PTR_ERR(skb);
> > +     }
> > +
> > +     if (skb->len != sizeof(*chip_type)) {
> > +             rtl_dev_err(hdev, "RTL chip type event length mismatch");
> > +             kfree_skb(skb);
> > +             return -EIO;
> > +     }
> > +
> > +     chip_type = (struct rtl_chip_type_evt *)skb->data;
> > +     rtl_dev_info(hdev, "chip_type status=%x type=%x",
> > +                  chip_type->status, chip_type->type);
> > +
> > +     *type = chip_type->type & 0x0f;
> > +
> > +     kfree_skb(skb);
> > +     return 0;
> > +}
> > +
> > void btrtl_free(struct btrtl_device_info *btrtl_dev)
> > {
> >       kvfree(btrtl_dev->fw_data);
> > @@ -561,7 +647,7 @@ struct btrtl_device_info *btrtl_initialize(struct hci_dev *hdev,
> >       struct hci_rp_read_local_version *resp;
> >       char cfg_name[40];
> >       u16 hci_rev, lmp_subver;
> > -     u8 hci_ver;
> > +     u8 hci_ver, chip_type = 0;
> >       int ret;
> >
> >       btrtl_dev = kzalloc(sizeof(*btrtl_dev), GFP_KERNEL);
> > @@ -586,8 +672,14 @@ struct btrtl_device_info *btrtl_initialize(struct hci_dev *hdev,
> >       lmp_subver = le16_to_cpu(resp->lmp_subver);
> >       kfree_skb(skb);
> >
> > +     if (rtl_has_chip_type(lmp_subver)) {
> > +             ret = rtl_read_chip_type(hdev, &chip_type);
> > +             if (ret)
> > +                     goto err_free;
> > +     }
> > +
> >       btrtl_dev->ic_info = btrtl_match_ic(lmp_subver, hci_rev, hci_ver,
> > -                                         hdev->bus);
> > +                                         hdev->bus, chip_type);
> >
> >       if (!btrtl_dev->ic_info) {
> >               rtl_dev_info(hdev, "unknown IC info, lmp subver %04x, hci rev %04x, hci ver %04x",
> > @@ -660,6 +752,7 @@ int btrtl_download_firmware(struct hci_dev *hdev,
> >       case RTL_ROM_LMP_8821A:
> >       case RTL_ROM_LMP_8761A:
> >       case RTL_ROM_LMP_8822B:
> > +     case RTL_ROM_LMP_8703B:
> >               return btrtl_setup_rtl8723b(hdev, btrtl_dev);
> >       default:
> >               rtl_dev_info(hdev, "assuming no firmware upload needed");
> > @@ -678,7 +771,12 @@ int btrtl_setup_realtek(struct hci_dev *hdev)
> >               return PTR_ERR(btrtl_dev);
> >
> >       ret = btrtl_download_firmware(hdev, btrtl_dev);
> > +     if (ret)
> > +             goto out_free;
> >
> > +     btrtl_apply_quirks(hdev, btrtl_dev);
> > +
> > +out_free:
> >       btrtl_free(btrtl_dev);
> >
> >       /* Enable controller to do both LE scan and BR/EDR inquiry
> > @@ -818,6 +916,24 @@ int btrtl_get_uart_settings(struct hci_dev *hdev,
> > }
> > EXPORT_SYMBOL_GPL(btrtl_get_uart_settings);
> >
> > +void btrtl_apply_quirks(struct hci_dev *hdev,
> > +                     struct btrtl_device_info *btrtl_dev)
> > +{
> > +     switch (btrtl_dev->ic_info->lmp_subver) {
> > +     case RTL_ROM_LMP_8703B:
> > +             /* 8723CS reports two pages for local ext features,
> > +              * but it doesn't support any features from page 2 -
> > +              * it either responds with garbage or with error status
> > +              */
> > +             set_bit(HCI_QUIRK_BROKEN_LOCAL_EXT_FTR_MAX_PAGE,
> > +                     &hdev->quirks);
> > +             break;
> > +     default:
> > +             break;
> > +     }
> > +}
> > +EXPORT_SYMBOL_GPL(btrtl_apply_quirks);
> > +
> > MODULE_AUTHOR("Daniel Drake <drake@endlessm.com>");
> > MODULE_DESCRIPTION("Bluetooth support for Realtek devices ver " VERSION);
> > MODULE_VERSION(VERSION);
> > @@ -827,6 +943,12 @@ MODULE_FIRMWARE("rtl_bt/rtl8723b_fw.bin");
> > MODULE_FIRMWARE("rtl_bt/rtl8723b_config.bin");
> > MODULE_FIRMWARE("rtl_bt/rtl8723bs_fw.bin");
> > MODULE_FIRMWARE("rtl_bt/rtl8723bs_config.bin");
> > +MODULE_FIRMWARE("rtl_bt/rtl8723cs_cg_fw.bin");
> > +MODULE_FIRMWARE("rtl_bt/rtl8723cs_cg_config.bin");
> > +MODULE_FIRMWARE("rtl_bt/rtl8723cs_vf_fw.bin");
> > +MODULE_FIRMWARE("rtl_bt/rtl8723cs_vf_config.bin");
> > +MODULE_FIRMWARE("rtl_bt/rtl8723cs_xx_fw.bin");
> > +MODULE_FIRMWARE("rtl_bt/rtl8723cs_xx_config.bin");
> > MODULE_FIRMWARE("rtl_bt/rtl8723ds_fw.bin");
> > MODULE_FIRMWARE("rtl_bt/rtl8723ds_config.bin");
> > MODULE_FIRMWARE("rtl_bt/rtl8761a_fw.bin");
> > diff --git a/drivers/bluetooth/btrtl.h b/drivers/bluetooth/btrtl.h
> > index 2a582682136d..152ed2ece4c2 100644
> > --- a/drivers/bluetooth/btrtl.h
> > +++ b/drivers/bluetooth/btrtl.h
> > @@ -14,6 +14,11 @@
> >
> > struct btrtl_device_info;
> >
> > +struct rtl_chip_type_evt {
> > +     __u8 status;
> > +     __u8 type;
> > +} __packed;
> > +
> > struct rtl_download_cmd {
> >       __u8 index;
> >       __u8 data[RTL_FRAG_LEN];
> > @@ -60,6 +65,8 @@ int btrtl_get_uart_settings(struct hci_dev *hdev,
> >                           struct btrtl_device_info *btrtl_dev,
> >                           unsigned int *controller_baudrate,
> >                           u32 *device_baudrate, bool *flow_control);
> > +void btrtl_apply_quirks(struct hci_dev *hdev,
> > +                     struct btrtl_device_info *btrtl_dev);
> >
> > #else
> >
> > @@ -96,6 +103,11 @@ static inline int btrtl_get_uart_settings(struct hci_dev *hdev,
> >                                         bool *flow_control)
> > {
> >       return -ENOENT;
> > +
> > +static inline void btrtl_apply_quirks(struct hci_dev *hdev,
> > +                     struct btrtl_device_info *btrtl_dev)
> > +{
> > +}
> > }
>
> this hunk is fundamentally broken.

Will fix in v2

> Regards
>
> Marcel
>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 1/3] Bluetooth: Add new quirk for broken local ext features max_page
  2020-07-07 16:03   ` Marcel Holtmann
@ 2020-07-13  5:08     ` Vasily Khoruzhick
  2020-07-13  6:27       ` Marcel Holtmann
  0 siblings, 1 reply; 14+ messages in thread
From: Vasily Khoruzhick @ 2020-07-13  5:08 UTC (permalink / raw)
  To: Marcel Holtmann
  Cc: Ondrej Jirman, devicetree, Johan Hedberg,
	open list:NETWORKING [GENERAL],
	kernel list, Maxime Ripard, linux-bluetooth, Chen-Yu Tsai,
	Rob Herring, Jakub Kicinski, David S. Miller, arm-linux

On Tue, Jul 7, 2020 at 9:03 AM Marcel Holtmann <marcel@holtmann.org> wrote:
>
> Hi Vasily,
>
> > Some adapters (e.g. RTL8723CS) advertise that they have more than
> > 2 pages for local ext features, but they don't support any features
> > declared in these pages. RTL8723CS reports max_page = 2 and declares
> > support for sync train and secure connection, but it responds with
> > either garbage or with error in status on corresponding commands.
>
> please send the btmon for this so I can see what the controller is responding.

Here is relevant part:

< HCI Command: Read Local Extend.. (0x04|0x0004) plen 1  #228 [hci0] 6.889869
        Page: 2
> HCI Event: Command Complete (0x0e) plen 14             #229 [hci0] 6.890487
      Read Local Extended Features (0x04|0x0004) ncmd 2
        Status: Success (0x00)
        Page: 2/2
        Features: 0x5f 0x03 0x00 0x00 0x00 0x00 0x00 0x00
          Connectionless Slave Broadcast - Master
          Connectionless Slave Broadcast - Slave
          Synchronization Train
          Synchronization Scan
          Inquiry Response Notification Event
          Coarse Clock Adjustment
          Secure Connections (Controller Support)
          Ping
< HCI Command: Delete Stored Lin.. (0x03|0x0012) plen 7  #230 [hci0] 6.890559
        Address: 00:00:00:00:00:00 (OUI 00-00-00)
        Delete all: 0x01
> HCI Event: Command Complete (0x0e) plen 6              #231 [hci0] 6.891170
      Delete Stored Link Key (0x03|0x0012) ncmd 2
        Status: Success (0x00)
        Num keys: 0
< HCI Command: Read Synchronizat.. (0x03|0x0077) plen 0  #232 [hci0] 6.891199
> HCI Event: Command Complete (0x0e) plen 9              #233 [hci0] 6.891788
      Read Synchronization Train Parameters (0x03|0x0077) ncmd 2
        invalid packet size
        01 ac bd 11 80 80                                ......
= Close Index: 00:E0:4C:23:99:87                              [hci0] 6.891832

hci0 registration stops here and bluetoothctl doesn't even see the controller.

> Regards
>
> Marcel
>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 3/3] arm64: allwinner: a64: enable Bluetooth On Pinebook
  2020-07-06 11:47   ` Maxime Ripard
@ 2020-07-13  5:14     ` Vasily Khoruzhick
  0 siblings, 0 replies; 14+ messages in thread
From: Vasily Khoruzhick @ 2020-07-13  5:14 UTC (permalink / raw)
  To: Maxime Ripard
  Cc: Ondrej Jirman, devicetree, Johan Hedberg, netdev,
	Marcel Holtmann, linux-kernel, open list:BLUETOOTH DRIVERS,
	Chen-Yu Tsai, Rob Herring, Jakub Kicinski, David S. Miller,
	arm-linux

On Mon, Jul 6, 2020 at 4:47 AM Maxime Ripard <maxime@cerno.tech> wrote:
>
> Hi,
>
> On Sun, Jul 05, 2020 at 12:51:10PM -0700, Vasily Khoruzhick wrote:
> > Pinebook has an RTL8723CS WiFi + BT chip, BT is connected to UART1
> > and uses PL5 as device wake GPIO, PL6 as host wake GPIO the I2C
> > controlling signals are connected to R_I2C bus.
> >
> > Enable it in the device tree.
> >
> > Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
> > ---
> >  .../arm64/boot/dts/allwinner/sun50i-a64-pinebook.dts | 12 ++++++++++++
> >  1 file changed, 12 insertions(+)
> >
> > diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-pinebook.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-pinebook.dts
> > index 64b1c54f87c0..e63ff271be4e 100644
> > --- a/arch/arm64/boot/dts/allwinner/sun50i-a64-pinebook.dts
> > +++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-pinebook.dts
> > @@ -408,6 +408,18 @@ &uart0 {
> >       status = "okay";
> >  };
> >
> > +&uart1 {
> > +     pinctrl-names = "default";
> > +     pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>;
> > +     status = "okay";
>
> You probably need uart-has-rtscts here

Will add in v2

> > +
> > +     bluetooth {
> > +             compatible = "realtek,rtl8723cs-bt";
> > +             device-wake-gpios = <&r_pio 0 5 GPIO_ACTIVE_LOW>; /* PL5 */
> > +             host-wake-gpios = <&r_pio 0 6 GPIO_ACTIVE_HIGH>; /* PL6 */
> > +     };
>
> And max-speed I guess?

There's no max-speed in the schema for this bluetooth controller.
Moreover it reads uart settings from firmware config. See
btrtl_get_uart_settings() in drivers/bluetooth/btrtl.c

> Maxime
> >

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 1/3] Bluetooth: Add new quirk for broken local ext features max_page
  2020-07-13  5:08     ` Vasily Khoruzhick
@ 2020-07-13  6:27       ` Marcel Holtmann
  2020-07-13 16:00         ` Vasily Khoruzhick
  0 siblings, 1 reply; 14+ messages in thread
From: Marcel Holtmann @ 2020-07-13  6:27 UTC (permalink / raw)
  To: Vasily Khoruzhick
  Cc: Ondrej Jirman, devicetree, Johan Hedberg,
	open list:NETWORKING [GENERAL],
	kernel list, Maxime Ripard, linux-bluetooth, Chen-Yu Tsai,
	Rob Herring, Jakub Kicinski, David S. Miller, arm-linux

Hi Vasily,

>>> Some adapters (e.g. RTL8723CS) advertise that they have more than
>>> 2 pages for local ext features, but they don't support any features
>>> declared in these pages. RTL8723CS reports max_page = 2 and declares
>>> support for sync train and secure connection, but it responds with
>>> either garbage or with error in status on corresponding commands.
>> 
>> please send the btmon for this so I can see what the controller is responding.
> 
> Here is relevant part:
> 
> < HCI Command: Read Local Extend.. (0x04|0x0004) plen 1  #228 [hci0] 6.889869
>        Page: 2
>> HCI Event: Command Complete (0x0e) plen 14             #229 [hci0] 6.890487
>      Read Local Extended Features (0x04|0x0004) ncmd 2
>        Status: Success (0x00)
>        Page: 2/2
>        Features: 0x5f 0x03 0x00 0x00 0x00 0x00 0x00 0x00
>          Connectionless Slave Broadcast - Master
>          Connectionless Slave Broadcast - Slave
>          Synchronization Train
>          Synchronization Scan
>          Inquiry Response Notification Event
>          Coarse Clock Adjustment
>          Secure Connections (Controller Support)
>          Ping
> < HCI Command: Delete Stored Lin.. (0x03|0x0012) plen 7  #230 [hci0] 6.890559
>        Address: 00:00:00:00:00:00 (OUI 00-00-00)
>        Delete all: 0x01
>> HCI Event: Command Complete (0x0e) plen 6              #231 [hci0] 6.891170
>      Delete Stored Link Key (0x03|0x0012) ncmd 2
>        Status: Success (0x00)
>        Num keys: 0
> < HCI Command: Read Synchronizat.. (0x03|0x0077) plen 0  #232 [hci0] 6.891199
>> HCI Event: Command Complete (0x0e) plen 9              #233 [hci0] 6.891788
>      Read Synchronization Train Parameters (0x03|0x0077) ncmd 2
>        invalid packet size
>        01 ac bd 11 80 80                                ......
> = Close Index: 00:E0:4C:23:99:87                              [hci0] 6.891832
> 
> hci0 registration stops here and bluetoothctl doesn't even see the controller.

maybe just the read sync train params command is broken? Can you change the init code and not send it and see if the rest of the init phase proceeds. I would rather have the secure connections actually tested before dismissing it altogether.

Mind you, there were broken Broadcom implementation of connectionless slave broadcast as well. Maybe this is similar.

Regards

Marcel


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 1/3] Bluetooth: Add new quirk for broken local ext features max_page
  2020-07-13  6:27       ` Marcel Holtmann
@ 2020-07-13 16:00         ` Vasily Khoruzhick
  2020-07-13 16:32           ` Marcel Holtmann
  0 siblings, 1 reply; 14+ messages in thread
From: Vasily Khoruzhick @ 2020-07-13 16:00 UTC (permalink / raw)
  To: Marcel Holtmann
  Cc: Ondrej Jirman, devicetree, Johan Hedberg,
	open list:NETWORKING [GENERAL],
	kernel list, Maxime Ripard, linux-bluetooth, Chen-Yu Tsai,
	Rob Herring, Jakub Kicinski, David S. Miller, arm-linux

On Sun, Jul 12, 2020 at 11:28 PM Marcel Holtmann <marcel@holtmann.org> wrote:

Hi Marcel,

> maybe just the read sync train params command is broken? Can you change the init code and not send it and see if the rest of the init phase proceeds. I would rather have the secure connections actually tested before dismissing it altogether.

I don't think that I have any devices that support secure connections
to test, I've got only a bluetooth mouse and headphones, both are from
the 2.0 era.

FWIW unofficial recommendation from Realtek to Pine64 was to avoid
using any 4.1+ features on this chip. Unfortunately I don't have any
contacts with Realtek, so I can't confirm that.

> Mind you, there were broken Broadcom implementation of connectionless slave broadcast as well. Maybe this is similar.

I'd prefer to stick to what works unless there's some comprehensive
test that can figure out what's broken.

Regards,
Vasily

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 1/3] Bluetooth: Add new quirk for broken local ext features max_page
  2020-07-13 16:00         ` Vasily Khoruzhick
@ 2020-07-13 16:32           ` Marcel Holtmann
  0 siblings, 0 replies; 14+ messages in thread
From: Marcel Holtmann @ 2020-07-13 16:32 UTC (permalink / raw)
  To: Vasily Khoruzhick
  Cc: Ondrej Jirman, devicetree, Johan Hedberg,
	open list:NETWORKING [GENERAL],
	kernel list, Maxime Ripard, linux-bluetooth, Chen-Yu Tsai,
	Rob Herring, Jakub Kicinski, David S. Miller, arm-linux

Hi Vasily,

>> maybe just the read sync train params command is broken? Can you change the init code and not send it and see if the rest of the init phase proceeds. I would rather have the secure connections actually tested before dismissing it altogether.
> 
> I don't think that I have any devices that support secure connections
> to test, I've got only a bluetooth mouse and headphones, both are from
> the 2.0 era.
> 
> FWIW unofficial recommendation from Realtek to Pine64 was to avoid
> using any 4.1+ features on this chip. Unfortunately I don't have any
> contacts with Realtek, so I can't confirm that.
> 
>> Mind you, there were broken Broadcom implementation of connectionless slave broadcast as well. Maybe this is similar.
> 
> I'd prefer to stick to what works unless there's some comprehensive
> test that can figure out what's broken.

check if removing the read sync trains params command makes the controller initialize and usable. Then we see about the rest.

Regards

Marcel


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2020-07-13 16:34 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-05 19:51 [PATCH 0/3] arm64: allwinner: a64: add bluetooth support for Pinebook Vasily Khoruzhick
2020-07-05 19:51 ` [PATCH 1/3] Bluetooth: Add new quirk for broken local ext features max_page Vasily Khoruzhick
2020-07-07 16:03   ` Marcel Holtmann
2020-07-13  5:08     ` Vasily Khoruzhick
2020-07-13  6:27       ` Marcel Holtmann
2020-07-13 16:00         ` Vasily Khoruzhick
2020-07-13 16:32           ` Marcel Holtmann
2020-07-05 19:51 ` [PATCH 2/3] Bluetooth: btrtl: add support for the RTL8723CS Vasily Khoruzhick
2020-07-07 16:01   ` Marcel Holtmann
2020-07-13  5:07     ` Vasily Khoruzhick
2020-07-07 23:17   ` kernel test robot
2020-07-05 19:51 ` [PATCH 3/3] arm64: allwinner: a64: enable Bluetooth On Pinebook Vasily Khoruzhick
2020-07-06 11:47   ` Maxime Ripard
2020-07-13  5:14     ` Vasily Khoruzhick

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).