All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next 0/7] net: wwan: iosm: Bug fixes
@ 2021-12-05  6:55 M Chetan Kumar
  2021-12-05  6:55 ` [PATCH net-next 1/7] net: wwan: iosm: stop sending unnecessary doorbell M Chetan Kumar
                   ` (6 more replies)
  0 siblings, 7 replies; 11+ messages in thread
From: M Chetan Kumar @ 2021-12-05  6:55 UTC (permalink / raw)
  To: netdev
  Cc: kuba, davem, johannes, ryazanov.s.a, loic.poulain,
	krishna.c.sudi, m.chetan.kumar, m.chetan.kumar, linuxwwan

This patch series brings in IOSM driver bug fixes. Patch details
are explained below.

PATCH1:
 * stop sending unnecessary doorbell in IP tx flow.
PATCH2:
 * set tx queue len.
PATCH3:
 * Restore the IP channel configuration after fw flash.
PATCH4:
 * Release data channel if there is no active IP session.
PATCH5:
 * Removes dead code.
PATCH6:
 * Removed the unnecessary check around control port TX transfer.
PATCH7:
 * Correct open parenthesis alignment to fix checkpatch warning.

M Chetan Kumar (7):
  net: wwan: iosm: stop sending unnecessary doorbell
  net: wwan: iosm: set tx queue len
  net: wwan: iosm: wwan0 net interface nonfunctional after fw flash
  net: wwan: iosm: release data channel in case no active IP session
  net: wwan: iosm: removed unused function decl
  net: wwan: iosm: AT port is not working while MBIM TX is ongoing
  net: wwan: iosm: correct open parenthesis alignment

 drivers/net/wwan/iosm/iosm_ipc_imem.c      | 27 ++++++++++++++--------
 drivers/net/wwan/iosm/iosm_ipc_imem.h      |  4 +---
 drivers/net/wwan/iosm/iosm_ipc_imem_ops.c  |  7 +-----
 drivers/net/wwan/iosm/iosm_ipc_mmio.c      |  2 +-
 drivers/net/wwan/iosm/iosm_ipc_mux.c       | 27 ++++++++++++++--------
 drivers/net/wwan/iosm/iosm_ipc_mux.h       |  1 -
 drivers/net/wwan/iosm/iosm_ipc_mux_codec.c | 18 +++++++--------
 drivers/net/wwan/iosm/iosm_ipc_wwan.c      |  3 ++-
 drivers/net/wwan/iosm/iosm_ipc_wwan.h      | 10 --------
 9 files changed, 48 insertions(+), 51 deletions(-)

--
2.25.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH net-next 1/7] net: wwan: iosm: stop sending unnecessary doorbell
  2021-12-05  6:55 [PATCH net-next 0/7] net: wwan: iosm: Bug fixes M Chetan Kumar
@ 2021-12-05  6:55 ` M Chetan Kumar
  2021-12-05  6:55 ` [PATCH net-next 2/7] net: wwan: iosm: set tx queue len M Chetan Kumar
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 11+ messages in thread
From: M Chetan Kumar @ 2021-12-05  6:55 UTC (permalink / raw)
  To: netdev
  Cc: kuba, davem, johannes, ryazanov.s.a, loic.poulain,
	krishna.c.sudi, m.chetan.kumar, m.chetan.kumar, linuxwwan

In TX packet accumulation flow transport layer is
giving a doorbell to device even though there is
no pending control TX transfer that needs immediate
attention.

Introduced a new hpda_ctrl_pending variable to keep
track of pending control TX transfer. If there is a
pending control TX transfer which needs an immediate
attention only then give a doorbell to device.

Signed-off-by: M Chetan Kumar <m.chetan.kumar@linux.intel.com>
---
 drivers/net/wwan/iosm/iosm_ipc_imem.c | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/drivers/net/wwan/iosm/iosm_ipc_imem.c b/drivers/net/wwan/iosm/iosm_ipc_imem.c
