mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-23 12:14:10 +08:00
b24413180f
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>
183 lines
9.4 KiB
C
183 lines
9.4 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef __PCI_SH4_H
|
|
#define __PCI_SH4_H
|
|
|
|
#if defined(CONFIG_CPU_SUBTYPE_SH7780) || \
|
|
defined(CONFIG_CPU_SUBTYPE_SH7785) || \
|
|
defined(CONFIG_CPU_SUBTYPE_SH7763)
|
|
#include "pci-sh7780.h"
|
|
#else
|
|
#include "pci-sh7751.h"
|
|
#endif
|
|
|
|
#include <asm/io.h>
|
|
|
|
#define SH4_PCICR 0x100 /* PCI Control Register */
|
|
#define SH4_PCICR_PREFIX 0xA5000000 /* CR prefix for write */
|
|
#define SH4_PCICR_FTO 0x00000400 /* TRDY/IRDY Enable */
|
|
#define SH4_PCICR_TRSB 0x00000200 /* Target Read Single */
|
|
#define SH4_PCICR_BSWP 0x00000100 /* Target Byte Swap */
|
|
#define SH4_PCICR_PLUP 0x00000080 /* Enable PCI Pullup */
|
|
#define SH4_PCICR_ARBM 0x00000040 /* PCI Arbitration Mode */
|
|
#define SH4_PCICR_MD 0x00000030 /* MD9 and MD10 status */
|
|
#define SH4_PCICR_SERR 0x00000008 /* SERR output assert */
|
|
#define SH4_PCICR_INTA 0x00000004 /* INTA output assert */
|
|
#define SH4_PCICR_PRST 0x00000002 /* PCI Reset Assert */
|
|
#define SH4_PCICR_CFIN 0x00000001 /* Central Fun. Init Done */
|
|
#define SH4_PCILSR0 0x104 /* PCI Local Space Register0 */
|
|
#define SH4_PCILSR1 0x108 /* PCI Local Space Register1 */
|
|
#define SH4_PCILAR0 0x10C /* PCI Local Addr Register1 */
|
|
#define SH4_PCILAR1 0x110 /* PCI Local Addr Register1 */
|
|
#define SH4_PCIINT 0x114 /* PCI Interrupt Register */
|
|
#define SH4_PCIINT_MLCK 0x00008000 /* Master Lock Error */
|
|
#define SH4_PCIINT_TABT 0x00004000 /* Target Abort Error */
|
|
#define SH4_PCIINT_TRET 0x00000200 /* Target Retry Error */
|
|
#define SH4_PCIINT_MFDE 0x00000100 /* Master Func. Disable Error */
|
|
#define SH4_PCIINT_PRTY 0x00000080 /* Address Parity Error */
|
|
#define SH4_PCIINT_SERR 0x00000040 /* SERR Detection Error */
|
|
#define SH4_PCIINT_TWDP 0x00000020 /* Tgt. Write Parity Error */
|
|
#define SH4_PCIINT_TRDP 0x00000010 /* Tgt. Read Parity Err Det. */
|
|
#define SH4_PCIINT_MTABT 0x00000008 /* Master-Tgt. Abort Error */
|
|
#define SH4_PCIINT_MMABT 0x00000004 /* Master-Master Abort Error */
|
|
#define SH4_PCIINT_MWPD 0x00000002 /* Master Write PERR Detect */
|
|
#define SH4_PCIINT_MRPD 0x00000001 /* Master Read PERR Detect */
|
|
#define SH4_PCIINTM 0x118 /* PCI Interrupt Mask */
|
|
#define SH4_PCIINTM_TTADIM BIT(14) /* Target-target abort interrupt */
|
|
#define SH4_PCIINTM_TMTOIM BIT(9) /* Target retry timeout */
|
|
#define SH4_PCIINTM_MDEIM BIT(8) /* Master function disable error */
|
|
#define SH4_PCIINTM_APEDIM BIT(7) /* Address parity error detection */
|
|
#define SH4_PCIINTM_SDIM BIT(6) /* SERR detection */
|
|
#define SH4_PCIINTM_DPEITWM BIT(5) /* Data parity error for target write */
|
|
#define SH4_PCIINTM_PEDITRM BIT(4) /* PERR detection for target read */
|
|
#define SH4_PCIINTM_TADIMM BIT(3) /* Target abort for master */
|
|
#define SH4_PCIINTM_MADIMM BIT(2) /* Master abort for master */
|
|
#define SH4_PCIINTM_MWPDIM BIT(1) /* Master write data parity error */
|
|
#define SH4_PCIINTM_MRDPEIM BIT(0) /* Master read data parity error */
|
|
#define SH4_PCIALR 0x11C /* Error Address Register */
|
|
#define SH4_PCICLR 0x120 /* Error Command/Data */
|
|
#define SH4_PCICLR_MPIO 0x80000000
|
|
#define SH4_PCICLR_MDMA0 0x40000000 /* DMA0 Transfer Error */
|
|
#define SH4_PCICLR_MDMA1 0x20000000 /* DMA1 Transfer Error */
|
|
#define SH4_PCICLR_MDMA2 0x10000000 /* DMA2 Transfer Error */
|
|
#define SH4_PCICLR_MDMA3 0x08000000 /* DMA3 Transfer Error */
|
|
#define SH4_PCICLR_TGT 0x04000000 /* Target Transfer Error */
|
|
#define SH4_PCICLR_CMDL 0x0000000F /* PCI Command at Error */
|
|
#define SH4_PCIAINT 0x130 /* Arbiter Interrupt Register */
|
|
#define SH4_PCIAINT_MBKN 0x00002000 /* Master Broken Interrupt */
|
|
#define SH4_PCIAINT_TBTO 0x00001000 /* Target Bus Time Out */
|
|
#define SH4_PCIAINT_MBTO 0x00000800 /* Master Bus Time Out */
|
|
#define SH4_PCIAINT_TABT 0x00000008 /* Target Abort */
|
|
#define SH4_PCIAINT_MABT 0x00000004 /* Master Abort */
|
|
#define SH4_PCIAINT_RDPE 0x00000002 /* Read Data Parity Error */
|
|
#define SH4_PCIAINT_WDPE 0x00000001 /* Write Data Parity Error */
|
|
#define SH4_PCIAINTM 0x134 /* Arbiter Int. Mask Register */
|
|
#define SH4_PCIBMLR 0x138 /* Error Bus Master Register */
|
|
#define SH4_PCIBMLR_REQ4 0x00000010 /* REQ4 bus master at error */
|
|
#define SH4_PCIBMLR_REQ3 0x00000008 /* REQ3 bus master at error */
|
|
#define SH4_PCIBMLR_REQ2 0x00000004 /* REQ2 bus master at error */
|
|
#define SH4_PCIBMLR_REQ1 0x00000002 /* REQ1 bus master at error */
|
|
#define SH4_PCIBMLR_REQ0 0x00000001 /* REQ0 bus master at error */
|
|
#define SH4_PCIDMABT 0x140 /* DMA Transfer Arb. Register */
|
|
#define SH4_PCIDMABT_RRBN 0x00000001 /* DMA Arbitor Round-Robin */
|
|
#define SH4_PCIDPA0 0x180 /* DMA0 Transfer Addr. */
|
|
#define SH4_PCIDLA0 0x184 /* DMA0 Local Addr. */
|
|
#define SH4_PCIDTC0 0x188 /* DMA0 Transfer Cnt. */
|
|
#define SH4_PCIDCR0 0x18C /* DMA0 Control Register */
|
|
#define SH4_PCIDCR_ALGN 0x00000600 /* DMA Alignment Mode */
|
|
#define SH4_PCIDCR_MAST 0x00000100 /* DMA Termination Type */
|
|
#define SH4_PCIDCR_INTM 0x00000080 /* DMA Interrupt Done Mask*/
|
|
#define SH4_PCIDCR_INTS 0x00000040 /* DMA Interrupt Done Status */
|
|
#define SH4_PCIDCR_LHLD 0x00000020 /* Local Address Control */
|
|
#define SH4_PCIDCR_PHLD 0x00000010 /* PCI Address Control*/
|
|
#define SH4_PCIDCR_IOSEL 0x00000008 /* PCI Address Space Type */
|
|
#define SH4_PCIDCR_DIR 0x00000004 /* DMA Transfer Direction */
|
|
#define SH4_PCIDCR_STOP 0x00000002 /* Force DMA Stop */
|
|
#define SH4_PCIDCR_STRT 0x00000001 /* DMA Start */
|
|
#define SH4_PCIDPA1 0x190 /* DMA1 Transfer Addr. */
|
|
#define SH4_PCIDLA1 0x194 /* DMA1 Local Addr. */
|
|
#define SH4_PCIDTC1 0x198 /* DMA1 Transfer Cnt. */
|
|
#define SH4_PCIDCR1 0x19C /* DMA1 Control Register */
|
|
#define SH4_PCIDPA2 0x1A0 /* DMA2 Transfer Addr. */
|
|
#define SH4_PCIDLA2 0x1A4 /* DMA2 Local Addr. */
|
|
#define SH4_PCIDTC2 0x1A8 /* DMA2 Transfer Cnt. */
|
|
#define SH4_PCIDCR2 0x1AC /* DMA2 Control Register */
|
|
#define SH4_PCIDPA3 0x1B0 /* DMA3 Transfer Addr. */
|
|
#define SH4_PCIDLA3 0x1B4 /* DMA3 Local Addr. */
|
|
#define SH4_PCIDTC3 0x1B8 /* DMA3 Transfer Cnt. */
|
|
#define SH4_PCIDCR3 0x1BC /* DMA3 Control Register */
|
|
#define SH4_PCIPAR 0x1C0 /* PIO Address Register */
|
|
#define SH4_PCIPAR_CFGEN 0x80000000 /* Configuration Enable */
|
|
#define SH4_PCIPAR_BUSNO 0x00FF0000 /* Config. Bus Number */
|
|
#define SH4_PCIPAR_DEVNO 0x0000FF00 /* Config. Device Number */
|
|
#define SH4_PCIPAR_REGAD 0x000000FC /* Register Address Number */
|
|
#define SH4_PCIMBR 0x1C4 /* Memory Base Address */
|
|
#define SH4_PCIMBR_MASK 0xFF000000 /* Memory Space Mask */
|
|
#define SH4_PCIMBR_LOCK 0x00000001 /* Lock Memory Space */
|
|
#define SH4_PCIIOBR 0x1C8 /* I/O Base Address Register */
|
|
#define SH4_PCIIOBR_MASK 0xFFFC0000 /* IO Space Mask */
|
|
#define SH4_PCIIOBR_LOCK 0x00000001 /* Lock IO Space */
|
|
#define SH4_PCIPINT 0x1CC /* Power Mgmnt Int. Register */
|
|
#define SH4_PCIPINT_D3 0x00000002 /* D3 Pwr Mgmt. Interrupt */
|
|
#define SH4_PCIPINT_D0 0x00000001 /* D0 Pwr Mgmt. Interrupt */
|
|
#define SH4_PCIPINTM 0x1D0 /* Power Mgmnt Mask Register */
|
|
#define SH4_PCICLKR 0x1D4 /* Clock Ctrl. Register */
|
|
#define SH4_PCICLKR_PCSTP 0x00000002 /* PCI Clock Stop */
|
|
#define SH4_PCICLKR_BCSTP 0x00000001 /* BCLK Clock Stop */
|
|
/* For definitions of BCR, MCR see ... */
|
|
#define SH4_PCIBCR1 0x1E0 /* Memory BCR1 Register */
|
|
#define SH4_PCIMBR0 SH4_PCIBCR1
|
|
#define SH4_PCIBCR2 0x1E4 /* Memory BCR2 Register */
|
|
#define SH4_PCIMBMR0 SH4_PCIBCR2
|
|
#define SH4_PCIWCR1 0x1E8 /* Wait Control 1 Register */
|
|
#define SH4_PCIWCR2 0x1EC /* Wait Control 2 Register */
|
|
#define SH4_PCIWCR3 0x1F0 /* Wait Control 3 Register */
|
|
#define SH4_PCIMBR2 SH4_PCIWCR3
|
|
#define SH4_PCIMCR 0x1F4 /* Memory Control Register */
|
|
#define SH4_PCIBCR3 0x1f8 /* Memory BCR3 Register */
|
|
#define SH4_PCIPCTR 0x200 /* Port Control Register */
|
|
#define SH4_PCIPCTR_P2EN 0x000400000 /* Port 2 Enable */
|
|
#define SH4_PCIPCTR_P1EN 0x000200000 /* Port 1 Enable */
|
|
#define SH4_PCIPCTR_P0EN 0x000100000 /* Port 0 Enable */
|
|
#define SH4_PCIPCTR_P2UP 0x000000020 /* Port2 Pull Up Enable */
|
|
#define SH4_PCIPCTR_P2IO 0x000000010 /* Port2 Output Enable */
|
|
#define SH4_PCIPCTR_P1UP 0x000000008 /* Port1 Pull Up Enable */
|
|
#define SH4_PCIPCTR_P1IO 0x000000004 /* Port1 Output Enable */
|
|
#define SH4_PCIPCTR_P0UP 0x000000002 /* Port0 Pull Up Enable */
|
|
#define SH4_PCIPCTR_P0IO 0x000000001 /* Port0 Output Enable */
|
|
#define SH4_PCIPDTR 0x204 /* Port Data Register */
|
|
#define SH4_PCIPDTR_PB5 0x000000020 /* Port 5 Enable */
|
|
#define SH4_PCIPDTR_PB4 0x000000010 /* Port 4 Enable */
|
|
#define SH4_PCIPDTR_PB3 0x000000008 /* Port 3 Enable */
|
|
#define SH4_PCIPDTR_PB2 0x000000004 /* Port 2 Enable */
|
|
#define SH4_PCIPDTR_PB1 0x000000002 /* Port 1 Enable */
|
|
#define SH4_PCIPDTR_PB0 0x000000001 /* Port 0 Enable */
|
|
#define SH4_PCIPDR 0x220 /* Port IO Data Register */
|
|
|
|
/* arch/sh/kernel/drivers/pci/ops-sh4.c */
|
|
extern struct pci_ops sh4_pci_ops;
|
|
int pci_fixup_pcic(struct pci_channel *chan);
|
|
|
|
struct sh4_pci_address_space {
|
|
unsigned long base;
|
|
unsigned long size;
|
|
};
|
|
|
|
struct sh4_pci_address_map {
|
|
struct sh4_pci_address_space window0;
|
|
struct sh4_pci_address_space window1;
|
|
};
|
|
|
|
static inline void pci_write_reg(struct pci_channel *chan,
|
|
unsigned long val, unsigned long reg)
|
|
{
|
|
__raw_writel(val, chan->reg_base + reg);
|
|
}
|
|
|
|
static inline unsigned long pci_read_reg(struct pci_channel *chan,
|
|
unsigned long reg)
|
|
{
|
|
return __raw_readl(chan->reg_base + reg);
|
|
}
|
|
|
|
#endif /* __PCI_SH4_H */
|