mirror of
https://github.com/torvalds/linux.git
synced 2024-11-04 11:04:38 +00:00
mei: split amthif client init from end of clients enumeration
The amthif FW client can appear after the end of client enumeration. Amthif host client initialization is done now at FW client discovery time. Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com> Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
27f476ea98
commit
025fb792ba
@ -67,6 +67,9 @@ int mei_amthif_host_init(struct mei_device *dev, struct mei_me_client *me_cl)
|
||||
struct mei_cl *cl = &dev->iamthif_cl;
|
||||
int ret;
|
||||
|
||||
if (mei_cl_is_connected(cl))
|
||||
return 0;
|
||||
|
||||
dev->iamthif_state = MEI_IAMTHIF_IDLE;
|
||||
|
||||
mei_cl_init(cl, dev);
|
||||
@ -79,8 +82,6 @@ int mei_amthif_host_init(struct mei_device *dev, struct mei_me_client *me_cl)
|
||||
|
||||
ret = mei_cl_connect(cl, me_cl, NULL);
|
||||
|
||||
dev->iamthif_state = MEI_IAMTHIF_IDLE;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -981,6 +981,14 @@ void mei_cl_bus_rescan_work(struct work_struct *work)
|
||||
{
|
||||
struct mei_device *bus =
|
||||
container_of(work, struct mei_device, bus_rescan_work);
|
||||
struct mei_me_client *me_cl;
|
||||
|
||||
mutex_lock(&bus->device_lock);
|
||||
me_cl = mei_me_cl_by_uuid(bus, &mei_amthif_guid);
|
||||
if (me_cl)
|
||||
mei_amthif_host_init(bus, me_cl);
|
||||
mei_me_cl_put(me_cl);
|
||||
mutex_unlock(&bus->device_lock);
|
||||
|
||||
mei_cl_bus_rescan(bus);
|
||||
}
|
||||
|
@ -666,25 +666,12 @@ int mei_cl_unlink(struct mei_cl *cl)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void mei_host_client_init(struct work_struct *work)
|
||||
void mei_host_client_init(struct mei_device *dev)
|
||||
{
|
||||
struct mei_device *dev =
|
||||
container_of(work, struct mei_device, init_work);
|
||||
struct mei_me_client *me_cl;
|
||||
|
||||
mutex_lock(&dev->device_lock);
|
||||
|
||||
me_cl = mei_me_cl_by_uuid(dev, &mei_amthif_guid);
|
||||
if (me_cl)
|
||||
mei_amthif_host_init(dev, me_cl);
|
||||
mei_me_cl_put(me_cl);
|
||||
|
||||
dev->dev_state = MEI_DEV_ENABLED;
|
||||
dev->reset_count = 0;
|
||||
mutex_unlock(&dev->device_lock);
|
||||
|
||||
mei_cl_bus_rescan(dev);
|
||||
schedule_work(&dev->bus_rescan_work);
|
||||
|
||||
pm_runtime_mark_last_busy(dev->dev);
|
||||
dev_dbg(dev->dev, "rpm: autosuspend\n");
|
||||
|
@ -226,7 +226,7 @@ int mei_cl_irq_write(struct mei_cl *cl, struct mei_cl_cb *cb,
|
||||
|
||||
void mei_cl_complete(struct mei_cl *cl, struct mei_cl_cb *cb);
|
||||
|
||||
void mei_host_client_init(struct work_struct *work);
|
||||
void mei_host_client_init(struct mei_device *dev);
|
||||
|
||||
u8 mei_cl_notify_fop2req(enum mei_cb_file_ops fop);
|
||||
enum mei_cb_file_ops mei_cl_notify_req2fop(u8 request);
|
||||
|
@ -549,7 +549,7 @@ static int mei_hbm_prop_req(struct mei_device *dev)
|
||||
/* We got all client properties */
|
||||
if (next_client_index == MEI_CLIENTS_MAX) {
|
||||
dev->hbm_state = MEI_HBM_STARTED;
|
||||
schedule_work(&dev->init_work);
|
||||
mei_host_client_init(dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -91,7 +91,6 @@ EXPORT_SYMBOL_GPL(mei_fw_status2str);
|
||||
*/
|
||||
void mei_cancel_work(struct mei_device *dev)
|
||||
{
|
||||
cancel_work_sync(&dev->init_work);
|
||||
cancel_work_sync(&dev->reset_work);
|
||||
cancel_work_sync(&dev->bus_rescan_work);
|
||||
|
||||
@ -393,7 +392,6 @@ void mei_device_init(struct mei_device *dev,
|
||||
mei_io_list_init(&dev->ctrl_rd_list);
|
||||
|
||||
INIT_DELAYED_WORK(&dev->timer_work, mei_timer);
|
||||
INIT_WORK(&dev->init_work, mei_host_client_init);
|
||||
INIT_WORK(&dev->reset_work, mei_reset_work);
|
||||
INIT_WORK(&dev->bus_rescan_work, mei_cl_bus_rescan_work);
|
||||
|
||||
|
@ -410,7 +410,6 @@ const char *mei_pg_state_str(enum mei_pg_state state);
|
||||
* @iamthif_state : amthif processor state
|
||||
* @iamthif_canceled : current amthif command is canceled
|
||||
*
|
||||
* @init_work : work item for the device init
|
||||
* @reset_work : work item for the device reset
|
||||
* @bus_rescan_work : work item for the bus rescan
|
||||
*
|
||||
@ -503,7 +502,6 @@ struct mei_device {
|
||||
enum iamthif_states iamthif_state;
|
||||
bool iamthif_canceled;
|
||||
|
||||
struct work_struct init_work;
|
||||
struct work_struct reset_work;
|
||||
struct work_struct bus_rescan_work;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user