From patchwork Sat Aug 23 19:53:02 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steve Rae X-Patchwork-Id: 35874 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-oi0-f70.google.com (mail-oi0-f70.google.com [209.85.218.70]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 322522057E for ; Sat, 23 Aug 2014 19:53:45 +0000 (UTC) Received: by mail-oi0-f70.google.com with SMTP id u20sf61340582oif.9 for ; Sat, 23 Aug 2014 12:53:44 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:delivered-to:from:to:date:message-id:in-reply-to :references:mime-version:cc:subject:precedence:list-id :list-unsubscribe:list-archive:list-post:list-help:list-subscribe :sender:errors-to:x-original-sender :x-original-authentication-results:mailing-list:content-type :content-transfer-encoding; bh=K03oJnOfA7+E1B9kW25ZNd9dc9gNgGCndHG+lUaiofY=; b=HrBVwbKeqynsGozqBZIqrAmbCqO6s3YDNgV/j+5A7A1atzLSPkW36e+psVYxenizY6 e/x/9ERGGwQDhMJn/BgbR17QUKRxPQPh4qLi4+lOrz1rDJGz+bMRjguRCDb3poLGk8c5 +24b1Wv4/6r9GWPS0NE1WDvTrMqP2NDeev94GHIkkPU9ig++urue9/sgey9+xLSK98/F tgy8dMZv6InRLLzfJNijes/KMHt+TcGgBYcVA/I6ERWgLi7jI4F4Jdgc0OS0noyTxset DqTZS3HMTT6Yyw4o295CoaqFi1uzCGXjYvpIo5m/wB8mUSHqd0Wcz7CJte9iP2H/cFrS OmSA== X-Gm-Message-State: ALoCoQnxEBRJ2PhNOBZjS5I9QZqC2lK7p9EBWE4mHs2c69iLC8sjKQQC+v8TYPEpa0dXsVXDPDg9 X-Received: by 10.182.246.70 with SMTP id xu6mr8425427obc.31.1408823624505; Sat, 23 Aug 2014 12:53:44 -0700 (PDT) X-BeenThere: patchwork-forward@linaro.org Received: by 10.140.29.137 with SMTP id b9ls1607200qgb.75.gmail; Sat, 23 Aug 2014 12:53:44 -0700 (PDT) X-Received: by 10.52.164.199 with SMTP id ys7mr654392vdb.42.1408823624390; Sat, 23 Aug 2014 12:53:44 -0700 (PDT) Received: from mail-vc0-f181.google.com (mail-vc0-f181.google.com [209.85.220.181]) by mx.google.com with ESMTPS id gt5si15306969vdc.14.2014.08.23.12.53.44 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Sat, 23 Aug 2014 12:53:44 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.220.181 as permitted sender) client-ip=209.85.220.181; Received: by mail-vc0-f181.google.com with SMTP id lf12so13467067vcb.26 for ; Sat, 23 Aug 2014 12:53:44 -0700 (PDT) X-Received: by 10.220.130.131 with SMTP id t3mr1758364vcs.30.1408823624267; Sat, 23 Aug 2014 12:53:44 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.221.45.67 with SMTP id uj3csp8594vcb; Sat, 23 Aug 2014 12:53:43 -0700 (PDT) X-Received: by 10.194.5.234 with SMTP id v10mr12359416wjv.45.1408823623002; Sat, 23 Aug 2014 12:53:43 -0700 (PDT) Received: from theia.denx.de (theia.denx.de. [85.214.87.163]) by mx.google.com with ESMTP id t13si49037274wjr.155.2014.08.23.12.53.42 for ; Sat, 23 Aug 2014 12:53:42 -0700 (PDT) Received-SPF: none (google.com: u-boot-bounces@lists.denx.de does not designate permitted sender hosts) client-ip=85.214.87.163; Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id E12034A058; Sat, 23 Aug 2014 21:53:41 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id IA9RtrMASpaZ; Sat, 23 Aug 2014 21:53:41 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id DAD464A03B; Sat, 23 Aug 2014 21:53:39 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 71FB34A027 for ; Sat, 23 Aug 2014 21:53:34 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id L-WNjFQADiC5 for ; Sat, 23 Aug 2014 21:53:31 +0200 (CEST) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from mail-gw2-out.broadcom.com (mail-gw2-out.broadcom.com [216.31.210.63]) by theia.denx.de (Postfix) with ESMTP id 06C4A4A040 for ; Sat, 23 Aug 2014 21:53:27 +0200 (CEST) X-IronPort-AV: E=Sophos;i="5.04,387,1406617200"; d="scan'208";a="43424709" Received: from irvexchcas08.broadcom.com (HELO IRVEXCHCAS08.corp.ad.broadcom.com) ([10.9.208.57]) by mail-gw2-out.broadcom.com with ESMTP; 23 Aug 2014 13:07:48 -0700 Received: from IRVEXCHSMTP3.corp.ad.broadcom.com (10.9.207.53) by IRVEXCHCAS08.corp.ad.broadcom.com (10.9.208.57) with Microsoft SMTP Server (TLS) id 14.3.174.1; Sat, 23 Aug 2014 12:53:26 -0700 Received: from mail-irva-13.broadcom.com (10.10.10.20) by IRVEXCHSMTP3.corp.ad.broadcom.com (10.9.207.53) with Microsoft SMTP Server id 14.3.174.1; Sat, 23 Aug 2014 12:53:25 -0700 Received: from mail.broadcom.com (lbrmn-vmlnx03.ric.broadcom.com [10.136.4.105]) by mail-irva-13.broadcom.com (Postfix) with ESMTP id DFA359F9F7; Sat, 23 Aug 2014 12:53:24 -0700 (PDT) From: Steve Rae To: , Tom Rini , Marek Vasut Date: Sat, 23 Aug 2014 12:53:02 -0700 Message-ID: <1408823626-12744-2-git-send-email-srae@broadcom.com> X-Mailer: git-send-email 1.8.5 In-Reply-To: <1408823626-12744-1-git-send-email-srae@broadcom.com> References: <1408823626-12744-1-git-send-email-srae@broadcom.com> MIME-Version: 1.0 Cc: Steve Rae , Rob Herring , Pantelis Antoniou , Vadim Bendebury Subject: [U-Boot] [PATCH v5 1/4] usb/gadget: fastboot: add eMMC support for flash command X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: , List-Help: , List-Subscribe: , Sender: u-boot-bounces@lists.denx.de Errors-To: u-boot-bounces@lists.denx.de X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: srae@broadcom.com X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.220.181 as permitted sender) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 - add support for 'fastboot flash' command for eMMC devices Signed-off-by: Steve Rae --- Changes in v5: None Changes in v4: - rearranged this patchset so that "sparse_format.h" can be dropped (if we cannot resolve the copyright/licensing issues) - update mmc_get_dev(...) to get_dev("mmc",....) - update printf() to puts() where applicable Changes in v3: - remove most references to 'mmc', which leaves only one mmc specific function: mmc_get_dev() Changes in v2: - split large function into three - improved handling of response messages - additional partition size checking when writing sparse image common/Makefile | 5 ++++ common/fb_mmc.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ include/fb_mmc.h | 8 ++++++ 3 files changed, 95 insertions(+) create mode 100644 common/fb_mmc.c create mode 100644 include/fb_mmc.h diff --git a/common/Makefile b/common/Makefile index de5cce8..daebe39 100644 --- a/common/Makefile +++ b/common/Makefile @@ -266,4 +266,9 @@ obj-$(CONFIG_IO_TRACE) += iotrace.o obj-y += memsize.o obj-y += stdio.o +# This option is not just y/n - it can have a numeric value +ifdef CONFIG_FASTBOOT_FLASH_MMC_DEV +obj-y += fb_mmc.o +endif + CFLAGS_env_embedded.o := -Wa,--no-warn -DENV_CRC=$(shell tools/envcrc 2>/dev/null) diff --git a/common/fb_mmc.c b/common/fb_mmc.c new file mode 100644 index 0000000..e559e2a --- /dev/null +++ b/common/fb_mmc.c @@ -0,0 +1,82 @@ +/* + * Copyright 2014 Broadcom Corporation. + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include +#include +#include + +/* The 64 defined bytes plus the '\0' */ +#define RESPONSE_LEN (64 + 1) + +static char *response_str; + +static void fastboot_resp(const char *s) +{ + strncpy(response_str, s, RESPONSE_LEN); + response_str[RESPONSE_LEN - 1] = '\0'; +} + +static void write_raw_image(block_dev_desc_t *dev_desc, disk_partition_t *info, + const char *part_name, void *buffer, + unsigned int download_bytes) +{ + lbaint_t blkcnt; + lbaint_t blks; + + /* determine number of blocks to write */ + blkcnt = ((download_bytes + (info->blksz - 1)) & ~(info->blksz - 1)); + blkcnt = blkcnt / info->blksz; + + if (blkcnt > info->size) { + printf("%s: too large for partition: '%s'\n", __func__, + part_name); + fastboot_resp("FAILtoo large for partition"); + return; + } + + puts("Flashing Raw Image\n"); + + blks = dev_desc->block_write(dev_desc->dev, info->start, blkcnt, + buffer); + if (blks != blkcnt) { + printf("%s: failed writing to device %d\n", __func__, + dev_desc->dev); + fastboot_resp("FAILfailed writing to device"); + return; + } + + printf("........ wrote " LBAFU " bytes to '%s'\n", blkcnt * info->blksz, + part_name); + fastboot_resp("OKAY"); +} + +void fb_mmc_flash_write(const char *cmd, void *download_buffer, + unsigned int download_bytes, char *response) +{ + int ret; + block_dev_desc_t *dev_desc; + disk_partition_t info; + + /* initialize the response buffer */ + response_str = response; + + dev_desc = get_dev("mmc", CONFIG_FASTBOOT_FLASH_MMC_DEV); + if (!dev_desc || dev_desc->type == DEV_TYPE_UNKNOWN) { + printf("%s: invalid mmc device\n", __func__); + fastboot_resp("FAILinvalid mmc device"); + return; + } + + ret = get_partition_info_efi_by_name(dev_desc, cmd, &info); + if (ret) { + printf("%s: cannot find partition: '%s'\n", __func__, cmd); + fastboot_resp("FAILcannot find partition"); + return; + } + + write_raw_image(dev_desc, &info, cmd, download_buffer, + download_bytes); +} diff --git a/include/fb_mmc.h b/include/fb_mmc.h new file mode 100644 index 0000000..1ad1d13 --- /dev/null +++ b/include/fb_mmc.h @@ -0,0 +1,8 @@ +/* + * Copyright 2014 Broadcom Corporation. + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +void fb_mmc_flash_write(const char *cmd, void *download_buffer, + unsigned int download_bytes, char *response);