index 1be07114c85d..644a871585ea 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_imem.c
+++ b/drivers/net/wwan/iosm/iosm_ipc_imem.c
@@ -182,9 +182,9 @@ void ipc_imem_hrtimer_stop(struct hrtimer *hr_timer)
 bool ipc_imem_ul_write_td(struct iosm_imem *ipc_imem)
 {
 	struct ipc_mem_channel *channel;
+	bool hpda_ctrl_pending = false;
 	struct sk_buff_head *ul_list;
 	bool hpda_pending = false;
-	bool forced_hpdu = false;
 	struct ipc_pipe *pipe;
 	int i;
 
@@ -201,15 +201,19 @@ bool ipc_imem_ul_write_td(struct iosm_imem *ipc_imem)
 		ul_list = &channel->ul_list;
 
 		/* Fill the transfer descriptor with the uplink buffer info. */
-		hpda_pending |= ipc_protocol_ul_td_send(ipc_imem->ipc_protocol,
+		if (!ipc_imem_check_wwan_ips(channel)) {
+			hpda_ctrl_pending |=
+				ipc_protocol_ul_td_send(ipc_imem->ipc_protocol,
 							pipe, ul_list);
-
-		/* forced HP update needed for non data channels */
-		if (hpda_pending && !ipc_imem_check_wwan_ips(channel))
-			forced_hpdu = true;
+		} else {
+			hpda_pending |=
+				ipc_protocol_ul_td_send(ipc_imem->ipc_protocol,
+							pipe, ul_list);
+		}
 	}
 
-	if (forced_hpdu) {
+	/* forced HP update needed for non data channels */
+	if (hpda_ctrl_pending) {
 		hpda_pending = false;
 		ipc_protocol_doorbell_trigger(ipc_imem->ipc_protocol,
 					      IPC_HP_UL_WRITE_TD);
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH net-next 2/7] net: wwan: iosm: set tx queue len
  2021-12-05  6:55 [PATCH net-next 0/7] net: wwan: iosm: Bug fixes M Chetan Kumar
  2021-12-05  6:55 ` [PATCH net-next 1/7] net: wwan: iosm: stop sending unnecessary doorbell M Chetan Kumar
@ 2021-12-05  6:55 ` M Chetan Kumar
  2021-12-05 11:16   ` Sergey Ryazanov
  2021-12-05  6:55 ` [PATCH net-next 3/7] net: wwan: iosm: wwan0 net interface nonfunctional after fw flash M Chetan Kumar
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 11+ messages in thread
From: M Chetan Kumar @ 2021-12-05  6:55 UTC (permalink / raw)
  To: netdev
  Cc: kuba, davem, johannes, ryazanov.s.a, loic.poulain,
	krishna.c.sudi, m.chetan.kumar, m.chetan.kumar, linuxwwan

Set wwan net dev tx queue len to 1000.

Signed-off-by: M Chetan Kumar <m.chetan.kumar@linux.intel.com>
---
 drivers/net/wwan/iosm/iosm_ipc_wwan.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wwan/iosm/iosm_ipc_wwan.c b/drivers/net/wwan/iosm/iosm_ipc_wwan.c
index b571d9cedba4..e3fb926d2248 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_wwan.c
+++ b/drivers/net/wwan/iosm/iosm_ipc_wwan.c
@@ -18,6 +18,7 @@
 #define IOSM_IP_TYPE_IPV6 0x60
 
 #define IOSM_IF_ID_PAYLOAD 2
+#define IOSM_QDISC_QUEUE_LEN 1000
 
 /**
  * struct iosm_netdev_priv - netdev WWAN driver specific private data
@@ -159,7 +160,7 @@ static void ipc_wwan_setup(struct net_device *iosm_dev)
 {
 	iosm_dev->header_ops = NULL;
 	iosm_dev->hard_header_len = 0;
-	iosm_dev->priv_flags |= IFF_NO_QUEUE;
+	iosm_dev->tx_queue_len = IOSM_QDISC_QUEUE_LEN;
 
 	iosm_dev->type = ARPHRD_NONE;
 	iosm_dev->mtu = ETH_DATA_LEN;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH net-next 3/7] net: wwan: iosm: wwan0 net interface nonfunctional after fw flash
  2021-12-05  6:55 [PATCH net-next 0/7] net: wwan: iosm: Bug fixes M Chetan Kumar
  2021-12-05  6:55 ` [PATCH net-next 1/7] net: wwan: iosm: stop sending unnecessary doorbell M Chetan Kumar
  2021-12-05  6:55 ` [PATCH net-next 2/7] net: wwan: iosm: set tx queue len M Chetan Kumar
@ 2021-12-05  6:55 ` M Chetan Kumar
  2021-12-05  6:55 ` [PATCH net-next 4/7] net: wwan: iosm: release data channel in case no active IP session M Chetan Kumar
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 11+ messages in thread
From: M Chetan Kumar @ 2021-12-05  6:55 UTC (permalink / raw)
  To: netdev
  Cc: kuba, davem, johannes, ryazanov.s.a, loic.poulain,
	krishna.c.sudi, m.chetan.kumar, m.chetan.kumar, linuxwwan

Devlink initialization flow was overwriting the IP traffic
channel configuration. This was causing wwan0 network interface
to be unusable after fw flash.

When device boots to fully functional mode restore the IP channel
configuration.

Signed-off-by: M Chetan Kumar <m.chetan.kumar@linux.intel.com>
---
 drivers/net/wwan/iosm/iosm_ipc_imem.c     | 7 ++++++-
 drivers/net/wwan/iosm/iosm_ipc_imem.h     | 1 +
 drivers/net/wwan/iosm/iosm_ipc_imem_ops.c | 1 +
 3 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wwan/iosm/iosm_ipc_imem.c b/drivers/net/wwan/iosm/iosm_ipc_imem.c
index 644a871585ea..ac36f9846731 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_imem.c
+++ b/drivers/net/wwan/iosm/iosm_ipc_imem.c
@@ -537,6 +537,9 @@ static void ipc_imem_run_state_worker(struct work_struct *instance)
 		return;
 	}
 
+	if (test_and_clear_bit(IOSM_DEVLINK_INIT, &ipc_imem->flag))
+		ipc_devlink_deinit(ipc_imem->ipc_devlink);
+
 	if (!ipc_imem_setup_cp_mux_cap_init(ipc_imem, &mux_cfg))
 		ipc_imem->mux = ipc_mux_init(&mux_cfg, ipc_imem);
 
@@ -1184,7 +1187,7 @@ void ipc_imem_cleanup(struct iosm_imem *ipc_imem)
 		ipc_port_deinit(ipc_imem->ipc_port);
 	}
 
-	if (ipc_imem->ipc_devlink)
+	if (test_and_clear_bit(IOSM_DEVLINK_INIT, &ipc_imem->flag))
 		ipc_devlink_deinit(ipc_imem->ipc_devlink);
 
 	ipc_imem_device_ipc_uninit(ipc_imem);
@@ -1348,6 +1351,8 @@ struct iosm_imem *ipc_imem_init(struct iosm_pcie *pcie, unsigned int device_id,
 
 		if (ipc_flash_link_establish(ipc_imem))
 			goto devlink_channel_fail;
+
+		set_bit(IOSM_DEVLINK_INIT, &ipc_imem->flag);
 	}
 	return ipc_imem;
 devlink_channel_fail:
diff --git a/drivers/net/wwan/iosm/iosm_ipc_imem.h b/drivers/net/wwan/iosm/iosm_ipc_imem.h
index cec38009c44a..d220f2611621 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_imem.h
+++ b/drivers/net/wwan/iosm/iosm_ipc_imem.h
@@ -101,6 +101,7 @@ struct ipc_chnl_cfg;
 #define IOSM_CHIP_INFO_SIZE_MAX 100
 
 #define FULLY_FUNCTIONAL 0
+#define IOSM_DEVLINK_INIT 1
 
 /* List of the supported UL/DL pipes. */
 enum ipc_mem_pipes {
diff --git a/drivers/net/wwan/iosm/iosm_ipc_imem_ops.c b/drivers/net/wwan/iosm/iosm_ipc_imem_ops.c
index 43f1796a8984..0757fd915437 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_imem_ops.c
+++ b/drivers/net/wwan/iosm/iosm_ipc_imem_ops.c
@@ -471,6 +471,7 @@ void ipc_imem_sys_devlink_close(struct iosm_devlink *ipc_devlink)
 	/* Release the pipe resources */
 	ipc_imem_pipe_cleanup(ipc_imem, &channel->ul_pipe);
 	ipc_imem_pipe_cleanup(ipc_imem, &channel->dl_pipe);
+	ipc_imem->nr_of_channels--;
 }
 
 void ipc_imem_sys_devlink_notify_rx(struct iosm_devlink *ipc_devlink,
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH net-next 4/7] net: wwan: iosm: release data channel in case no active IP session
  2021-12-05  6:55 [PATCH net-next 0/7] net: wwan: iosm: Bug fixes M Chetan Kumar
                   ` (2 preceding siblings ...)
  2021-12-05  6:55 ` [PATCH net-next 3/7] net: wwan: iosm: wwan0 net interface nonfunctional after fw flash M Chetan Kumar
@ 2021-12-05  6:55 ` M Chetan Kumar
  2021-12-05  6:55 ` [PATCH net-next 5/7] net: wwan: iosm: removed unused function decl M Chetan Kumar
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 11+ messages in thread
From: M Chetan Kumar @ 2021-12-05  6:55 UTC (permalink / raw)
  To: netdev
  Cc: kuba, davem, johannes, ryazanov.s.a, loic.poulain,
	krishna.c.sudi, m.chetan.kumar, m.chetan.kumar, linuxwwan

If there is no active IP session (interface up & running) then
release the data channel.

Use nr_sessions variable to track current active IP sessions.
If the count drops to 0, then send pipe close ctrl message to
release the data channel.

Signed-off-by: M Chetan Kumar <m.chetan.kumar@linux.intel.com>
---
 drivers/net/wwan/iosm/iosm_ipc_imem.c      |  1 -
 drivers/net/wwan/iosm/iosm_ipc_mux.c       | 27 ++++++++++++++--------
 drivers/net/wwan/iosm/iosm_ipc_mux.h       |  1 -
 drivers/net/wwan/iosm/iosm_ipc_mux_codec.c | 18 +++++++--------
 4 files changed, 26 insertions(+), 21 deletions(-)

diff --git a/drivers/net/wwan/iosm/iosm_ipc_imem.c b/drivers/net/wwan/iosm/iosm_ipc_imem.c
index ac36f9846731..96dcd2445bce 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_imem.c
+++ b/drivers/net/wwan/iosm/iosm_ipc_imem.c
@@ -133,7 +133,6 @@ static int ipc_imem_setup_cp_mux_cap_init(struct iosm_imem *ipc_imem,
 	 * for channel alloc function.
 	 */
 	cfg->instance_id = IPC_MEM_MUX_IP_CH_IF_ID;
-	cfg->nr_sessions = IPC_MEM_MUX_IP_SESSION_ENTRIES;
 
 	return 0;
 }
diff --git a/drivers/net/wwan/iosm/iosm_ipc_mux.c b/drivers/net/wwan/iosm/iosm_ipc_mux.c
index c1c77ce699da..4df41e47e77e 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_mux.c
+++ b/drivers/net/wwan/iosm/iosm_ipc_mux.c
@@ -97,7 +97,7 @@ static bool ipc_mux_session_open(struct iosm_mux *ipc_mux,
 
 	/* Search for a free session interface id. */
 	if_id = le32_to_cpu(session_open->if_id);
-	if (if_id < 0 || if_id >= ipc_mux->nr_sessions) {
+	if (if_id < 0 || if_id >= IPC_MEM_MUX_IP_SESSION_ENTRIES) {
 		dev_err(ipc_mux->dev, "invalid interface id=%d", if_id);
 		return false;
 	}
@@ -129,6 +129,7 @@ static bool ipc_mux_session_open(struct iosm_mux *ipc_mux,
 
 	/* Save and return the assigned if id. */
 	session_open->if_id = cpu_to_le32(if_id);
+	ipc_mux->nr_sessions++;
 
 	return true;
 }
@@ -151,7 +152,7 @@ static void ipc_mux_session_close(struct iosm_mux *ipc_mux,
 	/* Copy the session interface id. */
 	if_id = le32_to_cpu(msg->if_id);
 
-	if (if_id < 0 || if_id >= ipc_mux->nr_sessions) {
+	if (if_id < 0 || if_id >= IPC_MEM_MUX_IP_SESSION_ENTRIES) {
 		dev_err(ipc_mux->dev, "invalid session id %d", if_id);
 		return;
 	}
@@ -170,6 +171,7 @@ static void ipc_mux_session_close(struct iosm_mux *ipc_mux,
 	ipc_mux->session[if_id].flow_ctl_mask = 0;
 
 	ipc_mux_session_reset(ipc_mux, if_id);
+	ipc_mux->nr_sessions--;
 }
 
 static void ipc_mux_channel_close(struct iosm_mux *ipc_mux,
@@ -178,7 +180,7 @@ static void ipc_mux_channel_close(struct iosm_mux *ipc_mux,
 	int i;
 
 	/* Free pending session UL packet. */
-	for (i = 0; i < ipc_mux->nr_sessions; i++)
+	for (i = 0; i < IPC_MEM_MUX_IP_SESSION_ENTRIES; i++)
 		if (ipc_mux->session[i].wwan)
 			ipc_mux_session_reset(ipc_mux, i);
 
@@ -244,6 +246,10 @@ static int ipc_mux_schedule(struct iosm_mux *ipc_mux, union mux_msg *msg)
 			/* Release an IP session. */
 			ipc_mux->event = MUX_E_MUX_SESSION_CLOSE;
 			ipc_mux_session_close(ipc_mux, &msg->session_close);
+			if (!ipc_mux->nr_sessions) {
+				ipc_mux->event = MUX_E_MUX_CHANNEL_CLOSE;
+				ipc_mux_channel_close(ipc_mux, &msg->channel_close);
+			}
 			ret = ipc_mux->channel_id;
 			goto out;
 
@@ -281,7 +287,6 @@ struct iosm_mux *ipc_mux_init(struct ipc_mux_config *mux_cfg,
 
 	ipc_mux->protocol = mux_cfg->protocol;
 	ipc_mux->ul_flow = mux_cfg->ul_flow;
-	ipc_mux->nr_sessions = mux_cfg->nr_sessions;
 	ipc_mux->instance_id = mux_cfg->instance_id;
 	ipc_mux->wwan_q_offset = 0;
 
@@ -340,7 +345,7 @@ static void ipc_mux_restart_tx_for_all_sessions(struct iosm_mux *ipc_mux)
 	struct mux_session *session;
 	int idx;
 
-	for (idx = 0; idx < ipc_mux->nr_sessions; idx++) {
+	for (idx = 0; idx < IPC_MEM_MUX_IP_SESSION_ENTRIES; idx++) {
 		session = &ipc_mux->session[idx];
 
 		if (!session->wwan)
@@ -365,7 +370,7 @@ static void ipc_mux_stop_netif_for_all_sessions(struct iosm_mux *ipc_mux)
 	struct mux_session *session;
 	int idx;
 
-	for (idx = 0; idx < ipc_mux->nr_sessions; idx++) {
+	for (idx = 0; idx < IPC_MEM_MUX_IP_SESSION_ENTRIES; idx++) {
 		session = &ipc_mux->session[idx];
 
 		if (!session->wwan)
@@ -387,7 +392,7 @@ void ipc_mux_check_n_restart_tx(struct iosm_mux *ipc_mux)
 
 int ipc_mux_get_max_sessions(struct iosm_mux *ipc_mux)
 {
-	return ipc_mux ? ipc_mux->nr_sessions : -EFAULT;
+	return ipc_mux ? IPC_MEM_MUX_IP_SESSION_ENTRIES : -EFAULT;
 }
 
 enum ipc_mux_protocol ipc_mux_get_active_protocol(struct iosm_mux *ipc_mux)
@@ -435,9 +440,11 @@ void ipc_mux_deinit(struct iosm_mux *ipc_mux)
 		return;
 	ipc_mux_stop_netif_for_all_sessions(ipc_mux);
 
-	channel_close = &mux_msg.channel_close;
-	channel_close->event = MUX_E_MUX_CHANNEL_CLOSE;
-	ipc_mux_schedule(ipc_mux, &mux_msg);
+	if (ipc_mux->state == MUX_S_ACTIVE) {
+		channel_close = &mux_msg.channel_close;
+		channel_close->event = MUX_E_MUX_CHANNEL_CLOSE;
+		ipc_mux_schedule(ipc_mux, &mux_msg);
+	}
 
 	/* Empty the ADB free list. */
 	free_list = &ipc_mux->ul_adb.free_list;
diff --git a/drivers/net/wwan/iosm/iosm_ipc_mux.h b/drivers/net/wwan/iosm/iosm_ipc_mux.h
index ddd2cd0bd911..88debaa1ed31 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_mux.h
+++ b/drivers/net/wwan/iosm/iosm_ipc_mux.h
@@ -278,7 +278,6 @@ struct iosm_mux {
 struct ipc_mux_config {
 	enum ipc_mux_protocol protocol;
 	enum ipc_mux_ul_flow ul_flow;
-	int nr_sessions;
 	int instance_id;
 };
 
diff --git a/drivers/net/wwan/iosm/iosm_ipc_mux_codec.c b/drivers/net/wwan/iosm/iosm_ipc_mux_codec.c
index bdb2d32cdb6d..40fb54a0513e 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_mux_codec.c
+++ b/drivers/net/wwan/iosm/iosm_ipc_mux_codec.c
@@ -175,7 +175,7 @@ static int ipc_mux_dl_dlcmds_decode_process(struct iosm_mux *ipc_mux,
 	switch (le32_to_cpu(cmdh->command_type)) {
 	case MUX_LITE_CMD_FLOW_CTL:
 
-		if (cmdh->if_id >= ipc_mux->nr_sessions) {
+		if (cmdh->if_id >= IPC_MEM_MUX_IP_SESSION_ENTRIES) {
 			dev_err(ipc_mux->dev, "if_id [%d] not valid",
 				cmdh->if_id);
 			return -EINVAL; /* No session interface id. */
@@ -307,13 +307,13 @@ static void ipc_mux_dl_fcth_decode(struct iosm_mux *ipc_mux,
 	}
 
 	if_id = fct->if_id;
-	if (if_id >= ipc_mux->nr_sessions) {
+	if (if_id >= IPC_MEM_MUX_IP_SESSION_ENTRIES) {
 		dev_err(ipc_mux->dev, "not supported if_id: %d", if_id);
 		return;
 	}
 
 	/* Is the session active ? */
-	if_id = array_index_nospec(if_id, ipc_mux->nr_sessions);
+	if_id = array_index_nospec(if_id, IPC_MEM_MUX_IP_SESSION_ENTRIES);
 	wwan = ipc_mux->session[if_id].wwan;
 	if (!wwan) {
 		dev_err(ipc_mux->dev, "session Net ID is NULL");
@@ -355,13 +355,13 @@ static void ipc_mux_dl_adgh_decode(struct iosm_mux *ipc_mux,
 	}
 
 	if_id = adgh->if_id;
-	if (if_id >= ipc_mux->nr_sessions) {
+	if (if_id >= IPC_MEM_MUX_IP_SESSION_ENTRIES) {
 		dev_err(ipc_mux->dev, "invalid if_id while decoding %d", if_id);
 		return;
 	}
 
 	/* Is the session active ? */
-	if_id = array_index_nospec(if_id, ipc_mux->nr_sessions);
+	if_id = array_index_nospec(if_id, IPC_MEM_MUX_IP_SESSION_ENTRIES);
 	wwan = ipc_mux->session[if_id].wwan;
 	if (!wwan) {
 		dev_err(ipc_mux->dev, "session Net ID is NULL");
@@ -538,7 +538,7 @@ static void ipc_mux_stop_tx_for_all_sessions(struct iosm_mux *ipc_mux)
 	struct mux_session *session;
 	int idx;
 
-	for (idx = 0; idx < ipc_mux->nr_sessions; idx++) {
+	for (idx = 0; idx < IPC_MEM_MUX_IP_SESSION_ENTRIES; idx++) {
 		session = &ipc_mux->session[idx];
 
 		if (!session->wwan)
@@ -563,7 +563,7 @@ static bool ipc_mux_lite_send_qlt(struct iosm_mux *ipc_mux)
 	qlt_size = offsetof(struct ipc_mem_lite_gen_tbl, vfl) +
 		   MUX_QUEUE_LEVEL * sizeof(struct mux_lite_vfl);
 
-	for (i = 0; i < ipc_mux->nr_sessions; i++) {
+	for (i = 0; i < IPC_MEM_MUX_IP_SESSION_ENTRIES; i++) {
 		session = &ipc_mux->session[i];
 
 		if (!session->wwan || session->flow_ctl_mask)
@@ -777,13 +777,13 @@ bool ipc_mux_ul_data_encode(struct iosm_mux *ipc_mux)
 
 	ipc_mux->adb_prep_ongoing = true;
 
-	for (i = 0; i < ipc_mux->nr_sessions; i++) {
+	for (i = 0; i < IPC_MEM_MUX_IP_SESSION_ENTRIES; i++) {
 		session_id = ipc_mux->rr_next_session;
 		session = &ipc_mux->session[session_id];
 
 		/* Go to next handle rr_next_session overflow */
 		ipc_mux->rr_next_session++;
-		if (ipc_mux->rr_next_session >= ipc_mux->nr_sessions)
+		if (ipc_mux->rr_next_session >= IPC_MEM_MUX_IP_SESSION_ENTRIES)
 			ipc_mux->rr_next_session = 0;
 
 		if (!session->wwan || session->flow_ctl_mask ||
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH net-next 5/7] net: wwan: iosm: removed unused function decl
  2021-12-05  6:55 [PATCH net-next 0/7] net: wwan: iosm: Bug fixes M Chetan Kumar
                   ` (3 preceding siblings ...)
  2021-12-05  6:55 ` [PATCH net-next 4/7] net: wwan: iosm: release data channel in case no active IP session M Chetan Kumar
@ 2021-12-05  6:55 ` M Chetan Kumar
  2021-12-05  6:55 ` [PATCH net-next 6/7] net: wwan: iosm: AT port is not working while MBIM TX is ongoing M Chetan Kumar
  2021-12-05  6:55 ` [PATCH net-next 7/7] net: wwan: iosm: correct open parenthesis alignment M Chetan Kumar
  6 siblings, 0 replies; 11+ messages in thread
From: M Chetan Kumar @ 2021-12-05  6:55 UTC (permalink / raw)
  To: netdev
  Cc: kuba, davem, johannes, ryazanov.s.a, loic.poulain,
	krishna.c.sudi, m.chetan.kumar, m.chetan.kumar, linuxwwan

ipc_wwan_tx_flowctrl() is declared in iosm_ipc_wwan.h but is
not defined.

Removed the dead code.

Signed-off-by: M Chetan Kumar <m.chetan.kumar@linux.intel.com>
---
 drivers/net/wwan/iosm/iosm_ipc_wwan.h | 10 ----------
 1 file changed, 10 deletions(-)

diff --git a/drivers/net/wwan/iosm/iosm_ipc_wwan.h b/drivers/net/wwan/iosm/iosm_ipc_wwan.h
index 4925f22dff0a..a23e926398ff 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_wwan.h
+++ b/drivers/net/wwan/iosm/iosm_ipc_wwan.h
@@ -42,14 +42,4 @@ int ipc_wwan_receive(struct iosm_wwan *ipc_wwan, struct sk_buff *skb_arg,
  *
  */
 void ipc_wwan_tx_flowctrl(struct iosm_wwan *ipc_wwan, int id, bool on);
-
-/**
- * ipc_wwan_is_tx_stopped - Checks if Tx stopped for a Interface id.
- * @ipc_wwan:	Pointer to wwan instance
- * @id:		Ipc mux channel session id
- *
- * Return: true if stopped, false otherwise
- */
-bool ipc_wwan_is_tx_stopped(struct iosm_wwan *ipc_wwan, int id);
-
 #endif
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH net-next 6/7] net: wwan: iosm: AT port is not working while MBIM TX is ongoing
  2021-12-05  6:55 [PATCH net-next 0/7] net: wwan: iosm: Bug fixes M Chetan Kumar
                   ` (4 preceding siblings ...)
  2021-12-05  6:55 ` [PATCH net-next 5/7] net: wwan: iosm: removed unused function decl M Chetan Kumar
@ 2021-12-05  6:55 ` M Chetan Kumar
  2021-12-05  6:55 ` [PATCH net-next 7/7] net: wwan: iosm: correct open parenthesis alignment M Chetan Kumar
  6 siblings, 0 replies; 11+ messages in thread
From: M Chetan Kumar @ 2021-12-05  6:55 UTC (permalink / raw)
  To: netdev
  Cc: kuba, davem, johannes, ryazanov.s.a, loic.poulain,
	krishna.c.sudi, m.chetan.kumar, m.chetan.kumar, linuxwwan

ev_cdev_write_pending flag is preventing a TX message post for
AT port while MBIM transfer is ongoing.

Removed the unnecessary check around control port TX transfer.

Signed-off-by: M Chetan Kumar <m.chetan.kumar@linux.intel.com>
---
 drivers/net/wwan/iosm/iosm_ipc_imem.c     | 1 -
 drivers/net/wwan/iosm/iosm_ipc_imem.h     | 3 ---
 drivers/net/wwan/iosm/iosm_ipc_imem_ops.c | 6 ------
 3 files changed, 10 deletions(-)

diff --git a/drivers/net/wwan/iosm/iosm_ipc_imem.c b/drivers/net/wwan/iosm/iosm_ipc_imem.c
index 96dcd2445bce..b947f548983a 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_imem.c
+++ b/drivers/net/wwan/iosm/iosm_ipc_imem.c
@@ -1282,7 +1282,6 @@ struct iosm_imem *ipc_imem_init(struct iosm_pcie *pcie, unsigned int device_id,
 
 	ipc_imem->pci_device_id = device_id;
 
-	ipc_imem->ev_cdev_write_pending = false;
 	ipc_imem->cp_version = 0;
 	ipc_imem->device_sleep = IPC_HOST_SLEEP_ENTER_SLEEP;
 
diff --git a/drivers/net/wwan/iosm/iosm_ipc_imem.h b/drivers/net/wwan/iosm/iosm_ipc_imem.h
index d220f2611621..a8ec896f217b 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_imem.h
+++ b/drivers/net/wwan/iosm/iosm_ipc_imem.h
@@ -337,8 +337,6 @@ enum ipc_phase {
  *				process the irq actions.
  * @flag:			Flag to monitor the state of driver
  * @td_update_timer_suspended:	if true then td update timer suspend
- * @ev_cdev_write_pending:	0 means inform the IPC tasklet to pass
- *				the accumulated uplink buffers to CP.
  * @ev_mux_net_transmit_pending:0 means inform the IPC tasklet to pass
  * @reset_det_n:		Reset detect flag
  * @pcie_wake_n:		Pcie wake flag
@@ -377,7 +375,6 @@ struct iosm_imem {
 	u8 ev_irq_pending[IPC_IRQ_VECTORS];
 	unsigned long flag;
 	u8 td_update_timer_suspended:1,
-	   ev_cdev_write_pending:1,
 	   ev_mux_net_transmit_pending:1,
 	   reset_det_n:1,
 	   pcie_wake_n:1;
diff --git a/drivers/net/wwan/iosm/iosm_ipc_imem_ops.c b/drivers/net/wwan/iosm/iosm_ipc_imem_ops.c
index 0757fd915437..28dfd4468760 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_imem_ops.c
+++ b/drivers/net/wwan/iosm/iosm_ipc_imem_ops.c
@@ -42,7 +42,6 @@ void ipc_imem_sys_wwan_close(struct iosm_imem *ipc_imem, int if_id,
 static int ipc_imem_tq_cdev_write(struct iosm_imem *ipc_imem, int arg,
 				  void *msg, size_t size)
 {
-	ipc_imem->ev_cdev_write_pending = false;
 	ipc_imem_ul_send(ipc_imem);
 
 	return 0;
@@ -51,11 +50,6 @@ static int ipc_imem_tq_cdev_write(struct iosm_imem *ipc_imem, int arg,
 /* Through tasklet to do sio write. */
 static int ipc_imem_call_cdev_write(struct iosm_imem *ipc_imem)
 {
-	if (ipc_imem->ev_cdev_write_pending)
-		return -1;
-
-	ipc_imem->ev_cdev_write_pending = true;
-
 	return ipc_task_queue_send_task(ipc_imem, ipc_imem_tq_cdev_write, 0,
 					NULL, 0, false);
 }
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH net-next 7/7] net: wwan: iosm: correct open parenthesis alignment
  2021-12-05  6:55 [PATCH net-next 0/7] net: wwan: iosm: Bug fixes M Chetan Kumar
                   ` (5 preceding siblings ...)
  2021-12-05  6:55 ` [PATCH net-next 6/7] net: wwan: iosm: AT port is not working while MBIM TX is ongoing M Chetan Kumar
@ 2021-12-05  6:55 ` M Chetan Kumar
  6 siblings, 0 replies; 11+ messages in thread
From: M Chetan Kumar @ 2021-12-05  6:55 UTC (permalink / raw)
  To: netdev
  Cc: kuba, davem, johannes, ryazanov.s.a, loic.poulain,
	krishna.c.sudi, m.chetan.kumar, m.chetan.kumar, linuxwwan

Fix checkpatch warning in iosm_ipc_mmio.c
- Alignment should match open parenthesis

Signed-off-by: M Chetan Kumar <m.chetan.kumar@linux.intel.com>
---
 drivers/net/wwan/iosm/iosm_ipc_mmio.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/wwan/iosm/iosm_ipc_mmio.c b/drivers/net/wwan/iosm/iosm_ipc_mmio.c
index 09f94c123531..f09e5e77a2a5 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_mmio.c
+++ b/drivers/net/wwan/iosm/iosm_ipc_mmio.c
@@ -192,7 +192,7 @@ void ipc_mmio_config(struct iosm_mmio *ipc_mmio)
 	iowrite64(0, ipc_mmio->base + ipc_mmio->offset.ap_win_end);
 
 	iowrite64(ipc_mmio->context_info_addr,
-			ipc_mmio->base + ipc_mmio->offset.context_info);
+		  ipc_mmio->base + ipc_mmio->offset.context_info);
 }
 
 void ipc_mmio_set_psi_addr_and_size(struct iosm_mmio *ipc_mmio, dma_addr_t addr,
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH net-next 2/7] net: wwan: iosm: set tx queue len
  2021-12-05  6:55 ` [PATCH net-next 2/7] net: wwan: iosm: set tx queue len M Chetan Kumar
@ 2021-12-05 11:16   ` Sergey Ryazanov
  2021-12-05 13:52     ` Kumar, M Chetan
  0 siblings, 1 reply; 11+ messages in thread
From: Sergey Ryazanov @ 2021-12-05 11:16 UTC (permalink / raw)
  To: M Chetan Kumar
  Cc: netdev, Jakub Kicinski, David Miller, Johannes Berg,
	Loic Poulain, krishna.c.sudi, M Chetan Kumar, Intel Corporation

Hello M Chetan Kumar,

On Sun, Dec 5, 2021 at 9:47 AM M Chetan Kumar
<m.chetan.kumar@linux.intel.com> wrote:
> Set wwan net dev tx queue len to 1000.
>
> Signed-off-by: M Chetan Kumar <m.chetan.kumar@linux.intel.com>
> ---
>  drivers/net/wwan/iosm/iosm_ipc_wwan.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/wwan/iosm/iosm_ipc_wwan.c b/drivers/net/wwan/iosm/iosm_ipc_wwan.c
> index b571d9cedba4..e3fb926d2248 100644
> --- a/drivers/net/wwan/iosm/iosm_ipc_wwan.c
> +++ b/drivers/net/wwan/iosm/iosm_ipc_wwan.c
> @@ -18,6 +18,7 @@
>  #define IOSM_IP_TYPE_IPV6 0x60
>
>  #define IOSM_IF_ID_PAYLOAD 2
> +#define IOSM_QDISC_QUEUE_LEN 1000

Is this 1000 something special for the IOSM driver? If you need just
an approximate value for the queue length, then consider using the
common DEFAULT_TX_QUEUE_LEN macro, please.

>  /**
>   * struct iosm_netdev_priv - netdev WWAN driver specific private data
> @@ -159,7 +160,7 @@ static void ipc_wwan_setup(struct net_device *iosm_dev)
>  {
>         iosm_dev->header_ops = NULL;
>         iosm_dev->hard_header_len = 0;
> -       iosm_dev->priv_flags |= IFF_NO_QUEUE;
> +       iosm_dev->tx_queue_len = IOSM_QDISC_QUEUE_LEN;
>
>         iosm_dev->type = ARPHRD_NONE;
>         iosm_dev->mtu = ETH_DATA_LEN;

-- 
Sergey

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH net-next 2/7] net: wwan: iosm: set tx queue len
  2021-12-05 11:16   ` Sergey Ryazanov
@ 2021-12-05 13:52     ` Kumar, M Chetan
  2021-12-05 13:59       ` Sergey Ryazanov
  0 siblings, 1 reply; 11+ messages in thread
From: Kumar, M Chetan @ 2021-12-05 13:52 UTC (permalink / raw)
  To: Sergey Ryazanov
  Cc: netdev, Jakub Kicinski, David Miller, Johannes Berg,
	Loic Poulain, krishna.c.sudi, M Chetan Kumar, Intel Corporation

Hi Sergey,

On 12/5/2021 4:46 PM, Sergey Ryazanov wrote:
> Hello M Chetan Kumar,
> 
> On Sun, Dec 5, 2021 at 9:47 AM M Chetan Kumar
> <m.chetan.kumar@linux.intel.com> wrote:
>> Set wwan net dev tx queue len to 1000.
>>
>> Signed-off-by: M Chetan Kumar <m.chetan.kumar@linux.intel.com>
>> ---
>>   drivers/net/wwan/iosm/iosm_ipc_wwan.c | 3 ++-
>>   1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/net/wwan/iosm/iosm_ipc_wwan.c b/drivers/net/wwan/iosm/iosm_ipc_wwan.c
>> index b571d9cedba4..e3fb926d2248 100644
>> --- a/drivers/net/wwan/iosm/iosm_ipc_wwan.c
>> +++ b/drivers/net/wwan/iosm/iosm_ipc_wwan.c
>> @@ -18,6 +18,7 @@
>>   #define IOSM_IP_TYPE_IPV6 0x60
>>
>>   #define IOSM_IF_ID_PAYLOAD 2
>> +#define IOSM_QDISC_QUEUE_LEN 1000
> 
> Is this 1000 something special for the IOSM driver? If you need just
> an approximate value for the queue length, then consider using the
> common DEFAULT_TX_QUEUE_LEN macro, please.

We had set an approximate value for the queue length.
Sure, will use the common queue length macro (DEFAULT_TX_QUEUE_LEN) 
instead of defining the new macro.

Regards,
Chetan

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH net-next 2/7] net: wwan: iosm: set tx queue len
  2021-12-05 13:52     ` Kumar, M Chetan
@ 2021-12-05 13:59       ` Sergey Ryazanov
  0 siblings, 0 replies; 11+ messages in thread
From: Sergey Ryazanov @ 2021-12-05 13:59 UTC (permalink / raw)
  To: Kumar, M Chetan
  Cc: netdev, Jakub Kicinski, David Miller, Johannes Berg,
	Loic Poulain, krishna.c.sudi, M Chetan Kumar, Intel Corporation

On Sun, Dec 5, 2021 at 4:52 PM Kumar, M Chetan
<m.chetan.kumar@linux.intel.com> wrote:
> On 12/5/2021 4:46 PM, Sergey Ryazanov wrote:
>> On Sun, Dec 5, 2021 at 9:47 AM M Chetan Kumar
>> <m.chetan.kumar@linux.intel.com> wrote:
>>> Set wwan net dev tx queue len to 1000.
>>>
>>> Signed-off-by: M Chetan Kumar <m.chetan.kumar@linux.intel.com>
>>> ---
>>>   drivers/net/wwan/iosm/iosm_ipc_wwan.c | 3 ++-
>>>   1 file changed, 2 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/net/wwan/iosm/iosm_ipc_wwan.c b/drivers/net/wwan/iosm/iosm_ipc_wwan.c
>>> index b571d9cedba4..e3fb926d2248 100644
>>> --- a/drivers/net/wwan/iosm/iosm_ipc_wwan.c
>>> +++ b/drivers/net/wwan/iosm/iosm_ipc_wwan.c
>>> @@ -18,6 +18,7 @@
>>>   #define IOSM_IP_TYPE_IPV6 0x60
>>>
>>>   #define IOSM_IF_ID_PAYLOAD 2
>>> +#define IOSM_QDISC_QUEUE_LEN 1000
>>
>> Is this 1000 something special for the IOSM driver? If you need just
>> an approximate value for the queue length, then consider using the
>> common DEFAULT_TX_QUEUE_LEN macro, please.
>> We had set an approximate value for the queue length.
> Sure, will use the common queue length macro (DEFAULT_TX_QUEUE_LEN)
> instead of defining the new macro.

Thank you! The series looks good to me, so feel free to add my:

Reviewed-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2021-12-05 14:00 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-05  6:55 [PATCH net-next 0/7] net: wwan: iosm: Bug fixes M Chetan Kumar
2021-12-05  6:55 ` [PATCH net-next 1/7] net: wwan: iosm: stop sending unnecessary doorbell M Chetan Kumar
2021-12-05  6:55 ` [PATCH net-next 2/7] net: wwan: iosm: set tx queue len M Chetan Kumar
2021-12-05 11:16   ` Sergey Ryazanov
2021-12-05 13:52     ` Kumar, M Chetan
2021-12-05 13:59       ` Sergey Ryazanov
2021-12-05  6:55 ` [PATCH net-next 3/7] net: wwan: iosm: wwan0 net interface nonfunctional after fw flash M Chetan Kumar
2021-12-05  6:55 ` [PATCH net-next 4/7] net: wwan: iosm: release data channel in case no active IP session M Chetan Kumar
2021-12-05  6:55 ` [PATCH net-next 5/7] net: wwan: iosm: removed unused function decl M Chetan Kumar
2021-12-05  6:55 ` [PATCH net-next 6/7] net: wwan: iosm: AT port is not working while MBIM TX is ongoing M Chetan Kumar
2021-12-05  6:55 ` [PATCH net-next 7/7] net: wwan: iosm: correct open parenthesis alignment M Chetan Kumar

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.