From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CC87CC7618B for ; Wed, 24 Jul 2019 10:44:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 9B657229ED for ; Wed, 24 Jul 2019 10:44:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727083AbfGXKou (ORCPT ); Wed, 24 Jul 2019 06:44:50 -0400 Received: from foss.arm.com ([217.140.110.172]:38698 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726070AbfGXKor (ORCPT ); Wed, 24 Jul 2019 06:44:47 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 2B3B8337; Wed, 24 Jul 2019 03:44:47 -0700 (PDT) Received: from [10.1.197.57] (e110467-lin.cambridge.arm.com [10.1.197.57]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id E5AFA3F71F; Wed, 24 Jul 2019 03:44:45 -0700 (PDT) Subject: Re: [PATCH v3 7/7] platform: Add platform_find_device_by_driver() helper To: Suzuki K Poulose , linux-kernel@vger.kernel.org Cc: =?UTF-8?Q?Heiko_St=c3=bcbner?= , gregkh@linuxfoundation.org, rafael@kernel.org, Seung-Woo Kim , Sandy Huang , Inki Dae , Eric Anholt , linux-arm-kernel@lists.infradead.org References: <20190723221838.12024-1-suzuki.poulose@arm.com> <20190723221838.12024-8-suzuki.poulose@arm.com> From: Robin Murphy Message-ID: <0aa65066-98c4-4350-0d89-a68449abf224@arm.com> Date: Wed, 24 Jul 2019 11:44:44 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 MIME-Version: 1.0 In-Reply-To: <20190723221838.12024-8-suzuki.poulose@arm.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-GB Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 23/07/2019 23:18, Suzuki K Poulose wrote: > Provide a helper to lookup platform devices by matching device > driver in order to avoid drivers trying to use platform bus > internals. FWIW, this whole drm_match_add idiom really looks like it deserves factoring out into an of_platform_populate-style helper, but I guess aligning those subtle little differences is a non-trivial challenge. [and I am well aware of just how much of a big messy can of worms DRM device probing is in general] > Cc: Eric Anholt > Cc: Greg Kroah-Hartman > Cc: "Heiko Stübner" > Cc: Inki Dae > Cc: "Rafael J. Wysocki" > Cc: Sandy Huang > Cc: Seung-Woo Kim > Tested-by: Heiko Stuebner > Signed-off-by: Suzuki K Poulose > --- > drivers/base/platform.c | 14 ++++++++++++++ > drivers/gpu/drm/exynos/exynos_drm_drv.c | 9 +++------ > drivers/gpu/drm/mcde/mcde_drv.c | 3 +-- > drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 3 +-- > drivers/gpu/drm/vc4/vc4_drv.c | 3 +-- > include/linux/platform_device.h | 3 +++ > 6 files changed, 23 insertions(+), 12 deletions(-) > > diff --git a/drivers/base/platform.c b/drivers/base/platform.c > index 506a0175a5a7..a174ce5ea17c 100644 > --- a/drivers/base/platform.c > +++ b/drivers/base/platform.c > @@ -1197,6 +1197,20 @@ struct bus_type platform_bus_type = { > }; > EXPORT_SYMBOL_GPL(platform_bus_type); > > +/** > + * platform_find_device_by_driver - Find a platform device with a given Nit: "with" is easy to misinterpret there - my initial reaction to looking at this was "so why not just use driver_find_device()?". Maybe "which would match" might make it a bit clearer? Robin. > + * driver. > + * @start: The device to start the search from. > + * @drv: The device driver to look for. > + */ > +struct device *platform_find_device_by_driver(struct device *start, > + const struct device_driver *drv) > +{ > + return bus_find_device(&platform_bus_type, start, drv, > + (void *)platform_match); > +} > +EXPORT_SYMBOL_GPL(platform_find_device_by_driver); > + > int __init platform_bus_init(void) > { > int error; > diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c > index 58baf49d9926..badab94be2d6 100644 > --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c > +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c > @@ -242,9 +242,7 @@ static struct component_match *exynos_drm_match_add(struct device *dev) > if (!info->driver || !(info->flags & DRM_COMPONENT_DRIVER)) > continue; > > - while ((d = bus_find_device(&platform_bus_type, p, > - &info->driver->driver, > - (void *)platform_bus_type.match))) { > + while ((d = platform_find_device_by_driver(p, &info->driver->driver))) { > put_device(p); > > if (!(info->flags & DRM_FIMC_DEVICE) || > @@ -412,9 +410,8 @@ static void exynos_drm_unregister_devices(void) > if (!info->driver || !(info->flags & DRM_VIRTUAL_DEVICE)) > continue; > > - while ((dev = bus_find_device(&platform_bus_type, NULL, > - &info->driver->driver, > - (void *)platform_bus_type.match))) { > + while ((dev = platform_find_device_by_driver(NULL, > + &info->driver->driver))) { > put_device(dev); > platform_device_unregister(to_platform_device(dev)); > } > diff --git a/drivers/gpu/drm/mcde/mcde_drv.c b/drivers/gpu/drm/mcde/mcde_drv.c > index baf63fb6850a..c07abf9e201c 100644 > --- a/drivers/gpu/drm/mcde/mcde_drv.c > +++ b/drivers/gpu/drm/mcde/mcde_drv.c > @@ -477,8 +477,7 @@ static int mcde_probe(struct platform_device *pdev) > struct device_driver *drv = &mcde_component_drivers[i]->driver; > struct device *p = NULL, *d; > > - while ((d = bus_find_device(&platform_bus_type, p, drv, > - (void *)platform_bus_type.match))) { > + while ((d = platform_find_device_by_driver(p, drv))) { > put_device(p); > component_match_add(dev, &match, mcde_compare_dev, d); > p = d; > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c > index 53d2c5bd61dc..38dc26376961 100644 > --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c > @@ -330,8 +330,7 @@ static struct component_match *rockchip_drm_match_add(struct device *dev) > struct device *p = NULL, *d; > > do { > - d = bus_find_device(&platform_bus_type, p, &drv->driver, > - (void *)platform_bus_type.match); > + d = platform_find_device_by_driver(p, &drv->driver); > put_device(p); > p = d; > > diff --git a/drivers/gpu/drm/vc4/vc4_drv.c b/drivers/gpu/drm/vc4/vc4_drv.c > index bf11930e40e1..1551c8253bec 100644 > --- a/drivers/gpu/drm/vc4/vc4_drv.c > +++ b/drivers/gpu/drm/vc4/vc4_drv.c > @@ -237,8 +237,7 @@ static void vc4_match_add_drivers(struct device *dev, > struct device_driver *drv = &drivers[i]->driver; > struct device *p = NULL, *d; > > - while ((d = bus_find_device(&platform_bus_type, p, drv, > - (void *)platform_bus_type.match))) { > + while ((d = platform_find_device_by_driver(p, drv))) { > put_device(p); > component_match_add(dev, match, compare_dev, d); > p = d; > diff --git a/include/linux/platform_device.h b/include/linux/platform_device.h > index 9bc36b589827..37e15a935a42 100644 > --- a/include/linux/platform_device.h > +++ b/include/linux/platform_device.h > @@ -51,6 +51,9 @@ extern struct device platform_bus; > extern void arch_setup_pdev_archdata(struct platform_device *); > extern struct resource *platform_get_resource(struct platform_device *, > unsigned int, unsigned int); > +extern struct device * > +platform_find_device_by_driver(struct device *start, > + const struct device_driver *drv); > extern void __iomem * > devm_platform_ioremap_resource(struct platform_device *pdev, > unsigned int index); > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.3 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id EAEC6C7618B for ; Wed, 24 Jul 2019 10:44:53 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C168F229ED for ; Wed, 24 Jul 2019 10:44:53 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="tWOC/mA2" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C168F229ED Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender:Content-Type: Content-Transfer-Encoding:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=tcUGrCdUP+rJi23Y3l4pzd5FYRj6fVYDH7s0UvuXfTg=; b=tWOC/mA2BC6P7Z4GdrtjuWAcw aKlOqeluZ19SBCoshZRsx7DqHRLWn4JqkW0cBtB2v7UTJIoRTKj8W3t6MaSUYX82s9jsGILdm2NyQ UJngwRZ1d9KbrL2NmoLimpaeNpdR/h1E7Bre1b/T7FNTmwrXuwgj/CwgggV8ushnEiffciEKZGFxe TAfsd72NDU/i7Ip497SfZCNhmh6nmfhQZJsyKqNHkgPJeelcsJSP9nfNC1kxwXzg5SLZ0AdQfSkOE BEaWOeo+RK7ccGxwxBI2oX9zidetEDxl6foHfomfMRe5JVS5N2T56VFV0UAXhHlOslePCSdmDdk4i mRzNZErRQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hqElO-0005D9-TI; Wed, 24 Jul 2019 10:44:50 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hqElM-0005CX-BS for linux-arm-kernel@lists.infradead.org; Wed, 24 Jul 2019 10:44:49 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 2B3B8337; Wed, 24 Jul 2019 03:44:47 -0700 (PDT) Received: from [10.1.197.57] (e110467-lin.cambridge.arm.com [10.1.197.57]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id E5AFA3F71F; Wed, 24 Jul 2019 03:44:45 -0700 (PDT) Subject: Re: [PATCH v3 7/7] platform: Add platform_find_device_by_driver() helper To: Suzuki K Poulose , linux-kernel@vger.kernel.org References: <20190723221838.12024-1-suzuki.poulose@arm.com> <20190723221838.12024-8-suzuki.poulose@arm.com> From: Robin Murphy Message-ID: <0aa65066-98c4-4350-0d89-a68449abf224@arm.com> Date: Wed, 24 Jul 2019 11:44:44 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 MIME-Version: 1.0 In-Reply-To: <20190723221838.12024-8-suzuki.poulose@arm.com> Content-Language: en-GB X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190724_034448_486937_81377765 X-CRM114-Status: GOOD ( 24.55 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?Q?Heiko_St=c3=bcbner?= , rafael@kernel.org, gregkh@linuxfoundation.org, Seung-Woo Kim , Sandy Huang , Inki Dae , Eric Anholt , linux-arm-kernel@lists.infradead.org Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gMjMvMDcvMjAxOSAyMzoxOCwgU3V6dWtpIEsgUG91bG9zZSB3cm90ZToKPiBQcm92aWRlIGEg aGVscGVyIHRvIGxvb2t1cCBwbGF0Zm9ybSBkZXZpY2VzIGJ5IG1hdGNoaW5nIGRldmljZQo+IGRy aXZlciBpbiBvcmRlciB0byBhdm9pZCBkcml2ZXJzIHRyeWluZyB0byB1c2UgcGxhdGZvcm0gYnVz Cj4gaW50ZXJuYWxzLgoKRldJVywgdGhpcyB3aG9sZSBkcm1fbWF0Y2hfYWRkIGlkaW9tIHJlYWxs eSBsb29rcyBsaWtlIGl0IGRlc2VydmVzIApmYWN0b3Jpbmcgb3V0IGludG8gYW4gb2ZfcGxhdGZv cm1fcG9wdWxhdGUtc3R5bGUgaGVscGVyLCBidXQgSSBndWVzcyAKYWxpZ25pbmcgdGhvc2Ugc3Vi dGxlIGxpdHRsZSBkaWZmZXJlbmNlcyBpcyBhIG5vbi10cml2aWFsIGNoYWxsZW5nZS4KClthbmQg SSBhbSB3ZWxsIGF3YXJlIG9mIGp1c3QgaG93IG11Y2ggb2YgYSBiaWcgbWVzc3kgY2FuIG9mIHdv cm1zIERSTSAKZGV2aWNlIHByb2JpbmcgaXMgaW4gZ2VuZXJhbF0KCj4gQ2M6IEVyaWMgQW5ob2x0 IDxlcmljQGFuaG9sdC5uZXQ+Cj4gQ2M6IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQGxpbnV4 Zm91bmRhdGlvbi5vcmc+Cj4gQ2M6ICJIZWlrbyBTdMO8Ym5lciIgPGhlaWtvQHNudGVjaC5kZT4K PiBDYzogSW5raSBEYWUgPGlua2kuZGFlQHNhbXN1bmcuY29tPgo+IENjOiAiUmFmYWVsIEouIFd5 c29ja2kiIDxyYWZhZWxAa2VybmVsLm9yZz4KPiBDYzogU2FuZHkgSHVhbmcgPGhqY0Byb2NrLWNo aXBzLmNvbT4KPiBDYzogU2V1bmctV29vIEtpbSA8c3cwMzEyLmtpbUBzYW1zdW5nLmNvbT4KPiBU ZXN0ZWQtYnk6IEhlaWtvIFN0dWVibmVyIDxoZWlrb0BzbnRlY2guZGU+Cj4gU2lnbmVkLW9mZi1i eTogU3V6dWtpIEsgUG91bG9zZSA8c3V6dWtpLnBvdWxvc2VAYXJtLmNvbT4KPiAtLS0KPiAgIGRy aXZlcnMvYmFzZS9wbGF0Zm9ybS5jICAgICAgICAgICAgICAgICAgICAgfCAxNCArKysrKysrKysr KysrKwo+ICAgZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2Rydi5jICAgICB8ICA5 ICsrKy0tLS0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL21jZGUvbWNkZV9kcnYuYyAgICAgICAgICAg ICB8ICAzICstLQo+ICAgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9kcnYu YyB8ICAzICstLQo+ICAgZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmMgICAgICAgICAgICAg ICB8ICAzICstLQo+ICAgaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaCAgICAgICAgICAg ICB8ICAzICsrKwo+ICAgNiBmaWxlcyBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspLCAxMiBkZWxl dGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMgYi9kcml2 ZXJzL2Jhc2UvcGxhdGZvcm0uYwo+IGluZGV4IDUwNmEwMTc1YTVhNy4uYTE3NGNlNWVhMTdjIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCj4gKysrIGIvZHJpdmVycy9iYXNl L3BsYXRmb3JtLmMKPiBAQCAtMTE5Nyw2ICsxMTk3LDIwIEBAIHN0cnVjdCBidXNfdHlwZSBwbGF0 Zm9ybV9idXNfdHlwZSA9IHsKPiAgIH07Cj4gICBFWFBPUlRfU1lNQk9MX0dQTChwbGF0Zm9ybV9i dXNfdHlwZSk7Cj4gICAKPiArLyoqCj4gKyAqIHBsYXRmb3JtX2ZpbmRfZGV2aWNlX2J5X2RyaXZl ciAtIEZpbmQgYSBwbGF0Zm9ybSBkZXZpY2Ugd2l0aCBhIGdpdmVuCgpOaXQ6ICJ3aXRoIiBpcyBl YXN5IHRvIG1pc2ludGVycHJldCB0aGVyZSAtIG15IGluaXRpYWwgcmVhY3Rpb24gdG8gCmxvb2tp bmcgYXQgdGhpcyB3YXMgInNvIHdoeSBub3QganVzdCB1c2UgZHJpdmVyX2ZpbmRfZGV2aWNlKCk/ Ii4gTWF5YmUgCiJ3aGljaCB3b3VsZCBtYXRjaCIgbWlnaHQgbWFrZSBpdCBhIGJpdCBjbGVhcmVy PwoKUm9iaW4uCgo+ICsgKiBkcml2ZXIuCj4gKyAqIEBzdGFydDogVGhlIGRldmljZSB0byBzdGFy dCB0aGUgc2VhcmNoIGZyb20uCj4gKyAqIEBkcnY6IFRoZSBkZXZpY2UgZHJpdmVyIHRvIGxvb2sg Zm9yLgo+ICsgKi8KPiArc3RydWN0IGRldmljZSAqcGxhdGZvcm1fZmluZF9kZXZpY2VfYnlfZHJp dmVyKHN0cnVjdCBkZXZpY2UgKnN0YXJ0LAo+ICsJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBkZXZp Y2VfZHJpdmVyICpkcnYpCj4gK3sKPiArCXJldHVybiBidXNfZmluZF9kZXZpY2UoJnBsYXRmb3Jt X2J1c190eXBlLCBzdGFydCwgZHJ2LAo+ICsJCQkgICAgICAgKHZvaWQgKilwbGF0Zm9ybV9tYXRj aCk7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwocGxhdGZvcm1fZmluZF9kZXZpY2VfYnlfZHJp dmVyKTsKPiArCj4gICBpbnQgX19pbml0IHBsYXRmb3JtX2J1c19pbml0KHZvaWQpCj4gICB7Cj4g ICAJaW50IGVycm9yOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5v c19kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHJ2LmMKPiBp bmRleCA1OGJhZjQ5ZDk5MjYuLmJhZGFiOTRiZTJkNiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHJ2LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZXh5 bm9zL2V4eW5vc19kcm1fZHJ2LmMKPiBAQCAtMjQyLDkgKzI0Miw3IEBAIHN0YXRpYyBzdHJ1Y3Qg Y29tcG9uZW50X21hdGNoICpleHlub3NfZHJtX21hdGNoX2FkZChzdHJ1Y3QgZGV2aWNlICpkZXYp Cj4gICAJCWlmICghaW5mby0+ZHJpdmVyIHx8ICEoaW5mby0+ZmxhZ3MgJiBEUk1fQ09NUE9ORU5U X0RSSVZFUikpCj4gICAJCQljb250aW51ZTsKPiAgIAo+IC0JCXdoaWxlICgoZCA9IGJ1c19maW5k X2RldmljZSgmcGxhdGZvcm1fYnVzX3R5cGUsIHAsCj4gLQkJCQkJICAgICZpbmZvLT5kcml2ZXIt PmRyaXZlciwKPiAtCQkJCQkgICAgKHZvaWQgKilwbGF0Zm9ybV9idXNfdHlwZS5tYXRjaCkpKSB7 Cj4gKwkJd2hpbGUgKChkID0gcGxhdGZvcm1fZmluZF9kZXZpY2VfYnlfZHJpdmVyKHAsICZpbmZv LT5kcml2ZXItPmRyaXZlcikpKSB7Cj4gICAJCQlwdXRfZGV2aWNlKHApOwo+ICAgCj4gICAJCQlp ZiAoIShpbmZvLT5mbGFncyAmIERSTV9GSU1DX0RFVklDRSkgfHwKPiBAQCAtNDEyLDkgKzQxMCw4 IEBAIHN0YXRpYyB2b2lkIGV4eW5vc19kcm1fdW5yZWdpc3Rlcl9kZXZpY2VzKHZvaWQpCj4gICAJ CWlmICghaW5mby0+ZHJpdmVyIHx8ICEoaW5mby0+ZmxhZ3MgJiBEUk1fVklSVFVBTF9ERVZJQ0Up KQo+ICAgCQkJY29udGludWU7Cj4gICAKPiAtCQl3aGlsZSAoKGRldiA9IGJ1c19maW5kX2Rldmlj ZSgmcGxhdGZvcm1fYnVzX3R5cGUsIE5VTEwsCj4gLQkJCQkJICAgICZpbmZvLT5kcml2ZXItPmRy aXZlciwKPiAtCQkJCQkgICAgKHZvaWQgKilwbGF0Zm9ybV9idXNfdHlwZS5tYXRjaCkpKSB7Cj4g KwkJd2hpbGUgKChkZXYgPSBwbGF0Zm9ybV9maW5kX2RldmljZV9ieV9kcml2ZXIoTlVMTCwKPiAr CQkJCQkJJmluZm8tPmRyaXZlci0+ZHJpdmVyKSkpIHsKPiAgIAkJCXB1dF9kZXZpY2UoZGV2KTsK PiAgIAkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHRvX3BsYXRmb3JtX2RldmljZShkZXYp KTsKPiAgIAkJfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWNkZS9tY2RlX2Rydi5j IGIvZHJpdmVycy9ncHUvZHJtL21jZGUvbWNkZV9kcnYuYwo+IGluZGV4IGJhZjYzZmI2ODUwYS4u YzA3YWJmOWUyMDFjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tY2RlL21jZGVfZHJ2 LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWNkZS9tY2RlX2Rydi5jCj4gQEAgLTQ3Nyw4ICs0 NzcsNyBAQCBzdGF0aWMgaW50IG1jZGVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKPiAgIAkJc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiA9ICZtY2RlX2NvbXBvbmVudF9kcml2 ZXJzW2ldLT5kcml2ZXI7Cj4gICAJCXN0cnVjdCBkZXZpY2UgKnAgPSBOVUxMLCAqZDsKPiAgIAo+ IC0JCXdoaWxlICgoZCA9IGJ1c19maW5kX2RldmljZSgmcGxhdGZvcm1fYnVzX3R5cGUsIHAsIGRy diwKPiAtCQkJCQkgICAgKHZvaWQgKilwbGF0Zm9ybV9idXNfdHlwZS5tYXRjaCkpKSB7Cj4gKwkJ d2hpbGUgKChkID0gcGxhdGZvcm1fZmluZF9kZXZpY2VfYnlfZHJpdmVyKHAsIGRydikpKSB7Cj4g ICAJCQlwdXRfZGV2aWNlKHApOwo+ICAgCQkJY29tcG9uZW50X21hdGNoX2FkZChkZXYsICZtYXRj aCwgbWNkZV9jb21wYXJlX2RldiwgZCk7Cj4gICAJCQlwID0gZDsKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZHJ2LmMKPiBpbmRleCA1M2QyYzViZDYxZGMuLjM4ZGMy NjM3Njk2MSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBf ZHJtX2Rydi5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9k cnYuYwo+IEBAIC0zMzAsOCArMzMwLDcgQEAgc3RhdGljIHN0cnVjdCBjb21wb25lbnRfbWF0Y2gg KnJvY2tjaGlwX2RybV9tYXRjaF9hZGQoc3RydWN0IGRldmljZSAqZGV2KQo+ICAgCQlzdHJ1Y3Qg ZGV2aWNlICpwID0gTlVMTCwgKmQ7Cj4gICAKPiAgIAkJZG8gewo+IC0JCQlkID0gYnVzX2ZpbmRf ZGV2aWNlKCZwbGF0Zm9ybV9idXNfdHlwZSwgcCwgJmRydi0+ZHJpdmVyLAo+IC0JCQkJCSAgICAo dm9pZCAqKXBsYXRmb3JtX2J1c190eXBlLm1hdGNoKTsKPiArCQkJZCA9IHBsYXRmb3JtX2ZpbmRf ZGV2aWNlX2J5X2RyaXZlcihwLCAmZHJ2LT5kcml2ZXIpOwo+ICAgCQkJcHV0X2RldmljZShwKTsK PiAgIAkJCXAgPSBkOwo+ICAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0 X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmMKPiBpbmRleCBiZjExOTMwZTQw ZTEuLjE1NTFjODI1M2JlYyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9k cnYuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5jCj4gQEAgLTIzNyw4ICsy MzcsNyBAQCBzdGF0aWMgdm9pZCB2YzRfbWF0Y2hfYWRkX2RyaXZlcnMoc3RydWN0IGRldmljZSAq ZGV2LAo+ICAgCQlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gJmRyaXZlcnNbaV0tPmRyaXZl cjsKPiAgIAkJc3RydWN0IGRldmljZSAqcCA9IE5VTEwsICpkOwo+ICAgCj4gLQkJd2hpbGUgKChk ID0gYnVzX2ZpbmRfZGV2aWNlKCZwbGF0Zm9ybV9idXNfdHlwZSwgcCwgZHJ2LAo+IC0JCQkJCSAg ICAodm9pZCAqKXBsYXRmb3JtX2J1c190eXBlLm1hdGNoKSkpIHsKPiArCQl3aGlsZSAoKGQgPSBw bGF0Zm9ybV9maW5kX2RldmljZV9ieV9kcml2ZXIocCwgZHJ2KSkpIHsKPiAgIAkJCXB1dF9kZXZp Y2UocCk7Cj4gICAJCQljb21wb25lbnRfbWF0Y2hfYWRkKGRldiwgbWF0Y2gsIGNvbXBhcmVfZGV2 LCBkKTsKPiAgIAkJCXAgPSBkOwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3Jt X2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaAo+IGluZGV4IDliYzM2 YjU4OTgyNy4uMzdlMTVhOTM1YTQyIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvbGludXgvcGxhdGZv cm1fZGV2aWNlLmgKPiArKysgYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oCj4gQEAg LTUxLDYgKzUxLDkgQEAgZXh0ZXJuIHN0cnVjdCBkZXZpY2UgcGxhdGZvcm1fYnVzOwo+ICAgZXh0 ZXJuIHZvaWQgYXJjaF9zZXR1cF9wZGV2X2FyY2hkYXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug Kik7Cj4gICBleHRlcm4gc3RydWN0IHJlc291cmNlICpwbGF0Zm9ybV9nZXRfcmVzb3VyY2Uoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqLAo+ICAgCQkJCQkgICAgICB1bnNpZ25lZCBpbnQsIHVuc2ln bmVkIGludCk7Cj4gK2V4dGVybiBzdHJ1Y3QgZGV2aWNlICoKPiArcGxhdGZvcm1fZmluZF9kZXZp Y2VfYnlfZHJpdmVyKHN0cnVjdCBkZXZpY2UgKnN0YXJ0LAo+ICsJCQkgICAgICAgY29uc3Qgc3Ry dWN0IGRldmljZV9kcml2ZXIgKmRydik7Cj4gICBleHRlcm4gdm9pZCBfX2lvbWVtICoKPiAgIGRl dm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 LAo+ICAgCQkJICAgICAgIHVuc2lnbmVkIGludCBpbmRleCk7Cj4gCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcg bGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmlu ZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==