[U-Boot] PCI on mpc832x?
Joakim Tjernlund
joakim.tjernlund at transmode.se
Wed Apr 29 13:51:53 CEST 2009
Kumar Gala <galak at kernel.crashing.org> wrote on 27/04/2009 16:12:35:
> From:
>
> Kumar Gala <galak at kernel.crashing.org>
>
> To:
>
> Joakim Tjernlund <joakim.tjernlund at transmode.se>
>
> Cc:
>
> Scott Wood <scottwood at freescale.com>, u-boot at lists.denx.de
>
> Date:
>
> 27/04/2009 16:15
>
> Subject:
>
> Re: [U-Boot] PCI on mpc832x?
>
>
> On Apr 24, 2009, at 9:11 AM, Joakim Tjernlund wrote:
>
> > Scott Wood <scottwood at freescale.com> wrote on 23/04/2009 18:40:01:
> >>
> >> On Thu, Apr 23, 2009 at 03:32:11PM +0200, Joakim Tjernlund wrote:
> >>> Still trying to wrap my head around PCI and I wonder if I need to do
> > some
> >>> HW init in u-boot in order to use the PCI controller in Linux?
> >>
> >> Yes. See pci_init_board() in mpc8323erdb for an example.
> >
> > Thanks Scott, this was very helpful.
> >
> > I am trying to map the "ranges" property in the OF tree and I am
> > looking
> > at
> > the dts files in the kernel tree.
> > There are three that comes somewhat close but they all have somewhat
> > different
> > "ranges" propery:
> >
> > mpc832x_mds.dts:
> > ranges = <0x02000000 0x0 0x90000000 0x90000000 0x0 0x10000000
>
> this is PCI MMIO non-prefetch @ 0x90000000 (cpu & pci) of size 256M
>
> > 0x42000000 0x0 0x80000000 0x80000000 0x0 0x10000000
>
> this is PCI MMIO prefetch @ 0x80000000 (cpu & pci) of size 256M
>
> > 0x01000000 0x0 0x00000000 0xd0000000 0x0 0x00100000>;
>
> this is PCI IO @ @ cpu phy 0xd0000000 pci io 0x0 of size 1M
>
> > mpc832x_rdb.dts:
> > ranges = <0x42000000 0x0 0x80000000 0x80000000 0x0 0x10000000
> > 0x02000000 0x0 0x90000000 0x90000000 0x0 0x10000000
> > 0x01000000 0x0 0xd0000000 0xd0000000 0x0 0x04000000>;
> >
> > mpc8313erdb.dts:
> > ranges = <0x02000000 0x0 0x90000000 0x90000000 0x0 0x10000000
> > 0x42000000 0x0 0x80000000 0x80000000 0x0 0x10000000
> > 0x01000000 0x0 0x00000000 0xe2000000 0x0 0x00100000>;
> >
> > Don't understand how I should do here. Just select the mpc832x_rdb.dts
> > "ranges" and define my base addresses similarly?
> > #define CFG_PCI1_MEM_BASE 0x80000000
> > #define CFG_PCI1_MEM_PHYS CFG_PCI1_MEM_BASE
> > #define CFG_PCI1_MEM_SIZE 0x10000000 /* 256M */
> > #define CFG_PCI1_MMIO_BASE 0x90000000
> > #define CFG_PCI1_MMIO_PHYS CFG_PCI1_MMIO_BASE
> > #define CFG_PCI1_MMIO_SIZE 0x10000000 /* 256M */
> > #define CFG_PCI1_IO_BASE 0xd0000000
> > #define CFG_PCI1_IO_PHYS CFG_PCI1_IO_BASE
> > #define CFG_PCI1_IO_SIZE 0x4000000 /* 64M */
>
> this is overkill for IO, 64k is the max. (its probably inherited when
> we didn't know better).
>
I think I got the mapping of memory space now, thanks.
A few questions though. I have noted that some boards map the PCI IO space
to 0x0 and some use the same address space as the CPU. If I use
the CPU address space as PCI IO space I get(in linux):
PCI 0000:00 Cannot reserve Legacy IO [0x00-0xfff]
I don't understand what is best to do here, stay on 0x0 or move to CPU
address space?
with CONFIG_PCI_QUIRKS=y Linux prints:
PCI: Bus scan for 0000:00 returning with max=00
pci_bus 0000:00: resource 0 io: [0x00-0xfffff]
pci_bus 0000:00: resource 1 mem: [0x80000000-0x8fffffff]
pci_bus 0000:00: resource 2 mem: [0x90000000-0x9fffffff]
But if I turn off CONFIG_PCI_QUIRKS I get:
PCI: Bus scan for 0000:00 returning with max=00
PCI: Cannot allocate resource region 0 of device 0000:00:00.0, will remap
PCI: Cannot allocate resource region 2 of device 0000:00:00.0, will remap
pci 0000:00:00.0: BAR 2: got res [0x80000000-0x87ffffff] bus
[0x80000000-0x87ffffff] flags 0x2002120c
pci 0000:00:00.0: BAR 2: moved to bus [0x80000000-0x87ffffff] flags
0x2120c
pci 0000:00:00.0: BAR 0: got res [0x90000000-0x901fffff] bus
[0x90000000-0x901fffff] flags 0x20020200
pci 0000:00:00.0: BAR 0: moved to bus [0x90000000-0x901fffff] flags
0x20200
pci_bus 0000:00: resource 0 io: [0x00-0xfffff]
pci_bus 0000:00: resource 1 mem: [0x80000000-0x8fffffff]
pci_bus 0000:00: resource 2 mem: [0x90000000-0x9fffffff]
The BAR ... printout feels a bit off. Why do I need quirks on for
a clean boot?
Jocke
More information about the U-Boot
mailing list