Merge 4b6c093e21 ("Merge tag 'block-5.9-2020-08-14' of git://git.kernel.dk/linux-block") into android-mainline

Steps on the way to 5.9-rc1

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: I904678b5c31139b25fb49ee67cbacb4721a3c7bc
This commit is contained in:
Greg Kroah-Hartman
2020-08-17 09:19:35 +02:00
694 changed files with 9550 additions and 6144 deletions

View File

@@ -104,6 +104,7 @@ Gerald Schaefer <gerald.schaefer@linux.ibm.com> <geraldsc@linux.vnet.ibm.com>
Greg Kroah-Hartman <greg@echidna.(none)> Greg Kroah-Hartman <greg@echidna.(none)>
Greg Kroah-Hartman <gregkh@suse.de> Greg Kroah-Hartman <gregkh@suse.de>
Greg Kroah-Hartman <greg@kroah.com> Greg Kroah-Hartman <greg@kroah.com>
Greg Kurz <groug@kaod.org> <gkurz@linux.vnet.ibm.com>
Gregory CLEMENT <gregory.clement@bootlin.com> <gregory.clement@free-electrons.com> Gregory CLEMENT <gregory.clement@bootlin.com> <gregory.clement@free-electrons.com>
Hanjun Guo <guohanjun@huawei.com> <hanjun.guo@linaro.org> Hanjun Guo <guohanjun@huawei.com> <hanjun.guo@linaro.org>
Heiko Carstens <hca@linux.ibm.com> <h.carstens@de.ibm.com> Heiko Carstens <hca@linux.ibm.com> <h.carstens@de.ibm.com>

View File

@@ -80,6 +80,10 @@ The possible values in this file are:
- The processor is not vulnerable. - The processor is not vulnerable.
* - KVM: Mitigation: Split huge pages * - KVM: Mitigation: Split huge pages
- Software changes mitigate this issue. - Software changes mitigate this issue.
* - KVM: Mitigation: VMX unsupported
- KVM is not vulnerable because Virtual Machine Extensions (VMX) is not supported.
* - KVM: Mitigation: VMX disabled
- KVM is not vulnerable because Virtual Machine Extensions (VMX) is disabled.
* - KVM: Vulnerable * - KVM: Vulnerable
- The processor is vulnerable, but no mitigation enabled - The processor is vulnerable, but no mitigation enabled

View File

@@ -54,10 +54,13 @@ registered (see `below <status_attr_>`_).
Operation Modes Operation Modes
=============== ===============
``intel_pstate`` can operate in three different modes: in the active mode with ``intel_pstate`` can operate in two different modes, active or passive. In the
or without hardware-managed P-states support and in the passive mode. Which of active mode, it uses its own internal performance scaling governor algorithm or
them will be in effect depends on what kernel command line options are used and allows the hardware to do preformance scaling by itself, while in the passive
on the capabilities of the processor. mode it responds to requests made by a generic ``CPUFreq`` governor implementing
a certain performance scaling algorithm. Which of them will be in effect
depends on what kernel command line options are used and on the capabilities of
the processor.
Active Mode Active Mode
----------- -----------
@@ -194,10 +197,11 @@ This is the default operation mode of ``intel_pstate`` for processors without
hardware-managed P-states (HWP) support. It is always used if the hardware-managed P-states (HWP) support. It is always used if the
``intel_pstate=passive`` argument is passed to the kernel in the command line ``intel_pstate=passive`` argument is passed to the kernel in the command line
regardless of whether or not the given processor supports HWP. [Note that the regardless of whether or not the given processor supports HWP. [Note that the
``intel_pstate=no_hwp`` setting implies ``intel_pstate=passive`` if it is used ``intel_pstate=no_hwp`` setting causes the driver to start in the passive mode
without ``intel_pstate=active``.] Like in the active mode without HWP support, if it is not combined with ``intel_pstate=active``.] Like in the active mode
in this mode ``intel_pstate`` may refuse to work with processors that are not without HWP support, in this mode ``intel_pstate`` may refuse to work with
recognized by it. processors that are not recognized by it if HWP is prevented from being enabled
through the kernel command line.
If the driver works in this mode, the ``scaling_driver`` policy attribute in If the driver works in this mode, the ``scaling_driver`` policy attribute in
``sysfs`` for all ``CPUFreq`` policies contains the string "intel_cpufreq". ``sysfs`` for all ``CPUFreq`` policies contains the string "intel_cpufreq".
@@ -318,10 +322,9 @@ manuals need to be consulted to get to it too.
For this reason, there is a list of supported processors in ``intel_pstate`` and For this reason, there is a list of supported processors in ``intel_pstate`` and
the driver initialization will fail if the detected processor is not in that the driver initialization will fail if the detected processor is not in that
list, unless it supports the `HWP feature <Active Mode_>`_. [The interface to list, unless it supports the HWP feature. [The interface to obtain all of the
obtain all of the information listed above is the same for all of the processors information listed above is the same for all of the processors supporting the
supporting the HWP feature, which is why they all are supported by HWP feature, which is why ``intel_pstate`` works with all of them.]
``intel_pstate``.]
User Space Interface in ``sysfs`` User Space Interface in ``sysfs``
@@ -425,22 +428,16 @@ argument is passed to the kernel in the command line.
as well as the per-policy ones) are then reset to their default as well as the per-policy ones) are then reset to their default
values, possibly depending on the target operation mode.] values, possibly depending on the target operation mode.]
That only is supported in some configurations, though (for example, if
the `HWP feature is enabled in the processor <Active Mode With HWP_>`_,
the operation mode of the driver cannot be changed), and if it is not
supported in the current configuration, writes to this attribute will
fail with an appropriate error.
``energy_efficiency`` ``energy_efficiency``
This attribute is only present on platforms, which have CPUs matching This attribute is only present on platforms with CPUs matching the Kaby
Kaby Lake or Coffee Lake desktop CPU model. By default Lake or Coffee Lake desktop CPU model. By default, energy-efficiency
energy efficiency optimizations are disabled on these CPU models in HWP optimizations are disabled on these CPU models if HWP is enabled.
mode by this driver. Enabling energy efficiency may limit maximum Enabling energy-efficiency optimizations may limit maximum operating
operating frequency in both HWP and non HWP mode. In non HWP mode, frequency with or without the HWP feature. With HWP enabled, the
optimizations are done only in the turbo frequency range. In HWP mode, optimizations are done only in the turbo frequency range. Without it,
optimizations are done in the entire frequency range. Setting this they are done in the entire available frequency range. Setting this
attribute to "1" enables energy efficiency optimizations and setting attribute to "1" enables the energy-efficiency optimizations and setting
to "0" disables energy efficiency optimizations. to "0" disables them.
Interpretation of Policy Attributes Interpretation of Policy Attributes
----------------------------------- -----------------------------------
@@ -484,8 +481,8 @@ Next, the following policy attributes have special meaning if
policy for the time interval between the last two invocations of the policy for the time interval between the last two invocations of the
driver's utilization update callback by the CPU scheduler for that CPU. driver's utilization update callback by the CPU scheduler for that CPU.
One more policy attribute is present if the `HWP feature is enabled in the One more policy attribute is present if the HWP feature is enabled in the
processor <Active Mode With HWP_>`_: processor:
``base_frequency`` ``base_frequency``
Shows the base frequency of the CPU. Any frequency above this will be Shows the base frequency of the CPU. Any frequency above this will be
@@ -526,11 +523,11 @@ on the following rules, regardless of the current operation mode of the driver:
3. The global and per-policy limits can be set independently. 3. The global and per-policy limits can be set independently.
If the `HWP feature is enabled in the processor <Active Mode With HWP_>`_, the In the `active mode with the HWP feature enabled <Active Mode With HWP_>`_, the
resulting effective values are written into its registers whenever the limits resulting effective values are written into hardware registers whenever the
change in order to request its internal P-state selection logic to always set limits change in order to request its internal P-state selection logic to always
P-states within these limits. Otherwise, the limits are taken into account by set P-states within these limits. Otherwise, the limits are taken into account
scaling governors (in the `passive mode <Passive Mode_>`_) and by the driver by scaling governors (in the `passive mode <Passive Mode_>`_) and by the driver
every time before setting a new P-state for a CPU. every time before setting a new P-state for a CPU.
Additionally, if the ``intel_pstate=per_cpu_perf_limits`` command line argument Additionally, if the ``intel_pstate=per_cpu_perf_limits`` command line argument
@@ -541,12 +538,11 @@ at all and the only way to set the limits is by using the policy attributes.
Energy vs Performance Hints Energy vs Performance Hints
--------------------------- ---------------------------
If ``intel_pstate`` works in the `active mode with the HWP feature enabled If the hardware-managed P-states (HWP) is enabled in the processor, additional
<Active Mode With HWP_>`_ in the processor, additional attributes are present attributes, intended to allow user space to help ``intel_pstate`` to adjust the
in every ``CPUFreq`` policy directory in ``sysfs``. They are intended to allow processor's internal P-state selection logic by focusing it on performance or on
user space to help ``intel_pstate`` to adjust the processor's internal P-state energy-efficiency, or somewhere between the two extremes, are present in every
selection logic by focusing it on performance or on energy-efficiency, or ``CPUFreq`` policy directory in ``sysfs``. They are :
somewhere between the two extremes:
``energy_performance_preference`` ``energy_performance_preference``
Current value of the energy vs performance hint for the given policy Current value of the energy vs performance hint for the given policy
@@ -650,12 +646,14 @@ of them have to be prepended with the ``intel_pstate=`` prefix.
Do not register ``intel_pstate`` as the scaling driver even if the Do not register ``intel_pstate`` as the scaling driver even if the
processor is supported by it. processor is supported by it.
``active``
Register ``intel_pstate`` in the `active mode <Active Mode_>`_ to start
with.
``passive`` ``passive``
Register ``intel_pstate`` in the `passive mode <Passive Mode_>`_ to Register ``intel_pstate`` in the `passive mode <Passive Mode_>`_ to
start with. start with.
This option implies the ``no_hwp`` one described below.
``force`` ``force``
Register ``intel_pstate`` as the scaling driver instead of Register ``intel_pstate`` as the scaling driver instead of
``acpi-cpufreq`` even if the latter is preferred on the given system. ``acpi-cpufreq`` even if the latter is preferred on the given system.
@@ -670,13 +668,12 @@ of them have to be prepended with the ``intel_pstate=`` prefix.
driver is used instead of ``acpi-cpufreq``. driver is used instead of ``acpi-cpufreq``.
``no_hwp`` ``no_hwp``
Do not enable the `hardware-managed P-states (HWP) feature Do not enable the hardware-managed P-states (HWP) feature even if it is
<Active Mode With HWP_>`_ even if it is supported by the processor. supported by the processor.
``hwp_only`` ``hwp_only``
Register ``intel_pstate`` as the scaling driver only if the Register ``intel_pstate`` as the scaling driver only if the
`hardware-managed P-states (HWP) feature <Active Mode With HWP_>`_ is hardware-managed P-states (HWP) feature is supported by the processor.
supported by the processor.
``support_acpi_ppc`` ``support_acpi_ppc``
Take ACPI ``_PPC`` performance limits into account. Take ACPI ``_PPC`` performance limits into account.

View File

@@ -273,8 +273,8 @@ properties:
- fsl,imx6ull-14x14-evk # i.MX6 UltraLiteLite 14x14 EVK Board - fsl,imx6ull-14x14-evk # i.MX6 UltraLiteLite 14x14 EVK Board
- kontron,imx6ull-n6411-som # Kontron N6411 SOM - kontron,imx6ull-n6411-som # Kontron N6411 SOM
- myir,imx6ull-mys-6ulx-eval # MYiR Tech iMX6ULL Evaluation Board - myir,imx6ull-mys-6ulx-eval # MYiR Tech iMX6ULL Evaluation Board
- toradex,colibri-imx6ull-eval # Colibri iMX6ULL Module on Colibri Evaluation Board - toradex,colibri-imx6ull-eval # Colibri iMX6ULL Module on Colibri Eval Board
- toradex,colibri-imx6ull-wifi-eval # Colibri iMX6ULL Wi-Fi / Bluetooth Module on Colibri Evaluation Board - toradex,colibri-imx6ull-wifi-eval # Colibri iMX6ULL Wi-Fi / BT Module on Colibri Eval Board
- const: fsl,imx6ull - const: fsl,imx6ull
- description: Kontron N6411 S Board - description: Kontron N6411 S Board
@@ -312,9 +312,12 @@ properties:
- toradex,colibri-imx7d # Colibri iMX7 Dual Module - toradex,colibri-imx7d # Colibri iMX7 Dual Module
- toradex,colibri-imx7d-aster # Colibri iMX7 Dual Module on Aster Carrier Board - toradex,colibri-imx7d-aster # Colibri iMX7 Dual Module on Aster Carrier Board
- toradex,colibri-imx7d-emmc # Colibri iMX7 Dual 1GB (eMMC) Module - toradex,colibri-imx7d-emmc # Colibri iMX7 Dual 1GB (eMMC) Module
- toradex,colibri-imx7d-emmc-aster # Colibri iMX7 Dual 1GB (eMMC) Module on Aster Carrier Board - toradex,colibri-imx7d-emmc-aster # Colibri iMX7 Dual 1GB (eMMC) Module on
- toradex,colibri-imx7d-emmc-eval-v3 # Colibri iMX7 Dual 1GB (eMMC) Module on Colibri Evaluation Board V3 # Aster Carrier Board
- toradex,colibri-imx7d-eval-v3 # Colibri iMX7 Dual Module on Colibri Evaluation Board V3 - toradex,colibri-imx7d-emmc-eval-v3 # Colibri iMX7 Dual 1GB (eMMC) Module on
# Colibri Evaluation Board V3
- toradex,colibri-imx7d-eval-v3 # Colibri iMX7 Dual Module on
# Colibri Evaluation Board V3
- tq,imx7d-mba7 # i.MX7D TQ MBa7 with TQMa7D SoM - tq,imx7d-mba7 # i.MX7D TQ MBa7 with TQMa7D SoM
- zii,imx7d-rmu2 # ZII RMU2 Board - zii,imx7d-rmu2 # ZII RMU2 Board
- zii,imx7d-rpu2 # ZII RPU2 Board - zii,imx7d-rpu2 # ZII RPU2 Board

View File

@@ -32,8 +32,7 @@ properties:
- const: hdmi - const: hdmi
ddc: ddc:
allOf: $ref: /schemas/types.yaml#/definitions/phandle
- $ref: /schemas/types.yaml#/definitions/phandle
description: > description: >
Phandle of the I2C controller used for DDC EDID probing Phandle of the I2C controller used for DDC EDID probing

View File

@@ -163,7 +163,6 @@ additionalProperties: false
examples: examples:
- | - |
#include <dt-bindings/clock/imx8mq-clock.h> #include <dt-bindings/clock/imx8mq-clock.h>
#include <dt-bindings/gpio/gpio.h> #include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/arm-gic.h> #include <dt-bindings/interrupt-controller/arm-gic.h>

View File

@@ -26,7 +26,6 @@ properties:
items: items:
- enum: - enum:
- dlink,dir-685-panel - dlink,dir-685-panel
- const: ilitek,ili9322 - const: ilitek,ili9322
reset-gpios: true reset-gpios: true

View File

@@ -14,7 +14,6 @@ properties:
items: items:
- enum: - enum:
- bananapi,lhr050h41 - bananapi,lhr050h41
- const: ilitek,ili9881c - const: ilitek,ili9881c
backlight: true backlight: true

View File

@@ -147,4 +147,3 @@ examples:
... ...

