[PATCH 3/3] rsi: Remove old firmware loading method for RS9113 chip set

2017-04-03 Thread Prameela Rani Garnepudi
Older firmware loading method is not being used by any RSI
module. Hence removing that part of code doesn't impact.

Signed-off-by: Prameela Rani Garnepudi 
---
 drivers/net/wireless/rsi/rsi_91x_sdio_ops.c | 187 
 drivers/net/wireless/rsi/rsi_91x_usb_ops.c  | 124 --
 2 files changed, 311 deletions(-)

diff --git a/drivers/net/wireless/rsi/rsi_91x_sdio_ops.c 
b/drivers/net/wireless/rsi/rsi_91x_sdio_ops.c
index c516be1..d8581c3 100644
--- a/drivers/net/wireless/rsi/rsi_91x_sdio_ops.c
+++ b/drivers/net/wireless/rsi/rsi_91x_sdio_ops.c
@@ -21,171 +21,6 @@
 #include "rsi_hal.h"
 
 /**
- * rsi_copy_to_card() - This function includes the actual funtionality of
- * copying the TA firmware to the card.Basically this
- * function includes opening the TA file,reading the
- * TA file and writing their values in blocks of data.
- * @common: Pointer to the driver private structure.
- * @fw: Pointer to the firmware value to be written.
- * @len: length of firmware file.
- * @num_blocks: Number of blocks to be written to the card.
- *
- * Return: 0 on success and -1 on failure.
- */
-static int rsi_copy_to_card(struct rsi_common *common,
-   const u8 *fw,
-   u32 len,
-   u32 num_blocks)
-{
-   struct rsi_hw *adapter = common->priv;
-   struct rsi_91x_sdiodev *dev =
-   (struct rsi_91x_sdiodev *)adapter->rsi_dev;
-   u32 indx, ii;
-   u32 block_size = dev->tx_blk_size;
-   u32 lsb_address;
-   __le32 data[] = { TA_HOLD_THREAD_VALUE, TA_SOFT_RST_CLR,
- TA_PC_ZERO, TA_RELEASE_THREAD_VALUE };
-   u32 address[] = { TA_HOLD_THREAD_REG, TA_SOFT_RESET_REG,
- TA_TH0_PC_REG, TA_RELEASE_THREAD_REG };
-   u32 base_address;
-   u16 msb_address;
-
-   base_address = TA_LOAD_ADDRESS;
-   msb_address = base_address >> 16;
-
-   for (indx = 0, ii = 0; ii < num_blocks; ii++, indx += block_size) {
-   lsb_address = ((u16) base_address | RSI_SD_REQUEST_MASTER);
-   if (rsi_sdio_write_register_multiple(adapter,
-lsb_address,
-(u8 *)(fw + indx),
-block_size)) {
-   rsi_dbg(ERR_ZONE,
-   "%s: Unable to load %s blk\n", __func__,
-   FIRMWARE_RSI9113);
-   return -1;
-   }
-   rsi_dbg(INIT_ZONE, "%s: loading block: %d\n", __func__, ii);
-   base_address += block_size;
-   if ((base_address >> 16) != msb_address) {
-   msb_address += 1;
-   if (rsi_sdio_master_access_msword(adapter,
- msb_address)) {
-   rsi_dbg(ERR_ZONE,
-   "%s: Unable to set ms word reg\n",
-   __func__);
-   return -1;
-   }
-   }
-   }
-
-   if (len % block_size) {
-   lsb_address = ((u16) base_address | RSI_SD_REQUEST_MASTER);
-   if (rsi_sdio_write_register_multiple(adapter,
-lsb_address,
-(u8 *)(fw + indx),
-len % block_size)) {
-   rsi_dbg(ERR_ZONE,
-   "%s: Unable to load f/w\n", __func__);
-   return -1;
-   }
-   }
-   rsi_dbg(INIT_ZONE,
-   "%s: Succesfully loaded TA instructions\n", __func__);
-
-   if (rsi_sdio_master_access_msword(adapter, TA_BASE_ADDR)) {
-   rsi_dbg(ERR_ZONE,
-   "%s: Unable to set ms word to common reg\n",
-   __func__);
-   return -1;
-   }
-
-   for (ii = 0; ii < ARRAY_SIZE(data); ii++) {
-   /* Bringing TA out of reset */
-   if (rsi_sdio_write_register_multiple(adapter,
-(address[ii] |
-RSI_SD_REQUEST_MASTER),
-(u8 *)[ii],
-4)) {
-   rsi_dbg(ERR_ZONE,
-   "%s: Unable to hold TA threads\n", __func__);
-   return -1;
-   }
-   }
-
-   rsi_dbg(INIT_ZONE, "%s: loaded firmware\n", __func__);
-   return 0;
-}
-
-/**
- * rsi_load_ta_instructions() - This function includes the actual funtionality
- *  

[PATCH 3/3] rsi: Remove old firmware loading method for RS9113 chip set

2016-12-07 Thread Prameela Rani Garnepudi
Older firmware loading method is not being used by any RSI
module. Hence removing that part of code doesn't impact.
New device ID is added which is widely used for current
RSI chip sets. Changes done in usb and sdio inteface files
to support new firmware loading method.

Signed-off-by: Prameela Rani Garnepudi 
---
 drivers/net/wireless/rsi/rsi_91x_sdio.c | 221 ++--
 drivers/net/wireless/rsi/rsi_91x_sdio_ops.c | 190 +---
 drivers/net/wireless/rsi/rsi_91x_usb.c  | 162 ++--
 drivers/net/wireless/rsi/rsi_91x_usb_ops.c  | 125 
 drivers/net/wireless/rsi/rsi_sdio.h |   4 +-
 drivers/net/wireless/rsi/rsi_usb.h  |  14 +-
 6 files changed, 369 insertions(+), 347 deletions(-)

diff --git a/drivers/net/wireless/rsi/rsi_91x_sdio.c 
b/drivers/net/wireless/rsi/rsi_91x_sdio.c
index 8428858..4eb59f0 100644
--- a/drivers/net/wireless/rsi/rsi_91x_sdio.c
+++ b/drivers/net/wireless/rsi/rsi_91x_sdio.c
@@ -1,6 +1,8 @@
 /**
  * Copyright (c) 2014 Redpine Signals Inc.
  *
+ * Developers:
+ * Fariya Fathima  2014 
  * Permission to use, copy, modify, and/or distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
  * copyright notice and this permission notice appear in all copies.
@@ -18,6 +20,7 @@
 #include 
 #include "rsi_sdio.h"
 #include "rsi_common.h"
+#include "rsi_hal.h"
 
 /**
  * rsi_sdio_set_cmd52_arg() - This function prepares cmd 52 read/write arg.
@@ -473,8 +476,6 @@ void rsi_sdio_ack_intr(struct rsi_hw *adapter, u8 int_bit)
rsi_dbg(ERR_ZONE, "%s: unable to send ack\n", __func__);
 }
 
-
-
 /**
  * rsi_sdio_read_register_multiple() - This function read multiple bytes of
  *information from the SD card.
@@ -487,8 +488,8 @@ void rsi_sdio_ack_intr(struct rsi_hw *adapter, u8 int_bit)
  */
 static int rsi_sdio_read_register_multiple(struct rsi_hw *adapter,
   u32 addr,
-  u32 count,
-  u8 *data)
+  u8 *data,
+  u16 count)
 {
struct rsi_91x_sdiodev *dev =
(struct rsi_91x_sdiodev *)adapter->rsi_dev;
@@ -518,7 +519,7 @@ static int rsi_sdio_read_register_multiple(struct rsi_hw 
*adapter,
 int rsi_sdio_write_register_multiple(struct rsi_hw *adapter,
 u32 addr,
 u8 *data,
-u32 count)
+u16 count)
 {
struct rsi_91x_sdiodev *dev =
(struct rsi_91x_sdiodev *)adapter->rsi_dev;
@@ -552,6 +553,176 @@ int rsi_sdio_write_register_multiple(struct rsi_hw 
*adapter,
return status;
 }
 
+int rsi_sdio_load_data_master_write(struct rsi_hw *adapter,
+   u32 base_address,
+   u32 instructions_sz,
+   u16 block_size,
+   u8 *ta_firmware)
+{
+   u32 num_blocks;
+   u16 msb_address;
+   u32 offset, ii;
+   u8 temp_buf[block_size];
+   u16 lsb_address;
+
+   num_blocks = instructions_sz / block_size;
+   msb_address = base_address >> 16;
+
+   rsi_dbg(INFO_ZONE, "ins_size: %d\n", instructions_sz);
+   rsi_dbg(INFO_ZONE, "num_blocks: %d\n", num_blocks);
+
+   /* Loading DM ms word in the sdio slave */
+   if (rsi_sdio_master_access_msword(adapter, msb_address)) {
+   rsi_dbg(ERR_ZONE, "%s: Unable to set ms word reg\n", __func__);
+   return -EINVAL;
+   }
+
+   for (offset = 0, ii = 0; ii < num_blocks; ii++, offset += block_size) {
+   memset(temp_buf, 0, block_size);
+   memcpy(temp_buf, ta_firmware + offset, block_size);
+   lsb_address = (u16)base_address;
+   if (rsi_sdio_write_register_multiple(adapter,
+   (lsb_address | RSI_SD_REQUEST_MASTER),
+   temp_buf, block_size)) {
+   rsi_dbg(ERR_ZONE, "%s: failed to write\n", __func__);
+   return -EINVAL;
+   }
+   rsi_dbg(INFO_ZONE, "%s: loading block: %d\n", __func__, ii);
+   base_address += block_size;
+
+   if ((base_address >> 16) != msb_address) {
+   msb_address += 1;
+
+   /* Loading DM ms word in the sdio slave */
+   if (rsi_sdio_master_access_msword(adapter,
+ msb_address)) {
+   rsi_dbg(ERR_ZONE,
+   "%s: Unable to set ms word reg\n",
+