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 alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) (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 78674C5AD4C for ; Thu, 23 Nov 2023 09:57:23 +0000 (UTC) Received: from alsa1.perex.cz (alsa1.perex.cz [207.180.221.201]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by alsa0.perex.cz (Postfix) with ESMTPS id 629A5DF0; Thu, 23 Nov 2023 10:57:06 +0100 (CET) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa0.perex.cz 629A5DF0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=alsa-project.org; s=default; t=1700733436; bh=c/E0Qa7E8G+LfMJZ/HHiy+vIMgF7AnQYc32VYJ8kfls=; h=Date:From:To:Cc:Subject:In-Reply-To:References:List-Id: List-Archive:List-Help:List-Owner:List-Post:List-Subscribe: List-Unsubscribe:From; b=CH+Jf3DN4/x3K1B8R/UYA5qLgWdeJrBK4aywscy84433JQh0KPUazbsktkq066uYx vfA6M/pAy3ZT/vPypjNj28k2ueQWEGPs9N4Tgvn5ZRLDsvIw0Npm6zW/BdDxGTuD5x Ukt4Ucj4zy2Geaur4ePEHgI/sbdIYzy8yFYAHgGw= Received: by alsa1.perex.cz (Postfix, from userid 50401) id F2C21F80580; Thu, 23 Nov 2023 10:56:45 +0100 (CET) Received: from mailman-core.alsa-project.org (mailman-core.alsa-project.org [10.254.200.10]) by alsa1.perex.cz (Postfix) with ESMTP id D5F94F80587; Thu, 23 Nov 2023 10:56:44 +0100 (CET) Received: by alsa1.perex.cz (Postfix, from userid 50401) id F3D09F802E8; Thu, 23 Nov 2023 10:56:40 +0100 (CET) Received: from relay6-d.mail.gandi.net (relay6-d.mail.gandi.net [IPv6:2001:4b98:dc4:8::226]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by alsa1.perex.cz (Postfix) with ESMTPS id 4FD0FF80249 for ; Thu, 23 Nov 2023 10:56:27 +0100 (CET) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa1.perex.cz 4FD0FF80249 Authentication-Results: alsa1.perex.cz; dkim=pass (2048-bit key, unprotected) header.d=bootlin.com header.i=@bootlin.com header.a=rsa-sha256 header.s=gm1 header.b=m3KZAOdP Received: by mail.gandi.net (Postfix) with ESMTPSA id 78824C0007; Thu, 23 Nov 2023 09:56:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1700733387; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=GU8Gw1SmMIgiO+M24mi6HQAA6719PUVcAqYOHoNvvWM=; b=m3KZAOdPXOgv5o3913EaX280yQcEpQ8qx8PFMHDAEWILDJsPNW0FZN1QqAfBtzSQEZhJN7 qNsK+rbbv0hqOyjCxMpOuHvnWN6u8TbIr/G6Lam/1+HCgP4VaQNTqdKWtsnM0/uC7xF/TH NmLUR1V/Jx4STlCnkmM2nBdsZtyjleG1qWjM6X0MYHd7Fr6tQLoxvwAVIJya0eeoeR7Lls rEzx6yqtkOLFDf+x4dScPQGefPV2jTnZenX4FExWHZX8QGSJopwcIPvInt2DwrYUDc5dFP bH7ePz0nzCeZnYfcNwYuxWwVri4wMYRzMbLko+2Nh354WGgAvBISYEZDUVFpEQ== Date: Thu, 23 Nov 2023 10:56:22 +0100 From: Herve Codina To: Herve Codina , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Andrew Lunn , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Lee Jones , Linus Walleij , Qiang Zhao , Li Yang , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , Shengjiu Wang , Xiubo Li , Fabio Estevam , Nicolin Chen , Christophe Leroy , Randy Dunlap Cc: netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, linux-arm-kernel@lists.infradead.org, alsa-devel@alsa-project.org, Simon Horman , Christophe JAILLET , Thomas Petazzoni Subject: Re: [PATCH v9 00/27] Add support for QMC HDLC, framer infrastructure and PEF2256 framer Message-ID: <20231123105622.6a09b58d@bootlin.com> In-Reply-To: <20231115144007.478111-1-herve.codina@bootlin.com> References: <20231115144007.478111-1-herve.codina@bootlin.com> Organization: Bootlin X-Mailer: Claws Mail 4.1.1 (GTK 3.24.38; x86_64-redhat-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-GND-Sasl: herve.codina@bootlin.com Message-ID-Hash: T42ODFQIZ5FDKTCMBUMCATP6BJGMCH2H X-Message-ID-Hash: T42ODFQIZ5FDKTCMBUMCATP6BJGMCH2H X-MailFrom: herve.codina@bootlin.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-alsa-devel.alsa-project.org-0; header-match-alsa-devel.alsa-project.org-1; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.9 Precedence: list List-Id: "Alsa-devel mailing list for ALSA developers - http://www.alsa-project.org" Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Hi Li, Qiang, This series is waiting for some feedback from your side in order to be merged. This block the entire series. The patches related to the PowerPC QUICC ENGINE QMC and TSA are: - patches 1 to 6 - patches 9 to 19 The patch 7 is a HDLC driver that uses the QMC and the patch 20 improves this HDLC driver. Can you provide some review on these patches ? Further more, do you mind if this series and so patches related to QMC and TSA are merged on a net branch ? Best regards, Hervé On Wed, 15 Nov 2023 15:39:36 +0100 Herve Codina wrote: > Hi, > > I have a system where I need to handle an HDLC interface and some audio > data. > > The HDLC data are transferred using a TDM bus on which a PEF2256 > (E1/T1 framer) is present. The PEF2256 transfers data from/to the TDM > bus to/from the E1 line. This PEF2256 is connected to a PowerQUICC SoC > for the control path and the TDM is connected to the SoC (QMC component) > for the data path. > > From the QMC HDLC driver, I need to handle HDLC data using the QMC, > carrier detection using the PEF2256 (E1 line carrier) and set/get some > PEF2256 configuration. > > The QMC HDLC driver considers the PEF2256 as a generic framer. > It performs operations that involve the PEF2256 through the generic > framer API. > > The audio data are exchanged with the PEF2256 using a CPU DAI connected > to the TDM bus through the QMC and the PEF2256 needs to be seen as a > codec in order to be linked to the CPU DAI. > The codec handles the carrier detection using the PEF2256 and reports > the carrier state to the ALSA subsystem using the ASoC jack detection. > > The codec, even if instantiated by the PEF2256 driver, considers the > PEF2256 as a generic framer. > > The generic framer has: > - 2 consumers (QMC HDLC drv and codec) > - 1 provider (PEF2256) > > So, the design is the following: > +------------------+ +---------+ > | QMC | <- TDM -> | PEF2256 | <-> E1 > +---------+ | +-------------+ | | | > | CPU DAI | <-data--> | QMC channel | | | | > +---------+ | +-------------+ | | | > +--------------+ | +-------------+ | | | > | QMC HDLC drv | <-data--> | QMC channel | | | | > +--------------+ | +-------------+ | | | > ^ +------------------+ | | > | +--------+ +-------------+ | | > +-> | framer | <-> | PEF2256 drv | <- local bus ->| | > | | | | +---------+ > +-> | | | | > | +--------+ | +-------+ | > +-------------------> | codec | | > | +-------+ | > +-------------+ > > Further more, the TDM timeslots used by the QMC HDLC driver need to be > configured at runtime (QMC dynamic timeslots). > > Several weeks ago, I sent two series related to this topic: > - Add the Lantiq PEF2256 audio support [1] > - RFC Add support for QMC HDLC and PHY [2] > This current series is a rework of these two series taking into account > feedbacks previously received. > > In order to implement all of this, I do the following: > 1) Perform some fixes (patches 1, 2, 3, 4, 5 ) > 2) Introduce the QMC HDLC driver (patches 6, 7, 8) > 3) Add QMC dynamic timeslot support (patches 9 - 19) > 4) Add timeslots change support in QMC HDLC (patch 20) > 5) Introduce framer infrastructure (patch 21) > 6) Add PEF2256 framer provider (patches 22, 23, 24, 25) > 7) Add framer codec as a framer consumer (patch 26) > 8) Add framer support as a framer consumer in QMC HDLC (patch 27) > > The series contains the full story and detailed modifications. > If needed, the series can be split and/or commits can be squashed. > Let me know. > > Compare to the previous iteration > https://lore.kernel.org/linux-kernel/20231011061437.64213-1-herve.codina@bootlin.com/ > This v9 series: > - Removes some patches already applied > - Adds some 'Acked-by' tags > > Best regards, > Hervé > > [1]: https://lore.kernel.org/all/20230417171601.74656-1-herve.codina@bootlin.com/ > [2]: https://lore.kernel.org/all/20230323103154.264546-1-herve.codina@bootlin.com/ > > Changes v8 -> v9 > > - Removed Patches 6, 7 and 8 (patches applied) > > - Patches 7, 20, 21, 23 (patches 10, 23, 24, 26 in v8) > Add 'Acked-by: Jakub Kicinski ' > > Changes v7 -> v8 > > - Patch 10 > Fix a race condition when stopping the queue in qmc_hdlc_close() > > - Patch 24 > Move to menuconfig and hide CONFIG_GENERIC_FRAMER > Remove unneeded check (defensive programming) > Remove unneeded variable assignment > > - Patch 25 > Add 'Reviewed-by: Rob Herring ' > > - Patch 26 > Use array notation for 'audio_devs' > > Changes v6 -> v7 > > - Patch 8 > Move the 'compatible' property to the first property. > Add device/SoC specific compatible strings. > Add 'Reviewed-by: Rob Herring ' > > - Patch 25 > Remove '$ref' from the lantiq,data-rate-bps property. '-bps' is now > a standard suffix. > > Changes v5 -> v6 > > - All patches > Remove 'Signed-off-by: Christophe Leroy ' > These Sob were added by Christophe when he sent the v4 while I was > on vacation. > https://lore.kernel.org/linux-kernel/992a2b31-e21f-eee3-8bfc-a65b69fe5bd7@csgroup.eu/ > > - Patch 6, 7 > Add 'Acked-by: Conor Dooley ' > Add 'Acked-by: Rob Herring ' > > - Patch 8 > Add a constraint on fsl,framer. > > - Patch 25 > Fix clocks description (inconsistent capitalisation) > Use '8-bit' instead of '8bit' > Add 'Reviewed-by: Christophe Leroy ' > > - Removed patch 26 (patch applied) > > - Patch 26 (patch 27 in v5) > Add 'Reviewed-by: Linus Walleij ' > > - Patch 27 (patch 28 in v5) > Move registers definition to .c file and remove .h file > Add 'select PINCONF' in Kconfig > Use dev_err_probe() > Add 'Reviewed-by: Linus Walleij ' > > - Patch 28 (patch 29 in v5) > Remove .h file > > Changes v4 -> v5 > > - Patches 1 to 5 > No changes > > - Patch 6 (new in v5) > Fix QMC binding example > > - Patch 7 (new in v5) > Add missing 'additionalProperties: false' > > - Patch 8 (new in v5, replace v4 patch 6) > Add QMC HDLC properties in the QMC channel node > Renamed the 'framer' property to 'fsl,framer' > > - Patch 9 (new in v5) > Add support for QMC child devices > > - Patch 10 (patch 7 in v4) > No changes > > - Patch 11 (patch 8 in v4) > Remove fsl,qmc-hdlc.yaml (no more existing file) > > - Patches 12 to 22 (patches 9 to 19 in v4) > No changes > > - Patch 23 (patch 20 in v4) > Remove unused variable initializations > Remove extra space > > - Patch 24 (patch 21 in v4) > Improve Kconfig help text > Fix variable declaration (reverse xmas tree) > Fix typos and extra spaces > Fix documentation issues raised by 'kernel-doc -none' > Move of_node_put() and kfree() out of the mutex > Replace ida_simple_{get,remove}() by ida_{alloc,free}() > Support framer device-tree nodes without '#framer-cells' property > > - Patch 25 (patch 22 in v4) > Fix $ref in the pinctrl subnode > Remove '#framer-cells' property > Add needed '|' > > - Patch 26 (patch 23 in v4) > Fix a typo in the commit subject > > - Patches 27, 28, 29 (patch 24, 25, 26 in v4) > No changes > > - Patch 30 (patch 27 in v4) > Fix a typo in the commit log > > - Patch 31 (patch 28 in v4) > Used 'fsl,framer' property name instead of 'framer' > > Changes v3 -> v4 > > - Patch 21 > Fixes build failure with CONFIG_MODULES > > Changes v2 -> v3 > > - Patches 1, 2, 3, 4 > Add 'Reviewed-by: Christophe Leroy ' > > - New patch > Remove inline keyword from the existing registers accessors helpers > > - Patch 6 (patches 5, 27 in v2) > Update the binding title > Squash patch 27 > > - Patch 7 (patch 6 in v2) > Remove the cast in netdev_to_qmc_hdlc() > Add 'Reviewed-by: Christophe Leroy ' > > - Patch 8 (patch 7 in v2): No change > > - Patches 9, 10 (patches 8, 9 in v2) > Add 'Reviewed-by: Christophe Leroy ' > > - Patch 11 (patch 10 in v2) > Remove inline keyword from the introduced qmc_clrsetbits16() helper > Add 'Reviewed-by: Christophe Leroy ' > > - Patches 12, 13, 14, 15, 16, 17, 18, 19, 20 > Add 'Reviewed-by: Christophe Leroy ' > > - Patch 21 (patch 20 in v2) > Remove unneeded framer NULL pointer check > Add 'Reviewed-by: Christophe Leroy ' > > - Patch 22 (patch 21 in v2) > Change sclkr and sclkx clocks description > Remove the framer phandle property from the framer subnodes > (ie. from framer-codec nodes) > > - Patch 23 (patch 22 in v2) > Initialize 'disabled' variable at declaration > Fix commit log > Add 'Reviewed-by: Christophe Leroy ' > > - Patch 24 (patch 23 in v2) > Remove inline keyword from the existing registers accessors helpers > Use dev_warn_ratelimited() in default interrupt handler > Add 'Reviewed-by: Christophe Leroy ' > > - Patch 25 (patch 24 in v2) > Replace #include "linux/bitfield.h" by #include > Fold the pinctrl anonymous struct into the struct pef2256_pinctrl > Update commit log > Add 'Reviewed-by: Christophe Leroy ' > > - Patch 26 (patch 25 in v2) > Add 'Reviewed-by: Christophe Leroy ' > > - Patch 27 (patch 26 in v2) > Fix error message > Changed the ch.max computation in framer_dai_hw_rule_channels_by_format() > Add 'Reviewed-by: Christophe Leroy ' > > - Patch 28 > Add 'Reviewed-by: Christophe Leroy ' > > Changes v1 -> v2 > - Patches 1, 2 (New in v2) > Fix __iomem addresses declaration > > - Patch 19 (17 in v1) > Fix a compilation warning > > - Patch 26 (24 in v1) > Fix a typo in Kconfig file > Fix issues raised by sparse (make C=1) > > Herve Codina (27): > soc: fsl: cpm1: tsa: Fix __iomem addresses declaration > soc: fsl: cpm1: qmc: Fix __iomem addresses declaration > soc: fsl: cpm1: qmc: Fix rx channel reset > soc: fsl: cpm1: qmc: Extend the API to provide Rx status > soc: fsl: cpm1: qmc: Remove inline function specifiers > soc: fsl: cpm1: qmc: Add support for child devices > net: wan: Add support for QMC HDLC > MAINTAINERS: Add the Freescale QMC HDLC driver entry > soc: fsl: cpm1: qmc: Introduce available timeslots masks > soc: fsl: cpm1: qmc: Rename qmc_setup_tsa* to qmc_init_tsa* > soc: fsl: cpm1: qmc: Introduce qmc_chan_setup_tsa* > soc: fsl: cpm1: qmc: Remove no more needed checks from > qmc_check_chans() > soc: fsl: cpm1: qmc: Check available timeslots in qmc_check_chans() > soc: fsl: cpm1: qmc: Add support for disabling channel TSA entries > soc: fsl: cpm1: qmc: Split Tx and Rx TSA entries setup > soc: fsl: cpm1: qmc: Introduce is_tsa_64rxtx flag > soc: fsl: cpm1: qmc: Handle timeslot entries at channel start() and > stop() > soc: fsl: cpm1: qmc: Remove timeslots handling from setup_chan() > soc: fsl: cpm1: qmc: Introduce functions to change timeslots at > runtime > wan: qmc_hdlc: Add runtime timeslots changes support > net: wan: Add framer framework support > dt-bindings: net: Add the Lantiq PEF2256 E1/T1/J1 framer > net: wan: framer: Add support for the Lantiq PEF2256 framer > pinctrl: Add support for the Lantic PEF2256 pinmux > MAINTAINERS: Add the Lantiq PEF2256 driver entry > ASoC: codecs: Add support for the framer codec > net: wan: fsl_qmc_hdlc: Add framer support > > .../bindings/net/lantiq,pef2256.yaml | 213 +++++ > MAINTAINERS | 15 + > drivers/net/wan/Kconfig | 14 + > drivers/net/wan/Makefile | 3 + > drivers/net/wan/framer/Kconfig | 41 + > drivers/net/wan/framer/Makefile | 7 + > drivers/net/wan/framer/framer-core.c | 882 ++++++++++++++++++ > drivers/net/wan/framer/pef2256/Makefile | 8 + > drivers/net/wan/framer/pef2256/pef2256-regs.h | 250 +++++ > drivers/net/wan/framer/pef2256/pef2256.c | 880 +++++++++++++++++ > drivers/net/wan/fsl_qmc_hdlc.c | 820 ++++++++++++++++ > drivers/pinctrl/Kconfig | 15 + > drivers/pinctrl/Makefile | 1 + > drivers/pinctrl/pinctrl-pef2256.c | 358 +++++++ > drivers/soc/fsl/qe/qmc.c | 592 +++++++++--- > drivers/soc/fsl/qe/tsa.c | 22 +- > include/linux/framer/framer-provider.h | 194 ++++ > include/linux/framer/framer.h | 205 ++++ > include/linux/framer/pef2256.h | 31 + > include/soc/fsl/qe/qmc.h | 27 +- > sound/soc/codecs/Kconfig | 15 + > sound/soc/codecs/Makefile | 2 + > sound/soc/codecs/framer-codec.c | 413 ++++++++ > sound/soc/fsl/fsl_qmc_audio.c | 2 +- > 24 files changed, 4873 insertions(+), 137 deletions(-) > create mode 100644 Documentation/devicetree/bindings/net/lantiq,pef2256.yaml > create mode 100644 drivers/net/wan/framer/Kconfig > create mode 100644 drivers/net/wan/framer/Makefile > create mode 100644 drivers/net/wan/framer/framer-core.c > create mode 100644 drivers/net/wan/framer/pef2256/Makefile > create mode 100644 drivers/net/wan/framer/pef2256/pef2256-regs.h > create mode 100644 drivers/net/wan/framer/pef2256/pef2256.c > create mode 100644 drivers/net/wan/fsl_qmc_hdlc.c > create mode 100644 drivers/pinctrl/pinctrl-pef2256.c > create mode 100644 include/linux/framer/framer-provider.h > create mode 100644 include/linux/framer/framer.h > create mode 100644 include/linux/framer/pef2256.h > create mode 100644 sound/soc/codecs/framer-codec.c > -- Hervé Codina, Bootlin Embedded Linux and Kernel engineering https://bootlin.com 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 lists.ozlabs.org (lists.ozlabs.org [112.213.38.117]) (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 C5B8BC61D85 for ; Thu, 23 Nov 2023 09:57:26 +0000 (UTC) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=bootlin.com header.i=@bootlin.com header.a=rsa-sha256 header.s=gm1 header.b=m3KZAOdP; dkim-atps=neutral Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4SbYSP3N60z3dLY for ; Thu, 23 Nov 2023 20:57:25 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=bootlin.com header.i=@bootlin.com header.a=rsa-sha256 header.s=gm1 header.b=m3KZAOdP; dkim-atps=neutral Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=bootlin.com (client-ip=217.70.183.198; helo=relay6-d.mail.gandi.net; envelope-from=herve.codina@bootlin.com; receiver=lists.ozlabs.org) Received: from relay6-d.mail.gandi.net (relay6-d.mail.gandi.net [217.70.183.198]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4SbYRS0rtLz3d9g for ; Thu, 23 Nov 2023 20:56:33 +1100 (AEDT) Received: by mail.gandi.net (Postfix) with ESMTPSA id 78824C0007; Thu, 23 Nov 2023 09:56:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1700733387; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=GU8Gw1SmMIgiO+M24mi6HQAA6719PUVcAqYOHoNvvWM=; b=m3KZAOdPXOgv5o3913EaX280yQcEpQ8qx8PFMHDAEWILDJsPNW0FZN1QqAfBtzSQEZhJN7 qNsK+rbbv0hqOyjCxMpOuHvnWN6u8TbIr/G6Lam/1+HCgP4VaQNTqdKWtsnM0/uC7xF/TH NmLUR1V/Jx4STlCnkmM2nBdsZtyjleG1qWjM6X0MYHd7Fr6tQLoxvwAVIJya0eeoeR7Lls rEzx6yqtkOLFDf+x4dScPQGefPV2jTnZenX4FExWHZX8QGSJopwcIPvInt2DwrYUDc5dFP bH7ePz0nzCeZnYfcNwYuxWwVri4wMYRzMbLko+2Nh354WGgAvBISYEZDUVFpEQ== Date: Thu, 23 Nov 2023 10:56:22 +0100 From: Herve Codina To: Herve Codina , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Andrew Lunn , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Lee Jones , Linus Walleij , Qiang Zhao , Li Yang , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , Shengjiu Wang , Xiubo Li , Fabio Estevam , Nicolin Chen , Christophe Leroy , Randy Dunlap Subject: Re: [PATCH v9 00/27] Add support for QMC HDLC, framer infrastructure and PEF2256 framer Message-ID: <20231123105622.6a09b58d@bootlin.com> In-Reply-To: <20231115144007.478111-1-herve.codina@bootlin.com> References: <20231115144007.478111-1-herve.codina@bootlin.com> Organization: Bootlin X-Mailer: Claws Mail 4.1.1 (GTK 3.24.38; x86_64-redhat-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-GND-Sasl: herve.codina@bootlin.com X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, alsa-devel@alsa-project.org, Thomas Petazzoni , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, Christophe JAILLET , Simon Horman , linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org Errors-To: linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org Sender: "Linuxppc-dev" Hi Li, Qiang, This series is waiting for some feedback from your side in order to be merged. This block the entire series. The patches related to the PowerPC QUICC ENGINE QMC and TSA are: - patches 1 to 6 - patches 9 to 19 The patch 7 is a HDLC driver that uses the QMC and the patch 20 improves this HDLC driver. Can you provide some review on these patches ? Further more, do you mind if this series and so patches related to QMC and TSA are merged on a net branch ? Best regards, Hervé On Wed, 15 Nov 2023 15:39:36 +0100 Herve Codina wrote: > Hi, > > I have a system where I need to handle an HDLC interface and some audio > data. > > The HDLC data are transferred using a TDM bus on which a PEF2256 > (E1/T1 framer) is present. The PEF2256 transfers data from/to the TDM > bus to/from the E1 line. This PEF2256 is connected to a PowerQUICC SoC > for the control path and the TDM is connected to the SoC (QMC component) > for the data path. > > From the QMC HDLC driver, I need to handle HDLC data using the QMC, > carrier detection using the PEF2256 (E1 line carrier) and set/get some > PEF2256 configuration. > > The QMC HDLC driver considers the PEF2256 as a generic framer. > It performs operations that involve the PEF2256 through the generic > framer API. > > The audio data are exchanged with the PEF2256 using a CPU DAI connected > to the TDM bus through the QMC and the PEF2256 needs to be seen as a > codec in order to be linked to the CPU DAI. > The codec handles the carrier detection using the PEF2256 and reports > the carrier state to the ALSA subsystem using the ASoC jack detection. > > The codec, even if instantiated by the PEF2256 driver, considers the > PEF2256 as a generic framer. > > The generic framer has: > - 2 consumers (QMC HDLC drv and codec) > - 1 provider (PEF2256) > > So, the design is the following: > +------------------+ +---------+ > | QMC | <- TDM -> | PEF2256 | <-> E1 > +---------+ | +-------------+ | | | > | CPU DAI | <-data--> | QMC channel | | | | > +---------+ | +-------------+ | | | > +--------------+ | +-------------+ | | | > | QMC HDLC drv | <-data--> | QMC channel | | | | > +--------------+ | +-------------+ | | | > ^ +------------------+ | | > | +--------+ +-------------+ | | > +-> | framer | <-> | PEF2256 drv | <- local bus ->| | > | | | | +---------+ > +-> | | | | > | +--------+ | +-------+ | > +-------------------> | codec | | > | +-------+ | > +-------------+ > > Further more, the TDM timeslots used by the QMC HDLC driver need to be > configured at runtime (QMC dynamic timeslots). > > Several weeks ago, I sent two series related to this topic: > - Add the Lantiq PEF2256 audio support [1] > - RFC Add support for QMC HDLC and PHY [2] > This current series is a rework of these two series taking into account > feedbacks previously received. > > In order to implement all of this, I do the following: > 1) Perform some fixes (patches 1, 2, 3, 4, 5 ) > 2) Introduce the QMC HDLC driver (patches 6, 7, 8) > 3) Add QMC dynamic timeslot support (patches 9 - 19) > 4) Add timeslots change support in QMC HDLC (patch 20) > 5) Introduce framer infrastructure (patch 21) > 6) Add PEF2256 framer provider (patches 22, 23, 24, 25) > 7) Add framer codec as a framer consumer (patch 26) > 8) Add framer support as a framer consumer in QMC HDLC (patch 27) > > The series contains the full story and detailed modifications. > If needed, the series can be split and/or commits can be squashed. > Let me know. > > Compare to the previous iteration > https://lore.kernel.org/linux-kernel/20231011061437.64213-1-herve.codina@bootlin.com/ > This v9 series: > - Removes some patches already applied > - Adds some 'Acked-by' tags > > Best regards, > Hervé > > [1]: https://lore.kernel.org/all/20230417171601.74656-1-herve.codina@bootlin.com/ > [2]: https://lore.kernel.org/all/20230323103154.264546-1-herve.codina@bootlin.com/ > > Changes v8 -> v9 > > - Removed Patches 6, 7 and 8 (patches applied) > > - Patches 7, 20, 21, 23 (patches 10, 23, 24, 26 in v8) > Add 'Acked-by: Jakub Kicinski ' > > Changes v7 -> v8 > > - Patch 10 > Fix a race condition when stopping the queue in qmc_hdlc_close() > > - Patch 24 > Move to menuconfig and hide CONFIG_GENERIC_FRAMER > Remove unneeded check (defensive programming) > Remove unneeded variable assignment > > - Patch 25 > Add 'Reviewed-by: Rob Herring ' > > - Patch 26 > Use array notation for 'audio_devs' > > Changes v6 -> v7 > > - Patch 8 > Move the 'compatible' property to the first property. > Add device/SoC specific compatible strings. > Add 'Reviewed-by: Rob Herring ' > > - Patch 25 > Remove '$ref' from the lantiq,data-rate-bps property. '-bps' is now > a standard suffix. > > Changes v5 -> v6 > > - All patches > Remove 'Signed-off-by: Christophe Leroy ' > These Sob were added by Christophe when he sent the v4 while I was > on vacation. > https://lore.kernel.org/linux-kernel/992a2b31-e21f-eee3-8bfc-a65b69fe5bd7@csgroup.eu/ > > - Patch 6, 7 > Add 'Acked-by: Conor Dooley ' > Add 'Acked-by: Rob Herring ' > > - Patch 8 > Add a constraint on fsl,framer. > > - Patch 25 > Fix clocks description (inconsistent capitalisation) > Use '8-bit' instead of '8bit' > Add 'Reviewed-by: Christophe Leroy ' > > - Removed patch 26 (patch applied) > > - Patch 26 (patch 27 in v5) > Add 'Reviewed-by: Linus Walleij ' > > - Patch 27 (patch 28 in v5) > Move registers definition to .c file and remove .h file > Add 'select PINCONF' in Kconfig > Use dev_err_probe() > Add 'Reviewed-by: Linus Walleij ' > > - Patch 28 (patch 29 in v5) > Remove .h file > > Changes v4 -> v5 > > - Patches 1 to 5 > No changes > > - Patch 6 (new in v5) > Fix QMC binding example > > - Patch 7 (new in v5) > Add missing 'additionalProperties: false' > > - Patch 8 (new in v5, replace v4 patch 6) > Add QMC HDLC properties in the QMC channel node > Renamed the 'framer' property to 'fsl,framer' > > - Patch 9 (new in v5) > Add support for QMC child devices > > - Patch 10 (patch 7 in v4) > No changes > > - Patch 11 (patch 8 in v4) > Remove fsl,qmc-hdlc.yaml (no more existing file) > > - Patches 12 to 22 (patches 9 to 19 in v4) > No changes > > - Patch 23 (patch 20 in v4) > Remove unused variable initializations > Remove extra space > > - Patch 24 (patch 21 in v4) > Improve Kconfig help text > Fix variable declaration (reverse xmas tree) > Fix typos and extra spaces > Fix documentation issues raised by 'kernel-doc -none' > Move of_node_put() and kfree() out of the mutex > Replace ida_simple_{get,remove}() by ida_{alloc,free}() > Support framer device-tree nodes without '#framer-cells' property > > - Patch 25 (patch 22 in v4) > Fix $ref in the pinctrl subnode > Remove '#framer-cells' property > Add needed '|' > > - Patch 26 (patch 23 in v4) > Fix a typo in the commit subject > > - Patches 27, 28, 29 (patch 24, 25, 26 in v4) > No changes > > - Patch 30 (patch 27 in v4) > Fix a typo in the commit log > > - Patch 31 (patch 28 in v4) > Used 'fsl,framer' property name instead of 'framer' > > Changes v3 -> v4 > > - Patch 21 > Fixes build failure with CONFIG_MODULES > > Changes v2 -> v3 > > - Patches 1, 2, 3, 4 > Add 'Reviewed-by: Christophe Leroy ' > > - New patch > Remove inline keyword from the existing registers accessors helpers > > - Patch 6 (patches 5, 27 in v2) > Update the binding title > Squash patch 27 > > - Patch 7 (patch 6 in v2) > Remove the cast in netdev_to_qmc_hdlc() > Add 'Reviewed-by: Christophe Leroy ' > > - Patch 8 (patch 7 in v2): No change > > - Patches 9, 10 (patches 8, 9 in v2) > Add 'Reviewed-by: Christophe Leroy ' > > - Patch 11 (patch 10 in v2) > Remove inline keyword from the introduced qmc_clrsetbits16() helper > Add 'Reviewed-by: Christophe Leroy ' > > - Patches 12, 13, 14, 15, 16, 17, 18, 19, 20 > Add 'Reviewed-by: Christophe Leroy ' > > - Patch 21 (patch 20 in v2) > Remove unneeded framer NULL pointer check > Add 'Reviewed-by: Christophe Leroy ' > > - Patch 22 (patch 21 in v2) > Change sclkr and sclkx clocks description > Remove the framer phandle property from the framer subnodes > (ie. from framer-codec nodes) > > - Patch 23 (patch 22 in v2) > Initialize 'disabled' variable at declaration > Fix commit log > Add 'Reviewed-by: Christophe Leroy ' > > - Patch 24 (patch 23 in v2) > Remove inline keyword from the existing registers accessors helpers > Use dev_warn_ratelimited() in default interrupt handler > Add 'Reviewed-by: Christophe Leroy ' > > - Patch 25 (patch 24 in v2) > Replace #include "linux/bitfield.h" by #include > Fold the pinctrl anonymous struct into the struct pef2256_pinctrl > Update commit log > Add 'Reviewed-by: Christophe Leroy ' > > - Patch 26 (patch 25 in v2) > Add 'Reviewed-by: Christophe Leroy ' > > - Patch 27 (patch 26 in v2) > Fix error message > Changed the ch.max computation in framer_dai_hw_rule_channels_by_format() > Add 'Reviewed-by: Christophe Leroy ' > > - Patch 28 > Add 'Reviewed-by: Christophe Leroy ' > > Changes v1 -> v2 > - Patches 1, 2 (New in v2) > Fix __iomem addresses declaration > > - Patch 19 (17 in v1) > Fix a compilation warning > > - Patch 26 (24 in v1) > Fix a typo in Kconfig file > Fix issues raised by sparse (make C=1) > > Herve Codina (27): > soc: fsl: cpm1: tsa: Fix __iomem addresses declaration > soc: fsl: cpm1: qmc: Fix __iomem addresses declaration > soc: fsl: cpm1: qmc: Fix rx channel reset > soc: fsl: cpm1: qmc: Extend the API to provide Rx status > soc: fsl: cpm1: qmc: Remove inline function specifiers > soc: fsl: cpm1: qmc: Add support for child devices > net: wan: Add support for QMC HDLC > MAINTAINERS: Add the Freescale QMC HDLC driver entry > soc: fsl: cpm1: qmc: Introduce available timeslots masks > soc: fsl: cpm1: qmc: Rename qmc_setup_tsa* to qmc_init_tsa* > soc: fsl: cpm1: qmc: Introduce qmc_chan_setup_tsa* > soc: fsl: cpm1: qmc: Remove no more needed checks from > qmc_check_chans() > soc: fsl: cpm1: qmc: Check available timeslots in qmc_check_chans() > soc: fsl: cpm1: qmc: Add support for disabling channel TSA entries > soc: fsl: cpm1: qmc: Split Tx and Rx TSA entries setup > soc: fsl: cpm1: qmc: Introduce is_tsa_64rxtx flag > soc: fsl: cpm1: qmc: Handle timeslot entries at channel start() and > stop() > soc: fsl: cpm1: qmc: Remove timeslots handling from setup_chan() > soc: fsl: cpm1: qmc: Introduce functions to change timeslots at > runtime > wan: qmc_hdlc: Add runtime timeslots changes support > net: wan: Add framer framework support > dt-bindings: net: Add the Lantiq PEF2256 E1/T1/J1 framer > net: wan: framer: Add support for the Lantiq PEF2256 framer > pinctrl: Add support for the Lantic PEF2256 pinmux > MAINTAINERS: Add the Lantiq PEF2256 driver entry > ASoC: codecs: Add support for the framer codec > net: wan: fsl_qmc_hdlc: Add framer support > > .../bindings/net/lantiq,pef2256.yaml | 213 +++++ > MAINTAINERS | 15 + > drivers/net/wan/Kconfig | 14 + > drivers/net/wan/Makefile | 3 + > drivers/net/wan/framer/Kconfig | 41 + > drivers/net/wan/framer/Makefile | 7 + > drivers/net/wan/framer/framer-core.c | 882 ++++++++++++++++++ > drivers/net/wan/framer/pef2256/Makefile | 8 + > drivers/net/wan/framer/pef2256/pef2256-regs.h | 250 +++++ > drivers/net/wan/framer/pef2256/pef2256.c | 880 +++++++++++++++++ > drivers/net/wan/fsl_qmc_hdlc.c | 820 ++++++++++++++++ > drivers/pinctrl/Kconfig | 15 + > drivers/pinctrl/Makefile | 1 + > drivers/pinctrl/pinctrl-pef2256.c | 358 +++++++ > drivers/soc/fsl/qe/qmc.c | 592 +++++++++--- > drivers/soc/fsl/qe/tsa.c | 22 +- > include/linux/framer/framer-provider.h | 194 ++++ > include/linux/framer/framer.h | 205 ++++ > include/linux/framer/pef2256.h | 31 + > include/soc/fsl/qe/qmc.h | 27 +- > sound/soc/codecs/Kconfig | 15 + > sound/soc/codecs/Makefile | 2 + > sound/soc/codecs/framer-codec.c | 413 ++++++++ > sound/soc/fsl/fsl_qmc_audio.c | 2 +- > 24 files changed, 4873 insertions(+), 137 deletions(-) > create mode 100644 Documentation/devicetree/bindings/net/lantiq,pef2256.yaml > create mode 100644 drivers/net/wan/framer/Kconfig > create mode 100644 drivers/net/wan/framer/Makefile > create mode 100644 drivers/net/wan/framer/framer-core.c > create mode 100644 drivers/net/wan/framer/pef2256/Makefile > create mode 100644 drivers/net/wan/framer/pef2256/pef2256-regs.h > create mode 100644 drivers/net/wan/framer/pef2256/pef2256.c > create mode 100644 drivers/net/wan/fsl_qmc_hdlc.c > create mode 100644 drivers/pinctrl/pinctrl-pef2256.c > create mode 100644 include/linux/framer/framer-provider.h > create mode 100644 include/linux/framer/framer.h > create mode 100644 include/linux/framer/pef2256.h > create mode 100644 sound/soc/codecs/framer-codec.c > -- Hervé Codina, Bootlin Embedded Linux and Kernel engineering https://bootlin.com 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 43E2BC61D85 for ; Thu, 23 Nov 2023 09:57: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:MIME-Version:References:In-Reply-To: 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=kujpAr7BNNI5NpGY/QBJhmPPDV+jWAj6sZ6NBrRVcwk=; b=JEJvRbdYYbgvDb XszIwpcjsEwksOgY75sSYQUcMDU3kTc5oKwUztu8u/tRzbnzb3Z/6hKg4voToBVgCW2CgSUJF7FA/ puBxRyY4HShVe8/nqwD2xRq+5jfX22/uZ6CC4PQYuQMDFFboPpldP00/7Yg8SvzyqK/kgxNgeh+VF gSgtXSEo5v0AfYGYY6bDwREOJ3c29Ldq24BBOoeoADgc4Dl/bPq5dPESmoNyMW9Qo02goPvWS3WdJ cbsWZ+/8RFJZXF1xkQLtCLubXYophHvdpq//DAFGUBwvhpF+x6dmTISfO+P731iXO9O5RvJOProlg yYtvkRuTvnxqjmSGjPSQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r66Ro-004K0t-0L; Thu, 23 Nov 2023 09:56:36 +0000 Received: from relay6-d.mail.gandi.net ([217.70.183.198]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1r66Rk-004Jz7-2e for linux-arm-kernel@lists.infradead.org; Thu, 23 Nov 2023 09:56:35 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id 78824C0007; Thu, 23 Nov 2023 09:56:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1700733387; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=GU8Gw1SmMIgiO+M24mi6HQAA6719PUVcAqYOHoNvvWM=; b=m3KZAOdPXOgv5o3913EaX280yQcEpQ8qx8PFMHDAEWILDJsPNW0FZN1QqAfBtzSQEZhJN7 qNsK+rbbv0hqOyjCxMpOuHvnWN6u8TbIr/G6Lam/1+HCgP4VaQNTqdKWtsnM0/uC7xF/TH NmLUR1V/Jx4STlCnkmM2nBdsZtyjleG1qWjM6X0MYHd7Fr6tQLoxvwAVIJya0eeoeR7Lls rEzx6yqtkOLFDf+x4dScPQGefPV2jTnZenX4FExWHZX8QGSJopwcIPvInt2DwrYUDc5dFP bH7ePz0nzCeZnYfcNwYuxWwVri4wMYRzMbLko+2Nh354WGgAvBISYEZDUVFpEQ== Date: Thu, 23 Nov 2023 10:56:22 +0100 From: Herve Codina To: Herve Codina , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Andrew Lunn , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Lee Jones , Linus Walleij , Qiang Zhao , Li Yang , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , Shengjiu Wang , Xiubo Li , Fabio Estevam , Nicolin Chen , Christophe Leroy , Randy Dunlap Cc: netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, linux-arm-kernel@lists.infradead.org, alsa-devel@alsa-project.org, Simon Horman , Christophe JAILLET , Thomas Petazzoni Subject: Re: [PATCH v9 00/27] Add support for QMC HDLC, framer infrastructure and PEF2256 framer Message-ID: <20231123105622.6a09b58d@bootlin.com> In-Reply-To: <20231115144007.478111-1-herve.codina@bootlin.com> References: <20231115144007.478111-1-herve.codina@bootlin.com> Organization: Bootlin X-Mailer: Claws Mail 4.1.1 (GTK 3.24.38; x86_64-redhat-linux-gnu) MIME-Version: 1.0 X-GND-Sasl: herve.codina@bootlin.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231123_015633_123223_443098E7 X-CRM114-Status: GOOD ( 44.63 ) 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 SGkgTGksIFFpYW5nLAoKVGhpcyBzZXJpZXMgaXMgd2FpdGluZyBmb3Igc29tZSBmZWVkYmFjayBm cm9tIHlvdXIgc2lkZSBpbiBvcmRlciB0byBiZSBtZXJnZWQuClRoaXMgYmxvY2sgdGhlIGVudGly ZSBzZXJpZXMuCgpUaGUgcGF0Y2hlcyByZWxhdGVkIHRvIHRoZSBQb3dlclBDIFFVSUNDIEVOR0lO RSBRTUMgYW5kIFRTQSBhcmU6Ci0gcGF0Y2hlcyAxIHRvIDYKLSBwYXRjaGVzIDkgdG8gMTkKClRo ZSBwYXRjaCA3IGlzIGEgSERMQyBkcml2ZXIgdGhhdCB1c2VzIHRoZSBRTUMgYW5kIHRoZSBwYXRj aCAyMCBpbXByb3ZlcyB0aGlzCkhETEMgZHJpdmVyLgoKQ2FuIHlvdSBwcm92aWRlIHNvbWUgcmV2 aWV3IG9uIHRoZXNlIHBhdGNoZXMgPwpGdXJ0aGVyIG1vcmUsIGRvIHlvdSBtaW5kIGlmIHRoaXMg c2VyaWVzIGFuZCBzbyBwYXRjaGVzIHJlbGF0ZWQgdG8gUU1DIGFuZCBUU0EKYXJlIG1lcmdlZCBv biBhIG5ldCBicmFuY2ggPwoKQmVzdCByZWdhcmRzLApIZXJ2w6kKCk9uIFdlZCwgMTUgTm92IDIw MjMgMTU6Mzk6MzYgKzAxMDAKSGVydmUgQ29kaW5hIDxoZXJ2ZS5jb2RpbmFAYm9vdGxpbi5jb20+ IHdyb3RlOgoKPiBIaSwKPiAKPiBJIGhhdmUgYSBzeXN0ZW0gd2hlcmUgSSBuZWVkIHRvIGhhbmRs ZSBhbiBIRExDIGludGVyZmFjZSBhbmQgc29tZSBhdWRpbwo+IGRhdGEuCj4gCj4gVGhlIEhETEMg ZGF0YSBhcmUgdHJhbnNmZXJyZWQgdXNpbmcgYSBURE0gYnVzIG9uIHdoaWNoIGEgUEVGMjI1Ngo+ IChFMS9UMSBmcmFtZXIpIGlzIHByZXNlbnQuIFRoZSBQRUYyMjU2IHRyYW5zZmVycyBkYXRhIGZy b20vdG8gdGhlIFRETQo+IGJ1cyB0by9mcm9tIHRoZSBFMSBsaW5lLiBUaGlzIFBFRjIyNTYgaXMg Y29ubmVjdGVkIHRvIGEgUG93ZXJRVUlDQyBTb0MKPiBmb3IgdGhlIGNvbnRyb2wgcGF0aCBhbmQg dGhlIFRETSBpcyBjb25uZWN0ZWQgdG8gdGhlIFNvQyAoUU1DIGNvbXBvbmVudCkKPiBmb3IgdGhl IGRhdGEgcGF0aC4KPiAKPiBGcm9tIHRoZSBRTUMgSERMQyBkcml2ZXIsIEkgbmVlZCB0byBoYW5k bGUgSERMQyBkYXRhIHVzaW5nIHRoZSBRTUMsCj4gY2FycmllciBkZXRlY3Rpb24gdXNpbmcgdGhl IFBFRjIyNTYgKEUxIGxpbmUgY2FycmllcikgYW5kIHNldC9nZXQgc29tZQo+IFBFRjIyNTYgY29u ZmlndXJhdGlvbi4KPiAKPiBUaGUgUU1DIEhETEMgZHJpdmVyIGNvbnNpZGVycyB0aGUgUEVGMjI1 NiBhcyBhIGdlbmVyaWMgZnJhbWVyLgo+IEl0IHBlcmZvcm1zIG9wZXJhdGlvbnMgdGhhdCBpbnZv bHZlIHRoZSBQRUYyMjU2IHRocm91Z2ggdGhlIGdlbmVyaWMKPiBmcmFtZXIgQVBJLgo+IAo+IFRo ZSBhdWRpbyBkYXRhIGFyZSBleGNoYW5nZWQgd2l0aCB0aGUgUEVGMjI1NiB1c2luZyBhIENQVSBE QUkgY29ubmVjdGVkCj4gdG8gdGhlIFRETSBidXMgdGhyb3VnaCB0aGUgUU1DIGFuZCB0aGUgUEVG MjI1NiBuZWVkcyB0byBiZSBzZWVuIGFzIGEKPiBjb2RlYyBpbiBvcmRlciB0byBiZSBsaW5rZWQg dG8gdGhlIENQVSBEQUkuCj4gVGhlIGNvZGVjIGhhbmRsZXMgdGhlIGNhcnJpZXIgZGV0ZWN0aW9u IHVzaW5nIHRoZSBQRUYyMjU2IGFuZCByZXBvcnRzCj4gdGhlIGNhcnJpZXIgc3RhdGUgdG8gdGhl IEFMU0Egc3Vic3lzdGVtIHVzaW5nIHRoZSBBU29DIGphY2sgZGV0ZWN0aW9uLgo+IAo+IFRoZSBj b2RlYywgZXZlbiBpZiBpbnN0YW50aWF0ZWQgYnkgdGhlIFBFRjIyNTYgZHJpdmVyLCBjb25zaWRl cnMgdGhlCj4gUEVGMjI1NiBhcyBhIGdlbmVyaWMgZnJhbWVyLgo+IAo+IFRoZSBnZW5lcmljIGZy YW1lciBoYXM6Cj4gIC0gMiBjb25zdW1lcnMgKFFNQyBIRExDIGRydiBhbmQgY29kZWMpCj4gIC0g MSBwcm92aWRlciAoUEVGMjI1NikKPiAKPiBTbywgdGhlIGRlc2lnbiBpcyB0aGUgZm9sbG93aW5n Ogo+ICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAg ICArLS0tLS0tLS0tKwo+ICAgICAgICAgICAgICAgICAgICAgICAgIHwgUU1DICAgICAgICAgICAg ICB8IDwtIFRETSAtPiB8IFBFRjIyNTYgfCA8LT4gRTEKPiAgICAgICstLS0tLS0tLS0rICAgICAg ICB8ICArLS0tLS0tLS0tLS0tLSsgfCAgICAgICAgICAgfCAgICAgICAgIHwKPiAgICAgIHwgQ1BV IERBSSB8IDwtZGF0YS0tPiB8IFFNQyBjaGFubmVsIHwgfCAgICAgICAgICAgfCAgICAgICAgIHwK PiAgICAgICstLS0tLS0tLS0rICAgICAgICB8ICArLS0tLS0tLS0tLS0tLSsgfCAgICAgICAgICAg fCAgICAgICAgIHwKPiArLS0tLS0tLS0tLS0tLS0rICAgICAgICB8ICArLS0tLS0tLS0tLS0tLSsg fCAgICAgICAgICAgfCAgICAgICAgIHwKPiB8IFFNQyBIRExDIGRydiB8IDwtZGF0YS0tPiB8IFFN QyBjaGFubmVsIHwgfCAgICAgICAgICAgfCAgICAgICAgIHwKPiArLS0tLS0tLS0tLS0tLS0rICAg ICAgICB8ICArLS0tLS0tLS0tLS0tLSsgfCAgICAgICAgICAgfCAgICAgICAgIHwKPiAgICAgIF4g ICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgfCAgICAgICAg IHwKPiAgICAgIHwgICArLS0tLS0tLS0rICAgICArLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAg ICAgfCAgICAgICAgIHwKPiAgICAgICstPiB8IGZyYW1lciB8IDwtPiB8IFBFRjIyNTYgZHJ2IHwg PC0gbG9jYWwgYnVzIC0+fCAgICAgICAgIHwKPiAgICAgICAgICB8ICAgICAgICB8ICAgICB8ICAg ICAgICAgICAgIHwgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSsKPiAgICAgICstPiB8ICAgICAg ICB8ICAgICB8ICAgICAgICAgICAgIHwKPiAgICAgIHwgICArLS0tLS0tLS0rICAgICB8ICArLS0t LS0tLSsgIHwKPiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tPiB8IGNvZGVjIHwgIHwKPiAgICAg ICAgICAgICAgICAgICAgICAgICB8ICArLS0tLS0tLSsgIHwKPiAgICAgICAgICAgICAgICAgICAg ICAgICArLS0tLS0tLS0tLS0tLSsKPiAKPiBGdXJ0aGVyIG1vcmUsIHRoZSBURE0gdGltZXNsb3Rz IHVzZWQgYnkgdGhlIFFNQyBIRExDIGRyaXZlciBuZWVkIHRvIGJlCj4gY29uZmlndXJlZCBhdCBy dW50aW1lIChRTUMgZHluYW1pYyB0aW1lc2xvdHMpLgo+IAo+IFNldmVyYWwgd2Vla3MgYWdvLCBJ IHNlbnQgdHdvIHNlcmllcyByZWxhdGVkIHRvIHRoaXMgdG9waWM6Cj4gIC0gQWRkIHRoZSBMYW50 aXEgUEVGMjI1NiBhdWRpbyBzdXBwb3J0IFsxXQo+ICAtIFJGQyBBZGQgc3VwcG9ydCBmb3IgUU1D IEhETEMgYW5kIFBIWSBbMl0KPiBUaGlzIGN1cnJlbnQgc2VyaWVzIGlzIGEgcmV3b3JrIG9mIHRo ZXNlIHR3byBzZXJpZXMgdGFraW5nIGludG8gYWNjb3VudAo+IGZlZWRiYWNrcyBwcmV2aW91c2x5 IHJlY2VpdmVkLgo+IAo+IEluIG9yZGVyIHRvIGltcGxlbWVudCBhbGwgb2YgdGhpcywgSSBkbyB0 aGUgZm9sbG93aW5nOgo+ICAxKSBQZXJmb3JtIHNvbWUgZml4ZXMgKHBhdGNoZXMgMSwgMiwgMywg NCwgNSApCj4gIDIpIEludHJvZHVjZSB0aGUgUU1DIEhETEMgZHJpdmVyIChwYXRjaGVzIDYsIDcs IDgpCj4gIDMpIEFkZCBRTUMgZHluYW1pYyB0aW1lc2xvdCBzdXBwb3J0IChwYXRjaGVzIDkgLSAx OSkKPiAgNCkgQWRkIHRpbWVzbG90cyBjaGFuZ2Ugc3VwcG9ydCBpbiBRTUMgSERMQyAocGF0Y2gg MjApCj4gIDUpIEludHJvZHVjZSBmcmFtZXIgaW5mcmFzdHJ1Y3R1cmUgKHBhdGNoIDIxKQo+ICA2 KSBBZGQgUEVGMjI1NiBmcmFtZXIgcHJvdmlkZXIgKHBhdGNoZXMgMjIsIDIzLCAyNCwgMjUpCj4g IDcpIEFkZCBmcmFtZXIgY29kZWMgYXMgYSBmcmFtZXIgY29uc3VtZXIgKHBhdGNoIDI2KQo+ICA4 KSBBZGQgZnJhbWVyIHN1cHBvcnQgYXMgYSBmcmFtZXIgY29uc3VtZXIgaW4gUU1DIEhETEMgKHBh dGNoIDI3KQo+IAo+IFRoZSBzZXJpZXMgY29udGFpbnMgdGhlIGZ1bGwgc3RvcnkgYW5kIGRldGFp bGVkIG1vZGlmaWNhdGlvbnMuCj4gSWYgbmVlZGVkLCB0aGUgc2VyaWVzIGNhbiBiZSBzcGxpdCBh bmQvb3IgY29tbWl0cyBjYW4gYmUgc3F1YXNoZWQuCj4gTGV0IG1lIGtub3cuCj4gCj4gQ29tcGFy ZSB0byB0aGUgcHJldmlvdXMgaXRlcmF0aW9uCj4gICBodHRwczovL2xvcmUua2VybmVsLm9yZy9s aW51eC1rZXJuZWwvMjAyMzEwMTEwNjE0MzcuNjQyMTMtMS1oZXJ2ZS5jb2RpbmFAYm9vdGxpbi5j b20vCj4gVGhpcyB2OSBzZXJpZXM6Cj4gIC0gUmVtb3ZlcyBzb21lIHBhdGNoZXMgYWxyZWFkeSBh cHBsaWVkCj4gIC0gQWRkcyBzb21lICdBY2tlZC1ieScgdGFncwo+IAo+IEJlc3QgcmVnYXJkcywK PiBIZXJ2w6kKPiAKPiBbMV06IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2FsbC8yMDIzMDQxNzE3 MTYwMS43NDY1Ni0xLWhlcnZlLmNvZGluYUBib290bGluLmNvbS8KPiBbMl06IGh0dHBzOi8vbG9y ZS5rZXJuZWwub3JnL2FsbC8yMDIzMDMyMzEwMzE1NC4yNjQ1NDYtMS1oZXJ2ZS5jb2RpbmFAYm9v dGxpbi5jb20vCj4gCj4gQ2hhbmdlcyB2OCAtPiB2OQo+IAo+ICAgIC0gUmVtb3ZlZCBQYXRjaGVz IDYsIDcgYW5kIDggKHBhdGNoZXMgYXBwbGllZCkKPiAKPiAgICAtIFBhdGNoZXMgNywgMjAsIDIx LCAyMyAocGF0Y2hlcyAxMCwgMjMsIDI0LCAyNiBpbiB2OCkKPiAgICAgIEFkZCAnQWNrZWQtYnk6 IEpha3ViIEtpY2luc2tpIDxrdWJhQGtlcm5lbC5vcmc+Jwo+IAo+IENoYW5nZXMgdjcgLT4gdjgK PiAKPiAgIC0gUGF0Y2ggMTAKPiAgICAgRml4IGEgcmFjZSBjb25kaXRpb24gd2hlbiBzdG9wcGlu ZyB0aGUgcXVldWUgaW4gcW1jX2hkbGNfY2xvc2UoKQo+IAo+ICAgLSBQYXRjaCAyNAo+ICAgICBN b3ZlIHRvIG1lbnVjb25maWcgYW5kIGhpZGUgQ09ORklHX0dFTkVSSUNfRlJBTUVSCj4gICAgIFJl bW92ZSB1bm5lZWRlZCBjaGVjayAoZGVmZW5zaXZlIHByb2dyYW1taW5nKQo+ICAgICBSZW1vdmUg dW5uZWVkZWQgdmFyaWFibGUgYXNzaWdubWVudAo+IAo+ICAgLSBQYXRjaCAyNQo+ICAgICBBZGQg J1Jldmlld2VkLWJ5OiBSb2IgSGVycmluZyA8cm9iaEBrZXJuZWwub3JnPicKPiAKPiAgIC0gUGF0 Y2ggMjYKPiAgICAgVXNlIGFycmF5IG5vdGF0aW9uIGZvciAnYXVkaW9fZGV2cycKPiAKPiBDaGFu Z2VzIHY2IC0+IHY3Cj4gCj4gICAtIFBhdGNoIDgKPiAgICAgTW92ZSB0aGUgJ2NvbXBhdGlibGUn IHByb3BlcnR5IHRvIHRoZSBmaXJzdCBwcm9wZXJ0eS4KPiAgICAgQWRkIGRldmljZS9Tb0Mgc3Bl Y2lmaWMgY29tcGF0aWJsZSBzdHJpbmdzLgo+ICAgICBBZGQgJ1Jldmlld2VkLWJ5OiBSb2IgSGVy cmluZyA8cm9iaEBrZXJuZWwub3JnPicKPiAKPiAgIC0gUGF0Y2ggMjUKPiAgICAgUmVtb3ZlICck cmVmJyBmcm9tIHRoZSBsYW50aXEsZGF0YS1yYXRlLWJwcyBwcm9wZXJ0eS4gJy1icHMnIGlzIG5v dwo+ICAgICBhIHN0YW5kYXJkIHN1ZmZpeC4KPiAKPiBDaGFuZ2VzIHY1IC0+IHY2Cj4gCj4gICAt IEFsbCBwYXRjaGVzCj4gICAgIFJlbW92ZSAnU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoZSBMZXJv eSA8Y2hyaXN0b3BoZS5sZXJveUBjc2dyb3VwLmV1PicKPiAgICAgVGhlc2UgU29iIHdlcmUgYWRk ZWQgYnkgQ2hyaXN0b3BoZSB3aGVuIGhlIHNlbnQgdGhlIHY0IHdoaWxlIEkgd2FzCj4gICAgIG9u IHZhY2F0aW9uLgo+ICAgICBodHRwczovL2xvcmUua2VybmVsLm9yZy9saW51eC1rZXJuZWwvOTky YTJiMzEtZTIxZi1lZWUzLThiZmMtYTY1YjY5ZmU1YmQ3QGNzZ3JvdXAuZXUvCj4gCj4gICAtIFBh dGNoIDYsIDcKPiAgICAgQWRkICdBY2tlZC1ieTogQ29ub3IgRG9vbGV5IDxjb25vci5kb29sZXlA bWljcm9jaGlwLmNvbT4nCj4gICAgIEFkZCAnQWNrZWQtYnk6IFJvYiBIZXJyaW5nIDxyb2JoQGtl cm5lbC5vcmc+Jwo+IAo+ICAgLSBQYXRjaCA4Cj4gICAgIEFkZCBhIGNvbnN0cmFpbnQgb24gZnNs LGZyYW1lci4KPiAKPiAgIC0gUGF0Y2ggMjUKPiAgICAgRml4IGNsb2NrcyBkZXNjcmlwdGlvbiAo aW5jb25zaXN0ZW50IGNhcGl0YWxpc2F0aW9uKQo+ICAgICBVc2UgJzgtYml0JyBpbnN0ZWFkIG9m ICc4Yml0Jwo+ICAgICBBZGQgJ1Jldmlld2VkLWJ5OiBDaHJpc3RvcGhlIExlcm95IDxjaHJpc3Rv cGhlLmxlcm95QGNzZ3JvdXAuZXU+Jwo+IAo+ICAgLSBSZW1vdmVkIHBhdGNoIDI2IChwYXRjaCBh cHBsaWVkKQo+IAo+ICAgLSBQYXRjaCAyNiAocGF0Y2ggMjcgaW4gdjUpCj4gICAgIEFkZCAnUmV2 aWV3ZWQtYnk6IExpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAbGluYXJvLm9yZz4nCj4gCj4g ICAtIFBhdGNoIDI3IChwYXRjaCAyOCBpbiB2NSkKPiAgICAgTW92ZSByZWdpc3RlcnMgZGVmaW5p dGlvbiB0byAuYyBmaWxlIGFuZCByZW1vdmUgLmggZmlsZQo+ICAgICBBZGQgJ3NlbGVjdCBQSU5D T05GJyBpbiBLY29uZmlnCj4gICAgIFVzZSBkZXZfZXJyX3Byb2JlKCkKPiAgICAgQWRkICdSZXZp ZXdlZC1ieTogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBsaW5hcm8ub3JnPicKPiAKPiAg IC0gUGF0Y2ggMjggKHBhdGNoIDI5IGluIHY1KQo+ICAgICBSZW1vdmUgLmggZmlsZQo+IAo+IENo YW5nZXMgdjQgLT4gdjUKPiAKPiAgIC0gUGF0Y2hlcyAxIHRvIDUKPiAgICAgTm8gY2hhbmdlcwo+ IAo+ICAgLSBQYXRjaCA2IChuZXcgaW4gdjUpCj4gICAgIEZpeCBRTUMgYmluZGluZyBleGFtcGxl Cj4gCj4gICAtIFBhdGNoIDcgKG5ldyBpbiB2NSkKPiAgICAgQWRkIG1pc3NpbmcgJ2FkZGl0aW9u YWxQcm9wZXJ0aWVzOiBmYWxzZScKPiAKPiAgIC0gUGF0Y2ggOCAobmV3IGluIHY1LCByZXBsYWNl IHY0IHBhdGNoIDYpCj4gICAgIEFkZCBRTUMgSERMQyBwcm9wZXJ0aWVzIGluIHRoZSBRTUMgY2hh bm5lbCBub2RlCj4gICAgIFJlbmFtZWQgdGhlICdmcmFtZXInIHByb3BlcnR5IHRvICdmc2wsZnJh bWVyJwo+IAo+ICAgLSBQYXRjaCA5IChuZXcgaW4gdjUpCj4gICAgIEFkZCBzdXBwb3J0IGZvciBR TUMgY2hpbGQgZGV2aWNlcwo+IAo+ICAgLSBQYXRjaCAxMCAocGF0Y2ggNyBpbiB2NCkKPiAgICAg Tm8gY2hhbmdlcwo+IAo+ICAgLSBQYXRjaCAxMSAocGF0Y2ggOCBpbiB2NCkKPiAgICAgUmVtb3Zl IGZzbCxxbWMtaGRsYy55YW1sIChubyBtb3JlIGV4aXN0aW5nIGZpbGUpCj4gCj4gICAtIFBhdGNo ZXMgMTIgdG8gMjIgKHBhdGNoZXMgOSB0byAxOSBpbiB2NCkKPiAgICAgTm8gY2hhbmdlcwo+IAo+ ICAgLSBQYXRjaCAyMyAocGF0Y2ggMjAgaW4gdjQpCj4gICAgIFJlbW92ZSB1bnVzZWQgdmFyaWFi bGUgaW5pdGlhbGl6YXRpb25zCj4gICAgIFJlbW92ZSBleHRyYSBzcGFjZQo+IAo+ICAgLSBQYXRj aCAyNCAocGF0Y2ggMjEgaW4gdjQpCj4gICAgIEltcHJvdmUgS2NvbmZpZyBoZWxwIHRleHQKPiAg ICAgRml4IHZhcmlhYmxlIGRlY2xhcmF0aW9uIChyZXZlcnNlIHhtYXMgdHJlZSkKPiAgICAgRml4 IHR5cG9zIGFuZCBleHRyYSBzcGFjZXMKPiAgICAgRml4IGRvY3VtZW50YXRpb24gaXNzdWVzIHJh aXNlZCBieSAna2VybmVsLWRvYyAtbm9uZScKPiAgICAgTW92ZSBvZl9ub2RlX3B1dCgpIGFuZCBr ZnJlZSgpIG91dCBvZiB0aGUgbXV0ZXgKPiAgICAgUmVwbGFjZSBpZGFfc2ltcGxlX3tnZXQscmVt b3ZlfSgpIGJ5IGlkYV97YWxsb2MsZnJlZX0oKQo+ICAgICBTdXBwb3J0IGZyYW1lciBkZXZpY2Ut dHJlZSBub2RlcyB3aXRob3V0ICcjZnJhbWVyLWNlbGxzJyBwcm9wZXJ0eQo+IAo+ICAgLSBQYXRj aCAyNSAocGF0Y2ggMjIgaW4gdjQpCj4gICAgIEZpeCAkcmVmIGluIHRoZSBwaW5jdHJsIHN1Ym5v ZGUKPiAgICAgUmVtb3ZlICcjZnJhbWVyLWNlbGxzJyBwcm9wZXJ0eQo+ICAgICBBZGQgbmVlZGVk ICd8Jwo+IAo+ICAgLSBQYXRjaCAyNiAocGF0Y2ggMjMgaW4gdjQpCj4gICAgIEZpeCBhIHR5cG8g aW4gdGhlIGNvbW1pdCBzdWJqZWN0Cj4gCj4gICAtIFBhdGNoZXMgMjcsIDI4LCAyOSAocGF0Y2gg MjQsIDI1LCAyNiBpbiB2NCkKPiAgICAgTm8gY2hhbmdlcwo+IAo+ICAgLSBQYXRjaCAzMCAocGF0 Y2ggMjcgaW4gdjQpCj4gICAgIEZpeCBhIHR5cG8gaW4gdGhlIGNvbW1pdCBsb2cKPiAKPiAgIC0g UGF0Y2ggMzEgKHBhdGNoIDI4IGluIHY0KQo+ICAgICBVc2VkICdmc2wsZnJhbWVyJyBwcm9wZXJ0 eSBuYW1lIGluc3RlYWQgb2YgJ2ZyYW1lcicKPiAKPiBDaGFuZ2VzIHYzIC0+IHY0Cj4gCj4gICAt IFBhdGNoIDIxCj4gICAgIEZpeGVzIGJ1aWxkIGZhaWx1cmUgd2l0aCBDT05GSUdfTU9EVUxFUwo+ IAo+IENoYW5nZXMgdjIgLT4gdjMKPiAKPiAgIC0gUGF0Y2hlcyAxLCAyLCAzLCA0Cj4gICAgIEFk ZCAnUmV2aWV3ZWQtYnk6IENocmlzdG9waGUgTGVyb3kgPGNocmlzdG9waGUubGVyb3lAY3Nncm91 cC5ldT4nCj4gCj4gICAtIE5ldyBwYXRjaAo+ICAgICBSZW1vdmUgaW5saW5lIGtleXdvcmQgZnJv bSB0aGUgZXhpc3RpbmcgcmVnaXN0ZXJzIGFjY2Vzc29ycyBoZWxwZXJzCj4gCj4gICAtIFBhdGNo IDYgKHBhdGNoZXMgNSwgMjcgaW4gdjIpCj4gICAgIFVwZGF0ZSB0aGUgYmluZGluZyB0aXRsZQo+ ICAgICBTcXVhc2ggcGF0Y2ggMjcKPiAKPiAgIC0gUGF0Y2ggNyAocGF0Y2ggNiBpbiB2MikKPiAg ICAgUmVtb3ZlIHRoZSBjYXN0IGluIG5ldGRldl90b19xbWNfaGRsYygpCj4gICAgIEFkZCAnUmV2 aWV3ZWQtYnk6IENocmlzdG9waGUgTGVyb3kgPGNocmlzdG9waGUubGVyb3lAY3Nncm91cC5ldT4n Cj4gCj4gICAtIFBhdGNoIDggKHBhdGNoIDcgaW4gdjIpOiBObyBjaGFuZ2UKPiAKPiAgIC0gUGF0 Y2hlcyA5LCAxMCAocGF0Y2hlcyA4LCA5IGluIHYyKQo+ICAgICBBZGQgJ1Jldmlld2VkLWJ5OiBD aHJpc3RvcGhlIExlcm95IDxjaHJpc3RvcGhlLmxlcm95QGNzZ3JvdXAuZXU+Jwo+IAo+ICAgLSBQ YXRjaCAxMSAocGF0Y2ggMTAgaW4gdjIpCj4gICAgIFJlbW92ZSBpbmxpbmUga2V5d29yZCBmcm9t IHRoZSBpbnRyb2R1Y2VkIHFtY19jbHJzZXRiaXRzMTYoKSBoZWxwZXIKPiAgICAgQWRkICdSZXZp ZXdlZC1ieTogQ2hyaXN0b3BoZSBMZXJveSA8Y2hyaXN0b3BoZS5sZXJveUBjc2dyb3VwLmV1PicK PiAKPiAgIC0gUGF0Y2hlcyAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwCj4gICAg IEFkZCAnUmV2aWV3ZWQtYnk6IENocmlzdG9waGUgTGVyb3kgPGNocmlzdG9waGUubGVyb3lAY3Nn cm91cC5ldT4nCj4gCj4gICAtIFBhdGNoIDIxIChwYXRjaCAyMCBpbiB2MikKPiAgICAgUmVtb3Zl IHVubmVlZGVkIGZyYW1lciBOVUxMIHBvaW50ZXIgY2hlY2sKPiAgICAgQWRkICdSZXZpZXdlZC1i eTogQ2hyaXN0b3BoZSBMZXJveSA8Y2hyaXN0b3BoZS5sZXJveUBjc2dyb3VwLmV1PicKPiAKPiAg IC0gUGF0Y2ggMjIgKHBhdGNoIDIxIGluIHYyKQo+ICAgICBDaGFuZ2Ugc2Nsa3IgYW5kIHNjbGt4 IGNsb2NrcyBkZXNjcmlwdGlvbgo+ICAgICBSZW1vdmUgdGhlIGZyYW1lciBwaGFuZGxlIHByb3Bl cnR5IGZyb20gdGhlIGZyYW1lciBzdWJub2Rlcwo+ICAgICAoaWUuIGZyb20gZnJhbWVyLWNvZGVj IG5vZGVzKQo+IAo+ICAgLSBQYXRjaCAyMyAocGF0Y2ggMjIgaW4gdjIpCj4gICAgIEluaXRpYWxp emUgJ2Rpc2FibGVkJyB2YXJpYWJsZSBhdCBkZWNsYXJhdGlvbgo+ICAgICBGaXggY29tbWl0IGxv Zwo+ICAgICBBZGQgJ1Jldmlld2VkLWJ5OiBDaHJpc3RvcGhlIExlcm95IDxjaHJpc3RvcGhlLmxl cm95QGNzZ3JvdXAuZXU+Jwo+IAo+ICAgLSBQYXRjaCAyNCAocGF0Y2ggMjMgaW4gdjIpCj4gICAg IFJlbW92ZSBpbmxpbmUga2V5d29yZCBmcm9tIHRoZSBleGlzdGluZyByZWdpc3RlcnMgYWNjZXNz b3JzIGhlbHBlcnMKPiAgICAgVXNlIGRldl93YXJuX3JhdGVsaW1pdGVkKCkgaW4gZGVmYXVsdCBp bnRlcnJ1cHQgaGFuZGxlcgo+ICAgICBBZGQgJ1Jldmlld2VkLWJ5OiBDaHJpc3RvcGhlIExlcm95 IDxjaHJpc3RvcGhlLmxlcm95QGNzZ3JvdXAuZXU+Jwo+IAo+ICAgLSBQYXRjaCAyNSAocGF0Y2gg MjQgaW4gdjIpCj4gICAgIFJlcGxhY2UgI2luY2x1ZGUgImxpbnV4L2JpdGZpZWxkLmgiIGJ5ICNp bmNsdWRlIDxsaW51eC9iaXRmaWVsZC5oPgo+ICAgICBGb2xkIHRoZSBwaW5jdHJsIGFub255bW91 cyBzdHJ1Y3QgaW50byB0aGUgc3RydWN0IHBlZjIyNTZfcGluY3RybAo+ICAgICBVcGRhdGUgY29t bWl0IGxvZwo+ICAgICBBZGQgJ1Jldmlld2VkLWJ5OiBDaHJpc3RvcGhlIExlcm95IDxjaHJpc3Rv cGhlLmxlcm95QGNzZ3JvdXAuZXU+Jwo+IAo+ICAgLSBQYXRjaCAyNiAocGF0Y2ggMjUgaW4gdjIp Cj4gICAgIEFkZCAnUmV2aWV3ZWQtYnk6IENocmlzdG9waGUgTGVyb3kgPGNocmlzdG9waGUubGVy b3lAY3Nncm91cC5ldT4nCj4gCj4gICAtIFBhdGNoIDI3IChwYXRjaCAyNiBpbiB2MikKPiAgICAg Rml4IGVycm9yIG1lc3NhZ2UKPiAgICAgQ2hhbmdlZCB0aGUgY2gubWF4IGNvbXB1dGF0aW9uIGlu IGZyYW1lcl9kYWlfaHdfcnVsZV9jaGFubmVsc19ieV9mb3JtYXQoKQo+ICAgICBBZGQgJ1Jldmll d2VkLWJ5OiBDaHJpc3RvcGhlIExlcm95IDxjaHJpc3RvcGhlLmxlcm95QGNzZ3JvdXAuZXU+Jwo+ IAo+ICAgLSBQYXRjaCAyOAo+ICAgICBBZGQgJ1Jldmlld2VkLWJ5OiBDaHJpc3RvcGhlIExlcm95 IDxjaHJpc3RvcGhlLmxlcm95QGNzZ3JvdXAuZXU+Jwo+IAo+IENoYW5nZXMgdjEgLT4gdjIKPiAg IC0gUGF0Y2hlcyAxLCAyIChOZXcgaW4gdjIpCj4gICAgIEZpeCBfX2lvbWVtIGFkZHJlc3NlcyBk ZWNsYXJhdGlvbgo+IAo+ICAgLSBQYXRjaCAxOSAoMTcgaW4gdjEpCj4gICAgIEZpeCBhIGNvbXBp bGF0aW9uIHdhcm5pbmcKPiAKPiAgIC0gUGF0Y2ggMjYgKDI0IGluIHYxKQo+ICAgICBGaXggYSB0 eXBvIGluIEtjb25maWcgZmlsZQo+ICAgICBGaXggaXNzdWVzIHJhaXNlZCBieSBzcGFyc2UgKG1h a2UgQz0xKQo+IAo+IEhlcnZlIENvZGluYSAoMjcpOgo+ICAgc29jOiBmc2w6IGNwbTE6IHRzYTog Rml4IF9faW9tZW0gYWRkcmVzc2VzIGRlY2xhcmF0aW9uCj4gICBzb2M6IGZzbDogY3BtMTogcW1j OiBGaXggX19pb21lbSBhZGRyZXNzZXMgZGVjbGFyYXRpb24KPiAgIHNvYzogZnNsOiBjcG0xOiBx bWM6IEZpeCByeCBjaGFubmVsIHJlc2V0Cj4gICBzb2M6IGZzbDogY3BtMTogcW1jOiBFeHRlbmQg dGhlIEFQSSB0byBwcm92aWRlIFJ4IHN0YXR1cwo+ICAgc29jOiBmc2w6IGNwbTE6IHFtYzogUmVt b3ZlIGlubGluZSBmdW5jdGlvbiBzcGVjaWZpZXJzCj4gICBzb2M6IGZzbDogY3BtMTogcW1jOiBB ZGQgc3VwcG9ydCBmb3IgY2hpbGQgZGV2aWNlcwo+ICAgbmV0OiB3YW46IEFkZCBzdXBwb3J0IGZv ciBRTUMgSERMQwo+ICAgTUFJTlRBSU5FUlM6IEFkZCB0aGUgRnJlZXNjYWxlIFFNQyBIRExDIGRy aXZlciBlbnRyeQo+ICAgc29jOiBmc2w6IGNwbTE6IHFtYzogSW50cm9kdWNlIGF2YWlsYWJsZSB0 aW1lc2xvdHMgbWFza3MKPiAgIHNvYzogZnNsOiBjcG0xOiBxbWM6IFJlbmFtZSBxbWNfc2V0dXBf dHNhKiB0byBxbWNfaW5pdF90c2EqCj4gICBzb2M6IGZzbDogY3BtMTogcW1jOiBJbnRyb2R1Y2Ug cW1jX2NoYW5fc2V0dXBfdHNhKgo+ICAgc29jOiBmc2w6IGNwbTE6IHFtYzogUmVtb3ZlIG5vIG1v cmUgbmVlZGVkIGNoZWNrcyBmcm9tCj4gICAgIHFtY19jaGVja19jaGFucygpCj4gICBzb2M6IGZz bDogY3BtMTogcW1jOiBDaGVjayBhdmFpbGFibGUgdGltZXNsb3RzIGluIHFtY19jaGVja19jaGFu cygpCj4gICBzb2M6IGZzbDogY3BtMTogcW1jOiBBZGQgc3VwcG9ydCBmb3IgZGlzYWJsaW5nIGNo YW5uZWwgVFNBIGVudHJpZXMKPiAgIHNvYzogZnNsOiBjcG0xOiBxbWM6IFNwbGl0IFR4IGFuZCBS eCBUU0EgZW50cmllcyBzZXR1cAo+ICAgc29jOiBmc2w6IGNwbTE6IHFtYzogSW50cm9kdWNlIGlz X3RzYV82NHJ4dHggZmxhZwo+ICAgc29jOiBmc2w6IGNwbTE6IHFtYzogSGFuZGxlIHRpbWVzbG90 IGVudHJpZXMgYXQgY2hhbm5lbCBzdGFydCgpIGFuZAo+ICAgICBzdG9wKCkKPiAgIHNvYzogZnNs OiBjcG0xOiBxbWM6IFJlbW92ZSB0aW1lc2xvdHMgaGFuZGxpbmcgZnJvbSBzZXR1cF9jaGFuKCkK PiAgIHNvYzogZnNsOiBjcG0xOiBxbWM6IEludHJvZHVjZSBmdW5jdGlvbnMgdG8gY2hhbmdlIHRp bWVzbG90cyBhdAo+ICAgICBydW50aW1lCj4gICB3YW46IHFtY19oZGxjOiBBZGQgcnVudGltZSB0 aW1lc2xvdHMgY2hhbmdlcyBzdXBwb3J0Cj4gICBuZXQ6IHdhbjogQWRkIGZyYW1lciBmcmFtZXdv cmsgc3VwcG9ydAo+ICAgZHQtYmluZGluZ3M6IG5ldDogQWRkIHRoZSBMYW50aXEgUEVGMjI1NiBF MS9UMS9KMSBmcmFtZXIKPiAgIG5ldDogd2FuOiBmcmFtZXI6IEFkZCBzdXBwb3J0IGZvciB0aGUg TGFudGlxIFBFRjIyNTYgZnJhbWVyCj4gICBwaW5jdHJsOiBBZGQgc3VwcG9ydCBmb3IgdGhlIExh bnRpYyBQRUYyMjU2IHBpbm11eAo+ICAgTUFJTlRBSU5FUlM6IEFkZCB0aGUgTGFudGlxIFBFRjIy NTYgZHJpdmVyIGVudHJ5Cj4gICBBU29DOiBjb2RlY3M6IEFkZCBzdXBwb3J0IGZvciB0aGUgZnJh bWVyIGNvZGVjCj4gICBuZXQ6IHdhbjogZnNsX3FtY19oZGxjOiBBZGQgZnJhbWVyIHN1cHBvcnQK PiAKPiAgLi4uL2JpbmRpbmdzL25ldC9sYW50aXEscGVmMjI1Ni55YW1sICAgICAgICAgIHwgMjEz ICsrKysrCj4gIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAxNSArCj4gIGRyaXZlcnMvbmV0L3dhbi9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgICB8 ICAxNCArCj4gIGRyaXZlcnMvbmV0L3dhbi9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICB8 ICAgMyArCj4gIGRyaXZlcnMvbmV0L3dhbi9mcmFtZXIvS2NvbmZpZyAgICAgICAgICAgICAgICB8 ICA0MSArCj4gIGRyaXZlcnMvbmV0L3dhbi9mcmFtZXIvTWFrZWZpbGUgICAgICAgICAgICAgICB8 ICAgNyArCj4gIGRyaXZlcnMvbmV0L3dhbi9mcmFtZXIvZnJhbWVyLWNvcmUuYyAgICAgICAgICB8 IDg4MiArKysrKysrKysrKysrKysrKysKPiAgZHJpdmVycy9uZXQvd2FuL2ZyYW1lci9wZWYyMjU2 L01ha2VmaWxlICAgICAgIHwgICA4ICsKPiAgZHJpdmVycy9uZXQvd2FuL2ZyYW1lci9wZWYyMjU2 L3BlZjIyNTYtcmVncy5oIHwgMjUwICsrKysrCj4gIGRyaXZlcnMvbmV0L3dhbi9mcmFtZXIvcGVm MjI1Ni9wZWYyMjU2LmMgICAgICB8IDg4MCArKysrKysrKysrKysrKysrKwo+ICBkcml2ZXJzL25l dC93YW4vZnNsX3FtY19oZGxjLmMgICAgICAgICAgICAgICAgfCA4MjAgKysrKysrKysrKysrKysr Kwo+ICBkcml2ZXJzL3BpbmN0cmwvS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgfCAgMTUg Kwo+ICBkcml2ZXJzL3BpbmN0cmwvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgfCAgIDEg Kwo+ICBkcml2ZXJzL3BpbmN0cmwvcGluY3RybC1wZWYyMjU2LmMgICAgICAgICAgICAgfCAzNTgg KysrKysrKwo+ICBkcml2ZXJzL3NvYy9mc2wvcWUvcW1jLmMgICAgICAgICAgICAgICAgICAgICAg fCA1OTIgKysrKysrKysrLS0tCj4gIGRyaXZlcnMvc29jL2ZzbC9xZS90c2EuYyAgICAgICAgICAg ICAgICAgICAgICB8ICAyMiArLQo+ICBpbmNsdWRlL2xpbnV4L2ZyYW1lci9mcmFtZXItcHJvdmlk ZXIuaCAgICAgICAgfCAxOTQgKysrKwo+ICBpbmNsdWRlL2xpbnV4L2ZyYW1lci9mcmFtZXIuaCAg ICAgICAgICAgICAgICAgfCAyMDUgKysrKwo+ICBpbmNsdWRlL2xpbnV4L2ZyYW1lci9wZWYyMjU2 LmggICAgICAgICAgICAgICAgfCAgMzEgKwo+ICBpbmNsdWRlL3NvYy9mc2wvcWUvcW1jLmggICAg ICAgICAgICAgICAgICAgICAgfCAgMjcgKy0KPiAgc291bmQvc29jL2NvZGVjcy9LY29uZmlnICAg ICAgICAgICAgICAgICAgICAgIHwgIDE1ICsKPiAgc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZSAg ICAgICAgICAgICAgICAgICAgIHwgICAyICsKPiAgc291bmQvc29jL2NvZGVjcy9mcmFtZXItY29k ZWMuYyAgICAgICAgICAgICAgIHwgNDEzICsrKysrKysrCj4gIHNvdW5kL3NvYy9mc2wvZnNsX3Ft Y19hdWRpby5jICAgICAgICAgICAgICAgICB8ICAgMiArLQo+ICAyNCBmaWxlcyBjaGFuZ2VkLCA0 ODczIGluc2VydGlvbnMoKyksIDEzNyBkZWxldGlvbnMoLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbGFudGlxLHBlZjIyNTYueWFt bAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2FuL2ZyYW1lci9LY29uZmlnCj4g IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93YW4vZnJhbWVyL01ha2VmaWxlCj4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93YW4vZnJhbWVyL2ZyYW1lci1jb3JlLmMKPiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dhbi9mcmFtZXIvcGVmMjI1Ni9NYWtlZmls ZQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2FuL2ZyYW1lci9wZWYyMjU2L3Bl ZjIyNTYtcmVncy5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93YW4vZnJhbWVy L3BlZjIyNTYvcGVmMjI1Ni5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93YW4v ZnNsX3FtY19oZGxjLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvcGluY3RybC9waW5j dHJsLXBlZjIyNTYuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC9mcmFtZXIv ZnJhbWVyLXByb3ZpZGVyLmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvZnJh bWVyL2ZyYW1lci5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xpbnV4L2ZyYW1lci9w ZWYyMjU2LmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHNvdW5kL3NvYy9jb2RlY3MvZnJhbWVyLWNv ZGVjLmMKPiAKCgoKLS0gCkhlcnbDqSBDb2RpbmEsIEJvb3RsaW4KRW1iZWRkZWQgTGludXggYW5k IEtlcm5lbCBlbmdpbmVlcmluZwpodHRwczovL2Jvb3RsaW4uY29tCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcg bGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmlu ZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==