View File

@@ -177,10 +177,10 @@ properties:
dependencies: dependencies:
# 'vendor,bool-property' is only allowed when 'vendor,string-array-property' # 'vendor,bool-property' is only allowed when 'vendor,string-array-property'
# is present # is present
vendor,bool-property: [ vendor,string-array-property ] vendor,bool-property: [ 'vendor,string-array-property' ]
# Expressing 2 properties in both orders means all of the set of properties # Expressing 2 properties in both orders means all of the set of properties
# must be present or none of them. # must be present or none of them.
vendor,string-array-property: [ vendor,bool-property ] vendor,string-array-property: [ 'vendor,bool-property' ]
required: required:
- compatible - compatible

View File

@@ -19,10 +19,8 @@ properties:
reg: reg:
items: items:
- description: the I/O address containing the GPIO controller - description: the I/O address containing the GPIO controller registers.
registers. - description: the I/O address containing the Chip Common A interrupt registers.
- description: the I/O address containing the Chip Common A interrupt
registers.
gpio-controller: true gpio-controller: true

View File

@@ -26,7 +26,8 @@ properties:
- description: AXI/master interface clock - description: AXI/master interface clock
- description: GPU core clock - description: GPU core clock
- description: Shader clock (only required if GPU has feature PIPE_3D) - description: Shader clock (only required if GPU has feature PIPE_3D)
- description: AHB/slave interface clock (only required if GPU can gate slave interface independently) - description: AHB/slave interface clock (only required if GPU can gate
slave interface independently)
minItems: 1 minItems: 1
maxItems: 4 maxItems: 4

View File

@@ -97,13 +97,11 @@ patternProperties:
input signal is multiplied. For example, <1 3> indicates the signal is scaled input signal is multiplied. For example, <1 3> indicates the signal is scaled
down to 1/3 of its value before ADC measurement. down to 1/3 of its value before ADC measurement.
If property is not found default value depending on chip will be used. If property is not found default value depending on chip will be used.
allOf: $ref: /schemas/types.yaml#/definitions/uint32-array
- $ref: /schemas/types.yaml#/definitions/uint32-array
oneOf: oneOf:
- items: - items:
- const: 1 - const: 1
- enum: [ 1, 3, 4, 6, 20, 8, 10 ] - enum: [ 1, 3, 4, 6, 20, 8, 10 ]
- items: - items:
- const: 10 - const: 10
- const: 81 - const: 81

View File

@@ -35,9 +35,8 @@ properties:
maxItems: 1 maxItems: 1
irq-gpios: irq-gpios:
description: GPIO pin used for IRQ. description: GPIO pin used for IRQ. The driver uses the interrupt gpio pin
The driver uses the interrupt gpio pin as as output to reset the device.
output to reset the device.
maxItems: 1 maxItems: 1
reset-gpios: reset-gpios:

View File

@@ -33,8 +33,8 @@ properties:
$ref: /schemas/types.yaml#/definitions/uint32 $ref: /schemas/types.yaml#/definitions/uint32
touchscreen-min-pressure: touchscreen-min-pressure:
description: minimum pressure on the touchscreen to be achieved in order for the description: minimum pressure on the touchscreen to be achieved in order
touchscreen driver to report a touch event. for the touchscreen driver to report a touch event.
$ref: /schemas/types.yaml#/definitions/uint32 $ref: /schemas/types.yaml#/definitions/uint32
touchscreen-fuzz-x: touchscreen-fuzz-x:
@@ -46,13 +46,13 @@ properties:
$ref: /schemas/types.yaml#/definitions/uint32 $ref: /schemas/types.yaml#/definitions/uint32
touchscreen-fuzz-pressure: touchscreen-fuzz-pressure:
description: pressure noise value of the absolute input device (arbitrary range description: pressure noise value of the absolute input device (arbitrary
dependent on the controller) range dependent on the controller)
$ref: /schemas/types.yaml#/definitions/uint32 $ref: /schemas/types.yaml#/definitions/uint32
touchscreen-average-samples: touchscreen-average-samples:
description: Number of data samples which are averaged for each read (valid values description: Number of data samples which are averaged for each read (valid
dependent on the controller) values dependent on the controller)
$ref: /schemas/types.yaml#/definitions/uint32 $ref: /schemas/types.yaml#/definitions/uint32
touchscreen-inverted-x: touchscreen-inverted-x:

View File

@@ -42,9 +42,8 @@ properties:
Specifies the list of CPU interrupt vectors to which the GIC may not Specifies the list of CPU interrupt vectors to which the GIC may not
route interrupts. This property is ignored if the CPU is started in EIC route interrupts. This property is ignored if the CPU is started in EIC
mode. mode.
allOf: $ref: /schemas/types.yaml#definitions/uint32-array
- $ref: /schemas/types.yaml#definitions/uint32-array minItems: 1
- minItems: 1
maxItems: 6 maxItems: 6
uniqueItems: true uniqueItems: true
items: items:
@@ -57,9 +56,8 @@ properties:
It accepts two values: the 1st is the starting interrupt and the 2nd is It accepts two values: the 1st is the starting interrupt and the 2nd is
the size of the reserved range. If not specified, the driver will the size of the reserved range. If not specified, the driver will
allocate the last (2 * number of VPEs in the system). allocate the last (2 * number of VPEs in the system).
allOf: $ref: /schemas/types.yaml#definitions/uint32-array
- $ref: /schemas/types.yaml#definitions/uint32-array items:
- items:
- minimum: 0 - minimum: 0
maximum: 254 maximum: 254
- minimum: 2 - minimum: 2

View File

@@ -79,7 +79,8 @@ properties:
description: | description: |
kHz; switching frequency. kHz; switching frequency.
$ref: /schemas/types.yaml#/definitions/uint32 $ref: /schemas/types.yaml#/definitions/uint32
enum: [ 600, 640, 685, 738, 800, 872, 960, 1066, 1200, 1371, 1600, 1920, 2400, 3200, 4800, 9600 ] enum: [ 600, 640, 685, 738, 800, 872, 960, 1066, 1200, 1371, 1600, 1920,
2400, 3200, 4800, 9600 ]
qcom,ovp: qcom,ovp:
description: | description: |

View File

@@ -58,8 +58,7 @@ allOf:
- if: - if:
properties: properties:
compatible: compatible:
items: enum:
- enum:
- adi,adv7180 - adi,adv7180
- adi,adv7182 - adi,adv7182
- adi,adv7280 - adi,adv7280

View File

@@ -38,9 +38,8 @@ properties:
dongwoon,aac-mode: dongwoon,aac-mode:
description: description:
Indication of AAC mode select. Indication of AAC mode select.
allOf: $ref: "/schemas/types.yaml#/definitions/uint32"
- $ref: "/schemas/types.yaml#/definitions/uint32" enum:
- enum:
- 1 # AAC2 mode(operation time# 0.48 x Tvib) - 1 # AAC2 mode(operation time# 0.48 x Tvib)
- 2 # AAC3 mode(operation time# 0.70 x Tvib) - 2 # AAC3 mode(operation time# 0.70 x Tvib)
- 3 # AAC4 mode(operation time# 0.75 x Tvib) - 3 # AAC4 mode(operation time# 0.75 x Tvib)
@@ -51,9 +50,8 @@ properties:
description: description:
Number of AAC Timing count that controlled by one 6-bit period of Number of AAC Timing count that controlled by one 6-bit period of
vibration register AACT[5:0], the unit of which is 100 us. vibration register AACT[5:0], the unit of which is 100 us.
allOf: $ref: "/schemas/types.yaml#/definitions/uint32"
- $ref: "/schemas/types.yaml#/definitions/uint32" default: 0x20
- default: 0x20
minimum: 0x00 minimum: 0x00
maximum: 0x3f maximum: 0x3f
@@ -61,9 +59,8 @@ properties:
description: description:
Indication of VCM internal clock dividing rate select, as one multiple Indication of VCM internal clock dividing rate select, as one multiple
factor to calculate VCM ring periodic time Tvib. factor to calculate VCM ring periodic time Tvib.
allOf: $ref: "/schemas/types.yaml#/definitions/uint32"
- $ref: "/schemas/types.yaml#/definitions/uint32" enum:
- enum:
- 0 # Dividing Rate - 2 - 0 # Dividing Rate - 2
- 1 # Dividing Rate - 1 - 1 # Dividing Rate - 1
- 2 # Dividing Rate - 1/2 - 2 # Dividing Rate - 1/2

View File

@@ -139,3 +139,4 @@ examples:
}; };
}; };
... ...

View File

@@ -65,13 +65,12 @@ properties:
0x2d - RAW14 0x2d - RAW14
0x2e - RAW16 0x2e - RAW16
0x2f - RAW20 0x2f - RAW20
allOf: $ref: /schemas/types.yaml#/definitions/uint32
- $ref: /schemas/types.yaml#/definitions/uint32 oneOf:
- anyOf:
- minimum: 0x1e - minimum: 0x1e
- maximum: 0x24 maximum: 0x24
- minimum: 0x28 - minimum: 0x28
- maximum: 0x2f maximum: 0x2f
xlnx,vfb: xlnx,vfb:
type: boolean type: boolean

View File

