From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 34BEF11CB1 for ; Sun, 7 Jan 2024 05:17:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="K/BVlirx" Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-28b82dc11e6so249035a91.1 for ; Sat, 06 Jan 2024 21:17:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1704604625; x=1705209425; darn=lists.linux.dev; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=NWyB8TfZzCqz702pXUBpDot48wicywENtsPUdumX/6U=; b=K/BVlirxPHXy9qIiFPegp2HnBuo8sWyyZDhRlAN2WuJdSWw58/QziYptgI2UKZ3+Tq khE/gPSS3eu3qbuWhE229pTodUrf1AVI/DN1QSWNV+01dS2Wr5AjIjWdeicYYGIJsM3J bE9N3PlHYtWwTgr+ErqU/zT86l8cnLpcFD05vp6tDzMdzvzKjITcBz3UbcY7v5WtgLcE QfA7240tJJc3g6YWQ1TkkcghIs88MHkKUzrgsyQk0+LACuFne3NeajurGyzUxMjMlIPh JVgWm2oSTHw/axzdzz9hO7/mQ2SsNuskhl9J59+huWk9FHJunh3lUc/HWM1+PKYfUy3a +YbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1704604625; x=1705209425; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=NWyB8TfZzCqz702pXUBpDot48wicywENtsPUdumX/6U=; b=XoI+IprK69uWkjZ5zLRoxCzWdR6Ud2NmymKjM90nzt1GOD6TY7YAviCUv9Y6f1MyIT DSCjfRC2CWyUrV5Er0t52E1m0/2JDyydfnk+ibMUH+5lmMFnBgGaP0SsUZ9rMd8wnYOw YY/FtOVfeBeBnDqtmGRjGG/GDDOGfe2H8gPMJ/40Cabr18OSUjUlLNhxX6RFo+W2DuMJ 30KRC/aMdAbNj5iANoYiuD2XF+7eKBUABEkbhID+v7QmthvK97w3dattj8VV1KJSJR6B XC/EPAmDihGIkxllLk51PBjaXMBtIBjVh1rsdhNDrAGSBG0YPmtrcNWMn54ZmTdY0RbZ iISg== X-Gm-Message-State: AOJu0Yw1HgLeq33McCr0TQM8Jhk+DZDNEcNehZPhyxCloTZa3fu3m+xH 239L+Ur7zOG00OfN0QnegJaKHkam8NfU X-Google-Smtp-Source: AGHT+IFBdvFE2Q0qIHSiOlcgmOnRSvw0TrAzPtxFZEro5J/kLPEpFkDeJ6Tv7L+vQOYwllLbaQkyGQ== X-Received: by 2002:a05:6a20:3252:b0:18f:97c:8267 with SMTP id hm18-20020a056a20325200b0018f097c8267mr467006pzc.113.1704604625435; Sat, 06 Jan 2024 21:17:05 -0800 (PST) Received: from thinkpad ([103.197.115.97]) by smtp.gmail.com with ESMTPSA id q15-20020a170902dacf00b001d337b8c0b2sm3852056plx.7.2024.01.06.21.16.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 06 Jan 2024 21:17:05 -0800 (PST) Date: Sun, 7 Jan 2024 10:46:55 +0530 From: Manivannan Sadhasivam To: Frank Li Cc: krzysztof.kozlowski@linaro.org, bhelgaas@google.com, conor+dt@kernel.org, devicetree@vger.kernel.org, festevam@gmail.com, helgaas@kernel.org, hongxing.zhu@nxp.com, imx@lists.linux.dev, kernel@pengutronix.de, krzysztof.kozlowski+dt@linaro.org, kw@linux.com, l.stach@pengutronix.de, linux-arm-kernel@lists.infradead.org, linux-imx@nxp.com, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, lpieralisi@kernel.org, robh@kernel.org, s.hauer@pengutronix.de, shawnguo@kernel.org Subject: Re: [PATCH v7 07/16] PCI: imx6: Simplify configure_type() by using mode_off and mode_mask Message-ID: <20240107051655.GF3416@thinkpad> References: <20231227182727.1747435-1-Frank.Li@nxp.com> <20231227182727.1747435-8-Frank.Li@nxp.com> Precedence: bulk X-Mailing-List: imx@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: <20231227182727.1747435-8-Frank.Li@nxp.com> On Wed, Dec 27, 2023 at 01:27:18PM -0500, Frank Li wrote: > Add drvdata::mode_off and drvdata::mode_mask to simple simplify > imx6_pcie_configure_type() logic. > > Signed-off-by: Frank Li Couple of comments below. > --- > > Notes: > Change from v2 to v3 > - none > Change from v1 to v2 > - use ffs() to fixe build error. > > drivers/pci/controller/dwc/pci-imx6.c | 60 ++++++++++++++++++--------- > 1 file changed, 40 insertions(+), 20 deletions(-) > > diff --git a/drivers/pci/controller/dwc/pci-imx6.c b/drivers/pci/controller/dwc/pci-imx6.c > index 588bfb616260e..717e8fa030deb 100644 > --- a/drivers/pci/controller/dwc/pci-imx6.c > +++ b/drivers/pci/controller/dwc/pci-imx6.c > @@ -68,6 +68,7 @@ enum imx6_pcie_variants { > > #define IMX6_PCIE_MAX_CLKS 6 > > +#define IMX6_PCIE_MAX_INSTANCES 2 > struct imx6_pcie_drvdata { > enum imx6_pcie_variants variant; > enum dw_pcie_device_mode mode; > @@ -77,6 +78,8 @@ struct imx6_pcie_drvdata { > const char *clk_names[IMX6_PCIE_MAX_CLKS]; > const u32 ltssm_off; > const u32 ltssm_mask; > + const u32 mode_off[IMX6_PCIE_MAX_INSTANCES]; > + const u32 mode_mask[IMX6_PCIE_MAX_INSTANCES]; > }; > > struct imx6_pcie { > @@ -174,32 +177,25 @@ static unsigned int imx6_pcie_grp_offset(const struct imx6_pcie *imx6_pcie) > > static void imx6_pcie_configure_type(struct imx6_pcie *imx6_pcie) > { > - unsigned int mask, val, mode; > + const struct imx6_pcie_drvdata *drvdata = imx6_pcie->drvdata; > + unsigned int mask, val, mode, id; > > - if (imx6_pcie->drvdata->mode == DW_PCIE_EP_TYPE) > + if (drvdata->mode == DW_PCIE_EP_TYPE) > mode = PCI_EXP_TYPE_ENDPOINT; > else > mode = PCI_EXP_TYPE_ROOT_PORT; > > - switch (imx6_pcie->drvdata->variant) { > - case IMX8MQ: > - case IMX8MQ_EP: > - if (imx6_pcie->controller_id == 1) { > - mask = IMX8MQ_GPR12_PCIE2_CTRL_DEVICE_TYPE; > - val = FIELD_PREP(IMX8MQ_GPR12_PCIE2_CTRL_DEVICE_TYPE, > - mode); > - } else { > - mask = IMX6Q_GPR12_DEVICE_TYPE; > - val = FIELD_PREP(IMX6Q_GPR12_DEVICE_TYPE, mode); > - } > - break; > - default: > - mask = IMX6Q_GPR12_DEVICE_TYPE; > - val = FIELD_PREP(IMX6Q_GPR12_DEVICE_TYPE, mode); > - break; > - } > + id = imx6_pcie->controller_id; > + > + /* If mode_mask[id] is zero, means each controller have its individual gpr */ > + if (!drvdata->mode_mask[id]) > + id = 0; > + > + mask = drvdata->mode_mask[id]; > + /* FIELD_PREP mask have been constant */ No need of this comment. > + val = mode << (ffs(mask) - 1); > > - regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12, mask, val); > + regmap_update_bits(imx6_pcie->iomuxc_gpr, drvdata->mode_off[id], mask, val); > } > > static int pcie_phy_poll_ack(struct imx6_pcie *imx6_pcie, bool exp_val) > @@ -1376,6 +1372,8 @@ static const struct imx6_pcie_drvdata drvdata[] = { > .clk_names = {"pcie_bus", "pcie", "pcie_phy"}, > .ltssm_off = IOMUXC_GPR12, > .ltssm_mask = IMX6Q_GPR12_PCIE_CTL_2, > + .mode_off[0] = IOMUXC_GPR12, > + .mode_mask[0] = IMX6Q_GPR12_DEVICE_TYPE, > }, > [IMX6SX] = { > .variant = IMX6SX, > @@ -1386,6 +1384,8 @@ static const struct imx6_pcie_drvdata drvdata[] = { > .clk_names = {"pcie_bus", "pcie", "pcie_phy", "pcie_inbound_axi"}, > .ltssm_off = IOMUXC_GPR12, > .ltssm_mask = IMX6Q_GPR12_PCIE_CTL_2, > + .mode_off[0] = IOMUXC_GPR12, > + .mode_mask[0] = IMX6Q_GPR12_DEVICE_TYPE, > }, > [IMX6QP] = { > .variant = IMX6QP, > @@ -1397,6 +1397,8 @@ static const struct imx6_pcie_drvdata drvdata[] = { > .clk_names = {"pcie_bus", "pcie", "pcie_phy"}, > .ltssm_off = IOMUXC_GPR12, > .ltssm_mask = IMX6Q_GPR12_PCIE_CTL_2, > + .mode_off[0] = IOMUXC_GPR12, > + .mode_mask[0] = IMX6Q_GPR12_DEVICE_TYPE, > }, > [IMX7D] = { > .variant = IMX7D, > @@ -1405,6 +1407,8 @@ static const struct imx6_pcie_drvdata drvdata[] = { > IMX6_PCIE_FLAG_HAS_PHY_RESET, > .gpr = "fsl,imx7d-iomuxc-gpr", > .clk_names = {"pcie_bus", "pcie", "pcie_phy"}, > + .mode_off[0] = IOMUXC_GPR12, > + .mode_mask[0] = IMX6Q_GPR12_DEVICE_TYPE, > }, > [IMX8MQ] = { > .variant = IMX8MQ, > @@ -1412,6 +1416,10 @@ static const struct imx6_pcie_drvdata drvdata[] = { > IMX6_PCIE_FLAG_HAS_PHY_RESET, > .gpr = "fsl,imx8mq-iomuxc-gpr", > .clk_names = {"pcie_bus", "pcie", "pcie_phy", "pcie_aux"}, > + .mode_off[0] = IOMUXC_GPR12, > + .mode_mask[0] = IMX6Q_GPR12_DEVICE_TYPE, > + .mode_off[1] = IOMUXC_GPR12, > + .mode_mask[1] = IMX8MQ_GPR12_PCIE2_CTRL_DEVICE_TYPE, Is the mode_mask differ between SoCs or fixed based on instances? I mean, if there is a guarantee that it is going to be IMX6Q_GPR12_DEVICE_TYPE for instance 1 and IMX8MQ_GPR12_PCIE2_CTRL_DEVICE_TYPE for instance 2 etc... Then we can avoid these SoC specific config and simplify the code further. - Mani > }, > [IMX8MM] = { > .variant = IMX8MM, > @@ -1420,6 +1428,8 @@ static const struct imx6_pcie_drvdata drvdata[] = { > IMX6_PCIE_FLAG_HAS_APP_RESET, > .gpr = "fsl,imx8mm-iomuxc-gpr", > .clk_names = {"pcie_bus", "pcie", "pcie_aux"}, > + .mode_off[0] = IOMUXC_GPR12, > + .mode_mask[0] = IMX6Q_GPR12_DEVICE_TYPE, > }, > [IMX8MP] = { > .variant = IMX8MP, > @@ -1428,6 +1438,8 @@ static const struct imx6_pcie_drvdata drvdata[] = { > IMX6_PCIE_FLAG_HAS_APP_RESET, > .gpr = "fsl,imx8mp-iomuxc-gpr", > .clk_names = {"pcie_bus", "pcie", "pcie_aux"}, > + .mode_off[0] = IOMUXC_GPR12, > + .mode_mask[0] = IMX6Q_GPR12_DEVICE_TYPE, > }, > [IMX8MQ_EP] = { > .variant = IMX8MQ_EP, > @@ -1436,6 +1448,10 @@ static const struct imx6_pcie_drvdata drvdata[] = { > .mode = DW_PCIE_EP_TYPE, > .gpr = "fsl,imx8mq-iomuxc-gpr", > .clk_names = {"pcie_bus", "pcie", "pcie_phy", "pcie_aux"}, > + .mode_off[0] = IOMUXC_GPR12, > + .mode_mask[0] = IMX6Q_GPR12_DEVICE_TYPE, > + .mode_off[1] = IOMUXC_GPR12, > + .mode_mask[1] = IMX8MQ_GPR12_PCIE2_CTRL_DEVICE_TYPE, > }, > [IMX8MM_EP] = { > .variant = IMX8MM_EP, > @@ -1443,6 +1459,8 @@ static const struct imx6_pcie_drvdata drvdata[] = { > .mode = DW_PCIE_EP_TYPE, > .gpr = "fsl,imx8mm-iomuxc-gpr", > .clk_names = {"pcie_bus", "pcie", "pcie_aux"}, > + .mode_off[0] = IOMUXC_GPR12, > + .mode_mask[0] = IMX6Q_GPR12_DEVICE_TYPE, > }, > [IMX8MP_EP] = { > .variant = IMX8MP_EP, > @@ -1450,6 +1468,8 @@ static const struct imx6_pcie_drvdata drvdata[] = { > .mode = DW_PCIE_EP_TYPE, > .gpr = "fsl,imx8mp-iomuxc-gpr", > .clk_names = {"pcie_bus", "pcie", "pcie_aux"}, > + .mode_off[0] = IOMUXC_GPR12, > + .mode_mask[0] = IMX6Q_GPR12_DEVICE_TYPE, > }, > }; > > -- > 2.34.1 > -- மணிவண்ணன் சதாசிவம் From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 45C25C47077 for ; Sun, 7 Jan 2024 05:17:44 +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=J8I8Vqr1c2YLE4mdY3GCoR9LC8ah+2RIOei91hUI2Bo=; b=vfrz8yvAsy2Z+Y UlH+ccthL8zgpvVkAKoDln5OpjvxDJPQejNBMuYqkVnV0SdPrKxXX0DQexCPM3sxlrddpVUnva6oU RSTeoWREN91tSNKGvpg6IUIyFOejFYx1iH1AJXLbSQSsVieWEVo3C951rYaQO/NGQvzYlWOlsDKub D9oOMwLMTa+9C6hNm/mfHtjh0qDJvb1fRVeVItt4zj/qWkGueMb5P2CfnFYLrIuYwfJ8SJJM6aXNO WceEosDf0eKE/dIhbBu2RFNpReOmiU6ur369xcJRGhqhem1nYU+6MA0syed9Z1Lb3QA3jW5ZNNkFQ rYZCBDTRyaB0kgS5NYMg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rMLX5-002Nrr-0M; Sun, 07 Jan 2024 05:17:11 +0000 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rMLX1-002NrK-2b for linux-arm-kernel@lists.infradead.org; Sun, 07 Jan 2024 05:17:09 +0000 Received: by mail-pj1-x102d.google.com with SMTP id 98e67ed59e1d1-28bec6ae0ffso242626a91.3 for ; Sat, 06 Jan 2024 21:17:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1704604625; x=1705209425; darn=lists.infradead.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=NWyB8TfZzCqz702pXUBpDot48wicywENtsPUdumX/6U=; b=Ho32aG6hQtjbJ3B9QmFQZ/F4uOajl0bHcl4QrF9vNf8OGZkHqD1dIcoSMXum+edl7t f09HwntekwVlO8bk5B7seNwS7HQcZ5THR5HC8M0owAcgz02dQT/Z3d54rVLMXjhgP2bW JBmA7uWGYJ41+av/VNZRFoTut7pFNaPTrYGV/AQK+joWWNhha93Q+/TwUPixqc4P446N OlZUhZEichdrhjjqjiOPxeZ+i3+1Vi5EEh86JEf/AWBIjBUKK4rnkNoH6+Zag7LwsCFZ dQbn+URF+B3zpmJ/49UVNsDxmEXZE3OLjvMUv4kCrHrCU1DUuPxIUJPQeMhPaF+qiSrA wHJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1704604625; x=1705209425; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=NWyB8TfZzCqz702pXUBpDot48wicywENtsPUdumX/6U=; b=nV2WGMxlLvFvontSlJt3h5FOf1C8RVKBH3khIciW/mP8NaQYQlkNtHWdJpBsSXHu1V rSlVJVjwOeHXNk0avp7g7V++REt070fdQ7ix527CMmo7ivhaJfhcZofF/IuD8VhhQVAG T9dvCLShe/hbyLLhnQ71DlpiEbOVP8DyWTVegHr4/M9RzIn/TYNS+8zUUI0asoMVjN27 2BgMir0kkOtqm7wC7nAMLlr2T8EKW2la2Hz9gc2mQc0DmvV/YD+KLLtf/G7fPhzJrktt IL76+ZBe8LHulgTvQ8EOV9SJRYEws9BSJQAGcL0EwTOby80cjCKO2PpgyqhBtLDnXXfu Sbfw== X-Gm-Message-State: AOJu0YwuoraQ7rUMPnOvh88NPC84kgbWealyUqDHbBoygMrR6mD9fOQz UbaCnnUioyBDTP6w4y/5prdbvDzlyEKB X-Google-Smtp-Source: AGHT+IFBdvFE2Q0qIHSiOlcgmOnRSvw0TrAzPtxFZEro5J/kLPEpFkDeJ6Tv7L+vQOYwllLbaQkyGQ== X-Received: by 2002:a05:6a20:3252:b0:18f:97c:8267 with SMTP id hm18-20020a056a20325200b0018f097c8267mr467006pzc.113.1704604625435; Sat, 06 Jan 2024 21:17:05 -0800 (PST) Received: from thinkpad ([103.197.115.97]) by smtp.gmail.com with ESMTPSA id q15-20020a170902dacf00b001d337b8c0b2sm3852056plx.7.2024.01.06.21.16.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 06 Jan 2024 21:17:05 -0800 (PST) Date: Sun, 7 Jan 2024 10:46:55 +0530 From: Manivannan Sadhasivam To: Frank Li Cc: krzysztof.kozlowski@linaro.org, bhelgaas@google.com, conor+dt@kernel.org, devicetree@vger.kernel.org, festevam@gmail.com, helgaas@kernel.org, hongxing.zhu@nxp.com, imx@lists.linux.dev, kernel@pengutronix.de, krzysztof.kozlowski+dt@linaro.org, kw@linux.com, l.stach@pengutronix.de, linux-arm-kernel@lists.infradead.org, linux-imx@nxp.com, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, lpieralisi@kernel.org, robh@kernel.org, s.hauer@pengutronix.de, shawnguo@kernel.org Subject: Re: [PATCH v7 07/16] PCI: imx6: Simplify configure_type() by using mode_off and mode_mask Message-ID: <20240107051655.GF3416@thinkpad> References: <20231227182727.1747435-1-Frank.Li@nxp.com> <20231227182727.1747435-8-Frank.Li@nxp.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20231227182727.1747435-8-Frank.Li@nxp.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240106_211707_852651_01441D17 X-CRM114-Status: GOOD ( 23.15 ) 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 T24gV2VkLCBEZWMgMjcsIDIwMjMgYXQgMDE6Mjc6MThQTSAtMDUwMCwgRnJhbmsgTGkgd3JvdGU6 Cj4gQWRkIGRydmRhdGE6Om1vZGVfb2ZmIGFuZCBkcnZkYXRhOjptb2RlX21hc2sgdG8gc2ltcGxl CgpzaW1wbGlmeQoKPiBpbXg2X3BjaWVfY29uZmlndXJlX3R5cGUoKSBsb2dpYy4KPiAKPiBTaWdu ZWQtb2ZmLWJ5OiBGcmFuayBMaSA8RnJhbmsuTGlAbnhwLmNvbT4KCkNvdXBsZSBvZiBjb21tZW50 cyBiZWxvdy4KCj4gLS0tCj4gCj4gTm90ZXM6Cj4gICAgIENoYW5nZSBmcm9tIHYyIHRvIHYzCj4g ICAgIC0gbm9uZQo+ICAgICBDaGFuZ2UgZnJvbSB2MSB0byB2Mgo+ICAgICAtIHVzZSBmZnMoKSB0 byBmaXhlIGJ1aWxkIGVycm9yLgo+IAo+ICBkcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2kt aW14Ni5jIHwgNjAgKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tCj4gIDEgZmlsZSBjaGFuZ2Vk LCA0MCBpbnNlcnRpb25zKCspLCAyMCBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9wY2kvY29udHJvbGxlci9kd2MvcGNpLWlteDYuYyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xs ZXIvZHdjL3BjaS1pbXg2LmMKPiBpbmRleCA1ODhiZmI2MTYyNjBlLi43MTdlOGZhMDMwZGViIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL3BjaS1pbXg2LmMKPiArKysg Yi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2ktaW14Ni5jCj4gQEAgLTY4LDYgKzY4LDcg QEAgZW51bSBpbXg2X3BjaWVfdmFyaWFudHMgewo+ICAKPiAgI2RlZmluZSBJTVg2X1BDSUVfTUFY X0NMS1MgICAgICAgNgo+ICAKPiArI2RlZmluZSBJTVg2X1BDSUVfTUFYX0lOU1RBTkNFUwkJCTIK PiAgc3RydWN0IGlteDZfcGNpZV9kcnZkYXRhIHsKPiAgCWVudW0gaW14Nl9wY2llX3ZhcmlhbnRz IHZhcmlhbnQ7Cj4gIAllbnVtIGR3X3BjaWVfZGV2aWNlX21vZGUgbW9kZTsKPiBAQCAtNzcsNiAr NzgsOCBAQCBzdHJ1Y3QgaW14Nl9wY2llX2RydmRhdGEgewo+ICAJY29uc3QgY2hhciAqY2xrX25h bWVzW0lNWDZfUENJRV9NQVhfQ0xLU107Cj4gIAljb25zdCB1MzIgbHRzc21fb2ZmOwo+ICAJY29u c3QgdTMyIGx0c3NtX21hc2s7Cj4gKwljb25zdCB1MzIgbW9kZV9vZmZbSU1YNl9QQ0lFX01BWF9J TlNUQU5DRVNdOwo+ICsJY29uc3QgdTMyIG1vZGVfbWFza1tJTVg2X1BDSUVfTUFYX0lOU1RBTkNF U107Cj4gIH07Cj4gIAo+ICBzdHJ1Y3QgaW14Nl9wY2llIHsKPiBAQCAtMTc0LDMyICsxNzcsMjUg QEAgc3RhdGljIHVuc2lnbmVkIGludCBpbXg2X3BjaWVfZ3JwX29mZnNldChjb25zdCBzdHJ1Y3Qg aW14Nl9wY2llICppbXg2X3BjaWUpCj4gIAo+ICBzdGF0aWMgdm9pZCBpbXg2X3BjaWVfY29uZmln dXJlX3R5cGUoc3RydWN0IGlteDZfcGNpZSAqaW14Nl9wY2llKQo+ICB7Cj4gLQl1bnNpZ25lZCBp bnQgbWFzaywgdmFsLCBtb2RlOwo+ICsJY29uc3Qgc3RydWN0IGlteDZfcGNpZV9kcnZkYXRhICpk cnZkYXRhID0gaW14Nl9wY2llLT5kcnZkYXRhOwo+ICsJdW5zaWduZWQgaW50IG1hc2ssIHZhbCwg bW9kZSwgaWQ7Cj4gIAo+IC0JaWYgKGlteDZfcGNpZS0+ZHJ2ZGF0YS0+bW9kZSA9PSBEV19QQ0lF X0VQX1RZUEUpCj4gKwlpZiAoZHJ2ZGF0YS0+bW9kZSA9PSBEV19QQ0lFX0VQX1RZUEUpCj4gIAkJ bW9kZSA9IFBDSV9FWFBfVFlQRV9FTkRQT0lOVDsKPiAgCWVsc2UKPiAgCQltb2RlID0gUENJX0VY UF9UWVBFX1JPT1RfUE9SVDsKPiAgCj4gLQlzd2l0Y2ggKGlteDZfcGNpZS0+ZHJ2ZGF0YS0+dmFy aWFudCkgewo+IC0JY2FzZSBJTVg4TVE6Cj4gLQljYXNlIElNWDhNUV9FUDoKPiAtCQlpZiAoaW14 Nl9wY2llLT5jb250cm9sbGVyX2lkID09IDEpIHsKPiAtCQkJbWFzayA9IElNWDhNUV9HUFIxMl9Q Q0lFMl9DVFJMX0RFVklDRV9UWVBFOwo+IC0JCQl2YWwgID0gRklFTERfUFJFUChJTVg4TVFfR1BS MTJfUENJRTJfQ1RSTF9ERVZJQ0VfVFlQRSwKPiAtCQkJCQkgIG1vZGUpOwo+IC0JCX0gZWxzZSB7 Cj4gLQkJCW1hc2sgPSBJTVg2UV9HUFIxMl9ERVZJQ0VfVFlQRTsKPiAtCQkJdmFsICA9IEZJRUxE X1BSRVAoSU1YNlFfR1BSMTJfREVWSUNFX1RZUEUsIG1vZGUpOwo+IC0JCX0KPiAtCQlicmVhazsK PiAtCWRlZmF1bHQ6Cj4gLQkJbWFzayA9IElNWDZRX0dQUjEyX0RFVklDRV9UWVBFOwo+IC0JCXZh bCAgPSBGSUVMRF9QUkVQKElNWDZRX0dQUjEyX0RFVklDRV9UWVBFLCBtb2RlKTsKPiAtCQlicmVh azsKPiAtCX0KPiArCWlkID0gaW14Nl9wY2llLT5jb250cm9sbGVyX2lkOwo+ICsKPiArCS8qIElm IG1vZGVfbWFza1tpZF0gaXMgemVybywgbWVhbnMgZWFjaCBjb250cm9sbGVyIGhhdmUgaXRzIGlu ZGl2aWR1YWwgZ3ByICovCj4gKwlpZiAoIWRydmRhdGEtPm1vZGVfbWFza1tpZF0pCj4gKwkJaWQg PSAwOwo+ICsKPiArCW1hc2sgPSBkcnZkYXRhLT5tb2RlX21hc2tbaWRdOwo+ICsJLyogRklFTERf UFJFUCBtYXNrIGhhdmUgYmVlbiBjb25zdGFudCAqLwoKTm8gbmVlZCBvZiB0aGlzIGNvbW1lbnQu Cgo+ICsJdmFsID0gbW9kZSA8PCAoZmZzKG1hc2spIC0gMSk7Cj4gIAo+IC0JcmVnbWFwX3VwZGF0 ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwgSU9NVVhDX0dQUjEyLCBtYXNrLCB2YWwpOwo+ ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwgZHJ2ZGF0YS0+bW9k ZV9vZmZbaWRdLCBtYXNrLCB2YWwpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgaW50IHBjaWVfcGh5X3Bv bGxfYWNrKHN0cnVjdCBpbXg2X3BjaWUgKmlteDZfcGNpZSwgYm9vbCBleHBfdmFsKQo+IEBAIC0x Mzc2LDYgKzEzNzIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlteDZfcGNpZV9kcnZkYXRhIGRy dmRhdGFbXSA9IHsKPiAgCQkuY2xrX25hbWVzID0geyJwY2llX2J1cyIsICJwY2llIiwgInBjaWVf cGh5In0sCj4gIAkJLmx0c3NtX29mZiA9IElPTVVYQ19HUFIxMiwKPiAgCQkubHRzc21fbWFzayA9 IElNWDZRX0dQUjEyX1BDSUVfQ1RMXzIsCj4gKwkJLm1vZGVfb2ZmWzBdID0gSU9NVVhDX0dQUjEy LAo+ICsJCS5tb2RlX21hc2tbMF0gPSBJTVg2UV9HUFIxMl9ERVZJQ0VfVFlQRSwKPiAgCX0sCj4g IAlbSU1YNlNYXSA9IHsKPiAgCQkudmFyaWFudCA9IElNWDZTWCwKPiBAQCAtMTM4Niw2ICsxMzg0 LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbXg2X3BjaWVfZHJ2ZGF0YSBkcnZkYXRhW10gPSB7 Cj4gIAkJLmNsa19uYW1lcyA9IHsicGNpZV9idXMiLCAicGNpZSIsICJwY2llX3BoeSIsICJwY2ll X2luYm91bmRfYXhpIn0sCj4gIAkJLmx0c3NtX29mZiA9IElPTVVYQ19HUFIxMiwKPiAgCQkubHRz c21fbWFzayA9IElNWDZRX0dQUjEyX1BDSUVfQ1RMXzIsCj4gKwkJLm1vZGVfb2ZmWzBdID0gSU9N VVhDX0dQUjEyLAo+ICsJCS5tb2RlX21hc2tbMF0gPSBJTVg2UV9HUFIxMl9ERVZJQ0VfVFlQRSwK PiAgCX0sCj4gIAlbSU1YNlFQXSA9IHsKPiAgCQkudmFyaWFudCA9IElNWDZRUCwKPiBAQCAtMTM5 Nyw2ICsxMzk3LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbXg2X3BjaWVfZHJ2ZGF0YSBkcnZk YXRhW10gPSB7Cj4gIAkJLmNsa19uYW1lcyA9IHsicGNpZV9idXMiLCAicGNpZSIsICJwY2llX3Bo eSJ9LAo+ICAJCS5sdHNzbV9vZmYgPSBJT01VWENfR1BSMTIsCj4gIAkJLmx0c3NtX21hc2sgPSBJ TVg2UV9HUFIxMl9QQ0lFX0NUTF8yLAo+ICsJCS5tb2RlX29mZlswXSA9IElPTVVYQ19HUFIxMiwK PiArCQkubW9kZV9tYXNrWzBdID0gSU1YNlFfR1BSMTJfREVWSUNFX1RZUEUsCj4gIAl9LAo+ICAJ W0lNWDdEXSA9IHsKPiAgCQkudmFyaWFudCA9IElNWDdELAo+IEBAIC0xNDA1LDYgKzE0MDcsOCBA QCBzdGF0aWMgY29uc3Qgc3RydWN0IGlteDZfcGNpZV9kcnZkYXRhIGRydmRhdGFbXSA9IHsKPiAg CQkJIElNWDZfUENJRV9GTEFHX0hBU19QSFlfUkVTRVQsCj4gIAkJLmdwciA9ICJmc2wsaW14N2Qt aW9tdXhjLWdwciIsCj4gIAkJLmNsa19uYW1lcyA9IHsicGNpZV9idXMiLCAicGNpZSIsICJwY2ll X3BoeSJ9LAo+ICsJCS5tb2RlX29mZlswXSA9IElPTVVYQ19HUFIxMiwKPiArCQkubW9kZV9tYXNr WzBdID0gSU1YNlFfR1BSMTJfREVWSUNFX1RZUEUsCj4gIAl9LAo+ICAJW0lNWDhNUV0gPSB7Cj4g IAkJLnZhcmlhbnQgPSBJTVg4TVEsCj4gQEAgLTE0MTIsNiArMTQxNiwxMCBAQCBzdGF0aWMgY29u c3Qgc3RydWN0IGlteDZfcGNpZV9kcnZkYXRhIGRydmRhdGFbXSA9IHsKPiAgCQkJIElNWDZfUENJ RV9GTEFHX0hBU19QSFlfUkVTRVQsCj4gIAkJLmdwciA9ICJmc2wsaW14OG1xLWlvbXV4Yy1ncHIi LAo+ICAJCS5jbGtfbmFtZXMgPSB7InBjaWVfYnVzIiwgInBjaWUiLCAicGNpZV9waHkiLCAicGNp ZV9hdXgifSwKPiArCQkubW9kZV9vZmZbMF0gPSBJT01VWENfR1BSMTIsCj4gKwkJLm1vZGVfbWFz a1swXSA9IElNWDZRX0dQUjEyX0RFVklDRV9UWVBFLAo+ICsJCS5tb2RlX29mZlsxXSA9IElPTVVY Q19HUFIxMiwKPiArCQkubW9kZV9tYXNrWzFdID0gSU1YOE1RX0dQUjEyX1BDSUUyX0NUUkxfREVW SUNFX1RZUEUsCgpJcyB0aGUgbW9kZV9tYXNrIGRpZmZlciBiZXR3ZWVuIFNvQ3Mgb3IgZml4ZWQg YmFzZWQgb24gaW5zdGFuY2VzPyBJIG1lYW4sIGlmCnRoZXJlIGlzIGEgZ3VhcmFudGVlIHRoYXQg aXQgaXMgZ29pbmcgdG8gYmUgSU1YNlFfR1BSMTJfREVWSUNFX1RZUEUgZm9yIGluc3RhbmNlCjEg YW5kIElNWDhNUV9HUFIxMl9QQ0lFMl9DVFJMX0RFVklDRV9UWVBFIGZvciBpbnN0YW5jZSAyIGV0 Yy4uLgoKVGhlbiB3ZSBjYW4gYXZvaWQgdGhlc2UgU29DIHNwZWNpZmljIGNvbmZpZyBhbmQgc2lt cGxpZnkgdGhlIGNvZGUgZnVydGhlci4KCi0gTWFuaQoKPiAgCX0sCj4gIAlbSU1YOE1NXSA9IHsK PiAgCQkudmFyaWFudCA9IElNWDhNTSwKPiBAQCAtMTQyMCw2ICsxNDI4LDggQEAgc3RhdGljIGNv bnN0IHN0cnVjdCBpbXg2X3BjaWVfZHJ2ZGF0YSBkcnZkYXRhW10gPSB7Cj4gIAkJCSBJTVg2X1BD SUVfRkxBR19IQVNfQVBQX1JFU0VULAo+ICAJCS5ncHIgPSAiZnNsLGlteDhtbS1pb211eGMtZ3By IiwKPiAgCQkuY2xrX25hbWVzID0geyJwY2llX2J1cyIsICJwY2llIiwgInBjaWVfYXV4In0sCj4g KwkJLm1vZGVfb2ZmWzBdID0gSU9NVVhDX0dQUjEyLAo+ICsJCS5tb2RlX21hc2tbMF0gPSBJTVg2 UV9HUFIxMl9ERVZJQ0VfVFlQRSwKPiAgCX0sCj4gIAlbSU1YOE1QXSA9IHsKPiAgCQkudmFyaWFu dCA9IElNWDhNUCwKPiBAQCAtMTQyOCw2ICsxNDM4LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBp bXg2X3BjaWVfZHJ2ZGF0YSBkcnZkYXRhW10gPSB7Cj4gIAkJCSBJTVg2X1BDSUVfRkxBR19IQVNf QVBQX1JFU0VULAo+ICAJCS5ncHIgPSAiZnNsLGlteDhtcC1pb211eGMtZ3ByIiwKPiAgCQkuY2xr X25hbWVzID0geyJwY2llX2J1cyIsICJwY2llIiwgInBjaWVfYXV4In0sCj4gKwkJLm1vZGVfb2Zm WzBdID0gSU9NVVhDX0dQUjEyLAo+ICsJCS5tb2RlX21hc2tbMF0gPSBJTVg2UV9HUFIxMl9ERVZJ Q0VfVFlQRSwKPiAgCX0sCj4gIAlbSU1YOE1RX0VQXSA9IHsKPiAgCQkudmFyaWFudCA9IElNWDhN UV9FUCwKPiBAQCAtMTQzNiw2ICsxNDQ4LDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW14Nl9w Y2llX2RydmRhdGEgZHJ2ZGF0YVtdID0gewo+ICAJCS5tb2RlID0gRFdfUENJRV9FUF9UWVBFLAo+ ICAJCS5ncHIgPSAiZnNsLGlteDhtcS1pb211eGMtZ3ByIiwKPiAgCQkuY2xrX25hbWVzID0geyJw Y2llX2J1cyIsICJwY2llIiwgInBjaWVfcGh5IiwgInBjaWVfYXV4In0sCj4gKwkJLm1vZGVfb2Zm WzBdID0gSU9NVVhDX0dQUjEyLAo+ICsJCS5tb2RlX21hc2tbMF0gPSBJTVg2UV9HUFIxMl9ERVZJ Q0VfVFlQRSwKPiArCQkubW9kZV9vZmZbMV0gPSBJT01VWENfR1BSMTIsCj4gKwkJLm1vZGVfbWFz a1sxXSA9IElNWDhNUV9HUFIxMl9QQ0lFMl9DVFJMX0RFVklDRV9UWVBFLAo+ICAJfSwKPiAgCVtJ TVg4TU1fRVBdID0gewo+ICAJCS52YXJpYW50ID0gSU1YOE1NX0VQLAo+IEBAIC0xNDQzLDYgKzE0 NTksOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlteDZfcGNpZV9kcnZkYXRhIGRydmRhdGFbXSA9 IHsKPiAgCQkubW9kZSA9IERXX1BDSUVfRVBfVFlQRSwKPiAgCQkuZ3ByID0gImZzbCxpbXg4bW0t aW9tdXhjLWdwciIsCj4gIAkJLmNsa19uYW1lcyA9IHsicGNpZV9idXMiLCAicGNpZSIsICJwY2ll X2F1eCJ9LAo+ICsJCS5tb2RlX29mZlswXSA9IElPTVVYQ19HUFIxMiwKPiArCQkubW9kZV9tYXNr WzBdID0gSU1YNlFfR1BSMTJfREVWSUNFX1RZUEUsCj4gIAl9LAo+ICAJW0lNWDhNUF9FUF0gPSB7 Cj4gIAkJLnZhcmlhbnQgPSBJTVg4TVBfRVAsCj4gQEAgLTE0NTAsNiArMTQ2OCw4IEBAIHN0YXRp YyBjb25zdCBzdHJ1Y3QgaW14Nl9wY2llX2RydmRhdGEgZHJ2ZGF0YVtdID0gewo+ICAJCS5tb2Rl ID0gRFdfUENJRV9FUF9UWVBFLAo+ICAJCS5ncHIgPSAiZnNsLGlteDhtcC1pb211eGMtZ3ByIiwK PiAgCQkuY2xrX25hbWVzID0geyJwY2llX2J1cyIsICJwY2llIiwgInBjaWVfYXV4In0sCj4gKwkJ Lm1vZGVfb2ZmWzBdID0gSU9NVVhDX0dQUjEyLAo+ICsJCS5tb2RlX21hc2tbMF0gPSBJTVg2UV9H UFIxMl9ERVZJQ0VfVFlQRSwKPiAgCX0sCj4gIH07Cj4gIAo+IC0tIAo+IDIuMzQuMQo+IAoKLS0g CuCuruCuo+Cuv+CuteCuo+CvjeCuo+CuqeCvjSDgrprgrqTgrr7grprgrr/grrXgrq7gr40KCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1r ZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpo dHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJu ZWwK