2013-06-07 09:46:12

by Alessandro Rubini

[permalink] [raw]
Subject: amba pl011: where to submit a fix for x86 builds

Hello.
This is cc'd to $(get_maintainer.pl -f drivers/tty/serial/amba-pl011.c)
and x86 maintainers too.

While working on the pci-to-amba bridge driver (to be resubmitted in
the next days) I have to deal with the problem of pl011 not building,
after phys_to_page was introduced, by Chanho Min (Cc: here) in commit

cb06ff1 ARM: PL011: Add support for Rx DMA buffer polling.

because x86 has no phys_to_page.

The fix I use is trivially this:

- sg_set_page(&sg->sg, phys_to_page(dma_addr),
+ sg_set_page(&sg->sg, virt_to_page(sg->buf),

(virt_to_page is slower, but other sg_get_page() users do the same
and other solutions are more convoluted).

Shall I submit this to x86 with the pci-to-amba bridge series or to
arm/serial and then note the dependency when posting the bridge series?

thanks
/alessandro


2013-06-07 09:50:35

by Russell King - ARM Linux

[permalink] [raw]
Subject: Re: amba pl011: where to submit a fix for x86 builds

On Fri, Jun 07, 2013 at 11:38:54AM +0200, Alessandro Rubini wrote:
> Hello.
> This is cc'd to $(get_maintainer.pl -f drivers/tty/serial/amba-pl011.c)
> and x86 maintainers too.
>
> While working on the pci-to-amba bridge driver (to be resubmitted in
> the next days) I have to deal with the problem of pl011 not building,
> after phys_to_page was introduced, by Chanho Min (Cc: here) in commit
>
> cb06ff1 ARM: PL011: Add support for Rx DMA buffer polling.
>
> because x86 has no phys_to_page.
>
> The fix I use is trivially this:
>
> - sg_set_page(&sg->sg, phys_to_page(dma_addr),
> + sg_set_page(&sg->sg, virt_to_page(sg->buf),
>
> (virt_to_page is slower, but other sg_get_page() users do the same
> and other solutions are more convoluted).

... and thereby breaks ARM, because sg->buf is not part of the kernel
direct mapped RAM region.

I don't think there's a portable way to do the above, because the DMA
coherent API doesn't really support translating the allocated memory
region to a struct page pointer.