linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Wolfram Sang <w.sang@pengutronix.de>
To: Grant Likely <grant.likely@secretlab.ca>
Cc: linuxppc-dev@ozlabs.org
Subject: Re: [PATCH] powerpc/5200: Bugfix for PCI mapping of memory and IMMR
Date: Thu, 29 Jan 2009 22:49:58 +0100	[thread overview]
Message-ID: <20090129214958.GG1406@pengutronix.de> (raw)
In-Reply-To: <20090127043315.26160.43312.stgit@localhost.localdomain>

[-- Attachment #1: Type: text/plain, Size: 3825 bytes --]

On Mon, Jan 26, 2009 at 09:34:36PM -0700, Grant Likely wrote:
> From: Grant Likely <grant.likely@secretlab.ca>
> 
> This patch ensures that memory gets properly mapped into the PCI
> address space.  Without this patch, the memory window BAR is left
> at whatever value happened to be loaded into the BAR when Linux
> was booted.  Without this patch, memory could end up getting mapped
> at any of the 1G address boundaries instead of at '0' where Linux
> expects it.
> 
> Similarly, this patch also ensures that the internally memory mapped
> registers (IMMR) are mapped to the correct PCI address range.
> 
> Without this patch, PCI appears to work correctly until a PCI
> device is inserted which DMAs into memory.
> 
> Signed-off-by: Grant Likely <grant.likely@secretlab.ca>

No regression with a phyCORE-MPC5200B-tiny. U-Boot did probably the
right thing here...

Tested-by: Wolfram Sang <w.sang@pengutronix.de>

> ---
> 
> This is a bugfix that I intend to merge into 2.6.29 and once it is
> mainlined get it added to the stable queue.  If you have a 5200 system,
> please test and make sure it works for you.
> 
> Thanks
> g.
> 
>  arch/powerpc/platforms/52xx/mpc52xx_pci.c |   24 ++++++++++--------------
>  1 files changed, 10 insertions(+), 14 deletions(-)
> 
> 
> diff --git a/arch/powerpc/platforms/52xx/mpc52xx_pci.c b/arch/powerpc/platforms/52xx/mpc52xx_pci.c
> index c3f2c21..87ff522 100644
> --- a/arch/powerpc/platforms/52xx/mpc52xx_pci.c
> +++ b/arch/powerpc/platforms/52xx/mpc52xx_pci.c
> @@ -20,14 +20,6 @@
>  
>  
>  /* ======================================================================== */
> -/* PCI windows config                                                       */
> -/* ======================================================================== */
> -
> -#define MPC52xx_PCI_TARGET_IO	0xf0000000
> -#define MPC52xx_PCI_TARGET_MEM	0x00000000
> -
> -
> -/* ======================================================================== */
>  /* Structures mapping & Defines for PCI Unit                                */
>  /* ======================================================================== */
>  
> @@ -244,7 +236,7 @@ static struct pci_ops mpc52xx_pci_ops = {
>  
>  static void __init
>  mpc52xx_pci_setup(struct pci_controller *hose,
> -                  struct mpc52xx_pci __iomem *pci_regs)
> +                  struct mpc52xx_pci __iomem *pci_regs, phys_addr_t pci_phys)
>  {
>  	struct resource *res;
>  	u32 tmp;
> @@ -314,10 +306,14 @@ mpc52xx_pci_setup(struct pci_controller *hose,
>  	/* Set all the IWCR fields at once; they're in the same reg */
>  	out_be32(&pci_regs->iwcr, MPC52xx_PCI_IWCR_PACK(iwcr0, iwcr1, iwcr2));
>  
> -	out_be32(&pci_regs->tbatr0,
> -		MPC52xx_PCI_TBATR_ENABLE | MPC52xx_PCI_TARGET_IO );
> -	out_be32(&pci_regs->tbatr1,
> -		MPC52xx_PCI_TBATR_ENABLE | MPC52xx_PCI_TARGET_MEM );
> +	/* Map IMMR onto PCI bus */
> +	pci_phys &= 0xfffc0000; /* bar0 has only 14 significant bits */
> +	out_be32(&pci_regs->tbatr0, MPC52xx_PCI_TBATR_ENABLE | pci_phys);
> +	out_be32(&pci_regs->bar0, PCI_BASE_ADDRESS_MEM_PREFETCH | pci_phys);
> +
> +	/* Map memory onto PCI bus */
> +	out_be32(&pci_regs->tbatr1, MPC52xx_PCI_TBATR_ENABLE);
> +	out_be32(&pci_regs->bar1, PCI_BASE_ADDRESS_MEM_PREFETCH);
>  
>  	out_be32(&pci_regs->tcr, MPC52xx_PCI_TCR_LD | MPC52xx_PCI_TCR_WCT8);
>  
> @@ -414,7 +410,7 @@ mpc52xx_add_bridge(struct device_node *node)
>  
>  	/* Finish setting up PCI using values obtained by
>  	 * pci_proces_bridge_OF_ranges */
> -	mpc52xx_pci_setup(hose, pci_regs);
> +	mpc52xx_pci_setup(hose, pci_regs, rsrc.start);
>  
>  	return 0;
>  }
> 

-- 
  Dipl.-Ing. Wolfram Sang | http://www.pengutronix.de
 Pengutronix - Linux Solutions for Science and Industry

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 197 bytes --]

      parent reply	other threads:[~2009-01-29 21:50 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-01-27  4:34 [PATCH] powerpc/5200: Bugfix for PCI mapping of memory and IMMR Grant Likely
2009-01-27 17:56 ` Matt Sealey
2009-01-27 18:03   ` Grant Likely
2009-01-30  8:33   ` Andre Schwarz
2009-01-29 21:49 ` Wolfram Sang [this message]

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=20090129214958.GG1406@pengutronix.de \
    --to=w.sang@pengutronix.de \
    --cc=grant.likely@secretlab.ca \
    --cc=linuxppc-dev@ozlabs.org \
    /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;
as well as URLs for NNTP newsgroup(s).