[PATCH] wlcore/wl18xx: fw logger over sdio

2015-12-22 Thread Guy Mishol
From: Shahar Patury 

Enable the FW Logger to work over the SDIO interface in addition
to over UART interface.
In the new design we use fw internal memory instead of packet ram
that was used in older (wl12xx) design.
This change reduces the impact on TP and stability.

A new event was added to notify fw logger is ready for reading.
Dynamic configuration to debugfs was added as well.

Signed-off-by: Shahar Patury 
Signed-off-by: Guy Mishol 
---
V6: Resubmitted again due to patch description update

 drivers/net/wireless/ti/wl18xx/event.c   |2 +
 drivers/net/wireless/ti/wl18xx/event.h   |1 +
 drivers/net/wireless/ti/wl18xx/main.c|9 ++-
 drivers/net/wireless/ti/wlcore/cmd.h |1 -
 drivers/net/wireless/ti/wlcore/debugfs.c |   60 +++
 drivers/net/wireless/ti/wlcore/event.c   |   82 +
 drivers/net/wireless/ti/wlcore/event.h   |9 +++
 drivers/net/wireless/ti/wlcore/io.c  |   11 ++--
 drivers/net/wireless/ti/wlcore/io.h  |4 +-
 drivers/net/wireless/ti/wlcore/main.c|   96 +++--
 drivers/net/wireless/ti/wlcore/rx.c  |1 -
 drivers/net/wireless/ti/wlcore/sysfs.c   |   26 
 drivers/net/wireless/ti/wlcore/wlcore.h  |3 -
 13 files changed, 177 insertions(+), 128 deletions(-)

diff --git a/drivers/net/wireless/ti/wl18xx/event.c 
b/drivers/net/wireless/ti/wl18xx/event.c
index 09c7e09..719907a 100644
--- a/drivers/net/wireless/ti/wl18xx/event.c
+++ b/drivers/net/wireless/ti/wl18xx/event.c
@@ -205,6 +205,8 @@ int wl18xx_process_mailbox_events(struct wl1271 *wl)
 mbox->sc_ssid,
 mbox->sc_pwd_len,
 mbox->sc_pwd);
+   if (vector & FW_LOGGER_INDICATION)
+   wlcore_event_fw_logger(wl);
 
return 0;
 }
