mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-20 14:16:02 +00:00
![Greg Kroah-Hartman](/assets/img/avatar_default.png)
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>
267 lines
8.1 KiB
C
267 lines
8.1 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
*Copyright (C) 2004 Konrad Eisele (eiselekd@web.de,konrad@gaisler.com), Gaisler Research
|
|
*Copyright (C) 2004 Stefan Holst (mail@s-holst.de), Uni-Stuttgart
|
|
*Copyright (C) 2009 Daniel Hellstrom (daniel@gaisler.com),Konrad Eisele (konrad@gaisler.com) Aeroflex Gaisler AB
|
|
*/
|
|
|
|
#ifndef LEON_AMBA_H_INCLUDE
|
|
#define LEON_AMBA_H_INCLUDE
|
|
|
|
#ifndef __ASSEMBLY__
|
|
|
|
struct amba_prom_registers {
|
|
unsigned int phys_addr; /* The physical address of this register */
|
|
unsigned int reg_size; /* How many bytes does this register take up? */
|
|
};
|
|
|
|
#endif
|
|
|
|
/*
|
|
* The following defines the bits in the LEON UART Status Registers.
|
|
*/
|
|
|
|
#define LEON_REG_UART_STATUS_DR 0x00000001 /* Data Ready */
|
|
#define LEON_REG_UART_STATUS_TSE 0x00000002 /* TX Send Register Empty */
|
|
#define LEON_REG_UART_STATUS_THE 0x00000004 /* TX Hold Register Empty */
|
|
#define LEON_REG_UART_STATUS_BR 0x00000008 /* Break Error */
|
|
#define LEON_REG_UART_STATUS_OE 0x00000010 /* RX Overrun Error */
|
|
#define LEON_REG_UART_STATUS_PE 0x00000020 /* RX Parity Error */
|
|
#define LEON_REG_UART_STATUS_FE 0x00000040 /* RX Framing Error */
|
|
#define LEON_REG_UART_STATUS_ERR 0x00000078 /* Error Mask */
|
|
|
|
/*
|
|
* The following defines the bits in the LEON UART Ctrl Registers.
|
|
*/
|
|
|
|
#define LEON_REG_UART_CTRL_RE 0x00000001 /* Receiver enable */
|
|
#define LEON_REG_UART_CTRL_TE 0x00000002 /* Transmitter enable */
|
|
#define LEON_REG_UART_CTRL_RI 0x00000004 /* Receiver interrupt enable */
|
|
#define LEON_REG_UART_CTRL_TI 0x00000008 /* Transmitter irq */
|
|
#define LEON_REG_UART_CTRL_PS 0x00000010 /* Parity select */
|
|
#define LEON_REG_UART_CTRL_PE 0x00000020 /* Parity enable */
|
|
#define LEON_REG_UART_CTRL_FL 0x00000040 /* Flow control enable */
|
|
#define LEON_REG_UART_CTRL_LB 0x00000080 /* Loop Back enable */
|
|
|
|
#define LEON3_GPTIMER_EN 1
|
|
#define LEON3_GPTIMER_RL 2
|
|
#define LEON3_GPTIMER_LD 4
|
|
#define LEON3_GPTIMER_IRQEN 8
|
|
#define LEON3_GPTIMER_SEPIRQ 8
|
|
#define LEON3_GPTIMER_TIMERS 0x7
|
|
|
|
#define LEON23_REG_TIMER_CONTROL_EN 0x00000001 /* 1 = enable counting */
|
|
/* 0 = hold scalar and counter */
|
|
#define LEON23_REG_TIMER_CONTROL_RL 0x00000002 /* 1 = reload at 0 */
|
|
/* 0 = stop at 0 */
|
|
#define LEON23_REG_TIMER_CONTROL_LD 0x00000004 /* 1 = load counter */
|
|
/* 0 = no function */
|
|
#define LEON23_REG_TIMER_CONTROL_IQ 0x00000008 /* 1 = irq enable */
|
|
/* 0 = no function */
|
|
|
|
/*
|
|
* The following defines the bits in the LEON PS/2 Status Registers.
|
|
*/
|
|
|
|
#define LEON_REG_PS2_STATUS_DR 0x00000001 /* Data Ready */
|
|
#define LEON_REG_PS2_STATUS_PE 0x00000002 /* Parity error */
|
|
#define LEON_REG_PS2_STATUS_FE 0x00000004 /* Framing error */
|
|
#define LEON_REG_PS2_STATUS_KI 0x00000008 /* Keyboard inhibit */
|
|
#define LEON_REG_PS2_STATUS_RF 0x00000010 /* RX buffer full */
|
|
#define LEON_REG_PS2_STATUS_TF 0x00000020 /* TX buffer full */
|
|
|
|
/*
|
|
* The following defines the bits in the LEON PS/2 Ctrl Registers.
|
|
*/
|
|
|
|
#define LEON_REG_PS2_CTRL_RE 0x00000001 /* Receiver enable */
|
|
#define LEON_REG_PS2_CTRL_TE 0x00000002 /* Transmitter enable */
|
|
#define LEON_REG_PS2_CTRL_RI 0x00000004 /* Keyboard receive irq */
|
|
#define LEON_REG_PS2_CTRL_TI 0x00000008 /* Keyboard transmit irq */
|
|
|
|
#define LEON3_IRQMPSTATUS_CPUNR 28
|
|
#define LEON3_IRQMPSTATUS_BROADCAST 27
|
|
|
|
#define GPTIMER_CONFIG_IRQNT(a) (((a) >> 3) & 0x1f)
|
|
#define GPTIMER_CONFIG_ISSEP(a) ((a) & (1 << 8))
|
|
#define GPTIMER_CONFIG_NTIMERS(a) ((a) & (0x7))
|
|
#define LEON3_GPTIMER_CTRL_PENDING 0x10
|
|
#define LEON3_GPTIMER_CONFIG_NRTIMERS(c) ((c)->config & 0x7)
|
|
#define LEON3_GPTIMER_CTRL_ISPENDING(r) (((r)&LEON3_GPTIMER_CTRL_PENDING) ? 1 : 0)
|
|
|
|
#ifndef __ASSEMBLY__
|
|
|
|
struct leon3_irqctrl_regs_map {
|
|
u32 ilevel;
|
|
u32 ipend;
|
|
u32 iforce;
|
|
u32 iclear;
|
|
u32 mpstatus;
|
|
u32 mpbroadcast;
|
|
u32 notused02;
|
|
u32 notused03;
|
|
u32 ampctrl;
|
|
u32 icsel[2];
|
|
u32 notused13;
|
|
u32 notused20;
|
|
u32 notused21;
|
|
u32 notused22;
|
|
u32 notused23;
|
|
u32 mask[16];
|
|
u32 force[16];
|
|
/* Extended IRQ registers */
|
|
u32 intid[16]; /* 0xc0 */
|
|
u32 unused[(0x1000-0x100)/4];
|
|
};
|
|
|
|
struct leon3_apbuart_regs_map {
|
|
u32 data;
|
|
u32 status;
|
|
u32 ctrl;
|
|
u32 scaler;
|
|
};
|
|
|
|
struct leon3_gptimerelem_regs_map {
|
|
u32 val;
|
|
u32 rld;
|
|
u32 ctrl;
|
|
u32 unused;
|
|
};
|
|
|
|
struct leon3_gptimer_regs_map {
|
|
u32 scalar;
|
|
u32 scalar_reload;
|
|
u32 config;
|
|
u32 unused;
|
|
struct leon3_gptimerelem_regs_map e[8];
|
|
};
|
|
|
|
/*
|
|
* Types and structure used for AMBA Plug & Play bus scanning
|
|
*/
|
|
|
|
#define AMBA_MAXAPB_DEVS 64
|
|
#define AMBA_MAXAPB_DEVS_PERBUS 16
|
|
|
|
struct amba_device_table {
|
|
int devnr; /* number of devices on AHB or APB bus */
|
|
unsigned int *addr[16]; /* addresses to the devices configuration tables */
|
|
unsigned int allocbits[1]; /* 0=unallocated, 1=allocated driver */
|
|
};
|
|
|
|
struct amba_apbslv_device_table {
|
|
int devnr; /* number of devices on AHB or APB bus */
|
|
unsigned int *addr[AMBA_MAXAPB_DEVS]; /* addresses to the devices configuration tables */
|
|
unsigned int apbmst[AMBA_MAXAPB_DEVS]; /* apb master if a entry is a apb slave */
|
|
unsigned int apbmstidx[AMBA_MAXAPB_DEVS]; /* apb master idx if a entry is a apb slave */
|
|
unsigned int allocbits[4]; /* 0=unallocated, 1=allocated driver */
|
|
};
|
|
|
|
struct amba_confarea_type {
|
|
struct amba_confarea_type *next;/* next bus in chain */
|
|
struct amba_device_table ahbmst;
|
|
struct amba_device_table ahbslv;
|
|
struct amba_apbslv_device_table apbslv;
|
|
unsigned int apbmst;
|
|
};
|
|
|
|
/* collect apb slaves */
|
|
struct amba_apb_device {
|
|
unsigned int start, irq, bus_id;
|
|
struct amba_confarea_type *bus;
|
|
};
|
|
|
|
/* collect ahb slaves */
|
|
struct amba_ahb_device {
|
|
unsigned int start[4], irq, bus_id;
|
|
struct amba_confarea_type *bus;
|
|
};
|
|
|
|
struct device_node;
|
|
void _amba_init(struct device_node *dp, struct device_node ***nextp);
|
|
|
|
extern unsigned long amba_system_id;
|
|
extern struct leon3_irqctrl_regs_map *leon3_irqctrl_regs;
|
|
extern struct leon3_gptimer_regs_map *leon3_gptimer_regs;
|
|
extern struct amba_apb_device leon_percpu_timer_dev[16];
|
|
extern int leondebug_irq_disable;
|
|
extern int leon_debug_irqout;
|
|
extern unsigned long leon3_gptimer_irq;
|
|
extern unsigned int sparc_leon_eirq;
|
|
|
|
#endif /* __ASSEMBLY__ */
|
|
|
|
#define LEON3_IO_AREA 0xfff00000
|
|
#define LEON3_CONF_AREA 0xff000
|
|
#define LEON3_AHB_SLAVE_CONF_AREA (1 << 11)
|
|
|
|
#define LEON3_AHB_CONF_WORDS 8
|
|
#define LEON3_APB_CONF_WORDS 2
|
|
#define LEON3_AHB_MASTERS 16
|
|
#define LEON3_AHB_SLAVES 16
|
|
#define LEON3_APB_SLAVES 16
|
|
#define LEON3_APBUARTS 8
|
|
|
|
/* Vendor codes */
|
|
#define VENDOR_GAISLER 1
|
|
#define VENDOR_PENDER 2
|
|
#define VENDOR_ESA 4
|
|
#define VENDOR_OPENCORES 8
|
|
|
|
/* Gaisler Research device id's */
|
|
#define GAISLER_LEON3 0x003
|
|
#define GAISLER_LEON3DSU 0x004
|
|
#define GAISLER_ETHAHB 0x005
|
|
#define GAISLER_APBMST 0x006
|
|
#define GAISLER_AHBUART 0x007
|
|
#define GAISLER_SRCTRL 0x008
|
|
#define GAISLER_SDCTRL 0x009
|
|
#define GAISLER_APBUART 0x00C
|
|
#define GAISLER_IRQMP 0x00D
|
|
#define GAISLER_AHBRAM 0x00E
|
|
#define GAISLER_GPTIMER 0x011
|
|
#define GAISLER_PCITRG 0x012
|
|
#define GAISLER_PCISBRG 0x013
|
|
#define GAISLER_PCIFBRG 0x014
|
|
#define GAISLER_PCITRACE 0x015
|
|
#define GAISLER_PCIDMA 0x016
|
|
#define GAISLER_AHBTRACE 0x017
|
|
#define GAISLER_ETHDSU 0x018
|
|
#define GAISLER_PIOPORT 0x01A
|
|
#define GAISLER_GRGPIO 0x01A
|
|
#define GAISLER_AHBJTAG 0x01c
|
|
#define GAISLER_ETHMAC 0x01D
|
|
#define GAISLER_AHB2AHB 0x020
|
|
#define GAISLER_USBDC 0x021
|
|
#define GAISLER_ATACTRL 0x024
|
|
#define GAISLER_DDRSPA 0x025
|
|
#define GAISLER_USBEHC 0x026
|
|
#define GAISLER_USBUHC 0x027
|
|
#define GAISLER_I2CMST 0x028
|
|
#define GAISLER_SPICTRL 0x02D
|
|
#define GAISLER_DDR2SPA 0x02E
|
|
#define GAISLER_SPIMCTRL 0x045
|
|
#define GAISLER_LEON4 0x048
|
|
#define GAISLER_LEON4DSU 0x049
|
|
#define GAISLER_AHBSTAT 0x052
|
|
#define GAISLER_FTMCTRL 0x054
|
|
#define GAISLER_KBD 0x060
|
|
#define GAISLER_VGA 0x061
|
|
#define GAISLER_SVGA 0x063
|
|
#define GAISLER_GRSYSMON 0x066
|
|
#define GAISLER_GRACECTRL 0x067
|
|
|
|
#define GAISLER_L2TIME 0xffd /* internal device: leon2 timer */
|
|
#define GAISLER_L2C 0xffe /* internal device: leon2compat */
|
|
#define GAISLER_PLUGPLAY 0xfff /* internal device: plug & play configarea */
|
|
|
|
/* Chip IDs */
|
|
#define AEROFLEX_UT699 0x0699
|
|
#define LEON4_NEXTREME1 0x0102
|
|
#define GAISLER_GR712RC 0x0712
|
|
|
|
#define amba_vendor(x) (((x) >> 24) & 0xff)
|
|
|
|
#define amba_device(x) (((x) >> 12) & 0xfff)
|
|
|
|
#endif
|