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 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BA42CC4332F for ; Thu, 28 Oct 2021 09:31:20 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A7D54610CB for ; Thu, 28 Oct 2021 09:31:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230097AbhJ1Jdo (ORCPT ); Thu, 28 Oct 2021 05:33:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47330 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230098AbhJ1Jdo (ORCPT ); Thu, 28 Oct 2021 05:33:44 -0400 Received: from mail-lf1-x12e.google.com (mail-lf1-x12e.google.com [IPv6:2a00:1450:4864:20::12e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1F63CC061570; Thu, 28 Oct 2021 02:31:17 -0700 (PDT) Received: by mail-lf1-x12e.google.com with SMTP id u21so12213318lff.8; Thu, 28 Oct 2021 02:31:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=5SCRR+E6hGA2qUYlZFUC09MM/t1uJnD/XLaVJ8yfNfk=; b=DIPttbwdnzYKTfXlI6MpZLACsySVnJjafi/Cj4futVxmFjkow5Tup11a5aSutu7COq FatUpMi61V6yWEoPZzhaBLMIXpJWkOFJ4R+UESLPOZ+yCzoPeZQZ67U6ElGS2o2lr7rE fMtMgxdDn0w3ksR0+aWxjPBJOlR548utKKa4PAuURNr4s35RCgHTMCjB3Wn4lAe5U2cZ jR4DTITlTVOjxWRBvn0JNWcPycCnS9KJm8vkHqYSeb6oVj1a3+klyPhFaTeiSiT+TYO4 3gJ54Mz2nm1fC7pQOAYxjRhgP+vOvEV4mdPOK/sRPID8Q/nkyXa77hGmLf8w7wffQy5/ /7Sw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=5SCRR+E6hGA2qUYlZFUC09MM/t1uJnD/XLaVJ8yfNfk=; b=6hlUpvT6CClcYTKlpuW7JswIbrlPpz+HVNFrzw4xBVQ0AgeC07vQ7havNIgxrcMwSP J60jKR5CKQa7Q/Zdrb9KcYFL7vSImV3LKkHyAocgzES1nbg/0MosW6mLlGYRM2qTI5/E Ib8K5/RRuMacLyvwsh/YEI21RAkRIFO88ig13fVrUQYKs//VWajWq8oUehTaIGzzQcL7 jlLEjcHPSTOhZvlCndCuX3RazI5IrZAmpbuZqrzVa3CCQQo3s6ZD04rlD/2aR42ojp6A Sp8HSthPDybrdiS9XlujbK56SY5gCpnXIBXtS9rXtq46QZQbsbAKACZmjllcoNTox97L DrwA== X-Gm-Message-State: AOAM533YrF0QmnvsYJYj+q6TtjQJOaIvnBlO3fIp9D+XmbCwxNvreVoH +RtRnJ5/RYTs5jT+DCopsUQ= X-Google-Smtp-Source: ABdhPJzHdKxqhsU7CoH1gvpFRrC1HQosEE7pvQ3GRH5o89V/kvy/XsJXdCk2D7WOcoxrEq+EL13rlQ== X-Received: by 2002:a05:6512:3049:: with SMTP id b9mr3103568lfb.660.1635413475449; Thu, 28 Oct 2021 02:31:15 -0700 (PDT) Received: from localhost.lan (ip-194-187-74-233.konfederacka.maverick.com.pl. [194.187.74.233]) by smtp.gmail.com with ESMTPSA id o26sm231548ljg.92.2021.10.28.02.31.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Oct 2021 02:31:15 -0700 (PDT) From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= To: Wim Van Sebroeck , Guenter Roeck , Rob Herring Cc: Florian Fainelli , bcm-kernel-feedback-list@broadcom.com, linux-watchdog@vger.kernel.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-mips@vger.kernel.org, =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= Subject: [PATCH 3/3] watchdog: bcm7038_wdt: support BCM4908 SoC Date: Thu, 28 Oct 2021 11:30:59 +0200 Message-Id: <20211028093059.32535-3-zajec5@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211028093059.32535-1-zajec5@gmail.com> References: <20211028093059.32535-1-zajec5@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org From: Rafał Miłecki Hardware supported by this driver goes back to the old bcm63xx days. It was then reused in BCM7038 and later also in BCM4908. Depending on SoC model registers layout differs a bit. This commit introduces support for per-chipset registers offsets & adds BCM4908 layout. Later on BCM63xx SoCs support should be added too (probably as platform devices due to missing DT). Eventually this driver should replace bcm63xx_wdt.c. Signed-off-by: Rafał Miłecki --- drivers/watchdog/Kconfig | 2 +- drivers/watchdog/bcm7038_wdt.c | 89 ++++++++++++++++++++++++++-------- 2 files changed, 69 insertions(+), 22 deletions(-) diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig index bf59faeb3de1..324aa942b182 100644 --- a/drivers/watchdog/Kconfig +++ b/drivers/watchdog/Kconfig @@ -1756,7 +1756,7 @@ config BCM7038_WDT tristate "BCM7038 Watchdog" select WATCHDOG_CORE depends on HAS_IOMEM - depends on ARCH_BRCMSTB || BMIPS_GENERIC || COMPILE_TEST + depends on ARCH_BCM4908 || ARCH_BRCMSTB || BMIPS_GENERIC || COMPILE_TEST help Watchdog driver for the built-in hardware in Broadcom 7038 and later SoCs used in set-top boxes. BCM7038 was made public diff --git a/drivers/watchdog/bcm7038_wdt.c b/drivers/watchdog/bcm7038_wdt.c index acaaa0005d5b..352689f869c1 100644 --- a/drivers/watchdog/bcm7038_wdt.c +++ b/drivers/watchdog/bcm7038_wdt.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -18,14 +19,17 @@ #define WDT_STOP_1 0xee00 #define WDT_STOP_2 0x00ee -#define WDT_TIMEOUT_REG 0x0 -#define WDT_CMD_REG 0x4 - #define WDT_MIN_TIMEOUT 1 /* seconds */ #define WDT_DEFAULT_TIMEOUT 30 /* seconds */ #define WDT_DEFAULT_RATE 27000000 +enum bcm63xx_wdt_soc { + BCM63XX_WDT_SOC_BCM4908, + BCM63XX_WDT_SOC_BCM7038, +}; + struct bcm7038_watchdog { + enum bcm63xx_wdt_soc soc; void __iomem *base; struct watchdog_device wdd; u32 rate; @@ -34,8 +38,52 @@ struct bcm7038_watchdog { static bool nowayout = WATCHDOG_NOWAYOUT; -static inline void bcm7038_wdt_write(u32 value, void __iomem *addr) +static const struct of_device_id bcm7038_wdt_match[] = { + { .compatible = "brcm,bcm4908-wdt", .data = (const void *)BCM63XX_WDT_SOC_BCM4908, }, + { .compatible = "brcm,bcm7038-wdt", .data = (const void *)BCM63XX_WDT_SOC_BCM7038, }, + {}, +}; +MODULE_DEVICE_TABLE(of, bcm7038_wdt_match); + +enum bcm7038_wdt_regs { + BCM63XX_WDT_REG_DEFVAL = 0, + BCM63XX_WDT_REG_CTL, + BCM63XX_WDT_REG_SOFTRESET, +}; + +static const u16 bcm7038_wdt_regs_bcm4908[] = { + [BCM63XX_WDT_REG_DEFVAL] = 0x28, + [BCM63XX_WDT_REG_CTL] = 0x2c, + [BCM63XX_WDT_REG_SOFTRESET] = 0x34, +}; + +static const u16 bcm7038_wdt_regs_bcm7038[] = { + [BCM63XX_WDT_REG_DEFVAL] = 0x00, + [BCM63XX_WDT_REG_CTL] = 0x04, +}; + +static void __iomem *bcm7038_wdt_reg_addr(struct watchdog_device *wdog, + enum bcm7038_wdt_regs reg) { + struct bcm7038_watchdog *wdt = watchdog_get_drvdata(wdog); + void __iomem *addr = wdt->base; + + switch (wdt->soc) { + case BCM63XX_WDT_SOC_BCM4908: + return addr + bcm7038_wdt_regs_bcm4908[reg]; + case BCM63XX_WDT_SOC_BCM7038: + return addr + bcm7038_wdt_regs_bcm7038[reg]; + default: + WARN_ON(1); + return NULL; + } +} + +static void bcm7038_wdt_write(struct watchdog_device *wdog, + enum bcm7038_wdt_regs reg, u32 value) +{ + void __iomem *addr = bcm7038_wdt_reg_addr(wdog, reg); + /* MIPS chips strapped for BE will automagically configure the * peripheral registers for CPU-native byte order. */ @@ -45,8 +93,11 @@ static inline void bcm7038_wdt_write(u32 value, void __iomem *addr) writel_relaxed(value, addr); } -static inline u32 bcm7038_wdt_read(void __iomem *addr) +static inline u32 bcm7038_wdt_read(struct watchdog_device *wdog, + enum bcm7038_wdt_regs reg) { + void __iomem *addr = bcm7038_wdt_reg_addr(wdog, reg); + if (IS_ENABLED(CONFIG_MIPS) && IS_ENABLED(CONFIG_CPU_BIG_ENDIAN)) return __raw_readl(addr); else @@ -60,15 +111,13 @@ static void bcm7038_wdt_set_timeout_reg(struct watchdog_device *wdog) timeout = wdt->rate * wdog->timeout; - bcm7038_wdt_write(timeout, wdt->base + WDT_TIMEOUT_REG); + bcm7038_wdt_write(wdog, BCM63XX_WDT_REG_DEFVAL, timeout); } static int bcm7038_wdt_ping(struct watchdog_device *wdog) { - struct bcm7038_watchdog *wdt = watchdog_get_drvdata(wdog); - - bcm7038_wdt_write(WDT_START_1, wdt->base + WDT_CMD_REG); - bcm7038_wdt_write(WDT_START_2, wdt->base + WDT_CMD_REG); + bcm7038_wdt_write(wdog, BCM63XX_WDT_REG_CTL, WDT_START_1); + bcm7038_wdt_write(wdog, BCM63XX_WDT_REG_CTL, WDT_START_2); return 0; } @@ -83,10 +132,8 @@ static int bcm7038_wdt_start(struct watchdog_device *wdog) static int bcm7038_wdt_stop(struct watchdog_device *wdog) { - struct bcm7038_watchdog *wdt = watchdog_get_drvdata(wdog); - - bcm7038_wdt_write(WDT_STOP_1, wdt->base + WDT_CMD_REG); - bcm7038_wdt_write(WDT_STOP_2, wdt->base + WDT_CMD_REG); + bcm7038_wdt_write(wdog, BCM63XX_WDT_REG_CTL, WDT_STOP_1); + bcm7038_wdt_write(wdog, BCM63XX_WDT_REG_CTL, WDT_STOP_2); return 0; } @@ -107,7 +154,7 @@ static unsigned int bcm7038_wdt_get_timeleft(struct watchdog_device *wdog) struct bcm7038_watchdog *wdt = watchdog_get_drvdata(wdog); u32 time_left; - time_left = bcm7038_wdt_read(wdt->base + WDT_CMD_REG); + time_left = bcm7038_wdt_read(wdog, BCM63XX_WDT_REG_CTL); return time_left / wdt->rate; } @@ -134,6 +181,7 @@ static void bcm7038_clk_disable_unprepare(void *data) static int bcm7038_wdt_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; + const struct of_device_id *of_id; struct bcm7038_watchdog *wdt; int err; @@ -143,6 +191,11 @@ static int bcm7038_wdt_probe(struct platform_device *pdev) platform_set_drvdata(pdev, wdt); + of_id = of_match_device(bcm7038_wdt_match, dev); + if (!of_id) + return -EINVAL; + wdt->soc = (enum bcm63xx_wdt_soc)of_id->data; + wdt->base = devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(wdt->base)) return PTR_ERR(wdt->base); @@ -211,12 +264,6 @@ static int bcm7038_wdt_resume(struct device *dev) static SIMPLE_DEV_PM_OPS(bcm7038_wdt_pm_ops, bcm7038_wdt_suspend, bcm7038_wdt_resume); -static const struct of_device_id bcm7038_wdt_match[] = { - { .compatible = "brcm,bcm7038-wdt" }, - {}, -}; -MODULE_DEVICE_TABLE(of, bcm7038_wdt_match); - static struct platform_driver bcm7038_wdt_driver = { .probe = bcm7038_wdt_probe, .driver = { -- 2.31.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 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C5B25C433EF for ; Thu, 28 Oct 2021 09:33:00 +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 91E7060EB4 for ; Thu, 28 Oct 2021 09:33:00 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 91E7060EB4 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Rx1D5zNgkp8cAVioLvGYDzrzwLdMOJTsWubrQjTb+20=; b=FvpYFbEVfOFbNg 2+KhybiLDMNJwrZ8WyREA25GTJmeQStoawvtCVp5zAWpfLxY2Kem16AHZQF0VpxGm332/KG6IGBTd C4xULaBBU3R8TNsLqDczAob4xIOifum9SjazZ9+le8UixawanNr0sbsytMby7Lg9eQsk/CV+OPY1x AIB/wd54Xij71eLvP2BSzL9TY4pw289oKidoFHVWPto6Mvtlfytj2YZuG6wvnL/O4BXAt7CpqGNtV GfSdYUduXn9ihE9T6QWQfQXJRCHmp6Wa+wH1U8a6SCrrrI9E/0Ndj++9UGT4dPwfKwW397JYZ9rhz L5ke32X0RDoJaak8Vctg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mg1l5-007OlN-Pa; Thu, 28 Oct 2021 09:31:40 +0000 Received: from mail-lf1-x12e.google.com ([2a00:1450:4864:20::12e]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mg1kj-007Ohl-GO for linux-arm-kernel@lists.infradead.org; Thu, 28 Oct 2021 09:31:19 +0000 Received: by mail-lf1-x12e.google.com with SMTP id j9so12222199lfu.7 for ; Thu, 28 Oct 2021 02:31:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=5SCRR+E6hGA2qUYlZFUC09MM/t1uJnD/XLaVJ8yfNfk=; b=DIPttbwdnzYKTfXlI6MpZLACsySVnJjafi/Cj4futVxmFjkow5Tup11a5aSutu7COq FatUpMi61V6yWEoPZzhaBLMIXpJWkOFJ4R+UESLPOZ+yCzoPeZQZ67U6ElGS2o2lr7rE fMtMgxdDn0w3ksR0+aWxjPBJOlR548utKKa4PAuURNr4s35RCgHTMCjB3Wn4lAe5U2cZ jR4DTITlTVOjxWRBvn0JNWcPycCnS9KJm8vkHqYSeb6oVj1a3+klyPhFaTeiSiT+TYO4 3gJ54Mz2nm1fC7pQOAYxjRhgP+vOvEV4mdPOK/sRPID8Q/nkyXa77hGmLf8w7wffQy5/ /7Sw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=5SCRR+E6hGA2qUYlZFUC09MM/t1uJnD/XLaVJ8yfNfk=; b=zYqzAAFRNyyfWZ8if9EyPLIYaxJoqUDYAQvyFVZDDHua9AN9PZxYFyZCPBlkejqw2Q STDTBalwM4ZFcDcJzcRO6TQXmKr7oJ0BsbC/GL0cn/D7WnLG+1Vbcr0/+M2qCQkvv3Kl lU0VwWSi7puz2qBqjcN17JM5+tLP4cYVcb2oxmD69exeP57x3zshvgJVlMXc3dlXiB0I AsqQ64yhGQP3y+XFOrsp6i8RFddwvuMKUwntvJD9gUw6yO3/8q2H2/GnO8A5fvM+bv+O gwsWNIGRrtgLyW0slvoE1VEoLENxHh9Qo5Nx+riB1CMpHpKrzC5ZabZbhS83W9NwUZU8 LADw== X-Gm-Message-State: AOAM531SV3b5yA6mNgqR/VYDdT1JxnFMnfiMJrOfM2OBqaC63x02aeKQ AwAK3WLCLNDMFwo8eUe+soQ= X-Google-Smtp-Source: ABdhPJzHdKxqhsU7CoH1gvpFRrC1HQosEE7pvQ3GRH5o89V/kvy/XsJXdCk2D7WOcoxrEq+EL13rlQ== X-Received: by 2002:a05:6512:3049:: with SMTP id b9mr3103568lfb.660.1635413475449; Thu, 28 Oct 2021 02:31:15 -0700 (PDT) Received: from localhost.lan (ip-194-187-74-233.konfederacka.maverick.com.pl. [194.187.74.233]) by smtp.gmail.com with ESMTPSA id o26sm231548ljg.92.2021.10.28.02.31.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Oct 2021 02:31:15 -0700 (PDT) From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= To: Wim Van Sebroeck , Guenter Roeck , Rob Herring Cc: Florian Fainelli , bcm-kernel-feedback-list@broadcom.com, linux-watchdog@vger.kernel.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-mips@vger.kernel.org, =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= Subject: [PATCH 3/3] watchdog: bcm7038_wdt: support BCM4908 SoC Date: Thu, 28 Oct 2021 11:30:59 +0200 Message-Id: <20211028093059.32535-3-zajec5@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211028093059.32535-1-zajec5@gmail.com> References: <20211028093059.32535-1-zajec5@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211028_023117_600849_BE8D3F85 X-CRM114-Status: GOOD ( 24.65 ) 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: , 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 RnJvbTogUmFmYcWCIE1pxYJlY2tpIDxyYWZhbEBtaWxlY2tpLnBsPgoKSGFyZHdhcmUgc3VwcG9y dGVkIGJ5IHRoaXMgZHJpdmVyIGdvZXMgYmFjayB0byB0aGUgb2xkIGJjbTYzeHggZGF5cy4gSXQK d2FzIHRoZW4gcmV1c2VkIGluIEJDTTcwMzggYW5kIGxhdGVyIGFsc28gaW4gQkNNNDkwOC4KCkRl cGVuZGluZyBvbiBTb0MgbW9kZWwgcmVnaXN0ZXJzIGxheW91dCBkaWZmZXJzIGEgYml0LiBUaGlz IGNvbW1pdAppbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHBlci1jaGlwc2V0IHJlZ2lzdGVycyBvZmZz ZXRzICYgYWRkcyBCQ000OTA4CmxheW91dC4KCkxhdGVyIG9uIEJDTTYzeHggU29DcyBzdXBwb3J0 IHNob3VsZCBiZSBhZGRlZCB0b28gKHByb2JhYmx5IGFzIHBsYXRmb3JtCmRldmljZXMgZHVlIHRv IG1pc3NpbmcgRFQpLiBFdmVudHVhbGx5IHRoaXMgZHJpdmVyIHNob3VsZCByZXBsYWNlCmJjbTYz eHhfd2R0LmMuCgpTaWduZWQtb2ZmLWJ5OiBSYWZhxYIgTWnFgmVja2kgPHJhZmFsQG1pbGVja2ku cGw+Ci0tLQogZHJpdmVycy93YXRjaGRvZy9LY29uZmlnICAgICAgIHwgIDIgKy0KIGRyaXZlcnMv d2F0Y2hkb2cvYmNtNzAzOF93ZHQuYyB8IDg5ICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0t LS0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgNjkgaW5zZXJ0aW9ucygrKSwgMjIgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnIGIvZHJpdmVycy93YXRjaGRv Zy9LY29uZmlnCmluZGV4IGJmNTlmYWViM2RlMS4uMzI0YWE5NDJiMTgyIDEwMDY0NAotLS0gYS9k cml2ZXJzL3dhdGNoZG9nL0tjb25maWcKKysrIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCkBA IC0xNzU2LDcgKzE3NTYsNyBAQCBjb25maWcgQkNNNzAzOF9XRFQKIAl0cmlzdGF0ZSAiQkNNNzAz OCBXYXRjaGRvZyIKIAlzZWxlY3QgV0FUQ0hET0dfQ09SRQogCWRlcGVuZHMgb24gSEFTX0lPTUVN Ci0JZGVwZW5kcyBvbiBBUkNIX0JSQ01TVEIgfHwgQk1JUFNfR0VORVJJQyB8fCBDT01QSUxFX1RF U1QKKwlkZXBlbmRzIG9uIEFSQ0hfQkNNNDkwOCB8fCBBUkNIX0JSQ01TVEIgfHwgQk1JUFNfR0VO RVJJQyB8fCBDT01QSUxFX1RFU1QKIAloZWxwCiAJIFdhdGNoZG9nIGRyaXZlciBmb3IgdGhlIGJ1 aWx0LWluIGhhcmR3YXJlIGluIEJyb2FkY29tIDcwMzggYW5kCiAJIGxhdGVyIFNvQ3MgdXNlZCBp biBzZXQtdG9wIGJveGVzLiAgQkNNNzAzOCB3YXMgbWFkZSBwdWJsaWMKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvd2F0Y2hkb2cvYmNtNzAzOF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYmNtNzAzOF93 ZHQuYwppbmRleCBhY2FhYTAwMDVkNWIuLjM1MjY4OWY4NjljMSAxMDA2NDQKLS0tIGEvZHJpdmVy cy93YXRjaGRvZy9iY203MDM4X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvYmNtNzAzOF93 ZHQuYwpAQCAtOSw2ICs5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxp bnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2Zf ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8 bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgpAQCAtMTgsMTQgKzE5LDE3 IEBACiAjZGVmaW5lIFdEVF9TVE9QXzEJCTB4ZWUwMAogI2RlZmluZSBXRFRfU1RPUF8yCQkweDAw ZWUKIAotI2RlZmluZSBXRFRfVElNRU9VVF9SRUcJCTB4MAotI2RlZmluZSBXRFRfQ01EX1JFRwkJ MHg0Ci0KICNkZWZpbmUgV0RUX01JTl9USU1FT1VUCQkxIC8qIHNlY29uZHMgKi8KICNkZWZpbmUg V0RUX0RFRkFVTFRfVElNRU9VVAkzMCAvKiBzZWNvbmRzICovCiAjZGVmaW5lIFdEVF9ERUZBVUxU X1JBVEUJMjcwMDAwMDAKIAorZW51bSBiY202M3h4X3dkdF9zb2MgeworCUJDTTYzWFhfV0RUX1NP Q19CQ000OTA4LAorCUJDTTYzWFhfV0RUX1NPQ19CQ003MDM4LAorfTsKKwogc3RydWN0IGJjbTcw Mzhfd2F0Y2hkb2cgeworCWVudW0gYmNtNjN4eF93ZHRfc29jCXNvYzsKIAl2b2lkIF9faW9tZW0J CSpiYXNlOwogCXN0cnVjdCB3YXRjaGRvZ19kZXZpY2UJd2RkOwogCXUzMgkJCXJhdGU7CkBAIC0z NCw4ICszOCw1MiBAQCBzdHJ1Y3QgYmNtNzAzOF93YXRjaGRvZyB7CiAKIHN0YXRpYyBib29sIG5v d2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBiY203MDM4 X3dkdF93cml0ZSh1MzIgdmFsdWUsIHZvaWQgX19pb21lbSAqYWRkcikKK3N0YXRpYyBjb25zdCBz dHJ1Y3Qgb2ZfZGV2aWNlX2lkIGJjbTcwMzhfd2R0X21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJs ZSA9ICJicmNtLGJjbTQ5MDgtd2R0IiwgLmRhdGEgPSAoY29uc3Qgdm9pZCAqKUJDTTYzWFhfV0RU X1NPQ19CQ000OTA4LCB9LAorCXsgLmNvbXBhdGlibGUgPSAiYnJjbSxiY203MDM4LXdkdCIsIC5k YXRhID0gKGNvbnN0IHZvaWQgKilCQ002M1hYX1dEVF9TT0NfQkNNNzAzOCwgfSwKKwl7fSwKK307 CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBiY203MDM4X3dkdF9tYXRjaCk7CisKK2VudW0gYmNt NzAzOF93ZHRfcmVncyB7CisJQkNNNjNYWF9XRFRfUkVHX0RFRlZBTCA9IDAsCisJQkNNNjNYWF9X RFRfUkVHX0NUTCwKKwlCQ002M1hYX1dEVF9SRUdfU09GVFJFU0VULAorfTsKKworc3RhdGljIGNv bnN0IHUxNiBiY203MDM4X3dkdF9yZWdzX2JjbTQ5MDhbXSA9IHsKKwlbQkNNNjNYWF9XRFRfUkVH X0RFRlZBTF0JPSAweDI4LAorCVtCQ002M1hYX1dEVF9SRUdfQ1RMXQkJPSAweDJjLAorCVtCQ002 M1hYX1dEVF9SRUdfU09GVFJFU0VUXQk9IDB4MzQsCit9OworCitzdGF0aWMgY29uc3QgdTE2IGJj bTcwMzhfd2R0X3JlZ3NfYmNtNzAzOFtdID0geworCVtCQ002M1hYX1dEVF9SRUdfREVGVkFMXQk9 IDB4MDAsCisJW0JDTTYzWFhfV0RUX1JFR19DVExdCQk9IDB4MDQsCit9OworCitzdGF0aWMgdm9p ZCBfX2lvbWVtICpiY203MDM4X3dkdF9yZWdfYWRkcihzdHJ1Y3Qgd2F0Y2hkb2dfZGV2aWNlICp3 ZG9nLAorCQkJCQkgIGVudW0gYmNtNzAzOF93ZHRfcmVncyByZWcpCiB7CisJc3RydWN0IGJjbTcw Mzhfd2F0Y2hkb2cgKndkdCA9IHdhdGNoZG9nX2dldF9kcnZkYXRhKHdkb2cpOworCXZvaWQgX19p b21lbSAqYWRkciA9IHdkdC0+YmFzZTsKKworCXN3aXRjaCAod2R0LT5zb2MpIHsKKwljYXNlIEJD TTYzWFhfV0RUX1NPQ19CQ000OTA4OgorCQlyZXR1cm4gYWRkciArIGJjbTcwMzhfd2R0X3JlZ3Nf YmNtNDkwOFtyZWddOworCWNhc2UgQkNNNjNYWF9XRFRfU09DX0JDTTcwMzg6CisJCXJldHVybiBh ZGRyICsgYmNtNzAzOF93ZHRfcmVnc19iY203MDM4W3JlZ107CisJZGVmYXVsdDoKKwkJV0FSTl9P TigxKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9pZCBiY203MDM4X3dkdF93 cml0ZShzdHJ1Y3Qgd2F0Y2hkb2dfZGV2aWNlICp3ZG9nLAorCQkJICAgICAgZW51bSBiY203MDM4 X3dkdF9yZWdzIHJlZywgdTMyIHZhbHVlKQoreworCXZvaWQgX19pb21lbSAqYWRkciA9IGJjbTcw Mzhfd2R0X3JlZ19hZGRyKHdkb2csIHJlZyk7CisKIAkvKiBNSVBTIGNoaXBzIHN0cmFwcGVkIGZv ciBCRSB3aWxsIGF1dG9tYWdpY2FsbHkgY29uZmlndXJlIHRoZQogCSAqIHBlcmlwaGVyYWwgcmVn aXN0ZXJzIGZvciBDUFUtbmF0aXZlIGJ5dGUgb3JkZXIuCiAJICovCkBAIC00NSw4ICs5MywxMSBA QCBzdGF0aWMgaW5saW5lIHZvaWQgYmNtNzAzOF93ZHRfd3JpdGUodTMyIHZhbHVlLCB2b2lkIF9f aW9tZW0gKmFkZHIpCiAJCXdyaXRlbF9yZWxheGVkKHZhbHVlLCBhZGRyKTsKIH0KIAotc3RhdGlj IGlubGluZSB1MzIgYmNtNzAzOF93ZHRfcmVhZCh2b2lkIF9faW9tZW0gKmFkZHIpCitzdGF0aWMg aW5saW5lIHUzMiBiY203MDM4X3dkdF9yZWFkKHN0cnVjdCB3YXRjaGRvZ19kZXZpY2UgKndkb2cs CisJCQkJICAgZW51bSBiY203MDM4X3dkdF9yZWdzIHJlZykKIHsKKwl2b2lkIF9faW9tZW0gKmFk ZHIgPSBiY203MDM4X3dkdF9yZWdfYWRkcih3ZG9nLCByZWcpOworCiAJaWYgKElTX0VOQUJMRUQo Q09ORklHX01JUFMpICYmIElTX0VOQUJMRUQoQ09ORklHX0NQVV9CSUdfRU5ESUFOKSkKIAkJcmV0 dXJuIF9fcmF3X3JlYWRsKGFkZHIpOwogCWVsc2UKQEAgLTYwLDE1ICsxMTEsMTMgQEAgc3RhdGlj IHZvaWQgYmNtNzAzOF93ZHRfc2V0X3RpbWVvdXRfcmVnKHN0cnVjdCB3YXRjaGRvZ19kZXZpY2Ug Kndkb2cpCiAKIAl0aW1lb3V0ID0gd2R0LT5yYXRlICogd2RvZy0+dGltZW91dDsKIAotCWJjbTcw Mzhfd2R0X3dyaXRlKHRpbWVvdXQsIHdkdC0+YmFzZSArIFdEVF9USU1FT1VUX1JFRyk7CisJYmNt NzAzOF93ZHRfd3JpdGUod2RvZywgQkNNNjNYWF9XRFRfUkVHX0RFRlZBTCwgdGltZW91dCk7CiB9 CiAKIHN0YXRpYyBpbnQgYmNtNzAzOF93ZHRfcGluZyhzdHJ1Y3Qgd2F0Y2hkb2dfZGV2aWNlICp3 ZG9nKQogewotCXN0cnVjdCBiY203MDM4X3dhdGNoZG9nICp3ZHQgPSB3YXRjaGRvZ19nZXRfZHJ2 ZGF0YSh3ZG9nKTsKLQotCWJjbTcwMzhfd2R0X3dyaXRlKFdEVF9TVEFSVF8xLCB3ZHQtPmJhc2Ug KyBXRFRfQ01EX1JFRyk7Ci0JYmNtNzAzOF93ZHRfd3JpdGUoV0RUX1NUQVJUXzIsIHdkdC0+YmFz ZSArIFdEVF9DTURfUkVHKTsKKwliY203MDM4X3dkdF93cml0ZSh3ZG9nLCBCQ002M1hYX1dEVF9S RUdfQ1RMLCBXRFRfU1RBUlRfMSk7CisJYmNtNzAzOF93ZHRfd3JpdGUod2RvZywgQkNNNjNYWF9X RFRfUkVHX0NUTCwgV0RUX1NUQVJUXzIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04MywxMCArMTMy LDggQEAgc3RhdGljIGludCBiY203MDM4X3dkdF9zdGFydChzdHJ1Y3Qgd2F0Y2hkb2dfZGV2aWNl ICp3ZG9nKQogCiBzdGF0aWMgaW50IGJjbTcwMzhfd2R0X3N0b3Aoc3RydWN0IHdhdGNoZG9nX2Rl dmljZSAqd2RvZykKIHsKLQlzdHJ1Y3QgYmNtNzAzOF93YXRjaGRvZyAqd2R0ID0gd2F0Y2hkb2df Z2V0X2RydmRhdGEod2RvZyk7Ci0KLQliY203MDM4X3dkdF93cml0ZShXRFRfU1RPUF8xLCB3ZHQt PmJhc2UgKyBXRFRfQ01EX1JFRyk7Ci0JYmNtNzAzOF93ZHRfd3JpdGUoV0RUX1NUT1BfMiwgd2R0 LT5iYXNlICsgV0RUX0NNRF9SRUcpOworCWJjbTcwMzhfd2R0X3dyaXRlKHdkb2csIEJDTTYzWFhf V0RUX1JFR19DVEwsIFdEVF9TVE9QXzEpOworCWJjbTcwMzhfd2R0X3dyaXRlKHdkb2csIEJDTTYz WFhfV0RUX1JFR19DVEwsIFdEVF9TVE9QXzIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDcsNyAr MTU0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBiY203MDM4X3dkdF9nZXRfdGltZWxlZnQoc3Ry dWN0IHdhdGNoZG9nX2RldmljZSAqd2RvZykKIAlzdHJ1Y3QgYmNtNzAzOF93YXRjaGRvZyAqd2R0 ID0gd2F0Y2hkb2dfZ2V0X2RydmRhdGEod2RvZyk7CiAJdTMyIHRpbWVfbGVmdDsKIAotCXRpbWVf bGVmdCA9IGJjbTcwMzhfd2R0X3JlYWQod2R0LT5iYXNlICsgV0RUX0NNRF9SRUcpOworCXRpbWVf bGVmdCA9IGJjbTcwMzhfd2R0X3JlYWQod2RvZywgQkNNNjNYWF9XRFRfUkVHX0NUTCk7CiAKIAly ZXR1cm4gdGltZV9sZWZ0IC8gd2R0LT5yYXRlOwogfQpAQCAtMTM0LDYgKzE4MSw3IEBAIHN0YXRp YyB2b2lkIGJjbTcwMzhfY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHZvaWQgKmRhdGEpCiBzdGF0aWMg aW50IGJjbTcwMzhfd2R0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJ c3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNl X2lkICpvZl9pZDsKIAlzdHJ1Y3QgYmNtNzAzOF93YXRjaGRvZyAqd2R0OwogCWludCBlcnI7CiAK QEAgLTE0Myw2ICsxOTEsMTEgQEAgc3RhdGljIGludCBiY203MDM4X3dkdF9wcm9iZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgd2R0 KTsKIAorCW9mX2lkID0gb2ZfbWF0Y2hfZGV2aWNlKGJjbTcwMzhfd2R0X21hdGNoLCBkZXYpOwor CWlmICghb2ZfaWQpCisJCXJldHVybiAtRUlOVkFMOworCXdkdC0+c29jID0gKGVudW0gYmNtNjN4 eF93ZHRfc29jKW9mX2lkLT5kYXRhOworCiAJd2R0LT5iYXNlID0gZGV2bV9wbGF0Zm9ybV9pb3Jl bWFwX3Jlc291cmNlKHBkZXYsIDApOwogCWlmIChJU19FUlIod2R0LT5iYXNlKSkKIAkJcmV0dXJu IFBUUl9FUlIod2R0LT5iYXNlKTsKQEAgLTIxMSwxMiArMjY0LDYgQEAgc3RhdGljIGludCBiY203 MDM4X3dkdF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogc3RhdGljIFNJTVBMRV9ERVZfUE1f T1BTKGJjbTcwMzhfd2R0X3BtX29wcywgYmNtNzAzOF93ZHRfc3VzcGVuZCwKIAkJCSBiY203MDM4 X3dkdF9yZXN1bWUpOwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBiY203MDM4 X3dkdF9tYXRjaFtdID0gewotCXsgLmNvbXBhdGlibGUgPSAiYnJjbSxiY203MDM4LXdkdCIgfSwK LQl7fSwKLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBiY203MDM4X3dkdF9tYXRjaCk7Ci0K IHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGJjbTcwMzhfd2R0X2RyaXZlciA9IHsKIAku cHJvYmUJCT0gYmNtNzAzOF93ZHRfcHJvYmUsCiAJLmRyaXZlcgkJPSB7Ci0tIAoyLjMxLjEKCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0t a2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcK aHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2Vy bmVsCg==