From: Moritz Fischer <moritzf@google.com>
To: sjg@chromium.org, u-boot@lists.denx.de, trini@konsulko.com
Cc: bmeng.cn@gmail.com, marex@denx.de, xypron.glpk@gmx.de,
stcarlso@linux.microsoft.com,
Moritz Fischer <moritzf@google.com>,
Philip Oberfichtner <pro@denx.de>
Subject: [PATCH v2] pci: Enable dm_pci_map_bar() for 64-bit BARs
Date: Wed, 29 Nov 2023 00:48:50 +0000 [thread overview]
Message-ID: <20231129004850.2542811-1-moritzf@google.com> (raw)
Allow dm_pci_map_bar() usage on systems with CONFIG_SYS_PCI_64BIT.
Reviewed-by: Philip Oberfichtner <pro@denx.de>
Signed-off-by: Moritz Fischer <moritzf@google.com>
---
Changes from v1:
- Fixed commit message
---
drivers/pci/pci-uclass.c | 11 +++++++++++
include/pci.h | 4 ++--
2 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/drivers/pci/pci-uclass.c b/drivers/pci/pci-uclass.c
index e0d01f6a85..82308c7477 100644
--- a/drivers/pci/pci-uclass.c
+++ b/drivers/pci/pci-uclass.c
@@ -1611,6 +1611,17 @@ void *dm_pci_map_bar(struct udevice *dev, int bar, size_t offset, size_t len,
dm_pci_read_config32(udev, bar, &bar_response);
pci_bus_addr = (pci_addr_t)(bar_response & ~0xf);
+ /*
+ * This assumes that dm_pciauto_setup_device() will allocate
+ * a 64-bit address if CONFIG_SYS_PCI_64BIT is enabled and
+ * the device advertises that it supports it.
+ */
+ if (IS_ENABLED(CONFIG_SYS_PCI_64BIT) &&
+ (bar_response & PCI_BASE_ADDRESS_MEM_TYPE_64)) {
+ dm_pci_read_config32(udev, bar + 4, &bar_response);
+ pci_bus_addr |= (pci_addr_t)bar_response << 32;
+ }
+
if (~((pci_addr_t)0) - pci_bus_addr < offset)
return NULL;
diff --git a/include/pci.h b/include/pci.h
index 2f5eb30b83..0d1ac7b015 100644
--- a/include/pci.h
+++ b/include/pci.h
@@ -1350,8 +1350,8 @@ pci_addr_t dm_pci_phys_to_bus(struct udevice *dev, phys_addr_t addr, size_t len,
*
* Looks up a base address register and finds the physical memory address
* that corresponds to it.
- * Can be used for 32b BARs 0-5 on type 0 functions and for 32b BARs 0-1 on
- * type 1 functions.
+ * Can be used for 32b/64b BARs 0-5 on type 0 functions and for 32b BARs 0-1
+ * on type 1 functions.
* Can also be used on type 0 functions that support Enhanced Allocation for
* 32b/64b BARs. Note that duplicate BEI entries are not supported.
*
--
2.43.0.rc1.413.gea7ed67945-goog
next reply other threads:[~2023-11-29 0:49 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-29 0:48 Moritz Fischer [this message]
2023-11-29 17:47 ` [PATCH v2] pci: Enable dm_pci_map_bar() for 64-bit BARs Simon Glass
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231129004850.2542811-1-moritzf@google.com \
--to=moritzf@google.com \
--cc=bmeng.cn@gmail.com \
--cc=marex@denx.de \
--cc=pro@denx.de \
--cc=sjg@chromium.org \
--cc=stcarlso@linux.microsoft.com \
--cc=trini@konsulko.com \
--cc=u-boot@lists.denx.de \
--cc=xypron.glpk@gmx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox