Received: by 2002:a05:6a10:eb17:0:0:0:0 with SMTP id hx23csp918923pxb; Fri, 3 Sep 2021 17:22:54 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzsh5FwPiWyMhqp8C5SUyYMKvqUG7p8xQh/we/vQuBJ01oqQQnOgX3qnhWPpt/TCf50hvMe X-Received: by 2002:a17:907:b06:: with SMTP id h6mr1623293ejl.130.1630714974169; Fri, 03 Sep 2021 17:22:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1630714974; cv=none; d=google.com; s=arc-20160816; b=XfbzRsuWRb3Zj7zI1tESCiZTuvfcSty8+JDYNVIOOkUeQ7+V9y6tyl0o8nBs8YHWGj q665Vz/UtIB2I553C6kCEZTCJn1CiRFJvwG81CNfTTHSO/+PW+dApKSFPgvyRnraqMz/ X9ZhtYXt6mJfvZ9FD+3ny8ZFmJXE/DwKlr+ByoIHQ/lYXVYtqjxPWaq8DF3Gelog0xBd 6I/ouOL4YmlCvsOe3hivuaf4vUVjn13ltgu0GzlndQzcEmf63bIC953IiThS05xEwrCi M6HukA5ojiIm+GY8jxHSVIWE+LW8V+/vMdQt9aPd8gQJ0b5+YvIXH+d3D6q8t/6bJNQy 8WBA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:references:mime-version :message-id:in-reply-to:date:dkim-signature; bh=CmiOovZTt1y4cIWEfI47PRt3/MlHznjnR9cha/mAR4c=; b=qQXJTqtSikpWQ3FxvyNUk2TIQ8tWdF27naYyjx3uVSe7BxbB1pb8bqVqaVUr0A+TUi s25RuroUBd+RaVdLH84diuHfTIRfhdTCz5HLsjIwlEAscszCeS8zH3r46uS9Qh1at+0a alzZ2IjwYunCnpvaiNBASfasePgyhs1+ubKWh+Nx+uDfqsjYzbgZNeuoMSh7UHb1sNSf cgnr7BgWt052Rnx79SlT4j7c0q7I27o/ZCzXKBpv5r/j6HZLEKRKpGA/pyBsn6dExhpT 1dcwhgYW9VzKBW27BO0IsbGsiZgRpVY9VLKr38dqWTKILVZtny97DBOszNO6NyidKDyO jbRA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b="YwL/ZRmV"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id h8si737664ejj.750.2021.09.03.17.22.19; Fri, 03 Sep 2021 17:22:54 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b="YwL/ZRmV"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1350789AbhIDAGw (ORCPT + 99 others); Fri, 3 Sep 2021 20:06:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57758 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1350665AbhIDAGu (ORCPT ); Fri, 3 Sep 2021 20:06:50 -0400 Received: from mail-yb1-xb49.google.com (mail-yb1-xb49.google.com [IPv6:2607:f8b0:4864:20::b49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2BD0DC061575 for ; Fri, 3 Sep 2021 17:05:50 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id a62-20020a254d410000b0290592f360b0ccso938632ybb.14 for ; Fri, 03 Sep 2021 17:05:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=CmiOovZTt1y4cIWEfI47PRt3/MlHznjnR9cha/mAR4c=; b=YwL/ZRmVL05ExLE8Uye2bq5sdTwSfXVFJvEJM3RSL7OVnlT4viA1ZPsdqJbNE+RcMg UgbROXkOc+awabmhS8Dhd/IfE5Ni+56xWlHUf4Eqgphst0spjSiEsxqxlBXxV6m2Ah+P LaZabo3SchFKsQZrmYELQEAmKQVR0XJQMx1Y7YMcU2RCpessU4+lEZPRoEI+GypG8SfW PwCI/fte/EJW9+wuc09PN7EbczrDfoIoDp+TcylGNLZ3K+R7g3WutymywjInJTwNdUKp tOKHhoauY9ddyjAT4cxP8s+rsbMV7xjnf5qPR1oJUosL0E12HM383vRUS7Me6ht+ZctT ydbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=CmiOovZTt1y4cIWEfI47PRt3/MlHznjnR9cha/mAR4c=; b=ZonN92nlggeGHuzqruZDOARo79h/qERExd6PWl+99PJviNQCnHFEJPTWeRcgrbLKgD JQqV3xUNj+/fu2IILW3WiISmpSpDNr0sp12W6TxPMtx/XVNSQc0FG90weKC8m0I4421s ESaypw8qE2qxhw/2WDAekBmP88nT5ReTLuHk/9bjAl9YTC4t7RW6w35rFF1BKLGWLTgB 4DObkJkIW9rorZL1+saE2gXoRw9fz/0Ifk99JsQWzePLOxAQrfOnyusvgXkqCs0WCoYd jIIA6kKopFt5GSC12m0n0yRM7O40+cm9zrKBxrdysSJkQ7CYoMTaO9Yj5jEKaRO+nOsq kiGw== X-Gm-Message-State: AOAM531A1v/gfsHp/w84TYEy32g9mIJuHbKvnH2m4x6g+nDQ0LPgR6dS RgVcvksx9cDWNuG9jhs0Dt4oCZTg1zT37b0= X-Received: from saravanak.san.corp.google.com ([2620:15c:2d:3:b45b:ca56:952a:2176]) (user=saravanak job=sendgmr) by 2002:a25:b9cf:: with SMTP id y15mr2035451ybj.110.1630713949404; Fri, 03 Sep 2021 17:05:49 -0700 (PDT) Date: Fri, 3 Sep 2021 17:05:41 -0700 In-Reply-To: <20210904000543.2019010-1-saravanak@google.com> Message-Id: <20210904000543.2019010-2-saravanak@google.com> Mime-Version: 1.0 References: <20210904000543.2019010-1-saravanak@google.com> X-Mailer: git-send-email 2.33.0.153.gba50c8fa24-goog Subject: [PATCH v3 1/2] drivers: bus: simple-pm-bus: Add support for probing simple bus only devices From: Saravana Kannan To: Russell King , Neil Armstrong , Geert Uytterhoeven , Magnus Damm , Tony Lindgren , Catalin Marinas , Will Deacon , Damien Le Moal Cc: Saravana Kannan , Ulf Hansson , Rob Herring , kernel-team@android.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-oxnas@groups.io, linux-renesas-soc@vger.kernel.org, linux-omap@vger.kernel.org, linux-riscv@lists.infradead.org Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org fw_devlink could end up creating device links for bus only devices. However, bus only devices don't get probed and can block probe() or sync_state() [1] call backs of other devices. To avoid this, probe these devices using the simple-pm-bus driver. However, there are instances of devices that are not simple buses (they get probed by their specific drivers) that also list the "simple-bus" (or other bus only compatible strings) in their compatible property to automatically populate their child devices. We still want these devices to get probed by their specific drivers. So, we make sure this driver only probes devices that are only buses. [1] - https://lore.kernel.org/lkml/CAPDyKFo9Bxremkb1dDrr4OcXSpE0keVze94Cm=zrkOVxHHxBmQ@mail.gmail.com/ Signed-off-by: Saravana Kannan Tested-by: Saravana Kannan --- drivers/bus/simple-pm-bus.c | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/drivers/bus/simple-pm-bus.c b/drivers/bus/simple-pm-bus.c index 01a3d0cd08ed..3e086a9f34cb 100644 --- a/drivers/bus/simple-pm-bus.c +++ b/drivers/bus/simple-pm-bus.c @@ -13,11 +13,26 @@ #include #include - static int simple_pm_bus_probe(struct platform_device *pdev) { - const struct of_dev_auxdata *lookup = dev_get_platdata(&pdev->dev); - struct device_node *np = pdev->dev.of_node; + const struct device *dev = &pdev->dev; + const struct of_dev_auxdata *lookup = dev_get_platdata(dev); + struct device_node *np = dev->of_node; + const struct of_device_id *match; + + match = of_match_device(dev->driver->of_match_table, dev); + + /* + * These are transparent bus devices (not simple-pm-bus matches) that + * have their child nodes populated automatically. So, don't need to + * do anything more. + */ + if (match && match->data) { + if (of_property_match_string(np, "compatible", match->compatible) == 0) + return 0; + else + return -ENODEV; + } dev_dbg(&pdev->dev, "%s\n", __func__); @@ -31,14 +46,25 @@ static int simple_pm_bus_probe(struct platform_device *pdev) static int simple_pm_bus_remove(struct platform_device *pdev) { + const void *data = of_device_get_match_data(&pdev->dev); + + if (data) + return 0; + dev_dbg(&pdev->dev, "%s\n", __func__); pm_runtime_disable(&pdev->dev); return 0; } +#define ONLY_BUS ((void *) 1) /* Match if the device is only a bus. */ + static const struct of_device_id simple_pm_bus_of_match[] = { { .compatible = "simple-pm-bus", }, + { .compatible = "simple-bus", .data = ONLY_BUS }, + { .compatible = "simple-mfd", .data = ONLY_BUS }, + { .compatible = "isa", .data = ONLY_BUS }, + { .compatible = "arm,amba-bus", .data = ONLY_BUS }, { /* sentinel */ } }; MODULE_DEVICE_TABLE(of, simple_pm_bus_of_match); -- 2.33.0.153.gba50c8fa24-goog