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 9D9B5C4332F for ; Fri, 29 Oct 2021 17:53:41 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 7A70961040 for ; Fri, 29 Oct 2021 17:53:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229900AbhJ2R4J (ORCPT ); Fri, 29 Oct 2021 13:56:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35528 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229489AbhJ2R4I (ORCPT ); Fri, 29 Oct 2021 13:56:08 -0400 Received: from mail-pg1-x52a.google.com (mail-pg1-x52a.google.com [IPv6:2607:f8b0:4864:20::52a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2EA94C061570; Fri, 29 Oct 2021 10:53:40 -0700 (PDT) Received: by mail-pg1-x52a.google.com with SMTP id s136so10586142pgs.4; Fri, 29 Oct 2021 10:53:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=wN2/2d+8gxv57T8/k4uAhD1AzwCqByrJmkZ1l0O4EJ8=; b=lAa0JQVnfkioL6j7LC/HXVXmOBixdsKcKS/tcrj+v4NTo+QejfuM7Qf2NSnqisp95O RX97rks43/IIjpXarJbbFyNzFNCFbc/gi+avaWN4zL0j5RFT29sgcSACulegv2HUeeyX CIE84Wk36o8BvOuSgrtm8HPT4GLSPH9m/neIYIW+VqMFG6HUl8wGg+rEV2epCX3nvbmm R6LMVIZQSkxBoKMbTprohEV+A3Hc3AFQvtBZ1aKWRmpW0JjIlvSH4gBOmyBvL8KBecPt ZEaIp0CmdGdFPbkxBtj8OcBktcvLctmecUQ+YQCdzWYxz1CCeg/Q3uE3r5VMeczqHMBD kFmg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=wN2/2d+8gxv57T8/k4uAhD1AzwCqByrJmkZ1l0O4EJ8=; b=fI+2Uv1avsilgTplaPZS5TKWBxmXp1YAm2sclqcCuDo0ZNdwoKAyF1xJAAGiblxH0j 2GSyVlNKDyZENr1TgCnGEv4c52wPsEpSC3ruOYuN6U5p3wJP1+8Pu42PERNp3DW5obHp kN1Hge5FzRz0vdos0zjL8cK48fwMAi5XZSBomIVvmfbS0p1XA/gTXVdCICsBu+Z7HZcA D27vSrCpFq11wxqJrRKkF5h3mIBiXQd1F5G9vp5dWwrWNaOynt1/4sA3tZ2i1rmcmvI9 X5lg6G28VKpwdtENXT/SrqbOkHG7rxf0m/2B4/ULBCkxmOV3QWsDVALgr22FCWH3U1VE +rww== X-Gm-Message-State: AOAM530j6ieIrmfkQdlKju//F/rKXabciVopEExWsqKnDGmeH0vLdbep 3YSb37Zu+k2+OsxhdxySomY= X-Google-Smtp-Source: ABdhPJwaq2LuZMg4oQfdBQrILoLpFTSQEg6CYWcGjBba61zIbKrT1UcLM+4/JBVPQRoGYech80EQ7Q== X-Received: by 2002:a05:6a00:228e:b0:47c:18b1:b807 with SMTP id f14-20020a056a00228e00b0047c18b1b807mr12038116pfe.55.1635530019524; Fri, 29 Oct 2021 10:53:39 -0700 (PDT) Received: from [10.67.48.245] ([192.19.223.252]) by smtp.googlemail.com with ESMTPSA id c3sm11598064pji.0.2021.10.29.10.53.38 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 29 Oct 2021 10:53:39 -0700 (PDT) Subject: Re: [PATCH 3/3] watchdog: bcm7038_wdt: support BCM4908 SoC To: Guenter Roeck , Rob Herring , =?UTF-8?B?UmFmYcWCIE1pxYJlY2tp?= Cc: Wim Van Sebroeck , 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?B?UmFmYcWCIE1pxYJlY2tp?= References: <20211028093059.32535-1-zajec5@gmail.com> <20211028093059.32535-3-zajec5@gmail.com> <9d57d026-19f3-e92d-4c02-d7e8e2c2bc25@gmail.com> <1df7e7cd-aa4c-c692-ff7f-8ee27780a6a9@gmail.com> From: Florian Fainelli Message-ID: <5d5b6fbb-6ba4-088c-ad9b-a2698c23f751@gmail.com> Date: Fri, 29 Oct 2021 10:53:37 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org On 10/29/21 10:43 AM, Guenter Roeck wrote: > On 10/29/21 9:45 AM, Florian Fainelli wrote: >> On 10/29/21 6:03 AM, Rob Herring wrote: >>> On Fri, Oct 29, 2021 at 01:39:02PM +0200, Rafał Miłecki wrote: >>>> [Rob: please kindly comment on this] >>>> >>>> On 28.10.2021 18:29, Florian Fainelli wrote: >>>>> On 10/28/21 2:30 AM, Rafał Miłecki wrote: >>>>>> 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 >>>>>> --- >>>>> >>>>> [snip] >>>>> >>>>>> + >>>>>> +static const u16 bcm7038_wdt_regs_bcm4908[] = { >>>>>> +    [BCM63XX_WDT_REG_DEFVAL]    = 0x28, >>>>>> +    [BCM63XX_WDT_REG_CTL]        = 0x2c, >>>>>> +    [BCM63XX_WDT_REG_SOFTRESET]    = 0x34, >>>>> >>>>> I don't understand what you are doing here and why you are not >>>>> offsetting the "reg" property appropriately when you create your >>>>> bcm4908-wdt Device Tree node such that the base starts at 0, and the >>>>> existing driver becomes usable as-is. This does not make any sense >>>>> to me >>>>> when it is obviously the simplest way to make the driver "accept" the >>>>> resource being passed. >>>> >>>> I believe that DT binding should cover the whole hardware block and >>>> describe it (here: use proper compatible to allow recognizing block >>>> variant). >>>> >>>> That's because (as far as I understand) DT should be used to describe >>>> hardware as closely as possible. I think it shouldn't be adjusted to >>>> make mapping match Linux's driver implementation. >>>> >>>> >>>> So if: >>>> 1. Hardware block is mapped at 0xff800400 >>>> 2. It has interesting registers at 0xff800428 and 0xff80042c >>>> >>>> I think mapping should use: >>>> reg = <0xff800400 0x3c>; >>>> even if we don't use the first N registers. >>>> >>>> That way, at some point, you can extend Linux (or whatever) driver to >>>> use extra registers without reworking the whole binding. That's why I >>>> think we need to map whole hardware block & handle different registers >>>> layouts in a driver. >>> >>> Yes, that's the correct thing to do. >> >> So in the future if we happen to want to manage the hardware timers in >> that block, they would be part of the watchdog driver? I am fairly sure >> they won't be, so you will be creating a composite driver/MFD to >> separate out the functions, more likely. So you might as well create >> sub-nodes. >> >>> >>> The question is whether you'd need sub nodes for the other functions. >>> Folks tend to want to have sub nodes for convenience which isn't really >>> needed and then requires a DT update ('cause they add nodes as adding >>> drivers). >> >> Sorry but not, this is getting completely ridiculous, the >> >>> >>> Based on the registers, you really don't need sub nodes here. >> >> I sort of disagree here, the watchdog is a part of a sundry timer block >> here, but it is logically broken up into different parts and if if I >> were to imagine how this would map into different drivers, I can easily >> see that we would have: >> >> - a driver to manage the timer interrupt controller >> - a driver to manage each of the 3 hardware timers, be they clockevent >> or else >> - a driver to manage the watchdog >> >> The simplest way to get there, and also because these same timer blocks >> are actually spread in other parts of STB chips just like the watchdog >> is, but in a different layout where they stand on their own was the main >> drive for defining the bcm7038_wdt binding the way it was. >> >> Rafal, I appreciate that you are trying to leverage the bcm7038_wdt >> driver and this is better than the previous patch set, but I really do >> not see why having the watchdog driver not manage the *exact* subset of >> the register space needed (starting at 0x28) is not being done. > > Agreed, especially since other sub-devices of bcm4908 are alredy modeled > this way. See arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi. > At this point, before accepting anything, I'll want to have an explanation > how and why the watchdog interface is handled differently than, say, > its reset controller. Also, I'd like to understand the memory region > assigned to bcm7038, which happens to be something like: > >     compatible = "brcm,bcm7038-wdt"; >         reg = <0xf040a7e8 0x16>; > > because it seems unlikely that this is a chip subsystem that just happens > to start at such an odd boundary. More specifically, I see in actual > .dtsi files data such as: > >                 watchdog: watchdog@4066a8 { >                         clocks = <&upg_clk>; >                         compatible = "brcm,bcm7038-wdt"; >                         reg = <0x4066a8 0x14>; >                         status = "disabled"; >                 }; > ... >                 timers: timer@406680 { >                         compatible = "brcm,brcmstb-timers"; >                         reg = <0x406680 0x40>; >                 }; > > So there happen to be timers in the same region, and the offset > between timer and watchdog registers is 0x28. Coincidentally, that > just happens to be the extra offset defined in this patch for the > bcm4908 watchdog. Really ? Sorry, this sounds very inconsistent > and arbitrary to me. To Rafal's defense, we could have defined the bcm7038-wdt binding such that the watchdog would have been at 0x28 from the beginning of the timer block, but as I wrote earlier, that same watchdog which is really just 8 bytes worth of register is sometimes instantiated on its own without the rest of the timer block. This is not visible in a DTS that is upstream but it does happen in some of the Cable Modem chips. That was the main motivation for defining the binding the way it was, such that we could just map those 8 bytes wherever they are. > > Overall, I suspect I'll have to see datasheets if we really end up > having different offsets for each chip, because I'll want to confirm > that the watchdog subsystem isn't treated differently than other > subsystems, and that the offset calculations are appropriate and > consistent across the different chips. Datasheets are not public however sharing the structures documenting the register layout is something that is possible. For consistency, if we do let 4908 define the watchdog to include that 0x28 offset, then we are not mapping just the watchdog, but the entire timer block, which then raises the question of what happens to the timer interrupt enable/status and timer registers, how do we end-up sub-dividing that register space in a logical manner. -- Florian 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 48BE6C433EF for ; Fri, 29 Oct 2021 19:26:33 +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 0B5B660E8B for ; Fri, 29 Oct 2021 19:26:33 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 0B5B660E8B 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:In-Reply-To:MIME-Version:Date: Message-ID:From:References:Cc:To:Subject:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=v25654qXW75Aif0tn1TWsd/PDl1T2y4rvGHn7DqwvSs=; b=ww6hHP5zpI2NHbEy4asSaQjvVd l8d1wOmZzN7YmvK7AEIbpMbOBQ+JalIGcW9ja5v7kd/hMgxutXuMsl4o6yOC3UvbE51pdVi1mLTaq soa8hFej78C/5EtYKY+hoYzjR/qmDQWAPq+4vrBogyrhIEBuK9wji6urD86lJNKY8KXygPuM4ZEpD LbSzao1lFCK8vslweFsH6Z4XpG+JsJK+IzcATChHE6071DL85Vkx8egjW1yqInjPv3KOyPYGKpxYi ts3lydPivc2HqYASx7DiSuF5SKlKRZlrV32Fcw0Bo3ejcJniudyKzehi/cpzk0t9OVuI005TP7mYW e32liJPg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mgXTr-00ByMU-Jc; Fri, 29 Oct 2021 19:24:02 +0000 Received: from mail-pg1-x535.google.com ([2607:f8b0:4864:20::535]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mgW4b-00BfmQ-OY for linux-arm-kernel@lists.infradead.org; Fri, 29 Oct 2021 17:53:51 +0000 Received: by mail-pg1-x535.google.com with SMTP id q187so10636882pgq.2 for ; Fri, 29 Oct 2021 10:53:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=wN2/2d+8gxv57T8/k4uAhD1AzwCqByrJmkZ1l0O4EJ8=; b=lAa0JQVnfkioL6j7LC/HXVXmOBixdsKcKS/tcrj+v4NTo+QejfuM7Qf2NSnqisp95O RX97rks43/IIjpXarJbbFyNzFNCFbc/gi+avaWN4zL0j5RFT29sgcSACulegv2HUeeyX CIE84Wk36o8BvOuSgrtm8HPT4GLSPH9m/neIYIW+VqMFG6HUl8wGg+rEV2epCX3nvbmm R6LMVIZQSkxBoKMbTprohEV+A3Hc3AFQvtBZ1aKWRmpW0JjIlvSH4gBOmyBvL8KBecPt ZEaIp0CmdGdFPbkxBtj8OcBktcvLctmecUQ+YQCdzWYxz1CCeg/Q3uE3r5VMeczqHMBD kFmg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=wN2/2d+8gxv57T8/k4uAhD1AzwCqByrJmkZ1l0O4EJ8=; b=USrhhnkWNHYLmle7hE3Jcopv/5Yss6AAKJtObyd3semLBNWU0GyJfXPEAFI3DBSz9M VBGdfmQTg2mYdIFw1nS1sa3sT1xxyU/MmhYN6cRRwYbyH7O46GMjPNjAIF1snkn5VH28 HKXWlCWYe/cDUSeo6IIDgEa7GbKNyA8vAKi39b1Q7zhcEygPV/qVcgZ6kplx4Xt+WDXx zmxSXmEk8XNGZ3OINUE2VZWrCeUdMR7bl3+IuhLWKoLWFKZDPNd7gf5JOYbT6sBF6QWG ubc3lSSq6kt8LQkpYlQdeN3rYLz8n07vndC5Ql+F0WW7QVCcgFu9Qi6C475ZAOdoLVcj snbA== X-Gm-Message-State: AOAM531laFZeoWdO6gcDf6aBzjhpSc7Hmzmd9bXs6bZO/LJUU5a1L3Qr uykoJJoAz94BSk6vWhSSreTKeGlcz1Y= X-Google-Smtp-Source: ABdhPJwaq2LuZMg4oQfdBQrILoLpFTSQEg6CYWcGjBba61zIbKrT1UcLM+4/JBVPQRoGYech80EQ7Q== X-Received: by 2002:a05:6a00:228e:b0:47c:18b1:b807 with SMTP id f14-20020a056a00228e00b0047c18b1b807mr12038116pfe.55.1635530019524; Fri, 29 Oct 2021 10:53:39 -0700 (PDT) Received: from [10.67.48.245] ([192.19.223.252]) by smtp.googlemail.com with ESMTPSA id c3sm11598064pji.0.2021.10.29.10.53.38 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 29 Oct 2021 10:53:39 -0700 (PDT) Subject: Re: [PATCH 3/3] watchdog: bcm7038_wdt: support BCM4908 SoC To: Guenter Roeck , Rob Herring , =?UTF-8?B?UmFmYcWCIE1pxYJlY2tp?= Cc: Wim Van Sebroeck , 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?B?UmFmYcWCIE1pxYJlY2tp?= References: <20211028093059.32535-1-zajec5@gmail.com> <20211028093059.32535-3-zajec5@gmail.com> <9d57d026-19f3-e92d-4c02-d7e8e2c2bc25@gmail.com> <1df7e7cd-aa4c-c692-ff7f-8ee27780a6a9@gmail.com> From: Florian Fainelli Message-ID: <5d5b6fbb-6ba4-088c-ad9b-a2698c23f751@gmail.com> Date: Fri, 29 Oct 2021 10:53:37 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211029_105349_866575_90586EEE X-CRM114-Status: GOOD ( 45.19 ) 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 T24gMTAvMjkvMjEgMTA6NDMgQU0sIEd1ZW50ZXIgUm9lY2sgd3JvdGU6Cj4gT24gMTAvMjkvMjEg OTo0NSBBTSwgRmxvcmlhbiBGYWluZWxsaSB3cm90ZToKPj4gT24gMTAvMjkvMjEgNjowMyBBTSwg Um9iIEhlcnJpbmcgd3JvdGU6Cj4+PiBPbiBGcmksIE9jdCAyOSwgMjAyMSBhdCAwMTozOTowMlBN ICswMjAwLCBSYWZhxYIgTWnFgmVja2kgd3JvdGU6Cj4+Pj4gW1JvYjogcGxlYXNlIGtpbmRseSBj b21tZW50IG9uIHRoaXNdCj4+Pj4KPj4+PiBPbiAyOC4xMC4yMDIxIDE4OjI5LCBGbG9yaWFuIEZh aW5lbGxpIHdyb3RlOgo+Pj4+PiBPbiAxMC8yOC8yMSAyOjMwIEFNLCBSYWZhxYIgTWnFgmVja2kg d3JvdGU6Cj4+Pj4+PiBGcm9tOiBSYWZhxYIgTWnFgmVja2kgPHJhZmFsQG1pbGVja2kucGw+Cj4+ Pj4+Pgo+Pj4+Pj4gSGFyZHdhcmUgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyIGdvZXMgYmFjayB0 byB0aGUgb2xkIGJjbTYzeHgKPj4+Pj4+IGRheXMuIEl0Cj4+Pj4+PiB3YXMgdGhlbiByZXVzZWQg aW4gQkNNNzAzOCBhbmQgbGF0ZXIgYWxzbyBpbiBCQ000OTA4Lgo+Pj4+Pj4KPj4+Pj4+IERlcGVu ZGluZyBvbiBTb0MgbW9kZWwgcmVnaXN0ZXJzIGxheW91dCBkaWZmZXJzIGEgYml0LiBUaGlzIGNv bW1pdAo+Pj4+Pj4gaW50cm9kdWNlcyBzdXBwb3J0IGZvciBwZXItY2hpcHNldCByZWdpc3RlcnMg b2Zmc2V0cyAmIGFkZHMgQkNNNDkwOAo+Pj4+Pj4gbGF5b3V0Lgo+Pj4+Pj4KPj4+Pj4+IExhdGVy IG9uIEJDTTYzeHggU29DcyBzdXBwb3J0IHNob3VsZCBiZSBhZGRlZCB0b28gKHByb2JhYmx5IGFz Cj4+Pj4+PiBwbGF0Zm9ybQo+Pj4+Pj4gZGV2aWNlcyBkdWUgdG8gbWlzc2luZyBEVCkuIEV2ZW50 dWFsbHkgdGhpcyBkcml2ZXIgc2hvdWxkIHJlcGxhY2UKPj4+Pj4+IGJjbTYzeHhfd2R0LmMuCj4+ Pj4+Pgo+Pj4+Pj4gU2lnbmVkLW9mZi1ieTogUmFmYcWCIE1pxYJlY2tpIDxyYWZhbEBtaWxlY2tp LnBsPgo+Pj4+Pj4gLS0tCj4+Pj4+Cj4+Pj4+IFtzbmlwXQo+Pj4+Pgo+Pj4+Pj4gKwo+Pj4+Pj4g K3N0YXRpYyBjb25zdCB1MTYgYmNtNzAzOF93ZHRfcmVnc19iY200OTA4W10gPSB7Cj4+Pj4+PiAr wqDCoMKgIFtCQ002M1hYX1dEVF9SRUdfREVGVkFMXcKgwqDCoCA9IDB4MjgsCj4+Pj4+PiArwqDC oMKgIFtCQ002M1hYX1dEVF9SRUdfQ1RMXcKgwqDCoMKgwqDCoMKgID0gMHgyYywKPj4+Pj4+ICvC oMKgwqAgW0JDTTYzWFhfV0RUX1JFR19TT0ZUUkVTRVRdwqDCoMKgID0gMHgzNCwKPj4+Pj4KPj4+ Pj4gSSBkb24ndCB1bmRlcnN0YW5kIHdoYXQgeW91IGFyZSBkb2luZyBoZXJlIGFuZCB3aHkgeW91 IGFyZSBub3QKPj4+Pj4gb2Zmc2V0dGluZyB0aGUgInJlZyIgcHJvcGVydHkgYXBwcm9wcmlhdGVs eSB3aGVuIHlvdSBjcmVhdGUgeW91cgo+Pj4+PiBiY200OTA4LXdkdCBEZXZpY2UgVHJlZSBub2Rl IHN1Y2ggdGhhdCB0aGUgYmFzZSBzdGFydHMgYXQgMCwgYW5kIHRoZQo+Pj4+PiBleGlzdGluZyBk cml2ZXIgYmVjb21lcyB1c2FibGUgYXMtaXMuIFRoaXMgZG9lcyBub3QgbWFrZSBhbnkgc2Vuc2UK Pj4+Pj4gdG8gbWUKPj4+Pj4gd2hlbiBpdCBpcyBvYnZpb3VzbHkgdGhlIHNpbXBsZXN0IHdheSB0 byBtYWtlIHRoZSBkcml2ZXIgImFjY2VwdCIgdGhlCj4+Pj4+IHJlc291cmNlIGJlaW5nIHBhc3Nl ZC4KPj4+Pgo+Pj4+IEkgYmVsaWV2ZSB0aGF0IERUIGJpbmRpbmcgc2hvdWxkIGNvdmVyIHRoZSB3 aG9sZSBoYXJkd2FyZSBibG9jayBhbmQKPj4+PiBkZXNjcmliZSBpdCAoaGVyZTogdXNlIHByb3Bl ciBjb21wYXRpYmxlIHRvIGFsbG93IHJlY29nbml6aW5nIGJsb2NrCj4+Pj4gdmFyaWFudCkuCj4+ Pj4KPj4+PiBUaGF0J3MgYmVjYXVzZSAoYXMgZmFyIGFzIEkgdW5kZXJzdGFuZCkgRFQgc2hvdWxk IGJlIHVzZWQgdG8gZGVzY3JpYmUKPj4+PiBoYXJkd2FyZSBhcyBjbG9zZWx5IGFzIHBvc3NpYmxl LiBJIHRoaW5rIGl0IHNob3VsZG4ndCBiZSBhZGp1c3RlZCB0bwo+Pj4+IG1ha2UgbWFwcGluZyBt YXRjaCBMaW51eCdzIGRyaXZlciBpbXBsZW1lbnRhdGlvbi4KPj4+Pgo+Pj4+Cj4+Pj4gU28gaWY6 Cj4+Pj4gMS4gSGFyZHdhcmUgYmxvY2sgaXMgbWFwcGVkIGF0IDB4ZmY4MDA0MDAKPj4+PiAyLiBJ dCBoYXMgaW50ZXJlc3RpbmcgcmVnaXN0ZXJzIGF0IDB4ZmY4MDA0MjggYW5kIDB4ZmY4MDA0MmMK Pj4+Pgo+Pj4+IEkgdGhpbmsgbWFwcGluZyBzaG91bGQgdXNlOgo+Pj4+IHJlZyA9IDwweGZmODAw NDAwIDB4M2M+Owo+Pj4+IGV2ZW4gaWYgd2UgZG9uJ3QgdXNlIHRoZSBmaXJzdCBOIHJlZ2lzdGVy cy4KPj4+Pgo+Pj4+IFRoYXQgd2F5LCBhdCBzb21lIHBvaW50LCB5b3UgY2FuIGV4dGVuZCBMaW51 eCAob3Igd2hhdGV2ZXIpIGRyaXZlciB0bwo+Pj4+IHVzZSBleHRyYSByZWdpc3RlcnMgd2l0aG91 dCByZXdvcmtpbmcgdGhlIHdob2xlIGJpbmRpbmcuIFRoYXQncyB3aHkgSQo+Pj4+IHRoaW5rIHdl IG5lZWQgdG8gbWFwIHdob2xlIGhhcmR3YXJlIGJsb2NrICYgaGFuZGxlIGRpZmZlcmVudCByZWdp c3RlcnMKPj4+PiBsYXlvdXRzIGluIGEgZHJpdmVyLgo+Pj4KPj4+IFllcywgdGhhdCdzIHRoZSBj b3JyZWN0IHRoaW5nIHRvIGRvLgo+Pgo+PiBTbyBpbiB0aGUgZnV0dXJlIGlmIHdlIGhhcHBlbiB0 byB3YW50IHRvIG1hbmFnZSB0aGUgaGFyZHdhcmUgdGltZXJzIGluCj4+IHRoYXQgYmxvY2ssIHRo ZXkgd291bGQgYmUgcGFydCBvZiB0aGUgd2F0Y2hkb2cgZHJpdmVyPyBJIGFtIGZhaXJseSBzdXJl Cj4+IHRoZXkgd29uJ3QgYmUsIHNvIHlvdSB3aWxsIGJlIGNyZWF0aW5nIGEgY29tcG9zaXRlIGRy aXZlci9NRkQgdG8KPj4gc2VwYXJhdGUgb3V0IHRoZSBmdW5jdGlvbnMsIG1vcmUgbGlrZWx5LiBT byB5b3UgbWlnaHQgYXMgd2VsbCBjcmVhdGUKPj4gc3ViLW5vZGVzLgo+Pgo+Pj4KPj4+IFRoZSBx dWVzdGlvbiBpcyB3aGV0aGVyIHlvdSdkIG5lZWQgc3ViIG5vZGVzIGZvciB0aGUgb3RoZXIgZnVu Y3Rpb25zLgo+Pj4gRm9sa3MgdGVuZCB0byB3YW50IHRvIGhhdmUgc3ViIG5vZGVzIGZvciBjb252 ZW5pZW5jZSB3aGljaCBpc24ndCByZWFsbHkKPj4+IG5lZWRlZCBhbmQgdGhlbiByZXF1aXJlcyBh IERUIHVwZGF0ZSAoJ2NhdXNlIHRoZXkgYWRkIG5vZGVzIGFzIGFkZGluZwo+Pj4gZHJpdmVycyku Cj4+Cj4+IFNvcnJ5IGJ1dCBub3QsIHRoaXMgaXMgZ2V0dGluZyBjb21wbGV0ZWx5IHJpZGljdWxv dXMsIHRoZQo+Pgo+Pj4KPj4+IEJhc2VkIG9uIHRoZSByZWdpc3RlcnMsIHlvdSByZWFsbHkgZG9u J3QgbmVlZCBzdWIgbm9kZXMgaGVyZS4KPj4KPj4gSSBzb3J0IG9mIGRpc2FncmVlIGhlcmUsIHRo ZSB3YXRjaGRvZyBpcyBhIHBhcnQgb2YgYSBzdW5kcnkgdGltZXIgYmxvY2sKPj4gaGVyZSwgYnV0 IGl0IGlzIGxvZ2ljYWxseSBicm9rZW4gdXAgaW50byBkaWZmZXJlbnQgcGFydHMgYW5kIGlmIGlm IEkKPj4gd2VyZSB0byBpbWFnaW5lIGhvdyB0aGlzIHdvdWxkIG1hcCBpbnRvIGRpZmZlcmVudCBk cml2ZXJzLCBJIGNhbiBlYXNpbHkKPj4gc2VlIHRoYXQgd2Ugd291bGQgaGF2ZToKPj4KPj4gLSBh IGRyaXZlciB0byBtYW5hZ2UgdGhlIHRpbWVyIGludGVycnVwdCBjb250cm9sbGVyCj4+IC0gYSBk cml2ZXIgdG8gbWFuYWdlIGVhY2ggb2YgdGhlIDMgaGFyZHdhcmUgdGltZXJzLCBiZSB0aGV5IGNs b2NrZXZlbnQKPj4gb3IgZWxzZQo+PiAtIGEgZHJpdmVyIHRvIG1hbmFnZSB0aGUgd2F0Y2hkb2cK Pj4KPj4gVGhlIHNpbXBsZXN0IHdheSB0byBnZXQgdGhlcmUsIGFuZCBhbHNvIGJlY2F1c2UgdGhl c2Ugc2FtZSB0aW1lciBibG9ja3MKPj4gYXJlIGFjdHVhbGx5IHNwcmVhZCBpbiBvdGhlciBwYXJ0 cyBvZiBTVEIgY2hpcHMganVzdCBsaWtlIHRoZSB3YXRjaGRvZwo+PiBpcywgYnV0IGluIGEgZGlm ZmVyZW50IGxheW91dCB3aGVyZSB0aGV5IHN0YW5kIG9uIHRoZWlyIG93biB3YXMgdGhlIG1haW4K Pj4gZHJpdmUgZm9yIGRlZmluaW5nIHRoZSBiY203MDM4X3dkdCBiaW5kaW5nIHRoZSB3YXkgaXQg d2FzLgo+Pgo+PiBSYWZhbCwgSSBhcHByZWNpYXRlIHRoYXQgeW91IGFyZSB0cnlpbmcgdG8gbGV2 ZXJhZ2UgdGhlIGJjbTcwMzhfd2R0Cj4+IGRyaXZlciBhbmQgdGhpcyBpcyBiZXR0ZXIgdGhhbiB0 aGUgcHJldmlvdXMgcGF0Y2ggc2V0LCBidXQgSSByZWFsbHkgZG8KPj4gbm90IHNlZSB3aHkgaGF2 aW5nIHRoZSB3YXRjaGRvZyBkcml2ZXIgbm90IG1hbmFnZSB0aGUgKmV4YWN0KiBzdWJzZXQgb2YK Pj4gdGhlIHJlZ2lzdGVyIHNwYWNlIG5lZWRlZCAoc3RhcnRpbmcgYXQgMHgyOCkgaXMgbm90IGJl aW5nIGRvbmUuCj4gCj4gQWdyZWVkLCBlc3BlY2lhbGx5IHNpbmNlIG90aGVyIHN1Yi1kZXZpY2Vz IG9mIGJjbTQ5MDggYXJlIGFscmVkeSBtb2RlbGVkCj4gdGhpcyB3YXkuIFNlZSBhcmNoL2FybTY0 L2Jvb3QvZHRzL2Jyb2FkY29tL2JjbTQ5MDgvYmNtNDkwOC5kdHNpLgo+IEF0IHRoaXMgcG9pbnQs IGJlZm9yZSBhY2NlcHRpbmcgYW55dGhpbmcsIEknbGwgd2FudCB0byBoYXZlIGFuIGV4cGxhbmF0 aW9uCj4gaG93IGFuZCB3aHkgdGhlIHdhdGNoZG9nIGludGVyZmFjZSBpcyBoYW5kbGVkIGRpZmZl cmVudGx5IHRoYW4sIHNheSwKPiBpdHMgcmVzZXQgY29udHJvbGxlci4gQWxzbywgSSdkIGxpa2Ug dG8gdW5kZXJzdGFuZCB0aGUgbWVtb3J5IHJlZ2lvbgo+IGFzc2lnbmVkIHRvIGJjbTcwMzgsIHdo aWNoIGhhcHBlbnMgdG8gYmUgc29tZXRoaW5nIGxpa2U6Cj4gCj4gwqDCoMKgIGNvbXBhdGlibGUg PSAiYnJjbSxiY203MDM4LXdkdCI7Cj4gwqDCoMKgwqDCoMKgwqAgcmVnID0gPDB4ZjA0MGE3ZTgg MHgxNj47Cj4gCj4gYmVjYXVzZSBpdCBzZWVtcyB1bmxpa2VseSB0aGF0IHRoaXMgaXMgYSBjaGlw IHN1YnN5c3RlbSB0aGF0IGp1c3QgaGFwcGVucwo+IHRvIHN0YXJ0IGF0IHN1Y2ggYW4gb2RkIGJv dW5kYXJ5LiBNb3JlIHNwZWNpZmljYWxseSwgSSBzZWUgaW4gYWN0dWFsCj4gLmR0c2kgZmlsZXMg ZGF0YSBzdWNoIGFzOgo+IAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB3YXRjaGRv Zzogd2F0Y2hkb2dANDA2NmE4IHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGNsb2NrcyA9IDwmdXBnX2Nsaz47Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb21wYXRpYmxlID0gImJyY20sYmNtNzAzOC13ZHQi Owo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVnID0g PDB4NDA2NmE4IDB4MTQ+Owo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgc3RhdHVzID0gImRpc2FibGVkIjsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgfTsKPiAuLi4KPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdGltZXJzOiB0 aW1lckA0MDY2ODAgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgY29tcGF0aWJsZSA9ICJicmNtLGJyY21zdGItdGltZXJzIjsKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlZyA9IDwweDQwNjY4MCAweDQwPjsK PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfTsKPiAKPiBTbyB0aGVyZSBoYXBwZW4g dG8gYmUgdGltZXJzIGluIHRoZSBzYW1lIHJlZ2lvbiwgYW5kIHRoZSBvZmZzZXQKPiBiZXR3ZWVu IHRpbWVyIGFuZCB3YXRjaGRvZyByZWdpc3RlcnMgaXMgMHgyOC4gQ29pbmNpZGVudGFsbHksIHRo YXQKPiBqdXN0IGhhcHBlbnMgdG8gYmUgdGhlIGV4dHJhIG9mZnNldCBkZWZpbmVkIGluIHRoaXMg cGF0Y2ggZm9yIHRoZQo+IGJjbTQ5MDggd2F0Y2hkb2cuIFJlYWxseSA/IFNvcnJ5LCB0aGlzIHNv dW5kcyB2ZXJ5IGluY29uc2lzdGVudAo+IGFuZCBhcmJpdHJhcnkgdG8gbWUuCgpUbyBSYWZhbCdz IGRlZmVuc2UsIHdlIGNvdWxkIGhhdmUgZGVmaW5lZCB0aGUgYmNtNzAzOC13ZHQgYmluZGluZyBz dWNoCnRoYXQgdGhlIHdhdGNoZG9nIHdvdWxkIGhhdmUgYmVlbiBhdCAweDI4IGZyb20gdGhlIGJl Z2lubmluZyBvZiB0aGUKdGltZXIgYmxvY2ssIGJ1dCBhcyBJIHdyb3RlIGVhcmxpZXIsIHRoYXQg c2FtZSB3YXRjaGRvZyB3aGljaCBpcyByZWFsbHkKanVzdCA4IGJ5dGVzIHdvcnRoIG9mIHJlZ2lz dGVyIGlzIHNvbWV0aW1lcyBpbnN0YW50aWF0ZWQgb24gaXRzIG93bgp3aXRob3V0IHRoZSByZXN0 IG9mIHRoZSB0aW1lciBibG9jay4gVGhpcyBpcyBub3QgdmlzaWJsZSBpbiBhIERUUyB0aGF0Cmlz IHVwc3RyZWFtIGJ1dCBpdCBkb2VzIGhhcHBlbiBpbiBzb21lIG9mIHRoZSBDYWJsZSBNb2RlbSBj aGlwcy4gVGhhdAp3YXMgdGhlIG1haW4gbW90aXZhdGlvbiBmb3IgZGVmaW5pbmcgdGhlIGJpbmRp bmcgdGhlIHdheSBpdCB3YXMsIHN1Y2gKdGhhdCB3ZSBjb3VsZCBqdXN0IG1hcCB0aG9zZSA4IGJ5 dGVzIHdoZXJldmVyIHRoZXkgYXJlLgoKPiAKPiBPdmVyYWxsLCBJIHN1c3BlY3QgSSdsbCBoYXZl IHRvIHNlZSBkYXRhc2hlZXRzIGlmIHdlIHJlYWxseSBlbmQgdXAKPiBoYXZpbmcgZGlmZmVyZW50 IG9mZnNldHMgZm9yIGVhY2ggY2hpcCwgYmVjYXVzZSBJJ2xsIHdhbnQgdG8gY29uZmlybQo+IHRo YXQgdGhlIHdhdGNoZG9nIHN1YnN5c3RlbSBpc24ndCB0cmVhdGVkIGRpZmZlcmVudGx5IHRoYW4g b3RoZXIKPiBzdWJzeXN0ZW1zLCBhbmQgdGhhdCB0aGUgb2Zmc2V0IGNhbGN1bGF0aW9ucyBhcmUg YXBwcm9wcmlhdGUgYW5kCj4gY29uc2lzdGVudCBhY3Jvc3MgdGhlIGRpZmZlcmVudCBjaGlwcy4K CkRhdGFzaGVldHMgYXJlIG5vdCBwdWJsaWMgaG93ZXZlciBzaGFyaW5nIHRoZSBzdHJ1Y3R1cmVz IGRvY3VtZW50aW5nIHRoZQpyZWdpc3RlciBsYXlvdXQgaXMgc29tZXRoaW5nIHRoYXQgaXMgcG9z c2libGUuIEZvciBjb25zaXN0ZW5jeSwgaWYgd2UgZG8KbGV0IDQ5MDggZGVmaW5lIHRoZSB3YXRj aGRvZyB0byBpbmNsdWRlIHRoYXQgMHgyOCBvZmZzZXQsIHRoZW4gd2UgYXJlCm5vdCBtYXBwaW5n IGp1c3QgdGhlIHdhdGNoZG9nLCBidXQgdGhlIGVudGlyZSB0aW1lciBibG9jaywgd2hpY2ggdGhl bgpyYWlzZXMgdGhlIHF1ZXN0aW9uIG9mIHdoYXQgaGFwcGVucyB0byB0aGUgdGltZXIgaW50ZXJy dXB0IGVuYWJsZS9zdGF0dXMKYW5kIHRpbWVyIHJlZ2lzdGVycywgaG93IGRvIHdlIGVuZC11cCBz dWItZGl2aWRpbmcgdGhhdCByZWdpc3RlciBzcGFjZQppbiBhIGxvZ2ljYWwgbWFubmVyLgotLSAK RmxvcmlhbgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K bGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZy YWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGlu dXgtYXJtLWtlcm5lbAo=