Commit 07d3f274 authored by M Chetan Kumar's avatar M Chetan Kumar Committed by Jakub Kicinski

net: wwan: iosm: fixes net interface nonfunctional after fw flash

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: default avatarM Chetan Kumar <m.chetan.kumar@linux.intel.com>
Reviewed-by: default avatarSergey Ryazanov <ryazanov.s.a@gmail.com>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 373f121a
...@@ -531,6 +531,9 @@ static void ipc_imem_run_state_worker(struct work_struct *instance) ...@@ -531,6 +531,9 @@ static void ipc_imem_run_state_worker(struct work_struct *instance)
return; 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)) if (!ipc_imem_setup_cp_mux_cap_init(ipc_imem, &mux_cfg))
ipc_imem->mux = ipc_mux_init(&mux_cfg, ipc_imem); ipc_imem->mux = ipc_mux_init(&mux_cfg, ipc_imem);
...@@ -1171,7 +1174,7 @@ void ipc_imem_cleanup(struct iosm_imem *ipc_imem) ...@@ -1171,7 +1174,7 @@ void ipc_imem_cleanup(struct iosm_imem *ipc_imem)
ipc_port_deinit(ipc_imem->ipc_port); 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_devlink_deinit(ipc_imem->ipc_devlink);
ipc_imem_device_ipc_uninit(ipc_imem); ipc_imem_device_ipc_uninit(ipc_imem);
...@@ -1335,6 +1338,8 @@ struct iosm_imem *ipc_imem_init(struct iosm_pcie *pcie, unsigned int device_id, ...@@ -1335,6 +1338,8 @@ struct iosm_imem *ipc_imem_init(struct iosm_pcie *pcie, unsigned int device_id,
if (ipc_flash_link_establish(ipc_imem)) if (ipc_flash_link_establish(ipc_imem))
goto devlink_channel_fail; goto devlink_channel_fail;
set_bit(IOSM_DEVLINK_INIT, &ipc_imem->flag);
} }
return ipc_imem; return ipc_imem;
devlink_channel_fail: devlink_channel_fail:
......
...@@ -101,6 +101,7 @@ struct ipc_chnl_cfg; ...@@ -101,6 +101,7 @@ struct ipc_chnl_cfg;
#define IOSM_CHIP_INFO_SIZE_MAX 100 #define IOSM_CHIP_INFO_SIZE_MAX 100
#define FULLY_FUNCTIONAL 0 #define FULLY_FUNCTIONAL 0
#define IOSM_DEVLINK_INIT 1
/* List of the supported UL/DL pipes. */ /* List of the supported UL/DL pipes. */
enum ipc_mem_pipes { enum ipc_mem_pipes {
......
...@@ -450,6 +450,7 @@ void ipc_imem_sys_devlink_close(struct iosm_devlink *ipc_devlink) ...@@ -450,6 +450,7 @@ void ipc_imem_sys_devlink_close(struct iosm_devlink *ipc_devlink)
/* Release the pipe resources */ /* Release the pipe resources */
ipc_imem_pipe_cleanup(ipc_imem, &channel->ul_pipe); ipc_imem_pipe_cleanup(ipc_imem, &channel->ul_pipe);
ipc_imem_pipe_cleanup(ipc_imem, &channel->dl_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, void ipc_imem_sys_devlink_notify_rx(struct iosm_devlink *ipc_devlink,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment