RE: [PATCH v12 3/3] Bluetooth: hci_uart: Support firmware download for Marvell

2016-09-08 Thread Amitkumar Karwar
Hi Loic,

Thanks for your comments.

> -Original Message-
> From: Loic Poulain [mailto:loic.poul...@intel.com]
> Sent: Tuesday, August 16, 2016 1:20 PM
> To: Amitkumar Karwar; linux-blueto...@vger.kernel.org
> Cc: linux-kernel@vger.kernel.org; linux-rockc...@lists.infradead.org;
> mar...@holtmann.org; Ganapathi Bhat
> Subject: Re: [PATCH v12 3/3] Bluetooth: hci_uart: Support firmware
> download for Marvell
> 
> Hi Amit,
> 
> On 09/08/2016 18:32, Amitkumar Karwar wrote:
> > From: Ganapathi Bhat 
> >
> > This patch implement firmware download feature for Marvell Bluetooth
> > devices. If firmware is already downloaded, it will skip downloading.
> >
> > Signed-off-by: Ganapathi Bhat 
> > Signed-off-by: Amitkumar Karwar 
> > Tested-by: Jeffy Chen 
> > ---
> > v2: Fixed compilation warning reported by kbuild test robot
> > v3: Addressed review comments from Marcel Holtmann
> >  a) Removed vendor specific code from hci_ldisc.c
> >  b) Get rid of static forward declaration
> >  c) Removed unnecessary heavy nesting
> >  d) Git rid of module parameter and global variables
> >  e) Add logic to pick right firmware image
> > v4: Addresses review comments from Alan
> >  a) Use existing kernel helper APIs instead of writing own.
> >  b) Replace mdelay() with msleep()
> > v5: Addresses review comments from Loic Poulain
> >  a) Use bt_dev_err/warn/dbg helpers insted of BT_ERR/WARN/DBG
> >  b) Used static functions where required and removed forward
> delcarations
> >  c) Edited comments for the function hci_uart_recv_data
> >  d) Made HCI_UART_DNLD_FW flag a part of driver private data
> > v6: Addresses review comments from Loic Poulain
> >  a) Used skb instead of array to store firmware data during
> download
> >  b) Used hci_uart_tx_wakeup and enqueued packets instead of tty
> write
> >  c) Used GFP_KERNEL instead of GFP_ATOMIC
> > v7: Edited Kconfig to add dependency for BT_HCIUART_H4. The change
> resolves
> >  errors reported by kbuild test robot.
> > v8: Addressed review comments from Marcel Holtmann
> >  a) Removed unnecessary memory allocation failure messages
> >  b) Get rid of btmrvl.h header file and add definitions in
> > hci_mrvl.c file
> > v9: Addressed review comments from Marcel Holtmann
> >  a) Moved firmware download code from setup to prepare handler.
> >  b) Change messages from bt_dev_*->BT_*, as hdev isn't available
> during firmware
> >   download.
> > v10: Addressed review comments from Marcel Holtmann
> >  a) Added new callback recv_for_prepare to receive data from
> device
> >   during prepare phase
> >  b) Avoided using private flags (HCI_UART_DNLD_FW) as new receive
> callback is
> >   added for the same purpose
> >  c) Used kernel API to handle unaligned data
> >  d) Moved mrvl_set_baud functionality inside setup callback
> > v11: Write data through ldisc in mrvl_send_ack() instead of directly
> calling
> >  write method(One Thousand Gnomes).
> > v12: a) Check for buffer length before copying to skb (Loic Poulain)
> >   b) Rearrange skb memory allocation check
> > ---
> >   drivers/bluetooth/Kconfig |  11 +
> >   drivers/bluetooth/Makefile|   1 +
> >   drivers/bluetooth/hci_ldisc.c |   6 +
> >   drivers/bluetooth/hci_mrvl.c  | 545
> ++
> >   drivers/bluetooth/hci_uart.h  |   8 +-
> >   5 files changed, 570 insertions(+), 1 deletion(-)
> >   create mode 100644 drivers/bluetooth/hci_mrvl.c
> >
> > diff --git a/drivers/bluetooth/Kconfig b/drivers/bluetooth/Kconfig
> > index cf50fd2..daafd0c 100644
> > --- a/drivers/bluetooth/Kconfig
> > +++ b/drivers/bluetooth/Kconfig
> > @@ -180,6 +180,17 @@ config BT_HCIUART_AG6XX
> >
> >   Say Y here to compile support for Intel AG6XX protocol.
> >
> > +config BT_HCIUART_MRVL
> > +   bool "Marvell protocol support"
> > +   depends on BT_HCIUART
> > +   select BT_HCIUART_H4
> > +   help
> > + Marvell is serial protocol for communication between Bluetooth
> > + device and host. This protocol is required for most Marvell
> Bluetooth
> > + devices with UART interface.
> > +
> > + Say Y here to compile support for HCI MRVL protocol.
> > +
> >   config BT_HCIBCM203X
> > tristate "HCI BCM203x USB driver"
> > depends on USB
> > diff --git a/drivers/bluetooth/Makefile b/drivers/bluetooth/Makefile
> &g

Re: [PATCH v12 3/3] Bluetooth: hci_uart: Support firmware download for Marvell

2016-08-16 Thread Loic Poulain

Hi Amit,

On 09/08/2016 18:32, Amitkumar Karwar wrote:

From: Ganapathi Bhat 

This patch implement firmware download feature for
Marvell Bluetooth devices. If firmware is already
downloaded, it will skip downloading.