diff --git a/drivers/net/wireless/ti/wl18xx/event.h 
b/drivers/net/wireless/ti/wl18xx/event.h
index f3d4f13..070de12 100644
--- a/drivers/net/wireless/ti/wl18xx/event.h
+++ b/drivers/net/wireless/ti/wl18xx/event.h
@@ -41,6 +41,7 @@ enum {
SMART_CONFIG_SYNC_EVENT_ID   = BIT(22),
SMART_CONFIG_DECODE_EVENT_ID = BIT(23),
TIME_SYNC_EVENT_ID   = BIT(24),
+   FW_LOGGER_INDICATION= BIT(25),
 };
 
 enum wl18xx_radar_types {
diff --git a/drivers/net/wireless/ti/wl18xx/main.c 
b/drivers/net/wireless/ti/wl18xx/main.c
index 50cce42..60eda4d 100644
--- a/drivers/net/wireless/ti/wl18xx/main.c
+++ b/drivers/net/wireless/ti/wl18xx/main.c
@@ -461,7 +461,7 @@ static struct wlcore_conf wl18xx_conf = {
},
.fwlog = {
.mode = WL12XX_FWLOG_CONTINUOUS,
-   .mem_blocks   = 2,
+   .mem_blocks   = 0,
.severity = 0,
.timestamp= WL12XX_FWLOG_TIMESTAMP_DISABLED,
.output   = WL12XX_FWLOG_OUTPUT_DBG_PINS,
@@ -584,7 +584,7 @@ static const struct wlcore_partition_set 
wl18xx_ptable[PART_TABLE_LEN] = {
.mem  = { .start = 0x00A0, .size  = 0x00012000 },
.reg  = { .start = 0x00807000, .size  = 0x5000 },
.mem2 = { .start = 0x0080, .size  = 0xB000 },
-   .mem3 = { .start = 0x, .size  = 0x },
+   .mem3 = { .start = 0x00401594, .size  = 0x1020 },
},
[PART_DOWN] = {
.mem  = { .start = 0x, .size  = 0x00014000 },
@@ -602,7 +602,7 @@ static const struct wlcore_partition_set 
wl18xx_ptable[PART_TABLE_LEN] = {
.mem  = { .start = 0x0080, .size  = 0x50FC },
.reg  = { .start = 0x00B00404, .size  = 0x1000 },
.mem2 = { .start = 0x00C0, .size  = 0x0400 },
-   .mem3 = { .start = 0x, .size  = 0x },
+   .mem3 = { .start = 0x00401594, .size  = 0x1020 },
},
[PART_PHY_INIT] = {
.mem  = { .start = WL18XX_PHY_INIT_MEM_ADDR,
@@ -1029,7 +1029,8 @@ static int wl18xx_boot(struct wl1271 *wl)
DFS_CHANNELS_CONFIG_COMPLETE_EVENT |
SMART_CONFIG_SYNC_EVENT_ID |
SMART_CONFIG_DECODE_EVENT_ID |
-   TIME_SYNC_EVENT_ID;
+   TIME_SYNC_EVENT_ID |
+   FW_LOGGER_INDICATION;
 
wl->ap_event_mask = MAX_TX_FAILURE_EVENT_ID;
 
diff --git a/drivers/net/wireless/ti/wlcore/cmd.h 
b/drivers/net/wireless/ti/wlcore/cmd.h
index 8dc46c0..e28e2f23 100644
--- a/drivers/net/wireless/ti/wlcore/cmd.h
+++ b/drivers/net/wireless/ti/wlcore/cmd.h
@@ -626,7 +626,6 @@ struct wl12xx_cmd_remove_peer {
  */
 enum wl12xx_fwlogger_log_mode {
WL12XX_FWLOG_CONTINUOUS,
-   WL12XX_FWLOG_ON_DEMAND
 };
 
 /* 

[PATCH] wlcore/wl18xx: fw logger over sdio

2015-12-02 Thread Guy Mishol
From: Shahar Patury 

enable the FW Logger to work over the SDIO interface instead of only
over UART.
in new design we will use fw internal memory instead of packet ram
that was used in older (and wl12xx) design.
this change will reduce the impact on tp and stability.
adding new event to notify fw logger is ready to be read.
adding dynamic configuration to debugfs.

Signed-off-by: Shahar Patury 
---
 drivers/net/wireless/ti/wl18xx/event.c   |3 +
 drivers/net/wireless/ti/wl18xx/event.h   |1 +
 drivers/net/wireless/ti/wl18xx/main.c|9 ++-
 drivers/net/wireless/ti/wlcore/cmd.h |1 -
 drivers/net/wireless/ti/wlcore/debugfs.c |   60 +++
 drivers/net/wireless/ti/wlcore/event.c   |   78 
 drivers/net/wireless/ti/wlcore/event.h   |9 +++
 drivers/net/wireless/ti/wlcore/io.c  |   11 ++--
 drivers/net/wireless/ti/wlcore/io.h  |4 +-
 drivers/net/wireless/ti/wlcore/main.c|   96 +++--
 drivers/net/wireless/ti/wlcore/rx.c  |1 -
 drivers/net/wireless/ti/wlcore/sysfs.c   |   26 
 drivers/net/wireless/ti/wlcore/wlcore.h  |3 -
 13 files changed, 174 insertions(+), 128 deletions(-)

diff --git a/drivers/net/wireless/ti/wl18xx/event.c 
b/drivers/net/wireless/ti/wl18xx/event.c
index 5d8f189..6da9542 100644
--- a/drivers/net/wireless/ti/wl18xx/event.c
+++ b/drivers/net/wireless/ti/wl18xx/event.c
@@ -265,6 +265,9 @@ int wl18xx_process_mailbox_events(struct wl1271 *wl)
wl->links[link_id].addr),
win_size);
}
+   if (vector & FW_LOGGER_INDICATION)
+   wlcore_event_fw_logger(wl);
+
 
 out_event:
 
diff --git a/drivers/net/wireless/ti/wl18xx/event.h 
b/drivers/net/wireless/ti/wl18xx/event.h
index 9495fad..9ce5d7c 100644
--- a/drivers/net/wireless/ti/wl18xx/event.h
+++ b/drivers/net/wireless/ti/wl18xx/event.h
@@ -42,6 +42,7 @@ enum {
SMART_CONFIG_SYNC_EVENT_ID   = BIT(22),
SMART_CONFIG_DECODE_EVENT_ID = BIT(23),
TIME_SYNC_EVENT_ID   = BIT(24),
+   FW_LOGGER_INDICATION= BIT(25),
 };
 
 enum wl18xx_radar_types {
diff --git a/drivers/net/wireless/ti/wl18xx/main.c 
b/drivers/net/wireless/ti/wl18xx/main.c
index 2c2f028..b686156 100644
--- a/drivers/net/wireless/ti/wl18xx/main.c
+++ b/drivers/net/wireless/ti/wl18xx/main.c
@@ -461,7 +461,7 @@ static struct wlcore_conf wl18xx_conf = {
},
.fwlog = {
.mode = WL12XX_FWLOG_CONTINUOUS,
-   .mem_blocks   = 2,
+   .mem_blocks   = 0,
.severity = 0,
.timestamp= WL12XX_FWLOG_TIMESTAMP_DISABLED,
.output   = WL12XX_FWLOG_OUTPUT_DBG_PINS,
@@ -584,7 +584,7 @@ static const struct wlcore_partition_set 
wl18xx_ptable[PART_TABLE_LEN] = {
.mem  = { .start = 0x00A0, .size  = 0x00012000 },
.reg  = { .start = 0x00807000, .size  = 0x5000 },
.mem2 = { .start = 0x0080, .size  = 0xB000 },
-   .mem3 = { .start = 0x, .size  = 0x },
+   .mem3 = { .start = 0x00401594, .size  = 0x1020 },
},
[PART_DOWN] = {
.mem  = { .start = 0x, .size  = 0x00014000 },
@@ -602,7 +602,7 @@ static const struct wlcore_partition_set 
wl18xx_ptable[PART_TABLE_LEN] = {
.mem  = { .start = 0x0080, .size  = 0x50FC },
.reg  = { .start = 0x00B00404, .size  = 0x1000 },
.mem2 = { .start = 0x00C0, .size  = 0x0400 },
-   .mem3 = { .start = 0x, .size  = 0x },
+   .mem3 = { .start = 0x00401594, .size  = 0x1020 },
},
[PART_PHY_INIT] = {
.mem  = { .start = WL18XX_PHY_INIT_MEM_ADDR,
@@ -1030,7 +1030,8 @@ static int wl18xx_boot(struct wl1271 *wl)
SMART_CONFIG_SYNC_EVENT_ID |
SMART_CONFIG_DECODE_EVENT_ID |
RX_BA_WIN_SIZE_CHANGE_EVENT_ID |
-   TIME_SYNC_EVENT_ID;
+   TIME_SYNC_EVENT_ID |
+   FW_LOGGER_INDICATION;
 
wl->ap_event_mask = MAX_TX_FAILURE_EVENT_ID;
 
diff --git a/drivers/net/wireless/ti/wlcore/cmd.h 
b/drivers/net/wireless/ti/wlcore/cmd.h
index 2fb4fae..deb8475 100644
--- a/drivers/net/wireless/ti/wlcore/cmd.h
+++ b/drivers/net/wireless/ti/wlcore/cmd.h
@@ -626,7 +626,6 @@ struct wl12xx_cmd_remove_peer {
  */
 enum wl12xx_fwlogger_log_mode {
WL12XX_FWLOG_CONTINUOUS,
-   WL12XX_FWLOG_ON_DEMAND
 };
 
 /* Include/exclude timestamps from the log messages */
diff --git a/drivers/net/wireless/ti/wlcore/debugfs.c 
b/drivers/net/wireless/ti/wlcore/debugfs.c
index c8b6477..be7ba78 100644
--- a/drivers/net/wireless/ti/wlcore/debugfs.c