From patchwork Mon Feb 29 22:25:54 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 590198 X-Patchwork-Delegate: sjg@chromium.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 774E6140B97 for ; Tue, 1 Mar 2016 09:29:42 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b=naWC4dcX; dkim-atps=neutral Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 9AA3FA763D; Mon, 29 Feb 2016 23:28:11 +0100 (CET) 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 vaYp5wgsFqGB; Mon, 29 Feb 2016 23:28:11 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 42BA8A763C; Mon, 29 Feb 2016 23:27:21 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 7A4FEA7610 for ; Mon, 29 Feb 2016 23:26:49 +0100 (CET) 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 VqppD5-WLzV4 for ; Mon, 29 Feb 2016 23:26:49 +0100 (CET) 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-oi0-f44.google.com (mail-oi0-f44.google.com [209.85.218.44]) by theia.denx.de (Postfix) with ESMTPS id 48E06A7607 for ; Mon, 29 Feb 2016 23:26:42 +0100 (CET) Received: by mail-oi0-f44.google.com with SMTP id c203so23572402oia.2 for ; Mon, 29 Feb 2016 14:26:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=V21A0ir9Vk2pIO1x5p40h2iZh56ODvDIbV88BqRkj4U=; b=naWC4dcXO/EF+3EYrB2mH+6pZLaW61NIqFNbA4VNDBa1imIAj54V/2+LOts27awWEU KbAVFPVqL8WziKwCtHTug7udTLLfbzeZaN5CLd+lmyJ2o4/Z42kmP9EOC/96YY4FHaSZ BSdZ/rL+/KHNCO+ciTdPLQqK8+8Ed+S+RNL/cUgq80dXuEEavtmVDmTFaja/TaY9ZUtp tA4LSJXreo14kqtzaA9+WSsfvR6FXj3vJdABvHd5+QLsA8iyKWaRdUjFg/yIJajXJTq1 ejtcjulkP0VOrJVcYhOcdQUg2/e1sBAU3LJBvMk1ZxV3G97z1+A90ZkzdA5xTMTfCH/q 2HxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=V21A0ir9Vk2pIO1x5p40h2iZh56ODvDIbV88BqRkj4U=; b=mZ/Rg1Z7tWCxUFv0sH+zoNn4hQXilZJYBDuw329T2b8ZFT+1SoVKz8bUMmn+xA2I2B hWVDGN/VGBfxa8Qzq6VLzvsY+4jaX7BMjIm6Mm593LxCkrno8M8AhYZD5q/hNovrYt+e 4Pys2gWt8I0MM4+kxTEsZZOIiTjwo16rSAUnwqiAVMiPJ+c6b/PYwRukMRBADG1JqMSG fkfYR6yNyUMabiXmLRM158vQf7Ny5zSAz+PxJyWVwv0MZhPUagWfvUU8LAGEpTZWpC4d 5bqchB0XK0w6y9AooHFhKmFFgeDVwVPwI0ChhghSOcqOX/OR7fbysPLc7nKWQqP+5+qG ivQA== X-Gm-Message-State: AD7BkJJLtNVZ+XsZ/PSrjwethmyLW12Gj4xMyfWyUlEQjIVhOlE8oxnPZJ7GcSWxKzsue51e X-Received: by 10.202.228.10 with SMTP id b10mr13218356oih.32.1456784801739; Mon, 29 Feb 2016 14:26:41 -0800 (PST) Received: from kaki.bld.corp.google.com ([172.29.216.32]) by smtp.gmail.com with ESMTPSA id k1sm19491369obz.22.2016.02.29.14.26.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 29 Feb 2016 14:26:37 -0800 (PST) Received: by kaki.bld.corp.google.com (Postfix, from userid 121222) id 85BC42226AC; Mon, 29 Feb 2016 15:26:30 -0700 (MST) From: Simon Glass To: U-Boot Mailing List Date: Mon, 29 Feb 2016 15:25:54 -0700 Message-Id: <1456784765-10788-22-git-send-email-sjg@chromium.org> X-Mailer: git-send-email 2.7.0.rc3.207.g0ac5344 In-Reply-To: <1456784765-10788-2-git-send-email-sjg@chromium.org> References: <1456784765-10788-2-git-send-email-sjg@chromium.org> Cc: Marek Vasut , Tom Rini , Stephen Warren Subject: [U-Boot] [PATCH v2 21/32] dm: usb: Tidy up storage code ready for driver model conversion X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Adjust a few things so that the addition of driver-models support involved adding code rather than also changing it. This makes the patches easier to review. Signed-off-by: Simon Glass Reviewed-by: Marek Vasut --- Changes in v2: None common/usb_storage.c | 117 +++++++++++++++++++++++++++------------------------ 1 file changed, 61 insertions(+), 56 deletions(-) diff --git a/common/usb_storage.c b/common/usb_storage.c index f2d2ad9..0475123 100644 --- a/common/usb_storage.c +++ b/common/usb_storage.c @@ -142,6 +142,7 @@ static void usb_show_progress(void) */ int usb_stor_info(void) { + int count = 0; int i; if (usb_max_devs > 0) { @@ -152,7 +153,11 @@ int usb_stor_info(void) return 0; } - printf("No storage devices, perhaps not 'usb start'ed..?\n"); + if (!count) { + printf("No storage devices, perhaps not 'usb start'ed..?\n"); + return 1; + } + return 1; } @@ -171,9 +176,12 @@ static unsigned int usb_get_max_lun(struct us_data *us) return (len > 0) ? *result : 0; } -static int usb_stor_probe_device(struct usb_device *dev) +static int usb_stor_probe_device(struct usb_device *udev) { - if (dev == NULL) + int lun, max_lun; + int start; + + if (udev == NULL) return -ENOENT; /* no more devices available */ /* We don't have space to even probe if we hit the maximum */ @@ -184,36 +192,36 @@ static int usb_stor_probe_device(struct usb_device *dev) } debug("\n\nProbing for storage\n"); - if (usb_storage_probe(dev, 0, &usb_stor[usb_max_devs])) { - /* OK, it's a storage device. Iterate over its LUNs - * and populate `usb_dev_desc'. - */ - int lun, max_lun, start = usb_max_devs; - - max_lun = usb_get_max_lun(&usb_stor[usb_max_devs]); - for (lun = 0; - lun <= max_lun && usb_max_devs < USB_MAX_STOR_DEV; - lun++) { - struct blk_desc *blkdev; - - blkdev = &usb_dev_desc[usb_max_devs]; - memset(blkdev, '\0', sizeof(struct blk_desc)); - blkdev->if_type = IF_TYPE_USB; - blkdev->devnum = usb_max_devs; - blkdev->part_type = PART_TYPE_UNKNOWN; - blkdev->target = 0xff; - blkdev->type = DEV_TYPE_UNKNOWN; - blkdev->block_read = usb_stor_read; - blkdev->block_write = usb_stor_write; - blkdev->lun = lun; - blkdev->priv = dev; - - if (usb_stor_get_info(dev, &usb_stor[start], - &usb_dev_desc[usb_max_devs]) == - 1) { - usb_max_devs++; - debug("%s: Found device %p\n", __func__, dev); - } + if (!usb_storage_probe(udev, 0, &usb_stor[usb_max_devs])) + return 0; + + /* + * OK, it's a storage device. Iterate over its LUNs and populate + * usb_dev_desc' + */ + start = usb_max_devs; + + max_lun = usb_get_max_lun(&usb_stor[usb_max_devs]); + for (lun = 0; lun <= max_lun && usb_max_devs < USB_MAX_STOR_DEV; + lun++) { + struct blk_desc *blkdev; + + blkdev = &usb_dev_desc[usb_max_devs]; + memset(blkdev, '\0', sizeof(struct blk_desc)); + blkdev->if_type = IF_TYPE_USB; + blkdev->devnum = usb_max_devs; + blkdev->part_type = PART_TYPE_UNKNOWN; + blkdev->target = 0xff; + blkdev->type = DEV_TYPE_UNKNOWN; + blkdev->block_read = usb_stor_read; + blkdev->block_write = usb_stor_write; + blkdev->lun = lun; + blkdev->priv = udev; + + if (usb_stor_get_info(udev, &usb_stor[start], + &usb_dev_desc[usb_max_devs]) == 1) { + usb_max_devs++; + debug("%s: Found device %p\n", __func__, udev); } } @@ -1029,36 +1037,33 @@ static void usb_bin_fixup(struct usb_device_descriptor descriptor, static unsigned long usb_stor_read(struct blk_desc *block_dev, lbaint_t blknr, lbaint_t blkcnt, void *buffer) { - int device = block_dev->devnum; lbaint_t start, blks; uintptr_t buf_addr; unsigned short smallblks; - struct usb_device *dev; + struct usb_device *udev; struct us_data *ss; int retry; ccb *srb = &usb_ccb; if (blkcnt == 0) return 0; - - device &= 0xff; /* Setup device */ - debug("\nusb_read: dev %d\n", device); - dev = usb_dev_desc[device].priv; - if (!dev) { + debug("\nusb_read: udev %d\n", block_dev->devnum); + udev = usb_dev_desc[block_dev->devnum].priv; + if (!udev) { debug("%s: No device\n", __func__); return 0; } - ss = (struct us_data *)dev->privptr; + ss = (struct us_data *)udev->privptr; usb_disable_asynch(1); /* asynch transfer not allowed */ - srb->lun = usb_dev_desc[device].lun; + srb->lun = block_dev->lun; buf_addr = (uintptr_t)buffer; start = blknr; blks = blkcnt; - debug("\nusb_read: dev %d startblk " LBAF ", blccnt " LBAF - " buffer %" PRIxPTR "\n", device, start, blks, buf_addr); + debug("\nusb_read: dev %d startblk " LBAF ", blccnt " LBAF " buffer %" + PRIxPTR "\n", block_dev->devnum, start, blks, buf_addr); do { /* XXX need some comment here */ @@ -1071,7 +1076,7 @@ static unsigned long usb_stor_read(struct blk_desc *block_dev, lbaint_t blknr, retry_it: if (smallblks == USB_MAX_XFER_BLK) usb_show_progress(); - srb->datalen = usb_dev_desc[device].blksz * smallblks; + srb->datalen = block_dev->blksz * smallblks; srb->pdata = (unsigned char *)buf_addr; if (usb_read_10(srb, ss, start, smallblks)) { debug("Read ERROR\n"); @@ -1100,11 +1105,10 @@ retry_it: static unsigned long usb_stor_write(struct blk_desc *block_dev, lbaint_t blknr, lbaint_t blkcnt, const void *buffer) { - int device = block_dev->devnum; lbaint_t start, blks; uintptr_t buf_addr; unsigned short smallblks; - struct usb_device *dev; + struct usb_device *udev; struct us_data *ss; int retry; ccb *srb = &usb_ccb; @@ -1112,23 +1116,24 @@ static unsigned long usb_stor_write(struct blk_desc *block_dev, lbaint_t blknr, if (blkcnt == 0) return 0; - device &= 0xff; /* Setup device */ - debug("\nusb_write: dev %d\n", device); - dev = usb_dev_desc[device].priv; - if (!dev) + debug("\nusb_read: udev %d\n", block_dev->devnum); + udev = usb_dev_desc[block_dev->devnum].priv; + if (!udev) { + debug("%s: No device\n", __func__); return 0; - ss = (struct us_data *)dev->privptr; + } + ss = (struct us_data *)udev->privptr; usb_disable_asynch(1); /* asynch transfer not allowed */ - srb->lun = usb_dev_desc[device].lun; + srb->lun = block_dev->lun; buf_addr = (uintptr_t)buffer; start = blknr; blks = blkcnt; - debug("\nusb_write: dev %d startblk " LBAF ", blccnt " LBAF - " buffer %" PRIxPTR "\n", device, start, blks, buf_addr); + debug("\nusb_write: dev %d startblk " LBAF ", blccnt " LBAF " buffer %" + PRIxPTR "\n", block_dev->devnum, start, blks, buf_addr); do { /* If write fails retry for max retry count else @@ -1143,7 +1148,7 @@ static unsigned long usb_stor_write(struct blk_desc *block_dev, lbaint_t blknr, retry_it: if (smallblks == USB_MAX_XFER_BLK) usb_show_progress(); - srb->datalen = usb_dev_desc[device].blksz * smallblks; + srb->datalen = block_dev->blksz * smallblks; srb->pdata = (unsigned char *)buf_addr; if (usb_write_10(srb, ss, start, smallblks)) { debug("Write ERROR\n");