linux-arm-msm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Dolev Raviv" <draviv@codeaurora.org>
Cc: Dolev Raviv <draviv@codeaurora.org>,
	james.bottomley@hansenpartnership.com, hch@infradead.org,
	linux-scsi@vger.kernel.org, linux-scsi-owner@vger.kernel.org,
	linux-arm-msm@vger.kernel.org, santoshsy@gmail.com,
	Subhash Jadavani <subhashj@codeaurora.org>,
	Sujit Reddy Thumma <sthumma@codeaurora.org>
Subject: Re: [PATCH V4 11/17] scsi: ufs: add UFS power management support
Date: Tue, 23 Sep 2014 12:57:32 -0000	[thread overview]
Message-ID: <4bbf3e7f23b55b6609367f47d2e2fdea.squirrel@www.codeaurora.org> (raw)
In-Reply-To: <20140923101451.GA11623@infradead.org>


>>  /**
>>   * ufshcd_slave_alloc - handle initial SCSI device configurations
>>   * @sdev: pointer to SCSI device
>> @@ -2232,6 +2403,21 @@ static int ufshcd_slave_alloc(struct scsi_device
>> *sdev)
>>
>>  	ufshcd_set_queue_depth(sdev);
>>
>> +	ufshcd_get_lu_power_on_wp_status(hba, sdev);
>> +
>> +	/*
>> +	 * For selecting the UFS device power mode (Active / UFS_Sleep /
>> +	 * UFS_PowerDown), SCSI power management command (START STOP UNIT)
>> +	 * needs to be sent to a "UFS device" Well known Logical Unit (W-LU).
>> +	 * As this command would be sent during the UFS host controller
>> +	 * runtime/system PM callbacks, we need a reference to "scsi_device"
>> +	 * associated to "UFS device" W-LU. This change saves the
>> "scsi_device"
>> +	 * reference for "UFS device" W-LU during slave_configure() callback
>> +	 * from SCSI mid layer.
>> +	 */
>> +	if (ufshcd_scsi_to_upiu_lun(sdev->lun) == UFS_UPIU_UFS_DEVICE_WLUN)
>> +		hba->sdev_ufs_device = sdev;
>> +
>
> Storing the pointer in slave_alloc is not safe as you don't known if the
> probing was successful.  In addition you really need a reference to a
> scsi_device that you store somewhere as a user could easily delete the
> device through sysfs, which any access to it invalid.
>
> As mention earlier you should just add this wlun using __scsi_device_add
> which gives you a pointer and a reference to the fully probed device.

Sounds reasonable, I'll coordinate it with the previous patch.

>
>> +static int
>> +ufshcd_send_request_sense(struct ufs_hba *hba, struct scsi_device *sdp)
>> +{
>> +	unsigned char cmd[6] = {REQUEST_SENSE,
>> +				0,
>> +				0,
>> +				0,
>> +				SCSI_SENSE_BUFFERSIZE,
>> +				0};
>> +	char *buffer;
>> +	int ret;
>> +
>> +	buffer = kzalloc(SCSI_SENSE_BUFFERSIZE, GFP_KERNEL);
>> +	if (!buffer) {
>> +		ret = -ENOMEM;
>> +		goto out;
>> +	}
>> +
>> +	ret = scsi_execute_req_flags(sdp, cmd, DMA_FROM_DEVICE, buffer,
>> +				SCSI_SENSE_BUFFERSIZE, NULL,
>> +				msecs_to_jiffies(1000), 3, NULL, REQ_PM);
>> +	if (ret)
>> +		pr_err("%s: failed with err %d\n", __func__, ret);
>> +
>> +	kfree(buffer);
>> +out:
>> +	return ret;
>> +}
>
> It would be good to have an explanation why you need to call
> REQUEST SENSE from the driver.  OR your own START STOP later one.  This
> all seems very much against the normal model of operation for SCSI
> devices.
>

Let me rephrase the explanation from the commit message:
We issue request sense before sending START_STOP_UNIT to the device
well-known logical unit (w-lun) to make sure that the device w-lun
unit attention condition is cleared. Otherwise START_STOP_UNIT will fail.

