This patch series includes the changes for adding USB chipset,
frames exchanged with firmware during initialization
and false interrupt problem fix for SDIO.
Amitkumar Karwar (1):
rsi: use enum for FSM states
Prameela Rani Garnepudi (5):
rsi: add usb RS9113 chipset support
rsi: Register interrupt handler before firmware load
rsi: receive path enhancement for RS9113
rsi: configure new boot parameters to device
rsi: add tx frame for common device configuration
drivers/net/wireless/rsi/rsi_91x_hal.c | 4 +-
drivers/net/wireless/rsi/rsi_91x_main.c | 9 +-
drivers/net/wireless/rsi/rsi_91x_mgmt.c | 152 +++++++++++++++++++++++++----
drivers/net/wireless/rsi/rsi_91x_sdio.c | 21 ++--
drivers/net/wireless/rsi/rsi_91x_usb.c | 1 +
drivers/net/wireless/rsi/rsi_boot_params.h | 15 +--
drivers/net/wireless/rsi/rsi_hal.h | 3 +
drivers/net/wireless/rsi/rsi_main.h | 29 ++++--
drivers/net/wireless/rsi/rsi_mgmt.h | 97 ++++++++++++++++++
9 files changed, 286 insertions(+), 45 deletions(-)
--
2.7.4
Amitkumar Karwar <[email protected]> writes:
> Currently macros are used for FSM states. We will replace
> it with enum so that new state can be added easily without
> worrying about macro value.
>
> Signed-off-by: Amitkumar Karwar <[email protected]>
>From and Signed-off-by does not match (gmail.com vs redpinesignals.com).
I suggest that you add a separate From line to the commit log containing
redpinesignals.com, this way you can still submit patches via gmail.com.
Also your name in patchwork is not capitalised (patchwork is idiotic and
takes the name from patchwork user data and not from the patch):
[1/6] rsi: add usb RS9113 chipset support 2017-06-02 amit karwar New
[2/6] rsi: use enum for FSM states 2017-06-02 amit karwar New
[3/6] rsi: Register interrupt handler before firmware load 2017-06-02 amit karwar New
[4/6] rsi: receive path enhancement for RS9113 2017-06-02 amit karwar New
[5/6] rsi: configure new boot parameters to device 2017-06-02 amit karwar New
[6/6] rsi: add tx frame for common device configuration 2017-06-02 amit karwar New
To fix that could you please register to patchwork and capitalise your
name correctly? You have only one chance, patchwork doesn't allow users
edit the name afterwards, so don't do any typos :)
--
Kalle Valo
On Wed, Jun 14, 2017 at 2:43 PM, Kalle Valo <[email protected]> wrote:
> amit karwar <[email protected]> writes:
>
>> On Tue, Jun 13, 2017 at 12:17 PM, Kalle Valo <[email protected]> wrote:
>>> Amitkumar Karwar <[email protected]> writes:
>>>
>>>> Currently macros are used for FSM states. We will replace
>>>> it with enum so that new state can be added easily without
>>>> worrying about macro value.
>>>>
>>>> Signed-off-by: Amitkumar Karwar <[email protected]>
>>>
>>> From and Signed-off-by does not match (gmail.com vs redpinesignals.com).
>>> I suggest that you add a separate From line to the commit log containing
>>> redpinesignals.com, this way you can still submit patches via gmail.com.
>>
>> Sure. I will follow this for my future patches.
>
> Actually please resend this series with matching From and S-o-b. I don't
> want to edit From headers myself.
Sure. I will do this.
>
>>> Also your name in patchwork is not capitalised (patchwork is idiotic and
>>> takes the name from patchwork user data and not from the patch):
>>>
>>> [1/6] rsi: add usb RS9113 chipset support 2017-06-02 amit
>>> karwar New
>>> [2/6] rsi: use enum for FSM states 2017-06-02 amit karwar New
>>> [3/6] rsi: Register interrupt handler before firmware load
>>> 2017-06-02 amit karwar New
>>> [4/6] rsi: receive path enhancement for RS9113 2017-06-02 amit
>>> karwar New
>>> [5/6] rsi: configure new boot parameters to device 2017-06-02
>>> amit karwar New
>>> [6/6] rsi: add tx frame for common device configuration
>>> 2017-06-02 amit karwar New
>>>
>>> To fix that could you please register to patchwork and capitalise your
>>> name correctly? You have only one chance, patchwork doesn't allow users
>>> edit the name afterwards, so don't do any typos :)
>>
>> Thanks. I have registered with patchwork and corrected my name.
>
> What address did you use? Patchwork still shows your name all lower:
>
> https://patchwork.kernel.org/project/linux-wireless/list/?submitter=173645
>
> I suspect you didn't register with gmail.com, but with some other
> address. I recommend that you link all your email addresses, including
> gmail.com, to the same patchwork account and hopefully that fixes it.
> You should be able to do that from the profile page in patchwork.
I had registered with my gmail id. Also, other email id has also been
linked to patchwork. But still patchwork took previous user name.
I could not find a way to check my name in patchwork database after
login. I have now corrected my display name in gmail's setting.
Regards,
Amitkumar
amit karwar <[email protected]> writes:
> On Tue, Jun 13, 2017 at 12:17 PM, Kalle Valo <[email protected]> wrote:
>> Amitkumar Karwar <[email protected]> writes:
>>
>>> Currently macros are used for FSM states. We will replace
>>> it with enum so that new state can be added easily without
>>> worrying about macro value.
>>>
>>> Signed-off-by: Amitkumar Karwar <[email protected]>
>>
>> From and Signed-off-by does not match (gmail.com vs redpinesignals.com).
>> I suggest that you add a separate From line to the commit log containing
>> redpinesignals.com, this way you can still submit patches via gmail.com.
>
> Sure. I will follow this for my future patches.
Actually please resend this series with matching From and S-o-b. I don't
want to edit From headers myself.
>> Also your name in patchwork is not capitalised (patchwork is idiotic and
>> takes the name from patchwork user data and not from the patch):
>>
>> [1/6] rsi: add usb RS9113 chipset support 2017-06-02 amit
>> karwar New
>> [2/6] rsi: use enum for FSM states 2017-06-02 amit karwar New
>> [3/6] rsi: Register interrupt handler before firmware load
>> 2017-06-02 amit karwar New
>> [4/6] rsi: receive path enhancement for RS9113 2017-06-02 amit
>> karwar New
>> [5/6] rsi: configure new boot parameters to device 2017-06-02
>> amit karwar New
>> [6/6] rsi: add tx frame for common device configuration
>> 2017-06-02 amit karwar New
>>
>> To fix that could you please register to patchwork and capitalise your
>> name correctly? You have only one chance, patchwork doesn't allow users
>> edit the name afterwards, so don't do any typos :)
>
> Thanks. I have registered with patchwork and corrected my name.
What address did you use? Patchwork still shows your name all lower:
https://patchwork.kernel.org/project/linux-wireless/list/?submitter=173645
I suspect you didn't register with gmail.com, but with some other
address. I recommend that you link all your email addresses, including
gmail.com, to the same patchwork account and hopefully that fixes it.
You should be able to do that from the profile page in patchwork.
--
Kalle Valo
Amitkumar Karwar <[email protected]> writes:
> On Thu, Jun 15, 2017 at 8:14 PM, Kalle Valo <[email protected]> wrote:
>> Amitkumar Karwar <[email protected]> writes:
>>
>>> On Wed, Jun 14, 2017 at 2:43 PM, Kalle Valo <[email protected]> wrote:
>>>> amit karwar <[email protected]> writes:
>>>>
>>>>> On Tue, Jun 13, 2017 at 12:17 PM, Kalle Valo <[email protected]> wrote:
>>>>>
>>>>>> Also your name in patchwork is not capitalised (patchwork is idiotic and
>>>>>> takes the name from patchwork user data and not from the patch):
>>>>>>
>>>>>> [1/6] rsi: add usb RS9113 chipset support 2017-06-02 amit
>>>>>> karwar New
>>>>>> [2/6] rsi: use enum for FSM states 2017-06-02 amit karwar New
>>>>>> [3/6] rsi: Register interrupt handler before firmware load
>>>>>> 2017-06-02 amit karwar New
>>>>>> [4/6] rsi: receive path enhancement for RS9113 2017-06-02 amit
>>>>>> karwar New
>>>>>> [5/6] rsi: configure new boot parameters to device 2017-06-02
>>>>>> amit karwar New
>>>>>> [6/6] rsi: add tx frame for common device configuration
>>>>>> 2017-06-02 amit karwar New
>>>>>>
>>>>>> To fix that could you please register to patchwork and capitalise your
>>>>>> name correctly? You have only one chance, patchwork doesn't allow users
>>>>>> edit the name afterwards, so don't do any typos :)
>>>>>
>>>>> Thanks. I have registered with patchwork and corrected my name.
>>>>
>>>> What address did you use? Patchwork still shows your name all lower:
>>>>
>>>> https://patchwork.kernel.org/project/linux-wireless/list/?submitter=173645
>>>>
>>>> I suspect you didn't register with gmail.com, but with some other
>>>> address. I recommend that you link all your email addresses, including
>>>> gmail.com, to the same patchwork account and hopefully that fixes it.
>>>> You should be able to do that from the profile page in patchwork.
>>>
>>> I had registered with my gmail id. Also, other email id has also been
>>> linked to patchwork. But still patchwork took previous user name.
>>> I could not find a way to check my name in patchwork database after
>>> login. I have now corrected my display name in gmail's setting.
>>
>> Good, thanks. This name format bug in patchwork is really annoying, I'm
>> suffering from frequently. Let's see how your next submission goes and
>> hopefully we can sort it out.
>
> I just submitted a patch series. But patchwork is still showing older name.
I think the best is that you now report this to kernel.org admins:
https://korg.wiki.kernel.org/userdoc/support
Hopefully they can easily fix it directly in the database.
--
Kalle Valo
On Mon, Jun 19, 2017 at 8:49 PM, Kalle Valo <[email protected]> wrote:
> Amitkumar Karwar <[email protected]> writes:
>
>> On Thu, Jun 15, 2017 at 8:14 PM, Kalle Valo <[email protected]> wrote:
>>> Amitkumar Karwar <[email protected]> writes:
>>>
>>>> On Wed, Jun 14, 2017 at 2:43 PM, Kalle Valo <[email protected]> wrote:
>>>>> amit karwar <[email protected]> writes:
>>>>>
>>>>>> On Tue, Jun 13, 2017 at 12:17 PM, Kalle Valo <[email protected]> wrote:
>>>>>>
>>>>>>> Also your name in patchwork is not capitalised (patchwork is idiotic and
>>>>>>> takes the name from patchwork user data and not from the patch):
>>>>>>>
>>>>>>> [1/6] rsi: add usb RS9113 chipset support 2017-06-02 amit
>>>>>>> karwar New
>>>>>>> [2/6] rsi: use enum for FSM states 2017-06-02 amit karwar New
>>>>>>> [3/6] rsi: Register interrupt handler before firmware load
>>>>>>> 2017-06-02 amit karwar New
>>>>>>> [4/6] rsi: receive path enhancement for RS9113 2017-06-02 amit
>>>>>>> karwar New
>>>>>>> [5/6] rsi: configure new boot parameters to device 2017-06-02
>>>>>>> amit karwar New
>>>>>>> [6/6] rsi: add tx frame for common device configuration
>>>>>>> 2017-06-02 amit karwar New
>>>>>>>
>>>>>>> To fix that could you please register to patchwork and capitalise your
>>>>>>> name correctly? You have only one chance, patchwork doesn't allow users
>>>>>>> edit the name afterwards, so don't do any typos :)
>>>>>>
>>>>>> Thanks. I have registered with patchwork and corrected my name.
>>>>>
>>>>> What address did you use? Patchwork still shows your name all lower:
>>>>>
>>>>> https://patchwork.kernel.org/project/linux-wireless/list/?submitter=173645
>>>>>
>>>>> I suspect you didn't register with gmail.com, but with some other
>>>>> address. I recommend that you link all your email addresses, including
>>>>> gmail.com, to the same patchwork account and hopefully that fixes it.
>>>>> You should be able to do that from the profile page in patchwork.
>>>>
>>>> I had registered with my gmail id. Also, other email id has also been
>>>> linked to patchwork. But still patchwork took previous user name.
>>>> I could not find a way to check my name in patchwork database after
>>>> login. I have now corrected my display name in gmail's setting.
>>>
>>> Good, thanks. This name format bug in patchwork is really annoying, I'm
>>> suffering from frequently. Let's see how your next submission goes and
>>> hopefully we can sort it out.
>>
>> I just submitted a patch series. But patchwork is still showing older name.
>
> I think the best is that you now report this to kernel.org admins:
>
> https://korg.wiki.kernel.org/userdoc/support
>
> Hopefully they can easily fix it directly in the database.
>
Thanks for the pointers. I have dropped an email to helpdesk for this issue.
From: Prameela Rani Garnepudi <[email protected]>
Before firmware load, sometimes false interrupts are received.
System hang is observed if interrupt handler is not registered
to receive these interrupts. Hence interrupt handler registration
is moved before firmware load. We will drop these false interrupts
as these are not from the device.
Signed-off-by: Prameela Rani Garnepudi <[email protected]>
Signed-off-by: Amitkumar Karwar <[email protected]>
---
drivers/net/wireless/rsi/rsi_91x_hal.c | 1 +
drivers/net/wireless/rsi/rsi_91x_sdio.c | 21 +++++++++++----------
drivers/net/wireless/rsi/rsi_main.h | 1 +
3 files changed, 13 insertions(+), 10 deletions(-)
diff --git a/drivers/net/wireless/rsi/rsi_91x_hal.c b/drivers/net/wireless/rsi/rsi_91x_hal.c
index 3d24e8e..94e074d 100644
--- a/drivers/net/wireless/rsi/rsi_91x_hal.c
+++ b/drivers/net/wireless/rsi/rsi_91x_hal.c
@@ -733,6 +733,7 @@ int rsi_hal_device_init(struct rsi_hw *adapter)
default:
return -EINVAL;
}
+ common->fsm_state = FSM_CARD_NOT_READY;
return 0;
}
diff --git a/drivers/net/wireless/rsi/rsi_91x_sdio.c b/drivers/net/wireless/rsi/rsi_91x_sdio.c
index 2ef844a..e5ea99b 100644
--- a/drivers/net/wireless/rsi/rsi_91x_sdio.c
+++ b/drivers/net/wireless/rsi/rsi_91x_sdio.c
@@ -139,6 +139,8 @@ static void rsi_handle_interrupt(struct sdio_func *function)
{
struct rsi_hw *adapter = sdio_get_drvdata(function);
+ if (adapter->priv->fsm_state == FSM_FW_NOT_LOADED)
+ return;
sdio_release_host(function);
rsi_interrupt_handler(adapter);
sdio_claim_host(function);
@@ -908,10 +910,19 @@ static int rsi_probe(struct sdio_func *pfunction,
__func__);
goto fail;
}
+ sdio_claim_host(pfunction);
+ if (sdio_claim_irq(pfunction, rsi_handle_interrupt)) {
+ rsi_dbg(ERR_ZONE, "%s: Failed to request IRQ\n", __func__);
+ sdio_release_host(pfunction);
+ goto fail;
+ }
+ sdio_release_host(pfunction);
+ rsi_dbg(INIT_ZONE, "%s: Registered Interrupt handler\n", __func__);
if (rsi_hal_device_init(adapter)) {
rsi_dbg(ERR_ZONE, "%s: Failed in device init\n", __func__);
sdio_claim_host(pfunction);
+ sdio_release_irq(pfunction);
sdio_disable_func(pfunction);
sdio_release_host(pfunction);
goto fail;
@@ -923,16 +934,6 @@ static int rsi_probe(struct sdio_func *pfunction,
return -EIO;
}
- sdio_claim_host(pfunction);
- if (sdio_claim_irq(pfunction, rsi_handle_interrupt)) {
- rsi_dbg(ERR_ZONE, "%s: Failed to request IRQ\n", __func__);
- sdio_release_host(pfunction);
- goto fail;
- }
-
- sdio_release_host(pfunction);
- rsi_dbg(INIT_ZONE, "%s: Registered Interrupt handler\n", __func__);
-
return 0;
fail:
rsi_91x_deinit(adapter);
diff --git a/drivers/net/wireless/rsi/rsi_main.h b/drivers/net/wireless/rsi/rsi_main.h
index 833c66f5..74ae0ac 100644
--- a/drivers/net/wireless/rsi/rsi_main.h
+++ b/drivers/net/wireless/rsi/rsi_main.h
@@ -32,6 +32,7 @@
#define ISR_ZONE BIT(8) /* For Interrupt Msgs */
enum RSI_FSM_STATES {
+ FSM_FW_NOT_LOADED,
FSM_CARD_NOT_READY,
FSM_BOOT_PARAMS_SENT,
FSM_EEPROM_READ_MAC_ADDR,
--
2.7.4
Amitkumar Karwar <[email protected]> writes:
> From: Prameela Rani Garnepudi <[email protected]>
>
> After successful loading of firmware, a CARD READY indication is
> received by host. Common device configuration parameters are sent
> to the device after this. It includes information like device
> operating mode (Wi-Fi alone or BT coex), power save related
> parameters, GPIO information etc. As device supports BT coex,
> this frame is send in COEX queue initially. Based on the operating
> mode, CARD READY indication is received from each protocol module
> in firmware i.e. WLAN, BT.
>
> Signed-off-by: Prameela Rani Garnepudi <[email protected]>
> Signed-off-by: Amitkumar Karwar <[email protected]>
[...]
> +struct rsi_ulp_gpio_vals {
> +#ifdef __LITTLE_ENDIAN
> + u8 motion_sensor_gpio_ulp_wakeup:1;
> + u8 sleep_ind_from_device:1;
> + u8 ulp_gpio_2:1;
> + u8 push_button_ulp_wakeup:1;
> + u8 reserved:4;
> +#else
> + u8 reserved:4;
> + u8 push_button_ulp_wakeup:1;
> + u8 ulp_gpio_2:1;
> + u8 sleep_ind_from_device:1;
> + u8 motion_sensor_gpio_ulp_wakeup:1;
> +#endif
> +} __packed;
This is something I'm not exactly thrilled to see (bitfields are not
really liked in upstream community) but I'm not going to reject that
either as we have other offenders, rtl8xxxx being one. But it's much
better that to __le_to_cpu(), FIELD_GET() & co. That you don't need to
duplicate the fields and is less error prone.
> +struct rsi_config_vals {
> +#ifdef __LITTLE_ENDIAN
> + u16 len:12;
> + u16 q_no:4;
> +#else
> + u16 q_no:4;
> + u16 len:12;
> +#endif
> + u8 pkt_type;
> + u8 misc_flags;
> + __le16 reserved1[6];
> + u8 lp_ps_handshake;
> + u8 ulp_ps_handshake;
> + u8 sleep_config_params; /* 0 for no handshake,
> + * 1 for GPIO based handshake,
> + * 2 packet handshake
> + */
> + u8 unused_ulp_gpio;
> + u32 unused_soc_gpio_bitmap;
> + u8 ext_pa_or_bt_coex_en;
> + u8 opermode;
> + u8 wlan_rf_pwr_mode;
> + u8 bt_rf_pwr_mode;
> + u8 zigbee_rf_pwr_mode;
> + u8 driver_mode;
> + u8 region_code;
> + u8 antenna_sel_val;
> + u8 reserved2[16];
> +} __packed;
But here you are even mixing use of __LITTLE_ENDIAN and __le16, that's
just weird. And shouldn't unused_soc_gpio_bitmap be __le32?
--
Kalle Valo
Currently macros are used for FSM states. We will replace
it with enum so that new state can be added easily without
worrying about macro value.
Signed-off-by: Amitkumar Karwar <[email protected]>
---
drivers/net/wireless/rsi/rsi_main.h | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/drivers/net/wireless/rsi/rsi_main.h b/drivers/net/wireless/rsi/rsi_main.h
index ea4fc22..833c66f5 100644
--- a/drivers/net/wireless/rsi/rsi_main.h
+++ b/drivers/net/wireless/rsi/rsi_main.h
@@ -31,13 +31,15 @@
#define FSM_ZONE BIT(7) /* For State Machine Msgs */
#define ISR_ZONE BIT(8) /* For Interrupt Msgs */
-#define FSM_CARD_NOT_READY 0
-#define FSM_BOOT_PARAMS_SENT 1
-#define FSM_EEPROM_READ_MAC_ADDR 2
-#define FSM_RESET_MAC_SENT 3
-#define FSM_RADIO_CAPS_SENT 4
-#define FSM_BB_RF_PROG_SENT 5
-#define FSM_MAC_INIT_DONE 6
+enum RSI_FSM_STATES {
+ FSM_CARD_NOT_READY,
+ FSM_BOOT_PARAMS_SENT,
+ FSM_EEPROM_READ_MAC_ADDR,
+ FSM_RESET_MAC_SENT,
+ FSM_RADIO_CAPS_SENT,
+ FSM_BB_RF_PROG_SENT,
+ FSM_MAC_INIT_DONE
+};
extern u32 rsi_zone_enabled;
extern __printf(2, 3) void rsi_dbg(u32 zone, const char *fmt, ...);
--
2.7.4
From: Prameela Rani Garnepudi <[email protected]>
usb device id and vendor id for RS9113 chipset are included.
So it can be used through usb interface.
Signed-off-by: Prameela Rani Garnepudi <[email protected]>
Signed-off-by: Amitkumar Karwar <[email protected]>
---
drivers/net/wireless/rsi/rsi_91x_usb.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/net/wireless/rsi/rsi_91x_usb.c b/drivers/net/wireless/rsi/rsi_91x_usb.c
index f5de693..bcd7f45 100644
--- a/drivers/net/wireless/rsi/rsi_91x_usb.c
+++ b/drivers/net/wireless/rsi/rsi_91x_usb.c
@@ -666,6 +666,7 @@ static const struct usb_device_id rsi_dev_table[] = {
{ USB_DEVICE(0x041B, 0x0301) },
{ USB_DEVICE(0x041B, 0x0201) },
{ USB_DEVICE(0x041B, 0x9330) },
+ { USB_DEVICE(0x1618, 0x9113) },
{ /* Blank */},
};
--
2.7.4
Amitkumar Karwar <[email protected]> writes:
> On Wed, Jun 14, 2017 at 2:43 PM, Kalle Valo <[email protected]> wrote:
>> amit karwar <[email protected]> writes:
>>
>>> On Tue, Jun 13, 2017 at 12:17 PM, Kalle Valo <[email protected]> wrote:
>>>
>>>> Also your name in patchwork is not capitalised (patchwork is idiotic and
>>>> takes the name from patchwork user data and not from the patch):
>>>>
>>>> [1/6] rsi: add usb RS9113 chipset support 2017-06-02 amit
>>>> karwar New
>>>> [2/6] rsi: use enum for FSM states 2017-06-02 amit karwar New
>>>> [3/6] rsi: Register interrupt handler before firmware load
>>>> 2017-06-02 amit karwar New
>>>> [4/6] rsi: receive path enhancement for RS9113 2017-06-02 amit
>>>> karwar New
>>>> [5/6] rsi: configure new boot parameters to device 2017-06-02
>>>> amit karwar New
>>>> [6/6] rsi: add tx frame for common device configuration
>>>> 2017-06-02 amit karwar New
>>>>
>>>> To fix that could you please register to patchwork and capitalise your
>>>> name correctly? You have only one chance, patchwork doesn't allow users
>>>> edit the name afterwards, so don't do any typos :)
>>>
>>> Thanks. I have registered with patchwork and corrected my name.
>>
>> What address did you use? Patchwork still shows your name all lower:
>>
>> https://patchwork.kernel.org/project/linux-wireless/list/?submitter=173645
>>
>> I suspect you didn't register with gmail.com, but with some other
>> address. I recommend that you link all your email addresses, including
>> gmail.com, to the same patchwork account and hopefully that fixes it.
>> You should be able to do that from the profile page in patchwork.
>
> I had registered with my gmail id. Also, other email id has also been
> linked to patchwork. But still patchwork took previous user name.
> I could not find a way to check my name in patchwork database after
> login. I have now corrected my display name in gmail's setting.
Good, thanks. This name format bug in patchwork is really annoying, I'm
suffering from frequently. Let's see how your next submission goes and
hopefully we can sort it out.
--
Kalle Valo
On Wed, Jun 14, 2017 at 2:34 PM, Kalle Valo <[email protected]> wrote:
> Amitkumar Karwar <[email protected]> writes:
>
>> From: Prameela Rani Garnepudi <[email protected]>
>>
>> After successful loading of firmware, a CARD READY indication is
>> received by host. Common device configuration parameters are sent
>> to the device after this. It includes information like device
>> operating mode (Wi-Fi alone or BT coex), power save related
>> parameters, GPIO information etc. As device supports BT coex,
>> this frame is send in COEX queue initially. Based on the operating
>> mode, CARD READY indication is received from each protocol module
>> in firmware i.e. WLAN, BT.
>>
>> Signed-off-by: Prameela Rani Garnepudi <[email protected]>
>> Signed-off-by: Amitkumar Karwar <[email protected]>
>
> [...]
>
>> +struct rsi_ulp_gpio_vals {
>> +#ifdef __LITTLE_ENDIAN
>> + u8 motion_sensor_gpio_ulp_wakeup:1;
>> + u8 sleep_ind_from_device:1;
>> + u8 ulp_gpio_2:1;
>> + u8 push_button_ulp_wakeup:1;
>> + u8 reserved:4;
>> +#else
>> + u8 reserved:4;
>> + u8 push_button_ulp_wakeup:1;
>> + u8 ulp_gpio_2:1;
>> + u8 sleep_ind_from_device:1;
>> + u8 motion_sensor_gpio_ulp_wakeup:1;
>> +#endif
>> +} __packed;
>
> This is something I'm not exactly thrilled to see (bitfields are not
> really liked in upstream community) but I'm not going to reject that
> either as we have other offenders, rtl8xxxx being one. But it's much
> better that to __le_to_cpu(), FIELD_GET() & co. That you don't need to
> duplicate the fields and is less error prone.
Got it. I will get rid of bitfields in structure and __LITTLE_ENDIAN
macro usage.
>
>> +struct rsi_config_vals {
>> +#ifdef __LITTLE_ENDIAN
>> + u16 len:12;
>> + u16 q_no:4;
>> +#else
>> + u16 q_no:4;
>> + u16 len:12;
>> +#endif
>> + u8 pkt_type;
>> + u8 misc_flags;
>> + __le16 reserved1[6];
>> + u8 lp_ps_handshake;
>> + u8 ulp_ps_handshake;
>> + u8 sleep_config_params; /* 0 for no handshake,
>> + * 1 for GPIO based handshake,
>> + * 2 packet handshake
>> + */
>> + u8 unused_ulp_gpio;
>> + u32 unused_soc_gpio_bitmap;
>> + u8 ext_pa_or_bt_coex_en;
>> + u8 opermode;
>> + u8 wlan_rf_pwr_mode;
>> + u8 bt_rf_pwr_mode;
>> + u8 zigbee_rf_pwr_mode;
>> + u8 driver_mode;
>> + u8 region_code;
>> + u8 antenna_sel_val;
>> + u8 reserved2[16];
>> +} __packed;
>
> But here you are even mixing use of __LITTLE_ENDIAN and __le16, that's
> just weird. And shouldn't unused_soc_gpio_bitmap be __le32?
>
You are right. unused_soc_gpio_bitmap should have been __le32.
I will correct this and get rid of __LITTLE_ENDIAN in updated version
Regards,
Amitkumar
From: Prameela Rani Garnepudi <[email protected]>
After successful loading of firmware, a CARD READY indication is
received by host. Common device configuration parameters are sent
to the device after this. It includes information like device
operating mode (Wi-Fi alone or BT coex), power save related
parameters, GPIO information etc. As device supports BT coex,
this frame is send in COEX queue initially. Based on the operating
mode, CARD READY indication is received from each protocol module
in firmware i.e. WLAN, BT.
Signed-off-by: Prameela Rani Garnepudi <[email protected]>
Signed-off-by: Amitkumar Karwar <[email protected]>
---
drivers/net/wireless/rsi/rsi_91x_hal.c | 3 +-
drivers/net/wireless/rsi/rsi_91x_mgmt.c | 132 +++++++++++++++++++++++++++++---
drivers/net/wireless/rsi/rsi_hal.h | 3 +
drivers/net/wireless/rsi/rsi_main.h | 11 ++-
drivers/net/wireless/rsi/rsi_mgmt.h | 97 +++++++++++++++++++++++
5 files changed, 232 insertions(+), 14 deletions(-)
diff --git a/drivers/net/wireless/rsi/rsi_91x_hal.c b/drivers/net/wireless/rsi/rsi_91x_hal.c
index 94e074d..c230359 100644
--- a/drivers/net/wireless/rsi/rsi_91x_hal.c
+++ b/drivers/net/wireless/rsi/rsi_91x_hal.c
@@ -718,7 +718,8 @@ int rsi_hal_device_init(struct rsi_hw *adapter)
{
struct rsi_common *common = adapter->priv;
- common->coex_mode = 1;
+ common->coex_mode = RSI_DEV_COEX_MODE_WIFI_ALONE;
+ common->oper_mode = RSI_DEV_OPMODE_WIFI_ALONE;
adapter->device_model = RSI_DEV_9113;
switch (adapter->device_model) {
diff --git a/drivers/net/wireless/rsi/rsi_91x_mgmt.c b/drivers/net/wireless/rsi/rsi_91x_mgmt.c
index b2950aa..237e59a 100644
--- a/drivers/net/wireless/rsi/rsi_91x_mgmt.c
+++ b/drivers/net/wireless/rsi/rsi_91x_mgmt.c
@@ -206,6 +206,39 @@ static struct bootup_params boot_params_40 = {
.beacon_resedue_alg_en = 0,
};
+#define UNUSED_GPIO 1
+#define USED_GPIO 0
+static struct rsi_ulp_gpio_vals unused_ulp_gpio_bitmap = {
+ .motion_sensor_gpio_ulp_wakeup = UNUSED_GPIO,
+ .sleep_ind_from_device = UNUSED_GPIO,
+ .ulp_gpio_2 = UNUSED_GPIO,
+ .push_button_ulp_wakeup = UNUSED_GPIO,
+};
+
+static struct rsi_soc_gpio_vals unused_soc_gpio_bitmap = {
+ .pspi_csn_0 = USED_GPIO, //GPIO_0
+ .pspi_csn_1 = USED_GPIO, //GPIO_1
+ .host_wakeup_intr = USED_GPIO, //GPIO_2
+ .pspi_data_0 = USED_GPIO, //GPIO_3
+ .pspi_data_1 = USED_GPIO, //GPIO_4
+ .pspi_data_2 = USED_GPIO, //GPIO_5
+ .pspi_data_3 = USED_GPIO, //GPIO_6
+ .i2c_scl = USED_GPIO, //GPIO_7
+ .i2c_sda = USED_GPIO, //GPIO_8
+ .uart1_rx = UNUSED_GPIO, //GPIO_9
+ .uart1_tx = UNUSED_GPIO, //GPIO_10
+ .uart1_rts_i2s_clk = UNUSED_GPIO, //GPIO_11
+ .uart1_cts_i2s_ws = UNUSED_GPIO, //GPIO_12
+ .dbg_uart_rx_i2s_din = UNUSED_GPIO, //GPIO_13
+ .dbg_uart_tx_i2s_dout = UNUSED_GPIO, //GPIO_14
+ .lp_wakeup_boot_bypass = UNUSED_GPIO, //GPIO_15
+ .led_0 = USED_GPIO, //GPIO_16
+ .btcoex_wlan_active_ext_pa_ant_sel_A = UNUSED_GPIO, //GPIO_17
+ .btcoex_bt_priority_ext_pa_ant_sel_B = UNUSED_GPIO, //GPIO_18
+ .btcoex_bt_active_ext_pa_on_off = UNUSED_GPIO, //GPIO_19
+ .rf_reset = USED_GPIO, //GPIO_20
+ .sleep_ind_from_device = UNUSED_GPIO,
+};
static u16 mcs[] = {13, 26, 39, 52, 78, 104, 117, 130};
/**
@@ -224,6 +257,12 @@ static void rsi_set_default_parameters(struct rsi_common *common)
common->fsm_state = FSM_CARD_NOT_READY;
common->iface_down = true;
common->endpoint = EP_2GHZ_20MHZ;
+ common->driver_mode = 1; /* End to end mode */
+ common->lp_ps_handshake_mode = 0; /* Default no handShake mode*/
+ common->ulp_ps_handshake_mode = 2; /* Default PKT handShake mode*/
+ common->rf_power_val = 0; /* Default 1.9V */
+ common->wlan_rf_power_mode = 0;
+ common->obm_ant_sel_val = 2;
}
/**
@@ -762,6 +801,52 @@ int rsi_hal_load_key(struct rsi_common *common,
}
/*
+ * This function sends the common device configuration parameters to device.
+ * This frame includes the useful information to make device works on
+ * specific operating mode.
+ */
+static int rsi_send_common_dev_params(struct rsi_common *common)
+{
+ struct sk_buff *skb;
+ u32 frame_len;
+ struct rsi_config_vals *dev_cfgs;
+
+ frame_len = sizeof(struct rsi_config_vals);
+
+ rsi_dbg(MGMT_TX_ZONE, "Sending common device config params\n");
+ skb = dev_alloc_skb(frame_len);
+ if (!skb) {
+ rsi_dbg(ERR_ZONE, "%s: Unable to allocate skb\n", __func__);
+ return -ENOMEM;
+ }
+
+ memset(skb->data, 0, frame_len);
+
+ dev_cfgs = (struct rsi_config_vals *)skb->data;
+ memset(dev_cfgs, 0, (sizeof(struct rsi_config_vals)));
+
+ dev_cfgs->len = frame_len - FRAME_DESC_SZ;
+ dev_cfgs->q_no = RSI_COEX_Q;
+ dev_cfgs->pkt_type = COMMON_DEV_CONFIG;
+
+ dev_cfgs->lp_ps_handshake = common->lp_ps_handshake_mode;
+ dev_cfgs->ulp_ps_handshake = common->ulp_ps_handshake_mode;
+
+ dev_cfgs->unused_ulp_gpio = *(u8 *)&unused_ulp_gpio_bitmap;
+ dev_cfgs->unused_soc_gpio_bitmap = *(u32 *)&unused_soc_gpio_bitmap;
+
+ dev_cfgs->opermode = common->oper_mode;
+ dev_cfgs->wlan_rf_pwr_mode = common->wlan_rf_power_mode;
+ dev_cfgs->driver_mode = common->driver_mode;
+ dev_cfgs->region_code = NL80211_DFS_FCC;
+ dev_cfgs->antenna_sel_val = common->obm_ant_sel_val;
+
+ skb_put(skb, frame_len);
+
+ return rsi_send_internal_mgmt_frame(common, skb);
+}
+
+/*
* rsi_load_bootup_params() - This function send bootup params to the firmware.
* @common: Pointer to the driver private structure.
*
@@ -1493,6 +1578,40 @@ static int rsi_handle_ta_confirm_type(struct rsi_common *common,
return -EINVAL;
}
+static int rsi_handle_card_ready(struct rsi_common *common, u8 *msg)
+{
+ switch (common->fsm_state) {
+ case FSM_CARD_NOT_READY:
+ rsi_dbg(INIT_ZONE, "Card ready indication from Common HAL\n");
+ rsi_set_default_parameters(common);
+ if (rsi_send_common_dev_params(common) < 0)
+ return -EINVAL;
+ common->fsm_state = FSM_COMMON_DEV_PARAMS_SENT;
+ break;
+ case FSM_COMMON_DEV_PARAMS_SENT:
+ rsi_dbg(INIT_ZONE, "Card ready indication from WLAN HAL\n");
+
+ /* Get usb buffer status register address */
+ common->priv->usb_buffer_status_reg = *(u32 *)&msg[8];
+ rsi_dbg(INFO_ZONE, "USB buffer status register = %x\n",
+ common->priv->usb_buffer_status_reg);
+
+ if (rsi_load_bootup_params(common)) {
+ common->fsm_state = FSM_CARD_NOT_READY;
+ return -EINVAL;
+ }
+ common->fsm_state = FSM_BOOT_PARAMS_SENT;
+ break;
+ default:
+ rsi_dbg(ERR_ZONE,
+ "%s: card ready indication in invalid state %d.\n",
+ __func__, common->fsm_state);
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
/**
* rsi_mgmt_pkt_recv() - This function processes the management packets
* recieved from the hardware.
@@ -1505,7 +1624,6 @@ int rsi_mgmt_pkt_recv(struct rsi_common *common, u8 *msg)
{
s32 msg_len = (le16_to_cpu(*(__le16 *)&msg[0]) & 0x0fff);
u16 msg_type = (msg[2]);
- int ret;
rsi_dbg(FSM_ZONE, "%s: Msg Len: %d, Msg Type: %4x\n",
__func__, msg_len, msg_type);
@@ -1515,17 +1633,7 @@ int rsi_mgmt_pkt_recv(struct rsi_common *common, u8 *msg)
} else if (msg_type == CARD_READY_IND) {
rsi_dbg(FSM_ZONE, "%s: Card ready indication received\n",
__func__);
- if (common->fsm_state == FSM_CARD_NOT_READY) {
- rsi_set_default_parameters(common);
-
- ret = rsi_load_bootup_params(common);
- if (ret)
- return ret;
- else
- common->fsm_state = FSM_BOOT_PARAMS_SENT;
- } else {
- return -EINVAL;
- }
+ return rsi_handle_card_ready(common, msg);
} else if (msg_type == TX_STATUS_IND) {
if (msg[15] == PROBEREQ_CONFIRM) {
common->mgmt_q_block = false;
diff --git a/drivers/net/wireless/rsi/rsi_hal.h b/drivers/net/wireless/rsi/rsi_hal.h
index b95200d..902dc54 100644
--- a/drivers/net/wireless/rsi/rsi_hal.h
+++ b/drivers/net/wireless/rsi/rsi_hal.h
@@ -63,6 +63,9 @@
#define COMMAN_HAL_WAIT_FOR_CARD_READY 1
+#define RSI_DEV_OPMODE_WIFI_ALONE 1
+#define RSI_DEV_COEX_MODE_WIFI_ALONE 1
+
struct bl_header {
__le32 flags;
__le32 image_no;
diff --git a/drivers/net/wireless/rsi/rsi_main.h b/drivers/net/wireless/rsi/rsi_main.h
index f12e5d9..43c74a5 100644
--- a/drivers/net/wireless/rsi/rsi_main.h
+++ b/drivers/net/wireless/rsi/rsi_main.h
@@ -34,8 +34,10 @@
enum RSI_FSM_STATES {
FSM_FW_NOT_LOADED,
FSM_CARD_NOT_READY,
+ FSM_COMMON_DEV_PARAMS_SENT,
FSM_BOOT_PARAMS_SENT,
FSM_EEPROM_READ_MAC_ADDR,
+ FSM_EEPROM_READ_RF_TYPE,
FSM_RESET_MAC_SENT,
FSM_RADIO_CAPS_SENT,
FSM_BB_RF_PROG_SENT,
@@ -210,8 +212,14 @@ struct rsi_common {
struct cqm_info cqm_info;
bool hw_data_qs_blocked;
+ u8 driver_mode;
u8 coex_mode;
-
+ u16 oper_mode;
+ u8 lp_ps_handshake_mode;
+ u8 ulp_ps_handshake_mode;
+ u8 rf_power_val;
+ u8 wlan_rf_power_mode;
+ u8 obm_ant_sel_val;
int tx_power;
u8 ant_in_use;
};
@@ -234,6 +242,7 @@ struct rsi_hw {
enum host_intf rsi_host_intf;
u16 block_size;
+ u32 usb_buffer_status_reg;
#ifdef CONFIG_RSI_DEBUGFS
struct rsi_debugfs *dfsentry;
u8 num_debugfs_entries;
diff --git a/drivers/net/wireless/rsi/rsi_mgmt.h b/drivers/net/wireless/rsi/rsi_mgmt.h
index dfbf7a5..4cff27d 100644
--- a/drivers/net/wireless/rsi/rsi_mgmt.h
+++ b/drivers/net/wireless/rsi/rsi_mgmt.h
@@ -205,6 +205,7 @@ enum cmd_frame_type {
CW_MODE_REQ,
PER_CMD_PKT,
ANT_SEL_FRAME = 0x20,
+ COMMON_DEV_CONFIG = 0x28,
RADIO_PARAMS_UPDATE = 0x29
};
@@ -282,6 +283,102 @@ struct rsi_radio_caps {
__le16 preamble_type;
} __packed;
+struct rsi_ulp_gpio_vals {
+#ifdef __LITTLE_ENDIAN
+ u8 motion_sensor_gpio_ulp_wakeup:1;
+ u8 sleep_ind_from_device:1;
+ u8 ulp_gpio_2:1;
+ u8 push_button_ulp_wakeup:1;
+ u8 reserved:4;
+#else
+ u8 reserved:4;
+ u8 push_button_ulp_wakeup:1;
+ u8 ulp_gpio_2:1;
+ u8 sleep_ind_from_device:1;
+ u8 motion_sensor_gpio_ulp_wakeup:1;
+#endif
+} __packed;
+
+struct rsi_soc_gpio_vals {
+#ifdef __LITTLE_ENDIAN
+ u32 pspi_csn_0:1;
+ u32 pspi_csn_1:1;
+ u32 host_wakeup_intr:1;
+ u32 pspi_data_0:1;
+ u32 pspi_data_1:1;
+ u32 pspi_data_2:1;
+ u32 pspi_data_3:1;
+ u32 i2c_scl:1;
+ u32 i2c_sda:1;
+ u32 uart1_rx:1;
+ u32 uart1_tx:1;
+ u32 uart1_rts_i2s_clk:1;
+ u32 uart1_cts_i2s_ws:1;
+ u32 dbg_uart_rx_i2s_din:1;
+ u32 dbg_uart_tx_i2s_dout:1;
+ u32 lp_wakeup_boot_bypass:1;
+ u32 led_0:1;
+ u32 btcoex_wlan_active_ext_pa_ant_sel_A:1;
+ u32 btcoex_bt_priority_ext_pa_ant_sel_B:1;
+ u32 btcoex_bt_active_ext_pa_on_off:1;
+ u32 rf_reset:1;
+ u32 sleep_ind_from_device:1;
+#else
+ u32 sleep_ind_from_device:1;
+ u32 rf_reset:1;
+ u32 btcoex_bt_active_ext_pa_on_off:1;
+ u32 btcoex_bt_priority_ext_pa_ant_sel_B:1;
+ u32 btcoex_wlan_active_ext_pa_ant_sel_A:1;
+ u32 led_0:1;
+ u32 lp_wakeup_boot_bypass:1;
+ u32 dbg_uart_tx_i2s_dout:1;
+ u32 dbg_uart_rx_i2s_din:1;
+ u32 uart1_cts_i2s_ws:1;
+ u32 uart1_rts_i2s_clk:1;
+ u32 uart1_tx:1;
+ u32 uart1_rx:1;
+ u32 i2c_sda:1;
+ u32 i2c_scl:1;
+ u32 pspi_data_3:1;
+ u32 pspi_data_2:1;
+ u32 pspi_data_1:1;
+ u32 pspi_data_0:1;
+ u32 host_wakeup_intr:1;
+ u32 pspi_csn_1:1;
+ u32 pspi_csn_0:1;
+#endif
+} __packed;
+
+struct rsi_config_vals {
+#ifdef __LITTLE_ENDIAN
+ u16 len:12;
+ u16 q_no:4;
+#else
+ u16 q_no:4;
+ u16 len:12;
+#endif
+ u8 pkt_type;
+ u8 misc_flags;
+ __le16 reserved1[6];
+ u8 lp_ps_handshake;
+ u8 ulp_ps_handshake;
+ u8 sleep_config_params; /* 0 for no handshake,
+ * 1 for GPIO based handshake,
+ * 2 packet handshake
+ */
+ u8 unused_ulp_gpio;
+ u32 unused_soc_gpio_bitmap;
+ u8 ext_pa_or_bt_coex_en;
+ u8 opermode;
+ u8 wlan_rf_pwr_mode;
+ u8 bt_rf_pwr_mode;
+ u8 zigbee_rf_pwr_mode;
+ u8 driver_mode;
+ u8 region_code;
+ u8 antenna_sel_val;
+ u8 reserved2[16];
+} __packed;
+
static inline u32 rsi_get_queueno(u8 *addr, u16 offset)
{
return (le16_to_cpu(*(__le16 *)&addr[offset]) & 0x7000) >> 12;
--
2.7.4
On Thu, Jun 15, 2017 at 8:14 PM, Kalle Valo <[email protected]> wrote:
> Amitkumar Karwar <[email protected]> writes:
>
>> On Wed, Jun 14, 2017 at 2:43 PM, Kalle Valo <[email protected]> wrote:
>>> amit karwar <[email protected]> writes:
>>>
>>>> On Tue, Jun 13, 2017 at 12:17 PM, Kalle Valo <[email protected]> wrote:
>>>>
>>>>> Also your name in patchwork is not capitalised (patchwork is idiotic and
>>>>> takes the name from patchwork user data and not from the patch):
>>>>>
>>>>> [1/6] rsi: add usb RS9113 chipset support 2017-06-02 amit
>>>>> karwar New
>>>>> [2/6] rsi: use enum for FSM states 2017-06-02 amit karwar New
>>>>> [3/6] rsi: Register interrupt handler before firmware load
>>>>> 2017-06-02 amit karwar New
>>>>> [4/6] rsi: receive path enhancement for RS9113 2017-06-02 amit
>>>>> karwar New
>>>>> [5/6] rsi: configure new boot parameters to device 2017-06-02
>>>>> amit karwar New
>>>>> [6/6] rsi: add tx frame for common device configuration
>>>>> 2017-06-02 amit karwar New
>>>>>
>>>>> To fix that could you please register to patchwork and capitalise your
>>>>> name correctly? You have only one chance, patchwork doesn't allow users
>>>>> edit the name afterwards, so don't do any typos :)
>>>>
>>>> Thanks. I have registered with patchwork and corrected my name.
>>>
>>> What address did you use? Patchwork still shows your name all lower:
>>>
>>> https://patchwork.kernel.org/project/linux-wireless/list/?submitter=173645
>>>
>>> I suspect you didn't register with gmail.com, but with some other
>>> address. I recommend that you link all your email addresses, including
>>> gmail.com, to the same patchwork account and hopefully that fixes it.
>>> You should be able to do that from the profile page in patchwork.
>>
>> I had registered with my gmail id. Also, other email id has also been
>> linked to patchwork. But still patchwork took previous user name.
>> I could not find a way to check my name in patchwork database after
>> login. I have now corrected my display name in gmail's setting.
>
> Good, thanks. This name format bug in patchwork is really annoying, I'm
> suffering from frequently. Let's see how your next submission goes and
> hopefully we can sort it out.
I just submitted a patch series. But patchwork is still showing older name.
Regards,
Amitkumar
From: Prameela Rani Garnepudi <[email protected]>
RS9113 chipset supports Coex feature. Initial frame exchanges during
device initialization happens on coex queue. This patch adds the
handling for coex queue.
Signed-off-by: Prameela Rani Garnepudi <[email protected]>
Signed-off-by: Amitkumar Karwar <[email protected]>
---
drivers/net/wireless/rsi/rsi_91x_main.c | 9 ++++++++-
drivers/net/wireless/rsi/rsi_main.h | 1 +
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/drivers/net/wireless/rsi/rsi_91x_main.c b/drivers/net/wireless/rsi/rsi_91x_main.c
index 8810862..f1cde0c 100644
--- a/drivers/net/wireless/rsi/rsi_91x_main.c
+++ b/drivers/net/wireless/rsi/rsi_91x_main.c
@@ -123,9 +123,16 @@ int rsi_read_pkt(struct rsi_common *common, s32 rcv_pkt_len)
queueno = rsi_get_queueno(frame_desc, offset);
length = rsi_get_length(frame_desc, offset);
- extended_desc = rsi_get_extended_desc(frame_desc, offset);
+
+ /* Extended descriptor is valid for WLAN queues only */
+ if (queueno == RSI_WIFI_DATA_Q || queueno == RSI_WIFI_MGMT_Q)
+ extended_desc = rsi_get_extended_desc(frame_desc,
+ offset);
switch (queueno) {
+ case RSI_COEX_Q:
+ rsi_mgmt_pkt_recv(common, (frame_desc + offset));
+ break;
case RSI_WIFI_DATA_Q:
skb = rsi_prepare_skb(common,
(frame_desc + offset),
diff --git a/drivers/net/wireless/rsi/rsi_main.h b/drivers/net/wireless/rsi/rsi_main.h
index 74ae0ac..f12e5d9 100644
--- a/drivers/net/wireless/rsi/rsi_main.h
+++ b/drivers/net/wireless/rsi/rsi_main.h
@@ -63,6 +63,7 @@ extern __printf(2, 3) void rsi_dbg(u32 zone, const char *fmt, ...);
#define MAX_CONTINUOUS_VI_PKTS 4
/* Queue information */
+#define RSI_COEX_Q 0x0
#define RSI_WIFI_MGMT_Q 0x4
#define RSI_WIFI_DATA_Q 0x5
#define IEEE80211_MGMT_FRAME 0x00
--
2.7.4
Amitkumar Karwar <[email protected]> writes:
> From: Prameela Rani Garnepudi <[email protected]>
>
> After successful loading of firmware, a CARD READY indication is
> received by host. Common device configuration parameters are sent
> to the device after this. It includes information like device
> operating mode (Wi-Fi alone or BT coex), power save related
> parameters, GPIO information etc. As device supports BT coex,
> this frame is send in COEX queue initially. Based on the operating
> mode, CARD READY indication is received from each protocol module
> in firmware i.e. WLAN, BT.
>
> Signed-off-by: Prameela Rani Garnepudi <[email protected]>
> Signed-off-by: Amitkumar Karwar <[email protected]>
[...]
> +static struct rsi_soc_gpio_vals unused_soc_gpio_bitmap = {
> + .pspi_csn_0 = USED_GPIO, //GPIO_0
> + .pspi_csn_1 = USED_GPIO, //GPIO_1
> + .host_wakeup_intr = USED_GPIO, //GPIO_2
> + .pspi_data_0 = USED_GPIO, //GPIO_3
> + .pspi_data_1 = USED_GPIO, //GPIO_4
> + .pspi_data_2 = USED_GPIO, //GPIO_5
> + .pspi_data_3 = USED_GPIO, //GPIO_6
> + .i2c_scl = USED_GPIO, //GPIO_7
> + .i2c_sda = USED_GPIO, //GPIO_8
> + .uart1_rx = UNUSED_GPIO, //GPIO_9
> + .uart1_tx = UNUSED_GPIO, //GPIO_10
> + .uart1_rts_i2s_clk = UNUSED_GPIO, //GPIO_11
> + .uart1_cts_i2s_ws = UNUSED_GPIO, //GPIO_12
> + .dbg_uart_rx_i2s_din = UNUSED_GPIO, //GPIO_13
> + .dbg_uart_tx_i2s_dout = UNUSED_GPIO, //GPIO_14
> + .lp_wakeup_boot_bypass = UNUSED_GPIO, //GPIO_15
> + .led_0 = USED_GPIO, //GPIO_16
> + .btcoex_wlan_active_ext_pa_ant_sel_A = UNUSED_GPIO, //GPIO_17
> + .btcoex_bt_priority_ext_pa_ant_sel_B = UNUSED_GPIO, //GPIO_18
> + .btcoex_bt_active_ext_pa_on_off = UNUSED_GPIO, //GPIO_19
> + .rf_reset = USED_GPIO, //GPIO_20
> + .sleep_ind_from_device = UNUSED_GPIO,
> +};
No //, please. Use instead /* */.
--
Kalle Valo
On Wed, Jun 14, 2017 at 2:37 PM, Kalle Valo <[email protected]> wrote:
> Amitkumar Karwar <[email protected]> writes:
>
>> From: Prameela Rani Garnepudi <[email protected]>
>>
>> After successful loading of firmware, a CARD READY indication is
>> received by host. Common device configuration parameters are sent
>> to the device after this. It includes information like device
>> operating mode (Wi-Fi alone or BT coex), power save related
>> parameters, GPIO information etc. As device supports BT coex,
>> this frame is send in COEX queue initially. Based on the operating
>> mode, CARD READY indication is received from each protocol module
>> in firmware i.e. WLAN, BT.
>>
>> Signed-off-by: Prameela Rani Garnepudi <[email protected]>
>> Signed-off-by: Amitkumar Karwar <[email protected]>
>
> [...]
>
>> +static struct rsi_soc_gpio_vals unused_soc_gpio_bitmap = {
>> + .pspi_csn_0 = USED_GPIO, //GPIO_0
>> + .pspi_csn_1 = USED_GPIO, //GPIO_1
>> + .host_wakeup_intr = USED_GPIO, //GPIO_2
>> + .pspi_data_0 = USED_GPIO, //GPIO_3
>> + .pspi_data_1 = USED_GPIO, //GPIO_4
>> + .pspi_data_2 = USED_GPIO, //GPIO_5
>> + .pspi_data_3 = USED_GPIO, //GPIO_6
>> + .i2c_scl = USED_GPIO, //GPIO_7
>> + .i2c_sda = USED_GPIO, //GPIO_8
>> + .uart1_rx = UNUSED_GPIO, //GPIO_9
>> + .uart1_tx = UNUSED_GPIO, //GPIO_10
>> + .uart1_rts_i2s_clk = UNUSED_GPIO, //GPIO_11
>> + .uart1_cts_i2s_ws = UNUSED_GPIO, //GPIO_12
>> + .dbg_uart_rx_i2s_din = UNUSED_GPIO, //GPIO_13
>> + .dbg_uart_tx_i2s_dout = UNUSED_GPIO, //GPIO_14
>> + .lp_wakeup_boot_bypass = UNUSED_GPIO, //GPIO_15
>> + .led_0 = USED_GPIO, //GPIO_16
>> + .btcoex_wlan_active_ext_pa_ant_sel_A = UNUSED_GPIO, //GPIO_17
>> + .btcoex_bt_priority_ext_pa_ant_sel_B = UNUSED_GPIO, //GPIO_18
>> + .btcoex_bt_active_ext_pa_on_off = UNUSED_GPIO, //GPIO_19
>> + .rf_reset = USED_GPIO, //GPIO_20
>> + .sleep_ind_from_device = UNUSED_GPIO,
>> +};
>
> No //, please. Use instead /* */.
>
Sure. I will take care of this
Regards,
Amitkumar
On Tue, Jun 13, 2017 at 12:17 PM, Kalle Valo <[email protected]> wrote:
> Amitkumar Karwar <[email protected]> writes:
>
>> Currently macros are used for FSM states. We will replace
>> it with enum so that new state can be added easily without
>> worrying about macro value.
>>
>> Signed-off-by: Amitkumar Karwar <[email protected]>
>
> From and Signed-off-by does not match (gmail.com vs redpinesignals.com).
> I suggest that you add a separate From line to the commit log containing
> redpinesignals.com, this way you can still submit patches via gmail.com.
Sure. I will follow this for my future patches.
>
> Also your name in patchwork is not capitalised (patchwork is idiotic and
> takes the name from patchwork user data and not from the patch):
>
> [1/6] rsi: add usb RS9113 chipset support 2017-06-02 amit karwar New
> [2/6] rsi: use enum for FSM states 2017-06-02 amit karwar New
> [3/6] rsi: Register interrupt handler before firmware load 2017-06-02 amit karwar New
> [4/6] rsi: receive path enhancement for RS9113 2017-06-02 amit karwar New
> [5/6] rsi: configure new boot parameters to device 2017-06-02 amit karwar New
> [6/6] rsi: add tx frame for common device configuration 2017-06-02 amit karwar New
>
> To fix that could you please register to patchwork and capitalise your
> name correctly? You have only one chance, patchwork doesn't allow users
> edit the name afterwards, so don't do any typos :)
Thanks. I have registered with patchwork and corrected my name.
Regards,
Amitkumar Karwar
From: Prameela Rani Garnepudi <[email protected]>
Boot parameters are changed in new firmware. Also three
new sdio sleep parameters are added for ultra low power
save.
Signed-off-by: Prameela Rani Garnepudi <[email protected]>
Signed-off-by: Amitkumar Karwar <[email protected]>
---
drivers/net/wireless/rsi/rsi_91x_mgmt.c | 20 +++++++++++++-------
drivers/net/wireless/rsi/rsi_boot_params.h | 15 +++++++++------
2 files changed, 22 insertions(+), 13 deletions(-)
diff --git a/drivers/net/wireless/rsi/rsi_91x_mgmt.c b/drivers/net/wireless/rsi/rsi_91x_mgmt.c
index fac87c0..b2950aa 100644
--- a/drivers/net/wireless/rsi/rsi_91x_mgmt.c
+++ b/drivers/net/wireless/rsi/rsi_91x_mgmt.c
@@ -45,10 +45,10 @@ static struct bootup_params boot_params_20 = {
}
},
.switch_clk_g = {
- .switch_clk_info = cpu_to_le16(BIT(3)),
- .bbp_lmac_clk_reg_val = cpu_to_le16(0x121),
- .umac_clock_reg_config = 0x0,
- .qspi_uart_clock_reg_config = 0x0
+ .switch_clk_info = cpu_to_le16(0xb),
+ .bbp_lmac_clk_reg_val = cpu_to_le16(0x111),
+ .umac_clock_reg_config = cpu_to_le16(0x48),
+ .qspi_uart_clock_reg_config = cpu_to_le16(0x1211)
}
},
{
@@ -106,7 +106,10 @@ static struct bootup_params boot_params_20 = {
.wdt_prog_value = 0x0,
.wdt_soc_rst_delay = 0x0,
.dcdc_operation_mode = 0x0,
- .soc_reset_wait_cnt = 0x0
+ .soc_reset_wait_cnt = 0x0,
+ .waiting_time_at_fresh_sleep = 0x0,
+ .max_threshold_to_avoid_sleep = 0x0,
+ .beacon_resedue_alg_en = 0,
};
static struct bootup_params boot_params_40 = {
@@ -139,7 +142,7 @@ static struct bootup_params boot_params_40 = {
.switch_clk_info = cpu_to_le16(0x09),
.bbp_lmac_clk_reg_val = cpu_to_le16(0x1121),
.umac_clock_reg_config = cpu_to_le16(0x48),
- .qspi_uart_clock_reg_config = 0x0
+ .qspi_uart_clock_reg_config = cpu_to_le16(0x1211)
}
},
{
@@ -197,7 +200,10 @@ static struct bootup_params boot_params_40 = {
.wdt_prog_value = 0x0,
.wdt_soc_rst_delay = 0x0,
.dcdc_operation_mode = 0x0,
- .soc_reset_wait_cnt = 0x0
+ .soc_reset_wait_cnt = 0x0,
+ .waiting_time_at_fresh_sleep = 0x0,
+ .max_threshold_to_avoid_sleep = 0x0,
+ .beacon_resedue_alg_en = 0,
};
static u16 mcs[] = {13, 26, 39, 52, 78, 104, 117, 130};
diff --git a/drivers/net/wireless/rsi/rsi_boot_params.h b/drivers/net/wireless/rsi/rsi_boot_params.h
index 5e2721f..238ee96 100644
--- a/drivers/net/wireless/rsi/rsi_boot_params.h
+++ b/drivers/net/wireless/rsi/rsi_boot_params.h
@@ -24,19 +24,19 @@
#define WIFI_AFEPLL_CONFIGS BIT(7)
#define WIFI_SWITCH_CLK_CONFIGS BIT(8)
-#define TA_PLL_M_VAL_20 8
-#define TA_PLL_N_VAL_20 1
+#define TA_PLL_M_VAL_20 9
+#define TA_PLL_N_VAL_20 0
#define TA_PLL_P_VAL_20 4
#define PLL960_M_VAL_20 0x14
#define PLL960_N_VAL_20 0
#define PLL960_P_VAL_20 5
-#define UMAC_CLK_40MHZ 40
+#define UMAC_CLK_40MHZ 80
-#define TA_PLL_M_VAL_40 46
-#define TA_PLL_N_VAL_40 3
-#define TA_PLL_P_VAL_40 3
+#define TA_PLL_M_VAL_40 9
+#define TA_PLL_N_VAL_40 0
+#define TA_PLL_P_VAL_40 4
#define PLL960_M_VAL_40 0x14
#define PLL960_N_VAL_40 0
@@ -122,5 +122,8 @@ struct bootup_params {
/* dcdc modes configs */
__le32 dcdc_operation_mode;
__le32 soc_reset_wait_cnt;
+ __le32 waiting_time_at_fresh_sleep;
+ __le32 max_threshold_to_avoid_sleep;
+ u8 beacon_resedue_alg_en;
} __packed;
#endif
--
2.7.4