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=-9.6 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, 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 BAF5FC433DF for ; Wed, 10 Jun 2020 17:16:42 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 943782070B for ; Wed, 10 Jun 2020 17:16:42 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Ockfq1Gs" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729609AbgFJRQm (ORCPT ); Wed, 10 Jun 2020 13:16:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33114 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729601AbgFJRQl (ORCPT ); Wed, 10 Jun 2020 13:16:41 -0400 Received: from mail-wr1-x443.google.com (mail-wr1-x443.google.com [IPv6:2a00:1450:4864:20::443]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6BF72C03E96B; Wed, 10 Jun 2020 10:16:40 -0700 (PDT) Received: by mail-wr1-x443.google.com with SMTP id e1so3173297wrt.5; Wed, 10 Jun 2020 10:16:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Cd+yLg5g7GZCMBXFToUqfRJ1Udmj1HQHyRsuOZDrCI4=; b=Ockfq1GsO2c1O7Zz/abUDIxPV/h1r+b5iE3QrwxL6fvKM3qbxfypsmOYxYP0svXJDT CknBZrEV7nVVM/h/6e3ErgzTMSBXpZ3z3wqvJP1Ftdg2kVgQFS5jOUN9DX4VG3UOxT2V gyYcRf/Gz1T6iew/dFRJPYwVzJiwmM6+/8LNx0Y0zgjWeGgZSD9tFVsGZv9USg+izHL/ 9MpRKQVBtcol5ViXCtG5cScXpkfs727YSMJbscQxX96WVw2YxS7NzXecAMbwBeASpdcS mgbDkiC2+dBhS7m/I0HuxvaUgmaxkpog0cQPuJ1WCGy5TYISA351/xuSf0tTBN/h7rT9 QHIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Cd+yLg5g7GZCMBXFToUqfRJ1Udmj1HQHyRsuOZDrCI4=; b=kHZi3am6zqiwHPaSQtifZzqJUJC/AKxNJGjUr4hvYbYIdVxjRiQ8AW2lBBBani3EOe r9ttscJgflE9Zi4x58bjNS8LuzQVjJsEWU0o6oHSfZxQVRdOnkgdUT6y/JG07r7TBp/n rvjs9PZh4zshmZ7iYz86G7UQhjR4ck+INWjMBEGbADbhISP5fxY1hRKET9zj3h4DiJZg g4BOiIzpe8Pq4YQTXE2WmDLgXB9jssNmmlcZ+yuM7S1FeOTHrzwznZLgodmH23LGYcFk WOu5gxh53Szl8Xm58pjSTWjtbyZuz36tYHd0w9v4E4vA8Ugx3zy+j/mv12HtRzd7PYcl oy7Q== X-Gm-Message-State: AOAM533AR0Zm4yUvvmnOIF5F2UvWZhtJ+Qg+CnDfeJ47xh6Phb3z9jIJ HZArkrPB50QdmW388+9UzJo= X-Google-Smtp-Source: ABdhPJw9np+QeDblP3jHRs/QzGg/S1hOySO8j1KJj4qqPfF/zXN1g9EFirWdjkDmu4O7pXPf4HuNpQ== X-Received: by 2002:adf:f58b:: with SMTP id f11mr4864592wro.155.1591809398983; Wed, 10 Jun 2020 10:16:38 -0700 (PDT) Received: from skynet.lan (28.red-83-49-61.dynamicip.rima-tde.net. [83.49.61.28]) by smtp.gmail.com with ESMTPSA id f11sm589048wrm.13.2020.06.10.10.16.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Jun 2020 10:16:38 -0700 (PDT) From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= To: hauke@hauke-m.de, zajec5@gmail.com, tsbogend@alpha.franken.de, robh+dt@kernel.org, f.fainelli@gmail.com, jonas.gorski@gmail.com, bcm-kernel-feedback-list@broadcom.com, linux-mips@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Cc: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= Subject: [PATCH v3 6/9] soc: bcm: add BCM63xx power domain driver Date: Wed, 10 Jun 2020 19:16:27 +0200 Message-Id: <20200610171630.465579-7-noltari@gmail.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200610171630.465579-1-noltari@gmail.com> References: <20200610163301.461160-1-noltari@gmail.com> <20200610171630.465579-1-noltari@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-mips-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-mips@vger.kernel.org BCM6318, BCM6328, BCM6362 and BCM63268 SoCs have a power domain controller to enable/disable certain components in order to save power. Signed-off-by: Álvaro Fernández Rojas --- v3: Use dt-bindings definitions in power domain driver. v2: Introduce bcm63xx folder in drivers/soc/bcm and update MAINTAINERS. MAINTAINERS | 1 + drivers/soc/bcm/Kconfig | 10 + drivers/soc/bcm/Makefile | 1 + drivers/soc/bcm/bcm63xx/Kconfig | 12 + drivers/soc/bcm/bcm63xx/Makefile | 2 + drivers/soc/bcm/bcm63xx/bcm63xx-power.c | 378 ++++++++++++++++++++++++ 6 files changed, 404 insertions(+) create mode 100644 drivers/soc/bcm/bcm63xx/Kconfig create mode 100644 drivers/soc/bcm/bcm63xx/Makefile create mode 100644 drivers/soc/bcm/bcm63xx/bcm63xx-power.c diff --git a/MAINTAINERS b/MAINTAINERS index 77a3fa5e3edd..e9ba7b955d5f 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3442,6 +3442,7 @@ F: arch/mips/bmips/* F: arch/mips/boot/dts/brcm/bcm*.dts* F: arch/mips/include/asm/mach-bmips/* F: arch/mips/kernel/*bmips* +F: drivers/soc/bcm/bcm63xx F: drivers/irqchip/irq-bcm63* F: drivers/irqchip/irq-bcm7* F: drivers/irqchip/irq-brcmstb* diff --git a/drivers/soc/bcm/Kconfig b/drivers/soc/bcm/Kconfig index 648e32693b7e..24f92a6e882a 100644 --- a/drivers/soc/bcm/Kconfig +++ b/drivers/soc/bcm/Kconfig @@ -22,6 +22,15 @@ config RASPBERRYPI_POWER This enables support for the RPi power domains which can be enabled or disabled via the RPi firmware. +config SOC_BCM63XX + bool "Broadcom 63xx SoC drivers" + depends on BMIPS_GENERIC || COMPILE_TEST + help + Enables drivers for the Broadcom 63xx series of chips. + Drivers can be enabled individually within this menu. + + If unsure, say N. + config SOC_BRCMSTB bool "Broadcom STB SoC drivers" depends on ARM || ARM64 || BMIPS_GENERIC || COMPILE_TEST @@ -33,6 +42,7 @@ config SOC_BRCMSTB If unsure, say N. +source "drivers/soc/bcm/bcm63xx/Kconfig" source "drivers/soc/bcm/brcmstb/Kconfig" endmenu diff --git a/drivers/soc/bcm/Makefile b/drivers/soc/bcm/Makefile index d92268a829a9..7bc90e0bd773 100644 --- a/drivers/soc/bcm/Makefile +++ b/drivers/soc/bcm/Makefile @@ -1,4 +1,5 @@ # SPDX-License-Identifier: GPL-2.0-only obj-$(CONFIG_BCM2835_POWER) += bcm2835-power.o obj-$(CONFIG_RASPBERRYPI_POWER) += raspberrypi-power.o +obj-$(CONFIG_SOC_BCM63XX) += bcm63xx/ obj-$(CONFIG_SOC_BRCMSTB) += brcmstb/ diff --git a/drivers/soc/bcm/bcm63xx/Kconfig b/drivers/soc/bcm/bcm63xx/Kconfig new file mode 100644 index 000000000000..16f648a6c70a --- /dev/null +++ b/drivers/soc/bcm/bcm63xx/Kconfig @@ -0,0 +1,12 @@ +# SPDX-License-Identifier: GPL-2.0-only +if SOC_BCM63XX + +config BCM63XX_POWER + bool "BCM63xx power domain driver" + depends on BMIPS_GENERIC || (COMPILE_TEST && OF) + select PM_GENERIC_DOMAINS if PM + help + This enables support for the BCM63xx power domains controller on + BCM6318, BCM6328, BCM6362 and BCM63268 SoCs. + +endif # SOC_BCM63XX diff --git a/drivers/soc/bcm/bcm63xx/Makefile b/drivers/soc/bcm/bcm63xx/Makefile new file mode 100644 index 000000000000..0710d5e018cc --- /dev/null +++ b/drivers/soc/bcm/bcm63xx/Makefile @@ -0,0 +1,2 @@ +# SPDX-License-Identifier: GPL-2.0-only +obj-$(CONFIG_BCM63XX_POWER) += bcm63xx-power.o diff --git a/drivers/soc/bcm/bcm63xx/bcm63xx-power.c b/drivers/soc/bcm/bcm63xx/bcm63xx-power.c new file mode 100644 index 000000000000..515fe182dc34 --- /dev/null +++ b/drivers/soc/bcm/bcm63xx/bcm63xx-power.c @@ -0,0 +1,378 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * BCM63xx Power Domain Controller Driver + * + * Copyright (C) 2020 Álvaro Fernández Rojas + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct bcm63xx_power_dev { + struct generic_pm_domain genpd; + struct bcm63xx_power *power; + uint32_t mask; +}; + +struct bcm63xx_power { + void __iomem *base; + spinlock_t lock; + struct bcm63xx_power_dev *dev; + struct genpd_onecell_data genpd_data; + struct generic_pm_domain **genpd; +}; + +struct bcm63xx_power_data { + const char * const name; + uint8_t bit; + unsigned int flags; +}; + +static int bcm63xx_power_get_state(struct bcm63xx_power_dev *pmd, bool *is_on) +{ + struct bcm63xx_power *power = pmd->power; + + if (!pmd->mask) { + *is_on = false; + return -EINVAL; + } + + *is_on = !(__raw_readl(power->base) & pmd->mask); + + return 0; +} + +static int bcm63xx_power_set_state(struct bcm63xx_power_dev *pmd, bool on) +{ + struct bcm63xx_power *power = pmd->power; + unsigned long flags; + uint32_t val; + + if (!pmd->mask) + return -EINVAL; + + spin_lock_irqsave(&power->lock, flags); + val = __raw_readl(power->base); + if (on) + val &= ~pmd->mask; + else + val |= pmd->mask; + __raw_writel(val, power->base); + spin_unlock_irqrestore(&power->lock, flags); + + return 0; +} + +static int bcm63xx_power_on(struct generic_pm_domain *genpd) +{ + struct bcm63xx_power_dev *pmd = container_of(genpd, + struct bcm63xx_power_dev, genpd); + + return bcm63xx_power_set_state(pmd, true); +} + +static int bcm63xx_power_off(struct generic_pm_domain *genpd) +{ + struct bcm63xx_power_dev *pmd = container_of(genpd, + struct bcm63xx_power_dev, genpd); + + return bcm63xx_power_set_state(pmd, false); +} + +static int bcm63xx_power_probe(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct device_node *np = dev->of_node; + struct resource *res; + const struct bcm63xx_power_data *entry, *table; + struct bcm63xx_power *power; + unsigned int ndom; + uint8_t max_bit = 0; + int ret; + + power = devm_kzalloc(dev, sizeof(*power), GFP_KERNEL); + if (!power) + return -ENOMEM; + + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + power->base = devm_ioremap_resource(&pdev->dev, res); + if (IS_ERR(power->base)) + return PTR_ERR(power->base); + + table = of_device_get_match_data(dev); + if (!table) + return -EINVAL; + + power->genpd_data.num_domains = 0; + ndom = 0; + for (entry = table; entry->name; entry++) { + max_bit = max(max_bit, entry->bit); + ndom++; + } + + if (!ndom) + return -ENODEV; + + power->genpd_data.num_domains = max_bit + 1; + + power->dev = devm_kcalloc(dev, power->genpd_data.num_domains, + sizeof(struct bcm63xx_power_dev), + GFP_KERNEL); + if (!power->dev) + return -ENOMEM; + + power->genpd = devm_kcalloc(dev, power->genpd_data.num_domains, + sizeof(struct generic_pm_domain *), + GFP_KERNEL); + if (!power->genpd) + return -ENOMEM; + + power->genpd_data.domains = power->genpd; + + ndom = 0; + for (entry = table; entry->name; entry++) { + struct bcm63xx_power_dev *pmd = &power->dev[ndom]; + bool is_on; + + pmd->power = power; + pmd->mask = BIT(entry->bit); + pmd->genpd.name = entry->name; + pmd->genpd.flags = entry->flags; + + ret = bcm63xx_power_get_state(pmd, &is_on); + if (ret) + dev_warn(dev, "unable to get current state for %s\n", + pmd->genpd.name); + + pmd->genpd.power_on = bcm63xx_power_on; + pmd->genpd.power_off = bcm63xx_power_off; + + pm_genpd_init(&pmd->genpd, NULL, !is_on); + power->genpd[entry->bit] = &pmd->genpd; + + ndom++; + } + + spin_lock_init(&power->lock); + + ret = of_genpd_add_provider_onecell(np, &power->genpd_data); + if (ret) { + dev_err(dev, "failed to register genpd driver: %d\n", ret); + return ret; + } + + dev_info(dev, "registered %u power domains\n", ndom); + + return 0; +} + +static const struct bcm63xx_power_data bcm6318_power_domains[] = { + { + .name = "pcie", + .bit = BCM6318_POWER_DOMAIN_PCIE, + }, { + .name = "usb", + .bit = BCM6318_POWER_DOMAIN_USB, + }, { + .name = "ephy0", + .bit = BCM6318_POWER_DOMAIN_EPHY0, + }, { + .name = "ephy1", + .bit = BCM6318_POWER_DOMAIN_EPHY1, + }, { + .name = "ephy2", + .bit = BCM6318_POWER_DOMAIN_EPHY2, + }, { + .name = "ephy3", + .bit = BCM6318_POWER_DOMAIN_EPHY3, + }, { + .name = "ldo2p5", + .bit = BCM6318_POWER_DOMAIN_LDO2P5, + .flags = GENPD_FLAG_ALWAYS_ON, + }, { + .name = "ldo2p9", + .bit = BCM6318_POWER_DOMAIN_LDO2P9, + .flags = GENPD_FLAG_ALWAYS_ON, + }, { + .name = "sw1p0", + .bit = BCM6318_POWER_DOMAIN_SW1P0, + .flags = GENPD_FLAG_ALWAYS_ON, + }, { + .name = "pad", + .bit = BCM6318_POWER_DOMAIN_PAD, + .flags = GENPD_FLAG_ALWAYS_ON, + }, { + /* sentinel */ + }, +}; + +static const struct bcm63xx_power_data bcm6328_power_domains[] = { + { + .name = "adsl2-mips", + .bit = BCM6328_POWER_DOMAIN_ADSL2_MIPS, + }, { + .name = "adsl2-phy", + .bit = BCM6328_POWER_DOMAIN_ADSL2_PHY, + }, { + .name = "adsl2-afe", + .bit = BCM6328_POWER_DOMAIN_ADSL2_AFE, + }, { + .name = "sar", + .bit = BCM6328_POWER_DOMAIN_SAR, + }, { + .name = "pcm", + .bit = BCM6328_POWER_DOMAIN_PCM, + }, { + .name = "usbd", + .bit = BCM6328_POWER_DOMAIN_USBD, + }, { + .name = "usbh", + .bit = BCM6328_POWER_DOMAIN_USBH, + }, { + .name = "pcie", + .bit = BCM6328_POWER_DOMAIN_PCIE, + }, { + .name = "robosw", + .bit = BCM6328_POWER_DOMAIN_ROBOSW, + }, { + .name = "ephy", + .bit = BCM6328_POWER_DOMAIN_EPHY, + }, { + /* sentinel */ + }, +}; + +static const struct bcm63xx_power_data bcm6362_power_domains[] = { + { + .name = "sar", + .bit = BCM6362_POWER_DOMAIN_SAR, + }, { + .name = "ipsec", + .bit = BCM6362_POWER_DOMAIN_IPSEC, + }, { + .name = "mips", + .bit = BCM6362_POWER_DOMAIN_MIPS, + .flags = GENPD_FLAG_ALWAYS_ON, + }, { + .name = "dect", + .bit = BCM6362_POWER_DOMAIN_DECT, + }, { + .name = "usbh", + .bit = BCM6362_POWER_DOMAIN_USBH, + }, { + .name = "usbd", + .bit = BCM6362_POWER_DOMAIN_USBD, + }, { + .name = "robosw", + .bit = BCM6362_POWER_DOMAIN_ROBOSW, + }, { + .name = "pcm", + .bit = BCM6362_POWER_DOMAIN_PCM, + }, { + .name = "periph", + .bit = BCM6362_POWER_DOMAIN_PERIPH, + .flags = GENPD_FLAG_ALWAYS_ON, + }, { + .name = "adsl-phy", + .bit = BCM6362_POWER_DOMAIN_ADSL_PHY, + }, { + .name = "gmii-pads", + .bit = BCM6362_POWER_DOMAIN_GMII_PADS, + }, { + .name = "fap", + .bit = BCM6362_POWER_DOMAIN_FAP, + }, { + .name = "pcie", + .bit = BCM6362_POWER_DOMAIN_PCIE, + }, { + .name = "wlan-pads", + .bit = BCM6362_POWER_DOMAIN_WLAN_PADS, + }, { + /* sentinel */ + }, +}; + +static const struct bcm63xx_power_data bcm63268_power_domains[] = { + { + .name = "sar", + .bit = BCM63268_POWER_DOMAIN_SAR, + }, { + .name = "ipsec", + .bit = BCM63268_POWER_DOMAIN_IPSEC, + }, { + .name = "mips", + .bit = BCM63268_POWER_DOMAIN_MIPS, + .flags = GENPD_FLAG_ALWAYS_ON, + }, { + .name = "dect", + .bit = BCM63268_POWER_DOMAIN_DECT, + }, { + .name = "usbh", + .bit = BCM63268_POWER_DOMAIN_USBH, + }, { + .name = "usbd", + .bit = BCM63268_POWER_DOMAIN_USBD, + }, { + .name = "robosw", + .bit = BCM63268_POWER_DOMAIN_ROBOSW, + }, { + .name = "pcm", + .bit = BCM63268_POWER_DOMAIN_PCM, + }, { + .name = "periph", + .bit = BCM63268_POWER_DOMAIN_PERIPH, + .flags = GENPD_FLAG_ALWAYS_ON, + }, { + .name = "vdsl-phy", + .bit = BCM63268_POWER_DOMAIN_VDSL_PHY, + }, { + .name = "vdsl-mips", + .bit = BCM63268_POWER_DOMAIN_VDSL_MIPS, + }, { + .name = "fap", + .bit = BCM63268_POWER_DOMAIN_FAP, + }, { + .name = "pcie", + .bit = BCM63268_POWER_DOMAIN_PCIE, + }, { + .name = "wlan-pads", + .bit = BCM63268_POWER_DOMAIN_WLAN_PADS, + }, { + /* sentinel */ + }, +}; + +static const struct of_device_id bcm63xx_power_of_match[] = { + { + .compatible = "brcm,bcm6318-power-controller", + .data = &bcm6318_power_domains, + }, { + .compatible = "brcm,bcm6328-power-controller", + .data = &bcm6328_power_domains, + }, { + .compatible = "brcm,bcm6362-power-controller", + .data = &bcm6362_power_domains, + }, { + .compatible = "brcm,bcm63268-power-controller", + .data = &bcm63268_power_domains, + }, { + /* sentinel */ + } +}; + +static struct platform_driver bcm63xx_power_driver = { + .driver = { + .name = "bcm63xx-power-controller", + .of_match_table = bcm63xx_power_of_match, + }, + .probe = bcm63xx_power_probe, +}; +builtin_platform_driver(bcm63xx_power_driver); -- 2.26.2 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=-9.5 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, 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 3D784C433E2 for ; Wed, 10 Jun 2020 17:19:06 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 0BD952070B for ; Wed, 10 Jun 2020 17:19:06 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="EkDiVkr/"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Ockfq1Gs" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0BD952070B 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+infradead-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=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc: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:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=I6NwDL+R9Cunk0gcB2Fpb2CMV0xVhCvY0MMhCM6DTiY=; b=EkDiVkr/f6IWg0 ON2mDP5Fc7k+1YH7ygsPMYJ2JckuufKDk7X2gWhqxl2fyy8ePgd4EuGayPGVJFt0YrsIxXl+nT/vJ qZznr+JOUEyt4OsKDk3MRSpUXohahXEB6lfuO8h2JhVpwGC1z4A6sMNzXHTa6Khls0PM+KFSo/Gb6 508KWhc3wPcuIH2hiOKpC9UDwabguZ5cvxK2vz60InJw4ATeooFe5MHF6nDIiwpIX2fPxlfkw5PXx 9SFdQQcs/wHPaOI5qq1V6gpj74b5RYMAEQSc07+flSGORqXjxoVW1X/X7p67eWa7XfPJs2VfWCSpz ehRZ5PxISQoTy687iklA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jj4NN-0007rO-Up; Wed, 10 Jun 2020 17:18:57 +0000 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jj4LB-0005mI-K4 for linux-arm-kernel@lists.infradead.org; Wed, 10 Jun 2020 17:16:45 +0000 Received: by mail-wr1-x442.google.com with SMTP id p5so3149387wrw.9 for ; Wed, 10 Jun 2020 10:16:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Cd+yLg5g7GZCMBXFToUqfRJ1Udmj1HQHyRsuOZDrCI4=; b=Ockfq1GsO2c1O7Zz/abUDIxPV/h1r+b5iE3QrwxL6fvKM3qbxfypsmOYxYP0svXJDT CknBZrEV7nVVM/h/6e3ErgzTMSBXpZ3z3wqvJP1Ftdg2kVgQFS5jOUN9DX4VG3UOxT2V gyYcRf/Gz1T6iew/dFRJPYwVzJiwmM6+/8LNx0Y0zgjWeGgZSD9tFVsGZv9USg+izHL/ 9MpRKQVBtcol5ViXCtG5cScXpkfs727YSMJbscQxX96WVw2YxS7NzXecAMbwBeASpdcS mgbDkiC2+dBhS7m/I0HuxvaUgmaxkpog0cQPuJ1WCGy5TYISA351/xuSf0tTBN/h7rT9 QHIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Cd+yLg5g7GZCMBXFToUqfRJ1Udmj1HQHyRsuOZDrCI4=; b=L3GhObCIfUxhHnKGEY4Fylq4qCB3pfM6sxa/9b5lwrw1NjAIJ7hxORLYV4Idx0uQHq 0e9kQwAjlfiu8dmvY2ufRpeuWIMEa1Et0haqgdJV8ZIF+/GuK9VOzwJGFWaridIVfvV/ cdWdbNhHpghDh8c38OtcBfPyQH0ScSs8muIqUDiZvVqesUt14jbOA7zJaR9/YSIKAIY9 Uz0ImJGCC7KLxEB4dM1d64GCyfwGanrdjqMdOoiJzPHXqz4Jp+s6x/Lld6JGsZ7ag8Je i9z9kDFakuJ8CUa2j4HUuYkWM6REV8SyvArWID2nOkwCv/NgF1Prtt8v/amB0PS92wxZ 5hQw== X-Gm-Message-State: AOAM530K+5cBjlrjUb5XYgi1gkMiEQ9aSkv2weGiwljljnMGF3eOLvlX 208Lna7YZ+BzbZ9CodAAiLpqMMweIsg= X-Google-Smtp-Source: ABdhPJw9np+QeDblP3jHRs/QzGg/S1hOySO8j1KJj4qqPfF/zXN1g9EFirWdjkDmu4O7pXPf4HuNpQ== X-Received: by 2002:adf:f58b:: with SMTP id f11mr4864592wro.155.1591809398983; Wed, 10 Jun 2020 10:16:38 -0700 (PDT) Received: from skynet.lan (28.red-83-49-61.dynamicip.rima-tde.net. [83.49.61.28]) by smtp.gmail.com with ESMTPSA id f11sm589048wrm.13.2020.06.10.10.16.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Jun 2020 10:16:38 -0700 (PDT) From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= To: hauke@hauke-m.de, zajec5@gmail.com, tsbogend@alpha.franken.de, robh+dt@kernel.org, f.fainelli@gmail.com, jonas.gorski@gmail.com, bcm-kernel-feedback-list@broadcom.com, linux-mips@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v3 6/9] soc: bcm: add BCM63xx power domain driver Date: Wed, 10 Jun 2020 19:16:27 +0200 Message-Id: <20200610171630.465579-7-noltari@gmail.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200610171630.465579-1-noltari@gmail.com> References: <20200610163301.461160-1-noltari@gmail.com> <20200610171630.465579-1-noltari@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200610_101642_139808_F3A713B4 X-CRM114-Status: GOOD ( 16.88 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org QkNNNjMxOCwgQkNNNjMyOCwgQkNNNjM2MiBhbmQgQkNNNjMyNjggU29DcyBoYXZlIGEgcG93ZXIg ZG9tYWluIGNvbnRyb2xsZXIKdG8gZW5hYmxlL2Rpc2FibGUgY2VydGFpbiBjb21wb25lbnRzIGlu IG9yZGVyIHRvIHNhdmUgcG93ZXIuCgpTaWduZWQtb2ZmLWJ5OiDDgWx2YXJvIEZlcm7DoW5kZXog Um9qYXMgPG5vbHRhcmlAZ21haWwuY29tPgotLS0KIHYzOiBVc2UgZHQtYmluZGluZ3MgZGVmaW5p dGlvbnMgaW4gcG93ZXIgZG9tYWluIGRyaXZlci4KIHYyOiBJbnRyb2R1Y2UgYmNtNjN4eCBmb2xk ZXIgaW4gZHJpdmVycy9zb2MvYmNtIGFuZCB1cGRhdGUgTUFJTlRBSU5FUlMuCgogTUFJTlRBSU5F UlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvc29jL2JjbS9L Y29uZmlnICAgICAgICAgICAgICAgICB8ICAxMCArCiBkcml2ZXJzL3NvYy9iY20vTWFrZWZpbGUg ICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9zb2MvYmNtL2JjbTYzeHgvS2NvbmZpZyAg ICAgICAgIHwgIDEyICsKIGRyaXZlcnMvc29jL2JjbS9iY202M3h4L01ha2VmaWxlICAgICAgICB8 ICAgMiArCiBkcml2ZXJzL3NvYy9iY20vYmNtNjN4eC9iY202M3h4LXBvd2VyLmMgfCAzNzggKysr KysrKysrKysrKysrKysrKysrKysrCiA2IGZpbGVzIGNoYW5nZWQsIDQwNCBpbnNlcnRpb25zKCsp CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zb2MvYmNtL2JjbTYzeHgvS2NvbmZpZwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc29jL2JjbS9iY202M3h4L01ha2VmaWxlCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9zb2MvYmNtL2JjbTYzeHgvYmNtNjN4eC1wb3dlci5jCgpkaWZm IC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA3N2EzZmE1ZTNlZGQuLmU5 YmE3Yjk1NWQ1ZiAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAg LTM0NDIsNiArMzQ0Miw3IEBAIEY6CWFyY2gvbWlwcy9ibWlwcy8qCiBGOglhcmNoL21pcHMvYm9v dC9kdHMvYnJjbS9iY20qLmR0cyoKIEY6CWFyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJtaXBz LyoKIEY6CWFyY2gvbWlwcy9rZXJuZWwvKmJtaXBzKgorRjoJZHJpdmVycy9zb2MvYmNtL2JjbTYz eHgKIEY6CWRyaXZlcnMvaXJxY2hpcC9pcnEtYmNtNjMqCiBGOglkcml2ZXJzL2lycWNoaXAvaXJx LWJjbTcqCiBGOglkcml2ZXJzL2lycWNoaXAvaXJxLWJyY21zdGIqCmRpZmYgLS1naXQgYS9kcml2 ZXJzL3NvYy9iY20vS2NvbmZpZyBiL2RyaXZlcnMvc29jL2JjbS9LY29uZmlnCmluZGV4IDY0OGUz MjY5M2I3ZS4uMjRmOTJhNmU4ODJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NvYy9iY20vS2NvbmZp ZworKysgYi9kcml2ZXJzL3NvYy9iY20vS2NvbmZpZwpAQCAtMjIsNiArMjIsMTUgQEAgY29uZmln IFJBU1BCRVJSWVBJX1BPV0VSCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFJQaSBw b3dlciBkb21haW5zIHdoaWNoIGNhbiBiZSBlbmFibGVkCiAJICBvciBkaXNhYmxlZCB2aWEgdGhl IFJQaSBmaXJtd2FyZS4KIAorY29uZmlnIFNPQ19CQ002M1hYCisJYm9vbCAiQnJvYWRjb20gNjN4 eCBTb0MgZHJpdmVycyIKKwlkZXBlbmRzIG9uIEJNSVBTX0dFTkVSSUMgfHwgQ09NUElMRV9URVNU CisJaGVscAorCSAgRW5hYmxlcyBkcml2ZXJzIGZvciB0aGUgQnJvYWRjb20gNjN4eCBzZXJpZXMg b2YgY2hpcHMuCisJICBEcml2ZXJzIGNhbiBiZSBlbmFibGVkIGluZGl2aWR1YWxseSB3aXRoaW4g dGhpcyBtZW51LgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgU09DX0JSQ01TVEIK IAlib29sICJCcm9hZGNvbSBTVEIgU29DIGRyaXZlcnMiCiAJZGVwZW5kcyBvbiBBUk0gfHwgQVJN NjQgfHwgQk1JUFNfR0VORVJJQyB8fCBDT01QSUxFX1RFU1QKQEAgLTMzLDYgKzQyLDcgQEAgY29u ZmlnIFNPQ19CUkNNU1RCCiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKK3NvdXJjZSAiZHJpdmVy cy9zb2MvYmNtL2JjbTYzeHgvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9zb2MvYmNtL2JyY21z dGIvS2NvbmZpZyIKIAogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvYmNtL01ha2Vm aWxlIGIvZHJpdmVycy9zb2MvYmNtL01ha2VmaWxlCmluZGV4IGQ5MjI2OGE4MjlhOS4uN2JjOTBl MGJkNzczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NvYy9iY20vTWFrZWZpbGUKKysrIGIvZHJpdmVy cy9zb2MvYmNtL01ha2VmaWxlCkBAIC0xLDQgKzEsNSBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMC1vbmx5CiBvYmotJChDT05GSUdfQkNNMjgzNV9QT1dFUikJKz0gYmNtMjgz NS1wb3dlci5vCiBvYmotJChDT05GSUdfUkFTUEJFUlJZUElfUE9XRVIpCSs9IHJhc3BiZXJyeXBp LXBvd2VyLm8KK29iai0kKENPTkZJR19TT0NfQkNNNjNYWCkJKz0gYmNtNjN4eC8KIG9iai0kKENP TkZJR19TT0NfQlJDTVNUQikJKz0gYnJjbXN0Yi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL2Jj bS9iY202M3h4L0tjb25maWcgYi9kcml2ZXJzL3NvYy9iY20vYmNtNjN4eC9LY29uZmlnCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTZmNjQ4YTZjNzBhCi0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9zb2MvYmNtL2JjbTYzeHgvS2NvbmZpZwpAQCAtMCwwICsxLDEy IEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKK2lmIFNPQ19CQ002 M1hYCisKK2NvbmZpZyBCQ002M1hYX1BPV0VSCisJYm9vbCAiQkNNNjN4eCBwb3dlciBkb21haW4g ZHJpdmVyIgorCWRlcGVuZHMgb24gQk1JUFNfR0VORVJJQyB8fCAoQ09NUElMRV9URVNUICYmIE9G KQorCXNlbGVjdCBQTV9HRU5FUklDX0RPTUFJTlMgaWYgUE0KKwloZWxwCisJICBUaGlzIGVuYWJs ZXMgc3VwcG9ydCBmb3IgdGhlIEJDTTYzeHggcG93ZXIgZG9tYWlucyBjb250cm9sbGVyIG9uCisJ ICBCQ002MzE4LCBCQ002MzI4LCBCQ002MzYyIGFuZCBCQ002MzI2OCBTb0NzLgorCitlbmRpZiAj IFNPQ19CQ002M1hYCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy9iY20vYmNtNjN4eC9NYWtlZmls ZSBiL2RyaXZlcnMvc29jL2JjbS9iY202M3h4L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMC4uMDcxMGQ1ZTAxOGNjCi0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9zb2MvYmNtL2JjbTYzeHgvTWFrZWZpbGUKQEAgLTAsMCArMSwyIEBACisjIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKK29iai0kKENPTkZJR19CQ002M1hYX1BPV0VS KSArPSBiY202M3h4LXBvd2VyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL2JjbS9iY202M3h4 L2JjbTYzeHgtcG93ZXIuYyBiL2RyaXZlcnMvc29jL2JjbS9iY202M3h4L2JjbTYzeHgtcG93ZXIu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjUxNWZlMTgyZGMzNAot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc29jL2JjbS9iY202M3h4L2JjbTYzeHgtcG93ZXIu YwpAQCAtMCwwICsxLDM3OCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAt b3ItbGF0ZXIKKy8qCisgKiBCQ002M3h4IFBvd2VyIERvbWFpbiBDb250cm9sbGVyIERyaXZlcgor ICoKKyAqIENvcHlyaWdodCAoQykgMjAyMCDDgWx2YXJvIEZlcm7DoW5kZXogUm9qYXMgPG5vbHRh cmlAZ21haWwuY29tPgorICovCisKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9zb2MvYmNtNjMxOC1w bS5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3NvYy9iY202MzI4LXBtLmg+CisjaW5jbHVkZSA8 ZHQtYmluZGluZ3Mvc29jL2JjbTYzNjItcG0uaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9zb2Mv YmNtNjMyNjgtcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21v ZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxp bnV4L3BtX2RvbWFpbi5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgv b2ZfZGV2aWNlLmg+CisKK3N0cnVjdCBiY202M3h4X3Bvd2VyX2RldiB7CisJc3RydWN0IGdlbmVy aWNfcG1fZG9tYWluIGdlbnBkOworCXN0cnVjdCBiY202M3h4X3Bvd2VyICpwb3dlcjsKKwl1aW50 MzJfdCBtYXNrOworfTsKKworc3RydWN0IGJjbTYzeHhfcG93ZXIgeworCXZvaWQgX19pb21lbSAq YmFzZTsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IGJjbTYzeHhfcG93ZXJfZGV2ICpkZXY7 CisJc3RydWN0IGdlbnBkX29uZWNlbGxfZGF0YSBnZW5wZF9kYXRhOworCXN0cnVjdCBnZW5lcmlj X3BtX2RvbWFpbiAqKmdlbnBkOworfTsKKworc3RydWN0IGJjbTYzeHhfcG93ZXJfZGF0YSB7CisJ Y29uc3QgY2hhciAqIGNvbnN0IG5hbWU7CisJdWludDhfdCBiaXQ7CisJdW5zaWduZWQgaW50IGZs YWdzOworfTsKKworc3RhdGljIGludCBiY202M3h4X3Bvd2VyX2dldF9zdGF0ZShzdHJ1Y3QgYmNt NjN4eF9wb3dlcl9kZXYgKnBtZCwgYm9vbCAqaXNfb24pCit7CisJc3RydWN0IGJjbTYzeHhfcG93 ZXIgKnBvd2VyID0gcG1kLT5wb3dlcjsKKworCWlmICghcG1kLT5tYXNrKSB7CisJCSppc19vbiA9 IGZhbHNlOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkqaXNfb24gPSAhKF9fcmF3X3JlYWRs KHBvd2VyLT5iYXNlKSAmIHBtZC0+bWFzayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBiY202M3h4X3Bvd2VyX3NldF9zdGF0ZShzdHJ1Y3QgYmNtNjN4eF9wb3dlcl9kZXYgKnBtZCwg Ym9vbCBvbikKK3sKKwlzdHJ1Y3QgYmNtNjN4eF9wb3dlciAqcG93ZXIgPSBwbWQtPnBvd2VyOwor CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdWludDMyX3QgdmFsOworCisJaWYgKCFwbWQtPm1hc2sp CisJCXJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvd2VyLT5sb2NrLCBm bGFncyk7CisJdmFsID0gX19yYXdfcmVhZGwocG93ZXItPmJhc2UpOworCWlmIChvbikKKwkJdmFs ICY9IH5wbWQtPm1hc2s7CisJZWxzZQorCQl2YWwgfD0gcG1kLT5tYXNrOworCV9fcmF3X3dyaXRl bCh2YWwsIHBvd2VyLT5iYXNlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3dlci0+bG9j aywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmNtNjN4eF9wb3dlcl9v bihzdHJ1Y3QgZ2VuZXJpY19wbV9kb21haW4gKmdlbnBkKQoreworCXN0cnVjdCBiY202M3h4X3Bv d2VyX2RldiAqcG1kID0gY29udGFpbmVyX29mKGdlbnBkLAorCQlzdHJ1Y3QgYmNtNjN4eF9wb3dl cl9kZXYsIGdlbnBkKTsKKworCXJldHVybiBiY202M3h4X3Bvd2VyX3NldF9zdGF0ZShwbWQsIHRy dWUpOworfQorCitzdGF0aWMgaW50IGJjbTYzeHhfcG93ZXJfb2ZmKHN0cnVjdCBnZW5lcmljX3Bt X2RvbWFpbiAqZ2VucGQpCit7CisJc3RydWN0IGJjbTYzeHhfcG93ZXJfZGV2ICpwbWQgPSBjb250 YWluZXJfb2YoZ2VucGQsCisJCXN0cnVjdCBiY202M3h4X3Bvd2VyX2RldiwgZ2VucGQpOworCisJ cmV0dXJuIGJjbTYzeHhfcG93ZXJfc2V0X3N0YXRlKHBtZCwgZmFsc2UpOworfQorCitzdGF0aWMg aW50IGJjbTYzeHhfcG93ZXJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sK KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAq bnAgPSBkZXYtPm9mX25vZGU7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJY29uc3Qgc3RydWN0 IGJjbTYzeHhfcG93ZXJfZGF0YSAqZW50cnksICp0YWJsZTsKKwlzdHJ1Y3QgYmNtNjN4eF9wb3dl ciAqcG93ZXI7CisJdW5zaWduZWQgaW50IG5kb207CisJdWludDhfdCBtYXhfYml0ID0gMDsKKwlp bnQgcmV0OworCisJcG93ZXIgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBvd2VyKSwgR0ZQ X0tFUk5FTCk7CisJaWYgKCFwb3dlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXMgPSBwbGF0 Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXBvd2VyLT5iYXNl ID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7CisJaWYgKElTX0VSUihw b3dlci0+YmFzZSkpCisJCXJldHVybiBQVFJfRVJSKHBvd2VyLT5iYXNlKTsKKworCXRhYmxlID0g b2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7CisJaWYgKCF0YWJsZSkKKwkJcmV0dXJuIC1F SU5WQUw7CisKKwlwb3dlci0+Z2VucGRfZGF0YS5udW1fZG9tYWlucyA9IDA7CisJbmRvbSA9IDA7 CisJZm9yIChlbnRyeSA9IHRhYmxlOyBlbnRyeS0+bmFtZTsgZW50cnkrKykgeworCQltYXhfYml0 ID0gbWF4KG1heF9iaXQsIGVudHJ5LT5iaXQpOworCQluZG9tKys7CisJfQorCisJaWYgKCFuZG9t KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXBvd2VyLT5nZW5wZF9kYXRhLm51bV9kb21haW5zID0g bWF4X2JpdCArIDE7CisKKwlwb3dlci0+ZGV2ID0gZGV2bV9rY2FsbG9jKGRldiwgcG93ZXItPmdl bnBkX2RhdGEubnVtX2RvbWFpbnMsCisJCQkJICBzaXplb2Yoc3RydWN0IGJjbTYzeHhfcG93ZXJf ZGV2KSwKKwkJCQkgIEdGUF9LRVJORUwpOworCWlmICghcG93ZXItPmRldikKKwkJcmV0dXJuIC1F Tk9NRU07CisKKwlwb3dlci0+Z2VucGQgPSBkZXZtX2tjYWxsb2MoZGV2LCBwb3dlci0+Z2VucGRf ZGF0YS5udW1fZG9tYWlucywKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBnZW5lcmljX3BtX2RvbWFp biAqKSwKKwkJCQkgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFwb3dlci0+Z2VucGQpCisJCXJldHVy biAtRU5PTUVNOworCisJcG93ZXItPmdlbnBkX2RhdGEuZG9tYWlucyA9IHBvd2VyLT5nZW5wZDsK KworCW5kb20gPSAwOworCWZvciAoZW50cnkgPSB0YWJsZTsgZW50cnktPm5hbWU7IGVudHJ5Kysp IHsKKwkJc3RydWN0IGJjbTYzeHhfcG93ZXJfZGV2ICpwbWQgPSAmcG93ZXItPmRldltuZG9tXTsK KwkJYm9vbCBpc19vbjsKKworCQlwbWQtPnBvd2VyID0gcG93ZXI7CisJCXBtZC0+bWFzayA9IEJJ VChlbnRyeS0+Yml0KTsKKwkJcG1kLT5nZW5wZC5uYW1lID0gZW50cnktPm5hbWU7CisJCXBtZC0+ Z2VucGQuZmxhZ3MgPSBlbnRyeS0+ZmxhZ3M7CisKKwkJcmV0ID0gYmNtNjN4eF9wb3dlcl9nZXRf c3RhdGUocG1kLCAmaXNfb24pOworCQlpZiAocmV0KQorCQkJZGV2X3dhcm4oZGV2LCAidW5hYmxl IHRvIGdldCBjdXJyZW50IHN0YXRlIGZvciAlc1xuIiwKKwkJCQkgcG1kLT5nZW5wZC5uYW1lKTsK KworCQlwbWQtPmdlbnBkLnBvd2VyX29uID0gYmNtNjN4eF9wb3dlcl9vbjsKKwkJcG1kLT5nZW5w ZC5wb3dlcl9vZmYgPSBiY202M3h4X3Bvd2VyX29mZjsKKworCQlwbV9nZW5wZF9pbml0KCZwbWQt PmdlbnBkLCBOVUxMLCAhaXNfb24pOworCQlwb3dlci0+Z2VucGRbZW50cnktPmJpdF0gPSAmcG1k LT5nZW5wZDsKKworCQluZG9tKys7CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJnBvd2VyLT5sb2Nr KTsKKworCXJldCA9IG9mX2dlbnBkX2FkZF9wcm92aWRlcl9vbmVjZWxsKG5wLCAmcG93ZXItPmdl bnBkX2RhdGEpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVnaXN0 ZXIgZ2VucGQgZHJpdmVyOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkZXZf aW5mbyhkZXYsICJyZWdpc3RlcmVkICV1IHBvd2VyIGRvbWFpbnNcbiIsIG5kb20pOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmNtNjN4eF9wb3dlcl9kYXRhIGJjbTYz MThfcG93ZXJfZG9tYWluc1tdID0geworCXsKKwkJLm5hbWUgPSAicGNpZSIsCisJCS5iaXQgPSBC Q002MzE4X1BPV0VSX0RPTUFJTl9QQ0lFLAorCX0sIHsKKwkJLm5hbWUgPSAidXNiIiwKKwkJLmJp dCA9IEJDTTYzMThfUE9XRVJfRE9NQUlOX1VTQiwKKwl9LCB7CisJCS5uYW1lID0gImVwaHkwIiwK KwkJLmJpdCA9IEJDTTYzMThfUE9XRVJfRE9NQUlOX0VQSFkwLAorCX0sIHsKKwkJLm5hbWUgPSAi ZXBoeTEiLAorCQkuYml0ID0gQkNNNjMxOF9QT1dFUl9ET01BSU5fRVBIWTEsCisJfSwgeworCQku bmFtZSA9ICJlcGh5MiIsCisJCS5iaXQgPSBCQ002MzE4X1BPV0VSX0RPTUFJTl9FUEhZMiwKKwl9 LCB7CisJCS5uYW1lID0gImVwaHkzIiwKKwkJLmJpdCA9IEJDTTYzMThfUE9XRVJfRE9NQUlOX0VQ SFkzLAorCX0sIHsKKwkJLm5hbWUgPSAibGRvMnA1IiwKKwkJLmJpdCA9IEJDTTYzMThfUE9XRVJf RE9NQUlOX0xETzJQNSwKKwkJLmZsYWdzID0gR0VOUERfRkxBR19BTFdBWVNfT04sCisJfSwgewor CQkubmFtZSA9ICJsZG8ycDkiLAorCQkuYml0ID0gQkNNNjMxOF9QT1dFUl9ET01BSU5fTERPMlA5 LAorCQkuZmxhZ3MgPSBHRU5QRF9GTEFHX0FMV0FZU19PTiwKKwl9LCB7CisJCS5uYW1lID0gInN3 MXAwIiwKKwkJLmJpdCA9IEJDTTYzMThfUE9XRVJfRE9NQUlOX1NXMVAwLAorCQkuZmxhZ3MgPSBH RU5QRF9GTEFHX0FMV0FZU19PTiwKKwl9LCB7CisJCS5uYW1lID0gInBhZCIsCisJCS5iaXQgPSBC Q002MzE4X1BPV0VSX0RPTUFJTl9QQUQsCisJCS5mbGFncyA9IEdFTlBEX0ZMQUdfQUxXQVlTX09O LAorCX0sIHsKKwkJLyogc2VudGluZWwgKi8KKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVj dCBiY202M3h4X3Bvd2VyX2RhdGEgYmNtNjMyOF9wb3dlcl9kb21haW5zW10gPSB7CisJeworCQku bmFtZSA9ICJhZHNsMi1taXBzIiwKKwkJLmJpdCA9IEJDTTYzMjhfUE9XRVJfRE9NQUlOX0FEU0wy X01JUFMsCisJfSwgeworCQkubmFtZSA9ICJhZHNsMi1waHkiLAorCQkuYml0ID0gQkNNNjMyOF9Q T1dFUl9ET01BSU5fQURTTDJfUEhZLAorCX0sIHsKKwkJLm5hbWUgPSAiYWRzbDItYWZlIiwKKwkJ LmJpdCA9IEJDTTYzMjhfUE9XRVJfRE9NQUlOX0FEU0wyX0FGRSwKKwl9LCB7CisJCS5uYW1lID0g InNhciIsCisJCS5iaXQgPSBCQ002MzI4X1BPV0VSX0RPTUFJTl9TQVIsCisJfSwgeworCQkubmFt ZSA9ICJwY20iLAorCQkuYml0ID0gQkNNNjMyOF9QT1dFUl9ET01BSU5fUENNLAorCX0sIHsKKwkJ Lm5hbWUgPSAidXNiZCIsCisJCS5iaXQgPSBCQ002MzI4X1BPV0VSX0RPTUFJTl9VU0JELAorCX0s IHsKKwkJLm5hbWUgPSAidXNiaCIsCisJCS5iaXQgPSBCQ002MzI4X1BPV0VSX0RPTUFJTl9VU0JI LAorCX0sIHsKKwkJLm5hbWUgPSAicGNpZSIsCisJCS5iaXQgPSBCQ002MzI4X1BPV0VSX0RPTUFJ Tl9QQ0lFLAorCX0sIHsKKwkJLm5hbWUgPSAicm9ib3N3IiwKKwkJLmJpdCA9IEJDTTYzMjhfUE9X RVJfRE9NQUlOX1JPQk9TVywKKwl9LCB7CisJCS5uYW1lID0gImVwaHkiLAorCQkuYml0ID0gQkNN NjMyOF9QT1dFUl9ET01BSU5fRVBIWSwKKwl9LCB7CisJCS8qIHNlbnRpbmVsICovCisJfSwKK307 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmNtNjN4eF9wb3dlcl9kYXRhIGJjbTYzNjJfcG93ZXJf ZG9tYWluc1tdID0geworCXsKKwkJLm5hbWUgPSAic2FyIiwKKwkJLmJpdCA9IEJDTTYzNjJfUE9X RVJfRE9NQUlOX1NBUiwKKwl9LCB7CisJCS5uYW1lID0gImlwc2VjIiwKKwkJLmJpdCA9IEJDTTYz NjJfUE9XRVJfRE9NQUlOX0lQU0VDLAorCX0sIHsKKwkJLm5hbWUgPSAibWlwcyIsCisJCS5iaXQg PSBCQ002MzYyX1BPV0VSX0RPTUFJTl9NSVBTLAorCQkuZmxhZ3MgPSBHRU5QRF9GTEFHX0FMV0FZ U19PTiwKKwl9LCB7CisJCS5uYW1lID0gImRlY3QiLAorCQkuYml0ID0gQkNNNjM2Ml9QT1dFUl9E T01BSU5fREVDVCwKKwl9LCB7CisJCS5uYW1lID0gInVzYmgiLAorCQkuYml0ID0gQkNNNjM2Ml9Q T1dFUl9ET01BSU5fVVNCSCwKKwl9LCB7CisJCS5uYW1lID0gInVzYmQiLAorCQkuYml0ID0gQkNN NjM2Ml9QT1dFUl9ET01BSU5fVVNCRCwKKwl9LCB7CisJCS5uYW1lID0gInJvYm9zdyIsCisJCS5i aXQgPSBCQ002MzYyX1BPV0VSX0RPTUFJTl9ST0JPU1csCisJfSwgeworCQkubmFtZSA9ICJwY20i LAorCQkuYml0ID0gQkNNNjM2Ml9QT1dFUl9ET01BSU5fUENNLAorCX0sIHsKKwkJLm5hbWUgPSAi cGVyaXBoIiwKKwkJLmJpdCA9IEJDTTYzNjJfUE9XRVJfRE9NQUlOX1BFUklQSCwKKwkJLmZsYWdz ID0gR0VOUERfRkxBR19BTFdBWVNfT04sCisJfSwgeworCQkubmFtZSA9ICJhZHNsLXBoeSIsCisJ CS5iaXQgPSBCQ002MzYyX1BPV0VSX0RPTUFJTl9BRFNMX1BIWSwKKwl9LCB7CisJCS5uYW1lID0g ImdtaWktcGFkcyIsCisJCS5iaXQgPSBCQ002MzYyX1BPV0VSX0RPTUFJTl9HTUlJX1BBRFMsCisJ fSwgeworCQkubmFtZSA9ICJmYXAiLAorCQkuYml0ID0gQkNNNjM2Ml9QT1dFUl9ET01BSU5fRkFQ LAorCX0sIHsKKwkJLm5hbWUgPSAicGNpZSIsCisJCS5iaXQgPSBCQ002MzYyX1BPV0VSX0RPTUFJ Tl9QQ0lFLAorCX0sIHsKKwkJLm5hbWUgPSAid2xhbi1wYWRzIiwKKwkJLmJpdCA9IEJDTTYzNjJf UE9XRVJfRE9NQUlOX1dMQU5fUEFEUywKKwl9LCB7CisJCS8qIHNlbnRpbmVsICovCisJfSwKK307 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmNtNjN4eF9wb3dlcl9kYXRhIGJjbTYzMjY4X3Bvd2Vy X2RvbWFpbnNbXSA9IHsKKwl7CisJCS5uYW1lID0gInNhciIsCisJCS5iaXQgPSBCQ002MzI2OF9Q T1dFUl9ET01BSU5fU0FSLAorCX0sIHsKKwkJLm5hbWUgPSAiaXBzZWMiLAorCQkuYml0ID0gQkNN NjMyNjhfUE9XRVJfRE9NQUlOX0lQU0VDLAorCX0sIHsKKwkJLm5hbWUgPSAibWlwcyIsCisJCS5i aXQgPSBCQ002MzI2OF9QT1dFUl9ET01BSU5fTUlQUywKKwkJLmZsYWdzID0gR0VOUERfRkxBR19B TFdBWVNfT04sCisJfSwgeworCQkubmFtZSA9ICJkZWN0IiwKKwkJLmJpdCA9IEJDTTYzMjY4X1BP V0VSX0RPTUFJTl9ERUNULAorCX0sIHsKKwkJLm5hbWUgPSAidXNiaCIsCisJCS5iaXQgPSBCQ002 MzI2OF9QT1dFUl9ET01BSU5fVVNCSCwKKwl9LCB7CisJCS5uYW1lID0gInVzYmQiLAorCQkuYml0 ID0gQkNNNjMyNjhfUE9XRVJfRE9NQUlOX1VTQkQsCisJfSwgeworCQkubmFtZSA9ICJyb2Jvc3ci LAorCQkuYml0ID0gQkNNNjMyNjhfUE9XRVJfRE9NQUlOX1JPQk9TVywKKwl9LCB7CisJCS5uYW1l ID0gInBjbSIsCisJCS5iaXQgPSBCQ002MzI2OF9QT1dFUl9ET01BSU5fUENNLAorCX0sIHsKKwkJ Lm5hbWUgPSAicGVyaXBoIiwKKwkJLmJpdCA9IEJDTTYzMjY4X1BPV0VSX0RPTUFJTl9QRVJJUEgs CisJCS5mbGFncyA9IEdFTlBEX0ZMQUdfQUxXQVlTX09OLAorCX0sIHsKKwkJLm5hbWUgPSAidmRz bC1waHkiLAorCQkuYml0ID0gQkNNNjMyNjhfUE9XRVJfRE9NQUlOX1ZEU0xfUEhZLAorCX0sIHsK KwkJLm5hbWUgPSAidmRzbC1taXBzIiwKKwkJLmJpdCA9IEJDTTYzMjY4X1BPV0VSX0RPTUFJTl9W RFNMX01JUFMsCisJfSwgeworCQkubmFtZSA9ICJmYXAiLAorCQkuYml0ID0gQkNNNjMyNjhfUE9X RVJfRE9NQUlOX0ZBUCwKKwl9LCB7CisJCS5uYW1lID0gInBjaWUiLAorCQkuYml0ID0gQkNNNjMy NjhfUE9XRVJfRE9NQUlOX1BDSUUsCisJfSwgeworCQkubmFtZSA9ICJ3bGFuLXBhZHMiLAorCQku Yml0ID0gQkNNNjMyNjhfUE9XRVJfRE9NQUlOX1dMQU5fUEFEUywKKwl9LCB7CisJCS8qIHNlbnRp bmVsICovCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGJjbTYz eHhfcG93ZXJfb2ZfbWF0Y2hbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlID0gImJyY20sYmNtNjMx OC1wb3dlci1jb250cm9sbGVyIiwKKwkJLmRhdGEgPSAmYmNtNjMxOF9wb3dlcl9kb21haW5zLAor CX0sIHsKKwkJLmNvbXBhdGlibGUgPSAiYnJjbSxiY202MzI4LXBvd2VyLWNvbnRyb2xsZXIiLAor CQkuZGF0YSA9ICZiY202MzI4X3Bvd2VyX2RvbWFpbnMsCisJfSwgeworCQkuY29tcGF0aWJsZSA9 ICJicmNtLGJjbTYzNjItcG93ZXItY29udHJvbGxlciIsCisJCS5kYXRhID0gJmJjbTYzNjJfcG93 ZXJfZG9tYWlucywKKwl9LCB7CisJCS5jb21wYXRpYmxlID0gImJyY20sYmNtNjMyNjgtcG93ZXIt Y29udHJvbGxlciIsCisJCS5kYXRhID0gJmJjbTYzMjY4X3Bvd2VyX2RvbWFpbnMsCisJfSwgewor CQkvKiBzZW50aW5lbCAqLworCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVy IGJjbTYzeHhfcG93ZXJfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImJjbTYz eHgtcG93ZXItY29udHJvbGxlciIsCisJCS5vZl9tYXRjaF90YWJsZSA9IGJjbTYzeHhfcG93ZXJf b2ZfbWF0Y2gsCisJfSwKKwkucHJvYmUgID0gYmNtNjN4eF9wb3dlcl9wcm9iZSwKK307CitidWls dGluX3BsYXRmb3JtX2RyaXZlcihiY202M3h4X3Bvd2VyX2RyaXZlcik7Ci0tIAoyLjI2LjIKCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0t a2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcK aHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2Vy bmVsCg==