All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Alim Akhtar" <alim.akhtar@samsung.com>
To: "'sheebab'" <sheebab@cadence.com>, <avri.altman@wdc.com>,
	<pedrom.sousa@synopsys.com>, <jejb@linux.ibm.com>,
	<martin.petersen@oracle.com>, <stanley.chu@mediatek.com>,
	<beanhuo@micron.com>, <yuehaibing@huawei.com>,
	<linux-scsi@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	<vigneshr@ti.com>, <linux-block@vger.kernel.org>
Cc: <rafalc@cadence.com>, <mparab@cadence.com>
Subject: RE: [PATCH RESEND 2/2] scsi: ufs: Update L4 attributes on manual hibern8 exit in Cadence UFS.
Date: Thu, 28 Nov 2019 19:29:29 +0530	[thread overview]
Message-ID: <0b8f01d5a5f4$0f7a8a70$2e6f9f50$@samsung.com> (raw)
In-Reply-To: <1574147082-22725-3-git-send-email-sheebab@cadence.com>



> -----Original Message-----
> From: sheebab <sheebab@cadence.com>
> Sent: 19 November 2019 12:35
> To: alim.akhtar@samsung.com; avri.altman@wdc.com;
> pedrom.sousa@synopsys.com; jejb@linux.ibm.com;
> martin.petersen@oracle.com; stanley.chu@mediatek.com;
> beanhuo@micron.com; yuehaibing@huawei.com; linux-scsi@vger.kernel.org;
> linux-kernel@vger.kernel.org; vigneshr@ti.com; linux-block@vger.kernel.org
> Cc: rafalc@cadence.com; mparab@cadence.com; sheebab
> <sheebab@cadence.com>
> Subject: [PATCH RESEND 2/2] scsi: ufs: Update L4 attributes on manual
hibern8
> exit in Cadence UFS.
> 
> Backup L4 attributes duirng manual hibern8 entry and restore the L4
attributes
> on manual hibern8 exit as per JESD220C.
> 
> Signed-off-by: sheebab <sheebab@cadence.com>
> ---
Reviewed-by: Alim Akhtar <alim.akhtar@samsung.com>

>  drivers/scsi/ufs/cdns-pltfrm.c | 97
> +++++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 95 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/scsi/ufs/cdns-pltfrm.c
b/drivers/scsi/ufs/cdns-pltfrm.c index
> adbbd60..5510567 100644
> --- a/drivers/scsi/ufs/cdns-pltfrm.c
> +++ b/drivers/scsi/ufs/cdns-pltfrm.c
> @@ -19,6 +19,14 @@
> 
>  #define CDNS_UFS_REG_HCLKDIV	0xFC
>  #define CDNS_UFS_REG_PHY_XCFGD1	0x113C
> +#define CDNS_UFS_MAX 12
> +
> +struct cdns_ufs_host {
> +	/**
> +	 * cdns_ufs_dme_attr_val - for storing L4 attributes
> +	 */
> +	u32 cdns_ufs_dme_attr_val[CDNS_UFS_MAX];
> +};
> 
>  /**
>   * cdns_ufs_enable_intr - enable interrupts @@ -47,6 +55,77 @@ static
void
> cdns_ufs_disable_intr(struct ufs_hba *hba, u32 intrs)  }
> 
>  /**
> + * cdns_ufs_get_l4_attr - get L4 attributes on local side
> + * @hba: per adapter instance
> + *
> + */
> +static void cdns_ufs_get_l4_attr(struct ufs_hba *hba) {
> +	struct cdns_ufs_host *host = ufshcd_get_variant(hba);
> +
> +	ufshcd_dme_get(hba, UIC_ARG_MIB(T_PEERDEVICEID),
> +		       &host->cdns_ufs_dme_attr_val[0]);
> +	ufshcd_dme_get(hba, UIC_ARG_MIB(T_PEERCPORTID),
> +		       &host->cdns_ufs_dme_attr_val[1]);
> +	ufshcd_dme_get(hba, UIC_ARG_MIB(T_TRAFFICCLASS),
> +		       &host->cdns_ufs_dme_attr_val[2]);
> +	ufshcd_dme_get(hba, UIC_ARG_MIB(T_PROTOCOLID),
> +		       &host->cdns_ufs_dme_attr_val[3]);
> +	ufshcd_dme_get(hba, UIC_ARG_MIB(T_CPORTFLAGS),
> +		       &host->cdns_ufs_dme_attr_val[4]);
> +	ufshcd_dme_get(hba, UIC_ARG_MIB(T_TXTOKENVALUE),
> +		       &host->cdns_ufs_dme_attr_val[5]);
> +	ufshcd_dme_get(hba, UIC_ARG_MIB(T_RXTOKENVALUE),
> +		       &host->cdns_ufs_dme_attr_val[6]);
> +	ufshcd_dme_get(hba, UIC_ARG_MIB(T_LOCALBUFFERSPACE),
> +		       &host->cdns_ufs_dme_attr_val[7]);
> +	ufshcd_dme_get(hba, UIC_ARG_MIB(T_PEERBUFFERSPACE),
> +		       &host->cdns_ufs_dme_attr_val[8]);
> +	ufshcd_dme_get(hba, UIC_ARG_MIB(T_CREDITSTOSEND),
> +		       &host->cdns_ufs_dme_attr_val[9]);
> +	ufshcd_dme_get(hba, UIC_ARG_MIB(T_CPORTMODE),
> +		       &host->cdns_ufs_dme_attr_val[10]);
> +	ufshcd_dme_get(hba, UIC_ARG_MIB(T_CONNECTIONSTATE),
> +		       &host->cdns_ufs_dme_attr_val[11]);
> +}
> +
> +/**
> + * cdns_ufs_set_l4_attr - set L4 attributes on local side
> + * @hba: per adapter instance
> + *
> + */
> +static void cdns_ufs_set_l4_attr(struct ufs_hba *hba) {
> +	struct cdns_ufs_host *host = ufshcd_get_variant(hba);
> +
> +	ufshcd_dme_set(hba, UIC_ARG_MIB(T_CONNECTIONSTATE), 0);
> +	ufshcd_dme_set(hba, UIC_ARG_MIB(T_PEERDEVICEID),
> +		       host->cdns_ufs_dme_attr_val[0]);
> +	ufshcd_dme_set(hba, UIC_ARG_MIB(T_PEERCPORTID),
> +		       host->cdns_ufs_dme_attr_val[1]);
> +	ufshcd_dme_set(hba, UIC_ARG_MIB(T_TRAFFICCLASS),
> +		       host->cdns_ufs_dme_attr_val[2]);
> +	ufshcd_dme_set(hba, UIC_ARG_MIB(T_PROTOCOLID),
> +		       host->cdns_ufs_dme_attr_val[3]);
> +	ufshcd_dme_set(hba, UIC_ARG_MIB(T_CPORTFLAGS),
> +		       host->cdns_ufs_dme_attr_val[4]);
> +	ufshcd_dme_set(hba, UIC_ARG_MIB(T_TXTOKENVALUE),
> +		       host->cdns_ufs_dme_attr_val[5]);
> +	ufshcd_dme_set(hba, UIC_ARG_MIB(T_RXTOKENVALUE),
> +		       host->cdns_ufs_dme_attr_val[6]);
> +	ufshcd_dme_set(hba, UIC_ARG_MIB(T_LOCALBUFFERSPACE),
> +		       host->cdns_ufs_dme_attr_val[7]);
> +	ufshcd_dme_set(hba, UIC_ARG_MIB(T_PEERBUFFERSPACE),
> +		       host->cdns_ufs_dme_attr_val[8]);
> +	ufshcd_dme_set(hba, UIC_ARG_MIB(T_CREDITSTOSEND),
> +		       host->cdns_ufs_dme_attr_val[9]);
> +	ufshcd_dme_set(hba, UIC_ARG_MIB(T_CPORTMODE),
> +		       host->cdns_ufs_dme_attr_val[10]);
> +	ufshcd_dme_set(hba, UIC_ARG_MIB(T_CONNECTIONSTATE),
> +		       host->cdns_ufs_dme_attr_val[11]); }
> +
> +/**
>   * Sets HCLKDIV register value based on the core_clk
>   * @hba: host controller instance
>   *
> @@ -134,6 +213,7 @@ static void cdns_ufs_hibern8_notify(struct ufs_hba
> *hba, enum uic_cmd_dme cmd,
>  		 * before manual hibernate entry.
>  		 */
>  		cdns_ufs_enable_intr(hba, UFSHCD_UIC_HIBERN8_MASK);
> +		cdns_ufs_get_l4_attr(hba);
>  	}
>  	if (status == POST_CHANGE && cmd == UIC_CMD_DME_HIBER_EXIT) {
>  		/**
> @@ -141,6 +221,7 @@ static void cdns_ufs_hibern8_notify(struct ufs_hba
> *hba, enum uic_cmd_dme cmd,
>  		 * after manual hibern8 exit.
>  		 */
>  		cdns_ufs_disable_intr(hba, UFSHCD_UIC_HIBERN8_MASK);
> +		cdns_ufs_set_l4_attr(hba);
>  	}
>  }
> 
> @@ -245,15 +326,27 @@ static int cdns_ufs_pltfrm_probe(struct
> platform_device *pdev)
>  	const struct of_device_id *of_id;
>  	struct ufs_hba_variant_ops *vops;
>  	struct device *dev = &pdev->dev;
> +	struct cdns_ufs_host *host;
> +	struct ufs_hba *hba;
> 
>  	of_id = of_match_node(cdns_ufs_of_match, dev->of_node);
>  	vops = (struct ufs_hba_variant_ops *)of_id->data;
> 
>  	/* Perform generic probe */
>  	err = ufshcd_pltfrm_init(pdev, vops);
> -	if (err)
> +	if (err) {
>  		dev_err(dev, "ufshcd_pltfrm_init() failed %d\n", err);
> -
> +		goto out;
> +	}
> +	host = devm_kzalloc(dev, sizeof(*host), GFP_KERNEL);
> +	if (!host) {
> +		err = -ENOMEM;
> +		dev_err(dev, "%s: no memory for cdns host\n", __func__);
> +		goto out;
> +	}
> +	hba =  platform_get_drvdata(pdev);
> +	ufshcd_set_variant(hba, host);
> +out:
>  	return err;
>  }
> 
> --
> 2.7.4



  parent reply	other threads:[~2019-11-28 13:59 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-19  7:04 [PATCH RESEND 0/2] scsi: ufs: hibern8 fixes sheebab
2019-11-19  7:04 ` [PATCH RESEND 1/2] scsi: ufs: Enable hibern8 interrupt only during manual hibern8 in Cadence UFS sheebab
2019-11-19  7:04 ` [PATCH RESEND 2/2] scsi: ufs: Update L4 attributes on manual hibern8 exit " sheebab
2019-11-20 16:20   ` Alim Akhtar
2019-11-21 10:56     ` Vignesh Raghavendra
2019-11-27  3:42       ` Alim Akhtar
2019-11-27  4:15         ` Vignesh Raghavendra
2019-11-27 15:18         ` Avri Altman
2019-11-28 13:59   ` Alim Akhtar [this message]
2019-11-22 11:44 ` [PATCH RESEND 0/2] scsi: ufs: hibern8 fixes Vignesh Raghavendra

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='0b8f01d5a5f4$0f7a8a70$2e6f9f50$@samsung.com' \
    --to=alim.akhtar@samsung.com \
    --cc=avri.altman@wdc.com \
    --cc=beanhuo@micron.com \
    --cc=jejb@linux.ibm.com \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    --cc=mparab@cadence.com \
    --cc=pedrom.sousa@synopsys.com \
    --cc=rafalc@cadence.com \
    --cc=sheebab@cadence.com \
    --cc=stanley.chu@mediatek.com \
    --cc=vigneshr@ti.com \
    --cc=yuehaibing@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.