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=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=unavailable 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 D56A6C43619 for ; Mon, 10 May 2021 06:17:52 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A01546144F for ; Mon, 10 May 2021 06:17:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230131AbhEJGSz (ORCPT ); Mon, 10 May 2021 02:18:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38320 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230135AbhEJGSx (ORCPT ); Mon, 10 May 2021 02:18:53 -0400 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B7B4CC061574 for ; Sun, 9 May 2021 23:17:48 -0700 (PDT) Received: from ptx.hi.pengutronix.de ([2001:67c:670:100:1d::c0]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lfzEU-0007ZB-St; Mon, 10 May 2021 08:17:34 +0200 Received: from ukl by ptx.hi.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1lfzET-0004a2-U1; Mon, 10 May 2021 08:17:33 +0200 From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= To: Michael Turquette , Stephen Boyd Cc: linux-clk@vger.kernel.org, kernel@pengutronix.de, Andrew Morton , Claudiu Beznea , Thierry Reding , Lee Jones , Nicolas Ferre , Alexandre Belloni , Ludovic Desroches , linux-pwm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Alessandro Zummo , linux-rtc@vger.kernel.org, Mark Brown , linux-spi@vger.kernel.org, Wolfram Sang , Oleksij Rempel Subject: [PATCH v6 RESEND 2/6] clk: Provide new devm_clk_helpers for prepared and enabled clocks Date: Mon, 10 May 2021 08:17:20 +0200 Message-Id: <20210510061724.940447-3-u.kleine-koenig@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210510061724.940447-1-u.kleine-koenig@pengutronix.de> References: <20210510061724.940447-1-u.kleine-koenig@pengutronix.de> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::c0 X-SA-Exim-Mail-From: ukl@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-rtc@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rtc@vger.kernel.org When a driver keeps a clock prepared (or enabled) during the whole lifetime of the driver, these helpers allow to simplify the drivers. Signed-off-by: Uwe Kleine-König --- drivers/clk/clk-devres.c | 31 ++++++++++++++ include/linux/clk.h | 87 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 117 insertions(+), 1 deletion(-) diff --git a/drivers/clk/clk-devres.c b/drivers/clk/clk-devres.c index 91c995815b57..b54f7f0f2a35 100644 --- a/drivers/clk/clk-devres.c +++ b/drivers/clk/clk-devres.c @@ -67,12 +67,43 @@ struct clk *devm_clk_get(struct device *dev, const char *id) } EXPORT_SYMBOL(devm_clk_get); +struct clk *devm_clk_get_prepared(struct device *dev, const char *id) +{ + return __devm_clk_get(dev, id, clk_get, clk_prepare, clk_unprepare); + +} +EXPORT_SYMBOL(devm_clk_get_prepared); + +struct clk *devm_clk_get_enabled(struct device *dev, const char *id) +{ + return __devm_clk_get(dev, id, clk_get, + clk_prepare_enable, clk_disable_unprepare); + +} +EXPORT_SYMBOL(devm_clk_get_enabled); + struct clk *devm_clk_get_optional(struct device *dev, const char *id) { return __devm_clk_get(dev, id, clk_get_optional, NULL, NULL); } EXPORT_SYMBOL(devm_clk_get_optional); +struct clk *devm_clk_get_optional_prepared(struct device *dev, const char *id) +{ + return __devm_clk_get(dev, id, clk_get_optional, + clk_prepare, clk_unprepare); + +} +EXPORT_SYMBOL(devm_clk_get_optional_prepared); + +struct clk *devm_clk_get_optional_enabled(struct device *dev, const char *id) +{ + return __devm_clk_get(dev, id, clk_get_optional, + clk_prepare_enable, clk_disable_unprepare); + +} +EXPORT_SYMBOL(devm_clk_get_optional_enabled); + struct clk_bulk_devres { struct clk_bulk_data *clks; int num_clks; diff --git a/include/linux/clk.h b/include/linux/clk.h index 266e8de3cb51..b3c5da388b08 100644 --- a/include/linux/clk.h +++ b/include/linux/clk.h @@ -449,7 +449,7 @@ int __must_check devm_clk_bulk_get_all(struct device *dev, * the clock producer. (IOW, @id may be identical strings, but * clk_get may return different clock producers depending on @dev.) * - * Drivers must assume that the clock source is not enabled. + * Drivers must assume that the clock source is neither prepared nor enabled. * * devm_clk_get should not be called from within interrupt context. * @@ -458,6 +458,47 @@ int __must_check devm_clk_bulk_get_all(struct device *dev, */ struct clk *devm_clk_get(struct device *dev, const char *id); +/** + * devm_clk_get_prepared - devm_clk_get() + clk_prepare() + * @dev: device for clock "consumer" + * @id: clock consumer ID + * + * Returns a struct clk corresponding to the clock producer, or + * valid IS_ERR() condition containing errno. The implementation + * uses @dev and @id to determine the clock consumer, and thereby + * the clock producer. (IOW, @id may be identical strings, but + * clk_get may return different clock producers depending on @dev.) + * + * The returned clk (if valid) is prepared. Drivers must however assume that the + * clock is not enabled. + * + * devm_clk_get_prepared should not be called from within interrupt context. + * + * The clock will automatically be unprepared and freed when the + * device is unbound from the bus. + */ +struct clk *devm_clk_get_prepared(struct device *dev, const char *id); + +/** + * devm_clk_get_enabled - devm_clk_get() + clk_prepare_enable() + * @dev: device for clock "consumer" + * @id: clock consumer ID + * + * Returns a struct clk corresponding to the clock producer, or + * valid IS_ERR() condition containing errno. The implementation + * uses @dev and @id to determine the clock consumer, and thereby + * the clock producer. (IOW, @id may be identical strings, but + * clk_get may return different clock producers depending on @dev.) + * + * The returned clk (if valid) is prepared and enabled. + * + * devm_clk_get_prepared should not be called from within interrupt context. + * + * The clock will automatically be disabled, unprepared and freed when the + * device is unbound from the bus. + */ +struct clk *devm_clk_get_enabled(struct device *dev, const char *id); + /** * devm_clk_get_optional - lookup and obtain a managed reference to an optional * clock producer. @@ -469,6 +510,26 @@ struct clk *devm_clk_get(struct device *dev, const char *id); */ struct clk *devm_clk_get_optional(struct device *dev, const char *id); +/** + * devm_clk_get_optional_prepared - devm_clk_get_optional() + clk_prepare() + * @dev: device for clock "consumer" + * @id: clock consumer ID + * + * Behaves the same as devm_clk_get_prepared() except where there is no clock producer. + * In this case, instead of returning -ENOENT, the function returns NULL. + */ +struct clk *devm_clk_get_optional_prepared(struct device *dev, const char *id); + +/** + * devm_clk_get_optional_enabled - devm_clk_get_optional() + clk_prepare_enable() + * @dev: device for clock "consumer" + * @id: clock consumer ID + * + * Behaves the same as devm_clk_get_enabled() except where there is no clock producer. + * In this case, instead of returning -ENOENT, the function returns NULL. + */ +struct clk *devm_clk_get_optional_enabled(struct device *dev, const char *id); + /** * devm_get_clk_from_child - lookup and obtain a managed reference to a * clock producer from child node. @@ -813,12 +874,36 @@ static inline struct clk *devm_clk_get(struct device *dev, const char *id) return NULL; } +static inline struct clk *devm_clk_get_prepared(struct device *dev, + const char *id) +{ + return NULL; +} + +static inline struct clk *devm_clk_get_enabled(struct device *dev, + const char *id) +{ + return NULL; +} + static inline struct clk *devm_clk_get_optional(struct device *dev, const char *id) { return NULL; } +static inline struct clk *devm_clk_get_optional_prepared(struct device *dev, + const char *id) +{ + return NULL; +} + +static inline struct clk *devm_clk_get_optional_enabled(struct device *dev, + const char *id) +{ + return NULL; +} + static inline int __must_check devm_clk_bulk_get(struct device *dev, int num_clks, struct clk_bulk_data *clks) { -- 2.30.2 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=-17.4 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT 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 2CD8BC433B4 for ; Mon, 10 May 2021 06:21:56 +0000 (UTC) Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (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 7CE01613CD for ; Mon, 10 May 2021 06:21:55 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7CE01613CD Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+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=desiato.20200630; h=Sender:Content-Transfer-Encoding :Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-Id:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=UVvZZrPru8HCwV7rawcvQtoOyqSwBzKM9JZ5j9tUGi8=; b=GAz2ejoEELfCwnXprh5/7U6ck HtlSAc7EhZcV7HVdlMKsowdoyVeXM5JEXuhQoKOzEQTKd6SDDaPI1ICTZ63zN2UQJF3mRDCahZxQC dwqxds3YlRMx974LWrMhnpJ8T36nVKWk2jE5G0AW7K6sL01j7GfW3828zmnBgR15v4FrGZR9F+iYD Cewl1TyYamzhNrMrUlJJShOXHQic75Du3MhmMdJYHADwK3bH2SfGg+GtEczblwDOxm/RhUOoTBcUG MwhQkB4v705DQElsIsU6hFmwTEVvXqaF1JKUwLlam7b/btAaBdynm7hkyqFMZr1yMhkgE+J02s5Ei YSEAiw3Cw==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lfzGj-00DL3B-Hb; Mon, 10 May 2021 06:19:54 +0000 Received: from bombadil.infradead.org ([2607:7c80:54:e::133]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lfzEi-00DKrK-K3 for linux-arm-kernel@desiato.infradead.org; Mon, 10 May 2021 06:17:58 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Content-Transfer-Encoding: Content-Type:MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc: To:From:Sender:Reply-To:Content-ID:Content-Description; bh=YTHx8CdN9d5OSeqs/zXWLxq3huJInkiPGnPlQM5rTLo=; b=MInEEIEazR6xkdZ0ygpPb8nBQ+ 1Y6PTaZF/5CKh9yxr1/F8Eamzqy0i/wKfU2yXJ9YSABaesK1rO8dAD8ALq2pSlLzc3uq8qQKegQa9 loVcglgHlVSxZZaYXu+eypeaMyhByX6bBKGhaNuQr8gCd2dUvTSrNAbG4+tVaCcOZ40C/IwynEtAy JvPTUyXByr8Fhiokv0Pcgpy/86hZovQ9WPWs3vPmSFaSmCJraNTucamYTwIRauM9jypj3TnmrT7ul waknwOGXQhuvV7ZwG5rxk7JbRfAZYi1UDQfBXtuKrRkV4tQTLTdDyHLqZ9kg+Mee36qCb8yUFhACy +e2H2ztg==; Received: from metis.ext.pengutronix.de ([2001:67c:670:201:290:27ff:fe1d:cc33]) by bombadil.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lfzEe-008KaQ-78 for linux-arm-kernel@lists.infradead.org; Mon, 10 May 2021 06:17:47 +0000 Received: from ptx.hi.pengutronix.de ([2001:67c:670:100:1d::c0]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lfzEU-0007ZB-St; Mon, 10 May 2021 08:17:34 +0200 Received: from ukl by ptx.hi.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1lfzET-0004a2-U1; Mon, 10 May 2021 08:17:33 +0200 From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= To: Michael Turquette , Stephen Boyd Subject: [PATCH v6 RESEND 2/6] clk: Provide new devm_clk_helpers for prepared and enabled clocks Date: Mon, 10 May 2021 08:17:20 +0200 Message-Id: <20210510061724.940447-3-u.kleine-koenig@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210510061724.940447-1-u.kleine-koenig@pengutronix.de> References: <20210510061724.940447-1-u.kleine-koenig@pengutronix.de> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::c0 X-SA-Exim-Mail-From: ukl@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-arm-kernel@lists.infradead.org X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210509_231744_446755_586F9E26 X-CRM114-Status: GOOD ( 19.36 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-rtc@vger.kernel.org, linux-pwm@vger.kernel.org, Alexandre Belloni , Alessandro Zummo , Mark Brown , Claudiu Beznea , Wolfram Sang , Oleksij Rempel , Ludovic Desroches , Thierry Reding , kernel@pengutronix.de, Andrew Morton , linux-spi@vger.kernel.org, Lee Jones , linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org V2hlbiBhIGRyaXZlciBrZWVwcyBhIGNsb2NrIHByZXBhcmVkIChvciBlbmFibGVkKSBkdXJpbmcg dGhlIHdob2xlCmxpZmV0aW1lIG9mIHRoZSBkcml2ZXIsIHRoZXNlIGhlbHBlcnMgYWxsb3cgdG8g c2ltcGxpZnkgdGhlIGRyaXZlcnMuCgpTaWduZWQtb2ZmLWJ5OiBVd2UgS2xlaW5lLUvDtm5pZyA8 dS5rbGVpbmUta29lbmlnQHBlbmd1dHJvbml4LmRlPgotLS0KIGRyaXZlcnMvY2xrL2Nsay1kZXZy ZXMuYyB8IDMxICsrKysrKysrKysrKysrCiBpbmNsdWRlL2xpbnV4L2Nsay5oICAgICAgfCA4NyAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCiAyIGZpbGVzIGNoYW5nZWQs IDExNyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9j bGsvY2xrLWRldnJlcy5jIGIvZHJpdmVycy9jbGsvY2xrLWRldnJlcy5jCmluZGV4IDkxYzk5NTgx NWI1Ny4uYjU0ZjdmMGYyYTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9jbGstZGV2cmVzLmMK KysrIGIvZHJpdmVycy9jbGsvY2xrLWRldnJlcy5jCkBAIC02NywxMiArNjcsNDMgQEAgc3RydWN0 IGNsayAqZGV2bV9jbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCiB9 CiBFWFBPUlRfU1lNQk9MKGRldm1fY2xrX2dldCk7CiAKK3N0cnVjdCBjbGsgKmRldm1fY2xrX2dl dF9wcmVwYXJlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkKQoreworCXJldHVy biBfX2Rldm1fY2xrX2dldChkZXYsIGlkLCBjbGtfZ2V0LCBjbGtfcHJlcGFyZSwgY2xrX3VucHJl cGFyZSk7CisKK30KK0VYUE9SVF9TWU1CT0woZGV2bV9jbGtfZ2V0X3ByZXBhcmVkKTsKKworc3Ry dWN0IGNsayAqZGV2bV9jbGtfZ2V0X2VuYWJsZWQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBj aGFyICppZCkKK3sKKwlyZXR1cm4gX19kZXZtX2Nsa19nZXQoZGV2LCBpZCwgY2xrX2dldCwKKwkJ CSAgICAgIGNsa19wcmVwYXJlX2VuYWJsZSwgY2xrX2Rpc2FibGVfdW5wcmVwYXJlKTsKKworfQor RVhQT1JUX1NZTUJPTChkZXZtX2Nsa19nZXRfZW5hYmxlZCk7CisKIHN0cnVjdCBjbGsgKmRldm1f Y2xrX2dldF9vcHRpb25hbChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkKQogewog CXJldHVybiBfX2Rldm1fY2xrX2dldChkZXYsIGlkLCBjbGtfZ2V0X29wdGlvbmFsLCBOVUxMLCBO VUxMKTsKIH0KIEVYUE9SVF9TWU1CT0woZGV2bV9jbGtfZ2V0X29wdGlvbmFsKTsKIAorc3RydWN0 IGNsayAqZGV2bV9jbGtfZ2V0X29wdGlvbmFsX3ByZXBhcmVkKHN0cnVjdCBkZXZpY2UgKmRldiwg Y29uc3QgY2hhciAqaWQpCit7CisJcmV0dXJuIF9fZGV2bV9jbGtfZ2V0KGRldiwgaWQsIGNsa19n ZXRfb3B0aW9uYWwsCisJCQkgICAgICBjbGtfcHJlcGFyZSwgY2xrX3VucHJlcGFyZSk7CisKK30K K0VYUE9SVF9TWU1CT0woZGV2bV9jbGtfZ2V0X29wdGlvbmFsX3ByZXBhcmVkKTsKKworc3RydWN0 IGNsayAqZGV2bV9jbGtfZ2V0X29wdGlvbmFsX2VuYWJsZWQoc3RydWN0IGRldmljZSAqZGV2LCBj b25zdCBjaGFyICppZCkKK3sKKwlyZXR1cm4gX19kZXZtX2Nsa19nZXQoZGV2LCBpZCwgY2xrX2dl dF9vcHRpb25hbCwKKwkJCSAgICAgIGNsa19wcmVwYXJlX2VuYWJsZSwgY2xrX2Rpc2FibGVfdW5w cmVwYXJlKTsKKworfQorRVhQT1JUX1NZTUJPTChkZXZtX2Nsa19nZXRfb3B0aW9uYWxfZW5hYmxl ZCk7CisKIHN0cnVjdCBjbGtfYnVsa19kZXZyZXMgewogCXN0cnVjdCBjbGtfYnVsa19kYXRhICpj bGtzOwogCWludCBudW1fY2xrczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2xrLmggYi9p bmNsdWRlL2xpbnV4L2Nsay5oCmluZGV4IDI2NmU4ZGUzY2I1MS4uYjNjNWRhMzg4YjA4IDEwMDY0 NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nsay5oCisrKyBiL2luY2x1ZGUvbGludXgvY2xrLmgKQEAg LTQ0OSw3ICs0NDksNyBAQCBpbnQgX19tdXN0X2NoZWNrIGRldm1fY2xrX2J1bGtfZ2V0X2FsbChz dHJ1Y3QgZGV2aWNlICpkZXYsCiAgKiB0aGUgY2xvY2sgcHJvZHVjZXIuICAoSU9XLCBAaWQgbWF5 IGJlIGlkZW50aWNhbCBzdHJpbmdzLCBidXQKICAqIGNsa19nZXQgbWF5IHJldHVybiBkaWZmZXJl bnQgY2xvY2sgcHJvZHVjZXJzIGRlcGVuZGluZyBvbiBAZGV2LikKICAqCi0gKiBEcml2ZXJzIG11 c3QgYXNzdW1lIHRoYXQgdGhlIGNsb2NrIHNvdXJjZSBpcyBub3QgZW5hYmxlZC4KKyAqIERyaXZl cnMgbXVzdCBhc3N1bWUgdGhhdCB0aGUgY2xvY2sgc291cmNlIGlzIG5laXRoZXIgcHJlcGFyZWQg bm9yIGVuYWJsZWQuCiAgKgogICogZGV2bV9jbGtfZ2V0IHNob3VsZCBub3QgYmUgY2FsbGVkIGZy b20gd2l0aGluIGludGVycnVwdCBjb250ZXh0LgogICoKQEAgLTQ1OCw2ICs0NTgsNDcgQEAgaW50 IF9fbXVzdF9jaGVjayBkZXZtX2Nsa19idWxrX2dldF9hbGwoc3RydWN0IGRldmljZSAqZGV2LAog ICovCiBzdHJ1Y3QgY2xrICpkZXZtX2Nsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBj aGFyICppZCk7CiAKKy8qKgorICogZGV2bV9jbGtfZ2V0X3ByZXBhcmVkIC0gZGV2bV9jbGtfZ2V0 KCkgKyBjbGtfcHJlcGFyZSgpCisgKiBAZGV2OiBkZXZpY2UgZm9yIGNsb2NrICJjb25zdW1lciIK KyAqIEBpZDogY2xvY2sgY29uc3VtZXIgSUQKKyAqCisgKiBSZXR1cm5zIGEgc3RydWN0IGNsayBj b3JyZXNwb25kaW5nIHRvIHRoZSBjbG9jayBwcm9kdWNlciwgb3IKKyAqIHZhbGlkIElTX0VSUigp IGNvbmRpdGlvbiBjb250YWluaW5nIGVycm5vLiAgVGhlIGltcGxlbWVudGF0aW9uCisgKiB1c2Vz IEBkZXYgYW5kIEBpZCB0byBkZXRlcm1pbmUgdGhlIGNsb2NrIGNvbnN1bWVyLCBhbmQgdGhlcmVi eQorICogdGhlIGNsb2NrIHByb2R1Y2VyLiAgKElPVywgQGlkIG1heSBiZSBpZGVudGljYWwgc3Ry aW5ncywgYnV0CisgKiBjbGtfZ2V0IG1heSByZXR1cm4gZGlmZmVyZW50IGNsb2NrIHByb2R1Y2Vy cyBkZXBlbmRpbmcgb24gQGRldi4pCisgKgorICogVGhlIHJldHVybmVkIGNsayAoaWYgdmFsaWQp IGlzIHByZXBhcmVkLiBEcml2ZXJzIG11c3QgaG93ZXZlciBhc3N1bWUgdGhhdCB0aGUKKyAqIGNs b2NrIGlzIG5vdCBlbmFibGVkLgorICoKKyAqIGRldm1fY2xrX2dldF9wcmVwYXJlZCBzaG91bGQg bm90IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqCisgKiBUaGUg Y2xvY2sgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHVucHJlcGFyZWQgYW5kIGZyZWVkIHdoZW4gdGhl CisgKiBkZXZpY2UgaXMgdW5ib3VuZCBmcm9tIHRoZSBidXMuCisgKi8KK3N0cnVjdCBjbGsgKmRl dm1fY2xrX2dldF9wcmVwYXJlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkKTsK KworLyoqCisgKiBkZXZtX2Nsa19nZXRfZW5hYmxlZCAtIGRldm1fY2xrX2dldCgpICsgY2xrX3By ZXBhcmVfZW5hYmxlKCkKKyAqIEBkZXY6IGRldmljZSBmb3IgY2xvY2sgImNvbnN1bWVyIgorICog QGlkOiBjbG9jayBjb25zdW1lciBJRAorICoKKyAqIFJldHVybnMgYSBzdHJ1Y3QgY2xrIGNvcnJl c3BvbmRpbmcgdG8gdGhlIGNsb2NrIHByb2R1Y2VyLCBvcgorICogdmFsaWQgSVNfRVJSKCkgY29u ZGl0aW9uIGNvbnRhaW5pbmcgZXJybm8uICBUaGUgaW1wbGVtZW50YXRpb24KKyAqIHVzZXMgQGRl diBhbmQgQGlkIHRvIGRldGVybWluZSB0aGUgY2xvY2sgY29uc3VtZXIsIGFuZCB0aGVyZWJ5Cisg KiB0aGUgY2xvY2sgcHJvZHVjZXIuICAoSU9XLCBAaWQgbWF5IGJlIGlkZW50aWNhbCBzdHJpbmdz LCBidXQKKyAqIGNsa19nZXQgbWF5IHJldHVybiBkaWZmZXJlbnQgY2xvY2sgcHJvZHVjZXJzIGRl cGVuZGluZyBvbiBAZGV2LikKKyAqCisgKiBUaGUgcmV0dXJuZWQgY2xrIChpZiB2YWxpZCkgaXMg cHJlcGFyZWQgYW5kIGVuYWJsZWQuCisgKgorICogZGV2bV9jbGtfZ2V0X3ByZXBhcmVkIHNob3Vs ZCBub3QgYmUgY2FsbGVkIGZyb20gd2l0aGluIGludGVycnVwdCBjb250ZXh0LgorICoKKyAqIFRo ZSBjbG9jayB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgZGlzYWJsZWQsIHVucHJlcGFyZWQgYW5kIGZy ZWVkIHdoZW4gdGhlCisgKiBkZXZpY2UgaXMgdW5ib3VuZCBmcm9tIHRoZSBidXMuCisgKi8KK3N0 cnVjdCBjbGsgKmRldm1fY2xrX2dldF9lbmFibGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qg Y2hhciAqaWQpOworCiAvKioKICAqIGRldm1fY2xrX2dldF9vcHRpb25hbCAtIGxvb2t1cCBhbmQg b2J0YWluIGEgbWFuYWdlZCByZWZlcmVuY2UgdG8gYW4gb3B0aW9uYWwKICAqCQkJICAgY2xvY2sg cHJvZHVjZXIuCkBAIC00NjksNiArNTEwLDI2IEBAIHN0cnVjdCBjbGsgKmRldm1fY2xrX2dldChz dHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkKTsKICAqLwogc3RydWN0IGNsayAqZGV2 bV9jbGtfZ2V0X29wdGlvbmFsKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpOwog CisvKioKKyAqIGRldm1fY2xrX2dldF9vcHRpb25hbF9wcmVwYXJlZCAtIGRldm1fY2xrX2dldF9v cHRpb25hbCgpICsgY2xrX3ByZXBhcmUoKQorICogQGRldjogZGV2aWNlIGZvciBjbG9jayAiY29u c3VtZXIiCisgKiBAaWQ6IGNsb2NrIGNvbnN1bWVyIElECisgKgorICogQmVoYXZlcyB0aGUgc2Ft ZSBhcyBkZXZtX2Nsa19nZXRfcHJlcGFyZWQoKSBleGNlcHQgd2hlcmUgdGhlcmUgaXMgbm8gY2xv Y2sgcHJvZHVjZXIuCisgKiBJbiB0aGlzIGNhc2UsIGluc3RlYWQgb2YgcmV0dXJuaW5nIC1FTk9F TlQsIHRoZSBmdW5jdGlvbiByZXR1cm5zIE5VTEwuCisgKi8KK3N0cnVjdCBjbGsgKmRldm1fY2xr X2dldF9vcHRpb25hbF9wcmVwYXJlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlk KTsKKworLyoqCisgKiBkZXZtX2Nsa19nZXRfb3B0aW9uYWxfZW5hYmxlZCAtIGRldm1fY2xrX2dl dF9vcHRpb25hbCgpICsgY2xrX3ByZXBhcmVfZW5hYmxlKCkKKyAqIEBkZXY6IGRldmljZSBmb3Ig Y2xvY2sgImNvbnN1bWVyIgorICogQGlkOiBjbG9jayBjb25zdW1lciBJRAorICoKKyAqIEJlaGF2 ZXMgdGhlIHNhbWUgYXMgZGV2bV9jbGtfZ2V0X2VuYWJsZWQoKSBleGNlcHQgd2hlcmUgdGhlcmUg aXMgbm8gY2xvY2sgcHJvZHVjZXIuCisgKiBJbiB0aGlzIGNhc2UsIGluc3RlYWQgb2YgcmV0dXJu aW5nIC1FTk9FTlQsIHRoZSBmdW5jdGlvbiByZXR1cm5zIE5VTEwuCisgKi8KK3N0cnVjdCBjbGsg KmRldm1fY2xrX2dldF9vcHRpb25hbF9lbmFibGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qg Y2hhciAqaWQpOworCiAvKioKICAqIGRldm1fZ2V0X2Nsa19mcm9tX2NoaWxkIC0gbG9va3VwIGFu ZCBvYnRhaW4gYSBtYW5hZ2VkIHJlZmVyZW5jZSB0byBhCiAgKgkJCSAgICAgY2xvY2sgcHJvZHVj ZXIgZnJvbSBjaGlsZCBub2RlLgpAQCAtODEzLDEyICs4NzQsMzYgQEAgc3RhdGljIGlubGluZSBz dHJ1Y3QgY2xrICpkZXZtX2Nsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpp ZCkKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgY2xrICpkZXZtX2Ns a19nZXRfcHJlcGFyZWQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkJY29uc3QgY2hhciAqaWQp Cit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNsayAqZGV2bV9j bGtfZ2V0X2VuYWJsZWQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICAgICAgY29uc3QgY2hh ciAqaWQpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNsayAq ZGV2bV9jbGtfZ2V0X29wdGlvbmFsKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkJCWNvbnN0IGNo YXIgKmlkKQogewogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjbGsg KmRldm1fY2xrX2dldF9vcHRpb25hbF9wcmVwYXJlZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJ CQkJIGNvbnN0IGNoYXIgKmlkKQoreworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5l IHN0cnVjdCBjbGsgKmRldm1fY2xrX2dldF9vcHRpb25hbF9lbmFibGVkKHN0cnVjdCBkZXZpY2Ug KmRldiwKKwkJCQkJCQljb25zdCBjaGFyICppZCkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKwogc3Rh dGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrIGRldm1fY2xrX2J1bGtfZ2V0KHN0cnVjdCBkZXZp Y2UgKmRldiwgaW50IG51bV9jbGtzLAogCQkJCQkJIHN0cnVjdCBjbGtfYnVsa19kYXRhICpjbGtz KQogewotLSAKMi4zMC4yCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBs aXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlz dGluZm8vbGludXgtYXJtLWtlcm5lbAo=