From patchwork Sat Oct 17 17:50:04 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 531840 X-Patchwork-Delegate: sjg@chromium.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id EB781140180 for ; Sun, 18 Oct 2015 04:51:29 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b=HRIOZCXB; dkim-atps=neutral Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 3FCDE4B6D1; Sat, 17 Oct 2015 19:51:12 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 9sr9qNqusiiO; Sat, 17 Oct 2015 19:51:12 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id DE14A4B6D5; Sat, 17 Oct 2015 19:50:52 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 458DB4B62C for ; Sat, 17 Oct 2015 19:50:32 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 5CODrajDC4ZQ for ; Sat, 17 Oct 2015 19:50:32 +0200 (CEST) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from mail-ig0-f181.google.com (mail-ig0-f181.google.com [209.85.213.181]) by theia.denx.de (Postfix) with ESMTPS id 6904F4B62B for ; Sat, 17 Oct 2015 19:50:28 +0200 (CEST) Received: by igbkq10 with SMTP id kq10so32480545igb.0 for ; Sat, 17 Oct 2015 10:50:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=7nbsfirGdHxwVlPFLEbLAhTrBH8fBOtcNyEx/mzzyxM=; b=HRIOZCXBJgvnO+0zG6k/eoS3hoSlPnqB9s+cA1l/vJbMQcdAIDcR6J8fXqZjoEhHSg 8PxxubNI691rAzhJJpcoGEdWK8d2vjVrplsOOdWNvcsc/f3ZEp1HidbCbbOF3GE073kF 8UQrRKuEXVmJb++OyfiZ7C7HF68Zr2zTeYcK9pMOO0HsATVoHadmdCYxpffFLfGpwEsr P579ju4ofUt/q2INJtZTBtRhbagJU+zrtgUk2Tc+fvNhEONM1erjUjUibrEFpn+EkP44 l3YbbKaM2NAmQkKWqM2EoYnk4jp+MlgmXzm44gT+OOtAxE2omTqCRGVbkKjvpqHb8iLS Mfyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=7nbsfirGdHxwVlPFLEbLAhTrBH8fBOtcNyEx/mzzyxM=; b=IkKyVblBrNjx6Y56WX02v3oaOeOrQhEGgHaKjIbQ0mVcEOf8Z/Ujy/eUcGMeBw61Ro H0l+mUnfhGHlgerRSvNxjJMLdgA2CILrKuGkZIQAyURxYb65e5qhRqcO/CFYE7lWpK1G L82RqgU9nHhczB/eXfNx6PMDpYp/ico+MvFCiweNPyXX/6jTacEMuPrftXwSFumJyxGy OaTtkoDJEhTjWAiyNzISKq7TaSQExa1CPYYgsTB8aJ4rlVZQnDMpEIE/jidzvoL2o0Us dDxu9fGS/OwhCGKyeCZ1Tzuq8qiMeLPIZXZaNsIcYrvPhOz0p+fU1teCITiO5JFgAZUL PaNw== X-Gm-Message-State: ALoCoQmR6K8moue7wqGuGLI6lyQ6pM25o3cT0HOsk5qHjUkF3GvKp+zvUHx81dirjAk+gERD9OsM X-Received: by 10.50.137.34 with SMTP id qf2mr12546408igb.20.1445104227000; Sat, 17 Oct 2015 10:50:27 -0700 (PDT) Received: from kaki.bld.corp.google.com ([172.29.216.32]) by smtp.gmail.com with ESMTPSA id w71sm4316506ioi.29.2015.10.17.10.50.24 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 17 Oct 2015 10:50:26 -0700 (PDT) Received: by kaki.bld.corp.google.com (Postfix, from userid 121222) id 4E6AD22184A; Sat, 17 Oct 2015 11:50:23 -0600 (MDT) From: Simon Glass To: U-Boot Mailing List Date: Sat, 17 Oct 2015 11:50:04 -0600 Message-Id: <1445104205-4079-8-git-send-email-sjg@chromium.org> X-Mailer: git-send-email 2.6.0.rc2.230.g3dd15c0 In-Reply-To: <1445104205-4079-1-git-send-email-sjg@chromium.org> References: <1445104205-4079-1-git-send-email-sjg@chromium.org> Cc: Tom Rini , Thierry Reding , Stephen Warren , Joe Hershberger , Masahiro Yamada , Tom Warren , York Sun Subject: [U-Boot] [PATCH 7/8] dm: pci: Add a function to find the regions for a PCI bus X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" This function looks up the controller and returns a pointer to each region type. Signed-off-by: Simon Glass Acked-by: Stephen Warren --- drivers/pci/pci-uclass.c | 30 ++++++++++++++++++++++++++++++ include/pci.h | 12 ++++++++++++ 2 files changed, 42 insertions(+) diff --git a/drivers/pci/pci-uclass.c b/drivers/pci/pci-uclass.c index 527d3bb..43db390 100644 --- a/drivers/pci/pci-uclass.c +++ b/drivers/pci/pci-uclass.c @@ -963,6 +963,36 @@ ulong pci_conv_size_to_32(ulong old, ulong value, uint offset, return value; } +int pci_get_regions(struct udevice *dev, struct pci_region **iop, + struct pci_region **memp, struct pci_region **prefp) +{ + struct udevice *bus = pci_get_controller(dev); + struct pci_controller *hose = dev_get_uclass_priv(bus); + int i; + + *iop = NULL; + *memp = NULL; + *prefp = NULL; + for (i = 0; i < hose->region_count; i++) { + switch (hose->regions[i].flags) { + case PCI_REGION_IO: + if (!*iop || (*iop)->size < hose->regions[i].size) + *iop = hose->regions + i; + break; + case PCI_REGION_MEM: + if (!*memp || (*memp)->size < hose->regions[i].size) + *memp = hose->regions + i; + break; + case (PCI_REGION_MEM | PCI_REGION_PREFETCH): + if (!*prefp || (*prefp)->size < hose->regions[i].size) + *prefp = hose->regions + i; + break; + } + } + + return (*iop != NULL) + (*memp != NULL) + (*prefp != NULL); +} + UCLASS_DRIVER(pci) = { .id = UCLASS_PCI, .name = "pci", diff --git a/include/pci.h b/include/pci.h index 8b471ab..454d90e 100644 --- a/include/pci.h +++ b/include/pci.h @@ -1131,6 +1131,18 @@ ulong pci_conv_size_to_32(ulong old, ulong value, uint offset, struct udevice *pci_get_controller(struct udevice *dev); /** + * pci_get_regions() - obtain pointers to all the region types + * + * @dev: Device to check + * @iop: Returns a pointer to the I/O region, or NULL if none + * @memp: Returns a pointer to the memory region, or NULL if none + * @prefp: Returns a pointer to the pre-fetch region, or NULL if none + * @return the number of non-NULL regions returned, normally 3 + */ +int pci_get_regions(struct udevice *dev, struct pci_region **iop, + struct pci_region **memp, struct pci_region **prefp); + +/** * struct dm_pci_emul_ops - PCI device emulator operations */ struct dm_pci_emul_ops {