From: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
To: Bart Van Assche <bvanassche@acm.org>
Cc: "Martin K . Petersen" <martin.petersen@oracle.com>,
linux-scsi@vger.kernel.org,
"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
Peter Wang <peter.wang@mediatek.com>,
Minwoo Im <minwoo.im@samsung.com>,
Stanley Jhu <chu.stanley@gmail.com>,
ChanWoo Lee <cw9316.lee@samsung.com>,
Yang Li <yang.lee@linux.alibaba.com>,
"Bao D. Nguyen" <quic_nguyenb@quicinc.com>,
Avri Altman <avri.altman@wdc.com>,
Andrew Halaney <ahalaney@redhat.com>,
Bean Huo <beanhuo@micron.com>,
Maramaina Naresh <quic_mnaresh@quicinc.com>,
Akinobu Mita <akinobu.mita@gmail.com>
Subject: Re: [PATCH v4 9/9] scsi: ufs: Make .get_hba_mac() optional
Date: Mon, 8 Jul 2024 23:36:20 +0530 [thread overview]
Message-ID: <20240708180620.GF5745@thinkpad> (raw)
In-Reply-To: <f40ce193-1abb-4518-9cfe-5e35af636502@acm.org>
On Mon, Jul 08, 2024 at 10:10:43AM -0700, Bart Van Assche wrote:
> On 7/8/24 3:44 AM, Manivannan Sadhasivam wrote:
> > On Sat, Jul 06, 2024 at 08:24:06PM -0700, Bart Van Assche wrote:
> > > On 7/6/24 9:33 AM, Manivannan Sadhasivam wrote:
> > > > On Wed, Jul 03, 2024 at 01:36:46PM -0700, Bart Van Assche wrote:
> > > > > If an UFSHCI controller is reset, the controller is reset from MCQ mode
> > > > > to SDB mode and it is derived from the hba->mcq_enabled structure member
> > > > > that MCQ was enabled before the reset. In other words, moving all
> > > > > hba->mcq_enabled assignments into ufshcd_mcq_{enable/disable}() would
> > > > > break the code that resets the UFSHCI controller.
> > > >
> > > > Hmm, could you please point me to the code that does this? I tried looking for
> > > > it but couldn't spot.
> > >
> > > * There is no "hba->mcq_enabled = false;" statement anywhere in the UFS
> > > driver core. This shows that the reset code does not reset
> > > hba->mcq_enabled.
> >
> > Right. So this flag is used to reconfigure the MCQ mode upon HCI reset.
> > Previously we never disabled MCQ mode as well. But that is being changed by this
> > patch.
>
> Only in an error path.
>
> > > * From the UFSHCI specification, offset 300h, global config register:
> > > in the "reset" column I see 0h for the queue type (QT) bit. In other
> > > words, if a UFS host controller is reset, if MCQ is enabled (QT=1),
> > > it must be disabled (QT=0) until the application processor enables it
> > > again.
> > >
> >
> > So this means, once the HCI is reset, the QT field will become '0' by default.
> > So if MCQ mode is supposed to be enabled, then driver has to explicitly enable
> > it.
> >
> > But only place where you disable MCQ is when ufshcd_alloc_mcq() fails (in this
> > patch). Then you also set 'hba->mcq_enabled = false' afterwards. I fail to
> > understand why you cannot move the assignment to the enable/disable API itself.
> >
> > If you do not set the flag after calling the ufshcd_mcq_disable() API, your
> > argument makes sense. But that's not the case. Perhaps I'm missing anything
> > obvious?
>
> What do you want? That I move the "hba->mcq_enabled = false;" statement
> into ufshcd_mcq_disable()? That would be wrong because (a) it would
> introduce a confusing behavior difference between ufshcd_mcq_enable()
> (does not modify hba->mcq_enabled) and ufshcd_mcq_disable() (would
> modify hba->mcq_enabled if I implement your proposal) and (b) wouldn't
> reduce the code size because ufshcd_mcq_disable() only has one caller.
>
No, I'm not asking to move the assignment inside just the ufshcd_mcq_disable()
API, but for both. You are saying that doing so will break UFSHCI reset, but I
fail to understand how.
After your series applied, 'hba->mcq_enabled' is set to true in 2 places of
ufshcd.c. And in those 2 places, ufshcd_mcq_enable() is accompanied. There is
only one place you haven't added the assignment which is during the start of
ufshcd_device_init()::
/* Reconfigure MCQ upon reset */
if (hba->mcq_enabled && !init_dev_params) {
ufshcd_config_mcq(hba);
ufshcd_mcq_enable(hba);
}
And this makes sense because, if mcq_enabled was already set to true, then you
are not setting the flag again. But even if you have moved the 'hba->mcq_enabled
= true' assignment inside ufshcd_mcq_enable(), it wouldn't cause any issues.
Where does the assignment actually breaking the reset code? This part I don't
understand.
- Mani
--
மணிவண்ணன் சதாசிவம்
prev parent reply other threads:[~2024-07-08 18:06 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-02 20:39 [PATCH v4 0/9] UFS patches for kernel 6.11 Bart Van Assche
2024-07-02 20:39 ` [PATCH v4 1/9] scsi: ufs: Declare functions once Bart Van Assche
2024-07-02 20:39 ` [PATCH v4 2/9] scsi: ufs: Initialize struct uic_command once Bart Van Assche
2024-07-02 20:39 ` [PATCH v4 3/9] scsi: ufs: Remove two constants Bart Van Assche
2024-07-02 20:39 ` [PATCH v4 4/9] scsi: ufs: Rename the MASK_TRANSFER_REQUESTS_SLOTS constant Bart Van Assche
2024-07-03 12:59 ` Manivannan Sadhasivam
2024-07-02 20:39 ` [PATCH v4 5/9] scsi: ufs: Initialize hba->reserved_slot earlier Bart Van Assche
2024-07-03 13:01 ` Manivannan Sadhasivam
2024-07-02 20:39 ` [PATCH v4 6/9] scsi: ufs: Inline is_mcq_enabled() Bart Van Assche
2024-07-03 8:58 ` Peter Wang (王信友)
2024-07-03 13:03 ` Manivannan Sadhasivam
2024-07-02 20:39 ` [PATCH v4 7/9] scsi: ufs: Move the ufshcd_mcq_enable() call Bart Van Assche
2024-07-03 8:59 ` Peter Wang (王信友)
2024-07-03 13:10 ` Manivannan Sadhasivam
2024-07-03 20:32 ` Bart Van Assche
2024-07-02 20:39 ` [PATCH v4 8/9] scsi: ufs: Inline ufshcd_mcq_vops_get_hba_mac() Bart Van Assche
2024-07-02 20:39 ` [PATCH v4 9/9] scsi: ufs: Make .get_hba_mac() optional Bart Van Assche
2024-07-03 9:00 ` Peter Wang (王信友)
2024-07-03 13:22 ` Manivannan Sadhasivam
2024-07-03 20:36 ` Bart Van Assche
2024-07-06 16:33 ` Manivannan Sadhasivam
2024-07-07 3:24 ` Bart Van Assche
2024-07-08 10:44 ` Manivannan Sadhasivam
2024-07-08 17:10 ` Bart Van Assche
2024-07-08 18:06 ` Manivannan Sadhasivam [this message]
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=20240708180620.GF5745@thinkpad \
--to=manivannan.sadhasivam@linaro.org \
--cc=James.Bottomley@HansenPartnership.com \
--cc=ahalaney@redhat.com \
--cc=akinobu.mita@gmail.com \
--cc=avri.altman@wdc.com \
--cc=beanhuo@micron.com \
--cc=bvanassche@acm.org \
--cc=chu.stanley@gmail.com \
--cc=cw9316.lee@samsung.com \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=minwoo.im@samsung.com \
--cc=peter.wang@mediatek.com \
--cc=quic_mnaresh@quicinc.com \
--cc=quic_nguyenb@quicinc.com \
--cc=yang.lee@linux.alibaba.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 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).