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=-14.0 required=3.0 tests=BAYES_00,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 E57CAC43332 for ; Wed, 20 Jan 2021 22:12:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C9422206ED for ; Wed, 20 Jan 2021 22:12:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387825AbhATVsy convert rfc822-to-8bit (ORCPT ); Wed, 20 Jan 2021 16:48:54 -0500 Received: from mail-ej1-f53.google.com ([209.85.218.53]:44882 "EHLO mail-ej1-f53.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728298AbhATVUz (ORCPT ); Wed, 20 Jan 2021 16:20:55 -0500 Received: by mail-ej1-f53.google.com with SMTP id w1so35493658ejf.11; Wed, 20 Jan 2021 13:20:37 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=dnu2p3mZHWXCGNRh76zM3Siqs3hhwg+Fa2Cwzks/Mao=; b=iw119R1mzNXkekKYQDUfFJxsIRN2AI2NPqsJrzWCa42OORw3tzsnBH44LIo8Ws5QIo Erz1dJK1kwumimX6gaT7FQqYqjfOe/mwZQ32xUH9/JgZdUQm4lkgj+kchelMv+GVp7ES /dfNQ1cGkRWBr3+CR8j23m8wryPzXPELu9VvW2Y5O5IWp9aBABpL2P4pGQ8CzQt6axw3 xcGP766sLo/GeBzpZvps97ewEKM1tBXhQ8oxQh0mkejd5QzIa+MDwwqIubw0Lc/+oOYq Bh9XjpSDkXGhzwNoB6d2AjZrLoZ6sds+UtN4bBSpMmJjLhy/CwkRrm8jhYdXXOJndi1z AlKA== X-Gm-Message-State: AOAM530Q1no/bIVjvSXnzOL/EeRFiKQI67tGJGyWHTa7pHDXQ3ZItbJv GRJTVfPotiOGZciwNgtGeeVw4XOORsAKeKxH6hE= X-Google-Smtp-Source: ABdhPJza8NREUSeYaA94uOm2lYyX/Lpvtda3fbB00xiBVOT387SH9TqZcp1n0zXKaneRTNkXkBRQ2ovInIIpEqGsdU8= X-Received: by 2002:a17:906:b2d5:: with SMTP id cf21mr7356493ejb.387.1611177611367; Wed, 20 Jan 2021 13:20:11 -0800 (PST) MIME-Version: 1.0 References: <20210120154158.1860736-1-arnd@kernel.org> <20210120154158.1860736-2-arnd@kernel.org> In-Reply-To: <20210120154158.1860736-2-arnd@kernel.org> From: Barry Song Date: Thu, 21 Jan 2021 10:20:00 +1300 Message-ID: Subject: Re: [PATCH 1/3] rtc: remove sirfsoc driver To: Arnd Bergmann Cc: linux-arm-kernel@lists.infradead.org, LKML , linux-rtc@vger.kernel.org, Alexandre Belloni , Alessandro Zummo , Arnd Bergmann Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8BIT Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Arnd Bergmann 于2021年1月21日周四 上午4:42写道: > > From: Arnd Bergmann > > The CSR SiRF prima2/atlas platforms are getting removed, so this driver > is no longer needed. > > Cc: Barry Song > Signed-off-by: Arnd Bergmann Acked-by: Barry Song > --- > .../bindings/rtc/sirf,prima2-sysrtc.txt | 13 - > drivers/rtc/Kconfig | 7 - > drivers/rtc/Makefile | 1 - > drivers/rtc/rtc-sirfsoc.c | 446 ------------------ > include/linux/rtc/sirfsoc_rtciobrg.h | 21 - > 5 files changed, 488 deletions(-) > delete mode 100644 Documentation/devicetree/bindings/rtc/sirf,prima2-sysrtc.txt > delete mode 100644 drivers/rtc/rtc-sirfsoc.c > delete mode 100644 include/linux/rtc/sirfsoc_rtciobrg.h > > diff --git a/Documentation/devicetree/bindings/rtc/sirf,prima2-sysrtc.txt b/Documentation/devicetree/bindings/rtc/sirf,prima2-sysrtc.txt > deleted file mode 100644 > index 58885b55da21..000000000000 > --- a/Documentation/devicetree/bindings/rtc/sirf,prima2-sysrtc.txt > +++ /dev/null > @@ -1,13 +0,0 @@ > -SiRFSoC Real Time Clock > - > -Required properties: > -- compatible: must be "sirf,prima2-sysrtc" > -- reg: address range of rtc register set. > -- interrupts: rtc alarm interrupts. > - > -Example: > - rtc@2000 { > - compatible = "sirf,prima2-sysrtc"; > - reg = <0x2000 0x1000>; > - interrupts = <52 53 54>; > - }; > diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig > index 6123f9f4fbc9..8fb9aa55ace1 100644 > --- a/drivers/rtc/Kconfig > +++ b/drivers/rtc/Kconfig > @@ -1799,13 +1799,6 @@ config RTC_DRV_IMX_SC > If you say yes here you get support for the NXP i.MX System > Controller RTC module. > > -config RTC_DRV_SIRFSOC > - tristate "SiRFSOC RTC" > - depends on ARCH_SIRF > - help > - Say "yes" here to support the real time clock on SiRF SOC chips. > - This driver can also be built as a module called rtc-sirfsoc. > - > config RTC_DRV_ST_LPC > tristate "STMicroelectronics LPC RTC" > depends on ARCH_STI > diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile > index bb8f319b09fb..1f00896db507 100644 > --- a/drivers/rtc/Makefile > +++ b/drivers/rtc/Makefile > @@ -154,7 +154,6 @@ obj-$(CONFIG_RTC_DRV_SA1100) += rtc-sa1100.o > obj-$(CONFIG_RTC_DRV_SC27XX) += rtc-sc27xx.o > obj-$(CONFIG_RTC_DRV_SD3078) += rtc-sd3078.o > obj-$(CONFIG_RTC_DRV_SH) += rtc-sh.o > -obj-$(CONFIG_RTC_DRV_SIRFSOC) += rtc-sirfsoc.o > obj-$(CONFIG_RTC_DRV_SNVS) += rtc-snvs.o > obj-$(CONFIG_RTC_DRV_SPEAR) += rtc-spear.o > obj-$(CONFIG_RTC_DRV_STARFIRE) += rtc-starfire.o > diff --git a/drivers/rtc/rtc-sirfsoc.c b/drivers/rtc/rtc-sirfsoc.c > deleted file mode 100644 > index 03a6cca23201..000000000000 > --- a/drivers/rtc/rtc-sirfsoc.c > +++ /dev/null > @@ -1,446 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0-or-later > -/* > - * SiRFSoC Real Time Clock interface for Linux > - * > - * Copyright (c) 2013 Cambridge Silicon Radio Limited, a CSR plc group company. > - */ > - > -#include > -#include > -#include > -#include > -#include > -#include > -#include > -#include > -#include > - > - > -#define RTC_CN 0x00 > -#define RTC_ALARM0 0x04 > -#define RTC_ALARM1 0x18 > -#define RTC_STATUS 0x08 > -#define RTC_SW_VALUE 0x40 > -#define SIRFSOC_RTC_AL1E (1<<6) > -#define SIRFSOC_RTC_AL1 (1<<4) > -#define SIRFSOC_RTC_HZE (1<<3) > -#define SIRFSOC_RTC_AL0E (1<<2) > -#define SIRFSOC_RTC_HZ (1<<1) > -#define SIRFSOC_RTC_AL0 (1<<0) > -#define RTC_DIV 0x0c > -#define RTC_DEEP_CTRL 0x14 > -#define RTC_CLOCK_SWITCH 0x1c > -#define SIRFSOC_RTC_CLK 0x03 /* others are reserved */ > - > -/* Refer to RTC DIV switch */ > -#define RTC_HZ 16 > - > -/* This macro is also defined in arch/arm/plat-sirfsoc/cpu.c */ > -#define RTC_SHIFT 4 > - > -#define INTR_SYSRTC_CN 0x48 > - > -struct sirfsoc_rtc_drv { > - struct rtc_device *rtc; > - u32 rtc_base; > - u32 irq; > - unsigned irq_wake; > - /* Overflow for every 8 years extra time */ > - u32 overflow_rtc; > - spinlock_t lock; > - struct regmap *regmap; > -#ifdef CONFIG_PM > - u32 saved_counter; > - u32 saved_overflow_rtc; > -#endif > -}; > - > -static u32 sirfsoc_rtc_readl(struct sirfsoc_rtc_drv *rtcdrv, u32 offset) > -{ > - u32 val; > - > - regmap_read(rtcdrv->regmap, rtcdrv->rtc_base + offset, &val); > - return val; > -} > - > -static void sirfsoc_rtc_writel(struct sirfsoc_rtc_drv *rtcdrv, > - u32 offset, u32 val) > -{ > - regmap_write(rtcdrv->regmap, rtcdrv->rtc_base + offset, val); > -} > - > -static int sirfsoc_rtc_read_alarm(struct device *dev, > - struct rtc_wkalrm *alrm) > -{ > - unsigned long rtc_alarm, rtc_count; > - struct sirfsoc_rtc_drv *rtcdrv; > - > - rtcdrv = dev_get_drvdata(dev); > - > - spin_lock_irq(&rtcdrv->lock); > - > - rtc_count = sirfsoc_rtc_readl(rtcdrv, RTC_CN); > - > - rtc_alarm = sirfsoc_rtc_readl(rtcdrv, RTC_ALARM0); > - memset(alrm, 0, sizeof(struct rtc_wkalrm)); > - > - /* > - * assume alarm interval not beyond one round counter overflow_rtc: > - * 0->0xffffffff > - */ > - /* if alarm is in next overflow cycle */ > - if (rtc_count > rtc_alarm) > - rtc_time64_to_tm((rtcdrv->overflow_rtc + 1) > - << (BITS_PER_LONG - RTC_SHIFT) > - | rtc_alarm >> RTC_SHIFT, &alrm->time); > - else > - rtc_time64_to_tm(rtcdrv->overflow_rtc > - << (BITS_PER_LONG - RTC_SHIFT) > - | rtc_alarm >> RTC_SHIFT, &alrm->time); > - if (sirfsoc_rtc_readl(rtcdrv, RTC_STATUS) & SIRFSOC_RTC_AL0E) > - alrm->enabled = 1; > - > - spin_unlock_irq(&rtcdrv->lock); > - > - return 0; > -} > - > -static int sirfsoc_rtc_set_alarm(struct device *dev, > - struct rtc_wkalrm *alrm) > -{ > - unsigned long rtc_status_reg, rtc_alarm; > - struct sirfsoc_rtc_drv *rtcdrv; > - rtcdrv = dev_get_drvdata(dev); > - > - if (alrm->enabled) { > - rtc_alarm = rtc_tm_to_time64(&alrm->time); > - > - spin_lock_irq(&rtcdrv->lock); > - > - rtc_status_reg = sirfsoc_rtc_readl(rtcdrv, RTC_STATUS); > - if (rtc_status_reg & SIRFSOC_RTC_AL0E) { > - /* > - * An ongoing alarm in progress - ingore it and not > - * to return EBUSY > - */ > - dev_info(dev, "An old alarm was set, will be replaced by a new one\n"); > - } > - > - sirfsoc_rtc_writel(rtcdrv, RTC_ALARM0, rtc_alarm << RTC_SHIFT); > - rtc_status_reg &= ~0x07; /* mask out the lower status bits */ > - /* > - * This bit RTC_AL sets it as a wake-up source for Sleep Mode > - * Writing 1 into this bit will clear it > - */ > - rtc_status_reg |= SIRFSOC_RTC_AL0; > - /* enable the RTC alarm interrupt */ > - rtc_status_reg |= SIRFSOC_RTC_AL0E; > - sirfsoc_rtc_writel(rtcdrv, RTC_STATUS, rtc_status_reg); > - > - spin_unlock_irq(&rtcdrv->lock); > - } else { > - /* > - * if this function was called with enabled=0 > - * then it could mean that the application is > - * trying to cancel an ongoing alarm > - */ > - spin_lock_irq(&rtcdrv->lock); > - > - rtc_status_reg = sirfsoc_rtc_readl(rtcdrv, RTC_STATUS); > - if (rtc_status_reg & SIRFSOC_RTC_AL0E) { > - /* clear the RTC status register's alarm bit */ > - rtc_status_reg &= ~0x07; > - /* write 1 into SIRFSOC_RTC_AL0 to force a clear */ > - rtc_status_reg |= (SIRFSOC_RTC_AL0); > - /* Clear the Alarm enable bit */ > - rtc_status_reg &= ~(SIRFSOC_RTC_AL0E); > - > - sirfsoc_rtc_writel(rtcdrv, RTC_STATUS, > - rtc_status_reg); > - } > - > - spin_unlock_irq(&rtcdrv->lock); > - } > - > - return 0; > -} > - > -static int sirfsoc_rtc_read_time(struct device *dev, > - struct rtc_time *tm) > -{ > - unsigned long tmp_rtc = 0; > - struct sirfsoc_rtc_drv *rtcdrv; > - rtcdrv = dev_get_drvdata(dev); > - /* > - * This patch is taken from WinCE - Need to validate this for > - * correctness. To work around sirfsoc RTC counter double sync logic > - * fail, read several times to make sure get stable value. > - */ > - do { > - tmp_rtc = sirfsoc_rtc_readl(rtcdrv, RTC_CN); > - cpu_relax(); > - } while (tmp_rtc != sirfsoc_rtc_readl(rtcdrv, RTC_CN)); > - > - rtc_time64_to_tm(rtcdrv->overflow_rtc << (BITS_PER_LONG - RTC_SHIFT) > - | tmp_rtc >> RTC_SHIFT, tm); > - return 0; > -} > - > -static int sirfsoc_rtc_set_time(struct device *dev, > - struct rtc_time *tm) > -{ > - unsigned long rtc_time; > - struct sirfsoc_rtc_drv *rtcdrv; > - rtcdrv = dev_get_drvdata(dev); > - > - rtc_time = rtc_tm_to_time64(tm); > - > - rtcdrv->overflow_rtc = rtc_time >> (BITS_PER_LONG - RTC_SHIFT); > - > - sirfsoc_rtc_writel(rtcdrv, RTC_SW_VALUE, rtcdrv->overflow_rtc); > - sirfsoc_rtc_writel(rtcdrv, RTC_CN, rtc_time << RTC_SHIFT); > - > - return 0; > -} > - > -static int sirfsoc_rtc_alarm_irq_enable(struct device *dev, > - unsigned int enabled) > -{ > - unsigned long rtc_status_reg = 0x0; > - struct sirfsoc_rtc_drv *rtcdrv; > - > - rtcdrv = dev_get_drvdata(dev); > - > - spin_lock_irq(&rtcdrv->lock); > - > - rtc_status_reg = sirfsoc_rtc_readl(rtcdrv, RTC_STATUS); > - if (enabled) > - rtc_status_reg |= SIRFSOC_RTC_AL0E; > - else > - rtc_status_reg &= ~SIRFSOC_RTC_AL0E; > - > - sirfsoc_rtc_writel(rtcdrv, RTC_STATUS, rtc_status_reg); > - > - spin_unlock_irq(&rtcdrv->lock); > - > - return 0; > - > -} > - > -static const struct rtc_class_ops sirfsoc_rtc_ops = { > - .read_time = sirfsoc_rtc_read_time, > - .set_time = sirfsoc_rtc_set_time, > - .read_alarm = sirfsoc_rtc_read_alarm, > - .set_alarm = sirfsoc_rtc_set_alarm, > - .alarm_irq_enable = sirfsoc_rtc_alarm_irq_enable > -}; > - > -static irqreturn_t sirfsoc_rtc_irq_handler(int irq, void *pdata) > -{ > - struct sirfsoc_rtc_drv *rtcdrv = pdata; > - unsigned long rtc_status_reg = 0x0; > - unsigned long events = 0x0; > - > - spin_lock(&rtcdrv->lock); > - > - rtc_status_reg = sirfsoc_rtc_readl(rtcdrv, RTC_STATUS); > - /* this bit will be set ONLY if an alarm was active > - * and it expired NOW > - * So this is being used as an ASSERT > - */ > - if (rtc_status_reg & SIRFSOC_RTC_AL0) { > - /* > - * clear the RTC status register's alarm bit > - * mask out the lower status bits > - */ > - rtc_status_reg &= ~0x07; > - /* write 1 into SIRFSOC_RTC_AL0 to ACK the alarm interrupt */ > - rtc_status_reg |= (SIRFSOC_RTC_AL0); > - /* Clear the Alarm enable bit */ > - rtc_status_reg &= ~(SIRFSOC_RTC_AL0E); > - } > - > - sirfsoc_rtc_writel(rtcdrv, RTC_STATUS, rtc_status_reg); > - > - spin_unlock(&rtcdrv->lock); > - > - /* this should wake up any apps polling/waiting on the read > - * after setting the alarm > - */ > - events |= RTC_IRQF | RTC_AF; > - rtc_update_irq(rtcdrv->rtc, 1, events); > - > - return IRQ_HANDLED; > -} > - > -static const struct of_device_id sirfsoc_rtc_of_match[] = { > - { .compatible = "sirf,prima2-sysrtc"}, > - {}, > -}; > - > -static const struct regmap_config sysrtc_regmap_config = { > - .reg_bits = 32, > - .val_bits = 32, > - .fast_io = true, > -}; > - > -MODULE_DEVICE_TABLE(of, sirfsoc_rtc_of_match); > - > -static int sirfsoc_rtc_probe(struct platform_device *pdev) > -{ > - int err; > - unsigned long rtc_div; > - struct sirfsoc_rtc_drv *rtcdrv; > - struct device_node *np = pdev->dev.of_node; > - > - rtcdrv = devm_kzalloc(&pdev->dev, > - sizeof(struct sirfsoc_rtc_drv), GFP_KERNEL); > - if (rtcdrv == NULL) > - return -ENOMEM; > - > - spin_lock_init(&rtcdrv->lock); > - > - err = of_property_read_u32(np, "reg", &rtcdrv->rtc_base); > - if (err) { > - dev_err(&pdev->dev, "unable to find base address of rtc node in dtb\n"); > - return err; > - } > - > - platform_set_drvdata(pdev, rtcdrv); > - > - /* Register rtc alarm as a wakeup source */ > - device_init_wakeup(&pdev->dev, 1); > - > - rtcdrv->regmap = devm_regmap_init_iobg(&pdev->dev, > - &sysrtc_regmap_config); > - if (IS_ERR(rtcdrv->regmap)) { > - err = PTR_ERR(rtcdrv->regmap); > - dev_err(&pdev->dev, "Failed to allocate register map: %d\n", > - err); > - return err; > - } > - > - /* > - * Set SYS_RTC counter in RTC_HZ HZ Units > - * We are using 32K RTC crystal (32768 / RTC_HZ / 2) -1 > - * If 16HZ, therefore RTC_DIV = 1023; > - */ > - rtc_div = ((32768 / RTC_HZ) / 2) - 1; > - sirfsoc_rtc_writel(rtcdrv, RTC_DIV, rtc_div); > - > - /* 0x3 -> RTC_CLK */ > - sirfsoc_rtc_writel(rtcdrv, RTC_CLOCK_SWITCH, SIRFSOC_RTC_CLK); > - > - /* reset SYS RTC ALARM0 */ > - sirfsoc_rtc_writel(rtcdrv, RTC_ALARM0, 0x0); > - > - /* reset SYS RTC ALARM1 */ > - sirfsoc_rtc_writel(rtcdrv, RTC_ALARM1, 0x0); > - > - /* Restore RTC Overflow From Register After Command Reboot */ > - rtcdrv->overflow_rtc = > - sirfsoc_rtc_readl(rtcdrv, RTC_SW_VALUE); > - > - rtcdrv->rtc = devm_rtc_allocate_device(&pdev->dev); > - if (IS_ERR(rtcdrv->rtc)) > - return PTR_ERR(rtcdrv->rtc); > - > - rtcdrv->rtc->ops = &sirfsoc_rtc_ops; > - rtcdrv->rtc->range_max = (1ULL << 60) - 1; > - > - rtcdrv->irq = platform_get_irq(pdev, 0); > - err = devm_request_irq(&pdev->dev, rtcdrv->irq, sirfsoc_rtc_irq_handler, > - IRQF_SHARED, pdev->name, rtcdrv); > - if (err) { > - dev_err(&pdev->dev, "Unable to register for the SiRF SOC RTC IRQ\n"); > - return err; > - } > - > - return devm_rtc_register_device(rtcdrv->rtc); > -} > - > -#ifdef CONFIG_PM_SLEEP > -static int sirfsoc_rtc_suspend(struct device *dev) > -{ > - struct sirfsoc_rtc_drv *rtcdrv = dev_get_drvdata(dev); > - rtcdrv->overflow_rtc = > - sirfsoc_rtc_readl(rtcdrv, RTC_SW_VALUE); > - > - rtcdrv->saved_counter = > - sirfsoc_rtc_readl(rtcdrv, RTC_CN); > - rtcdrv->saved_overflow_rtc = rtcdrv->overflow_rtc; > - if (device_may_wakeup(dev) && !enable_irq_wake(rtcdrv->irq)) > - rtcdrv->irq_wake = 1; > - > - return 0; > -} > - > -static int sirfsoc_rtc_resume(struct device *dev) > -{ > - u32 tmp; > - struct sirfsoc_rtc_drv *rtcdrv = dev_get_drvdata(dev); > - > - /* > - * if resume from snapshot and the rtc power is lost, > - * restroe the rtc settings > - */ > - if (SIRFSOC_RTC_CLK != sirfsoc_rtc_readl(rtcdrv, RTC_CLOCK_SWITCH)) { > - u32 rtc_div; > - /* 0x3 -> RTC_CLK */ > - sirfsoc_rtc_writel(rtcdrv, RTC_CLOCK_SWITCH, SIRFSOC_RTC_CLK); > - /* > - * Set SYS_RTC counter in RTC_HZ HZ Units > - * We are using 32K RTC crystal (32768 / RTC_HZ / 2) -1 > - * If 16HZ, therefore RTC_DIV = 1023; > - */ > - rtc_div = ((32768 / RTC_HZ) / 2) - 1; > - > - sirfsoc_rtc_writel(rtcdrv, RTC_DIV, rtc_div); > - > - /* reset SYS RTC ALARM0 */ > - sirfsoc_rtc_writel(rtcdrv, RTC_ALARM0, 0x0); > - > - /* reset SYS RTC ALARM1 */ > - sirfsoc_rtc_writel(rtcdrv, RTC_ALARM1, 0x0); > - } > - rtcdrv->overflow_rtc = rtcdrv->saved_overflow_rtc; > - > - /* > - * if current counter is small than previous, > - * it means overflow in sleep > - */ > - tmp = sirfsoc_rtc_readl(rtcdrv, RTC_CN); > - if (tmp <= rtcdrv->saved_counter) > - rtcdrv->overflow_rtc++; > - /* > - *PWRC Value Be Changed When Suspend, Restore Overflow > - * In Memory To Register > - */ > - sirfsoc_rtc_writel(rtcdrv, RTC_SW_VALUE, rtcdrv->overflow_rtc); > - > - if (device_may_wakeup(dev) && rtcdrv->irq_wake) { > - disable_irq_wake(rtcdrv->irq); > - rtcdrv->irq_wake = 0; > - } > - > - return 0; > -} > -#endif > - > -static SIMPLE_DEV_PM_OPS(sirfsoc_rtc_pm_ops, > - sirfsoc_rtc_suspend, sirfsoc_rtc_resume); > - > -static struct platform_driver sirfsoc_rtc_driver = { > - .driver = { > - .name = "sirfsoc-rtc", > - .pm = &sirfsoc_rtc_pm_ops, > - .of_match_table = sirfsoc_rtc_of_match, > - }, > - .probe = sirfsoc_rtc_probe, > -}; > -module_platform_driver(sirfsoc_rtc_driver); > - > -MODULE_DESCRIPTION("SiRF SoC rtc driver"); > -MODULE_AUTHOR("Xianglong Du "); > -MODULE_LICENSE("GPL v2"); > -MODULE_ALIAS("platform:sirfsoc-rtc"); > diff --git a/include/linux/rtc/sirfsoc_rtciobrg.h b/include/linux/rtc/sirfsoc_rtciobrg.h > deleted file mode 100644 > index b31f2856733d..000000000000 > --- a/include/linux/rtc/sirfsoc_rtciobrg.h > +++ /dev/null > @@ -1,21 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0-or-later */ > -/* > - * RTC I/O Bridge interfaces for CSR SiRFprimaII > - * ARM access the registers of SYSRTC, GPSRTC and PWRC through this module > - * > - * Copyright (c) 2011 Cambridge Silicon Radio Limited, a CSR plc group company. > - */ > -#ifndef _SIRFSOC_RTC_IOBRG_H_ > -#define _SIRFSOC_RTC_IOBRG_H_ > - > -struct regmap_config; > - > -extern void sirfsoc_rtc_iobrg_besyncing(void); > - > -extern u32 sirfsoc_rtc_iobrg_readl(u32 addr); > - > -extern void sirfsoc_rtc_iobrg_writel(u32 val, u32 addr); > -struct regmap *devm_regmap_init_iobg(struct device *dev, > - const struct regmap_config *config); > - > -#endif > -- > 2.29.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=-14.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 B34C5C433E6 for ; Wed, 20 Jan 2021 21:23:18 +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 5E5DB23444 for ; Wed, 20 Jan 2021 21:23:18 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5E5DB23444 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:To:Subject:Message-ID:Date:From:In-Reply-To: References:MIME-Version:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=tSSfnPQxpODZB69HtC5s6y+hRb4Is2ETmxBGESxtzeU=; b=OfsbzUzVYJhXvyJjZ+3xCg306 hHFstcxnWEYg1eCrVXLU5IGvRhdi/fhGnML8TMSTfB0Bc9d57pYB8uanzRjq1us6TNoLWC93e5iZc RgAHlfNPxtvuCI+Qe/jZUMuN62yfSMpFW4Vm6QHpPK7jxANO4Svnw1svq+xX+u/nsJz+MSPa7BhiM m389xXStXt9drIA28bwQJdYoCyE7jPlEBgXXskp1ATihejECzaFXtRtU/0Gte9aSviZe9XsZWebiu ++9Vccq1APeoPiTmZkJJ21+s2EoopC4/4y5S6bZEVB7IvphoKG3X2OLrORz3dh3tw9SDqBShBeA6+ amGDocepQ==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1l2KuR-0005di-Ts; Wed, 20 Jan 2021 21:20:59 +0000 Received: from mail-ej1-f54.google.com ([209.85.218.54]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1l2Kth-0005I6-0A for linux-arm-kernel@lists.infradead.org; Wed, 20 Jan 2021 21:20:17 +0000 Received: by mail-ej1-f54.google.com with SMTP id by1so29121074ejc.0 for ; Wed, 20 Jan 2021 13:20:12 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=dnu2p3mZHWXCGNRh76zM3Siqs3hhwg+Fa2Cwzks/Mao=; b=eGpYG1YgG+DDiO7pGRfgjsBbbszinftheiRYM6TrgqQHRVQlIfFCYrNtX/q102ce/S xIJj71sxBjFcnf6TVFd1G7MYN4HS1X+8uGgG7XC8M+LrTO3vI38i73YSPmtwr4U0swcr 8zB2vCB2+A16c4QOHETwCpEc+0ne9vssAJ4FtfrFfiyy2Qw/Uo5hIP6AaSNSmbC/ZUI9 lq8RtyHvrE4ak5ceRnc6nfoSjwTocL7lsyICcWFVi7WkGAyE++S+GeLdW6rlqhR6cMAk Op7x1AaNB17/cgyz+41KY6T3zi7ASAEK/4SbuPusVEsAl/QgDix1dxVXQjELB98gxkaR dH6w== X-Gm-Message-State: AOAM531x1zJH3iCudJ7cFR2/OA5ar+QfBr0quzZNfwOnoDBDEGa9SHkE rDtkSw1S29Rf3KHaADIaHsdRs0MsdwNpzcrclH4= X-Google-Smtp-Source: ABdhPJza8NREUSeYaA94uOm2lYyX/Lpvtda3fbB00xiBVOT387SH9TqZcp1n0zXKaneRTNkXkBRQ2ovInIIpEqGsdU8= X-Received: by 2002:a17:906:b2d5:: with SMTP id cf21mr7356493ejb.387.1611177611367; Wed, 20 Jan 2021 13:20:11 -0800 (PST) MIME-Version: 1.0 References: <20210120154158.1860736-1-arnd@kernel.org> <20210120154158.1860736-2-arnd@kernel.org> In-Reply-To: <20210120154158.1860736-2-arnd@kernel.org> From: Barry Song Date: Thu, 21 Jan 2021 10:20:00 +1300 Message-ID: Subject: Re: [PATCH 1/3] rtc: remove sirfsoc driver To: Arnd Bergmann X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210120_162013_113117_1CA3F99D X-CRM114-Status: GOOD ( 35.23 ) 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: linux-rtc@vger.kernel.org, Alessandro Zummo , Alexandre Belloni , Arnd Bergmann , LKML , 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 QXJuZCBCZXJnbWFubiA8YXJuZEBrZXJuZWwub3JnPiDkuo4yMDIx5bm0MeaciDIx5pel5ZGo5Zub IOS4iuWNiDQ6NDLlhpnpgZPvvJoKPgo+IEZyb206IEFybmQgQmVyZ21hbm4gPGFybmRAYXJuZGIu ZGU+Cj4KPiBUaGUgQ1NSIFNpUkYgcHJpbWEyL2F0bGFzIHBsYXRmb3JtcyBhcmUgZ2V0dGluZyBy ZW1vdmVkLCBzbyB0aGlzIGRyaXZlcgo+IGlzIG5vIGxvbmdlciBuZWVkZWQuCj4KPiBDYzogQmFy cnkgU29uZyA8YmFvaHVhQGtlcm5lbC5vcmc+Cj4gU2lnbmVkLW9mZi1ieTogQXJuZCBCZXJnbWFu biA8YXJuZEBhcm5kYi5kZT4KCkFja2VkLWJ5OiBCYXJyeSBTb25nIDxiYW9odWFAa2VybmVsLm9y Zz4KCj4gLS0tCj4gIC4uLi9iaW5kaW5ncy9ydGMvc2lyZixwcmltYTItc3lzcnRjLnR4dCAgICAg ICB8ICAxMyAtCj4gIGRyaXZlcnMvcnRjL0tjb25maWcgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgNyAtCj4gIGRyaXZlcnMvcnRjL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgMSAtCj4gIGRyaXZlcnMvcnRjL3J0Yy1zaXJmc29jLmMgICAgICAgICAgICAgICAgICAg ICB8IDQ0NiAtLS0tLS0tLS0tLS0tLS0tLS0KPiAgaW5jbHVkZS9saW51eC9ydGMvc2lyZnNvY19y dGNpb2JyZy5oICAgICAgICAgIHwgIDIxIC0KPiAgNSBmaWxlcyBjaGFuZ2VkLCA0ODggZGVsZXRp b25zKC0pCj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmlu ZGluZ3MvcnRjL3NpcmYscHJpbWEyLXN5c3J0Yy50eHQKPiAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvcnRjL3J0Yy1zaXJmc29jLmMKPiAgZGVsZXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGlu dXgvcnRjL3NpcmZzb2NfcnRjaW9icmcuaAo+Cj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24v ZGV2aWNldHJlZS9iaW5kaW5ncy9ydGMvc2lyZixwcmltYTItc3lzcnRjLnR4dCBiL0RvY3VtZW50 YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ydGMvc2lyZixwcmltYTItc3lzcnRjLnR4dAo+IGRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDU4ODg1YjU1ZGEyMS4uMDAwMDAwMDAwMDAw Cj4gLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3J0Yy9zaXJmLHByaW1h Mi1zeXNydGMudHh0Cj4gKysrIC9kZXYvbnVsbAo+IEBAIC0xLDEzICswLDAgQEAKPiAtU2lSRlNv QyBSZWFsIFRpbWUgQ2xvY2sKPiAtCj4gLVJlcXVpcmVkIHByb3BlcnRpZXM6Cj4gLS0gY29tcGF0 aWJsZTogbXVzdCBiZSAic2lyZixwcmltYTItc3lzcnRjIgo+IC0tIHJlZzogYWRkcmVzcyByYW5n ZSBvZiBydGMgcmVnaXN0ZXIgc2V0Lgo+IC0tIGludGVycnVwdHM6IHJ0YyBhbGFybSBpbnRlcnJ1 cHRzLgo+IC0KPiAtRXhhbXBsZToKPiAtICAgICAgIHJ0Y0AyMDAwIHsKPiAtICAgICAgICAgICAg ICAgY29tcGF0aWJsZSA9ICJzaXJmLHByaW1hMi1zeXNydGMiOwo+IC0gICAgICAgICAgICAgICBy ZWcgPSA8MHgyMDAwIDB4MTAwMD47Cj4gLSAgICAgICAgICAgICAgIGludGVycnVwdHMgPSA8NTIg NTMgNTQ+Owo+IC0gICAgICAgfTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvS2NvbmZpZyBi L2RyaXZlcnMvcnRjL0tjb25maWcKPiBpbmRleCA2MTIzZjlmNGZiYzkuLjhmYjlhYTU1YWNlMSAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL3J0Yy9LY29uZmlnCj4gKysrIGIvZHJpdmVycy9ydGMvS2Nv bmZpZwo+IEBAIC0xNzk5LDEzICsxNzk5LDYgQEAgY29uZmlnIFJUQ19EUlZfSU1YX1NDCj4gICAg ICAgICAgICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIE5YUCBp Lk1YIFN5c3RlbQo+ICAgICAgICAgICAgQ29udHJvbGxlciBSVEMgbW9kdWxlLgo+Cj4gLWNvbmZp ZyBSVENfRFJWX1NJUkZTT0MKPiAtICAgICAgIHRyaXN0YXRlICJTaVJGU09DIFJUQyIKPiAtICAg ICAgIGRlcGVuZHMgb24gQVJDSF9TSVJGCj4gLSAgICAgICBoZWxwCj4gLSAgICAgICAgIFNheSAi eWVzIiBoZXJlIHRvIHN1cHBvcnQgdGhlIHJlYWwgdGltZSBjbG9jayBvbiBTaVJGIFNPQyBjaGlw cy4KPiAtICAgICAgICAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUg Y2FsbGVkIHJ0Yy1zaXJmc29jLgo+IC0KPiAgY29uZmlnIFJUQ19EUlZfU1RfTFBDCj4gICAgICAg ICB0cmlzdGF0ZSAiU1RNaWNyb2VsZWN0cm9uaWNzIExQQyBSVEMiCj4gICAgICAgICBkZXBlbmRz IG9uIEFSQ0hfU1RJCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL01ha2VmaWxlIGIvZHJpdmVy cy9ydGMvTWFrZWZpbGUKPiBpbmRleCBiYjhmMzE5YjA5ZmIuLjFmMDA4OTZkYjUwNyAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL3J0Yy9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvcnRjL01ha2VmaWxl Cj4gQEAgLTE1NCw3ICsxNTQsNiBAQCBvYmotJChDT05GSUdfUlRDX0RSVl9TQTExMDApICAgICAg ICArPSBydGMtc2ExMTAwLm8KPiAgb2JqLSQoQ09ORklHX1JUQ19EUlZfU0MyN1hYKSAgICs9IHJ0 Yy1zYzI3eHgubwo+ICBvYmotJChDT05GSUdfUlRDX0RSVl9TRDMwNzgpICAgKz0gcnRjLXNkMzA3 OC5vCj4gIG9iai0kKENPTkZJR19SVENfRFJWX1NIKSAgICAgICArPSBydGMtc2gubwo+IC1vYmot JChDT05GSUdfUlRDX0RSVl9TSVJGU09DKSAgKz0gcnRjLXNpcmZzb2Mubwo+ICBvYmotJChDT05G SUdfUlRDX0RSVl9TTlZTKSAgICAgKz0gcnRjLXNudnMubwo+ICBvYmotJChDT05GSUdfUlRDX0RS Vl9TUEVBUikgICAgKz0gcnRjLXNwZWFyLm8KPiAgb2JqLSQoQ09ORklHX1JUQ19EUlZfU1RBUkZJ UkUpICs9IHJ0Yy1zdGFyZmlyZS5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zaXJm c29jLmMgYi9kcml2ZXJzL3J0Yy9ydGMtc2lyZnNvYy5jCj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0Cj4gaW5kZXggMDNhNmNjYTIzMjAxLi4wMDAwMDAwMDAwMDAKPiAtLS0gYS9kcml2ZXJzL3J0 Yy9ydGMtc2lyZnNvYy5jCj4gKysrIC9kZXYvbnVsbAo+IEBAIC0xLDQ0NiArMCwwIEBACj4gLS8v IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCj4gLS8qCj4gLSAqIFNp UkZTb0MgUmVhbCBUaW1lIENsb2NrIGludGVyZmFjZSBmb3IgTGludXgKPiAtICoKPiAtICogQ29w eXJpZ2h0IChjKSAyMDEzIENhbWJyaWRnZSBTaWxpY29uIFJhZGlvIExpbWl0ZWQsIGEgQ1NSIHBs YyBncm91cCBjb21wYW55Lgo+IC0gKi8KPiAtCj4gLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4K PiAtI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgo+IC0jaW5jbHVkZSA8bGludXgvcnRjLmg+Cj4gLSNp bmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L3NsYWIu aD4KPiAtI2luY2x1ZGUgPGxpbnV4L2lvLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9vZi5oPgo+IC0j aW5jbHVkZSA8bGludXgvcmVnbWFwLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9ydGMvc2lyZnNvY19y dGNpb2JyZy5oPgo+IC0KPiAtCj4gLSNkZWZpbmUgUlRDX0NOICAgICAgICAgICAgICAgICAweDAw Cj4gLSNkZWZpbmUgUlRDX0FMQVJNMCAgICAgICAgICAgICAweDA0Cj4gLSNkZWZpbmUgUlRDX0FM QVJNMSAgICAgICAgICAgICAweDE4Cj4gLSNkZWZpbmUgUlRDX1NUQVRVUyAgICAgICAgICAgICAw eDA4Cj4gLSNkZWZpbmUgUlRDX1NXX1ZBTFVFICAgICAgICAgICAgMHg0MAo+IC0jZGVmaW5lIFNJ UkZTT0NfUlRDX0FMMUUgICAgICAgKDE8PDYpCj4gLSNkZWZpbmUgU0lSRlNPQ19SVENfQUwxICAg ICAgICAgICAgICAgICgxPDw0KQo+IC0jZGVmaW5lIFNJUkZTT0NfUlRDX0haRSAgICAgICAgICAg ICAgICAoMTw8MykKPiAtI2RlZmluZSBTSVJGU09DX1JUQ19BTDBFICAgICAgICgxPDwyKQo+IC0j ZGVmaW5lIFNJUkZTT0NfUlRDX0haICAgICAgICAgKDE8PDEpCj4gLSNkZWZpbmUgU0lSRlNPQ19S VENfQUwwICAgICAgICAgICAgICAgICgxPDwwKQo+IC0jZGVmaW5lIFJUQ19ESVYgICAgICAgICAg ICAgICAgICAgICAgICAweDBjCj4gLSNkZWZpbmUgUlRDX0RFRVBfQ1RSTCAgICAgICAgICAweDE0 Cj4gLSNkZWZpbmUgUlRDX0NMT0NLX1NXSVRDSCAgICAgICAweDFjCj4gLSNkZWZpbmUgU0lSRlNP Q19SVENfQ0xLICAgICAgICAgICAgICAgIDB4MDMgICAgLyogb3RoZXJzIGFyZSByZXNlcnZlZCAq Lwo+IC0KPiAtLyogUmVmZXIgdG8gUlRDIERJViBzd2l0Y2ggKi8KPiAtI2RlZmluZSBSVENfSFog ICAgICAgICAgICAgICAgIDE2Cj4gLQo+IC0vKiBUaGlzIG1hY3JvIGlzIGFsc28gZGVmaW5lZCBp biBhcmNoL2FybS9wbGF0LXNpcmZzb2MvY3B1LmMgKi8KPiAtI2RlZmluZSBSVENfU0hJRlQgICAg ICAgICAgICAgIDQKPiAtCj4gLSNkZWZpbmUgSU5UUl9TWVNSVENfQ04gICAgICAgICAweDQ4Cj4g LQo+IC1zdHJ1Y3Qgc2lyZnNvY19ydGNfZHJ2IHsKPiAtICAgICAgIHN0cnVjdCBydGNfZGV2aWNl ICAgICAgICpydGM7Cj4gLSAgICAgICB1MzIgICAgICAgICAgICAgICAgICAgICBydGNfYmFzZTsK PiAtICAgICAgIHUzMiAgICAgICAgICAgICAgICAgICAgIGlycTsKPiAtICAgICAgIHVuc2lnbmVk ICAgICAgICAgICAgICAgIGlycV93YWtlOwo+IC0gICAgICAgLyogT3ZlcmZsb3cgZm9yIGV2ZXJ5 IDggeWVhcnMgZXh0cmEgdGltZSAqLwo+IC0gICAgICAgdTMyICAgICAgICAgICAgICAgICAgICAg b3ZlcmZsb3dfcnRjOwo+IC0gICAgICAgc3BpbmxvY2tfdCAgICAgICAgICAgICAgbG9jazsKPiAt ICAgICAgIHN0cnVjdCByZWdtYXAgKnJlZ21hcDsKPiAtI2lmZGVmIENPTkZJR19QTQo+IC0gICAg ICAgdTMyICAgICAgICAgICAgIHNhdmVkX2NvdW50ZXI7Cj4gLSAgICAgICB1MzIgICAgICAgICAg ICAgc2F2ZWRfb3ZlcmZsb3dfcnRjOwo+IC0jZW5kaWYKPiAtfTsKPiAtCj4gLXN0YXRpYyB1MzIg c2lyZnNvY19ydGNfcmVhZGwoc3RydWN0IHNpcmZzb2NfcnRjX2RydiAqcnRjZHJ2LCB1MzIgb2Zm c2V0KQo+IC17Cj4gLSAgICAgICB1MzIgdmFsOwo+IC0KPiAtICAgICAgIHJlZ21hcF9yZWFkKHJ0 Y2Rydi0+cmVnbWFwLCBydGNkcnYtPnJ0Y19iYXNlICsgb2Zmc2V0LCAmdmFsKTsKPiAtICAgICAg IHJldHVybiB2YWw7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHNpcmZzb2NfcnRjX3dyaXRlbChz dHJ1Y3Qgc2lyZnNvY19ydGNfZHJ2ICpydGNkcnYsCj4gLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHUzMiBvZmZzZXQsIHUzMiB2YWwpCj4gLXsKPiAtICAgICAgIHJlZ21hcF93cml0ZShy dGNkcnYtPnJlZ21hcCwgcnRjZHJ2LT5ydGNfYmFzZSArIG9mZnNldCwgdmFsKTsKPiAtfQo+IC0K PiAtc3RhdGljIGludCBzaXJmc29jX3J0Y19yZWFkX2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwK PiAtICAgICAgICAgICAgICAgc3RydWN0IHJ0Y193a2Fscm0gKmFscm0pCj4gLXsKPiAtICAgICAg IHVuc2lnbmVkIGxvbmcgcnRjX2FsYXJtLCBydGNfY291bnQ7Cj4gLSAgICAgICBzdHJ1Y3Qgc2ly ZnNvY19ydGNfZHJ2ICpydGNkcnY7Cj4gLQo+IC0gICAgICAgcnRjZHJ2ID0gZGV2X2dldF9kcnZk YXRhKGRldik7Cj4gLQo+IC0gICAgICAgc3Bpbl9sb2NrX2lycSgmcnRjZHJ2LT5sb2NrKTsKPiAt Cj4gLSAgICAgICBydGNfY291bnQgPSBzaXJmc29jX3J0Y19yZWFkbChydGNkcnYsIFJUQ19DTik7 Cj4gLQo+IC0gICAgICAgcnRjX2FsYXJtID0gc2lyZnNvY19ydGNfcmVhZGwocnRjZHJ2LCBSVENf QUxBUk0wKTsKPiAtICAgICAgIG1lbXNldChhbHJtLCAwLCBzaXplb2Yoc3RydWN0IHJ0Y193a2Fs cm0pKTsKPiAtCj4gLSAgICAgICAvKgo+IC0gICAgICAgICogYXNzdW1lIGFsYXJtIGludGVydmFs IG5vdCBiZXlvbmQgb25lIHJvdW5kIGNvdW50ZXIgb3ZlcmZsb3dfcnRjOgo+IC0gICAgICAgICog MC0+MHhmZmZmZmZmZgo+IC0gICAgICAgICovCj4gLSAgICAgICAvKiBpZiBhbGFybSBpcyBpbiBu ZXh0IG92ZXJmbG93IGN5Y2xlICovCj4gLSAgICAgICBpZiAocnRjX2NvdW50ID4gcnRjX2FsYXJt KQo+IC0gICAgICAgICAgICAgICBydGNfdGltZTY0X3RvX3RtKChydGNkcnYtPm92ZXJmbG93X3J0 YyArIDEpCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgKEJJVFNfUEVSX0xP TkcgLSBSVENfU0hJRlQpCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBydGNf YWxhcm0gPj4gUlRDX1NISUZULCAmYWxybS0+dGltZSk7Cj4gLSAgICAgICBlbHNlCj4gLSAgICAg ICAgICAgICAgIHJ0Y190aW1lNjRfdG9fdG0ocnRjZHJ2LT5vdmVyZmxvd19ydGMKPiAtICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAoQklUU19QRVJfTE9ORyAtIFJUQ19TSElGVCkK PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJ0Y19hbGFybSA+PiBSVENfU0hJ RlQsICZhbHJtLT50aW1lKTsKPiAtICAgICAgIGlmIChzaXJmc29jX3J0Y19yZWFkbChydGNkcnYs IFJUQ19TVEFUVVMpICYgU0lSRlNPQ19SVENfQUwwRSkKPiAtICAgICAgICAgICAgICAgYWxybS0+ ZW5hYmxlZCA9IDE7Cj4gLQo+IC0gICAgICAgc3Bpbl91bmxvY2tfaXJxKCZydGNkcnYtPmxvY2sp Owo+IC0KPiAtICAgICAgIHJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IHNpcmZzb2Nf cnRjX3NldF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gLSAgICAgICAgICAgICAgIHN0cnVj dCBydGNfd2thbHJtICphbHJtKQo+IC17Cj4gLSAgICAgICB1bnNpZ25lZCBsb25nIHJ0Y19zdGF0 dXNfcmVnLCBydGNfYWxhcm07Cj4gLSAgICAgICBzdHJ1Y3Qgc2lyZnNvY19ydGNfZHJ2ICpydGNk cnY7Cj4gLSAgICAgICBydGNkcnYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiAtCj4gLSAgICAg ICBpZiAoYWxybS0+ZW5hYmxlZCkgewo+IC0gICAgICAgICAgICAgICBydGNfYWxhcm0gPSBydGNf dG1fdG9fdGltZTY0KCZhbHJtLT50aW1lKTsKPiAtCj4gLSAgICAgICAgICAgICAgIHNwaW5fbG9j a19pcnEoJnJ0Y2Rydi0+bG9jayk7Cj4gLQo+IC0gICAgICAgICAgICAgICBydGNfc3RhdHVzX3Jl ZyA9IHNpcmZzb2NfcnRjX3JlYWRsKHJ0Y2RydiwgUlRDX1NUQVRVUyk7Cj4gLSAgICAgICAgICAg ICAgIGlmIChydGNfc3RhdHVzX3JlZyAmIFNJUkZTT0NfUlRDX0FMMEUpIHsKPiAtICAgICAgICAg ICAgICAgICAgICAgICAvKgo+IC0gICAgICAgICAgICAgICAgICAgICAgICAqIEFuIG9uZ29pbmcg YWxhcm0gaW4gcHJvZ3Jlc3MgLSBpbmdvcmUgaXQgYW5kIG5vdAo+IC0gICAgICAgICAgICAgICAg ICAgICAgICAqIHRvIHJldHVybiBFQlVTWQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAqLwo+ IC0gICAgICAgICAgICAgICAgICAgICAgIGRldl9pbmZvKGRldiwgIkFuIG9sZCBhbGFybSB3YXMg c2V0LCB3aWxsIGJlIHJlcGxhY2VkIGJ5IGEgbmV3IG9uZVxuIik7Cj4gLSAgICAgICAgICAgICAg IH0KPiAtCj4gLSAgICAgICAgICAgICAgIHNpcmZzb2NfcnRjX3dyaXRlbChydGNkcnYsIFJUQ19B TEFSTTAsIHJ0Y19hbGFybSA8PCBSVENfU0hJRlQpOwo+IC0gICAgICAgICAgICAgICBydGNfc3Rh dHVzX3JlZyAmPSB+MHgwNzsgLyogbWFzayBvdXQgdGhlIGxvd2VyIHN0YXR1cyBiaXRzICovCj4g LSAgICAgICAgICAgICAgIC8qCj4gLSAgICAgICAgICAgICAgICAqIFRoaXMgYml0IFJUQ19BTCBz ZXRzIGl0IGFzIGEgd2FrZS11cCBzb3VyY2UgZm9yIFNsZWVwIE1vZGUKPiAtICAgICAgICAgICAg ICAgICogV3JpdGluZyAxIGludG8gdGhpcyBiaXQgd2lsbCBjbGVhciBpdAo+IC0gICAgICAgICAg ICAgICAgKi8KPiAtICAgICAgICAgICAgICAgcnRjX3N0YXR1c19yZWcgfD0gU0lSRlNPQ19SVENf QUwwOwo+IC0gICAgICAgICAgICAgICAvKiBlbmFibGUgdGhlIFJUQyBhbGFybSBpbnRlcnJ1cHQg Ki8KPiAtICAgICAgICAgICAgICAgcnRjX3N0YXR1c19yZWcgfD0gU0lSRlNPQ19SVENfQUwwRTsK PiAtICAgICAgICAgICAgICAgc2lyZnNvY19ydGNfd3JpdGVsKHJ0Y2RydiwgUlRDX1NUQVRVUywg cnRjX3N0YXR1c19yZWcpOwo+IC0KPiAtICAgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxKCZy dGNkcnYtPmxvY2spOwo+IC0gICAgICAgfSBlbHNlIHsKPiAtICAgICAgICAgICAgICAgLyoKPiAt ICAgICAgICAgICAgICAgICogaWYgdGhpcyBmdW5jdGlvbiB3YXMgY2FsbGVkIHdpdGggZW5hYmxl ZD0wCj4gLSAgICAgICAgICAgICAgICAqIHRoZW4gaXQgY291bGQgbWVhbiB0aGF0IHRoZSBhcHBs aWNhdGlvbiBpcwo+IC0gICAgICAgICAgICAgICAgKiB0cnlpbmcgdG8gY2FuY2VsIGFuIG9uZ29p bmcgYWxhcm0KPiAtICAgICAgICAgICAgICAgICovCj4gLSAgICAgICAgICAgICAgIHNwaW5fbG9j a19pcnEoJnJ0Y2Rydi0+bG9jayk7Cj4gLQo+IC0gICAgICAgICAgICAgICBydGNfc3RhdHVzX3Jl ZyA9IHNpcmZzb2NfcnRjX3JlYWRsKHJ0Y2RydiwgUlRDX1NUQVRVUyk7Cj4gLSAgICAgICAgICAg ICAgIGlmIChydGNfc3RhdHVzX3JlZyAmIFNJUkZTT0NfUlRDX0FMMEUpIHsKPiAtICAgICAgICAg ICAgICAgICAgICAgICAvKiBjbGVhciB0aGUgUlRDIHN0YXR1cyByZWdpc3RlcidzIGFsYXJtIGJp dCAqLwo+IC0gICAgICAgICAgICAgICAgICAgICAgIHJ0Y19zdGF0dXNfcmVnICY9IH4weDA3Owo+ IC0gICAgICAgICAgICAgICAgICAgICAgIC8qIHdyaXRlIDEgaW50byBTSVJGU09DX1JUQ19BTDAg dG8gZm9yY2UgYSBjbGVhciAqLwo+IC0gICAgICAgICAgICAgICAgICAgICAgIHJ0Y19zdGF0dXNf cmVnIHw9IChTSVJGU09DX1JUQ19BTDApOwo+IC0gICAgICAgICAgICAgICAgICAgICAgIC8qIENs ZWFyIHRoZSBBbGFybSBlbmFibGUgYml0ICovCj4gLSAgICAgICAgICAgICAgICAgICAgICAgcnRj X3N0YXR1c19yZWcgJj0gfihTSVJGU09DX1JUQ19BTDBFKTsKPiAtCj4gLSAgICAgICAgICAgICAg ICAgICAgICAgc2lyZnNvY19ydGNfd3JpdGVsKHJ0Y2RydiwgUlRDX1NUQVRVUywKPiAtICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRjX3N0YXR1c19yZWcpOwo+IC0g ICAgICAgICAgICAgICB9Cj4gLQo+IC0gICAgICAgICAgICAgICBzcGluX3VubG9ja19pcnEoJnJ0 Y2Rydi0+bG9jayk7Cj4gLSAgICAgICB9Cj4gLQo+IC0gICAgICAgcmV0dXJuIDA7Cj4gLX0KPiAt Cj4gLXN0YXRpYyBpbnQgc2lyZnNvY19ydGNfcmVhZF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwK PiAtICAgICAgICAgICAgICAgc3RydWN0IHJ0Y190aW1lICp0bSkKPiAtewo+IC0gICAgICAgdW5z aWduZWQgbG9uZyB0bXBfcnRjID0gMDsKPiAtICAgICAgIHN0cnVjdCBzaXJmc29jX3J0Y19kcnYg KnJ0Y2RydjsKPiAtICAgICAgIHJ0Y2RydiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+IC0gICAg ICAgLyoKPiAtICAgICAgICAqIFRoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbSBXaW5DRSAtIE5lZWQg dG8gdmFsaWRhdGUgdGhpcyBmb3IKPiAtICAgICAgICAqIGNvcnJlY3RuZXNzLiBUbyB3b3JrIGFy b3VuZCBzaXJmc29jIFJUQyBjb3VudGVyIGRvdWJsZSBzeW5jIGxvZ2ljCj4gLSAgICAgICAgKiBm YWlsLCByZWFkIHNldmVyYWwgdGltZXMgdG8gbWFrZSBzdXJlIGdldCBzdGFibGUgdmFsdWUuCj4g LSAgICAgICAgKi8KPiAtICAgICAgIGRvIHsKPiAtICAgICAgICAgICAgICAgdG1wX3J0YyA9IHNp cmZzb2NfcnRjX3JlYWRsKHJ0Y2RydiwgUlRDX0NOKTsKPiAtICAgICAgICAgICAgICAgY3B1X3Jl bGF4KCk7Cj4gLSAgICAgICB9IHdoaWxlICh0bXBfcnRjICE9IHNpcmZzb2NfcnRjX3JlYWRsKHJ0 Y2RydiwgUlRDX0NOKSk7Cj4gLQo+IC0gICAgICAgcnRjX3RpbWU2NF90b190bShydGNkcnYtPm92 ZXJmbG93X3J0YyA8PCAoQklUU19QRVJfTE9ORyAtIFJUQ19TSElGVCkKPiAtICAgICAgICAgICAg ICAgICAgICAgICAgfCB0bXBfcnRjID4+IFJUQ19TSElGVCwgdG0pOwo+IC0gICAgICAgcmV0dXJu IDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgc2lyZnNvY19ydGNfc2V0X3RpbWUoc3RydWN0IGRl dmljZSAqZGV2LAo+IC0gICAgICAgICAgICAgICBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQo+IC17Cj4g LSAgICAgICB1bnNpZ25lZCBsb25nIHJ0Y190aW1lOwo+IC0gICAgICAgc3RydWN0IHNpcmZzb2Nf cnRjX2RydiAqcnRjZHJ2Owo+IC0gICAgICAgcnRjZHJ2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7 Cj4gLQo+IC0gICAgICAgcnRjX3RpbWUgPSBydGNfdG1fdG9fdGltZTY0KHRtKTsKPiAtCj4gLSAg ICAgICBydGNkcnYtPm92ZXJmbG93X3J0YyA9IHJ0Y190aW1lID4+IChCSVRTX1BFUl9MT05HIC0g UlRDX1NISUZUKTsKPiAtCj4gLSAgICAgICBzaXJmc29jX3J0Y193cml0ZWwocnRjZHJ2LCBSVENf U1dfVkFMVUUsIHJ0Y2Rydi0+b3ZlcmZsb3dfcnRjKTsKPiAtICAgICAgIHNpcmZzb2NfcnRjX3dy aXRlbChydGNkcnYsIFJUQ19DTiwgcnRjX3RpbWUgPDwgUlRDX1NISUZUKTsKPiAtCj4gLSAgICAg ICByZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBzaXJmc29jX3J0Y19hbGFybV9pcnFf ZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwKPiAtICAgICAgICAgICAgICAgdW5zaWduZWQgaW50 IGVuYWJsZWQpCj4gLXsKPiAtICAgICAgIHVuc2lnbmVkIGxvbmcgcnRjX3N0YXR1c19yZWcgPSAw eDA7Cj4gLSAgICAgICBzdHJ1Y3Qgc2lyZnNvY19ydGNfZHJ2ICpydGNkcnY7Cj4gLQo+IC0gICAg ICAgcnRjZHJ2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gLQo+IC0gICAgICAgc3Bpbl9sb2Nr X2lycSgmcnRjZHJ2LT5sb2NrKTsKPiAtCj4gLSAgICAgICBydGNfc3RhdHVzX3JlZyA9IHNpcmZz b2NfcnRjX3JlYWRsKHJ0Y2RydiwgUlRDX1NUQVRVUyk7Cj4gLSAgICAgICBpZiAoZW5hYmxlZCkK PiAtICAgICAgICAgICAgICAgcnRjX3N0YXR1c19yZWcgfD0gU0lSRlNPQ19SVENfQUwwRTsKPiAt ICAgICAgIGVsc2UKPiAtICAgICAgICAgICAgICAgcnRjX3N0YXR1c19yZWcgJj0gflNJUkZTT0Nf UlRDX0FMMEU7Cj4gLQo+IC0gICAgICAgc2lyZnNvY19ydGNfd3JpdGVsKHJ0Y2RydiwgUlRDX1NU QVRVUywgcnRjX3N0YXR1c19yZWcpOwo+IC0KPiAtICAgICAgIHNwaW5fdW5sb2NrX2lycSgmcnRj ZHJ2LT5sb2NrKTsKPiAtCj4gLSAgICAgICByZXR1cm4gMDsKPiAtCj4gLX0KPiAtCj4gLXN0YXRp YyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBzaXJmc29jX3J0Y19vcHMgPSB7Cj4gLSAgICAg ICAucmVhZF90aW1lID0gc2lyZnNvY19ydGNfcmVhZF90aW1lLAo+IC0gICAgICAgLnNldF90aW1l ID0gc2lyZnNvY19ydGNfc2V0X3RpbWUsCj4gLSAgICAgICAucmVhZF9hbGFybSA9IHNpcmZzb2Nf cnRjX3JlYWRfYWxhcm0sCj4gLSAgICAgICAuc2V0X2FsYXJtID0gc2lyZnNvY19ydGNfc2V0X2Fs YXJtLAo+IC0gICAgICAgLmFsYXJtX2lycV9lbmFibGUgPSBzaXJmc29jX3J0Y19hbGFybV9pcnFf ZW5hYmxlCj4gLX07Cj4gLQo+IC1zdGF0aWMgaXJxcmV0dXJuX3Qgc2lyZnNvY19ydGNfaXJxX2hh bmRsZXIoaW50IGlycSwgdm9pZCAqcGRhdGEpCj4gLXsKPiAtICAgICAgIHN0cnVjdCBzaXJmc29j X3J0Y19kcnYgKnJ0Y2RydiA9IHBkYXRhOwo+IC0gICAgICAgdW5zaWduZWQgbG9uZyBydGNfc3Rh dHVzX3JlZyA9IDB4MDsKPiAtICAgICAgIHVuc2lnbmVkIGxvbmcgZXZlbnRzID0gMHgwOwo+IC0K PiAtICAgICAgIHNwaW5fbG9jaygmcnRjZHJ2LT5sb2NrKTsKPiAtCj4gLSAgICAgICBydGNfc3Rh dHVzX3JlZyA9IHNpcmZzb2NfcnRjX3JlYWRsKHJ0Y2RydiwgUlRDX1NUQVRVUyk7Cj4gLSAgICAg ICAvKiB0aGlzIGJpdCB3aWxsIGJlIHNldCBPTkxZIGlmIGFuIGFsYXJtIHdhcyBhY3RpdmUKPiAt ICAgICAgICAqIGFuZCBpdCBleHBpcmVkIE5PVwo+IC0gICAgICAgICogU28gdGhpcyBpcyBiZWlu ZyB1c2VkIGFzIGFuIEFTU0VSVAo+IC0gICAgICAgICovCj4gLSAgICAgICBpZiAocnRjX3N0YXR1 c19yZWcgJiBTSVJGU09DX1JUQ19BTDApIHsKPiAtICAgICAgICAgICAgICAgLyoKPiAtICAgICAg ICAgICAgICAgICogY2xlYXIgdGhlIFJUQyBzdGF0dXMgcmVnaXN0ZXIncyBhbGFybSBiaXQKPiAt ICAgICAgICAgICAgICAgICogbWFzayBvdXQgdGhlIGxvd2VyIHN0YXR1cyBiaXRzCj4gLSAgICAg ICAgICAgICAgICAqLwo+IC0gICAgICAgICAgICAgICBydGNfc3RhdHVzX3JlZyAmPSB+MHgwNzsK PiAtICAgICAgICAgICAgICAgLyogd3JpdGUgMSBpbnRvIFNJUkZTT0NfUlRDX0FMMCB0byBBQ0sg dGhlIGFsYXJtIGludGVycnVwdCAqLwo+IC0gICAgICAgICAgICAgICBydGNfc3RhdHVzX3JlZyB8 PSAoU0lSRlNPQ19SVENfQUwwKTsKPiAtICAgICAgICAgICAgICAgLyogQ2xlYXIgdGhlIEFsYXJt IGVuYWJsZSBiaXQgKi8KPiAtICAgICAgICAgICAgICAgcnRjX3N0YXR1c19yZWcgJj0gfihTSVJG U09DX1JUQ19BTDBFKTsKPiAtICAgICAgIH0KPiAtCj4gLSAgICAgICBzaXJmc29jX3J0Y193cml0 ZWwocnRjZHJ2LCBSVENfU1RBVFVTLCBydGNfc3RhdHVzX3JlZyk7Cj4gLQo+IC0gICAgICAgc3Bp bl91bmxvY2soJnJ0Y2Rydi0+bG9jayk7Cj4gLQo+IC0gICAgICAgLyogdGhpcyBzaG91bGQgd2Fr ZSB1cCBhbnkgYXBwcyBwb2xsaW5nL3dhaXRpbmcgb24gdGhlIHJlYWQKPiAtICAgICAgICAqIGFm dGVyIHNldHRpbmcgdGhlIGFsYXJtCj4gLSAgICAgICAgKi8KPiAtICAgICAgIGV2ZW50cyB8PSBS VENfSVJRRiB8IFJUQ19BRjsKPiAtICAgICAgIHJ0Y191cGRhdGVfaXJxKHJ0Y2Rydi0+cnRjLCAx LCBldmVudHMpOwo+IC0KPiAtICAgICAgIHJldHVybiBJUlFfSEFORExFRDsKPiAtfQo+IC0KPiAt c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc2lyZnNvY19ydGNfb2ZfbWF0Y2hbXSA9 IHsKPiAtICAgICAgIHsgLmNvbXBhdGlibGUgPSAic2lyZixwcmltYTItc3lzcnRjIn0sCj4gLSAg ICAgICB7fSwKPiAtfTsKPiAtCj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBz eXNydGNfcmVnbWFwX2NvbmZpZyA9IHsKPiAtICAgICAgIC5yZWdfYml0cyA9IDMyLAo+IC0gICAg ICAgLnZhbF9iaXRzID0gMzIsCj4gLSAgICAgICAuZmFzdF9pbyA9IHRydWUsCj4gLX07Cj4gLQo+ IC1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzaXJmc29jX3J0Y19vZl9tYXRjaCk7Cj4gLQo+IC1z dGF0aWMgaW50IHNpcmZzb2NfcnRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp Cj4gLXsKPiAtICAgICAgIGludCBlcnI7Cj4gLSAgICAgICB1bnNpZ25lZCBsb25nIHJ0Y19kaXY7 Cj4gLSAgICAgICBzdHJ1Y3Qgc2lyZnNvY19ydGNfZHJ2ICpydGNkcnY7Cj4gLSAgICAgICBzdHJ1 Y3QgZGV2aWNlX25vZGUgKm5wID0gcGRldi0+ZGV2Lm9mX25vZGU7Cj4gLQo+IC0gICAgICAgcnRj ZHJ2ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsCj4gLSAgICAgICAgICAgICAgIHNpemVvZihz dHJ1Y3Qgc2lyZnNvY19ydGNfZHJ2KSwgR0ZQX0tFUk5FTCk7Cj4gLSAgICAgICBpZiAocnRjZHJ2 ID09IE5VTEwpCj4gLSAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwo+IC0KPiAtICAgICAg IHNwaW5fbG9ja19pbml0KCZydGNkcnYtPmxvY2spOwo+IC0KPiAtICAgICAgIGVyciA9IG9mX3By b3BlcnR5X3JlYWRfdTMyKG5wLCAicmVnIiwgJnJ0Y2Rydi0+cnRjX2Jhc2UpOwo+IC0gICAgICAg aWYgKGVycikgewo+IC0gICAgICAgICAgICAgICBkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUg dG8gZmluZCBiYXNlIGFkZHJlc3Mgb2YgcnRjIG5vZGUgaW4gZHRiXG4iKTsKPiAtICAgICAgICAg ICAgICAgcmV0dXJuIGVycjsKPiAtICAgICAgIH0KPiAtCj4gLSAgICAgICBwbGF0Zm9ybV9zZXRf ZHJ2ZGF0YShwZGV2LCBydGNkcnYpOwo+IC0KPiAtICAgICAgIC8qIFJlZ2lzdGVyIHJ0YyBhbGFy bSBhcyBhIHdha2V1cCBzb3VyY2UgKi8KPiAtICAgICAgIGRldmljZV9pbml0X3dha2V1cCgmcGRl di0+ZGV2LCAxKTsKPiAtCj4gLSAgICAgICBydGNkcnYtPnJlZ21hcCA9IGRldm1fcmVnbWFwX2lu aXRfaW9iZygmcGRldi0+ZGV2LAo+IC0gICAgICAgICAgICAgICAgICAgICAgICZzeXNydGNfcmVn bWFwX2NvbmZpZyk7Cj4gLSAgICAgICBpZiAoSVNfRVJSKHJ0Y2Rydi0+cmVnbWFwKSkgewo+IC0g ICAgICAgICAgICAgICBlcnIgPSBQVFJfRVJSKHJ0Y2Rydi0+cmVnbWFwKTsKPiAtICAgICAgICAg ICAgICAgZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHJlZ2lzdGVyIG1h cDogJWRcbiIsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgZXJyKTsKPiAtICAgICAgICAgICAg ICAgcmV0dXJuIGVycjsKPiAtICAgICAgIH0KPiAtCj4gLSAgICAgICAvKgo+IC0gICAgICAgICog U2V0IFNZU19SVEMgY291bnRlciBpbiBSVENfSFogSFogVW5pdHMKPiAtICAgICAgICAqIFdlIGFy ZSB1c2luZyAzMksgUlRDIGNyeXN0YWwgKDMyNzY4IC8gUlRDX0haIC8gMikgLTEKPiAtICAgICAg ICAqIElmIDE2SFosIHRoZXJlZm9yZSBSVENfRElWID0gMTAyMzsKPiAtICAgICAgICAqLwo+IC0g ICAgICAgcnRjX2RpdiA9ICgoMzI3NjggLyBSVENfSFopIC8gMikgLSAxOwo+IC0gICAgICAgc2ly ZnNvY19ydGNfd3JpdGVsKHJ0Y2RydiwgUlRDX0RJViwgcnRjX2Rpdik7Cj4gLQo+IC0gICAgICAg LyogMHgzIC0+IFJUQ19DTEsgKi8KPiAtICAgICAgIHNpcmZzb2NfcnRjX3dyaXRlbChydGNkcnYs IFJUQ19DTE9DS19TV0lUQ0gsIFNJUkZTT0NfUlRDX0NMSyk7Cj4gLQo+IC0gICAgICAgLyogcmVz ZXQgU1lTIFJUQyBBTEFSTTAgKi8KPiAtICAgICAgIHNpcmZzb2NfcnRjX3dyaXRlbChydGNkcnYs IFJUQ19BTEFSTTAsIDB4MCk7Cj4gLQo+IC0gICAgICAgLyogcmVzZXQgU1lTIFJUQyBBTEFSTTEg Ki8KPiAtICAgICAgIHNpcmZzb2NfcnRjX3dyaXRlbChydGNkcnYsIFJUQ19BTEFSTTEsIDB4MCk7 Cj4gLQo+IC0gICAgICAgLyogUmVzdG9yZSBSVEMgT3ZlcmZsb3cgRnJvbSBSZWdpc3RlciBBZnRl ciBDb21tYW5kIFJlYm9vdCAqLwo+IC0gICAgICAgcnRjZHJ2LT5vdmVyZmxvd19ydGMgPQo+IC0g ICAgICAgICAgICAgICBzaXJmc29jX3J0Y19yZWFkbChydGNkcnYsIFJUQ19TV19WQUxVRSk7Cj4g LQo+IC0gICAgICAgcnRjZHJ2LT5ydGMgPSBkZXZtX3J0Y19hbGxvY2F0ZV9kZXZpY2UoJnBkZXYt PmRldik7Cj4gLSAgICAgICBpZiAoSVNfRVJSKHJ0Y2Rydi0+cnRjKSkKPiAtICAgICAgICAgICAg ICAgcmV0dXJuIFBUUl9FUlIocnRjZHJ2LT5ydGMpOwo+IC0KPiAtICAgICAgIHJ0Y2Rydi0+cnRj LT5vcHMgPSAmc2lyZnNvY19ydGNfb3BzOwo+IC0gICAgICAgcnRjZHJ2LT5ydGMtPnJhbmdlX21h eCA9ICgxVUxMIDw8IDYwKSAtIDE7Cj4gLQo+IC0gICAgICAgcnRjZHJ2LT5pcnEgPSBwbGF0Zm9y bV9nZXRfaXJxKHBkZXYsIDApOwo+IC0gICAgICAgZXJyID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRl di0+ZGV2LCBydGNkcnYtPmlycSwgc2lyZnNvY19ydGNfaXJxX2hhbmRsZXIsCj4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIElSUUZfU0hBUkVELCBwZGV2LT5uYW1lLCBydGNkcnYpOwo+ IC0gICAgICAgaWYgKGVycikgewo+IC0gICAgICAgICAgICAgICBkZXZfZXJyKCZwZGV2LT5kZXYs ICJVbmFibGUgdG8gcmVnaXN0ZXIgZm9yIHRoZSBTaVJGIFNPQyBSVEMgSVJRXG4iKTsKPiAtICAg ICAgICAgICAgICAgcmV0dXJuIGVycjsKPiAtICAgICAgIH0KPiAtCj4gLSAgICAgICByZXR1cm4g ZGV2bV9ydGNfcmVnaXN0ZXJfZGV2aWNlKHJ0Y2Rydi0+cnRjKTsKPiAtfQo+IC0KPiAtI2lmZGVm IENPTkZJR19QTV9TTEVFUAo+IC1zdGF0aWMgaW50IHNpcmZzb2NfcnRjX3N1c3BlbmQoc3RydWN0 IGRldmljZSAqZGV2KQo+IC17Cj4gLSAgICAgICBzdHJ1Y3Qgc2lyZnNvY19ydGNfZHJ2ICpydGNk cnYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiAtICAgICAgIHJ0Y2Rydi0+b3ZlcmZsb3dfcnRj ID0KPiAtICAgICAgICAgICAgICAgc2lyZnNvY19ydGNfcmVhZGwocnRjZHJ2LCBSVENfU1dfVkFM VUUpOwo+IC0KPiAtICAgICAgIHJ0Y2Rydi0+c2F2ZWRfY291bnRlciA9Cj4gLSAgICAgICAgICAg ICAgIHNpcmZzb2NfcnRjX3JlYWRsKHJ0Y2RydiwgUlRDX0NOKTsKPiAtICAgICAgIHJ0Y2Rydi0+ c2F2ZWRfb3ZlcmZsb3dfcnRjID0gcnRjZHJ2LT5vdmVyZmxvd19ydGM7Cj4gLSAgICAgICBpZiAo ZGV2aWNlX21heV93YWtldXAoZGV2KSAmJiAhZW5hYmxlX2lycV93YWtlKHJ0Y2Rydi0+aXJxKSkK PiAtICAgICAgICAgICAgICAgcnRjZHJ2LT5pcnFfd2FrZSA9IDE7Cj4gLQo+IC0gICAgICAgcmV0 dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgc2lyZnNvY19ydGNfcmVzdW1lKHN0cnVjdCBk ZXZpY2UgKmRldikKPiAtewo+IC0gICAgICAgdTMyIHRtcDsKPiAtICAgICAgIHN0cnVjdCBzaXJm c29jX3J0Y19kcnYgKnJ0Y2RydiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+IC0KPiAtICAgICAg IC8qCj4gLSAgICAgICAgKiBpZiByZXN1bWUgZnJvbSBzbmFwc2hvdCBhbmQgdGhlIHJ0YyBwb3dl ciBpcyBsb3N0LAo+IC0gICAgICAgICogcmVzdHJvZSB0aGUgcnRjIHNldHRpbmdzCj4gLSAgICAg ICAgKi8KPiAtICAgICAgIGlmIChTSVJGU09DX1JUQ19DTEsgIT0gc2lyZnNvY19ydGNfcmVhZGwo cnRjZHJ2LCBSVENfQ0xPQ0tfU1dJVENIKSkgewo+IC0gICAgICAgICAgICAgICB1MzIgcnRjX2Rp djsKPiAtICAgICAgICAgICAgICAgLyogMHgzIC0+IFJUQ19DTEsgKi8KPiAtICAgICAgICAgICAg ICAgc2lyZnNvY19ydGNfd3JpdGVsKHJ0Y2RydiwgUlRDX0NMT0NLX1NXSVRDSCwgU0lSRlNPQ19S VENfQ0xLKTsKPiAtICAgICAgICAgICAgICAgLyoKPiAtICAgICAgICAgICAgICAgICogU2V0IFNZ U19SVEMgY291bnRlciBpbiBSVENfSFogSFogVW5pdHMKPiAtICAgICAgICAgICAgICAgICogV2Ug YXJlIHVzaW5nIDMySyBSVEMgY3J5c3RhbCAoMzI3NjggLyBSVENfSFogLyAyKSAtMQo+IC0gICAg ICAgICAgICAgICAgKiBJZiAxNkhaLCB0aGVyZWZvcmUgUlRDX0RJViA9IDEwMjM7Cj4gLSAgICAg ICAgICAgICAgICAqLwo+IC0gICAgICAgICAgICAgICBydGNfZGl2ID0gKCgzMjc2OCAvIFJUQ19I WikgLyAyKSAtIDE7Cj4gLQo+IC0gICAgICAgICAgICAgICBzaXJmc29jX3J0Y193cml0ZWwocnRj ZHJ2LCBSVENfRElWLCBydGNfZGl2KTsKPiAtCj4gLSAgICAgICAgICAgICAgIC8qIHJlc2V0IFNZ UyBSVEMgQUxBUk0wICovCj4gLSAgICAgICAgICAgICAgIHNpcmZzb2NfcnRjX3dyaXRlbChydGNk cnYsIFJUQ19BTEFSTTAsIDB4MCk7Cj4gLQo+IC0gICAgICAgICAgICAgICAvKiByZXNldCBTWVMg UlRDIEFMQVJNMSAqLwo+IC0gICAgICAgICAgICAgICBzaXJmc29jX3J0Y193cml0ZWwocnRjZHJ2 LCBSVENfQUxBUk0xLCAweDApOwo+IC0gICAgICAgfQo+IC0gICAgICAgcnRjZHJ2LT5vdmVyZmxv d19ydGMgPSBydGNkcnYtPnNhdmVkX292ZXJmbG93X3J0YzsKPiAtCj4gLSAgICAgICAvKgo+IC0g ICAgICAgICogaWYgY3VycmVudCBjb3VudGVyIGlzIHNtYWxsIHRoYW4gcHJldmlvdXMsCj4gLSAg ICAgICAgKiBpdCBtZWFucyBvdmVyZmxvdyBpbiBzbGVlcAo+IC0gICAgICAgICovCj4gLSAgICAg ICB0bXAgPSBzaXJmc29jX3J0Y19yZWFkbChydGNkcnYsIFJUQ19DTik7Cj4gLSAgICAgICBpZiAo dG1wIDw9IHJ0Y2Rydi0+c2F2ZWRfY291bnRlcikKPiAtICAgICAgICAgICAgICAgcnRjZHJ2LT5v dmVyZmxvd19ydGMrKzsKPiAtICAgICAgIC8qCj4gLSAgICAgICAgKlBXUkMgVmFsdWUgQmUgQ2hh bmdlZCBXaGVuIFN1c3BlbmQsIFJlc3RvcmUgT3ZlcmZsb3cKPiAtICAgICAgICAqIEluIE1lbW9y eSBUbyBSZWdpc3Rlcgo+IC0gICAgICAgICovCj4gLSAgICAgICBzaXJmc29jX3J0Y193cml0ZWwo cnRjZHJ2LCBSVENfU1dfVkFMVUUsIHJ0Y2Rydi0+b3ZlcmZsb3dfcnRjKTsKPiAtCj4gLSAgICAg ICBpZiAoZGV2aWNlX21heV93YWtldXAoZGV2KSAmJiBydGNkcnYtPmlycV93YWtlKSB7Cj4gLSAg ICAgICAgICAgICAgIGRpc2FibGVfaXJxX3dha2UocnRjZHJ2LT5pcnEpOwo+IC0gICAgICAgICAg ICAgICBydGNkcnYtPmlycV93YWtlID0gMDsKPiAtICAgICAgIH0KPiAtCj4gLSAgICAgICByZXR1 cm4gMDsKPiAtfQo+IC0jZW5kaWYKPiAtCj4gLXN0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhzaXJm c29jX3J0Y19wbV9vcHMsCj4gLSAgICAgICAgICAgICAgIHNpcmZzb2NfcnRjX3N1c3BlbmQsIHNp cmZzb2NfcnRjX3Jlc3VtZSk7Cj4gLQo+IC1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBz aXJmc29jX3J0Y19kcml2ZXIgPSB7Cj4gLSAgICAgICAuZHJpdmVyID0gewo+IC0gICAgICAgICAg ICAgICAubmFtZSA9ICJzaXJmc29jLXJ0YyIsCj4gLSAgICAgICAgICAgICAgIC5wbSA9ICZzaXJm c29jX3J0Y19wbV9vcHMsCj4gLSAgICAgICAgICAgICAgIC5vZl9tYXRjaF90YWJsZSA9IHNpcmZz b2NfcnRjX29mX21hdGNoLAo+IC0gICAgICAgfSwKPiAtICAgICAgIC5wcm9iZSA9IHNpcmZzb2Nf cnRjX3Byb2JlLAo+IC19Owo+IC1tb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHNpcmZzb2NfcnRjX2Ry aXZlcik7Cj4gLQo+IC1NT0RVTEVfREVTQ1JJUFRJT04oIlNpUkYgU29DIHJ0YyBkcml2ZXIiKTsK PiAtTU9EVUxFX0FVVEhPUigiWGlhbmdsb25nIER1IDxYaWFuZ2xvbmcuRHVAY3NyLmNvbT4iKTsK PiAtTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+IC1NT0RVTEVfQUxJQVMoInBsYXRmb3JtOnNp cmZzb2MtcnRjIik7Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcnRjL3NpcmZzb2NfcnRj aW9icmcuaCBiL2luY2x1ZGUvbGludXgvcnRjL3NpcmZzb2NfcnRjaW9icmcuaAo+IGRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IGIzMWYyODU2NzMzZC4uMDAwMDAwMDAwMDAwCj4gLS0t IGEvaW5jbHVkZS9saW51eC9ydGMvc2lyZnNvY19ydGNpb2JyZy5oCj4gKysrIC9kZXYvbnVsbAo+ IEBAIC0xLDIxICswLDAgQEAKPiAtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAt b3ItbGF0ZXIgKi8KPiAtLyoKPiAtICogUlRDIEkvTyBCcmlkZ2UgaW50ZXJmYWNlcyBmb3IgQ1NS IFNpUkZwcmltYUlJCj4gLSAqIEFSTSBhY2Nlc3MgdGhlIHJlZ2lzdGVycyBvZiBTWVNSVEMsIEdQ U1JUQyBhbmQgUFdSQyB0aHJvdWdoIHRoaXMgbW9kdWxlCj4gLSAqCj4gLSAqIENvcHlyaWdodCAo YykgMjAxMSBDYW1icmlkZ2UgU2lsaWNvbiBSYWRpbyBMaW1pdGVkLCBhIENTUiBwbGMgZ3JvdXAg Y29tcGFueS4KPiAtICovCj4gLSNpZm5kZWYgX1NJUkZTT0NfUlRDX0lPQlJHX0hfCj4gLSNkZWZp bmUgX1NJUkZTT0NfUlRDX0lPQlJHX0hfCj4gLQo+IC1zdHJ1Y3QgcmVnbWFwX2NvbmZpZzsKPiAt Cj4gLWV4dGVybiB2b2lkIHNpcmZzb2NfcnRjX2lvYnJnX2Jlc3luY2luZyh2b2lkKTsKPiAtCj4g LWV4dGVybiB1MzIgc2lyZnNvY19ydGNfaW9icmdfcmVhZGwodTMyIGFkZHIpOwo+IC0KPiAtZXh0 ZXJuIHZvaWQgc2lyZnNvY19ydGNfaW9icmdfd3JpdGVsKHUzMiB2YWwsIHUzMiBhZGRyKTsKPiAt c3RydWN0IHJlZ21hcCAqZGV2bV9yZWdtYXBfaW5pdF9pb2JnKHN0cnVjdCBkZXZpY2UgKmRldiwK PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcmVnbWFw X2NvbmZpZyAqY29uZmlnKTsKPiAtCj4gLSNlbmRpZgo+IC0tCj4gMi4yOS4yCj4KCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwg bWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8v bGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK