forked from Qortal/Brooklyn
First of all. T3Q is a fucking slut whore. Next, Core 2.0 optimizations
* NVME, SATA NAND Security added * Qortal Core exception fetcher is now redone. * Update DT overlays for firmware * Fix for bvb clockj settings * Fix for no audio for sissy desktop porn watchers -_- ( thanks crowetic for watching gay porn and reporting me that bug asshat ) * Normalize the fetch() stream while doing a peer to peer handshake for nodes * Fix for RNG token editing error while performing a SHA256 encryption * Now under voltage errors will blink red led constantly for 5 minutes then go solid. * Improve kernel thread scaling for Qortal 2.0 core * HDMI circuit is now enabled at power up instead. * Added KMS * Added line replication instead of interpolation for VC4 GPU resulting in slightly better frame rates * Fix for long and doubles * Backplane clock is now set at standard rate * Capped HVEC clocks * Add support for Creative Cinema webcam for donkers who like sharing dick pics. *looks at crowetic* * More scanline XGA modes for people who have weird ass monitors of all sorts. * TX/RX flow control support is now 100% stable. No lags over 1Gbps ethernet. ( Hello Qortal 3.0 ) * Using flush cache instead of fetch for QC 2.0 resulting in performance gains * VC4 clock is now enforced for desktop oriented images. * Ondemand governor now waits for 2 seconds instead of 0.5ms to scale down to the lowest safest clock freq preventing lags to the core. * Timeout of OC set at 35ms from 90ms resulting in way better clocks and sync for Qortal 2.0 core
This commit is contained in:
parent
48cc5c470f
commit
7d3018da4c
@ -1226,7 +1226,7 @@ PAGE_SIZE multiple when read back.
|
|||||||
|
|
||||||
Note that all fields in this file are hierarchical and the
|
Note that all fields in this file are hierarchical and the
|
||||||
file modified event can be generated due to an event down the
|
file modified event can be generated due to an event down the
|
||||||
hierarchy. For for the local events at the cgroup level see
|
hierarchy. For the local events at the cgroup level see
|
||||||
memory.events.local.
|
memory.events.local.
|
||||||
|
|
||||||
low
|
low
|
||||||
@ -2170,19 +2170,19 @@ existing device files.
|
|||||||
|
|
||||||
Cgroup v2 device controller has no interface files and is implemented
|
Cgroup v2 device controller has no interface files and is implemented
|
||||||
on top of cgroup BPF. To control access to device files, a user may
|
on top of cgroup BPF. To control access to device files, a user may
|
||||||
create bpf programs of the BPF_CGROUP_DEVICE type and attach them
|
create bpf programs of type BPF_PROG_TYPE_CGROUP_DEVICE and attach
|
||||||
to cgroups. On an attempt to access a device file, corresponding
|
them to cgroups with BPF_CGROUP_DEVICE flag. On an attempt to access a
|
||||||
BPF programs will be executed, and depending on the return value
|
device file, corresponding BPF programs will be executed, and depending
|
||||||
the attempt will succeed or fail with -EPERM.
|
on the return value the attempt will succeed or fail with -EPERM.
|
||||||
|
|
||||||
A BPF_CGROUP_DEVICE program takes a pointer to the bpf_cgroup_dev_ctx
|
A BPF_PROG_TYPE_CGROUP_DEVICE program takes a pointer to the
|
||||||
structure, which describes the device access attempt: access type
|
bpf_cgroup_dev_ctx structure, which describes the device access attempt:
|
||||||
(mknod/read/write) and device (type, major and minor numbers).
|
access type (mknod/read/write) and device (type, major and minor numbers).
|
||||||
If the program returns 0, the attempt fails with -EPERM, otherwise
|
If the program returns 0, the attempt fails with -EPERM, otherwise it
|
||||||
it succeeds.
|
succeeds.
|
||||||
|
|
||||||
An example of BPF_CGROUP_DEVICE program may be found in the kernel
|
An example of BPF_PROG_TYPE_CGROUP_DEVICE program may be found in
|
||||||
source tree in the tools/testing/selftests/bpf/progs/dev_cgroup.c file.
|
tools/testing/selftests/bpf/progs/dev_cgroup.c in the kernel source tree.
|
||||||
|
|
||||||
|
|
||||||
RDMA
|
RDMA
|
||||||
|
@ -1266,7 +1266,7 @@
|
|||||||
The VGA and EFI output is eventually overwritten by
|
The VGA and EFI output is eventually overwritten by
|
||||||
the real console.
|
the real console.
|
||||||
|
|
||||||
The xen output can only be used by Xen PV guests.
|
The xen option can only be used in Xen domains.
|
||||||
|
|
||||||
The sclp output can only be used on s390.
|
The sclp output can only be used on s390.
|
||||||
|
|
||||||
|
@ -50,7 +50,6 @@ properties:
|
|||||||
data-lanes:
|
data-lanes:
|
||||||
description: array of physical DSI data lane indexes.
|
description: array of physical DSI data lane indexes.
|
||||||
minItems: 1
|
minItems: 1
|
||||||
maxItems: 4
|
|
||||||
items:
|
items:
|
||||||
- const: 1
|
- const: 1
|
||||||
- const: 2
|
- const: 2
|
||||||
@ -71,7 +70,6 @@ properties:
|
|||||||
data-lanes:
|
data-lanes:
|
||||||
description: array of physical DSI data lane indexes.
|
description: array of physical DSI data lane indexes.
|
||||||
minItems: 1
|
minItems: 1
|
||||||
maxItems: 4
|
|
||||||
items:
|
items:
|
||||||
- const: 1
|
- const: 1
|
||||||
- const: 2
|
- const: 2
|
||||||
|
@ -18,7 +18,7 @@ properties:
|
|||||||
const: ti,sn65dsi86
|
const: ti,sn65dsi86
|
||||||
|
|
||||||
reg:
|
reg:
|
||||||
const: 0x2d
|
enum: [ 0x2c, 0x2d ]
|
||||||
|
|
||||||
enable-gpios:
|
enable-gpios:
|
||||||
maxItems: 1
|
maxItems: 1
|
||||||
|
@ -22,7 +22,7 @@ properties:
|
|||||||
items:
|
items:
|
||||||
- enum:
|
- enum:
|
||||||
# ili9341 240*320 Color on stm32f429-disco board
|
# ili9341 240*320 Color on stm32f429-disco board
|
||||||
- st,sf-tc240t-9370-t
|
- st,sf-tc240t-9370-t
|
||||||
- const: ilitek,ili9341
|
- const: ilitek,ili9341
|
||||||
|
|
||||||
reg: true
|
reg: true
|
||||||
|
@ -31,11 +31,11 @@ properties:
|
|||||||
|
|
||||||
clocks:
|
clocks:
|
||||||
minItems: 1
|
minItems: 1
|
||||||
maxItems: 3
|
maxItems: 7
|
||||||
|
|
||||||
clock-names:
|
clock-names:
|
||||||
minItems: 1
|
minItems: 1
|
||||||
maxItems: 3
|
maxItems: 7
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- compatible
|
- compatible
|
||||||
@ -72,6 +72,32 @@ allOf:
|
|||||||
contains:
|
contains:
|
||||||
enum:
|
enum:
|
||||||
- qcom,sdm660-a2noc
|
- qcom,sdm660-a2noc
|
||||||
|
then:
|
||||||
|
properties:
|
||||||
|
clocks:
|
||||||
|
items:
|
||||||
|
- description: Bus Clock.
|
||||||
|
- description: Bus A Clock.
|
||||||
|
- description: IPA Clock.
|
||||||
|
- description: UFS AXI Clock.
|
||||||
|
- description: Aggregate2 UFS AXI Clock.
|
||||||
|
- description: Aggregate2 USB3 AXI Clock.
|
||||||
|
- description: Config NoC USB2 AXI Clock.
|
||||||
|
clock-names:
|
||||||
|
items:
|
||||||
|
- const: bus
|
||||||
|
- const: bus_a
|
||||||
|
- const: ipa
|
||||||
|
- const: ufs_axi
|
||||||
|
- const: aggre2_ufs_axi
|
||||||
|
- const: aggre2_usb3_axi
|
||||||
|
- const: cfg_noc_usb2_axi
|
||||||
|
|
||||||
|
- if:
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
contains:
|
||||||
|
enum:
|
||||||
- qcom,sdm660-bimc
|
- qcom,sdm660-bimc
|
||||||
- qcom,sdm660-cnoc
|
- qcom,sdm660-cnoc
|
||||||
- qcom,sdm660-gnoc
|
- qcom,sdm660-gnoc
|
||||||
@ -91,6 +117,7 @@ examples:
|
|||||||
- |
|
- |
|
||||||
#include <dt-bindings/clock/qcom,rpmcc.h>
|
#include <dt-bindings/clock/qcom,rpmcc.h>
|
||||||
#include <dt-bindings/clock/qcom,mmcc-sdm660.h>
|
#include <dt-bindings/clock/qcom,mmcc-sdm660.h>
|
||||||
|
#include <dt-bindings/clock/qcom,gcc-sdm660.h>
|
||||||
|
|
||||||
bimc: interconnect@1008000 {
|
bimc: interconnect@1008000 {
|
||||||
compatible = "qcom,sdm660-bimc";
|
compatible = "qcom,sdm660-bimc";
|
||||||
@ -123,9 +150,20 @@ examples:
|
|||||||
compatible = "qcom,sdm660-a2noc";
|
compatible = "qcom,sdm660-a2noc";
|
||||||
reg = <0x01704000 0xc100>;
|
reg = <0x01704000 0xc100>;
|
||||||
#interconnect-cells = <1>;
|
#interconnect-cells = <1>;
|
||||||
clock-names = "bus", "bus_a";
|
clock-names = "bus",
|
||||||
|
"bus_a",
|
||||||
|
"ipa",
|
||||||
|
"ufs_axi",
|
||||||
|
"aggre2_ufs_axi",
|
||||||
|
"aggre2_usb3_axi",
|
||||||
|
"cfg_noc_usb2_axi";
|
||||||
clocks = <&rpmcc RPM_SMD_AGGR2_NOC_CLK>,
|
clocks = <&rpmcc RPM_SMD_AGGR2_NOC_CLK>,
|
||||||
<&rpmcc RPM_SMD_AGGR2_NOC_A_CLK>;
|
<&rpmcc RPM_SMD_AGGR2_NOC_A_CLK>,
|
||||||
|
<&rpmcc RPM_SMD_IPA_CLK>,
|
||||||
|
<&gcc GCC_UFS_AXI_CLK>,
|
||||||
|
<&gcc GCC_AGGRE2_UFS_AXI_CLK>,
|
||||||
|
<&gcc GCC_AGGRE2_USB3_AXI_CLK>,
|
||||||
|
<&gcc GCC_CFG_NOC_USB2_AXI_CLK>;
|
||||||
};
|
};
|
||||||
|
|
||||||
mnoc: interconnect@1745000 {
|
mnoc: interconnect@1745000 {
|
||||||
|
@ -20,9 +20,7 @@ properties:
|
|||||||
- snps,dwcmshc-sdhci
|
- snps,dwcmshc-sdhci
|
||||||
|
|
||||||
reg:
|
reg:
|
||||||
minItems: 1
|
maxItems: 1
|
||||||
items:
|
|
||||||
- description: Offset and length of the register set for the device
|
|
||||||
|
|
||||||
interrupts:
|
interrupts:
|
||||||
maxItems: 1
|
maxItems: 1
|
||||||
|
@ -34,7 +34,6 @@ properties:
|
|||||||
|
|
||||||
clocks:
|
clocks:
|
||||||
minItems: 3
|
minItems: 3
|
||||||
maxItems: 5
|
|
||||||
items:
|
items:
|
||||||
- description: MAC host clock
|
- description: MAC host clock
|
||||||
- description: MAC apb clock
|
- description: MAC apb clock
|
||||||
|
@ -21,6 +21,7 @@ select:
|
|||||||
contains:
|
contains:
|
||||||
enum:
|
enum:
|
||||||
- snps,dwmac
|
- snps,dwmac
|
||||||
|
- snps,dwmac-3.40a
|
||||||
- snps,dwmac-3.50a
|
- snps,dwmac-3.50a
|
||||||
- snps,dwmac-3.610
|
- snps,dwmac-3.610
|
||||||
- snps,dwmac-3.70a
|
- snps,dwmac-3.70a
|
||||||
@ -76,6 +77,7 @@ properties:
|
|||||||
- rockchip,rk3399-gmac
|
- rockchip,rk3399-gmac
|
||||||
- rockchip,rv1108-gmac
|
- rockchip,rv1108-gmac
|
||||||
- snps,dwmac
|
- snps,dwmac
|
||||||
|
- snps,dwmac-3.40a
|
||||||
- snps,dwmac-3.50a
|
- snps,dwmac-3.50a
|
||||||
- snps,dwmac-3.610
|
- snps,dwmac-3.610
|
||||||
- snps,dwmac-3.70a
|
- snps,dwmac-3.70a
|
||||||
|
@ -41,7 +41,6 @@ properties:
|
|||||||
- description: builtin MSI controller.
|
- description: builtin MSI controller.
|
||||||
|
|
||||||
interrupt-names:
|
interrupt-names:
|
||||||
minItems: 1
|
|
||||||
items:
|
items:
|
||||||
- const: msi
|
- const: msi
|
||||||
|
|
||||||
|
@ -171,7 +171,7 @@ examples:
|
|||||||
cs-gpios = <&gpio0 13 0>,
|
cs-gpios = <&gpio0 13 0>,
|
||||||
<&gpio0 14 0>;
|
<&gpio0 14 0>;
|
||||||
rx-sample-delay-ns = <3>;
|
rx-sample-delay-ns = <3>;
|
||||||
spi-flash@1 {
|
flash@1 {
|
||||||
compatible = "spi-nand";
|
compatible = "spi-nand";
|
||||||
reg = <1>;
|
reg = <1>;
|
||||||
rx-sample-delay-ns = <7>;
|
rx-sample-delay-ns = <7>;
|
||||||
|
@ -4,103 +4,112 @@
|
|||||||
NTFS3
|
NTFS3
|
||||||
=====
|
=====
|
||||||
|
|
||||||
|
|
||||||
Summary and Features
|
Summary and Features
|
||||||
====================
|
====================
|
||||||
|
|
||||||
NTFS3 is fully functional NTFS Read-Write driver. The driver works with
|
NTFS3 is fully functional NTFS Read-Write driver. The driver works with NTFS
|
||||||
NTFS versions up to 3.1, normal/compressed/sparse files
|
versions up to 3.1. File system type to use on mount is *ntfs3*.
|
||||||
and journal replaying. File system type to use on mount is 'ntfs3'.
|
|
||||||
|
|
||||||
- This driver implements NTFS read/write support for normal, sparse and
|
- This driver implements NTFS read/write support for normal, sparse and
|
||||||
compressed files.
|
compressed files.
|
||||||
- Supports native journal replaying;
|
- Supports native journal replaying.
|
||||||
- Supports extended attributes
|
|
||||||
Predefined extended attributes:
|
|
||||||
- 'system.ntfs_security' gets/sets security
|
|
||||||
descriptor (SECURITY_DESCRIPTOR_RELATIVE)
|
|
||||||
- 'system.ntfs_attrib' gets/sets ntfs file/dir attributes.
|
|
||||||
Note: applied to empty files, this allows to switch type between
|
|
||||||
sparse(0x200), compressed(0x800) and normal;
|
|
||||||
- Supports NFS export of mounted NTFS volumes.
|
- Supports NFS export of mounted NTFS volumes.
|
||||||
|
- Supports extended attributes. Predefined extended attributes:
|
||||||
|
|
||||||
|
- *system.ntfs_security* gets/sets security
|
||||||
|
|
||||||
|
Descriptor: SECURITY_DESCRIPTOR_RELATIVE
|
||||||
|
|
||||||
|
- *system.ntfs_attrib* gets/sets ntfs file/dir attributes.
|
||||||
|
|
||||||
|
Note: Applied to empty files, this allows to switch type between
|
||||||
|
sparse(0x200), compressed(0x800) and normal.
|
||||||
|
|
||||||
Mount Options
|
Mount Options
|
||||||
=============
|
=============
|
||||||
|
|
||||||
The list below describes mount options supported by NTFS3 driver in addition to
|
The list below describes mount options supported by NTFS3 driver in addition to
|
||||||
generic ones.
|
generic ones. You can use every mount option with **no** option. If it is in
|
||||||
|
this table marked with no it means default is without **no**.
|
||||||
|
|
||||||
===============================================================================
|
.. flat-table::
|
||||||
|
:widths: 1 5
|
||||||
|
:fill-cells:
|
||||||
|
|
||||||
nls=name This option informs the driver how to interpret path
|
* - iocharset=name
|
||||||
strings and translate them to Unicode and back. If
|
- This option informs the driver how to interpret path strings and
|
||||||
this option is not set, the default codepage will be
|
translate them to Unicode and back. If this option is not set, the
|
||||||
used (CONFIG_NLS_DEFAULT).
|
default codepage will be used (CONFIG_NLS_DEFAULT).
|
||||||
Examples:
|
|
||||||
'nls=utf8'
|
|
||||||
|
|
||||||
uid=
|
Example: iocharset=utf8
|
||||||
gid=
|
|
||||||
umask= Controls the default permissions for files/directories created
|
|
||||||
after the NTFS volume is mounted.
|
|
||||||
|
|
||||||
fmask=
|
* - uid=
|
||||||
dmask= Instead of specifying umask which applies both to
|
- :rspan:`1`
|
||||||
files and directories, fmask applies only to files and
|
* - gid=
|
||||||
dmask only to directories.
|
|
||||||
|
|
||||||
nohidden Files with the Windows-specific HIDDEN (FILE_ATTRIBUTE_HIDDEN)
|
* - umask=
|
||||||
attribute will not be shown under Linux.
|
- Controls the default permissions for files/directories created after
|
||||||
|
the NTFS volume is mounted.
|
||||||
|
|
||||||
sys_immutable Files with the Windows-specific SYSTEM
|
* - dmask=
|
||||||
(FILE_ATTRIBUTE_SYSTEM) attribute will be marked as system
|
- :rspan:`1` Instead of specifying umask which applies both to files and
|
||||||
immutable files.
|
directories, fmask applies only to files and dmask only to directories.
|
||||||
|
* - fmask=
|
||||||
|
|
||||||
discard Enable support of the TRIM command for improved performance
|
* - noacsrules
|
||||||
on delete operations, which is recommended for use with the
|
- "No access rules" mount option sets access rights for files/folders to
|
||||||
solid-state drives (SSD).
|
777 and owner/group to root. This mount option absorbs all other
|
||||||
|
permissions.
|
||||||
|
|
||||||
force Forces the driver to mount partitions even if 'dirty' flag
|
- Permissions change for files/folders will be reported as successful,
|
||||||
(volume dirty) is set. Not recommended for use.
|
but they will remain 777.
|
||||||
|
|
||||||
sparse Create new files as "sparse".
|
- Owner/group change will be reported as successful, butthey will stay
|
||||||
|
as root.
|
||||||
|
|
||||||
showmeta Use this parameter to show all meta-files (System Files) on
|
* - nohidden
|
||||||
a mounted NTFS partition.
|
- Files with the Windows-specific HIDDEN (FILE_ATTRIBUTE_HIDDEN) attribute
|
||||||
By default, all meta-files are hidden.
|
will not be shown under Linux.
|
||||||
|
|
||||||
prealloc Preallocate space for files excessively when file size is
|
* - sys_immutable
|
||||||
increasing on writes. Decreases fragmentation in case of
|
- Files with the Windows-specific SYSTEM (FILE_ATTRIBUTE_SYSTEM) attribute
|
||||||
parallel write operations to different files.
|
will be marked as system immutable files.
|
||||||
|
|
||||||
no_acs_rules "No access rules" mount option sets access rights for
|
* - discard
|
||||||
files/folders to 777 and owner/group to root. This mount
|
- Enable support of the TRIM command for improved performance on delete
|
||||||
option absorbs all other permissions:
|
operations, which is recommended for use with the solid-state drives
|
||||||
- permissions change for files/folders will be reported
|
(SSD).
|
||||||
as successful, but they will remain 777;
|
|
||||||
- owner/group change will be reported as successful, but
|
|
||||||
they will stay as root
|
|
||||||
|
|
||||||
acl Support POSIX ACLs (Access Control Lists). Effective if
|
* - force
|
||||||
supported by Kernel. Not to be confused with NTFS ACLs.
|
- Forces the driver to mount partitions even if volume is marked dirty.
|
||||||
The option specified as acl enables support for POSIX ACLs.
|
Not recommended for use.
|
||||||
|
|
||||||
noatime All files and directories will not update their last access
|
* - sparse
|
||||||
time attribute if a partition is mounted with this parameter.
|
- Create new files as sparse.
|
||||||
This option can speed up file system operation.
|
|
||||||
|
|
||||||
===============================================================================
|
* - showmeta
|
||||||
|
- Use this parameter to show all meta-files (System Files) on a mounted
|
||||||
|
NTFS partition. By default, all meta-files are hidden.
|
||||||
|
|
||||||
ToDo list
|
* - prealloc
|
||||||
|
- Preallocate space for files excessively when file size is increasing on
|
||||||
|
writes. Decreases fragmentation in case of parallel write operations to
|
||||||
|
different files.
|
||||||
|
|
||||||
|
* - acl
|
||||||
|
- Support POSIX ACLs (Access Control Lists). Effective if supported by
|
||||||
|
Kernel. Not to be confused with NTFS ACLs. The option specified as acl
|
||||||
|
enables support for POSIX ACLs.
|
||||||
|
|
||||||
|
Todo list
|
||||||
=========
|
=========
|
||||||
|
- Full journaling support over JBD. Currently journal replaying is supported
|
||||||
- Full journaling support (currently journal replaying is supported) over JBD.
|
which is not necessarily as effectice as JBD would be.
|
||||||
|
|
||||||
|
|
||||||
References
|
References
|
||||||
==========
|
==========
|
||||||
https://www.paragon-software.com/home/ntfs-linux-professional/
|
- Commercial version of the NTFS driver for Linux.
|
||||||
- Commercial version of the NTFS driver for Linux.
|
https://www.paragon-software.com/home/ntfs-linux-professional/
|
||||||
|
|
||||||
almaz.alexandrovich@paragon-software.com
|
- Direct e-mail address for feedback and requests on the NTFS3 implementation.
|
||||||
- Direct e-mail address for feedback and requests on the NTFS3 implementation.
|
almaz.alexandrovich@paragon-software.com
|
||||||
|
@ -300,8 +300,8 @@ pcie_replay_count
|
|||||||
.. kernel-doc:: drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
|
.. kernel-doc:: drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
|
||||||
:doc: pcie_replay_count
|
:doc: pcie_replay_count
|
||||||
|
|
||||||
+GPU SmartShift Information
|
GPU SmartShift Information
|
||||||
============================
|
==========================
|
||||||
|
|
||||||
GPU SmartShift information via sysfs
|
GPU SmartShift information via sysfs
|
||||||
|
|
||||||
|
@ -111,15 +111,6 @@ Component Helper Usage
|
|||||||
.. kernel-doc:: drivers/gpu/drm/drm_drv.c
|
.. kernel-doc:: drivers/gpu/drm/drm_drv.c
|
||||||
:doc: component helper usage recommendations
|
:doc: component helper usage recommendations
|
||||||
|
|
||||||
IRQ Helper Library
|
|
||||||
~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
.. kernel-doc:: drivers/gpu/drm/drm_irq.c
|
|
||||||
:doc: irq helpers
|
|
||||||
|
|
||||||
.. kernel-doc:: drivers/gpu/drm/drm_irq.c
|
|
||||||
:export:
|
|
||||||
|
|
||||||
Memory Manager Initialization
|
Memory Manager Initialization
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
@ -132,20 +132,3 @@ On Family 17h and Family 18h CPUs, additional temperature sensors may report
|
|||||||
Core Complex Die (CCD) temperatures. Up to 8 such temperatures are reported
|
Core Complex Die (CCD) temperatures. Up to 8 such temperatures are reported
|
||||||
as temp{3..10}_input, labeled Tccd{1..8}. Actual support depends on the CPU
|
as temp{3..10}_input, labeled Tccd{1..8}. Actual support depends on the CPU
|
||||||
variant.
|
variant.
|
||||||
|
|
||||||
Various Family 17h and 18h CPUs report voltage and current telemetry
|
|
||||||
information. The following attributes may be reported.
|
|
||||||
|
|
||||||
Attribute Label Description
|
|
||||||
=============== ======= ================
|
|
||||||
in0_input Vcore Core voltage
|
|
||||||
in1_input Vsoc SoC voltage
|
|
||||||
curr1_input Icore Core current
|
|
||||||
curr2_input Isoc SoC current
|
|
||||||
=============== ======= ================
|
|
||||||
|
|
||||||
Current values are raw (unscaled) as reported by the CPU. Core current is
|
|
||||||
reported as multiples of 1A / LSB. SoC is reported as multiples of 0.25A
|
|
||||||
/ LSB. The real current is board specific. Reported currents should be seen
|
|
||||||
as rough guidance, and should be scaled using sensors3.conf as appropriate
|
|
||||||
for a given board.
|
|
||||||
|
@ -18,7 +18,7 @@ types can be added after the security issue of corresponding device driver
|
|||||||
is clarified or fixed in the future.
|
is clarified or fixed in the future.
|
||||||
|
|
||||||
Create/Destroy VDUSE devices
|
Create/Destroy VDUSE devices
|
||||||
------------------------
|
----------------------------
|
||||||
|
|
||||||
VDUSE devices are created as follows:
|
VDUSE devices are created as follows:
|
||||||
|
|
||||||
|
@ -26,11 +26,6 @@ extern char empty_zero_page[PAGE_SIZE];
|
|||||||
|
|
||||||
extern pgd_t swapper_pg_dir[] __aligned(PAGE_SIZE);
|
extern pgd_t swapper_pg_dir[] __aligned(PAGE_SIZE);
|
||||||
|
|
||||||
/* Macro to mark a page protection as uncacheable */
|
|
||||||
#define pgprot_noncached(prot) (__pgprot(pgprot_val(prot) & ~_PAGE_CACHEABLE))
|
|
||||||
|
|
||||||
extern pgd_t swapper_pg_dir[] __aligned(PAGE_SIZE);
|
|
||||||
|
|
||||||
/* to cope with aliasing VIPT cache */
|
/* to cope with aliasing VIPT cache */
|
||||||
#define HAVE_ARCH_UNMAPPED_AREA
|
#define HAVE_ARCH_UNMAPPED_AREA
|
||||||
|
|
||||||
|
@ -1989,8 +1989,6 @@ config ARCH_HIBERNATION_POSSIBLE
|
|||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
source "drivers/firmware/Kconfig"
|
|
||||||
|
|
||||||
if CRYPTO
|
if CRYPTO
|
||||||
source "arch/arm/crypto/Kconfig"
|
source "arch/arm/crypto/Kconfig"
|
||||||
endif
|
endif
|
||||||
|
@ -71,7 +71,6 @@ apb {
|
|||||||
isc: isc@f0008000 {
|
isc: isc@f0008000 {
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&pinctrl_isc_base &pinctrl_isc_data_8bit &pinctrl_isc_data_9_10 &pinctrl_isc_data_11_12>;
|
pinctrl-0 = <&pinctrl_isc_base &pinctrl_isc_data_8bit &pinctrl_isc_data_9_10 &pinctrl_isc_data_11_12>;
|
||||||
status = "okay";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
qspi1: spi@f0024000 {
|
qspi1: spi@f0024000 {
|
||||||
|
@ -196,11 +196,13 @@ vddioddr: VDD_DDR {
|
|||||||
|
|
||||||
regulator-state-standby {
|
regulator-state-standby {
|
||||||
regulator-on-in-suspend;
|
regulator-on-in-suspend;
|
||||||
|
regulator-suspend-microvolt = <1350000>;
|
||||||
regulator-mode = <4>;
|
regulator-mode = <4>;
|
||||||
};
|
};
|
||||||
|
|
||||||
regulator-state-mem {
|
regulator-state-mem {
|
||||||
regulator-on-in-suspend;
|
regulator-on-in-suspend;
|
||||||
|
regulator-suspend-microvolt = <1350000>;
|
||||||
regulator-mode = <4>;
|
regulator-mode = <4>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -353,7 +355,10 @@ &gmac0 {
|
|||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&pinctrl_gmac0_default &pinctrl_gmac0_txck_default &pinctrl_gmac0_phy_irq>;
|
pinctrl-0 = <&pinctrl_gmac0_default
|
||||||
|
&pinctrl_gmac0_mdio_default
|
||||||
|
&pinctrl_gmac0_txck_default
|
||||||
|
&pinctrl_gmac0_phy_irq>;
|
||||||
phy-mode = "rgmii-id";
|
phy-mode = "rgmii-id";
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
@ -368,7 +373,9 @@ &gmac1 {
|
|||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&pinctrl_gmac1_default &pinctrl_gmac1_phy_irq>;
|
pinctrl-0 = <&pinctrl_gmac1_default
|
||||||
|
&pinctrl_gmac1_mdio_default
|
||||||
|
&pinctrl_gmac1_phy_irq>;
|
||||||
phy-mode = "rmii";
|
phy-mode = "rmii";
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
@ -423,14 +430,20 @@ pinctrl_gmac0_default: gmac0_default {
|
|||||||
<PIN_PA15__G0_TXEN>,
|
<PIN_PA15__G0_TXEN>,
|
||||||
<PIN_PA30__G0_RXCK>,
|
<PIN_PA30__G0_RXCK>,
|
||||||
<PIN_PA18__G0_RXDV>,
|
<PIN_PA18__G0_RXDV>,
|
||||||
<PIN_PA22__G0_MDC>,
|
|
||||||
<PIN_PA23__G0_MDIO>,
|
|
||||||
<PIN_PA25__G0_125CK>;
|
<PIN_PA25__G0_125CK>;
|
||||||
|
slew-rate = <0>;
|
||||||
|
bias-disable;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_gmac0_mdio_default: gmac0_mdio_default {
|
||||||
|
pinmux = <PIN_PA22__G0_MDC>,
|
||||||
|
<PIN_PA23__G0_MDIO>;
|
||||||
bias-disable;
|
bias-disable;
|
||||||
};
|
};
|
||||||
|
|
||||||
pinctrl_gmac0_txck_default: gmac0_txck_default {
|
pinctrl_gmac0_txck_default: gmac0_txck_default {
|
||||||
pinmux = <PIN_PA24__G0_TXCK>;
|
pinmux = <PIN_PA24__G0_TXCK>;
|
||||||
|
slew-rate = <0>;
|
||||||
bias-pull-up;
|
bias-pull-up;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -447,8 +460,13 @@ pinctrl_gmac1_default: gmac1_default {
|
|||||||
<PIN_PD25__G1_RX0>,
|
<PIN_PD25__G1_RX0>,
|
||||||
<PIN_PD26__G1_RX1>,
|
<PIN_PD26__G1_RX1>,
|
||||||
<PIN_PD27__G1_RXER>,
|
<PIN_PD27__G1_RXER>,
|
||||||
<PIN_PD24__G1_RXDV>,
|
<PIN_PD24__G1_RXDV>;
|
||||||
<PIN_PD28__G1_MDC>,
|
slew-rate = <0>;
|
||||||
|
bias-disable;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_gmac1_mdio_default: gmac1_mdio_default {
|
||||||
|
pinmux = <PIN_PD28__G1_MDC>,
|
||||||
<PIN_PD29__G1_MDIO>;
|
<PIN_PD29__G1_MDIO>;
|
||||||
bias-disable;
|
bias-disable;
|
||||||
};
|
};
|
||||||
@ -540,6 +558,7 @@ cmd_data {
|
|||||||
<PIN_PA8__SDMMC0_DAT5>,
|
<PIN_PA8__SDMMC0_DAT5>,
|
||||||
<PIN_PA9__SDMMC0_DAT6>,
|
<PIN_PA9__SDMMC0_DAT6>,
|
||||||
<PIN_PA10__SDMMC0_DAT7>;
|
<PIN_PA10__SDMMC0_DAT7>;
|
||||||
|
slew-rate = <0>;
|
||||||
bias-pull-up;
|
bias-pull-up;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -547,6 +566,7 @@ ck_cd_rstn_vddsel {
|
|||||||
pinmux = <PIN_PA0__SDMMC0_CK>,
|
pinmux = <PIN_PA0__SDMMC0_CK>,
|
||||||
<PIN_PA2__SDMMC0_RSTN>,
|
<PIN_PA2__SDMMC0_RSTN>,
|
||||||
<PIN_PA11__SDMMC0_DS>;
|
<PIN_PA11__SDMMC0_DS>;
|
||||||
|
slew-rate = <0>;
|
||||||
bias-pull-up;
|
bias-pull-up;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -558,6 +578,7 @@ cmd_data {
|
|||||||
<PIN_PC0__SDMMC1_DAT1>,
|
<PIN_PC0__SDMMC1_DAT1>,
|
||||||
<PIN_PC1__SDMMC1_DAT2>,
|
<PIN_PC1__SDMMC1_DAT2>,
|
||||||
<PIN_PC2__SDMMC1_DAT3>;
|
<PIN_PC2__SDMMC1_DAT3>;
|
||||||
|
slew-rate = <0>;
|
||||||
bias-pull-up;
|
bias-pull-up;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -566,6 +587,7 @@ ck_cd_rstn_vddsel {
|
|||||||
<PIN_PB28__SDMMC1_RSTN>,
|
<PIN_PB28__SDMMC1_RSTN>,
|
||||||
<PIN_PC5__SDMMC1_1V8SEL>,
|
<PIN_PC5__SDMMC1_1V8SEL>,
|
||||||
<PIN_PC4__SDMMC1_CD>;
|
<PIN_PC4__SDMMC1_CD>;
|
||||||
|
slew-rate = <0>;
|
||||||
bias-pull-up;
|
bias-pull-up;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -577,11 +599,13 @@ cmd_data {
|
|||||||
<PIN_PD6__SDMMC2_DAT1>,
|
<PIN_PD6__SDMMC2_DAT1>,
|
||||||
<PIN_PD7__SDMMC2_DAT2>,
|
<PIN_PD7__SDMMC2_DAT2>,
|
||||||
<PIN_PD8__SDMMC2_DAT3>;
|
<PIN_PD8__SDMMC2_DAT3>;
|
||||||
|
slew-rate = <0>;
|
||||||
bias-pull-up;
|
bias-pull-up;
|
||||||
};
|
};
|
||||||
|
|
||||||
ck {
|
ck {
|
||||||
pinmux = <PIN_PD4__SDMMC2_CK>;
|
pinmux = <PIN_PD4__SDMMC2_CK>;
|
||||||
|
slew-rate = <0>;
|
||||||
bias-pull-up;
|
bias-pull-up;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -634,6 +658,15 @@ &sdmmc2 {
|
|||||||
pinctrl-0 = <&pinctrl_sdmmc2_default>;
|
pinctrl-0 = <&pinctrl_sdmmc2_default>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&shdwc {
|
||||||
|
atmel,shdwc-debouncer = <976>;
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
input@0 {
|
||||||
|
reg = <0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
&spdifrx {
|
&spdifrx {
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&pinctrl_spdifrx_default>;
|
pinctrl-0 = <&pinctrl_spdifrx_default>;
|
||||||
|
@ -65,12 +65,6 @@ fb: fb {
|
|||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
vcsm: vcsm {
|
|
||||||
compatible = "raspberrypi,bcm2835-vcsm";
|
|
||||||
firmware = <&firmware>;
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
|
|
||||||
/* External sound card */
|
/* External sound card */
|
||||||
sound: sound {
|
sound: sound {
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
@ -148,7 +142,14 @@ &vchiq {
|
|||||||
/* Onboard audio */
|
/* Onboard audio */
|
||||||
audio: bcm2835_audio {
|
audio: bcm2835_audio {
|
||||||
compatible = "brcm,bcm2835-audio";
|
compatible = "brcm,bcm2835-audio";
|
||||||
|
brcm,firmware = <&firmware>;
|
||||||
brcm,pwm-channels = <8>;
|
brcm,pwm-channels = <8>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&firmware {
|
||||||
|
vcio: vcio {
|
||||||
|
compatible = "raspberrypi,vcio";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
@ -40,8 +40,8 @@ sd_io_1v8_reg: sd_io_1v8_reg {
|
|||||||
regulator-always-on;
|
regulator-always-on;
|
||||||
regulator-settling-time-us = <5000>;
|
regulator-settling-time-us = <5000>;
|
||||||
gpios = <&expgpio 4 GPIO_ACTIVE_HIGH>;
|
gpios = <&expgpio 4 GPIO_ACTIVE_HIGH>;
|
||||||
states = <1800000 0x1
|
states = <1800000 0x1>,
|
||||||
3300000 0x0>;
|
<3300000 0x0>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -218,7 +218,7 @@ phy1: ethernet-phy@1 {
|
|||||||
|
|
||||||
&pcie0 {
|
&pcie0 {
|
||||||
pci@0,0 {
|
pci@0,0 {
|
||||||
device-type = "pci";
|
device_type = "pci";
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
ranges;
|
ranges;
|
||||||
|
@ -56,6 +56,7 @@ eth {
|
|||||||
panel {
|
panel {
|
||||||
compatible = "edt,etm0700g0dh6";
|
compatible = "edt,etm0700g0dh6";
|
||||||
pinctrl-0 = <&pinctrl_display_gpio>;
|
pinctrl-0 = <&pinctrl_display_gpio>;
|
||||||
|
pinctrl-names = "default";
|
||||||
enable-gpios = <&gpio6 0 GPIO_ACTIVE_HIGH>;
|
enable-gpios = <&gpio6 0 GPIO_ACTIVE_HIGH>;
|
||||||
|
|
||||||
port {
|
port {
|
||||||
@ -76,8 +77,7 @@ reg_usbh1_vbus: regulator-usbh1-vbus {
|
|||||||
regulator-name = "vbus";
|
regulator-name = "vbus";
|
||||||
regulator-min-microvolt = <5000000>;
|
regulator-min-microvolt = <5000000>;
|
||||||
regulator-max-microvolt = <5000000>;
|
regulator-max-microvolt = <5000000>;
|
||||||
gpio = <&gpio1 2 GPIO_ACTIVE_HIGH>;
|
gpio = <&gpio1 2 0>;
|
||||||
enable-active-high;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -388,13 +388,13 @@ MX53_PAD_LVDS0_TX3_P__LDB_LVDS0_TX3 0x80000000
|
|||||||
|
|
||||||
pinctrl_power_button: powerbutgrp {
|
pinctrl_power_button: powerbutgrp {
|
||||||
fsl,pins = <
|
fsl,pins = <
|
||||||
MX53_PAD_SD2_DATA2__GPIO1_13 0x1e4
|
MX53_PAD_SD2_DATA0__GPIO1_15 0x1e4
|
||||||
>;
|
>;
|
||||||
};
|
};
|
||||||
|
|
||||||
pinctrl_power_out: poweroutgrp {
|
pinctrl_power_out: poweroutgrp {
|
||||||
fsl,pins = <
|
fsl,pins = <
|
||||||
MX53_PAD_SD2_DATA0__GPIO1_15 0x1e4
|
MX53_PAD_SD2_DATA2__GPIO1_13 0x1e4
|
||||||
>;
|
>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
#include <dt-bindings/gpio/gpio.h>
|
#include <dt-bindings/gpio/gpio.h>
|
||||||
#include <dt-bindings/interrupt-controller/irq.h>
|
#include <dt-bindings/interrupt-controller/irq.h>
|
||||||
#include <dt-bindings/input/input.h>
|
#include <dt-bindings/input/input.h>
|
||||||
|
#include <dt-bindings/leds/common.h>
|
||||||
#include <dt-bindings/pwm/pwm.h>
|
#include <dt-bindings/pwm/pwm.h>
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
@ -277,6 +278,7 @@ chan@0 {
|
|||||||
led-cur = /bits/ 8 <0x20>;
|
led-cur = /bits/ 8 <0x20>;
|
||||||
max-cur = /bits/ 8 <0x60>;
|
max-cur = /bits/ 8 <0x60>;
|
||||||
reg = <0>;
|
reg = <0>;
|
||||||
|
color = <LED_COLOR_ID_RED>;
|
||||||
};
|
};
|
||||||
|
|
||||||
chan@1 {
|
chan@1 {
|
||||||
@ -284,6 +286,7 @@ chan@1 {
|
|||||||
led-cur = /bits/ 8 <0x20>;
|
led-cur = /bits/ 8 <0x20>;
|
||||||
max-cur = /bits/ 8 <0x60>;
|
max-cur = /bits/ 8 <0x60>;
|
||||||
reg = <1>;
|
reg = <1>;
|
||||||
|
color = <LED_COLOR_ID_GREEN>;
|
||||||
};
|
};
|
||||||
|
|
||||||
chan@2 {
|
chan@2 {
|
||||||
@ -291,6 +294,7 @@ chan@2 {
|
|||||||
led-cur = /bits/ 8 <0x20>;
|
led-cur = /bits/ 8 <0x20>;
|
||||||
max-cur = /bits/ 8 <0x60>;
|
max-cur = /bits/ 8 <0x60>;
|
||||||
reg = <2>;
|
reg = <2>;
|
||||||
|
color = <LED_COLOR_ID_BLUE>;
|
||||||
};
|
};
|
||||||
|
|
||||||
chan@3 {
|
chan@3 {
|
||||||
@ -298,6 +302,7 @@ chan@3 {
|
|||||||
led-cur = /bits/ 8 <0x0>;
|
led-cur = /bits/ 8 <0x0>;
|
||||||
max-cur = /bits/ 8 <0x0>;
|
max-cur = /bits/ 8 <0x0>;
|
||||||
reg = <3>;
|
reg = <3>;
|
||||||
|
color = <LED_COLOR_ID_WHITE>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -176,7 +176,18 @@ &fec {
|
|||||||
pinctrl-0 = <&pinctrl_enet>;
|
pinctrl-0 = <&pinctrl_enet>;
|
||||||
phy-mode = "rgmii-id";
|
phy-mode = "rgmii-id";
|
||||||
phy-reset-gpios = <&gpio1 26 GPIO_ACTIVE_LOW>;
|
phy-reset-gpios = <&gpio1 26 GPIO_ACTIVE_LOW>;
|
||||||
|
phy-handle = <&phy>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
|
mdio {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
phy: ethernet-phy@1 {
|
||||||
|
reg = <1>;
|
||||||
|
qca,clk-out-frequency = <125000000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
&hdmi {
|
&hdmi {
|
||||||
|
@ -4,6 +4,7 @@ dtb-$(CONFIG_ARCH_BCM2835) += overlay_map.dtb
|
|||||||
|
|
||||||
dtbo-$(CONFIG_ARCH_BCM2835) += \
|
dtbo-$(CONFIG_ARCH_BCM2835) += \
|
||||||
act-led.dtbo \
|
act-led.dtbo \
|
||||||
|
adafruit-st7735r.dtbo \
|
||||||
adafruit18.dtbo \
|
adafruit18.dtbo \
|
||||||
adau1977-adc.dtbo \
|
adau1977-adc.dtbo \
|
||||||
adau7002-simple.dtbo \
|
adau7002-simple.dtbo \
|
||||||
|
@ -299,9 +299,23 @@ Params: activelow Set to "on" to invert the sense of the LED
|
|||||||
REQUIRED
|
REQUIRED
|
||||||
|
|
||||||
|
|
||||||
|
Name: adafruit-st7735r
|
||||||
|
Info: Overlay for the SPI-connected Adafruit 1.8" 160x128 or 128x128 displays,
|
||||||
|
based on the ST7735R chip.
|
||||||
|
This overlay uses the newer DRM/KMS "Tiny" driver.
|
||||||
|
Load: dtoverlay=adafruit-st7735r,<param>=<val>
|
||||||
|
Params: 128x128 Select the 128x128 driver (default 160x128)
|
||||||
|
rotate Display rotation {0,90,180,270} (default 90)
|
||||||
|
speed SPI bus speed in Hz (default 4000000)
|
||||||
|
dc_pin GPIO pin for D/C (default 24)
|
||||||
|
reset_pin GPIO pin for RESET (default 25)
|
||||||
|
led_pin GPIO used to control backlight (default 18)
|
||||||
|
|
||||||
|
|
||||||
Name: adafruit18
|
Name: adafruit18
|
||||||
Info: Overlay for the SPI-connected Adafruit 1.8" display (based on the
|
Info: Overlay for the SPI-connected Adafruit 1.8" display (based on the
|
||||||
ST7735R chip). It includes support for the "green tab" version.
|
ST7735R chip). It includes support for the "green tab" version.
|
||||||
|
This overlay uses the older fbtft driver.
|
||||||
Load: dtoverlay=adafruit18,<param>=<val>
|
Load: dtoverlay=adafruit18,<param>=<val>
|
||||||
Params: green Use the adafruit18_green variant.
|
Params: green Use the adafruit18_green variant.
|
||||||
rotate Display rotation {0,90,180,270}
|
rotate Display rotation {0,90,180,270}
|
||||||
|
83
arch/arm/boot/dts/overlays/adafruit-st7735r-overlay.dts
Normal file
83
arch/arm/boot/dts/overlays/adafruit-st7735r-overlay.dts
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
/*
|
||||||
|
* adafruit-st7735r-overlay.dts
|
||||||
|
*
|
||||||
|
* ST7735R based SPI LCD displays. Either
|
||||||
|
* Adafruit 1.8" 160x128
|
||||||
|
* or
|
||||||
|
* Okaya 1.44" 128x128
|
||||||
|
*/
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
#include <dt-bindings/gpio/gpio.h>
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2835";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&spidev0>;
|
||||||
|
__overlay__ {
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&gpio>;
|
||||||
|
__overlay__ {
|
||||||
|
adafruit_pins: adafruit_pins {
|
||||||
|
brcm,pins = <25 24>;
|
||||||
|
brcm,function = <1>; /* out */
|
||||||
|
};
|
||||||
|
backlight_pins: backlight_pins {
|
||||||
|
brcm,pins = <18>;
|
||||||
|
brcm,function = <1>; /* out */
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@2 {
|
||||||
|
target-path = "/";
|
||||||
|
__overlay__ {
|
||||||
|
af18_backlight: backlight {
|
||||||
|
compatible = "gpio-backlight";
|
||||||
|
gpios = <&gpio 18 GPIO_ACTIVE_HIGH>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&backlight_pins>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@3 {
|
||||||
|
target = <&spi0>;
|
||||||
|
__overlay__ {
|
||||||
|
/* needed to avoid dtc warning */
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
af18: adafruit18@0 {
|
||||||
|
compatible = "jianda,jd-t18003-t01";
|
||||||
|
reg = <0>;
|
||||||
|
spi-max-frequency = <32000000>;
|
||||||
|
dc-gpios = <&gpio 24 GPIO_ACTIVE_HIGH>;
|
||||||
|
reset-gpios = <&gpio 25 GPIO_ACTIVE_HIGH>;
|
||||||
|
rotate = <90>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&adafruit_pins>;
|
||||||
|
backlight = <&af18_backlight>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
__overrides__ {
|
||||||
|
128x128 = <&af18>, "compatible=okaya,rh128128t";
|
||||||
|
speed = <&af18>,"spi-max-frequency:0";
|
||||||
|
rotate = <&af18>,"rotate:0";
|
||||||
|
dc_pin = <&af18>,"dc-gpios:4", <&adafruit_pins>,"brcm,pins:4";
|
||||||
|
reset_pin = <&af18>,"reset-gpios:4",
|
||||||
|
<&adafruit_pins>,"brcm,pins:0";
|
||||||
|
led_pin = <&af18_backlight>,"gpios:4",
|
||||||
|
<&backlight_pins>,"brcm,pins:0";
|
||||||
|
};
|
||||||
|
};
|
@ -43,6 +43,11 @@ hb_adc: pcm186x@4a {
|
|||||||
clocks = <&dacpro_osc>;
|
clocks = <&dacpro_osc>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
hpamp: hpamp@60 {
|
||||||
|
compatible = "ti,tpa6130a2";
|
||||||
|
reg = <0x60>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -198,7 +198,7 @@ cxo_board: cxo_board {
|
|||||||
clock-frequency = <19200000>;
|
clock-frequency = <19200000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
pxo_board {
|
pxo_board: pxo_board {
|
||||||
compatible = "fixed-clock";
|
compatible = "fixed-clock";
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
clock-frequency = <27000000>;
|
clock-frequency = <27000000>;
|
||||||
@ -1148,22 +1148,21 @@ tcsr: syscon@1a400000 {
|
|||||||
};
|
};
|
||||||
|
|
||||||
gpu: adreno-3xx@4300000 {
|
gpu: adreno-3xx@4300000 {
|
||||||
compatible = "qcom,adreno-3xx";
|
compatible = "qcom,adreno-320.2", "qcom,adreno";
|
||||||
reg = <0x04300000 0x20000>;
|
reg = <0x04300000 0x20000>;
|
||||||
reg-names = "kgsl_3d0_reg_memory";
|
reg-names = "kgsl_3d0_reg_memory";
|
||||||
interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
interrupt-names = "kgsl_3d0_irq";
|
interrupt-names = "kgsl_3d0_irq";
|
||||||
clock-names =
|
clock-names =
|
||||||
"core_clk",
|
"core",
|
||||||
"iface_clk",
|
"iface",
|
||||||
"mem_clk",
|
"mem",
|
||||||
"mem_iface_clk";
|
"mem_iface";
|
||||||
clocks =
|
clocks =
|
||||||
<&mmcc GFX3D_CLK>,
|
<&mmcc GFX3D_CLK>,
|
||||||
<&mmcc GFX3D_AHB_CLK>,
|
<&mmcc GFX3D_AHB_CLK>,
|
||||||
<&mmcc GFX3D_AXI_CLK>,
|
<&mmcc GFX3D_AXI_CLK>,
|
||||||
<&mmcc MMSS_IMEM_AHB_CLK>;
|
<&mmcc MMSS_IMEM_AHB_CLK>;
|
||||||
qcom,chipid = <0x03020002>;
|
|
||||||
|
|
||||||
iommus = <&gfx3d 0
|
iommus = <&gfx3d 0
|
||||||
&gfx3d 1
|
&gfx3d 1
|
||||||
@ -1306,7 +1305,7 @@ dsi0_phy: dsi-phy@4700200 {
|
|||||||
reg-names = "dsi_pll", "dsi_phy", "dsi_phy_regulator";
|
reg-names = "dsi_pll", "dsi_phy", "dsi_phy_regulator";
|
||||||
clock-names = "iface_clk", "ref";
|
clock-names = "iface_clk", "ref";
|
||||||
clocks = <&mmcc DSI_M_AHB_CLK>,
|
clocks = <&mmcc DSI_M_AHB_CLK>,
|
||||||
<&cxo_board>;
|
<&pxo_board>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -75,6 +75,17 @@ soc {
|
|||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges;
|
ranges;
|
||||||
|
|
||||||
|
securam: securam@e0000000 {
|
||||||
|
compatible = "microchip,sama7g5-securam", "atmel,sama5d2-securam", "mmio-sram";
|
||||||
|
reg = <0xe0000000 0x4000>;
|
||||||
|
clocks = <&pmc PMC_TYPE_PERIPHERAL 18>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
ranges = <0 0xe0000000 0x4000>;
|
||||||
|
no-memory-wc;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
secumod: secumod@e0004000 {
|
secumod: secumod@e0004000 {
|
||||||
compatible = "microchip,sama7g5-secumod", "atmel,sama5d2-secumod", "syscon";
|
compatible = "microchip,sama7g5-secumod", "atmel,sama5d2-secumod", "syscon";
|
||||||
reg = <0xe0004000 0x4000>;
|
reg = <0xe0004000 0x4000>;
|
||||||
@ -111,6 +122,17 @@ pmc: pmc@e0018000 {
|
|||||||
clock-names = "td_slck", "md_slck", "main_xtal";
|
clock-names = "td_slck", "md_slck", "main_xtal";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
shdwc: shdwc@e001d010 {
|
||||||
|
compatible = "microchip,sama7g5-shdwc", "syscon";
|
||||||
|
reg = <0xe001d010 0x10>;
|
||||||
|
clocks = <&clk32k 0>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
atmel,wakeup-rtc-timer;
|
||||||
|
atmel,wakeup-rtt-timer;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
rtt: rtt@e001d020 {
|
rtt: rtt@e001d020 {
|
||||||
compatible = "microchip,sama7g5-rtt", "microchip,sam9x60-rtt", "atmel,at91sam9260-rtt";
|
compatible = "microchip,sama7g5-rtt", "microchip,sam9x60-rtt", "atmel,at91sam9260-rtt";
|
||||||
reg = <0xe001d020 0x30>;
|
reg = <0xe001d020 0x30>;
|
||||||
@ -137,6 +159,11 @@ ps_wdt: watchdog@e001d180 {
|
|||||||
clocks = <&clk32k 0>;
|
clocks = <&clk32k 0>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
chipid@e0020000 {
|
||||||
|
compatible = "microchip,sama7g5-chipid";
|
||||||
|
reg = <0xe0020000 0x8>;
|
||||||
|
};
|
||||||
|
|
||||||
sdmmc0: mmc@e1204000 {
|
sdmmc0: mmc@e1204000 {
|
||||||
compatible = "microchip,sama7g5-sdhci", "microchip,sam9x60-sdhci";
|
compatible = "microchip,sama7g5-sdhci", "microchip,sam9x60-sdhci";
|
||||||
reg = <0xe1204000 0x4000>;
|
reg = <0xe1204000 0x4000>;
|
||||||
@ -515,6 +542,18 @@ spi11: spi@400 {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
uddrc: uddrc@e3800000 {
|
||||||
|
compatible = "microchip,sama7g5-uddrc";
|
||||||
|
reg = <0xe3800000 0x4000>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
ddr3phy: ddr3phy@e3804000 {
|
||||||
|
compatible = "microchip,sama7g5-ddr3phy";
|
||||||
|
reg = <0xe3804000 0x1000>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
gic: interrupt-controller@e8c11000 {
|
gic: interrupt-controller@e8c11000 {
|
||||||
compatible = "arm,cortex-a7-gic";
|
compatible = "arm,cortex-a7-gic";
|
||||||
#interrupt-cells = <3>;
|
#interrupt-cells = <3>;
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
* TAKE CARE WHEN MAINTAINING THIS FILE TO PROPAGATE ANY RELEVANT
|
* TAKE CARE WHEN MAINTAINING THIS FILE TO PROPAGATE ANY RELEVANT
|
||||||
* CHANGES TO vexpress-v2m.dtsi!
|
* CHANGES TO vexpress-v2m.dtsi!
|
||||||
*/
|
*/
|
||||||
|
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
v2m_fixed_3v3: fixed-regulator-0 {
|
v2m_fixed_3v3: fixed-regulator-0 {
|
||||||
@ -101,16 +102,68 @@ led-8 {
|
|||||||
};
|
};
|
||||||
|
|
||||||
bus@8000000 {
|
bus@8000000 {
|
||||||
motherboard-bus {
|
compatible = "simple-bus";
|
||||||
model = "V2M-P1";
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
#interrupt-cells = <1>;
|
||||||
|
interrupt-map-mask = <0 63>;
|
||||||
|
interrupt-map = <0 0 &gic GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 1 &gic GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 2 &gic GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 3 &gic GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 4 &gic GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 5 &gic GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 6 &gic GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 7 &gic GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 8 &gic GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 9 &gic GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 10 &gic GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 11 &gic GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 12 &gic GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 13 &gic GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 14 &gic GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 15 &gic GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 16 &gic GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 17 &gic GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 18 &gic GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 19 &gic GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 20 &gic GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 21 &gic GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 22 &gic GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 23 &gic GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 24 &gic GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 25 &gic GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 26 &gic GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 27 &gic GIC_SPI 27 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 28 &gic GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 29 &gic GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 30 &gic GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 31 &gic GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 32 &gic GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 33 &gic GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 34 &gic GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 35 &gic GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 36 &gic GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 37 &gic GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 38 &gic GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 39 &gic GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 40 &gic GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 41 &gic GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 42 &gic GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
|
||||||
|
motherboard-bus@8000000 {
|
||||||
arm,hbi = <0x190>;
|
arm,hbi = <0x190>;
|
||||||
arm,vexpress,site = <0>;
|
arm,vexpress,site = <0>;
|
||||||
arm,v2m-memory-map = "rs1";
|
|
||||||
compatible = "arm,vexpress,v2m-p1", "simple-bus";
|
compatible = "arm,vexpress,v2m-p1", "simple-bus";
|
||||||
#address-cells = <2>; /* SMB chipselect number and offset */
|
#address-cells = <2>; /* SMB chipselect number and offset */
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
#interrupt-cells = <1>;
|
ranges = <0 0 0x08000000 0x04000000>,
|
||||||
ranges;
|
<1 0 0x14000000 0x04000000>,
|
||||||
|
<2 0 0x18000000 0x04000000>,
|
||||||
|
<3 0 0x1c000000 0x04000000>,
|
||||||
|
<4 0 0x0c000000 0x04000000>,
|
||||||
|
<5 0 0x10000000 0x04000000>;
|
||||||
|
|
||||||
nor_flash: flash@0 {
|
nor_flash: flash@0 {
|
||||||
compatible = "arm,vexpress-flash", "cfi-flash";
|
compatible = "arm,vexpress-flash", "cfi-flash";
|
||||||
@ -215,7 +268,7 @@ aaci@40000 {
|
|||||||
clock-names = "apb_pclk";
|
clock-names = "apb_pclk";
|
||||||
};
|
};
|
||||||
|
|
||||||
mmci@50000 {
|
mmc@50000 {
|
||||||
compatible = "arm,pl180", "arm,primecell";
|
compatible = "arm,pl180", "arm,primecell";
|
||||||
reg = <0x050000 0x1000>;
|
reg = <0x050000 0x1000>;
|
||||||
interrupts = <9>, <10>;
|
interrupts = <9>, <10>;
|
||||||
@ -275,7 +328,7 @@ v2m_serial3: serial@c0000 {
|
|||||||
clock-names = "uartclk", "apb_pclk";
|
clock-names = "uartclk", "apb_pclk";
|
||||||
};
|
};
|
||||||
|
|
||||||
wdt@f0000 {
|
watchdog@f0000 {
|
||||||
compatible = "arm,sp805", "arm,primecell";
|
compatible = "arm,sp805", "arm,primecell";
|
||||||
reg = <0x0f0000 0x1000>;
|
reg = <0x0f0000 0x1000>;
|
||||||
interrupts = <0>;
|
interrupts = <0>;
|
||||||
|
@ -17,18 +17,73 @@
|
|||||||
* TAKE CARE WHEN MAINTAINING THIS FILE TO PROPAGATE ANY RELEVANT
|
* TAKE CARE WHEN MAINTAINING THIS FILE TO PROPAGATE ANY RELEVANT
|
||||||
* CHANGES TO vexpress-v2m-rs1.dtsi!
|
* CHANGES TO vexpress-v2m-rs1.dtsi!
|
||||||
*/
|
*/
|
||||||
|
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
bus@4000000 {
|
bus@40000000 {
|
||||||
motherboard {
|
compatible = "simple-bus";
|
||||||
model = "V2M-P1";
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
ranges = <0x40000000 0x40000000 0x10000000>,
|
||||||
|
<0x10000000 0x10000000 0x00020000>;
|
||||||
|
|
||||||
|
#interrupt-cells = <1>;
|
||||||
|
interrupt-map-mask = <0 63>;
|
||||||
|
interrupt-map = <0 0 &gic GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 1 &gic GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 2 &gic GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 3 &gic GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 4 &gic GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 5 &gic GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 6 &gic GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 7 &gic GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 8 &gic GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 9 &gic GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 10 &gic GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 11 &gic GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 12 &gic GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 13 &gic GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 14 &gic GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 15 &gic GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 16 &gic GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 17 &gic GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 18 &gic GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 19 &gic GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 20 &gic GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 21 &gic GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 22 &gic GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 23 &gic GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 24 &gic GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 25 &gic GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 26 &gic GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 27 &gic GIC_SPI 27 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 28 &gic GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 29 &gic GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 30 &gic GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 31 &gic GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 32 &gic GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 33 &gic GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 34 &gic GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 35 &gic GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 36 &gic GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 37 &gic GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 38 &gic GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 39 &gic GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 40 &gic GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 41 &gic GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 42 &gic GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
|
||||||
|
motherboard-bus@40000000 {
|
||||||
arm,hbi = <0x190>;
|
arm,hbi = <0x190>;
|
||||||
arm,vexpress,site = <0>;
|
arm,vexpress,site = <0>;
|
||||||
compatible = "arm,vexpress,v2m-p1", "simple-bus";
|
compatible = "arm,vexpress,v2m-p1", "simple-bus";
|
||||||
#address-cells = <2>; /* SMB chipselect number and offset */
|
#address-cells = <2>; /* SMB chipselect number and offset */
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
#interrupt-cells = <1>;
|
ranges = <0 0 0x40000000 0x04000000>,
|
||||||
ranges;
|
<1 0 0x44000000 0x04000000>,
|
||||||
|
<2 0 0x48000000 0x04000000>,
|
||||||
|
<3 0 0x4c000000 0x04000000>,
|
||||||
|
<7 0 0x10000000 0x00020000>;
|
||||||
|
|
||||||
flash@0,00000000 {
|
flash@0,00000000 {
|
||||||
compatible = "arm,vexpress-flash", "cfi-flash";
|
compatible = "arm,vexpress-flash", "cfi-flash";
|
||||||
|
@ -237,62 +237,7 @@ energy {
|
|||||||
};
|
};
|
||||||
|
|
||||||
bus@8000000 {
|
bus@8000000 {
|
||||||
compatible = "simple-bus";
|
ranges = <0x8000000 0 0x8000000 0x18000000>;
|
||||||
|
|
||||||
#address-cells = <2>;
|
|
||||||
#size-cells = <1>;
|
|
||||||
ranges = <0 0 0 0x08000000 0x04000000>,
|
|
||||||
<1 0 0 0x14000000 0x04000000>,
|
|
||||||
<2 0 0 0x18000000 0x04000000>,
|
|
||||||
<3 0 0 0x1c000000 0x04000000>,
|
|
||||||
<4 0 0 0x0c000000 0x04000000>,
|
|
||||||
<5 0 0 0x10000000 0x04000000>;
|
|
||||||
|
|
||||||
#interrupt-cells = <1>;
|
|
||||||
interrupt-map-mask = <0 0 63>;
|
|
||||||
interrupt-map = <0 0 0 &gic 0 0 4>,
|
|
||||||
<0 0 1 &gic 0 1 4>,
|
|
||||||
<0 0 2 &gic 0 2 4>,
|
|
||||||
<0 0 3 &gic 0 3 4>,
|
|
||||||
<0 0 4 &gic 0 4 4>,
|
|
||||||
<0 0 5 &gic 0 5 4>,
|
|
||||||
<0 0 6 &gic 0 6 4>,
|
|
||||||
<0 0 7 &gic 0 7 4>,
|
|
||||||
<0 0 8 &gic 0 8 4>,
|
|
||||||
<0 0 9 &gic 0 9 4>,
|
|
||||||
<0 0 10 &gic 0 10 4>,
|
|
||||||
<0 0 11 &gic 0 11 4>,
|
|
||||||
<0 0 12 &gic 0 12 4>,
|
|
||||||
<0 0 13 &gic 0 13 4>,
|
|
||||||
<0 0 14 &gic 0 14 4>,
|
|
||||||
<0 0 15 &gic 0 15 4>,
|
|
||||||
<0 0 16 &gic 0 16 4>,
|
|
||||||
<0 0 17 &gic 0 17 4>,
|
|
||||||
<0 0 18 &gic 0 18 4>,
|
|
||||||
<0 0 19 &gic 0 19 4>,
|
|
||||||
<0 0 20 &gic 0 20 4>,
|
|
||||||
<0 0 21 &gic 0 21 4>,
|
|
||||||
<0 0 22 &gic 0 22 4>,
|
|
||||||
<0 0 23 &gic 0 23 4>,
|
|
||||||
<0 0 24 &gic 0 24 4>,
|
|
||||||
<0 0 25 &gic 0 25 4>,
|
|
||||||
<0 0 26 &gic 0 26 4>,
|
|
||||||
<0 0 27 &gic 0 27 4>,
|
|
||||||
<0 0 28 &gic 0 28 4>,
|
|
||||||
<0 0 29 &gic 0 29 4>,
|
|
||||||
<0 0 30 &gic 0 30 4>,
|
|
||||||
<0 0 31 &gic 0 31 4>,
|
|
||||||
<0 0 32 &gic 0 32 4>,
|
|
||||||
<0 0 33 &gic 0 33 4>,
|
|
||||||
<0 0 34 &gic 0 34 4>,
|
|
||||||
<0 0 35 &gic 0 35 4>,
|
|
||||||
<0 0 36 &gic 0 36 4>,
|
|
||||||
<0 0 37 &gic 0 37 4>,
|
|
||||||
<0 0 38 &gic 0 38 4>,
|
|
||||||
<0 0 39 &gic 0 39 4>,
|
|
||||||
<0 0 40 &gic 0 40 4>,
|
|
||||||
<0 0 41 &gic 0 41 4>,
|
|
||||||
<0 0 42 &gic 0 42 4>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
site2: hsb@40000000 {
|
site2: hsb@40000000 {
|
||||||
|
@ -609,62 +609,7 @@ etm2_out_port: endpoint {
|
|||||||
};
|
};
|
||||||
|
|
||||||
smb: bus@8000000 {
|
smb: bus@8000000 {
|
||||||
compatible = "simple-bus";
|
ranges = <0x8000000 0 0x8000000 0x18000000>;
|
||||||
|
|
||||||
#address-cells = <2>;
|
|
||||||
#size-cells = <1>;
|
|
||||||
ranges = <0 0 0 0x08000000 0x04000000>,
|
|
||||||
<1 0 0 0x14000000 0x04000000>,
|
|
||||||
<2 0 0 0x18000000 0x04000000>,
|
|
||||||
<3 0 0 0x1c000000 0x04000000>,
|
|
||||||
<4 0 0 0x0c000000 0x04000000>,
|
|
||||||
<5 0 0 0x10000000 0x04000000>;
|
|
||||||
|
|
||||||
#interrupt-cells = <1>;
|
|
||||||
interrupt-map-mask = <0 0 63>;
|
|
||||||
interrupt-map = <0 0 0 &gic 0 0 4>,
|
|
||||||
<0 0 1 &gic 0 1 4>,
|
|
||||||
<0 0 2 &gic 0 2 4>,
|
|
||||||
<0 0 3 &gic 0 3 4>,
|
|
||||||
<0 0 4 &gic 0 4 4>,
|
|
||||||
<0 0 5 &gic 0 5 4>,
|
|
||||||
<0 0 6 &gic 0 6 4>,
|
|
||||||
<0 0 7 &gic 0 7 4>,
|
|
||||||
<0 0 8 &gic 0 8 4>,
|
|
||||||
<0 0 9 &gic 0 9 4>,
|
|
||||||
<0 0 10 &gic 0 10 4>,
|
|
||||||
<0 0 11 &gic 0 11 4>,
|
|
||||||
<0 0 12 &gic 0 12 4>,
|
|
||||||
<0 0 13 &gic 0 13 4>,
|
|
||||||
<0 0 14 &gic 0 14 4>,
|
|
||||||
<0 0 15 &gic 0 15 4>,
|
|
||||||
<0 0 16 &gic 0 16 4>,
|
|
||||||
<0 0 17 &gic 0 17 4>,
|
|
||||||
<0 0 18 &gic 0 18 4>,
|
|
||||||
<0 0 19 &gic 0 19 4>,
|
|
||||||
<0 0 20 &gic 0 20 4>,
|
|
||||||
<0 0 21 &gic 0 21 4>,
|
|
||||||
<0 0 22 &gic 0 22 4>,
|
|
||||||
<0 0 23 &gic 0 23 4>,
|
|
||||||
<0 0 24 &gic 0 24 4>,
|
|
||||||
<0 0 25 &gic 0 25 4>,
|
|
||||||
<0 0 26 &gic 0 26 4>,
|
|
||||||
<0 0 27 &gic 0 27 4>,
|
|
||||||
<0 0 28 &gic 0 28 4>,
|
|
||||||
<0 0 29 &gic 0 29 4>,
|
|
||||||
<0 0 30 &gic 0 30 4>,
|
|
||||||
<0 0 31 &gic 0 31 4>,
|
|
||||||
<0 0 32 &gic 0 32 4>,
|
|
||||||
<0 0 33 &gic 0 33 4>,
|
|
||||||
<0 0 34 &gic 0 34 4>,
|
|
||||||
<0 0 35 &gic 0 35 4>,
|
|
||||||
<0 0 36 &gic 0 36 4>,
|
|
||||||
<0 0 37 &gic 0 37 4>,
|
|
||||||
<0 0 38 &gic 0 38 4>,
|
|
||||||
<0 0 39 &gic 0 39 4>,
|
|
||||||
<0 0 40 &gic 0 40 4>,
|
|
||||||
<0 0 41 &gic 0 41 4>,
|
|
||||||
<0 0 42 &gic 0 42 4>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
site2: hsb@40000000 {
|
site2: hsb@40000000 {
|
||||||
|
@ -207,62 +207,7 @@ temp-dcc {
|
|||||||
};
|
};
|
||||||
|
|
||||||
smb: bus@8000000 {
|
smb: bus@8000000 {
|
||||||
compatible = "simple-bus";
|
ranges = <0 0x8000000 0x18000000>;
|
||||||
|
|
||||||
#address-cells = <2>;
|
|
||||||
#size-cells = <1>;
|
|
||||||
ranges = <0 0 0x08000000 0x04000000>,
|
|
||||||
<1 0 0x14000000 0x04000000>,
|
|
||||||
<2 0 0x18000000 0x04000000>,
|
|
||||||
<3 0 0x1c000000 0x04000000>,
|
|
||||||
<4 0 0x0c000000 0x04000000>,
|
|
||||||
<5 0 0x10000000 0x04000000>;
|
|
||||||
|
|
||||||
#interrupt-cells = <1>;
|
|
||||||
interrupt-map-mask = <0 0 63>;
|
|
||||||
interrupt-map = <0 0 0 &gic 0 0 4>,
|
|
||||||
<0 0 1 &gic 0 1 4>,
|
|
||||||
<0 0 2 &gic 0 2 4>,
|
|
||||||
<0 0 3 &gic 0 3 4>,
|
|
||||||
<0 0 4 &gic 0 4 4>,
|
|
||||||
<0 0 5 &gic 0 5 4>,
|
|
||||||
<0 0 6 &gic 0 6 4>,
|
|
||||||
<0 0 7 &gic 0 7 4>,
|
|
||||||
<0 0 8 &gic 0 8 4>,
|
|
||||||
<0 0 9 &gic 0 9 4>,
|
|
||||||
<0 0 10 &gic 0 10 4>,
|
|
||||||
<0 0 11 &gic 0 11 4>,
|
|
||||||
<0 0 12 &gic 0 12 4>,
|
|
||||||
<0 0 13 &gic 0 13 4>,
|
|
||||||
<0 0 14 &gic 0 14 4>,
|
|
||||||
<0 0 15 &gic 0 15 4>,
|
|
||||||
<0 0 16 &gic 0 16 4>,
|
|
||||||
<0 0 17 &gic 0 17 4>,
|
|
||||||
<0 0 18 &gic 0 18 4>,
|
|
||||||
<0 0 19 &gic 0 19 4>,
|
|
||||||
<0 0 20 &gic 0 20 4>,
|
|
||||||
<0 0 21 &gic 0 21 4>,
|
|
||||||
<0 0 22 &gic 0 22 4>,
|
|
||||||
<0 0 23 &gic 0 23 4>,
|
|
||||||
<0 0 24 &gic 0 24 4>,
|
|
||||||
<0 0 25 &gic 0 25 4>,
|
|
||||||
<0 0 26 &gic 0 26 4>,
|
|
||||||
<0 0 27 &gic 0 27 4>,
|
|
||||||
<0 0 28 &gic 0 28 4>,
|
|
||||||
<0 0 29 &gic 0 29 4>,
|
|
||||||
<0 0 30 &gic 0 30 4>,
|
|
||||||
<0 0 31 &gic 0 31 4>,
|
|
||||||
<0 0 32 &gic 0 32 4>,
|
|
||||||
<0 0 33 &gic 0 33 4>,
|
|
||||||
<0 0 34 &gic 0 34 4>,
|
|
||||||
<0 0 35 &gic 0 35 4>,
|
|
||||||
<0 0 36 &gic 0 36 4>,
|
|
||||||
<0 0 37 &gic 0 37 4>,
|
|
||||||
<0 0 38 &gic 0 38 4>,
|
|
||||||
<0 0 39 &gic 0 39 4>,
|
|
||||||
<0 0 40 &gic 0 40 4>,
|
|
||||||
<0 0 41 &gic 0 41 4>,
|
|
||||||
<0 0 42 &gic 0 42 4>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
site2: hsb@40000000 {
|
site2: hsb@40000000 {
|
||||||
|
@ -295,64 +295,6 @@ power-vd10-s3 {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
smb: bus@4000000 {
|
|
||||||
compatible = "simple-bus";
|
|
||||||
|
|
||||||
#address-cells = <2>;
|
|
||||||
#size-cells = <1>;
|
|
||||||
ranges = <0 0 0x40000000 0x04000000>,
|
|
||||||
<1 0 0x44000000 0x04000000>,
|
|
||||||
<2 0 0x48000000 0x04000000>,
|
|
||||||
<3 0 0x4c000000 0x04000000>,
|
|
||||||
<7 0 0x10000000 0x00020000>;
|
|
||||||
|
|
||||||
#interrupt-cells = <1>;
|
|
||||||
interrupt-map-mask = <0 0 63>;
|
|
||||||
interrupt-map = <0 0 0 &gic 0 0 4>,
|
|
||||||
<0 0 1 &gic 0 1 4>,
|
|
||||||
<0 0 2 &gic 0 2 4>,
|
|
||||||
<0 0 3 &gic 0 3 4>,
|
|
||||||
<0 0 4 &gic 0 4 4>,
|
|
||||||
<0 0 5 &gic 0 5 4>,
|
|
||||||
<0 0 6 &gic 0 6 4>,
|
|
||||||
<0 0 7 &gic 0 7 4>,
|
|
||||||
<0 0 8 &gic 0 8 4>,
|
|
||||||
<0 0 9 &gic 0 9 4>,
|
|
||||||
<0 0 10 &gic 0 10 4>,
|
|
||||||
<0 0 11 &gic 0 11 4>,
|
|
||||||
<0 0 12 &gic 0 12 4>,
|
|
||||||
<0 0 13 &gic 0 13 4>,
|
|
||||||
<0 0 14 &gic 0 14 4>,
|
|
||||||
<0 0 15 &gic 0 15 4>,
|
|
||||||
<0 0 16 &gic 0 16 4>,
|
|
||||||
<0 0 17 &gic 0 17 4>,
|
|
||||||
<0 0 18 &gic 0 18 4>,
|
|
||||||
<0 0 19 &gic 0 19 4>,
|
|
||||||
<0 0 20 &gic 0 20 4>,
|
|
||||||
<0 0 21 &gic 0 21 4>,
|
|
||||||
<0 0 22 &gic 0 22 4>,
|
|
||||||
<0 0 23 &gic 0 23 4>,
|
|
||||||
<0 0 24 &gic 0 24 4>,
|
|
||||||
<0 0 25 &gic 0 25 4>,
|
|
||||||
<0 0 26 &gic 0 26 4>,
|
|
||||||
<0 0 27 &gic 0 27 4>,
|
|
||||||
<0 0 28 &gic 0 28 4>,
|
|
||||||
<0 0 29 &gic 0 29 4>,
|
|
||||||
<0 0 30 &gic 0 30 4>,
|
|
||||||
<0 0 31 &gic 0 31 4>,
|
|
||||||
<0 0 32 &gic 0 32 4>,
|
|
||||||
<0 0 33 &gic 0 33 4>,
|
|
||||||
<0 0 34 &gic 0 34 4>,
|
|
||||||
<0 0 35 &gic 0 35 4>,
|
|
||||||
<0 0 36 &gic 0 36 4>,
|
|
||||||
<0 0 37 &gic 0 37 4>,
|
|
||||||
<0 0 38 &gic 0 38 4>,
|
|
||||||
<0 0 39 &gic 0 39 4>,
|
|
||||||
<0 0 40 &gic 0 40 4>,
|
|
||||||
<0 0 41 &gic 0 41 4>,
|
|
||||||
<0 0 42 &gic 0 42 4>;
|
|
||||||
};
|
|
||||||
|
|
||||||
site2: hsb@e0000000 {
|
site2: hsb@e0000000 {
|
||||||
compatible = "simple-bus";
|
compatible = "simple-bus";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
|
@ -40,7 +40,9 @@ EXPORT_SYMBOL(sharpsl_param);
|
|||||||
|
|
||||||
void sharpsl_save_param(void)
|
void sharpsl_save_param(void)
|
||||||
{
|
{
|
||||||
memcpy(&sharpsl_param, param_start(PARAM_BASE), sizeof(struct sharpsl_param_info));
|
struct sharpsl_param_info *params = param_start(PARAM_BASE);
|
||||||
|
|
||||||
|
memcpy(&sharpsl_param, params, sizeof(*params));
|
||||||
|
|
||||||
if (sharpsl_param.comadj_keyword != COMADJ_MAGIC)
|
if (sharpsl_param.comadj_keyword != COMADJ_MAGIC)
|
||||||
sharpsl_param.comadj=-1;
|
sharpsl_param.comadj=-1;
|
||||||
|
@ -1320,6 +1320,7 @@ CONFIG_BTRFS_FS=m
|
|||||||
CONFIG_BTRFS_FS_POSIX_ACL=y
|
CONFIG_BTRFS_FS_POSIX_ACL=y
|
||||||
CONFIG_NILFS2_FS=m
|
CONFIG_NILFS2_FS=m
|
||||||
CONFIG_F2FS_FS=y
|
CONFIG_F2FS_FS=y
|
||||||
|
CONFIG_F2FS_FS_SECURITY=y
|
||||||
CONFIG_FS_ENCRYPTION=y
|
CONFIG_FS_ENCRYPTION=y
|
||||||
CONFIG_FANOTIFY=y
|
CONFIG_FANOTIFY=y
|
||||||
CONFIG_QFMT_V1=m
|
CONFIG_QFMT_V1=m
|
||||||
|
@ -509,6 +509,7 @@ CONFIG_BCMGENET=y
|
|||||||
CONFIG_ENC28J60=m
|
CONFIG_ENC28J60=m
|
||||||
CONFIG_QCA7000_SPI=m
|
CONFIG_QCA7000_SPI=m
|
||||||
CONFIG_QCA7000_UART=m
|
CONFIG_QCA7000_UART=m
|
||||||
|
CONFIG_R8169=m
|
||||||
CONFIG_WIZNET_W5100=m
|
CONFIG_WIZNET_W5100=m
|
||||||
CONFIG_WIZNET_W5100_SPI=m
|
CONFIG_WIZNET_W5100_SPI=m
|
||||||
CONFIG_MICREL_PHY=y
|
CONFIG_MICREL_PHY=y
|
||||||
@ -1358,6 +1359,7 @@ CONFIG_BTRFS_FS=m
|
|||||||
CONFIG_BTRFS_FS_POSIX_ACL=y
|
CONFIG_BTRFS_FS_POSIX_ACL=y
|
||||||
CONFIG_NILFS2_FS=m
|
CONFIG_NILFS2_FS=m
|
||||||
CONFIG_F2FS_FS=y
|
CONFIG_F2FS_FS=y
|
||||||
|
CONFIG_F2FS_FS_SECURITY=y
|
||||||
CONFIG_FS_ENCRYPTION=y
|
CONFIG_FS_ENCRYPTION=y
|
||||||
CONFIG_FANOTIFY=y
|
CONFIG_FANOTIFY=y
|
||||||
CONFIG_QFMT_V1=m
|
CONFIG_QFMT_V1=m
|
||||||
|
@ -1331,6 +1331,7 @@ CONFIG_BTRFS_FS=m
|
|||||||
CONFIG_BTRFS_FS_POSIX_ACL=y
|
CONFIG_BTRFS_FS_POSIX_ACL=y
|
||||||
CONFIG_NILFS2_FS=m
|
CONFIG_NILFS2_FS=m
|
||||||
CONFIG_F2FS_FS=y
|
CONFIG_F2FS_FS=y
|
||||||
|
CONFIG_F2FS_FS_SECURITY=y
|
||||||
CONFIG_FANOTIFY=y
|
CONFIG_FANOTIFY=y
|
||||||
CONFIG_QFMT_V1=m
|
CONFIG_QFMT_V1=m
|
||||||
CONFIG_QFMT_V2=m
|
CONFIG_QFMT_V2=m
|
||||||
|
@ -76,6 +76,7 @@ CONFIG_REGULATOR_FIXED_VOLTAGE=y
|
|||||||
CONFIG_DRM=y
|
CONFIG_DRM=y
|
||||||
CONFIG_DRM_PANEL_ILITEK_IL9322=y
|
CONFIG_DRM_PANEL_ILITEK_IL9322=y
|
||||||
CONFIG_DRM_TVE200=y
|
CONFIG_DRM_TVE200=y
|
||||||
|
CONFIG_FB=y
|
||||||
CONFIG_LOGO=y
|
CONFIG_LOGO=y
|
||||||
CONFIG_USB=y
|
CONFIG_USB=y
|
||||||
CONFIG_USB_MON=y
|
CONFIG_USB_MON=y
|
||||||
|
@ -292,6 +292,7 @@ CONFIG_DRM_IMX_LDB=y
|
|||||||
CONFIG_DRM_IMX_HDMI=y
|
CONFIG_DRM_IMX_HDMI=y
|
||||||
CONFIG_DRM_ETNAVIV=y
|
CONFIG_DRM_ETNAVIV=y
|
||||||
CONFIG_DRM_MXSFB=y
|
CONFIG_DRM_MXSFB=y
|
||||||
|
CONFIG_FB=y
|
||||||
CONFIG_FB_MODE_HELPERS=y
|
CONFIG_FB_MODE_HELPERS=y
|
||||||
CONFIG_LCD_CLASS_DEVICE=y
|
CONFIG_LCD_CLASS_DEVICE=y
|
||||||
CONFIG_LCD_L4F00242T03=y
|
CONFIG_LCD_L4F00242T03=y
|
||||||
|
@ -197,7 +197,6 @@ CONFIG_PCI_EPF_TEST=m
|
|||||||
CONFIG_DEVTMPFS=y
|
CONFIG_DEVTMPFS=y
|
||||||
CONFIG_DEVTMPFS_MOUNT=y
|
CONFIG_DEVTMPFS_MOUNT=y
|
||||||
CONFIG_OMAP_OCP2SCP=y
|
CONFIG_OMAP_OCP2SCP=y
|
||||||
CONFIG_SIMPLE_PM_BUS=y
|
|
||||||
CONFIG_MTD=y
|
CONFIG_MTD=y
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
CONFIG_MTD_CMDLINE_PARTS=y
|
||||||
CONFIG_MTD_BLOCK=y
|
CONFIG_MTD_BLOCK=y
|
||||||
@ -456,6 +455,7 @@ CONFIG_PINCTRL_STMFX=y
|
|||||||
CONFIG_PINCTRL_PALMAS=y
|
CONFIG_PINCTRL_PALMAS=y
|
||||||
CONFIG_PINCTRL_OWL=y
|
CONFIG_PINCTRL_OWL=y
|
||||||
CONFIG_PINCTRL_S500=y
|
CONFIG_PINCTRL_S500=y
|
||||||
|
CONFIG_PINCTRL_MSM=y
|
||||||
CONFIG_PINCTRL_APQ8064=y
|
CONFIG_PINCTRL_APQ8064=y
|
||||||
CONFIG_PINCTRL_APQ8084=y
|
CONFIG_PINCTRL_APQ8084=y
|
||||||
CONFIG_PINCTRL_IPQ8064=y
|
CONFIG_PINCTRL_IPQ8064=y
|
||||||
@ -725,6 +725,7 @@ CONFIG_DRM_PL111=m
|
|||||||
CONFIG_DRM_LIMA=m
|
CONFIG_DRM_LIMA=m
|
||||||
CONFIG_DRM_PANFROST=m
|
CONFIG_DRM_PANFROST=m
|
||||||
CONFIG_DRM_ASPEED_GFX=m
|
CONFIG_DRM_ASPEED_GFX=m
|
||||||
|
CONFIG_FB=y
|
||||||
CONFIG_FB_EFI=y
|
CONFIG_FB_EFI=y
|
||||||
CONFIG_FB_WM8505=y
|
CONFIG_FB_WM8505=y
|
||||||
CONFIG_FB_SH_MOBILE_LCDC=y
|
CONFIG_FB_SH_MOBILE_LCDC=y
|
||||||
@ -1122,6 +1123,7 @@ CONFIG_PHY_DM816X_USB=m
|
|||||||
CONFIG_OMAP_USB2=y
|
CONFIG_OMAP_USB2=y
|
||||||
CONFIG_TI_PIPE3=y
|
CONFIG_TI_PIPE3=y
|
||||||
CONFIG_TWL4030_USB=m
|
CONFIG_TWL4030_USB=m
|
||||||
|
CONFIG_RAS=y
|
||||||
CONFIG_NVMEM_IMX_OCOTP=y
|
CONFIG_NVMEM_IMX_OCOTP=y
|
||||||
CONFIG_ROCKCHIP_EFUSE=m
|
CONFIG_ROCKCHIP_EFUSE=m
|
||||||
CONFIG_NVMEM_SUNXI_SID=y
|
CONFIG_NVMEM_SUNXI_SID=y
|
||||||
|
@ -46,7 +46,6 @@ CONFIG_DEVTMPFS=y
|
|||||||
CONFIG_DEVTMPFS_MOUNT=y
|
CONFIG_DEVTMPFS_MOUNT=y
|
||||||
CONFIG_DMA_CMA=y
|
CONFIG_DMA_CMA=y
|
||||||
CONFIG_CMA_SIZE_MBYTES=64
|
CONFIG_CMA_SIZE_MBYTES=64
|
||||||
CONFIG_SIMPLE_PM_BUS=y
|
|
||||||
CONFIG_MTD=y
|
CONFIG_MTD=y
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
CONFIG_MTD_CMDLINE_PARTS=y
|
||||||
CONFIG_MTD_BLOCK=y
|
CONFIG_MTD_BLOCK=y
|
||||||
|
@ -40,7 +40,6 @@ CONFIG_PCI_RCAR_GEN2=y
|
|||||||
CONFIG_PCIE_RCAR_HOST=y
|
CONFIG_PCIE_RCAR_HOST=y
|
||||||
CONFIG_DEVTMPFS=y
|
CONFIG_DEVTMPFS=y
|
||||||
CONFIG_DEVTMPFS_MOUNT=y
|
CONFIG_DEVTMPFS_MOUNT=y
|
||||||
CONFIG_SIMPLE_PM_BUS=y
|
|
||||||
CONFIG_MTD=y
|
CONFIG_MTD=y
|
||||||
CONFIG_MTD_BLOCK=y
|
CONFIG_MTD_BLOCK=y
|
||||||
CONFIG_MTD_CFI=y
|
CONFIG_MTD_CFI=y
|
||||||
|
@ -47,12 +47,26 @@ struct at91_pm_bu {
|
|||||||
unsigned long ddr_phy_calibration[BACKUP_DDR_PHY_CALIBRATION];
|
unsigned long ddr_phy_calibration[BACKUP_DDR_PHY_CALIBRATION];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* struct at91_pm_sfrbu_offsets: registers mapping for SFRBU
|
||||||
|
* @pswbu: power switch BU control registers
|
||||||
|
*/
|
||||||
|
struct at91_pm_sfrbu_regs {
|
||||||
|
struct {
|
||||||
|
u32 key;
|
||||||
|
u32 ctrl;
|
||||||
|
u32 state;
|
||||||
|
u32 softsw;
|
||||||
|
} pswbu;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct at91_soc_pm - AT91 SoC power management data structure
|
* struct at91_soc_pm - AT91 SoC power management data structure
|
||||||
* @config_shdwc_ws: wakeup sources configuration function for SHDWC
|
* @config_shdwc_ws: wakeup sources configuration function for SHDWC
|
||||||
* @config_pmc_ws: wakeup srouces configuration function for PMC
|
* @config_pmc_ws: wakeup srouces configuration function for PMC
|
||||||
* @ws_ids: wakup sources of_device_id array
|
* @ws_ids: wakup sources of_device_id array
|
||||||
* @data: PM data to be used on last phase of suspend
|
* @data: PM data to be used on last phase of suspend
|
||||||
|
* @sfrbu_regs: SFRBU registers mapping
|
||||||
* @bu: backup unit mapped data (for backup mode)
|
* @bu: backup unit mapped data (for backup mode)
|
||||||
* @memcs: memory chip select
|
* @memcs: memory chip select
|
||||||
*/
|
*/
|
||||||
@ -62,6 +76,7 @@ struct at91_soc_pm {
|
|||||||
const struct of_device_id *ws_ids;
|
const struct of_device_id *ws_ids;
|
||||||
struct at91_pm_bu *bu;
|
struct at91_pm_bu *bu;
|
||||||
struct at91_pm_data data;
|
struct at91_pm_data data;
|
||||||
|
struct at91_pm_sfrbu_regs sfrbu_regs;
|
||||||
void *memcs;
|
void *memcs;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -356,9 +371,36 @@ static int at91_suspend_finish(unsigned long val)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void at91_pm_switch_ba_to_vbat(void)
|
||||||
|
{
|
||||||
|
unsigned int offset = offsetof(struct at91_pm_sfrbu_regs, pswbu);
|
||||||
|
unsigned int val;
|
||||||
|
|
||||||
|
/* Just for safety. */
|
||||||
|
if (!soc_pm.data.sfrbu)
|
||||||
|
return;
|
||||||
|
|
||||||
|
val = readl(soc_pm.data.sfrbu + offset);
|
||||||
|
|
||||||
|
/* Already on VBAT. */
|
||||||
|
if (!(val & soc_pm.sfrbu_regs.pswbu.state))
|
||||||
|
return;
|
||||||
|
|
||||||
|
val &= ~soc_pm.sfrbu_regs.pswbu.softsw;
|
||||||
|
val |= soc_pm.sfrbu_regs.pswbu.key | soc_pm.sfrbu_regs.pswbu.ctrl;
|
||||||
|
writel(val, soc_pm.data.sfrbu + offset);
|
||||||
|
|
||||||
|
/* Wait for update. */
|
||||||
|
val = readl(soc_pm.data.sfrbu + offset);
|
||||||
|
while (val & soc_pm.sfrbu_regs.pswbu.state)
|
||||||
|
val = readl(soc_pm.data.sfrbu + offset);
|
||||||
|
}
|
||||||
|
|
||||||
static void at91_pm_suspend(suspend_state_t state)
|
static void at91_pm_suspend(suspend_state_t state)
|
||||||
{
|
{
|
||||||
if (soc_pm.data.mode == AT91_PM_BACKUP) {
|
if (soc_pm.data.mode == AT91_PM_BACKUP) {
|
||||||
|
at91_pm_switch_ba_to_vbat();
|
||||||
|
|
||||||
cpu_suspend(0, at91_suspend_finish);
|
cpu_suspend(0, at91_suspend_finish);
|
||||||
|
|
||||||
/* The SRAM is lost between suspend cycles */
|
/* The SRAM is lost between suspend cycles */
|
||||||
@ -589,18 +631,22 @@ static const struct of_device_id ramc_phy_ids[] __initconst = {
|
|||||||
{ /* Sentinel. */ },
|
{ /* Sentinel. */ },
|
||||||
};
|
};
|
||||||
|
|
||||||
static __init void at91_dt_ramc(bool phy_mandatory)
|
static __init int at91_dt_ramc(bool phy_mandatory)
|
||||||
{
|
{
|
||||||
struct device_node *np;
|
struct device_node *np;
|
||||||
const struct of_device_id *of_id;
|
const struct of_device_id *of_id;
|
||||||
int idx = 0;
|
int idx = 0;
|
||||||
void *standby = NULL;
|
void *standby = NULL;
|
||||||
const struct ramc_info *ramc;
|
const struct ramc_info *ramc;
|
||||||
|
int ret;
|
||||||
|
|
||||||
for_each_matching_node_and_match(np, ramc_ids, &of_id) {
|
for_each_matching_node_and_match(np, ramc_ids, &of_id) {
|
||||||
soc_pm.data.ramc[idx] = of_iomap(np, 0);
|
soc_pm.data.ramc[idx] = of_iomap(np, 0);
|
||||||
if (!soc_pm.data.ramc[idx])
|
if (!soc_pm.data.ramc[idx]) {
|
||||||
panic(pr_fmt("unable to map ramc[%d] cpu registers\n"), idx);
|
pr_err("unable to map ramc[%d] cpu registers\n", idx);
|
||||||
|
ret = -ENOMEM;
|
||||||
|
goto unmap_ramc;
|
||||||
|
}
|
||||||
|
|
||||||
ramc = of_id->data;
|
ramc = of_id->data;
|
||||||
if (ramc) {
|
if (ramc) {
|
||||||
@ -612,25 +658,42 @@ static __init void at91_dt_ramc(bool phy_mandatory)
|
|||||||
idx++;
|
idx++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!idx)
|
if (!idx) {
|
||||||
panic(pr_fmt("unable to find compatible ram controller node in dtb\n"));
|
pr_err("unable to find compatible ram controller node in dtb\n");
|
||||||
|
ret = -ENODEV;
|
||||||
|
goto unmap_ramc;
|
||||||
|
}
|
||||||
|
|
||||||
/* Lookup for DDR PHY node, if any. */
|
/* Lookup for DDR PHY node, if any. */
|
||||||
for_each_matching_node_and_match(np, ramc_phy_ids, &of_id) {
|
for_each_matching_node_and_match(np, ramc_phy_ids, &of_id) {
|
||||||
soc_pm.data.ramc_phy = of_iomap(np, 0);
|
soc_pm.data.ramc_phy = of_iomap(np, 0);
|
||||||
if (!soc_pm.data.ramc_phy)
|
if (!soc_pm.data.ramc_phy) {
|
||||||
panic(pr_fmt("unable to map ramc phy cpu registers\n"));
|
pr_err("unable to map ramc phy cpu registers\n");
|
||||||
|
ret = -ENOMEM;
|
||||||
|
goto unmap_ramc;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (phy_mandatory && !soc_pm.data.ramc_phy)
|
if (phy_mandatory && !soc_pm.data.ramc_phy) {
|
||||||
panic(pr_fmt("DDR PHY is mandatory!\n"));
|
pr_err("DDR PHY is mandatory!\n");
|
||||||
|
ret = -ENODEV;
|
||||||
|
goto unmap_ramc;
|
||||||
|
}
|
||||||
|
|
||||||
if (!standby) {
|
if (!standby) {
|
||||||
pr_warn("ramc no standby function available\n");
|
pr_warn("ramc no standby function available\n");
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
at91_cpuidle_device.dev.platform_data = standby;
|
at91_cpuidle_device.dev.platform_data = standby;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
unmap_ramc:
|
||||||
|
while (idx)
|
||||||
|
iounmap(soc_pm.data.ramc[--idx]);
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void at91rm9200_idle(void)
|
static void at91rm9200_idle(void)
|
||||||
@ -1017,6 +1080,8 @@ static void __init at91_pm_init(void (*pm_idle)(void))
|
|||||||
|
|
||||||
void __init at91rm9200_pm_init(void)
|
void __init at91rm9200_pm_init(void)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (!IS_ENABLED(CONFIG_SOC_AT91RM9200))
|
if (!IS_ENABLED(CONFIG_SOC_AT91RM9200))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -1028,7 +1093,9 @@ void __init at91rm9200_pm_init(void)
|
|||||||
soc_pm.data.standby_mode = AT91_PM_STANDBY;
|
soc_pm.data.standby_mode = AT91_PM_STANDBY;
|
||||||
soc_pm.data.suspend_mode = AT91_PM_ULP0;
|
soc_pm.data.suspend_mode = AT91_PM_ULP0;
|
||||||
|
|
||||||
at91_dt_ramc(false);
|
ret = at91_dt_ramc(false);
|
||||||
|
if (ret)
|
||||||
|
return;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* AT91RM9200 SDRAM low-power mode cannot be used with self-refresh.
|
* AT91RM9200 SDRAM low-power mode cannot be used with self-refresh.
|
||||||
@ -1046,13 +1113,17 @@ void __init sam9x60_pm_init(void)
|
|||||||
static const int iomaps[] __initconst = {
|
static const int iomaps[] __initconst = {
|
||||||
[AT91_PM_ULP1] = AT91_PM_IOMAP(SHDWC),
|
[AT91_PM_ULP1] = AT91_PM_IOMAP(SHDWC),
|
||||||
};
|
};
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (!IS_ENABLED(CONFIG_SOC_SAM9X60))
|
if (!IS_ENABLED(CONFIG_SOC_SAM9X60))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
at91_pm_modes_validate(modes, ARRAY_SIZE(modes));
|
at91_pm_modes_validate(modes, ARRAY_SIZE(modes));
|
||||||
at91_pm_modes_init(iomaps, ARRAY_SIZE(iomaps));
|
at91_pm_modes_init(iomaps, ARRAY_SIZE(iomaps));
|
||||||
at91_dt_ramc(false);
|
ret = at91_dt_ramc(false);
|
||||||
|
if (ret)
|
||||||
|
return;
|
||||||
|
|
||||||
at91_pm_init(NULL);
|
at91_pm_init(NULL);
|
||||||
|
|
||||||
soc_pm.ws_ids = sam9x60_ws_ids;
|
soc_pm.ws_ids = sam9x60_ws_ids;
|
||||||
@ -1061,6 +1132,8 @@ void __init sam9x60_pm_init(void)
|
|||||||
|
|
||||||
void __init at91sam9_pm_init(void)
|
void __init at91sam9_pm_init(void)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (!IS_ENABLED(CONFIG_SOC_AT91SAM9))
|
if (!IS_ENABLED(CONFIG_SOC_AT91SAM9))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -1072,7 +1145,10 @@ void __init at91sam9_pm_init(void)
|
|||||||
soc_pm.data.standby_mode = AT91_PM_STANDBY;
|
soc_pm.data.standby_mode = AT91_PM_STANDBY;
|
||||||
soc_pm.data.suspend_mode = AT91_PM_ULP0;
|
soc_pm.data.suspend_mode = AT91_PM_ULP0;
|
||||||
|
|
||||||
at91_dt_ramc(false);
|
ret = at91_dt_ramc(false);
|
||||||
|
if (ret)
|
||||||
|
return;
|
||||||
|
|
||||||
at91_pm_init(at91sam9_idle);
|
at91_pm_init(at91sam9_idle);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1081,12 +1157,16 @@ void __init sama5_pm_init(void)
|
|||||||
static const int modes[] __initconst = {
|
static const int modes[] __initconst = {
|
||||||
AT91_PM_STANDBY, AT91_PM_ULP0, AT91_PM_ULP0_FAST,
|
AT91_PM_STANDBY, AT91_PM_ULP0, AT91_PM_ULP0_FAST,
|
||||||
};
|
};
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (!IS_ENABLED(CONFIG_SOC_SAMA5))
|
if (!IS_ENABLED(CONFIG_SOC_SAMA5))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
at91_pm_modes_validate(modes, ARRAY_SIZE(modes));
|
at91_pm_modes_validate(modes, ARRAY_SIZE(modes));
|
||||||
at91_dt_ramc(false);
|
ret = at91_dt_ramc(false);
|
||||||
|
if (ret)
|
||||||
|
return;
|
||||||
|
|
||||||
at91_pm_init(NULL);
|
at91_pm_init(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1101,18 +1181,27 @@ void __init sama5d2_pm_init(void)
|
|||||||
[AT91_PM_BACKUP] = AT91_PM_IOMAP(SHDWC) |
|
[AT91_PM_BACKUP] = AT91_PM_IOMAP(SHDWC) |
|
||||||
AT91_PM_IOMAP(SFRBU),
|
AT91_PM_IOMAP(SFRBU),
|
||||||
};
|
};
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (!IS_ENABLED(CONFIG_SOC_SAMA5D2))
|
if (!IS_ENABLED(CONFIG_SOC_SAMA5D2))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
at91_pm_modes_validate(modes, ARRAY_SIZE(modes));
|
at91_pm_modes_validate(modes, ARRAY_SIZE(modes));
|
||||||
at91_pm_modes_init(iomaps, ARRAY_SIZE(iomaps));
|
at91_pm_modes_init(iomaps, ARRAY_SIZE(iomaps));
|
||||||
at91_dt_ramc(false);
|
ret = at91_dt_ramc(false);
|
||||||
|
if (ret)
|
||||||
|
return;
|
||||||
|
|
||||||
at91_pm_init(NULL);
|
at91_pm_init(NULL);
|
||||||
|
|
||||||
soc_pm.ws_ids = sama5d2_ws_ids;
|
soc_pm.ws_ids = sama5d2_ws_ids;
|
||||||
soc_pm.config_shdwc_ws = at91_sama5d2_config_shdwc_ws;
|
soc_pm.config_shdwc_ws = at91_sama5d2_config_shdwc_ws;
|
||||||
soc_pm.config_pmc_ws = at91_sama5d2_config_pmc_ws;
|
soc_pm.config_pmc_ws = at91_sama5d2_config_pmc_ws;
|
||||||
|
|
||||||
|
soc_pm.sfrbu_regs.pswbu.key = (0x4BD20C << 8);
|
||||||
|
soc_pm.sfrbu_regs.pswbu.ctrl = BIT(0);
|
||||||
|
soc_pm.sfrbu_regs.pswbu.softsw = BIT(1);
|
||||||
|
soc_pm.sfrbu_regs.pswbu.state = BIT(3);
|
||||||
}
|
}
|
||||||
|
|
||||||
void __init sama7_pm_init(void)
|
void __init sama7_pm_init(void)
|
||||||
@ -1127,18 +1216,27 @@ void __init sama7_pm_init(void)
|
|||||||
[AT91_PM_BACKUP] = AT91_PM_IOMAP(SFRBU) |
|
[AT91_PM_BACKUP] = AT91_PM_IOMAP(SFRBU) |
|
||||||
AT91_PM_IOMAP(SHDWC),
|
AT91_PM_IOMAP(SHDWC),
|
||||||
};
|
};
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (!IS_ENABLED(CONFIG_SOC_SAMA7))
|
if (!IS_ENABLED(CONFIG_SOC_SAMA7))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
at91_pm_modes_validate(modes, ARRAY_SIZE(modes));
|
at91_pm_modes_validate(modes, ARRAY_SIZE(modes));
|
||||||
|
|
||||||
at91_dt_ramc(true);
|
ret = at91_dt_ramc(true);
|
||||||
|
if (ret)
|
||||||
|
return;
|
||||||
|
|
||||||
at91_pm_modes_init(iomaps, ARRAY_SIZE(iomaps));
|
at91_pm_modes_init(iomaps, ARRAY_SIZE(iomaps));
|
||||||
at91_pm_init(NULL);
|
at91_pm_init(NULL);
|
||||||
|
|
||||||
soc_pm.ws_ids = sama7g5_ws_ids;
|
soc_pm.ws_ids = sama7g5_ws_ids;
|
||||||
soc_pm.config_pmc_ws = at91_sam9x60_config_pmc_ws;
|
soc_pm.config_pmc_ws = at91_sam9x60_config_pmc_ws;
|
||||||
|
|
||||||
|
soc_pm.sfrbu_regs.pswbu.key = (0x4BD20C << 8);
|
||||||
|
soc_pm.sfrbu_regs.pswbu.ctrl = BIT(0);
|
||||||
|
soc_pm.sfrbu_regs.pswbu.softsw = BIT(1);
|
||||||
|
soc_pm.sfrbu_regs.pswbu.state = BIT(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init at91_pm_modes_select(char *str)
|
static int __init at91_pm_modes_select(char *str)
|
||||||
|
@ -1014,31 +1014,55 @@ ENTRY(at91_pm_suspend_in_sram)
|
|||||||
mov tmp1, #0
|
mov tmp1, #0
|
||||||
mcr p15, 0, tmp1, c7, c10, 4
|
mcr p15, 0, tmp1, c7, c10, 4
|
||||||
|
|
||||||
ldr tmp1, [r0, #PM_DATA_PMC]
|
/* Flush tlb. */
|
||||||
str tmp1, .pmc_base
|
mov r4, #0
|
||||||
ldr tmp1, [r0, #PM_DATA_RAMC0]
|
mcr p15, 0, r4, c8, c7, 0
|
||||||
str tmp1, .sramc_base
|
|
||||||
ldr tmp1, [r0, #PM_DATA_RAMC1]
|
|
||||||
str tmp1, .sramc1_base
|
|
||||||
ldr tmp1, [r0, #PM_DATA_RAMC_PHY]
|
|
||||||
str tmp1, .sramc_phy_base
|
|
||||||
ldr tmp1, [r0, #PM_DATA_MEMCTRL]
|
|
||||||
str tmp1, .memtype
|
|
||||||
ldr tmp1, [r0, #PM_DATA_MODE]
|
|
||||||
str tmp1, .pm_mode
|
|
||||||
ldr tmp1, [r0, #PM_DATA_PMC_MCKR_OFFSET]
|
ldr tmp1, [r0, #PM_DATA_PMC_MCKR_OFFSET]
|
||||||
str tmp1, .mckr_offset
|
str tmp1, .mckr_offset
|
||||||
ldr tmp1, [r0, #PM_DATA_PMC_VERSION]
|
ldr tmp1, [r0, #PM_DATA_PMC_VERSION]
|
||||||
str tmp1, .pmc_version
|
str tmp1, .pmc_version
|
||||||
/* Both ldrne below are here to preload their address in the TLB */
|
ldr tmp1, [r0, #PM_DATA_MEMCTRL]
|
||||||
|
str tmp1, .memtype
|
||||||
|
ldr tmp1, [r0, #PM_DATA_MODE]
|
||||||
|
str tmp1, .pm_mode
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ldrne below are here to preload their address in the TLB as access
|
||||||
|
* to RAM may be limited while in self-refresh.
|
||||||
|
*/
|
||||||
|
ldr tmp1, [r0, #PM_DATA_PMC]
|
||||||
|
str tmp1, .pmc_base
|
||||||
|
cmp tmp1, #0
|
||||||
|
ldrne tmp2, [tmp1, #0]
|
||||||
|
|
||||||
|
ldr tmp1, [r0, #PM_DATA_RAMC0]
|
||||||
|
str tmp1, .sramc_base
|
||||||
|
cmp tmp1, #0
|
||||||
|
ldrne tmp2, [tmp1, #0]
|
||||||
|
|
||||||
|
ldr tmp1, [r0, #PM_DATA_RAMC1]
|
||||||
|
str tmp1, .sramc1_base
|
||||||
|
cmp tmp1, #0
|
||||||
|
ldrne tmp2, [tmp1, #0]
|
||||||
|
|
||||||
|
#ifndef CONFIG_SOC_SAM_V4_V5
|
||||||
|
/* ldrne below are here to preload their address in the TLB */
|
||||||
|
ldr tmp1, [r0, #PM_DATA_RAMC_PHY]
|
||||||
|
str tmp1, .sramc_phy_base
|
||||||
|
cmp tmp1, #0
|
||||||
|
ldrne tmp2, [tmp1, #0]
|
||||||
|
|
||||||
ldr tmp1, [r0, #PM_DATA_SHDWC]
|
ldr tmp1, [r0, #PM_DATA_SHDWC]
|
||||||
str tmp1, .shdwc
|
str tmp1, .shdwc
|
||||||
cmp tmp1, #0
|
cmp tmp1, #0
|
||||||
ldrne tmp2, [tmp1, #0]
|
ldrne tmp2, [tmp1, #0]
|
||||||
|
|
||||||
ldr tmp1, [r0, #PM_DATA_SFRBU]
|
ldr tmp1, [r0, #PM_DATA_SFRBU]
|
||||||
str tmp1, .sfrbu
|
str tmp1, .sfrbu
|
||||||
cmp tmp1, #0
|
cmp tmp1, #0
|
||||||
ldrne tmp2, [tmp1, #0x10]
|
ldrne tmp2, [tmp1, #0x10]
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Active the self-refresh mode */
|
/* Active the self-refresh mode */
|
||||||
at91_sramc_self_refresh_ena
|
at91_sramc_self_refresh_ena
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
#define LSR_THRE 0x20
|
#define LSR_THRE 0x20
|
||||||
|
|
||||||
static void putc(const char c)
|
static inline void putc(const char c)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -24,7 +24,7 @@ static void putc(const char c)
|
|||||||
*UART_THR = c;
|
*UART_THR = c;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void flush(void)
|
static inline void flush(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,6 +172,9 @@ static void __init imx6q_init_machine(void)
|
|||||||
imx_get_soc_revision());
|
imx_get_soc_revision());
|
||||||
|
|
||||||
imx6q_enet_phy_init();
|
imx6q_enet_phy_init();
|
||||||
|
|
||||||
|
of_platform_default_populate(NULL, NULL, NULL);
|
||||||
|
|
||||||
imx_anatop_init();
|
imx_anatop_init();
|
||||||
cpu_is_imx6q() ? imx6q_pm_init() : imx6dl_pm_init();
|
cpu_is_imx6q() ? imx6q_pm_init() : imx6dl_pm_init();
|
||||||
imx6q_1588_init();
|
imx6q_1588_init();
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/genalloc.h>
|
#include <linux/genalloc.h>
|
||||||
|
#include <linux/irqchip/arm-gic.h>
|
||||||
#include <linux/mfd/syscon.h>
|
#include <linux/mfd/syscon.h>
|
||||||
#include <linux/mfd/syscon/imx6q-iomuxc-gpr.h>
|
#include <linux/mfd/syscon/imx6q-iomuxc-gpr.h>
|
||||||
#include <linux/of.h>
|
#include <linux/of.h>
|
||||||
@ -619,6 +620,7 @@ static void __init imx6_pm_common_init(const struct imx6_pm_socdata
|
|||||||
|
|
||||||
static void imx6_pm_stby_poweroff(void)
|
static void imx6_pm_stby_poweroff(void)
|
||||||
{
|
{
|
||||||
|
gic_cpu_if_down(0);
|
||||||
imx6_set_lpm(STOP_POWER_OFF);
|
imx6_set_lpm(STOP_POWER_OFF);
|
||||||
imx6q_suspend_finish(0);
|
imx6q_suspend_finish(0);
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
#include <linux/iopoll.h>
|
#include <linux/iopoll.h>
|
||||||
#include <linux/of.h>
|
#include <linux/of.h>
|
||||||
#include <linux/of_address.h>
|
#include <linux/of_address.h>
|
||||||
|
#include <linux/platform_device.h>
|
||||||
#include <linux/reset-controller.h>
|
#include <linux/reset-controller.h>
|
||||||
#include <linux/smp.h>
|
#include <linux/smp.h>
|
||||||
#include <asm/smp_plat.h>
|
#include <asm/smp_plat.h>
|
||||||
@ -81,11 +82,6 @@ static const struct reset_control_ops imx_src_ops = {
|
|||||||
.reset = imx_src_reset_module,
|
.reset = imx_src_reset_module,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct reset_controller_dev imx_reset_controller = {
|
|
||||||
.ops = &imx_src_ops,
|
|
||||||
.nr_resets = ARRAY_SIZE(sw_reset_bits),
|
|
||||||
};
|
|
||||||
|
|
||||||
static void imx_gpcv2_set_m_core_pgc(bool enable, u32 offset)
|
static void imx_gpcv2_set_m_core_pgc(bool enable, u32 offset)
|
||||||
{
|
{
|
||||||
writel_relaxed(enable, gpc_base + offset);
|
writel_relaxed(enable, gpc_base + offset);
|
||||||
@ -177,10 +173,6 @@ void __init imx_src_init(void)
|
|||||||
src_base = of_iomap(np, 0);
|
src_base = of_iomap(np, 0);
|
||||||
WARN_ON(!src_base);
|
WARN_ON(!src_base);
|
||||||
|
|
||||||
imx_reset_controller.of_node = np;
|
|
||||||
if (IS_ENABLED(CONFIG_RESET_CONTROLLER))
|
|
||||||
reset_controller_register(&imx_reset_controller);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* force warm reset sources to generate cold reset
|
* force warm reset sources to generate cold reset
|
||||||
* for a more reliable restart
|
* for a more reliable restart
|
||||||
@ -214,3 +206,33 @@ void __init imx7_src_init(void)
|
|||||||
if (!gpc_base)
|
if (!gpc_base)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const struct of_device_id imx_src_dt_ids[] = {
|
||||||
|
{ .compatible = "fsl,imx51-src" },
|
||||||
|
{ /* sentinel */ }
|
||||||
|
};
|
||||||
|
|
||||||
|
static int imx_src_probe(struct platform_device *pdev)
|
||||||
|
{
|
||||||
|
struct reset_controller_dev *rcdev;
|
||||||
|
|
||||||
|
rcdev = devm_kzalloc(&pdev->dev, sizeof(*rcdev), GFP_KERNEL);
|
||||||
|
if (!rcdev)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
rcdev->ops = &imx_src_ops;
|
||||||
|
rcdev->dev = &pdev->dev;
|
||||||
|
rcdev->of_node = pdev->dev.of_node;
|
||||||
|
rcdev->nr_resets = ARRAY_SIZE(sw_reset_bits);
|
||||||
|
|
||||||
|
return devm_reset_controller_register(&pdev->dev, rcdev);
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct platform_driver imx_src_driver = {
|
||||||
|
.driver = {
|
||||||
|
.name = "imx-src",
|
||||||
|
.of_match_table = imx_src_dt_ids,
|
||||||
|
},
|
||||||
|
.probe = imx_src_probe,
|
||||||
|
};
|
||||||
|
builtin_platform_driver(imx_src_driver);
|
||||||
|
@ -9,16 +9,4 @@
|
|||||||
/* REVISIT: omap1 legacy drivers still rely on this */
|
/* REVISIT: omap1 legacy drivers still rely on this */
|
||||||
#include <mach/soc.h>
|
#include <mach/soc.h>
|
||||||
|
|
||||||
/*
|
|
||||||
* Bus address is physical address, except for OMAP-1510 Local Bus.
|
|
||||||
* OMAP-1510 bus address is translated into a Local Bus address if the
|
|
||||||
* OMAP bus type is lbus. We do the address translation based on the
|
|
||||||
* device overriding the defaults used in the dma-mapping API.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* OMAP-1510 Local Bus address offset
|
|
||||||
*/
|
|
||||||
#define OMAP1510_LB_OFFSET UL(0x30000000)
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/dma-map-ops.h>
|
#include <linux/dma-map-ops.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
#include <linux/delay.h>
|
||||||
|
|
||||||
#include <asm/irq.h>
|
#include <asm/irq.h>
|
||||||
|
|
||||||
@ -206,8 +207,6 @@ static inline void udc_device_init(struct omap_usb_config *pdata)
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_USB_OHCI_HCD)
|
|
||||||
|
|
||||||
/* The dmamask must be set for OHCI to work */
|
/* The dmamask must be set for OHCI to work */
|
||||||
static u64 ohci_dmamask = ~(u32)0;
|
static u64 ohci_dmamask = ~(u32)0;
|
||||||
|
|
||||||
@ -236,20 +235,15 @@ static struct platform_device ohci_device = {
|
|||||||
|
|
||||||
static inline void ohci_device_init(struct omap_usb_config *pdata)
|
static inline void ohci_device_init(struct omap_usb_config *pdata)
|
||||||
{
|
{
|
||||||
|
if (!IS_ENABLED(CONFIG_USB_OHCI_HCD))
|
||||||
|
return;
|
||||||
|
|
||||||
if (cpu_is_omap7xx())
|
if (cpu_is_omap7xx())
|
||||||
ohci_resources[1].start = INT_7XX_USB_HHC_1;
|
ohci_resources[1].start = INT_7XX_USB_HHC_1;
|
||||||
pdata->ohci_device = &ohci_device;
|
pdata->ohci_device = &ohci_device;
|
||||||
pdata->ocpi_enable = &ocpi_enable;
|
pdata->ocpi_enable = &ocpi_enable;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
static inline void ohci_device_init(struct omap_usb_config *pdata)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(CONFIG_USB_OTG) && defined(CONFIG_ARCH_OMAP_OTG)
|
#if defined(CONFIG_USB_OTG) && defined(CONFIG_ARCH_OMAP_OTG)
|
||||||
|
|
||||||
static struct resource otg_resources[] = {
|
static struct resource otg_resources[] = {
|
||||||
@ -534,6 +528,79 @@ static u32 __init omap1_usb2_init(unsigned nwires, unsigned alt_pingroup)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_OMAP15XX
|
#ifdef CONFIG_ARCH_OMAP15XX
|
||||||
|
/* OMAP-1510 OHCI has its own MMU for DMA */
|
||||||
|
#define OMAP1510_LB_MEMSIZE 32 /* Should be same as SDRAM size */
|
||||||
|
#define OMAP1510_LB_CLOCK_DIV 0xfffec10c
|
||||||
|
#define OMAP1510_LB_MMU_CTL 0xfffec208
|
||||||
|
#define OMAP1510_LB_MMU_LCK 0xfffec224
|
||||||
|
#define OMAP1510_LB_MMU_LD_TLB 0xfffec228
|
||||||
|
#define OMAP1510_LB_MMU_CAM_H 0xfffec22c
|
||||||
|
#define OMAP1510_LB_MMU_CAM_L 0xfffec230
|
||||||
|
#define OMAP1510_LB_MMU_RAM_H 0xfffec234
|
||||||
|
#define OMAP1510_LB_MMU_RAM_L 0xfffec238
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Bus address is physical address, except for OMAP-1510 Local Bus.
|
||||||
|
* OMAP-1510 bus address is translated into a Local Bus address if the
|
||||||
|
* OMAP bus type is lbus.
|
||||||
|
*/
|
||||||
|
#define OMAP1510_LB_OFFSET UL(0x30000000)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* OMAP-1510 specific Local Bus clock on/off
|
||||||
|
*/
|
||||||
|
static int omap_1510_local_bus_power(int on)
|
||||||
|
{
|
||||||
|
if (on) {
|
||||||
|
omap_writel((1 << 1) | (1 << 0), OMAP1510_LB_MMU_CTL);
|
||||||
|
udelay(200);
|
||||||
|
} else {
|
||||||
|
omap_writel(0, OMAP1510_LB_MMU_CTL);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* OMAP-1510 specific Local Bus initialization
|
||||||
|
* NOTE: This assumes 32MB memory size in OMAP1510LB_MEMSIZE.
|
||||||
|
* See also arch/mach-omap/memory.h for __virt_to_dma() and
|
||||||
|
* __dma_to_virt() which need to match with the physical
|
||||||
|
* Local Bus address below.
|
||||||
|
*/
|
||||||
|
static int omap_1510_local_bus_init(void)
|
||||||
|
{
|
||||||
|
unsigned int tlb;
|
||||||
|
unsigned long lbaddr, physaddr;
|
||||||
|
|
||||||
|
omap_writel((omap_readl(OMAP1510_LB_CLOCK_DIV) & 0xfffffff8) | 0x4,
|
||||||
|
OMAP1510_LB_CLOCK_DIV);
|
||||||
|
|
||||||
|
/* Configure the Local Bus MMU table */
|
||||||
|
for (tlb = 0; tlb < OMAP1510_LB_MEMSIZE; tlb++) {
|
||||||
|
lbaddr = tlb * 0x00100000 + OMAP1510_LB_OFFSET;
|
||||||
|
physaddr = tlb * 0x00100000 + PHYS_OFFSET;
|
||||||
|
omap_writel((lbaddr & 0x0fffffff) >> 22, OMAP1510_LB_MMU_CAM_H);
|
||||||
|
omap_writel(((lbaddr & 0x003ffc00) >> 6) | 0xc,
|
||||||
|
OMAP1510_LB_MMU_CAM_L);
|
||||||
|
omap_writel(physaddr >> 16, OMAP1510_LB_MMU_RAM_H);
|
||||||
|
omap_writel((physaddr & 0x0000fc00) | 0x300, OMAP1510_LB_MMU_RAM_L);
|
||||||
|
omap_writel(tlb << 4, OMAP1510_LB_MMU_LCK);
|
||||||
|
omap_writel(0x1, OMAP1510_LB_MMU_LD_TLB);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Enable the walking table */
|
||||||
|
omap_writel(omap_readl(OMAP1510_LB_MMU_CTL) | (1 << 3), OMAP1510_LB_MMU_CTL);
|
||||||
|
udelay(200);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void omap_1510_local_bus_reset(void)
|
||||||
|
{
|
||||||
|
omap_1510_local_bus_power(1);
|
||||||
|
omap_1510_local_bus_init();
|
||||||
|
}
|
||||||
|
|
||||||
/* ULPD_DPLL_CTRL */
|
/* ULPD_DPLL_CTRL */
|
||||||
#define DPLL_IOB (1 << 13)
|
#define DPLL_IOB (1 << 13)
|
||||||
@ -543,25 +610,6 @@ static u32 __init omap1_usb2_init(unsigned nwires, unsigned alt_pingroup)
|
|||||||
/* ULPD_APLL_CTRL */
|
/* ULPD_APLL_CTRL */
|
||||||
#define APLL_NDPLL_SWITCH (1 << 0)
|
#define APLL_NDPLL_SWITCH (1 << 0)
|
||||||
|
|
||||||
static int omap_1510_usb_ohci_notifier(struct notifier_block *nb,
|
|
||||||
unsigned long event, void *data)
|
|
||||||
{
|
|
||||||
struct device *dev = data;
|
|
||||||
|
|
||||||
if (event != BUS_NOTIFY_ADD_DEVICE)
|
|
||||||
return NOTIFY_DONE;
|
|
||||||
|
|
||||||
if (strncmp(dev_name(dev), "ohci", 4) == 0 &&
|
|
||||||
dma_direct_set_offset(dev, PHYS_OFFSET, OMAP1510_LB_OFFSET,
|
|
||||||
(u64)-1))
|
|
||||||
WARN_ONCE(1, "failed to set DMA offset\n");
|
|
||||||
return NOTIFY_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct notifier_block omap_1510_usb_ohci_nb = {
|
|
||||||
.notifier_call = omap_1510_usb_ohci_notifier,
|
|
||||||
};
|
|
||||||
|
|
||||||
static void __init omap_1510_usb_init(struct omap_usb_config *config)
|
static void __init omap_1510_usb_init(struct omap_usb_config *config)
|
||||||
{
|
{
|
||||||
unsigned int val;
|
unsigned int val;
|
||||||
@ -616,19 +664,19 @@ static void __init omap_1510_usb_init(struct omap_usb_config *config)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_USB_OHCI_HCD)
|
if (IS_ENABLED(CONFIG_USB_OHCI_HCD) && config->register_host) {
|
||||||
if (config->register_host) {
|
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
bus_register_notifier(&platform_bus_type,
|
|
||||||
&omap_1510_usb_ohci_nb);
|
|
||||||
ohci_device.dev.platform_data = config;
|
ohci_device.dev.platform_data = config;
|
||||||
|
dma_direct_set_offset(&ohci_device.dev, PHYS_OFFSET,
|
||||||
|
OMAP1510_LB_OFFSET, (u64)-1);
|
||||||
status = platform_device_register(&ohci_device);
|
status = platform_device_register(&ohci_device);
|
||||||
if (status)
|
if (status)
|
||||||
pr_debug("can't register OHCI device, %d\n", status);
|
pr_debug("can't register OHCI device, %d\n", status);
|
||||||
/* hcd explicitly gates 48MHz */
|
/* hcd explicitly gates 48MHz */
|
||||||
|
|
||||||
|
config->lb_reset = omap_1510_local_bus_reset;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
@ -112,7 +112,6 @@ config ARCH_OMAP2PLUS
|
|||||||
select PM_GENERIC_DOMAINS
|
select PM_GENERIC_DOMAINS
|
||||||
select PM_GENERIC_DOMAINS_OF
|
select PM_GENERIC_DOMAINS_OF
|
||||||
select RESET_CONTROLLER
|
select RESET_CONTROLLER
|
||||||
select SIMPLE_PM_BUS
|
|
||||||
select SOC_BUS
|
select SOC_BUS
|
||||||
select TI_SYSC
|
select TI_SYSC
|
||||||
select OMAP_IRQCHIP
|
select OMAP_IRQCHIP
|
||||||
|
@ -3614,6 +3614,8 @@ int omap_hwmod_init_module(struct device *dev,
|
|||||||
oh->flags |= HWMOD_SWSUP_SIDLE_ACT;
|
oh->flags |= HWMOD_SWSUP_SIDLE_ACT;
|
||||||
if (data->cfg->quirks & SYSC_QUIRK_SWSUP_MSTANDBY)
|
if (data->cfg->quirks & SYSC_QUIRK_SWSUP_MSTANDBY)
|
||||||
oh->flags |= HWMOD_SWSUP_MSTANDBY;
|
oh->flags |= HWMOD_SWSUP_MSTANDBY;
|
||||||
|
if (data->cfg->quirks & SYSC_QUIRK_CLKDM_NOAUTO)
|
||||||
|
oh->flags |= HWMOD_CLKDM_NOAUTO;
|
||||||
|
|
||||||
error = omap_hwmod_check_module(dev, oh, data, sysc_fields,
|
error = omap_hwmod_check_module(dev, oh, data, sysc_fields,
|
||||||
rev_offs, sysc_offs, syss_offs,
|
rev_offs, sysc_offs, syss_offs,
|
||||||
|
@ -36,6 +36,10 @@
|
|||||||
* +-----+
|
* +-----+
|
||||||
* |RSVD | JIT scratchpad
|
* |RSVD | JIT scratchpad
|
||||||
* current ARM_SP => +-----+ <= (BPF_FP - STACK_SIZE + SCRATCH_SIZE)
|
* current ARM_SP => +-----+ <= (BPF_FP - STACK_SIZE + SCRATCH_SIZE)
|
||||||
|
* | ... | caller-saved registers
|
||||||
|
* +-----+
|
||||||
|
* | ... | arguments passed on stack
|
||||||
|
* ARM_SP during call => +-----|
|
||||||
* | |
|
* | |
|
||||||
* | ... | Function call stack
|
* | ... | Function call stack
|
||||||
* | |
|
* | |
|
||||||
@ -63,6 +67,12 @@
|
|||||||
*
|
*
|
||||||
* When popping registers off the stack at the end of a BPF function, we
|
* When popping registers off the stack at the end of a BPF function, we
|
||||||
* reference them via the current ARM_FP register.
|
* reference them via the current ARM_FP register.
|
||||||
|
*
|
||||||
|
* Some eBPF operations are implemented via a call to a helper function.
|
||||||
|
* Such calls are "invisible" in the eBPF code, so it is up to the calling
|
||||||
|
* program to preserve any caller-saved ARM registers during the call. The
|
||||||
|
* JIT emits code to push and pop those registers onto the stack, immediately
|
||||||
|
* above the callee stack frame.
|
||||||
*/
|
*/
|
||||||
#define CALLEE_MASK (1 << ARM_R4 | 1 << ARM_R5 | 1 << ARM_R6 | \
|
#define CALLEE_MASK (1 << ARM_R4 | 1 << ARM_R5 | 1 << ARM_R6 | \
|
||||||
1 << ARM_R7 | 1 << ARM_R8 | 1 << ARM_R9 | \
|
1 << ARM_R7 | 1 << ARM_R8 | 1 << ARM_R9 | \
|
||||||
@ -70,6 +80,8 @@
|
|||||||
#define CALLEE_PUSH_MASK (CALLEE_MASK | 1 << ARM_LR)
|
#define CALLEE_PUSH_MASK (CALLEE_MASK | 1 << ARM_LR)
|
||||||
#define CALLEE_POP_MASK (CALLEE_MASK | 1 << ARM_PC)
|
#define CALLEE_POP_MASK (CALLEE_MASK | 1 << ARM_PC)
|
||||||
|
|
||||||
|
#define CALLER_MASK (1 << ARM_R0 | 1 << ARM_R1 | 1 << ARM_R2 | 1 << ARM_R3)
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
/* Stack layout - these are offsets from (top of stack - 4) */
|
/* Stack layout - these are offsets from (top of stack - 4) */
|
||||||
BPF_R2_HI,
|
BPF_R2_HI,
|
||||||
@ -464,6 +476,7 @@ static inline int epilogue_offset(const struct jit_ctx *ctx)
|
|||||||
|
|
||||||
static inline void emit_udivmod(u8 rd, u8 rm, u8 rn, struct jit_ctx *ctx, u8 op)
|
static inline void emit_udivmod(u8 rd, u8 rm, u8 rn, struct jit_ctx *ctx, u8 op)
|
||||||
{
|
{
|
||||||
|
const int exclude_mask = BIT(ARM_R0) | BIT(ARM_R1);
|
||||||
const s8 *tmp = bpf2a32[TMP_REG_1];
|
const s8 *tmp = bpf2a32[TMP_REG_1];
|
||||||
|
|
||||||
#if __LINUX_ARM_ARCH__ == 7
|
#if __LINUX_ARM_ARCH__ == 7
|
||||||
@ -495,11 +508,17 @@ static inline void emit_udivmod(u8 rd, u8 rm, u8 rn, struct jit_ctx *ctx, u8 op)
|
|||||||
emit(ARM_MOV_R(ARM_R0, rm), ctx);
|
emit(ARM_MOV_R(ARM_R0, rm), ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Push caller-saved registers on stack */
|
||||||
|
emit(ARM_PUSH(CALLER_MASK & ~exclude_mask), ctx);
|
||||||
|
|
||||||
/* Call appropriate function */
|
/* Call appropriate function */
|
||||||
emit_mov_i(ARM_IP, op == BPF_DIV ?
|
emit_mov_i(ARM_IP, op == BPF_DIV ?
|
||||||
(u32)jit_udiv32 : (u32)jit_mod32, ctx);
|
(u32)jit_udiv32 : (u32)jit_mod32, ctx);
|
||||||
emit_blx_r(ARM_IP, ctx);
|
emit_blx_r(ARM_IP, ctx);
|
||||||
|
|
||||||
|
/* Restore caller-saved registers from stack */
|
||||||
|
emit(ARM_POP(CALLER_MASK & ~exclude_mask), ctx);
|
||||||
|
|
||||||
/* Save return value */
|
/* Save return value */
|
||||||
if (rd != ARM_R0)
|
if (rd != ARM_R0)
|
||||||
emit(ARM_MOV_R(rd, ARM_R0), ctx);
|
emit(ARM_MOV_R(rd, ARM_R0), ctx);
|
||||||
|
@ -1931,8 +1931,6 @@ source "drivers/cpufreq/Kconfig"
|
|||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
source "drivers/firmware/Kconfig"
|
|
||||||
|
|
||||||
source "drivers/acpi/Kconfig"
|
source "drivers/acpi/Kconfig"
|
||||||
|
|
||||||
source "arch/arm64/kvm/Kconfig"
|
source "arch/arm64/kvm/Kconfig"
|
||||||
|
@ -115,7 +115,6 @@ v2m_refclk32khz: refclk32khz {
|
|||||||
|
|
||||||
bus@8000000 {
|
bus@8000000 {
|
||||||
compatible = "arm,vexpress,v2m-p1", "simple-bus";
|
compatible = "arm,vexpress,v2m-p1", "simple-bus";
|
||||||
arm,v2m-memory-map = "rs1";
|
|
||||||
#address-cells = <2>; /* SMB chipselect number and offset */
|
#address-cells = <2>; /* SMB chipselect number and offset */
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
@ -192,32 +192,9 @@ panel_in: endpoint {
|
|||||||
remote-endpoint = <&clcd_pads>;
|
remote-endpoint = <&clcd_pads>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
panel-timing {
|
|
||||||
clock-frequency = <63500127>;
|
|
||||||
hactive = <1024>;
|
|
||||||
hback-porch = <152>;
|
|
||||||
hfront-porch = <48>;
|
|
||||||
hsync-len = <104>;
|
|
||||||
vactive = <768>;
|
|
||||||
vback-porch = <23>;
|
|
||||||
vfront-porch = <3>;
|
|
||||||
vsync-len = <4>;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
bus@8000000 {
|
bus@8000000 {
|
||||||
compatible = "simple-bus";
|
|
||||||
|
|
||||||
#address-cells = <2>;
|
|
||||||
#size-cells = <1>;
|
|
||||||
ranges = <0 0 0 0x08000000 0x04000000>,
|
|
||||||
<1 0 0 0x14000000 0x04000000>,
|
|
||||||
<2 0 0 0x18000000 0x04000000>,
|
|
||||||
<3 0 0 0x1c000000 0x04000000>,
|
|
||||||
<4 0 0 0x0c000000 0x04000000>,
|
|
||||||
<5 0 0 0x10000000 0x04000000>;
|
|
||||||
|
|
||||||
#interrupt-cells = <1>;
|
#interrupt-cells = <1>;
|
||||||
interrupt-map-mask = <0 0 63>;
|
interrupt-map-mask = <0 0 63>;
|
||||||
interrupt-map = <0 0 0 &gic 0 0 GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>,
|
interrupt-map = <0 0 0 &gic 0 0 GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
@ -27,8 +27,6 @@ mailbox: mhu@2b1f0000 {
|
|||||||
reg = <0x0 0x2b1f0000 0x0 0x1000>;
|
reg = <0x0 0x2b1f0000 0x0 0x1000>;
|
||||||
interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>,
|
interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
<GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
|
<GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
interrupt-names = "mhu_lpri_rx",
|
|
||||||
"mhu_hpri_rx";
|
|
||||||
#mbox-cells = <1>;
|
#mbox-cells = <1>;
|
||||||
clocks = <&soc_refclk100mhz>;
|
clocks = <&soc_refclk100mhz>;
|
||||||
clock-names = "apb_pclk";
|
clock-names = "apb_pclk";
|
||||||
@ -804,16 +802,6 @@ memory@80000000 {
|
|||||||
};
|
};
|
||||||
|
|
||||||
bus@8000000 {
|
bus@8000000 {
|
||||||
compatible = "simple-bus";
|
|
||||||
#address-cells = <2>;
|
|
||||||
#size-cells = <1>;
|
|
||||||
ranges = <0 0 0 0x08000000 0x04000000>,
|
|
||||||
<1 0 0 0x14000000 0x04000000>,
|
|
||||||
<2 0 0 0x18000000 0x04000000>,
|
|
||||||
<3 0 0 0x1c000000 0x04000000>,
|
|
||||||
<4 0 0 0x0c000000 0x04000000>,
|
|
||||||
<5 0 0 0x10000000 0x04000000>;
|
|
||||||
|
|
||||||
#interrupt-cells = <1>;
|
#interrupt-cells = <1>;
|
||||||
interrupt-map-mask = <0 0 15>;
|
interrupt-map-mask = <0 0 15>;
|
||||||
interrupt-map = <0 0 0 &gic 0 GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH>,
|
interrupt-map = <0 0 0 &gic 0 GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
@ -92,16 +92,23 @@ nmi-button {
|
|||||||
};
|
};
|
||||||
|
|
||||||
bus@8000000 {
|
bus@8000000 {
|
||||||
motherboard-bus {
|
compatible = "simple-bus";
|
||||||
|
#address-cells = <2>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
ranges = <0 0x8000000 0 0x8000000 0x18000000>;
|
||||||
|
|
||||||
|
motherboard-bus@8000000 {
|
||||||
compatible = "arm,vexpress,v2p-p1", "simple-bus";
|
compatible = "arm,vexpress,v2p-p1", "simple-bus";
|
||||||
#address-cells = <2>; /* SMB chipselect number and offset */
|
#address-cells = <2>; /* SMB chipselect number and offset */
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
#interrupt-cells = <1>;
|
ranges = <0 0 0 0x08000000 0x04000000>,
|
||||||
ranges;
|
<1 0 0 0x14000000 0x04000000>,
|
||||||
model = "V2M-Juno";
|
<2 0 0 0x18000000 0x04000000>,
|
||||||
|
<3 0 0 0x1c000000 0x04000000>,
|
||||||
|
<4 0 0 0x0c000000 0x04000000>,
|
||||||
|
<5 0 0 0x10000000 0x04000000>;
|
||||||
arm,hbi = <0x252>;
|
arm,hbi = <0x252>;
|
||||||
arm,vexpress,site = <0>;
|
arm,vexpress,site = <0>;
|
||||||
arm,v2m-memory-map = "rs1";
|
|
||||||
|
|
||||||
flash@0 {
|
flash@0 {
|
||||||
/* 2 * 32MiB NOR Flash memory mounted on CS0 */
|
/* 2 * 32MiB NOR Flash memory mounted on CS0 */
|
||||||
@ -218,7 +225,7 @@ led7 {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
mmci@50000 {
|
mmc@50000 {
|
||||||
compatible = "arm,pl180", "arm,primecell";
|
compatible = "arm,pl180", "arm,primecell";
|
||||||
reg = <0x050000 0x1000>;
|
reg = <0x050000 0x1000>;
|
||||||
interrupts = <5>;
|
interrupts = <5>;
|
||||||
@ -246,7 +253,7 @@ kmi@70000 {
|
|||||||
clock-names = "KMIREFCLK", "apb_pclk";
|
clock-names = "KMIREFCLK", "apb_pclk";
|
||||||
};
|
};
|
||||||
|
|
||||||
wdt@f0000 {
|
watchdog@f0000 {
|
||||||
compatible = "arm,sp805", "arm,primecell";
|
compatible = "arm,sp805", "arm,primecell";
|
||||||
reg = <0x0f0000 0x10000>;
|
reg = <0x0f0000 0x10000>;
|
||||||
interrupts = <7>;
|
interrupts = <7>;
|
||||||
|
@ -133,17 +133,6 @@ panel_in: endpoint {
|
|||||||
};
|
};
|
||||||
|
|
||||||
bus@8000000 {
|
bus@8000000 {
|
||||||
compatible = "simple-bus";
|
|
||||||
|
|
||||||
#address-cells = <2>;
|
|
||||||
#size-cells = <1>;
|
|
||||||
ranges = <0 0 0 0x08000000 0x04000000>,
|
|
||||||
<1 0 0 0x14000000 0x04000000>,
|
|
||||||
<2 0 0 0x18000000 0x04000000>,
|
|
||||||
<3 0 0 0x1c000000 0x04000000>,
|
|
||||||
<4 0 0 0x0c000000 0x04000000>,
|
|
||||||
<5 0 0 0x10000000 0x04000000>;
|
|
||||||
|
|
||||||
#interrupt-cells = <1>;
|
#interrupt-cells = <1>;
|
||||||
interrupt-map-mask = <0 0 63>;
|
interrupt-map-mask = <0 0 63>;
|
||||||
interrupt-map = <0 0 0 &gic GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>,
|
interrupt-map = <0 0 0 &gic GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
*/
|
*/
|
||||||
/ {
|
/ {
|
||||||
bus@8000000 {
|
bus@8000000 {
|
||||||
motherboard-bus {
|
motherboard-bus@8000000 {
|
||||||
arm,v2m-memory-map = "rs2";
|
arm,v2m-memory-map = "rs2";
|
||||||
|
|
||||||
iofpga-bus@300000000 {
|
iofpga-bus@300000000 {
|
||||||
|
@ -77,13 +77,21 @@ dvimode {
|
|||||||
};
|
};
|
||||||
|
|
||||||
bus@8000000 {
|
bus@8000000 {
|
||||||
motherboard-bus {
|
compatible = "simple-bus";
|
||||||
arm,v2m-memory-map = "rs1";
|
#address-cells = <2>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
ranges = <0 0x8000000 0 0x8000000 0x18000000>;
|
||||||
|
|
||||||
|
motherboard-bus@8000000 {
|
||||||
compatible = "arm,vexpress,v2m-p1", "simple-bus";
|
compatible = "arm,vexpress,v2m-p1", "simple-bus";
|
||||||
#address-cells = <2>; /* SMB chipselect number and offset */
|
#address-cells = <2>; /* SMB chipselect number and offset */
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
#interrupt-cells = <1>;
|
ranges = <0 0 0 0x08000000 0x04000000>,
|
||||||
ranges;
|
<1 0 0 0x14000000 0x04000000>,
|
||||||
|
<2 0 0 0x18000000 0x04000000>,
|
||||||
|
<3 0 0 0x1c000000 0x04000000>,
|
||||||
|
<4 0 0 0x0c000000 0x04000000>,
|
||||||
|
<5 0 0 0x10000000 0x04000000>;
|
||||||
|
|
||||||
flash@0 {
|
flash@0 {
|
||||||
compatible = "arm,vexpress-flash", "cfi-flash";
|
compatible = "arm,vexpress-flash", "cfi-flash";
|
||||||
@ -130,7 +138,7 @@ aaci@40000 {
|
|||||||
clock-names = "apb_pclk";
|
clock-names = "apb_pclk";
|
||||||
};
|
};
|
||||||
|
|
||||||
mmci@50000 {
|
mmc@50000 {
|
||||||
compatible = "arm,pl180", "arm,primecell";
|
compatible = "arm,pl180", "arm,primecell";
|
||||||
reg = <0x050000 0x1000>;
|
reg = <0x050000 0x1000>;
|
||||||
interrupts = <9>, <10>;
|
interrupts = <9>, <10>;
|
||||||
@ -190,7 +198,7 @@ v2m_serial3: serial@c0000 {
|
|||||||
clock-names = "uartclk", "apb_pclk";
|
clock-names = "uartclk", "apb_pclk";
|
||||||
};
|
};
|
||||||
|
|
||||||
wdt@f0000 {
|
watchdog@f0000 {
|
||||||
compatible = "arm,sp805", "arm,primecell";
|
compatible = "arm,sp805", "arm,primecell";
|
||||||
reg = <0x0f0000 0x1000>;
|
reg = <0x0f0000 0x1000>;
|
||||||
interrupts = <0>;
|
interrupts = <0>;
|
||||||
|
@ -145,61 +145,6 @@ temp-fpga {
|
|||||||
};
|
};
|
||||||
|
|
||||||
smb: bus@8000000 {
|
smb: bus@8000000 {
|
||||||
compatible = "simple-bus";
|
ranges = <0x8000000 0 0x8000000 0x18000000>;
|
||||||
|
|
||||||
#address-cells = <2>;
|
|
||||||
#size-cells = <1>;
|
|
||||||
ranges = <0 0 0 0x08000000 0x04000000>,
|
|
||||||
<1 0 0 0x14000000 0x04000000>,
|
|
||||||
<2 0 0 0x18000000 0x04000000>,
|
|
||||||
<3 0 0 0x1c000000 0x04000000>,
|
|
||||||
<4 0 0 0x0c000000 0x04000000>,
|
|
||||||
<5 0 0 0x10000000 0x04000000>;
|
|
||||||
|
|
||||||
#interrupt-cells = <1>;
|
|
||||||
interrupt-map-mask = <0 0 63>;
|
|
||||||
interrupt-map = <0 0 0 &gic GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 1 &gic GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 2 &gic GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 3 &gic GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 4 &gic GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 5 &gic GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 6 &gic GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 7 &gic GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 8 &gic GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 9 &gic GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 10 &gic GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 11 &gic GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 12 &gic GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 13 &gic GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 14 &gic GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 15 &gic GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 16 &gic GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 17 &gic GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 18 &gic GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 19 &gic GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 20 &gic GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 21 &gic GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 22 &gic GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 23 &gic GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 24 &gic GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 25 &gic GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 26 &gic GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 27 &gic GIC_SPI 27 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 28 &gic GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 29 &gic GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 30 &gic GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 31 &gic GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 32 &gic GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 33 &gic GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 34 &gic GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 35 &gic GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 36 &gic GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 37 &gic GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 38 &gic GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 39 &gic GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 40 &gic GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 41 &gic GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<0 0 42 &gic GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
* TAKE CARE WHEN MAINTAINING THIS FILE TO PROPAGATE ANY RELEVANT
|
* TAKE CARE WHEN MAINTAINING THIS FILE TO PROPAGATE ANY RELEVANT
|
||||||
* CHANGES TO vexpress-v2m.dtsi!
|
* CHANGES TO vexpress-v2m.dtsi!
|
||||||
*/
|
*/
|
||||||
|
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
v2m_fixed_3v3: fixed-regulator-0 {
|
v2m_fixed_3v3: fixed-regulator-0 {
|
||||||
@ -101,16 +102,68 @@ led-8 {
|
|||||||
};
|
};
|
||||||
|
|
||||||
bus@8000000 {
|
bus@8000000 {
|
||||||
motherboard-bus {
|
compatible = "simple-bus";
|
||||||
model = "V2M-P1";
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
#interrupt-cells = <1>;
|
||||||
|
interrupt-map-mask = <0 63>;
|
||||||
|
interrupt-map = <0 0 &gic GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 1 &gic GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 2 &gic GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 3 &gic GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 4 &gic GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 5 &gic GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 6 &gic GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 7 &gic GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 8 &gic GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 9 &gic GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 10 &gic GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 11 &gic GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 12 &gic GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 13 &gic GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 14 &gic GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 15 &gic GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 16 &gic GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 17 &gic GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 18 &gic GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 19 &gic GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 20 &gic GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 21 &gic GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 22 &gic GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 23 &gic GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 24 &gic GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 25 &gic GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 26 &gic GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 27 &gic GIC_SPI 27 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 28 &gic GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 29 &gic GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 30 &gic GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 31 &gic GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 32 &gic GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 33 &gic GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 34 &gic GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 35 &gic GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 36 &gic GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 37 &gic GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 38 &gic GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 39 &gic GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 40 &gic GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 41 &gic GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 42 &gic GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
|
||||||
|
motherboard-bus@8000000 {
|
||||||
arm,hbi = <0x190>;
|
arm,hbi = <0x190>;
|
||||||
arm,vexpress,site = <0>;
|
arm,vexpress,site = <0>;
|
||||||
arm,v2m-memory-map = "rs1";
|
|
||||||
compatible = "arm,vexpress,v2m-p1", "simple-bus";
|
compatible = "arm,vexpress,v2m-p1", "simple-bus";
|
||||||
#address-cells = <2>; /* SMB chipselect number and offset */
|
#address-cells = <2>; /* SMB chipselect number and offset */
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
#interrupt-cells = <1>;
|
ranges = <0 0 0x08000000 0x04000000>,
|
||||||
ranges;
|
<1 0 0x14000000 0x04000000>,
|
||||||
|
<2 0 0x18000000 0x04000000>,
|
||||||
|
<3 0 0x1c000000 0x04000000>,
|
||||||
|
<4 0 0x0c000000 0x04000000>,
|
||||||
|
<5 0 0x10000000 0x04000000>;
|
||||||
|
|
||||||
nor_flash: flash@0 {
|
nor_flash: flash@0 {
|
||||||
compatible = "arm,vexpress-flash", "cfi-flash";
|
compatible = "arm,vexpress-flash", "cfi-flash";
|
||||||
@ -215,7 +268,7 @@ aaci@40000 {
|
|||||||
clock-names = "apb_pclk";
|
clock-names = "apb_pclk";
|
||||||
};
|
};
|
||||||
|
|
||||||
mmci@50000 {
|
mmc@50000 {
|
||||||
compatible = "arm,pl180", "arm,primecell";
|
compatible = "arm,pl180", "arm,primecell";
|
||||||
reg = <0x050000 0x1000>;
|
reg = <0x050000 0x1000>;
|
||||||
interrupts = <9>, <10>;
|
interrupts = <9>, <10>;
|
||||||
@ -275,7 +328,7 @@ v2m_serial3: serial@c0000 {
|
|||||||
clock-names = "uartclk", "apb_pclk";
|
clock-names = "uartclk", "apb_pclk";
|
||||||
};
|
};
|
||||||
|
|
||||||
wdt@f0000 {
|
watchdog@f0000 {
|
||||||
compatible = "arm,sp805", "arm,primecell";
|
compatible = "arm,sp805", "arm,primecell";
|
||||||
reg = <0x0f0000 0x1000>;
|
reg = <0x0f0000 0x1000>;
|
||||||
interrupts = <0>;
|
interrupts = <0>;
|
||||||
|
@ -405,9 +405,9 @@ esdhc1: mmc@2150000 {
|
|||||||
interrupts = <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clock-frequency = <0>; /* fixed up by bootloader */
|
clock-frequency = <0>; /* fixed up by bootloader */
|
||||||
clocks = <&clockgen QORIQ_CLK_HWACCEL 1>;
|
clocks = <&clockgen QORIQ_CLK_HWACCEL 1>;
|
||||||
voltage-ranges = <1800 1800 3300 3300>;
|
voltage-ranges = <1800 1800>;
|
||||||
sdhci,auto-cmd12;
|
sdhci,auto-cmd12;
|
||||||
broken-cd;
|
non-removable;
|
||||||
little-endian;
|
little-endian;
|
||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
@ -102,6 +102,7 @@ reg_vdd_arm: BUCK2 {
|
|||||||
regulator-min-microvolt = <850000>;
|
regulator-min-microvolt = <850000>;
|
||||||
regulator-max-microvolt = <950000>;
|
regulator-max-microvolt = <950000>;
|
||||||
regulator-boot-on;
|
regulator-boot-on;
|
||||||
|
regulator-always-on;
|
||||||
regulator-ramp-delay = <3125>;
|
regulator-ramp-delay = <3125>;
|
||||||
nxp,dvs-run-voltage = <950000>;
|
nxp,dvs-run-voltage = <950000>;
|
||||||
nxp,dvs-standby-voltage = <850000>;
|
nxp,dvs-standby-voltage = <850000>;
|
||||||
|
@ -337,6 +337,8 @@ n25q256a: flash@0 {
|
|||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
compatible = "micron,n25q256a", "jedec,spi-nor";
|
compatible = "micron,n25q256a", "jedec,spi-nor";
|
||||||
spi-max-frequency = <29000000>;
|
spi-max-frequency = <29000000>;
|
||||||
|
spi-tx-bus-width = <1>;
|
||||||
|
spi-rx-bus-width = <4>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -48,8 +48,10 @@ pm8150_0: pmic@0 {
|
|||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
|
||||||
pon: power-on@800 {
|
pon: power-on@800 {
|
||||||
compatible = "qcom,pm8916-pon";
|
compatible = "qcom,pm8998-pon";
|
||||||
reg = <0x0800>;
|
reg = <0x0800>;
|
||||||
|
mode-bootloader = <0x2>;
|
||||||
|
mode-recovery = <0x1>;
|
||||||
|
|
||||||
pon_pwrkey: pwrkey {
|
pon_pwrkey: pwrkey {
|
||||||
compatible = "qcom,pm8941-pwrkey";
|
compatible = "qcom,pm8941-pwrkey";
|
||||||
|
@ -804,6 +804,16 @@ lt9611_rst_pin: lt9611-rst-pin {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&pon_pwrkey {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&pon_resin {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
linux,code = <KEY_VOLUMEDOWN>;
|
||||||
|
};
|
||||||
|
|
||||||
&qupv3_id_0 {
|
&qupv3_id_0 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
@ -273,7 +273,6 @@ sound: sound {
|
|||||||
"Headphone Jack", "HPOL",
|
"Headphone Jack", "HPOL",
|
||||||
"Headphone Jack", "HPOR";
|
"Headphone Jack", "HPOR";
|
||||||
|
|
||||||
#sound-dai-cells = <0>;
|
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
|
||||||
@ -301,11 +300,11 @@ sound_multimedia1_codec: codec {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
dai-link@2 {
|
dai-link@5 {
|
||||||
link-name = "MultiMedia2";
|
link-name = "MultiMedia2";
|
||||||
reg = <2>;
|
reg = <LPASS_DP_RX>;
|
||||||
cpu {
|
cpu {
|
||||||
sound-dai = <&lpass_cpu 2>;
|
sound-dai = <&lpass_cpu LPASS_DP_RX>;
|
||||||
};
|
};
|
||||||
|
|
||||||
codec {
|
codec {
|
||||||
@ -782,7 +781,7 @@ secondary_mi2s: mi2s@1 {
|
|||||||
qcom,playback-sd-lines = <0>;
|
qcom,playback-sd-lines = <0>;
|
||||||
};
|
};
|
||||||
|
|
||||||
hdmi-primary@0 {
|
hdmi@5 {
|
||||||
reg = <LPASS_DP_RX>;
|
reg = <LPASS_DP_RX>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -1850,9 +1850,9 @@ rpmhcc: clock-controller {
|
|||||||
|
|
||||||
cpufreq_hw: cpufreq@18591000 {
|
cpufreq_hw: cpufreq@18591000 {
|
||||||
compatible = "qcom,cpufreq-epss";
|
compatible = "qcom,cpufreq-epss";
|
||||||
reg = <0 0x18591100 0 0x900>,
|
reg = <0 0x18591000 0 0x1000>,
|
||||||
<0 0x18592100 0 0x900>,
|
<0 0x18592000 0 0x1000>,
|
||||||
<0 0x18593100 0 0x900>;
|
<0 0x18593000 0 0x1000>;
|
||||||
clocks = <&rpmhcc RPMH_CXO_CLK>, <&gcc GCC_GPLL0>;
|
clocks = <&rpmhcc RPMH_CXO_CLK>, <&gcc GCC_GPLL0>;
|
||||||
clock-names = "xo", "alternate";
|
clock-names = "xo", "alternate";
|
||||||
#freq-domain-cells = <1>;
|
#freq-domain-cells = <1>;
|
||||||
|
@ -654,9 +654,20 @@ a2noc: interconnect@1704000 {
|
|||||||
compatible = "qcom,sdm660-a2noc";
|
compatible = "qcom,sdm660-a2noc";
|
||||||
reg = <0x01704000 0xc100>;
|
reg = <0x01704000 0xc100>;
|
||||||
#interconnect-cells = <1>;
|
#interconnect-cells = <1>;
|
||||||
clock-names = "bus", "bus_a";
|
clock-names = "bus",
|
||||||
|
"bus_a",
|
||||||
|
"ipa",
|
||||||
|
"ufs_axi",
|
||||||
|
"aggre2_ufs_axi",
|
||||||
|
"aggre2_usb3_axi",
|
||||||
|
"cfg_noc_usb2_axi";
|
||||||
clocks = <&rpmcc RPM_SMD_AGGR2_NOC_CLK>,
|
clocks = <&rpmcc RPM_SMD_AGGR2_NOC_CLK>,
|
||||||
<&rpmcc RPM_SMD_AGGR2_NOC_A_CLK>;
|
<&rpmcc RPM_SMD_AGGR2_NOC_A_CLK>,
|
||||||
|
<&rpmcc RPM_SMD_IPA_CLK>,
|
||||||
|
<&gcc GCC_UFS_AXI_CLK>,
|
||||||
|
<&gcc GCC_AGGRE2_UFS_AXI_CLK>,
|
||||||
|
<&gcc GCC_AGGRE2_USB3_AXI_CLK>,
|
||||||
|
<&gcc GCC_CFG_NOC_USB2_AXI_CLK>;
|
||||||
};
|
};
|
||||||
|
|
||||||
mnoc: interconnect@1745000 {
|
mnoc: interconnect@1745000 {
|
||||||
|
@ -128,23 +128,28 @@ camera_mem: memory@8bf00000 {
|
|||||||
no-map;
|
no-map;
|
||||||
};
|
};
|
||||||
|
|
||||||
wlan_msa_mem: memory@8c400000 {
|
ipa_fw_mem: memory@8c400000 {
|
||||||
reg = <0 0x8c400000 0 0x100000>;
|
reg = <0 0x8c400000 0 0x10000>;
|
||||||
no-map;
|
no-map;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpu_mem: memory@8c515000 {
|
ipa_gsi_mem: memory@8c410000 {
|
||||||
reg = <0 0x8c515000 0 0x2000>;
|
reg = <0 0x8c410000 0 0x5000>;
|
||||||
no-map;
|
no-map;
|
||||||
};
|
};
|
||||||
|
|
||||||
ipa_fw_mem: memory@8c517000 {
|
gpu_mem: memory@8c415000 {
|
||||||
reg = <0 0x8c517000 0 0x5a000>;
|
reg = <0 0x8c415000 0 0x2000>;
|
||||||
no-map;
|
no-map;
|
||||||
};
|
};
|
||||||
|
|
||||||
adsp_mem: memory@8c600000 {
|
adsp_mem: memory@8c500000 {
|
||||||
reg = <0 0x8c600000 0 0x1a00000>;
|
reg = <0 0x8c500000 0 0x1a00000>;
|
||||||
|
no-map;
|
||||||
|
};
|
||||||
|
|
||||||
|
wlan_msa_mem: memory@8df00000 {
|
||||||
|
reg = <0 0x8df00000 0 0x100000>;
|
||||||
no-map;
|
no-map;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -16,6 +16,17 @@
|
|||||||
#include "sdm850.dtsi"
|
#include "sdm850.dtsi"
|
||||||
#include "pm8998.dtsi"
|
#include "pm8998.dtsi"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Update following upstream (sdm845.dtsi) reserved
|
||||||
|
* memory mappings for firmware loading to succeed
|
||||||
|
* and enable the IPA device.
|
||||||
|
*/
|
||||||
|
/delete-node/ &ipa_fw_mem;
|
||||||
|
/delete-node/ &ipa_gsi_mem;
|
||||||
|
/delete-node/ &gpu_mem;
|
||||||
|
/delete-node/ &adsp_mem;
|
||||||
|
/delete-node/ &wlan_msa_mem;
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "Lenovo Yoga C630";
|
model = "Lenovo Yoga C630";
|
||||||
compatible = "lenovo,yoga-c630", "qcom,sdm845";
|
compatible = "lenovo,yoga-c630", "qcom,sdm845";
|
||||||
@ -58,6 +69,29 @@ panel_in_edp: endpoint {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Reserved memory changes for IPA */
|
||||||
|
reserved-memory {
|
||||||
|
wlan_msa_mem: memory@8c400000 {
|
||||||
|
reg = <0 0x8c400000 0 0x100000>;
|
||||||
|
no-map;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpu_mem: memory@8c515000 {
|
||||||
|
reg = <0 0x8c515000 0 0x2000>;
|
||||||
|
no-map;
|
||||||
|
};
|
||||||
|
|
||||||
|
ipa_fw_mem: memory@8c517000 {
|
||||||
|
reg = <0 0x8c517000 0 0x5a000>;
|
||||||
|
no-map;
|
||||||
|
};
|
||||||
|
|
||||||
|
adsp_mem: memory@8c600000 {
|
||||||
|
reg = <0 0x8c600000 0 0x1a00000>;
|
||||||
|
no-map;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
sn65dsi86_refclk: sn65dsi86-refclk {
|
sn65dsi86_refclk: sn65dsi86-refclk {
|
||||||
compatible = "fixed-clock";
|
compatible = "fixed-clock";
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
|
@ -506,6 +506,7 @@ CONFIG_BCMGENET=y
|
|||||||
CONFIG_ENC28J60=m
|
CONFIG_ENC28J60=m
|
||||||
CONFIG_QCA7000_SPI=m
|
CONFIG_QCA7000_SPI=m
|
||||||
CONFIG_QCA7000_UART=m
|
CONFIG_QCA7000_UART=m
|
||||||
|
CONFIG_R8169=m
|
||||||
CONFIG_WIZNET_W5100=m
|
CONFIG_WIZNET_W5100=m
|
||||||
CONFIG_WIZNET_W5100_SPI=m
|
CONFIG_WIZNET_W5100_SPI=m
|
||||||
CONFIG_MICREL_PHY=y
|
CONFIG_MICREL_PHY=y
|
||||||
@ -1367,6 +1368,7 @@ CONFIG_BTRFS_FS=m
|
|||||||
CONFIG_BTRFS_FS_POSIX_ACL=y
|
CONFIG_BTRFS_FS_POSIX_ACL=y
|
||||||
CONFIG_NILFS2_FS=m
|
CONFIG_NILFS2_FS=m
|
||||||
CONFIG_F2FS_FS=y
|
CONFIG_F2FS_FS=y
|
||||||
|
CONFIG_F2FS_FS_SECURITY=y
|
||||||
CONFIG_FS_ENCRYPTION=y
|
CONFIG_FS_ENCRYPTION=y
|
||||||
CONFIG_FANOTIFY=y
|
CONFIG_FANOTIFY=y
|
||||||
CONFIG_QFMT_V1=m
|
CONFIG_QFMT_V1=m
|
||||||
|
@ -1217,6 +1217,7 @@ CONFIG_BTRFS_FS=m
|
|||||||
CONFIG_BTRFS_FS_POSIX_ACL=y
|
CONFIG_BTRFS_FS_POSIX_ACL=y
|
||||||
CONFIG_NILFS2_FS=m
|
CONFIG_NILFS2_FS=m
|
||||||
CONFIG_F2FS_FS=y
|
CONFIG_F2FS_FS=y
|
||||||
|
CONFIG_F2FS_FS_SECURITY=y
|
||||||
CONFIG_FS_ENCRYPTION=y
|
CONFIG_FS_ENCRYPTION=y
|
||||||
CONFIG_FANOTIFY=y
|
CONFIG_FANOTIFY=y
|
||||||
CONFIG_QFMT_V1=m
|
CONFIG_QFMT_V1=m
|
||||||
|
@ -245,7 +245,6 @@ CONFIG_DEVTMPFS_MOUNT=y
|
|||||||
CONFIG_FW_LOADER_USER_HELPER=y
|
CONFIG_FW_LOADER_USER_HELPER=y
|
||||||
CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y
|
CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y
|
||||||
CONFIG_HISILICON_LPC=y
|
CONFIG_HISILICON_LPC=y
|
||||||
CONFIG_SIMPLE_PM_BUS=y
|
|
||||||
CONFIG_FSL_MC_BUS=y
|
CONFIG_FSL_MC_BUS=y
|
||||||
CONFIG_TEGRA_ACONNECT=m
|
CONFIG_TEGRA_ACONNECT=m
|
||||||
CONFIG_GNSS=m
|
CONFIG_GNSS=m
|
||||||
|
@ -54,7 +54,7 @@ $(obj)/kvm_nvhe.tmp.o: $(obj)/hyp.lds $(addprefix $(obj)/,$(hyp-obj)) FORCE
|
|||||||
# runtime. Because the hypervisor is part of the kernel binary, relocations
|
# runtime. Because the hypervisor is part of the kernel binary, relocations
|
||||||
# produce a kernel VA. We enumerate relocations targeting hyp at build time
|
# produce a kernel VA. We enumerate relocations targeting hyp at build time
|
||||||
# and convert the kernel VAs at those positions to hyp VAs.
|
# and convert the kernel VAs at those positions to hyp VAs.
|
||||||
$(obj)/hyp-reloc.S: $(obj)/kvm_nvhe.tmp.o $(obj)/gen-hyprel
|
$(obj)/hyp-reloc.S: $(obj)/kvm_nvhe.tmp.o $(obj)/gen-hyprel FORCE
|
||||||
$(call if_changed,hyprel)
|
$(call if_changed,hyprel)
|
||||||
|
|
||||||
# 5) Compile hyp-reloc.S and link it into the existing partially linked object.
|
# 5) Compile hyp-reloc.S and link it into the existing partially linked object.
|
||||||
|
@ -50,9 +50,6 @@ static struct perf_guest_info_callbacks kvm_guest_cbs = {
|
|||||||
|
|
||||||
int kvm_perf_init(void)
|
int kvm_perf_init(void)
|
||||||
{
|
{
|
||||||
if (kvm_pmu_probe_pmuver() != ID_AA64DFR0_PMUVER_IMP_DEF && !is_protected_kvm_enabled())
|
|
||||||
static_branch_enable(&kvm_arm_pmu_available);
|
|
||||||
|
|
||||||
return perf_register_guest_info_callbacks(&kvm_guest_cbs);
|
return perf_register_guest_info_callbacks(&kvm_guest_cbs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -740,7 +740,14 @@ void kvm_pmu_set_counter_event_type(struct kvm_vcpu *vcpu, u64 data,
|
|||||||
kvm_pmu_create_perf_event(vcpu, select_idx);
|
kvm_pmu_create_perf_event(vcpu, select_idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
int kvm_pmu_probe_pmuver(void)
|
void kvm_host_pmu_init(struct arm_pmu *pmu)
|
||||||
|
{
|
||||||
|
if (pmu->pmuver != 0 && pmu->pmuver != ID_AA64DFR0_PMUVER_IMP_DEF &&
|
||||||
|
!kvm_arm_support_pmu_v3() && !is_protected_kvm_enabled())
|
||||||
|
static_branch_enable(&kvm_arm_pmu_available);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int kvm_pmu_probe_pmuver(void)
|
||||||
{
|
{
|
||||||
struct perf_event_attr attr = { };
|
struct perf_event_attr attr = { };
|
||||||
struct perf_event *event;
|
struct perf_event *event;
|
||||||
|
@ -43,7 +43,7 @@ void __init arm64_hugetlb_cma_reserve(void)
|
|||||||
#ifdef CONFIG_ARM64_4K_PAGES
|
#ifdef CONFIG_ARM64_4K_PAGES
|
||||||
order = PUD_SHIFT - PAGE_SHIFT;
|
order = PUD_SHIFT - PAGE_SHIFT;
|
||||||
#else
|
#else
|
||||||
order = CONT_PMD_SHIFT + PMD_SHIFT - PAGE_SHIFT;
|
order = CONT_PMD_SHIFT - PAGE_SHIFT;
|
||||||
#endif
|
#endif
|
||||||
/*
|
/*
|
||||||
* HugeTLB CMA reservation is required for gigantic
|
* HugeTLB CMA reservation is required for gigantic
|
||||||
|
@ -8,7 +8,7 @@ config CSKY
|
|||||||
select ARCH_HAS_SYNC_DMA_FOR_DEVICE
|
select ARCH_HAS_SYNC_DMA_FOR_DEVICE
|
||||||
select ARCH_USE_BUILTIN_BSWAP
|
select ARCH_USE_BUILTIN_BSWAP
|
||||||
select ARCH_USE_QUEUED_RWLOCKS
|
select ARCH_USE_QUEUED_RWLOCKS
|
||||||
select ARCH_WANT_FRAME_POINTERS if !CPU_CK610
|
select ARCH_WANT_FRAME_POINTERS if !CPU_CK610 && $(cc-option,-mbacktrace)
|
||||||
select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT
|
select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT
|
||||||
select COMMON_CLK
|
select COMMON_CLK
|
||||||
select CLKSRC_MMIO
|
select CLKSRC_MMIO
|
||||||
@ -241,6 +241,7 @@ endchoice
|
|||||||
|
|
||||||
menuconfig HAVE_TCM
|
menuconfig HAVE_TCM
|
||||||
bool "Tightly-Coupled/Sram Memory"
|
bool "Tightly-Coupled/Sram Memory"
|
||||||
|
depends on !COMPILE_TEST
|
||||||
help
|
help
|
||||||
The implementation are not only used by TCM (Tightly-Coupled Meory)
|
The implementation are not only used by TCM (Tightly-Coupled Meory)
|
||||||
but also used by sram on SOC bus. It follow existed linux tcm
|
but also used by sram on SOC bus. It follow existed linux tcm
|
||||||
|
@ -74,7 +74,6 @@ static __always_inline unsigned long __fls(unsigned long x)
|
|||||||
* bug fix, why only could use atomic!!!!
|
* bug fix, why only could use atomic!!!!
|
||||||
*/
|
*/
|
||||||
#include <asm-generic/bitops/non-atomic.h>
|
#include <asm-generic/bitops/non-atomic.h>
|
||||||
#define __clear_bit(nr, vaddr) clear_bit(nr, vaddr)
|
|
||||||
|
|
||||||
#include <asm-generic/bitops/le.h>
|
#include <asm-generic/bitops/le.h>
|
||||||
#include <asm-generic/bitops/ext2-atomic.h>
|
#include <asm-generic/bitops/ext2-atomic.h>
|
||||||
|
@ -99,7 +99,8 @@ static int gpr_set(struct task_struct *target,
|
|||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
regs.sr = task_pt_regs(target)->sr;
|
/* BIT(0) of regs.sr is Condition Code/Carry bit */
|
||||||
|
regs.sr = (regs.sr & BIT(0)) | (task_pt_regs(target)->sr & ~BIT(0));
|
||||||
#ifdef CONFIG_CPU_HAS_HILO
|
#ifdef CONFIG_CPU_HAS_HILO
|
||||||
regs.dcsr = task_pt_regs(target)->dcsr;
|
regs.dcsr = task_pt_regs(target)->dcsr;
|
||||||
#endif
|
#endif
|
||||||
|
@ -52,10 +52,14 @@ static long restore_sigcontext(struct pt_regs *regs,
|
|||||||
struct sigcontext __user *sc)
|
struct sigcontext __user *sc)
|
||||||
{
|
{
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
unsigned long sr = regs->sr;
|
||||||
|
|
||||||
/* sc_pt_regs is structured the same as the start of pt_regs */
|
/* sc_pt_regs is structured the same as the start of pt_regs */
|
||||||
err |= __copy_from_user(regs, &sc->sc_pt_regs, sizeof(struct pt_regs));
|
err |= __copy_from_user(regs, &sc->sc_pt_regs, sizeof(struct pt_regs));
|
||||||
|
|
||||||
|
/* BIT(0) of regs->sr is Condition Code/Carry bit */
|
||||||
|
regs->sr = (sr & ~1) | (regs->sr & 1);
|
||||||
|
|
||||||
/* Restore the floating-point state. */
|
/* Restore the floating-point state. */
|
||||||
err |= restore_fpu_state(sc);
|
err |= restore_fpu_state(sc);
|
||||||
|
|
||||||
|
@ -388,8 +388,6 @@ config CRASH_DUMP
|
|||||||
help
|
help
|
||||||
Generate crash dump after being started by kexec.
|
Generate crash dump after being started by kexec.
|
||||||
|
|
||||||
source "drivers/firmware/Kconfig"
|
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
menu "Power management and ACPI options"
|
menu "Power management and ACPI options"
|
||||||
|
@ -15,7 +15,6 @@
|
|||||||
#include <asm/unistd.h>
|
#include <asm/unistd.h>
|
||||||
#include <asm/errno.h>
|
#include <asm/errno.h>
|
||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
#include <asm/segment.h>
|
|
||||||
#include <asm/traps.h>
|
#include <asm/traps.h>
|
||||||
#include <asm/asm-offsets.h>
|
#include <asm/asm-offsets.h>
|
||||||
#include <asm/entry.h>
|
#include <asm/entry.h>
|
||||||
@ -25,7 +24,6 @@
|
|||||||
.globl system_call
|
.globl system_call
|
||||||
.globl resume
|
.globl resume
|
||||||
.globl ret_from_exception
|
.globl ret_from_exception
|
||||||
.globl ret_from_signal
|
|
||||||
.globl sys_call_table
|
.globl sys_call_table
|
||||||
.globl bad_interrupt
|
.globl bad_interrupt
|
||||||
.globl inthandler1
|
.globl inthandler1
|
||||||
@ -59,8 +57,6 @@ do_trace:
|
|||||||
subql #4,%sp /* dummy return address */
|
subql #4,%sp /* dummy return address */
|
||||||
SAVE_SWITCH_STACK
|
SAVE_SWITCH_STACK
|
||||||
jbsr syscall_trace_leave
|
jbsr syscall_trace_leave
|
||||||
|
|
||||||
ret_from_signal:
|
|
||||||
RESTORE_SWITCH_STACK
|
RESTORE_SWITCH_STACK
|
||||||
addql #4,%sp
|
addql #4,%sp
|
||||||
jra ret_from_exception
|
jra ret_from_exception
|
||||||
|
@ -29,7 +29,6 @@ config M68K
|
|||||||
select NO_DMA if !MMU && !COLDFIRE
|
select NO_DMA if !MMU && !COLDFIRE
|
||||||
select OLD_SIGACTION
|
select OLD_SIGACTION
|
||||||
select OLD_SIGSUSPEND3
|
select OLD_SIGSUSPEND3
|
||||||
select SET_FS
|
|
||||||
select UACCESS_MEMCPY if !MMU
|
select UACCESS_MEMCPY if !MMU
|
||||||
select VIRT_TO_BUS
|
select VIRT_TO_BUS
|
||||||
select ZONE_DMA
|
select ZONE_DMA
|
||||||
|
@ -31,7 +31,6 @@
|
|||||||
#include <asm/thread_info.h>
|
#include <asm/thread_info.h>
|
||||||
#include <asm/errno.h>
|
#include <asm/errno.h>
|
||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
#include <asm/segment.h>
|
|
||||||
#include <asm/asm-offsets.h>
|
#include <asm/asm-offsets.h>
|
||||||
#include <asm/entry.h>
|
#include <asm/entry.h>
|
||||||
|
|
||||||
@ -51,7 +50,6 @@ sw_usp:
|
|||||||
.globl system_call
|
.globl system_call
|
||||||
.globl resume
|
.globl resume
|
||||||
.globl ret_from_exception
|
.globl ret_from_exception
|
||||||
.globl ret_from_signal
|
|
||||||
.globl sys_call_table
|
.globl sys_call_table
|
||||||
.globl inthandler
|
.globl inthandler
|
||||||
|
|
||||||
@ -98,8 +96,6 @@ ENTRY(system_call)
|
|||||||
subql #4,%sp /* dummy return address */
|
subql #4,%sp /* dummy return address */
|
||||||
SAVE_SWITCH_STACK
|
SAVE_SWITCH_STACK
|
||||||
jbsr syscall_trace_leave
|
jbsr syscall_trace_leave
|
||||||
|
|
||||||
ret_from_signal:
|
|
||||||
RESTORE_SWITCH_STACK
|
RESTORE_SWITCH_STACK
|
||||||
addql #4,%sp
|
addql #4,%sp
|
||||||
|
|
||||||
|
@ -9,7 +9,6 @@
|
|||||||
#define __ASM_M68K_PROCESSOR_H
|
#define __ASM_M68K_PROCESSOR_H
|
||||||
|
|
||||||
#include <linux/thread_info.h>
|
#include <linux/thread_info.h>
|
||||||
#include <asm/segment.h>
|
|
||||||
#include <asm/fpu.h>
|
#include <asm/fpu.h>
|
||||||
#include <asm/ptrace.h>
|
#include <asm/ptrace.h>
|
||||||
|
|
||||||
@ -75,11 +74,37 @@ static inline void wrusp(unsigned long usp)
|
|||||||
#define TASK_UNMAPPED_BASE 0
|
#define TASK_UNMAPPED_BASE 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Address spaces (or Function Codes in Motorola lingo) */
|
||||||
|
#define USER_DATA 1
|
||||||
|
#define USER_PROGRAM 2
|
||||||
|
#define SUPER_DATA 5
|
||||||
|
#define SUPER_PROGRAM 6
|
||||||
|
#define CPU_SPACE 7
|
||||||
|
|
||||||
|
#ifdef CONFIG_CPU_HAS_ADDRESS_SPACES
|
||||||
|
/*
|
||||||
|
* Set the SFC/DFC registers for special MM operations. For most normal
|
||||||
|
* operation these remain set to USER_DATA for the uaccess routines.
|
||||||
|
*/
|
||||||
|
static inline void set_fc(unsigned long val)
|
||||||
|
{
|
||||||
|
WARN_ON_ONCE(in_interrupt());
|
||||||
|
|
||||||
|
__asm__ __volatile__ ("movec %0,%/sfc\n\t"
|
||||||
|
"movec %0,%/dfc\n\t"
|
||||||
|
: /* no outputs */ : "r" (val) : "memory");
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline void set_fc(unsigned long val)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_CPU_HAS_ADDRESS_SPACES */
|
||||||
|
|
||||||
struct thread_struct {
|
struct thread_struct {
|
||||||
unsigned long ksp; /* kernel stack pointer */
|
unsigned long ksp; /* kernel stack pointer */
|
||||||
unsigned long usp; /* user stack pointer */
|
unsigned long usp; /* user stack pointer */
|
||||||
unsigned short sr; /* saved status register */
|
unsigned short sr; /* saved status register */
|
||||||
unsigned short fs; /* saved fs (sfc, dfc) */
|
unsigned short fc; /* saved fc (sfc, dfc) */
|
||||||
unsigned long crp[2]; /* cpu root pointer */
|
unsigned long crp[2]; /* cpu root pointer */
|
||||||
unsigned long esp0; /* points to SR of stack frame */
|
unsigned long esp0; /* points to SR of stack frame */
|
||||||
unsigned long faddr; /* info about last fault */
|
unsigned long faddr; /* info about last fault */
|
||||||
@ -92,7 +117,7 @@ struct thread_struct {
|
|||||||
#define INIT_THREAD { \
|
#define INIT_THREAD { \
|
||||||
.ksp = sizeof(init_stack) + (unsigned long) init_stack, \
|
.ksp = sizeof(init_stack) + (unsigned long) init_stack, \
|
||||||
.sr = PS_S, \
|
.sr = PS_S, \
|
||||||
.fs = __KERNEL_DS, \
|
.fc = USER_DATA, \
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -4,7 +4,6 @@
|
|||||||
|
|
||||||
#include <asm/types.h>
|
#include <asm/types.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
#include <asm/segment.h>
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* On machines with 4k pages we default to an 8k thread size, though we
|
* On machines with 4k pages we default to an 8k thread size, though we
|
||||||
@ -27,7 +26,6 @@
|
|||||||
struct thread_info {
|
struct thread_info {
|
||||||
struct task_struct *task; /* main task structure */
|
struct task_struct *task; /* main task structure */
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
mm_segment_t addr_limit; /* thread address space */
|
|
||||||
int preempt_count; /* 0 => preemptable, <0 => BUG */
|
int preempt_count; /* 0 => preemptable, <0 => BUG */
|
||||||
__u32 cpu; /* should always be 0 on m68k */
|
__u32 cpu; /* should always be 0 on m68k */
|
||||||
unsigned long tp_value; /* thread pointer */
|
unsigned long tp_value; /* thread pointer */
|
||||||
@ -37,7 +35,6 @@ struct thread_info {
|
|||||||
#define INIT_THREAD_INFO(tsk) \
|
#define INIT_THREAD_INFO(tsk) \
|
||||||
{ \
|
{ \
|
||||||
.task = &tsk, \
|
.task = &tsk, \
|
||||||
.addr_limit = KERNEL_DS, \
|
|
||||||
.preempt_count = INIT_PREEMPT_COUNT, \
|
.preempt_count = INIT_PREEMPT_COUNT, \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,13 +13,12 @@ static inline void flush_tlb_kernel_page(void *addr)
|
|||||||
if (CPU_IS_COLDFIRE) {
|
if (CPU_IS_COLDFIRE) {
|
||||||
mmu_write(MMUOR, MMUOR_CNL);
|
mmu_write(MMUOR, MMUOR_CNL);
|
||||||
} else if (CPU_IS_040_OR_060) {
|
} else if (CPU_IS_040_OR_060) {
|
||||||
mm_segment_t old_fs = get_fs();
|
set_fc(SUPER_DATA);
|
||||||
set_fs(KERNEL_DS);
|
|
||||||
__asm__ __volatile__(".chip 68040\n\t"
|
__asm__ __volatile__(".chip 68040\n\t"
|
||||||
"pflush (%0)\n\t"
|
"pflush (%0)\n\t"
|
||||||
".chip 68k"
|
".chip 68k"
|
||||||
: : "a" (addr));
|
: : "a" (addr));
|
||||||
set_fs(old_fs);
|
set_fc(USER_DATA);
|
||||||
} else if (CPU_IS_020_OR_030)
|
} else if (CPU_IS_020_OR_030)
|
||||||
__asm__ __volatile__("pflush #4,#4,(%0)" : : "a" (addr));
|
__asm__ __volatile__("pflush #4,#4,(%0)" : : "a" (addr));
|
||||||
}
|
}
|
||||||
@ -84,12 +83,8 @@ static inline void flush_tlb_mm(struct mm_struct *mm)
|
|||||||
|
|
||||||
static inline void flush_tlb_page(struct vm_area_struct *vma, unsigned long addr)
|
static inline void flush_tlb_page(struct vm_area_struct *vma, unsigned long addr)
|
||||||
{
|
{
|
||||||
if (vma->vm_mm == current->active_mm) {
|
if (vma->vm_mm == current->active_mm)
|
||||||
mm_segment_t old_fs = force_uaccess_begin();
|
|
||||||
|
|
||||||
__flush_tlb_one(addr);
|
__flush_tlb_one(addr);
|
||||||
force_uaccess_end(old_fs);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void flush_tlb_range(struct vm_area_struct *vma,
|
static inline void flush_tlb_range(struct vm_area_struct *vma,
|
||||||
|
@ -267,6 +267,10 @@ struct frame {
|
|||||||
} un;
|
} un;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef CONFIG_M68040
|
||||||
|
asmlinkage void berr_040cleanup(struct frame *fp);
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* __ASSEMBLY__ */
|
#endif /* __ASSEMBLY__ */
|
||||||
|
|
||||||
#endif /* _M68K_TRAPS_H */
|
#endif /* _M68K_TRAPS_H */
|
||||||
|
@ -9,13 +9,16 @@
|
|||||||
*/
|
*/
|
||||||
#include <linux/compiler.h>
|
#include <linux/compiler.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <asm/segment.h>
|
|
||||||
#include <asm/extable.h>
|
#include <asm/extable.h>
|
||||||
|
|
||||||
/* We let the MMU do all checking */
|
/* We let the MMU do all checking */
|
||||||
static inline int access_ok(const void __user *addr,
|
static inline int access_ok(const void __user *addr,
|
||||||
unsigned long size)
|
unsigned long size)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* XXX: for !CONFIG_CPU_HAS_ADDRESS_SPACES this really needs to check
|
||||||
|
* for TASK_SIZE!
|
||||||
|
*/
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -35,12 +38,9 @@ static inline int access_ok(const void __user *addr,
|
|||||||
#define MOVES "move"
|
#define MOVES "move"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern int __put_user_bad(void);
|
#define __put_user_asm(inst, res, x, ptr, bwl, reg, err) \
|
||||||
extern int __get_user_bad(void);
|
|
||||||
|
|
||||||
#define __put_user_asm(res, x, ptr, bwl, reg, err) \
|
|
||||||
asm volatile ("\n" \
|
asm volatile ("\n" \
|
||||||
"1: "MOVES"."#bwl" %2,%1\n" \
|
"1: "inst"."#bwl" %2,%1\n" \
|
||||||
"2:\n" \
|
"2:\n" \
|
||||||
" .section .fixup,\"ax\"\n" \
|
" .section .fixup,\"ax\"\n" \
|
||||||
" .even\n" \
|
" .even\n" \
|
||||||
@ -56,6 +56,31 @@ asm volatile ("\n" \
|
|||||||
: "+d" (res), "=m" (*(ptr)) \
|
: "+d" (res), "=m" (*(ptr)) \
|
||||||
: #reg (x), "i" (err))
|
: #reg (x), "i" (err))
|
||||||
|
|
||||||
|
#define __put_user_asm8(inst, res, x, ptr) \
|
||||||
|
do { \
|
||||||
|
const void *__pu_ptr = (const void __force *)(ptr); \
|
||||||
|
\
|
||||||
|
asm volatile ("\n" \
|
||||||
|
"1: "inst".l %2,(%1)+\n" \
|
||||||
|
"2: "inst".l %R2,(%1)\n" \
|
||||||
|
"3:\n" \
|
||||||
|
" .section .fixup,\"ax\"\n" \
|
||||||
|
" .even\n" \
|
||||||
|
"10: movel %3,%0\n" \
|
||||||
|
" jra 3b\n" \
|
||||||
|
" .previous\n" \
|
||||||
|
"\n" \
|
||||||
|
" .section __ex_table,\"a\"\n" \
|
||||||
|
" .align 4\n" \
|
||||||
|
" .long 1b,10b\n" \
|
||||||
|
" .long 2b,10b\n" \
|
||||||
|
" .long 3b,10b\n" \
|
||||||
|
" .previous" \
|
||||||
|
: "+d" (res), "+a" (__pu_ptr) \
|
||||||
|
: "r" (x), "i" (-EFAULT) \
|
||||||
|
: "memory"); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* These are the main single-value transfer routines. They automatically
|
* These are the main single-value transfer routines. They automatically
|
||||||
* use the right size if we just have the right pointer type.
|
* use the right size if we just have the right pointer type.
|
||||||
@ -68,51 +93,29 @@ asm volatile ("\n" \
|
|||||||
__chk_user_ptr(ptr); \
|
__chk_user_ptr(ptr); \
|
||||||
switch (sizeof (*(ptr))) { \
|
switch (sizeof (*(ptr))) { \
|
||||||
case 1: \
|
case 1: \
|
||||||
__put_user_asm(__pu_err, __pu_val, ptr, b, d, -EFAULT); \
|
__put_user_asm(MOVES, __pu_err, __pu_val, ptr, b, d, -EFAULT); \
|
||||||
break; \
|
break; \
|
||||||
case 2: \
|
case 2: \
|
||||||
__put_user_asm(__pu_err, __pu_val, ptr, w, r, -EFAULT); \
|
__put_user_asm(MOVES, __pu_err, __pu_val, ptr, w, r, -EFAULT); \
|
||||||
break; \
|
break; \
|
||||||
case 4: \
|
case 4: \
|
||||||
__put_user_asm(__pu_err, __pu_val, ptr, l, r, -EFAULT); \
|
__put_user_asm(MOVES, __pu_err, __pu_val, ptr, l, r, -EFAULT); \
|
||||||
break; \
|
break; \
|
||||||
case 8: \
|
case 8: \
|
||||||
{ \
|
__put_user_asm8(MOVES, __pu_err, __pu_val, ptr); \
|
||||||
const void __user *__pu_ptr = (ptr); \
|
|
||||||
asm volatile ("\n" \
|
|
||||||
"1: "MOVES".l %2,(%1)+\n" \
|
|
||||||
"2: "MOVES".l %R2,(%1)\n" \
|
|
||||||
"3:\n" \
|
|
||||||
" .section .fixup,\"ax\"\n" \
|
|
||||||
" .even\n" \
|
|
||||||
"10: movel %3,%0\n" \
|
|
||||||
" jra 3b\n" \
|
|
||||||
" .previous\n" \
|
|
||||||
"\n" \
|
|
||||||
" .section __ex_table,\"a\"\n" \
|
|
||||||
" .align 4\n" \
|
|
||||||
" .long 1b,10b\n" \
|
|
||||||
" .long 2b,10b\n" \
|
|
||||||
" .long 3b,10b\n" \
|
|
||||||
" .previous" \
|
|
||||||
: "+d" (__pu_err), "+a" (__pu_ptr) \
|
|
||||||
: "r" (__pu_val), "i" (-EFAULT) \
|
|
||||||
: "memory"); \
|
|
||||||
break; \
|
break; \
|
||||||
} \
|
|
||||||
default: \
|
default: \
|
||||||
__pu_err = __put_user_bad(); \
|
BUILD_BUG(); \
|
||||||
break; \
|
|
||||||
} \
|
} \
|
||||||
__pu_err; \
|
__pu_err; \
|
||||||
})
|
})
|
||||||
#define put_user(x, ptr) __put_user(x, ptr)
|
#define put_user(x, ptr) __put_user(x, ptr)
|
||||||
|
|
||||||
|
|
||||||
#define __get_user_asm(res, x, ptr, type, bwl, reg, err) ({ \
|
#define __get_user_asm(inst, res, x, ptr, type, bwl, reg, err) ({ \
|
||||||
type __gu_val; \
|
type __gu_val; \
|
||||||
asm volatile ("\n" \
|
asm volatile ("\n" \
|
||||||
"1: "MOVES"."#bwl" %2,%1\n" \
|
"1: "inst"."#bwl" %2,%1\n" \
|
||||||
"2:\n" \
|
"2:\n" \
|
||||||
" .section .fixup,\"ax\"\n" \
|
" .section .fixup,\"ax\"\n" \
|
||||||
" .even\n" \
|
" .even\n" \
|
||||||
@ -130,53 +133,57 @@ asm volatile ("\n" \
|
|||||||
(x) = (__force typeof(*(ptr)))(__force unsigned long)__gu_val; \
|
(x) = (__force typeof(*(ptr)))(__force unsigned long)__gu_val; \
|
||||||
})
|
})
|
||||||
|
|
||||||
|
#define __get_user_asm8(inst, res, x, ptr) \
|
||||||
|
do { \
|
||||||
|
const void *__gu_ptr = (const void __force *)(ptr); \
|
||||||
|
union { \
|
||||||
|
u64 l; \
|
||||||
|
__typeof__(*(ptr)) t; \
|
||||||
|
} __gu_val; \
|
||||||
|
\
|
||||||
|
asm volatile ("\n" \
|
||||||
|
"1: "inst".l (%2)+,%1\n" \
|
||||||
|
"2: "inst".l (%2),%R1\n" \
|
||||||
|
"3:\n" \
|
||||||
|
" .section .fixup,\"ax\"\n" \
|
||||||
|
" .even\n" \
|
||||||
|
"10: move.l %3,%0\n" \
|
||||||
|
" sub.l %1,%1\n" \
|
||||||
|
" sub.l %R1,%R1\n" \
|
||||||
|
" jra 3b\n" \
|
||||||
|
" .previous\n" \
|
||||||
|
"\n" \
|
||||||
|
" .section __ex_table,\"a\"\n" \
|
||||||
|
" .align 4\n" \
|
||||||
|
" .long 1b,10b\n" \
|
||||||
|
" .long 2b,10b\n" \
|
||||||
|
" .previous" \
|
||||||
|
: "+d" (res), "=&r" (__gu_val.l), \
|
||||||
|
"+a" (__gu_ptr) \
|
||||||
|
: "i" (-EFAULT) \
|
||||||
|
: "memory"); \
|
||||||
|
(x) = __gu_val.t; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
#define __get_user(x, ptr) \
|
#define __get_user(x, ptr) \
|
||||||
({ \
|
({ \
|
||||||
int __gu_err = 0; \
|
int __gu_err = 0; \
|
||||||
__chk_user_ptr(ptr); \
|
__chk_user_ptr(ptr); \
|
||||||
switch (sizeof(*(ptr))) { \
|
switch (sizeof(*(ptr))) { \
|
||||||
case 1: \
|
case 1: \
|
||||||
__get_user_asm(__gu_err, x, ptr, u8, b, d, -EFAULT); \
|
__get_user_asm(MOVES, __gu_err, x, ptr, u8, b, d, -EFAULT); \
|
||||||
break; \
|
break; \
|
||||||
case 2: \
|
case 2: \
|
||||||
__get_user_asm(__gu_err, x, ptr, u16, w, r, -EFAULT); \
|
__get_user_asm(MOVES, __gu_err, x, ptr, u16, w, r, -EFAULT); \
|
||||||
break; \
|
break; \
|
||||||
case 4: \
|
case 4: \
|
||||||
__get_user_asm(__gu_err, x, ptr, u32, l, r, -EFAULT); \
|
__get_user_asm(MOVES, __gu_err, x, ptr, u32, l, r, -EFAULT); \
|
||||||
break; \
|
break; \
|
||||||
case 8: { \
|
case 8: \
|
||||||
const void __user *__gu_ptr = (ptr); \
|
__get_user_asm8(MOVES, __gu_err, x, ptr); \
|
||||||
union { \
|
|
||||||
u64 l; \
|
|
||||||
__typeof__(*(ptr)) t; \
|
|
||||||
} __gu_val; \
|
|
||||||
asm volatile ("\n" \
|
|
||||||
"1: "MOVES".l (%2)+,%1\n" \
|
|
||||||
"2: "MOVES".l (%2),%R1\n" \
|
|
||||||
"3:\n" \
|
|
||||||
" .section .fixup,\"ax\"\n" \
|
|
||||||
" .even\n" \
|
|
||||||
"10: move.l %3,%0\n" \
|
|
||||||
" sub.l %1,%1\n" \
|
|
||||||
" sub.l %R1,%R1\n" \
|
|
||||||
" jra 3b\n" \
|
|
||||||
" .previous\n" \
|
|
||||||
"\n" \
|
|
||||||
" .section __ex_table,\"a\"\n" \
|
|
||||||
" .align 4\n" \
|
|
||||||
" .long 1b,10b\n" \
|
|
||||||
" .long 2b,10b\n" \
|
|
||||||
" .previous" \
|
|
||||||
: "+d" (__gu_err), "=&r" (__gu_val.l), \
|
|
||||||
"+a" (__gu_ptr) \
|
|
||||||
: "i" (-EFAULT) \
|
|
||||||
: "memory"); \
|
|
||||||
(x) = __gu_val.t; \
|
|
||||||
break; \
|
break; \
|
||||||
} \
|
|
||||||
default: \
|
default: \
|
||||||
__gu_err = __get_user_bad(); \
|
BUILD_BUG(); \
|
||||||
break; \
|
|
||||||
} \
|
} \
|
||||||
__gu_err; \
|
__gu_err; \
|
||||||
})
|
})
|
||||||
@ -322,16 +329,19 @@ __constant_copy_to_user(void __user *to, const void *from, unsigned long n)
|
|||||||
|
|
||||||
switch (n) {
|
switch (n) {
|
||||||
case 1:
|
case 1:
|
||||||
__put_user_asm(res, *(u8 *)from, (u8 __user *)to, b, d, 1);
|
__put_user_asm(MOVES, res, *(u8 *)from, (u8 __user *)to,
|
||||||
|
b, d, 1);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
__put_user_asm(res, *(u16 *)from, (u16 __user *)to, w, r, 2);
|
__put_user_asm(MOVES, res, *(u16 *)from, (u16 __user *)to,
|
||||||
|
w, r, 2);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
__constant_copy_to_user_asm(res, to, from, tmp, 3, w, b,);
|
__constant_copy_to_user_asm(res, to, from, tmp, 3, w, b,);
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
__put_user_asm(res, *(u32 *)from, (u32 __user *)to, l, r, 4);
|
__put_user_asm(MOVES, res, *(u32 *)from, (u32 __user *)to,
|
||||||
|
l, r, 4);
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
__constant_copy_to_user_asm(res, to, from, tmp, 5, l, b,);
|
__constant_copy_to_user_asm(res, to, from, tmp, 5, l, b,);
|
||||||
@ -380,8 +390,65 @@ raw_copy_to_user(void __user *to, const void *from, unsigned long n)
|
|||||||
#define INLINE_COPY_FROM_USER
|
#define INLINE_COPY_FROM_USER
|
||||||
#define INLINE_COPY_TO_USER
|
#define INLINE_COPY_TO_USER
|
||||||
|
|
||||||
#define user_addr_max() \
|
#define HAVE_GET_KERNEL_NOFAULT
|
||||||
(uaccess_kernel() ? ~0UL : TASK_SIZE)
|
|
||||||
|
#define __get_kernel_nofault(dst, src, type, err_label) \
|
||||||
|
do { \
|
||||||
|
type *__gk_dst = (type *)(dst); \
|
||||||
|
type *__gk_src = (type *)(src); \
|
||||||
|
int __gk_err = 0; \
|
||||||
|
\
|
||||||
|
switch (sizeof(type)) { \
|
||||||
|
case 1: \
|
||||||
|
__get_user_asm("move", __gk_err, *__gk_dst, __gk_src, \
|
||||||
|
u8, b, d, -EFAULT); \
|
||||||
|
break; \
|
||||||
|
case 2: \
|
||||||
|
__get_user_asm("move", __gk_err, *__gk_dst, __gk_src, \
|
||||||
|
u16, w, r, -EFAULT); \
|
||||||
|
break; \
|
||||||
|
case 4: \
|
||||||
|
__get_user_asm("move", __gk_err, *__gk_dst, __gk_src, \
|
||||||
|
u32, l, r, -EFAULT); \
|
||||||
|
break; \
|
||||||
|
case 8: \
|
||||||
|
__get_user_asm8("move", __gk_err, *__gk_dst, __gk_src); \
|
||||||
|
break; \
|
||||||
|
default: \
|
||||||
|
BUILD_BUG(); \
|
||||||
|
} \
|
||||||
|
if (unlikely(__gk_err)) \
|
||||||
|
goto err_label; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define __put_kernel_nofault(dst, src, type, err_label) \
|
||||||
|
do { \
|
||||||
|
type __pk_src = *(type *)(src); \
|
||||||
|
type *__pk_dst = (type *)(dst); \
|
||||||
|
int __pk_err = 0; \
|
||||||
|
\
|
||||||
|
switch (sizeof(type)) { \
|
||||||
|
case 1: \
|
||||||
|
__put_user_asm("move", __pk_err, __pk_src, __pk_dst, \
|
||||||
|
b, d, -EFAULT); \
|
||||||
|
break; \
|
||||||
|
case 2: \
|
||||||
|
__put_user_asm("move", __pk_err, __pk_src, __pk_dst, \
|
||||||
|
w, r, -EFAULT); \
|
||||||
|
break; \
|
||||||
|
case 4: \
|
||||||
|
__put_user_asm("move", __pk_err, __pk_src, __pk_dst, \
|
||||||
|
l, r, -EFAULT); \
|
||||||
|
break; \
|
||||||
|
case 8: \
|
||||||
|
__put_user_asm8("move", __pk_err, __pk_src, __pk_dst); \
|
||||||
|
break; \
|
||||||
|
default: \
|
||||||
|
BUILD_BUG(); \
|
||||||
|
} \
|
||||||
|
if (unlikely(__pk_err)) \
|
||||||
|
goto err_label; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
extern long strncpy_from_user(char *dst, const char __user *src, long count);
|
extern long strncpy_from_user(char *dst, const char __user *src, long count);
|
||||||
extern __must_check long strnlen_user(const char __user *str, long n);
|
extern __must_check long strnlen_user(const char __user *str, long n);
|
||||||
|
@ -36,7 +36,6 @@
|
|||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/errno.h>
|
#include <asm/errno.h>
|
||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
#include <asm/segment.h>
|
|
||||||
#include <asm/traps.h>
|
#include <asm/traps.h>
|
||||||
#include <asm/unistd.h>
|
#include <asm/unistd.h>
|
||||||
#include <asm/asm-offsets.h>
|
#include <asm/asm-offsets.h>
|
||||||
@ -78,20 +77,38 @@ ENTRY(__sys_clone3)
|
|||||||
|
|
||||||
ENTRY(sys_sigreturn)
|
ENTRY(sys_sigreturn)
|
||||||
SAVE_SWITCH_STACK
|
SAVE_SWITCH_STACK
|
||||||
movel %sp,%sp@- | switch_stack pointer
|
movel %sp,%a1 | switch_stack pointer
|
||||||
pea %sp@(SWITCH_STACK_SIZE+4) | pt_regs pointer
|
lea %sp@(SWITCH_STACK_SIZE),%a0 | pt_regs pointer
|
||||||
|
lea %sp@(-84),%sp | leave a gap
|
||||||
|
movel %a1,%sp@-
|
||||||
|
movel %a0,%sp@-
|
||||||
jbsr do_sigreturn
|
jbsr do_sigreturn
|
||||||
addql #8,%sp
|
jra 1f | shared with rt_sigreturn()
|
||||||
RESTORE_SWITCH_STACK
|
|
||||||
rts
|
|
||||||
|
|
||||||
ENTRY(sys_rt_sigreturn)
|
ENTRY(sys_rt_sigreturn)
|
||||||
SAVE_SWITCH_STACK
|
SAVE_SWITCH_STACK
|
||||||
movel %sp,%sp@- | switch_stack pointer
|
movel %sp,%a1 | switch_stack pointer
|
||||||
pea %sp@(SWITCH_STACK_SIZE+4) | pt_regs pointer
|
lea %sp@(SWITCH_STACK_SIZE),%a0 | pt_regs pointer
|
||||||
|
lea %sp@(-84),%sp | leave a gap
|
||||||
|
movel %a1,%sp@-
|
||||||
|
movel %a0,%sp@-
|
||||||
|
| stack contents:
|
||||||
|
| [original pt_regs address] [original switch_stack address]
|
||||||
|
| [gap] [switch_stack] [pt_regs] [exception frame]
|
||||||
jbsr do_rt_sigreturn
|
jbsr do_rt_sigreturn
|
||||||
addql #8,%sp
|
|
||||||
|
1:
|
||||||
|
| stack contents now:
|
||||||
|
| [original pt_regs address] [original switch_stack address]
|
||||||
|
| [unused part of the gap] [moved switch_stack] [moved pt_regs]
|
||||||
|
| [replacement exception frame]
|
||||||
|
| return value of do_{rt_,}sigreturn() points to moved switch_stack.
|
||||||
|
|
||||||
|
movel %d0,%sp | discard the leftover junk
|
||||||
RESTORE_SWITCH_STACK
|
RESTORE_SWITCH_STACK
|
||||||
|
| stack contents now is just [syscall return address] [pt_regs] [frame]
|
||||||
|
| return pt_regs.d0
|
||||||
|
movel %sp@(PT_OFF_D0+4),%d0
|
||||||
rts
|
rts
|
||||||
|
|
||||||
ENTRY(buserr)
|
ENTRY(buserr)
|
||||||
@ -182,25 +199,6 @@ do_trace_exit:
|
|||||||
addql #4,%sp
|
addql #4,%sp
|
||||||
jra .Lret_from_exception
|
jra .Lret_from_exception
|
||||||
|
|
||||||
ENTRY(ret_from_signal)
|
|
||||||
movel %curptr@(TASK_STACK),%a1
|
|
||||||
tstb %a1@(TINFO_FLAGS+2)
|
|
||||||
jge 1f
|
|
||||||
jbsr syscall_trace
|
|
||||||
1: RESTORE_SWITCH_STACK
|
|
||||||
addql #4,%sp
|
|
||||||
/* on 68040 complete pending writebacks if any */
|
|
||||||
#ifdef CONFIG_M68040
|
|
||||||
bfextu %sp@(PT_OFF_FORMATVEC){#0,#4},%d0
|
|
||||||
subql #7,%d0 | bus error frame ?
|
|
||||||
jbne 1f
|
|
||||||
movel %sp,%sp@-
|
|
||||||
jbsr berr_040cleanup
|
|
||||||
addql #4,%sp
|
|
||||||
1:
|
|
||||||
#endif
|
|
||||||
jra .Lret_from_exception
|
|
||||||
|
|
||||||
ENTRY(system_call)
|
ENTRY(system_call)
|
||||||
SAVE_ALL_SYS
|
SAVE_ALL_SYS
|
||||||
|
|
||||||
@ -338,7 +336,7 @@ resume:
|
|||||||
|
|
||||||
/* save fs (sfc,%dfc) (may be pointing to kernel memory) */
|
/* save fs (sfc,%dfc) (may be pointing to kernel memory) */
|
||||||
movec %sfc,%d0
|
movec %sfc,%d0
|
||||||
movew %d0,%a0@(TASK_THREAD+THREAD_FS)
|
movew %d0,%a0@(TASK_THREAD+THREAD_FC)
|
||||||
|
|
||||||
/* save usp */
|
/* save usp */
|
||||||
/* it is better to use a movel here instead of a movew 8*) */
|
/* it is better to use a movel here instead of a movew 8*) */
|
||||||
@ -424,7 +422,7 @@ resume:
|
|||||||
movel %a0,%usp
|
movel %a0,%usp
|
||||||
|
|
||||||
/* restore fs (sfc,%dfc) */
|
/* restore fs (sfc,%dfc) */
|
||||||
movew %a1@(TASK_THREAD+THREAD_FS),%a0
|
movew %a1@(TASK_THREAD+THREAD_FC),%a0
|
||||||
movec %a0,%sfc
|
movec %a0,%sfc
|
||||||
movec %a0,%dfc
|
movec %a0,%dfc
|
||||||
|
|
||||||
|
@ -92,7 +92,7 @@ void show_regs(struct pt_regs * regs)
|
|||||||
|
|
||||||
void flush_thread(void)
|
void flush_thread(void)
|
||||||
{
|
{
|
||||||
current->thread.fs = __USER_DS;
|
current->thread.fc = USER_DATA;
|
||||||
#ifdef CONFIG_FPU
|
#ifdef CONFIG_FPU
|
||||||
if (!FPU_IS_EMU) {
|
if (!FPU_IS_EMU) {
|
||||||
unsigned long zero = 0;
|
unsigned long zero = 0;
|
||||||
@ -155,7 +155,7 @@ int copy_thread(unsigned long clone_flags, unsigned long usp, unsigned long arg,
|
|||||||
* Must save the current SFC/DFC value, NOT the value when
|
* Must save the current SFC/DFC value, NOT the value when
|
||||||
* the parent was last descheduled - RGH 10-08-96
|
* the parent was last descheduled - RGH 10-08-96
|
||||||
*/
|
*/
|
||||||
p->thread.fs = get_fs().seg;
|
p->thread.fc = USER_DATA;
|
||||||
|
|
||||||
if (unlikely(p->flags & (PF_KTHREAD | PF_IO_WORKER))) {
|
if (unlikely(p->flags & (PF_KTHREAD | PF_IO_WORKER))) {
|
||||||
/* kernel thread */
|
/* kernel thread */
|
||||||
|
@ -447,7 +447,7 @@ static inline void save_fpu_state(struct sigcontext *sc, struct pt_regs *regs)
|
|||||||
|
|
||||||
if (CPU_IS_060 ? sc->sc_fpstate[2] : sc->sc_fpstate[0]) {
|
if (CPU_IS_060 ? sc->sc_fpstate[2] : sc->sc_fpstate[0]) {
|
||||||
fpu_version = sc->sc_fpstate[0];
|
fpu_version = sc->sc_fpstate[0];
|
||||||
if (CPU_IS_020_OR_030 &&
|
if (CPU_IS_020_OR_030 && !regs->stkadj &&
|
||||||
regs->vector >= (VEC_FPBRUC * 4) &&
|
regs->vector >= (VEC_FPBRUC * 4) &&
|
||||||
regs->vector <= (VEC_FPNAN * 4)) {
|
regs->vector <= (VEC_FPNAN * 4)) {
|
||||||
/* Clear pending exception in 68882 idle frame */
|
/* Clear pending exception in 68882 idle frame */
|
||||||
@ -510,7 +510,7 @@ static inline int rt_save_fpu_state(struct ucontext __user *uc, struct pt_regs *
|
|||||||
if (!(CPU_IS_060 || CPU_IS_COLDFIRE))
|
if (!(CPU_IS_060 || CPU_IS_COLDFIRE))
|
||||||
context_size = fpstate[1];
|
context_size = fpstate[1];
|
||||||
fpu_version = fpstate[0];
|
fpu_version = fpstate[0];
|
||||||
if (CPU_IS_020_OR_030 &&
|
if (CPU_IS_020_OR_030 && !regs->stkadj &&
|
||||||
regs->vector >= (VEC_FPBRUC * 4) &&
|
regs->vector >= (VEC_FPBRUC * 4) &&
|
||||||
regs->vector <= (VEC_FPNAN * 4)) {
|
regs->vector <= (VEC_FPNAN * 4)) {
|
||||||
/* Clear pending exception in 68882 idle frame */
|
/* Clear pending exception in 68882 idle frame */
|
||||||
@ -641,56 +641,35 @@ static inline void siginfo_build_tests(void)
|
|||||||
static int mangle_kernel_stack(struct pt_regs *regs, int formatvec,
|
static int mangle_kernel_stack(struct pt_regs *regs, int formatvec,
|
||||||
void __user *fp)
|
void __user *fp)
|
||||||
{
|
{
|
||||||
int fsize = frame_extra_sizes(formatvec >> 12);
|
int extra = frame_extra_sizes(formatvec >> 12);
|
||||||
if (fsize < 0) {
|
char buf[sizeof_field(struct frame, un)];
|
||||||
|
|
||||||
|
if (extra < 0) {
|
||||||
/*
|
/*
|
||||||
* user process trying to return with weird frame format
|
* user process trying to return with weird frame format
|
||||||
*/
|
*/
|
||||||
pr_debug("user process returning with weird frame format\n");
|
pr_debug("user process returning with weird frame format\n");
|
||||||
return 1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (!fsize) {
|
if (extra && copy_from_user(buf, fp, extra))
|
||||||
regs->format = formatvec >> 12;
|
return -1;
|
||||||
regs->vector = formatvec & 0xfff;
|
regs->format = formatvec >> 12;
|
||||||
} else {
|
regs->vector = formatvec & 0xfff;
|
||||||
struct switch_stack *sw = (struct switch_stack *)regs - 1;
|
if (extra) {
|
||||||
/* yes, twice as much as max(sizeof(frame.un.fmt<x>)) */
|
void *p = (struct switch_stack *)regs - 1;
|
||||||
unsigned long buf[sizeof_field(struct frame, un) / 2];
|
struct frame *new = (void *)regs - extra;
|
||||||
|
int size = sizeof(struct pt_regs)+sizeof(struct switch_stack);
|
||||||
|
|
||||||
/* that'll make sure that expansion won't crap over data */
|
memmove(p - extra, p, size);
|
||||||
if (copy_from_user(buf + fsize / 4, fp, fsize))
|
memcpy(p - extra + size, buf, extra);
|
||||||
return 1;
|
current->thread.esp0 = (unsigned long)&new->ptregs;
|
||||||
|
#ifdef CONFIG_M68040
|
||||||
/* point of no return */
|
/* on 68040 complete pending writebacks if any */
|
||||||
regs->format = formatvec >> 12;
|
if (new->ptregs.format == 7) // bus error frame
|
||||||
regs->vector = formatvec & 0xfff;
|
berr_040cleanup(new);
|
||||||
#define frame_offset (sizeof(struct pt_regs)+sizeof(struct switch_stack))
|
|
||||||
__asm__ __volatile__ (
|
|
||||||
#ifdef CONFIG_COLDFIRE
|
|
||||||
" movel %0,%/sp\n\t"
|
|
||||||
" bra ret_from_signal\n"
|
|
||||||
#else
|
|
||||||
" movel %0,%/a0\n\t"
|
|
||||||
" subl %1,%/a0\n\t" /* make room on stack */
|
|
||||||
" movel %/a0,%/sp\n\t" /* set stack pointer */
|
|
||||||
/* move switch_stack and pt_regs */
|
|
||||||
"1: movel %0@+,%/a0@+\n\t"
|
|
||||||
" dbra %2,1b\n\t"
|
|
||||||
" lea %/sp@(%c3),%/a0\n\t" /* add offset of fmt */
|
|
||||||
" lsrl #2,%1\n\t"
|
|
||||||
" subql #1,%1\n\t"
|
|
||||||
/* copy to the gap we'd made */
|
|
||||||
"2: movel %4@+,%/a0@+\n\t"
|
|
||||||
" dbra %1,2b\n\t"
|
|
||||||
" bral ret_from_signal\n"
|
|
||||||
#endif
|
#endif
|
||||||
: /* no outputs, it doesn't ever return */
|
|
||||||
: "a" (sw), "d" (fsize), "d" (frame_offset/4-1),
|
|
||||||
"n" (frame_offset), "a" (buf + fsize/4)
|
|
||||||
: "a0");
|
|
||||||
#undef frame_offset
|
|
||||||
}
|
}
|
||||||
return 0;
|
return extra;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
@ -698,7 +677,6 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *usc, void __u
|
|||||||
{
|
{
|
||||||
int formatvec;
|
int formatvec;
|
||||||
struct sigcontext context;
|
struct sigcontext context;
|
||||||
int err = 0;
|
|
||||||
|
|
||||||
siginfo_build_tests();
|
siginfo_build_tests();
|
||||||
|
|
||||||
@ -707,7 +685,7 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *usc, void __u
|
|||||||
|
|
||||||
/* get previous context */
|
/* get previous context */
|
||||||
if (copy_from_user(&context, usc, sizeof(context)))
|
if (copy_from_user(&context, usc, sizeof(context)))
|
||||||
goto badframe;
|
return -1;
|
||||||
|
|
||||||
/* restore passed registers */
|
/* restore passed registers */
|
||||||
regs->d0 = context.sc_d0;
|
regs->d0 = context.sc_d0;
|
||||||
@ -720,15 +698,10 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *usc, void __u
|
|||||||
wrusp(context.sc_usp);
|
wrusp(context.sc_usp);
|
||||||
formatvec = context.sc_formatvec;
|
formatvec = context.sc_formatvec;
|
||||||
|
|
||||||
err = restore_fpu_state(&context);
|
if (restore_fpu_state(&context))
|
||||||
|
return -1;
|
||||||
|
|
||||||
if (err || mangle_kernel_stack(regs, formatvec, fp))
|
return mangle_kernel_stack(regs, formatvec, fp);
|
||||||
goto badframe;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
badframe:
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
@ -745,7 +718,7 @@ rt_restore_ucontext(struct pt_regs *regs, struct switch_stack *sw,
|
|||||||
|
|
||||||
err = __get_user(temp, &uc->uc_mcontext.version);
|
err = __get_user(temp, &uc->uc_mcontext.version);
|
||||||
if (temp != MCONTEXT_VERSION)
|
if (temp != MCONTEXT_VERSION)
|
||||||
goto badframe;
|
return -1;
|
||||||
/* restore passed registers */
|
/* restore passed registers */
|
||||||
err |= __get_user(regs->d0, &gregs[0]);
|
err |= __get_user(regs->d0, &gregs[0]);
|
||||||
err |= __get_user(regs->d1, &gregs[1]);
|
err |= __get_user(regs->d1, &gregs[1]);
|
||||||
@ -774,22 +747,17 @@ rt_restore_ucontext(struct pt_regs *regs, struct switch_stack *sw,
|
|||||||
err |= restore_altstack(&uc->uc_stack);
|
err |= restore_altstack(&uc->uc_stack);
|
||||||
|
|
||||||
if (err)
|
if (err)
|
||||||
goto badframe;
|
return -1;
|
||||||
|
|
||||||
if (mangle_kernel_stack(regs, temp, &uc->uc_extra))
|
return mangle_kernel_stack(regs, temp, &uc->uc_extra);
|
||||||
goto badframe;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
badframe:
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
asmlinkage int do_sigreturn(struct pt_regs *regs, struct switch_stack *sw)
|
asmlinkage void *do_sigreturn(struct pt_regs *regs, struct switch_stack *sw)
|
||||||
{
|
{
|
||||||
unsigned long usp = rdusp();
|
unsigned long usp = rdusp();
|
||||||
struct sigframe __user *frame = (struct sigframe __user *)(usp - 4);
|
struct sigframe __user *frame = (struct sigframe __user *)(usp - 4);
|
||||||
sigset_t set;
|
sigset_t set;
|
||||||
|
int size;
|
||||||
|
|
||||||
if (!access_ok(frame, sizeof(*frame)))
|
if (!access_ok(frame, sizeof(*frame)))
|
||||||
goto badframe;
|
goto badframe;
|
||||||
@ -801,20 +769,22 @@ asmlinkage int do_sigreturn(struct pt_regs *regs, struct switch_stack *sw)
|
|||||||
|
|
||||||
set_current_blocked(&set);
|
set_current_blocked(&set);
|
||||||
|
|
||||||
if (restore_sigcontext(regs, &frame->sc, frame + 1))
|
size = restore_sigcontext(regs, &frame->sc, frame + 1);
|
||||||
|
if (size < 0)
|
||||||
goto badframe;
|
goto badframe;
|
||||||
return regs->d0;
|
return (void *)sw - size;
|
||||||
|
|
||||||
badframe:
|
badframe:
|
||||||
force_sig(SIGSEGV);
|
force_sig(SIGSEGV);
|
||||||
return 0;
|
return sw;
|
||||||
}
|
}
|
||||||
|
|
||||||
asmlinkage int do_rt_sigreturn(struct pt_regs *regs, struct switch_stack *sw)
|
asmlinkage void *do_rt_sigreturn(struct pt_regs *regs, struct switch_stack *sw)
|
||||||
{
|
{
|
||||||
unsigned long usp = rdusp();
|
unsigned long usp = rdusp();
|
||||||
struct rt_sigframe __user *frame = (struct rt_sigframe __user *)(usp - 4);
|
struct rt_sigframe __user *frame = (struct rt_sigframe __user *)(usp - 4);
|
||||||
sigset_t set;
|
sigset_t set;
|
||||||
|
int size;
|
||||||
|
|
||||||
if (!access_ok(frame, sizeof(*frame)))
|
if (!access_ok(frame, sizeof(*frame)))
|
||||||
goto badframe;
|
goto badframe;
|
||||||
@ -823,27 +793,34 @@ asmlinkage int do_rt_sigreturn(struct pt_regs *regs, struct switch_stack *sw)
|
|||||||
|
|
||||||
set_current_blocked(&set);
|
set_current_blocked(&set);
|
||||||
|
|
||||||
if (rt_restore_ucontext(regs, sw, &frame->uc))
|
size = rt_restore_ucontext(regs, sw, &frame->uc);
|
||||||
|
if (size < 0)
|
||||||
goto badframe;
|
goto badframe;
|
||||||
return regs->d0;
|
return (void *)sw - size;
|
||||||
|
|
||||||
badframe:
|
badframe:
|
||||||
force_sig(SIGSEGV);
|
force_sig(SIGSEGV);
|
||||||
return 0;
|
return sw;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline struct pt_regs *rte_regs(struct pt_regs *regs)
|
||||||
|
{
|
||||||
|
return (void *)regs + regs->stkadj;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setup_sigcontext(struct sigcontext *sc, struct pt_regs *regs,
|
static void setup_sigcontext(struct sigcontext *sc, struct pt_regs *regs,
|
||||||
unsigned long mask)
|
unsigned long mask)
|
||||||
{
|
{
|
||||||
|
struct pt_regs *tregs = rte_regs(regs);
|
||||||
sc->sc_mask = mask;
|
sc->sc_mask = mask;
|
||||||
sc->sc_usp = rdusp();
|
sc->sc_usp = rdusp();
|
||||||
sc->sc_d0 = regs->d0;
|
sc->sc_d0 = regs->d0;
|
||||||
sc->sc_d1 = regs->d1;
|
sc->sc_d1 = regs->d1;
|
||||||
sc->sc_a0 = regs->a0;
|
sc->sc_a0 = regs->a0;
|
||||||
sc->sc_a1 = regs->a1;
|
sc->sc_a1 = regs->a1;
|
||||||
sc->sc_sr = regs->sr;
|
sc->sc_sr = tregs->sr;
|
||||||
sc->sc_pc = regs->pc;
|
sc->sc_pc = tregs->pc;
|
||||||
sc->sc_formatvec = regs->format << 12 | regs->vector;
|
sc->sc_formatvec = tregs->format << 12 | tregs->vector;
|
||||||
save_a5_state(sc, regs);
|
save_a5_state(sc, regs);
|
||||||
save_fpu_state(sc, regs);
|
save_fpu_state(sc, regs);
|
||||||
}
|
}
|
||||||
@ -851,6 +828,7 @@ static void setup_sigcontext(struct sigcontext *sc, struct pt_regs *regs,
|
|||||||
static inline int rt_setup_ucontext(struct ucontext __user *uc, struct pt_regs *regs)
|
static inline int rt_setup_ucontext(struct ucontext __user *uc, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
struct switch_stack *sw = (struct switch_stack *)regs - 1;
|
struct switch_stack *sw = (struct switch_stack *)regs - 1;
|
||||||
|
struct pt_regs *tregs = rte_regs(regs);
|
||||||
greg_t __user *gregs = uc->uc_mcontext.gregs;
|
greg_t __user *gregs = uc->uc_mcontext.gregs;
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
@ -871,9 +849,9 @@ static inline int rt_setup_ucontext(struct ucontext __user *uc, struct pt_regs *
|
|||||||
err |= __put_user(sw->a5, &gregs[13]);
|
err |= __put_user(sw->a5, &gregs[13]);
|
||||||
err |= __put_user(sw->a6, &gregs[14]);
|
err |= __put_user(sw->a6, &gregs[14]);
|
||||||
err |= __put_user(rdusp(), &gregs[15]);
|
err |= __put_user(rdusp(), &gregs[15]);
|
||||||
err |= __put_user(regs->pc, &gregs[16]);
|
err |= __put_user(tregs->pc, &gregs[16]);
|
||||||
err |= __put_user(regs->sr, &gregs[17]);
|
err |= __put_user(tregs->sr, &gregs[17]);
|
||||||
err |= __put_user((regs->format << 12) | regs->vector, &uc->uc_formatvec);
|
err |= __put_user((tregs->format << 12) | tregs->vector, &uc->uc_formatvec);
|
||||||
err |= rt_save_fpu_state(uc, regs);
|
err |= rt_save_fpu_state(uc, regs);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@ -890,13 +868,14 @@ static int setup_frame(struct ksignal *ksig, sigset_t *set,
|
|||||||
struct pt_regs *regs)
|
struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
struct sigframe __user *frame;
|
struct sigframe __user *frame;
|
||||||
int fsize = frame_extra_sizes(regs->format);
|
struct pt_regs *tregs = rte_regs(regs);
|
||||||
|
int fsize = frame_extra_sizes(tregs->format);
|
||||||
struct sigcontext context;
|
struct sigcontext context;
|
||||||
int err = 0, sig = ksig->sig;
|
int err = 0, sig = ksig->sig;
|
||||||
|
|
||||||
if (fsize < 0) {
|
if (fsize < 0) {
|
||||||
pr_debug("setup_frame: Unknown frame format %#x\n",
|
pr_debug("setup_frame: Unknown frame format %#x\n",
|
||||||
regs->format);
|
tregs->format);
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -907,7 +886,7 @@ static int setup_frame(struct ksignal *ksig, sigset_t *set,
|
|||||||
|
|
||||||
err |= __put_user(sig, &frame->sig);
|
err |= __put_user(sig, &frame->sig);
|
||||||
|
|
||||||
err |= __put_user(regs->vector, &frame->code);
|
err |= __put_user(tregs->vector, &frame->code);
|
||||||
err |= __put_user(&frame->sc, &frame->psc);
|
err |= __put_user(&frame->sc, &frame->psc);
|
||||||
|
|
||||||
if (_NSIG_WORDS > 1)
|
if (_NSIG_WORDS > 1)
|
||||||
@ -933,34 +912,28 @@ static int setup_frame(struct ksignal *ksig, sigset_t *set,
|
|||||||
|
|
||||||
push_cache ((unsigned long) &frame->retcode);
|
push_cache ((unsigned long) &frame->retcode);
|
||||||
|
|
||||||
/*
|
|
||||||
* Set up registers for signal handler. All the state we are about
|
|
||||||
* to destroy is successfully copied to sigframe.
|
|
||||||
*/
|
|
||||||
wrusp ((unsigned long) frame);
|
|
||||||
regs->pc = (unsigned long) ksig->ka.sa.sa_handler;
|
|
||||||
adjustformat(regs);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is subtle; if we build more than one sigframe, all but the
|
* This is subtle; if we build more than one sigframe, all but the
|
||||||
* first one will see frame format 0 and have fsize == 0, so we won't
|
* first one will see frame format 0 and have fsize == 0, so we won't
|
||||||
* screw stkadj.
|
* screw stkadj.
|
||||||
*/
|
*/
|
||||||
if (fsize)
|
if (fsize) {
|
||||||
regs->stkadj = fsize;
|
regs->stkadj = fsize;
|
||||||
|
tregs = rte_regs(regs);
|
||||||
/* Prepare to skip over the extra stuff in the exception frame. */
|
|
||||||
if (regs->stkadj) {
|
|
||||||
struct pt_regs *tregs =
|
|
||||||
(struct pt_regs *)((ulong)regs + regs->stkadj);
|
|
||||||
pr_debug("Performing stackadjust=%04lx\n", regs->stkadj);
|
pr_debug("Performing stackadjust=%04lx\n", regs->stkadj);
|
||||||
/* This must be copied with decreasing addresses to
|
|
||||||
handle overlaps. */
|
|
||||||
tregs->vector = 0;
|
tregs->vector = 0;
|
||||||
tregs->format = 0;
|
tregs->format = 0;
|
||||||
tregs->pc = regs->pc;
|
|
||||||
tregs->sr = regs->sr;
|
tregs->sr = regs->sr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set up registers for signal handler. All the state we are about
|
||||||
|
* to destroy is successfully copied to sigframe.
|
||||||
|
*/
|
||||||
|
wrusp ((unsigned long) frame);
|
||||||
|
tregs->pc = (unsigned long) ksig->ka.sa.sa_handler;
|
||||||
|
adjustformat(regs);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -968,7 +941,8 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set,
|
|||||||
struct pt_regs *regs)
|
struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
struct rt_sigframe __user *frame;
|
struct rt_sigframe __user *frame;
|
||||||
int fsize = frame_extra_sizes(regs->format);
|
struct pt_regs *tregs = rte_regs(regs);
|
||||||
|
int fsize = frame_extra_sizes(tregs->format);
|
||||||
int err = 0, sig = ksig->sig;
|
int err = 0, sig = ksig->sig;
|
||||||
|
|
||||||
if (fsize < 0) {
|
if (fsize < 0) {
|
||||||
@ -1018,34 +992,27 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set,
|
|||||||
|
|
||||||
push_cache ((unsigned long) &frame->retcode);
|
push_cache ((unsigned long) &frame->retcode);
|
||||||
|
|
||||||
/*
|
|
||||||
* Set up registers for signal handler. All the state we are about
|
|
||||||
* to destroy is successfully copied to sigframe.
|
|
||||||
*/
|
|
||||||
wrusp ((unsigned long) frame);
|
|
||||||
regs->pc = (unsigned long) ksig->ka.sa.sa_handler;
|
|
||||||
adjustformat(regs);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is subtle; if we build more than one sigframe, all but the
|
* This is subtle; if we build more than one sigframe, all but the
|
||||||
* first one will see frame format 0 and have fsize == 0, so we won't
|
* first one will see frame format 0 and have fsize == 0, so we won't
|
||||||
* screw stkadj.
|
* screw stkadj.
|
||||||
*/
|
*/
|
||||||
if (fsize)
|
if (fsize) {
|
||||||
regs->stkadj = fsize;
|
regs->stkadj = fsize;
|
||||||
|
tregs = rte_regs(regs);
|
||||||
/* Prepare to skip over the extra stuff in the exception frame. */
|
|
||||||
if (regs->stkadj) {
|
|
||||||
struct pt_regs *tregs =
|
|
||||||
(struct pt_regs *)((ulong)regs + regs->stkadj);
|
|
||||||
pr_debug("Performing stackadjust=%04lx\n", regs->stkadj);
|
pr_debug("Performing stackadjust=%04lx\n", regs->stkadj);
|
||||||
/* This must be copied with decreasing addresses to
|
|
||||||
handle overlaps. */
|
|
||||||
tregs->vector = 0;
|
tregs->vector = 0;
|
||||||
tregs->format = 0;
|
tregs->format = 0;
|
||||||
tregs->pc = regs->pc;
|
|
||||||
tregs->sr = regs->sr;
|
tregs->sr = regs->sr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set up registers for signal handler. All the state we are about
|
||||||
|
* to destroy is successfully copied to sigframe.
|
||||||
|
*/
|
||||||
|
wrusp ((unsigned long) frame);
|
||||||
|
tregs->pc = (unsigned long) ksig->ka.sa.sa_handler;
|
||||||
|
adjustformat(regs);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user