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

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

Merge "ARM: dts: msm: Remove unused dtsi flag for MSM8920/MSM8940"

parents ea851f01 ba90c945
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -36,7 +36,6 @@ Optional properties:
- qcom,reset-bam-on-connect: If present then BAM is RESET before connecting
  pipe. This may be required if BAM peripheral is also reset before connect.
- qcom,reset-bam-on-disconnect: If present then BAM is RESET after disconnecting pipes.
- qcom,enable-hsusb-bam-on-boot: If present then BAM is enabled at bootup itself.

A number of USB BAM pipe parameters are represented as sub-nodes:

+0 −2
Original line number Diff line number Diff line
@@ -49,8 +49,6 @@
			 <&clock_gcc clk_xo_otg_clk>;

	qcom,usbbam@78c4000 {
		qcom,enable-hsusb-bam-on-boot;

		/delete-property/ qcom,reset-bam-on-disconnect;
		/delete-node/ qcom,pipe0;
		qcom,pipe0 {
+0 −2
Original line number Diff line number Diff line
@@ -38,8 +38,6 @@
			 <&clock_gcc clk_xo_otg_clk>;

	qcom,usbbam@78c4000 {
		qcom,enable-hsusb-bam-on-boot;

		/delete-property/ qcom,reset-bam-on-disconnect;
		/delete-node/ qcom,pipe0;
		qcom,pipe0 {
+75 −35
Original line number Diff line number Diff line
@@ -2887,9 +2887,6 @@ static struct msm_usb_bam_platform_data *usb_bam_dt_to_pdata(
	else
		pdata->override_threshold = threshold;

	pdata->enable_hsusb_bam_on_boot = of_property_read_bool(node,
		"qcom,enable-hsusb-bam-on-boot");

	for_each_child_of_node(pdev->dev.of_node, node)
		max_connections++;

@@ -3013,53 +3010,72 @@ err:
	return NULL;
}

static int usb_bam_init(struct platform_device *pdev)
static void msm_usb_bam_update_props(struct sps_bam_props *props,
				struct platform_device *pdev)
{
	int ret;
	struct msm_usb_bam_platform_data *pdata = pdev->dev.platform_data;
	enum usb_ctrl bam_type = pdata->bam_type;
	struct usb_bam_ctx_type *ctx = &msm_usb_bam[bam_type];
	struct sps_bam_props props;

	memset(&props, 0, sizeof(props));

	pr_debug("%s: usb_bam_init - %s\n", __func__,
		bam_enable_strings[bam_type]);

	props.phys_addr = ctx->io_res->start;
	props.virt_addr = ctx->regs;
	props.virt_size = resource_size(ctx->io_res);
	props.irq = ctx->irq;
	props.summing_threshold = pdata->override_threshold;
	props.event_threshold = pdata->override_threshold;
	props.num_pipes = pdata->usb_bam_num_pipes;
	props.callback = usb_bam_sps_events;
	props.user = bam_enable_strings[bam_type];
	props->phys_addr = ctx->io_res->start;
	props->virt_addr = NULL;
	props->virt_size = resource_size(ctx->io_res);
	props->irq = ctx->irq;
	props->summing_threshold = pdata->override_threshold;
	props->event_threshold = pdata->override_threshold;
	props->num_pipes = pdata->usb_bam_num_pipes;
	props->callback = usb_bam_sps_events;
	props->user = bam_enable_strings[bam_type];

	/*
	* HSUSB and HSIC Cores don't support RESET ACK signal to BAMs
	* Hence, let BAM to ignore acknowledge from USB while resetting PIPE
	*/
	if (pdata->ignore_core_reset_ack && bam_type != DWC3_CTRL)
		props.options = SPS_BAM_NO_EXT_P_RST;
		props->options = SPS_BAM_NO_EXT_P_RST;

	if (pdata->disable_clk_gating)
		props.options |= SPS_BAM_NO_LOCAL_CLK_GATING;
		props->options |= SPS_BAM_NO_LOCAL_CLK_GATING;

	/*
	 * HSUSB BAM is not NDP BAM and it must be enabled early before
	 * HSUSB BAM is not NDP BAM and it must be enabled before
	 * starting peripheral controller to avoid switching USB core mode
	 * from legacy to BAM with ongoing data transfers.
	 */
	if (pdata->enable_hsusb_bam_on_boot && bam_type == CI_CTRL) {
		pr_debug("Register and enable HSUSB BAM\n");
		props.options |= SPS_BAM_OPT_ENABLE_AT_BOOT;
		props.options |= SPS_BAM_FORCE_RESET;
	if (bam_type == CI_CTRL) {
		log_event_dbg("Register and enable HSUSB BAM\n");
		props->options |= SPS_BAM_OPT_ENABLE_AT_BOOT;
		props->options |= SPS_BAM_FORCE_RESET;
	}
}

static int usb_bam_init(struct platform_device *pdev)
{
	int ret;
	struct msm_usb_bam_platform_data *pdata = pdev->dev.platform_data;
	enum usb_ctrl bam_type = pdata->bam_type;
	struct usb_bam_ctx_type *ctx = &msm_usb_bam[bam_type];
	struct sps_bam_props props;


	pr_debug("%s: usb_bam_init - %s\n", __func__,
		bam_enable_strings[bam_type]);

	/*
	 * CI USB2 BAM is registered before starting controller
	 * and only if bam2bam function is present in composition
	 */
	if (bam_type == CI_CTRL)
		return 0;

	memset(&props, 0, sizeof(props));
	msm_usb_bam_update_props(&props, pdev);
	ret = sps_register_bam_device(&props, &ctx->h_bam);

	if (ret < 0) {
		log_event_err("%s: register bam error %d\n", __func__, ret);
		log_event_err("%s: register bam error %d\n",
				__func__, ret);
		return -EFAULT;
	}

@@ -3418,7 +3434,7 @@ int msm_do_bam_disable_enable(enum usb_ctrl bam)
		return 0;

	pdata = ctx->usb_bam_pdev->dev.platform_data;
	if ((bam != CI_CTRL) || !pdata->enable_hsusb_bam_on_boot)
	if (bam != CI_CTRL)
		return 0;

	if (!ctx->pipes_enabled_per_bam || info[bam].pipes_suspended)
@@ -3520,20 +3536,44 @@ EXPORT_SYMBOL(msm_do_bam_disable_enable);

bool msm_usb_bam_enable(enum usb_ctrl bam, bool bam_enable)
{
	struct msm_usb_bam_platform_data *pdata;
	struct usb_bam_ctx_type *ctx = &msm_usb_bam[bam];
	static bool bam_enabled;
	int ret;

	if (!ctx->usb_bam_pdev)
		return 0;

	pdata = ctx->usb_bam_pdev->dev.platform_data;
	if ((bam != CI_CTRL) || !(bam_enable ||
					pdata->enable_hsusb_bam_on_boot))
	if (bam != CI_CTRL)
		return 0;

	if (bam_enabled == bam_enable) {
		log_event_dbg("%s: USB BAM is already %s\n", __func__,
				bam_enable ? "Registered" : "De-registered");
		return 0;
	}

	if (bam_enable) {
		struct sps_bam_props props;

		memset(&props, 0, sizeof(props));
		msm_usb_bam_update_props(&props, ctx->usb_bam_pdev);
		msm_hw_bam_disable(1);
	sps_device_reset(ctx->h_bam);
		ret = sps_register_bam_device(&props, &ctx->h_bam);
		bam_enabled = true;
		if (ret < 0) {
			log_event_err("%s: register bam error %d\n",
					__func__, ret);
			return -EFAULT;
		}
		log_event_dbg("%s: USB BAM Registered\n", __func__);
		msm_hw_bam_disable(0);
	} else {
		msm_hw_bam_disable(1);
		sps_device_reset(ctx->h_bam);
		sps_deregister_bam_device(ctx->h_bam);
		log_event_dbg("%s: USB BAM De-registered\n", __func__);
		bam_enabled = false;
	}

	return 0;
}
+27 −14
Original line number Diff line number Diff line
@@ -3427,14 +3427,22 @@ static int ci13xxx_vbus_session(struct usb_gadget *_gadget, int is_active)
		gadget_ready = 1;
	spin_unlock_irqrestore(udc->lock, flags);

	if (gadget_ready) {
	if (!gadget_ready)
		return 0;

	if (is_active) {
		hw_device_reset(udc);
		if (udc->udc_driver->notify_event)
			udc->udc_driver->notify_event(udc,
				CI13XXX_CONTROLLER_CONNECT_EVENT);
			if (udc->softconnect)
		/* Enable BAM (if needed) before starting controller */
		if (udc->softconnect) {
			dbg_event(0xFF, "BAM EN2",
				_gadget->bam2bam_func_enabled);
			msm_usb_bam_enable(CI_CTRL,
				_gadget->bam2bam_func_enabled);
			hw_device_state(udc->ep0out.qh.dma);
		}
	} else {
		hw_device_state(0);
		_gadget_stop_activity(&udc->gadget);
@@ -3442,7 +3450,6 @@ static int ci13xxx_vbus_session(struct usb_gadget *_gadget, int is_active)
			udc->udc_driver->notify_event(udc,
				CI13XXX_CONTROLLER_DISCONNECT_EVENT);
	}
	}

	return 0;
}
@@ -3488,6 +3495,12 @@ static int ci13xxx_pullup(struct usb_gadget *_gadget, int is_active)

	pm_runtime_get_sync(&_gadget->dev);

	/* Enable BAM (if needed) before starting controller */
	if (is_active) {
		dbg_event(0xFF, "BAM EN1", _gadget->bam2bam_func_enabled);
		msm_usb_bam_enable(CI_CTRL, _gadget->bam2bam_func_enabled);
	}

	spin_lock_irqsave(udc->lock, flags);
	if (!udc->vbus_active) {
		spin_unlock_irqrestore(udc->lock, flags);
Loading