From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 527487C for ; Thu, 8 Sep 2022 12:31:56 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 91C0FC433C1; Thu, 8 Sep 2022 12:31:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1662640316; bh=T4bC3CZx/PyV0UqvVlQs5zRmg6mrZK3Fn2u5MdVdMsM=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=YK2J5vIWD2sHeNuX6Afh6N0WapVclHd6a+hcQbgSYMH+2sQvhG+HCFHnwGcfDkJWK fEi+hGwygSjBgnKEu2ooy6ekuQLqDRcpx2YPwHzMMRxHlTLl5FJBUnVILqZmY/ejeT 6slg1fQGoRJtd7vqY9r5ZTpHNWcAqCvR1CbSlgG4rg0lV2gqS9PyqTxnqE49ATuZH8 q/Fw5a9hpM+miw6z5ZYNuWzlZVel7B7P4pJjky1Tmw6iqxubYJ8o/Dc3UC7JZQk+AR ik4I90YEgOU0vX7i4ohYsBbgPwwQtTfUqZr9ac1qPwJQmSv3cDJjcEx3WaDQKwiN1I Xi7Ktl1CkaEyw== Date: Thu, 8 Sep 2022 13:31:50 +0100 From: Lee Jones To: Hector Martin Cc: Russell King , Arnd Bergmann , Linus Walleij , Alyssa Rosenzweig , asahi@lists.linux.dev, Bartosz Golaszewski , linux-arm-kernel@lists.infradead.org, linux-gpio@vger.kernel.org, Sven Peter Subject: Re: [PATCH 4/6] platform/apple: Add new Apple Mac SMC driver Message-ID: References: <45ed0a37-60ac-3a06-92d1-6b30e18261ff@marcan.st> Precedence: bulk X-Mailing-List: asahi@lists.linux.dev 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: <45ed0a37-60ac-3a06-92d1-6b30e18261ff@marcan.st> On Thu, 08 Sep 2022, Hector Martin wrote: > On 08/09/2022 19.58, Lee Jones wrote: > > On Thu, 01 Sep 2022, Russell King wrote: > > > >> From: Hector Martin > >> > >> This driver implements support for the SMC (System Management > >> Controller) in Apple Macs. In contrast to the existing applesmc driver, > >> it uses pluggable backends that allow it to support different SMC > >> implementations, and uses the MFD subsystem to expose the core SMC > >> functionality so that specific features (gpio, hwmon, battery, etc.) can > >> be implemented by separate drivers in their respective downstream > >> subsystems. > >> > >> The initial RTKit backend adds support for Apple Silicon Macs (M1 et > >> al). We hope a backend for T2 Macs will be written in the future > >> (since those are not supported by applesmc), and eventually an x86 > >> backend would allow us to fully deprecate applesmc in favor of this > >> driver. > >> > >> Signed-off-by: Hector Martin > >> Signed-off-by: Russell King (Oracle) > >> --- > >> drivers/platform/Kconfig | 2 + > >> drivers/platform/Makefile | 1 + > >> drivers/platform/apple/Kconfig | 49 ++++ > >> drivers/platform/apple/Makefile | 11 + > >> drivers/platform/apple/smc.h | 28 ++ > >> drivers/platform/apple/smc_core.c | 249 ++++++++++++++++ > >> drivers/platform/apple/smc_rtkit.c | 451 +++++++++++++++++++++++++++++ > >> include/linux/mfd/macsmc.h | 86 ++++++ > >> 8 files changed, 877 insertions(+) > >> create mode 100644 drivers/platform/apple/Kconfig > >> create mode 100644 drivers/platform/apple/Makefile > >> create mode 100644 drivers/platform/apple/smc.h > >> create mode 100644 drivers/platform/apple/smc_core.c > >> create mode 100644 drivers/platform/apple/smc_rtkit.c > >> create mode 100644 include/linux/mfd/macsmc.h > >> > >> diff --git a/drivers/platform/Kconfig b/drivers/platform/Kconfig > >> index b437847b6237..5f8b9bcdb830 100644 > >> --- a/drivers/platform/Kconfig > >> +++ b/drivers/platform/Kconfig > >> @@ -13,4 +13,6 @@ source "drivers/platform/olpc/Kconfig" > >> > >> source "drivers/platform/surface/Kconfig" > >> > >> +source "drivers/platform/apple/Kconfig" > >> + > >> source "drivers/platform/x86/Kconfig" > >> diff --git a/drivers/platform/Makefile b/drivers/platform/Makefile > >> index 4de08ef4ec9d..3e5d5039a28c 100644 > >> --- a/drivers/platform/Makefile > >> +++ b/drivers/platform/Makefile > >> @@ -10,3 +10,4 @@ obj-$(CONFIG_OLPC_EC) += olpc/ > >> obj-$(CONFIG_GOLDFISH) += goldfish/ > >> obj-$(CONFIG_CHROME_PLATFORMS) += chrome/ > >> obj-$(CONFIG_SURFACE_PLATFORMS) += surface/ > >> +obj-$(CONFIG_APPLE_PLATFORMS) += apple/ > >> diff --git a/drivers/platform/apple/Kconfig b/drivers/platform/apple/Kconfig > >> new file mode 100644 > >> index 000000000000..42525aa9fbbe > >> --- /dev/null > >> +++ b/drivers/platform/apple/Kconfig > >> @@ -0,0 +1,49 @@ > >> +# SPDX-License-Identifier: GPL-2.0 > >> +# > >> +# Apple Platform-Specific Drivers > >> +# > >> + > >> +menuconfig APPLE_PLATFORMS > >> + bool "Apple Mac Platform-Specific Device Drivers" > >> + default y > >> + help > >> + Say Y here to get to see options for platform-specific device drivers > >> + for Apple devices. This option alone does not add any kernel code. > >> + > >> + If you say N, all options in this submenu will be skipped and disabled. > >> + > >> +if APPLE_PLATFORMS > >> + > >> +config APPLE_SMC > >> + tristate "Apple SMC Driver" > >> + depends on ARCH_APPLE || COMPILE_TEST > >> + default ARCH_APPLE > >> + select MFD_CORE > >> + help > >> + Build support for the Apple System Management Controller present in > >> + Apple Macs. This driver currently supports the SMC in Apple Silicon > >> + Macs. For x86 Macs, see the applesmc driver (SENSORS_APPLESMC). > >> + > >> + Say Y here if you have an Apple Silicon Mac. > >> + > >> + To compile this driver as a module, choose M here: the module will > >> + be called macsmc. > >> + > >> +if APPLE_SMC > >> + > >> +config APPLE_SMC_RTKIT > >> + tristate "RTKit (Apple Silicon) backend" > >> + depends on ARCH_APPLE || COMPILE_TEST > >> + depends on APPLE_RTKIT > >> + default ARCH_APPLE > >> + help > >> + Build support for SMC communications via the RTKit backend. This is > >> + required for Apple Silicon Macs. > >> + > >> + Say Y here if you have an Apple Silicon Mac. > >> + > >> + To compile this driver as a module, choose M here: the module will > >> + be called macsmc-rtkit. > >> + > >> +endif > >> +endif > >> diff --git a/drivers/platform/apple/Makefile b/drivers/platform/apple/Makefile > >> new file mode 100644 > >> index 000000000000..79fac195398b > >> --- /dev/null > >> +++ b/drivers/platform/apple/Makefile > >> @@ -0,0 +1,11 @@ > >> +# SPDX-License-Identifier: GPL-2.0 > >> +# > >> +# Makefile for linux/drivers/platform/apple > >> +# Apple Platform-Specific Drivers > >> +# > >> + > >> +macsmc-y += smc_core.o > >> +macsmc-rtkit-y += smc_rtkit.o > >> + > >> +obj-$(CONFIG_APPLE_SMC) += macsmc.o > >> +obj-$(CONFIG_APPLE_SMC_RTKIT) += macsmc-rtkit.o > >> diff --git a/drivers/platform/apple/smc.h b/drivers/platform/apple/smc.h > >> new file mode 100644 > >> index 000000000000..8ae51887b2c5 > >> --- /dev/null > >> +++ b/drivers/platform/apple/smc.h > >> @@ -0,0 +1,28 @@ > >> +// SPDX-License-Identifier: GPL-2.0-only OR MIT > >> +/* > >> + * Apple SMC internal core definitions > >> + * Copyright (C) The Asahi Linux Contributors > >> + */ > >> + > >> +#ifndef _SMC_H > >> +#define _SMC_H > >> + > >> +#include > >> + > >> +struct apple_smc_backend_ops { > >> + int (*read_key)(void *cookie, smc_key key, void *buf, size_t size); > >> + int (*write_key)(void *cookie, smc_key key, void *buf, size_t size); > >> + int (*write_key_atomic)(void *cookie, smc_key key, void *buf, size_t size); > >> + int (*rw_key)(void *cookie, smc_key key, void *wbuf, size_t wsize, > >> + void *rbuf, size_t rsize); > >> + int (*get_key_by_index)(void *cookie, int index, smc_key *key); > >> + int (*get_key_info)(void *cookie, smc_key key, struct apple_smc_key_info *info); > >> +}; > >> + > >> +struct apple_smc *apple_smc_probe(struct device *dev, const struct apple_smc_backend_ops *ops, > >> + void *cookie); > >> +void *apple_smc_get_cookie(struct apple_smc *smc); > >> +int apple_smc_remove(struct apple_smc *smc); > >> +void apple_smc_event_received(struct apple_smc *smc, uint32_t event); > >> + > >> +#endif > >> diff --git a/drivers/platform/apple/smc_core.c b/drivers/platform/apple/smc_core.c > >> new file mode 100644 > >> index 000000000000..daf029cd072f > >> --- /dev/null > >> +++ b/drivers/platform/apple/smc_core.c > >> @@ -0,0 +1,249 @@ > >> +// SPDX-License-Identifier: GPL-2.0-only OR MIT > >> +/* > >> + * Apple SMC core framework > >> + * Copyright The Asahi Linux Contributors > >> + */ > >> + > >> +#include > >> +#include > > > > Please refrain from using the MFD API outside of drivers/mfd. > > > > If you need an MFD driver, please separate it out. > > > > If not, please replace it with the platform_*() API instead. > > There is precedent for MFD devices under platform/: > > drivers/platform/x86/intel/int3472/tps68470.c > > As well as other examples in the tree: > > drivers/firmware/xilinx/zynqmp.c > drivers/iio/common/ssp_sensors/ssp_dev.c > drivers/misc/cardreader/alcor_pci.c > drivers/misc/cardreader/rtsx_pcr.c > drivers/misc/cardreader/rtsx_usb.c > drivers/soc/samsung/exynos-pmu.c > drivers/staging/nvec/nvec.c I'm aware of the previous offences. They each slipped-in before I could catch them. Ideally I'd like to reverse the act. However, finding time for such low-priority activities has proved challenging. I only noticed *this* occurrence due to the MFD header file. > Since it's a driver for a platform-specific firmware service, I thought > it made more sense in platform/ than mfd/. It's using the MFD API > because the firmware exposes multiple subsystems, and this maps very > nicely to the MFD model - NIHing that scaffolding would require a whole > bunch of custom matching/device creation code. I'm also aware of the convenience value of {ab}using the MFD API. > But it's not exactly your > typical MFD device (it's not even a separate chip, it's part of the main > SoC), so I'm not sure if it really belongs in mfd/ from an > organizational standpoint? There is a strong argument for all SoCs to be classed as (massive) MFDs. However seeing as they represent more of a whole platform, rather than an add-on chip, we have had the sense to represent them differently. Some such submissions I have made explicit requests to be moved form drivers/mfd *into* drivers/platform in the past. Most SoCs are solely represented in DT, omitting the requirement for subsequent device registration. Have you considered this? If so, why does this not suit your use-case? The long and the short of it is; if you wish to treat this device, or at least a section of it, as a type of MFD, then please draft that part of it as an MFD driver, residing in drivers/mfd. If it's "not really an MFD", then find another way to represent the conglomeration please. If the MFD route is the best, then you can register each of the devices, including the *-core from drivers/mfd. Grep for "cross-ec" as a relatively recently good example. -- Lee Jones [李琼斯] 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 3EC20C6FA82 for ; Thu, 8 Sep 2022 12:33:08 +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=lJ8DDTxF/O99rBTd1UdeSunuR1ac5JrsIww4DmjWRzc=; b=GeYw8VBHkla4pm EoahPBbNnQkQje/bdu2fjZuAmUEuvKMpkDc4HRELWFVUsKtgmha2S4yIGfPcWr/GFqe6fivqEXHsW cA+UIMY+e8EsN2csiN+yHBkBqusKTBr2Wm137MlXyWmG4h4sndkklmoHrGcA0y9TxgKKSMb64R29B cElCphgNzp1NYt/XJ6D5EacbvCtM9MfFQDd+y7/b9Fid4CiVlVy3+FpXUmUc4pzczYle/yWjNq9Ah tGSS34SFxUB1um6ApPs6wR4mmndtntw5OubRH0j33C29yXhRuq593Q92MDT/rwdK4/6jjl+kHjniH ZdsJ8Gr+s5huAlQzihkA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oWGhO-003Hpw-73; Thu, 08 Sep 2022 12:32:02 +0000 Received: from ams.source.kernel.org ([2604:1380:4601:e00::1]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oWGhK-003Hmt-Qn for linux-arm-kernel@lists.infradead.org; Thu, 08 Sep 2022 12:32:01 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 41BDFB820D5; Thu, 8 Sep 2022 12:31:57 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 91C0FC433C1; Thu, 8 Sep 2022 12:31:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1662640316; bh=T4bC3CZx/PyV0UqvVlQs5zRmg6mrZK3Fn2u5MdVdMsM=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=YK2J5vIWD2sHeNuX6Afh6N0WapVclHd6a+hcQbgSYMH+2sQvhG+HCFHnwGcfDkJWK fEi+hGwygSjBgnKEu2ooy6ekuQLqDRcpx2YPwHzMMRxHlTLl5FJBUnVILqZmY/ejeT 6slg1fQGoRJtd7vqY9r5ZTpHNWcAqCvR1CbSlgG4rg0lV2gqS9PyqTxnqE49ATuZH8 q/Fw5a9hpM+miw6z5ZYNuWzlZVel7B7P4pJjky1Tmw6iqxubYJ8o/Dc3UC7JZQk+AR ik4I90YEgOU0vX7i4ohYsBbgPwwQtTfUqZr9ac1qPwJQmSv3cDJjcEx3WaDQKwiN1I Xi7Ktl1CkaEyw== Date: Thu, 8 Sep 2022 13:31:50 +0100 From: Lee Jones To: Hector Martin Cc: Russell King , Arnd Bergmann , Linus Walleij , Alyssa Rosenzweig , asahi@lists.linux.dev, Bartosz Golaszewski , linux-arm-kernel@lists.infradead.org, linux-gpio@vger.kernel.org, Sven Peter Subject: Re: [PATCH 4/6] platform/apple: Add new Apple Mac SMC driver Message-ID: References: <45ed0a37-60ac-3a06-92d1-6b30e18261ff@marcan.st> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <45ed0a37-60ac-3a06-92d1-6b30e18261ff@marcan.st> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220908_053159_190748_29A8E578 X-CRM114-Status: GOOD ( 45.78 ) 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 T24gVGh1LCAwOCBTZXAgMjAyMiwgSGVjdG9yIE1hcnRpbiB3cm90ZToKCj4gT24gMDgvMDkvMjAy MiAxOS41OCwgTGVlIEpvbmVzIHdyb3RlOgo+ID4gT24gVGh1LCAwMSBTZXAgMjAyMiwgUnVzc2Vs bCBLaW5nIHdyb3RlOgo+ID4gCj4gPj4gRnJvbTogSGVjdG9yIE1hcnRpbiA8bWFyY2FuQG1hcmNh bi5zdD4KPiA+Pgo+ID4+IFRoaXMgZHJpdmVyIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgdGhlIFNN QyAoU3lzdGVtIE1hbmFnZW1lbnQKPiA+PiBDb250cm9sbGVyKSBpbiBBcHBsZSBNYWNzLiBJbiBj b250cmFzdCB0byB0aGUgZXhpc3RpbmcgYXBwbGVzbWMgZHJpdmVyLAo+ID4+IGl0IHVzZXMgcGx1 Z2dhYmxlIGJhY2tlbmRzIHRoYXQgYWxsb3cgaXQgdG8gc3VwcG9ydCBkaWZmZXJlbnQgU01DCj4g Pj4gaW1wbGVtZW50YXRpb25zLCBhbmQgdXNlcyB0aGUgTUZEIHN1YnN5c3RlbSB0byBleHBvc2Ug dGhlIGNvcmUgU01DCj4gPj4gZnVuY3Rpb25hbGl0eSBzbyB0aGF0IHNwZWNpZmljIGZlYXR1cmVz IChncGlvLCBod21vbiwgYmF0dGVyeSwgZXRjLikgY2FuCj4gPj4gYmUgaW1wbGVtZW50ZWQgYnkg c2VwYXJhdGUgZHJpdmVycyBpbiB0aGVpciByZXNwZWN0aXZlIGRvd25zdHJlYW0KPiA+PiBzdWJz eXN0ZW1zLgo+ID4+Cj4gPj4gVGhlIGluaXRpYWwgUlRLaXQgYmFja2VuZCBhZGRzIHN1cHBvcnQg Zm9yIEFwcGxlIFNpbGljb24gTWFjcyAoTTEgZXQKPiA+PiBhbCkuIFdlIGhvcGUgYSBiYWNrZW5k IGZvciBUMiBNYWNzIHdpbGwgYmUgd3JpdHRlbiBpbiB0aGUgZnV0dXJlCj4gPj4gKHNpbmNlIHRo b3NlIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGFwcGxlc21jKSwgYW5kIGV2ZW50dWFsbHkgYW4geDg2 Cj4gPj4gYmFja2VuZCB3b3VsZCBhbGxvdyB1cyB0byBmdWxseSBkZXByZWNhdGUgYXBwbGVzbWMg aW4gZmF2b3Igb2YgdGhpcwo+ID4+IGRyaXZlci4KPiA+Pgo+ID4+IFNpZ25lZC1vZmYtYnk6IEhl Y3RvciBNYXJ0aW4gPG1hcmNhbkBtYXJjYW4uc3Q+Cj4gPj4gU2lnbmVkLW9mZi1ieTogUnVzc2Vs bCBLaW5nIChPcmFjbGUpIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KPiA+PiAtLS0KPiA+ PiAgZHJpdmVycy9wbGF0Zm9ybS9LY29uZmlnICAgICAgICAgICB8ICAgMiArCj4gPj4gIGRyaXZl cnMvcGxhdGZvcm0vTWFrZWZpbGUgICAgICAgICAgfCAgIDEgKwo+ID4+ICBkcml2ZXJzL3BsYXRm b3JtL2FwcGxlL0tjb25maWcgICAgIHwgIDQ5ICsrKysKPiA+PiAgZHJpdmVycy9wbGF0Zm9ybS9h cHBsZS9NYWtlZmlsZSAgICB8ICAxMSArCj4gPj4gIGRyaXZlcnMvcGxhdGZvcm0vYXBwbGUvc21j LmggICAgICAgfCAgMjggKysKPiA+PiAgZHJpdmVycy9wbGF0Zm9ybS9hcHBsZS9zbWNfY29yZS5j ICB8IDI0OSArKysrKysrKysrKysrKysrCj4gPj4gIGRyaXZlcnMvcGxhdGZvcm0vYXBwbGUvc21j X3J0a2l0LmMgfCA0NTEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+PiAgaW5jbHVk ZS9saW51eC9tZmQvbWFjc21jLmggICAgICAgICB8ICA4NiArKysrKysKPiA+PiAgOCBmaWxlcyBj aGFuZ2VkLCA4NzcgaW5zZXJ0aW9ucygrKQo+ID4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9wbGF0Zm9ybS9hcHBsZS9LY29uZmlnCj4gPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L3BsYXRmb3JtL2FwcGxlL01ha2VmaWxlCj4gPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L3BsYXRmb3JtL2FwcGxlL3NtYy5oCj4gPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3Bs YXRmb3JtL2FwcGxlL3NtY19jb3JlLmMKPiA+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv cGxhdGZvcm0vYXBwbGUvc21jX3J0a2l0LmMKPiA+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1 ZGUvbGludXgvbWZkL21hY3NtYy5oCj4gPj4KPiA+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0 Zm9ybS9LY29uZmlnIGIvZHJpdmVycy9wbGF0Zm9ybS9LY29uZmlnCj4gPj4gaW5kZXggYjQzNzg0 N2I2MjM3Li41ZjhiOWJjZGI4MzAgMTAwNjQ0Cj4gPj4gLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS9L Y29uZmlnCj4gPj4gKysrIGIvZHJpdmVycy9wbGF0Zm9ybS9LY29uZmlnCj4gPj4gQEAgLTEzLDQg KzEzLDYgQEAgc291cmNlICJkcml2ZXJzL3BsYXRmb3JtL29scGMvS2NvbmZpZyIKPiA+PiAgCj4g Pj4gIHNvdXJjZSAiZHJpdmVycy9wbGF0Zm9ybS9zdXJmYWNlL0tjb25maWciCj4gPj4gIAo+ID4+ ICtzb3VyY2UgImRyaXZlcnMvcGxhdGZvcm0vYXBwbGUvS2NvbmZpZyIKPiA+PiArCj4gPj4gIHNv dXJjZSAiZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZyIKPiA+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9wbGF0Zm9ybS9NYWtlZmlsZSBiL2RyaXZlcnMvcGxhdGZvcm0vTWFrZWZpbGUKPiA+PiBp bmRleCA0ZGUwOGVmNGVjOWQuLjNlNWQ1MDM5YTI4YyAxMDA2NDQKPiA+PiAtLS0gYS9kcml2ZXJz L3BsYXRmb3JtL01ha2VmaWxlCj4gPj4gKysrIGIvZHJpdmVycy9wbGF0Zm9ybS9NYWtlZmlsZQo+ ID4+IEBAIC0xMCwzICsxMCw0IEBAIG9iai0kKENPTkZJR19PTFBDX0VDKQkJKz0gb2xwYy8KPiA+ PiAgb2JqLSQoQ09ORklHX0dPTERGSVNIKQkJKz0gZ29sZGZpc2gvCj4gPj4gIG9iai0kKENPTkZJ R19DSFJPTUVfUExBVEZPUk1TKQkrPSBjaHJvbWUvCj4gPj4gIG9iai0kKENPTkZJR19TVVJGQUNF X1BMQVRGT1JNUykJKz0gc3VyZmFjZS8KPiA+PiArb2JqLSQoQ09ORklHX0FQUExFX1BMQVRGT1JN UykJKz0gYXBwbGUvCj4gPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0vYXBwbGUvS2Nv bmZpZyBiL2RyaXZlcnMvcGxhdGZvcm0vYXBwbGUvS2NvbmZpZwo+ID4+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gPj4gaW5kZXggMDAwMDAwMDAwMDAwLi40MjUyNWFhOWZiYmUKPiA+PiAtLS0gL2Rl di9udWxsCj4gPj4gKysrIGIvZHJpdmVycy9wbGF0Zm9ybS9hcHBsZS9LY29uZmlnCj4gPj4gQEAg LTAsMCArMSw0OSBAQAo+ID4+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4g Pj4gKyMKPiA+PiArIyBBcHBsZSBQbGF0Zm9ybS1TcGVjaWZpYyBEcml2ZXJzCj4gPj4gKyMKPiA+ PiArCj4gPj4gK21lbnVjb25maWcgQVBQTEVfUExBVEZPUk1TCj4gPj4gKwlib29sICJBcHBsZSBN YWMgUGxhdGZvcm0tU3BlY2lmaWMgRGV2aWNlIERyaXZlcnMiCj4gPj4gKwlkZWZhdWx0IHkKPiA+ PiArCWhlbHAKPiA+PiArCSAgU2F5IFkgaGVyZSB0byBnZXQgdG8gc2VlIG9wdGlvbnMgZm9yIHBs YXRmb3JtLXNwZWNpZmljIGRldmljZSBkcml2ZXJzCj4gPj4gKwkgIGZvciBBcHBsZSBkZXZpY2Vz LiBUaGlzIG9wdGlvbiBhbG9uZSBkb2VzIG5vdCBhZGQgYW55IGtlcm5lbCBjb2RlLgo+ID4+ICsK PiA+PiArCSAgSWYgeW91IHNheSBOLCBhbGwgb3B0aW9ucyBpbiB0aGlzIHN1Ym1lbnUgd2lsbCBi ZSBza2lwcGVkIGFuZCBkaXNhYmxlZC4KPiA+PiArCj4gPj4gK2lmIEFQUExFX1BMQVRGT1JNUwo+ ID4+ICsKPiA+PiArY29uZmlnIEFQUExFX1NNQwo+ID4+ICsJdHJpc3RhdGUgIkFwcGxlIFNNQyBE cml2ZXIiCj4gPj4gKwlkZXBlbmRzIG9uIEFSQ0hfQVBQTEUgfHwgQ09NUElMRV9URVNUCj4gPj4g KwlkZWZhdWx0IEFSQ0hfQVBQTEUKPiA+PiArCXNlbGVjdCBNRkRfQ09SRQo+ID4+ICsJaGVscAo+ ID4+ICsJICBCdWlsZCBzdXBwb3J0IGZvciB0aGUgQXBwbGUgU3lzdGVtIE1hbmFnZW1lbnQgQ29u dHJvbGxlciBwcmVzZW50IGluCj4gPj4gKwkgIEFwcGxlIE1hY3MuIFRoaXMgZHJpdmVyIGN1cnJl bnRseSBzdXBwb3J0cyB0aGUgU01DIGluIEFwcGxlIFNpbGljb24KPiA+PiArCSAgTWFjcy4gRm9y IHg4NiBNYWNzLCBzZWUgdGhlIGFwcGxlc21jIGRyaXZlciAoU0VOU09SU19BUFBMRVNNQykuCj4g Pj4gKwo+ID4+ICsJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGFuIEFwcGxlIFNpbGljb24gTWFj Lgo+ID4+ICsKPiA+PiArCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hv b3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsCj4gPj4gKwkgIGJlIGNhbGxlZCBtYWNzbWMuCj4g Pj4gKwo+ID4+ICtpZiBBUFBMRV9TTUMKPiA+PiArCj4gPj4gK2NvbmZpZyBBUFBMRV9TTUNfUlRL SVQKPiA+PiArCXRyaXN0YXRlICJSVEtpdCAoQXBwbGUgU2lsaWNvbikgYmFja2VuZCIKPiA+PiAr CWRlcGVuZHMgb24gQVJDSF9BUFBMRSB8fCBDT01QSUxFX1RFU1QKPiA+PiArCWRlcGVuZHMgb24g QVBQTEVfUlRLSVQKPiA+PiArCWRlZmF1bHQgQVJDSF9BUFBMRQo+ID4+ICsJaGVscAo+ID4+ICsJ ICBCdWlsZCBzdXBwb3J0IGZvciBTTUMgY29tbXVuaWNhdGlvbnMgdmlhIHRoZSBSVEtpdCBiYWNr ZW5kLiBUaGlzIGlzCj4gPj4gKwkgIHJlcXVpcmVkIGZvciBBcHBsZSBTaWxpY29uIE1hY3MuCj4g Pj4gKwo+ID4+ICsJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGFuIEFwcGxlIFNpbGljb24gTWFj Lgo+ID4+ICsKPiA+PiArCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hv b3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsCj4gPj4gKwkgIGJlIGNhbGxlZCBtYWNzbWMtcnRr aXQuCj4gPj4gKwo+ID4+ICtlbmRpZgo+ID4+ICtlbmRpZgo+ID4+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL3BsYXRmb3JtL2FwcGxlL01ha2VmaWxlIGIvZHJpdmVycy9wbGF0Zm9ybS9hcHBsZS9NYWtl ZmlsZQo+ID4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPj4gaW5kZXggMDAwMDAwMDAwMDAwLi43 OWZhYzE5NTM5OGIKPiA+PiAtLS0gL2Rldi9udWxsCj4gPj4gKysrIGIvZHJpdmVycy9wbGF0Zm9y bS9hcHBsZS9NYWtlZmlsZQo+ID4+IEBAIC0wLDAgKzEsMTEgQEAKPiA+PiArIyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ID4+ICsjCj4gPj4gKyMgTWFrZWZpbGUgZm9yIGxpbnV4 L2RyaXZlcnMvcGxhdGZvcm0vYXBwbGUKPiA+PiArIyBBcHBsZSBQbGF0Zm9ybS1TcGVjaWZpYyBE cml2ZXJzCj4gPj4gKyMKPiA+PiArCj4gPj4gK21hY3NtYy15CQkJCSs9IHNtY19jb3JlLm8KPiA+ PiArbWFjc21jLXJ0a2l0LXkJCQkJKz0gc21jX3J0a2l0Lm8KPiA+PiArCj4gPj4gK29iai0kKENP TkZJR19BUFBMRV9TTUMpCQkJKz0gbWFjc21jLm8KPiA+PiArb2JqLSQoQ09ORklHX0FQUExFX1NN Q19SVEtJVCkJCSs9IG1hY3NtYy1ydGtpdC5vCj4gPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxh dGZvcm0vYXBwbGUvc21jLmggYi9kcml2ZXJzL3BsYXRmb3JtL2FwcGxlL3NtYy5oCj4gPj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPiA+PiBpbmRleCAwMDAwMDAwMDAwMDAuLjhhZTUxODg3YjJjNQo+ ID4+IC0tLSAvZGV2L251bGwKPiA+PiArKysgYi9kcml2ZXJzL3BsYXRmb3JtL2FwcGxlL3NtYy5o Cj4gPj4gQEAgLTAsMCArMSwyOCBAQAo+ID4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMC1vbmx5IE9SIE1JVAo+ID4+ICsvKgo+ID4+ICsgKiBBcHBsZSBTTUMgaW50ZXJuYWwg Y29yZSBkZWZpbml0aW9ucwo+ID4+ICsgKiBDb3B5cmlnaHQgKEMpIFRoZSBBc2FoaSBMaW51eCBD b250cmlidXRvcnMKPiA+PiArICovCj4gPj4gKwo+ID4+ICsjaWZuZGVmIF9TTUNfSAo+ID4+ICsj ZGVmaW5lIF9TTUNfSAo+ID4+ICsKPiA+PiArI2luY2x1ZGUgPGxpbnV4L21mZC9tYWNzbWMuaD4K PiA+PiArCj4gPj4gK3N0cnVjdCBhcHBsZV9zbWNfYmFja2VuZF9vcHMgewo+ID4+ICsJaW50ICgq cmVhZF9rZXkpKHZvaWQgKmNvb2tpZSwgc21jX2tleSBrZXksIHZvaWQgKmJ1Ziwgc2l6ZV90IHNp emUpOwo+ID4+ICsJaW50ICgqd3JpdGVfa2V5KSh2b2lkICpjb29raWUsIHNtY19rZXkga2V5LCB2 b2lkICpidWYsIHNpemVfdCBzaXplKTsKPiA+PiArCWludCAoKndyaXRlX2tleV9hdG9taWMpKHZv aWQgKmNvb2tpZSwgc21jX2tleSBrZXksIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpOwo+ID4+ICsJ aW50ICgqcndfa2V5KSh2b2lkICpjb29raWUsIHNtY19rZXkga2V5LCB2b2lkICp3YnVmLCBzaXpl X3Qgd3NpemUsCj4gPj4gKwkJICAgICAgdm9pZCAqcmJ1Ziwgc2l6ZV90IHJzaXplKTsKPiA+PiAr CWludCAoKmdldF9rZXlfYnlfaW5kZXgpKHZvaWQgKmNvb2tpZSwgaW50IGluZGV4LCBzbWNfa2V5 ICprZXkpOwo+ID4+ICsJaW50ICgqZ2V0X2tleV9pbmZvKSh2b2lkICpjb29raWUsIHNtY19rZXkg a2V5LCBzdHJ1Y3QgYXBwbGVfc21jX2tleV9pbmZvICppbmZvKTsKPiA+PiArfTsKPiA+PiArCj4g Pj4gK3N0cnVjdCBhcHBsZV9zbWMgKmFwcGxlX3NtY19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYs IGNvbnN0IHN0cnVjdCBhcHBsZV9zbWNfYmFja2VuZF9vcHMgKm9wcywKPiA+PiArCQkJCSAgdm9p ZCAqY29va2llKTsKPiA+PiArdm9pZCAqYXBwbGVfc21jX2dldF9jb29raWUoc3RydWN0IGFwcGxl X3NtYyAqc21jKTsKPiA+PiAraW50IGFwcGxlX3NtY19yZW1vdmUoc3RydWN0IGFwcGxlX3NtYyAq c21jKTsKPiA+PiArdm9pZCBhcHBsZV9zbWNfZXZlbnRfcmVjZWl2ZWQoc3RydWN0IGFwcGxlX3Nt YyAqc21jLCB1aW50MzJfdCBldmVudCk7Cj4gPj4gKwo+ID4+ICsjZW5kaWYKPiA+PiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9wbGF0Zm9ybS9hcHBsZS9zbWNfY29yZS5jIGIvZHJpdmVycy9wbGF0Zm9y bS9hcHBsZS9zbWNfY29yZS5jCj4gPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+PiBpbmRleCAw MDAwMDAwMDAwMDAuLmRhZjAyOWNkMDcyZgo+ID4+IC0tLSAvZGV2L251bGwKPiA+PiArKysgYi9k cml2ZXJzL3BsYXRmb3JtL2FwcGxlL3NtY19jb3JlLmMKPiA+PiBAQCAtMCwwICsxLDI0OSBAQAo+ ID4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5IE9SIE1JVAo+ID4+ ICsvKgo+ID4+ICsgKiBBcHBsZSBTTUMgY29yZSBmcmFtZXdvcmsKPiA+PiArICogQ29weXJpZ2h0 IFRoZSBBc2FoaSBMaW51eCBDb250cmlidXRvcnMKPiA+PiArICovCj4gPj4gKwo+ID4+ICsjaW5j bHVkZSA8bGludXgvZGV2aWNlLmg+Cj4gPj4gKyNpbmNsdWRlIDxsaW51eC9tZmQvY29yZS5oPgo+ ID4gCj4gPiBQbGVhc2UgcmVmcmFpbiBmcm9tIHVzaW5nIHRoZSBNRkQgQVBJIG91dHNpZGUgb2Yg ZHJpdmVycy9tZmQuCj4gPiAKPiA+IElmIHlvdSBuZWVkIGFuIE1GRCBkcml2ZXIsIHBsZWFzZSBz ZXBhcmF0ZSBpdCBvdXQuCj4gPiAKPiA+IElmIG5vdCwgcGxlYXNlIHJlcGxhY2UgaXQgd2l0aCB0 aGUgcGxhdGZvcm1fKigpIEFQSSBpbnN0ZWFkLgo+IAo+IFRoZXJlIGlzIHByZWNlZGVudCBmb3Ig TUZEIGRldmljZXMgdW5kZXIgcGxhdGZvcm0vOgo+IAo+IGRyaXZlcnMvcGxhdGZvcm0veDg2L2lu dGVsL2ludDM0NzIvdHBzNjg0NzAuYwo+IAo+IEFzIHdlbGwgYXMgb3RoZXIgZXhhbXBsZXMgaW4g dGhlIHRyZWU6Cj4gCj4gZHJpdmVycy9maXJtd2FyZS94aWxpbngvenlucW1wLmMKPiBkcml2ZXJz L2lpby9jb21tb24vc3NwX3NlbnNvcnMvc3NwX2Rldi5jCj4gZHJpdmVycy9taXNjL2NhcmRyZWFk ZXIvYWxjb3JfcGNpLmMKPiBkcml2ZXJzL21pc2MvY2FyZHJlYWRlci9ydHN4X3Bjci5jCj4gZHJp dmVycy9taXNjL2NhcmRyZWFkZXIvcnRzeF91c2IuYwo+IGRyaXZlcnMvc29jL3NhbXN1bmcvZXh5 bm9zLXBtdS5jCj4gZHJpdmVycy9zdGFnaW5nL252ZWMvbnZlYy5jCgpJJ20gYXdhcmUgb2YgdGhl IHByZXZpb3VzIG9mZmVuY2VzLgoKVGhleSBlYWNoIHNsaXBwZWQtaW4gYmVmb3JlIEkgY291bGQg Y2F0Y2ggdGhlbS4gIElkZWFsbHkgSSdkIGxpa2UgdG8KcmV2ZXJzZSB0aGUgYWN0LiAgSG93ZXZl ciwgZmluZGluZyB0aW1lIGZvciBzdWNoIGxvdy1wcmlvcml0eQphY3Rpdml0aWVzIGhhcyBwcm92 ZWQgY2hhbGxlbmdpbmcuCgpJIG9ubHkgbm90aWNlZCAqdGhpcyogb2NjdXJyZW5jZSBkdWUgdG8g dGhlIE1GRCBoZWFkZXIgZmlsZS4KCj4gU2luY2UgaXQncyBhIGRyaXZlciBmb3IgYSBwbGF0Zm9y bS1zcGVjaWZpYyBmaXJtd2FyZSBzZXJ2aWNlLCBJIHRob3VnaHQKPiBpdCBtYWRlIG1vcmUgc2Vu c2UgaW4gcGxhdGZvcm0vIHRoYW4gbWZkLy4gSXQncyB1c2luZyB0aGUgTUZEIEFQSQo+IGJlY2F1 c2UgdGhlIGZpcm13YXJlIGV4cG9zZXMgbXVsdGlwbGUgc3Vic3lzdGVtcywgYW5kIHRoaXMgbWFw cyB2ZXJ5Cj4gbmljZWx5IHRvIHRoZSBNRkQgbW9kZWwgLSBOSUhpbmcgdGhhdCBzY2FmZm9sZGlu ZyB3b3VsZCByZXF1aXJlIGEgd2hvbGUKPiBidW5jaCBvZiBjdXN0b20gbWF0Y2hpbmcvZGV2aWNl IGNyZWF0aW9uIGNvZGUuCgpJJ20gYWxzbyBhd2FyZSBvZiB0aGUgY29udmVuaWVuY2UgdmFsdWUg b2Yge2FifXVzaW5nIHRoZSBNRkQgQVBJLgoKPiBCdXQgaXQncyBub3QgZXhhY3RseSB5b3VyCj4g dHlwaWNhbCBNRkQgZGV2aWNlIChpdCdzIG5vdCBldmVuIGEgc2VwYXJhdGUgY2hpcCwgaXQncyBw YXJ0IG9mIHRoZSBtYWluCj4gU29DKSwgc28gSSdtIG5vdCBzdXJlIGlmIGl0IHJlYWxseSBiZWxv bmdzIGluIG1mZC8gZnJvbSBhbgo+IG9yZ2FuaXphdGlvbmFsIHN0YW5kcG9pbnQ/CgpUaGVyZSBp cyBhIHN0cm9uZyBhcmd1bWVudCBmb3IgYWxsIFNvQ3MgdG8gYmUgY2xhc3NlZCBhcyAobWFzc2l2 ZSkKTUZEcy4gIEhvd2V2ZXIgc2VlaW5nIGFzIHRoZXkgcmVwcmVzZW50IG1vcmUgb2YgYSB3aG9s ZSBwbGF0Zm9ybSwKcmF0aGVyIHRoYW4gYW4gYWRkLW9uIGNoaXAsIHdlIGhhdmUgaGFkIHRoZSBz ZW5zZSB0byByZXByZXNlbnQgdGhlbQpkaWZmZXJlbnRseS4gIFNvbWUgc3VjaCBzdWJtaXNzaW9u cyBJIGhhdmUgbWFkZSBleHBsaWNpdCByZXF1ZXN0cyB0byBiZQptb3ZlZCBmb3JtIGRyaXZlcnMv bWZkICppbnRvKiBkcml2ZXJzL3BsYXRmb3JtIGluIHRoZSBwYXN0LgoKTW9zdCBTb0NzIGFyZSBz b2xlbHkgcmVwcmVzZW50ZWQgaW4gRFQsIG9taXR0aW5nIHRoZSByZXF1aXJlbWVudCBmb3IKc3Vi c2VxdWVudCBkZXZpY2UgcmVnaXN0cmF0aW9uLiAgSGF2ZSB5b3UgY29uc2lkZXJlZCB0aGlzPyAg SWYgc28sIHdoeQpkb2VzIHRoaXMgbm90IHN1aXQgeW91ciB1c2UtY2FzZT8KClRoZSBsb25nIGFu ZCB0aGUgc2hvcnQgb2YgaXQgaXM7IGlmIHlvdSB3aXNoIHRvIHRyZWF0IHRoaXMgZGV2aWNlLCBv cgphdCBsZWFzdCBhIHNlY3Rpb24gb2YgaXQsIGFzIGEgdHlwZSBvZiBNRkQsIHRoZW4gcGxlYXNl IGRyYWZ0IHRoYXQKcGFydCBvZiBpdCBhcyBhbiBNRkQgZHJpdmVyLCByZXNpZGluZyBpbiBkcml2 ZXJzL21mZC4gIElmIGl0J3MgIm5vdApyZWFsbHkgYW4gTUZEIiwgdGhlbiBmaW5kIGFub3RoZXIg d2F5IHRvIHJlcHJlc2VudCB0aGUgY29uZ2xvbWVyYXRpb24KcGxlYXNlLgoKSWYgdGhlIE1GRCBy b3V0ZSBpcyB0aGUgYmVzdCwgdGhlbiB5b3UgY2FuIHJlZ2lzdGVyIGVhY2ggb2YgdGhlCmRldmlj ZXMsIGluY2x1ZGluZyB0aGUgKi1jb3JlIGZyb20gZHJpdmVycy9tZmQuICBHcmVwIGZvciAiY3Jv c3MtZWMiCmFzIGEgcmVsYXRpdmVseSByZWNlbnRseSBnb29kIGV4YW1wbGUuCgotLSAKTGVlIEpv bmVzIFvmnY7nkLzmlq9dCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxp c3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0 aW5mby9saW51eC1hcm0ta2VybmVsCg==