On MIPS64 we define the default CAC_BASE as one of the xkphys regions of the virtual address space. Since the CCA is encoded in bits 61:59 of xkphys addresses, fixing CAC_BASE to any particular one prevents us from dynamically changing the CCA as we do for MIPS32 where CAC_BASE is placed within kseg0. In order to make the kernel more generic, drop the current kludge that gives CAC_BASE CCA=3 if CONFIG_DMA_NONCOHERENT is selected (disregarding CONFIG_DMA_MAYBE_COHERENT) & CCA=5 (which is not standardised by the architecture) otherwise. Instead read Config.K0 and generate the appropriate offset into xkphys, presuming that either the bootloader or early kernel code will have configured Config.K0 appropriately. This seems like the best option for a generic implementation. The ip27 spaces.h is adjusted to set its former value of CAC_BASE, since it's the only user of CAC_BASE from assembly (in its smp_slave_setup macro). This allows the generic case to focus solely on C code without breaking ip27. Signed-off-by: Paul Burton <paul.burton@imgtec.com> Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/14351/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
31 lines
915 B
C
31 lines
915 B
C
/*
|
|
* This file is subject to the terms and conditions of the GNU General Public
|
|
* License. See the file "COPYING" in the main directory of this archive
|
|
* for more details.
|
|
*
|
|
* Copyright (C) 1996, 99 Ralf Baechle
|
|
* Copyright (C) 2000, 2002 Maciej W. Rozycki
|
|
* Copyright (C) 1990, 1999 by Silicon Graphics, Inc.
|
|
*/
|
|
#ifndef _ASM_MACH_IP27_SPACES_H
|
|
#define _ASM_MACH_IP27_SPACES_H
|
|
|
|
/*
|
|
* IP27 uses the R10000's uncached attribute feature. Attribute 3 selects
|
|
* uncached memory addressing.
|
|
*/
|
|
|
|
#define HSPEC_BASE 0x9000000000000000
|
|
#define IO_BASE 0x9200000000000000
|
|
#define MSPEC_BASE 0x9400000000000000
|
|
#define UNCAC_BASE 0x9600000000000000
|
|
#define CAC_BASE 0xa800000000000000
|
|
|
|
#define TO_MSPEC(x) (MSPEC_BASE | ((x) & TO_PHYS_MASK))
|
|
#define TO_HSPEC(x) (HSPEC_BASE | ((x) & TO_PHYS_MASK))
|
|
|
|
#define HIGHMEM_START (~0UL)
|
|
|
|
#include <asm/mach-generic/spaces.h>
|
|
|
|
#endif /* _ASM_MACH_IP27_SPACES_H */
|