From patchwork Fri Nov 22 22:23:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Olovyannikov X-Patchwork-Id: 1199680 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=quarantine dis=none) header.from=broadcom.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=broadcom.com header.i=@broadcom.com header.b="G14JBFho"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 47KWG72qzGz9sPL for ; Sat, 23 Nov 2019 09:25:19 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 17F5EC21CB1; Fri, 22 Nov 2019 22:24:20 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RCVD_IN_MSPIKE_H2, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 629DDC21DB3; Fri, 22 Nov 2019 22:24:10 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 0821DC21DF9; Fri, 22 Nov 2019 22:23:46 +0000 (UTC) Received: from mail-wr1-f68.google.com (mail-wr1-f68.google.com [209.85.221.68]) by lists.denx.de (Postfix) with ESMTPS id 52916C21C29 for ; Fri, 22 Nov 2019 22:23:44 +0000 (UTC) Received: by mail-wr1-f68.google.com with SMTP id w9so10501898wrr.0 for ; Fri, 22 Nov 2019 14:23:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=q10NQieRVEaurEfFpBgpYUo8HNI8n9JC5Nwu09nBLUA=; b=G14JBFho9ep7hoMZc1dYzUgnuI9KjFp9UVN7lFHFvvU+b3pWPo+AR/h3cEItEwFTOO hNMrqm8HjQ+EgFSbuhpneLCOjQSMXxCw/fi04U7IiEoMJwcPeoDdMMJNu4lR9MKJASHE dlXaOrp31Lt5vcwv71s/IY3DsqyOz/U20mITM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=q10NQieRVEaurEfFpBgpYUo8HNI8n9JC5Nwu09nBLUA=; b=a+p5sPNMqstSMpm3UFI5DBsXu/FsEO8EFaoRnfLakEJyJnshN6ZBl+phBlgquT5Ds2 VFfMZho1I8y9Y/0VCF/RX3+Hz6UJRx7DVozPxJu3dQdQKgV+hFD7oRjWJu8Fn9EiLwv6 XbG1yYY0GKEnEbqs0CA+Ic5Z05M+YJe5wurx6WhsE2P8IvfQexlqybSd+hJ0qQbcXUbr RWec1agW4eg5SGCngr86n0/uZbhs3gYoDsYBXYKFLRI8YFl4SA4Hy5MA816f62adgwmx slHsjYUGy6fMfMvL8bPkI5t9OSw0Yh/haeSSiRyR+hlxJu9EBIE+QSkawQIwGoKvf4Sc JFqQ== X-Gm-Message-State: APjAAAUlYMLRiaRqaDMnBd0yfdlRG6NxHD5nbLpYP/SJYyMQWDhfz14Q KByN8oBIxBV77Sd9LJoFN0sP1yniZTuEMafvr8d4XkFxAlq0rXqSdfTg1pLSbJToNCwietjYhPV tElgShMmHZlWVQ6OwGu8ejPdKbPWNlvXbhB6rmzxT6QZa83a4XVKEuzwJUJfLraMAfP8rH89RIm lQEEWztCZLfNI= X-Google-Smtp-Source: APXvYqzHfab5RFFJFkajlXKxtTV5fykd+ZfW1flSXqbbAH3/WSHjiU+hEW0lMecBa0BiHv4YOfyfsA== X-Received: by 2002:adf:da52:: with SMTP id r18mr19885477wrl.167.1574461423434; Fri, 22 Nov 2019 14:23:43 -0800 (PST) Received: from LBRMN-LNXUB114.ric.broadcom.com ([192.19.228.250]) by smtp.gmail.com with ESMTPSA id d20sm9623176wra.4.2019.11.22.14.23.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Nov 2019 14:23:42 -0800 (PST) From: Vladimir Olovyannikov To: u-boot@lists.denx.de Date: Fri, 22 Nov 2019 14:23:21 -0800 Message-Id: <20191122222323.28898-2-vladimir.olovyannikov@broadcom.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191122222323.28898-1-vladimir.olovyannikov@broadcom.com> References: <20191122222323.28898-1-vladimir.olovyannikov@broadcom.com> Cc: Srinath Mannam Subject: [U-Boot] [PATCH 1/3] drivers: pci: Fix Host bridge bus number issue X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" From: Srinath Mannam Add changes to fix bus number of host bridge is set with device sequence number issue. All devices are managed using device sequence number. For PCIe, devices enabled in DTS are added under PCIE_CLASS with consecutive device sequence numbers to scan all pcie devices in sequence using device sequence number. If a device is a bridge then it will enumerate all endpoints in that bridge, and give sequence numbers in that order. However, the parent device is a root bridge. The solution is all bus numbers are device sequence number minus root bridge sequence number. This way, every root bridge and its downstream EPs bus numbers start from 0. So root bridges are different hierarchy of bus numbers. Signed-off-by: Srinath Mannam Signed-off-by: Vladimir Olovyannikov --- drivers/pci/pci-uclass.c | 8 +++++--- drivers/pci/pci_auto.c | 6 +++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/drivers/pci/pci-uclass.c b/drivers/pci/pci-uclass.c index 896cb6b23a..eb7a01fd55 100644 --- a/drivers/pci/pci-uclass.c +++ b/drivers/pci/pci-uclass.c @@ -47,8 +47,9 @@ pci_dev_t dm_pci_get_bdf(struct udevice *dev) { struct pci_child_platdata *pplat = dev_get_parent_platdata(dev); struct udevice *bus = dev->parent; + struct udevice *ctrl = pci_get_controller(dev); - return PCI_ADD_BUS(bus->seq, pplat->devfn); + return PCI_ADD_BUS(bus->seq - ctrl->seq, pplat->devfn); } /** @@ -760,11 +761,12 @@ int pci_bind_bus_devices(struct udevice *bus) pci_dev_t bdf, end; bool found_multi; int ret; + struct udevice *ctrl = pci_get_controller(bus); found_multi = false; - end = PCI_BDF(bus->seq, PCI_MAX_PCI_DEVICES - 1, + end = PCI_BDF(bus->seq - ctrl->seq, PCI_MAX_PCI_DEVICES - 1, PCI_MAX_PCI_FUNCTIONS - 1); - for (bdf = PCI_BDF(bus->seq, 0, 0); bdf <= end; + for (bdf = PCI_BDF(bus->seq - ctrl->seq, 0, 0); bdf <= end; bdf += PCI_BDF(0, 0, 1)) { struct pci_child_platdata *pplat; struct udevice *dev; diff --git a/drivers/pci/pci_auto.c b/drivers/pci/pci_auto.c index 28667bde8d..42bf51fef2 100644 --- a/drivers/pci/pci_auto.c +++ b/drivers/pci/pci_auto.c @@ -176,8 +176,12 @@ void dm_pciauto_prescan_setup_bridge(struct udevice *dev, int sub_bus) struct pci_region *pci_io; u16 cmdstat, prefechable_64; struct udevice *ctlr = pci_get_controller(dev); + struct udevice *parent = dev->parent; struct pci_controller *ctlr_hose = dev_get_uclass_priv(ctlr); + if (!parent) + return; + pci_mem = ctlr_hose->pci_mem; pci_prefetch = ctlr_hose->pci_prefetch; pci_io = ctlr_hose->pci_io; @@ -188,7 +192,7 @@ void dm_pciauto_prescan_setup_bridge(struct udevice *dev, int sub_bus) /* Configure bus number registers */ dm_pci_write_config8(dev, PCI_PRIMARY_BUS, - PCI_BUS(dm_pci_get_bdf(dev)) - ctlr->seq); + parent->seq - ctlr->seq); dm_pci_write_config8(dev, PCI_SECONDARY_BUS, sub_bus - ctlr->seq); dm_pci_write_config8(dev, PCI_SUBORDINATE_BUS, 0xff); From patchwork Fri Nov 22 22:23:22 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Olovyannikov X-Patchwork-Id: 1199678 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=quarantine dis=none) header.from=broadcom.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=broadcom.com header.i=@broadcom.com header.b="Mri9GRWp"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 47KWDv26Z8z9sPL for ; Sat, 23 Nov 2019 09:24:15 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id E440FC21C38; Fri, 22 Nov 2019 22:23:59 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RCVD_IN_MSPIKE_H2, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id EE89BC21E1E; Fri, 22 Nov 2019 22:23:58 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id E36B7C21E31; Fri, 22 Nov 2019 22:23:48 +0000 (UTC) Received: from mail-wm1-f68.google.com (mail-wm1-f68.google.com [209.85.128.68]) by lists.denx.de (Postfix) with ESMTPS id 05748C21C4A for ; Fri, 22 Nov 2019 22:23:47 +0000 (UTC) Received: by mail-wm1-f68.google.com with SMTP id t26so9360785wmi.4 for ; Fri, 22 Nov 2019 14:23:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=NAD2BQhQoIYcWNZfTitYCMPqAbd5Ri4q/ZN9pKSAg5s=; b=Mri9GRWpWBeK4r781QnHHfaEBrG0D/fn4cmzxQJy2zKXTGhgEmR0rcdqS3/76/Kjwx rHDTBY8FiGXL3D+bTHLnz9IdqLG3Drku/+6MqwXBQNm3xYsZjif9xtkCTdY87iGNzIUR v7HhGBrbJvX3tULMBbKyzdELQi5iFoYo1gL+k= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=NAD2BQhQoIYcWNZfTitYCMPqAbd5Ri4q/ZN9pKSAg5s=; b=aoJwNCgWRXCoITtInfvH6sp4w0w5+MUBtlg4sgkGokk/fVTLXy730ej5m7JFXndGmr dVvgylY2p99SPuN2ZlyuuPUMu1lQH/VqcFEVtuwd7fc/NFZIEOdt2tk6975naPNLCdfK dDpcfhi6kj7dSfyd+ktXIYuoGzT9jRhqoNJw7VNvEhEiOL9pNaI1qUCsfG/iWA+3PXTY IkugANGdSjNSDSaTdKUEUyomAYstB4fgFHrhU6jPtgXrnh4x0/xBw+gohmFIHjgKiPnZ Ehh+wX2HTnljroAv9GO3SZtdpcbxQpP/7ln2ZO73lp4yZOHeZbObX8yVClN/5GU2pHzD MFIA== X-Gm-Message-State: APjAAAUjrFSxC2GREE7OIesOD0wDYPwLniy4mwPRpseSgkYV7hsAc+e9 Barl6jtYdnf4Ebi97sJO16pTupIc+XSvIV0xIesrX/uu3Mb1ZZHZ5C7xhPFZi22eFkbV98Lkz4V sH/61oejkYJHr6Q4jVRKiA/mC9rqmrNd5kwviEbdfSG/o8/Gr1s5K8ZjyERQY5vvzRv6RfXKbOX JDwi/ixUyVam0= X-Google-Smtp-Source: APXvYqzyqUUVOzFjCMhaoj7SFXshZBrgFkdeFU+Tjsejw/TUIBp4Q12KTbKZyNzi1A66UgpRpW55Dg== X-Received: by 2002:a1c:cc1a:: with SMTP id h26mr7469569wmb.40.1574461426139; Fri, 22 Nov 2019 14:23:46 -0800 (PST) Received: from LBRMN-LNXUB114.ric.broadcom.com ([192.19.228.250]) by smtp.gmail.com with ESMTPSA id d20sm9623176wra.4.2019.11.22.14.23.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Nov 2019 14:23:45 -0800 (PST) From: Vladimir Olovyannikov To: u-boot@lists.denx.de Date: Fri, 22 Nov 2019 14:23:22 -0800 Message-Id: <20191122222323.28898-3-vladimir.olovyannikov@broadcom.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191122222323.28898-1-vladimir.olovyannikov@broadcom.com> References: <20191122222323.28898-1-vladimir.olovyannikov@broadcom.com> Cc: Srinath Mannam Subject: [U-Boot] [PATCH 2/3] drivers: core: uclass: Get next device fail with driver probe fail X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" From: Srinath Mannam Add changes to fix get next device failed if driver probe failed issue. In Multi PCIe host controller platforms, if one PCIe host driver probe failed with any reason then it stops to find next PCIe host controller device pointer to call its driver probe. Signed-off-by: Srinath Mannam Signed-off-by: Vladimir Olovyannikov --- drivers/core/uclass.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/core/uclass.c b/drivers/core/uclass.c index c520ef113a..ab50f8f6db 100644 --- a/drivers/core/uclass.c +++ b/drivers/core/uclass.c @@ -442,7 +442,7 @@ int uclass_get_device_tail(struct udevice *dev, int ret, struct udevice **devp) assert(dev); ret = device_probe(dev); if (ret) - return ret; + dev_dbg(dev, "%s device_probe failed\n", __func__); *devp = dev; From patchwork Fri Nov 22 22:23:23 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Olovyannikov X-Patchwork-Id: 1199679 X-Patchwork-Delegate: bmeng.cn@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=quarantine dis=none) header.from=broadcom.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=broadcom.com header.i=@broadcom.com header.b="R6umjOV5"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 47KWF30HG7z9sPL for ; Sat, 23 Nov 2019 09:24:23 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id A6078C21C2C; Fri, 22 Nov 2019 22:24:09 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RCVD_IN_MSPIKE_H2, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 88DB2C21D8A; Fri, 22 Nov 2019 22:24:05 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 0001FC21D74; Fri, 22 Nov 2019 22:23:49 +0000 (UTC) Received: from mail-wr1-f66.google.com (mail-wr1-f66.google.com [209.85.221.66]) by lists.denx.de (Postfix) with ESMTPS id B5465C21CB1 for ; Fri, 22 Nov 2019 22:23:49 +0000 (UTC) Received: by mail-wr1-f66.google.com with SMTP id b18so10430235wrj.8 for ; Fri, 22 Nov 2019 14:23:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=O2L+zrq+QSdcKaapJYLGcne+ubAIZ6b8jbzsRWEOd5s=; b=R6umjOV526QGP7zrj1Yg+3Fk1zGVFxxvopYZO304QtTxNPGvWIiIfb2LttqhepNBVL fNygiJ73gjXl/VRDNx8I8jP5/SVtAukkcj+EYfMOlZS4NA2+4NBLpi4IKXKCu9kblXb7 RoLWHOE7fvFfW+Uoap2+kG42CR/epQ0OOwbD8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=O2L+zrq+QSdcKaapJYLGcne+ubAIZ6b8jbzsRWEOd5s=; b=p5HxSz8IviOyfx6bi5saFF5r++n+WBWWTkVoal0P/aZzWG2XBt/IAP+49fl3IYhMnv yUUnB/WBy7GF2jb/N205adO2gZq5xMUJ69tRBu8lkPMDn4kds/mKXI3NBuMRJ5mQPfmU 6dFiO4r6O3K0ayHvNrPOD3qwcUyvhPjz3k7n/ZyO6OBHShzcQQmgs6LHhUXSGPtm/gRG P3l3dw8v3qCegkEKD1IrR2nTbOFxH8rgiYujN95cGtwPGAZ1eJRSlhH3vbo9sr3s6rlW obw+Cy33rAMDl3GC6cx8bdmZyE1Q6YQJdHzpdAmyi/6o6Pb8KVRBFEa+S/R3iskX8tRK gNkA== X-Gm-Message-State: APjAAAXBzCOqAfCPD8rV7Ty+RxeQUPWdAEbcO7A4U7wUx9KNWBfN9Pny ZhNIx2qEE18EXkKfQuF1BR+W0vefO/ZF5jZ2GoRgyMmUKhXFnP2kKNS4yb3dRvxqPPmhq8BGK0+ h4s+3x7gUa15ui+whpjJ2VWqqyDm028l6FjUKdSVQtGwjG8ZAzo3+ZYJ1BfS0woWp1nK4Te9qcW SmeX1F97VCOuU= X-Google-Smtp-Source: APXvYqziuCkLL1BQFF/UpwR+NW7xQEVKnsgcTUmJlPX3tEugHPeKTz96hrat014xydAiIZr10QIADg== X-Received: by 2002:a5d:4a8c:: with SMTP id o12mr3305956wrq.43.1574461428838; Fri, 22 Nov 2019 14:23:48 -0800 (PST) Received: from LBRMN-LNXUB114.ric.broadcom.com ([192.19.228.250]) by smtp.gmail.com with ESMTPSA id d20sm9623176wra.4.2019.11.22.14.23.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Nov 2019 14:23:48 -0800 (PST) From: Vladimir Olovyannikov To: u-boot@lists.denx.de Date: Fri, 22 Nov 2019 14:23:23 -0800 Message-Id: <20191122222323.28898-4-vladimir.olovyannikov@broadcom.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191122222323.28898-1-vladimir.olovyannikov@broadcom.com> References: <20191122222323.28898-1-vladimir.olovyannikov@broadcom.com> Cc: Srinath Mannam Subject: [U-Boot] [PATCH 3/3] drivers: pci: pci-uclass: Get PCI dma regions support X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" From: Srinath Mannam Add API to parse dma-regions given in PCIe host controller DT node. Signed-off-by: Srinath Mannam Signed-off-by: Vladimir Olovyannikov --- drivers/pci/pci-uclass.c | 41 ++++++++++++++++++++++++++++++++++++++++ include/pci.h | 2 ++ 2 files changed, 43 insertions(+) diff --git a/drivers/pci/pci-uclass.c b/drivers/pci/pci-uclass.c index eb7a01fd55..ddc2d5cf2c 100644 --- a/drivers/pci/pci-uclass.c +++ b/drivers/pci/pci-uclass.c @@ -1166,6 +1166,47 @@ ulong pci_conv_size_to_32(ulong old, ulong value, uint offset, return value; } +int pci_get_dma_regions(struct udevice *dev, struct pci_region *memp, int index) +{ + int pci_addr_cells, addr_cells, size_cells; + int cells_per_record; + const u32 *prop; + int len; + int i = 0; + + prop = ofnode_get_property(dev_ofnode(dev), "dma-ranges", &len); + if (!prop) { + dev_err(dev, "%s: Cannot decode dma-ranges\n", __func__); + return -EINVAL; + } + + pci_addr_cells = ofnode_read_simple_addr_cells(dev_ofnode(dev)); + addr_cells = ofnode_read_simple_addr_cells(dev_ofnode(dev->parent)); + size_cells = ofnode_read_simple_size_cells(dev_ofnode(dev)); + + /* PCI addresses are always 3-cells */ + len /= sizeof(u32); + cells_per_record = pci_addr_cells + addr_cells + size_cells; + debug("%s: len=%d, cells_per_record=%d\n", __func__, len, + cells_per_record); + + while (len) { + memp->bus_start = fdtdec_get_number(prop + 1, 2); + prop += pci_addr_cells; + memp->phys_start = fdtdec_get_number(prop, addr_cells); + prop += addr_cells; + memp->size = fdtdec_get_number(prop, size_cells); + prop += size_cells; + + if (i == index) + return 0; + i++; + len -= cells_per_record; + } + + return -EINVAL; +} + int pci_get_regions(struct udevice *dev, struct pci_region **iop, struct pci_region **memp, struct pci_region **prefp) { diff --git a/include/pci.h b/include/pci.h index ff59ac0e69..ef55f54ea5 100644 --- a/include/pci.h +++ b/include/pci.h @@ -1284,6 +1284,8 @@ struct udevice *pci_get_controller(struct udevice *dev); int pci_get_regions(struct udevice *dev, struct pci_region **iop, struct pci_region **memp, struct pci_region **prefp); +int +pci_get_dma_regions(struct udevice *dev, struct pci_region *memp, int index); /** * dm_pci_write_bar32() - Write the address of a BAR *