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:
1
.mailmap
1
.mailmap
@@ -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>
|
||||||
|
@@ -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
|
||||||
|
|
||||||
|
@@ -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.
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
|
||||||
|
@@ -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>
|
||||||
|
@@ -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
|
||||||
|
@@ -14,7 +14,6 @@ properties:
|
|||||||
items:
|
items:
|
||||||
- enum:
|
- enum:
|
||||||
- bananapi,lhr050h41
|
- bananapi,lhr050h41
|
||||||
|
|
||||||
- const: ilitek,ili9881c
|
- const: ilitek,ili9881c
|
||||||
|
|
||||||
backlight: true
|
backlight: true
|
||||||
|
@@ -147,4 +147,3 @@ examples:
|
|||||||
|
|
||||||
...
|
...
|
||||||
|
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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:
|
||||||
|
@@ -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:
|
||||||
|
@@ -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
|
||||||
|
@@ -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: |
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -139,3 +139,4 @@ examples:
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
...
|
...
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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.
|
|
@@ -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
|
||||||
|
129
Documentation/devicetree/bindings/mfd/google,cros-ec.yaml
Normal file
129
Documentation/devicetree/bindings/mfd/google,cros-ec.yaml
Normal 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";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
...
|
44
Documentation/devicetree/bindings/mfd/khadas,mcu.yaml
Normal file
44
Documentation/devicetree/bindings/mfd/khadas,mcu.yaml
Normal 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>;
|
||||||
|
};
|
||||||
|
};
|
@@ -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>;
|
||||||
|
|
||||||
|
122
Documentation/devicetree/bindings/mfd/st,stmfx.yaml
Normal file
122
Documentation/devicetree/bindings/mfd/st,stmfx.yaml
Normal 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;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
...
|
@@ -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
|
||||||
|
@@ -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.
|
|
@@ -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
|
||||||
|
@@ -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";
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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:
|
||||||
|
@@ -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:
|
||||||
|
@@ -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>;
|
||||||
|
@@ -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>;
|
|
||||||
};
|
|
||||||
}
|
|
@@ -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
|
||||||
|
|
||||||
|
@@ -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:
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
|
||||||
|
@@ -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.
|
||||||
|
@@ -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.
|
||||||
|
@@ -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.
|
||||||
|
@@ -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:
|
||||||
|
@@ -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:
|
||||||
|
@@ -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'
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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,.*":
|
||||||
|
@@ -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
|
||||||
|
@@ -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.
|
|
42
MAINTAINERS
42
MAINTAINERS
@@ -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
|
||||||
|
@@ -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"
|
||||||
|
@@ -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)
|
||||||
|
@@ -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)
|
||||||
|
@@ -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)
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
|
|
||||||
|
@@ -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); \
|
||||||
|
@@ -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();
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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); \
|
||||||
|
@@ -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 *);
|
||||||
|
@@ -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))
|
||||||
|
@@ -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--) {
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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;
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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;
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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);
|
||||||
|
@@ -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 */
|
||||||
|
@@ -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;
|
||||||
|
@@ -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 */
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
|
@@ -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 = .;
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
@@ -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
|
||||||
|
@@ -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 */
|
||||||
|
|
||||||
|
@@ -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)
|
||||||
|
@@ -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
Reference in New Issue
Block a user