From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pf1-f174.google.com (mail-pf1-f174.google.com [209.85.210.174]) (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 2C09179E2 for ; Sat, 6 Jan 2024 15:27:16 +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="mA29/0Y2" Received: by mail-pf1-f174.google.com with SMTP id d2e1a72fcca58-6d9bba6d773so449334b3a.1 for ; Sat, 06 Jan 2024 07:27:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1704554835; x=1705159635; 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=IGnHddRRR39bPJdc9yil/sTAP9OrR9P0NakHbvwB6io=; b=mA29/0Y2thTnKzRfGkzQ4OmEeyJ41FZNzNzsHwQnU+2jLcPj1/8UXpJVZGesesU8FL oI5rtPHj0xhfg/zxCJu7YvtfN+n3iikBeKcuQCnjb4HrB4OXXCI9HukT8qBu2HiSwaxJ rkFycaVSqq2HGITV3giPOOOIR4szwvhMnRIrPiYKICX5iMWbw5WpWEcu71pDPz6IXh58 UGC1v8mT7pSmFUwbFCvwJfojeDFFIEckOWBkl+sZHHUq4yMZ3TirKktK+DeHDepih+rj 0UgVlnvkhhbBujU/oeuSSqsCYJIYegwjdX4PTtH5dGV+yPYY5RNVALr7J8dKguE15he/ S4cg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1704554835; x=1705159635; 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=IGnHddRRR39bPJdc9yil/sTAP9OrR9P0NakHbvwB6io=; b=sQpWlKK+PTcBLd2rcdfAYYD+MlwqgAxmRJOyKGiubReiiCeQFBtu12s20+U1JzVLI7 GOdBsIgfJkaDOneiB1DezVuDynKAGfpweG+RNSNRHaKXqEDKPR0LVt+dOoCWyFL112JI yh7URupeqRyVfruhtPgNeZnx0O/aR4rFEfCEIWv7zHb8MxV1eXaClf8Bjp6Wgv1oehQ8 0DgwrER2iaot059fH20DJFPNpgFFNLGL0Sz0akuY9Izbhp+IMEdDew0eVHY/9V4cwisn GiwSfH1VTaihG5+oPzcLpfVQ6Zar4V9hO3t+KYnCaCghHqmOM4spxZbYMDhhP+G/ALcP HtjA== X-Gm-Message-State: AOJu0YwqXDFl4Xo/0p5HTPyM5UdTXUFpBzMAcssGNajcDFEvDz20KsfQ JczPbFN9Nc7yK3UWDRl60FnbGTiRM7Rc X-Google-Smtp-Source: AGHT+IG6/ogh81hP2GuC/tJj4VtpQbaF24F7gXWXt/dWAVTZ98B31mEVpIdxzv2ekE28yV9KXpz+9Q== X-Received: by 2002:a05:6a20:12c6:b0:199:2927:45 with SMTP id v6-20020a056a2012c600b0019929270045mr1215916pzg.101.1704554835437; Sat, 06 Jan 2024 07:27:15 -0800 (PST) Received: from thinkpad ([103.197.115.97]) by smtp.gmail.com with ESMTPSA id o23-20020a056a001b5700b006cecaff9e29sm3202904pfv.128.2024.01.06.07.27.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 06 Jan 2024 07:27:15 -0800 (PST) Date: Sat, 6 Jan 2024 20:57:08 +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 01/16] PCI: imx6: Simplify clock handling by using bulk_clk_*() function Message-ID: <20240106152708.GD2512@thinkpad> References: <20231227182727.1747435-1-Frank.Li@nxp.com> <20231227182727.1747435-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: <20231227182727.1747435-2-Frank.Li@nxp.com> On Wed, Dec 27, 2023 at 01:27:12PM -0500, Frank Li wrote: Subject mentions, 'bulk_clk' APIs but there is no such thing. It should be 'clk_bulk()' APIs. > Refactors the clock handling logic. Adds clk_names[] define in drvdata. > Using clk_bulk*() api simplifies the code. > I've mentioned this many times in the past. But let me reiterate here again: Commit message should be in imperative mood as per Linux Kernel rules for submitting patches. Please see here: Documentation/process/submitting-patches.rst The relevant part is: "Describe your changes in imperative mood, e.g. "make xyzzy do frotz" instead of "[This patch] makes xyzzy do frotz" or "[I] changed xyzzy to do frotz", as if you are giving orders to the codebase to change its behaviour." Please use this same format for rest of the patches as well for future ones. > Signed-off-by: Frank Li > --- > > Notes: > Change from v4 to v5 > - update commit message > - direct using clk name list, instead of macro > - still keep caculate clk list count because sizeof return pre allocated > array size. > > Change from v3 to v4 > - using clk_bulk_*() API > Change from v1 to v3 > - none > > drivers/pci/controller/dwc/pci-imx6.c | 125 ++++++++------------------ > 1 file changed, 35 insertions(+), 90 deletions(-) > > diff --git a/drivers/pci/controller/dwc/pci-imx6.c b/drivers/pci/controller/dwc/pci-imx6.c > index 74703362aeec7..50d9faaa17f71 100644 > --- a/drivers/pci/controller/dwc/pci-imx6.c > +++ b/drivers/pci/controller/dwc/pci-imx6.c > @@ -61,12 +61,15 @@ enum imx6_pcie_variants { > #define IMX6_PCIE_FLAG_IMX6_SPEED_CHANGE BIT(1) > #define IMX6_PCIE_FLAG_SUPPORTS_SUSPEND BIT(2) > > +#define IMX6_PCIE_MAX_CLKS 6 > + > struct imx6_pcie_drvdata { > enum imx6_pcie_variants variant; > enum dw_pcie_device_mode mode; > u32 flags; > int dbi_length; > const char *gpr; > + const char *clk_names[IMX6_PCIE_MAX_CLKS]; > }; > > struct imx6_pcie { > @@ -74,11 +77,8 @@ struct imx6_pcie { > int reset_gpio; > bool gpio_active_high; > bool link_is_up; > - struct clk *pcie_bus; > - struct clk *pcie_phy; > - struct clk *pcie_inbound_axi; > - struct clk *pcie; > - struct clk *pcie_aux; > + struct clk_bulk_data clks[IMX6_PCIE_MAX_CLKS]; > + u32 clks_cnt; > struct regmap *iomuxc_gpr; > u16 msi_ctrl; > u32 controller_id; > @@ -407,13 +407,18 @@ static void imx7d_pcie_wait_for_phy_pll_lock(struct imx6_pcie *imx6_pcie) > > static int imx6_setup_phy_mpll(struct imx6_pcie *imx6_pcie) > { > - unsigned long phy_rate = clk_get_rate(imx6_pcie->pcie_phy); > + unsigned long phy_rate = 0; > int mult, div; > u16 val; > + int i; > > if (!(imx6_pcie->drvdata->flags & IMX6_PCIE_FLAG_IMX6_PHY)) > return 0; > > + for (i = 0; i < imx6_pcie->clks_cnt; i++) > + if (strncmp(imx6_pcie->clks[i].id, "pcie_phy", 8) == 0) > + phy_rate = clk_get_rate(imx6_pcie->clks[i].clk); > + > switch (phy_rate) { > case 125000000: > /* > @@ -550,19 +555,11 @@ 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: > - ret = clk_prepare_enable(imx6_pcie->pcie_inbound_axi); > - if (ret) { > - dev_err(dev, "unable to enable pcie_axi clock\n"); > - break; > - } > - > regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12, > IMX6SX_GPR12_PCIE_TEST_POWERDOWN, 0); > break; > @@ -589,12 +586,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 > @@ -615,9 +606,6 @@ 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: > - clk_disable_unprepare(imx6_pcie->pcie_inbound_axi); > - break; > case IMX6QP: > case IMX6Q: > regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, > @@ -631,14 +619,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; > } > @@ -650,23 +630,9 @@ static int imx6_pcie_clk_enable(struct imx6_pcie *imx6_pcie) > struct device *dev = pci->dev; > int ret; > > - ret = clk_prepare_enable(imx6_pcie->pcie_phy); > - if (ret) { > - dev_err(dev, "unable to enable pcie_phy clock\n"); > + ret = clk_bulk_prepare_enable(imx6_pcie->clks_cnt, imx6_pcie->clks); Extra space after = > + if (ret) > return ret; > - } > - > - ret = clk_prepare_enable(imx6_pcie->pcie_bus); > - if (ret) { > - dev_err(dev, "unable to enable pcie_bus clock\n"); > - goto err_pcie_bus; > - } > - > - ret = clk_prepare_enable(imx6_pcie->pcie); > - if (ret) { > - dev_err(dev, "unable to enable pcie clock\n"); > - goto err_pcie; > - } > > ret = imx6_pcie_enable_ref_clk(imx6_pcie); > if (ret) { > @@ -679,11 +645,7 @@ static int imx6_pcie_clk_enable(struct imx6_pcie *imx6_pcie) > return 0; > > err_ref_clk: > - clk_disable_unprepare(imx6_pcie->pcie); > -err_pcie: > - clk_disable_unprepare(imx6_pcie->pcie_bus); > -err_pcie_bus: > - clk_disable_unprepare(imx6_pcie->pcie_phy); > + clk_bulk_disable_unprepare(imx6_pcie->clks_cnt, imx6_pcie->clks); > > return ret; > } > @@ -691,9 +653,7 @@ static int imx6_pcie_clk_enable(struct imx6_pcie *imx6_pcie) > static void imx6_pcie_clk_disable(struct imx6_pcie *imx6_pcie) > { > imx6_pcie_disable_ref_clk(imx6_pcie); > - clk_disable_unprepare(imx6_pcie->pcie); > - clk_disable_unprepare(imx6_pcie->pcie_bus); > - clk_disable_unprepare(imx6_pcie->pcie_phy); > + clk_bulk_disable_unprepare(imx6_pcie->clks_cnt, imx6_pcie->clks); > } > > static void imx6_pcie_assert_core_reset(struct imx6_pcie *imx6_pcie) > @@ -1305,32 +1265,19 @@ static int imx6_pcie_probe(struct platform_device *pdev) > return imx6_pcie->reset_gpio; > } > > - /* Fetch clocks */ > - imx6_pcie->pcie_bus = devm_clk_get(dev, "pcie_bus"); > - if (IS_ERR(imx6_pcie->pcie_bus)) > - return dev_err_probe(dev, PTR_ERR(imx6_pcie->pcie_bus), > - "pcie_bus clock source missing or invalid\n"); > + while (imx6_pcie->drvdata->clk_names[imx6_pcie->clks_cnt]) { > + int i = imx6_pcie->clks_cnt; Why can't you initialize i to 0 directly? Rest looks good to me. - Mani > + > + imx6_pcie->clks[i].id = imx6_pcie->drvdata->clk_names[i]; > + imx6_pcie->clks_cnt++; > + } > > - imx6_pcie->pcie = devm_clk_get(dev, "pcie"); > - if (IS_ERR(imx6_pcie->pcie)) > - return dev_err_probe(dev, PTR_ERR(imx6_pcie->pcie), > - "pcie clock source missing or invalid\n"); > + /* Fetch clocks */ > + ret = devm_clk_bulk_get(dev, imx6_pcie->clks_cnt, imx6_pcie->clks); > + if (ret) > + return ret; > > switch (imx6_pcie->drvdata->variant) { > - case IMX6SX: > - 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: > - 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; > case IMX7D: > if (dbi_base->start == IMX8MQ_PCIE2_BASE_ADDR) > imx6_pcie->controller_id = 1; > @@ -1353,10 +1300,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)) > @@ -1372,14 +1315,6 @@ static int imx6_pcie_probe(struct platform_device *pdev) > default: > break; > } > - /* Don't fetch the pcie_phy clock, if it has abstract PHY driver */ > - if (imx6_pcie->phy == NULL) { > - imx6_pcie->pcie_phy = devm_clk_get(dev, "pcie_phy"); > - if (IS_ERR(imx6_pcie->pcie_phy)) > - return dev_err_probe(dev, PTR_ERR(imx6_pcie->pcie_phy), > - "pcie_phy clock source missing or invalid\n"); > - } > - > > /* Grab turnoff reset */ > imx6_pcie->turnoff_reset = devm_reset_control_get_optional_exclusive(dev, "turnoff"); > @@ -1477,6 +1412,7 @@ static const struct imx6_pcie_drvdata drvdata[] = { > IMX6_PCIE_FLAG_IMX6_SPEED_CHANGE, > .dbi_length = 0x200, > .gpr = "fsl,imx6q-iomuxc-gpr", > + .clk_names = {"pcie_bus", "pcie", "pcie_phy"}, > }, > [IMX6SX] = { > .variant = IMX6SX, > @@ -1484,6 +1420,7 @@ static const struct imx6_pcie_drvdata drvdata[] = { > IMX6_PCIE_FLAG_IMX6_SPEED_CHANGE | > IMX6_PCIE_FLAG_SUPPORTS_SUSPEND, > .gpr = "fsl,imx6q-iomuxc-gpr", > + .clk_names = {"pcie_bus", "pcie", "pcie_phy", "pcie_inbound_axi"}, > }, > [IMX6QP] = { > .variant = IMX6QP, > @@ -1492,40 +1429,48 @@ static const struct imx6_pcie_drvdata drvdata[] = { > IMX6_PCIE_FLAG_SUPPORTS_SUSPEND, > .dbi_length = 0x200, > .gpr = "fsl,imx6q-iomuxc-gpr", > + .clk_names = {"pcie_bus", "pcie", "pcie_phy"}, > }, > [IMX7D] = { > .variant = IMX7D, > .flags = IMX6_PCIE_FLAG_SUPPORTS_SUSPEND, > .gpr = "fsl,imx7d-iomuxc-gpr", > + .clk_names = {"pcie_bus", "pcie", "pcie_phy"}, > }, > [IMX8MQ] = { > .variant = IMX8MQ, > .gpr = "fsl,imx8mq-iomuxc-gpr", > + .clk_names = {"pcie_bus", "pcie", "pcie_phy", "pcie_aux"}, > }, > [IMX8MM] = { > .variant = IMX8MM, > .flags = IMX6_PCIE_FLAG_SUPPORTS_SUSPEND, > .gpr = "fsl,imx8mm-iomuxc-gpr", > + .clk_names = {"pcie_bus", "pcie", "pcie_aux"}, > }, > [IMX8MP] = { > .variant = IMX8MP, > .flags = IMX6_PCIE_FLAG_SUPPORTS_SUSPEND, > .gpr = "fsl,imx8mp-iomuxc-gpr", > + .clk_names = {"pcie_bus", "pcie", "pcie_aux"}, > }, > [IMX8MQ_EP] = { > .variant = IMX8MQ_EP, > .mode = DW_PCIE_EP_TYPE, > .gpr = "fsl,imx8mq-iomuxc-gpr", > + .clk_names = {"pcie_bus", "pcie", "pcie_phy", "pcie_aux"}, > }, > [IMX8MM_EP] = { > .variant = IMX8MM_EP, > .mode = DW_PCIE_EP_TYPE, > .gpr = "fsl,imx8mm-iomuxc-gpr", > + .clk_names = {"pcie_bus", "pcie", "pcie_aux"}, > }, > [IMX8MP_EP] = { > .variant = IMX8MP_EP, > .mode = DW_PCIE_EP_TYPE, > .gpr = "fsl,imx8mp-iomuxc-gpr", > + .clk_names = {"pcie_bus", "pcie", "pcie_aux"}, > }, > }; > > -- > 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 22E92C46CD2 for ; Sat, 6 Jan 2024 15:27:48 +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=yADHm6NTRuAA/zOSN1NDVCj/DNLHlJOJKlk5KSzFeIA=; b=VUjya/WdZb9yC/ XW+M3c/PMt5fqPWTqXk19uezwlbf5Lr2oP1zu9l21AlYT+2KkTVV7eSvfIVtxhL+sUApA/uuc7aGC ggpyz5sRSHkLf8rhZrvmqwfrah3xLaNMUEnJpmXw4Vzz+L5orTEcCnn/8EwOmBONNMuep9RWvCUZN i5ZJwd5z5pZJFMbXD4wBNpR8VKZL+2xDkjUu7EGBSbTL7svoZsFmXF8YuKLU9MeKhEGcIWQp5kJqR /xLuinFR3PKdRKo8j0c9DzG9mluTa4GM5vRA11MwanQfkRyUZMSyadHs+8Z4ox53bDm0wKJaaPACy H3lZpOM2eoC3BzRnMu+w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rM8a1-001Vrs-0q; Sat, 06 Jan 2024 15:27:21 +0000 Received: from mail-pf1-x42a.google.com ([2607:f8b0:4864:20::42a]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rM8Zx-001VrB-2M for linux-arm-kernel@lists.infradead.org; Sat, 06 Jan 2024 15:27:19 +0000 Received: by mail-pf1-x42a.google.com with SMTP id d2e1a72fcca58-6da202aa138so445426b3a.2 for ; Sat, 06 Jan 2024 07:27:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1704554835; x=1705159635; 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=IGnHddRRR39bPJdc9yil/sTAP9OrR9P0NakHbvwB6io=; b=KYW6051T0HFT5eYTCHwHYQAV0a0Ph+ickt5fqwXA16eUxHy8Gqp4L5PKD2fJ1RZnyc R676EKKKQ+dUrHDIBWiVasXs5FEGaCa6O22QxfcBjpMnHU+w/nlv5BWdZT9pmy+n+cjs xSHPuyCXy9M0TFwU+H/WI/zRmJDTzVvdJpSBe22gWvJHvtehCPEYIZjc5UcnOAh7wlQR 4DqmApfO3v/JXspWzV/pLt533mZj4YLyo6B1zD74aqyAZWo11ttn3q5WV60vliLIEKGk s5kTzha5Ga40GEvHPlQgJMmuJ2xxarexzMdxNF9aHvOfOreSsla5oocV+cpQPuCXJAnK SEpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1704554835; x=1705159635; 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=IGnHddRRR39bPJdc9yil/sTAP9OrR9P0NakHbvwB6io=; b=FBnxD+CnxVmgyVzxzzPQ5zlYrIXop3HB6EZ02q/lNTyKxHShIftWaeEj4oLMZY2+FM fJhtlAXclXa18ZkAJHgvxIWZYWCVkHqCf7tRIpFvDdyfIOJNGx02eq4DPBFClnc7c+Y6 /nGfgD2HtubWQz9vBmvdnbVOB6nPBDhYadopSZC28xBsJMfIdKHdwlgoAndK95BWMXNT WHkiImdy95wQT8U5sPL/n2/SpVyA5p70dUwqMgmUe7u9OIahh8GEZLFH3fLkoSU5NW8I +RnlMm1yYzNe2BgjN5lDs1KOaKFbCxCOqQVjM4MYHa2HYOqRHhhJ4EvXBkIBbVuw2j9/ Zyww== X-Gm-Message-State: AOJu0YzyZpQRLTv3kjNrmWntOZZ0NwZUod+MaAsktQb4wThfX6Ehkpfu 6J1Sk1hvPt8wEv4AkVns5ta7ah5t2hWG X-Google-Smtp-Source: AGHT+IG6/ogh81hP2GuC/tJj4VtpQbaF24F7gXWXt/dWAVTZ98B31mEVpIdxzv2ekE28yV9KXpz+9Q== X-Received: by 2002:a05:6a20:12c6:b0:199:2927:45 with SMTP id v6-20020a056a2012c600b0019929270045mr1215916pzg.101.1704554835437; Sat, 06 Jan 2024 07:27:15 -0800 (PST) Received: from thinkpad ([103.197.115.97]) by smtp.gmail.com with ESMTPSA id o23-20020a056a001b5700b006cecaff9e29sm3202904pfv.128.2024.01.06.07.27.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 06 Jan 2024 07:27:15 -0800 (PST) Date: Sat, 6 Jan 2024 20:57:08 +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 01/16] PCI: imx6: Simplify clock handling by using bulk_clk_*() function Message-ID: <20240106152708.GD2512@thinkpad> References: <20231227182727.1747435-1-Frank.Li@nxp.com> <20231227182727.1747435-2-Frank.Li@nxp.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20231227182727.1747435-2-Frank.Li@nxp.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240106_072717_771293_5537AC02 X-CRM114-Status: GOOD ( 33.04 ) 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 T24gV2VkLCBEZWMgMjcsIDIwMjMgYXQgMDE6Mjc6MTJQTSAtMDUwMCwgRnJhbmsgTGkgd3JvdGU6 CgpTdWJqZWN0IG1lbnRpb25zLCAnYnVsa19jbGsnIEFQSXMgYnV0IHRoZXJlIGlzIG5vIHN1Y2gg dGhpbmcuIEl0IHNob3VsZCBiZQonY2xrX2J1bGsoKScgQVBJcy4KCj4gUmVmYWN0b3JzIHRoZSBj bG9jayBoYW5kbGluZyBsb2dpYy4gQWRkcyBjbGtfbmFtZXNbXSBkZWZpbmUgaW4gZHJ2ZGF0YS4K PiBVc2luZyBjbGtfYnVsayooKSBhcGkgc2ltcGxpZmllcyB0aGUgY29kZS4KPiAKCkkndmUgbWVu dGlvbmVkIHRoaXMgbWFueSB0aW1lcyBpbiB0aGUgcGFzdC4gQnV0IGxldCBtZSByZWl0ZXJhdGUg aGVyZSBhZ2FpbjoKCkNvbW1pdCBtZXNzYWdlIHNob3VsZCBiZSBpbiBpbXBlcmF0aXZlIG1vb2Qg YXMgcGVyIExpbnV4IEtlcm5lbCBydWxlcyBmb3IKc3VibWl0dGluZyBwYXRjaGVzLiBQbGVhc2Ug c2VlIGhlcmU6CkRvY3VtZW50YXRpb24vcHJvY2Vzcy9zdWJtaXR0aW5nLXBhdGNoZXMucnN0CgpU aGUgcmVsZXZhbnQgcGFydCBpczoKCiJEZXNjcmliZSB5b3VyIGNoYW5nZXMgaW4gaW1wZXJhdGl2 ZSBtb29kLCBlLmcuICJtYWtlIHh5enp5IGRvIGZyb3R6IgppbnN0ZWFkIG9mICJbVGhpcyBwYXRj aF0gbWFrZXMgeHl6enkgZG8gZnJvdHoiIG9yICJbSV0gY2hhbmdlZCB4eXp6eQp0byBkbyBmcm90 eiIsIGFzIGlmIHlvdSBhcmUgZ2l2aW5nIG9yZGVycyB0byB0aGUgY29kZWJhc2UgdG8gY2hhbmdl Cml0cyBiZWhhdmlvdXIuIgoKUGxlYXNlIHVzZSB0aGlzIHNhbWUgZm9ybWF0IGZvciByZXN0IG9m IHRoZSBwYXRjaGVzIGFzIHdlbGwgZm9yIGZ1dHVyZSBvbmVzLgoKPiBTaWduZWQtb2ZmLWJ5OiBG cmFuayBMaSA8RnJhbmsuTGlAbnhwLmNvbT4KPiAtLS0KPiAKPiBOb3RlczoKPiAgICAgQ2hhbmdl IGZyb20gdjQgdG8gdjUKPiAgICAgLSB1cGRhdGUgY29tbWl0IG1lc3NhZ2UKPiAgICAgLSBkaXJl Y3QgdXNpbmcgY2xrIG5hbWUgbGlzdCwgaW5zdGVhZCBvZiBtYWNybwo+ICAgICAtIHN0aWxsIGtl ZXAgY2FjdWxhdGUgY2xrIGxpc3QgY291bnQgYmVjYXVzZSBzaXplb2YgcmV0dXJuIHByZSBhbGxv Y2F0ZWQKPiAgICAgYXJyYXkgc2l6ZS4KPiAgICAgCj4gICAgIENoYW5nZSBmcm9tIHYzIHRvIHY0 Cj4gICAgIC0gdXNpbmcgY2xrX2J1bGtfKigpIEFQSQo+ICAgICBDaGFuZ2UgZnJvbSB2MSB0byB2 Mwo+ICAgICAtIG5vbmUKPiAKPiAgZHJpdmVycy9wY2kvY29udHJvbGxlci9kd2MvcGNpLWlteDYu YyB8IDEyNSArKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLQo+ICAxIGZpbGUgY2hhbmdlZCwgMzUg aW5zZXJ0aW9ucygrKSwgOTAgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv cGNpL2NvbnRyb2xsZXIvZHdjL3BjaS1pbXg2LmMgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3 Yy9wY2ktaW14Ni5jCj4gaW5kZXggNzQ3MDMzNjJhZWVjNy4uNTBkOWZhYWExN2Y3MSAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2ktaW14Ni5jCj4gKysrIGIvZHJp dmVycy9wY2kvY29udHJvbGxlci9kd2MvcGNpLWlteDYuYwo+IEBAIC02MSwxMiArNjEsMTUgQEAg ZW51bSBpbXg2X3BjaWVfdmFyaWFudHMgewo+ICAjZGVmaW5lIElNWDZfUENJRV9GTEFHX0lNWDZf U1BFRURfQ0hBTkdFCUJJVCgxKQo+ICAjZGVmaW5lIElNWDZfUENJRV9GTEFHX1NVUFBPUlRTX1NV U1BFTkQJCUJJVCgyKQo+ICAKPiArI2RlZmluZSBJTVg2X1BDSUVfTUFYX0NMS1MgICAgICAgNgo+ ICsKPiAgc3RydWN0IGlteDZfcGNpZV9kcnZkYXRhIHsKPiAgCWVudW0gaW14Nl9wY2llX3Zhcmlh bnRzIHZhcmlhbnQ7Cj4gIAllbnVtIGR3X3BjaWVfZGV2aWNlX21vZGUgbW9kZTsKPiAgCXUzMiBm bGFnczsKPiAgCWludCBkYmlfbGVuZ3RoOwo+ICAJY29uc3QgY2hhciAqZ3ByOwo+ICsJY29uc3Qg Y2hhciAqY2xrX25hbWVzW0lNWDZfUENJRV9NQVhfQ0xLU107Cj4gIH07Cj4gIAo+ICBzdHJ1Y3Qg aW14Nl9wY2llIHsKPiBAQCAtNzQsMTEgKzc3LDggQEAgc3RydWN0IGlteDZfcGNpZSB7Cj4gIAlp bnQJCQlyZXNldF9ncGlvOwo+ICAJYm9vbAkJCWdwaW9fYWN0aXZlX2hpZ2g7Cj4gIAlib29sCQkJ bGlua19pc191cDsKPiAtCXN0cnVjdCBjbGsJCSpwY2llX2J1czsKPiAtCXN0cnVjdCBjbGsJCSpw Y2llX3BoeTsKPiAtCXN0cnVjdCBjbGsJCSpwY2llX2luYm91bmRfYXhpOwo+IC0Jc3RydWN0IGNs awkJKnBjaWU7Cj4gLQlzdHJ1Y3QgY2xrCQkqcGNpZV9hdXg7Cj4gKwlzdHJ1Y3QgY2xrX2J1bGtf ZGF0YQljbGtzW0lNWDZfUENJRV9NQVhfQ0xLU107Cj4gKwl1MzIJCQljbGtzX2NudDsKPiAgCXN0 cnVjdCByZWdtYXAJCSppb211eGNfZ3ByOwo+ICAJdTE2CQkJbXNpX2N0cmw7Cj4gIAl1MzIJCQlj b250cm9sbGVyX2lkOwo+IEBAIC00MDcsMTMgKzQwNywxOCBAQCBzdGF0aWMgdm9pZCBpbXg3ZF9w Y2llX3dhaXRfZm9yX3BoeV9wbGxfbG9jayhzdHJ1Y3QgaW14Nl9wY2llICppbXg2X3BjaWUpCj4g IAo+ICBzdGF0aWMgaW50IGlteDZfc2V0dXBfcGh5X21wbGwoc3RydWN0IGlteDZfcGNpZSAqaW14 Nl9wY2llKQo+ICB7Cj4gLQl1bnNpZ25lZCBsb25nIHBoeV9yYXRlID0gY2xrX2dldF9yYXRlKGlt eDZfcGNpZS0+cGNpZV9waHkpOwo+ICsJdW5zaWduZWQgbG9uZyBwaHlfcmF0ZSA9IDA7Cj4gIAlp bnQgbXVsdCwgZGl2Owo+ICAJdTE2IHZhbDsKPiArCWludCBpOwo+ICAKPiAgCWlmICghKGlteDZf cGNpZS0+ZHJ2ZGF0YS0+ZmxhZ3MgJiBJTVg2X1BDSUVfRkxBR19JTVg2X1BIWSkpCj4gIAkJcmV0 dXJuIDA7Cj4gIAo+ICsJZm9yIChpID0gMDsgaSA8IGlteDZfcGNpZS0+Y2xrc19jbnQ7IGkrKykK PiArCQlpZiAoc3RybmNtcChpbXg2X3BjaWUtPmNsa3NbaV0uaWQsICJwY2llX3BoeSIsIDgpID09 IDApCj4gKwkJCXBoeV9yYXRlID0gY2xrX2dldF9yYXRlKGlteDZfcGNpZS0+Y2xrc1tpXS5jbGsp Owo+ICsKPiAgCXN3aXRjaCAocGh5X3JhdGUpIHsKPiAgCWNhc2UgMTI1MDAwMDAwOgo+ICAJCS8q Cj4gQEAgLTU1MCwxOSArNTU1LDExIEBAIHN0YXRpYyBpbnQgaW14Nl9wY2llX2F0dGFjaF9wZChz dHJ1Y3QgZGV2aWNlICpkZXYpCj4gIAo+ICBzdGF0aWMgaW50IGlteDZfcGNpZV9lbmFibGVfcmVm X2NsayhzdHJ1Y3QgaW14Nl9wY2llICppbXg2X3BjaWUpCj4gIHsKPiAtCXN0cnVjdCBkd19wY2ll ICpwY2kgPSBpbXg2X3BjaWUtPnBjaTsKPiAtCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBjaS0+ZGV2 Owo+ICAJdW5zaWduZWQgaW50IG9mZnNldDsKPiAgCWludCByZXQgPSAwOwo+ICAKPiAgCXN3aXRj aCAoaW14Nl9wY2llLT5kcnZkYXRhLT52YXJpYW50KSB7Cj4gIAljYXNlIElNWDZTWDoKPiAtCQly ZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaW14Nl9wY2llLT5wY2llX2luYm91bmRfYXhpKTsKPiAt CQlpZiAocmV0KSB7Cj4gLQkJCWRldl9lcnIoZGV2LCAidW5hYmxlIHRvIGVuYWJsZSBwY2llX2F4 aSBjbG9ja1xuIik7Cj4gLQkJCWJyZWFrOwo+IC0JCX0KPiAtCj4gIAkJcmVnbWFwX3VwZGF0ZV9i aXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwgSU9NVVhDX0dQUjEyLAo+ICAJCQkJICAgSU1YNlNY X0dQUjEyX1BDSUVfVEVTVF9QT1dFUkRPV04sIDApOwo+ICAJCWJyZWFrOwo+IEBAIC01ODksMTIg KzU4Niw2IEBAIHN0YXRpYyBpbnQgaW14Nl9wY2llX2VuYWJsZV9yZWZfY2xrKHN0cnVjdCBpbXg2 X3BjaWUgKmlteDZfcGNpZSkKPiAgCWNhc2UgSU1YOE1RX0VQOgo+ICAJY2FzZSBJTVg4TVA6Cj4g IAljYXNlIElNWDhNUF9FUDoKPiAtCQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaW14Nl9wY2ll LT5wY2llX2F1eCk7Cj4gLQkJaWYgKHJldCkgewo+IC0JCQlkZXZfZXJyKGRldiwgInVuYWJsZSB0 byBlbmFibGUgcGNpZV9hdXggY2xvY2tcbiIpOwo+IC0JCQlicmVhazsKPiAtCQl9Cj4gLQo+ICAJ CW9mZnNldCA9IGlteDZfcGNpZV9ncnBfb2Zmc2V0KGlteDZfcGNpZSk7Cj4gIAkJLyoKPiAgCQkg KiBTZXQgdGhlIG92ZXIgcmlkZSBsb3cgYW5kIGVuYWJsZWQKPiBAQCAtNjE1LDkgKzYwNiw2IEBA IHN0YXRpYyBpbnQgaW14Nl9wY2llX2VuYWJsZV9yZWZfY2xrKHN0cnVjdCBpbXg2X3BjaWUgKmlt eDZfcGNpZSkKPiAgc3RhdGljIHZvaWQgaW14Nl9wY2llX2Rpc2FibGVfcmVmX2NsayhzdHJ1Y3Qg aW14Nl9wY2llICppbXg2X3BjaWUpCj4gIHsKPiAgCXN3aXRjaCAoaW14Nl9wY2llLT5kcnZkYXRh LT52YXJpYW50KSB7Cj4gLQljYXNlIElNWDZTWDoKPiAtCQljbGtfZGlzYWJsZV91bnByZXBhcmUo aW14Nl9wY2llLT5wY2llX2luYm91bmRfYXhpKTsKPiAtCQlicmVhazsKPiAgCWNhc2UgSU1YNlFQ Ogo+ICAJY2FzZSBJTVg2UToKPiAgCQlyZWdtYXBfdXBkYXRlX2JpdHMoaW14Nl9wY2llLT5pb211 eGNfZ3ByLCBJT01VWENfR1BSMSwKPiBAQCAtNjMxLDE0ICs2MTksNiBAQCBzdGF0aWMgdm9pZCBp bXg2X3BjaWVfZGlzYWJsZV9yZWZfY2xrKHN0cnVjdCBpbXg2X3BjaWUgKmlteDZfcGNpZSkKPiAg CQkJCSAgIElNWDdEX0dQUjEyX1BDSUVfUEhZX1JFRkNMS19TRUwsCj4gIAkJCQkgICBJTVg3RF9H UFIxMl9QQ0lFX1BIWV9SRUZDTEtfU0VMKTsKPiAgCQlicmVhazsKPiAtCWNhc2UgSU1YOE1NOgo+ IC0JY2FzZSBJTVg4TU1fRVA6Cj4gLQljYXNlIElNWDhNUToKPiAtCWNhc2UgSU1YOE1RX0VQOgo+ IC0JY2FzZSBJTVg4TVA6Cj4gLQljYXNlIElNWDhNUF9FUDoKPiAtCQljbGtfZGlzYWJsZV91bnBy ZXBhcmUoaW14Nl9wY2llLT5wY2llX2F1eCk7Cj4gLQkJYnJlYWs7Cj4gIAlkZWZhdWx0Ogo+ICAJ CWJyZWFrOwo+ICAJfQo+IEBAIC02NTAsMjMgKzYzMCw5IEBAIHN0YXRpYyBpbnQgaW14Nl9wY2ll X2Nsa19lbmFibGUoc3RydWN0IGlteDZfcGNpZSAqaW14Nl9wY2llKQo+ICAJc3RydWN0IGRldmlj ZSAqZGV2ID0gcGNpLT5kZXY7Cj4gIAlpbnQgcmV0Owo+ICAKPiAtCXJldCA9IGNsa19wcmVwYXJl X2VuYWJsZShpbXg2X3BjaWUtPnBjaWVfcGh5KTsKPiAtCWlmIChyZXQpIHsKPiAtCQlkZXZfZXJy KGRldiwgInVuYWJsZSB0byBlbmFibGUgcGNpZV9waHkgY2xvY2tcbiIpOwo+ICsJcmV0ID0gIGNs a19idWxrX3ByZXBhcmVfZW5hYmxlKGlteDZfcGNpZS0+Y2xrc19jbnQsIGlteDZfcGNpZS0+Y2xr cyk7CgpFeHRyYSBzcGFjZSBhZnRlciA9Cgo+ICsJaWYgKHJldCkKPiAgCQlyZXR1cm4gcmV0Owo+ IC0JfQo+IC0KPiAtCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShpbXg2X3BjaWUtPnBjaWVfYnVz KTsKPiAtCWlmIChyZXQpIHsKPiAtCQlkZXZfZXJyKGRldiwgInVuYWJsZSB0byBlbmFibGUgcGNp ZV9idXMgY2xvY2tcbiIpOwo+IC0JCWdvdG8gZXJyX3BjaWVfYnVzOwo+IC0JfQo+IC0KPiAtCXJl dCA9IGNsa19wcmVwYXJlX2VuYWJsZShpbXg2X3BjaWUtPnBjaWUpOwo+IC0JaWYgKHJldCkgewo+ IC0JCWRldl9lcnIoZGV2LCAidW5hYmxlIHRvIGVuYWJsZSBwY2llIGNsb2NrXG4iKTsKPiAtCQln b3RvIGVycl9wY2llOwo+IC0JfQo+ICAKPiAgCXJldCA9IGlteDZfcGNpZV9lbmFibGVfcmVmX2Ns ayhpbXg2X3BjaWUpOwo+ICAJaWYgKHJldCkgewo+IEBAIC02NzksMTEgKzY0NSw3IEBAIHN0YXRp YyBpbnQgaW14Nl9wY2llX2Nsa19lbmFibGUoc3RydWN0IGlteDZfcGNpZSAqaW14Nl9wY2llKQo+ ICAJcmV0dXJuIDA7Cj4gIAo+ICBlcnJfcmVmX2NsazoKPiAtCWNsa19kaXNhYmxlX3VucHJlcGFy ZShpbXg2X3BjaWUtPnBjaWUpOwo+IC1lcnJfcGNpZToKPiAtCWNsa19kaXNhYmxlX3VucHJlcGFy ZShpbXg2X3BjaWUtPnBjaWVfYnVzKTsKPiAtZXJyX3BjaWVfYnVzOgo+IC0JY2xrX2Rpc2FibGVf dW5wcmVwYXJlKGlteDZfcGNpZS0+cGNpZV9waHkpOwo+ICsJY2xrX2J1bGtfZGlzYWJsZV91bnBy ZXBhcmUoaW14Nl9wY2llLT5jbGtzX2NudCwgaW14Nl9wY2llLT5jbGtzKTsKPiAgCj4gIAlyZXR1 cm4gcmV0Owo+ICB9Cj4gQEAgLTY5MSw5ICs2NTMsNyBAQCBzdGF0aWMgaW50IGlteDZfcGNpZV9j bGtfZW5hYmxlKHN0cnVjdCBpbXg2X3BjaWUgKmlteDZfcGNpZSkKPiAgc3RhdGljIHZvaWQgaW14 Nl9wY2llX2Nsa19kaXNhYmxlKHN0cnVjdCBpbXg2X3BjaWUgKmlteDZfcGNpZSkKPiAgewo+ICAJ aW14Nl9wY2llX2Rpc2FibGVfcmVmX2NsayhpbXg2X3BjaWUpOwo+IC0JY2xrX2Rpc2FibGVfdW5w cmVwYXJlKGlteDZfcGNpZS0+cGNpZSk7Cj4gLQljbGtfZGlzYWJsZV91bnByZXBhcmUoaW14Nl9w Y2llLT5wY2llX2J1cyk7Cj4gLQljbGtfZGlzYWJsZV91bnByZXBhcmUoaW14Nl9wY2llLT5wY2ll X3BoeSk7Cj4gKwljbGtfYnVsa19kaXNhYmxlX3VucHJlcGFyZShpbXg2X3BjaWUtPmNsa3NfY250 LCBpbXg2X3BjaWUtPmNsa3MpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBpbXg2X3BjaWVfYXNz ZXJ0X2NvcmVfcmVzZXQoc3RydWN0IGlteDZfcGNpZSAqaW14Nl9wY2llKQo+IEBAIC0xMzA1LDMy ICsxMjY1LDE5IEBAIHN0YXRpYyBpbnQgaW14Nl9wY2llX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCj4gIAkJcmV0dXJuIGlteDZfcGNpZS0+cmVzZXRfZ3BpbzsKPiAgCX0KPiAg Cj4gLQkvKiBGZXRjaCBjbG9ja3MgKi8KPiAtCWlteDZfcGNpZS0+cGNpZV9idXMgPSBkZXZtX2Ns a19nZXQoZGV2LCAicGNpZV9idXMiKTsKPiAtCWlmIChJU19FUlIoaW14Nl9wY2llLT5wY2llX2J1 cykpCj4gLQkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGlteDZfcGNpZS0+cGNp ZV9idXMpLAo+IC0JCQkJICAgICAicGNpZV9idXMgY2xvY2sgc291cmNlIG1pc3Npbmcgb3IgaW52 YWxpZFxuIik7Cj4gKwl3aGlsZSAoaW14Nl9wY2llLT5kcnZkYXRhLT5jbGtfbmFtZXNbaW14Nl9w Y2llLT5jbGtzX2NudF0pIHsKPiArCQlpbnQgaSA9IGlteDZfcGNpZS0+Y2xrc19jbnQ7CgpXaHkg Y2FuJ3QgeW91IGluaXRpYWxpemUgaSB0byAwIGRpcmVjdGx5PwoKUmVzdCBsb29rcyBnb29kIHRv IG1lLgoKLSBNYW5pCgo+ICsKPiArCQlpbXg2X3BjaWUtPmNsa3NbaV0uaWQgPSBpbXg2X3BjaWUt PmRydmRhdGEtPmNsa19uYW1lc1tpXTsKPiArCQlpbXg2X3BjaWUtPmNsa3NfY250Kys7Cj4gKwl9 Cj4gIAo+IC0JaW14Nl9wY2llLT5wY2llID0gZGV2bV9jbGtfZ2V0KGRldiwgInBjaWUiKTsKPiAt CWlmIChJU19FUlIoaW14Nl9wY2llLT5wY2llKSkKPiAtCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShk ZXYsIFBUUl9FUlIoaW14Nl9wY2llLT5wY2llKSwKPiAtCQkJCSAgICAgInBjaWUgY2xvY2sgc291 cmNlIG1pc3Npbmcgb3IgaW52YWxpZFxuIik7Cj4gKwkvKiBGZXRjaCBjbG9ja3MgKi8KPiArCXJl dCA9IGRldm1fY2xrX2J1bGtfZ2V0KGRldiwgaW14Nl9wY2llLT5jbGtzX2NudCwgaW14Nl9wY2ll LT5jbGtzKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiAgCj4gIAlzd2l0Y2ggKGlt eDZfcGNpZS0+ZHJ2ZGF0YS0+dmFyaWFudCkgewo+IC0JY2FzZSBJTVg2U1g6Cj4gLQkJaW14Nl9w Y2llLT5wY2llX2luYm91bmRfYXhpID0gZGV2bV9jbGtfZ2V0KGRldiwKPiAtCQkJCQkJCSAgICJw Y2llX2luYm91bmRfYXhpIik7Cj4gLQkJaWYgKElTX0VSUihpbXg2X3BjaWUtPnBjaWVfaW5ib3Vu ZF9heGkpKQo+IC0JCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoaW14Nl9wY2ll LT5wY2llX2luYm91bmRfYXhpKSwKPiAtCQkJCQkgICAgICJwY2llX2luYm91bmRfYXhpIGNsb2Nr IG1pc3Npbmcgb3IgaW52YWxpZFxuIik7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIElNWDhNUToKPiAt CWNhc2UgSU1YOE1RX0VQOgo+IC0JCWlteDZfcGNpZS0+cGNpZV9hdXggPSBkZXZtX2Nsa19nZXQo ZGV2LCAicGNpZV9hdXgiKTsKPiAtCQlpZiAoSVNfRVJSKGlteDZfcGNpZS0+cGNpZV9hdXgpKQo+ IC0JCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoaW14Nl9wY2llLT5wY2llX2F1 eCksCj4gLQkJCQkJICAgICAicGNpZV9hdXggY2xvY2sgc291cmNlIG1pc3Npbmcgb3IgaW52YWxp ZFxuIik7Cj4gLQkJZmFsbHRocm91Z2g7Cj4gIAljYXNlIElNWDdEOgo+ICAJCWlmIChkYmlfYmFz ZS0+c3RhcnQgPT0gSU1YOE1RX1BDSUUyX0JBU0VfQUREUikKPiAgCQkJaW14Nl9wY2llLT5jb250 cm9sbGVyX2lkID0gMTsKPiBAQCAtMTM1MywxMCArMTMwMCw2IEBAIHN0YXRpYyBpbnQgaW14Nl9w Y2llX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gIAljYXNlIElNWDhNTV9F UDoKPiAgCWNhc2UgSU1YOE1QOgo+ICAJY2FzZSBJTVg4TVBfRVA6Cj4gLQkJaW14Nl9wY2llLT5w Y2llX2F1eCA9IGRldm1fY2xrX2dldChkZXYsICJwY2llX2F1eCIpOwo+IC0JCWlmIChJU19FUlIo aW14Nl9wY2llLT5wY2llX2F1eCkpCj4gLQkJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRS X0VSUihpbXg2X3BjaWUtPnBjaWVfYXV4KSwKPiAtCQkJCQkgICAgICJwY2llX2F1eCBjbG9jayBz b3VyY2UgbWlzc2luZyBvciBpbnZhbGlkXG4iKTsKPiAgCQlpbXg2X3BjaWUtPmFwcHNfcmVzZXQg PSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0X2V4Y2x1c2l2ZShkZXYsCj4gIAkJCQkJCQkJCSAiYXBw cyIpOwo+ICAJCWlmIChJU19FUlIoaW14Nl9wY2llLT5hcHBzX3Jlc2V0KSkKPiBAQCAtMTM3Miwx NCArMTMxNSw2IEBAIHN0YXRpYyBpbnQgaW14Nl9wY2llX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCj4gIAlkZWZhdWx0Ogo+ICAJCWJyZWFrOwo+ICAJfQo+IC0JLyogRG9uJ3Qg ZmV0Y2ggdGhlIHBjaWVfcGh5IGNsb2NrLCBpZiBpdCBoYXMgYWJzdHJhY3QgUEhZIGRyaXZlciAq Lwo+IC0JaWYgKGlteDZfcGNpZS0+cGh5ID09IE5VTEwpIHsKPiAtCQlpbXg2X3BjaWUtPnBjaWVf cGh5ID0gZGV2bV9jbGtfZ2V0KGRldiwgInBjaWVfcGh5Iik7Cj4gLQkJaWYgKElTX0VSUihpbXg2 X3BjaWUtPnBjaWVfcGh5KSkKPiAtCQkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJS KGlteDZfcGNpZS0+cGNpZV9waHkpLAo+IC0JCQkJCSAgICAgInBjaWVfcGh5IGNsb2NrIHNvdXJj ZSBtaXNzaW5nIG9yIGludmFsaWRcbiIpOwo+IC0JfQo+IC0KPiAgCj4gIAkvKiBHcmFiIHR1cm5v ZmYgcmVzZXQgKi8KPiAgCWlteDZfcGNpZS0+dHVybm9mZl9yZXNldCA9IGRldm1fcmVzZXRfY29u dHJvbF9nZXRfb3B0aW9uYWxfZXhjbHVzaXZlKGRldiwgInR1cm5vZmYiKTsKPiBAQCAtMTQ3Nyw2 ICsxNDEyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbXg2X3BjaWVfZHJ2ZGF0YSBkcnZkYXRh W10gPSB7Cj4gIAkJCSBJTVg2X1BDSUVfRkxBR19JTVg2X1NQRUVEX0NIQU5HRSwKPiAgCQkuZGJp X2xlbmd0aCA9IDB4MjAwLAo+ICAJCS5ncHIgPSAiZnNsLGlteDZxLWlvbXV4Yy1ncHIiLAo+ICsJ CS5jbGtfbmFtZXMgPSB7InBjaWVfYnVzIiwgInBjaWUiLCAicGNpZV9waHkifSwKPiAgCX0sCj4g IAlbSU1YNlNYXSA9IHsKPiAgCQkudmFyaWFudCA9IElNWDZTWCwKPiBAQCAtMTQ4NCw2ICsxNDIw LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbXg2X3BjaWVfZHJ2ZGF0YSBkcnZkYXRhW10gPSB7 Cj4gIAkJCSBJTVg2X1BDSUVfRkxBR19JTVg2X1NQRUVEX0NIQU5HRSB8Cj4gIAkJCSBJTVg2X1BD SUVfRkxBR19TVVBQT1JUU19TVVNQRU5ELAo+ICAJCS5ncHIgPSAiZnNsLGlteDZxLWlvbXV4Yy1n cHIiLAo+ICsJCS5jbGtfbmFtZXMgPSB7InBjaWVfYnVzIiwgInBjaWUiLCAicGNpZV9waHkiLCAi cGNpZV9pbmJvdW5kX2F4aSJ9LAo+ICAJfSwKPiAgCVtJTVg2UVBdID0gewo+ICAJCS52YXJpYW50 ID0gSU1YNlFQLAo+IEBAIC0xNDkyLDQwICsxNDI5LDQ4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg aW14Nl9wY2llX2RydmRhdGEgZHJ2ZGF0YVtdID0gewo+ICAJCQkgSU1YNl9QQ0lFX0ZMQUdfU1VQ UE9SVFNfU1VTUEVORCwKPiAgCQkuZGJpX2xlbmd0aCA9IDB4MjAwLAo+ICAJCS5ncHIgPSAiZnNs LGlteDZxLWlvbXV4Yy1ncHIiLAo+ICsJCS5jbGtfbmFtZXMgPSB7InBjaWVfYnVzIiwgInBjaWUi LCAicGNpZV9waHkifSwKPiAgCX0sCj4gIAlbSU1YN0RdID0gewo+ICAJCS52YXJpYW50ID0gSU1Y N0QsCj4gIAkJLmZsYWdzID0gSU1YNl9QQ0lFX0ZMQUdfU1VQUE9SVFNfU1VTUEVORCwKPiAgCQku Z3ByID0gImZzbCxpbXg3ZC1pb211eGMtZ3ByIiwKPiArCQkuY2xrX25hbWVzID0geyJwY2llX2J1 cyIsICJwY2llIiwgInBjaWVfcGh5In0sCj4gIAl9LAo+ICAJW0lNWDhNUV0gPSB7Cj4gIAkJLnZh cmlhbnQgPSBJTVg4TVEsCj4gIAkJLmdwciA9ICJmc2wsaW14OG1xLWlvbXV4Yy1ncHIiLAo+ICsJ CS5jbGtfbmFtZXMgPSB7InBjaWVfYnVzIiwgInBjaWUiLCAicGNpZV9waHkiLCAicGNpZV9hdXgi fSwKPiAgCX0sCj4gIAlbSU1YOE1NXSA9IHsKPiAgCQkudmFyaWFudCA9IElNWDhNTSwKPiAgCQku ZmxhZ3MgPSBJTVg2X1BDSUVfRkxBR19TVVBQT1JUU19TVVNQRU5ELAo+ICAJCS5ncHIgPSAiZnNs LGlteDhtbS1pb211eGMtZ3ByIiwKPiArCQkuY2xrX25hbWVzID0geyJwY2llX2J1cyIsICJwY2ll IiwgInBjaWVfYXV4In0sCj4gIAl9LAo+ICAJW0lNWDhNUF0gPSB7Cj4gIAkJLnZhcmlhbnQgPSBJ TVg4TVAsCj4gIAkJLmZsYWdzID0gSU1YNl9QQ0lFX0ZMQUdfU1VQUE9SVFNfU1VTUEVORCwKPiAg CQkuZ3ByID0gImZzbCxpbXg4bXAtaW9tdXhjLWdwciIsCj4gKwkJLmNsa19uYW1lcyA9IHsicGNp ZV9idXMiLCAicGNpZSIsICJwY2llX2F1eCJ9LAo+ICAJfSwKPiAgCVtJTVg4TVFfRVBdID0gewo+ ICAJCS52YXJpYW50ID0gSU1YOE1RX0VQLAo+ICAJCS5tb2RlID0gRFdfUENJRV9FUF9UWVBFLAo+ ICAJCS5ncHIgPSAiZnNsLGlteDhtcS1pb211eGMtZ3ByIiwKPiArCQkuY2xrX25hbWVzID0geyJw Y2llX2J1cyIsICJwY2llIiwgInBjaWVfcGh5IiwgInBjaWVfYXV4In0sCj4gIAl9LAo+ICAJW0lN WDhNTV9FUF0gPSB7Cj4gIAkJLnZhcmlhbnQgPSBJTVg4TU1fRVAsCj4gIAkJLm1vZGUgPSBEV19Q Q0lFX0VQX1RZUEUsCj4gIAkJLmdwciA9ICJmc2wsaW14OG1tLWlvbXV4Yy1ncHIiLAo+ICsJCS5j bGtfbmFtZXMgPSB7InBjaWVfYnVzIiwgInBjaWUiLCAicGNpZV9hdXgifSwKPiAgCX0sCj4gIAlb SU1YOE1QX0VQXSA9IHsKPiAgCQkudmFyaWFudCA9IElNWDhNUF9FUCwKPiAgCQkubW9kZSA9IERX X1BDSUVfRVBfVFlQRSwKPiAgCQkuZ3ByID0gImZzbCxpbXg4bXAtaW9tdXhjLWdwciIsCj4gKwkJ LmNsa19uYW1lcyA9IHsicGNpZV9idXMiLCAicGNpZSIsICJwY2llX2F1eCJ9LAo+ICAJfSwKPiAg fTsKPiAgCj4gLS0gCj4gMi4zNC4xCj4gCgotLSAK4K6u4K6j4K6/4K614K6j4K+N4K6j4K6p4K+N IOCumuCupOCuvuCumuCuv+CuteCuruCvjQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJt LWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21h aWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=