Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 18 Aug 2017 21:00:21 +0000
From:      bugzilla-noreply@freebsd.org
To:        freebsd-bugs@FreeBSD.org
Subject:   [Bug 221616] incorrect nvme driver init sequence
Message-ID:  <bug-221616-8@https.bugs.freebsd.org/bugzilla/>

next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D221616

            Bug ID: 221616
           Summary: incorrect nvme driver init sequence
           Product: Base System
           Version: 10.3-STABLE
          Hardware: amd64
                OS: Any
            Status: New
          Severity: Affects Some People
          Priority: ---
         Component: kern
          Assignee: freebsd-bugs@FreeBSD.org
          Reporter: kinjal.patel@taec.toshiba.com

Created attachment 185557
  --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=3D185557&action=
=3Dedit
patch to correct the NVMe driver init sequence

At present, the NVMe driver init sequence is,
1)      Enable controller (CC.EN=3D1)
2)      Wait for controller ready (CSTS.RDY=3D1)
3)      Set PCI bus master enable (BME=3D1)

As per NVMe spec, when NVMe controller becomes ready it has to process comm=
and.

"Enable (EN): When set to '1', then the controller shall process commands b=
ased
on Submission Queue Tail doorbell writes"

And per PCI Express spec when BME is not set, the PCI Express Function is n=
ot
allowed to issue any Memory or I/O requests.
"Bus Master Enable - Controls the ability of a PCI Express Endpoint to issue
Memory95 and I/O Read/Write Requests, and
the ability of a Root or Switch Port to forward Memory and I/O Read/Write
Requests in the Upstream direction"

Enabling controller before setting BME=3D1 is violation of spec, as control=
ler=20
has to accept commands but BME is prerequisite for that.

The FreeBSD NVMe driver sequence should be changed to set BME=3D1 before
attempting to enable controller.

The Linux device driver init sequence also does the same. That is,
1)     Set PCI bus master enable (BME=3D1)
2)     Enable Controller (CC.EN=3D1)
3)     Wait for controller ready (CSTS.RDY=3D1)

Please find attached patch to correct the NVMe driver init sequence.
The patch is based on "FreeBSD 10.3-STABLE amd64" source.

Thanks,
Kinjal Patel

--=20
You are receiving this mail because:
You are the assignee for the bug.=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-221616-8>