mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 06:31:49 +00:00
Linux 3.16
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAABAgAGBQJT3rbVAAoJEHm+PkMAQRiGBc0H/0PcAqZ66KqBrjCaC7tlR9ZJ Oyv4usrPpVmJaCaYiNwc4KnkJXDfc/foEtZq32vYSb4d8xaOLta3DrT8YJTS7B7T Afdg8FbVdSjBD0S8It35XidmZlOaVrgGJGpDIRBRrqDwPPgbWpTeUR73bfkwoA/R ziW+78s0mquo9hN9Bdu3apr7XxVmzeIUx6lJxKPCoXNEGTsSC7ibCzZRzZDMpag/ D1JrQbE0XevgEu5fWrJkcqKceUzi3I1wuKZvBIJm2aX5XDsKpYNfQL6ViJDW56dK LhrB8vex8gkQYSCVPyUKx4BjkdPourSICSKq+h0SwhOCpHVHPmG8XM3J4/U4a7U= =yoNZ -----END PGP SIGNATURE----- Merge tag 'v3.16' into drm-next Linux 3.16 backmerge requested by i915, nouveau and radeon authors Conflicts: drivers/gpu/drm/i915/i915_gem_render_state.c drivers/gpu/drm/i915/intel_drv.h
This commit is contained in:
commit
5d42f82a9b
5
.mailmap
5
.mailmap
@ -62,6 +62,11 @@ Jeff Garzik <jgarzik@pretzel.yyz.us>
|
|||||||
Jens Axboe <axboe@suse.de>
|
Jens Axboe <axboe@suse.de>
|
||||||
Jens Osterkamp <Jens.Osterkamp@de.ibm.com>
|
Jens Osterkamp <Jens.Osterkamp@de.ibm.com>
|
||||||
John Stultz <johnstul@us.ibm.com>
|
John Stultz <johnstul@us.ibm.com>
|
||||||
|
<josh@joshtriplett.org> <josh@freedesktop.org>
|
||||||
|
<josh@joshtriplett.org> <josh@kernel.org>
|
||||||
|
<josh@joshtriplett.org> <josht@linux.vnet.ibm.com>
|
||||||
|
<josh@joshtriplett.org> <josht@us.ibm.com>
|
||||||
|
<josh@joshtriplett.org> <josht@vnet.ibm.com>
|
||||||
Juha Yrjola <at solidboot.com>
|
Juha Yrjola <at solidboot.com>
|
||||||
Juha Yrjola <juha.yrjola@nokia.com>
|
Juha Yrjola <juha.yrjola@nokia.com>
|
||||||
Juha Yrjola <juha.yrjola@solidboot.com>
|
Juha Yrjola <juha.yrjola@solidboot.com>
|
||||||
|
7
CREDITS
7
CREDITS
@ -3511,10 +3511,11 @@ S: MacGregor A.C.T 2615
|
|||||||
S: Australia
|
S: Australia
|
||||||
|
|
||||||
N: Josh Triplett
|
N: Josh Triplett
|
||||||
E: josh@freedesktop.org
|
E: josh@joshtriplett.org
|
||||||
P: 1024D/D0FE7AFB B24A 65C9 1D71 2AC2 DE87 CA26 189B 9946 D0FE 7AFB
|
P: 4096R/8AFF873D 758E 5042 E397 4BA3 3A9C 1E67 0ED9 A3DF 8AFF 873D
|
||||||
D: rcutorture maintainer
|
D: RCU and rcutorture
|
||||||
D: lock annotations, finding and fixing lock bugs
|
D: lock annotations, finding and fixing lock bugs
|
||||||
|
D: kernel tinification
|
||||||
|
|
||||||
N: Winfried Trümper
|
N: Winfried Trümper
|
||||||
E: winni@xpilot.org
|
E: winni@xpilot.org
|
||||||
|
@ -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>
|
||||||
|
@ -60,12 +60,6 @@ If the driver needs to perform more complex initialization like getting and
|
|||||||
configuring GPIOs it can get its ACPI handle and extract this information
|
configuring GPIOs it can get its ACPI handle and extract this information
|
||||||
from ACPI tables.
|
from ACPI tables.
|
||||||
|
|
||||||
Currently the kernel is not able to automatically determine from which ACPI
|
|
||||||
device it should make the corresponding platform device so we need to add
|
|
||||||
the ACPI device explicitly to acpi_platform_device_ids list defined in
|
|
||||||
drivers/acpi/acpi_platform.c. This limitation is only for the platform
|
|
||||||
devices, SPI and I2C devices are created automatically as described below.
|
|
||||||
|
|
||||||
DMA support
|
DMA support
|
||||||
~~~~~~~~~~~
|
~~~~~~~~~~~
|
||||||
DMA controllers enumerated via ACPI should be registered in the system to
|
DMA controllers enumerated via ACPI should be registered in the system to
|
||||||
|
@ -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.
|
||||||
|
@ -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 {
|
||||||
|
@ -8,10 +8,12 @@ Both required and optional properties listed below must be defined
|
|||||||
under node /cpus/cpu@0.
|
under node /cpus/cpu@0.
|
||||||
|
|
||||||
Required properties:
|
Required properties:
|
||||||
- operating-points: Refer to Documentation/devicetree/bindings/power/opp.txt
|
- None
|
||||||
for details
|
|
||||||
|
|
||||||
Optional properties:
|
Optional properties:
|
||||||
|
- operating-points: Refer to Documentation/devicetree/bindings/power/opp.txt for
|
||||||
|
details. OPPs *must* be supplied either via DT, i.e. this property, or
|
||||||
|
populated at runtime.
|
||||||
- clock-latency: Specify the possible maximum transition latency for clock,
|
- clock-latency: Specify the possible maximum transition latency for clock,
|
||||||
in unit of nanoseconds.
|
in unit of nanoseconds.
|
||||||
- voltage-tolerance: Specify the CPU voltage tolerance in percentage.
|
- voltage-tolerance: Specify the CPU voltage tolerance in percentage.
|
||||||
|
@ -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.
|
||||||
|
@ -281,6 +281,19 @@ gestures can normally be extracted from it.
|
|||||||
If INPUT_PROP_SEMI_MT is not set, the device is assumed to be a true MT
|
If INPUT_PROP_SEMI_MT is not set, the device is assumed to be a true MT
|
||||||
device.
|
device.
|
||||||
|
|
||||||
|
INPUT_PROP_TOPBUTTONPAD:
|
||||||
|
-----------------------
|
||||||
|
Some laptops, most notably the Lenovo *40 series provide a trackstick
|
||||||
|
device but do not have physical buttons associated with the trackstick
|
||||||
|
device. Instead, the top area of the touchpad is marked to show
|
||||||
|
visual/haptic areas for left, middle, right buttons intended to be used
|
||||||
|
with the trackstick.
|
||||||
|
|
||||||
|
If INPUT_PROP_TOPBUTTONPAD is set, userspace should emulate buttons
|
||||||
|
accordingly. This property does not affect kernel behavior.
|
||||||
|
The kernel does not provide button emulation for such devices but treats
|
||||||
|
them as any other INPUT_PROP_BUTTONPAD device.
|
||||||
|
|
||||||
Guidelines:
|
Guidelines:
|
||||||
==========
|
==========
|
||||||
The guidelines below ensure proper single-touch and multi-finger functionality.
|
The guidelines below ensure proper single-touch and multi-finger functionality.
|
||||||
|
@ -2790,6 +2790,12 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
|||||||
leaf rcu_node structure. Useful for very large
|
leaf rcu_node structure. Useful for very large
|
||||||
systems.
|
systems.
|
||||||
|
|
||||||
|
rcutree.jiffies_till_sched_qs= [KNL]
|
||||||
|
Set required age in jiffies for a
|
||||||
|
given grace period before RCU starts
|
||||||
|
soliciting quiescent-state help from
|
||||||
|
rcu_note_context_switch().
|
||||||
|
|
||||||
rcutree.jiffies_till_first_fqs= [KNL]
|
rcutree.jiffies_till_first_fqs= [KNL]
|
||||||
Set delay from grace-period initialization to
|
Set delay from grace-period initialization to
|
||||||
first attempt to force quiescent states.
|
first attempt to force quiescent states.
|
||||||
@ -3526,7 +3532,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
|||||||
the allocated input device; If set to 0, video driver
|
the allocated input device; If set to 0, video driver
|
||||||
will only send out the event without touching backlight
|
will only send out the event without touching backlight
|
||||||
brightness level.
|
brightness level.
|
||||||
default: 0
|
default: 1
|
||||||
|
|
||||||
virtio_mmio.device=
|
virtio_mmio.device=
|
||||||
[VMMIO] Memory mapped virtio (platform) device.
|
[VMMIO] Memory mapped virtio (platform) device.
|
||||||
|
@ -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;
|
||||||
}
|
}
|
44
MAINTAINERS
44
MAINTAINERS
@ -156,7 +156,6 @@ F: drivers/net/hamradio/6pack.c
|
|||||||
|
|
||||||
8169 10/100/1000 GIGABIT ETHERNET DRIVER
|
8169 10/100/1000 GIGABIT ETHERNET DRIVER
|
||||||
M: Realtek linux nic maintainers <nic_swsd@realtek.com>
|
M: Realtek linux nic maintainers <nic_swsd@realtek.com>
|
||||||
M: Francois Romieu <romieu@fr.zoreil.com>
|
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/net/ethernet/realtek/r8169.c
|
F: drivers/net/ethernet/realtek/r8169.c
|
||||||
@ -1314,6 +1313,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/
|
||||||
|
|
||||||
@ -4497,8 +4510,7 @@ S: Supported
|
|||||||
F: drivers/idle/i7300_idle.c
|
F: drivers/idle/i7300_idle.c
|
||||||
|
|
||||||
IEEE 802.15.4 SUBSYSTEM
|
IEEE 802.15.4 SUBSYSTEM
|
||||||
M: Alexander Smirnov <alex.bluesman.smirnov@gmail.com>
|
M: Alexander Aring <alex.aring@gmail.com>
|
||||||
M: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
|
|
||||||
L: linux-zigbee-devel@lists.sourceforge.net (moderated for non-subscribers)
|
L: linux-zigbee-devel@lists.sourceforge.net (moderated for non-subscribers)
|
||||||
W: http://apps.sourceforge.net/trac/linux-zigbee
|
W: http://apps.sourceforge.net/trac/linux-zigbee
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/lowpan/lowpan.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/lowpan/lowpan.git
|
||||||
@ -6787,7 +6799,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
|
||||||
@ -6944,6 +6956,12 @@ L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
|||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/pinctrl/pinctrl-at91.c
|
F: drivers/pinctrl/pinctrl-at91.c
|
||||||
|
|
||||||
|
PIN CONTROLLER - RENESAS
|
||||||
|
M: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||||
|
L: linux-sh@vger.kernel.org
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/pinctrl/sh-pfc/
|
||||||
|
|
||||||
PIN CONTROLLER - SAMSUNG
|
PIN CONTROLLER - SAMSUNG
|
||||||
M: Tomasz Figa <t.figa@samsung.com>
|
M: Tomasz Figa <t.figa@samsung.com>
|
||||||
M: Thomas Abraham <thomas.abraham@linaro.org>
|
M: Thomas Abraham <thomas.abraham@linaro.org>
|
||||||
@ -7406,7 +7424,7 @@ S: Orphan
|
|||||||
F: drivers/net/wireless/ray*
|
F: drivers/net/wireless/ray*
|
||||||
|
|
||||||
RCUTORTURE MODULE
|
RCUTORTURE MODULE
|
||||||
M: Josh Triplett <josh@freedesktop.org>
|
M: Josh Triplett <josh@joshtriplett.org>
|
||||||
M: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
|
M: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
|
||||||
L: linux-kernel@vger.kernel.org
|
L: linux-kernel@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
@ -8007,6 +8025,16 @@ F: drivers/ata/
|
|||||||
F: include/linux/ata.h
|
F: include/linux/ata.h
|
||||||
F: include/linux/libata.h
|
F: include/linux/libata.h
|
||||||
|
|
||||||
|
SERIAL ATA AHCI PLATFORM devices support
|
||||||
|
M: Hans de Goede <hdegoede@redhat.com>
|
||||||
|
M: Tejun Heo <tj@kernel.org>
|
||||||
|
L: linux-ide@vger.kernel.org
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata.git
|
||||||
|
S: Supported
|
||||||
|
F: drivers/ata/ahci_platform.c
|
||||||
|
F: drivers/ata/libahci_platform.c
|
||||||
|
F: include/linux/ahci_platform.h
|
||||||
|
|
||||||
SERVER ENGINES 10Gbps iSCSI - BladeEngine 2 DRIVER
|
SERVER ENGINES 10Gbps iSCSI - BladeEngine 2 DRIVER
|
||||||
M: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
|
M: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
|
||||||
L: linux-scsi@vger.kernel.org
|
L: linux-scsi@vger.kernel.org
|
||||||
@ -8894,7 +8922,7 @@ M: Stephen Warren <swarren@wwwdotorg.org>
|
|||||||
M: Thierry Reding <thierry.reding@gmail.com>
|
M: Thierry Reding <thierry.reding@gmail.com>
|
||||||
L: linux-tegra@vger.kernel.org
|
L: linux-tegra@vger.kernel.org
|
||||||
Q: http://patchwork.ozlabs.org/project/linux-tegra/list/
|
Q: http://patchwork.ozlabs.org/project/linux-tegra/list/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/swarren/linux-tegra.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tegra/linux.git
|
||||||
S: Supported
|
S: Supported
|
||||||
N: [^a-z]tegra
|
N: [^a-z]tegra
|
||||||
|
|
||||||
@ -8984,7 +9012,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
|
||||||
@ -9011,7 +9039,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/
|
||||||
|
103
Makefile
103
Makefile
@ -1,7 +1,7 @@
|
|||||||
VERSION = 3
|
VERSION = 3
|
||||||
PATCHLEVEL = 16
|
PATCHLEVEL = 16
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION = -rc4
|
EXTRAVERSION =
|
||||||
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.
|
||||||
#
|
#
|
||||||
@ -128,8 +174,11 @@ $(filter-out _all sub-make $(CURDIR)/Makefile, $(MAKECMDGOALS)) _all: sub-make
|
|||||||
|
|
||||||
# Fake the "Entering directory" message once, so that IDEs/editors are
|
# Fake the "Entering directory" message once, so that IDEs/editors are
|
||||||
# able to understand relative filenames.
|
# able to understand relative filenames.
|
||||||
|
echodir := @echo
|
||||||
|
quiet_echodir := @echo
|
||||||
|
silent_echodir := @:
|
||||||
sub-make: FORCE
|
sub-make: FORCE
|
||||||
@echo "make[1]: Entering directory \`$(KBUILD_OUTPUT)'"
|
$($(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 \
|
||||||
@ -292,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
|
||||||
@ -685,6 +688,8 @@ KBUILD_CFLAGS += -fomit-frame-pointer
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
KBUILD_CFLAGS += $(call cc-option, -fno-var-tracking-assignments)
|
||||||
|
|
||||||
ifdef CONFIG_DEBUG_INFO
|
ifdef CONFIG_DEBUG_INFO
|
||||||
KBUILD_CFLAGS += -g
|
KBUILD_CFLAGS += -g
|
||||||
KBUILD_AFLAGS += -Wa,-gdwarf-2
|
KBUILD_AFLAGS += -Wa,-gdwarf-2
|
||||||
@ -1173,7 +1178,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) $@
|
||||||
|
@ -6,6 +6,7 @@ config ARM
|
|||||||
select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
|
select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
|
||||||
select ARCH_HAVE_CUSTOM_GPIO_H
|
select ARCH_HAVE_CUSTOM_GPIO_H
|
||||||
select ARCH_MIGHT_HAVE_PC_PARPORT
|
select ARCH_MIGHT_HAVE_PC_PARPORT
|
||||||
|
select ARCH_SUPPORTS_ATOMIC_RMW
|
||||||
select ARCH_USE_BUILTIN_BSWAP
|
select ARCH_USE_BUILTIN_BSWAP
|
||||||
select ARCH_USE_CMPXCHG_LOCKREF
|
select ARCH_USE_CMPXCHG_LOCKREF
|
||||||
select ARCH_WANT_IPC_PARSE_VERSION
|
select ARCH_WANT_IPC_PARSE_VERSION
|
||||||
@ -312,7 +313,7 @@ config ARCH_MULTIPLATFORM
|
|||||||
config ARCH_INTEGRATOR
|
config ARCH_INTEGRATOR
|
||||||
bool "ARM Ltd. Integrator family"
|
bool "ARM Ltd. Integrator family"
|
||||||
select ARM_AMBA
|
select ARM_AMBA
|
||||||
select ARM_PATCH_PHYS_VIRT
|
select ARM_PATCH_PHYS_VIRT if MMU
|
||||||
select AUTO_ZRELADDR
|
select AUTO_ZRELADDR
|
||||||
select COMMON_CLK
|
select COMMON_CLK
|
||||||
select COMMON_CLK_VERSATILE
|
select COMMON_CLK_VERSATILE
|
||||||
@ -658,7 +659,7 @@ config ARCH_MSM
|
|||||||
config ARCH_SHMOBILE_LEGACY
|
config ARCH_SHMOBILE_LEGACY
|
||||||
bool "Renesas ARM SoCs (non-multiplatform)"
|
bool "Renesas ARM SoCs (non-multiplatform)"
|
||||||
select ARCH_SHMOBILE
|
select ARCH_SHMOBILE
|
||||||
select ARM_PATCH_PHYS_VIRT
|
select ARM_PATCH_PHYS_VIRT if MMU
|
||||||
select CLKDEV_LOOKUP
|
select CLKDEV_LOOKUP
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
select HAVE_ARM_SCU if SMP
|
select HAVE_ARM_SCU if SMP
|
||||||
|
@ -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 {
|
||||||
|
@ -925,7 +925,7 @@
|
|||||||
compatible = "atmel,at91rm9200-ohci", "usb-ohci";
|
compatible = "atmel,at91rm9200-ohci", "usb-ohci";
|
||||||
reg = <0x00500000 0x00100000>;
|
reg = <0x00500000 0x00100000>;
|
||||||
interrupts = <22 IRQ_TYPE_LEVEL_HIGH 2>;
|
interrupts = <22 IRQ_TYPE_LEVEL_HIGH 2>;
|
||||||
clocks = <&usb>, <&uhphs_clk>, <&udphs_clk>,
|
clocks = <&usb>, <&uhphs_clk>, <&uhphs_clk>,
|
||||||
<&uhpck>;
|
<&uhpck>;
|
||||||
clock-names = "usb_clk", "ohci_clk", "hclk", "uhpck";
|
clock-names = "usb_clk", "ohci_clk", "hclk", "uhpck";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
@ -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 {
|
||||||
@ -1122,6 +1124,7 @@
|
|||||||
compatible = "atmel,at91sam9rl-pwm";
|
compatible = "atmel,at91sam9rl-pwm";
|
||||||
reg = <0xf8034000 0x300>;
|
reg = <0xf8034000 0x300>;
|
||||||
interrupts = <18 IRQ_TYPE_LEVEL_HIGH 4>;
|
interrupts = <18 IRQ_TYPE_LEVEL_HIGH 4>;
|
||||||
|
clocks = <&pwm_clk>;
|
||||||
#pwm-cells = <3>;
|
#pwm-cells = <3>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
@ -1153,8 +1156,7 @@
|
|||||||
compatible = "atmel,at91rm9200-ohci", "usb-ohci";
|
compatible = "atmel,at91rm9200-ohci", "usb-ohci";
|
||||||
reg = <0x00600000 0x100000>;
|
reg = <0x00600000 0x100000>;
|
||||||
interrupts = <22 IRQ_TYPE_LEVEL_HIGH 2>;
|
interrupts = <22 IRQ_TYPE_LEVEL_HIGH 2>;
|
||||||
clocks = <&usb>, <&uhphs_clk>, <&udphs_clk>,
|
clocks = <&usb>, <&uhphs_clk>, <&uhphs_clk>, <&uhpck>;
|
||||||
<&uhpck>;
|
|
||||||
clock-names = "usb_clk", "ohci_clk", "hclk", "uhpck";
|
clock-names = "usb_clk", "ohci_clk", "hclk", "uhpck";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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 {
|
||||||
|
@ -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 {
|
||||||
|
@ -73,7 +73,7 @@
|
|||||||
|
|
||||||
L2: l2-cache {
|
L2: l2-cache {
|
||||||
compatible = "arm,pl310-cache";
|
compatible = "arm,pl310-cache";
|
||||||
reg = <0xfc10000 0x100000>;
|
reg = <0x100000 0x100000>;
|
||||||
interrupts = <0 15 4>;
|
interrupts = <0 15 4>;
|
||||||
cache-unified;
|
cache-unified;
|
||||||
cache-level = <2>;
|
cache-level = <2>;
|
||||||
|
@ -353,7 +353,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
twl_power: power {
|
twl_power: power {
|
||||||
compatible = "ti,twl4030-power-n900", "ti,twl4030-power-idle-osc-off";
|
compatible = "ti,twl4030-power-n900";
|
||||||
ti,use_poweroff;
|
ti,use_poweroff;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -540,9 +540,9 @@
|
|||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
clock-output-names = "sd1";
|
clock-output-names = "sd1";
|
||||||
};
|
};
|
||||||
sd2_clk: sd3_clk@e615007c {
|
sd2_clk: sd3_clk@e615026c {
|
||||||
compatible = "renesas,r8a7791-div6-clock", "renesas,cpg-div6-clock";
|
compatible = "renesas,r8a7791-div6-clock", "renesas,cpg-div6-clock";
|
||||||
reg = <0 0xe615007c 0 4>;
|
reg = <0 0xe615026c 0 4>;
|
||||||
clocks = <&pll1_div2_clk>;
|
clocks = <&pll1_div2_clk>;
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
clock-output-names = "sd2";
|
clock-output-names = "sd2";
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
/include/ "ste-nomadik-stn8815.dtsi"
|
#include "ste-nomadik-stn8815.dtsi"
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "Calao Systems USB-S8815";
|
model = "Calao Systems USB-S8815";
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
/*
|
/*
|
||||||
* Device Tree for the ST-Ericsson Nomadik 8815 STn8815 SoC
|
* Device Tree for the ST-Ericsson Nomadik 8815 STn8815 SoC
|
||||||
*/
|
*/
|
||||||
/include/ "skeleton.dtsi"
|
|
||||||
|
#include <dt-bindings/gpio/gpio.h>
|
||||||
|
#include "skeleton.dtsi"
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
@ -842,8 +844,7 @@
|
|||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
cap-mmc-highspeed;
|
cap-mmc-highspeed;
|
||||||
cap-sd-highspeed;
|
cap-sd-highspeed;
|
||||||
cd-gpios = <&gpio3 15 0x1>;
|
cd-gpios = <&gpio3 15 GPIO_ACTIVE_LOW>;
|
||||||
cd-inverted;
|
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&mmcsd_default_mux>, <&mmcsd_default_mode>;
|
pinctrl-0 = <&mmcsd_default_mux>, <&mmcsd_default_mode>;
|
||||||
vmmc-supply = <&vmmc_regulator>;
|
vmmc-supply = <&vmmc_regulator>;
|
||||||
|
@ -137,7 +137,7 @@ static int aesbs_cbc_encrypt(struct blkcipher_desc *desc,
|
|||||||
dst += AES_BLOCK_SIZE;
|
dst += AES_BLOCK_SIZE;
|
||||||
} while (--blocks);
|
} while (--blocks);
|
||||||
}
|
}
|
||||||
err = blkcipher_walk_done(desc, &walk, 0);
|
err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE);
|
||||||
}
|
}
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@ -158,7 +158,7 @@ static int aesbs_cbc_decrypt(struct blkcipher_desc *desc,
|
|||||||
bsaes_cbc_encrypt(walk.src.virt.addr, walk.dst.virt.addr,
|
bsaes_cbc_encrypt(walk.src.virt.addr, walk.dst.virt.addr,
|
||||||
walk.nbytes, &ctx->dec, walk.iv);
|
walk.nbytes, &ctx->dec, walk.iv);
|
||||||
kernel_neon_end();
|
kernel_neon_end();
|
||||||
err = blkcipher_walk_done(desc, &walk, 0);
|
err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE);
|
||||||
}
|
}
|
||||||
while (walk.nbytes) {
|
while (walk.nbytes) {
|
||||||
u32 blocks = walk.nbytes / AES_BLOCK_SIZE;
|
u32 blocks = walk.nbytes / AES_BLOCK_SIZE;
|
||||||
@ -182,7 +182,7 @@ static int aesbs_cbc_decrypt(struct blkcipher_desc *desc,
|
|||||||
dst += AES_BLOCK_SIZE;
|
dst += AES_BLOCK_SIZE;
|
||||||
src += AES_BLOCK_SIZE;
|
src += AES_BLOCK_SIZE;
|
||||||
} while (--blocks);
|
} while (--blocks);
|
||||||
err = blkcipher_walk_done(desc, &walk, 0);
|
err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE);
|
||||||
}
|
}
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@ -268,7 +268,7 @@ static int aesbs_xts_encrypt(struct blkcipher_desc *desc,
|
|||||||
bsaes_xts_encrypt(walk.src.virt.addr, walk.dst.virt.addr,
|
bsaes_xts_encrypt(walk.src.virt.addr, walk.dst.virt.addr,
|
||||||
walk.nbytes, &ctx->enc, walk.iv);
|
walk.nbytes, &ctx->enc, walk.iv);
|
||||||
kernel_neon_end();
|
kernel_neon_end();
|
||||||
err = blkcipher_walk_done(desc, &walk, 0);
|
err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE);
|
||||||
}
|
}
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@ -292,7 +292,7 @@ static int aesbs_xts_decrypt(struct blkcipher_desc *desc,
|
|||||||
bsaes_xts_decrypt(walk.src.virt.addr, walk.dst.virt.addr,
|
bsaes_xts_decrypt(walk.src.virt.addr, walk.dst.virt.addr,
|
||||||
walk.nbytes, &ctx->dec, walk.iv);
|
walk.nbytes, &ctx->dec, walk.iv);
|
||||||
kernel_neon_end();
|
kernel_neon_end();
|
||||||
err = blkcipher_walk_done(desc, &walk, 0);
|
err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE);
|
||||||
}
|
}
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
@ -50,6 +50,7 @@ struct machine_desc {
|
|||||||
struct smp_operations *smp; /* SMP operations */
|
struct smp_operations *smp; /* SMP operations */
|
||||||
bool (*smp_init)(void);
|
bool (*smp_init)(void);
|
||||||
void (*fixup)(struct tag *, char **);
|
void (*fixup)(struct tag *, char **);
|
||||||
|
void (*dt_fixup)(void);
|
||||||
void (*init_meminfo)(void);
|
void (*init_meminfo)(void);
|
||||||
void (*reserve)(void);/* reserve mem blocks */
|
void (*reserve)(void);/* reserve mem blocks */
|
||||||
void (*map_io)(void);/* IO mapping function */
|
void (*map_io)(void);/* IO mapping function */
|
||||||
|
@ -212,7 +212,7 @@ const struct machine_desc * __init setup_machine_fdt(unsigned int dt_phys)
|
|||||||
mdesc_best = &__mach_desc_GENERIC_DT;
|
mdesc_best = &__mach_desc_GENERIC_DT;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!dt_phys || !early_init_dt_scan(phys_to_virt(dt_phys)))
|
if (!dt_phys || !early_init_dt_verify(phys_to_virt(dt_phys)))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
mdesc = of_flat_dt_match_machine(mdesc_best, arch_get_next_mach);
|
mdesc = of_flat_dt_match_machine(mdesc_best, arch_get_next_mach);
|
||||||
@ -237,6 +237,12 @@ const struct machine_desc * __init setup_machine_fdt(unsigned int dt_phys)
|
|||||||
dump_machine_table(); /* does not return */
|
dump_machine_table(); /* does not return */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* We really don't want to do this, but sometimes firmware provides buggy data */
|
||||||
|
if (mdesc->dt_fixup)
|
||||||
|
mdesc->dt_fixup();
|
||||||
|
|
||||||
|
early_init_dt_scan_nodes();
|
||||||
|
|
||||||
/* Change machine number to match the mdesc we're using */
|
/* Change machine number to match the mdesc we're using */
|
||||||
__machine_arch_type = mdesc->nr;
|
__machine_arch_type = mdesc->nr;
|
||||||
|
|
||||||
|
@ -94,13 +94,19 @@ ENTRY(iwmmxt_task_enable)
|
|||||||
|
|
||||||
mrc p15, 0, r2, c2, c0, 0
|
mrc p15, 0, r2, c2, c0, 0
|
||||||
mov r2, r2 @ cpwait
|
mov r2, r2 @ cpwait
|
||||||
|
bl concan_save
|
||||||
|
|
||||||
teq r1, #0 @ test for last ownership
|
#ifdef CONFIG_PREEMPT_COUNT
|
||||||
mov lr, r9 @ normal exit from exception
|
get_thread_info r10
|
||||||
beq concan_load @ no owner, skip save
|
#endif
|
||||||
|
4: dec_preempt_count r10, r3
|
||||||
|
mov pc, r9 @ normal exit from exception
|
||||||
|
|
||||||
concan_save:
|
concan_save:
|
||||||
|
|
||||||
|
teq r1, #0 @ test for last ownership
|
||||||
|
beq concan_load @ no owner, skip save
|
||||||
|
|
||||||
tmrc r2, wCon
|
tmrc r2, wCon
|
||||||
|
|
||||||
@ CUP? wCx
|
@ CUP? wCx
|
||||||
@ -138,7 +144,7 @@ concan_dump:
|
|||||||
wstrd wR15, [r1, #MMX_WR15]
|
wstrd wR15, [r1, #MMX_WR15]
|
||||||
|
|
||||||
2: teq r0, #0 @ anything to load?
|
2: teq r0, #0 @ anything to load?
|
||||||
beq 3f
|
moveq pc, lr @ if not, return
|
||||||
|
|
||||||
concan_load:
|
concan_load:
|
||||||
|
|
||||||
@ -171,14 +177,9 @@ concan_load:
|
|||||||
@ clear CUP/MUP (only if r1 != 0)
|
@ clear CUP/MUP (only if r1 != 0)
|
||||||
teq r1, #0
|
teq r1, #0
|
||||||
mov r2, #0
|
mov r2, #0
|
||||||
beq 3f
|
moveq pc, lr
|
||||||
tmcr wCon, r2
|
|
||||||
|
|
||||||
3:
|
tmcr wCon, r2
|
||||||
#ifdef CONFIG_PREEMPT_COUNT
|
|
||||||
get_thread_info r10
|
|
||||||
#endif
|
|
||||||
4: dec_preempt_count r10, r3
|
|
||||||
mov pc, lr
|
mov pc, lr
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -160,12 +160,16 @@ static int kgdb_compiled_brk_fn(struct pt_regs *regs, unsigned int instr)
|
|||||||
static struct undef_hook kgdb_brkpt_hook = {
|
static struct undef_hook kgdb_brkpt_hook = {
|
||||||
.instr_mask = 0xffffffff,
|
.instr_mask = 0xffffffff,
|
||||||
.instr_val = KGDB_BREAKINST,
|
.instr_val = KGDB_BREAKINST,
|
||||||
|
.cpsr_mask = MODE_MASK,
|
||||||
|
.cpsr_val = SVC_MODE,
|
||||||
.fn = kgdb_brk_fn
|
.fn = kgdb_brk_fn
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct undef_hook kgdb_compiled_brkpt_hook = {
|
static struct undef_hook kgdb_compiled_brkpt_hook = {
|
||||||
.instr_mask = 0xffffffff,
|
.instr_mask = 0xffffffff,
|
||||||
.instr_val = KGDB_COMPILED_BREAK,
|
.instr_val = KGDB_COMPILED_BREAK,
|
||||||
|
.cpsr_mask = MODE_MASK,
|
||||||
|
.cpsr_val = SVC_MODE,
|
||||||
.fn = kgdb_compiled_brk_fn
|
.fn = kgdb_compiled_brk_fn
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
};
|
};
|
||||||
|
@ -275,7 +275,7 @@ void store_cpu_topology(unsigned int cpuid)
|
|||||||
cpu_topology[cpuid].socket_id, mpidr);
|
cpu_topology[cpuid].socket_id, mpidr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline const int cpu_corepower_flags(void)
|
static inline int cpu_corepower_flags(void)
|
||||||
{
|
{
|
||||||
return SD_SHARE_PKG_RESOURCES | SD_SHARE_POWERDOMAIN;
|
return SD_SHARE_PKG_RESOURCES | SD_SHARE_POWERDOMAIN;
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
@ -337,6 +335,15 @@ static void __init exynos_reserve(void)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void __init exynos_dt_fixup(void)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Some versions of uboot pass garbage entries in the memory node,
|
||||||
|
* use the old CONFIG_ARM_NR_BANKS
|
||||||
|
*/
|
||||||
|
of_fdt_limit_memory(8);
|
||||||
|
}
|
||||||
|
|
||||||
DT_MACHINE_START(EXYNOS_DT, "SAMSUNG EXYNOS (Flattened Device Tree)")
|
DT_MACHINE_START(EXYNOS_DT, "SAMSUNG EXYNOS (Flattened Device Tree)")
|
||||||
/* Maintainer: Thomas Abraham <thomas.abraham@linaro.org> */
|
/* Maintainer: Thomas Abraham <thomas.abraham@linaro.org> */
|
||||||
/* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */
|
/* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */
|
||||||
@ -350,4 +357,5 @@ DT_MACHINE_START(EXYNOS_DT, "SAMSUNG EXYNOS (Flattened Device Tree)")
|
|||||||
.dt_compat = exynos_dt_compat,
|
.dt_compat = exynos_dt_compat,
|
||||||
.restart = exynos_restart,
|
.restart = exynos_restart,
|
||||||
.reserve = exynos_reserve,
|
.reserve = exynos_reserve,
|
||||||
|
.dt_fixup = exynos_dt_fixup,
|
||||||
MACHINE_END
|
MACHINE_END
|
||||||
|
@ -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;
|
||||||
|
@ -40,15 +40,17 @@ static inline void cpu_leave_lowpower(void)
|
|||||||
|
|
||||||
static inline void platform_do_lowpower(unsigned int cpu, int *spurious)
|
static inline void platform_do_lowpower(unsigned int cpu, int *spurious)
|
||||||
{
|
{
|
||||||
|
u32 mpidr = cpu_logical_map(cpu);
|
||||||
|
u32 core_id = MPIDR_AFFINITY_LEVEL(mpidr, 0);
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
|
||||||
/* make cpu1 to be turned off at next WFI command */
|
/* Turn the CPU off on next WFI instruction. */
|
||||||
if (cpu == 1)
|
exynos_cpu_power_down(core_id);
|
||||||
exynos_cpu_power_down(cpu);
|
|
||||||
|
|
||||||
wfi();
|
wfi();
|
||||||
|
|
||||||
if (pen_release == cpu_logical_map(cpu)) {
|
if (pen_release == core_id) {
|
||||||
/*
|
/*
|
||||||
* OK, proper wakeup, we're done
|
* OK, proper wakeup, we're done
|
||||||
*/
|
*/
|
||||||
|
@ -90,7 +90,8 @@ static void exynos_secondary_init(unsigned int cpu)
|
|||||||
static int exynos_boot_secondary(unsigned int cpu, struct task_struct *idle)
|
static int exynos_boot_secondary(unsigned int cpu, struct task_struct *idle)
|
||||||
{
|
{
|
||||||
unsigned long timeout;
|
unsigned long timeout;
|
||||||
unsigned long phys_cpu = cpu_logical_map(cpu);
|
u32 mpidr = cpu_logical_map(cpu);
|
||||||
|
u32 core_id = MPIDR_AFFINITY_LEVEL(mpidr, 0);
|
||||||
int ret = -ENOSYS;
|
int ret = -ENOSYS;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -104,17 +105,18 @@ static int exynos_boot_secondary(unsigned int cpu, struct task_struct *idle)
|
|||||||
* the holding pen - release it, then wait for it to flag
|
* the holding pen - release it, then wait for it to flag
|
||||||
* that it has been released by resetting pen_release.
|
* that it has been released by resetting pen_release.
|
||||||
*
|
*
|
||||||
* Note that "pen_release" is the hardware CPU ID, whereas
|
* Note that "pen_release" is the hardware CPU core ID, whereas
|
||||||
* "cpu" is Linux's internal ID.
|
* "cpu" is Linux's internal ID.
|
||||||
*/
|
*/
|
||||||
write_pen_release(phys_cpu);
|
write_pen_release(core_id);
|
||||||
|
|
||||||
if (!exynos_cpu_power_state(cpu)) {
|
if (!exynos_cpu_power_state(core_id)) {
|
||||||
exynos_cpu_power_up(cpu);
|
exynos_cpu_power_up(core_id);
|
||||||
timeout = 10;
|
timeout = 10;
|
||||||
|
|
||||||
/* wait max 10 ms until cpu1 is on */
|
/* wait max 10 ms until cpu1 is on */
|
||||||
while (exynos_cpu_power_state(cpu) != S5P_CORE_LOCAL_PWR_EN) {
|
while (exynos_cpu_power_state(core_id)
|
||||||
|
!= S5P_CORE_LOCAL_PWR_EN) {
|
||||||
if (timeout-- == 0)
|
if (timeout-- == 0)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -145,20 +147,20 @@ static int exynos_boot_secondary(unsigned int cpu, struct task_struct *idle)
|
|||||||
* Try to set boot address using firmware first
|
* Try to set boot address using firmware first
|
||||||
* and fall back to boot register if it fails.
|
* and fall back to boot register if it fails.
|
||||||
*/
|
*/
|
||||||
ret = call_firmware_op(set_cpu_boot_addr, phys_cpu, boot_addr);
|
ret = call_firmware_op(set_cpu_boot_addr, core_id, boot_addr);
|
||||||
if (ret && ret != -ENOSYS)
|
if (ret && ret != -ENOSYS)
|
||||||
goto fail;
|
goto fail;
|
||||||
if (ret == -ENOSYS) {
|
if (ret == -ENOSYS) {
|
||||||
void __iomem *boot_reg = cpu_boot_reg(phys_cpu);
|
void __iomem *boot_reg = cpu_boot_reg(core_id);
|
||||||
|
|
||||||
if (IS_ERR(boot_reg)) {
|
if (IS_ERR(boot_reg)) {
|
||||||
ret = PTR_ERR(boot_reg);
|
ret = PTR_ERR(boot_reg);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
__raw_writel(boot_addr, cpu_boot_reg(phys_cpu));
|
__raw_writel(boot_addr, cpu_boot_reg(core_id));
|
||||||
}
|
}
|
||||||
|
|
||||||
call_firmware_op(cpu_boot, phys_cpu);
|
call_firmware_op(cpu_boot, core_id);
|
||||||
|
|
||||||
arch_send_wakeup_ipi_mask(cpumask_of(cpu));
|
arch_send_wakeup_ipi_mask(cpumask_of(cpu));
|
||||||
|
|
||||||
@ -227,22 +229,24 @@ static void __init exynos_smp_prepare_cpus(unsigned int max_cpus)
|
|||||||
* boot register if it fails.
|
* boot register if it fails.
|
||||||
*/
|
*/
|
||||||
for (i = 1; i < max_cpus; ++i) {
|
for (i = 1; i < max_cpus; ++i) {
|
||||||
unsigned long phys_cpu;
|
|
||||||
unsigned long boot_addr;
|
unsigned long boot_addr;
|
||||||
|
u32 mpidr;
|
||||||
|
u32 core_id;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
phys_cpu = cpu_logical_map(i);
|
mpidr = cpu_logical_map(i);
|
||||||
|
core_id = MPIDR_AFFINITY_LEVEL(mpidr, 0);
|
||||||
boot_addr = virt_to_phys(exynos4_secondary_startup);
|
boot_addr = virt_to_phys(exynos4_secondary_startup);
|
||||||
|
|
||||||
ret = call_firmware_op(set_cpu_boot_addr, phys_cpu, boot_addr);
|
ret = call_firmware_op(set_cpu_boot_addr, core_id, boot_addr);
|
||||||
if (ret && ret != -ENOSYS)
|
if (ret && ret != -ENOSYS)
|
||||||
break;
|
break;
|
||||||
if (ret == -ENOSYS) {
|
if (ret == -ENOSYS) {
|
||||||
void __iomem *boot_reg = cpu_boot_reg(phys_cpu);
|
void __iomem *boot_reg = cpu_boot_reg(core_id);
|
||||||
|
|
||||||
if (IS_ERR(boot_reg))
|
if (IS_ERR(boot_reg))
|
||||||
break;
|
break;
|
||||||
__raw_writel(boot_addr, cpu_boot_reg(phys_cpu));
|
__raw_writel(boot_addr, cpu_boot_reg(core_id));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -70,7 +70,7 @@ static const char *cko_sels[] = { "cko1", "cko2", };
|
|||||||
static const char *lvds_sels[] = {
|
static const char *lvds_sels[] = {
|
||||||
"dummy", "dummy", "dummy", "dummy", "dummy", "dummy",
|
"dummy", "dummy", "dummy", "dummy", "dummy", "dummy",
|
||||||
"pll4_audio", "pll5_video", "pll8_mlb", "enet_ref",
|
"pll4_audio", "pll5_video", "pll8_mlb", "enet_ref",
|
||||||
"pcie_ref", "sata_ref",
|
"pcie_ref_125m", "sata_ref_100m",
|
||||||
};
|
};
|
||||||
|
|
||||||
enum mx6q_clks {
|
enum mx6q_clks {
|
||||||
@ -491,7 +491,7 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node)
|
|||||||
|
|
||||||
/* All existing boards with PCIe use LVDS1 */
|
/* All existing boards with PCIe use LVDS1 */
|
||||||
if (IS_ENABLED(CONFIG_PCI_IMX6))
|
if (IS_ENABLED(CONFIG_PCI_IMX6))
|
||||||
clk_set_parent(clk[lvds1_sel], clk[sata_ref]);
|
clk_set_parent(clk[lvds1_sel], clk[sata_ref_100m]);
|
||||||
|
|
||||||
/* Set initial power mode */
|
/* Set initial power mode */
|
||||||
imx6q_set_lpm(WAIT_CLOCKED);
|
imx6q_set_lpm(WAIT_CLOCKED);
|
||||||
|
@ -292,6 +292,10 @@ static struct notifier_block mvebu_hwcc_nb = {
|
|||||||
.notifier_call = mvebu_hwcc_notifier,
|
.notifier_call = mvebu_hwcc_notifier,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct notifier_block mvebu_hwcc_pci_nb = {
|
||||||
|
.notifier_call = mvebu_hwcc_notifier,
|
||||||
|
};
|
||||||
|
|
||||||
static void __init armada_370_coherency_init(struct device_node *np)
|
static void __init armada_370_coherency_init(struct device_node *np)
|
||||||
{
|
{
|
||||||
struct resource res;
|
struct resource res;
|
||||||
@ -427,7 +431,7 @@ static int __init coherency_pci_init(void)
|
|||||||
{
|
{
|
||||||
if (coherency_available())
|
if (coherency_available())
|
||||||
bus_register_notifier(&pci_bus_type,
|
bus_register_notifier(&pci_bus_type,
|
||||||
&mvebu_hwcc_nb);
|
&mvebu_hwcc_pci_nb);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,6 +15,8 @@
|
|||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
|
|
||||||
|
#include <asm/assembler.h>
|
||||||
|
|
||||||
__CPUINIT
|
__CPUINIT
|
||||||
#define CPU_RESUME_ADDR_REG 0xf10182d4
|
#define CPU_RESUME_ADDR_REG 0xf10182d4
|
||||||
|
|
||||||
@ -22,13 +24,18 @@
|
|||||||
.global armada_375_smp_cpu1_enable_code_end
|
.global armada_375_smp_cpu1_enable_code_end
|
||||||
|
|
||||||
armada_375_smp_cpu1_enable_code_start:
|
armada_375_smp_cpu1_enable_code_start:
|
||||||
ldr r0, [pc, #4]
|
ARM_BE8(setend be)
|
||||||
|
adr r0, 1f
|
||||||
|
ldr r0, [r0]
|
||||||
ldr r1, [r0]
|
ldr r1, [r0]
|
||||||
|
ARM_BE8(rev r1, r1)
|
||||||
mov pc, r1
|
mov pc, r1
|
||||||
|
1:
|
||||||
.word CPU_RESUME_ADDR_REG
|
.word CPU_RESUME_ADDR_REG
|
||||||
armada_375_smp_cpu1_enable_code_end:
|
armada_375_smp_cpu1_enable_code_end:
|
||||||
|
|
||||||
ENTRY(mvebu_cortex_a9_secondary_startup)
|
ENTRY(mvebu_cortex_a9_secondary_startup)
|
||||||
|
ARM_BE8(setend be)
|
||||||
bl v7_invalidate_l1
|
bl v7_invalidate_l1
|
||||||
b secondary_startup
|
b secondary_startup
|
||||||
ENDPROC(mvebu_cortex_a9_secondary_startup)
|
ENDPROC(mvebu_cortex_a9_secondary_startup)
|
||||||
|
@ -201,12 +201,12 @@ static noinline int do_armada_370_xp_cpu_suspend(unsigned long deepidle)
|
|||||||
|
|
||||||
/* Test the CR_C bit and set it if it was cleared */
|
/* Test the CR_C bit and set it if it was cleared */
|
||||||
asm volatile(
|
asm volatile(
|
||||||
"mrc p15, 0, %0, c1, c0, 0 \n\t"
|
"mrc p15, 0, r0, c1, c0, 0 \n\t"
|
||||||
"tst %0, #(1 << 2) \n\t"
|
"tst r0, #(1 << 2) \n\t"
|
||||||
"orreq %0, %0, #(1 << 2) \n\t"
|
"orreq r0, r0, #(1 << 2) \n\t"
|
||||||
"mcreq p15, 0, %0, c1, c0, 0 \n\t"
|
"mcreq p15, 0, r0, c1, c0, 0 \n\t"
|
||||||
"isb "
|
"isb "
|
||||||
: : "r" (0));
|
: : : "r0");
|
||||||
|
|
||||||
pr_warn("Failed to suspend the system\n");
|
pr_warn("Failed to suspend the system\n");
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@
|
|||||||
* (assuming that it is counting N upwards), or -2 if the enclosing loop
|
* (assuming that it is counting N upwards), or -2 if the enclosing loop
|
||||||
* should skip to the next iteration (again assuming N is increasing).
|
* should skip to the next iteration (again assuming N is increasing).
|
||||||
*/
|
*/
|
||||||
static int _dpll_test_fint(struct clk_hw_omap *clk, u8 n)
|
static int _dpll_test_fint(struct clk_hw_omap *clk, unsigned int n)
|
||||||
{
|
{
|
||||||
struct dpll_data *dd;
|
struct dpll_data *dd;
|
||||||
long fint, fint_min, fint_max;
|
long fint, fint_min, fint_max;
|
||||||
|
@ -26,11 +26,14 @@
|
|||||||
#define OMAP3430_EN_WDT3_SHIFT 12
|
#define OMAP3430_EN_WDT3_SHIFT 12
|
||||||
#define OMAP3430_CM_FCLKEN_IVA2_EN_IVA2_MASK (1 << 0)
|
#define OMAP3430_CM_FCLKEN_IVA2_EN_IVA2_MASK (1 << 0)
|
||||||
#define OMAP3430_CM_FCLKEN_IVA2_EN_IVA2_SHIFT 0
|
#define OMAP3430_CM_FCLKEN_IVA2_EN_IVA2_SHIFT 0
|
||||||
|
#define OMAP3430_IVA2_DPLL_FREQSEL_SHIFT 4
|
||||||
#define OMAP3430_IVA2_DPLL_FREQSEL_MASK (0xf << 4)
|
#define OMAP3430_IVA2_DPLL_FREQSEL_MASK (0xf << 4)
|
||||||
#define OMAP3430_EN_IVA2_DPLL_DRIFTGUARD_SHIFT 3
|
#define OMAP3430_EN_IVA2_DPLL_DRIFTGUARD_SHIFT 3
|
||||||
|
#define OMAP3430_EN_IVA2_DPLL_SHIFT 0
|
||||||
#define OMAP3430_EN_IVA2_DPLL_MASK (0x7 << 0)
|
#define OMAP3430_EN_IVA2_DPLL_MASK (0x7 << 0)
|
||||||
#define OMAP3430_ST_IVA2_SHIFT 0
|
#define OMAP3430_ST_IVA2_SHIFT 0
|
||||||
#define OMAP3430_ST_IVA2_CLK_MASK (1 << 0)
|
#define OMAP3430_ST_IVA2_CLK_MASK (1 << 0)
|
||||||
|
#define OMAP3430_AUTO_IVA2_DPLL_SHIFT 0
|
||||||
#define OMAP3430_AUTO_IVA2_DPLL_MASK (0x7 << 0)
|
#define OMAP3430_AUTO_IVA2_DPLL_MASK (0x7 << 0)
|
||||||
#define OMAP3430_IVA2_CLK_SRC_SHIFT 19
|
#define OMAP3430_IVA2_CLK_SRC_SHIFT 19
|
||||||
#define OMAP3430_IVA2_CLK_SRC_WIDTH 3
|
#define OMAP3430_IVA2_CLK_SRC_WIDTH 3
|
||||||
|
@ -162,7 +162,8 @@ static inline void omap3xxx_restart(enum reboot_mode mode, const char *cmd)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5)
|
#if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5) || \
|
||||||
|
defined(CONFIG_SOC_DRA7XX) || defined(CONFIG_SOC_AM43XX)
|
||||||
void omap44xx_restart(enum reboot_mode mode, const char *cmd);
|
void omap44xx_restart(enum reboot_mode mode, const char *cmd);
|
||||||
#else
|
#else
|
||||||
static inline void omap44xx_restart(enum reboot_mode mode, const char *cmd)
|
static inline void omap44xx_restart(enum reboot_mode mode, const char *cmd)
|
||||||
|
@ -297,33 +297,6 @@ static void omap_init_audio(void)
|
|||||||
static inline void omap_init_audio(void) {}
|
static inline void omap_init_audio(void) {}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_SND_OMAP_SOC_OMAP_HDMI) || \
|
|
||||||
defined(CONFIG_SND_OMAP_SOC_OMAP_HDMI_MODULE)
|
|
||||||
|
|
||||||
static struct platform_device omap_hdmi_audio = {
|
|
||||||
.name = "omap-hdmi-audio",
|
|
||||||
.id = -1,
|
|
||||||
};
|
|
||||||
|
|
||||||
static void __init omap_init_hdmi_audio(void)
|
|
||||||
{
|
|
||||||
struct omap_hwmod *oh;
|
|
||||||
struct platform_device *pdev;
|
|
||||||
|
|
||||||
oh = omap_hwmod_lookup("dss_hdmi");
|
|
||||||
if (!oh)
|
|
||||||
return;
|
|
||||||
|
|
||||||
pdev = omap_device_build("omap-hdmi-audio-dai", -1, oh, NULL, 0);
|
|
||||||
WARN(IS_ERR(pdev),
|
|
||||||
"Can't build omap_device for omap-hdmi-audio-dai.\n");
|
|
||||||
|
|
||||||
platform_device_register(&omap_hdmi_audio);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
static inline void omap_init_hdmi_audio(void) {}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(CONFIG_SPI_OMAP24XX) || defined(CONFIG_SPI_OMAP24XX_MODULE)
|
#if defined(CONFIG_SPI_OMAP24XX) || defined(CONFIG_SPI_OMAP24XX_MODULE)
|
||||||
|
|
||||||
#include <linux/platform_data/spi-omap2-mcspi.h>
|
#include <linux/platform_data/spi-omap2-mcspi.h>
|
||||||
@ -459,7 +432,6 @@ static int __init omap2_init_devices(void)
|
|||||||
*/
|
*/
|
||||||
omap_init_audio();
|
omap_init_audio();
|
||||||
omap_init_camera();
|
omap_init_camera();
|
||||||
omap_init_hdmi_audio();
|
|
||||||
omap_init_mbox();
|
omap_init_mbox();
|
||||||
/* If dtb is there, the devices will be created dynamically */
|
/* If dtb is there, the devices will be created dynamically */
|
||||||
if (!of_have_populated_dt()) {
|
if (!of_have_populated_dt()) {
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
#ifdef CONFIG_TIDSPBRIDGE_DVFS
|
#ifdef CONFIG_TIDSPBRIDGE_DVFS
|
||||||
#include "omap-pm.h"
|
#include "omap-pm.h"
|
||||||
#endif
|
#endif
|
||||||
|
#include "soc.h"
|
||||||
|
|
||||||
#include <linux/platform_data/dsp-omap.h>
|
#include <linux/platform_data/dsp-omap.h>
|
||||||
|
|
||||||
@ -59,6 +60,9 @@ void __init omap_dsp_reserve_sdram_memblock(void)
|
|||||||
phys_addr_t size = CONFIG_TIDSPBRIDGE_MEMPOOL_SIZE;
|
phys_addr_t size = CONFIG_TIDSPBRIDGE_MEMPOOL_SIZE;
|
||||||
phys_addr_t paddr;
|
phys_addr_t paddr;
|
||||||
|
|
||||||
|
if (!cpu_is_omap34xx())
|
||||||
|
return;
|
||||||
|
|
||||||
if (!size)
|
if (!size)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -83,6 +87,9 @@ static int __init omap_dsp_init(void)
|
|||||||
int err = -ENOMEM;
|
int err = -ENOMEM;
|
||||||
struct omap_dsp_platform_data *pdata = &omap_dsp_pdata;
|
struct omap_dsp_platform_data *pdata = &omap_dsp_pdata;
|
||||||
|
|
||||||
|
if (!cpu_is_omap34xx())
|
||||||
|
return 0;
|
||||||
|
|
||||||
pdata->phys_mempool_base = omap_dsp_get_mempool_base();
|
pdata->phys_mempool_base = omap_dsp_get_mempool_base();
|
||||||
|
|
||||||
if (pdata->phys_mempool_base) {
|
if (pdata->phys_mempool_base) {
|
||||||
@ -115,6 +122,9 @@ module_init(omap_dsp_init);
|
|||||||
|
|
||||||
static void __exit omap_dsp_exit(void)
|
static void __exit omap_dsp_exit(void)
|
||||||
{
|
{
|
||||||
|
if (!cpu_is_omap34xx())
|
||||||
|
return;
|
||||||
|
|
||||||
platform_device_unregister(omap_dsp_pdev);
|
platform_device_unregister(omap_dsp_pdev);
|
||||||
}
|
}
|
||||||
module_exit(omap_dsp_exit);
|
module_exit(omap_dsp_exit);
|
||||||
|
@ -50,6 +50,16 @@ static bool gpmc_hwecc_bch_capable(enum omap_ecc ecc_opt)
|
|||||||
soc_is_omap54xx() || soc_is_dra7xx())
|
soc_is_omap54xx() || soc_is_dra7xx())
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
if (ecc_opt == OMAP_ECC_BCH4_CODE_HW_DETECTION_SW ||
|
||||||
|
ecc_opt == OMAP_ECC_BCH8_CODE_HW_DETECTION_SW) {
|
||||||
|
if (cpu_is_omap24xx())
|
||||||
|
return 0;
|
||||||
|
else if (cpu_is_omap3630() && (GET_OMAP_REVISION() == 0))
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* OMAP3xxx do not have ELM engine, so cannot support ECC schemes
|
/* OMAP3xxx do not have ELM engine, so cannot support ECC schemes
|
||||||
* which require H/W based ECC error detection */
|
* which require H/W based ECC error detection */
|
||||||
if ((cpu_is_omap34xx() || cpu_is_omap3630()) &&
|
if ((cpu_is_omap34xx() || cpu_is_omap3630()) &&
|
||||||
@ -57,14 +67,6 @@ static bool gpmc_hwecc_bch_capable(enum omap_ecc ecc_opt)
|
|||||||
(ecc_opt == OMAP_ECC_BCH8_CODE_HW)))
|
(ecc_opt == OMAP_ECC_BCH8_CODE_HW)))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/*
|
|
||||||
* For now, assume 4-bit mode is only supported on OMAP3630 ES1.x, x>=1
|
|
||||||
* and AM33xx derivates. Other chips may be added if confirmed to work.
|
|
||||||
*/
|
|
||||||
if ((ecc_opt == OMAP_ECC_BCH4_CODE_HW_DETECTION_SW) &&
|
|
||||||
(!cpu_is_omap3630() || (GET_OMAP_REVISION() == 0)))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/* legacy platforms support only HAM1 (1-bit Hamming) ECC scheme */
|
/* legacy platforms support only HAM1 (1-bit Hamming) ECC scheme */
|
||||||
if (ecc_opt == OMAP_ECC_HAM1_CODE_HW)
|
if (ecc_opt == OMAP_ECC_HAM1_CODE_HW)
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -1615,7 +1615,7 @@ static int gpmc_probe_dt(struct platform_device *pdev)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
for_each_child_of_node(pdev->dev.of_node, child) {
|
for_each_available_child_of_node(pdev->dev.of_node, child) {
|
||||||
|
|
||||||
if (!child->name)
|
if (!child->name)
|
||||||
continue;
|
continue;
|
||||||
|
@ -168,6 +168,10 @@ static void omap4_l2c310_write_sec(unsigned long val, unsigned reg)
|
|||||||
smc_op = OMAP4_MON_L2X0_PREFETCH_INDEX;
|
smc_op = OMAP4_MON_L2X0_PREFETCH_INDEX;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case L310_POWER_CTRL:
|
||||||
|
pr_info_once("OMAP L2C310: ROM does not support power control setting\n");
|
||||||
|
return;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
WARN_ONCE(1, "OMAP L2C310: ignoring write to reg 0x%x\n", reg);
|
WARN_ONCE(1, "OMAP L2C310: ignoring write to reg 0x%x\n", reg);
|
||||||
return;
|
return;
|
||||||
|
@ -1268,9 +1268,6 @@ static struct omap_hwmod_class dra7xx_sata_hwmod_class = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* sata */
|
/* sata */
|
||||||
static struct omap_hwmod_opt_clk sata_opt_clks[] = {
|
|
||||||
{ .role = "ref_clk", .clk = "sata_ref_clk" },
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct omap_hwmod dra7xx_sata_hwmod = {
|
static struct omap_hwmod dra7xx_sata_hwmod = {
|
||||||
.name = "sata",
|
.name = "sata",
|
||||||
@ -1278,6 +1275,7 @@ static struct omap_hwmod dra7xx_sata_hwmod = {
|
|||||||
.clkdm_name = "l3init_clkdm",
|
.clkdm_name = "l3init_clkdm",
|
||||||
.flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
|
.flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
|
||||||
.main_clk = "func_48m_fclk",
|
.main_clk = "func_48m_fclk",
|
||||||
|
.mpu_rt_idx = 1,
|
||||||
.prcm = {
|
.prcm = {
|
||||||
.omap4 = {
|
.omap4 = {
|
||||||
.clkctrl_offs = DRA7XX_CM_L3INIT_SATA_CLKCTRL_OFFSET,
|
.clkctrl_offs = DRA7XX_CM_L3INIT_SATA_CLKCTRL_OFFSET,
|
||||||
@ -1285,8 +1283,6 @@ static struct omap_hwmod dra7xx_sata_hwmod = {
|
|||||||
.modulemode = MODULEMODE_SWCTRL,
|
.modulemode = MODULEMODE_SWCTRL,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
.opt_clks = sata_opt_clks,
|
|
||||||
.opt_clks_cnt = ARRAY_SIZE(sata_opt_clks),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1731,8 +1727,20 @@ static struct omap_hwmod dra7xx_uart6_hwmod = {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
static struct omap_hwmod_class_sysconfig dra7xx_usb_otg_ss_sysc = {
|
||||||
|
.rev_offs = 0x0000,
|
||||||
|
.sysc_offs = 0x0010,
|
||||||
|
.sysc_flags = (SYSC_HAS_DMADISABLE | SYSC_HAS_MIDLEMODE |
|
||||||
|
SYSC_HAS_SIDLEMODE),
|
||||||
|
.idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
|
||||||
|
SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
|
||||||
|
MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
|
||||||
|
.sysc_fields = &omap_hwmod_sysc_type2,
|
||||||
|
};
|
||||||
|
|
||||||
static struct omap_hwmod_class dra7xx_usb_otg_ss_hwmod_class = {
|
static struct omap_hwmod_class dra7xx_usb_otg_ss_hwmod_class = {
|
||||||
.name = "usb_otg_ss",
|
.name = "usb_otg_ss",
|
||||||
|
.sysc = &dra7xx_usb_otg_ss_sysc,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* usb_otg_ss1 */
|
/* usb_otg_ss1 */
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
#define OMAP3430_LOGICSTATEST_MASK (1 << 2)
|
#define OMAP3430_LOGICSTATEST_MASK (1 << 2)
|
||||||
#define OMAP3430_LASTLOGICSTATEENTERED_MASK (1 << 2)
|
#define OMAP3430_LASTLOGICSTATEENTERED_MASK (1 << 2)
|
||||||
#define OMAP3430_LASTPOWERSTATEENTERED_MASK (0x3 << 0)
|
#define OMAP3430_LASTPOWERSTATEENTERED_MASK (0x3 << 0)
|
||||||
|
#define OMAP3430_GRPSEL_MCBSP5_MASK (1 << 10)
|
||||||
|
#define OMAP3430_GRPSEL_MCBSP1_MASK (1 << 9)
|
||||||
#define OMAP3630_GRPSEL_UART4_MASK (1 << 18)
|
#define OMAP3630_GRPSEL_UART4_MASK (1 << 18)
|
||||||
#define OMAP3430_GRPSEL_GPIO6_MASK (1 << 17)
|
#define OMAP3430_GRPSEL_GPIO6_MASK (1 << 17)
|
||||||
#define OMAP3430_GRPSEL_GPIO5_MASK (1 << 16)
|
#define OMAP3430_GRPSEL_GPIO5_MASK (1 << 16)
|
||||||
@ -42,6 +44,10 @@
|
|||||||
#define OMAP3430_GRPSEL_GPIO3_MASK (1 << 14)
|
#define OMAP3430_GRPSEL_GPIO3_MASK (1 << 14)
|
||||||
#define OMAP3430_GRPSEL_GPIO2_MASK (1 << 13)
|
#define OMAP3430_GRPSEL_GPIO2_MASK (1 << 13)
|
||||||
#define OMAP3430_GRPSEL_UART3_MASK (1 << 11)
|
#define OMAP3430_GRPSEL_UART3_MASK (1 << 11)
|
||||||
|
#define OMAP3430_GRPSEL_GPT8_MASK (1 << 9)
|
||||||
|
#define OMAP3430_GRPSEL_GPT7_MASK (1 << 8)
|
||||||
|
#define OMAP3430_GRPSEL_GPT6_MASK (1 << 7)
|
||||||
|
#define OMAP3430_GRPSEL_GPT5_MASK (1 << 6)
|
||||||
#define OMAP3430_GRPSEL_MCBSP4_MASK (1 << 2)
|
#define OMAP3430_GRPSEL_MCBSP4_MASK (1 << 2)
|
||||||
#define OMAP3430_GRPSEL_MCBSP3_MASK (1 << 1)
|
#define OMAP3430_GRPSEL_MCBSP3_MASK (1 << 1)
|
||||||
#define OMAP3430_GRPSEL_MCBSP2_MASK (1 << 0)
|
#define OMAP3430_GRPSEL_MCBSP2_MASK (1 << 0)
|
||||||
|
@ -664,7 +664,7 @@ static int l2c310_cpu_enable_flz(struct notifier_block *nb, unsigned long act, v
|
|||||||
|
|
||||||
static void __init l2c310_enable(void __iomem *base, u32 aux, unsigned num_lock)
|
static void __init l2c310_enable(void __iomem *base, u32 aux, unsigned num_lock)
|
||||||
{
|
{
|
||||||
unsigned rev = readl_relaxed(base + L2X0_CACHE_ID) & L2X0_CACHE_ID_PART_MASK;
|
unsigned rev = readl_relaxed(base + L2X0_CACHE_ID) & L2X0_CACHE_ID_RTL_MASK;
|
||||||
bool cortex_a9 = read_cpuid_part_number() == ARM_CPU_PART_CORTEX_A9;
|
bool cortex_a9 = read_cpuid_part_number() == ARM_CPU_PART_CORTEX_A9;
|
||||||
|
|
||||||
if (rev >= L310_CACHE_ID_RTL_R2P0) {
|
if (rev >= L310_CACHE_ID_RTL_R2P0) {
|
||||||
|
@ -461,12 +461,21 @@ void __init dma_contiguous_remap(void)
|
|||||||
map.type = MT_MEMORY_DMA_READY;
|
map.type = MT_MEMORY_DMA_READY;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Clear previous low-memory mapping
|
* Clear previous low-memory mapping to ensure that the
|
||||||
|
* TLB does not see any conflicting entries, then flush
|
||||||
|
* the TLB of the old entries before creating new mappings.
|
||||||
|
*
|
||||||
|
* This ensures that any speculatively loaded TLB entries
|
||||||
|
* (even though they may be rare) can not cause any problems,
|
||||||
|
* and ensures that this code is architecturally compliant.
|
||||||
*/
|
*/
|
||||||
for (addr = __phys_to_virt(start); addr < __phys_to_virt(end);
|
for (addr = __phys_to_virt(start); addr < __phys_to_virt(end);
|
||||||
addr += PMD_SIZE)
|
addr += PMD_SIZE)
|
||||||
pmd_clear(pmd_off_k(addr));
|
pmd_clear(pmd_off_k(addr));
|
||||||
|
|
||||||
|
flush_tlb_kernel_range(__phys_to_virt(start),
|
||||||
|
__phys_to_virt(end));
|
||||||
|
|
||||||
iotable_init(&map, 1);
|
iotable_init(&map, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,11 @@
|
|||||||
#include <asm/sections.h>
|
#include <asm/sections.h>
|
||||||
#include <asm/system_info.h>
|
#include <asm/system_info.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Note: accesses outside of the kernel image and the identity map area
|
||||||
|
* are not supported on any CPU using the idmap tables as its current
|
||||||
|
* page tables.
|
||||||
|
*/
|
||||||
pgd_t *idmap_pgd;
|
pgd_t *idmap_pgd;
|
||||||
phys_addr_t (*arch_virt_to_idmap) (unsigned long x);
|
phys_addr_t (*arch_virt_to_idmap) (unsigned long x);
|
||||||
|
|
||||||
@ -25,6 +30,13 @@ static void idmap_add_pmd(pud_t *pud, unsigned long addr, unsigned long end,
|
|||||||
pr_warning("Failed to allocate identity pmd.\n");
|
pr_warning("Failed to allocate identity pmd.\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
* Copy the original PMD to ensure that the PMD entries for
|
||||||
|
* the kernel image are preserved.
|
||||||
|
*/
|
||||||
|
if (!pud_none(*pud))
|
||||||
|
memcpy(pmd, pmd_offset(pud, 0),
|
||||||
|
PTRS_PER_PMD * sizeof(pmd_t));
|
||||||
pud_populate(&init_mm, pud, pmd);
|
pud_populate(&init_mm, pud, pmd);
|
||||||
pmd += pmd_index(addr);
|
pmd += pmd_index(addr);
|
||||||
} else
|
} else
|
||||||
|
@ -1406,8 +1406,8 @@ void __init early_paging_init(const struct machine_desc *mdesc,
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
/* remap kernel code and data */
|
/* remap kernel code and data */
|
||||||
map_start = init_mm.start_code;
|
map_start = init_mm.start_code & PMD_MASK;
|
||||||
map_end = init_mm.brk;
|
map_end = ALIGN(init_mm.brk, PMD_SIZE);
|
||||||
|
|
||||||
/* get a handle on things... */
|
/* get a handle on things... */
|
||||||
pgd0 = pgd_offset_k(0);
|
pgd0 = pgd_offset_k(0);
|
||||||
@ -1442,7 +1442,7 @@ void __init early_paging_init(const struct machine_desc *mdesc,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* remap pmds for kernel mapping */
|
/* remap pmds for kernel mapping */
|
||||||
phys = __pa(map_start) & PMD_MASK;
|
phys = __pa(map_start);
|
||||||
do {
|
do {
|
||||||
*pmdk++ = __pmd(phys | pmdprot);
|
*pmdk++ = __pmd(phys | pmdprot);
|
||||||
phys += PMD_SIZE;
|
phys += PMD_SIZE;
|
||||||
|
@ -51,3 +51,8 @@ int arch_gnttab_map_status(uint64_t *frames, unsigned long nr_gframes,
|
|||||||
{
|
{
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int arch_gnttab_init(unsigned long nr_shared, unsigned long nr_status)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@ -4,6 +4,7 @@ config ARM64
|
|||||||
select ARCH_HAS_OPP
|
select ARCH_HAS_OPP
|
||||||
select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
|
select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
|
||||||
select ARCH_USE_CMPXCHG_LOCKREF
|
select ARCH_USE_CMPXCHG_LOCKREF
|
||||||
|
select ARCH_SUPPORTS_ATOMIC_RMW
|
||||||
select ARCH_WANT_OPTIONAL_GPIOLIB
|
select ARCH_WANT_OPTIONAL_GPIOLIB
|
||||||
select ARCH_WANT_COMPAT_IPC_PARSE_VERSION
|
select ARCH_WANT_COMPAT_IPC_PARSE_VERSION
|
||||||
select ARCH_WANT_FRAME_POINTERS
|
select ARCH_WANT_FRAME_POINTERS
|
||||||
|
@ -106,7 +106,7 @@ static int ecb_encrypt(struct blkcipher_desc *desc, struct scatterlist *dst,
|
|||||||
for (first = 1; (blocks = (walk.nbytes / AES_BLOCK_SIZE)); first = 0) {
|
for (first = 1; (blocks = (walk.nbytes / AES_BLOCK_SIZE)); first = 0) {
|
||||||
aes_ecb_encrypt(walk.dst.virt.addr, walk.src.virt.addr,
|
aes_ecb_encrypt(walk.dst.virt.addr, walk.src.virt.addr,
|
||||||
(u8 *)ctx->key_enc, rounds, blocks, first);
|
(u8 *)ctx->key_enc, rounds, blocks, first);
|
||||||
err = blkcipher_walk_done(desc, &walk, 0);
|
err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE);
|
||||||
}
|
}
|
||||||
kernel_neon_end();
|
kernel_neon_end();
|
||||||
return err;
|
return err;
|
||||||
@ -128,7 +128,7 @@ static int ecb_decrypt(struct blkcipher_desc *desc, struct scatterlist *dst,
|
|||||||
for (first = 1; (blocks = (walk.nbytes / AES_BLOCK_SIZE)); first = 0) {
|
for (first = 1; (blocks = (walk.nbytes / AES_BLOCK_SIZE)); first = 0) {
|
||||||
aes_ecb_decrypt(walk.dst.virt.addr, walk.src.virt.addr,
|
aes_ecb_decrypt(walk.dst.virt.addr, walk.src.virt.addr,
|
||||||
(u8 *)ctx->key_dec, rounds, blocks, first);
|
(u8 *)ctx->key_dec, rounds, blocks, first);
|
||||||
err = blkcipher_walk_done(desc, &walk, 0);
|
err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE);
|
||||||
}
|
}
|
||||||
kernel_neon_end();
|
kernel_neon_end();
|
||||||
return err;
|
return err;
|
||||||
@ -151,7 +151,7 @@ static int cbc_encrypt(struct blkcipher_desc *desc, struct scatterlist *dst,
|
|||||||
aes_cbc_encrypt(walk.dst.virt.addr, walk.src.virt.addr,
|
aes_cbc_encrypt(walk.dst.virt.addr, walk.src.virt.addr,
|
||||||
(u8 *)ctx->key_enc, rounds, blocks, walk.iv,
|
(u8 *)ctx->key_enc, rounds, blocks, walk.iv,
|
||||||
first);
|
first);
|
||||||
err = blkcipher_walk_done(desc, &walk, 0);
|
err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE);
|
||||||
}
|
}
|
||||||
kernel_neon_end();
|
kernel_neon_end();
|
||||||
return err;
|
return err;
|
||||||
@ -174,7 +174,7 @@ static int cbc_decrypt(struct blkcipher_desc *desc, struct scatterlist *dst,
|
|||||||
aes_cbc_decrypt(walk.dst.virt.addr, walk.src.virt.addr,
|
aes_cbc_decrypt(walk.dst.virt.addr, walk.src.virt.addr,
|
||||||
(u8 *)ctx->key_dec, rounds, blocks, walk.iv,
|
(u8 *)ctx->key_dec, rounds, blocks, walk.iv,
|
||||||
first);
|
first);
|
||||||
err = blkcipher_walk_done(desc, &walk, 0);
|
err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE);
|
||||||
}
|
}
|
||||||
kernel_neon_end();
|
kernel_neon_end();
|
||||||
return err;
|
return err;
|
||||||
@ -243,7 +243,7 @@ static int xts_encrypt(struct blkcipher_desc *desc, struct scatterlist *dst,
|
|||||||
aes_xts_encrypt(walk.dst.virt.addr, walk.src.virt.addr,
|
aes_xts_encrypt(walk.dst.virt.addr, walk.src.virt.addr,
|
||||||
(u8 *)ctx->key1.key_enc, rounds, blocks,
|
(u8 *)ctx->key1.key_enc, rounds, blocks,
|
||||||
(u8 *)ctx->key2.key_enc, walk.iv, first);
|
(u8 *)ctx->key2.key_enc, walk.iv, first);
|
||||||
err = blkcipher_walk_done(desc, &walk, 0);
|
err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE);
|
||||||
}
|
}
|
||||||
kernel_neon_end();
|
kernel_neon_end();
|
||||||
|
|
||||||
@ -267,7 +267,7 @@ static int xts_decrypt(struct blkcipher_desc *desc, struct scatterlist *dst,
|
|||||||
aes_xts_decrypt(walk.dst.virt.addr, walk.src.virt.addr,
|
aes_xts_decrypt(walk.dst.virt.addr, walk.src.virt.addr,
|
||||||
(u8 *)ctx->key1.key_dec, rounds, blocks,
|
(u8 *)ctx->key1.key_dec, rounds, blocks,
|
||||||
(u8 *)ctx->key2.key_enc, walk.iv, first);
|
(u8 *)ctx->key2.key_enc, walk.iv, first);
|
||||||
err = blkcipher_walk_done(desc, &walk, 0);
|
err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE);
|
||||||
}
|
}
|
||||||
kernel_neon_end();
|
kernel_neon_end();
|
||||||
|
|
||||||
|
@ -56,6 +56,8 @@
|
|||||||
#define TASK_SIZE_32 UL(0x100000000)
|
#define TASK_SIZE_32 UL(0x100000000)
|
||||||
#define TASK_SIZE (test_thread_flag(TIF_32BIT) ? \
|
#define TASK_SIZE (test_thread_flag(TIF_32BIT) ? \
|
||||||
TASK_SIZE_32 : TASK_SIZE_64)
|
TASK_SIZE_32 : TASK_SIZE_64)
|
||||||
|
#define TASK_SIZE_OF(tsk) (test_tsk_thread_flag(tsk, TIF_32BIT) ? \
|
||||||
|
TASK_SIZE_32 : TASK_SIZE_64)
|
||||||
#else
|
#else
|
||||||
#define TASK_SIZE TASK_SIZE_64
|
#define TASK_SIZE TASK_SIZE_64
|
||||||
#endif /* CONFIG_COMPAT */
|
#endif /* CONFIG_COMPAT */
|
||||||
|
@ -12,8 +12,6 @@
|
|||||||
#include <linux/efi.h>
|
#include <linux/efi.h>
|
||||||
#include <linux/libfdt.h>
|
#include <linux/libfdt.h>
|
||||||
#include <asm/sections.h>
|
#include <asm/sections.h>
|
||||||
#include <generated/compile.h>
|
|
||||||
#include <generated/utsrelease.h>
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* AArch64 requires the DTB to be 8-byte aligned in the first 512MiB from
|
* AArch64 requires the DTB to be 8-byte aligned in the first 512MiB from
|
||||||
|
@ -27,8 +27,10 @@ void __cpu_copy_user_page(void *kto, const void *kfrom, unsigned long vaddr)
|
|||||||
copy_page(kto, kfrom);
|
copy_page(kto, kfrom);
|
||||||
__flush_dcache_area(kto, PAGE_SIZE);
|
__flush_dcache_area(kto, PAGE_SIZE);
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(__cpu_copy_user_page);
|
||||||
|
|
||||||
void __cpu_clear_user_page(void *kaddr, unsigned long vaddr)
|
void __cpu_clear_user_page(void *kaddr, unsigned long vaddr)
|
||||||
{
|
{
|
||||||
clear_page(kaddr);
|
clear_page(kaddr);
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(__cpu_clear_user_page);
|
||||||
|
@ -60,6 +60,17 @@ static int __init early_initrd(char *p)
|
|||||||
early_param("initrd", early_initrd);
|
early_param("initrd", early_initrd);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return the maximum physical address for ZONE_DMA (DMA_BIT_MASK(32)). It
|
||||||
|
* currently assumes that for memory starting above 4G, 32-bit devices will
|
||||||
|
* use a DMA offset.
|
||||||
|
*/
|
||||||
|
static phys_addr_t max_zone_dma_phys(void)
|
||||||
|
{
|
||||||
|
phys_addr_t offset = memblock_start_of_DRAM() & GENMASK_ULL(63, 32);
|
||||||
|
return min(offset + (1ULL << 32), memblock_end_of_DRAM());
|
||||||
|
}
|
||||||
|
|
||||||
static void __init zone_sizes_init(unsigned long min, unsigned long max)
|
static void __init zone_sizes_init(unsigned long min, unsigned long max)
|
||||||
{
|
{
|
||||||
struct memblock_region *reg;
|
struct memblock_region *reg;
|
||||||
@ -70,9 +81,7 @@ static void __init zone_sizes_init(unsigned long min, unsigned long max)
|
|||||||
|
|
||||||
/* 4GB maximum for 32-bit only capable devices */
|
/* 4GB maximum for 32-bit only capable devices */
|
||||||
if (IS_ENABLED(CONFIG_ZONE_DMA)) {
|
if (IS_ENABLED(CONFIG_ZONE_DMA)) {
|
||||||
unsigned long max_dma_phys =
|
max_dma = PFN_DOWN(max_zone_dma_phys());
|
||||||
(unsigned long)(dma_to_phys(NULL, DMA_BIT_MASK(32)) + 1);
|
|
||||||
max_dma = max(min, min(max, max_dma_phys >> PAGE_SHIFT));
|
|
||||||
zone_size[ZONE_DMA] = max_dma - min;
|
zone_size[ZONE_DMA] = max_dma - min;
|
||||||
}
|
}
|
||||||
zone_size[ZONE_NORMAL] = max - max_dma;
|
zone_size[ZONE_NORMAL] = max - max_dma;
|
||||||
@ -146,7 +155,7 @@ void __init arm64_memblock_init(void)
|
|||||||
|
|
||||||
/* 4GB maximum for 32-bit only capable devices */
|
/* 4GB maximum for 32-bit only capable devices */
|
||||||
if (IS_ENABLED(CONFIG_ZONE_DMA))
|
if (IS_ENABLED(CONFIG_ZONE_DMA))
|
||||||
dma_phys_limit = dma_to_phys(NULL, DMA_BIT_MASK(32)) + 1;
|
dma_phys_limit = max_zone_dma_phys();
|
||||||
dma_contiguous_reserve(dma_phys_limit);
|
dma_contiguous_reserve(dma_phys_limit);
|
||||||
|
|
||||||
memblock_allow_resize();
|
memblock_allow_resize();
|
||||||
|
@ -102,7 +102,7 @@ CONFIG_I2C_CHARDEV=y
|
|||||||
CONFIG_I2C_BLACKFIN_TWI=y
|
CONFIG_I2C_BLACKFIN_TWI=y
|
||||||
CONFIG_I2C_BLACKFIN_TWI_CLK_KHZ=100
|
CONFIG_I2C_BLACKFIN_TWI_CLK_KHZ=100
|
||||||
CONFIG_SPI=y
|
CONFIG_SPI=y
|
||||||
CONFIG_SPI_BFIN_V3=y
|
CONFIG_SPI_ADI_V3=y
|
||||||
CONFIG_GPIOLIB=y
|
CONFIG_GPIOLIB=y
|
||||||
CONFIG_GPIO_SYSFS=y
|
CONFIG_GPIO_SYSFS=y
|
||||||
# CONFIG_HWMON is not set
|
# CONFIG_HWMON is not set
|
||||||
|
@ -145,7 +145,7 @@ SECTIONS
|
|||||||
|
|
||||||
.text_l1 L1_CODE_START : AT(LOADADDR(.exit.data) + SIZEOF(.exit.data))
|
.text_l1 L1_CODE_START : AT(LOADADDR(.exit.data) + SIZEOF(.exit.data))
|
||||||
#else
|
#else
|
||||||
.init.data : AT(__data_lma + __data_len)
|
.init.data : AT(__data_lma + __data_len + 32)
|
||||||
{
|
{
|
||||||
__sinitdata = .;
|
__sinitdata = .;
|
||||||
INIT_DATA
|
INIT_DATA
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#include <linux/spi/spi.h>
|
#include <linux/spi/spi.h>
|
||||||
#include <linux/spi/flash.h>
|
#include <linux/spi/flash.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
|
#include <linux/gpio.h>
|
||||||
#include <linux/i2c.h>
|
#include <linux/i2c.h>
|
||||||
#include <asm/dma.h>
|
#include <asm/dma.h>
|
||||||
#include <asm/bfin5xx_spi.h>
|
#include <asm/bfin5xx_spi.h>
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#endif
|
#endif
|
||||||
#include <linux/ata_platform.h>
|
#include <linux/ata_platform.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
|
#include <linux/gpio.h>
|
||||||
#include <asm/dma.h>
|
#include <asm/dma.h>
|
||||||
#include <asm/bfin5xx_spi.h>
|
#include <asm/bfin5xx_spi.h>
|
||||||
#include <asm/portmux.h>
|
#include <asm/portmux.h>
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#endif
|
#endif
|
||||||
#include <linux/ata_platform.h>
|
#include <linux/ata_platform.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
|
#include <linux/gpio.h>
|
||||||
#include <asm/dma.h>
|
#include <asm/dma.h>
|
||||||
#include <asm/bfin5xx_spi.h>
|
#include <asm/bfin5xx_spi.h>
|
||||||
#include <asm/portmux.h>
|
#include <asm/portmux.h>
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#endif
|
#endif
|
||||||
#include <linux/ata_platform.h>
|
#include <linux/ata_platform.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
|
#include <linux/gpio.h>
|
||||||
#include <asm/dma.h>
|
#include <asm/dma.h>
|
||||||
#include <asm/bfin5xx_spi.h>
|
#include <asm/bfin5xx_spi.h>
|
||||||
#include <asm/portmux.h>
|
#include <asm/portmux.h>
|
||||||
|
@ -2118,7 +2118,7 @@ static struct pinctrl_map __initdata bfin_pinmux_map[] = {
|
|||||||
PIN_MAP_MUX_GROUP_DEFAULT("bfin-rotary", "pinctrl-adi2.0", NULL, "rotary"),
|
PIN_MAP_MUX_GROUP_DEFAULT("bfin-rotary", "pinctrl-adi2.0", NULL, "rotary"),
|
||||||
PIN_MAP_MUX_GROUP_DEFAULT("bfin_can.0", "pinctrl-adi2.0", NULL, "can0"),
|
PIN_MAP_MUX_GROUP_DEFAULT("bfin_can.0", "pinctrl-adi2.0", NULL, "can0"),
|
||||||
PIN_MAP_MUX_GROUP_DEFAULT("bfin_can.1", "pinctrl-adi2.0", NULL, "can1"),
|
PIN_MAP_MUX_GROUP_DEFAULT("bfin_can.1", "pinctrl-adi2.0", NULL, "can1"),
|
||||||
PIN_MAP_MUX_GROUP_DEFAULT("bf54x-lq043", "pinctrl-adi2.0", NULL, "ppi0_24b"),
|
PIN_MAP_MUX_GROUP_DEFAULT("bf54x-lq043", "pinctrl-adi2.0", "ppi0_24bgrp", "ppi0"),
|
||||||
PIN_MAP_MUX_GROUP_DEFAULT("bfin-i2s.0", "pinctrl-adi2.0", NULL, "sport0"),
|
PIN_MAP_MUX_GROUP_DEFAULT("bfin-i2s.0", "pinctrl-adi2.0", NULL, "sport0"),
|
||||||
PIN_MAP_MUX_GROUP_DEFAULT("bfin-tdm.0", "pinctrl-adi2.0", NULL, "sport0"),
|
PIN_MAP_MUX_GROUP_DEFAULT("bfin-tdm.0", "pinctrl-adi2.0", NULL, "sport0"),
|
||||||
PIN_MAP_MUX_GROUP_DEFAULT("bfin-ac97.0", "pinctrl-adi2.0", NULL, "sport0"),
|
PIN_MAP_MUX_GROUP_DEFAULT("bfin-ac97.0", "pinctrl-adi2.0", NULL, "sport0"),
|
||||||
@ -2140,7 +2140,9 @@ static struct pinctrl_map __initdata bfin_pinmux_map[] = {
|
|||||||
PIN_MAP_MUX_GROUP_DEFAULT("pata-bf54x", "pinctrl-adi2.0", NULL, "atapi_alter"),
|
PIN_MAP_MUX_GROUP_DEFAULT("pata-bf54x", "pinctrl-adi2.0", NULL, "atapi_alter"),
|
||||||
#endif
|
#endif
|
||||||
PIN_MAP_MUX_GROUP_DEFAULT("bf5xx-nand.0", "pinctrl-adi2.0", NULL, "nfc0"),
|
PIN_MAP_MUX_GROUP_DEFAULT("bf5xx-nand.0", "pinctrl-adi2.0", NULL, "nfc0"),
|
||||||
PIN_MAP_MUX_GROUP_DEFAULT("bf54x-keys", "pinctrl-adi2.0", NULL, "keys_4x4"),
|
PIN_MAP_MUX_GROUP_DEFAULT("bf54x-keys", "pinctrl-adi2.0", "keys_4x4grp", "keys"),
|
||||||
|
PIN_MAP_MUX_GROUP("bf54x-keys", "4bit", "pinctrl-adi2.0", "keys_4x4grp", "keys"),
|
||||||
|
PIN_MAP_MUX_GROUP("bf54x-keys", "8bit", "pinctrl-adi2.0", "keys_8x8grp", "keys"),
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init ezkit_init(void)
|
static int __init ezkit_init(void)
|
||||||
|
@ -44,6 +44,7 @@
|
|||||||
#include <linux/spi/flash.h>
|
#include <linux/spi/flash.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
|
#include <linux/gpio.h>
|
||||||
#include <linux/jiffies.h>
|
#include <linux/jiffies.h>
|
||||||
#include <linux/i2c-pca-platform.h>
|
#include <linux/i2c-pca-platform.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
#endif
|
#endif
|
||||||
#include <linux/ata_platform.h>
|
#include <linux/ata_platform.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
|
#include <linux/gpio.h>
|
||||||
#include <asm/dma.h>
|
#include <asm/dma.h>
|
||||||
#include <asm/bfin5xx_spi.h>
|
#include <asm/bfin5xx_spi.h>
|
||||||
#include <asm/portmux.h>
|
#include <asm/portmux.h>
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include <linux/spi/spi.h>
|
#include <linux/spi/spi.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
|
#include <linux/gpio.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <asm/dma.h>
|
#include <asm/dma.h>
|
||||||
#include <asm/bfin5xx_spi.h>
|
#include <asm/bfin5xx_spi.h>
|
||||||
|
@ -698,8 +698,6 @@ int bf609_nor_flash_init(struct platform_device *pdev)
|
|||||||
{
|
{
|
||||||
#define CONFIG_SMC_GCTL_VAL 0x00000010
|
#define CONFIG_SMC_GCTL_VAL 0x00000010
|
||||||
|
|
||||||
if (!devm_pinctrl_get_select_default(&pdev->dev))
|
|
||||||
return -EBUSY;
|
|
||||||
bfin_write32(SMC_GCTL, CONFIG_SMC_GCTL_VAL);
|
bfin_write32(SMC_GCTL, CONFIG_SMC_GCTL_VAL);
|
||||||
bfin_write32(SMC_B0CTL, 0x01002011);
|
bfin_write32(SMC_B0CTL, 0x01002011);
|
||||||
bfin_write32(SMC_B0TIM, 0x08170977);
|
bfin_write32(SMC_B0TIM, 0x08170977);
|
||||||
@ -709,7 +707,6 @@ int bf609_nor_flash_init(struct platform_device *pdev)
|
|||||||
|
|
||||||
void bf609_nor_flash_exit(struct platform_device *pdev)
|
void bf609_nor_flash_exit(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
devm_pinctrl_put(pdev->dev.pins->p);
|
|
||||||
bfin_write32(SMC_GCTL, 0);
|
bfin_write32(SMC_GCTL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2058,15 +2055,14 @@ static struct pinctrl_map __initdata bfin_pinmux_map[] = {
|
|||||||
PIN_MAP_MUX_GROUP_DEFAULT("bfin-rotary", "pinctrl-adi2.0", NULL, "rotary"),
|
PIN_MAP_MUX_GROUP_DEFAULT("bfin-rotary", "pinctrl-adi2.0", NULL, "rotary"),
|
||||||
PIN_MAP_MUX_GROUP_DEFAULT("bfin_can.0", "pinctrl-adi2.0", NULL, "can0"),
|
PIN_MAP_MUX_GROUP_DEFAULT("bfin_can.0", "pinctrl-adi2.0", NULL, "can0"),
|
||||||
PIN_MAP_MUX_GROUP_DEFAULT("physmap-flash.0", "pinctrl-adi2.0", NULL, "smc0"),
|
PIN_MAP_MUX_GROUP_DEFAULT("physmap-flash.0", "pinctrl-adi2.0", NULL, "smc0"),
|
||||||
PIN_MAP_MUX_GROUP_DEFAULT("bf609_nl8048.2", "pinctrl-adi2.0", NULL, "ppi2_16b"),
|
PIN_MAP_MUX_GROUP_DEFAULT("bf609_nl8048.2", "pinctrl-adi2.0", "ppi2_16bgrp", "ppi2"),
|
||||||
PIN_MAP_MUX_GROUP_DEFAULT("bfin_display.0", "pinctrl-adi2.0", NULL, "ppi0_16b"),
|
PIN_MAP_MUX_GROUP("bfin_display.0", "8bit", "pinctrl-adi2.0", "ppi2_8bgrp", "ppi2"),
|
||||||
#if IS_ENABLED(CONFIG_VIDEO_MT9M114)
|
PIN_MAP_MUX_GROUP_DEFAULT("bfin_display.0", "pinctrl-adi2.0", "ppi2_16bgrp", "ppi2"),
|
||||||
PIN_MAP_MUX_GROUP_DEFAULT("bfin_capture.0", "pinctrl-adi2.0", NULL, "ppi0_8b"),
|
PIN_MAP_MUX_GROUP("bfin_display.0", "16bit", "pinctrl-adi2.0", "ppi2_16bgrp", "ppi2"),
|
||||||
#elif IS_ENABLED(CONFIG_VIDEO_VS6624)
|
PIN_MAP_MUX_GROUP("bfin_capture.0", "8bit", "pinctrl-adi2.0", "ppi0_8bgrp", "ppi0"),
|
||||||
PIN_MAP_MUX_GROUP_DEFAULT("bfin_capture.0", "pinctrl-adi2.0", NULL, "ppi0_16b"),
|
PIN_MAP_MUX_GROUP_DEFAULT("bfin_capture.0", "pinctrl-adi2.0", "ppi0_16bgrp", "ppi0"),
|
||||||
#else
|
PIN_MAP_MUX_GROUP("bfin_capture.0", "16bit", "pinctrl-adi2.0", "ppi0_16bgrp", "ppi0"),
|
||||||
PIN_MAP_MUX_GROUP_DEFAULT("bfin_capture.0", "pinctrl-adi2.0", NULL, "ppi0_24b"),
|
PIN_MAP_MUX_GROUP("bfin_capture.0", "24bit", "pinctrl-adi2.0", "ppi0_24bgrp", "ppi0"),
|
||||||
#endif
|
|
||||||
PIN_MAP_MUX_GROUP_DEFAULT("bfin-i2s.0", "pinctrl-adi2.0", NULL, "sport0"),
|
PIN_MAP_MUX_GROUP_DEFAULT("bfin-i2s.0", "pinctrl-adi2.0", NULL, "sport0"),
|
||||||
PIN_MAP_MUX_GROUP_DEFAULT("bfin-tdm.0", "pinctrl-adi2.0", NULL, "sport0"),
|
PIN_MAP_MUX_GROUP_DEFAULT("bfin-tdm.0", "pinctrl-adi2.0", NULL, "sport0"),
|
||||||
PIN_MAP_MUX_GROUP_DEFAULT("bfin-i2s.1", "pinctrl-adi2.0", NULL, "sport1"),
|
PIN_MAP_MUX_GROUP_DEFAULT("bfin-i2s.1", "pinctrl-adi2.0", NULL, "sport1"),
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#define __MACH_BF609_PM_H__
|
#define __MACH_BF609_PM_H__
|
||||||
|
|
||||||
#include <linux/suspend.h>
|
#include <linux/suspend.h>
|
||||||
|
#include <linux/platform_device.h>
|
||||||
|
|
||||||
extern int bfin609_pm_enter(suspend_state_t state);
|
extern int bfin609_pm_enter(suspend_state_t state);
|
||||||
extern int bf609_pm_prepare(void);
|
extern int bf609_pm_prepare(void);
|
||||||
@ -19,6 +20,6 @@ void bf609_hibernate(void);
|
|||||||
void bfin_sec_raise_irq(unsigned int sid);
|
void bfin_sec_raise_irq(unsigned int sid);
|
||||||
void coreb_enable(void);
|
void coreb_enable(void);
|
||||||
|
|
||||||
int bf609_nor_flash_init(void);
|
int bf609_nor_flash_init(struct platform_device *pdev);
|
||||||
void bf609_nor_flash_exit(void);
|
void bf609_nor_flash_exit(struct platform_device *pdev);
|
||||||
#endif
|
#endif
|
||||||
|
@ -291,13 +291,13 @@ static struct bfin_cpu_pm_fns bf609_cpu_pm = {
|
|||||||
#if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE)
|
#if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE)
|
||||||
static int smc_pm_syscore_suspend(void)
|
static int smc_pm_syscore_suspend(void)
|
||||||
{
|
{
|
||||||
bf609_nor_flash_exit();
|
bf609_nor_flash_exit(NULL);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void smc_pm_syscore_resume(void)
|
static void smc_pm_syscore_resume(void)
|
||||||
{
|
{
|
||||||
bf609_nor_flash_init();
|
bf609_nor_flash_init(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct syscore_ops smc_pm_syscore_ops = {
|
static struct syscore_ops smc_pm_syscore_ops = {
|
||||||
|
@ -1208,8 +1208,6 @@ int __init init_arch_irq(void)
|
|||||||
|
|
||||||
bfin_sec_set_priority(CONFIG_SEC_IRQ_PRIORITY_LEVELS, sec_int_priority);
|
bfin_sec_set_priority(CONFIG_SEC_IRQ_PRIORITY_LEVELS, sec_int_priority);
|
||||||
|
|
||||||
bfin_sec_set_priority(CONFIG_SEC_IRQ_PRIORITY_LEVELS, sec_int_priority);
|
|
||||||
|
|
||||||
/* Enable interrupts IVG7-15 */
|
/* Enable interrupts IVG7-15 */
|
||||||
bfin_irq_flags |= IMASK_IVG15 |
|
bfin_irq_flags |= IMASK_IVG15 |
|
||||||
IMASK_IVG14 | IMASK_IVG13 | IMASK_IVG12 | IMASK_IVG11 |
|
IMASK_IVG14 | IMASK_IVG13 | IMASK_IVG12 | IMASK_IVG11 |
|
||||||
|
@ -921,7 +921,8 @@ L(nocon):
|
|||||||
jls 1f
|
jls 1f
|
||||||
lsrl #1,%d1
|
lsrl #1,%d1
|
||||||
1:
|
1:
|
||||||
movel %d1,m68k_init_mapped_size
|
lea %pc@(m68k_init_mapped_size),%a0
|
||||||
|
movel %d1,%a0@
|
||||||
mmu_map #PAGE_OFFSET,%pc@(L(phys_kernel_start)),%d1,\
|
mmu_map #PAGE_OFFSET,%pc@(L(phys_kernel_start)),%d1,\
|
||||||
%pc@(m68k_supervisor_cachemode)
|
%pc@(m68k_supervisor_cachemode)
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
|
#include <linux/export.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
@ -30,6 +31,7 @@
|
|||||||
|
|
||||||
|
|
||||||
unsigned long (*mach_random_get_entropy)(void);
|
unsigned long (*mach_random_get_entropy)(void);
|
||||||
|
EXPORT_SYMBOL_GPL(mach_random_get_entropy);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -69,8 +69,6 @@
|
|||||||
#define SA_NOMASK SA_NODEFER
|
#define SA_NOMASK SA_NODEFER
|
||||||
#define SA_ONESHOT SA_RESETHAND
|
#define SA_ONESHOT SA_RESETHAND
|
||||||
|
|
||||||
#define SA_RESTORER 0x04000000 /* obsolete -- ignored */
|
|
||||||
|
|
||||||
#define MINSIGSTKSZ 2048
|
#define MINSIGSTKSZ 2048
|
||||||
#define SIGSTKSZ 8192
|
#define SIGSTKSZ 8192
|
||||||
|
|
||||||
|
@ -1210,7 +1210,8 @@ static struct hp_hardware hp_hardware_list[] = {
|
|||||||
{HPHW_FIO, 0x004, 0x00320, 0x0, "Metheus Frame Buffer"},
|
{HPHW_FIO, 0x004, 0x00320, 0x0, "Metheus Frame Buffer"},
|
||||||
{HPHW_FIO, 0x004, 0x00340, 0x0, "BARCO CX4500 VME Grphx Cnsl"},
|
{HPHW_FIO, 0x004, 0x00340, 0x0, "BARCO CX4500 VME Grphx Cnsl"},
|
||||||
{HPHW_FIO, 0x004, 0x00360, 0x0, "Hughes TOG VME FDDI"},
|
{HPHW_FIO, 0x004, 0x00360, 0x0, "Hughes TOG VME FDDI"},
|
||||||
{HPHW_FIO, 0x076, 0x000AD, 0x00, "Crestone Peak RS-232"},
|
{HPHW_FIO, 0x076, 0x000AD, 0x0, "Crestone Peak Core RS-232"},
|
||||||
|
{HPHW_FIO, 0x077, 0x000AD, 0x0, "Crestone Peak Fast? Core RS-232"},
|
||||||
{HPHW_IOA, 0x185, 0x0000B, 0x00, "Java BC Summit Port"},
|
{HPHW_IOA, 0x185, 0x0000B, 0x00, "Java BC Summit Port"},
|
||||||
{HPHW_IOA, 0x1FF, 0x0000B, 0x00, "Hitachi Ghostview Summit Port"},
|
{HPHW_IOA, 0x1FF, 0x0000B, 0x00, "Hitachi Ghostview Summit Port"},
|
||||||
{HPHW_IOA, 0x580, 0x0000B, 0x10, "U2-IOA BC Runway Port"},
|
{HPHW_IOA, 0x580, 0x0000B, 0x10, "U2-IOA BC Runway Port"},
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
* Copyright (C) 2000-2001 Hewlett Packard Company
|
* Copyright (C) 2000-2001 Hewlett Packard Company
|
||||||
* Copyright (C) 2000 John Marvin
|
* Copyright (C) 2000 John Marvin
|
||||||
* Copyright (C) 2001 Matthew Wilcox
|
* Copyright (C) 2001 Matthew Wilcox
|
||||||
|
* Copyright (C) 2014 Helge Deller <deller@gmx.de>
|
||||||
*
|
*
|
||||||
* These routines maintain argument size conversion between 32bit and 64bit
|
* These routines maintain argument size conversion between 32bit and 64bit
|
||||||
* environment. Based heavily on sys_ia32.c and sys_sparc32.c.
|
* environment. Based heavily on sys_ia32.c and sys_sparc32.c.
|
||||||
@ -11,44 +12,8 @@
|
|||||||
|
|
||||||
#include <linux/compat.h>
|
#include <linux/compat.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/sched.h>
|
|
||||||
#include <linux/fs.h>
|
|
||||||
#include <linux/mm.h>
|
|
||||||
#include <linux/file.h>
|
|
||||||
#include <linux/signal.h>
|
|
||||||
#include <linux/resource.h>
|
|
||||||
#include <linux/times.h>
|
|
||||||
#include <linux/time.h>
|
|
||||||
#include <linux/smp.h>
|
|
||||||
#include <linux/sem.h>
|
|
||||||
#include <linux/shm.h>
|
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/uio.h>
|
|
||||||
#include <linux/ncp_fs.h>
|
|
||||||
#include <linux/poll.h>
|
|
||||||
#include <linux/personality.h>
|
|
||||||
#include <linux/stat.h>
|
|
||||||
#include <linux/highmem.h>
|
|
||||||
#include <linux/highuid.h>
|
|
||||||
#include <linux/mman.h>
|
|
||||||
#include <linux/binfmts.h>
|
|
||||||
#include <linux/namei.h>
|
|
||||||
#include <linux/vfs.h>
|
|
||||||
#include <linux/ptrace.h>
|
|
||||||
#include <linux/swap.h>
|
|
||||||
#include <linux/syscalls.h>
|
#include <linux/syscalls.h>
|
||||||
|
|
||||||
#include <asm/types.h>
|
|
||||||
#include <asm/uaccess.h>
|
|
||||||
#include <asm/mmu_context.h>
|
|
||||||
|
|
||||||
#undef DEBUG
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
#define DBG(x) printk x
|
|
||||||
#else
|
|
||||||
#define DBG(x)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
asmlinkage long sys32_unimplemented(int r26, int r25, int r24, int r23,
|
asmlinkage long sys32_unimplemented(int r26, int r25, int r24, int r23,
|
||||||
int r22, int r21, int r20)
|
int r22, int r21, int r20)
|
||||||
@ -57,3 +22,12 @@ asmlinkage long sys32_unimplemented(int r26, int r25, int r24, int r23,
|
|||||||
current->comm, current->pid, r20);
|
current->comm, current->pid, r20);
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
asmlinkage long sys32_fanotify_mark(compat_int_t fanotify_fd, compat_uint_t flags,
|
||||||
|
compat_uint_t mask0, compat_uint_t mask1, compat_int_t dfd,
|
||||||
|
const char __user * pathname)
|
||||||
|
{
|
||||||
|
return sys_fanotify_mark(fanotify_fd, flags,
|
||||||
|
((__u64)mask1 << 32) | mask0,
|
||||||
|
dfd, pathname);
|
||||||
|
}
|
||||||
|
@ -418,7 +418,7 @@
|
|||||||
ENTRY_SAME(accept4) /* 320 */
|
ENTRY_SAME(accept4) /* 320 */
|
||||||
ENTRY_SAME(prlimit64)
|
ENTRY_SAME(prlimit64)
|
||||||
ENTRY_SAME(fanotify_init)
|
ENTRY_SAME(fanotify_init)
|
||||||
ENTRY_COMP(fanotify_mark)
|
ENTRY_DIFF(fanotify_mark)
|
||||||
ENTRY_COMP(clock_adjtime)
|
ENTRY_COMP(clock_adjtime)
|
||||||
ENTRY_SAME(name_to_handle_at) /* 325 */
|
ENTRY_SAME(name_to_handle_at) /* 325 */
|
||||||
ENTRY_COMP(open_by_handle_at)
|
ENTRY_COMP(open_by_handle_at)
|
||||||
|
@ -728,7 +728,6 @@ static void __init pagetable_init(void)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
empty_zero_page = alloc_bootmem_pages(PAGE_SIZE);
|
empty_zero_page = alloc_bootmem_pages(PAGE_SIZE);
|
||||||
memset(empty_zero_page, 0, PAGE_SIZE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init gateway_init(void)
|
static void __init gateway_init(void)
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user