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 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.