RE: Linuxppc-embedded Digest, Vol 35, Issue 33

6 messages, 3 authors, 2007-07-17 · open the first message on its own page

RE: Linuxppc-embedded Digest, Vol 35, Issue 33

From: Siva Prasad <hidden>
Date: 2007-07-16 16:00:46


It returns kernel virtual address. If you use this buffer space for DMA,
please use appropriate flags. You may use __pa(address) or
virt_to_phys() to convert virtual to physical.

- Siva


-----Original Message-----


Message: 3
Date: Mon, 16 Jul 2007 19:29:59 +0530
From: "suresh suresh" <redacted>
Subject: Kmalloc returns which address
To: linuxppc-embedded@ozlabs.org
Message-ID:
	[off-list ref]
Content-Type: text/plain; charset=3D"iso-8859-1"

Hi,

I am porting MPC8280 driver from vxWorks to Linux.

I want know the address return by kmalloc function? is it physical
address
or kernel virtual address.

For Tx and Rx, hardware uses buffers, so I have to allocate buffers and
pass
the pointer to hardware. Can I pass the pointer returned kmalloc?  or  I
should convert it into physical address?

If it returns kernel virtual address, then how to convert into physical?

Thanks & Regards-
Suresh
-------------- next part --------------

Re: Linuxppc-embedded Digest, Vol 35, Issue 33

From: Scott Wood <hidden>
Date: 2007-07-16 16:09:18

Siva Prasad wrote:
It returns kernel virtual address. If you use this buffer space for DMA,
please use appropriate flags. You may use __pa(address) or
virt_to_phys() to convert virtual to physical.
No, you may not -- physical and DMA addresses are not always identical. 
  Use the DMA mapping API.

-Scott

Re: Linuxppc-embedded Digest, Vol 35, Issue 33

From: suresh suresh <hidden>
Date: 2007-07-17 05:59:05

Thanks....

MPC8280 has internal memory space which contains Dualport(Dp) RAM. In the
DpRAM we allocate some tables and these has to store pointer of the buffers
which are allocated in external memory. Core will use this pointer to access
the buffers, basically these buffers are used for DMA.

Using IMMR register we can get physical address of the internal memory. Now
can I store the address return by the kmalloc() function? or I should
convert it into physical?

Please help me how to resove this address translation.


Regards,
Suresh

On 7/16/07, Scott Wood [off-list ref] wrote:
Siva Prasad wrote:
quoted
It returns kernel virtual address. If you use this buffer space for DMA,
please use appropriate flags. You may use __pa(address) or
virt_to_phys() to convert virtual to physical.
No, you may not -- physical and DMA addresses are not always identical.
  Use the DMA mapping API.

-Scott

Re: Linuxppc-embedded Digest, Vol 35, Issue 33

From: Scott Wood <hidden>
Date: 2007-07-17 16:04:27

suresh suresh wrote:
MPC8280 has internal memory space which contains Dualport(Dp) RAM. In the
DpRAM we allocate some tables and these has to store pointer of the buffers
which are allocated in external memory. Core will use this pointer to 
access
the buffers, basically these buffers are used for DMA.

Using IMMR register we can get physical address of the internal memory. Now
can I store the address return by the kmalloc() function? or I should
convert it into physical?
Yes, you need to convert it to physical.  As I said earlier, use the DMA 
mapping API (described in Documentation/DMA-mapping.txt) to do so. 
Specifically, look at the dma_map_single() function.

-Scott

RE: Linuxppc-embedded Digest, Vol 35, Issue 33

From: Siva Prasad <hidden>
Date: 2007-07-17 22:43:07

Well!... you can manage any way you want.

 

1) You can store the virtual address in the DpRAM, and convert to
physical (should I say DMA mapped address) and then pass it on to the
device under consideration here.

 

2) Other way would be... store the physical address in DpRAM. Use that
address for the device, and convert to virtual before you use it in the
code.

 

My preference is for first option.

 

- Siva

 

 

________________________________

From: suresh suresh [mailto:sureshtang@gmail.com] 
Sent: Monday, July 16, 2007 10:59 PM
To: Scott Wood
Cc: Siva Prasad; linuxppc-embedded@ozlabs.org
Subject: Re: Linuxppc-embedded Digest, Vol 35, Issue 33

 

Thanks....

MPC8280 has internal memory space which contains Dualport(Dp) RAM. In
the DpRAM we allocate some tables and these has to store pointer of the
buffers which are allocated in external memory. Core will use this
pointer to access the buffers, basically these buffers are used for DMA.

Using IMMR register we can get physical address of the internal memory.
Now can I store the address return by the kmalloc() function? or I
should convert it into physical?

Please help me how to resove this address translation.


Regards,
Suresh

On 7/16/07, Scott Wood [off-list ref] wrote:

Siva Prasad wrote:
It returns kernel virtual address. If you use this buffer space for
DMA,
please use appropriate flags. You may use __pa(address) or
virt_to_phys() to convert virtual to physical. 
No, you may not -- physical and DMA addresses are not always identical.
  Use the DMA mapping API.

-Scott

 

Re: Linuxppc-embedded Digest, Vol 35, Issue 33

From: Scott Wood <hidden>
Date: 2007-07-17 22:55:44

Siva Prasad wrote:
Well!... you can manage any way you want.

 

1) You can store the virtual address in the DpRAM, and convert to
physical (should I say DMA mapped address) and then pass it on to the
device under consideration here.
The DPRAM is read directly by the microcode (if it didn't, you'd just be 
using RAM).  You don't want to put virtual addresses in there.

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