From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 047911CA8A; Thu, 25 Jul 2024 07:57:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721894236; cv=none; b=Ud0OPZY6LghHbLjD6hbTt2y6Y7ZHDMTHb19gJLeVssLjBzEgOtQlKhkH6fdMwbZFWoXenBzXnjQK5DppiIt01hxt3jalyKEpyAnLgf+XKI/hc+TN39q0IdTodTIU64Lgv/dsBtE6GeMPG3uWPitihY4x3u4Y0wmFpvbQeI8YypE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721894236; c=relaxed/simple; bh=aNT0Q8oUAbpUZefrt7kBTZ31CMHmKs1m1fqrVLLhAIw=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=j4zd22aoCaEN6bC9/Kp5BSuc1HxpdtMF3rcbmeQ53a4vevrB8pEyPYNS7cQLkQ8KgFoJeqeyU1JhyPzJXgmTRq5k4iWcdOsk019qA8lsdaCWjKhsMNrU6LJReyo0yqjUsNbQiNa84rme9/ZoAxoAXpfVeNYIRJDQdpW+zgf5Qko= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=IP+uKluK; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="IP+uKluK" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7822EC116B1; Thu, 25 Jul 2024 07:57:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721894235; bh=aNT0Q8oUAbpUZefrt7kBTZ31CMHmKs1m1fqrVLLhAIw=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=IP+uKluKRukNdkh+oVMOB/AMShcQVRUnyz3CBLhB4gC301qpppVezztuKaAhD3Khb WDQpv1DtEd1psmMaDZae3rfyUgsuiKAJGqmo7L7xvttWRU9p8ODN2XimURCAIp/82W ycSmoL1LJx6brCvXVPCkcmrTpd9XDeFov3nwvZWcS/la5SN6nizx1S02yJnDAmyxcw TotDkVJ1OqkZCLHpxQlilIC2emvOeolAy1qcNsddJgoR9ownUvAaBrvEqmpoVK/llw ljo70nbIB6XsziQ4qGbqbJyLE0+8VTF+rsdErVgu0YXdTzpsgAGQ1panNtaK2kJKNT GVbwGYJFFV1UQ== Date: Thu, 25 Jul 2024 08:56:58 +0100 From: Lee Jones To: Luca Ceresoli Cc: Miguel Ojeda , Rob Herring , Saravana Kannan , Nathan Chancellor , Michael Turquette , Stephen Boyd , Tony Lindgren , Bjorn Andersson , Emilio =?iso-8859-1?Q?L=F3pez?= , Chen-Yu Tsai , Jernej Skrabec , Samuel Holland , Krzysztof Kozlowski , Daniel Lezcano , Thomas Gleixner , Florian Fainelli , Broadcom internal kernel review list , Linus Walleij , Bartosz Golaszewski , Jonathan Cameron , Shawn Guo , Pengutronix Kernel Team , Uwe =?iso-8859-1?Q?Kleine-K=F6nig?= , Greg Kroah-Hartman , Jiri Slaby , Richard Leitner , Liam Girdwood , Mark Brown , Nicolas Ferre , Michael Ellerman , Nicholas Piggin , Christophe Leroy , "Naveen N. Rao" , Damien Le Moal , Aaro Koskinen , Andreas Kemnade , Kevin Hilman , Roger Quadros , Alim Akhtar , Doug Berger , Lars-Peter Clausen , Alexandre Belloni , Claudiu Beznea , Chester Lin , Matthias Brugger , Ghennadi Procopciuc , Dong Aisheng , Fabio Estevam , Jacky Bai , Jaroslav Kysela , Takashi Iwai , "Peng Fan (OSS)" , Thomas Petazzoni , linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, llvm@lists.linux.dev, linux-clk@vger.kernel.org, linux-omap@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-samsung-soc@vger.kernel.org, linux-gpio@vger.kernel.org, linux-iio@vger.kernel.org, linux-pwm@vger.kernel.org, linux-serial@vger.kernel.org, linux-usb@vger.kernel.org, patches@opensource.cirrus.com, linux-sound@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-riscv@lists.infradead.org, Andre Przywara , Bartosz Golaszewski , Jonathan Cameron , Uwe =?iso-8859-1?Q?Kleine-K=F6nig?= , Richard Fitzgerald Subject: Re: [PATCH v3] of: remove internal arguments from of_property_for_each_u32() Message-ID: <20240725075658.GB501857@google.com> References: <20240724-of_property_for_each_u32-v3-1-bea82ce429e2@bootlin.com> Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org 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: <20240724-of_property_for_each_u32-v3-1-bea82ce429e2@bootlin.com> On Wed, 24 Jul 2024, Luca Ceresoli wrote: > The of_property_for_each_u32() macro needs five parameters, two of which > are primarily meant as internal variables for the macro itself (in the > for() clause). Yet these two parameters are used by a few drivers, and this > can be considered misuse or at least bad practice. > > Now that the kernel uses C11 to build, these two parameters can be avoided > by declaring them internally, thus changing this pattern: > > struct property *prop; > const __be32 *p; > u32 val; > > of_property_for_each_u32(np, "xyz", prop, p, val) { ... } > > to this: > > u32 val; > > of_property_for_each_u32(np, "xyz", val) { ... } > > However two variables cannot be declared in the for clause even with C11, > so declare one struct that contain the two variables we actually need. As > the variables inside this struct are not meant to be used by users of this > macro, give the struct instance the noticeable name "_it" so it is visible > during code reviews, helping to avoid new code to use it directly. > > Most usages are trivially converted as they do not use those two > parameters, as expected. The non-trivial cases are: > > - drivers/clk/clk.c, of_clk_get_parent_name(): easily doable anyway > - drivers/clk/clk-si5351.c, si5351_dt_parse(): this is more complex as the > checks had to be replicated in a different way, making code more verbose > and somewhat uglier, but I refrained from a full rework to keep as much > of the original code untouched having no hardware to test my changes > > All the changes have been build tested. The few for which I have the > hardware have been runtime-tested too. > > Reviewed-by: Andre Przywara # drivers/clk/sunxi/clk-simple-gates.c, drivers/clk/sunxi/clk-sun8i-bus-gates.c > Acked-by: Bartosz Golaszewski # drivers/gpio/gpio-brcmstb.c > Acked-by: Nicolas Ferre # drivers/irqchip/irq-atmel-aic-common.c > Acked-by: Jonathan Cameron # drivers/iio/adc/ti_am335x_adc.c > Acked-by: Uwe Kleine-König # drivers/pwm/pwm-samsung.c > Acked-by: Richard Leitner # drivers/usb/misc/usb251xb.c > Acked-by: Mark Brown # sound/soc/codecs/arizona.c > Reviewed-by: Richard Fitzgerald # sound/soc/codecs/arizona.c > Acked-by: Michael Ellerman # arch/powerpc/sysdev/xive/spapr.c > Acked-by: Stephen Boyd # clk > Signed-off-by: Luca Ceresoli > --- > [Note: to reduce the noise I have trimmed the get_maintainers list > manually. Should you want to be removed, or someone else added, to future > versions, just tell me. Sorry for the noise.] > > This series aims at simplifying of_property_for_each_u32() as well as > making it more difficult to misuse it in the future. > > The long-term goal is changing this pattern: > > struct property *prop; > const __be32 *p; > u32 val; > > of_property_for_each_u32(np, "xyz", prop, p, val) { ... } > > to this: > > u32 val; > > of_property_for_each_u32(np, "xyz", val) { ... } > > So, removing the 3rd and 4th arguments which are typically meant to be > internal. Those two parameters used to be unavoidable until the kernel > moved to building with the C11 standard unconditionally. Since then, it is > now possible to get rid of them. However a few users of > of_property_for_each_u32() do actually use those arguments, which > complicates the transition. For this reason this series does the following: > > * Add of_property_for_each_u32_new(), which does not have those two > arguments (patch 1) > * Convert _almost_ every usage to of_property_for_each_u32_new() > * Rename of_property_for_each_u32() to of_property_for_each_u32_old() and > deprecate it, as a incentive to code not (yet) in mainline to upgrade > to the *_new() version (last patch) > > The plan for the next series is to additionally: > > * Convert the few remaining of_property_for_each_u32_old() instantes to > of_property_for_each_u32_new() > * Remove of_property_for_each_u32_old() > * Rename of_property_for_each_u32_new() to of_property_for_each_u32() > --- > Changes in v3: > - Link to v2: https://lore.kernel.org/r/20240717-of_property_for_each_u32-v2-1-4060990f49c9@bootlin.com > > Changes in v2: > - Link to v1: https://lore.kernel.org/r/20240703-of_property_for_each_u32-v1-0-42c1fc0b82aa@bootlin.com > --- > > Changed in v3: > - add missing newlines to printk strings > - Link to v2: https://lore.kernel.org/r/20240717-of_property_for_each_u32-v2-1-4060990f49c9@bootlin.com > > Note! I have carried the ack/review tags received on v1, but since those > were on individual, per-driver patches I cannot claim the approve the whole > work. So I have added the specific file that was acked. For those who > reviewed v1 (thanks!), I'll assume that's OK unless you tell otherwise. > > Changed in v2: > - squashed into a single patch as suggested by Rob > - so _new and _old macros do not appear anymore > - added to To/Cc all names reported by get_maintainers instead of > trimming as I did for v1 > - converted the few users not yet converted in v1 > - improve commit message > - Link to v1: https://lore.kernel.org/r/20240703-of_property_for_each_u32-v1-0-42c1fc0b82aa@bootlin.com > --- > arch/powerpc/sysdev/xive/native.c | 4 +-- > arch/powerpc/sysdev/xive/spapr.c | 3 +-- > drivers/bus/ti-sysc.c | 4 +-- > drivers/clk/clk-conf.c | 4 +-- > drivers/clk/clk-si5351.c | 43 ++++++++++++++++++++------------- > drivers/clk/clk.c | 12 ++++----- > drivers/clk/qcom/common.c | 4 +-- > drivers/clk/sunxi/clk-simple-gates.c | 4 +-- > drivers/clk/sunxi/clk-sun8i-bus-gates.c | 4 +-- > drivers/clocksource/samsung_pwm_timer.c | 4 +-- > drivers/gpio/gpio-brcmstb.c | 5 +--- > drivers/iio/adc/ti_am335x_adc.c | 4 +-- > drivers/irqchip/irq-atmel-aic-common.c | 4 +-- > drivers/irqchip/irq-pic32-evic.c | 4 +-- > drivers/mfd/ti_am335x_tscadc.c | 4 +-- Acked-by: Lee Jones > drivers/pinctrl/nxp/pinctrl-s32cc.c | 4 +-- > drivers/pinctrl/pinctrl-k210.c | 4 +-- > drivers/pwm/pwm-samsung.c | 4 +-- > drivers/tty/sysrq.c | 4 +-- > drivers/usb/misc/usb251xb.c | 4 +-- > include/linux/of.h | 15 ++++++------ > sound/soc/codecs/arizona.c | 12 ++++----- > 22 files changed, 61 insertions(+), 93 deletions(-) > > diff --git a/arch/powerpc/sysdev/xive/native.c b/arch/powerpc/sysdev/xive/native.c > index 517b963e3e6a..a0934b516933 100644 > --- a/arch/powerpc/sysdev/xive/native.c > +++ b/arch/powerpc/sysdev/xive/native.c > @@ -559,9 +559,7 @@ bool __init xive_native_init(void) > struct device_node *np; > struct resource r; > void __iomem *tima; > - struct property *prop; > u8 max_prio = 7; > - const __be32 *p; > u32 val, cpu; > s64 rc; > > @@ -592,7 +590,7 @@ bool __init xive_native_init(void) > max_prio = val - 1; > > /* Iterate the EQ sizes and pick one */ > - of_property_for_each_u32(np, "ibm,xive-eq-sizes", prop, p, val) { > + of_property_for_each_u32(np, "ibm,xive-eq-sizes", val) { > xive_queue_shift = val; > if (val == PAGE_SHIFT) > break; > diff --git a/arch/powerpc/sysdev/xive/spapr.c b/arch/powerpc/sysdev/xive/spapr.c > index e45419264391..f2fa985a2c77 100644 > --- a/arch/powerpc/sysdev/xive/spapr.c > +++ b/arch/powerpc/sysdev/xive/spapr.c > @@ -814,7 +814,6 @@ bool __init xive_spapr_init(void) > struct device_node *np; > struct resource r; > void __iomem *tima; > - struct property *prop; > u8 max_prio; > u32 val; > u32 len; > @@ -866,7 +865,7 @@ bool __init xive_spapr_init(void) > } > > /* Iterate the EQ sizes and pick one */ > - of_property_for_each_u32(np, "ibm,xive-eq-sizes", prop, reg, val) { > + of_property_for_each_u32(np, "ibm,xive-eq-sizes", val) { > xive_queue_shift = val; > if (val == PAGE_SHIFT) > break; > diff --git a/drivers/bus/ti-sysc.c b/drivers/bus/ti-sysc.c > index 8767e04d6c89..2b59ef61dda2 100644 > --- a/drivers/bus/ti-sysc.c > +++ b/drivers/bus/ti-sysc.c > @@ -2291,11 +2291,9 @@ static int sysc_init_idlemode(struct sysc *ddata, u8 *idlemodes, > const char *name) > { > struct device_node *np = ddata->dev->of_node; > - struct property *prop; > - const __be32 *p; > u32 val; > > - of_property_for_each_u32(np, name, prop, p, val) { > + of_property_for_each_u32(np, name, val) { > if (val >= SYSC_NR_IDLEMODES) { > dev_err(ddata->dev, "invalid idlemode: %i\n", val); > return -EINVAL; > diff --git a/drivers/clk/clk-conf.c b/drivers/clk/clk-conf.c > index 1a4e6340f95c..058420562020 100644 > --- a/drivers/clk/clk-conf.c > +++ b/drivers/clk/clk-conf.c > @@ -81,13 +81,11 @@ static int __set_clk_parents(struct device_node *node, bool clk_supplier) > static int __set_clk_rates(struct device_node *node, bool clk_supplier) > { > struct of_phandle_args clkspec; > - struct property *prop; > - const __be32 *cur; > int rc, index = 0; > struct clk *clk; > u32 rate; > > - of_property_for_each_u32(node, "assigned-clock-rates", prop, cur, rate) { > + of_property_for_each_u32(node, "assigned-clock-rates", rate) { > if (rate) { > rc = of_parse_phandle_with_args(node, "assigned-clocks", > "#clock-cells", index, &clkspec); > diff --git a/drivers/clk/clk-si5351.c b/drivers/clk/clk-si5351.c > index 4ce83c5265b8..a4c92c5ef3ff 100644 > --- a/drivers/clk/clk-si5351.c > +++ b/drivers/clk/clk-si5351.c > @@ -1175,8 +1175,8 @@ static int si5351_dt_parse(struct i2c_client *client, > { > struct device_node *child, *np = client->dev.of_node; > struct si5351_platform_data *pdata; > - struct property *prop; > - const __be32 *p; > + u32 array[4]; > + int sz, i; > int num = 0; > u32 val; > > @@ -1191,20 +1191,24 @@ static int si5351_dt_parse(struct i2c_client *client, > * property silabs,pll-source : , [<..>] > * allow to selectively set pll source > */ > - of_property_for_each_u32(np, "silabs,pll-source", prop, p, num) { > + sz = of_property_read_variable_u32_array(np, "silabs,pll-source", array, 2, 4); > + sz = (sz == -EINVAL) ? 0 : sz; /* Missing property is OK */ > + if (sz < 0) > + return dev_err_probe(&client->dev, sz, "invalid pll-source\n"); > + if (sz % 2) > + return dev_err_probe(&client->dev, -EINVAL, > + "missing pll-source for pll %d\n", array[sz - 1]); > + > + for (i = 0; i < sz; i += 2) { > + num = array[i]; > + val = array[i + 1]; > + > if (num >= 2) { > dev_err(&client->dev, > "invalid pll %d on pll-source prop\n", num); > return -EINVAL; > } > > - p = of_prop_next_u32(prop, p, &val); > - if (!p) { > - dev_err(&client->dev, > - "missing pll-source for pll %d\n", num); > - return -EINVAL; > - } > - > switch (val) { > case 0: > pdata->pll_src[num] = SI5351_PLL_SRC_XTAL; > @@ -1232,19 +1236,24 @@ static int si5351_dt_parse(struct i2c_client *client, > pdata->pll_reset[0] = true; > pdata->pll_reset[1] = true; > > - of_property_for_each_u32(np, "silabs,pll-reset-mode", prop, p, num) { > + sz = of_property_read_variable_u32_array(np, "silabs,pll-reset-mode", array, 2, 4); > + sz = (sz == -EINVAL) ? 0 : sz; /* Missing property is OK */ > + if (sz < 0) > + return dev_err_probe(&client->dev, sz, "invalid pll-reset-mode\n"); > + if (sz % 2) > + return dev_err_probe(&client->dev, -EINVAL, > + "missing pll-reset-mode for pll %d\n", array[sz - 1]); > + > + for (i = 0; i < sz; i += 2) { > + num = array[i]; > + val = array[i + 1]; > + > if (num >= 2) { > dev_err(&client->dev, > "invalid pll %d on pll-reset-mode prop\n", num); > return -EINVAL; > } > > - p = of_prop_next_u32(prop, p, &val); > - if (!p) { > - dev_err(&client->dev, > - "missing pll-reset-mode for pll %d\n", num); > - return -EINVAL; > - } > > switch (val) { > case 0: > diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c > index 8cca52be993f..285ed1ad8a37 100644 > --- a/drivers/clk/clk.c > +++ b/drivers/clk/clk.c > @@ -5364,9 +5364,8 @@ EXPORT_SYMBOL_GPL(of_clk_get_parent_count); > const char *of_clk_get_parent_name(const struct device_node *np, int index) > { > struct of_phandle_args clkspec; > - struct property *prop; > const char *clk_name; > - const __be32 *vp; > + bool found = false; > u32 pv; > int rc; > int count; > @@ -5383,15 +5382,16 @@ const char *of_clk_get_parent_name(const struct device_node *np, int index) > /* if there is an indices property, use it to transfer the index > * specified into an array offset for the clock-output-names property. > */ > - of_property_for_each_u32(clkspec.np, "clock-indices", prop, vp, pv) { > + of_property_for_each_u32(clkspec.np, "clock-indices", pv) { > if (index == pv) { > index = count; > + found = true; > break; > } > count++; > } > /* We went off the end of 'clock-indices' without finding it */ > - if (prop && !vp) > + if (of_property_present(clkspec.np, "clock-indices") && !found) > return NULL; > > if (of_property_read_string_index(clkspec.np, "clock-output-names", > @@ -5504,14 +5504,12 @@ static int parent_ready(struct device_node *np) > int of_clk_detect_critical(struct device_node *np, int index, > unsigned long *flags) > { > - struct property *prop; > - const __be32 *cur; > uint32_t idx; > > if (!np || !flags) > return -EINVAL; > > - of_property_for_each_u32(np, "clock-critical", prop, cur, idx) > + of_property_for_each_u32(np, "clock-critical", idx) > if (index == idx) > *flags |= CLK_IS_CRITICAL; > > diff --git a/drivers/clk/qcom/common.c b/drivers/clk/qcom/common.c > index 48f81e3a5e80..5aff92bf5913 100644 > --- a/drivers/clk/qcom/common.c > +++ b/drivers/clk/qcom/common.c > @@ -226,11 +226,9 @@ EXPORT_SYMBOL_GPL(qcom_cc_register_sleep_clk); > static void qcom_cc_drop_protected(struct device *dev, struct qcom_cc *cc) > { > struct device_node *np = dev->of_node; > - struct property *prop; > - const __be32 *p; > u32 i; > > - of_property_for_each_u32(np, "protected-clocks", prop, p, i) { > + of_property_for_each_u32(np, "protected-clocks", i) { > if (i >= cc->num_rclks) > continue; > > diff --git a/drivers/clk/sunxi/clk-simple-gates.c b/drivers/clk/sunxi/clk-simple-gates.c > index 0399627c226a..845efc1ec800 100644 > --- a/drivers/clk/sunxi/clk-simple-gates.c > +++ b/drivers/clk/sunxi/clk-simple-gates.c > @@ -21,11 +21,9 @@ static void __init sunxi_simple_gates_setup(struct device_node *node, > { > struct clk_onecell_data *clk_data; > const char *clk_parent, *clk_name; > - struct property *prop; > struct resource res; > void __iomem *clk_reg; > void __iomem *reg; > - const __be32 *p; > int number, i = 0, j; > u8 clk_bit; > u32 index; > @@ -47,7 +45,7 @@ static void __init sunxi_simple_gates_setup(struct device_node *node, > if (!clk_data->clks) > goto err_free_data; > > - of_property_for_each_u32(node, "clock-indices", prop, p, index) { > + of_property_for_each_u32(node, "clock-indices", index) { > of_property_read_string_index(node, "clock-output-names", > i, &clk_name); > > diff --git a/drivers/clk/sunxi/clk-sun8i-bus-gates.c b/drivers/clk/sunxi/clk-sun8i-bus-gates.c > index b87f331f63c9..8482ac8e5898 100644 > --- a/drivers/clk/sunxi/clk-sun8i-bus-gates.c > +++ b/drivers/clk/sunxi/clk-sun8i-bus-gates.c > @@ -24,11 +24,9 @@ static void __init sun8i_h3_bus_gates_init(struct device_node *node) > const char *parents[PARENT_MAX]; > struct clk_onecell_data *clk_data; > const char *clk_name; > - struct property *prop; > struct resource res; > void __iomem *clk_reg; > void __iomem *reg; > - const __be32 *p; > int number, i; > u8 clk_bit; > int index; > @@ -58,7 +56,7 @@ static void __init sun8i_h3_bus_gates_init(struct device_node *node) > goto err_free_data; > > i = 0; > - of_property_for_each_u32(node, "clock-indices", prop, p, index) { > + of_property_for_each_u32(node, "clock-indices", index) { > of_property_read_string_index(node, "clock-output-names", > i, &clk_name); > > diff --git a/drivers/clocksource/samsung_pwm_timer.c b/drivers/clocksource/samsung_pwm_timer.c > index 6e46781bc9ac..b9561e3f196c 100644 > --- a/drivers/clocksource/samsung_pwm_timer.c > +++ b/drivers/clocksource/samsung_pwm_timer.c > @@ -418,8 +418,6 @@ void __init samsung_pwm_clocksource_init(void __iomem *base, > static int __init samsung_pwm_alloc(struct device_node *np, > const struct samsung_pwm_variant *variant) > { > - struct property *prop; > - const __be32 *cur; > u32 val; > int i, ret; > > @@ -427,7 +425,7 @@ static int __init samsung_pwm_alloc(struct device_node *np, > for (i = 0; i < SAMSUNG_PWM_NUM; ++i) > pwm.irq[i] = irq_of_parse_and_map(np, i); > > - of_property_for_each_u32(np, "samsung,pwm-outputs", prop, cur, val) { > + of_property_for_each_u32(np, "samsung,pwm-outputs", val) { > if (val >= SAMSUNG_PWM_NUM) { > pr_warn("%s: invalid channel index in samsung,pwm-outputs property\n", __func__); > continue; > diff --git a/drivers/gpio/gpio-brcmstb.c b/drivers/gpio/gpio-brcmstb.c > index 8dce78ea7139..5762e517338e 100644 > --- a/drivers/gpio/gpio-brcmstb.c > +++ b/drivers/gpio/gpio-brcmstb.c > @@ -591,8 +591,6 @@ static int brcmstb_gpio_probe(struct platform_device *pdev) > void __iomem *reg_base; > struct brcmstb_gpio_priv *priv; > struct resource *res; > - struct property *prop; > - const __be32 *p; > u32 bank_width; > int num_banks = 0; > int num_gpios = 0; > @@ -636,8 +634,7 @@ static int brcmstb_gpio_probe(struct platform_device *pdev) > flags = BGPIOF_BIG_ENDIAN_BYTE_ORDER; > #endif > > - of_property_for_each_u32(np, "brcm,gpio-bank-widths", prop, p, > - bank_width) { > + of_property_for_each_u32(np, "brcm,gpio-bank-widths", bank_width) { > struct brcmstb_gpio_bank *bank; > struct gpio_chip *gc; > > diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c > index 95fa857e8aad..426e3c9f88a1 100644 > --- a/drivers/iio/adc/ti_am335x_adc.c > +++ b/drivers/iio/adc/ti_am335x_adc.c > @@ -564,13 +564,11 @@ static int tiadc_parse_dt(struct platform_device *pdev, > struct tiadc_device *adc_dev) > { > struct device_node *node = pdev->dev.of_node; > - struct property *prop; > - const __be32 *cur; > int channels = 0; > u32 val; > int i; > > - of_property_for_each_u32(node, "ti,adc-channels", prop, cur, val) { > + of_property_for_each_u32(node, "ti,adc-channels", val) { > adc_dev->channel_line[channels] = val; > > /* Set Default values for optional DT parameters */ > diff --git a/drivers/irqchip/irq-atmel-aic-common.c b/drivers/irqchip/irq-atmel-aic-common.c > index 072bd227b6c6..4525366d16d6 100644 > --- a/drivers/irqchip/irq-atmel-aic-common.c > +++ b/drivers/irqchip/irq-atmel-aic-common.c > @@ -111,8 +111,6 @@ static void __init aic_common_ext_irq_of_init(struct irq_domain *domain) > struct device_node *node = irq_domain_get_of_node(domain); > struct irq_chip_generic *gc; > struct aic_chip_data *aic; > - struct property *prop; > - const __be32 *p; > u32 hwirq; > > gc = irq_get_domain_generic_chip(domain, 0); > @@ -120,7 +118,7 @@ static void __init aic_common_ext_irq_of_init(struct irq_domain *domain) > aic = gc->private; > aic->ext_irqs |= 1; > > - of_property_for_each_u32(node, "atmel,external-irqs", prop, p, hwirq) { > + of_property_for_each_u32(node, "atmel,external-irqs", hwirq) { > gc = irq_get_domain_generic_chip(domain, hwirq); > if (!gc) { > pr_warn("AIC: external irq %d >= %d skip it\n", > diff --git a/drivers/irqchip/irq-pic32-evic.c b/drivers/irqchip/irq-pic32-evic.c > index 277240325cbc..eb6ca516a166 100644 > --- a/drivers/irqchip/irq-pic32-evic.c > +++ b/drivers/irqchip/irq-pic32-evic.c > @@ -190,13 +190,11 @@ static void __init pic32_ext_irq_of_init(struct irq_domain *domain) > { > struct device_node *node = irq_domain_get_of_node(domain); > struct evic_chip_data *priv = domain->host_data; > - struct property *prop; > - const __le32 *p; > u32 hwirq; > int i = 0; > const char *pname = "microchip,external-irqs"; > > - of_property_for_each_u32(node, pname, prop, p, hwirq) { > + of_property_for_each_u32(node, pname, hwirq) { > if (i >= ARRAY_SIZE(priv->ext_irqs)) { > pr_warn("More than %d external irq, skip rest\n", > ARRAY_SIZE(priv->ext_irqs)); > diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c > index 4bbd542d753e..0c1364d88469 100644 > --- a/drivers/mfd/ti_am335x_tscadc.c > +++ b/drivers/mfd/ti_am335x_tscadc.c > @@ -119,8 +119,6 @@ static int ti_tscadc_probe(struct platform_device *pdev) > struct clk *clk; > struct device_node *node; > struct mfd_cell *cell; > - struct property *prop; > - const __be32 *cur; > bool use_tsc = false, use_mag = false; > u32 val; > int err; > @@ -167,7 +165,7 @@ static int ti_tscadc_probe(struct platform_device *pdev) > } > > node = of_get_child_by_name(pdev->dev.of_node, "adc"); > - of_property_for_each_u32(node, "ti,adc-channels", prop, cur, val) { > + of_property_for_each_u32(node, "ti,adc-channels", val) { > adc_channels++; > if (val > 7) { > dev_err(&pdev->dev, " PIN numbers are 0..7 (not %d)\n", > diff --git a/drivers/pinctrl/nxp/pinctrl-s32cc.c b/drivers/pinctrl/nxp/pinctrl-s32cc.c > index f0cad2c501f7..08d80fb935b3 100644 > --- a/drivers/pinctrl/nxp/pinctrl-s32cc.c > +++ b/drivers/pinctrl/nxp/pinctrl-s32cc.c > @@ -735,9 +735,7 @@ static int s32_pinctrl_parse_groups(struct device_node *np, > struct s32_pin_group *grp, > struct s32_pinctrl_soc_info *info) > { > - const __be32 *p; > struct device *dev; > - struct property *prop; > unsigned int *pins, *sss; > int i, npins; > u32 pinmux; > @@ -768,7 +766,7 @@ static int s32_pinctrl_parse_groups(struct device_node *np, > return -ENOMEM; > > i = 0; > - of_property_for_each_u32(np, "pinmux", prop, p, pinmux) { > + of_property_for_each_u32(np, "pinmux", pinmux) { > pins[i] = get_pin_no(pinmux); > sss[i] = get_pin_func(pinmux); > > diff --git a/drivers/pinctrl/pinctrl-k210.c b/drivers/pinctrl/pinctrl-k210.c > index b6d1ed9ec9a3..f4dcfa56c9e5 100644 > --- a/drivers/pinctrl/pinctrl-k210.c > +++ b/drivers/pinctrl/pinctrl-k210.c > @@ -763,8 +763,6 @@ static int k210_pinctrl_dt_subnode_to_map(struct pinctrl_dev *pctldev, > unsigned int *reserved_maps, > unsigned int *num_maps) > { > - struct property *prop; > - const __be32 *p; > int ret, pinmux_groups; > u32 pinmux_group; > unsigned long *configs = NULL; > @@ -797,7 +795,7 @@ static int k210_pinctrl_dt_subnode_to_map(struct pinctrl_dev *pctldev, > if (ret < 0) > goto exit; > > - of_property_for_each_u32(np, "pinmux", prop, p, pinmux_group) { > + of_property_for_each_u32(np, "pinmux", pinmux_group) { > const char *group_name, *func_name; > u32 pin = FIELD_GET(K210_PG_PIN, pinmux_group); > u32 func = FIELD_GET(K210_PG_FUNC, pinmux_group); > diff --git a/drivers/pwm/pwm-samsung.c b/drivers/pwm/pwm-samsung.c > index efb60c9f0cb3..20734e7a216d 100644 > --- a/drivers/pwm/pwm-samsung.c > +++ b/drivers/pwm/pwm-samsung.c > @@ -510,8 +510,6 @@ static int pwm_samsung_parse_dt(struct pwm_chip *chip) > struct samsung_pwm_chip *our_chip = to_samsung_pwm_chip(chip); > struct device_node *np = pwmchip_parent(chip)->of_node; > const struct of_device_id *match; > - struct property *prop; > - const __be32 *cur; > u32 val; > > match = of_match_node(samsung_pwm_matches, np); > @@ -520,7 +518,7 @@ static int pwm_samsung_parse_dt(struct pwm_chip *chip) > > memcpy(&our_chip->variant, match->data, sizeof(our_chip->variant)); > > - of_property_for_each_u32(np, "samsung,pwm-outputs", prop, cur, val) { > + of_property_for_each_u32(np, "samsung,pwm-outputs", val) { > if (val >= SAMSUNG_PWM_NUM) { > dev_err(pwmchip_parent(chip), > "%s: invalid channel index in samsung,pwm-outputs property\n", > diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c > index e5974b8239c9..dab332681036 100644 > --- a/drivers/tty/sysrq.c > +++ b/drivers/tty/sysrq.c > @@ -770,8 +770,6 @@ static void sysrq_of_get_keyreset_config(void) > { > u32 key; > struct device_node *np; > - struct property *prop; > - const __be32 *p; > > np = of_find_node_by_path("/chosen/linux,sysrq-reset-seq"); > if (!np) { > @@ -782,7 +780,7 @@ static void sysrq_of_get_keyreset_config(void) > /* Reset in case a __weak definition was present */ > sysrq_reset_seq_len = 0; > > - of_property_for_each_u32(np, "keyset", prop, p, key) { > + of_property_for_each_u32(np, "keyset", key) { > if (key == KEY_RESERVED || key > KEY_MAX || > sysrq_reset_seq_len == SYSRQ_KEY_RESET_MAX) > break; > diff --git a/drivers/usb/misc/usb251xb.c b/drivers/usb/misc/usb251xb.c > index 7da404f55a6d..3970bf9ca818 100644 > --- a/drivers/usb/misc/usb251xb.c > +++ b/drivers/usb/misc/usb251xb.c > @@ -382,11 +382,9 @@ static void usb251xb_get_ports_field(struct usb251xb *hub, > bool ds_only, u8 *fld) > { > struct device *dev = hub->dev; > - struct property *prop; > - const __be32 *p; > u32 port; > > - of_property_for_each_u32(dev->of_node, prop_name, prop, p, port) { > + of_property_for_each_u32(dev->of_node, prop_name, port) { > if ((port >= ds_only ? 1 : 0) && (port <= port_cnt)) > *fld |= BIT(port); > else > diff --git a/include/linux/of.h b/include/linux/of.h > index a0bedd038a05..13ad808bb8f7 100644 > --- a/include/linux/of.h > +++ b/include/linux/of.h > @@ -430,11 +430,9 @@ extern int of_detach_node(struct device_node *); > #define of_match_ptr(_ptr) (_ptr) > > /* > - * struct property *prop; > - * const __be32 *p; > * u32 u; > * > - * of_property_for_each_u32(np, "propname", prop, p, u) > + * of_property_for_each_u32(np, "propname", u) > * printk("U32 value: %x\n", u); > */ > const __be32 *of_prop_next_u32(struct property *prop, const __be32 *cur, > @@ -1431,11 +1429,12 @@ static inline int of_property_read_s32(const struct device_node *np, > err == 0; \ > err = of_phandle_iterator_next(it)) > > -#define of_property_for_each_u32(np, propname, prop, p, u) \ > - for (prop = of_find_property(np, propname, NULL), \ > - p = of_prop_next_u32(prop, NULL, &u); \ > - p; \ > - p = of_prop_next_u32(prop, p, &u)) > +#define of_property_for_each_u32(np, propname, u) \ > + for (struct {struct property *prop; const __be32 *item; } _it = \ > + {of_find_property(np, propname, NULL), \ > + of_prop_next_u32(_it.prop, NULL, &u)}; \ > + _it.item; \ > + _it.item = of_prop_next_u32(_it.prop, _it.item, &u)) > > #define of_property_for_each_string(np, propname, prop, s) \ > for (prop = of_find_property(np, propname, NULL), \ > diff --git a/sound/soc/codecs/arizona.c b/sound/soc/codecs/arizona.c > index 7434aeeda292..402b9a2ff024 100644 > --- a/sound/soc/codecs/arizona.c > +++ b/sound/soc/codecs/arizona.c > @@ -2786,15 +2786,13 @@ int arizona_of_get_audio_pdata(struct arizona *arizona) > { > struct arizona_pdata *pdata = &arizona->pdata; > struct device_node *np = arizona->dev->of_node; > - struct property *prop; > - const __be32 *cur; > u32 val; > u32 pdm_val[ARIZONA_MAX_PDM_SPK]; > int ret; > int count = 0; > > count = 0; > - of_property_for_each_u32(np, "wlf,inmode", prop, cur, val) { > + of_property_for_each_u32(np, "wlf,inmode", val) { > if (count == ARRAY_SIZE(pdata->inmode)) > break; > > @@ -2803,7 +2801,7 @@ int arizona_of_get_audio_pdata(struct arizona *arizona) > } > > count = 0; > - of_property_for_each_u32(np, "wlf,dmic-ref", prop, cur, val) { > + of_property_for_each_u32(np, "wlf,dmic-ref", val) { > if (count == ARRAY_SIZE(pdata->dmic_ref)) > break; > > @@ -2812,7 +2810,7 @@ int arizona_of_get_audio_pdata(struct arizona *arizona) > } > > count = 0; > - of_property_for_each_u32(np, "wlf,out-mono", prop, cur, val) { > + of_property_for_each_u32(np, "wlf,out-mono", val) { > if (count == ARRAY_SIZE(pdata->out_mono)) > break; > > @@ -2821,7 +2819,7 @@ int arizona_of_get_audio_pdata(struct arizona *arizona) > } > > count = 0; > - of_property_for_each_u32(np, "wlf,max-channels-clocked", prop, cur, val) { > + of_property_for_each_u32(np, "wlf,max-channels-clocked", val) { > if (count == ARRAY_SIZE(pdata->max_channels_clocked)) > break; > > @@ -2830,7 +2828,7 @@ int arizona_of_get_audio_pdata(struct arizona *arizona) > } > > count = 0; > - of_property_for_each_u32(np, "wlf,out-volume-limit", prop, cur, val) { > + of_property_for_each_u32(np, "wlf,out-volume-limit", val) { > if (count == ARRAY_SIZE(pdata->out_vol_limit)) > break; > > > --- > base-commit: d2f2d929511d092e52f9e50371f8da76d8979a82 > change-id: 20240701-of_property_for_each_u32-460fd02a5d0c > > Best regards, > -- > Luca Ceresoli > -- Lee Jones [李琼斯] From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 0B39EC3DA49 for ; Thu, 25 Jul 2024 07:57:28 +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=NQTxkWXqQZIq5OUvO7Nfrqp/quct99UpHdKItXBMlZQ=; b=FR6McS0KKoAEAB 8n6Xpx0NF/P9DxX/PMfBynv3vLv91HooSaWUaCuXe3tz58JjorjoVrlrCcMlTIK27BZRPml2E7Y0V MmpVWj/oicJgzgpKUtQRDg1LKBD09MP1c6A7PQOdCnhpiSvMytQSUiKKdUapzvdUOQTzG78Y8BJi4 mMs+zJHAngPleNeLM1yPgxyROFoAkZzTF8wAKGX68KamEcTt0syoDhyTZhKDkTt0nSX/IQkbSN8lX uoZca7rdisz3P7+S1RlaPVYcbLxRBDMU7SdmnYk5UHk5mo3+2T8/X1DoUjSqweakoErbRly8pUc73 GyCgWG9V9WhrUYyLL5fg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sWtLo-00000000Fqb-1HaR; Thu, 25 Jul 2024 07:57:24 +0000 Received: from sin.source.kernel.org ([145.40.73.55]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sWtLi-00000000Fom-36XF; Thu, 25 Jul 2024 07:57:21 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id 57319CE12FD; Thu, 25 Jul 2024 07:57:16 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7822EC116B1; Thu, 25 Jul 2024 07:57:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721894235; bh=aNT0Q8oUAbpUZefrt7kBTZ31CMHmKs1m1fqrVLLhAIw=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=IP+uKluKRukNdkh+oVMOB/AMShcQVRUnyz3CBLhB4gC301qpppVezztuKaAhD3Khb WDQpv1DtEd1psmMaDZae3rfyUgsuiKAJGqmo7L7xvttWRU9p8ODN2XimURCAIp/82W ycSmoL1LJx6brCvXVPCkcmrTpd9XDeFov3nwvZWcS/la5SN6nizx1S02yJnDAmyxcw TotDkVJ1OqkZCLHpxQlilIC2emvOeolAy1qcNsddJgoR9ownUvAaBrvEqmpoVK/llw ljo70nbIB6XsziQ4qGbqbJyLE0+8VTF+rsdErVgu0YXdTzpsgAGQ1panNtaK2kJKNT GVbwGYJFFV1UQ== Date: Thu, 25 Jul 2024 08:56:58 +0100 From: Lee Jones To: Luca Ceresoli Cc: Miguel Ojeda , Rob Herring , Saravana Kannan , Nathan Chancellor , Michael Turquette , Stephen Boyd , Tony Lindgren , Bjorn Andersson , Emilio =?iso-8859-1?Q?L=F3pez?= , Chen-Yu Tsai , Jernej Skrabec , Samuel Holland , Krzysztof Kozlowski , Daniel Lezcano , Thomas Gleixner , Florian Fainelli , Broadcom internal kernel review list , Linus Walleij , Bartosz Golaszewski , Jonathan Cameron , Shawn Guo , Pengutronix Kernel Team , Uwe =?iso-8859-1?Q?Kleine-K=F6nig?= , Greg Kroah-Hartman , Jiri Slaby , Richard Leitner , Liam Girdwood , Mark Brown , Nicolas Ferre , Michael Ellerman , Nicholas Piggin , Christophe Leroy , "Naveen N. Rao" , Damien Le Moal , Aaro Koskinen , Andreas Kemnade , Kevin Hilman , Roger Quadros , Alim Akhtar , Doug Berger , Lars-Peter Clausen , Alexandre Belloni , Claudiu Beznea , Chester Lin , Matthias Brugger , Ghennadi Procopciuc , Dong Aisheng , Fabio Estevam , Jacky Bai , Jaroslav Kysela , Takashi Iwai , "Peng Fan (OSS)" , Thomas Petazzoni , linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, llvm@lists.linux.dev, linux-clk@vger.kernel.org, linux-omap@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-samsung-soc@vger.kernel.org, linux-gpio@vger.kernel.org, linux-iio@vger.kernel.org, linux-pwm@vger.kernel.org, linux-serial@vger.kernel.org, linux-usb@vger.kernel.org, patches@opensource.cirrus.com, linux-sound@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-riscv@lists.infradead.org, Andre Przywara , Bartosz Golaszewski , Jonathan Cameron , Uwe =?iso-8859-1?Q?Kleine-K=F6nig?= , Richard Fitzgerald Subject: Re: [PATCH v3] of: remove internal arguments from of_property_for_each_u32() Message-ID: <20240725075658.GB501857@google.com> References: <20240724-of_property_for_each_u32-v3-1-bea82ce429e2@bootlin.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20240724-of_property_for_each_u32-v3-1-bea82ce429e2@bootlin.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240725_005719_206218_9FE89158 X-CRM114-Status: GOOD ( 52.60 ) X-BeenThere: linux-riscv@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-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org T24gV2VkLCAyNCBKdWwgMjAyNCwgTHVjYSBDZXJlc29saSB3cm90ZToKCj4gVGhlIG9mX3Byb3Bl cnR5X2Zvcl9lYWNoX3UzMigpIG1hY3JvIG5lZWRzIGZpdmUgcGFyYW1ldGVycywgdHdvIG9mIHdo aWNoCj4gYXJlIHByaW1hcmlseSBtZWFudCBhcyBpbnRlcm5hbCB2YXJpYWJsZXMgZm9yIHRoZSBt YWNybyBpdHNlbGYgKGluIHRoZQo+IGZvcigpIGNsYXVzZSkuIFlldCB0aGVzZSB0d28gcGFyYW1l dGVycyBhcmUgdXNlZCBieSBhIGZldyBkcml2ZXJzLCBhbmQgdGhpcwo+IGNhbiBiZSBjb25zaWRl cmVkIG1pc3VzZSBvciBhdCBsZWFzdCBiYWQgcHJhY3RpY2UuCj4gCj4gTm93IHRoYXQgdGhlIGtl cm5lbCB1c2VzIEMxMSB0byBidWlsZCwgdGhlc2UgdHdvIHBhcmFtZXRlcnMgY2FuIGJlIGF2b2lk ZWQKPiBieSBkZWNsYXJpbmcgdGhlbSBpbnRlcm5hbGx5LCB0aHVzIGNoYW5naW5nIHRoaXMgcGF0 dGVybjoKPiAKPiAgIHN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKPiAgIGNvbnN0IF9fYmUzMiAqcDsK PiAgIHUzMiB2YWw7Cj4gCj4gICBvZl9wcm9wZXJ0eV9mb3JfZWFjaF91MzIobnAsICJ4eXoiLCBw cm9wLCBwLCB2YWwpIHsgLi4uIH0KPiAKPiB0byB0aGlzOgo+IAo+ICAgdTMyIHZhbDsKPiAKPiAg IG9mX3Byb3BlcnR5X2Zvcl9lYWNoX3UzMihucCwgInh5eiIsIHZhbCkgeyAuLi4gfQo+IAo+IEhv d2V2ZXIgdHdvIHZhcmlhYmxlcyBjYW5ub3QgYmUgZGVjbGFyZWQgaW4gdGhlIGZvciBjbGF1c2Ug ZXZlbiB3aXRoIEMxMSwKPiBzbyBkZWNsYXJlIG9uZSBzdHJ1Y3QgdGhhdCBjb250YWluIHRoZSB0 d28gdmFyaWFibGVzIHdlIGFjdHVhbGx5IG5lZWQuIEFzCj4gdGhlIHZhcmlhYmxlcyBpbnNpZGUg dGhpcyBzdHJ1Y3QgYXJlIG5vdCBtZWFudCB0byBiZSB1c2VkIGJ5IHVzZXJzIG9mIHRoaXMKPiBt YWNybywgZ2l2ZSB0aGUgc3RydWN0IGluc3RhbmNlIHRoZSBub3RpY2VhYmxlIG5hbWUgIl9pdCIg c28gaXQgaXMgdmlzaWJsZQo+IGR1cmluZyBjb2RlIHJldmlld3MsIGhlbHBpbmcgdG8gYXZvaWQg bmV3IGNvZGUgdG8gdXNlIGl0IGRpcmVjdGx5Lgo+IAo+IE1vc3QgdXNhZ2VzIGFyZSB0cml2aWFs bHkgY29udmVydGVkIGFzIHRoZXkgZG8gbm90IHVzZSB0aG9zZSB0d28KPiBwYXJhbWV0ZXJzLCBh cyBleHBlY3RlZC4gVGhlIG5vbi10cml2aWFsIGNhc2VzIGFyZToKPiAKPiAgLSBkcml2ZXJzL2Ns ay9jbGsuYywgb2ZfY2xrX2dldF9wYXJlbnRfbmFtZSgpOiBlYXNpbHkgZG9hYmxlIGFueXdheQo+ ICAtIGRyaXZlcnMvY2xrL2Nsay1zaTUzNTEuYywgc2k1MzUxX2R0X3BhcnNlKCk6IHRoaXMgaXMg bW9yZSBjb21wbGV4IGFzIHRoZQo+ICAgIGNoZWNrcyBoYWQgdG8gYmUgcmVwbGljYXRlZCBpbiBh IGRpZmZlcmVudCB3YXksIG1ha2luZyBjb2RlIG1vcmUgdmVyYm9zZQo+ICAgIGFuZCBzb21ld2hh dCB1Z2xpZXIsIGJ1dCBJIHJlZnJhaW5lZCBmcm9tIGEgZnVsbCByZXdvcmsgdG8ga2VlcCBhcyBt dWNoCj4gICAgb2YgdGhlIG9yaWdpbmFsIGNvZGUgdW50b3VjaGVkIGhhdmluZyBubyBoYXJkd2Fy ZSB0byB0ZXN0IG15IGNoYW5nZXMKPiAKPiBBbGwgdGhlIGNoYW5nZXMgaGF2ZSBiZWVuIGJ1aWxk IHRlc3RlZC4gVGhlIGZldyBmb3Igd2hpY2ggSSBoYXZlIHRoZQo+IGhhcmR3YXJlIGhhdmUgYmVl biBydW50aW1lLXRlc3RlZCB0b28uCj4gCj4gUmV2aWV3ZWQtYnk6IEFuZHJlIFByenl3YXJhIDxh bmRyZS5wcnp5d2FyYUBhcm0uY29tPiAjIGRyaXZlcnMvY2xrL3N1bnhpL2Nsay1zaW1wbGUtZ2F0 ZXMuYywgZHJpdmVycy9jbGsvc3VueGkvY2xrLXN1bjhpLWJ1cy1nYXRlcy5jCj4gQWNrZWQtYnk6 IEJhcnRvc3ogR29sYXN6ZXdza2kgPGJhcnRvc3ouZ29sYXN6ZXdza2lAbGluYXJvLm9yZz4gIyBk cml2ZXJzL2dwaW8vZ3Bpby1icmNtc3RiLmMKPiBBY2tlZC1ieTogTmljb2xhcyBGZXJyZSA8bmlj b2xhcy5mZXJyZUBtaWNyb2NoaXAuY29tPiAjIGRyaXZlcnMvaXJxY2hpcC9pcnEtYXRtZWwtYWlj LWNvbW1vbi5jCj4gQWNrZWQtYnk6IEpvbmF0aGFuIENhbWVyb24gPEpvbmF0aGFuLkNhbWVyb25A aHVhd2VpLmNvbT4gIyBkcml2ZXJzL2lpby9hZGMvdGlfYW0zMzV4X2FkYy5jCj4gQWNrZWQtYnk6 IFV3ZSBLbGVpbmUtS8O2bmlnIDx1LmtsZWluZS1rb2VuaWdAYmF5bGlicmUuY29tPiAjIGRyaXZl cnMvcHdtL3B3bS1zYW1zdW5nLmMKPiBBY2tlZC1ieTogUmljaGFyZCBMZWl0bmVyIDxyaWNoYXJk LmxlaXRuZXJAbGludXguZGV2PiAjIGRyaXZlcnMvdXNiL21pc2MvdXNiMjUxeGIuYwo+IEFja2Vk LWJ5OiBNYXJrIEJyb3duIDxicm9vbmllQGtlcm5lbC5vcmc+ICMgc291bmQvc29jL2NvZGVjcy9h cml6b25hLmMKPiBSZXZpZXdlZC1ieTogUmljaGFyZCBGaXR6Z2VyYWxkIDxyZkBvcGVuc291cmNl LmNpcnJ1cy5jb20+ICMgc291bmQvc29jL2NvZGVjcy9hcml6b25hLmMKPiBBY2tlZC1ieTogTWlj aGFlbCBFbGxlcm1hbiA8bXBlQGVsbGVybWFuLmlkLmF1PiAjIGFyY2gvcG93ZXJwYy9zeXNkZXYv eGl2ZS9zcGFwci5jCj4gQWNrZWQtYnk6IFN0ZXBoZW4gQm95ZCA8c2JveWRAa2VybmVsLm9yZz4g IyBjbGsKPiBTaWduZWQtb2ZmLWJ5OiBMdWNhIENlcmVzb2xpIDxsdWNhLmNlcmVzb2xpQGJvb3Rs aW4uY29tPgo+IC0tLQo+IFtOb3RlOiB0byByZWR1Y2UgdGhlIG5vaXNlIEkgaGF2ZSB0cmltbWVk IHRoZSBnZXRfbWFpbnRhaW5lcnMgbGlzdAo+IG1hbnVhbGx5LiBTaG91bGQgeW91IHdhbnQgdG8g YmUgcmVtb3ZlZCwgb3Igc29tZW9uZSBlbHNlIGFkZGVkLCB0byBmdXR1cmUKPiB2ZXJzaW9ucywg anVzdCB0ZWxsIG1lLiBTb3JyeSBmb3IgdGhlIG5vaXNlLl0KPiAKPiBUaGlzIHNlcmllcyBhaW1z IGF0IHNpbXBsaWZ5aW5nIG9mX3Byb3BlcnR5X2Zvcl9lYWNoX3UzMigpIGFzIHdlbGwgYXMKPiBt YWtpbmcgaXQgbW9yZSBkaWZmaWN1bHQgdG8gbWlzdXNlIGl0IGluIHRoZSBmdXR1cmUuCj4gCj4g VGhlIGxvbmctdGVybSBnb2FsIGlzIGNoYW5naW5nIHRoaXMgcGF0dGVybjoKPiAKPiAgIHN0cnVj dCBwcm9wZXJ0eSAqcHJvcDsKPiAgIGNvbnN0IF9fYmUzMiAqcDsKPiAgIHUzMiB2YWw7Cj4gIAo+ ICAgb2ZfcHJvcGVydHlfZm9yX2VhY2hfdTMyKG5wLCAieHl6IiwgcHJvcCwgcCwgdmFsKSB7IC4u LiB9Cj4gCj4gdG8gdGhpczoKPiAKPiAgIHUzMiB2YWw7Cj4gCj4gICBvZl9wcm9wZXJ0eV9mb3Jf ZWFjaF91MzIobnAsICJ4eXoiLCB2YWwpIHsgLi4uIH0KPiAKPiBTbywgcmVtb3ZpbmcgdGhlIDNy ZCBhbmQgNHRoIGFyZ3VtZW50cyB3aGljaCBhcmUgdHlwaWNhbGx5IG1lYW50IHRvIGJlCj4gaW50 ZXJuYWwuIFRob3NlIHR3byBwYXJhbWV0ZXJzIHVzZWQgdG8gYmUgdW5hdm9pZGFibGUgdW50aWwg dGhlIGtlcm5lbAo+IG1vdmVkIHRvIGJ1aWxkaW5nIHdpdGggdGhlIEMxMSBzdGFuZGFyZCB1bmNv bmRpdGlvbmFsbHkuIFNpbmNlIHRoZW4sIGl0IGlzCj4gbm93IHBvc3NpYmxlIHRvIGdldCByaWQg b2YgdGhlbS4gSG93ZXZlciBhIGZldyB1c2VycyBvZgo+IG9mX3Byb3BlcnR5X2Zvcl9lYWNoX3Uz MigpIGRvIGFjdHVhbGx5IHVzZSB0aG9zZSBhcmd1bWVudHMsIHdoaWNoCj4gY29tcGxpY2F0ZXMg dGhlIHRyYW5zaXRpb24uIEZvciB0aGlzIHJlYXNvbiB0aGlzIHNlcmllcyBkb2VzIHRoZSBmb2xs b3dpbmc6Cj4gCj4gICogQWRkIG9mX3Byb3BlcnR5X2Zvcl9lYWNoX3UzMl9uZXcoKSwgd2hpY2gg ZG9lcyBub3QgaGF2ZSB0aG9zZSB0d28KPiAgICBhcmd1bWVudHMgKHBhdGNoIDEpCj4gICogQ29u dmVydCBfYWxtb3N0XyBldmVyeSB1c2FnZSB0byBvZl9wcm9wZXJ0eV9mb3JfZWFjaF91MzJfbmV3 KCkKPiAgKiBSZW5hbWUgb2ZfcHJvcGVydHlfZm9yX2VhY2hfdTMyKCkgdG8gb2ZfcHJvcGVydHlf Zm9yX2VhY2hfdTMyX29sZCgpIGFuZAo+ICAgIGRlcHJlY2F0ZSBpdCwgYXMgYSBpbmNlbnRpdmUg dG8gY29kZSBub3QgKHlldCkgaW4gbWFpbmxpbmUgdG8gdXBncmFkZQo+ICAgIHRvIHRoZSAqX25l dygpIHZlcnNpb24gKGxhc3QgcGF0Y2gpCj4gCj4gVGhlIHBsYW4gZm9yIHRoZSBuZXh0IHNlcmll cyBpcyB0byBhZGRpdGlvbmFsbHk6Cj4gCj4gICogQ29udmVydCB0aGUgZmV3IHJlbWFpbmluZyBv Zl9wcm9wZXJ0eV9mb3JfZWFjaF91MzJfb2xkKCkgaW5zdGFudGVzIHRvCj4gICAgb2ZfcHJvcGVy dHlfZm9yX2VhY2hfdTMyX25ldygpCj4gICogUmVtb3ZlIG9mX3Byb3BlcnR5X2Zvcl9lYWNoX3Uz Ml9vbGQoKQo+ICAqIFJlbmFtZSBvZl9wcm9wZXJ0eV9mb3JfZWFjaF91MzJfbmV3KCkgdG8gb2Zf cHJvcGVydHlfZm9yX2VhY2hfdTMyKCkKPiAtLS0KPiBDaGFuZ2VzIGluIHYzOgo+IC0gTGluayB0 byB2MjogaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvci8yMDI0MDcxNy1vZl9wcm9wZXJ0eV9mb3Jf ZWFjaF91MzItdjItMS00MDYwOTkwZjQ5YzlAYm9vdGxpbi5jb20KPiAKPiBDaGFuZ2VzIGluIHYy Ogo+IC0gTGluayB0byB2MTogaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvci8yMDI0MDcwMy1vZl9w cm9wZXJ0eV9mb3JfZWFjaF91MzItdjEtMC00MmMxZmMwYjgyYWFAYm9vdGxpbi5jb20KPiAtLS0K PiAKPiBDaGFuZ2VkIGluIHYzOgo+ICAtIGFkZCBtaXNzaW5nIG5ld2xpbmVzIHRvIHByaW50ayBz dHJpbmdzCj4gIC0gTGluayB0byB2MjogaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvci8yMDI0MDcx Ny1vZl9wcm9wZXJ0eV9mb3JfZWFjaF91MzItdjItMS00MDYwOTkwZjQ5YzlAYm9vdGxpbi5jb20K PiAKPiBOb3RlISBJIGhhdmUgY2FycmllZCB0aGUgYWNrL3JldmlldyB0YWdzIHJlY2VpdmVkIG9u IHYxLCBidXQgc2luY2UgdGhvc2UKPiB3ZXJlIG9uIGluZGl2aWR1YWwsIHBlci1kcml2ZXIgcGF0 Y2hlcyBJIGNhbm5vdCBjbGFpbSB0aGUgYXBwcm92ZSB0aGUgd2hvbGUKPiB3b3JrLiBTbyBJIGhh dmUgYWRkZWQgdGhlIHNwZWNpZmljIGZpbGUgdGhhdCB3YXMgYWNrZWQuIEZvciB0aG9zZSB3aG8K PiByZXZpZXdlZCB2MSAodGhhbmtzISksIEknbGwgYXNzdW1lIHRoYXQncyBPSyB1bmxlc3MgeW91 IHRlbGwgb3RoZXJ3aXNlLgo+IAo+IENoYW5nZWQgaW4gdjI6Cj4gIC0gc3F1YXNoZWQgaW50byBh IHNpbmdsZSBwYXRjaCBhcyBzdWdnZXN0ZWQgYnkgUm9iCj4gICAgLSBzbyBfbmV3IGFuZCBfb2xk IG1hY3JvcyBkbyBub3QgYXBwZWFyIGFueW1vcmUKPiAgICAtIGFkZGVkIHRvIFRvL0NjIGFsbCBu YW1lcyByZXBvcnRlZCBieSBnZXRfbWFpbnRhaW5lcnMgaW5zdGVhZCBvZgo+ICAgICAgdHJpbW1p bmcgYXMgSSBkaWQgZm9yIHYxCj4gIC0gY29udmVydGVkIHRoZSBmZXcgdXNlcnMgbm90IHlldCBj b252ZXJ0ZWQgaW4gdjEKPiAgLSBpbXByb3ZlIGNvbW1pdCBtZXNzYWdlCj4gIC0gTGluayB0byB2 MTogaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvci8yMDI0MDcwMy1vZl9wcm9wZXJ0eV9mb3JfZWFj aF91MzItdjEtMC00MmMxZmMwYjgyYWFAYm9vdGxpbi5jb20KPiAtLS0KPiAgYXJjaC9wb3dlcnBj L3N5c2Rldi94aXZlL25hdGl2ZS5jICAgICAgIHwgIDQgKy0tCj4gIGFyY2gvcG93ZXJwYy9zeXNk ZXYveGl2ZS9zcGFwci5jICAgICAgICB8ICAzICstLQo+ICBkcml2ZXJzL2J1cy90aS1zeXNjLmMg ICAgICAgICAgICAgICAgICAgfCAgNCArLS0KPiAgZHJpdmVycy9jbGsvY2xrLWNvbmYuYyAgICAg ICAgICAgICAgICAgIHwgIDQgKy0tCj4gIGRyaXZlcnMvY2xrL2Nsay1zaTUzNTEuYyAgICAgICAg ICAgICAgICB8IDQzICsrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQo+ICBkcml2ZXJz L2Nsay9jbGsuYyAgICAgICAgICAgICAgICAgICAgICAgfCAxMiArKysrLS0tLS0KPiAgZHJpdmVy cy9jbGsvcWNvbS9jb21tb24uYyAgICAgICAgICAgICAgIHwgIDQgKy0tCj4gIGRyaXZlcnMvY2xr L3N1bnhpL2Nsay1zaW1wbGUtZ2F0ZXMuYyAgICB8ICA0ICstLQo+ICBkcml2ZXJzL2Nsay9zdW54 aS9jbGstc3VuOGktYnVzLWdhdGVzLmMgfCAgNCArLS0KPiAgZHJpdmVycy9jbG9ja3NvdXJjZS9z YW1zdW5nX3B3bV90aW1lci5jIHwgIDQgKy0tCj4gIGRyaXZlcnMvZ3Bpby9ncGlvLWJyY21zdGIu YyAgICAgICAgICAgICB8ICA1ICstLS0KPiAgZHJpdmVycy9paW8vYWRjL3RpX2FtMzM1eF9hZGMu YyAgICAgICAgIHwgIDQgKy0tCj4gIGRyaXZlcnMvaXJxY2hpcC9pcnEtYXRtZWwtYWljLWNvbW1v bi5jICB8ICA0ICstLQo+ICBkcml2ZXJzL2lycWNoaXAvaXJxLXBpYzMyLWV2aWMuYyAgICAgICAg fCAgNCArLS0KCj4gIGRyaXZlcnMvbWZkL3RpX2FtMzM1eF90c2NhZGMuYyAgICAgICAgICB8ICA0 ICstLQoKQWNrZWQtYnk6IExlZSBKb25lcyA8bGVlQGtlcm5lbC5vcmc+Cgo+ICBkcml2ZXJzL3Bp bmN0cmwvbnhwL3BpbmN0cmwtczMyY2MuYyAgICAgfCAgNCArLS0KPiAgZHJpdmVycy9waW5jdHJs L3BpbmN0cmwtazIxMC5jICAgICAgICAgIHwgIDQgKy0tCj4gIGRyaXZlcnMvcHdtL3B3bS1zYW1z dW5nLmMgICAgICAgICAgICAgICB8ICA0ICstLQo+ICBkcml2ZXJzL3R0eS9zeXNycS5jICAgICAg ICAgICAgICAgICAgICAgfCAgNCArLS0KPiAgZHJpdmVycy91c2IvbWlzYy91c2IyNTF4Yi5jICAg ICAgICAgICAgIHwgIDQgKy0tCj4gIGluY2x1ZGUvbGludXgvb2YuaCAgICAgICAgICAgICAgICAg ICAgICB8IDE1ICsrKysrKy0tLS0tLQo+ICBzb3VuZC9zb2MvY29kZWNzL2FyaXpvbmEuYyAgICAg ICAgICAgICAgfCAxMiArKysrLS0tLS0KPiAgMjIgZmlsZXMgY2hhbmdlZCwgNjEgaW5zZXJ0aW9u cygrKSwgOTMgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNk ZXYveGl2ZS9uYXRpdmUuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYveGl2ZS9uYXRpdmUuYwo+IGlu ZGV4IDUxN2I5NjNlM2U2YS4uYTA5MzRiNTE2OTMzIDEwMDY0NAo+IC0tLSBhL2FyY2gvcG93ZXJw Yy9zeXNkZXYveGl2ZS9uYXRpdmUuYwo+ICsrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYveGl2ZS9u YXRpdmUuYwo+IEBAIC01NTksOSArNTU5LDcgQEAgYm9vbCBfX2luaXQgeGl2ZV9uYXRpdmVfaW5p dCh2b2lkKQo+ICAJc3RydWN0IGRldmljZV9ub2RlICpucDsKPiAgCXN0cnVjdCByZXNvdXJjZSBy Owo+ICAJdm9pZCBfX2lvbWVtICp0aW1hOwo+IC0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOwo+ICAJ dTggbWF4X3ByaW8gPSA3Owo+IC0JY29uc3QgX19iZTMyICpwOwo+ICAJdTMyIHZhbCwgY3B1Owo+ ICAJczY0IHJjOwo+ICAKPiBAQCAtNTkyLDcgKzU5MCw3IEBAIGJvb2wgX19pbml0IHhpdmVfbmF0 aXZlX2luaXQodm9pZCkKPiAgCQltYXhfcHJpbyA9IHZhbCAtIDE7Cj4gIAo+ICAJLyogSXRlcmF0 ZSB0aGUgRVEgc2l6ZXMgYW5kIHBpY2sgb25lICovCj4gLQlvZl9wcm9wZXJ0eV9mb3JfZWFjaF91 MzIobnAsICJpYm0seGl2ZS1lcS1zaXplcyIsIHByb3AsIHAsIHZhbCkgewo+ICsJb2ZfcHJvcGVy dHlfZm9yX2VhY2hfdTMyKG5wLCAiaWJtLHhpdmUtZXEtc2l6ZXMiLCB2YWwpIHsKPiAgCQl4aXZl X3F1ZXVlX3NoaWZ0ID0gdmFsOwo+ICAJCWlmICh2YWwgPT0gUEFHRV9TSElGVCkKPiAgCQkJYnJl YWs7Cj4gZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYveGl2ZS9zcGFwci5jIGIvYXJj aC9wb3dlcnBjL3N5c2Rldi94aXZlL3NwYXByLmMKPiBpbmRleCBlNDU0MTkyNjQzOTEuLmYyZmE5 ODVhMmM3NyAxMDA2NDQKPiAtLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3hpdmUvc3BhcHIuYwo+ ICsrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYveGl2ZS9zcGFwci5jCj4gQEAgLTgxNCw3ICs4MTQs NiBAQCBib29sIF9faW5pdCB4aXZlX3NwYXByX2luaXQodm9pZCkKPiAgCXN0cnVjdCBkZXZpY2Vf bm9kZSAqbnA7Cj4gIAlzdHJ1Y3QgcmVzb3VyY2UgcjsKPiAgCXZvaWQgX19pb21lbSAqdGltYTsK PiAtCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKPiAgCXU4IG1heF9wcmlvOwo+ICAJdTMyIHZhbDsK PiAgCXUzMiBsZW47Cj4gQEAgLTg2Niw3ICs4NjUsNyBAQCBib29sIF9faW5pdCB4aXZlX3NwYXBy X2luaXQodm9pZCkKPiAgCX0KPiAgCj4gIAkvKiBJdGVyYXRlIHRoZSBFUSBzaXplcyBhbmQgcGlj ayBvbmUgKi8KPiAtCW9mX3Byb3BlcnR5X2Zvcl9lYWNoX3UzMihucCwgImlibSx4aXZlLWVxLXNp emVzIiwgcHJvcCwgcmVnLCB2YWwpIHsKPiArCW9mX3Byb3BlcnR5X2Zvcl9lYWNoX3UzMihucCwg ImlibSx4aXZlLWVxLXNpemVzIiwgdmFsKSB7Cj4gIAkJeGl2ZV9xdWV1ZV9zaGlmdCA9IHZhbDsK PiAgCQlpZiAodmFsID09IFBBR0VfU0hJRlQpCj4gIAkJCWJyZWFrOwo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2J1cy90aS1zeXNjLmMgYi9kcml2ZXJzL2J1cy90aS1zeXNjLmMKPiBpbmRleCA4NzY3 ZTA0ZDZjODkuLjJiNTllZjYxZGRhMiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2J1cy90aS1zeXNj LmMKPiArKysgYi9kcml2ZXJzL2J1cy90aS1zeXNjLmMKPiBAQCAtMjI5MSwxMSArMjI5MSw5IEBA IHN0YXRpYyBpbnQgc3lzY19pbml0X2lkbGVtb2RlKHN0cnVjdCBzeXNjICpkZGF0YSwgdTggKmlk bGVtb2RlcywKPiAgCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSkKPiAgewo+ICAJc3RydWN0IGRl dmljZV9ub2RlICpucCA9IGRkYXRhLT5kZXYtPm9mX25vZGU7Cj4gLQlzdHJ1Y3QgcHJvcGVydHkg KnByb3A7Cj4gLQljb25zdCBfX2JlMzIgKnA7Cj4gIAl1MzIgdmFsOwo+ICAKPiAtCW9mX3Byb3Bl cnR5X2Zvcl9lYWNoX3UzMihucCwgbmFtZSwgcHJvcCwgcCwgdmFsKSB7Cj4gKwlvZl9wcm9wZXJ0 eV9mb3JfZWFjaF91MzIobnAsIG5hbWUsIHZhbCkgewo+ICAJCWlmICh2YWwgPj0gU1lTQ19OUl9J RExFTU9ERVMpIHsKPiAgCQkJZGV2X2VycihkZGF0YS0+ZGV2LCAiaW52YWxpZCBpZGxlbW9kZTog JWlcbiIsIHZhbCk7Cj4gIAkJCXJldHVybiAtRUlOVkFMOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2Nsay9jbGstY29uZi5jIGIvZHJpdmVycy9jbGsvY2xrLWNvbmYuYwo+IGluZGV4IDFhNGU2MzQw Zjk1Yy4uMDU4NDIwNTYyMDIwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvY2xrL2Nsay1jb25mLmMK PiArKysgYi9kcml2ZXJzL2Nsay9jbGstY29uZi5jCj4gQEAgLTgxLDEzICs4MSwxMSBAQCBzdGF0 aWMgaW50IF9fc2V0X2Nsa19wYXJlbnRzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwgYm9vbCBj bGtfc3VwcGxpZXIpCj4gIHN0YXRpYyBpbnQgX19zZXRfY2xrX3JhdGVzKHN0cnVjdCBkZXZpY2Vf bm9kZSAqbm9kZSwgYm9vbCBjbGtfc3VwcGxpZXIpCj4gIHsKPiAgCXN0cnVjdCBvZl9waGFuZGxl X2FyZ3MgY2xrc3BlYzsKPiAtCXN0cnVjdCBwcm9wZXJ0eQkqcHJvcDsKPiAtCWNvbnN0IF9fYmUz MiAqY3VyOwo+ICAJaW50IHJjLCBpbmRleCA9IDA7Cj4gIAlzdHJ1Y3QgY2xrICpjbGs7Cj4gIAl1 MzIgcmF0ZTsKPiAgCj4gLQlvZl9wcm9wZXJ0eV9mb3JfZWFjaF91MzIobm9kZSwgImFzc2lnbmVk LWNsb2NrLXJhdGVzIiwgcHJvcCwgY3VyLCByYXRlKSB7Cj4gKwlvZl9wcm9wZXJ0eV9mb3JfZWFj aF91MzIobm9kZSwgImFzc2lnbmVkLWNsb2NrLXJhdGVzIiwgcmF0ZSkgewo+ICAJCWlmIChyYXRl KSB7Cj4gIAkJCXJjID0gb2ZfcGFyc2VfcGhhbmRsZV93aXRoX2FyZ3Mobm9kZSwgImFzc2lnbmVk LWNsb2NrcyIsCj4gIAkJCQkJIiNjbG9jay1jZWxscyIsCWluZGV4LCAmY2xrc3BlYyk7Cj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvY2xrL2Nsay1zaTUzNTEuYyBiL2RyaXZlcnMvY2xrL2Nsay1zaTUz NTEuYwo+IGluZGV4IDRjZTgzYzUyNjViOC4uYTRjOTJjNWVmM2ZmIDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvY2xrL2Nsay1zaTUzNTEuYwo+ICsrKyBiL2RyaXZlcnMvY2xrL2Nsay1zaTUzNTEuYwo+ IEBAIC0xMTc1LDggKzExNzUsOCBAQCBzdGF0aWMgaW50IHNpNTM1MV9kdF9wYXJzZShzdHJ1Y3Qg aTJjX2NsaWVudCAqY2xpZW50LAo+ICB7Cj4gIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkLCAq bnAgPSBjbGllbnQtPmRldi5vZl9ub2RlOwo+ICAJc3RydWN0IHNpNTM1MV9wbGF0Zm9ybV9kYXRh ICpwZGF0YTsKPiAtCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKPiAtCWNvbnN0IF9fYmUzMiAqcDsK PiArCXUzMiBhcnJheVs0XTsKPiArCWludCBzeiwgaTsKPiAgCWludCBudW0gPSAwOwo+ICAJdTMy IHZhbDsKPiAgCj4gQEAgLTExOTEsMjAgKzExOTEsMjQgQEAgc3RhdGljIGludCBzaTUzNTFfZHRf cGFyc2Uoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKPiAgCSAqIHByb3BlcnR5IHNpbGFicyxw bGwtc291cmNlIDogPG51bSBzcmM+LCBbPC4uPl0KPiAgCSAqIGFsbG93IHRvIHNlbGVjdGl2ZWx5 IHNldCBwbGwgc291cmNlCj4gIAkgKi8KPiAtCW9mX3Byb3BlcnR5X2Zvcl9lYWNoX3UzMihucCwg InNpbGFicyxwbGwtc291cmNlIiwgcHJvcCwgcCwgbnVtKSB7Cj4gKwlzeiA9IG9mX3Byb3BlcnR5 X3JlYWRfdmFyaWFibGVfdTMyX2FycmF5KG5wLCAic2lsYWJzLHBsbC1zb3VyY2UiLCBhcnJheSwg MiwgNCk7Cj4gKwlzeiA9IChzeiA9PSAtRUlOVkFMKSA/IDAgOiBzejsgLyogTWlzc2luZyBwcm9w ZXJ0eSBpcyBPSyAqLwo+ICsJaWYgKHN6IDwgMCkKPiArCQlyZXR1cm4gZGV2X2Vycl9wcm9iZSgm Y2xpZW50LT5kZXYsIHN6LCAiaW52YWxpZCBwbGwtc291cmNlXG4iKTsKPiArCWlmIChzeiAlIDIp Cj4gKwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoJmNsaWVudC0+ZGV2LCAtRUlOVkFMLAo+ICsJCQkJ ICAgICAibWlzc2luZyBwbGwtc291cmNlIGZvciBwbGwgJWRcbiIsIGFycmF5W3N6IC0gMV0pOwo+ ICsKPiArCWZvciAoaSA9IDA7IGkgPCBzejsgaSArPSAyKSB7Cj4gKwkJbnVtID0gYXJyYXlbaV07 Cj4gKwkJdmFsID0gYXJyYXlbaSArIDFdOwo+ICsKPiAgCQlpZiAobnVtID49IDIpIHsKPiAgCQkJ ZGV2X2VycigmY2xpZW50LT5kZXYsCj4gIAkJCQkiaW52YWxpZCBwbGwgJWQgb24gcGxsLXNvdXJj ZSBwcm9wXG4iLCBudW0pOwo+ICAJCQlyZXR1cm4gLUVJTlZBTDsKPiAgCQl9Cj4gIAo+IC0JCXAg PSBvZl9wcm9wX25leHRfdTMyKHByb3AsIHAsICZ2YWwpOwo+IC0JCWlmICghcCkgewo+IC0JCQlk ZXZfZXJyKCZjbGllbnQtPmRldiwKPiAtCQkJCSJtaXNzaW5nIHBsbC1zb3VyY2UgZm9yIHBsbCAl ZFxuIiwgbnVtKTsKPiAtCQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQkJfQo+IC0KPiAgCQlzd2l0Y2gg KHZhbCkgewo+ICAJCWNhc2UgMDoKPiAgCQkJcGRhdGEtPnBsbF9zcmNbbnVtXSA9IFNJNTM1MV9Q TExfU1JDX1hUQUw7Cj4gQEAgLTEyMzIsMTkgKzEyMzYsMjQgQEAgc3RhdGljIGludCBzaTUzNTFf ZHRfcGFyc2Uoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKPiAgCXBkYXRhLT5wbGxfcmVzZXRb MF0gPSB0cnVlOwo+ICAJcGRhdGEtPnBsbF9yZXNldFsxXSA9IHRydWU7Cj4gIAo+IC0Jb2ZfcHJv cGVydHlfZm9yX2VhY2hfdTMyKG5wLCAic2lsYWJzLHBsbC1yZXNldC1tb2RlIiwgcHJvcCwgcCwg bnVtKSB7Cj4gKwlzeiA9IG9mX3Byb3BlcnR5X3JlYWRfdmFyaWFibGVfdTMyX2FycmF5KG5wLCAi c2lsYWJzLHBsbC1yZXNldC1tb2RlIiwgYXJyYXksIDIsIDQpOwo+ICsJc3ogPSAoc3ogPT0gLUVJ TlZBTCkgPyAwIDogc3o7IC8qIE1pc3NpbmcgcHJvcGVydHkgaXMgT0sgKi8KPiArCWlmIChzeiA8 IDApCj4gKwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoJmNsaWVudC0+ZGV2LCBzeiwgImludmFsaWQg cGxsLXJlc2V0LW1vZGVcbiIpOwo+ICsJaWYgKHN6ICUgMikKPiArCQlyZXR1cm4gZGV2X2Vycl9w cm9iZSgmY2xpZW50LT5kZXYsIC1FSU5WQUwsCj4gKwkJCQkgICAgICJtaXNzaW5nIHBsbC1yZXNl dC1tb2RlIGZvciBwbGwgJWRcbiIsIGFycmF5W3N6IC0gMV0pOwo+ICsKPiArCWZvciAoaSA9IDA7 IGkgPCBzejsgaSArPSAyKSB7Cj4gKwkJbnVtID0gYXJyYXlbaV07Cj4gKwkJdmFsID0gYXJyYXlb aSArIDFdOwo+ICsKPiAgCQlpZiAobnVtID49IDIpIHsKPiAgCQkJZGV2X2VycigmY2xpZW50LT5k ZXYsCj4gIAkJCQkiaW52YWxpZCBwbGwgJWQgb24gcGxsLXJlc2V0LW1vZGUgcHJvcFxuIiwgbnVt KTsKPiAgCQkJcmV0dXJuIC1FSU5WQUw7Cj4gIAkJfQo+ICAKPiAtCQlwID0gb2ZfcHJvcF9uZXh0 X3UzMihwcm9wLCBwLCAmdmFsKTsKPiAtCQlpZiAoIXApIHsKPiAtCQkJZGV2X2VycigmY2xpZW50 LT5kZXYsCj4gLQkJCQkibWlzc2luZyBwbGwtcmVzZXQtbW9kZSBmb3IgcGxsICVkXG4iLCBudW0p Owo+IC0JCQlyZXR1cm4gLUVJTlZBTDsKPiAtCQl9Cj4gIAo+ICAJCXN3aXRjaCAodmFsKSB7Cj4g IAkJY2FzZSAwOgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9jbGsuYyBiL2RyaXZlcnMvY2xr L2Nsay5jCj4gaW5kZXggOGNjYTUyYmU5OTNmLi4yODVlZDFhZDhhMzcgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9jbGsvY2xrLmMKPiArKysgYi9kcml2ZXJzL2Nsay9jbGsuYwo+IEBAIC01MzY0LDkg KzUzNjQsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChvZl9jbGtfZ2V0X3BhcmVudF9jb3VudCk7Cj4g IGNvbnN0IGNoYXIgKm9mX2Nsa19nZXRfcGFyZW50X25hbWUoY29uc3Qgc3RydWN0IGRldmljZV9u b2RlICpucCwgaW50IGluZGV4KQo+ICB7Cj4gIAlzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzIGNsa3Nw ZWM7Cj4gLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7Cj4gIAljb25zdCBjaGFyICpjbGtfbmFtZTsK PiAtCWNvbnN0IF9fYmUzMiAqdnA7Cj4gKwlib29sIGZvdW5kID0gZmFsc2U7Cj4gIAl1MzIgcHY7 Cj4gIAlpbnQgcmM7Cj4gIAlpbnQgY291bnQ7Cj4gQEAgLTUzODMsMTUgKzUzODIsMTYgQEAgY29u c3QgY2hhciAqb2ZfY2xrX2dldF9wYXJlbnRfbmFtZShjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUg Km5wLCBpbnQgaW5kZXgpCj4gIAkvKiBpZiB0aGVyZSBpcyBhbiBpbmRpY2VzIHByb3BlcnR5LCB1 c2UgaXQgdG8gdHJhbnNmZXIgdGhlIGluZGV4Cj4gIAkgKiBzcGVjaWZpZWQgaW50byBhbiBhcnJh eSBvZmZzZXQgZm9yIHRoZSBjbG9jay1vdXRwdXQtbmFtZXMgcHJvcGVydHkuCj4gIAkgKi8KPiAt CW9mX3Byb3BlcnR5X2Zvcl9lYWNoX3UzMihjbGtzcGVjLm5wLCAiY2xvY2staW5kaWNlcyIsIHBy b3AsIHZwLCBwdikgewo+ICsJb2ZfcHJvcGVydHlfZm9yX2VhY2hfdTMyKGNsa3NwZWMubnAsICJj bG9jay1pbmRpY2VzIiwgcHYpIHsKPiAgCQlpZiAoaW5kZXggPT0gcHYpIHsKPiAgCQkJaW5kZXgg PSBjb3VudDsKPiArCQkJZm91bmQgPSB0cnVlOwo+ICAJCQlicmVhazsKPiAgCQl9Cj4gIAkJY291 bnQrKzsKPiAgCX0KPiAgCS8qIFdlIHdlbnQgb2ZmIHRoZSBlbmQgb2YgJ2Nsb2NrLWluZGljZXMn IHdpdGhvdXQgZmluZGluZyBpdCAqLwo+IC0JaWYgKHByb3AgJiYgIXZwKQo+ICsJaWYgKG9mX3By b3BlcnR5X3ByZXNlbnQoY2xrc3BlYy5ucCwgImNsb2NrLWluZGljZXMiKSAmJiAhZm91bmQpCj4g IAkJcmV0dXJuIE5VTEw7Cj4gIAo+ICAJaWYgKG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2luZGV4 KGNsa3NwZWMubnAsICJjbG9jay1vdXRwdXQtbmFtZXMiLAo+IEBAIC01NTA0LDE0ICs1NTA0LDEy IEBAIHN0YXRpYyBpbnQgcGFyZW50X3JlYWR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCj4gIGlu dCBvZl9jbGtfZGV0ZWN0X2NyaXRpY2FsKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGludCBpbmRl eCwKPiAgCQkJICAgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCj4gIHsKPiAtCXN0cnVjdCBwcm9wZXJ0 eSAqcHJvcDsKPiAtCWNvbnN0IF9fYmUzMiAqY3VyOwo+ICAJdWludDMyX3QgaWR4Owo+ICAKPiAg CWlmICghbnAgfHwgIWZsYWdzKQo+ICAJCXJldHVybiAtRUlOVkFMOwo+ICAKPiAtCW9mX3Byb3Bl cnR5X2Zvcl9lYWNoX3UzMihucCwgImNsb2NrLWNyaXRpY2FsIiwgcHJvcCwgY3VyLCBpZHgpCj4g KwlvZl9wcm9wZXJ0eV9mb3JfZWFjaF91MzIobnAsICJjbG9jay1jcml0aWNhbCIsIGlkeCkKPiAg CQlpZiAoaW5kZXggPT0gaWR4KQo+ICAJCQkqZmxhZ3MgfD0gQ0xLX0lTX0NSSVRJQ0FMOwo+ICAK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvcWNvbS9jb21tb24uYyBiL2RyaXZlcnMvY2xrL3Fj b20vY29tbW9uLmMKPiBpbmRleCA0OGY4MWUzYTVlODAuLjVhZmY5MmJmNTkxMyAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2Nsay9xY29tL2NvbW1vbi5jCj4gKysrIGIvZHJpdmVycy9jbGsvcWNvbS9j b21tb24uYwo+IEBAIC0yMjYsMTEgKzIyNiw5IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHFjb21fY2Nf cmVnaXN0ZXJfc2xlZXBfY2xrKTsKPiAgc3RhdGljIHZvaWQgcWNvbV9jY19kcm9wX3Byb3RlY3Rl ZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBxY29tX2NjICpjYykKPiAgewo+ICAJc3RydWN0 IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKPiAtCXN0cnVjdCBwcm9wZXJ0eSAqcHJv cDsKPiAtCWNvbnN0IF9fYmUzMiAqcDsKPiAgCXUzMiBpOwo+ICAKPiAtCW9mX3Byb3BlcnR5X2Zv cl9lYWNoX3UzMihucCwgInByb3RlY3RlZC1jbG9ja3MiLCBwcm9wLCBwLCBpKSB7Cj4gKwlvZl9w cm9wZXJ0eV9mb3JfZWFjaF91MzIobnAsICJwcm90ZWN0ZWQtY2xvY2tzIiwgaSkgewo+ICAJCWlm IChpID49IGNjLT5udW1fcmNsa3MpCj4gIAkJCWNvbnRpbnVlOwo+ICAKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9jbGsvc3VueGkvY2xrLXNpbXBsZS1nYXRlcy5jIGIvZHJpdmVycy9jbGsvc3VueGkv Y2xrLXNpbXBsZS1nYXRlcy5jCj4gaW5kZXggMDM5OTYyN2MyMjZhLi44NDVlZmMxZWM4MDAgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9jbGsvc3VueGkvY2xrLXNpbXBsZS1nYXRlcy5jCj4gKysrIGIv ZHJpdmVycy9jbGsvc3VueGkvY2xrLXNpbXBsZS1nYXRlcy5jCj4gQEAgLTIxLDExICsyMSw5IEBA IHN0YXRpYyB2b2lkIF9faW5pdCBzdW54aV9zaW1wbGVfZ2F0ZXNfc2V0dXAoc3RydWN0IGRldmlj ZV9ub2RlICpub2RlLAo+ICB7Cj4gIAlzdHJ1Y3QgY2xrX29uZWNlbGxfZGF0YSAqY2xrX2RhdGE7 Cj4gIAljb25zdCBjaGFyICpjbGtfcGFyZW50LCAqY2xrX25hbWU7Cj4gLQlzdHJ1Y3QgcHJvcGVy dHkgKnByb3A7Cj4gIAlzdHJ1Y3QgcmVzb3VyY2UgcmVzOwo+ICAJdm9pZCBfX2lvbWVtICpjbGtf cmVnOwo+ICAJdm9pZCBfX2lvbWVtICpyZWc7Cj4gLQljb25zdCBfX2JlMzIgKnA7Cj4gIAlpbnQg bnVtYmVyLCBpID0gMCwgajsKPiAgCXU4IGNsa19iaXQ7Cj4gIAl1MzIgaW5kZXg7Cj4gQEAgLTQ3 LDcgKzQ1LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHN1bnhpX3NpbXBsZV9nYXRlc19zZXR1cChz dHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCj4gIAlpZiAoIWNsa19kYXRhLT5jbGtzKQo+ICAJCWdv dG8gZXJyX2ZyZWVfZGF0YTsKPiAgCj4gLQlvZl9wcm9wZXJ0eV9mb3JfZWFjaF91MzIobm9kZSwg ImNsb2NrLWluZGljZXMiLCBwcm9wLCBwLCBpbmRleCkgewo+ICsJb2ZfcHJvcGVydHlfZm9yX2Vh Y2hfdTMyKG5vZGUsICJjbG9jay1pbmRpY2VzIiwgaW5kZXgpIHsKPiAgCQlvZl9wcm9wZXJ0eV9y ZWFkX3N0cmluZ19pbmRleChub2RlLCAiY2xvY2stb3V0cHV0LW5hbWVzIiwKPiAgCQkJCQkgICAg ICBpLCAmY2xrX25hbWUpOwo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvc3VueGkvY2xr LXN1bjhpLWJ1cy1nYXRlcy5jIGIvZHJpdmVycy9jbGsvc3VueGkvY2xrLXN1bjhpLWJ1cy1nYXRl cy5jCj4gaW5kZXggYjg3ZjMzMWY2M2M5Li44NDgyYWM4ZTU4OTggMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9jbGsvc3VueGkvY2xrLXN1bjhpLWJ1cy1nYXRlcy5jCj4gKysrIGIvZHJpdmVycy9jbGsv c3VueGkvY2xrLXN1bjhpLWJ1cy1nYXRlcy5jCj4gQEAgLTI0LDExICsyNCw5IEBAIHN0YXRpYyB2 b2lkIF9faW5pdCBzdW44aV9oM19idXNfZ2F0ZXNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5v ZGUpCj4gIAljb25zdCBjaGFyICpwYXJlbnRzW1BBUkVOVF9NQVhdOwo+ICAJc3RydWN0IGNsa19v bmVjZWxsX2RhdGEgKmNsa19kYXRhOwo+ICAJY29uc3QgY2hhciAqY2xrX25hbWU7Cj4gLQlzdHJ1 Y3QgcHJvcGVydHkgKnByb3A7Cj4gIAlzdHJ1Y3QgcmVzb3VyY2UgcmVzOwo+ICAJdm9pZCBfX2lv bWVtICpjbGtfcmVnOwo+ICAJdm9pZCBfX2lvbWVtICpyZWc7Cj4gLQljb25zdCBfX2JlMzIgKnA7 Cj4gIAlpbnQgbnVtYmVyLCBpOwo+ICAJdTggY2xrX2JpdDsKPiAgCWludCBpbmRleDsKPiBAQCAt NTgsNyArNTYsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc3VuOGlfaDNfYnVzX2dhdGVzX2luaXQo c3RydWN0IGRldmljZV9ub2RlICpub2RlKQo+ICAJCWdvdG8gZXJyX2ZyZWVfZGF0YTsKPiAgCj4g IAlpID0gMDsKPiAtCW9mX3Byb3BlcnR5X2Zvcl9lYWNoX3UzMihub2RlLCAiY2xvY2staW5kaWNl cyIsIHByb3AsIHAsIGluZGV4KSB7Cj4gKwlvZl9wcm9wZXJ0eV9mb3JfZWFjaF91MzIobm9kZSwg ImNsb2NrLWluZGljZXMiLCBpbmRleCkgewo+ICAJCW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2lu ZGV4KG5vZGUsICJjbG9jay1vdXRwdXQtbmFtZXMiLAo+ICAJCQkJCSAgICAgIGksICZjbGtfbmFt ZSk7Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3NhbXN1bmdfcHdtX3Rp bWVyLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3NhbXN1bmdfcHdtX3RpbWVyLmMKPiBpbmRleCA2 ZTQ2NzgxYmM5YWMuLmI5NTYxZTNmMTk2YyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2Nsb2Nrc291 cmNlL3NhbXN1bmdfcHdtX3RpbWVyLmMKPiArKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3NhbXN1 bmdfcHdtX3RpbWVyLmMKPiBAQCAtNDE4LDggKzQxOCw2IEBAIHZvaWQgX19pbml0IHNhbXN1bmdf cHdtX2Nsb2Nrc291cmNlX2luaXQodm9pZCBfX2lvbWVtICpiYXNlLAo+ICBzdGF0aWMgaW50IF9f aW5pdCBzYW1zdW5nX3B3bV9hbGxvYyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAo+ICAJCQkJICAg IGNvbnN0IHN0cnVjdCBzYW1zdW5nX3B3bV92YXJpYW50ICp2YXJpYW50KQo+ICB7Cj4gLQlzdHJ1 Y3QgcHJvcGVydHkgKnByb3A7Cj4gLQljb25zdCBfX2JlMzIgKmN1cjsKPiAgCXUzMiB2YWw7Cj4g IAlpbnQgaSwgcmV0Owo+ICAKPiBAQCAtNDI3LDcgKzQyNSw3IEBAIHN0YXRpYyBpbnQgX19pbml0 IHNhbXN1bmdfcHdtX2FsbG9jKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCj4gIAlmb3IgKGkgPSAw OyBpIDwgU0FNU1VOR19QV01fTlVNOyArK2kpCj4gIAkJcHdtLmlycVtpXSA9IGlycV9vZl9wYXJz ZV9hbmRfbWFwKG5wLCBpKTsKPiAgCj4gLQlvZl9wcm9wZXJ0eV9mb3JfZWFjaF91MzIobnAsICJz YW1zdW5nLHB3bS1vdXRwdXRzIiwgcHJvcCwgY3VyLCB2YWwpIHsKPiArCW9mX3Byb3BlcnR5X2Zv cl9lYWNoX3UzMihucCwgInNhbXN1bmcscHdtLW91dHB1dHMiLCB2YWwpIHsKPiAgCQlpZiAodmFs ID49IFNBTVNVTkdfUFdNX05VTSkgewo+ICAJCQlwcl93YXJuKCIlczogaW52YWxpZCBjaGFubmVs IGluZGV4IGluIHNhbXN1bmcscHdtLW91dHB1dHMgcHJvcGVydHlcbiIsIF9fZnVuY19fKTsKPiAg CQkJY29udGludWU7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLWJyY21zdGIuYyBi L2RyaXZlcnMvZ3Bpby9ncGlvLWJyY21zdGIuYwo+IGluZGV4IDhkY2U3OGVhNzEzOS4uNTc2MmU1 MTczMzhlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLWJyY21zdGIuYwo+ICsrKyBi L2RyaXZlcnMvZ3Bpby9ncGlvLWJyY21zdGIuYwo+IEBAIC01OTEsOCArNTkxLDYgQEAgc3RhdGlj IGludCBicmNtc3RiX2dwaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiAg CXZvaWQgX19pb21lbSAqcmVnX2Jhc2U7Cj4gIAlzdHJ1Y3QgYnJjbXN0Yl9ncGlvX3ByaXYgKnBy aXY7Cj4gIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKPiAtCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsK PiAtCWNvbnN0IF9fYmUzMiAqcDsKPiAgCXUzMiBiYW5rX3dpZHRoOwo+ICAJaW50IG51bV9iYW5r cyA9IDA7Cj4gIAlpbnQgbnVtX2dwaW9zID0gMDsKPiBAQCAtNjM2LDggKzYzNCw3IEBAIHN0YXRp YyBpbnQgYnJjbXN0Yl9ncGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4g IAlmbGFncyA9IEJHUElPRl9CSUdfRU5ESUFOX0JZVEVfT1JERVI7Cj4gICNlbmRpZgo+ICAKPiAt CW9mX3Byb3BlcnR5X2Zvcl9lYWNoX3UzMihucCwgImJyY20sZ3Bpby1iYW5rLXdpZHRocyIsIHBy b3AsIHAsCj4gLQkJCWJhbmtfd2lkdGgpIHsKPiArCW9mX3Byb3BlcnR5X2Zvcl9lYWNoX3UzMihu cCwgImJyY20sZ3Bpby1iYW5rLXdpZHRocyIsIGJhbmtfd2lkdGgpIHsKPiAgCQlzdHJ1Y3QgYnJj bXN0Yl9ncGlvX2JhbmsgKmJhbms7Cj4gIAkJc3RydWN0IGdwaW9fY2hpcCAqZ2M7Cj4gIAo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2lpby9hZGMvdGlfYW0zMzV4X2FkYy5jIGIvZHJpdmVycy9paW8v YWRjL3RpX2FtMzM1eF9hZGMuYwo+IGluZGV4IDk1ZmE4NTdlOGFhZC4uNDI2ZTNjOWY4OGExIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvaWlvL2FkYy90aV9hbTMzNXhfYWRjLmMKPiArKysgYi9kcml2 ZXJzL2lpby9hZGMvdGlfYW0zMzV4X2FkYy5jCj4gQEAgLTU2NCwxMyArNTY0LDExIEBAIHN0YXRp YyBpbnQgdGlhZGNfcGFyc2VfZHQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKPiAgCQkJ ICBzdHJ1Y3QgdGlhZGNfZGV2aWNlICphZGNfZGV2KQo+ICB7Cj4gIAlzdHJ1Y3QgZGV2aWNlX25v ZGUgKm5vZGUgPSBwZGV2LT5kZXYub2Zfbm9kZTsKPiAtCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsK PiAtCWNvbnN0IF9fYmUzMiAqY3VyOwo+ICAJaW50IGNoYW5uZWxzID0gMDsKPiAgCXUzMiB2YWw7 Cj4gIAlpbnQgaTsKPiAgCj4gLQlvZl9wcm9wZXJ0eV9mb3JfZWFjaF91MzIobm9kZSwgInRpLGFk Yy1jaGFubmVscyIsIHByb3AsIGN1ciwgdmFsKSB7Cj4gKwlvZl9wcm9wZXJ0eV9mb3JfZWFjaF91 MzIobm9kZSwgInRpLGFkYy1jaGFubmVscyIsIHZhbCkgewo+ICAJCWFkY19kZXYtPmNoYW5uZWxf bGluZVtjaGFubmVsc10gPSB2YWw7Cj4gIAo+ICAJCS8qIFNldCBEZWZhdWx0IHZhbHVlcyBmb3Ig b3B0aW9uYWwgRFQgcGFyYW1ldGVycyAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNoaXAv aXJxLWF0bWVsLWFpYy1jb21tb24uYyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXRtZWwtYWljLWNv bW1vbi5jCj4gaW5kZXggMDcyYmQyMjdiNmM2Li40NTI1MzY2ZDE2ZDYgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9pcnFjaGlwL2lycS1hdG1lbC1haWMtY29tbW9uLmMKPiArKysgYi9kcml2ZXJzL2ly cWNoaXAvaXJxLWF0bWVsLWFpYy1jb21tb24uYwo+IEBAIC0xMTEsOCArMTExLDYgQEAgc3RhdGlj IHZvaWQgX19pbml0IGFpY19jb21tb25fZXh0X2lycV9vZl9pbml0KHN0cnVjdCBpcnFfZG9tYWlu ICpkb21haW4pCj4gIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBpcnFfZG9tYWluX2dldF9v Zl9ub2RlKGRvbWFpbik7Cj4gIAlzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2M7Cj4gIAlzdHJ1 Y3QgYWljX2NoaXBfZGF0YSAqYWljOwo+IC0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOwo+IC0JY29u c3QgX19iZTMyICpwOwo+ICAJdTMyIGh3aXJxOwo+ICAKPiAgCWdjID0gaXJxX2dldF9kb21haW5f Z2VuZXJpY19jaGlwKGRvbWFpbiwgMCk7Cj4gQEAgLTEyMCw3ICsxMTgsNyBAQCBzdGF0aWMgdm9p ZCBfX2luaXQgYWljX2NvbW1vbl9leHRfaXJxX29mX2luaXQoc3RydWN0IGlycV9kb21haW4gKmRv bWFpbikKPiAgCWFpYyA9IGdjLT5wcml2YXRlOwo+ICAJYWljLT5leHRfaXJxcyB8PSAxOwo+ICAK PiAtCW9mX3Byb3BlcnR5X2Zvcl9lYWNoX3UzMihub2RlLCAiYXRtZWwsZXh0ZXJuYWwtaXJxcyIs IHByb3AsIHAsIGh3aXJxKSB7Cj4gKwlvZl9wcm9wZXJ0eV9mb3JfZWFjaF91MzIobm9kZSwgImF0 bWVsLGV4dGVybmFsLWlycXMiLCBod2lycSkgewo+ICAJCWdjID0gaXJxX2dldF9kb21haW5fZ2Vu ZXJpY19jaGlwKGRvbWFpbiwgaHdpcnEpOwo+ICAJCWlmICghZ2MpIHsKPiAgCQkJcHJfd2Fybigi QUlDOiBleHRlcm5hbCBpcnEgJWQgPj0gJWQgc2tpcCBpdFxuIiwKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9pcnFjaGlwL2lycS1waWMzMi1ldmljLmMgYi9kcml2ZXJzL2lycWNoaXAvaXJxLXBpYzMy LWV2aWMuYwo+IGluZGV4IDI3NzI0MDMyNWNiYy4uZWI2Y2E1MTZhMTY2IDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvaXJxY2hpcC9pcnEtcGljMzItZXZpYy5jCj4gKysrIGIvZHJpdmVycy9pcnFjaGlw L2lycS1waWMzMi1ldmljLmMKPiBAQCAtMTkwLDEzICsxOTAsMTEgQEAgc3RhdGljIHZvaWQgX19p bml0IHBpYzMyX2V4dF9pcnFfb2ZfaW5pdChzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluKQo+ICB7 Cj4gIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBpcnFfZG9tYWluX2dldF9vZl9ub2RlKGRv bWFpbik7Cj4gIAlzdHJ1Y3QgZXZpY19jaGlwX2RhdGEgKnByaXYgPSBkb21haW4tPmhvc3RfZGF0 YTsKPiAtCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKPiAtCWNvbnN0IF9fbGUzMiAqcDsKPiAgCXUz MiBod2lycTsKPiAgCWludCBpID0gMDsKPiAgCWNvbnN0IGNoYXIgKnBuYW1lID0gIm1pY3JvY2hp cCxleHRlcm5hbC1pcnFzIjsKPiAgCj4gLQlvZl9wcm9wZXJ0eV9mb3JfZWFjaF91MzIobm9kZSwg cG5hbWUsIHByb3AsIHAsIGh3aXJxKSB7Cj4gKwlvZl9wcm9wZXJ0eV9mb3JfZWFjaF91MzIobm9k ZSwgcG5hbWUsIGh3aXJxKSB7Cj4gIAkJaWYgKGkgPj0gQVJSQVlfU0laRShwcml2LT5leHRfaXJx cykpIHsKPiAgCQkJcHJfd2FybigiTW9yZSB0aGFuICVkIGV4dGVybmFsIGlycSwgc2tpcCByZXN0 XG4iLAo+ICAJCQkJQVJSQVlfU0laRShwcml2LT5leHRfaXJxcykpOwo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL21mZC90aV9hbTMzNXhfdHNjYWRjLmMgYi9kcml2ZXJzL21mZC90aV9hbTMzNXhfdHNj YWRjLmMKPiBpbmRleCA0YmJkNTQyZDc1M2UuLjBjMTM2NGQ4ODQ2OSAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL21mZC90aV9hbTMzNXhfdHNjYWRjLmMKPiArKysgYi9kcml2ZXJzL21mZC90aV9hbTMz NXhfdHNjYWRjLmMKPiBAQCAtMTE5LDggKzExOSw2IEBAIHN0YXRpYwlpbnQgdGlfdHNjYWRjX3By b2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gIAlzdHJ1Y3QgY2xrICpjbGs7Cj4g IAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7Cj4gIAlzdHJ1Y3QgbWZkX2NlbGwgKmNlbGw7Cj4g LQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7Cj4gLQljb25zdCBfX2JlMzIgKmN1cjsKPiAgCWJvb2wg dXNlX3RzYyA9IGZhbHNlLCB1c2VfbWFnID0gZmFsc2U7Cj4gIAl1MzIgdmFsOwo+ICAJaW50IGVy cjsKPiBAQCAtMTY3LDcgKzE2NSw3IEBAIHN0YXRpYwlpbnQgdGlfdHNjYWRjX3Byb2JlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gIAl9Cj4gIAo+ICAJbm9kZSA9IG9mX2dldF9jaGls ZF9ieV9uYW1lKHBkZXYtPmRldi5vZl9ub2RlLCAiYWRjIik7Cj4gLQlvZl9wcm9wZXJ0eV9mb3Jf ZWFjaF91MzIobm9kZSwgInRpLGFkYy1jaGFubmVscyIsIHByb3AsIGN1ciwgdmFsKSB7Cj4gKwlv Zl9wcm9wZXJ0eV9mb3JfZWFjaF91MzIobm9kZSwgInRpLGFkYy1jaGFubmVscyIsIHZhbCkgewo+ ICAJCWFkY19jaGFubmVscysrOwo+ICAJCWlmICh2YWwgPiA3KSB7Cj4gIAkJCWRldl9lcnIoJnBk ZXYtPmRldiwgIiBQSU4gbnVtYmVycyBhcmUgMC4uNyAobm90ICVkKVxuIiwKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9waW5jdHJsL254cC9waW5jdHJsLXMzMmNjLmMgYi9kcml2ZXJzL3BpbmN0cmwv bnhwL3BpbmN0cmwtczMyY2MuYwo+IGluZGV4IGYwY2FkMmM1MDFmNy4uMDhkODBmYjkzNWIzIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvcGluY3RybC9ueHAvcGluY3RybC1zMzJjYy5jCj4gKysrIGIv ZHJpdmVycy9waW5jdHJsL254cC9waW5jdHJsLXMzMmNjLmMKPiBAQCAtNzM1LDkgKzczNSw3IEBA IHN0YXRpYyBpbnQgczMyX3BpbmN0cmxfcGFyc2VfZ3JvdXBzKHN0cnVjdCBkZXZpY2Vfbm9kZSAq bnAsCj4gIAkJCQkgICAgIHN0cnVjdCBzMzJfcGluX2dyb3VwICpncnAsCj4gIAkJCQkgICAgIHN0 cnVjdCBzMzJfcGluY3RybF9zb2NfaW5mbyAqaW5mbykKPiAgewo+IC0JY29uc3QgX19iZTMyICpw Owo+ICAJc3RydWN0IGRldmljZSAqZGV2Owo+IC0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOwo+ICAJ dW5zaWduZWQgaW50ICpwaW5zLCAqc3NzOwo+ICAJaW50IGksIG5waW5zOwo+ICAJdTMyIHBpbm11 eDsKPiBAQCAtNzY4LDcgKzc2Niw3IEBAIHN0YXRpYyBpbnQgczMyX3BpbmN0cmxfcGFyc2VfZ3Jv dXBzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCj4gIAkJcmV0dXJuIC1FTk9NRU07Cj4gIAo+ICAJ aSA9IDA7Cj4gLQlvZl9wcm9wZXJ0eV9mb3JfZWFjaF91MzIobnAsICJwaW5tdXgiLCBwcm9wLCBw LCBwaW5tdXgpIHsKPiArCW9mX3Byb3BlcnR5X2Zvcl9lYWNoX3UzMihucCwgInBpbm11eCIsIHBp bm11eCkgewo+ICAJCXBpbnNbaV0gPSBnZXRfcGluX25vKHBpbm11eCk7Cj4gIAkJc3NzW2ldID0g Z2V0X3Bpbl9mdW5jKHBpbm11eCk7Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwv cGluY3RybC1rMjEwLmMgYi9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1rMjEwLmMKPiBpbmRleCBi NmQxZWQ5ZWM5YTMuLmY0ZGNmYTU2YzllNSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3BpbmN0cmwv cGluY3RybC1rMjEwLmMKPiArKysgYi9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1rMjEwLmMKPiBA QCAtNzYzLDggKzc2Myw2IEBAIHN0YXRpYyBpbnQgazIxMF9waW5jdHJsX2R0X3N1Ym5vZGVfdG9f bWFwKHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bGRldiwKPiAgCQkJCQkgIHVuc2lnbmVkIGludCAq cmVzZXJ2ZWRfbWFwcywKPiAgCQkJCQkgIHVuc2lnbmVkIGludCAqbnVtX21hcHMpCj4gIHsKPiAt CXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKPiAtCWNvbnN0IF9fYmUzMiAqcDsKPiAgCWludCByZXQs IHBpbm11eF9ncm91cHM7Cj4gIAl1MzIgcGlubXV4X2dyb3VwOwo+ICAJdW5zaWduZWQgbG9uZyAq Y29uZmlncyA9IE5VTEw7Cj4gQEAgLTc5Nyw3ICs3OTUsNyBAQCBzdGF0aWMgaW50IGsyMTBfcGlu Y3RybF9kdF9zdWJub2RlX3RvX21hcChzdHJ1Y3QgcGluY3RybF9kZXYgKnBjdGxkZXYsCj4gIAlp ZiAocmV0IDwgMCkKPiAgCQlnb3RvIGV4aXQ7Cj4gIAo+IC0Jb2ZfcHJvcGVydHlfZm9yX2VhY2hf dTMyKG5wLCAicGlubXV4IiwgcHJvcCwgcCwgcGlubXV4X2dyb3VwKSB7Cj4gKwlvZl9wcm9wZXJ0 eV9mb3JfZWFjaF91MzIobnAsICJwaW5tdXgiLCBwaW5tdXhfZ3JvdXApIHsKPiAgCQljb25zdCBj aGFyICpncm91cF9uYW1lLCAqZnVuY19uYW1lOwo+ICAJCXUzMiBwaW4gPSBGSUVMRF9HRVQoSzIx MF9QR19QSU4sIHBpbm11eF9ncm91cCk7Cj4gIAkJdTMyIGZ1bmMgPSBGSUVMRF9HRVQoSzIxMF9Q R19GVU5DLCBwaW5tdXhfZ3JvdXApOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3B3bS9wd20tc2Ft c3VuZy5jIGIvZHJpdmVycy9wd20vcHdtLXNhbXN1bmcuYwo+IGluZGV4IGVmYjYwYzlmMGNiMy4u MjA3MzRlN2EyMTZkIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvcHdtL3B3bS1zYW1zdW5nLmMKPiAr KysgYi9kcml2ZXJzL3B3bS9wd20tc2Ftc3VuZy5jCj4gQEAgLTUxMCw4ICs1MTAsNiBAQCBzdGF0 aWMgaW50IHB3bV9zYW1zdW5nX3BhcnNlX2R0KHN0cnVjdCBwd21fY2hpcCAqY2hpcCkKPiAgCXN0 cnVjdCBzYW1zdW5nX3B3bV9jaGlwICpvdXJfY2hpcCA9IHRvX3NhbXN1bmdfcHdtX2NoaXAoY2hp cCk7Cj4gIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcHdtY2hpcF9wYXJlbnQoY2hpcCktPm9m X25vZGU7Cj4gIAljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKPiAtCXN0cnVjdCBw cm9wZXJ0eSAqcHJvcDsKPiAtCWNvbnN0IF9fYmUzMiAqY3VyOwo+ICAJdTMyIHZhbDsKPiAgCj4g IAltYXRjaCA9IG9mX21hdGNoX25vZGUoc2Ftc3VuZ19wd21fbWF0Y2hlcywgbnApOwo+IEBAIC01 MjAsNyArNTE4LDcgQEAgc3RhdGljIGludCBwd21fc2Ftc3VuZ19wYXJzZV9kdChzdHJ1Y3QgcHdt X2NoaXAgKmNoaXApCj4gIAo+ICAJbWVtY3B5KCZvdXJfY2hpcC0+dmFyaWFudCwgbWF0Y2gtPmRh dGEsIHNpemVvZihvdXJfY2hpcC0+dmFyaWFudCkpOwo+ICAKPiAtCW9mX3Byb3BlcnR5X2Zvcl9l YWNoX3UzMihucCwgInNhbXN1bmcscHdtLW91dHB1dHMiLCBwcm9wLCBjdXIsIHZhbCkgewo+ICsJ b2ZfcHJvcGVydHlfZm9yX2VhY2hfdTMyKG5wLCAic2Ftc3VuZyxwd20tb3V0cHV0cyIsIHZhbCkg ewo+ICAJCWlmICh2YWwgPj0gU0FNU1VOR19QV01fTlVNKSB7Cj4gIAkJCWRldl9lcnIocHdtY2hp cF9wYXJlbnQoY2hpcCksCj4gIAkJCQkiJXM6IGludmFsaWQgY2hhbm5lbCBpbmRleCBpbiBzYW1z dW5nLHB3bS1vdXRwdXRzIHByb3BlcnR5XG4iLAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9z eXNycS5jIGIvZHJpdmVycy90dHkvc3lzcnEuYwo+IGluZGV4IGU1OTc0YjgyMzljOS4uZGFiMzMy NjgxMDM2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvdHR5L3N5c3JxLmMKPiArKysgYi9kcml2ZXJz L3R0eS9zeXNycS5jCj4gQEAgLTc3MCw4ICs3NzAsNiBAQCBzdGF0aWMgdm9pZCBzeXNycV9vZl9n ZXRfa2V5cmVzZXRfY29uZmlnKHZvaWQpCj4gIHsKPiAgCXUzMiBrZXk7Cj4gIAlzdHJ1Y3QgZGV2 aWNlX25vZGUgKm5wOwo+IC0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOwo+IC0JY29uc3QgX19iZTMy ICpwOwo+ICAKPiAgCW5wID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9jaG9zZW4vbGludXgsc3lz cnEtcmVzZXQtc2VxIik7Cj4gIAlpZiAoIW5wKSB7Cj4gQEAgLTc4Miw3ICs3ODAsNyBAQCBzdGF0 aWMgdm9pZCBzeXNycV9vZl9nZXRfa2V5cmVzZXRfY29uZmlnKHZvaWQpCj4gIAkvKiBSZXNldCBp biBjYXNlIGEgX193ZWFrIGRlZmluaXRpb24gd2FzIHByZXNlbnQgKi8KPiAgCXN5c3JxX3Jlc2V0 X3NlcV9sZW4gPSAwOwo+ICAKPiAtCW9mX3Byb3BlcnR5X2Zvcl9lYWNoX3UzMihucCwgImtleXNl dCIsIHByb3AsIHAsIGtleSkgewo+ICsJb2ZfcHJvcGVydHlfZm9yX2VhY2hfdTMyKG5wLCAia2V5 c2V0Iiwga2V5KSB7Cj4gIAkJaWYgKGtleSA9PSBLRVlfUkVTRVJWRUQgfHwga2V5ID4gS0VZX01B WCB8fAo+ICAJCSAgICBzeXNycV9yZXNldF9zZXFfbGVuID09IFNZU1JRX0tFWV9SRVNFVF9NQVgp Cj4gIAkJCWJyZWFrOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3VzYjI1MXhiLmMg Yi9kcml2ZXJzL3VzYi9taXNjL3VzYjI1MXhiLmMKPiBpbmRleCA3ZGE0MDRmNTVhNmQuLjM5NzBi ZjljYTgxOCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3VzYi9taXNjL3VzYjI1MXhiLmMKPiArKysg Yi9kcml2ZXJzL3VzYi9taXNjL3VzYjI1MXhiLmMKPiBAQCAtMzgyLDExICszODIsOSBAQCBzdGF0 aWMgdm9pZCB1c2IyNTF4Yl9nZXRfcG9ydHNfZmllbGQoc3RydWN0IHVzYjI1MXhiICpodWIsCj4g IAkJCQkgICAgYm9vbCBkc19vbmx5LCB1OCAqZmxkKQo+ICB7Cj4gIAlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSBodWItPmRldjsKPiAtCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKPiAtCWNvbnN0IF9fYmUz MiAqcDsKPiAgCXUzMiBwb3J0Owo+ICAKPiAtCW9mX3Byb3BlcnR5X2Zvcl9lYWNoX3UzMihkZXYt Pm9mX25vZGUsIHByb3BfbmFtZSwgcHJvcCwgcCwgcG9ydCkgewo+ICsJb2ZfcHJvcGVydHlfZm9y X2VhY2hfdTMyKGRldi0+b2Zfbm9kZSwgcHJvcF9uYW1lLCBwb3J0KSB7Cj4gIAkJaWYgKChwb3J0 ID49IGRzX29ubHkgPyAxIDogMCkgJiYgKHBvcnQgPD0gcG9ydF9jbnQpKQo+ICAJCQkqZmxkIHw9 IEJJVChwb3J0KTsKPiAgCQllbHNlCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb2YuaCBi L2luY2x1ZGUvbGludXgvb2YuaAo+IGluZGV4IGEwYmVkZDAzOGEwNS4uMTNhZDgwOGJiOGY3IDEw MDY0NAo+IC0tLSBhL2luY2x1ZGUvbGludXgvb2YuaAo+ICsrKyBiL2luY2x1ZGUvbGludXgvb2Yu aAo+IEBAIC00MzAsMTEgKzQzMCw5IEBAIGV4dGVybiBpbnQgb2ZfZGV0YWNoX25vZGUoc3RydWN0 IGRldmljZV9ub2RlICopOwo+ICAjZGVmaW5lIG9mX21hdGNoX3B0cihfcHRyKQkoX3B0cikKPiAg Cj4gIC8qCj4gLSAqIHN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKPiAtICogY29uc3QgX19iZTMyICpw Owo+ICAgKiB1MzIgdTsKPiAgICoKPiAtICogb2ZfcHJvcGVydHlfZm9yX2VhY2hfdTMyKG5wLCAi cHJvcG5hbWUiLCBwcm9wLCBwLCB1KQo+ICsgKiBvZl9wcm9wZXJ0eV9mb3JfZWFjaF91MzIobnAs ICJwcm9wbmFtZSIsIHUpCj4gICAqICAgICAgICAgcHJpbnRrKCJVMzIgdmFsdWU6ICV4XG4iLCB1 KTsKPiAgICovCj4gIGNvbnN0IF9fYmUzMiAqb2ZfcHJvcF9uZXh0X3UzMihzdHJ1Y3QgcHJvcGVy dHkgKnByb3AsIGNvbnN0IF9fYmUzMiAqY3VyLAo+IEBAIC0xNDMxLDExICsxNDI5LDEyIEBAIHN0 YXRpYyBpbmxpbmUgaW50IG9mX3Byb3BlcnR5X3JlYWRfczMyKGNvbnN0IHN0cnVjdCBkZXZpY2Vf bm9kZSAqbnAsCj4gIAkgICAgIGVyciA9PSAwOwkJCQkJCQlcCj4gIAkgICAgIGVyciA9IG9mX3Bo YW5kbGVfaXRlcmF0b3JfbmV4dChpdCkpCj4gIAo+IC0jZGVmaW5lIG9mX3Byb3BlcnR5X2Zvcl9l YWNoX3UzMihucCwgcHJvcG5hbWUsIHByb3AsIHAsIHUpCVwKPiAtCWZvciAocHJvcCA9IG9mX2Zp bmRfcHJvcGVydHkobnAsIHByb3BuYW1lLCBOVUxMKSwJXAo+IC0JCXAgPSBvZl9wcm9wX25leHRf dTMyKHByb3AsIE5VTEwsICZ1KTsJCVwKPiAtCQlwOwkJCQkJCVwKPiAtCQlwID0gb2ZfcHJvcF9u ZXh0X3UzMihwcm9wLCBwLCAmdSkpCj4gKyNkZWZpbmUgb2ZfcHJvcGVydHlfZm9yX2VhY2hfdTMy KG5wLCBwcm9wbmFtZSwgdSkJCQlcCj4gKwlmb3IgKHN0cnVjdCB7c3RydWN0IHByb3BlcnR5ICpw cm9wOyBjb25zdCBfX2JlMzIgKml0ZW07IH0gX2l0ID0JXAo+ICsJCXtvZl9maW5kX3Byb3BlcnR5 KG5wLCBwcm9wbmFtZSwgTlVMTCksCQkJXAo+ICsJCSBvZl9wcm9wX25leHRfdTMyKF9pdC5wcm9w LCBOVUxMLCAmdSl9OwkJCVwKPiArCSAgICAgX2l0Lml0ZW07CQkJCQkJCVwKPiArCSAgICAgX2l0 Lml0ZW0gPSBvZl9wcm9wX25leHRfdTMyKF9pdC5wcm9wLCBfaXQuaXRlbSwgJnUpKQo+ICAKPiAg I2RlZmluZSBvZl9wcm9wZXJ0eV9mb3JfZWFjaF9zdHJpbmcobnAsIHByb3BuYW1lLCBwcm9wLCBz KQlcCj4gIAlmb3IgKHByb3AgPSBvZl9maW5kX3Byb3BlcnR5KG5wLCBwcm9wbmFtZSwgTlVMTCks CVwKPiBkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hcml6b25hLmMgYi9zb3VuZC9zb2Mv Y29kZWNzL2FyaXpvbmEuYwo+IGluZGV4IDc0MzRhZWVkYTI5Mi4uNDAyYjlhMmZmMDI0IDEwMDY0 NAo+IC0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYXJpem9uYS5jCj4gKysrIGIvc291bmQvc29jL2Nv ZGVjcy9hcml6b25hLmMKPiBAQCAtMjc4NiwxNSArMjc4NiwxMyBAQCBpbnQgYXJpem9uYV9vZl9n ZXRfYXVkaW9fcGRhdGEoc3RydWN0IGFyaXpvbmEgKmFyaXpvbmEpCj4gIHsKPiAgCXN0cnVjdCBh cml6b25hX3BkYXRhICpwZGF0YSA9ICZhcml6b25hLT5wZGF0YTsKPiAgCXN0cnVjdCBkZXZpY2Vf bm9kZSAqbnAgPSBhcml6b25hLT5kZXYtPm9mX25vZGU7Cj4gLQlzdHJ1Y3QgcHJvcGVydHkgKnBy b3A7Cj4gLQljb25zdCBfX2JlMzIgKmN1cjsKPiAgCXUzMiB2YWw7Cj4gIAl1MzIgcGRtX3ZhbFtB UklaT05BX01BWF9QRE1fU1BLXTsKPiAgCWludCByZXQ7Cj4gIAlpbnQgY291bnQgPSAwOwo+ICAK PiAgCWNvdW50ID0gMDsKPiAtCW9mX3Byb3BlcnR5X2Zvcl9lYWNoX3UzMihucCwgIndsZixpbm1v ZGUiLCBwcm9wLCBjdXIsIHZhbCkgewo+ICsJb2ZfcHJvcGVydHlfZm9yX2VhY2hfdTMyKG5wLCAi d2xmLGlubW9kZSIsIHZhbCkgewo+ICAJCWlmIChjb3VudCA9PSBBUlJBWV9TSVpFKHBkYXRhLT5p bm1vZGUpKQo+ICAJCQlicmVhazsKPiAgCj4gQEAgLTI4MDMsNyArMjgwMSw3IEBAIGludCBhcml6 b25hX29mX2dldF9hdWRpb19wZGF0YShzdHJ1Y3QgYXJpem9uYSAqYXJpem9uYSkKPiAgCX0KPiAg Cj4gIAljb3VudCA9IDA7Cj4gLQlvZl9wcm9wZXJ0eV9mb3JfZWFjaF91MzIobnAsICJ3bGYsZG1p Yy1yZWYiLCBwcm9wLCBjdXIsIHZhbCkgewo+ICsJb2ZfcHJvcGVydHlfZm9yX2VhY2hfdTMyKG5w LCAid2xmLGRtaWMtcmVmIiwgdmFsKSB7Cj4gIAkJaWYgKGNvdW50ID09IEFSUkFZX1NJWkUocGRh dGEtPmRtaWNfcmVmKSkKPiAgCQkJYnJlYWs7Cj4gIAo+IEBAIC0yODEyLDcgKzI4MTAsNyBAQCBp bnQgYXJpem9uYV9vZl9nZXRfYXVkaW9fcGRhdGEoc3RydWN0IGFyaXpvbmEgKmFyaXpvbmEpCj4g IAl9Cj4gIAo+ICAJY291bnQgPSAwOwo+IC0Jb2ZfcHJvcGVydHlfZm9yX2VhY2hfdTMyKG5wLCAi d2xmLG91dC1tb25vIiwgcHJvcCwgY3VyLCB2YWwpIHsKPiArCW9mX3Byb3BlcnR5X2Zvcl9lYWNo X3UzMihucCwgIndsZixvdXQtbW9ubyIsIHZhbCkgewo+ICAJCWlmIChjb3VudCA9PSBBUlJBWV9T SVpFKHBkYXRhLT5vdXRfbW9ubykpCj4gIAkJCWJyZWFrOwo+ICAKPiBAQCAtMjgyMSw3ICsyODE5 LDcgQEAgaW50IGFyaXpvbmFfb2ZfZ2V0X2F1ZGlvX3BkYXRhKHN0cnVjdCBhcml6b25hICphcml6 b25hKQo+ICAJfQo+ICAKPiAgCWNvdW50ID0gMDsKPiAtCW9mX3Byb3BlcnR5X2Zvcl9lYWNoX3Uz MihucCwgIndsZixtYXgtY2hhbm5lbHMtY2xvY2tlZCIsIHByb3AsIGN1ciwgdmFsKSB7Cj4gKwlv Zl9wcm9wZXJ0eV9mb3JfZWFjaF91MzIobnAsICJ3bGYsbWF4LWNoYW5uZWxzLWNsb2NrZWQiLCB2 YWwpIHsKPiAgCQlpZiAoY291bnQgPT0gQVJSQVlfU0laRShwZGF0YS0+bWF4X2NoYW5uZWxzX2Ns b2NrZWQpKQo+ICAJCQlicmVhazsKPiAgCj4gQEAgLTI4MzAsNyArMjgyOCw3IEBAIGludCBhcml6 b25hX29mX2dldF9hdWRpb19wZGF0YShzdHJ1Y3QgYXJpem9uYSAqYXJpem9uYSkKPiAgCX0KPiAg Cj4gIAljb3VudCA9IDA7Cj4gLQlvZl9wcm9wZXJ0eV9mb3JfZWFjaF91MzIobnAsICJ3bGYsb3V0 LXZvbHVtZS1saW1pdCIsIHByb3AsIGN1ciwgdmFsKSB7Cj4gKwlvZl9wcm9wZXJ0eV9mb3JfZWFj aF91MzIobnAsICJ3bGYsb3V0LXZvbHVtZS1saW1pdCIsIHZhbCkgewo+ICAJCWlmIChjb3VudCA9 PSBBUlJBWV9TSVpFKHBkYXRhLT5vdXRfdm9sX2xpbWl0KSkKPiAgCQkJYnJlYWs7Cj4gIAo+IAo+ IC0tLQo+IGJhc2UtY29tbWl0OiBkMmYyZDkyOTUxMWQwOTJlNTJmOWU1MDM3MWY4ZGE3NmQ4OTc5 YTgyCj4gY2hhbmdlLWlkOiAyMDI0MDcwMS1vZl9wcm9wZXJ0eV9mb3JfZWFjaF91MzItNDYwZmQw MmE1ZDBjCj4gCj4gQmVzdCByZWdhcmRzLAo+IC0tIAo+IEx1Y2EgQ2VyZXNvbGkgPGx1Y2EuY2Vy ZXNvbGlAYm9vdGxpbi5jb20+Cj4gCgotLSAKTGVlIEpvbmVzIFvmnY7nkLzmlq9dCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1yaXNjdiBtYWls aW5nIGxpc3QKbGludXgtcmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5m cmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJpc2N2Cg== 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 951F9C3DA49 for ; Thu, 25 Jul 2024 12:18:51 +0000 (UTC) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20201202 header.b=IP+uKluK; dkim-atps=neutral Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4WV90V1gPyz3d8S for ; Thu, 25 Jul 2024 22:18:50 +1000 (AEST) Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=kernel.org Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20201202 header.b=IP+uKluK; dkim-atps=neutral Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=kernel.org (client-ip=145.40.73.55; helo=sin.source.kernel.org; envelope-from=lee@kernel.org; receiver=lists.ozlabs.org) Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4WV3Bl46vNz3cf7 for ; Thu, 25 Jul 2024 17:57:19 +1000 (AEST) Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id 57319CE12FD; Thu, 25 Jul 2024 07:57:16 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7822EC116B1; Thu, 25 Jul 2024 07:57:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721894235; bh=aNT0Q8oUAbpUZefrt7kBTZ31CMHmKs1m1fqrVLLhAIw=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=IP+uKluKRukNdkh+oVMOB/AMShcQVRUnyz3CBLhB4gC301qpppVezztuKaAhD3Khb WDQpv1DtEd1psmMaDZae3rfyUgsuiKAJGqmo7L7xvttWRU9p8ODN2XimURCAIp/82W ycSmoL1LJx6brCvXVPCkcmrTpd9XDeFov3nwvZWcS/la5SN6nizx1S02yJnDAmyxcw TotDkVJ1OqkZCLHpxQlilIC2emvOeolAy1qcNsddJgoR9ownUvAaBrvEqmpoVK/llw ljo70nbIB6XsziQ4qGbqbJyLE0+8VTF+rsdErVgu0YXdTzpsgAGQ1panNtaK2kJKNT GVbwGYJFFV1UQ== Date: Thu, 25 Jul 2024 08:56:58 +0100 From: Lee Jones To: Luca Ceresoli Subject: Re: [PATCH v3] of: remove internal arguments from of_property_for_each_u32() Message-ID: <20240725075658.GB501857@google.com> References: <20240724-of_property_for_each_u32-v3-1-bea82ce429e2@bootlin.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20240724-of_property_for_each_u32-v3-1-bea82ce429e2@bootlin.com> X-Mailman-Approved-At: Thu, 25 Jul 2024 22:18:09 +1000 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: linux-riscv@lists.infradead.org, Richard Leitner , linux-usb@vger.kernel.org, Lars-Peter Clausen , devicetree@vger.kernel.org, Tony Lindgren , Linus Walleij , llvm@lists.linux.dev, Alexandre Belloni , Nicolas Ferre , patches@opensource.cirrus.com, Uwe =?iso-8859-1?Q?Kleine-K=F6nig?= , Krzysztof Kozlowski , Alim Akhtar , Claudiu Beznea , Ghennadi Procopciuc , Jiri Slaby , linux-clk@vger.kernel.org, Jacky Bai , Rob Herring , Doug Berger , Florian Fainelli , Samuel Holland , Emilio =?iso-8859-1?Q?L=F3pez?= , Bartosz Golaszewski , Daniel Lezcano , Thomas Petazzoni , Jernej Skrabec , linux-samsung-soc@vger.kernel.org, Chen-Yu Tsai , Andreas Kemnade , Broadcom internal kernel review list , linux-serial@vger.kernel.org, Andre Przywara , Miguel Ojeda , Bartosz Golaszewski , Michael Turquette , Jonathan Cameron , Dong Aisheng , "Peng Fan \(OSS\)" , linux-omap@vger.kernel.org, linux-arm-msm@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, Nicholas Piggin , Nathan Chancellor , "Naveen N. Rao" , Richard Fitzgerald , Mark Brown , linux-pwm@vger.kernel.org, linux-sound@vger.kernel.org, Fabio Estevam , Takashi Iwai , Thomas Gleixner , Jaroslav Kysela , linux-arm-kernel@lists.infradead.org, Chester Lin , Roger Quadros , Matthias Brugger , Saravana Kannan , linux-gpio@vger.kernel.org, Stephen Boyd , Greg Kroah-Hartman , Bjorn Andersson , Aaro Koskinen , Liam Girdwood , linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, Damien Le Moal , Pengutronix Kernel Team , Kevin Hilman , Uwe =?iso-8859-1?Q?Kleine-K=F6nig?= , Christophe Leroy , Shawn Guo , linux-sunxi@lists.linux.dev, Jonathan Cameron Errors-To: linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org Sender: "Linuxppc-dev" On Wed, 24 Jul 2024, Luca Ceresoli wrote: > The of_property_for_each_u32() macro needs five parameters, two of which > are primarily meant as internal variables for the macro itself (in the > for() clause). Yet these two parameters are used by a few drivers, and this > can be considered misuse or at least bad practice. > > Now that the kernel uses C11 to build, these two parameters can be avoided > by declaring them internally, thus changing this pattern: > > struct property *prop; > const __be32 *p; > u32 val; > > of_property_for_each_u32(np, "xyz", prop, p, val) { ... } > > to this: > > u32 val; > > of_property_for_each_u32(np, "xyz", val) { ... } > > However two variables cannot be declared in the for clause even with C11, > so declare one struct that contain the two variables we actually need. As > the variables inside this struct are not meant to be used by users of this > macro, give the struct instance the noticeable name "_it" so it is visible > during code reviews, helping to avoid new code to use it directly. > > Most usages are trivially converted as they do not use those two > parameters, as expected. The non-trivial cases are: > > - drivers/clk/clk.c, of_clk_get_parent_name(): easily doable anyway > - drivers/clk/clk-si5351.c, si5351_dt_parse(): this is more complex as the > checks had to be replicated in a different way, making code more verbose > and somewhat uglier, but I refrained from a full rework to keep as much > of the original code untouched having no hardware to test my changes > > All the changes have been build tested. The few for which I have the > hardware have been runtime-tested too. > > Reviewed-by: Andre Przywara # drivers/clk/sunxi/clk-simple-gates.c, drivers/clk/sunxi/clk-sun8i-bus-gates.c > Acked-by: Bartosz Golaszewski # drivers/gpio/gpio-brcmstb.c > Acked-by: Nicolas Ferre # drivers/irqchip/irq-atmel-aic-common.c > Acked-by: Jonathan Cameron # drivers/iio/adc/ti_am335x_adc.c > Acked-by: Uwe Kleine-König # drivers/pwm/pwm-samsung.c > Acked-by: Richard Leitner # drivers/usb/misc/usb251xb.c > Acked-by: Mark Brown # sound/soc/codecs/arizona.c > Reviewed-by: Richard Fitzgerald # sound/soc/codecs/arizona.c > Acked-by: Michael Ellerman # arch/powerpc/sysdev/xive/spapr.c > Acked-by: Stephen Boyd # clk > Signed-off-by: Luca Ceresoli > --- > [Note: to reduce the noise I have trimmed the get_maintainers list > manually. Should you want to be removed, or someone else added, to future > versions, just tell me. Sorry for the noise.] > > This series aims at simplifying of_property_for_each_u32() as well as > making it more difficult to misuse it in the future. > > The long-term goal is changing this pattern: > > struct property *prop; > const __be32 *p; > u32 val; > > of_property_for_each_u32(np, "xyz", prop, p, val) { ... } > > to this: > > u32 val; > > of_property_for_each_u32(np, "xyz", val) { ... } > > So, removing the 3rd and 4th arguments which are typically meant to be > internal. Those two parameters used to be unavoidable until the kernel > moved to building with the C11 standard unconditionally. Since then, it is > now possible to get rid of them. However a few users of > of_property_for_each_u32() do actually use those arguments, which > complicates the transition. For this reason this series does the following: > > * Add of_property_for_each_u32_new(), which does not have those two > arguments (patch 1) > * Convert _almost_ every usage to of_property_for_each_u32_new() > * Rename of_property_for_each_u32() to of_property_for_each_u32_old() and > deprecate it, as a incentive to code not (yet) in mainline to upgrade > to the *_new() version (last patch) > > The plan for the next series is to additionally: > > * Convert the few remaining of_property_for_each_u32_old() instantes to > of_property_for_each_u32_new() > * Remove of_property_for_each_u32_old() > * Rename of_property_for_each_u32_new() to of_property_for_each_u32() > --- > Changes in v3: > - Link to v2: https://lore.kernel.org/r/20240717-of_property_for_each_u32-v2-1-4060990f49c9@bootlin.com > > Changes in v2: > - Link to v1: https://lore.kernel.org/r/20240703-of_property_for_each_u32-v1-0-42c1fc0b82aa@bootlin.com > --- > > Changed in v3: > - add missing newlines to printk strings > - Link to v2: https://lore.kernel.org/r/20240717-of_property_for_each_u32-v2-1-4060990f49c9@bootlin.com > > Note! I have carried the ack/review tags received on v1, but since those > were on individual, per-driver patches I cannot claim the approve the whole > work. So I have added the specific file that was acked. For those who > reviewed v1 (thanks!), I'll assume that's OK unless you tell otherwise. > > Changed in v2: > - squashed into a single patch as suggested by Rob > - so _new and _old macros do not appear anymore > - added to To/Cc all names reported by get_maintainers instead of > trimming as I did for v1 > - converted the few users not yet converted in v1 > - improve commit message > - Link to v1: https://lore.kernel.org/r/20240703-of_property_for_each_u32-v1-0-42c1fc0b82aa@bootlin.com > --- > arch/powerpc/sysdev/xive/native.c | 4 +-- > arch/powerpc/sysdev/xive/spapr.c | 3 +-- > drivers/bus/ti-sysc.c | 4 +-- > drivers/clk/clk-conf.c | 4 +-- > drivers/clk/clk-si5351.c | 43 ++++++++++++++++++++------------- > drivers/clk/clk.c | 12 ++++----- > drivers/clk/qcom/common.c | 4 +-- > drivers/clk/sunxi/clk-simple-gates.c | 4 +-- > drivers/clk/sunxi/clk-sun8i-bus-gates.c | 4 +-- > drivers/clocksource/samsung_pwm_timer.c | 4 +-- > drivers/gpio/gpio-brcmstb.c | 5 +--- > drivers/iio/adc/ti_am335x_adc.c | 4 +-- > drivers/irqchip/irq-atmel-aic-common.c | 4 +-- > drivers/irqchip/irq-pic32-evic.c | 4 +-- > drivers/mfd/ti_am335x_tscadc.c | 4 +-- Acked-by: Lee Jones > drivers/pinctrl/nxp/pinctrl-s32cc.c | 4 +-- > drivers/pinctrl/pinctrl-k210.c | 4 +-- > drivers/pwm/pwm-samsung.c | 4 +-- > drivers/tty/sysrq.c | 4 +-- > drivers/usb/misc/usb251xb.c | 4 +-- > include/linux/of.h | 15 ++++++------ > sound/soc/codecs/arizona.c | 12 ++++----- > 22 files changed, 61 insertions(+), 93 deletions(-) > > diff --git a/arch/powerpc/sysdev/xive/native.c b/arch/powerpc/sysdev/xive/native.c > index 517b963e3e6a..a0934b516933 100644 > --- a/arch/powerpc/sysdev/xive/native.c > +++ b/arch/powerpc/sysdev/xive/native.c > @@ -559,9 +559,7 @@ bool __init xive_native_init(void) > struct device_node *np; > struct resource r; > void __iomem *tima; > - struct property *prop; > u8 max_prio = 7; > - const __be32 *p; > u32 val, cpu; > s64 rc; > > @@ -592,7 +590,7 @@ bool __init xive_native_init(void) > max_prio = val - 1; > > /* Iterate the EQ sizes and pick one */ > - of_property_for_each_u32(np, "ibm,xive-eq-sizes", prop, p, val) { > + of_property_for_each_u32(np, "ibm,xive-eq-sizes", val) { > xive_queue_shift = val; > if (val == PAGE_SHIFT) > break; > diff --git a/arch/powerpc/sysdev/xive/spapr.c b/arch/powerpc/sysdev/xive/spapr.c > index e45419264391..f2fa985a2c77 100644 > --- a/arch/powerpc/sysdev/xive/spapr.c > +++ b/arch/powerpc/sysdev/xive/spapr.c > @@ -814,7 +814,6 @@ bool __init xive_spapr_init(void) > struct device_node *np; > struct resource r; > void __iomem *tima; > - struct property *prop; > u8 max_prio; > u32 val; > u32 len; > @@ -866,7 +865,7 @@ bool __init xive_spapr_init(void) > } > > /* Iterate the EQ sizes and pick one */ > - of_property_for_each_u32(np, "ibm,xive-eq-sizes", prop, reg, val) { > + of_property_for_each_u32(np, "ibm,xive-eq-sizes", val) { > xive_queue_shift = val; > if (val == PAGE_SHIFT) > break; > diff --git a/drivers/bus/ti-sysc.c b/drivers/bus/ti-sysc.c > index 8767e04d6c89..2b59ef61dda2 100644 > --- a/drivers/bus/ti-sysc.c > +++ b/drivers/bus/ti-sysc.c > @@ -2291,11 +2291,9 @@ static int sysc_init_idlemode(struct sysc *ddata, u8 *idlemodes, > const char *name) > { > struct device_node *np = ddata->dev->of_node; > - struct property *prop; > - const __be32 *p; > u32 val; > > - of_property_for_each_u32(np, name, prop, p, val) { > + of_property_for_each_u32(np, name, val) { > if (val >= SYSC_NR_IDLEMODES) { > dev_err(ddata->dev, "invalid idlemode: %i\n", val); > return -EINVAL; > diff --git a/drivers/clk/clk-conf.c b/drivers/clk/clk-conf.c > index 1a4e6340f95c..058420562020 100644 > --- a/drivers/clk/clk-conf.c > +++ b/drivers/clk/clk-conf.c > @@ -81,13 +81,11 @@ static int __set_clk_parents(struct device_node *node, bool clk_supplier) > static int __set_clk_rates(struct device_node *node, bool clk_supplier) > { > struct of_phandle_args clkspec; > - struct property *prop; > - const __be32 *cur; > int rc, index = 0; > struct clk *clk; > u32 rate; > > - of_property_for_each_u32(node, "assigned-clock-rates", prop, cur, rate) { > + of_property_for_each_u32(node, "assigned-clock-rates", rate) { > if (rate) { > rc = of_parse_phandle_with_args(node, "assigned-clocks", > "#clock-cells", index, &clkspec); > diff --git a/drivers/clk/clk-si5351.c b/drivers/clk/clk-si5351.c > index 4ce83c5265b8..a4c92c5ef3ff 100644 > --- a/drivers/clk/clk-si5351.c > +++ b/drivers/clk/clk-si5351.c > @@ -1175,8 +1175,8 @@ static int si5351_dt_parse(struct i2c_client *client, > { > struct device_node *child, *np = client->dev.of_node; > struct si5351_platform_data *pdata; > - struct property *prop; > - const __be32 *p; > + u32 array[4]; > + int sz, i; > int num = 0; > u32 val; > > @@ -1191,20 +1191,24 @@ static int si5351_dt_parse(struct i2c_client *client, > * property silabs,pll-source : , [<..>] > * allow to selectively set pll source > */ > - of_property_for_each_u32(np, "silabs,pll-source", prop, p, num) { > + sz = of_property_read_variable_u32_array(np, "silabs,pll-source", array, 2, 4); > + sz = (sz == -EINVAL) ? 0 : sz; /* Missing property is OK */ > + if (sz < 0) > + return dev_err_probe(&client->dev, sz, "invalid pll-source\n"); > + if (sz % 2) > + return dev_err_probe(&client->dev, -EINVAL, > + "missing pll-source for pll %d\n", array[sz - 1]); > + > + for (i = 0; i < sz; i += 2) { > + num = array[i]; > + val = array[i + 1]; > + > if (num >= 2) { > dev_err(&client->dev, > "invalid pll %d on pll-source prop\n", num); > return -EINVAL; > } > > - p = of_prop_next_u32(prop, p, &val); > - if (!p) { > - dev_err(&client->dev, > - "missing pll-source for pll %d\n", num); > - return -EINVAL; > - } > - > switch (val) { > case 0: > pdata->pll_src[num] = SI5351_PLL_SRC_XTAL; > @@ -1232,19 +1236,24 @@ static int si5351_dt_parse(struct i2c_client *client, > pdata->pll_reset[0] = true; > pdata->pll_reset[1] = true; > > - of_property_for_each_u32(np, "silabs,pll-reset-mode", prop, p, num) { > + sz = of_property_read_variable_u32_array(np, "silabs,pll-reset-mode", array, 2, 4); > + sz = (sz == -EINVAL) ? 0 : sz; /* Missing property is OK */ > + if (sz < 0) > + return dev_err_probe(&client->dev, sz, "invalid pll-reset-mode\n"); > + if (sz % 2) > + return dev_err_probe(&client->dev, -EINVAL, > + "missing pll-reset-mode for pll %d\n", array[sz - 1]); > + > + for (i = 0; i < sz; i += 2) { > + num = array[i]; > + val = array[i + 1]; > + > if (num >= 2) { > dev_err(&client->dev, > "invalid pll %d on pll-reset-mode prop\n", num); > return -EINVAL; > } > > - p = of_prop_next_u32(prop, p, &val); > - if (!p) { > - dev_err(&client->dev, > - "missing pll-reset-mode for pll %d\n", num); > - return -EINVAL; > - } > > switch (val) { > case 0: > diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c > index 8cca52be993f..285ed1ad8a37 100644 > --- a/drivers/clk/clk.c > +++ b/drivers/clk/clk.c > @@ -5364,9 +5364,8 @@ EXPORT_SYMBOL_GPL(of_clk_get_parent_count); > const char *of_clk_get_parent_name(const struct device_node *np, int index) > { > struct of_phandle_args clkspec; > - struct property *prop; > const char *clk_name; > - const __be32 *vp; > + bool found = false; > u32 pv; > int rc; > int count; > @@ -5383,15 +5382,16 @@ const char *of_clk_get_parent_name(const struct device_node *np, int index) > /* if there is an indices property, use it to transfer the index > * specified into an array offset for the clock-output-names property. > */ > - of_property_for_each_u32(clkspec.np, "clock-indices", prop, vp, pv) { > + of_property_for_each_u32(clkspec.np, "clock-indices", pv) { > if (index == pv) { > index = count; > + found = true; > break; > } > count++; > } > /* We went off the end of 'clock-indices' without finding it */ > - if (prop && !vp) > + if (of_property_present(clkspec.np, "clock-indices") && !found) > return NULL; > > if (of_property_read_string_index(clkspec.np, "clock-output-names", > @@ -5504,14 +5504,12 @@ static int parent_ready(struct device_node *np) > int of_clk_detect_critical(struct device_node *np, int index, > unsigned long *flags) > { > - struct property *prop; > - const __be32 *cur; > uint32_t idx; > > if (!np || !flags) > return -EINVAL; > > - of_property_for_each_u32(np, "clock-critical", prop, cur, idx) > + of_property_for_each_u32(np, "clock-critical", idx) > if (index == idx) > *flags |= CLK_IS_CRITICAL; > > diff --git a/drivers/clk/qcom/common.c b/drivers/clk/qcom/common.c > index 48f81e3a5e80..5aff92bf5913 100644 > --- a/drivers/clk/qcom/common.c > +++ b/drivers/clk/qcom/common.c > @@ -226,11 +226,9 @@ EXPORT_SYMBOL_GPL(qcom_cc_register_sleep_clk); > static void qcom_cc_drop_protected(struct device *dev, struct qcom_cc *cc) > { > struct device_node *np = dev->of_node; > - struct property *prop; > - const __be32 *p; > u32 i; > > - of_property_for_each_u32(np, "protected-clocks", prop, p, i) { > + of_property_for_each_u32(np, "protected-clocks", i) { > if (i >= cc->num_rclks) > continue; > > diff --git a/drivers/clk/sunxi/clk-simple-gates.c b/drivers/clk/sunxi/clk-simple-gates.c > index 0399627c226a..845efc1ec800 100644 > --- a/drivers/clk/sunxi/clk-simple-gates.c > +++ b/drivers/clk/sunxi/clk-simple-gates.c > @@ -21,11 +21,9 @@ static void __init sunxi_simple_gates_setup(struct device_node *node, > { > struct clk_onecell_data *clk_data; > const char *clk_parent, *clk_name; > - struct property *prop; > struct resource res; > void __iomem *clk_reg; > void __iomem *reg; > - const __be32 *p; > int number, i = 0, j; > u8 clk_bit; > u32 index; > @@ -47,7 +45,7 @@ static void __init sunxi_simple_gates_setup(struct device_node *node, > if (!clk_data->clks) > goto err_free_data; > > - of_property_for_each_u32(node, "clock-indices", prop, p, index) { > + of_property_for_each_u32(node, "clock-indices", index) { > of_property_read_string_index(node, "clock-output-names", > i, &clk_name); > > diff --git a/drivers/clk/sunxi/clk-sun8i-bus-gates.c b/drivers/clk/sunxi/clk-sun8i-bus-gates.c > index b87f331f63c9..8482ac8e5898 100644 > --- a/drivers/clk/sunxi/clk-sun8i-bus-gates.c > +++ b/drivers/clk/sunxi/clk-sun8i-bus-gates.c > @@ -24,11 +24,9 @@ static void __init sun8i_h3_bus_gates_init(struct device_node *node) > const char *parents[PARENT_MAX]; > struct clk_onecell_data *clk_data; > const char *clk_name; > - struct property *prop; > struct resource res; > void __iomem *clk_reg; > void __iomem *reg; > - const __be32 *p; > int number, i; > u8 clk_bit; > int index; > @@ -58,7 +56,7 @@ static void __init sun8i_h3_bus_gates_init(struct device_node *node) > goto err_free_data; > > i = 0; > - of_property_for_each_u32(node, "clock-indices", prop, p, index) { > + of_property_for_each_u32(node, "clock-indices", index) { > of_property_read_string_index(node, "clock-output-names", > i, &clk_name); > > diff --git a/drivers/clocksource/samsung_pwm_timer.c b/drivers/clocksource/samsung_pwm_timer.c > index 6e46781bc9ac..b9561e3f196c 100644 > --- a/drivers/clocksource/samsung_pwm_timer.c > +++ b/drivers/clocksource/samsung_pwm_timer.c > @@ -418,8 +418,6 @@ void __init samsung_pwm_clocksource_init(void __iomem *base, > static int __init samsung_pwm_alloc(struct device_node *np, > const struct samsung_pwm_variant *variant) > { > - struct property *prop; > - const __be32 *cur; > u32 val; > int i, ret; > > @@ -427,7 +425,7 @@ static int __init samsung_pwm_alloc(struct device_node *np, > for (i = 0; i < SAMSUNG_PWM_NUM; ++i) > pwm.irq[i] = irq_of_parse_and_map(np, i); > > - of_property_for_each_u32(np, "samsung,pwm-outputs", prop, cur, val) { > + of_property_for_each_u32(np, "samsung,pwm-outputs", val) { > if (val >= SAMSUNG_PWM_NUM) { > pr_warn("%s: invalid channel index in samsung,pwm-outputs property\n", __func__); > continue; > diff --git a/drivers/gpio/gpio-brcmstb.c b/drivers/gpio/gpio-brcmstb.c > index 8dce78ea7139..5762e517338e 100644 > --- a/drivers/gpio/gpio-brcmstb.c > +++ b/drivers/gpio/gpio-brcmstb.c > @@ -591,8 +591,6 @@ static int brcmstb_gpio_probe(struct platform_device *pdev) > void __iomem *reg_base; > struct brcmstb_gpio_priv *priv; > struct resource *res; > - struct property *prop; > - const __be32 *p; > u32 bank_width; > int num_banks = 0; > int num_gpios = 0; > @@ -636,8 +634,7 @@ static int brcmstb_gpio_probe(struct platform_device *pdev) > flags = BGPIOF_BIG_ENDIAN_BYTE_ORDER; > #endif > > - of_property_for_each_u32(np, "brcm,gpio-bank-widths", prop, p, > - bank_width) { > + of_property_for_each_u32(np, "brcm,gpio-bank-widths", bank_width) { > struct brcmstb_gpio_bank *bank; > struct gpio_chip *gc; > > diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c > index 95fa857e8aad..426e3c9f88a1 100644 > --- a/drivers/iio/adc/ti_am335x_adc.c > +++ b/drivers/iio/adc/ti_am335x_adc.c > @@ -564,13 +564,11 @@ static int tiadc_parse_dt(struct platform_device *pdev, > struct tiadc_device *adc_dev) > { > struct device_node *node = pdev->dev.of_node; > - struct property *prop; > - const __be32 *cur; > int channels = 0; > u32 val; > int i; > > - of_property_for_each_u32(node, "ti,adc-channels", prop, cur, val) { > + of_property_for_each_u32(node, "ti,adc-channels", val) { > adc_dev->channel_line[channels] = val; > > /* Set Default values for optional DT parameters */ > diff --git a/drivers/irqchip/irq-atmel-aic-common.c b/drivers/irqchip/irq-atmel-aic-common.c > index 072bd227b6c6..4525366d16d6 100644 > --- a/drivers/irqchip/irq-atmel-aic-common.c > +++ b/drivers/irqchip/irq-atmel-aic-common.c > @@ -111,8 +111,6 @@ static void __init aic_common_ext_irq_of_init(struct irq_domain *domain) > struct device_node *node = irq_domain_get_of_node(domain); > struct irq_chip_generic *gc; > struct aic_chip_data *aic; > - struct property *prop; > - const __be32 *p; > u32 hwirq; > > gc = irq_get_domain_generic_chip(domain, 0); > @@ -120,7 +118,7 @@ static void __init aic_common_ext_irq_of_init(struct irq_domain *domain) > aic = gc->private; > aic->ext_irqs |= 1; > > - of_property_for_each_u32(node, "atmel,external-irqs", prop, p, hwirq) { > + of_property_for_each_u32(node, "atmel,external-irqs", hwirq) { > gc = irq_get_domain_generic_chip(domain, hwirq); > if (!gc) { > pr_warn("AIC: external irq %d >= %d skip it\n", > diff --git a/drivers/irqchip/irq-pic32-evic.c b/drivers/irqchip/irq-pic32-evic.c > index 277240325cbc..eb6ca516a166 100644 > --- a/drivers/irqchip/irq-pic32-evic.c > +++ b/drivers/irqchip/irq-pic32-evic.c > @@ -190,13 +190,11 @@ static void __init pic32_ext_irq_of_init(struct irq_domain *domain) > { > struct device_node *node = irq_domain_get_of_node(domain); > struct evic_chip_data *priv = domain->host_data; > - struct property *prop; > - const __le32 *p; > u32 hwirq; > int i = 0; > const char *pname = "microchip,external-irqs"; > > - of_property_for_each_u32(node, pname, prop, p, hwirq) { > + of_property_for_each_u32(node, pname, hwirq) { > if (i >= ARRAY_SIZE(priv->ext_irqs)) { > pr_warn("More than %d external irq, skip rest\n", > ARRAY_SIZE(priv->ext_irqs)); > diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c > index 4bbd542d753e..0c1364d88469 100644 > --- a/drivers/mfd/ti_am335x_tscadc.c > +++ b/drivers/mfd/ti_am335x_tscadc.c > @@ -119,8 +119,6 @@ static int ti_tscadc_probe(struct platform_device *pdev) > struct clk *clk; > struct device_node *node; > struct mfd_cell *cell; > - struct property *prop; > - const __be32 *cur; > bool use_tsc = false, use_mag = false; > u32 val; > int err; > @@ -167,7 +165,7 @@ static int ti_tscadc_probe(struct platform_device *pdev) > } > > node = of_get_child_by_name(pdev->dev.of_node, "adc"); > - of_property_for_each_u32(node, "ti,adc-channels", prop, cur, val) { > + of_property_for_each_u32(node, "ti,adc-channels", val) { > adc_channels++; > if (val > 7) { > dev_err(&pdev->dev, " PIN numbers are 0..7 (not %d)\n", > diff --git a/drivers/pinctrl/nxp/pinctrl-s32cc.c b/drivers/pinctrl/nxp/pinctrl-s32cc.c > index f0cad2c501f7..08d80fb935b3 100644 > --- a/drivers/pinctrl/nxp/pinctrl-s32cc.c > +++ b/drivers/pinctrl/nxp/pinctrl-s32cc.c > @@ -735,9 +735,7 @@ static int s32_pinctrl_parse_groups(struct device_node *np, > struct s32_pin_group *grp, > struct s32_pinctrl_soc_info *info) > { > - const __be32 *p; > struct device *dev; > - struct property *prop; > unsigned int *pins, *sss; > int i, npins; > u32 pinmux; > @@ -768,7 +766,7 @@ static int s32_pinctrl_parse_groups(struct device_node *np, > return -ENOMEM; > > i = 0; > - of_property_for_each_u32(np, "pinmux", prop, p, pinmux) { > + of_property_for_each_u32(np, "pinmux", pinmux) { > pins[i] = get_pin_no(pinmux); > sss[i] = get_pin_func(pinmux); > > diff --git a/drivers/pinctrl/pinctrl-k210.c b/drivers/pinctrl/pinctrl-k210.c > index b6d1ed9ec9a3..f4dcfa56c9e5 100644 > --- a/drivers/pinctrl/pinctrl-k210.c > +++ b/drivers/pinctrl/pinctrl-k210.c > @@ -763,8 +763,6 @@ static int k210_pinctrl_dt_subnode_to_map(struct pinctrl_dev *pctldev, > unsigned int *reserved_maps, > unsigned int *num_maps) > { > - struct property *prop; > - const __be32 *p; > int ret, pinmux_groups; > u32 pinmux_group; > unsigned long *configs = NULL; > @@ -797,7 +795,7 @@ static int k210_pinctrl_dt_subnode_to_map(struct pinctrl_dev *pctldev, > if (ret < 0) > goto exit; > > - of_property_for_each_u32(np, "pinmux", prop, p, pinmux_group) { > + of_property_for_each_u32(np, "pinmux", pinmux_group) { > const char *group_name, *func_name; > u32 pin = FIELD_GET(K210_PG_PIN, pinmux_group); > u32 func = FIELD_GET(K210_PG_FUNC, pinmux_group); > diff --git a/drivers/pwm/pwm-samsung.c b/drivers/pwm/pwm-samsung.c > index efb60c9f0cb3..20734e7a216d 100644 > --- a/drivers/pwm/pwm-samsung.c > +++ b/drivers/pwm/pwm-samsung.c > @@ -510,8 +510,6 @@ static int pwm_samsung_parse_dt(struct pwm_chip *chip) > struct samsung_pwm_chip *our_chip = to_samsung_pwm_chip(chip); > struct device_node *np = pwmchip_parent(chip)->of_node; > const struct of_device_id *match; > - struct property *prop; > - const __be32 *cur; > u32 val; > > match = of_match_node(samsung_pwm_matches, np); > @@ -520,7 +518,7 @@ static int pwm_samsung_parse_dt(struct pwm_chip *chip) > > memcpy(&our_chip->variant, match->data, sizeof(our_chip->variant)); > > - of_property_for_each_u32(np, "samsung,pwm-outputs", prop, cur, val) { > + of_property_for_each_u32(np, "samsung,pwm-outputs", val) { > if (val >= SAMSUNG_PWM_NUM) { > dev_err(pwmchip_parent(chip), > "%s: invalid channel index in samsung,pwm-outputs property\n", > diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c > index e5974b8239c9..dab332681036 100644 > --- a/drivers/tty/sysrq.c > +++ b/drivers/tty/sysrq.c > @@ -770,8 +770,6 @@ static void sysrq_of_get_keyreset_config(void) > { > u32 key; > struct device_node *np; > - struct property *prop; > - const __be32 *p; > > np = of_find_node_by_path("/chosen/linux,sysrq-reset-seq"); > if (!np) { > @@ -782,7 +780,7 @@ static void sysrq_of_get_keyreset_config(void) > /* Reset in case a __weak definition was present */ > sysrq_reset_seq_len = 0; > > - of_property_for_each_u32(np, "keyset", prop, p, key) { > + of_property_for_each_u32(np, "keyset", key) { > if (key == KEY_RESERVED || key > KEY_MAX || > sysrq_reset_seq_len == SYSRQ_KEY_RESET_MAX) > break; > diff --git a/drivers/usb/misc/usb251xb.c b/drivers/usb/misc/usb251xb.c > index 7da404f55a6d..3970bf9ca818 100644 > --- a/drivers/usb/misc/usb251xb.c > +++ b/drivers/usb/misc/usb251xb.c > @@ -382,11 +382,9 @@ static void usb251xb_get_ports_field(struct usb251xb *hub, > bool ds_only, u8 *fld) > { > struct device *dev = hub->dev; > - struct property *prop; > - const __be32 *p; > u32 port; > > - of_property_for_each_u32(dev->of_node, prop_name, prop, p, port) { > + of_property_for_each_u32(dev->of_node, prop_name, port) { > if ((port >= ds_only ? 1 : 0) && (port <= port_cnt)) > *fld |= BIT(port); > else > diff --git a/include/linux/of.h b/include/linux/of.h > index a0bedd038a05..13ad808bb8f7 100644 > --- a/include/linux/of.h > +++ b/include/linux/of.h > @@ -430,11 +430,9 @@ extern int of_detach_node(struct device_node *); > #define of_match_ptr(_ptr) (_ptr) > > /* > - * struct property *prop; > - * const __be32 *p; > * u32 u; > * > - * of_property_for_each_u32(np, "propname", prop, p, u) > + * of_property_for_each_u32(np, "propname", u) > * printk("U32 value: %x\n", u); > */ > const __be32 *of_prop_next_u32(struct property *prop, const __be32 *cur, > @@ -1431,11 +1429,12 @@ static inline int of_property_read_s32(const struct device_node *np, > err == 0; \ > err = of_phandle_iterator_next(it)) > > -#define of_property_for_each_u32(np, propname, prop, p, u) \ > - for (prop = of_find_property(np, propname, NULL), \ > - p = of_prop_next_u32(prop, NULL, &u); \ > - p; \ > - p = of_prop_next_u32(prop, p, &u)) > +#define of_property_for_each_u32(np, propname, u) \ > + for (struct {struct property *prop; const __be32 *item; } _it = \ > + {of_find_property(np, propname, NULL), \ > + of_prop_next_u32(_it.prop, NULL, &u)}; \ > + _it.item; \ > + _it.item = of_prop_next_u32(_it.prop, _it.item, &u)) > > #define of_property_for_each_string(np, propname, prop, s) \ > for (prop = of_find_property(np, propname, NULL), \ > diff --git a/sound/soc/codecs/arizona.c b/sound/soc/codecs/arizona.c > index 7434aeeda292..402b9a2ff024 100644 > --- a/sound/soc/codecs/arizona.c > +++ b/sound/soc/codecs/arizona.c > @@ -2786,15 +2786,13 @@ int arizona_of_get_audio_pdata(struct arizona *arizona) > { > struct arizona_pdata *pdata = &arizona->pdata; > struct device_node *np = arizona->dev->of_node; > - struct property *prop; > - const __be32 *cur; > u32 val; > u32 pdm_val[ARIZONA_MAX_PDM_SPK]; > int ret; > int count = 0; > > count = 0; > - of_property_for_each_u32(np, "wlf,inmode", prop, cur, val) { > + of_property_for_each_u32(np, "wlf,inmode", val) { > if (count == ARRAY_SIZE(pdata->inmode)) > break; > > @@ -2803,7 +2801,7 @@ int arizona_of_get_audio_pdata(struct arizona *arizona) > } > > count = 0; > - of_property_for_each_u32(np, "wlf,dmic-ref", prop, cur, val) { > + of_property_for_each_u32(np, "wlf,dmic-ref", val) { > if (count == ARRAY_SIZE(pdata->dmic_ref)) > break; > > @@ -2812,7 +2810,7 @@ int arizona_of_get_audio_pdata(struct arizona *arizona) > } > > count = 0; > - of_property_for_each_u32(np, "wlf,out-mono", prop, cur, val) { > + of_property_for_each_u32(np, "wlf,out-mono", val) { > if (count == ARRAY_SIZE(pdata->out_mono)) > break; > > @@ -2821,7 +2819,7 @@ int arizona_of_get_audio_pdata(struct arizona *arizona) > } > > count = 0; > - of_property_for_each_u32(np, "wlf,max-channels-clocked", prop, cur, val) { > + of_property_for_each_u32(np, "wlf,max-channels-clocked", val) { > if (count == ARRAY_SIZE(pdata->max_channels_clocked)) > break; > > @@ -2830,7 +2828,7 @@ int arizona_of_get_audio_pdata(struct arizona *arizona) > } > > count = 0; > - of_property_for_each_u32(np, "wlf,out-volume-limit", prop, cur, val) { > + of_property_for_each_u32(np, "wlf,out-volume-limit", val) { > if (count == ARRAY_SIZE(pdata->out_vol_limit)) > break; > > > --- > base-commit: d2f2d929511d092e52f9e50371f8da76d8979a82 > change-id: 20240701-of_property_for_each_u32-460fd02a5d0c > > Best regards, > -- > Luca Ceresoli > -- Lee Jones [李琼斯]