From patchwork Wed Mar 4 06:26:12 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joel Stanley X-Patchwork-Id: 446238 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [103.22.144.68]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 0D4B41401DE for ; Thu, 5 Mar 2015 00:32:53 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=neutral reason="verification failed; unprotected key/testing" header.d=jms.id.au header.i=@jms.id.au header.b=H6wIUPR0; dkim-adsp=none (unprotected policy); dkim-atps=neutral Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id D6C261A026F for ; Thu, 5 Mar 2015 00:32:52 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=neutral reason="verification failed; unprotected key/testing" header.d=jms.id.au header.i=@jms.id.au header.b=H6wIUPR0; dkim-adsp=none (unprotected policy); dkim-atps=neutral X-Original-To: skiboot@lists.ozlabs.org Delivered-To: skiboot@lists.ozlabs.org Received: from mail-pa0-x22c.google.com (mail-pa0-x22c.google.com [IPv6:2607:f8b0:400e:c03::22c]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4E4941A01DA for ; Thu, 5 Mar 2015 00:32:35 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=pass reason="1024-bit key; unprotected key/testing" header.d=jms.id.au header.i=@jms.id.au header.b=H6wIUPR0; dkim-adsp=pass; dkim-atps=neutral Received: by pabrd3 with SMTP id rd3so9599963pab.5 for ; Wed, 04 Mar 2015 05:32:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jms.id.au; s=google; h=from:to:subject:date:message-id; bh=JHb8IXZx/YXfTqazDO1R97gnMpOsKLjV4CJAgmnlczs=; b=H6wIUPR0yX55T57y8vPMM89CuX1yiEznidy/ry06Pdzf2XwtS36jLmEd6rfEG9HTC1 TtFAxeUUo0ijq79t4ALR9hnBXPAz04qSEte5uPmBJe6uPFpiET7qe+/9nRjwDwhKb95D 8ttlteErBzls44KgjzJHhoSWxRcZaQipi8yHg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id; bh=JHb8IXZx/YXfTqazDO1R97gnMpOsKLjV4CJAgmnlczs=; b=YTsA2TF3auDc+Jjxn+WSrW/5HAAv6ImkmVC0tBrtIspj0zS1O93a5i7aBcIM9fr4lB hBdYO++dlvXxw4pOj/rUhXF3LFuXCvSLVpPu9EzcA0ZPCuleJwic0atPVEka8JJAHfnV E6QCXn92wH7V6iDWJrR7VPj30rT6oikMmRKKqqvQr60pclTEXR3yhhxiwXlCIGo45pkP mMjmMKZ+PCgG1CGloA/PoYqPn880kC4dRf7GQAG5MabDDXlFak3ksHfxrmlxGs69vocw PyNuqSjU2QcQHxx4uyEXDaGaRqD0WdxNHf8nha/29kKAn0DSpjHAD+PVnPC1rfClQXWs jraA== X-Gm-Message-State: ALoCoQkYwH7mOAIahM0Z9UCBtm42dswxSzaDbbVJVc2JEWbXh9eX2baYK5jsfwupeDT6aa9rsnrv X-Received: by 10.68.195.10 with SMTP id ia10mr6575104pbc.113.1425475953148; Wed, 04 Mar 2015 05:32:33 -0800 (PST) Received: from icarus.jms.id.au ([2001:4830:1200:800f:c170:e75c:ad67:27a4]) by mx.google.com with ESMTPSA id s4sm4069109pdc.61.2015.03.04.05.32.30 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 04 Mar 2015 05:32:32 -0800 (PST) Received: by icarus.jms.id.au (Postfix, from userid 1000) id 7CC1C10139A; Wed, 4 Mar 2015 16:56:15 +1030 (ACDT) From: Joel Stanley To: skiboot@lists.ozlabs.org Date: Wed, 4 Mar 2015 16:56:12 +1030 Message-Id: <1425450374-6855-1-git-send-email-joel@jms.id.au> X-Mailer: git-send-email 2.1.4 Subject: [Skiboot] [PATCH 1/3] external/opal-prd: Enhance PNOR error messages X-BeenThere: skiboot@lists.ozlabs.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Mailing list for skiboot development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: skiboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Skiboot" Provide detailed feedback when encountering errors in the PNOR code. Signed-off-by: Joel Stanley --- external/opal-prd/pnor.c | 43 ++++++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/external/opal-prd/pnor.c b/external/opal-prd/pnor.c index 0eca693..e5609fe 100644 --- a/external/opal-prd/pnor.c +++ b/external/opal-prd/pnor.c @@ -105,8 +105,8 @@ void dump_parts(struct ffs_handle *ffs) { } } -int mtd_write(struct pnor *pnor, int fd, void *data, uint64_t offset, - size_t len) +static int mtd_write(struct pnor *pnor, int fd, void *data, uint64_t offset, + size_t len) { int write_start, write_len, start_waste, rc; bool end_waste = false; @@ -115,7 +115,7 @@ int mtd_write(struct pnor *pnor, int fd, void *data, uint64_t offset, if (len > pnor->size || offset > pnor->size || len + offset > pnor->size) - return -1; + return -ERANGE; start_waste = offset % pnor->erasesize; write_start = offset - start_waste; @@ -191,8 +191,8 @@ out: return rc; } -int mtd_read(struct pnor *pnor, int fd, void *data, uint64_t offset, - size_t len) +static int mtd_read(struct pnor *pnor, int fd, void *data, uint64_t offset, + size_t len) { int read_start, read_len, start_waste, rc; int mask = pnor->erasesize - 1; @@ -200,7 +200,7 @@ int mtd_read(struct pnor *pnor, int fd, void *data, uint64_t offset, if (len > pnor->size || offset > pnor->size || len + offset > pnor->size) - return -1; + return -ERANGE; /* Align start to erase block size */ start_waste = offset % pnor->erasesize; @@ -214,7 +214,7 @@ int mtd_read(struct pnor *pnor, int fd, void *data, uint64_t offset, /* Ensure read is not out of bounds */ if (read_start + read_len > pnor->size) { fprintf(stderr, "PNOR: read out of bounds\n"); - return -1; + return -ERANGE; } buf = malloc(read_len); @@ -231,7 +231,7 @@ int mtd_read(struct pnor *pnor, int fd, void *data, uint64_t offset, goto out; } - /* Copy data into destination, cafefully avoiding the extra data we + /* Copy data into destination, carefully avoiding the extra data we * added to align to block size */ memcpy(data, buf + start_waste, len); rc = len; @@ -246,19 +246,28 @@ int pnor_operation(struct pnor *pnor, const char *name, uint64_t offset, int rc, fd; uint32_t pstart, psize, idx; - if (!pnor->ffsh) - return -1; + if (!pnor->ffsh) { + warnx("PNOR: ffs not initialised"); + return -EBUSY; + } rc = ffs_lookup_part(pnor->ffsh, name, &idx); - if (rc) - return -1; + if (rc) { + warnx("PNOR: failed to find partition '%s'", name); + return -ENOENT; + } ffs_part_info(pnor->ffsh, idx, NULL, &pstart, &psize, NULL, NULL); - if (rc) - return -1; + if (rc) { + warnx("PNOR: unable to fetch partition info"); + return -ENOENT; + } - if (size > psize || offset > psize || size + offset > psize) - return -1; + if (size > psize || offset > psize || size + offset > psize) { + warnx("PNOR: offset (%ld) or size (%ld) out of bounds (%d)", + offset, size, psize); + return -ERANGE; + } fd = open(pnor->path, O_RDWR); if (fd < 0) { @@ -280,7 +289,7 @@ int pnor_operation(struct pnor *pnor, const char *name, uint64_t offset, rc = mtd_write(pnor, fd, data, offset, size); break; default: - rc = -1; + rc = -EIO; fprintf(stderr, "PNOR: Invalid operation\n"); goto out; }