All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bin Meng <bmeng.cn@gmail.com>
To: u-boot@lists.denx.de
Subject: [PATCH 04/26] ppc: qemu: Support non-identity PCI bus address
Date: Sun,  7 Feb 2021 23:11:04 +0800	[thread overview]
Message-ID: <1612710687-56493-5-git-send-email-bmeng.cn@gmail.com> (raw)
In-Reply-To: <1612710687-56493-1-git-send-email-bmeng.cn@gmail.com>

When QEMU originally supported the ppce500 machine back in Jan 2014,
it was created with a 1:1 mapping of PCI bus address. Things seemed
to change rapidly that in Nov 2014 with the following QEMU commits:

commit e6b4e5f4795b ("PPC: e500: Move CCSR and MMIO space to upper end of address space")

and

commit cb3778a0455a ("PPC: e500 pci host: Add support for ATMUs")

the PCI memory and IO physical address were moved to beyond 4 GiB,
but PCI bus address remained below 4 GiB, hence a non-identity
mapping was created. Unfortunately corresponding U-Boot updates
were missed along with the QEMU changes and the U-Boot QEMU ppce500
PCI support has been broken since then.

This commit makes the PCI (non-DM version) work again.

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
---

 board/freescale/qemu-ppce500/qemu-ppce500.c | 29 ++++++++++++++---------------
 1 file changed, 14 insertions(+), 15 deletions(-)

