Merge branches 'iommu/fixes', 'arm/exynos', 'arm/renesas', 'arm/smmu', 'arm/mediatek', 'arm/core', 'x86/vt-d' and 'core' into next

This commit is contained in:
Joerg Roedel 2017-02-10 15:13:10 +01:00
1244 изменённых файлов: 13520 добавлений и 8038 удалений

Просмотреть файл

@ -137,6 +137,7 @@ Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
Rudolf Marek <R.Marek@sh.cvut.cz> Rudolf Marek <R.Marek@sh.cvut.cz>
Rui Saraiva <rmps@joel.ist.utl.pt> Rui Saraiva <rmps@joel.ist.utl.pt>
Sachin P Sant <ssant@in.ibm.com> Sachin P Sant <ssant@in.ibm.com>
Sarangdhar Joshi <spjoshi@codeaurora.org>
Sam Ravnborg <sam@mars.ravnborg.org> Sam Ravnborg <sam@mars.ravnborg.org>
Santosh Shilimkar <ssantosh@kernel.org> Santosh Shilimkar <ssantosh@kernel.org>
Santosh Shilimkar <santosh.shilimkar@oracle.org> Santosh Shilimkar <santosh.shilimkar@oracle.org>
@ -150,10 +151,13 @@ Shuah Khan <shuah@kernel.org> <shuah.kh@samsung.com>
Simon Kelley <simon@thekelleys.org.uk> Simon Kelley <simon@thekelleys.org.uk>
Stéphane Witzmann <stephane.witzmann@ubpmes.univ-bpclermont.fr> Stéphane Witzmann <stephane.witzmann@ubpmes.univ-bpclermont.fr>
Stephen Hemminger <shemminger@osdl.org> Stephen Hemminger <shemminger@osdl.org>
Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
Subhash Jadavani <subhashj@codeaurora.org>
Sudeep Holla <sudeep.holla@arm.com> Sudeep KarkadaNagesha <sudeep.karkadanagesha@arm.com> Sudeep Holla <sudeep.holla@arm.com> Sudeep KarkadaNagesha <sudeep.karkadanagesha@arm.com>
Sumit Semwal <sumit.semwal@ti.com> Sumit Semwal <sumit.semwal@ti.com>
Tejun Heo <htejun@gmail.com> Tejun Heo <htejun@gmail.com>
Thomas Graf <tgraf@suug.ch> Thomas Graf <tgraf@suug.ch>
Thomas Pedersen <twp@codeaurora.org>
Tony Luck <tony.luck@intel.com> Tony Luck <tony.luck@intel.com>
Tsuneo Yoshioka <Tsuneo.Yoshioka@f-secure.com> Tsuneo Yoshioka <Tsuneo.Yoshioka@f-secure.com>
Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de> Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de>

Просмотреть файл

@ -1,12 +0,0 @@
What: /sys/devices/.../deferred_probe
Date: August 2016
Contact: Ben Hutchings <ben.hutchings@codethink.co.uk>
Description:
The /sys/devices/.../deferred_probe attribute is
present for all devices. If a driver detects during
probing a device that a related device is not yet
ready, it may defer probing of the first device. The
kernel will retry probing the first device after any
other device is successfully probed. This attribute
reads as 1 if probing of this device is currently
deferred, or 0 otherwise.

Просмотреть файл

@ -12,3 +12,15 @@ Description: /sys/kernel/iommu_groups/ contains a number of sub-
file if the IOMMU driver has chosen to register a more file if the IOMMU driver has chosen to register a more
common name for the group. common name for the group.
Users: Users:
What: /sys/kernel/iommu_groups/reserved_regions
Date: January 2017
KernelVersion: v4.11
Contact: Eric Auger <eric.auger@redhat.com>
Description: /sys/kernel/iommu_groups/reserved_regions list IOVA
regions that are reserved. Not necessarily all
reserved regions are listed. This is typically used to
output direct-mapped, MSI, non mappable regions. Each
region is described on a single line: the 1st field is
the base IOVA, the second is the end IOVA and the third
field describes the type of the region.

Просмотреть файл

@ -143,3 +143,13 @@ So, this provides a way for drivers to avoid those error messages on calls
where allocation failures are not a problem, and shouldn't bother the logs. where allocation failures are not a problem, and shouldn't bother the logs.
NOTE: At the moment DMA_ATTR_NO_WARN is only implemented on PowerPC. NOTE: At the moment DMA_ATTR_NO_WARN is only implemented on PowerPC.
DMA_ATTR_PRIVILEGED
------------------------------
Some advanced peripherals such as remote processors and GPUs perform
accesses to DMA buffers in both privileged "supervisor" and unprivileged
"user" modes. This attribute is used to indicate to the DMA-mapping
subsystem that the buffer is fully accessible at the elevated privilege
level (and ideally inaccessible or at least read-only at the
lesser-privileged levels).

Просмотреть файл

@ -106,6 +106,16 @@
use by PCI use by PCI
Format: <irq>,<irq>... Format: <irq>,<irq>...
acpi_mask_gpe= [HW,ACPI]
Due to the existence of _Lxx/_Exx, some GPEs triggered
by unsupported hardware/firmware features can result in
GPE floodings that cannot be automatically disabled by
the GPE dispatcher.
This facility can be used to prevent such uncontrolled
GPE floodings.
Format: <int>
Support masking of GPEs numbered from 0x00 to 0x7f.
acpi_no_auto_serialize [HW,ACPI] acpi_no_auto_serialize [HW,ACPI]
Disable auto-serialization of AML methods Disable auto-serialization of AML methods
AML control methods that contain the opcodes to create AML control methods that contain the opcodes to create
@ -3811,10 +3821,11 @@
it if 0 is given (See Documentation/cgroup-v1/memory.txt) it if 0 is given (See Documentation/cgroup-v1/memory.txt)
swiotlb= [ARM,IA-64,PPC,MIPS,X86] swiotlb= [ARM,IA-64,PPC,MIPS,X86]
Format: { <int> | force } Format: { <int> | force | noforce }
<int> -- Number of I/O TLB slabs <int> -- Number of I/O TLB slabs
force -- force using of bounce buffers even if they force -- force using of bounce buffers even if they
wouldn't be automatically used by the kernel wouldn't be automatically used by the kernel
noforce -- Never use bounce buffers (for debugging)
switches= [HW,M68k] switches= [HW,M68k]

Просмотреть файл

@ -54,9 +54,9 @@ This is the hardware sector size of the device, in bytes.
io_poll (RW) io_poll (RW)
------------ ------------
When read, this file shows the total number of block IO polls and how When read, this file shows whether polling is enabled (1) or disabled
many returned success. Writing '0' to this file will disable polling (0). Writing '0' to this file will disable polling for this device.
for this device. Writing any non-zero value will enable this feature. Writing any non-zero value will enable this feature.
io_poll_delay (RW) io_poll_delay (RW)
------------------ ------------------

Просмотреть файл

@ -62,6 +62,9 @@ wants to support one of the below features, it should adapt the bindings below.
"irq" and "wakeup" names are recognized by I2C core, other names are "irq" and "wakeup" names are recognized by I2C core, other names are
left to individual drivers. left to individual drivers.
- host-notify
device uses SMBus host notify protocol instead of interrupt line.
- multi-master - multi-master
states that there is another master active on this bus. The OS can use states that there is another master active on this bus. The OS can use
this information to adapt power management to keep the arbitration awake this information to adapt power management to keep the arbitration awake
@ -81,6 +84,11 @@ Binding may contain optional "interrupts" property, describing interrupts
used by the device. I2C core will assign "irq" interrupt (or the very first used by the device. I2C core will assign "irq" interrupt (or the very first
interrupt if not using interrupt names) as primary interrupt for the slave. interrupt if not using interrupt names) as primary interrupt for the slave.
Alternatively, devices supporting SMbus Host Notify, and connected to
adapters that support this feature, may use "host-notify" property. I2C
core will create a virtual interrupt for Host Notify and assign it as
primary interrupt for the slave.
Also, if device is marked as a wakeup source, I2C core will set up "wakeup" Also, if device is marked as a wakeup source, I2C core will set up "wakeup"
interrupt for the device. If "wakeup" interrupt name is not present in the interrupt for the device. If "wakeup" interrupt name is not present in the
binding, then primary interrupt will be used as wakeup interrupt. binding, then primary interrupt will be used as wakeup interrupt.

Просмотреть файл

@ -8,8 +8,9 @@ This driver provides a simple power button event via an Interrupt.
Required properties: Required properties:
- compatible: should be "ti,tps65217-pwrbutton" or "ti,tps65218-pwrbutton" - compatible: should be "ti,tps65217-pwrbutton" or "ti,tps65218-pwrbutton"
Required properties for TPS65218: Required properties:
- interrupts: should be one of the following - interrupts: should be one of the following
- <2>: For controllers compatible with tps65217
- <3 IRQ_TYPE_EDGE_BOTH>: For controllers compatible with tps65218 - <3 IRQ_TYPE_EDGE_BOTH>: For controllers compatible with tps65218
Examples: Examples:
@ -17,6 +18,7 @@ Examples:
&tps { &tps {
tps65217-pwrbutton { tps65217-pwrbutton {
compatible = "ti,tps65217-pwrbutton"; compatible = "ti,tps65217-pwrbutton";
interrupts = <2>;
}; };
}; };

Просмотреть файл

@ -15,6 +15,9 @@ Properties:
Second cell specifies the irq distribution mode to cores Second cell specifies the irq distribution mode to cores
0=Round Robin; 1=cpu0, 2=cpu1, 4=cpu2, 8=cpu3 0=Round Robin; 1=cpu0, 2=cpu1, 4=cpu2, 8=cpu3
The second cell in interrupts property is deprecated and may be ignored by
the kernel.
intc accessed via the special ARC AUX register interface, hence "reg" property intc accessed via the special ARC AUX register interface, hence "reg" property
is not specified. is not specified.

Просмотреть файл

