License cleanup: add SPDX GPL-2.0 license identifier to files with no license
Many source files in the tree are missing licensing information, which
makes it harder for compliance tools to determine the correct license.
By default all files without license information are under the default
license of the kernel, which is GPL version 2.
Update the files which contain no license information with the 'GPL-2.0'
SPDX license identifier. The SPDX identifier is a legally binding
shorthand, which can be used instead of the full boiler plate text.
This patch is based on work done by Thomas Gleixner and Kate Stewart and
Philippe Ombredanne.
How this work was done:
Patches were generated and checked against linux-4.14-rc6 for a subset of
the use cases:
- file had no licensing information it it.
- file was a */uapi/* one with no licensing information in it,
- file was a */uapi/* one with existing licensing information,
Further patches will be generated in subsequent months to fix up cases
where non-standard license headers were used, and references to license
had to be inferred by heuristics based on keywords.
The analysis to determine which SPDX License Identifier to be applied to
a file was done in a spreadsheet of side by side results from of the
output of two independent scanners (ScanCode & Windriver) producing SPDX
tag:value files created by Philippe Ombredanne. Philippe prepared the
base worksheet, and did an initial spot review of a few 1000 files.
The 4.13 kernel was the starting point of the analysis with 60,537 files
assessed. Kate Stewart did a file by file comparison of the scanner
results in the spreadsheet to determine which SPDX license identifier(s)
to be applied to the file. She confirmed any determination that was not
immediately clear with lawyers working with the Linux Foundation.
Criteria used to select files for SPDX license identifier tagging was:
- Files considered eligible had to be source code files.
- Make and config files were included as candidates if they contained >5
lines of source
- File already had some variant of a license header in it (even if <5
lines).
All documentation files were explicitly excluded.
The following heuristics were used to determine which SPDX license
identifiers to apply.
- when both scanners couldn't find any license traces, file was
considered to have no license information in it, and the top level
COPYING file license applied.
For non */uapi/* files that summary was:
SPDX license identifier # files
---------------------------------------------------|-------
GPL-2.0 11139
and resulted in the first patch in this series.
If that file was a */uapi/* path one, it was "GPL-2.0 WITH
Linux-syscall-note" otherwise it was "GPL-2.0". Results of that was:
SPDX license identifier # files
---------------------------------------------------|-------
GPL-2.0 WITH Linux-syscall-note 930
and resulted in the second patch in this series.
- if a file had some form of licensing information in it, and was one
of the */uapi/* ones, it was denoted with the Linux-syscall-note if
any GPL family license was found in the file or had no licensing in
it (per prior point). Results summary:
SPDX license identifier # files
---------------------------------------------------|------
GPL-2.0 WITH Linux-syscall-note 270
GPL-2.0+ WITH Linux-syscall-note 169
((GPL-2.0 WITH Linux-syscall-note) OR BSD-2-Clause) 21
((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) 17
LGPL-2.1+ WITH Linux-syscall-note 15
GPL-1.0+ WITH Linux-syscall-note 14
((GPL-2.0+ WITH Linux-syscall-note) OR BSD-3-Clause) 5
LGPL-2.0+ WITH Linux-syscall-note 4
LGPL-2.1 WITH Linux-syscall-note 3
((GPL-2.0 WITH Linux-syscall-note) OR MIT) 3
((GPL-2.0 WITH Linux-syscall-note) AND MIT) 1
and that resulted in the third patch in this series.
- when the two scanners agreed on the detected license(s), that became
the concluded license(s).
- when there was disagreement between the two scanners (one detected a
license but the other didn't, or they both detected different
licenses) a manual inspection of the file occurred.
- In most cases a manual inspection of the information in the file
resulted in a clear resolution of the license that should apply (and
which scanner probably needed to revisit its heuristics).
- When it was not immediately clear, the license identifier was
confirmed with lawyers working with the Linux Foundation.
- If there was any question as to the appropriate license identifier,
the file was flagged for further research and to be revisited later
in time.
In total, over 70 hours of logged manual review was done on the
spreadsheet to determine the SPDX license identifiers to apply to the
source files by Kate, Philippe, Thomas and, in some cases, confirmation
by lawyers working with the Linux Foundation.
Kate also obtained a third independent scan of the 4.13 code base from
FOSSology, and compared selected files where the other two scanners
disagreed against that SPDX file, to see if there was new insights. The
Windriver scanner is based on an older version of FOSSology in part, so
they are related.
Thomas did random spot checks in about 500 files from the spreadsheets
for the uapi headers and agreed with SPDX license identifier in the
files he inspected. For the non-uapi files Thomas did random spot checks
in about 15000 files.
In initial set of patches against 4.14-rc6, 3 files were found to have
copy/paste license identifier errors, and have been fixed to reflect the
correct identifier.
Additionally Philippe spent 10 hours this week doing a detailed manual
inspection and review of the 12,461 patched files from the initial patch
version early this week with:
- a full scancode scan run, collecting the matched texts, detected
license ids and scores
- reviewing anything where there was a license detected (about 500+
files) to ensure that the applied SPDX license was correct
- reviewing anything where there was no detection but the patch license
was not GPL-2.0 WITH Linux-syscall-note to ensure that the applied
SPDX license was correct
This produced a worksheet with 20 files needing minor correction. This
worksheet was then exported into 3 different .csv files for the
different types of files to be modified.
These .csv files were then reviewed by Greg. Thomas wrote a script to
parse the csv files and add the proper SPDX tag to the file, in the
format that the file expected. This script was further refined by Greg
based on the output to detect more types of files automatically and to
distinguish between header and source .c files (which need different
comment types.) Finally Greg ran the script using the .csv files to
generate the patches.
Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org>
Reviewed-by: Philippe Ombredanne <pombredanne@nexb.com>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-11-01 22:07:57 +08:00
|
|
|
/* SPDX-License-Identifier: GPL-2.0 */
|
2005-04-17 06:20:36 +08:00
|
|
|
/*
|
|
|
|
* cpu.h: Values of the PRId register used to match up
|
2013-01-22 19:59:30 +08:00
|
|
|
* various MIPS cpu types.
|
2005-04-17 06:20:36 +08:00
|
|
|
*
|
2011-04-05 05:15:29 +08:00
|
|
|
* Copyright (C) 1996 David S. Miller (davem@davemloft.net)
|
2013-09-17 23:58:10 +08:00
|
|
|
* Copyright (C) 2004, 2013 Maciej W. Rozycki
|
2005-04-17 06:20:36 +08:00
|
|
|
*/
|
|
|
|
#ifndef _ASM_CPU_H
|
|
|
|
#define _ASM_CPU_H
|
|
|
|
|
2019-05-24 12:51:11 +08:00
|
|
|
#include <linux/bits.h>
|
|
|
|
|
2013-09-17 23:58:10 +08:00
|
|
|
/*
|
|
|
|
As of the MIPS32 and MIPS64 specs from MTI, the PRId register (CP0
|
|
|
|
register 15, select 0) is defined in this (backwards compatible) way:
|
2005-04-17 06:20:36 +08:00
|
|
|
|
|
|
|
+----------------+----------------+----------------+----------------+
|
2013-01-22 19:59:30 +08:00
|
|
|
| Company Options| Company ID | Processor ID | Revision |
|
2005-04-17 06:20:36 +08:00
|
|
|
+----------------+----------------+----------------+----------------+
|
2013-01-22 19:59:30 +08:00
|
|
|
31 24 23 16 15 8 7
|
2005-04-17 06:20:36 +08:00
|
|
|
|
|
|
|
I don't have docs for all the previous processors, but my impression is
|
|
|
|
that bits 16-23 have been 0 for all MIPS processors before the MIPS32/64
|
|
|
|
spec.
|
|
|
|
*/
|
|
|
|
|
2013-09-17 23:58:10 +08:00
|
|
|
#define PRID_OPT_MASK 0xff000000
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Assigned Company values for bits 23:16 of the PRId register.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#define PRID_COMP_MASK 0xff0000
|
|
|
|
|
2005-02-08 05:52:35 +08:00
|
|
|
#define PRID_COMP_LEGACY 0x000000
|
|
|
|
#define PRID_COMP_MIPS 0x010000
|
|
|
|
#define PRID_COMP_BROADCOM 0x020000
|
|
|
|
#define PRID_COMP_ALCHEMY 0x030000
|
|
|
|
#define PRID_COMP_SIBYTE 0x040000
|
|
|
|
#define PRID_COMP_SANDCRAFT 0x050000
|
2013-01-22 19:59:30 +08:00
|
|
|
#define PRID_COMP_NXP 0x060000
|
2005-02-08 05:52:35 +08:00
|
|
|
#define PRID_COMP_TOSHIBA 0x070000
|
|
|
|
#define PRID_COMP_LSI 0x080000
|
|
|
|
#define PRID_COMP_LEXRA 0x0b0000
|
2011-05-11 14:34:58 +08:00
|
|
|
#define PRID_COMP_NETLOGIC 0x0c0000
|
2008-12-12 07:33:26 +08:00
|
|
|
#define PRID_COMP_CAVIUM 0x0d0000
|
2016-03-03 09:45:09 +08:00
|
|
|
#define PRID_COMP_LOONGSON 0x140000
|
2019-12-09 13:10:25 +08:00
|
|
|
#define PRID_COMP_INGENIC_D0 0xd00000 /* JZ4740, JZ4750, X1830 */
|
2019-07-30 19:30:11 +08:00
|
|
|
#define PRID_COMP_INGENIC_D1 0xd10000 /* JZ4770, JZ4775, X1000 */
|
2015-05-24 23:11:14 +08:00
|
|
|
#define PRID_COMP_INGENIC_E1 0xe10000 /* JZ4780 */
|
2005-04-17 06:20:36 +08:00
|
|
|
|
|
|
|
/*
|
2013-09-17 23:58:10 +08:00
|
|
|
* Assigned Processor ID (implementation) values for bits 15:8 of the PRId
|
|
|
|
* register. In order to detect a certain CPU type exactly eventually
|
|
|
|
* additional registers may need to be examined.
|
2005-04-17 06:20:36 +08:00
|
|
|
*/
|
2013-09-17 23:58:10 +08:00
|
|
|
|
|
|
|
#define PRID_IMP_MASK 0xff00
|
|
|
|
|
|
|
|
/*
|
|
|
|
* These are valid when 23:16 == PRID_COMP_LEGACY
|
|
|
|
*/
|
|
|
|
|
2005-04-17 06:20:36 +08:00
|
|
|
#define PRID_IMP_R2000 0x0100
|
|
|
|
#define PRID_IMP_AU1_REV1 0x0100
|
|
|
|
#define PRID_IMP_AU1_REV2 0x0200
|
|
|
|
#define PRID_IMP_R3000 0x0200 /* Same as R2000A */
|
|
|
|
#define PRID_IMP_R6000 0x0300 /* Same as R3000A */
|
|
|
|
#define PRID_IMP_R4000 0x0400
|
|
|
|
#define PRID_IMP_R6000A 0x0600
|
|
|
|
#define PRID_IMP_R10000 0x0900
|
|
|
|
#define PRID_IMP_R4300 0x0b00
|
|
|
|
#define PRID_IMP_VR41XX 0x0c00
|
|
|
|
#define PRID_IMP_R12000 0x0e00
|
2015-01-21 20:59:45 +08:00
|
|
|
#define PRID_IMP_R14000 0x0f00 /* R14K && R16K */
|
2005-04-17 06:20:36 +08:00
|
|
|
#define PRID_IMP_R8000 0x1000
|
2005-07-15 01:47:57 +08:00
|
|
|
#define PRID_IMP_PR4450 0x1200
|
2005-04-17 06:20:36 +08:00
|
|
|
#define PRID_IMP_R4600 0x2000
|
|
|
|
#define PRID_IMP_R4700 0x2100
|
|
|
|
#define PRID_IMP_TX39 0x2200
|
|
|
|
#define PRID_IMP_R4640 0x2200
|
|
|
|
#define PRID_IMP_R4650 0x2200 /* Same as R4640 */
|
|
|
|
#define PRID_IMP_R5000 0x2300
|
|
|
|
#define PRID_IMP_TX49 0x2d00
|
|
|
|
#define PRID_IMP_SONIC 0x2400
|
|
|
|
#define PRID_IMP_MAGIC 0x2500
|
|
|
|
#define PRID_IMP_RM7000 0x2700
|
|
|
|
#define PRID_IMP_NEVADA 0x2800 /* RM5260 ??? */
|
|
|
|
#define PRID_IMP_RM9000 0x3400
|
2014-02-16 16:01:18 +08:00
|
|
|
#define PRID_IMP_LOONGSON_32 0x4200 /* Loongson-1 */
|
2005-04-17 06:20:36 +08:00
|
|
|
#define PRID_IMP_R5432 0x5400
|
|
|
|
#define PRID_IMP_R5500 0x5500
|
MIPS: Loongson: Add Loongson-3A R4 basic support
All Loongson-3 CPU family:
Code-name Brand-name PRId
Loongson-3A R1 Loongson-3A1000 0x6305
Loongson-3A R2 Loongson-3A2000 0x6308
Loongson-3A R2.1 Loongson-3A2000 0x630c
Loongson-3A R3 Loongson-3A3000 0x6309
Loongson-3A R3.1 Loongson-3A3000 0x630d
Loongson-3A R4 Loongson-3A4000 0xc000
Loongson-3B R1 Loongson-3B1000 0x6306
Loongson-3B R2 Loongson-3B1500 0x6307
Features of R4 revision of Loongson-3A:
- All R2/R3 features, including SFB, V-Cache, FTLB, RIXI, DSP, etc.
- Support variable ASID bits.
- Support MSA and VZ extensions.
- Support CPUCFG (CPU config) and CSR (Control and Status Register)
extensions.
- 64 entries of VTLB (classic TLB), 2048 entries of FTLB (8-way
set-associative).
Now 64-bit Loongson processors has three types of PRID.IMP: 0x6300 is
the classic one so we call it PRID_IMP_LOONGSON_64C (e.g., Loongson-2E/
2F/3A1000/3B1000/3B1500/3A2000/3A3000), 0x6100 is for some processors
which has reduced capabilities so we call it PRID_IMP_LOONGSON_64R
(e.g., Loongson-2K), 0xc000 is supposed to cover all new processors in
general (e.g., Loongson-3A4000+) so we call it PRID_IMP_LOONGSON_64G.
Signed-off-by: Huacai Chen <chenhc@lemote.com>
Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Paul Burton <paul.burton@mips.com>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: James Hogan <jhogan@kernel.org>
Cc: linux-mips@linux-mips.org
Cc: linux-mips@vger.kernel.org
Cc: Fuxin Zhang <zhangfx@lemote.com>
Cc: Zhangjin Wu <wuzhangjin@gmail.com>
Cc: Huacai Chen <chenhuacai@gmail.com>
2019-09-21 21:50:27 +08:00
|
|
|
#define PRID_IMP_LOONGSON_64R 0x6100 /* Reduced Loongson-2 */
|
|
|
|
#define PRID_IMP_LOONGSON_64C 0x6300 /* Classic Loongson-2 and Loongson-3 */
|
|
|
|
#define PRID_IMP_LOONGSON_64G 0xc000 /* Generic Loongson-2 and Loongson-3 */
|
2005-09-05 18:31:27 +08:00
|
|
|
|
|
|
|
#define PRID_IMP_UNKNOWN 0xff00
|
|
|
|
|
|
|
|
/*
|
|
|
|
* These are the PRID's for when 23:16 == PRID_COMP_MIPS
|
|
|
|
*/
|
|
|
|
|
2014-10-27 18:12:23 +08:00
|
|
|
#define PRID_IMP_QEMU_GENERIC 0x0000
|
2005-04-17 06:20:36 +08:00
|
|
|
#define PRID_IMP_4KC 0x8000
|
|
|
|
#define PRID_IMP_5KC 0x8100
|
|
|
|
#define PRID_IMP_20KC 0x8200
|
|
|
|
#define PRID_IMP_4KEC 0x8400
|
|
|
|
#define PRID_IMP_4KSC 0x8600
|
|
|
|
#define PRID_IMP_25KF 0x8800
|
|
|
|
#define PRID_IMP_5KE 0x8900
|
|
|
|
#define PRID_IMP_4KECR2 0x9000
|
|
|
|
#define PRID_IMP_4KEMPR2 0x9100
|
|
|
|
#define PRID_IMP_4KSD 0x9200
|
|
|
|
#define PRID_IMP_24K 0x9300
|
2005-07-13 00:12:05 +08:00
|
|
|
#define PRID_IMP_34K 0x9500
|
2005-05-31 19:49:19 +08:00
|
|
|
#define PRID_IMP_24KE 0x9600
|
2006-05-02 21:08:46 +08:00
|
|
|
#define PRID_IMP_74K 0x9700
|
2008-04-29 00:14:26 +08:00
|
|
|
#define PRID_IMP_1004K 0x9900
|
2012-06-26 12:11:03 +08:00
|
|
|
#define PRID_IMP_1074K 0x9a00
|
2012-07-07 05:56:00 +08:00
|
|
|
#define PRID_IMP_M14KC 0x9c00
|
2012-12-07 11:51:35 +08:00
|
|
|
#define PRID_IMP_M14KEC 0x9e00
|
2013-11-20 18:46:00 +08:00
|
|
|
#define PRID_IMP_INTERAPTIV_UP 0xa000
|
|
|
|
#define PRID_IMP_INTERAPTIV_MP 0xa100
|
2013-11-15 00:12:26 +08:00
|
|
|
#define PRID_IMP_PROAPTIV_UP 0xa200
|
|
|
|
#define PRID_IMP_PROAPTIV_MP 0xa300
|
2016-02-03 11:26:37 +08:00
|
|
|
#define PRID_IMP_P6600 0xa400
|
2014-03-04 21:34:42 +08:00
|
|
|
#define PRID_IMP_M5150 0xa700
|
2014-01-23 00:19:37 +08:00
|
|
|
#define PRID_IMP_P5600 0xa800
|
2015-07-09 17:40:35 +08:00
|
|
|
#define PRID_IMP_I6400 0xa900
|
2016-02-04 00:17:28 +08:00
|
|
|
#define PRID_IMP_M6250 0xab00
|
2017-06-03 03:39:04 +08:00
|
|
|
#define PRID_IMP_I6500 0xb000
|
2005-04-17 06:20:36 +08:00
|
|
|
|
|
|
|
/*
|
|
|
|
* These are the PRID's for when 23:16 == PRID_COMP_SIBYTE
|
|
|
|
*/
|
|
|
|
|
2013-01-22 19:59:30 +08:00
|
|
|
#define PRID_IMP_SB1 0x0100
|
|
|
|
#define PRID_IMP_SB1A 0x1100
|
2005-04-17 06:20:36 +08:00
|
|
|
|
|
|
|
/*
|
|
|
|
* These are the PRID's for when 23:16 == PRID_COMP_SANDCRAFT
|
|
|
|
*/
|
|
|
|
|
2013-01-22 19:59:30 +08:00
|
|
|
#define PRID_IMP_SR71000 0x0400
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2007-09-25 21:40:12 +08:00
|
|
|
/*
|
|
|
|
* These are the PRID's for when 23:16 == PRID_COMP_BROADCOM
|
|
|
|
*/
|
|
|
|
|
2010-11-24 02:26:45 +08:00
|
|
|
#define PRID_IMP_BMIPS32_REV4 0x4000
|
|
|
|
#define PRID_IMP_BMIPS32_REV8 0x8000
|
2010-10-17 05:22:30 +08:00
|
|
|
#define PRID_IMP_BMIPS3300 0x9000
|
|
|
|
#define PRID_IMP_BMIPS3300_ALT 0x9100
|
|
|
|
#define PRID_IMP_BMIPS3300_BUG 0x0000
|
|
|
|
#define PRID_IMP_BMIPS43XX 0xa000
|
|
|
|
#define PRID_IMP_BMIPS5000 0x5a00
|
2014-10-21 12:28:01 +08:00
|
|
|
#define PRID_IMP_BMIPS5200 0x5b00
|
2010-10-17 05:22:30 +08:00
|
|
|
|
|
|
|
#define PRID_REV_BMIPS4380_LO 0x0040
|
|
|
|
#define PRID_REV_BMIPS4380_HI 0x006f
|
2007-09-25 21:40:12 +08:00
|
|
|
|
2008-12-12 07:33:26 +08:00
|
|
|
/*
|
|
|
|
* These are the PRID's for when 23:16 == PRID_COMP_CAVIUM
|
|
|
|
*/
|
|
|
|
|
|
|
|
#define PRID_IMP_CAVIUM_CN38XX 0x0000
|
|
|
|
#define PRID_IMP_CAVIUM_CN31XX 0x0100
|
|
|
|
#define PRID_IMP_CAVIUM_CN30XX 0x0200
|
|
|
|
#define PRID_IMP_CAVIUM_CN58XX 0x0300
|
|
|
|
#define PRID_IMP_CAVIUM_CN56XX 0x0400
|
|
|
|
#define PRID_IMP_CAVIUM_CN50XX 0x0600
|
|
|
|
#define PRID_IMP_CAVIUM_CN52XX 0x0700
|
2010-10-08 07:03:43 +08:00
|
|
|
#define PRID_IMP_CAVIUM_CN63XX 0x9000
|
2011-09-24 08:29:54 +08:00
|
|
|
#define PRID_IMP_CAVIUM_CN68XX 0x9100
|
|
|
|
#define PRID_IMP_CAVIUM_CN66XX 0x9200
|
|
|
|
#define PRID_IMP_CAVIUM_CN61XX 0x9300
|
2013-07-30 06:07:00 +08:00
|
|
|
#define PRID_IMP_CAVIUM_CNF71XX 0x9400
|
|
|
|
#define PRID_IMP_CAVIUM_CN78XX 0x9500
|
|
|
|
#define PRID_IMP_CAVIUM_CN70XX 0x9600
|
2016-02-02 06:43:41 +08:00
|
|
|
#define PRID_IMP_CAVIUM_CN73XX 0x9700
|
|
|
|
#define PRID_IMP_CAVIUM_CNF75XX 0x9800
|
2008-12-12 07:33:26 +08:00
|
|
|
|
2010-07-17 19:07:51 +08:00
|
|
|
/*
|
2015-05-24 23:11:14 +08:00
|
|
|
* These are the PRID's for when 23:16 == PRID_COMP_INGENIC_*
|
2010-07-17 19:07:51 +08:00
|
|
|
*/
|
|
|
|
|
2019-12-09 13:10:25 +08:00
|
|
|
#define PRID_IMP_XBURST_REV1 0x0200 /* XBurst with MXU SIMD ISA */
|
|
|
|
#define PRID_IMP_XBURST_REV2 0x0100 /* XBurst with MXU2 SIMD ISA */
|
2010-07-17 19:07:51 +08:00
|
|
|
|
2011-05-11 14:34:58 +08:00
|
|
|
/*
|
|
|
|
* These are the PRID's for when 23:16 == PRID_COMP_NETLOGIC
|
|
|
|
*/
|
|
|
|
#define PRID_IMP_NETLOGIC_XLR732 0x0000
|
|
|
|
#define PRID_IMP_NETLOGIC_XLR716 0x0200
|
|
|
|
#define PRID_IMP_NETLOGIC_XLR532 0x0900
|
|
|
|
#define PRID_IMP_NETLOGIC_XLR308 0x0600
|
|
|
|
#define PRID_IMP_NETLOGIC_XLR532C 0x0800
|
|
|
|
#define PRID_IMP_NETLOGIC_XLR516C 0x0a00
|
|
|
|
#define PRID_IMP_NETLOGIC_XLR508C 0x0b00
|
|
|
|
#define PRID_IMP_NETLOGIC_XLR308C 0x0f00
|
|
|
|
#define PRID_IMP_NETLOGIC_XLS608 0x8000
|
|
|
|
#define PRID_IMP_NETLOGIC_XLS408 0x8800
|
|
|
|
#define PRID_IMP_NETLOGIC_XLS404 0x8c00
|
|
|
|
#define PRID_IMP_NETLOGIC_XLS208 0x8e00
|
|
|
|
#define PRID_IMP_NETLOGIC_XLS204 0x8f00
|
|
|
|
#define PRID_IMP_NETLOGIC_XLS108 0xce00
|
|
|
|
#define PRID_IMP_NETLOGIC_XLS104 0xcf00
|
|
|
|
#define PRID_IMP_NETLOGIC_XLS616B 0x4000
|
|
|
|
#define PRID_IMP_NETLOGIC_XLS608B 0x4a00
|
|
|
|
#define PRID_IMP_NETLOGIC_XLS416B 0x4400
|
|
|
|
#define PRID_IMP_NETLOGIC_XLS412B 0x4c00
|
|
|
|
#define PRID_IMP_NETLOGIC_XLS408B 0x4e00
|
|
|
|
#define PRID_IMP_NETLOGIC_XLS404B 0x4f00
|
2011-11-02 03:03:30 +08:00
|
|
|
#define PRID_IMP_NETLOGIC_AU13XX 0x8000
|
2011-05-11 14:34:58 +08:00
|
|
|
|
2011-11-16 08:21:29 +08:00
|
|
|
#define PRID_IMP_NETLOGIC_XLP8XX 0x1000
|
|
|
|
#define PRID_IMP_NETLOGIC_XLP3XX 0x1100
|
2013-08-11 17:13:54 +08:00
|
|
|
#define PRID_IMP_NETLOGIC_XLP2XX 0x1200
|
2013-12-21 19:22:20 +08:00
|
|
|
#define PRID_IMP_NETLOGIC_XLP9XX 0x1500
|
2014-04-29 22:37:53 +08:00
|
|
|
#define PRID_IMP_NETLOGIC_XLP5XX 0x1300
|
2011-05-11 14:34:58 +08:00
|
|
|
|
2005-04-17 06:20:36 +08:00
|
|
|
/*
|
2013-09-17 23:58:10 +08:00
|
|
|
* Particular Revision values for bits 7:0 of the PRId register.
|
2005-04-17 06:20:36 +08:00
|
|
|
*/
|
|
|
|
|
2007-06-15 05:55:31 +08:00
|
|
|
#define PRID_REV_MASK 0x00ff
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2013-09-17 23:58:10 +08:00
|
|
|
/*
|
|
|
|
* Definitions for 7:0 on legacy processors
|
|
|
|
*/
|
|
|
|
|
2018-04-28 11:21:25 +08:00
|
|
|
#define PRID_REV_TX4927 0x0022
|
|
|
|
#define PRID_REV_TX4937 0x0030
|
|
|
|
#define PRID_REV_R4400 0x0040
|
|
|
|
#define PRID_REV_R3000A 0x0030
|
|
|
|
#define PRID_REV_R3000 0x0020
|
|
|
|
#define PRID_REV_R2000A 0x0010
|
|
|
|
#define PRID_REV_TX3912 0x0010
|
|
|
|
#define PRID_REV_TX3922 0x0030
|
|
|
|
#define PRID_REV_TX3927 0x0040
|
|
|
|
#define PRID_REV_VR4111 0x0050
|
|
|
|
#define PRID_REV_VR4181 0x0050 /* Same as VR4111 */
|
|
|
|
#define PRID_REV_VR4121 0x0060
|
|
|
|
#define PRID_REV_VR4122 0x0070
|
|
|
|
#define PRID_REV_VR4181A 0x0070 /* Same as VR4122 */
|
|
|
|
#define PRID_REV_VR4130 0x0080
|
|
|
|
#define PRID_REV_34K_V1_0_2 0x0022
|
|
|
|
#define PRID_REV_LOONGSON1B 0x0020
|
|
|
|
#define PRID_REV_LOONGSON1C 0x0020 /* Same as Loongson-1B */
|
|
|
|
#define PRID_REV_LOONGSON2E 0x0002
|
|
|
|
#define PRID_REV_LOONGSON2F 0x0003
|
|
|
|
#define PRID_REV_LOONGSON3A_R1 0x0005
|
|
|
|
#define PRID_REV_LOONGSON3B_R1 0x0006
|
|
|
|
#define PRID_REV_LOONGSON3B_R2 0x0007
|
2018-11-15 15:53:52 +08:00
|
|
|
#define PRID_REV_LOONGSON3A_R2_0 0x0008
|
2018-04-28 11:21:25 +08:00
|
|
|
#define PRID_REV_LOONGSON3A_R3_0 0x0009
|
2018-11-15 15:53:52 +08:00
|
|
|
#define PRID_REV_LOONGSON3A_R2_1 0x000c
|
2018-04-28 11:21:25 +08:00
|
|
|
#define PRID_REV_LOONGSON3A_R3_1 0x000d
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2007-07-06 21:40:05 +08:00
|
|
|
/*
|
|
|
|
* Older processors used to encode processor version and revision in two
|
|
|
|
* 4-bit bitfields, the 4K seems to simply count up and even newer MTI cores
|
|
|
|
* have switched to use the 8-bits as 3:3:2 bitfield with the last field as
|
|
|
|
* the patch number. *ARGH*
|
|
|
|
*/
|
|
|
|
#define PRID_REV_ENCODE_44(ver, rev) \
|
|
|
|
((ver) << 4 | (rev))
|
|
|
|
#define PRID_REV_ENCODE_332(ver, rev, patch) \
|
|
|
|
((ver) << 5 | (rev) << 2 | (patch))
|
|
|
|
|
2005-04-17 06:20:36 +08:00
|
|
|
/*
|
|
|
|
* FPU implementation/revision register (CP1 control register 0).
|
|
|
|
*
|
|
|
|
* +---------------------------------+----------------+----------------+
|
2013-01-22 19:59:30 +08:00
|
|
|
* | 0 | Implementation | Revision |
|
2005-04-17 06:20:36 +08:00
|
|
|
* +---------------------------------+----------------+----------------+
|
2013-01-22 19:59:30 +08:00
|
|
|
* 31 16 15 8 7 0
|
2005-04-17 06:20:36 +08:00
|
|
|
*/
|
|
|
|
|
2013-09-17 23:58:10 +08:00
|
|
|
#define FPIR_IMP_MASK 0xff00
|
|
|
|
|
2005-04-17 06:20:36 +08:00
|
|
|
#define FPIR_IMP_NONE 0x0000
|
|
|
|
|
2013-12-18 21:12:00 +08:00
|
|
|
#if !defined(__ASSEMBLY__)
|
|
|
|
|
2007-10-12 06:46:16 +08:00
|
|
|
enum cpu_type_enum {
|
|
|
|
CPU_UNKNOWN,
|
|
|
|
|
|
|
|
/*
|
|
|
|
* R2000 class processors
|
|
|
|
*/
|
|
|
|
CPU_R2000, CPU_R3000, CPU_R3000A, CPU_R3041, CPU_R3051, CPU_R3052,
|
|
|
|
CPU_R3081, CPU_R3081E,
|
|
|
|
|
|
|
|
/*
|
|
|
|
* R4000 class processors
|
|
|
|
*/
|
2019-07-23 05:59:43 +08:00
|
|
|
CPU_R4000PC, CPU_R4000SC, CPU_R4000MC, CPU_R4200,
|
2007-10-12 06:46:16 +08:00
|
|
|
CPU_R4400PC, CPU_R4400SC, CPU_R4400MC, CPU_R4600, CPU_R4640, CPU_R4650,
|
2019-07-23 05:59:50 +08:00
|
|
|
CPU_R4700, CPU_R5000, CPU_R5500, CPU_NEVADA, CPU_R10000,
|
2015-01-21 20:59:45 +08:00
|
|
|
CPU_R12000, CPU_R14000, CPU_R16000, CPU_VR41XX, CPU_VR4111, CPU_VR4121,
|
|
|
|
CPU_VR4122, CPU_VR4131, CPU_VR4133, CPU_VR4181, CPU_VR4181A, CPU_RM7000,
|
2014-05-22 23:22:41 +08:00
|
|
|
CPU_SR71000, CPU_TX49XX,
|
2007-10-12 06:46:16 +08:00
|
|
|
|
|
|
|
/*
|
|
|
|
* TX3900 class processors
|
|
|
|
*/
|
|
|
|
CPU_TX3912, CPU_TX3922, CPU_TX3927,
|
|
|
|
|
|
|
|
/*
|
|
|
|
* MIPS32 class processors
|
|
|
|
*/
|
2008-04-29 00:14:26 +08:00
|
|
|
CPU_4KC, CPU_4KEC, CPU_4KSC, CPU_24K, CPU_34K, CPU_1004K, CPU_74K,
|
2010-10-17 05:22:30 +08:00
|
|
|
CPU_ALCHEMY, CPU_PR4450, CPU_BMIPS32, CPU_BMIPS3300, CPU_BMIPS4350,
|
2019-11-04 14:11:20 +08:00
|
|
|
CPU_BMIPS4380, CPU_BMIPS5000, CPU_XBURST, CPU_LOONGSON32, CPU_M14KC,
|
2016-03-25 07:41:58 +08:00
|
|
|
CPU_M14KEC, CPU_INTERAPTIV, CPU_P5600, CPU_PROAPTIV, CPU_1074K,
|
2016-02-04 00:17:28 +08:00
|
|
|
CPU_M5150, CPU_I6400, CPU_P6600, CPU_M6250,
|
2007-10-12 06:46:16 +08:00
|
|
|
|
|
|
|
/*
|
|
|
|
* MIPS64 class processors
|
|
|
|
*/
|
2019-10-20 22:43:13 +08:00
|
|
|
CPU_5KC, CPU_5KE, CPU_20KC, CPU_25KF, CPU_SB1, CPU_SB1A, CPU_LOONGSON2EF,
|
|
|
|
CPU_LOONGSON64, CPU_CAVIUM_OCTEON, CPU_CAVIUM_OCTEON_PLUS,
|
2017-06-03 03:39:04 +08:00
|
|
|
CPU_CAVIUM_OCTEON2, CPU_CAVIUM_OCTEON3, CPU_XLR, CPU_XLP, CPU_I6500,
|
2007-10-12 06:46:16 +08:00
|
|
|
|
2014-10-27 18:12:23 +08:00
|
|
|
CPU_QEMU_GENERIC,
|
|
|
|
|
2007-10-12 06:46:16 +08:00
|
|
|
CPU_LAST
|
|
|
|
};
|
|
|
|
|
2013-12-18 21:12:00 +08:00
|
|
|
#endif /* !__ASSEMBLY */
|
2005-04-17 06:20:36 +08:00
|
|
|
|
|
|
|
/*
|
|
|
|
* ISA Level encodings
|
|
|
|
*
|
|
|
|
*/
|
2013-06-26 23:06:34 +08:00
|
|
|
#define MIPS_CPU_ISA_II 0x00000001
|
|
|
|
#define MIPS_CPU_ISA_III 0x00000002
|
|
|
|
#define MIPS_CPU_ISA_IV 0x00000004
|
|
|
|
#define MIPS_CPU_ISA_V 0x00000008
|
|
|
|
#define MIPS_CPU_ISA_M32R1 0x00000010
|
|
|
|
#define MIPS_CPU_ISA_M32R2 0x00000020
|
|
|
|
#define MIPS_CPU_ISA_M64R1 0x00000040
|
|
|
|
#define MIPS_CPU_ISA_M64R2 0x00000080
|
2014-11-13 19:49:21 +08:00
|
|
|
#define MIPS_CPU_ISA_M32R6 0x00000100
|
|
|
|
#define MIPS_CPU_ISA_M64R6 0x00000200
|
2013-06-26 23:06:34 +08:00
|
|
|
|
|
|
|
#define MIPS_CPU_ISA_32BIT (MIPS_CPU_ISA_II | MIPS_CPU_ISA_M32R1 | \
|
2014-11-13 19:49:21 +08:00
|
|
|
MIPS_CPU_ISA_M32R2 | MIPS_CPU_ISA_M32R6)
|
2005-12-09 20:20:49 +08:00
|
|
|
#define MIPS_CPU_ISA_64BIT (MIPS_CPU_ISA_III | MIPS_CPU_ISA_IV | \
|
2014-11-13 19:49:21 +08:00
|
|
|
MIPS_CPU_ISA_V | MIPS_CPU_ISA_M64R1 | MIPS_CPU_ISA_M64R2 | \
|
|
|
|
MIPS_CPU_ISA_M64R6)
|
2005-04-17 06:20:36 +08:00
|
|
|
|
|
|
|
/*
|
|
|
|
* CPU Option encodings
|
|
|
|
*/
|
2019-05-24 12:51:11 +08:00
|
|
|
#define MIPS_CPU_TLB BIT_ULL( 0) /* CPU has TLB */
|
|
|
|
#define MIPS_CPU_4KEX BIT_ULL( 1) /* "R4K" exception model */
|
|
|
|
#define MIPS_CPU_3K_CACHE BIT_ULL( 2) /* R3000-style caches */
|
|
|
|
#define MIPS_CPU_4K_CACHE BIT_ULL( 3) /* R4000-style caches */
|
|
|
|
#define MIPS_CPU_TX39_CACHE BIT_ULL( 4) /* TX3900-style caches */
|
|
|
|
#define MIPS_CPU_FPU BIT_ULL( 5) /* CPU has FPU */
|
|
|
|
#define MIPS_CPU_32FPR BIT_ULL( 6) /* 32 dbl. prec. FP registers */
|
|
|
|
#define MIPS_CPU_COUNTER BIT_ULL( 7) /* Cycle count/compare */
|
|
|
|
#define MIPS_CPU_WATCH BIT_ULL( 8) /* watchpoint registers */
|
|
|
|
#define MIPS_CPU_DIVEC BIT_ULL( 9) /* dedicated interrupt vector */
|
|
|
|
#define MIPS_CPU_VCE BIT_ULL(10) /* virt. coherence conflict possible */
|
|
|
|
#define MIPS_CPU_CACHE_CDEX_P BIT_ULL(11) /* Create_Dirty_Exclusive CACHE op */
|
|
|
|
#define MIPS_CPU_CACHE_CDEX_S BIT_ULL(12) /* ... same for seconary cache ... */
|
|
|
|
#define MIPS_CPU_MCHECK BIT_ULL(13) /* Machine check exception */
|
|
|
|
#define MIPS_CPU_EJTAG BIT_ULL(14) /* EJTAG exception */
|
|
|
|
#define MIPS_CPU_NOFPUEX BIT_ULL(15) /* no FPU exception */
|
|
|
|
#define MIPS_CPU_LLSC BIT_ULL(16) /* CPU has ll/sc instructions */
|
|
|
|
#define MIPS_CPU_INCLUSIVE_CACHES BIT_ULL(17) /* P-cache subset enforced */
|
|
|
|
#define MIPS_CPU_PREFETCH BIT_ULL(18) /* CPU has usable prefetch */
|
|
|
|
#define MIPS_CPU_VINT BIT_ULL(19) /* CPU supports MIPSR2 vectored interrupts */
|
|
|
|
#define MIPS_CPU_VEIC BIT_ULL(20) /* CPU supports MIPSR2 external interrupt controller mode */
|
|
|
|
#define MIPS_CPU_ULRI BIT_ULL(21) /* CPU has ULRI feature */
|
|
|
|
#define MIPS_CPU_PCI BIT_ULL(22) /* CPU has Perf Ctr Int indicator */
|
|
|
|
#define MIPS_CPU_RIXI BIT_ULL(23) /* CPU has TLB Read/eXec Inhibit */
|
|
|
|
#define MIPS_CPU_MICROMIPS BIT_ULL(24) /* CPU has microMIPS capability */
|
|
|
|
#define MIPS_CPU_TLBINV BIT_ULL(25) /* CPU supports TLBINV/F */
|
|
|
|
#define MIPS_CPU_SEGMENTS BIT_ULL(26) /* CPU supports Segmentation Control registers */
|
|
|
|
#define MIPS_CPU_EVA BIT_ULL(27) /* CPU supports Enhanced Virtual Addressing */
|
|
|
|
#define MIPS_CPU_HTW BIT_ULL(28) /* CPU support Hardware Page Table Walker */
|
|
|
|
#define MIPS_CPU_RIXIEX BIT_ULL(29) /* CPU has unique exception codes for {Read, Execute}-Inhibit exceptions */
|
|
|
|
#define MIPS_CPU_MAAR BIT_ULL(30) /* MAAR(I) registers are present */
|
|
|
|
#define MIPS_CPU_FRE BIT_ULL(31) /* FRE & UFE bits implemented */
|
|
|
|
#define MIPS_CPU_RW_LLB BIT_ULL(32) /* LLADDR/LLB writes are allowed */
|
|
|
|
#define MIPS_CPU_LPA BIT_ULL(33) /* CPU supports Large Physical Addressing */
|
|
|
|
#define MIPS_CPU_CDMM BIT_ULL(34) /* CPU has Common Device Memory Map */
|
|
|
|
#define MIPS_CPU_BP_GHIST BIT_ULL(35) /* R12K+ Branch Prediction Global History */
|
|
|
|
#define MIPS_CPU_SP BIT_ULL(36) /* Small (1KB) page support */
|
|
|
|
#define MIPS_CPU_FTLB BIT_ULL(37) /* CPU has Fixed-page-size TLB */
|
|
|
|
#define MIPS_CPU_NAN_LEGACY BIT_ULL(38) /* Legacy NaN implemented */
|
|
|
|
#define MIPS_CPU_NAN_2008 BIT_ULL(39) /* 2008 NaN implemented */
|
|
|
|
#define MIPS_CPU_VP BIT_ULL(40) /* MIPSr6 Virtual Processors (multi-threading) */
|
|
|
|
#define MIPS_CPU_LDPTE BIT_ULL(41) /* CPU has ldpte/lddir instructions */
|
|
|
|
#define MIPS_CPU_MVH BIT_ULL(42) /* CPU supports MFHC0/MTHC0 */
|
|
|
|
#define MIPS_CPU_EBASE_WG BIT_ULL(43) /* CPU has EBase.WG */
|
|
|
|
#define MIPS_CPU_BADINSTR BIT_ULL(44) /* CPU has BadInstr register */
|
|
|
|
#define MIPS_CPU_BADINSTRP BIT_ULL(45) /* CPU has BadInstrP register */
|
|
|
|
#define MIPS_CPU_CTXTC BIT_ULL(46) /* CPU has [X]ConfigContext registers */
|
|
|
|
#define MIPS_CPU_PERF BIT_ULL(47) /* CPU has MIPS performance counters */
|
|
|
|
#define MIPS_CPU_GUESTCTL0EXT BIT_ULL(48) /* CPU has VZ GuestCtl0Ext register */
|
|
|
|
#define MIPS_CPU_GUESTCTL1 BIT_ULL(49) /* CPU has VZ GuestCtl1 register */
|
|
|
|
#define MIPS_CPU_GUESTCTL2 BIT_ULL(50) /* CPU has VZ GuestCtl2 register */
|
|
|
|
#define MIPS_CPU_GUESTID BIT_ULL(51) /* CPU uses VZ ASE GuestID feature */
|
|
|
|
#define MIPS_CPU_DRG BIT_ULL(52) /* CPU has VZ Direct Root to Guest (DRG) */
|
|
|
|
#define MIPS_CPU_UFR BIT_ULL(53) /* CPU supports User mode FR switching */
|
2017-06-03 06:38:01 +08:00
|
|
|
#define MIPS_CPU_SHARED_FTLB_RAM \
|
2019-05-24 12:51:11 +08:00
|
|
|
BIT_ULL(54) /* CPU shares FTLB RAM with another */
|
2017-06-03 06:38:01 +08:00
|
|
|
#define MIPS_CPU_SHARED_FTLB_ENTRIES \
|
2019-05-24 12:51:11 +08:00
|
|
|
BIT_ULL(55) /* CPU shares FTLB entries with another */
|
2018-04-20 18:23:03 +08:00
|
|
|
#define MIPS_CPU_MT_PER_TC_PERF_COUNTERS \
|
2019-05-24 12:51:11 +08:00
|
|
|
BIT_ULL(56) /* CPU has perf counters implemented per TC (MIPSMT ASE) */
|
|
|
|
#define MIPS_CPU_MMID BIT_ULL(57) /* CPU supports MemoryMapIDs */
|
2020-01-13 18:16:11 +08:00
|
|
|
#define MIPS_CPU_MAC_2008_ONLY BIT_ULL(58) /* CPU Only support MAC2008 Fused multiply-add instruction */
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2005-05-06 00:45:59 +08:00
|
|
|
/*
|
|
|
|
* CPU ASE encodings
|
|
|
|
*/
|
|
|
|
#define MIPS_ASE_MIPS16 0x00000001 /* code compression */
|
|
|
|
#define MIPS_ASE_MDMX 0x00000002 /* MIPS digital media extension */
|
|
|
|
#define MIPS_ASE_MIPS3D 0x00000004 /* MIPS-3D */
|
|
|
|
#define MIPS_ASE_SMARTMIPS 0x00000008 /* SmartMIPS */
|
2005-05-31 19:49:19 +08:00
|
|
|
#define MIPS_ASE_DSP 0x00000010 /* Signal Processing ASE */
|
2005-07-14 15:34:18 +08:00
|
|
|
#define MIPS_ASE_MIPSMT 0x00000020 /* CPU supports MIPS MT */
|
2012-08-03 23:26:04 +08:00
|
|
|
#define MIPS_ASE_DSP2P 0x00000040 /* Signal Processing ASE Rev 2 */
|
2013-02-17 06:42:43 +08:00
|
|
|
#define MIPS_ASE_VZ 0x00000080 /* Virtualization ASE */
|
2014-01-27 23:23:10 +08:00
|
|
|
#define MIPS_ASE_MSA 0x00000100 /* MIPS SIMD Architecture */
|
2016-03-29 22:50:25 +08:00
|
|
|
#define MIPS_ASE_DSP3 0x00000200 /* Signal Processing ASE Rev 3*/
|
MIPS: MIPS16e2: Identify ASE presence
Identify the presence of the MIPS16e2 ASE as per the architecture
specification[1], by checking for CP0 Config5.CA2 bit being 1[2].
References:
[1] "MIPS32 Architecture for Programmers: MIPS16e2 Application-Specific
Extension Technical Reference Manual", Imagination Technologies
Ltd., Document Number: MD01172, Revision 01.00, April 26, 2016,
Section 1.2 "Software Detection of the ASE", p. 5
[2] "MIPS32 interAptiv Multiprocessing System Software User's Manual",
Imagination Technologies Ltd., Document Number: MD00904, Revision
02.01, June 15, 2016, Section 2.2.1.6 "Device Configuration 5 --
Config5 (CP0 Register 16, Select 5)", pp. 71-72
Signed-off-by: Maciej W. Rozycki <macro@imgtec.com>
Reviewed-by: James Hogan <james.hogan@imgtec.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/16094/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
2017-05-23 20:37:05 +08:00
|
|
|
#define MIPS_ASE_MIPS16E2 0x00000400 /* MIPS16e2 */
|
2019-05-29 16:42:59 +08:00
|
|
|
#define MIPS_ASE_LOONGSON_MMI 0x00000800 /* Loongson MultiMedia extensions Instructions */
|
|
|
|
#define MIPS_ASE_LOONGSON_CAM 0x00001000 /* Loongson CAM */
|
|
|
|
#define MIPS_ASE_LOONGSON_EXT 0x00002000 /* Loongson EXTensions */
|
|
|
|
#define MIPS_ASE_LOONGSON_EXT2 0x00004000 /* Loongson EXTensions R2 */
|
2005-05-06 00:45:59 +08:00
|
|
|
|
2005-04-17 06:20:36 +08:00
|
|
|
#endif /* _ASM_CPU_H */
|