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=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable 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 A4FDEC4332E for ; Sat, 6 Mar 2021 15:58:19 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 882CD65022 for ; Sat, 6 Mar 2021 15:58:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231174AbhCFP5r (ORCPT ); Sat, 6 Mar 2021 10:57:47 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50920 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230461AbhCFP5S (ORCPT ); Sat, 6 Mar 2021 10:57:18 -0500 Received: from mail-wr1-x42b.google.com (mail-wr1-x42b.google.com [IPv6:2a00:1450:4864:20::42b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A6842C06175F; Sat, 6 Mar 2021 07:57:17 -0800 (PST) Received: by mail-wr1-x42b.google.com with SMTP id u14so5963098wri.3; Sat, 06 Mar 2021 07:57:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=RtvYoKdx8w9T7nCZXjDJ+e7ffNXHqzVkfLQSRgUpMkk=; b=DIJN31KU6wKdZxkod/kcycggjctUK/X8Q5LcO993E9SAkTBRdnVQ3zOCJ75iHzddjH yVBDeGvbt1gbQL+jjARFRSJ4s95QwRZkA8xrh6LiiqOuemO84sHg286UhLhpxlQnrdh5 DNmU2be3sJashx3NUD41VjBENhjB5bojA6ze9DY30xeNb6+LvTgDGtlHWXBjfMZHur9x dMC+jMHGdsGluawI5qJSBXDQH+pvmmFQiGIbuqYaGYsXZo0jyICevywToXVDiF9ega1Q TZk01D0lsS1hv6VJ9f1YCdrNdaiysJkoxwAfwTp6wusJUN1TenxoqVn6MoZ70F6ypS4r kcvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=RtvYoKdx8w9T7nCZXjDJ+e7ffNXHqzVkfLQSRgUpMkk=; b=lWwA8fbkDxyn8LIxxkPfZvLvQbTDF+wKw+wWQEi98N/F65zh+yyYd8PiUj9vKcUGe4 hnhKrMeWGgl6VOC+rK1Y52R1sHRfUvt7K31PhGnVvGsqsVUW6HGyj8Wg2Jv1nIiBxlgA eZnZzA3QUZMa5MuzpfX/IAwkmlphz1MFjeXHuhrpz2Euiwpf48SGz9m3S4Cn/LBsrYfK 2e9/o3l2Ks8icZpllWOlw+NcGQP669oM2OORJ8WcUtr9iuKfK9JiyA6G2xOj6H7nVhjI HJ2KtRlkAnqKZU81lMzaLoSX623nHLAun6vlyu3QN1uQG9KbddIYouEVr+VI+Zkq+0fF ZmCg== X-Gm-Message-State: AOAM533fFs1w3p55bBEiXeWfPey79tXQKxsYIIQA3WWPjZlLSsidqRIN Mg5SH+6JJq22peUQGZf3A8o= X-Google-Smtp-Source: ABdhPJyg9wd28aIKCB7Qr5i2k3Uonygdv4vLzg03mrNoStf/cbevsvXVu5iPt5lqKZ3Y279TAxj+5w== X-Received: by 2002:a5d:6c69:: with SMTP id r9mr14531922wrz.11.1615046236423; Sat, 06 Mar 2021 07:57:16 -0800 (PST) Received: from skynet.lan (224.red-2-138-103.dynamicip.rima-tde.net. [2.138.103.224]) by smtp.gmail.com with ESMTPSA id p6sm9315188wru.2.2021.03.06.07.57.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 06 Mar 2021 07:57:16 -0800 (PST) From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= To: Linus Walleij , Rob Herring , Michael Walle , Bartosz Golaszewski , Florian Fainelli , bcm-kernel-feedback-list@broadcom.com, Jonas Gorski , =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= , Necip Fazil Yildiran , Andy Shevchenko , linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v5 03/15] pinctrl: bcm: add bcm63xx base code Date: Sat, 6 Mar 2021 16:57:00 +0100 Message-Id: <20210306155712.4298-4-noltari@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210306155712.4298-1-noltari@gmail.com> References: <20210306155712.4298-1-noltari@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org Add a helper for registering BCM63XX pin controllers. Signed-off-by: Jonas Gorski Co-developed-by: Jonas Gorski Signed-off-by: Álvaro Fernández Rojas --- v5: add changes suggested by Andy Shevchenko v4: drop IRQ selects from Kconfig and add missing of_node_put() v3: add new patch with shared code drivers/pinctrl/bcm/Kconfig | 7 ++ drivers/pinctrl/bcm/Makefile | 1 + drivers/pinctrl/bcm/pinctrl-bcm63xx.c | 112 ++++++++++++++++++++++++++ drivers/pinctrl/bcm/pinctrl-bcm63xx.h | 43 ++++++++++ 4 files changed, 163 insertions(+) create mode 100644 drivers/pinctrl/bcm/pinctrl-bcm63xx.c create mode 100644 drivers/pinctrl/bcm/pinctrl-bcm63xx.h diff --git a/drivers/pinctrl/bcm/Kconfig b/drivers/pinctrl/bcm/Kconfig index 0ed14de0134c..882f19bdc243 100644 --- a/drivers/pinctrl/bcm/Kconfig +++ b/drivers/pinctrl/bcm/Kconfig @@ -29,6 +29,13 @@ config PINCTRL_BCM2835 help Say Y here to enable the Broadcom BCM2835 GPIO driver. +config PINCTRL_BCM63XX + bool + select GENERIC_PINCONF + select GPIO_REGMAP + select PINCONF + select PINMUX + config PINCTRL_IPROC_GPIO bool "Broadcom iProc GPIO (with PINCONF) driver" depends on OF_GPIO && (ARCH_BCM_IPROC || COMPILE_TEST) diff --git a/drivers/pinctrl/bcm/Makefile b/drivers/pinctrl/bcm/Makefile index 79d5e49fdd9a..0e3cf9b15c65 100644 --- a/drivers/pinctrl/bcm/Makefile +++ b/drivers/pinctrl/bcm/Makefile @@ -3,6 +3,7 @@ obj-$(CONFIG_PINCTRL_BCM281XX) += pinctrl-bcm281xx.o obj-$(CONFIG_PINCTRL_BCM2835) += pinctrl-bcm2835.o +obj-$(CONFIG_PINCTRL_BCM63XX) += pinctrl-bcm63xx.o obj-$(CONFIG_PINCTRL_IPROC_GPIO) += pinctrl-iproc-gpio.o obj-$(CONFIG_PINCTRL_CYGNUS_MUX) += pinctrl-cygnus-mux.o obj-$(CONFIG_PINCTRL_NS) += pinctrl-ns.o diff --git a/drivers/pinctrl/bcm/pinctrl-bcm63xx.c b/drivers/pinctrl/bcm/pinctrl-bcm63xx.c new file mode 100644 index 000000000000..0a8906e4261b --- /dev/null +++ b/drivers/pinctrl/bcm/pinctrl-bcm63xx.c @@ -0,0 +1,112 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Driver for BCM63xx GPIO unit (pinctrl + GPIO) + * + * Copyright (C) 2021 Álvaro Fernández Rojas + * Copyright (C) 2016 Jonas Gorski + */ + +#include +#include +#include +#include + +#include "pinctrl-bcm63xx.h" + +#define BCM63XX_BANK_SIZE 4 + +#define BCM63XX_DIROUT_REG 0x04 +#define BCM63XX_DATA_REG 0x0c + +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 = offset % BCM63XX_BANK_GPIOS; + unsigned int stride = offset / BCM63XX_BANK_GPIOS; + + *reg = base - stride * BCM63XX_BANK_SIZE; + *mask = BIT(line); + + return 0; +} + +static const struct of_device_id bcm63xx_gpio_of_match[] = { + { .compatible = "brcm,bcm6318-gpio", }, + { .compatible = "brcm,bcm6328-gpio", }, + { .compatible = "brcm,bcm6358-gpio", }, + { .compatible = "brcm,bcm6362-gpio", }, + { .compatible = "brcm,bcm6368-gpio", }, + { .compatible = "brcm,bcm63268-gpio", }, + { /* sentinel */ } +}; + +static int bcm63xx_gpio_probe(struct device *dev, struct device_node *node, + const struct bcm63xx_pinctrl_soc *soc, + struct bcm63xx_pinctrl *pc) +{ + struct gpio_regmap_config grc = {0}; + + grc.parent = dev; + grc.fwnode = &node->fwnode; + grc.ngpio = soc->ngpios; + grc.ngpio_per_reg = BCM63XX_BANK_GPIOS; + grc.regmap = pc->regs; + grc.reg_mask_xlate = bcm63xx_reg_mask_xlate; + + if (of_property_read_u32(node, "data", &grc.reg_dat_base)) + grc.reg_dat_base = BCM63XX_DATA_REG; + grc.reg_set_base = grc.reg_dat_base; + + if (of_property_read_u32(node, "dirout", &grc.reg_dir_out_base)) + grc.reg_dir_out_base = 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 = &pdev->dev; + struct bcm63xx_pinctrl *pc; + struct device_node *node; + int err; + + pc = devm_kzalloc(dev, sizeof(*pc), GFP_KERNEL); + if (!pc) + return -ENOMEM; + + platform_set_drvdata(pdev, pc); + + pc->dev = dev; + pc->driver_data = driver_data; + + pc->regs = syscon_node_to_regmap(dev->parent->of_node); + if (IS_ERR(pc->regs)) + return PTR_ERR(pc->regs); + + pc->pctl_desc.name = dev_name(dev); + pc->pctl_desc.pins = soc->pins; + pc->pctl_desc.npins = soc->npins; + pc->pctl_desc.pctlops = soc->pctl_ops; + pc->pctl_desc.pmxops = soc->pmx_ops; + pc->pctl_desc.owner = THIS_MODULE; + + pc->pctl_dev = 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) { + if (of_match_node(bcm63xx_gpio_of_match, node)) { + err = bcm63xx_gpio_probe(dev, node, soc, pc); + if (err) { + dev_err(dev, "could not add GPIO chip\n"); + of_node_put(node); + 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 Álvaro Fernández 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 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=-13.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_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham 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 943CBC433E0 for ; Sat, 6 Mar 2021 15:59:42 +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 18CB864FEA for ; Sat, 6 Mar 2021 15:59:42 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 18CB864FEA 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:MIME-Version:References:In-Reply-To:Message-Id:Date: Subject:To:From:Reply-To:Cc:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=yQxvrG90zg3QjwQgzZrBRS1/wztxDqrNjTrr0JGgeZc=; b=DWw3NDNyEYjBdm7KPnOMLcm+b Fk9nwuJMippaFG4389VTwvrMzv8RAfKYiP6kFpHvKTID3+HEbCoDw/iYuR8L2dfkTQAPoFFn9yjAF GmMe5PK0WRmppFJt+NcMRERT3NpTaKoRYHpKhHvhLu770KMHIEccmCS4V+gJwVkrH8zoEkkktAcez sjLfDtUJY/cxCwzjPsFaoYSxdjqzdJKJl3pi1lf8w67j1gduqc2cG7vymO2jTrE1wVmQL80j4PAQR ixeLbhg3VGRJnopXBUnMukIqUg8EkDDsRV9o4FkPpCv9aO/u/Y67yD1JMo0ZEOVyAO2wkPc6qClT0 +PAC5TwqQ==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lIZJd-003V65-4L; Sat, 06 Mar 2021 15:58:05 +0000 Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lIZIu-003UqN-BK for linux-arm-kernel@lists.infradead.org; Sat, 06 Mar 2021 15:57:25 +0000 Received: by mail-wr1-x42e.google.com with SMTP id f12so5923292wrx.8 for ; Sat, 06 Mar 2021 07:57:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=RtvYoKdx8w9T7nCZXjDJ+e7ffNXHqzVkfLQSRgUpMkk=; b=DIJN31KU6wKdZxkod/kcycggjctUK/X8Q5LcO993E9SAkTBRdnVQ3zOCJ75iHzddjH yVBDeGvbt1gbQL+jjARFRSJ4s95QwRZkA8xrh6LiiqOuemO84sHg286UhLhpxlQnrdh5 DNmU2be3sJashx3NUD41VjBENhjB5bojA6ze9DY30xeNb6+LvTgDGtlHWXBjfMZHur9x dMC+jMHGdsGluawI5qJSBXDQH+pvmmFQiGIbuqYaGYsXZo0jyICevywToXVDiF9ega1Q TZk01D0lsS1hv6VJ9f1YCdrNdaiysJkoxwAfwTp6wusJUN1TenxoqVn6MoZ70F6ypS4r kcvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=RtvYoKdx8w9T7nCZXjDJ+e7ffNXHqzVkfLQSRgUpMkk=; b=MmeoeMqca5is8SlX00N375noN9it1UuB1L1F9dk0lBog864o+Z56sdP17l2NRBOVbH GuCeklWSVtEusoVKTCvlB0YFfrG+B7c4oC9qT2mYIr9x1B6IjT+QaiiWTHKweozMevsO 7O79IebVuFkEJxSAF7jDvcEF8zHHbd9g4JBksbPJFErrg3eIyC7T20Os62VgsZQp5+gg zDU/IDgzQ+g11THh12l2VZF4qQ2BZD//zh8rvF/4qfTMEKtp5OTteninT8pXl+23pWPl aGYeuydEkKIKjNJzunpKLEs3dNuAAVv25kJULcHZqw6/jZ3zT+0d/oFSvir1a78LtsjC ywdg== X-Gm-Message-State: AOAM530cql0sIielKcFAeJj8EONJKNGPULP/Zk3J3U0uGfAaBd3kp7ee fpJ6Ji7Ovye9nI/APi+jplo= X-Google-Smtp-Source: ABdhPJyg9wd28aIKCB7Qr5i2k3Uonygdv4vLzg03mrNoStf/cbevsvXVu5iPt5lqKZ3Y279TAxj+5w== X-Received: by 2002:a5d:6c69:: with SMTP id r9mr14531922wrz.11.1615046236423; Sat, 06 Mar 2021 07:57:16 -0800 (PST) Received: from skynet.lan (224.red-2-138-103.dynamicip.rima-tde.net. [2.138.103.224]) by smtp.gmail.com with ESMTPSA id p6sm9315188wru.2.2021.03.06.07.57.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 06 Mar 2021 07:57:16 -0800 (PST) From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= To: Linus Walleij , Rob Herring , Michael Walle , Bartosz Golaszewski , Florian Fainelli , bcm-kernel-feedback-list@broadcom.com, Jonas Gorski , =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= , Necip Fazil Yildiran , Andy Shevchenko , linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v5 03/15] pinctrl: bcm: add bcm63xx base code Date: Sat, 6 Mar 2021 16:57:00 +0100 Message-Id: <20210306155712.4298-4-noltari@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210306155712.4298-1-noltari@gmail.com> References: <20210306155712.4298-1-noltari@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210306_155720_595835_938D3EDD X-CRM114-Status: GOOD ( 20.71 ) 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 QWRkIGEgaGVscGVyIGZvciByZWdpc3RlcmluZyBCQ002M1hYIHBpbiBjb250cm9sbGVycy4KClNp Z25lZC1vZmYtYnk6IEpvbmFzIEdvcnNraSA8am9uYXMuZ29yc2tpQGdtYWlsLmNvbT4KQ28tZGV2 ZWxvcGVkLWJ5OiBKb25hcyBHb3Jza2kgPGpvbmFzLmdvcnNraUBnbWFpbC5jb20+ClNpZ25lZC1v ZmYtYnk6IMOBbHZhcm8gRmVybsOhbmRleiBSb2phcyA8bm9sdGFyaUBnbWFpbC5jb20+Ci0tLQog djU6IGFkZCBjaGFuZ2VzIHN1Z2dlc3RlZCBieSBBbmR5IFNoZXZjaGVua28KIHY0OiBkcm9wIElS USBzZWxlY3RzIGZyb20gS2NvbmZpZyBhbmQgYWRkIG1pc3Npbmcgb2Zfbm9kZV9wdXQoKQogdjM6 IGFkZCBuZXcgcGF0Y2ggd2l0aCBzaGFyZWQgY29kZQoKIGRyaXZlcnMvcGluY3RybC9iY20vS2Nv bmZpZyAgICAgICAgICAgfCAgIDcgKysKIGRyaXZlcnMvcGluY3RybC9iY20vTWFrZWZpbGUgICAg ICAgICAgfCAgIDEgKwogZHJpdmVycy9waW5jdHJsL2JjbS9waW5jdHJsLWJjbTYzeHguYyB8IDEx MiArKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9waW5jdHJsL2JjbS9waW5jdHJs LWJjbTYzeHguaCB8ICA0MyArKysrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDE2MyBpbnNlcnRp b25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9waW5jdHJsL2JjbS9waW5jdHJsLWJj bTYzeHguYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvcGluY3RybC9iY20vcGluY3RybC1i Y202M3h4LmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvYmNtL0tjb25maWcgYi9kcml2 ZXJzL3BpbmN0cmwvYmNtL0tjb25maWcKaW5kZXggMGVkMTRkZTAxMzRjLi44ODJmMTliZGMyNDMg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9iY20vS2NvbmZpZworKysgYi9kcml2ZXJzL3Bp bmN0cmwvYmNtL0tjb25maWcKQEAgLTI5LDYgKzI5LDEzIEBAIGNvbmZpZyBQSU5DVFJMX0JDTTI4 MzUKIAloZWxwCiAJICAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIEJyb2FkY29tIEJDTTI4MzUg R1BJTyBkcml2ZXIuCiAKK2NvbmZpZyBQSU5DVFJMX0JDTTYzWFgKKwlib29sCisJc2VsZWN0IEdF TkVSSUNfUElOQ09ORgorCXNlbGVjdCBHUElPX1JFR01BUAorCXNlbGVjdCBQSU5DT05GCisJc2Vs ZWN0IFBJTk1VWAorCiBjb25maWcgUElOQ1RSTF9JUFJPQ19HUElPCiAJYm9vbCAiQnJvYWRjb20g aVByb2MgR1BJTyAod2l0aCBQSU5DT05GKSBkcml2ZXIiCiAJZGVwZW5kcyBvbiBPRl9HUElPICYm IChBUkNIX0JDTV9JUFJPQyB8fCBDT01QSUxFX1RFU1QpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bp bmN0cmwvYmNtL01ha2VmaWxlIGIvZHJpdmVycy9waW5jdHJsL2JjbS9NYWtlZmlsZQppbmRleCA3 OWQ1ZTQ5ZmRkOWEuLjBlM2NmOWIxNWM2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL2Jj bS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BpbmN0cmwvYmNtL01ha2VmaWxlCkBAIC0zLDYgKzMs NyBAQAogCiBvYmotJChDT05GSUdfUElOQ1RSTF9CQ00yODFYWCkJCSs9IHBpbmN0cmwtYmNtMjgx eHgubwogb2JqLSQoQ09ORklHX1BJTkNUUkxfQkNNMjgzNSkJCSs9IHBpbmN0cmwtYmNtMjgzNS5v CitvYmotJChDT05GSUdfUElOQ1RSTF9CQ002M1hYKQkJKz0gcGluY3RybC1iY202M3h4Lm8KIG9i ai0kKENPTkZJR19QSU5DVFJMX0lQUk9DX0dQSU8pCSs9IHBpbmN0cmwtaXByb2MtZ3Bpby5vCiBv YmotJChDT05GSUdfUElOQ1RSTF9DWUdOVVNfTVVYKQkrPSBwaW5jdHJsLWN5Z251cy1tdXgubwog b2JqLSQoQ09ORklHX1BJTkNUUkxfTlMpCQkrPSBwaW5jdHJsLW5zLm8KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvcGluY3RybC9iY20vcGluY3RybC1iY202M3h4LmMgYi9kcml2ZXJzL3BpbmN0cmwvYmNt L3BpbmN0cmwtYmNtNjN4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw MC4uMGE4OTA2ZTQyNjFiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9waW5jdHJsL2JjbS9w aW5jdHJsLWJjbTYzeHguYwpAQCAtMCwwICsxLDExMiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjArCisvKgorICogRHJpdmVyIGZvciBCQ002M3h4IEdQSU8gdW5pdCAocGlu Y3RybCArIEdQSU8pCisgKgorICogQ29weXJpZ2h0IChDKSAyMDIxIMOBbHZhcm8gRmVybsOhbmRl eiBSb2phcyA8bm9sdGFyaUBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSm9uYXMg R29yc2tpIDxqb25hcy5nb3Jza2lAZ21haWwuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9n cGlvL3JlZ21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KKyNpbmNsdWRlIDxs aW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVk ZSAicGluY3RybC1iY202M3h4LmgiCisKKyNkZWZpbmUgQkNNNjNYWF9CQU5LX1NJWkUJNAorCisj ZGVmaW5lIEJDTTYzWFhfRElST1VUX1JFRwkweDA0CisjZGVmaW5lIEJDTTYzWFhfREFUQV9SRUcJ MHgwYworCitzdGF0aWMgaW50IGJjbTYzeHhfcmVnX21hc2tfeGxhdGUoc3RydWN0IGdwaW9fcmVn bWFwICpncGlvLAorCQkJCSAgdW5zaWduZWQgaW50IGJhc2UsIHVuc2lnbmVkIGludCBvZmZzZXQs CisJCQkJICB1bnNpZ25lZCBpbnQgKnJlZywgdW5zaWduZWQgaW50ICptYXNrKQoreworCXVuc2ln bmVkIGludCBsaW5lID0gb2Zmc2V0ICUgQkNNNjNYWF9CQU5LX0dQSU9TOworCXVuc2lnbmVkIGlu dCBzdHJpZGUgPSBvZmZzZXQgLyBCQ002M1hYX0JBTktfR1BJT1M7CisKKwkqcmVnID0gYmFzZSAt IHN0cmlkZSAqIEJDTTYzWFhfQkFOS19TSVpFOworCSptYXNrID0gQklUKGxpbmUpOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGJjbTYzeHhfZ3Bp b19vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiYnJjbSxiY202MzE4LWdwaW8iLCB9 LAorCXsgLmNvbXBhdGlibGUgPSAiYnJjbSxiY202MzI4LWdwaW8iLCB9LAorCXsgLmNvbXBhdGli bGUgPSAiYnJjbSxiY202MzU4LWdwaW8iLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiYnJjbSxiY202 MzYyLWdwaW8iLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiYnJjbSxiY202MzY4LWdwaW8iLCB9LAor CXsgLmNvbXBhdGlibGUgPSAiYnJjbSxiY202MzI2OC1ncGlvIiwgfSwKKwl7IC8qIHNlbnRpbmVs ICovIH0KK307CisKK3N0YXRpYyBpbnQgYmNtNjN4eF9ncGlvX3Byb2JlKHN0cnVjdCBkZXZpY2Ug KmRldiwgc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGJj bTYzeHhfcGluY3RybF9zb2MgKnNvYywKKwkJCSAgICAgIHN0cnVjdCBiY202M3h4X3BpbmN0cmwg KnBjKQoreworCXN0cnVjdCBncGlvX3JlZ21hcF9jb25maWcgZ3JjID0gezB9OworCisJZ3JjLnBh cmVudCA9IGRldjsKKwlncmMuZndub2RlID0gJm5vZGUtPmZ3bm9kZTsKKwlncmMubmdwaW8gPSBz b2MtPm5ncGlvczsKKwlncmMubmdwaW9fcGVyX3JlZyA9IEJDTTYzWFhfQkFOS19HUElPUzsKKwln cmMucmVnbWFwID0gcGMtPnJlZ3M7CisJZ3JjLnJlZ19tYXNrX3hsYXRlID0gYmNtNjN4eF9yZWdf bWFza194bGF0ZTsKKworCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCAiZGF0YSIsICZn cmMucmVnX2RhdF9iYXNlKSkKKwkJZ3JjLnJlZ19kYXRfYmFzZSA9IEJDTTYzWFhfREFUQV9SRUc7 CisJZ3JjLnJlZ19zZXRfYmFzZSA9IGdyYy5yZWdfZGF0X2Jhc2U7CisKKwlpZiAob2ZfcHJvcGVy dHlfcmVhZF91MzIobm9kZSwgImRpcm91dCIsICZncmMucmVnX2Rpcl9vdXRfYmFzZSkpCisJCWdy Yy5yZWdfZGlyX291dF9iYXNlID0gQkNNNjNYWF9ESVJPVVRfUkVHOworCisJcmV0dXJuIFBUUl9F UlJfT1JfWkVSTyhkZXZtX2dwaW9fcmVnbWFwX3JlZ2lzdGVyKGRldiwgJmdyYykpOworfQorCitp bnQgYmNtNjN4eF9waW5jdHJsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJ CQkgIGNvbnN0IHN0cnVjdCBiY202M3h4X3BpbmN0cmxfc29jICpzb2MsCisJCQkgIHZvaWQgKmRy aXZlcl9kYXRhKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0 IGJjbTYzeHhfcGluY3RybCAqcGM7CisJc3RydWN0IGRldmljZV9ub2RlICpub2RlOworCWludCBl cnI7CisKKwlwYyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcGMpLCBHRlBfS0VSTkVMKTsK KwlpZiAoIXBjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBk ZXYsIHBjKTsKKworCXBjLT5kZXYgPSBkZXY7CisJcGMtPmRyaXZlcl9kYXRhID0gZHJpdmVyX2Rh dGE7CisKKwlwYy0+cmVncyA9IHN5c2Nvbl9ub2RlX3RvX3JlZ21hcChkZXYtPnBhcmVudC0+b2Zf bm9kZSk7CisJaWYgKElTX0VSUihwYy0+cmVncykpCisJCXJldHVybiBQVFJfRVJSKHBjLT5yZWdz KTsKKworCXBjLT5wY3RsX2Rlc2MubmFtZSA9IGRldl9uYW1lKGRldik7CisJcGMtPnBjdGxfZGVz Yy5waW5zID0gc29jLT5waW5zOworCXBjLT5wY3RsX2Rlc2MubnBpbnMgPSBzb2MtPm5waW5zOwor CXBjLT5wY3RsX2Rlc2MucGN0bG9wcyA9IHNvYy0+cGN0bF9vcHM7CisJcGMtPnBjdGxfZGVzYy5w bXhvcHMgPSBzb2MtPnBteF9vcHM7CisJcGMtPnBjdGxfZGVzYy5vd25lciA9IFRISVNfTU9EVUxF OworCisJcGMtPnBjdGxfZGV2ID0gZGV2bV9waW5jdHJsX3JlZ2lzdGVyKGRldiwgJnBjLT5wY3Rs X2Rlc2MsIHBjKTsKKwlpZiAoSVNfRVJSKHBjLT5wY3RsX2RldikpCisJCXJldHVybiBQVFJfRVJS KHBjLT5wY3RsX2Rldik7CisKKwlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKGRldi0+b2Zfbm9kZSwg bm9kZSkgeworCQlpZiAob2ZfbWF0Y2hfbm9kZShiY202M3h4X2dwaW9fb2ZfbWF0Y2gsIG5vZGUp KSB7CisJCQllcnIgPSBiY202M3h4X2dwaW9fcHJvYmUoZGV2LCBub2RlLCBzb2MsIHBjKTsKKwkJ CWlmIChlcnIpIHsKKwkJCQlkZXZfZXJyKGRldiwgImNvdWxkIG5vdCBhZGQgR1BJTyBjaGlwXG4i KTsKKwkJCQlvZl9ub2RlX3B1dChub2RlKTsKKwkJCQlyZXR1cm4gZXJyOworCQkJfQorCQl9CisJ fQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvYmNtL3BpbmN0 cmwtYmNtNjN4eC5oIGIvZHJpdmVycy9waW5jdHJsL2JjbS9waW5jdHJsLWJjbTYzeHguaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjNiZGI1MDAyMWYxYgotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvcGluY3RybC9iY20vcGluY3RybC1iY202M3h4LmgKQEAgLTAs MCArMSw0MyBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCisvKgorICog Q29weXJpZ2h0IChDKSAyMDIxIMOBbHZhcm8gRmVybsOhbmRleiBSb2phcyA8bm9sdGFyaUBnbWFp bC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSm9uYXMgR29yc2tpIDxqb25hcy5nb3Jza2lA Z21haWwuY29tPgorICovCisKKyNpZm5kZWYgX19QSU5DVFJMX0JDTTYzWFhfSF9fCisjZGVmaW5l IF9fUElOQ1RSTF9CQ002M1hYX0hfXworCisjaW5jbHVkZSA8bGludXgvcGluY3RybC9waW5jdHJs Lmg+CisKKyNkZWZpbmUgQkNNNjNYWF9CQU5LX0dQSU9TIDMyCisKK3N0cnVjdCBiY202M3h4X3Bp bmN0cmxfc29jIHsKKwlzdHJ1Y3QgcGluY3RybF9vcHMgKnBjdGxfb3BzOworCXN0cnVjdCBwaW5t dXhfb3BzICpwbXhfb3BzOworCisJY29uc3Qgc3RydWN0IHBpbmN0cmxfcGluX2Rlc2MgKnBpbnM7 CisJdW5zaWduZWQgbnBpbnM7CisKKwl1bnNpZ25lZCBpbnQgbmdwaW9zOworfTsKKworc3RydWN0 IGJjbTYzeHhfcGluY3RybCB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCByZWdtYXAg KnJlZ3M7CisKKwlzdHJ1Y3QgcGluY3RybF9kZXNjIHBjdGxfZGVzYzsKKwlzdHJ1Y3QgcGluY3Ry bF9kZXYgKnBjdGxfZGV2OworCisJdm9pZCAqZHJpdmVyX2RhdGE7Cit9OworCitzdGF0aWMgaW5s aW5lIHVuc2lnbmVkIGludCBiY202M3h4X2JhbmtfcGluKHVuc2lnbmVkIGludCBwaW4pCit7CisJ cmV0dXJuIHBpbiAlIEJDTTYzWFhfQkFOS19HUElPUzsKK30KKworaW50IGJjbTYzeHhfcGluY3Ry bF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJICBjb25zdCBzdHJ1Y3Qg YmNtNjN4eF9waW5jdHJsX3NvYyAqc29jLAorCQkJICB2b2lkICpkcml2ZXJfZGF0YSk7CisKKyNl bmRpZiAvKiBfX1BJTkNUUkxfQkNNNjNYWF9IX18gKi8KLS0gCjIuMjAuMQoKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFp bGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlz dHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK