* [PATCH] pci: Enable dm_pci_map_bar() for 64-bit BARs
@ 2023-11-24 10:15 Moritz Fischer
2023-11-24 12:09 ` Philip Oberfichtner
0 siblings, 1 reply; 2+ messages in thread
From: Moritz Fischer @ 2023-11-24 10:15 UTC (permalink / raw)
To: sjg, u-boot; +Cc: bmeng.cn, marex, xypron.glpk, stcarlso, Moritz Fischer
Allow dm_pci_map_bar() usage on systems with CONFIG_PCI_SYS_64BIT.
Signed-off-by: Moritz Fischer <moritzf@google.com>
---
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
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH] pci: Enable dm_pci_map_bar() for 64-bit BARs
2023-11-24 10:15 [PATCH] pci: Enable dm_pci_map_bar() for 64-bit BARs Moritz Fischer
@ 2023-11-24 12:09 ` Philip Oberfichtner
0 siblings, 0 replies; 2+ messages in thread
From: Philip Oberfichtner @ 2023-11-24 12:09 UTC (permalink / raw)
To: Moritz Fischer; +Cc: sjg, u-boot, bmeng.cn, marex, xypron.glpk, stcarlso
Hi,
On Fri, Nov 24, 2023 at 10:15:20AM +0000, Moritz Fischer wrote:
> Allow dm_pci_map_bar() usage on systems with CONFIG_PCI_SYS_64BIT.
<snip>
>
> + /*
> + * 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.
> + */
This patch is also useful if the previous bootstage, e.g. coreboot,
allocated a 64-bit address. In fact I recently did something very
similar (downstream), so
Reviewed-by: Philip Oberfichtner <pro@denx.de>
--
=====================================================================
DENX Software Engineering GmbH, Managing Director: Erika Unter
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-22 Fax: +49-8142-66989-80 Email: pro@denx.de
=====================================================================
> + 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
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2023-11-24 12:09 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-11-24 10:15 [PATCH] pci: Enable dm_pci_map_bar() for 64-bit BARs Moritz Fischer
2023-11-24 12:09 ` Philip Oberfichtner
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.