From owner-svn-src-all@freebsd.org Tue Sep 3 14:06:47 2019 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 2B849DC75E; Tue, 3 Sep 2019 14:06:20 +0000 (UTC) (envelope-from yuripv@freebsd.org) Received: from freefall.freebsd.org (freefall.freebsd.org [96.47.72.132]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "freefall.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 46N7zH2tFzz4PQm; Tue, 3 Sep 2019 14:06:19 +0000 (UTC) (envelope-from yuripv@freebsd.org) Received: by freefall.freebsd.org (Postfix, from userid 1452) id E6B6A1A4CE; Tue, 3 Sep 2019 14:06:05 +0000 (UTC) X-Original-To: yuripv@localmail.freebsd.org Delivered-To: yuripv@localmail.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client CN "mx1.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by freefall.freebsd.org (Postfix) with ESMTPS id 10B831A019; Sat, 6 Apr 2019 02:40:01 +0000 (UTC) (envelope-from owner-src-committers@freebsd.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2610:1c1:1:6074::16:84]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "freefall.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 63EEB89B23; Sat, 6 Apr 2019 02:40:00 +0000 (UTC) (envelope-from owner-src-committers@freebsd.org) Received: by freefall.freebsd.org (Postfix, from userid 538) id 1CD6919FF1; Sat, 6 Apr 2019 02:40:00 +0000 (UTC) Delivered-To: src-committers@localmail.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client CN "mx1.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by freefall.freebsd.org (Postfix) with ESMTPS id 788E019FEF for ; Sat, 6 Apr 2019 02:39:57 +0000 (UTC) (envelope-from jhibbits@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id F1DC389B19; Sat, 6 Apr 2019 02:39:56 +0000 (UTC) (envelope-from jhibbits@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C0ED01E2A3; Sat, 6 Apr 2019 02:39:56 +0000 (UTC) (envelope-from jhibbits@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x362duq9019967; Sat, 6 Apr 2019 02:39:56 GMT (envelope-from jhibbits@FreeBSD.org) Received: (from jhibbits@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x362duc0019966; Sat, 6 Apr 2019 02:39:56 GMT (envelope-from jhibbits@FreeBSD.org) Message-Id: <201904060239.x362duc0019966@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jhibbits set sender to jhibbits@FreeBSD.org using -f From: Justin Hibbits To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r345975 - head/sys/powerpc/powernv X-SVN-Group: head X-SVN-Commit-Author: jhibbits X-SVN-Commit-Paths: head/sys/powerpc/powernv X-SVN-Commit-Revision: 345975 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk X-Loop: FreeBSD.org Sender: owner-src-committers@freebsd.org X-Rspamd-Queue-Id: 63EEB89B23 X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.98 / 15.00]; local_wl_from(0.00)[freebsd.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.998,0]; NEURAL_HAM_SHORT(-0.98)[-0.979,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US]; NEURAL_HAM_LONG(-1.00)[-1.000,0] Status: O X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.29 List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Date: Tue, 03 Sep 2019 14:06:47 -0000 X-Original-Date: Sat, 6 Apr 2019 02:39:56 +0000 (UTC) X-List-Received-Date: Tue, 03 Sep 2019 14:06:47 -0000 Author: jhibbits Date: Sat Apr 6 02:39:56 2019 New Revision: 345975 URL: https://svnweb.freebsd.org/changeset/base/345975 Log: powerpc/powernv: Fix major bugs in opal_flash * The BIO bio_data may not be page aligned. Only the base address of each page worth of data is extracted to pass to OPAL. Without page alignment it can scribble over random memory when finishing the page read. Fix this by short-reading the first page to properly align for full page reads. * Fix the definition of OPAL_FLASH_ERASE. * Properly handle the async message result, as now returned from r345974. Modified: head/sys/powerpc/powernv/opal.h head/sys/powerpc/powernv/opal_flash.c Modified: head/sys/powerpc/powernv/opal.h ============================================================================== --- head/sys/powerpc/powernv/opal.h Sat Apr 6 02:31:01 2019 (r345974) +++ head/sys/powerpc/powernv/opal.h Sat Apr 6 02:39:56 2019 (r345975) @@ -82,7 +82,7 @@ int opal_call(uint64_t token, ...); #define OPAL_I2C_REQUEST 109 #define OPAL_FLASH_READ 110 #define OPAL_FLASH_WRITE 111 -#define OPAL_FLASH_ERASE 111 +#define OPAL_FLASH_ERASE 112 #define OPAL_INT_GET_XIRR 122 #define OPAL_INT_SET_CPPR 123 #define OPAL_INT_EOI 124 Modified: head/sys/powerpc/powernv/opal_flash.c ============================================================================== --- head/sys/powerpc/powernv/opal_flash.c Sat Apr 6 02:31:01 2019 (r345974) +++ head/sys/powerpc/powernv/opal_flash.c Sat Apr 6 02:39:56 2019 (r345975) @@ -175,16 +175,22 @@ opalflash_read(struct opalflash_softc *sc, off_t off, * Read one page at a time. It's not guaranteed that the buffer is * physically contiguous. */ + rv = 0; while (count > 0) { size = MIN(count, PAGE_SIZE); + size = MIN(size, PAGE_SIZE - ((u_long)data & PAGE_MASK)); rv = opal_call(OPAL_FLASH_READ, sc->sc_opal_id, off, vtophys(data), size, token); - if (rv == OPAL_ASYNC_COMPLETION) + if (rv == OPAL_ASYNC_COMPLETION) { rv = opal_wait_completion(&msg, sizeof(msg), token); + if (rv == OPAL_SUCCESS) + rv = msg.params[1]; + } if (rv != OPAL_SUCCESS) break; count -= size; off += size; + data += size; } opal_free_async_token(token); if (rv == OPAL_SUCCESS) @@ -209,8 +215,11 @@ opalflash_erase(struct opalflash_softc *sc, off_t off, token = opal_alloc_async_token(); rv = opal_call(OPAL_FLASH_ERASE, sc->sc_opal_id, off, count, token); - if (rv == OPAL_ASYNC_COMPLETION) + if (rv == OPAL_ASYNC_COMPLETION) { rv = opal_wait_completion(&msg, sizeof(msg), token); + if (rv == OPAL_SUCCESS) + rv = msg.params[1]; + } opal_free_async_token(token); if (rv == OPAL_SUCCESS) @@ -246,14 +255,19 @@ opalflash_write(struct opalflash_softc *sc, off_t off, */ while (count > 0) { size = MIN(count, PAGE_SIZE); + size = MIN(size, PAGE_SIZE - ((u_long)data & PAGE_MASK)); rv = opal_call(OPAL_FLASH_WRITE, sc->sc_opal_id, off, vtophys(data), size, token); - if (rv == OPAL_ASYNC_COMPLETION) + if (rv == OPAL_ASYNC_COMPLETION) { rv = opal_wait_completion(&msg, sizeof(msg), token); + if (rv == OPAL_SUCCESS) + rv = msg.params[1]; + } if (rv != OPAL_SUCCESS) break; count -= size; off += size; + data += size; } opal_free_async_token(token);