forked from mirrors/linux
		
	Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
The phylink conflict was between a bug fix by Russell King
to make sure we have a consistent PHY interface mode, and
a change in net-next to pull some code in phylink_resolve()
into the helper functions phylink_mac_link_{up,down}()
On the dp83867 side it's mostly overlapping changes, with
the 'net' side removing a condition that was supposed to
trigger for RGMII but because of how it was coded never
actually could trigger.
Signed-off-by: David S. Miller <davem@davemloft.net>
			
			
This commit is contained in:
		
						commit
						b4b12b0d2f
					
				
					 1459 changed files with 5338 additions and 15909 deletions
				
			
		| 
						 | 
				
			
			@ -1,29 +0,0 @@
 | 
			
		|||
What:		/sys/bus/mdio_bus/devices/.../phy_id
 | 
			
		||||
Date:		November 2012
 | 
			
		||||
KernelVersion:	3.8
 | 
			
		||||
Contact:	netdev@vger.kernel.org
 | 
			
		||||
Description:
 | 
			
		||||
		This attribute contains the 32-bit PHY Identifier as reported
 | 
			
		||||
		by the device during bus enumeration, encoded in hexadecimal.
 | 
			
		||||
		This ID is used to match the device with the appropriate
 | 
			
		||||
		driver.
 | 
			
		||||
 | 
			
		||||
What:		/sys/bus/mdio_bus/devices/.../phy_interface
 | 
			
		||||
Date:		February 2014
 | 
			
		||||
KernelVersion:	3.15
 | 
			
		||||
Contact:	netdev@vger.kernel.org
 | 
			
		||||
Description:
 | 
			
		||||
		This attribute contains the PHY interface as configured by the
 | 
			
		||||
		Ethernet driver during bus enumeration, encoded in string.
 | 
			
		||||
		This interface mode is used to configure the Ethernet MAC with the
 | 
			
		||||
		appropriate mode for its data lines to the PHY hardware.
 | 
			
		||||
 | 
			
		||||
What:		/sys/bus/mdio_bus/devices/.../phy_has_fixups
 | 
			
		||||
Date:		February 2014
 | 
			
		||||
KernelVersion:	3.15
 | 
			
		||||
Contact:	netdev@vger.kernel.org
 | 
			
		||||
Description:
 | 
			
		||||
		This attribute contains the boolean value whether a given PHY
 | 
			
		||||
		device has had any "fixup" workaround running on it, encoded as
 | 
			
		||||
		a boolean. This information is provided to help troubleshooting
 | 
			
		||||
		PHY configurations.
 | 
			
		||||
| 
						 | 
				
			
			@ -11,24 +11,31 @@ Date:		February 2014
 | 
			
		|||
KernelVersion:	3.15
 | 
			
		||||
Contact:	netdev@vger.kernel.org
 | 
			
		||||
Description:
 | 
			
		||||
		Boolean value indicating whether the PHY device has
 | 
			
		||||
		any fixups registered against it (phy_register_fixup)
 | 
			
		||||
		This attribute contains the boolean value whether a given PHY
 | 
			
		||||
		device has had any "fixup" workaround running on it, encoded as
 | 
			
		||||
		a boolean. This information is provided to help troubleshooting
 | 
			
		||||
		PHY configurations.
 | 
			
		||||
 | 
			
		||||
What:		/sys/class/mdio_bus/<bus>/<device>/phy_id
 | 
			
		||||
Date:		November 2012
 | 
			
		||||
KernelVersion:	3.8
 | 
			
		||||
Contact:	netdev@vger.kernel.org
 | 
			
		||||
Description:
 | 
			
		||||
		32-bit hexadecimal value corresponding to the PHY device's OUI,
 | 
			
		||||
		model and revision number.
 | 
			
		||||
		This attribute contains the 32-bit PHY Identifier as reported
 | 
			
		||||
		by the device during bus enumeration, encoded in hexadecimal.
 | 
			
		||||
		This ID is used to match the device with the appropriate
 | 
			
		||||
		driver.
 | 
			
		||||
 | 
			
		||||
What:		/sys/class/mdio_bus/<bus>/<device>/phy_interface
 | 
			
		||||
Date:		February 2014
 | 
			
		||||
KernelVersion:	3.15
 | 
			
		||||
Contact:	netdev@vger.kernel.org
 | 
			
		||||
Description:
 | 
			
		||||
		String value indicating the PHY interface, possible
 | 
			
		||||
		values are:.
 | 
			
		||||
		This attribute contains the PHY interface as configured by the
 | 
			
		||||
		Ethernet driver during bus enumeration, encoded in string.
 | 
			
		||||
		This interface mode is used to configure the Ethernet MAC with the
 | 
			
		||||
		appropriate mode for its data lines to the PHY hardware.
 | 
			
		||||
		Possible values are:
 | 
			
		||||
		<empty> (not available), mii, gmii, sgmii, tbi, rev-mii,
 | 
			
		||||
		rmii, rgmii, rgmii-id, rgmii-rxid, rgmii-txid, rtbi, smii
 | 
			
		||||
		xgmii, moca, qsgmii, trgmii, 1000base-x, 2500base-x, rxaui,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,6 +31,7 @@ the Linux memory management.
 | 
			
		|||
   ksm
 | 
			
		||||
   memory-hotplug
 | 
			
		||||
   numa_memory_policy
 | 
			
		||||
   numaperf
 | 
			
		||||
   pagemap
 | 
			
		||||
   soft-dirty
 | 
			
		||||
   transhuge
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,7 +15,7 @@ characteristics.  Some memory may share the same node as a CPU, and others
 | 
			
		|||
are provided as memory only nodes. While memory only nodes do not provide
 | 
			
		||||
CPUs, they may still be local to one or more compute nodes relative to
 | 
			
		||||
other nodes. The following diagram shows one such example of two compute
 | 
			
		||||
nodes with local memory and a memory only node for each of compute node:
 | 
			
		||||
nodes with local memory and a memory only node for each of compute node::
 | 
			
		||||
 | 
			
		||||
 +------------------+     +------------------+
 | 
			
		||||
 | Compute Node 0   +-----+ Compute Node 1   |
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -58,13 +58,14 @@ stable kernels.
 | 
			
		|||
| ARM            | Cortex-A72      | #853709         | N/A                         |
 | 
			
		||||
| ARM            | Cortex-A73      | #858921         | ARM64_ERRATUM_858921        |
 | 
			
		||||
| ARM            | Cortex-A55      | #1024718        | ARM64_ERRATUM_1024718       |
 | 
			
		||||
| ARM            | Cortex-A76      | #1188873        | ARM64_ERRATUM_1188873       |
 | 
			
		||||
| ARM            | Cortex-A76      | #1188873,1418040| ARM64_ERRATUM_1418040       |
 | 
			
		||||
| ARM            | Cortex-A76      | #1165522        | ARM64_ERRATUM_1165522       |
 | 
			
		||||
| ARM            | Cortex-A76      | #1286807        | ARM64_ERRATUM_1286807       |
 | 
			
		||||
| ARM            | Neoverse-N1     | #1188873        | ARM64_ERRATUM_1188873       |
 | 
			
		||||
| ARM            | MMU-500         | #841119,#826419 | N/A                         |
 | 
			
		||||
| ARM            | Cortex-A76      | #1463225        | ARM64_ERRATUM_1463225       |
 | 
			
		||||
| ARM            | Neoverse-N1     | #1188873,1418040| ARM64_ERRATUM_1418040       |
 | 
			
		||||
| ARM            | MMU-500         | #841119,826419  | N/A                         |
 | 
			
		||||
|                |                 |                 |                             |
 | 
			
		||||
| Cavium         | ThunderX ITS    | #22375, #24313  | CAVIUM_ERRATUM_22375        |
 | 
			
		||||
| Cavium         | ThunderX ITS    | #22375,24313    | CAVIUM_ERRATUM_22375        |
 | 
			
		||||
| Cavium         | ThunderX ITS    | #23144          | CAVIUM_ERRATUM_23144        |
 | 
			
		||||
| Cavium         | ThunderX GICv3  | #23154          | CAVIUM_ERRATUM_23154        |
 | 
			
		||||
| Cavium         | ThunderX Core   | #27456          | CAVIUM_ERRATUM_27456        |
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,7 +37,7 @@ needs_sphinx = '1.3'
 | 
			
		|||
extensions = ['kerneldoc', 'rstFlatTable', 'kernel_include', 'cdomain', 'kfigure', 'sphinx.ext.ifconfig']
 | 
			
		||||
 | 
			
		||||
# The name of the math extension changed on Sphinx 1.4
 | 
			
		||||
if major == 1 and minor > 3:
 | 
			
		||||
if (major == 1 and minor > 3) or (major > 1):
 | 
			
		||||
    extensions.append("sphinx.ext.imgmath")
 | 
			
		||||
else:
 | 
			
		||||
    extensions.append("sphinx.ext.pngmath")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,7 +5,7 @@ DT_MK_SCHEMA ?= dt-mk-schema
 | 
			
		|||
DT_MK_SCHEMA_FLAGS := $(if $(DT_SCHEMA_FILES), -u)
 | 
			
		||||
 | 
			
		||||
quiet_cmd_chk_binding = CHKDT   $(patsubst $(srctree)/%,%,$<)
 | 
			
		||||
      cmd_chk_binding = $(DT_DOC_CHECKER) $< ; \
 | 
			
		||||
      cmd_chk_binding = $(DT_DOC_CHECKER) -u $(srctree)/$(src) $< ; \
 | 
			
		||||
                        $(DT_EXTRACT_EX) $< > $@
 | 
			
		||||
 | 
			
		||||
$(obj)/%.example.dts: $(src)/%.yaml FORCE
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -216,7 +216,7 @@ Example:
 | 
			
		|||
		#size-cells = <0>;
 | 
			
		||||
 | 
			
		||||
		A57_0: cpu@0 {
 | 
			
		||||
			compatible = "arm,cortex-a57","arm,armv8";
 | 
			
		||||
			compatible = "arm,cortex-a57";
 | 
			
		||||
			reg = <0x0 0x0>;
 | 
			
		||||
			device_type = "cpu";
 | 
			
		||||
			enable-method = "psci";
 | 
			
		||||
| 
						 | 
				
			
			@ -225,7 +225,7 @@ Example:
 | 
			
		|||
		.....
 | 
			
		||||
 | 
			
		||||
		A53_0: cpu@100 {
 | 
			
		||||
			compatible = "arm,cortex-a53","arm,armv8";
 | 
			
		||||
			compatible = "arm,cortex-a53";
 | 
			
		||||
			reg = <0x0 0x100>;
 | 
			
		||||
			device_type = "cpu";
 | 
			
		||||
			enable-method = "psci";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -118,7 +118,7 @@ cpus {
 | 
			
		|||
	};
 | 
			
		||||
 | 
			
		||||
	A57_0: cpu@0 {
 | 
			
		||||
		compatible = "arm,cortex-a57","arm,armv8";
 | 
			
		||||
		compatible = "arm,cortex-a57";
 | 
			
		||||
		reg = <0x0 0x0>;
 | 
			
		||||
		device_type = "cpu";
 | 
			
		||||
		enable-method = "psci";
 | 
			
		||||
| 
						 | 
				
			
			@ -129,7 +129,7 @@ cpus {
 | 
			
		|||
	};
 | 
			
		||||
 | 
			
		||||
	A57_1: cpu@1 {
 | 
			
		||||
		compatible = "arm,cortex-a57","arm,armv8";
 | 
			
		||||
		compatible = "arm,cortex-a57";
 | 
			
		||||
		reg = <0x0 0x1>;
 | 
			
		||||
		device_type = "cpu";
 | 
			
		||||
		enable-method = "psci";
 | 
			
		||||
| 
						 | 
				
			
			@ -140,7 +140,7 @@ cpus {
 | 
			
		|||
	};
 | 
			
		||||
 | 
			
		||||
	A53_0: cpu@100 {
 | 
			
		||||
		compatible = "arm,cortex-a53","arm,armv8";
 | 
			
		||||
		compatible = "arm,cortex-a53";
 | 
			
		||||
		reg = <0x0 0x100>;
 | 
			
		||||
		device_type = "cpu";
 | 
			
		||||
		enable-method = "psci";
 | 
			
		||||
| 
						 | 
				
			
			@ -151,7 +151,7 @@ cpus {
 | 
			
		|||
	};
 | 
			
		||||
 | 
			
		||||
	A53_1: cpu@101 {
 | 
			
		||||
		compatible = "arm,cortex-a53","arm,armv8";
 | 
			
		||||
		compatible = "arm,cortex-a53";
 | 
			
		||||
		reg = <0x0 0x101>;
 | 
			
		||||
		device_type = "cpu";
 | 
			
		||||
		enable-method = "psci";
 | 
			
		||||
| 
						 | 
				
			
			@ -162,7 +162,7 @@ cpus {
 | 
			
		|||
	};
 | 
			
		||||
 | 
			
		||||
	A53_2: cpu@102 {
 | 
			
		||||
		compatible = "arm,cortex-a53","arm,armv8";
 | 
			
		||||
		compatible = "arm,cortex-a53";
 | 
			
		||||
		reg = <0x0 0x102>;
 | 
			
		||||
		device_type = "cpu";
 | 
			
		||||
		enable-method = "psci";
 | 
			
		||||
| 
						 | 
				
			
			@ -173,7 +173,7 @@ cpus {
 | 
			
		|||
	};
 | 
			
		||||
 | 
			
		||||
	A53_3: cpu@103 {
 | 
			
		||||
		compatible = "arm,cortex-a53","arm,armv8";
 | 
			
		||||
		compatible = "arm,cortex-a53";
 | 
			
		||||
		reg = <0x0 0x103>;
 | 
			
		||||
		device_type = "cpu";
 | 
			
		||||
		enable-method = "psci";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -41,7 +41,7 @@ Examples:
 | 
			
		|||
Consumer:
 | 
			
		||||
========
 | 
			
		||||
See Documentation/devicetree/bindings/interrupt-controller/interrupts.txt and
 | 
			
		||||
Documentation/devicetree/bindings/interrupt-controller/arm,gic.txt for
 | 
			
		||||
Documentation/devicetree/bindings/interrupt-controller/arm,gic.yaml for
 | 
			
		||||
further details.
 | 
			
		||||
 | 
			
		||||
An interrupt consumer on an SoC using crossbar will use:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,7 +35,7 @@ board device tree, including the system base clock, as selected by XOM[0]
 | 
			
		|||
pin of the SoC. Refer to generic fixed rate clock bindings
 | 
			
		||||
documentation[1] for more information how to specify these clocks.
 | 
			
		||||
 | 
			
		||||
[1] Documentation/devicetree/bindings/clock/fixed-clock.txt
 | 
			
		||||
[1] Documentation/devicetree/bindings/clock/fixed-clock.yaml
 | 
			
		||||
 | 
			
		||||
Example: Clock controller node:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -92,6 +92,8 @@ properties:
 | 
			
		|||
    minItems: 2
 | 
			
		||||
    maxItems: 4
 | 
			
		||||
 | 
			
		||||
  ranges: true
 | 
			
		||||
 | 
			
		||||
  interrupts:
 | 
			
		||||
    description: Interrupt source of the parent interrupt controller on
 | 
			
		||||
      secondary GICs, or VGIC maintenance interrupt on primary GIC (see
 | 
			
		||||
| 
						 | 
				
			
			@ -197,28 +199,28 @@ examples:
 | 
			
		|||
    interrupt-controller@e1101000 {
 | 
			
		||||
      compatible = "arm,gic-400";
 | 
			
		||||
      #interrupt-cells = <3>;
 | 
			
		||||
      #address-cells = <2>;
 | 
			
		||||
      #size-cells = <2>;
 | 
			
		||||
      #address-cells = <1>;
 | 
			
		||||
      #size-cells = <1>;
 | 
			
		||||
      interrupt-controller;
 | 
			
		||||
      interrupts = <1 8 0xf04>;
 | 
			
		||||
      ranges = <0 0 0 0xe1100000 0 0x100000>;
 | 
			
		||||
      reg = <0x0 0xe1110000 0 0x01000>,
 | 
			
		||||
            <0x0 0xe112f000 0 0x02000>,
 | 
			
		||||
            <0x0 0xe1140000 0 0x10000>,
 | 
			
		||||
            <0x0 0xe1160000 0 0x10000>;
 | 
			
		||||
      ranges = <0 0xe1100000 0x100000>;
 | 
			
		||||
      reg = <0xe1110000 0x01000>,
 | 
			
		||||
            <0xe112f000 0x02000>,
 | 
			
		||||
            <0xe1140000 0x10000>,
 | 
			
		||||
            <0xe1160000 0x10000>;
 | 
			
		||||
 | 
			
		||||
      v2m0: v2m@8000 {
 | 
			
		||||
      v2m0: v2m@80000 {
 | 
			
		||||
        compatible = "arm,gic-v2m-frame";
 | 
			
		||||
        msi-controller;
 | 
			
		||||
        reg = <0x0 0x80000 0 0x1000>;
 | 
			
		||||
        reg = <0x80000 0x1000>;
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      //...
 | 
			
		||||
 | 
			
		||||
      v2mN: v2m@9000 {
 | 
			
		||||
      v2mN: v2m@90000 {
 | 
			
		||||
        compatible = "arm,gic-v2m-frame";
 | 
			
		||||
        msi-controller;
 | 
			
		||||
        reg = <0x0 0x90000 0 0x1000>;
 | 
			
		||||
        reg = <0x90000 0x1000>;
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
...
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,7 +23,7 @@ Required properties:
 | 
			
		|||
- marvell,spi-base     : List of GIC base SPI interrupts, one for each
 | 
			
		||||
                         ODMI frame. Those SPI interrupts are 0-based,
 | 
			
		||||
                         i.e marvell,spi-base = <128> will use SPI #96.
 | 
			
		||||
                         See Documentation/devicetree/bindings/interrupt-controller/arm,gic.txt
 | 
			
		||||
                         See Documentation/devicetree/bindings/interrupt-controller/arm,gic.yaml
 | 
			
		||||
                         for details about the GIC Device Tree binding.
 | 
			
		||||
 | 
			
		||||
Example:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,7 +15,7 @@ Optional properties:
 | 
			
		|||
	- power-supply: specifies the power source. It can either be a regulator
 | 
			
		||||
	  or a gpio which enables a regulator, i.e. a regulator-fixed as
 | 
			
		||||
	  described in
 | 
			
		||||
	  Documentation/devicetree/bindings/regulator/fixed-regulator.txt
 | 
			
		||||
	  Documentation/devicetree/bindings/regulator/fixed-regulator.yaml
 | 
			
		||||
 | 
			
		||||
Example:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,7 +24,7 @@ Optional children nodes:
 | 
			
		|||
Children nodes represent the available nand chips.
 | 
			
		||||
 | 
			
		||||
Other properties:
 | 
			
		||||
see Documentation/devicetree/bindings/mtd/nand.txt for generic bindings.
 | 
			
		||||
see Documentation/devicetree/bindings/mtd/nand-controller.yaml for generic bindings.
 | 
			
		||||
 | 
			
		||||
Example demonstrate on AXG SoC:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -101,12 +101,12 @@ Required properties:
 | 
			
		|||
                              number (e.g., 0, 1, 2, etc.)
 | 
			
		||||
- #address-cells            : see partition.txt
 | 
			
		||||
- #size-cells               : see partition.txt
 | 
			
		||||
- nand-ecc-strength         : see nand.txt
 | 
			
		||||
- nand-ecc-step-size        : must be 512 or 1024. See nand.txt
 | 
			
		||||
- nand-ecc-strength         : see nand-controller.yaml
 | 
			
		||||
- nand-ecc-step-size        : must be 512 or 1024. See nand-controller.yaml
 | 
			
		||||
 | 
			
		||||
Optional properties:
 | 
			
		||||
- nand-on-flash-bbt         : boolean, to enable the on-flash BBT for this
 | 
			
		||||
                              chip-select. See nand.txt
 | 
			
		||||
                              chip-select. See nand-controller.yaml
 | 
			
		||||
- brcm,nand-oob-sector-size : integer, to denote the spare area sector size
 | 
			
		||||
                              expected for the ECC layout in use. This size, in
 | 
			
		||||
                              addition to the strength and step-size,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,16 +22,16 @@ Sub-nodes:
 | 
			
		|||
      select is connected.
 | 
			
		||||
 | 
			
		||||
  Optional properties:
 | 
			
		||||
    - nand-ecc-step-size: see nand.txt for details.
 | 
			
		||||
    - nand-ecc-step-size: see nand-controller.yaml for details.
 | 
			
		||||
      If present, the value must be
 | 
			
		||||
        512        for "altr,socfpga-denali-nand"
 | 
			
		||||
        1024       for "socionext,uniphier-denali-nand-v5a"
 | 
			
		||||
        1024       for "socionext,uniphier-denali-nand-v5b"
 | 
			
		||||
    - nand-ecc-strength: see nand.txt for details. Valid values are:
 | 
			
		||||
    - nand-ecc-strength: see nand-controller.yaml for details. Valid values are:
 | 
			
		||||
        8, 15      for "altr,socfpga-denali-nand"
 | 
			
		||||
        8, 16, 24  for "socionext,uniphier-denali-nand-v5a"
 | 
			
		||||
        8, 16      for "socionext,uniphier-denali-nand-v5b"
 | 
			
		||||
    - nand-ecc-maximize: see nand.txt for details
 | 
			
		||||
    - nand-ecc-maximize: see nand-controller.yaml for details
 | 
			
		||||
 | 
			
		||||
The chip nodes may optionally contain sub-nodes describing partitions of the
 | 
			
		||||
address space. See partition.txt for more detail.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,9 +30,9 @@ Optional properties:
 | 
			
		|||
                 command is asserted. Zero means one cycle, 255 means 256
 | 
			
		||||
                 cycles.
 | 
			
		||||
- bank: default NAND bank to use (0-3 are valid, 0 is the default).
 | 
			
		||||
- nand-ecc-mode      : see nand.txt
 | 
			
		||||
- nand-ecc-strength  : see nand.txt
 | 
			
		||||
- nand-ecc-step-size : see nand.txt
 | 
			
		||||
- nand-ecc-mode      : see nand-controller.yaml
 | 
			
		||||
- nand-ecc-strength  : see nand-controller.yaml
 | 
			
		||||
- nand-ecc-step-size : see nand-controller.yaml
 | 
			
		||||
 | 
			
		||||
Can support 1-bit HW ECC (default) or if stronger correction is required,
 | 
			
		||||
software-based BCH.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,7 @@ explained in a separate documents - please refer to
 | 
			
		|||
Documentation/devicetree/bindings/memory-controllers/omap-gpmc.txt
 | 
			
		||||
 | 
			
		||||
For NAND specific properties such as ECC modes or bus width, please refer to
 | 
			
		||||
Documentation/devicetree/bindings/mtd/nand.txt
 | 
			
		||||
Documentation/devicetree/bindings/mtd/nand-controller.yaml
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Required properties:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,7 +7,7 @@ Required properties:
 | 
			
		|||
                       NAND controller's registers. The second contains base
 | 
			
		||||
                       physical address and size of NAND controller's buffer.
 | 
			
		||||
- interrupts:          Interrupt number for nfc.
 | 
			
		||||
- nand-bus-width:      See nand.txt.
 | 
			
		||||
- nand-bus-width:      See nand-controller.yaml.
 | 
			
		||||
- nand-ecc-mode:       Support none and hw ecc mode.
 | 
			
		||||
- #address-cells:      Partition address, should be set 1.
 | 
			
		||||
- #size-cells:         Partition size, should be set 1.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,29 +36,29 @@ Children nodes represent the available NAND chips.
 | 
			
		|||
 | 
			
		||||
Required properties:
 | 
			
		||||
- reg: shall contain the native Chip Select ids (0-3).
 | 
			
		||||
- nand-rb: see nand.txt (0-1).
 | 
			
		||||
- nand-rb: see nand-controller.yaml (0-1).
 | 
			
		||||
 | 
			
		||||
Optional properties:
 | 
			
		||||
- marvell,nand-keep-config: orders the driver not to take the timings
 | 
			
		||||
  from the core and leaving them completely untouched. Bootloader
 | 
			
		||||
  timings will then be used.
 | 
			
		||||
- label: MTD name.
 | 
			
		||||
- nand-on-flash-bbt: see nand.txt.
 | 
			
		||||
- nand-ecc-mode: see nand.txt. Will use hardware ECC if not specified.
 | 
			
		||||
- nand-ecc-algo: see nand.txt. This property is essentially useful when
 | 
			
		||||
- nand-on-flash-bbt: see nand-controller.yaml.
 | 
			
		||||
- nand-ecc-mode: see nand-controller.yaml. Will use hardware ECC if not specified.
 | 
			
		||||
- nand-ecc-algo: see nand-controller.yaml. This property is essentially useful when
 | 
			
		||||
  not using hardware ECC. Howerver, it may be added when using hardware
 | 
			
		||||
  ECC for clarification but will be ignored by the driver because ECC
 | 
			
		||||
  mode is chosen depending on the page size and the strength required by
 | 
			
		||||
  the NAND chip. This value may be overwritten with nand-ecc-strength
 | 
			
		||||
  property.
 | 
			
		||||
- nand-ecc-strength: see nand.txt.
 | 
			
		||||
- nand-ecc-step-size: see nand.txt. Marvell's NAND flash controller does
 | 
			
		||||
- nand-ecc-strength: see nand-controller.yaml.
 | 
			
		||||
- nand-ecc-step-size: see nand-controller.yaml. Marvell's NAND flash controller does
 | 
			
		||||
  use fixed strength (1-bit for Hamming, 16-bit for BCH), so the actual
 | 
			
		||||
  step size will shrink or grow in order to fit the required strength.
 | 
			
		||||
  Step sizes are not completely random for all and follow certain
 | 
			
		||||
  patterns described in AN-379, "Marvell SoC NFC ECC".
 | 
			
		||||
 | 
			
		||||
See Documentation/devicetree/bindings/mtd/nand.txt for more details on
 | 
			
		||||
See Documentation/devicetree/bindings/mtd/nand-controller.yaml for more details on
 | 
			
		||||
generic bindings.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,9 +4,9 @@ Required properties:
 | 
			
		|||
- compatible: "fsl,imxXX-nand"
 | 
			
		||||
- reg: address range of the nfc block
 | 
			
		||||
- interrupts: irq to be used
 | 
			
		||||
- nand-bus-width: see nand.txt
 | 
			
		||||
- nand-ecc-mode: see nand.txt
 | 
			
		||||
- nand-on-flash-bbt: see nand.txt
 | 
			
		||||
- nand-bus-width: see nand-controller.yaml
 | 
			
		||||
- nand-ecc-mode: see nand-controller.yaml
 | 
			
		||||
- nand-on-flash-bbt: see nand-controller.yaml
 | 
			
		||||
 | 
			
		||||
Example:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,14 +26,14 @@ Optional children node properties:
 | 
			
		|||
		 "hw" is supported.
 | 
			
		||||
- nand-ecc-algo: string, algorithm of NAND ECC.
 | 
			
		||||
		 Supported values with "hw" ECC mode are: "rs", "bch".
 | 
			
		||||
- nand-bus-width : See nand.txt
 | 
			
		||||
- nand-on-flash-bbt: See nand.txt
 | 
			
		||||
- nand-bus-width : See nand-controller.yaml
 | 
			
		||||
- nand-on-flash-bbt: See nand-controller.yaml
 | 
			
		||||
- nand-ecc-strength: integer representing the number of bits to correct
 | 
			
		||||
		     per ECC step (always 512). Supported strength using HW ECC
 | 
			
		||||
		     modes are:
 | 
			
		||||
		     - RS: 4, 6, 8
 | 
			
		||||
		     - BCH: 4, 8, 14, 16
 | 
			
		||||
- nand-ecc-maximize: See nand.txt
 | 
			
		||||
- nand-ecc-maximize: See nand-controller.yaml
 | 
			
		||||
- nand-is-boot-medium: Makes sure only ECC strengths supported by the boot ROM
 | 
			
		||||
		       are chosen.
 | 
			
		||||
- wp-gpios: GPIO specifier for the write protect pin.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
* Oxford Semiconductor OXNAS NAND Controller
 | 
			
		||||
 | 
			
		||||
Please refer to nand.txt for generic information regarding MTD NAND bindings.
 | 
			
		||||
Please refer to nand-controller.yaml for generic information regarding MTD NAND bindings.
 | 
			
		||||
 | 
			
		||||
Required properties:
 | 
			
		||||
 - compatible: "oxsemi,ox820-nand"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,8 +47,8 @@ Required properties:
 | 
			
		|||
- #size-cells:		see partition.txt
 | 
			
		||||
 | 
			
		||||
Optional properties:
 | 
			
		||||
- nand-bus-width:	see nand.txt
 | 
			
		||||
- nand-ecc-strength:	see nand.txt. If not specified, then ECC strength will
 | 
			
		||||
- nand-bus-width:	see nand-controller.yaml
 | 
			
		||||
- nand-ecc-strength:	see nand-controller.yaml. If not specified, then ECC strength will
 | 
			
		||||
			be used according to chip requirement and available
 | 
			
		||||
			OOB size.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,7 +6,7 @@ Required properties:
 | 
			
		|||
	"samsung,s3c2412-nand"
 | 
			
		||||
	"samsung,s3c2440-nand"
 | 
			
		||||
- reg : register's location and length.
 | 
			
		||||
- #address-cells, #size-cells : see nand.txt
 | 
			
		||||
- #address-cells, #size-cells : see nand-controller.yaml
 | 
			
		||||
- clocks : phandle to the nand controller clock
 | 
			
		||||
- clock-names : must contain "nand"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -14,8 +14,8 @@ Optional child nodes:
 | 
			
		|||
Child nodes representing the available nand chips.
 | 
			
		||||
 | 
			
		||||
Optional child properties:
 | 
			
		||||
- nand-ecc-mode : see nand.txt
 | 
			
		||||
- nand-on-flash-bbt : see nand.txt
 | 
			
		||||
- nand-ecc-mode : see nand-controller.yaml
 | 
			
		||||
- nand-on-flash-bbt : see nand-controller.yaml
 | 
			
		||||
 | 
			
		||||
Each child device node may optionally contain a 'partitions' sub-node,
 | 
			
		||||
which further contains sub-nodes describing the flash partition mapping.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,9 +24,9 @@ Required properties:
 | 
			
		|||
- reg: describes the CS lines assigned to the NAND device.
 | 
			
		||||
 | 
			
		||||
Optional properties:
 | 
			
		||||
- nand-on-flash-bbt: see nand.txt
 | 
			
		||||
- nand-ecc-strength: see nand.txt
 | 
			
		||||
- nand-ecc-step-size: see nand.txt
 | 
			
		||||
- nand-on-flash-bbt: see nand-controller.yaml
 | 
			
		||||
- nand-ecc-strength: see nand-controller.yaml
 | 
			
		||||
- nand-ecc-step-size: see nand-controller.yaml
 | 
			
		||||
 | 
			
		||||
The following ECC strength and step size are currently supported:
 | 
			
		||||
 - nand-ecc-strength = <1>, nand-ecc-step-size = <512> (Hamming)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,7 @@ Required properties:
 | 
			
		|||
- #size-cells: <0>
 | 
			
		||||
 | 
			
		||||
Children nodes represent the available NAND chips.
 | 
			
		||||
See Documentation/devicetree/bindings/mtd/nand.txt for generic bindings.
 | 
			
		||||
See Documentation/devicetree/bindings/mtd/nand-controller.yaml for generic bindings.
 | 
			
		||||
 | 
			
		||||
Example:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,14 +25,14 @@ only handle one NAND chip.
 | 
			
		|||
 | 
			
		||||
Required properties:
 | 
			
		||||
- compatible: Should be set to "fsl,vf610-nfc-cs".
 | 
			
		||||
- nand-bus-width: see nand.txt
 | 
			
		||||
- nand-ecc-mode: see nand.txt
 | 
			
		||||
- nand-bus-width: see nand-controller.yaml
 | 
			
		||||
- nand-ecc-mode: see nand-controller.yaml
 | 
			
		||||
 | 
			
		||||
Required properties for hardware ECC:
 | 
			
		||||
- nand-ecc-strength: supported strengths are 24 and 32 bit (see nand.txt)
 | 
			
		||||
- nand-ecc-strength: supported strengths are 24 and 32 bit (see nand-controller.yaml)
 | 
			
		||||
- nand-ecc-step-size: step size equals page size, currently only 2k pages are
 | 
			
		||||
    supported
 | 
			
		||||
- nand-on-flash-bbt: see nand.txt
 | 
			
		||||
- nand-on-flash-bbt: see nand-controller.yaml
 | 
			
		||||
 | 
			
		||||
Example:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,38 @@
 | 
			
		|||
DT compatible string versioning for SiFive open-source IP blocks
 | 
			
		||||
 | 
			
		||||
This document describes the version specification for DT "compatible"
 | 
			
		||||
strings for open-source SiFive IP blocks.  HDL for these IP blocks
 | 
			
		||||
can be found in this public repository:
 | 
			
		||||
 | 
			
		||||
https://github.com/sifive/sifive-blocks
 | 
			
		||||
 | 
			
		||||
IP block-specific DT compatible strings are contained within the HDL,
 | 
			
		||||
in the form "sifive,<ip-block-name><integer version number>".
 | 
			
		||||
 | 
			
		||||
An example is "sifive,uart0" from:
 | 
			
		||||
 | 
			
		||||
https://github.com/sifive/sifive-blocks/blob/v1.0/src/main/scala/devices/uart/UART.scala#L43
 | 
			
		||||
 | 
			
		||||
Until these IP blocks (or IP integration) support version
 | 
			
		||||
auto-discovery, the maintainers of these IP blocks intend to increment
 | 
			
		||||
the suffixed number in the compatible string whenever the software
 | 
			
		||||
interface to these IP blocks changes, or when the functionality of the
 | 
			
		||||
underlying IP blocks changes in a way that software should be aware of.
 | 
			
		||||
 | 
			
		||||
Driver developers can use compatible string "match" values such as
 | 
			
		||||
"sifive,uart0" to indicate that their driver is compatible with the
 | 
			
		||||
register interface and functionality associated with the relevant
 | 
			
		||||
upstream sifive-blocks commits.  It is expected that most drivers will
 | 
			
		||||
match on these IP block-specific compatible strings.
 | 
			
		||||
 | 
			
		||||
DT data authors, when writing data for a particular SoC, should
 | 
			
		||||
continue to specify an SoC-specific compatible string value, such as
 | 
			
		||||
"sifive,fu540-c000-uart".  This way, if SoC-specific
 | 
			
		||||
integration-specific bug fixes or workarounds are needed, the kernel
 | 
			
		||||
or other system software can match on this string to apply them.  The
 | 
			
		||||
IP block-specific compatible string (such as "sifive,uart0") should
 | 
			
		||||
then be specified as a subsequent value.
 | 
			
		||||
 | 
			
		||||
An example of this style:
 | 
			
		||||
 | 
			
		||||
    compatible = "sifive,fu540-c000-uart", "sifive,uart0";
 | 
			
		||||
| 
						 | 
				
			
			@ -251,7 +251,7 @@ for defining a counter device.
 | 
			
		|||
.. kernel-doc:: include/linux/counter.h
 | 
			
		||||
   :internal:
 | 
			
		||||
 | 
			
		||||
.. kernel-doc:: drivers/counter/generic-counter.c
 | 
			
		||||
.. kernel-doc:: drivers/counter/counter.c
 | 
			
		||||
   :export:
 | 
			
		||||
 | 
			
		||||
Implementation
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -423,7 +423,7 @@ will be enumerated to depends on the device ID returned by _HID.
 | 
			
		|||
 | 
			
		||||
For example, the following ACPI sample might be used to enumerate an lm75-type
 | 
			
		||||
I2C temperature sensor and match it to the driver using the Device Tree
 | 
			
		||||
namespace link:
 | 
			
		||||
namespace link::
 | 
			
		||||
 | 
			
		||||
	Device (TMP0)
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -410,7 +410,7 @@ Notes on loading the dump-capture kernel:
 | 
			
		|||
* Boot parameter "1" boots the dump-capture kernel into single-user
 | 
			
		||||
  mode without networking. If you want networking, use "3".
 | 
			
		||||
 | 
			
		||||
* We generally don' have to bring up a SMP kernel just to capture the
 | 
			
		||||
* We generally don't have to bring up a SMP kernel just to capture the
 | 
			
		||||
  dump. Hence generally it is useful either to build a UP dump-capture
 | 
			
		||||
  kernel or specify maxcpus=1 option while loading dump-capture kernel.
 | 
			
		||||
  Note, though maxcpus always works, you had better replace it with
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										30
									
								
								Documentation/networking/device_drivers/index.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								Documentation/networking/device_drivers/index.rst
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
.. SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
 | 
			
		||||
 | 
			
		||||
Vendor Device Drivers
 | 
			
		||||
=====================
 | 
			
		||||
 | 
			
		||||
Contents:
 | 
			
		||||
 | 
			
		||||
.. toctree::
 | 
			
		||||
   :maxdepth: 2
 | 
			
		||||
 | 
			
		||||
   freescale/dpaa2/index
 | 
			
		||||
   intel/e100
 | 
			
		||||
   intel/e1000
 | 
			
		||||
   intel/e1000e
 | 
			
		||||
   intel/fm10k
 | 
			
		||||
   intel/igb
 | 
			
		||||
   intel/igbvf
 | 
			
		||||
   intel/ixgb
 | 
			
		||||
   intel/ixgbe
 | 
			
		||||
   intel/ixgbevf
 | 
			
		||||
   intel/i40e
 | 
			
		||||
   intel/iavf
 | 
			
		||||
   intel/ice
 | 
			
		||||
 | 
			
		||||
.. only::  subproject
 | 
			
		||||
 | 
			
		||||
   Indices
 | 
			
		||||
   =======
 | 
			
		||||
 | 
			
		||||
   * :ref:`genindex`
 | 
			
		||||
| 
						 | 
				
			
			@ -11,19 +11,7 @@ Contents:
 | 
			
		|||
   batman-adv
 | 
			
		||||
   can
 | 
			
		||||
   can_ucan_protocol
 | 
			
		||||
   device_drivers/freescale/dpaa2/index
 | 
			
		||||
   device_drivers/intel/e100
 | 
			
		||||
   device_drivers/intel/e1000
 | 
			
		||||
   device_drivers/intel/e1000e
 | 
			
		||||
   device_drivers/intel/fm10k
 | 
			
		||||
   device_drivers/intel/igb
 | 
			
		||||
   device_drivers/intel/igbvf
 | 
			
		||||
   device_drivers/intel/ixgb
 | 
			
		||||
   device_drivers/intel/ixgbe
 | 
			
		||||
   device_drivers/intel/ixgbevf
 | 
			
		||||
   device_drivers/intel/i40e
 | 
			
		||||
   device_drivers/intel/iavf
 | 
			
		||||
   device_drivers/intel/ice
 | 
			
		||||
   device_drivers/index
 | 
			
		||||
   dsa/index
 | 
			
		||||
   devlink-info-versions
 | 
			
		||||
   ieee802154
 | 
			
		||||
| 
						 | 
				
			
			@ -40,6 +28,8 @@ Contents:
 | 
			
		|||
   checksum-offloads
 | 
			
		||||
   segmentation-offloads
 | 
			
		||||
   scaling
 | 
			
		||||
   tls
 | 
			
		||||
   tls-offload
 | 
			
		||||
 | 
			
		||||
.. only::  subproject
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										1
									
								
								Documentation/networking/tls-offload-layers.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								Documentation/networking/tls-offload-layers.svg
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
		 After Width: | Height: | Size: 49 KiB  | 
							
								
								
									
										1
									
								
								Documentation/networking/tls-offload-reorder-bad.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								Documentation/networking/tls-offload-reorder-bad.svg
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
		 After Width: | Height: | Size: 6.4 KiB  | 
							
								
								
									
										1
									
								
								Documentation/networking/tls-offload-reorder-good.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								Documentation/networking/tls-offload-reorder-good.svg
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
		 After Width: | Height: | Size: 6.4 KiB  | 
							
								
								
									
										482
									
								
								Documentation/networking/tls-offload.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										482
									
								
								Documentation/networking/tls-offload.rst
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,482 @@
 | 
			
		|||
.. SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
 | 
			
		||||
 | 
			
		||||
==================
 | 
			
		||||
Kernel TLS offload
 | 
			
		||||
==================
 | 
			
		||||
 | 
			
		||||
Kernel TLS operation
 | 
			
		||||
====================
 | 
			
		||||
 | 
			
		||||
Linux kernel provides TLS connection offload infrastructure. Once a TCP
 | 
			
		||||
connection is in ``ESTABLISHED`` state user space can enable the TLS Upper
 | 
			
		||||
Layer Protocol (ULP) and install the cryptographic connection state.
 | 
			
		||||
For details regarding the user-facing interface refer to the TLS
 | 
			
		||||
documentation in :ref:`Documentation/networking/tls.rst <kernel_tls>`.
 | 
			
		||||
 | 
			
		||||
``ktls`` can operate in three modes:
 | 
			
		||||
 | 
			
		||||
 * Software crypto mode (``TLS_SW``) - CPU handles the cryptography.
 | 
			
		||||
   In most basic cases only crypto operations synchronous with the CPU
 | 
			
		||||
   can be used, but depending on calling context CPU may utilize
 | 
			
		||||
   asynchronous crypto accelerators. The use of accelerators introduces extra
 | 
			
		||||
   latency on socket reads (decryption only starts when a read syscall
 | 
			
		||||
   is made) and additional I/O load on the system.
 | 
			
		||||
 * Packet-based NIC offload mode (``TLS_HW``) - the NIC handles crypto
 | 
			
		||||
   on a packet by packet basis, provided the packets arrive in order.
 | 
			
		||||
   This mode integrates best with the kernel stack and is described in detail
 | 
			
		||||
   in the remaining part of this document
 | 
			
		||||
   (``ethtool`` flags ``tls-hw-tx-offload`` and ``tls-hw-rx-offload``).
 | 
			
		||||
 * Full TCP NIC offload mode (``TLS_HW_RECORD``) - mode of operation where
 | 
			
		||||
   NIC driver and firmware replace the kernel networking stack
 | 
			
		||||
   with its own TCP handling, it is not usable in production environments
 | 
			
		||||
   making use of the Linux networking stack for example any firewalling
 | 
			
		||||
   abilities or QoS and packet scheduling (``ethtool`` flag ``tls-hw-record``).
 | 
			
		||||
 | 
			
		||||
The operation mode is selected automatically based on device configuration,
 | 
			
		||||
offload opt-in or opt-out on per-connection basis is not currently supported.
 | 
			
		||||
 | 
			
		||||
TX
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
At a high level user write requests are turned into a scatter list, the TLS ULP
 | 
			
		||||
intercepts them, inserts record framing, performs encryption (in ``TLS_SW``
 | 
			
		||||
mode) and then hands the modified scatter list to the TCP layer. From this
 | 
			
		||||
point on the TCP stack proceeds as normal.
 | 
			
		||||
 | 
			
		||||
In ``TLS_HW`` mode the encryption is not performed in the TLS ULP.
 | 
			
		||||
Instead packets reach a device driver, the driver will mark the packets
 | 
			
		||||
for crypto offload based on the socket the packet is attached to,
 | 
			
		||||
and send them to the device for encryption and transmission.
 | 
			
		||||
 | 
			
		||||
RX
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
On the receive side if the device handled decryption and authentication
 | 
			
		||||
successfully, the driver will set the decrypted bit in the associated
 | 
			
		||||
:c:type:`struct sk_buff <sk_buff>`. The packets reach the TCP stack and
 | 
			
		||||
are handled normally. ``ktls`` is informed when data is queued to the socket
 | 
			
		||||
and the ``strparser`` mechanism is used to delineate the records. Upon read
 | 
			
		||||
request, records are retrieved from the socket and passed to decryption routine.
 | 
			
		||||
If device decrypted all the segments of the record the decryption is skipped,
 | 
			
		||||
otherwise software path handles decryption.
 | 
			
		||||
 | 
			
		||||
.. kernel-figure::  tls-offload-layers.svg
 | 
			
		||||
   :alt:	TLS offload layers
 | 
			
		||||
   :align:	center
 | 
			
		||||
   :figwidth:	28em
 | 
			
		||||
 | 
			
		||||
   Layers of Kernel TLS stack
 | 
			
		||||
 | 
			
		||||
Device configuration
 | 
			
		||||
====================
 | 
			
		||||
 | 
			
		||||
During driver initialization device sets the ``NETIF_F_HW_TLS_RX`` and
 | 
			
		||||
``NETIF_F_HW_TLS_TX`` features and installs its
 | 
			
		||||
:c:type:`struct tlsdev_ops <tlsdev_ops>`
 | 
			
		||||
pointer in the :c:member:`tlsdev_ops` member of the
 | 
			
		||||
:c:type:`struct net_device <net_device>`.
 | 
			
		||||
 | 
			
		||||
When TLS cryptographic connection state is installed on a ``ktls`` socket
 | 
			
		||||
(note that it is done twice, once for RX and once for TX direction,
 | 
			
		||||
and the two are completely independent), the kernel checks if the underlying
 | 
			
		||||
network device is offload-capable and attempts the offload. In case offload
 | 
			
		||||
fails the connection is handled entirely in software using the same mechanism
 | 
			
		||||
as if the offload was never tried.
 | 
			
		||||
 | 
			
		||||
Offload request is performed via the :c:member:`tls_dev_add` callback of
 | 
			
		||||
:c:type:`struct tlsdev_ops <tlsdev_ops>`:
 | 
			
		||||
 | 
			
		||||
.. code-block:: c
 | 
			
		||||
 | 
			
		||||
	int (*tls_dev_add)(struct net_device *netdev, struct sock *sk,
 | 
			
		||||
			   enum tls_offload_ctx_dir direction,
 | 
			
		||||
			   struct tls_crypto_info *crypto_info,
 | 
			
		||||
			   u32 start_offload_tcp_sn);
 | 
			
		||||
 | 
			
		||||
``direction`` indicates whether the cryptographic information is for
 | 
			
		||||
the received or transmitted packets. Driver uses the ``sk`` parameter
 | 
			
		||||
to retrieve the connection 5-tuple and socket family (IPv4 vs IPv6).
 | 
			
		||||
Cryptographic information in ``crypto_info`` includes the key, iv, salt
 | 
			
		||||
as well as TLS record sequence number. ``start_offload_tcp_sn`` indicates
 | 
			
		||||
which TCP sequence number corresponds to the beginning of the record with
 | 
			
		||||
sequence number from ``crypto_info``. The driver can add its state
 | 
			
		||||
at the end of kernel structures (see :c:member:`driver_state` members
 | 
			
		||||
in ``include/net/tls.h``) to avoid additional allocations and pointer
 | 
			
		||||
dereferences.
 | 
			
		||||
 | 
			
		||||
TX
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
After TX state is installed, the stack guarantees that the first segment
 | 
			
		||||
of the stream will start exactly at the ``start_offload_tcp_sn`` sequence
 | 
			
		||||
number, simplifying TCP sequence number matching.
 | 
			
		||||
 | 
			
		||||
TX offload being fully initialized does not imply that all segments passing
 | 
			
		||||
through the driver and which belong to the offloaded socket will be after
 | 
			
		||||
the expected sequence number and will have kernel record information.
 | 
			
		||||
In particular, already encrypted data may have been queued to the socket
 | 
			
		||||
before installing the connection state in the kernel.
 | 
			
		||||
 | 
			
		||||
RX
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
In RX direction local networking stack has little control over the segmentation,
 | 
			
		||||
so the initial records' TCP sequence number may be anywhere inside the segment.
 | 
			
		||||
 | 
			
		||||
Normal operation
 | 
			
		||||
================
 | 
			
		||||
 | 
			
		||||
At the minimum the device maintains the following state for each connection, in
 | 
			
		||||
each direction:
 | 
			
		||||
 | 
			
		||||
 * crypto secrets (key, iv, salt)
 | 
			
		||||
 * crypto processing state (partial blocks, partial authentication tag, etc.)
 | 
			
		||||
 * record metadata (sequence number, processing offset and length)
 | 
			
		||||
 * expected TCP sequence number
 | 
			
		||||
 | 
			
		||||
There are no guarantees on record length or record segmentation. In particular
 | 
			
		||||
segments may start at any point of a record and contain any number of records.
 | 
			
		||||
Assuming segments are received in order, the device should be able to perform
 | 
			
		||||
crypto operations and authentication regardless of segmentation. For this
 | 
			
		||||
to be possible device has to keep small amount of segment-to-segment state.
 | 
			
		||||
This includes at least:
 | 
			
		||||
 | 
			
		||||
 * partial headers (if a segment carried only a part of the TLS header)
 | 
			
		||||
 * partial data block
 | 
			
		||||
 * partial authentication tag (all data had been seen but part of the
 | 
			
		||||
   authentication tag has to be written or read from the subsequent segment)
 | 
			
		||||
 | 
			
		||||
Record reassembly is not necessary for TLS offload. If the packets arrive
 | 
			
		||||
in order the device should be able to handle them separately and make
 | 
			
		||||
forward progress.
 | 
			
		||||
 | 
			
		||||
TX
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
The kernel stack performs record framing reserving space for the authentication
 | 
			
		||||
tag and populating all other TLS header and tailer fields.
 | 
			
		||||
 | 
			
		||||
Both the device and the driver maintain expected TCP sequence numbers
 | 
			
		||||
due to the possibility of retransmissions and the lack of software fallback
 | 
			
		||||
once the packet reaches the device.
 | 
			
		||||
For segments passed in order, the driver marks the packets with
 | 
			
		||||
a connection identifier (note that a 5-tuple lookup is insufficient to identify
 | 
			
		||||
packets requiring HW offload, see the :ref:`5tuple_problems` section)
 | 
			
		||||
and hands them to the device. The device identifies the packet as requiring
 | 
			
		||||
TLS handling and confirms the sequence number matches its expectation.
 | 
			
		||||
The device performs encryption and authentication of the record data.
 | 
			
		||||
It replaces the authentication tag and TCP checksum with correct values.
 | 
			
		||||
 | 
			
		||||
RX
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
Before a packet is DMAed to the host (but after NIC's embedded switching
 | 
			
		||||
and packet transformation functions) the device validates the Layer 4
 | 
			
		||||
checksum and performs a 5-tuple lookup to find any TLS connection the packet
 | 
			
		||||
may belong to (technically a 4-tuple
 | 
			
		||||
lookup is sufficient - IP addresses and TCP port numbers, as the protocol
 | 
			
		||||
is always TCP). If connection is matched device confirms if the TCP sequence
 | 
			
		||||
number is the expected one and proceeds to TLS handling (record delineation,
 | 
			
		||||
decryption, authentication for each record in the packet). The device leaves
 | 
			
		||||
the record framing unmodified, the stack takes care of record decapsulation.
 | 
			
		||||
Device indicates successful handling of TLS offload in the per-packet context
 | 
			
		||||
(descriptor) passed to the host.
 | 
			
		||||
 | 
			
		||||
Upon reception of a TLS offloaded packet, the driver sets
 | 
			
		||||
the :c:member:`decrypted` mark in :c:type:`struct sk_buff <sk_buff>`
 | 
			
		||||
corresponding to the segment. Networking stack makes sure decrypted
 | 
			
		||||
and non-decrypted segments do not get coalesced (e.g. by GRO or socket layer)
 | 
			
		||||
and takes care of partial decryption.
 | 
			
		||||
 | 
			
		||||
Resync handling
 | 
			
		||||
===============
 | 
			
		||||
 | 
			
		||||
In presence of packet drops or network packet reordering, the device may lose
 | 
			
		||||
synchronization with the TLS stream, and require a resync with the kernel's
 | 
			
		||||
TCP stack.
 | 
			
		||||
 | 
			
		||||
Note that resync is only attempted for connections which were successfully
 | 
			
		||||
added to the device table and are in TLS_HW mode. For example,
 | 
			
		||||
if the table was full when cryptographic state was installed in the kernel,
 | 
			
		||||
such connection will never get offloaded. Therefore the resync request
 | 
			
		||||
does not carry any cryptographic connection state.
 | 
			
		||||
 | 
			
		||||
TX
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
Segments transmitted from an offloaded socket can get out of sync
 | 
			
		||||
in similar ways to the receive side-retransmissions - local drops
 | 
			
		||||
are possible, though network reorders are not.
 | 
			
		||||
 | 
			
		||||
Whenever an out of order segment is transmitted the driver provides
 | 
			
		||||
the device with enough information to perform cryptographic operations.
 | 
			
		||||
This means most likely that the part of the record preceding the current
 | 
			
		||||
segment has to be passed to the device as part of the packet context,
 | 
			
		||||
together with its TCP sequence number and TLS record number. The device
 | 
			
		||||
can then initialize its crypto state, process and discard the preceding
 | 
			
		||||
data (to be able to insert the authentication tag) and move onto handling
 | 
			
		||||
the actual packet.
 | 
			
		||||
 | 
			
		||||
In this mode depending on the implementation the driver can either ask
 | 
			
		||||
for a continuation with the crypto state and the new sequence number
 | 
			
		||||
(next expected segment is the one after the out of order one), or continue
 | 
			
		||||
with the previous stream state - assuming that the out of order segment
 | 
			
		||||
was just a retransmission. The former is simpler, and does not require
 | 
			
		||||
retransmission detection therefore it is the recommended method until
 | 
			
		||||
such time it is proven inefficient.
 | 
			
		||||
 | 
			
		||||
RX
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
A small amount of RX reorder events may not require a full resynchronization.
 | 
			
		||||
In particular the device should not lose synchronization
 | 
			
		||||
when record boundary can be recovered:
 | 
			
		||||
 | 
			
		||||
.. kernel-figure::  tls-offload-reorder-good.svg
 | 
			
		||||
   :alt:	reorder of non-header segment
 | 
			
		||||
   :align:	center
 | 
			
		||||
 | 
			
		||||
   Reorder of non-header segment
 | 
			
		||||
 | 
			
		||||
Green segments are successfully decrypted, blue ones are passed
 | 
			
		||||
as received on wire, red stripes mark start of new records.
 | 
			
		||||
 | 
			
		||||
In above case segment 1 is received and decrypted successfully.
 | 
			
		||||
Segment 2 was dropped so 3 arrives out of order. The device knows
 | 
			
		||||
the next record starts inside 3, based on record length in segment 1.
 | 
			
		||||
Segment 3 is passed untouched, because due to lack of data from segment 2
 | 
			
		||||
the remainder of the previous record inside segment 3 cannot be handled.
 | 
			
		||||
The device can, however, collect the authentication algorithm's state
 | 
			
		||||
and partial block from the new record in segment 3 and when 4 and 5
 | 
			
		||||
arrive continue decryption. Finally when 2 arrives it's completely outside
 | 
			
		||||
of expected window of the device so it's passed as is without special
 | 
			
		||||
handling. ``ktls`` software fallback handles the decryption of record
 | 
			
		||||
spanning segments 1, 2 and 3. The device did not get out of sync,
 | 
			
		||||
even though two segments did not get decrypted.
 | 
			
		||||
 | 
			
		||||
Kernel synchronization may be necessary if the lost segment contained
 | 
			
		||||
a record header and arrived after the next record header has already passed:
 | 
			
		||||
 | 
			
		||||
.. kernel-figure::  tls-offload-reorder-bad.svg
 | 
			
		||||
   :alt:	reorder of header segment
 | 
			
		||||
   :align:	center
 | 
			
		||||
 | 
			
		||||
   Reorder of segment with a TLS header
 | 
			
		||||
 | 
			
		||||
In this example segment 2 gets dropped, and it contains a record header.
 | 
			
		||||
Device can only detect that segment 4 also contains a TLS header
 | 
			
		||||
if it knows the length of the previous record from segment 2. In this case
 | 
			
		||||
the device will lose synchronization with the stream.
 | 
			
		||||
 | 
			
		||||
When the device gets out of sync and the stream reaches TCP sequence
 | 
			
		||||
numbers more than a max size record past the expected TCP sequence number,
 | 
			
		||||
the device starts scanning for a known header pattern. For example
 | 
			
		||||
for TLS 1.2 and TLS 1.3 subsequent bytes of value ``0x03 0x03`` occur
 | 
			
		||||
in the SSL/TLS version field of the header. Once pattern is matched
 | 
			
		||||
the device continues attempting parsing headers at expected locations
 | 
			
		||||
(based on the length fields at guessed locations).
 | 
			
		||||
Whenever the expected location does not contain a valid header the scan
 | 
			
		||||
is restarted.
 | 
			
		||||
 | 
			
		||||
When the header is matched the device sends a confirmation request
 | 
			
		||||
to the kernel, asking if the guessed location is correct (if a TLS record
 | 
			
		||||
really starts there), and which record sequence number the given header had.
 | 
			
		||||
The kernel confirms the guessed location was correct and tells the device
 | 
			
		||||
the record sequence number. Meanwhile, the device had been parsing
 | 
			
		||||
and counting all records since the just-confirmed one, it adds the number
 | 
			
		||||
of records it had seen to the record number provided by the kernel.
 | 
			
		||||
At this point the device is in sync and can resume decryption at next
 | 
			
		||||
segment boundary.
 | 
			
		||||
 | 
			
		||||
In a pathological case the device may latch onto a sequence of matching
 | 
			
		||||
headers and never hear back from the kernel (there is no negative
 | 
			
		||||
confirmation from the kernel). The implementation may choose to periodically
 | 
			
		||||
restart scan. Given how unlikely falsely-matching stream is, however,
 | 
			
		||||
periodic restart is not deemed necessary.
 | 
			
		||||
 | 
			
		||||
Special care has to be taken if the confirmation request is passed
 | 
			
		||||
asynchronously to the packet stream and record may get processed
 | 
			
		||||
by the kernel before the confirmation request.
 | 
			
		||||
 | 
			
		||||
Error handling
 | 
			
		||||
==============
 | 
			
		||||
 | 
			
		||||
TX
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
Packets may be redirected or rerouted by the stack to a different
 | 
			
		||||
device than the selected TLS offload device. The stack will handle
 | 
			
		||||
such condition using the :c:func:`sk_validate_xmit_skb` helper
 | 
			
		||||
(TLS offload code installs :c:func:`tls_validate_xmit_skb` at this hook).
 | 
			
		||||
Offload maintains information about all records until the data is
 | 
			
		||||
fully acknowledged, so if skbs reach the wrong device they can be handled
 | 
			
		||||
by software fallback.
 | 
			
		||||
 | 
			
		||||
Any device TLS offload handling error on the transmission side must result
 | 
			
		||||
in the packet being dropped. For example if a packet got out of order
 | 
			
		||||
due to a bug in the stack or the device, reached the device and can't
 | 
			
		||||
be encrypted such packet must be dropped.
 | 
			
		||||
 | 
			
		||||
RX
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
If the device encounters any problems with TLS offload on the receive
 | 
			
		||||
side it should pass the packet to the host's networking stack as it was
 | 
			
		||||
received on the wire.
 | 
			
		||||
 | 
			
		||||
For example authentication failure for any record in the segment should
 | 
			
		||||
result in passing the unmodified packet to the software fallback. This means
 | 
			
		||||
packets should not be modified "in place". Splitting segments to handle partial
 | 
			
		||||
decryption is not advised. In other words either all records in the packet
 | 
			
		||||
had been handled successfully and authenticated or the packet has to be passed
 | 
			
		||||
to the host's stack as it was on the wire (recovering original packet in the
 | 
			
		||||
driver if device provides precise error is sufficient).
 | 
			
		||||
 | 
			
		||||
The Linux networking stack does not provide a way of reporting per-packet
 | 
			
		||||
decryption and authentication errors, packets with errors must simply not
 | 
			
		||||
have the :c:member:`decrypted` mark set.
 | 
			
		||||
 | 
			
		||||
A packet should also not be handled by the TLS offload if it contains
 | 
			
		||||
incorrect checksums.
 | 
			
		||||
 | 
			
		||||
Performance metrics
 | 
			
		||||
===================
 | 
			
		||||
 | 
			
		||||
TLS offload can be characterized by the following basic metrics:
 | 
			
		||||
 | 
			
		||||
 * max connection count
 | 
			
		||||
 * connection installation rate
 | 
			
		||||
 * connection installation latency
 | 
			
		||||
 * total cryptographic performance
 | 
			
		||||
 | 
			
		||||
Note that each TCP connection requires a TLS session in both directions,
 | 
			
		||||
the performance may be reported treating each direction separately.
 | 
			
		||||
 | 
			
		||||
Max connection count
 | 
			
		||||
--------------------
 | 
			
		||||
 | 
			
		||||
The number of connections device can support can be exposed via
 | 
			
		||||
``devlink resource`` API.
 | 
			
		||||
 | 
			
		||||
Total cryptographic performance
 | 
			
		||||
-------------------------------
 | 
			
		||||
 | 
			
		||||
Offload performance may depend on segment and record size.
 | 
			
		||||
 | 
			
		||||
Overload of the cryptographic subsystem of the device should not have
 | 
			
		||||
significant performance impact on non-offloaded streams.
 | 
			
		||||
 | 
			
		||||
Statistics
 | 
			
		||||
==========
 | 
			
		||||
 | 
			
		||||
Following minimum set of TLS-related statistics should be reported
 | 
			
		||||
by the driver:
 | 
			
		||||
 | 
			
		||||
 * ``rx_tls_decrypted`` - number of successfully decrypted TLS segments
 | 
			
		||||
 * ``tx_tls_encrypted`` - number of in-order TLS segments passed to device
 | 
			
		||||
   for encryption
 | 
			
		||||
 * ``tx_tls_ooo`` - number of TX packets which were part of a TLS stream
 | 
			
		||||
   but did not arrive in the expected order
 | 
			
		||||
 * ``tx_tls_drop_no_sync_data`` - number of TX packets dropped because
 | 
			
		||||
   they arrived out of order and associated record could not be found
 | 
			
		||||
   (see also :ref:`pre_tls_data`)
 | 
			
		||||
 | 
			
		||||
Notable corner cases, exceptions and additional requirements
 | 
			
		||||
============================================================
 | 
			
		||||
 | 
			
		||||
.. _5tuple_problems:
 | 
			
		||||
 | 
			
		||||
5-tuple matching limitations
 | 
			
		||||
----------------------------
 | 
			
		||||
 | 
			
		||||
The device can only recognize received packets based on the 5-tuple
 | 
			
		||||
of the socket. Current ``ktls`` implementation will not offload sockets
 | 
			
		||||
routed through software interfaces such as those used for tunneling
 | 
			
		||||
or virtual networking. However, many packet transformations performed
 | 
			
		||||
by the networking stack (most notably any BPF logic) do not require
 | 
			
		||||
any intermediate software device, therefore a 5-tuple match may
 | 
			
		||||
consistently miss at the device level. In such cases the device
 | 
			
		||||
should still be able to perform TX offload (encryption) and should
 | 
			
		||||
fallback cleanly to software decryption (RX).
 | 
			
		||||
 | 
			
		||||
Out of order
 | 
			
		||||
------------
 | 
			
		||||
 | 
			
		||||
Introducing extra processing in NICs should not cause packets to be
 | 
			
		||||
transmitted or received out of order, for example pure ACK packets
 | 
			
		||||
should not be reordered with respect to data segments.
 | 
			
		||||
 | 
			
		||||
Ingress reorder
 | 
			
		||||
---------------
 | 
			
		||||
 | 
			
		||||
A device is permitted to perform packet reordering for consecutive
 | 
			
		||||
TCP segments (i.e. placing packets in the correct order) but any form
 | 
			
		||||
of additional buffering is disallowed.
 | 
			
		||||
 | 
			
		||||
Coexistence with standard networking offload features
 | 
			
		||||
-----------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Offloaded ``ktls`` sockets should support standard TCP stack features
 | 
			
		||||
transparently. Enabling device TLS offload should not cause any difference
 | 
			
		||||
in packets as seen on the wire.
 | 
			
		||||
 | 
			
		||||
Transport layer transparency
 | 
			
		||||
----------------------------
 | 
			
		||||
 | 
			
		||||
The device should not modify any packet headers for the purpose
 | 
			
		||||
of the simplifying TLS offload.
 | 
			
		||||
 | 
			
		||||
The device should not depend on any packet headers beyond what is strictly
 | 
			
		||||
necessary for TLS offload.
 | 
			
		||||
 | 
			
		||||
Segment drops
 | 
			
		||||
-------------
 | 
			
		||||
 | 
			
		||||
Dropping packets is acceptable only in the event of catastrophic
 | 
			
		||||
system errors and should never be used as an error handling mechanism
 | 
			
		||||
in cases arising from normal operation. In other words, reliance
 | 
			
		||||
on TCP retransmissions to handle corner cases is not acceptable.
 | 
			
		||||
 | 
			
		||||
TLS device features
 | 
			
		||||
-------------------
 | 
			
		||||
 | 
			
		||||
Drivers should ignore the changes to TLS the device feature flags.
 | 
			
		||||
These flags will be acted upon accordingly by the core ``ktls`` code.
 | 
			
		||||
TLS device feature flags only control adding of new TLS connection
 | 
			
		||||
offloads, old connections will remain active after flags are cleared.
 | 
			
		||||
 | 
			
		||||
Known bugs
 | 
			
		||||
==========
 | 
			
		||||
 | 
			
		||||
skb_orphan() leaks clear text
 | 
			
		||||
-----------------------------
 | 
			
		||||
 | 
			
		||||
Currently drivers depend on the :c:member:`sk` member of
 | 
			
		||||
:c:type:`struct sk_buff <sk_buff>` to identify segments requiring
 | 
			
		||||
encryption. Any operation which removes or does not preserve the socket
 | 
			
		||||
association such as :c:func:`skb_orphan` or :c:func:`skb_clone`
 | 
			
		||||
will cause the driver to miss the packets and lead to clear text leaks.
 | 
			
		||||
 | 
			
		||||
Redirects leak clear text
 | 
			
		||||
-------------------------
 | 
			
		||||
 | 
			
		||||
In the RX direction, if segment has already been decrypted by the device
 | 
			
		||||
and it gets redirected or mirrored - clear text will be transmitted out.
 | 
			
		||||
 | 
			
		||||
.. _pre_tls_data:
 | 
			
		||||
 | 
			
		||||
Transmission of pre-TLS data
 | 
			
		||||
----------------------------
 | 
			
		||||
 | 
			
		||||
User can enqueue some already encrypted and framed records before enabling
 | 
			
		||||
``ktls`` on the socket. Those records have to get sent as they are. This is
 | 
			
		||||
perfectly easy to handle in the software case - such data will be waiting
 | 
			
		||||
in the TCP layer, TLS ULP won't see it. In the offloaded case when pre-queued
 | 
			
		||||
segment reaches transmission point it appears to be out of order (before the
 | 
			
		||||
expected TCP sequence number) and the stack does not have a record information
 | 
			
		||||
associated.
 | 
			
		||||
 | 
			
		||||
All segments without record information cannot, however, be assumed to be
 | 
			
		||||
pre-queued data, because a race condition exists between TCP stack queuing
 | 
			
		||||
a retransmission, the driver seeing the retransmission and TCP ACK arriving
 | 
			
		||||
for the retransmitted data.
 | 
			
		||||
| 
						 | 
				
			
			@ -1,3 +1,9 @@
 | 
			
		|||
.. _kernel_tls:
 | 
			
		||||
 | 
			
		||||
==========
 | 
			
		||||
Kernel TLS
 | 
			
		||||
==========
 | 
			
		||||
 | 
			
		||||
Overview
 | 
			
		||||
========
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -12,6 +18,8 @@ Creating a TLS connection
 | 
			
		|||
 | 
			
		||||
First create a new TCP socket and set the TLS ULP.
 | 
			
		||||
 | 
			
		||||
.. code-block:: c
 | 
			
		||||
 | 
			
		||||
  sock = socket(AF_INET, SOCK_STREAM, 0);
 | 
			
		||||
  setsockopt(sock, SOL_TCP, TCP_ULP, "tls", sizeof("tls"));
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -21,6 +29,8 @@ handshake is complete, we have all the parameters required to move the
 | 
			
		|||
data-path to the kernel. There is a separate socket option for moving
 | 
			
		||||
the transmit and the receive into the kernel.
 | 
			
		||||
 | 
			
		||||
.. code-block:: c
 | 
			
		||||
 | 
			
		||||
  /* From linux/tls.h */
 | 
			
		||||
  struct tls_crypto_info {
 | 
			
		||||
          unsigned short version;
 | 
			
		||||
| 
						 | 
				
			
			@ -58,6 +68,8 @@ After setting the TLS_TX socket option all application data sent over this
 | 
			
		|||
socket is encrypted using TLS and the parameters provided in the socket option.
 | 
			
		||||
For example, we can send an encrypted hello world record as follows:
 | 
			
		||||
 | 
			
		||||
.. code-block:: c
 | 
			
		||||
 | 
			
		||||
  const char *msg = "hello world\n";
 | 
			
		||||
  send(sock, msg, strlen(msg));
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -67,6 +79,8 @@ to the encrypted kernel send buffer if possible.
 | 
			
		|||
The sendfile system call will send the file's data over TLS records of maximum
 | 
			
		||||
length (2^14).
 | 
			
		||||
 | 
			
		||||
.. code-block:: c
 | 
			
		||||
 | 
			
		||||
  file = open(filename, O_RDONLY);
 | 
			
		||||
  fstat(file, &stat);
 | 
			
		||||
  sendfile(sock, file, &offset, stat.st_size);
 | 
			
		||||
| 
						 | 
				
			
			@ -89,6 +103,8 @@ After setting the TLS_RX socket option, all recv family socket calls
 | 
			
		|||
are decrypted using TLS parameters provided.  A full TLS record must
 | 
			
		||||
be received before decryption can happen.
 | 
			
		||||
 | 
			
		||||
.. code-block:: c
 | 
			
		||||
 | 
			
		||||
  char buffer[16384];
 | 
			
		||||
  recv(sock, buffer, 16384);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -97,12 +113,12 @@ large enough, and no additional allocations occur.  If the userspace
 | 
			
		|||
buffer is too small, data is decrypted in the kernel and copied to
 | 
			
		||||
userspace.
 | 
			
		||||
 | 
			
		||||
EINVAL is returned if the TLS version in the received message does not
 | 
			
		||||
``EINVAL`` is returned if the TLS version in the received message does not
 | 
			
		||||
match the version passed in setsockopt.
 | 
			
		||||
 | 
			
		||||
EMSGSIZE is returned if the received message is too big.
 | 
			
		||||
``EMSGSIZE`` is returned if the received message is too big.
 | 
			
		||||
 | 
			
		||||
EBADMSG is returned if decryption failed for any other reason.
 | 
			
		||||
``EBADMSG`` is returned if decryption failed for any other reason.
 | 
			
		||||
 | 
			
		||||
Send TLS control messages
 | 
			
		||||
-------------------------
 | 
			
		||||
| 
						 | 
				
			
			@ -113,9 +129,11 @@ These messages can be sent over the socket by providing the TLS record type
 | 
			
		|||
via a CMSG. For example the following function sends @data of @length bytes
 | 
			
		||||
using a record of type @record_type.
 | 
			
		||||
 | 
			
		||||
/* send TLS control message using record_type */
 | 
			
		||||
.. code-block:: c
 | 
			
		||||
 | 
			
		||||
  /* send TLS control message using record_type */
 | 
			
		||||
  static int klts_send_ctrl_message(int sock, unsigned char record_type,
 | 
			
		||||
                                  void *data, size_t length)
 | 
			
		||||
                                    void *data, size_t length)
 | 
			
		||||
  {
 | 
			
		||||
        struct msghdr msg = {0};
 | 
			
		||||
        int cmsg_len = sizeof(record_type);
 | 
			
		||||
| 
						 | 
				
			
			@ -151,6 +169,8 @@ type passed via cmsg.  If no cmsg buffer is provided, an error is
 | 
			
		|||
returned if a control message is received.  Data messages may be
 | 
			
		||||
received without a cmsg buffer set.
 | 
			
		||||
 | 
			
		||||
.. code-block:: c
 | 
			
		||||
 | 
			
		||||
  char buffer[16384];
 | 
			
		||||
  char cmsg[CMSG_SPACE(sizeof(unsigned char))];
 | 
			
		||||
  struct msghdr msg = {0};
 | 
			
		||||
| 
						 | 
				
			
			@ -186,12 +206,10 @@ Integrating in to userspace TLS library
 | 
			
		|||
At a high level, the kernel TLS ULP is a replacement for the record
 | 
			
		||||
layer of a userspace TLS library.
 | 
			
		||||
 | 
			
		||||
A patchset to OpenSSL to use ktls as the record layer is here:
 | 
			
		||||
A patchset to OpenSSL to use ktls as the record layer is
 | 
			
		||||
`here <https://github.com/Mellanox/openssl/commits/tls_rx2>`_.
 | 
			
		||||
 | 
			
		||||
https://github.com/Mellanox/openssl/commits/tls_rx2
 | 
			
		||||
 | 
			
		||||
An example of calling send directly after a handshake using
 | 
			
		||||
gnutls.  Since it doesn't implement a full record layer, control
 | 
			
		||||
messages are not supported:
 | 
			
		||||
 | 
			
		||||
https://github.com/ktls/af_ktls-tool/commits/RX
 | 
			
		||||
`An example <https://github.com/ktls/af_ktls-tool/commits/RX>`_
 | 
			
		||||
of calling send directly after a handshake using gnutls.
 | 
			
		||||
Since it doesn't implement a full record layer, control
 | 
			
		||||
messages are not supported.
 | 
			
		||||
| 
						 | 
				
			
			@ -37,7 +37,19 @@ import glob
 | 
			
		|||
from docutils import nodes, statemachine
 | 
			
		||||
from docutils.statemachine import ViewList
 | 
			
		||||
from docutils.parsers.rst import directives, Directive
 | 
			
		||||
from sphinx.ext.autodoc import AutodocReporter
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# AutodocReporter is only good up to Sphinx 1.7
 | 
			
		||||
#
 | 
			
		||||
import sphinx
 | 
			
		||||
 | 
			
		||||
Use_SSI = sphinx.__version__[:3] >= '1.7'
 | 
			
		||||
if Use_SSI:
 | 
			
		||||
    from sphinx.util.docutils import switch_source_input
 | 
			
		||||
else:
 | 
			
		||||
    from sphinx.ext.autodoc import AutodocReporter
 | 
			
		||||
 | 
			
		||||
import kernellog
 | 
			
		||||
 | 
			
		||||
__version__  = '1.0'
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -90,7 +102,8 @@ class KernelDocDirective(Directive):
 | 
			
		|||
        cmd += [filename]
 | 
			
		||||
 | 
			
		||||
        try:
 | 
			
		||||
            env.app.verbose('calling kernel-doc \'%s\'' % (" ".join(cmd)))
 | 
			
		||||
            kernellog.verbose(env.app,
 | 
			
		||||
                              'calling kernel-doc \'%s\'' % (" ".join(cmd)))
 | 
			
		||||
 | 
			
		||||
            p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | 
			
		||||
            out, err = p.communicate()
 | 
			
		||||
| 
						 | 
				
			
			@ -100,7 +113,8 @@ class KernelDocDirective(Directive):
 | 
			
		|||
            if p.returncode != 0:
 | 
			
		||||
                sys.stderr.write(err)
 | 
			
		||||
 | 
			
		||||
                env.app.warn('kernel-doc \'%s\' failed with return code %d' % (" ".join(cmd), p.returncode))
 | 
			
		||||
                kernellog.warn(env.app,
 | 
			
		||||
                               'kernel-doc \'%s\' failed with return code %d' % (" ".join(cmd), p.returncode))
 | 
			
		||||
                return [nodes.error(None, nodes.paragraph(text = "kernel-doc missing"))]
 | 
			
		||||
            elif env.config.kerneldoc_verbosity > 0:
 | 
			
		||||
                sys.stderr.write(err)
 | 
			
		||||
| 
						 | 
				
			
			@ -121,20 +135,28 @@ class KernelDocDirective(Directive):
 | 
			
		|||
                    lineoffset += 1
 | 
			
		||||
 | 
			
		||||
            node = nodes.section()
 | 
			
		||||
            buf = self.state.memo.title_styles, self.state.memo.section_level, self.state.memo.reporter
 | 
			
		||||
            self.do_parse(result, node)
 | 
			
		||||
 | 
			
		||||
            return node.children
 | 
			
		||||
 | 
			
		||||
        except Exception as e:  # pylint: disable=W0703
 | 
			
		||||
            kernellog.warn(env.app, 'kernel-doc \'%s\' processing failed with: %s' %
 | 
			
		||||
                           (" ".join(cmd), str(e)))
 | 
			
		||||
            return [nodes.error(None, nodes.paragraph(text = "kernel-doc missing"))]
 | 
			
		||||
 | 
			
		||||
    def do_parse(self, result, node):
 | 
			
		||||
        if Use_SSI:
 | 
			
		||||
            with switch_source_input(self.state, result):
 | 
			
		||||
                self.state.nested_parse(result, 0, node, match_titles=1)
 | 
			
		||||
        else:
 | 
			
		||||
            save = self.state.memo.title_styles, self.state.memo.section_level, self.state.memo.reporter
 | 
			
		||||
            self.state.memo.reporter = AutodocReporter(result, self.state.memo.reporter)
 | 
			
		||||
            self.state.memo.title_styles, self.state.memo.section_level = [], 0
 | 
			
		||||
            try:
 | 
			
		||||
                self.state.nested_parse(result, 0, node, match_titles=1)
 | 
			
		||||
            finally:
 | 
			
		||||
                self.state.memo.title_styles, self.state.memo.section_level, self.state.memo.reporter = buf
 | 
			
		||||
                self.state.memo.title_styles, self.state.memo.section_level, self.state.memo.reporter = save
 | 
			
		||||
 | 
			
		||||
            return node.children
 | 
			
		||||
 | 
			
		||||
        except Exception as e:  # pylint: disable=W0703
 | 
			
		||||
            env.app.warn('kernel-doc \'%s\' processing failed with: %s' %
 | 
			
		||||
                         (" ".join(cmd), str(e)))
 | 
			
		||||
            return [nodes.error(None, nodes.paragraph(text = "kernel-doc missing"))]
 | 
			
		||||
 | 
			
		||||
def setup(app):
 | 
			
		||||
    app.add_config_value('kerneldoc_bin', None, 'env')
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										28
									
								
								Documentation/sphinx/kernellog.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								Documentation/sphinx/kernellog.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,28 @@
 | 
			
		|||
# SPDX-License-Identifier: GPL-2.0
 | 
			
		||||
#
 | 
			
		||||
# Sphinx has deprecated its older logging interface, but the replacement
 | 
			
		||||
# only goes back to 1.6.  So here's a wrapper layer to keep around for
 | 
			
		||||
# as long as we support 1.4.
 | 
			
		||||
#
 | 
			
		||||
import sphinx
 | 
			
		||||
 | 
			
		||||
if sphinx.__version__[:3] >= '1.6':
 | 
			
		||||
    UseLogging = True
 | 
			
		||||
    from sphinx.util import logging
 | 
			
		||||
    logger = logging.getLogger('kerneldoc')
 | 
			
		||||
else:
 | 
			
		||||
    UseLogging = False
 | 
			
		||||
 | 
			
		||||
def warn(app, message):
 | 
			
		||||
    if UseLogging:
 | 
			
		||||
        logger.warning(message)
 | 
			
		||||
    else:
 | 
			
		||||
        app.warn(message)
 | 
			
		||||
 | 
			
		||||
def verbose(app, message):
 | 
			
		||||
    if UseLogging:
 | 
			
		||||
        logger.verbose(message)
 | 
			
		||||
    else:
 | 
			
		||||
        app.verbose(message)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -60,6 +60,8 @@ import sphinx
 | 
			
		|||
from sphinx.util.nodes import clean_astext
 | 
			
		||||
from six import iteritems
 | 
			
		||||
 | 
			
		||||
import kernellog
 | 
			
		||||
 | 
			
		||||
PY3 = sys.version_info[0] == 3
 | 
			
		||||
 | 
			
		||||
if PY3:
 | 
			
		||||
| 
						 | 
				
			
			@ -171,20 +173,20 @@ def setupTools(app):
 | 
			
		|||
    This function is called once, when the builder is initiated.
 | 
			
		||||
    """
 | 
			
		||||
    global dot_cmd, convert_cmd   # pylint: disable=W0603
 | 
			
		||||
    app.verbose("kfigure: check installed tools ...")
 | 
			
		||||
    kernellog.verbose(app, "kfigure: check installed tools ...")
 | 
			
		||||
 | 
			
		||||
    dot_cmd = which('dot')
 | 
			
		||||
    convert_cmd = which('convert')
 | 
			
		||||
 | 
			
		||||
    if dot_cmd:
 | 
			
		||||
        app.verbose("use dot(1) from: " + dot_cmd)
 | 
			
		||||
        kernellog.verbose(app, "use dot(1) from: " + dot_cmd)
 | 
			
		||||
    else:
 | 
			
		||||
        app.warn("dot(1) not found, for better output quality install "
 | 
			
		||||
                 "graphviz from http://www.graphviz.org")
 | 
			
		||||
        kernellog.warn(app, "dot(1) not found, for better output quality install "
 | 
			
		||||
                       "graphviz from http://www.graphviz.org")
 | 
			
		||||
    if convert_cmd:
 | 
			
		||||
        app.verbose("use convert(1) from: " + convert_cmd)
 | 
			
		||||
        kernellog.verbose(app, "use convert(1) from: " + convert_cmd)
 | 
			
		||||
    else:
 | 
			
		||||
        app.warn(
 | 
			
		||||
        kernellog.warn(app,
 | 
			
		||||
            "convert(1) not found, for SVG to PDF conversion install "
 | 
			
		||||
            "ImageMagick (https://www.imagemagick.org)")
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -220,12 +222,13 @@ def convert_image(img_node, translator, src_fname=None):
 | 
			
		|||
 | 
			
		||||
    # in kernel builds, use 'make SPHINXOPTS=-v' to see verbose messages
 | 
			
		||||
 | 
			
		||||
    app.verbose('assert best format for: ' + img_node['uri'])
 | 
			
		||||
    kernellog.verbose(app, 'assert best format for: ' + img_node['uri'])
 | 
			
		||||
 | 
			
		||||
    if in_ext == '.dot':
 | 
			
		||||
 | 
			
		||||
        if not dot_cmd:
 | 
			
		||||
            app.verbose("dot from graphviz not available / include DOT raw.")
 | 
			
		||||
            kernellog.verbose(app,
 | 
			
		||||
                              "dot from graphviz not available / include DOT raw.")
 | 
			
		||||
            img_node.replace_self(file2literal(src_fname))
 | 
			
		||||
 | 
			
		||||
        elif translator.builder.format == 'latex':
 | 
			
		||||
| 
						 | 
				
			
			@ -252,7 +255,8 @@ def convert_image(img_node, translator, src_fname=None):
 | 
			
		|||
 | 
			
		||||
        if translator.builder.format == 'latex':
 | 
			
		||||
            if convert_cmd is None:
 | 
			
		||||
                app.verbose("no SVG to PDF conversion available / include SVG raw.")
 | 
			
		||||
                kernellog.verbose(app,
 | 
			
		||||
                                  "no SVG to PDF conversion available / include SVG raw.")
 | 
			
		||||
                img_node.replace_self(file2literal(src_fname))
 | 
			
		||||
            else:
 | 
			
		||||
                dst_fname = path.join(translator.builder.outdir, fname + '.pdf')
 | 
			
		||||
| 
						 | 
				
			
			@ -265,18 +269,19 @@ def convert_image(img_node, translator, src_fname=None):
 | 
			
		|||
        _name = dst_fname[len(translator.builder.outdir) + 1:]
 | 
			
		||||
 | 
			
		||||
        if isNewer(dst_fname, src_fname):
 | 
			
		||||
            app.verbose("convert: {out}/%s already exists and is newer" % _name)
 | 
			
		||||
            kernellog.verbose(app,
 | 
			
		||||
                              "convert: {out}/%s already exists and is newer" % _name)
 | 
			
		||||
 | 
			
		||||
        else:
 | 
			
		||||
            ok = False
 | 
			
		||||
            mkdir(path.dirname(dst_fname))
 | 
			
		||||
 | 
			
		||||
            if in_ext == '.dot':
 | 
			
		||||
                app.verbose('convert DOT to: {out}/' + _name)
 | 
			
		||||
                kernellog.verbose(app, 'convert DOT to: {out}/' + _name)
 | 
			
		||||
                ok = dot2format(app, src_fname, dst_fname)
 | 
			
		||||
 | 
			
		||||
            elif in_ext == '.svg':
 | 
			
		||||
                app.verbose('convert SVG to: {out}/' + _name)
 | 
			
		||||
                kernellog.verbose(app, 'convert SVG to: {out}/' + _name)
 | 
			
		||||
                ok = svg2pdf(app, src_fname, dst_fname)
 | 
			
		||||
 | 
			
		||||
            if not ok:
 | 
			
		||||
| 
						 | 
				
			
			@ -305,7 +310,8 @@ def dot2format(app, dot_fname, out_fname):
 | 
			
		|||
    with open(out_fname, "w") as out:
 | 
			
		||||
        exit_code = subprocess.call(cmd, stdout = out)
 | 
			
		||||
        if exit_code != 0:
 | 
			
		||||
            app.warn("Error #%d when calling: %s" % (exit_code, " ".join(cmd)))
 | 
			
		||||
            kernellog.warn(app,
 | 
			
		||||
                          "Error #%d when calling: %s" % (exit_code, " ".join(cmd)))
 | 
			
		||||
    return bool(exit_code == 0)
 | 
			
		||||
 | 
			
		||||
def svg2pdf(app, svg_fname, pdf_fname):
 | 
			
		||||
| 
						 | 
				
			
			@ -322,7 +328,7 @@ def svg2pdf(app, svg_fname, pdf_fname):
 | 
			
		|||
    # use stdout and stderr from parent
 | 
			
		||||
    exit_code = subprocess.call(cmd)
 | 
			
		||||
    if exit_code != 0:
 | 
			
		||||
        app.warn("Error #%d when calling: %s" % (exit_code, " ".join(cmd)))
 | 
			
		||||
        kernellog.warn(app, "Error #%d when calling: %s" % (exit_code, " ".join(cmd)))
 | 
			
		||||
    return bool(exit_code == 0)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -415,15 +421,15 @@ def visit_kernel_render(self, node):
 | 
			
		|||
    app = self.builder.app
 | 
			
		||||
    srclang = node.get('srclang')
 | 
			
		||||
 | 
			
		||||
    app.verbose('visit kernel-render node lang: "%s"' % (srclang))
 | 
			
		||||
    kernellog.verbose(app, 'visit kernel-render node lang: "%s"' % (srclang))
 | 
			
		||||
 | 
			
		||||
    tmp_ext = RENDER_MARKUP_EXT.get(srclang, None)
 | 
			
		||||
    if tmp_ext is None:
 | 
			
		||||
        app.warn('kernel-render: "%s" unknown / include raw.' % (srclang))
 | 
			
		||||
        kernellog.warn(app, 'kernel-render: "%s" unknown / include raw.' % (srclang))
 | 
			
		||||
        return
 | 
			
		||||
 | 
			
		||||
    if not dot_cmd and tmp_ext == '.dot':
 | 
			
		||||
        app.verbose("dot from graphviz not available / include raw.")
 | 
			
		||||
        kernellog.verbose(app, "dot from graphviz not available / include raw.")
 | 
			
		||||
        return
 | 
			
		||||
 | 
			
		||||
    literal_block = node[0]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										10
									
								
								MAINTAINERS
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								MAINTAINERS
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -2627,7 +2627,7 @@ F:	Documentation/devicetree/bindings/eeprom/at24.txt
 | 
			
		|||
F:	drivers/misc/eeprom/at24.c
 | 
			
		||||
 | 
			
		||||
ATA OVER ETHERNET (AOE) DRIVER
 | 
			
		||||
M:	"Ed L. Cashin" <ed.cashin@acm.org>
 | 
			
		||||
M:	"Justin Sanders" <justin@coraid.com>
 | 
			
		||||
W:	http://www.openaoe.org/
 | 
			
		||||
S:	Supported
 | 
			
		||||
F:	Documentation/aoe/
 | 
			
		||||
| 
						 | 
				
			
			@ -2768,7 +2768,7 @@ AVIA HX711 ANALOG DIGITAL CONVERTER IIO DRIVER
 | 
			
		|||
M:	Andreas Klinger <ak@it-klinger.de>
 | 
			
		||||
L:	linux-iio@vger.kernel.org
 | 
			
		||||
S:	Maintained
 | 
			
		||||
F:	Documentation/devicetree/bindings/iio/adc/avia-hx711.txt
 | 
			
		||||
F:	Documentation/devicetree/bindings/iio/adc/avia-hx711.yaml
 | 
			
		||||
F:	drivers/iio/adc/hx711.c
 | 
			
		||||
 | 
			
		||||
AX.25 NETWORK LAYER
 | 
			
		||||
| 
						 | 
				
			
			@ -8611,14 +8611,12 @@ F:	arch/x86/include/asm/svm.h
 | 
			
		|||
F:	arch/x86/kvm/svm.c
 | 
			
		||||
 | 
			
		||||
KERNEL VIRTUAL MACHINE FOR ARM/ARM64 (KVM/arm, KVM/arm64)
 | 
			
		||||
M:	Christoffer Dall <christoffer.dall@arm.com>
 | 
			
		||||
M:	Marc Zyngier <marc.zyngier@arm.com>
 | 
			
		||||
R:	James Morse <james.morse@arm.com>
 | 
			
		||||
R:	Julien Thierry <julien.thierry@arm.com>
 | 
			
		||||
R:	Suzuki K Pouloze <suzuki.poulose@arm.com>
 | 
			
		||||
L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 | 
			
		||||
L:	kvmarm@lists.cs.columbia.edu
 | 
			
		||||
W:	http://systems.cs.columbia.edu/projects/kvm-arm
 | 
			
		||||
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm.git
 | 
			
		||||
S:	Maintained
 | 
			
		||||
F:	arch/arm/include/uapi/asm/kvm*
 | 
			
		||||
| 
						 | 
				
			
			@ -11226,7 +11224,7 @@ F:	drivers/video/fbdev/riva/
 | 
			
		|||
F:	drivers/video/fbdev/nvidia/
 | 
			
		||||
 | 
			
		||||
NVM EXPRESS DRIVER
 | 
			
		||||
M:	Keith Busch <keith.busch@intel.com>
 | 
			
		||||
M:	Keith Busch <kbusch@kernel.org>
 | 
			
		||||
M:	Jens Axboe <axboe@fb.com>
 | 
			
		||||
M:	Christoph Hellwig <hch@lst.de>
 | 
			
		||||
M:	Sagi Grimberg <sagi@grimberg.me>
 | 
			
		||||
| 
						 | 
				
			
			@ -14351,7 +14349,7 @@ SIMPLEFB FB DRIVER
 | 
			
		|||
M:	Hans de Goede <hdegoede@redhat.com>
 | 
			
		||||
L:	linux-fbdev@vger.kernel.org
 | 
			
		||||
S:	Maintained
 | 
			
		||||
F:	Documentation/devicetree/bindings/display/simple-framebuffer.txt
 | 
			
		||||
F:	Documentation/devicetree/bindings/display/simple-framebuffer.yaml
 | 
			
		||||
F:	drivers/video/fbdev/simplefb.c
 | 
			
		||||
F:	include/linux/platform_data/simplefb.h
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										4
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								Makefile
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -2,8 +2,8 @@
 | 
			
		|||
VERSION = 5
 | 
			
		||||
PATCHLEVEL = 2
 | 
			
		||||
SUBLEVEL = 0
 | 
			
		||||
EXTRAVERSION = -rc1
 | 
			
		||||
NAME = Shy Crocodile
 | 
			
		||||
EXTRAVERSION = -rc2
 | 
			
		||||
NAME = Golden Lions
 | 
			
		||||
 | 
			
		||||
# *DOCUMENTATION*
 | 
			
		||||
# To see a list of typical targets execute "make help"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,16 +1,8 @@
 | 
			
		|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
 | 
			
		||||
/*
 | 
			
		||||
 * include/asm-alpha/xor.h
 | 
			
		||||
 *
 | 
			
		||||
 * Optimized RAID-5 checksumming functions for alpha EV5 and EV6
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation; either version 2, or (at your option)
 | 
			
		||||
 * any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * (for example /usr/src/linux/COPYING); if not, write to the Free
 | 
			
		||||
 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
extern void xor_alpha_2(unsigned long, unsigned long *, unsigned long *);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,6 +11,7 @@ CFLAGS_ARMV7VE		   :=$(call cc-option, -march=armv7ve)
 | 
			
		|||
 | 
			
		||||
obj-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/hyp/vgic-v3-sr.o
 | 
			
		||||
obj-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/hyp/timer-sr.o
 | 
			
		||||
obj-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/hyp/aarch32.o
 | 
			
		||||
 | 
			
		||||
obj-$(CONFIG_KVM_ARM_HOST) += tlb.o
 | 
			
		||||
obj-$(CONFIG_KVM_ARM_HOST) += cp15-sr.o
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,4 @@
 | 
			
		|||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
/*
 | 
			
		||||
 * Lyrtech SFFSDR board support.
 | 
			
		||||
 *
 | 
			
		||||
| 
						 | 
				
			
			@ -7,20 +8,6 @@
 | 
			
		|||
 * Based on DV-EVM platform, original copyright follows:
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 2007 MontaVista Software, Inc.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program; if not, write to the Free Software
 | 
			
		||||
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <linux/init.h>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,22 +1,8 @@
 | 
			
		|||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
/*
 | 
			
		||||
 * TI DaVinci serial driver
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 2006 Texas Instruments.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 *  You should have received a copy of the GNU General Public License
 | 
			
		||||
 *  along with this program; if not, write to the Free Software
 | 
			
		||||
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <linux/kernel.h>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,4 @@
 | 
			
		|||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
/*
 | 
			
		||||
 * arch/arm/plat-mxc/iomux-v1.c
 | 
			
		||||
 *
 | 
			
		||||
| 
						 | 
				
			
			@ -5,20 +6,6 @@
 | 
			
		|||
 * Copyright (C) 2009 Uwe Kleine-Koenig, Pengutronix
 | 
			
		||||
 *
 | 
			
		||||
 * Common code for i.MX1, i.MX21 and i.MX27
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program; if not, write to the Free Software Foundation, Inc.,
 | 
			
		||||
 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <linux/errno.h>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,21 +1,8 @@
 | 
			
		|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
 | 
			
		||||
/*
 | 
			
		||||
 * PTP 1588 clock using the IXP46X
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 2010 OMICRON electronics GmbH
 | 
			
		||||
 *
 | 
			
		||||
 *  This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 *  it under the terms of the GNU General Public License as published by
 | 
			
		||||
 *  the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
 *  (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 *  This program is distributed in the hope that it will be useful,
 | 
			
		||||
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 *  GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 *  You should have received a copy of the GNU General Public License
 | 
			
		||||
 *  along with this program; if not, write to the Free Software
 | 
			
		||||
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef _IXP46X_TS_H_
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,24 +1,10 @@
 | 
			
		|||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
/*
 | 
			
		||||
  * This file configures the internal USB PHY in OMAP4430. Used
 | 
			
		||||
  * with TWL6030 transceiver and MUSB on OMAP4430.
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com
 | 
			
		||||
  * This program is free software; you can redistribute it and/or modify
 | 
			
		||||
  * it under the terms of the GNU General Public License as published by
 | 
			
		||||
  * the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
  * (at your option) any later version.
 | 
			
		||||
  *
 | 
			
		||||
  * Author: Hema HK <hemahk@ti.com>
 | 
			
		||||
  *
 | 
			
		||||
  * This program is distributed in the hope that it will be useful,
 | 
			
		||||
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
  * GNU General Public License for more details.
 | 
			
		||||
  *
 | 
			
		||||
  * You should have received a copy of the GNU General Public License
 | 
			
		||||
  * along with this program; if not, write to the Free Software
 | 
			
		||||
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
  *
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,22 +1,10 @@
 | 
			
		|||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
/*
 | 
			
		||||
    NetWinder Floating Point Emulator
 | 
			
		||||
    (c) Rebel.COM, 1998,1999
 | 
			
		||||
 | 
			
		||||
    Direct questions, comments to Scott Bambrough <scottb@netwinder.org>
 | 
			
		||||
 | 
			
		||||
    This program is free software; you can redistribute it and/or modify
 | 
			
		||||
    it under the terms of the GNU General Public License as published by
 | 
			
		||||
    the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
    (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
    This program is distributed in the hope that it will be useful,
 | 
			
		||||
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
    GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
    You should have received a copy of the GNU General Public License
 | 
			
		||||
    along with this program; if not, write to the Free Software
 | 
			
		||||
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include "fpa11.h"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,4 @@
 | 
			
		|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
 | 
			
		||||
/*
 | 
			
		||||
    NetWinder Floating Point Emulator
 | 
			
		||||
    (c) Rebel.COM, 1998
 | 
			
		||||
| 
						 | 
				
			
			@ -5,19 +6,6 @@
 | 
			
		|||
 | 
			
		||||
    Direct questions, comments to Scott Bambrough <scottb@netwinder.org>
 | 
			
		||||
 | 
			
		||||
    This program is free software; you can redistribute it and/or modify
 | 
			
		||||
    it under the terms of the GNU General Public License as published by
 | 
			
		||||
    the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
    (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
    This program is distributed in the hope that it will be useful,
 | 
			
		||||
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
    GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
    You should have received a copy of the GNU General Public License
 | 
			
		||||
    along with this program; if not, write to the Free Software
 | 
			
		||||
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
*/
 | 
			
		||||
#include <asm/assembler.h>
 | 
			
		||||
#include <asm/opcodes.h>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,22 +1,10 @@
 | 
			
		|||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
/*
 | 
			
		||||
    NetWinder Floating Point Emulator
 | 
			
		||||
    (c) Rebel.COM, 1998,1999
 | 
			
		||||
 | 
			
		||||
    Direct questions, comments to Scott Bambrough <scottb@netwinder.org>
 | 
			
		||||
 | 
			
		||||
    This program is free software; you can redistribute it and/or modify
 | 
			
		||||
    it under the terms of the GNU General Public License as published by
 | 
			
		||||
    the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
    (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
    This program is distributed in the hope that it will be useful,
 | 
			
		||||
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
    GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
    You should have received a copy of the GNU General Public License
 | 
			
		||||
    along with this program; if not, write to the Free Software
 | 
			
		||||
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include "fpa11.h"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,4 @@
 | 
			
		|||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
/*
 | 
			
		||||
    NetWinder Floating Point Emulator
 | 
			
		||||
    (c) Rebel.COM, 1998,1999
 | 
			
		||||
| 
						 | 
				
			
			@ -5,19 +6,6 @@
 | 
			
		|||
 | 
			
		||||
    Direct questions, comments to Scott Bambrough <scottb@netwinder.org>
 | 
			
		||||
 | 
			
		||||
    This program is free software; you can redistribute it and/or modify
 | 
			
		||||
    it under the terms of the GNU General Public License as published by
 | 
			
		||||
    the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
    (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
    This program is distributed in the hope that it will be useful,
 | 
			
		||||
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
    GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
    You should have received a copy of the GNU General Public License
 | 
			
		||||
    along with this program; if not, write to the Free Software
 | 
			
		||||
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include "fpa11.h"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,22 +1,10 @@
 | 
			
		|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
 | 
			
		||||
/*
 | 
			
		||||
    NetWinder Floating Point Emulator
 | 
			
		||||
    (c) Rebel.com, 1998-1999
 | 
			
		||||
    
 | 
			
		||||
    Direct questions, comments to Scott Bambrough <scottb@netwinder.org>
 | 
			
		||||
 | 
			
		||||
    This program is free software; you can redistribute it and/or modify
 | 
			
		||||
    it under the terms of the GNU General Public License as published by
 | 
			
		||||
    the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
    (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
    This program is distributed in the hope that it will be useful,
 | 
			
		||||
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
    GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
    You should have received a copy of the GNU General Public License
 | 
			
		||||
    along with this program; if not, write to the Free Software
 | 
			
		||||
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef __FPA11_H__
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,4 @@
 | 
			
		|||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
/*
 | 
			
		||||
    NetWinder Floating Point Emulator
 | 
			
		||||
    (c) Rebel.COM, 1998,1999
 | 
			
		||||
| 
						 | 
				
			
			@ -5,19 +6,6 @@
 | 
			
		|||
 | 
			
		||||
    Direct questions, comments to Scott Bambrough <scottb@netwinder.org>
 | 
			
		||||
 | 
			
		||||
    This program is free software; you can redistribute it and/or modify
 | 
			
		||||
    it under the terms of the GNU General Public License as published by
 | 
			
		||||
    the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
    (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
    This program is distributed in the hope that it will be useful,
 | 
			
		||||
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
    GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
    You should have received a copy of the GNU General Public License
 | 
			
		||||
    along with this program; if not, write to the Free Software
 | 
			
		||||
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include "fpa11.h"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,4 @@
 | 
			
		|||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
/*
 | 
			
		||||
    NetWinder Floating Point Emulator
 | 
			
		||||
    (c) Rebel.com, 1998-1999
 | 
			
		||||
| 
						 | 
				
			
			@ -5,19 +6,6 @@
 | 
			
		|||
 | 
			
		||||
    Direct questions, comments to Scott Bambrough <scottb@netwinder.org>
 | 
			
		||||
 | 
			
		||||
    This program is free software; you can redistribute it and/or modify
 | 
			
		||||
    it under the terms of the GNU General Public License as published by
 | 
			
		||||
    the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
    (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
    This program is distributed in the hope that it will be useful,
 | 
			
		||||
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
    GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
    You should have received a copy of the GNU General Public License
 | 
			
		||||
    along with this program; if not, write to the Free Software
 | 
			
		||||
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include "fpa11.h"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,4 @@
 | 
			
		|||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
/*
 | 
			
		||||
    NetWinder Floating Point Emulator
 | 
			
		||||
    (c) Rebel.COM, 1998,1999
 | 
			
		||||
| 
						 | 
				
			
			@ -5,19 +6,6 @@
 | 
			
		|||
 | 
			
		||||
    Direct questions, comments to Scott Bambrough <scottb@netwinder.org>
 | 
			
		||||
 | 
			
		||||
    This program is free software; you can redistribute it and/or modify
 | 
			
		||||
    it under the terms of the GNU General Public License as published by
 | 
			
		||||
    the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
    (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
    This program is distributed in the hope that it will be useful,
 | 
			
		||||
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
    GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
    You should have received a copy of the GNU General Public License
 | 
			
		||||
    along with this program; if not, write to the Free Software
 | 
			
		||||
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include "fpa11.h"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,4 @@
 | 
			
		|||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
    NetWinder Floating Point Emulator
 | 
			
		||||
| 
						 | 
				
			
			@ -6,19 +7,6 @@
 | 
			
		|||
 | 
			
		||||
    Direct questions, comments to Scott Bambrough <scottb@netwinder.org>
 | 
			
		||||
 | 
			
		||||
    This program is free software; you can redistribute it and/or modify
 | 
			
		||||
    it under the terms of the GNU General Public License as published by
 | 
			
		||||
    the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
    (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
    This program is distributed in the hope that it will be useful,
 | 
			
		||||
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
    GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
    You should have received a copy of the GNU General Public License
 | 
			
		||||
    along with this program; if not, write to the Free Software
 | 
			
		||||
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include "fpa11.h"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,22 +1,10 @@
 | 
			
		|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
 | 
			
		||||
/*
 | 
			
		||||
    NetWinder Floating Point Emulator
 | 
			
		||||
    (c) Rebel.com, 1998-1999
 | 
			
		||||
 | 
			
		||||
    Direct questions, comments to Scott Bambrough <scottb@netwinder.org>
 | 
			
		||||
 | 
			
		||||
    This program is free software; you can redistribute it and/or modify
 | 
			
		||||
    it under the terms of the GNU General Public License as published by
 | 
			
		||||
    the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
    (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
    This program is distributed in the hope that it will be useful,
 | 
			
		||||
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
    GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
    You should have received a copy of the GNU General Public License
 | 
			
		||||
    along with this program; if not, write to the Free Software
 | 
			
		||||
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
 | 
			
		||||
    27/03/03 Ian Molton Clean up CONFIG_CPU
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,22 +1,10 @@
 | 
			
		|||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
/*
 | 
			
		||||
    NetWinder Floating Point Emulator
 | 
			
		||||
    (c) Rebel.COM, 1998,1999
 | 
			
		||||
 | 
			
		||||
    Direct questions, comments to Scott Bambrough <scottb@netwinder.org>
 | 
			
		||||
 | 
			
		||||
    This program is free software; you can redistribute it and/or modify
 | 
			
		||||
    it under the terms of the GNU General Public License as published by
 | 
			
		||||
    the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
    (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
    This program is distributed in the hope that it will be useful,
 | 
			
		||||
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
    GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
    You should have received a copy of the GNU General Public License
 | 
			
		||||
    along with this program; if not, write to the Free Software
 | 
			
		||||
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include "fpa11.h"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,4 @@
 | 
			
		|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
 | 
			
		||||
/*
 | 
			
		||||
    NetWinder Floating Point Emulator
 | 
			
		||||
    (c) Rebel.COM, 1998,1999
 | 
			
		||||
| 
						 | 
				
			
			@ -5,19 +6,6 @@
 | 
			
		|||
 | 
			
		||||
    Direct questions, comments to Scott Bambrough <scottb@netwinder.org>
 | 
			
		||||
 | 
			
		||||
    This program is free software; you can redistribute it and/or modify
 | 
			
		||||
    it under the terms of the GNU General Public License as published by
 | 
			
		||||
    the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
    (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
    This program is distributed in the hope that it will be useful,
 | 
			
		||||
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
    GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
    You should have received a copy of the GNU General Public License
 | 
			
		||||
    along with this program; if not, write to the Free Software
 | 
			
		||||
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef __FPOPCODE_H__
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,22 +1,10 @@
 | 
			
		|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
 | 
			
		||||
/*
 | 
			
		||||
    NetWinder Floating Point Emulator
 | 
			
		||||
    (c) Rebel.com, 1998-1999
 | 
			
		||||
 | 
			
		||||
    Direct questions, comments to Scott Bambrough <scottb@netwinder.org>
 | 
			
		||||
 | 
			
		||||
    This program is free software; you can redistribute it and/or modify
 | 
			
		||||
    it under the terms of the GNU General Public License as published by
 | 
			
		||||
    the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
    (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
    This program is distributed in the hope that it will be useful,
 | 
			
		||||
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
    GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
    You should have received a copy of the GNU General Public License
 | 
			
		||||
    along with this program; if not, write to the Free Software
 | 
			
		||||
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef __FPSR_H__
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,4 @@
 | 
			
		|||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
/*
 | 
			
		||||
    NetWinder Floating Point Emulator
 | 
			
		||||
    (c) Rebel.COM, 1998,1999
 | 
			
		||||
| 
						 | 
				
			
			@ -5,19 +6,6 @@
 | 
			
		|||
 | 
			
		||||
    Direct questions, comments to Scott Bambrough <scottb@netwinder.org>
 | 
			
		||||
 | 
			
		||||
    This program is free software; you can redistribute it and/or modify
 | 
			
		||||
    it under the terms of the GNU General Public License as published by
 | 
			
		||||
    the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
    (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
    This program is distributed in the hope that it will be useful,
 | 
			
		||||
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
    GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
    You should have received a copy of the GNU General Public License
 | 
			
		||||
    along with this program; if not, write to the Free Software
 | 
			
		||||
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include "fpa11.h"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -476,16 +476,15 @@ config ARM64_ERRATUM_1024718
 | 
			
		|||
 | 
			
		||||
	  If unsure, say Y.
 | 
			
		||||
 | 
			
		||||
config ARM64_ERRATUM_1188873
 | 
			
		||||
config ARM64_ERRATUM_1418040
 | 
			
		||||
	bool "Cortex-A76/Neoverse-N1: MRC read following MRRC read of specific Generic Timer in AArch32 might give incorrect result"
 | 
			
		||||
	default y
 | 
			
		||||
	depends on COMPAT
 | 
			
		||||
	select ARM_ARCH_TIMER_OOL_WORKAROUND
 | 
			
		||||
	help
 | 
			
		||||
	  This option adds a workaround for ARM Cortex-A76/Neoverse-N1
 | 
			
		||||
	  erratum 1188873.
 | 
			
		||||
	  errata 1188873 and 1418040.
 | 
			
		||||
 | 
			
		||||
	  Affected Cortex-A76/Neoverse-N1 cores (r0p0, r1p0, r2p0) could
 | 
			
		||||
	  Affected Cortex-A76/Neoverse-N1 cores (r0p0 to r3p1) could
 | 
			
		||||
	  cause register corruption when accessing the timer registers
 | 
			
		||||
	  from AArch32 userspace.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -521,6 +520,24 @@ config ARM64_ERRATUM_1286807
 | 
			
		|||
 | 
			
		||||
	  If unsure, say Y.
 | 
			
		||||
 | 
			
		||||
config ARM64_ERRATUM_1463225
 | 
			
		||||
	bool "Cortex-A76: Software Step might prevent interrupt recognition"
 | 
			
		||||
	default y
 | 
			
		||||
	help
 | 
			
		||||
	  This option adds a workaround for Arm Cortex-A76 erratum 1463225.
 | 
			
		||||
 | 
			
		||||
	  On the affected Cortex-A76 cores (r0p0 to r3p1), software stepping
 | 
			
		||||
	  of a system call instruction (SVC) can prevent recognition of
 | 
			
		||||
	  subsequent interrupts when software stepping is disabled in the
 | 
			
		||||
	  exception handler of the system call and either kernel debugging
 | 
			
		||||
	  is enabled or VHE is in use.
 | 
			
		||||
 | 
			
		||||
	  Work around the erratum by triggering a dummy step exception
 | 
			
		||||
	  when handling a system call from a task that is being stepped
 | 
			
		||||
	  in a VHE configuration of the kernel.
 | 
			
		||||
 | 
			
		||||
	  If unsure, say Y.
 | 
			
		||||
 | 
			
		||||
config CAVIUM_ERRATUM_22375
 | 
			
		||||
	bool "Cavium erratum 22375, 24313"
 | 
			
		||||
	default y
 | 
			
		||||
| 
						 | 
				
			
			@ -1406,6 +1423,7 @@ config ARM64_MODULE_PLTS
 | 
			
		|||
 | 
			
		||||
config ARM64_PSEUDO_NMI
 | 
			
		||||
	bool "Support for NMI-like interrupts"
 | 
			
		||||
	depends on BROKEN # 1556553607-46531-1-git-send-email-julien.thierry@arm.com
 | 
			
		||||
	select CONFIG_ARM_GIC_V3
 | 
			
		||||
	help
 | 
			
		||||
	  Adds support for mimicking Non-Maskable Interrupts through the use of
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,7 +53,7 @@
 | 
			
		|||
#define ARM64_HAS_STAGE2_FWB			32
 | 
			
		||||
#define ARM64_HAS_CRC32				33
 | 
			
		||||
#define ARM64_SSBS				34
 | 
			
		||||
#define ARM64_WORKAROUND_1188873		35
 | 
			
		||||
#define ARM64_WORKAROUND_1418040		35
 | 
			
		||||
#define ARM64_HAS_SB				36
 | 
			
		||||
#define ARM64_WORKAROUND_1165522		37
 | 
			
		||||
#define ARM64_HAS_ADDRESS_AUTH_ARCH		38
 | 
			
		||||
| 
						 | 
				
			
			@ -62,7 +62,8 @@
 | 
			
		|||
#define ARM64_HAS_GENERIC_AUTH_IMP_DEF		41
 | 
			
		||||
#define ARM64_HAS_IRQ_PRIO_MASKING		42
 | 
			
		||||
#define ARM64_HAS_DCPODP			43
 | 
			
		||||
#define ARM64_WORKAROUND_1463225		44
 | 
			
		||||
 | 
			
		||||
#define ARM64_NCAPS				44
 | 
			
		||||
#define ARM64_NCAPS				45
 | 
			
		||||
 | 
			
		||||
#endif /* __ASM_CPUCAPS_H */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,6 +18,7 @@
 | 
			
		|||
 */
 | 
			
		||||
#ifndef	__ASM_INSN_H
 | 
			
		||||
#define	__ASM_INSN_H
 | 
			
		||||
#include <linux/build_bug.h>
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
 | 
			
		||||
/* A64 instructions are always 32 bits. */
 | 
			
		||||
| 
						 | 
				
			
			@ -266,18 +267,23 @@ enum aarch64_insn_adr_type {
 | 
			
		|||
	AARCH64_INSN_ADR_TYPE_ADR,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define	__AARCH64_INSN_FUNCS(abbr, mask, val)	\
 | 
			
		||||
static __always_inline bool aarch64_insn_is_##abbr(u32 code) \
 | 
			
		||||
{ return (code & (mask)) == (val); } \
 | 
			
		||||
static __always_inline u32 aarch64_insn_get_##abbr##_value(void) \
 | 
			
		||||
{ return (val); }
 | 
			
		||||
#define	__AARCH64_INSN_FUNCS(abbr, mask, val)				\
 | 
			
		||||
static __always_inline bool aarch64_insn_is_##abbr(u32 code)		\
 | 
			
		||||
{									\
 | 
			
		||||
	BUILD_BUG_ON(~(mask) & (val));					\
 | 
			
		||||
	return (code & (mask)) == (val);				\
 | 
			
		||||
}									\
 | 
			
		||||
static __always_inline u32 aarch64_insn_get_##abbr##_value(void)	\
 | 
			
		||||
{									\
 | 
			
		||||
	return (val);							\
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
__AARCH64_INSN_FUNCS(adr,	0x9F000000, 0x10000000)
 | 
			
		||||
__AARCH64_INSN_FUNCS(adrp,	0x9F000000, 0x90000000)
 | 
			
		||||
__AARCH64_INSN_FUNCS(prfm,	0x3FC00000, 0x39800000)
 | 
			
		||||
__AARCH64_INSN_FUNCS(prfm_lit,	0xFF000000, 0xD8000000)
 | 
			
		||||
__AARCH64_INSN_FUNCS(str_reg,	0x3FE0EC00, 0x38206800)
 | 
			
		||||
__AARCH64_INSN_FUNCS(ldadd,	0x3F20FC00, 0xB8200000)
 | 
			
		||||
__AARCH64_INSN_FUNCS(ldadd,	0x3F20FC00, 0x38200000)
 | 
			
		||||
__AARCH64_INSN_FUNCS(ldr_reg,	0x3FE0EC00, 0x38606800)
 | 
			
		||||
__AARCH64_INSN_FUNCS(ldr_lit,	0xBF000000, 0x18000000)
 | 
			
		||||
__AARCH64_INSN_FUNCS(ldrsw_lit,	0xFF000000, 0x98000000)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -592,9 +592,6 @@ static inline int kvm_arch_vcpu_run_pid_change(struct kvm_vcpu *vcpu)
 | 
			
		|||
void kvm_set_pmu_events(u32 set, struct perf_event_attr *attr);
 | 
			
		||||
void kvm_clr_pmu_events(u32 clr);
 | 
			
		||||
 | 
			
		||||
void __pmu_switch_to_host(struct kvm_cpu_context *host_ctxt);
 | 
			
		||||
bool __pmu_switch_to_guest(struct kvm_cpu_context *host_ctxt);
 | 
			
		||||
 | 
			
		||||
void kvm_vcpu_pmu_restore_guest(struct kvm_vcpu *vcpu);
 | 
			
		||||
void kvm_vcpu_pmu_restore_host(struct kvm_vcpu *vcpu);
 | 
			
		||||
#else
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,7 +20,7 @@
 | 
			
		|||
#include <linux/compat.h>
 | 
			
		||||
#include <linux/err.h>
 | 
			
		||||
 | 
			
		||||
typedef long (*syscall_fn_t)(struct pt_regs *regs);
 | 
			
		||||
typedef long (*syscall_fn_t)(const struct pt_regs *regs);
 | 
			
		||||
 | 
			
		||||
extern const syscall_fn_t sys_call_table[];
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,10 +30,10 @@
 | 
			
		|||
	}										\
 | 
			
		||||
	static inline long __do_compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__))
 | 
			
		||||
 | 
			
		||||
#define COMPAT_SYSCALL_DEFINE0(sname)					\
 | 
			
		||||
	asmlinkage long __arm64_compat_sys_##sname(void);		\
 | 
			
		||||
	ALLOW_ERROR_INJECTION(__arm64_compat_sys_##sname, ERRNO);	\
 | 
			
		||||
	asmlinkage long __arm64_compat_sys_##sname(void)
 | 
			
		||||
#define COMPAT_SYSCALL_DEFINE0(sname)							\
 | 
			
		||||
	asmlinkage long __arm64_compat_sys_##sname(const struct pt_regs *__unused);	\
 | 
			
		||||
	ALLOW_ERROR_INJECTION(__arm64_compat_sys_##sname, ERRNO);			\
 | 
			
		||||
	asmlinkage long __arm64_compat_sys_##sname(const struct pt_regs *__unused)
 | 
			
		||||
 | 
			
		||||
#define COND_SYSCALL_COMPAT(name) \
 | 
			
		||||
	cond_syscall(__arm64_compat_sys_##name);
 | 
			
		||||
| 
						 | 
				
			
			@ -62,11 +62,11 @@
 | 
			
		|||
	static inline long __do_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__))
 | 
			
		||||
 | 
			
		||||
#ifndef SYSCALL_DEFINE0
 | 
			
		||||
#define SYSCALL_DEFINE0(sname)					\
 | 
			
		||||
	SYSCALL_METADATA(_##sname, 0);				\
 | 
			
		||||
	asmlinkage long __arm64_sys_##sname(void);		\
 | 
			
		||||
	ALLOW_ERROR_INJECTION(__arm64_sys_##sname, ERRNO);	\
 | 
			
		||||
	asmlinkage long __arm64_sys_##sname(void)
 | 
			
		||||
#define SYSCALL_DEFINE0(sname)							\
 | 
			
		||||
	SYSCALL_METADATA(_##sname, 0);						\
 | 
			
		||||
	asmlinkage long __arm64_sys_##sname(const struct pt_regs *__unused);	\
 | 
			
		||||
	ALLOW_ERROR_INJECTION(__arm64_sys_##sname, ERRNO);			\
 | 
			
		||||
	asmlinkage long __arm64_sys_##sname(const struct pt_regs *__unused)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef COND_SYSCALL
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -502,6 +502,22 @@ static const struct midr_range arm64_ssb_cpus[] = {
 | 
			
		|||
	{},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_ARM64_ERRATUM_1463225
 | 
			
		||||
DEFINE_PER_CPU(int, __in_cortex_a76_erratum_1463225_wa);
 | 
			
		||||
 | 
			
		||||
static bool
 | 
			
		||||
has_cortex_a76_erratum_1463225(const struct arm64_cpu_capabilities *entry,
 | 
			
		||||
			       int scope)
 | 
			
		||||
{
 | 
			
		||||
	u32 midr = read_cpuid_id();
 | 
			
		||||
	/* Cortex-A76 r0p0 - r3p1 */
 | 
			
		||||
	struct midr_range range = MIDR_RANGE(MIDR_CORTEX_A76, 0, 0, 3, 1);
 | 
			
		||||
 | 
			
		||||
	WARN_ON(scope != SCOPE_LOCAL_CPU || preemptible());
 | 
			
		||||
	return is_midr_in_range(midr, &range) && is_kernel_in_hyp_mode();
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static void __maybe_unused
 | 
			
		||||
cpu_enable_cache_maint_trap(const struct arm64_cpu_capabilities *__unused)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -682,12 +698,16 @@ static const struct midr_range workaround_clean_cache[] = {
 | 
			
		|||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_ARM64_ERRATUM_1188873
 | 
			
		||||
static const struct midr_range erratum_1188873_list[] = {
 | 
			
		||||
	/* Cortex-A76 r0p0 to r2p0 */
 | 
			
		||||
	MIDR_RANGE(MIDR_CORTEX_A76, 0, 0, 2, 0),
 | 
			
		||||
	/* Neoverse-N1 r0p0 to r2p0 */
 | 
			
		||||
	MIDR_RANGE(MIDR_NEOVERSE_N1, 0, 0, 2, 0),
 | 
			
		||||
#ifdef CONFIG_ARM64_ERRATUM_1418040
 | 
			
		||||
/*
 | 
			
		||||
 * - 1188873 affects r0p0 to r2p0
 | 
			
		||||
 * - 1418040 affects r0p0 to r3p1
 | 
			
		||||
 */
 | 
			
		||||
static const struct midr_range erratum_1418040_list[] = {
 | 
			
		||||
	/* Cortex-A76 r0p0 to r3p1 */
 | 
			
		||||
	MIDR_RANGE(MIDR_CORTEX_A76, 0, 0, 3, 1),
 | 
			
		||||
	/* Neoverse-N1 r0p0 to r3p1 */
 | 
			
		||||
	MIDR_RANGE(MIDR_NEOVERSE_N1, 0, 0, 3, 1),
 | 
			
		||||
	{},
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -809,11 +829,11 @@ const struct arm64_cpu_capabilities arm64_errata[] = {
 | 
			
		|||
		.matches = has_ssbd_mitigation,
 | 
			
		||||
		.midr_range_list = arm64_ssb_cpus,
 | 
			
		||||
	},
 | 
			
		||||
#ifdef CONFIG_ARM64_ERRATUM_1188873
 | 
			
		||||
#ifdef CONFIG_ARM64_ERRATUM_1418040
 | 
			
		||||
	{
 | 
			
		||||
		.desc = "ARM erratum 1188873",
 | 
			
		||||
		.capability = ARM64_WORKAROUND_1188873,
 | 
			
		||||
		ERRATA_MIDR_RANGE_LIST(erratum_1188873_list),
 | 
			
		||||
		.desc = "ARM erratum 1418040",
 | 
			
		||||
		.capability = ARM64_WORKAROUND_1418040,
 | 
			
		||||
		ERRATA_MIDR_RANGE_LIST(erratum_1418040_list),
 | 
			
		||||
	},
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef CONFIG_ARM64_ERRATUM_1165522
 | 
			
		||||
| 
						 | 
				
			
			@ -823,6 +843,14 @@ const struct arm64_cpu_capabilities arm64_errata[] = {
 | 
			
		|||
		.capability = ARM64_WORKAROUND_1165522,
 | 
			
		||||
		ERRATA_MIDR_RANGE(MIDR_CORTEX_A76, 0, 0, 2, 0),
 | 
			
		||||
	},
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef CONFIG_ARM64_ERRATUM_1463225
 | 
			
		||||
	{
 | 
			
		||||
		.desc = "ARM erratum 1463225",
 | 
			
		||||
		.capability = ARM64_WORKAROUND_1463225,
 | 
			
		||||
		.type = ARM64_CPUCAP_LOCAL_CPU_ERRATUM,
 | 
			
		||||
		.matches = has_cortex_a76_erratum_1463225,
 | 
			
		||||
	},
 | 
			
		||||
#endif
 | 
			
		||||
	{
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -336,8 +336,8 @@ alternative_if ARM64_WORKAROUND_845719
 | 
			
		|||
alternative_else_nop_endif
 | 
			
		||||
#endif
 | 
			
		||||
3:
 | 
			
		||||
#ifdef CONFIG_ARM64_ERRATUM_1188873
 | 
			
		||||
alternative_if_not ARM64_WORKAROUND_1188873
 | 
			
		||||
#ifdef CONFIG_ARM64_ERRATUM_1418040
 | 
			
		||||
alternative_if_not ARM64_WORKAROUND_1418040
 | 
			
		||||
	b	4f
 | 
			
		||||
alternative_else_nop_endif
 | 
			
		||||
	/*
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -145,15 +145,15 @@ u64 __init kaslr_early_init(u64 dt_phys)
 | 
			
		|||
 | 
			
		||||
	if (IS_ENABLED(CONFIG_RANDOMIZE_MODULE_REGION_FULL)) {
 | 
			
		||||
		/*
 | 
			
		||||
		 * Randomize the module region over a 4 GB window covering the
 | 
			
		||||
		 * Randomize the module region over a 2 GB window covering the
 | 
			
		||||
		 * kernel. This reduces the risk of modules leaking information
 | 
			
		||||
		 * about the address of the kernel itself, but results in
 | 
			
		||||
		 * branches between modules and the core kernel that are
 | 
			
		||||
		 * resolved via PLTs. (Branches between modules will be
 | 
			
		||||
		 * resolved normally.)
 | 
			
		||||
		 */
 | 
			
		||||
		module_range = SZ_4G - (u64)(_end - _stext);
 | 
			
		||||
		module_alloc_base = max((u64)_end + offset - SZ_4G,
 | 
			
		||||
		module_range = SZ_2G - (u64)(_end - _stext);
 | 
			
		||||
		module_alloc_base = max((u64)_end + offset - SZ_2G,
 | 
			
		||||
					(u64)MODULES_VADDR);
 | 
			
		||||
	} else {
 | 
			
		||||
		/*
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -56,7 +56,7 @@ void *module_alloc(unsigned long size)
 | 
			
		|||
		 * can simply omit this fallback in that case.
 | 
			
		||||
		 */
 | 
			
		||||
		p = __vmalloc_node_range(size, MODULE_ALIGN, module_alloc_base,
 | 
			
		||||
				module_alloc_base + SZ_4G, GFP_KERNEL,
 | 
			
		||||
				module_alloc_base + SZ_2G, GFP_KERNEL,
 | 
			
		||||
				PAGE_KERNEL_EXEC, 0, NUMA_NO_NODE,
 | 
			
		||||
				__builtin_return_address(0));
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -96,16 +96,50 @@ static int reloc_data(enum aarch64_reloc_op op, void *place, u64 val, int len)
 | 
			
		|||
{
 | 
			
		||||
	s64 sval = do_reloc(op, place, val);
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * The ELF psABI for AArch64 documents the 16-bit and 32-bit place
 | 
			
		||||
	 * relative and absolute relocations as having a range of [-2^15, 2^16)
 | 
			
		||||
	 * or [-2^31, 2^32), respectively. However, in order to be able to
 | 
			
		||||
	 * detect overflows reliably, we have to choose whether we interpret
 | 
			
		||||
	 * such quantities as signed or as unsigned, and stick with it.
 | 
			
		||||
	 * The way we organize our address space requires a signed
 | 
			
		||||
	 * interpretation of 32-bit relative references, so let's use that
 | 
			
		||||
	 * for all R_AARCH64_PRELxx relocations. This means our upper
 | 
			
		||||
	 * bound for overflow detection should be Sxx_MAX rather than Uxx_MAX.
 | 
			
		||||
	 */
 | 
			
		||||
 | 
			
		||||
	switch (len) {
 | 
			
		||||
	case 16:
 | 
			
		||||
		*(s16 *)place = sval;
 | 
			
		||||
		if (sval < S16_MIN || sval > U16_MAX)
 | 
			
		||||
			return -ERANGE;
 | 
			
		||||
		switch (op) {
 | 
			
		||||
		case RELOC_OP_ABS:
 | 
			
		||||
			if (sval < 0 || sval > U16_MAX)
 | 
			
		||||
				return -ERANGE;
 | 
			
		||||
			break;
 | 
			
		||||
		case RELOC_OP_PREL:
 | 
			
		||||
			if (sval < S16_MIN || sval > S16_MAX)
 | 
			
		||||
				return -ERANGE;
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			pr_err("Invalid 16-bit data relocation (%d)\n", op);
 | 
			
		||||
			return 0;
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	case 32:
 | 
			
		||||
		*(s32 *)place = sval;
 | 
			
		||||
		if (sval < S32_MIN || sval > U32_MAX)
 | 
			
		||||
			return -ERANGE;
 | 
			
		||||
		switch (op) {
 | 
			
		||||
		case RELOC_OP_ABS:
 | 
			
		||||
			if (sval < 0 || sval > U32_MAX)
 | 
			
		||||
				return -ERANGE;
 | 
			
		||||
			break;
 | 
			
		||||
		case RELOC_OP_PREL:
 | 
			
		||||
			if (sval < S32_MIN || sval > S32_MAX)
 | 
			
		||||
				return -ERANGE;
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			pr_err("Invalid 32-bit data relocation (%d)\n", op);
 | 
			
		||||
			return 0;
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	case 64:
 | 
			
		||||
		*(s64 *)place = sval;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,22 +47,26 @@ SYSCALL_DEFINE1(arm64_personality, unsigned int, personality)
 | 
			
		|||
	return ksys_personality(personality);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
asmlinkage long sys_ni_syscall(void);
 | 
			
		||||
 | 
			
		||||
asmlinkage long __arm64_sys_ni_syscall(const struct pt_regs *__unused)
 | 
			
		||||
{
 | 
			
		||||
	return sys_ni_syscall();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Wrappers to pass the pt_regs argument.
 | 
			
		||||
 */
 | 
			
		||||
#define sys_personality		sys_arm64_personality
 | 
			
		||||
 | 
			
		||||
asmlinkage long sys_ni_syscall(const struct pt_regs *);
 | 
			
		||||
#define __arm64_sys_ni_syscall	sys_ni_syscall
 | 
			
		||||
#define __arm64_sys_personality		__arm64_sys_arm64_personality
 | 
			
		||||
 | 
			
		||||
#undef __SYSCALL
 | 
			
		||||
#define __SYSCALL(nr, sym)	asmlinkage long __arm64_##sym(const struct pt_regs *);
 | 
			
		||||
#include <asm/unistd.h>
 | 
			
		||||
 | 
			
		||||
#undef __SYSCALL
 | 
			
		||||
#define __SYSCALL(nr, sym)	[nr] = (syscall_fn_t)__arm64_##sym,
 | 
			
		||||
#define __SYSCALL(nr, sym)	[nr] = __arm64_##sym,
 | 
			
		||||
 | 
			
		||||
const syscall_fn_t sys_call_table[__NR_syscalls] = {
 | 
			
		||||
	[0 ... __NR_syscalls - 1] = (syscall_fn_t)sys_ni_syscall,
 | 
			
		||||
	[0 ... __NR_syscalls - 1] = __arm64_sys_ni_syscall,
 | 
			
		||||
#include <asm/unistd.h>
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -133,17 +133,14 @@ COMPAT_SYSCALL_DEFINE6(aarch32_fallocate, int, fd, int, mode,
 | 
			
		|||
	return ksys_fallocate(fd, mode, arg_u64(offset), arg_u64(len));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
asmlinkage long sys_ni_syscall(const struct pt_regs *);
 | 
			
		||||
#define __arm64_sys_ni_syscall	sys_ni_syscall
 | 
			
		||||
 | 
			
		||||
#undef __SYSCALL
 | 
			
		||||
#define __SYSCALL(nr, sym)	asmlinkage long __arm64_##sym(const struct pt_regs *);
 | 
			
		||||
#include <asm/unistd32.h>
 | 
			
		||||
 | 
			
		||||
#undef __SYSCALL
 | 
			
		||||
#define __SYSCALL(nr, sym)	[nr] = (syscall_fn_t)__arm64_##sym,
 | 
			
		||||
#define __SYSCALL(nr, sym)	[nr] = __arm64_##sym,
 | 
			
		||||
 | 
			
		||||
const syscall_fn_t compat_sys_call_table[__NR_compat_syscalls] = {
 | 
			
		||||
	[0 ... __NR_compat_syscalls - 1] = (syscall_fn_t)sys_ni_syscall,
 | 
			
		||||
	[0 ... __NR_compat_syscalls - 1] = __arm64_sys_ni_syscall,
 | 
			
		||||
#include <asm/unistd32.h>
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,6 +8,7 @@
 | 
			
		|||
#include <linux/syscalls.h>
 | 
			
		||||
 | 
			
		||||
#include <asm/daifflags.h>
 | 
			
		||||
#include <asm/debug-monitors.h>
 | 
			
		||||
#include <asm/fpsimd.h>
 | 
			
		||||
#include <asm/syscall.h>
 | 
			
		||||
#include <asm/thread_info.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -60,6 +61,35 @@ static inline bool has_syscall_work(unsigned long flags)
 | 
			
		|||
int syscall_trace_enter(struct pt_regs *regs);
 | 
			
		||||
void syscall_trace_exit(struct pt_regs *regs);
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_ARM64_ERRATUM_1463225
 | 
			
		||||
DECLARE_PER_CPU(int, __in_cortex_a76_erratum_1463225_wa);
 | 
			
		||||
 | 
			
		||||
static void cortex_a76_erratum_1463225_svc_handler(void)
 | 
			
		||||
{
 | 
			
		||||
	u32 reg, val;
 | 
			
		||||
 | 
			
		||||
	if (!unlikely(test_thread_flag(TIF_SINGLESTEP)))
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (!unlikely(this_cpu_has_cap(ARM64_WORKAROUND_1463225)))
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	__this_cpu_write(__in_cortex_a76_erratum_1463225_wa, 1);
 | 
			
		||||
	reg = read_sysreg(mdscr_el1);
 | 
			
		||||
	val = reg | DBG_MDSCR_SS | DBG_MDSCR_KDE;
 | 
			
		||||
	write_sysreg(val, mdscr_el1);
 | 
			
		||||
	asm volatile("msr daifclr, #8");
 | 
			
		||||
	isb();
 | 
			
		||||
 | 
			
		||||
	/* We will have taken a single-step exception by this point */
 | 
			
		||||
 | 
			
		||||
	write_sysreg(reg, mdscr_el1);
 | 
			
		||||
	__this_cpu_write(__in_cortex_a76_erratum_1463225_wa, 0);
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
static void cortex_a76_erratum_1463225_svc_handler(void) { }
 | 
			
		||||
#endif /* CONFIG_ARM64_ERRATUM_1463225 */
 | 
			
		||||
 | 
			
		||||
static void el0_svc_common(struct pt_regs *regs, int scno, int sc_nr,
 | 
			
		||||
			   const syscall_fn_t syscall_table[])
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -68,6 +98,7 @@ static void el0_svc_common(struct pt_regs *regs, int scno, int sc_nr,
 | 
			
		|||
	regs->orig_x0 = regs->regs[0];
 | 
			
		||||
	regs->syscallno = scno;
 | 
			
		||||
 | 
			
		||||
	cortex_a76_erratum_1463225_svc_handler();
 | 
			
		||||
	local_daif_restore(DAIF_PROCCTX);
 | 
			
		||||
	user_exit();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -168,7 +168,6 @@ void show_stack(struct task_struct *tsk, unsigned long *sp)
 | 
			
		|||
 | 
			
		||||
static int __die(const char *str, int err, struct pt_regs *regs)
 | 
			
		||||
{
 | 
			
		||||
	struct task_struct *tsk = current;
 | 
			
		||||
	static int die_counter;
 | 
			
		||||
	int ret;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -181,9 +180,6 @@ static int __die(const char *str, int err, struct pt_regs *regs)
 | 
			
		|||
		return ret;
 | 
			
		||||
 | 
			
		||||
	print_modules();
 | 
			
		||||
	pr_emerg("Process %.*s (pid: %d, stack limit = 0x%p)\n",
 | 
			
		||||
		 TASK_COMM_LEN, tsk->comm, task_pid_nr(tsk),
 | 
			
		||||
		 end_of_stack(tsk));
 | 
			
		||||
	show_regs(regs);
 | 
			
		||||
 | 
			
		||||
	if (!user_mode(regs))
 | 
			
		||||
| 
						 | 
				
			
			@ -256,7 +252,10 @@ void arm64_force_sig_fault(int signo, int code, void __user *addr,
 | 
			
		|||
			   const char *str)
 | 
			
		||||
{
 | 
			
		||||
	arm64_show_signal(signo, str);
 | 
			
		||||
	force_sig_fault(signo, code, addr, current);
 | 
			
		||||
	if (signo == SIGKILL)
 | 
			
		||||
		force_sig(SIGKILL, current);
 | 
			
		||||
	else
 | 
			
		||||
		force_sig_fault(signo, code, addr, current);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void arm64_force_sig_mceerr(int code, void __user *addr, short lsb,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,6 +10,7 @@ KVM=../../../../virt/kvm
 | 
			
		|||
 | 
			
		||||
obj-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/hyp/vgic-v3-sr.o
 | 
			
		||||
obj-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/hyp/timer-sr.o
 | 
			
		||||
obj-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/hyp/aarch32.o
 | 
			
		||||
 | 
			
		||||
obj-$(CONFIG_KVM_ARM_HOST) += vgic-v2-cpuif-proxy.o
 | 
			
		||||
obj-$(CONFIG_KVM_ARM_HOST) += sysreg-sr.o
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,6 +16,7 @@
 | 
			
		|||
 */
 | 
			
		||||
 | 
			
		||||
#include <linux/arm-smccc.h>
 | 
			
		||||
#include <linux/kvm_host.h>
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
#include <linux/jump_label.h>
 | 
			
		||||
#include <uapi/linux/psci.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -505,6 +506,44 @@ static void __hyp_text __set_host_arch_workaround_state(struct kvm_vcpu *vcpu)
 | 
			
		|||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Disable host events, enable guest events
 | 
			
		||||
 */
 | 
			
		||||
static bool __hyp_text __pmu_switch_to_guest(struct kvm_cpu_context *host_ctxt)
 | 
			
		||||
{
 | 
			
		||||
	struct kvm_host_data *host;
 | 
			
		||||
	struct kvm_pmu_events *pmu;
 | 
			
		||||
 | 
			
		||||
	host = container_of(host_ctxt, struct kvm_host_data, host_ctxt);
 | 
			
		||||
	pmu = &host->pmu_events;
 | 
			
		||||
 | 
			
		||||
	if (pmu->events_host)
 | 
			
		||||
		write_sysreg(pmu->events_host, pmcntenclr_el0);
 | 
			
		||||
 | 
			
		||||
	if (pmu->events_guest)
 | 
			
		||||
		write_sysreg(pmu->events_guest, pmcntenset_el0);
 | 
			
		||||
 | 
			
		||||
	return (pmu->events_host || pmu->events_guest);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Disable guest events, enable host events
 | 
			
		||||
 */
 | 
			
		||||
static void __hyp_text __pmu_switch_to_host(struct kvm_cpu_context *host_ctxt)
 | 
			
		||||
{
 | 
			
		||||
	struct kvm_host_data *host;
 | 
			
		||||
	struct kvm_pmu_events *pmu;
 | 
			
		||||
 | 
			
		||||
	host = container_of(host_ctxt, struct kvm_host_data, host_ctxt);
 | 
			
		||||
	pmu = &host->pmu_events;
 | 
			
		||||
 | 
			
		||||
	if (pmu->events_guest)
 | 
			
		||||
		write_sysreg(pmu->events_guest, pmcntenclr_el0);
 | 
			
		||||
 | 
			
		||||
	if (pmu->events_host)
 | 
			
		||||
		write_sysreg(pmu->events_host, pmcntenset_el0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Switch to the guest for VHE systems running in EL2 */
 | 
			
		||||
int kvm_vcpu_run_vhe(struct kvm_vcpu *vcpu)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,44 +53,6 @@ void kvm_clr_pmu_events(u32 clr)
 | 
			
		|||
	ctx->pmu_events.events_guest &= ~clr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Disable host events, enable guest events
 | 
			
		||||
 */
 | 
			
		||||
bool __hyp_text __pmu_switch_to_guest(struct kvm_cpu_context *host_ctxt)
 | 
			
		||||
{
 | 
			
		||||
	struct kvm_host_data *host;
 | 
			
		||||
	struct kvm_pmu_events *pmu;
 | 
			
		||||
 | 
			
		||||
	host = container_of(host_ctxt, struct kvm_host_data, host_ctxt);
 | 
			
		||||
	pmu = &host->pmu_events;
 | 
			
		||||
 | 
			
		||||
	if (pmu->events_host)
 | 
			
		||||
		write_sysreg(pmu->events_host, pmcntenclr_el0);
 | 
			
		||||
 | 
			
		||||
	if (pmu->events_guest)
 | 
			
		||||
		write_sysreg(pmu->events_guest, pmcntenset_el0);
 | 
			
		||||
 | 
			
		||||
	return (pmu->events_host || pmu->events_guest);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Disable guest events, enable host events
 | 
			
		||||
 */
 | 
			
		||||
void __hyp_text __pmu_switch_to_host(struct kvm_cpu_context *host_ctxt)
 | 
			
		||||
{
 | 
			
		||||
	struct kvm_host_data *host;
 | 
			
		||||
	struct kvm_pmu_events *pmu;
 | 
			
		||||
 | 
			
		||||
	host = container_of(host_ctxt, struct kvm_host_data, host_ctxt);
 | 
			
		||||
	pmu = &host->pmu_events;
 | 
			
		||||
 | 
			
		||||
	if (pmu->events_guest)
 | 
			
		||||
		write_sysreg(pmu->events_guest, pmcntenclr_el0);
 | 
			
		||||
 | 
			
		||||
	if (pmu->events_host)
 | 
			
		||||
		write_sysreg(pmu->events_host, pmcntenset_el0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define PMEVTYPER_READ_CASE(idx)				\
 | 
			
		||||
	case idx:						\
 | 
			
		||||
		return read_sysreg(pmevtyper##idx##_el0)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -811,6 +811,36 @@ void __init hook_debug_fault_code(int nr,
 | 
			
		|||
	debug_fault_info[nr].name	= name;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_ARM64_ERRATUM_1463225
 | 
			
		||||
DECLARE_PER_CPU(int, __in_cortex_a76_erratum_1463225_wa);
 | 
			
		||||
 | 
			
		||||
static int __exception
 | 
			
		||||
cortex_a76_erratum_1463225_debug_handler(struct pt_regs *regs)
 | 
			
		||||
{
 | 
			
		||||
	if (user_mode(regs))
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	if (!__this_cpu_read(__in_cortex_a76_erratum_1463225_wa))
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * We've taken a dummy step exception from the kernel to ensure
 | 
			
		||||
	 * that interrupts are re-enabled on the syscall path. Return back
 | 
			
		||||
	 * to cortex_a76_erratum_1463225_svc_handler() with debug exceptions
 | 
			
		||||
	 * masked so that we can safely restore the mdscr and get on with
 | 
			
		||||
	 * handling the syscall.
 | 
			
		||||
	 */
 | 
			
		||||
	regs->pstate |= PSR_D_BIT;
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
static int __exception
 | 
			
		||||
cortex_a76_erratum_1463225_debug_handler(struct pt_regs *regs)
 | 
			
		||||
{
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
#endif /* CONFIG_ARM64_ERRATUM_1463225 */
 | 
			
		||||
 | 
			
		||||
asmlinkage void __exception do_debug_exception(unsigned long addr_if_watchpoint,
 | 
			
		||||
					       unsigned int esr,
 | 
			
		||||
					       struct pt_regs *regs)
 | 
			
		||||
| 
						 | 
				
			
			@ -818,6 +848,9 @@ asmlinkage void __exception do_debug_exception(unsigned long addr_if_watchpoint,
 | 
			
		|||
	const struct fault_info *inf = esr_to_debug_fault_info(esr);
 | 
			
		||||
	unsigned long pc = instruction_pointer(regs);
 | 
			
		||||
 | 
			
		||||
	if (cortex_a76_erratum_1463225_debug_handler(regs))
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * Tell lockdep we disabled irqs in entry.S. Do nothing if they were
 | 
			
		||||
	 * already disabled to preserve the last enabled/disabled addresses.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,13 +1,9 @@
 | 
			
		|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
 | 
			
		||||
/*
 | 
			
		||||
 *  C6X IRQ flag handling
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 2010 Texas Instruments Incorporated
 | 
			
		||||
 * Written by Mark Salter (msalter@redhat.com)
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software; you can redistribute it and/or
 | 
			
		||||
 * modify it under the terms of the GNU General Public Licence
 | 
			
		||||
 * as published by the Free Software Foundation; either version
 | 
			
		||||
 * 2 of the Licence, or (at your option) any later version.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef _ASM_IRQFLAGS_H
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,14 +1,6 @@
 | 
			
		|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
 | 
			
		||||
/*
 | 
			
		||||
 * Optimized RAID-5 checksumming functions for IA-64.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation; either version 2, or (at your option)
 | 
			
		||||
 * any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * (for example /usr/src/linux/COPYING); if not, write to the Free
 | 
			
		||||
 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,16 +1,8 @@
 | 
			
		|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
 | 
			
		||||
/*
 | 
			
		||||
 * arch/ia64/lib/xor.S
 | 
			
		||||
 *
 | 
			
		||||
 * Optimized RAID-5 checksumming functions for IA-64.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation; either version 2, or (at your option)
 | 
			
		||||
 * any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * (for example /usr/src/linux/COPYING); if not, write to the Free
 | 
			
		||||
 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <asm/asmmacro.h>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -55,6 +55,7 @@ paddr_to_nid(unsigned long paddr)
 | 
			
		|||
 | 
			
		||||
	return (i < num_node_memblks) ? node_memblk[i].nid : (num_node_memblks ? -1 : 0);
 | 
			
		||||
}
 | 
			
		||||
EXPORT_SYMBOL(paddr_to_nid);
 | 
			
		||||
 | 
			
		||||
#if defined(CONFIG_SPARSEMEM) && defined(CONFIG_NUMA)
 | 
			
		||||
/*
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,4 @@
 | 
			
		|||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
/*
 | 
			
		||||
 | 
			
		||||
   fp_arith.c: floating-point math routines for the Linux-m68k
 | 
			
		||||
| 
						 | 
				
			
			@ -8,9 +9,6 @@
 | 
			
		|||
   Somewhat based on the AlphaLinux floating point emulator, by David
 | 
			
		||||
   Mosberger-Tang.
 | 
			
		||||
 | 
			
		||||
   You may copy, modify, and redistribute this file under the terms of
 | 
			
		||||
   the GNU General Public License, version 2, or any later version, at
 | 
			
		||||
   your convenience.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "fp_emu.h"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,4 @@
 | 
			
		|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
 | 
			
		||||
/*
 | 
			
		||||
 | 
			
		||||
   fp_arith.h: floating-point math routines for the Linux-m68k
 | 
			
		||||
| 
						 | 
				
			
			@ -8,9 +9,6 @@
 | 
			
		|||
   Somewhat based on the AlphaLinux floating point emulator, by David
 | 
			
		||||
   Mosberger-Tang.
 | 
			
		||||
 | 
			
		||||
   You may copy, modify, and redistribute this file under the terms of
 | 
			
		||||
   the GNU General Public License, version 2, or any later version, at
 | 
			
		||||
   your convenience.
 | 
			
		||||
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,4 @@
 | 
			
		|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
 | 
			
		||||
/* multi_arith.h: multi-precision integer arithmetic functions, needed
 | 
			
		||||
   to do extended-precision floating point.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -6,9 +7,7 @@
 | 
			
		|||
   Somewhat based on arch/alpha/math-emu/ieee-math.c, which is (c)
 | 
			
		||||
   David Mosberger-Tang.
 | 
			
		||||
 | 
			
		||||
   You may copy, modify, and redistribute this file under the terms of
 | 
			
		||||
   the GNU General Public License, version 2, or any later version, at
 | 
			
		||||
   your convenience. */
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Note:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,21 +1,8 @@
 | 
			
		|||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
/*
 | 
			
		||||
 * GPR board platform device registration (Au1550)
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 2010 Wolfgang Grandegger <wg@denx.de>
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program; if not, write to the Free Software
 | 
			
		||||
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <linux/delay.h>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,21 +1,8 @@
 | 
			
		|||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
/*
 | 
			
		||||
 * MTX-1 platform devices registration (Au1500)
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 2007-2009, Florian Fainelli <florian@openwrt.org>
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program; if not, write to the Free Software
 | 
			
		||||
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <linux/init.h>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,23 +1,10 @@
 | 
			
		|||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
/*
 | 
			
		||||
 * BRIEF MODULE DESCRIPTION
 | 
			
		||||
 *	MyCable XXS1500 board support
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright 2003, 2008 MontaVista Software Inc.
 | 
			
		||||
 * Author: MontaVista Software, Inc. <source@mvista.com>
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program; if not, write to the Free Software
 | 
			
		||||
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <linux/kernel.h>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,22 +1,9 @@
 | 
			
		|||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
/*
 | 
			
		||||
 * DBAu1000/1500/1100 PBAu1100/1500 board support
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright 2000, 2008 MontaVista Software Inc.
 | 
			
		||||
 * Author: MontaVista Software, Inc. <source@mvista.com>
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program; if not, write to the Free Software
 | 
			
		||||
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <linux/clk.h>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,21 +1,8 @@
 | 
			
		|||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
/*
 | 
			
		||||
 * DBAu1200/PBAu1200 board platform device registration
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 2008-2011 Manuel Lauss
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program; if not, write to the Free Software
 | 
			
		||||
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <linux/clk.h>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,21 +1,8 @@
 | 
			
		|||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2007 Felix Fietkau <nbd@openwrt.org>
 | 
			
		||||
 * Copyright (C) 2007 Eugene Konev <ejka@openwrt.org>
 | 
			
		||||
 * Copyright (C) 2009 Florian Fainelli <florian@openwrt.org>
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program; if not, write to the Free Software
 | 
			
		||||
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <linux/kernel.h>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,21 +1,8 @@
 | 
			
		|||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2007 Felix Fietkau <nbd@openwrt.org>
 | 
			
		||||
 * Copyright (C) 2007 Eugene Konev <ejka@openwrt.org>
 | 
			
		||||
 * Copyright (C) 2009-2010 Florian Fainelli <florian@openwrt.org>
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program; if not, write to the Free Software
 | 
			
		||||
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <linux/init.h>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,20 +1,7 @@
 | 
			
		|||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2006,2007 Felix Fietkau <nbd@openwrt.org>
 | 
			
		||||
 * Copyright (C) 2006,2007 Eugene Konev <ejka@openwrt.org>
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program; if not, write to the Free Software
 | 
			
		||||
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <linux/interrupt.h>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,20 +1,7 @@
 | 
			
		|||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2007 Felix Fietkau <nbd@openwrt.org>
 | 
			
		||||
 * Copyright (C) 2007 Eugene Konev <ejka@openwrt.org>
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program; if not, write to the Free Software
 | 
			
		||||
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 | 
			
		||||
 */
 | 
			
		||||
#include <linux/memblock.h>
 | 
			
		||||
#include <linux/init.h>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
		Reference in a new issue