From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pg1-f173.google.com (mail-pg1-f173.google.com [209.85.215.173]) (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 769507A233 for ; Tue, 12 Dec 2023 16:49:24 +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="ypb+Rmd2" Received: by mail-pg1-f173.google.com with SMTP id 41be03b00d2f7-5c629a9fe79so3179480a12.3 for ; Tue, 12 Dec 2023 08:49:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1702399764; x=1703004564; 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=O3Qb4Pmctf3QLFWZxDCGFwLHLw9E0QvAVnQNcESZf+I=; b=ypb+Rmd2v0PCVp2ryMB/4l0pau4tURHjtpYI68lqEnJFKl9TfxB8cbfbINDf2TrN8D QkCzd/nbcF548utxDOZzVBoeRmJqdmH8KkUfLixuujW+7K8F5yU9JEmQf79a6vzPR0L2 GqtoVTcRFkdCCi9o79xZH2gXxsiCbgkN79zNRDyzMtP+2tNBLznKVrEH138zRaLhdAdf 366X08EE28l+Y7wh7dvlYCVQsEZ5k9B9uCGx5aUmmPJCBEinlBhMeK+zl027GA4gEUGN +0LBgd/T59oa9A2YxuhDnSUi89ONuCo03KiByg74Jy5f7R/p8JB0XNq5BdIsKZRkdwDm mAVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702399764; x=1703004564; 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=O3Qb4Pmctf3QLFWZxDCGFwLHLw9E0QvAVnQNcESZf+I=; b=KFYvS3gOaf7RCTi79sapdNdnk9VxxPlXg3z6A1RB483OQvD6+3gDIacy73xmNG+6pe 7YEgAglZBjfuZo2CQhx6d/HwZlmBSfg2E5xLRIxWTMGCK7IMqznbPGMoKEmVxnmz6Miu 1B5T29g2JLdAoEZg0CpbRURLE6hKXbi7zat1nrn36EwuW6mGqmpfC8r6SWVZvlVm5ekv 1auy0jaxxaySd3/y0DulhmuasVhsr9pl/DK2yXgiUsFmwq4JGd45/q5u6n3Vwz9miEpI XDTwga+M/5KNl3mSE0SJqayu5PrT16T3Vkm/nZsWipUFjuSLfmsYbspR/c3J/8qAy+qe TQzQ== X-Gm-Message-State: AOJu0YzpyKVGC1eF7PEc/Bwv3pRAyTbyfVj0tBzBnlCy6LTwTX6aKChw SVTQGxw3Q/YuseUW1/fKp0x7 X-Google-Smtp-Source: AGHT+IEdRCICFtznyHHkBUNYDtZL2BWvbWNge5n8xa4XWLlDEc4bBXuXkjMOrYe3szp98CDGiy/H6w== X-Received: by 2002:a05:6a21:3281:b0:18b:985e:8035 with SMTP id yt1-20020a056a21328100b0018b985e8035mr3756929pzb.12.1702399763615; Tue, 12 Dec 2023 08:49:23 -0800 (PST) Received: from thinkpad ([117.202.189.222]) by smtp.gmail.com with ESMTPSA id v29-20020a63481d000000b005c19c586cb7sm8368570pga.33.2023.12.12.08.49.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 08:49:22 -0800 (PST) Date: Tue, 12 Dec 2023 22:19:13 +0530 From: Manivannan Sadhasivam To: Frank Li Cc: 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 v3 01/13] PCI: imx6: Simplify clock handling by using HAS_CLK_* bitmask Message-ID: <20231212164913.GA21240@thinkpad> References: <20231211215842.134823-1-Frank.Li@nxp.com> <20231211215842.134823-2-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: <20231211215842.134823-2-Frank.Li@nxp.com> On Mon, Dec 11, 2023 at 04:58:30PM -0500, Frank Li wrote: > Refactors the clock handling logic in the imx6 PCI driver by adding > HAS_CLK_* bitmask define for drvdata::flags . Simplifies the code and makes > it more maintainable, as future additions of SOC support will only require > straightforward changes. The drvdata::flags and a bitmask ensures a cleaner > and more scalable switch-case structure for handling clocks. > Is there any necessity to validate each clock in the driver? I mean, can't you just rely on devicetree to provide enough clocks for the functioning of the PCIe controller? If you can rely on devicetree (everyone should in an ideal world), then you can just use devm_clk_bulk_get_all() to get all available clocks for the SoC and just enable/disable whatever is available. This will greatly simplify the code. Only downside of this approach is, if the devicetree is not supplying enough clocks, then it will be difficult to find why PCIe is not working. But this also means that the devicetree is screwed. - Mani > Signed-off-by: Frank Li > --- > > Notes: > Change from v1 to v3 > - none > > drivers/pci/controller/dwc/pci-imx6.c | 84 +++++++++++++-------------- > 1 file changed, 42 insertions(+), 42 deletions(-) > > diff --git a/drivers/pci/controller/dwc/pci-imx6.c b/drivers/pci/controller/dwc/pci-imx6.c > index 74703362aeec7..8a9b527934f80 100644 > --- a/drivers/pci/controller/dwc/pci-imx6.c > +++ b/drivers/pci/controller/dwc/pci-imx6.c > @@ -60,6 +60,10 @@ enum imx6_pcie_variants { > #define IMX6_PCIE_FLAG_IMX6_PHY BIT(0) > #define IMX6_PCIE_FLAG_IMX6_SPEED_CHANGE BIT(1) > #define IMX6_PCIE_FLAG_SUPPORTS_SUSPEND BIT(2) > +#define IMX6_PCIE_FLAG_HAS_CLK_INBOUND_AXI BIT(3) > +#define IMX6_PCIE_FLAG_HAS_CLK_AUX BIT(4) > + > +#define imx6_check_flag(pci, val) (pci->drvdata->flags & val) > > struct imx6_pcie_drvdata { > enum imx6_pcie_variants variant; > @@ -550,19 +554,23 @@ static int imx6_pcie_attach_pd(struct device *dev) > > static int imx6_pcie_enable_ref_clk(struct imx6_pcie *imx6_pcie) > { > - struct dw_pcie *pci = imx6_pcie->pci; > - struct device *dev = pci->dev; > unsigned int offset; > int ret = 0; > > - switch (imx6_pcie->drvdata->variant) { > - case IMX6SX: > + if (imx6_check_flag(imx6_pcie, IMX6_PCIE_FLAG_HAS_CLK_INBOUND_AXI)) { > ret = clk_prepare_enable(imx6_pcie->pcie_inbound_axi); > - if (ret) { > - dev_err(dev, "unable to enable pcie_axi clock\n"); > - break; > - } > + if (ret) > + return ret; > + } > > + if (imx6_check_flag(imx6_pcie, IMX6_PCIE_FLAG_HAS_CLK_AUX)) { > + ret = clk_prepare_enable(imx6_pcie->pcie_aux); > + if (ret) > + return ret; > + } > + > + switch (imx6_pcie->drvdata->variant) { > + case IMX6SX: > regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12, > IMX6SX_GPR12_PCIE_TEST_POWERDOWN, 0); > break; > @@ -589,12 +597,6 @@ static int imx6_pcie_enable_ref_clk(struct imx6_pcie *imx6_pcie) > case IMX8MQ_EP: > case IMX8MP: > case IMX8MP_EP: > - ret = clk_prepare_enable(imx6_pcie->pcie_aux); > - if (ret) { > - dev_err(dev, "unable to enable pcie_aux clock\n"); > - break; > - } > - > offset = imx6_pcie_grp_offset(imx6_pcie); > /* > * Set the over ride low and enabled > @@ -614,10 +616,13 @@ static int imx6_pcie_enable_ref_clk(struct imx6_pcie *imx6_pcie) > > static void imx6_pcie_disable_ref_clk(struct imx6_pcie *imx6_pcie) > { > - switch (imx6_pcie->drvdata->variant) { > - case IMX6SX: > + if (imx6_check_flag(imx6_pcie, IMX6_PCIE_FLAG_HAS_CLK_INBOUND_AXI)) > clk_disable_unprepare(imx6_pcie->pcie_inbound_axi); > - break; > + > + if (imx6_check_flag(imx6_pcie, IMX6_PCIE_FLAG_HAS_CLK_AUX)) > + clk_disable_unprepare(imx6_pcie->pcie_aux); > + > + switch (imx6_pcie->drvdata->variant) { > case IMX6QP: > case IMX6Q: > regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, > @@ -631,14 +636,6 @@ static void imx6_pcie_disable_ref_clk(struct imx6_pcie *imx6_pcie) > IMX7D_GPR12_PCIE_PHY_REFCLK_SEL, > IMX7D_GPR12_PCIE_PHY_REFCLK_SEL); > break; > - case IMX8MM: > - case IMX8MM_EP: > - case IMX8MQ: > - case IMX8MQ_EP: > - case IMX8MP: > - case IMX8MP_EP: > - clk_disable_unprepare(imx6_pcie->pcie_aux); > - break; > default: > break; > } > @@ -1316,21 +1313,21 @@ static int imx6_pcie_probe(struct platform_device *pdev) > return dev_err_probe(dev, PTR_ERR(imx6_pcie->pcie), > "pcie clock source missing or invalid\n"); > > - switch (imx6_pcie->drvdata->variant) { > - case IMX6SX: > - imx6_pcie->pcie_inbound_axi = devm_clk_get(dev, > - "pcie_inbound_axi"); > + if (imx6_check_flag(imx6_pcie, IMX6_PCIE_FLAG_HAS_CLK_INBOUND_AXI)) { > + imx6_pcie->pcie_inbound_axi = devm_clk_get(dev, "pcie_inbound_axi"); > if (IS_ERR(imx6_pcie->pcie_inbound_axi)) > - return dev_err_probe(dev, PTR_ERR(imx6_pcie->pcie_inbound_axi), > - "pcie_inbound_axi clock missing or invalid\n"); > - break; > - case IMX8MQ: > - case IMX8MQ_EP: > + dev_err_probe(dev, PTR_ERR(imx6_pcie->pcie_inbound_axi), > + "pcie_inbound_axi clock missing or invalid\n"); > + } > + > + if (imx6_check_flag(imx6_pcie, IMX6_PCIE_FLAG_HAS_CLK_AUX)) { > imx6_pcie->pcie_aux = devm_clk_get(dev, "pcie_aux"); > if (IS_ERR(imx6_pcie->pcie_aux)) > return dev_err_probe(dev, PTR_ERR(imx6_pcie->pcie_aux), > "pcie_aux clock source missing or invalid\n"); > - fallthrough; > + } > + > + switch (imx6_pcie->drvdata->variant) { > case IMX7D: > if (dbi_base->start == IMX8MQ_PCIE2_BASE_ADDR) > imx6_pcie->controller_id = 1; > @@ -1353,10 +1350,6 @@ static int imx6_pcie_probe(struct platform_device *pdev) > case IMX8MM_EP: > case IMX8MP: > case IMX8MP_EP: > - imx6_pcie->pcie_aux = devm_clk_get(dev, "pcie_aux"); > - if (IS_ERR(imx6_pcie->pcie_aux)) > - return dev_err_probe(dev, PTR_ERR(imx6_pcie->pcie_aux), > - "pcie_aux clock source missing or invalid\n"); > imx6_pcie->apps_reset = devm_reset_control_get_exclusive(dev, > "apps"); > if (IS_ERR(imx6_pcie->apps_reset)) > @@ -1482,7 +1475,8 @@ static const struct imx6_pcie_drvdata drvdata[] = { > .variant = IMX6SX, > .flags = IMX6_PCIE_FLAG_IMX6_PHY | > IMX6_PCIE_FLAG_IMX6_SPEED_CHANGE | > - IMX6_PCIE_FLAG_SUPPORTS_SUSPEND, > + IMX6_PCIE_FLAG_SUPPORTS_SUSPEND | > + IMX6_PCIE_FLAG_HAS_CLK_INBOUND_AXI, > .gpr = "fsl,imx6q-iomuxc-gpr", > }, > [IMX6QP] = { > @@ -1500,30 +1494,36 @@ static const struct imx6_pcie_drvdata drvdata[] = { > }, > [IMX8MQ] = { > .variant = IMX8MQ, > + .flags = IMX6_PCIE_FLAG_HAS_CLK_AUX, > .gpr = "fsl,imx8mq-iomuxc-gpr", > }, > [IMX8MM] = { > .variant = IMX8MM, > - .flags = IMX6_PCIE_FLAG_SUPPORTS_SUSPEND, > + .flags = IMX6_PCIE_FLAG_SUPPORTS_SUSPEND | > + IMX6_PCIE_FLAG_HAS_CLK_AUX, > .gpr = "fsl,imx8mm-iomuxc-gpr", > }, > [IMX8MP] = { > .variant = IMX8MP, > - .flags = IMX6_PCIE_FLAG_SUPPORTS_SUSPEND, > + .flags = IMX6_PCIE_FLAG_SUPPORTS_SUSPEND | > + IMX6_PCIE_FLAG_HAS_CLK_AUX, > .gpr = "fsl,imx8mp-iomuxc-gpr", > }, > [IMX8MQ_EP] = { > .variant = IMX8MQ_EP, > + .flags = IMX6_PCIE_FLAG_HAS_CLK_AUX, > .mode = DW_PCIE_EP_TYPE, > .gpr = "fsl,imx8mq-iomuxc-gpr", > }, > [IMX8MM_EP] = { > .variant = IMX8MM_EP, > + .flags = IMX6_PCIE_FLAG_HAS_CLK_AUX, > .mode = DW_PCIE_EP_TYPE, > .gpr = "fsl,imx8mm-iomuxc-gpr", > }, > [IMX8MP_EP] = { > .variant = IMX8MP_EP, > + .flags = IMX6_PCIE_FLAG_HAS_CLK_AUX, > .mode = DW_PCIE_EP_TYPE, > .gpr = "fsl,imx8mp-iomuxc-gpr", > }, > -- > 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 BF73EC4332F for ; Tue, 12 Dec 2023 16:49:54 +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=DxX3WBm4YJMkZptPHiF83dJBj5iYvYFrzz9uYe1i+iE=; b=1TqiuuUxJD0Mh+ rHTa4cew9s9cDbvlpSkBLmY8ku4VIlfoaqVszv1W5SlvPO5JXRoOYrg+DN0ccTjRll1MKnaFMrqzK rVpMHT3Igf3LVpqyjR23JkmlXFpoZ9TyI1sToq7wpp+GLQLnORy7XbI1IiBF2LZVmTOyLpOHJEFa9 ZlWbW7awiX8vv+m35T8aOWbA73KrdUvyyaBrGeCFeC5TsCDB0YS7keNG6E2bLXwXId0vH90PlyS49 a9f2cqfNKENW6OJHm1be1rRPWFYYaNPPr6I9H2cDbK2IHYkjmhiMZOrLl77DIpSyR7Ip4yRYonflG p+H7wGduHbNsIS072Etg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rD5wo-00CI2D-2D; Tue, 12 Dec 2023 16:49:30 +0000 Received: from mail-pf1-x435.google.com ([2607:f8b0:4864:20::435]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rD5wl-00CI1W-1I for linux-arm-kernel@lists.infradead.org; Tue, 12 Dec 2023 16:49:29 +0000 Received: by mail-pf1-x435.google.com with SMTP id d2e1a72fcca58-6ce934e9d51so3714628b3a.1 for ; Tue, 12 Dec 2023 08:49:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1702399764; x=1703004564; 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=O3Qb4Pmctf3QLFWZxDCGFwLHLw9E0QvAVnQNcESZf+I=; b=z2IOdu+RCey+YY5KlkT1+JxiChs0/F2DwofNOgsdKeTyzyO633J0LP1wnoIDo2XhdK svLCpgSzKYJ7O52nwunCZknqmys+w1ga2tNbh5wREq2bHnEAoDZHPMIRsZQb7B5/mIeO 8kgkDQDGx2zpqUBHK6zObq2iluKOjUQuuwDLIvpS5WQUrsmYYOnFXTirpcBBE3XU9quQ z3Kh1+IhP3VT12xJHQnb4jyRzYzeSvDf+enw3QFEcVDizWzuz7lR7KmgI02G0HS/U8tQ GSlFVOJYrWl0Cn3FfoYGBOJTOMTyTw8yAwwBaBOiwn9ABMfr3EVrqbTlYCVAcjkdC++G JfMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702399764; x=1703004564; 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=O3Qb4Pmctf3QLFWZxDCGFwLHLw9E0QvAVnQNcESZf+I=; b=hPjeuLfTgcXodAtE/bAuB+8HbXSX4ZQFCcziT81Wz6QiKhvZ1mdd+fTUbSRN1imua9 +TSlkWw5FLEMl96BQc4o2F0VoJgrqOz52PvGpv7Wnw9j7Jp3sDsxY6UT2wqyr4uPcJ5x Kj7C47wb3GZOoUT94k/rxzMtf6y7UeyZx5x/bATTnmRWc4ulVaCmonlxzklS+Sjbu9qi rd1gm7z+179vJRgY/rxaO7DJ6SJdTIPZLDka6yOd5VFtQWA/cUaINFUuIJonm70OQRCH oGN78WOM07+PrbvSNPJZiz8B5W0nIAWi9wgZGa2AX8Ar/2sMwokiilLeTiccpRjyQPmx VeUA== X-Gm-Message-State: AOJu0YwVvWyBocK9yklyOmPqG8GLsnNAfOr7OpNn3LnxsyiME+a/9KKr uv+wX+J6VXZb4CXXl3fR9N6G X-Google-Smtp-Source: AGHT+IEdRCICFtznyHHkBUNYDtZL2BWvbWNge5n8xa4XWLlDEc4bBXuXkjMOrYe3szp98CDGiy/H6w== X-Received: by 2002:a05:6a21:3281:b0:18b:985e:8035 with SMTP id yt1-20020a056a21328100b0018b985e8035mr3756929pzb.12.1702399763615; Tue, 12 Dec 2023 08:49:23 -0800 (PST) Received: from thinkpad ([117.202.189.222]) by smtp.gmail.com with ESMTPSA id v29-20020a63481d000000b005c19c586cb7sm8368570pga.33.2023.12.12.08.49.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 08:49:22 -0800 (PST) Date: Tue, 12 Dec 2023 22:19:13 +0530 From: Manivannan Sadhasivam To: Frank Li Cc: 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 v3 01/13] PCI: imx6: Simplify clock handling by using HAS_CLK_* bitmask Message-ID: <20231212164913.GA21240@thinkpad> References: <20231211215842.134823-1-Frank.Li@nxp.com> <20231211215842.134823-2-Frank.Li@nxp.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20231211215842.134823-2-Frank.Li@nxp.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231212_084927_489729_56CFE671 X-CRM114-Status: GOOD ( 30.16 ) 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 T24gTW9uLCBEZWMgMTEsIDIwMjMgYXQgMDQ6NTg6MzBQTSAtMDUwMCwgRnJhbmsgTGkgd3JvdGU6 Cj4gUmVmYWN0b3JzIHRoZSBjbG9jayBoYW5kbGluZyBsb2dpYyBpbiB0aGUgaW14NiBQQ0kgZHJp dmVyIGJ5IGFkZGluZwo+IEhBU19DTEtfKiBiaXRtYXNrIGRlZmluZSBmb3IgZHJ2ZGF0YTo6Zmxh Z3MgLiBTaW1wbGlmaWVzIHRoZSBjb2RlIGFuZCBtYWtlcwo+IGl0IG1vcmUgbWFpbnRhaW5hYmxl LCBhcyBmdXR1cmUgYWRkaXRpb25zIG9mIFNPQyBzdXBwb3J0IHdpbGwgb25seSByZXF1aXJlCj4g c3RyYWlnaHRmb3J3YXJkIGNoYW5nZXMuIFRoZSBkcnZkYXRhOjpmbGFncyBhbmQgYSBiaXRtYXNr IGVuc3VyZXMgYSBjbGVhbmVyCj4gYW5kIG1vcmUgc2NhbGFibGUgc3dpdGNoLWNhc2Ugc3RydWN0 dXJlIGZvciBoYW5kbGluZyBjbG9ja3MuCj4gCgpJcyB0aGVyZSBhbnkgbmVjZXNzaXR5IHRvIHZh bGlkYXRlIGVhY2ggY2xvY2sgaW4gdGhlIGRyaXZlcj8gSSBtZWFuLCBjYW4ndCB5b3UKanVzdCBy ZWx5IG9uIGRldmljZXRyZWUgdG8gcHJvdmlkZSBlbm91Z2ggY2xvY2tzIGZvciB0aGUgZnVuY3Rp b25pbmcgb2YgdGhlIFBDSWUKY29udHJvbGxlcj8KCklmIHlvdSBjYW4gcmVseSBvbiBkZXZpY2V0 cmVlIChldmVyeW9uZSBzaG91bGQgaW4gYW4gaWRlYWwgd29ybGQpLCB0aGVuIHlvdSBjYW4KanVz dCB1c2UgZGV2bV9jbGtfYnVsa19nZXRfYWxsKCkgdG8gZ2V0IGFsbCBhdmFpbGFibGUgY2xvY2tz IGZvciB0aGUgU29DIGFuZApqdXN0IGVuYWJsZS9kaXNhYmxlIHdoYXRldmVyIGlzIGF2YWlsYWJs ZS4KClRoaXMgd2lsbCBncmVhdGx5IHNpbXBsaWZ5IHRoZSBjb2RlLgoKT25seSBkb3duc2lkZSBv ZiB0aGlzIGFwcHJvYWNoIGlzLCBpZiB0aGUgZGV2aWNldHJlZSBpcyBub3Qgc3VwcGx5aW5nIGVu b3VnaApjbG9ja3MsIHRoZW4gaXQgd2lsbCBiZSBkaWZmaWN1bHQgdG8gZmluZCB3aHkgUENJZSBp cyBub3Qgd29ya2luZy4gQnV0IHRoaXMgYWxzbwptZWFucyB0aGF0IHRoZSBkZXZpY2V0cmVlIGlz IHNjcmV3ZWQuCgotIE1hbmkKCj4gU2lnbmVkLW9mZi1ieTogRnJhbmsgTGkgPEZyYW5rLkxpQG54 cC5jb20+Cj4gLS0tCj4gCj4gTm90ZXM6Cj4gICAgIENoYW5nZSBmcm9tIHYxIHRvIHYzCj4gICAg IC0gbm9uZQo+IAo+ICBkcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2ktaW14Ni5jIHwgODQg KysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCj4gIDEgZmlsZSBjaGFuZ2VkLCA0MiBpbnNlcnRp b25zKCspLCA0MiBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29u dHJvbGxlci9kd2MvcGNpLWlteDYuYyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL3BjaS1p bXg2LmMKPiBpbmRleCA3NDcwMzM2MmFlZWM3Li44YTliNTI3OTM0ZjgwIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL3BjaS1pbXg2LmMKPiArKysgYi9kcml2ZXJzL3Bj aS9jb250cm9sbGVyL2R3Yy9wY2ktaW14Ni5jCj4gQEAgLTYwLDYgKzYwLDEwIEBAIGVudW0gaW14 Nl9wY2llX3ZhcmlhbnRzIHsKPiAgI2RlZmluZSBJTVg2X1BDSUVfRkxBR19JTVg2X1BIWQkJCUJJ VCgwKQo+ICAjZGVmaW5lIElNWDZfUENJRV9GTEFHX0lNWDZfU1BFRURfQ0hBTkdFCUJJVCgxKQo+ ICAjZGVmaW5lIElNWDZfUENJRV9GTEFHX1NVUFBPUlRTX1NVU1BFTkQJCUJJVCgyKQo+ICsjZGVm aW5lIElNWDZfUENJRV9GTEFHX0hBU19DTEtfSU5CT1VORF9BWEkJQklUKDMpCj4gKyNkZWZpbmUg SU1YNl9QQ0lFX0ZMQUdfSEFTX0NMS19BVVgJCUJJVCg0KQo+ICsKPiArI2RlZmluZSBpbXg2X2No ZWNrX2ZsYWcocGNpLCB2YWwpCShwY2ktPmRydmRhdGEtPmZsYWdzICYgdmFsKQo+ICAKPiAgc3Ry dWN0IGlteDZfcGNpZV9kcnZkYXRhIHsKPiAgCWVudW0gaW14Nl9wY2llX3ZhcmlhbnRzIHZhcmlh bnQ7Cj4gQEAgLTU1MCwxOSArNTU0LDIzIEBAIHN0YXRpYyBpbnQgaW14Nl9wY2llX2F0dGFjaF9w ZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gIAo+ICBzdGF0aWMgaW50IGlteDZfcGNpZV9lbmFibGVf cmVmX2NsayhzdHJ1Y3QgaW14Nl9wY2llICppbXg2X3BjaWUpCj4gIHsKPiAtCXN0cnVjdCBkd19w Y2llICpwY2kgPSBpbXg2X3BjaWUtPnBjaTsKPiAtCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBjaS0+ ZGV2Owo+ICAJdW5zaWduZWQgaW50IG9mZnNldDsKPiAgCWludCByZXQgPSAwOwo+ICAKPiAtCXN3 aXRjaCAoaW14Nl9wY2llLT5kcnZkYXRhLT52YXJpYW50KSB7Cj4gLQljYXNlIElNWDZTWDoKPiAr CWlmIChpbXg2X2NoZWNrX2ZsYWcoaW14Nl9wY2llLCBJTVg2X1BDSUVfRkxBR19IQVNfQ0xLX0lO Qk9VTkRfQVhJKSkgewo+ICAJCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShpbXg2X3BjaWUtPnBj aWVfaW5ib3VuZF9heGkpOwo+IC0JCWlmIChyZXQpIHsKPiAtCQkJZGV2X2VycihkZXYsICJ1bmFi bGUgdG8gZW5hYmxlIHBjaWVfYXhpIGNsb2NrXG4iKTsKPiAtCQkJYnJlYWs7Cj4gLQkJfQo+ICsJ CWlmIChyZXQpCj4gKwkJCXJldHVybiByZXQ7Cj4gKwl9Cj4gIAo+ICsJaWYgKGlteDZfY2hlY2tf ZmxhZyhpbXg2X3BjaWUsIElNWDZfUENJRV9GTEFHX0hBU19DTEtfQVVYKSkgewo+ICsJCXJldCA9 IGNsa19wcmVwYXJlX2VuYWJsZShpbXg2X3BjaWUtPnBjaWVfYXV4KTsKPiArCQlpZiAocmV0KQo+ ICsJCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXN3aXRjaCAoaW14Nl9wY2llLT5kcnZkYXRh LT52YXJpYW50KSB7Cj4gKwljYXNlIElNWDZTWDoKPiAgCQlyZWdtYXBfdXBkYXRlX2JpdHMoaW14 Nl9wY2llLT5pb211eGNfZ3ByLCBJT01VWENfR1BSMTIsCj4gIAkJCQkgICBJTVg2U1hfR1BSMTJf UENJRV9URVNUX1BPV0VSRE9XTiwgMCk7Cj4gIAkJYnJlYWs7Cj4gQEAgLTU4OSwxMiArNTk3LDYg QEAgc3RhdGljIGludCBpbXg2X3BjaWVfZW5hYmxlX3JlZl9jbGsoc3RydWN0IGlteDZfcGNpZSAq aW14Nl9wY2llKQo+ICAJY2FzZSBJTVg4TVFfRVA6Cj4gIAljYXNlIElNWDhNUDoKPiAgCWNhc2Ug SU1YOE1QX0VQOgo+IC0JCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShpbXg2X3BjaWUtPnBjaWVf YXV4KTsKPiAtCQlpZiAocmV0KSB7Cj4gLQkJCWRldl9lcnIoZGV2LCAidW5hYmxlIHRvIGVuYWJs ZSBwY2llX2F1eCBjbG9ja1xuIik7Cj4gLQkJCWJyZWFrOwo+IC0JCX0KPiAtCj4gIAkJb2Zmc2V0 ID0gaW14Nl9wY2llX2dycF9vZmZzZXQoaW14Nl9wY2llKTsKPiAgCQkvKgo+ICAJCSAqIFNldCB0 aGUgb3ZlciByaWRlIGxvdyBhbmQgZW5hYmxlZAo+IEBAIC02MTQsMTAgKzYxNiwxMyBAQCBzdGF0 aWMgaW50IGlteDZfcGNpZV9lbmFibGVfcmVmX2NsayhzdHJ1Y3QgaW14Nl9wY2llICppbXg2X3Bj aWUpCj4gIAo+ICBzdGF0aWMgdm9pZCBpbXg2X3BjaWVfZGlzYWJsZV9yZWZfY2xrKHN0cnVjdCBp bXg2X3BjaWUgKmlteDZfcGNpZSkKPiAgewo+IC0Jc3dpdGNoIChpbXg2X3BjaWUtPmRydmRhdGEt PnZhcmlhbnQpIHsKPiAtCWNhc2UgSU1YNlNYOgo+ICsJaWYgKGlteDZfY2hlY2tfZmxhZyhpbXg2 X3BjaWUsIElNWDZfUENJRV9GTEFHX0hBU19DTEtfSU5CT1VORF9BWEkpKQo+ICAJCWNsa19kaXNh YmxlX3VucHJlcGFyZShpbXg2X3BjaWUtPnBjaWVfaW5ib3VuZF9heGkpOwo+IC0JCWJyZWFrOwo+ ICsKPiArCWlmIChpbXg2X2NoZWNrX2ZsYWcoaW14Nl9wY2llLCBJTVg2X1BDSUVfRkxBR19IQVNf Q0xLX0FVWCkpCj4gKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGlteDZfcGNpZS0+cGNpZV9hdXgp Owo+ICsKPiArCXN3aXRjaCAoaW14Nl9wY2llLT5kcnZkYXRhLT52YXJpYW50KSB7Cj4gIAljYXNl IElNWDZRUDoKPiAgCWNhc2UgSU1YNlE6Cj4gIAkJcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNp ZS0+aW9tdXhjX2dwciwgSU9NVVhDX0dQUjEsCj4gQEAgLTYzMSwxNCArNjM2LDYgQEAgc3RhdGlj IHZvaWQgaW14Nl9wY2llX2Rpc2FibGVfcmVmX2NsayhzdHJ1Y3QgaW14Nl9wY2llICppbXg2X3Bj aWUpCj4gIAkJCQkgICBJTVg3RF9HUFIxMl9QQ0lFX1BIWV9SRUZDTEtfU0VMLAo+ICAJCQkJICAg SU1YN0RfR1BSMTJfUENJRV9QSFlfUkVGQ0xLX1NFTCk7Cj4gIAkJYnJlYWs7Cj4gLQljYXNlIElN WDhNTToKPiAtCWNhc2UgSU1YOE1NX0VQOgo+IC0JY2FzZSBJTVg4TVE6Cj4gLQljYXNlIElNWDhN UV9FUDoKPiAtCWNhc2UgSU1YOE1QOgo+IC0JY2FzZSBJTVg4TVBfRVA6Cj4gLQkJY2xrX2Rpc2Fi bGVfdW5wcmVwYXJlKGlteDZfcGNpZS0+cGNpZV9hdXgpOwo+IC0JCWJyZWFrOwo+ICAJZGVmYXVs dDoKPiAgCQlicmVhazsKPiAgCX0KPiBAQCAtMTMxNiwyMSArMTMxMywyMSBAQCBzdGF0aWMgaW50 IGlteDZfcGNpZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICAJCXJldHVy biBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihpbXg2X3BjaWUtPnBjaWUpLAo+ICAJCQkJICAg ICAicGNpZSBjbG9jayBzb3VyY2UgbWlzc2luZyBvciBpbnZhbGlkXG4iKTsKPiAgCj4gLQlzd2l0 Y2ggKGlteDZfcGNpZS0+ZHJ2ZGF0YS0+dmFyaWFudCkgewo+IC0JY2FzZSBJTVg2U1g6Cj4gLQkJ aW14Nl9wY2llLT5wY2llX2luYm91bmRfYXhpID0gZGV2bV9jbGtfZ2V0KGRldiwKPiAtCQkJCQkJ CSAgICJwY2llX2luYm91bmRfYXhpIik7Cj4gKwlpZiAoaW14Nl9jaGVja19mbGFnKGlteDZfcGNp ZSwgSU1YNl9QQ0lFX0ZMQUdfSEFTX0NMS19JTkJPVU5EX0FYSSkpIHsKPiArCQlpbXg2X3BjaWUt PnBjaWVfaW5ib3VuZF9heGkgPSBkZXZtX2Nsa19nZXQoZGV2LCAicGNpZV9pbmJvdW5kX2F4aSIp Owo+ICAJCWlmIChJU19FUlIoaW14Nl9wY2llLT5wY2llX2luYm91bmRfYXhpKSkKPiAtCQkJcmV0 dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGlteDZfcGNpZS0+cGNpZV9pbmJvdW5kX2F4 aSksCj4gLQkJCQkJICAgICAicGNpZV9pbmJvdW5kX2F4aSBjbG9jayBtaXNzaW5nIG9yIGludmFs aWRcbiIpOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBJTVg4TVE6Cj4gLQljYXNlIElNWDhNUV9FUDoK PiArCQkJZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoaW14Nl9wY2llLT5wY2llX2luYm91bmRf YXhpKSwKPiArCQkJCSAgICAgICJwY2llX2luYm91bmRfYXhpIGNsb2NrIG1pc3Npbmcgb3IgaW52 YWxpZFxuIik7Cj4gKwl9Cj4gKwo+ICsJaWYgKGlteDZfY2hlY2tfZmxhZyhpbXg2X3BjaWUsIElN WDZfUENJRV9GTEFHX0hBU19DTEtfQVVYKSkgewo+ICAJCWlteDZfcGNpZS0+cGNpZV9hdXggPSBk ZXZtX2Nsa19nZXQoZGV2LCAicGNpZV9hdXgiKTsKPiAgCQlpZiAoSVNfRVJSKGlteDZfcGNpZS0+ cGNpZV9hdXgpKQo+ICAJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoaW14Nl9w Y2llLT5wY2llX2F1eCksCj4gIAkJCQkJICAgICAicGNpZV9hdXggY2xvY2sgc291cmNlIG1pc3Np bmcgb3IgaW52YWxpZFxuIik7Cj4gLQkJZmFsbHRocm91Z2g7Cj4gKwl9Cj4gKwo+ICsJc3dpdGNo IChpbXg2X3BjaWUtPmRydmRhdGEtPnZhcmlhbnQpIHsKPiAgCWNhc2UgSU1YN0Q6Cj4gIAkJaWYg KGRiaV9iYXNlLT5zdGFydCA9PSBJTVg4TVFfUENJRTJfQkFTRV9BRERSKQo+ICAJCQlpbXg2X3Bj aWUtPmNvbnRyb2xsZXJfaWQgPSAxOwo+IEBAIC0xMzUzLDEwICsxMzUwLDYgQEAgc3RhdGljIGlu dCBpbXg2X3BjaWVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiAgCWNhc2Ug SU1YOE1NX0VQOgo+ICAJY2FzZSBJTVg4TVA6Cj4gIAljYXNlIElNWDhNUF9FUDoKPiAtCQlpbXg2 X3BjaWUtPnBjaWVfYXV4ID0gZGV2bV9jbGtfZ2V0KGRldiwgInBjaWVfYXV4Iik7Cj4gLQkJaWYg KElTX0VSUihpbXg2X3BjaWUtPnBjaWVfYXV4KSkKPiAtCQkJcmV0dXJuIGRldl9lcnJfcHJvYmUo ZGV2LCBQVFJfRVJSKGlteDZfcGNpZS0+cGNpZV9hdXgpLAo+IC0JCQkJCSAgICAgInBjaWVfYXV4 IGNsb2NrIHNvdXJjZSBtaXNzaW5nIG9yIGludmFsaWRcbiIpOwo+ICAJCWlteDZfcGNpZS0+YXBw c19yZXNldCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXRfZXhjbHVzaXZlKGRldiwKPiAgCQkJCQkJ CQkJICJhcHBzIik7Cj4gIAkJaWYgKElTX0VSUihpbXg2X3BjaWUtPmFwcHNfcmVzZXQpKQo+IEBA IC0xNDgyLDcgKzE0NzUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlteDZfcGNpZV9kcnZkYXRh IGRydmRhdGFbXSA9IHsKPiAgCQkudmFyaWFudCA9IElNWDZTWCwKPiAgCQkuZmxhZ3MgPSBJTVg2 X1BDSUVfRkxBR19JTVg2X1BIWSB8Cj4gIAkJCSBJTVg2X1BDSUVfRkxBR19JTVg2X1NQRUVEX0NI QU5HRSB8Cj4gLQkJCSBJTVg2X1BDSUVfRkxBR19TVVBQT1JUU19TVVNQRU5ELAo+ICsJCQkgSU1Y Nl9QQ0lFX0ZMQUdfU1VQUE9SVFNfU1VTUEVORCB8Cj4gKwkJCSBJTVg2X1BDSUVfRkxBR19IQVNf Q0xLX0lOQk9VTkRfQVhJLAo+ICAJCS5ncHIgPSAiZnNsLGlteDZxLWlvbXV4Yy1ncHIiLAo+ICAJ fSwKPiAgCVtJTVg2UVBdID0gewo+IEBAIC0xNTAwLDMwICsxNDk0LDM2IEBAIHN0YXRpYyBjb25z dCBzdHJ1Y3QgaW14Nl9wY2llX2RydmRhdGEgZHJ2ZGF0YVtdID0gewo+ICAJfSwKPiAgCVtJTVg4 TVFdID0gewo+ICAJCS52YXJpYW50ID0gSU1YOE1RLAo+ICsJCS5mbGFncyA9IElNWDZfUENJRV9G TEFHX0hBU19DTEtfQVVYLAo+ICAJCS5ncHIgPSAiZnNsLGlteDhtcS1pb211eGMtZ3ByIiwKPiAg CX0sCj4gIAlbSU1YOE1NXSA9IHsKPiAgCQkudmFyaWFudCA9IElNWDhNTSwKPiAtCQkuZmxhZ3Mg PSBJTVg2X1BDSUVfRkxBR19TVVBQT1JUU19TVVNQRU5ELAo+ICsJCS5mbGFncyA9IElNWDZfUENJ RV9GTEFHX1NVUFBPUlRTX1NVU1BFTkQgfAo+ICsJCQkgSU1YNl9QQ0lFX0ZMQUdfSEFTX0NMS19B VVgsCj4gIAkJLmdwciA9ICJmc2wsaW14OG1tLWlvbXV4Yy1ncHIiLAo+ICAJfSwKPiAgCVtJTVg4 TVBdID0gewo+ICAJCS52YXJpYW50ID0gSU1YOE1QLAo+IC0JCS5mbGFncyA9IElNWDZfUENJRV9G TEFHX1NVUFBPUlRTX1NVU1BFTkQsCj4gKwkJLmZsYWdzID0gSU1YNl9QQ0lFX0ZMQUdfU1VQUE9S VFNfU1VTUEVORCB8Cj4gKwkJCSBJTVg2X1BDSUVfRkxBR19IQVNfQ0xLX0FVWCwKPiAgCQkuZ3By ID0gImZzbCxpbXg4bXAtaW9tdXhjLWdwciIsCj4gIAl9LAo+ICAJW0lNWDhNUV9FUF0gPSB7Cj4g IAkJLnZhcmlhbnQgPSBJTVg4TVFfRVAsCj4gKwkJLmZsYWdzID0gSU1YNl9QQ0lFX0ZMQUdfSEFT X0NMS19BVVgsCj4gIAkJLm1vZGUgPSBEV19QQ0lFX0VQX1RZUEUsCj4gIAkJLmdwciA9ICJmc2ws aW14OG1xLWlvbXV4Yy1ncHIiLAo+ICAJfSwKPiAgCVtJTVg4TU1fRVBdID0gewo+ICAJCS52YXJp YW50ID0gSU1YOE1NX0VQLAo+ICsJCS5mbGFncyA9IElNWDZfUENJRV9GTEFHX0hBU19DTEtfQVVY LAo+ICAJCS5tb2RlID0gRFdfUENJRV9FUF9UWVBFLAo+ICAJCS5ncHIgPSAiZnNsLGlteDhtbS1p b211eGMtZ3ByIiwKPiAgCX0sCj4gIAlbSU1YOE1QX0VQXSA9IHsKPiAgCQkudmFyaWFudCA9IElN WDhNUF9FUCwKPiArCQkuZmxhZ3MgPSBJTVg2X1BDSUVfRkxBR19IQVNfQ0xLX0FVWCwKPiAgCQku bW9kZSA9IERXX1BDSUVfRVBfVFlQRSwKPiAgCQkuZ3ByID0gImZzbCxpbXg4bXAtaW9tdXhjLWdw ciIsCj4gIAl9LAo+IC0tIAo+IDIuMzQuMQo+IAoKLS0gCuCuruCuo+Cuv+CuteCuo+CvjeCuo+Cu qeCvjSDgrprgrqTgrr7grprgrr/grrXgrq7gr40KCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4 LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK