From: Carsten Langgaard <carstenl@mips.com>
To: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
Cc: Ralf Baechle <ralf@uni-koblenz.de>,
linux-mips@fnet.fr, linux-mips@oss.sgi.com
Subject: Re: [update] [patch] linux: Cache coherency fixes
Date: Mon, 29 Jul 2002 16:48:59 +0200 [thread overview]
Message-ID: <3D4555D3.615B3B1A@mips.com> (raw)
In-Reply-To: Pine.GSO.3.96.1020729161214.22288H-100000@delta.ds2.pg.gda.pl
I was just about to send Ralf a patch regarding the default caching policy in <asm-mips64/pgtable.h>
I was taking a little easier road, though. But your patch definitely look better than mine.
/Carsten
"Maciej W. Rozycki" wrote:
> Hello,
>
> The following patch fixes all the places the default caching policy is
> used but various local hacks are coded. Also the sc coherency algorithm
> is configured for R4k processors which was previously left as set (or not)
> by the firmware. A side effect is <asm-mips64/pgtable-bits.h> is created
> and all conditional CPU options are set somehow. Tested on an R4400SC
> (for both MIPS and MIPS64) and on an R3400.
>
> Admittedly, CONF_CM_DEFAULT is defined in a bit weird way, but I couldn't
> figure any better one that wouldn't result in a serious but unnecessary
> header bloat. If anyone has a better idea, please share any suggestions
> here.
>
> OK to apply?
>
> Maciej
>
> --
> + Maciej W. Rozycki, Technical University of Gdansk, Poland +
> +--------------------------------------------------------------+
> + e-mail: macro@ds2.pg.gda.pl, PGP key available +
>
> patch-mips-2.4.19-rc1-20020726-cache-coherency-5
> diff -up --recursive --new-file linux-mips-2.4.19-rc1-20020726.macro/arch/mips/config-shared.in linux-mips-2.4.19-rc1-20020726/arch/mips/config-shared.in
> --- linux-mips-2.4.19-rc1-20020726.macro/arch/mips/config-shared.in 2002-07-25 20:11:36.000000000 +0000
> +++ linux-mips-2.4.19-rc1-20020726/arch/mips/config-shared.in 2002-07-27 22:14:21.000000000 +0000
> @@ -403,6 +403,10 @@ fi
> if [ "$CONFIG_MIPS_AU1000" != "y" ]; then
> define_bool CONFIG_MIPS_AU1000 n
> fi
> +
> +if [ "$CONFIG_SMP" != "y" ]; then
> + define_bool CONFIG_SMP n
> +fi
> endmenu
>
> mainmenu_option next_comment
> @@ -492,6 +496,17 @@ if [ "$CONFIG_CPU_R3000" = "y" ]; then
> else
> define_bool CONFIG_CPU_HAS_SYNC y
> fi
> +if [ "$CONFIG_CPU_R4X00" = "y" -o "$CONFIG_CPU_SB1" = "y" ]; then
> + define_bool CONFIG_CPU_CACHE_COHERENCY $CONFIG_SMP
> +else
> + define_bool CONFIG_CPU_CACHE_COHERENCY n
> +fi
> +if [ "$CONFIG_VTAG_ICACHE" != "y" ]; then
> + define_bool CONFIG_VTAG_ICACHE n
> +fi
> +if [ "$CONFIG_CPU_HAS_PREFETCH" != "y" ]; then
> + define_bool CONFIG_CPU_HAS_PREFETCH n
> +fi
> endmenu
>
> mainmenu_option next_comment
> diff -up --recursive --new-file linux-mips-2.4.19-rc1-20020726.macro/arch/mips/mm/c-mips32.c linux-mips-2.4.19-rc1-20020726/arch/mips/mm/c-mips32.c
> --- linux-mips-2.4.19-rc1-20020726.macro/arch/mips/mm/c-mips32.c 2002-05-30 02:57:43.000000000 +0000
> +++ linux-mips-2.4.19-rc1-20020726/arch/mips/mm/c-mips32.c 2002-07-27 22:59:42.000000000 +0000
> @@ -657,11 +657,7 @@ void __init ld_mmu_mips32(void)
> {
> unsigned long config = read_32bit_cp0_register(CP0_CONFIG);
>
> -#ifdef CONFIG_MIPS_UNCACHED
> - change_cp0_config(CONF_CM_CMASK, CONF_CM_UNCACHED);
> -#else
> - change_cp0_config(CONF_CM_CMASK, CONF_CM_CACHABLE_NONCOHERENT);
> -#endif
> + change_cp0_config(CONF_CM_CMASK, CONF_CM_DEFAULT);
>
> probe_icache(config);
> probe_dcache(config);
> diff -up --recursive --new-file linux-mips-2.4.19-rc1-20020726.macro/arch/mips/mm/c-r4k.c linux-mips-2.4.19-rc1-20020726/arch/mips/mm/c-r4k.c
> --- linux-mips-2.4.19-rc1-20020726.macro/arch/mips/mm/c-r4k.c 2002-07-15 02:57:47.000000000 +0000
> +++ linux-mips-2.4.19-rc1-20020726/arch/mips/mm/c-r4k.c 2002-07-27 22:59:22.000000000 +0000
> @@ -1480,11 +1480,7 @@ void __init ld_mmu_r4xx0(void)
> {
> unsigned long config = read_32bit_cp0_register(CP0_CONFIG);
>
> -#ifdef CONFIG_MIPS_UNCACHED
> - change_cp0_config(CONF_CM_CMASK, CONF_CM_UNCACHED);
> -#else
> - change_cp0_config(CONF_CM_CMASK, CONF_CM_CACHABLE_NONCOHERENT);
> -#endif
> + change_cp0_config(CONF_CM_CMASK | CONF_CU, CONF_CM_DEFAULT);
>
> probe_icache(config);
> probe_dcache(config);
> diff -up --recursive --new-file linux-mips-2.4.19-rc1-20020726.macro/arch/mips/mm/c-r5432.c linux-mips-2.4.19-rc1-20020726/arch/mips/mm/c-r5432.c
> --- linux-mips-2.4.19-rc1-20020726.macro/arch/mips/mm/c-r5432.c 2001-12-01 05:26:01.000000000 +0000
> +++ linux-mips-2.4.19-rc1-20020726/arch/mips/mm/c-r5432.c 2002-07-27 23:01:23.000000000 +0000
> @@ -455,7 +455,7 @@ void __init ld_mmu_r5432(void)
> {
> unsigned long config = read_32bit_cp0_register(CP0_CONFIG);
>
> - change_cp0_config(CONF_CM_CMASK, CONF_CM_CACHABLE_NONCOHERENT);
> + change_cp0_config(CONF_CM_CMASK, CONF_CM_DEFAULT);
>
> probe_icache(config);
> probe_dcache(config);
> diff -up --recursive --new-file linux-mips-2.4.19-rc1-20020726.macro/arch/mips/mm/c-rm7k.c linux-mips-2.4.19-rc1-20020726/arch/mips/mm/c-rm7k.c
> --- linux-mips-2.4.19-rc1-20020726.macro/arch/mips/mm/c-rm7k.c 2002-05-30 02:57:46.000000000 +0000
> +++ linux-mips-2.4.19-rc1-20020726/arch/mips/mm/c-rm7k.c 2002-07-27 23:02:21.000000000 +0000
> @@ -319,9 +319,7 @@ void __init ld_mmu_rm7k(void)
> : "r" (addr), "i" (Index_Store_Tag_I), "i" (Fill));
> }
>
> -#ifndef CONFIG_MIPS_UNCACHED
> - change_cp0_config(CONF_CM_CMASK, CONF_CM_CACHABLE_NONCOHERENT);
> -#endif
> + change_cp0_config(CONF_CM_CMASK, CONF_CM_DEFAULT);
>
> probe_icache(config);
> probe_dcache(config);
> diff -up --recursive --new-file linux-mips-2.4.19-rc1-20020726.macro/arch/mips/mm/c-sb1.c linux-mips-2.4.19-rc1-20020726/arch/mips/mm/c-sb1.c
> --- linux-mips-2.4.19-rc1-20020726.macro/arch/mips/mm/c-sb1.c 2002-05-30 02:57:46.000000000 +0000
> +++ linux-mips-2.4.19-rc1-20020726/arch/mips/mm/c-sb1.c 2002-07-27 23:04:17.000000000 +0000
> @@ -519,6 +519,6 @@ void ld_mmu_sb1(void)
> _flush_cache_sigtramp = sb1_flush_cache_sigtramp;
> _flush_icache_all = sb1_flush_icache_all;
>
> - change_cp0_config(CONF_CM_CMASK, CONF_CM_CACHABLE_COW);
> + change_cp0_config(CONF_CM_CMASK, CONF_CM_DEFAULT);
> flush_cache_all();
> }
> diff -up --recursive --new-file linux-mips-2.4.19-rc1-20020726.macro/arch/mips/mm/c-tx49.c linux-mips-2.4.19-rc1-20020726/arch/mips/mm/c-tx49.c
> --- linux-mips-2.4.19-rc1-20020726.macro/arch/mips/mm/c-tx49.c 2002-05-30 02:57:46.000000000 +0000
> +++ linux-mips-2.4.19-rc1-20020726/arch/mips/mm/c-tx49.c 2002-07-27 23:05:01.000000000 +0000
> @@ -387,11 +387,7 @@ void __init ld_mmu_tx49(void)
> if (mips_configk0 != -1)
> change_cp0_config(CONF_CM_CMASK, mips_configk0);
> else
> -#ifdef CONFIG_MIPS_UNCACHED
> - change_cp0_config(CONF_CM_CMASK, CONF_CM_UNCACHED);
> -#else
> - change_cp0_config(CONF_CM_CMASK, CONF_CM_CACHABLE_NONCOHERENT);
> -#endif
> + change_cp0_config(CONF_CM_CMASK, CONF_CM_DEFAULT);
>
> probe_icache(config);
> probe_dcache(config);
> diff -up --recursive --new-file linux-mips-2.4.19-rc1-20020726.macro/arch/mips64/mm/c-mips64.c linux-mips-2.4.19-rc1-20020726/arch/mips64/mm/c-mips64.c
> --- linux-mips-2.4.19-rc1-20020726.macro/arch/mips64/mm/c-mips64.c 2002-07-24 16:12:11.000000000 +0000
> +++ linux-mips-2.4.19-rc1-20020726/arch/mips64/mm/c-mips64.c 2002-07-27 23:07:05.000000000 +0000
> @@ -654,11 +654,7 @@ void __init ld_mmu_mips64(void)
> {
> unsigned long config = read_32bit_cp0_register(CP0_CONFIG);
>
> -#ifdef CONFIG_MIPS_UNCACHED
> - change_cp0_config(CONF_CM_CMASK, CONF_CM_UNCACHED);
> -#else
> - change_cp0_config(CONF_CM_CMASK, CONF_CM_CACHABLE_NONCOHERENT);
> -#endif
> + change_cp0_config(CONF_CM_CMASK, CONF_CM_DEFAULT);
>
> probe_icache(config);
> probe_dcache(config);
> diff -up --recursive --new-file linux-mips-2.4.19-rc1-20020726.macro/arch/mips64/mm/c-sb1.c linux-mips-2.4.19-rc1-20020726/arch/mips64/mm/c-sb1.c
> --- linux-mips-2.4.19-rc1-20020726.macro/arch/mips64/mm/c-sb1.c 2002-05-30 02:57:51.000000000 +0000
> +++ linux-mips-2.4.19-rc1-20020726/arch/mips64/mm/c-sb1.c 2002-07-27 23:07:42.000000000 +0000
> @@ -518,6 +518,6 @@ void ld_mmu_sb1(void)
> _flush_cache_sigtramp = sb1_flush_cache_sigtramp;
> _flush_icache_all = sb1_flush_icache_all;
>
> - change_cp0_config(CONF_CM_CMASK, CONF_CM_CACHABLE_COW);
> + change_cp0_config(CONF_CM_CMASK, CONF_CM_DEFAULT);
> flush_cache_all();
> }
> diff -up --recursive --new-file linux-mips-2.4.19-rc1-20020726.macro/arch/mips64/mm/r4xx0.c linux-mips-2.4.19-rc1-20020726/arch/mips64/mm/r4xx0.c
> --- linux-mips-2.4.19-rc1-20020726.macro/arch/mips64/mm/r4xx0.c 2002-06-20 02:57:39.000000000 +0000
> +++ linux-mips-2.4.19-rc1-20020726/arch/mips64/mm/r4xx0.c 2002-07-27 23:09:09.000000000 +0000
> @@ -2268,11 +2268,7 @@ void __init ld_mmu_r4xx0(void)
> {
> unsigned long config = read_32bit_cp0_register(CP0_CONFIG);
>
> -#ifdef CONFIG_MIPS_UNCACHED
> - change_cp0_config(CONF_CM_CMASK, CONF_CM_UNCACHED);
> -#else
> - change_cp0_config(CONF_CM_CMASK, CONF_CM_CACHABLE_NONCOHERENT);
> -#endif /* UNCACHED */
> + change_cp0_config(CONF_CM_CMASK | CONF_CU, CONF_CM_DEFAULT);
>
> probe_icache(config);
> probe_dcache(config);
> diff -up --recursive --new-file linux-mips-2.4.19-rc1-20020726.macro/include/asm-mips/mipsregs.h linux-mips-2.4.19-rc1-20020726/include/asm-mips/mipsregs.h
> --- linux-mips-2.4.19-rc1-20020726.macro/include/asm-mips/mipsregs.h 2002-07-21 19:21:19.000000000 +0000
> +++ linux-mips-2.4.19-rc1-20020726/include/asm-mips/mipsregs.h 2002-07-27 22:57:03.000000000 +0000
> @@ -374,6 +374,7 @@
> #define CONF_CM_CACHABLE_CUW 6
> #define CONF_CM_CACHABLE_ACCELERATED 7
> #define CONF_CM_CMASK 7
> +#define CONF_CU (1 << 3)
> #define CONF_DB (1 << 4)
> #define CONF_IB (1 << 5)
> #define CONF_SC (1 << 17)
> diff -up --recursive --new-file linux-mips-2.4.19-rc1-20020726.macro/include/asm-mips/pgtable-bits.h linux-mips-2.4.19-rc1-20020726/include/asm-mips/pgtable-bits.h
> --- linux-mips-2.4.19-rc1-20020726.macro/include/asm-mips/pgtable-bits.h 2002-06-30 17:18:30.000000000 +0000
> +++ linux-mips-2.4.19-rc1-20020726/include/asm-mips/pgtable-bits.h 2002-07-27 23:00:05.000000000 +0000
> @@ -12,7 +12,8 @@
>
> #include <linux/config.h>
>
> -/* Note that we shift the lower 32bits of each EntryLo[01] entry
> +/*
> + * Note that we shift the lower 32bits of each EntryLo[01] entry
> * 6 bits to the left. That way we can convert the PFN into the
> * physical address by a single 'and' operation and gain 6 additional
> * bits for storing information which isn't present in a normal
> @@ -74,9 +75,9 @@
> #define _CACHE_CACHABLE_WA (1<<9) /* R4600 only */
> #define _CACHE_UNCACHED (2<<9) /* R4[0246]00 */
> #define _CACHE_CACHABLE_NONCOHERENT (3<<9) /* R4[0246]00 */
> -#define _CACHE_CACHABLE_CE (4<<9) /* R4[04]00 only */
> -#define _CACHE_CACHABLE_COW (5<<9) /* R4[04]00 only */
> -#define _CACHE_CACHABLE_CUW (6<<9) /* R4[04]00 only */
> +#define _CACHE_CACHABLE_CE (4<<9) /* R4[04]00MC only */
> +#define _CACHE_CACHABLE_COW (5<<9) /* R4[04]00MC only */
> +#define _CACHE_CACHABLE_CUW (6<<9) /* R4[04]00MC only */
> #define _CACHE_UNCACHED_ACCELERATED (7<<9) /* R10000 only */
>
> #endif
> @@ -87,12 +88,21 @@
>
> #define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_MODIFIED | _CACHE_MASK)
>
> -#ifdef CONFIG_MIPS_UNCACHED
> +
> +#if defined(CONFIG_MIPS_UNCACHED)
> +
> #define PAGE_CACHABLE_DEFAULT _CACHE_UNCACHED
> -#elif CONFIG_CPU_SB1
> +
> +#elif defined(CONFIG_CPU_CACHE_COHERENCY)
> +
> #define PAGE_CACHABLE_DEFAULT _CACHE_CACHABLE_COW
> +
> #else
> +
> #define PAGE_CACHABLE_DEFAULT _CACHE_CACHABLE_NONCOHERENT
> +
> #endif
>
> +#define CONF_CM_DEFAULT (PAGE_CACHABLE_DEFAULT >> 9)
> +
> #endif /* _ASM_CACHINGMODES_H */
> diff -up --recursive --new-file linux-mips-2.4.19-rc1-20020726.macro/include/asm-mips64/mipsregs.h linux-mips-2.4.19-rc1-20020726/include/asm-mips64/mipsregs.h
> --- linux-mips-2.4.19-rc1-20020726.macro/include/asm-mips64/mipsregs.h 2002-06-29 03:02:05.000000000 +0000
> +++ linux-mips-2.4.19-rc1-20020726/include/asm-mips64/mipsregs.h 2002-07-27 22:57:22.000000000 +0000
> @@ -374,6 +374,7 @@
> #define CONF_CM_CACHABLE_CUW 6
> #define CONF_CM_CACHABLE_ACCELERATED 7
> #define CONF_CM_CMASK 7
> +#define CONF_CU (1 << 3)
> #define CONF_DB (1 << 4)
> #define CONF_IB (1 << 5)
> #define CONF_SC (1 << 17)
> diff -up --recursive --new-file linux-mips-2.4.19-rc1-20020726.macro/include/asm-mips64/pgtable-bits.h linux-mips-2.4.19-rc1-20020726/include/asm-mips64/pgtable-bits.h
> --- linux-mips-2.4.19-rc1-20020726.macro/include/asm-mips64/pgtable-bits.h 1970-01-01 00:00:00.000000000 +0000
> +++ linux-mips-2.4.19-rc1-20020726/include/asm-mips64/pgtable-bits.h 2002-07-27 23:00:24.000000000 +0000
> @@ -0,0 +1,79 @@
> +/*
> + * 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) 1994 - 2001 by Ralf Baechle at alii
> + * Copyright (C) 1999, 2000, 2001 Silicon Graphics, Inc.
> + * Copyright (C) 2002 Maciej W. Rozycki
> + */
> +#ifndef __ASM_MIPS64_PGTABLE_BITS_H
> +#define __ASM_MIPS64_PGTABLE_BITS_H
> +
> +#include <linux/config.h>
> +
> +/*
> + * Note that we shift the lower 32bits of each EntryLo[01] entry
> + * 6 bits to the left. That way we can convert the PFN into the
> + * physical address by a single 'and' operation and gain 6 additional
> + * bits for storing information which isn't present in a normal
> + * MIPS page table.
> + *
> + * Similar to the Alpha port, we need to keep track of the ref
> + * and mod bits in software. We have a software "yeah you can read
> + * from this page" bit, and a hardware one which actually lets the
> + * process read from the page. On the same token we have a software
> + * writable bit and the real hardware one which actually lets the
> + * process write to the page, this keeps a mod bit via the hardware
> + * dirty bit.
> + *
> + * Certain revisions of the R4000 and R5000 have a bug where if a
> + * certain sequence occurs in the last 3 instructions of an executable
> + * page, and the following page is not mapped, the cpu can do
> + * unpredictable things. The code (when it is written) to deal with
> + * this problem will be in the update_mmu_cache() code for the r4k.
> + */
> +#define _PAGE_PRESENT (1<<0) /* implemented in software */
> +#define _PAGE_READ (1<<1) /* implemented in software */
> +#define _PAGE_WRITE (1<<2) /* implemented in software */
> +#define _PAGE_ACCESSED (1<<3) /* implemented in software */
> +#define _PAGE_MODIFIED (1<<4) /* implemented in software */
> +#define _PAGE_R4KBUG (1<<5) /* workaround for r4k bug */
> +#define _PAGE_GLOBAL (1<<6)
> +#define _PAGE_VALID (1<<7)
> +#define _PAGE_SILENT_READ (1<<7) /* synonym */
> +#define _PAGE_DIRTY (1<<8) /* The MIPS dirty bit */
> +#define _PAGE_SILENT_WRITE (1<<8)
> +#define _CACHE_CACHABLE_NO_WA (0<<9) /* R4600 only */
> +#define _CACHE_CACHABLE_WA (1<<9) /* R4600 only */
> +#define _CACHE_UNCACHED (2<<9) /* R4[0246]00 */
> +#define _CACHE_CACHABLE_NONCOHERENT (3<<9) /* R4[0246]00 */
> +#define _CACHE_CACHABLE_CE (4<<9) /* R4[04]00MC only */
> +#define _CACHE_CACHABLE_COW (5<<9) /* R4[04]00MC only */
> +#define _CACHE_CACHABLE_CUW (6<<9) /* R4[04]00MC only */
> +#define _CACHE_UNCACHED_ACCELERATED (7<<9) /* R10000 only */
> +#define _CACHE_MASK (7<<9)
> +
> +#define __READABLE (_PAGE_READ | _PAGE_SILENT_READ | _PAGE_ACCESSED)
> +#define __WRITEABLE (_PAGE_WRITE | _PAGE_SILENT_WRITE | _PAGE_MODIFIED)
> +
> +#define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_MODIFIED | _CACHE_MASK)
> +
> +
> +#if defined(CONFIG_MIPS_UNCACHED)
> +
> +#define PAGE_CACHABLE_DEFAULT _CACHE_UNCACHED
> +
> +#elif defined(CONFIG_CPU_CACHE_COHERENCY)
> +
> +#define PAGE_CACHABLE_DEFAULT _CACHE_CACHABLE_COW
> +
> +#else
> +
> +#define PAGE_CACHABLE_DEFAULT _CACHE_CACHABLE_NONCOHERENT
> +
> +#endif
> +
> +#define CONF_CM_DEFAULT (PAGE_CACHABLE_DEFAULT >> 9)
> +
> +#endif /* __ASM_MIPS64_PGTABLE_BITS_H */
> diff -up --recursive --new-file linux-mips-2.4.19-rc1-20020726.macro/include/asm-mips64/pgtable.h linux-mips-2.4.19-rc1-20020726/include/asm-mips64/pgtable.h
> --- linux-mips-2.4.19-rc1-20020726.macro/include/asm-mips64/pgtable.h 2002-07-08 16:46:37.000000000 +0000
> +++ linux-mips-2.4.19-rc1-20020726/include/asm-mips64/pgtable.h 2002-07-27 23:31:48.000000000 +0000
> @@ -155,64 +155,9 @@ extern void (*_flush_icache_page)(struct
> #define VMALLOC_END \
> (VMALLOC_START + ((1 << PGD_ORDER) * PTRS_PER_PTE * PAGE_SIZE))
>
> -/*
> - * Note that we shift the lower 32bits of each EntryLo[01] entry
> - * 6 bits to the left. That way we can convert the PFN into the
> - * physical address by a single 'and' operation and gain 6 additional
> - * bits for storing information which isn't present in a normal
> - * MIPS page table.
> - *
> - * Similar to the Alpha port, we need to keep track of the ref
> - * and mod bits in software. We have a software "yeah you can read
> - * from this page" bit, and a hardware one which actually lets the
> - * process read from the page. On the same token we have a software
> - * writable bit and the real hardware one which actually lets the
> - * process write to the page, this keeps a mod bit via the hardware
> - * dirty bit.
> - *
> - * Certain revisions of the R4000 and R5000 have a bug where if a
> - * certain sequence occurs in the last 3 instructions of an executable
> - * page, and the following page is not mapped, the cpu can do
> - * unpredictable things. The code (when it is written) to deal with
> - * this problem will be in the update_mmu_cache() code for the r4k.
> - */
> -#define _PAGE_PRESENT (1<<0) /* implemented in software */
> -#define _PAGE_READ (1<<1) /* implemented in software */
> -#define _PAGE_WRITE (1<<2) /* implemented in software */
> -#define _PAGE_ACCESSED (1<<3) /* implemented in software */
> -#define _PAGE_MODIFIED (1<<4) /* implemented in software */
> -#define _PAGE_R4KBUG (1<<5) /* workaround for r4k bug */
> -#define _PAGE_GLOBAL (1<<6)
> -#define _PAGE_VALID (1<<7)
> -#define _PAGE_SILENT_READ (1<<7) /* synonym */
> -#define _PAGE_DIRTY (1<<8) /* The MIPS dirty bit */
> -#define _PAGE_SILENT_WRITE (1<<8)
> -#define _CACHE_CACHABLE_NO_WA (0<<9) /* R4600 only */
> -#define _CACHE_CACHABLE_WA (1<<9) /* R4600 only */
> -#define _CACHE_UNCACHED (2<<9) /* R4[0246]00 */
> -#define _CACHE_CACHABLE_NONCOHERENT (3<<9) /* R4[0246]00 */
> -#define _CACHE_CACHABLE_CE (4<<9) /* R4[04]00 only */
> -#define _CACHE_CACHABLE_COW (5<<9) /* R4[04]00 only */
> -#define _CACHE_CACHABLE_CUW (6<<9) /* R4[04]00 only */
> -#define _CACHE_UNCACHED_ACCELERATED (7<<9) /* R10000 only */
> -#define _CACHE_MASK (7<<9)
> -
> -#define __READABLE (_PAGE_READ | _PAGE_SILENT_READ | _PAGE_ACCESSED)
> -#define __WRITEABLE (_PAGE_WRITE | _PAGE_SILENT_WRITE | _PAGE_MODIFIED)
> -
> -#define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_MODIFIED | _CACHE_MASK)
> -
> -#ifdef CONFIG_MIPS_UNCACHED
> -#define PAGE_CACHABLE_DEFAULT _CACHE_UNCACHED
> -#else /* ! UNCACHED */
> -#ifdef CONFIG_SGI_IP22
> -#define PAGE_CACHABLE_DEFAULT _CACHE_CACHABLE_NONCOHERENT
> -#else /* ! IP22 */
> -#define PAGE_CACHABLE_DEFAULT _CACHE_CACHABLE_COW
> -#endif /* IP22 */
> -#endif /* UNCACHED */
> +#include <asm/pgtable-bits.h>
>
> -#define PAGE_NONE __pgprot(_PAGE_PRESENT | PAGE_CACHABLE_DEFAULT)
> +#define PAGE_NONE __pgprot(_PAGE_PRESENT | _CACHE_CACHABLE_NONCOHERENT)
> #define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_READ | _PAGE_WRITE | \
> PAGE_CACHABLE_DEFAULT)
> #define PAGE_COPY __pgprot(_PAGE_PRESENT | _PAGE_READ | \
> @@ -222,7 +167,7 @@ extern void (*_flush_icache_page)(struct
> #define PAGE_KERNEL __pgprot(_PAGE_PRESENT | __READABLE | __WRITEABLE | \
> _PAGE_GLOBAL | PAGE_CACHABLE_DEFAULT)
> #define PAGE_USERIO __pgprot(_PAGE_PRESENT | _PAGE_READ | _PAGE_WRITE | \
> - _CACHE_UNCACHED)
> + PAGE_CACHABLE_DEFAULT)
> #define PAGE_KERNEL_UNCACHED __pgprot(_PAGE_PRESENT | __READABLE | \
> __WRITEABLE | _PAGE_GLOBAL | _CACHE_UNCACHED)
>
--
_ _ ____ ___ Carsten Langgaard Mailto:carstenl@mips.com
|\ /|||___)(___ MIPS Denmark Direct: +45 4486 5527
| \/ ||| ____) Lautrupvang 4B Switch: +45 4486 5555
TECHNOLOGIES 2750 Ballerup Fax...: +45 4486 5556
Denmark http://www.mips.com
next prev parent reply other threads:[~2002-07-29 14:49 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-07-05 15:21 [patch] linux: Cache coherency fixes Maciej W. Rozycki
2002-07-29 14:29 ` [update] " Maciej W. Rozycki
2002-07-29 14:48 ` Carsten Langgaard [this message]
2002-08-01 8:31 ` Carsten Langgaard
2002-08-01 13:25 ` Ralf Baechle
2002-08-01 16:05 ` Maciej W. Rozycki
2002-08-01 16:49 ` Ralf Baechle
2002-08-01 17:06 ` Thiemo Seufer
2002-08-02 10:16 ` Ralf Baechle
2002-08-01 17:14 ` Maciej W. Rozycki
2002-08-01 17:58 ` Ralf Baechle
2002-08-01 18:49 ` Maciej W. Rozycki
2002-08-01 19:18 ` Dan Malek
2002-08-02 8:23 ` Carsten Langgaard
2002-08-02 8:36 ` Maciej W. Rozycki
2002-08-02 10:38 ` Ralf Baechle
2002-08-02 8:10 ` Carsten Langgaard
2002-08-05 12:04 ` Maciej W. Rozycki
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3D4555D3.615B3B1A@mips.com \
--to=carstenl@mips.com \
--cc=linux-mips@fnet.fr \
--cc=linux-mips@oss.sgi.com \
--cc=macro@ds2.pg.gda.pl \
--cc=ralf@uni-koblenz.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox