[PATCH v2 04/13] MIPS: add virt_to_phys() and phys_to_virt()

Peter Mamonov pmamonov at gmail.com
Mon Aug 7 12:56:21 PDT 2017


Hi Oleksij,

On Mon, Aug 07, 2017 at 04:39:18PM +0200, Oleksij Rempel wrote:
> From: Antony Pavlov <antonynpavlov at gmail.com>
> 
> Signed-off-by: Antony Pavlov <antonynpavlov at gmail.com>
> Signed-off-by: Peter Mamonov <pmamonov at gmail.com>
> ---
>  arch/mips/include/asm/io.h | 35 +++++++++++++++++++++++++++++++++++
>  1 file changed, 35 insertions(+)
> 
> diff --git a/arch/mips/include/asm/io.h b/arch/mips/include/asm/io.h
> index 4bee5913a..993b30e2a 100644
> --- a/arch/mips/include/asm/io.h
> +++ b/arch/mips/include/asm/io.h
> @@ -12,11 +12,46 @@
>  
>  #include <linux/compiler.h>
>  #include <asm/types.h>
> +#include <asm/addrspace.h>
>  #include <asm/byteorder.h>
>  
>  void dma_flush_range(unsigned long, unsigned long);
>  void dma_inv_range(unsigned long, unsigned long);
>  
> +/*
> + *     virt_to_phys    -       map virtual addresses to physical
> + *     @address: address to remap
> + *
> + *     The returned physical address is the physical (CPU) mapping for
> + *     the memory address given. It is only valid to use this function on
> + *     addresses directly mapped or allocated via kmalloc.
> + *
> + *     This function does not give bus mappings for DMA transfers. In
> + *     almost all conceivable cases a device driver should not be using
> + *     this function
> + */
> +static inline unsigned long virt_to_phys(const void *address)
> +{
> +	return (unsigned long)address & 0x1fffffff;

Guess we can use CPHYSADDR() macros here, which is available in barebox.

> +}
> +
> +/*
> + *     phys_to_virt    -       map physical address to virtual
> + *     @address: address to remap
> + *
> + *     The returned virtual address is a current CPU mapping for
> + *     the memory address given. It is only valid to use this function on
> + *     addresses that have a kernel mapping
> + *
> + *     This function does not handle bus mappings for DMA transfers. In
> + *     almost all conceivable cases a device driver should not be using
> + *     this function
> + */
> +static inline void *phys_to_virt(unsigned long address)
> +{
> +	return (void *)(KSEG0 | (address & 0x1fffffff));

Same here: there is a CKSEG0ADDR() macros available in barebox.

> +}
> +
>  #define	IO_SPACE_LIMIT	0
>  
>  /*****************************************************************************/
> -- 
> 2.11.0
> 

Regards,
Peter



More information about the barebox mailing list