From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 843EE51C39 for ; Tue, 27 Feb 2024 18:51:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.169 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709059872; cv=none; b=TQeTerxtY6FDnDNEADm+CuuaBRK2b/H6elxzRAHJbKDtLpRXh6e6REjNOsh9o9mw9SkalRlSW2c6e1E3/mDmRvt+REinl+Ug81F4ujHyH958mbOvLXDBT9vwVe4k9469Im1AjZdjFerpaPo0qgSfrcMI6JJoigItajI8noZQWU0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709059872; c=relaxed/simple; bh=m8BCJCDCVjUu1aX9u8678gH0B9TMigZhFp4TpDpGOtU=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=G2//c5YUpMMFqUZI7ao7yymaUNUietMcyJ6oeoe+k38ihFX3yuwAgodRW0R6V22Mv70xVx4pEm8q9hiLmrFAhkQTkxlELMc07fAtk1oBeyCBkAiT+rrHCs0kYKRg4S1WPKWp6VzLQR463gV/aaZlCLzXL9dV72lk9PXuXaoLWLg= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=rE2q19TX; arc=none smtp.client-ip=209.85.214.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="rE2q19TX" Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-1db6e0996ceso34374455ad.2 for ; Tue, 27 Feb 2024 10:51:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1709059870; x=1709664670; darn=vger.kernel.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=ZzsUzPaeQV0xVaYYOa5fkl+D3bB3KmqWtFdIBMocqZs=; b=rE2q19TXF19nFEFo162gIW2eIUbGHpXw3tXaHA4YI4gHEjLslGklZXmA8MZ6sXioWs CWT6yQxpjR7nLjbSDZrTtWRbNzJfjuwssWl3V7xhG16yk0ClN7YBrq1DS0MqTBqQHuYV 9veaVXZykqxeaymfPrMLZk26deeHC+AZVHzQcFq7hnzmztHWuHsn1z2OAEkMnb0D2zex P8ALrEboDuyAU7HD49sxq3RIIcOZo6RNDg2WRQAT4d4YX8frXNZCeYRwKUHYJxCuU3hc WI2vLjV6KwZYiO9FKo9rXT+Hd6Mr5pQIQH8JWIqR4QELIeLWPTDU7ihrAJ3Udqgz0eTl S5iA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709059870; x=1709664670; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ZzsUzPaeQV0xVaYYOa5fkl+D3bB3KmqWtFdIBMocqZs=; b=DoL7XiDxLSKT3JiviWWuVPEylU69TtEAJCCwuMU9AyMszbw4XxNsC96sP9hRhHy4Yr wZCRhExNCesdHvaJ9/40d2S/WKZdouKGyMCHSlW0kzBObrYdjpdQoPm5ae+0UsuAzPvj VyLPmM0sylEdviZ9Hm31FM5XR/H1buLDVx6hn/U+P1DTFNTyaEurTdol+Yg8cWeC7G13 G2ZTVINIlaVu6PNDTgp0RKoab1EiY4Fs1SMY/iOtGkptlpbU7+tkXethPS7XcNIh4c4h RXqZU+iSh4kRtJWCL1OuUa9p4MIrC5SZC6ugBUNgJ2K+e51itNBUzf9D5btqpte65D6G jbfw== X-Forwarded-Encrypted: i=1; AJvYcCUd9Q2X5Vt88G7lNCs2ymtQnu2ZCM0PVnYeJjKB5w/eYlCLLS0Cpl4NSKon8zBe3xRZLpG9Nyu9iRbY5753cON/G9XlOCtLCFOwtCjUAQ== X-Gm-Message-State: AOJu0Ywy1j50geWpO2Nsif6TT0jhUlBYWhDojA5oOXdfiPlbu60607jH 8DDl0E/HjUQmfbT2eNifn+3IErXPta0ZoJf7apmyuxe+mSt6k+SHhn72++fdjg== X-Google-Smtp-Source: AGHT+IFMrquxHELSuk64r8EzaLnPYxdhtlQPf9g7u2EtEZHnTxtPf52KDLuAlSX+ap+F1qbMBmUq7w== X-Received: by 2002:a17:903:449:b0:1da:2c01:fef5 with SMTP id iw9-20020a170903044900b001da2c01fef5mr10095757plb.56.1709059869792; Tue, 27 Feb 2024 10:51:09 -0800 (PST) Received: from thinkpad ([117.213.97.177]) by smtp.gmail.com with ESMTPSA id c3-20020a170902d90300b001db93340f9bsm1828147plz.205.2024.02.27.10.50.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Feb 2024 10:51:09 -0800 (PST) Date: Wed, 28 Feb 2024 00:20:50 +0530 From: Manivannan Sadhasivam To: Frank Li Cc: Jingoo Han , Gustavo Pimentel , Lorenzo Pieralisi , Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Marek Vasut , Yoshihiro Shimoda , Thierry Reding , Jonathan Hunter , Kishon Vijay Abraham I , Vidya Sagar , Vignesh Raghavendra , Richard Zhu , Lucas Stach , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , Minghuan Lian , Mingkai Hu , Roy Zang , Kunihiko Hayashi , Masami Hiramatsu , Kishon Vijay Abraham I , linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, Niklas Cassel Subject: Re: [PATCH v8 08/10] PCI: dwc: ep: Add a generic dw_pcie_ep_linkdown() API to handle LINK_DOWN event Message-ID: <20240227185050.GV2587@thinkpad> References: <20240224-pci-dbi-rework-v8-0-64c7fd0cfe64@linaro.org> <20240224-pci-dbi-rework-v8-8-64c7fd0cfe64@linaro.org> <20240227123024.GO2587@thinkpad> Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: On Tue, Feb 27, 2024 at 12:26:05PM -0500, Frank Li wrote: > On Tue, Feb 27, 2024 at 06:00:24PM +0530, Manivannan Sadhasivam wrote: > > On Mon, Feb 26, 2024 at 12:18:18PM -0500, Frank Li wrote: > > > On Sat, Feb 24, 2024 at 12:24:14PM +0530, Manivannan Sadhasivam wrote: > > > > The PCIe link can go to LINK_DOWN state in one of the following scenarios: > > > > > > > > 1. Fundamental (PERST#)/hot/warm reset > > > > 2. Link transition from L2/L3 to L0 > > > > > > From L0 to L2/l3 > > > > > > > I don't understand what you mean here. Link down won't happen while moving from > > L0 to L2/L3, it is the opposite. > > Strange, why there are not linkdown from L0 to L2/l3. But have linkdown > from L2/l3 to L0? when linkup happen? Any document show these? > Refer PCIe Spec 5.0, Figure 5-1 Link Power Management State Flow Diagram. - Mani > Frank > > > > > > > > > > > In those cases, LINK_DOWN causes some non-sticky DWC registers to loose the > > > > state (like REBAR, PTM_CAP etc...). So the drivers need to reinitialize > > > > them to function properly once the link comes back again. > > > > > > > > This is not a problem for drivers supporting PERST# IRQ, since they can > > > > reinitialize the registers in the PERST# IRQ callback. But for the drivers > > > > not supporting PERST#, there is no way they can reinitialize the registers > > > > other than relying on LINK_DOWN IRQ received when the link goes down. So > > > > let's add a DWC generic API dw_pcie_ep_linkdown() that reinitializes the > > > > non-sticky registers and also notifies the EPF drivers about link going > > > > down. > > > > > > > > This API can also be used by the drivers supporting PERST# to handle the > > > > scenario (2) mentioned above. > > > > > > > > Signed-off-by: Manivannan Sadhasivam > > > > --- > > > > drivers/pci/controller/dwc/pcie-designware-ep.c | 111 ++++++++++++++---------- > > > > drivers/pci/controller/dwc/pcie-designware.h | 5 ++ > > > > 2 files changed, 72 insertions(+), 44 deletions(-) > > > > > > > > diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c b/drivers/pci/controller/dwc/pcie-designware-ep.c > > > > index 278bdc9b2269..fed4c2936c78 100644 > > > > --- a/drivers/pci/controller/dwc/pcie-designware-ep.c > > > > +++ b/drivers/pci/controller/dwc/pcie-designware-ep.c > > > > @@ -14,14 +14,6 @@ > > > > #include > > > > #include > > > > > > > > -void dw_pcie_ep_linkup(struct dw_pcie_ep *ep) > > > > -{ > > > > - struct pci_epc *epc = ep->epc; > > > > - > > > > - pci_epc_linkup(epc); > > > > -} > > > > -EXPORT_SYMBOL_GPL(dw_pcie_ep_linkup); > > > > - > > > > > > No sure why git remove this block and add these back. > > > > > > > Because, we are adding dw_pcie_ep_linkdown() API way below and it makes sense to > > move this API also to keep it ordered. Maybe I should've described it in commit > > message. > > > > - Mani > > > > > > > > > void dw_pcie_ep_init_notify(struct dw_pcie_ep *ep) > > > > { > > > > struct pci_epc *epc = ep->epc; > > > > @@ -603,19 +595,56 @@ static unsigned int dw_pcie_ep_find_ext_capability(struct dw_pcie *pci, int cap) > > > > return 0; > > > > } > > > > > > > > +static void dw_pcie_ep_init_non_sticky_registers(struct dw_pcie *pci) > > > > +{ > > > > + unsigned int offset, ptm_cap_base; > > > > + unsigned int nbars; > > > > + u32 reg, i; > > > > + > > > > + offset = dw_pcie_ep_find_ext_capability(pci, PCI_EXT_CAP_ID_REBAR); > > > > + ptm_cap_base = dw_pcie_ep_find_ext_capability(pci, PCI_EXT_CAP_ID_PTM); > > > > + > > > > + dw_pcie_dbi_ro_wr_en(pci); > > > > + > > > > + if (offset) { > > > > + reg = dw_pcie_readl_dbi(pci, offset + PCI_REBAR_CTRL); > > > > + nbars = (reg & PCI_REBAR_CTRL_NBAR_MASK) >> > > > > + PCI_REBAR_CTRL_NBAR_SHIFT; > > > > + > > > > + for (i = 0; i < nbars; i++, offset += PCI_REBAR_CTRL) > > > > + dw_pcie_writel_dbi(pci, offset + PCI_REBAR_CAP, 0x0); > > > > + } > > > > + > > > > + /* > > > > + * PTM responder capability can be disabled only after disabling > > > > + * PTM root capability. > > > > + */ > > > > + if (ptm_cap_base) { > > > > + dw_pcie_dbi_ro_wr_en(pci); > > > > + reg = dw_pcie_readl_dbi(pci, ptm_cap_base + PCI_PTM_CAP); > > > > + reg &= ~PCI_PTM_CAP_ROOT; > > > > + dw_pcie_writel_dbi(pci, ptm_cap_base + PCI_PTM_CAP, reg); > > > > + > > > > + reg = dw_pcie_readl_dbi(pci, ptm_cap_base + PCI_PTM_CAP); > > > > + reg &= ~(PCI_PTM_CAP_RES | PCI_PTM_GRANULARITY_MASK); > > > > + dw_pcie_writel_dbi(pci, ptm_cap_base + PCI_PTM_CAP, reg); > > > > + dw_pcie_dbi_ro_wr_dis(pci); > > > > + } > > > > + > > > > + dw_pcie_setup(pci); > > > > + dw_pcie_dbi_ro_wr_dis(pci); > > > > +} > > > > + > > > > int dw_pcie_ep_init_registers(struct dw_pcie_ep *ep) > > > > { > > > > struct dw_pcie *pci = to_dw_pcie_from_ep(ep); > > > > struct dw_pcie_ep_func *ep_func; > > > > struct device *dev = pci->dev; > > > > struct pci_epc *epc = ep->epc; > > > > - unsigned int offset, ptm_cap_base; > > > > - unsigned int nbars; > > > > u8 hdr_type; > > > > u8 func_no; > > > > - int i, ret; > > > > void *addr; > > > > - u32 reg; > > > > + int ret; > > > > > > > > hdr_type = dw_pcie_readb_dbi(pci, PCI_HEADER_TYPE) & > > > > PCI_HEADER_TYPE_MASK; > > > > @@ -678,38 +707,7 @@ int dw_pcie_ep_init_registers(struct dw_pcie_ep *ep) > > > > if (ep->ops->init) > > > > ep->ops->init(ep); > > > > > > > > - offset = dw_pcie_ep_find_ext_capability(pci, PCI_EXT_CAP_ID_REBAR); > > > > - ptm_cap_base = dw_pcie_ep_find_ext_capability(pci, PCI_EXT_CAP_ID_PTM); > > > > - > > > > - dw_pcie_dbi_ro_wr_en(pci); > > > > - > > > > - if (offset) { > > > > - reg = dw_pcie_readl_dbi(pci, offset + PCI_REBAR_CTRL); > > > > - nbars = (reg & PCI_REBAR_CTRL_NBAR_MASK) >> > > > > - PCI_REBAR_CTRL_NBAR_SHIFT; > > > > - > > > > - for (i = 0; i < nbars; i++, offset += PCI_REBAR_CTRL) > > > > - dw_pcie_writel_dbi(pci, offset + PCI_REBAR_CAP, 0x0); > > > > - } > > > > - > > > > - /* > > > > - * PTM responder capability can be disabled only after disabling > > > > - * PTM root capability. > > > > - */ > > > > - if (ptm_cap_base) { > > > > - dw_pcie_dbi_ro_wr_en(pci); > > > > - reg = dw_pcie_readl_dbi(pci, ptm_cap_base + PCI_PTM_CAP); > > > > - reg &= ~PCI_PTM_CAP_ROOT; > > > > - dw_pcie_writel_dbi(pci, ptm_cap_base + PCI_PTM_CAP, reg); > > > > - > > > > - reg = dw_pcie_readl_dbi(pci, ptm_cap_base + PCI_PTM_CAP); > > > > - reg &= ~(PCI_PTM_CAP_RES | PCI_PTM_GRANULARITY_MASK); > > > > - dw_pcie_writel_dbi(pci, ptm_cap_base + PCI_PTM_CAP, reg); > > > > - dw_pcie_dbi_ro_wr_dis(pci); > > > > - } > > > > - > > > > - dw_pcie_setup(pci); > > > > - dw_pcie_dbi_ro_wr_dis(pci); > > > > + dw_pcie_ep_init_non_sticky_registers(pci); > > > > > > > > return 0; > > > > > > > > @@ -720,6 +718,31 @@ int dw_pcie_ep_init_registers(struct dw_pcie_ep *ep) > > > > } > > > > EXPORT_SYMBOL_GPL(dw_pcie_ep_init_registers); > > > > > > > > +void dw_pcie_ep_linkup(struct dw_pcie_ep *ep) > > > > +{ > > > > + struct pci_epc *epc = ep->epc; > > > > + > > > > + pci_epc_linkup(epc); > > > > +} > > > > +EXPORT_SYMBOL_GPL(dw_pcie_ep_linkup); > > > > + > > > > +void dw_pcie_ep_linkdown(struct dw_pcie_ep *ep) > > > > +{ > > > > + struct dw_pcie *pci = to_dw_pcie_from_ep(ep); > > > > + struct pci_epc *epc = ep->epc; > > > > + > > > > + /* > > > > + * Initialize the non-sticky DWC registers as they would've reset post > > > > + * LINK_DOWN. This is specifically needed for drivers not supporting > > > > + * PERST# as they have no way to reinitialize the registers before the > > > > + * link comes back again. > > > > + */ > > > > + dw_pcie_ep_init_non_sticky_registers(pci); > > > > + > > > > + pci_epc_linkdown(epc); > > > > +} > > > > +EXPORT_SYMBOL_GPL(dw_pcie_ep_linkdown); > > > > + > > > > int dw_pcie_ep_init(struct dw_pcie_ep *ep) > > > > { > > > > int ret; > > > > diff --git a/drivers/pci/controller/dwc/pcie-designware.h b/drivers/pci/controller/dwc/pcie-designware.h > > > > index f8e5431a207b..152969545b0a 100644 > > > > --- a/drivers/pci/controller/dwc/pcie-designware.h > > > > +++ b/drivers/pci/controller/dwc/pcie-designware.h > > > > @@ -668,6 +668,7 @@ static inline void __iomem *dw_pcie_own_conf_map_bus(struct pci_bus *bus, > > > > > > > > #ifdef CONFIG_PCIE_DW_EP > > > > void dw_pcie_ep_linkup(struct dw_pcie_ep *ep); > > > > +void dw_pcie_ep_linkdown(struct dw_pcie_ep *ep); > > > > int dw_pcie_ep_init(struct dw_pcie_ep *ep); > > > > int dw_pcie_ep_init_registers(struct dw_pcie_ep *ep); > > > > void dw_pcie_ep_init_notify(struct dw_pcie_ep *ep); > > > > @@ -688,6 +689,10 @@ static inline void dw_pcie_ep_linkup(struct dw_pcie_ep *ep) > > > > { > > > > } > > > > > > > > +static inline void dw_pcie_ep_linkdown(struct dw_pcie_ep *ep) > > > > +{ > > > > +} > > > > + > > > > static inline int dw_pcie_ep_init(struct dw_pcie_ep *ep) > > > > { > > > > return 0; > > > > > > > > -- > > > > 2.25.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 Received: from lists.ozlabs.org (lists.ozlabs.org [112.213.38.117]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 37445C54798 for ; Tue, 27 Feb 2024 18:51:57 +0000 (UTC) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256 header.s=google header.b=SHljwKuH; dkim-atps=neutral Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4Tkmmq67vNz3vYC for ; Wed, 28 Feb 2024 05:51:55 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256 header.s=google header.b=SHljwKuH; dkim-atps=neutral Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=linaro.org (client-ip=2607:f8b0:4864:20::634; helo=mail-pl1-x634.google.com; envelope-from=manivannan.sadhasivam@linaro.org; receiver=lists.ozlabs.org) Received: from mail-pl1-x634.google.com (mail-pl1-x634.google.com [IPv6:2607:f8b0:4864:20::634]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4Tkmm046bcz3vYC for ; Wed, 28 Feb 2024 05:51:12 +1100 (AEDT) Received: by mail-pl1-x634.google.com with SMTP id d9443c01a7336-1dc1ff697f9so37763565ad.0 for ; Tue, 27 Feb 2024 10:51:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1709059870; x=1709664670; darn=lists.ozlabs.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=ZzsUzPaeQV0xVaYYOa5fkl+D3bB3KmqWtFdIBMocqZs=; b=SHljwKuHgMMhSZ2/VOiSHJNV+emyQOWylhxPJHi6oWf1bJazrpo0qnHX35HHLM9p7m y3aj+5K5AKwJd7UomRPA9BRu+FQXZtEuIM0bfvdZ2HzxppezhZGxm4WWz0EL/B8pl2FY t6PH7V+UXCHt+V5bfMQF6b256UJo4LKxkOKNxtvMK6MrilGLuXWPKS47llGwOMFn3r9X kwOU/joypnKp78POnW2ir4baYSvQC66gOpip1TauAsdNcefqPyLyS6DKysVhYiGqJ+m2 kFBUdf3T3LYKYEtL7FpmyQ56vOnEr06Q6fPtyR0EQlzeUHjxfW9E2ug9+s6xuh/grqoa TkTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709059870; x=1709664670; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ZzsUzPaeQV0xVaYYOa5fkl+D3bB3KmqWtFdIBMocqZs=; b=OuwSz79V+tRqQvmNZChfyREUWqlfc1ytHFJ6RinX0kEN0GjbwJm9oMLHxasbhpfTVF Q9lvnPdIslHtXYUFWVymEr6YLGDJBH3I7Xc7v+ansfwurto0efg3WQr7GFAIsg5wUA0F Qs3r3bE1xdDq3Lk0ne5BaM+kAftL+zQH/4m1cxropIIe+ZPIs56eDkHJMaE29c4127zG 3EvkQ9pxcHZEBSVDDI0ktAsvUOX51AivvZU02VWE8q/urOke13vRsB5xiiEctr8X1xMN qcY2x5AUZE55CIDLdGnUW8iUei4bLjO14OaS6PB7MEKguIbz35BYEYdUI88i418G/+e5 gHzw== X-Forwarded-Encrypted: i=1; AJvYcCXrxY1Dv75YGI2BoWyAzatT2DN2X9aNPqbGDdLRSZV3j7nkPha336c1rGi3Ry8VyOjDqOHVgELgCGFDXYYrPHmJgvBI652pwL6zFwjdKA== X-Gm-Message-State: AOJu0Yzc2nI5mtVwyvNnP0L1MUsfFUXLEO5nwQcu+FfOsfBd8AvRDy5E AmV2nKeofZbZLQa8cUKWAQgBAlgTp1hHUnuFjqKDjqLbF7z+V43FH6kyDF8BnQ== X-Google-Smtp-Source: AGHT+IFMrquxHELSuk64r8EzaLnPYxdhtlQPf9g7u2EtEZHnTxtPf52KDLuAlSX+ap+F1qbMBmUq7w== X-Received: by 2002:a17:903:449:b0:1da:2c01:fef5 with SMTP id iw9-20020a170903044900b001da2c01fef5mr10095757plb.56.1709059869792; Tue, 27 Feb 2024 10:51:09 -0800 (PST) Received: from thinkpad ([117.213.97.177]) by smtp.gmail.com with ESMTPSA id c3-20020a170902d90300b001db93340f9bsm1828147plz.205.2024.02.27.10.50.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Feb 2024 10:51:09 -0800 (PST) Date: Wed, 28 Feb 2024 00:20:50 +0530 From: Manivannan Sadhasivam To: Frank Li Subject: Re: [PATCH v8 08/10] PCI: dwc: ep: Add a generic dw_pcie_ep_linkdown() API to handle LINK_DOWN event Message-ID: <20240227185050.GV2587@thinkpad> References: <20240224-pci-dbi-rework-v8-0-64c7fd0cfe64@linaro.org> <20240224-pci-dbi-rework-v8-8-64c7fd0cfe64@linaro.org> <20240227123024.GO2587@thinkpad> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= , Vignesh Raghavendra , Kunihiko Hayashi , linux-pci@vger.kernel.org, Lorenzo Pieralisi , Minghuan Lian , Thierry Reding , Kishon Vijay Abraham I , Fabio Estevam , Marek Vasut , Kishon Vijay Abraham I , Rob Herring , linux-tegra@vger.kernel.org, Jonathan Hunter , NXP Linux Team , Richard Zhu , linux-arm-msm@vger.kernel.org, Sascha Hauer , linuxppc-dev@lists.ozlabs.org, Bjorn Helgaas , linux-omap@vger.kernel.org, Mingkai Hu , linux-arm-kernel@lists.infradead.org, Roy Zang , Niklas Cassel , Jingoo Han , Yoshihiro Shimoda , linux-kernel@vger.kernel.org, Vidya Sagar , linux-renesas-soc@vger.kernel.org, Masami Hiramatsu , Pengutronix Kernel Team , Gustavo Pimentel , Shawn Guo , Lucas Stach Errors-To: linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org Sender: "Linuxppc-dev" On Tue, Feb 27, 2024 at 12:26:05PM -0500, Frank Li wrote: > On Tue, Feb 27, 2024 at 06:00:24PM +0530, Manivannan Sadhasivam wrote: > > On Mon, Feb 26, 2024 at 12:18:18PM -0500, Frank Li wrote: > > > On Sat, Feb 24, 2024 at 12:24:14PM +0530, Manivannan Sadhasivam wrote: > > > > The PCIe link can go to LINK_DOWN state in one of the following scenarios: > > > > > > > > 1. Fundamental (PERST#)/hot/warm reset > > > > 2. Link transition from L2/L3 to L0 > > > > > > From L0 to L2/l3 > > > > > > > I don't understand what you mean here. Link down won't happen while moving from > > L0 to L2/L3, it is the opposite. > > Strange, why there are not linkdown from L0 to L2/l3. But have linkdown > from L2/l3 to L0? when linkup happen? Any document show these? > Refer PCIe Spec 5.0, Figure 5-1 Link Power Management State Flow Diagram. - Mani > Frank > > > > > > > > > > > In those cases, LINK_DOWN causes some non-sticky DWC registers to loose the > > > > state (like REBAR, PTM_CAP etc...). So the drivers need to reinitialize > > > > them to function properly once the link comes back again. > > > > > > > > This is not a problem for drivers supporting PERST# IRQ, since they can > > > > reinitialize the registers in the PERST# IRQ callback. But for the drivers > > > > not supporting PERST#, there is no way they can reinitialize the registers > > > > other than relying on LINK_DOWN IRQ received when the link goes down. So > > > > let's add a DWC generic API dw_pcie_ep_linkdown() that reinitializes the > > > > non-sticky registers and also notifies the EPF drivers about link going > > > > down. > > > > > > > > This API can also be used by the drivers supporting PERST# to handle the > > > > scenario (2) mentioned above. > > > > > > > > Signed-off-by: Manivannan Sadhasivam > > > > --- > > > > drivers/pci/controller/dwc/pcie-designware-ep.c | 111 ++++++++++++++---------- > > > > drivers/pci/controller/dwc/pcie-designware.h | 5 ++ > > > > 2 files changed, 72 insertions(+), 44 deletions(-) > > > > > > > > diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c b/drivers/pci/controller/dwc/pcie-designware-ep.c > > > > index 278bdc9b2269..fed4c2936c78 100644 > > > > --- a/drivers/pci/controller/dwc/pcie-designware-ep.c > > > > +++ b/drivers/pci/controller/dwc/pcie-designware-ep.c > > > > @@ -14,14 +14,6 @@ > > > > #include > > > > #include > > > > > > > > -void dw_pcie_ep_linkup(struct dw_pcie_ep *ep) > > > > -{ > > > > - struct pci_epc *epc = ep->epc; > > > > - > > > > - pci_epc_linkup(epc); > > > > -} > > > > -EXPORT_SYMBOL_GPL(dw_pcie_ep_linkup); > > > > - > > > > > > No sure why git remove this block and add these back. > > > > > > > Because, we are adding dw_pcie_ep_linkdown() API way below and it makes sense to > > move this API also to keep it ordered. Maybe I should've described it in commit > > message. > > > > - Mani > > > > > > > > > void dw_pcie_ep_init_notify(struct dw_pcie_ep *ep) > > > > { > > > > struct pci_epc *epc = ep->epc; > > > > @@ -603,19 +595,56 @@ static unsigned int dw_pcie_ep_find_ext_capability(struct dw_pcie *pci, int cap) > > > > return 0; > > > > } > > > > > > > > +static void dw_pcie_ep_init_non_sticky_registers(struct dw_pcie *pci) > > > > +{ > > > > + unsigned int offset, ptm_cap_base; > > > > + unsigned int nbars; > > > > + u32 reg, i; > > > > + > > > > + offset = dw_pcie_ep_find_ext_capability(pci, PCI_EXT_CAP_ID_REBAR); > > > > + ptm_cap_base = dw_pcie_ep_find_ext_capability(pci, PCI_EXT_CAP_ID_PTM); > > > > + > > > > + dw_pcie_dbi_ro_wr_en(pci); > > > > + > > > > + if (offset) { > > > > + reg = dw_pcie_readl_dbi(pci, offset + PCI_REBAR_CTRL); > > > > + nbars = (reg & PCI_REBAR_CTRL_NBAR_MASK) >> > > > > + PCI_REBAR_CTRL_NBAR_SHIFT; > > > > + > > > > + for (i = 0; i < nbars; i++, offset += PCI_REBAR_CTRL) > > > > + dw_pcie_writel_dbi(pci, offset + PCI_REBAR_CAP, 0x0); > > > > + } > > > > + > > > > + /* > > > > + * PTM responder capability can be disabled only after disabling > > > > + * PTM root capability. > > > > + */ > > > > + if (ptm_cap_base) { > > > > + dw_pcie_dbi_ro_wr_en(pci); > > > > + reg = dw_pcie_readl_dbi(pci, ptm_cap_base + PCI_PTM_CAP); > > > > + reg &= ~PCI_PTM_CAP_ROOT; > > > > + dw_pcie_writel_dbi(pci, ptm_cap_base + PCI_PTM_CAP, reg); > > > > + > > > > + reg = dw_pcie_readl_dbi(pci, ptm_cap_base + PCI_PTM_CAP); > > > > + reg &= ~(PCI_PTM_CAP_RES | PCI_PTM_GRANULARITY_MASK); > > > > + dw_pcie_writel_dbi(pci, ptm_cap_base + PCI_PTM_CAP, reg); > > > > + dw_pcie_dbi_ro_wr_dis(pci); > > > > + } > > > > + > > > > + dw_pcie_setup(pci); > > > > + dw_pcie_dbi_ro_wr_dis(pci); > > > > +} > > > > + > > > > int dw_pcie_ep_init_registers(struct dw_pcie_ep *ep) > > > > { > > > > struct dw_pcie *pci = to_dw_pcie_from_ep(ep); > > > > struct dw_pcie_ep_func *ep_func; > > > > struct device *dev = pci->dev; > > > > struct pci_epc *epc = ep->epc; > > > > - unsigned int offset, ptm_cap_base; > > > > - unsigned int nbars; > > > > u8 hdr_type; > > > > u8 func_no; > > > > - int i, ret; > > > > void *addr; > > > > - u32 reg; > > > > + int ret; > > > > > > > > hdr_type = dw_pcie_readb_dbi(pci, PCI_HEADER_TYPE) & > > > > PCI_HEADER_TYPE_MASK; > > > > @@ -678,38 +707,7 @@ int dw_pcie_ep_init_registers(struct dw_pcie_ep *ep) > > > > if (ep->ops->init) > > > > ep->ops->init(ep); > > > > > > > > - offset = dw_pcie_ep_find_ext_capability(pci, PCI_EXT_CAP_ID_REBAR); > > > > - ptm_cap_base = dw_pcie_ep_find_ext_capability(pci, PCI_EXT_CAP_ID_PTM); > > > > - > > > > - dw_pcie_dbi_ro_wr_en(pci); > > > > - > > > > - if (offset) { > > > > - reg = dw_pcie_readl_dbi(pci, offset + PCI_REBAR_CTRL); > > > > - nbars = (reg & PCI_REBAR_CTRL_NBAR_MASK) >> > > > > - PCI_REBAR_CTRL_NBAR_SHIFT; > > > > - > > > > - for (i = 0; i < nbars; i++, offset += PCI_REBAR_CTRL) > > > > - dw_pcie_writel_dbi(pci, offset + PCI_REBAR_CAP, 0x0); > > > > - } > > > > - > > > > - /* > > > > - * PTM responder capability can be disabled only after disabling > > > > - * PTM root capability. > > > > - */ > > > > - if (ptm_cap_base) { > > > > - dw_pcie_dbi_ro_wr_en(pci); > > > > - reg = dw_pcie_readl_dbi(pci, ptm_cap_base + PCI_PTM_CAP); > > > > - reg &= ~PCI_PTM_CAP_ROOT; > > > > - dw_pcie_writel_dbi(pci, ptm_cap_base + PCI_PTM_CAP, reg); > > > > - > > > > - reg = dw_pcie_readl_dbi(pci, ptm_cap_base + PCI_PTM_CAP); > > > > - reg &= ~(PCI_PTM_CAP_RES | PCI_PTM_GRANULARITY_MASK); > > > > - dw_pcie_writel_dbi(pci, ptm_cap_base + PCI_PTM_CAP, reg); > > > > - dw_pcie_dbi_ro_wr_dis(pci); > > > > - } > > > > - > > > > - dw_pcie_setup(pci); > > > > - dw_pcie_dbi_ro_wr_dis(pci); > > > > + dw_pcie_ep_init_non_sticky_registers(pci); > > > > > > > > return 0; > > > > > > > > @@ -720,6 +718,31 @@ int dw_pcie_ep_init_registers(struct dw_pcie_ep *ep) > > > > } > > > > EXPORT_SYMBOL_GPL(dw_pcie_ep_init_registers); > > > > > > > > +void dw_pcie_ep_linkup(struct dw_pcie_ep *ep) > > > > +{ > > > > + struct pci_epc *epc = ep->epc; > > > > + > > > > + pci_epc_linkup(epc); > > > > +} > > > > +EXPORT_SYMBOL_GPL(dw_pcie_ep_linkup); > > > > + > > > > +void dw_pcie_ep_linkdown(struct dw_pcie_ep *ep) > > > > +{ > > > > + struct dw_pcie *pci = to_dw_pcie_from_ep(ep); > > > > + struct pci_epc *epc = ep->epc; > > > > + > > > > + /* > > > > + * Initialize the non-sticky DWC registers as they would've reset post > > > > + * LINK_DOWN. This is specifically needed for drivers not supporting > > > > + * PERST# as they have no way to reinitialize the registers before the > > > > + * link comes back again. > > > > + */ > > > > + dw_pcie_ep_init_non_sticky_registers(pci); > > > > + > > > > + pci_epc_linkdown(epc); > > > > +} > > > > +EXPORT_SYMBOL_GPL(dw_pcie_ep_linkdown); > > > > + > > > > int dw_pcie_ep_init(struct dw_pcie_ep *ep) > > > > { > > > > int ret; > > > > diff --git a/drivers/pci/controller/dwc/pcie-designware.h b/drivers/pci/controller/dwc/pcie-designware.h > > > > index f8e5431a207b..152969545b0a 100644 > > > > --- a/drivers/pci/controller/dwc/pcie-designware.h > > > > +++ b/drivers/pci/controller/dwc/pcie-designware.h > > > > @@ -668,6 +668,7 @@ static inline void __iomem *dw_pcie_own_conf_map_bus(struct pci_bus *bus, > > > > > > > > #ifdef CONFIG_PCIE_DW_EP > > > > void dw_pcie_ep_linkup(struct dw_pcie_ep *ep); > > > > +void dw_pcie_ep_linkdown(struct dw_pcie_ep *ep); > > > > int dw_pcie_ep_init(struct dw_pcie_ep *ep); > > > > int dw_pcie_ep_init_registers(struct dw_pcie_ep *ep); > > > > void dw_pcie_ep_init_notify(struct dw_pcie_ep *ep); > > > > @@ -688,6 +689,10 @@ static inline void dw_pcie_ep_linkup(struct dw_pcie_ep *ep) > > > > { > > > > } > > > > > > > > +static inline void dw_pcie_ep_linkdown(struct dw_pcie_ep *ep) > > > > +{ > > > > +} > > > > + > > > > static inline int dw_pcie_ep_init(struct dw_pcie_ep *ep) > > > > { > > > > return 0; > > > > > > > > -- > > > > 2.25.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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 5C725C54798 for ; Tue, 27 Feb 2024 18:51:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=gshlpAtiHLjIrpfy7XhBs2wMnDxOw2sHBdWB/9CvH6E=; b=mv1M++b5ytlHMh wJ4jfFNVYbLIVJCZFee26BkI6kFU0nPXpyIyBHXWAQVXE+bMwu6k9vgR4eDKi6demDoTlYPYsgfEd 1FVSIiINMLjFC4482nJbFng/JH3Ne+mRL84i5OyN9qFfTRvV+dg/j1yWKZdO3ASLXcIdrqB9Yxh9P 4deIHllmaA56ujPxXEscJGKmx3JXX36Xah10TrMM5eh39sHmzl7I/MU3VJoMb8mDcFeUhCzYIWINp l5zV48wfkBFeEF4p0hKE5QWKwsi1ZxfOoQPHTsGzS0WUNX8oEX9DCu2j6VYlzKVp4nvG/ET1LFR3K sJTYRhocV3Jtl1CL5LDw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rf2Xq-00000006VCx-1IgT; Tue, 27 Feb 2024 18:51:14 +0000 Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rf2Xm-00000006VBQ-3p0M for linux-arm-kernel@lists.infradead.org; Tue, 27 Feb 2024 18:51:12 +0000 Received: by mail-pl1-x633.google.com with SMTP id d9443c01a7336-1dc75972f25so39399045ad.1 for ; Tue, 27 Feb 2024 10:51:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1709059870; x=1709664670; darn=lists.infradead.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=ZzsUzPaeQV0xVaYYOa5fkl+D3bB3KmqWtFdIBMocqZs=; b=THDZsSyIP3LOfglcpO0FRaq7pQ0Fc3Duj7MQ4MBUTEWjk4FOoK2CpiTDMbOPZskmpr layS9mYJTppkJCb9I/y0+kFEoTNkAkeL+V8I6GhieQVZ2A+hlm2hR1tOcnjTck7QoOO8 F+S3dqyPJvFSc3eL5WoiPF8cQpkCKaoGNeglxlAza5VAoWD24dTrHB5XyU23OEvf51BQ Gk2mX354AU7lY1c2nlcGIDVe2jJdsB1vHMUkuv49mc/hmSZd64HlT9YJfldK6aFG65iL dKmd0K0Nu1z3v8ovtguUwTxv29U+R6BrVpfbuanBzbR4JcTrTDjA6dJmxDB+tRSzVyCt Gtuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709059870; x=1709664670; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ZzsUzPaeQV0xVaYYOa5fkl+D3bB3KmqWtFdIBMocqZs=; b=OHC0Y69Uu4cEvUzACSP1GJnJZcD9ibwfhBX+JrsI3Xb+CYTyiFD9dH5mO4TeyvhSL+ SnoJG0x1GAaXrGRgYgmwy2Gb94w0An7Cw1V3RmvivjrKXmKWEY4DRDEU7FzDleaQy3nQ LFUGgmCasT+dkDJVHM8LT8Fk1ufShZOdR9QDnApQU2Hg45ak8cXxQIgLZqTY5o4RzBQr UfgxlUqA2qi/p8uD88JG1HsUqcPu5rz9OdsHtIwzgonztHXm3+q7IqUj8TfT6CGCwBla e6veUV8UhWijUi9TSy4uYHUk1X95k1ORUO8tBQnzivTfcMuW4JPPD9eCIvH2WVebTcOl sY8w== X-Forwarded-Encrypted: i=1; AJvYcCW6FHcJf4II/oYRsvGlzWJAhIXztA3aHQ8I+vuwmeKoCgJW3uGNL7fWvI58xoL8tgXddqpXe5zi3bLLJTEhqlT3dkV0qaSJ9X6FxWuYGvIbzpuwGwg= X-Gm-Message-State: AOJu0YwLOhYzBOeUsqZm6MxW4xdT06Ja47yGZXyxw1cVNLxAaYh58bn/ xiYOS7QfKZyW9ohGvHp3QB/jnLS41V4YQRRc4KqL8TEDYphVK0qC6n8owhcR3A== X-Google-Smtp-Source: AGHT+IFMrquxHELSuk64r8EzaLnPYxdhtlQPf9g7u2EtEZHnTxtPf52KDLuAlSX+ap+F1qbMBmUq7w== X-Received: by 2002:a17:903:449:b0:1da:2c01:fef5 with SMTP id iw9-20020a170903044900b001da2c01fef5mr10095757plb.56.1709059869792; Tue, 27 Feb 2024 10:51:09 -0800 (PST) Received: from thinkpad ([117.213.97.177]) by smtp.gmail.com with ESMTPSA id c3-20020a170902d90300b001db93340f9bsm1828147plz.205.2024.02.27.10.50.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Feb 2024 10:51:09 -0800 (PST) Date: Wed, 28 Feb 2024 00:20:50 +0530 From: Manivannan Sadhasivam To: Frank Li Cc: Jingoo Han , Gustavo Pimentel , Lorenzo Pieralisi , Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Marek Vasut , Yoshihiro Shimoda , Thierry Reding , Jonathan Hunter , Kishon Vijay Abraham I , Vidya Sagar , Vignesh Raghavendra , Richard Zhu , Lucas Stach , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , Minghuan Lian , Mingkai Hu , Roy Zang , Kunihiko Hayashi , Masami Hiramatsu , Kishon Vijay Abraham I , linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, Niklas Cassel Subject: Re: [PATCH v8 08/10] PCI: dwc: ep: Add a generic dw_pcie_ep_linkdown() API to handle LINK_DOWN event Message-ID: <20240227185050.GV2587@thinkpad> References: <20240224-pci-dbi-rework-v8-0-64c7fd0cfe64@linaro.org> <20240224-pci-dbi-rework-v8-8-64c7fd0cfe64@linaro.org> <20240227123024.GO2587@thinkpad> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240227_105110_983507_BB69F620 X-CRM114-Status: GOOD ( 42.14 ) 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 T24gVHVlLCBGZWIgMjcsIDIwMjQgYXQgMTI6MjY6MDVQTSAtMDUwMCwgRnJhbmsgTGkgd3JvdGU6 Cj4gT24gVHVlLCBGZWIgMjcsIDIwMjQgYXQgMDY6MDA6MjRQTSArMDUzMCwgTWFuaXZhbm5hbiBT YWRoYXNpdmFtIHdyb3RlOgo+ID4gT24gTW9uLCBGZWIgMjYsIDIwMjQgYXQgMTI6MTg6MThQTSAt MDUwMCwgRnJhbmsgTGkgd3JvdGU6Cj4gPiA+IE9uIFNhdCwgRmViIDI0LCAyMDI0IGF0IDEyOjI0 OjE0UE0gKzA1MzAsIE1hbml2YW5uYW4gU2FkaGFzaXZhbSB3cm90ZToKPiA+ID4gPiBUaGUgUENJ ZSBsaW5rIGNhbiBnbyB0byBMSU5LX0RPV04gc3RhdGUgaW4gb25lIG9mIHRoZSBmb2xsb3dpbmcg c2NlbmFyaW9zOgo+ID4gPiA+IAo+ID4gPiA+IDEuIEZ1bmRhbWVudGFsIChQRVJTVCMpL2hvdC93 YXJtIHJlc2V0Cj4gPiA+ID4gMi4gTGluayB0cmFuc2l0aW9uIGZyb20gTDIvTDMgdG8gTDAKPiA+ ID4gCj4gPiA+IEZyb20gTDAgdG8gTDIvbDMKPiA+ID4gCj4gPiAKPiA+IEkgZG9uJ3QgdW5kZXJz dGFuZCB3aGF0IHlvdSBtZWFuIGhlcmUuIExpbmsgZG93biB3b24ndCBoYXBwZW4gd2hpbGUgbW92 aW5nIGZyb20KPiA+IEwwIHRvIEwyL0wzLCBpdCBpcyB0aGUgb3Bwb3NpdGUuCj4gCj4gU3RyYW5n ZSwgd2h5IHRoZXJlIGFyZSBub3QgbGlua2Rvd24gZnJvbSBMMCB0byBMMi9sMy4gQnV0IGhhdmUg bGlua2Rvd24KPiBmcm9tIEwyL2wzIHRvIEwwPyB3aGVuIGxpbmt1cCBoYXBwZW4/IEFueSBkb2N1 bWVudCBzaG93IHRoZXNlPwo+IAoKUmVmZXIgUENJZSBTcGVjIDUuMCwgRmlndXJlIDUtMSBMaW5r IFBvd2VyIE1hbmFnZW1lbnQgU3RhdGUgRmxvdyBEaWFncmFtLgoKLSBNYW5pCgo+IEZyYW5rCj4g Cj4gPiAKPiA+ID4gPiAKPiA+ID4gPiBJbiB0aG9zZSBjYXNlcywgTElOS19ET1dOIGNhdXNlcyBz b21lIG5vbi1zdGlja3kgRFdDIHJlZ2lzdGVycyB0byBsb29zZSB0aGUKPiA+ID4gPiBzdGF0ZSAo bGlrZSBSRUJBUiwgUFRNX0NBUCBldGMuLi4pLiBTbyB0aGUgZHJpdmVycyBuZWVkIHRvIHJlaW5p dGlhbGl6ZQo+ID4gPiA+IHRoZW0gdG8gZnVuY3Rpb24gcHJvcGVybHkgb25jZSB0aGUgbGluayBj b21lcyBiYWNrIGFnYWluLgo+ID4gPiA+IAo+ID4gPiA+IFRoaXMgaXMgbm90IGEgcHJvYmxlbSBm b3IgZHJpdmVycyBzdXBwb3J0aW5nIFBFUlNUIyBJUlEsIHNpbmNlIHRoZXkgY2FuCj4gPiA+ID4g cmVpbml0aWFsaXplIHRoZSByZWdpc3RlcnMgaW4gdGhlIFBFUlNUIyBJUlEgY2FsbGJhY2suIEJ1 dCBmb3IgdGhlIGRyaXZlcnMKPiA+ID4gPiBub3Qgc3VwcG9ydGluZyBQRVJTVCMsIHRoZXJlIGlz IG5vIHdheSB0aGV5IGNhbiByZWluaXRpYWxpemUgdGhlIHJlZ2lzdGVycwo+ID4gPiA+IG90aGVy IHRoYW4gcmVseWluZyBvbiBMSU5LX0RPV04gSVJRIHJlY2VpdmVkIHdoZW4gdGhlIGxpbmsgZ29l cyBkb3duLiBTbwo+ID4gPiA+IGxldCdzIGFkZCBhIERXQyBnZW5lcmljIEFQSSBkd19wY2llX2Vw X2xpbmtkb3duKCkgdGhhdCByZWluaXRpYWxpemVzIHRoZQo+ID4gPiA+IG5vbi1zdGlja3kgcmVn aXN0ZXJzIGFuZCBhbHNvIG5vdGlmaWVzIHRoZSBFUEYgZHJpdmVycyBhYm91dCBsaW5rIGdvaW5n Cj4gPiA+ID4gZG93bi4KPiA+ID4gPiAKPiA+ID4gPiBUaGlzIEFQSSBjYW4gYWxzbyBiZSB1c2Vk IGJ5IHRoZSBkcml2ZXJzIHN1cHBvcnRpbmcgUEVSU1QjIHRvIGhhbmRsZSB0aGUKPiA+ID4gPiBz Y2VuYXJpbyAoMikgbWVudGlvbmVkIGFib3ZlLgo+ID4gPiA+IAo+ID4gPiA+IFNpZ25lZC1vZmYt Ynk6IE1hbml2YW5uYW4gU2FkaGFzaXZhbSA8bWFuaXZhbm5hbi5zYWRoYXNpdmFtQGxpbmFyby5v cmc+Cj4gPiA+ID4gLS0tCj4gPiA+ID4gIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL3BjaWUt ZGVzaWdud2FyZS1lcC5jIHwgMTExICsrKysrKysrKysrKysrLS0tLS0tLS0tLQo+ID4gPiA+ICBk cml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2llLWRlc2lnbndhcmUuaCAgICB8ICAgNSArKwo+ ID4gPiA+ICAyIGZpbGVzIGNoYW5nZWQsIDcyIGluc2VydGlvbnMoKyksIDQ0IGRlbGV0aW9ucygt KQo+ID4gPiA+IAo+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3 Yy9wY2llLWRlc2lnbndhcmUtZXAuYyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL3BjaWUt ZGVzaWdud2FyZS1lcC5jCj4gPiA+ID4gaW5kZXggMjc4YmRjOWIyMjY5Li5mZWQ0YzI5MzZjNzgg MTAwNjQ0Cj4gPiA+ID4gLS0tIGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9kd2MvcGNpZS1kZXNp Z253YXJlLWVwLmMKPiA+ID4gPiArKysgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2ll LWRlc2lnbndhcmUtZXAuYwo+ID4gPiA+IEBAIC0xNCwxNCArMTQsNiBAQAo+ID4gPiA+ICAjaW5j bHVkZSA8bGludXgvcGNpLWVwYy5oPgo+ID4gPiA+ICAjaW5jbHVkZSA8bGludXgvcGNpLWVwZi5o Pgo+ID4gPiA+ICAKPiA+ID4gPiAtdm9pZCBkd19wY2llX2VwX2xpbmt1cChzdHJ1Y3QgZHdfcGNp ZV9lcCAqZXApCj4gPiA+ID4gLXsKPiA+ID4gPiAtCXN0cnVjdCBwY2lfZXBjICplcGMgPSBlcC0+ ZXBjOwo+ID4gPiA+IC0KPiA+ID4gPiAtCXBjaV9lcGNfbGlua3VwKGVwYyk7Cj4gPiA+ID4gLX0K PiA+ID4gPiAtRVhQT1JUX1NZTUJPTF9HUEwoZHdfcGNpZV9lcF9saW5rdXApOwo+ID4gPiA+IC0K PiA+ID4gCj4gPiA+IE5vIHN1cmUgd2h5IGdpdCByZW1vdmUgdGhpcyBibG9jayBhbmQgYWRkIHRo ZXNlIGJhY2suCj4gPiA+IAo+ID4gCj4gPiBCZWNhdXNlLCB3ZSBhcmUgYWRkaW5nIGR3X3BjaWVf ZXBfbGlua2Rvd24oKSBBUEkgd2F5IGJlbG93IGFuZCBpdCBtYWtlcyBzZW5zZSB0bwo+ID4gbW92 ZSB0aGlzIEFQSSBhbHNvIHRvIGtlZXAgaXQgb3JkZXJlZC4gTWF5YmUgSSBzaG91bGQndmUgZGVz Y3JpYmVkIGl0IGluIGNvbW1pdAo+ID4gbWVzc2FnZS4KPiA+IAo+ID4gLSBNYW5pCj4gPiAKPiA+ ID4gCj4gPiA+ID4gIHZvaWQgZHdfcGNpZV9lcF9pbml0X25vdGlmeShzdHJ1Y3QgZHdfcGNpZV9l cCAqZXApCj4gPiA+ID4gIHsKPiA+ID4gPiAgCXN0cnVjdCBwY2lfZXBjICplcGMgPSBlcC0+ZXBj Owo+ID4gPiA+IEBAIC02MDMsMTkgKzU5NSw1NiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGR3X3Bj aWVfZXBfZmluZF9leHRfY2FwYWJpbGl0eShzdHJ1Y3QgZHdfcGNpZSAqcGNpLCBpbnQgY2FwKQo+ ID4gPiA+ICAJcmV0dXJuIDA7Cj4gPiA+ID4gIH0KPiA+ID4gPiAgCj4gPiA+ID4gK3N0YXRpYyB2 b2lkIGR3X3BjaWVfZXBfaW5pdF9ub25fc3RpY2t5X3JlZ2lzdGVycyhzdHJ1Y3QgZHdfcGNpZSAq cGNpKQo+ID4gPiA+ICt7Cj4gPiA+ID4gKwl1bnNpZ25lZCBpbnQgb2Zmc2V0LCBwdG1fY2FwX2Jh c2U7Cj4gPiA+ID4gKwl1bnNpZ25lZCBpbnQgbmJhcnM7Cj4gPiA+ID4gKwl1MzIgcmVnLCBpOwo+ ID4gPiA+ICsKPiA+ID4gPiArCW9mZnNldCA9IGR3X3BjaWVfZXBfZmluZF9leHRfY2FwYWJpbGl0 eShwY2ksIFBDSV9FWFRfQ0FQX0lEX1JFQkFSKTsKPiA+ID4gPiArCXB0bV9jYXBfYmFzZSA9IGR3 X3BjaWVfZXBfZmluZF9leHRfY2FwYWJpbGl0eShwY2ksIFBDSV9FWFRfQ0FQX0lEX1BUTSk7Cj4g PiA+ID4gKwo+ID4gPiA+ICsJZHdfcGNpZV9kYmlfcm9fd3JfZW4ocGNpKTsKPiA+ID4gPiArCj4g PiA+ID4gKwlpZiAob2Zmc2V0KSB7Cj4gPiA+ID4gKwkJcmVnID0gZHdfcGNpZV9yZWFkbF9kYmko cGNpLCBvZmZzZXQgKyBQQ0lfUkVCQVJfQ1RSTCk7Cj4gPiA+ID4gKwkJbmJhcnMgPSAocmVnICYg UENJX1JFQkFSX0NUUkxfTkJBUl9NQVNLKSA+Pgo+ID4gPiA+ICsJCQlQQ0lfUkVCQVJfQ1RSTF9O QkFSX1NISUZUOwo+ID4gPiA+ICsKPiA+ID4gPiArCQlmb3IgKGkgPSAwOyBpIDwgbmJhcnM7IGkr Kywgb2Zmc2V0ICs9IFBDSV9SRUJBUl9DVFJMKQo+ID4gPiA+ICsJCQlkd19wY2llX3dyaXRlbF9k YmkocGNpLCBvZmZzZXQgKyBQQ0lfUkVCQVJfQ0FQLCAweDApOwo+ID4gPiA+ICsJfQo+ID4gPiA+ ICsKPiA+ID4gPiArCS8qCj4gPiA+ID4gKwkgKiBQVE0gcmVzcG9uZGVyIGNhcGFiaWxpdHkgY2Fu IGJlIGRpc2FibGVkIG9ubHkgYWZ0ZXIgZGlzYWJsaW5nCj4gPiA+ID4gKwkgKiBQVE0gcm9vdCBj YXBhYmlsaXR5Lgo+ID4gPiA+ICsJICovCj4gPiA+ID4gKwlpZiAocHRtX2NhcF9iYXNlKSB7Cj4g PiA+ID4gKwkJZHdfcGNpZV9kYmlfcm9fd3JfZW4ocGNpKTsKPiA+ID4gPiArCQlyZWcgPSBkd19w Y2llX3JlYWRsX2RiaShwY2ksIHB0bV9jYXBfYmFzZSArIFBDSV9QVE1fQ0FQKTsKPiA+ID4gPiAr CQlyZWcgJj0gflBDSV9QVE1fQ0FQX1JPT1Q7Cj4gPiA+ID4gKwkJZHdfcGNpZV93cml0ZWxfZGJp KHBjaSwgcHRtX2NhcF9iYXNlICsgUENJX1BUTV9DQVAsIHJlZyk7Cj4gPiA+ID4gKwo+ID4gPiA+ ICsJCXJlZyA9IGR3X3BjaWVfcmVhZGxfZGJpKHBjaSwgcHRtX2NhcF9iYXNlICsgUENJX1BUTV9D QVApOwo+ID4gPiA+ICsJCXJlZyAmPSB+KFBDSV9QVE1fQ0FQX1JFUyB8IFBDSV9QVE1fR1JBTlVM QVJJVFlfTUFTSyk7Cj4gPiA+ID4gKwkJZHdfcGNpZV93cml0ZWxfZGJpKHBjaSwgcHRtX2NhcF9i YXNlICsgUENJX1BUTV9DQVAsIHJlZyk7Cj4gPiA+ID4gKwkJZHdfcGNpZV9kYmlfcm9fd3JfZGlz KHBjaSk7Cj4gPiA+ID4gKwl9Cj4gPiA+ID4gKwo+ID4gPiA+ICsJZHdfcGNpZV9zZXR1cChwY2kp Owo+ID4gPiA+ICsJZHdfcGNpZV9kYmlfcm9fd3JfZGlzKHBjaSk7Cj4gPiA+ID4gK30KPiA+ID4g PiArCj4gPiA+ID4gIGludCBkd19wY2llX2VwX2luaXRfcmVnaXN0ZXJzKHN0cnVjdCBkd19wY2ll X2VwICplcCkKPiA+ID4gPiAgewo+ID4gPiA+ICAJc3RydWN0IGR3X3BjaWUgKnBjaSA9IHRvX2R3 X3BjaWVfZnJvbV9lcChlcCk7Cj4gPiA+ID4gIAlzdHJ1Y3QgZHdfcGNpZV9lcF9mdW5jICplcF9m dW5jOwo+ID4gPiA+ICAJc3RydWN0IGRldmljZSAqZGV2ID0gcGNpLT5kZXY7Cj4gPiA+ID4gIAlz dHJ1Y3QgcGNpX2VwYyAqZXBjID0gZXAtPmVwYzsKPiA+ID4gPiAtCXVuc2lnbmVkIGludCBvZmZz ZXQsIHB0bV9jYXBfYmFzZTsKPiA+ID4gPiAtCXVuc2lnbmVkIGludCBuYmFyczsKPiA+ID4gPiAg CXU4IGhkcl90eXBlOwo+ID4gPiA+ICAJdTggZnVuY19ubzsKPiA+ID4gPiAtCWludCBpLCByZXQ7 Cj4gPiA+ID4gIAl2b2lkICphZGRyOwo+ID4gPiA+IC0JdTMyIHJlZzsKPiA+ID4gPiArCWludCBy ZXQ7Cj4gPiA+ID4gIAo+ID4gPiA+ICAJaGRyX3R5cGUgPSBkd19wY2llX3JlYWRiX2RiaShwY2ks IFBDSV9IRUFERVJfVFlQRSkgJgo+ID4gPiA+ICAJCSAgIFBDSV9IRUFERVJfVFlQRV9NQVNLOwo+ ID4gPiA+IEBAIC02NzgsMzggKzcwNyw3IEBAIGludCBkd19wY2llX2VwX2luaXRfcmVnaXN0ZXJz KHN0cnVjdCBkd19wY2llX2VwICplcCkKPiA+ID4gPiAgCWlmIChlcC0+b3BzLT5pbml0KQo+ID4g PiA+ICAJCWVwLT5vcHMtPmluaXQoZXApOwo+ID4gPiA+ICAKPiA+ID4gPiAtCW9mZnNldCA9IGR3 X3BjaWVfZXBfZmluZF9leHRfY2FwYWJpbGl0eShwY2ksIFBDSV9FWFRfQ0FQX0lEX1JFQkFSKTsK PiA+ID4gPiAtCXB0bV9jYXBfYmFzZSA9IGR3X3BjaWVfZXBfZmluZF9leHRfY2FwYWJpbGl0eShw Y2ksIFBDSV9FWFRfQ0FQX0lEX1BUTSk7Cj4gPiA+ID4gLQo+ID4gPiA+IC0JZHdfcGNpZV9kYmlf cm9fd3JfZW4ocGNpKTsKPiA+ID4gPiAtCj4gPiA+ID4gLQlpZiAob2Zmc2V0KSB7Cj4gPiA+ID4g LQkJcmVnID0gZHdfcGNpZV9yZWFkbF9kYmkocGNpLCBvZmZzZXQgKyBQQ0lfUkVCQVJfQ1RSTCk7 Cj4gPiA+ID4gLQkJbmJhcnMgPSAocmVnICYgUENJX1JFQkFSX0NUUkxfTkJBUl9NQVNLKSA+Pgo+ ID4gPiA+IC0JCQlQQ0lfUkVCQVJfQ1RSTF9OQkFSX1NISUZUOwo+ID4gPiA+IC0KPiA+ID4gPiAt CQlmb3IgKGkgPSAwOyBpIDwgbmJhcnM7IGkrKywgb2Zmc2V0ICs9IFBDSV9SRUJBUl9DVFJMKQo+ ID4gPiA+IC0JCQlkd19wY2llX3dyaXRlbF9kYmkocGNpLCBvZmZzZXQgKyBQQ0lfUkVCQVJfQ0FQ LCAweDApOwo+ID4gPiA+IC0JfQo+ID4gPiA+IC0KPiA+ID4gPiAtCS8qCj4gPiA+ID4gLQkgKiBQ VE0gcmVzcG9uZGVyIGNhcGFiaWxpdHkgY2FuIGJlIGRpc2FibGVkIG9ubHkgYWZ0ZXIgZGlzYWJs aW5nCj4gPiA+ID4gLQkgKiBQVE0gcm9vdCBjYXBhYmlsaXR5Lgo+ID4gPiA+IC0JICovCj4gPiA+ ID4gLQlpZiAocHRtX2NhcF9iYXNlKSB7Cj4gPiA+ID4gLQkJZHdfcGNpZV9kYmlfcm9fd3JfZW4o cGNpKTsKPiA+ID4gPiAtCQlyZWcgPSBkd19wY2llX3JlYWRsX2RiaShwY2ksIHB0bV9jYXBfYmFz ZSArIFBDSV9QVE1fQ0FQKTsKPiA+ID4gPiAtCQlyZWcgJj0gflBDSV9QVE1fQ0FQX1JPT1Q7Cj4g PiA+ID4gLQkJZHdfcGNpZV93cml0ZWxfZGJpKHBjaSwgcHRtX2NhcF9iYXNlICsgUENJX1BUTV9D QVAsIHJlZyk7Cj4gPiA+ID4gLQo+ID4gPiA+IC0JCXJlZyA9IGR3X3BjaWVfcmVhZGxfZGJpKHBj aSwgcHRtX2NhcF9iYXNlICsgUENJX1BUTV9DQVApOwo+ID4gPiA+IC0JCXJlZyAmPSB+KFBDSV9Q VE1fQ0FQX1JFUyB8IFBDSV9QVE1fR1JBTlVMQVJJVFlfTUFTSyk7Cj4gPiA+ID4gLQkJZHdfcGNp ZV93cml0ZWxfZGJpKHBjaSwgcHRtX2NhcF9iYXNlICsgUENJX1BUTV9DQVAsIHJlZyk7Cj4gPiA+ ID4gLQkJZHdfcGNpZV9kYmlfcm9fd3JfZGlzKHBjaSk7Cj4gPiA+ID4gLQl9Cj4gPiA+ID4gLQo+ ID4gPiA+IC0JZHdfcGNpZV9zZXR1cChwY2kpOwo+ID4gPiA+IC0JZHdfcGNpZV9kYmlfcm9fd3Jf ZGlzKHBjaSk7Cj4gPiA+ID4gKwlkd19wY2llX2VwX2luaXRfbm9uX3N0aWNreV9yZWdpc3RlcnMo cGNpKTsKPiA+ID4gPiAgCj4gPiA+ID4gIAlyZXR1cm4gMDsKPiA+ID4gPiAgCj4gPiA+ID4gQEAg LTcyMCw2ICs3MTgsMzEgQEAgaW50IGR3X3BjaWVfZXBfaW5pdF9yZWdpc3RlcnMoc3RydWN0IGR3 X3BjaWVfZXAgKmVwKQo+ID4gPiA+ICB9Cj4gPiA+ID4gIEVYUE9SVF9TWU1CT0xfR1BMKGR3X3Bj aWVfZXBfaW5pdF9yZWdpc3RlcnMpOwo+ID4gPiA+ICAKPiA+ID4gPiArdm9pZCBkd19wY2llX2Vw X2xpbmt1cChzdHJ1Y3QgZHdfcGNpZV9lcCAqZXApCj4gPiA+ID4gK3sKPiA+ID4gPiArCXN0cnVj dCBwY2lfZXBjICplcGMgPSBlcC0+ZXBjOwo+ID4gPiA+ICsKPiA+ID4gPiArCXBjaV9lcGNfbGlu a3VwKGVwYyk7Cj4gPiA+ID4gK30KPiA+ID4gPiArRVhQT1JUX1NZTUJPTF9HUEwoZHdfcGNpZV9l cF9saW5rdXApOwo+ID4gPiA+ICsKPiA+ID4gPiArdm9pZCBkd19wY2llX2VwX2xpbmtkb3duKHN0 cnVjdCBkd19wY2llX2VwICplcCkKPiA+ID4gPiArewo+ID4gPiA+ICsJc3RydWN0IGR3X3BjaWUg KnBjaSA9IHRvX2R3X3BjaWVfZnJvbV9lcChlcCk7Cj4gPiA+ID4gKwlzdHJ1Y3QgcGNpX2VwYyAq ZXBjID0gZXAtPmVwYzsKPiA+ID4gPiArCj4gPiA+ID4gKwkvKgo+ID4gPiA+ICsJICogSW5pdGlh bGl6ZSB0aGUgbm9uLXN0aWNreSBEV0MgcmVnaXN0ZXJzIGFzIHRoZXkgd291bGQndmUgcmVzZXQg cG9zdAo+ID4gPiA+ICsJICogTElOS19ET1dOLiBUaGlzIGlzIHNwZWNpZmljYWxseSBuZWVkZWQg Zm9yIGRyaXZlcnMgbm90IHN1cHBvcnRpbmcKPiA+ID4gPiArCSAqIFBFUlNUIyBhcyB0aGV5IGhh dmUgbm8gd2F5IHRvIHJlaW5pdGlhbGl6ZSB0aGUgcmVnaXN0ZXJzIGJlZm9yZSB0aGUKPiA+ID4g PiArCSAqIGxpbmsgY29tZXMgYmFjayBhZ2Fpbi4KPiA+ID4gPiArCSAqLwo+ID4gPiA+ICsJZHdf cGNpZV9lcF9pbml0X25vbl9zdGlja3lfcmVnaXN0ZXJzKHBjaSk7Cj4gPiA+ID4gKwo+ID4gPiA+ ICsJcGNpX2VwY19saW5rZG93bihlcGMpOwo+ID4gPiA+ICt9Cj4gPiA+ID4gK0VYUE9SVF9TWU1C T0xfR1BMKGR3X3BjaWVfZXBfbGlua2Rvd24pOwo+ID4gPiA+ICsKPiA+ID4gPiAgaW50IGR3X3Bj aWVfZXBfaW5pdChzdHJ1Y3QgZHdfcGNpZV9lcCAqZXApCj4gPiA+ID4gIHsKPiA+ID4gPiAgCWlu dCByZXQ7Cj4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL3Bj aWUtZGVzaWdud2FyZS5oIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9kd2MvcGNpZS1kZXNpZ253 YXJlLmgKPiA+ID4gPiBpbmRleCBmOGU1NDMxYTIwN2IuLjE1Mjk2OTU0NWIwYSAxMDA2NDQKPiA+ ID4gPiAtLS0gYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2llLWRlc2lnbndhcmUuaAo+ ID4gPiA+ICsrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL3BjaWUtZGVzaWdud2FyZS5o Cj4gPiA+ID4gQEAgLTY2OCw2ICs2NjgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAq ZHdfcGNpZV9vd25fY29uZl9tYXBfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMsCj4gPiA+ID4gIAo+ ID4gPiA+ICAjaWZkZWYgQ09ORklHX1BDSUVfRFdfRVAKPiA+ID4gPiAgdm9pZCBkd19wY2llX2Vw X2xpbmt1cChzdHJ1Y3QgZHdfcGNpZV9lcCAqZXApOwo+ID4gPiA+ICt2b2lkIGR3X3BjaWVfZXBf bGlua2Rvd24oc3RydWN0IGR3X3BjaWVfZXAgKmVwKTsKPiA+ID4gPiAgaW50IGR3X3BjaWVfZXBf aW5pdChzdHJ1Y3QgZHdfcGNpZV9lcCAqZXApOwo+ID4gPiA+ICBpbnQgZHdfcGNpZV9lcF9pbml0 X3JlZ2lzdGVycyhzdHJ1Y3QgZHdfcGNpZV9lcCAqZXApOwo+ID4gPiA+ICB2b2lkIGR3X3BjaWVf ZXBfaW5pdF9ub3RpZnkoc3RydWN0IGR3X3BjaWVfZXAgKmVwKTsKPiA+ID4gPiBAQCAtNjg4LDYg KzY4OSwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZHdfcGNpZV9lcF9saW5rdXAoc3RydWN0IGR3 X3BjaWVfZXAgKmVwKQo+ID4gPiA+ICB7Cj4gPiA+ID4gIH0KPiA+ID4gPiAgCj4gPiA+ID4gK3N0 YXRpYyBpbmxpbmUgdm9pZCBkd19wY2llX2VwX2xpbmtkb3duKHN0cnVjdCBkd19wY2llX2VwICpl cCkKPiA+ID4gPiArewo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICBzdGF0aWMgaW5saW5l IGludCBkd19wY2llX2VwX2luaXQoc3RydWN0IGR3X3BjaWVfZXAgKmVwKQo+ID4gPiA+ICB7Cj4g PiA+ID4gIAlyZXR1cm4gMDsKPiA+ID4gPiAKPiA+ID4gPiAtLSAKPiA+ID4gPiAyLjI1LjEKPiA+ ID4gPiAKPiA+IAo+ID4gLS0gCj4gPiDgrq7grqPgrr/grrXgrqPgr43grqPgrqngr40g4K6a4K6k 4K6+4K6a4K6/4K614K6u4K+NCgotLSAK4K6u4K6j4K6/4K614K6j4K+N4K6j4K6p4K+NIOCumuCu pOCuvuCumuCuv+CuteCuruCvjQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5l bEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4v bGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=