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

Commit 1977b7ce authored by Dov Levenglick's avatar Dov Levenglick
Browse files

scsi: ufs: add variant helper functions



Adds setter/getter functions to set/get a pointer
to the variant control structure in/from the generic
hba control structure.

Change-Id: I4c7b3967366f394472490410e3880fdc6e3608b4
Signed-off-by: default avatarDov Levenglick <dovl@codeaurora.org>
parent 7d7c05d0
Loading
Loading
Loading
Loading
+30 −29
Original line number Diff line number Diff line
@@ -205,7 +205,7 @@ out:

static int ufs_qcom_link_startup_post_change(struct ufs_hba *hba)
{
	struct ufs_qcom_host *host = hba->priv;
	struct ufs_qcom_host *host = ufshcd_get_variant(hba);
	struct phy *phy = host->generic_phy;
	u32 tx_lanes;
	int err = 0;
@@ -282,7 +282,7 @@ static void ufs_qcom_select_unipro_mode(struct ufs_qcom_host *host)

static int ufs_qcom_power_up_sequence(struct ufs_hba *hba)
{
	struct ufs_qcom_host *host = hba->priv;
	struct ufs_qcom_host *host = ufshcd_get_variant(hba);
	struct phy *phy = host->generic_phy;
	int ret = 0;
	bool is_rate_B = (UFS_QCOM_LIMIT_HS_RATE == PA_HS_MODE_B)
@@ -347,7 +347,7 @@ static void ufs_qcom_enable_hw_clk_gating(struct ufs_hba *hba)

static int ufs_qcom_hce_enable_notify(struct ufs_hba *hba, bool status)
{
	struct ufs_qcom_host *host = hba->priv;
	struct ufs_qcom_host *host = ufshcd_get_variant(hba);
	int err = 0;

	switch (status) {
@@ -390,7 +390,7 @@ static int ufs_qcom_cfg_timers(struct ufs_hba *hba, u32 gear,
			       u32 hs, u32 rate, bool update_link_startup_timer)
{
	int ret = 0;
	struct ufs_qcom_host *host = hba->priv;
	struct ufs_qcom_host *host = ufshcd_get_variant(hba);
	struct ufs_clk_info *clki;
	u32 core_clk_period_in_ns;
	u32 tx_clk_cycles_per_us = 0;
@@ -533,7 +533,7 @@ out:
static int ufs_qcom_link_startup_notify(struct ufs_hba *hba, bool status)
{
	int err = 0;
	struct ufs_qcom_host *host = hba->priv;
	struct ufs_qcom_host *host = ufshcd_get_variant(hba);
	struct phy *phy = host->generic_phy;

	switch (status) {
@@ -585,7 +585,7 @@ out:

static int ufs_qcom_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
{
	struct ufs_qcom_host *host = hba->priv;
	struct ufs_qcom_host *host = ufshcd_get_variant(hba);
	struct phy *phy = host->generic_phy;
	int ret = 0;

@@ -623,7 +623,7 @@ out:

static int ufs_qcom_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op)
{
	struct ufs_qcom_host *host = hba->priv;
	struct ufs_qcom_host *host = ufshcd_get_variant(hba);
	struct phy *phy = host->generic_phy;
	int err;

@@ -675,7 +675,7 @@ out:
static
int ufs_qcom_crytpo_engine_cfg(struct ufs_hba *hba, unsigned int task_tag)
{
	struct ufs_qcom_host *host = hba->priv;
	struct ufs_qcom_host *host = ufshcd_get_variant(hba);
	struct ufshcd_lrb *lrbp = &hba->lrb[task_tag];
	int err = 0;

@@ -691,7 +691,7 @@ out:
static
int ufs_qcom_crytpo_engine_reset(struct ufs_hba *hba)
{
	struct ufs_qcom_host *host = hba->priv;
	struct ufs_qcom_host *host = ufshcd_get_variant(hba);
	int err = 0;

	if (!host->ice.pdev)
@@ -704,7 +704,7 @@ out:

static int ufs_qcom_crypto_engine_eh(struct ufs_hba *hba)
{
	struct ufs_qcom_host *host = hba->priv;
	struct ufs_qcom_host *host = ufshcd_get_variant(hba);
	int ice_status = 0;
	int err = 0;

@@ -739,14 +739,14 @@ static int ufs_qcom_crypto_engine_eh(struct ufs_hba *hba)

static int ufs_qcom_crypto_engine_get_err(struct ufs_hba *hba)
{
	struct ufs_qcom_host *host = hba->priv;
	struct ufs_qcom_host *host = ufshcd_get_variant(hba);

	return host->ice.crypto_engine_err;
}

static void ufs_qcom_crypto_engine_reset_err(struct ufs_hba *hba)
{
	struct ufs_qcom_host *host = hba->priv;
	struct ufs_qcom_host *host = ufshcd_get_variant(hba);

	host->ice.crypto_engine_err = 0;
}
@@ -913,7 +913,7 @@ static int ufs_qcom_pwr_change_notify(struct ufs_hba *hba,
				struct ufs_pa_layer_attr *dev_req_params)
{
	u32 val;
	struct ufs_qcom_host *host = hba->priv;
	struct ufs_qcom_host *host = ufshcd_get_variant(hba);
	struct phy *phy = host->generic_phy;
	struct ufs_qcom_dev_params ufs_qcom_cap;
	int ret = 0;
@@ -1011,7 +1011,7 @@ out:

static u32 ufs_qcom_get_ufs_hci_version(struct ufs_hba *hba)
{
	struct ufs_qcom_host *host = hba->priv;
	struct ufs_qcom_host *host = ufshcd_get_variant(hba);

	if (host->hw_ver.major == 0x1)
		return UFSHCI_VERSION_11;
@@ -1030,7 +1030,7 @@ static u32 ufs_qcom_get_ufs_hci_version(struct ufs_hba *hba)
 */
static void ufs_qcom_advertise_quirks(struct ufs_hba *hba)
{
	struct ufs_qcom_host *host = hba->priv;
	struct ufs_qcom_host *host = ufshcd_get_variant(hba);

	if (host->hw_ver.major == 0x1) {
		hba->quirks |= (UFSHCD_QUIRK_DELAY_BEFORE_DME_CMDS
@@ -1056,7 +1056,7 @@ static void ufs_qcom_advertise_quirks(struct ufs_hba *hba)

static void ufs_qcom_set_caps(struct ufs_hba *hba)
{
	struct ufs_qcom_host *host = hba->priv;
	struct ufs_qcom_host *host = ufshcd_get_variant(hba);

	hba->caps |= UFSHCD_CAP_CLK_GATING | UFSHCD_CAP_CLK_SCALING;
	hba->caps |= UFSHCD_CAP_AUTO_BKOPS_SUSPEND;
@@ -1145,7 +1145,7 @@ static void ufs_qcom_get_speed_mode(struct ufs_pa_layer_attr *p, char *result)

static int ufs_qcom_setup_clocks(struct ufs_hba *hba, bool on)
{
	struct ufs_qcom_host *host = hba->priv;
	struct ufs_qcom_host *host = ufshcd_get_variant(hba);
	int err;
	int vote = 0;

@@ -1201,7 +1201,7 @@ show_ufs_to_mem_max_bus_bw(struct device *dev, struct device_attribute *attr,
			char *buf)
{
	struct ufs_hba *hba = dev_get_drvdata(dev);
	struct ufs_qcom_host *host = hba->priv;
	struct ufs_qcom_host *host = ufshcd_get_variant(hba);

	return snprintf(buf, PAGE_SIZE, "%u\n",
			host->bus_vote.is_max_bw_needed);
@@ -1212,7 +1212,7 @@ store_ufs_to_mem_max_bus_bw(struct device *dev, struct device_attribute *attr,
		const char *buf, size_t count)
{
	struct ufs_hba *hba = dev_get_drvdata(dev);
	struct ufs_qcom_host *host = hba->priv;
	struct ufs_qcom_host *host = ufshcd_get_variant(hba);
	uint32_t value;

	if (!kstrtou32(buf, 0, &value)) {
@@ -1307,8 +1307,9 @@ static int ufs_qcom_init(struct ufs_hba *hba)
		goto out;
	}

	/* Make a two way bind between the qcom host and the hba */
	host->hba = hba;
	hba->priv = (void *)host;
	ufshcd_bind_variant(hba, host);

	err = ufs_qcom_ice_get_dev(host);
	if (err == -EPROBE_DEFER) {
@@ -1415,14 +1416,14 @@ out_unregister_bus:
	msm_bus_scale_unregister_client(host->bus_vote.client_handle);
out_host_free:
	devm_kfree(dev, host);
	hba->priv = NULL;
	ufshcd_bind_variant(hba, NULL);
out:
	return err;
}

static void ufs_qcom_exit(struct ufs_hba *hba)
{
	struct ufs_qcom_host *host = hba->priv;
	struct ufs_qcom_host *host = ufshcd_get_variant(hba);

	msm_bus_scale_unregister_client(host->bus_vote.client_handle);
	ufs_qcom_disable_lane_clks(host);
@@ -1465,7 +1466,7 @@ static int ufs_qcom_clk_scale_up_pre_change(struct ufs_hba *hba)

static int ufs_qcom_clk_scale_up_post_change(struct ufs_hba *hba)
{
	struct ufs_qcom_host *host = hba->priv;
	struct ufs_qcom_host *host = ufshcd_get_variant(hba);

	if (!ufs_qcom_cap_qunipro(host))
		return 0;
@@ -1476,7 +1477,7 @@ static int ufs_qcom_clk_scale_up_post_change(struct ufs_hba *hba)

static int ufs_qcom_clk_scale_down_pre_change(struct ufs_hba *hba)
{
	struct ufs_qcom_host *host = hba->priv;
	struct ufs_qcom_host *host = ufshcd_get_variant(hba);
	int err;
	u32 core_clk_ctrl_reg;

@@ -1501,7 +1502,7 @@ static int ufs_qcom_clk_scale_down_pre_change(struct ufs_hba *hba)

static int ufs_qcom_clk_scale_down_post_change(struct ufs_hba *hba)
{
	struct ufs_qcom_host *host = hba->priv;
	struct ufs_qcom_host *host = ufshcd_get_variant(hba);

	if (!ufs_qcom_cap_qunipro(host))
		return 0;
@@ -1513,7 +1514,7 @@ static int ufs_qcom_clk_scale_down_post_change(struct ufs_hba *hba)
static int ufs_qcom_clk_scale_notify(struct ufs_hba *hba,
				      bool scale_up, bool status)
{
	struct ufs_qcom_host *host = hba->priv;
	struct ufs_qcom_host *host = ufshcd_get_variant(hba);
	struct ufs_pa_layer_attr *dev_req_params = &host->dev_req_params;
	int err = 0;

@@ -1554,7 +1555,7 @@ out:
static int ufs_qcom_update_sec_cfg(struct ufs_hba *hba, bool restore_sec_cfg)
{
	int ret = 0, scm_ret = 0;
	struct ufs_qcom_host *host = hba->priv;
	struct ufs_qcom_host *host = ufshcd_get_variant(hba);

	/* scm command buffer structrue */
	struct msm_scm_cmd_buf {
@@ -1624,7 +1625,7 @@ void ufs_qcom_print_hw_debug_reg_all(struct ufs_hba *hba, void *priv,
		return;
	}

	host = hba->priv;
	host = ufshcd_get_variant(hba);
	if (!(host->dbg_print_en & UFS_QCOM_DBG_PRINT_REGS_EN))
		return;

@@ -1790,7 +1791,7 @@ static void ufs_qcom_testbus_read(struct ufs_hba *hba)

static void ufs_qcom_dump_dbg_regs(struct ufs_hba *hba)
{
	struct ufs_qcom_host *host = hba->priv;
	struct ufs_qcom_host *host = ufshcd_get_variant(hba);

	ufs_qcom_dump_regs(hba, REG_UFS_SYS1CLK_1US, 16,
			"HCI Vendor Specific Registers ");
+21 −0
Original line number Diff line number Diff line
@@ -921,6 +921,27 @@ int ufshcd_wait_for_register(struct ufs_hba *hba, u32 reg, u32 mask,
				u32 val, unsigned long interval_us,
				unsigned long timeout_ms, bool can_sleep);

/**
 * ufshcd_bind_variant - bind variant specific data to the hba
 * @hba - per adapter instance
 * @variant - pointer to variant specific data
 */
static inline void ufshcd_bind_variant(struct ufs_hba *hba, void *variant)
{
	BUG_ON(!hba);
	hba->priv = variant;
}

/**
 * ufshcd_get_variant - get variant specific data from the hba
 * @hba - per adapter instance
 */
static inline void *ufshcd_get_variant(struct ufs_hba *hba)
{
	BUG_ON(!hba);
	return hba->priv;
}

extern int ufshcd_runtime_suspend(struct ufs_hba *hba);
extern int ufshcd_runtime_resume(struct ufs_hba *hba);
extern int ufshcd_runtime_idle(struct ufs_hba *hba);