[U-Boot] [Patch V3 2/4] [MIPS] add mips64 support in mips head files
Daniel Schwierzeck
daniel.schwierzeck at gmail.com
Fri Aug 24 02:22:38 CEST 2012
2012/8/20 Zhizhou Zhang <etou.zh at gmail.com>:
> The most important difference between mips32 and mips64 is the address
> space. changes in addrspace.h and io.h are for this sake. And this patch
> add cache discribe struct in cache.h, and make compatible to mips64 of
> some types in posix_types.h.
> Signed-off-by: Zhizhou Zhang <etou.zh at gmail.com>
add a blank line between commit message and SoB tag
> ---
> arch/mips/include/asm/addrspace.h | 2 +-
> arch/mips/include/asm/cache.h | 21 +++++++++++++++++++++
> arch/mips/include/asm/io.h | 18 +++++++++++++++++-
> arch/mips/include/asm/posix_types.h | 12 +++++++++---
> 4 files changed, 48 insertions(+), 5 deletions(-)
>
> diff --git a/arch/mips/include/asm/addrspace.h b/arch/mips/include/asm/addrspace.h
> index 3a1e6d6..b768bb5 100644
> --- a/arch/mips/include/asm/addrspace.h
> +++ b/arch/mips/include/asm/addrspace.h
> @@ -136,7 +136,7 @@
> cannot access physical memory directly from core */
> #define UNCACHED_SDRAM(a) (((unsigned long)(a)) | 0x20000000)
> #else /* !CONFIG_SOC_AU1X00 */
> -#define UNCACHED_SDRAM(a) KSEG1ADDR(a)
> +#define UNCACHED_SDRAM(a) CKSEG1ADDR(a)
> #endif /* CONFIG_SOC_AU1X00 */
> #endif /* __ASSEMBLY__ */
>
> diff --git a/arch/mips/include/asm/cache.h b/arch/mips/include/asm/cache.h
> index 5406d5d..e41b9b4 100644
> --- a/arch/mips/include/asm/cache.h
> +++ b/arch/mips/include/asm/cache.h
> @@ -33,4 +33,25 @@
> #define ARCH_DMA_MINALIGN 128
> #endif
>
> +/*
> + * Descriptor for a cache
> + */
> +struct cache_desc {
> + unsigned int size; /* total size */
> + unsigned int waysize; /* Bytes per way */
> + unsigned short sets; /* Number of lines per set */
> + unsigned char ways; /* Number of ways */
> + unsigned char linesz; /* Size of line in bytes */
> +};
> +
> +#define cache_op(op,addr) \
> + __asm__ __volatile__( \
> + " .set push \n" \
> + " .set noreorder \n" \
> + " .set mips64\n\t \n" \
> + " cache %0, %1 \n" \
> + " .set pop \n" \
> + : \
> + : "i" (op), "R" (*(unsigned char *)(addr)))
> +
> #endif /* __MIPS_CACHE_H__ */
> diff --git a/arch/mips/include/asm/io.h b/arch/mips/include/asm/io.h
> index 025012a..1b82c61 100644
> --- a/arch/mips/include/asm/io.h
> +++ b/arch/mips/include/asm/io.h
> @@ -120,12 +120,20 @@ static inline void set_io_port_base(unsigned long base)
> */
> extern inline phys_addr_t virt_to_phys(volatile void * address)
> {
> +#ifndef CONFIG_64BIT
> return CPHYSADDR(address);
> +#else
> + return XPHYSADDR(address);
> +#endif
> }
>
> extern inline void * phys_to_virt(unsigned long address)
> {
> - return (void *)KSEG0ADDR(address);
> +#ifndef CONFIG_64BIT
> + return (void *)KSEG0ADDR(address);
> +#else
> + return (void *)CKSEG0ADDR(address);
> +#endif
> }
>
> /*
> @@ -133,12 +141,20 @@ extern inline void * phys_to_virt(unsigned long address)
> */
> extern inline unsigned long virt_to_bus(volatile void * address)
> {
> +#ifndef CONFIG_64BIT
> return CPHYSADDR(address);
> +#else
> + return XPHYSADDR(address);
> +#endif
> }
>
> extern inline void * bus_to_virt(unsigned long address)
> {
> +#ifndef CONFIG_64BIT
> return (void *)KSEG0ADDR(address);
> +#else
> + return (void *)CKSEG0ADDR(address);
> +#endif
> }
>
> /*
> diff --git a/arch/mips/include/asm/posix_types.h b/arch/mips/include/asm/posix_types.h
> index 879aae2..0da1dde 100644
> --- a/arch/mips/include/asm/posix_types.h
> +++ b/arch/mips/include/asm/posix_types.h
> @@ -24,9 +24,15 @@ typedef int __kernel_pid_t;
> typedef int __kernel_ipc_pid_t;
> typedef int __kernel_uid_t;
> typedef int __kernel_gid_t;
> -typedef unsigned int __kernel_size_t;
> -typedef int __kernel_ssize_t;
> -typedef int __kernel_ptrdiff_t;
> +#ifndef CONFIG_MIPS64
> + typedef unsigned int __kernel_size_t;
> + typedef int __kernel_ssize_t;
> + typedef int __kernel_ptrdiff_t;
> +#else
> +typedef unsigned long __kernel_size_t;
> +typedef long __kernel_ssize_t;
> +typedef long __kernel_ptrdiff_t;
> +#endif
> typedef long __kernel_time_t;
> typedef long __kernel_suseconds_t;
> typedef long __kernel_clock_t;
> --
> 1.7.9.5
>
--
Best regards,
Daniel
More information about the U-Boot
mailing list