Hello,
Could you help me : I work on embedded Linux on a MPC885 processor
(PowerPC). On my embedded system, i have 2 different components of RAM.=
One
(name =3D DV, total size of 256 MB ) is only accessed by the processor,=
the
other (name =3D MC, size =3D 2MB on the top of the RAM) is also access =
by an
FPGA. I want to do data transferts between each others. For that, I hav=
e to
allocate a big structure on DV for a size of 36 MB.
- Could I do like that to have contiguous memory on DV ?
For MC, it would be more complicated : I have to map on the physical
adresses of MC (for example 1300 0000-13FF FFFF) in order to be sure th=
at
the memory will be really allocated on MC and not on DV (as there is en=
ough
place on DV).
- How can I do that ?
- Do I have to write a driver and use ioremap on the physical address o=
f MC
(with reserving the top of memory with 'mem=3D' at boot time) ? Can i u=
se
physical addresses with ioremap or is it only virtual addresses ?
I think i can reserve the memory early in boot via the bootmem allocato=
r
but i think it isn't with physical addresses only an amount of memory a=
nd
it's only forbdrivers directly linked in the kernel image and i want a=
module.
- Is there another solution to do that ?
Thank you really for your help.
Best regards.
----------------------------------------------------------
Sophie CARAYOL
TECHNOLOGIES & SYSTEMES
50 rue du Pr=E9sident Sadate
F - 29337 QUIMPER CEDEX
T=E9l: +33 2 98 10 30 06
mailto:scarayol@assystembrime.com
----------------------------------------------------------
=
Hello Sophie,
If you really need the 36MB block in DV to be a physically contiguous
memory block one possible simple solution would be to exclude both high
memory blocks from Linux at boot time with mem=3D220M on the cmdline.
Then you could write 2 simple mapping drivers for the DV and MC memory
blocks. This would allow you to map the 2 areas from user space and copy
data back and forth. The drivers you would write would not do ioremap()
but rather remap_page_range() in the implementation of the mmap()
function.
Now I am not sure if you want to use the PPC to transfer data between
the 2 areas or if you have some other hardware mean to do it. If so you
could also integrate this in your driver.
Now if you don't really care if the 36MB block is physically contiguous
(but only logically contiguous and physically scattered), you would
write only the MC driver part and use standard memory allocation for the
36MB block (with the drawback that you will not be necessarily sure to
be able to allocate such memory block as it would not be
pre-allocated/reserved and it depends if there is enough free space at
the allocation time. So pre-allocation at boot time could be your best
bet anyway).
Regards
JC
=20
On Thu, 2005-03-17 at 09:51 +0100, scarayol@assystembrime.com wrote:
Hello,
=20
Could you help me : I work on embedded Linux on a MPC885 processor
(PowerPC). On my embedded system, i have 2 different components of RAM. O=
ne
(name =3D DV, total size of 256 MB ) is only accessed by the processor, t=
he
other (name =3D MC, size =3D 2MB on the top of the RAM) is also access by=
an
FPGA. I want to do data transferts between each others. For that, I have =
to
allocate a big structure on DV for a size of 36 MB.
- Could I do like that to have contiguous memory on DV ?
For MC, it would be more complicated : I have to map on the physical
adresses of MC (for example 1300 0000-13FF FFFF) in order to be sure that
the memory will be really allocated on MC and not on DV (as there is enou=
gh
place on DV).
- How can I do that ?
- Do I have to write a driver and use ioremap on the physical address of =
MC
(with reserving the top of memory with 'mem=3D' at boot time) ? Can i use
physical addresses with ioremap or is it only virtual addresses ?
I think i can reserve the memory early in boot via the bootmem allocator
but i think it isn't with physical addresses only an amount of memory and
it's only forbdrivers directly linked in the kernel image and i want a
module.
- Is there another solution to do that ?
=20
Thank you really for your help.
=20
Best regards.
=20
----------------------------------------------------------
Sophie CARAYOL
=20
TECHNOLOGIES & SYSTEMES
50 rue du Pr=C3=A9sident Sadate
F - 29337 QUIMPER CEDEX
=20
T=C3=A9l: +33 2 98 10 30 06
mailto:scarayol@assystembrime.com
----------------------------------------------------------
=20
=20
_______________________________________________
Linuxppc-embedded mailing list
Linuxppc-embedded@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-embedded
On Thu, 2005-03-17 at 10:57 +0100, Jean-Christophe Dubois wrote:
Hello Sophie,
=20
If you really need the 36MB block in DV to be a physically contiguous
memory block one possible simple solution would be to exclude both high
memory blocks from Linux at boot time with mem=3D220M on the cmdline.
An alternate way is to integrate the bigphysarea patch (which uses
bootmem allocation) to your kernel. In this case you could reserve 36MB
of memory by providing "bigphysarea=3D37748736" on the command line. I
assume the MC memory will always be excluded from Linux main memory on
your platform.
see: http://ozlabs.org/pipermail/linuxppc64-dev/2005-March/003576.html
Note that this patch doesn't provide you with mapping capabilities from
user space so you would still have to write some kind of mapping driver
using the bigphysarea allocator if you want/need your application to get
at it.
JC
=20
On Thu, 2005-03-17 at 09:51 +0100, scarayol@assystembrime.com wrote:
quoted
Hello,
=20
Could you help me : I work on embedded Linux on a MPC885 processor
(PowerPC). On my embedded system, i have 2 different components of RAM.=
One
quoted
(name =3D DV, total size of 256 MB ) is only accessed by the processor,=
the
quoted
other (name =3D MC, size =3D 2MB on the top of the RAM) is also access =
by an
quoted
FPGA. I want to do data transferts between each others. For that, I hav=
e to
quoted
allocate a big structure on DV for a size of 36 MB.
- Could I do like that to have contiguous memory on DV ?
For MC, it would be more complicated : I have to map on the physical
adresses of MC (for example 1300 0000-13FF FFFF) in order to be sure th=
at
quoted
the memory will be really allocated on MC and not on DV (as there is en=
ough
quoted
place on DV).
- How can I do that ?
- Do I have to write a driver and use ioremap on the physical address o=
f MC
quoted
(with reserving the top of memory with 'mem=3D' at boot time) ? Can i u=
se
quoted
physical addresses with ioremap or is it only virtual addresses ?
I think i can reserve the memory early in boot via the bootmem allocato=
r
quoted
but i think it isn't with physical addresses only an amount of memory a=
nd
quoted
it's only forbdrivers directly linked in the kernel image and i want a
module.
- Is there another solution to do that ?
=20
Thank you really for your help.
=20
Best regards.
=20
----------------------------------------------------------
Sophie CARAYOL
=20
TECHNOLOGIES & SYSTEMES
50 rue du Pr=C3=A9sident Sadate
F - 29337 QUIMPER CEDEX
=20
T=C3=A9l: +33 2 98 10 30 06
mailto:scarayol@assystembrime.com
----------------------------------------------------------
=20
=20
_______________________________________________
Linuxppc-embedded mailing list
Linuxppc-embedded@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-embedded
=20
_______________________________________________
Linuxppc-embedded mailing list
Linuxppc-embedded@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-embedded