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=-24.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, 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 CA34DC4332B for ; Thu, 14 Jan 2021 12:41:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 9EC42239FD for ; Thu, 14 Jan 2021 12:41:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728517AbhANMlg (ORCPT ); Thu, 14 Jan 2021 07:41:36 -0500 Received: from mail.kernel.org ([198.145.29.99]:59074 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728142AbhANMlg (ORCPT ); Thu, 14 Jan 2021 07:41:36 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id 2A14A23A57; Thu, 14 Jan 2021 12:40:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1610628055; bh=YkOKDLNCBPwojBLyeWcbId+gm+N8mW6chmEkVygO2ME=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=SU4O4fCGB9WqZsSK7fXE59VQISGJkx/UkV+rRvFT8Og8tyiqyJNif0mHC2IRwRLIw LVboZuY5sSIVhiRPHj4tU8UHyvZT5TezsWWdVzlF+CDV0DN0W902qgKBlse4WYResG UXfIiW7JbYmiXWe95mvOQB2PxtpVBSPctgYgUTqlQmRiOWyQB9wvSvR61DxZ5kvMZ7 1JkUuouuG9WLjdt4kyhBYH4js7JWgvZawMnSubswn6vVKgi9a31DbBxE8DUai/Qqk9 4kThi0IWLj/P/Hu2tOxM7ppmAuUHHN+d9CZ1bCnrDA6b9su+85Pt5RyT38NWAOVK8h KA0YUIRNbQE9A== Received: by pali.im (Postfix) id 4B4077C1; Thu, 14 Jan 2021 13:40:53 +0100 (CET) From: =?UTF-8?q?Pali=20Roh=C3=A1r?= To: Gregory Clement , Andrew Lunn , Michael Turquette , Stephen Boyd , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org Cc: =?UTF-8?q?Marek=20Beh=C3=BAn?= , "Miquel Raynal" , "Tomasz Maciej Nowak" , "Luka Perkov" , "Andre Heider" , "Vladimir Vid" , "Russell King" , =?UTF-8?q?G=C3=A9rald=20Kerma?= , "Konstantin Porotchkin" Subject: [PATCH mvebu v2 02/10] cpufreq: armada-37xx: Fix setting TBG parent for load levels Date: Thu, 14 Jan 2021 13:40:24 +0100 Message-Id: <20210114124032.12765-3-pali@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210114124032.12765-1-pali@kernel.org> References: <20210114124032.12765-1-pali@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-clk@vger.kernel.org From: Marek BehĂșn With CPU frequency determining software [1] we have discovered that after this driver does one CPU frequency change, the base frequency of the CPU is set to the frequency of TBG-A-P clock, instead of the TBG that is parent to the CPU. This can be reproduced on EspressoBIN and Turris MOX: cd /sys/devices/system/cpu/cpufreq/policy0 echo powersave >scaling_governor echo performance >scaling_governor Running the mhz tool before this driver is loaded reports 1000 MHz, and after loading the driver and executing commands above the tool reports 800 MHz. The change of TBG clock selector is supposed to happen in function armada37xx_cpufreq_dvfs_setup. Before the function returns, it does this: parent = clk_get_parent(clk); clk_set_parent(clk, parent); The armada-37xx-periph clock driver has the .set_parent method implemented correctly for this, so if the method was actually called, this would work. But since the introduction of the common clock framework in commit b2476490ef11 ("clk: introduce the common clock..."), the clk_set_parent function checks whether the parent is actually changing, and if the requested new parent is same as the old parent (which is obviously the case for the code above), the .set_parent method is not called at all. This patch fixes this issue by filling the correct TBG clock selector directly in the armada37xx_cpufreq_dvfs_setup during the filling of other registers at the same address. But the determination of CPU TBG index cannot be done via the common clock framework, therefore we need to access the North Bridge Peripheral Clock registers directly in this driver. [1] https://github.com/wtarreau/mhz Signed-off-by: Marek BehĂșn Fixes: 92ce45fb875d ("cpufreq: Add DVFS support for Armada 37xx") Cc: stable@vger.kernel.org Cc: Gregory CLEMENT Cc: Miquel Raynal --- drivers/cpufreq/armada-37xx-cpufreq.c | 35 ++++++++++++++++++--------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/drivers/cpufreq/armada-37xx-cpufreq.c b/drivers/cpufreq/armada-37xx-cpufreq.c index b4af4094309b..b8dc6c849579 100644 --- a/drivers/cpufreq/armada-37xx-cpufreq.c +++ b/drivers/cpufreq/armada-37xx-cpufreq.c @@ -25,6 +25,10 @@ #include "cpufreq-dt.h" +/* Clk register set */ +#define ARMADA_37XX_CLK_TBG_SEL 0 +#define ARMADA_37XX_CLK_TBG_SEL_CPU_OFF 22 + /* Power management in North Bridge register set */ #define ARMADA_37XX_NB_L0L1 0x18 #define ARMADA_37XX_NB_L2L3 0x1C @@ -120,10 +124,15 @@ static struct armada_37xx_dvfs *armada_37xx_cpu_freq_info_get(u32 freq) * will be configured then the DVFS will be enabled. */ static void __init armada37xx_cpufreq_dvfs_setup(struct regmap *base, - struct clk *clk, u8 *divider) + struct regmap *clk_base, u8 *divider) { + u32 cpu_tbg_sel; int load_lvl; - struct clk *parent; + + /* Determine to which TBG clock is CPU connected */ + regmap_read(clk_base, ARMADA_37XX_CLK_TBG_SEL, &cpu_tbg_sel); + cpu_tbg_sel >>= ARMADA_37XX_CLK_TBG_SEL_CPU_OFF; + cpu_tbg_sel &= ARMADA_37XX_NB_TBG_SEL_MASK; for (load_lvl = 0; load_lvl < LOAD_LEVEL_NR; load_lvl++) { unsigned int reg, mask, val, offset = 0; @@ -142,6 +151,11 @@ static void __init armada37xx_cpufreq_dvfs_setup(struct regmap *base, mask = (ARMADA_37XX_NB_CLK_SEL_MASK << ARMADA_37XX_NB_CLK_SEL_OFF); + /* Set TBG index, for all levels we use the same TBG */ + val = cpu_tbg_sel << ARMADA_37XX_NB_TBG_SEL_OFF; + mask = (ARMADA_37XX_NB_TBG_SEL_MASK + << ARMADA_37XX_NB_TBG_SEL_OFF); + /* * Set cpu divider based on the pre-computed array in * order to have balanced step. @@ -160,14 +174,6 @@ static void __init armada37xx_cpufreq_dvfs_setup(struct regmap *base, regmap_update_bits(base, reg, mask, val); } - - /* - * Set cpu clock source, for all the level we keep the same - * clock source that the one already configured. For this one - * we need to use the clock framework - */ - parent = clk_get_parent(clk); - clk_set_parent(clk, parent); } /* @@ -358,11 +364,16 @@ static int __init armada37xx_cpufreq_driver_init(void) struct platform_device *pdev; unsigned long freq; unsigned int cur_frequency, base_frequency; - struct regmap *nb_pm_base, *avs_base; + struct regmap *nb_clk_base, *nb_pm_base, *avs_base; struct device *cpu_dev; int load_lvl, ret; struct clk *clk, *parent; + nb_clk_base = + syscon_regmap_lookup_by_compatible("marvell,armada-3700-periph-clock-nb"); + if (IS_ERR(nb_clk_base)) + return -ENODEV; + nb_pm_base = syscon_regmap_lookup_by_compatible("marvell,armada-3700-nb-pm"); @@ -439,7 +450,7 @@ static int __init armada37xx_cpufreq_driver_init(void) armada37xx_cpufreq_avs_configure(avs_base, dvfs); armada37xx_cpufreq_avs_setup(avs_base, dvfs); - armada37xx_cpufreq_dvfs_setup(nb_pm_base, clk, dvfs->divider); + armada37xx_cpufreq_dvfs_setup(nb_pm_base, nb_clk_base, dvfs->divider); clk_put(clk); for (load_lvl = ARMADA_37XX_DVFS_LOAD_0; load_lvl < LOAD_LEVEL_NR; -- 2.20.1 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=-22.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,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 17C2DC433E9 for ; Thu, 14 Jan 2021 12:42:56 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 CBC11239FD for ; Thu, 14 Jan 2021 12:42:55 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CBC11239FD Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org 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=merlin.20170209; 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=n/GuvIOJNyRLu92V8yrA01+M7XzR2ZI9m2eE2QISqAk=; b=t2nYS8aekNOmQ2Wx1NMHhiAzH 5vFAo5a+QrmR6o1LYQCj6PSVu12tSM1zYHiS7n/eikFXsIzs9WKc7sTQLeL6pGZHmLsAyFJcW1E0T dZ83GBMfS8xtHDBuTb3dTxfUHR8v2uebKdyrGbWxkD+70xJpSlh17p5ZjwU4FD3lXaWXLmo3PL0rj EFQQ2KEfOzar+vU6LYPc7RZwD2QPPshAiE7lOB4zYiwupraiPCECMGrM/+kA6DYZy+Bz2SGp3r8Pq cu1Lk3yhd2HmSPfyHzjsVjoD1brPsJOTcIyxaUD5SJFnKJOoj2fUh1bpUBTvfFk9+DGUwLEgPoWvt uThnn0lsA==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1l01w2-0001ip-PL; Thu, 14 Jan 2021 12:41:06 +0000 Received: from mail.kernel.org ([198.145.29.99]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1l01vs-0001fH-8m for linux-arm-kernel@lists.infradead.org; Thu, 14 Jan 2021 12:40:58 +0000 Received: by mail.kernel.org (Postfix) with ESMTPSA id 2A14A23A57; Thu, 14 Jan 2021 12:40:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1610628055; bh=YkOKDLNCBPwojBLyeWcbId+gm+N8mW6chmEkVygO2ME=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=SU4O4fCGB9WqZsSK7fXE59VQISGJkx/UkV+rRvFT8Og8tyiqyJNif0mHC2IRwRLIw LVboZuY5sSIVhiRPHj4tU8UHyvZT5TezsWWdVzlF+CDV0DN0W902qgKBlse4WYResG UXfIiW7JbYmiXWe95mvOQB2PxtpVBSPctgYgUTqlQmRiOWyQB9wvSvR61DxZ5kvMZ7 1JkUuouuG9WLjdt4kyhBYH4js7JWgvZawMnSubswn6vVKgi9a31DbBxE8DUai/Qqk9 4kThi0IWLj/P/Hu2tOxM7ppmAuUHHN+d9CZ1bCnrDA6b9su+85Pt5RyT38NWAOVK8h KA0YUIRNbQE9A== Received: by pali.im (Postfix) id 4B4077C1; Thu, 14 Jan 2021 13:40:53 +0100 (CET) From: =?UTF-8?q?Pali=20Roh=C3=A1r?= To: Gregory Clement , Andrew Lunn , Michael Turquette , Stephen Boyd , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org Subject: [PATCH mvebu v2 02/10] cpufreq: armada-37xx: Fix setting TBG parent for load levels Date: Thu, 14 Jan 2021 13:40:24 +0100 Message-Id: <20210114124032.12765-3-pali@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210114124032.12765-1-pali@kernel.org> References: <20210114124032.12765-1-pali@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210114_074056_555499_917A58FB X-CRM114-Status: GOOD ( 22.18 ) 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?Marek=20Beh=C3=BAn?= , Tomasz Maciej Nowak , Luka Perkov , Andre Heider , Vladimir Vid , Russell King , =?UTF-8?q?G=C3=A9rald=20Kerma?= , Miquel Raynal , Konstantin Porotchkin 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 RnJvbTogTWFyZWsgQmVow7puIDxrYWJlbEBrZXJuZWwub3JnPgoKV2l0aCBDUFUgZnJlcXVlbmN5 IGRldGVybWluaW5nIHNvZnR3YXJlIFsxXSB3ZSBoYXZlIGRpc2NvdmVyZWQgdGhhdAphZnRlciB0 aGlzIGRyaXZlciBkb2VzIG9uZSBDUFUgZnJlcXVlbmN5IGNoYW5nZSwgdGhlIGJhc2UgZnJlcXVl bmN5IG9mCnRoZSBDUFUgaXMgc2V0IHRvIHRoZSBmcmVxdWVuY3kgb2YgVEJHLUEtUCBjbG9jaywg aW5zdGVhZCBvZiB0aGUgVEJHCnRoYXQgaXMgcGFyZW50IHRvIHRoZSBDUFUuCgpUaGlzIGNhbiBi ZSByZXByb2R1Y2VkIG9uIEVzcHJlc3NvQklOIGFuZCBUdXJyaXMgTU9YOgogIGNkIC9zeXMvZGV2 aWNlcy9zeXN0ZW0vY3B1L2NwdWZyZXEvcG9saWN5MAogIGVjaG8gcG93ZXJzYXZlID5zY2FsaW5n X2dvdmVybm9yCiAgZWNobyBwZXJmb3JtYW5jZSA+c2NhbGluZ19nb3Zlcm5vcgoKUnVubmluZyB0 aGUgbWh6IHRvb2wgYmVmb3JlIHRoaXMgZHJpdmVyIGlzIGxvYWRlZCByZXBvcnRzIDEwMDAgTUh6 LCBhbmQKYWZ0ZXIgbG9hZGluZyB0aGUgZHJpdmVyIGFuZCBleGVjdXRpbmcgY29tbWFuZHMgYWJv dmUgdGhlIHRvb2wgcmVwb3J0cwo4MDAgTUh6LgoKVGhlIGNoYW5nZSBvZiBUQkcgY2xvY2sgc2Vs ZWN0b3IgaXMgc3VwcG9zZWQgdG8gaGFwcGVuIGluIGZ1bmN0aW9uCmFybWFkYTM3eHhfY3B1ZnJl cV9kdmZzX3NldHVwLiBCZWZvcmUgdGhlIGZ1bmN0aW9uIHJldHVybnMsIGl0IGRvZXMKdGhpczoK ICBwYXJlbnQgPSBjbGtfZ2V0X3BhcmVudChjbGspOwogIGNsa19zZXRfcGFyZW50KGNsaywgcGFy ZW50KTsKClRoZSBhcm1hZGEtMzd4eC1wZXJpcGggY2xvY2sgZHJpdmVyIGhhcyB0aGUgLnNldF9w YXJlbnQgbWV0aG9kCmltcGxlbWVudGVkIGNvcnJlY3RseSBmb3IgdGhpcywgc28gaWYgdGhlIG1l dGhvZCB3YXMgYWN0dWFsbHkgY2FsbGVkLAp0aGlzIHdvdWxkIHdvcmsuIEJ1dCBzaW5jZSB0aGUg aW50cm9kdWN0aW9uIG9mIHRoZSBjb21tb24gY2xvY2sKZnJhbWV3b3JrIGluIGNvbW1pdCBiMjQ3 NjQ5MGVmMTEgKCJjbGs6IGludHJvZHVjZSB0aGUgY29tbW9uIGNsb2NrLi4uIiksCnRoZSBjbGtf c2V0X3BhcmVudCBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciB0aGUgcGFyZW50IGlzIGFjdHVhbGx5 CmNoYW5naW5nLCBhbmQgaWYgdGhlIHJlcXVlc3RlZCBuZXcgcGFyZW50IGlzIHNhbWUgYXMgdGhl IG9sZCBwYXJlbnQKKHdoaWNoIGlzIG9idmlvdXNseSB0aGUgY2FzZSBmb3IgdGhlIGNvZGUgYWJv dmUpLCB0aGUgLnNldF9wYXJlbnQgbWV0aG9kCmlzIG5vdCBjYWxsZWQgYXQgYWxsLgoKVGhpcyBw YXRjaCBmaXhlcyB0aGlzIGlzc3VlIGJ5IGZpbGxpbmcgdGhlIGNvcnJlY3QgVEJHIGNsb2NrIHNl bGVjdG9yCmRpcmVjdGx5IGluIHRoZSBhcm1hZGEzN3h4X2NwdWZyZXFfZHZmc19zZXR1cCBkdXJp bmcgdGhlIGZpbGxpbmcgb2YKb3RoZXIgcmVnaXN0ZXJzIGF0IHRoZSBzYW1lIGFkZHJlc3MuIEJ1 dCB0aGUgZGV0ZXJtaW5hdGlvbiBvZiBDUFUgVEJHCmluZGV4IGNhbm5vdCBiZSBkb25lIHZpYSB0 aGUgY29tbW9uIGNsb2NrIGZyYW1ld29yaywgdGhlcmVmb3JlIHdlIG5lZWQKdG8gYWNjZXNzIHRo ZSBOb3J0aCBCcmlkZ2UgUGVyaXBoZXJhbCBDbG9jayByZWdpc3RlcnMgZGlyZWN0bHkgaW4gdGhp cwpkcml2ZXIuCgpbMV0gaHR0cHM6Ly9naXRodWIuY29tL3d0YXJyZWF1L21oegoKU2lnbmVkLW9m Zi1ieTogTWFyZWsgQmVow7puIDxrYWJlbEBrZXJuZWwub3JnPgpGaXhlczogOTJjZTQ1ZmI4NzVk ICgiY3B1ZnJlcTogQWRkIERWRlMgc3VwcG9ydCBmb3IgQXJtYWRhIDM3eHgiKQpDYzogc3RhYmxl QHZnZXIua2VybmVsLm9yZwpDYzogR3JlZ29yeSBDTEVNRU5UIDxncmVnb3J5LmNsZW1lbnRAYm9v dGxpbi5jb20+CkNjOiBNaXF1ZWwgUmF5bmFsIDxtaXF1ZWwucmF5bmFsQGJvb3RsaW4uY29tPgot LS0KIGRyaXZlcnMvY3B1ZnJlcS9hcm1hZGEtMzd4eC1jcHVmcmVxLmMgfCAzNSArKysrKysrKysr KysrKysrKystLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspLCAxMiBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvYXJtYWRhLTM3eHgtY3B1 ZnJlcS5jIGIvZHJpdmVycy9jcHVmcmVxL2FybWFkYS0zN3h4LWNwdWZyZXEuYwppbmRleCBiNGFm NDA5NDMwOWIuLmI4ZGM2Yzg0OTU3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2FybWFk YS0zN3h4LWNwdWZyZXEuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvYXJtYWRhLTM3eHgtY3B1ZnJl cS5jCkBAIC0yNSw2ICsyNSwxMCBAQAogCiAjaW5jbHVkZSAiY3B1ZnJlcS1kdC5oIgogCisvKiBD bGsgcmVnaXN0ZXIgc2V0ICovCisjZGVmaW5lIEFSTUFEQV8zN1hYX0NMS19UQkdfU0VMCQkwCisj ZGVmaW5lIEFSTUFEQV8zN1hYX0NMS19UQkdfU0VMX0NQVV9PRkYJMjIKKwogLyogUG93ZXIgbWFu YWdlbWVudCBpbiBOb3J0aCBCcmlkZ2UgcmVnaXN0ZXIgc2V0ICovCiAjZGVmaW5lIEFSTUFEQV8z N1hYX05CX0wwTDEJMHgxOAogI2RlZmluZSBBUk1BREFfMzdYWF9OQl9MMkwzCTB4MUMKQEAgLTEy MCwxMCArMTI0LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgYXJtYWRhXzM3eHhfZHZmcyAqYXJtYWRhXzM3 eHhfY3B1X2ZyZXFfaW5mb19nZXQodTMyIGZyZXEpCiAgKiB3aWxsIGJlIGNvbmZpZ3VyZWQgdGhl biB0aGUgRFZGUyB3aWxsIGJlIGVuYWJsZWQuCiAgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBhcm1h ZGEzN3h4X2NwdWZyZXFfZHZmc19zZXR1cChzdHJ1Y3QgcmVnbWFwICpiYXNlLAotCQkJCQkJIHN0 cnVjdCBjbGsgKmNsaywgdTggKmRpdmlkZXIpCisJCQkJCQkgc3RydWN0IHJlZ21hcCAqY2xrX2Jh c2UsIHU4ICpkaXZpZGVyKQogeworCXUzMiBjcHVfdGJnX3NlbDsKIAlpbnQgbG9hZF9sdmw7Ci0J c3RydWN0IGNsayAqcGFyZW50OworCisJLyogRGV0ZXJtaW5lIHRvIHdoaWNoIFRCRyBjbG9jayBp cyBDUFUgY29ubmVjdGVkICovCisJcmVnbWFwX3JlYWQoY2xrX2Jhc2UsIEFSTUFEQV8zN1hYX0NM S19UQkdfU0VMLCAmY3B1X3RiZ19zZWwpOworCWNwdV90Ymdfc2VsID4+PSBBUk1BREFfMzdYWF9D TEtfVEJHX1NFTF9DUFVfT0ZGOworCWNwdV90Ymdfc2VsICY9IEFSTUFEQV8zN1hYX05CX1RCR19T RUxfTUFTSzsKIAogCWZvciAobG9hZF9sdmwgPSAwOyBsb2FkX2x2bCA8IExPQURfTEVWRUxfTlI7 IGxvYWRfbHZsKyspIHsKIAkJdW5zaWduZWQgaW50IHJlZywgbWFzaywgdmFsLCBvZmZzZXQgPSAw OwpAQCAtMTQyLDYgKzE1MSwxMSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgYXJtYWRhMzd4eF9jcHVm cmVxX2R2ZnNfc2V0dXAoc3RydWN0IHJlZ21hcCAqYmFzZSwKIAkJbWFzayA9IChBUk1BREFfMzdY WF9OQl9DTEtfU0VMX01BU0sKIAkJCTw8IEFSTUFEQV8zN1hYX05CX0NMS19TRUxfT0ZGKTsKIAor CQkvKiBTZXQgVEJHIGluZGV4LCBmb3IgYWxsIGxldmVscyB3ZSB1c2UgdGhlIHNhbWUgVEJHICov CisJCXZhbCA9IGNwdV90Ymdfc2VsIDw8IEFSTUFEQV8zN1hYX05CX1RCR19TRUxfT0ZGOworCQlt YXNrID0gKEFSTUFEQV8zN1hYX05CX1RCR19TRUxfTUFTSworCQkJPDwgQVJNQURBXzM3WFhfTkJf VEJHX1NFTF9PRkYpOworCiAJCS8qCiAJCSAqIFNldCBjcHUgZGl2aWRlciBiYXNlZCBvbiB0aGUg cHJlLWNvbXB1dGVkIGFycmF5IGluCiAJCSAqIG9yZGVyIHRvIGhhdmUgYmFsYW5jZWQgc3RlcC4K QEAgLTE2MCwxNCArMTc0LDYgQEAgc3RhdGljIHZvaWQgX19pbml0IGFybWFkYTM3eHhfY3B1ZnJl cV9kdmZzX3NldHVwKHN0cnVjdCByZWdtYXAgKmJhc2UsCiAKIAkJcmVnbWFwX3VwZGF0ZV9iaXRz KGJhc2UsIHJlZywgbWFzaywgdmFsKTsKIAl9Ci0KLQkvKgotCSAqIFNldCBjcHUgY2xvY2sgc291 cmNlLCBmb3IgYWxsIHRoZSBsZXZlbCB3ZSBrZWVwIHRoZSBzYW1lCi0JICogY2xvY2sgc291cmNl IHRoYXQgdGhlIG9uZSBhbHJlYWR5IGNvbmZpZ3VyZWQuIEZvciB0aGlzIG9uZQotCSAqIHdlIG5l ZWQgdG8gdXNlIHRoZSBjbG9jayBmcmFtZXdvcmsKLQkgKi8KLQlwYXJlbnQgPSBjbGtfZ2V0X3Bh cmVudChjbGspOwotCWNsa19zZXRfcGFyZW50KGNsaywgcGFyZW50KTsKIH0KIAogLyoKQEAgLTM1 OCwxMSArMzY0LDE2IEBAIHN0YXRpYyBpbnQgX19pbml0IGFybWFkYTM3eHhfY3B1ZnJlcV9kcml2 ZXJfaW5pdCh2b2lkKQogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJdW5zaWduZWQg bG9uZyBmcmVxOwogCXVuc2lnbmVkIGludCBjdXJfZnJlcXVlbmN5LCBiYXNlX2ZyZXF1ZW5jeTsK LQlzdHJ1Y3QgcmVnbWFwICpuYl9wbV9iYXNlLCAqYXZzX2Jhc2U7CisJc3RydWN0IHJlZ21hcCAq bmJfY2xrX2Jhc2UsICpuYl9wbV9iYXNlLCAqYXZzX2Jhc2U7CiAJc3RydWN0IGRldmljZSAqY3B1 X2RldjsKIAlpbnQgbG9hZF9sdmwsIHJldDsKIAlzdHJ1Y3QgY2xrICpjbGssICpwYXJlbnQ7CiAK KwluYl9jbGtfYmFzZSA9CisJCXN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X2NvbXBhdGlibGUoIm1h cnZlbGwsYXJtYWRhLTM3MDAtcGVyaXBoLWNsb2NrLW5iIik7CisJaWYgKElTX0VSUihuYl9jbGtf YmFzZSkpCisJCXJldHVybiAtRU5PREVWOworCiAJbmJfcG1fYmFzZSA9CiAJCXN5c2Nvbl9yZWdt YXBfbG9va3VwX2J5X2NvbXBhdGlibGUoIm1hcnZlbGwsYXJtYWRhLTM3MDAtbmItcG0iKTsKIApA QCAtNDM5LDcgKzQ1MCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGFybWFkYTM3eHhfY3B1ZnJlcV9k cml2ZXJfaW5pdCh2b2lkKQogCWFybWFkYTM3eHhfY3B1ZnJlcV9hdnNfY29uZmlndXJlKGF2c19i YXNlLCBkdmZzKTsKIAlhcm1hZGEzN3h4X2NwdWZyZXFfYXZzX3NldHVwKGF2c19iYXNlLCBkdmZz KTsKIAotCWFybWFkYTM3eHhfY3B1ZnJlcV9kdmZzX3NldHVwKG5iX3BtX2Jhc2UsIGNsaywgZHZm cy0+ZGl2aWRlcik7CisJYXJtYWRhMzd4eF9jcHVmcmVxX2R2ZnNfc2V0dXAobmJfcG1fYmFzZSwg bmJfY2xrX2Jhc2UsIGR2ZnMtPmRpdmlkZXIpOwogCWNsa19wdXQoY2xrKTsKIAogCWZvciAobG9h ZF9sdmwgPSBBUk1BREFfMzdYWF9EVkZTX0xPQURfMDsgbG9hZF9sdmwgPCBMT0FEX0xFVkVMX05S OwotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0 cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGlu Zm8vbGludXgtYXJtLWtlcm5lbAo=