From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from cstnet.cn (smtp21.cstnet.cn [159.226.251.21]) (using TLSv1.2 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3BBD12264AA; Fri, 19 Dec 2025 08:02:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=159.226.251.21 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766131342; cv=none; b=RtmefSLNO0HRmFM+OAfxXWHQvj7za7ge49PE77tNElWAaPZJ01rcUmPKp/KT+mGyXvbKc5Xp2vECdjTYnubuyX0kbvt8Wy+r1HenwJrxpYyLbqDNN23U1NDxlUZdcKQBp1xEq4+flBxxwLl8+8JrISfXiG0jMocZCySX1jttd/s= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766131342; c=relaxed/simple; bh=CHVhsEEszqnU4LoxOGS7wHG+fmEdUXxxtRBiyrbO9Tg=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=qVU/txh5d2PfqnTZ0ZPBzCC7VQHEr0jsArOK1U/cJNd4GWpR8aqALsH74A22A9jkd93c8L+r8RspUw7eNidR1STZkZDISU1UAAMLzTVCefJPaMS3Yz5gHxM6XGFRPH47DO69pmcRTo5iB4HSMAJbywrA+wwwNrFvqPPrjbB1Oj4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=isrc.iscas.ac.cn; spf=pass smtp.mailfrom=isrc.iscas.ac.cn; arc=none smtp.client-ip=159.226.251.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=isrc.iscas.ac.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=isrc.iscas.ac.cn Received: from duge-virtual-machine (unknown [223.160.207.22]) by APP-01 (Coremail) with SMTP id qwCowACHLmp4BkVpRhwZAQ--.24049S2; Fri, 19 Dec 2025 16:02:03 +0800 (CST) Date: Fri, 19 Dec 2025 16:02:00 +0800 From: Jiayu Du To: Xukai Wang , Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Paul Walmsley , Palmer Dabbelt , Albert Ou , Conor Dooley Cc: linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org, Samuel Holland , Troy Mitchell Subject: Re: [PATCH v9 2/3] clk: canaan: Add clock driver for Canaan K230 Message-ID: References: <20251127-b4-k230-clk-v9-0-3aa09e17faf5@zohomail.com> <20251127-b4-k230-clk-v9-2-3aa09e17faf5@zohomail.com> Precedence: bulk X-Mailing-List: linux-clk@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20251127-b4-k230-clk-v9-2-3aa09e17faf5@zohomail.com> X-CM-TRANSID:qwCowACHLmp4BkVpRhwZAQ--.24049S2 X-Coremail-Antispam: 1UD129KBjvJXoW3GrWkXr13XF18XryrJFWUurg_yoW7tr4kpr 1Yg34rAF4qyw13Ga1avw1UuF95KF48GF1qga4xW34rAF45GF9FgF1SgryIyF43XFy8C3yF qFyUt3yY93yjyaUanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUvvb7Iv0xC_tr1lb4IE77IF4wAFF20E14v26r4j6ryUM7CY07I2 0VC2zVCF04k26cxKx2IYs7xG6r1S6rWUM7CIcVAFz4kK6r1j6r18M28lY4IEw2IIxxk0rw A2F7IY1VAKz4vEj48ve4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_Jr0_JF4l84ACjcxK6xII jxv20xvEc7CjxVAFwI0_Gr0_Cr1l84ACjcxK6I8E87Iv67AKxVWUJVW8JwA2z4x0Y4vEx4 A2jsIEc7CjxVAFwI0_Gr0_Gr1UM2AIxVAIcxkEcVAq07x20xvEncxIr21l5I8CrVACY4xI 64kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r1j6r18McIj6I8E87Iv67AKxVWUJVW8Jw Am72CE4IkC6x0Yz7v_Jr0_Gr1lF7xvr2IY64vIr41lFIxGxcIEc7CjxVA2Y2ka0xkIwI1l c7CjxVAaw2AFwI0_Jw0_GFyl42xK82IYc2Ij64vIr41l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr 1lx2IqxVAqx4xG67AKxVWUJVWUGwC20s026x8GjcxK67AKxVWUGVWUWwC2zVAF1VAY17CE 14v26r4a6rW5MIIYrxkI7VAKI48JMIIF0xvE2Ix0cI8IcVAFwI0_Jr0_JF4lIxAIcVC0I7 IYx2IY6xkF7I0E14v26r4j6F4UMIIF0xvE42xK8VAvwI8IcIk0rVWUJVWUCwCI42IY6I8E 87Iv67AKxVWUJVW8JwCI42IY6I8E87Iv6xkF7I0E14v26r4j6r4UJbIYCTnIWIevJa73Uj IFyTuYvjxU2wIDUUUUU X-CM-SenderInfo: 5mld534oul2uny6l223fol2u1dvotugofq/ On Thu, Nov 27, 2025 at 08:45:13PM +0800, Xukai Wang wrote: > This patch provides basic support for the K230 clock, which covers > all clocks in K230 SoC. > > The clock tree of the K230 SoC consists of a 24MHZ external crystal > oscillator, PLLs and an external pulse input for timerX, and their > derived clocks. > > Co-developed-by: Troy Mitchell > Signed-off-by: Troy Mitchell > Signed-off-by: Xukai Wang > --- > drivers/clk/Kconfig | 6 + > drivers/clk/Makefile | 1 + > drivers/clk/clk-k230.c | 2443 ++++++++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 2450 insertions(+) ... > diff --git a/drivers/clk/clk-k230.c b/drivers/clk/clk-k230.c > new file mode 100644 > index 0000000000000000000000000000000000000000..8750e9cbac04f30e31d8f2eb395c9b49027ca278 > --- /dev/null > +++ b/drivers/clk/clk-k230.c > @@ -0,0 +1,2443 @@ ... > + > +K230_CLK_GATE_FORMAT(cpu0_src_gate, > + K230_CPU0_SRC_GATE, > + 0, 0, 0, 0, > + &pll0_div2.hw); Core-related clocks of cpu0/cpu1 (src/plic/apb/noc_ddrcp4, etc.) lack protection flags, which risks accidental disabling. Recommend to replace the flag bits for all CPU0/CPU1 core clock nodes with `CLK_IS_CRITICAL`,like this: `0, 0, 0, 0,` -> `0, 0, CLK_IS_CRITICAL, 0,` > + > +K230_CLK_RATE_FORMAT(cpu0_src_rate, > + K230_CPU0_SRC_RATE, > + 1, 16, 1, 0xF, > + 16, 16, 0, 0x0, > + 0x0, 31, mul, 0x0, > + false, 0, > + &cpu0_src_gate.clk.hw); > + same as above,`false, 0,` ->`false, CLK_IS_CRITICAL,` > +K230_CLK_RATE_FORMAT(cpu0_axi_rate, > + K230_CPU0_AXI_RATE, > + 1, 1, 0, 0, > + 1, 8, 6, 0x7, > + 0x0, 31, div, 0x0, > + 0, 0, > + &cpu0_src_rate.clk.hw); > + same as above,`0, 0,` ->`0, CLK_IS_CRITICAL,` > +K230_CLK_GATE_FORMAT(cpu0_plic_gate, > + K230_CPU0_PLIC_GATE, > + 0x0, 9, 0, 0, > + &cpu0_src_rate.clk.hw); > + same as above,`0x0, 9, 0, 0,` -> `0x0, 9, CLK_IS_CRITICAL, 0,` > +K230_CLK_RATE_FORMAT(cpu0_plic_rate, > + K230_CPU0_PLIC_RATE, > + 1, 1, 0, 0, > + 1, 8, 10, 0x7, > + 0x0, 31, div, 0x0, > + false, 0, > + &cpu0_plic_gate.clk.hw); > + same as above,`false, 0,` -> `false, CLK_IS_CRITICAL,` > +K230_CLK_GATE_FORMAT(cpu0_noc_ddrcp4_gate, > + K230_CPU0_NOC_DDRCP4_GATE, > + 0x60, 7, 0, 0, > + &cpu0_src_rate.clk.hw); > + same as above,`0x60, 7, 0, 0,` -> `0x60, 7, CLK_IS_CRITICAL, 0,` > +K230_CLK_GATE_FORMAT(cpu0_apb_gate, > + K230_CPU0_APB_GATE, > + 0x0, 13, 0, 0, > + &pll0_div4.hw); > + same as above,`0x0, 13, 0, 0,` -> `0x0, 13, CLK_IS_CRITICAL, 0,` > +K230_CLK_RATE_FORMAT(cpu0_apb_rate, > + K230_CPU0_APB_RATE, > + 1, 1, 0, 0, > + 1, 8, 15, 0x7, > + 0x0, 31, div, 0x0, > + false, 0, > + &cpu0_apb_gate.clk.hw); > + same as above,`false, 0,` -> `false, CLK_IS_CRITICAL,` > +static const struct clk_parent_data k230_cpu1_src_mux_pdata[] = { > + { .hw = &pll0_div2.hw, }, > + { .hw = &pll3.hw, }, > + { .hw = &pll0.hw, }, > +}; > + > +K230_CLK_MUX_FORMAT(cpu1_src_mux, > + K230_CPU1_SRC_MUX, > + 0x4, 1, 0x3, > + 0, 0, > + k230_cpu1_src_mux_pdata); > + same as above,`0, 0,` -> `CLK_IS_CRITICAL, 0,` > +K230_CLK_GATE_FORMAT(cpu1_src_gate, > + K230_CPU1_SRC_GATE, > + 0x4, 0, CLK_IGNORE_UNUSED, 0, > + &cpu1_src_mux.clk.hw); > + same as above,`0x4, 0, CLK_IGNORE_UNUSED, 0,` -> `0x4, 0, CLK_IS_CRITICAL, 0,` > +K230_CLK_RATE_FORMAT(cpu1_src_rate, > + K230_CPU1_SRC_GATE, > + 1, 1, 0, 0, > + 1, 8, 3, 0x7, > + 0x4, 31, div, 0x0, > + false, 0, > + &cpu1_src_gate.clk.hw); > + same as above,`false, 0,` -> `false, CLK_IS_CRITICAL,` > +K230_CLK_RATE_FORMAT(cpu1_axi_rate, > + K230_CPU1_AXI_RATE, > + 1, 1, 0, 0, > + 1, 8, 12, 0x7, > + 0x4, 31, div, 0x0, > + false, 0, > + &cpu1_src_rate.clk.hw); > + same as above,`false, 0,` -> `false, CLK_IS_CRITICAL,` > +K230_CLK_GATE_FORMAT(cpu1_plic_gate, > + K230_CPU1_PLIC_GATE, > + 0x4, 15, CLK_IGNORE_UNUSED, 0, > + &cpu1_src_rate.clk.hw); > + same as above,`0x4, 15, CLK_IGNORE_UNUSED, 0,` -> `0x4, 15, CLK_IS_CRITICAL, 0,` > +K230_CLK_RATE_FORMAT(cpu1_plic_rate, > + K230_CPU1_PLIC_RATE, > + 1, 1, 0, 0, > + 1, 8, 16, 0x7, > + 0x4, 31, div, 0x0, > + false, 0, > + &cpu1_plic_gate.clk.hw); > + same as above,`false, 0,` -> `false, CLK_IS_CRITICAL,` > +K230_CLK_GATE_FORMAT(cpu1_apb_gate, > + K230_CPU1_APB_GATE, > + 0x4, 19, 0, 0, > + &pll0_div4.hw); > + same as above,`0x4, 19, 0, 0,` -> `0x4, 19, CLK_IS_CRITICAL, 0,` > +K230_CLK_RATE_FORMAT(cpu1_apb_rate, > + K230_CPU1_APB_RATE, > + 1, 1, 0, 0, > + 1, 8, 15, 0x7, > + 0x0, 31, div, 0x0, > + false, 0, > + &cpu1_apb_gate.clk.hw); > + same as above,`false, 0,` -> `false, CLK_IS_CRITICAL,` > +K230_CLK_GATE_FORMAT_PNAME(pmu_apb_gate, > + K230_PMU_APB_GATE, ... > +K230_CLK_GATE_FORMAT(hs_hclk_src_gate, > + K230_HS_HCLK_SRC_GATE, > + 0x18, 1, 0, 0, > + &hs_hclk_high_src_rate.clk.hw); > + Incorrect register bit setting (bit1) and wrong parent clock reference (hs_hclk_high_src_rate) for hs_hclk_src_gate, which does not comply with K230 hardware specifications. Here is correcting advice: Register bit correction: `0x18, 1, 0, 0,` -> `0x18, 0, 0, 0,` Parent clock correction: `&hs_hclk_high_src_rate.clk.hw` -> `&hs_hclk_high_gate.clk.hw` > +K230_CLK_RATE_FORMAT(hs_hclk_src_rate, > + K230_HS_HCLK_SRC_RATE, ... > +K230_CLK_RATE_FORMAT(hs_sd_card_src_rate, > + K230_HS_SD_CARD_SRC_RATE, > + 1, 1, 0, 0, > + 2, 8, 12, 0x7, > + 0x1C, 31, div, 0x0, > + false, 0, > + &pll0_div4.hw); > + The parent clock of hs_sd_card_src_rate is incorrectly pointed to pll0_div4. Here is correcting advice: `&pll0_div4.hw` → `&hs_sd_card_src_gate.clk.hw` > +K230_CLK_GATE_FORMAT(hs_sd0_card_gate, > + K230_HS_SD0_CARD_GATE, > + 0x18, 15, 0, 0, ... > + }, > + .probe = k230_clk_probe, > +}; > +builtin_platform_driver(k230_clk_driver); > > -- > 2.34.1 > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 34F21D711D6 for ; Fri, 19 Dec 2025 08:02:32 +0000 (UTC) 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:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=cPphzG7xiZQIBd7JBTvkFC7OykA1TYRDkE1Rg9fmjNo=; b=itZ4PBRCJeYafq unj8kTRIjHrV60Ss4A+A6//9+2ZrB4oQouKH9ALRMsguUU9zolAjb6KM6Hxd7cU0RkiC6gN9lkCRf gawldIl5v+VaUoReOoL73tWH6kHnb7hidCyNP+/0KdVKvBJ6mTMQLUlDJoaH+SKGXz3HYN84yW4VU jW2PumyYhAdIHIKeQEaSuC3Zu1QcNpvYvjkv5W/jVvEIgbwNxU0zIKquZkqPAH3Oakf5mI6f8ttxp yejk+7lcPA69V8HlukOqTsNWo2O+Lk/HFAdDJh7iNsFJQGF42FTQfh162ViLsXpkeskLDa4Xf0hAz W2hcRMwMU4Rfd2WdYIxA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1vWVRH-00000009n9m-3LxT; Fri, 19 Dec 2025 08:02:15 +0000 Received: from smtp21.cstnet.cn ([159.226.251.21] helo=cstnet.cn) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1vWVRF-00000009n9Q-0RsN for linux-riscv@lists.infradead.org; Fri, 19 Dec 2025 08:02:14 +0000 Received: from duge-virtual-machine (unknown [223.160.207.22]) by APP-01 (Coremail) with SMTP id qwCowACHLmp4BkVpRhwZAQ--.24049S2; Fri, 19 Dec 2025 16:02:03 +0800 (CST) Date: Fri, 19 Dec 2025 16:02:00 +0800 From: Jiayu Du To: Xukai Wang , Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Paul Walmsley , Palmer Dabbelt , Albert Ou , Conor Dooley Cc: linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org, Samuel Holland , Troy Mitchell Subject: Re: [PATCH v9 2/3] clk: canaan: Add clock driver for Canaan K230 Message-ID: References: <20251127-b4-k230-clk-v9-0-3aa09e17faf5@zohomail.com> <20251127-b4-k230-clk-v9-2-3aa09e17faf5@zohomail.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20251127-b4-k230-clk-v9-2-3aa09e17faf5@zohomail.com> X-CM-TRANSID: qwCowACHLmp4BkVpRhwZAQ--.24049S2 X-Coremail-Antispam: 1UD129KBjvJXoW3GrWkXr13XF18XryrJFWUurg_yoW7tr4kpr 1Yg34rAF4qyw13Ga1avw1UuF95KF48GF1qga4xW34rAF45GF9FgF1SgryIyF43XFy8C3yF qFyUt3yY93yjyaUanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUvvb7Iv0xC_tr1lb4IE77IF4wAFF20E14v26r4j6ryUM7CY07I2 0VC2zVCF04k26cxKx2IYs7xG6r1S6rWUM7CIcVAFz4kK6r1j6r18M28lY4IEw2IIxxk0rw A2F7IY1VAKz4vEj48ve4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_Jr0_JF4l84ACjcxK6xII jxv20xvEc7CjxVAFwI0_Gr0_Cr1l84ACjcxK6I8E87Iv67AKxVWUJVW8JwA2z4x0Y4vEx4 A2jsIEc7CjxVAFwI0_Gr0_Gr1UM2AIxVAIcxkEcVAq07x20xvEncxIr21l5I8CrVACY4xI 64kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r1j6r18McIj6I8E87Iv67AKxVWUJVW8Jw Am72CE4IkC6x0Yz7v_Jr0_Gr1lF7xvr2IY64vIr41lFIxGxcIEc7CjxVA2Y2ka0xkIwI1l c7CjxVAaw2AFwI0_Jw0_GFyl42xK82IYc2Ij64vIr41l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr 1lx2IqxVAqx4xG67AKxVWUJVWUGwC20s026x8GjcxK67AKxVWUGVWUWwC2zVAF1VAY17CE 14v26r4a6rW5MIIYrxkI7VAKI48JMIIF0xvE2Ix0cI8IcVAFwI0_Jr0_JF4lIxAIcVC0I7 IYx2IY6xkF7I0E14v26r4j6F4UMIIF0xvE42xK8VAvwI8IcIk0rVWUJVWUCwCI42IY6I8E 87Iv67AKxVWUJVW8JwCI42IY6I8E87Iv6xkF7I0E14v26r4j6r4UJbIYCTnIWIevJa73Uj IFyTuYvjxU2wIDUUUUU X-Originating-IP: [223.160.207.22] X-CM-SenderInfo: 5mld534oul2uny6l223fol2u1dvotugofq/ X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20251219_000213_528180_E0472D7C X-CRM114-Status: GOOD ( 16.29 ) X-BeenThere: linux-riscv@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-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org T24gVGh1LCBOb3YgMjcsIDIwMjUgYXQgMDg6NDU6MTNQTSArMDgwMCwgWHVrYWkgV2FuZyB3cm90 ZToKPiBUaGlzIHBhdGNoIHByb3ZpZGVzIGJhc2ljIHN1cHBvcnQgZm9yIHRoZSBLMjMwIGNsb2Nr LCB3aGljaCBjb3ZlcnMKPiBhbGwgY2xvY2tzIGluIEsyMzAgU29DLgo+IAo+IFRoZSBjbG9jayB0 cmVlIG9mIHRoZSBLMjMwIFNvQyBjb25zaXN0cyBvZiBhIDI0TUhaIGV4dGVybmFsIGNyeXN0YWwK PiBvc2NpbGxhdG9yLCBQTExzIGFuZCBhbiBleHRlcm5hbCBwdWxzZSBpbnB1dCBmb3IgdGltZXJY LCBhbmQgdGhlaXIKPiBkZXJpdmVkIGNsb2Nrcy4KPiAKPiBDby1kZXZlbG9wZWQtYnk6IFRyb3kg TWl0Y2hlbGwgPFRyb3lNaXRjaGVsbDk4OEBnbWFpbC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogVHJv eSBNaXRjaGVsbCA8VHJveU1pdGNoZWxsOTg4QGdtYWlsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBY dWthaSBXYW5nIDxraW5neHVrYWlAem9ob21haWwuY29tPgo+IC0tLQo+ICBkcml2ZXJzL2Nsay9L Y29uZmlnICAgIHwgICAgNiArCj4gIGRyaXZlcnMvY2xrL01ha2VmaWxlICAgfCAgICAxICsKPiAg ZHJpdmVycy9jbGsvY2xrLWsyMzAuYyB8IDI0NDMgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCj4gIDMgZmlsZXMgY2hhbmdlZCwgMjQ1MCBpbnNlcnRpb25z KCspCi4uLgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9jbGstazIzMC5jIGIvZHJpdmVycy9j bGsvY2xrLWsyMzAuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODc1MGU5Y2JhYzA0ZjMwZTMxZDhmMmViMzk1 YzliNDkwMjdjYTI3OAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2Nsay9jbGstazIz MC5jCj4gQEAgLTAsMCArMSwyNDQzIEBACi4uLgo+ICsKPiArSzIzMF9DTEtfR0FURV9GT1JNQVQo Y3B1MF9zcmNfZ2F0ZSwKPiArCQkgICAgIEsyMzBfQ1BVMF9TUkNfR0FURSwKPiArCQkgICAgIDAs IDAsIDAsIDAsCj4gKwkJICAgICAmcGxsMF9kaXYyLmh3KTsKCkNvcmUtcmVsYXRlZCBjbG9ja3Mg b2YgY3B1MC9jcHUxIChzcmMvcGxpYy9hcGIvbm9jX2RkcmNwNCwgZXRjLikKbGFjayBwcm90ZWN0 aW9uIGZsYWdzLCB3aGljaCByaXNrcyBhY2NpZGVudGFsIGRpc2FibGluZy4KClJlY29tbWVuZCB0 byByZXBsYWNlIHRoZSBmbGFnIGJpdHMgZm9yIGFsbCBDUFUwL0NQVTEgY29yZSBjbG9jawpub2Rl cyB3aXRoIGBDTEtfSVNfQ1JJVElDQUxgLGxpa2UgdGhpczoKYDAsIDAsIDAsIDAsYCAtPiBgMCwg MCwgQ0xLX0lTX0NSSVRJQ0FMLCAwLGAKCj4gKwo+ICtLMjMwX0NMS19SQVRFX0ZPUk1BVChjcHUw X3NyY19yYXRlLAo+ICsJCSAgICAgSzIzMF9DUFUwX1NSQ19SQVRFLAo+ICsJCSAgICAgMSwgMTYs IDEsIDB4RiwKPiArCQkgICAgIDE2LCAxNiwgMCwgMHgwLAo+ICsJCSAgICAgMHgwLCAzMSwgbXVs LCAweDAsCj4gKwkJICAgICBmYWxzZSwgMCwKPiArCQkgICAgICZjcHUwX3NyY19nYXRlLmNsay5o dyk7Cj4gKwpzYW1lIGFzIGFib3ZlLGBmYWxzZSwgMCxgIC0+YGZhbHNlLCBDTEtfSVNfQ1JJVElD QUwsYAo+ICtLMjMwX0NMS19SQVRFX0ZPUk1BVChjcHUwX2F4aV9yYXRlLAo+ICsJCSAgICAgSzIz MF9DUFUwX0FYSV9SQVRFLAo+ICsJCSAgICAgMSwgMSwgMCwgMCwKPiArCQkgICAgIDEsIDgsIDYs IDB4NywKPiArCQkgICAgIDB4MCwgMzEsIGRpdiwgMHgwLAo+ICsJCSAgICAgMCwgMCwKPiArCQkg ICAgICZjcHUwX3NyY19yYXRlLmNsay5odyk7Cj4gKwpzYW1lIGFzIGFib3ZlLGAwLCAwLGAgLT5g MCwgQ0xLX0lTX0NSSVRJQ0FMLGAKPiArSzIzMF9DTEtfR0FURV9GT1JNQVQoY3B1MF9wbGljX2dh dGUsCj4gKwkJICAgICBLMjMwX0NQVTBfUExJQ19HQVRFLAo+ICsJCSAgICAgMHgwLCA5LCAwLCAw LAo+ICsJCSAgICAgJmNwdTBfc3JjX3JhdGUuY2xrLmh3KTsKPiArCnNhbWUgYXMgYWJvdmUsYDB4 MCwgOSwgMCwgMCxgIC0+IGAweDAsIDksIENMS19JU19DUklUSUNBTCwgMCxgCj4gK0syMzBfQ0xL X1JBVEVfRk9STUFUKGNwdTBfcGxpY19yYXRlLAo+ICsJCSAgICAgSzIzMF9DUFUwX1BMSUNfUkFU RSwKPiArCQkgICAgIDEsIDEsIDAsIDAsCj4gKwkJICAgICAxLCA4LCAxMCwgMHg3LAo+ICsJCSAg ICAgMHgwLCAzMSwgZGl2LCAweDAsCj4gKwkJICAgICBmYWxzZSwgMCwKPiArCQkgICAgICZjcHUw X3BsaWNfZ2F0ZS5jbGsuaHcpOwo+ICsKc2FtZSBhcyBhYm92ZSxgZmFsc2UsIDAsYCAtPiBgZmFs c2UsIENMS19JU19DUklUSUNBTCxgCj4gK0syMzBfQ0xLX0dBVEVfRk9STUFUKGNwdTBfbm9jX2Rk cmNwNF9nYXRlLAo+ICsJCSAgICAgSzIzMF9DUFUwX05PQ19ERFJDUDRfR0FURSwKPiArCQkgICAg IDB4NjAsIDcsIDAsIDAsCj4gKwkJICAgICAmY3B1MF9zcmNfcmF0ZS5jbGsuaHcpOwo+ICsKc2Ft ZSBhcyBhYm92ZSxgMHg2MCwgNywgMCwgMCxgIC0+IGAweDYwLCA3LCBDTEtfSVNfQ1JJVElDQUws IDAsYAo+ICtLMjMwX0NMS19HQVRFX0ZPUk1BVChjcHUwX2FwYl9nYXRlLAo+ICsJCSAgICAgSzIz MF9DUFUwX0FQQl9HQVRFLAo+ICsJCSAgICAgMHgwLCAxMywgMCwgMCwKPiArCQkgICAgICZwbGww X2RpdjQuaHcpOwo+ICsKc2FtZSBhcyBhYm92ZSxgMHgwLCAxMywgMCwgMCxgIC0+IGAweDAsIDEz LCBDTEtfSVNfQ1JJVElDQUwsIDAsYAo+ICtLMjMwX0NMS19SQVRFX0ZPUk1BVChjcHUwX2FwYl9y YXRlLAo+ICsJCSAgICAgSzIzMF9DUFUwX0FQQl9SQVRFLAo+ICsJCSAgICAgMSwgMSwgMCwgMCwK PiArCQkgICAgIDEsIDgsIDE1LCAweDcsCj4gKwkJICAgICAweDAsIDMxLCBkaXYsIDB4MCwKPiAr CQkgICAgIGZhbHNlLCAwLAo+ICsJCSAgICAgJmNwdTBfYXBiX2dhdGUuY2xrLmh3KTsKPiArCnNh bWUgYXMgYWJvdmUsYGZhbHNlLCAwLGAgLT4gYGZhbHNlLCBDTEtfSVNfQ1JJVElDQUwsYAo+ICtz dGF0aWMgY29uc3Qgc3RydWN0IGNsa19wYXJlbnRfZGF0YSBrMjMwX2NwdTFfc3JjX211eF9wZGF0 YVtdID0gewo+ICsJeyAuaHcgPSAmcGxsMF9kaXYyLmh3LCB9LAo+ICsJeyAuaHcgPSAmcGxsMy5o dywgfSwKPiArCXsgLmh3ID0gJnBsbDAuaHcsIH0sCj4gK307Cj4gKwo+ICtLMjMwX0NMS19NVVhf Rk9STUFUKGNwdTFfc3JjX211eCwKPiArCQkgICAgSzIzMF9DUFUxX1NSQ19NVVgsCj4gKwkJICAg IDB4NCwgMSwgMHgzLAo+ICsJCSAgICAwLCAwLAo+ICsJCSAgICBrMjMwX2NwdTFfc3JjX211eF9w ZGF0YSk7Cj4gKwpzYW1lIGFzIGFib3ZlLGAwLCAwLGAgLT4gYENMS19JU19DUklUSUNBTCwgMCxg Cj4gK0syMzBfQ0xLX0dBVEVfRk9STUFUKGNwdTFfc3JjX2dhdGUsCj4gKwkJICAgICBLMjMwX0NQ VTFfU1JDX0dBVEUsCj4gKwkJICAgICAweDQsIDAsIENMS19JR05PUkVfVU5VU0VELCAwLAo+ICsJ CSAgICAgJmNwdTFfc3JjX211eC5jbGsuaHcpOwo+ICsKc2FtZSBhcyBhYm92ZSxgMHg0LCAwLCBD TEtfSUdOT1JFX1VOVVNFRCwgMCxgIC0+IGAweDQsIDAsIENMS19JU19DUklUSUNBTCwgMCxgCj4g K0syMzBfQ0xLX1JBVEVfRk9STUFUKGNwdTFfc3JjX3JhdGUsCj4gKwkJICAgICBLMjMwX0NQVTFf U1JDX0dBVEUsCj4gKwkJICAgICAxLCAxLCAwLCAwLAo+ICsJCSAgICAgMSwgOCwgMywgMHg3LAo+ ICsJCSAgICAgMHg0LCAzMSwgZGl2LCAweDAsCj4gKwkJICAgICBmYWxzZSwgMCwKPiArCQkgICAg ICZjcHUxX3NyY19nYXRlLmNsay5odyk7Cj4gKwpzYW1lIGFzIGFib3ZlLGBmYWxzZSwgMCxgIC0+ IGBmYWxzZSwgQ0xLX0lTX0NSSVRJQ0FMLGAKPiArSzIzMF9DTEtfUkFURV9GT1JNQVQoY3B1MV9h eGlfcmF0ZSwKPiArCQkgICAgIEsyMzBfQ1BVMV9BWElfUkFURSwKPiArCQkgICAgIDEsIDEsIDAs IDAsCj4gKwkJICAgICAxLCA4LCAxMiwgMHg3LAo+ICsJCSAgICAgMHg0LCAzMSwgZGl2LCAweDAs Cj4gKwkJICAgICBmYWxzZSwgMCwKPiArCQkgICAgICZjcHUxX3NyY19yYXRlLmNsay5odyk7Cj4g KwpzYW1lIGFzIGFib3ZlLGBmYWxzZSwgMCxgIC0+IGBmYWxzZSwgQ0xLX0lTX0NSSVRJQ0FMLGAK PiArSzIzMF9DTEtfR0FURV9GT1JNQVQoY3B1MV9wbGljX2dhdGUsCj4gKwkJICAgICBLMjMwX0NQ VTFfUExJQ19HQVRFLAo+ICsJCSAgICAgMHg0LCAxNSwgQ0xLX0lHTk9SRV9VTlVTRUQsIDAsCj4g KwkJICAgICAmY3B1MV9zcmNfcmF0ZS5jbGsuaHcpOwo+ICsKc2FtZSBhcyBhYm92ZSxgMHg0LCAx NSwgQ0xLX0lHTk9SRV9VTlVTRUQsIDAsYCAtPiBgMHg0LCAxNSwgQ0xLX0lTX0NSSVRJQ0FMLCAw LGAKPiArSzIzMF9DTEtfUkFURV9GT1JNQVQoY3B1MV9wbGljX3JhdGUsCj4gKwkJICAgICBLMjMw X0NQVTFfUExJQ19SQVRFLAo+ICsJCSAgICAgMSwgMSwgMCwgMCwKPiArCQkgICAgIDEsIDgsIDE2 LCAweDcsCj4gKwkJICAgICAweDQsIDMxLCBkaXYsIDB4MCwKPiArCQkgICAgIGZhbHNlLCAwLAo+ ICsJCSAgICAgJmNwdTFfcGxpY19nYXRlLmNsay5odyk7Cj4gKwpzYW1lIGFzIGFib3ZlLGBmYWxz ZSwgMCxgIC0+IGBmYWxzZSwgQ0xLX0lTX0NSSVRJQ0FMLGAKPiArSzIzMF9DTEtfR0FURV9GT1JN QVQoY3B1MV9hcGJfZ2F0ZSwKPiArCQkgICAgIEsyMzBfQ1BVMV9BUEJfR0FURSwKPiArCQkgICAg IDB4NCwgMTksIDAsIDAsCj4gKwkJICAgICAmcGxsMF9kaXY0Lmh3KTsKPiArCnNhbWUgYXMgYWJv dmUsYDB4NCwgMTksIDAsIDAsYCAtPiBgMHg0LCAxOSwgQ0xLX0lTX0NSSVRJQ0FMLCAwLGAKPiAr SzIzMF9DTEtfUkFURV9GT1JNQVQoY3B1MV9hcGJfcmF0ZSwKPiArCQkgICAgIEsyMzBfQ1BVMV9B UEJfUkFURSwKPiArCQkgICAgIDEsIDEsIDAsIDAsCj4gKwkJICAgICAxLCA4LCAxNSwgMHg3LAo+ ICsJCSAgICAgMHgwLCAzMSwgZGl2LCAweDAsCj4gKwkJICAgICBmYWxzZSwgMCwKPiArCQkgICAg ICZjcHUxX2FwYl9nYXRlLmNsay5odyk7Cj4gKwpzYW1lIGFzIGFib3ZlLGBmYWxzZSwgMCxgIC0+ IGBmYWxzZSwgQ0xLX0lTX0NSSVRJQ0FMLGAKPiArSzIzMF9DTEtfR0FURV9GT1JNQVRfUE5BTUUo cG11X2FwYl9nYXRlLAo+ICsJCQkgICBLMjMwX1BNVV9BUEJfR0FURSwKLi4uCj4gK0syMzBfQ0xL X0dBVEVfRk9STUFUKGhzX2hjbGtfc3JjX2dhdGUsCj4gKwkJICAgICBLMjMwX0hTX0hDTEtfU1JD X0dBVEUsCj4gKwkJICAgICAweDE4LCAxLCAwLCAwLAo+ICsJCSAgICAgJmhzX2hjbGtfaGlnaF9z cmNfcmF0ZS5jbGsuaHcpOwo+ICsKCkluY29ycmVjdCByZWdpc3RlciBiaXQgc2V0dGluZyAoYml0 MSkgYW5kIHdyb25nIHBhcmVudApjbG9jayByZWZlcmVuY2UgKGhzX2hjbGtfaGlnaF9zcmNfcmF0 ZSkgZm9yIGhzX2hjbGtfc3JjX2dhdGUsCndoaWNoIGRvZXMgbm90IGNvbXBseSB3aXRoIEsyMzAg aGFyZHdhcmUgc3BlY2lmaWNhdGlvbnMuCkhlcmUgaXMgY29ycmVjdGluZyBhZHZpY2U6ClJlZ2lz dGVyIGJpdCBjb3JyZWN0aW9uOiBgMHgxOCwgMSwgMCwgMCxgIC0+IGAweDE4LCAwLCAwLCAwLGAK UGFyZW50IGNsb2NrIGNvcnJlY3Rpb246IGAmaHNfaGNsa19oaWdoX3NyY19yYXRlLmNsay5od2Ag LT4KYCZoc19oY2xrX2hpZ2hfZ2F0ZS5jbGsuaHdgCgo+ICtLMjMwX0NMS19SQVRFX0ZPUk1BVCho c19oY2xrX3NyY19yYXRlLAo+ICsJCSAgICAgSzIzMF9IU19IQ0xLX1NSQ19SQVRFLAouLi4KPiAr SzIzMF9DTEtfUkFURV9GT1JNQVQoaHNfc2RfY2FyZF9zcmNfcmF0ZSwKPiArCQkgICAgIEsyMzBf SFNfU0RfQ0FSRF9TUkNfUkFURSwKPiArCQkgICAgIDEsIDEsIDAsIDAsCj4gKwkJICAgICAyLCA4 LCAxMiwgMHg3LAo+ICsJCSAgICAgMHgxQywgMzEsIGRpdiwgMHgwLAo+ICsJCSAgICAgZmFsc2Us IDAsCj4gKwkJICAgICAmcGxsMF9kaXY0Lmh3KTsKPiArCgpUaGUgcGFyZW50IGNsb2NrIG9mIGhz X3NkX2NhcmRfc3JjX3JhdGUgaXMgaW5jb3JyZWN0bHkgcG9pbnRlZAp0byBwbGwwX2RpdjQuCkhl cmUgaXMgY29ycmVjdGluZyBhZHZpY2U6CmAmcGxsMF9kaXY0Lmh3YCDihpIgYCZoc19zZF9jYXJk X3NyY19nYXRlLmNsay5od2AKCj4gK0syMzBfQ0xLX0dBVEVfRk9STUFUKGhzX3NkMF9jYXJkX2dh dGUsCj4gKwkJICAgICBLMjMwX0hTX1NEMF9DQVJEX0dBVEUsCj4gKwkJICAgICAweDE4LCAxNSwg MCwgMCwKLi4uCj4gKwl9LAo+ICsJLnByb2JlID0gazIzMF9jbGtfcHJvYmUsCj4gK307Cj4gK2J1 aWx0aW5fcGxhdGZvcm1fZHJpdmVyKGsyMzBfY2xrX2RyaXZlcik7Cj4gCj4gLS0gCj4gMi4zNC4x Cj4gCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGlu dXgtcmlzY3YgbWFpbGluZyBsaXN0CmxpbnV4LXJpc2N2QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0 cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1yaXNjdgo=