From owner-freebsd-bugs@freebsd.org Fri Aug 18 21:00:21 2017 Return-Path: Delivered-To: freebsd-bugs@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C1C22DD6DAF for ; Fri, 18 Aug 2017 21:00:21 +0000 (UTC) (envelope-from bugzilla-noreply@freebsd.org) Received: from kenobi.freebsd.org (kenobi.freebsd.org [IPv6:2001:1900:2254:206a::16:76]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id AD1E3755DD for ; Fri, 18 Aug 2017 21:00:21 +0000 (UTC) (envelope-from bugzilla-noreply@freebsd.org) Received: from bugs.freebsd.org ([127.0.1.118]) by kenobi.freebsd.org (8.15.2/8.15.2) with ESMTP id v7IL0LH6049211 for ; Fri, 18 Aug 2017 21:00:21 GMT (envelope-from bugzilla-noreply@freebsd.org) From: bugzilla-noreply@freebsd.org To: freebsd-bugs@FreeBSD.org Subject: [Bug 221616] incorrect nvme driver init sequence Date: Fri, 18 Aug 2017 21:00:21 +0000 X-Bugzilla-Reason: AssignedTo X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: Base System X-Bugzilla-Component: kern X-Bugzilla-Version: 10.3-STABLE X-Bugzilla-Keywords: X-Bugzilla-Severity: Affects Some People X-Bugzilla-Who: kinjal.patel@taec.toshiba.com X-Bugzilla-Status: New X-Bugzilla-Resolution: X-Bugzilla-Priority: --- X-Bugzilla-Assigned-To: freebsd-bugs@FreeBSD.org X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: bug_id short_desc product version rep_platform op_sys bug_status bug_severity priority component assigned_to reporter attachments.created Message-ID: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 18 Aug 2017 21:00:21 -0000 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.=