Re: [PATCH 3/5] Bluetooth: btintel: Use boot parameter from firmware file

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Tedd,

> Each RAM SKU has a different boot parameter which is used in
> HCI_Intel_Reset command after downloading the firmware.
> The boot parameter is embedded in the firmware data and to support
> multiple SKUs, driver reads the boot parameter while downloading
> the firmware instead of using static values per SKU.
> 
> Signed-off-by: Tedd Ho-Jeong An <tedd.an@xxxxxxxxxxxxxxx>
> ---
> drivers/bluetooth/btusb.c     | 22 ++++++++++++++++++++--
> drivers/bluetooth/hci_intel.c | 23 +++++++++++++++++++++--
> 2 files changed, 41 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
> index 93db5b9..979d530 100644
> --- a/drivers/bluetooth/btusb.c
> +++ b/drivers/bluetooth/btusb.c
> @@ -2024,8 +2024,11 @@ static int btusb_setup_intel_new(struct hci_dev *hdev)
> 
> 	BT_DBG("%s", hdev->name);
> 
> -	/* The default boot parameter */
> -	boot_param = 0x00040800;
> +	/* Set the default boot parameter to 0x0 and it is updated to
> +	 * SKU specific boot parameter after reading Intel_Write_Boot_Params
> +	 * command while downloading the firmware.
> +	 */
> +	boot_param = 0x00000000;
> 
> 	calltime = ktime_get();
> 
> @@ -2269,6 +2272,21 @@ static int btusb_setup_intel_new(struct hci_dev *hdev)
> 	while (fw_ptr - fw->data < fw->size) {
> 		struct hci_command_hdr *cmd = (void *)(fw_ptr + frag_len);
> 
> +		/* Each SKU has a different reset parameter to use in the
> +		 * HCI_Intel_Reset command and it is embedded in the firmware
> +		 * data. So, instead of using static value per SKU, check
> +		 * the firmware data and save it for later use.
> +		 */
> +		if (cmd->opcode == 0xfc0e) {
> +

scrap this empty line here.

> +			/* The boot parameter is the first 32-bit value
> +			 * and rest of 3 octets are reserved.
> +			 */
> +			boot_param = get_unaligned_le32(fw_ptr + sizeof(*cmd));
> +
> +			bt_dev_dbg(hdev, "boot_param=0x%x", boot_param);
> +		}
> +
> 		frag_len += sizeof(*cmd) + cmd->plen;
> 
> 		/* The parameter length of the secure send command requires
> diff --git a/drivers/bluetooth/hci_intel.c b/drivers/bluetooth/hci_intel.c
> index acac48d..2053d73 100644
> --- a/drivers/bluetooth/hci_intel.c
> +++ b/drivers/bluetooth/hci_intel.c
> @@ -33,6 +33,7 @@
> #include <linux/acpi.h>
> #include <linux/interrupt.h>
> #include <linux/pm_runtime.h>
> +#include <asm/unaligned.h>
> 
> #include <net/bluetooth/bluetooth.h>
> #include <net/bluetooth/hci_core.h>
> @@ -562,8 +563,11 @@ static int intel_setup(struct hci_uart *hu)
> 	hu->hdev->set_diag = btintel_set_diag;
> 	hu->hdev->set_bdaddr = btintel_set_bdaddr;
> 
> -	/* Default boot parameter */
> -	boot_param = 0x00040800;
> +	/* Set the default boot parameter to 0x0 and it is updated to
> +	 * SKU specific boot parameter after reading Intel_Write_Boot_Params
> +	 * command while downloading the firmware.
> +	 */
> +	boot_param = 0x00000000;
> 
> 	calltime = ktime_get();
> 
> @@ -824,6 +828,21 @@ static int intel_setup(struct hci_uart *hu)
> 	while (fw_ptr - fw->data < fw->size) {
> 		struct hci_command_hdr *cmd = (void *)(fw_ptr + frag_len);
> 
> +		/* Each SKU has a different reset parameter to use in the
> +		 * HCI_Intel_Reset command and it is embedded in the firmware
> +		 * data. So, instead of using static value per SKU, check
> +		 * the firmware data and save it for later use.
> +		 */
> +		if (cmd->opcode == 0xfc0e) {
> +

Same here. Remove this empty line.

> +			/* The boot parameter is the first 32-bit value
> +			 * and rest of 3 octets are reserved.
> +			 */
> +			boot_param = get_unaligned_le32(fw_ptr + sizeof(*cmd));
> +
> +			bt_dev_dbg(hdev, "boot_param=0x%x", boot_param);
> +		}
> +
> 		frag_len += sizeof(*cmd) + cmd->plen;
> 
> 		bt_dev_dbg(hdev, "Patching %td/%zu", (fw_ptr - fw->data),

Regards

Marcel

--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux