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

Commit 0a523a53 authored by qctecmdr Service's avatar qctecmdr Service Committed by Gerrit - the friendly Code Review server
Browse files

Merge "ARM: dts: msm: Add additional bus bandwidth usecase on SM8150"

parents 1ffd085a 3d0f91bd
Loading
Loading
Loading
Loading
+10 −1
Original line number Original line Diff line number Diff line
@@ -55,15 +55,24 @@
		qcom,dwc-usb3-msm-tx-fifo-size = <27696>;
		qcom,dwc-usb3-msm-tx-fifo-size = <27696>;


		qcom,msm-bus,name = "usb0";
		qcom,msm-bus,name = "usb0";
		qcom,msm-bus,num-cases = <2>;
		qcom,msm-bus,num-cases = <3>;
		qcom,msm-bus,num-paths = <3>;
		qcom,msm-bus,num-paths = <3>;
		qcom,msm-bus,vectors-KBps =
		qcom,msm-bus,vectors-KBps =
			/*  suspend vote */
			<MSM_BUS_MASTER_USB3 MSM_BUS_SLAVE_EBI_CH0 0 0>,
			<MSM_BUS_MASTER_USB3 MSM_BUS_SLAVE_EBI_CH0 0 0>,
			<MSM_BUS_MASTER_USB3 MSM_BUS_SLAVE_IPA_CFG 0 0>,
			<MSM_BUS_MASTER_USB3 MSM_BUS_SLAVE_IPA_CFG 0 0>,
			<MSM_BUS_MASTER_AMPSS_M0 MSM_BUS_SLAVE_USB3 0 0>,
			<MSM_BUS_MASTER_AMPSS_M0 MSM_BUS_SLAVE_USB3 0 0>,

			/*  nominal vote */
			<MSM_BUS_MASTER_USB3
			<MSM_BUS_MASTER_USB3
				MSM_BUS_SLAVE_EBI_CH0 1000000 2500000>,
				MSM_BUS_SLAVE_EBI_CH0 1000000 2500000>,
			<MSM_BUS_MASTER_USB3 MSM_BUS_SLAVE_IPA_CFG 0 2400>,
			<MSM_BUS_MASTER_USB3 MSM_BUS_SLAVE_IPA_CFG 0 2400>,
			<MSM_BUS_MASTER_AMPSS_M0 MSM_BUS_SLAVE_USB3 0 40000>,

			/*  svs vote */
			<MSM_BUS_MASTER_USB3
				MSM_BUS_SLAVE_EBI_CH0 240000 700000>,
			<MSM_BUS_MASTER_USB3 MSM_BUS_SLAVE_IPA_CFG 0 2400>,
			<MSM_BUS_MASTER_AMPSS_M0 MSM_BUS_SLAVE_USB3 0 40000>;
			<MSM_BUS_MASTER_AMPSS_M0 MSM_BUS_SLAVE_USB3 0 40000>;


		dwc3@a600000 {
		dwc3@a600000 {
+61 −18
Original line number Original line Diff line number Diff line
@@ -2113,6 +2113,60 @@ static void configure_nonpdc_usb_interrupt(struct dwc3_msm *mdwc,
	}
	}
}
}


enum bus_vote {
	BUS_VOTE_INVALID,
	BUS_VOTE_SUSPEND,
	BUS_VOTE_NOMINAL,
	BUS_VOTE_SVS
};

