Re: MPC8250 + PCMCIA + airo_cs card + IO Port mapping proble
From: Jim Rowe <hidden>
Date: 2003-05-23 04:01:01
On Thu, 2003-05-22 at 11:35, Jerry Van Baren wrote:
Kernel memory space starts at 0xC0000000. You need to set your I/O well above this (above the kernel executable). It is illegal to have I/O below the kernel (its a memory management issue). That is why the common IMMR setting is 0xF0000000. I would suggest you try setting your PCI window at 0xF8000000 or something like that. gvb
Ok, thanks for the pointer. I've scooted my PCI IO space up in memory to
where I had room.
This is how my IO is now setup:
pci_init_resource(&hose->io_resource,
0xd0000000,
0xdfffffff,
IORESOURCE_IO,
"PCI host bridge");
pci_init_resource (&hose->mem_resources[0],
0x80000000,
0x803fffff,
IORESOURCE_MEM,
"PCI host bridge");
hose->io_space.start = 0xd0000000;
hose->io_space.end = 0xdfffffff;
hose->mem_space.start = 0x7ff00000;
hose->mem_space.end = 0x803fffff;
hose->io_base_virt = (void *)0;
my _IO_BASE is now 0xd0000000 and I do
io_block_mapping(0xd0000000, 0xd0000000, 0x1000000, _PAGE_IO);
early when the board is getting setup.
I've also setup PCIBR0 and PCIBR1 in the boot loader to have windows of
0x80000000 to 0xbfffffff and 0xd0000000 to 0xdfffffff.
Now when I try to write to the PCMCIA card, I don't see anything go out
on the PCMCIA bus (write enable and chipselect don't change). A printk
in the out_le16() routine shows that the address seems to be correct
(0xd00000102), but when I try to read from the card I get a Machine
Check Exception that is "Transfer ack error". I suspect that my IO
mapping is still not correct.
I know that the board is wired up correctly because the I am able to
read the card's CIS through io memory. Why aren't my IO Ports working?
-- James
At 12:29 PM 5/22/2003 -0400, you wrote:quoted
On Wed, 2003-05-21 at 21:33, Dan Malek wrote:quoted
Jim Rowe wrote:quoted
quoted
From what I can see - and please correct me if I'm wrong, the way thatLinux translates the Port IO to the memory mapped IO is through the outb and outw macros, which add an offset of _IO_BASE. How do I determine the correct value of _IO_BASE?The value of _IO_BASE depends upon how you configure and map the host PCI bridge on the 8250.Here is how my PCI bridge gets mapped: pci_init_resource(&hose->io_resource, 0xb0000000, 0xb00fffff, IORESOURCE_IO, "PCI host bridge"); pci_init_resource (&hose->mem_resources[0], 0x80000000, 0x803fffff, IORESOURCE_MEM, "PCI host bridge"); hose->io_space.start = 0xb0000000; hose->io_space.end = 0xb00fffff; hose->mem_space.start = 0x7ff00000; hose->mem_space.end = 0x803fffff; hose->io_base_virt = (void *)0;quoted
quoted
... I looked in m8260_setup.c and foundThe 8260 doesn't have a PCI bridge, so these mappings aren't appropriate for your board. The 0xf0000000 is needed to get to the IMMR space, but those accesses don't (shouldn't) be using in/out macros. The 0xe0000000 space is generally used for flash prom, external devices, local sdram and so on.I am basing the 8250 startup from the m8260_setup.c file.quoted
There are a variety of configuration options for the PCI bridge and all of the other I/O in your system and the mapping using either BATs or page tables. It depends upon the address ranges of all of the I/O in your system and their physical space allocation.It looks like my _IO_BASE should be 0xb0000000. I've added a line in m8260_setup.c to do io_block_mapping(0xb0000000, 0xb0000000, 0x000fffff, _PAGE_IO); however, I get an Oops when I try to write with an outw(). From my debug statements I see the address I'm trying to write to is 16-bit write: addr:b0000102 val:00000000 which looks correct since it is adding the 0xb0000000 offset. Does it look like I have my mapping setup properly, and if so why am I still getting Oopses?quoted
-- Dan-- Jim Rowe Advanced CounterMeasure Systems Phone: (916)669-4304 Email: jrowe@acmsystems.com********************************************************************** This e-mail and any files transmitted with it may be confidential and may be legally privileged or otherwise exempt from disclosure under applicable law. This e-mail and its files are intended solely for the individual or entity to whom they are addressed and their content is the property of Smiths Aerospace. If you are not the intended recipient, please do not read, copy, use or disclose this communication. If you have received this e-mail in error please notify the e-mail administrator at postmaster@smiths-aerospace.com and then delete this e-mail, its files and any copies. This footnote also confirms that this e-mail message has been scanned for the presence of known computer viruses. Smiths addresses are changing! The new addresses are of the form firstname.lastname@smiths-aerospace.com. Please update your address books! Please begin using the new form immediately. ***********************************************************************
-- Jim Rowe Advanced CounterMeasure Systems Phone: (916)669-4304 Email: jrowe@acmsystems.com ** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/