As mentioned in my previous mail (in response to [9/17] patch comments),
UFS driver power management is controlled via device W-LUN during the
suspend process.
As documented in the comment above: "
 * For selecting the UFS device power mode (Active / UFS_Sleep /
 * UFS_PowerDown), SCSI power management command (START STOP UNIT)
 * needs to be sent to a "UFS device" Well known Logical Unit (W-LU).
 * As this command would be sent during the UFS host controller
 * runtime/system PM callbacks, ....
"
Do you have another suggestion for making it compatible to other scsi
drivers?
Would you prefer this logic would go into core scsi?

-- 
QUALCOMM ISRAEL, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation

  reply	other threads:[~2014-09-23 12:57 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-23  7:31 [PATCH/RESEND V4 00/17] UFS: Power management support Dolev Raviv
2014-09-23  7:31 ` [PATCH/RESEND V4 01/17] scsi: balance out autopm get/put calls in scsi_sysfs_add_sdev() Dolev Raviv
2014-09-23  7:31 ` [PATCH/RESEND V4 02/17] scsi: ufs: Allow vendor specific initialization Dolev Raviv
2014-09-23  7:31 ` [PATCH/RESEND V4 03/17] scsi: ufs: Add regulator enable support Dolev Raviv
2014-09-23  7:31 ` [PATCH/RESEND V4 04/17] scsi: ufs: Add clock initialization support Dolev Raviv
2014-09-23  7:31 ` [PATCH V4 05/17] scsi: ufs: add voting support for host controller power Dolev Raviv
2014-09-23  7:31 ` [PATCH/RESEND V4 06/17] scsi: ufs: refactor query descriptor API support Dolev Raviv
2014-09-23  7:31 ` [PATCH/RESEND V4 07/17] scsi: ufs: improve init sequence Dolev Raviv
2014-09-23  7:31 ` [PATCH/RESEND V4 08/17] scsi: ufs: Active Power Mode - configuring bActiveICCLevel Dolev Raviv
2014-09-23  7:31 ` [PATCH V4 09/17] scsi: ufs: manually add well known logical units Dolev Raviv
2014-09-23  8:35   ` Christoph Hellwig
2014-09-23 11:48     ` Dolev Raviv
2014-09-23 22:48       ` Subhash Jadavani
2014-09-23  7:31 ` [PATCH/RESEND V4 10/17] scsi: ufs: introduce well known logical unit in ufs Dolev Raviv
2014-09-23  7:31 ` [PATCH V4 11/17] scsi: ufs: add UFS power management support Dolev Raviv
2014-09-23 10:14   ` Christoph Hellwig
2014-09-23 12:57     ` Dolev Raviv [this message]
2014-09-24  0:14       ` Subhash Jadavani
2014-09-23  7:31 ` [PATCH V4 12/17] scsi: ufs: refactor configuring power mode Dolev Raviv
2014-09-23  7:31 ` [PATCH V4 13/17] scsi: ufs: Add support for clock gating Dolev Raviv
2014-09-23  7:31 ` [PATCH V4 14/17] scsi: ufs: Add freq-table-hz property for UFS device Dolev Raviv
2014-09-23  7:31 ` [PATCH/RESEND V4 15/17] scsi: ufs: Add support for clock scaling using devfreq framework Dolev Raviv
2014-09-23  7:31 ` [PATCH/RESEND V4 16/17] scsi: ufs: tune bkops while power managment events Dolev Raviv
2014-09-23  7:31 ` [PATCH/RESEND V4 17/17] scsi: ufs: definitions for phy interface Dolev Raviv
2014-09-23  8:32 ` [PATCH/RESEND V4 00/17] UFS: Power management support Christoph Hellwig

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=4bbf3e7f23b55b6609367f47d2e2fdea.squirrel@www.codeaurora.org \
    --to=draviv@codeaurora.org \
    --cc=hch@infradead.org \
    --cc=james.bottomley@hansenpartnership.com \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-scsi-owner@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=santoshsy@gmail.com \
    --cc=sthumma@codeaurora.org \
    --cc=subhashj@codeaurora.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).