Thread (37 messages) flat view 37 messages, 6 authors, 2012-07-10
STALE5170d

[PATCH 03/15] ARM: tegra: use fixed PCI i/o mapping

From: nico@fluxnic.net (Nicolas Pitre)
Date: 2012-07-09 02:53:52

On Sun, 8 Jul 2012, Rob Herring wrote:
On 07/08/2012 11:35 AM, Arnd Bergmann wrote:
quoted
On Sunday 08 July 2012, Rob Herring wrote:
quoted
quoted
I'm not very familiar with the inner workings of the iotable and the
mappings initialized by it, but I wonder if this can be done dynamically
at a later stage. The way this is currently done in this patch, the I/O
region is statically mapped from a fixed offset within the PCIe address
range. Part of the patches to add DT support is to allow this region to
be defined by the DT, so that will obviously also create problems.
Is the i/o address something you could extract from DT earlier? This can
be done separately if it doesn't require information from the driver.

I'm sure exactly how to do a fixed virtual mapping other than the
io_table mappings. There was some discussion of use fixmap region
previously, but doing so will be a bit more complex. I'll look into this
some.
I think you can call ioremap_page_range() to do this.
Thanks for the pointer. But this has to be in 2 steps. First reserve the
virtual space and then map it. For the first part I think something like
this function will work:

void __init pci_reserve_io(void)
{
	struct vm_struct *vm;

	vm = early_alloc_aligned(sizeof(*vm), __alignof__(*vm));

	vm->addr = (void *)PCI_IO_VIRT_BASE;
	vm->size = SZ_1M;
	vm->phys_addr = 0;
	vm->flags = VM_IOREMAP | VM_ARM_STATIC_MAPPING;
	vm->flags |= VM_ARM_MTYPE(MT_DEVICE);
	vm->caller = pci_reserve_io;
	vm_area_add_early(vm++);
}

There's a big fat warning on vm_area_add_early from Nico to not use
unless you know what you're doing. I'll pretend I do...
:-)

This warning was inherited from vm_area_register_early() which used to 
make the core of what vm_area_add_early() is today.

Your usage of vm_area_add_early() should be fine as long as it is done 
before vmalloc_init(() is called.


Nicolas
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help