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 X-Spam-Level: X-Spam-Status: No, score=-7.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 76725C433E6 for ; Sun, 7 Mar 2021 19:06:17 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3BEFD64E86 for ; Sun, 7 Mar 2021 19:06:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232046AbhCGTFk (ORCPT ); Sun, 7 Mar 2021 14:05:40 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33466 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231592AbhCGTFg (ORCPT ); Sun, 7 Mar 2021 14:05:36 -0500 Received: from mail-pg1-x52c.google.com (mail-pg1-x52c.google.com [IPv6:2607:f8b0:4864:20::52c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9A755C06174A; Sun, 7 Mar 2021 11:05:36 -0800 (PST) Received: by mail-pg1-x52c.google.com with SMTP id t25so4981270pga.2; Sun, 07 Mar 2021 11:05:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=6OopSw5D8ep2q2/dbMs+34bXsAVe5qvVqgXWtPVK+p0=; b=isQFK0hiYv6VN2fc5B8j6iJxbMapK7CSFtjIM+VwgPossPH2Wb42Yu6KrMataC0l3m pHK1Nsr5WmCjrw7gKLnW6tmQMGPx8rACcNdd/VdI1P9cwUQh9Hd6C36wYdXEQgJdYjYF Vu/EPblMCm+I4x9TBJhu327DLCjfpAGT6EBj6VpV4dOxVYBZ0pzNZ+hZg5ZoX9PZu2tY vF7WVmp+rgjVvfTWZ906znyrpWWeT/3i3lN/JqcGoWzHzZ7Awn0s68ogeOo/xyUQ/4AK URMDZFd9y4g2KqongEhPW5ELy/hTgWpxlVHgiFSTGPSAjP6lsN2GU7lJDR1zuxySU+nw ulJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=6OopSw5D8ep2q2/dbMs+34bXsAVe5qvVqgXWtPVK+p0=; b=MWSpJftua7vEn/b0Quo5OlEHRqqfnRVBQtpgb6Sd/ns8RgIvAE/5v3p7cEy7frzMEP FDd+w5OH00WNJRo02ZqrBawr35CJJNTnP46Kxj1xYUjc9bpUlg87dSin2bj7vW6ISHh0 ZrADoATNT5D3XCu5K+Id2ExtE/tsA0/8P8ZokBfic23ukuYc1gII/RIhOwwMnh2Jg9T/ YO7EI2qLZK1VBfUAPHEOZoQNA9w1abdB64W8JWD2Gfn2SDNBPYvKqTDcEPnCF6GL7nJq /7fgvhIxlj7vRiWLKHo8XWTKP3wlwqSW98qWS1eg3WUAxETkVA55IAVR4s2W6yEAfP4U SVdw== X-Gm-Message-State: AOAM532riAtNBwnbHWvXOia3hRLeB3gsic6bZ+mhsFfMzmqU3j1vCRPt Y11ON/ylIPDWgRO+jAfx9YLI7v/JEZlToesgPjI= X-Google-Smtp-Source: ABdhPJxZugS/AtpXgTFu6XJ6VxJbgAYkkSqb2BomvwTTqEG2l/My8fZS4KbhuaEgVaVIIJpmYra6PYX9yfCCVGnwW3o= X-Received: by 2002:a63:ce15:: with SMTP id y21mr17755594pgf.4.1615143936052; Sun, 07 Mar 2021 11:05:36 -0800 (PST) MIME-Version: 1.0 References: <20210306155712.4298-1-noltari@gmail.com> <20210306155712.4298-4-noltari@gmail.com> In-Reply-To: <20210306155712.4298-4-noltari@gmail.com> From: Andy Shevchenko Date: Sun, 7 Mar 2021 21:05:19 +0200 Message-ID: Subject: Re: [PATCH v5 03/15] pinctrl: bcm: add bcm63xx base code To: =?UTF-8?B?w4FsdmFybyBGZXJuw6FuZGV6IFJvamFz?= Cc: Linus Walleij , Rob Herring , Michael Walle , Bartosz Golaszewski , Florian Fainelli , bcm-kernel-feedback-list , Jonas Gorski , Necip Fazil Yildiran , "open list:GPIO SUBSYSTEM" , devicetree , Linux Kernel Mailing List , linux-arm Mailing List Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org On Sat, Mar 6, 2021 at 5:57 PM =C3=81lvaro Fern=C3=A1ndez Rojas wrote: > > Add a helper for registering BCM63XX pin controllers. Thanks for this, but I think we may use the fwnode API. See below. ... > +#include > +#include > +#include + property.h + mod_devicetable.h > +#include > + > +#include "pinctrl-bcm63xx.h" > +static int bcm63xx_reg_mask_xlate(struct gpio_regmap *gpio, > + unsigned int base, unsigned int offset, > + unsigned int *reg, unsigned int *mask) > +{ > + unsigned int line =3D offset % BCM63XX_BANK_GPIOS; > + unsigned int stride =3D offset / BCM63XX_BANK_GPIOS; > + > + *reg =3D base - stride * BCM63XX_BANK_SIZE; > + *mask =3D BIT(line); > + > + return 0; > +} > +static int bcm63xx_gpio_probe(struct device *dev, struct device_node *no= de, device_node *node -> fwnode_handle *fwnode > + const struct bcm63xx_pinctrl_soc *soc, > + struct bcm63xx_pinctrl *pc) > +{ > + struct gpio_regmap_config grc =3D {0}; > + > + grc.parent =3D dev; > + grc.fwnode =3D &node->fwnode; grc.fwnode =3D fwnode; > + grc.ngpio =3D soc->ngpios; > + grc.ngpio_per_reg =3D BCM63XX_BANK_GPIOS; > + grc.regmap =3D pc->regs; > + grc.reg_mask_xlate =3D bcm63xx_reg_mask_xlate; > + if (of_property_read_u32(node, "data", &grc.reg_dat_base)) fwnode_property_read_u32() > + grc.reg_dat_base =3D BCM63XX_DATA_REG; > + grc.reg_set_base =3D grc.reg_dat_base; > + if (of_property_read_u32(node, "dirout", &grc.reg_dir_out_base)) Ditto. > + grc.reg_dir_out_base =3D BCM63XX_DIROUT_REG; > + > + return PTR_ERR_OR_ZERO(devm_gpio_regmap_register(dev, &grc)); > +} > + > +int bcm63xx_pinctrl_probe(struct platform_device *pdev, > + const struct bcm63xx_pinctrl_soc *soc, > + void *driver_data) > +{ > + struct device *dev =3D &pdev->dev; > + struct bcm63xx_pinctrl *pc; > + struct device_node *node; struct fwnode_handle *fwnode; > + int err; > + > + pc =3D devm_kzalloc(dev, sizeof(*pc), GFP_KERNEL); > + if (!pc) > + return -ENOMEM; > + > + platform_set_drvdata(pdev, pc); > + > + pc->dev =3D dev; > + pc->driver_data =3D driver_data; > + pc->regs =3D syscon_node_to_regmap(dev->parent->of_node); > + if (IS_ERR(pc->regs)) > + return PTR_ERR(pc->regs); > + > + pc->pctl_desc.name =3D dev_name(dev); > + pc->pctl_desc.pins =3D soc->pins; > + pc->pctl_desc.npins =3D soc->npins; > + pc->pctl_desc.pctlops =3D soc->pctl_ops; > + pc->pctl_desc.pmxops =3D soc->pmx_ops; > + pc->pctl_desc.owner =3D THIS_MODULE; > + > + pc->pctl_dev =3D devm_pinctrl_register(dev, &pc->pctl_desc, pc); > + if (IS_ERR(pc->pctl_dev)) > + return PTR_ERR(pc->pctl_dev); > + for_each_child_of_node(dev->of_node, node) { device_for_each_child_node(dev, fwnode) { > + if (of_match_node(bcm63xx_gpio_of_match, node)) { // for now, since we have not an analogue (yet) node =3D=3D> to_of_node(fwnode) > + err =3D bcm63xx_gpio_probe(dev, node, soc, pc); ...(dev, fwnode, soc, pc); > + if (err) { > + dev_err(dev, "could not add GPIO chip\n")= ; > + of_node_put(node); fwnode_handle_put(fwnode); > + return err; > + } > + } > + } > + > + return 0; > +} > diff --git a/drivers/pinctrl/bcm/pinctrl-bcm63xx.h b/drivers/pinctrl/bcm/= pinctrl-bcm63xx.h > new file mode 100644 > index 000000000000..3bdb50021f1b > --- /dev/null > +++ b/drivers/pinctrl/bcm/pinctrl-bcm63xx.h > @@ -0,0 +1,43 @@ > +// SPDX-License-Identifier: GPL-2.0+ > +/* > + * Copyright (C) 2021 =C3=81lvaro Fern=C3=A1ndez Rojas > + * Copyright (C) 2016 Jonas Gorski > + */ > + > +#ifndef __PINCTRL_BCM63XX_H__ > +#define __PINCTRL_BCM63XX_H__ > + > +#include > + > +#define BCM63XX_BANK_GPIOS 32 > + > +struct bcm63xx_pinctrl_soc { > + struct pinctrl_ops *pctl_ops; > + struct pinmux_ops *pmx_ops; > + > + const struct pinctrl_pin_desc *pins; > + unsigned npins; > + > + unsigned int ngpios; > +}; > + > +struct bcm63xx_pinctrl { > + struct device *dev; > + struct regmap *regs; > + > + struct pinctrl_desc pctl_desc; > + struct pinctrl_dev *pctl_dev; > + > + void *driver_data; > +}; > + > +static inline unsigned int bcm63xx_bank_pin(unsigned int pin) > +{ > + return pin % BCM63XX_BANK_GPIOS; > +} > + > +int bcm63xx_pinctrl_probe(struct platform_device *pdev, > + const struct bcm63xx_pinctrl_soc *soc, > + void *driver_data); > + > +#endif /* __PINCTRL_BCM63XX_H__ */ > -- > 2.20.1 > -- With Best Regards, Andy Shevchenko 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 X-Spam-Level: X-Spam-Status: No, score=-5.7 required=3.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9DF70C433DB for ; Sun, 7 Mar 2021 19:07:30 +0000 (UTC) Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 27BF364EF4 for ; Sun, 7 Mar 2021 19:07:30 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 27BF364EF4 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=desiato.20200630; h=Sender:Content-Transfer-Encoding :Content-Type:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:Cc:To:Subject:Message-ID:Date:From:In-Reply-To: References:MIME-Version:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=70SMXlVFK6mB/zYN7X7NL+JyvGoyEZTPYgIcsoMLT94=; b=mlp8h4oFYPLGMWAx07iTKhdl8 TSlBWbwQs1KYu5aJXGvF1X1jPrqUDXAJTCLB53fq5sMqqcZiiSsV2r6ls84XbefFT7qSjMMWCKK6D cKFGZbdpzbFnyvhrDVsjQ41831jXFVpgnIsyrA+iMz7EnsLgkToHB4s1rfR/BdJEQutjWKgrcDiDp WRFKzub7PTM9/A4oW+GBs8gQ6WhDXHFP2rnsvkVrwSZ547Hi/IH6GT20Se2oIrsX61jUxEKuNdrmy IW/Xy0n9Njgn3vdcCyPtZMwN708gywbiefzG4LpXtf55ZdY2WxL7i4SLpmuYsz4PRIq/LtrGalvwW kbg2+Zc9w==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lIyik-00BqYH-IJ; Sun, 07 Mar 2021 19:05:42 +0000 Received: from mail-pg1-x531.google.com ([2607:f8b0:4864:20::531]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lIyig-00BqVg-6j for linux-arm-kernel@lists.infradead.org; Sun, 07 Mar 2021 19:05:40 +0000 Received: by mail-pg1-x531.google.com with SMTP id w34so3917717pga.8 for ; Sun, 07 Mar 2021 11:05:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=6OopSw5D8ep2q2/dbMs+34bXsAVe5qvVqgXWtPVK+p0=; b=isQFK0hiYv6VN2fc5B8j6iJxbMapK7CSFtjIM+VwgPossPH2Wb42Yu6KrMataC0l3m pHK1Nsr5WmCjrw7gKLnW6tmQMGPx8rACcNdd/VdI1P9cwUQh9Hd6C36wYdXEQgJdYjYF Vu/EPblMCm+I4x9TBJhu327DLCjfpAGT6EBj6VpV4dOxVYBZ0pzNZ+hZg5ZoX9PZu2tY vF7WVmp+rgjVvfTWZ906znyrpWWeT/3i3lN/JqcGoWzHzZ7Awn0s68ogeOo/xyUQ/4AK URMDZFd9y4g2KqongEhPW5ELy/hTgWpxlVHgiFSTGPSAjP6lsN2GU7lJDR1zuxySU+nw ulJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=6OopSw5D8ep2q2/dbMs+34bXsAVe5qvVqgXWtPVK+p0=; b=ZHPuz9U6GzxEXqq5zmiIuZ3xeHfzpbWlT2FuAGi8wyCkDpUy6iPJlbF8oygWPsYw/Z XvQT4ao4Yq/4O3Jf6ZWwE+/HfyedLv+DP/34mz1VnWPyFYKy1Zzia6BcMLto4ILj7Gbe cRbi12XF2hJ/KWmZdUQCPvlM07I0cC+PSoAoHnNJwX4y2YyTTO3aUCm2tVvPywuhK9AB 7E/iP4dK4bffrlJyrrYgpuj8ThpJ7fXPs1CXZHx9dMlqkeqgejAEuppNmpQ+NMQWDLMp 7bNU/0LKluQ7u8YHix/YJGBQM/j7huW9aFpIFctHVsKtOiSPeSEDFZTyOcT2Xn375VKb 26Rg== X-Gm-Message-State: AOAM530PqNmOhfvQ7tI2tHZhHUbernb0OOZnv7lnRLZI2huFjEleC9u2 dhp/M2wu6k+4q/6IJnDMQ6XQXSl9O0t1c6iPkVg= X-Google-Smtp-Source: ABdhPJxZugS/AtpXgTFu6XJ6VxJbgAYkkSqb2BomvwTTqEG2l/My8fZS4KbhuaEgVaVIIJpmYra6PYX9yfCCVGnwW3o= X-Received: by 2002:a63:ce15:: with SMTP id y21mr17755594pgf.4.1615143936052; Sun, 07 Mar 2021 11:05:36 -0800 (PST) MIME-Version: 1.0 References: <20210306155712.4298-1-noltari@gmail.com> <20210306155712.4298-4-noltari@gmail.com> In-Reply-To: <20210306155712.4298-4-noltari@gmail.com> From: Andy Shevchenko Date: Sun, 7 Mar 2021 21:05:19 +0200 Message-ID: Subject: Re: [PATCH v5 03/15] pinctrl: bcm: add bcm63xx base code To: =?UTF-8?B?w4FsdmFybyBGZXJuw6FuZGV6IFJvamFz?= Cc: Linus Walleij , Rob Herring , Michael Walle , Bartosz Golaszewski , Florian Fainelli , bcm-kernel-feedback-list , Jonas Gorski , Necip Fazil Yildiran , "open list:GPIO SUBSYSTEM" , devicetree , Linux Kernel Mailing List , linux-arm Mailing List X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210307_190538_339287_ECDD05B8 X-CRM114-Status: GOOD ( 19.73 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gU2F0LCBNYXIgNiwgMjAyMSBhdCA1OjU3IFBNIMOBbHZhcm8gRmVybsOhbmRleiBSb2phcyA8 bm9sdGFyaUBnbWFpbC5jb20+IHdyb3RlOgo+Cj4gQWRkIGEgaGVscGVyIGZvciByZWdpc3Rlcmlu ZyBCQ002M1hYIHBpbiBjb250cm9sbGVycy4KClRoYW5rcyBmb3IgdGhpcywgYnV0IEkgdGhpbmsg d2UgbWF5IHVzZSB0aGUgZndub2RlIEFQSS4gU2VlIGJlbG93LgoKLi4uCgo+ICsjaW5jbHVkZSA8 bGludXgvZ3Bpby9yZWdtYXAuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KCj4g KyNpbmNsdWRlIDxsaW51eC9vZi5oPgoKKyBwcm9wZXJ0eS5oCisgbW9kX2RldmljZXRhYmxlLmgK Cj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPiArCj4gKyNpbmNsdWRlICJw aW5jdHJsLWJjbTYzeHguaCIKCj4gK3N0YXRpYyBpbnQgYmNtNjN4eF9yZWdfbWFza194bGF0ZShz dHJ1Y3QgZ3Bpb19yZWdtYXAgKmdwaW8sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBiYXNlLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKnJlZywgdW5zaWduZWQgaW50ICpt YXNrKQo+ICt7Cj4gKyAgICAgICB1bnNpZ25lZCBpbnQgbGluZSA9IG9mZnNldCAlIEJDTTYzWFhf QkFOS19HUElPUzsKPiArICAgICAgIHVuc2lnbmVkIGludCBzdHJpZGUgPSBvZmZzZXQgLyBCQ002 M1hYX0JBTktfR1BJT1M7Cj4gKwo+ICsgICAgICAgKnJlZyA9IGJhc2UgLSBzdHJpZGUgKiBCQ002 M1hYX0JBTktfU0laRTsKPiArICAgICAgICptYXNrID0gQklUKGxpbmUpOwo+ICsKPiArICAgICAg IHJldHVybiAwOwo+ICt9Cgo+ICtzdGF0aWMgaW50IGJjbTYzeHhfZ3Bpb19wcm9iZShzdHJ1Y3Qg ZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKCmRldmljZV9ub2RlICpub2Rl IC0+IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZQoKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBzdHJ1Y3QgYmNtNjN4eF9waW5jdHJsX3NvYyAqc29jLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBiY202M3h4X3BpbmN0cmwgKnBjKQo+ICt7Cj4gKyAgICAg ICBzdHJ1Y3QgZ3Bpb19yZWdtYXBfY29uZmlnIGdyYyA9IHswfTsKPiArCj4gKyAgICAgICBncmMu cGFyZW50ID0gZGV2OwoKPiArICAgICAgIGdyYy5md25vZGUgPSAmbm9kZS0+Zndub2RlOwoKZ3Jj LmZ3bm9kZSA9IGZ3bm9kZTsKCj4gKyAgICAgICBncmMubmdwaW8gPSBzb2MtPm5ncGlvczsKPiAr ICAgICAgIGdyYy5uZ3Bpb19wZXJfcmVnID0gQkNNNjNYWF9CQU5LX0dQSU9TOwo+ICsgICAgICAg Z3JjLnJlZ21hcCA9IHBjLT5yZWdzOwo+ICsgICAgICAgZ3JjLnJlZ19tYXNrX3hsYXRlID0gYmNt NjN4eF9yZWdfbWFza194bGF0ZTsKCj4gKyAgICAgICBpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIo bm9kZSwgImRhdGEiLCAmZ3JjLnJlZ19kYXRfYmFzZSkpCgpmd25vZGVfcHJvcGVydHlfcmVhZF91 MzIoKQoKPiArICAgICAgICAgICAgICAgZ3JjLnJlZ19kYXRfYmFzZSA9IEJDTTYzWFhfREFUQV9S RUc7Cj4gKyAgICAgICBncmMucmVnX3NldF9iYXNlID0gZ3JjLnJlZ19kYXRfYmFzZTsKCj4gKyAg ICAgICBpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgImRpcm91dCIsICZncmMucmVnX2Rp cl9vdXRfYmFzZSkpCgpEaXR0by4KCj4gKyAgICAgICAgICAgICAgIGdyYy5yZWdfZGlyX291dF9i YXNlID0gQkNNNjNYWF9ESVJPVVRfUkVHOwo+ICsKPiArICAgICAgIHJldHVybiBQVFJfRVJSX09S X1pFUk8oZGV2bV9ncGlvX3JlZ21hcF9yZWdpc3RlcihkZXYsICZncmMpKTsKPiArfQo+ICsKPiAr aW50IGJjbTYzeHhfcGluY3RybF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGJjbTYzeHhfcGluY3RybF9z b2MgKnNvYywKPiArICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRyaXZlcl9kYXRhKQo+ ICt7Cj4gKyAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owo+ICsgICAgICAg c3RydWN0IGJjbTYzeHhfcGluY3RybCAqcGM7Cgo+ICsgICAgICAgc3RydWN0IGRldmljZV9ub2Rl ICpub2RlOwoKc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZTsKCj4gKyAgICAgICBpbnQgZXJy Owo+ICsKPiArICAgICAgIHBjID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwYyksIEdGUF9L RVJORUwpOwo+ICsgICAgICAgaWYgKCFwYykKPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9N RU07Cj4gKwo+ICsgICAgICAgcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcGMpOwo+ICsKPiAr ICAgICAgIHBjLT5kZXYgPSBkZXY7Cj4gKyAgICAgICBwYy0+ZHJpdmVyX2RhdGEgPSBkcml2ZXJf ZGF0YTsKCj4gKyAgICAgICBwYy0+cmVncyA9IHN5c2Nvbl9ub2RlX3RvX3JlZ21hcChkZXYtPnBh cmVudC0+b2Zfbm9kZSk7Cj4gKyAgICAgICBpZiAoSVNfRVJSKHBjLT5yZWdzKSkKPiArICAgICAg ICAgICAgICAgcmV0dXJuIFBUUl9FUlIocGMtPnJlZ3MpOwo+ICsKPiArICAgICAgIHBjLT5wY3Rs X2Rlc2MubmFtZSA9IGRldl9uYW1lKGRldik7Cj4gKyAgICAgICBwYy0+cGN0bF9kZXNjLnBpbnMg PSBzb2MtPnBpbnM7Cj4gKyAgICAgICBwYy0+cGN0bF9kZXNjLm5waW5zID0gc29jLT5ucGluczsK PiArICAgICAgIHBjLT5wY3RsX2Rlc2MucGN0bG9wcyA9IHNvYy0+cGN0bF9vcHM7Cj4gKyAgICAg ICBwYy0+cGN0bF9kZXNjLnBteG9wcyA9IHNvYy0+cG14X29wczsKPiArICAgICAgIHBjLT5wY3Rs X2Rlc2Mub3duZXIgPSBUSElTX01PRFVMRTsKPiArCj4gKyAgICAgICBwYy0+cGN0bF9kZXYgPSBk ZXZtX3BpbmN0cmxfcmVnaXN0ZXIoZGV2LCAmcGMtPnBjdGxfZGVzYywgcGMpOwo+ICsgICAgICAg aWYgKElTX0VSUihwYy0+cGN0bF9kZXYpKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gUFRSX0VS UihwYy0+cGN0bF9kZXYpOwoKPiArICAgICAgIGZvcl9lYWNoX2NoaWxkX29mX25vZGUoZGV2LT5v Zl9ub2RlLCBub2RlKSB7CgpkZXZpY2VfZm9yX2VhY2hfY2hpbGRfbm9kZShkZXYsIGZ3bm9kZSkg ewoKPiArICAgICAgICAgICAgICAgaWYgKG9mX21hdGNoX25vZGUoYmNtNjN4eF9ncGlvX29mX21h dGNoLCBub2RlKSkgewoKLy8gZm9yIG5vdywgc2luY2Ugd2UgaGF2ZSBub3QgYW4gYW5hbG9ndWUg KHlldCkKbm9kZSA9PT4gdG9fb2Zfbm9kZShmd25vZGUpCgo+ICsgICAgICAgICAgICAgICAgICAg ICAgIGVyciA9IGJjbTYzeHhfZ3Bpb19wcm9iZShkZXYsIG5vZGUsIHNvYywgcGMpOwoKLi4uKGRl diwgZndub2RlLCBzb2MsIHBjKTsKCj4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikg ewo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycihkZXYsICJjb3VsZCBu b3QgYWRkIEdQSU8gY2hpcFxuIik7Cgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg b2Zfbm9kZV9wdXQobm9kZSk7Cgpmd25vZGVfaGFuZGxlX3B1dChmd25vZGUpOwoKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Cj4gKyAgICAgICAgICAgICAgICAg ICAgICAgfQo+ICsgICAgICAgICAgICAgICB9Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgcmV0 dXJuIDA7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL2JjbS9waW5jdHJsLWJj bTYzeHguaCBiL2RyaXZlcnMvcGluY3RybC9iY20vcGluY3RybC1iY202M3h4LmgKPiBuZXcgZmls ZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uM2JkYjUwMDIxZjFiCj4gLS0tIC9k ZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvcGluY3RybC9iY20vcGluY3RybC1iY202M3h4LmgKPiBA QCAtMCwwICsxLDQzIEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKwo+ ICsvKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMjEgw4FsdmFybyBGZXJuw6FuZGV6IFJvamFzIDxu b2x0YXJpQGdtYWlsLmNvbT4KPiArICogQ29weXJpZ2h0IChDKSAyMDE2IEpvbmFzIEdvcnNraSA8 am9uYXMuZ29yc2tpQGdtYWlsLmNvbT4KPiArICovCj4gKwo+ICsjaWZuZGVmIF9fUElOQ1RSTF9C Q002M1hYX0hfXwo+ICsjZGVmaW5lIF9fUElOQ1RSTF9CQ002M1hYX0hfXwo+ICsKPiArI2luY2x1 ZGUgPGxpbnV4L3BpbmN0cmwvcGluY3RybC5oPgo+ICsKPiArI2RlZmluZSBCQ002M1hYX0JBTktf R1BJT1MgMzIKPiArCj4gK3N0cnVjdCBiY202M3h4X3BpbmN0cmxfc29jIHsKPiArICAgICAgIHN0 cnVjdCBwaW5jdHJsX29wcyAqcGN0bF9vcHM7Cj4gKyAgICAgICBzdHJ1Y3QgcGlubXV4X29wcyAq cG14X29wczsKPiArCj4gKyAgICAgICBjb25zdCBzdHJ1Y3QgcGluY3RybF9waW5fZGVzYyAqcGlu czsKPiArICAgICAgIHVuc2lnbmVkIG5waW5zOwo+ICsKPiArICAgICAgIHVuc2lnbmVkIGludCBu Z3Bpb3M7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgYmNtNjN4eF9waW5jdHJsIHsKPiArICAgICAgIHN0 cnVjdCBkZXZpY2UgKmRldjsKPiArICAgICAgIHN0cnVjdCByZWdtYXAgKnJlZ3M7Cj4gKwo+ICsg ICAgICAgc3RydWN0IHBpbmN0cmxfZGVzYyBwY3RsX2Rlc2M7Cj4gKyAgICAgICBzdHJ1Y3QgcGlu Y3RybF9kZXYgKnBjdGxfZGV2Owo+ICsKPiArICAgICAgIHZvaWQgKmRyaXZlcl9kYXRhOwo+ICt9 Owo+ICsKPiArc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYmNtNjN4eF9iYW5rX3Bpbih1bnNp Z25lZCBpbnQgcGluKQo+ICt7Cj4gKyAgICAgICByZXR1cm4gcGluICUgQkNNNjNYWF9CQU5LX0dQ SU9TOwo+ICt9Cj4gKwo+ICtpbnQgYmNtNjN4eF9waW5jdHJsX3Byb2JlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qg YmNtNjN4eF9waW5jdHJsX3NvYyAqc29jLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgdm9p ZCAqZHJpdmVyX2RhdGEpOwo+ICsKPiArI2VuZGlmIC8qIF9fUElOQ1RSTF9CQ002M1hYX0hfXyAq Lwo+IC0tCj4gMi4yMC4xCj4KCgotLQpXaXRoIEJlc3QgUmVnYXJkcywKQW5keSBTaGV2Y2hlbmtv CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1h cm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5v cmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0t a2VybmVsCg==