From patchwork Thu Oct 19 01:22:01 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Suneel Garapati X-Patchwork-Id: 827905 X-Patchwork-Delegate: marek.vasut@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="bmPJb5gn"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3yHWPP0S51z9t3l for ; Thu, 19 Oct 2017 12:22:16 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id AB3BBC21EC7; Thu, 19 Oct 2017 01:22:08 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_MSPIKE_H2, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 5E5E8C21DE9; Thu, 19 Oct 2017 01:22:06 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 6D969C21DE9; Thu, 19 Oct 2017 01:22:05 +0000 (UTC) Received: from mail-pf0-f195.google.com (mail-pf0-f195.google.com [209.85.192.195]) by lists.denx.de (Postfix) with ESMTPS id B6CD8C21DA3 for ; Thu, 19 Oct 2017 01:22:04 +0000 (UTC) Received: by mail-pf0-f195.google.com with SMTP id x7so5288871pfa.1 for ; Wed, 18 Oct 2017 18:22:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=ucz+1TFFTmDktrQEyyKvYe+JhIqQ7ymxX4ne5LY8J3Q=; b=bmPJb5gnP4idBfBO6/DZwFz0BP7qbLf1fl7nbxU0quQCUKL2Hevqk9DBgX/rXrk1aD I3ePHUjMATaqOn5VxhgnanIrGxblOjN2eJUzpuBfeE9jWUOW3awXcGr/XM9MiIiDhMld 0xq6ifyPDmG7W6SaD7s9QYEjFJXJUXu64HKmghhR1gwqlqrPivL5dgPQbQOwaRoAKp2Q J6KGHrxWzDUEQzSy1oJPYSV3tDr9ynufetPg29qqpx592Y8QhqIFsnLjptuYAl9PvOOM UT0mRA+fv2WBZaFhLkGnMpoZkHbwvzjVCc6s50i59HTBGGeO3votmsNwGHdfN3LiV4PK tjWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=ucz+1TFFTmDktrQEyyKvYe+JhIqQ7ymxX4ne5LY8J3Q=; b=FUpIEv8fO71c5r8r0Z5nrwiVrsynArB4Bpy++x+Io+oP/jZ3n0dNfSVKO7oQGPw2Ed 4H3rJMd3+qMaSWYQrqXNYnPPooWPUG4BgXA6hvgFU+SRBvN9LLcFKOPXSNT07dqI4fUa 192qXTLLZjLLBKunPt+W2+Dk51b8pfcaj/1kjF8Iej/MRZ01+C9H5JbLo5oiCTdgYBo0 l/Yxk+vSjdmFAB1JMC6RCWf1HLtq4qYOtuqyRoOcPcShfDlwRPgRFFtTzkFNW8Chq/7r BK9Fj7EgeXnzfdp/U1OVVmPeE7sTb2FWkJrQxJrUfQLrRNe7pznmTGGtrF7FAAJS7ats HK9Q== X-Gm-Message-State: AMCzsaURsisxCeGhPd0VpnEkp5NS6zVH03Egz00AShTidcEh5FVjUPz0 LMSJlfsoZGGbz0MjrYm2wVY= X-Google-Smtp-Source: AOwi7QCqFFun3L/Fu3xpM5QyB/UDgJHPEJS6XppP8w+40sGkghaapeSLBFOuf7mRUnpUDwxzyzZ//w== X-Received: by 10.84.131.111 with SMTP id 102mr16952076pld.178.1508376123261; Wed, 18 Oct 2017 18:22:03 -0700 (PDT) Received: from suneel.hsd1.ca.comcast.net ([2601:646:8e00:e521:3d97:8c91:da4f:b349]) by smtp.gmail.com with ESMTPSA id a17sm27599458pfk.173.2017.10.18.18.22.02 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 18 Oct 2017 18:22:02 -0700 (PDT) From: Suneel Garapati To: Stefan Roese Date: Wed, 18 Oct 2017 18:22:01 -0700 Message-Id: <1508376121-26729-1-git-send-email-suneelglinux@gmail.com> X-Mailer: git-send-email 2.7.4 Cc: Marek Vasut , u-boot@lists.denx.de, Michal Simek Subject: [U-Boot] [PATCH v6] cmd: usb: ignore blk, emulation devices in usb tree/info display X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" usb tree/info commands iterate over all usb uclass devices recursively. blk uclass child devices are created for mass storage, treating these as usb uclass devices and referencing usb config interface descriptors cause crash. To fix, ignore blk and usb_emul uclass devices(sandbox) in usb_show_info and usb_tree_graph. also avoid addition of preamble for blk uclass child devices, otherwise tree dump gets messed up. Signed-off-by: Suneel Garapati Reviewed-by: Bin Meng Tested-by: Bin Meng Reviewed-by: Simon Glass --- Changes v6: - re-write commit message with detail Changes v5: - add usb_emul to ignore list in usb_show_info - modify description Changes v4: - do not set preamble if child is block device for mass storage Changes v3: - remove 'check on parent uclass' in description Changes v2: - remove check on parent uclass Changes v1: - add separate check on blk uclass - modify description - add separate check on parent uclass as usb cmd/usb.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/cmd/usb.c b/cmd/usb.c index d95bcf5..907debe 100644 --- a/cmd/usb.c +++ b/cmd/usb.c @@ -349,6 +349,16 @@ static void usb_show_tree_graph(struct usb_device *dev, char *pre) printf(" %s", pre); #ifdef CONFIG_DM_USB has_child = device_has_active_children(dev->dev); + if (device_get_uclass_id(dev->dev) == UCLASS_MASS_STORAGE) { + struct udevice *child; + + for (device_find_first_child(dev->dev, &child); + child; + device_find_next_child(&child)) { + if (device_get_uclass_id(child) == UCLASS_BLK) + has_child = 0; + } + } #else /* check if the device has connected children */ int i; @@ -414,8 +424,12 @@ static void usb_show_tree_graph(struct usb_device *dev, char *pre) udev = dev_get_parent_priv(child); - /* Ignore emulators, we only want real devices */ - if (device_get_uclass_id(child) != UCLASS_USB_EMUL) { + /* + * Ignore emulators and block child devices, we only want + * real devices + */ + if ((device_get_uclass_id(child) != UCLASS_USB_EMUL) && + (device_get_uclass_id(child) != UCLASS_BLK)) { usb_show_tree_graph(udev, pre); pre[index] = 0; } @@ -605,7 +619,9 @@ static void usb_show_info(struct usb_device *udev) for (device_find_first_child(udev->dev, &child); child; device_find_next_child(&child)) { - if (device_active(child)) { + if (device_active(child) && + (device_get_uclass_id(child) != UCLASS_USB_EMUL) && + (device_get_uclass_id(child) != UCLASS_BLK)) { udev = dev_get_parent_priv(child); usb_show_info(udev); }