Merge remote-tracking branch 'net-next/master' into mac80211-next
Merging this brings in the timer_setup() change, which allows me to apply Kees's mac80211 changes for it. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
commit
753d179ad0
2
.mailmap
2
.mailmap
|
@ -68,6 +68,8 @@ Jacob Shin <Jacob.Shin@amd.com>
|
||||||
James Bottomley <jejb@mulgrave.(none)>
|
James Bottomley <jejb@mulgrave.(none)>
|
||||||
James Bottomley <jejb@titanic.il.steeleye.com>
|
James Bottomley <jejb@titanic.il.steeleye.com>
|
||||||
James E Wilson <wilson@specifix.com>
|
James E Wilson <wilson@specifix.com>
|
||||||
|
James Hogan <jhogan@kernel.org> <james.hogan@imgtec.com>
|
||||||
|
James Hogan <jhogan@kernel.org> <james@albanarts.com>
|
||||||
James Ketrenos <jketreno@io.(none)>
|
James Ketrenos <jketreno@io.(none)>
|
||||||
Javi Merino <javi.merino@kernel.org> <javi.merino@arm.com>
|
Javi Merino <javi.merino@kernel.org> <javi.merino@arm.com>
|
||||||
<javier@osg.samsung.com> <javier.martinez@collabora.co.uk>
|
<javier@osg.samsung.com> <javier.martinez@collabora.co.uk>
|
||||||
|
|
|
@ -110,3 +110,51 @@ Description: When new NVM image is written to the non-active NVM
|
||||||
is directly the status value from the DMA configuration
|
is directly the status value from the DMA configuration
|
||||||
based mailbox before the device is power cycled. Writing
|
based mailbox before the device is power cycled. Writing
|
||||||
0 here clears the status.
|
0 here clears the status.
|
||||||
|
|
||||||
|
What: /sys/bus/thunderbolt/devices/<xdomain>.<service>/key
|
||||||
|
Date: Jan 2018
|
||||||
|
KernelVersion: 4.15
|
||||||
|
Contact: thunderbolt-software@lists.01.org
|
||||||
|
Description: This contains name of the property directory the XDomain
|
||||||
|
service exposes. This entry describes the protocol in
|
||||||
|
question. Following directories are already reserved by
|
||||||
|
the Apple XDomain specification:
|
||||||
|
|
||||||
|
network: IP/ethernet over Thunderbolt
|
||||||
|
targetdm: Target disk mode protocol over Thunderbolt
|
||||||
|
extdisp: External display mode protocol over Thunderbolt
|
||||||
|
|
||||||
|
What: /sys/bus/thunderbolt/devices/<xdomain>.<service>/modalias
|
||||||
|
Date: Jan 2018
|
||||||
|
KernelVersion: 4.15
|
||||||
|
Contact: thunderbolt-software@lists.01.org
|
||||||
|
Description: Stores the same MODALIAS value emitted by uevent for
|
||||||
|
the XDomain service. Format: tbtsvc:kSpNvNrN
|
||||||
|
|
||||||
|
What: /sys/bus/thunderbolt/devices/<xdomain>.<service>/prtcid
|
||||||
|
Date: Jan 2018
|
||||||
|
KernelVersion: 4.15
|
||||||
|
Contact: thunderbolt-software@lists.01.org
|
||||||
|
Description: This contains XDomain protocol identifier the XDomain
|
||||||
|
service supports.
|
||||||
|
|
||||||
|
What: /sys/bus/thunderbolt/devices/<xdomain>.<service>/prtcvers
|
||||||
|
Date: Jan 2018
|
||||||
|
KernelVersion: 4.15
|
||||||
|
Contact: thunderbolt-software@lists.01.org
|
||||||
|
Description: This contains XDomain protocol version the XDomain
|
||||||
|
service supports.
|
||||||
|
|
||||||
|
What: /sys/bus/thunderbolt/devices/<xdomain>.<service>/prtcrevs
|
||||||
|
Date: Jan 2018
|
||||||
|
KernelVersion: 4.15
|
||||||
|
Contact: thunderbolt-software@lists.01.org
|
||||||
|
Description: This contains XDomain software version the XDomain
|
||||||
|
service supports.
|
||||||
|
|
||||||
|
What: /sys/bus/thunderbolt/devices/<xdomain>.<service>/prtcstns
|
||||||
|
Date: Jan 2018
|
||||||
|
KernelVersion: 4.15
|
||||||
|
Contact: thunderbolt-software@lists.01.org
|
||||||
|
Description: This contains XDomain service specific settings as
|
||||||
|
bitmask. Format: %x
|
||||||
|
|
|
@ -127,7 +127,7 @@ Description:
|
||||||
|
|
||||||
What; /sys/power/pm_trace_dev_match
|
What; /sys/power/pm_trace_dev_match
|
||||||
Date: October 2010
|
Date: October 2010
|
||||||
Contact: James Hogan <james@albanarts.com>
|
Contact: James Hogan <jhogan@kernel.org>
|
||||||
Description:
|
Description:
|
||||||
The /sys/power/pm_trace_dev_match file contains the name of the
|
The /sys/power/pm_trace_dev_match file contains the name of the
|
||||||
device associated with the last PM event point saved in the RTC
|
device associated with the last PM event point saved in the RTC
|
||||||
|
|
|
@ -197,3 +197,27 @@ information is missing.
|
||||||
|
|
||||||
To recover from this mode, one needs to flash a valid NVM image to the
|
To recover from this mode, one needs to flash a valid NVM image to the
|
||||||
host host controller in the same way it is done in the previous chapter.
|
host host controller in the same way it is done in the previous chapter.
|
||||||
|
|
||||||
|
Networking over Thunderbolt cable
|
||||||
|
---------------------------------
|
||||||
|
Thunderbolt technology allows software communication across two hosts
|
||||||
|
connected by a Thunderbolt cable.
|
||||||
|
|
||||||
|
It is possible to tunnel any kind of traffic over Thunderbolt link but
|
||||||
|
currently we only support Apple ThunderboltIP protocol.
|
||||||
|
|
||||||
|
If the other host is running Windows or macOS only thing you need to
|
||||||
|
do is to connect Thunderbolt cable between the two hosts, the
|
||||||
|
``thunderbolt-net`` is loaded automatically. If the other host is also
|
||||||
|
Linux you should load ``thunderbolt-net`` manually on one host (it does
|
||||||
|
not matter which one)::
|
||||||
|
|
||||||
|
# modprobe thunderbolt-net
|
||||||
|
|
||||||
|
This triggers module load on the other host automatically. If the driver
|
||||||
|
is built-in to the kernel image, there is no need to do anything.
|
||||||
|
|
||||||
|
The driver will create one virtual ethernet interface per Thunderbolt
|
||||||
|
port which are named like ``thunderbolt0`` and so on. From this point
|
||||||
|
you can either use standard userspace tools like ``ifconfig`` to
|
||||||
|
configure the interface or let your GUI to handle it automatically.
|
||||||
|
|
|
@ -39,8 +39,8 @@ up.
|
||||||
Although MT wq wasted a lot of resource, the level of concurrency
|
Although MT wq wasted a lot of resource, the level of concurrency
|
||||||
provided was unsatisfactory. The limitation was common to both ST and
|
provided was unsatisfactory. The limitation was common to both ST and
|
||||||
MT wq albeit less severe on MT. Each wq maintained its own separate
|
MT wq albeit less severe on MT. Each wq maintained its own separate
|
||||||
worker pool. A MT wq could provide only one execution context per CPU
|
worker pool. An MT wq could provide only one execution context per CPU
|
||||||
while a ST wq one for the whole system. Work items had to compete for
|
while an ST wq one for the whole system. Work items had to compete for
|
||||||
those very limited execution contexts leading to various problems
|
those very limited execution contexts leading to various problems
|
||||||
including proneness to deadlocks around the single execution context.
|
including proneness to deadlocks around the single execution context.
|
||||||
|
|
||||||
|
@ -151,7 +151,7 @@ Application Programming Interface (API)
|
||||||
|
|
||||||
``alloc_workqueue()`` allocates a wq. The original
|
``alloc_workqueue()`` allocates a wq. The original
|
||||||
``create_*workqueue()`` functions are deprecated and scheduled for
|
``create_*workqueue()`` functions are deprecated and scheduled for
|
||||||
removal. ``alloc_workqueue()`` takes three arguments - @``name``,
|
removal. ``alloc_workqueue()`` takes three arguments - ``@name``,
|
||||||
``@flags`` and ``@max_active``. ``@name`` is the name of the wq and
|
``@flags`` and ``@max_active``. ``@name`` is the name of the wq and
|
||||||
also used as the name of the rescuer thread if there is one.
|
also used as the name of the rescuer thread if there is one.
|
||||||
|
|
||||||
|
@ -197,7 +197,7 @@ resources, scheduled and executed.
|
||||||
served by worker threads with elevated nice level.
|
served by worker threads with elevated nice level.
|
||||||
|
|
||||||
Note that normal and highpri worker-pools don't interact with
|
Note that normal and highpri worker-pools don't interact with
|
||||||
each other. Each maintain its separate pool of workers and
|
each other. Each maintains its separate pool of workers and
|
||||||
implements concurrency management among its workers.
|
implements concurrency management among its workers.
|
||||||
|
|
||||||
``WQ_CPU_INTENSIVE``
|
``WQ_CPU_INTENSIVE``
|
||||||
|
@ -249,8 +249,8 @@ unbound worker-pools and only one work item could be active at any given
|
||||||
time thus achieving the same ordering property as ST wq.
|
time thus achieving the same ordering property as ST wq.
|
||||||
|
|
||||||
In the current implementation the above configuration only guarantees
|
In the current implementation the above configuration only guarantees
|
||||||
ST behavior within a given NUMA node. Instead alloc_ordered_queue should
|
ST behavior within a given NUMA node. Instead ``alloc_ordered_queue()`` should
|
||||||
be used to achieve system wide ST behavior.
|
be used to achieve system-wide ST behavior.
|
||||||
|
|
||||||
|
|
||||||
Example Execution Scenarios
|
Example Execution Scenarios
|
||||||
|
|
|
@ -32,8 +32,6 @@ cpufreq-stats.txt - General description of sysfs cpufreq stats.
|
||||||
|
|
||||||
index.txt - File index, Mailing list and Links (this document)
|
index.txt - File index, Mailing list and Links (this document)
|
||||||
|
|
||||||
intel-pstate.txt - Intel pstate cpufreq driver specific file.
|
|
||||||
|
|
||||||
pcc-cpufreq.txt - PCC cpufreq driver specific file.
|
pcc-cpufreq.txt - PCC cpufreq driver specific file.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -344,3 +344,4 @@ Version History
|
||||||
(wrong raid10_copies/raid10_format sequence)
|
(wrong raid10_copies/raid10_format sequence)
|
||||||
1.11.1 Add raid4/5/6 journal write-back support via journal_mode option
|
1.11.1 Add raid4/5/6 journal write-back support via journal_mode option
|
||||||
1.12.1 fix for MD deadlock between mddev_suspend() and md_write_start() available
|
1.12.1 fix for MD deadlock between mddev_suspend() and md_write_start() available
|
||||||
|
1.13.0 Fix dev_health status at end of "recover" (was 'a', now 'A')
|
||||||
|
|
|
@ -32,7 +32,7 @@ Example:
|
||||||
compatible = "st,stm32h743-rcc", "st,stm32-rcc";
|
compatible = "st,stm32h743-rcc", "st,stm32-rcc";
|
||||||
reg = <0x58024400 0x400>;
|
reg = <0x58024400 0x400>;
|
||||||
#reset-cells = <1>;
|
#reset-cells = <1>;
|
||||||
#clock-cells = <2>;
|
#clock-cells = <1>;
|
||||||
clocks = <&clk_hse>, <&clk_lse>, <&clk_i2s_ckin>;
|
clocks = <&clk_hse>, <&clk_lse>, <&clk_i2s_ckin>;
|
||||||
|
|
||||||
st,syscfg = <&pwrcfg>;
|
st,syscfg = <&pwrcfg>;
|
||||||
|
|
|
@ -15,11 +15,14 @@ Required properties
|
||||||
|
|
||||||
compatible : Must be "ams,as3645a".
|
compatible : Must be "ams,as3645a".
|
||||||
reg : The I2C address of the device. Typically 0x30.
|
reg : The I2C address of the device. Typically 0x30.
|
||||||
|
#address-cells : 1
|
||||||
|
#size-cells : 0
|
||||||
|
|
||||||
|
|
||||||
Required properties of the "flash" child node
|
Required properties of the flash child node (0)
|
||||||
=============================================
|
===============================================
|
||||||
|
|
||||||
|
reg: 0
|
||||||
flash-timeout-us: Flash timeout in microseconds. The value must be in
|
flash-timeout-us: Flash timeout in microseconds. The value must be in
|
||||||
the range [100000, 850000] and divisible by 50000.
|
the range [100000, 850000] and divisible by 50000.
|
||||||
flash-max-microamp: Maximum flash current in microamperes. Has to be
|
flash-max-microamp: Maximum flash current in microamperes. Has to be
|
||||||
|
@ -33,20 +36,21 @@ ams,input-max-microamp: Maximum flash controller input current. The
|
||||||
and divisible by 50000.
|
and divisible by 50000.
|
||||||
|
|
||||||
|
|
||||||
Optional properties of the "flash" child node
|
Optional properties of the flash child node
|
||||||
=============================================
|
===========================================
|
||||||
|
|
||||||
label : The label of the flash LED.
|
label : The label of the flash LED.
|
||||||
|
|
||||||
|
|
||||||
Required properties of the "indicator" child node
|
Required properties of the indicator child node (1)
|
||||||
=================================================
|
===================================================
|
||||||
|
|
||||||
|
reg: 1
|
||||||
led-max-microamp: Maximum indicator current. The allowed values are
|
led-max-microamp: Maximum indicator current. The allowed values are
|
||||||
2500, 5000, 7500 and 10000.
|
2500, 5000, 7500 and 10000.
|
||||||
|
|
||||||
Optional properties of the "indicator" child node
|
Optional properties of the indicator child node
|
||||||
=================================================
|
===============================================
|
||||||
|
|
||||||
label : The label of the indicator LED.
|
label : The label of the indicator LED.
|
||||||
|
|
||||||
|
@ -55,16 +59,20 @@ Example
|
||||||
=======
|
=======
|
||||||
|
|
||||||
as3645a@30 {
|
as3645a@30 {
|
||||||
|
#address-cells: 1
|
||||||
|
#size-cells: 0
|
||||||
reg = <0x30>;
|
reg = <0x30>;
|
||||||
compatible = "ams,as3645a";
|
compatible = "ams,as3645a";
|
||||||
flash {
|
flash@0 {
|
||||||
|
reg = <0x0>;
|
||||||
flash-timeout-us = <150000>;
|
flash-timeout-us = <150000>;
|
||||||
flash-max-microamp = <320000>;
|
flash-max-microamp = <320000>;
|
||||||
led-max-microamp = <60000>;
|
led-max-microamp = <60000>;
|
||||||
ams,input-max-microamp = <1750000>;
|
ams,input-max-microamp = <1750000>;
|
||||||
label = "as3645a:flash";
|
label = "as3645a:flash";
|
||||||
};
|
};
|
||||||
indicator {
|
indicator@1 {
|
||||||
|
reg = <0x1>;
|
||||||
led-max-microamp = <10000>;
|
led-max-microamp = <10000>;
|
||||||
label = "as3645a:indicator";
|
label = "as3645a:indicator";
|
||||||
};
|
};
|
||||||
|
|
|
@ -21,8 +21,9 @@ Required properties:
|
||||||
- main controller clock (for both armada-375-pp2 and armada-7k-pp2)
|
- main controller clock (for both armada-375-pp2 and armada-7k-pp2)
|
||||||
- GOP clock (for both armada-375-pp2 and armada-7k-pp2)
|
- GOP clock (for both armada-375-pp2 and armada-7k-pp2)
|
||||||
- MG clock (only for armada-7k-pp2)
|
- MG clock (only for armada-7k-pp2)
|
||||||
- clock-names: names of used clocks, must be "pp_clk", "gop_clk" and
|
- AXI clock (only for armada-7k-pp2)
|
||||||
"mg_clk" (the latter only for armada-7k-pp2).
|
- clock-names: names of used clocks, must be "pp_clk", "gop_clk", "mg_clk"
|
||||||
|
and "axi_clk" (the 2 latter only for armada-7k-pp2).
|
||||||
|
|
||||||
The ethernet ports are represented by subnodes. At least one port is
|
The ethernet ports are represented by subnodes. At least one port is
|
||||||
required.
|
required.
|
||||||
|
@ -78,8 +79,9 @@ Example for marvell,armada-7k-pp2:
|
||||||
cpm_ethernet: ethernet@0 {
|
cpm_ethernet: ethernet@0 {
|
||||||
compatible = "marvell,armada-7k-pp22";
|
compatible = "marvell,armada-7k-pp22";
|
||||||
reg = <0x0 0x100000>, <0x129000 0xb000>;
|
reg = <0x0 0x100000>, <0x129000 0xb000>;
|
||||||
clocks = <&cpm_syscon0 1 3>, <&cpm_syscon0 1 9>, <&cpm_syscon0 1 5>;
|
clocks = <&cpm_syscon0 1 3>, <&cpm_syscon0 1 9>,
|
||||||
clock-names = "pp_clk", "gop_clk", "gp_clk";
|
<&cpm_syscon0 1 5>, <&cpm_syscon0 1 18>;
|
||||||
|
clock-names = "pp_clk", "gop_clk", "gp_clk", "axi_clk";
|
||||||
|
|
||||||
eth0: eth0 {
|
eth0: eth0 {
|
||||||
interrupts = <ICU_GRP_NSR 39 IRQ_TYPE_LEVEL_HIGH>,
|
interrupts = <ICU_GRP_NSR 39 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
|
|
@ -4,6 +4,7 @@ The device node has following properties.
|
||||||
|
|
||||||
Required properties:
|
Required properties:
|
||||||
- compatible: should be "rockchip,<name>-gamc"
|
- compatible: should be "rockchip,<name>-gamc"
|
||||||
|
"rockchip,rk3128-gmac": found on RK312x SoCs
|
||||||
"rockchip,rk3228-gmac": found on RK322x SoCs
|
"rockchip,rk3228-gmac": found on RK322x SoCs
|
||||||
"rockchip,rk3288-gmac": found on RK3288 SoCs
|
"rockchip,rk3288-gmac": found on RK3288 SoCs
|
||||||
"rockchip,rk3328-gmac": found on RK3328 SoCs
|
"rockchip,rk3328-gmac": found on RK3328 SoCs
|
||||||
|
|
28
Documentation/devicetree/bindings/reset/snps,hsdk-reset.txt
Normal file
28
Documentation/devicetree/bindings/reset/snps,hsdk-reset.txt
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
Binding for the Synopsys HSDK reset controller
|
||||||
|
|
||||||
|
This binding uses the common reset binding[1].
|
||||||
|
|
||||||
|
[1] Documentation/devicetree/bindings/reset/reset.txt
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible: should be "snps,hsdk-reset".
|
||||||
|
- reg: should always contain 2 pairs address - length: first for reset
|
||||||
|
configuration register and second for corresponding SW reset and status bits
|
||||||
|
register.
|
||||||
|
- #reset-cells: from common reset binding; Should always be set to 1.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
reset: reset@880 {
|
||||||
|
compatible = "snps,hsdk-reset";
|
||||||
|
#reset-cells = <1>;
|
||||||
|
reg = <0x8A0 0x4>, <0xFF0 0x4>;
|
||||||
|
};
|
||||||
|
|
||||||
|
Specifying reset lines connected to IP modules:
|
||||||
|
ethernet@.... {
|
||||||
|
....
|
||||||
|
resets = <&reset HSDK_V1_ETH_RESET>;
|
||||||
|
....
|
||||||
|
};
|
||||||
|
|
||||||
|
The index could be found in <dt-bindings/reset/snps,hsdk-reset.h>
|
|
@ -8,6 +8,12 @@ Required properties:
|
||||||
the firmware event log
|
the firmware event log
|
||||||
- linux,sml-size : size of the memory allocated for the firmware event log
|
- linux,sml-size : size of the memory allocated for the firmware event log
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
|
||||||
|
- powered-while-suspended: present when the TPM is left powered on between
|
||||||
|
suspend and resume (makes the suspend/resume
|
||||||
|
callbacks do nothing).
|
||||||
|
|
||||||
Example (for OpenPower Systems with Nuvoton TPM 2.0 on I2C)
|
Example (for OpenPower Systems with Nuvoton TPM 2.0 on I2C)
|
||||||
----------------------------------------------------------
|
----------------------------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,8 @@ Required properties:
|
||||||
- "renesas,hscif-r8a7795" for R8A7795 (R-Car H3) HSCIF compatible UART.
|
- "renesas,hscif-r8a7795" for R8A7795 (R-Car H3) HSCIF compatible UART.
|
||||||
- "renesas,scif-r8a7796" for R8A7796 (R-Car M3-W) SCIF compatible UART.
|
- "renesas,scif-r8a7796" for R8A7796 (R-Car M3-W) SCIF compatible UART.
|
||||||
- "renesas,hscif-r8a7796" for R8A7796 (R-Car M3-W) HSCIF compatible UART.
|
- "renesas,hscif-r8a7796" for R8A7796 (R-Car M3-W) HSCIF compatible UART.
|
||||||
|
- "renesas,scif-r8a77970" for R8A77970 (R-Car V3M) SCIF compatible UART.
|
||||||
|
- "renesas,hscif-r8a77970" for R8A77970 (R-Car V3M) HSCIF compatible UART.
|
||||||
- "renesas,scif-r8a77995" for R8A77995 (R-Car D3) SCIF compatible UART.
|
- "renesas,scif-r8a77995" for R8A77995 (R-Car D3) SCIF compatible UART.
|
||||||
- "renesas,hscif-r8a77995" for R8A77995 (R-Car D3) HSCIF compatible UART.
|
- "renesas,hscif-r8a77995" for R8A77995 (R-Car D3) HSCIF compatible UART.
|
||||||
- "renesas,scifa-sh73a0" for SH73A0 (SH-Mobile AG5) SCIFA compatible UART.
|
- "renesas,scifa-sh73a0" for SH73A0 (SH-Mobile AG5) SCIFA compatible UART.
|
||||||
|
|
|
@ -3,8 +3,8 @@ Device tree binding vendor prefix registry. Keep list in alphabetical order.
|
||||||
This isn't an exhaustive list, but you should add new prefixes to it before
|
This isn't an exhaustive list, but you should add new prefixes to it before
|
||||||
using them to avoid name-space collisions.
|
using them to avoid name-space collisions.
|
||||||
|
|
||||||
abcn Abracon Corporation
|
|
||||||
abilis Abilis Systems
|
abilis Abilis Systems
|
||||||
|
abracon Abracon Corporation
|
||||||
actions Actions Semiconductor Co., Ltd.
|
actions Actions Semiconductor Co., Ltd.
|
||||||
active-semi Active-Semi International Inc
|
active-semi Active-Semi International Inc
|
||||||
ad Avionic Design GmbH
|
ad Avionic Design GmbH
|
||||||
|
|
|
@ -675,7 +675,7 @@ sub-domain of the parent domain.
|
||||||
|
|
||||||
Support for power domains is provided through the :c:member:`pm_domain` field of
|
Support for power domains is provided through the :c:member:`pm_domain` field of
|
||||||
|struct device|. This field is a pointer to an object of type
|
|struct device|. This field is a pointer to an object of type
|
||||||
|struct dev_pm_domain|, defined in :file:`include/linux/pm.h``, providing a set
|
|struct dev_pm_domain|, defined in :file:`include/linux/pm.h`, providing a set
|
||||||
of power management callbacks analogous to the subsystem-level and device driver
|
of power management callbacks analogous to the subsystem-level and device driver
|
||||||
callbacks that are executed for the given device during all power transitions,
|
callbacks that are executed for the given device during all power transitions,
|
||||||
instead of the respective subsystem-level callbacks. Specifically, if a
|
instead of the respective subsystem-level callbacks. Specifically, if a
|
||||||
|
|
|
@ -196,12 +196,13 @@ struct driver_attribute {
|
||||||
};
|
};
|
||||||
|
|
||||||
Device drivers can export attributes via their sysfs directories.
|
Device drivers can export attributes via their sysfs directories.
|
||||||
Drivers can declare attributes using a DRIVER_ATTR macro that works
|
Drivers can declare attributes using a DRIVER_ATTR_RW and DRIVER_ATTR_RO
|
||||||
identically to the DEVICE_ATTR macro.
|
macro that works identically to the DEVICE_ATTR_RW and DEVICE_ATTR_RO
|
||||||
|
macros.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
DRIVER_ATTR(debug,0644,show_debug,store_debug);
|
DRIVER_ATTR_RW(debug);
|
||||||
|
|
||||||
This is equivalent to declaring:
|
This is equivalent to declaring:
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,11 @@ Igor Mammedov (DFS support)
|
||||||
Jeff Layton (many, many fixes, as well as great work on the cifs Kerberos code)
|
Jeff Layton (many, many fixes, as well as great work on the cifs Kerberos code)
|
||||||
Scott Lovenberg
|
Scott Lovenberg
|
||||||
Pavel Shilovsky (for great work adding SMB2 support, and various SMB3 features)
|
Pavel Shilovsky (for great work adding SMB2 support, and various SMB3 features)
|
||||||
|
Aurelien Aptel (for DFS SMB3 work and some key bug fixes)
|
||||||
|
Ronnie Sahlberg (for SMB3 xattr work and bug fixes)
|
||||||
|
Shirish Pargaonkar (for many ACL patches over the years)
|
||||||
|
Sachin Prabhu (many bug fixes, including for reconnect, copy offload and security)
|
||||||
|
|
||||||
|
|
||||||
Test case and Bug Report contributors
|
Test case and Bug Report contributors
|
||||||
-------------------------------------
|
-------------------------------------
|
||||||
|
|
|
@ -1,10 +1,14 @@
|
||||||
The CIFS VFS support for Linux supports many advanced network filesystem
|
This module supports the SMB3 family of advanced network protocols (as well
|
||||||
features such as hierarchical dfs like namespace, hardlinks, locking and more.
|
as older dialects, originally called "CIFS" or SMB1).
|
||||||
|
|
||||||
|
The CIFS VFS module for Linux supports many advanced network filesystem
|
||||||
|
features such as hierarchical DFS like namespace, hardlinks, locking and more.
|
||||||
It was designed to comply with the SNIA CIFS Technical Reference (which
|
It was designed to comply with the SNIA CIFS Technical Reference (which
|
||||||
supersedes the 1992 X/Open SMB Standard) as well as to perform best practice
|
supersedes the 1992 X/Open SMB Standard) as well as to perform best practice
|
||||||
practical interoperability with Windows 2000, Windows XP, Samba and equivalent
|
practical interoperability with Windows 2000, Windows XP, Samba and equivalent
|
||||||
servers. This code was developed in participation with the Protocol Freedom
|
servers. This code was developed in participation with the Protocol Freedom
|
||||||
Information Foundation.
|
Information Foundation. CIFS and now SMB3 has now become a defacto
|
||||||
|
standard for interoperating between Macs and Windows and major NAS appliances.
|
||||||
|
|
||||||
Please see
|
Please see
|
||||||
http://protocolfreedom.org/ and
|
http://protocolfreedom.org/ and
|
||||||
|
@ -15,30 +19,11 @@ for more details.
|
||||||
For questions or bug reports please contact:
|
For questions or bug reports please contact:
|
||||||
sfrench@samba.org (sfrench@us.ibm.com)
|
sfrench@samba.org (sfrench@us.ibm.com)
|
||||||
|
|
||||||
|
See the project page at: https://wiki.samba.org/index.php/LinuxCIFS_utils
|
||||||
|
|
||||||
Build instructions:
|
Build instructions:
|
||||||
==================
|
==================
|
||||||
For Linux 2.4:
|
For Linux:
|
||||||
1) Get the kernel source (e.g.from http://www.kernel.org)
|
|
||||||
and download the cifs vfs source (see the project page
|
|
||||||
at http://us1.samba.org/samba/Linux_CIFS_client.html)
|
|
||||||
and change directory into the top of the kernel directory
|
|
||||||
then patch the kernel (e.g. "patch -p1 < cifs_24.patch")
|
|
||||||
to add the cifs vfs to your kernel configure options if
|
|
||||||
it has not already been added (e.g. current SuSE and UL
|
|
||||||
users do not need to apply the cifs_24.patch since the cifs vfs is
|
|
||||||
already in the kernel configure menu) and then
|
|
||||||
mkdir linux/fs/cifs and then copy the current cifs vfs files from
|
|
||||||
the cifs download to your kernel build directory e.g.
|
|
||||||
|
|
||||||
cp <cifs_download_dir>/fs/cifs/* to <kernel_download_dir>/fs/cifs
|
|
||||||
|
|
||||||
2) make menuconfig (or make xconfig)
|
|
||||||
3) select cifs from within the network filesystem choices
|
|
||||||
4) save and exit
|
|
||||||
5) make dep
|
|
||||||
6) make modules (or "make" if CIFS VFS not to be built as a module)
|
|
||||||
|
|
||||||
For Linux 2.6:
|
|
||||||
1) Download the kernel (e.g. from http://www.kernel.org)
|
1) Download the kernel (e.g. from http://www.kernel.org)
|
||||||
and change directory into the top of the kernel directory tree
|
and change directory into the top of the kernel directory tree
|
||||||
(e.g. /usr/src/linux-2.5.73)
|
(e.g. /usr/src/linux-2.5.73)
|
||||||
|
@ -61,16 +46,13 @@ would simply type "make install").
|
||||||
If you do not have the utility mount.cifs (in the Samba 3.0 source tree and on
|
If you do not have the utility mount.cifs (in the Samba 3.0 source tree and on
|
||||||
the CIFS VFS web site) copy it to the same directory in which mount.smbfs and
|
the CIFS VFS web site) copy it to the same directory in which mount.smbfs and
|
||||||
similar files reside (usually /sbin). Although the helper software is not
|
similar files reside (usually /sbin). Although the helper software is not
|
||||||
required, mount.cifs is recommended. Eventually the Samba 3.0 utility program
|
required, mount.cifs is recommended. Most distros include a "cifs-utils"
|
||||||
"net" may also be helpful since it may someday provide easier mount syntax for
|
package that includes this utility so it is recommended to install this.
|
||||||
users who are used to Windows e.g.
|
|
||||||
net use <mount point> <UNC name or cifs URL>
|
|
||||||
Note that running the Winbind pam/nss module (logon service) on all of your
|
Note that running the Winbind pam/nss module (logon service) on all of your
|
||||||
Linux clients is useful in mapping Uids and Gids consistently across the
|
Linux clients is useful in mapping Uids and Gids consistently across the
|
||||||
domain to the proper network user. The mount.cifs mount helper can be
|
domain to the proper network user. The mount.cifs mount helper can be
|
||||||
trivially built from Samba 3.0 or later source e.g. by executing:
|
found at cifs-utils.git on git.samba.org
|
||||||
|
|
||||||
gcc samba/source/client/mount.cifs.c -o mount.cifs
|
|
||||||
|
|
||||||
If cifs is built as a module, then the size and number of network buffers
|
If cifs is built as a module, then the size and number of network buffers
|
||||||
and maximum number of simultaneous requests to one server can be configured.
|
and maximum number of simultaneous requests to one server can be configured.
|
||||||
|
@ -79,6 +61,18 @@ Changing these from their defaults is not recommended. By executing modinfo
|
||||||
on kernel/fs/cifs/cifs.ko the list of configuration changes that can be made
|
on kernel/fs/cifs/cifs.ko the list of configuration changes that can be made
|
||||||
at module initialization time (by running insmod cifs.ko) can be seen.
|
at module initialization time (by running insmod cifs.ko) can be seen.
|
||||||
|
|
||||||
|
Recommendations
|
||||||
|
===============
|
||||||
|
To improve security the SMB2.1 dialect or later (usually will get SMB3) is now
|
||||||
|
the new default. To use old dialects (e.g. to mount Windows XP) use "vers=1.0"
|
||||||
|
on mount (or vers=2.0 for Windows Vista). Note that the CIFS (vers=1.0) is
|
||||||
|
much older and less secure than the default dialect SMB3 which includes
|
||||||
|
many advanced security features such as downgrade attack detection
|
||||||
|
and encrypted shares and stronger signing and authentication algorithms.
|
||||||
|
There are additional mount options that may be helpful for SMB3 to get
|
||||||
|
improved POSIX behavior (NB: can use vers=3.0 to force only SMB3, never 2.1):
|
||||||
|
"mfsymlinks" and "cifsacl" and "idsfromsid"
|
||||||
|
|
||||||
Allowing User Mounts
|
Allowing User Mounts
|
||||||
====================
|
====================
|
||||||
To permit users to mount and unmount over directories they own is possible
|
To permit users to mount and unmount over directories they own is possible
|
||||||
|
@ -98,9 +92,7 @@ and execution of suid programs on the remote target would be enabled
|
||||||
by default. This can be changed, as with nfs and other filesystems,
|
by default. This can be changed, as with nfs and other filesystems,
|
||||||
by simply specifying "nosuid" among the mount options. For user mounts
|
by simply specifying "nosuid" among the mount options. For user mounts
|
||||||
though to be able to pass the suid flag to mount requires rebuilding
|
though to be able to pass the suid flag to mount requires rebuilding
|
||||||
mount.cifs with the following flag:
|
mount.cifs with the following flag: CIFS_ALLOW_USR_SUID
|
||||||
|
|
||||||
gcc samba/source/client/mount.cifs.c -DCIFS_ALLOW_USR_SUID -o mount.cifs
|
|
||||||
|
|
||||||
There is a corresponding manual page for cifs mounting in the Samba 3.0 and
|
There is a corresponding manual page for cifs mounting in the Samba 3.0 and
|
||||||
later source tree in docs/manpages/mount.cifs.8
|
later source tree in docs/manpages/mount.cifs.8
|
||||||
|
@ -189,18 +181,18 @@ applications running on the same server as Samba.
|
||||||
Use instructions:
|
Use instructions:
|
||||||
================
|
================
|
||||||
Once the CIFS VFS support is built into the kernel or installed as a module
|
Once the CIFS VFS support is built into the kernel or installed as a module
|
||||||
(cifs.o), you can use mount syntax like the following to access Samba or Windows
|
(cifs.ko), you can use mount syntax like the following to access Samba or
|
||||||
servers:
|
Mac or Windows servers:
|
||||||
|
|
||||||
mount -t cifs //9.53.216.11/e$ /mnt -o user=myname,pass=mypassword
|
mount -t cifs //9.53.216.11/e$ /mnt -o username=myname,password=mypassword
|
||||||
|
|
||||||
Before -o the option -v may be specified to make the mount.cifs
|
Before -o the option -v may be specified to make the mount.cifs
|
||||||
mount helper display the mount steps more verbosely.
|
mount helper display the mount steps more verbosely.
|
||||||
After -o the following commonly used cifs vfs specific options
|
After -o the following commonly used cifs vfs specific options
|
||||||
are supported:
|
are supported:
|
||||||
|
|
||||||
user=<username>
|
username=<username>
|
||||||
pass=<password>
|
password=<password>
|
||||||
domain=<domain name>
|
domain=<domain name>
|
||||||
|
|
||||||
Other cifs mount options are described below. Use of TCP names (in addition to
|
Other cifs mount options are described below. Use of TCP names (in addition to
|
||||||
|
@ -246,13 +238,16 @@ the Server's registry. Samba starting with version 3.10 will allow such
|
||||||
filenames (ie those which contain valid Linux characters, which normally
|
filenames (ie those which contain valid Linux characters, which normally
|
||||||
would be forbidden for Windows/CIFS semantics) as long as the server is
|
would be forbidden for Windows/CIFS semantics) as long as the server is
|
||||||
configured for Unix Extensions (and the client has not disabled
|
configured for Unix Extensions (and the client has not disabled
|
||||||
/proc/fs/cifs/LinuxExtensionsEnabled).
|
/proc/fs/cifs/LinuxExtensionsEnabled). In addition the mount option
|
||||||
|
"mapposix" can be used on CIFS (vers=1.0) to force the mapping of
|
||||||
|
illegal Windows/NTFS/SMB characters to a remap range (this mount parm
|
||||||
|
is the default for SMB3). This remap ("mapposix") range is also
|
||||||
|
compatible with Mac (and "Services for Mac" on some older Windows).
|
||||||
|
|
||||||
CIFS VFS Mount Options
|
CIFS VFS Mount Options
|
||||||
======================
|
======================
|
||||||
A partial list of the supported mount options follows:
|
A partial list of the supported mount options follows:
|
||||||
user The user name to use when trying to establish
|
username The user name to use when trying to establish
|
||||||
the CIFS session.
|
the CIFS session.
|
||||||
password The user password. If the mount helper is
|
password The user password. If the mount helper is
|
||||||
installed, the user will be prompted for password
|
installed, the user will be prompted for password
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
Version 2.03 August 1, 2014
|
Version 2.04 September 13, 2017
|
||||||
|
|
||||||
A Partial List of Missing Features
|
A Partial List of Missing Features
|
||||||
==================================
|
==================================
|
||||||
|
@ -8,73 +8,69 @@ for visible, important contributions to this module. Here
|
||||||
is a partial list of the known problems and missing features:
|
is a partial list of the known problems and missing features:
|
||||||
|
|
||||||
a) SMB3 (and SMB3.02) missing optional features:
|
a) SMB3 (and SMB3.02) missing optional features:
|
||||||
- RDMA
|
- RDMA (started)
|
||||||
- multichannel (started)
|
- multichannel (started)
|
||||||
- directory leases (improved metadata caching)
|
- directory leases (improved metadata caching)
|
||||||
- T10 copy offload (copy chunk is only mechanism supported)
|
- T10 copy offload (copy chunk is only mechanism supported)
|
||||||
- encrypted shares
|
|
||||||
|
|
||||||
b) improved sparse file support
|
b) improved sparse file support
|
||||||
|
|
||||||
c) Directory entry caching relies on a 1 second timer, rather than
|
c) Directory entry caching relies on a 1 second timer, rather than
|
||||||
using FindNotify or equivalent. - (started)
|
using Directory Leases
|
||||||
|
|
||||||
d) quota support (needs minor kernel change since quota calls
|
d) quota support (needs minor kernel change since quota calls
|
||||||
to make it to network filesystems or deviceless filesystems)
|
to make it to network filesystems or deviceless filesystems)
|
||||||
|
|
||||||
e) improve support for very old servers (OS/2 and Win9x for example)
|
e) Better optimize open to reduce redundant opens (using reference
|
||||||
Including support for changing the time remotely (utimes command).
|
counts more) and to improve use of compounding in SMB3 to reduce
|
||||||
|
number of roundtrips.
|
||||||
|
|
||||||
f) hook lower into the sockets api (as NFS/SunRPC does) to avoid the
|
f) Finish inotify support so kde and gnome file list windows
|
||||||
extra copy in/out of the socket buffers in some cases.
|
|
||||||
|
|
||||||
g) Better optimize open (and pathbased setfilesize) to reduce the
|
|
||||||
oplock breaks coming from windows srv. Piggyback identical file
|
|
||||||
opens on top of each other by incrementing reference count rather
|
|
||||||
than resending (helps reduce server resource utilization and avoid
|
|
||||||
spurious oplock breaks).
|
|
||||||
|
|
||||||
h) Add support for storing symlink info to Windows servers
|
|
||||||
in the Extended Attribute format their SFU clients would recognize.
|
|
||||||
|
|
||||||
i) Finish inotify support so kde and gnome file list windows
|
|
||||||
will autorefresh (partially complete by Asser). Needs minor kernel
|
will autorefresh (partially complete by Asser). Needs minor kernel
|
||||||
vfs change to support removing D_NOTIFY on a file.
|
vfs change to support removing D_NOTIFY on a file.
|
||||||
|
|
||||||
j) Add GUI tool to configure /proc/fs/cifs settings and for display of
|
g) Add GUI tool to configure /proc/fs/cifs settings and for display of
|
||||||
the CIFS statistics (started)
|
the CIFS statistics (started)
|
||||||
|
|
||||||
k) implement support for security and trusted categories of xattrs
|
h) implement support for security and trusted categories of xattrs
|
||||||
(requires minor protocol extension) to enable better support for SELINUX
|
(requires minor protocol extension) to enable better support for SELINUX
|
||||||
|
|
||||||
l) Implement O_DIRECT flag on open (already supported on mount)
|
i) Implement O_DIRECT flag on open (already supported on mount)
|
||||||
|
|
||||||
m) Create UID mapping facility so server UIDs can be mapped on a per
|
j) Create UID mapping facility so server UIDs can be mapped on a per
|
||||||
mount or a per server basis to client UIDs or nobody if no mapping
|
mount or a per server basis to client UIDs or nobody if no mapping
|
||||||
exists. This is helpful when Unix extensions are negotiated to
|
exists. Also better integration with winbind for resolving SID owners
|
||||||
allow better permission checking when UIDs differ on the server
|
|
||||||
and client. Add new protocol request to the CIFS protocol
|
|
||||||
standard for asking the server for the corresponding name of a
|
|
||||||
particular uid.
|
|
||||||
|
|
||||||
n) DOS attrs - returned as pseudo-xattr in Samba format (check VFAT and NTFS for this too)
|
k) Add tools to take advantage of more smb3 specific ioctls and features
|
||||||
|
|
||||||
o) mount check for unmatched uids
|
l) encrypted file support
|
||||||
|
|
||||||
p) Add support for new vfs entry point for fallocate
|
m) improved stats gathering, tools (perhaps integration with nfsometer?)
|
||||||
|
|
||||||
q) Add tools to take advantage of cifs/smb3 specific ioctls and features
|
n) allow setting more NTFS/SMB3 file attributes remotely (currently limited to compressed
|
||||||
such as "CopyChunk" (fast server side file copy)
|
file attribute via chflags) and improve user space tools for managing and
|
||||||
|
viewing them.
|
||||||
|
|
||||||
r) encrypted file support
|
o) mount helper GUI (to simplify the various configuration options on mount)
|
||||||
|
|
||||||
s) improved stats gathering, tools (perhaps integration with nfsometer?)
|
p) autonegotiation of dialects (offering more than one dialect ie SMB3.02,
|
||||||
|
SMB3, SMB2.1 not just SMB3).
|
||||||
|
|
||||||
t) allow setting more NTFS/SMB3 file attributes remotely (currently limited to compressed
|
q) Allow mount.cifs to be more verbose in reporting errors with dialect
|
||||||
file attribute via chflags)
|
or unsupported feature errors.
|
||||||
|
|
||||||
u) mount helper GUI (to simplify the various configuration options on mount)
|
r) updating cifs documentation, and user guid.
|
||||||
|
|
||||||
|
s) Addressing bugs found by running a broader set of xfstests in standard
|
||||||
|
file system xfstest suite.
|
||||||
|
|
||||||
|
t) split cifs and smb3 support into separate modules so legacy (and less
|
||||||
|
secure) CIFS dialect can be disabled in environments that don't need it
|
||||||
|
and simplify the code.
|
||||||
|
|
||||||
|
u) Finish up SMB3.1.1 dialect support
|
||||||
|
|
||||||
|
v) POSIX Extensions for SMB3.1.1
|
||||||
|
|
||||||
KNOWN BUGS
|
KNOWN BUGS
|
||||||
====================================
|
====================================
|
||||||
|
|
|
@ -1,24 +1,28 @@
|
||||||
This is the client VFS module for the Common Internet File System
|
This is the client VFS module for the SMB3 NAS protocol as well
|
||||||
(CIFS) protocol which is the successor to the Server Message Block
|
older dialects such as the Common Internet File System (CIFS)
|
||||||
|
protocol which was the successor to the Server Message Block
|
||||||
(SMB) protocol, the native file sharing mechanism for most early
|
(SMB) protocol, the native file sharing mechanism for most early
|
||||||
PC operating systems. New and improved versions of CIFS are now
|
PC operating systems. New and improved versions of CIFS are now
|
||||||
called SMB2 and SMB3. These dialects are also supported by the
|
called SMB2 and SMB3. These dialects are also supported by the
|
||||||
CIFS VFS module. CIFS is fully supported by network
|
CIFS VFS module. CIFS is fully supported by network
|
||||||
file servers such as Windows 2000, 2003, 2008 and 2012
|
file servers such as Windows 2000, 2003, 2008, 2012 and 2016
|
||||||
as well by Samba (which provides excellent CIFS
|
as well by Samba (which provides excellent CIFS
|
||||||
server support for Linux and many other operating systems), so
|
server support for Linux and many other operating systems), Apple
|
||||||
|
systems, as well as most Network Attached Storage vendors, so
|
||||||
this network filesystem client can mount to a wide variety of
|
this network filesystem client can mount to a wide variety of
|
||||||
servers.
|
servers.
|
||||||
|
|
||||||
The intent of this module is to provide the most advanced network
|
The intent of this module is to provide the most advanced network
|
||||||
file system function for CIFS compliant servers, including better
|
file system function for SMB3 compliant servers, including advanced
|
||||||
POSIX compliance, secure per-user session establishment, high
|
security features, excellent parallelized high performance i/o, better
|
||||||
performance safe distributed caching (oplock), optional packet
|
POSIX compliance, secure per-user session establishment, encryption,
|
||||||
|
high performance safe distributed caching (leases/oplocks), optional packet
|
||||||
signing, large files, Unicode support and other internationalization
|
signing, large files, Unicode support and other internationalization
|
||||||
improvements. Since both Samba server and this filesystem client support
|
improvements. Since both Samba server and this filesystem client support
|
||||||
the CIFS Unix extensions, the combination can provide a reasonable
|
the CIFS Unix extensions (and in the future SMB3 POSIX extensions),
|
||||||
alternative to NFSv4 for fileserving in some Linux to Linux environments,
|
the combination can provide a reasonable alternative to other network and
|
||||||
not just in Linux to Windows environments.
|
cluster file systems for fileserving in some Linux to Linux environments,
|
||||||
|
not just in Linux to Windows (or Linux to Mac) environments.
|
||||||
|
|
||||||
This filesystem has an mount utility (mount.cifs) that can be obtained from
|
This filesystem has an mount utility (mount.cifs) that can be obtained from
|
||||||
|
|
||||||
|
|
|
@ -366,7 +366,8 @@ struct driver_attribute {
|
||||||
|
|
||||||
Declaring:
|
Declaring:
|
||||||
|
|
||||||
DRIVER_ATTR(_name, _mode, _show, _store)
|
DRIVER_ATTR_RO(_name)
|
||||||
|
DRIVER_ATTR_RW(_name)
|
||||||
|
|
||||||
Creation/Removal:
|
Creation/Removal:
|
||||||
|
|
||||||
|
|
|
@ -337,7 +337,7 @@ Examples for low-level BPF:
|
||||||
jeq #14, good /* __NR_rt_sigprocmask */
|
jeq #14, good /* __NR_rt_sigprocmask */
|
||||||
jeq #13, good /* __NR_rt_sigaction */
|
jeq #13, good /* __NR_rt_sigaction */
|
||||||
jeq #35, good /* __NR_nanosleep */
|
jeq #35, good /* __NR_nanosleep */
|
||||||
bad: ret #0 /* SECCOMP_RET_KILL */
|
bad: ret #0 /* SECCOMP_RET_KILL_THREAD */
|
||||||
good: ret #0x7fff0000 /* SECCOMP_RET_ALLOW */
|
good: ret #0x7fff0000 /* SECCOMP_RET_ALLOW */
|
||||||
|
|
||||||
The above example code can be placed into a file (here called "foo"), and
|
The above example code can be placed into a file (here called "foo"), and
|
||||||
|
|
|
@ -1680,6 +1680,9 @@ accept_dad - INTEGER
|
||||||
2: Enable DAD, and disable IPv6 operation if MAC-based duplicate
|
2: Enable DAD, and disable IPv6 operation if MAC-based duplicate
|
||||||
link-local address has been found.
|
link-local address has been found.
|
||||||
|
|
||||||
|
DAD operation and mode on a given interface will be selected according
|
||||||
|
to the maximum value of conf/{all,interface}/accept_dad.
|
||||||
|
|
||||||
force_tllao - BOOLEAN
|
force_tllao - BOOLEAN
|
||||||
Enable sending the target link-layer address option even when
|
Enable sending the target link-layer address option even when
|
||||||
responding to a unicast neighbor solicitation.
|
responding to a unicast neighbor solicitation.
|
||||||
|
@ -1727,16 +1730,23 @@ suppress_frag_ndisc - INTEGER
|
||||||
|
|
||||||
optimistic_dad - BOOLEAN
|
optimistic_dad - BOOLEAN
|
||||||
Whether to perform Optimistic Duplicate Address Detection (RFC 4429).
|
Whether to perform Optimistic Duplicate Address Detection (RFC 4429).
|
||||||
0: disabled (default)
|
0: disabled (default)
|
||||||
1: enabled
|
1: enabled
|
||||||
|
|
||||||
|
Optimistic Duplicate Address Detection for the interface will be enabled
|
||||||
|
if at least one of conf/{all,interface}/optimistic_dad is set to 1,
|
||||||
|
it will be disabled otherwise.
|
||||||
|
|
||||||
use_optimistic - BOOLEAN
|
use_optimistic - BOOLEAN
|
||||||
If enabled, do not classify optimistic addresses as deprecated during
|
If enabled, do not classify optimistic addresses as deprecated during
|
||||||
source address selection. Preferred addresses will still be chosen
|
source address selection. Preferred addresses will still be chosen
|
||||||
before optimistic addresses, subject to other ranking in the source
|
before optimistic addresses, subject to other ranking in the source
|
||||||
address selection algorithm.
|
address selection algorithm.
|
||||||
0: disabled (default)
|
0: disabled (default)
|
||||||
1: enabled
|
1: enabled
|
||||||
|
|
||||||
|
This will be enabled if at least one of
|
||||||
|
conf/{all,interface}/use_optimistic is set to 1, disabled otherwise.
|
||||||
|
|
||||||
stable_secret - IPv6 address
|
stable_secret - IPv6 address
|
||||||
This IPv6 address will be used as a secret to generate IPv6
|
This IPv6 address will be used as a secret to generate IPv6
|
||||||
|
|
|
@ -13,42 +13,42 @@ an example setup using a data-center-class switch ASIC chip. Other setups
|
||||||
with SR-IOV or soft switches, such as OVS, are possible.
|
with SR-IOV or soft switches, such as OVS, are possible.
|
||||||
|
|
||||||
|
|
||||||
User-space tools
|
User-space tools
|
||||||
|
|
||||||
user space |
|
user space |
|
||||||
+-------------------------------------------------------------------+
|
+-------------------------------------------------------------------+
|
||||||
kernel | Netlink
|
kernel | Netlink
|
||||||
|
|
|
|
||||||
+--------------+-------------------------------+
|
+--------------+-------------------------------+
|
||||||
| Network stack |
|
| Network stack |
|
||||||
| (Linux) |
|
| (Linux) |
|
||||||
| |
|
| |
|
||||||
+----------------------------------------------+
|
+----------------------------------------------+
|
||||||
|
|
||||||
sw1p2 sw1p4 sw1p6
|
sw1p2 sw1p4 sw1p6
|
||||||
sw1p1 + sw1p3 + sw1p5 + eth1
|
sw1p1 + sw1p3 + sw1p5 + eth1
|
||||||
+ | + | + | +
|
+ | + | + | +
|
||||||
| | | | | | |
|
| | | | | | |
|
||||||
+--+----+----+----+-+--+----+---+ +-----+-----+
|
+--+----+----+----+----+----+---+ +-----+-----+
|
||||||
| Switch driver | | mgmt |
|
| Switch driver | | mgmt |
|
||||||
| (this document) | | driver |
|
| (this document) | | driver |
|
||||||
| | | |
|
| | | |
|
||||||
+--------------+----------------+ +-----------+
|
+--------------+----------------+ +-----------+
|
||||||
|
|
|
|
||||||
kernel | HW bus (eg PCI)
|
kernel | HW bus (eg PCI)
|
||||||
+-------------------------------------------------------------------+
|
+-------------------------------------------------------------------+
|
||||||
hardware |
|
hardware |
|
||||||
+--------------+---+------------+
|
+--------------+----------------+
|
||||||
| Switch device (sw1) |
|
| Switch device (sw1) |
|
||||||
| +----+ +--------+
|
| +----+ +--------+
|
||||||
| | v offloaded data path | mgmt port
|
| | v offloaded data path | mgmt port
|
||||||
| | | |
|
| | | |
|
||||||
+--|----|----+----+----+----+---+
|
+--|----|----+----+----+----+---+
|
||||||
| | | | | |
|
| | | | | |
|
||||||
+ + + + + +
|
+ + + + + +
|
||||||
p1 p2 p3 p4 p5 p6
|
p1 p2 p3 p4 p5 p6
|
||||||
|
|
||||||
front-panel ports
|
front-panel ports
|
||||||
|
|
||||||
|
|
||||||
Fig 1.
|
Fig 1.
|
||||||
|
|
|
@ -75,6 +75,7 @@ show up in /proc/sys/kernel:
|
||||||
- reboot-cmd [ SPARC only ]
|
- reboot-cmd [ SPARC only ]
|
||||||
- rtsig-max
|
- rtsig-max
|
||||||
- rtsig-nr
|
- rtsig-nr
|
||||||
|
- seccomp/ ==> Documentation/userspace-api/seccomp_filter.rst
|
||||||
- sem
|
- sem
|
||||||
- sem_next_id [ sysv ipc ]
|
- sem_next_id [ sysv ipc ]
|
||||||
- sg-big-buff [ generic SCSI device (sg) ]
|
- sg-big-buff [ generic SCSI device (sg) ]
|
||||||
|
|
|
@ -87,11 +87,16 @@ Return values
|
||||||
A seccomp filter may return any of the following values. If multiple
|
A seccomp filter may return any of the following values. If multiple
|
||||||
filters exist, the return value for the evaluation of a given system
|
filters exist, the return value for the evaluation of a given system
|
||||||
call will always use the highest precedent value. (For example,
|
call will always use the highest precedent value. (For example,
|
||||||
``SECCOMP_RET_KILL`` will always take precedence.)
|
``SECCOMP_RET_KILL_PROCESS`` will always take precedence.)
|
||||||
|
|
||||||
In precedence order, they are:
|
In precedence order, they are:
|
||||||
|
|
||||||
``SECCOMP_RET_KILL``:
|
``SECCOMP_RET_KILL_PROCESS``:
|
||||||
|
Results in the entire process exiting immediately without executing
|
||||||
|
the system call. The exit status of the task (``status & 0x7f``)
|
||||||
|
will be ``SIGSYS``, not ``SIGKILL``.
|
||||||
|
|
||||||
|
``SECCOMP_RET_KILL_THREAD``:
|
||||||
Results in the task exiting immediately without executing the
|
Results in the task exiting immediately without executing the
|
||||||
system call. The exit status of the task (``status & 0x7f``) will
|
system call. The exit status of the task (``status & 0x7f``) will
|
||||||
be ``SIGSYS``, not ``SIGKILL``.
|
be ``SIGSYS``, not ``SIGKILL``.
|
||||||
|
@ -141,6 +146,15 @@ In precedence order, they are:
|
||||||
allow use of ptrace, even of other sandboxed processes, without
|
allow use of ptrace, even of other sandboxed processes, without
|
||||||
extreme care; ptracers can use this mechanism to escape.)
|
extreme care; ptracers can use this mechanism to escape.)
|
||||||
|
|
||||||
|
``SECCOMP_RET_LOG``:
|
||||||
|
Results in the system call being executed after it is logged. This
|
||||||
|
should be used by application developers to learn which syscalls their
|
||||||
|
application needs without having to iterate through multiple test and
|
||||||
|
development cycles to build the list.
|
||||||
|
|
||||||
|
This action will only be logged if "log" is present in the
|
||||||
|
actions_logged sysctl string.
|
||||||
|
|
||||||
``SECCOMP_RET_ALLOW``:
|
``SECCOMP_RET_ALLOW``:
|
||||||
Results in the system call being executed.
|
Results in the system call being executed.
|
||||||
|
|
||||||
|
@ -169,7 +183,41 @@ The ``samples/seccomp/`` directory contains both an x86-specific example
|
||||||
and a more generic example of a higher level macro interface for BPF
|
and a more generic example of a higher level macro interface for BPF
|
||||||
program generation.
|
program generation.
|
||||||
|
|
||||||
|
Sysctls
|
||||||
|
=======
|
||||||
|
|
||||||
|
Seccomp's sysctl files can be found in the ``/proc/sys/kernel/seccomp/``
|
||||||
|
directory. Here's a description of each file in that directory:
|
||||||
|
|
||||||
|
``actions_avail``:
|
||||||
|
A read-only ordered list of seccomp return values (refer to the
|
||||||
|
``SECCOMP_RET_*`` macros above) in string form. The ordering, from
|
||||||
|
left-to-right, is the least permissive return value to the most
|
||||||
|
permissive return value.
|
||||||
|
|
||||||
|
The list represents the set of seccomp return values supported
|
||||||
|
by the kernel. A userspace program may use this list to
|
||||||
|
determine if the actions found in the ``seccomp.h``, when the
|
||||||
|
program was built, differs from the set of actions actually
|
||||||
|
supported in the current running kernel.
|
||||||
|
|
||||||
|
``actions_logged``:
|
||||||
|
A read-write ordered list of seccomp return values (refer to the
|
||||||
|
``SECCOMP_RET_*`` macros above) that are allowed to be logged. Writes
|
||||||
|
to the file do not need to be in ordered form but reads from the file
|
||||||
|
will be ordered in the same way as the actions_avail sysctl.
|
||||||
|
|
||||||
|
It is important to note that the value of ``actions_logged`` does not
|
||||||
|
prevent certain actions from being logged when the audit subsystem is
|
||||||
|
configured to audit a task. If the action is not found in
|
||||||
|
``actions_logged`` list, the final decision on whether to audit the
|
||||||
|
action for that task is ultimately left up to the audit subsystem to
|
||||||
|
decide for all seccomp return values other than ``SECCOMP_RET_ALLOW``.
|
||||||
|
|
||||||
|
The ``allow`` string is not accepted in the ``actions_logged`` sysctl
|
||||||
|
as it is not possible to log ``SECCOMP_RET_ALLOW`` actions. Attempting
|
||||||
|
to write ``allow`` to the sysctl will result in an EINVAL being
|
||||||
|
returned.
|
||||||
|
|
||||||
Adding architecture support
|
Adding architecture support
|
||||||
===========================
|
===========================
|
||||||
|
|
57
MAINTAINERS
57
MAINTAINERS
|
@ -352,6 +352,18 @@ L: linux-acpi@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/acpi/arm64
|
F: drivers/acpi/arm64
|
||||||
|
|
||||||
|
ACPI PMIC DRIVERS
|
||||||
|
M: "Rafael J. Wysocki" <rjw@rjwysocki.net>
|
||||||
|
M: Len Brown <lenb@kernel.org>
|
||||||
|
R: Andy Shevchenko <andy@infradead.org>
|
||||||
|
R: Mika Westerberg <mika.westerberg@linux.intel.com>
|
||||||
|
L: linux-acpi@vger.kernel.org
|
||||||
|
Q: https://patchwork.kernel.org/project/linux-acpi/list/
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
|
||||||
|
B: https://bugzilla.kernel.org
|
||||||
|
S: Supported
|
||||||
|
F: drivers/acpi/pmic/
|
||||||
|
|
||||||
ACPI THERMAL DRIVER
|
ACPI THERMAL DRIVER
|
||||||
M: Zhang Rui <rui.zhang@intel.com>
|
M: Zhang Rui <rui.zhang@intel.com>
|
||||||
L: linux-acpi@vger.kernel.org
|
L: linux-acpi@vger.kernel.org
|
||||||
|
@ -2713,7 +2725,7 @@ F: net/core/filter.c
|
||||||
F: net/sched/act_bpf.c
|
F: net/sched/act_bpf.c
|
||||||
F: net/sched/cls_bpf.c
|
F: net/sched/cls_bpf.c
|
||||||
F: samples/bpf/
|
F: samples/bpf/
|
||||||
F: tools/net/bpf*
|
F: tools/bpf/
|
||||||
F: tools/testing/selftests/bpf/
|
F: tools/testing/selftests/bpf/
|
||||||
|
|
||||||
BROADCOM B44 10/100 ETHERNET DRIVER
|
BROADCOM B44 10/100 ETHERNET DRIVER
|
||||||
|
@ -2853,7 +2865,6 @@ S: Supported
|
||||||
F: drivers/scsi/bnx2i/
|
F: drivers/scsi/bnx2i/
|
||||||
|
|
||||||
BROADCOM BNX2X 10 GIGABIT ETHERNET DRIVER
|
BROADCOM BNX2X 10 GIGABIT ETHERNET DRIVER
|
||||||
M: Yuval Mintz <Yuval.Mintz@cavium.com>
|
|
||||||
M: Ariel Elior <ariel.elior@cavium.com>
|
M: Ariel Elior <ariel.elior@cavium.com>
|
||||||
M: everest-linux-l2@cavium.com
|
M: everest-linux-l2@cavium.com
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
|
@ -6643,8 +6654,8 @@ M: Alexander Aring <alex.aring@gmail.com>
|
||||||
M: Stefan Schmidt <stefan@osg.samsung.com>
|
M: Stefan Schmidt <stefan@osg.samsung.com>
|
||||||
L: linux-wpan@vger.kernel.org
|
L: linux-wpan@vger.kernel.org
|
||||||
W: http://wpan.cakelab.org/
|
W: http://wpan.cakelab.org/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/sschmidt/wpan.git
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/sschmidt/wpan-next.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: net/ieee802154/
|
F: net/ieee802154/
|
||||||
F: net/mac802154/
|
F: net/mac802154/
|
||||||
|
@ -6727,7 +6738,7 @@ F: Documentation/devicetree/bindings/auxdisplay/img-ascii-lcd.txt
|
||||||
F: drivers/auxdisplay/img-ascii-lcd.c
|
F: drivers/auxdisplay/img-ascii-lcd.c
|
||||||
|
|
||||||
IMGTEC IR DECODER DRIVER
|
IMGTEC IR DECODER DRIVER
|
||||||
M: James Hogan <james.hogan@imgtec.com>
|
M: James Hogan <jhogan@kernel.org>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/media/rc/img-ir/
|
F: drivers/media/rc/img-ir/
|
||||||
|
|
||||||
|
@ -7551,7 +7562,7 @@ F: arch/arm64/include/asm/kvm*
|
||||||
F: arch/arm64/kvm/
|
F: arch/arm64/kvm/
|
||||||
|
|
||||||
KERNEL VIRTUAL MACHINE FOR MIPS (KVM/mips)
|
KERNEL VIRTUAL MACHINE FOR MIPS (KVM/mips)
|
||||||
M: James Hogan <james.hogan@imgtec.com>
|
M: James Hogan <jhogan@kernel.org>
|
||||||
L: linux-mips@linux-mips.org
|
L: linux-mips@linux-mips.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: arch/mips/include/uapi/asm/kvm*
|
F: arch/mips/include/uapi/asm/kvm*
|
||||||
|
@ -8253,6 +8264,12 @@ L: libertas-dev@lists.infradead.org
|
||||||
S: Orphan
|
S: Orphan
|
||||||
F: drivers/net/wireless/marvell/libertas/
|
F: drivers/net/wireless/marvell/libertas/
|
||||||
|
|
||||||
|
MARVELL MACCHIATOBIN SUPPORT
|
||||||
|
M: Russell King <rmk@armlinux.org.uk>
|
||||||
|
L: linux-arm-kernel@lists.infradead.org
|
||||||
|
S: Maintained
|
||||||
|
F: arch/arm64/boot/dts/marvell/armada-8040-mcbin.dts
|
||||||
|
|
||||||
MARVELL MV643XX ETHERNET DRIVER
|
MARVELL MV643XX ETHERNET DRIVER
|
||||||
M: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
|
M: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
|
@ -8586,6 +8603,12 @@ M: Sean Wang <sean.wang@mediatek.com>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/media/rc/mtk-cir.c
|
F: drivers/media/rc/mtk-cir.c
|
||||||
|
|
||||||
|
MEDIATEK PMIC LED DRIVER
|
||||||
|
M: Sean Wang <sean.wang@mediatek.com>
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/leds/leds-mt6323.c
|
||||||
|
F: Documentation/devicetree/bindings/leds/leds-mt6323.txt
|
||||||
|
|
||||||
MEDIATEK ETHERNET DRIVER
|
MEDIATEK ETHERNET DRIVER
|
||||||
M: Felix Fietkau <nbd@openwrt.org>
|
M: Felix Fietkau <nbd@openwrt.org>
|
||||||
M: John Crispin <john@phrozen.org>
|
M: John Crispin <john@phrozen.org>
|
||||||
|
@ -8868,7 +8891,7 @@ F: Documentation/devicetree/bindings/media/meson-ao-cec.txt
|
||||||
T: git git://linuxtv.org/media_tree.git
|
T: git git://linuxtv.org/media_tree.git
|
||||||
|
|
||||||
METAG ARCHITECTURE
|
METAG ARCHITECTURE
|
||||||
M: James Hogan <james.hogan@imgtec.com>
|
M: James Hogan <jhogan@kernel.org>
|
||||||
L: linux-metag@vger.kernel.org
|
L: linux-metag@vger.kernel.org
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/jhogan/metag.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/jhogan/metag.git
|
||||||
S: Odd Fixes
|
S: Odd Fixes
|
||||||
|
@ -9405,7 +9428,6 @@ F: include/uapi/linux/in.h
|
||||||
F: include/uapi/linux/net.h
|
F: include/uapi/linux/net.h
|
||||||
F: include/uapi/linux/netdevice.h
|
F: include/uapi/linux/netdevice.h
|
||||||
F: include/uapi/linux/net_namespace.h
|
F: include/uapi/linux/net_namespace.h
|
||||||
F: tools/net/
|
|
||||||
F: tools/testing/selftests/net/
|
F: tools/testing/selftests/net/
|
||||||
F: lib/random32.c
|
F: lib/random32.c
|
||||||
|
|
||||||
|
@ -11047,7 +11069,6 @@ S: Supported
|
||||||
F: drivers/scsi/qedi/
|
F: drivers/scsi/qedi/
|
||||||
|
|
||||||
QLOGIC QL4xxx ETHERNET DRIVER
|
QLOGIC QL4xxx ETHERNET DRIVER
|
||||||
M: Yuval Mintz <Yuval.Mintz@cavium.com>
|
|
||||||
M: Ariel Elior <Ariel.Elior@cavium.com>
|
M: Ariel Elior <Ariel.Elior@cavium.com>
|
||||||
M: everest-linux-l2@cavium.com
|
M: everest-linux-l2@cavium.com
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
|
@ -12915,9 +12936,9 @@ F: drivers/mmc/host/dw_mmc*
|
||||||
SYNOPSYS HSDK RESET CONTROLLER DRIVER
|
SYNOPSYS HSDK RESET CONTROLLER DRIVER
|
||||||
M: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
|
M: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/reset/reset-hsdk-v1.c
|
F: drivers/reset/reset-hsdk.c
|
||||||
F: include/dt-bindings/reset/snps,hsdk-v1-reset.h
|
F: include/dt-bindings/reset/snps,hsdk-reset.h
|
||||||
F: Documentation/devicetree/bindings/reset/snps,hsdk-v1-reset.txt
|
F: Documentation/devicetree/bindings/reset/snps,hsdk-reset.txt
|
||||||
|
|
||||||
SYSTEM CONFIGURATION (SYSCON)
|
SYSTEM CONFIGURATION (SYSCON)
|
||||||
M: Lee Jones <lee.jones@linaro.org>
|
M: Lee Jones <lee.jones@linaro.org>
|
||||||
|
@ -13268,6 +13289,15 @@ M: Mika Westerberg <mika.westerberg@linux.intel.com>
|
||||||
M: Yehezkel Bernat <yehezkel.bernat@intel.com>
|
M: Yehezkel Bernat <yehezkel.bernat@intel.com>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/thunderbolt/
|
F: drivers/thunderbolt/
|
||||||
|
F: include/linux/thunderbolt.h
|
||||||
|
|
||||||
|
THUNDERBOLT NETWORK DRIVER
|
||||||
|
M: Michael Jamet <michael.jamet@intel.com>
|
||||||
|
M: Mika Westerberg <mika.westerberg@linux.intel.com>
|
||||||
|
M: Yehezkel Bernat <yehezkel.bernat@intel.com>
|
||||||
|
L: netdev@vger.kernel.org
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/net/thunderbolt.c
|
||||||
|
|
||||||
THUNDERX GPIO DRIVER
|
THUNDERX GPIO DRIVER
|
||||||
M: David Daney <david.daney@cavium.com>
|
M: David Daney <david.daney@cavium.com>
|
||||||
|
@ -14256,12 +14286,15 @@ S: Maintained
|
||||||
F: include/linux/virtio_vsock.h
|
F: include/linux/virtio_vsock.h
|
||||||
F: include/uapi/linux/virtio_vsock.h
|
F: include/uapi/linux/virtio_vsock.h
|
||||||
F: include/uapi/linux/vsockmon.h
|
F: include/uapi/linux/vsockmon.h
|
||||||
|
F: include/uapi/linux/vm_sockets_diag.h
|
||||||
|
F: net/vmw_vsock/diag.c
|
||||||
F: net/vmw_vsock/af_vsock_tap.c
|
F: net/vmw_vsock/af_vsock_tap.c
|
||||||
F: net/vmw_vsock/virtio_transport_common.c
|
F: net/vmw_vsock/virtio_transport_common.c
|
||||||
F: net/vmw_vsock/virtio_transport.c
|
F: net/vmw_vsock/virtio_transport.c
|
||||||
F: drivers/net/vsockmon.c
|
F: drivers/net/vsockmon.c
|
||||||
F: drivers/vhost/vsock.c
|
F: drivers/vhost/vsock.c
|
||||||
F: drivers/vhost/vsock.h
|
F: drivers/vhost/vsock.h
|
||||||
|
F: tools/testing/vsock/
|
||||||
|
|
||||||
VIRTIO CONSOLE DRIVER
|
VIRTIO CONSOLE DRIVER
|
||||||
M: Amit Shah <amit@kernel.org>
|
M: Amit Shah <amit@kernel.org>
|
||||||
|
|
6
Makefile
6
Makefile
|
@ -1,7 +1,7 @@
|
||||||
VERSION = 4
|
VERSION = 4
|
||||||
PATCHLEVEL = 14
|
PATCHLEVEL = 14
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION = -rc1
|
EXTRAVERSION = -rc3
|
||||||
NAME = Fearless Coyote
|
NAME = Fearless Coyote
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
@ -1172,11 +1172,11 @@ headers_check: headers_install
|
||||||
|
|
||||||
PHONY += kselftest
|
PHONY += kselftest
|
||||||
kselftest:
|
kselftest:
|
||||||
$(Q)$(MAKE) -C tools/testing/selftests run_tests
|
$(Q)$(MAKE) -C $(srctree)/tools/testing/selftests run_tests
|
||||||
|
|
||||||
PHONY += kselftest-clean
|
PHONY += kselftest-clean
|
||||||
kselftest-clean:
|
kselftest-clean:
|
||||||
$(Q)$(MAKE) -C tools/testing/selftests clean
|
$(Q)$(MAKE) -C $(srctree)/tools/testing/selftests clean
|
||||||
|
|
||||||
PHONY += kselftest-merge
|
PHONY += kselftest-merge
|
||||||
kselftest-merge:
|
kselftest-merge:
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/mm_types.h>
|
#include <linux/mm_types.h>
|
||||||
|
#include <linux/sched.h>
|
||||||
|
|
||||||
#include <asm/machvec.h>
|
#include <asm/machvec.h>
|
||||||
#include <asm/compiler.h>
|
#include <asm/compiler.h>
|
||||||
|
|
|
@ -78,9 +78,6 @@ struct task_struct;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define copy_segments(tsk, mm) do { } while (0)
|
|
||||||
#define release_segments(mm) do { } while (0)
|
|
||||||
|
|
||||||
#define KSTK_EIP(tsk) (task_pt_regs(tsk)->ret)
|
#define KSTK_EIP(tsk) (task_pt_regs(tsk)->ret)
|
||||||
#define KSTK_ESP(tsk) (task_pt_regs(tsk)->sp)
|
#define KSTK_ESP(tsk) (task_pt_regs(tsk)->sp)
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,8 @@
|
||||||
phy1 = &usb1_phy;
|
phy1 = &usb1_phy;
|
||||||
ethernet0 = &cpsw_emac0;
|
ethernet0 = &cpsw_emac0;
|
||||||
ethernet1 = &cpsw_emac1;
|
ethernet1 = &cpsw_emac1;
|
||||||
|
spi0 = &spi0;
|
||||||
|
spi1 = &spi1;
|
||||||
};
|
};
|
||||||
|
|
||||||
cpus {
|
cpus {
|
||||||
|
|
|
@ -388,6 +388,7 @@
|
||||||
pinctrl-0 = <&cpsw_default>;
|
pinctrl-0 = <&cpsw_default>;
|
||||||
pinctrl-1 = <&cpsw_sleep>;
|
pinctrl-1 = <&cpsw_sleep>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
slaves = <1>;
|
||||||
};
|
};
|
||||||
|
|
||||||
&davinci_mdio {
|
&davinci_mdio {
|
||||||
|
@ -402,11 +403,6 @@
|
||||||
phy-mode = "rmii";
|
phy-mode = "rmii";
|
||||||
};
|
};
|
||||||
|
|
||||||
&cpsw_emac1 {
|
|
||||||
phy_id = <&davinci_mdio>, <1>;
|
|
||||||
phy-mode = "rmii";
|
|
||||||
};
|
|
||||||
|
|
||||||
&phy_sel {
|
&phy_sel {
|
||||||
rmii-clock-ext;
|
rmii-clock-ext;
|
||||||
};
|
};
|
||||||
|
|
|
@ -67,7 +67,10 @@
|
||||||
|
|
||||||
usb1: ohci@00400000 {
|
usb1: ohci@00400000 {
|
||||||
num-ports = <3>;
|
num-ports = <3>;
|
||||||
atmel,vbus-gpio = <&pioA PIN_PA10 GPIO_ACTIVE_HIGH>;
|
atmel,vbus-gpio = <0 /* &pioA PIN_PD20 GPIO_ACTIVE_HIGH */
|
||||||
|
&pioA PIN_PA27 GPIO_ACTIVE_HIGH
|
||||||
|
0
|
||||||
|
>;
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&pinctrl_usb_default>;
|
pinctrl-0 = <&pinctrl_usb_default>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
@ -120,7 +123,7 @@
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&pinctrl_mikrobus2_uart>;
|
pinctrl-0 = <&pinctrl_mikrobus2_uart>;
|
||||||
atmel,use-dma-rx;
|
atmel,use-dma-rx;
|
||||||
atmel-use-dma-tx;
|
atmel,use-dma-tx;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -178,7 +181,7 @@
|
||||||
uart4: serial@fc00c000 {
|
uart4: serial@fc00c000 {
|
||||||
atmel,use-dma-rx;
|
atmel,use-dma-rx;
|
||||||
atmel,use-dma-tx;
|
atmel,use-dma-tx;
|
||||||
pinctrl-name = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&pinctrl_mikrobus1_uart>;
|
pinctrl-0 = <&pinctrl_mikrobus1_uart>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
@ -330,7 +333,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
pinctrl_led_gpio_default: led_gpio_default {
|
pinctrl_led_gpio_default: led_gpio_default {
|
||||||
pinmux = <PIN_PA27__GPIO>,
|
pinmux = <PIN_PA10__GPIO>,
|
||||||
<PIN_PB1__GPIO>,
|
<PIN_PB1__GPIO>,
|
||||||
<PIN_PA31__GPIO>;
|
<PIN_PA31__GPIO>;
|
||||||
bias-pull-up;
|
bias-pull-up;
|
||||||
|
@ -396,7 +399,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
pinctrl_usb_default: usb_default {
|
pinctrl_usb_default: usb_default {
|
||||||
pinmux = <PIN_PA10__GPIO>,
|
pinmux = <PIN_PA27__GPIO>,
|
||||||
<PIN_PD19__GPIO>;
|
<PIN_PD19__GPIO>;
|
||||||
bias-disable;
|
bias-disable;
|
||||||
};
|
};
|
||||||
|
@ -520,17 +523,17 @@
|
||||||
|
|
||||||
red {
|
red {
|
||||||
label = "red";
|
label = "red";
|
||||||
gpios = <&pioA PIN_PA27 GPIO_ACTIVE_LOW>;
|
gpios = <&pioA PIN_PA10 GPIO_ACTIVE_HIGH>;
|
||||||
};
|
};
|
||||||
|
|
||||||
green {
|
green {
|
||||||
label = "green";
|
label = "green";
|
||||||
gpios = <&pioA PIN_PB1 GPIO_ACTIVE_LOW>;
|
gpios = <&pioA PIN_PB1 GPIO_ACTIVE_HIGH>;
|
||||||
};
|
};
|
||||||
|
|
||||||
blue {
|
blue {
|
||||||
label = "blue";
|
label = "blue";
|
||||||
gpios = <&pioA PIN_PA31 GPIO_ACTIVE_LOW>;
|
gpios = <&pioA PIN_PA31 GPIO_ACTIVE_HIGH>;
|
||||||
linux,default-trigger = "heartbeat";
|
linux,default-trigger = "heartbeat";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -15,6 +15,13 @@
|
||||||
compatible = "ti,da850-evm", "ti,da850";
|
compatible = "ti,da850-evm", "ti,da850";
|
||||||
model = "DA850/AM1808/OMAP-L138 EVM";
|
model = "DA850/AM1808/OMAP-L138 EVM";
|
||||||
|
|
||||||
|
aliases {
|
||||||
|
serial0 = &serial0;
|
||||||
|
serial1 = &serial1;
|
||||||
|
serial2 = &serial2;
|
||||||
|
ethernet0 = ð0;
|
||||||
|
};
|
||||||
|
|
||||||
soc@1c00000 {
|
soc@1c00000 {
|
||||||
pmx_core: pinmux@14120 {
|
pmx_core: pinmux@14120 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
|
@ -1817,6 +1817,8 @@
|
||||||
clocks = <&abe_24m_fclk>, <&abe_sys_clk_div>, <&func_24m_clk>, <&atl_clkin3_ck>, <&atl_clkin2_ck>, <&atl_clkin1_ck>, <&atl_clkin0_ck>, <&sys_clkin2>, <&ref_clkin0_ck>, <&ref_clkin1_ck>, <&ref_clkin2_ck>, <&ref_clkin3_ck>, <&mlb_clk>, <&mlbp_clk>;
|
clocks = <&abe_24m_fclk>, <&abe_sys_clk_div>, <&func_24m_clk>, <&atl_clkin3_ck>, <&atl_clkin2_ck>, <&atl_clkin1_ck>, <&atl_clkin0_ck>, <&sys_clkin2>, <&ref_clkin0_ck>, <&ref_clkin1_ck>, <&ref_clkin2_ck>, <&ref_clkin3_ck>, <&mlb_clk>, <&mlbp_clk>;
|
||||||
ti,bit-shift = <24>;
|
ti,bit-shift = <24>;
|
||||||
reg = <0x1868>;
|
reg = <0x1868>;
|
||||||
|
assigned-clocks = <&mcasp3_ahclkx_mux>;
|
||||||
|
assigned-clock-parents = <&abe_24m_fclk>;
|
||||||
};
|
};
|
||||||
|
|
||||||
mcasp3_aux_gfclk_mux: mcasp3_aux_gfclk_mux@1868 {
|
mcasp3_aux_gfclk_mux: mcasp3_aux_gfclk_mux@1868 {
|
||||||
|
|
|
@ -144,15 +144,6 @@
|
||||||
io-channel-names = "temp", "bsi", "vbat";
|
io-channel-names = "temp", "bsi", "vbat";
|
||||||
};
|
};
|
||||||
|
|
||||||
rear_camera: camera@0 {
|
|
||||||
compatible = "linux,camera";
|
|
||||||
|
|
||||||
module {
|
|
||||||
model = "TCM8341MD";
|
|
||||||
sensor = <&cam1>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
pwm9: dmtimer-pwm {
|
pwm9: dmtimer-pwm {
|
||||||
compatible = "ti,omap-dmtimer-pwm";
|
compatible = "ti,omap-dmtimer-pwm";
|
||||||
#pwm-cells = <3>;
|
#pwm-cells = <3>;
|
||||||
|
@ -189,10 +180,8 @@
|
||||||
clock-lanes = <1>;
|
clock-lanes = <1>;
|
||||||
data-lanes = <0>;
|
data-lanes = <0>;
|
||||||
lane-polarity = <0 0>;
|
lane-polarity = <0 0>;
|
||||||
clock-inv = <0>;
|
|
||||||
/* Select strobe = <1> for back camera, <0> for front camera */
|
/* Select strobe = <1> for back camera, <0> for front camera */
|
||||||
strobe = <1>;
|
strobe = <1>;
|
||||||
crc = <0>;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -267,15 +267,19 @@
|
||||||
clock-frequency = <400000>;
|
clock-frequency = <400000>;
|
||||||
|
|
||||||
as3645a@30 {
|
as3645a@30 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
reg = <0x30>;
|
reg = <0x30>;
|
||||||
compatible = "ams,as3645a";
|
compatible = "ams,as3645a";
|
||||||
flash {
|
flash@0 {
|
||||||
|
reg = <0x0>;
|
||||||
flash-timeout-us = <150000>;
|
flash-timeout-us = <150000>;
|
||||||
flash-max-microamp = <320000>;
|
flash-max-microamp = <320000>;
|
||||||
led-max-microamp = <60000>;
|
led-max-microamp = <60000>;
|
||||||
peak-current-limit = <1750000>;
|
ams,input-max-microamp = <1750000>;
|
||||||
};
|
};
|
||||||
indicator {
|
indicator@1 {
|
||||||
|
reg = <0x1>;
|
||||||
led-max-microamp = <10000>;
|
led-max-microamp = <10000>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -47,6 +47,7 @@
|
||||||
|
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
#include "stm32f429.dtsi"
|
#include "stm32f429.dtsi"
|
||||||
|
#include "stm32f429-pinctrl.dtsi"
|
||||||
#include <dt-bindings/input/input.h>
|
#include <dt-bindings/input/input.h>
|
||||||
#include <dt-bindings/gpio/gpio.h>
|
#include <dt-bindings/gpio/gpio.h>
|
||||||
|
|
||||||
|
@ -202,10 +203,8 @@
|
||||||
stmpe1600: stmpe1600@42 {
|
stmpe1600: stmpe1600@42 {
|
||||||
compatible = "st,stmpe1600";
|
compatible = "st,stmpe1600";
|
||||||
reg = <0x42>;
|
reg = <0x42>;
|
||||||
irq-gpio = <&gpioi 8 0>;
|
|
||||||
irq-trigger = <3>;
|
|
||||||
interrupts = <8 3>;
|
interrupts = <8 3>;
|
||||||
interrupt-parent = <&exti>;
|
interrupt-parent = <&gpioi>;
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
wakeup-source;
|
wakeup-source;
|
||||||
|
|
||||||
|
|
343
arch/arm/boot/dts/stm32f4-pinctrl.dtsi
Normal file
343
arch/arm/boot/dts/stm32f4-pinctrl.dtsi
Normal file
|
@ -0,0 +1,343 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2017 - Alexandre Torgue <alexandre.torgue@st.com>
|
||||||
|
*
|
||||||
|
* This file is dual-licensed: you can use it either under the terms
|
||||||
|
* of the GPL or the X11 license, at your option. Note that this dual
|
||||||
|
* licensing only applies to this file, and not this project as a
|
||||||
|
* whole.
|
||||||
|
*
|
||||||
|
* a) This file is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This file is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* Or, alternatively,
|
||||||
|
*
|
||||||
|
* b) Permission is hereby granted, free of charge, to any person
|
||||||
|
* obtaining a copy of this software and associated documentation
|
||||||
|
* files (the "Software"), to deal in the Software without
|
||||||
|
* restriction, including without limitation the rights to use,
|
||||||
|
* copy, modify, merge, publish, distribute, sublicense, and/or
|
||||||
|
* sell copies of the Software, and to permit persons to whom the
|
||||||
|
* Software is furnished to do so, subject to the following
|
||||||
|
* conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be
|
||||||
|
* included in all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||||
|
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||||
|
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
* OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <dt-bindings/pinctrl/stm32f429-pinfunc.h>
|
||||||
|
#include <dt-bindings/mfd/stm32f4-rcc.h>
|
||||||
|
|
||||||
|
/ {
|
||||||
|
soc {
|
||||||
|
pinctrl: pin-controller {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
ranges = <0 0x40020000 0x3000>;
|
||||||
|
interrupt-parent = <&exti>;
|
||||||
|
st,syscfg = <&syscfg 0x8>;
|
||||||
|
pins-are-numbered;
|
||||||
|
|
||||||
|
gpioa: gpio@40020000 {
|
||||||
|
gpio-controller;
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
interrupt-controller;
|
||||||
|
#interrupt-cells = <2>;
|
||||||
|
reg = <0x0 0x400>;
|
||||||
|
clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOA)>;
|
||||||
|
st,bank-name = "GPIOA";
|
||||||
|
};
|
||||||
|
|
||||||
|
gpiob: gpio@40020400 {
|
||||||
|
gpio-controller;
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
interrupt-controller;
|
||||||
|
#interrupt-cells = <2>;
|
||||||
|
reg = <0x400 0x400>;
|
||||||
|
clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOB)>;
|
||||||
|
st,bank-name = "GPIOB";
|
||||||
|
};
|
||||||
|
|
||||||
|
gpioc: gpio@40020800 {
|
||||||
|
gpio-controller;
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
interrupt-controller;
|
||||||
|
#interrupt-cells = <2>;
|
||||||
|
reg = <0x800 0x400>;
|
||||||
|
clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOC)>;
|
||||||
|
st,bank-name = "GPIOC";
|
||||||
|
};
|
||||||
|
|
||||||
|
gpiod: gpio@40020c00 {
|
||||||
|
gpio-controller;
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
interrupt-controller;
|
||||||
|
#interrupt-cells = <2>;
|
||||||
|
reg = <0xc00 0x400>;
|
||||||
|
clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOD)>;
|
||||||
|
st,bank-name = "GPIOD";
|
||||||
|
};
|
||||||
|
|
||||||
|
gpioe: gpio@40021000 {
|
||||||
|
gpio-controller;
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
interrupt-controller;
|
||||||
|
#interrupt-cells = <2>;
|
||||||
|
reg = <0x1000 0x400>;
|
||||||
|
clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOE)>;
|
||||||
|
st,bank-name = "GPIOE";
|
||||||
|
};
|
||||||
|
|
||||||
|
gpiof: gpio@40021400 {
|
||||||
|
gpio-controller;
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
interrupt-controller;
|
||||||
|
#interrupt-cells = <2>;
|
||||||
|
reg = <0x1400 0x400>;
|
||||||
|
clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOF)>;
|
||||||
|
st,bank-name = "GPIOF";
|
||||||
|
};
|
||||||
|
|
||||||
|
gpiog: gpio@40021800 {
|
||||||
|
gpio-controller;
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
interrupt-controller;
|
||||||
|
#interrupt-cells = <2>;
|
||||||
|
reg = <0x1800 0x400>;
|
||||||
|
clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOG)>;
|
||||||
|
st,bank-name = "GPIOG";
|
||||||
|
};
|
||||||
|
|
||||||
|
gpioh: gpio@40021c00 {
|
||||||
|
gpio-controller;
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
interrupt-controller;
|
||||||
|
#interrupt-cells = <2>;
|
||||||
|
reg = <0x1c00 0x400>;
|
||||||
|
clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOH)>;
|
||||||
|
st,bank-name = "GPIOH";
|
||||||
|
};
|
||||||
|
|
||||||
|
gpioi: gpio@40022000 {
|
||||||
|
gpio-controller;
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
interrupt-controller;
|
||||||
|
#interrupt-cells = <2>;
|
||||||
|
reg = <0x2000 0x400>;
|
||||||
|
clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOI)>;
|
||||||
|
st,bank-name = "GPIOI";
|
||||||
|
};
|
||||||
|
|
||||||
|
gpioj: gpio@40022400 {
|
||||||
|
gpio-controller;
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
interrupt-controller;
|
||||||
|
#interrupt-cells = <2>;
|
||||||
|
reg = <0x2400 0x400>;
|
||||||
|
clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOJ)>;
|
||||||
|
st,bank-name = "GPIOJ";
|
||||||
|
};
|
||||||
|
|
||||||
|
gpiok: gpio@40022800 {
|
||||||
|
gpio-controller;
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
interrupt-controller;
|
||||||
|
#interrupt-cells = <2>;
|
||||||
|
reg = <0x2800 0x400>;
|
||||||
|
clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOK)>;
|
||||||
|
st,bank-name = "GPIOK";
|
||||||
|
};
|
||||||
|
|
||||||
|
usart1_pins_a: usart1@0 {
|
||||||
|
pins1 {
|
||||||
|
pinmux = <STM32F429_PA9_FUNC_USART1_TX>;
|
||||||
|
bias-disable;
|
||||||
|
drive-push-pull;
|
||||||
|
slew-rate = <0>;
|
||||||
|
};
|
||||||
|
pins2 {
|
||||||
|
pinmux = <STM32F429_PA10_FUNC_USART1_RX>;
|
||||||
|
bias-disable;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
usart3_pins_a: usart3@0 {
|
||||||
|
pins1 {
|
||||||
|
pinmux = <STM32F429_PB10_FUNC_USART3_TX>;
|
||||||
|
bias-disable;
|
||||||
|
drive-push-pull;
|
||||||
|
slew-rate = <0>;
|
||||||
|
};
|
||||||
|
pins2 {
|
||||||
|
pinmux = <STM32F429_PB11_FUNC_USART3_RX>;
|
||||||
|
bias-disable;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
usbotg_fs_pins_a: usbotg_fs@0 {
|
||||||
|
pins {
|
||||||
|
pinmux = <STM32F429_PA10_FUNC_OTG_FS_ID>,
|
||||||
|
<STM32F429_PA11_FUNC_OTG_FS_DM>,
|
||||||
|
<STM32F429_PA12_FUNC_OTG_FS_DP>;
|
||||||
|
bias-disable;
|
||||||
|
drive-push-pull;
|
||||||
|
slew-rate = <2>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
usbotg_fs_pins_b: usbotg_fs@1 {
|
||||||
|
pins {
|
||||||
|
pinmux = <STM32F429_PB12_FUNC_OTG_HS_ID>,
|
||||||
|
<STM32F429_PB14_FUNC_OTG_HS_DM>,
|
||||||
|
<STM32F429_PB15_FUNC_OTG_HS_DP>;
|
||||||
|
bias-disable;
|
||||||
|
drive-push-pull;
|
||||||
|
slew-rate = <2>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
usbotg_hs_pins_a: usbotg_hs@0 {
|
||||||
|
pins {
|
||||||
|
pinmux = <STM32F429_PH4_FUNC_OTG_HS_ULPI_NXT>,
|
||||||
|
<STM32F429_PI11_FUNC_OTG_HS_ULPI_DIR>,
|
||||||
|
<STM32F429_PC0_FUNC_OTG_HS_ULPI_STP>,
|
||||||
|
<STM32F429_PA5_FUNC_OTG_HS_ULPI_CK>,
|
||||||
|
<STM32F429_PA3_FUNC_OTG_HS_ULPI_D0>,
|
||||||
|
<STM32F429_PB0_FUNC_OTG_HS_ULPI_D1>,
|
||||||
|
<STM32F429_PB1_FUNC_OTG_HS_ULPI_D2>,
|
||||||
|
<STM32F429_PB10_FUNC_OTG_HS_ULPI_D3>,
|
||||||
|
<STM32F429_PB11_FUNC_OTG_HS_ULPI_D4>,
|
||||||
|
<STM32F429_PB12_FUNC_OTG_HS_ULPI_D5>,
|
||||||
|
<STM32F429_PB13_FUNC_OTG_HS_ULPI_D6>,
|
||||||
|
<STM32F429_PB5_FUNC_OTG_HS_ULPI_D7>;
|
||||||
|
bias-disable;
|
||||||
|
drive-push-pull;
|
||||||
|
slew-rate = <2>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
ethernet_mii: mii@0 {
|
||||||
|
pins {
|
||||||
|
pinmux = <STM32F429_PG13_FUNC_ETH_MII_TXD0_ETH_RMII_TXD0>,
|
||||||
|
<STM32F429_PG14_FUNC_ETH_MII_TXD1_ETH_RMII_TXD1>,
|
||||||
|
<STM32F429_PC2_FUNC_ETH_MII_TXD2>,
|
||||||
|
<STM32F429_PB8_FUNC_ETH_MII_TXD3>,
|
||||||
|
<STM32F429_PC3_FUNC_ETH_MII_TX_CLK>,
|
||||||
|
<STM32F429_PG11_FUNC_ETH_MII_TX_EN_ETH_RMII_TX_EN>,
|
||||||
|
<STM32F429_PA2_FUNC_ETH_MDIO>,
|
||||||
|
<STM32F429_PC1_FUNC_ETH_MDC>,
|
||||||
|
<STM32F429_PA1_FUNC_ETH_MII_RX_CLK_ETH_RMII_REF_CLK>,
|
||||||
|
<STM32F429_PA7_FUNC_ETH_MII_RX_DV_ETH_RMII_CRS_DV>,
|
||||||
|
<STM32F429_PC4_FUNC_ETH_MII_RXD0_ETH_RMII_RXD0>,
|
||||||
|
<STM32F429_PC5_FUNC_ETH_MII_RXD1_ETH_RMII_RXD1>,
|
||||||
|
<STM32F429_PH6_FUNC_ETH_MII_RXD2>,
|
||||||
|
<STM32F429_PH7_FUNC_ETH_MII_RXD3>;
|
||||||
|
slew-rate = <2>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
adc3_in8_pin: adc@200 {
|
||||||
|
pins {
|
||||||
|
pinmux = <STM32F429_PF10_FUNC_ANALOG>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
pwm1_pins: pwm@1 {
|
||||||
|
pins {
|
||||||
|
pinmux = <STM32F429_PA8_FUNC_TIM1_CH1>,
|
||||||
|
<STM32F429_PB13_FUNC_TIM1_CH1N>,
|
||||||
|
<STM32F429_PB12_FUNC_TIM1_BKIN>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
pwm3_pins: pwm@3 {
|
||||||
|
pins {
|
||||||
|
pinmux = <STM32F429_PB4_FUNC_TIM3_CH1>,
|
||||||
|
<STM32F429_PB5_FUNC_TIM3_CH2>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c1_pins: i2c1@0 {
|
||||||
|
pins {
|
||||||
|
pinmux = <STM32F429_PB9_FUNC_I2C1_SDA>,
|
||||||
|
<STM32F429_PB6_FUNC_I2C1_SCL>;
|
||||||
|
bias-disable;
|
||||||
|
drive-open-drain;
|
||||||
|
slew-rate = <3>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
ltdc_pins: ltdc@0 {
|
||||||
|
pins {
|
||||||
|
pinmux = <STM32F429_PI12_FUNC_LCD_HSYNC>,
|
||||||
|
<STM32F429_PI13_FUNC_LCD_VSYNC>,
|
||||||
|
<STM32F429_PI14_FUNC_LCD_CLK>,
|
||||||
|
<STM32F429_PI15_FUNC_LCD_R0>,
|
||||||
|
<STM32F429_PJ0_FUNC_LCD_R1>,
|
||||||
|
<STM32F429_PJ1_FUNC_LCD_R2>,
|
||||||
|
<STM32F429_PJ2_FUNC_LCD_R3>,
|
||||||
|
<STM32F429_PJ3_FUNC_LCD_R4>,
|
||||||
|
<STM32F429_PJ4_FUNC_LCD_R5>,
|
||||||
|
<STM32F429_PJ5_FUNC_LCD_R6>,
|
||||||
|
<STM32F429_PJ6_FUNC_LCD_R7>,
|
||||||
|
<STM32F429_PJ7_FUNC_LCD_G0>,
|
||||||
|
<STM32F429_PJ8_FUNC_LCD_G1>,
|
||||||
|
<STM32F429_PJ9_FUNC_LCD_G2>,
|
||||||
|
<STM32F429_PJ10_FUNC_LCD_G3>,
|
||||||
|
<STM32F429_PJ11_FUNC_LCD_G4>,
|
||||||
|
<STM32F429_PJ12_FUNC_LCD_B0>,
|
||||||
|
<STM32F429_PJ13_FUNC_LCD_B1>,
|
||||||
|
<STM32F429_PJ14_FUNC_LCD_B2>,
|
||||||
|
<STM32F429_PJ15_FUNC_LCD_B3>,
|
||||||
|
<STM32F429_PK0_FUNC_LCD_G5>,
|
||||||
|
<STM32F429_PK1_FUNC_LCD_G6>,
|
||||||
|
<STM32F429_PK2_FUNC_LCD_G7>,
|
||||||
|
<STM32F429_PK3_FUNC_LCD_B4>,
|
||||||
|
<STM32F429_PK4_FUNC_LCD_B5>,
|
||||||
|
<STM32F429_PK5_FUNC_LCD_B6>,
|
||||||
|
<STM32F429_PK6_FUNC_LCD_B7>,
|
||||||
|
<STM32F429_PK7_FUNC_LCD_DE>;
|
||||||
|
slew-rate = <2>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
dcmi_pins: dcmi@0 {
|
||||||
|
pins {
|
||||||
|
pinmux = <STM32F429_PA4_FUNC_DCMI_HSYNC>,
|
||||||
|
<STM32F429_PB7_FUNC_DCMI_VSYNC>,
|
||||||
|
<STM32F429_PA6_FUNC_DCMI_PIXCLK>,
|
||||||
|
<STM32F429_PC6_FUNC_DCMI_D0>,
|
||||||
|
<STM32F429_PC7_FUNC_DCMI_D1>,
|
||||||
|
<STM32F429_PC8_FUNC_DCMI_D2>,
|
||||||
|
<STM32F429_PC9_FUNC_DCMI_D3>,
|
||||||
|
<STM32F429_PC11_FUNC_DCMI_D4>,
|
||||||
|
<STM32F429_PD3_FUNC_DCMI_D5>,
|
||||||
|
<STM32F429_PB8_FUNC_DCMI_D6>,
|
||||||
|
<STM32F429_PE6_FUNC_DCMI_D7>,
|
||||||
|
<STM32F429_PC10_FUNC_DCMI_D8>,
|
||||||
|
<STM32F429_PC12_FUNC_DCMI_D9>,
|
||||||
|
<STM32F429_PD6_FUNC_DCMI_D10>,
|
||||||
|
<STM32F429_PD2_FUNC_DCMI_D11>;
|
||||||
|
bias-disable;
|
||||||
|
drive-push-pull;
|
||||||
|
slew-rate = <3>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
|
@ -47,6 +47,7 @@
|
||||||
|
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
#include "stm32f429.dtsi"
|
#include "stm32f429.dtsi"
|
||||||
|
#include "stm32f429-pinctrl.dtsi"
|
||||||
#include <dt-bindings/input/input.h>
|
#include <dt-bindings/input/input.h>
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
|
|
95
arch/arm/boot/dts/stm32f429-pinctrl.dtsi
Normal file
95
arch/arm/boot/dts/stm32f429-pinctrl.dtsi
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2017 - Alexandre Torgue <alexandre.torgue@st.com>
|
||||||
|
*
|
||||||
|
* This file is dual-licensed: you can use it either under the terms
|
||||||
|
* of the GPL or the X11 license, at your option. Note that this dual
|
||||||
|
* licensing only applies to this file, and not this project as a
|
||||||
|
* whole.
|
||||||
|
*
|
||||||
|
* a) This file is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This file is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* Or, alternatively,
|
||||||
|
*
|
||||||
|
* b) Permission is hereby granted, free of charge, to any person
|
||||||
|
* obtaining a copy of this software and associated documentation
|
||||||
|
* files (the "Software"), to deal in the Software without
|
||||||
|
* restriction, including without limitation the rights to use,
|
||||||
|
* copy, modify, merge, publish, distribute, sublicense, and/or
|
||||||
|
* sell copies of the Software, and to permit persons to whom the
|
||||||
|
* Software is furnished to do so, subject to the following
|
||||||
|
* conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be
|
||||||
|
* included in all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||||
|
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||||
|
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
* OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "stm32f4-pinctrl.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
soc {
|
||||||
|
pinctrl: pin-controller {
|
||||||
|
compatible = "st,stm32f429-pinctrl";
|
||||||
|
|
||||||
|
gpioa: gpio@40020000 {
|
||||||
|
gpio-ranges = <&pinctrl 0 0 16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpiob: gpio@40020400 {
|
||||||
|
gpio-ranges = <&pinctrl 0 16 16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpioc: gpio@40020800 {
|
||||||
|
gpio-ranges = <&pinctrl 0 32 16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpiod: gpio@40020c00 {
|
||||||
|
gpio-ranges = <&pinctrl 0 48 16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpioe: gpio@40021000 {
|
||||||
|
gpio-ranges = <&pinctrl 0 64 16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpiof: gpio@40021400 {
|
||||||
|
gpio-ranges = <&pinctrl 0 80 16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpiog: gpio@40021800 {
|
||||||
|
gpio-ranges = <&pinctrl 0 96 16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpioh: gpio@40021c00 {
|
||||||
|
gpio-ranges = <&pinctrl 0 112 16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpioi: gpio@40022000 {
|
||||||
|
gpio-ranges = <&pinctrl 0 128 16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpioj: gpio@40022400 {
|
||||||
|
gpio-ranges = <&pinctrl 0 144 16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpiok: gpio@40022800 {
|
||||||
|
gpio-ranges = <&pinctrl 0 160 8>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
|
@ -47,7 +47,6 @@
|
||||||
|
|
||||||
#include "skeleton.dtsi"
|
#include "skeleton.dtsi"
|
||||||
#include "armv7-m.dtsi"
|
#include "armv7-m.dtsi"
|
||||||
#include <dt-bindings/pinctrl/stm32f429-pinfunc.h>
|
|
||||||
#include <dt-bindings/clock/stm32fx-clock.h>
|
#include <dt-bindings/clock/stm32fx-clock.h>
|
||||||
#include <dt-bindings/mfd/stm32f4-rcc.h>
|
#include <dt-bindings/mfd/stm32f4-rcc.h>
|
||||||
|
|
||||||
|
@ -591,302 +590,6 @@
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
pinctrl: pin-controller {
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <1>;
|
|
||||||
compatible = "st,stm32f429-pinctrl";
|
|
||||||
ranges = <0 0x40020000 0x3000>;
|
|
||||||
interrupt-parent = <&exti>;
|
|
||||||
st,syscfg = <&syscfg 0x8>;
|
|
||||||
pins-are-numbered;
|
|
||||||
|
|
||||||
gpioa: gpio@40020000 {
|
|
||||||
gpio-controller;
|
|
||||||
#gpio-cells = <2>;
|
|
||||||
interrupt-controller;
|
|
||||||
#interrupt-cells = <2>;
|
|
||||||
reg = <0x0 0x400>;
|
|
||||||
clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOA)>;
|
|
||||||
st,bank-name = "GPIOA";
|
|
||||||
};
|
|
||||||
|
|
||||||
gpiob: gpio@40020400 {
|
|
||||||
gpio-controller;
|
|
||||||
#gpio-cells = <2>;
|
|
||||||
interrupt-controller;
|
|
||||||
#interrupt-cells = <2>;
|
|
||||||
reg = <0x400 0x400>;
|
|
||||||
clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOB)>;
|
|
||||||
st,bank-name = "GPIOB";
|
|
||||||
};
|
|
||||||
|
|
||||||
gpioc: gpio@40020800 {
|
|
||||||
gpio-controller;
|
|
||||||
#gpio-cells = <2>;
|
|
||||||
interrupt-controller;
|
|
||||||
#interrupt-cells = <2>;
|
|
||||||
reg = <0x800 0x400>;
|
|
||||||
clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOC)>;
|
|
||||||
st,bank-name = "GPIOC";
|
|
||||||
};
|
|
||||||
|
|
||||||
gpiod: gpio@40020c00 {
|
|
||||||
gpio-controller;
|
|
||||||
#gpio-cells = <2>;
|
|
||||||
interrupt-controller;
|
|
||||||
#interrupt-cells = <2>;
|
|
||||||
reg = <0xc00 0x400>;
|
|
||||||
clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOD)>;
|
|
||||||
st,bank-name = "GPIOD";
|
|
||||||
};
|
|
||||||
|
|
||||||
gpioe: gpio@40021000 {
|
|
||||||
gpio-controller;
|
|
||||||
#gpio-cells = <2>;
|
|
||||||
interrupt-controller;
|
|
||||||
#interrupt-cells = <2>;
|
|
||||||
reg = <0x1000 0x400>;
|
|
||||||
clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOE)>;
|
|
||||||
st,bank-name = "GPIOE";
|
|
||||||
};
|
|
||||||
|
|
||||||
gpiof: gpio@40021400 {
|
|
||||||
gpio-controller;
|
|
||||||
#gpio-cells = <2>;
|
|
||||||
interrupt-controller;
|
|
||||||
#interrupt-cells = <2>;
|
|
||||||
reg = <0x1400 0x400>;
|
|
||||||
clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOF)>;
|
|
||||||
st,bank-name = "GPIOF";
|
|
||||||
};
|
|
||||||
|
|
||||||
gpiog: gpio@40021800 {
|
|
||||||
gpio-controller;
|
|
||||||
#gpio-cells = <2>;
|
|
||||||
interrupt-controller;
|
|
||||||
#interrupt-cells = <2>;
|
|
||||||
reg = <0x1800 0x400>;
|
|
||||||
clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOG)>;
|
|
||||||
st,bank-name = "GPIOG";
|
|
||||||
};
|
|
||||||
|
|
||||||
gpioh: gpio@40021c00 {
|
|
||||||
gpio-controller;
|
|
||||||
#gpio-cells = <2>;
|
|
||||||
interrupt-controller;
|
|
||||||
#interrupt-cells = <2>;
|
|
||||||
reg = <0x1c00 0x400>;
|
|
||||||
clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOH)>;
|
|
||||||
st,bank-name = "GPIOH";
|
|
||||||
};
|
|
||||||
|
|
||||||
gpioi: gpio@40022000 {
|
|
||||||
gpio-controller;
|
|
||||||
#gpio-cells = <2>;
|
|
||||||
interrupt-controller;
|
|
||||||
#interrupt-cells = <2>;
|
|
||||||
reg = <0x2000 0x400>;
|
|
||||||
clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOI)>;
|
|
||||||
st,bank-name = "GPIOI";
|
|
||||||
};
|
|
||||||
|
|
||||||
gpioj: gpio@40022400 {
|
|
||||||
gpio-controller;
|
|
||||||
#gpio-cells = <2>;
|
|
||||||
interrupt-controller;
|
|
||||||
#interrupt-cells = <2>;
|
|
||||||
reg = <0x2400 0x400>;
|
|
||||||
clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOJ)>;
|
|
||||||
st,bank-name = "GPIOJ";
|
|
||||||
};
|
|
||||||
|
|
||||||
gpiok: gpio@40022800 {
|
|
||||||
gpio-controller;
|
|
||||||
#gpio-cells = <2>;
|
|
||||||
interrupt-controller;
|
|
||||||
#interrupt-cells = <2>;
|
|
||||||
reg = <0x2800 0x400>;
|
|
||||||
clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOK)>;
|
|
||||||
st,bank-name = "GPIOK";
|
|
||||||
};
|
|
||||||
|
|
||||||
usart1_pins_a: usart1@0 {
|
|
||||||
pins1 {
|
|
||||||
pinmux = <STM32F429_PA9_FUNC_USART1_TX>;
|
|
||||||
bias-disable;
|
|
||||||
drive-push-pull;
|
|
||||||
slew-rate = <0>;
|
|
||||||
};
|
|
||||||
pins2 {
|
|
||||||
pinmux = <STM32F429_PA10_FUNC_USART1_RX>;
|
|
||||||
bias-disable;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
usart3_pins_a: usart3@0 {
|
|
||||||
pins1 {
|
|
||||||
pinmux = <STM32F429_PB10_FUNC_USART3_TX>;
|
|
||||||
bias-disable;
|
|
||||||
drive-push-pull;
|
|
||||||
slew-rate = <0>;
|
|
||||||
};
|
|
||||||
pins2 {
|
|
||||||
pinmux = <STM32F429_PB11_FUNC_USART3_RX>;
|
|
||||||
bias-disable;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
usbotg_fs_pins_a: usbotg_fs@0 {
|
|
||||||
pins {
|
|
||||||
pinmux = <STM32F429_PA10_FUNC_OTG_FS_ID>,
|
|
||||||
<STM32F429_PA11_FUNC_OTG_FS_DM>,
|
|
||||||
<STM32F429_PA12_FUNC_OTG_FS_DP>;
|
|
||||||
bias-disable;
|
|
||||||
drive-push-pull;
|
|
||||||
slew-rate = <2>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
usbotg_fs_pins_b: usbotg_fs@1 {
|
|
||||||
pins {
|
|
||||||
pinmux = <STM32F429_PB12_FUNC_OTG_HS_ID>,
|
|
||||||
<STM32F429_PB14_FUNC_OTG_HS_DM>,
|
|
||||||
<STM32F429_PB15_FUNC_OTG_HS_DP>;
|
|
||||||
bias-disable;
|
|
||||||
drive-push-pull;
|
|
||||||
slew-rate = <2>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
usbotg_hs_pins_a: usbotg_hs@0 {
|
|
||||||
pins {
|
|
||||||
pinmux = <STM32F429_PH4_FUNC_OTG_HS_ULPI_NXT>,
|
|
||||||
<STM32F429_PI11_FUNC_OTG_HS_ULPI_DIR>,
|
|
||||||
<STM32F429_PC0_FUNC_OTG_HS_ULPI_STP>,
|
|
||||||
<STM32F429_PA5_FUNC_OTG_HS_ULPI_CK>,
|
|
||||||
<STM32F429_PA3_FUNC_OTG_HS_ULPI_D0>,
|
|
||||||
<STM32F429_PB0_FUNC_OTG_HS_ULPI_D1>,
|
|
||||||
<STM32F429_PB1_FUNC_OTG_HS_ULPI_D2>,
|
|
||||||
<STM32F429_PB10_FUNC_OTG_HS_ULPI_D3>,
|
|
||||||
<STM32F429_PB11_FUNC_OTG_HS_ULPI_D4>,
|
|
||||||
<STM32F429_PB12_FUNC_OTG_HS_ULPI_D5>,
|
|
||||||
<STM32F429_PB13_FUNC_OTG_HS_ULPI_D6>,
|
|
||||||
<STM32F429_PB5_FUNC_OTG_HS_ULPI_D7>;
|
|
||||||
bias-disable;
|
|
||||||
drive-push-pull;
|
|
||||||
slew-rate = <2>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
ethernet_mii: mii@0 {
|
|
||||||
pins {
|
|
||||||
pinmux = <STM32F429_PG13_FUNC_ETH_MII_TXD0_ETH_RMII_TXD0>,
|
|
||||||
<STM32F429_PG14_FUNC_ETH_MII_TXD1_ETH_RMII_TXD1>,
|
|
||||||
<STM32F429_PC2_FUNC_ETH_MII_TXD2>,
|
|
||||||
<STM32F429_PB8_FUNC_ETH_MII_TXD3>,
|
|
||||||
<STM32F429_PC3_FUNC_ETH_MII_TX_CLK>,
|
|
||||||
<STM32F429_PG11_FUNC_ETH_MII_TX_EN_ETH_RMII_TX_EN>,
|
|
||||||
<STM32F429_PA2_FUNC_ETH_MDIO>,
|
|
||||||
<STM32F429_PC1_FUNC_ETH_MDC>,
|
|
||||||
<STM32F429_PA1_FUNC_ETH_MII_RX_CLK_ETH_RMII_REF_CLK>,
|
|
||||||
<STM32F429_PA7_FUNC_ETH_MII_RX_DV_ETH_RMII_CRS_DV>,
|
|
||||||
<STM32F429_PC4_FUNC_ETH_MII_RXD0_ETH_RMII_RXD0>,
|
|
||||||
<STM32F429_PC5_FUNC_ETH_MII_RXD1_ETH_RMII_RXD1>,
|
|
||||||
<STM32F429_PH6_FUNC_ETH_MII_RXD2>,
|
|
||||||
<STM32F429_PH7_FUNC_ETH_MII_RXD3>;
|
|
||||||
slew-rate = <2>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
adc3_in8_pin: adc@200 {
|
|
||||||
pins {
|
|
||||||
pinmux = <STM32F429_PF10_FUNC_ANALOG>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
pwm1_pins: pwm@1 {
|
|
||||||
pins {
|
|
||||||
pinmux = <STM32F429_PA8_FUNC_TIM1_CH1>,
|
|
||||||
<STM32F429_PB13_FUNC_TIM1_CH1N>,
|
|
||||||
<STM32F429_PB12_FUNC_TIM1_BKIN>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
pwm3_pins: pwm@3 {
|
|
||||||
pins {
|
|
||||||
pinmux = <STM32F429_PB4_FUNC_TIM3_CH1>,
|
|
||||||
<STM32F429_PB5_FUNC_TIM3_CH2>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
i2c1_pins: i2c1@0 {
|
|
||||||
pins {
|
|
||||||
pinmux = <STM32F429_PB9_FUNC_I2C1_SDA>,
|
|
||||||
<STM32F429_PB6_FUNC_I2C1_SCL>;
|
|
||||||
bias-disable;
|
|
||||||
drive-open-drain;
|
|
||||||
slew-rate = <3>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
ltdc_pins: ltdc@0 {
|
|
||||||
pins {
|
|
||||||
pinmux = <STM32F429_PI12_FUNC_LCD_HSYNC>,
|
|
||||||
<STM32F429_PI13_FUNC_LCD_VSYNC>,
|
|
||||||
<STM32F429_PI14_FUNC_LCD_CLK>,
|
|
||||||
<STM32F429_PI15_FUNC_LCD_R0>,
|
|
||||||
<STM32F429_PJ0_FUNC_LCD_R1>,
|
|
||||||
<STM32F429_PJ1_FUNC_LCD_R2>,
|
|
||||||
<STM32F429_PJ2_FUNC_LCD_R3>,
|
|
||||||
<STM32F429_PJ3_FUNC_LCD_R4>,
|
|
||||||
<STM32F429_PJ4_FUNC_LCD_R5>,
|
|
||||||
<STM32F429_PJ5_FUNC_LCD_R6>,
|
|
||||||
<STM32F429_PJ6_FUNC_LCD_R7>,
|
|
||||||
<STM32F429_PJ7_FUNC_LCD_G0>,
|
|
||||||
<STM32F429_PJ8_FUNC_LCD_G1>,
|
|
||||||
<STM32F429_PJ9_FUNC_LCD_G2>,
|
|
||||||
<STM32F429_PJ10_FUNC_LCD_G3>,
|
|
||||||
<STM32F429_PJ11_FUNC_LCD_G4>,
|
|
||||||
<STM32F429_PJ12_FUNC_LCD_B0>,
|
|
||||||
<STM32F429_PJ13_FUNC_LCD_B1>,
|
|
||||||
<STM32F429_PJ14_FUNC_LCD_B2>,
|
|
||||||
<STM32F429_PJ15_FUNC_LCD_B3>,
|
|
||||||
<STM32F429_PK0_FUNC_LCD_G5>,
|
|
||||||
<STM32F429_PK1_FUNC_LCD_G6>,
|
|
||||||
<STM32F429_PK2_FUNC_LCD_G7>,
|
|
||||||
<STM32F429_PK3_FUNC_LCD_B4>,
|
|
||||||
<STM32F429_PK4_FUNC_LCD_B5>,
|
|
||||||
<STM32F429_PK5_FUNC_LCD_B6>,
|
|
||||||
<STM32F429_PK6_FUNC_LCD_B7>,
|
|
||||||
<STM32F429_PK7_FUNC_LCD_DE>;
|
|
||||||
slew-rate = <2>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
dcmi_pins: dcmi@0 {
|
|
||||||
pins {
|
|
||||||
pinmux = <STM32F429_PA4_FUNC_DCMI_HSYNC>,
|
|
||||||
<STM32F429_PB7_FUNC_DCMI_VSYNC>,
|
|
||||||
<STM32F429_PA6_FUNC_DCMI_PIXCLK>,
|
|
||||||
<STM32F429_PC6_FUNC_DCMI_D0>,
|
|
||||||
<STM32F429_PC7_FUNC_DCMI_D1>,
|
|
||||||
<STM32F429_PC8_FUNC_DCMI_D2>,
|
|
||||||
<STM32F429_PC9_FUNC_DCMI_D3>,
|
|
||||||
<STM32F429_PC11_FUNC_DCMI_D4>,
|
|
||||||
<STM32F429_PD3_FUNC_DCMI_D5>,
|
|
||||||
<STM32F429_PB8_FUNC_DCMI_D6>,
|
|
||||||
<STM32F429_PE6_FUNC_DCMI_D7>,
|
|
||||||
<STM32F429_PC10_FUNC_DCMI_D8>,
|
|
||||||
<STM32F429_PC12_FUNC_DCMI_D9>,
|
|
||||||
<STM32F429_PD6_FUNC_DCMI_D10>,
|
|
||||||
<STM32F429_PD2_FUNC_DCMI_D11>;
|
|
||||||
bias-disable;
|
|
||||||
drive-push-pull;
|
|
||||||
slew-rate = <3>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
crc: crc@40023000 {
|
crc: crc@40023000 {
|
||||||
compatible = "st,stm32f4-crc";
|
compatible = "st,stm32f4-crc";
|
||||||
reg = <0x40023000 0x400>;
|
reg = <0x40023000 0x400>;
|
||||||
|
|
|
@ -47,6 +47,7 @@
|
||||||
|
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
#include "stm32f429.dtsi"
|
#include "stm32f429.dtsi"
|
||||||
|
#include "stm32f469-pinctrl.dtsi"
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "STMicroelectronics STM32F469i-DISCO board";
|
model = "STMicroelectronics STM32F469i-DISCO board";
|
||||||
|
|
96
arch/arm/boot/dts/stm32f469-pinctrl.dtsi
Normal file
96
arch/arm/boot/dts/stm32f469-pinctrl.dtsi
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2017 - Alexandre Torgue <alexandre.torgue@st.com>
|
||||||
|
*
|
||||||
|
* This file is dual-licensed: you can use it either under the terms
|
||||||
|
* of the GPL or the X11 license, at your option. Note that this dual
|
||||||
|
* licensing only applies to this file, and not this project as a
|
||||||
|
* whole.
|
||||||
|
*
|
||||||
|
* a) This file is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This file is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* Or, alternatively,
|
||||||
|
*
|
||||||
|
* b) Permission is hereby granted, free of charge, to any person
|
||||||
|
* obtaining a copy of this software and associated documentation
|
||||||
|
* files (the "Software"), to deal in the Software without
|
||||||
|
* restriction, including without limitation the rights to use,
|
||||||
|
* copy, modify, merge, publish, distribute, sublicense, and/or
|
||||||
|
* sell copies of the Software, and to permit persons to whom the
|
||||||
|
* Software is furnished to do so, subject to the following
|
||||||
|
* conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be
|
||||||
|
* included in all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||||
|
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||||
|
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
* OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "stm32f4-pinctrl.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
soc {
|
||||||
|
pinctrl: pin-controller {
|
||||||
|
compatible = "st,stm32f469-pinctrl";
|
||||||
|
|
||||||
|
gpioa: gpio@40020000 {
|
||||||
|
gpio-ranges = <&pinctrl 0 0 16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpiob: gpio@40020400 {
|
||||||
|
gpio-ranges = <&pinctrl 0 16 16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpioc: gpio@40020800 {
|
||||||
|
gpio-ranges = <&pinctrl 0 32 16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpiod: gpio@40020c00 {
|
||||||
|
gpio-ranges = <&pinctrl 0 48 16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpioe: gpio@40021000 {
|
||||||
|
gpio-ranges = <&pinctrl 0 64 16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpiof: gpio@40021400 {
|
||||||
|
gpio-ranges = <&pinctrl 0 80 16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpiog: gpio@40021800 {
|
||||||
|
gpio-ranges = <&pinctrl 0 96 16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpioh: gpio@40021c00 {
|
||||||
|
gpio-ranges = <&pinctrl 0 112 16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpioi: gpio@40022000 {
|
||||||
|
gpio-ranges = <&pinctrl 0 128 16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpioj: gpio@40022400 {
|
||||||
|
gpio-ranges = <&pinctrl 0 144 6>,
|
||||||
|
<&pinctrl 12 156 4>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpiok: gpio@40022800 {
|
||||||
|
gpio-ranges = <&pinctrl 3 163 5>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
|
@ -32,6 +32,7 @@ CONFIG_BLK_DEV_RAM_SIZE=16384
|
||||||
CONFIG_BLK_DEV_SD=y
|
CONFIG_BLK_DEV_SD=y
|
||||||
# CONFIG_SCSI_LOWLEVEL is not set
|
# CONFIG_SCSI_LOWLEVEL is not set
|
||||||
CONFIG_ATA=y
|
CONFIG_ATA=y
|
||||||
|
CONFIG_PATA_FTIDE010=y
|
||||||
CONFIG_INPUT_EVDEV=y
|
CONFIG_INPUT_EVDEV=y
|
||||||
CONFIG_KEYBOARD_GPIO=y
|
CONFIG_KEYBOARD_GPIO=y
|
||||||
# CONFIG_INPUT_MOUSE is not set
|
# CONFIG_INPUT_MOUSE is not set
|
||||||
|
@ -55,8 +56,8 @@ CONFIG_LEDS_GPIO=y
|
||||||
CONFIG_LEDS_TRIGGERS=y
|
CONFIG_LEDS_TRIGGERS=y
|
||||||
CONFIG_LEDS_TRIGGER_HEARTBEAT=y
|
CONFIG_LEDS_TRIGGER_HEARTBEAT=y
|
||||||
CONFIG_RTC_CLASS=y
|
CONFIG_RTC_CLASS=y
|
||||||
CONFIG_RTC_DRV_GEMINI=y
|
|
||||||
CONFIG_DMADEVICES=y
|
CONFIG_DMADEVICES=y
|
||||||
|
CONFIG_AMBA_PL08X=y
|
||||||
# CONFIG_DNOTIFY is not set
|
# CONFIG_DNOTIFY is not set
|
||||||
CONFIG_TMPFS=y
|
CONFIG_TMPFS=y
|
||||||
CONFIG_TMPFS_POSIX_ACL=y
|
CONFIG_TMPFS_POSIX_ACL=y
|
||||||
|
|
|
@ -471,7 +471,7 @@ CONFIG_LCD_PLATFORM=m
|
||||||
CONFIG_LCD_TOSA=m
|
CONFIG_LCD_TOSA=m
|
||||||
CONFIG_BACKLIGHT_PWM=m
|
CONFIG_BACKLIGHT_PWM=m
|
||||||
CONFIG_BACKLIGHT_TOSA=m
|
CONFIG_BACKLIGHT_TOSA=m
|
||||||
CONFIG_FRAMEBUFFER_CONSOLE=m
|
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||||
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
|
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
|
||||||
CONFIG_LOGO=y
|
CONFIG_LOGO=y
|
||||||
CONFIG_SOUND=m
|
CONFIG_SOUND=m
|
||||||
|
|
|
@ -113,7 +113,7 @@ CONFIG_FB_PXA_PARAMETERS=y
|
||||||
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
||||||
CONFIG_BACKLIGHT_PWM=m
|
CONFIG_BACKLIGHT_PWM=m
|
||||||
# CONFIG_VGA_CONSOLE is not set
|
# CONFIG_VGA_CONSOLE is not set
|
||||||
CONFIG_FRAMEBUFFER_CONSOLE=m
|
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||||
CONFIG_LOGO=y
|
CONFIG_LOGO=y
|
||||||
CONFIG_SOUND=m
|
CONFIG_SOUND=m
|
||||||
CONFIG_SND=m
|
CONFIG_SND=m
|
||||||
|
|
|
@ -112,7 +112,7 @@ CONFIG_FB_PXA=m
|
||||||
CONFIG_FB_PXA_PARAMETERS=y
|
CONFIG_FB_PXA_PARAMETERS=y
|
||||||
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
||||||
# CONFIG_VGA_CONSOLE is not set
|
# CONFIG_VGA_CONSOLE is not set
|
||||||
CONFIG_FRAMEBUFFER_CONSOLE=m
|
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||||
CONFIG_LOGO=y
|
CONFIG_LOGO=y
|
||||||
CONFIG_SOUND=m
|
CONFIG_SOUND=m
|
||||||
CONFIG_SND=m
|
CONFIG_SND=m
|
||||||
|
|
|
@ -139,11 +139,10 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *,
|
||||||
#define TIF_NEED_RESCHED 1 /* rescheduling necessary */
|
#define TIF_NEED_RESCHED 1 /* rescheduling necessary */
|
||||||
#define TIF_NOTIFY_RESUME 2 /* callback before returning to user */
|
#define TIF_NOTIFY_RESUME 2 /* callback before returning to user */
|
||||||
#define TIF_UPROBE 3 /* breakpointed or singlestepping */
|
#define TIF_UPROBE 3 /* breakpointed or singlestepping */
|
||||||
#define TIF_FSCHECK 4 /* Check FS is USER_DS on return */
|
#define TIF_SYSCALL_TRACE 4 /* syscall trace active */
|
||||||
#define TIF_SYSCALL_TRACE 5 /* syscall trace active */
|
#define TIF_SYSCALL_AUDIT 5 /* syscall auditing active */
|
||||||
#define TIF_SYSCALL_AUDIT 6 /* syscall auditing active */
|
#define TIF_SYSCALL_TRACEPOINT 6 /* syscall tracepoint instrumentation */
|
||||||
#define TIF_SYSCALL_TRACEPOINT 7 /* syscall tracepoint instrumentation */
|
#define TIF_SECCOMP 7 /* seccomp syscall filtering active */
|
||||||
#define TIF_SECCOMP 8 /* seccomp syscall filtering active */
|
|
||||||
|
|
||||||
#define TIF_NOHZ 12 /* in adaptive nohz mode */
|
#define TIF_NOHZ 12 /* in adaptive nohz mode */
|
||||||
#define TIF_USING_IWMMXT 17
|
#define TIF_USING_IWMMXT 17
|
||||||
|
@ -154,7 +153,6 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *,
|
||||||
#define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED)
|
#define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED)
|
||||||
#define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME)
|
#define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME)
|
||||||
#define _TIF_UPROBE (1 << TIF_UPROBE)
|
#define _TIF_UPROBE (1 << TIF_UPROBE)
|
||||||
#define _TIF_FSCHECK (1 << TIF_FSCHECK)
|
|
||||||
#define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE)
|
#define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE)
|
||||||
#define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
|
#define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
|
||||||
#define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT)
|
#define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT)
|
||||||
|
@ -168,9 +166,8 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *,
|
||||||
/*
|
/*
|
||||||
* Change these and you break ASM code in entry-common.S
|
* Change these and you break ASM code in entry-common.S
|
||||||
*/
|
*/
|
||||||
#define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \
|
#define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \
|
||||||
_TIF_NOTIFY_RESUME | _TIF_UPROBE | \
|
_TIF_NOTIFY_RESUME | _TIF_UPROBE)
|
||||||
_TIF_FSCHECK)
|
|
||||||
|
|
||||||
#endif /* __KERNEL__ */
|
#endif /* __KERNEL__ */
|
||||||
#endif /* __ASM_ARM_THREAD_INFO_H */
|
#endif /* __ASM_ARM_THREAD_INFO_H */
|
||||||
|
|
|
@ -70,8 +70,6 @@ static inline void set_fs(mm_segment_t fs)
|
||||||
{
|
{
|
||||||
current_thread_info()->addr_limit = fs;
|
current_thread_info()->addr_limit = fs;
|
||||||
modify_domain(DOMAIN_KERNEL, fs ? DOMAIN_CLIENT : DOMAIN_MANAGER);
|
modify_domain(DOMAIN_KERNEL, fs ? DOMAIN_CLIENT : DOMAIN_MANAGER);
|
||||||
/* On user-mode return, check fs is correct */
|
|
||||||
set_thread_flag(TIF_FSCHECK);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#define segment_eq(a, b) ((a) == (b))
|
#define segment_eq(a, b) ((a) == (b))
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include <asm/unistd.h>
|
#include <asm/unistd.h>
|
||||||
#include <asm/ftrace.h>
|
#include <asm/ftrace.h>
|
||||||
#include <asm/unwind.h>
|
#include <asm/unwind.h>
|
||||||
|
#include <asm/memory.h>
|
||||||
#ifdef CONFIG_AEABI
|
#ifdef CONFIG_AEABI
|
||||||
#include <asm/unistd-oabi.h>
|
#include <asm/unistd-oabi.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -48,12 +49,14 @@ ret_fast_syscall:
|
||||||
UNWIND(.fnstart )
|
UNWIND(.fnstart )
|
||||||
UNWIND(.cantunwind )
|
UNWIND(.cantunwind )
|
||||||
disable_irq_notrace @ disable interrupts
|
disable_irq_notrace @ disable interrupts
|
||||||
|
ldr r2, [tsk, #TI_ADDR_LIMIT]
|
||||||
|
cmp r2, #TASK_SIZE
|
||||||
|
blne addr_limit_check_failed
|
||||||
ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
|
ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
|
||||||
tst r1, #_TIF_SYSCALL_WORK
|
tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
|
||||||
bne fast_work_pending
|
|
||||||
tst r1, #_TIF_WORK_MASK
|
|
||||||
bne fast_work_pending
|
bne fast_work_pending
|
||||||
|
|
||||||
|
|
||||||
/* perform architecture specific actions before user return */
|
/* perform architecture specific actions before user return */
|
||||||
arch_ret_to_user r1, lr
|
arch_ret_to_user r1, lr
|
||||||
|
|
||||||
|
@ -76,16 +79,16 @@ ret_fast_syscall:
|
||||||
UNWIND(.cantunwind )
|
UNWIND(.cantunwind )
|
||||||
str r0, [sp, #S_R0 + S_OFF]! @ save returned r0
|
str r0, [sp, #S_R0 + S_OFF]! @ save returned r0
|
||||||
disable_irq_notrace @ disable interrupts
|
disable_irq_notrace @ disable interrupts
|
||||||
|
ldr r2, [tsk, #TI_ADDR_LIMIT]
|
||||||
|
cmp r2, #TASK_SIZE
|
||||||
|
blne addr_limit_check_failed
|
||||||
ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
|
ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
|
||||||
tst r1, #_TIF_SYSCALL_WORK
|
tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
|
||||||
bne fast_work_pending
|
|
||||||
tst r1, #_TIF_WORK_MASK
|
|
||||||
beq no_work_pending
|
beq no_work_pending
|
||||||
UNWIND(.fnend )
|
UNWIND(.fnend )
|
||||||
ENDPROC(ret_fast_syscall)
|
ENDPROC(ret_fast_syscall)
|
||||||
|
|
||||||
/* Slower path - fall through to work_pending */
|
/* Slower path - fall through to work_pending */
|
||||||
fast_work_pending:
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
tst r1, #_TIF_SYSCALL_WORK
|
tst r1, #_TIF_SYSCALL_WORK
|
||||||
|
@ -111,6 +114,9 @@ ENTRY(ret_to_user)
|
||||||
ret_slow_syscall:
|
ret_slow_syscall:
|
||||||
disable_irq_notrace @ disable interrupts
|
disable_irq_notrace @ disable interrupts
|
||||||
ENTRY(ret_to_user_from_irq)
|
ENTRY(ret_to_user_from_irq)
|
||||||
|
ldr r2, [tsk, #TI_ADDR_LIMIT]
|
||||||
|
cmp r2, #TASK_SIZE
|
||||||
|
blne addr_limit_check_failed
|
||||||
ldr r1, [tsk, #TI_FLAGS]
|
ldr r1, [tsk, #TI_FLAGS]
|
||||||
tst r1, #_TIF_WORK_MASK
|
tst r1, #_TIF_WORK_MASK
|
||||||
bne slow_work_pending
|
bne slow_work_pending
|
||||||
|
|
|
@ -614,10 +614,6 @@ do_work_pending(struct pt_regs *regs, unsigned int thread_flags, int syscall)
|
||||||
* Update the trace code with the current status.
|
* Update the trace code with the current status.
|
||||||
*/
|
*/
|
||||||
trace_hardirqs_off();
|
trace_hardirqs_off();
|
||||||
|
|
||||||
/* Check valid user FS if needed */
|
|
||||||
addr_limit_user_check();
|
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (likely(thread_flags & _TIF_NEED_RESCHED)) {
|
if (likely(thread_flags & _TIF_NEED_RESCHED)) {
|
||||||
schedule();
|
schedule();
|
||||||
|
@ -678,3 +674,9 @@ struct page *get_signal_page(void)
|
||||||
|
|
||||||
return page;
|
return page;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Defer to generic check */
|
||||||
|
asmlinkage void addr_limit_check_failed(void)
|
||||||
|
{
|
||||||
|
addr_limit_user_check();
|
||||||
|
}
|
||||||
|
|
|
@ -533,8 +533,8 @@ static void __init at91_pm_backup_init(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
pm_bu->suspended = 0;
|
pm_bu->suspended = 0;
|
||||||
pm_bu->canary = virt_to_phys(&canary);
|
pm_bu->canary = __pa_symbol(&canary);
|
||||||
pm_bu->resume = virt_to_phys(cpu_resume);
|
pm_bu->resume = __pa_symbol(cpu_resume);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -58,10 +58,10 @@ void omap_hsmmc_late_init(struct omap2_hsmmc_info *c)
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
if (omap_hsmmc_done != 1)
|
if (omap_hsmmc_done)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
omap_hsmmc_done++;
|
omap_hsmmc_done = 1;
|
||||||
|
|
||||||
for (; c->mmc; c++) {
|
for (; c->mmc; c++) {
|
||||||
pdev = c->pdev;
|
pdev = c->pdev;
|
||||||
|
|
|
@ -839,6 +839,7 @@ static struct omap_hwmod dra7xx_gpio1_hwmod = {
|
||||||
.name = "gpio1",
|
.name = "gpio1",
|
||||||
.class = &dra7xx_gpio_hwmod_class,
|
.class = &dra7xx_gpio_hwmod_class,
|
||||||
.clkdm_name = "wkupaon_clkdm",
|
.clkdm_name = "wkupaon_clkdm",
|
||||||
|
.flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
|
||||||
.main_clk = "wkupaon_iclk_mux",
|
.main_clk = "wkupaon_iclk_mux",
|
||||||
.prcm = {
|
.prcm = {
|
||||||
.omap4 = {
|
.omap4 = {
|
||||||
|
|
|
@ -50,17 +50,22 @@ KBUILD_CFLAGS += -fno-asynchronous-unwind-tables
|
||||||
KBUILD_CFLAGS += $(call cc-option, -mpc-relative-literal-loads)
|
KBUILD_CFLAGS += $(call cc-option, -mpc-relative-literal-loads)
|
||||||
KBUILD_AFLAGS += $(lseinstr) $(brokengasinst)
|
KBUILD_AFLAGS += $(lseinstr) $(brokengasinst)
|
||||||
|
|
||||||
|
KBUILD_CFLAGS += $(call cc-option,-mabi=lp64)
|
||||||
|
KBUILD_AFLAGS += $(call cc-option,-mabi=lp64)
|
||||||
|
|
||||||
ifeq ($(CONFIG_CPU_BIG_ENDIAN), y)
|
ifeq ($(CONFIG_CPU_BIG_ENDIAN), y)
|
||||||
KBUILD_CPPFLAGS += -mbig-endian
|
KBUILD_CPPFLAGS += -mbig-endian
|
||||||
CHECKFLAGS += -D__AARCH64EB__
|
CHECKFLAGS += -D__AARCH64EB__
|
||||||
AS += -EB
|
AS += -EB
|
||||||
LD += -EB
|
LD += -EB
|
||||||
|
LDFLAGS += -maarch64linuxb
|
||||||
UTS_MACHINE := aarch64_be
|
UTS_MACHINE := aarch64_be
|
||||||
else
|
else
|
||||||
KBUILD_CPPFLAGS += -mlittle-endian
|
KBUILD_CPPFLAGS += -mlittle-endian
|
||||||
CHECKFLAGS += -D__AARCH64EL__
|
CHECKFLAGS += -D__AARCH64EL__
|
||||||
AS += -EL
|
AS += -EL
|
||||||
LD += -EL
|
LD += -EL
|
||||||
|
LDFLAGS += -maarch64linux
|
||||||
UTS_MACHINE := aarch64
|
UTS_MACHINE := aarch64
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
|
@ -168,7 +168,8 @@
|
||||||
&sd_emmc_a {
|
&sd_emmc_a {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-0 = <&sdio_pins>;
|
pinctrl-0 = <&sdio_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-1 = <&sdio_clk_gate_pins>;
|
||||||
|
pinctrl-names = "default", "clk-gate";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
@ -194,7 +195,8 @@
|
||||||
&sd_emmc_b {
|
&sd_emmc_b {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-0 = <&sdcard_pins>;
|
pinctrl-0 = <&sdcard_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-1 = <&sdcard_clk_gate_pins>;
|
||||||
|
pinctrl-names = "default", "clk-gate";
|
||||||
|
|
||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
cap-sd-highspeed;
|
cap-sd-highspeed;
|
||||||
|
@ -212,10 +214,10 @@
|
||||||
&sd_emmc_c {
|
&sd_emmc_c {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-0 = <&emmc_pins>;
|
pinctrl-0 = <&emmc_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-1 = <&emmc_clk_gate_pins>;
|
||||||
|
pinctrl-names = "default", "clk-gate";
|
||||||
|
|
||||||
bus-width = <8>;
|
bus-width = <8>;
|
||||||
cap-sd-highspeed;
|
|
||||||
cap-mmc-highspeed;
|
cap-mmc-highspeed;
|
||||||
max-frequency = <200000000>;
|
max-frequency = <200000000>;
|
||||||
non-removable;
|
non-removable;
|
||||||
|
|
|
@ -107,6 +107,9 @@
|
||||||
|
|
||||||
states = <3300000 0>,
|
states = <3300000 0>,
|
||||||
<1800000 1>;
|
<1800000 1>;
|
||||||
|
|
||||||
|
regulator-settling-time-up-us = <100>;
|
||||||
|
regulator-settling-time-down-us = <5000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
wifi_32k: wifi-32k {
|
wifi_32k: wifi-32k {
|
||||||
|
@ -250,7 +253,8 @@
|
||||||
&sd_emmc_a {
|
&sd_emmc_a {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-0 = <&sdio_pins>, <&sdio_irq_pins>;
|
pinctrl-0 = <&sdio_pins>, <&sdio_irq_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-1 = <&sdio_clk_gate_pins>;
|
||||||
|
pinctrl-names = "default", "clk-gate";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
@ -276,11 +280,16 @@
|
||||||
&sd_emmc_b {
|
&sd_emmc_b {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-0 = <&sdcard_pins>;
|
pinctrl-0 = <&sdcard_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-1 = <&sdcard_clk_gate_pins>;
|
||||||
|
pinctrl-names = "default", "clk-gate";
|
||||||
|
|
||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
cap-sd-highspeed;
|
cap-sd-highspeed;
|
||||||
max-frequency = <100000000>;
|
sd-uhs-sdr12;
|
||||||
|
sd-uhs-sdr25;
|
||||||
|
sd-uhs-sdr50;
|
||||||
|
sd-uhs-sdr104;
|
||||||
|
max-frequency = <200000000>;
|
||||||
disable-wp;
|
disable-wp;
|
||||||
|
|
||||||
cd-gpios = <&gpio CARD_6 GPIO_ACTIVE_HIGH>;
|
cd-gpios = <&gpio CARD_6 GPIO_ACTIVE_HIGH>;
|
||||||
|
@ -294,10 +303,10 @@
|
||||||
&sd_emmc_c {
|
&sd_emmc_c {
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
pinctrl-0 = <&emmc_pins>;
|
pinctrl-0 = <&emmc_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-1 = <&emmc_clk_gate_pins>;
|
||||||
|
pinctrl-names = "default", "clk-gate";
|
||||||
|
|
||||||
bus-width = <8>;
|
bus-width = <8>;
|
||||||
cap-sd-highspeed;
|
|
||||||
max-frequency = <200000000>;
|
max-frequency = <200000000>;
|
||||||
non-removable;
|
non-removable;
|
||||||
disable-wp;
|
disable-wp;
|
||||||
|
|
|
@ -51,7 +51,7 @@
|
||||||
/ {
|
/ {
|
||||||
compatible = "nexbox,a95x", "amlogic,meson-gxbb";
|
compatible = "nexbox,a95x", "amlogic,meson-gxbb";
|
||||||
model = "NEXBOX A95X";
|
model = "NEXBOX A95X";
|
||||||
|
|
||||||
aliases {
|
aliases {
|
||||||
serial0 = &uart_AO;
|
serial0 = &uart_AO;
|
||||||
};
|
};
|
||||||
|
@ -232,7 +232,8 @@
|
||||||
&sd_emmc_a {
|
&sd_emmc_a {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-0 = <&sdio_pins>;
|
pinctrl-0 = <&sdio_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-1 = <&sdio_clk_gate_pins>;
|
||||||
|
pinctrl-names = "default", "clk-gate";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
@ -253,7 +254,8 @@
|
||||||
&sd_emmc_b {
|
&sd_emmc_b {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-0 = <&sdcard_pins>;
|
pinctrl-0 = <&sdcard_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-1 = <&sdcard_clk_gate_pins>;
|
||||||
|
pinctrl-names = "default", "clk-gate";
|
||||||
|
|
||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
cap-sd-highspeed;
|
cap-sd-highspeed;
|
||||||
|
@ -271,10 +273,10 @@
|
||||||
&sd_emmc_c {
|
&sd_emmc_c {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-0 = <&emmc_pins>;
|
pinctrl-0 = <&emmc_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-1 = <&emmc_clk_gate_pins>;
|
||||||
|
pinctrl-names = "default", "clk-gate";
|
||||||
|
|
||||||
bus-width = <8>;
|
bus-width = <8>;
|
||||||
cap-sd-highspeed;
|
|
||||||
cap-mmc-highspeed;
|
cap-mmc-highspeed;
|
||||||
max-frequency = <200000000>;
|
max-frequency = <200000000>;
|
||||||
non-removable;
|
non-removable;
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
/ {
|
/ {
|
||||||
compatible = "hardkernel,odroid-c2", "amlogic,meson-gxbb";
|
compatible = "hardkernel,odroid-c2", "amlogic,meson-gxbb";
|
||||||
model = "Hardkernel ODROID-C2";
|
model = "Hardkernel ODROID-C2";
|
||||||
|
|
||||||
aliases {
|
aliases {
|
||||||
serial0 = &uart_AO;
|
serial0 = &uart_AO;
|
||||||
};
|
};
|
||||||
|
@ -253,7 +253,8 @@
|
||||||
&sd_emmc_b {
|
&sd_emmc_b {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-0 = <&sdcard_pins>;
|
pinctrl-0 = <&sdcard_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-1 = <&sdcard_clk_gate_pins>;
|
||||||
|
pinctrl-names = "default", "clk-gate";
|
||||||
|
|
||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
cap-sd-highspeed;
|
cap-sd-highspeed;
|
||||||
|
@ -271,10 +272,10 @@
|
||||||
&sd_emmc_c {
|
&sd_emmc_c {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-0 = <&emmc_pins>;
|
pinctrl-0 = <&emmc_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-1 = <&emmc_clk_gate_pins>;
|
||||||
|
pinctrl-names = "default", "clk-gate";
|
||||||
|
|
||||||
bus-width = <8>;
|
bus-width = <8>;
|
||||||
cap-sd-highspeed;
|
|
||||||
max-frequency = <200000000>;
|
max-frequency = <200000000>;
|
||||||
non-removable;
|
non-removable;
|
||||||
disable-wp;
|
disable-wp;
|
||||||
|
|
|
@ -194,7 +194,8 @@
|
||||||
&sd_emmc_a {
|
&sd_emmc_a {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-0 = <&sdio_pins>;
|
pinctrl-0 = <&sdio_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-1 = <&sdio_clk_gate_pins>;
|
||||||
|
pinctrl-names = "default", "clk-gate";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
@ -220,10 +221,14 @@
|
||||||
&sd_emmc_b {
|
&sd_emmc_b {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-0 = <&sdcard_pins>;
|
pinctrl-0 = <&sdcard_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-1 = <&sdcard_clk_gate_pins>;
|
||||||
|
pinctrl-names = "default", "clk-gate";
|
||||||
|
|
||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
cap-sd-highspeed;
|
cap-sd-highspeed;
|
||||||
|
sd-uhs-sdr12;
|
||||||
|
sd-uhs-sdr25;
|
||||||
|
sd-uhs-sdr50;
|
||||||
max-frequency = <100000000>;
|
max-frequency = <100000000>;
|
||||||
disable-wp;
|
disable-wp;
|
||||||
|
|
||||||
|
@ -238,10 +243,10 @@
|
||||||
&sd_emmc_c {
|
&sd_emmc_c {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-0 = <&emmc_pins>;
|
pinctrl-0 = <&emmc_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-1 = <&emmc_clk_gate_pins>;
|
||||||
|
pinctrl-names = "default", "clk-gate";
|
||||||
|
|
||||||
bus-width = <8>;
|
bus-width = <8>;
|
||||||
cap-sd-highspeed;
|
|
||||||
cap-mmc-highspeed;
|
cap-mmc-highspeed;
|
||||||
max-frequency = <200000000>;
|
max-frequency = <200000000>;
|
||||||
non-removable;
|
non-removable;
|
||||||
|
|
|
@ -155,7 +155,8 @@
|
||||||
&sd_emmc_a {
|
&sd_emmc_a {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-0 = <&sdio_pins &sdio_irq_pins>;
|
pinctrl-0 = <&sdio_pins &sdio_irq_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-1 = <&sdio_clk_gate_pins>;
|
||||||
|
pinctrl-names = "default", "clk-gate";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
@ -181,7 +182,8 @@
|
||||||
&sd_emmc_b {
|
&sd_emmc_b {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-0 = <&sdcard_pins>;
|
pinctrl-0 = <&sdcard_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-1 = <&sdcard_clk_gate_pins>;
|
||||||
|
pinctrl-names = "default", "clk-gate";
|
||||||
|
|
||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
cap-sd-highspeed;
|
cap-sd-highspeed;
|
||||||
|
@ -198,10 +200,10 @@
|
||||||
&sd_emmc_c {
|
&sd_emmc_c {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-0 = <&emmc_pins>;
|
pinctrl-0 = <&emmc_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-1 = <&emmc_clk_gate_pins>;
|
||||||
|
pinctrl-names = "default", "clk-gate";
|
||||||
|
|
||||||
bus-width = <8>;
|
bus-width = <8>;
|
||||||
cap-sd-highspeed;
|
|
||||||
cap-mmc-highspeed;
|
cap-mmc-highspeed;
|
||||||
max-frequency = <200000000>;
|
max-frequency = <200000000>;
|
||||||
non-removable;
|
non-removable;
|
||||||
|
|
|
@ -392,6 +392,17 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
emmc_clk_gate_pins: emmc_clk_gate {
|
||||||
|
mux {
|
||||||
|
groups = "BOOT_8";
|
||||||
|
function = "gpio_periphs";
|
||||||
|
};
|
||||||
|
cfg-pull-down {
|
||||||
|
pins = "BOOT_8";
|
||||||
|
bias-pull-down;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
nor_pins: nor {
|
nor_pins: nor {
|
||||||
mux {
|
mux {
|
||||||
groups = "nor_d",
|
groups = "nor_d",
|
||||||
|
@ -430,6 +441,17 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
sdcard_clk_gate_pins: sdcard_clk_gate {
|
||||||
|
mux {
|
||||||
|
groups = "CARD_2";
|
||||||
|
function = "gpio_periphs";
|
||||||
|
};
|
||||||
|
cfg-pull-down {
|
||||||
|
pins = "CARD_2";
|
||||||
|
bias-pull-down;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
sdio_pins: sdio {
|
sdio_pins: sdio {
|
||||||
mux {
|
mux {
|
||||||
groups = "sdio_d0",
|
groups = "sdio_d0",
|
||||||
|
@ -442,6 +464,17 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
sdio_clk_gate_pins: sdio_clk_gate {
|
||||||
|
mux {
|
||||||
|
groups = "GPIOX_4";
|
||||||
|
function = "gpio_periphs";
|
||||||
|
};
|
||||||
|
cfg-pull-down {
|
||||||
|
pins = "GPIOX_4";
|
||||||
|
bias-pull-down;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
sdio_irq_pins: sdio_irq {
|
sdio_irq_pins: sdio_irq {
|
||||||
mux {
|
mux {
|
||||||
groups = "sdio_irq";
|
groups = "sdio_irq";
|
||||||
|
@ -661,21 +694,21 @@
|
||||||
|
|
||||||
&sd_emmc_a {
|
&sd_emmc_a {
|
||||||
clocks = <&clkc CLKID_SD_EMMC_A>,
|
clocks = <&clkc CLKID_SD_EMMC_A>,
|
||||||
<&xtal>,
|
<&clkc CLKID_SD_EMMC_A_CLK0>,
|
||||||
<&clkc CLKID_FCLK_DIV2>;
|
<&clkc CLKID_FCLK_DIV2>;
|
||||||
clock-names = "core", "clkin0", "clkin1";
|
clock-names = "core", "clkin0", "clkin1";
|
||||||
};
|
};
|
||||||
|
|
||||||
&sd_emmc_b {
|
&sd_emmc_b {
|
||||||
clocks = <&clkc CLKID_SD_EMMC_B>,
|
clocks = <&clkc CLKID_SD_EMMC_B>,
|
||||||
<&xtal>,
|
<&clkc CLKID_SD_EMMC_B_CLK0>,
|
||||||
<&clkc CLKID_FCLK_DIV2>;
|
<&clkc CLKID_FCLK_DIV2>;
|
||||||
clock-names = "core", "clkin0", "clkin1";
|
clock-names = "core", "clkin0", "clkin1";
|
||||||
};
|
};
|
||||||
|
|
||||||
&sd_emmc_c {
|
&sd_emmc_c {
|
||||||
clocks = <&clkc CLKID_SD_EMMC_C>,
|
clocks = <&clkc CLKID_SD_EMMC_C>,
|
||||||
<&xtal>,
|
<&clkc CLKID_SD_EMMC_C_CLK0>,
|
||||||
<&clkc CLKID_FCLK_DIV2>;
|
<&clkc CLKID_FCLK_DIV2>;
|
||||||
clock-names = "core", "clkin0", "clkin1";
|
clock-names = "core", "clkin0", "clkin1";
|
||||||
};
|
};
|
||||||
|
|
|
@ -123,7 +123,8 @@
|
||||||
&sd_emmc_b {
|
&sd_emmc_b {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-0 = <&sdcard_pins>;
|
pinctrl-0 = <&sdcard_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-1 = <&sdcard_clk_gate_pins>;
|
||||||
|
pinctrl-names = "default", "clk-gate";
|
||||||
|
|
||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
cap-sd-highspeed;
|
cap-sd-highspeed;
|
||||||
|
@ -141,10 +142,10 @@
|
||||||
&sd_emmc_c {
|
&sd_emmc_c {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-0 = <&emmc_pins>;
|
pinctrl-0 = <&emmc_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-1 = <&emmc_clk_gate_pins>;
|
||||||
|
pinctrl-names = "default", "clk-gate";
|
||||||
|
|
||||||
bus-width = <8>;
|
bus-width = <8>;
|
||||||
cap-sd-highspeed;
|
|
||||||
cap-mmc-highspeed;
|
cap-mmc-highspeed;
|
||||||
max-frequency = <100000000>;
|
max-frequency = <100000000>;
|
||||||
non-removable;
|
non-removable;
|
||||||
|
|
|
@ -91,6 +91,9 @@
|
||||||
|
|
||||||
states = <3300000 0>,
|
states = <3300000 0>,
|
||||||
<1800000 1>;
|
<1800000 1>;
|
||||||
|
|
||||||
|
regulator-settling-time-up-us = <200>;
|
||||||
|
regulator-settling-time-down-us = <50000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
vddio_boot: regulator-vddio_boot {
|
vddio_boot: regulator-vddio_boot {
|
||||||
|
@ -197,10 +200,14 @@
|
||||||
&sd_emmc_b {
|
&sd_emmc_b {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-0 = <&sdcard_pins>;
|
pinctrl-0 = <&sdcard_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-1 = <&sdcard_clk_gate_pins>;
|
||||||
|
pinctrl-names = "default", "clk-gate";
|
||||||
|
|
||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
cap-sd-highspeed;
|
cap-sd-highspeed;
|
||||||
|
sd-uhs-sdr12;
|
||||||
|
sd-uhs-sdr25;
|
||||||
|
sd-uhs-sdr50;
|
||||||
max-frequency = <100000000>;
|
max-frequency = <100000000>;
|
||||||
disable-wp;
|
disable-wp;
|
||||||
|
|
||||||
|
@ -215,10 +222,12 @@
|
||||||
&sd_emmc_c {
|
&sd_emmc_c {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-0 = <&emmc_pins>;
|
pinctrl-0 = <&emmc_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-1 = <&emmc_clk_gate_pins>;
|
||||||
|
pinctrl-names = "default", "clk-gate";
|
||||||
|
|
||||||
bus-width = <8>;
|
bus-width = <8>;
|
||||||
cap-mmc-highspeed;
|
cap-mmc-highspeed;
|
||||||
|
mmc-ddr-3_3v;
|
||||||
max-frequency = <50000000>;
|
max-frequency = <50000000>;
|
||||||
non-removable;
|
non-removable;
|
||||||
disable-wp;
|
disable-wp;
|
||||||
|
|
|
@ -189,7 +189,8 @@
|
||||||
&sd_emmc_a {
|
&sd_emmc_a {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-0 = <&sdio_pins>;
|
pinctrl-0 = <&sdio_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-1 = <&sdio_clk_gate_pins>;
|
||||||
|
pinctrl-names = "default", "clk-gate";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
@ -210,7 +211,8 @@
|
||||||
&sd_emmc_b {
|
&sd_emmc_b {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-0 = <&sdcard_pins>;
|
pinctrl-0 = <&sdcard_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-1 = <&sdcard_clk_gate_pins>;
|
||||||
|
pinctrl-names = "default", "clk-gate";
|
||||||
|
|
||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
cap-sd-highspeed;
|
cap-sd-highspeed;
|
||||||
|
@ -228,10 +230,10 @@
|
||||||
&sd_emmc_c {
|
&sd_emmc_c {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-0 = <&emmc_pins>;
|
pinctrl-0 = <&emmc_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-1 = <&emmc_clk_gate_pins>;
|
||||||
|
pinctrl-names = "default", "clk-gate";
|
||||||
|
|
||||||
bus-width = <8>;
|
bus-width = <8>;
|
||||||
cap-sd-highspeed;
|
|
||||||
cap-mmc-highspeed;
|
cap-mmc-highspeed;
|
||||||
max-frequency = <200000000>;
|
max-frequency = <200000000>;
|
||||||
non-removable;
|
non-removable;
|
||||||
|
|
|
@ -95,7 +95,8 @@
|
||||||
&sd_emmc_a {
|
&sd_emmc_a {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-0 = <&sdio_pins>;
|
pinctrl-0 = <&sdio_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-1 = <&sdio_clk_gate_pins>;
|
||||||
|
pinctrl-names = "default", "clk-gate";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
@ -116,7 +117,8 @@
|
||||||
&sd_emmc_b {
|
&sd_emmc_b {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-0 = <&sdcard_pins>;
|
pinctrl-0 = <&sdcard_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-1 = <&sdcard_clk_gate_pins>;
|
||||||
|
pinctrl-names = "default", "clk-gate";
|
||||||
|
|
||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
cap-sd-highspeed;
|
cap-sd-highspeed;
|
||||||
|
@ -134,10 +136,10 @@
|
||||||
&sd_emmc_c {
|
&sd_emmc_c {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-0 = <&emmc_pins>;
|
pinctrl-0 = <&emmc_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-1 = <&emmc_clk_gate_pins>;
|
||||||
|
pinctrl-names = "default", "clk-gate";
|
||||||
|
|
||||||
bus-width = <8>;
|
bus-width = <8>;
|
||||||
cap-sd-highspeed;
|
|
||||||
cap-mmc-highspeed;
|
cap-mmc-highspeed;
|
||||||
max-frequency = <200000000>;
|
max-frequency = <200000000>;
|
||||||
non-removable;
|
non-removable;
|
||||||
|
|
|
@ -281,6 +281,17 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
emmc_clk_gate_pins: emmc_clk_gate {
|
||||||
|
mux {
|
||||||
|
groups = "BOOT_8";
|
||||||
|
function = "gpio_periphs";
|
||||||
|
};
|
||||||
|
cfg-pull-down {
|
||||||
|
pins = "BOOT_8";
|
||||||
|
bias-pull-down;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
nor_pins: nor {
|
nor_pins: nor {
|
||||||
mux {
|
mux {
|
||||||
groups = "nor_d",
|
groups = "nor_d",
|
||||||
|
@ -319,6 +330,17 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
sdcard_clk_gate_pins: sdcard_clk_gate {
|
||||||
|
mux {
|
||||||
|
groups = "CARD_2";
|
||||||
|
function = "gpio_periphs";
|
||||||
|
};
|
||||||
|
cfg-pull-down {
|
||||||
|
pins = "CARD_2";
|
||||||
|
bias-pull-down;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
sdio_pins: sdio {
|
sdio_pins: sdio {
|
||||||
mux {
|
mux {
|
||||||
groups = "sdio_d0",
|
groups = "sdio_d0",
|
||||||
|
@ -331,6 +353,17 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
sdio_clk_gate_pins: sdio_clk_gate {
|
||||||
|
mux {
|
||||||
|
groups = "GPIOX_4";
|
||||||
|
function = "gpio_periphs";
|
||||||
|
};
|
||||||
|
cfg-pull-down {
|
||||||
|
pins = "GPIOX_4";
|
||||||
|
bias-pull-down;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
sdio_irq_pins: sdio_irq {
|
sdio_irq_pins: sdio_irq {
|
||||||
mux {
|
mux {
|
||||||
groups = "sdio_irq";
|
groups = "sdio_irq";
|
||||||
|
@ -603,21 +636,21 @@
|
||||||
|
|
||||||
&sd_emmc_a {
|
&sd_emmc_a {
|
||||||
clocks = <&clkc CLKID_SD_EMMC_A>,
|
clocks = <&clkc CLKID_SD_EMMC_A>,
|
||||||
<&xtal>,
|
<&clkc CLKID_SD_EMMC_A_CLK0>,
|
||||||
<&clkc CLKID_FCLK_DIV2>;
|
<&clkc CLKID_FCLK_DIV2>;
|
||||||
clock-names = "core", "clkin0", "clkin1";
|
clock-names = "core", "clkin0", "clkin1";
|
||||||
};
|
};
|
||||||
|
|
||||||
&sd_emmc_b {
|
&sd_emmc_b {
|
||||||
clocks = <&clkc CLKID_SD_EMMC_B>,
|
clocks = <&clkc CLKID_SD_EMMC_B>,
|
||||||
<&xtal>,
|
<&clkc CLKID_SD_EMMC_B_CLK0>,
|
||||||
<&clkc CLKID_FCLK_DIV2>;
|
<&clkc CLKID_FCLK_DIV2>;
|
||||||
clock-names = "core", "clkin0", "clkin1";
|
clock-names = "core", "clkin0", "clkin1";
|
||||||
};
|
};
|
||||||
|
|
||||||
&sd_emmc_c {
|
&sd_emmc_c {
|
||||||
clocks = <&clkc CLKID_SD_EMMC_C>,
|
clocks = <&clkc CLKID_SD_EMMC_C>,
|
||||||
<&xtal>,
|
<&clkc CLKID_SD_EMMC_C_CLK0>,
|
||||||
<&clkc CLKID_FCLK_DIV2>;
|
<&clkc CLKID_FCLK_DIV2>;
|
||||||
clock-names = "core", "clkin0", "clkin1";
|
clock-names = "core", "clkin0", "clkin1";
|
||||||
};
|
};
|
||||||
|
|
|
@ -175,7 +175,8 @@
|
||||||
&sd_emmc_b {
|
&sd_emmc_b {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-0 = <&sdcard_pins>;
|
pinctrl-0 = <&sdcard_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-1 = <&sdcard_clk_gate_pins>;
|
||||||
|
pinctrl-names = "default", "clk-gate";
|
||||||
|
|
||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
cap-sd-highspeed;
|
cap-sd-highspeed;
|
||||||
|
@ -193,10 +194,10 @@
|
||||||
&sd_emmc_c {
|
&sd_emmc_c {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-0 = <&emmc_pins>;
|
pinctrl-0 = <&emmc_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-1 = <&emmc_clk_gate_pins>;
|
||||||
|
pinctrl-names = "default", "clk-gate";
|
||||||
|
|
||||||
bus-width = <8>;
|
bus-width = <8>;
|
||||||
cap-sd-highspeed;
|
|
||||||
cap-mmc-highspeed;
|
cap-mmc-highspeed;
|
||||||
max-frequency = <200000000>;
|
max-frequency = <200000000>;
|
||||||
non-removable;
|
non-removable;
|
||||||
|
|
|
@ -220,7 +220,6 @@
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
|
|
||||||
bus-width = <8>;
|
bus-width = <8>;
|
||||||
cap-sd-highspeed;
|
|
||||||
cap-mmc-highspeed;
|
cap-mmc-highspeed;
|
||||||
max-frequency = <200000000>;
|
max-frequency = <200000000>;
|
||||||
non-removable;
|
non-removable;
|
||||||
|
|
|
@ -254,7 +254,7 @@
|
||||||
|
|
||||||
ap_syscon: system-controller@6f4000 {
|
ap_syscon: system-controller@6f4000 {
|
||||||
compatible = "syscon", "simple-mfd";
|
compatible = "syscon", "simple-mfd";
|
||||||
reg = <0x6f4000 0x1000>;
|
reg = <0x6f4000 0x2000>;
|
||||||
|
|
||||||
ap_clk: clock {
|
ap_clk: clock {
|
||||||
compatible = "marvell,ap806-clock";
|
compatible = "marvell,ap806-clock";
|
||||||
|
@ -265,7 +265,7 @@
|
||||||
compatible = "marvell,ap806-pinctrl";
|
compatible = "marvell,ap806-pinctrl";
|
||||||
};
|
};
|
||||||
|
|
||||||
ap_gpio: gpio {
|
ap_gpio: gpio@1040 {
|
||||||
compatible = "marvell,armada-8k-gpio";
|
compatible = "marvell,armada-8k-gpio";
|
||||||
offset = <0x1040>;
|
offset = <0x1040>;
|
||||||
ngpios = <20>;
|
ngpios = <20>;
|
||||||
|
|
|
@ -113,8 +113,7 @@
|
||||||
compatible = "arm,cortex-a53", "arm,armv8";
|
compatible = "arm,cortex-a53", "arm,armv8";
|
||||||
reg = <0x0 0x0>;
|
reg = <0x0 0x0>;
|
||||||
enable-method = "psci";
|
enable-method = "psci";
|
||||||
clocks = <&cru ARMCLKL>;
|
|
||||||
operating-points-v2 = <&cluster0_opp>;
|
|
||||||
#cooling-cells = <2>; /* min followed by max */
|
#cooling-cells = <2>; /* min followed by max */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -123,8 +122,6 @@
|
||||||
compatible = "arm,cortex-a53", "arm,armv8";
|
compatible = "arm,cortex-a53", "arm,armv8";
|
||||||
reg = <0x0 0x1>;
|
reg = <0x0 0x1>;
|
||||||
enable-method = "psci";
|
enable-method = "psci";
|
||||||
clocks = <&cru ARMCLKL>;
|
|
||||||
operating-points-v2 = <&cluster0_opp>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
cpu_l2: cpu@2 {
|
cpu_l2: cpu@2 {
|
||||||
|
@ -132,8 +129,6 @@
|
||||||
compatible = "arm,cortex-a53", "arm,armv8";
|
compatible = "arm,cortex-a53", "arm,armv8";
|
||||||
reg = <0x0 0x2>;
|
reg = <0x0 0x2>;
|
||||||
enable-method = "psci";
|
enable-method = "psci";
|
||||||
clocks = <&cru ARMCLKL>;
|
|
||||||
operating-points-v2 = <&cluster0_opp>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
cpu_l3: cpu@3 {
|
cpu_l3: cpu@3 {
|
||||||
|
@ -141,8 +136,6 @@
|
||||||
compatible = "arm,cortex-a53", "arm,armv8";
|
compatible = "arm,cortex-a53", "arm,armv8";
|
||||||
reg = <0x0 0x3>;
|
reg = <0x0 0x3>;
|
||||||
enable-method = "psci";
|
enable-method = "psci";
|
||||||
clocks = <&cru ARMCLKL>;
|
|
||||||
operating-points-v2 = <&cluster0_opp>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
cpu_b0: cpu@100 {
|
cpu_b0: cpu@100 {
|
||||||
|
@ -150,8 +143,7 @@
|
||||||
compatible = "arm,cortex-a53", "arm,armv8";
|
compatible = "arm,cortex-a53", "arm,armv8";
|
||||||
reg = <0x0 0x100>;
|
reg = <0x0 0x100>;
|
||||||
enable-method = "psci";
|
enable-method = "psci";
|
||||||
clocks = <&cru ARMCLKB>;
|
|
||||||
operating-points-v2 = <&cluster1_opp>;
|
|
||||||
#cooling-cells = <2>; /* min followed by max */
|
#cooling-cells = <2>; /* min followed by max */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -160,8 +152,6 @@
|
||||||
compatible = "arm,cortex-a53", "arm,armv8";
|
compatible = "arm,cortex-a53", "arm,armv8";
|
||||||
reg = <0x0 0x101>;
|
reg = <0x0 0x101>;
|
||||||
enable-method = "psci";
|
enable-method = "psci";
|
||||||
clocks = <&cru ARMCLKB>;
|
|
||||||
operating-points-v2 = <&cluster1_opp>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
cpu_b2: cpu@102 {
|
cpu_b2: cpu@102 {
|
||||||
|
@ -169,8 +159,6 @@
|
||||||
compatible = "arm,cortex-a53", "arm,armv8";
|
compatible = "arm,cortex-a53", "arm,armv8";
|
||||||
reg = <0x0 0x102>;
|
reg = <0x0 0x102>;
|
||||||
enable-method = "psci";
|
enable-method = "psci";
|
||||||
clocks = <&cru ARMCLKB>;
|
|
||||||
operating-points-v2 = <&cluster1_opp>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
cpu_b3: cpu@103 {
|
cpu_b3: cpu@103 {
|
||||||
|
@ -178,62 +166,6 @@
|
||||||
compatible = "arm,cortex-a53", "arm,armv8";
|
compatible = "arm,cortex-a53", "arm,armv8";
|
||||||
reg = <0x0 0x103>;
|
reg = <0x0 0x103>;
|
||||||
enable-method = "psci";
|
enable-method = "psci";
|
||||||
clocks = <&cru ARMCLKB>;
|
|
||||||
operating-points-v2 = <&cluster1_opp>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
cluster0_opp: opp-table0 {
|
|
||||||
compatible = "operating-points-v2";
|
|
||||||
opp-shared;
|
|
||||||
|
|
||||||
opp00 {
|
|
||||||
opp-hz = /bits/ 64 <312000000>;
|
|
||||||
opp-microvolt = <950000>;
|
|
||||||
clock-latency-ns = <40000>;
|
|
||||||
};
|
|
||||||
opp01 {
|
|
||||||
opp-hz = /bits/ 64 <408000000>;
|
|
||||||
opp-microvolt = <950000>;
|
|
||||||
};
|
|
||||||
opp02 {
|
|
||||||
opp-hz = /bits/ 64 <600000000>;
|
|
||||||
opp-microvolt = <950000>;
|
|
||||||
};
|
|
||||||
opp03 {
|
|
||||||
opp-hz = /bits/ 64 <816000000>;
|
|
||||||
opp-microvolt = <1025000>;
|
|
||||||
};
|
|
||||||
opp04 {
|
|
||||||
opp-hz = /bits/ 64 <1008000000>;
|
|
||||||
opp-microvolt = <1125000>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
cluster1_opp: opp-table1 {
|
|
||||||
compatible = "operating-points-v2";
|
|
||||||
opp-shared;
|
|
||||||
|
|
||||||
opp00 {
|
|
||||||
opp-hz = /bits/ 64 <312000000>;
|
|
||||||
opp-microvolt = <950000>;
|
|
||||||
clock-latency-ns = <40000>;
|
|
||||||
};
|
|
||||||
opp01 {
|
|
||||||
opp-hz = /bits/ 64 <408000000>;
|
|
||||||
opp-microvolt = <950000>;
|
|
||||||
};
|
|
||||||
opp02 {
|
|
||||||
opp-hz = /bits/ 64 <600000000>;
|
|
||||||
opp-microvolt = <950000>;
|
|
||||||
};
|
|
||||||
opp03 {
|
|
||||||
opp-hz = /bits/ 64 <816000000>;
|
|
||||||
opp-microvolt = <975000>;
|
|
||||||
};
|
|
||||||
opp04 {
|
|
||||||
opp-hz = /bits/ 64 <1008000000>;
|
|
||||||
opp-microvolt = <1050000>;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1629,9 +1629,9 @@
|
||||||
compatible = "rockchip,rk3399-mipi-dsi", "snps,dw-mipi-dsi";
|
compatible = "rockchip,rk3399-mipi-dsi", "snps,dw-mipi-dsi";
|
||||||
reg = <0x0 0xff960000 0x0 0x8000>;
|
reg = <0x0 0xff960000 0x0 0x8000>;
|
||||||
interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH 0>;
|
interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||||
clocks = <&cru SCLK_MIPIDPHY_REF>, <&cru PCLK_MIPI_DSI0>,
|
clocks = <&cru SCLK_DPHY_PLL>, <&cru PCLK_MIPI_DSI0>,
|
||||||
<&cru SCLK_DPHY_TX0_CFG>;
|
<&cru SCLK_DPHY_TX0_CFG>, <&cru PCLK_VIO_GRF>;
|
||||||
clock-names = "ref", "pclk", "phy_cfg";
|
clock-names = "ref", "pclk", "phy_cfg", "grf";
|
||||||
power-domains = <&power RK3399_PD_VIO>;
|
power-domains = <&power RK3399_PD_VIO>;
|
||||||
rockchip,grf = <&grf>;
|
rockchip,grf = <&grf>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#ifndef __ASM_LINKAGE_H
|
#ifndef __ASM_LINKAGE_H
|
||||||
#define __ASM_LINKAGE_H
|
#define __ASM_LINKAGE_H
|
||||||
|
|
||||||
#define __ALIGN .align 4
|
#define __ALIGN .align 2
|
||||||
#define __ALIGN_STR ".align 4"
|
#define __ALIGN_STR ".align 2"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -401,7 +401,7 @@ static inline phys_addr_t pmd_page_paddr(pmd_t pmd)
|
||||||
/* Find an entry in the third-level page table. */
|
/* Find an entry in the third-level page table. */
|
||||||
#define pte_index(addr) (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
|
#define pte_index(addr) (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
|
||||||
|
|
||||||
#define pte_offset_phys(dir,addr) (pmd_page_paddr(*(dir)) + pte_index(addr) * sizeof(pte_t))
|
#define pte_offset_phys(dir,addr) (pmd_page_paddr(READ_ONCE(*(dir))) + pte_index(addr) * sizeof(pte_t))
|
||||||
#define pte_offset_kernel(dir,addr) ((pte_t *)__va(pte_offset_phys((dir), (addr))))
|
#define pte_offset_kernel(dir,addr) ((pte_t *)__va(pte_offset_phys((dir), (addr))))
|
||||||
|
|
||||||
#define pte_offset_map(dir,addr) pte_offset_kernel((dir), (addr))
|
#define pte_offset_map(dir,addr) pte_offset_kernel((dir), (addr))
|
||||||
|
|
|
@ -321,6 +321,8 @@ void kernel_neon_end(void)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(kernel_neon_end);
|
EXPORT_SYMBOL(kernel_neon_end);
|
||||||
|
|
||||||
|
#ifdef CONFIG_EFI
|
||||||
|
|
||||||
static DEFINE_PER_CPU(struct fpsimd_state, efi_fpsimd_state);
|
static DEFINE_PER_CPU(struct fpsimd_state, efi_fpsimd_state);
|
||||||
static DEFINE_PER_CPU(bool, efi_fpsimd_state_used);
|
static DEFINE_PER_CPU(bool, efi_fpsimd_state_used);
|
||||||
|
|
||||||
|
@ -370,6 +372,8 @@ void __efi_fpsimd_end(void)
|
||||||
kernel_neon_end();
|
kernel_neon_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* CONFIG_EFI */
|
||||||
|
|
||||||
#endif /* CONFIG_KERNEL_MODE_NEON */
|
#endif /* CONFIG_KERNEL_MODE_NEON */
|
||||||
|
|
||||||
#ifdef CONFIG_CPU_PM
|
#ifdef CONFIG_CPU_PM
|
||||||
|
|
|
@ -384,6 +384,7 @@ ENTRY(kimage_vaddr)
|
||||||
* booted in EL1 or EL2 respectively.
|
* booted in EL1 or EL2 respectively.
|
||||||
*/
|
*/
|
||||||
ENTRY(el2_setup)
|
ENTRY(el2_setup)
|
||||||
|
msr SPsel, #1 // We want to use SP_EL{1,2}
|
||||||
mrs x0, CurrentEL
|
mrs x0, CurrentEL
|
||||||
cmp x0, #CurrentEL_EL2
|
cmp x0, #CurrentEL_EL2
|
||||||
b.eq 1f
|
b.eq 1f
|
||||||
|
|
|
@ -751,10 +751,10 @@ asmlinkage void do_notify_resume(struct pt_regs *regs,
|
||||||
*/
|
*/
|
||||||
trace_hardirqs_off();
|
trace_hardirqs_off();
|
||||||
|
|
||||||
/* Check valid user FS if needed */
|
|
||||||
addr_limit_user_check();
|
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
/* Check valid user FS if needed */
|
||||||
|
addr_limit_user_check();
|
||||||
|
|
||||||
if (thread_flags & _TIF_NEED_RESCHED) {
|
if (thread_flags & _TIF_NEED_RESCHED) {
|
||||||
schedule();
|
schedule();
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -651,7 +651,7 @@ static const struct fault_info fault_info[] = {
|
||||||
{ do_translation_fault, SIGSEGV, SEGV_MAPERR, "level 0 translation fault" },
|
{ do_translation_fault, SIGSEGV, SEGV_MAPERR, "level 0 translation fault" },
|
||||||
{ do_translation_fault, SIGSEGV, SEGV_MAPERR, "level 1 translation fault" },
|
{ do_translation_fault, SIGSEGV, SEGV_MAPERR, "level 1 translation fault" },
|
||||||
{ do_translation_fault, SIGSEGV, SEGV_MAPERR, "level 2 translation fault" },
|
{ do_translation_fault, SIGSEGV, SEGV_MAPERR, "level 2 translation fault" },
|
||||||
{ do_page_fault, SIGSEGV, SEGV_MAPERR, "level 3 translation fault" },
|
{ do_translation_fault, SIGSEGV, SEGV_MAPERR, "level 3 translation fault" },
|
||||||
{ do_bad, SIGBUS, 0, "unknown 8" },
|
{ do_bad, SIGBUS, 0, "unknown 8" },
|
||||||
{ do_page_fault, SIGSEGV, SEGV_ACCERR, "level 1 access flag fault" },
|
{ do_page_fault, SIGSEGV, SEGV_ACCERR, "level 1 access flag fault" },
|
||||||
{ do_page_fault, SIGSEGV, SEGV_ACCERR, "level 2 access flag fault" },
|
{ do_page_fault, SIGSEGV, SEGV_ACCERR, "level 2 access flag fault" },
|
||||||
|
|
|
@ -25,7 +25,6 @@
|
||||||
#include <asm/dpmc.h>
|
#include <asm/dpmc.h>
|
||||||
#include <asm/bfin_sdh.h>
|
#include <asm/bfin_sdh.h>
|
||||||
#include <linux/spi/ad7877.h>
|
#include <linux/spi/ad7877.h>
|
||||||
#include <net/dsa.h>
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Name the Board for the /proc/cpuinfo
|
* Name the Board for the /proc/cpuinfo
|
||||||
|
@ -105,11 +104,7 @@ static const unsigned short bfin_mac_peripherals[] = {
|
||||||
|
|
||||||
static struct bfin_phydev_platform_data bfin_phydev_data[] = {
|
static struct bfin_phydev_platform_data bfin_phydev_data[] = {
|
||||||
{
|
{
|
||||||
#if IS_ENABLED(CONFIG_NET_DSA_KSZ8893M)
|
|
||||||
.addr = 3,
|
|
||||||
#else
|
|
||||||
.addr = 1,
|
.addr = 1,
|
||||||
#endif
|
|
||||||
.irq = IRQ_MAC_PHYINT,
|
.irq = IRQ_MAC_PHYINT,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -119,9 +114,6 @@ static struct bfin_mii_bus_platform_data bfin_mii_bus_data = {
|
||||||
.phydev_data = bfin_phydev_data,
|
.phydev_data = bfin_phydev_data,
|
||||||
.phy_mode = PHY_INTERFACE_MODE_MII,
|
.phy_mode = PHY_INTERFACE_MODE_MII,
|
||||||
.mac_peripherals = bfin_mac_peripherals,
|
.mac_peripherals = bfin_mac_peripherals,
|
||||||
#if IS_ENABLED(CONFIG_NET_DSA_KSZ8893M)
|
|
||||||
.phy_mask = 0xfff7, /* Only probe the port phy connect to the on chip MAC */
|
|
||||||
#endif
|
|
||||||
.vlan1_mask = 1,
|
.vlan1_mask = 1,
|
||||||
.vlan2_mask = 2,
|
.vlan2_mask = 2,
|
||||||
};
|
};
|
||||||
|
@ -140,29 +132,6 @@ static struct platform_device bfin_mac_device = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_NET_DSA_KSZ8893M)
|
|
||||||
static struct dsa_chip_data ksz8893m_switch_chip_data = {
|
|
||||||
.mii_bus = &bfin_mii_bus.dev,
|
|
||||||
.port_names = {
|
|
||||||
NULL,
|
|
||||||
"eth%d",
|
|
||||||
"eth%d",
|
|
||||||
"cpu",
|
|
||||||
},
|
|
||||||
};
|
|
||||||
static struct dsa_platform_data ksz8893m_switch_data = {
|
|
||||||
.nr_chips = 1,
|
|
||||||
.netdev = &bfin_mac_device.dev,
|
|
||||||
.chip = &ksz8893m_switch_chip_data,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct platform_device ksz8893m_switch_device = {
|
|
||||||
.name = "dsa",
|
|
||||||
.id = 0,
|
|
||||||
.num_resources = 0,
|
|
||||||
.dev.platform_data = &ksz8893m_switch_data,
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_MTD_M25P80)
|
#if IS_ENABLED(CONFIG_MTD_M25P80)
|
||||||
|
@ -228,19 +197,6 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = {
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_BFIN_MAC)
|
|
||||||
#if IS_ENABLED(CONFIG_NET_DSA_KSZ8893M)
|
|
||||||
{
|
|
||||||
.modalias = "ksz8893m",
|
|
||||||
.max_speed_hz = 5000000,
|
|
||||||
.bus_num = 0,
|
|
||||||
.chip_select = 1,
|
|
||||||
.platform_data = NULL,
|
|
||||||
.mode = SPI_MODE_3,
|
|
||||||
},
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_MMC_SPI)
|
#if IS_ENABLED(CONFIG_MMC_SPI)
|
||||||
{
|
{
|
||||||
.modalias = "mmc_spi",
|
.modalias = "mmc_spi",
|
||||||
|
@ -714,9 +670,6 @@ static struct platform_device *stamp_devices[] __initdata = {
|
||||||
#if IS_ENABLED(CONFIG_BFIN_MAC)
|
#if IS_ENABLED(CONFIG_BFIN_MAC)
|
||||||
&bfin_mii_bus,
|
&bfin_mii_bus,
|
||||||
&bfin_mac_device,
|
&bfin_mac_device,
|
||||||
#if IS_ENABLED(CONFIG_NET_DSA_KSZ8893M)
|
|
||||||
&ksz8893m_switch_device,
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_SPI_BFIN5XX)
|
#if IS_ENABLED(CONFIG_SPI_BFIN5XX)
|
||||||
|
|
|
@ -25,7 +25,6 @@
|
||||||
#include <asm/dpmc.h>
|
#include <asm/dpmc.h>
|
||||||
#include <asm/bfin_sdh.h>
|
#include <asm/bfin_sdh.h>
|
||||||
#include <linux/spi/ad7877.h>
|
#include <linux/spi/ad7877.h>
|
||||||
#include <net/dsa.h>
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Name the Board for the /proc/cpuinfo
|
* Name the Board for the /proc/cpuinfo
|
||||||
|
|
|
@ -92,9 +92,6 @@ static inline void release_thread(struct task_struct *dead_task)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
#define copy_segments(tsk, mm) do { } while (0)
|
|
||||||
#define release_segments(mm) do { } while (0)
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* saved kernel SP and DP of a blocked thread.
|
* saved kernel SP and DP of a blocked thread.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -92,10 +92,6 @@ static inline void release_thread(struct task_struct *dead_task)
|
||||||
extern asmlinkage void save_user_regs(struct user_context *target);
|
extern asmlinkage void save_user_regs(struct user_context *target);
|
||||||
extern asmlinkage void *restore_user_regs(const struct user_context *target, ...);
|
extern asmlinkage void *restore_user_regs(const struct user_context *target, ...);
|
||||||
|
|
||||||
#define copy_segments(tsk, mm) do { } while (0)
|
|
||||||
#define release_segments(mm) do { } while (0)
|
|
||||||
#define forget_segments() do { } while (0)
|
|
||||||
|
|
||||||
unsigned long get_wchan(struct task_struct *p);
|
unsigned long get_wchan(struct task_struct *p);
|
||||||
|
|
||||||
#define KSTK_EIP(tsk) ((tsk)->thread.frame0->pc)
|
#define KSTK_EIP(tsk) ((tsk)->thread.frame0->pc)
|
||||||
|
|
|
@ -194,6 +194,10 @@ config TIMER_DIVIDE
|
||||||
int "Timer divider (integer)"
|
int "Timer divider (integer)"
|
||||||
default "128"
|
default "128"
|
||||||
|
|
||||||
|
config CPU_BIG_ENDIAN
|
||||||
|
bool "Generate big endian code"
|
||||||
|
default n
|
||||||
|
|
||||||
config CPU_LITTLE_ENDIAN
|
config CPU_LITTLE_ENDIAN
|
||||||
bool "Generate little endian code"
|
bool "Generate little endian code"
|
||||||
default n
|
default n
|
||||||
|
|
|
@ -118,14 +118,6 @@ struct mm_struct;
|
||||||
/* Free all resources held by a thread. */
|
/* Free all resources held by a thread. */
|
||||||
extern void release_thread(struct task_struct *);
|
extern void release_thread(struct task_struct *);
|
||||||
|
|
||||||
/* Copy and release all segment info associated with a VM */
|
|
||||||
extern void copy_segments(struct task_struct *p, struct mm_struct * mm);
|
|
||||||
extern void release_segments(struct mm_struct * mm);
|
|
||||||
|
|
||||||
/* Copy and release all segment info associated with a VM */
|
|
||||||
#define copy_segments(p, mm) do { } while (0)
|
|
||||||
#define release_segments(mm) do { } while (0)
|
|
||||||
|
|
||||||
unsigned long get_wchan(struct task_struct *p);
|
unsigned long get_wchan(struct task_struct *p);
|
||||||
#define KSTK_EIP(tsk) ((tsk)->thread.lr)
|
#define KSTK_EIP(tsk) ((tsk)->thread.lr)
|
||||||
#define KSTK_ESP(tsk) ((tsk)->thread.sp)
|
#define KSTK_ESP(tsk) ((tsk)->thread.sp)
|
||||||
|
|
|
@ -114,6 +114,15 @@ static void set_eit_vector_entries(void)
|
||||||
_flush_cache_copyback_all();
|
_flush_cache_copyback_all();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void abort(void)
|
||||||
|
{
|
||||||
|
BUG();
|
||||||
|
|
||||||
|
/* if that doesn't kill us, halt */
|
||||||
|
panic("Oops failed to kill thread");
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(abort);
|
||||||
|
|
||||||
void __init trap_init(void)
|
void __init trap_init(void)
|
||||||
{
|
{
|
||||||
set_eit_vector_entries();
|
set_eit_vector_entries();
|
||||||
|
|
|
@ -131,9 +131,6 @@ static inline void release_thread(struct task_struct *dead_task)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
#define copy_segments(tsk, mm) do { } while (0)
|
|
||||||
#define release_segments(mm) do { } while (0)
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return saved PC of a blocked thread.
|
* Return saved PC of a blocked thread.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -39,7 +39,7 @@ config MICROBLAZE
|
||||||
# Endianness selection
|
# Endianness selection
|
||||||
choice
|
choice
|
||||||
prompt "Endianness selection"
|
prompt "Endianness selection"
|
||||||
default CPU_BIG_ENDIAN
|
default CPU_LITTLE_ENDIAN
|
||||||
help
|
help
|
||||||
microblaze architectures can be configured for either little or
|
microblaze architectures can be configured for either little or
|
||||||
big endian formats. Be sure to select the appropriate mode.
|
big endian formats. Be sure to select the appropriate mode.
|
||||||
|
|
|
@ -7,6 +7,7 @@ generic-y += fcntl.h
|
||||||
generic-y += ioctl.h
|
generic-y += ioctl.h
|
||||||
generic-y += ioctls.h
|
generic-y += ioctls.h
|
||||||
generic-y += ipcbuf.h
|
generic-y += ipcbuf.h
|
||||||
|
generic-y += kvm_para.h
|
||||||
generic-y += mman.h
|
generic-y += mman.h
|
||||||
generic-y += msgbuf.h
|
generic-y += msgbuf.h
|
||||||
generic-y += param.h
|
generic-y += param.h
|
||||||
|
|
|
@ -165,7 +165,7 @@ int dma_direct_mmap_coherent(struct device *dev, struct vm_area_struct *vma,
|
||||||
unsigned long attrs)
|
unsigned long attrs)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_MMU
|
#ifdef CONFIG_MMU
|
||||||
unsigned long user_count = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT;
|
unsigned long user_count = vma_pages(vma);
|
||||||
unsigned long count = PAGE_ALIGN(size) >> PAGE_SHIFT;
|
unsigned long count = PAGE_ALIGN(size) >> PAGE_SHIFT;
|
||||||
unsigned long off = vma->vm_pgoff;
|
unsigned long off = vma->vm_pgoff;
|
||||||
unsigned long pfn;
|
unsigned long pfn;
|
||||||
|
|
|
@ -22,10 +22,10 @@
|
||||||
#include "pci.h"
|
#include "pci.h"
|
||||||
|
|
||||||
static int (*ath79_pci_plat_dev_init)(struct pci_dev *dev);
|
static int (*ath79_pci_plat_dev_init)(struct pci_dev *dev);
|
||||||
static const struct ath79_pci_irq *ath79_pci_irq_map __initdata;
|
static const struct ath79_pci_irq *ath79_pci_irq_map;
|
||||||
static unsigned ath79_pci_nr_irqs __initdata;
|
static unsigned ath79_pci_nr_irqs;
|
||||||
|
|
||||||
static const struct ath79_pci_irq ar71xx_pci_irq_map[] __initconst = {
|
static const struct ath79_pci_irq ar71xx_pci_irq_map[] = {
|
||||||
{
|
{
|
||||||
.slot = 17,
|
.slot = 17,
|
||||||
.pin = 1,
|
.pin = 1,
|
||||||
|
@ -41,7 +41,7 @@ static const struct ath79_pci_irq ar71xx_pci_irq_map[] __initconst = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct ath79_pci_irq ar724x_pci_irq_map[] __initconst = {
|
static const struct ath79_pci_irq ar724x_pci_irq_map[] = {
|
||||||
{
|
{
|
||||||
.slot = 0,
|
.slot = 0,
|
||||||
.pin = 1,
|
.pin = 1,
|
||||||
|
@ -49,7 +49,7 @@ static const struct ath79_pci_irq ar724x_pci_irq_map[] __initconst = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct ath79_pci_irq qca955x_pci_irq_map[] __initconst = {
|
static const struct ath79_pci_irq qca955x_pci_irq_map[] = {
|
||||||
{
|
{
|
||||||
.bus = 0,
|
.bus = 0,
|
||||||
.slot = 0,
|
.slot = 0,
|
||||||
|
@ -64,7 +64,7 @@ static const struct ath79_pci_irq qca955x_pci_irq_map[] __initconst = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
int __init pcibios_map_irq(const struct pci_dev *dev, uint8_t slot, uint8_t pin)
|
int pcibios_map_irq(const struct pci_dev *dev, uint8_t slot, uint8_t pin)
|
||||||
{
|
{
|
||||||
int irq = -1;
|
int irq = -1;
|
||||||
int i;
|
int i;
|
||||||
|
|
|
@ -1377,29 +1377,32 @@ do { \
|
||||||
|
|
||||||
#define __write_64bit_c0_split(source, sel, val) \
|
#define __write_64bit_c0_split(source, sel, val) \
|
||||||
do { \
|
do { \
|
||||||
|
unsigned long long __tmp; \
|
||||||
unsigned long __flags; \
|
unsigned long __flags; \
|
||||||
\
|
\
|
||||||
local_irq_save(__flags); \
|
local_irq_save(__flags); \
|
||||||
if (sel == 0) \
|
if (sel == 0) \
|
||||||
__asm__ __volatile__( \
|
__asm__ __volatile__( \
|
||||||
".set\tmips64\n\t" \
|
".set\tmips64\n\t" \
|
||||||
"dsll\t%L0, %L0, 32\n\t" \
|
"dsll\t%L0, %L1, 32\n\t" \
|
||||||
"dsrl\t%L0, %L0, 32\n\t" \
|
"dsrl\t%L0, %L0, 32\n\t" \
|
||||||
"dsll\t%M0, %M0, 32\n\t" \
|
"dsll\t%M0, %M1, 32\n\t" \
|
||||||
"or\t%L0, %L0, %M0\n\t" \
|
"or\t%L0, %L0, %M0\n\t" \
|
||||||
"dmtc0\t%L0, " #source "\n\t" \
|
"dmtc0\t%L0, " #source "\n\t" \
|
||||||
".set\tmips0" \
|
".set\tmips0" \
|
||||||
: : "r" (val)); \
|
: "=&r,r" (__tmp) \
|
||||||
|
: "r,0" (val)); \
|
||||||
else \
|
else \
|
||||||
__asm__ __volatile__( \
|
__asm__ __volatile__( \
|
||||||
".set\tmips64\n\t" \
|
".set\tmips64\n\t" \
|
||||||
"dsll\t%L0, %L0, 32\n\t" \
|
"dsll\t%L0, %L1, 32\n\t" \
|
||||||
"dsrl\t%L0, %L0, 32\n\t" \
|
"dsrl\t%L0, %L0, 32\n\t" \
|
||||||
"dsll\t%M0, %M0, 32\n\t" \
|
"dsll\t%M0, %M1, 32\n\t" \
|
||||||
"or\t%L0, %L0, %M0\n\t" \
|
"or\t%L0, %L0, %M0\n\t" \
|
||||||
"dmtc0\t%L0, " #source ", " #sel "\n\t" \
|
"dmtc0\t%L0, " #source ", " #sel "\n\t" \
|
||||||
".set\tmips0" \
|
".set\tmips0" \
|
||||||
: : "r" (val)); \
|
: "=&r,r" (__tmp) \
|
||||||
|
: "r,0" (val)); \
|
||||||
local_irq_restore(__flags); \
|
local_irq_restore(__flags); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
|
|
@ -618,8 +618,7 @@ static int mipspmu_event_init(struct perf_event *event)
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((unsigned int)event->cpu >= nr_cpumask_bits ||
|
if (event->cpu >= 0 && !cpu_online(event->cpu))
|
||||||
(event->cpu >= 0 && !cpu_online(event->cpu)))
|
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
if (!atomic_inc_not_zero(&active_events)) {
|
if (!atomic_inc_not_zero(&active_events)) {
|
||||||
|
|
|
@ -32,13 +32,13 @@
|
||||||
#define INTC PC104PLUS_INTC_IRQ
|
#define INTC PC104PLUS_INTC_IRQ
|
||||||
#define INTD PC104PLUS_INTD_IRQ
|
#define INTD PC104PLUS_INTD_IRQ
|
||||||
|
|
||||||
static char irq_tab_capcella[][5] __initdata = {
|
static char irq_tab_capcella[][5] = {
|
||||||
[11] = { -1, INT1, INT1, INT1, INT1 },
|
[11] = { -1, INT1, INT1, INT1, INT1 },
|
||||||
[12] = { -1, INT2, INT2, INT2, INT2 },
|
[12] = { -1, INT2, INT2, INT2, INT2 },
|
||||||
[14] = { -1, INTA, INTB, INTC, INTD }
|
[14] = { -1, INTA, INTB, INTC, INTD }
|
||||||
};
|
};
|
||||||
|
|
||||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||||
{
|
{
|
||||||
return irq_tab_capcella[slot][pin];
|
return irq_tab_capcella[slot][pin];
|
||||||
}
|
}
|
||||||
|
|
|
@ -147,7 +147,7 @@ static void qube_raq_via_board_id_fixup(struct pci_dev *dev)
|
||||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_0,
|
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_0,
|
||||||
qube_raq_via_board_id_fixup);
|
qube_raq_via_board_id_fixup);
|
||||||
|
|
||||||
static char irq_tab_qube1[] __initdata = {
|
static char irq_tab_qube1[] = {
|
||||||
[COBALT_PCICONF_CPU] = 0,
|
[COBALT_PCICONF_CPU] = 0,
|
||||||
[COBALT_PCICONF_ETH0] = QUBE1_ETH0_IRQ,
|
[COBALT_PCICONF_ETH0] = QUBE1_ETH0_IRQ,
|
||||||
[COBALT_PCICONF_RAQSCSI] = SCSI_IRQ,
|
[COBALT_PCICONF_RAQSCSI] = SCSI_IRQ,
|
||||||
|
@ -156,7 +156,7 @@ static char irq_tab_qube1[] __initdata = {
|
||||||
[COBALT_PCICONF_ETH1] = 0
|
[COBALT_PCICONF_ETH1] = 0
|
||||||
};
|
};
|
||||||
|
|
||||||
static char irq_tab_cobalt[] __initdata = {
|
static char irq_tab_cobalt[] = {
|
||||||
[COBALT_PCICONF_CPU] = 0,
|
[COBALT_PCICONF_CPU] = 0,
|
||||||
[COBALT_PCICONF_ETH0] = ETH0_IRQ,
|
[COBALT_PCICONF_ETH0] = ETH0_IRQ,
|
||||||
[COBALT_PCICONF_RAQSCSI] = SCSI_IRQ,
|
[COBALT_PCICONF_RAQSCSI] = SCSI_IRQ,
|
||||||
|
@ -165,7 +165,7 @@ static char irq_tab_cobalt[] __initdata = {
|
||||||
[COBALT_PCICONF_ETH1] = ETH1_IRQ
|
[COBALT_PCICONF_ETH1] = ETH1_IRQ
|
||||||
};
|
};
|
||||||
|
|
||||||
static char irq_tab_raq2[] __initdata = {
|
static char irq_tab_raq2[] = {
|
||||||
[COBALT_PCICONF_CPU] = 0,
|
[COBALT_PCICONF_CPU] = 0,
|
||||||
[COBALT_PCICONF_ETH0] = ETH0_IRQ,
|
[COBALT_PCICONF_ETH0] = ETH0_IRQ,
|
||||||
[COBALT_PCICONF_RAQSCSI] = RAQ2_SCSI_IRQ,
|
[COBALT_PCICONF_RAQSCSI] = RAQ2_SCSI_IRQ,
|
||||||
|
@ -174,7 +174,7 @@ static char irq_tab_raq2[] __initdata = {
|
||||||
[COBALT_PCICONF_ETH1] = ETH1_IRQ
|
[COBALT_PCICONF_ETH1] = ETH1_IRQ
|
||||||
};
|
};
|
||||||
|
|
||||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||||
{
|
{
|
||||||
if (cobalt_board_id <= COBALT_BRD_ID_QUBE1)
|
if (cobalt_board_id <= COBALT_BRD_ID_QUBE1)
|
||||||
return irq_tab_qube1[slot];
|
return irq_tab_qube1[slot];
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define MAX_SLOT_NUM 10
|
#define MAX_SLOT_NUM 10
|
||||||
static unsigned char irq_map[][5] __initdata = {
|
static unsigned char irq_map[][5] = {
|
||||||
[3] = {0, MARKEINS_PCI_IRQ_INTB, MARKEINS_PCI_IRQ_INTC,
|
[3] = {0, MARKEINS_PCI_IRQ_INTB, MARKEINS_PCI_IRQ_INTC,
|
||||||
MARKEINS_PCI_IRQ_INTD, 0,},
|
MARKEINS_PCI_IRQ_INTD, 0,},
|
||||||
[4] = {0, MARKEINS_PCI_IRQ_INTA, 0, 0, 0,},
|
[4] = {0, MARKEINS_PCI_IRQ_INTA, 0, 0, 0,},
|
||||||
|
@ -85,7 +85,7 @@ static void emma2rh_pci_host_fixup(struct pci_dev *dev)
|
||||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_EMMA2RH,
|
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_EMMA2RH,
|
||||||
emma2rh_pci_host_fixup);
|
emma2rh_pci_host_fixup);
|
||||||
|
|
||||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||||
{
|
{
|
||||||
return irq_map[slot][pin];
|
return irq_map[slot][pin];
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
/* South bridge slot number is set by the pci probe process */
|
/* South bridge slot number is set by the pci probe process */
|
||||||
static u8 sb_slot = 5;
|
static u8 sb_slot = 5;
|
||||||
|
|
||||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||||
{
|
{
|
||||||
int irq = 0;
|
int irq = 0;
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
#define INTB MACEPCI_SHARED0_IRQ
|
#define INTB MACEPCI_SHARED0_IRQ
|
||||||
#define INTC MACEPCI_SHARED1_IRQ
|
#define INTC MACEPCI_SHARED1_IRQ
|
||||||
#define INTD MACEPCI_SHARED2_IRQ
|
#define INTD MACEPCI_SHARED2_IRQ
|
||||||
static char irq_tab_mace[][5] __initdata = {
|
static char irq_tab_mace[][5] = {
|
||||||
/* Dummy INT#A INT#B INT#C INT#D */
|
/* Dummy INT#A INT#B INT#C INT#D */
|
||||||
{0, 0, 0, 0, 0}, /* This is placeholder row - never used */
|
{0, 0, 0, 0, 0}, /* This is placeholder row - never used */
|
||||||
{0, SCSI0, SCSI0, SCSI0, SCSI0},
|
{0, SCSI0, SCSI0, SCSI0, SCSI0},
|
||||||
|
@ -39,7 +39,7 @@ static char irq_tab_mace[][5] __initdata = {
|
||||||
* irqs. I suppose a device without a pin A will thank us for doing it
|
* irqs. I suppose a device without a pin A will thank us for doing it
|
||||||
* right if there exists such a broken piece of crap.
|
* right if there exists such a broken piece of crap.
|
||||||
*/
|
*/
|
||||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||||
{
|
{
|
||||||
return irq_tab_mace[slot][pin];
|
return irq_tab_mace[slot][pin];
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
#include <asm/txx9/pci.h>
|
#include <asm/txx9/pci.h>
|
||||||
#include <asm/txx9/jmr3927.h>
|
#include <asm/txx9/jmr3927.h>
|
||||||
|
|
||||||
int __init jmr3927_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
int jmr3927_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||||
{
|
{
|
||||||
unsigned char irq = pin;
|
unsigned char irq = pin;
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue