Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 025fb792 authored by Alexander Usyskin's avatar Alexander Usyskin Committed by Greg Kroah-Hartman
Browse files

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: default avatarAlexander Usyskin <alexander.usyskin@intel.com>
Signed-off-by: default avatarTomas Winkler <tomas.winkler@intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 27f476ea
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -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;
}

+8 −0
Original line number Diff line number Diff line
@@ -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);
}
+2 −15
Original line number Diff line number Diff line
@@ -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");
+1 −1
Original line number Diff line number Diff line
@@ -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);
+1 −1
Original line number Diff line number Diff line
@@ -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;
	}
Loading