Signed-off-by: Ganapathi Bhat 
Signed-off-by: Amitkumar Karwar 
Tested-by: Jeffy Chen 
---
v2: Fixed compilation warning reported by kbuild test robot
v3: Addressed review comments from Marcel Holtmann
 a) Removed vendor specific code from hci_ldisc.c
 b) Get rid of static forward declaration
 c) Removed unnecessary heavy nesting
 d) Git rid of module parameter and global variables
 e) Add logic to pick right firmware image
v4: Addresses review comments from Alan
 a) Use existing kernel helper APIs instead of writing own.
 b) Replace mdelay() with msleep()
v5: Addresses review comments from Loic Poulain
 a) Use bt_dev_err/warn/dbg helpers insted of BT_ERR/WARN/DBG
 b) Used static functions where required and removed forward delcarations
 c) Edited comments for the function hci_uart_recv_data
 d) Made HCI_UART_DNLD_FW flag a part of driver private data
v6: Addresses review comments from Loic Poulain
 a) Used skb instead of array to store firmware data during download
 b) Used hci_uart_tx_wakeup and enqueued packets instead of tty write
 c) Used GFP_KERNEL instead of GFP_ATOMIC
v7: Edited Kconfig to add dependency for BT_HCIUART_H4. The change resolves
 errors reported by kbuild test robot.
v8: Addressed review comments from Marcel Holtmann
 a) Removed unnecessary memory allocation failure messages
 b) Get rid of btmrvl.h header file and add definitions in hci_mrvl.c file
v9: Addressed review comments from Marcel Holtmann
 a) Moved firmware download code from setup to prepare handler.
 b) Change messages from bt_dev_*->BT_*, as hdev isn't available during 
firmware
  download.
v10: Addressed review comments from Marcel Holtmann
 a) Added new callback recv_for_prepare to receive data from device
  during prepare phase
 b) Avoided using private flags (HCI_UART_DNLD_FW) as new receive callback 
is
  added for the same purpose
 c) Used kernel API to handle unaligned data
 d) Moved mrvl_set_baud functionality inside setup callback
v11: Write data through ldisc in mrvl_send_ack() instead of directly calling
 write method(One Thousand Gnomes).
v12: a) Check for buffer length before copying to skb (Loic Poulain)
  b) Rearrange skb memory allocation check
---
  drivers/bluetooth/Kconfig |  11 +
  drivers/bluetooth/Makefile|   1 +
  drivers/bluetooth/hci_ldisc.c |   6 +
  drivers/bluetooth/hci_mrvl.c  | 545 ++
  drivers/bluetooth/hci_uart.h  |   8 +-
  5 files changed, 570 insertions(+), 1 deletion(-)
  create mode 100644 drivers/bluetooth/hci_mrvl.c

diff --git a/drivers/bluetooth/Kconfig b/drivers/bluetooth/Kconfig
index cf50fd2..daafd0c 100644
--- a/drivers/bluetooth/Kconfig
+++ b/drivers/bluetooth/Kconfig
@@ -180,6 +180,17 @@ config BT_HCIUART_AG6XX
  
  	  Say Y here to compile support for Intel AG6XX protocol.
  
+config BT_HCIUART_MRVL

+   bool "Marvell protocol support"
+   depends on BT_HCIUART
+   select BT_HCIUART_H4
+   help
+ Marvell is serial protocol for communication between Bluetooth
+ device and host. This protocol is required for most Marvell Bluetooth
+ devices with UART interface.
+
+ Say Y here to compile support for HCI MRVL protocol.
+
  config BT_HCIBCM203X
tristate "HCI BCM203x USB driver"
depends on USB
diff --git a/drivers/bluetooth/Makefile b/drivers/bluetooth/Makefile
index 9c18939..364dbb6 100644
--- a/drivers/bluetooth/Makefile
+++ b/drivers/bluetooth/Makefile
@@ -37,6 +37,7 @@ hci_uart-$(CONFIG_BT_HCIUART_INTEL)   += hci_intel.o
  hci_uart-$(CONFIG_BT_HCIUART_BCM) += hci_bcm.o
  hci_uart-$(CONFIG_BT_HCIUART_QCA) += hci_qca.o
  hci_uart-$(CONFIG_BT_HCIUART_AG6XX)   += hci_ag6xx.o
+hci_uart-$(CONFIG_BT_HCIUART_MRVL) += hci_mrvl.o
  hci_uart-objs := $(hci_uart-y)
  
  ccflags-y += -D__CHECK_ENDIAN__

diff --git a/drivers/bluetooth/hci_ldisc.c b/drivers/bluetooth/hci_ldisc.c
index 2c88586..ded13d3 100644
--- a/drivers/bluetooth/hci_ldisc.c
+++ b/drivers/bluetooth/hci_ldisc.c
@@ -821,6 +821,9 @@ static int __init hci_uart_init(void)
  #ifdef CONFIG_BT_HCIUART_AG6XX
ag6xx_init();
  #endif
+#ifdef CONFIG_BT_HCIUART_MRVL
+   mrvl_init();
+#endif
  
  	return 0;

  }
@@ -856,6 +859,9 @@ static void __exit hci_uart_exit(void)
  #ifdef CONFIG_BT_HCIUART_AG6XX
ag6xx_deinit();
  #endif
+#ifdef CONFIG_BT_HCIUART_MRVL
+   mrvl_deinit();
+#endif
  
  	/* Release tty registration of line discipline */

err = tty_unregister_ldisc(N_HCI);
diff --git a/drivers/bluetooth/hci_mrvl.c b/drivers/bluetooth/hci_mrvl.c
new file mode 100644
index 000..c993c1b
--- /dev/null
+++ b/drivers/bluetooth/hci_mrvl.c