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

Commit bda8711c authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "usb: gadget: f_gsi: Perform IPA initialization after IPA is ready"

parents 9d17b246 6325b0a3
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -2665,6 +2665,16 @@ static void gsi_unbind(struct usb_configuration *c, struct usb_function *f)
		gsi->d_port.in_request.dma);
}

static void ipa_ready_callback(void *user_data)
{
	struct f_gsi *gsi = user_data;

	pr_info("%s: ipa is ready\n", __func__);

	gsi->d_port.ipa_ready = true;
	wake_up_interruptible(&gsi->d_port.wait_for_ipa_ready);
}

int gsi_bind_config(struct usb_configuration *c, enum ipa_usb_teth_prot prot_id)
{
	struct f_gsi	*gsi;
@@ -2731,6 +2741,18 @@ int gsi_bind_config(struct usb_configuration *c, enum ipa_usb_teth_prot prot_id)
	if (status)
		return status;

	status = ipa_register_ipa_ready_cb(ipa_ready_callback, gsi);
	if (!status) {
		pr_info("%s: ipa is not ready\n", __func__);
		status = wait_event_interruptible_timeout(
			gsi->d_port.wait_for_ipa_ready, gsi->d_port.ipa_ready,
			msecs_to_jiffies(GSI_IPA_READY_TIMEOUT));
		if (!status) {
			pr_err("%s: ipa ready timeout\n", __func__);
			return -ETIMEDOUT;
		}
	}

	gsi->d_port.ipa_usb_notify_cb = ipa_usb_notify_cb;
	status = ipa_usb_init_teth_prot(prot_id,
		&gsi->d_port.ipa_init_params, gsi->d_port.ipa_usb_notify_cb,
@@ -2762,6 +2784,8 @@ static int gsi_function_init(enum ipa_usb_teth_prot prot_id)

	spin_lock_init(&gsi->d_port.lock);

	init_waitqueue_head(&gsi->d_port.wait_for_ipa_ready);

	gsi->d_port.in_channel_handle = -EINVAL;
	gsi->d_port.out_channel_handle = -EINVAL;

+4 −0
Original line number Diff line number Diff line
@@ -25,6 +25,8 @@
#define GSI_NUM_OUT_BUFFERS 7
#define GSI_OUT_BUFF_SIZE 24576

#define GSI_IPA_READY_TIMEOUT 5000

#define ETH_ADDR_STR_LEN 14

/* mbin and ecm */
@@ -175,6 +177,7 @@ struct gsi_data_port {
	u16 in_last_trb_addr;
	u16 cdc_filter;

	bool ipa_ready;
	bool net_ready_trigger;
	struct gsi_ntb_info ntb_info;

@@ -184,6 +187,7 @@ struct gsi_data_port {
	struct workqueue_struct *ipa_usb_wq;
	enum connection_state sm_state;
	struct event_queue evt_q;
	wait_queue_head_t wait_for_ipa_ready;

	/* Track these for debugfs */
	struct ipa_usb_xdci_chan_params ipa_in_channel_params;