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=-8.3 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_MUTT 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 8F9EBC31E59 for ; Mon, 17 Jun 2019 10:21:58 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 5EABB2087F for ; Mon, 17 Jun 2019 10:21:58 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="WVejvPVa" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726882AbfFQKVx (ORCPT ); Mon, 17 Jun 2019 06:21:53 -0400 Received: from mail-wr1-f68.google.com ([209.85.221.68]:33160 "EHLO mail-wr1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726302AbfFQKVx (ORCPT ); Mon, 17 Jun 2019 06:21:53 -0400 Received: by mail-wr1-f68.google.com with SMTP id n9so9344446wru.0 for ; Mon, 17 Jun 2019 03:21:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to :user-agent; bh=NC1dfIU/mYenyOm15U4hc5qZPPOshi52KvSHHKP1zyI=; b=WVejvPVaj1HDa82AsX5zriUq6e1/dX4nWtRKJqN8TO4TZQwGwGKI8x8lNlGZytaoA2 xqDQN2tTBvao0d8hTIehxnxrGR62wmlYQIQYM5LDRk5HB7JvaXg/wMclJAH3GVA6YBAq QqTuovsEbz6pSA3Qrsr9ppAlqw9mC4kbEHRDymWlxUkPNwyQmTVKP/46kA/32W35+Yey PORRYegkt/TUNeUMMLuSnnvx+3StyfjbSrb2QscMkd8TMgjYNozA6Ug6b85PFj4JjdIW juNI42SXdXIJ/1BAWLDuNGQ9K453QPsOaLP2NYUVrt6xhtIXMZXrmFNkLDOKvLh90QWr ovIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to:user-agent; bh=NC1dfIU/mYenyOm15U4hc5qZPPOshi52KvSHHKP1zyI=; b=FFwVl6D9UH8uH5DTYCfS8Fo5ul1paXYYu52KsGIY6RYIxmSKkp2dUx1xNyE/y55TT5 uEa0UKAdyoX4GhVpELQ8P0ftbnNPAz7e5CFyyUMRYEXjtg6sRdGRCpy7GpeDDqgKvj0A EZdiahTNtcM1Isy9FPFb76YQRelF/3me0EA/ijZELEhI64euhVxyY/jAC+WASx7qDBPx BDfhZ8h3LZLt+X5ws/0Nhaa2HqxhaiyyMdsChAAZA5Mc+P2jC7AYvm3XvhiI7lIuANKp LJyMC8W1ckz61RD0sM/7Thrbg/wUHHtk5sXJkoCgUefASbSBGQdaVPFHdS6oAV0C64gp cqLA== X-Gm-Message-State: APjAAAWEJgvT2s7uRUDVDVo7aP+gtCLtTsCttRPjIa6oTLYymO/3Sj4A GgeMjrDqXaQMhELp2jmzrCXMzA== X-Google-Smtp-Source: APXvYqz4oazu26x6BpTqgk2WXObRSa744dk+Sgq8OZ0FN75FJ1r0TDF/dvVXkqvQLvlC/mHecUQ8iw== X-Received: by 2002:a05:6000:11cc:: with SMTP id i12mr17310040wrx.243.1560766909112; Mon, 17 Jun 2019 03:21:49 -0700 (PDT) Received: from dell ([2.27.35.243]) by smtp.gmail.com with ESMTPSA id l1sm13018918wrf.46.2019.06.17.03.21.48 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 17 Jun 2019 03:21:48 -0700 (PDT) Date: Mon, 17 Jun 2019 11:21:46 +0100 From: Lee Jones To: alokc@codeaurora.org, agross@kernel.org, david.brown@linaro.org, wsa+renesas@sang-engineering.com, bjorn.andersson@linaro.org, balbi@kernel.org, gregkh@linuxfoundation.org, ard.biesheuvel@linaro.org, jlhugo@gmail.com Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-i2c@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-gpio@vger.kernel.org, linux-usb@vger.kernel.org, felipe.balbi@linux.intel.com Subject: Re: [PATCH v4 4/6] usb: dwc3: qcom: Add support for booting with ACPI Message-ID: <20190617102146.GG16364@dell> References: <20190612142654.9639-1-lee.jones@linaro.org> <20190612142654.9639-5-lee.jones@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20190612142654.9639-5-lee.jones@linaro.org> User-Agent: Mutt/1.9.4 (2018-02-28) Sender: linux-arm-msm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org Felipe, > In Linux, the DWC3 core exists as its own independent platform device. > Thus when describing relationships in Device Tree, the current default > boot configuration table option, the DWC3 core often resides as a child > of the platform specific node. Both of which are given their own > address space descriptions and the drivers can be mostly agnostic to > each other. > > However, other Operating Systems have taken a more monolithic approach, > which is evident in the configuration ACPI tables for the Qualcomm > Snapdragon SDM850, where all DWC3 (core and platform) components are > described under a single IO memory region. > > To ensure successful booting using the supplied ACPI tables, we need to > devise a way to chop up the address regions provided and subsequently > register the DWC3 core with the resultant information, which is > precisely what this patch aims to achieve. > > Signed-off-by: Lee Jones > Reviewed-by: Bjorn Andersson > --- > drivers/usb/dwc3/Kconfig | 2 +- > drivers/usb/dwc3/dwc3-qcom.c | 206 ++++++++++++++++++++++++++++++----- > 2 files changed, 179 insertions(+), 29 deletions(-) I'm starting to get a little twitchy about these patches now. Due to the release cadence of the larger Linux distros, it's pretty important that these changes land in v5.3. Without them, it is impossible to install Linux on some pretty high profile emerging platforms. It's already -rc5 and I'm concerned that we're going to miss the merge-window. Would you be kind enough to review these patches please? The Pinctrl and I2C parts of the set have already been merged. TIA. > diff --git a/drivers/usb/dwc3/Kconfig b/drivers/usb/dwc3/Kconfig > index 2b1494460d0c..6dab3fd1e233 100644 > --- a/drivers/usb/dwc3/Kconfig > +++ b/drivers/usb/dwc3/Kconfig > @@ -116,7 +116,7 @@ config USB_DWC3_ST > config USB_DWC3_QCOM > tristate "Qualcomm Platform" > depends on EXTCON && (ARCH_QCOM || COMPILE_TEST) > - depends on OF > + depends on (OF || ACPI) > default USB_DWC3 > help > Some Qualcomm SoCs use DesignWare Core IP for USB2/3 > diff --git a/drivers/usb/dwc3/dwc3-qcom.c b/drivers/usb/dwc3/dwc3-qcom.c > index 184df4daa590..1e1f12b7991d 100644 > --- a/drivers/usb/dwc3/dwc3-qcom.c > +++ b/drivers/usb/dwc3/dwc3-qcom.c > @@ -4,6 +4,7 @@ > * Inspired by dwc3-of-simple.c > */ > > +#include > #include > #include > #include > @@ -38,6 +39,20 @@ > #define PWR_EVNT_LPM_IN_L2_MASK BIT(4) > #define PWR_EVNT_LPM_OUT_L2_MASK BIT(5) > > +#define SDM845_QSCRATCH_BASE_OFFSET 0xf8800 > +#define SDM845_QSCRATCH_SIZE 0x400 > +#define SDM845_DWC3_CORE_SIZE 0xcd00 > + > +struct dwc3_acpi_pdata { > + u32 qscratch_base_offset; > + u32 qscratch_base_size; > + u32 dwc3_core_base_size; > + int hs_phy_irq_index; > + int dp_hs_phy_irq_index; > + int dm_hs_phy_irq_index; > + int ss_phy_irq_index; > +}; > + > struct dwc3_qcom { > struct device *dev; > void __iomem *qscratch_base; > @@ -56,6 +71,8 @@ struct dwc3_qcom { > struct notifier_block vbus_nb; > struct notifier_block host_nb; > > + const struct dwc3_acpi_pdata *acpi_pdata; > + > enum usb_dr_mode mode; > bool is_suspended; > bool pm_suspended; > @@ -300,12 +317,27 @@ static void dwc3_qcom_select_utmi_clk(struct dwc3_qcom *qcom) > PIPE_UTMI_CLK_DIS); > } > > +static int dwc3_qcom_get_irq(struct platform_device *pdev, > + const char *name, int num) > +{ > + struct device_node *np = pdev->dev.of_node; > + int ret; > + > + if (np) > + ret = platform_get_irq_byname(pdev, name); > + else > + ret = platform_get_irq(pdev, num); > + > + return ret; > +} > + > static int dwc3_qcom_setup_irq(struct platform_device *pdev) > { > struct dwc3_qcom *qcom = platform_get_drvdata(pdev); > + const struct dwc3_acpi_pdata *pdata = qcom->acpi_pdata; > int irq, ret; > - > - irq = platform_get_irq_byname(pdev, "hs_phy_irq"); > + irq = dwc3_qcom_get_irq(pdev, "hs_phy_irq", > + pdata ? pdata->hs_phy_irq_index : -1); > if (irq > 0) { > /* Keep wakeup interrupts disabled until suspend */ > irq_set_status_flags(irq, IRQ_NOAUTOEN); > @@ -320,7 +352,8 @@ static int dwc3_qcom_setup_irq(struct platform_device *pdev) > qcom->hs_phy_irq = irq; > } > > - irq = platform_get_irq_byname(pdev, "dp_hs_phy_irq"); > + irq = dwc3_qcom_get_irq(pdev, "dp_hs_phy_irq", > + pdata ? pdata->dp_hs_phy_irq_index : -1); > if (irq > 0) { > irq_set_status_flags(irq, IRQ_NOAUTOEN); > ret = devm_request_threaded_irq(qcom->dev, irq, NULL, > @@ -334,7 +367,8 @@ static int dwc3_qcom_setup_irq(struct platform_device *pdev) > qcom->dp_hs_phy_irq = irq; > } > > - irq = platform_get_irq_byname(pdev, "dm_hs_phy_irq"); > + irq = dwc3_qcom_get_irq(pdev, "dm_hs_phy_irq", > + pdata ? pdata->dm_hs_phy_irq_index : -1); > if (irq > 0) { > irq_set_status_flags(irq, IRQ_NOAUTOEN); > ret = devm_request_threaded_irq(qcom->dev, irq, NULL, > @@ -348,7 +382,8 @@ static int dwc3_qcom_setup_irq(struct platform_device *pdev) > qcom->dm_hs_phy_irq = irq; > } > > - irq = platform_get_irq_byname(pdev, "ss_phy_irq"); > + irq = dwc3_qcom_get_irq(pdev, "ss_phy_irq", > + pdata ? pdata->ss_phy_irq_index : -1); > if (irq > 0) { > irq_set_status_flags(irq, IRQ_NOAUTOEN); > ret = devm_request_threaded_irq(qcom->dev, irq, NULL, > @@ -371,11 +406,11 @@ static int dwc3_qcom_clk_init(struct dwc3_qcom *qcom, int count) > struct device_node *np = dev->of_node; > int i; > > - qcom->num_clocks = count; > - > - if (!count) > + if (!np || !count) > return 0; > > + qcom->num_clocks = count; > + > qcom->clks = devm_kcalloc(dev, qcom->num_clocks, > sizeof(struct clk *), GFP_KERNEL); > if (!qcom->clks) > @@ -409,12 +444,103 @@ static int dwc3_qcom_clk_init(struct dwc3_qcom *qcom, int count) > return 0; > } > > -static int dwc3_qcom_probe(struct platform_device *pdev) > +static int dwc3_qcom_acpi_register_core(struct platform_device *pdev) > { > + struct dwc3_qcom *qcom = platform_get_drvdata(pdev); > + struct device *dev = &pdev->dev; > + struct resource *res, *child_res = NULL; > + int irq; > + int ret; > + > + qcom->dwc3 = platform_device_alloc("dwc3", PLATFORM_DEVID_AUTO); > + if (!qcom->dwc3) > + return -ENOMEM; > + > + qcom->dwc3->dev.parent = dev; > + qcom->dwc3->dev.type = dev->type; > + qcom->dwc3->dev.dma_mask = dev->dma_mask; > + qcom->dwc3->dev.dma_parms = dev->dma_parms; > + qcom->dwc3->dev.coherent_dma_mask = dev->coherent_dma_mask; > + > + child_res = kcalloc(2, sizeof(*child_res), GFP_KERNEL); > + if (!child_res) > + return -ENOMEM; > + > + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); > + if (!res) { > + dev_err(&pdev->dev, "failed to get memory resource\n"); > + ret = -ENODEV; > + goto out; > + } > + > + child_res[0].flags = res->flags; > + child_res[0].start = res->start; > + child_res[0].end = child_res[0].start + > + qcom->acpi_pdata->dwc3_core_base_size; > + > + irq = platform_get_irq(pdev, 0); > + child_res[1].flags = IORESOURCE_IRQ; > + child_res[1].start = child_res[1].end = irq; > + > + ret = platform_device_add_resources(qcom->dwc3, child_res, 2); > + if (ret) { > + dev_err(&pdev->dev, "failed to add resources\n"); > + goto out; > + } > + > + ret = platform_device_add(qcom->dwc3); > + if (ret) > + dev_err(&pdev->dev, "failed to add device\n"); > + > +out: > + kfree(child_res); > + return ret; > +} > + > +static int dwc3_qcom_of_register_core(struct platform_device *pdev) > +{ > + struct dwc3_qcom *qcom = platform_get_drvdata(pdev); > struct device_node *np = pdev->dev.of_node, *dwc3_np; > struct device *dev = &pdev->dev; > + int ret; > + > + dwc3_np = of_get_child_by_name(np, "dwc3"); > + if (!dwc3_np) { > + dev_err(dev, "failed to find dwc3 core child\n"); > + return -ENODEV; > + } > + > + ret = of_platform_populate(np, NULL, NULL, dev); > + if (ret) { > + dev_err(dev, "failed to register dwc3 core - %d\n", ret); > + return ret; > + } > + > + qcom->dwc3 = of_find_device_by_node(dwc3_np); > + if (!qcom->dwc3) { > + dev_err(dev, "failed to get dwc3 platform device\n"); > + return -ENODEV; > + } > + > + return 0; > +} > + > +static const struct dwc3_acpi_pdata sdm845_acpi_pdata = { > + .qscratch_base_offset = SDM845_QSCRATCH_BASE_OFFSET, > + .qscratch_base_size = SDM845_QSCRATCH_SIZE, > + .dwc3_core_base_size = SDM845_DWC3_CORE_SIZE, > + .hs_phy_irq_index = 1, > + .dp_hs_phy_irq_index = 4, > + .dm_hs_phy_irq_index = 3, > + .ss_phy_irq_index = 2 > +}; > + > +static int dwc3_qcom_probe(struct platform_device *pdev) > +{ > + struct device_node *np = pdev->dev.of_node; > + struct device *dev = &pdev->dev; > struct dwc3_qcom *qcom; > - struct resource *res; > + struct resource *res, *parent_res = NULL; > int ret, i; > bool ignore_pipe_clk; > > @@ -425,6 +551,14 @@ static int dwc3_qcom_probe(struct platform_device *pdev) > platform_set_drvdata(pdev, qcom); > qcom->dev = &pdev->dev; > > + if (ACPI_HANDLE(dev)) { > + qcom->acpi_pdata = acpi_device_get_match_data(dev); > + if (!qcom->acpi_pdata) { > + dev_err(&pdev->dev, "no supporting ACPI device data\n"); > + return -EINVAL; > + } > + } > + > qcom->resets = devm_reset_control_array_get_optional_exclusive(dev); > if (IS_ERR(qcom->resets)) { > ret = PTR_ERR(qcom->resets); > @@ -454,7 +588,21 @@ static int dwc3_qcom_probe(struct platform_device *pdev) > } > > res = platform_get_resource(pdev, IORESOURCE_MEM, 0); > - qcom->qscratch_base = devm_ioremap_resource(dev, res); > + > + if (np) { > + parent_res = res; > + } else { > + parent_res = kmemdup(res, sizeof(struct resource), GFP_KERNEL); > + if (!parent_res) > + return -ENOMEM; > + > + parent_res->start = res->start + > + qcom->acpi_pdata->qscratch_base_offset; > + parent_res->end = parent_res->start + > + qcom->acpi_pdata->qscratch_base_size; > + } > + > + qcom->qscratch_base = devm_ioremap_resource(dev, parent_res); > if (IS_ERR(qcom->qscratch_base)) { > dev_err(dev, "failed to map qscratch, err=%d\n", ret); > ret = PTR_ERR(qcom->qscratch_base); > @@ -462,13 +610,8 @@ static int dwc3_qcom_probe(struct platform_device *pdev) > } > > ret = dwc3_qcom_setup_irq(pdev); > - if (ret) > - goto clk_disable; > - > - dwc3_np = of_get_child_by_name(np, "dwc3"); > - if (!dwc3_np) { > - dev_err(dev, "failed to find dwc3 core child\n"); > - ret = -ENODEV; > + if (ret) { > + dev_err(dev, "failed to setup IRQs, err=%d\n", ret); > goto clk_disable; > } > > @@ -481,16 +624,13 @@ static int dwc3_qcom_probe(struct platform_device *pdev) > if (ignore_pipe_clk) > dwc3_qcom_select_utmi_clk(qcom); > > - ret = of_platform_populate(np, NULL, NULL, dev); > - if (ret) { > - dev_err(dev, "failed to register dwc3 core - %d\n", ret); > - goto clk_disable; > - } > + if (np) > + ret = dwc3_qcom_of_register_core(pdev); > + else > + ret = dwc3_qcom_acpi_register_core(pdev); > > - qcom->dwc3 = of_find_device_by_node(dwc3_np); > - if (!qcom->dwc3) { > - dev_err(&pdev->dev, "failed to get dwc3 platform device\n"); > - ret = -ENODEV; > + if (ret) { > + dev_err(dev, "failed to register DWC3 Core, err=%d\n", ret); > goto depopulate; > } > > @@ -514,7 +654,10 @@ static int dwc3_qcom_probe(struct platform_device *pdev) > return 0; > > depopulate: > - of_platform_depopulate(&pdev->dev); > + if (np) > + of_platform_depopulate(&pdev->dev); > + else > + platform_device_put(pdev); > clk_disable: > for (i = qcom->num_clocks - 1; i >= 0; i--) { > clk_disable_unprepare(qcom->clks[i]); > @@ -601,6 +744,12 @@ static const struct of_device_id dwc3_qcom_of_match[] = { > }; > MODULE_DEVICE_TABLE(of, dwc3_qcom_of_match); > > +static const struct acpi_device_id dwc3_qcom_acpi_match[] = { > + { "QCOM2430", (unsigned long)&sdm845_acpi_pdata }, > + { }, > +}; > +MODULE_DEVICE_TABLE(acpi, dwc3_qcom_acpi_match); > + > static struct platform_driver dwc3_qcom_driver = { > .probe = dwc3_qcom_probe, > .remove = dwc3_qcom_remove, > @@ -608,6 +757,7 @@ static struct platform_driver dwc3_qcom_driver = { > .name = "dwc3-qcom", > .pm = &dwc3_qcom_dev_pm_ops, > .of_match_table = dwc3_qcom_of_match, > + .acpi_match_table = ACPI_PTR(dwc3_qcom_acpi_match), > }, > }; > -- Lee Jones [李琼斯] Linaro Services Technical Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog 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=-8.2 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_MUTT 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 1817EC31E5B for ; Mon, 17 Jun 2019 10:21:58 +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 DE6782089E for ; Mon, 17 Jun 2019 10:21:57 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="VMxCJynS"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="WVejvPVa" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DE6782089E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linaro.org 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:In-Reply-To:MIME-Version:References: Message-ID:Subject: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=LaYRaS3hGXDRh1CVp/jhkGT+2Yp3sAEgNYEc89JO3OQ=; b=VMxCJynSVl61so nrj3rjcLU6Vi6RLXtJl+J5Crd4BdHMxyip+lz3bli+lqzE2OiTmbv15ovnJBE/wo0TAF+vFcfSiZ5 MuwOXMD87E9VF06cJ6O8QDOrSu5w38pdQPpFmCZJOwhHMMjxup6mtZBYttCmpDVEAOo12ueXUSdBl O1dl2fDYuXHzhrsJpXcSwmEg6lZsLJ1YMXdyftEgbMFGATgKMMPEQsjwfNEttGZwuZFr1hh6i9Hu2 faTsDaltlEj+mTq0OPjjbzkgrlZwNp8c9ti3/sfghQURsLKc5eWy8arKDChH3vpKnpfbLgVfpTz6y 8hBooI5d3g4Dwbmlg+/g==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hcolx-0007JA-GO; Mon, 17 Jun 2019 10:21:57 +0000 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hcolt-0007Ib-IM for linux-arm-kernel@lists.infradead.org; Mon, 17 Jun 2019 10:21:55 +0000 Received: by mail-wr1-x444.google.com with SMTP id r16so9291809wrl.11 for ; Mon, 17 Jun 2019 03:21:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to :user-agent; bh=NC1dfIU/mYenyOm15U4hc5qZPPOshi52KvSHHKP1zyI=; b=WVejvPVaj1HDa82AsX5zriUq6e1/dX4nWtRKJqN8TO4TZQwGwGKI8x8lNlGZytaoA2 xqDQN2tTBvao0d8hTIehxnxrGR62wmlYQIQYM5LDRk5HB7JvaXg/wMclJAH3GVA6YBAq QqTuovsEbz6pSA3Qrsr9ppAlqw9mC4kbEHRDymWlxUkPNwyQmTVKP/46kA/32W35+Yey PORRYegkt/TUNeUMMLuSnnvx+3StyfjbSrb2QscMkd8TMgjYNozA6Ug6b85PFj4JjdIW juNI42SXdXIJ/1BAWLDuNGQ9K453QPsOaLP2NYUVrt6xhtIXMZXrmFNkLDOKvLh90QWr ovIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to:user-agent; bh=NC1dfIU/mYenyOm15U4hc5qZPPOshi52KvSHHKP1zyI=; b=e56EWx4OtqRA7XF1z9rbKoaxuOqFmOIrZJJ+zAJ4MdyEme3yN12iucFMtQHXnnlODK s//tacTwYb7srgpUWDmNbQQCfEuSj1pdnMe8LVCnBtXn/lafjhN2WIfLvd2HFc874IgE ueo/iJBZEhIA0WM4Zr/rwcGlB+PDjpxb216ckRSgMvyqtX8sBYs+zpN4UFgaVbfLHUS3 Vmqz7aBy70/QUMBn8p9+J3S3Xt/ttw7GsVmda0U9k2STS6wTswIgRrrYx7K/8DN1puaU iiqtzCn3fPyEtZavIX832HXbPlpy9zHA90QUbQpt5rb1yNSJNwiLqh5wnu/NRZ4ir1ki j+Gg== X-Gm-Message-State: APjAAAVB0XSh/7BfZDO+CFIybPaK9cuO9v6CbIf92NuxHi8P8V8UTwAL olRAwYbqlo2M+2MB77NLy811Dg== X-Google-Smtp-Source: APXvYqz4oazu26x6BpTqgk2WXObRSa744dk+Sgq8OZ0FN75FJ1r0TDF/dvVXkqvQLvlC/mHecUQ8iw== X-Received: by 2002:a05:6000:11cc:: with SMTP id i12mr17310040wrx.243.1560766909112; Mon, 17 Jun 2019 03:21:49 -0700 (PDT) Received: from dell ([2.27.35.243]) by smtp.gmail.com with ESMTPSA id l1sm13018918wrf.46.2019.06.17.03.21.48 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 17 Jun 2019 03:21:48 -0700 (PDT) Date: Mon, 17 Jun 2019 11:21:46 +0100 From: Lee Jones To: alokc@codeaurora.org, agross@kernel.org, david.brown@linaro.org, wsa+renesas@sang-engineering.com, bjorn.andersson@linaro.org, balbi@kernel.org, gregkh@linuxfoundation.org, ard.biesheuvel@linaro.org, jlhugo@gmail.com Subject: Re: [PATCH v4 4/6] usb: dwc3: qcom: Add support for booting with ACPI Message-ID: <20190617102146.GG16364@dell> References: <20190612142654.9639-1-lee.jones@linaro.org> <20190612142654.9639-5-lee.jones@linaro.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20190612142654.9639-5-lee.jones@linaro.org> User-Agent: Mutt/1.9.4 (2018-02-28) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190617_032153_644158_182AB9E1 X-CRM114-Status: GOOD ( 26.21 ) 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: felipe.balbi@linux.intel.com, linux-arm-msm@vger.kernel.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, linux-i2c@vger.kernel.org, linux-arm-kernel@lists.infradead.org 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 RmVsaXBlLAoKPiBJbiBMaW51eCwgdGhlIERXQzMgY29yZSBleGlzdHMgYXMgaXRzIG93biBpbmRl cGVuZGVudCBwbGF0Zm9ybSBkZXZpY2UuCj4gVGh1cyB3aGVuIGRlc2NyaWJpbmcgcmVsYXRpb25z aGlwcyBpbiBEZXZpY2UgVHJlZSwgdGhlIGN1cnJlbnQgZGVmYXVsdAo+IGJvb3QgY29uZmlndXJh dGlvbiB0YWJsZSBvcHRpb24sIHRoZSBEV0MzIGNvcmUgb2Z0ZW4gcmVzaWRlcyBhcyBhIGNoaWxk Cj4gb2YgdGhlIHBsYXRmb3JtIHNwZWNpZmljIG5vZGUuICBCb3RoIG9mIHdoaWNoIGFyZSBnaXZl biB0aGVpciBvd24KPiBhZGRyZXNzIHNwYWNlIGRlc2NyaXB0aW9ucyBhbmQgdGhlIGRyaXZlcnMg Y2FuIGJlIG1vc3RseSBhZ25vc3RpYyB0bwo+IGVhY2ggb3RoZXIuCj4gCj4gSG93ZXZlciwgb3Ro ZXIgT3BlcmF0aW5nIFN5c3RlbXMgaGF2ZSB0YWtlbiBhIG1vcmUgbW9ub2xpdGhpYyBhcHByb2Fj aCwKPiB3aGljaCBpcyBldmlkZW50IGluIHRoZSBjb25maWd1cmF0aW9uIEFDUEkgdGFibGVzIGZv ciB0aGUgUXVhbGNvbW0KPiBTbmFwZHJhZ29uIFNETTg1MCwgd2hlcmUgYWxsIERXQzMgKGNvcmUg YW5kIHBsYXRmb3JtKSBjb21wb25lbnRzIGFyZQo+IGRlc2NyaWJlZCB1bmRlciBhIHNpbmdsZSBJ TyBtZW1vcnkgcmVnaW9uLgo+IAo+IFRvIGVuc3VyZSBzdWNjZXNzZnVsIGJvb3RpbmcgdXNpbmcg dGhlIHN1cHBsaWVkIEFDUEkgdGFibGVzLCB3ZSBuZWVkIHRvCj4gZGV2aXNlIGEgd2F5IHRvIGNo b3AgdXAgdGhlIGFkZHJlc3MgcmVnaW9ucyBwcm92aWRlZCBhbmQgc3Vic2VxdWVudGx5Cj4gcmVn aXN0ZXIgdGhlIERXQzMgY29yZSB3aXRoIHRoZSByZXN1bHRhbnQgaW5mb3JtYXRpb24sIHdoaWNo IGlzCj4gcHJlY2lzZWx5IHdoYXQgdGhpcyBwYXRjaCBhaW1zIHRvIGFjaGlldmUuCj4gCj4gU2ln bmVkLW9mZi1ieTogTGVlIEpvbmVzIDxsZWUuam9uZXNAbGluYXJvLm9yZz4KPiBSZXZpZXdlZC1i eTogQmpvcm4gQW5kZXJzc29uIDxiam9ybi5hbmRlcnNzb25AbGluYXJvLm9yZz4KPiAtLS0KPiAg ZHJpdmVycy91c2IvZHdjMy9LY29uZmlnICAgICB8ICAgMiArLQo+ICBkcml2ZXJzL3VzYi9kd2Mz L2R3YzMtcWNvbS5jIHwgMjA2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tCj4g IDIgZmlsZXMgY2hhbmdlZCwgMTc5IGluc2VydGlvbnMoKyksIDI5IGRlbGV0aW9ucygtKQoKSSdt IHN0YXJ0aW5nIHRvIGdldCBhIGxpdHRsZSB0d2l0Y2h5IGFib3V0IHRoZXNlIHBhdGNoZXMgbm93 LiAgRHVlIHRvCnRoZSByZWxlYXNlIGNhZGVuY2Ugb2YgdGhlIGxhcmdlciBMaW51eCBkaXN0cm9z LCBpdCdzIHByZXR0eSBpbXBvcnRhbnQKdGhhdCB0aGVzZSBjaGFuZ2VzIGxhbmQgaW4gdjUuMy4g IFdpdGhvdXQgdGhlbSwgaXQgaXMgaW1wb3NzaWJsZSB0bwppbnN0YWxsIExpbnV4IG9uIHNvbWUg cHJldHR5IGhpZ2ggcHJvZmlsZSBlbWVyZ2luZyBwbGF0Zm9ybXMuCgpJdCdzIGFscmVhZHkgLXJj NSBhbmQgSSdtIGNvbmNlcm5lZCB0aGF0IHdlJ3JlIGdvaW5nIHRvIG1pc3MgdGhlCm1lcmdlLXdp bmRvdy4gIFdvdWxkIHlvdSBiZSBraW5kIGVub3VnaCB0byByZXZpZXcgdGhlc2UgcGF0Y2hlcwpw bGVhc2U/ICBUaGUgUGluY3RybCBhbmQgSTJDIHBhcnRzIG9mIHRoZSBzZXQgaGF2ZSBhbHJlYWR5 IGJlZW4KbWVyZ2VkLgoKVElBLgoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjMy9LY29u ZmlnIGIvZHJpdmVycy91c2IvZHdjMy9LY29uZmlnCj4gaW5kZXggMmIxNDk0NDYwZDBjLi42ZGFi M2ZkMWUyMzMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy91c2IvZHdjMy9LY29uZmlnCj4gKysrIGIv ZHJpdmVycy91c2IvZHdjMy9LY29uZmlnCj4gQEAgLTExNiw3ICsxMTYsNyBAQCBjb25maWcgVVNC X0RXQzNfU1QKPiAgY29uZmlnIFVTQl9EV0MzX1FDT00KPiAgCXRyaXN0YXRlICJRdWFsY29tbSBQ bGF0Zm9ybSIKPiAgCWRlcGVuZHMgb24gRVhUQ09OICYmIChBUkNIX1FDT00gfHwgQ09NUElMRV9U RVNUKQo+IC0JZGVwZW5kcyBvbiBPRgo+ICsJZGVwZW5kcyBvbiAoT0YgfHwgQUNQSSkKPiAgCWRl ZmF1bHQgVVNCX0RXQzMKPiAgCWhlbHAKPiAgCSAgU29tZSBRdWFsY29tbSBTb0NzIHVzZSBEZXNp Z25XYXJlIENvcmUgSVAgZm9yIFVTQjIvMwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9kd2Mz L2R3YzMtcWNvbS5jIGIvZHJpdmVycy91c2IvZHdjMy9kd2MzLXFjb20uYwo+IGluZGV4IDE4NGRm NGRhYTU5MC4uMWUxZjEyYjc5OTFkIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvdXNiL2R3YzMvZHdj My1xY29tLmMKPiArKysgYi9kcml2ZXJzL3VzYi9kd2MzL2R3YzMtcWNvbS5jCj4gQEAgLTQsNiAr NCw3IEBACj4gICAqIEluc3BpcmVkIGJ5IGR3YzMtb2Ytc2ltcGxlLmMKPiAgICovCj4gIAo+ICsj aW5jbHVkZSA8bGludXgvYWNwaS5oPgo+ICAjaW5jbHVkZSA8bGludXgvaW8uaD4KPiAgI2luY2x1 ZGUgPGxpbnV4L29mLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPiBAQCAtMzgsNiArMzks MjAgQEAKPiAgI2RlZmluZSBQV1JfRVZOVF9MUE1fSU5fTDJfTUFTSwkJCUJJVCg0KQo+ICAjZGVm aW5lIFBXUl9FVk5UX0xQTV9PVVRfTDJfTUFTSwkJQklUKDUpCj4gIAo+ICsjZGVmaW5lIFNETTg0 NV9RU0NSQVRDSF9CQVNFX09GRlNFVAkJMHhmODgwMAo+ICsjZGVmaW5lIFNETTg0NV9RU0NSQVRD SF9TSVpFCQkJMHg0MDAKPiArI2RlZmluZSBTRE04NDVfRFdDM19DT1JFX1NJWkUJCQkweGNkMDAK PiArCj4gK3N0cnVjdCBkd2MzX2FjcGlfcGRhdGEgewo+ICsJdTMyCQkJcXNjcmF0Y2hfYmFzZV9v ZmZzZXQ7Cj4gKwl1MzIJCQlxc2NyYXRjaF9iYXNlX3NpemU7Cj4gKwl1MzIJCQlkd2MzX2NvcmVf YmFzZV9zaXplOwo+ICsJaW50CQkJaHNfcGh5X2lycV9pbmRleDsKPiArCWludAkJCWRwX2hzX3Bo eV9pcnFfaW5kZXg7Cj4gKwlpbnQJCQlkbV9oc19waHlfaXJxX2luZGV4Owo+ICsJaW50CQkJc3Nf cGh5X2lycV9pbmRleDsKPiArfTsKPiArCj4gIHN0cnVjdCBkd2MzX3Fjb20gewo+ICAJc3RydWN0 IGRldmljZQkJKmRldjsKPiAgCXZvaWQgX19pb21lbQkJKnFzY3JhdGNoX2Jhc2U7Cj4gQEAgLTU2 LDYgKzcxLDggQEAgc3RydWN0IGR3YzNfcWNvbSB7Cj4gIAlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sJ dmJ1c19uYjsKPiAgCXN0cnVjdCBub3RpZmllcl9ibG9jawlob3N0X25iOwo+ICAKPiArCWNvbnN0 IHN0cnVjdCBkd2MzX2FjcGlfcGRhdGEgKmFjcGlfcGRhdGE7Cj4gKwo+ICAJZW51bSB1c2JfZHJf bW9kZQltb2RlOwo+ICAJYm9vbAkJCWlzX3N1c3BlbmRlZDsKPiAgCWJvb2wJCQlwbV9zdXNwZW5k ZWQ7Cj4gQEAgLTMwMCwxMiArMzE3LDI3IEBAIHN0YXRpYyB2b2lkIGR3YzNfcWNvbV9zZWxlY3Rf dXRtaV9jbGsoc3RydWN0IGR3YzNfcWNvbSAqcWNvbSkKPiAgCQkJICBQSVBFX1VUTUlfQ0xLX0RJ Uyk7Cj4gIH0KPiAgCj4gK3N0YXRpYyBpbnQgZHdjM19xY29tX2dldF9pcnEoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldiwKPiArCQkJICAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgbnVtKQo+ ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGRldi0+ZGV2Lm9mX25vZGU7Cj4gKwlp bnQgcmV0Owo+ICsKPiArCWlmIChucCkKPiArCQlyZXQgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFt ZShwZGV2LCBuYW1lKTsKPiArCWVsc2UKPiArCQlyZXQgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYs IG51bSk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAgc3RhdGljIGludCBkd2MzX3Fj b21fc2V0dXBfaXJxKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gIHsKPiAgCXN0cnVj dCBkd2MzX3Fjb20gKnFjb20gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPiArCWNvbnN0 IHN0cnVjdCBkd2MzX2FjcGlfcGRhdGEgKnBkYXRhID0gcWNvbS0+YWNwaV9wZGF0YTsKPiAgCWlu dCBpcnEsIHJldDsKPiAtCj4gLQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAi aHNfcGh5X2lycSIpOwo+ICsJaXJxID0gZHdjM19xY29tX2dldF9pcnEocGRldiwgImhzX3BoeV9p cnEiLAo+ICsJCQkJcGRhdGEgPyBwZGF0YS0+aHNfcGh5X2lycV9pbmRleCA6IC0xKTsKPiAgCWlm IChpcnEgPiAwKSB7Cj4gIAkJLyogS2VlcCB3YWtldXAgaW50ZXJydXB0cyBkaXNhYmxlZCB1bnRp bCBzdXNwZW5kICovCj4gIAkJaXJxX3NldF9zdGF0dXNfZmxhZ3MoaXJxLCBJUlFfTk9BVVRPRU4p Owo+IEBAIC0zMjAsNyArMzUyLDggQEAgc3RhdGljIGludCBkd2MzX3Fjb21fc2V0dXBfaXJxKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gIAkJcWNvbS0+aHNfcGh5X2lycSA9IGlycTsK PiAgCX0KPiAgCj4gLQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAiZHBfaHNf cGh5X2lycSIpOwo+ICsJaXJxID0gZHdjM19xY29tX2dldF9pcnEocGRldiwgImRwX2hzX3BoeV9p cnEiLAo+ICsJCQkJcGRhdGEgPyBwZGF0YS0+ZHBfaHNfcGh5X2lycV9pbmRleCA6IC0xKTsKPiAg CWlmIChpcnEgPiAwKSB7Cj4gIAkJaXJxX3NldF9zdGF0dXNfZmxhZ3MoaXJxLCBJUlFfTk9BVVRP RU4pOwo+ICAJCXJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEocWNvbS0+ZGV2LCBpcnEs IE5VTEwsCj4gQEAgLTMzNCw3ICszNjcsOCBAQCBzdGF0aWMgaW50IGR3YzNfcWNvbV9zZXR1cF9p cnEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiAgCQlxY29tLT5kcF9oc19waHlfaXJx ID0gaXJxOwo+ICAJfQo+ICAKPiAtCWlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYs ICJkbV9oc19waHlfaXJxIik7Cj4gKwlpcnEgPSBkd2MzX3Fjb21fZ2V0X2lycShwZGV2LCAiZG1f aHNfcGh5X2lycSIsCj4gKwkJCQlwZGF0YSA/IHBkYXRhLT5kbV9oc19waHlfaXJxX2luZGV4IDog LTEpOwo+ICAJaWYgKGlycSA+IDApIHsKPiAgCQlpcnFfc2V0X3N0YXR1c19mbGFncyhpcnEsIElS UV9OT0FVVE9FTik7Cj4gIAkJcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShxY29tLT5k ZXYsIGlycSwgTlVMTCwKPiBAQCAtMzQ4LDcgKzM4Miw4IEBAIHN0YXRpYyBpbnQgZHdjM19xY29t X3NldHVwX2lycShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICAJCXFjb20tPmRtX2hz X3BoeV9pcnEgPSBpcnE7Cj4gIAl9Cj4gIAo+IC0JaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5h bWUocGRldiwgInNzX3BoeV9pcnEiKTsKPiArCWlycSA9IGR3YzNfcWNvbV9nZXRfaXJxKHBkZXYs ICJzc19waHlfaXJxIiwKPiArCQkJCXBkYXRhID8gcGRhdGEtPnNzX3BoeV9pcnFfaW5kZXggOiAt MSk7Cj4gIAlpZiAoaXJxID4gMCkgewo+ICAJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGlycSwgSVJR X05PQVVUT0VOKTsKPiAgCQlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKHFjb20tPmRl diwgaXJxLCBOVUxMLAo+IEBAIC0zNzEsMTEgKzQwNiwxMSBAQCBzdGF0aWMgaW50IGR3YzNfcWNv bV9jbGtfaW5pdChzdHJ1Y3QgZHdjM19xY29tICpxY29tLCBpbnQgY291bnQpCj4gIAlzdHJ1Y3Qg ZGV2aWNlX25vZGUJKm5wID0gZGV2LT5vZl9ub2RlOwo+ICAJaW50CQkJaTsKPiAgCj4gLQlxY29t LT5udW1fY2xvY2tzID0gY291bnQ7Cj4gLQo+IC0JaWYgKCFjb3VudCkKPiArCWlmICghbnAgfHwg IWNvdW50KQo+ICAJCXJldHVybiAwOwo+ICAKPiArCXFjb20tPm51bV9jbG9ja3MgPSBjb3VudDsK PiArCj4gIAlxY29tLT5jbGtzID0gZGV2bV9rY2FsbG9jKGRldiwgcWNvbS0+bnVtX2Nsb2NrcywK PiAgCQkJCSAgc2l6ZW9mKHN0cnVjdCBjbGsgKiksIEdGUF9LRVJORUwpOwo+ICAJaWYgKCFxY29t LT5jbGtzKQo+IEBAIC00MDksMTIgKzQ0NCwxMDMgQEAgc3RhdGljIGludCBkd2MzX3Fjb21fY2xr X2luaXQoc3RydWN0IGR3YzNfcWNvbSAqcWNvbSwgaW50IGNvdW50KQo+ICAJcmV0dXJuIDA7Cj4g IH0KPiAgCj4gLXN0YXRpYyBpbnQgZHdjM19xY29tX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYpCj4gK3N0YXRpYyBpbnQgZHdjM19xY29tX2FjcGlfcmVnaXN0ZXJfY29yZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICB7Cj4gKwlzdHJ1Y3QgZHdjM19xY29tIAkqcWNv bSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwo+ICsJc3RydWN0IGRldmljZQkJKmRldiA9 ICZwZGV2LT5kZXY7Cj4gKwlzdHJ1Y3QgcmVzb3VyY2UJCSpyZXMsICpjaGlsZF9yZXMgPSBOVUxM Owo+ICsJaW50CQkJaXJxOwo+ICsJaW50CQkJcmV0Owo+ICsKPiArCXFjb20tPmR3YzMgPSBwbGF0 Zm9ybV9kZXZpY2VfYWxsb2MoImR3YzMiLCBQTEFURk9STV9ERVZJRF9BVVRPKTsKPiArCWlmICgh cWNvbS0+ZHdjMykKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlxY29tLT5kd2MzLT5kZXYu cGFyZW50ID0gZGV2Owo+ICsJcWNvbS0+ZHdjMy0+ZGV2LnR5cGUgPSBkZXYtPnR5cGU7Cj4gKwlx Y29tLT5kd2MzLT5kZXYuZG1hX21hc2sgPSBkZXYtPmRtYV9tYXNrOwo+ICsJcWNvbS0+ZHdjMy0+ ZGV2LmRtYV9wYXJtcyA9IGRldi0+ZG1hX3Bhcm1zOwo+ICsJcWNvbS0+ZHdjMy0+ZGV2LmNvaGVy ZW50X2RtYV9tYXNrID0gZGV2LT5jb2hlcmVudF9kbWFfbWFzazsKPiArCj4gKwljaGlsZF9yZXMg PSBrY2FsbG9jKDIsIHNpemVvZigqY2hpbGRfcmVzKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWNo aWxkX3JlcykKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlyZXMgPSBwbGF0Zm9ybV9nZXRf cmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwo+ICsJaWYgKCFyZXMpIHsKPiArCQlk ZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IG1lbW9yeSByZXNvdXJjZVxuIik7Cj4g KwkJcmV0ID0gLUVOT0RFVjsKPiArCQlnb3RvIG91dDsKPiArCX0KPiArCj4gKwljaGlsZF9yZXNb MF0uZmxhZ3MgPSByZXMtPmZsYWdzOwo+ICsJY2hpbGRfcmVzWzBdLnN0YXJ0ID0gcmVzLT5zdGFy dDsKPiArCWNoaWxkX3Jlc1swXS5lbmQgPSBjaGlsZF9yZXNbMF0uc3RhcnQgKwo+ICsJCXFjb20t PmFjcGlfcGRhdGEtPmR3YzNfY29yZV9iYXNlX3NpemU7Cj4gKwo+ICsJaXJxID0gcGxhdGZvcm1f Z2V0X2lycShwZGV2LCAwKTsKPiArCWNoaWxkX3Jlc1sxXS5mbGFncyA9IElPUkVTT1VSQ0VfSVJR Owo+ICsJY2hpbGRfcmVzWzFdLnN0YXJ0ID0gY2hpbGRfcmVzWzFdLmVuZCA9IGlycTsKPiArCj4g KwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhxY29tLT5kd2MzLCBjaGlsZF9y ZXMsIDIpOwo+ICsJaWYgKHJldCkgewo+ICsJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0 byBhZGQgcmVzb3VyY2VzXG4iKTsKPiArCQlnb3RvIG91dDsKPiArCX0KPiArCj4gKwlyZXQgPSBw bGF0Zm9ybV9kZXZpY2VfYWRkKHFjb20tPmR3YzMpOwo+ICsJaWYgKHJldCkKPiArCQlkZXZfZXJy KCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWRkIGRldmljZVxuIik7Cj4gKwo+ICtvdXQ6Cj4gKwlr ZnJlZShjaGlsZF9yZXMpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBk d2MzX3Fjb21fb2ZfcmVnaXN0ZXJfY29yZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ ICt7Cj4gKwlzdHJ1Y3QgZHdjM19xY29tIAkqcWNvbSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBk ZXYpOwo+ICAJc3RydWN0IGRldmljZV9ub2RlCSpucCA9IHBkZXYtPmRldi5vZl9ub2RlLCAqZHdj M19ucDsKPiAgCXN0cnVjdCBkZXZpY2UJCSpkZXYgPSAmcGRldi0+ZGV2Owo+ICsJaW50CQkJcmV0 Owo+ICsKPiArCWR3YzNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgImR3YzMiKTsKPiAr CWlmICghZHdjM19ucCkgewo+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGZpbmQgZHdjMyBj b3JlIGNoaWxkXG4iKTsKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCX0KPiArCj4gKwlyZXQgPSBv Zl9wbGF0Zm9ybV9wb3B1bGF0ZShucCwgTlVMTCwgTlVMTCwgZGV2KTsKPiArCWlmIChyZXQpIHsK PiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBkd2MzIGNvcmUgLSAlZFxuIiwg cmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXFjb20tPmR3YzMgPSBvZl9maW5k X2RldmljZV9ieV9ub2RlKGR3YzNfbnApOwo+ICsJaWYgKCFxY29tLT5kd2MzKSB7Cj4gKwkJZGV2 X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IGR3YzMgcGxhdGZvcm0gZGV2aWNlXG4iKTsKPiArCQly ZXR1cm4gLUVOT0RFVjsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGlj IGNvbnN0IHN0cnVjdCBkd2MzX2FjcGlfcGRhdGEgc2RtODQ1X2FjcGlfcGRhdGEgPSB7Cj4gKwku cXNjcmF0Y2hfYmFzZV9vZmZzZXQgPSBTRE04NDVfUVNDUkFUQ0hfQkFTRV9PRkZTRVQsCj4gKwku cXNjcmF0Y2hfYmFzZV9zaXplID0gU0RNODQ1X1FTQ1JBVENIX1NJWkUsCj4gKwkuZHdjM19jb3Jl X2Jhc2Vfc2l6ZSA9IFNETTg0NV9EV0MzX0NPUkVfU0laRSwKPiArCS5oc19waHlfaXJxX2luZGV4 ID0gMSwKPiArCS5kcF9oc19waHlfaXJxX2luZGV4ID0gNCwKPiArCS5kbV9oc19waHlfaXJxX2lu ZGV4ID0gMywKPiArCS5zc19waHlfaXJxX2luZGV4ID0gMgo+ICt9Owo+ICsKPiArc3RhdGljIGlu dCBkd2MzX3Fjb21fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJ c3RydWN0IGRldmljZV9ub2RlCSpucCA9IHBkZXYtPmRldi5vZl9ub2RlOwo+ICsJc3RydWN0IGRl dmljZQkJKmRldiA9ICZwZGV2LT5kZXY7Cj4gIAlzdHJ1Y3QgZHdjM19xY29tCSpxY29tOwo+IC0J c3RydWN0IHJlc291cmNlCQkqcmVzOwo+ICsJc3RydWN0IHJlc291cmNlCQkqcmVzLCAqcGFyZW50 X3JlcyA9IE5VTEw7Cj4gIAlpbnQJCQlyZXQsIGk7Cj4gIAlib29sCQkJaWdub3JlX3BpcGVfY2xr Owo+ICAKPiBAQCAtNDI1LDYgKzU1MSwxNCBAQCBzdGF0aWMgaW50IGR3YzNfcWNvbV9wcm9iZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRl diwgcWNvbSk7Cj4gIAlxY29tLT5kZXYgPSAmcGRldi0+ZGV2Owo+ICAKPiArCWlmIChBQ1BJX0hB TkRMRShkZXYpKSB7Cj4gKwkJcWNvbS0+YWNwaV9wZGF0YSA9IGFjcGlfZGV2aWNlX2dldF9tYXRj aF9kYXRhKGRldik7Cj4gKwkJaWYgKCFxY29tLT5hY3BpX3BkYXRhKSB7Cj4gKwkJCWRldl9lcnIo JnBkZXYtPmRldiwgIm5vIHN1cHBvcnRpbmcgQUNQSSBkZXZpY2UgZGF0YVxuIik7Cj4gKwkJCXJl dHVybiAtRUlOVkFMOwo+ICsJCX0KPiArCX0KPiArCj4gIAlxY29tLT5yZXNldHMgPSBkZXZtX3Jl c2V0X2NvbnRyb2xfYXJyYXlfZ2V0X29wdGlvbmFsX2V4Y2x1c2l2ZShkZXYpOwo+ICAJaWYgKElT X0VSUihxY29tLT5yZXNldHMpKSB7Cj4gIAkJcmV0ID0gUFRSX0VSUihxY29tLT5yZXNldHMpOwo+ IEBAIC00NTQsNyArNTg4LDIxIEBAIHN0YXRpYyBpbnQgZHdjM19xY29tX3Byb2JlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gIAl9Cj4gIAo+ICAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jl c291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKPiAtCXFjb20tPnFzY3JhdGNoX2Jhc2Ug PSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOwo+ICsKPiArCWlmIChucCkgewo+ICsJ CXBhcmVudF9yZXMgPSByZXM7Cj4gKwl9IGVsc2Ugewo+ICsJCXBhcmVudF9yZXMgPSBrbWVtZHVw KHJlcywgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSksIEdGUF9LRVJORUwpOwo+ICsJCWlmICghcGFy ZW50X3JlcykKPiArCQkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJCXBhcmVudF9yZXMtPnN0YXJ0 ID0gcmVzLT5zdGFydCArCj4gKwkJCXFjb20tPmFjcGlfcGRhdGEtPnFzY3JhdGNoX2Jhc2Vfb2Zm c2V0Owo+ICsJCXBhcmVudF9yZXMtPmVuZCA9IHBhcmVudF9yZXMtPnN0YXJ0ICsKPiArCQkJcWNv bS0+YWNwaV9wZGF0YS0+cXNjcmF0Y2hfYmFzZV9zaXplOwo+ICsJfQo+ICsKPiArCXFjb20tPnFz Y3JhdGNoX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCBwYXJlbnRfcmVzKTsKPiAg CWlmIChJU19FUlIocWNvbS0+cXNjcmF0Y2hfYmFzZSkpIHsKPiAgCQlkZXZfZXJyKGRldiwgImZh aWxlZCB0byBtYXAgcXNjcmF0Y2gsIGVycj0lZFxuIiwgcmV0KTsKPiAgCQlyZXQgPSBQVFJfRVJS KHFjb20tPnFzY3JhdGNoX2Jhc2UpOwo+IEBAIC00NjIsMTMgKzYxMCw4IEBAIHN0YXRpYyBpbnQg ZHdjM19xY29tX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gIAl9Cj4gIAo+ ICAJcmV0ID0gZHdjM19xY29tX3NldHVwX2lycShwZGV2KTsKPiAtCWlmIChyZXQpCj4gLQkJZ290 byBjbGtfZGlzYWJsZTsKPiAtCj4gLQlkd2MzX25wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAs ICJkd2MzIik7Cj4gLQlpZiAoIWR3YzNfbnApIHsKPiAtCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0 byBmaW5kIGR3YzMgY29yZSBjaGlsZFxuIik7Cj4gLQkJcmV0ID0gLUVOT0RFVjsKPiArCWlmIChy ZXQpIHsKPiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBzZXR1cCBJUlFzLCBlcnI9JWRcbiIs IHJldCk7Cj4gIAkJZ290byBjbGtfZGlzYWJsZTsKPiAgCX0KPiAgCj4gQEAgLTQ4MSwxNiArNjI0 LDEzIEBAIHN0YXRpYyBpbnQgZHdjM19xY29tX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCj4gIAlpZiAoaWdub3JlX3BpcGVfY2xrKQo+ICAJCWR3YzNfcWNvbV9zZWxlY3RfdXRt aV9jbGsocWNvbSk7Cj4gIAo+IC0JcmV0ID0gb2ZfcGxhdGZvcm1fcG9wdWxhdGUobnAsIE5VTEws IE5VTEwsIGRldik7Cj4gLQlpZiAocmV0KSB7Cj4gLQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8g cmVnaXN0ZXIgZHdjMyBjb3JlIC0gJWRcbiIsIHJldCk7Cj4gLQkJZ290byBjbGtfZGlzYWJsZTsK PiAtCX0KPiArCWlmIChucCkKPiArCQlyZXQgPSBkd2MzX3Fjb21fb2ZfcmVnaXN0ZXJfY29yZShw ZGV2KTsKPiArCWVsc2UKPiArCQlyZXQgPSBkd2MzX3Fjb21fYWNwaV9yZWdpc3Rlcl9jb3JlKHBk ZXYpOwo+ICAKPiAtCXFjb20tPmR3YzMgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKGR3YzNfbnAp Owo+IC0JaWYgKCFxY29tLT5kd2MzKSB7Cj4gLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVk IHRvIGdldCBkd2MzIHBsYXRmb3JtIGRldmljZVxuIik7Cj4gLQkJcmV0ID0gLUVOT0RFVjsKPiAr CWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBEV0MzIENv cmUsIGVycj0lZFxuIiwgcmV0KTsKPiAgCQlnb3RvIGRlcG9wdWxhdGU7Cj4gIAl9Cj4gIAo+IEBA IC01MTQsNyArNjU0LDEwIEBAIHN0YXRpYyBpbnQgZHdjM19xY29tX3Byb2JlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCj4gIAlyZXR1cm4gMDsKPiAgCj4gIGRlcG9wdWxhdGU6Cj4gLQlv Zl9wbGF0Zm9ybV9kZXBvcHVsYXRlKCZwZGV2LT5kZXYpOwo+ICsJaWYgKG5wKQo+ICsJCW9mX3Bs YXRmb3JtX2RlcG9wdWxhdGUoJnBkZXYtPmRldik7Cj4gKwllbHNlCj4gKwkJcGxhdGZvcm1fZGV2 aWNlX3B1dChwZGV2KTsKPiAgY2xrX2Rpc2FibGU6Cj4gIAlmb3IgKGkgPSBxY29tLT5udW1fY2xv Y2tzIC0gMTsgaSA+PSAwOyBpLS0pIHsKPiAgCQljbGtfZGlzYWJsZV91bnByZXBhcmUocWNvbS0+ Y2xrc1tpXSk7Cj4gQEAgLTYwMSw2ICs3NDQsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9k ZXZpY2VfaWQgZHdjM19xY29tX29mX21hdGNoW10gPSB7Cj4gIH07Cj4gIE1PRFVMRV9ERVZJQ0Vf VEFCTEUob2YsIGR3YzNfcWNvbV9vZl9tYXRjaCk7Cj4gIAo+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IGFjcGlfZGV2aWNlX2lkIGR3YzNfcWNvbV9hY3BpX21hdGNoW10gPSB7Cj4gKwl7ICJRQ09NMjQz MCIsICh1bnNpZ25lZCBsb25nKSZzZG04NDVfYWNwaV9wZGF0YSB9LAo+ICsJeyB9LAo+ICt9Owo+ ICtNT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIGR3YzNfcWNvbV9hY3BpX21hdGNoKTsKPiArCj4g IHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGR3YzNfcWNvbV9kcml2ZXIgPSB7Cj4gIAku cHJvYmUJCT0gZHdjM19xY29tX3Byb2JlLAo+ICAJLnJlbW92ZQkJPSBkd2MzX3Fjb21fcmVtb3Zl LAo+IEBAIC02MDgsNiArNzU3LDcgQEAgc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZHdj M19xY29tX2RyaXZlciA9IHsKPiAgCQkubmFtZQk9ICJkd2MzLXFjb20iLAo+ICAJCS5wbQk9ICZk d2MzX3Fjb21fZGV2X3BtX29wcywKPiAgCQkub2ZfbWF0Y2hfdGFibGUJPSBkd2MzX3Fjb21fb2Zf bWF0Y2gsCj4gKwkJLmFjcGlfbWF0Y2hfdGFibGUgPSBBQ1BJX1BUUihkd2MzX3Fjb21fYWNwaV9t YXRjaCksCj4gIAl9LAo+ICB9Owo+ICAKCi0tIApMZWUgSm9uZXMgW+adjueQvOaWr10KTGluYXJv IFNlcnZpY2VzIFRlY2huaWNhbCBMZWFkCkxpbmFyby5vcmcg4pSCIE9wZW4gc291cmNlIHNvZnR3 YXJlIGZvciBBUk0gU29DcwpGb2xsb3cgTGluYXJvOiBGYWNlYm9vayB8IFR3aXR0ZXIgfCBCbG9n CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1h cm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5v cmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0t a2VybmVsCg==