Merge ../aio-fixes
This commit is contained in:
Коммит
6e830d5371
|
@ -280,12 +280,9 @@ that is possible.
|
||||||
mcelog
|
mcelog
|
||||||
------
|
------
|
||||||
|
|
||||||
In Linux 2.6.31+ the i386 kernel needs to run the mcelog utility
|
On x86 kernels the mcelog utility is needed to process and log machine check
|
||||||
as a regular cronjob similar to the x86-64 kernel to process and log
|
events when CONFIG_X86_MCE is enabled. Machine check events are errors reported
|
||||||
machine check events when CONFIG_X86_NEW_MCE is enabled. Machine check
|
by the CPU. Processing them is strongly encouraged.
|
||||||
events are errors reported by the CPU. Processing them is strongly encouraged.
|
|
||||||
All x86-64 kernels since 2.6.4 require the mcelog utility to
|
|
||||||
process machine checks.
|
|
||||||
|
|
||||||
Getting updated software
|
Getting updated software
|
||||||
========================
|
========================
|
||||||
|
|
|
@ -708,7 +708,7 @@ hardware level details could be very different.
|
||||||
|
|
||||||
<para>Systems need specialized hardware support to implement OTG,
|
<para>Systems need specialized hardware support to implement OTG,
|
||||||
notably including a special <emphasis>Mini-AB</emphasis> jack
|
notably including a special <emphasis>Mini-AB</emphasis> jack
|
||||||
and associated transciever to support <emphasis>Dual-Role</emphasis>
|
and associated transceiver to support <emphasis>Dual-Role</emphasis>
|
||||||
operation:
|
operation:
|
||||||
they can act either as a host, using the standard
|
they can act either as a host, using the standard
|
||||||
Linux-USB host side driver stack,
|
Linux-USB host side driver stack,
|
||||||
|
|
|
@ -182,7 +182,7 @@
|
||||||
<para>
|
<para>
|
||||||
Each interrupt is described by an interrupt descriptor structure
|
Each interrupt is described by an interrupt descriptor structure
|
||||||
irq_desc. The interrupt is referenced by an 'unsigned int' numeric
|
irq_desc. The interrupt is referenced by an 'unsigned int' numeric
|
||||||
value which selects the corresponding interrupt decription structure
|
value which selects the corresponding interrupt description structure
|
||||||
in the descriptor structures array.
|
in the descriptor structures array.
|
||||||
The descriptor structure contains status information and pointers
|
The descriptor structure contains status information and pointers
|
||||||
to the interrupt flow method and the interrupt chip structure
|
to the interrupt flow method and the interrupt chip structure
|
||||||
|
@ -470,7 +470,7 @@ if (desc->irq_data.chip->irq_eoi)
|
||||||
<para>
|
<para>
|
||||||
To avoid copies of identical implementations of IRQ chips the
|
To avoid copies of identical implementations of IRQ chips the
|
||||||
core provides a configurable generic interrupt chip
|
core provides a configurable generic interrupt chip
|
||||||
implementation. Developers should check carefuly whether the
|
implementation. Developers should check carefully whether the
|
||||||
generic chip fits their needs before implementing the same
|
generic chip fits their needs before implementing the same
|
||||||
functionality slightly differently themselves.
|
functionality slightly differently themselves.
|
||||||
</para>
|
</para>
|
||||||
|
|
|
@ -1760,7 +1760,7 @@ as it would be on UP.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
There is a furthur optimization possible here: remember our original
|
There is a further optimization possible here: remember our original
|
||||||
cache code, where there were no reference counts and the caller simply
|
cache code, where there were no reference counts and the caller simply
|
||||||
held the lock whenever using the object? This is still possible: if
|
held the lock whenever using the object? This is still possible: if
|
||||||
you hold the lock, no one can delete the object, so you don't need to
|
you hold the lock, no one can delete the object, so you don't need to
|
||||||
|
|
|
@ -677,7 +677,7 @@ and other resources, etc.
|
||||||
|
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
ATA_QCFLAG_ACTIVE is clared from qc->flags.
|
ATA_QCFLAG_ACTIVE is cleared from qc->flags.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
|
||||||
|
@ -708,7 +708,7 @@ and other resources, etc.
|
||||||
|
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
qc->waiting is claread & completed (in that order).
|
qc->waiting is cleared & completed (in that order).
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
|
||||||
|
@ -1163,7 +1163,7 @@ and other resources, etc.
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Once sense data is acquired, this type of errors can be
|
Once sense data is acquired, this type of errors can be
|
||||||
handled similary to other SCSI errors. Note that sense data
|
handled similarly to other SCSI errors. Note that sense data
|
||||||
may indicate ATA bus error (e.g. Sense Key 04h HARDWARE ERROR
|
may indicate ATA bus error (e.g. Sense Key 04h HARDWARE ERROR
|
||||||
&& ASC/ASCQ 47h/00h SCSI PARITY ERROR). In such
|
&& ASC/ASCQ 47h/00h SCSI PARITY ERROR). In such
|
||||||
cases, the error should be considered as an ATA bus error and
|
cases, the error should be considered as an ATA bus error and
|
||||||
|
|
|
@ -68,7 +68,7 @@
|
||||||
several digital tv standards. While it is called as DVB API,
|
several digital tv standards. While it is called as DVB API,
|
||||||
in fact it covers several different video standards including
|
in fact it covers several different video standards including
|
||||||
DVB-T, DVB-S, DVB-C and ATSC. The API is currently being updated
|
DVB-T, DVB-S, DVB-C and ATSC. The API is currently being updated
|
||||||
to documment support also for DVB-S2, ISDB-T and ISDB-S.</para>
|
to document support also for DVB-S2, ISDB-T and ISDB-S.</para>
|
||||||
<para>The third part covers the Remote Controller API.</para>
|
<para>The third part covers the Remote Controller API.</para>
|
||||||
<para>The fourth part covers the Media Controller API.</para>
|
<para>The fourth part covers the Media Controller API.</para>
|
||||||
<para>For additional information and for the latest development code,
|
<para>For additional information and for the latest development code,
|
||||||
|
|
|
@ -91,7 +91,7 @@
|
||||||
<listitem><para>
|
<listitem><para>
|
||||||
[MTD Interface]</para><para>
|
[MTD Interface]</para><para>
|
||||||
These functions provide the interface to the MTD kernel API.
|
These functions provide the interface to the MTD kernel API.
|
||||||
They are not replacable and provide functionality
|
They are not replaceable and provide functionality
|
||||||
which is complete hardware independent.
|
which is complete hardware independent.
|
||||||
</para></listitem>
|
</para></listitem>
|
||||||
<listitem><para>
|
<listitem><para>
|
||||||
|
@ -100,14 +100,14 @@
|
||||||
</para></listitem>
|
</para></listitem>
|
||||||
<listitem><para>
|
<listitem><para>
|
||||||
[GENERIC]</para><para>
|
[GENERIC]</para><para>
|
||||||
Generic functions are not replacable and provide functionality
|
Generic functions are not replaceable and provide functionality
|
||||||
which is complete hardware independent.
|
which is complete hardware independent.
|
||||||
</para></listitem>
|
</para></listitem>
|
||||||
<listitem><para>
|
<listitem><para>
|
||||||
[DEFAULT]</para><para>
|
[DEFAULT]</para><para>
|
||||||
Default functions provide hardware related functionality which is suitable
|
Default functions provide hardware related functionality which is suitable
|
||||||
for most of the implementations. These functions can be replaced by the
|
for most of the implementations. These functions can be replaced by the
|
||||||
board driver if neccecary. Those functions are called via pointers in the
|
board driver if necessary. Those functions are called via pointers in the
|
||||||
NAND chip description structure. The board driver can set the functions which
|
NAND chip description structure. The board driver can set the functions which
|
||||||
should be replaced by board dependent functions before calling nand_scan().
|
should be replaced by board dependent functions before calling nand_scan().
|
||||||
If the function pointer is NULL on entry to nand_scan() then the pointer
|
If the function pointer is NULL on entry to nand_scan() then the pointer
|
||||||
|
@ -264,7 +264,7 @@ static void board_hwcontrol(struct mtd_info *mtd, int cmd)
|
||||||
is set up nand_scan() is called. This function tries to
|
is set up nand_scan() is called. This function tries to
|
||||||
detect and identify then chip. If a chip is found all the
|
detect and identify then chip. If a chip is found all the
|
||||||
internal data fields are initialized accordingly.
|
internal data fields are initialized accordingly.
|
||||||
The structure(s) have to be zeroed out first and then filled with the neccecary
|
The structure(s) have to be zeroed out first and then filled with the necessary
|
||||||
information about the device.
|
information about the device.
|
||||||
</para>
|
</para>
|
||||||
<programlisting>
|
<programlisting>
|
||||||
|
@ -327,7 +327,7 @@ module_init(board_init);
|
||||||
<sect1 id="Exit_function">
|
<sect1 id="Exit_function">
|
||||||
<title>Exit function</title>
|
<title>Exit function</title>
|
||||||
<para>
|
<para>
|
||||||
The exit function is only neccecary if the driver is
|
The exit function is only necessary if the driver is
|
||||||
compiled as a module. It releases all resources which
|
compiled as a module. It releases all resources which
|
||||||
are held by the chip driver and unregisters the partitions
|
are held by the chip driver and unregisters the partitions
|
||||||
in the MTD layer.
|
in the MTD layer.
|
||||||
|
@ -494,7 +494,7 @@ static void board_select_chip (struct mtd_info *mtd, int chip)
|
||||||
in this case. See rts_from4.c and diskonchip.c for
|
in this case. See rts_from4.c and diskonchip.c for
|
||||||
implementation reference. In those cases we must also
|
implementation reference. In those cases we must also
|
||||||
use bad block tables on FLASH, because the ECC layout is
|
use bad block tables on FLASH, because the ECC layout is
|
||||||
interferring with the bad block marker positions.
|
interfering with the bad block marker positions.
|
||||||
See bad block table support for details.
|
See bad block table support for details.
|
||||||
</para>
|
</para>
|
||||||
</sect2>
|
</sect2>
|
||||||
|
@ -542,7 +542,7 @@ static void board_select_chip (struct mtd_info *mtd, int chip)
|
||||||
<para>
|
<para>
|
||||||
nand_scan() calls the function nand_default_bbt().
|
nand_scan() calls the function nand_default_bbt().
|
||||||
nand_default_bbt() selects appropriate default
|
nand_default_bbt() selects appropriate default
|
||||||
bad block table desriptors depending on the chip information
|
bad block table descriptors depending on the chip information
|
||||||
which was retrieved by nand_scan().
|
which was retrieved by nand_scan().
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
|
@ -554,7 +554,7 @@ static void board_select_chip (struct mtd_info *mtd, int chip)
|
||||||
<sect2 id="Flash_based_tables">
|
<sect2 id="Flash_based_tables">
|
||||||
<title>Flash based tables</title>
|
<title>Flash based tables</title>
|
||||||
<para>
|
<para>
|
||||||
It may be desired or neccecary to keep a bad block table in FLASH.
|
It may be desired or necessary to keep a bad block table in FLASH.
|
||||||
For AG-AND chips this is mandatory, as they have no factory marked
|
For AG-AND chips this is mandatory, as they have no factory marked
|
||||||
bad blocks. They have factory marked good blocks. The marker pattern
|
bad blocks. They have factory marked good blocks. The marker pattern
|
||||||
is erased when the block is erased to be reused. So in case of
|
is erased when the block is erased to be reused. So in case of
|
||||||
|
@ -565,10 +565,10 @@ static void board_select_chip (struct mtd_info *mtd, int chip)
|
||||||
of the blocks.
|
of the blocks.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
The blocks in which the tables are stored are procteted against
|
The blocks in which the tables are stored are protected against
|
||||||
accidental access by marking them bad in the memory bad block
|
accidental access by marking them bad in the memory bad block
|
||||||
table. The bad block table management functions are allowed
|
table. The bad block table management functions are allowed
|
||||||
to circumvernt this protection.
|
to circumvent this protection.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
The simplest way to activate the FLASH based bad block table support
|
The simplest way to activate the FLASH based bad block table support
|
||||||
|
@ -592,7 +592,7 @@ static void board_select_chip (struct mtd_info *mtd, int chip)
|
||||||
User defined tables are created by filling out a
|
User defined tables are created by filling out a
|
||||||
nand_bbt_descr structure and storing the pointer in the
|
nand_bbt_descr structure and storing the pointer in the
|
||||||
nand_chip structure member bbt_td before calling nand_scan().
|
nand_chip structure member bbt_td before calling nand_scan().
|
||||||
If a mirror table is neccecary a second structure must be
|
If a mirror table is necessary a second structure must be
|
||||||
created and a pointer to this structure must be stored
|
created and a pointer to this structure must be stored
|
||||||
in bbt_md inside the nand_chip structure. If the bbt_md
|
in bbt_md inside the nand_chip structure. If the bbt_md
|
||||||
member is set to NULL then only the main table is used
|
member is set to NULL then only the main table is used
|
||||||
|
@ -666,7 +666,7 @@ static void board_select_chip (struct mtd_info *mtd, int chip)
|
||||||
<para>
|
<para>
|
||||||
For automatic placement some blocks must be reserved for
|
For automatic placement some blocks must be reserved for
|
||||||
bad block table storage. The number of reserved blocks is defined
|
bad block table storage. The number of reserved blocks is defined
|
||||||
in the maxblocks member of the babd block table description structure.
|
in the maxblocks member of the bad block table description structure.
|
||||||
Reserving 4 blocks for mirrored tables should be a reasonable number.
|
Reserving 4 blocks for mirrored tables should be a reasonable number.
|
||||||
This also limits the number of blocks which are scanned for the bad
|
This also limits the number of blocks which are scanned for the bad
|
||||||
block table ident pattern.
|
block table ident pattern.
|
||||||
|
@ -1068,11 +1068,11 @@ in this page</entry>
|
||||||
<chapter id="filesystems">
|
<chapter id="filesystems">
|
||||||
<title>Filesystem support</title>
|
<title>Filesystem support</title>
|
||||||
<para>
|
<para>
|
||||||
The NAND driver provides all neccecary functions for a
|
The NAND driver provides all necessary functions for a
|
||||||
filesystem via the MTD interface.
|
filesystem via the MTD interface.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Filesystems must be aware of the NAND pecularities and
|
Filesystems must be aware of the NAND peculiarities and
|
||||||
restrictions. One major restrictions of NAND Flash is, that you cannot
|
restrictions. One major restrictions of NAND Flash is, that you cannot
|
||||||
write as often as you want to a page. The consecutive writes to a page,
|
write as often as you want to a page. The consecutive writes to a page,
|
||||||
before erasing it again, are restricted to 1-3 writes, depending on the
|
before erasing it again, are restricted to 1-3 writes, depending on the
|
||||||
|
@ -1222,7 +1222,7 @@ in this page</entry>
|
||||||
#define NAND_BBT_VERSION 0x00000100
|
#define NAND_BBT_VERSION 0x00000100
|
||||||
/* Create a bbt if none axists */
|
/* Create a bbt if none axists */
|
||||||
#define NAND_BBT_CREATE 0x00000200
|
#define NAND_BBT_CREATE 0x00000200
|
||||||
/* Write bbt if neccecary */
|
/* Write bbt if necessary */
|
||||||
#define NAND_BBT_WRITE 0x00001000
|
#define NAND_BBT_WRITE 0x00001000
|
||||||
/* Read and write back block contents when writing bbt */
|
/* Read and write back block contents when writing bbt */
|
||||||
#define NAND_BBT_SAVECONTENT 0x00002000
|
#define NAND_BBT_SAVECONTENT 0x00002000
|
||||||
|
|
|
@ -155,7 +155,7 @@
|
||||||
release regulators. Functions are
|
release regulators. Functions are
|
||||||
provided to <link linkend='API-regulator-enable'>enable</link>
|
provided to <link linkend='API-regulator-enable'>enable</link>
|
||||||
and <link linkend='API-regulator-disable'>disable</link> the
|
and <link linkend='API-regulator-disable'>disable</link> the
|
||||||
reguator and to get and set the runtime parameters of the
|
regulator and to get and set the runtime parameters of the
|
||||||
regulator.
|
regulator.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
|
|
|
@ -766,10 +766,10 @@ framework to set up sysfs files for this region. Simply leave it alone.
|
||||||
<para>
|
<para>
|
||||||
The dynamic memory regions will be allocated when the UIO device file,
|
The dynamic memory regions will be allocated when the UIO device file,
|
||||||
<varname>/dev/uioX</varname> is opened.
|
<varname>/dev/uioX</varname> is opened.
|
||||||
Simiar to static memory resources, the memory region information for
|
Similar to static memory resources, the memory region information for
|
||||||
dynamic regions is then visible via sysfs at
|
dynamic regions is then visible via sysfs at
|
||||||
<varname>/sys/class/uio/uioX/maps/mapY/*</varname>.
|
<varname>/sys/class/uio/uioX/maps/mapY/*</varname>.
|
||||||
The dynmaic memory regions will be freed when the UIO device file is
|
The dynamic memory regions will be freed when the UIO device file is
|
||||||
closed. When no processes are holding the device file open, the address
|
closed. When no processes are holding the device file open, the address
|
||||||
returned to userspace is ~0.
|
returned to userspace is ~0.
|
||||||
</para>
|
</para>
|
||||||
|
|
|
@ -153,7 +153,7 @@
|
||||||
|
|
||||||
<listitem><para>The Linux USB API supports synchronous calls for
|
<listitem><para>The Linux USB API supports synchronous calls for
|
||||||
control and bulk messages.
|
control and bulk messages.
|
||||||
It also supports asynchnous calls for all kinds of data transfer,
|
It also supports asynchronous calls for all kinds of data transfer,
|
||||||
using request structures called "URBs" (USB Request Blocks).
|
using request structures called "URBs" (USB Request Blocks).
|
||||||
</para></listitem>
|
</para></listitem>
|
||||||
|
|
||||||
|
|
|
@ -5696,7 +5696,7 @@ struct _snd_pcm_runtime {
|
||||||
suspending the PCM operations via
|
suspending the PCM operations via
|
||||||
<function>snd_pcm_suspend_all()</function> or
|
<function>snd_pcm_suspend_all()</function> or
|
||||||
<function>snd_pcm_suspend()</function>. It means that the PCM
|
<function>snd_pcm_suspend()</function>. It means that the PCM
|
||||||
streams are already stoppped when the register snapshot is
|
streams are already stopped when the register snapshot is
|
||||||
taken. But, remember that you don't have to restart the PCM
|
taken. But, remember that you don't have to restart the PCM
|
||||||
stream in the resume callback. It'll be restarted via
|
stream in the resume callback. It'll be restarted via
|
||||||
trigger call with <constant>SNDRV_PCM_TRIGGER_RESUME</constant>
|
trigger call with <constant>SNDRV_PCM_TRIGGER_RESUME</constant>
|
||||||
|
|
|
@ -15,10 +15,13 @@ New sysfs files for controlling P state selection have been added to
|
||||||
/sys/devices/system/cpu/intel_pstate/
|
/sys/devices/system/cpu/intel_pstate/
|
||||||
|
|
||||||
max_perf_pct: limits the maximum P state that will be requested by
|
max_perf_pct: limits the maximum P state that will be requested by
|
||||||
the driver stated as a percentage of the available performance.
|
the driver stated as a percentage of the available performance. The
|
||||||
|
available (P states) performance may be reduced by the no_turbo
|
||||||
|
setting described below.
|
||||||
|
|
||||||
min_perf_pct: limits the minimum P state that will be requested by
|
min_perf_pct: limits the minimum P state that will be requested by
|
||||||
the driver stated as a percentage of the available performance.
|
the driver stated as a percentage of the max (non-turbo)
|
||||||
|
performance level.
|
||||||
|
|
||||||
no_turbo: limits the driver to selecting P states below the turbo
|
no_turbo: limits the driver to selecting P states below the turbo
|
||||||
frequency range.
|
frequency range.
|
||||||
|
|
|
@ -6,5 +6,15 @@ following property:
|
||||||
|
|
||||||
Required root node property:
|
Required root node property:
|
||||||
|
|
||||||
- compatible: must contain either "marvell,armada380" or
|
- compatible: must contain "marvell,armada380"
|
||||||
"marvell,armada385" depending on the variant of the SoC being used.
|
|
||||||
|
In addition, boards using the Marvell Armada 385 SoC shall have the
|
||||||
|
following property before the previous one:
|
||||||
|
|
||||||
|
Required root node property:
|
||||||
|
|
||||||
|
compatible: must contain "marvell,armada385"
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
compatible = "marvell,a385-rd", "marvell,armada385", "marvell,armada380";
|
||||||
|
|
|
@ -9,6 +9,18 @@ Required Properties:
|
||||||
- reg: physical base address of the controller and length of memory mapped
|
- reg: physical base address of the controller and length of memory mapped
|
||||||
region.
|
region.
|
||||||
|
|
||||||
|
Optional Properties:
|
||||||
|
- clocks: List of clock handles. The parent clocks of the input clocks to the
|
||||||
|
devices in this power domain are set to oscclk before power gating
|
||||||
|
and restored back after powering on a domain. This is required for
|
||||||
|
all domains which are powered on and off and not required for unused
|
||||||
|
domains.
|
||||||
|
- clock-names: The following clocks can be specified:
|
||||||
|
- oscclk: Oscillator clock.
|
||||||
|
- pclkN, clkN: Pairs of parent of input clock and input clock to the
|
||||||
|
devices in this power domain. Maximum of 4 pairs (N = 0 to 3)
|
||||||
|
are supported currently.
|
||||||
|
|
||||||
Node of a device using power domains must have a samsung,power-domain property
|
Node of a device using power domains must have a samsung,power-domain property
|
||||||
defined with a phandle to respective power domain.
|
defined with a phandle to respective power domain.
|
||||||
|
|
||||||
|
@ -19,6 +31,14 @@ Example:
|
||||||
reg = <0x10023C00 0x10>;
|
reg = <0x10023C00 0x10>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
mfc_pd: power-domain@10044060 {
|
||||||
|
compatible = "samsung,exynos4210-pd";
|
||||||
|
reg = <0x10044060 0x20>;
|
||||||
|
clocks = <&clock CLK_FIN_PLL>, <&clock CLK_MOUT_SW_ACLK333>,
|
||||||
|
<&clock CLK_MOUT_USER_ACLK333>;
|
||||||
|
clock-names = "oscclk", "pclk0", "clk0";
|
||||||
|
};
|
||||||
|
|
||||||
Example of the node using power domain:
|
Example of the node using power domain:
|
||||||
|
|
||||||
node {
|
node {
|
||||||
|
|
|
@ -40,6 +40,9 @@ Optional properties:
|
||||||
- arm,filter-ranges : <start length> Starting address and length of window to
|
- arm,filter-ranges : <start length> Starting address and length of window to
|
||||||
filter. Addresses in the filter window are directed to the M1 port. Other
|
filter. Addresses in the filter window are directed to the M1 port. Other
|
||||||
addresses will go to the M0 port.
|
addresses will go to the M0 port.
|
||||||
|
- arm,io-coherent : indicates that the system is operating in an hardware
|
||||||
|
I/O coherent mode. Valid only when the arm,pl310-cache compatible
|
||||||
|
string is used.
|
||||||
- interrupts : 1 combined interrupt.
|
- interrupts : 1 combined interrupt.
|
||||||
- cache-id-part: cache id part number to be used if it is not present
|
- cache-id-part: cache id part number to be used if it is not present
|
||||||
on hardware
|
on hardware
|
||||||
|
|
|
@ -48,7 +48,7 @@ adc@12D10000 {
|
||||||
|
|
||||||
/* NTC thermistor is a hwmon device */
|
/* NTC thermistor is a hwmon device */
|
||||||
ncp15wb473@0 {
|
ncp15wb473@0 {
|
||||||
compatible = "ntc,ncp15wb473";
|
compatible = "murata,ncp15wb473";
|
||||||
pullup-uv = <1800000>;
|
pullup-uv = <1800000>;
|
||||||
pullup-ohm = <47000>;
|
pullup-ohm = <47000>;
|
||||||
pulldown-ohm = <0>;
|
pulldown-ohm = <0>;
|
||||||
|
|
|
@ -3,11 +3,19 @@ NTC Thermistor hwmon sensors
|
||||||
|
|
||||||
Requires node properties:
|
Requires node properties:
|
||||||
- "compatible" value : one of
|
- "compatible" value : one of
|
||||||
"ntc,ncp15wb473"
|
"murata,ncp15wb473"
|
||||||
"ntc,ncp18wb473"
|
"murata,ncp18wb473"
|
||||||
"ntc,ncp21wb473"
|
"murata,ncp21wb473"
|
||||||
"ntc,ncp03wb473"
|
"murata,ncp03wb473"
|
||||||
"ntc,ncp15wl333"
|
"murata,ncp15wl333"
|
||||||
|
|
||||||
|
/* Usage of vendor name "ntc" is deprecated */
|
||||||
|
<DEPRECATED> "ntc,ncp15wb473"
|
||||||
|
<DEPRECATED> "ntc,ncp18wb473"
|
||||||
|
<DEPRECATED> "ntc,ncp21wb473"
|
||||||
|
<DEPRECATED> "ntc,ncp03wb473"
|
||||||
|
<DEPRECATED> "ntc,ncp15wl333"
|
||||||
|
|
||||||
- "pullup-uv" Pull up voltage in micro volts
|
- "pullup-uv" Pull up voltage in micro volts
|
||||||
- "pullup-ohm" Pull up resistor value in ohms
|
- "pullup-ohm" Pull up resistor value in ohms
|
||||||
- "pulldown-ohm" Pull down resistor value in ohms
|
- "pulldown-ohm" Pull down resistor value in ohms
|
||||||
|
@ -21,7 +29,7 @@ Read more about iio bindings at
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
ncp15wb473@0 {
|
ncp15wb473@0 {
|
||||||
compatible = "ntc,ncp15wb473";
|
compatible = "murata,ncp15wb473";
|
||||||
pullup-uv = <1800000>;
|
pullup-uv = <1800000>;
|
||||||
pullup-ohm = <47000>;
|
pullup-ohm = <47000>;
|
||||||
pulldown-ohm = <0>;
|
pulldown-ohm = <0>;
|
||||||
|
|
|
@ -4,6 +4,13 @@ Required properties:
|
||||||
|
|
||||||
- compatible: Must contain one of the following:
|
- compatible: Must contain one of the following:
|
||||||
|
|
||||||
|
- "renesas,scifa-sh73a0" for SH73A0 (SH-Mobile AG5) SCIFA compatible UART.
|
||||||
|
- "renesas,scifb-sh73a0" for SH73A0 (SH-Mobile AG5) SCIFB compatible UART.
|
||||||
|
- "renesas,scifa-r8a73a4" for R8A73A4 (R-Mobile APE6) SCIFA compatible UART.
|
||||||
|
- "renesas,scifb-r8a73a4" for R8A73A4 (R-Mobile APE6) SCIFB compatible UART.
|
||||||
|
- "renesas,scifa-r8a7740" for R8A7740 (R-Mobile A1) SCIFA compatible UART.
|
||||||
|
- "renesas,scifb-r8a7740" for R8A7740 (R-Mobile A1) SCIFB compatible UART.
|
||||||
|
- "renesas,scif-r8a7778" for R8A7778 (R-Car M1) SCIF compatible UART.
|
||||||
- "renesas,scif-r8a7779" for R8A7779 (R-Car H1) SCIF compatible UART.
|
- "renesas,scif-r8a7779" for R8A7779 (R-Car H1) SCIF compatible UART.
|
||||||
- "renesas,scif-r8a7790" for R8A7790 (R-Car H2) SCIF compatible UART.
|
- "renesas,scif-r8a7790" for R8A7790 (R-Car H2) SCIF compatible UART.
|
||||||
- "renesas,scifa-r8a7790" for R8A7790 (R-Car H2) SCIFA compatible UART.
|
- "renesas,scifa-r8a7790" for R8A7790 (R-Car H2) SCIFA compatible UART.
|
||||||
|
|
|
@ -23,6 +23,12 @@ Optional properties:
|
||||||
- spi-max-frequency: Specifies maximum SPI clock frequency,
|
- spi-max-frequency: Specifies maximum SPI clock frequency,
|
||||||
Units - Hz. Definition as per
|
Units - Hz. Definition as per
|
||||||
Documentation/devicetree/bindings/spi/spi-bus.txt
|
Documentation/devicetree/bindings/spi/spi-bus.txt
|
||||||
|
- num-cs: total number of chipselects
|
||||||
|
- cs-gpios: should specify GPIOs used for chipselects.
|
||||||
|
The gpios will be referred to as reg = <index> in the SPI child
|
||||||
|
nodes. If unspecified, a single SPI device without a chip
|
||||||
|
select can be used.
|
||||||
|
|
||||||
|
|
||||||
SPI slave nodes must be children of the SPI master node and can contain
|
SPI slave nodes must be children of the SPI master node and can contain
|
||||||
properties described in Documentation/devicetree/bindings/spi/spi-bus.txt
|
properties described in Documentation/devicetree/bindings/spi/spi-bus.txt
|
||||||
|
|
|
@ -83,6 +83,7 @@ mosaixtech Mosaix Technologies, Inc.
|
||||||
moxa Moxa
|
moxa Moxa
|
||||||
mpl MPL AG
|
mpl MPL AG
|
||||||
mundoreader Mundo Reader S.L.
|
mundoreader Mundo Reader S.L.
|
||||||
|
murata Murata Manufacturing Co., Ltd.
|
||||||
mxicy Macronix International Co., Ltd.
|
mxicy Macronix International Co., Ltd.
|
||||||
national National Semiconductor
|
national National Semiconductor
|
||||||
neonode Neonode Inc.
|
neonode Neonode Inc.
|
||||||
|
|
|
@ -1,6 +1,17 @@
|
||||||
Email clients info for Linux
|
Email clients info for Linux
|
||||||
======================================================================
|
======================================================================
|
||||||
|
|
||||||
|
Git
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
These days most developers use `git send-email` instead of regular
|
||||||
|
email clients. The man page for this is quite good. On the receiving
|
||||||
|
end, maintainers use `git am` to apply the patches.
|
||||||
|
|
||||||
|
If you are new to git then send your first patch to yourself. Save it
|
||||||
|
as raw text including all the headers. Run `git am raw_email.txt` and
|
||||||
|
then review the changelog with `git log`. When that works then send
|
||||||
|
the patch to the appropriate mailing list(s).
|
||||||
|
|
||||||
General Preferences
|
General Preferences
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
Patches for the Linux kernel are submitted via email, preferably as
|
Patches for the Linux kernel are submitted via email, preferably as
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
Kernel driver ntc_thermistor
|
Kernel driver ntc_thermistor
|
||||||
=================
|
=================
|
||||||
|
|
||||||
Supported thermistors:
|
Supported thermistors from Murata:
|
||||||
* Murata NTC Thermistors NCP15WB473, NCP18WB473, NCP21WB473, NCP03WB473, NCP15WL333
|
* Murata NTC Thermistors NCP15WB473, NCP18WB473, NCP21WB473, NCP03WB473, NCP15WL333
|
||||||
Prefixes: 'ncp15wb473', 'ncp18wb473', 'ncp21wb473', 'ncp03wb473', 'ncp15wl333'
|
Prefixes: 'ncp15wb473', 'ncp18wb473', 'ncp21wb473', 'ncp03wb473', 'ncp15wl333'
|
||||||
Datasheet: Publicly available at Murata
|
Datasheet: Publicly available at Murata
|
||||||
|
@ -15,9 +15,9 @@ Authors:
|
||||||
Description
|
Description
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
The NTC thermistor is a simple thermistor that requires users to provide the
|
The NTC (Negative Temperature Coefficient) thermistor is a simple thermistor
|
||||||
resistance and lookup the corresponding compensation table to get the
|
that requires users to provide the resistance and lookup the corresponding
|
||||||
temperature input.
|
compensation table to get the temperature input.
|
||||||
|
|
||||||
The NTC driver provides lookup tables with a linear approximation function
|
The NTC driver provides lookup tables with a linear approximation function
|
||||||
and four circuit models with an option not to use any of the four models.
|
and four circuit models with an option not to use any of the four models.
|
||||||
|
|
|
@ -8,8 +8,8 @@ disk-shock-protection.txt
|
||||||
- information on hard disk shock protection.
|
- information on hard disk shock protection.
|
||||||
dslm.c
|
dslm.c
|
||||||
- Simple Disk Sleep Monitor program
|
- Simple Disk Sleep Monitor program
|
||||||
hpfall.c
|
freefall.c
|
||||||
- (HP) laptop accelerometer program for disk protection.
|
- (HP/DELL) laptop accelerometer program for disk protection.
|
||||||
laptop-mode.txt
|
laptop-mode.txt
|
||||||
- how to conserve battery power using laptop-mode.
|
- how to conserve battery power using laptop-mode.
|
||||||
sony-laptop.txt
|
sony-laptop.txt
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
/* Disk protection for HP machines.
|
/* Disk protection for HP/DELL machines.
|
||||||
*
|
*
|
||||||
* Copyright 2008 Eric Piel
|
* Copyright 2008 Eric Piel
|
||||||
* Copyright 2009 Pavel Machek <pavel@ucw.cz>
|
* Copyright 2009 Pavel Machek <pavel@ucw.cz>
|
||||||
|
* Copyright 2012 Sonal Santan
|
||||||
|
* Copyright 2014 Pali Rohár <pali.rohar@gmail.com>
|
||||||
*
|
*
|
||||||
* GPLv2.
|
* GPLv2.
|
||||||
*/
|
*/
|
||||||
|
@ -18,24 +20,31 @@
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
#include <sched.h>
|
#include <sched.h>
|
||||||
|
#include <syslog.h>
|
||||||
|
|
||||||
char unload_heads_path[64];
|
static int noled;
|
||||||
|
static char unload_heads_path[64];
|
||||||
|
static char device_path[32];
|
||||||
|
static const char app_name[] = "FREE FALL";
|
||||||
|
|
||||||
int set_unload_heads_path(char *device)
|
static int set_unload_heads_path(char *device)
|
||||||
{
|
{
|
||||||
char devname[64];
|
char devname[64];
|
||||||
|
|
||||||
if (strlen(device) <= 5 || strncmp(device, "/dev/", 5) != 0)
|
if (strlen(device) <= 5 || strncmp(device, "/dev/", 5) != 0)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
strncpy(devname, device + 5, sizeof(devname));
|
strncpy(devname, device + 5, sizeof(devname) - 1);
|
||||||
|
strncpy(device_path, device, sizeof(device_path) - 1);
|
||||||
|
|
||||||
snprintf(unload_heads_path, sizeof(unload_heads_path) - 1,
|
snprintf(unload_heads_path, sizeof(unload_heads_path) - 1,
|
||||||
"/sys/block/%s/device/unload_heads", devname);
|
"/sys/block/%s/device/unload_heads", devname);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int valid_disk(void)
|
|
||||||
|
static int valid_disk(void)
|
||||||
{
|
{
|
||||||
int fd = open(unload_heads_path, O_RDONLY);
|
int fd = open(unload_heads_path, O_RDONLY);
|
||||||
|
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
perror(unload_heads_path);
|
perror(unload_heads_path);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -45,43 +54,54 @@ int valid_disk(void)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void write_int(char *path, int i)
|
static void write_int(char *path, int i)
|
||||||
{
|
{
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
int fd = open(path, O_RDWR);
|
int fd = open(path, O_RDWR);
|
||||||
|
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
perror("open");
|
perror("open");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf(buf, "%d", i);
|
sprintf(buf, "%d", i);
|
||||||
|
|
||||||
if (write(fd, buf, strlen(buf)) != strlen(buf)) {
|
if (write(fd, buf, strlen(buf)) != strlen(buf)) {
|
||||||
perror("write");
|
perror("write");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
close(fd);
|
close(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_led(int on)
|
static void set_led(int on)
|
||||||
{
|
{
|
||||||
|
if (noled)
|
||||||
|
return;
|
||||||
write_int("/sys/class/leds/hp::hddprotect/brightness", on);
|
write_int("/sys/class/leds/hp::hddprotect/brightness", on);
|
||||||
}
|
}
|
||||||
|
|
||||||
void protect(int seconds)
|
static void protect(int seconds)
|
||||||
{
|
{
|
||||||
|
const char *str = (seconds == 0) ? "Unparked" : "Parked";
|
||||||
|
|
||||||
write_int(unload_heads_path, seconds*1000);
|
write_int(unload_heads_path, seconds*1000);
|
||||||
|
syslog(LOG_INFO, "%s %s disk head\n", str, device_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
int on_ac(void)
|
static int on_ac(void)
|
||||||
{
|
{
|
||||||
// /sys/class/power_supply/AC0/online
|
/* /sys/class/power_supply/AC0/online */
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int lid_open(void)
|
static int lid_open(void)
|
||||||
{
|
{
|
||||||
// /proc/acpi/button/lid/LID/state
|
/* /proc/acpi/button/lid/LID/state */
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ignore_me(void)
|
static void ignore_me(int signum)
|
||||||
{
|
{
|
||||||
protect(0);
|
protect(0);
|
||||||
set_led(0);
|
set_led(0);
|
||||||
|
@ -90,6 +110,7 @@ void ignore_me(void)
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int fd, ret;
|
int fd, ret;
|
||||||
|
struct stat st;
|
||||||
struct sched_param param;
|
struct sched_param param;
|
||||||
|
|
||||||
if (argc == 1)
|
if (argc == 1)
|
||||||
|
@ -111,7 +132,16 @@ int main(int argc, char **argv)
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
daemon(0, 0);
|
if (stat("/sys/class/leds/hp::hddprotect/brightness", &st))
|
||||||
|
noled = 1;
|
||||||
|
|
||||||
|
if (daemon(0, 0) != 0) {
|
||||||
|
perror("daemon");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
openlog(app_name, LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
|
||||||
|
|
||||||
param.sched_priority = sched_get_priority_max(SCHED_FIFO);
|
param.sched_priority = sched_get_priority_max(SCHED_FIFO);
|
||||||
sched_setscheduler(0, SCHED_FIFO, ¶m);
|
sched_setscheduler(0, SCHED_FIFO, ¶m);
|
||||||
mlockall(MCL_CURRENT|MCL_FUTURE);
|
mlockall(MCL_CURRENT|MCL_FUTURE);
|
||||||
|
@ -141,6 +171,7 @@ int main(int argc, char **argv)
|
||||||
alarm(20);
|
alarm(20);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
closelog();
|
||||||
close(fd);
|
close(fd);
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
|
@ -17,6 +17,7 @@
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
|
#define _GNU_SOURCE
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
@ -46,12 +47,14 @@
|
||||||
#define CLOCK_INVALID -1
|
#define CLOCK_INVALID -1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* When glibc offers the syscall, this will go away. */
|
/* clock_adjtime is not available in GLIBC < 2.14 */
|
||||||
|
#if !__GLIBC_PREREQ(2, 14)
|
||||||
#include <sys/syscall.h>
|
#include <sys/syscall.h>
|
||||||
static int clock_adjtime(clockid_t id, struct timex *tx)
|
static int clock_adjtime(clockid_t id, struct timex *tx)
|
||||||
{
|
{
|
||||||
return syscall(__NR_clock_adjtime, id, tx);
|
return syscall(__NR_clock_adjtime, id, tx);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static clockid_t get_clockid(int fd)
|
static clockid_t get_clockid(int fd)
|
||||||
{
|
{
|
||||||
|
|
|
@ -286,6 +286,11 @@ STAC92HD83*
|
||||||
hp-inv-led HP with broken BIOS for inverted mute LED
|
hp-inv-led HP with broken BIOS for inverted mute LED
|
||||||
auto BIOS setup (default)
|
auto BIOS setup (default)
|
||||||
|
|
||||||
|
STAC92HD95
|
||||||
|
==========
|
||||||
|
hp-led LED support for HP laptops
|
||||||
|
hp-bass Bass HPF setup for HP Spectre 13
|
||||||
|
|
||||||
STAC9872
|
STAC9872
|
||||||
========
|
========
|
||||||
vaio VAIO laptop without SPDIF
|
vaio VAIO laptop without SPDIF
|
||||||
|
|
|
@ -47,7 +47,6 @@ use constant HIGH_KSWAPD_REWAKEUP => 21;
|
||||||
use constant HIGH_NR_SCANNED => 22;
|
use constant HIGH_NR_SCANNED => 22;
|
||||||
use constant HIGH_NR_TAKEN => 23;
|
use constant HIGH_NR_TAKEN => 23;
|
||||||
use constant HIGH_NR_RECLAIMED => 24;
|
use constant HIGH_NR_RECLAIMED => 24;
|
||||||
use constant HIGH_NR_CONTIG_DIRTY => 25;
|
|
||||||
|
|
||||||
my %perprocesspid;
|
my %perprocesspid;
|
||||||
my %perprocess;
|
my %perprocess;
|
||||||
|
@ -105,7 +104,7 @@ my $regex_direct_end_default = 'nr_reclaimed=([0-9]*)';
|
||||||
my $regex_kswapd_wake_default = 'nid=([0-9]*) order=([0-9]*)';
|
my $regex_kswapd_wake_default = 'nid=([0-9]*) order=([0-9]*)';
|
||||||
my $regex_kswapd_sleep_default = 'nid=([0-9]*)';
|
my $regex_kswapd_sleep_default = 'nid=([0-9]*)';
|
||||||
my $regex_wakeup_kswapd_default = 'nid=([0-9]*) zid=([0-9]*) order=([0-9]*)';
|
my $regex_wakeup_kswapd_default = 'nid=([0-9]*) zid=([0-9]*) order=([0-9]*)';
|
||||||
my $regex_lru_isolate_default = 'isolate_mode=([0-9]*) order=([0-9]*) nr_requested=([0-9]*) nr_scanned=([0-9]*) nr_taken=([0-9]*) contig_taken=([0-9]*) contig_dirty=([0-9]*) contig_failed=([0-9]*)';
|
my $regex_lru_isolate_default = 'isolate_mode=([0-9]*) order=([0-9]*) nr_requested=([0-9]*) nr_scanned=([0-9]*) nr_taken=([0-9]*) file=([0-9]*)';
|
||||||
my $regex_lru_shrink_inactive_default = 'nid=([0-9]*) zid=([0-9]*) nr_scanned=([0-9]*) nr_reclaimed=([0-9]*) priority=([0-9]*) flags=([A-Z_|]*)';
|
my $regex_lru_shrink_inactive_default = 'nid=([0-9]*) zid=([0-9]*) nr_scanned=([0-9]*) nr_reclaimed=([0-9]*) priority=([0-9]*) flags=([A-Z_|]*)';
|
||||||
my $regex_lru_shrink_active_default = 'lru=([A-Z_]*) nr_scanned=([0-9]*) nr_rotated=([0-9]*) priority=([0-9]*)';
|
my $regex_lru_shrink_active_default = 'lru=([A-Z_]*) nr_scanned=([0-9]*) nr_rotated=([0-9]*) priority=([0-9]*)';
|
||||||
my $regex_writepage_default = 'page=([0-9a-f]*) pfn=([0-9]*) flags=([A-Z_|]*)';
|
my $regex_writepage_default = 'page=([0-9a-f]*) pfn=([0-9]*) flags=([A-Z_|]*)';
|
||||||
|
@ -200,7 +199,7 @@ $regex_lru_isolate = generate_traceevent_regex(
|
||||||
$regex_lru_isolate_default,
|
$regex_lru_isolate_default,
|
||||||
"isolate_mode", "order",
|
"isolate_mode", "order",
|
||||||
"nr_requested", "nr_scanned", "nr_taken",
|
"nr_requested", "nr_scanned", "nr_taken",
|
||||||
"contig_taken", "contig_dirty", "contig_failed");
|
"file");
|
||||||
$regex_lru_shrink_inactive = generate_traceevent_regex(
|
$regex_lru_shrink_inactive = generate_traceevent_regex(
|
||||||
"vmscan/mm_vmscan_lru_shrink_inactive",
|
"vmscan/mm_vmscan_lru_shrink_inactive",
|
||||||
$regex_lru_shrink_inactive_default,
|
$regex_lru_shrink_inactive_default,
|
||||||
|
@ -375,7 +374,6 @@ EVENT_PROCESS:
|
||||||
}
|
}
|
||||||
my $isolate_mode = $1;
|
my $isolate_mode = $1;
|
||||||
my $nr_scanned = $4;
|
my $nr_scanned = $4;
|
||||||
my $nr_contig_dirty = $7;
|
|
||||||
|
|
||||||
# To closer match vmstat scanning statistics, only count isolate_both
|
# To closer match vmstat scanning statistics, only count isolate_both
|
||||||
# and isolate_inactive as scanning. isolate_active is rotation
|
# and isolate_inactive as scanning. isolate_active is rotation
|
||||||
|
@ -385,7 +383,6 @@ EVENT_PROCESS:
|
||||||
if ($isolate_mode != 2) {
|
if ($isolate_mode != 2) {
|
||||||
$perprocesspid{$process_pid}->{HIGH_NR_SCANNED} += $nr_scanned;
|
$perprocesspid{$process_pid}->{HIGH_NR_SCANNED} += $nr_scanned;
|
||||||
}
|
}
|
||||||
$perprocesspid{$process_pid}->{HIGH_NR_CONTIG_DIRTY} += $nr_contig_dirty;
|
|
||||||
} elsif ($tracepoint eq "mm_vmscan_lru_shrink_inactive") {
|
} elsif ($tracepoint eq "mm_vmscan_lru_shrink_inactive") {
|
||||||
$details = $6;
|
$details = $6;
|
||||||
if ($details !~ /$regex_lru_shrink_inactive/o) {
|
if ($details !~ /$regex_lru_shrink_inactive/o) {
|
||||||
|
@ -539,13 +536,6 @@ sub dump_stats {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($stats{$process_pid}->{HIGH_NR_CONTIG_DIRTY}) {
|
|
||||||
print " ";
|
|
||||||
my $count = $stats{$process_pid}->{HIGH_NR_CONTIG_DIRTY};
|
|
||||||
if ($count != 0) {
|
|
||||||
print "contig-dirty=$count ";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
print "\n";
|
print "\n";
|
||||||
}
|
}
|
||||||
|
|
91
MAINTAINERS
91
MAINTAINERS
|
@ -943,16 +943,10 @@ L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux.git
|
||||||
F: arch/arm/mach-imx/
|
F: arch/arm/mach-imx/
|
||||||
|
F: arch/arm/mach-mxs/
|
||||||
F: arch/arm/boot/dts/imx*
|
F: arch/arm/boot/dts/imx*
|
||||||
F: arch/arm/configs/imx*_defconfig
|
F: arch/arm/configs/imx*_defconfig
|
||||||
|
|
||||||
ARM/FREESCALE MXS ARM ARCHITECTURE
|
|
||||||
M: Shawn Guo <shawn.guo@linaro.org>
|
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
|
||||||
S: Maintained
|
|
||||||
T: git git://git.linaro.org/people/shawnguo/linux-2.6.git
|
|
||||||
F: arch/arm/mach-mxs/
|
|
||||||
|
|
||||||
ARM/GLOMATION GESBC9312SX MACHINE SUPPORT
|
ARM/GLOMATION GESBC9312SX MACHINE SUPPORT
|
||||||
M: Lennert Buytenhek <kernel@wantstofly.org>
|
M: Lennert Buytenhek <kernel@wantstofly.org>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
|
@ -1052,9 +1046,33 @@ M: Santosh Shilimkar <santosh.shilimkar@ti.com>
|
||||||
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
|
||||||
F: arch/arm/mach-keystone/
|
F: arch/arm/mach-keystone/
|
||||||
F: drivers/clk/keystone/
|
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/ssantosh/linux-keystone.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/ssantosh/linux-keystone.git
|
||||||
|
|
||||||
|
ARM/TEXAS INSTRUMENT KEYSTONE CLOCK FRAMEWORK
|
||||||
|
M: Santosh Shilimkar <santosh.shilimkar@ti.com>
|
||||||
|
L: linux-kernel@vger.kernel.org
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/clk/keystone/
|
||||||
|
|
||||||
|
ARM/TEXAS INSTRUMENT KEYSTONE ClOCKSOURCE
|
||||||
|
M: Santosh Shilimkar <santosh.shilimkar@ti.com>
|
||||||
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
|
L: linux-kernel@vger.kernel.org
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/clocksource/timer-keystone.c
|
||||||
|
|
||||||
|
ARM/TEXAS INSTRUMENT KEYSTONE RESET DRIVER
|
||||||
|
M: Santosh Shilimkar <santosh.shilimkar@ti.com>
|
||||||
|
L: linux-kernel@vger.kernel.org
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/power/reset/keystone-reset.c
|
||||||
|
|
||||||
|
ARM/TEXAS INSTRUMENT AEMIF/EMIF DRIVERS
|
||||||
|
M: Santosh Shilimkar <santosh.shilimkar@ti.com>
|
||||||
|
L: linux-kernel@vger.kernel.org
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/memory/*emif*
|
||||||
|
|
||||||
ARM/LOGICPD PXA270 MACHINE SUPPORT
|
ARM/LOGICPD PXA270 MACHINE SUPPORT
|
||||||
M: Lennert Buytenhek <kernel@wantstofly.org>
|
M: Lennert Buytenhek <kernel@wantstofly.org>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
|
@ -1296,6 +1314,20 @@ W: http://oss.renesas.com
|
||||||
Q: http://patchwork.kernel.org/project/linux-sh/list/
|
Q: http://patchwork.kernel.org/project/linux-sh/list/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas.git next
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas.git next
|
||||||
S: Supported
|
S: Supported
|
||||||
|
F: arch/arm/boot/dts/emev2*
|
||||||
|
F: arch/arm/boot/dts/r7s*
|
||||||
|
F: arch/arm/boot/dts/r8a*
|
||||||
|
F: arch/arm/boot/dts/sh*
|
||||||
|
F: arch/arm/configs/ape6evm_defconfig
|
||||||
|
F: arch/arm/configs/armadillo800eva_defconfig
|
||||||
|
F: arch/arm/configs/bockw_defconfig
|
||||||
|
F: arch/arm/configs/genmai_defconfig
|
||||||
|
F: arch/arm/configs/koelsch_defconfig
|
||||||
|
F: arch/arm/configs/kzm9g_defconfig
|
||||||
|
F: arch/arm/configs/lager_defconfig
|
||||||
|
F: arch/arm/configs/mackerel_defconfig
|
||||||
|
F: arch/arm/configs/marzen_defconfig
|
||||||
|
F: arch/arm/configs/shmobile_defconfig
|
||||||
F: arch/arm/mach-shmobile/
|
F: arch/arm/mach-shmobile/
|
||||||
F: drivers/sh/
|
F: drivers/sh/
|
||||||
|
|
||||||
|
@ -2917,6 +2949,9 @@ L: linux-doc@vger.kernel.org
|
||||||
T: quilt http://www.infradead.org/~rdunlap/Doc/patches/
|
T: quilt http://www.infradead.org/~rdunlap/Doc/patches/
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/
|
F: Documentation/
|
||||||
|
X: Documentation/ABI/
|
||||||
|
X: Documentation/devicetree/
|
||||||
|
X: Documentation/[a-z][a-z]_[A-Z][A-Z]/
|
||||||
|
|
||||||
DOUBLETALK DRIVER
|
DOUBLETALK DRIVER
|
||||||
M: "James R. Van Zandt" <jrv@vanzandt.mv.com>
|
M: "James R. Van Zandt" <jrv@vanzandt.mv.com>
|
||||||
|
@ -3189,14 +3224,6 @@ L: linux-scsi@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/scsi/eata_pio.*
|
F: drivers/scsi/eata_pio.*
|
||||||
|
|
||||||
EBTABLES
|
|
||||||
L: netfilter-devel@vger.kernel.org
|
|
||||||
W: http://ebtables.sourceforge.net/
|
|
||||||
S: Orphan
|
|
||||||
F: include/linux/netfilter_bridge/ebt_*.h
|
|
||||||
F: include/uapi/linux/netfilter_bridge/ebt_*.h
|
|
||||||
F: net/bridge/netfilter/ebt*.c
|
|
||||||
|
|
||||||
EC100 MEDIA DRIVER
|
EC100 MEDIA DRIVER
|
||||||
M: Antti Palosaari <crope@iki.fi>
|
M: Antti Palosaari <crope@iki.fi>
|
||||||
L: linux-media@vger.kernel.org
|
L: linux-media@vger.kernel.org
|
||||||
|
@ -5517,10 +5544,11 @@ S: Maintained
|
||||||
F: arch/arm/mach-lpc32xx/
|
F: arch/arm/mach-lpc32xx/
|
||||||
|
|
||||||
LSILOGIC MPT FUSION DRIVERS (FC/SAS/SPI)
|
LSILOGIC MPT FUSION DRIVERS (FC/SAS/SPI)
|
||||||
M: Nagalakshmi Nandigama <Nagalakshmi.Nandigama@lsi.com>
|
M: Nagalakshmi Nandigama <nagalakshmi.nandigama@avagotech.com>
|
||||||
M: Sreekanth Reddy <Sreekanth.Reddy@lsi.com>
|
M: Praveen Krishnamoorthy <praveen.krishnamoorthy@avagotech.com>
|
||||||
M: support@lsi.com
|
M: Sreekanth Reddy <sreekanth.reddy@avagotech.com>
|
||||||
L: DL-MPTFusionLinux@lsi.com
|
M: Abhijit Mahajan <abhijit.mahajan@avagotech.com>
|
||||||
|
L: MPT-FusionLinux.pdl@avagotech.com
|
||||||
L: linux-scsi@vger.kernel.org
|
L: linux-scsi@vger.kernel.org
|
||||||
W: http://www.lsilogic.com/support
|
W: http://www.lsilogic.com/support
|
||||||
S: Supported
|
S: Supported
|
||||||
|
@ -6105,12 +6133,11 @@ F: Documentation/networking/s2io.txt
|
||||||
F: Documentation/networking/vxge.txt
|
F: Documentation/networking/vxge.txt
|
||||||
F: drivers/net/ethernet/neterion/
|
F: drivers/net/ethernet/neterion/
|
||||||
|
|
||||||
NETFILTER/IPTABLES
|
NETFILTER ({IP,IP6,ARP,EB,NF}TABLES)
|
||||||
M: Pablo Neira Ayuso <pablo@netfilter.org>
|
M: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||||
M: Patrick McHardy <kaber@trash.net>
|
M: Patrick McHardy <kaber@trash.net>
|
||||||
M: Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
|
M: Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
|
||||||
L: netfilter-devel@vger.kernel.org
|
L: netfilter-devel@vger.kernel.org
|
||||||
L: netfilter@vger.kernel.org
|
|
||||||
L: coreteam@netfilter.org
|
L: coreteam@netfilter.org
|
||||||
W: http://www.netfilter.org/
|
W: http://www.netfilter.org/
|
||||||
W: http://www.iptables.org/
|
W: http://www.iptables.org/
|
||||||
|
@ -6774,7 +6801,7 @@ F: arch/x86/kernel/quirks.c
|
||||||
|
|
||||||
PCI DRIVER FOR IMX6
|
PCI DRIVER FOR IMX6
|
||||||
M: Richard Zhu <r65037@freescale.com>
|
M: Richard Zhu <r65037@freescale.com>
|
||||||
M: Shawn Guo <shawn.guo@linaro.org>
|
M: Shawn Guo <shawn.guo@freescale.com>
|
||||||
L: linux-pci@vger.kernel.org
|
L: linux-pci@vger.kernel.org
|
||||||
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
|
||||||
|
@ -8971,7 +8998,7 @@ F: drivers/media/radio/radio-raremono.c
|
||||||
|
|
||||||
THERMAL
|
THERMAL
|
||||||
M: Zhang Rui <rui.zhang@intel.com>
|
M: Zhang Rui <rui.zhang@intel.com>
|
||||||
M: Eduardo Valentin <eduardo.valentin@ti.com>
|
M: Eduardo Valentin <edubezval@gmail.com>
|
||||||
L: linux-pm@vger.kernel.org
|
L: linux-pm@vger.kernel.org
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux.git
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/evalenti/linux-soc-thermal.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/evalenti/linux-soc-thermal.git
|
||||||
|
@ -8998,7 +9025,7 @@ S: Maintained
|
||||||
F: drivers/platform/x86/thinkpad_acpi.c
|
F: drivers/platform/x86/thinkpad_acpi.c
|
||||||
|
|
||||||
TI BANDGAP AND THERMAL DRIVER
|
TI BANDGAP AND THERMAL DRIVER
|
||||||
M: Eduardo Valentin <eduardo.valentin@ti.com>
|
M: Eduardo Valentin <edubezval@gmail.com>
|
||||||
L: linux-pm@vger.kernel.org
|
L: linux-pm@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/thermal/ti-soc-thermal/
|
F: drivers/thermal/ti-soc-thermal/
|
||||||
|
@ -9412,12 +9439,6 @@ S: Maintained
|
||||||
F: drivers/usb/host/isp116x*
|
F: drivers/usb/host/isp116x*
|
||||||
F: include/linux/usb/isp116x.h
|
F: include/linux/usb/isp116x.h
|
||||||
|
|
||||||
USB KAWASAKI LSI DRIVER
|
|
||||||
M: Oliver Neukum <oliver@neukum.org>
|
|
||||||
L: linux-usb@vger.kernel.org
|
|
||||||
S: Maintained
|
|
||||||
F: drivers/usb/serial/kl5kusb105.*
|
|
||||||
|
|
||||||
USB MASS STORAGE DRIVER
|
USB MASS STORAGE DRIVER
|
||||||
M: Matthew Dharm <mdharm-usb@one-eyed-alien.net>
|
M: Matthew Dharm <mdharm-usb@one-eyed-alien.net>
|
||||||
L: linux-usb@vger.kernel.org
|
L: linux-usb@vger.kernel.org
|
||||||
|
@ -9445,12 +9466,6 @@ S: Maintained
|
||||||
F: Documentation/usb/ohci.txt
|
F: Documentation/usb/ohci.txt
|
||||||
F: drivers/usb/host/ohci*
|
F: drivers/usb/host/ohci*
|
||||||
|
|
||||||
USB OPTION-CARD DRIVER
|
|
||||||
M: Matthias Urlichs <smurf@smurf.noris.de>
|
|
||||||
L: linux-usb@vger.kernel.org
|
|
||||||
S: Maintained
|
|
||||||
F: drivers/usb/serial/option.c
|
|
||||||
|
|
||||||
USB PEGASUS DRIVER
|
USB PEGASUS DRIVER
|
||||||
M: Petko Manolov <petkan@nucleusys.com>
|
M: Petko Manolov <petkan@nucleusys.com>
|
||||||
L: linux-usb@vger.kernel.org
|
L: linux-usb@vger.kernel.org
|
||||||
|
@ -9483,7 +9498,7 @@ S: Maintained
|
||||||
F: drivers/net/usb/rtl8150.c
|
F: drivers/net/usb/rtl8150.c
|
||||||
|
|
||||||
USB SERIAL SUBSYSTEM
|
USB SERIAL SUBSYSTEM
|
||||||
M: Johan Hovold <jhovold@gmail.com>
|
M: Johan Hovold <johan@kernel.org>
|
||||||
L: linux-usb@vger.kernel.org
|
L: linux-usb@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/usb/usb-serial.txt
|
F: Documentation/usb/usb-serial.txt
|
||||||
|
|
102
Makefile
102
Makefile
|
@ -1,7 +1,7 @@
|
||||||
VERSION = 3
|
VERSION = 3
|
||||||
PATCHLEVEL = 16
|
PATCHLEVEL = 16
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION = -rc2
|
EXTRAVERSION = -rc5
|
||||||
NAME = Shuffling Zombie Juror
|
NAME = Shuffling Zombie Juror
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
@ -41,6 +41,29 @@ unexport GREP_OPTIONS
|
||||||
# descending is started. They are now explicitly listed as the
|
# descending is started. They are now explicitly listed as the
|
||||||
# prepare rule.
|
# prepare rule.
|
||||||
|
|
||||||
|
# Beautify output
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Normally, we echo the whole command before executing it. By making
|
||||||
|
# that echo $($(quiet)$(cmd)), we now have the possibility to set
|
||||||
|
# $(quiet) to choose other forms of output instead, e.g.
|
||||||
|
#
|
||||||
|
# quiet_cmd_cc_o_c = Compiling $(RELDIR)/$@
|
||||||
|
# cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $<
|
||||||
|
#
|
||||||
|
# If $(quiet) is empty, the whole command will be printed.
|
||||||
|
# If it is set to "quiet_", only the short version will be printed.
|
||||||
|
# If it is set to "silent_", nothing will be printed at all, since
|
||||||
|
# the variable $(silent_cmd_cc_o_c) doesn't exist.
|
||||||
|
#
|
||||||
|
# A simple variant is to prefix commands with $(Q) - that's useful
|
||||||
|
# for commands that shall be hidden in non-verbose mode.
|
||||||
|
#
|
||||||
|
# $(Q)ln $@ :<
|
||||||
|
#
|
||||||
|
# If KBUILD_VERBOSE equals 0 then the above command will be hidden.
|
||||||
|
# If KBUILD_VERBOSE equals 1 then the above command is displayed.
|
||||||
|
#
|
||||||
# To put more focus on warnings, be less verbose as default
|
# To put more focus on warnings, be less verbose as default
|
||||||
# Use 'make V=1' to see the full commands
|
# Use 'make V=1' to see the full commands
|
||||||
|
|
||||||
|
@ -51,6 +74,29 @@ ifndef KBUILD_VERBOSE
|
||||||
KBUILD_VERBOSE = 0
|
KBUILD_VERBOSE = 0
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(KBUILD_VERBOSE),1)
|
||||||
|
quiet =
|
||||||
|
Q =
|
||||||
|
else
|
||||||
|
quiet=quiet_
|
||||||
|
Q = @
|
||||||
|
endif
|
||||||
|
|
||||||
|
# If the user is running make -s (silent mode), suppress echoing of
|
||||||
|
# commands
|
||||||
|
|
||||||
|
ifneq ($(filter 4.%,$(MAKE_VERSION)),) # make-4
|
||||||
|
ifneq ($(filter %s ,$(firstword x$(MAKEFLAGS))),)
|
||||||
|
quiet=silent_
|
||||||
|
endif
|
||||||
|
else # make-3.8x
|
||||||
|
ifneq ($(filter s% -s%,$(MAKEFLAGS)),)
|
||||||
|
quiet=silent_
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
export quiet Q KBUILD_VERBOSE
|
||||||
|
|
||||||
# Call a source code checker (by default, "sparse") as part of the
|
# Call a source code checker (by default, "sparse") as part of the
|
||||||
# C compilation.
|
# C compilation.
|
||||||
#
|
#
|
||||||
|
@ -126,7 +172,13 @@ PHONY += $(MAKECMDGOALS) sub-make
|
||||||
$(filter-out _all sub-make $(CURDIR)/Makefile, $(MAKECMDGOALS)) _all: sub-make
|
$(filter-out _all sub-make $(CURDIR)/Makefile, $(MAKECMDGOALS)) _all: sub-make
|
||||||
@:
|
@:
|
||||||
|
|
||||||
|
# Fake the "Entering directory" message once, so that IDEs/editors are
|
||||||
|
# able to understand relative filenames.
|
||||||
|
echodir := @echo
|
||||||
|
quiet_echodir := @echo
|
||||||
|
silent_echodir := @:
|
||||||
sub-make: FORCE
|
sub-make: FORCE
|
||||||
|
$($(quiet)echodir) "make[1]: Entering directory \`$(KBUILD_OUTPUT)'"
|
||||||
$(if $(KBUILD_VERBOSE:1=),@)$(MAKE) -C $(KBUILD_OUTPUT) \
|
$(if $(KBUILD_VERBOSE:1=),@)$(MAKE) -C $(KBUILD_OUTPUT) \
|
||||||
KBUILD_SRC=$(CURDIR) \
|
KBUILD_SRC=$(CURDIR) \
|
||||||
KBUILD_EXTMOD="$(KBUILD_EXTMOD)" -f $(CURDIR)/Makefile \
|
KBUILD_EXTMOD="$(KBUILD_EXTMOD)" -f $(CURDIR)/Makefile \
|
||||||
|
@ -289,52 +341,6 @@ endif
|
||||||
export KBUILD_MODULES KBUILD_BUILTIN
|
export KBUILD_MODULES KBUILD_BUILTIN
|
||||||
export KBUILD_CHECKSRC KBUILD_SRC KBUILD_EXTMOD
|
export KBUILD_CHECKSRC KBUILD_SRC KBUILD_EXTMOD
|
||||||
|
|
||||||
# Beautify output
|
|
||||||
# ---------------------------------------------------------------------------
|
|
||||||
#
|
|
||||||
# Normally, we echo the whole command before executing it. By making
|
|
||||||
# that echo $($(quiet)$(cmd)), we now have the possibility to set
|
|
||||||
# $(quiet) to choose other forms of output instead, e.g.
|
|
||||||
#
|
|
||||||
# quiet_cmd_cc_o_c = Compiling $(RELDIR)/$@
|
|
||||||
# cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $<
|
|
||||||
#
|
|
||||||
# If $(quiet) is empty, the whole command will be printed.
|
|
||||||
# If it is set to "quiet_", only the short version will be printed.
|
|
||||||
# If it is set to "silent_", nothing will be printed at all, since
|
|
||||||
# the variable $(silent_cmd_cc_o_c) doesn't exist.
|
|
||||||
#
|
|
||||||
# A simple variant is to prefix commands with $(Q) - that's useful
|
|
||||||
# for commands that shall be hidden in non-verbose mode.
|
|
||||||
#
|
|
||||||
# $(Q)ln $@ :<
|
|
||||||
#
|
|
||||||
# If KBUILD_VERBOSE equals 0 then the above command will be hidden.
|
|
||||||
# If KBUILD_VERBOSE equals 1 then the above command is displayed.
|
|
||||||
|
|
||||||
ifeq ($(KBUILD_VERBOSE),1)
|
|
||||||
quiet =
|
|
||||||
Q =
|
|
||||||
else
|
|
||||||
quiet=quiet_
|
|
||||||
Q = @
|
|
||||||
endif
|
|
||||||
|
|
||||||
# If the user is running make -s (silent mode), suppress echoing of
|
|
||||||
# commands
|
|
||||||
|
|
||||||
ifneq ($(filter 4.%,$(MAKE_VERSION)),) # make-4
|
|
||||||
ifneq ($(filter %s ,$(firstword x$(MAKEFLAGS))),)
|
|
||||||
quiet=silent_
|
|
||||||
endif
|
|
||||||
else # make-3.8x
|
|
||||||
ifneq ($(filter s% -s%,$(MAKEFLAGS)),)
|
|
||||||
quiet=silent_
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
export quiet Q KBUILD_VERBOSE
|
|
||||||
|
|
||||||
ifneq ($(CC),)
|
ifneq ($(CC),)
|
||||||
ifeq ($(shell $(CC) -v 2>&1 | grep -c "clang version"), 1)
|
ifeq ($(shell $(CC) -v 2>&1 | grep -c "clang version"), 1)
|
||||||
COMPILER := clang
|
COMPILER := clang
|
||||||
|
@ -1170,7 +1176,7 @@ distclean: mrproper
|
||||||
# Packaging of the kernel to various formats
|
# Packaging of the kernel to various formats
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# rpm target kept for backward compatibility
|
# rpm target kept for backward compatibility
|
||||||
package-dir := $(srctree)/scripts/package
|
package-dir := scripts/package
|
||||||
|
|
||||||
%src-pkg: FORCE
|
%src-pkg: FORCE
|
||||||
$(Q)$(MAKE) $(build)=$(package-dir) $@
|
$(Q)$(MAKE) $(build)=$(package-dir) $@
|
||||||
|
|
|
@ -60,7 +60,7 @@ extern void read_decode_cache_bcr(void);
|
||||||
#define ARC_REG_IC_IVIC 0x10
|
#define ARC_REG_IC_IVIC 0x10
|
||||||
#define ARC_REG_IC_CTRL 0x11
|
#define ARC_REG_IC_CTRL 0x11
|
||||||
#define ARC_REG_IC_IVIL 0x19
|
#define ARC_REG_IC_IVIL 0x19
|
||||||
#if defined(CONFIG_ARC_MMU_V3) || defined (CONFIG_ARC_MMU_V4)
|
#if defined(CONFIG_ARC_MMU_V3)
|
||||||
#define ARC_REG_IC_PTAG 0x1E
|
#define ARC_REG_IC_PTAG 0x1E
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -74,7 +74,7 @@ extern void read_decode_cache_bcr(void);
|
||||||
#define ARC_REG_DC_IVDL 0x4A
|
#define ARC_REG_DC_IVDL 0x4A
|
||||||
#define ARC_REG_DC_FLSH 0x4B
|
#define ARC_REG_DC_FLSH 0x4B
|
||||||
#define ARC_REG_DC_FLDL 0x4C
|
#define ARC_REG_DC_FLDL 0x4C
|
||||||
#if defined(CONFIG_ARC_MMU_V3) || defined (CONFIG_ARC_MMU_V4)
|
#if defined(CONFIG_ARC_MMU_V3)
|
||||||
#define ARC_REG_DC_PTAG 0x5C
|
#define ARC_REG_DC_PTAG 0x5C
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#ifndef _UAPI__ASM_ARC_PTRACE_H
|
#ifndef _UAPI__ASM_ARC_PTRACE_H
|
||||||
#define _UAPI__ASM_ARC_PTRACE_H
|
#define _UAPI__ASM_ARC_PTRACE_H
|
||||||
|
|
||||||
|
#define PTRACE_GET_THREAD_AREA 25
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -10,9 +10,9 @@
|
||||||
* -This is the more "natural" hand written assembler
|
* -This is the more "natural" hand written assembler
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <linux/linkage.h>
|
||||||
#include <asm/entry.h> /* For the SAVE_* macros */
|
#include <asm/entry.h> /* For the SAVE_* macros */
|
||||||
#include <asm/asm-offsets.h>
|
#include <asm/asm-offsets.h>
|
||||||
#include <asm/linkage.h>
|
|
||||||
|
|
||||||
#define KSP_WORD_OFF ((TASK_THREAD + THREAD_KSP) / 4)
|
#define KSP_WORD_OFF ((TASK_THREAD + THREAD_KSP) / 4)
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,7 @@ const struct machine_desc * __init setup_machine_fdt(void *dt)
|
||||||
{
|
{
|
||||||
const struct machine_desc *mdesc;
|
const struct machine_desc *mdesc;
|
||||||
unsigned long dt_root;
|
unsigned long dt_root;
|
||||||
void *clk;
|
const void *clk;
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
if (!early_init_dt_scan(dt))
|
if (!early_init_dt_scan(dt))
|
||||||
|
|
|
@ -77,10 +77,11 @@ stext:
|
||||||
; Clear BSS before updating any globals
|
; Clear BSS before updating any globals
|
||||||
; XXX: use ZOL here
|
; XXX: use ZOL here
|
||||||
mov r5, __bss_start
|
mov r5, __bss_start
|
||||||
mov r6, __bss_stop
|
sub r6, __bss_stop, r5
|
||||||
|
lsr.f lp_count, r6, 2
|
||||||
|
lpnz 1f
|
||||||
|
st.ab 0, [r5, 4]
|
||||||
1:
|
1:
|
||||||
st.ab 0, [r5,4]
|
|
||||||
brlt r5, r6, 1b
|
|
||||||
|
|
||||||
; Uboot - kernel ABI
|
; Uboot - kernel ABI
|
||||||
; r0 = [0] No uboot interaction, [1] cmdline in r2, [2] DTB in r2
|
; r0 = [0] No uboot interaction, [1] cmdline in r2, [2] DTB in r2
|
||||||
|
|
|
@ -146,6 +146,10 @@ long arch_ptrace(struct task_struct *child, long request,
|
||||||
pr_debug("REQ=%ld: ADDR =0x%lx, DATA=0x%lx)\n", request, addr, data);
|
pr_debug("REQ=%ld: ADDR =0x%lx, DATA=0x%lx)\n", request, addr, data);
|
||||||
|
|
||||||
switch (request) {
|
switch (request) {
|
||||||
|
case PTRACE_GET_THREAD_AREA:
|
||||||
|
ret = put_user(task_thread_info(child)->thr_ptr,
|
||||||
|
(unsigned long __user *)data);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
ret = ptrace_request(child, request, addr, data);
|
ret = ptrace_request(child, request, addr, data);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -337,8 +337,19 @@ irqreturn_t do_IPI(int irq, void *dev_id)
|
||||||
* API called by platform code to hookup arch-common ISR to their IPI IRQ
|
* API called by platform code to hookup arch-common ISR to their IPI IRQ
|
||||||
*/
|
*/
|
||||||
static DEFINE_PER_CPU(int, ipi_dev);
|
static DEFINE_PER_CPU(int, ipi_dev);
|
||||||
|
|
||||||
|
static struct irqaction arc_ipi_irq = {
|
||||||
|
.name = "IPI Interrupt",
|
||||||
|
.flags = IRQF_PERCPU,
|
||||||
|
.handler = do_IPI,
|
||||||
|
};
|
||||||
|
|
||||||
int smp_ipi_irq_setup(int cpu, int irq)
|
int smp_ipi_irq_setup(int cpu, int irq)
|
||||||
{
|
{
|
||||||
int *dev_id = &per_cpu(ipi_dev, smp_processor_id());
|
if (!cpu)
|
||||||
return request_percpu_irq(irq, do_IPI, "IPI Interrupt", dev_id);
|
return setup_irq(irq, &arc_ipi_irq);
|
||||||
|
else
|
||||||
|
arch_unmask_irq(irq);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -116,7 +116,7 @@ SECTIONS
|
||||||
|
|
||||||
_edata = .;
|
_edata = .;
|
||||||
|
|
||||||
BSS_SECTION(0, 0, 0)
|
BSS_SECTION(4, 4, 4)
|
||||||
|
|
||||||
#ifdef CONFIG_ARC_DW2_UNWIND
|
#ifdef CONFIG_ARC_DW2_UNWIND
|
||||||
. = ALIGN(PAGE_SIZE);
|
. = ALIGN(PAGE_SIZE);
|
||||||
|
|
|
@ -389,7 +389,7 @@ static inline void __dc_line_op(unsigned long paddr, unsigned long vaddr,
|
||||||
/***********************************************************
|
/***********************************************************
|
||||||
* Machine specific helper for per line I-Cache invalidate.
|
* Machine specific helper for per line I-Cache invalidate.
|
||||||
*/
|
*/
|
||||||
static void __ic_line_inv_vaddr(unsigned long paddr, unsigned long vaddr,
|
static void __ic_line_inv_vaddr_local(unsigned long paddr, unsigned long vaddr,
|
||||||
unsigned long sz)
|
unsigned long sz)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
@ -405,6 +405,23 @@ static inline void __ic_entire_inv(void)
|
||||||
read_aux_reg(ARC_REG_IC_CTRL); /* blocks */
|
read_aux_reg(ARC_REG_IC_CTRL); /* blocks */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct ic_line_inv_vaddr_ipi {
|
||||||
|
unsigned long paddr, vaddr;
|
||||||
|
int sz;
|
||||||
|
};
|
||||||
|
|
||||||
|
static void __ic_line_inv_vaddr_helper(void *info)
|
||||||
|
{
|
||||||
|
struct ic_line_inv_vaddr_ipi *ic_inv = (struct ic_line_inv_vaddr_ipi*) info;
|
||||||
|
__ic_line_inv_vaddr_local(ic_inv->paddr, ic_inv->vaddr, ic_inv->sz);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __ic_line_inv_vaddr(unsigned long paddr, unsigned long vaddr,
|
||||||
|
unsigned long sz)
|
||||||
|
{
|
||||||
|
struct ic_line_inv_vaddr_ipi ic_inv = { paddr, vaddr , sz};
|
||||||
|
on_each_cpu(__ic_line_inv_vaddr_helper, &ic_inv, 1);
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#define __ic_entire_inv()
|
#define __ic_entire_inv()
|
||||||
|
@ -553,12 +570,8 @@ void flush_icache_range(unsigned long kstart, unsigned long kend)
|
||||||
*/
|
*/
|
||||||
void __sync_icache_dcache(unsigned long paddr, unsigned long vaddr, int len)
|
void __sync_icache_dcache(unsigned long paddr, unsigned long vaddr, int len)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
|
||||||
|
|
||||||
local_irq_save(flags);
|
|
||||||
__ic_line_inv_vaddr(paddr, vaddr, len);
|
|
||||||
__dc_line_op(paddr, vaddr, len, OP_FLUSH_N_INV);
|
__dc_line_op(paddr, vaddr, len, OP_FLUSH_N_INV);
|
||||||
local_irq_restore(flags);
|
__ic_line_inv_vaddr(paddr, vaddr, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* wrapper to compile time eliminate alignment checks in flush loop */
|
/* wrapper to compile time eliminate alignment checks in flush loop */
|
||||||
|
|
|
@ -357,7 +357,7 @@ dtb-$(CONFIG_ARCH_STI)+= stih407-b2120.dtb \
|
||||||
stih415-b2020.dtb \
|
stih415-b2020.dtb \
|
||||||
stih416-b2000.dtb \
|
stih416-b2000.dtb \
|
||||||
stih416-b2020.dtb \
|
stih416-b2020.dtb \
|
||||||
stih416-b2020-revE.dtb
|
stih416-b2020e.dtb
|
||||||
dtb-$(CONFIG_MACH_SUN4I) += \
|
dtb-$(CONFIG_MACH_SUN4I) += \
|
||||||
sun4i-a10-a1000.dtb \
|
sun4i-a10-a1000.dtb \
|
||||||
sun4i-a10-cubieboard.dtb \
|
sun4i-a10-cubieboard.dtb \
|
||||||
|
|
|
@ -529,8 +529,8 @@
|
||||||
serial-dir = < /* 0: INACTIVE, 1: TX, 2: RX */
|
serial-dir = < /* 0: INACTIVE, 1: TX, 2: RX */
|
||||||
0 0 1 2
|
0 0 1 2
|
||||||
>;
|
>;
|
||||||
tx-num-evt = <1>;
|
tx-num-evt = <32>;
|
||||||
rx-num-evt = <1>;
|
rx-num-evt = <32>;
|
||||||
};
|
};
|
||||||
|
|
||||||
&tps {
|
&tps {
|
||||||
|
|
|
@ -560,8 +560,8 @@
|
||||||
serial-dir = < /* 0: INACTIVE, 1: TX, 2: RX */
|
serial-dir = < /* 0: INACTIVE, 1: TX, 2: RX */
|
||||||
0 0 1 2
|
0 0 1 2
|
||||||
>;
|
>;
|
||||||
tx-num-evt = <1>;
|
tx-num-evt = <32>;
|
||||||
rx-num-evt = <1>;
|
rx-num-evt = <32>;
|
||||||
};
|
};
|
||||||
|
|
||||||
&tscadc {
|
&tscadc {
|
||||||
|
|
|
@ -105,10 +105,16 @@
|
||||||
|
|
||||||
&cpsw_emac0 {
|
&cpsw_emac0 {
|
||||||
phy_id = <&davinci_mdio>, <0>;
|
phy_id = <&davinci_mdio>, <0>;
|
||||||
|
phy-mode = "rmii";
|
||||||
};
|
};
|
||||||
|
|
||||||
&cpsw_emac1 {
|
&cpsw_emac1 {
|
||||||
phy_id = <&davinci_mdio>, <1>;
|
phy_id = <&davinci_mdio>, <1>;
|
||||||
|
phy-mode = "rmii";
|
||||||
|
};
|
||||||
|
|
||||||
|
&phy_sel {
|
||||||
|
rmii-clock-ext;
|
||||||
};
|
};
|
||||||
|
|
||||||
&elm {
|
&elm {
|
||||||
|
|
|
@ -319,6 +319,10 @@
|
||||||
phy-mode = "rmii";
|
phy-mode = "rmii";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&phy_sel {
|
||||||
|
rmii-clock-ext;
|
||||||
|
};
|
||||||
|
|
||||||
&i2c0 {
|
&i2c0 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "Marvell Armada 380 family SoC";
|
model = "Marvell Armada 380 family SoC";
|
||||||
compatible = "marvell,armada380", "marvell,armada38x";
|
compatible = "marvell,armada380";
|
||||||
|
|
||||||
cpus {
|
cpus {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "Marvell Armada 385 Development Board";
|
model = "Marvell Armada 385 Development Board";
|
||||||
compatible = "marvell,a385-db", "marvell,armada385", "marvell,armada38x";
|
compatible = "marvell,a385-db", "marvell,armada385", "marvell,armada380";
|
||||||
|
|
||||||
chosen {
|
chosen {
|
||||||
bootargs = "console=ttyS0,115200 earlyprintk";
|
bootargs = "console=ttyS0,115200 earlyprintk";
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "Marvell Armada 385 Reference Design";
|
model = "Marvell Armada 385 Reference Design";
|
||||||
compatible = "marvell,a385-rd", "marvell,armada385", "marvell,armada38x";
|
compatible = "marvell,a385-rd", "marvell,armada385", "marvell,armada380";
|
||||||
|
|
||||||
chosen {
|
chosen {
|
||||||
bootargs = "console=ttyS0,115200 earlyprintk";
|
bootargs = "console=ttyS0,115200 earlyprintk";
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "Marvell Armada 385 family SoC";
|
model = "Marvell Armada 385 family SoC";
|
||||||
compatible = "marvell,armada385", "marvell,armada38x";
|
compatible = "marvell,armada385", "marvell,armada380";
|
||||||
|
|
||||||
cpus {
|
cpus {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "Marvell Armada 38x family SoC";
|
model = "Marvell Armada 38x family SoC";
|
||||||
compatible = "marvell,armada38x";
|
compatible = "marvell,armada380";
|
||||||
|
|
||||||
aliases {
|
aliases {
|
||||||
gpio0 = &gpio0;
|
gpio0 = &gpio0;
|
||||||
|
|
|
@ -568,24 +568,17 @@
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
#interrupt-cells = <1>;
|
#interrupt-cells = <1>;
|
||||||
|
|
||||||
slow_rc_osc: slow_rc_osc {
|
main_osc: main_osc {
|
||||||
compatible = "fixed-clock";
|
compatible = "atmel,at91rm9200-clk-main-osc";
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
clock-frequency = <32768>;
|
interrupts-extended = <&pmc AT91_PMC_MOSCS>;
|
||||||
clock-accuracy = <50000000>;
|
clocks = <&main_xtal>;
|
||||||
};
|
|
||||||
|
|
||||||
clk32k: slck {
|
|
||||||
compatible = "atmel,at91sam9260-clk-slow";
|
|
||||||
#clock-cells = <0>;
|
|
||||||
clocks = <&slow_rc_osc &slow_xtal>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
main: mainck {
|
main: mainck {
|
||||||
compatible = "atmel,at91rm9200-clk-main";
|
compatible = "atmel,at91rm9200-clk-main";
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
interrupts-extended = <&pmc AT91_PMC_MOSCS>;
|
clocks = <&main_osc>;
|
||||||
clocks = <&main_xtal>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
plla: pllack {
|
plla: pllack {
|
||||||
|
@ -615,7 +608,7 @@
|
||||||
compatible = "atmel,at91rm9200-clk-master";
|
compatible = "atmel,at91rm9200-clk-master";
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
interrupts-extended = <&pmc AT91_PMC_MCKRDY>;
|
interrupts-extended = <&pmc AT91_PMC_MCKRDY>;
|
||||||
clocks = <&clk32k>, <&main>, <&plla>, <&pllb>;
|
clocks = <&slow_xtal>, <&main>, <&plla>, <&pllb>;
|
||||||
atmel,clk-output-range = <0 94000000>;
|
atmel,clk-output-range = <0 94000000>;
|
||||||
atmel,clk-divisors = <1 2 4 0>;
|
atmel,clk-divisors = <1 2 4 0>;
|
||||||
};
|
};
|
||||||
|
@ -632,7 +625,7 @@
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
interrupt-parent = <&pmc>;
|
interrupt-parent = <&pmc>;
|
||||||
clocks = <&clk32k>, <&main>, <&plla>, <&pllb>;
|
clocks = <&slow_xtal>, <&main>, <&plla>, <&pllb>;
|
||||||
|
|
||||||
prog0: prog0 {
|
prog0: prog0 {
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
|
|
|
@ -20,6 +20,10 @@
|
||||||
reg = <0x20000000 0x4000000>;
|
reg = <0x20000000 0x4000000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
slow_xtal {
|
||||||
|
clock-frequency = <32768>;
|
||||||
|
};
|
||||||
|
|
||||||
main_xtal {
|
main_xtal {
|
||||||
clock-frequency = <18432000>;
|
clock-frequency = <18432000>;
|
||||||
};
|
};
|
||||||
|
|
|
@ -132,8 +132,8 @@
|
||||||
<595000000 650000000 3 0>,
|
<595000000 650000000 3 0>,
|
||||||
<545000000 600000000 0 1>,
|
<545000000 600000000 0 1>,
|
||||||
<495000000 555000000 1 1>,
|
<495000000 555000000 1 1>,
|
||||||
<445000000 500000000 1 2>,
|
<445000000 500000000 2 1>,
|
||||||
<400000000 450000000 1 3>;
|
<400000000 450000000 3 1>;
|
||||||
};
|
};
|
||||||
|
|
||||||
plladiv: plladivck {
|
plladiv: plladivck {
|
||||||
|
|
|
@ -140,8 +140,8 @@
|
||||||
595000000 650000000 3 0
|
595000000 650000000 3 0
|
||||||
545000000 600000000 0 1
|
545000000 600000000 0 1
|
||||||
495000000 555000000 1 1
|
495000000 555000000 1 1
|
||||||
445000000 500000000 1 2
|
445000000 500000000 2 1
|
||||||
400000000 450000000 1 3>;
|
400000000 450000000 3 1>;
|
||||||
};
|
};
|
||||||
|
|
||||||
plladiv: plladivck {
|
plladiv: plladivck {
|
||||||
|
@ -1045,6 +1045,8 @@
|
||||||
reg = <0x00500000 0x80000
|
reg = <0x00500000 0x80000
|
||||||
0xf803c000 0x400>;
|
0xf803c000 0x400>;
|
||||||
interrupts = <23 IRQ_TYPE_LEVEL_HIGH 0>;
|
interrupts = <23 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||||
|
clocks = <&usb>, <&udphs_clk>;
|
||||||
|
clock-names = "hclk", "pclk";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
||||||
ep0 {
|
ep0 {
|
||||||
|
|
|
@ -240,6 +240,7 @@
|
||||||
regulator-name = "ldo3";
|
regulator-name = "ldo3";
|
||||||
regulator-min-microvolt = <1800000>;
|
regulator-min-microvolt = <1800000>;
|
||||||
regulator-max-microvolt = <1800000>;
|
regulator-max-microvolt = <1800000>;
|
||||||
|
regulator-always-on;
|
||||||
regulator-boot-on;
|
regulator-boot-on;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -773,7 +773,6 @@
|
||||||
clocks = <&qspi_gfclk_div>;
|
clocks = <&qspi_gfclk_div>;
|
||||||
clock-names = "fck";
|
clock-names = "fck";
|
||||||
num-cs = <4>;
|
num-cs = <4>;
|
||||||
interrupts = <0 343 0x4>;
|
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -984,6 +983,17 @@
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
atl: atl@4843c000 {
|
||||||
|
compatible = "ti,dra7-atl";
|
||||||
|
reg = <0x4843c000 0x3ff>;
|
||||||
|
ti,hwmods = "atl";
|
||||||
|
ti,provided-clocks = <&atl_clkin0_ck>, <&atl_clkin1_ck>,
|
||||||
|
<&atl_clkin2_ck>, <&atl_clkin3_ck>;
|
||||||
|
clocks = <&atl_gfclk_mux>;
|
||||||
|
clock-names = "fck";
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -10,26 +10,26 @@
|
||||||
&cm_core_aon_clocks {
|
&cm_core_aon_clocks {
|
||||||
atl_clkin0_ck: atl_clkin0_ck {
|
atl_clkin0_ck: atl_clkin0_ck {
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
compatible = "fixed-clock";
|
compatible = "ti,dra7-atl-clock";
|
||||||
clock-frequency = <0>;
|
clocks = <&atl_gfclk_mux>;
|
||||||
};
|
};
|
||||||
|
|
||||||
atl_clkin1_ck: atl_clkin1_ck {
|
atl_clkin1_ck: atl_clkin1_ck {
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
compatible = "fixed-clock";
|
compatible = "ti,dra7-atl-clock";
|
||||||
clock-frequency = <0>;
|
clocks = <&atl_gfclk_mux>;
|
||||||
};
|
};
|
||||||
|
|
||||||
atl_clkin2_ck: atl_clkin2_ck {
|
atl_clkin2_ck: atl_clkin2_ck {
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
compatible = "fixed-clock";
|
compatible = "ti,dra7-atl-clock";
|
||||||
clock-frequency = <0>;
|
clocks = <&atl_gfclk_mux>;
|
||||||
};
|
};
|
||||||
|
|
||||||
atl_clkin3_ck: atl_clkin3_ck {
|
atl_clkin3_ck: atl_clkin3_ck {
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
compatible = "fixed-clock";
|
compatible = "ti,dra7-atl-clock";
|
||||||
clock-frequency = <0>;
|
clocks = <&atl_gfclk_mux>;
|
||||||
};
|
};
|
||||||
|
|
||||||
hdmi_clkin_ck: hdmi_clkin_ck {
|
hdmi_clkin_ck: hdmi_clkin_ck {
|
||||||
|
@ -673,10 +673,12 @@
|
||||||
|
|
||||||
l3_iclk_div: l3_iclk_div {
|
l3_iclk_div: l3_iclk_div {
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
compatible = "fixed-factor-clock";
|
compatible = "ti,divider-clock";
|
||||||
|
ti,max-div = <2>;
|
||||||
|
ti,bit-shift = <4>;
|
||||||
|
reg = <0x0100>;
|
||||||
clocks = <&dpll_core_h12x2_ck>;
|
clocks = <&dpll_core_h12x2_ck>;
|
||||||
clock-mult = <1>;
|
ti,index-power-of-two;
|
||||||
clock-div = <1>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
l4_root_clk_div: l4_root_clk_div {
|
l4_root_clk_div: l4_root_clk_div {
|
||||||
|
@ -684,7 +686,7 @@
|
||||||
compatible = "fixed-factor-clock";
|
compatible = "fixed-factor-clock";
|
||||||
clocks = <&l3_iclk_div>;
|
clocks = <&l3_iclk_div>;
|
||||||
clock-mult = <1>;
|
clock-mult = <1>;
|
||||||
clock-div = <1>;
|
clock-div = <2>;
|
||||||
};
|
};
|
||||||
|
|
||||||
video1_clk2_div: video1_clk2_div {
|
video1_clk2_div: video1_clk2_div {
|
||||||
|
|
|
@ -113,7 +113,7 @@
|
||||||
compatible = "arm,cortex-a9-gic";
|
compatible = "arm,cortex-a9-gic";
|
||||||
#interrupt-cells = <3>;
|
#interrupt-cells = <3>;
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
reg = <0x10490000 0x1000>, <0x10480000 0x100>;
|
reg = <0x10490000 0x10000>, <0x10480000 0x10000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
combiner: interrupt-controller@10440000 {
|
combiner: interrupt-controller@10440000 {
|
||||||
|
@ -554,7 +554,7 @@
|
||||||
interrupts = <0 37 0>, <0 38 0>, <0 39 0>, <0 40 0>, <0 41 0>;
|
interrupts = <0 37 0>, <0 38 0>, <0 39 0>, <0 40 0>, <0 41 0>;
|
||||||
clocks = <&clock CLK_PWM>;
|
clocks = <&clock CLK_PWM>;
|
||||||
clock-names = "timers";
|
clock-names = "timers";
|
||||||
#pwm-cells = <2>;
|
#pwm-cells = <3>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -167,7 +167,7 @@
|
||||||
compatible = "samsung,exynos5420-audss-clock";
|
compatible = "samsung,exynos5420-audss-clock";
|
||||||
reg = <0x03810000 0x0C>;
|
reg = <0x03810000 0x0C>;
|
||||||
#clock-cells = <1>;
|
#clock-cells = <1>;
|
||||||
clocks = <&clock CLK_FIN_PLL>, <&clock CLK_FOUT_EPLL>,
|
clocks = <&clock CLK_FIN_PLL>, <&clock CLK_MAU_EPLL>,
|
||||||
<&clock CLK_SCLK_MAUDIO0>, <&clock CLK_SCLK_MAUPCM0>;
|
<&clock CLK_SCLK_MAUDIO0>, <&clock CLK_SCLK_MAUPCM0>;
|
||||||
clock-names = "pll_ref", "pll_in", "sclk_audio", "sclk_pcm_in";
|
clock-names = "pll_ref", "pll_in", "sclk_audio", "sclk_pcm_in";
|
||||||
};
|
};
|
||||||
|
@ -260,6 +260,9 @@
|
||||||
mfc_pd: power-domain@10044060 {
|
mfc_pd: power-domain@10044060 {
|
||||||
compatible = "samsung,exynos4210-pd";
|
compatible = "samsung,exynos4210-pd";
|
||||||
reg = <0x10044060 0x20>;
|
reg = <0x10044060 0x20>;
|
||||||
|
clocks = <&clock CLK_FIN_PLL>, <&clock CLK_MOUT_SW_ACLK333>,
|
||||||
|
<&clock CLK_MOUT_USER_ACLK333>;
|
||||||
|
clock-names = "oscclk", "pclk0", "clk0";
|
||||||
};
|
};
|
||||||
|
|
||||||
disp_pd: power-domain@100440C0 {
|
disp_pd: power-domain@100440C0 {
|
||||||
|
|
|
@ -315,15 +315,15 @@
|
||||||
&esdhc1 {
|
&esdhc1 {
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&pinctrl_esdhc1>;
|
pinctrl-0 = <&pinctrl_esdhc1>;
|
||||||
fsl,cd-controller;
|
cd-gpios = <&gpio1 0 GPIO_ACTIVE_LOW>;
|
||||||
fsl,wp-controller;
|
wp-gpios = <&gpio1 1 GPIO_ACTIVE_HIGH>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
&esdhc2 {
|
&esdhc2 {
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&pinctrl_esdhc2>;
|
pinctrl-0 = <&pinctrl_esdhc2>;
|
||||||
cd-gpios = <&gpio1 6 GPIO_ACTIVE_HIGH>;
|
cd-gpios = <&gpio1 6 GPIO_ACTIVE_LOW>;
|
||||||
wp-gpios = <&gpio1 5 GPIO_ACTIVE_HIGH>;
|
wp-gpios = <&gpio1 5 GPIO_ACTIVE_HIGH>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
@ -468,8 +468,8 @@
|
||||||
MX51_PAD_SD1_DATA1__SD1_DATA1 0x20d5
|
MX51_PAD_SD1_DATA1__SD1_DATA1 0x20d5
|
||||||
MX51_PAD_SD1_DATA2__SD1_DATA2 0x20d5
|
MX51_PAD_SD1_DATA2__SD1_DATA2 0x20d5
|
||||||
MX51_PAD_SD1_DATA3__SD1_DATA3 0x20d5
|
MX51_PAD_SD1_DATA3__SD1_DATA3 0x20d5
|
||||||
MX51_PAD_GPIO1_0__SD1_CD 0x20d5
|
MX51_PAD_GPIO1_0__GPIO1_0 0x100
|
||||||
MX51_PAD_GPIO1_1__SD1_WP 0x20d5
|
MX51_PAD_GPIO1_1__GPIO1_1 0x100
|
||||||
>;
|
>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -107,7 +107,7 @@
|
||||||
&esdhc1 {
|
&esdhc1 {
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&pinctrl_esdhc1 &pinctrl_esdhc1_cd>;
|
pinctrl-0 = <&pinctrl_esdhc1 &pinctrl_esdhc1_cd>;
|
||||||
fsl,cd-controller;
|
cd-gpios = <&gpio1 0 GPIO_ACTIVE_LOW>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -206,7 +206,7 @@
|
||||||
|
|
||||||
pinctrl_esdhc1_cd: esdhc1_cd {
|
pinctrl_esdhc1_cd: esdhc1_cd {
|
||||||
fsl,pins = <
|
fsl,pins = <
|
||||||
MX51_PAD_GPIO1_0__SD1_CD 0x20d5
|
MX51_PAD_GPIO1_0__GPIO1_0 0xd5
|
||||||
>;
|
>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -21,27 +21,25 @@
|
||||||
<0xb0000000 0x20000000>;
|
<0xb0000000 0x20000000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
soc {
|
display1: display@di1 {
|
||||||
display1: display@di1 {
|
compatible = "fsl,imx-parallel-display";
|
||||||
compatible = "fsl,imx-parallel-display";
|
interface-pix-fmt = "bgr666";
|
||||||
interface-pix-fmt = "bgr666";
|
pinctrl-names = "default";
|
||||||
pinctrl-names = "default";
|
pinctrl-0 = <&pinctrl_ipu_disp1>;
|
||||||
pinctrl-0 = <&pinctrl_ipu_disp1>;
|
|
||||||
|
|
||||||
display-timings {
|
display-timings {
|
||||||
800x480p60 {
|
800x480p60 {
|
||||||
native-mode;
|
native-mode;
|
||||||
clock-frequency = <31500000>;
|
clock-frequency = <31500000>;
|
||||||
hactive = <800>;
|
hactive = <800>;
|
||||||
vactive = <480>;
|
vactive = <480>;
|
||||||
hfront-porch = <40>;
|
hfront-porch = <40>;
|
||||||
hback-porch = <88>;
|
hback-porch = <88>;
|
||||||
hsync-len = <128>;
|
hsync-len = <128>;
|
||||||
vback-porch = <33>;
|
vback-porch = <33>;
|
||||||
vfront-porch = <9>;
|
vfront-porch = <9>;
|
||||||
vsync-len = <3>;
|
vsync-len = <3>;
|
||||||
vsync-active = <1>;
|
vsync-active = <1>;
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -143,6 +143,14 @@
|
||||||
fsl,pins = <MX6QDL_PAD_GPIO_0__GPIO1_IO00 0x1b0b0>;
|
fsl,pins = <MX6QDL_PAD_GPIO_0__GPIO1_IO00 0x1b0b0>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pinctrl_hummingboard_usbotg_id: hummingboard-usbotg-id {
|
||||||
|
/*
|
||||||
|
* Similar to pinctrl_usbotg_2, but we want it
|
||||||
|
* pulled down for a fixed host connection.
|
||||||
|
*/
|
||||||
|
fsl,pins = <MX6QDL_PAD_GPIO_1__USB_OTG_ID 0x13059>;
|
||||||
|
};
|
||||||
|
|
||||||
pinctrl_hummingboard_usbotg_vbus: hummingboard-usbotg-vbus {
|
pinctrl_hummingboard_usbotg_vbus: hummingboard-usbotg-vbus {
|
||||||
fsl,pins = <MX6QDL_PAD_EIM_D22__GPIO3_IO22 0x1b0b0>;
|
fsl,pins = <MX6QDL_PAD_EIM_D22__GPIO3_IO22 0x1b0b0>;
|
||||||
};
|
};
|
||||||
|
@ -178,6 +186,8 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
&usbotg {
|
&usbotg {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_hummingboard_usbotg_id>;
|
||||||
vbus-supply = <®_usbotg_vbus>;
|
vbus-supply = <®_usbotg_vbus>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
|
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
#include "imx6q.dtsi"
|
#include "imx6q.dtsi"
|
||||||
#include "imx6qdl-gw54xx.dtsi"
|
#include "imx6qdl-gw51xx.dtsi"
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "Gateworks Ventana i.MX6 Quad GW51XX";
|
model = "Gateworks Ventana i.MX6 Quad GW51XX";
|
||||||
|
|
|
@ -12,6 +12,19 @@
|
||||||
pinctrl-0 = <&pinctrl_cubox_i_ir>;
|
pinctrl-0 = <&pinctrl_cubox_i_ir>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pwmleds {
|
||||||
|
compatible = "pwm-leds";
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_cubox_i_pwm1>;
|
||||||
|
|
||||||
|
front {
|
||||||
|
active-low;
|
||||||
|
label = "imx6:red:front";
|
||||||
|
max-brightness = <248>;
|
||||||
|
pwms = <&pwm1 0 50000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
regulators {
|
regulators {
|
||||||
compatible = "simple-bus";
|
compatible = "simple-bus";
|
||||||
|
|
||||||
|
@ -109,6 +122,10 @@
|
||||||
>;
|
>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pinctrl_cubox_i_pwm1: cubox-i-pwm1-front-led {
|
||||||
|
fsl,pins = <MX6QDL_PAD_DISP0_DAT8__PWM1_OUT 0x1b0b0>;
|
||||||
|
};
|
||||||
|
|
||||||
pinctrl_cubox_i_spdif: cubox-i-spdif {
|
pinctrl_cubox_i_spdif: cubox-i-spdif {
|
||||||
fsl,pins = <MX6QDL_PAD_GPIO_17__SPDIF_OUT 0x13091>;
|
fsl,pins = <MX6QDL_PAD_GPIO_17__SPDIF_OUT 0x13091>;
|
||||||
};
|
};
|
||||||
|
@ -117,6 +134,14 @@
|
||||||
fsl,pins = <MX6QDL_PAD_GPIO_0__GPIO1_IO00 0x4001b0b0>;
|
fsl,pins = <MX6QDL_PAD_GPIO_0__GPIO1_IO00 0x4001b0b0>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pinctrl_cubox_i_usbotg_id: cubox-i-usbotg-id {
|
||||||
|
/*
|
||||||
|
* The Cubox-i pulls this low, but as it's pointless
|
||||||
|
* leaving it as a pull-up, even if it is just 10uA.
|
||||||
|
*/
|
||||||
|
fsl,pins = <MX6QDL_PAD_GPIO_1__USB_OTG_ID 0x13059>;
|
||||||
|
};
|
||||||
|
|
||||||
pinctrl_cubox_i_usbotg_vbus: cubox-i-usbotg-vbus {
|
pinctrl_cubox_i_usbotg_vbus: cubox-i-usbotg-vbus {
|
||||||
fsl,pins = <MX6QDL_PAD_EIM_D22__GPIO3_IO22 0x4001b0b0>;
|
fsl,pins = <MX6QDL_PAD_EIM_D22__GPIO3_IO22 0x4001b0b0>;
|
||||||
};
|
};
|
||||||
|
@ -153,6 +178,8 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
&usbotg {
|
&usbotg {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_cubox_i_usbotg_id>;
|
||||||
vbus-supply = <®_usbotg_vbus>;
|
vbus-supply = <®_usbotg_vbus>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
|
@ -161,7 +161,7 @@
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
pmic: ltc3676@3c {
|
pmic: ltc3676@3c {
|
||||||
compatible = "ltc,ltc3676";
|
compatible = "lltc,ltc3676";
|
||||||
reg = <0x3c>;
|
reg = <0x3c>;
|
||||||
|
|
||||||
regulators {
|
regulators {
|
||||||
|
|
|
@ -220,7 +220,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
pmic: ltc3676@3c {
|
pmic: ltc3676@3c {
|
||||||
compatible = "ltc,ltc3676";
|
compatible = "lltc,ltc3676";
|
||||||
reg = <0x3c>;
|
reg = <0x3c>;
|
||||||
|
|
||||||
regulators {
|
regulators {
|
||||||
|
@ -288,7 +288,7 @@
|
||||||
codec: sgtl5000@0a {
|
codec: sgtl5000@0a {
|
||||||
compatible = "fsl,sgtl5000";
|
compatible = "fsl,sgtl5000";
|
||||||
reg = <0x0a>;
|
reg = <0x0a>;
|
||||||
clocks = <&clks 169>;
|
clocks = <&clks 201>;
|
||||||
VDDA-supply = <®_1p8v>;
|
VDDA-supply = <®_1p8v>;
|
||||||
VDDIO-supply = <®_3p3v>;
|
VDDIO-supply = <®_3p3v>;
|
||||||
};
|
};
|
||||||
|
|
|
@ -234,7 +234,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
pmic: ltc3676@3c {
|
pmic: ltc3676@3c {
|
||||||
compatible = "ltc,ltc3676";
|
compatible = "lltc,ltc3676";
|
||||||
reg = <0x3c>;
|
reg = <0x3c>;
|
||||||
|
|
||||||
regulators {
|
regulators {
|
||||||
|
|
|
@ -10,14 +10,6 @@
|
||||||
MX6QDL_PAD_CSI0_DAT11__UART1_RX_DATA 0x1b0b1
|
MX6QDL_PAD_CSI0_DAT11__UART1_RX_DATA 0x1b0b1
|
||||||
>;
|
>;
|
||||||
};
|
};
|
||||||
|
|
||||||
pinctrl_microsom_usbotg: microsom-usbotg {
|
|
||||||
/*
|
|
||||||
* Similar to pinctrl_usbotg_2, but we want it
|
|
||||||
* pulled down for a fixed host connection.
|
|
||||||
*/
|
|
||||||
fsl,pins = <MX6QDL_PAD_GPIO_1__USB_OTG_ID 0x13059>;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -26,8 +18,3 @@
|
||||||
pinctrl-0 = <&pinctrl_microsom_uart1>;
|
pinctrl-0 = <&pinctrl_microsom_uart1>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
&usbotg {
|
|
||||||
pinctrl-names = "default";
|
|
||||||
pinctrl-0 = <&pinctrl_microsom_usbotg>;
|
|
||||||
};
|
|
||||||
|
|
|
@ -686,7 +686,7 @@
|
||||||
compatible = "fsl,imx6sl-fec", "fsl,imx25-fec";
|
compatible = "fsl,imx6sl-fec", "fsl,imx25-fec";
|
||||||
reg = <0x02188000 0x4000>;
|
reg = <0x02188000 0x4000>;
|
||||||
interrupts = <0 114 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <0 114 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clks IMX6SL_CLK_ENET_REF>,
|
clocks = <&clks IMX6SL_CLK_ENET>,
|
||||||
<&clks IMX6SL_CLK_ENET_REF>;
|
<&clks IMX6SL_CLK_ENET_REF>;
|
||||||
clock-names = "ipg", "ahb";
|
clock-names = "ipg", "ahb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
|
@ -105,7 +105,6 @@
|
||||||
compatible = "ethernet-phy-id0141.0cb0",
|
compatible = "ethernet-phy-id0141.0cb0",
|
||||||
"ethernet-phy-ieee802.3-c22";
|
"ethernet-phy-ieee802.3-c22";
|
||||||
reg = <0>;
|
reg = <0>;
|
||||||
phy-connection-type = "rgmii-id";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
ethphy1: ethernet-phy@1 {
|
ethphy1: ethernet-phy@1 {
|
||||||
|
@ -113,7 +112,6 @@
|
||||||
compatible = "ethernet-phy-id0141.0cb0",
|
compatible = "ethernet-phy-id0141.0cb0",
|
||||||
"ethernet-phy-ieee802.3-c22";
|
"ethernet-phy-ieee802.3-c22";
|
||||||
reg = <1>;
|
reg = <1>;
|
||||||
phy-connection-type = "rgmii-id";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -121,6 +119,7 @@
|
||||||
status = "okay";
|
status = "okay";
|
||||||
ethernet0-port@0 {
|
ethernet0-port@0 {
|
||||||
phy-handle = <ðphy0>;
|
phy-handle = <ðphy0>;
|
||||||
|
phy-connection-type = "rgmii-id";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -128,5 +127,6 @@
|
||||||
status = "okay";
|
status = "okay";
|
||||||
ethernet1-port@0 {
|
ethernet1-port@0 {
|
||||||
phy-handle = <ðphy1>;
|
phy-handle = <ðphy1>;
|
||||||
|
phy-connection-type = "rgmii-id";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -251,6 +251,11 @@
|
||||||
codec {
|
codec {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
twl_power: power {
|
||||||
|
compatible = "ti,twl4030-power-beagleboard-xm", "ti,twl4030-power-idle-osc-off";
|
||||||
|
ti,use_poweroff;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -301,6 +306,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
&uart3 {
|
&uart3 {
|
||||||
|
interrupts-extended = <&intc 74 &omap3_pmx_core OMAP3_UART3_RX>;
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&uart3_pins>;
|
pinctrl-0 = <&uart3_pins>;
|
||||||
};
|
};
|
||||||
|
|
|
@ -50,6 +50,13 @@
|
||||||
gpios = <&twl_gpio 18 GPIO_ACTIVE_LOW>;
|
gpios = <&twl_gpio 18 GPIO_ACTIVE_LOW>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&twl {
|
||||||
|
twl_power: power {
|
||||||
|
compatible = "ti,twl4030-power-omap3-evm", "ti,twl4030-power-idle";
|
||||||
|
ti,use_poweroff;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
&i2c2 {
|
&i2c2 {
|
||||||
clock-frequency = <400000>;
|
clock-frequency = <400000>;
|
||||||
};
|
};
|
||||||
|
|
|
@ -351,6 +351,11 @@
|
||||||
compatible = "ti,twl4030-audio";
|
compatible = "ti,twl4030-audio";
|
||||||
ti,enable-vibra = <1>;
|
ti,enable-vibra = <1>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
twl_power: power {
|
||||||
|
compatible = "ti,twl4030-power-n900", "ti,twl4030-power-idle-osc-off";
|
||||||
|
ti,use_poweroff;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
&twl_keypad {
|
&twl_keypad {
|
||||||
|
|
|
@ -45,7 +45,6 @@
|
||||||
|
|
||||||
operating-points = <
|
operating-points = <
|
||||||
/* kHz uV */
|
/* kHz uV */
|
||||||
500000 880000
|
|
||||||
1000000 1060000
|
1000000 1060000
|
||||||
1500000 1250000
|
1500000 1250000
|
||||||
>;
|
>;
|
||||||
|
|
|
@ -169,8 +169,8 @@
|
||||||
|
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&pinctrl_mii0>;
|
pinctrl-0 = <&pinctrl_mii0>;
|
||||||
clock-names = "stmmaceth";
|
clock-names = "stmmaceth", "sti-ethclk";
|
||||||
clocks = <&clk_s_a1_ls CLK_GMAC0_PHY>;
|
clocks = <&clk_s_a1_ls CLK_ICN_IF_2>, <&clk_s_a1_ls CLK_GMAC0_PHY>;
|
||||||
};
|
};
|
||||||
|
|
||||||
ethernet1: dwmac@fef08000 {
|
ethernet1: dwmac@fef08000 {
|
||||||
|
@ -192,8 +192,8 @@
|
||||||
reset-names = "stmmaceth";
|
reset-names = "stmmaceth";
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&pinctrl_mii1>;
|
pinctrl-0 = <&pinctrl_mii1>;
|
||||||
clock-names = "stmmaceth";
|
clock-names = "stmmaceth", "sti-ethclk";
|
||||||
clocks = <&clk_s_a0_ls CLK_ETH1_PHY>;
|
clocks = <&clk_s_a0_ls CLK_ICN_REG>, <&clk_s_a0_ls CLK_ETH1_PHY>;
|
||||||
};
|
};
|
||||||
|
|
||||||
rc: rc@fe518000 {
|
rc: rc@fe518000 {
|
||||||
|
|
|
@ -175,8 +175,8 @@
|
||||||
reset-names = "stmmaceth";
|
reset-names = "stmmaceth";
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&pinctrl_mii0>;
|
pinctrl-0 = <&pinctrl_mii0>;
|
||||||
clock-names = "stmmaceth";
|
clock-names = "stmmaceth", "sti-ethclk";
|
||||||
clocks = <&clk_s_a1_ls CLK_GMAC0_PHY>;
|
clocks = <&clk_s_a1_ls CLK_ICN_IF_2>, <&clk_s_a1_ls CLK_GMAC0_PHY>;
|
||||||
};
|
};
|
||||||
|
|
||||||
ethernet1: dwmac@fef08000 {
|
ethernet1: dwmac@fef08000 {
|
||||||
|
@ -197,8 +197,8 @@
|
||||||
reset-names = "stmmaceth";
|
reset-names = "stmmaceth";
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&pinctrl_mii1>;
|
pinctrl-0 = <&pinctrl_mii1>;
|
||||||
clock-names = "stmmaceth";
|
clock-names = "stmmaceth", "sti-ethclk";
|
||||||
clocks = <&clk_s_a0_ls CLK_ETH1_PHY>;
|
clocks = <&clk_s_a0_ls CLK_ICN_REG>, <&clk_s_a0_ls CLK_ETH1_PHY>;
|
||||||
};
|
};
|
||||||
|
|
||||||
rc: rc@fe518000 {
|
rc: rc@fe518000 {
|
||||||
|
|
|
@ -182,7 +182,6 @@ static int scoop_probe(struct platform_device *pdev)
|
||||||
struct scoop_config *inf;
|
struct scoop_config *inf;
|
||||||
struct resource *mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
struct resource *mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
int ret;
|
int ret;
|
||||||
int temp;
|
|
||||||
|
|
||||||
if (!mem)
|
if (!mem)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
|
@ -94,10 +94,10 @@ CONFIG_BACKLIGHT_CLASS_DEVICE=y
|
||||||
CONFIG_BACKLIGHT_PWM=y
|
CONFIG_BACKLIGHT_PWM=y
|
||||||
# CONFIG_USB_SUPPORT is not set
|
# CONFIG_USB_SUPPORT is not set
|
||||||
CONFIG_MMC=y
|
CONFIG_MMC=y
|
||||||
CONFIG_MMC_UNSAFE_RESUME=y
|
|
||||||
CONFIG_MMC_BLOCK_MINORS=32
|
CONFIG_MMC_BLOCK_MINORS=32
|
||||||
CONFIG_MMC_TEST=y
|
CONFIG_MMC_TEST=y
|
||||||
CONFIG_MMC_SDHCI=y
|
CONFIG_MMC_SDHCI=y
|
||||||
|
CONFIG_MMC_SDHCI_PLTFM=y
|
||||||
CONFIG_MMC_SDHCI_BCM_KONA=y
|
CONFIG_MMC_SDHCI_BCM_KONA=y
|
||||||
CONFIG_NEW_LEDS=y
|
CONFIG_NEW_LEDS=y
|
||||||
CONFIG_LEDS_CLASS=y
|
CONFIG_LEDS_CLASS=y
|
||||||
|
|
|
@ -186,6 +186,7 @@ CONFIG_VIDEO_MX3=y
|
||||||
CONFIG_V4L_MEM2MEM_DRIVERS=y
|
CONFIG_V4L_MEM2MEM_DRIVERS=y
|
||||||
CONFIG_VIDEO_CODA=y
|
CONFIG_VIDEO_CODA=y
|
||||||
CONFIG_SOC_CAMERA_OV2640=y
|
CONFIG_SOC_CAMERA_OV2640=y
|
||||||
|
CONFIG_IMX_IPUV3_CORE=y
|
||||||
CONFIG_DRM=y
|
CONFIG_DRM=y
|
||||||
CONFIG_DRM_PANEL_SIMPLE=y
|
CONFIG_DRM_PANEL_SIMPLE=y
|
||||||
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
||||||
|
|
|
@ -223,12 +223,12 @@ CONFIG_POWER_RESET_GPIO=y
|
||||||
CONFIG_POWER_RESET_SUN6I=y
|
CONFIG_POWER_RESET_SUN6I=y
|
||||||
CONFIG_SENSORS_LM90=y
|
CONFIG_SENSORS_LM90=y
|
||||||
CONFIG_THERMAL=y
|
CONFIG_THERMAL=y
|
||||||
CONFIG_DOVE_THERMAL=y
|
|
||||||
CONFIG_ARMADA_THERMAL=y
|
CONFIG_ARMADA_THERMAL=y
|
||||||
CONFIG_WATCHDOG=y
|
CONFIG_WATCHDOG=y
|
||||||
CONFIG_ORION_WATCHDOG=y
|
CONFIG_ORION_WATCHDOG=y
|
||||||
CONFIG_SUNXI_WATCHDOG=y
|
CONFIG_SUNXI_WATCHDOG=y
|
||||||
CONFIG_MFD_AS3722=y
|
CONFIG_MFD_AS3722=y
|
||||||
|
CONFIG_MFD_BCM590XX=y
|
||||||
CONFIG_MFD_CROS_EC=y
|
CONFIG_MFD_CROS_EC=y
|
||||||
CONFIG_MFD_CROS_EC_SPI=y
|
CONFIG_MFD_CROS_EC_SPI=y
|
||||||
CONFIG_MFD_MAX8907=y
|
CONFIG_MFD_MAX8907=y
|
||||||
|
@ -240,6 +240,7 @@ CONFIG_MFD_TPS65910=y
|
||||||
CONFIG_REGULATOR_VIRTUAL_CONSUMER=y
|
CONFIG_REGULATOR_VIRTUAL_CONSUMER=y
|
||||||
CONFIG_REGULATOR_AB8500=y
|
CONFIG_REGULATOR_AB8500=y
|
||||||
CONFIG_REGULATOR_AS3722=y
|
CONFIG_REGULATOR_AS3722=y
|
||||||
|
CONFIG_REGULATOR_BCM590XX=y
|
||||||
CONFIG_REGULATOR_GPIO=y
|
CONFIG_REGULATOR_GPIO=y
|
||||||
CONFIG_REGULATOR_MAX8907=y
|
CONFIG_REGULATOR_MAX8907=y
|
||||||
CONFIG_REGULATOR_PALMAS=y
|
CONFIG_REGULATOR_PALMAS=y
|
||||||
|
@ -353,6 +354,7 @@ CONFIG_MFD_NVEC=y
|
||||||
CONFIG_KEYBOARD_NVEC=y
|
CONFIG_KEYBOARD_NVEC=y
|
||||||
CONFIG_SERIO_NVEC_PS2=y
|
CONFIG_SERIO_NVEC_PS2=y
|
||||||
CONFIG_NVEC_POWER=y
|
CONFIG_NVEC_POWER=y
|
||||||
|
CONFIG_QCOM_GSBI=y
|
||||||
CONFIG_COMMON_CLK_QCOM=y
|
CONFIG_COMMON_CLK_QCOM=y
|
||||||
CONFIG_MSM_GCC_8660=y
|
CONFIG_MSM_GCC_8660=y
|
||||||
CONFIG_MSM_MMCC_8960=y
|
CONFIG_MSM_MMCC_8960=y
|
||||||
|
|
|
@ -14,6 +14,7 @@ CONFIG_MACH_ARMADA_370=y
|
||||||
CONFIG_MACH_ARMADA_375=y
|
CONFIG_MACH_ARMADA_375=y
|
||||||
CONFIG_MACH_ARMADA_38X=y
|
CONFIG_MACH_ARMADA_38X=y
|
||||||
CONFIG_MACH_ARMADA_XP=y
|
CONFIG_MACH_ARMADA_XP=y
|
||||||
|
CONFIG_MACH_DOVE=y
|
||||||
CONFIG_NEON=y
|
CONFIG_NEON=y
|
||||||
# CONFIG_CACHE_L2X0 is not set
|
# CONFIG_CACHE_L2X0 is not set
|
||||||
# CONFIG_SWP_EMULATE is not set
|
# CONFIG_SWP_EMULATE is not set
|
||||||
|
@ -52,6 +53,7 @@ CONFIG_INPUT_EVDEV=y
|
||||||
CONFIG_KEYBOARD_GPIO=y
|
CONFIG_KEYBOARD_GPIO=y
|
||||||
CONFIG_SERIAL_8250=y
|
CONFIG_SERIAL_8250=y
|
||||||
CONFIG_SERIAL_8250_CONSOLE=y
|
CONFIG_SERIAL_8250_CONSOLE=y
|
||||||
|
CONFIG_SERIAL_OF_PLATFORM=y
|
||||||
CONFIG_I2C=y
|
CONFIG_I2C=y
|
||||||
CONFIG_SPI=y
|
CONFIG_SPI=y
|
||||||
CONFIG_SPI_ORION=y
|
CONFIG_SPI_ORION=y
|
||||||
|
|
|
@ -208,8 +208,6 @@ struct sync_struct {
|
||||||
struct mcpm_sync_struct clusters[MAX_NR_CLUSTERS];
|
struct mcpm_sync_struct clusters[MAX_NR_CLUSTERS];
|
||||||
};
|
};
|
||||||
|
|
||||||
extern unsigned long sync_phys; /* physical address of *mcpm_sync */
|
|
||||||
|
|
||||||
void __mcpm_cpu_going_down(unsigned int cpu, unsigned int cluster);
|
void __mcpm_cpu_going_down(unsigned int cpu, unsigned int cluster);
|
||||||
void __mcpm_cpu_down(unsigned int cpu, unsigned int cluster);
|
void __mcpm_cpu_down(unsigned int cpu, unsigned int cluster);
|
||||||
void __mcpm_outbound_leave_critical(unsigned int cluster, int state);
|
void __mcpm_outbound_leave_critical(unsigned int cluster, int state);
|
||||||
|
|
|
@ -114,8 +114,14 @@ static inline struct thread_info *current_thread_info(void)
|
||||||
((unsigned long)(task_thread_info(tsk)->cpu_context.pc))
|
((unsigned long)(task_thread_info(tsk)->cpu_context.pc))
|
||||||
#define thread_saved_sp(tsk) \
|
#define thread_saved_sp(tsk) \
|
||||||
((unsigned long)(task_thread_info(tsk)->cpu_context.sp))
|
((unsigned long)(task_thread_info(tsk)->cpu_context.sp))
|
||||||
|
|
||||||
|
#ifndef CONFIG_THUMB2_KERNEL
|
||||||
#define thread_saved_fp(tsk) \
|
#define thread_saved_fp(tsk) \
|
||||||
((unsigned long)(task_thread_info(tsk)->cpu_context.fp))
|
((unsigned long)(task_thread_info(tsk)->cpu_context.fp))
|
||||||
|
#else
|
||||||
|
#define thread_saved_fp(tsk) \
|
||||||
|
((unsigned long)(task_thread_info(tsk)->cpu_context.r7))
|
||||||
|
#endif
|
||||||
|
|
||||||
extern void crunch_task_disable(struct thread_info *);
|
extern void crunch_task_disable(struct thread_info *);
|
||||||
extern void crunch_task_copy(struct thread_info *, void *);
|
extern void crunch_task_copy(struct thread_info *, void *);
|
||||||
|
|
|
@ -74,8 +74,6 @@ void kprobe_arm_test_cases(void)
|
||||||
TEST_RRR( op "lt" s " r11, r",11,VAL1,", r",14,N(val),", asr r",7, 6,"")\
|
TEST_RRR( op "lt" s " r11, r",11,VAL1,", r",14,N(val),", asr r",7, 6,"")\
|
||||||
TEST_RR( op "gt" s " r12, r13" ", r",14,val, ", ror r",14,7,"")\
|
TEST_RR( op "gt" s " r12, r13" ", r",14,val, ", ror r",14,7,"")\
|
||||||
TEST_RR( op "le" s " r14, r",0, val, ", r13" ", lsl r",14,8,"")\
|
TEST_RR( op "le" s " r14, r",0, val, ", r13" ", lsl r",14,8,"")\
|
||||||
TEST_RR( op s " r12, pc" ", r",14,val, ", ror r",14,7,"")\
|
|
||||||
TEST_RR( op s " r14, r",0, val, ", pc" ", lsl r",14,8,"")\
|
|
||||||
TEST_R( op "eq" s " r0, r",11,VAL1,", #0xf5") \
|
TEST_R( op "eq" s " r0, r",11,VAL1,", #0xf5") \
|
||||||
TEST_R( op "ne" s " r11, r",0, VAL1,", #0xf5000000") \
|
TEST_R( op "ne" s " r11, r",0, VAL1,", #0xf5000000") \
|
||||||
TEST_R( op s " r7, r",8, VAL2,", #0x000af000") \
|
TEST_R( op s " r7, r",8, VAL2,", #0x000af000") \
|
||||||
|
@ -103,8 +101,6 @@ void kprobe_arm_test_cases(void)
|
||||||
TEST_RRR( op "ge r",11,VAL1,", r",14,N(val),", asr r",7, 6,"") \
|
TEST_RRR( op "ge r",11,VAL1,", r",14,N(val),", asr r",7, 6,"") \
|
||||||
TEST_RR( op "le r13" ", r",14,val, ", ror r",14,7,"") \
|
TEST_RR( op "le r13" ", r",14,val, ", ror r",14,7,"") \
|
||||||
TEST_RR( op "gt r",0, val, ", r13" ", lsl r",14,8,"") \
|
TEST_RR( op "gt r",0, val, ", r13" ", lsl r",14,8,"") \
|
||||||
TEST_RR( op " pc" ", r",14,val, ", ror r",14,7,"") \
|
|
||||||
TEST_RR( op " r",0, val, ", pc" ", lsl r",14,8,"") \
|
|
||||||
TEST_R( op "eq r",11,VAL1,", #0xf5") \
|
TEST_R( op "eq r",11,VAL1,", #0xf5") \
|
||||||
TEST_R( op "ne r",0, VAL1,", #0xf5000000") \
|
TEST_R( op "ne r",0, VAL1,", #0xf5000000") \
|
||||||
TEST_R( op " r",8, VAL2,", #0x000af000")
|
TEST_R( op " r",8, VAL2,", #0x000af000")
|
||||||
|
@ -125,7 +121,6 @@ void kprobe_arm_test_cases(void)
|
||||||
TEST_RR( op "ge" s " r11, r",11,N(val),", asr r",7, 6,"") \
|
TEST_RR( op "ge" s " r11, r",11,N(val),", asr r",7, 6,"") \
|
||||||
TEST_RR( op "lt" s " r12, r",11,val, ", ror r",14,7,"") \
|
TEST_RR( op "lt" s " r12, r",11,val, ", ror r",14,7,"") \
|
||||||
TEST_R( op "gt" s " r14, r13" ", lsl r",14,8,"") \
|
TEST_R( op "gt" s " r14, r13" ", lsl r",14,8,"") \
|
||||||
TEST_R( op "le" s " r14, pc" ", lsl r",14,8,"") \
|
|
||||||
TEST( op "eq" s " r0, #0xf5") \
|
TEST( op "eq" s " r0, #0xf5") \
|
||||||
TEST( op "ne" s " r11, #0xf5000000") \
|
TEST( op "ne" s " r11, #0xf5000000") \
|
||||||
TEST( op s " r7, #0x000af000") \
|
TEST( op s " r7, #0x000af000") \
|
||||||
|
@ -159,12 +154,19 @@ void kprobe_arm_test_cases(void)
|
||||||
TEST_SUPPORTED("cmp pc, #0x1000");
|
TEST_SUPPORTED("cmp pc, #0x1000");
|
||||||
TEST_SUPPORTED("cmp sp, #0x1000");
|
TEST_SUPPORTED("cmp sp, #0x1000");
|
||||||
|
|
||||||
/* Data-processing with PC as shift*/
|
/* Data-processing with PC and a shift count in a register */
|
||||||
TEST_UNSUPPORTED(__inst_arm(0xe15c0f1e) " @ cmp r12, r14, asl pc")
|
TEST_UNSUPPORTED(__inst_arm(0xe15c0f1e) " @ cmp r12, r14, asl pc")
|
||||||
TEST_UNSUPPORTED(__inst_arm(0xe1a0cf1e) " @ mov r12, r14, asl pc")
|
TEST_UNSUPPORTED(__inst_arm(0xe1a0cf1e) " @ mov r12, r14, asl pc")
|
||||||
TEST_UNSUPPORTED(__inst_arm(0xe08caf1e) " @ add r10, r12, r14, asl pc")
|
TEST_UNSUPPORTED(__inst_arm(0xe08caf1e) " @ add r10, r12, r14, asl pc")
|
||||||
|
TEST_UNSUPPORTED(__inst_arm(0xe151021f) " @ cmp r1, pc, lsl r2")
|
||||||
|
TEST_UNSUPPORTED(__inst_arm(0xe17f0211) " @ cmn pc, r1, lsl r2")
|
||||||
|
TEST_UNSUPPORTED(__inst_arm(0xe1a0121f) " @ mov r1, pc, lsl r2")
|
||||||
|
TEST_UNSUPPORTED(__inst_arm(0xe1a0f211) " @ mov pc, r1, lsl r2")
|
||||||
|
TEST_UNSUPPORTED(__inst_arm(0xe042131f) " @ sub r1, r2, pc, lsl r3")
|
||||||
|
TEST_UNSUPPORTED(__inst_arm(0xe1cf1312) " @ bic r1, pc, r2, lsl r3")
|
||||||
|
TEST_UNSUPPORTED(__inst_arm(0xe081f312) " @ add pc, r1, r2, lsl r3")
|
||||||
|
|
||||||
/* Data-processing with PC as shift*/
|
/* Data-processing with PC as a target and status registers updated */
|
||||||
TEST_UNSUPPORTED("movs pc, r1")
|
TEST_UNSUPPORTED("movs pc, r1")
|
||||||
TEST_UNSUPPORTED("movs pc, r1, lsl r2")
|
TEST_UNSUPPORTED("movs pc, r1, lsl r2")
|
||||||
TEST_UNSUPPORTED("movs pc, #0x10000")
|
TEST_UNSUPPORTED("movs pc, #0x10000")
|
||||||
|
@ -187,14 +189,14 @@ void kprobe_arm_test_cases(void)
|
||||||
TEST_BF_R ("add pc, pc, r",14,2f-1f-8,"")
|
TEST_BF_R ("add pc, pc, r",14,2f-1f-8,"")
|
||||||
TEST_BF_R ("add pc, r",14,2f-1f-8,", pc")
|
TEST_BF_R ("add pc, r",14,2f-1f-8,", pc")
|
||||||
TEST_BF_R ("mov pc, r",0,2f,"")
|
TEST_BF_R ("mov pc, r",0,2f,"")
|
||||||
TEST_BF_RR("mov pc, r",0,2f,", asl r",1,0,"")
|
TEST_BF_R ("add pc, pc, r",14,(2f-1f-8)*2,", asr #1")
|
||||||
TEST_BB( "sub pc, pc, #1b-2b+8")
|
TEST_BB( "sub pc, pc, #1b-2b+8")
|
||||||
#if __LINUX_ARM_ARCH__ == 6 && !defined(CONFIG_CPU_V7)
|
#if __LINUX_ARM_ARCH__ == 6 && !defined(CONFIG_CPU_V7)
|
||||||
TEST_BB( "sub pc, pc, #1b-2b+8-2") /* UNPREDICTABLE before and after ARMv6 */
|
TEST_BB( "sub pc, pc, #1b-2b+8-2") /* UNPREDICTABLE before and after ARMv6 */
|
||||||
#endif
|
#endif
|
||||||
TEST_BB_R( "sub pc, pc, r",14, 1f-2f+8,"")
|
TEST_BB_R( "sub pc, pc, r",14, 1f-2f+8,"")
|
||||||
TEST_BB_R( "rsb pc, r",14,1f-2f+8,", pc")
|
TEST_BB_R( "rsb pc, r",14,1f-2f+8,", pc")
|
||||||
TEST_RR( "add pc, pc, r",10,-2,", asl r",11,1,"")
|
TEST_R( "add pc, pc, r",10,-2,", asl #1")
|
||||||
#ifdef CONFIG_THUMB2_KERNEL
|
#ifdef CONFIG_THUMB2_KERNEL
|
||||||
TEST_ARM_TO_THUMB_INTERWORK_R("add pc, pc, r",0,3f-1f-8+1,"")
|
TEST_ARM_TO_THUMB_INTERWORK_R("add pc, pc, r",0,3f-1f-8+1,"")
|
||||||
TEST_ARM_TO_THUMB_INTERWORK_R("sub pc, r",0,3f+8+1,", #8")
|
TEST_ARM_TO_THUMB_INTERWORK_R("sub pc, r",0,3f+8+1,", #8")
|
||||||
|
@ -216,6 +218,7 @@ void kprobe_arm_test_cases(void)
|
||||||
TEST_BB_R("bx r",7,2f,"")
|
TEST_BB_R("bx r",7,2f,"")
|
||||||
TEST_BF_R("bxeq r",14,2f,"")
|
TEST_BF_R("bxeq r",14,2f,"")
|
||||||
|
|
||||||
|
#if __LINUX_ARM_ARCH__ >= 5
|
||||||
TEST_R("clz r0, r",0, 0x0,"")
|
TEST_R("clz r0, r",0, 0x0,"")
|
||||||
TEST_R("clzeq r7, r",14,0x1,"")
|
TEST_R("clzeq r7, r",14,0x1,"")
|
||||||
TEST_R("clz lr, r",7, 0xffffffff,"")
|
TEST_R("clz lr, r",7, 0xffffffff,"")
|
||||||
|
@ -337,6 +340,7 @@ void kprobe_arm_test_cases(void)
|
||||||
TEST_UNSUPPORTED(__inst_arm(0xe16f02e1) " @ smultt pc, r1, r2")
|
TEST_UNSUPPORTED(__inst_arm(0xe16f02e1) " @ smultt pc, r1, r2")
|
||||||
TEST_UNSUPPORTED(__inst_arm(0xe16002ef) " @ smultt r0, pc, r2")
|
TEST_UNSUPPORTED(__inst_arm(0xe16002ef) " @ smultt r0, pc, r2")
|
||||||
TEST_UNSUPPORTED(__inst_arm(0xe1600fe1) " @ smultt r0, r1, pc")
|
TEST_UNSUPPORTED(__inst_arm(0xe1600fe1) " @ smultt r0, r1, pc")
|
||||||
|
#endif
|
||||||
|
|
||||||
TEST_GROUP("Multiply and multiply-accumulate")
|
TEST_GROUP("Multiply and multiply-accumulate")
|
||||||
|
|
||||||
|
@ -559,6 +563,7 @@ void kprobe_arm_test_cases(void)
|
||||||
TEST_UNSUPPORTED("ldrsht r1, [r2], #48")
|
TEST_UNSUPPORTED("ldrsht r1, [r2], #48")
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if __LINUX_ARM_ARCH__ >= 5
|
||||||
TEST_RPR( "strd r",0, VAL1,", [r",1, 48,", -r",2,24,"]")
|
TEST_RPR( "strd r",0, VAL1,", [r",1, 48,", -r",2,24,"]")
|
||||||
TEST_RPR( "strccd r",8, VAL2,", [r",13,0, ", r",12,48,"]")
|
TEST_RPR( "strccd r",8, VAL2,", [r",13,0, ", r",12,48,"]")
|
||||||
TEST_RPR( "strd r",4, VAL1,", [r",2, 24,", r",3, 48,"]!")
|
TEST_RPR( "strd r",4, VAL1,", [r",2, 24,", r",3, 48,"]!")
|
||||||
|
@ -595,6 +600,7 @@ void kprobe_arm_test_cases(void)
|
||||||
TEST_UNSUPPORTED(__inst_arm(0xe1efc3d0) " @ ldrd r12, [pc, #48]!")
|
TEST_UNSUPPORTED(__inst_arm(0xe1efc3d0) " @ ldrd r12, [pc, #48]!")
|
||||||
TEST_UNSUPPORTED(__inst_arm(0xe0c9f3d0) " @ ldrd pc, [r9], #48")
|
TEST_UNSUPPORTED(__inst_arm(0xe0c9f3d0) " @ ldrd pc, [r9], #48")
|
||||||
TEST_UNSUPPORTED(__inst_arm(0xe0c9e3d0) " @ ldrd lr, [r9], #48")
|
TEST_UNSUPPORTED(__inst_arm(0xe0c9e3d0) " @ ldrd lr, [r9], #48")
|
||||||
|
#endif
|
||||||
|
|
||||||
TEST_GROUP("Miscellaneous")
|
TEST_GROUP("Miscellaneous")
|
||||||
|
|
||||||
|
@ -1227,7 +1233,9 @@ void kprobe_arm_test_cases(void)
|
||||||
TEST_COPROCESSOR( "mrc"two" 0, 0, r0, cr0, cr0, 0")
|
TEST_COPROCESSOR( "mrc"two" 0, 0, r0, cr0, cr0, 0")
|
||||||
|
|
||||||
COPROCESSOR_INSTRUCTIONS_ST_LD("",e)
|
COPROCESSOR_INSTRUCTIONS_ST_LD("",e)
|
||||||
|
#if __LINUX_ARM_ARCH__ >= 5
|
||||||
COPROCESSOR_INSTRUCTIONS_MC_MR("",e)
|
COPROCESSOR_INSTRUCTIONS_MC_MR("",e)
|
||||||
|
#endif
|
||||||
TEST_UNSUPPORTED("svc 0")
|
TEST_UNSUPPORTED("svc 0")
|
||||||
TEST_UNSUPPORTED("svc 0xffffff")
|
TEST_UNSUPPORTED("svc 0xffffff")
|
||||||
|
|
||||||
|
@ -1287,7 +1295,9 @@ void kprobe_arm_test_cases(void)
|
||||||
TEST( "blx __dummy_thumb_subroutine_odd")
|
TEST( "blx __dummy_thumb_subroutine_odd")
|
||||||
#endif /* __LINUX_ARM_ARCH__ >= 6 */
|
#endif /* __LINUX_ARM_ARCH__ >= 6 */
|
||||||
|
|
||||||
|
#if __LINUX_ARM_ARCH__ >= 5
|
||||||
COPROCESSOR_INSTRUCTIONS_ST_LD("2",f)
|
COPROCESSOR_INSTRUCTIONS_ST_LD("2",f)
|
||||||
|
#endif
|
||||||
#if __LINUX_ARM_ARCH__ >= 6
|
#if __LINUX_ARM_ARCH__ >= 6
|
||||||
COPROCESSOR_INSTRUCTIONS_MC_MR("2",f)
|
COPROCESSOR_INSTRUCTIONS_MC_MR("2",f)
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -225,6 +225,7 @@ static int pre_handler_called;
|
||||||
static int post_handler_called;
|
static int post_handler_called;
|
||||||
static int jprobe_func_called;
|
static int jprobe_func_called;
|
||||||
static int kretprobe_handler_called;
|
static int kretprobe_handler_called;
|
||||||
|
static int tests_failed;
|
||||||
|
|
||||||
#define FUNC_ARG1 0x12345678
|
#define FUNC_ARG1 0x12345678
|
||||||
#define FUNC_ARG2 0xabcdef
|
#define FUNC_ARG2 0xabcdef
|
||||||
|
@ -461,6 +462,13 @@ static int run_api_tests(long (*func)(long, long))
|
||||||
|
|
||||||
pr_info(" jprobe\n");
|
pr_info(" jprobe\n");
|
||||||
ret = test_jprobe(func);
|
ret = test_jprobe(func);
|
||||||
|
#if defined(CONFIG_THUMB2_KERNEL) && !defined(MODULE)
|
||||||
|
if (ret == -EINVAL) {
|
||||||
|
pr_err("FAIL: Known longtime bug with jprobe on Thumb kernels\n");
|
||||||
|
tests_failed = ret;
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
@ -1671,6 +1679,8 @@ static int __init run_all_tests(void)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
if (ret == 0)
|
||||||
|
ret = tests_failed;
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
pr_info("Finished kprobe tests OK\n");
|
pr_info("Finished kprobe tests OK\n");
|
||||||
else
|
else
|
||||||
|
|
|
@ -1924,7 +1924,7 @@ static int krait_pmu_get_event_idx(struct pmu_hw_events *cpuc,
|
||||||
struct perf_event *event)
|
struct perf_event *event)
|
||||||
{
|
{
|
||||||
int idx;
|
int idx;
|
||||||
int bit;
|
int bit = -1;
|
||||||
unsigned int prefix;
|
unsigned int prefix;
|
||||||
unsigned int region;
|
unsigned int region;
|
||||||
unsigned int code;
|
unsigned int code;
|
||||||
|
@ -1953,7 +1953,7 @@ static int krait_pmu_get_event_idx(struct pmu_hw_events *cpuc,
|
||||||
}
|
}
|
||||||
|
|
||||||
idx = armv7pmu_get_event_idx(cpuc, event);
|
idx = armv7pmu_get_event_idx(cpuc, event);
|
||||||
if (idx < 0 && krait_event)
|
if (idx < 0 && bit >= 0)
|
||||||
clear_bit(bit, cpuc->used_mask);
|
clear_bit(bit, cpuc->used_mask);
|
||||||
|
|
||||||
return idx;
|
return idx;
|
||||||
|
|
|
@ -341,12 +341,12 @@ static const union decode_item arm_cccc_000x_table[] = {
|
||||||
/* CMP (reg-shift reg) cccc 0001 0101 xxxx xxxx xxxx 0xx1 xxxx */
|
/* CMP (reg-shift reg) cccc 0001 0101 xxxx xxxx xxxx 0xx1 xxxx */
|
||||||
/* CMN (reg-shift reg) cccc 0001 0111 xxxx xxxx xxxx 0xx1 xxxx */
|
/* CMN (reg-shift reg) cccc 0001 0111 xxxx xxxx xxxx 0xx1 xxxx */
|
||||||
DECODE_EMULATEX (0x0f900090, 0x01100010, PROBES_DATA_PROCESSING_REG,
|
DECODE_EMULATEX (0x0f900090, 0x01100010, PROBES_DATA_PROCESSING_REG,
|
||||||
REGS(ANY, 0, NOPC, 0, ANY)),
|
REGS(NOPC, 0, NOPC, 0, NOPC)),
|
||||||
|
|
||||||
/* MOV (reg-shift reg) cccc 0001 101x xxxx xxxx xxxx 0xx1 xxxx */
|
/* MOV (reg-shift reg) cccc 0001 101x xxxx xxxx xxxx 0xx1 xxxx */
|
||||||
/* MVN (reg-shift reg) cccc 0001 111x xxxx xxxx xxxx 0xx1 xxxx */
|
/* MVN (reg-shift reg) cccc 0001 111x xxxx xxxx xxxx 0xx1 xxxx */
|
||||||
DECODE_EMULATEX (0x0fa00090, 0x01a00010, PROBES_DATA_PROCESSING_REG,
|
DECODE_EMULATEX (0x0fa00090, 0x01a00010, PROBES_DATA_PROCESSING_REG,
|
||||||
REGS(0, ANY, NOPC, 0, ANY)),
|
REGS(0, NOPC, NOPC, 0, NOPC)),
|
||||||
|
|
||||||
/* AND (reg-shift reg) cccc 0000 000x xxxx xxxx xxxx 0xx1 xxxx */
|
/* AND (reg-shift reg) cccc 0000 000x xxxx xxxx xxxx 0xx1 xxxx */
|
||||||
/* EOR (reg-shift reg) cccc 0000 001x xxxx xxxx xxxx 0xx1 xxxx */
|
/* EOR (reg-shift reg) cccc 0000 001x xxxx xxxx xxxx 0xx1 xxxx */
|
||||||
|
@ -359,7 +359,7 @@ static const union decode_item arm_cccc_000x_table[] = {
|
||||||
/* ORR (reg-shift reg) cccc 0001 100x xxxx xxxx xxxx 0xx1 xxxx */
|
/* ORR (reg-shift reg) cccc 0001 100x xxxx xxxx xxxx 0xx1 xxxx */
|
||||||
/* BIC (reg-shift reg) cccc 0001 110x xxxx xxxx xxxx 0xx1 xxxx */
|
/* BIC (reg-shift reg) cccc 0001 110x xxxx xxxx xxxx 0xx1 xxxx */
|
||||||
DECODE_EMULATEX (0x0e000090, 0x00000010, PROBES_DATA_PROCESSING_REG,
|
DECODE_EMULATEX (0x0e000090, 0x00000010, PROBES_DATA_PROCESSING_REG,
|
||||||
REGS(ANY, ANY, NOPC, 0, ANY)),
|
REGS(NOPC, NOPC, NOPC, 0, NOPC)),
|
||||||
|
|
||||||
DECODE_END
|
DECODE_END
|
||||||
};
|
};
|
||||||
|
|
|
@ -908,7 +908,7 @@ enum ptrace_syscall_dir {
|
||||||
PTRACE_SYSCALL_EXIT,
|
PTRACE_SYSCALL_EXIT,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int tracehook_report_syscall(struct pt_regs *regs,
|
static void tracehook_report_syscall(struct pt_regs *regs,
|
||||||
enum ptrace_syscall_dir dir)
|
enum ptrace_syscall_dir dir)
|
||||||
{
|
{
|
||||||
unsigned long ip;
|
unsigned long ip;
|
||||||
|
@ -926,7 +926,6 @@ static int tracehook_report_syscall(struct pt_regs *regs,
|
||||||
current_thread_info()->syscall = -1;
|
current_thread_info()->syscall = -1;
|
||||||
|
|
||||||
regs->ARM_ip = ip;
|
regs->ARM_ip = ip;
|
||||||
return current_thread_info()->syscall;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
asmlinkage int syscall_trace_enter(struct pt_regs *regs, int scno)
|
asmlinkage int syscall_trace_enter(struct pt_regs *regs, int scno)
|
||||||
|
@ -938,7 +937,9 @@ asmlinkage int syscall_trace_enter(struct pt_regs *regs, int scno)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (test_thread_flag(TIF_SYSCALL_TRACE))
|
if (test_thread_flag(TIF_SYSCALL_TRACE))
|
||||||
scno = tracehook_report_syscall(regs, PTRACE_SYSCALL_ENTER);
|
tracehook_report_syscall(regs, PTRACE_SYSCALL_ENTER);
|
||||||
|
|
||||||
|
scno = current_thread_info()->syscall;
|
||||||
|
|
||||||
if (test_thread_flag(TIF_SYSCALL_TRACEPOINT))
|
if (test_thread_flag(TIF_SYSCALL_TRACEPOINT))
|
||||||
trace_sys_enter(regs, scno);
|
trace_sys_enter(regs, scno);
|
||||||
|
|
|
@ -173,10 +173,8 @@ static struct platform_device exynos_cpuidle = {
|
||||||
|
|
||||||
void __init exynos_cpuidle_init(void)
|
void __init exynos_cpuidle_init(void)
|
||||||
{
|
{
|
||||||
if (soc_is_exynos5440())
|
if (soc_is_exynos4210() || soc_is_exynos5250())
|
||||||
return;
|
platform_device_register(&exynos_cpuidle);
|
||||||
|
|
||||||
platform_device_register(&exynos_cpuidle);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void __init exynos_cpufreq_init(void)
|
void __init exynos_cpufreq_init(void)
|
||||||
|
@ -297,7 +295,7 @@ static void __init exynos_dt_machine_init(void)
|
||||||
* This is called from smp_prepare_cpus if we've built for SMP, but
|
* This is called from smp_prepare_cpus if we've built for SMP, but
|
||||||
* we still need to set it up for PM and firmware ops if not.
|
* we still need to set it up for PM and firmware ops if not.
|
||||||
*/
|
*/
|
||||||
if (!IS_ENABLED(SMP))
|
if (!IS_ENABLED(CONFIG_SMP))
|
||||||
exynos_sysram_init();
|
exynos_sysram_init();
|
||||||
|
|
||||||
exynos_cpuidle_init();
|
exynos_cpuidle_init();
|
||||||
|
|
|
@ -57,8 +57,13 @@ static int exynos_set_cpu_boot_addr(int cpu, unsigned long boot_addr)
|
||||||
|
|
||||||
boot_reg = sysram_ns_base_addr + 0x1c;
|
boot_reg = sysram_ns_base_addr + 0x1c;
|
||||||
|
|
||||||
if (!soc_is_exynos4212() && !soc_is_exynos3250())
|
/*
|
||||||
boot_reg += 4*cpu;
|
* Almost all Exynos-series of SoCs that run in secure mode don't need
|
||||||
|
* additional offset for every CPU, with Exynos4412 being the only
|
||||||
|
* exception.
|
||||||
|
*/
|
||||||
|
if (soc_is_exynos4412())
|
||||||
|
boot_reg += 4 * cpu;
|
||||||
|
|
||||||
__raw_writel(boot_addr, boot_reg);
|
__raw_writel(boot_addr, boot_reg);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -46,13 +46,7 @@ static inline void platform_do_lowpower(unsigned int cpu, int *spurious)
|
||||||
if (cpu == 1)
|
if (cpu == 1)
|
||||||
exynos_cpu_power_down(cpu);
|
exynos_cpu_power_down(cpu);
|
||||||
|
|
||||||
/*
|
wfi();
|
||||||
* here's the WFI
|
|
||||||
*/
|
|
||||||
asm(".word 0xe320f003\n"
|
|
||||||
:
|
|
||||||
:
|
|
||||||
: "memory", "cc");
|
|
||||||
|
|
||||||
if (pen_release == cpu_logical_map(cpu)) {
|
if (pen_release == cpu_logical_map(cpu)) {
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -25,7 +25,6 @@
|
||||||
|
|
||||||
#define EXYNOS5420_CPUS_PER_CLUSTER 4
|
#define EXYNOS5420_CPUS_PER_CLUSTER 4
|
||||||
#define EXYNOS5420_NR_CLUSTERS 2
|
#define EXYNOS5420_NR_CLUSTERS 2
|
||||||
#define MCPM_BOOT_ADDR_OFFSET 0x1c
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The common v7_exit_coherency_flush API could not be used because of the
|
* The common v7_exit_coherency_flush API could not be used because of the
|
||||||
|
@ -343,11 +342,13 @@ static int __init exynos_mcpm_init(void)
|
||||||
pr_info("Exynos MCPM support installed\n");
|
pr_info("Exynos MCPM support installed\n");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Future entries into the kernel can now go
|
* U-Boot SPL is hardcoded to jump to the start of ns_sram_base_addr
|
||||||
* through the cluster entry vectors.
|
* as part of secondary_cpu_start(). Let's redirect it to the
|
||||||
|
* mcpm_entry_point().
|
||||||
*/
|
*/
|
||||||
__raw_writel(virt_to_phys(mcpm_entry_point),
|
__raw_writel(0xe59f0000, ns_sram_base_addr); /* ldr r0, [pc, #0] */
|
||||||
ns_sram_base_addr + MCPM_BOOT_ADDR_OFFSET);
|
__raw_writel(0xe12fff10, ns_sram_base_addr + 4); /* bx r0 */
|
||||||
|
__raw_writel(virt_to_phys(mcpm_entry_point), ns_sram_base_addr + 8);
|
||||||
|
|
||||||
iounmap(ns_sram_base_addr);
|
iounmap(ns_sram_base_addr);
|
||||||
|
|
||||||
|
|
|
@ -300,7 +300,7 @@ static int exynos_pm_suspend(void)
|
||||||
tmp = (S5P_USE_STANDBY_WFI0 | S5P_USE_STANDBY_WFE0);
|
tmp = (S5P_USE_STANDBY_WFI0 | S5P_USE_STANDBY_WFE0);
|
||||||
__raw_writel(tmp, S5P_CENTRAL_SEQ_OPTION);
|
__raw_writel(tmp, S5P_CENTRAL_SEQ_OPTION);
|
||||||
|
|
||||||
if (!soc_is_exynos5250())
|
if (read_cpuid_part_number() == ARM_CPU_PART_CORTEX_A9)
|
||||||
exynos_cpu_save_register();
|
exynos_cpu_save_register();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -334,7 +334,7 @@ static void exynos_pm_resume(void)
|
||||||
if (exynos_pm_central_resume())
|
if (exynos_pm_central_resume())
|
||||||
goto early_wakeup;
|
goto early_wakeup;
|
||||||
|
|
||||||
if (!soc_is_exynos5250())
|
if (read_cpuid_part_number() == ARM_CPU_PART_CORTEX_A9)
|
||||||
exynos_cpu_restore_register();
|
exynos_cpu_restore_register();
|
||||||
|
|
||||||
/* For release retention */
|
/* For release retention */
|
||||||
|
@ -353,7 +353,7 @@ static void exynos_pm_resume(void)
|
||||||
|
|
||||||
s3c_pm_do_restore_core(exynos_core_save, ARRAY_SIZE(exynos_core_save));
|
s3c_pm_do_restore_core(exynos_core_save, ARRAY_SIZE(exynos_core_save));
|
||||||
|
|
||||||
if (!soc_is_exynos5250())
|
if (read_cpuid_part_number() == ARM_CPU_PART_CORTEX_A9)
|
||||||
scu_enable(S5P_VA_SCU);
|
scu_enable(S5P_VA_SCU);
|
||||||
|
|
||||||
early_wakeup:
|
early_wakeup:
|
||||||
|
@ -440,15 +440,18 @@ static int exynos_cpu_pm_notifier(struct notifier_block *self,
|
||||||
case CPU_PM_ENTER:
|
case CPU_PM_ENTER:
|
||||||
if (cpu == 0) {
|
if (cpu == 0) {
|
||||||
exynos_pm_central_suspend();
|
exynos_pm_central_suspend();
|
||||||
exynos_cpu_save_register();
|
if (read_cpuid_part_number() == ARM_CPU_PART_CORTEX_A9)
|
||||||
|
exynos_cpu_save_register();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CPU_PM_EXIT:
|
case CPU_PM_EXIT:
|
||||||
if (cpu == 0) {
|
if (cpu == 0) {
|
||||||
if (!soc_is_exynos5250())
|
if (read_cpuid_part_number() ==
|
||||||
|
ARM_CPU_PART_CORTEX_A9) {
|
||||||
scu_enable(S5P_VA_SCU);
|
scu_enable(S5P_VA_SCU);
|
||||||
exynos_cpu_restore_register();
|
exynos_cpu_restore_register();
|
||||||
|
}
|
||||||
exynos_pm_central_resume();
|
exynos_pm_central_resume();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/pm_domain.h>
|
#include <linux/pm_domain.h>
|
||||||
|
#include <linux/clk.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/of_address.h>
|
#include <linux/of_address.h>
|
||||||
#include <linux/of_platform.h>
|
#include <linux/of_platform.h>
|
||||||
|
@ -24,6 +25,8 @@
|
||||||
|
|
||||||
#include "regs-pmu.h"
|
#include "regs-pmu.h"
|
||||||
|
|
||||||
|
#define MAX_CLK_PER_DOMAIN 4
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Exynos specific wrapper around the generic power domain
|
* Exynos specific wrapper around the generic power domain
|
||||||
*/
|
*/
|
||||||
|
@ -32,6 +35,9 @@ struct exynos_pm_domain {
|
||||||
char const *name;
|
char const *name;
|
||||||
bool is_off;
|
bool is_off;
|
||||||
struct generic_pm_domain pd;
|
struct generic_pm_domain pd;
|
||||||
|
struct clk *oscclk;
|
||||||
|
struct clk *clk[MAX_CLK_PER_DOMAIN];
|
||||||
|
struct clk *pclk[MAX_CLK_PER_DOMAIN];
|
||||||
};
|
};
|
||||||
|
|
||||||
static int exynos_pd_power(struct generic_pm_domain *domain, bool power_on)
|
static int exynos_pd_power(struct generic_pm_domain *domain, bool power_on)
|
||||||
|
@ -44,6 +50,19 @@ static int exynos_pd_power(struct generic_pm_domain *domain, bool power_on)
|
||||||
pd = container_of(domain, struct exynos_pm_domain, pd);
|
pd = container_of(domain, struct exynos_pm_domain, pd);
|
||||||
base = pd->base;
|
base = pd->base;
|
||||||
|
|
||||||
|
/* Set oscclk before powering off a domain*/
|
||||||
|
if (!power_on) {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < MAX_CLK_PER_DOMAIN; i++) {
|
||||||
|
if (IS_ERR(pd->clk[i]))
|
||||||
|
break;
|
||||||
|
if (clk_set_parent(pd->clk[i], pd->oscclk))
|
||||||
|
pr_err("%s: error setting oscclk as parent to clock %d\n",
|
||||||
|
pd->name, i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pwr = power_on ? S5P_INT_LOCAL_PWR_EN : 0;
|
pwr = power_on ? S5P_INT_LOCAL_PWR_EN : 0;
|
||||||
__raw_writel(pwr, base);
|
__raw_writel(pwr, base);
|
||||||
|
|
||||||
|
@ -60,6 +79,20 @@ static int exynos_pd_power(struct generic_pm_domain *domain, bool power_on)
|
||||||
cpu_relax();
|
cpu_relax();
|
||||||
usleep_range(80, 100);
|
usleep_range(80, 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Restore clocks after powering on a domain*/
|
||||||
|
if (power_on) {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < MAX_CLK_PER_DOMAIN; i++) {
|
||||||
|
if (IS_ERR(pd->clk[i]))
|
||||||
|
break;
|
||||||
|
if (clk_set_parent(pd->clk[i], pd->pclk[i]))
|
||||||
|
pr_err("%s: error setting parent to clock%d\n",
|
||||||
|
pd->name, i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -152,9 +185,11 @@ static __init int exynos4_pm_init_power_domain(void)
|
||||||
|
|
||||||
for_each_compatible_node(np, NULL, "samsung,exynos4210-pd") {
|
for_each_compatible_node(np, NULL, "samsung,exynos4210-pd") {
|
||||||
struct exynos_pm_domain *pd;
|
struct exynos_pm_domain *pd;
|
||||||
int on;
|
int on, i;
|
||||||
|
struct device *dev;
|
||||||
|
|
||||||
pdev = of_find_device_by_node(np);
|
pdev = of_find_device_by_node(np);
|
||||||
|
dev = &pdev->dev;
|
||||||
|
|
||||||
pd = kzalloc(sizeof(*pd), GFP_KERNEL);
|
pd = kzalloc(sizeof(*pd), GFP_KERNEL);
|
||||||
if (!pd) {
|
if (!pd) {
|
||||||
|
@ -170,6 +205,30 @@ static __init int exynos4_pm_init_power_domain(void)
|
||||||
pd->pd.power_on = exynos_pd_power_on;
|
pd->pd.power_on = exynos_pd_power_on;
|
||||||
pd->pd.of_node = np;
|
pd->pd.of_node = np;
|
||||||
|
|
||||||
|
pd->oscclk = clk_get(dev, "oscclk");
|
||||||
|
if (IS_ERR(pd->oscclk))
|
||||||
|
goto no_clk;
|
||||||
|
|
||||||
|
for (i = 0; i < MAX_CLK_PER_DOMAIN; i++) {
|
||||||
|
char clk_name[8];
|
||||||
|
|
||||||
|
snprintf(clk_name, sizeof(clk_name), "clk%d", i);
|
||||||
|
pd->clk[i] = clk_get(dev, clk_name);
|
||||||
|
if (IS_ERR(pd->clk[i]))
|
||||||
|
break;
|
||||||
|
snprintf(clk_name, sizeof(clk_name), "pclk%d", i);
|
||||||
|
pd->pclk[i] = clk_get(dev, clk_name);
|
||||||
|
if (IS_ERR(pd->pclk[i])) {
|
||||||
|
clk_put(pd->clk[i]);
|
||||||
|
pd->clk[i] = ERR_PTR(-EINVAL);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IS_ERR(pd->clk[0]))
|
||||||
|
clk_put(pd->oscclk);
|
||||||
|
|
||||||
|
no_clk:
|
||||||
platform_set_drvdata(pdev, pd);
|
platform_set_drvdata(pdev, pd);
|
||||||
|
|
||||||
on = __raw_readl(pd->base + 0x4) & S5P_INT_LOCAL_PWR_EN;
|
on = __raw_readl(pd->base + 0x4) & S5P_INT_LOCAL_PWR_EN;
|
||||||
|
|
|
@ -734,9 +734,9 @@ config SOC_IMX6
|
||||||
select HAVE_IMX_MMDC
|
select HAVE_IMX_MMDC
|
||||||
select HAVE_IMX_SRC
|
select HAVE_IMX_SRC
|
||||||
select MFD_SYSCON
|
select MFD_SYSCON
|
||||||
select PL310_ERRATA_588369 if CACHE_PL310
|
select PL310_ERRATA_588369 if CACHE_L2X0
|
||||||
select PL310_ERRATA_727915 if CACHE_PL310
|
select PL310_ERRATA_727915 if CACHE_L2X0
|
||||||
select PL310_ERRATA_769419 if CACHE_PL310
|
select PL310_ERRATA_769419 if CACHE_L2X0
|
||||||
|
|
||||||
config SOC_IMX6Q
|
config SOC_IMX6Q
|
||||||
bool "i.MX6 Quad/DualLite support"
|
bool "i.MX6 Quad/DualLite support"
|
||||||
|
@ -771,9 +771,9 @@ config SOC_VF610
|
||||||
select ARM_GIC
|
select ARM_GIC
|
||||||
select PINCTRL_VF610
|
select PINCTRL_VF610
|
||||||
select VF_PIT_TIMER
|
select VF_PIT_TIMER
|
||||||
select PL310_ERRATA_588369 if CACHE_PL310
|
select PL310_ERRATA_588369 if CACHE_L2X0
|
||||||
select PL310_ERRATA_727915 if CACHE_PL310
|
select PL310_ERRATA_727915 if CACHE_L2X0
|
||||||
select PL310_ERRATA_769419 if CACHE_PL310
|
select PL310_ERRATA_769419 if CACHE_L2X0
|
||||||
|
|
||||||
help
|
help
|
||||||
This enable support for Freescale Vybrid VF610 processor.
|
This enable support for Freescale Vybrid VF610 processor.
|
||||||
|
|
|
@ -67,8 +67,12 @@ static void clk_gate2_disable(struct clk_hw *hw)
|
||||||
|
|
||||||
spin_lock_irqsave(gate->lock, flags);
|
spin_lock_irqsave(gate->lock, flags);
|
||||||
|
|
||||||
if (gate->share_count && --(*gate->share_count) > 0)
|
if (gate->share_count) {
|
||||||
goto out;
|
if (WARN_ON(*gate->share_count == 0))
|
||||||
|
goto out;
|
||||||
|
else if (--(*gate->share_count) > 0)
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
reg = readl(gate->reg);
|
reg = readl(gate->reg);
|
||||||
reg &= ~(3 << gate->bit_idx);
|
reg &= ~(3 << gate->bit_idx);
|
||||||
|
@ -78,19 +82,26 @@ out:
|
||||||
spin_unlock_irqrestore(gate->lock, flags);
|
spin_unlock_irqrestore(gate->lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int clk_gate2_is_enabled(struct clk_hw *hw)
|
static int clk_gate2_reg_is_enabled(void __iomem *reg, u8 bit_idx)
|
||||||
{
|
{
|
||||||
u32 reg;
|
u32 val = readl(reg);
|
||||||
struct clk_gate2 *gate = to_clk_gate2(hw);
|
|
||||||
|
|
||||||
reg = readl(gate->reg);
|
if (((val >> bit_idx) & 1) == 1)
|
||||||
|
|
||||||
if (((reg >> gate->bit_idx) & 1) == 1)
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int clk_gate2_is_enabled(struct clk_hw *hw)
|
||||||
|
{
|
||||||
|
struct clk_gate2 *gate = to_clk_gate2(hw);
|
||||||
|
|
||||||
|
if (gate->share_count)
|
||||||
|
return !!(*gate->share_count);
|
||||||
|
else
|
||||||
|
return clk_gate2_reg_is_enabled(gate->reg, gate->bit_idx);
|
||||||
|
}
|
||||||
|
|
||||||
static struct clk_ops clk_gate2_ops = {
|
static struct clk_ops clk_gate2_ops = {
|
||||||
.enable = clk_gate2_enable,
|
.enable = clk_gate2_enable,
|
||||||
.disable = clk_gate2_disable,
|
.disable = clk_gate2_disable,
|
||||||
|
@ -116,6 +127,10 @@ struct clk *clk_register_gate2(struct device *dev, const char *name,
|
||||||
gate->bit_idx = bit_idx;
|
gate->bit_idx = bit_idx;
|
||||||
gate->flags = clk_gate2_flags;
|
gate->flags = clk_gate2_flags;
|
||||||
gate->lock = lock;
|
gate->lock = lock;
|
||||||
|
|
||||||
|
/* Initialize share_count per hardware state */
|
||||||
|
if (share_count)
|
||||||
|
*share_count = clk_gate2_reg_is_enabled(reg, bit_idx) ? 1 : 0;
|
||||||
gate->share_count = share_count;
|
gate->share_count = share_count;
|
||||||
|
|
||||||
init.name = name;
|
init.name = name;
|
||||||
|
|
|
@ -312,6 +312,7 @@ static void __init imx6sl_clocks_init(struct device_node *ccm_node)
|
||||||
clks[IMX6SL_CLK_ECSPI2] = imx_clk_gate2("ecspi2", "ecspi_root", base + 0x6c, 2);
|
clks[IMX6SL_CLK_ECSPI2] = imx_clk_gate2("ecspi2", "ecspi_root", base + 0x6c, 2);
|
||||||
clks[IMX6SL_CLK_ECSPI3] = imx_clk_gate2("ecspi3", "ecspi_root", base + 0x6c, 4);
|
clks[IMX6SL_CLK_ECSPI3] = imx_clk_gate2("ecspi3", "ecspi_root", base + 0x6c, 4);
|
||||||
clks[IMX6SL_CLK_ECSPI4] = imx_clk_gate2("ecspi4", "ecspi_root", base + 0x6c, 6);
|
clks[IMX6SL_CLK_ECSPI4] = imx_clk_gate2("ecspi4", "ecspi_root", base + 0x6c, 6);
|
||||||
|
clks[IMX6SL_CLK_ENET] = imx_clk_gate2("enet", "ipg", base + 0x6c, 10);
|
||||||
clks[IMX6SL_CLK_EPIT1] = imx_clk_gate2("epit1", "perclk", base + 0x6c, 12);
|
clks[IMX6SL_CLK_EPIT1] = imx_clk_gate2("epit1", "perclk", base + 0x6c, 12);
|
||||||
clks[IMX6SL_CLK_EPIT2] = imx_clk_gate2("epit2", "perclk", base + 0x6c, 14);
|
clks[IMX6SL_CLK_EPIT2] = imx_clk_gate2("epit2", "perclk", base + 0x6c, 14);
|
||||||
clks[IMX6SL_CLK_EXTERN_AUDIO] = imx_clk_gate2("extern_audio", "extern_audio_podf", base + 0x6c, 16);
|
clks[IMX6SL_CLK_EXTERN_AUDIO] = imx_clk_gate2("extern_audio", "extern_audio_podf", base + 0x6c, 16);
|
||||||
|
|
|
@ -480,25 +480,18 @@ static const struct of_device_id ebi_match[] = {
|
||||||
static void __init ap_init_of(void)
|
static void __init ap_init_of(void)
|
||||||
{
|
{
|
||||||
unsigned long sc_dec;
|
unsigned long sc_dec;
|
||||||
struct device_node *root;
|
|
||||||
struct device_node *syscon;
|
struct device_node *syscon;
|
||||||
struct device_node *ebi;
|
struct device_node *ebi;
|
||||||
struct device *parent;
|
struct device *parent;
|
||||||
struct soc_device *soc_dev;
|
struct soc_device *soc_dev;
|
||||||
struct soc_device_attribute *soc_dev_attr;
|
struct soc_device_attribute *soc_dev_attr;
|
||||||
u32 ap_sc_id;
|
u32 ap_sc_id;
|
||||||
int err;
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* Here we create an SoC device for the root node */
|
syscon = of_find_matching_node(NULL, ap_syscon_match);
|
||||||
root = of_find_node_by_path("/");
|
|
||||||
if (!root)
|
|
||||||
return;
|
|
||||||
|
|
||||||
syscon = of_find_matching_node(root, ap_syscon_match);
|
|
||||||
if (!syscon)
|
if (!syscon)
|
||||||
return;
|
return;
|
||||||
ebi = of_find_matching_node(root, ebi_match);
|
ebi = of_find_matching_node(NULL, ebi_match);
|
||||||
if (!ebi)
|
if (!ebi)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -509,19 +502,17 @@ static void __init ap_init_of(void)
|
||||||
if (!ebi_base)
|
if (!ebi_base)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
of_platform_populate(NULL, of_default_bus_match_table,
|
||||||
|
ap_auxdata_lookup, NULL);
|
||||||
|
|
||||||
ap_sc_id = readl(ap_syscon_base);
|
ap_sc_id = readl(ap_syscon_base);
|
||||||
|
|
||||||
soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
|
soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
|
||||||
if (!soc_dev_attr)
|
if (!soc_dev_attr)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
err = of_property_read_string(root, "compatible",
|
soc_dev_attr->soc_id = "XVC";
|
||||||
&soc_dev_attr->soc_id);
|
soc_dev_attr->machine = "Integrator/AP";
|
||||||
if (err)
|
|
||||||
return;
|
|
||||||
err = of_property_read_string(root, "model", &soc_dev_attr->machine);
|
|
||||||
if (err)
|
|
||||||
return;
|
|
||||||
soc_dev_attr->family = "Integrator";
|
soc_dev_attr->family = "Integrator";
|
||||||
soc_dev_attr->revision = kasprintf(GFP_KERNEL, "%c",
|
soc_dev_attr->revision = kasprintf(GFP_KERNEL, "%c",
|
||||||
'A' + (ap_sc_id & 0x0f));
|
'A' + (ap_sc_id & 0x0f));
|
||||||
|
@ -536,9 +527,6 @@ static void __init ap_init_of(void)
|
||||||
parent = soc_device_to_device(soc_dev);
|
parent = soc_device_to_device(soc_dev);
|
||||||
integrator_init_sysfs(parent, ap_sc_id);
|
integrator_init_sysfs(parent, ap_sc_id);
|
||||||
|
|
||||||
of_platform_populate(root, of_default_bus_match_table,
|
|
||||||
ap_auxdata_lookup, parent);
|
|
||||||
|
|
||||||
sc_dec = readl(ap_syscon_base + INTEGRATOR_SC_DEC_OFFSET);
|
sc_dec = readl(ap_syscon_base + INTEGRATOR_SC_DEC_OFFSET);
|
||||||
for (i = 0; i < 4; i++) {
|
for (i = 0; i < 4; i++) {
|
||||||
struct lm_device *lmdev;
|
struct lm_device *lmdev;
|
||||||
|
|
|
@ -279,20 +279,13 @@ static const struct of_device_id intcp_syscon_match[] = {
|
||||||
|
|
||||||
static void __init intcp_init_of(void)
|
static void __init intcp_init_of(void)
|
||||||
{
|
{
|
||||||
struct device_node *root;
|
|
||||||
struct device_node *cpcon;
|
struct device_node *cpcon;
|
||||||
struct device *parent;
|
struct device *parent;
|
||||||
struct soc_device *soc_dev;
|
struct soc_device *soc_dev;
|
||||||
struct soc_device_attribute *soc_dev_attr;
|
struct soc_device_attribute *soc_dev_attr;
|
||||||
u32 intcp_sc_id;
|
u32 intcp_sc_id;
|
||||||
int err;
|
|
||||||
|
|
||||||
/* Here we create an SoC device for the root node */
|
cpcon = of_find_matching_node(NULL, intcp_syscon_match);
|
||||||
root = of_find_node_by_path("/");
|
|
||||||
if (!root)
|
|
||||||
return;
|
|
||||||
|
|
||||||
cpcon = of_find_matching_node(root, intcp_syscon_match);
|
|
||||||
if (!cpcon)
|
if (!cpcon)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -300,19 +293,17 @@ static void __init intcp_init_of(void)
|
||||||
if (!intcp_con_base)
|
if (!intcp_con_base)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
of_platform_populate(NULL, of_default_bus_match_table,
|
||||||
|
intcp_auxdata_lookup, NULL);
|
||||||
|
|
||||||
intcp_sc_id = readl(intcp_con_base);
|
intcp_sc_id = readl(intcp_con_base);
|
||||||
|
|
||||||
soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
|
soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
|
||||||
if (!soc_dev_attr)
|
if (!soc_dev_attr)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
err = of_property_read_string(root, "compatible",
|
soc_dev_attr->soc_id = "XCV";
|
||||||
&soc_dev_attr->soc_id);
|
soc_dev_attr->machine = "Integrator/CP";
|
||||||
if (err)
|
|
||||||
return;
|
|
||||||
err = of_property_read_string(root, "model", &soc_dev_attr->machine);
|
|
||||||
if (err)
|
|
||||||
return;
|
|
||||||
soc_dev_attr->family = "Integrator";
|
soc_dev_attr->family = "Integrator";
|
||||||
soc_dev_attr->revision = kasprintf(GFP_KERNEL, "%c",
|
soc_dev_attr->revision = kasprintf(GFP_KERNEL, "%c",
|
||||||
'A' + (intcp_sc_id & 0x0f));
|
'A' + (intcp_sc_id & 0x0f));
|
||||||
|
@ -326,8 +317,6 @@ static void __init intcp_init_of(void)
|
||||||
|
|
||||||
parent = soc_device_to_device(soc_dev);
|
parent = soc_device_to_device(soc_dev);
|
||||||
integrator_init_sysfs(parent, intcp_sc_id);
|
integrator_init_sysfs(parent, intcp_sc_id);
|
||||||
of_platform_populate(root, of_default_bus_match_table,
|
|
||||||
intcp_auxdata_lookup, parent);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char * intcp_dt_board_compat[] = {
|
static const char * intcp_dt_board_compat[] = {
|
||||||
|
|
|
@ -10,6 +10,7 @@ menuconfig ARCH_MVEBU
|
||||||
select ZONE_DMA if ARM_LPAE
|
select ZONE_DMA if ARM_LPAE
|
||||||
select ARCH_REQUIRE_GPIOLIB
|
select ARCH_REQUIRE_GPIOLIB
|
||||||
select PCI_QUIRKS if PCI
|
select PCI_QUIRKS if PCI
|
||||||
|
select OF_ADDRESS_PCI
|
||||||
|
|
||||||
if ARCH_MVEBU
|
if ARCH_MVEBU
|
||||||
|
|
||||||
|
@ -17,6 +18,7 @@ config MACH_MVEBU_V7
|
||||||
bool
|
bool
|
||||||
select ARMADA_370_XP_TIMER
|
select ARMADA_370_XP_TIMER
|
||||||
select CACHE_L2X0
|
select CACHE_L2X0
|
||||||
|
select ARM_CPU_SUSPEND
|
||||||
|
|
||||||
config MACH_ARMADA_370
|
config MACH_ARMADA_370
|
||||||
bool "Marvell Armada 370 boards" if ARCH_MULTI_V7
|
bool "Marvell Armada 370 boards" if ARCH_MULTI_V7
|
||||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче