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 */
|
2013-12-18 22:23:38 +08:00
|
|
|
#ifndef __SDHCI_PCI_H
|
|
|
|
#define __SDHCI_PCI_H
|
|
|
|
|
|
|
|
/*
|
2017-05-16 05:44:17 +08:00
|
|
|
* PCI device IDs, sub IDs
|
2013-12-18 22:23:38 +08:00
|
|
|
*/
|
|
|
|
|
2017-10-19 20:04:13 +08:00
|
|
|
#define PCI_DEVICE_ID_O2_SDS0 0x8420
|
|
|
|
#define PCI_DEVICE_ID_O2_SDS1 0x8421
|
|
|
|
#define PCI_DEVICE_ID_O2_FUJIN2 0x8520
|
|
|
|
#define PCI_DEVICE_ID_O2_SEABIRD0 0x8620
|
|
|
|
#define PCI_DEVICE_ID_O2_SEABIRD1 0x8621
|
|
|
|
|
2013-12-18 22:23:38 +08:00
|
|
|
#define PCI_DEVICE_ID_INTEL_PCH_SDIO0 0x8809
|
|
|
|
#define PCI_DEVICE_ID_INTEL_PCH_SDIO1 0x880a
|
|
|
|
#define PCI_DEVICE_ID_INTEL_BYT_EMMC 0x0f14
|
|
|
|
#define PCI_DEVICE_ID_INTEL_BYT_SDIO 0x0f15
|
|
|
|
#define PCI_DEVICE_ID_INTEL_BYT_SD 0x0f16
|
|
|
|
#define PCI_DEVICE_ID_INTEL_BYT_EMMC2 0x0f50
|
2014-08-20 18:27:44 +08:00
|
|
|
#define PCI_DEVICE_ID_INTEL_BSW_EMMC 0x2294
|
|
|
|
#define PCI_DEVICE_ID_INTEL_BSW_SDIO 0x2295
|
|
|
|
#define PCI_DEVICE_ID_INTEL_BSW_SD 0x2296
|
2016-07-12 19:03:42 +08:00
|
|
|
#define PCI_DEVICE_ID_INTEL_MRFLD_MMC 0x1190
|
2013-12-18 22:23:38 +08:00
|
|
|
#define PCI_DEVICE_ID_INTEL_CLV_SDIO0 0x08f9
|
|
|
|
#define PCI_DEVICE_ID_INTEL_CLV_SDIO1 0x08fa
|
|
|
|
#define PCI_DEVICE_ID_INTEL_CLV_SDIO2 0x08fb
|
|
|
|
#define PCI_DEVICE_ID_INTEL_CLV_EMMC0 0x08e5
|
|
|
|
#define PCI_DEVICE_ID_INTEL_CLV_EMMC1 0x08e6
|
2014-06-24 21:56:36 +08:00
|
|
|
#define PCI_DEVICE_ID_INTEL_QRK_SD 0x08A7
|
2015-01-05 20:47:58 +08:00
|
|
|
#define PCI_DEVICE_ID_INTEL_SPT_EMMC 0x9d2b
|
|
|
|
#define PCI_DEVICE_ID_INTEL_SPT_SDIO 0x9d2c
|
|
|
|
#define PCI_DEVICE_ID_INTEL_SPT_SD 0x9d2d
|
2015-10-06 15:26:21 +08:00
|
|
|
#define PCI_DEVICE_ID_INTEL_DNV_EMMC 0x19db
|
2017-09-18 20:17:05 +08:00
|
|
|
#define PCI_DEVICE_ID_INTEL_CDF_EMMC 0x18db
|
2015-10-21 16:15:45 +08:00
|
|
|
#define PCI_DEVICE_ID_INTEL_BXT_SD 0x0aca
|
|
|
|
#define PCI_DEVICE_ID_INTEL_BXT_EMMC 0x0acc
|
|
|
|
#define PCI_DEVICE_ID_INTEL_BXT_SDIO 0x0ad0
|
2016-04-04 17:40:37 +08:00
|
|
|
#define PCI_DEVICE_ID_INTEL_BXTM_SD 0x1aca
|
|
|
|
#define PCI_DEVICE_ID_INTEL_BXTM_EMMC 0x1acc
|
|
|
|
#define PCI_DEVICE_ID_INTEL_BXTM_SDIO 0x1ad0
|
2015-10-21 16:15:45 +08:00
|
|
|
#define PCI_DEVICE_ID_INTEL_APL_SD 0x5aca
|
|
|
|
#define PCI_DEVICE_ID_INTEL_APL_EMMC 0x5acc
|
|
|
|
#define PCI_DEVICE_ID_INTEL_APL_SDIO 0x5ad0
|
2016-11-22 17:03:37 +08:00
|
|
|
#define PCI_DEVICE_ID_INTEL_GLK_SD 0x31ca
|
|
|
|
#define PCI_DEVICE_ID_INTEL_GLK_EMMC 0x31cc
|
|
|
|
#define PCI_DEVICE_ID_INTEL_GLK_SDIO 0x31d0
|
2017-06-01 17:10:07 +08:00
|
|
|
#define PCI_DEVICE_ID_INTEL_CNP_EMMC 0x9dc4
|
|
|
|
#define PCI_DEVICE_ID_INTEL_CNP_SD 0x9df5
|
|
|
|
#define PCI_DEVICE_ID_INTEL_CNPH_SD 0xa375
|
2018-06-20 14:23:13 +08:00
|
|
|
#define PCI_DEVICE_ID_INTEL_ICP_EMMC 0x34c4
|
|
|
|
#define PCI_DEVICE_ID_INTEL_ICP_SD 0x34f8
|
2013-12-18 22:23:38 +08:00
|
|
|
|
2017-05-16 05:44:17 +08:00
|
|
|
#define PCI_DEVICE_ID_SYSKONNECT_8000 0x8000
|
|
|
|
#define PCI_DEVICE_ID_VIA_95D0 0x95d0
|
|
|
|
#define PCI_DEVICE_ID_REALTEK_5250 0x5250
|
|
|
|
|
|
|
|
#define PCI_SUBDEVICE_ID_NI_7884 0x7884
|
2018-04-14 05:54:58 +08:00
|
|
|
#define PCI_SUBDEVICE_ID_NI_78E3 0x78e3
|
2017-05-16 05:44:17 +08:00
|
|
|
|
2018-01-04 12:17:36 +08:00
|
|
|
#define PCI_VENDOR_ID_ARASAN 0x16e6
|
|
|
|
#define PCI_DEVICE_ID_ARASAN_PHY_EMMC 0x0670
|
|
|
|
|
2018-07-11 15:56:17 +08:00
|
|
|
#define PCI_DEVICE_ID_SYNOPSYS_DWC_MSHC 0xc202
|
|
|
|
|
2017-05-16 05:44:17 +08:00
|
|
|
/*
|
|
|
|
* PCI device class and mask
|
|
|
|
*/
|
|
|
|
|
|
|
|
#define SYSTEM_SDHCI (PCI_CLASS_SYSTEM_SDHCI << 8)
|
|
|
|
#define PCI_CLASS_MASK 0xFFFF00
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Macros for PCI device-description
|
|
|
|
*/
|
|
|
|
|
|
|
|
#define _PCI_VEND(vend) PCI_VENDOR_ID_##vend
|
|
|
|
#define _PCI_DEV(vend, dev) PCI_DEVICE_ID_##vend##_##dev
|
|
|
|
#define _PCI_SUBDEV(subvend, subdev) PCI_SUBDEVICE_ID_##subvend##_##subdev
|
|
|
|
|
|
|
|
#define SDHCI_PCI_DEVICE(vend, dev, cfg) { \
|
|
|
|
.vendor = _PCI_VEND(vend), .device = _PCI_DEV(vend, dev), \
|
|
|
|
.subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID, \
|
|
|
|
.driver_data = (kernel_ulong_t)&(sdhci_##cfg) \
|
|
|
|
}
|
|
|
|
|
|
|
|
#define SDHCI_PCI_SUBDEVICE(vend, dev, subvend, subdev, cfg) { \
|
|
|
|
.vendor = _PCI_VEND(vend), .device = _PCI_DEV(vend, dev), \
|
|
|
|
.subvendor = _PCI_VEND(subvend), \
|
|
|
|
.subdevice = _PCI_SUBDEV(subvend, subdev), \
|
|
|
|
.driver_data = (kernel_ulong_t)&(sdhci_##cfg) \
|
|
|
|
}
|
|
|
|
|
|
|
|
#define SDHCI_PCI_DEVICE_CLASS(vend, cl, cl_msk, cfg) { \
|
|
|
|
.vendor = _PCI_VEND(vend), .device = PCI_ANY_ID, \
|
|
|
|
.subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID, \
|
|
|
|
.class = (cl), .class_mask = (cl_msk), \
|
|
|
|
.driver_data = (kernel_ulong_t)&(sdhci_##cfg) \
|
|
|
|
}
|
|
|
|
|
2013-12-18 22:23:38 +08:00
|
|
|
/*
|
|
|
|
* PCI registers
|
|
|
|
*/
|
|
|
|
|
|
|
|
#define PCI_SDHCI_IFPIO 0x00
|
|
|
|
#define PCI_SDHCI_IFDMA 0x01
|
|
|
|
#define PCI_SDHCI_IFVENDOR 0x02
|
|
|
|
|
|
|
|
#define PCI_SLOT_INFO 0x40 /* 8 bits */
|
|
|
|
#define PCI_SLOT_INFO_SLOTS(x) ((x >> 4) & 7)
|
|
|
|
#define PCI_SLOT_INFO_FIRST_BAR_MASK 0x07
|
|
|
|
|
|
|
|
#define MAX_SLOTS 8
|
|
|
|
|
|
|
|
struct sdhci_pci_chip;
|
|
|
|
struct sdhci_pci_slot;
|
|
|
|
|
|
|
|
struct sdhci_pci_fixes {
|
|
|
|
unsigned int quirks;
|
|
|
|
unsigned int quirks2;
|
|
|
|
bool allow_runtime_pm;
|
2014-01-13 15:49:16 +08:00
|
|
|
bool own_cd_for_runtime_pm;
|
2013-12-18 22:23:38 +08:00
|
|
|
|
|
|
|
int (*probe) (struct sdhci_pci_chip *);
|
|
|
|
|
|
|
|
int (*probe_slot) (struct sdhci_pci_slot *);
|
2017-03-21 01:50:48 +08:00
|
|
|
int (*add_host) (struct sdhci_pci_slot *);
|
2013-12-18 22:23:38 +08:00
|
|
|
void (*remove_slot) (struct sdhci_pci_slot *, int);
|
|
|
|
|
2017-03-21 01:50:50 +08:00
|
|
|
#ifdef CONFIG_PM_SLEEP
|
2013-12-18 22:23:38 +08:00
|
|
|
int (*suspend) (struct sdhci_pci_chip *);
|
|
|
|
int (*resume) (struct sdhci_pci_chip *);
|
2017-03-21 01:50:50 +08:00
|
|
|
#endif
|
2017-03-21 01:50:52 +08:00
|
|
|
#ifdef CONFIG_PM
|
|
|
|
int (*runtime_suspend) (struct sdhci_pci_chip *);
|
|
|
|
int (*runtime_resume) (struct sdhci_pci_chip *);
|
|
|
|
#endif
|
2016-10-05 17:11:23 +08:00
|
|
|
|
|
|
|
const struct sdhci_ops *ops;
|
2017-03-21 01:50:33 +08:00
|
|
|
size_t priv_size;
|
2013-12-18 22:23:38 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
struct sdhci_pci_slot {
|
|
|
|
struct sdhci_pci_chip *chip;
|
|
|
|
struct sdhci_host *host;
|
|
|
|
struct sdhci_pci_data *data;
|
|
|
|
|
|
|
|
int rst_n_gpio;
|
|
|
|
int cd_gpio;
|
|
|
|
int cd_irq;
|
|
|
|
|
2014-09-24 15:27:31 +08:00
|
|
|
int cd_idx;
|
|
|
|
bool cd_override_level;
|
|
|
|
|
2013-12-18 22:23:38 +08:00
|
|
|
void (*hw_reset)(struct sdhci_host *host);
|
2017-03-21 01:50:33 +08:00
|
|
|
unsigned long private[0] ____cacheline_aligned;
|
2013-12-18 22:23:38 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
struct sdhci_pci_chip {
|
|
|
|
struct pci_dev *pdev;
|
|
|
|
|
|
|
|
unsigned int quirks;
|
|
|
|
unsigned int quirks2;
|
|
|
|
bool allow_runtime_pm;
|
2017-03-21 01:50:32 +08:00
|
|
|
bool pm_retune;
|
|
|
|
bool rpm_retune;
|
2013-12-18 22:23:38 +08:00
|
|
|
const struct sdhci_pci_fixes *fixes;
|
|
|
|
|
|
|
|
int num_slots; /* Slots on controller */
|
|
|
|
struct sdhci_pci_slot *slots[MAX_SLOTS]; /* Pointers to host slots */
|
|
|
|
};
|
|
|
|
|
2017-03-21 01:50:33 +08:00
|
|
|
static inline void *sdhci_pci_priv(struct sdhci_pci_slot *slot)
|
|
|
|
{
|
|
|
|
return (void *)slot->private;
|
|
|
|
}
|
|
|
|
|
2017-03-21 01:50:51 +08:00
|
|
|
#ifdef CONFIG_PM_SLEEP
|
|
|
|
int sdhci_pci_resume_host(struct sdhci_pci_chip *chip);
|
|
|
|
#endif
|
2018-01-04 12:17:36 +08:00
|
|
|
int sdhci_pci_enable_dma(struct sdhci_host *host);
|
2017-10-19 20:04:13 +08:00
|
|
|
int sdhci_pci_o2_probe_slot(struct sdhci_pci_slot *slot);
|
|
|
|
int sdhci_pci_o2_probe(struct sdhci_pci_chip *chip);
|
|
|
|
#ifdef CONFIG_PM_SLEEP
|
|
|
|
int sdhci_pci_o2_resume(struct sdhci_pci_chip *chip);
|
|
|
|
#endif
|
|
|
|
|
2018-01-04 12:17:36 +08:00
|
|
|
extern const struct sdhci_pci_fixes sdhci_arasan;
|
2018-07-11 15:56:17 +08:00
|
|
|
extern const struct sdhci_pci_fixes sdhci_snps;
|
2018-01-04 12:17:36 +08:00
|
|
|
|
2013-12-18 22:23:38 +08:00
|
|
|
#endif /* __SDHCI_PCI_H */
|