@ -5,7 +5,7 @@ Required properties:
- compatible: "sigma,smp8758-nand" - compatible: "sigma,smp8758-nand"
- reg: address/size of nfc_reg, nfc_mem, and pbus_reg - reg: address/size of nfc_reg, nfc_mem, and pbus_reg
- dmas: reference to the DMA channel used by the controller - dmas: reference to the DMA channel used by the controller
- dma-names: "nfc_sbox" - dma-names: "rxtx"
- clocks: reference to the system clock - clocks: reference to the system clock
- #address-cells: <1> - #address-cells: <1>
- #size-cells: <0> - #size-cells: <0>
@ -17,9 +17,9 @@ Example:
nandc: nand-controller@2c000 { nandc: nand-controller@2c000 {
compatible = "sigma,smp8758-nand"; compatible = "sigma,smp8758-nand";
reg = <0x2c000 0x30 0x2d000 0x800 0x20000 0x1000>; reg = <0x2c000 0x30>, <0x2d000 0x800>, <0x20000 0x1000>;
dmas = <&dma0 3>; dmas = <&dma0 3>;
dma-names = "nfc_sbox"; dma-names = "rxtx";
clocks = <&clkgen SYS_CLK>; clocks = <&clkgen SYS_CLK>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;

Просмотреть файл

@ -7,7 +7,7 @@ have dual GMAC each represented by a child node..
* Ethernet controller node * Ethernet controller node
Required properties: Required properties:
- compatible: Should be "mediatek,mt7623-eth" - compatible: Should be "mediatek,mt2701-eth"
- reg: Address and length of the register set for the device - reg: Address and length of the register set for the device
- interrupts: Should contain the three frame engines interrupts in numeric - interrupts: Should contain the three frame engines interrupts in numeric
order. These are fe_int0, fe_int1 and fe_int2. order. These are fe_int0, fe_int1 and fe_int2.

Просмотреть файл

@ -19,8 +19,9 @@ Optional Properties:
specifications. If neither of these are specified, the default is to specifications. If neither of these are specified, the default is to
assume clause 22. assume clause 22.
If the phy's identifier is known then the list may contain an entry If the PHY reports an incorrect ID (or none at all) then the
of the form: "ethernet-phy-idAAAA.BBBB" where "compatible" list may contain an entry with the correct PHY ID in the
form: "ethernet-phy-idAAAA.BBBB" where
AAAA - The value of the 16 bit Phy Identifier 1 register as AAAA - The value of the 16 bit Phy Identifier 1 register as
4 hex digits. This is the chip vendor OUI bits 3:18 4 hex digits. This is the chip vendor OUI bits 3:18
BBBB - The value of the 16 bit Phy Identifier 2 register as BBBB - The value of the 16 bit Phy Identifier 2 register as

Просмотреть файл

@ -3,9 +3,11 @@
Required properties: Required properties:
- reg - The ID number for the phy, usually a small integer - reg - The ID number for the phy, usually a small integer
- ti,rx-internal-delay - RGMII Receive Clock Delay - see dt-bindings/net/ti-dp83867.h - ti,rx-internal-delay - RGMII Receive Clock Delay - see dt-bindings/net/ti-dp83867.h
for applicable values for applicable values. Required only if interface type is
PHY_INTERFACE_MODE_RGMII_ID or PHY_INTERFACE_MODE_RGMII_RXID
- ti,tx-internal-delay - RGMII Transmit Clock Delay - see dt-bindings/net/ti-dp83867.h - ti,tx-internal-delay - RGMII Transmit Clock Delay - see dt-bindings/net/ti-dp83867.h
for applicable values for applicable values. Required only if interface type is
PHY_INTERFACE_MODE_RGMII_ID or PHY_INTERFACE_MODE_RGMII_TXID
- ti,fifo-depth - Transmitt FIFO depth- see dt-bindings/net/ti-dp83867.h - ti,fifo-depth - Transmitt FIFO depth- see dt-bindings/net/ti-dp83867.h
for applicable values for applicable values

Просмотреть файл

@ -2,11 +2,16 @@ TPS65217 Charger
Required Properties: Required Properties:
-compatible: "ti,tps65217-charger" -compatible: "ti,tps65217-charger"
-interrupts: TPS65217 interrupt numbers for the AC and USB charger input change.
Should be <0> for the USB charger and <1> for the AC adapter.
-interrupt-names: Should be "USB" and "AC"
This node is a subnode of the tps65217 PMIC. This node is a subnode of the tps65217 PMIC.
Example: Example:
tps65217-charger { tps65217-charger {
compatible = "ti,tps65090-charger"; compatible = "ti,tps65217-charger";
interrupts = <0>, <1>;
interrupt-names = "USB", "AC";
}; };

Просмотреть файл

@ -1,17 +1,23 @@
Renesas MSIOF spi controller Renesas MSIOF spi controller
Required properties: Required properties:
- compatible : "renesas,msiof-<soctype>" for SoCs, - compatible : "renesas,msiof-r8a7790" (R-Car H2)
"renesas,sh-msiof" for SuperH, or
"renesas,sh-mobile-msiof" for SH Mobile series.
Examples with soctypes are:
"renesas,msiof-r8a7790" (R-Car H2)
"renesas,msiof-r8a7791" (R-Car M2-W) "renesas,msiof-r8a7791" (R-Car M2-W)
"renesas,msiof-r8a7792" (R-Car V2H) "renesas,msiof-r8a7792" (R-Car V2H)
"renesas,msiof-r8a7793" (R-Car M2-N) "renesas,msiof-r8a7793" (R-Car M2-N)
"renesas,msiof-r8a7794" (R-Car E2) "renesas,msiof-r8a7794" (R-Car E2)
"renesas,msiof-r8a7796" (R-Car M3-W) "renesas,msiof-r8a7796" (R-Car M3-W)
"renesas,msiof-sh73a0" (SH-Mobile AG5) "renesas,msiof-sh73a0" (SH-Mobile AG5)
"renesas,sh-mobile-msiof" (generic SH-Mobile compatibile device)
"renesas,rcar-gen2-msiof" (generic R-Car Gen2 compatible device)
"renesas,rcar-gen3-msiof" (generic R-Car Gen3 compatible device)
"renesas,sh-msiof" (deprecated)
When compatible with the generic version, nodes
must list the SoC-specific version corresponding
to the platform first followed by the generic
version.
- reg : A list of offsets and lengths of the register sets for - reg : A list of offsets and lengths of the register sets for
the device. the device.
If only one register set is present, it is to be used If only one register set is present, it is to be used
@ -61,7 +67,8 @@ Documentation/devicetree/bindings/pinctrl/renesas,*.
Example: Example:
msiof0: spi@e6e20000 { msiof0: spi@e6e20000 {
compatible = "renesas,msiof-r8a7791"; compatible = "renesas,msiof-r8a7791",
"renesas,rcar-gen2-msiof";
reg = <0 0xe6e20000 0 0x0064>; reg = <0 0xe6e20000 0 0x0064>;
interrupts = <0 156 IRQ_TYPE_LEVEL_HIGH>; interrupts = <0 156 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&mstp0_clks R8A7791_CLK_MSIOF0>; clocks = <&mstp0_clks R8A7791_CLK_MSIOF0>;

Просмотреть файл

@ -55,21 +55,6 @@ Device Drivers DMA Management
.. kernel-doc:: drivers/base/dma-mapping.c .. kernel-doc:: drivers/base/dma-mapping.c
:export: :export:
Device Drivers Power Management
-------------------------------
.. kernel-doc:: drivers/base/power/main.c
:export:
Device Drivers ACPI Support
---------------------------
.. kernel-doc:: drivers/acpi/scan.c
:export:
.. kernel-doc:: drivers/acpi/scan.c
:internal:
Device drivers PnP support Device drivers PnP support
-------------------------- --------------------------

Просмотреть файл

@ -212,10 +212,11 @@ asynchronous manner and the value may not be very precise. To see a precise
snapshot of a moment, you can see /proc/<pid>/smaps file and scan page table. snapshot of a moment, you can see /proc/<pid>/smaps file and scan page table.
It's slow but very precise. It's slow but very precise.
Table 1-2: Contents of the status files (as of 4.1) Table 1-2: Contents of the status files (as of 4.8)
.............................................................................. ..............................................................................
Field Content Field Content
Name filename of the executable Name filename of the executable
Umask file mode creation mask
State state (R is running, S is sleeping, D is sleeping State state (R is running, S is sleeping, D is sleeping
in an uninterruptible wait, Z is zombie, in an uninterruptible wait, Z is zombie,
T is traced or stopped) T is traced or stopped)
@ -226,7 +227,6 @@ Table 1-2: Contents of the status files (as of 4.1)
TracerPid PID of process tracing this process (0 if not) TracerPid PID of process tracing this process (0 if not)
Uid Real, effective, saved set, and file system UIDs Uid Real, effective, saved set, and file system UIDs
Gid Real, effective, saved set, and file system GIDs Gid Real, effective, saved set, and file system GIDs
Umask file mode creation mask
FDSize number of file descriptor slots currently allocated FDSize number of file descriptor slots currently allocated
Groups supplementary group list Groups supplementary group list
NStgid descendant namespace thread group ID hierarchy NStgid descendant namespace thread group ID hierarchy
@ -236,6 +236,7 @@ Table 1-2: Contents of the status files (as of 4.1)
VmPeak peak virtual memory size VmPeak peak virtual memory size
VmSize total program size VmSize total program size
VmLck locked memory size VmLck locked memory size
VmPin pinned memory size
VmHWM peak resident set size ("high water mark") VmHWM peak resident set size ("high water mark")
VmRSS size of memory portions. It contains the three VmRSS size of memory portions. It contains the three
following parts (VmRSS = RssAnon + RssFile + RssShmem) following parts (VmRSS = RssAnon + RssFile + RssShmem)

Просмотреть файл

@ -5,8 +5,8 @@ platform_labels - INTEGER
possible to configure forwarding for label values equal to or possible to configure forwarding for label values equal to or
greater than the number of platform labels. greater than the number of platform labels.
A dense utliziation of the entries in the platform label table A dense utilization of the entries in the platform label table
is possible and expected aas the platform labels are locally is possible and expected as the platform labels are locally
allocated. allocated.
If the number of platform label table entries is set to 0 no If the number of platform label table entries is set to 0 no

Просмотреть файл

@ -35,9 +35,7 @@ only one way to cause the system to go into the Suspend-To-RAM state (write
The default suspend mode (ie. the one to be used without writing anything into The default suspend mode (ie. the one to be used without writing anything into
/sys/power/mem_sleep) is either "deep" (if Suspend-To-RAM is supported) or /sys/power/mem_sleep) is either "deep" (if Suspend-To-RAM is supported) or
"s2idle", but it can be overridden by the value of the "mem_sleep_default" "s2idle", but it can be overridden by the value of the "mem_sleep_default"
parameter in the kernel command line. On some ACPI-based systems, depending on parameter in the kernel command line.
the information in the FADT, the default may be "s2idle" even if Suspend-To-RAM
is supported.
The properties of all of the sleep states are described below. The properties of all of the sleep states are described below.

Просмотреть файл

@ -127,22 +127,22 @@ the VFIO when devices are unbound from the driver.
Physical Device Driver Interface Physical Device Driver Interface
-------------------------------- --------------------------------
The physical device driver interface provides the parent_ops[3] structure to The physical device driver interface provides the mdev_parent_ops[3] structure
define the APIs to manage work in the mediated core driver that is related to to define the APIs to manage work in the mediated core driver that is related
the physical device. to the physical device.
The structures in the parent_ops structure are as follows: The structures in the mdev_parent_ops structure are as follows:
* dev_attr_groups: attributes of the parent device * dev_attr_groups: attributes of the parent device
* mdev_attr_groups: attributes of the mediated device * mdev_attr_groups: attributes of the mediated device
* supported_config: attributes to define supported configurations * supported_config: attributes to define supported configurations
The functions in the parent_ops structure are as follows: The functions in the mdev_parent_ops structure are as follows:
* create: allocate basic resources in a driver for a mediated device * create: allocate basic resources in a driver for a mediated device
* remove: free resources in a driver when a mediated device is destroyed * remove: free resources in a driver when a mediated device is destroyed
The callbacks in the parent_ops structure are as follows: The callbacks in the mdev_parent_ops structure are as follows:
* open: open callback of mediated device * open: open callback of mediated device
* close: close callback of mediated device * close: close callback of mediated device
@ -151,14 +151,14 @@ The callbacks in the parent_ops structure are as follows:
* write: write emulation callback * write: write emulation callback
* mmap: mmap emulation callback * mmap: mmap emulation callback
A driver should use the parent_ops structure in the function call to register A driver should use the mdev_parent_ops structure in the function call to
itself with the mdev core driver: register itself with the mdev core driver:
extern int mdev_register_device(struct device *dev, extern int mdev_register_device(struct device *dev,
const struct parent_ops *ops); const struct mdev_parent_ops *ops);
However, the parent_ops structure is not required in the function call that a However, the mdev_parent_ops structure is not required in the function call
driver should use to unregister itself with the mdev core driver: that a driver should use to unregister itself with the mdev core driver:
extern void mdev_unregister_device(struct device *dev); extern void mdev_unregister_device(struct device *dev);
@ -223,6 +223,9 @@ Directories and files under the sysfs for Each Physical Device
sprintf(buf, "%s-%s", dev_driver_string(parent->dev), group->name); sprintf(buf, "%s-%s", dev_driver_string(parent->dev), group->name);
(or using mdev_parent_dev(mdev) to arrive at the parent device outside
of the core mdev code)
* device_api * device_api
This attribute should show which device API is being created, for example, This attribute should show which device API is being created, for example,
@ -394,5 +397,5 @@ References
[1] See Documentation/vfio.txt for more information on VFIO. [1] See Documentation/vfio.txt for more information on VFIO.
[2] struct mdev_driver in include/linux/mdev.h [2] struct mdev_driver in include/linux/mdev.h
[3] struct parent_ops in include/linux/mdev.h [3] struct mdev_parent_ops in include/linux/mdev.h
[4] struct vfio_iommu_driver_ops in include/linux/vfio.h [4] struct vfio_iommu_driver_ops in include/linux/vfio.h

Просмотреть файл

@ -0,0 +1,42 @@
Page fragments
--------------
A page fragment is an arbitrary-length arbitrary-offset area of memory
which resides within a 0 or higher order compound page. Multiple
fragments within that page are individually refcounted, in the page's
reference counter.
The page_frag functions, page_frag_alloc and page_frag_free, provide a
simple allocation framework for page fragments. This is used by the
network stack and network device drivers to provide a backing region of
memory for use as either an sk_buff->head, or to be used in the "frags"
portion of skb_shared_info.
In order to make use of the page fragment APIs a backing page fragment
cache is needed. This provides a central point for the fragment allocation
and tracks allows multiple calls to make use of a cached page. The
advantage to doing this is that multiple calls to get_page can be avoided
which can be expensive at allocation time. However due to the nature of
this caching it is required that any calls to the cache be protected by
either a per-cpu limitation, or a per-cpu limitation and forcing interrupts
to be disabled when executing the fragment allocation.
The network stack uses two separate caches per CPU to handle fragment
allocation. The netdev_alloc_cache is used by callers making use of the
__netdev_alloc_frag and __netdev_alloc_skb calls. The napi_alloc_cache is
used by callers of the __napi_alloc_frag and __napi_alloc_skb calls. The
main difference between these two calls is the context in which they may be
called. The "netdev" prefixed functions are usable in any context as these
functions will disable interrupts, while the "napi" prefixed functions are
only usable within the softirq context.
Many network device drivers use a similar methodology for allocating page
fragments, but the page fragments are cached at the ring or descriptor
level. In order to enable these cases it is necessary to provide a generic
way of tearing down a page cache. For this reason __page_frag_cache_drain
was implemented. It allows for freeing multiple references from a single
page via a single call. The advantage to doing this is that it allows for
cleaning up the multiple references that were added to a page in order to
avoid calling get_page per allocation.
Alexander Duyck, Nov 29, 2016.

Просмотреть файл

@ -81,7 +81,6 @@ Descriptions of section entries:
Q: Patchwork web based patch tracking system site Q: Patchwork web based patch tracking system site
T: SCM tree type and location. T: SCM tree type and location.
Type is one of: git, hg, quilt, stgit, topgit Type is one of: git, hg, quilt, stgit, topgit
B: Bug tracking system location.
S: Status, one of the following: S: Status, one of the following:
Supported: Someone is actually paid to look after this. Supported: Someone is actually paid to look after this.
Maintained: Someone actually looks after it. Maintained: Someone actually looks after it.
@ -977,6 +976,7 @@ M: Russell King <linux@armlinux.org.uk>
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
W: http://www.armlinux.org.uk/ W: http://www.armlinux.org.uk/
S: Maintained S: Maintained
T: git git://git.armlinux.org.uk/~rmk/linux-arm.git
F: arch/arm/ F: arch/arm/
ARM SUB-ARCHITECTURES ARM SUB-ARCHITECTURES
@ -1154,6 +1154,7 @@ ARM/CLKDEV SUPPORT
M: Russell King <linux@armlinux.org.uk> M: Russell King <linux@armlinux.org.uk>
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
S: Maintained S: Maintained
T: git git://git.armlinux.org.uk/~rmk/linux-arm.git clkdev
F: arch/arm/include/asm/clkdev.h F: arch/arm/include/asm/clkdev.h
F: drivers/clk/clkdev.c F: drivers/clk/clkdev.c
@ -1689,6 +1690,7 @@ M: Krzysztof Kozlowski <krzk@kernel.org>
R: Javier Martinez Canillas <javier@osg.samsung.com> R: Javier Martinez Canillas <javier@osg.samsung.com>
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
L: linux-samsung-soc@vger.kernel.org (moderated for non-subscribers) L: linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
Q: https://patchwork.kernel.org/project/linux-samsung-soc/list/
S: Maintained S: Maintained
F: arch/arm/boot/dts/s3c* F: arch/arm/boot/dts/s3c*
F: arch/arm/boot/dts/s5p* F: arch/arm/boot/dts/s5p*
@ -2194,14 +2196,6 @@ L: alsa-devel@alsa-project.org (moderated for non-subscribers)
S: Supported S: Supported
F: sound/soc/atmel F: sound/soc/atmel
ATMEL DMA DRIVER
M: Nicolas Ferre <nicolas.ferre@atmel.com>
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
S: Supported
F: drivers/dma/at_hdmac.c
F: drivers/dma/at_hdmac_regs.h
F: include/linux/platform_data/dma-atmel.h
ATMEL XDMA DRIVER ATMEL XDMA DRIVER
M: Ludovic Desroches <ludovic.desroches@atmel.com> M: Ludovic Desroches <ludovic.desroches@atmel.com>
L: linux-arm-kernel@lists.infradead.org L: linux-arm-kernel@lists.infradead.org
@ -3573,7 +3567,7 @@ F: drivers/infiniband/hw/cxgb3/
F: include/uapi/rdma/cxgb3-abi.h F: include/uapi/rdma/cxgb3-abi.h
CXGB4 ETHERNET DRIVER (CXGB4) CXGB4 ETHERNET DRIVER (CXGB4)
M: Hariprasad S <hariprasad@chelsio.com> M: Ganesh Goudar <ganeshgr@chelsio.com>
L: netdev@vger.kernel.org L: netdev@vger.kernel.org
W: http://www.chelsio.com W: http://www.chelsio.com
S: Supported S: Supported
@ -3800,6 +3794,7 @@ F: include/linux/devcoredump.h
DEVICE FREQUENCY (DEVFREQ) DEVICE FREQUENCY (DEVFREQ)
M: MyungJoo Ham <myungjoo.ham@samsung.com> M: MyungJoo Ham <myungjoo.ham@samsung.com>
M: Kyungmin Park <kyungmin.park@samsung.com> M: Kyungmin Park <kyungmin.park@samsung.com>
R: Chanwoo Choi <cw00.choi@samsung.com>
L: linux-pm@vger.kernel.org L: linux-pm@vger.kernel.org
T: git git://git.kernel.org/pub/scm/linux/kernel/git/mzx/devfreq.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/mzx/devfreq.git
S: Maintained S: Maintained
@ -4105,18 +4100,24 @@ F: drivers/gpu/drm/bridge/
DRM DRIVER FOR BOCHS VIRTUAL GPU DRM DRIVER FOR BOCHS VIRTUAL GPU
M: Gerd Hoffmann <kraxel@redhat.com> M: Gerd Hoffmann <kraxel@redhat.com>
S: Odd Fixes L: virtualization@lists.linux-foundation.org
T: git git://git.kraxel.org/linux drm-qemu
S: Maintained
F: drivers/gpu/drm/bochs/ F: drivers/gpu/drm/bochs/
DRM DRIVER FOR QEMU'S CIRRUS DEVICE DRM DRIVER FOR QEMU'S CIRRUS DEVICE
M: Dave Airlie <airlied@redhat.com> M: Dave Airlie <airlied@redhat.com>
S: Odd Fixes M: Gerd Hoffmann <kraxel@redhat.com>
L: virtualization@lists.linux-foundation.org
T: git git://git.kraxel.org/linux drm-qemu
S: Obsolete
W: https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/
F: drivers/gpu/drm/cirrus/ F: drivers/gpu/drm/cirrus/
RADEON and AMDGPU DRM DRIVERS RADEON and AMDGPU DRM DRIVERS
M: Alex Deucher <alexander.deucher@amd.com> M: Alex Deucher <alexander.deucher@amd.com>
M: Christian König <christian.koenig@amd.com> M: Christian König <christian.koenig@amd.com>
L: dri-devel@lists.freedesktop.org L: amd-gfx@lists.freedesktop.org
T: git git://people.freedesktop.org/~agd5f/linux T: git git://people.freedesktop.org/~agd5f/linux
S: Supported S: Supported
F: drivers/gpu/drm/radeon/ F: drivers/gpu/drm/radeon/
@ -4152,7 +4153,7 @@ F: Documentation/gpu/i915.rst
INTEL GVT-g DRIVERS (Intel GPU Virtualization) INTEL GVT-g DRIVERS (Intel GPU Virtualization)
M: Zhenyu Wang <zhenyuw@linux.intel.com> M: Zhenyu Wang <zhenyuw@linux.intel.com>
M: Zhi Wang <zhi.a.wang@intel.com> M: Zhi Wang <zhi.a.wang@intel.com>
L: igvt-g-dev@lists.01.org L: intel-gvt-dev@lists.freedesktop.org
L: intel-gfx@lists.freedesktop.org L: intel-gfx@lists.freedesktop.org
W: https://01.org/igvt-g W: https://01.org/igvt-g
T: git https://github.com/01org/gvt-linux.git T: git https://github.com/01org/gvt-linux.git
@ -4303,7 +4304,10 @@ F: Documentation/devicetree/bindings/display/renesas,du.txt
DRM DRIVER FOR QXL VIRTUAL GPU DRM DRIVER FOR QXL VIRTUAL GPU
M: Dave Airlie <airlied@redhat.com> M: Dave Airlie <airlied@redhat.com>
S: Odd Fixes M: Gerd Hoffmann <kraxel@redhat.com>
L: virtualization@lists.linux-foundation.org
T: git git://git.kraxel.org/linux drm-qemu
S: Maintained
F: drivers/gpu/drm/qxl/ F: drivers/gpu/drm/qxl/
F: include/uapi/drm/qxl_drm.h F: include/uapi/drm/qxl_drm.h
@ -5080,9 +5084,11 @@ F: drivers/net/wan/dlci.c
F: drivers/net/wan/sdla.c F: drivers/net/wan/sdla.c
FRAMEBUFFER LAYER FRAMEBUFFER LAYER
M: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
L: linux-fbdev@vger.kernel.org L: linux-fbdev@vger.kernel.org
T: git git://github.com/bzolnier/linux.git
Q: http://patchwork.kernel.org/project/linux-fbdev/list/ Q: http://patchwork.kernel.org/project/linux-fbdev/list/
S: Orphan S: Maintained
F: Documentation/fb/ F: Documentation/fb/
F: drivers/video/ F: drivers/video/
F: include/video/ F: include/video/
@ -5504,6 +5510,7 @@ M: Alex Elder <elder@kernel.org>
M: Greg Kroah-Hartman <gregkh@linuxfoundation.org> M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
S: Maintained S: Maintained
F: drivers/staging/greybus/ F: drivers/staging/greybus/
L: greybus-dev@lists.linaro.org
GREYBUS AUDIO PROTOCOLS DRIVERS GREYBUS AUDIO PROTOCOLS DRIVERS
M: Vaibhav Agarwal <vaibhav.sr@gmail.com> M: Vaibhav Agarwal <vaibhav.sr@gmail.com>
@ -5961,6 +5968,7 @@ F: drivers/media/platform/sti/hva
Hyper-V CORE AND DRIVERS Hyper-V CORE AND DRIVERS
M: "K. Y. Srinivasan" <kys@microsoft.com> M: "K. Y. Srinivasan" <kys@microsoft.com>
M: Haiyang Zhang <haiyangz@microsoft.com> M: Haiyang Zhang <haiyangz@microsoft.com>
M: Stephen Hemminger <sthemmin@microsoft.com>
L: devel@linuxdriverproject.org L: devel@linuxdriverproject.org
S: Maintained S: Maintained
F: arch/x86/include/asm/mshyperv.h F: arch/x86/include/asm/mshyperv.h
@ -7701,8 +7709,10 @@ F: drivers/net/dsa/mv88e6xxx/
F: Documentation/devicetree/bindings/net/dsa/marvell.txt F: Documentation/devicetree/bindings/net/dsa/marvell.txt
MARVELL ARMADA DRM SUPPORT MARVELL ARMADA DRM SUPPORT
M: Russell King <rmk+kernel@armlinux.org.uk> M: Russell King <linux@armlinux.org.uk>
S: Maintained S: Maintained
T: git git://git.armlinux.org.uk/~rmk/linux-arm.git drm-armada-devel
T: git git://git.armlinux.org.uk/~rmk/linux-arm.git drm-armada-fixes
F: drivers/gpu/drm/armada/ F: drivers/gpu/drm/armada/
F: include/uapi/drm/armada_drm.h F: include/uapi/drm/armada_drm.h
F: Documentation/devicetree/bindings/display/armada/ F: Documentation/devicetree/bindings/display/armada/
@ -8174,6 +8184,15 @@ S: Maintained
F: drivers/tty/serial/atmel_serial.c F: drivers/tty/serial/atmel_serial.c
F: include/linux/atmel_serial.h F: include/linux/atmel_serial.h
MICROCHIP / ATMEL DMA DRIVER
M: Ludovic Desroches <ludovic.desroches@microchip.com>
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
L: dmaengine@vger.kernel.org
S: Supported
F: drivers/dma/at_hdmac.c
F: drivers/dma/at_hdmac_regs.h
F: include/linux/platform_data/dma-atmel.h
MICROCHIP / ATMEL ISC DRIVER MICROCHIP / ATMEL ISC DRIVER
M: Songjun Wu <songjun.wu@microchip.com> M: Songjun Wu <songjun.wu@microchip.com>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
@ -8852,17 +8871,22 @@ F: drivers/video/fbdev/nvidia/
NVM EXPRESS DRIVER NVM EXPRESS DRIVER
M: Keith Busch <keith.busch@intel.com> M: Keith Busch <keith.busch@intel.com>
M: Jens Axboe <axboe@fb.com> M: Jens Axboe <axboe@fb.com>
M: Christoph Hellwig <hch@lst.de>
M: Sagi Grimberg <sagi@grimberg.me>
L: linux-nvme@lists.infradead.org L: linux-nvme@lists.infradead.org
T: git git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git T: git://git.infradead.org/nvme.git
W: https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux-block/ W: http://git.infradead.org/nvme.git
S: Supported S: Supported
F: drivers/nvme/host/ F: drivers/nvme/host/
F: include/linux/nvme.h F: include/linux/nvme.h
F: include/uapi/linux/nvme_ioctl.h
NVM EXPRESS TARGET DRIVER NVM EXPRESS TARGET DRIVER
M: Christoph Hellwig <hch@lst.de> M: Christoph Hellwig <hch@lst.de>
M: Sagi Grimberg <sagi@grimberg.me> M: Sagi Grimberg <sagi@grimberg.me>
L: linux-nvme@lists.infradead.org L: linux-nvme@lists.infradead.org
T: git://git.infradead.org/nvme.git
W: http://git.infradead.org/nvme.git
S: Supported S: Supported
F: drivers/nvme/target/ F: drivers/nvme/target/
@ -8893,8 +8917,10 @@ S: Supported
F: drivers/nfc/nxp-nci F: drivers/nfc/nxp-nci
NXP TDA998X DRM DRIVER NXP TDA998X DRM DRIVER
M: Russell King <rmk+kernel@armlinux.org.uk> M: Russell King <linux@armlinux.org.uk>
S: Supported S: Supported
T: git git://git.armlinux.org.uk/~rmk/linux-arm.git drm-tda998x-devel
T: git git://git.armlinux.org.uk/~rmk/linux-arm.git drm-tda998x-fixes
F: drivers/gpu/drm/i2c/tda998x_drv.c F: drivers/gpu/drm/i2c/tda998x_drv.c
F: include/drm/i2c/tda998x.h F: include/drm/i2c/tda998x.h
@ -9842,7 +9868,7 @@ M: Mark Rutland <mark.rutland@arm.com>
M: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> M: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
L: linux-arm-kernel@lists.infradead.org L: linux-arm-kernel@lists.infradead.org
S: Maintained S: Maintained
F: drivers/firmware/psci.c F: drivers/firmware/psci*.c
F: include/linux/psci.h F: include/linux/psci.h
F: include/uapi/linux/psci.h F: include/uapi/linux/psci.h
@ -10169,7 +10195,6 @@ F: drivers/media/tuners/qt1010*
QUALCOMM ATHEROS ATH9K WIRELESS DRIVER QUALCOMM ATHEROS ATH9K WIRELESS DRIVER
M: QCA ath9k Development <ath9k-devel@qca.qualcomm.com> M: QCA ath9k Development <ath9k-devel@qca.qualcomm.com>
L: linux-wireless@vger.kernel.org L: linux-wireless@vger.kernel.org
L: ath9k-devel@lists.ath9k.org
W: http://wireless.kernel.org/en/users/Drivers/ath9k W: http://wireless.kernel.org/en/users/Drivers/ath9k
S: Supported S: Supported
F: drivers/net/wireless/ath/ath9k/ F: drivers/net/wireless/ath/ath9k/
@ -13040,7 +13065,7 @@ F: drivers/input/serio/userio.c
F: include/uapi/linux/userio.h F: include/uapi/linux/userio.h
VIRTIO CONSOLE DRIVER VIRTIO CONSOLE DRIVER
M: Amit Shah <amit.shah@redhat.com> M: Amit Shah <amit@kernel.org>
L: virtualization@lists.linux-foundation.org L: virtualization@lists.linux-foundation.org
S: Maintained S: Maintained
F: drivers/char/virtio_console.c F: drivers/char/virtio_console.c
@ -13075,6 +13100,7 @@ M: David Airlie <airlied@linux.ie>
M: Gerd Hoffmann <kraxel@redhat.com> M: Gerd Hoffmann <kraxel@redhat.com>
L: dri-devel@lists.freedesktop.org L: dri-devel@lists.freedesktop.org
L: virtualization@lists.linux-foundation.org L: virtualization@lists.linux-foundation.org
T: git git://git.kraxel.org/linux drm-qemu
S: Maintained S: Maintained
F: drivers/gpu/drm/virtio/ F: drivers/gpu/drm/virtio/
F: include/uapi/linux/virtio_gpu.h F: include/uapi/linux/virtio_gpu.h
@ -13426,6 +13452,7 @@ F: arch/x86/
X86 PLATFORM DRIVERS X86 PLATFORM DRIVERS
M: Darren Hart <dvhart@infradead.org> M: Darren Hart <dvhart@infradead.org>
M: Andy Shevchenko <andy@infradead.org>
L: platform-driver-x86@vger.kernel.org L: platform-driver-x86@vger.kernel.org
T: git git://git.infradead.org/users/dvhart/linux-platform-drivers-x86.git T: git git://git.infradead.org/users/dvhart/linux-platform-drivers-x86.git
S: Maintained S: Maintained
@ -13527,11 +13554,11 @@ F: arch/x86/xen/*swiotlb*
F: drivers/xen/*swiotlb* F: drivers/xen/*swiotlb*
XFS FILESYSTEM XFS FILESYSTEM
M: Dave Chinner <david@fromorbit.com> M: Darrick J. Wong <darrick.wong@oracle.com>
M: linux-xfs@vger.kernel.org M: linux-xfs@vger.kernel.org
L: linux-xfs@vger.kernel.org L: linux-xfs@vger.kernel.org
W: http://xfs.org/ W: http://xfs.org/
T: git git://git.kernel.org/pub/scm/linux/kernel/git/dgc/linux-xfs.git T: git git://git.kernel.org/pub/scm/fs/xfs/xfs-linux.git
S: Supported S: Supported
F: Documentation/filesystems/xfs.txt F: Documentation/filesystems/xfs.txt
F: fs/xfs/ F: fs/xfs/
@ -13597,6 +13624,7 @@ F: drivers/net/hamradio/z8530.h
ZBUD COMPRESSED PAGE ALLOCATOR ZBUD COMPRESSED PAGE ALLOCATOR
M: Seth Jennings <sjenning@redhat.com> M: Seth Jennings <sjenning@redhat.com>
M: Dan Streetman <ddstreet@ieee.org>
L: linux-mm@kvack.org L: linux-mm@kvack.org
S: Maintained S: Maintained
F: mm/zbud.c F: mm/zbud.c
@ -13652,6 +13680,7 @@ F: Documentation/vm/zsmalloc.txt
ZSWAP COMPRESSED SWAP CACHING ZSWAP COMPRESSED SWAP CACHING
M: Seth Jennings <sjenning@redhat.com> M: Seth Jennings <sjenning@redhat.com>
M: Dan Streetman <ddstreet@ieee.org>
L: linux-mm@kvack.org L: linux-mm@kvack.org
S: Maintained S: Maintained
F: mm/zswap.c F: mm/zswap.c

Просмотреть файл

@ -1,8 +1,8 @@
VERSION = 4 VERSION = 4
PATCHLEVEL = 10 PATCHLEVEL = 10
SUBLEVEL = 0 SUBLEVEL = 0
EXTRAVERSION = -rc2 EXTRAVERSION = -rc7
NAME = Roaring Lionus NAME = Fearless Coyote
# *DOCUMENTATION* # *DOCUMENTATION*
# To see a list of typical targets execute "make help" # To see a list of typical targets execute "make help"
@ -797,7 +797,7 @@ KBUILD_CFLAGS += $(call cc-option,-Werror=incompatible-pointer-types)
KBUILD_ARFLAGS := $(call ar-option,D) KBUILD_ARFLAGS := $(call ar-option,D)
# check for 'asm goto' # check for 'asm goto'
ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-goto.sh $(CC)), y) ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-goto.sh $(CC) $(KBUILD_CFLAGS)), y)
KBUILD_CFLAGS += -DCC_HAVE_ASM_GOTO KBUILD_CFLAGS += -DCC_HAVE_ASM_GOTO
KBUILD_AFLAGS += -DCC_HAVE_ASM_GOTO KBUILD_AFLAGS += -DCC_HAVE_ASM_GOTO
endif endif

Просмотреть файл

@ -29,7 +29,7 @@ config ARC
select HAVE_KPROBES select HAVE_KPROBES
select HAVE_KRETPROBES select HAVE_KRETPROBES
select HAVE_MEMBLOCK select HAVE_MEMBLOCK
select HAVE_MOD_ARCH_SPECIFIC if ARC_DW2_UNWIND select HAVE_MOD_ARCH_SPECIFIC
select HAVE_OPROFILE select HAVE_OPROFILE
select HAVE_PERF_EVENTS select HAVE_PERF_EVENTS
select HANDLE_DOMAIN_IRQ select HANDLE_DOMAIN_IRQ

Просмотреть файл

@ -67,7 +67,7 @@ extern unsigned long perip_base, perip_end;
#define ARC_REG_IC_PTAG_HI 0x1F #define ARC_REG_IC_PTAG_HI 0x1F
/* Bit val in IC_CTRL */ /* Bit val in IC_CTRL */
#define IC_CTRL_CACHE_DISABLE 0x1 #define IC_CTRL_DIS 0x1
/* Data cache related Auxiliary registers */ /* Data cache related Auxiliary registers */
#define ARC_REG_DC_BCR 0x72 /* Build Config reg */ #define ARC_REG_DC_BCR 0x72 /* Build Config reg */
@ -80,8 +80,9 @@ extern unsigned long perip_base, perip_end;
#define ARC_REG_DC_PTAG_HI 0x5F #define ARC_REG_DC_PTAG_HI 0x5F
/* Bit val in DC_CTRL */ /* Bit val in DC_CTRL */
#define DC_CTRL_INV_MODE_FLUSH 0x40 #define DC_CTRL_DIS 0x001
#define DC_CTRL_FLUSH_STATUS 0x100 #define DC_CTRL_INV_MODE_FLUSH 0x040
#define DC_CTRL_FLUSH_STATUS 0x100
/*System-level cache (L2 cache) related Auxiliary registers */ /*System-level cache (L2 cache) related Auxiliary registers */
#define ARC_REG_SLC_CFG 0x901 #define ARC_REG_SLC_CFG 0x901
@ -92,8 +93,8 @@ extern unsigned long perip_base, perip_end;
#define ARC_REG_SLC_RGN_END 0x916 #define ARC_REG_SLC_RGN_END 0x916
/* Bit val in SLC_CONTROL */ /* Bit val in SLC_CONTROL */
#define SLC_CTRL_DIS 0x001
#define SLC_CTRL_IM 0x040 #define SLC_CTRL_IM 0x040
#define SLC_CTRL_DISABLE 0x001
#define SLC_CTRL_BUSY 0x100 #define SLC_CTRL_BUSY 0x100
#define SLC_CTRL_RGN_OP_INV 0x200 #define SLC_CTRL_RGN_OP_INV 0x200

Просмотреть файл

@ -26,7 +26,9 @@ static inline void __delay(unsigned long loops)
" lp 1f \n" " lp 1f \n"
" nop \n" " nop \n"
"1: \n" "1: \n"
: : "r"(loops)); :
: "r"(loops)
: "lp_count");
} }
extern void __bad_udelay(void); extern void __bad_udelay(void);

Просмотреть файл

@ -16,6 +16,7 @@
; ;
; Now manually save: r12, sp, fp, gp, r25 ; Now manually save: r12, sp, fp, gp, r25
PUSH r30
PUSH r12 PUSH r12
; Saving pt_regs->sp correctly requires some extra work due to the way ; Saving pt_regs->sp correctly requires some extra work due to the way
@ -72,6 +73,7 @@
POPAX AUX_USER_SP POPAX AUX_USER_SP
1: 1:
POP r12 POP r12
POP r30
.endm .endm

Просмотреть файл

@ -14,13 +14,13 @@
#include <asm-generic/module.h> #include <asm-generic/module.h>
#ifdef CONFIG_ARC_DW2_UNWIND
struct mod_arch_specific { struct mod_arch_specific {
#ifdef CONFIG_ARC_DW2_UNWIND
void *unw_info; void *unw_info;
int unw_sec_idx; int unw_sec_idx;
#endif
const char *secstr; const char *secstr;
}; };
#endif
#define MODULE_PROC_FAMILY "ARC700" #define MODULE_PROC_FAMILY "ARC700"

Просмотреть файл

@ -84,7 +84,7 @@ struct pt_regs {
unsigned long fp; unsigned long fp;
unsigned long sp; /* user/kernel sp depending on where we came from */ unsigned long sp; /* user/kernel sp depending on where we came from */
unsigned long r12; unsigned long r12, r30;
/*------- Below list auto saved by h/w -----------*/ /*------- Below list auto saved by h/w -----------*/
unsigned long r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11; unsigned long r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11;

Просмотреть файл

@ -31,6 +31,7 @@ extern int root_mountflags, end_mem;
void setup_processor(void); void setup_processor(void);
void __init setup_arch_memory(void); void __init setup_arch_memory(void);
long __init arc_get_mem_sz(void);
/* Helpers used in arc_*_mumbojumbo routines */ /* Helpers used in arc_*_mumbojumbo routines */
#define IS_AVAIL1(v, s) ((v) ? s : "") #define IS_AVAIL1(v, s) ((v) ? s : "")

Просмотреть файл

@ -71,14 +71,14 @@ ENTRY(stext)
GET_CPU_ID r5 GET_CPU_ID r5
cmp r5, 0 cmp r5, 0
mov.nz r0, r5 mov.nz r0, r5
#ifdef CONFIG_ARC_SMP_HALT_ON_RESET bz .Lmaster_proceed
; Non-Master can proceed as system would be booted sufficiently
jnz first_lines_of_secondary
#else
; Non-Masters wait for Master to boot enough and bring them up ; Non-Masters wait for Master to boot enough and bring them up
jnz arc_platform_smp_wait_to_boot ; when they resume, tail-call to entry point
#endif mov blink, @first_lines_of_secondary
; Master falls thru j arc_platform_smp_wait_to_boot
.Lmaster_proceed:
#endif #endif
; Clear BSS before updating any globals ; Clear BSS before updating any globals

Просмотреть файл

@ -77,20 +77,20 @@ void arc_init_IRQ(void)
static void arcv2_irq_mask(struct irq_data *data) static void arcv2_irq_mask(struct irq_data *data)
{ {
write_aux_reg(AUX_IRQ_SELECT, data->irq); write_aux_reg(AUX_IRQ_SELECT, data->hwirq);
write_aux_reg(AUX_IRQ_ENABLE, 0); write_aux_reg(AUX_IRQ_ENABLE, 0);
} }
static void arcv2_irq_unmask(struct irq_data *data) static void arcv2_irq_unmask(struct irq_data *data)
{ {
write_aux_reg(AUX_IRQ_SELECT, data->irq); write_aux_reg(AUX_IRQ_SELECT, data->hwirq);
write_aux_reg(AUX_IRQ_ENABLE, 1); write_aux_reg(AUX_IRQ_ENABLE, 1);
} }
void arcv2_irq_enable(struct irq_data *data) void arcv2_irq_enable(struct irq_data *data)
{ {
/* set default priority */ /* set default priority */
write_aux_reg(AUX_IRQ_SELECT, data->irq); write_aux_reg(AUX_IRQ_SELECT, data->hwirq);
write_aux_reg(AUX_IRQ_PRIORITY, ARCV2_IRQ_DEF_PRIO); write_aux_reg(AUX_IRQ_PRIORITY, ARCV2_IRQ_DEF_PRIO);
/* /*

Просмотреть файл

@ -57,7 +57,7 @@ static void arc_irq_mask(struct irq_data *data)
unsigned int ienb; unsigned int ienb;
ienb = read_aux_reg(AUX_IENABLE); ienb = read_aux_reg(AUX_IENABLE);
ienb &= ~(1 << data->irq); ienb &= ~(1 << data->hwirq);
write_aux_reg(AUX_IENABLE, ienb); write_aux_reg(AUX_IENABLE, ienb);
} }
@ -66,7 +66,7 @@ static void arc_irq_unmask(struct irq_data *data)
unsigned int ienb; unsigned int ienb;
ienb = read_aux_reg(AUX_IENABLE); ienb = read_aux_reg(AUX_IENABLE);
ienb |= (1 << data->irq); ienb |= (1 << data->hwirq);
write_aux_reg(AUX_IENABLE, ienb); write_aux_reg(AUX_IENABLE, ienb);
} }

Просмотреть файл

@ -10,6 +10,7 @@
#include <linux/smp.h> #include <linux/smp.h>
#include <linux/irq.h> #include <linux/irq.h>
#include <linux/irqchip/chained_irq.h>
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <soc/arc/mcip.h> #include <soc/arc/mcip.h>
#include <asm/irqflags-arcv2.h> #include <asm/irqflags-arcv2.h>
@ -92,11 +93,10 @@ static void mcip_probe_n_setup(void)
READ_BCR(ARC_REG_MCIP_BCR, mp); READ_BCR(ARC_REG_MCIP_BCR, mp);
sprintf(smp_cpuinfo_buf, sprintf(smp_cpuinfo_buf,
"Extn [SMP]\t: ARConnect (v%d): %d cores with %s%s%s%s%s\n", "Extn [SMP]\t: ARConnect (v%d): %d cores with %s%s%s%s\n",
mp.ver, mp.num_cores, mp.ver, mp.num_cores,
IS_AVAIL1(mp.ipi, "IPI "), IS_AVAIL1(mp.ipi, "IPI "),
IS_AVAIL1(mp.idu, "IDU "), IS_AVAIL1(mp.idu, "IDU "),
IS_AVAIL1(mp.llm, "LLM "),
IS_AVAIL1(mp.dbg, "DEBUG "), IS_AVAIL1(mp.dbg, "DEBUG "),
IS_AVAIL1(mp.gfrc, "GFRC")); IS_AVAIL1(mp.gfrc, "GFRC"));
@ -174,7 +174,6 @@ static void idu_irq_unmask(struct irq_data *data)
raw_spin_unlock_irqrestore(&mcip_lock, flags); raw_spin_unlock_irqrestore(&mcip_lock, flags);
} }
#ifdef CONFIG_SMP
static int static int
idu_irq_set_affinity(struct irq_data *data, const struct cpumask *cpumask, idu_irq_set_affinity(struct irq_data *data, const struct cpumask *cpumask,
bool force) bool force)
@ -204,12 +203,27 @@ idu_irq_set_affinity(struct irq_data *data, const struct cpumask *cpumask,
return IRQ_SET_MASK_OK; return IRQ_SET_MASK_OK;
} }
#endif
static void idu_irq_enable(struct irq_data *data)
{
/*
* By default send all common interrupts to all available online CPUs.
* The affinity of common interrupts in IDU must be set manually since
* in some cases the kernel will not call irq_set_affinity() by itself:
* 1. When the kernel is not configured with support of SMP.
* 2. When the kernel is configured with support of SMP but upper
* interrupt controllers does not support setting of the affinity
* and cannot propagate it to IDU.
*/
idu_irq_set_affinity(data, cpu_online_mask, false);
idu_irq_unmask(data);
}
static struct irq_chip idu_irq_chip = { static struct irq_chip idu_irq_chip = {
.name = "MCIP IDU Intc", .name = "MCIP IDU Intc",
.irq_mask = idu_irq_mask, .irq_mask = idu_irq_mask,
.irq_unmask = idu_irq_unmask, .irq_unmask = idu_irq_unmask,
.irq_enable = idu_irq_enable,
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
.irq_set_affinity = idu_irq_set_affinity, .irq_set_affinity = idu_irq_set_affinity,
#endif #endif
@ -221,10 +235,13 @@ static irq_hw_number_t idu_first_hwirq;
static void idu_cascade_isr(struct irq_desc *desc) static void idu_cascade_isr(struct irq_desc *desc)
{ {
struct irq_domain *idu_domain = irq_desc_get_handler_data(desc); struct irq_domain *idu_domain = irq_desc_get_handler_data(desc);
struct irq_chip *core_chip = irq_desc_get_chip(desc);
irq_hw_number_t core_hwirq = irqd_to_hwirq(irq_desc_get_irq_data(desc)); irq_hw_number_t core_hwirq = irqd_to_hwirq(irq_desc_get_irq_data(desc));
irq_hw_number_t idu_hwirq = core_hwirq - idu_first_hwirq; irq_hw_number_t idu_hwirq = core_hwirq - idu_first_hwirq;
chained_irq_enter(core_chip, desc);
generic_handle_irq(irq_find_mapping(idu_domain, idu_hwirq)); generic_handle_irq(irq_find_mapping(idu_domain, idu_hwirq));
chained_irq_exit(core_chip, desc);
} }
static int idu_irq_map(struct irq_domain *d, unsigned int virq, irq_hw_number_t hwirq) static int idu_irq_map(struct irq_domain *d, unsigned int virq, irq_hw_number_t hwirq)
@ -239,36 +256,14 @@ static int idu_irq_xlate(struct irq_domain *d, struct device_node *n,
const u32 *intspec, unsigned int intsize, const u32 *intspec, unsigned int intsize,
irq_hw_number_t *out_hwirq, unsigned int *out_type) irq_hw_number_t *out_hwirq, unsigned int *out_type)
{ {
irq_hw_number_t hwirq = *out_hwirq = intspec[0]; /*
int distri = intspec[1]; * Ignore value of interrupt distribution mode for common interrupts in
unsigned long flags; * IDU which resides in intspec[1] since setting an affinity using value
* from Device Tree is deprecated in ARC.
*/
*out_hwirq = intspec[0];
*out_type = IRQ_TYPE_NONE; *out_type = IRQ_TYPE_NONE;
/* XXX: validate distribution scheme again online cpu mask */
if (distri == 0) {
/* 0 - Round Robin to all cpus, otherwise 1 bit per core */
raw_spin_lock_irqsave(&mcip_lock, flags);
idu_set_dest(hwirq, BIT(num_online_cpus()) - 1);
idu_set_mode(hwirq, IDU_M_TRIG_LEVEL, IDU_M_DISTRI_RR);
raw_spin_unlock_irqrestore(&mcip_lock, flags);
} else {
/*
* DEST based distribution for Level Triggered intr can only
* have 1 CPU, so generalize it to always contain 1 cpu
*/
int cpu = ffs(distri);
if (cpu != fls(distri))
pr_warn("IDU irq %lx distri mode set to cpu %x\n",
hwirq, cpu);
raw_spin_lock_irqsave(&mcip_lock, flags);
idu_set_dest(hwirq, cpu);
idu_set_mode(hwirq, IDU_M_TRIG_LEVEL, IDU_M_DISTRI_DEST);
raw_spin_unlock_irqrestore(&mcip_lock, flags);
}
return 0; return 0;
} }

Просмотреть файл

@ -32,8 +32,8 @@ int module_frob_arch_sections(Elf_Ehdr *hdr, Elf_Shdr *sechdrs,
#ifdef CONFIG_ARC_DW2_UNWIND #ifdef CONFIG_ARC_DW2_UNWIND
mod->arch.unw_sec_idx = 0; mod->arch.unw_sec_idx = 0;
mod->arch.unw_info = NULL; mod->arch.unw_info = NULL;
mod->arch.secstr = secstr;
#endif #endif
mod->arch.secstr = secstr;
return 0; return 0;
} }
@ -113,8 +113,10 @@ int apply_relocate_add(Elf32_Shdr *sechdrs,
} }
#ifdef CONFIG_ARC_DW2_UNWIND
if (strcmp(module->arch.secstr+sechdrs[tgtsec].sh_name, ".eh_frame") == 0) if (strcmp(module->arch.secstr+sechdrs[tgtsec].sh_name, ".eh_frame") == 0)
module->arch.unw_sec_idx = tgtsec; module->arch.unw_sec_idx = tgtsec;
#endif
return 0; return 0;

Просмотреть файл

@ -90,22 +90,37 @@ void __init smp_cpus_done(unsigned int max_cpus)
*/ */
static volatile int wake_flag; static volatile int wake_flag;
#ifdef CONFIG_ISA_ARCOMPACT
#define __boot_read(f) f
#define __boot_write(f, v) f = v
#else
#define __boot_read(f) arc_read_uncached_32(&f)
#define __boot_write(f, v) arc_write_uncached_32(&f, v)
#endif
static void arc_default_smp_cpu_kick(int cpu, unsigned long pc) static void arc_default_smp_cpu_kick(int cpu, unsigned long pc)
{ {
BUG_ON(cpu == 0); BUG_ON(cpu == 0);
wake_flag = cpu;
__boot_write(wake_flag, cpu);
} }
void arc_platform_smp_wait_to_boot(int cpu) void arc_platform_smp_wait_to_boot(int cpu)
{ {
while (wake_flag != cpu) /* for halt-on-reset, we've waited already */
if (IS_ENABLED(CONFIG_ARC_SMP_HALT_ON_RESET))
return;
while (__boot_read(wake_flag) != cpu)
; ;
wake_flag = 0; __boot_write(wake_flag, 0);
__asm__ __volatile__("j @first_lines_of_secondary \n");
} }
const char *arc_platform_smp_cpuinfo(void) const char *arc_platform_smp_cpuinfo(void)
{ {
return plat_smp_ops.info ? : ""; return plat_smp_ops.info ? : "";

Просмотреть файл

@ -241,8 +241,9 @@ int misaligned_fixup(unsigned long address, struct pt_regs *regs,
if (state.fault) if (state.fault)
goto fault; goto fault;
/* clear any remanants of delay slot */
if (delay_mode(regs)) { if (delay_mode(regs)) {
regs->ret = regs->bta; regs->ret = regs->bta ~1U;
regs->status32 &= ~STATUS_DE_MASK; regs->status32 &= ~STATUS_DE_MASK;
} else { } else {
regs->ret += state.instr_len; regs->ret += state.instr_len;

Просмотреть файл

@ -23,7 +23,7 @@
static int l2_line_sz; static int l2_line_sz;
static int ioc_exists; static int ioc_exists;
int slc_enable = 1, ioc_enable = 0; int slc_enable = 1, ioc_enable = 1;
unsigned long perip_base = ARC_UNCACHED_ADDR_SPACE; /* legacy value for boot */ unsigned long perip_base = ARC_UNCACHED_ADDR_SPACE; /* legacy value for boot */
unsigned long perip_end = 0xFFFFFFFF; /* legacy value */ unsigned long perip_end = 0xFFFFFFFF; /* legacy value */
@ -271,7 +271,11 @@ void __cache_line_loop_v2(phys_addr_t paddr, unsigned long vaddr,
/* /*
* For ARC700 MMUv3 I-cache and D-cache flushes * For ARC700 MMUv3 I-cache and D-cache flushes
* Also reused for HS38 aliasing I-cache configuration * - ARC700 programming model requires paddr and vaddr be passed in seperate
* AUX registers (*_IV*L and *_PTAG respectively) irrespective of whether the
* caches actually alias or not.
* - For HS38, only the aliasing I-cache configuration uses the PTAG reg
* (non aliasing I-cache version doesn't; while D-cache can't possibly alias)
*/ */
static inline static inline
void __cache_line_loop_v3(phys_addr_t paddr, unsigned long vaddr, void __cache_line_loop_v3(phys_addr_t paddr, unsigned long vaddr,
@ -458,6 +462,21 @@ static inline void __dc_entire_op(const int op)
__after_dc_op(op); __after_dc_op(op);
} }
static inline void __dc_disable(void)
{
const int r = ARC_REG_DC_CTRL;
__dc_entire_op(OP_FLUSH_N_INV);
write_aux_reg(r, read_aux_reg(r) | DC_CTRL_DIS);
}
static void __dc_enable(void)
{
const int r = ARC_REG_DC_CTRL;
write_aux_reg(r, read_aux_reg(r) & ~DC_CTRL_DIS);
}
/* For kernel mappings cache operation: index is same as paddr */ /* For kernel mappings cache operation: index is same as paddr */
#define __dc_line_op_k(p, sz, op) __dc_line_op(p, p, sz, op) #define __dc_line_op_k(p, sz, op) __dc_line_op(p, p, sz, op)
@ -483,6 +502,8 @@ static inline void __dc_line_op(phys_addr_t paddr, unsigned long vaddr,
#else #else
#define __dc_entire_op(op) #define __dc_entire_op(op)
#define __dc_disable()
#define __dc_enable()
#define __dc_line_op(paddr, vaddr, sz, op) #define __dc_line_op(paddr, vaddr, sz, op)
#define __dc_line_op_k(paddr, sz, op) #define __dc_line_op_k(paddr, sz, op)
@ -597,6 +618,40 @@ noinline void slc_op(phys_addr_t paddr, unsigned long sz, const int op)
#endif #endif
} }
noinline static void slc_entire_op(const int op)
{
unsigned int ctrl, r = ARC_REG_SLC_CTRL;
ctrl = read_aux_reg(r);
if (!(op & OP_FLUSH)) /* i.e. OP_INV */
ctrl &= ~SLC_CTRL_IM; /* clear IM: Disable flush before Inv */
else
ctrl |= SLC_CTRL_IM;
write_aux_reg(r, ctrl);
write_aux_reg(ARC_REG_SLC_INVALIDATE, 1);
/* Important to wait for flush to complete */
while (read_aux_reg(r) & SLC_CTRL_BUSY);
}
static inline void arc_slc_disable(void)
{
const int r = ARC_REG_SLC_CTRL;
slc_entire_op(OP_FLUSH_N_INV);
write_aux_reg(r, read_aux_reg(r) | SLC_CTRL_DIS);
}
static inline void arc_slc_enable(void)
{
const int r = ARC_REG_SLC_CTRL;
write_aux_reg(r, read_aux_reg(r) & ~SLC_CTRL_DIS);
}
/*********************************************************** /***********************************************************
* Exported APIs * Exported APIs
*/ */
@ -923,21 +978,54 @@ SYSCALL_DEFINE3(cacheflush, uint32_t, start, uint32_t, sz, uint32_t, flags)
return 0; return 0;
} }
void arc_cache_init(void) /*
* IO-Coherency (IOC) setup rules:
*
* 1. Needs to be at system level, so only once by Master core
* Non-Masters need not be accessing caches at that time
* - They are either HALT_ON_RESET and kick started much later or
* - if run on reset, need to ensure that arc_platform_smp_wait_to_boot()
* doesn't perturb caches or coherency unit
*
* 2. caches (L1 and SLC) need to be purged (flush+inv) before setting up IOC,
* otherwise any straggler data might behave strangely post IOC enabling
*
* 3. All Caches need to be disabled when setting up IOC to elide any in-flight
* Coherency transactions
*/
noinline void __init arc_ioc_setup(void)
{ {
unsigned int __maybe_unused cpu = smp_processor_id(); unsigned int ap_sz;
char str[256];
printk(arc_cache_mumbojumbo(0, str, sizeof(str))); /* Flush + invalidate + disable L1 dcache */
__dc_disable();
/* Flush + invalidate SLC */
if (read_aux_reg(ARC_REG_SLC_BCR))
slc_entire_op(OP_FLUSH_N_INV);
/* IOC Aperture start: TDB: handle non default CONFIG_LINUX_LINK_BASE */
write_aux_reg(ARC_REG_IO_COH_AP0_BASE, 0x80000);
/* /*
* Only master CPU needs to execute rest of function: * IOC Aperture size:
* - Assume SMP so all cores will have same cache config so * decoded as 2 ^ (SIZE + 2) KB: so setting 0x11 implies 512M
* any geomtry checks will be same for all * TBD: fix for PGU + 1GB of low mem
* - IOC setup / dma callbacks only need to be setup once * TBD: fix for PAE
*/ */
if (cpu) ap_sz = order_base_2(arc_get_mem_sz()/1024) - 2;
return; write_aux_reg(ARC_REG_IO_COH_AP0_SIZE, ap_sz);
write_aux_reg(ARC_REG_IO_COH_PARTIAL, 1);
write_aux_reg(ARC_REG_IO_COH_ENABLE, 1);
/* Re-enable L1 dcache */
__dc_enable();
}
void __init arc_cache_init_master(void)
{
unsigned int __maybe_unused cpu = smp_processor_id();
if (IS_ENABLED(CONFIG_ARC_HAS_ICACHE)) { if (IS_ENABLED(CONFIG_ARC_HAS_ICACHE)) {
struct cpuinfo_arc_cache *ic = &cpuinfo_arc700[cpu].icache; struct cpuinfo_arc_cache *ic = &cpuinfo_arc700[cpu].icache;
@ -985,30 +1073,14 @@ void arc_cache_init(void)
} }
} }
if (is_isa_arcv2() && l2_line_sz && !slc_enable) { /* Note that SLC disable not formally supported till HS 3.0 */
if (is_isa_arcv2() && l2_line_sz && !slc_enable)
arc_slc_disable();
/* IM set : flush before invalidate */ if (is_isa_arcv2() && ioc_enable)
write_aux_reg(ARC_REG_SLC_CTRL, arc_ioc_setup();
read_aux_reg(ARC_REG_SLC_CTRL) | SLC_CTRL_IM);
write_aux_reg(ARC_REG_SLC_INVALIDATE, 1);
/* Important to wait for flush to complete */
while (read_aux_reg(ARC_REG_SLC_CTRL) & SLC_CTRL_BUSY);
write_aux_reg(ARC_REG_SLC_CTRL,
read_aux_reg(ARC_REG_SLC_CTRL) | SLC_CTRL_DISABLE);
}
if (is_isa_arcv2() && ioc_enable) { if (is_isa_arcv2() && ioc_enable) {
/* IO coherency base - 0x8z */
write_aux_reg(ARC_REG_IO_COH_AP0_BASE, 0x80000);
/* IO coherency aperture size - 512Mb: 0x8z-0xAz */
write_aux_reg(ARC_REG_IO_COH_AP0_SIZE, 0x11);
/* Enable partial writes */
write_aux_reg(ARC_REG_IO_COH_PARTIAL, 1);
/* Enable IO coherency */
write_aux_reg(ARC_REG_IO_COH_ENABLE, 1);
__dma_cache_wback_inv = __dma_cache_wback_inv_ioc; __dma_cache_wback_inv = __dma_cache_wback_inv_ioc;
__dma_cache_inv = __dma_cache_inv_ioc; __dma_cache_inv = __dma_cache_inv_ioc;
__dma_cache_wback = __dma_cache_wback_ioc; __dma_cache_wback = __dma_cache_wback_ioc;
@ -1022,3 +1094,20 @@ void arc_cache_init(void)
__dma_cache_wback = __dma_cache_wback_l1; __dma_cache_wback = __dma_cache_wback_l1;
} }
} }
void __ref arc_cache_init(void)
{
unsigned int __maybe_unused cpu = smp_processor_id();
char str[256];
printk(arc_cache_mumbojumbo(0, str, sizeof(str)));
/*
* Only master CPU needs to execute rest of function:
* - Assume SMP so all cores will have same cache config so
* any geomtry checks will be same for all
* - IOC setup / dma callbacks only need to be setup once
*/
if (!cpu)
arc_cache_init_master();
}

Просмотреть файл

@ -40,6 +40,11 @@ struct pglist_data node_data[MAX_NUMNODES] __read_mostly;
EXPORT_SYMBOL(node_data); EXPORT_SYMBOL(node_data);
#endif #endif
long __init arc_get_mem_sz(void)
{
return low_mem_sz;
}
/* User can over-ride above with "mem=nnn[KkMm]" in cmdline */ /* User can over-ride above with "mem=nnn[KkMm]" in cmdline */
static int __init setup_mem_sz(char *str) static int __init setup_mem_sz(char *str)
{ {

Просмотреть файл

@ -1502,8 +1502,7 @@ source kernel/Kconfig.preempt
config HZ_FIXED config HZ_FIXED
int int
default 200 if ARCH_EBSA110 || ARCH_S3C24XX || \ default 200 if ARCH_EBSA110
ARCH_S5PV210 || ARCH_EXYNOS4
default 128 if SOC_AT91RM9200 default 128 if SOC_AT91RM9200
default 0 default 0

Просмотреть файл

@ -501,6 +501,7 @@ dtb-$(CONFIG_ARCH_OMAP3) += \
am3517-evm.dtb \ am3517-evm.dtb \
am3517_mt_ventoux.dtb \ am3517_mt_ventoux.dtb \
logicpd-torpedo-37xx-devkit.dtb \ logicpd-torpedo-37xx-devkit.dtb \
logicpd-som-lv-37xx-devkit.dtb \
omap3430-sdp.dtb \ omap3430-sdp.dtb \
omap3-beagle.dtb \ omap3-beagle.dtb \
omap3-beagle-xm.dtb \ omap3-beagle-xm.dtb \
@ -845,6 +846,7 @@ dtb-$(CONFIG_MACH_SUN8I) += \
sun8i-a83t-allwinner-h8homlet-v2.dtb \ sun8i-a83t-allwinner-h8homlet-v2.dtb \
sun8i-a83t-cubietruck-plus.dtb \ sun8i-a83t-cubietruck-plus.dtb \
sun8i-h3-bananapi-m2-plus.dtb \ sun8i-h3-bananapi-m2-plus.dtb \
sun8i-h3-nanopi-m1.dtb \
sun8i-h3-nanopi-neo.dtb \ sun8i-h3-nanopi-neo.dtb \
sun8i-h3-orangepi-2.dtb \ sun8i-h3-orangepi-2.dtb \
sun8i-h3-orangepi-lite.dtb \ sun8i-h3-orangepi-lite.dtb \

Просмотреть файл

@ -6,8 +6,6 @@
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
#include <dt-bindings/mfd/tps65217.h>
/ { / {
cpus { cpus {
cpu@0 { cpu@0 {
@ -319,13 +317,13 @@
ti,pmic-shutdown-controller; ti,pmic-shutdown-controller;
charger { charger {
interrupts = <TPS65217_IRQ_AC>, <TPS65217_IRQ_USB>; interrupts = <0>, <1>;
interrupts-names = "AC", "USB"; interrupt-names = "USB", "AC";
status = "okay"; status = "okay";
}; };
pwrbutton { pwrbutton {
interrupts = <TPS65217_IRQ_PB>; interrupts = <2>;
status = "okay"; status = "okay";
}; };

Просмотреть файл

@ -170,7 +170,6 @@
AM33XX_IOPAD(0x8fc, PIN_INPUT_PULLUP | MUX_MODE0) /* (G16) mmc0_dat0.mmc0_dat0 */ AM33XX_IOPAD(0x8fc, PIN_INPUT_PULLUP | MUX_MODE0) /* (G16) mmc0_dat0.mmc0_dat0 */
AM33XX_IOPAD(0x900, PIN_INPUT_PULLUP | MUX_MODE0) /* (G17) mmc0_clk.mmc0_clk */ AM33XX_IOPAD(0x900, PIN_INPUT_PULLUP | MUX_MODE0) /* (G17) mmc0_clk.mmc0_clk */
AM33XX_IOPAD(0x904, PIN_INPUT_PULLUP | MUX_MODE0) /* (G18) mmc0_cmd.mmc0_cmd */ AM33XX_IOPAD(0x904, PIN_INPUT_PULLUP | MUX_MODE0) /* (G18) mmc0_cmd.mmc0_cmd */
AM33XX_IOPAD(0x960, PIN_INPUT_PULLUP | MUX_MODE5) /* (C15) spi0_cs1.mmc0_sdcd */
>; >;
}; };

Просмотреть файл

@ -16,6 +16,7 @@
interrupt-parent = <&intc>; interrupt-parent = <&intc>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
chosen { };
aliases { aliases {
i2c0 = &i2c0; i2c0 = &i2c0;

Просмотреть файл

@ -16,6 +16,7 @@
interrupt-parent = <&wakeupgen>; interrupt-parent = <&wakeupgen>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
chosen { };
memory@0 { memory@0 {
device_type = "memory"; device_type = "memory";

Просмотреть файл

@ -62,11 +62,6 @@
linux,default-trigger = "mmc0"; linux,default-trigger = "mmc0";
}; };
}; };
extcon_usb2: extcon_usb2 {
compatible = "linux,extcon-usb-gpio";
id-gpio = <&gpio5 7 GPIO_ACTIVE_HIGH>;
};
}; };
&mmc1 { &mmc1 {
@ -79,3 +74,8 @@
&omap_dwc3_2 { &omap_dwc3_2 {
extcon = <&extcon_usb2>; extcon = <&extcon_usb2>;
}; };
&extcon_usb2 {
id-gpio = <&gpio5 7 GPIO_ACTIVE_HIGH>;
vbus-gpio = <&gpio7 22 GPIO_ACTIVE_HIGH>;
};

Просмотреть файл

@ -23,11 +23,6 @@
reg = <0x0 0x80000000 0x0 0x80000000>; reg = <0x0 0x80000000 0x0 0x80000000>;
}; };
extcon_usb2: extcon_usb2 {
compatible = "linux,extcon-usb-gpio";
id-gpio = <&gpio3 16 GPIO_ACTIVE_HIGH>;
};
status-leds { status-leds {
compatible = "gpio-leds"; compatible = "gpio-leds";
cpu0-led { cpu0-led {
@ -76,6 +71,11 @@
extcon = <&extcon_usb2>; extcon = <&extcon_usb2>;
}; };
&extcon_usb2 {
id-gpio = <&gpio3 16 GPIO_ACTIVE_HIGH>;
vbus-gpio = <&gpio3 26 GPIO_ACTIVE_HIGH>;
};
&mmc1 { &mmc1 {
status = "okay"; status = "okay";
vmmc-supply = <&v3_3d>; vmmc-supply = <&v3_3d>;
@ -87,3 +87,7 @@
&sn65hvs882 { &sn65hvs882 {
load-gpios = <&gpio3 19 GPIO_ACTIVE_LOW>; load-gpios = <&gpio3 19 GPIO_ACTIVE_LOW>;
}; };
&pcie1 {
gpios = <&gpio3 23 GPIO_ACTIVE_HIGH>;
};

Просмотреть файл

@ -303,6 +303,13 @@
gpio-controller; gpio-controller;
#gpio-cells = <2>; #gpio-cells = <2>;
}; };
extcon_usb2: tps659038_usb {
compatible = "ti,palmas-usb-vid";
ti,enable-vbus-detection;
ti,enable-id-detection;
/* ID & VBUS GPIOs provided in board dts */
};
}; };
}; };
@ -369,7 +376,7 @@
}; };
&usb2 { &usb2 {
dr_mode = "otg"; dr_mode = "peripheral";
}; };
&mmc2 { &mmc2 {

Просмотреть файл

@ -160,7 +160,7 @@
axi { axi {
compatible = "simple-bus"; compatible = "simple-bus";
ranges = <0x00000000 0x18000000 0x0011c40a>; ranges = <0x00000000 0x18000000 0x0011c40c>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;

Просмотреть файл

@ -99,6 +99,7 @@
#size-cells = <1>; #size-cells = <1>;
compatible = "m25p64"; compatible = "m25p64";
spi-max-frequency = <30000000>; spi-max-frequency = <30000000>;
m25p,fast-read;
reg = <0>; reg = <0>;
partition@0 { partition@0 {
label = "U-Boot-SPL"; label = "U-Boot-SPL";

Просмотреть файл

@ -12,6 +12,7 @@
interrupt-parent = <&intc>; interrupt-parent = <&intc>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
chosen { };
aliases { aliases {
i2c0 = &i2c1; i2c0 = &i2c1;

Просмотреть файл

@ -12,6 +12,7 @@
interrupt-parent = <&intc>; interrupt-parent = <&intc>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
chosen { };
aliases { aliases {
i2c0 = &i2c1; i2c0 = &i2c1;

Просмотреть файл

@ -18,6 +18,7 @@
compatible = "ti,dra7xx"; compatible = "ti,dra7xx";
interrupt-parent = <&crossbar_mpu>; interrupt-parent = <&crossbar_mpu>;
chosen { };
aliases { aliases {
i2c0 = &i2c1; i2c0 = &i2c1;
@ -1377,6 +1378,7 @@
phy-names = "sata-phy"; phy-names = "sata-phy";
clocks = <&sata_ref_clk>; clocks = <&sata_ref_clk>;
ti,hwmods = "sata"; ti,hwmods = "sata";
ports-implemented = <0x1>;
}; };
rtc: rtc@48838000 { rtc: rtc@48838000 {

Просмотреть файл

@ -75,6 +75,6 @@
ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_25_NS>; ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_25_NS>;
ti,tx-internal-delay = <DP83867_RGMIIDCTL_250_PS>; ti,tx-internal-delay = <DP83867_RGMIIDCTL_250_PS>;
ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_8_B_NIB>; ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_8_B_NIB>;
ti,min-output-imepdance; ti,min-output-impedance;
}; };
}; };

Просмотреть файл

@ -132,3 +132,19 @@
ti,palmas-long-press-seconds = <6>; ti,palmas-long-press-seconds = <6>;
}; };
}; };
&usb2_phy1 {
phy-supply = <&ldo4_reg>;
};
&usb2_phy2 {
phy-supply = <&ldo4_reg>;
};
&dss {
vdda_video-supply = <&ldo5_reg>;
};
&mmc1 {
vmmc_aux-supply = <&ldo1_reg>;
};

Просмотреть файл

@ -31,11 +31,11 @@
}; };
}; };
avic: avic-interrupt-controller@60000000 { avic: interrupt-controller@68000000 {
compatible = "fsl,imx31-avic", "fsl,avic"; compatible = "fsl,imx31-avic", "fsl,avic";
interrupt-controller; interrupt-controller;
#interrupt-cells = <1>; #interrupt-cells = <1>;
reg = <0x60000000 0x100000>; reg = <0x68000000 0x100000>;
}; };
soc { soc {

Просмотреть файл

@ -319,8 +319,6 @@
compatible = "fsl,imx6q-nitrogen6_max-sgtl5000", compatible = "fsl,imx6q-nitrogen6_max-sgtl5000",
"fsl,imx-audio-sgtl5000"; "fsl,imx-audio-sgtl5000";
model = "imx6q-nitrogen6_max-sgtl5000"; model = "imx6q-nitrogen6_max-sgtl5000";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_sgtl5000>;
ssi-controller = <&ssi1>; ssi-controller = <&ssi1>;
audio-codec = <&codec>; audio-codec = <&codec>;
audio-routing = audio-routing =
@ -402,6 +400,8 @@
codec: sgtl5000@0a { codec: sgtl5000@0a {
compatible = "fsl,sgtl5000"; compatible = "fsl,sgtl5000";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_sgtl5000>;
reg = <0x0a>; reg = <0x0a>;
clocks = <&clks IMX6QDL_CLK_CKO>; clocks = <&clks IMX6QDL_CLK_CKO>;
VDDA-supply = <&reg_2p5v>; VDDA-supply = <&reg_2p5v>;

Просмотреть файл

@ -250,8 +250,6 @@
compatible = "fsl,imx6q-nitrogen6_som2-sgtl5000", compatible = "fsl,imx6q-nitrogen6_som2-sgtl5000",
"fsl,imx-audio-sgtl5000"; "fsl,imx-audio-sgtl5000";
model = "imx6q-nitrogen6_som2-sgtl5000"; model = "imx6q-nitrogen6_som2-sgtl5000";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_sgtl5000>;
ssi-controller = <&ssi1>; ssi-controller = <&ssi1>;
audio-codec = <&codec>; audio-codec = <&codec>;
audio-routing = audio-routing =
@ -320,6 +318,8 @@
codec: sgtl5000@0a { codec: sgtl5000@0a {
compatible = "fsl,sgtl5000"; compatible = "fsl,sgtl5000";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_sgtl5000>;
reg = <0x0a>; reg = <0x0a>;
clocks = <&clks IMX6QDL_CLK_CKO>; clocks = <&clks IMX6QDL_CLK_CKO>;
VDDA-supply = <&reg_2p5v>; VDDA-supply = <&reg_2p5v>;

Просмотреть файл

@ -533,7 +533,6 @@
MX6QDL_PAD_SD2_DAT1__SD2_DATA1 0x17071 MX6QDL_PAD_SD2_DAT1__SD2_DATA1 0x17071
MX6QDL_PAD_SD2_DAT2__SD2_DATA2 0x17071 MX6QDL_PAD_SD2_DAT2__SD2_DATA2 0x17071
MX6QDL_PAD_SD2_DAT3__SD2_DATA3 0x17071 MX6QDL_PAD_SD2_DAT3__SD2_DATA3 0x17071
MX6QDL_PAD_NANDF_CS2__GPIO6_IO15 0x000b0
>; >;
}; };

Просмотреть файл

@ -1100,6 +1100,7 @@
interrupts = <0 14 IRQ_TYPE_LEVEL_HIGH>; interrupts = <0 14 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clks IMX6QDL_CLK_EIM_SLOW>; clocks = <&clks IMX6QDL_CLK_EIM_SLOW>;
fsl,weim-cs-gpr = <&gpr>; fsl,weim-cs-gpr = <&gpr>;
status = "disabled";
}; };
ocotp: ocotp@021bc000 { ocotp: ocotp@021bc000 {

Просмотреть файл

@ -900,6 +900,7 @@
reg = <0x021b8000 0x4000>; reg = <0x021b8000 0x4000>;
interrupts = <0 14 IRQ_TYPE_LEVEL_HIGH>; interrupts = <0 14 IRQ_TYPE_LEVEL_HIGH>;
fsl,weim-cs-gpr = <&gpr>; fsl,weim-cs-gpr = <&gpr>;
status = "disabled";
}; };
ocotp: ocotp@021bc000 { ocotp: ocotp@021bc000 {

Просмотреть файл

@ -977,6 +977,7 @@
interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clks IMX6SX_CLK_EIM_SLOW>; clocks = <&clks IMX6SX_CLK_EIM_SLOW>;
fsl,weim-cs-gpr = <&gpr>; fsl,weim-cs-gpr = <&gpr>;
status = "disabled";
}; };
ocotp: ocotp@021bc000 { ocotp: ocotp@021bc000 {

Просмотреть файл

@ -158,7 +158,7 @@
&mmc1 { &mmc1 {
interrupts-extended = <&intc 83 &omap3_pmx_core 0x11a>; interrupts-extended = <&intc 83 &omap3_pmx_core 0x11a>;
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&mmc1_pins &mmc1_cd>; pinctrl-0 = <&mmc1_pins>;
wp-gpios = <&gpio4 30 GPIO_ACTIVE_HIGH>; /* gpio_126 */ wp-gpios = <&gpio4 30 GPIO_ACTIVE_HIGH>; /* gpio_126 */
cd-gpios = <&gpio4 14 IRQ_TYPE_LEVEL_LOW>; /* gpio_110 */ cd-gpios = <&gpio4 14 IRQ_TYPE_LEVEL_LOW>; /* gpio_110 */
vmmc-supply = <&vmmc1>; vmmc-supply = <&vmmc1>;
@ -193,7 +193,8 @@
OMAP3_CORE1_IOPAD(0x214a, PIN_INPUT | MUX_MODE0) /* sdmmc1_dat1.sdmmc1_dat1 */ OMAP3_CORE1_IOPAD(0x214a, PIN_INPUT | MUX_MODE0) /* sdmmc1_dat1.sdmmc1_dat1 */
OMAP3_CORE1_IOPAD(0x214c, PIN_INPUT | MUX_MODE0) /* sdmmc1_dat2.sdmmc1_dat2 */ OMAP3_CORE1_IOPAD(0x214c, PIN_INPUT | MUX_MODE0) /* sdmmc1_dat2.sdmmc1_dat2 */
OMAP3_CORE1_IOPAD(0x214e, PIN_INPUT | MUX_MODE0) /* sdmmc1_dat3.sdmmc1_dat3 */ OMAP3_CORE1_IOPAD(0x214e, PIN_INPUT | MUX_MODE0) /* sdmmc1_dat3.sdmmc1_dat3 */
OMAP3_CORE1_IOPAD(0x2132, PIN_INPUT_PULLUP | MUX_MODE4) /* cam_strobe.gpio_126 sdmmc1_wp*/ OMAP3_CORE1_IOPAD(0x2132, PIN_INPUT_PULLUP | MUX_MODE4) /* cam_strobe.gpio_126 */
OMAP3_CORE1_IOPAD(0x212c, PIN_INPUT_PULLUP | MUX_MODE4) /* cam_d11.gpio_110 */
>; >;
}; };
@ -242,12 +243,6 @@
OMAP3_WKUP_IOPAD(0x2a16, PIN_OUTPUT | PIN_OFF_OUTPUT_LOW | MUX_MODE4) /* sys_boot6.gpio_8 */ OMAP3_WKUP_IOPAD(0x2a16, PIN_OUTPUT | PIN_OFF_OUTPUT_LOW | MUX_MODE4) /* sys_boot6.gpio_8 */
>; >;
}; };
mmc1_cd: pinmux_mmc1_cd {
pinctrl-single,pins = <
OMAP3_WKUP_IOPAD(0x212c, PIN_INPUT_PULLUP | MUX_MODE4) /* cam_d11.gpio_110 */
>;
};
}; };

Просмотреть файл

@ -17,6 +17,7 @@
interrupt-parent = <&intc>; interrupt-parent = <&intc>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
chosen { };
aliases { aliases {
serial0 = &uart1; serial0 = &uart1;

Просмотреть файл

@ -734,6 +734,8 @@
vmmc_aux-supply = <&vsim>; vmmc_aux-supply = <&vsim>;
bus-width = <8>; bus-width = <8>;
non-removable; non-removable;
no-sdio;
no-sd;
}; };
&mmc3 { &mmc3 {

Просмотреть файл

@ -17,6 +17,7 @@
interrupt-parent = <&intc>; interrupt-parent = <&intc>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
chosen { };
aliases { aliases {
i2c0 = &i2c1; i2c0 = &i2c1;

Просмотреть файл

@ -15,6 +15,7 @@
interrupt-parent = <&wakeupgen>; interrupt-parent = <&wakeupgen>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
chosen { };
aliases { aliases {
i2c0 = &i2c1; i2c0 = &i2c1;

Просмотреть файл

@ -17,6 +17,7 @@
compatible = "ti,omap5"; compatible = "ti,omap5";
interrupt-parent = <&wakeupgen>; interrupt-parent = <&wakeupgen>;
chosen { };
aliases { aliases {
i2c0 = &i2c1; i2c0 = &i2c1;
@ -987,6 +988,7 @@
phy-names = "sata-phy"; phy-names = "sata-phy";
clocks = <&sata_ref_clk>; clocks = <&sata_ref_clk>;
ti,hwmods = "sata"; ti,hwmods = "sata";
ports-implemented = <0x1>;
}; };
dss: dss@58000000 { dss: dss@58000000 {

Просмотреть файл

@ -4,6 +4,7 @@
#include <dt-bindings/clock/qcom,gcc-msm8960.h> #include <dt-bindings/clock/qcom,gcc-msm8960.h>
#include <dt-bindings/reset/qcom,gcc-msm8960.h> #include <dt-bindings/reset/qcom,gcc-msm8960.h>
#include <dt-bindings/clock/qcom,mmcc-msm8960.h> #include <dt-bindings/clock/qcom,mmcc-msm8960.h>
#include <dt-bindings/clock/qcom,rpmcc.h>
#include <dt-bindings/soc/qcom,gsbi.h> #include <dt-bindings/soc/qcom,gsbi.h>
#include <dt-bindings/interrupt-controller/irq.h> #include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/interrupt-controller/arm-gic.h> #include <dt-bindings/interrupt-controller/arm-gic.h>
@ -303,6 +304,9 @@
firmware { firmware {
scm { scm {
compatible = "qcom,scm-apq8064"; compatible = "qcom,scm-apq8064";
clocks = <&rpmcc RPM_DAYTONA_FABRIC_CLK>;
clock-names = "core";
}; };
}; };

Просмотреть файл

@ -357,7 +357,7 @@
}; };
amba { amba {
compatible = "arm,amba-bus"; compatible = "simple-bus";
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
ranges; ranges;

Просмотреть файл

@ -140,6 +140,10 @@
cpu-supply = <&reg_dcdc3>; cpu-supply = <&reg_dcdc3>;
}; };
&de {
status = "okay";
};
&ehci0 { &ehci0 {
status = "okay"; status = "okay";
}; };

Просмотреть файл

@ -234,6 +234,7 @@
de: display-engine { de: display-engine {
compatible = "allwinner,sun6i-a31-display-engine"; compatible = "allwinner,sun6i-a31-display-engine";
allwinner,pipelines = <&fe0>; allwinner,pipelines = <&fe0>;
status = "disabled";
}; };
soc@01c00000 { soc@01c00000 {

Просмотреть файл

@ -56,7 +56,7 @@
}; };
&pio { &pio {
mmc2_pins_nrst: mmc2@0 { mmc2_pins_nrst: mmc2-rst-pin {
allwinner,pins = "PC16"; allwinner,pins = "PC16";
allwinner,function = "gpio_out"; allwinner,function = "gpio_out";
allwinner,drive = <SUN4I_PINCTRL_10_MA>; allwinner,drive = <SUN4I_PINCTRL_10_MA>;

Просмотреть файл

@ -81,7 +81,7 @@
#address-cells = <0>; #address-cells = <0>;
interrupt-controller; interrupt-controller;
reg = <0 0x2c001000 0 0x1000>, reg = <0 0x2c001000 0 0x1000>,
<0 0x2c002000 0 0x1000>, <0 0x2c002000 0 0x2000>,
<0 0x2c004000 0 0x2000>, <0 0x2c004000 0 0x2000>,
<0 0x2c006000 0 0x2000>; <0 0x2c006000 0 0x2000>;
interrupts = <1 9 0xf04>; interrupts = <1 9 0xf04>;

Просмотреть файл

@ -131,7 +131,7 @@
#address-cells = <0>; #address-cells = <0>;
interrupt-controller; interrupt-controller;
reg = <0 0x2c001000 0 0x1000>, reg = <0 0x2c001000 0 0x1000>,
<0 0x2c002000 0 0x1000>, <0 0x2c002000 0 0x2000>,
<0 0x2c004000 0 0x2000>, <0 0x2c004000 0 0x2000>,
<0 0x2c006000 0 0x2000>; <0 0x2c006000 0 0x2000>;
interrupts = <1 9 0xf04>; interrupts = <1 9 0xf04>;

Просмотреть файл

@ -153,7 +153,8 @@
switch0phy1: switch1phy0@1 { switch0phy1: switch1phy0@1 {
reg = <1>; reg = <1>;
interrupt-parent = <&switch0>; interrupt-parent = <&switch0>;
interrupts = <1 IRQ_TYPE_LEVEL_HIGH>; }; interrupts = <1 IRQ_TYPE_LEVEL_HIGH>;
};
switch0phy2: switch1phy0@2 { switch0phy2: switch1phy0@2 {
reg = <2>; reg = <2>;
interrupt-parent = <&switch0>; interrupt-parent = <&switch0>;

Просмотреть файл

@ -471,7 +471,7 @@ CONFIG_MESON_WATCHDOG=y
CONFIG_DW_WATCHDOG=y CONFIG_DW_WATCHDOG=y
CONFIG_DIGICOLOR_WATCHDOG=y CONFIG_DIGICOLOR_WATCHDOG=y
CONFIG_BCM2835_WDT=y CONFIG_BCM2835_WDT=y
CONFIG_BCM47XX_WATCHDOG=y CONFIG_BCM47XX_WDT=y
CONFIG_BCM7038_WDT=m CONFIG_BCM7038_WDT=m
CONFIG_BCM_KONA_WDT=y CONFIG_BCM_KONA_WDT=y
CONFIG_MFD_ACT8945A=y CONFIG_MFD_ACT8945A=y
@ -893,7 +893,7 @@ CONFIG_BCM2835_MBOX=y
CONFIG_RASPBERRYPI_FIRMWARE=y CONFIG_RASPBERRYPI_FIRMWARE=y
CONFIG_EFI_VARS=m CONFIG_EFI_VARS=m
CONFIG_EFI_CAPSULE_LOADER=m CONFIG_EFI_CAPSULE_LOADER=m
CONFIG_CONFIG_BCM47XX_NVRAM=y CONFIG_BCM47XX_NVRAM=y
CONFIG_BCM47XX_SPROM=y CONFIG_BCM47XX_SPROM=y
CONFIG_EXT4_FS=y CONFIG_EXT4_FS=y
CONFIG_AUTOFS4_FS=y CONFIG_AUTOFS4_FS=y

Просмотреть файл

@ -86,9 +86,9 @@ CONFIG_IPV6_TUNNEL=m
CONFIG_NETFILTER=y CONFIG_NETFILTER=y
CONFIG_NF_CONNTRACK=m CONFIG_NF_CONNTRACK=m
CONFIG_NF_CONNTRACK_EVENTS=y CONFIG_NF_CONNTRACK_EVENTS=y
CONFIG_NF_CT_PROTO_DCCP=m CONFIG_NF_CT_PROTO_DCCP=y
CONFIG_NF_CT_PROTO_SCTP=m CONFIG_NF_CT_PROTO_SCTP=y
CONFIG_NF_CT_PROTO_UDPLITE=m CONFIG_NF_CT_PROTO_UDPLITE=y
CONFIG_NF_CONNTRACK_AMANDA=m CONFIG_NF_CONNTRACK_AMANDA=m
CONFIG_NF_CONNTRACK_FTP=m CONFIG_NF_CONNTRACK_FTP=m
CONFIG_NF_CONNTRACK_H323=m CONFIG_NF_CONNTRACK_H323=m

Просмотреть файл

@ -94,6 +94,9 @@
#define ARM_CPU_XSCALE_ARCH_V2 0x4000 #define ARM_CPU_XSCALE_ARCH_V2 0x4000
#define ARM_CPU_XSCALE_ARCH_V3 0x6000 #define ARM_CPU_XSCALE_ARCH_V3 0x6000
/* Qualcomm implemented cores */
#define ARM_CPU_PART_SCORPION 0x510002d0
extern unsigned int processor_id; extern unsigned int processor_id;
#ifdef CONFIG_CPU_CP15 #ifdef CONFIG_CPU_CP15

Просмотреть файл

@ -54,6 +54,24 @@ static inline void *return_address(unsigned int level)
#define ftrace_return_address(n) return_address(n) #define ftrace_return_address(n) return_address(n)
#define ARCH_HAS_SYSCALL_MATCH_SYM_NAME
static inline bool arch_syscall_match_sym_name(const char *sym,
const char *name)
{
if (!strcmp(sym, "sys_mmap2"))
sym = "sys_mmap_pgoff";
else if (!strcmp(sym, "sys_statfs64_wrapper"))
sym = "sys_statfs64";
else if (!strcmp(sym, "sys_fstatfs64_wrapper"))
sym = "sys_fstatfs64";
else if (!strcmp(sym, "sys_arm_fadvise64_64"))
sym = "sys_fadvise64_64";
/* Ignore case since sym may start with "SyS" instead of "sys" */
return !strcasecmp(sym, name);
}
#endif /* ifndef __ASSEMBLY__ */ #endif /* ifndef __ASSEMBLY__ */
#endif /* _ASM_ARM_FTRACE */ #endif /* _ASM_ARM_FTRACE */

Просмотреть файл

@ -80,6 +80,11 @@ static inline bool is_kernel_in_hyp_mode(void)
return false; return false;
} }
static inline bool has_vhe(void)
{
return false;
}
/* The section containing the hypervisor idmap text */ /* The section containing the hypervisor idmap text */
extern char __hyp_idmap_text_start[]; extern char __hyp_idmap_text_start[];
extern char __hyp_idmap_text_end[]; extern char __hyp_idmap_text_end[];

Просмотреть файл

@ -1,5 +1,5 @@
#ifndef _ASM_TYPES_H #ifndef _UAPI_ASM_TYPES_H
#define _ASM_TYPES_H #define _UAPI_ASM_TYPES_H
#include <asm-generic/int-ll64.h> #include <asm-generic/int-ll64.h>
@ -37,4 +37,4 @@
#define __UINTPTR_TYPE__ unsigned long #define __UINTPTR_TYPE__ unsigned long
#endif #endif
#endif /* _ASM_TYPES_H */ #endif /* _UAPI_ASM_TYPES_H */

Просмотреть файл

@ -1063,6 +1063,22 @@ static int __init arch_hw_breakpoint_init(void)
return 0; return 0;
} }
/*
* Scorpion CPUs (at least those in APQ8060) seem to set DBGPRSR.SPD
* whenever a WFI is issued, even if the core is not powered down, in
* violation of the architecture. When DBGPRSR.SPD is set, accesses to
* breakpoint and watchpoint registers are treated as undefined, so
* this results in boot time and runtime failures when these are
* accessed and we unexpectedly take a trap.
*
* It's not clear if/how this can be worked around, so we blacklist
* Scorpion CPUs to avoid these issues.
*/
if (read_cpuid_part() == ARM_CPU_PART_SCORPION) {
pr_info("Scorpion CPU detected. Hardware breakpoints and watchpoints disabled\n");
return 0;
}
has_ossr = core_has_os_save_restore(); has_ossr = core_has_os_save_restore();
/* Determine how many BRPs/WRPs are available. */ /* Determine how many BRPs/WRPs are available. */

Просмотреть файл

@ -9,6 +9,7 @@
*/ */
#include <linux/preempt.h> #include <linux/preempt.h>
#include <linux/smp.h> #include <linux/smp.h>
#include <linux/uaccess.h>
#include <asm/smp_plat.h> #include <asm/smp_plat.h>
#include <asm/tlbflush.h> #include <asm/tlbflush.h>
@ -40,8 +41,11 @@ static inline void ipi_flush_tlb_mm(void *arg)
static inline void ipi_flush_tlb_page(void *arg) static inline void ipi_flush_tlb_page(void *arg)
{ {
struct tlb_args *ta = (struct tlb_args *)arg; struct tlb_args *ta = (struct tlb_args *)arg;
unsigned int __ua_flags = uaccess_save_and_enable();
local_flush_tlb_page(ta->ta_vma, ta->ta_start); local_flush_tlb_page(ta->ta_vma, ta->ta_start);
uaccess_restore(__ua_flags);
} }
static inline void ipi_flush_tlb_kernel_page(void *arg) static inline void ipi_flush_tlb_kernel_page(void *arg)
@ -54,8 +58,11 @@ static inline void ipi_flush_tlb_kernel_page(void *arg)
static inline void ipi_flush_tlb_range(void *arg) static inline void ipi_flush_tlb_range(void *arg)
{ {
struct tlb_args *ta = (struct tlb_args *)arg; struct tlb_args *ta = (struct tlb_args *)arg;
unsigned int __ua_flags = uaccess_save_and_enable();
local_flush_tlb_range(ta->ta_vma, ta->ta_start, ta->ta_end); local_flush_tlb_range(ta->ta_vma, ta->ta_start, ta->ta_end);
uaccess_restore(__ua_flags);
} }
static inline void ipi_flush_tlb_kernel_range(void *arg) static inline void ipi_flush_tlb_kernel_range(void *arg)

Просмотреть файл

@ -1099,6 +1099,9 @@ static void cpu_init_hyp_mode(void *dummy)
__cpu_init_hyp_mode(pgd_ptr, hyp_stack_ptr, vector_ptr); __cpu_init_hyp_mode(pgd_ptr, hyp_stack_ptr, vector_ptr);
__cpu_init_stage2(); __cpu_init_stage2();
if (is_kernel_in_hyp_mode())
kvm_timer_init_vhe();
kvm_arm_init_debug(); kvm_arm_init_debug();
} }

Просмотреть файл

@ -31,10 +31,10 @@ static LIST_HEAD(clocks);
static DEFINE_MUTEX(clocks_mutex); static DEFINE_MUTEX(clocks_mutex);
static DEFINE_SPINLOCK(clockfw_lock); static DEFINE_SPINLOCK(clockfw_lock);
static void __clk_enable(struct clk *clk) void davinci_clk_enable(struct clk *clk)
{ {
if (clk->parent) if (clk->parent)
__clk_enable(clk->parent); davinci_clk_enable(clk->parent);
if (clk->usecount++ == 0) { if (clk->usecount++ == 0) {
if (clk->flags & CLK_PSC) if (clk->flags & CLK_PSC)
davinci_psc_config(clk->domain, clk->gpsc, clk->lpsc, davinci_psc_config(clk->domain, clk->gpsc, clk->lpsc,
@ -44,7 +44,7 @@ static void __clk_enable(struct clk *clk)
} }
} }
static void __clk_disable(struct clk *clk) void davinci_clk_disable(struct clk *clk)
{ {
if (WARN_ON(clk->usecount == 0)) if (WARN_ON(clk->usecount == 0))
return; return;
@ -56,7 +56,7 @@ static void __clk_disable(struct clk *clk)
clk->clk_disable(clk); clk->clk_disable(clk);
} }
if (clk->parent) if (clk->parent)
__clk_disable(clk->parent); davinci_clk_disable(clk->parent);
} }
int davinci_clk_reset(struct clk *clk, bool reset) int davinci_clk_reset(struct clk *clk, bool reset)
@ -103,7 +103,7 @@ int clk_enable(struct clk *clk)
return -EINVAL; return -EINVAL;
spin_lock_irqsave(&clockfw_lock, flags); spin_lock_irqsave(&clockfw_lock, flags);
__clk_enable(clk); davinci_clk_enable(clk);
spin_unlock_irqrestore(&clockfw_lock, flags); spin_unlock_irqrestore(&clockfw_lock, flags);
return 0; return 0;
@ -118,7 +118,7 @@ void clk_disable(struct clk *clk)
return; return;
spin_lock_irqsave(&clockfw_lock, flags); spin_lock_irqsave(&clockfw_lock, flags);
__clk_disable(clk); davinci_clk_disable(clk);
spin_unlock_irqrestore(&clockfw_lock, flags); spin_unlock_irqrestore(&clockfw_lock, flags);
} }
EXPORT_SYMBOL(clk_disable); EXPORT_SYMBOL(clk_disable);

Просмотреть файл

@ -132,6 +132,8 @@ int davinci_set_sysclk_rate(struct clk *clk, unsigned long rate);
int davinci_set_refclk_rate(unsigned long rate); int davinci_set_refclk_rate(unsigned long rate);
int davinci_simple_set_rate(struct clk *clk, unsigned long rate); int davinci_simple_set_rate(struct clk *clk, unsigned long rate);
int davinci_clk_reset(struct clk *clk, bool reset); int davinci_clk_reset(struct clk *clk, bool reset);
void davinci_clk_enable(struct clk *clk);
void davinci_clk_disable(struct clk *clk);
extern struct platform_device davinci_wdt_device; extern struct platform_device davinci_wdt_device;
extern void davinci_watchdog_reset(struct platform_device *); extern void davinci_watchdog_reset(struct platform_device *);

Просмотреть файл

@ -319,6 +319,16 @@ static struct clk emac_clk = {
.gpsc = 1, .gpsc = 1,
}; };
/*
* In order to avoid adding the emac_clk to the clock lookup table twice (and
* screwing up the linked list in the process) create a separate clock for
* mdio inheriting the rate from emac_clk.
*/
static struct clk mdio_clk = {
.name = "mdio",
.parent = &emac_clk,
};
static struct clk mcasp_clk = { static struct clk mcasp_clk = {
.name = "mcasp", .name = "mcasp",
.parent = &async3_clk, .parent = &async3_clk,
@ -367,6 +377,16 @@ static struct clk aemif_clk = {
.flags = ALWAYS_ENABLED, .flags = ALWAYS_ENABLED,
}; };
/*
* In order to avoid adding the aemif_clk to the clock lookup table twice (and
* screwing up the linked list in the process) create a separate clock for
* nand inheriting the rate from aemif_clk.
*/
static struct clk aemif_nand_clk = {
.name = "nand",
.parent = &aemif_clk,
};
static struct clk usb11_clk = { static struct clk usb11_clk = {
.name = "usb11", .name = "usb11",
.parent = &pll0_sysclk4, .parent = &pll0_sysclk4,
@ -529,7 +549,7 @@ static struct clk_lookup da850_clks[] = {
CLK(NULL, "arm", &arm_clk), CLK(NULL, "arm", &arm_clk),
CLK(NULL, "rmii", &rmii_clk), CLK(NULL, "rmii", &rmii_clk),
CLK("davinci_emac.1", NULL, &emac_clk), CLK("davinci_emac.1", NULL, &emac_clk),
CLK("davinci_mdio.0", "fck", &emac_clk), CLK("davinci_mdio.0", "fck", &mdio_clk),
CLK("davinci-mcasp.0", NULL, &mcasp_clk), CLK("davinci-mcasp.0", NULL, &mcasp_clk),
CLK("davinci-mcbsp.0", NULL, &mcbsp0_clk), CLK("davinci-mcbsp.0", NULL, &mcbsp0_clk),
CLK("davinci-mcbsp.1", NULL, &mcbsp1_clk), CLK("davinci-mcbsp.1", NULL, &mcbsp1_clk),
@ -537,7 +557,15 @@ static struct clk_lookup da850_clks[] = {
CLK("da830-mmc.0", NULL, &mmcsd0_clk), CLK("da830-mmc.0", NULL, &mmcsd0_clk),
CLK("da830-mmc.1", NULL, &mmcsd1_clk), CLK("da830-mmc.1", NULL, &mmcsd1_clk),
CLK("ti-aemif", NULL, &aemif_clk), CLK("ti-aemif", NULL, &aemif_clk),
CLK(NULL, "aemif", &aemif_clk), /*
* The only user of this clock is davinci_nand and it get's it through
* con_id. The nand node itself is created from within the aemif
* driver to guarantee that it's probed after the aemif timing
* parameters are configured. of_dev_auxdata is not accessible from
* the aemif driver and can't be passed to of_platform_populate(). For
* that reason we're leaving the dev_id here as NULL.
*/
CLK(NULL, "aemif", &aemif_nand_clk),
CLK("ohci-da8xx", "usb11", &usb11_clk), CLK("ohci-da8xx", "usb11", &usb11_clk),
CLK("musb-da8xx", "usb20", &usb20_clk), CLK("musb-da8xx", "usb20", &usb20_clk),
CLK("spi_davinci.0", NULL, &spi0_clk), CLK("spi_davinci.0", NULL, &spi0_clk),

Просмотреть файл

@ -22,6 +22,8 @@
#define DA8XX_USB0_BASE 0x01e00000 #define DA8XX_USB0_BASE 0x01e00000
#define DA8XX_USB1_BASE 0x01e25000 #define DA8XX_USB1_BASE 0x01e25000
static struct clk *usb20_clk;
static struct platform_device da8xx_usb_phy = { static struct platform_device da8xx_usb_phy = {
.name = "da8xx-usb-phy", .name = "da8xx-usb-phy",
.id = -1, .id = -1,
@ -158,26 +160,13 @@ int __init da8xx_register_usb_refclkin(int rate)
static void usb20_phy_clk_enable(struct clk *clk) static void usb20_phy_clk_enable(struct clk *clk)
{ {
struct clk *usb20_clk;
int err;
u32 val; u32 val;
u32 timeout = 500000; /* 500 msec */ u32 timeout = 500000; /* 500 msec */
val = readl(DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP2_REG)); val = readl(DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP2_REG));
usb20_clk = clk_get(&da8xx_usb20_dev.dev, "usb20");
if (IS_ERR(usb20_clk)) {
pr_err("could not get usb20 clk: %ld\n", PTR_ERR(usb20_clk));
return;
}
/* The USB 2.O PLL requires that the USB 2.O PSC is enabled as well. */ /* The USB 2.O PLL requires that the USB 2.O PSC is enabled as well. */
err = clk_prepare_enable(usb20_clk); davinci_clk_enable(usb20_clk);
if (err) {
pr_err("failed to enable usb20 clk: %d\n", err);
clk_put(usb20_clk);
return;
}
/* /*
* Turn on the USB 2.0 PHY, but just the PLL, and not OTG. The USB 1.1 * Turn on the USB 2.0 PHY, but just the PLL, and not OTG. The USB 1.1
@ -197,8 +186,7 @@ static void usb20_phy_clk_enable(struct clk *clk)
pr_err("Timeout waiting for USB 2.0 PHY clock good\n"); pr_err("Timeout waiting for USB 2.0 PHY clock good\n");
done: done:
clk_disable_unprepare(usb20_clk); davinci_clk_disable(usb20_clk);
clk_put(usb20_clk);
} }
static void usb20_phy_clk_disable(struct clk *clk) static void usb20_phy_clk_disable(struct clk *clk)
@ -285,11 +273,19 @@ static struct clk_lookup usb20_phy_clk_lookup =
int __init da8xx_register_usb20_phy_clk(bool use_usb_refclkin) int __init da8xx_register_usb20_phy_clk(bool use_usb_refclkin)
{ {
struct clk *parent; struct clk *parent;
int ret = 0; int ret;
usb20_clk = clk_get(&da8xx_usb20_dev.dev, "usb20");
ret = PTR_ERR_OR_ZERO(usb20_clk);
if (ret)
return ret;
parent = clk_get(NULL, use_usb_refclkin ? "usb_refclkin" : "pll0_aux"); parent = clk_get(NULL, use_usb_refclkin ? "usb_refclkin" : "pll0_aux");
if (IS_ERR(parent)) ret = PTR_ERR_OR_ZERO(parent);
return PTR_ERR(parent); if (ret) {
clk_put(usb20_clk);
return ret;
}
usb20_phy_clk.parent = parent; usb20_phy_clk.parent = parent;
ret = clk_register(&usb20_phy_clk); ret = clk_register(&usb20_phy_clk);

Просмотреть файл

@ -385,36 +385,6 @@ fail:
return pen_release != -1 ? ret : 0; return pen_release != -1 ? ret : 0;
} }
/*
* Initialise the CPU possible map early - this describes the CPUs
* which may be present or become present in the system.
*/
static void __init exynos_smp_init_cpus(void)
{
void __iomem *scu_base = scu_base_addr();
unsigned int i, ncores;
if (read_cpuid_part() == ARM_CPU_PART_CORTEX_A9)
ncores = scu_base ? scu_get_core_count(scu_base) : 1;
else
/*
* CPU Nodes are passed thru DT and set_cpu_possible
* is set by "arm_dt_init_cpu_maps".
*/
return;
/* sanity check */
if (ncores > nr_cpu_ids) {
pr_warn("SMP: %u cores greater than maximum (%u), clipping\n",
ncores, nr_cpu_ids);
ncores = nr_cpu_ids;
}
for (i = 0; i < ncores; i++)
set_cpu_possible(i, true);
}
static void __init exynos_smp_prepare_cpus(unsigned int max_cpus) static void __init exynos_smp_prepare_cpus(unsigned int max_cpus)
{ {
int i; int i;
@ -479,7 +449,6 @@ static void exynos_cpu_die(unsigned int cpu)
#endif /* CONFIG_HOTPLUG_CPU */ #endif /* CONFIG_HOTPLUG_CPU */
const struct smp_operations exynos_smp_ops __initconst = { const struct smp_operations exynos_smp_ops __initconst = {
.smp_init_cpus = exynos_smp_init_cpus,
.smp_prepare_cpus = exynos_smp_prepare_cpus, .smp_prepare_cpus = exynos_smp_prepare_cpus,
.smp_secondary_init = exynos_secondary_init, .smp_secondary_init = exynos_secondary_init,
.smp_boot_secondary = exynos_boot_secondary, .smp_boot_secondary = exynos_boot_secondary,

Просмотреть файл

@ -37,7 +37,6 @@ static const char * const imx1_dt_board_compat[] __initconst = {
}; };
DT_MACHINE_START(IMX1_DT, "Freescale i.MX1 (Device Tree Support)") DT_MACHINE_START(IMX1_DT, "Freescale i.MX1 (Device Tree Support)")
.map_io = debug_ll_io_init,
.init_early = imx1_init_early, .init_early = imx1_init_early,
.init_irq = imx1_init_irq, .init_irq = imx1_init_irq,
.dt_compat = imx1_dt_board_compat, .dt_compat = imx1_dt_board_compat,

Просмотреть файл

@ -32,7 +32,6 @@
#include "soc.h" #include "soc.h"
#define OMAP1_DMA_BASE (0xfffed800) #define OMAP1_DMA_BASE (0xfffed800)
#define OMAP1_LOGICAL_DMA_CH_COUNT 17
static u32 enable_1510_mode; static u32 enable_1510_mode;
@ -348,8 +347,6 @@ static int __init omap1_system_dma_init(void)
goto exit_iounmap; goto exit_iounmap;
} }
d->lch_count = OMAP1_LOGICAL_DMA_CH_COUNT;
/* Valid attributes for omap1 plus processors */ /* Valid attributes for omap1 plus processors */
if (cpu_is_omap15xx()) if (cpu_is_omap15xx())
d->dev_caps = ENABLE_1510_MODE; d->dev_caps = ENABLE_1510_MODE;
@ -366,13 +363,14 @@ static int __init omap1_system_dma_init(void)
d->dev_caps |= CLEAR_CSR_ON_READ; d->dev_caps |= CLEAR_CSR_ON_READ;
d->dev_caps |= IS_WORD_16; d->dev_caps |= IS_WORD_16;
if (cpu_is_omap15xx()) /* available logical channels */
d->chan_count = 9; if (cpu_is_omap15xx()) {
else if (cpu_is_omap16xx() || cpu_is_omap7xx()) { d->lch_count = 9;
if (!(d->dev_caps & ENABLE_1510_MODE)) } else {
d->chan_count = 16; if (d->dev_caps & ENABLE_1510_MODE)
d->lch_count = 9;
else else
d->chan_count = 9; d->lch_count = 16;
} }
p = dma_plat_info; p = dma_plat_info;

Просмотреть файл

@ -7,7 +7,7 @@ ccflags-y := -I$(srctree)/$(src)/include \
# Common support # Common support
obj-y := id.o io.o control.o devices.o fb.o timer.o pm.o \ obj-y := id.o io.o control.o devices.o fb.o timer.o pm.o \
common.o gpio.o dma.o wd_timer.o display.o i2c.o hdq1w.o omap_hwmod.o \ common.o dma.o wd_timer.o display.o i2c.o hdq1w.o omap_hwmod.o \
omap_device.o omap-headsmp.o sram.o drm.o omap_device.o omap-headsmp.o sram.o drm.o
hwmod-common = omap_hwmod.o omap_hwmod_reset.o \ hwmod-common = omap_hwmod.o omap_hwmod_reset.o \

Просмотреть файл

@ -304,7 +304,7 @@ DT_MACHINE_START(AM43_DT, "Generic AM43 (Flattened Device Tree)")
.init_late = am43xx_init_late, .init_late = am43xx_init_late,
.init_irq = omap_gic_of_init, .init_irq = omap_gic_of_init,
.init_machine = omap_generic_init, .init_machine = omap_generic_init,
.init_time = omap4_local_timer_init, .init_time = omap3_gptimer_timer_init,
.dt_compat = am43_boards_compat, .dt_compat = am43_boards_compat,
.restart = omap44xx_restart, .restart = omap44xx_restart,
MACHINE_END MACHINE_END

Просмотреть файл

@ -1,160 +0,0 @@
/*
* OMAP2+ specific gpio initialization
*
* Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
*
* Author:
* Charulatha V <charu@ti.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation version 2.
*
* This program is distributed "as is" WITHOUT ANY WARRANTY of any
* kind, whether express or implied; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include <linux/gpio.h>
#include <linux/err.h>
#include <linux/slab.h>
#include <linux/interrupt.h>
#include <linux/of.h>
#include <linux/platform_data/gpio-omap.h>
#include "soc.h"
#include "omap_hwmod.h"
#include "omap_device.h"
#include "omap-pm.h"
#include "powerdomain.h"
static int __init omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused)
{
struct platform_device *pdev;
struct omap_gpio_platform_data *pdata;
struct omap_gpio_dev_attr *dev_attr;
char *name = "omap_gpio";
int id;
struct powerdomain *pwrdm;
/*
* extract the device id from name field available in the
* hwmod database and use the same for constructing ids for
* gpio devices.
* CAUTION: Make sure the name in the hwmod database does
* not change. If changed, make corresponding change here
* or make use of static variable mechanism to handle this.
*/
sscanf(oh->name, "gpio%d", &id);
pdata = kzalloc(sizeof(struct omap_gpio_platform_data), GFP_KERNEL);
if (!pdata) {
pr_err("gpio%d: Memory allocation failed\n", id);
return -ENOMEM;
}
dev_attr = (struct omap_gpio_dev_attr *)oh->dev_attr;
pdata->bank_width = dev_attr->bank_width;
pdata->dbck_flag = dev_attr->dbck_flag;
pdata->get_context_loss_count = omap_pm_get_dev_context_loss_count;
pdata->regs = kzalloc(sizeof(struct omap_gpio_reg_offs), GFP_KERNEL);
if (!pdata->regs) {
pr_err("gpio%d: Memory allocation failed\n", id);
kfree(pdata);
return -ENOMEM;
}
switch (oh->class->rev) {
case 0:
if (id == 1)
/* non-wakeup GPIO pins for OMAP2 Bank1 */
pdata->non_wakeup_gpios = 0xe203ffc0;
else if (id == 2)
/* non-wakeup GPIO pins for OMAP2 Bank2 */
pdata->non_wakeup_gpios = 0x08700040;
/* fall through */
case 1:
pdata->regs->revision = OMAP24XX_GPIO_REVISION;
pdata->regs->direction = OMAP24XX_GPIO_OE;
pdata->regs->datain = OMAP24XX_GPIO_DATAIN;
pdata->regs->dataout = OMAP24XX_GPIO_DATAOUT;
pdata->regs->set_dataout = OMAP24XX_GPIO_SETDATAOUT;
pdata->regs->clr_dataout = OMAP24XX_GPIO_CLEARDATAOUT;
pdata->regs->irqstatus = OMAP24XX_GPIO_IRQSTATUS1;
pdata->regs->irqstatus2 = OMAP24XX_GPIO_IRQSTATUS2;
pdata->regs->irqenable = OMAP24XX_GPIO_IRQENABLE1;
pdata->regs->irqenable2 = OMAP24XX_GPIO_IRQENABLE2;
pdata->regs->set_irqenable = OMAP24XX_GPIO_SETIRQENABLE1;
pdata->regs->clr_irqenable = OMAP24XX_GPIO_CLEARIRQENABLE1;
pdata->regs->debounce = OMAP24XX_GPIO_DEBOUNCE_VAL;
pdata->regs->debounce_en = OMAP24XX_GPIO_DEBOUNCE_EN;
pdata->regs->ctrl = OMAP24XX_GPIO_CTRL;
pdata->regs->wkup_en = OMAP24XX_GPIO_WAKE_EN;
pdata->regs->leveldetect0 = OMAP24XX_GPIO_LEVELDETECT0;
pdata->regs->leveldetect1 = OMAP24XX_GPIO_LEVELDETECT1;
pdata->regs->risingdetect = OMAP24XX_GPIO_RISINGDETECT;
pdata->regs->fallingdetect = OMAP24XX_GPIO_FALLINGDETECT;
break;
case 2:
pdata->regs->revision = OMAP4_GPIO_REVISION;
pdata->regs->direction = OMAP4_GPIO_OE;
pdata->regs->datain = OMAP4_GPIO_DATAIN;
pdata->regs->dataout = OMAP4_GPIO_DATAOUT;
pdata->regs->set_dataout = OMAP4_GPIO_SETDATAOUT;
pdata->regs->clr_dataout = OMAP4_GPIO_CLEARDATAOUT;
pdata->regs->irqstatus_raw0 = OMAP4_GPIO_IRQSTATUSRAW0;
pdata->regs->irqstatus_raw1 = OMAP4_GPIO_IRQSTATUSRAW1;
pdata->regs->irqstatus = OMAP4_GPIO_IRQSTATUS0;
pdata->regs->irqstatus2 = OMAP4_GPIO_IRQSTATUS1;
pdata->regs->irqenable = OMAP4_GPIO_IRQSTATUSSET0;
pdata->regs->irqenable2 = OMAP4_GPIO_IRQSTATUSSET1;
pdata->regs->set_irqenable = OMAP4_GPIO_IRQSTATUSSET0;
pdata->regs->clr_irqenable = OMAP4_GPIO_IRQSTATUSCLR0;
pdata->regs->debounce = OMAP4_GPIO_DEBOUNCINGTIME;
pdata->regs->debounce_en = OMAP4_GPIO_DEBOUNCENABLE;
pdata->regs->ctrl = OMAP4_GPIO_CTRL;
pdata->regs->wkup_en = OMAP4_GPIO_IRQWAKEN0;
pdata->regs->leveldetect0 = OMAP4_GPIO_LEVELDETECT0;
pdata->regs->leveldetect1 = OMAP4_GPIO_LEVELDETECT1;
pdata->regs->risingdetect = OMAP4_GPIO_RISINGDETECT;
pdata->regs->fallingdetect = OMAP4_GPIO_FALLINGDETECT;
break;
default:
WARN(1, "Invalid gpio bank_type\n");
kfree(pdata->regs);
kfree(pdata);
return -EINVAL;
}
pwrdm = omap_hwmod_get_pwrdm(oh);
pdata->loses_context = pwrdm_can_ever_lose_context(pwrdm);
pdev = omap_device_build(name, id - 1, oh, pdata, sizeof(*pdata));
kfree(pdata);
if (IS_ERR(pdev)) {
WARN(1, "Can't build omap_device for %s:%s.\n",
name, oh->name);
return PTR_ERR(pdev);
}
return 0;
}
/*
* gpio_init needs to be done before
* machine_init functions access gpio APIs.
* Hence gpio_init is a omap_postcore_initcall.
*/
static int __init omap2_gpio_init(void)
{
/* If dtb is there, the devices will be created dynamically */
if (of_have_populated_dt())
return -ENODEV;
return omap_hwmod_for_each_by_class("gpio", omap2_gpio_dev_init, NULL);
}
omap_postcore_initcall(omap2_gpio_init);

Просмотреть файл

@ -741,14 +741,14 @@ static int _init_main_clk(struct omap_hwmod *oh)
int ret = 0; int ret = 0;
char name[MOD_CLK_MAX_NAME_LEN]; char name[MOD_CLK_MAX_NAME_LEN];
struct clk *clk; struct clk *clk;
static const char modck[] = "_mod_ck";
/* +7 magic comes from '_mod_ck' suffix */ if (strlen(oh->name) >= MOD_CLK_MAX_NAME_LEN - strlen(modck))
if (strlen(oh->name) + 7 > MOD_CLK_MAX_NAME_LEN)
pr_warn("%s: warning: cropping name for %s\n", __func__, pr_warn("%s: warning: cropping name for %s\n", __func__,
oh->name); oh->name);
strncpy(name, oh->name, MOD_CLK_MAX_NAME_LEN - 7); strlcpy(name, oh->name, MOD_CLK_MAX_NAME_LEN - strlen(modck));
strcat(name, "_mod_ck"); strlcat(name, modck, MOD_CLK_MAX_NAME_LEN);
clk = clk_get(NULL, name); clk = clk_get(NULL, name);
if (!IS_ERR(clk)) { if (!IS_ERR(clk)) {

Просмотреть файл

@ -121,10 +121,6 @@ extern struct omap_hwmod_irq_info omap2_uart3_mpu_irqs[];
extern struct omap_hwmod_irq_info omap2_dispc_irqs[]; extern struct omap_hwmod_irq_info omap2_dispc_irqs[];
extern struct omap_hwmod_irq_info omap2_i2c1_mpu_irqs[]; extern struct omap_hwmod_irq_info omap2_i2c1_mpu_irqs[];
extern struct omap_hwmod_irq_info omap2_i2c2_mpu_irqs[]; extern struct omap_hwmod_irq_info omap2_i2c2_mpu_irqs[];
extern struct omap_hwmod_irq_info omap2_gpio1_irqs[];
extern struct omap_hwmod_irq_info omap2_gpio2_irqs[];
extern struct omap_hwmod_irq_info omap2_gpio3_irqs[];
extern struct omap_hwmod_irq_info omap2_gpio4_irqs[];
extern struct omap_hwmod_irq_info omap2_dma_system_irqs[]; extern struct omap_hwmod_irq_info omap2_dma_system_irqs[];
extern struct omap_hwmod_irq_info omap2_mcspi1_mpu_irqs[]; extern struct omap_hwmod_irq_info omap2_mcspi1_mpu_irqs[];
extern struct omap_hwmod_irq_info omap2_mcspi2_mpu_irqs[]; extern struct omap_hwmod_irq_info omap2_mcspi2_mpu_irqs[];

Просмотреть файл

@ -161,7 +161,7 @@ static struct ti_st_plat_data wilink7_pdata = {
.nshutdown_gpio = 162, .nshutdown_gpio = 162,
.dev_name = "/dev/ttyO1", .dev_name = "/dev/ttyO1",
.flow_cntrl = 1, .flow_cntrl = 1,
.baud_rate = 300000, .baud_rate = 3000000,
}; };
static struct platform_device wl128x_device = { static struct platform_device wl128x_device = {

Просмотреть файл

@ -295,10 +295,8 @@ int omap_prcm_register_chain_handler(struct omap_prcm_irq_setup *irq_setup)
GFP_KERNEL); GFP_KERNEL);
if (!prcm_irq_chips || !prcm_irq_setup->saved_mask || if (!prcm_irq_chips || !prcm_irq_setup->saved_mask ||
!prcm_irq_setup->priority_mask) { !prcm_irq_setup->priority_mask)
pr_err("PRCM: kzalloc failed\n");
goto err; goto err;
}
memset(mask, 0, sizeof(mask)); memset(mask, 0, sizeof(mask));

Просмотреть файл

@ -510,18 +510,19 @@ void __init omap3_secure_sync32k_timer_init(void)
} }
#endif /* CONFIG_ARCH_OMAP3 */ #endif /* CONFIG_ARCH_OMAP3 */
#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_SOC_AM33XX) #if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_SOC_AM33XX) || \
defined(CONFIG_SOC_AM43XX)
void __init omap3_gptimer_timer_init(void) void __init omap3_gptimer_timer_init(void)
{ {
__omap_sync32k_timer_init(2, "timer_sys_ck", NULL, __omap_sync32k_timer_init(2, "timer_sys_ck", NULL,
1, "timer_sys_ck", "ti,timer-alwon", true); 1, "timer_sys_ck", "ti,timer-alwon", true);
if (of_have_populated_dt())
clocksource_probe(); clocksource_probe();
} }
#endif #endif
#if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5) || \ #if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5) || \
defined(CONFIG_SOC_DRA7XX) || defined(CONFIG_SOC_AM43XX) defined(CONFIG_SOC_DRA7XX)
static void __init omap4_sync32k_timer_init(void) static void __init omap4_sync32k_timer_init(void)
{ {
__omap_sync32k_timer_init(1, "timer_32k_ck", "ti,timer-alwon", __omap_sync32k_timer_init(1, "timer_32k_ck", "ti,timer-alwon",

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше