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 D2436C433FE for ; Mon, 1 Nov 2021 17:29:08 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id BC7356112D for ; Mon, 1 Nov 2021 17:29:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231402AbhKARbl (ORCPT ); Mon, 1 Nov 2021 13:31:41 -0400 Received: from mail.kernel.org ([198.145.29.99]:54212 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230246AbhKARbd (ORCPT ); Mon, 1 Nov 2021 13:31:33 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 5B2AA6108F; Mon, 1 Nov 2021 17:28:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1635787739; bh=2cJQ0z+eLg6oK6BPQeDhyJnQMwy8kofAHvVb19izHF4=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=KmjWI6zQF6+Xx/MxkR5vHWVocTw2Xf4m1SqOOf8wv/J8BkEwEONNA+OVpiSXE03oW 4exKX9Wcaf/eK6gr8QsQ0hY0e/X92veHhmwxSciBq0avm7V65GyPUI+ZQw46pVKOpw fHiyKSWBdt65MEO4p+3KicsKMUmMdfJn2hSi7teyJWvUUOuLpzXSkcXYMmfcTaqj4t MspcEyj4V16VbIxnP7KfACunaD3g6Xr3yo8LPM+KvdamDbCFE3mhM0EPE2CAo90w9F hYPGvp7+rUnslDzuYLgpVVMBdz27eQsrwDqmUrlA4ihhAB5aBT7jlSSvjWZFeDnReQ +lEmBuaxC8A4Q== Received: by mail-ed1-f41.google.com with SMTP id g10so66497865edj.1; Mon, 01 Nov 2021 10:28:59 -0700 (PDT) X-Gm-Message-State: AOAM5320GakIFIbl63nYct8clDRR+cOPL0rW5O4NVaNfj/E4w6YSKX55 O9mgDk5Zz5Z0LECEqMCZjSuHnyUqawa65dU6fQ== X-Google-Smtp-Source: ABdhPJzkwoHospvWPt75rQ9pj3Q9ByRQ+4JTXMeqeD/nsnG4kv3oJZ2NTVWtriGCZu4WdnuCkBVl/I7sTIJhXcJO/UY= X-Received: by 2002:a05:6402:84d:: with SMTP id b13mr43627187edz.6.1635787737776; Mon, 01 Nov 2021 10:28:57 -0700 (PDT) MIME-Version: 1.0 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> In-Reply-To: <1df7e7cd-aa4c-c692-ff7f-8ee27780a6a9@gmail.com> From: Rob Herring Date: Mon, 1 Nov 2021 12:28:45 -0500 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH 3/3] watchdog: bcm7038_wdt: support BCM4908 SoC To: Florian Fainelli Cc: =?UTF-8?B?UmFmYcWCIE1pxYJlY2tp?= , Wim Van Sebroeck , Guenter Roeck , "maintainer:BROADCOM BCM7XXX ARM ARCHITECTURE" , LINUX-WATCHDOG , linux-arm-kernel , devicetree@vger.kernel.org, "open list:MIPS" , =?UTF-8?B?UmFmYcWCIE1pxYJlY2tp?= Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org On Fri, Oct 29, 2021 at 11:45 AM Florian Fainelli wr= ote: > > On 10/29/21 6:03 AM, Rob Herring wrote: > > On Fri, Oct 29, 2021 at 01:39:02PM +0200, Rafa=C5=82 Mi=C5=82ecki wrote= : > >> [Rob: please kindly comment on this] > >> > >> On 28.10.2021 18:29, Florian Fainelli wrote: > >>> On 10/28/21 2:30 AM, Rafa=C5=82 Mi=C5=82ecki wrote: > >>>> From: Rafa=C5=82 Mi=C5=82ecki > >>>> > >>>> 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 platf= orm > >>>> devices due to missing DT). Eventually this driver should replace > >>>> bcm63xx_wdt.c. > >>>> > >>>> Signed-off-by: Rafa=C5=82 Mi=C5=82ecki > >>>> --- > >>> > >>> [snip] > >>> > >>>> + > >>>> +static const u16 bcm7038_wdt_regs_bcm4908[] =3D { > >>>> + [BCM63XX_WDT_REG_DEFVAL] =3D 0x28, > >>>> + [BCM63XX_WDT_REG_CTL] =3D 0x2c, > >>>> + [BCM63XX_WDT_REG_SOFTRESET] =3D 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 =3D <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. There is no requirement that an MFD have child nodes. They are done both ways. If you need some internal kernel restructuring, then I don't care (as DT maintainer). We very commonly have a single node that's both clock and reset provider for example. It's primarily when the sub blocks consume different DT resources that you need 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 Huh? > > > > > 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 You know the h/w better than me. I was giving my opinion based only on the limited information presented. > 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. A sub-block reused in different blocks is a decent reason for sub-nodes. Most important for me is that the binding be complete and not have to change in an incompatible way in the future. The more detailed you make the binding, the harder it will be to get right. It's the same reason we moved away from doing a clock per node for clock trees. So, if you want child nodes, then you need to define all of them. Rob 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 C6281C433EF for ; Mon, 1 Nov 2021 17:30:41 +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 9556260E78 for ; Mon, 1 Nov 2021 17:30:41 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 9556260E78 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org 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:Cc: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=0Vgr/OpkV/9Pw9WKC09of3m+LyDuvzdGkkO3Rl5dpgM=; b=GVpStDSfqJAmEc 1np/V8SPUN7kKk6fqG/lDuTjKfZ6S7J7W3MnKXyMsnl+izeXeuyTyTfOZG/b/0w+10XbotX7hAVfr GHpVrZbi65pG8xCPfJ/tO5Ez0l/r9d9hxMi7l5bL0qJxnFfxW6ZvYN5lFnxYuvSFSOWM6jxiZK42y OaODZZTnGnKMO6sTphUBsFiQ6o7dviu/eRS9zjoqYsccCvhxx/gAQlzfaRigxA4ynPLxOkUhwtI5t sgaRr7Af2KmMEWE8mDhxQCfkdDELLtfZwOf04K4zvmRVqmhYaSSk0EvgswwHNNHH4RI+VLPx4GMeY FS9mA6zPHOAyv/1hK9ww==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mhb7H-00Gtuj-9P; Mon, 01 Nov 2021 17:29:03 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mhb7E-00Gttj-3u for linux-arm-kernel@lists.infradead.org; Mon, 01 Nov 2021 17:29:01 +0000 Received: by mail.kernel.org (Postfix) with ESMTPSA id 5722160F42 for ; Mon, 1 Nov 2021 17:28:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1635787739; bh=2cJQ0z+eLg6oK6BPQeDhyJnQMwy8kofAHvVb19izHF4=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=KmjWI6zQF6+Xx/MxkR5vHWVocTw2Xf4m1SqOOf8wv/J8BkEwEONNA+OVpiSXE03oW 4exKX9Wcaf/eK6gr8QsQ0hY0e/X92veHhmwxSciBq0avm7V65GyPUI+ZQw46pVKOpw fHiyKSWBdt65MEO4p+3KicsKMUmMdfJn2hSi7teyJWvUUOuLpzXSkcXYMmfcTaqj4t MspcEyj4V16VbIxnP7KfACunaD3g6Xr3yo8LPM+KvdamDbCFE3mhM0EPE2CAo90w9F hYPGvp7+rUnslDzuYLgpVVMBdz27eQsrwDqmUrlA4ihhAB5aBT7jlSSvjWZFeDnReQ +lEmBuaxC8A4Q== Received: by mail-ed1-f48.google.com with SMTP id g14so4744732edz.2 for ; Mon, 01 Nov 2021 10:28:59 -0700 (PDT) X-Gm-Message-State: AOAM532kcjaN/6GhqjoJ9+xUHQ9gsUH1aJpWKFuuDAmG0gkQwT/2FKJO EmvxggPcVG4RFFFLnMr/dy76mRyQuWoZxFX2CA== X-Google-Smtp-Source: ABdhPJzkwoHospvWPt75rQ9pj3Q9ByRQ+4JTXMeqeD/nsnG4kv3oJZ2NTVWtriGCZu4WdnuCkBVl/I7sTIJhXcJO/UY= X-Received: by 2002:a05:6402:84d:: with SMTP id b13mr43627187edz.6.1635787737776; Mon, 01 Nov 2021 10:28:57 -0700 (PDT) MIME-Version: 1.0 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> In-Reply-To: <1df7e7cd-aa4c-c692-ff7f-8ee27780a6a9@gmail.com> From: Rob Herring Date: Mon, 1 Nov 2021 12:28:45 -0500 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH 3/3] watchdog: bcm7038_wdt: support BCM4908 SoC To: Florian Fainelli Cc: =?UTF-8?B?UmFmYcWCIE1pxYJlY2tp?= , Wim Van Sebroeck , Guenter Roeck , "maintainer:BROADCOM BCM7XXX ARM ARCHITECTURE" , LINUX-WATCHDOG , linux-arm-kernel , devicetree@vger.kernel.org, "open list:MIPS" , =?UTF-8?B?UmFmYcWCIE1pxYJlY2tp?= X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211101_102900_248046_017E9D17 X-CRM114-Status: GOOD ( 41.68 ) 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 T24gRnJpLCBPY3QgMjksIDIwMjEgYXQgMTE6NDUgQU0gRmxvcmlhbiBGYWluZWxsaSA8Zi5mYWlu ZWxsaUBnbWFpbC5jb20+IHdyb3RlOgo+Cj4gT24gMTAvMjkvMjEgNjowMyBBTSwgUm9iIEhlcnJp bmcgd3JvdGU6Cj4gPiBPbiBGcmksIE9jdCAyOSwgMjAyMSBhdCAwMTozOTowMlBNICswMjAwLCBS YWZhxYIgTWnFgmVja2kgd3JvdGU6Cj4gPj4gW1JvYjogcGxlYXNlIGtpbmRseSBjb21tZW50IG9u IHRoaXNdCj4gPj4KPiA+PiBPbiAyOC4xMC4yMDIxIDE4OjI5LCBGbG9yaWFuIEZhaW5lbGxpIHdy b3RlOgo+ID4+PiBPbiAxMC8yOC8yMSAyOjMwIEFNLCBSYWZhxYIgTWnFgmVja2kgd3JvdGU6Cj4g Pj4+PiBGcm9tOiBSYWZhxYIgTWnFgmVja2kgPHJhZmFsQG1pbGVja2kucGw+Cj4gPj4+Pgo+ID4+ Pj4gSGFyZHdhcmUgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyIGdvZXMgYmFjayB0byB0aGUgb2xk IGJjbTYzeHggZGF5cy4gSXQKPiA+Pj4+IHdhcyB0aGVuIHJldXNlZCBpbiBCQ003MDM4IGFuZCBs YXRlciBhbHNvIGluIEJDTTQ5MDguCj4gPj4+Pgo+ID4+Pj4gRGVwZW5kaW5nIG9uIFNvQyBtb2Rl bCByZWdpc3RlcnMgbGF5b3V0IGRpZmZlcnMgYSBiaXQuIFRoaXMgY29tbWl0Cj4gPj4+PiBpbnRy b2R1Y2VzIHN1cHBvcnQgZm9yIHBlci1jaGlwc2V0IHJlZ2lzdGVycyBvZmZzZXRzICYgYWRkcyBC Q000OTA4Cj4gPj4+PiBsYXlvdXQuCj4gPj4+Pgo+ID4+Pj4gTGF0ZXIgb24gQkNNNjN4eCBTb0Nz IHN1cHBvcnQgc2hvdWxkIGJlIGFkZGVkIHRvbyAocHJvYmFibHkgYXMgcGxhdGZvcm0KPiA+Pj4+ IGRldmljZXMgZHVlIHRvIG1pc3NpbmcgRFQpLiBFdmVudHVhbGx5IHRoaXMgZHJpdmVyIHNob3Vs ZCByZXBsYWNlCj4gPj4+PiBiY202M3h4X3dkdC5jLgo+ID4+Pj4KPiA+Pj4+IFNpZ25lZC1vZmYt Ynk6IFJhZmHFgiBNacWCZWNraSA8cmFmYWxAbWlsZWNraS5wbD4KPiA+Pj4+IC0tLQo+ID4+Pgo+ ID4+PiBbc25pcF0KPiA+Pj4KPiA+Pj4+ICsKPiA+Pj4+ICtzdGF0aWMgY29uc3QgdTE2IGJjbTcw Mzhfd2R0X3JlZ3NfYmNtNDkwOFtdID0gewo+ID4+Pj4gKyAgW0JDTTYzWFhfV0RUX1JFR19ERUZW QUxdICAgICAgICA9IDB4MjgsCj4gPj4+PiArICBbQkNNNjNYWF9XRFRfUkVHX0NUTF0gICAgICAg ICAgID0gMHgyYywKPiA+Pj4+ICsgIFtCQ002M1hYX1dEVF9SRUdfU09GVFJFU0VUXSAgICAgPSAw eDM0LAo+ID4+Pgo+ID4+PiBJIGRvbid0IHVuZGVyc3RhbmQgd2hhdCB5b3UgYXJlIGRvaW5nIGhl cmUgYW5kIHdoeSB5b3UgYXJlIG5vdAo+ID4+PiBvZmZzZXR0aW5nIHRoZSAicmVnIiBwcm9wZXJ0 eSBhcHByb3ByaWF0ZWx5IHdoZW4geW91IGNyZWF0ZSB5b3VyCj4gPj4+IGJjbTQ5MDgtd2R0IERl dmljZSBUcmVlIG5vZGUgc3VjaCB0aGF0IHRoZSBiYXNlIHN0YXJ0cyBhdCAwLCBhbmQgdGhlCj4g Pj4+IGV4aXN0aW5nIGRyaXZlciBiZWNvbWVzIHVzYWJsZSBhcy1pcy4gVGhpcyBkb2VzIG5vdCBt YWtlIGFueSBzZW5zZSB0byBtZQo+ID4+PiB3aGVuIGl0IGlzIG9idmlvdXNseSB0aGUgc2ltcGxl c3Qgd2F5IHRvIG1ha2UgdGhlIGRyaXZlciAiYWNjZXB0IiB0aGUKPiA+Pj4gcmVzb3VyY2UgYmVp bmcgcGFzc2VkLgo+ID4+Cj4gPj4gSSBiZWxpZXZlIHRoYXQgRFQgYmluZGluZyBzaG91bGQgY292 ZXIgdGhlIHdob2xlIGhhcmR3YXJlIGJsb2NrIGFuZAo+ID4+IGRlc2NyaWJlIGl0IChoZXJlOiB1 c2UgcHJvcGVyIGNvbXBhdGlibGUgdG8gYWxsb3cgcmVjb2duaXppbmcgYmxvY2sKPiA+PiB2YXJp YW50KS4KPiA+Pgo+ID4+IFRoYXQncyBiZWNhdXNlIChhcyBmYXIgYXMgSSB1bmRlcnN0YW5kKSBE VCBzaG91bGQgYmUgdXNlZCB0byBkZXNjcmliZQo+ID4+IGhhcmR3YXJlIGFzIGNsb3NlbHkgYXMg cG9zc2libGUuIEkgdGhpbmsgaXQgc2hvdWxkbid0IGJlIGFkanVzdGVkIHRvCj4gPj4gbWFrZSBt YXBwaW5nIG1hdGNoIExpbnV4J3MgZHJpdmVyIGltcGxlbWVudGF0aW9uLgo+ID4+Cj4gPj4KPiA+ PiBTbyBpZjoKPiA+PiAxLiBIYXJkd2FyZSBibG9jayBpcyBtYXBwZWQgYXQgMHhmZjgwMDQwMAo+ ID4+IDIuIEl0IGhhcyBpbnRlcmVzdGluZyByZWdpc3RlcnMgYXQgMHhmZjgwMDQyOCBhbmQgMHhm ZjgwMDQyYwo+ID4+Cj4gPj4gSSB0aGluayBtYXBwaW5nIHNob3VsZCB1c2U6Cj4gPj4gcmVnID0g PDB4ZmY4MDA0MDAgMHgzYz47Cj4gPj4gZXZlbiBpZiB3ZSBkb24ndCB1c2UgdGhlIGZpcnN0IE4g cmVnaXN0ZXJzLgo+ID4+Cj4gPj4gVGhhdCB3YXksIGF0IHNvbWUgcG9pbnQsIHlvdSBjYW4gZXh0 ZW5kIExpbnV4IChvciB3aGF0ZXZlcikgZHJpdmVyIHRvCj4gPj4gdXNlIGV4dHJhIHJlZ2lzdGVy cyB3aXRob3V0IHJld29ya2luZyB0aGUgd2hvbGUgYmluZGluZy4gVGhhdCdzIHdoeSBJCj4gPj4g dGhpbmsgd2UgbmVlZCB0byBtYXAgd2hvbGUgaGFyZHdhcmUgYmxvY2sgJiBoYW5kbGUgZGlmZmVy ZW50IHJlZ2lzdGVycwo+ID4+IGxheW91dHMgaW4gYSBkcml2ZXIuCj4gPgo+ID4gWWVzLCB0aGF0 J3MgdGhlIGNvcnJlY3QgdGhpbmcgdG8gZG8uCj4KPiBTbyBpbiB0aGUgZnV0dXJlIGlmIHdlIGhh cHBlbiB0byB3YW50IHRvIG1hbmFnZSB0aGUgaGFyZHdhcmUgdGltZXJzIGluCj4gdGhhdCBibG9j aywgdGhleSB3b3VsZCBiZSBwYXJ0IG9mIHRoZSB3YXRjaGRvZyBkcml2ZXI/IEkgYW0gZmFpcmx5 IHN1cmUKPiB0aGV5IHdvbid0IGJlLCBzbyB5b3Ugd2lsbCBiZSBjcmVhdGluZyBhIGNvbXBvc2l0 ZSBkcml2ZXIvTUZEIHRvCj4gc2VwYXJhdGUgb3V0IHRoZSBmdW5jdGlvbnMsIG1vcmUgbGlrZWx5 LiBTbyB5b3UgbWlnaHQgYXMgd2VsbCBjcmVhdGUKPiBzdWItbm9kZXMuCgpUaGVyZSBpcyBubyBy ZXF1aXJlbWVudCB0aGF0IGFuIE1GRCBoYXZlIGNoaWxkIG5vZGVzLiBUaGV5IGFyZSBkb25lCmJv dGggd2F5cy4gSWYgeW91IG5lZWQgc29tZSBpbnRlcm5hbCBrZXJuZWwgcmVzdHJ1Y3R1cmluZywg dGhlbiBJCmRvbid0IGNhcmUgKGFzIERUIG1haW50YWluZXIpLgoKV2UgdmVyeSBjb21tb25seSBo YXZlIGEgc2luZ2xlIG5vZGUgdGhhdCdzIGJvdGggY2xvY2sgYW5kIHJlc2V0CnByb3ZpZGVyIGZv ciBleGFtcGxlLiBJdCdzIHByaW1hcmlseSB3aGVuIHRoZSBzdWIgYmxvY2tzIGNvbnN1bWUKZGlm ZmVyZW50IERUIHJlc291cmNlcyB0aGF0IHlvdSBuZWVkIHN1Yi1ub2Rlcy4KCj4gPiBUaGUgcXVl c3Rpb24gaXMgd2hldGhlciB5b3UnZCBuZWVkIHN1YiBub2RlcyBmb3IgdGhlIG90aGVyIGZ1bmN0 aW9ucy4KPiA+IEZvbGtzIHRlbmQgdG8gd2FudCB0byBoYXZlIHN1YiBub2RlcyBmb3IgY29udmVu aWVuY2Ugd2hpY2ggaXNuJ3QgcmVhbGx5Cj4gPiBuZWVkZWQgYW5kIHRoZW4gcmVxdWlyZXMgYSBE VCB1cGRhdGUgKCdjYXVzZSB0aGV5IGFkZCBub2RlcyBhcyBhZGRpbmcKPiA+IGRyaXZlcnMpLgo+ Cj4gU29ycnkgYnV0IG5vdCwgdGhpcyBpcyBnZXR0aW5nIGNvbXBsZXRlbHkgcmlkaWN1bG91cywg dGhlCgpIdWg/Cgo+Cj4gPgo+ID4gQmFzZWQgb24gdGhlIHJlZ2lzdGVycywgeW91IHJlYWxseSBk b24ndCBuZWVkIHN1YiBub2RlcyBoZXJlLgo+Cj4gSSBzb3J0IG9mIGRpc2FncmVlIGhlcmUsIHRo ZSB3YXRjaGRvZyBpcyBhIHBhcnQgb2YgYSBzdW5kcnkgdGltZXIgYmxvY2sKPiBoZXJlLCBidXQg aXQgaXMgbG9naWNhbGx5IGJyb2tlbiB1cCBpbnRvIGRpZmZlcmVudCBwYXJ0cyBhbmQgaWYgaWYg SQo+IHdlcmUgdG8gaW1hZ2luZSBob3cgdGhpcyB3b3VsZCBtYXAgaW50byBkaWZmZXJlbnQgZHJp dmVycywgSSBjYW4gZWFzaWx5Cj4gc2VlIHRoYXQgd2Ugd291bGQgaGF2ZToKPgo+IC0gYSBkcml2 ZXIgdG8gbWFuYWdlIHRoZSB0aW1lciBpbnRlcnJ1cHQgY29udHJvbGxlcgo+IC0gYSBkcml2ZXIg dG8gbWFuYWdlIGVhY2ggb2YgdGhlIDMgaGFyZHdhcmUgdGltZXJzLCBiZSB0aGV5IGNsb2NrZXZl bnQKPiBvciBlbHNlCj4gLSBhIGRyaXZlciB0byBtYW5hZ2UgdGhlIHdhdGNoZG9nCgpZb3Uga25v dyB0aGUgaC93IGJldHRlciB0aGFuIG1lLiBJIHdhcyBnaXZpbmcgbXkgb3BpbmlvbiBiYXNlZCBv bmx5IG9uCnRoZSBsaW1pdGVkIGluZm9ybWF0aW9uIHByZXNlbnRlZC4KCj4gVGhlIHNpbXBsZXN0 IHdheSB0byBnZXQgdGhlcmUsIGFuZCBhbHNvIGJlY2F1c2UgdGhlc2Ugc2FtZSB0aW1lciBibG9j a3MKPiBhcmUgYWN0dWFsbHkgc3ByZWFkIGluIG90aGVyIHBhcnRzIG9mIFNUQiBjaGlwcyBqdXN0 IGxpa2UgdGhlIHdhdGNoZG9nCj4gaXMsIGJ1dCBpbiBhIGRpZmZlcmVudCBsYXlvdXQgd2hlcmUg dGhleSBzdGFuZCBvbiB0aGVpciBvd24gd2FzIHRoZSBtYWluCj4gZHJpdmUgZm9yIGRlZmluaW5n IHRoZSBiY203MDM4X3dkdCBiaW5kaW5nIHRoZSB3YXkgaXQgd2FzLgoKQSBzdWItYmxvY2sgcmV1 c2VkIGluIGRpZmZlcmVudCBibG9ja3MgaXMgYSBkZWNlbnQgcmVhc29uIGZvciBzdWItbm9kZXMu CgpNb3N0IGltcG9ydGFudCBmb3IgbWUgaXMgdGhhdCB0aGUgYmluZGluZyBiZSBjb21wbGV0ZSBh bmQgbm90IGhhdmUgdG8KY2hhbmdlIGluIGFuIGluY29tcGF0aWJsZSB3YXkgaW4gdGhlIGZ1dHVy ZS4gVGhlIG1vcmUgZGV0YWlsZWQgeW91Cm1ha2UgdGhlIGJpbmRpbmcsIHRoZSBoYXJkZXIgaXQg d2lsbCBiZSB0byBnZXQgcmlnaHQuIEl0J3MgdGhlIHNhbWUKcmVhc29uIHdlIG1vdmVkIGF3YXkg ZnJvbSBkb2luZyBhIGNsb2NrIHBlciBub2RlIGZvciBjbG9jayB0cmVlcy4gU28sCmlmIHlvdSB3 YW50IGNoaWxkIG5vZGVzLCB0aGVuIHlvdSBuZWVkIHRvIGRlZmluZSBhbGwgb2YgdGhlbS4KClJv YgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgt YXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQu b3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJt LWtlcm5lbAo=