@@ -1,76 +0,0 @@
ChromeOS Embedded Controller
Google's ChromeOS EC is a Cortex-M device which talks to the AP and
implements various function such as keyboard and battery charging.
The EC can be connect through various means (I2C, SPI, LPC, RPMSG) and the
compatible string used depends on the interface. Each connection method has
its own driver which connects to the top level interface-agnostic EC driver.
Other Linux driver (such as cros-ec-keyb for the matrix keyboard) connect to
the top-level driver.
Required properties (I2C):
- compatible: "google,cros-ec-i2c"
- reg: I2C slave address
Required properties (SPI):
- compatible: "google,cros-ec-spi"
- reg: SPI chip select
Required properties (RPMSG):
- compatible: "google,cros-ec-rpmsg"
Optional properties (SPI):
- google,cros-ec-spi-pre-delay: Some implementations of the EC need a little
time to wake up from sleep before they can receive SPI transfers at a high
clock rate. This property specifies the delay, in usecs, between the
assertion of the CS to the start of the first clock pulse.
- google,cros-ec-spi-msg-delay: Some implementations of the EC require some
additional processing time in order to accept new transactions. If the delay
between transactions is not long enough the EC may not be able to respond
properly to subsequent transactions and cause them to hang. This property
specifies the delay, in usecs, introduced between transactions to account
for the time required by the EC to get back into a state in which new data
can be accepted.
Required properties (LPC):
- compatible: "google,cros-ec-lpc"
- reg: List of (IO address, size) pairs defining the interface uses
Optional properties (all):
- google,has-vbc-nvram: Some implementations of the EC include a small
nvram space used to store verified boot context data. This boolean flag
is used to specify whether this nvram is present or not.
Example for I2C:
i2c@12ca0000 {
cros-ec@1e {
reg = <0x1e>;
compatible = "google,cros-ec-i2c";
interrupts = <14 0>;
interrupt-parent = <&wakeup_eint>;
wakeup-source;
};
Example for SPI:
spi@131b0000 {
ec@0 {
compatible = "google,cros-ec-spi";
reg = <0x0>;
interrupts = <14 0>;
interrupt-parent = <&wakeup_eint>;
wakeup-source;
spi-max-frequency = <5000000>;
controller-data {
cs-gpio = <&gpf0 3 4 3 0>;
samsung,spi-cs;
samsung,spi-feedback-delay = <2>;
};
};
};
Example for LPC is not supplied as it is not yet implemented.

View File

@@ -79,11 +79,12 @@ properties:
description: | description: |
conversion mode: conversion mode:
0 - temperature, in C*10 0 - temperature, in C*10
1 - pre-scaled voltage value 1 - pre-scaled 24-bit voltage value
2 - scaled voltage based on an optional resistor divider 2 - scaled voltage based on an optional resistor divider
and optional offset and optional offset
3 - pre-scaled 16-bit voltage value
$ref: /schemas/types.yaml#/definitions/uint32 $ref: /schemas/types.yaml#/definitions/uint32
enum: [0, 1, 2] enum: [0, 1, 2, 3]
gw,voltage-divider-ohms: gw,voltage-divider-ohms:
description: Values of resistors for divider on raw ADC input description: Values of resistors for divider on raw ADC input

View File

@@ -0,0 +1,129 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/mfd/google,cros-ec.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: ChromeOS Embedded Controller
maintainers:
- Benson Leung <bleung@chromium.org>
- Enric Balletbo i Serra <enric.balletbo@collabora.com>
- Guenter Roeck <groeck@chromium.org>
description:
Google's ChromeOS EC is a microcontroller which talks to the AP and
implements various functions such as keyboard and battery charging.
The EC can be connected through various interfaces (I2C, SPI, and others)
and the compatible string specifies which interface is being used.
properties:
compatible:
oneOf:
- description:
For implementations of the EC is connected through I2C.
const: google,cros-ec-i2c
- description:
For implementations of the EC is connected through SPI.
const: google,cros-ec-spi
- description:
For implementations of the EC is connected through RPMSG.
const: google,cros-ec-rpmsg
google,cros-ec-spi-pre-delay:
description:
This property specifies the delay in usecs between the
assertion of the CS and the first clock pulse.
allOf:
- $ref: /schemas/types.yaml#/definitions/uint32
- default: 0
- minimum: 0
google,cros-ec-spi-msg-delay:
description:
This property specifies the delay in usecs between messages.
allOf:
- $ref: /schemas/types.yaml#/definitions/uint32
- default: 0
- minimum: 0
google,has-vbc-nvram:
description:
Some implementations of the EC include a small nvram space used to
store verified boot context data. This boolean flag is used to specify
whether this nvram is present or not.
type: boolean
spi-max-frequency:
description: Maximum SPI frequency of the device in Hz.
reg:
maxItems: 1
interrupts:
maxItems: 1
required:
- compatible
if:
properties:
compatible:
contains:
enum:
- google,cros-ec-i2c
- google,cros-ec-rpmsg
then:
properties:
google,cros-ec-spi-pre-delay: false
google,cros-ec-spi-msg-delay: false
spi-max-frequency: false
additionalProperties: false
examples:
# Example for I2C
- |
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/irq.h>
i2c0 {
#address-cells = <1>;
#size-cells = <0>;
cros-ec@1e {
compatible = "google,cros-ec-i2c";
reg = <0x1e>;
interrupts = <6 0>;
interrupt-parent = <&gpio0>;
};
};
# Example for SPI
- |
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/irq.h>
spi0 {
#address-cells = <1>;
#size-cells = <0>;
cros-ec@0 {
compatible = "google,cros-ec-spi";
reg = <0x0>;
google,cros-ec-spi-msg-delay = <30>;
google,cros-ec-spi-pre-delay = <10>;
interrupts = <99 0>;
interrupt-parent = <&gpio7>;
spi-max-frequency = <5000000>;
};
};
# Example for RPMSG
- |
scp0 {
cros-ec {
compatible = "google,cros-ec-rpmsg";
};
};
...

View File

@@ -0,0 +1,44 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/mfd/khadas,mcu.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Khadas on-board Microcontroller Device Tree Bindings
maintainers:
- Neil Armstrong <narmstrong@baylibre.com>
description: |
Khadas embeds a microcontroller on their VIM and Edge boards adding some
system feature as PWM Fan control (for VIM2 rev14 or VIM3), User memory
storage, IR/Key resume control, system power LED control and more.
properties:
compatible:
enum:
- khadas,mcu # MCU revision is discoverable
"#cooling-cells": # Only needed for boards having FAN control feature
const: 2
reg:
maxItems: 1
required:
- compatible
- reg
additionalProperties: false
examples:
- |
i2c {
#address-cells = <1>;
#size-cells = <0>;
khadas_mcu: system-controller@18 {
compatible = "khadas,mcu";
reg = <0x18>;
#cooling-cells = <2>;
};
};

View File

@@ -33,6 +33,9 @@ properties:
items: items:
- const: mux - const: mux
interrupts:
maxItems: 1
"#address-cells": "#address-cells":
const: 1 const: 1
@@ -106,11 +109,13 @@ additionalProperties: false
examples: examples:
- | - |
#include <dt-bindings/clock/stm32mp1-clks.h> #include <dt-bindings/clock/stm32mp1-clks.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
timer@40002400 { timer@40002400 {
compatible = "st,stm32-lptimer"; compatible = "st,stm32-lptimer";
reg = <0x40002400 0x400>; reg = <0x40002400 0x400>;
clocks = <&timer_clk>; clocks = <&timer_clk>;
clock-names = "mux"; clock-names = "mux";
interrupts-extended = <&exti 47 IRQ_TYPE_LEVEL_HIGH>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;

View File

@@ -0,0 +1,122 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/mfd/st,stmfx.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: STMicroelectonics Multi-Function eXpander (STMFX) bindings
description: ST Multi-Function eXpander (STMFX) is a slave controller using I2C for
communication with the main MCU. Its main features are GPIO expansion,
main MCU IDD measurement (IDD is the amount of current that flows
through VDD) and resistive touchscreen controller.
maintainers:
- Amelie Delaunay <amelie.delaunay@st.com>
properties:
compatible:
const: st,stmfx-0300
reg:
enum: [ 0x42, 0x43 ]
interrupts:
maxItems: 1
drive-open-drain: true
vdd-supply:
maxItems: 1
pinctrl:
type: object
properties:
compatible:
const: st,stmfx-0300-pinctrl
"#gpio-cells":
const: 2
"#interrupt-cells":
const: 2
gpio-controller: true
interrupt-controller: true
gpio-ranges:
description: if all STMFX pins[24:0] are available (no other STMFX function in use),
you should use gpio-ranges = <&stmfx_pinctrl 0 0 24>;
if agpio[3:0] are not available (STMFX Touchscreen function in use),
you should use gpio-ranges = <&stmfx_pinctrl 0 0 16>, <&stmfx_pinctrl 20 20 4>;
if agpio[7:4] are not available (STMFX IDD function in use),
you should use gpio-ranges = <&stmfx_pinctrl 0 0 20>;
maxItems: 1
patternProperties:
"^[a-zA-Z]*-pins$":
type: object
allOf:
- $ref: ../pinctrl/pinmux-node.yaml
properties:
pins: true
bias-disable: true
bias-pull-up: true
bias-pull-pin-default: true
bias-pull-down: true
drive-open-drain: true
drive-push-pull: true
output-high: true
output-low: true
additionalProperties: false
required:
- compatible
- "#gpio-cells"
- "#interrupt-cells"
- gpio-controller
- interrupt-controller
- gpio-ranges
additionalProperties: false
required:
- compatible
- reg
- interrupts
examples:
- |
#include <dt-bindings/interrupt-controller/arm-gic.h>
i2c {
#address-cells = <1>;
#size-cells = <0>;
stmfx@42 {
compatible = "st,stmfx-0300";
reg = <0x42>;
interrupts = <8 IRQ_TYPE_EDGE_RISING>;
interrupt-parent = <&gpioi>;
vdd-supply = <&v3v3>;
stmfx_pinctrl: pinctrl {
compatible = "st,stmfx-0300-pinctrl";
#gpio-cells = <2>;
#interrupt-cells = <2>;
gpio-controller;
interrupt-controller;
gpio-ranges = <&stmfx_pinctrl 0 0 24>;
joystick_pins: joystick-pins {
pins = "gpio0", "gpio1", "gpio2", "gpio3", "gpio4";
drive-push-pull;
bias-pull-up;
};
};
};
};
...

View File

@@ -113,8 +113,8 @@ properties:
maxItems: 1 maxItems: 1
st,mask-reset: st,mask-reset:
description: mask reset for this regulator, description: mask reset for this regulator, the regulator configuration
the regulator configuration is maintained during pmic reset. is maintained during pmic reset.
$ref: /schemas/types.yaml#/definitions/flag $ref: /schemas/types.yaml#/definitions/flag
regulator-name: true regulator-name: true
@@ -135,8 +135,8 @@ properties:
maxItems: 1 maxItems: 1
st,mask-reset: st,mask-reset:
description: mask reset for this regulator, description: mask reset for this regulator, the regulator configuration
the regulator configuration is maintained during pmic reset. is maintained during pmic reset.
$ref: /schemas/types.yaml#/definitions/flag $ref: /schemas/types.yaml#/definitions/flag
regulator-name: true regulator-name: true
@@ -154,8 +154,8 @@ properties:
maxItems: 1 maxItems: 1
st,mask-reset: st,mask-reset:
description: mask reset for this regulator, description: mask reset for this regulator, the regulator configuration
the regulator configuration is maintained during pmic reset. is maintained during pmic reset.
$ref: /schemas/types.yaml#/definitions/flag $ref: /schemas/types.yaml#/definitions/flag
regulator-name: true regulator-name: true
@@ -172,8 +172,8 @@ properties:
maxItems: 1 maxItems: 1
st,mask-reset: st,mask-reset:
description: mask reset for this regulator, description: mask reset for this regulator, the regulator configuration
the regulator configuration is maintained during pmic reset. is maintained during pmic reset.
$ref: /schemas/types.yaml#/definitions/flag $ref: /schemas/types.yaml#/definitions/flag
regulator-name: true regulator-name: true
@@ -198,8 +198,8 @@ properties:
maxItems: 1 maxItems: 1
st,mask-reset: st,mask-reset:
description: mask reset for this regulator, description: mask reset for this regulator, the regulator configuration
the regulator configuration is maintained during pmic reset. is maintained during pmic reset.
$ref: /schemas/types.yaml#/definitions/flag $ref: /schemas/types.yaml#/definitions/flag
regulator-name: true regulator-name: true
@@ -220,8 +220,8 @@ properties:
maxItems: 1 maxItems: 1
st,mask-reset: st,mask-reset:
description: mask reset for this regulator, description: mask reset for this regulator, the regulator configuration
the regulator configuration is maintained during pmic reset. is maintained during pmic reset.
$ref: /schemas/types.yaml#/definitions/flag $ref: /schemas/types.yaml#/definitions/flag
regulator-name: true regulator-name: true

View File

@@ -1,28 +0,0 @@
STMicroelectonics Multi-Function eXpander (STMFX) Core bindings
ST Multi-Function eXpander (STMFX) is a slave controller using I2C for
communication with the main MCU. Its main features are GPIO expansion, main
MCU IDD measurement (IDD is the amount of current that flows through VDD) and
resistive touchscreen controller.
Required properties:
- compatible: should be "st,stmfx-0300".
- reg: I2C slave address of the device.
- interrupts: interrupt specifier triggered by MFX_IRQ_OUT signal.
Please refer to ../interrupt-controller/interrupt.txt
Optional properties:
- drive-open-drain: configure MFX_IRQ_OUT as open drain.
- vdd-supply: phandle of the regulator supplying STMFX.
Example:
stmfx: stmfx@42 {
compatible = "st,stmfx-0300";
reg = <0x42>;
interrupts = <8 IRQ_TYPE_EDGE_RISING>;
interrupt-parent = <&gpioi>;
vdd-supply = <&v3v3>;
};
Please refer to ../pinctrl/pinctrl-stmfx.txt for STMFX GPIO expander function bindings.

View File

@@ -24,8 +24,7 @@ maintainers:
properties: properties:
compatible: compatible:
anyOf: items:
- items:
- enum: - enum:
- ti,j721e-system-controller - ti,j721e-system-controller
- const: syscon - const: syscon

View File

@@ -26,7 +26,7 @@ Optional node:
Example: Example:
/* /*
* Integrated Power Management Chip * Integrated Power Management Chip
* http://www.ti.com/lit/ds/symlink/twl6030.pdf * https://www.ti.com/lit/ds/symlink/twl6030.pdf
*/ */
twl@48 { twl@48 {
compatible = "ti,twl6030"; compatible = "ti,twl6030";

View File

@@ -14,12 +14,10 @@ maintainers:
properties: properties:
compatible: compatible:
oneOf: items:
- items:
- enum: - enum:
- xlnx,zynqmp-nand-controller - xlnx,zynqmp-nand-controller
- enum: - const: arasan,nfc-v3p10
- arasan,nfc-v3p10
reg: reg:
maxItems: 1 maxItems: 1

View File

@@ -31,8 +31,7 @@ properties:
ti,syscon-pcie-ctrl: ti,syscon-pcie-ctrl:
description: Phandle to the SYSCON entry required for configuring PCIe mode description: Phandle to the SYSCON entry required for configuring PCIe mode
and link speed. and link speed.
allOf: $ref: /schemas/types.yaml#/definitions/phandle
- $ref: /schemas/types.yaml#/definitions/phandle
power-domains: power-domains:
maxItems: 1 maxItems: 1

View File

@@ -31,8 +31,7 @@ properties:
ti,syscon-pcie-ctrl: ti,syscon-pcie-ctrl:
description: Phandle to the SYSCON entry required for configuring PCIe mode description: Phandle to the SYSCON entry required for configuring PCIe mode
and link speed. and link speed.
allOf: $ref: /schemas/types.yaml#/definitions/phandle
- $ref: /schemas/types.yaml#/definitions/phandle
power-domains: power-domains:
maxItems: 1 maxItems: 1

View File

@@ -73,8 +73,7 @@ properties:
vddp-ref-clk-supply: vddp-ref-clk-supply:
description: description:
Phandle to a regulator supply to any specific refclk Phandle to a regulator supply to any specific refclk pll block.
pll block.
#Required nodes: #Required nodes:
patternProperties: patternProperties:

View File

@@ -70,8 +70,7 @@ properties:
vddp-ref-clk-supply: vddp-ref-clk-supply:
description: description:
Phandle to a regulator supply to any specific refclk Phandle to a regulator supply to any specific refclk pll block.
pll block.
#Required nodes: #Required nodes:
patternProperties: patternProperties:

View File

@@ -203,7 +203,8 @@ examples:
}; };
refclk-dig { refclk-dig {
clocks = <&k3_clks 292 11>, <&k3_clks 292 0>, <&dummy_cmn_refclk>, <&dummy_cmn_refclk1>; clocks = <&k3_clks 292 11>, <&k3_clks 292 0>,
<&dummy_cmn_refclk>, <&dummy_cmn_refclk1>;
#clock-cells = <0>; #clock-cells = <0>;
assigned-clocks = <&wiz0_refclk_dig>; assigned-clocks = <&wiz0_refclk_dig>;
assigned-clock-parents = <&k3_clks 292 11>; assigned-clock-parents = <&k3_clks 292 11>;

View File

@@ -1,116 +0,0 @@
STMicroelectronics Multi-Function eXpander (STMFX) GPIO expander bindings
ST Multi-Function eXpander (STMFX) offers up to 24 GPIOs expansion.
Please refer to ../mfd/stmfx.txt for STMFX Core bindings.
Required properties:
- compatible: should be "st,stmfx-0300-pinctrl".
- #gpio-cells: should be <2>, the first cell is the GPIO number and the second
cell is the gpio flags in accordance with <dt-bindings/gpio/gpio.h>.
- gpio-controller: marks the device as a GPIO controller.
- #interrupt-cells: should be <2>, the first cell is the GPIO number and the
second cell is the interrupt flags in accordance with
<dt-bindings/interrupt-controller/irq.h>.
- interrupt-controller: marks the device as an interrupt controller.
- gpio-ranges: specifies the mapping between gpio controller and pin
controller pins. Check "Concerning gpio-ranges property" below.
Please refer to ../gpio/gpio.txt.
Please refer to pinctrl-bindings.txt for pin configuration.
Required properties for pin configuration sub-nodes:
- pins: list of pins to which the configuration applies.
Optional properties for pin configuration sub-nodes (pinconf-generic ones):
- bias-disable: disable any bias on the pin.
- bias-pull-up: the pin will be pulled up.
- bias-pull-pin-default: use the pin-default pull state.
- bias-pull-down: the pin will be pulled down.
- drive-open-drain: the pin will be driven with open drain.
- drive-push-pull: the pin will be driven actively high and low.
- output-high: the pin will be configured as an output driving high level.
- output-low: the pin will be configured as an output driving low level.
Note that STMFX pins[15:0] are called "gpio[15:0]", and STMFX pins[23:16] are
called "agpio[7:0]". Example, to refer to pin 18 of STMFX, use "agpio2".
Concerning gpio-ranges property:
- if all STMFX pins[24:0] are available (no other STMFX function in use), you
should use gpio-ranges = <&stmfx_pinctrl 0 0 24>;
- if agpio[3:0] are not available (STMFX Touchscreen function in use), you
should use gpio-ranges = <&stmfx_pinctrl 0 0 16>, <&stmfx_pinctrl 20 20 4>;
- if agpio[7:4] are not available (STMFX IDD function in use), you
should use gpio-ranges = <&stmfx_pinctrl 0 0 20>;
Example:
stmfx: stmfx@42 {
...
stmfx_pinctrl: stmfx-pin-controller {
compatible = "st,stmfx-0300-pinctrl";
#gpio-cells = <2>;
#interrupt-cells = <2>;
gpio-controller;
interrupt-controller;
gpio-ranges = <&stmfx_pinctrl 0 0 24>;
joystick_pins: joystick {
pins = "gpio0", "gpio1", "gpio2", "gpio3", "gpio4";
drive-push-pull;
bias-pull-up;
};
};
};
Example of STMFX GPIO consumers:
joystick {
compatible = "gpio-keys";
#address-cells = <1>;
#size-cells = <0>;
pinctrl-0 = <&joystick_pins>;
pinctrl-names = "default";
button-0 {
label = "JoySel";
linux,code = <KEY_ENTER>;
interrupt-parent = <&stmfx_pinctrl>;
interrupts = <0 IRQ_TYPE_EDGE_RISING>;
};
button-1 {
label = "JoyDown";
linux,code = <KEY_DOWN>;
interrupt-parent = <&stmfx_pinctrl>;
interrupts = <1 IRQ_TYPE_EDGE_RISING>;
};
button-2 {
label = "JoyLeft";
linux,code = <KEY_LEFT>;
interrupt-parent = <&stmfx_pinctrl>;
interrupts = <2 IRQ_TYPE_EDGE_RISING>;
};
button-3 {
label = "JoyRight";
linux,code = <KEY_RIGHT>;
interrupt-parent = <&stmfx_pinctrl>;
interrupts = <3 IRQ_TYPE_EDGE_RISING>;
};
button-4 {
label = "JoyUp";
linux,code = <KEY_UP>;
interrupt-parent = <&stmfx_pinctrl>;
interrupts = <4 IRQ_TYPE_EDGE_RISING>;
};
};
leds {
compatible = "gpio-leds";
orange {
gpios = <&stmfx_pinctrl 17 1>;
};
blue {
gpios = <&stmfx_pinctrl 19 1>;
};
}

View File

@@ -76,8 +76,7 @@ patternProperties:
"^((s|l|lvs|5vs)[0-9]*)|(boost-bypass)|(bob)$": "^((s|l|lvs|5vs)[0-9]*)|(boost-bypass)|(bob)$":
description: List of regulators and its properties description: List of regulators and its properties
allOf: $ref: regulator.yaml#
- $ref: regulator.yaml#
additionalProperties: false additionalProperties: false

View File

@@ -23,8 +23,7 @@ properties:
- amlogic,aiu-gxl - amlogic,aiu-gxl
- amlogic,aiu-meson8 - amlogic,aiu-meson8
- amlogic,aiu-meson8b - amlogic,aiu-meson8b
- const: - const: amlogic,aiu
amlogic,aiu
clocks: clocks:
items: items:

View File

@@ -19,13 +19,11 @@ properties:
compatible: compatible:
oneOf: oneOf:
- items: - items:
- const: - const: amlogic,g12a-toacodec
amlogic,g12a-toacodec
- items: - items:
- enum: - enum:
- amlogic,sm1-toacodec - amlogic,sm1-toacodec
- const: - const: amlogic,g12a-toacodec
amlogic,g12a-toacodec
reg: reg:
maxItems: 1 maxItems: 1

View File

@@ -18,16 +18,14 @@ properties:
description: I2C address of the device. description: I2C address of the device.
maxim,temperature_calib: maxim,temperature_calib:
allOf:
- $ref: /schemas/types.yaml#/definitions/uint32
description: The calculated temperature data was measured while doing the calibration. description: The calculated temperature data was measured while doing the calibration.
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0 minimum: 0
maximum: 65535 maximum: 65535
maxim,r0_calib: maxim,r0_calib:
allOf:
- $ref: /schemas/types.yaml#/definitions/uint32
description: This is r0 calibration data which was measured in factory mode. description: This is r0 calibration data which was measured in factory mode.
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 1 minimum: 1
maximum: 8388607 maximum: 8388607

View File

@@ -48,8 +48,7 @@ properties:
sound-name-prefix: sound-name-prefix:
pattern: "^DSPK[1-9]$" pattern: "^DSPK[1-9]$"
allOf: $ref: /schemas/types.yaml#/definitions/string
- $ref: /schemas/types.yaml#/definitions/string
description: description:
Used as prefix for sink/source names of the component. Must be a Used as prefix for sink/source names of the component. Must be a
unique string among multiple instances of the same component. unique string among multiple instances of the same component.

View File

@@ -49,8 +49,7 @@ properties:
sound-name-prefix: sound-name-prefix:
pattern: "^DMIC[1-9]$" pattern: "^DMIC[1-9]$"
allOf: $ref: /schemas/types.yaml#/definitions/string
- $ref: /schemas/types.yaml#/definitions/string
description: description:
used as prefix for sink/source names of the component. Must be a used as prefix for sink/source names of the component. Must be a
unique string among multiple instances of the same component. unique string among multiple instances of the same component.

View File

@@ -67,8 +67,7 @@ properties:
sound-name-prefix: sound-name-prefix:
pattern: "^I2S[1-9]$" pattern: "^I2S[1-9]$"
allOf: $ref: /schemas/types.yaml#/definitions/string
- $ref: /schemas/types.yaml#/definitions/string
description: description:
Used as prefix for sink/source names of the component. Must be a Used as prefix for sink/source names of the component. Must be a
unique string among multiple instances of the same component. unique string among multiple instances of the same component.

View File

@@ -37,13 +37,11 @@ properties:
ti,cpb-mcasp: ti,cpb-mcasp:
description: phandle to McASP used on CPB description: phandle to McASP used on CPB
allOf: $ref: /schemas/types.yaml#/definitions/phandle
- $ref: /schemas/types.yaml#/definitions/phandle
ti,cpb-codec: ti,cpb-codec:
description: phandle to the pcm3168a codec used on the CPB description: phandle to the pcm3168a codec used on the CPB
allOf: $ref: /schemas/types.yaml#/definitions/phandle
- $ref: /schemas/types.yaml#/definitions/phandle
clocks: clocks:
items: items:

View File

@@ -50,28 +50,23 @@ properties:
ti,cpb-mcasp: ti,cpb-mcasp:
description: phandle to McASP used on CPB description: phandle to McASP used on CPB
allOf: $ref: /schemas/types.yaml#/definitions/phandle
- $ref: /schemas/types.yaml#/definitions/phandle
ti,cpb-codec: ti,cpb-codec:
description: phandle to the pcm3168a codec used on the CPB description: phandle to the pcm3168a codec used on the CPB
allOf: $ref: /schemas/types.yaml#/definitions/phandle
- $ref: /schemas/types.yaml#/definitions/phandle
ti,ivi-mcasp: ti,ivi-mcasp:
description: phandle to McASP used on IVI description: phandle to McASP used on IVI
allOf: $ref: /schemas/types.yaml#/definitions/phandle
- $ref: /schemas/types.yaml#/definitions/phandle
ti,ivi-codec-a: ti,ivi-codec-a:
description: phandle to the pcm3168a-A codec on the expansion board description: phandle to the pcm3168a-A codec on the expansion board
allOf: $ref: /schemas/types.yaml#/definitions/phandle
- $ref: /schemas/types.yaml#/definitions/phandle
ti,ivi-codec-b: ti,ivi-codec-b:
description: phandle to the pcm3168a-B codec on the expansion board description: phandle to the pcm3168a-B codec on the expansion board
allOf: $ref: /schemas/types.yaml#/definitions/phandle
- $ref: /schemas/types.yaml#/definitions/phandle
clocks: clocks:
items: items:

View File

@@ -37,10 +37,9 @@ properties:
exit-latency-us: exit-latency-us:
description: | description: |
The exit latency constraint in microsecond for the injected The exit latency constraint in microsecond for the injected idle state
idle state for the device. It is the latency constraint to for the device. It is the latency constraint to apply when selecting an
apply when selecting an idle state from among all the present idle state from among all the present ones.
ones.
required: required:
- '#cooling-cells' - '#cooling-cells'

View File

@@ -298,7 +298,7 @@ properties:
- national,lm80 - national,lm80
# Temperature sensor with integrated fan control # Temperature sensor with integrated fan control
- national,lm85 - national,lm85
# ±0.33°C Accurate, 12-Bit + Sign Temperature Sensor and Thermal Window Comparator with Two-Wire Interface # I2C ±0.33°C Accurate, 12-Bit + Sign Temperature Sensor and Thermal Window Comparator
- national,lm92 - national,lm92
# i2c trusted platform module (TPM) # i2c trusted platform module (TPM)
- nuvoton,npct501 - nuvoton,npct501

View File

@@ -116,12 +116,13 @@ properties:
snps,need-phy-for-wake: snps,need-phy-for-wake:
$ref: /schemas/types.yaml#/definitions/flag $ref: /schemas/types.yaml#/definitions/flag
description: If present indicates that the phy needs to be left on for remote wakeup during suspend. description: If present indicates that the phy needs to be left on for
remote wakeup during suspend.
snps,reset-phy-on-wake: snps,reset-phy-on-wake:
$ref: /schemas/types.yaml#/definitions/flag $ref: /schemas/types.yaml#/definitions/flag
description: If present indicates that we need to reset the PHY when we detect a wakeup. description: If present indicates that we need to reset the PHY when we
This is due to a hardware errata. detect a wakeup. This is due to a hardware errata.
required: required:
- compatible - compatible

View File

@@ -993,7 +993,8 @@ patternProperties:
"^sst,.*": "^sst,.*":
description: Silicon Storage Technology, Inc. description: Silicon Storage Technology, Inc.
"^sstar,.*": "^sstar,.*":
description: Xiamen Xingchen(SigmaStar) Technology Co., Ltd. (formerly part of MStar Semiconductor, Inc.) description: Xiamen Xingchen(SigmaStar) Technology Co., Ltd.
(formerly part of MStar Semiconductor, Inc.)
"^st,.*": "^st,.*":
description: STMicroelectronics description: STMicroelectronics
"^starry,.*": "^starry,.*":

View File

@@ -100,7 +100,6 @@ available subsections can be seen below.
rfkill rfkill
serial/index serial/index
sm501 sm501
smsc_ece1099
switchtec switchtec
sync_file sync_file
vfio-mediated-device vfio-mediated-device

View File

@@ -1,60 +0,0 @@
=================================================
Msc Keyboard Scan Expansion/GPIO Expansion device
=================================================
What is smsc-ece1099?
----------------------
The ECE1099 is a 40-Pin 3.3V Keyboard Scan Expansion
or GPIO Expansion device. The device supports a keyboard
scan matrix of 23x8. The device is connected to a Master
via the SMSC BC-Link interface or via the SMBus.
Keypad scan Input(KSI) and Keypad Scan Output(KSO) signals
are multiplexed with GPIOs.
Interrupt generation
--------------------
Interrupts can be generated by an edge detection on a GPIO
pin or an edge detection on one of the bus interface pins.
Interrupts can also be detected on the keyboard scan interface.
The bus interrupt pin (BC_INT# or SMBUS_INT#) is asserted if
any bit in one of the Interrupt Status registers is 1 and
the corresponding Interrupt Mask bit is also 1.
In order for software to determine which device is the source
of an interrupt, it should first read the Group Interrupt Status Register
to determine which Status register group is a source for the interrupt.
Software should read both the Status register and the associated Mask register,
then AND the two values together. Bits that are 1 in the result of the AND
are active interrupts. Software clears an interrupt by writing a 1 to the
corresponding bit in the Status register.
Communication Protocol
----------------------
- SMbus slave Interface
The host processor communicates with the ECE1099 device
through a series of read/write registers via the SMBus
interface. SMBus is a serial communication protocol between
a computer host and its peripheral devices. The SMBus data
rate is 10KHz minimum to 400 KHz maximum
- Slave Bus Interface
The ECE1099 device SMBus implementation is a subset of the
SMBus interface to the host. The device is a slave-only SMBus device.
The implementation in the device is a subset of SMBus since it
only supports four protocols.
The Write Byte, Read Byte, Send Byte, and Receive Byte protocols are the
only valid SMBus protocols for the device.
- BC-LinkTM Interface
The BC-Link is a proprietary bus that allows communication
between a Master device and a Companion device. The Master
device uses this serial bus to read and write registers
located on the Companion device. The bus comprises three signals,
BC_CLK, BC_DAT and BC_INT#. The Master device always provides the
clock, BC_CLK, and the Companion device is the source for an
independent asynchronous interrupt signal, BC_INT#. The ECE1099
supports BC-Link speeds up to 24MHz.

View File

@@ -9685,6 +9685,15 @@ F: include/linux/kdb.h
F: include/linux/kgdb.h F: include/linux/kgdb.h
F: kernel/debug/ F: kernel/debug/
KHADAS MCU MFD DRIVER
M: Neil Armstrong <narmstrong@baylibre.com>
L: linux-amlogic@lists.infradead.org
S: Maintained
F: Documentation/devicetree/bindings/mfd/khadas,mcu.yaml
F: drivers/mfd/khadas-mcu.c
F: include/linux/mfd/khadas-mcu.h
F: drivers/thermal/khadas_mcu_fan.c
KMEMLEAK KMEMLEAK
M: Catalin Marinas <catalin.marinas@arm.com> M: Catalin Marinas <catalin.marinas@arm.com>
S: Maintained S: Maintained
@@ -13570,6 +13579,7 @@ F: arch/*/kernel/perf_event*.c
F: include/linux/perf_event.h F: include/linux/perf_event.h
F: include/uapi/linux/perf_event.h F: include/uapi/linux/perf_event.h
F: kernel/events/* F: kernel/events/*
F: tools/lib/perf/
F: tools/perf/ F: tools/perf/
PERFORMANCE EVENTS SUBSYSTEM ARM64 PMU EVENTS PERFORMANCE EVENTS SUBSYSTEM ARM64 PMU EVENTS
@@ -14900,6 +14910,13 @@ L: linux-serial@vger.kernel.org
S: Odd Fixes S: Odd Fixes
F: drivers/tty/serial/rp2.* F: drivers/tty/serial/rp2.*
ROHM BD99954 CHARGER IC
R: Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>
L: linux-power@fi.rohmeurope.com
S: Supported
F: drivers/power/supply/bd99954-charger.c
F: drivers/power/supply/bd99954-charger.h
ROHM BH1750 AMBIENT LIGHT SENSOR DRIVER ROHM BH1750 AMBIENT LIGHT SENSOR DRIVER
M: Tomasz Duszynski <tduszyns@gmail.com> M: Tomasz Duszynski <tduszyns@gmail.com>
S: Maintained S: Maintained
@@ -14917,6 +14934,31 @@ F: drivers/mfd/bd9571mwv.c
F: drivers/regulator/bd9571mwv-regulator.c F: drivers/regulator/bd9571mwv-regulator.c
F: include/linux/mfd/bd9571mwv.h F: include/linux/mfd/bd9571mwv.h
ROHM POWER MANAGEMENT IC DEVICE DRIVERS
R: Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>
L: linux-power@fi.rohmeurope.com
S: Supported
F: Documentation/devicetree/bindings/mfd/rohm,bd70528-pmic.txt
F: Documentation/devicetree/bindings/regulator/rohm,bd70528-regulator.txt
F: drivers/clk/clk-bd718x7.c
F: drivers/gpio/gpio-bd70528.c
F: drivers/gpio/gpio-bd71828.c
F: drivers/mfd/rohm-bd70528.c
F: drivers/mfd/rohm-bd71828.c
F: drivers/mfd/rohm-bd718x7.c
F: drivers/power/supply/bd70528-charger.c
F: drivers/regulator/bd70528-regulator.c
F: drivers/regulator/bd71828-regulator.c
F: drivers/regulator/bd718x7-regulator.c
F: drivers/regulator/rohm-regulator.c
F: drivers/rtc/rtc-bd70528.c
F: drivers/watchdog/bd70528_wdt.c
F: include/linux/mfd/rohm-bd70528.h
F: include/linux/mfd/rohm-bd71828.h
F: include/linux/mfd/rohm-bd718x7.h
F: include/linux/mfd/rohm-generic.h
F: include/linux/mfd/rohm-shared.h
ROSE NETWORK LAYER ROSE NETWORK LAYER
M: Ralf Baechle <ralf@linux-mips.org> M: Ralf Baechle <ralf@linux-mips.org>
L: linux-hams@vger.kernel.org L: linux-hams@vger.kernel.org

View File

@@ -972,6 +972,9 @@ config HAVE_SPARSE_SYSCALL_NR
entries at 4000, 5000 and 6000 locations. This option turns on syscall entries at 4000, 5000 and 6000 locations. This option turns on syscall
related optimizations for a given architecture. related optimizations for a given architecture.
config ARCH_HAS_VDSO_DATA
bool
source "kernel/gcov/Kconfig" source "kernel/gcov/Kconfig"
source "scripts/gcc-plugins/Kconfig" source "scripts/gcc-plugins/Kconfig"

View File

@@ -384,7 +384,7 @@ struct el_apecs_procdata
} \ } \
} while (0) } while (0)
__EXTERN_INLINE unsigned int apecs_ioread8(void __iomem *xaddr) __EXTERN_INLINE unsigned int apecs_ioread8(const void __iomem *xaddr)
{ {
unsigned long addr = (unsigned long) xaddr; unsigned long addr = (unsigned long) xaddr;
unsigned long result, base_and_type; unsigned long result, base_and_type;
@@ -420,7 +420,7 @@ __EXTERN_INLINE void apecs_iowrite8(u8 b, void __iomem *xaddr)
*(vuip) ((addr << 5) + base_and_type) = w; *(vuip) ((addr << 5) + base_and_type) = w;
} }
__EXTERN_INLINE unsigned int apecs_ioread16(void __iomem *xaddr) __EXTERN_INLINE unsigned int apecs_ioread16(const void __iomem *xaddr)
{ {
unsigned long addr = (unsigned long) xaddr; unsigned long addr = (unsigned long) xaddr;
unsigned long result, base_and_type; unsigned long result, base_and_type;
@@ -456,7 +456,7 @@ __EXTERN_INLINE void apecs_iowrite16(u16 b, void __iomem *xaddr)
*(vuip) ((addr << 5) + base_and_type) = w; *(vuip) ((addr << 5) + base_and_type) = w;
} }
__EXTERN_INLINE unsigned int apecs_ioread32(void __iomem *xaddr) __EXTERN_INLINE unsigned int apecs_ioread32(const void __iomem *xaddr)
{ {
unsigned long addr = (unsigned long) xaddr; unsigned long addr = (unsigned long) xaddr;
if (addr < APECS_DENSE_MEM) if (addr < APECS_DENSE_MEM)

View File

@@ -342,7 +342,7 @@ struct el_CIA_sysdata_mcheck {
#define vuip volatile unsigned int __force * #define vuip volatile unsigned int __force *
#define vulp volatile unsigned long __force * #define vulp volatile unsigned long __force *
__EXTERN_INLINE unsigned int cia_ioread8(void __iomem *xaddr) __EXTERN_INLINE unsigned int cia_ioread8(const void __iomem *xaddr)
{ {
unsigned long addr = (unsigned long) xaddr; unsigned long addr = (unsigned long) xaddr;
unsigned long result, base_and_type; unsigned long result, base_and_type;
@@ -374,7 +374,7 @@ __EXTERN_INLINE void cia_iowrite8(u8 b, void __iomem *xaddr)
*(vuip) ((addr << 5) + base_and_type) = w; *(vuip) ((addr << 5) + base_and_type) = w;
} }
__EXTERN_INLINE unsigned int cia_ioread16(void __iomem *xaddr) __EXTERN_INLINE unsigned int cia_ioread16(const void __iomem *xaddr)
{ {
unsigned long addr = (unsigned long) xaddr; unsigned long addr = (unsigned long) xaddr;
unsigned long result, base_and_type; unsigned long result, base_and_type;
@@ -404,7 +404,7 @@ __EXTERN_INLINE void cia_iowrite16(u16 b, void __iomem *xaddr)
*(vuip) ((addr << 5) + base_and_type) = w; *(vuip) ((addr << 5) + base_and_type) = w;
} }
__EXTERN_INLINE unsigned int cia_ioread32(void __iomem *xaddr) __EXTERN_INLINE unsigned int cia_ioread32(const void __iomem *xaddr)
{ {
unsigned long addr = (unsigned long) xaddr; unsigned long addr = (unsigned long) xaddr;
if (addr < CIA_DENSE_MEM) if (addr < CIA_DENSE_MEM)

View File

@@ -230,7 +230,7 @@ union el_lca {
} while (0) } while (0)
__EXTERN_INLINE unsigned int lca_ioread8(void __iomem *xaddr) __EXTERN_INLINE unsigned int lca_ioread8(const void __iomem *xaddr)
{ {
unsigned long addr = (unsigned long) xaddr; unsigned long addr = (unsigned long) xaddr;
unsigned long result, base_and_type; unsigned long result, base_and_type;
@@ -266,7 +266,7 @@ __EXTERN_INLINE void lca_iowrite8(u8 b, void __iomem *xaddr)
*(vuip) ((addr << 5) + base_and_type) = w; *(vuip) ((addr << 5) + base_and_type) = w;
} }
__EXTERN_INLINE unsigned int lca_ioread16(void __iomem *xaddr) __EXTERN_INLINE unsigned int lca_ioread16(const void __iomem *xaddr)
{ {
unsigned long addr = (unsigned long) xaddr; unsigned long addr = (unsigned long) xaddr;
unsigned long result, base_and_type; unsigned long result, base_and_type;
@@ -302,7 +302,7 @@ __EXTERN_INLINE void lca_iowrite16(u16 b, void __iomem *xaddr)
*(vuip) ((addr << 5) + base_and_type) = w; *(vuip) ((addr << 5) + base_and_type) = w;
} }
__EXTERN_INLINE unsigned int lca_ioread32(void __iomem *xaddr) __EXTERN_INLINE unsigned int lca_ioread32(const void __iomem *xaddr)
{ {
unsigned long addr = (unsigned long) xaddr; unsigned long addr = (unsigned long) xaddr;
if (addr < LCA_DENSE_MEM) if (addr < LCA_DENSE_MEM)

View File

@@ -332,10 +332,10 @@ struct io7 {
#define vucp volatile unsigned char __force * #define vucp volatile unsigned char __force *
#define vusp volatile unsigned short __force * #define vusp volatile unsigned short __force *
extern unsigned int marvel_ioread8(void __iomem *); extern unsigned int marvel_ioread8(const void __iomem *);
extern void marvel_iowrite8(u8 b, void __iomem *); extern void marvel_iowrite8(u8 b, void __iomem *);
__EXTERN_INLINE unsigned int marvel_ioread16(void __iomem *addr) __EXTERN_INLINE unsigned int marvel_ioread16(const void __iomem *addr)
{ {
return __kernel_ldwu(*(vusp)addr); return __kernel_ldwu(*(vusp)addr);
} }

View File

@@ -267,7 +267,7 @@ extern inline int __mcpcia_is_mmio(unsigned long addr)
return (addr & 0x80000000UL) == 0; return (addr & 0x80000000UL) == 0;
} }
__EXTERN_INLINE unsigned int mcpcia_ioread8(void __iomem *xaddr) __EXTERN_INLINE unsigned int mcpcia_ioread8(const void __iomem *xaddr)
{ {
unsigned long addr = (unsigned long)xaddr & MCPCIA_MEM_MASK; unsigned long addr = (unsigned long)xaddr & MCPCIA_MEM_MASK;
unsigned long hose = (unsigned long)xaddr & ~MCPCIA_MEM_MASK; unsigned long hose = (unsigned long)xaddr & ~MCPCIA_MEM_MASK;
@@ -291,7 +291,7 @@ __EXTERN_INLINE void mcpcia_iowrite8(u8 b, void __iomem *xaddr)
*(vuip) ((addr << 5) + hose + 0x00) = w; *(vuip) ((addr << 5) + hose + 0x00) = w;
} }
__EXTERN_INLINE unsigned int mcpcia_ioread16(void __iomem *xaddr) __EXTERN_INLINE unsigned int mcpcia_ioread16(const void __iomem *xaddr)
{ {
unsigned long addr = (unsigned long)xaddr & MCPCIA_MEM_MASK; unsigned long addr = (unsigned long)xaddr & MCPCIA_MEM_MASK;
unsigned long hose = (unsigned long)xaddr & ~MCPCIA_MEM_MASK; unsigned long hose = (unsigned long)xaddr & ~MCPCIA_MEM_MASK;
@@ -315,7 +315,7 @@ __EXTERN_INLINE void mcpcia_iowrite16(u16 b, void __iomem *xaddr)
*(vuip) ((addr << 5) + hose + 0x08) = w; *(vuip) ((addr << 5) + hose + 0x08) = w;
} }
__EXTERN_INLINE unsigned int mcpcia_ioread32(void __iomem *xaddr) __EXTERN_INLINE unsigned int mcpcia_ioread32(const void __iomem *xaddr)
{ {
unsigned long addr = (unsigned long)xaddr; unsigned long addr = (unsigned long)xaddr;

View File

@@ -572,7 +572,7 @@ __EXTERN_INLINE int t2_is_mmio(const volatile void __iomem *addr)
it doesn't make sense to merge the pio and mmio routines. */ it doesn't make sense to merge the pio and mmio routines. */
#define IOPORT(OS, NS) \ #define IOPORT(OS, NS) \
__EXTERN_INLINE unsigned int t2_ioread##NS(void __iomem *xaddr) \ __EXTERN_INLINE unsigned int t2_ioread##NS(const void __iomem *xaddr) \
{ \ { \
if (t2_is_mmio(xaddr)) \ if (t2_is_mmio(xaddr)) \
return t2_read##OS(xaddr); \ return t2_read##OS(xaddr); \

View File

@@ -150,9 +150,9 @@ static inline void generic_##NAME(TYPE b, QUAL void __iomem *addr) \
alpha_mv.mv_##NAME(b, addr); \ alpha_mv.mv_##NAME(b, addr); \
} }
REMAP1(unsigned int, ioread8, /**/) REMAP1(unsigned int, ioread8, const)
REMAP1(unsigned int, ioread16, /**/) REMAP1(unsigned int, ioread16, const)
REMAP1(unsigned int, ioread32, /**/) REMAP1(unsigned int, ioread32, const)
REMAP1(u8, readb, const volatile) REMAP1(u8, readb, const volatile)
REMAP1(u16, readw, const volatile) REMAP1(u16, readw, const volatile)
REMAP1(u32, readl, const volatile) REMAP1(u32, readl, const volatile)
@@ -307,7 +307,7 @@ static inline int __is_mmio(const volatile void __iomem *addr)
*/ */
#if IO_CONCAT(__IO_PREFIX,trivial_io_bw) #if IO_CONCAT(__IO_PREFIX,trivial_io_bw)
extern inline unsigned int ioread8(void __iomem *addr) extern inline unsigned int ioread8(const void __iomem *addr)
{ {
unsigned int ret; unsigned int ret;
mb(); mb();
@@ -316,7 +316,7 @@ extern inline unsigned int ioread8(void __iomem *addr)
return ret; return ret;
} }
extern inline unsigned int ioread16(void __iomem *addr) extern inline unsigned int ioread16(const void __iomem *addr)
{ {
unsigned int ret; unsigned int ret;
mb(); mb();
@@ -359,7 +359,7 @@ extern inline void outw(u16 b, unsigned long port)
#endif #endif
#if IO_CONCAT(__IO_PREFIX,trivial_io_lq) #if IO_CONCAT(__IO_PREFIX,trivial_io_lq)
extern inline unsigned int ioread32(void __iomem *addr) extern inline unsigned int ioread32(const void __iomem *addr)
{ {
unsigned int ret; unsigned int ret;
mb(); mb();

View File

@@ -7,15 +7,15 @@
#if IO_CONCAT(__IO_PREFIX,trivial_io_bw) #if IO_CONCAT(__IO_PREFIX,trivial_io_bw)
__EXTERN_INLINE unsigned int __EXTERN_INLINE unsigned int
IO_CONCAT(__IO_PREFIX,ioread8)(void __iomem *a) IO_CONCAT(__IO_PREFIX,ioread8)(const void __iomem *a)
{ {
return __kernel_ldbu(*(volatile u8 __force *)a); return __kernel_ldbu(*(const volatile u8 __force *)a);
} }
__EXTERN_INLINE unsigned int __EXTERN_INLINE unsigned int
IO_CONCAT(__IO_PREFIX,ioread16)(void __iomem *a) IO_CONCAT(__IO_PREFIX,ioread16)(const void __iomem *a)
{ {
return __kernel_ldwu(*(volatile u16 __force *)a); return __kernel_ldwu(*(const volatile u16 __force *)a);
} }
__EXTERN_INLINE void __EXTERN_INLINE void
@@ -33,9 +33,9 @@ IO_CONCAT(__IO_PREFIX,iowrite16)(u16 b, void __iomem *a)
#if IO_CONCAT(__IO_PREFIX,trivial_io_lq) #if IO_CONCAT(__IO_PREFIX,trivial_io_lq)
__EXTERN_INLINE unsigned int __EXTERN_INLINE unsigned int
IO_CONCAT(__IO_PREFIX,ioread32)(void __iomem *a) IO_CONCAT(__IO_PREFIX,ioread32)(const void __iomem *a)
{ {
return *(volatile u32 __force *)a; return *(const volatile u32 __force *)a;
} }
__EXTERN_INLINE void __EXTERN_INLINE void
@@ -73,14 +73,14 @@ IO_CONCAT(__IO_PREFIX,writew)(u16 b, volatile void __iomem *a)
__EXTERN_INLINE u8 __EXTERN_INLINE u8
IO_CONCAT(__IO_PREFIX,readb)(const volatile void __iomem *a) IO_CONCAT(__IO_PREFIX,readb)(const volatile void __iomem *a)
{ {
void __iomem *addr = (void __iomem *)a; const void __iomem *addr = (const void __iomem *)a;
return IO_CONCAT(__IO_PREFIX,ioread8)(addr); return IO_CONCAT(__IO_PREFIX,ioread8)(addr);
} }
__EXTERN_INLINE u16 __EXTERN_INLINE u16
IO_CONCAT(__IO_PREFIX,readw)(const volatile void __iomem *a) IO_CONCAT(__IO_PREFIX,readw)(const volatile void __iomem *a)
{ {
void __iomem *addr = (void __iomem *)a; const void __iomem *addr = (const void __iomem *)a;
return IO_CONCAT(__IO_PREFIX,ioread16)(addr); return IO_CONCAT(__IO_PREFIX,ioread16)(addr);
} }

View File

@@ -305,7 +305,7 @@ __EXTERN_INLINE int jensen_is_mmio(const volatile void __iomem *addr)
that it doesn't make sense to merge them. */ that it doesn't make sense to merge them. */
#define IOPORT(OS, NS) \ #define IOPORT(OS, NS) \
__EXTERN_INLINE unsigned int jensen_ioread##NS(void __iomem *xaddr) \ __EXTERN_INLINE unsigned int jensen_ioread##NS(const void __iomem *xaddr) \
{ \ { \
if (jensen_is_mmio(xaddr)) \ if (jensen_is_mmio(xaddr)) \
return jensen_read##OS(xaddr - 0x100000000ul); \ return jensen_read##OS(xaddr - 0x100000000ul); \

View File

@@ -46,9 +46,9 @@ struct alpha_machine_vector
void (*mv_pci_tbi)(struct pci_controller *hose, void (*mv_pci_tbi)(struct pci_controller *hose,
dma_addr_t start, dma_addr_t end); dma_addr_t start, dma_addr_t end);
unsigned int (*mv_ioread8)(void __iomem *); unsigned int (*mv_ioread8)(const void __iomem *);
unsigned int (*mv_ioread16)(void __iomem *); unsigned int (*mv_ioread16)(const void __iomem *);
unsigned int (*mv_ioread32)(void __iomem *); unsigned int (*mv_ioread32)(const void __iomem *);
void (*mv_iowrite8)(u8, void __iomem *); void (*mv_iowrite8)(u8, void __iomem *);
void (*mv_iowrite16)(u16, void __iomem *); void (*mv_iowrite16)(u16, void __iomem *);

View File

@@ -806,7 +806,7 @@ void __iomem *marvel_ioportmap (unsigned long addr)
} }
unsigned int unsigned int
marvel_ioread8(void __iomem *xaddr) marvel_ioread8(const void __iomem *xaddr)
{ {
unsigned long addr = (unsigned long) xaddr; unsigned long addr = (unsigned long) xaddr;
if (__marvel_is_port_kbd(addr)) if (__marvel_is_port_kbd(addr))

View File

@@ -14,7 +14,7 @@
"generic", which bumps through the machine vector. */ "generic", which bumps through the machine vector. */
unsigned int unsigned int
ioread8(void __iomem *addr) ioread8(const void __iomem *addr)
{ {
unsigned int ret; unsigned int ret;
mb(); mb();
@@ -23,7 +23,7 @@ ioread8(void __iomem *addr)
return ret; return ret;
} }
unsigned int ioread16(void __iomem *addr) unsigned int ioread16(const void __iomem *addr)
{ {
unsigned int ret; unsigned int ret;
mb(); mb();
@@ -32,7 +32,7 @@ unsigned int ioread16(void __iomem *addr)
return ret; return ret;
} }
unsigned int ioread32(void __iomem *addr) unsigned int ioread32(const void __iomem *addr)
{ {
unsigned int ret; unsigned int ret;
mb(); mb();
@@ -257,7 +257,7 @@ EXPORT_SYMBOL(readq_relaxed);
/* /*
* Read COUNT 8-bit bytes from port PORT into memory starting at SRC. * Read COUNT 8-bit bytes from port PORT into memory starting at SRC.
*/ */
void ioread8_rep(void __iomem *port, void *dst, unsigned long count) void ioread8_rep(const void __iomem *port, void *dst, unsigned long count)
{ {
while ((unsigned long)dst & 0x3) { while ((unsigned long)dst & 0x3) {
if (!count) if (!count)
@@ -300,7 +300,7 @@ EXPORT_SYMBOL(insb);
* the interfaces seems to be slow: just using the inlined version * the interfaces seems to be slow: just using the inlined version
* of the inw() breaks things. * of the inw() breaks things.
*/ */
void ioread16_rep(void __iomem *port, void *dst, unsigned long count) void ioread16_rep(const void __iomem *port, void *dst, unsigned long count)
{ {
if (unlikely((unsigned long)dst & 0x3)) { if (unlikely((unsigned long)dst & 0x3)) {
if (!count) if (!count)
@@ -340,7 +340,7 @@ EXPORT_SYMBOL(insw);
* but the interfaces seems to be slow: just using the inlined version * but the interfaces seems to be slow: just using the inlined version
* of the inl() breaks things. * of the inl() breaks things.
*/ */
void ioread32_rep(void __iomem *port, void *dst, unsigned long count) void ioread32_rep(const void __iomem *port, void *dst, unsigned long count)
{ {
if (unlikely((unsigned long)dst & 0x3)) { if (unlikely((unsigned long)dst & 0x3)) {
while (count--) { while (count--) {

View File

@@ -249,7 +249,7 @@
316 common mlockall sys_mlockall 316 common mlockall sys_mlockall
317 common munlockall sys_munlockall 317 common munlockall sys_munlockall
318 common sysinfo sys_sysinfo 318 common sysinfo sys_sysinfo
319 common _sysctl sys_sysctl 319 common _sysctl sys_ni_syscall
# 320 was sys_idle # 320 was sys_idle
321 common oldumount sys_oldumount 321 common oldumount sys_oldumount
322 common swapon sys_swapon 322 common swapon sys_swapon

View File

@@ -3,7 +3,6 @@ CONFIG_LOCALVERSION="gum"
CONFIG_SYSVIPC=y CONFIG_SYSVIPC=y
CONFIG_SYSFS_DEPRECATED_V2=y CONFIG_SYSFS_DEPRECATED_V2=y
CONFIG_EXPERT=y CONFIG_EXPERT=y
# CONFIG_SYSCTL_SYSCALL is not set
# CONFIG_EPOLL is not set # CONFIG_EPOLL is not set
# CONFIG_SHMEM is not set # CONFIG_SHMEM is not set
# CONFIG_VM_EVENT_COUNTERS is not set # CONFIG_VM_EVENT_COUNTERS is not set

View File

@@ -113,7 +113,8 @@ static inline bool arm_vdso_hres_capable(void)
} }
#define __arch_vdso_hres_capable arm_vdso_hres_capable #define __arch_vdso_hres_capable arm_vdso_hres_capable
static __always_inline u64 __arch_get_hw_counter(int clock_mode) static __always_inline u64 __arch_get_hw_counter(int clock_mode,
const struct vdso_data *vd)
{ {
#ifdef CONFIG_ARM_ARCH_TIMER #ifdef CONFIG_ARM_ARCH_TIMER
u64 cycle_now; u64 cycle_now;

View File

@@ -162,7 +162,7 @@
146 common writev sys_writev 146 common writev sys_writev
147 common getsid sys_getsid 147 common getsid sys_getsid
148 common fdatasync sys_fdatasync 148 common fdatasync sys_fdatasync
149 common _sysctl sys_sysctl 149 common _sysctl sys_ni_syscall
150 common mlock sys_mlock 150 common mlock sys_mlock
151 common munlock sys_munlock 151 common munlock sys_munlock
152 common mlockall sys_mlockall 152 common mlockall sys_mlockall

View File

@@ -308,8 +308,8 @@ __SYSCALL(__NR_writev, compat_sys_writev)
__SYSCALL(__NR_getsid, sys_getsid) __SYSCALL(__NR_getsid, sys_getsid)
#define __NR_fdatasync 148 #define __NR_fdatasync 148
__SYSCALL(__NR_fdatasync, sys_fdatasync) __SYSCALL(__NR_fdatasync, sys_fdatasync)
#define __NR__sysctl 149 /* 149 was sys_sysctl */
__SYSCALL(__NR__sysctl, compat_sys_sysctl) __SYSCALL(149, sys_ni_syscall)
#define __NR_mlock 150 #define __NR_mlock 150
__SYSCALL(__NR_mlock, sys_mlock) __SYSCALL(__NR_mlock, sys_mlock)
#define __NR_munlock 151 #define __NR_munlock 151

View File

@@ -103,7 +103,8 @@ int clock_getres32_fallback(clockid_t _clkid, struct old_timespec32 *_ts)
return ret; return ret;
} }
static __always_inline u64 __arch_get_hw_counter(s32 clock_mode) static __always_inline u64 __arch_get_hw_counter(s32 clock_mode,
const struct vdso_data *vd)
{ {
u64 res; u64 res;

View File

@@ -64,7 +64,8 @@ int clock_getres_fallback(clockid_t _clkid, struct __kernel_timespec *_ts)
return ret; return ret;
} }
static __always_inline u64 __arch_get_hw_counter(s32 clock_mode) static __always_inline u64 __arch_get_hw_counter(s32 clock_mode,
const struct vdso_data *vd)
{ {
u64 res; u64 res;

View File

@@ -135,7 +135,7 @@
123 common writev sys_writev 123 common writev sys_writev
124 common pread64 sys_pread64 124 common pread64 sys_pread64
125 common pwrite64 sys_pwrite64 125 common pwrite64 sys_pwrite64
126 common _sysctl sys_sysctl 126 common _sysctl sys_ni_syscall
127 common mmap sys_mmap 127 common mmap sys_mmap
128 common munmap sys_munmap 128 common munmap sys_munmap
129 common mlock sys_mlock 129 common mlock sys_mlock

View File

@@ -16,6 +16,7 @@ config M68K
select HAVE_DEBUG_BUGVERBOSE select HAVE_DEBUG_BUGVERBOSE
select GENERIC_IRQ_SHOW select GENERIC_IRQ_SHOW
select GENERIC_ATOMIC64 select GENERIC_ATOMIC64
select NO_DMA if !MMU && !COLDFIRE
select HAVE_UID16 select HAVE_UID16
select VIRT_TO_BUS select VIRT_TO_BUS
select ARCH_HAVE_NMI_SAFE_CMPXCHG if RMW_INSNS select ARCH_HAVE_NMI_SAFE_CMPXCHG if RMW_INSNS
@@ -59,9 +60,6 @@ config TIME_LOW_RES
config NO_IOPORT_MAP config NO_IOPORT_MAP
def_bool y def_bool y
config NO_DMA
def_bool (MMU && SUN3) || (!MMU && !COLDFIRE)
config ZONE_DMA config ZONE_DMA
bool bool
default y default y

View File

@@ -126,6 +126,7 @@ config SUN3
depends on MMU depends on MMU
depends on !MMU_MOTOROLA depends on !MMU_MOTOROLA
select MMU_SUN3 if MMU select MMU_SUN3 if MMU
select NO_DMA
select M68020 select M68020
help help
This option enables support for the Sun 3 series of workstations This option enables support for the Sun 3 series of workstations

View File

@@ -156,7 +156,7 @@
146 common writev sys_writev 146 common writev sys_writev
147 common getsid sys_getsid 147 common getsid sys_getsid
148 common fdatasync sys_fdatasync 148 common fdatasync sys_fdatasync
149 common _sysctl sys_sysctl 149 common _sysctl sys_ni_syscall
150 common mlock sys_mlock 150 common mlock sys_mlock
151 common munlock sys_munlock 151 common munlock sys_munlock
152 common mlockall sys_mlockall 152 common mlockall sys_mlockall

View File

@@ -156,7 +156,7 @@
146 common writev sys_writev 146 common writev sys_writev
147 common getsid sys_getsid 147 common getsid sys_getsid
148 common fdatasync sys_fdatasync 148 common fdatasync sys_fdatasync
149 common _sysctl sys_sysctl 149 common _sysctl sys_ni_syscall
150 common mlock sys_mlock 150 common mlock sys_mlock
151 common munlock sys_munlock 151 common munlock sys_munlock
152 common mlockall sys_mlockall 152 common mlockall sys_mlockall

View File

@@ -17,7 +17,6 @@ CONFIG_CGROUP_CPUACCT=y
CONFIG_NAMESPACES=y CONFIG_NAMESPACES=y
CONFIG_USER_NS=y CONFIG_USER_NS=y
CONFIG_CC_OPTIMIZE_FOR_SIZE=y CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS_ALL=y CONFIG_KALLSYMS_ALL=y
CONFIG_EMBEDDED=y CONFIG_EMBEDDED=y
# CONFIG_VM_EVENT_COUNTERS is not set # CONFIG_VM_EVENT_COUNTERS is not set

View File

@@ -167,7 +167,8 @@ static __always_inline u64 read_gic_count(const struct vdso_data *data)
#endif #endif
static __always_inline u64 __arch_get_hw_counter(s32 clock_mode) static __always_inline u64 __arch_get_hw_counter(s32 clock_mode,
const struct vdso_data *vd)
{ {
#ifdef CONFIG_CSRC_R4K #ifdef CONFIG_CSRC_R4K
if (clock_mode == VDSO_CLOCKMODE_R4K) if (clock_mode == VDSO_CLOCKMODE_R4K)
@@ -175,7 +176,7 @@ static __always_inline u64 __arch_get_hw_counter(s32 clock_mode)
#endif #endif
#ifdef CONFIG_CLKSRC_MIPS_GIC #ifdef CONFIG_CLKSRC_MIPS_GIC
if (clock_mode == VDSO_CLOCKMODE_GIC) if (clock_mode == VDSO_CLOCKMODE_GIC)
return read_gic_count(get_vdso_data()); return read_gic_count(vd);
#endif #endif
/* /*
* Core checks mode already. So this raced against a concurrent * Core checks mode already. So this raced against a concurrent

View File

@@ -159,7 +159,7 @@
149 n32 munlockall sys_munlockall 149 n32 munlockall sys_munlockall
150 n32 vhangup sys_vhangup 150 n32 vhangup sys_vhangup
151 n32 pivot_root sys_pivot_root 151 n32 pivot_root sys_pivot_root
152 n32 _sysctl compat_sys_sysctl 152 n32 _sysctl sys_ni_syscall
153 n32 prctl sys_prctl 153 n32 prctl sys_prctl
154 n32 adjtimex sys_adjtimex_time32 154 n32 adjtimex sys_adjtimex_time32
155 n32 setrlimit compat_sys_setrlimit 155 n32 setrlimit compat_sys_setrlimit

View File

@@ -159,7 +159,7 @@
149 n64 munlockall sys_munlockall 149 n64 munlockall sys_munlockall
150 n64 vhangup sys_vhangup 150 n64 vhangup sys_vhangup
151 n64 pivot_root sys_pivot_root 151 n64 pivot_root sys_pivot_root
152 n64 _sysctl sys_sysctl 152 n64 _sysctl sys_ni_syscall
153 n64 prctl sys_prctl 153 n64 prctl sys_prctl
154 n64 adjtimex sys_adjtimex 154 n64 adjtimex sys_adjtimex
155 n64 setrlimit sys_setrlimit 155 n64 setrlimit sys_setrlimit

View File

@@ -164,7 +164,7 @@
150 o32 unused150 sys_ni_syscall 150 o32 unused150 sys_ni_syscall
151 o32 getsid sys_getsid 151 o32 getsid sys_getsid
152 o32 fdatasync sys_fdatasync 152 o32 fdatasync sys_fdatasync
153 o32 _sysctl sys_sysctl compat_sys_sysctl 153 o32 _sysctl sys_ni_syscall
154 o32 mlock sys_mlock 154 o32 mlock sys_mlock
155 o32 munlock sys_munlock 155 o32 munlock sys_munlock
156 o32 mlockall sys_mlockall 156 o32 mlockall sys_mlockall

View File

@@ -14,6 +14,8 @@
#ifndef __ASM_OPENRISC_IO_H #ifndef __ASM_OPENRISC_IO_H
#define __ASM_OPENRISC_IO_H #define __ASM_OPENRISC_IO_H
#include <linux/types.h>
/* /*
* PCI: can we really do 0 here if we have no port IO? * PCI: can we really do 0 here if we have no port IO?
*/ */
@@ -25,9 +27,12 @@
#define PIO_OFFSET 0 #define PIO_OFFSET 0
#define PIO_MASK 0 #define PIO_MASK 0
#include <asm-generic/io.h> #define ioremap ioremap
void __iomem *ioremap(phys_addr_t offset, unsigned long size); void __iomem *ioremap(phys_addr_t offset, unsigned long size);
#define iounmap iounmap
extern void iounmap(void *addr); extern void iounmap(void *addr);
#include <asm-generic/io.h>
#endif #endif

View File

@@ -48,16 +48,17 @@
/* Ensure that the range from addr to addr+size is all within the process' /* Ensure that the range from addr to addr+size is all within the process'
* address space * address space
*/ */
#define __range_ok(addr, size) (size <= get_fs() && addr <= (get_fs()-size)) static inline int __range_ok(unsigned long addr, unsigned long size)
{
const mm_segment_t fs = get_fs();
/* Ensure that addr is below task's addr_limit */ return size <= fs && addr <= (fs - size);
#define __addr_ok(addr) ((unsigned long) addr < get_fs()) }
#define access_ok(addr, size) \ #define access_ok(addr, size) \
({ \ ({ \
unsigned long __ao_addr = (unsigned long)(addr); \ __chk_user_ptr(addr); \
unsigned long __ao_size = (unsigned long)(size); \ __range_ok((unsigned long)(addr), (size)); \
__range_ok(__ao_addr, __ao_size); \
}) })
/* /*
@@ -100,7 +101,7 @@ extern long __put_user_bad(void);
#define __put_user_check(x, ptr, size) \ #define __put_user_check(x, ptr, size) \
({ \ ({ \
long __pu_err = -EFAULT; \ long __pu_err = -EFAULT; \
__typeof__(*(ptr)) *__pu_addr = (ptr); \ __typeof__(*(ptr)) __user *__pu_addr = (ptr); \
if (access_ok(__pu_addr, size)) \ if (access_ok(__pu_addr, size)) \
__put_user_size((x), __pu_addr, (size), __pu_err); \ __put_user_size((x), __pu_addr, (size), __pu_err); \
__pu_err; \ __pu_err; \
@@ -173,7 +174,7 @@ struct __large_struct {
#define __get_user_check(x, ptr, size) \ #define __get_user_check(x, ptr, size) \
({ \ ({ \
long __gu_err = -EFAULT, __gu_val = 0; \ long __gu_err = -EFAULT, __gu_val = 0; \
const __typeof__(*(ptr)) * __gu_addr = (ptr); \ const __typeof__(*(ptr)) __user *__gu_addr = (ptr); \
if (access_ok(__gu_addr, size)) \ if (access_ok(__gu_addr, size)) \
__get_user_size(__gu_val, __gu_addr, (size), __gu_err); \ __get_user_size(__gu_val, __gu_addr, (size), __gu_err); \
(x) = (__force __typeof__(*(ptr)))__gu_val; \ (x) = (__force __typeof__(*(ptr)))__gu_val; \
@@ -241,17 +242,17 @@ raw_copy_from_user(void *to, const void __user *from, unsigned long size)
return __copy_tofrom_user(to, (__force const void *)from, size); return __copy_tofrom_user(to, (__force const void *)from, size);
} }
static inline unsigned long static inline unsigned long
raw_copy_to_user(void *to, const void __user *from, unsigned long size) raw_copy_to_user(void __user *to, const void *from, unsigned long size)
{ {
return __copy_tofrom_user((__force void *)to, from, size); return __copy_tofrom_user((__force void *)to, from, size);
} }
#define INLINE_COPY_FROM_USER #define INLINE_COPY_FROM_USER
#define INLINE_COPY_TO_USER #define INLINE_COPY_TO_USER
extern unsigned long __clear_user(void *addr, unsigned long size); extern unsigned long __clear_user(void __user *addr, unsigned long size);
static inline __must_check unsigned long static inline __must_check unsigned long
clear_user(void *addr, unsigned long size) clear_user(void __user *addr, unsigned long size)
{ {
if (likely(access_ok(addr, size))) if (likely(access_ok(addr, size)))
size = __clear_user(addr, size); size = __clear_user(addr, size);

View File

@@ -292,13 +292,15 @@ void __init setup_arch(char **cmdline_p)
init_mm.brk = (unsigned long)_end; init_mm.brk = (unsigned long)_end;
#ifdef CONFIG_BLK_DEV_INITRD #ifdef CONFIG_BLK_DEV_INITRD
initrd_start = (unsigned long)&__initrd_start;
initrd_end = (unsigned long)&__initrd_end;
if (initrd_start == initrd_end) { if (initrd_start == initrd_end) {
printk(KERN_INFO "Initial ramdisk not found\n");
initrd_start = 0; initrd_start = 0;
initrd_end = 0; initrd_end = 0;
} } else {
printk(KERN_INFO "Initial ramdisk at: 0x%p (%lu bytes)\n",
(void *)(initrd_start), initrd_end - initrd_start);
initrd_below_start_ok = 1; initrd_below_start_ok = 1;
}
#endif #endif
/* setup memblock allocator */ /* setup memblock allocator */

View File

@@ -68,7 +68,7 @@ static int restore_sigcontext(struct pt_regs *regs,
asmlinkage long _sys_rt_sigreturn(struct pt_regs *regs) asmlinkage long _sys_rt_sigreturn(struct pt_regs *regs)
{ {
struct rt_sigframe *frame = (struct rt_sigframe __user *)regs->sp; struct rt_sigframe __user *frame = (struct rt_sigframe __user *)regs->sp;
sigset_t set; sigset_t set;
/* /*
@@ -76,7 +76,7 @@ asmlinkage long _sys_rt_sigreturn(struct pt_regs *regs)
* then frame should be dword aligned here. If it's * then frame should be dword aligned here. If it's
* not, then the user is trying to mess with us. * not, then the user is trying to mess with us.
*/ */
if (((long)frame) & 3) if (((unsigned long)frame) & 3)
goto badframe; goto badframe;
if (!access_ok(frame, sizeof(*frame))) if (!access_ok(frame, sizeof(*frame)))
@@ -151,7 +151,7 @@ static inline void __user *get_sigframe(struct ksignal *ksig,
static int setup_rt_frame(struct ksignal *ksig, sigset_t *set, static int setup_rt_frame(struct ksignal *ksig, sigset_t *set,
struct pt_regs *regs) struct pt_regs *regs)
{ {
struct rt_sigframe *frame; struct rt_sigframe __user *frame;
unsigned long return_ip; unsigned long return_ip;
int err = 0; int err = 0;
@@ -181,10 +181,10 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set,
l.ori r11,r0,__NR_sigreturn l.ori r11,r0,__NR_sigreturn
l.sys 1 l.sys 1
*/ */
err |= __put_user(0xa960, (short *)(frame->retcode + 0)); err |= __put_user(0xa960, (short __user *)(frame->retcode + 0));
err |= __put_user(__NR_rt_sigreturn, (short *)(frame->retcode + 2)); err |= __put_user(__NR_rt_sigreturn, (short __user *)(frame->retcode + 2));
err |= __put_user(0x20000001, (unsigned long *)(frame->retcode + 4)); err |= __put_user(0x20000001, (unsigned long __user *)(frame->retcode + 4));
err |= __put_user(0x15000000, (unsigned long *)(frame->retcode + 8)); err |= __put_user(0x15000000, (unsigned long __user *)(frame->retcode + 8));
if (err) if (err)
return -EFAULT; return -EFAULT;

View File

@@ -219,30 +219,99 @@ static inline void ipi_flush_tlb_all(void *ignored)
local_flush_tlb_all(); local_flush_tlb_all();
} }
static inline void ipi_flush_tlb_mm(void *info)
{
struct mm_struct *mm = (struct mm_struct *)info;
local_flush_tlb_mm(mm);
}
static void smp_flush_tlb_mm(struct cpumask *cmask, struct mm_struct *mm)
{
unsigned int cpuid;
if (cpumask_empty(cmask))
return;
cpuid = get_cpu();
if (cpumask_any_but(cmask, cpuid) >= nr_cpu_ids) {
/* local cpu is the only cpu present in cpumask */
local_flush_tlb_mm(mm);
} else {
on_each_cpu_mask(cmask, ipi_flush_tlb_mm, mm, 1);
}
put_cpu();
}
struct flush_tlb_data {
unsigned long addr1;
unsigned long addr2;
};
static inline void ipi_flush_tlb_page(void *info)
{
struct flush_tlb_data *fd = (struct flush_tlb_data *)info;
local_flush_tlb_page(NULL, fd->addr1);
}
static inline void ipi_flush_tlb_range(void *info)
{
struct flush_tlb_data *fd = (struct flush_tlb_data *)info;
local_flush_tlb_range(NULL, fd->addr1, fd->addr2);
}
static void smp_flush_tlb_range(struct cpumask *cmask, unsigned long start,
unsigned long end)
{
unsigned int cpuid;
if (cpumask_empty(cmask))
return;
cpuid = get_cpu();
if (cpumask_any_but(cmask, cpuid) >= nr_cpu_ids) {
/* local cpu is the only cpu present in cpumask */
if ((end - start) <= PAGE_SIZE)
local_flush_tlb_page(NULL, start);
else
local_flush_tlb_range(NULL, start, end);
} else {
struct flush_tlb_data fd;
fd.addr1 = start;
fd.addr2 = end;
if ((end - start) <= PAGE_SIZE)
on_each_cpu_mask(cmask, ipi_flush_tlb_page, &fd, 1);
else
on_each_cpu_mask(cmask, ipi_flush_tlb_range, &fd, 1);
}
put_cpu();
}
void flush_tlb_all(void) void flush_tlb_all(void)
{ {
on_each_cpu(ipi_flush_tlb_all, NULL, 1); on_each_cpu(ipi_flush_tlb_all, NULL, 1);
} }
/*
* FIXME: implement proper functionality instead of flush_tlb_all.
* *But*, as things currently stands, the local_tlb_flush_* functions will
* all boil down to local_tlb_flush_all anyway.
*/
void flush_tlb_mm(struct mm_struct *mm) void flush_tlb_mm(struct mm_struct *mm)
{ {
on_each_cpu(ipi_flush_tlb_all, NULL, 1); smp_flush_tlb_mm(mm_cpumask(mm), mm);
} }
void flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr) void flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr)
{ {
on_each_cpu(ipi_flush_tlb_all, NULL, 1); smp_flush_tlb_range(mm_cpumask(vma->vm_mm), uaddr, uaddr + PAGE_SIZE);
} }
void flush_tlb_range(struct vm_area_struct *vma, void flush_tlb_range(struct vm_area_struct *vma,
unsigned long start, unsigned long end) unsigned long start, unsigned long end)
{ {
on_each_cpu(ipi_flush_tlb_all, NULL, 1); smp_flush_tlb_range(mm_cpumask(vma->vm_mm), start, end);
} }
/* Instruction cache invalidate - performed on each cpu */ /* Instruction cache invalidate - performed on each cpu */

View File

@@ -13,6 +13,7 @@
#include <linux/export.h> #include <linux/export.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/sched/debug.h> #include <linux/sched/debug.h>
#include <linux/sched/task_stack.h>
#include <linux/stacktrace.h> #include <linux/stacktrace.h>
#include <asm/processor.h> #include <asm/processor.h>
@@ -68,12 +69,25 @@ void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace)
{ {
unsigned long *sp = NULL; unsigned long *sp = NULL;
if (!try_get_task_stack(tsk))
return;
if (tsk == current) if (tsk == current)
sp = (unsigned long *) &sp; sp = (unsigned long *) &sp;
else else {
sp = (unsigned long *) KSTK_ESP(tsk); unsigned long ksp;
/* Locate stack from kernel context */
ksp = task_thread_info(tsk)->ksp;
ksp += STACK_FRAME_OVERHEAD; /* redzone */
ksp += sizeof(struct pt_regs);
sp = (unsigned long *) ksp;
}
unwind_stack(trace, sp, save_stack_address_nosched); unwind_stack(trace, sp, save_stack_address_nosched);
put_task_stack(tsk);
} }
EXPORT_SYMBOL_GPL(save_stack_trace_tsk); EXPORT_SYMBOL_GPL(save_stack_trace_tsk);

View File

@@ -96,18 +96,6 @@ SECTIONS
__init_end = .; __init_end = .;
. = ALIGN(PAGE_SIZE);
.initrd : AT(ADDR(.initrd) - LOAD_OFFSET)
{
__initrd_start = .;
*(.initrd)
__initrd_end = .;
FILL (0);
. = ALIGN (PAGE_SIZE);
}
__vmlinux_end = .; /* last address of the physical file */
BSS_SECTION(0, 0, 0x20) BSS_SECTION(0, 0, 0x20)
_end = .; _end = .;

View File

@@ -137,21 +137,28 @@ void local_flush_tlb_mm(struct mm_struct *mm)
void switch_mm(struct mm_struct *prev, struct mm_struct *next, void switch_mm(struct mm_struct *prev, struct mm_struct *next,
struct task_struct *next_tsk) struct task_struct *next_tsk)
{ {
unsigned int cpu;
if (unlikely(prev == next))
return;
cpu = smp_processor_id();
cpumask_clear_cpu(cpu, mm_cpumask(prev));
cpumask_set_cpu(cpu, mm_cpumask(next));
/* remember the pgd for the fault handlers /* remember the pgd for the fault handlers
* this is similar to the pgd register in some other CPU's. * this is similar to the pgd register in some other CPU's.
* we need our own copy of it because current and active_mm * we need our own copy of it because current and active_mm
* might be invalid at points where we still need to derefer * might be invalid at points where we still need to derefer
* the pgd. * the pgd.
*/ */
current_pgd[smp_processor_id()] = next->pgd; current_pgd[cpu] = next->pgd;
/* We don't have context support implemented, so flush all /* We don't have context support implemented, so flush all
* entries belonging to previous map * entries belonging to previous map
*/ */
if (prev != next)
local_flush_tlb_mm(prev); local_flush_tlb_mm(prev);
} }
/* /*

View File

@@ -303,8 +303,8 @@ extern void outsl (unsigned long port, const void *src, unsigned long count);
#define ioread64be ioread64be #define ioread64be ioread64be
#define iowrite64 iowrite64 #define iowrite64 iowrite64
#define iowrite64be iowrite64be #define iowrite64be iowrite64be
extern u64 ioread64(void __iomem *addr); extern u64 ioread64(const void __iomem *addr);
extern u64 ioread64be(void __iomem *addr); extern u64 ioread64be(const void __iomem *addr);
extern void iowrite64(u64 val, void __iomem *addr); extern void iowrite64(u64 val, void __iomem *addr);
extern void iowrite64be(u64 val, void __iomem *addr); extern void iowrite64be(u64 val, void __iomem *addr);

View File

@@ -163,7 +163,7 @@
146 common writev sys_writev compat_sys_writev 146 common writev sys_writev compat_sys_writev
147 common getsid sys_getsid 147 common getsid sys_getsid
148 common fdatasync sys_fdatasync 148 common fdatasync sys_fdatasync
149 common _sysctl sys_sysctl compat_sys_sysctl 149 common _sysctl sys_ni_syscall
150 common mlock sys_mlock 150 common mlock sys_mlock
151 common munlock sys_munlock 151 common munlock sys_munlock
152 common mlockall sys_mlockall 152 common mlockall sys_mlockall

View File

@@ -43,13 +43,13 @@
#endif #endif
struct iomap_ops { struct iomap_ops {
unsigned int (*read8)(void __iomem *); unsigned int (*read8)(const void __iomem *);
unsigned int (*read16)(void __iomem *); unsigned int (*read16)(const void __iomem *);
unsigned int (*read16be)(void __iomem *); unsigned int (*read16be)(const void __iomem *);
unsigned int (*read32)(void __iomem *); unsigned int (*read32)(const void __iomem *);
unsigned int (*read32be)(void __iomem *); unsigned int (*read32be)(const void __iomem *);
u64 (*read64)(void __iomem *); u64 (*read64)(const void __iomem *);
u64 (*read64be)(void __iomem *); u64 (*read64be)(const void __iomem *);
void (*write8)(u8, void __iomem *); void (*write8)(u8, void __iomem *);
void (*write16)(u16, void __iomem *); void (*write16)(u16, void __iomem *);
void (*write16be)(u16, void __iomem *); void (*write16be)(u16, void __iomem *);
@@ -57,9 +57,9 @@ struct iomap_ops {
void (*write32be)(u32, void __iomem *); void (*write32be)(u32, void __iomem *);
void (*write64)(u64, void __iomem *); void (*write64)(u64, void __iomem *);
void (*write64be)(u64, void __iomem *); void (*write64be)(u64, void __iomem *);
void (*read8r)(void __iomem *, void *, unsigned long); void (*read8r)(const void __iomem *, void *, unsigned long);
void (*read16r)(void __iomem *, void *, unsigned long); void (*read16r)(const void __iomem *, void *, unsigned long);
void (*read32r)(void __iomem *, void *, unsigned long); void (*read32r)(const void __iomem *, void *, unsigned long);
void (*write8r)(void __iomem *, const void *, unsigned long); void (*write8r)(void __iomem *, const void *, unsigned long);
void (*write16r)(void __iomem *, const void *, unsigned long); void (*write16r)(void __iomem *, const void *, unsigned long);
void (*write32r)(void __iomem *, const void *, unsigned long); void (*write32r)(void __iomem *, const void *, unsigned long);
@@ -69,17 +69,17 @@ struct iomap_ops {
#define ADDR2PORT(addr) ((unsigned long __force)(addr) & 0xffffff) #define ADDR2PORT(addr) ((unsigned long __force)(addr) & 0xffffff)
static unsigned int ioport_read8(void __iomem *addr) static unsigned int ioport_read8(const void __iomem *addr)
{ {
return inb(ADDR2PORT(addr)); return inb(ADDR2PORT(addr));
} }
static unsigned int ioport_read16(void __iomem *addr) static unsigned int ioport_read16(const void __iomem *addr)
{ {
return inw(ADDR2PORT(addr)); return inw(ADDR2PORT(addr));
} }
static unsigned int ioport_read32(void __iomem *addr) static unsigned int ioport_read32(const void __iomem *addr)
{ {
return inl(ADDR2PORT(addr)); return inl(ADDR2PORT(addr));
} }
@@ -99,17 +99,17 @@ static void ioport_write32(u32 datum, void __iomem *addr)
outl(datum, ADDR2PORT(addr)); outl(datum, ADDR2PORT(addr));
} }
static void ioport_read8r(void __iomem *addr, void *dst, unsigned long count) static void ioport_read8r(const void __iomem *addr, void *dst, unsigned long count)
{ {
insb(ADDR2PORT(addr), dst, count); insb(ADDR2PORT(addr), dst, count);
} }
static void ioport_read16r(void __iomem *addr, void *dst, unsigned long count) static void ioport_read16r(const void __iomem *addr, void *dst, unsigned long count)
{ {
insw(ADDR2PORT(addr), dst, count); insw(ADDR2PORT(addr), dst, count);
} }
static void ioport_read32r(void __iomem *addr, void *dst, unsigned long count) static void ioport_read32r(const void __iomem *addr, void *dst, unsigned long count)
{ {
insl(ADDR2PORT(addr), dst, count); insl(ADDR2PORT(addr), dst, count);
} }
@@ -150,37 +150,37 @@ static const struct iomap_ops ioport_ops = {
/* Legacy I/O memory ops */ /* Legacy I/O memory ops */
static unsigned int iomem_read8(void __iomem *addr) static unsigned int iomem_read8(const void __iomem *addr)
{ {
return readb(addr); return readb(addr);
} }
static unsigned int iomem_read16(void __iomem *addr) static unsigned int iomem_read16(const void __iomem *addr)
{ {
return readw(addr); return readw(addr);
} }
static unsigned int iomem_read16be(void __iomem *addr) static unsigned int iomem_read16be(const void __iomem *addr)
{ {
return __raw_readw(addr); return __raw_readw(addr);
} }
static unsigned int iomem_read32(void __iomem *addr) static unsigned int iomem_read32(const void __iomem *addr)
{ {
return readl(addr); return readl(addr);
} }
static unsigned int iomem_read32be(void __iomem *addr) static unsigned int iomem_read32be(const void __iomem *addr)
{ {
return __raw_readl(addr); return __raw_readl(addr);
} }
static u64 iomem_read64(void __iomem *addr) static u64 iomem_read64(const void __iomem *addr)
{ {
return readq(addr); return readq(addr);
} }
static u64 iomem_read64be(void __iomem *addr) static u64 iomem_read64be(const void __iomem *addr)
{ {
return __raw_readq(addr); return __raw_readq(addr);
} }
@@ -220,7 +220,7 @@ static void iomem_write64be(u64 datum, void __iomem *addr)
__raw_writel(datum, addr); __raw_writel(datum, addr);
} }
static void iomem_read8r(void __iomem *addr, void *dst, unsigned long count) static void iomem_read8r(const void __iomem *addr, void *dst, unsigned long count)
{ {
while (count--) { while (count--) {
*(u8 *)dst = __raw_readb(addr); *(u8 *)dst = __raw_readb(addr);
@@ -228,7 +228,7 @@ static void iomem_read8r(void __iomem *addr, void *dst, unsigned long count)
} }
} }
static void iomem_read16r(void __iomem *addr, void *dst, unsigned long count) static void iomem_read16r(const void __iomem *addr, void *dst, unsigned long count)
{ {
while (count--) { while (count--) {
*(u16 *)dst = __raw_readw(addr); *(u16 *)dst = __raw_readw(addr);
@@ -236,7 +236,7 @@ static void iomem_read16r(void __iomem *addr, void *dst, unsigned long count)
} }
} }
static void iomem_read32r(void __iomem *addr, void *dst, unsigned long count) static void iomem_read32r(const void __iomem *addr, void *dst, unsigned long count)
{ {
while (count--) { while (count--) {
*(u32 *)dst = __raw_readl(addr); *(u32 *)dst = __raw_readl(addr);
@@ -297,49 +297,49 @@ static const struct iomap_ops *iomap_ops[8] = {
}; };
unsigned int ioread8(void __iomem *addr) unsigned int ioread8(const void __iomem *addr)
{ {
if (unlikely(INDIRECT_ADDR(addr))) if (unlikely(INDIRECT_ADDR(addr)))
return iomap_ops[ADDR_TO_REGION(addr)]->read8(addr); return iomap_ops[ADDR_TO_REGION(addr)]->read8(addr);
return *((u8 *)addr); return *((u8 *)addr);
} }
unsigned int ioread16(void __iomem *addr) unsigned int ioread16(const void __iomem *addr)
{ {
if (unlikely(INDIRECT_ADDR(addr))) if (unlikely(INDIRECT_ADDR(addr)))
return iomap_ops[ADDR_TO_REGION(addr)]->read16(addr); return iomap_ops[ADDR_TO_REGION(addr)]->read16(addr);
return le16_to_cpup((u16 *)addr); return le16_to_cpup((u16 *)addr);
} }
unsigned int ioread16be(void __iomem *addr) unsigned int ioread16be(const void __iomem *addr)
{ {
if (unlikely(INDIRECT_ADDR(addr))) if (unlikely(INDIRECT_ADDR(addr)))
return iomap_ops[ADDR_TO_REGION(addr)]->read16be(addr); return iomap_ops[ADDR_TO_REGION(addr)]->read16be(addr);
return *((u16 *)addr); return *((u16 *)addr);
} }
unsigned int ioread32(void __iomem *addr) unsigned int ioread32(const void __iomem *addr)
{ {
if (unlikely(INDIRECT_ADDR(addr))) if (unlikely(INDIRECT_ADDR(addr)))
return iomap_ops[ADDR_TO_REGION(addr)]->read32(addr); return iomap_ops[ADDR_TO_REGION(addr)]->read32(addr);
return le32_to_cpup((u32 *)addr); return le32_to_cpup((u32 *)addr);
} }
unsigned int ioread32be(void __iomem *addr) unsigned int ioread32be(const void __iomem *addr)
{ {
if (unlikely(INDIRECT_ADDR(addr))) if (unlikely(INDIRECT_ADDR(addr)))
return iomap_ops[ADDR_TO_REGION(addr)]->read32be(addr); return iomap_ops[ADDR_TO_REGION(addr)]->read32be(addr);
return *((u32 *)addr); return *((u32 *)addr);
} }
u64 ioread64(void __iomem *addr) u64 ioread64(const void __iomem *addr)
{ {
if (unlikely(INDIRECT_ADDR(addr))) if (unlikely(INDIRECT_ADDR(addr)))
return iomap_ops[ADDR_TO_REGION(addr)]->read64(addr); return iomap_ops[ADDR_TO_REGION(addr)]->read64(addr);
return le64_to_cpup((u64 *)addr); return le64_to_cpup((u64 *)addr);
} }
u64 ioread64be(void __iomem *addr) u64 ioread64be(const void __iomem *addr)
{ {
if (unlikely(INDIRECT_ADDR(addr))) if (unlikely(INDIRECT_ADDR(addr)))
return iomap_ops[ADDR_TO_REGION(addr)]->read64be(addr); return iomap_ops[ADDR_TO_REGION(addr)]->read64be(addr);
@@ -411,7 +411,7 @@ void iowrite64be(u64 datum, void __iomem *addr)
/* Repeating interfaces */ /* Repeating interfaces */
void ioread8_rep(void __iomem *addr, void *dst, unsigned long count) void ioread8_rep(const void __iomem *addr, void *dst, unsigned long count)
{ {
if (unlikely(INDIRECT_ADDR(addr))) { if (unlikely(INDIRECT_ADDR(addr))) {
iomap_ops[ADDR_TO_REGION(addr)]->read8r(addr, dst, count); iomap_ops[ADDR_TO_REGION(addr)]->read8r(addr, dst, count);
@@ -423,7 +423,7 @@ void ioread8_rep(void __iomem *addr, void *dst, unsigned long count)
} }
} }
void ioread16_rep(void __iomem *addr, void *dst, unsigned long count) void ioread16_rep(const void __iomem *addr, void *dst, unsigned long count)
{ {
if (unlikely(INDIRECT_ADDR(addr))) { if (unlikely(INDIRECT_ADDR(addr))) {
iomap_ops[ADDR_TO_REGION(addr)]->read16r(addr, dst, count); iomap_ops[ADDR_TO_REGION(addr)]->read16r(addr, dst, count);
@@ -435,7 +435,7 @@ void ioread16_rep(void __iomem *addr, void *dst, unsigned long count)
} }
} }
void ioread32_rep(void __iomem *addr, void *dst, unsigned long count) void ioread32_rep(const void __iomem *addr, void *dst, unsigned long count)
{ {
if (unlikely(INDIRECT_ADDR(addr))) { if (unlikely(INDIRECT_ADDR(addr))) {
iomap_ops[ADDR_TO_REGION(addr)]->read32r(addr, dst, count); iomap_ops[ADDR_TO_REGION(addr)]->read32r(addr, dst, count);

View File

@@ -15,23 +15,23 @@
* Here comes the ppc64 implementation of the IOMAP * Here comes the ppc64 implementation of the IOMAP
* interfaces. * interfaces.
*/ */
unsigned int ioread8(void __iomem *addr) unsigned int ioread8(const void __iomem *addr)
{ {
return readb(addr); return readb(addr);
} }
unsigned int ioread16(void __iomem *addr) unsigned int ioread16(const void __iomem *addr)
{ {
return readw(addr); return readw(addr);
} }
unsigned int ioread16be(void __iomem *addr) unsigned int ioread16be(const void __iomem *addr)
{ {
return readw_be(addr); return readw_be(addr);
} }
unsigned int ioread32(void __iomem *addr) unsigned int ioread32(const void __iomem *addr)
{ {
return readl(addr); return readl(addr);
} }
unsigned int ioread32be(void __iomem *addr) unsigned int ioread32be(const void __iomem *addr)
{ {
return readl_be(addr); return readl_be(addr);
} }
@@ -41,27 +41,27 @@ EXPORT_SYMBOL(ioread16be);
EXPORT_SYMBOL(ioread32); EXPORT_SYMBOL(ioread32);
EXPORT_SYMBOL(ioread32be); EXPORT_SYMBOL(ioread32be);
#ifdef __powerpc64__ #ifdef __powerpc64__
u64 ioread64(void __iomem *addr) u64 ioread64(const void __iomem *addr)
{ {
return readq(addr); return readq(addr);
} }
u64 ioread64_lo_hi(void __iomem *addr) u64 ioread64_lo_hi(const void __iomem *addr)
{ {
return readq(addr); return readq(addr);
} }
u64 ioread64_hi_lo(void __iomem *addr) u64 ioread64_hi_lo(const void __iomem *addr)
{ {
return readq(addr); return readq(addr);
} }
u64 ioread64be(void __iomem *addr) u64 ioread64be(const void __iomem *addr)
{ {
return readq_be(addr); return readq_be(addr);
} }
u64 ioread64be_lo_hi(void __iomem *addr) u64 ioread64be_lo_hi(const void __iomem *addr)
{ {
return readq_be(addr); return readq_be(addr);
} }
u64 ioread64be_hi_lo(void __iomem *addr) u64 ioread64be_hi_lo(const void __iomem *addr)
{ {
return readq_be(addr); return readq_be(addr);
} }
@@ -139,15 +139,15 @@ EXPORT_SYMBOL(iowrite64be_hi_lo);
* FIXME! We could make these do EEH handling if we really * FIXME! We could make these do EEH handling if we really
* wanted. Not clear if we do. * wanted. Not clear if we do.
*/ */
void ioread8_rep(void __iomem *addr, void *dst, unsigned long count) void ioread8_rep(const void __iomem *addr, void *dst, unsigned long count)
{ {
readsb(addr, dst, count); readsb(addr, dst, count);
} }
void ioread16_rep(void __iomem *addr, void *dst, unsigned long count) void ioread16_rep(const void __iomem *addr, void *dst, unsigned long count)
{ {
readsw(addr, dst, count); readsw(addr, dst, count);
} }
void ioread32_rep(void __iomem *addr, void *dst, unsigned long count) void ioread32_rep(const void __iomem *addr, void *dst, unsigned long count)
{ {
readsl(addr, dst, count); readsl(addr, dst, count);
} }

View File

@@ -197,7 +197,7 @@
146 common writev sys_writev compat_sys_writev 146 common writev sys_writev compat_sys_writev
147 common getsid sys_getsid 147 common getsid sys_getsid
148 common fdatasync sys_fdatasync 148 common fdatasync sys_fdatasync
149 nospu _sysctl sys_sysctl compat_sys_sysctl 149 nospu _sysctl sys_ni_syscall
150 common mlock sys_mlock 150 common mlock sys_mlock
151 common munlock sys_munlock 151 common munlock sys_munlock
152 common mlockall sys_mlockall 152 common mlockall sys_mlockall

View File

@@ -1115,9 +1115,8 @@ void hash__early_init_mmu_secondary(void)
&& cpu_has_feature(CPU_FTR_HVMODE)) && cpu_has_feature(CPU_FTR_HVMODE))
tlbiel_all(); tlbiel_all();
#ifdef CONFIG_PPC_MEM_KEYS if (IS_ENABLED(CONFIG_PPC_MEM_KEYS) && mmu_has_feature(MMU_FTR_PKEY))
mtspr(SPRN_UAMOR, default_uamor); mtspr(SPRN_UAMOR, default_uamor);
#endif
} }
#endif /* CONFIG_SMP */ #endif /* CONFIG_SMP */

View File

@@ -73,12 +73,6 @@ static int scan_pkey_feature(void)
if (early_radix_enabled()) if (early_radix_enabled())
return 0; return 0;
/*
* Only P7 and above supports SPRN_AMR update with MSR[PR] = 1
*/
if (!early_cpu_has_feature(CPU_FTR_ARCH_206))
return 0;
ret = of_scan_flat_dt(dt_scan_storage_keys, &pkeys_total); ret = of_scan_flat_dt(dt_scan_storage_keys, &pkeys_total);
if (ret == 0) { if (ret == 0) {
/* /*
@@ -124,6 +118,12 @@ void __init pkey_early_init_devtree(void)
__builtin_popcountl(ARCH_VM_PKEY_FLAGS >> VM_PKEY_SHIFT) __builtin_popcountl(ARCH_VM_PKEY_FLAGS >> VM_PKEY_SHIFT)
!= (sizeof(u64) * BITS_PER_BYTE)); != (sizeof(u64) * BITS_PER_BYTE));
/*
* Only P7 and above supports SPRN_AMR update with MSR[PR] = 1
*/
if (!early_cpu_has_feature(CPU_FTR_ARCH_206))
return;
/* scan the device tree for pkey feature */ /* scan the device tree for pkey feature */
pkeys_total = scan_pkey_feature(); pkeys_total = scan_pkey_feature();
if (!pkeys_total) if (!pkeys_total)

View File

@@ -60,7 +60,8 @@ int clock_getres_fallback(clockid_t _clkid, struct __kernel_timespec *_ts)
return ret; return ret;
} }
static __always_inline u64 __arch_get_hw_counter(s32 clock_mode) static __always_inline u64 __arch_get_hw_counter(s32 clock_mode,
const struct vdso_data *vd)
{ {
/* /*
* The purpose of csr_read(CSR_TIME) is to trap the system into * The purpose of csr_read(CSR_TIME) is to trap the system into

Some files were not shown because too many files have changed in this diff Show More