From owner-svn-src-head@FreeBSD.ORG Sat Feb 7 05:03:25 2009 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 809F5106566C; Sat, 7 Feb 2009 05:03:25 +0000 (UTC) (envelope-from sam@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 552BB8FC08; Sat, 7 Feb 2009 05:03:25 +0000 (UTC) (envelope-from sam@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n1753PmO081571; Sat, 7 Feb 2009 05:03:25 GMT (envelope-from sam@svn.freebsd.org) Received: (from sam@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n1753Pdg081570; Sat, 7 Feb 2009 05:03:25 GMT (envelope-from sam@svn.freebsd.org) Message-Id: <200902070503.n1753Pdg081570@svn.freebsd.org> From: Sam Leffler Date: Sat, 7 Feb 2009 05:03:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r188267 - head/sys/dev/cfi X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 07 Feb 2009 05:03:25 -0000 Author: sam Date: Sat Feb 7 05:03:25 2009 New Revision: 188267 URL: http://svn.freebsd.org/changeset/base/188267 Log: expand CFI_ARMEDANDDANGEROUS to include writing the user segment of the PR; this register is actually write-once so deserves the safety-belt as much as the PLR Modified: head/sys/dev/cfi/cfi_core.c Modified: head/sys/dev/cfi/cfi_core.c ============================================================================== --- head/sys/dev/cfi/cfi_core.c Sat Feb 7 02:14:27 2009 (r188266) +++ head/sys/dev/cfi/cfi_core.c Sat Feb 7 05:03:25 2009 (r188267) @@ -438,9 +438,9 @@ cfi_write_block(struct cfi_softc *sc) * used for security. There are two 64-bit segments; one is programmed * at the factory with a unique 64-bit number which is immutable. * The other segment is left blank for User (OEM) programming. - * Once the User/OEM segment is programmed it can be locked - * to prevent future programming by writing bit 0 of the Protection - * Lock Register (PLR). The PLR can written only once. + * The User/OEM segment is One Time Programmable (OTP). It can also + * be locked to prevent any firther writes by setting bit 0 of the + * Protection Lock Register (PLR). The PLR can written only once. */ static uint16_t @@ -496,17 +496,21 @@ cfi_intel_get_oem_pr(struct cfi_softc *s /* * Write the User/OEM 64-bit segment of the PR. + * XXX should allow writing individual words/bytes */ int cfi_intel_set_oem_pr(struct cfi_softc *sc, uint64_t id) { +#ifdef CFI_ARMEDANDDANGEROUS register_t intr; int i, error; +#endif if (sc->sc_cmdset != CFI_VEND_INTEL_ECS) return EOPNOTSUPP; KASSERT(sc->sc_width == 2, ("sc_width %d", sc->sc_width)); +#ifdef CFI_ARMEDANDDANGEROUS for (i = 7; i >= 4; i--, id >>= 16) { intr = intr_disable(); cfi_write(sc, 0, CFI_INTEL_PP_SETUP); @@ -519,6 +523,11 @@ cfi_intel_set_oem_pr(struct cfi_softc *s } cfi_write(sc, 0, CFI_BCS_READ_ARRAY); return error; +#else + device_printf(sc->sc_dev, "%s: OEM PR not set, " + "CFI_ARMEDANDDANGEROUS not configured\n", __func__); + return ENXIO; +#endif } /*