static int dwc3_msm_update_bus_bw(struct dwc3_msm *mdwc, enum bus_vote bv)
{
	int ret = 0;
	struct dwc3 *dwc = platform_get_drvdata(mdwc->dwc3);

	if (!mdwc->bus_perf_client)
		return 0;

	dbg_event(0xFF, "bus_vote_start", bv);

	switch (bv) {
	case BUS_VOTE_SVS:
		/* On some platforms SVS does not have separate vote. Vote for
		 * nominal if svs usecase does not exist
		 */
		if (mdwc->bus_scale_table->num_usecases == 2)
			goto nominal_vote;

		/* index starts from zero */
		ret = msm_bus_scale_client_update_request(
					mdwc->bus_perf_client, 2);
		if (ret)
			dev_err(mdwc->dev, "bus bw voting failed %d\n", ret);
		break;
	case BUS_VOTE_NOMINAL:
nominal_vote:
		ret = msm_bus_scale_client_update_request(
					mdwc->bus_perf_client, 1);
		if (ret)
			dev_err(mdwc->dev, "bus bw voting failed %d\n", ret);
		break;
	case BUS_VOTE_SUSPEND:
		ret = msm_bus_scale_client_update_request(
					mdwc->bus_perf_client, 0);
		if (ret)
			dev_err(mdwc->dev, "bus bw voting failed %d\n", ret);
		break;
	default:
		dev_err(mdwc->dev, "Unsupported bus vote:%d\n", bv);
		ret = -EINVAL;
	}

	dbg_event(0xFF, "bus_vote_end", bv);

	return ret;

}
static int dwc3_msm_suspend(struct dwc3_msm *mdwc)
static int dwc3_msm_suspend(struct dwc3_msm *mdwc)
{
{
	int ret;
	int ret;
@@ -2244,15 +2298,7 @@ static int dwc3_msm_suspend(struct dwc3_msm *mdwc)
		}
		}
	}
	}


	/* Remove bus voting */
	dwc3_msm_update_bus_bw(mdwc, BUS_VOTE_SUSPEND);
	if (mdwc->bus_perf_client) {
		dbg_event(0xFF, "bus_devote_start", 0);
		ret = msm_bus_scale_client_update_request(
					mdwc->bus_perf_client, 0);
		dbg_event(0xFF, "bus_devote_finish", 0);
		if (ret)
			dev_err(mdwc->dev, "bus bw unvoting failed %d\n", ret);
	}


	/*
	/*
	 * release wakeup source with timeout to defer system suspend to
	 * release wakeup source with timeout to defer system suspend to
@@ -2310,15 +2356,10 @@ static int dwc3_msm_resume(struct dwc3_msm *mdwc)


	pm_stay_awake(mdwc->dev);
	pm_stay_awake(mdwc->dev);


	/* Enable bus voting */
	if (mdwc->in_host_mode && mdwc->max_rh_port_speed == USB_SPEED_HIGH)
	if (mdwc->bus_perf_client) {
		dwc3_msm_update_bus_bw(mdwc, BUS_VOTE_SVS);
		dbg_event(0xFF, "bus_vote_start", 1);
	else
		ret = msm_bus_scale_client_update_request(
		dwc3_msm_update_bus_bw(mdwc, BUS_VOTE_NOMINAL);
					mdwc->bus_perf_client, 1);
		dbg_event(0xFF, "bus_vote_finish", 1);
		if (ret)
			dev_err(mdwc->dev, "bus bw voting failed %d\n", ret);
	}


	/* Vote for TCXO while waking up USB HSPHY */
	/* Vote for TCXO while waking up USB HSPHY */
	ret = clk_prepare_enable(mdwc->xo_clk);
	ret = clk_prepare_enable(mdwc->xo_clk);
@@ -3503,6 +3544,7 @@ static int dwc3_msm_host_notifier(struct notifier_block *nb,
					"set hs core clk rate %ld\n",
					"set hs core clk rate %ld\n",
					mdwc->core_clk_rate_hs);
					mdwc->core_clk_rate_hs);
				mdwc->max_rh_port_speed = USB_SPEED_HIGH;
				mdwc->max_rh_port_speed = USB_SPEED_HIGH;
				dwc3_msm_update_bus_bw(mdwc, BUS_VOTE_SVS);
			} else {
			} else {
				mdwc->max_rh_port_speed = USB_SPEED_SUPER;
				mdwc->max_rh_port_speed = USB_SPEED_SUPER;
			}
			}
@@ -3512,6 +3554,7 @@ static int dwc3_msm_host_notifier(struct notifier_block *nb,
			dev_dbg(mdwc->dev, "set core clk rate %ld\n",
			dev_dbg(mdwc->dev, "set core clk rate %ld\n",
				mdwc->core_clk_rate);
				mdwc->core_clk_rate);
			mdwc->max_rh_port_speed = USB_SPEED_UNKNOWN;
			mdwc->max_rh_port_speed = USB_SPEED_UNKNOWN;
			dwc3_msm_update_bus_bw(mdwc, BUS_VOTE_NOMINAL);
		}
		}
	}
	}