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=-17.6 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=unavailable 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 5628DC433DF for ; Wed, 26 Aug 2020 16:49:02 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2F1842074A for ; Wed, 26 Aug 2020 16:49:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1598460542; bh=yZgbKeK550Ec9M0lv16IxpZpTIhoJWYSwu6TgQiJPj4=; h=Date:From:To:Cc:Subject:References:In-Reply-To:List-ID:From; b=sJRjKMGSCBMBkV+QbFSDcvr2OfvR56qF0+YeJ/j0GJmrr8ZCvL5VyencHJntz6RtF HKeptiYC8WCC6CwBVl2czGZja1EvPnPAkRM83WcGC5OEiJORzzSHyGSKWZCijorKLB oNvvZV8kk6VGQB4ZR3HC7i7faXLK4DhDwos0ijps= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727889AbgHZQsq convert rfc822-to-8bit (ORCPT ); Wed, 26 Aug 2020 12:48:46 -0400 Received: from mail-ed1-f67.google.com ([209.85.208.67]:37992 "EHLO mail-ed1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727776AbgHZQpj (ORCPT ); Wed, 26 Aug 2020 12:45:39 -0400 Received: by mail-ed1-f67.google.com with SMTP id b2so2325625edw.5; Wed, 26 Aug 2020 09:45:37 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to:user-agent; bh=VcpR9KHDU061Xv9zuvEUeTLNw9aF0vug7DDIpypunYI=; b=qc88HgN4gEDB1GZFa7LnH/4zVqz+w2yyCgwbk0VZNqmHXEg3xyBrFZycuXXzY8wPdN o2O5bRplEB/UkdvLL9dRTCvwoS9V4iGbqXl9bXuNJm+wk+aW+6juF21Vq6/QiBlqtBGm YgxhBQ3vyNAoSAok41E3yyDDK3FZIdOm1+AB6zMZgWBSCQKE6VINN3E3W6PGH8zbUsf8 PXGKD3eSDeTU6i4QPMfio53/FApU2V8V6oAIXldZSnxWsdTuat9wrv9AROpue8tL2fqh pT8Ncv5/RAkGeW62co2N1DMSVudwQWK8boUwjGOCUS0mzBJqI1KfFex/P9kGn2irc0rv helQ== X-Gm-Message-State: AOAM530ZPmk4PKEKDrGRlEjpVS5BbjNS/ffyiAsELuUj1SF2Lma92Ll3 127N+XuFjDCxN0G2yzxWCsU= X-Google-Smtp-Source: ABdhPJzNZvG8R0iGqLLI9Osb88KuUk8+rAMTgLpfwJZTkp1b9hrm1Bu1P1MhhqYt3+HlwwHi7Y0p3A== X-Received: by 2002:a05:6402:1a46:: with SMTP id bf6mr15632175edb.284.1598460336278; Wed, 26 Aug 2020 09:45:36 -0700 (PDT) Received: from kozik-lap ([194.230.155.216]) by smtp.googlemail.com with ESMTPSA id s24sm2722569ejx.15.2020.08.26.09.45.35 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Wed, 26 Aug 2020 09:45:35 -0700 (PDT) Date: Wed, 26 Aug 2020 18:45:33 +0200 From: Krzysztof Kozlowski To: Lukasz Stelmach Cc: "David S. Miller" , Jakub Kicinski , Kukjin Kim , Rob Herring , Russell King , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-samsung-soc@vger.kernel.org, netdev@vger.kernel.org, devicetree@vger.kernel.org, m.szyprowski@samsung.com, b.zolnierkie@samsung.com Subject: Re: [PATCH 1/3] net: ax88796c: ASIX AX88796C SPI Ethernet Adapter Driver Message-ID: <20200826164533.GC31748@kozik-lap> References: <20200825184413.GA2693@kozik-lap> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8BIT In-Reply-To: User-Agent: Mutt/1.9.4 (2018-02-28) Sender: linux-samsung-soc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org On Wed, Aug 26, 2020 at 04:59:09PM +0200, Lukasz Stelmach wrote: > It was <2020-08-25 wto 20:44>, when Krzysztof Kozlowski wrote: > > On Tue, Aug 25, 2020 at 07:03:09PM +0200, Łukasz Stelmach wrote: > >> ASIX AX88796[1] is a versatile ethernet adapter chip, that can be > >> connected to a CPU with a 8/16-bit bus or with an SPI. This driver > >> supports SPI connection. > >> > >> The driver has been ported from the vendor kernel for ARTIK5[2] > >> boards. Several changes were made to adapt it to the current kernel > >> which include: > >> > >> + updated DT configuration, > >> + clock configuration moved to DT, > >> + new timer, ethtool and gpio APIs > >> + dev_* instead of pr_* and custom printk() wrappers. > >> > >> [1] https://protect2.fireeye.com/v1/url?k=074e9e9d-5a9dc212-074f15d2-0cc47a31ce52-0f896a3d08738907&q=1&e=bcaebfa2-4f00-46b6-a35d-096f39710f47&u=https%3A%2F%2Fwww.asix.com.tw%2Fproducts.php%3Fop%3DpItemdetail%26PItemID%3D104%3B65%3B86%26PLine%3D65 > >> [2] https://protect2.fireeye.com/v1/url?k=553869ec-08eb3563-5539e2a3-0cc47a31ce52-fc42424019c6fd8f&q=1&e=bcaebfa2-4f00-46b6-a35d-096f39710f47&u=https%3A%2F%2Fgit.tizen.org%2Fcgit%2Fprofile%2Fcommon%2Fplatform%2Fkernel%2Flinux-3.10-artik%2F > >> > >> The other ax88796 driver is for NE2000 compatible AX88796L chip. These > >> chips are not compatible. Hence, two separate drivers are required. > > > > Hi, > > > > Thanks for the driver, nice work. Few comments below. > > > > Thank you. I fixed most problems and asked some question where I didn't > understand. > > >> > >> Signed-off-by: Łukasz Stelmach > >> --- > >> drivers/net/ethernet/Kconfig | 1 + > >> drivers/net/ethernet/Makefile | 1 + > >> drivers/net/ethernet/asix/Kconfig | 20 + > >> drivers/net/ethernet/asix/Makefile | 6 + > >> drivers/net/ethernet/asix/ax88796c_ioctl.c | 293 +++++ > >> drivers/net/ethernet/asix/ax88796c_ioctl.h | 21 + > >> drivers/net/ethernet/asix/ax88796c_main.c | 1373 ++++++++++++++++++++ > >> drivers/net/ethernet/asix/ax88796c_main.h | 596 +++++++++ > >> drivers/net/ethernet/asix/ax88796c_spi.c | 103 ++ > >> drivers/net/ethernet/asix/ax88796c_spi.h | 67 + > >> 10 files changed, 2481 insertions(+) > >> create mode 100644 drivers/net/ethernet/asix/Kconfig > >> create mode 100644 drivers/net/ethernet/asix/Makefile > >> create mode 100644 drivers/net/ethernet/asix/ax88796c_ioctl.c > >> create mode 100644 drivers/net/ethernet/asix/ax88796c_ioctl.h > >> create mode 100644 drivers/net/ethernet/asix/ax88796c_main.c > >> create mode 100644 drivers/net/ethernet/asix/ax88796c_main.h > >> create mode 100644 drivers/net/ethernet/asix/ax88796c_spi.c > >> create mode 100644 drivers/net/ethernet/asix/ax88796c_spi.h > >> > >> diff --git a/drivers/net/ethernet/Kconfig b/drivers/net/ethernet/Kconfig > >> index de50e8b9e656..f3b218e45ea5 100644 > >> --- a/drivers/net/ethernet/Kconfig > >> +++ b/drivers/net/ethernet/Kconfig > >> @@ -32,6 +32,7 @@ source "drivers/net/ethernet/apm/Kconfig" > >> source "drivers/net/ethernet/apple/Kconfig" > >> source "drivers/net/ethernet/aquantia/Kconfig" > >> source "drivers/net/ethernet/arc/Kconfig" > >> +source "drivers/net/ethernet/asix/Kconfig" > >> source "drivers/net/ethernet/atheros/Kconfig" > >> source "drivers/net/ethernet/aurora/Kconfig" > >> source "drivers/net/ethernet/broadcom/Kconfig" > >> diff --git a/drivers/net/ethernet/Makefile b/drivers/net/ethernet/Makefile > >> index f8f38dcb5f8a..9eb368d93607 100644 > >> --- a/drivers/net/ethernet/Makefile > >> +++ b/drivers/net/ethernet/Makefile > >> @@ -18,6 +18,7 @@ obj-$(CONFIG_NET_XGENE) += apm/ > >> obj-$(CONFIG_NET_VENDOR_APPLE) += apple/ > >> obj-$(CONFIG_NET_VENDOR_AQUANTIA) += aquantia/ > >> obj-$(CONFIG_NET_VENDOR_ARC) += arc/ > >> +obj-$(CONFIG_NET_VENDOR_ASIX) += asix/ > >> obj-$(CONFIG_NET_VENDOR_ATHEROS) += atheros/ > >> obj-$(CONFIG_NET_VENDOR_AURORA) += aurora/ > >> obj-$(CONFIG_NET_VENDOR_CADENCE) += cadence/ > >> diff --git a/drivers/net/ethernet/asix/Kconfig b/drivers/net/ethernet/asix/Kconfig > >> new file mode 100644 > >> index 000000000000..4b127a4a659a > >> --- /dev/null > >> +++ b/drivers/net/ethernet/asix/Kconfig > >> @@ -0,0 +1,20 @@ > >> +# > >> +# Asix network device configuration > >> +# > >> + > >> +config NET_VENDOR_ASIX > >> + bool "Asix devices" > >> + depends on SPI > >> + help > >> + If you have a network (Ethernet) interface based on a chip from ASIX, say Y > > > > Looks like too long, did it pass checkpatch? > > Yes? Let me try again. Yes, this one passed, but I missed a few other > problems. Thank you. I noticed that now the limit is 100 when improves readability, so this one is good. (...) > >> + > >> +u8 ax88796c_check_power(struct ax88796c_device *ax_local) > > > > Looks here like pointer to const. Unless it is because of > > AX_READ_STATUS() which cannot take const? > > It can. I changed other stuff in ax88796c_spi.[hc] to const too. > > >> +{ > > > > Please put file-scope definitions first, so this should go to the end. > > I don't understand. Functions and variables which (file scope) are static go to the beginning of file. Ones visible externally (non static), go after them. (...) > >> + > >> + AX_WRITE(&ax_local->ax_spi, rx_ctl, P2_RXCR); > >> + > > > > No need for empty line. > > > > Fixed. > > >> +} > >> + > >> +#if 0 > > > > Please comment why it is commented out. > > > > Always has been (-; This is how it came from the vendor I missed it when > I focused on making things work. I will investigate it and either > uncomment or remove it. Then just remove it. (...) > >> +#include > >> +#endif > >> +#include > >> +#include > >> +#include > >> +#include > >> +#include > >> +#include > >> +#include > >> +#include > >> +#include > >> +#include > >> +#include > >> +#include > >> +#include > >> +#include > >> +#include > >> +#include > >> +#include > >> +#include > > > > All of these should be removed except the headers used directly in this > > header. > > > > This is "private" header file included in all ax88796c_*.c files and > these are headers required in them. It seems more conveninet to have > them all listed in one place. What is the reason to do otherwise? Because: 1. The header is included in other files (more than one) so each other compilation unit will include all these headers, while not all of them need. This has a performance penalty during preprocessing. 2. You will loose the track which headers are needed, which are not. We tend to keep it local, which means each compilation unit includes stuff it needs. This helps removing obsolete includes later. 3. Otherwise you could make one header, including all headers of Linux, and then include this one header in each of C files. One to rule them all. Best regards, Krzysztof 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=-17.5 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,INCLUDES_PATCH,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 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 03C4CC433E1 for ; Wed, 26 Aug 2020 16:47:20 +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 B68912074A for ; Wed, 26 Aug 2020 16:47:19 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="w9M+Jlrn" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B68912074A 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:In-Reply-To:MIME-Version:References:Message-ID: Subject: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=KWzSe2/c+h30rluuYe/gVx0QJjB+adNEHFyKXe4x/2U=; b=w9M+Jlrn9KpGquwhmRWvww68H 6pSNBbjLUgZCU/GNgNN9M0OALKbDqu3IL63n4UkCDCAsLo+K+bNBFlR6lZgKej3eWaToA0L0Jg9q9 NadEmSLtAcguwmXScz8ZgolIfGb9cXzmK4TPguWcaKMjOw+9FVbtPHd43va1ylBOrdvjr+EPnQHT/ X8IJGeRb3aFF7iVGVYwPzTq6iWmMWDn7e36FAfT6KD/BDFhBsbGsGhLdg7AKYf/cW4dKiRkmKBpEL gpaRVgsPR7nyxxg8tfN3Amxc4hiGbH5BQDb6cP78//oRlrnd8CD3ZYyvHAa+7GWJpwA3v4NouTVxM KDaJXb9UA==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kAyYO-0007oi-Ku; Wed, 26 Aug 2020 16:45:40 +0000 Received: from mail-ed1-f65.google.com ([209.85.208.65]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kAyYL-0007o9-Pn for linux-arm-kernel@lists.infradead.org; Wed, 26 Aug 2020 16:45:39 +0000 Received: by mail-ed1-f65.google.com with SMTP id q21so1117414edv.1 for ; Wed, 26 Aug 2020 09:45:37 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to:user-agent; bh=VcpR9KHDU061Xv9zuvEUeTLNw9aF0vug7DDIpypunYI=; b=MVABLzZDOEd+l32SzqUosvlLZmTBavXmc+SFEpVpXHSwXsf7/E8BZNGdcWCrQDNAxf m7GS82qlG4snMxRN1rm+EULbPx+Q4SWsALYAQcWevfziLnpzVPfTgrBsx9NB1ueWnIId kjjqWNn0l4Ls6fjGwhdMx5lNdHXzjUVBe+y5qXEmh1+ZNUdy+Pljfh/+UtcDBI0OPDzO lGdxQGxcNrJZzBswPeAz8XaamteN/0doYQ5On38NLC9trN3dYvCPJpTdsb1nQjEMSE2G kezy9iIgI8Ja3F24k3N6+N4JVfs4KB5BGSncp3spuS03aqV1SKZhCceGcxb42D43mDZn 74mA== X-Gm-Message-State: AOAM532Ln6fkck5xT+nRPEkL2BPKCE1eU8sZ8Mlfx3lflNC/6s+d0ume PvW2FCi1pOzMGysOqDUucUY= X-Google-Smtp-Source: ABdhPJzNZvG8R0iGqLLI9Osb88KuUk8+rAMTgLpfwJZTkp1b9hrm1Bu1P1MhhqYt3+HlwwHi7Y0p3A== X-Received: by 2002:a05:6402:1a46:: with SMTP id bf6mr15632175edb.284.1598460336278; Wed, 26 Aug 2020 09:45:36 -0700 (PDT) Received: from kozik-lap ([194.230.155.216]) by smtp.googlemail.com with ESMTPSA id s24sm2722569ejx.15.2020.08.26.09.45.35 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Wed, 26 Aug 2020 09:45:35 -0700 (PDT) Date: Wed, 26 Aug 2020 18:45:33 +0200 From: Krzysztof Kozlowski To: Lukasz Stelmach Subject: Re: [PATCH 1/3] net: ax88796c: ASIX AX88796C SPI Ethernet Adapter Driver Message-ID: <20200826164533.GC31748@kozik-lap> References: <20200825184413.GA2693@kozik-lap> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.9.4 (2018-02-28) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200826_124537_888453_A64CFF2D X-CRM114-Status: GOOD ( 40.26 ) 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: devicetree@vger.kernel.org, linux-samsung-soc@vger.kernel.org, b.zolnierkie@samsung.com, netdev@vger.kernel.org, Russell King , Rob Herring , linux-kernel@vger.kernel.org, Kukjin Kim , Jakub Kicinski , "David S. Miller" , linux-arm-kernel@lists.infradead.org, m.szyprowski@samsung.com 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 T24gV2VkLCBBdWcgMjYsIDIwMjAgYXQgMDQ6NTk6MDlQTSArMDIwMCwgTHVrYXN6IFN0ZWxtYWNo IHdyb3RlOgo+IEl0IHdhcyA8MjAyMC0wOC0yNSB3dG8gMjA6NDQ+LCB3aGVuIEtyenlzenRvZiBL b3psb3dza2kgd3JvdGU6Cj4gPiBPbiBUdWUsIEF1ZyAyNSwgMjAyMCBhdCAwNzowMzowOVBNICsw MjAwLCDFgXVrYXN6IFN0ZWxtYWNoIHdyb3RlOgo+ID4+IEFTSVggQVg4ODc5NlsxXSBpcyBhIHZl cnNhdGlsZSBldGhlcm5ldCBhZGFwdGVyIGNoaXAsIHRoYXQgY2FuIGJlCj4gPj4gY29ubmVjdGVk IHRvIGEgQ1BVIHdpdGggYSA4LzE2LWJpdCBidXMgb3Igd2l0aCBhbiBTUEkuIFRoaXMgZHJpdmVy Cj4gPj4gc3VwcG9ydHMgU1BJIGNvbm5lY3Rpb24uCj4gPj4gCj4gPj4gVGhlIGRyaXZlciBoYXMg YmVlbiBwb3J0ZWQgZnJvbSB0aGUgdmVuZG9yIGtlcm5lbCBmb3IgQVJUSUs1WzJdCj4gPj4gYm9h cmRzLiBTZXZlcmFsIGNoYW5nZXMgd2VyZSBtYWRlIHRvIGFkYXB0IGl0IHRvIHRoZSBjdXJyZW50 IGtlcm5lbAo+ID4+IHdoaWNoIGluY2x1ZGU6Cj4gPj4gCj4gPj4gKyB1cGRhdGVkIERUIGNvbmZp Z3VyYXRpb24sCj4gPj4gKyBjbG9jayBjb25maWd1cmF0aW9uIG1vdmVkIHRvIERULAo+ID4+ICsg bmV3IHRpbWVyLCBldGh0b29sIGFuZCBncGlvIEFQSXMKPiA+PiArIGRldl8qIGluc3RlYWQgb2Yg cHJfKiBhbmQgY3VzdG9tIHByaW50aygpIHdyYXBwZXJzLgo+ID4+IAo+ID4+IFsxXSBodHRwczov L3Byb3RlY3QyLmZpcmVleWUuY29tL3YxL3VybD9rPTA3NGU5ZTlkLTVhOWRjMjEyLTA3NGYxNWQy LTBjYzQ3YTMxY2U1Mi0wZjg5NmEzZDA4NzM4OTA3JnE9MSZlPWJjYWViZmEyLTRmMDAtNDZiNi1h MzVkLTA5NmYzOTcxMGY0NyZ1PWh0dHBzJTNBJTJGJTJGd3d3LmFzaXguY29tLnR3JTJGcHJvZHVj dHMucGhwJTNGb3AlM0RwSXRlbWRldGFpbCUyNlBJdGVtSUQlM0QxMDQlM0I2NSUzQjg2JTI2UExp bmUlM0Q2NQo+ID4+IFsyXSBodHRwczovL3Byb3RlY3QyLmZpcmVleWUuY29tL3YxL3VybD9rPTU1 Mzg2OWVjLTA4ZWIzNTYzLTU1MzllMmEzLTBjYzQ3YTMxY2U1Mi1mYzQyNDI0MDE5YzZmZDhmJnE9 MSZlPWJjYWViZmEyLTRmMDAtNDZiNi1hMzVkLTA5NmYzOTcxMGY0NyZ1PWh0dHBzJTNBJTJGJTJG Z2l0LnRpemVuLm9yZyUyRmNnaXQlMkZwcm9maWxlJTJGY29tbW9uJTJGcGxhdGZvcm0lMkZrZXJu ZWwlMkZsaW51eC0zLjEwLWFydGlrJTJGCj4gPj4gCj4gPj4gVGhlIG90aGVyIGF4ODg3OTYgZHJp dmVyIGlzIGZvciBORTIwMDAgY29tcGF0aWJsZSBBWDg4Nzk2TCBjaGlwLiBUaGVzZQo+ID4+IGNo aXBzIGFyZSBub3QgY29tcGF0aWJsZS4gSGVuY2UsIHR3byBzZXBhcmF0ZSBkcml2ZXJzIGFyZSBy ZXF1aXJlZC4KPiA+Cj4gPiBIaSwKPiA+Cj4gPiBUaGFua3MgZm9yIHRoZSBkcml2ZXIsIG5pY2Ug d29yay4gRmV3IGNvbW1lbnRzIGJlbG93Lgo+ID4KPiAKPiBUaGFuayB5b3UuIEkgZml4ZWQgbW9z dCBwcm9ibGVtcyBhbmQgYXNrZWQgc29tZSBxdWVzdGlvbiB3aGVyZSBJIGRpZG4ndAo+IHVuZGVy c3RhbmQuCj4gCj4gPj4gCj4gPj4gU2lnbmVkLW9mZi1ieTogxYF1a2FzeiBTdGVsbWFjaCA8bC5z dGVsbWFjaEBzYW1zdW5nLmNvbT4KPiA+PiAtLS0KPiA+PiAgZHJpdmVycy9uZXQvZXRoZXJuZXQv S2NvbmZpZyAgICAgICAgICAgICAgIHwgICAgMSArCj4gPj4gIGRyaXZlcnMvbmV0L2V0aGVybmV0 L01ha2VmaWxlICAgICAgICAgICAgICB8ICAgIDEgKwo+ID4+ICBkcml2ZXJzL25ldC9ldGhlcm5l dC9hc2l4L0tjb25maWcgICAgICAgICAgfCAgIDIwICsKPiA+PiAgZHJpdmVycy9uZXQvZXRoZXJu ZXQvYXNpeC9NYWtlZmlsZSAgICAgICAgIHwgICAgNiArCj4gPj4gIGRyaXZlcnMvbmV0L2V0aGVy bmV0L2FzaXgvYXg4ODc5NmNfaW9jdGwuYyB8ICAyOTMgKysrKysKPiA+PiAgZHJpdmVycy9uZXQv ZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19pb2N0bC5oIHwgICAyMSArCj4gPj4gIGRyaXZlcnMvbmV0 L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jICB8IDEzNzMgKysrKysrKysrKysrKysrKysr KysKPiA+PiAgZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmggIHwgIDU5 NiArKysrKysrKysKPiA+PiAgZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19zcGku YyAgIHwgIDEwMyArKwo+ID4+ICBkcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX3Nw aS5oICAgfCAgIDY3ICsKPiA+PiAgMTAgZmlsZXMgY2hhbmdlZCwgMjQ4MSBpbnNlcnRpb25zKCsp Cj4gPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L0tjb25m aWcKPiA+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvTWFr ZWZpbGUKPiA+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgv YXg4ODc5NmNfaW9jdGwuYwo+ID4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRo ZXJuZXQvYXNpeC9heDg4Nzk2Y19pb2N0bC5oCj4gPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYwo+ID4+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmgKPiA+PiAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfc3BpLmMK PiA+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5 NmNfc3BpLmgKPiA+PiAKPiA+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2Nv bmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWcKPiA+PiBpbmRleCBkZTUwZThiOWU2 NTYuLmYzYjIxOGU0NWVhNSAxMDA2NDQKPiA+PiAtLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9L Y29uZmlnCj4gPj4gKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZwo+ID4+IEBAIC0z Miw2ICszMiw3IEBAIHNvdXJjZSAiZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL0tjb25maWciCj4g Pj4gIHNvdXJjZSAiZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBwbGUvS2NvbmZpZyIKPiA+PiAgc291 cmNlICJkcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9LY29uZmlnIgo+ID4+ICBzb3VyY2Ug ImRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9LY29uZmlnIgo+ID4+ICtzb3VyY2UgImRyaXZlcnMv bmV0L2V0aGVybmV0L2FzaXgvS2NvbmZpZyIKPiA+PiAgc291cmNlICJkcml2ZXJzL25ldC9ldGhl cm5ldC9hdGhlcm9zL0tjb25maWciCj4gPj4gIHNvdXJjZSAiZHJpdmVycy9uZXQvZXRoZXJuZXQv YXVyb3JhL0tjb25maWciCj4gPj4gIHNvdXJjZSAiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRj b20vS2NvbmZpZyIKPiA+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZp bGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZQo+ID4+IGluZGV4IGY4ZjM4ZGNiNWY4 YS4uOWViMzY4ZDkzNjA3IDEwMDY0NAo+ID4+IC0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01h a2VmaWxlCj4gPj4gKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGUKPiA+PiBAQCAt MTgsNiArMTgsNyBAQCBvYmotJChDT05GSUdfTkVUX1hHRU5FKSArPSBhcG0vCj4gPj4gIG9iai0k KENPTkZJR19ORVRfVkVORE9SX0FQUExFKSArPSBhcHBsZS8KPiA+PiAgb2JqLSQoQ09ORklHX05F VF9WRU5ET1JfQVFVQU5USUEpICs9IGFxdWFudGlhLwo+ID4+ICBvYmotJChDT05GSUdfTkVUX1ZF TkRPUl9BUkMpICs9IGFyYy8KPiA+PiArb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfQVNJWCkgKz0g YXNpeC8KPiA+PiAgb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfQVRIRVJPUykgKz0gYXRoZXJvcy8K PiA+PiAgb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfQVVST1JBKSArPSBhdXJvcmEvCj4gPj4gIG9i ai0kKENPTkZJR19ORVRfVkVORE9SX0NBREVOQ0UpICs9IGNhZGVuY2UvCj4gPj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVy bmV0L2FzaXgvS2NvbmZpZwo+ID4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPj4gaW5kZXggMDAw MDAwMDAwMDAwLi40YjEyN2E0YTY1OWEKPiA+PiAtLS0gL2Rldi9udWxsCj4gPj4gKysrIGIvZHJp dmVycy9uZXQvZXRoZXJuZXQvYXNpeC9LY29uZmlnCj4gPj4gQEAgLTAsMCArMSwyMCBAQAo+ID4+ ICsjCj4gPj4gKyMgQXNpeCBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uCj4gPj4gKyMKPiA+ PiArCj4gPj4gK2NvbmZpZyBORVRfVkVORE9SX0FTSVgKPiA+PiArCWJvb2wgIkFzaXggZGV2aWNl cyIKPiA+PiArCWRlcGVuZHMgb24gU1BJCj4gPj4gKwloZWxwCj4gPj4gKwkgIElmIHlvdSBoYXZl IGEgbmV0d29yayAoRXRoZXJuZXQpIGludGVyZmFjZSBiYXNlZCBvbiBhIGNoaXAgZnJvbSBBU0lY LCBzYXkgWQo+ID4KPiA+IExvb2tzIGxpa2UgdG9vIGxvbmcsIGRpZCBpdCBwYXNzIGNoZWNrcGF0 Y2g/Cj4gCj4gWWVzPyBMZXQgbWUgdHJ5IGFnYWluLiBZZXMsIHRoaXMgb25lIHBhc3NlZCwgYnV0 IEkgbWlzc2VkIGEgZmV3IG90aGVyCj4gcHJvYmxlbXMuIFRoYW5rIHlvdS4KCkkgbm90aWNlZCB0 aGF0IG5vdyB0aGUgbGltaXQgaXMgMTAwIHdoZW4gaW1wcm92ZXMgcmVhZGFiaWxpdHksIHNvIHRo aXMKb25lIGlzIGdvb2QuCgooLi4uKQoKPiA+PiArCj4gPj4gK3U4IGF4ODg3OTZjX2NoZWNrX3Bv d2VyKHN0cnVjdCBheDg4Nzk2Y19kZXZpY2UgKmF4X2xvY2FsKQo+ID4KPiA+IExvb2tzIGhlcmUg bGlrZSBwb2ludGVyIHRvIGNvbnN0LiBVbmxlc3MgaXQgaXMgYmVjYXVzZSBvZgo+ID4gQVhfUkVB RF9TVEFUVVMoKSB3aGljaCBjYW5ub3QgdGFrZSBjb25zdD8KPiAKPiBJdCBjYW4uIEkgY2hhbmdl ZCBvdGhlciBzdHVmZiBpbiBheDg4Nzk2Y19zcGkuW2hjXSB0byBjb25zdCB0b28uCj4gCj4gPj4g K3sKPiA+Cj4gPiBQbGVhc2UgcHV0IGZpbGUtc2NvcGUgZGVmaW5pdGlvbnMgZmlyc3QsIHNvIHRo aXMgc2hvdWxkIGdvIHRvIHRoZSBlbmQuCj4gCj4gSSBkb24ndCB1bmRlcnN0YW5kLgoKRnVuY3Rp b25zIGFuZCB2YXJpYWJsZXMgd2hpY2ggKGZpbGUgc2NvcGUpIGFyZSBzdGF0aWMgZ28gdG8gdGhl CmJlZ2lubmluZyBvZiBmaWxlLiBPbmVzIHZpc2libGUgZXh0ZXJuYWxseSAobm9uIHN0YXRpYyks IGdvIGFmdGVyIHRoZW0uCgooLi4uKQoKPiA+PiArCj4gPj4gKwlBWF9XUklURSgmYXhfbG9jYWwt PmF4X3NwaSwgcnhfY3RsLCBQMl9SWENSKTsKPiA+PiArCj4gPgo+ID4gTm8gbmVlZCBmb3IgZW1w dHkgbGluZS4KPiA+Cj4gCj4gRml4ZWQuCj4gCj4gPj4gK30KPiA+PiArCj4gPj4gKyNpZiAwCj4g Pgo+ID4gUGxlYXNlIGNvbW1lbnQgd2h5IGl0IGlzIGNvbW1lbnRlZCBvdXQuCj4gPgo+IAo+IEFs d2F5cyBoYXMgYmVlbiAoLTsgVGhpcyBpcyBob3cgaXQgY2FtZSBmcm9tIHRoZSB2ZW5kb3IgSSBt aXNzZWQgaXQgd2hlbgo+IEkgZm9jdXNlZCBvbiBtYWtpbmcgdGhpbmdzIHdvcmsuIEkgd2lsbCBp bnZlc3RpZ2F0ZSBpdCBhbmQgZWl0aGVyCj4gdW5jb21tZW50IG9yIHJlbW92ZSBpdC4KClRoZW4g anVzdCByZW1vdmUgaXQuCgooLi4uKQoKPiA+PiArI2luY2x1ZGUgPGxpbnV4L29mLmg+Cj4gPj4g KyNlbmRpZgo+ID4+ICsjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KPiA+PiArI2luY2x1ZGUgPGxp bnV4L2V0aGVyZGV2aWNlLmg+Cj4gPj4gKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+Cj4gPj4g KyNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+Cj4gPj4gKyNpbmNsdWRlIDxsaW51eC9p bml0Lmg+Cj4gPj4gKyNpbmNsdWRlIDxsaW51eC9pby5oPgo+ID4+ICsjaW5jbHVkZSA8bGludXgv a21vZC5oPgo+ID4+ICsjaW5jbHVkZSA8bGludXgvbWlpLmg+Cj4gPj4gKyNpbmNsdWRlIDxsaW51 eC9tb2R1bGUuaD4KPiA+PiArI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgo+ID4+ICsjaW5j bHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gPj4gKyNpbmNsdWRlIDxsaW51eC9zY2hl ZC5oPgo+ID4+ICsjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgo+ID4+ICsjaW5jbHVkZSA8bGlu dXgvdGltZXIuaD4KPiA+PiArI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KPiA+PiArI2luY2x1 ZGUgPGxpbnV4L3VzYi5oPgo+ID4+ICsjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgo+ID4+ICsj aW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Cj4gPgo+ID4gQWxsIG9mIHRoZXNlIHNob3VsZCBi ZSByZW1vdmVkIGV4Y2VwdCB0aGUgaGVhZGVycyB1c2VkIGRpcmVjdGx5IGluIHRoaXMKPiA+IGhl YWRlci4KPiA+Cj4gCj4gVGhpcyBpcyAicHJpdmF0ZSIgaGVhZGVyIGZpbGUgaW5jbHVkZWQgaW4g YWxsIGF4ODg3OTZjXyouYyBmaWxlcyBhbmQKPiB0aGVzZSBhcmUgaGVhZGVycyByZXF1aXJlZCBp biB0aGVtLiBJdCBzZWVtcyBtb3JlIGNvbnZlbmluZXQgdG8gaGF2ZQo+IHRoZW0gYWxsIGxpc3Rl ZCBpbiBvbmUgcGxhY2UuIFdoYXQgaXMgdGhlIHJlYXNvbiB0byBkbyBvdGhlcndpc2U/CgpCZWNh dXNlOgoxLiBUaGUgaGVhZGVyIGlzIGluY2x1ZGVkIGluIG90aGVyIGZpbGVzIChtb3JlIHRoYW4g b25lKSBzbyBlYWNoIG90aGVyCmNvbXBpbGF0aW9uIHVuaXQgd2lsbCBpbmNsdWRlIGFsbCB0aGVz ZSBoZWFkZXJzLCB3aGlsZSBub3QgYWxsIG9mIHRoZW0KbmVlZC4gVGhpcyBoYXMgYSBwZXJmb3Jt YW5jZSBwZW5hbHR5IGR1cmluZyBwcmVwcm9jZXNzaW5nLgoKMi4gWW91IHdpbGwgbG9vc2UgdGhl IHRyYWNrIHdoaWNoIGhlYWRlcnMgYXJlIG5lZWRlZCwgd2hpY2ggYXJlIG5vdC4gV2UKdGVuZCB0 byBrZWVwIGl0IGxvY2FsLCB3aGljaCBtZWFucyBlYWNoIGNvbXBpbGF0aW9uIHVuaXQgaW5jbHVk ZXMgc3R1ZmYKaXQgbmVlZHMuIFRoaXMgaGVscHMgcmVtb3Zpbmcgb2Jzb2xldGUgaW5jbHVkZXMg bGF0ZXIuCgozLiBPdGhlcndpc2UgeW91IGNvdWxkIG1ha2Ugb25lIGhlYWRlciwgaW5jbHVkaW5n IGFsbCBoZWFkZXJzIG9mIExpbnV4LAphbmQgdGhlbiBpbmNsdWRlIHRoaXMgb25lIGhlYWRlciBp biBlYWNoIG9mIEMgZmlsZXMuIE9uZSB0byBydWxlIHRoZW0KYWxsLgoKQmVzdCByZWdhcmRzLApL cnp5c3p0b2YKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5m cmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xp bnV4LWFybS1rZXJuZWwK