Received: by 2002:ac0:946b:0:0:0:0:0 with SMTP id j40csp1622598imj; Fri, 8 Feb 2019 04:44:03 -0800 (PST) X-Google-Smtp-Source: AHgI3IYg4W3S+1qVizoqTJnqbfKxz1xpRPME4XVIT/leMdzjHAChxD9qjyjmDFxTqQZyHYMZ4Jdq X-Received: by 2002:aa7:87d9:: with SMTP id i25mr612573pfo.14.1549629843179; Fri, 08 Feb 2019 04:44:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1549629843; cv=none; d=google.com; s=arc-20160816; b=eK0UaUKmMngGNnh11TydP/3JAGrec77jcYhnwKTDQzyyOQ4csNRdRPV6BVo4UiSgyd sBpqVENrliZWmuEW/l552l7wv6WJW2ipCA2jvj/l5V6ZLJXjfc8yDiBnRg1OlP+YtdKC WzlIaV6qgj5OBd0dGq8JKXpMkHIBnchcqi/2TZGpp/HlbPnjxe9k8zF36I1oZwD7nu7D 1n8Cg4s36cQdFjGika+SclWeXVZKxUxCCEerJvXtJ+uIlHISMhqm7l3L85DLhyIVowdF M7AJjC/uPcAZC0N/woAuNEBD+f6SrfSs8qmDsrPBoqe8hYyiPCYM/yexB5zNqrO3w4CN 1+mw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=le6Kczd428l77A5GbTImJiCcU9m+08tK25W6Q6TDEPg=; b=ev//yo1DGTWnXRY9vHl7aowg91F36maDCZl9VxhCWcF/0eKL7pdTOglHqbwQp+Oz9y kea7eoNV5CnokyIZaSMTK15pnNgPuJmy0OoCNMd69N00DuVgI/PuTZqM6pANdTlgy7ee rBEA0hYNWay0g0R9bV0/Tmp1PtDd2BpugdrbLo8ynK06esbLflcFp3pkizC1rIyfneCJ g4R0gBv+ndUPZWw155+qiIDf8PQUaCeIe9kHnIm8pGOrlnX4KMGdja8ZVzzlI8Yz9RO/ B5Tf1YdtxW+k0cD3gyl5HQZgx7KCxsMOs83pQXWo+gckGaPRT638RcrFTqpD7yMf6ezr dTPQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@mobiveil.co.in header.s=google header.b=hj5tQ54y; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b24si2049882pgi.308.2019.02.08.04.43.47; Fri, 08 Feb 2019 04:44:03 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@mobiveil.co.in header.s=google header.b=hj5tQ54y; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727406AbfBHMnf (ORCPT + 99 others); Fri, 8 Feb 2019 07:43:35 -0500 Received: from mail-wr1-f67.google.com ([209.85.221.67]:39126 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726585AbfBHMne (ORCPT ); Fri, 8 Feb 2019 07:43:34 -0500 Received: by mail-wr1-f67.google.com with SMTP id t27so3412632wra.6 for ; Fri, 08 Feb 2019 04:43:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mobiveil.co.in; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=le6Kczd428l77A5GbTImJiCcU9m+08tK25W6Q6TDEPg=; b=hj5tQ54yK4e4L6GbbCUqEn6EyL3hWZKceiCt+6G2uw9/RI4ooZHizqPyeJT5jaBl1S dsHGbsgAYm+MkgCaW/dLl9/cb19xCa9bVvVObDQtJN4FnjpVgN0Px2slRZv3sxclcUMe 4l0YFWDgPlGEXqcbaQFJJOFaGn4x2QYTrHjZg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=le6Kczd428l77A5GbTImJiCcU9m+08tK25W6Q6TDEPg=; b=Y03h8YZaMwmcHQY4Ubr4RrXcc5fxDrAreJMS96noKqXsX8KkcWKd0QbkcXbyF/h/B5 eGjK55Z8C7X1E649v+dJwc3T9HVOFyAlnJsaGei6iXUkkLzFOWT70bl2YAoVYwo4GBNn +uq7INlG2eRDi1xFUuuRWadZlQn/OqxTl9SXSPdB5GXJdxbhjS5kU1+O5km3xUAPNcET 5KIEeSqDWkqzW6dIV/yasX3ej1gJBcT/vo38qJxil4/FO3+ltICm1PQRXVtafc9VTcLE ISgtJOwJPT/54Zpk3lxmKfnlnnJgpFIYBwhcWcIRbpOHSHVGArb7kvCPoX+1Fa/OIcdG B1WQ== X-Gm-Message-State: AHQUAuZAS9kcBHvM0mvZT0C5xwkFjkIHDs0jhfandTdt3biAaFXh9Pqg TLANj7S6dYtC/G93K48MDkdQD39ZDxzFXafxu2Pe8w== X-Received: by 2002:adf:fd81:: with SMTP id d1mr16536788wrr.105.1549629812576; Fri, 08 Feb 2019 04:43:32 -0800 (PST) MIME-Version: 1.0 References: <20190129080926.36773-1-Zhiqiang.Hou@nxp.com> <20190129080926.36773-22-Zhiqiang.Hou@nxp.com> In-Reply-To: <20190129080926.36773-22-Zhiqiang.Hou@nxp.com> From: Subrahmanya Lingappa Date: Fri, 8 Feb 2019 18:16:11 +0530 Message-ID: Subject: Re: [PATCHv3 21/27] PCI: mobiveil: make mobiveil_host_init can be used to re-init host To: "Z.q. Hou" Cc: "linux-pci@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "devicetree@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "bhelgaas@google.com" , "robh+dt@kernel.org" , "mark.rutland@arm.com" , "shawnguo@kernel.org" , Leo Li , "lorenzo.pieralisi@arm.com" , "catalin.marinas@arm.com" , "will.deacon@arm.com" , Mingkai Hu , "M.h. Lian" , Xiaowei Bao Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Jan 29, 2019 at 1:40 PM Z.q. Hou wrote: > > From: Hou Zhiqiang > > Make the mobiveil_host_init function can be used to re-init > host controller's PAB and GPEX CSR register block, as NXP > integrated Mobiveil IP has to reset and then re-init the PAB > and GPEX CSR registers upon Hot-reset. > > Signed-off-by: Hou Zhiqiang > --- > V3: > - Removed the duplicated free opteration of pcie->resources. > > .../controller/mobiveil/pcie-mobiveil-host.c | 41 ++++++++++--------- > .../pci/controller/mobiveil/pcie-mobiveil.h | 3 +- > 2 files changed, 23 insertions(+), 21 deletions(-) > > diff --git a/drivers/pci/controller/mobiveil/pcie-mobiveil-host.c b/drivers/pci/controller/mobiveil/pcie-mobiveil-host.c > index d028cdf31d0e..e8d0c4989013 100644 > --- a/drivers/pci/controller/mobiveil/pcie-mobiveil-host.c > +++ b/drivers/pci/controller/mobiveil/pcie-mobiveil-host.c > @@ -217,7 +217,7 @@ static void mobiveil_pcie_enable_msi(struct mobiveil_pcie *pcie) > writel_relaxed(1, pcie->apb_csr_base + MSI_ENABLE_OFFSET); > } > > -static int mobiveil_host_init(struct mobiveil_pcie *pcie) > +int mobiveil_host_init(struct mobiveil_pcie *pcie, bool reinit) > { > u32 value, pab_ctrl, type; > struct resource_entry *win; > @@ -229,11 +229,16 @@ static int mobiveil_host_init(struct mobiveil_pcie *pcie) > for (i = 0; i < pcie->ppio_wins; i++) > mobiveil_pcie_disable_ib_win(pcie, i); > > - /* setup bus numbers */ > - value = csr_readl(pcie, PCI_PRIMARY_BUS); > - value &= 0xff000000; > - value |= 0x00ff0100; > - csr_writel(pcie, value, PCI_PRIMARY_BUS); > + pcie->ib_wins_configured = 0; > + pcie->ob_wins_configured = 0; > + > + if (!reinit) { > + /* setup bus numbers */ > + value = csr_readl(pcie, PCI_PRIMARY_BUS); > + value &= 0xff000000; > + value |= 0x00ff0100; > + csr_writel(pcie, value, PCI_PRIMARY_BUS); > + } > > /* > * program Bus Master Enable Bit in Command Register in PAB Config > @@ -279,7 +284,7 @@ static int mobiveil_host_init(struct mobiveil_pcie *pcie) > program_ib_windows(pcie, WIN_NUM_0, 0, 0, MEM_WINDOW_TYPE, IB_WIN_SIZE); > > /* Get the I/O and memory ranges from DT */ > - resource_list_for_each_entry(win, &pcie->resources) { > + resource_list_for_each_entry(win, pcie->resources) { > if (resource_type(win->res) == IORESOURCE_MEM) { > type = MEM_WINDOW_TYPE; > } else if (resource_type(win->res) == IORESOURCE_IO) { > @@ -550,8 +555,6 @@ int mobiveil_pcie_host_probe(struct mobiveil_pcie *pcie) > resource_size_t iobase; > int ret; > > - INIT_LIST_HEAD(&pcie->resources); > - > ret = mobiveil_pcie_parse_dt(pcie); > if (ret) { > dev_err(dev, "Parsing DT failed, ret: %x\n", ret); > @@ -565,34 +568,35 @@ int mobiveil_pcie_host_probe(struct mobiveil_pcie *pcie) > > /* parse the host bridge base addresses from the device tree file */ > ret = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff, > - &pcie->resources, &iobase); > + &bridge->windows, &iobase); > if (ret) { > dev_err(dev, "Getting bridge resources failed\n"); > return ret; > } > > + pcie->resources = &bridge->windows; > + > /* > * configure all inbound and outbound windows and prepare the RC for > * config access > */ > - ret = mobiveil_host_init(pcie); > + ret = mobiveil_host_init(pcie, false); > if (ret) { > dev_err(dev, "Failed to initialize host\n"); > - goto error; > + return ret; > } > > ret = mobiveil_pcie_interrupt_init(pcie); > if (ret) { > dev_err(dev, "Interrupt init failed\n"); > - goto error; > + return ret; > } > > - ret = devm_request_pci_bus_resources(dev, &pcie->resources); > + ret = devm_request_pci_bus_resources(dev, pcie->resources); > if (ret) > - goto error; > + return ret; > > /* Initialize bridge */ > - list_splice_init(&pcie->resources, &bridge->windows); > bridge->dev.parent = dev; > bridge->sysdata = pcie; > bridge->busnr = pcie->rp.root_bus_nr; > @@ -608,7 +612,7 @@ int mobiveil_pcie_host_probe(struct mobiveil_pcie *pcie) > /* setup the kernel resources for the newly added PCIe root bus */ > ret = pci_scan_root_bus_bridge(bridge); > if (ret) > - goto error; > + return ret; > > bus = bridge->bus; > > @@ -618,7 +622,4 @@ int mobiveil_pcie_host_probe(struct mobiveil_pcie *pcie) > pci_bus_add_devices(bus); > > return 0; > -error: > - pci_free_resource_list(&pcie->resources); > - return ret; > } > diff --git a/drivers/pci/controller/mobiveil/pcie-mobiveil.h b/drivers/pci/controller/mobiveil/pcie-mobiveil.h > index 933c2f34bc52..0f5303962e88 100644 > --- a/drivers/pci/controller/mobiveil/pcie-mobiveil.h > +++ b/drivers/pci/controller/mobiveil/pcie-mobiveil.h > @@ -152,7 +152,7 @@ struct mobiveil_pab_ops { > > struct mobiveil_pcie { > struct platform_device *pdev; > - struct list_head resources; > + struct list_head *resources; > void __iomem *csr_axi_slave_base; /* PAB registers base */ > phys_addr_t pcie_reg_base; /* Physical PCIe Controller Base */ > void __iomem *apb_csr_base; /* MSI register base */ > @@ -165,6 +165,7 @@ struct mobiveil_pcie { > }; > > int mobiveil_pcie_host_probe(struct mobiveil_pcie *pcie); > +int mobiveil_host_init(struct mobiveil_pcie *pcie, bool reinit); > bool mobiveil_pcie_link_up(struct mobiveil_pcie *pcie); > int mobiveil_bringup_link(struct mobiveil_pcie *pcie); > void program_ob_windows(struct mobiveil_pcie *pcie, int win_num, u64 cpu_addr, > -- > 2.17.1 > Reviewed-by: Subrahmanya Lingappa