Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp3663555pxf; Mon, 22 Mar 2021 11:49:13 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwSBYUP0+rP1KMatKxP5drVVdDyRFKAy360mYm9+wlnxDH1xzTtBtXfIot4faA4E584nYHX X-Received: by 2002:a05:6402:17d6:: with SMTP id s22mr1051374edy.232.1616438953306; Mon, 22 Mar 2021 11:49:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1616438953; cv=none; d=google.com; s=arc-20160816; b=r2CzuYbRjXqdZQluC42sLX6M4ZYic8e76kYV0Jo02PFTAItvY/1DJcCc2pibo6eUKZ sh8c+KIjmT9OlEpykTaKJ25tCMWUXfB+ks9yaYJfWUd9lGLEKV+EXyR/k1vLgwr0R36u 5lLg6jZc/JcGdwvJ6dp+q9dhuVZnxcqflbW2ihqTVdFrQMTy6PiijKoCj4PIdb+u3BLd 84crVMQnP45pCmzvjcJ5UVjU5Nxmr9lad38a5219MiSEjNw+V/Uhow7MY+dKWPEy34ne D7idgz7MDRiiTfZa+K4oN44skZ/sEfYBYiAufXyQgor1TysiiUyXJbuzqyIR9j3qQv4a E6dQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=XgYaX6jUUWFmjXM0O+OKvgIw0K5edHpalyv0MAqZENE=; b=Y+xPhw4s0CtkSQ4Absu/ge5KlvUc1yzZolLJe5LI4zCTbuO0Xd4EgIPU5gn3DW8puQ ftE/d+wwy4DrLG5Zki0+fapumhhg2Z+mRYqZbUQhweOkC4YtWyp1vU45sag4ax3Z0hP2 qWPSEoZhN4wUYq8pA6K3ItuR6UZzLLgI7ppc8ZWAsokBgFda/5N3Xec3B5k+Mx4BzUTU pKip6gK0imB0wckQFyxYlk7dnSDTjGyq8lHNEAalAzilS3D15Vb+Qkm0EMZrmpdjfgdF JLpAFeqCEjYu4MNvlzLgLU+K5MUWrkrR3dbMjjofBXNcO++GokLHvMbgL9KELMuu9izn l8GQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id c12si6889707eja.616.2021.03.22.11.48.51; Mon, 22 Mar 2021 11:49:13 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232231AbhCVSqw (ORCPT + 99 others); Mon, 22 Mar 2021 14:46:52 -0400 Received: from mail.kernel.org ([198.145.29.99]:33360 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230381AbhCVSq3 (ORCPT ); Mon, 22 Mar 2021 14:46:29 -0400 Received: from disco-boy.misterjones.org (disco-boy.misterjones.org [51.254.78.96]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 0FCAE61984; Mon, 22 Mar 2021 18:46:29 +0000 (UTC) Received: from 78.163-31-62.static.virginmediabusiness.co.uk ([62.31.163.78] helo=why.lan) by disco-boy.misterjones.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94) (envelope-from ) id 1lOPZL-0038p5-ED; Mon, 22 Mar 2021 18:46:27 +0000 From: Marc Zyngier To: Lorenzo Pieralisi , Bjorn Helgaas Cc: Frank Wunderlich , Thierry Reding , Thomas Gleixner , Rob Herring , Will Deacon , "K. Y. Srinivasan" , Haiyang Zhang , Stephen Hemminger , Michael Kelley , Wei Liu , Thierry Reding , Jonathan Hunter , Ryder Lee , Marek Vasut , Yoshihiro Shimoda , Michal Simek , Paul Walmsley , linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-hyperv@vger.kernel.org, linux-tegra@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-renesas-soc@vger.kernel.org, kernel-team@android.com Subject: [PATCH v2 04/15] PCI: xilinx: Don't allocate extra memory for the MSI capture address Date: Mon, 22 Mar 2021 18:46:03 +0000 Message-Id: <20210322184614.802565-5-maz@kernel.org> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210322184614.802565-1-maz@kernel.org> References: <20210322184614.802565-1-maz@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 62.31.163.78 X-SA-Exim-Rcpt-To: lorenzo.pieralisi@arm.com, bhelgaas@google.com, frank-w@public-files.de, treding@nvidia.com, tglx@linutronix.de, robh@kernel.org, will@kernel.org, kys@microsoft.com, haiyangz@microsoft.com, sthemmin@microsoft.com, mikelley@microsoft.com, wei.liu@kernel.org, thierry.reding@gmail.com, jonathanh@nvidia.com, ryder.lee@mediatek.com, marek.vasut+renesas@gmail.com, yoshihiro.shimoda.uh@renesas.com, michal.simek@xilinx.com, paul.walmsley@sifive.com, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-hyperv@vger.kernel.org, linux-tegra@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-renesas-soc@vger.kernel.org, kernel-team@android.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org A long cargo-culted behaviour of PCI drivers is to allocate memory to obtain an address that is fed to the controller as the MSI capture address (i.e. the MSI doorbell). But there is no actual requirement for this address to be RAM. All it needs to be is a suitable aligned address that will *not* be DMA'd to. Use the physical address of the 'port' data structure as the MSI capture address. Signed-off-by: Marc Zyngier --- drivers/pci/controller/pcie-xilinx.c | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/drivers/pci/controller/pcie-xilinx.c b/drivers/pci/controller/pcie-xilinx.c index fa5baeb82653..3a762ffb0cef 100644 --- a/drivers/pci/controller/pcie-xilinx.c +++ b/drivers/pci/controller/pcie-xilinx.c @@ -94,7 +94,6 @@ * struct xilinx_pcie_port - PCIe port information * @reg_base: IO Mapped Register Base * @irq: Interrupt number - * @msi_pages: MSI pages * @dev: Device pointer * @msi_domain: MSI IRQ domain pointer * @leg_domain: Legacy IRQ domain pointer @@ -103,7 +102,6 @@ struct xilinx_pcie_port { void __iomem *reg_base; u32 irq; - unsigned long msi_pages; struct device *dev; struct irq_domain *msi_domain; struct irq_domain *leg_domain; @@ -274,10 +272,10 @@ static int xilinx_pcie_msi_setup_irq(struct msi_controller *chip, irq_set_msi_desc(irq, desc); - msg_addr = virt_to_phys((void *)port->msi_pages); + msg_addr = virt_to_phys(port); - msg.address_hi = 0; - msg.address_lo = msg_addr; + msg.address_hi = upper_32_bits(msg_addr); + msg.address_lo = lower_32_bits(msg_addr); msg.data = irq; pci_write_msi_msg(irq, &msg); @@ -330,13 +328,9 @@ static int xilinx_pcie_enable_msi(struct xilinx_pcie_port *port) { phys_addr_t msg_addr; - port->msi_pages = __get_free_pages(GFP_KERNEL, 0); - if (!port->msi_pages) - return -ENOMEM; - - msg_addr = virt_to_phys((void *)port->msi_pages); - pcie_write(port, 0x0, XILINX_PCIE_REG_MSIBASE1); - pcie_write(port, msg_addr, XILINX_PCIE_REG_MSIBASE2); + msg_addr = virt_to_phys(port); + pcie_write(port, upper_32_bit(msg_addr), XILINX_PCIE_REG_MSIBASE1); + pcie_write(port, lower_32_bits(msg_addr), XILINX_PCIE_REG_MSIBASE2); return 0; } -- 2.29.2