diff --git a/board/freescale/qemu-ppce500/qemu-ppce500.c b/board/freescale/qemu-ppce500/qemu-ppce500.c
index 3395377..f82501c 100644
--- a/board/freescale/qemu-ppce500/qemu-ppce500.c
+++ b/board/freescale/qemu-ppce500/qemu-ppce500.c
@@ -84,20 +84,24 @@ int checkboard(void)
 }
 
 static int pci_map_region(void *fdt, int pci_node, int range_id,
-			  phys_size_t *ppaddr, pci_addr_t *pvaddr,
-			  pci_size_t *psize, ulong *pmap_addr)
+			  phys_addr_t *pbaddr, phys_size_t *ppaddr,
+			  pci_addr_t *pvaddr, pci_size_t *psize,
+			  ulong *pmap_addr)
 {
-	uint64_t addr;
+	uint64_t baddr;
+	uint64_t paddr;
 	uint64_t size;
 	ulong map_addr;
 	int r;
 
-	r = fdt_read_range(fdt, pci_node, range_id, NULL, &addr, &size);
+	r = fdt_read_range(fdt, pci_node, range_id, &baddr, &paddr, &size);
 	if (r)
 		return r;
 
+	if (pbaddr)
+		*pbaddr = baddr;
 	if (ppaddr)
-		*ppaddr = addr;
+		*ppaddr = paddr;
 	if (psize)
 		*psize = size;
 
@@ -114,7 +118,7 @@ static int pci_map_region(void *fdt, int pci_node, int range_id,
 		return -1;
 
 	/* Map virtual memory for range */
-	assert(!tlb_map_range(map_addr, addr, size, TLB_MAP_IO));
+	assert(!tlb_map_range(map_addr, paddr, size, TLB_MAP_IO));
 	*pmap_addr = map_addr + size;
 
 	if (pvaddr)
@@ -165,24 +169,19 @@ void pci_init_board(void)
 		pci_info.regs = fdt_translate_address(fdt, pci_node, reg);
 
 		/* Map MMIO range */
-		r = pci_map_region(fdt, pci_node, 0, &pci_info.mem_phys, NULL,
+		r = pci_map_region(fdt, pci_node, 0, &pci_info.mem_bus,
+				   &pci_info.mem_phys, NULL,
 				   &pci_info.mem_size, &map_addr);
 		if (r)
 			break;
 
 		/* Map PIO range */
-		r = pci_map_region(fdt, pci_node, 1, &pci_info.io_phys, NULL,
+		r = pci_map_region(fdt, pci_node, 1, &pci_info.io_bus,
+				   &pci_info.io_phys, NULL,
 				   &pci_info.io_size, &map_addr);
 		if (r)
 			break;
 
-		/*
-		 * The PCI framework finds virtual addresses for the buses
-		 * through our address map, so tell it the physical addresses.
-		 */
-		pci_info.mem_bus = pci_info.mem_phys;
-		pci_info.io_bus = pci_info.io_phys;
-
 		/* Instantiate */
 		pci_info.pci_num = pci_num + 1;
 
-- 
2.7.4

  parent reply	other threads:[~2021-02-07 15:11 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-07 15:11 [PATCH 00/26] ppc: qemu: Convert qemu-ppce500 to driver model Bin Meng
2021-02-07 15:11 ` Bin Meng
2021-02-07 15:11 ` [PATCH 01/26] Revert "pci: pci-uclass: Dynamically allocate the PCI regions" Bin Meng
2021-02-07 15:33   ` Simon Glass
2021-02-07 19:33     ` Tom Rini
2021-02-10  0:46     ` Bin Meng
2021-02-10  2:36       ` Tom Rini
2021-02-10  5:10       ` Simon Glass
2021-02-10  7:13         ` Stefan Roese
2021-02-10 14:13       ` Tom Rini
2021-02-10 14:27         ` Marek Vasut
2021-02-10 14:48           ` Tom Rini
2021-02-10 14:50             ` Marek Vasut
2021-02-14  4:53         ` Bin Meng
2021-02-14 14:35           ` Tom Rini
2021-02-14 14:44             ` Marek Vasut
2021-02-14 14:52               ` Tom Rini
2021-02-14 19:12                 ` Daniel Schwierzeck
2021-02-14 20:30                   ` Tom Rini
2021-02-18  0:32                     ` Bin Meng
2021-02-07 15:11 ` [PATCH 02/26] ppc: qemu: Update MAINTAINERS for correct email address Bin Meng
2021-02-08  4:20   ` Simon Glass
2021-02-07 15:11 ` [PATCH 03/26] common: fdt_support: Support special case of PCI address in fdt_read_prop() Bin Meng
2021-02-08  4:21   ` Simon Glass
2021-02-08  5:17     ` Bin Meng
2021-02-08 14:08       ` Simon Glass
2021-02-07 15:11 ` Bin Meng [this message]
2021-02-07 15:11 ` [PATCH 05/26] ppc: qemu: Fix CONFIG_SYS_PCI_MAP_END Bin Meng
2021-02-07 15:11 ` [PATCH 06/26] ppc: mpc85xx: Wrap LAW related codes with CONFIG_FSL_LAW Bin Meng
2021-02-07 15:11 ` [PATCH 07/26] ppc: qemu: Drop init_laws() and print_laws() Bin Meng
2021-02-07 15:11 ` [PATCH 08/26] ppc: qemu: Drop board_early_init_f() Bin Meng
2021-02-07 15:11 ` [PATCH 09/26] ppc: qemu: Enable OF_CONTROL Bin Meng
2021-02-08  4:20   ` Simon Glass
2021-02-07 15:11 ` [PATCH 10/26] ppc: qemu: Enable driver model Bin Meng
2021-02-08  4:20   ` Simon Glass
2021-02-07 15:11 ` [PATCH 11/26] include: Remove extern from addr_map.h Bin Meng
2021-02-08  4:20   ` Simon Glass
2021-02-07 15:11 ` [PATCH 12/26] lib: addr_map: Move address_map[] type to the header file Bin Meng
2021-02-08  4:21   ` Simon Glass
2021-02-07 15:11 ` [PATCH 13/26] cmd: Add a command to display the address map Bin Meng
2021-02-08  4:20   ` Simon Glass
2021-02-08  5:12     ` Bin Meng
2021-02-08 14:13       ` Simon Glass
2021-02-07 15:11 ` [PATCH 14/26] lib: kconfig: Mention CONFIG_ADDR_MAP limitation in the help Bin Meng
2021-02-08  4:21   ` Simon Glass
2021-02-07 15:11 ` [PATCH 15/26] ppc: io.h: Use addrmap_ translation APIs only in post-relocation phase Bin Meng
2021-02-07 15:11 ` [PATCH 16/26] common: Move initr_addr_map() to a bit earlier Bin Meng
2021-02-08  4:21   ` Simon Glass
2021-02-07 15:11 ` [PATCH 17/26] ppc: qemu: Switch over to use DM serial Bin Meng
2021-02-08  4:20   ` Simon Glass
2021-02-07 15:11 ` [PATCH 18/26] pci: mpc85xx: Wrap LAW programming with CONFIG_FSL_LAW Bin Meng
2021-02-07 15:11 ` [PATCH 19/26] pci: mpc85xx: Support controller register physical address beyond 32-bit Bin Meng
2021-02-07 15:11 ` [PATCH 20/26] pci: mpc85xx: Support 64-bit bus and cpu address Bin Meng
2021-02-07 15:11 ` [PATCH 21/26] ppc: qemu: Switch over to use DM ETH and PCI Bin Meng
2021-02-07 15:11 ` [PATCH 22/26] ppc: qemu: Drop CONFIG_OF_BOARD_SETUP Bin Meng
2021-02-07 15:11 ` [PATCH 23/26] cmd: Fix virtio command dependency Bin Meng
2021-02-08  4:20   ` Simon Glass
2021-02-07 15:11 ` [PATCH 24/26] ppc: qemu: Enable VirtIO NET support Bin Meng
2021-02-07 15:11 ` [PATCH 25/26] ppc: qemu: Move board directory from board/freescale to board/emulation Bin Meng
2021-02-07 15:11 ` [PATCH 26/26] doc: Add a reST document for qemu-ppce500 Bin Meng
2021-02-08  4:20   ` Simon Glass
2021-02-10  0:36 ` [PATCH 00/26] ppc: qemu: Convert qemu-ppce500 to driver model Bin Meng
2021-02-10  0:36   ` Bin Meng

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=1612710687-56493-5-git-send-email-bmeng.cn@gmail.com \
    --to=bmeng.cn@gmail.com \
    --cc=u-boot@lists.denx.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 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.