RE: [PATCH 1/4] ucc_geth: Change private immrbar_virt_to_phys to generic iopa
From: Li Yang-r58472 <hidden>
Date: 2007-02-08 06:46:54
Also in:
linuxppc-dev
-----Original Message----- From: Kumar Gala [mailto:galak@kernel.crashing.org] Sent: Thursday, February 08, 2007 1:58 PM To: Li Yang-r58472 Cc: Tabi Timur-B04825; netdev@vger.kernel.org; linuxppc-dev@ozlabs.org Subject: Re: [PATCH 1/4] ucc_geth: Change private immrbar_virt_to_phys
to generic
iopa On Feb 7, 2007, at 11:52 PM, Li Yang-r58472 wrote:quoted
quoted
-----Original Message----- From: Timur Tabi [mailto:timur@freescale.com] Sent: Thursday, February 08, 2007 1:03 AM To: Kumar Gala Cc: Li Yang-r58472; netdev@vger.kernel.org; linuxppc-dev@ozlabs.org Subject: Re: [PATCH 1/4] ucc_geth: Change private immrbar_virt_to_physto genericquoted
iopa Kumar Gala wrote:quoted
If its been mapped with ioremap() you know the physical addressalreadyquoted
quoted
so why do you need iopa().That's what the original function immrbar_virt_to_phys() does.
We're
quoted
trying toquoted
get rid of it, because we thought is redundant with iopa(). static inline unsigned long immrbar_virt_to_phys(volatile void *address)quoted
{ if ( ((u32)address >= (u32)qe_immr) && ((u32)address < ((u32)qe_immr + QE_IMMAP_SIZE)))quoted
return (unsigned long)(address - (u32)qe_immr + (u32)get_qe_base()); return (unsigned long)virt_to_phys(address); } get_qe_base() does a search of the OF tree the first time it's called. Here's the code that calls immrbar_virt_to_phys(): out_be32(&ugeth->p_send_q_mem_reg->sqqd[i].bd_ring_base, (u32) immrbar_virt_to_phys(ugeth-> p_tx_bd_ring[i])); Would it be better to replace this code with something like this: out_be32(&ugeth->p_send_q_mem_reg->sqqd[i].bd_ring_base, get_qe_base() + ((void *) ugeth->p_tx_bd_ring[i] - (void *)qe_immr)); No, we don't know if the BD ring is in MURAM or main memory as it is configurable. iopa() is best choice to handle both case, IMHO.Does MURAM behave differently than normal memory?
MURAM is a mmio region so it don't share the characteristic of main memory that phy_addr = virt_addr - PAGE_OFFSET. While they can both be mapped through page table using iopa(). - Leo