From: Joshua Kinard <kumba@gentoo.org>
To: Ralf Baechle <ralf@linux-mips.org>
Cc: Linux MIPS List <linux-mips@linux-mips.org>
Subject: Re: [PATCH] MIPS: R10000: Split R10000 definitions from R12000 and up
Date: Wed, 21 Jan 2015 06:37:48 -0500 [thread overview]
Message-ID: <54BF8F8C.4090209@gentoo.org> (raw)
In-Reply-To: <54BCC6CB.7020804@gentoo.org>
On 01/19/2015 03:56, Joshua Kinard wrote:
> From: Joshua Kinard <kumba@gentoo.org>
>
> This patch splits the old R10000 definitions so that the R10000_LLSC_WAR can be
> disabled and -mno-fix-r10000 passed to CFLAGS for systems running R12000 CPUs
> and greater. This allows the kernel to build without branch-likely
> instructions, which are considered deprecated in current MIPS implementations.
> Only R10000 systems with R2.6 and lower CPUs require branch-likely to work
> around a known hardware errata item.
From the R16000 discussion, it appears I missed the bits in __get_cpu_type, so
ignore this patch for now. I'll send another when I account for that function,
and double check I didn't miss any other R10K areas.
--J
> Verified on both an SGI Onyx2 and an SGI Octane.
>
> Signed-off-by: Joshua Kinard <kumba@gentoo.org>
> ---
> arch/mips/Kconfig | 18 +++++++++++++++++-
> arch/mips/Makefile | 3 +++
> arch/mips/include/asm/hazards.h | 3 ++-
> arch/mips/include/asm/mach-ip27/war.h | 7 ++++++-
> arch/mips/include/asm/module.h | 2 ++
> arch/mips/sgi-ip27/Platform | 15 ++++++++-------
> arch/mips/sgi-ip32/Platform | 2 ++
> drivers/video/fbdev/gbefb.c | 2 +-
> 8 files changed, 41 insertions(+), 11 deletions(-)
>
> linux-mips-split-r10k-family.patch
> diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
> index 73983e1..b526133 100644
> --- a/arch/mips/Kconfig
> +++ b/arch/mips/Kconfig
> @@ -551,6 +551,7 @@ config SGI_IP27
> select HW_HAS_PCI
> select NR_CPUS_DEFAULT_64
> select SYS_HAS_CPU_R10000
> + select SYS_HAS_CPU_R12K_R14K_R16K
> select SYS_SUPPORTS_64BIT_KERNEL
> select SYS_SUPPORTS_BIG_ENDIAN
> select SYS_SUPPORTS_NUMA
> @@ -612,6 +613,7 @@ config SGI_IP32
> select RM7000_CPU_SCACHE
> select SYS_HAS_CPU_R5000
> select SYS_HAS_CPU_R10000 if BROKEN
> + select SYS_HAS_CPU_R12K_R14K_R16K if BROKEN
> select SYS_HAS_CPU_RM7000
> select SYS_HAS_CPU_NEVADA
> select SYS_SUPPORTS_64BIT_KERNEL
> @@ -1456,7 +1458,18 @@ config CPU_R10000
> select CPU_SUPPORTS_HIGHMEM
> select CPU_SUPPORTS_HUGEPAGES
> help
> - MIPS Technologies R10000-series processors.
> + MIPS Technologies R10000 processor.
> +
> +config CPU_R12K_R14K_R16K
> + bool "R12k/R14k/R16k"
> + depends on SYS_HAS_CPU_R12K_R14K_R16K
> + select CPU_HAS_PREFETCH
> + select CPU_SUPPORTS_32BIT_KERNEL
> + select CPU_SUPPORTS_64BIT_KERNEL
> + select CPU_SUPPORTS_HIGHMEM
> + select CPU_SUPPORTS_HUGEPAGES
> + help
> + MIPS Technologies R12k/R14k/R16k-series processors.
>
> config CPU_RM7000
> bool "RM7000"
> @@ -1704,6 +1717,9 @@ config SYS_HAS_CPU_R8000
> config SYS_HAS_CPU_R10000
> bool
>
> +config SYS_HAS_CPU_R12K_R14K_R16K
> + bool
> +
> config SYS_HAS_CPU_RM7000
> bool
>
> diff --git a/arch/mips/Makefile b/arch/mips/Makefile
> index 37fce70..abccbb2 100644
> --- a/arch/mips/Makefile
> +++ b/arch/mips/Makefile
> @@ -176,6 +176,9 @@ cflags-$(CONFIG_CPU_SB1) += $(call cc-option,-mno-mips3d)
> cflags-$(CONFIG_CPU_R8000) += -march=r8000 -Wa,--trap
> cflags-$(CONFIG_CPU_R10000) += $(call cc-option,-march=r10000,-march=r8000) \
> -Wa,--trap
> +cflags-$(CONFIG_CPU_R12K_R14K_R16K) += $(call cc-option,-march=r12000,-march=r8000) \
> + $(call cc-option,-mno-fix-r10000,) \
> + -Wa,--trap
> cflags-$(CONFIG_CPU_CAVIUM_OCTEON) += $(call cc-option,-march=octeon) -Wa,--trap
> ifeq (,$(findstring march=octeon, $(cflags-$(CONFIG_CPU_CAVIUM_OCTEON))))
> cflags-$(CONFIG_CPU_CAVIUM_OCTEON) += -Wa,-march=octeon
> diff --git a/arch/mips/include/asm/hazards.h b/arch/mips/include/asm/hazards.h
> index e3ee92d..0b565e5 100644
> --- a/arch/mips/include/asm/hazards.h
> +++ b/arch/mips/include/asm/hazards.h
> @@ -138,7 +138,8 @@ do { \
>
> #elif defined(CONFIG_MIPS_ALCHEMY) || defined(CONFIG_CPU_CAVIUM_OCTEON) || \
> defined(CONFIG_CPU_LOONGSON2) || defined(CONFIG_CPU_R10000) || \
> - defined(CONFIG_CPU_R5500) || defined(CONFIG_CPU_XLR)
> + defined(CONFIG_CPU_R12K_R14K_R16K) || defined(CONFIG_CPU_R5500) || \
> + defined(CONFIG_CPU_XLR)
>
> /*
> * R10000 rocks - all hazards handled in hardware, so this becomes a nobrainer.
> diff --git a/arch/mips/include/asm/mach-ip27/war.h b/arch/mips/include/asm/mach-ip27/war.h
> index 4ee0e4b..e901a81 100644
> --- a/arch/mips/include/asm/mach-ip27/war.h
> +++ b/arch/mips/include/asm/mach-ip27/war.h
> @@ -18,7 +18,12 @@
> #define MIPS_CACHE_SYNC_WAR 0
> #define TX49XX_ICACHE_INDEX_INV_WAR 0
> #define ICACHE_REFILLS_WORKAROUND_WAR 0
> -#define R10000_LLSC_WAR 1
> #define MIPS34K_MISSED_ITLB_WAR 0
>
> +#ifdef CONFIG_CPU_R10000
> +#define R10000_LLSC_WAR 1
> +#else
> +#define R10000_LLSC_WAR 0
> +#endif
> +
> #endif /* __ASM_MIPS_MACH_IP27_WAR_H */
> diff --git a/arch/mips/include/asm/module.h b/arch/mips/include/asm/module.h
> index 800fe57..394dee4 100644
> --- a/arch/mips/include/asm/module.h
> +++ b/arch/mips/include/asm/module.h
> @@ -118,6 +118,8 @@ search_module_dbetables(unsigned long addr)
> #define MODULE_PROC_FAMILY "R8000 "
> #elif defined CONFIG_CPU_R10000
> #define MODULE_PROC_FAMILY "R10000 "
> +#elif defined CONFIG_CPU_R12K_R14K_R16K
> +#define MODULE_PROC_FAMILY "R12K/R14K/R16K "
> #elif defined CONFIG_CPU_RM7000
> #define MODULE_PROC_FAMILY "RM7000 "
> #elif defined CONFIG_CPU_SB1
> diff --git a/arch/mips/sgi-ip27/Platform b/arch/mips/sgi-ip27/Platform
> index 1fb9c2e..4ad7060 100644
> --- a/arch/mips/sgi-ip27/Platform
> +++ b/arch/mips/sgi-ip27/Platform
> @@ -6,14 +6,15 @@
> # be 16kb aligned or the handling of the current variable will break.
> #
> ifdef CONFIG_SGI_IP27
> -platform-$(CONFIG_SGI_IP27) += sgi-ip27/
> -cflags-$(CONFIG_SGI_IP27) += -I$(srctree)/arch/mips/include/asm/mach-ip27
> +platform-$(CONFIG_SGI_IP27) += sgi-ip27/
> +cflags-$(CONFIG_SGI_IP27) += -I$(srctree)/arch/mips/include/asm/mach-ip27
> +cflags-$(CONFIG_CPU_R12K_R14K_R16K) += -mno-fix-r10000
> ifdef CONFIG_MAPPED_KERNEL
> -load-$(CONFIG_SGI_IP27) += 0xc00000004001c000
> -OBJCOPYFLAGS := --change-addresses=0x3fffffff80000000
> -dataoffset-$(CONFIG_SGI_IP27) += 0x01000000
> +load-$(CONFIG_SGI_IP27) += 0xc00000004001c000
> +OBJCOPYFLAGS := --change-addresses=0x3fffffff80000000
> +dataoffset-$(CONFIG_SGI_IP27) += 0x01000000
> else
> -load-$(CONFIG_SGI_IP27) += 0xa80000000001c000
> -OBJCOPYFLAGS := --change-addresses=0x57ffffff80000000
> +load-$(CONFIG_SGI_IP27) += 0xa80000000001c000
> +OBJCOPYFLAGS := --change-addresses=0x57ffffff80000000
> endif
> endif
> diff --git a/arch/mips/sgi-ip32/Platform b/arch/mips/sgi-ip32/Platform
> index 0fea556..5899305 100644
> --- a/arch/mips/sgi-ip32/Platform
> +++ b/arch/mips/sgi-ip32/Platform
> @@ -8,4 +8,6 @@
> #
> platform-$(CONFIG_SGI_IP32) += sgi-ip32/
> cflags-$(CONFIG_SGI_IP32) += -I$(srctree)/arch/mips/include/asm/mach-ip32
> +cflags-$(CONFIG_CPU_R10000) += -mr10k-cache-barrier=load-store
> +cflags-$(CONFIG_CPU_R12K_R14K_R16K) += -mno-fix-r10000 -mr10k-cache-barrier=load-store
> load-$(CONFIG_SGI_IP32) += 0xffffffff80004000
> diff --git a/drivers/video/fbdev/gbefb.c b/drivers/video/fbdev/gbefb.c
> index 6d9ef39..c5dc991 100644
> --- a/drivers/video/fbdev/gbefb.c
> +++ b/drivers/video/fbdev/gbefb.c
> @@ -47,7 +47,7 @@ struct gbefb_par {
>
> /* macro for fastest write-though access to the framebuffer */
> #ifdef CONFIG_MIPS
> -#ifdef CONFIG_CPU_R10000
> +#if defined(CONFIG_CPU_R10000) || defined(CONFIG_CPU_R12K_R14K_R16K)
> #define pgprot_fb(_prot) (((_prot) & (~_CACHE_MASK)) | _CACHE_UNCACHED_ACCELERATED)
> #else
> #define pgprot_fb(_prot) (((_prot) & (~_CACHE_MASK)) | _CACHE_CACHABLE_NO_WA)
WARNING: multiple messages have this Message-ID (diff)
From: Joshua Kinard <kumba@gentoo.org>
To: Ralf Baechle <ralf@linux-mips.org>
Cc: Linux MIPS List <linux-mips@linux-mips.org>
Subject: Re: [PATCH] MIPS: R10000: Split R10000 definitions from R12000 and up
Date: Wed, 21 Jan 2015 06:37:48 -0500 [thread overview]
Message-ID: <54BF8F8C.4090209@gentoo.org> (raw)
Message-ID: <20150121113748.VKeoCCcVs3V-U9aGMdQX-lgcMTBAwbM3GXco1jDBK5A@z> (raw)
In-Reply-To: <54BCC6CB.7020804@gentoo.org>
On 01/19/2015 03:56, Joshua Kinard wrote:
> From: Joshua Kinard <kumba@gentoo.org>
>
> This patch splits the old R10000 definitions so that the R10000_LLSC_WAR can be
> disabled and -mno-fix-r10000 passed to CFLAGS for systems running R12000 CPUs
> and greater. This allows the kernel to build without branch-likely
> instructions, which are considered deprecated in current MIPS implementations.
> Only R10000 systems with R2.6 and lower CPUs require branch-likely to work
> around a known hardware errata item.
next prev parent reply other threads:[~2015-01-21 11:38 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-19 8:56 [PATCH] MIPS: R10000: Split R10000 definitions from R12000 and up Joshua Kinard
2015-01-21 11:37 ` Joshua Kinard [this message]
2015-01-21 11:37 ` Joshua Kinard
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=54BF8F8C.4090209@gentoo.org \
--to=kumba@gentoo.org \
--cc=linux-mips@linux-mips.org \
--cc=ralf@linux-mips.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.