2012-02-08 12:28:04

by Michal Simek

[permalink] [raw]
Subject: CMA on arm from zero address

Hi,

I would like to setup CMA space at the beginning of ram because
I want to use remoteproc to run code on the second cpu which has to use addresses 0x0 - 32MB.

I have changed textofs in arch/arm/Makefile but there is not possible to setup
all values which I would like to use. What is the reason for this limitation?

Marek: Have you tried to prototype this configuration with cma?

Thanks,
Michal

--
Michal Simek, Ing. (M.Eng)
w: http://www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/
Microblaze U-BOOT custodian


2012-02-08 13:08:22

by Russell King - ARM Linux

[permalink] [raw]
Subject: Re: CMA on arm from zero address

On Wed, Feb 08, 2012 at 01:27:58PM +0100, Michal Simek wrote:
> Hi,
>
> I would like to setup CMA space at the beginning of ram because
> I want to use remoteproc to run code on the second cpu which has to
> use addresses 0x0 - 32MB.
>
> I have changed textofs in arch/arm/Makefile but there is not possible
> to setup all values which I would like to use.

What a broken setup. Placing the kernel outside of the 16MB window
effectively prevents you from using modules. Why do people come up
with stupid things like this. Please stop. Put such things at the
end of RAM instead and save the rest of the ARM community from this
madness.

2012-02-08 13:21:31

by Michal Simek

[permalink] [raw]
Subject: Re: CMA on arm from zero address

Hi Russell,

Russell King - ARM Linux wrote:
> On Wed, Feb 08, 2012 at 01:27:58PM +0100, Michal Simek wrote:
>> Hi,
>>
>> I would like to setup CMA space at the beginning of ram because
>> I want to use remoteproc to run code on the second cpu which has to
>> use addresses 0x0 - 32MB.
>>
>> I have changed textofs in arch/arm/Makefile but there is not possible
>> to setup all values which I would like to use.
>
> What a broken setup. Placing the kernel outside of the 16MB window
> effectively prevents you from using modules. Why do people come up
> with stupid things like this. Please stop. Put such things at the
> end of RAM instead and save the rest of the ARM community from this
> madness.

First of all I have found how to do it (by CONFIG_PHYS_OFFSET) so the problem is in QEMU.
Currently experimenting how to convince CMA to allocate that memory for my purpose.

That idea doesn't come from me!
The reason is that we want to run Linux on the first ARM core and the second cpu
will run any other RTOS. Linux remaps vectors to 0xffff0000 and the second
core has to use them at 0x0 address.
RTOS runs in real mode that's why I need to use ram at 0x0 address.

Michal

--
Michal Simek, Ing. (M.Eng)
w: http://www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/
Microblaze U-BOOT custodian

2012-02-08 13:26:36

by Russell King - ARM Linux

[permalink] [raw]
Subject: Re: CMA on arm from zero address

On Wed, Feb 08, 2012 at 02:21:26PM +0100, Michal Simek wrote:
> First of all I have found how to do it (by CONFIG_PHYS_OFFSET) so the
> problem is in QEMU.

So you're basically not telling the kernel about the first 32MB of memory.

> Currently experimenting how to convince CMA to allocate that memory for
> my purpose.

Which means it won't be part of the kernels normal memory map, and so
won't be in the page pool. So CMA won't be able to help.

Instead, just ignore the first 32MB of RAM, and map it like any other
peripheral to gain access to it. You might need to use ioremap_wc()
to avoid treating the memory as a 'device type' in ARMv6+.

2012-02-08 13:30:15

by Marek Szyprowski

[permalink] [raw]
Subject: RE: CMA on arm from zero address

Hello,

On Wednesday, February 08, 2012 2:21 PM Michal Simek wrote:

> Russell King - ARM Linux wrote:
> > On Wed, Feb 08, 2012 at 01:27:58PM +0100, Michal Simek wrote:
> >> Hi,
> >>
> >> I would like to setup CMA space at the beginning of ram because
> >> I want to use remoteproc to run code on the second cpu which has to
> >> use addresses 0x0 - 32MB.
> >>
> >> I have changed textofs in arch/arm/Makefile but there is not possible
> >> to setup all values which I would like to use.
> >
> > What a broken setup. Placing the kernel outside of the 16MB window
> > effectively prevents you from using modules. Why do people come up
> > with stupid things like this. Please stop. Put such things at the
> > end of RAM instead and save the rest of the ARM community from this
> > madness.
>
> First of all I have found how to do it (by CONFIG_PHYS_OFFSET) so the problem is in QEMU.
> Currently experimenting how to convince CMA to allocate that memory for my purpose.

I'm not sure if CMA is the right allocation api for this purpose. You should
better use memblock allocator to grab specific address ranges for your custom
setup. Alternatively you can compile Linux kernel to start physical memory
at 16MiB and access the 0-16MiB range with ioremap for example.

(snipped)

Best regards
--
Marek Szyprowski
Samsung Poland R&D Center

2012-02-10 10:16:01

by Michal Simek

[permalink] [raw]
Subject: Re: CMA on arm from zero address

Russell King - ARM Linux wrote:
> On Wed, Feb 08, 2012 at 02:21:26PM +0100, Michal Simek wrote:
>> First of all I have found how to do it (by CONFIG_PHYS_OFFSET) so the
>> problem is in QEMU.
>
> So you're basically not telling the kernel about the first 32MB of memory.

It is not a problem.

>
>> Currently experimenting how to convince CMA to allocate that memory for
>> my purpose.
>
> Which means it won't be part of the kernels normal memory map, and so
> won't be in the page pool. So CMA won't be able to help.
>
> Instead, just ignore the first 32MB of RAM, and map it like any other
> peripheral to gain access to it. You might need to use ioremap_wc()
> to avoid treating the memory as a 'device type' in ARMv6+.

I switched from cma to dma_declare_coherent_memory which does exactly what I wanted to
do.

Thanks,
Michal


--
Michal Simek, Ing. (M.Eng)
w: http://www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/
Microblaze U-BOOT custodian