Merge tag 'ASB-2020-09-05_4.19-stable' of https://android.googlesource.com/kernel/common
https://source.android.com/security/bulletin/2020-09-01 CVE-2020-0402 CVE-2020-0404 CVE-2020-0407 * tag 'ASB-2020-09-05_4.19-stable': (3616 commits) Linux 4.19.143 ALSA: usb-audio: Update documentation comment for MS2109 quirk HID: hiddev: Fix slab-out-of-bounds write in hiddev_ioctl_usage() tpm: Unify the mismatching TPM space buffer sizes usb: dwc3: gadget: Handle ZLP for sg requests usb: dwc3: gadget: Fix handling ZLP usb: dwc3: gadget: Don't setup more than requested btrfs: check the right error variable in btrfs_del_dir_entries_in_log usb: storage: Add unusual_uas entry for Sony PSZ drives USB: cdc-acm: rework notification_buffer resizing USB: gadget: u_f: Unbreak offset calculation in VLAs USB: gadget: f_ncm: add bounds checks to ncm_unwrap_ntb() USB: gadget: u_f: add overflow checks to VLA macros usb: host: ohci-exynos: Fix error handling in exynos_ohci_probe() USB: Ignore UAS for JMicron JMS567 ATA/ATAPI Bridge USB: quirks: Ignore duplicate endpoint on Sound Devices MixPre-D USB: quirks: Add no-lpm quirk for another Raydium touchscreen usb: uas: Add quirk for PNY Pro Elite USB: yurex: Fix bad gfp argument drm/amd/pm: correct Vega12 swctf limit setting ... Change-Id: Iece02c55e9b3446bdda5dc7bdfbe3e310b2dbc83 Conflicts: arch/arm/boot/dts/rk322x.dtsi arch/arm64/boot/dts/rockchip/rk3399.dtsi arch/arm64/kernel/cpuinfo.c drivers/clk/clk.c drivers/clk/rockchip/clk-cpu.c drivers/clk/rockchip/clk-rk3228.c drivers/devfreq/governor_simpleondemand.c drivers/gpu/drm/bridge/synopsys/dw-hdmi.c drivers/gpu/drm/drm_edid.c drivers/hid/usbhid/hid-core.c drivers/media/i2c/ov5695.c drivers/media/v4l2-core/v4l2-ioctl.c drivers/regulator/core.c drivers/thermal/cpu_cooling.c drivers/usb/core/quirks.c drivers/usb/dwc2/platform.c drivers/usb/dwc3/core.c drivers/usb/dwc3/core.h drivers/usb/dwc3/gadget.c drivers/usb/host/ehci-platform.c drivers/usb/storage/unusual_uas.h include/drm/drm_connector.h include/linux/clk-provider.h include/linux/devfreq.h include/linux/pci_ids.h kernel/power/wakeup_reason.c mm/memory.c mm/swapfile.c
This commit is contained in:
@@ -6,6 +6,8 @@ Description:
|
|||||||
This file allows user to read/write the raw NVMEM contents.
|
This file allows user to read/write the raw NVMEM contents.
|
||||||
Permissions for write to this file depends on the nvmem
|
Permissions for write to this file depends on the nvmem
|
||||||
provider configuration.
|
provider configuration.
|
||||||
|
Note: This file is only present if CONFIG_NVMEM_SYSFS
|
||||||
|
is enabled
|
||||||
|
|
||||||
ex:
|
ex:
|
||||||
hexdump /sys/bus/nvmem/devices/qfprom0/nvmem
|
hexdump /sys/bus/nvmem/devices/qfprom0/nvmem
|
||||||
|
|||||||
@@ -1559,7 +1559,8 @@ What: /sys/bus/iio/devices/iio:deviceX/in_concentrationX_voc_raw
|
|||||||
KernelVersion: 4.3
|
KernelVersion: 4.3
|
||||||
Contact: linux-iio@vger.kernel.org
|
Contact: linux-iio@vger.kernel.org
|
||||||
Description:
|
Description:
|
||||||
Raw (unscaled no offset etc.) percentage reading of a substance.
|
Raw (unscaled no offset etc.) reading of a substance. Units
|
||||||
|
after application of scale and offset are percents.
|
||||||
|
|
||||||
What: /sys/bus/iio/devices/iio:deviceX/in_resistance_raw
|
What: /sys/bus/iio/devices/iio:deviceX/in_resistance_raw
|
||||||
What: /sys/bus/iio/devices/iio:deviceX/in_resistanceX_raw
|
What: /sys/bus/iio/devices/iio:deviceX/in_resistanceX_raw
|
||||||
|
|||||||
@@ -144,7 +144,8 @@ Description:
|
|||||||
Access: Read
|
Access: Read
|
||||||
Valid values: "Unknown", "Good", "Overheat", "Dead",
|
Valid values: "Unknown", "Good", "Overheat", "Dead",
|
||||||
"Over voltage", "Unspecified failure", "Cold",
|
"Over voltage", "Unspecified failure", "Cold",
|
||||||
"Watchdog timer expire", "Safety timer expire"
|
"Watchdog timer expire", "Safety timer expire",
|
||||||
|
"Over current", "Warm", "Cool", "Hot"
|
||||||
|
|
||||||
What: /sys/class/power_supply/<supply_name>/precharge_current
|
What: /sys/class/power_supply/<supply_name>/precharge_current
|
||||||
Date: June 2017
|
Date: June 2017
|
||||||
|
|||||||
@@ -478,6 +478,7 @@ What: /sys/devices/system/cpu/vulnerabilities
|
|||||||
/sys/devices/system/cpu/vulnerabilities/spec_store_bypass
|
/sys/devices/system/cpu/vulnerabilities/spec_store_bypass
|
||||||
/sys/devices/system/cpu/vulnerabilities/l1tf
|
/sys/devices/system/cpu/vulnerabilities/l1tf
|
||||||
/sys/devices/system/cpu/vulnerabilities/mds
|
/sys/devices/system/cpu/vulnerabilities/mds
|
||||||
|
/sys/devices/system/cpu/vulnerabilities/srbds
|
||||||
/sys/devices/system/cpu/vulnerabilities/tsx_async_abort
|
/sys/devices/system/cpu/vulnerabilities/tsx_async_abort
|
||||||
/sys/devices/system/cpu/vulnerabilities/itlb_multihit
|
/sys/devices/system/cpu/vulnerabilities/itlb_multihit
|
||||||
Date: January 2018
|
Date: January 2018
|
||||||
|
|||||||
@@ -318,3 +318,32 @@ Date: September 2019
|
|||||||
Contact: "Hridya Valsaraju" <hridya@google.com>
|
Contact: "Hridya Valsaraju" <hridya@google.com>
|
||||||
Description: Average number of valid blocks.
|
Description: Average number of valid blocks.
|
||||||
Available when CONFIG_F2FS_STAT_FS=y.
|
Available when CONFIG_F2FS_STAT_FS=y.
|
||||||
|
|
||||||
|
What: /sys/fs/f2fs/<disk>/mounted_time_sec
|
||||||
|
Date: February 2020
|
||||||
|
Contact: "Jaegeuk Kim" <jaegeuk@kernel.org>
|
||||||
|
Description: Show the mounted time in secs of this partition.
|
||||||
|
|
||||||
|
What: /sys/fs/f2fs/<disk>/data_io_flag
|
||||||
|
Date: April 2020
|
||||||
|
Contact: "Jaegeuk Kim" <jaegeuk@kernel.org>
|
||||||
|
Description: Give a way to attach REQ_META|FUA to data writes
|
||||||
|
given temperature-based bits. Now the bits indicate:
|
||||||
|
* REQ_META | REQ_FUA |
|
||||||
|
* 5 | 4 | 3 | 2 | 1 | 0 |
|
||||||
|
* Cold | Warm | Hot | Cold | Warm | Hot |
|
||||||
|
|
||||||
|
What: /sys/fs/f2fs/<disk>/node_io_flag
|
||||||
|
Date: June 2020
|
||||||
|
Contact: "Jaegeuk Kim" <jaegeuk@kernel.org>
|
||||||
|
Description: Give a way to attach REQ_META|FUA to node writes
|
||||||
|
given temperature-based bits. Now the bits indicate:
|
||||||
|
* REQ_META | REQ_FUA |
|
||||||
|
* 5 | 4 | 3 | 2 | 1 | 0 |
|
||||||
|
* Cold | Warm | Hot | Cold | Warm | Hot |
|
||||||
|
|
||||||
|
What: /sys/fs/f2fs/<disk>/iostat_period_ms
|
||||||
|
Date: April 2020
|
||||||
|
Contact: "Daeho Jeong" <daehojeong@google.com>
|
||||||
|
Description: Give a way to change iostat_period time. 3secs by default.
|
||||||
|
The new iostat trace gives stats gap given the period.
|
||||||
|
|||||||
@@ -14,3 +14,4 @@ are configurable at compile, boot or run time.
|
|||||||
mds
|
mds
|
||||||
tsx_async_abort
|
tsx_async_abort
|
||||||
multihit.rst
|
multihit.rst
|
||||||
|
special-register-buffer-data-sampling.rst
|
||||||
|
|||||||
@@ -0,0 +1,149 @@
|
|||||||
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
SRBDS - Special Register Buffer Data Sampling
|
||||||
|
=============================================
|
||||||
|
|
||||||
|
SRBDS is a hardware vulnerability that allows MDS :doc:`mds` techniques to
|
||||||
|
infer values returned from special register accesses. Special register
|
||||||
|
accesses are accesses to off core registers. According to Intel's evaluation,
|
||||||
|
the special register reads that have a security expectation of privacy are
|
||||||
|
RDRAND, RDSEED and SGX EGETKEY.
|
||||||
|
|
||||||
|
When RDRAND, RDSEED and EGETKEY instructions are used, the data is moved
|
||||||
|
to the core through the special register mechanism that is susceptible
|
||||||
|
to MDS attacks.
|
||||||
|
|
||||||
|
Affected processors
|
||||||
|
--------------------
|
||||||
|
Core models (desktop, mobile, Xeon-E3) that implement RDRAND and/or RDSEED may
|
||||||
|
be affected.
|
||||||
|
|
||||||
|
A processor is affected by SRBDS if its Family_Model and stepping is
|
||||||
|
in the following list, with the exception of the listed processors
|
||||||
|
exporting MDS_NO while Intel TSX is available yet not enabled. The
|
||||||
|
latter class of processors are only affected when Intel TSX is enabled
|
||||||
|
by software using TSX_CTRL_MSR otherwise they are not affected.
|
||||||
|
|
||||||
|
============= ============ ========
|
||||||
|
common name Family_Model Stepping
|
||||||
|
============= ============ ========
|
||||||
|
IvyBridge 06_3AH All
|
||||||
|
|
||||||
|
Haswell 06_3CH All
|
||||||
|
Haswell_L 06_45H All
|
||||||
|
Haswell_G 06_46H All
|
||||||
|
|
||||||
|
Broadwell_G 06_47H All
|
||||||
|
Broadwell 06_3DH All
|
||||||
|
|
||||||
|
Skylake_L 06_4EH All
|
||||||
|
Skylake 06_5EH All
|
||||||
|
|
||||||
|
Kabylake_L 06_8EH <= 0xC
|
||||||
|
Kabylake 06_9EH <= 0xD
|
||||||
|
============= ============ ========
|
||||||
|
|
||||||
|
Related CVEs
|
||||||
|
------------
|
||||||
|
|
||||||
|
The following CVE entry is related to this SRBDS issue:
|
||||||
|
|
||||||
|
============== ===== =====================================
|
||||||
|
CVE-2020-0543 SRBDS Special Register Buffer Data Sampling
|
||||||
|
============== ===== =====================================
|
||||||
|
|
||||||
|
Attack scenarios
|
||||||
|
----------------
|
||||||
|
An unprivileged user can extract values returned from RDRAND and RDSEED
|
||||||
|
executed on another core or sibling thread using MDS techniques.
|
||||||
|
|
||||||
|
|
||||||
|
Mitigation mechanism
|
||||||
|
-------------------
|
||||||
|
Intel will release microcode updates that modify the RDRAND, RDSEED, and
|
||||||
|
EGETKEY instructions to overwrite secret special register data in the shared
|
||||||
|
staging buffer before the secret data can be accessed by another logical
|
||||||
|
processor.
|
||||||
|
|
||||||
|
During execution of the RDRAND, RDSEED, or EGETKEY instructions, off-core
|
||||||
|
accesses from other logical processors will be delayed until the special
|
||||||
|
register read is complete and the secret data in the shared staging buffer is
|
||||||
|
overwritten.
|
||||||
|
|
||||||
|
This has three effects on performance:
|
||||||
|
|
||||||
|
#. RDRAND, RDSEED, or EGETKEY instructions have higher latency.
|
||||||
|
|
||||||
|
#. Executing RDRAND at the same time on multiple logical processors will be
|
||||||
|
serialized, resulting in an overall reduction in the maximum RDRAND
|
||||||
|
bandwidth.
|
||||||
|
|
||||||
|
#. Executing RDRAND, RDSEED or EGETKEY will delay memory accesses from other
|
||||||
|
logical processors that miss their core caches, with an impact similar to
|
||||||
|
legacy locked cache-line-split accesses.
|
||||||
|
|
||||||
|
The microcode updates provide an opt-out mechanism (RNGDS_MITG_DIS) to disable
|
||||||
|
the mitigation for RDRAND and RDSEED instructions executed outside of Intel
|
||||||
|
Software Guard Extensions (Intel SGX) enclaves. On logical processors that
|
||||||
|
disable the mitigation using this opt-out mechanism, RDRAND and RDSEED do not
|
||||||
|
take longer to execute and do not impact performance of sibling logical
|
||||||
|
processors memory accesses. The opt-out mechanism does not affect Intel SGX
|
||||||
|
enclaves (including execution of RDRAND or RDSEED inside an enclave, as well
|
||||||
|
as EGETKEY execution).
|
||||||
|
|
||||||
|
IA32_MCU_OPT_CTRL MSR Definition
|
||||||
|
--------------------------------
|
||||||
|
Along with the mitigation for this issue, Intel added a new thread-scope
|
||||||
|
IA32_MCU_OPT_CTRL MSR, (address 0x123). The presence of this MSR and
|
||||||
|
RNGDS_MITG_DIS (bit 0) is enumerated by CPUID.(EAX=07H,ECX=0).EDX[SRBDS_CTRL =
|
||||||
|
9]==1. This MSR is introduced through the microcode update.
|
||||||
|
|
||||||
|
Setting IA32_MCU_OPT_CTRL[0] (RNGDS_MITG_DIS) to 1 for a logical processor
|
||||||
|
disables the mitigation for RDRAND and RDSEED executed outside of an Intel SGX
|
||||||
|
enclave on that logical processor. Opting out of the mitigation for a
|
||||||
|
particular logical processor does not affect the RDRAND and RDSEED mitigations
|
||||||
|
for other logical processors.
|
||||||
|
|
||||||
|
Note that inside of an Intel SGX enclave, the mitigation is applied regardless
|
||||||
|
of the value of RNGDS_MITG_DS.
|
||||||
|
|
||||||
|
Mitigation control on the kernel command line
|
||||||
|
---------------------------------------------
|
||||||
|
The kernel command line allows control over the SRBDS mitigation at boot time
|
||||||
|
with the option "srbds=". The option for this is:
|
||||||
|
|
||||||
|
============= =============================================================
|
||||||
|
off This option disables SRBDS mitigation for RDRAND and RDSEED on
|
||||||
|
affected platforms.
|
||||||
|
============= =============================================================
|
||||||
|
|
||||||
|
SRBDS System Information
|
||||||
|
-----------------------
|
||||||
|
The Linux kernel provides vulnerability status information through sysfs. For
|
||||||
|
SRBDS this can be accessed by the following sysfs file:
|
||||||
|
/sys/devices/system/cpu/vulnerabilities/srbds
|
||||||
|
|
||||||
|
The possible values contained in this file are:
|
||||||
|
|
||||||
|
============================== =============================================
|
||||||
|
Not affected Processor not vulnerable
|
||||||
|
Vulnerable Processor vulnerable and mitigation disabled
|
||||||
|
Vulnerable: No microcode Processor vulnerable and microcode is missing
|
||||||
|
mitigation
|
||||||
|
Mitigation: Microcode Processor is vulnerable and mitigation is in
|
||||||
|
effect.
|
||||||
|
Mitigation: TSX disabled Processor is only vulnerable when TSX is
|
||||||
|
enabled while this system was booted with TSX
|
||||||
|
disabled.
|
||||||
|
Unknown: Dependent on
|
||||||
|
hypervisor status Running on virtual guest processor that is
|
||||||
|
affected but with no way to know if host
|
||||||
|
processor is mitigated or vulnerable.
|
||||||
|
============================== =============================================
|
||||||
|
|
||||||
|
SRBDS Default mitigation
|
||||||
|
------------------------
|
||||||
|
This new microcode serializes processor access during execution of RDRAND,
|
||||||
|
RDSEED ensures that the shared buffer is overwritten before it is released for
|
||||||
|
reuse. Use the "srbds=off" kernel command line to disable the mitigation for
|
||||||
|
RDRAND and RDSEED.
|
||||||
@@ -136,6 +136,10 @@
|
|||||||
dynamic table installation which will install SSDT
|
dynamic table installation which will install SSDT
|
||||||
tables to /sys/firmware/acpi/tables/dynamic.
|
tables to /sys/firmware/acpi/tables/dynamic.
|
||||||
|
|
||||||
|
acpi_no_watchdog [HW,ACPI,WDT]
|
||||||
|
Ignore the ACPI-based watchdog interface (WDAT) and let
|
||||||
|
a native driver control the watchdog device instead.
|
||||||
|
|
||||||
acpi_rsdp= [ACPI,EFI,KEXEC]
|
acpi_rsdp= [ACPI,EFI,KEXEC]
|
||||||
Pass the RSDP address to the kernel, mostly used
|
Pass the RSDP address to the kernel, mostly used
|
||||||
on machines running EFI runtime service to boot the
|
on machines running EFI runtime service to boot the
|
||||||
@@ -486,10 +490,14 @@
|
|||||||
cut the overhead, others just disable the usage. So
|
cut the overhead, others just disable the usage. So
|
||||||
only cgroup_disable=memory is actually worthy}
|
only cgroup_disable=memory is actually worthy}
|
||||||
|
|
||||||
cgroup_no_v1= [KNL] Disable one, multiple, all cgroup controllers in v1
|
cgroup_no_v1= [KNL] Disable cgroup controllers and named hierarchies in v1
|
||||||
Format: { controller[,controller...] | "all" }
|
Format: { { controller | "all" | "named" }
|
||||||
|
[,{ controller | "all" | "named" }...] }
|
||||||
Like cgroup_disable, but only applies to cgroup v1;
|
Like cgroup_disable, but only applies to cgroup v1;
|
||||||
the blacklisted controllers remain available in cgroup2.
|
the blacklisted controllers remain available in cgroup2.
|
||||||
|
"all" blacklists all controllers and "named" disables
|
||||||
|
named mounts. Specifying both "all" and "named" disables
|
||||||
|
all v1 hierarchies.
|
||||||
|
|
||||||
cgroup.memory= [KNL] Pass options to the cgroup memory controller.
|
cgroup.memory= [KNL] Pass options to the cgroup memory controller.
|
||||||
Format: <string>
|
Format: <string>
|
||||||
@@ -4032,7 +4040,9 @@
|
|||||||
[[,]s[mp]#### \
|
[[,]s[mp]#### \
|
||||||
[[,]b[ios] | a[cpi] | k[bd] | t[riple] | e[fi] | p[ci]] \
|
[[,]b[ios] | a[cpi] | k[bd] | t[riple] | e[fi] | p[ci]] \
|
||||||
[[,]f[orce]
|
[[,]f[orce]
|
||||||
Where reboot_mode is one of warm (soft) or cold (hard) or gpio,
|
Where reboot_mode is one of warm (soft) or cold (hard) or gpio
|
||||||
|
(prefix with 'panic_' to set mode for panic
|
||||||
|
reboot only),
|
||||||
reboot_type is one of bios, acpi, kbd, triple, efi, or pci,
|
reboot_type is one of bios, acpi, kbd, triple, efi, or pci,
|
||||||
reboot_force is either force or not specified,
|
reboot_force is either force or not specified,
|
||||||
reboot_cpu is s[mp]#### with #### being the processor
|
reboot_cpu is s[mp]#### with #### being the processor
|
||||||
@@ -4434,6 +4444,26 @@
|
|||||||
spia_pedr=
|
spia_pedr=
|
||||||
spia_peddr=
|
spia_peddr=
|
||||||
|
|
||||||
|
srbds= [X86,INTEL]
|
||||||
|
Control the Special Register Buffer Data Sampling
|
||||||
|
(SRBDS) mitigation.
|
||||||
|
|
||||||
|
Certain CPUs are vulnerable to an MDS-like
|
||||||
|
exploit which can leak bits from the random
|
||||||
|
number generator.
|
||||||
|
|
||||||
|
By default, this issue is mitigated by
|
||||||
|
microcode. However, the microcode fix can cause
|
||||||
|
the RDRAND and RDSEED instructions to become
|
||||||
|
much slower. Among other effects, this will
|
||||||
|
result in reduced throughput from /dev/urandom.
|
||||||
|
|
||||||
|
The microcode mitigation can be disabled with
|
||||||
|
the following option:
|
||||||
|
|
||||||
|
off: Disable mitigation and remove
|
||||||
|
performance impact to RDRAND and RDSEED
|
||||||
|
|
||||||
srcutree.counter_wrap_check [KNL]
|
srcutree.counter_wrap_check [KNL]
|
||||||
Specifies how frequently to check for
|
Specifies how frequently to check for
|
||||||
grace-period sequence counter wrap for the
|
grace-period sequence counter wrap for the
|
||||||
|
|||||||
27
Documentation/arm64/index.rst
Normal file
27
Documentation/arm64/index.rst
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
==================
|
||||||
|
ARM64 Architecture
|
||||||
|
==================
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
acpi_object_usage
|
||||||
|
arm-acpi
|
||||||
|
booting
|
||||||
|
cpu-feature-registers
|
||||||
|
elf_hwcaps
|
||||||
|
hugetlbpage
|
||||||
|
legacy_instructions
|
||||||
|
memory
|
||||||
|
pointer-authentication
|
||||||
|
silicon-errata
|
||||||
|
sve
|
||||||
|
tagged-address-abi
|
||||||
|
tagged-pointers
|
||||||
|
|
||||||
|
.. only:: subproject and html
|
||||||
|
|
||||||
|
Indices
|
||||||
|
=======
|
||||||
|
|
||||||
|
* :ref:`genindex`
|
||||||
@@ -59,6 +59,7 @@ stable kernels.
|
|||||||
| ARM | Cortex-A73 | #858921 | ARM64_ERRATUM_858921 |
|
| ARM | Cortex-A73 | #858921 | ARM64_ERRATUM_858921 |
|
||||||
| ARM | Cortex-A55 | #1024718 | ARM64_ERRATUM_1024718 |
|
| ARM | Cortex-A55 | #1024718 | ARM64_ERRATUM_1024718 |
|
||||||
| ARM | Cortex-A76 | #1463225 | ARM64_ERRATUM_1463225 |
|
| ARM | Cortex-A76 | #1463225 | ARM64_ERRATUM_1463225 |
|
||||||
|
| ARM | Neoverse-N1 | #1542419 | ARM64_ERRATUM_1542419 |
|
||||||
| ARM | MMU-500 | #841119,#826419 | N/A |
|
| ARM | MMU-500 | #841119,#826419 | N/A |
|
||||||
| | | | |
|
| | | | |
|
||||||
| Cavium | ThunderX ITS | #22375, #24313 | CAVIUM_ERRATUM_22375 |
|
| Cavium | ThunderX ITS | #22375, #24313 | CAVIUM_ERRATUM_22375 |
|
||||||
|
|||||||
75
Documentation/arm64/tagged-pointers.rst
Normal file
75
Documentation/arm64/tagged-pointers.rst
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
=========================================
|
||||||
|
Tagged virtual addresses in AArch64 Linux
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
Author: Will Deacon <will.deacon@arm.com>
|
||||||
|
|
||||||
|
Date : 12 June 2013
|
||||||
|
|
||||||
|
This document briefly describes the provision of tagged virtual
|
||||||
|
addresses in the AArch64 translation system and their potential uses
|
||||||
|
in AArch64 Linux.
|
||||||
|
|
||||||
|
The kernel configures the translation tables so that translations made
|
||||||
|
via TTBR0 (i.e. userspace mappings) have the top byte (bits 63:56) of
|
||||||
|
the virtual address ignored by the translation hardware. This frees up
|
||||||
|
this byte for application use.
|
||||||
|
|
||||||
|
|
||||||
|
Passing tagged addresses to the kernel
|
||||||
|
--------------------------------------
|
||||||
|
|
||||||
|
All interpretation of userspace memory addresses by the kernel assumes
|
||||||
|
an address tag of 0x00, unless the application enables the AArch64
|
||||||
|
Tagged Address ABI explicitly
|
||||||
|
(Documentation/arm64/tagged-address-abi.rst).
|
||||||
|
|
||||||
|
This includes, but is not limited to, addresses found in:
|
||||||
|
|
||||||
|
- pointer arguments to system calls, including pointers in structures
|
||||||
|
passed to system calls,
|
||||||
|
|
||||||
|
- the stack pointer (sp), e.g. when interpreting it to deliver a
|
||||||
|
signal,
|
||||||
|
|
||||||
|
- the frame pointer (x29) and frame records, e.g. when interpreting
|
||||||
|
them to generate a backtrace or call graph.
|
||||||
|
|
||||||
|
Using non-zero address tags in any of these locations when the
|
||||||
|
userspace application did not enable the AArch64 Tagged Address ABI may
|
||||||
|
result in an error code being returned, a (fatal) signal being raised,
|
||||||
|
or other modes of failure.
|
||||||
|
|
||||||
|
For these reasons, when the AArch64 Tagged Address ABI is disabled,
|
||||||
|
passing non-zero address tags to the kernel via system calls is
|
||||||
|
forbidden, and using a non-zero address tag for sp is strongly
|
||||||
|
discouraged.
|
||||||
|
|
||||||
|
Programs maintaining a frame pointer and frame records that use non-zero
|
||||||
|
address tags may suffer impaired or inaccurate debug and profiling
|
||||||
|
visibility.
|
||||||
|
|
||||||
|
|
||||||
|
Preserving tags
|
||||||
|
---------------
|
||||||
|
|
||||||
|
Non-zero tags are not preserved when delivering signals. This means that
|
||||||
|
signal handlers in applications making use of tags cannot rely on the
|
||||||
|
tag information for user virtual addresses being maintained for fields
|
||||||
|
inside siginfo_t. One exception to this rule is for signals raised in
|
||||||
|
response to watchpoint debug exceptions, where the tag information will
|
||||||
|
be preserved.
|
||||||
|
|
||||||
|
The architecture prevents the use of a tagged PC, so the upper byte will
|
||||||
|
be set to a sign-extension of bit 55 on exception return.
|
||||||
|
|
||||||
|
This behaviour is maintained when the AArch64 Tagged Address ABI is
|
||||||
|
enabled.
|
||||||
|
|
||||||
|
|
||||||
|
Other considerations
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
Special care should be taken when using tagged pointers, since it is
|
||||||
|
likely that C compilers will not hazard two virtual addresses differing
|
||||||
|
only in the upper byte.
|
||||||
@@ -16,6 +16,9 @@ Required properties:
|
|||||||
Documentation/devicetree/bindings/graph.txt. This port should be connected
|
Documentation/devicetree/bindings/graph.txt. This port should be connected
|
||||||
to the input port of an attached HDMI or LVDS encoder chip.
|
to the input port of an attached HDMI or LVDS encoder chip.
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
- pinctrl-names: Contain "default" and "sleep".
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
dpi0: dpi@1401d000 {
|
dpi0: dpi@1401d000 {
|
||||||
@@ -26,6 +29,9 @@ dpi0: dpi@1401d000 {
|
|||||||
<&mmsys CLK_MM_DPI_ENGINE>,
|
<&mmsys CLK_MM_DPI_ENGINE>,
|
||||||
<&apmixedsys CLK_APMIXED_TVDPLL>;
|
<&apmixedsys CLK_APMIXED_TVDPLL>;
|
||||||
clock-names = "pixel", "engine", "pll";
|
clock-names = "pixel", "engine", "pll";
|
||||||
|
pinctrl-names = "default", "sleep";
|
||||||
|
pinctrl-0 = <&dpi_pin_func>;
|
||||||
|
pinctrl-1 = <&dpi_pin_idle>;
|
||||||
|
|
||||||
port {
|
port {
|
||||||
dpi0_out: endpoint {
|
dpi0_out: endpoint {
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ controller state. The mux controller state is described in
|
|||||||
|
|
||||||
Example:
|
Example:
|
||||||
mux: mux-controller {
|
mux: mux-controller {
|
||||||
compatible = "mux-gpio";
|
compatible = "gpio-mux";
|
||||||
#mux-control-cells = <0>;
|
#mux-control-cells = <0>;
|
||||||
|
|
||||||
mux-gpios = <&pioA 0 GPIO_ACTIVE_HIGH>,
|
mux-gpios = <&pioA 0 GPIO_ACTIVE_HIGH>,
|
||||||
|
|||||||
@@ -110,6 +110,13 @@ PROPERTIES
|
|||||||
Usage: required
|
Usage: required
|
||||||
Definition: See soc/fsl/qman.txt and soc/fsl/bman.txt
|
Definition: See soc/fsl/qman.txt and soc/fsl/bman.txt
|
||||||
|
|
||||||
|
- fsl,erratum-a050385
|
||||||
|
Usage: optional
|
||||||
|
Value type: boolean
|
||||||
|
Definition: A boolean property. Indicates the presence of the
|
||||||
|
erratum A050385 which indicates that DMA transactions that are
|
||||||
|
split can result in a FMan lock.
|
||||||
|
|
||||||
=============================================================================
|
=============================================================================
|
||||||
FMan MURAM Node
|
FMan MURAM Node
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
Regulator Proxy Consumer Bindings
|
||||||
|
|
||||||
|
Regulator proxy consumers provide a means to use a default regulator state
|
||||||
|
during bootup only which is removed at the end of boot. This feature can be
|
||||||
|
used in situations where a shared regulator can be scaled between several
|
||||||
|
possible voltages and hardware requires that it be at a high level at the
|
||||||
|
beginning of boot before the consumer device responsible for requesting the
|
||||||
|
high level has probed.
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
proxy-supply: phandle of the regulator's own device node.
|
||||||
|
This property is required if any of the three
|
||||||
|
properties below are specified.
|
||||||
|
qcom,proxy-consumer-enable: Boolean indicating that the regulator must be
|
||||||
|
kept enabled during boot.
|
||||||
|
qcom,proxy-consumer-voltage: List of two integers corresponding the minimum
|
||||||
|
and maximum voltage allowed during boot in
|
||||||
|
microvolts.
|
||||||
|
qcom,proxy-consumer-current: Minimum current in microamps required during
|
||||||
|
boot.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
foo_vreg: regulator@0 {
|
||||||
|
regulator-name = "foo";
|
||||||
|
regulator-min-microvolt = <1000000>;
|
||||||
|
regulator-max-microvolt = <2000000>;
|
||||||
|
proxy-supply = <&foo_vreg>;
|
||||||
|
qcom,proxy-consumer-voltage = <1500000 2000000>;
|
||||||
|
qcom,proxy-consumer-current = <25000>;
|
||||||
|
qcom,proxy-consumer-enable;
|
||||||
|
};
|
||||||
@@ -169,6 +169,9 @@ Optional property:
|
|||||||
Type: bool thresholds, so the governors may mitigate by ensuring
|
Type: bool thresholds, so the governors may mitigate by ensuring
|
||||||
timing closures and other low temperature operating
|
timing closures and other low temperature operating
|
||||||
issues.
|
issues.
|
||||||
|
- wake-capable-sensor: Set to true if thermal zone sensor is wake up capable
|
||||||
|
Type: bool and cooling devices binded to this thermal zone are not
|
||||||
|
Size: none affected during suspend.
|
||||||
|
|
||||||
Note: The delay properties are bound to the maximum dT/dt (temperature
|
Note: The delay properties are bound to the maximum dT/dt (temperature
|
||||||
derivative over time) in two situations for a thermal zone:
|
derivative over time) in two situations for a thermal zone:
|
||||||
|
|||||||
@@ -75,6 +75,8 @@ Optional properties:
|
|||||||
from P0 to P1/P2/P3 without delay.
|
from P0 to P1/P2/P3 without delay.
|
||||||
- snps,dis-tx-ipgap-linecheck-quirk: when set, disable u2mac linestate check
|
- snps,dis-tx-ipgap-linecheck-quirk: when set, disable u2mac linestate check
|
||||||
during HS transmit.
|
during HS transmit.
|
||||||
|
- snps,parkmode-disable-ss-quirk: when set, all SuperSpeed bus instances in
|
||||||
|
park mode are disabled.
|
||||||
- snps,dis_metastability_quirk: when set, disable metastability workaround.
|
- snps,dis_metastability_quirk: when set, disable metastability workaround.
|
||||||
CAUTION: use only if you are absolutely sure of it.
|
CAUTION: use only if you are absolutely sure of it.
|
||||||
- snps,xhci-slow-suspend-quirk: when set, need an extraordinary delay to wait
|
- snps,xhci-slow-suspend-quirk: when set, need an extraordinary delay to wait
|
||||||
|
|||||||
57
Documentation/devicetree/bindings/usb/mediatek,musb.txt
Normal file
57
Documentation/devicetree/bindings/usb/mediatek,musb.txt
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
MediaTek musb DRD/OTG controller
|
||||||
|
-------------------------------------------
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible : should be one of:
|
||||||
|
"mediatek,mt2701-musb"
|
||||||
|
...
|
||||||
|
followed by "mediatek,mtk-musb"
|
||||||
|
- reg : specifies physical base address and size of
|
||||||
|
the registers
|
||||||
|
- interrupts : interrupt used by musb controller
|
||||||
|
- interrupt-names : must be "mc"
|
||||||
|
- phys : PHY specifier for the OTG phy
|
||||||
|
- dr_mode : should be one of "host", "peripheral" or "otg",
|
||||||
|
refer to usb/generic.txt
|
||||||
|
- clocks : a list of phandle + clock-specifier pairs, one for
|
||||||
|
each entry in clock-names
|
||||||
|
- clock-names : must contain "main", "mcu", "univpll"
|
||||||
|
for clocks of controller
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
- power-domains : a phandle to USB power domain node to control USB's
|
||||||
|
MTCMOS
|
||||||
|
|
||||||
|
Required child nodes:
|
||||||
|
usb connector node as defined in bindings/connector/usb-connector.txt
|
||||||
|
Optional properties:
|
||||||
|
- id-gpios : input GPIO for USB ID pin.
|
||||||
|
- vbus-gpios : input GPIO for USB VBUS pin.
|
||||||
|
- vbus-supply : reference to the VBUS regulator, needed when supports
|
||||||
|
dual-role mode
|
||||||
|
- usb-role-switch : use USB Role Switch to support dual-role switch, see
|
||||||
|
usb/generic.txt.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
usb2: usb@11200000 {
|
||||||
|
compatible = "mediatek,mt2701-musb",
|
||||||
|
"mediatek,mtk-musb";
|
||||||
|
reg = <0 0x11200000 0 0x1000>;
|
||||||
|
interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_LOW>;
|
||||||
|
interrupt-names = "mc";
|
||||||
|
phys = <&u2port2 PHY_TYPE_USB2>;
|
||||||
|
dr_mode = "otg";
|
||||||
|
clocks = <&pericfg CLK_PERI_USB0>,
|
||||||
|
<&pericfg CLK_PERI_USB0_MCU>,
|
||||||
|
<&pericfg CLK_PERI_USB_SLV>;
|
||||||
|
clock-names = "main","mcu","univpll";
|
||||||
|
power-domains = <&scpsys MT2701_POWER_DOMAIN_IFR_MSC>;
|
||||||
|
usb-role-switch;
|
||||||
|
connector{
|
||||||
|
compatible = "gpio-usb-b-connector", "usb-b-connector";
|
||||||
|
type = "micro";
|
||||||
|
id-gpios = <&pio 44 GPIO_ACTIVE_HIGH>;
|
||||||
|
vbus-supply = <&usb_vbus>;
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -25,8 +25,8 @@ suspend/resume and shutdown ordering.
|
|||||||
|
|
||||||
Device links allow representation of such dependencies in the driver core.
|
Device links allow representation of such dependencies in the driver core.
|
||||||
|
|
||||||
In its standard form, a device link combines *both* dependency types:
|
In its standard or *managed* form, a device link combines *both* dependency
|
||||||
It guarantees correct suspend/resume and shutdown ordering between a
|
types: It guarantees correct suspend/resume and shutdown ordering between a
|
||||||
"supplier" device and its "consumer" devices, and it guarantees driver
|
"supplier" device and its "consumer" devices, and it guarantees driver
|
||||||
presence on the supplier. The consumer devices are not probed before the
|
presence on the supplier. The consumer devices are not probed before the
|
||||||
supplier is bound to a driver, and they're unbound before the supplier
|
supplier is bound to a driver, and they're unbound before the supplier
|
||||||
@@ -59,18 +59,24 @@ device ``->probe`` callback or a boot-time PCI quirk.
|
|||||||
|
|
||||||
Another example for an inconsistent state would be a device link that
|
Another example for an inconsistent state would be a device link that
|
||||||
represents a driver presence dependency, yet is added from the consumer's
|
represents a driver presence dependency, yet is added from the consumer's
|
||||||
``->probe`` callback while the supplier hasn't probed yet: Had the driver
|
``->probe`` callback while the supplier hasn't started to probe yet: Had the
|
||||||
core known about the device link earlier, it wouldn't have probed the
|
driver core known about the device link earlier, it wouldn't have probed the
|
||||||
consumer in the first place. The onus is thus on the consumer to check
|
consumer in the first place. The onus is thus on the consumer to check
|
||||||
presence of the supplier after adding the link, and defer probing on
|
presence of the supplier after adding the link, and defer probing on
|
||||||
non-presence.
|
non-presence. [Note that it is valid to create a link from the consumer's
|
||||||
|
``->probe`` callback while the supplier is still probing, but the consumer must
|
||||||
|
know that the supplier is functional already at the link creation time (that is
|
||||||
|
the case, for instance, if the consumer has just acquired some resources that
|
||||||
|
would not have been available had the supplier not been functional then).]
|
||||||
|
|
||||||
If a device link is added in the ``->probe`` callback of the supplier or
|
If a device link with ``DL_FLAG_STATELESS`` set (i.e. a stateless device link)
|
||||||
consumer driver, it is typically deleted in its ``->remove`` callback for
|
is added in the ``->probe`` callback of the supplier or consumer driver, it is
|
||||||
symmetry. That way, if the driver is compiled as a module, the device
|
typically deleted in its ``->remove`` callback for symmetry. That way, if the
|
||||||
link is added on module load and orderly deleted on unload. The same
|
driver is compiled as a module, the device link is added on module load and
|
||||||
restrictions that apply to device link addition (e.g. exclusion of a
|
orderly deleted on unload. The same restrictions that apply to device link
|
||||||
parallel suspend/resume transition) apply equally to deletion.
|
addition (e.g. exclusion of a parallel suspend/resume transition) apply equally
|
||||||
|
to deletion. Device links managed by the driver core are deleted automatically
|
||||||
|
by it.
|
||||||
|
|
||||||
Several flags may be specified on device link addition, two of which
|
Several flags may be specified on device link addition, two of which
|
||||||
have already been mentioned above: ``DL_FLAG_STATELESS`` to express that no
|
have already been mentioned above: ``DL_FLAG_STATELESS`` to express that no
|
||||||
@@ -83,22 +89,37 @@ link is added from the consumer's ``->probe`` callback: ``DL_FLAG_RPM_ACTIVE``
|
|||||||
can be specified to runtime resume the supplier upon addition of the
|
can be specified to runtime resume the supplier upon addition of the
|
||||||
device link. ``DL_FLAG_AUTOREMOVE_CONSUMER`` causes the device link to be
|
device link. ``DL_FLAG_AUTOREMOVE_CONSUMER`` causes the device link to be
|
||||||
automatically purged when the consumer fails to probe or later unbinds.
|
automatically purged when the consumer fails to probe or later unbinds.
|
||||||
This obviates the need to explicitly delete the link in the ``->remove``
|
|
||||||
callback or in the error path of the ``->probe`` callback.
|
|
||||||
|
|
||||||
Similarly, when the device link is added from supplier's ``->probe`` callback,
|
Similarly, when the device link is added from supplier's ``->probe`` callback,
|
||||||
``DL_FLAG_AUTOREMOVE_SUPPLIER`` causes the device link to be automatically
|
``DL_FLAG_AUTOREMOVE_SUPPLIER`` causes the device link to be automatically
|
||||||
purged when the supplier fails to probe or later unbinds.
|
purged when the supplier fails to probe or later unbinds.
|
||||||
|
|
||||||
|
If neither ``DL_FLAG_AUTOREMOVE_CONSUMER`` nor ``DL_FLAG_AUTOREMOVE_SUPPLIER``
|
||||||
|
is set, ``DL_FLAG_AUTOPROBE_CONSUMER`` can be used to request the driver core
|
||||||
|
to probe for a driver for the consumer driver on the link automatically after
|
||||||
|
a driver has been bound to the supplier device.
|
||||||
|
|
||||||
|
Note, however, that any combinations of ``DL_FLAG_AUTOREMOVE_CONSUMER``,
|
||||||
|
``DL_FLAG_AUTOREMOVE_SUPPLIER`` or ``DL_FLAG_AUTOPROBE_CONSUMER`` with
|
||||||
|
``DL_FLAG_STATELESS`` are invalid and cannot be used.
|
||||||
|
|
||||||
Limitations
|
Limitations
|
||||||
===========
|
===========
|
||||||
|
|
||||||
Driver authors should be aware that a driver presence dependency (i.e. when
|
Driver authors should be aware that a driver presence dependency for managed
|
||||||
``DL_FLAG_STATELESS`` is not specified on link addition) may cause probing of
|
device links (i.e. when ``DL_FLAG_STATELESS`` is not specified on link addition)
|
||||||
the consumer to be deferred indefinitely. This can become a problem if the
|
may cause probing of the consumer to be deferred indefinitely. This can become
|
||||||
consumer is required to probe before a certain initcall level is reached.
|
a problem if the consumer is required to probe before a certain initcall level
|
||||||
Worse, if the supplier driver is blacklisted or missing, the consumer will
|
is reached. Worse, if the supplier driver is blacklisted or missing, the
|
||||||
never be probed.
|
consumer will never be probed.
|
||||||
|
|
||||||
|
Moreover, managed device links cannot be deleted directly. They are deleted
|
||||||
|
by the driver core when they are not necessary any more in accordance with the
|
||||||
|
``DL_FLAG_AUTOREMOVE_CONSUMER`` and ``DL_FLAG_AUTOREMOVE_SUPPLIER`` flags.
|
||||||
|
However, stateless device links (i.e. device links with ``DL_FLAG_STATELESS``
|
||||||
|
set) are expected to be removed by whoever called :c:func:`device_link_add()`
|
||||||
|
to add them with the help of either :c:func:`device_link_del()` or
|
||||||
|
:c:func:`device_link_remove()`.
|
||||||
|
|
||||||
Sometimes drivers depend on optional resources. They are able to operate
|
Sometimes drivers depend on optional resources. They are able to operate
|
||||||
in a degraded mode (reduced feature set or performance) when those resources
|
in a degraded mode (reduced feature set or performance) when those resources
|
||||||
@@ -283,4 +304,4 @@ API
|
|||||||
===
|
===
|
||||||
|
|
||||||
.. kernel-doc:: drivers/base/core.c
|
.. kernel-doc:: drivers/base/core.c
|
||||||
:functions: device_link_add device_link_del
|
:functions: device_link_add device_link_del device_link_remove
|
||||||
|
|||||||
@@ -246,7 +246,7 @@ necessary information about the device.
|
|||||||
this->eccmode = NAND_ECC_SOFT;
|
this->eccmode = NAND_ECC_SOFT;
|
||||||
|
|
||||||
/* Scan to find existence of the device */
|
/* Scan to find existence of the device */
|
||||||
if (nand_scan (board_mtd, 1)) {
|
if (nand_scan (this, 1)) {
|
||||||
err = -ENXIO;
|
err = -ENXIO;
|
||||||
goto out_ior;
|
goto out_ior;
|
||||||
}
|
}
|
||||||
@@ -277,7 +277,7 @@ unregisters the partitions in the MTD layer.
|
|||||||
static void __exit board_cleanup (void)
|
static void __exit board_cleanup (void)
|
||||||
{
|
{
|
||||||
/* Release resources, unregister device */
|
/* Release resources, unregister device */
|
||||||
nand_release (board_mtd);
|
nand_release (mtd_to_nand(board_mtd));
|
||||||
|
|
||||||
/* unmap physical address */
|
/* unmap physical address */
|
||||||
iounmap(baseaddr);
|
iounmap(baseaddr);
|
||||||
|
|||||||
@@ -217,8 +217,12 @@ fsync_mode=%s Control the policy of fsync. Currently supports "posix",
|
|||||||
pass, but the performance will regress. "nobarrier" is
|
pass, but the performance will regress. "nobarrier" is
|
||||||
based on "posix", but doesn't issue flush command for
|
based on "posix", but doesn't issue flush command for
|
||||||
non-atomic files likewise "nobarrier" mount option.
|
non-atomic files likewise "nobarrier" mount option.
|
||||||
test_dummy_encryption Enable dummy encryption, which provides a fake fscrypt
|
test_dummy_encryption
|
||||||
|
test_dummy_encryption=%s
|
||||||
|
Enable dummy encryption, which provides a fake fscrypt
|
||||||
context. The fake fscrypt context is used by xfstests.
|
context. The fake fscrypt context is used by xfstests.
|
||||||
|
The argument may be either "v1" or "v2", in order to
|
||||||
|
select the corresponding fscrypt policy version.
|
||||||
checkpoint=%s[:%u[%]] Set to "disable" to turn off checkpointing. Set to "enable"
|
checkpoint=%s[:%u[%]] Set to "disable" to turn off checkpointing. Set to "enable"
|
||||||
to reenable checkpointing. Is enabled by default. While
|
to reenable checkpointing. Is enabled by default. While
|
||||||
disabled, any unmounting or unexpected shutdowns will cause
|
disabled, any unmounting or unexpected shutdowns will cause
|
||||||
@@ -235,8 +239,8 @@ checkpoint=%s[:%u[%]] Set to "disable" to turn off checkpointing. Set to "en
|
|||||||
hide up to all remaining free space. The actual space that
|
hide up to all remaining free space. The actual space that
|
||||||
would be unusable can be viewed at /sys/fs/f2fs/<disk>/unusable
|
would be unusable can be viewed at /sys/fs/f2fs/<disk>/unusable
|
||||||
This space is reclaimed once checkpoint=enable.
|
This space is reclaimed once checkpoint=enable.
|
||||||
compress_algorithm=%s Control compress algorithm, currently f2fs supports "lzo"
|
compress_algorithm=%s Control compress algorithm, currently f2fs supports "lzo",
|
||||||
and "lz4" algorithm.
|
"lz4" and "zstd" algorithm.
|
||||||
compress_log_size=%u Support configuring compress cluster size, the size will
|
compress_log_size=%u Support configuring compress cluster size, the size will
|
||||||
be 4KB * (1 << %u), 16KB is minimum size, also it's
|
be 4KB * (1 << %u), 16KB is minimum size, also it's
|
||||||
default size.
|
default size.
|
||||||
|
|||||||
@@ -292,8 +292,22 @@ files' data differently, inode numbers are included in the IVs.
|
|||||||
Consequently, shrinking the filesystem may not be allowed.
|
Consequently, shrinking the filesystem may not be allowed.
|
||||||
|
|
||||||
This format is optimized for use with inline encryption hardware
|
This format is optimized for use with inline encryption hardware
|
||||||
compliant with the UFS or eMMC standards, which support only 64 IV
|
compliant with the UFS standard, which supports only 64 IV bits per
|
||||||
bits per I/O request and may have only a small number of keyslots.
|
I/O request and may have only a small number of keyslots.
|
||||||
|
|
||||||
|
IV_INO_LBLK_32 policies
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
IV_INO_LBLK_32 policies work like IV_INO_LBLK_64, except that for
|
||||||
|
IV_INO_LBLK_32, the inode number is hashed with SipHash-2-4 (where the
|
||||||
|
SipHash key is derived from the master key) and added to the file
|
||||||
|
logical block number mod 2^32 to produce a 32-bit IV.
|
||||||
|
|
||||||
|
This format is optimized for use with inline encryption hardware
|
||||||
|
compliant with the eMMC v5.2 standard, which supports only 32 IV bits
|
||||||
|
per I/O request and may have only a small number of keyslots. This
|
||||||
|
format results in some level of IV reuse, so it should only be used
|
||||||
|
when necessary due to hardware limitations.
|
||||||
|
|
||||||
Key identifiers
|
Key identifiers
|
||||||
---------------
|
---------------
|
||||||
@@ -369,6 +383,10 @@ a little endian number, except that:
|
|||||||
to 32 bits and is placed in bits 0-31 of the IV. The inode number
|
to 32 bits and is placed in bits 0-31 of the IV. The inode number
|
||||||
(which is also limited to 32 bits) is placed in bits 32-63.
|
(which is also limited to 32 bits) is placed in bits 32-63.
|
||||||
|
|
||||||
|
- With `IV_INO_LBLK_32 policies`_, the logical block number is limited
|
||||||
|
to 32 bits and is placed in bits 0-31 of the IV. The inode number
|
||||||
|
is then hashed and added mod 2^32.
|
||||||
|
|
||||||
Note that because file logical block numbers are included in the IVs,
|
Note that because file logical block numbers are included in the IVs,
|
||||||
filesystems must enforce that blocks are never shifted around within
|
filesystems must enforce that blocks are never shifted around within
|
||||||
encrypted files, e.g. via "collapse range" or "insert range".
|
encrypted files, e.g. via "collapse range" or "insert range".
|
||||||
@@ -465,8 +483,15 @@ This structure must be initialized as follows:
|
|||||||
(0x3).
|
(0x3).
|
||||||
- FSCRYPT_POLICY_FLAG_DIRECT_KEY: See `DIRECT_KEY policies`_.
|
- FSCRYPT_POLICY_FLAG_DIRECT_KEY: See `DIRECT_KEY policies`_.
|
||||||
- FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64: See `IV_INO_LBLK_64
|
- FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64: See `IV_INO_LBLK_64
|
||||||
policies`_. This is mutually exclusive with DIRECT_KEY and is not
|
policies`_.
|
||||||
supported on v1 policies.
|
- FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32: See `IV_INO_LBLK_32
|
||||||
|
policies`_.
|
||||||
|
|
||||||
|
v1 encryption policies only support the PAD_* and DIRECT_KEY flags.
|
||||||
|
The other flags are only supported by v2 encryption policies.
|
||||||
|
|
||||||
|
The DIRECT_KEY, IV_INO_LBLK_64, and IV_INO_LBLK_32 flags are
|
||||||
|
mutually exclusive.
|
||||||
|
|
||||||
- For v2 encryption policies, ``__reserved`` must be zeroed.
|
- For v2 encryption policies, ``__reserved`` must be zeroed.
|
||||||
|
|
||||||
@@ -633,6 +658,17 @@ from a passphrase or other low-entropy user credential.
|
|||||||
FS_IOC_GET_ENCRYPTION_PWSALT is deprecated. Instead, prefer to
|
FS_IOC_GET_ENCRYPTION_PWSALT is deprecated. Instead, prefer to
|
||||||
generate and manage any needed salt(s) in userspace.
|
generate and manage any needed salt(s) in userspace.
|
||||||
|
|
||||||
|
Getting a file's encryption nonce
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
|
Since Linux v5.7, the ioctl FS_IOC_GET_ENCRYPTION_NONCE is supported.
|
||||||
|
On encrypted files and directories it gets the inode's 16-byte nonce.
|
||||||
|
On unencrypted files and directories, it fails with ENODATA.
|
||||||
|
|
||||||
|
This ioctl can be useful for automated tests which verify that the
|
||||||
|
encryption is being done correctly. It is not needed for normal use
|
||||||
|
of fscrypt.
|
||||||
|
|
||||||
Adding keys
|
Adding keys
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
|
|||||||
@@ -1141,6 +1141,12 @@ enum v4l2_mpeg_video_h264_entropy_mode -
|
|||||||
``V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM (boolean)``
|
``V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM (boolean)``
|
||||||
Enable 8X8 transform for H264. Applicable to the H264 encoder.
|
Enable 8X8 transform for H264. Applicable to the H264 encoder.
|
||||||
|
|
||||||
|
|
||||||
|
``V4L2_CID_MPEG_VIDEO_H264_CHROMA_QP_INDEX_OFFSET (integer)``
|
||||||
|
Specify the offset that should be added to the luma quantization
|
||||||
|
parameter to determine the chroma quantization parameter. Applicable
|
||||||
|
to the H264 encoder.
|
||||||
|
|
||||||
``V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB (integer)``
|
``V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB (integer)``
|
||||||
Cyclic intra macroblock refresh. This is the number of continuous
|
Cyclic intra macroblock refresh. This is the number of continuous
|
||||||
macroblocks refreshed every frame. Each frame a successive set of
|
macroblocks refreshed every frame. Each frame a successive set of
|
||||||
|
|||||||
@@ -43,6 +43,17 @@ registered notifiers are called only if the target value is now different.
|
|||||||
Clients of pm_qos need to save the returned handle for future use in other
|
Clients of pm_qos need to save the returned handle for future use in other
|
||||||
pm_qos API functions.
|
pm_qos API functions.
|
||||||
|
|
||||||
|
The handle is a pm_qos_request object. By default the request object sets the
|
||||||
|
request type to PM_QOS_REQ_ALL_CORES, in which case, the PM QoS request
|
||||||
|
applies to all cores. However, the driver can also specify a request type to
|
||||||
|
be either of
|
||||||
|
PM_QOS_REQ_ALL_CORES,
|
||||||
|
PM_QOS_REQ_AFFINE_CORES,
|
||||||
|
PM_QOS_REQ_AFFINE_IRQ,
|
||||||
|
|
||||||
|
Specify the cpumask when type is set to PM_QOS_REQ_AFFINE_CORES and specify
|
||||||
|
the IRQ number with PM_QOS_REQ_AFFINE_IRQ.
|
||||||
|
|
||||||
void pm_qos_update_request(handle, new_target_value):
|
void pm_qos_update_request(handle, new_target_value):
|
||||||
Will update the list element pointed to by the handle with the new target value
|
Will update the list element pointed to by the handle with the new target value
|
||||||
and recompute the new aggregated target, calling the notification tree if the
|
and recompute the new aggregated target, calling the notification tree if the
|
||||||
@@ -56,6 +67,13 @@ the request.
|
|||||||
int pm_qos_request(param_class):
|
int pm_qos_request(param_class):
|
||||||
Returns the aggregated value for a given PM QoS class.
|
Returns the aggregated value for a given PM QoS class.
|
||||||
|
|
||||||
|
int pm_qos_request_for_cpu(param_class, cpu):
|
||||||
|
Returns the aggregated value for a given PM QoS class for the specified cpu.
|
||||||
|
|
||||||
|
int pm_qos_request_for_cpumask(param_class, cpumask):
|
||||||
|
Returns the aggregated value for a given PM QoS class for the specified
|
||||||
|
cpumask.
|
||||||
|
|
||||||
int pm_qos_request_active(handle):
|
int pm_qos_request_active(handle):
|
||||||
Returns if the request is still active, i.e. it has not been removed from a
|
Returns if the request is still active, i.e. it has not been removed from a
|
||||||
PM QoS class constraints list.
|
PM QoS class constraints list.
|
||||||
|
|||||||
@@ -183,6 +183,11 @@ partial drain
|
|||||||
EOF is reached and now DSP can start skipping padding delay. Also next write
|
EOF is reached and now DSP can start skipping padding delay. Also next write
|
||||||
data would belong to next track
|
data would belong to next track
|
||||||
|
|
||||||
|
- set_next_track_param
|
||||||
|
This routine is called to send to DSP codec specific data of subsequent track
|
||||||
|
in gapless before first write.
|
||||||
|
|
||||||
|
|
||||||
Sequence flow for gapless would be:
|
Sequence flow for gapless would be:
|
||||||
- Open
|
- Open
|
||||||
- Get caps / codec caps
|
- Get caps / codec caps
|
||||||
@@ -194,6 +199,7 @@ Sequence flow for gapless would be:
|
|||||||
- Indicate next track data by sending set_next_track
|
- Indicate next track data by sending set_next_track
|
||||||
- Set metadata of the next track
|
- Set metadata of the next track
|
||||||
- then call partial_drain to flush most of buffer in DSP
|
- then call partial_drain to flush most of buffer in DSP
|
||||||
|
- set codec specific data of subsequent track
|
||||||
- Fill data of the next track
|
- Fill data of the next track
|
||||||
- DSP switches to second track
|
- DSP switches to second track
|
||||||
|
|
||||||
|
|||||||
@@ -8,3 +8,4 @@ HD-Audio
|
|||||||
models
|
models
|
||||||
controls
|
controls
|
||||||
dp-mst
|
dp-mst
|
||||||
|
realtek-pc-beep
|
||||||
|
|||||||
@@ -216,8 +216,6 @@ alc298-dell-aio
|
|||||||
ALC298 fixups on Dell AIO machines
|
ALC298 fixups on Dell AIO machines
|
||||||
alc275-dell-xps
|
alc275-dell-xps
|
||||||
ALC275 fixups on Dell XPS models
|
ALC275 fixups on Dell XPS models
|
||||||
alc256-dell-xps13
|
|
||||||
ALC256 fixups on Dell XPS13
|
|
||||||
lenovo-spk-noise
|
lenovo-spk-noise
|
||||||
Workaround for speaker noise on Lenovo machines
|
Workaround for speaker noise on Lenovo machines
|
||||||
lenovo-hotkey
|
lenovo-hotkey
|
||||||
|
|||||||
129
Documentation/sound/hd-audio/realtek-pc-beep.rst
Normal file
129
Documentation/sound/hd-audio/realtek-pc-beep.rst
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
===============================
|
||||||
|
Realtek PC Beep Hidden Register
|
||||||
|
===============================
|
||||||
|
|
||||||
|
This file documents the "PC Beep Hidden Register", which is present in certain
|
||||||
|
Realtek HDA codecs and controls a muxer and pair of passthrough mixers that can
|
||||||
|
route audio between pins but aren't themselves exposed as HDA widgets. As far
|
||||||
|
as I can tell, these hidden routes are designed to allow flexible PC Beep output
|
||||||
|
for codecs that don't have mixer widgets in their output paths. Why it's easier
|
||||||
|
to hide a mixer behind an undocumented vendor register than to just expose it
|
||||||
|
as a widget, I have no idea.
|
||||||
|
|
||||||
|
Register Description
|
||||||
|
====================
|
||||||
|
|
||||||
|
The register is accessed via processing coefficient 0x36 on NID 20h. Bits not
|
||||||
|
identified below have no discernible effect on my machine, a Dell XPS 13 9350::
|
||||||
|
|
||||||
|
MSB LSB
|
||||||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
| |h|S|L| | B |R| | Known bits
|
||||||
|
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|
||||||
|
|0|0|1|1| 0x7 |0|0x0|1| 0x7 | Reset value
|
||||||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
|
||||||
|
1Ah input select (B): 2 bits
|
||||||
|
When zero, expose the PC Beep line (from the internal beep generator, when
|
||||||
|
enabled with the Set Beep Generation verb on NID 01h, or else from the
|
||||||
|
external PCBEEP pin) on the 1Ah pin node. When nonzero, expose the headphone
|
||||||
|
jack (or possibly Line In on some machines) input instead. If PC Beep is
|
||||||
|
selected, the 1Ah boost control has no effect.
|
||||||
|
|
||||||
|
Amplify 1Ah loopback, left (L): 1 bit
|
||||||
|
Amplify the left channel of 1Ah before mixing it into outputs as specified
|
||||||
|
by h and S bits. Does not affect the level of 1Ah exposed to other widgets.
|
||||||
|
|
||||||
|
Amplify 1Ah loopback, right (R): 1 bit
|
||||||
|
Amplify the right channel of 1Ah before mixing it into outputs as specified
|
||||||
|
by h and S bits. Does not affect the level of 1Ah exposed to other widgets.
|
||||||
|
|
||||||
|
Loopback 1Ah to 21h [active low] (h): 1 bit
|
||||||
|
When zero, mix 1Ah (possibly with amplification, depending on L and R bits)
|
||||||
|
into 21h (headphone jack on my machine). Mixed signal respects the mute
|
||||||
|
setting on 21h.
|
||||||
|
|
||||||
|
Loopback 1Ah to 14h (S): 1 bit
|
||||||
|
When one, mix 1Ah (possibly with amplification, depending on L and R bits)
|
||||||
|
into 14h (internal speaker on my machine). Mixed signal **ignores** the mute
|
||||||
|
setting on 14h and is present whenever 14h is configured as an output.
|
||||||
|
|
||||||
|
Path diagrams
|
||||||
|
=============
|
||||||
|
|
||||||
|
1Ah input selection (DIV is the PC Beep divider set on NID 01h)::
|
||||||
|
|
||||||
|
<Beep generator> <PCBEEP pin> <Headphone jack>
|
||||||
|
| | |
|
||||||
|
+--DIV--+--!DIV--+ {1Ah boost control}
|
||||||
|
| |
|
||||||
|
+--(b == 0)--+--(b != 0)--+
|
||||||
|
|
|
||||||
|
>1Ah (Beep/Headphone Mic/Line In)<
|
||||||
|
|
||||||
|
Loopback of 1Ah to 21h/14h::
|
||||||
|
|
||||||
|
<1Ah (Beep/Headphone Mic/Line In)>
|
||||||
|
|
|
||||||
|
{amplify if L/R}
|
||||||
|
|
|
||||||
|
+-----!h-----+-----S-----+
|
||||||
|
| |
|
||||||
|
{21h mute control} |
|
||||||
|
| |
|
||||||
|
>21h (Headphone)< >14h (Internal Speaker)<
|
||||||
|
|
||||||
|
Background
|
||||||
|
==========
|
||||||
|
|
||||||
|
All Realtek HDA codecs have a vendor-defined widget with node ID 20h which
|
||||||
|
provides access to a bank of registers that control various codec functions.
|
||||||
|
Registers are read and written via the standard HDA processing coefficient
|
||||||
|
verbs (Set/Get Coefficient Index, Set/Get Processing Coefficient). The node is
|
||||||
|
named "Realtek Vendor Registers" in public datasheets' verb listings and,
|
||||||
|
apart from that, is entirely undocumented.
|
||||||
|
|
||||||
|
This particular register, exposed at coefficient 0x36 and named in commits from
|
||||||
|
Realtek, is of note: unlike most registers, which seem to control detailed
|
||||||
|
amplifier parameters not in scope of the HDA specification, it controls audio
|
||||||
|
routing which could just as easily have been defined using standard HDA mixer
|
||||||
|
and selector widgets.
|
||||||
|
|
||||||
|
Specifically, it selects between two sources for the input pin widget with Node
|
||||||
|
ID (NID) 1Ah: the widget's signal can come either from an audio jack (on my
|
||||||
|
laptop, a Dell XPS 13 9350, it's the headphone jack, but comments in Realtek
|
||||||
|
commits indicate that it might be a Line In on some machines) or from the PC
|
||||||
|
Beep line (which is itself multiplexed between the codec's internal beep
|
||||||
|
generator and external PCBEEP pin, depending on if the beep generator is
|
||||||
|
enabled via verbs on NID 01h). Additionally, it can mix (with optional
|
||||||
|
amplification) that signal onto the 21h and/or 14h output pins.
|
||||||
|
|
||||||
|
The register's reset value is 0x3717, corresponding to PC Beep on 1Ah that is
|
||||||
|
then amplified and mixed into both the headphones and the speakers. Not only
|
||||||
|
does this violate the HDA specification, which says that "[a vendor defined
|
||||||
|
beep input pin] connection may be maintained *only* while the Link reset
|
||||||
|
(**RST#**) is asserted", it means that we cannot ignore the register if we care
|
||||||
|
about the input that 1Ah would otherwise expose or if the PCBEEP trace is
|
||||||
|
poorly shielded and picks up chassis noise (both of which are the case on my
|
||||||
|
machine).
|
||||||
|
|
||||||
|
Unfortunately, there are lots of ways to get this register configuration wrong.
|
||||||
|
Linux, it seems, has gone through most of them. For one, the register resets
|
||||||
|
after S3 suspend: judging by existing code, this isn't the case for all vendor
|
||||||
|
registers, and it's led to some fixes that improve behavior on cold boot but
|
||||||
|
don't last after suspend. Other fixes have successfully switched the 1Ah input
|
||||||
|
away from PC Beep but have failed to disable both loopback paths. On my
|
||||||
|
machine, this means that the headphone input is amplified and looped back to
|
||||||
|
the headphone output, which uses the exact same pins! As you might expect, this
|
||||||
|
causes terrible headphone noise, the character of which is controlled by the
|
||||||
|
1Ah boost control. (If you've seen instructions online to fix XPS 13 headphone
|
||||||
|
noise by changing "Headphone Mic Boost" in ALSA, now you know why.)
|
||||||
|
|
||||||
|
The information here has been obtained through black-box reverse engineering of
|
||||||
|
the ALC256 codec's behavior and is not guaranteed to be correct. It likely
|
||||||
|
also applies for the ALC255, ALC257, ALC235, and ALC236, since those codecs
|
||||||
|
seem to be close relatives of the ALC256. (They all share one initialization
|
||||||
|
function.) Additionally, other codecs like the ALC225 and ALC285 also have this
|
||||||
|
register, judging by existing fixups in ``patch_realtek.c``, but specific
|
||||||
|
data (e.g. node IDs, bit positions, pin mappings) for those codecs may differ
|
||||||
|
from what I've described here.
|
||||||
84
Documentation/usb/raw-gadget.rst
Normal file
84
Documentation/usb/raw-gadget.rst
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
==============
|
||||||
|
USB Raw Gadget
|
||||||
|
==============
|
||||||
|
|
||||||
|
USB Raw Gadget is a kernel module that provides a userspace interface for
|
||||||
|
the USB Gadget subsystem. Essentially it allows to emulate USB devices
|
||||||
|
from userspace. Enabled with CONFIG_USB_RAW_GADGET. Raw Gadget is
|
||||||
|
currently a strictly debugging feature and shouldn't be used in
|
||||||
|
production, use GadgetFS instead.
|
||||||
|
|
||||||
|
Comparison to GadgetFS
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Raw Gadget is similar to GadgetFS, but provides a more low-level and
|
||||||
|
direct access to the USB Gadget layer for the userspace. The key
|
||||||
|
differences are:
|
||||||
|
|
||||||
|
1. Every USB request is passed to the userspace to get a response, while
|
||||||
|
GadgetFS responds to some USB requests internally based on the provided
|
||||||
|
descriptors. However note, that the UDC driver might respond to some
|
||||||
|
requests on its own and never forward them to the Gadget layer.
|
||||||
|
|
||||||
|
2. GadgetFS performs some sanity checks on the provided USB descriptors,
|
||||||
|
while Raw Gadget allows you to provide arbitrary data as responses to
|
||||||
|
USB requests.
|
||||||
|
|
||||||
|
3. Raw Gadget provides a way to select a UDC device/driver to bind to,
|
||||||
|
while GadgetFS currently binds to the first available UDC.
|
||||||
|
|
||||||
|
4. Raw Gadget explicitly exposes information about endpoints addresses and
|
||||||
|
capabilities allowing a user to write UDC-agnostic gadgets.
|
||||||
|
|
||||||
|
5. Raw Gadget has ioctl-based interface instead of a filesystem-based one.
|
||||||
|
|
||||||
|
Userspace interface
|
||||||
|
~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
To create a Raw Gadget instance open /dev/raw-gadget. Multiple raw-gadget
|
||||||
|
instances (bound to different UDCs) can be used at the same time. The
|
||||||
|
interaction with the opened file happens through the ioctl() calls, see
|
||||||
|
comments in include/uapi/linux/usb/raw_gadget.h for details.
|
||||||
|
|
||||||
|
The typical usage of Raw Gadget looks like:
|
||||||
|
|
||||||
|
1. Open Raw Gadget instance via /dev/raw-gadget.
|
||||||
|
2. Initialize the instance via USB_RAW_IOCTL_INIT.
|
||||||
|
3. Launch the instance with USB_RAW_IOCTL_RUN.
|
||||||
|
4. In a loop issue USB_RAW_IOCTL_EVENT_FETCH calls to receive events from
|
||||||
|
Raw Gadget and react to those depending on what kind of USB device
|
||||||
|
needs to be emulated.
|
||||||
|
|
||||||
|
Note, that some UDC drivers have fixed addresses assigned to endpoints, and
|
||||||
|
therefore arbitrary endpoint addresses can't be used in the descriptors.
|
||||||
|
Nevertheles, Raw Gadget provides a UDC-agnostic way to write USB gadgets.
|
||||||
|
Once a USB_RAW_EVENT_CONNECT event is received via USB_RAW_IOCTL_EVENT_FETCH,
|
||||||
|
the USB_RAW_IOCTL_EPS_INFO ioctl can be used to find out information about
|
||||||
|
endpoints that the UDC driver has. Based on that information, the user must
|
||||||
|
chose UDC endpoints that will be used for the gadget being emulated, and
|
||||||
|
properly assign addresses in endpoint descriptors.
|
||||||
|
|
||||||
|
You can find usage examples (along with a test suite) here:
|
||||||
|
|
||||||
|
https://github.com/xairy/raw-gadget
|
||||||
|
|
||||||
|
Internal details
|
||||||
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Currently every endpoint read/write ioctl submits a USB request and waits until
|
||||||
|
its completion. This is the desired mode for coverage-guided fuzzing (as we'd
|
||||||
|
like all USB request processing happen during the lifetime of a syscall),
|
||||||
|
and must be kept in the implementation. (This might be slow for real world
|
||||||
|
applications, thus the O_NONBLOCK improvement suggestion below.)
|
||||||
|
|
||||||
|
Potential future improvements
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
- Report more events (suspend, resume, etc.) through USB_RAW_IOCTL_EVENT_FETCH.
|
||||||
|
|
||||||
|
- Support O_NONBLOCK I/O.
|
||||||
|
|
||||||
|
- Support USB 3 features (accept SS endpoint companion descriptor when
|
||||||
|
enabling endpoints; allow providing stream_id for bulk transfers).
|
||||||
|
|
||||||
|
- Support ISO transfer features (expose frame_number for completed requests).
|
||||||
@@ -3999,9 +3999,11 @@ EOI was received.
|
|||||||
#define KVM_EXIT_HYPERV_SYNIC 1
|
#define KVM_EXIT_HYPERV_SYNIC 1
|
||||||
#define KVM_EXIT_HYPERV_HCALL 2
|
#define KVM_EXIT_HYPERV_HCALL 2
|
||||||
__u32 type;
|
__u32 type;
|
||||||
|
__u32 pad1;
|
||||||
union {
|
union {
|
||||||
struct {
|
struct {
|
||||||
__u32 msr;
|
__u32 msr;
|
||||||
|
__u32 pad2;
|
||||||
__u64 control;
|
__u64 control;
|
||||||
__u64 evt_page;
|
__u64 evt_page;
|
||||||
__u64 msg_page;
|
__u64 msg_page;
|
||||||
|
|||||||
70
Makefile
70
Makefile
@@ -1,7 +1,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
VERSION = 4
|
VERSION = 4
|
||||||
PATCHLEVEL = 19
|
PATCHLEVEL = 19
|
||||||
SUBLEVEL = 111
|
SUBLEVEL = 143
|
||||||
EXTRAVERSION =
|
EXTRAVERSION =
|
||||||
NAME = "People's Front"
|
NAME = "People's Front"
|
||||||
|
|
||||||
@@ -513,7 +513,7 @@ ifeq ($(shell $(srctree)/scripts/clang-android.sh $(CC) $(CLANG_FLAGS)), y)
|
|||||||
$(error "Clang with Android --target detected. Did you specify CLANG_TRIPLE?")
|
$(error "Clang with Android --target detected. Did you specify CLANG_TRIPLE?")
|
||||||
endif
|
endif
|
||||||
GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE)elfedit))
|
GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE)elfedit))
|
||||||
CLANG_FLAGS += --prefix=$(GCC_TOOLCHAIN_DIR)
|
CLANG_FLAGS += --prefix=$(GCC_TOOLCHAIN_DIR)$(notdir $(CROSS_COMPILE))
|
||||||
GCC_TOOLCHAIN := $(realpath $(GCC_TOOLCHAIN_DIR)/..)
|
GCC_TOOLCHAIN := $(realpath $(GCC_TOOLCHAIN_DIR)/..)
|
||||||
endif
|
endif
|
||||||
ifneq ($(GCC_TOOLCHAIN),)
|
ifneq ($(GCC_TOOLCHAIN),)
|
||||||
@@ -582,12 +582,8 @@ KBUILD_MODULES :=
|
|||||||
KBUILD_BUILTIN := 1
|
KBUILD_BUILTIN := 1
|
||||||
|
|
||||||
# If we have only "make modules", don't compile built-in objects.
|
# If we have only "make modules", don't compile built-in objects.
|
||||||
# When we're building modules with modversions, we need to consider
|
|
||||||
# the built-in objects during the descend as well, in order to
|
|
||||||
# make sure the checksums are up to date before we record them.
|
|
||||||
|
|
||||||
ifeq ($(MAKECMDGOALS),modules)
|
ifeq ($(MAKECMDGOALS),modules)
|
||||||
KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1)
|
KBUILD_BUILTIN :=
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# If we have "make <whatever> modules", compile modules
|
# If we have "make <whatever> modules", compile modules
|
||||||
@@ -695,20 +691,14 @@ KBUILD_CFLAGS += $(call cc-disable-warning, int-in-bool-context)
|
|||||||
KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
|
KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
|
||||||
|
|
||||||
ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
|
ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
|
||||||
KBUILD_CFLAGS += -Os $(call cc-disable-warning,maybe-uninitialized,)
|
KBUILD_CFLAGS += -Os
|
||||||
else
|
|
||||||
ifdef CONFIG_PROFILE_ALL_BRANCHES
|
|
||||||
KBUILD_CFLAGS += -O2 $(call cc-disable-warning,maybe-uninitialized,)
|
|
||||||
else
|
else
|
||||||
KBUILD_CFLAGS += -O2
|
KBUILD_CFLAGS += -O2
|
||||||
endif
|
endif
|
||||||
endif
|
|
||||||
|
|
||||||
KBUILD_CFLAGS += $(call cc-ifversion, -lt, 0409, \
|
|
||||||
$(call cc-disable-warning,maybe-uninitialized,))
|
|
||||||
|
|
||||||
# Tell gcc to never replace conditional load with a non-conditional one
|
# Tell gcc to never replace conditional load with a non-conditional one
|
||||||
KBUILD_CFLAGS += $(call cc-option,--param=allow-store-data-races=0)
|
KBUILD_CFLAGS += $(call cc-option,--param=allow-store-data-races=0)
|
||||||
|
KBUILD_CFLAGS += $(call cc-option,-fno-allow-store-data-races)
|
||||||
|
|
||||||
# check for 'asm goto'
|
# check for 'asm goto'
|
||||||
ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-goto.sh $(CC) $(KBUILD_CFLAGS)), y)
|
ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-goto.sh $(CC) $(KBUILD_CFLAGS)), y)
|
||||||
@@ -771,11 +761,20 @@ KBUILD_CFLAGS += -fomit-frame-pointer
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Initialize all stack variables with a pattern, if desired.
|
# Initialize all stack variables with a 0xAA pattern.
|
||||||
ifdef CONFIG_INIT_STACK_ALL
|
ifdef CONFIG_INIT_STACK_ALL_PATTERN
|
||||||
KBUILD_CFLAGS += -ftrivial-auto-var-init=pattern
|
KBUILD_CFLAGS += -ftrivial-auto-var-init=pattern
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# Initialize all stack variables with a zero value.
|
||||||
|
ifdef CONFIG_INIT_STACK_ALL_ZERO
|
||||||
|
# Future support for zero initialization is still being debated, see
|
||||||
|
# https://bugs.llvm.org/show_bug.cgi?id=45497. These flags are subject to being
|
||||||
|
# renamed or dropped.
|
||||||
|
KBUILD_CFLAGS += -ftrivial-auto-var-init=zero
|
||||||
|
KBUILD_CFLAGS += -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang
|
||||||
|
endif
|
||||||
|
|
||||||
KBUILD_CFLAGS += $(call cc-option, -fno-var-tracking-assignments)
|
KBUILD_CFLAGS += $(call cc-option, -fno-var-tracking-assignments)
|
||||||
|
|
||||||
ifdef CONFIG_DEBUG_INFO
|
ifdef CONFIG_DEBUG_INFO
|
||||||
@@ -851,7 +850,7 @@ LD_FLAGS_LTO_CLANG := -mllvm -import-instr-limit=5
|
|||||||
KBUILD_LDFLAGS += $(LD_FLAGS_LTO_CLANG)
|
KBUILD_LDFLAGS += $(LD_FLAGS_LTO_CLANG)
|
||||||
KBUILD_LDFLAGS_MODULE += $(LD_FLAGS_LTO_CLANG)
|
KBUILD_LDFLAGS_MODULE += $(LD_FLAGS_LTO_CLANG)
|
||||||
|
|
||||||
KBUILD_LDFLAGS_MODULE += -T $(srctree)/scripts/module-lto.lds
|
KBUILD_LDFLAGS_MODULE += -T scripts/module-lto.lds
|
||||||
|
|
||||||
# allow disabling only clang LTO where needed
|
# allow disabling only clang LTO where needed
|
||||||
DISABLE_LTO_CLANG := -fno-lto
|
DISABLE_LTO_CLANG := -fno-lto
|
||||||
@@ -911,6 +910,17 @@ KBUILD_CFLAGS += $(call cc-disable-warning, pointer-sign)
|
|||||||
# disable stringop warnings in gcc 8+
|
# disable stringop warnings in gcc 8+
|
||||||
KBUILD_CFLAGS += $(call cc-disable-warning, stringop-truncation)
|
KBUILD_CFLAGS += $(call cc-disable-warning, stringop-truncation)
|
||||||
|
|
||||||
|
# We'll want to enable this eventually, but it's not going away for 5.7 at least
|
||||||
|
KBUILD_CFLAGS += $(call cc-disable-warning, zero-length-bounds)
|
||||||
|
KBUILD_CFLAGS += $(call cc-disable-warning, array-bounds)
|
||||||
|
KBUILD_CFLAGS += $(call cc-disable-warning, stringop-overflow)
|
||||||
|
|
||||||
|
# Another good warning that we'll want to enable eventually
|
||||||
|
KBUILD_CFLAGS += $(call cc-disable-warning, restrict)
|
||||||
|
|
||||||
|
# Enabled with W=2, disabled by default as noisy
|
||||||
|
KBUILD_CFLAGS += $(call cc-disable-warning, maybe-uninitialized)
|
||||||
|
|
||||||
# disable invalid "can't wrap" optimizations for signed / pointers
|
# disable invalid "can't wrap" optimizations for signed / pointers
|
||||||
KBUILD_CFLAGS += $(call cc-option,-fno-strict-overflow)
|
KBUILD_CFLAGS += $(call cc-option,-fno-strict-overflow)
|
||||||
|
|
||||||
@@ -1172,7 +1182,8 @@ $(vmlinux-dirs): prepare scripts
|
|||||||
$(Q)$(MAKE) $(build)=$@ need-builtin=1
|
$(Q)$(MAKE) $(build)=$@ need-builtin=1
|
||||||
|
|
||||||
define filechk_kernel.release
|
define filechk_kernel.release
|
||||||
echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
|
echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion \
|
||||||
|
$(srctree) $(BRANCH) $(KMI_GENERATION))"
|
||||||
endef
|
endef
|
||||||
|
|
||||||
# Store (new) KERNELRELEASE string in include/config/kernel.release
|
# Store (new) KERNELRELEASE string in include/config/kernel.release
|
||||||
@@ -1250,12 +1261,17 @@ endif
|
|||||||
# needs to be updated, so this check is forced on all builds
|
# needs to be updated, so this check is forced on all builds
|
||||||
|
|
||||||
uts_len := 64
|
uts_len := 64
|
||||||
|
ifneq (,$(BUILD_NUMBER))
|
||||||
|
UTS_RELEASE=$(KERNELRELEASE)-ab$(BUILD_NUMBER)
|
||||||
|
else
|
||||||
|
UTS_RELEASE=$(KERNELRELEASE)
|
||||||
|
endif
|
||||||
define filechk_utsrelease.h
|
define filechk_utsrelease.h
|
||||||
if [ `echo -n "$(KERNELRELEASE)" | wc -c ` -gt $(uts_len) ]; then \
|
if [ `echo -n "$(UTS_RELEASE)" | wc -c ` -gt $(uts_len) ]; then \
|
||||||
echo '"$(KERNELRELEASE)" exceeds $(uts_len) characters' >&2; \
|
echo '"$(UTS_RELEASE)" exceeds $(uts_len) characters' >&2; \
|
||||||
exit 1; \
|
exit 1; \
|
||||||
fi; \
|
fi; \
|
||||||
(echo \#define UTS_RELEASE \"$(KERNELRELEASE)\";)
|
(echo \#define UTS_RELEASE \"$(UTS_RELEASE)\";)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define filechk_version.h
|
define filechk_version.h
|
||||||
@@ -1343,6 +1359,13 @@ ifdef CONFIG_MODULES
|
|||||||
|
|
||||||
all: modules
|
all: modules
|
||||||
|
|
||||||
|
# When we're building modules with modversions, we need to consider
|
||||||
|
# the built-in objects during the descend as well, in order to
|
||||||
|
# make sure the checksums are up to date before we record them.
|
||||||
|
ifdef CONFIG_MODVERSIONS
|
||||||
|
KBUILD_BUILTIN := 1
|
||||||
|
endif
|
||||||
|
|
||||||
# Build modules
|
# Build modules
|
||||||
#
|
#
|
||||||
# A module can be listed more than once in obj-m resulting in
|
# A module can be listed more than once in obj-m resulting in
|
||||||
@@ -1752,7 +1775,8 @@ checkstack:
|
|||||||
$(PERL) $(src)/scripts/checkstack.pl $(CHECKSTACK_ARCH)
|
$(PERL) $(src)/scripts/checkstack.pl $(CHECKSTACK_ARCH)
|
||||||
|
|
||||||
kernelrelease:
|
kernelrelease:
|
||||||
@echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
|
@echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion \
|
||||||
|
$(srctree) $(BRANCH) $(KMI_GENERATION))"
|
||||||
|
|
||||||
kernelversion:
|
kernelversion:
|
||||||
@echo $(KERNELVERSION)
|
@echo $(KERNELVERSION)
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
[abi_whitelist]
|
|
||||||
# commonly used symbols
|
|
||||||
module_layout
|
|
||||||
__put_task_struct
|
|
||||||
221
android/abi_gki_aarch64
Normal file
221
android/abi_gki_aarch64
Normal file
@@ -0,0 +1,221 @@
|
|||||||
|
[abi_whitelist]
|
||||||
|
# commonly used symbols
|
||||||
|
__cfi_slowpath
|
||||||
|
__const_udelay
|
||||||
|
_dev_err
|
||||||
|
devm_ioremap_resource
|
||||||
|
devm_kmalloc
|
||||||
|
devm_request_threaded_irq
|
||||||
|
_dev_warn
|
||||||
|
dummy_dma_ops
|
||||||
|
find_next_bit
|
||||||
|
find_next_zero_bit
|
||||||
|
kfree
|
||||||
|
__kmalloc
|
||||||
|
kmalloc_caches
|
||||||
|
kmem_cache_alloc_trace
|
||||||
|
ktime_get
|
||||||
|
__list_add_valid
|
||||||
|
__ll_sc_atomic64_andnot
|
||||||
|
__ll_sc_atomic_add_return
|
||||||
|
module_layout
|
||||||
|
__mutex_init
|
||||||
|
mutex_lock
|
||||||
|
mutex_unlock
|
||||||
|
of_find_property
|
||||||
|
of_property_read_variable_u32_array
|
||||||
|
platform_get_irq
|
||||||
|
platform_get_resource
|
||||||
|
printk
|
||||||
|
__put_task_struct
|
||||||
|
___ratelimit
|
||||||
|
_raw_spin_lock_irqsave
|
||||||
|
_raw_spin_unlock_irqrestore
|
||||||
|
snprintf
|
||||||
|
__stack_chk_fail
|
||||||
|
__stack_chk_guard
|
||||||
|
strcmp
|
||||||
|
__udelay
|
||||||
|
|
||||||
|
# required by arm-smmu.ko
|
||||||
|
alloc_io_pgtable_ops
|
||||||
|
amba_bustype
|
||||||
|
bus_set_iommu
|
||||||
|
devm_free_irq
|
||||||
|
_dev_notice
|
||||||
|
driver_find_device
|
||||||
|
driver_for_each_device
|
||||||
|
free_io_pgtable_ops
|
||||||
|
generic_device_group
|
||||||
|
iommu_alloc_resv_region
|
||||||
|
iommu_device_link
|
||||||
|
iommu_device_register
|
||||||
|
iommu_device_sysfs_add
|
||||||
|
iommu_device_unlink
|
||||||
|
iommu_dma_get_resv_regions
|
||||||
|
iommu_fwspec_add_ids
|
||||||
|
iommu_fwspec_free
|
||||||
|
iommu_fwspec_init
|
||||||
|
iommu_get_dma_cookie
|
||||||
|
iommu_group_get_for_dev
|
||||||
|
iommu_group_put
|
||||||
|
iommu_group_ref_get
|
||||||
|
iommu_group_remove_device
|
||||||
|
iommu_present
|
||||||
|
iommu_put_dma_cookie
|
||||||
|
__ll_sc_atomic64_fetch_or
|
||||||
|
of_device_get_match_data
|
||||||
|
of_dma_is_coherent
|
||||||
|
of_phandle_iterator_args
|
||||||
|
of_phandle_iterator_init
|
||||||
|
of_phandle_iterator_next
|
||||||
|
param_ops_bool
|
||||||
|
param_ops_int
|
||||||
|
pci_bus_type
|
||||||
|
pci_device_group
|
||||||
|
pci_for_each_dma_alias
|
||||||
|
pci_request_acs
|
||||||
|
platform_bus_type
|
||||||
|
__platform_driver_register
|
||||||
|
platform_driver_unregister
|
||||||
|
put_device
|
||||||
|
|
||||||
|
# required by ufshcd-core.ko
|
||||||
|
__alloc_workqueue_key
|
||||||
|
async_schedule
|
||||||
|
bio_crypt_should_process
|
||||||
|
blk_queue_max_segment_size
|
||||||
|
blk_queue_update_dma_pad
|
||||||
|
bpf_trace_run2
|
||||||
|
bpf_trace_run4
|
||||||
|
bpf_trace_run5
|
||||||
|
bpf_trace_run8
|
||||||
|
cancel_delayed_work
|
||||||
|
cancel_delayed_work_sync
|
||||||
|
cancel_work_sync
|
||||||
|
clk_disable
|
||||||
|
clk_enable
|
||||||
|
clk_prepare
|
||||||
|
clk_set_rate
|
||||||
|
clk_unprepare
|
||||||
|
complete
|
||||||
|
cpu_number
|
||||||
|
__cpu_online_mask
|
||||||
|
delayed_work_timer_fn
|
||||||
|
destroy_workqueue
|
||||||
|
dev_driver_string
|
||||||
|
devfreq_add_device
|
||||||
|
devfreq_remove_device
|
||||||
|
devfreq_resume_device
|
||||||
|
devfreq_suspend_device
|
||||||
|
device_create_file
|
||||||
|
device_remove_file
|
||||||
|
devm_clk_get
|
||||||
|
devm_kfree
|
||||||
|
devm_regulator_get
|
||||||
|
dev_pm_opp_add
|
||||||
|
dev_pm_opp_remove
|
||||||
|
dmam_alloc_coherent
|
||||||
|
down_read
|
||||||
|
down_read_trylock
|
||||||
|
down_write
|
||||||
|
event_triggers_call
|
||||||
|
find_last_bit
|
||||||
|
finish_wait
|
||||||
|
flush_work
|
||||||
|
free_irq
|
||||||
|
__init_rwsem
|
||||||
|
init_timer_key
|
||||||
|
init_wait_entry
|
||||||
|
__init_waitqueue_head
|
||||||
|
jiffies
|
||||||
|
jiffies_to_usecs
|
||||||
|
keyslot_manager_create
|
||||||
|
keyslot_manager_destroy
|
||||||
|
keyslot_manager_private
|
||||||
|
keyslot_manager_reprogram_all_keys
|
||||||
|
keyslot_manager_set_max_dun_bytes
|
||||||
|
kstrtouint
|
||||||
|
kstrtoull
|
||||||
|
__ll_sc_atomic64_fetch_andnot_release
|
||||||
|
__ll_sc_atomic64_fetch_or_acquire
|
||||||
|
__ll_sc_atomic_sub_return
|
||||||
|
memcpy
|
||||||
|
memset
|
||||||
|
memzero_explicit
|
||||||
|
__msecs_to_jiffies
|
||||||
|
msleep
|
||||||
|
perf_trace_buf_alloc
|
||||||
|
perf_trace_run_bpf_submit
|
||||||
|
__pm_runtime_idle
|
||||||
|
__pm_runtime_resume
|
||||||
|
preempt_schedule_notrace
|
||||||
|
prepare_to_wait_event
|
||||||
|
print_hex_dump
|
||||||
|
queue_delayed_work_on
|
||||||
|
queue_work_on
|
||||||
|
_raw_spin_lock
|
||||||
|
_raw_spin_unlock
|
||||||
|
regulator_count_voltages
|
||||||
|
regulator_disable
|
||||||
|
regulator_enable
|
||||||
|
regulator_set_load
|
||||||
|
regulator_set_voltage
|
||||||
|
request_threaded_irq
|
||||||
|
schedule
|
||||||
|
schedule_timeout
|
||||||
|
__scsi_add_device
|
||||||
|
scsi_add_host_with_dma
|
||||||
|
scsi_block_requests
|
||||||
|
scsi_change_queue_depth
|
||||||
|
scsi_device_get
|
||||||
|
scsi_device_put
|
||||||
|
scsi_dma_map
|
||||||
|
scsi_dma_unmap
|
||||||
|
__scsi_execute
|
||||||
|
scsi_host_alloc
|
||||||
|
scsi_host_put
|
||||||
|
scsi_print_command
|
||||||
|
scsi_print_sense_hdr
|
||||||
|
scsi_remove_device
|
||||||
|
scsi_remove_host
|
||||||
|
scsi_report_bus_reset
|
||||||
|
scsi_scan_host
|
||||||
|
scsi_unblock_requests
|
||||||
|
sdev_prefix_printk
|
||||||
|
sg_next
|
||||||
|
sprintf
|
||||||
|
strcpy
|
||||||
|
strlcpy
|
||||||
|
strlen
|
||||||
|
strncmp
|
||||||
|
sysfs_create_groups
|
||||||
|
sysfs_remove_groups
|
||||||
|
system_wq
|
||||||
|
trace_define_field
|
||||||
|
trace_event_buffer_commit
|
||||||
|
trace_event_buffer_reserve
|
||||||
|
trace_event_ignore_this_pid
|
||||||
|
trace_event_raw_init
|
||||||
|
trace_event_reg
|
||||||
|
trace_handle_return
|
||||||
|
trace_print_hex_seq
|
||||||
|
trace_print_symbols_seq
|
||||||
|
trace_raw_output_prep
|
||||||
|
trace_seq_printf
|
||||||
|
up_read
|
||||||
|
up_write
|
||||||
|
usleep_range
|
||||||
|
utf16s_to_utf8s
|
||||||
|
wait_for_completion_timeout
|
||||||
|
__wake_up
|
||||||
|
__warn_printk
|
||||||
|
|
||||||
|
# required by ufshcd-pltfrm.ko
|
||||||
|
_dev_info
|
||||||
|
kstrdup
|
||||||
|
of_get_property
|
||||||
|
of_parse_phandle
|
||||||
|
of_property_read_string_helper
|
||||||
|
pm_runtime_enable
|
||||||
|
__pm_runtime_set_status
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -8,88 +8,108 @@
|
|||||||
__arch_copy_from_user
|
__arch_copy_from_user
|
||||||
__arch_copy_to_user
|
__arch_copy_to_user
|
||||||
arm64_const_caps_ready
|
arm64_const_caps_ready
|
||||||
bus_register
|
bcmp
|
||||||
bus_unregister
|
blk_queue_max_segment_size
|
||||||
|
bpf_trace_run2
|
||||||
|
bpf_trace_run8
|
||||||
|
cancel_delayed_work
|
||||||
cancel_delayed_work_sync
|
cancel_delayed_work_sync
|
||||||
capable
|
capable
|
||||||
|
cfg80211_inform_bss_data
|
||||||
|
cfg80211_put_bss
|
||||||
|
__cfi_slowpath
|
||||||
__check_object_size
|
__check_object_size
|
||||||
|
complete
|
||||||
__const_udelay
|
__const_udelay
|
||||||
consume_skb
|
consume_skb
|
||||||
cpu_hwcap_keys
|
cpu_hwcap_keys
|
||||||
cpu_hwcaps
|
cpu_hwcaps
|
||||||
cpumask_next
|
|
||||||
cpu_number
|
cpu_number
|
||||||
__cpu_online_mask
|
__cpu_online_mask
|
||||||
cpus_read_lock
|
|
||||||
cpus_read_unlock
|
|
||||||
debug_smp_processor_id
|
|
||||||
delayed_work_timer_fn
|
delayed_work_timer_fn
|
||||||
destroy_workqueue
|
destroy_workqueue
|
||||||
_dev_err
|
_dev_err
|
||||||
device_create_file
|
device_create_file
|
||||||
device_register
|
device_register
|
||||||
|
device_remove_file
|
||||||
device_unregister
|
device_unregister
|
||||||
_dev_info
|
_dev_info
|
||||||
__dev_kfree_skb_any
|
__dev_kfree_skb_any
|
||||||
|
devm_ioremap_resource
|
||||||
|
devm_kfree
|
||||||
devm_kmalloc
|
devm_kmalloc
|
||||||
|
devm_request_threaded_irq
|
||||||
|
_dev_notice
|
||||||
dev_queue_xmit
|
dev_queue_xmit
|
||||||
dev_set_name
|
dev_set_name
|
||||||
_dev_warn
|
_dev_warn
|
||||||
dma_alloc_from_dev_coherent
|
down_read
|
||||||
dma_buf_export
|
|
||||||
dma_buf_fd
|
|
||||||
dma_buf_put
|
|
||||||
dma_fence_release
|
|
||||||
dma_fence_wait_timeout
|
|
||||||
dma_release_from_dev_coherent
|
|
||||||
down_write
|
down_write
|
||||||
dummy_dma_ops
|
dummy_dma_ops
|
||||||
ethtool_op_get_link
|
ethtool_op_get_link
|
||||||
eth_validate_addr
|
eth_validate_addr
|
||||||
event_triggers_call
|
event_triggers_call
|
||||||
fd_install
|
fd_install
|
||||||
|
find_next_bit
|
||||||
|
find_next_zero_bit
|
||||||
finish_wait
|
finish_wait
|
||||||
flush_work
|
flush_work
|
||||||
fput
|
fput
|
||||||
free_irq
|
free_irq
|
||||||
free_netdev
|
free_netdev
|
||||||
__free_pages
|
__free_pages
|
||||||
|
get_device
|
||||||
get_random_bytes
|
get_random_bytes
|
||||||
get_unused_fd_flags
|
get_unused_fd_flags
|
||||||
|
hwrng_register
|
||||||
|
hwrng_unregister
|
||||||
ida_alloc_range
|
ida_alloc_range
|
||||||
ida_free
|
ida_free
|
||||||
init_net
|
__init_rwsem
|
||||||
init_timer_key
|
init_timer_key
|
||||||
init_wait_entry
|
init_wait_entry
|
||||||
__init_waitqueue_head
|
__init_waitqueue_head
|
||||||
jiffies
|
jiffies
|
||||||
|
jiffies_to_usecs
|
||||||
kfree
|
kfree
|
||||||
kfree_skb
|
kfree_skb
|
||||||
__kmalloc
|
__kmalloc
|
||||||
kmalloc_caches
|
kmalloc_caches
|
||||||
|
kmem_cache_alloc
|
||||||
kmem_cache_alloc_trace
|
kmem_cache_alloc_trace
|
||||||
|
kmem_cache_create
|
||||||
|
kmem_cache_destroy
|
||||||
|
kmem_cache_free
|
||||||
|
kmemdup
|
||||||
|
kobject_create_and_add
|
||||||
kobject_put
|
kobject_put
|
||||||
kvfree
|
kstrdup
|
||||||
kvmalloc_node
|
kstrtoull
|
||||||
|
ktime_get
|
||||||
|
__list_add_valid
|
||||||
|
__list_del_entry_valid
|
||||||
__ll_sc_atomic64_add
|
__ll_sc_atomic64_add
|
||||||
__ll_sc_atomic64_andnot
|
__ll_sc_atomic64_andnot
|
||||||
|
__ll_sc_atomic64_fetch_or
|
||||||
__ll_sc_atomic64_or
|
__ll_sc_atomic64_or
|
||||||
__ll_sc_atomic_add
|
__ll_sc_atomic_add
|
||||||
|
__ll_sc_atomic_add_return
|
||||||
__ll_sc_atomic_sub_return
|
__ll_sc_atomic_sub_return
|
||||||
__ll_sc___cmpxchg_case_mb_4
|
|
||||||
__local_bh_enable_ip
|
__local_bh_enable_ip
|
||||||
lock_sock_nested
|
lock_sock_nested
|
||||||
memcpy
|
memcpy
|
||||||
memset
|
memset
|
||||||
memstart_addr
|
memstart_addr
|
||||||
|
memzero_explicit
|
||||||
misc_deregister
|
misc_deregister
|
||||||
misc_register
|
misc_register
|
||||||
module_put
|
mod_timer
|
||||||
|
module_layout
|
||||||
|
__msecs_to_jiffies
|
||||||
msleep
|
msleep
|
||||||
__mutex_init
|
__mutex_init
|
||||||
mutex_lock
|
mutex_lock
|
||||||
mutex_lock_interruptible
|
mutex_lock_interruptible
|
||||||
mutex_trylock
|
|
||||||
mutex_unlock
|
mutex_unlock
|
||||||
netdev_err
|
netdev_err
|
||||||
netdev_info
|
netdev_info
|
||||||
@@ -101,22 +121,29 @@
|
|||||||
netif_device_detach
|
netif_device_detach
|
||||||
netif_tx_stop_all_queues
|
netif_tx_stop_all_queues
|
||||||
netif_tx_wake_queue
|
netif_tx_wake_queue
|
||||||
|
no_llseek
|
||||||
noop_llseek
|
noop_llseek
|
||||||
nr_cpu_ids
|
nr_cpu_ids
|
||||||
|
of_find_property
|
||||||
|
of_get_property
|
||||||
|
of_property_read_variable_u32_array
|
||||||
param_ops_bool
|
param_ops_bool
|
||||||
param_ops_charp
|
param_ops_charp
|
||||||
param_ops_int
|
param_ops_int
|
||||||
param_ops_uint
|
param_ops_uint
|
||||||
passthru_features_check
|
passthru_features_check
|
||||||
|
pci_bus_type
|
||||||
pci_disable_device
|
pci_disable_device
|
||||||
pci_enable_device
|
pci_enable_device
|
||||||
|
pci_iomap
|
||||||
pci_read_config_dword
|
pci_read_config_dword
|
||||||
__pci_register_driver
|
__pci_register_driver
|
||||||
|
pci_request_region
|
||||||
pci_set_master
|
pci_set_master
|
||||||
pci_unregister_driver
|
pci_unregister_driver
|
||||||
__per_cpu_offset
|
|
||||||
perf_trace_buf_alloc
|
perf_trace_buf_alloc
|
||||||
perf_trace_run_bpf_submit
|
perf_trace_run_bpf_submit
|
||||||
|
platform_bus_type
|
||||||
platform_device_add
|
platform_device_add
|
||||||
platform_device_alloc
|
platform_device_alloc
|
||||||
platform_device_del
|
platform_device_del
|
||||||
@@ -124,18 +151,23 @@
|
|||||||
platform_device_unregister
|
platform_device_unregister
|
||||||
__platform_driver_register
|
__platform_driver_register
|
||||||
platform_driver_unregister
|
platform_driver_unregister
|
||||||
preempt_count_add
|
platform_get_irq
|
||||||
preempt_count_sub
|
platform_get_resource
|
||||||
|
pm_runtime_enable
|
||||||
|
__pm_runtime_idle
|
||||||
|
__pm_runtime_resume
|
||||||
preempt_schedule
|
preempt_schedule
|
||||||
preempt_schedule_notrace
|
preempt_schedule_notrace
|
||||||
prepare_to_wait_event
|
prepare_to_wait_event
|
||||||
printk
|
printk
|
||||||
|
__put_cred
|
||||||
put_device
|
put_device
|
||||||
__put_page
|
__put_page
|
||||||
|
__put_task_struct
|
||||||
|
put_unused_fd
|
||||||
queue_delayed_work_on
|
queue_delayed_work_on
|
||||||
queue_work_on
|
queue_work_on
|
||||||
_raw_read_lock
|
___ratelimit
|
||||||
_raw_read_unlock
|
|
||||||
_raw_spin_lock
|
_raw_spin_lock
|
||||||
_raw_spin_lock_bh
|
_raw_spin_lock_bh
|
||||||
_raw_spin_lock_irq
|
_raw_spin_lock_irq
|
||||||
@@ -149,11 +181,11 @@
|
|||||||
refcount_dec_and_test_checked
|
refcount_dec_and_test_checked
|
||||||
refcount_inc_checked
|
refcount_inc_checked
|
||||||
register_netdev
|
register_netdev
|
||||||
register_shrinker
|
register_virtio_device
|
||||||
|
register_virtio_driver
|
||||||
release_sock
|
release_sock
|
||||||
remove_wait_queue
|
remove_wait_queue
|
||||||
request_threaded_irq
|
request_threaded_irq
|
||||||
reservation_object_add_excl_fence
|
|
||||||
rtnl_lock
|
rtnl_lock
|
||||||
rtnl_unlock
|
rtnl_unlock
|
||||||
schedule
|
schedule
|
||||||
@@ -172,7 +204,6 @@
|
|||||||
snd_pcm_alt_chmaps
|
snd_pcm_alt_chmaps
|
||||||
snprintf
|
snprintf
|
||||||
sprintf
|
sprintf
|
||||||
sscanf
|
|
||||||
__stack_chk_fail
|
__stack_chk_fail
|
||||||
__stack_chk_guard
|
__stack_chk_guard
|
||||||
strcmp
|
strcmp
|
||||||
@@ -180,9 +211,11 @@
|
|||||||
strlcpy
|
strlcpy
|
||||||
strlen
|
strlen
|
||||||
strncpy
|
strncpy
|
||||||
|
strsep
|
||||||
strstr
|
strstr
|
||||||
synchronize_irq
|
synchronize_irq
|
||||||
synchronize_net
|
synchronize_net
|
||||||
|
sysfs_create_groups
|
||||||
system_wq
|
system_wq
|
||||||
trace_define_field
|
trace_define_field
|
||||||
trace_event_buffer_commit
|
trace_event_buffer_commit
|
||||||
@@ -191,69 +224,82 @@
|
|||||||
trace_event_raw_init
|
trace_event_raw_init
|
||||||
trace_event_reg
|
trace_event_reg
|
||||||
trace_handle_return
|
trace_handle_return
|
||||||
|
trace_print_symbols_seq
|
||||||
trace_raw_output_prep
|
trace_raw_output_prep
|
||||||
trace_seq_printf
|
trace_seq_printf
|
||||||
|
__udelay
|
||||||
unregister_netdev
|
unregister_netdev
|
||||||
unregister_netdevice_queue
|
unregister_netdevice_queue
|
||||||
|
unregister_virtio_device
|
||||||
|
unregister_virtio_driver
|
||||||
up_read
|
up_read
|
||||||
up_write
|
up_write
|
||||||
vmap
|
usleep_range
|
||||||
vunmap
|
vfree
|
||||||
|
virtio_check_driver_offered_feature
|
||||||
|
virtio_config_changed
|
||||||
|
virtqueue_add_inbuf
|
||||||
|
virtqueue_add_outbuf
|
||||||
|
virtqueue_add_sgs
|
||||||
|
virtqueue_detach_unused_buf
|
||||||
|
virtqueue_disable_cb
|
||||||
|
virtqueue_enable_cb
|
||||||
|
virtqueue_get_avail_addr
|
||||||
|
virtqueue_get_buf
|
||||||
|
virtqueue_get_desc_addr
|
||||||
|
virtqueue_get_used_addr
|
||||||
|
virtqueue_get_vring_size
|
||||||
|
virtqueue_is_broken
|
||||||
|
virtqueue_kick
|
||||||
|
virtqueue_kick_prepare
|
||||||
|
virtqueue_notify
|
||||||
|
vmalloc
|
||||||
|
vring_create_virtqueue
|
||||||
|
vring_del_virtqueue
|
||||||
|
vring_interrupt
|
||||||
|
vring_transport_features
|
||||||
wait_woken
|
wait_woken
|
||||||
__wake_up
|
__wake_up
|
||||||
__warn_printk
|
__warn_printk
|
||||||
woken_wake_function
|
woken_wake_function
|
||||||
ww_mutex_lock_interruptible
|
|
||||||
ww_mutex_unlock
|
|
||||||
|
|
||||||
# required by binfmt_misc.ko
|
# required by ac97_bus.ko
|
||||||
bin2hex
|
bus_register
|
||||||
bprm_change_interp
|
bus_unregister
|
||||||
clear_inode
|
|
||||||
__close_fd
|
|
||||||
copy_strings_kernel
|
|
||||||
_ctype
|
|
||||||
current_time
|
|
||||||
d_drop
|
|
||||||
default_llseek
|
|
||||||
dentry_open
|
|
||||||
d_instantiate
|
|
||||||
dput
|
|
||||||
drop_nlink
|
|
||||||
filp_close
|
|
||||||
free_pages
|
|
||||||
__get_free_pages
|
|
||||||
get_next_ino
|
|
||||||
iput
|
|
||||||
kernel_read
|
|
||||||
kill_litter_super
|
|
||||||
kstrtoint
|
|
||||||
lockref_get
|
|
||||||
lookup_one_len
|
|
||||||
mount_single
|
|
||||||
new_inode
|
|
||||||
open_exec
|
|
||||||
prepare_binprm
|
|
||||||
_raw_write_lock
|
|
||||||
_raw_write_unlock
|
|
||||||
__register_binfmt
|
|
||||||
register_filesystem
|
|
||||||
remove_arg_zero
|
|
||||||
search_binary_handler
|
|
||||||
simple_fill_super
|
|
||||||
simple_pin_fs
|
|
||||||
simple_read_from_buffer
|
|
||||||
simple_release_fs
|
|
||||||
simple_statfs
|
|
||||||
strchr
|
|
||||||
string_unescape
|
|
||||||
strrchr
|
|
||||||
unregister_binfmt
|
|
||||||
unregister_filesystem
|
|
||||||
would_dump
|
|
||||||
|
|
||||||
# required by blk-mq-virtio.ko
|
# required by arm-smmu.ko
|
||||||
blk_mq_map_queues
|
alloc_io_pgtable_ops
|
||||||
|
amba_bustype
|
||||||
|
bus_set_iommu
|
||||||
|
devm_free_irq
|
||||||
|
driver_find_device
|
||||||
|
driver_for_each_device
|
||||||
|
free_io_pgtable_ops
|
||||||
|
generic_device_group
|
||||||
|
iommu_alloc_resv_region
|
||||||
|
iommu_device_link
|
||||||
|
iommu_device_register
|
||||||
|
iommu_device_sysfs_add
|
||||||
|
iommu_device_unlink
|
||||||
|
iommu_dma_get_resv_regions
|
||||||
|
iommu_fwspec_add_ids
|
||||||
|
iommu_fwspec_free
|
||||||
|
iommu_fwspec_init
|
||||||
|
iommu_get_dma_cookie
|
||||||
|
iommu_group_get_for_dev
|
||||||
|
iommu_group_put
|
||||||
|
iommu_group_ref_get
|
||||||
|
iommu_group_remove_device
|
||||||
|
iommu_present
|
||||||
|
iommu_put_dma_cookie
|
||||||
|
of_device_get_match_data
|
||||||
|
of_dma_is_coherent
|
||||||
|
of_phandle_iterator_args
|
||||||
|
of_phandle_iterator_init
|
||||||
|
of_phandle_iterator_next
|
||||||
|
pci_device_group
|
||||||
|
pci_for_each_dma_alias
|
||||||
|
pci_request_acs
|
||||||
|
|
||||||
# required by dummy-cpufreq.ko
|
# required by dummy-cpufreq.ko
|
||||||
cpufreq_generic_attr
|
cpufreq_generic_attr
|
||||||
@@ -261,10 +307,7 @@
|
|||||||
cpufreq_unregister_driver
|
cpufreq_unregister_driver
|
||||||
|
|
||||||
# required by dummy_hcd.ko
|
# required by dummy_hcd.ko
|
||||||
device_remove_file
|
|
||||||
ktime_get_ts64
|
ktime_get_ts64
|
||||||
memzero_explicit
|
|
||||||
mod_timer
|
|
||||||
platform_device_add_data
|
platform_device_add_data
|
||||||
scnprintf
|
scnprintf
|
||||||
sg_miter_next
|
sg_miter_next
|
||||||
@@ -290,7 +333,6 @@
|
|||||||
usb_put_dev
|
usb_put_dev
|
||||||
usb_put_hcd
|
usb_put_hcd
|
||||||
usb_remove_hcd
|
usb_remove_hcd
|
||||||
usleep_range
|
|
||||||
|
|
||||||
# required by failover.ko
|
# required by failover.ko
|
||||||
netdev_master_upper_dev_link
|
netdev_master_upper_dev_link
|
||||||
@@ -301,9 +343,6 @@
|
|||||||
# required by gnss-cmdline.ko
|
# required by gnss-cmdline.ko
|
||||||
bus_find_device_by_name
|
bus_find_device_by_name
|
||||||
device_find_child
|
device_find_child
|
||||||
kstrdup
|
|
||||||
platform_bus_type
|
|
||||||
strsep
|
|
||||||
|
|
||||||
# required by gnss-serial.ko
|
# required by gnss-serial.ko
|
||||||
gnss_allocate_device
|
gnss_allocate_device
|
||||||
@@ -311,11 +350,8 @@
|
|||||||
gnss_insert_raw
|
gnss_insert_raw
|
||||||
gnss_put_device
|
gnss_put_device
|
||||||
gnss_register_device
|
gnss_register_device
|
||||||
of_property_read_variable_u32_array
|
__ll_sc___cmpxchg_case_mb_4
|
||||||
__pm_runtime_disable
|
__pm_runtime_disable
|
||||||
pm_runtime_enable
|
|
||||||
__pm_runtime_idle
|
|
||||||
__pm_runtime_resume
|
|
||||||
serdev_device_close
|
serdev_device_close
|
||||||
serdev_device_open
|
serdev_device_open
|
||||||
serdev_device_set_baudrate
|
serdev_device_set_baudrate
|
||||||
@@ -324,33 +360,114 @@
|
|||||||
serdev_device_write
|
serdev_device_write
|
||||||
serdev_device_write_wakeup
|
serdev_device_write_wakeup
|
||||||
|
|
||||||
|
# required by incrementalfs.ko
|
||||||
|
bin2hex
|
||||||
|
__break_lease
|
||||||
|
clear_inode
|
||||||
|
__close_fd
|
||||||
|
crc32_le
|
||||||
|
crypto_alloc_shash
|
||||||
|
crypto_destroy_tfm
|
||||||
|
crypto_shash_digest
|
||||||
|
d_add
|
||||||
|
d_drop
|
||||||
|
deactivate_locked_super
|
||||||
|
dentry_open
|
||||||
|
dget_parent
|
||||||
|
d_instantiate
|
||||||
|
d_make_root
|
||||||
|
dput
|
||||||
|
fget
|
||||||
|
flush_dcache_page
|
||||||
|
flush_delayed_work
|
||||||
|
free_pages
|
||||||
|
fs_kobj
|
||||||
|
fsstack_copy_attr_all
|
||||||
|
generic_file_llseek
|
||||||
|
generic_file_mmap
|
||||||
|
generic_file_read_iter
|
||||||
|
generic_file_splice_read
|
||||||
|
generic_read_dir
|
||||||
|
generic_shutdown_super
|
||||||
|
__get_free_pages
|
||||||
|
get_zeroed_page
|
||||||
|
iget5_locked
|
||||||
|
ihold
|
||||||
|
inode_init_once
|
||||||
|
inode_init_owner
|
||||||
|
iput
|
||||||
|
iterate_dir
|
||||||
|
kernel_read
|
||||||
|
kernel_write
|
||||||
|
kern_path
|
||||||
|
__ll_sc___cmpxchg_case_rel_8
|
||||||
|
lockref_get
|
||||||
|
lock_rename
|
||||||
|
lookup_one_len
|
||||||
|
LZ4_decompress_safe
|
||||||
|
match_int
|
||||||
|
match_token
|
||||||
|
notify_change
|
||||||
|
pagecache_get_page
|
||||||
|
path_get
|
||||||
|
path_put
|
||||||
|
register_filesystem
|
||||||
|
seq_puts
|
||||||
|
set_anon_super
|
||||||
|
sget
|
||||||
|
simple_getattr
|
||||||
|
simple_setattr
|
||||||
|
simple_statfs
|
||||||
|
strndup_user
|
||||||
|
sync_filesystem
|
||||||
|
sysfs_create_group
|
||||||
|
sysfs_remove_group
|
||||||
|
truncate_inode_pages
|
||||||
|
unlock_new_inode
|
||||||
|
unlock_page
|
||||||
|
unlock_rename
|
||||||
|
unregister_filesystem
|
||||||
|
user_path_at_empty
|
||||||
|
vfs_create
|
||||||
|
vfs_fallocate
|
||||||
|
vfs_getattr
|
||||||
|
vfs_getxattr
|
||||||
|
vfs_link
|
||||||
|
vfs_listxattr
|
||||||
|
vfs_mkdir
|
||||||
|
vfs_rename
|
||||||
|
vfs_rmdir
|
||||||
|
vfs_setxattr
|
||||||
|
vfs_unlink
|
||||||
|
|
||||||
# required by ion-alloc.ko
|
# required by ion-alloc.ko
|
||||||
|
bpf_trace_run3
|
||||||
contig_page_data
|
contig_page_data
|
||||||
down_read
|
dma_buf_export
|
||||||
|
dma_buf_fd
|
||||||
|
dma_buf_put
|
||||||
freezing_slow_path
|
freezing_slow_path
|
||||||
__init_rwsem
|
|
||||||
kernel_kobj
|
kernel_kobj
|
||||||
kobject_create_and_add
|
|
||||||
kthread_create_on_node
|
kthread_create_on_node
|
||||||
__ll_sc_atomic64_sub
|
__ll_sc_atomic64_add_return
|
||||||
|
__ll_sc_atomic64_sub_return
|
||||||
mod_node_page_state
|
mod_node_page_state
|
||||||
plist_add
|
plist_add
|
||||||
|
ptr_to_hashval
|
||||||
rb_erase
|
rb_erase
|
||||||
rb_insert_color
|
rb_insert_color
|
||||||
__refrigerator
|
__refrigerator
|
||||||
|
register_shrinker
|
||||||
remap_pfn_range
|
remap_pfn_range
|
||||||
sched_setscheduler
|
sched_setscheduler
|
||||||
sg_alloc_table
|
sg_alloc_table
|
||||||
__sg_page_iter_next
|
__sg_page_iter_next
|
||||||
__sg_page_iter_start
|
__sg_page_iter_start
|
||||||
split_page
|
split_page
|
||||||
sysfs_create_groups
|
|
||||||
system_freezing_cnt
|
system_freezing_cnt
|
||||||
totalram_pages
|
totalram_pages
|
||||||
vfree
|
vmap
|
||||||
vmalloc
|
vunmap
|
||||||
vm_map_ram
|
|
||||||
vm_unmap_ram
|
|
||||||
wake_up_process
|
wake_up_process
|
||||||
|
|
||||||
# required by nd_virtio.ko
|
# required by nd_virtio.ko
|
||||||
@@ -373,7 +490,6 @@
|
|||||||
netdev_change_features
|
netdev_change_features
|
||||||
netdev_increment_features
|
netdev_increment_features
|
||||||
netdev_lower_state_changed
|
netdev_lower_state_changed
|
||||||
pci_bus_type
|
|
||||||
|
|
||||||
# required by rtc-test.ko
|
# required by rtc-test.ko
|
||||||
add_timer
|
add_timer
|
||||||
@@ -405,9 +521,7 @@
|
|||||||
strcat
|
strcat
|
||||||
|
|
||||||
# required by snd-intel8x0.ko
|
# required by snd-intel8x0.ko
|
||||||
ktime_get
|
|
||||||
param_ops_bint
|
param_ops_bint
|
||||||
pci_iomap
|
|
||||||
pci_release_regions
|
pci_release_regions
|
||||||
pci_request_regions
|
pci_request_regions
|
||||||
pci_write_config_dword
|
pci_write_config_dword
|
||||||
@@ -432,77 +546,119 @@
|
|||||||
snd_pcm_set_ops
|
snd_pcm_set_ops
|
||||||
snd_pcm_suspend_all
|
snd_pcm_suspend_all
|
||||||
|
|
||||||
# required by ttm.ko
|
# required by test_meminit.ko
|
||||||
clear_page
|
kmem_cache_alloc_bulk
|
||||||
copy_page
|
kmem_cache_free_bulk
|
||||||
|
|
||||||
|
# required by tpm.ko
|
||||||
|
alloc_chrdev_region
|
||||||
|
cdev_device_add
|
||||||
|
cdev_device_del
|
||||||
|
cdev_init
|
||||||
|
__class_create
|
||||||
|
class_destroy
|
||||||
|
__compat_only_sysfs_link_entry_to_kobj
|
||||||
|
del_timer_sync
|
||||||
|
device_initialize
|
||||||
|
devm_add_action
|
||||||
|
efi
|
||||||
|
hash_digest_size
|
||||||
|
idr_alloc
|
||||||
|
idr_destroy
|
||||||
|
idr_get_next
|
||||||
|
idr_remove
|
||||||
|
idr_replace
|
||||||
|
jiffies_to_msecs
|
||||||
|
memremap
|
||||||
|
memunmap
|
||||||
|
of_property_match_string
|
||||||
|
securityfs_create_dir
|
||||||
|
securityfs_create_file
|
||||||
|
securityfs_remove
|
||||||
|
seq_lseek
|
||||||
|
seq_open
|
||||||
|
seq_putc
|
||||||
|
seq_read
|
||||||
|
seq_release
|
||||||
|
seq_write
|
||||||
|
sysfs_remove_link
|
||||||
|
unregister_chrdev_region
|
||||||
|
__usecs_to_jiffies
|
||||||
|
|
||||||
|
# required by tpm_vtpm_proxy.ko
|
||||||
|
anon_inode_getfile
|
||||||
|
|
||||||
|
# required by ufshcd-core.ko
|
||||||
|
async_schedule
|
||||||
|
bio_crypt_should_process
|
||||||
|
blk_queue_update_dma_pad
|
||||||
|
bpf_trace_run4
|
||||||
|
bpf_trace_run5
|
||||||
|
cancel_work_sync
|
||||||
|
clk_disable
|
||||||
|
clk_enable
|
||||||
|
clk_prepare
|
||||||
|
clk_set_rate
|
||||||
|
clk_unprepare
|
||||||
dev_driver_string
|
dev_driver_string
|
||||||
devres_add
|
devfreq_add_device
|
||||||
__devres_alloc_node
|
devfreq_remove_device
|
||||||
devres_destroy
|
devfreq_resume_device
|
||||||
devres_free
|
devfreq_suspend_device
|
||||||
dma_buf_get
|
devm_clk_get
|
||||||
dma_fence_enable_sw_signaling
|
devm_regulator_get
|
||||||
dma_fence_signal
|
dev_pm_opp_add
|
||||||
drm_class_device_register
|
dev_pm_opp_remove
|
||||||
drm_class_device_unregister
|
dmam_alloc_coherent
|
||||||
drm_clflush_pages
|
down_read_trylock
|
||||||
drm_ht_create
|
find_last_bit
|
||||||
drm_ht_find_item
|
keyslot_manager_create
|
||||||
drm_ht_insert_item
|
keyslot_manager_destroy
|
||||||
drm_ht_just_insert_please
|
keyslot_manager_private
|
||||||
drm_ht_remove
|
keyslot_manager_reprogram_all_keys
|
||||||
drm_ht_remove_item
|
keyslot_manager_set_max_dun_bytes
|
||||||
drm_mm_init
|
kstrtouint
|
||||||
drm_mm_insert_node_in_range
|
__ll_sc_atomic64_fetch_andnot_release
|
||||||
drm_mm_print
|
__ll_sc_atomic64_fetch_or_acquire
|
||||||
drm_mm_remove_node
|
print_hex_dump
|
||||||
drm_mm_takedown
|
regulator_count_voltages
|
||||||
__drm_printfn_debug
|
regulator_disable
|
||||||
drm_vma_offset_add
|
regulator_enable
|
||||||
drm_vma_offset_lookup_locked
|
regulator_set_load
|
||||||
drm_vma_offset_manager_destroy
|
regulator_set_voltage
|
||||||
drm_vma_offset_manager_init
|
__scsi_add_device
|
||||||
drm_vma_offset_remove
|
scsi_add_host_with_dma
|
||||||
flush_workqueue
|
scsi_block_requests
|
||||||
__ioremap
|
scsi_change_queue_depth
|
||||||
__iounmap
|
scsi_device_get
|
||||||
kfree_call_rcu
|
scsi_device_put
|
||||||
kobject_del
|
scsi_dma_map
|
||||||
kobject_init_and_add
|
scsi_dma_unmap
|
||||||
__ll_sc_atomic64_add_return_relaxed
|
__scsi_execute
|
||||||
__ll_sc_atomic_sub
|
scsi_host_alloc
|
||||||
__ll_sc___cmpxchg_case_mb_8
|
scsi_host_put
|
||||||
mark_page_accessed
|
scsi_print_command
|
||||||
__memcpy_fromio
|
scsi_print_sense_hdr
|
||||||
__memcpy_toio
|
scsi_remove_device
|
||||||
__memset_io
|
scsi_remove_host
|
||||||
nr_swap_pages
|
scsi_report_bus_reset
|
||||||
refcount_inc_not_zero_checked
|
scsi_scan_host
|
||||||
reservation_object_add_shared_fence
|
scsi_unblock_requests
|
||||||
reservation_object_copy_fences
|
sdev_prefix_printk
|
||||||
reservation_object_reserve_shared
|
strncmp
|
||||||
reservation_object_test_signaled_rcu
|
sysfs_remove_groups
|
||||||
reservation_object_wait_timeout_rcu
|
trace_print_hex_seq
|
||||||
reservation_ww_class
|
utf16s_to_utf8s
|
||||||
send_sig
|
wait_for_completion_timeout
|
||||||
set_page_dirty
|
|
||||||
shmem_file_setup
|
# required by ufshcd-pltfrm.ko
|
||||||
shmem_read_mapping_page_gfp
|
of_parse_phandle
|
||||||
si_mem_available
|
of_property_read_string_helper
|
||||||
si_meminfo
|
__pm_runtime_set_status
|
||||||
unmap_mapping_range
|
|
||||||
unregister_shrinker
|
|
||||||
vmalloc_to_page
|
|
||||||
vm_get_page_prot
|
|
||||||
vm_insert_mixed
|
|
||||||
vm_insert_pfn
|
|
||||||
ww_mutex_lock
|
|
||||||
|
|
||||||
# required by virt_wifi.ko
|
# required by virt_wifi.ko
|
||||||
cfg80211_connect_done
|
cfg80211_connect_done
|
||||||
cfg80211_disconnected
|
cfg80211_disconnected
|
||||||
cfg80211_inform_bss_data
|
|
||||||
cfg80211_put_bss
|
|
||||||
cfg80211_scan_done
|
cfg80211_scan_done
|
||||||
__dev_get_by_index
|
__dev_get_by_index
|
||||||
dev_printk
|
dev_printk
|
||||||
@@ -518,12 +674,19 @@
|
|||||||
wiphy_register
|
wiphy_register
|
||||||
wiphy_unregister
|
wiphy_unregister
|
||||||
|
|
||||||
|
# required by virt_wifi_sim.ko
|
||||||
|
ieee80211_get_channel
|
||||||
|
release_firmware
|
||||||
|
request_firmware
|
||||||
|
|
||||||
# required by virtio-gpu.ko
|
# required by virtio-gpu.ko
|
||||||
bpf_trace_run2
|
dma_buf_get_uuid
|
||||||
dma_fence_context_alloc
|
dma_fence_context_alloc
|
||||||
dma_fence_init
|
dma_fence_init
|
||||||
dma_fence_match_context
|
dma_fence_match_context
|
||||||
|
dma_fence_release
|
||||||
dma_fence_signal_locked
|
dma_fence_signal_locked
|
||||||
|
dma_fence_wait_timeout
|
||||||
drm_add_edid_modes
|
drm_add_edid_modes
|
||||||
drm_add_modes_noedid
|
drm_add_modes_noedid
|
||||||
drm_atomic_helper_check
|
drm_atomic_helper_check
|
||||||
@@ -565,14 +728,22 @@
|
|||||||
drm_dev_put
|
drm_dev_put
|
||||||
drm_dev_register
|
drm_dev_register
|
||||||
drm_dev_set_unique
|
drm_dev_set_unique
|
||||||
|
drm_dev_unregister
|
||||||
drm_do_get_edid
|
drm_do_get_edid
|
||||||
drm_encoder_cleanup
|
drm_encoder_cleanup
|
||||||
drm_encoder_init
|
drm_encoder_init
|
||||||
drm_err
|
drm_err
|
||||||
drm_framebuffer_init
|
drm_framebuffer_init
|
||||||
|
drm_gem_dmabuf_mmap
|
||||||
|
drm_gem_dmabuf_release
|
||||||
|
drm_gem_dmabuf_vmap
|
||||||
|
drm_gem_dmabuf_vunmap
|
||||||
drm_gem_fb_create_handle
|
drm_gem_fb_create_handle
|
||||||
drm_gem_fb_destroy
|
drm_gem_fb_destroy
|
||||||
drm_gem_handle_create
|
drm_gem_handle_create
|
||||||
|
drm_gem_map_attach
|
||||||
|
drm_gem_map_detach
|
||||||
|
drm_gem_map_dma_buf
|
||||||
drm_gem_object_init
|
drm_gem_object_init
|
||||||
drm_gem_object_lookup
|
drm_gem_object_lookup
|
||||||
drm_gem_object_put_unlocked
|
drm_gem_object_put_unlocked
|
||||||
@@ -582,6 +753,7 @@
|
|||||||
drm_gem_prime_handle_to_fd
|
drm_gem_prime_handle_to_fd
|
||||||
drm_gem_prime_import
|
drm_gem_prime_import
|
||||||
drm_gem_prime_mmap
|
drm_gem_prime_mmap
|
||||||
|
drm_gem_unmap_dma_buf
|
||||||
drm_global_item_ref
|
drm_global_item_ref
|
||||||
drm_global_item_unref
|
drm_global_item_unref
|
||||||
drm_helper_hpd_irq_event
|
drm_helper_hpd_irq_event
|
||||||
@@ -604,34 +776,47 @@
|
|||||||
drm_universal_plane_init
|
drm_universal_plane_init
|
||||||
__get_task_comm
|
__get_task_comm
|
||||||
kmalloc_order_trace
|
kmalloc_order_trace
|
||||||
kmem_cache_alloc
|
kvfree
|
||||||
kmem_cache_create
|
kvmalloc_node
|
||||||
kmem_cache_destroy
|
|
||||||
kmem_cache_free
|
|
||||||
memdup_user
|
memdup_user
|
||||||
put_unused_fd
|
mutex_trylock
|
||||||
remove_conflicting_framebuffers
|
reservation_object_add_excl_fence
|
||||||
sg_alloc_table_from_pages
|
sg_alloc_table_from_pages
|
||||||
sync_file_create
|
sync_file_create
|
||||||
sync_file_get_fence
|
sync_file_get_fence
|
||||||
__tracepoint_dma_fence_emit
|
__tracepoint_dma_fence_emit
|
||||||
|
ttm_bo_add_to_lru
|
||||||
|
ttm_bo_del_sub_from_lru
|
||||||
|
ttm_bo_device_init
|
||||||
|
ttm_bo_device_release
|
||||||
|
ttm_bo_dma_acc_size
|
||||||
|
ttm_bo_eviction_valuable
|
||||||
|
ttm_bo_global_init
|
||||||
|
ttm_bo_global_release
|
||||||
|
ttm_bo_init
|
||||||
|
ttm_bo_init_mm
|
||||||
|
ttm_bo_kmap
|
||||||
|
ttm_bo_kunmap
|
||||||
|
ttm_bo_manager_func
|
||||||
|
ttm_bo_mmap
|
||||||
|
ttm_bo_put
|
||||||
|
ttm_bo_validate
|
||||||
|
ttm_bo_wait
|
||||||
|
ttm_dma_tt_fini
|
||||||
|
ttm_dma_tt_init
|
||||||
|
ttm_eu_backoff_reservation
|
||||||
|
ttm_eu_fence_buffer_objects
|
||||||
|
ttm_eu_reserve_buffers
|
||||||
|
ttm_mem_global_init
|
||||||
|
ttm_mem_global_release
|
||||||
|
ttm_tt_init
|
||||||
|
ww_mutex_lock_interruptible
|
||||||
|
ww_mutex_unlock
|
||||||
|
|
||||||
# required by virtio-rng.ko
|
# required by virtio-rng.ko
|
||||||
complete
|
|
||||||
hwrng_register
|
|
||||||
hwrng_unregister
|
|
||||||
wait_for_completion
|
wait_for_completion
|
||||||
wait_for_completion_killable
|
wait_for_completion_killable
|
||||||
|
|
||||||
# required by virtio.ko
|
|
||||||
add_uevent_var
|
|
||||||
device_add
|
|
||||||
device_initialize
|
|
||||||
driver_register
|
|
||||||
driver_unregister
|
|
||||||
ida_destroy
|
|
||||||
panic
|
|
||||||
|
|
||||||
# required by virtio_blk.ko
|
# required by virtio_blk.ko
|
||||||
__alloc_disk_node
|
__alloc_disk_node
|
||||||
blk_cleanup_queue
|
blk_cleanup_queue
|
||||||
@@ -647,6 +832,7 @@
|
|||||||
blk_mq_start_stopped_hw_queues
|
blk_mq_start_stopped_hw_queues
|
||||||
blk_mq_stop_hw_queue
|
blk_mq_stop_hw_queue
|
||||||
blk_mq_unquiesce_queue
|
blk_mq_unquiesce_queue
|
||||||
|
blk_mq_virtio_map_queues
|
||||||
blk_put_request
|
blk_put_request
|
||||||
blk_queue_alignment_offset
|
blk_queue_alignment_offset
|
||||||
blk_queue_io_min
|
blk_queue_io_min
|
||||||
@@ -654,7 +840,6 @@
|
|||||||
blk_queue_logical_block_size
|
blk_queue_logical_block_size
|
||||||
blk_queue_max_hw_sectors
|
blk_queue_max_hw_sectors
|
||||||
blk_queue_max_segments
|
blk_queue_max_segments
|
||||||
blk_queue_max_segment_size
|
|
||||||
blk_queue_physical_block_size
|
blk_queue_physical_block_size
|
||||||
blk_queue_write_cache
|
blk_queue_write_cache
|
||||||
blk_rq_map_kern
|
blk_rq_map_kern
|
||||||
@@ -662,7 +847,6 @@
|
|||||||
blk_status_to_errno
|
blk_status_to_errno
|
||||||
del_gendisk
|
del_gendisk
|
||||||
device_add_disk
|
device_add_disk
|
||||||
_dev_notice
|
|
||||||
kobject_uevent_env
|
kobject_uevent_env
|
||||||
memmove
|
memmove
|
||||||
put_disk
|
put_disk
|
||||||
@@ -673,24 +857,6 @@
|
|||||||
__sysfs_match_string
|
__sysfs_match_string
|
||||||
unregister_blkdev
|
unregister_blkdev
|
||||||
|
|
||||||
# required by virtio_crypto.ko
|
|
||||||
cpu_bit_bitmap
|
|
||||||
cpu_topology
|
|
||||||
crypto_ablkcipher_type
|
|
||||||
crypto_engine_alloc_init
|
|
||||||
crypto_engine_exit
|
|
||||||
crypto_engine_start
|
|
||||||
crypto_finalize_ablkcipher_request
|
|
||||||
crypto_register_alg
|
|
||||||
crypto_transfer_ablkcipher_request_to_engine
|
|
||||||
crypto_unregister_alg
|
|
||||||
kzfree
|
|
||||||
__ll_sc_atomic_add_return
|
|
||||||
scatterwalk_map_and_copy
|
|
||||||
sg_nents
|
|
||||||
sg_nents_for_len
|
|
||||||
try_module_get
|
|
||||||
|
|
||||||
# required by virtio_input.ko
|
# required by virtio_input.ko
|
||||||
input_alloc_absinfo
|
input_alloc_absinfo
|
||||||
input_allocate_device
|
input_allocate_device
|
||||||
@@ -704,15 +870,14 @@
|
|||||||
# required by virtio_mmio.ko
|
# required by virtio_mmio.ko
|
||||||
device_for_each_child
|
device_for_each_child
|
||||||
devm_ioremap
|
devm_ioremap
|
||||||
devm_kfree
|
|
||||||
__devm_request_region
|
__devm_request_region
|
||||||
iomem_resource
|
iomem_resource
|
||||||
memparse
|
memparse
|
||||||
platform_device_register_full
|
platform_device_register_full
|
||||||
platform_get_irq
|
sscanf
|
||||||
platform_get_resource
|
|
||||||
|
|
||||||
# required by virtio_net.ko
|
# required by virtio_net.ko
|
||||||
|
arch_bpf_jit_check_func
|
||||||
bpf_prog_add
|
bpf_prog_add
|
||||||
bpf_prog_put
|
bpf_prog_put
|
||||||
bpf_prog_sub
|
bpf_prog_sub
|
||||||
@@ -722,13 +887,15 @@
|
|||||||
__cpuhp_setup_state
|
__cpuhp_setup_state
|
||||||
__cpuhp_state_add_instance
|
__cpuhp_state_add_instance
|
||||||
__cpuhp_state_remove_instance
|
__cpuhp_state_remove_instance
|
||||||
|
cpumask_next
|
||||||
cpumask_next_wrap
|
cpumask_next_wrap
|
||||||
|
cpus_read_lock
|
||||||
|
cpus_read_unlock
|
||||||
eth_commit_mac_addr_change
|
eth_commit_mac_addr_change
|
||||||
eth_prepare_mac_addr_change
|
eth_prepare_mac_addr_change
|
||||||
ethtool_op_get_ts_info
|
ethtool_op_get_ts_info
|
||||||
eth_type_trans
|
eth_type_trans
|
||||||
flow_keys_basic_dissector
|
flow_keys_basic_dissector
|
||||||
kmemdup
|
|
||||||
__napi_alloc_skb
|
__napi_alloc_skb
|
||||||
napi_complete_done
|
napi_complete_done
|
||||||
napi_consume_skb
|
napi_consume_skb
|
||||||
@@ -758,6 +925,11 @@
|
|||||||
skb_tstamp_tx
|
skb_tstamp_tx
|
||||||
__sw_hweight64
|
__sw_hweight64
|
||||||
__tracepoint_xdp_exception
|
__tracepoint_xdp_exception
|
||||||
|
virtqueue_add_inbuf_ctx
|
||||||
|
virtqueue_enable_cb_delayed
|
||||||
|
virtqueue_enable_cb_prepare
|
||||||
|
virtqueue_get_buf_ctx
|
||||||
|
virtqueue_poll
|
||||||
xdp_do_flush_map
|
xdp_do_flush_map
|
||||||
xdp_do_redirect
|
xdp_do_redirect
|
||||||
xdp_return_frame
|
xdp_return_frame
|
||||||
@@ -767,7 +939,6 @@
|
|||||||
xdp_rxq_info_unreg
|
xdp_rxq_info_unreg
|
||||||
|
|
||||||
# required by virtio_pci.ko
|
# required by virtio_pci.ko
|
||||||
get_device
|
|
||||||
irq_set_affinity_hint
|
irq_set_affinity_hint
|
||||||
pci_alloc_irq_vectors_affinity
|
pci_alloc_irq_vectors_affinity
|
||||||
pci_find_capability
|
pci_find_capability
|
||||||
@@ -778,36 +949,31 @@
|
|||||||
pci_irq_get_affinity
|
pci_irq_get_affinity
|
||||||
pci_irq_vector
|
pci_irq_vector
|
||||||
pci_read_config_byte
|
pci_read_config_byte
|
||||||
|
pci_release_region
|
||||||
pci_release_selected_regions
|
pci_release_selected_regions
|
||||||
pci_request_selected_regions
|
pci_request_selected_regions
|
||||||
|
virtio_device_freeze
|
||||||
|
virtio_device_restore
|
||||||
|
|
||||||
# required by virtio_pmem.ko
|
# required by virtio_pmem.ko
|
||||||
nvdimm_bus_register
|
nvdimm_bus_register
|
||||||
nvdimm_bus_unregister
|
nvdimm_bus_unregister
|
||||||
nvdimm_pmem_region_create
|
nvdimm_pmem_region_create
|
||||||
|
|
||||||
# required by virtio_ring.ko
|
|
||||||
alloc_pages_exact
|
|
||||||
free_pages_exact
|
|
||||||
kimage_voffset
|
|
||||||
|
|
||||||
# required by vmw_vsock_virtio_transport_common.ko
|
# required by vmw_vsock_virtio_transport_common.ko
|
||||||
bpf_trace_run10
|
bpf_trace_run10
|
||||||
bpf_trace_run8
|
|
||||||
cancel_delayed_work
|
|
||||||
_copy_from_iter_full
|
_copy_from_iter_full
|
||||||
_copy_to_iter
|
_copy_to_iter
|
||||||
trace_print_symbols_seq
|
|
||||||
|
|
||||||
# required by vsock.ko
|
# required by vsock.ko
|
||||||
autoremove_wake_function
|
autoremove_wake_function
|
||||||
__module_get
|
__module_get
|
||||||
|
module_put
|
||||||
nonseekable_open
|
nonseekable_open
|
||||||
prandom_u32
|
prandom_u32
|
||||||
prepare_to_wait
|
prepare_to_wait
|
||||||
proto_register
|
proto_register
|
||||||
proto_unregister
|
proto_unregister
|
||||||
__put_cred
|
|
||||||
_raw_write_lock_bh
|
_raw_write_lock_bh
|
||||||
_raw_write_unlock_bh
|
_raw_write_unlock_bh
|
||||||
security_sock_graft
|
security_sock_graft
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -36,7 +36,6 @@ CONFIG_BLK_DEV_CY82C693=y
|
|||||||
CONFIG_SCSI=y
|
CONFIG_SCSI=y
|
||||||
CONFIG_BLK_DEV_SD=y
|
CONFIG_BLK_DEV_SD=y
|
||||||
CONFIG_BLK_DEV_SR=y
|
CONFIG_BLK_DEV_SR=y
|
||||||
CONFIG_BLK_DEV_SR_VENDOR=y
|
|
||||||
CONFIG_SCSI_AIC7XXX=m
|
CONFIG_SCSI_AIC7XXX=m
|
||||||
CONFIG_AIC7XXX_CMDS_PER_DEVICE=253
|
CONFIG_AIC7XXX_CMDS_PER_DEVICE=253
|
||||||
# CONFIG_AIC7XXX_DEBUG_ENABLE is not set
|
# CONFIG_AIC7XXX_DEBUG_ENABLE is not set
|
||||||
|
|||||||
@@ -327,14 +327,18 @@ static inline int __is_mmio(const volatile void __iomem *addr)
|
|||||||
#if IO_CONCAT(__IO_PREFIX,trivial_io_bw)
|
#if IO_CONCAT(__IO_PREFIX,trivial_io_bw)
|
||||||
extern inline unsigned int ioread8(void __iomem *addr)
|
extern inline unsigned int ioread8(void __iomem *addr)
|
||||||
{
|
{
|
||||||
unsigned int ret = IO_CONCAT(__IO_PREFIX,ioread8)(addr);
|
unsigned int ret;
|
||||||
|
mb();
|
||||||
|
ret = IO_CONCAT(__IO_PREFIX,ioread8)(addr);
|
||||||
mb();
|
mb();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern inline unsigned int ioread16(void __iomem *addr)
|
extern inline unsigned int ioread16(void __iomem *addr)
|
||||||
{
|
{
|
||||||
unsigned int ret = IO_CONCAT(__IO_PREFIX,ioread16)(addr);
|
unsigned int ret;
|
||||||
|
mb();
|
||||||
|
ret = IO_CONCAT(__IO_PREFIX,ioread16)(addr);
|
||||||
mb();
|
mb();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -375,7 +379,9 @@ extern inline void outw(u16 b, unsigned long port)
|
|||||||
#if IO_CONCAT(__IO_PREFIX,trivial_io_lq)
|
#if IO_CONCAT(__IO_PREFIX,trivial_io_lq)
|
||||||
extern inline unsigned int ioread32(void __iomem *addr)
|
extern inline unsigned int ioread32(void __iomem *addr)
|
||||||
{
|
{
|
||||||
unsigned int ret = IO_CONCAT(__IO_PREFIX,ioread32)(addr);
|
unsigned int ret;
|
||||||
|
mb();
|
||||||
|
ret = IO_CONCAT(__IO_PREFIX,ioread32)(addr);
|
||||||
mb();
|
mb();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -420,14 +426,18 @@ extern inline void __raw_writew(u16 b, volatile void __iomem *addr)
|
|||||||
|
|
||||||
extern inline u8 readb(const volatile void __iomem *addr)
|
extern inline u8 readb(const volatile void __iomem *addr)
|
||||||
{
|
{
|
||||||
u8 ret = __raw_readb(addr);
|
u8 ret;
|
||||||
|
mb();
|
||||||
|
ret = __raw_readb(addr);
|
||||||
mb();
|
mb();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern inline u16 readw(const volatile void __iomem *addr)
|
extern inline u16 readw(const volatile void __iomem *addr)
|
||||||
{
|
{
|
||||||
u16 ret = __raw_readw(addr);
|
u16 ret;
|
||||||
|
mb();
|
||||||
|
ret = __raw_readw(addr);
|
||||||
mb();
|
mb();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -468,14 +478,18 @@ extern inline void __raw_writeq(u64 b, volatile void __iomem *addr)
|
|||||||
|
|
||||||
extern inline u32 readl(const volatile void __iomem *addr)
|
extern inline u32 readl(const volatile void __iomem *addr)
|
||||||
{
|
{
|
||||||
u32 ret = __raw_readl(addr);
|
u32 ret;
|
||||||
|
mb();
|
||||||
|
ret = __raw_readl(addr);
|
||||||
mb();
|
mb();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern inline u64 readq(const volatile void __iomem *addr)
|
extern inline u64 readq(const volatile void __iomem *addr)
|
||||||
{
|
{
|
||||||
u64 ret = __raw_readq(addr);
|
u64 ret;
|
||||||
|
mb();
|
||||||
|
ret = __raw_readq(addr);
|
||||||
mb();
|
mb();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -493,10 +507,10 @@ extern inline void writeq(u64 b, volatile void __iomem *addr)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define ioread16be(p) be16_to_cpu(ioread16(p))
|
#define ioread16be(p) swab16(ioread16(p))
|
||||||
#define ioread32be(p) be32_to_cpu(ioread32(p))
|
#define ioread32be(p) swab32(ioread32(p))
|
||||||
#define iowrite16be(v,p) iowrite16(cpu_to_be16(v), (p))
|
#define iowrite16be(v,p) iowrite16(swab16(v), (p))
|
||||||
#define iowrite32be(v,p) iowrite32(cpu_to_be32(v), (p))
|
#define iowrite32be(v,p) iowrite32(swab32(v), (p))
|
||||||
|
|
||||||
#define inb_p inb
|
#define inb_p inb
|
||||||
#define inw_p inw
|
#define inw_p inw
|
||||||
@@ -504,14 +518,44 @@ extern inline void writeq(u64 b, volatile void __iomem *addr)
|
|||||||
#define outb_p outb
|
#define outb_p outb
|
||||||
#define outw_p outw
|
#define outw_p outw
|
||||||
#define outl_p outl
|
#define outl_p outl
|
||||||
#define readb_relaxed(addr) __raw_readb(addr)
|
|
||||||
#define readw_relaxed(addr) __raw_readw(addr)
|
extern u8 readb_relaxed(const volatile void __iomem *addr);
|
||||||
#define readl_relaxed(addr) __raw_readl(addr)
|
extern u16 readw_relaxed(const volatile void __iomem *addr);
|
||||||
#define readq_relaxed(addr) __raw_readq(addr)
|
extern u32 readl_relaxed(const volatile void __iomem *addr);
|
||||||
#define writeb_relaxed(b, addr) __raw_writeb(b, addr)
|
extern u64 readq_relaxed(const volatile void __iomem *addr);
|
||||||
#define writew_relaxed(b, addr) __raw_writew(b, addr)
|
|
||||||
#define writel_relaxed(b, addr) __raw_writel(b, addr)
|
#if IO_CONCAT(__IO_PREFIX,trivial_io_bw)
|
||||||
#define writeq_relaxed(b, addr) __raw_writeq(b, addr)
|
extern inline u8 readb_relaxed(const volatile void __iomem *addr)
|
||||||
|
{
|
||||||
|
mb();
|
||||||
|
return __raw_readb(addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern inline u16 readw_relaxed(const volatile void __iomem *addr)
|
||||||
|
{
|
||||||
|
mb();
|
||||||
|
return __raw_readw(addr);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if IO_CONCAT(__IO_PREFIX,trivial_io_lq)
|
||||||
|
extern inline u32 readl_relaxed(const volatile void __iomem *addr)
|
||||||
|
{
|
||||||
|
mb();
|
||||||
|
return __raw_readl(addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern inline u64 readq_relaxed(const volatile void __iomem *addr)
|
||||||
|
{
|
||||||
|
mb();
|
||||||
|
return __raw_readq(addr);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define writeb_relaxed writeb
|
||||||
|
#define writew_relaxed writew
|
||||||
|
#define writel_relaxed writel
|
||||||
|
#define writeq_relaxed writeq
|
||||||
|
|
||||||
#define mmiowb()
|
#define mmiowb()
|
||||||
|
|
||||||
|
|||||||
@@ -30,11 +30,13 @@
|
|||||||
* Address valid if:
|
* Address valid if:
|
||||||
* - "addr" doesn't have any high-bits set
|
* - "addr" doesn't have any high-bits set
|
||||||
* - AND "size" doesn't have any high-bits set
|
* - AND "size" doesn't have any high-bits set
|
||||||
* - AND "addr+size" doesn't have any high-bits set
|
* - AND "addr+size-(size != 0)" doesn't have any high-bits set
|
||||||
* - OR we are in kernel mode.
|
* - OR we are in kernel mode.
|
||||||
*/
|
*/
|
||||||
#define __access_ok(addr, size) \
|
#define __access_ok(addr, size) ({ \
|
||||||
((get_fs().seg & (addr | size | (addr+size))) == 0)
|
unsigned long __ao_a = (addr), __ao_b = (size); \
|
||||||
|
unsigned long __ao_end = __ao_a + __ao_b - !!__ao_b; \
|
||||||
|
(get_fs().seg & (__ao_a | __ao_b | __ao_end)) == 0; })
|
||||||
|
|
||||||
#define access_ok(type, addr, size) \
|
#define access_ok(type, addr, size) \
|
||||||
({ \
|
({ \
|
||||||
|
|||||||
@@ -16,21 +16,27 @@
|
|||||||
unsigned int
|
unsigned int
|
||||||
ioread8(void __iomem *addr)
|
ioread8(void __iomem *addr)
|
||||||
{
|
{
|
||||||
unsigned int ret = IO_CONCAT(__IO_PREFIX,ioread8)(addr);
|
unsigned int ret;
|
||||||
|
mb();
|
||||||
|
ret = IO_CONCAT(__IO_PREFIX,ioread8)(addr);
|
||||||
mb();
|
mb();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int ioread16(void __iomem *addr)
|
unsigned int ioread16(void __iomem *addr)
|
||||||
{
|
{
|
||||||
unsigned int ret = IO_CONCAT(__IO_PREFIX,ioread16)(addr);
|
unsigned int ret;
|
||||||
|
mb();
|
||||||
|
ret = IO_CONCAT(__IO_PREFIX,ioread16)(addr);
|
||||||
mb();
|
mb();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int ioread32(void __iomem *addr)
|
unsigned int ioread32(void __iomem *addr)
|
||||||
{
|
{
|
||||||
unsigned int ret = IO_CONCAT(__IO_PREFIX,ioread32)(addr);
|
unsigned int ret;
|
||||||
|
mb();
|
||||||
|
ret = IO_CONCAT(__IO_PREFIX,ioread32)(addr);
|
||||||
mb();
|
mb();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -148,28 +154,36 @@ EXPORT_SYMBOL(__raw_writeq);
|
|||||||
|
|
||||||
u8 readb(const volatile void __iomem *addr)
|
u8 readb(const volatile void __iomem *addr)
|
||||||
{
|
{
|
||||||
u8 ret = __raw_readb(addr);
|
u8 ret;
|
||||||
|
mb();
|
||||||
|
ret = __raw_readb(addr);
|
||||||
mb();
|
mb();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
u16 readw(const volatile void __iomem *addr)
|
u16 readw(const volatile void __iomem *addr)
|
||||||
{
|
{
|
||||||
u16 ret = __raw_readw(addr);
|
u16 ret;
|
||||||
|
mb();
|
||||||
|
ret = __raw_readw(addr);
|
||||||
mb();
|
mb();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 readl(const volatile void __iomem *addr)
|
u32 readl(const volatile void __iomem *addr)
|
||||||
{
|
{
|
||||||
u32 ret = __raw_readl(addr);
|
u32 ret;
|
||||||
|
mb();
|
||||||
|
ret = __raw_readl(addr);
|
||||||
mb();
|
mb();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
u64 readq(const volatile void __iomem *addr)
|
u64 readq(const volatile void __iomem *addr)
|
||||||
{
|
{
|
||||||
u64 ret = __raw_readq(addr);
|
u64 ret;
|
||||||
|
mb();
|
||||||
|
ret = __raw_readq(addr);
|
||||||
mb();
|
mb();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -207,6 +221,38 @@ EXPORT_SYMBOL(writew);
|
|||||||
EXPORT_SYMBOL(writel);
|
EXPORT_SYMBOL(writel);
|
||||||
EXPORT_SYMBOL(writeq);
|
EXPORT_SYMBOL(writeq);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The _relaxed functions must be ordered w.r.t. each other, but they don't
|
||||||
|
* have to be ordered w.r.t. other memory accesses.
|
||||||
|
*/
|
||||||
|
u8 readb_relaxed(const volatile void __iomem *addr)
|
||||||
|
{
|
||||||
|
mb();
|
||||||
|
return __raw_readb(addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
u16 readw_relaxed(const volatile void __iomem *addr)
|
||||||
|
{
|
||||||
|
mb();
|
||||||
|
return __raw_readw(addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
u32 readl_relaxed(const volatile void __iomem *addr)
|
||||||
|
{
|
||||||
|
mb();
|
||||||
|
return __raw_readl(addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
u64 readq_relaxed(const volatile void __iomem *addr)
|
||||||
|
{
|
||||||
|
mb();
|
||||||
|
return __raw_readq(addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
EXPORT_SYMBOL(readb_relaxed);
|
||||||
|
EXPORT_SYMBOL(readw_relaxed);
|
||||||
|
EXPORT_SYMBOL(readl_relaxed);
|
||||||
|
EXPORT_SYMBOL(readq_relaxed);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Read COUNT 8-bit bytes from port PORT into memory starting at SRC.
|
* Read COUNT 8-bit bytes from port PORT into memory starting at SRC.
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
#define R_ARC_32_PCREL 0x31
|
#define R_ARC_32_PCREL 0x31
|
||||||
|
|
||||||
/*to set parameters in the core dumps */
|
/*to set parameters in the core dumps */
|
||||||
#define ELF_ARCH EM_ARCOMPACT
|
#define ELF_ARCH EM_ARC_INUSE
|
||||||
#define ELF_CLASS ELFCLASS32
|
#define ELF_CLASS ELFCLASS32
|
||||||
|
|
||||||
#ifdef CONFIG_CPU_BIG_ENDIAN
|
#ifdef CONFIG_CPU_BIG_ENDIAN
|
||||||
|
|||||||
@@ -156,7 +156,6 @@ END(EV_Extension)
|
|||||||
tracesys:
|
tracesys:
|
||||||
; save EFA in case tracer wants the PC of traced task
|
; save EFA in case tracer wants the PC of traced task
|
||||||
; using ERET won't work since next-PC has already committed
|
; using ERET won't work since next-PC has already committed
|
||||||
lr r12, [efa]
|
|
||||||
GET_CURR_TASK_FIELD_PTR TASK_THREAD, r11
|
GET_CURR_TASK_FIELD_PTR TASK_THREAD, r11
|
||||||
st r12, [r11, THREAD_FAULT_ADDR] ; thread.fault_address
|
st r12, [r11, THREAD_FAULT_ADDR] ; thread.fault_address
|
||||||
|
|
||||||
@@ -199,15 +198,9 @@ tracesys_exit:
|
|||||||
; Breakpoint TRAP
|
; Breakpoint TRAP
|
||||||
; ---------------------------------------------
|
; ---------------------------------------------
|
||||||
trap_with_param:
|
trap_with_param:
|
||||||
|
mov r0, r12 ; EFA in case ptracer/gdb wants stop_pc
|
||||||
; stop_pc info by gdb needs this info
|
|
||||||
lr r0, [efa]
|
|
||||||
mov r1, sp
|
mov r1, sp
|
||||||
|
|
||||||
; Now that we have read EFA, it is safe to do "fake" rtie
|
|
||||||
; and get out of CPU exception mode
|
|
||||||
FAKE_RET_FROM_EXCPN
|
|
||||||
|
|
||||||
; Save callee regs in case gdb wants to have a look
|
; Save callee regs in case gdb wants to have a look
|
||||||
; SP will grow up by size of CALLEE Reg-File
|
; SP will grow up by size of CALLEE Reg-File
|
||||||
; NOTE: clobbers r12
|
; NOTE: clobbers r12
|
||||||
@@ -234,6 +227,10 @@ ENTRY(EV_Trap)
|
|||||||
|
|
||||||
EXCEPTION_PROLOGUE
|
EXCEPTION_PROLOGUE
|
||||||
|
|
||||||
|
lr r12, [efa]
|
||||||
|
|
||||||
|
FAKE_RET_FROM_EXCPN
|
||||||
|
|
||||||
;============ TRAP 1 :breakpoints
|
;============ TRAP 1 :breakpoints
|
||||||
; Check ECR for trap with arg (PROLOGUE ensures r9 has ECR)
|
; Check ECR for trap with arg (PROLOGUE ensures r9 has ECR)
|
||||||
bmsk.f 0, r9, 7
|
bmsk.f 0, r9, 7
|
||||||
@@ -241,9 +238,6 @@ ENTRY(EV_Trap)
|
|||||||
|
|
||||||
;============ TRAP (no param): syscall top level
|
;============ TRAP (no param): syscall top level
|
||||||
|
|
||||||
; First return from Exception to pure K mode (Exception/IRQs renabled)
|
|
||||||
FAKE_RET_FROM_EXCPN
|
|
||||||
|
|
||||||
; If syscall tracing ongoing, invoke pre-post-hooks
|
; If syscall tracing ongoing, invoke pre-post-hooks
|
||||||
GET_CURR_THR_INFO_FLAGS r10
|
GET_CURR_THR_INFO_FLAGS r10
|
||||||
btst r10, TIF_SYSCALL_TRACE
|
btst r10, TIF_SYSCALL_TRACE
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
#include <linux/clocksource.h>
|
#include <linux/clocksource.h>
|
||||||
#include <linux/console.h>
|
#include <linux/console.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
|
#include <linux/sizes.h>
|
||||||
#include <linux/cpu.h>
|
#include <linux/cpu.h>
|
||||||
#include <linux/of_fdt.h>
|
#include <linux/of_fdt.h>
|
||||||
#include <linux/of.h>
|
#include <linux/of.h>
|
||||||
@@ -406,12 +407,12 @@ static void arc_chk_core_config(void)
|
|||||||
if ((unsigned int)__arc_dccm_base != cpu->dccm.base_addr)
|
if ((unsigned int)__arc_dccm_base != cpu->dccm.base_addr)
|
||||||
panic("Linux built with incorrect DCCM Base address\n");
|
panic("Linux built with incorrect DCCM Base address\n");
|
||||||
|
|
||||||
if (CONFIG_ARC_DCCM_SZ != cpu->dccm.sz)
|
if (CONFIG_ARC_DCCM_SZ * SZ_1K != cpu->dccm.sz)
|
||||||
panic("Linux built with incorrect DCCM Size\n");
|
panic("Linux built with incorrect DCCM Size\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_ARC_HAS_ICCM
|
#ifdef CONFIG_ARC_HAS_ICCM
|
||||||
if (CONFIG_ARC_ICCM_SZ != cpu->iccm.sz)
|
if (CONFIG_ARC_ICCM_SZ * SZ_1K != cpu->iccm.sz)
|
||||||
panic("Linux built with incorrect ICCM Size\n");
|
panic("Linux built with incorrect ICCM Size\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
menuconfig ARC_PLAT_EZNPS
|
menuconfig ARC_PLAT_EZNPS
|
||||||
bool "\"EZchip\" ARC dev platform"
|
bool "\"EZchip\" ARC dev platform"
|
||||||
|
depends on ISA_ARCOMPACT
|
||||||
select CPU_BIG_ENDIAN
|
select CPU_BIG_ENDIAN
|
||||||
select CLKSRC_NPS if !PHYS_ADDR_T_64BIT
|
select CLKSRC_NPS if !PHYS_ADDR_T_64BIT
|
||||||
select EZNPS_GIC
|
select EZNPS_GIC
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ SECTIONS
|
|||||||
}
|
}
|
||||||
.table : ALIGN(4) {
|
.table : ALIGN(4) {
|
||||||
_table_start = .;
|
_table_start = .;
|
||||||
LONG(ZIMAGE_MAGIC(2))
|
LONG(ZIMAGE_MAGIC(4))
|
||||||
LONG(ZIMAGE_MAGIC(0x5a534c4b))
|
LONG(ZIMAGE_MAGIC(0x5a534c4b))
|
||||||
LONG(ZIMAGE_MAGIC(__piggy_size_addr - _start))
|
LONG(ZIMAGE_MAGIC(__piggy_size_addr - _start))
|
||||||
LONG(ZIMAGE_MAGIC(_kernel_bss_size))
|
LONG(ZIMAGE_MAGIC(_kernel_bss_size))
|
||||||
|
|||||||
@@ -40,7 +40,7 @@
|
|||||||
|
|
||||||
ahb {
|
ahb {
|
||||||
usb0: gadget@300000 {
|
usb0: gadget@300000 {
|
||||||
atmel,vbus-gpio = <&pioA PIN_PA27 GPIO_ACTIVE_HIGH>;
|
atmel,vbus-gpio = <&pioA PIN_PB11 GPIO_ACTIVE_HIGH>;
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&pinctrl_usba_vbus>;
|
pinctrl-0 = <&pinctrl_usba_vbus>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
@@ -125,8 +125,6 @@
|
|||||||
bus-width = <8>;
|
bus-width = <8>;
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&pinctrl_sdmmc0_default>;
|
pinctrl-0 = <&pinctrl_sdmmc0_default>;
|
||||||
non-removable;
|
|
||||||
mmc-ddr-1_8v;
|
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -75,7 +75,7 @@
|
|||||||
timer@20200 {
|
timer@20200 {
|
||||||
compatible = "arm,cortex-a9-global-timer";
|
compatible = "arm,cortex-a9-global-timer";
|
||||||
reg = <0x20200 0x100>;
|
reg = <0x20200 0x100>;
|
||||||
interrupts = <GIC_PPI 11 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_PPI 11 IRQ_TYPE_EDGE_RISING>;
|
||||||
clocks = <&periph_clk>;
|
clocks = <&periph_clk>;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -83,7 +83,7 @@
|
|||||||
compatible = "arm,cortex-a9-twd-timer";
|
compatible = "arm,cortex-a9-twd-timer";
|
||||||
reg = <0x20600 0x20>;
|
reg = <0x20600 0x20>;
|
||||||
interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(1) |
|
interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(1) |
|
||||||
IRQ_TYPE_LEVEL_HIGH)>;
|
IRQ_TYPE_EDGE_RISING)>;
|
||||||
clocks = <&periph_clk>;
|
clocks = <&periph_clk>;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -91,7 +91,7 @@
|
|||||||
compatible = "arm,cortex-a9-twd-wdt";
|
compatible = "arm,cortex-a9-twd-wdt";
|
||||||
reg = <0x20620 0x20>;
|
reg = <0x20620 0x20>;
|
||||||
interrupts = <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(1) |
|
interrupts = <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(1) |
|
||||||
IRQ_TYPE_LEVEL_HIGH)>;
|
IRQ_TYPE_EDGE_RISING)>;
|
||||||
clocks = <&periph_clk>;
|
clocks = <&periph_clk>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -249,10 +249,10 @@
|
|||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
mailbox: mailbox@25000 {
|
mailbox: mailbox@25c00 {
|
||||||
compatible = "brcm,iproc-fa2-mbox";
|
compatible = "brcm,iproc-fa2-mbox";
|
||||||
reg = <0x25000 0x445>;
|
reg = <0x25c00 0x400>;
|
||||||
interrupts = <GIC_SPI 150 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 151 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
#mbox-cells = <1>;
|
#mbox-cells = <1>;
|
||||||
brcm,rx-status-len = <32>;
|
brcm,rx-status-len = <32>;
|
||||||
brcm,use-bcm-hdr;
|
brcm,use-bcm-hdr;
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
leds {
|
leds {
|
||||||
act {
|
act {
|
||||||
gpios = <&gpio 47 GPIO_ACTIVE_HIGH>;
|
gpios = <&gpio 47 GPIO_ACTIVE_LOW>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -118,6 +118,7 @@
|
|||||||
&sdhci {
|
&sdhci {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&emmc_gpio34 &gpclk2_gpio43>;
|
pinctrl-0 = <&emmc_gpio34 &gpclk2_gpio43>;
|
||||||
mmc-pwrseq = <&wifi_pwrseq>;
|
mmc-pwrseq = <&wifi_pwrseq>;
|
||||||
non-removable;
|
non-removable;
|
||||||
|
|||||||
@@ -476,6 +476,7 @@
|
|||||||
"dsi0_ddr2",
|
"dsi0_ddr2",
|
||||||
"dsi0_ddr";
|
"dsi0_ddr";
|
||||||
|
|
||||||
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
thermal: thermal@7e212000 {
|
thermal: thermal@7e212000 {
|
||||||
|
|||||||
@@ -150,6 +150,7 @@
|
|||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges = <0x0 0x0 0x0 0xc0000000>;
|
ranges = <0x0 0x0 0x0 0xc0000000>;
|
||||||
|
dma-ranges = <0x80000000 0x0 0x80000000 0x80000000>;
|
||||||
ti,hwmods = "l3_main_1", "l3_main_2";
|
ti,hwmods = "l3_main_1", "l3_main_2";
|
||||||
reg = <0x0 0x44000000 0x0 0x1000000>,
|
reg = <0x0 0x44000000 0x0 0x1000000>,
|
||||||
<0x0 0x45000000 0x0 0x1000>;
|
<0x0 0x45000000 0x0 0x1000>;
|
||||||
@@ -311,6 +312,7 @@
|
|||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
ranges = <0x51000000 0x51000000 0x3000
|
ranges = <0x51000000 0x51000000 0x3000
|
||||||
0x0 0x20000000 0x10000000>;
|
0x0 0x20000000 0x10000000>;
|
||||||
|
dma-ranges;
|
||||||
/**
|
/**
|
||||||
* To enable PCI endpoint mode, disable the pcie1_rc
|
* To enable PCI endpoint mode, disable the pcie1_rc
|
||||||
* node and enable pcie1_ep mode.
|
* node and enable pcie1_ep mode.
|
||||||
@@ -366,6 +368,7 @@
|
|||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
ranges = <0x51800000 0x51800000 0x3000
|
ranges = <0x51800000 0x51800000 0x3000
|
||||||
0x0 0x30000000 0x10000000>;
|
0x0 0x30000000 0x10000000>;
|
||||||
|
dma-ranges;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
pcie2_rc: pcie@51800000 {
|
pcie2_rc: pcie@51800000 {
|
||||||
reg = <0x51800000 0x2000>, <0x51802000 0x14c>, <0x1000 0x2000>;
|
reg = <0x51800000 0x2000>, <0x51802000 0x14c>, <0x1000 0x2000>;
|
||||||
|
|||||||
@@ -50,7 +50,7 @@
|
|||||||
|
|
||||||
i2c_cm36651: i2c-gpio-2 {
|
i2c_cm36651: i2c-gpio-2 {
|
||||||
compatible = "i2c-gpio";
|
compatible = "i2c-gpio";
|
||||||
gpios = <&gpf0 0 GPIO_ACTIVE_LOW>, <&gpf0 1 GPIO_ACTIVE_LOW>;
|
gpios = <&gpf0 0 GPIO_ACTIVE_HIGH>, <&gpf0 1 GPIO_ACTIVE_HIGH>;
|
||||||
i2c-gpio,delay-us = <2>;
|
i2c-gpio,delay-us = <2>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
|||||||
@@ -81,8 +81,8 @@
|
|||||||
imx27-phycard-s-rdk {
|
imx27-phycard-s-rdk {
|
||||||
pinctrl_i2c1: i2c1grp {
|
pinctrl_i2c1: i2c1grp {
|
||||||
fsl,pins = <
|
fsl,pins = <
|
||||||
MX27_PAD_I2C2_SDA__I2C2_SDA 0x0
|
MX27_PAD_I2C_DATA__I2C_DATA 0x0
|
||||||
MX27_PAD_I2C2_SCL__I2C2_SCL 0x0
|
MX27_PAD_I2C_CLK__I2C_CLK 0x0
|
||||||
>;
|
>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -65,13 +65,6 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
&clks {
|
|
||||||
assigned-clocks = <&clks IMX6QDL_CLK_LDB_DI0_SEL>,
|
|
||||||
<&clks IMX6QDL_CLK_LDB_DI1_SEL>;
|
|
||||||
assigned-clock-parents = <&clks IMX6QDL_CLK_PLL3_USB_OTG>,
|
|
||||||
<&clks IMX6QDL_CLK_PLL3_USB_OTG>;
|
|
||||||
};
|
|
||||||
|
|
||||||
&ldb {
|
&ldb {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
|
|||||||
@@ -65,13 +65,6 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
&clks {
|
|
||||||
assigned-clocks = <&clks IMX6QDL_CLK_LDB_DI0_SEL>,
|
|
||||||
<&clks IMX6QDL_CLK_LDB_DI1_SEL>;
|
|
||||||
assigned-clock-parents = <&clks IMX6QDL_CLK_PLL3_USB_OTG>,
|
|
||||||
<&clks IMX6QDL_CLK_PLL3_USB_OTG>;
|
|
||||||
};
|
|
||||||
|
|
||||||
&ldb {
|
&ldb {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
|
|||||||
@@ -53,17 +53,6 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
&clks {
|
|
||||||
assigned-clocks = <&clks IMX6QDL_CLK_LDB_DI0_SEL>,
|
|
||||||
<&clks IMX6QDL_CLK_LDB_DI1_SEL>,
|
|
||||||
<&clks IMX6QDL_CLK_IPU1_DI0_PRE_SEL>,
|
|
||||||
<&clks IMX6QDL_CLK_IPU2_DI0_PRE_SEL>;
|
|
||||||
assigned-clock-parents = <&clks IMX6QDL_CLK_PLL5_VIDEO_DIV>,
|
|
||||||
<&clks IMX6QDL_CLK_PLL5_VIDEO_DIV>,
|
|
||||||
<&clks IMX6QDL_CLK_PLL2_PFD2_396M>,
|
|
||||||
<&clks IMX6QDL_CLK_PLL2_PFD2_396M>;
|
|
||||||
};
|
|
||||||
|
|
||||||
&ldb {
|
&ldb {
|
||||||
fsl,dual-channel;
|
fsl,dual-channel;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|||||||
@@ -391,3 +391,18 @@
|
|||||||
#interrupt-cells = <1>;
|
#interrupt-cells = <1>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&clks {
|
||||||
|
assigned-clocks = <&clks IMX6QDL_CLK_LDB_DI0_SEL>,
|
||||||
|
<&clks IMX6QDL_CLK_LDB_DI1_SEL>,
|
||||||
|
<&clks IMX6QDL_CLK_IPU1_DI0_PRE_SEL>,
|
||||||
|
<&clks IMX6QDL_CLK_IPU1_DI1_PRE_SEL>,
|
||||||
|
<&clks IMX6QDL_CLK_IPU2_DI0_PRE_SEL>,
|
||||||
|
<&clks IMX6QDL_CLK_IPU2_DI1_PRE_SEL>;
|
||||||
|
assigned-clock-parents = <&clks IMX6QDL_CLK_PLL5_VIDEO_DIV>,
|
||||||
|
<&clks IMX6QDL_CLK_PLL5_VIDEO_DIV>,
|
||||||
|
<&clks IMX6QDL_CLK_PLL2_PFD0_352M>,
|
||||||
|
<&clks IMX6QDL_CLK_PLL2_PFD0_352M>,
|
||||||
|
<&clks IMX6QDL_CLK_PLL2_PFD0_352M>,
|
||||||
|
<&clks IMX6QDL_CLK_PLL2_PFD0_352M>;
|
||||||
|
};
|
||||||
|
|||||||
@@ -107,14 +107,14 @@
|
|||||||
regulators {
|
regulators {
|
||||||
vdd_arm: buck1 {
|
vdd_arm: buck1 {
|
||||||
regulator-name = "vdd_arm";
|
regulator-name = "vdd_arm";
|
||||||
regulator-min-microvolt = <730000>;
|
regulator-min-microvolt = <925000>;
|
||||||
regulator-max-microvolt = <1380000>;
|
regulator-max-microvolt = <1380000>;
|
||||||
regulator-always-on;
|
regulator-always-on;
|
||||||
};
|
};
|
||||||
|
|
||||||
vdd_soc: buck2 {
|
vdd_soc: buck2 {
|
||||||
regulator-name = "vdd_soc";
|
regulator-name = "vdd_soc";
|
||||||
regulator-min-microvolt = <730000>;
|
regulator-min-microvolt = <1150000>;
|
||||||
regulator-max-microvolt = <1380000>;
|
regulator-max-microvolt = <1380000>;
|
||||||
regulator-always-on;
|
regulator-always-on;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1013,9 +1013,8 @@
|
|||||||
compatible = "fsl,imx6q-fec";
|
compatible = "fsl,imx6q-fec";
|
||||||
reg = <0x02188000 0x4000>;
|
reg = <0x02188000 0x4000>;
|
||||||
interrupt-names = "int0", "pps";
|
interrupt-names = "int0", "pps";
|
||||||
interrupts-extended =
|
interrupts = <0 118 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
<&intc 0 118 IRQ_TYPE_LEVEL_HIGH>,
|
<0 119 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
<&intc 0 119 IRQ_TYPE_LEVEL_HIGH>;
|
|
||||||
clocks = <&clks IMX6QDL_CLK_ENET>,
|
clocks = <&clks IMX6QDL_CLK_ENET>,
|
||||||
<&clks IMX6QDL_CLK_ENET>,
|
<&clks IMX6QDL_CLK_ENET>,
|
||||||
<&clks IMX6QDL_CLK_ENET_REF>;
|
<&clks IMX6QDL_CLK_ENET_REF>;
|
||||||
|
|||||||
@@ -77,7 +77,6 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
&fec {
|
&fec {
|
||||||
/delete-property/interrupts-extended;
|
|
||||||
interrupts = <0 118 IRQ_TYPE_LEVEL_HIGH>,
|
interrupts = <0 118 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
<0 119 IRQ_TYPE_LEVEL_HIGH>;
|
<0 119 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -609,7 +609,7 @@
|
|||||||
fsl,tmr-prsc = <2>;
|
fsl,tmr-prsc = <2>;
|
||||||
fsl,tmr-add = <0xaaaaaaab>;
|
fsl,tmr-add = <0xaaaaaaab>;
|
||||||
fsl,tmr-fiper1 = <999999995>;
|
fsl,tmr-fiper1 = <999999995>;
|
||||||
fsl,tmr-fiper2 = <99990>;
|
fsl,tmr-fiper2 = <999999995>;
|
||||||
fsl,max-adj = <499999999>;
|
fsl,max-adj = <499999999>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -16,8 +16,10 @@
|
|||||||
#interrupt-cells = <2>;
|
#interrupt-cells = <2>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
spi-max-frequency = <3000000>;
|
spi-max-frequency = <9600000>;
|
||||||
spi-cs-high;
|
spi-cs-high;
|
||||||
|
spi-cpol;
|
||||||
|
spi-cpha;
|
||||||
|
|
||||||
cpcap_adc: adc {
|
cpcap_adc: adc {
|
||||||
compatible = "motorola,mapphone-cpcap-adc";
|
compatible = "motorola,mapphone-cpcap-adc";
|
||||||
|
|||||||
@@ -852,34 +852,46 @@
|
|||||||
compatible = "ti,omap2-onenand";
|
compatible = "ti,omap2-onenand";
|
||||||
reg = <0 0 0x20000>; /* CS0, offset 0, IO size 128K */
|
reg = <0 0 0x20000>; /* CS0, offset 0, IO size 128K */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* These timings are based on CONFIG_OMAP_GPMC_DEBUG=y reported
|
||||||
|
* bootloader set values when booted with v5.1
|
||||||
|
* (OneNAND Manufacturer: Samsung):
|
||||||
|
*
|
||||||
|
* cs0 GPMC_CS_CONFIG1: 0xfb001202
|
||||||
|
* cs0 GPMC_CS_CONFIG2: 0x00111100
|
||||||
|
* cs0 GPMC_CS_CONFIG3: 0x00020200
|
||||||
|
* cs0 GPMC_CS_CONFIG4: 0x11001102
|
||||||
|
* cs0 GPMC_CS_CONFIG5: 0x03101616
|
||||||
|
* cs0 GPMC_CS_CONFIG6: 0x90060000
|
||||||
|
*/
|
||||||
gpmc,sync-read;
|
gpmc,sync-read;
|
||||||
gpmc,sync-write;
|
gpmc,sync-write;
|
||||||
gpmc,burst-length = <16>;
|
gpmc,burst-length = <16>;
|
||||||
gpmc,burst-read;
|
gpmc,burst-read;
|
||||||
gpmc,burst-wrap;
|
gpmc,burst-wrap;
|
||||||
gpmc,burst-write;
|
gpmc,burst-write;
|
||||||
gpmc,device-width = <2>; /* GPMC_DEVWIDTH_16BIT */
|
gpmc,device-width = <2>;
|
||||||
gpmc,mux-add-data = <2>; /* GPMC_MUX_AD */
|
gpmc,mux-add-data = <2>;
|
||||||
gpmc,cs-on-ns = <0>;
|
gpmc,cs-on-ns = <0>;
|
||||||
gpmc,cs-rd-off-ns = <87>;
|
gpmc,cs-rd-off-ns = <102>;
|
||||||
gpmc,cs-wr-off-ns = <87>;
|
gpmc,cs-wr-off-ns = <102>;
|
||||||
gpmc,adv-on-ns = <0>;
|
gpmc,adv-on-ns = <0>;
|
||||||
gpmc,adv-rd-off-ns = <10>;
|
gpmc,adv-rd-off-ns = <12>;
|
||||||
gpmc,adv-wr-off-ns = <10>;
|
gpmc,adv-wr-off-ns = <12>;
|
||||||
gpmc,oe-on-ns = <15>;
|
gpmc,oe-on-ns = <12>;
|
||||||
gpmc,oe-off-ns = <87>;
|
gpmc,oe-off-ns = <102>;
|
||||||
gpmc,we-on-ns = <0>;
|
gpmc,we-on-ns = <0>;
|
||||||
gpmc,we-off-ns = <87>;
|
gpmc,we-off-ns = <102>;
|
||||||
gpmc,rd-cycle-ns = <112>;
|
gpmc,rd-cycle-ns = <132>;
|
||||||
gpmc,wr-cycle-ns = <112>;
|
gpmc,wr-cycle-ns = <132>;
|
||||||
gpmc,access-ns = <81>;
|
gpmc,access-ns = <96>;
|
||||||
gpmc,page-burst-access-ns = <15>;
|
gpmc,page-burst-access-ns = <18>;
|
||||||
gpmc,bus-turnaround-ns = <0>;
|
gpmc,bus-turnaround-ns = <0>;
|
||||||
gpmc,cycle2cycle-delay-ns = <0>;
|
gpmc,cycle2cycle-delay-ns = <0>;
|
||||||
gpmc,wait-monitoring-ns = <0>;
|
gpmc,wait-monitoring-ns = <0>;
|
||||||
gpmc,clk-activation-ns = <5>;
|
gpmc,clk-activation-ns = <6>;
|
||||||
gpmc,wr-data-mux-bus-ns = <30>;
|
gpmc,wr-data-mux-bus-ns = <36>;
|
||||||
gpmc,wr-access-ns = <81>;
|
gpmc,wr-access-ns = <96>;
|
||||||
gpmc,sync-clk-ps = <15000>;
|
gpmc,sync-clk-ps = <15000>;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -142,7 +142,7 @@
|
|||||||
ethernet@gpmc {
|
ethernet@gpmc {
|
||||||
reg = <5 0 0xff>;
|
reg = <5 0 0xff>;
|
||||||
interrupt-parent = <&gpio2>;
|
interrupt-parent = <&gpio2>;
|
||||||
interrupts = <12 IRQ_TYPE_EDGE_FALLING>; /* gpio_44 */
|
interrupts = <12 IRQ_TYPE_LEVEL_LOW>; /* gpio_44 */
|
||||||
|
|
||||||
phy-mode = "mii";
|
phy-mode = "mii";
|
||||||
|
|
||||||
|
|||||||
@@ -144,6 +144,7 @@
|
|||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges = <0 0 0 0xc0000000>;
|
ranges = <0 0 0 0xc0000000>;
|
||||||
|
dma-ranges = <0x80000000 0x0 0x80000000 0x80000000>;
|
||||||
ti,hwmods = "l3_main_1", "l3_main_2", "l3_main_3";
|
ti,hwmods = "l3_main_1", "l3_main_2", "l3_main_3";
|
||||||
reg = <0 0x44000000 0 0x2000>,
|
reg = <0 0x44000000 0 0x2000>,
|
||||||
<0 0x44800000 0 0x3000>,
|
<0 0x44800000 0 0x3000>,
|
||||||
|
|||||||
@@ -322,8 +322,8 @@
|
|||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
reg = <0 0x200>;
|
reg = <0 0x200>;
|
||||||
#interrupt-cells = <1>;
|
#interrupt-cells = <1>;
|
||||||
valid-mask = <0xFFFFFFFF>;
|
valid-mask = <0xffffffff>;
|
||||||
clear-mask = <0>;
|
clear-mask = <0xffffffff>;
|
||||||
};
|
};
|
||||||
|
|
||||||
timer0: timer@200 {
|
timer0: timer@200 {
|
||||||
|
|||||||
@@ -239,8 +239,8 @@
|
|||||||
reg = <0 0x200>;
|
reg = <0 0x200>;
|
||||||
interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
#interrupt-cells = <1>;
|
#interrupt-cells = <1>;
|
||||||
valid-mask = <0xFFFFFFFF>;
|
valid-mask = <0xffffffff>;
|
||||||
clear-mask = <0>;
|
clear-mask = <0xffffffff>;
|
||||||
};
|
};
|
||||||
|
|
||||||
timer0: timer@200 {
|
timer0: timer@200 {
|
||||||
|
|||||||
@@ -131,7 +131,14 @@
|
|||||||
cmt1: timer@e6130000 {
|
cmt1: timer@e6130000 {
|
||||||
compatible = "renesas,r8a73a4-cmt1", "renesas,rcar-gen2-cmt1";
|
compatible = "renesas,r8a73a4-cmt1", "renesas,rcar-gen2-cmt1";
|
||||||
reg = <0 0xe6130000 0 0x1004>;
|
reg = <0 0xe6130000 0 0x1004>;
|
||||||
interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<GIC_SPI 124 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<GIC_SPI 125 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<GIC_SPI 126 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<GIC_SPI 127 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&mstp3_clks R8A73A4_CLK_CMT1>;
|
clocks = <&mstp3_clks R8A73A4_CLK_CMT1>;
|
||||||
clock-names = "fck";
|
clock-names = "fck";
|
||||||
power-domains = <&pd_c5>;
|
power-domains = <&pd_c5>;
|
||||||
|
|||||||
@@ -479,7 +479,7 @@
|
|||||||
cpg_clocks: cpg_clocks@e6150000 {
|
cpg_clocks: cpg_clocks@e6150000 {
|
||||||
compatible = "renesas,r8a7740-cpg-clocks";
|
compatible = "renesas,r8a7740-cpg-clocks";
|
||||||
reg = <0xe6150000 0x10000>;
|
reg = <0xe6150000 0x10000>;
|
||||||
clocks = <&extal1_clk>, <&extalr_clk>;
|
clocks = <&extal1_clk>, <&extal2_clk>, <&extalr_clk>;
|
||||||
#clock-cells = <1>;
|
#clock-cells = <1>;
|
||||||
clock-output-names = "system", "pllc0", "pllc1",
|
clock-output-names = "system", "pllc0", "pllc1",
|
||||||
"pllc2", "r",
|
"pllc2", "r",
|
||||||
|
|||||||
@@ -339,7 +339,7 @@
|
|||||||
reg = <0x20>;
|
reg = <0x20>;
|
||||||
remote = <&vin1>;
|
remote = <&vin1>;
|
||||||
|
|
||||||
port {
|
ports {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
|
||||||
@@ -399,7 +399,7 @@
|
|||||||
interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
|
interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
|
||||||
default-input = <0>;
|
default-input = <0>;
|
||||||
|
|
||||||
port {
|
ports {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
|||||||
@@ -167,7 +167,7 @@
|
|||||||
assigned-clock-parents = <&cru PLL_DPLL>;
|
assigned-clock-parents = <&cru PLL_DPLL>;
|
||||||
operating-points-v2 = <&gpu_opp_table>;
|
operating-points-v2 = <&gpu_opp_table>;
|
||||||
clocks = <&cru SCLK_GPU>, <&cru SCLK_GPU>;
|
clocks = <&cru SCLK_GPU>, <&cru SCLK_GPU>;
|
||||||
clock-names = "core", "bus";
|
clock-names = "bus", "core";
|
||||||
resets = <&cru SRST_GPU>;
|
resets = <&cru SRST_GPU>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -47,7 +47,7 @@
|
|||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
|
||||||
phy: phy@0 {
|
phy: ethernet-phy@0 {
|
||||||
compatible = "ethernet-phy-id1234.d400", "ethernet-phy-ieee802.3-c22";
|
compatible = "ethernet-phy-id1234.d400", "ethernet-phy-ieee802.3-c22";
|
||||||
reg = <0>;
|
reg = <0>;
|
||||||
clocks = <&cru SCLK_MAC_PHY>;
|
clocks = <&cru SCLK_MAC_PHY>;
|
||||||
|
|||||||
@@ -1524,7 +1524,7 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
spi-0 {
|
spi0 {
|
||||||
spi0_clk: spi0-clk {
|
spi0_clk: spi0-clk {
|
||||||
rockchip,pins = <0 9 RK_FUNC_2 &pcfg_pull_up>;
|
rockchip,pins = <0 9 RK_FUNC_2 &pcfg_pull_up>;
|
||||||
};
|
};
|
||||||
@@ -1542,7 +1542,7 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
spi-1 {
|
spi1 {
|
||||||
spi1_clk: spi1-clk {
|
spi1_clk: spi1-clk {
|
||||||
rockchip,pins = <0 23 RK_FUNC_2 &pcfg_pull_up>;
|
rockchip,pins = <0 23 RK_FUNC_2 &pcfg_pull_up>;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -86,7 +86,7 @@
|
|||||||
compatible = "arm,mali-400";
|
compatible = "arm,mali-400";
|
||||||
reg = <0x10090000 0x10000>;
|
reg = <0x10090000 0x10000>;
|
||||||
clocks = <&cru ACLK_GPU>, <&cru ACLK_GPU>;
|
clocks = <&cru ACLK_GPU>, <&cru ACLK_GPU>;
|
||||||
clock-names = "core", "bus";
|
clock-names = "bus", "core";
|
||||||
assigned-clocks = <&cru ACLK_GPU>;
|
assigned-clocks = <&cru ACLK_GPU>;
|
||||||
assigned-clock-rates = <100000000>;
|
assigned-clock-rates = <100000000>;
|
||||||
resets = <&cru SRST_GPU>;
|
resets = <&cru SRST_GPU>;
|
||||||
|
|||||||
@@ -374,6 +374,7 @@
|
|||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
cap-sd-highspeed;
|
cap-sd-highspeed;
|
||||||
cap-mmc-highspeed;
|
cap-mmc-highspeed;
|
||||||
|
keep-power-in-suspend;
|
||||||
|
|
||||||
mmc-pwrseq = <&wifi_pwrseq>;
|
mmc-pwrseq = <&wifi_pwrseq>;
|
||||||
non-removable;
|
non-removable;
|
||||||
|
|||||||
@@ -710,7 +710,7 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
L2: l2-cache@fffef000 {
|
L2: cache-controller@fffef000 {
|
||||||
compatible = "arm,pl310-cache";
|
compatible = "arm,pl310-cache";
|
||||||
reg = <0xfffef000 0x1000>;
|
reg = <0xfffef000 0x1000>;
|
||||||
interrupts = <0 38 0x04>;
|
interrupts = <0 38 0x04>;
|
||||||
|
|||||||
@@ -618,7 +618,7 @@
|
|||||||
reg = <0xffcfb100 0x80>;
|
reg = <0xffcfb100 0x80>;
|
||||||
};
|
};
|
||||||
|
|
||||||
L2: l2-cache@fffff000 {
|
L2: cache-controller@fffff000 {
|
||||||
compatible = "arm,pl310-cache";
|
compatible = "arm,pl310-cache";
|
||||||
reg = <0xfffff000 0x1000>;
|
reg = <0xfffff000 0x1000>;
|
||||||
interrupts = <0 18 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <0 18 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
|||||||
@@ -318,8 +318,8 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
®_dldo3 {
|
®_dldo3 {
|
||||||
regulator-min-microvolt = <2800000>;
|
regulator-min-microvolt = <1800000>;
|
||||||
regulator-max-microvolt = <2800000>;
|
regulator-max-microvolt = <1800000>;
|
||||||
regulator-name = "vdd-csi";
|
regulator-name = "vdd-csi";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
|
|
||||||
pwr_led {
|
pwr_led {
|
||||||
label = "bananapi-m2-zero:red:pwr";
|
label = "bananapi-m2-zero:red:pwr";
|
||||||
gpios = <&r_pio 0 10 GPIO_ACTIVE_HIGH>; /* PL10 */
|
gpios = <&r_pio 0 10 GPIO_ACTIVE_LOW>; /* PL10 */
|
||||||
default-state = "on";
|
default-state = "on";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ CONFIG_BLK_DEV_RAM=y
|
|||||||
CONFIG_BLK_DEV_SD=y
|
CONFIG_BLK_DEV_SD=y
|
||||||
CONFIG_CHR_DEV_ST=m
|
CONFIG_CHR_DEV_ST=m
|
||||||
CONFIG_BLK_DEV_SR=y
|
CONFIG_BLK_DEV_SR=y
|
||||||
CONFIG_BLK_DEV_SR_VENDOR=y
|
|
||||||
CONFIG_CHR_DEV_SG=y
|
CONFIG_CHR_DEV_SG=y
|
||||||
CONFIG_SCSI_CONSTANTS=y
|
CONFIG_SCSI_CONSTANTS=y
|
||||||
CONFIG_SCSI_LOGGING=y
|
CONFIG_SCSI_LOGGING=y
|
||||||
|
|||||||
@@ -206,7 +206,6 @@ CONFIG_EEPROM_AT24=y
|
|||||||
CONFIG_BLK_DEV_SD=y
|
CONFIG_BLK_DEV_SD=y
|
||||||
CONFIG_CHR_DEV_ST=m
|
CONFIG_CHR_DEV_ST=m
|
||||||
CONFIG_BLK_DEV_SR=y
|
CONFIG_BLK_DEV_SR=y
|
||||||
CONFIG_BLK_DEV_SR_VENDOR=y
|
|
||||||
CONFIG_CHR_DEV_SG=y
|
CONFIG_CHR_DEV_SG=y
|
||||||
CONFIG_CHR_DEV_SCH=m
|
CONFIG_CHR_DEV_SCH=m
|
||||||
CONFIG_SCSI_CONSTANTS=y
|
CONFIG_SCSI_CONSTANTS=y
|
||||||
|
|||||||
@@ -21,11 +21,11 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <asm/ptrace.h>
|
#include <asm/ptrace.h>
|
||||||
#include <asm/domain.h>
|
|
||||||
#include <asm/opcodes-virt.h>
|
#include <asm/opcodes-virt.h>
|
||||||
#include <asm/asm-offsets.h>
|
#include <asm/asm-offsets.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
#include <asm/thread_info.h>
|
#include <asm/thread_info.h>
|
||||||
|
#include <asm/uaccess-asm.h>
|
||||||
|
|
||||||
#define IOMEM(x) (x)
|
#define IOMEM(x) (x)
|
||||||
|
|
||||||
@@ -374,9 +374,9 @@ THUMB( orr \reg , \reg , #PSR_T_BIT )
|
|||||||
.macro usraccoff, instr, reg, ptr, inc, off, cond, abort, t=TUSER()
|
.macro usraccoff, instr, reg, ptr, inc, off, cond, abort, t=TUSER()
|
||||||
9999:
|
9999:
|
||||||
.if \inc == 1
|
.if \inc == 1
|
||||||
\instr\cond\()b\()\t\().w \reg, [\ptr, #\off]
|
\instr\()b\t\cond\().w \reg, [\ptr, #\off]
|
||||||
.elseif \inc == 4
|
.elseif \inc == 4
|
||||||
\instr\cond\()\t\().w \reg, [\ptr, #\off]
|
\instr\t\cond\().w \reg, [\ptr, #\off]
|
||||||
.else
|
.else
|
||||||
.error "Unsupported inc macro argument"
|
.error "Unsupported inc macro argument"
|
||||||
.endif
|
.endif
|
||||||
@@ -415,9 +415,9 @@ THUMB( orr \reg , \reg , #PSR_T_BIT )
|
|||||||
.rept \rept
|
.rept \rept
|
||||||
9999:
|
9999:
|
||||||
.if \inc == 1
|
.if \inc == 1
|
||||||
\instr\cond\()b\()\t \reg, [\ptr], #\inc
|
\instr\()b\t\cond \reg, [\ptr], #\inc
|
||||||
.elseif \inc == 4
|
.elseif \inc == 4
|
||||||
\instr\cond\()\t \reg, [\ptr], #\inc
|
\instr\t\cond \reg, [\ptr], #\inc
|
||||||
.else
|
.else
|
||||||
.error "Unsupported inc macro argument"
|
.error "Unsupported inc macro argument"
|
||||||
.endif
|
.endif
|
||||||
@@ -447,79 +447,6 @@ THUMB( orr \reg , \reg , #PSR_T_BIT )
|
|||||||
.size \name , . - \name
|
.size \name , . - \name
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro csdb
|
|
||||||
#ifdef CONFIG_THUMB2_KERNEL
|
|
||||||
.inst.w 0xf3af8014
|
|
||||||
#else
|
|
||||||
.inst 0xe320f014
|
|
||||||
#endif
|
|
||||||
.endm
|
|
||||||
|
|
||||||
.macro check_uaccess, addr:req, size:req, limit:req, tmp:req, bad:req
|
|
||||||
#ifndef CONFIG_CPU_USE_DOMAINS
|
|
||||||
adds \tmp, \addr, #\size - 1
|
|
||||||
sbcccs \tmp, \tmp, \limit
|
|
||||||
bcs \bad
|
|
||||||
#ifdef CONFIG_CPU_SPECTRE
|
|
||||||
movcs \addr, #0
|
|
||||||
csdb
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
.endm
|
|
||||||
|
|
||||||
.macro uaccess_mask_range_ptr, addr:req, size:req, limit:req, tmp:req
|
|
||||||
#ifdef CONFIG_CPU_SPECTRE
|
|
||||||
sub \tmp, \limit, #1
|
|
||||||
subs \tmp, \tmp, \addr @ tmp = limit - 1 - addr
|
|
||||||
addhs \tmp, \tmp, #1 @ if (tmp >= 0) {
|
|
||||||
subhss \tmp, \tmp, \size @ tmp = limit - (addr + size) }
|
|
||||||
movlo \addr, #0 @ if (tmp < 0) addr = NULL
|
|
||||||
csdb
|
|
||||||
#endif
|
|
||||||
.endm
|
|
||||||
|
|
||||||
.macro uaccess_disable, tmp, isb=1
|
|
||||||
#ifdef CONFIG_CPU_SW_DOMAIN_PAN
|
|
||||||
/*
|
|
||||||
* Whenever we re-enter userspace, the domains should always be
|
|
||||||
* set appropriately.
|
|
||||||
*/
|
|
||||||
mov \tmp, #DACR_UACCESS_DISABLE
|
|
||||||
mcr p15, 0, \tmp, c3, c0, 0 @ Set domain register
|
|
||||||
.if \isb
|
|
||||||
instr_sync
|
|
||||||
.endif
|
|
||||||
#endif
|
|
||||||
.endm
|
|
||||||
|
|
||||||
.macro uaccess_enable, tmp, isb=1
|
|
||||||
#ifdef CONFIG_CPU_SW_DOMAIN_PAN
|
|
||||||
/*
|
|
||||||
* Whenever we re-enter userspace, the domains should always be
|
|
||||||
* set appropriately.
|
|
||||||
*/
|
|
||||||
mov \tmp, #DACR_UACCESS_ENABLE
|
|
||||||
mcr p15, 0, \tmp, c3, c0, 0
|
|
||||||
.if \isb
|
|
||||||
instr_sync
|
|
||||||
.endif
|
|
||||||
#endif
|
|
||||||
.endm
|
|
||||||
|
|
||||||
.macro uaccess_save, tmp
|
|
||||||
#ifdef CONFIG_CPU_SW_DOMAIN_PAN
|
|
||||||
mrc p15, 0, \tmp, c3, c0, 0
|
|
||||||
str \tmp, [sp, #SVC_DACR]
|
|
||||||
#endif
|
|
||||||
.endm
|
|
||||||
|
|
||||||
.macro uaccess_restore
|
|
||||||
#ifdef CONFIG_CPU_SW_DOMAIN_PAN
|
|
||||||
ldr r0, [sp, #SVC_DACR]
|
|
||||||
mcr p15, 0, r0, c3, c0, 0
|
|
||||||
#endif
|
|
||||||
.endm
|
|
||||||
|
|
||||||
.irp c,,eq,ne,cs,cc,mi,pl,vs,vc,hi,ls,ge,lt,gt,le,hs,lo
|
.irp c,,eq,ne,cs,cc,mi,pl,vs,vc,hi,ls,ge,lt,gt,le,hs,lo
|
||||||
.macro ret\c, reg
|
.macro ret\c, reg
|
||||||
#if __LINUX_ARM_ARCH__ < 6
|
#if __LINUX_ARM_ARCH__ < 6
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||||||
#ifndef _ASM_CLOCKSOURCE_H
|
#ifndef _ASM_CLOCKSOURCE_H
|
||||||
#define _ASM_CLOCKSOURCE_H
|
#define _ASM_CLOCKSOURCE_H
|
||||||
|
|
||||||
struct arch_clocksource_data {
|
#include <asm/vdso/clocksource.h>
|
||||||
bool vdso_direct; /* Usable for direct VDSO access? */
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
#endif /* _ASM_CLOCKSOURCE_H */
|
||||||
|
|||||||
@@ -50,25 +50,7 @@
|
|||||||
|
|
||||||
#ifdef CONFIG_CPU_CP15
|
#ifdef CONFIG_CPU_CP15
|
||||||
|
|
||||||
#define __ACCESS_CP15(CRn, Op1, CRm, Op2) \
|
#include <asm/vdso/cp15.h>
|
||||||
"mrc", "mcr", __stringify(p15, Op1, %0, CRn, CRm, Op2), u32
|
|
||||||
#define __ACCESS_CP15_64(Op1, CRm) \
|
|
||||||
"mrrc", "mcrr", __stringify(p15, Op1, %Q0, %R0, CRm), u64
|
|
||||||
|
|
||||||
#define __read_sysreg(r, w, c, t) ({ \
|
|
||||||
t __val; \
|
|
||||||
asm volatile(r " " c : "=r" (__val)); \
|
|
||||||
__val; \
|
|
||||||
})
|
|
||||||
#define read_sysreg(...) __read_sysreg(__VA_ARGS__)
|
|
||||||
|
|
||||||
#define __write_sysreg(v, r, w, c, t) asm volatile(w " " c : : "r" ((t)(v)))
|
|
||||||
#define write_sysreg(v, ...) __write_sysreg(v, __VA_ARGS__)
|
|
||||||
|
|
||||||
#define BPIALL __ACCESS_CP15(c7, 0, c5, 6)
|
|
||||||
#define ICIALLU __ACCESS_CP15(c7, 0, c5, 0)
|
|
||||||
|
|
||||||
#define CNTVCT __ACCESS_CP15_64(1, c14)
|
|
||||||
|
|
||||||
extern unsigned long cr_alignment; /* defined in entry-armv.S */
|
extern unsigned long cr_alignment; /* defined in entry-armv.S */
|
||||||
|
|
||||||
|
|||||||
@@ -163,7 +163,12 @@ arch_futex_atomic_op_inuser(int op, int oparg, int *oval, u32 __user *uaddr)
|
|||||||
preempt_enable();
|
preempt_enable();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!ret)
|
/*
|
||||||
|
* Store unconditionally. If ret != 0 the extra store is the least
|
||||||
|
* of the worries but GCC cannot figure out that __futex_atomic_op()
|
||||||
|
* is either setting ret to -EFAULT or storing the old value in
|
||||||
|
* oldval which results in a uninitialized warning at the call site.
|
||||||
|
*/
|
||||||
*oval = oldval;
|
*oval = oldval;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
@@ -234,7 +234,7 @@ int __kvm_arm_vcpu_set_events(struct kvm_vcpu *vcpu,
|
|||||||
|
|
||||||
#define KVM_ARCH_WANT_MMU_NOTIFIER
|
#define KVM_ARCH_WANT_MMU_NOTIFIER
|
||||||
int kvm_unmap_hva_range(struct kvm *kvm,
|
int kvm_unmap_hva_range(struct kvm *kvm,
|
||||||
unsigned long start, unsigned long end);
|
unsigned long start, unsigned long end, bool blockable);
|
||||||
void kvm_set_spte_hva(struct kvm *kvm, unsigned long hva, pte_t pte);
|
void kvm_set_spte_hva(struct kvm *kvm, unsigned long hva, pte_t pte);
|
||||||
|
|
||||||
unsigned long kvm_arm_num_regs(struct kvm_vcpu *vcpu);
|
unsigned long kvm_arm_num_regs(struct kvm_vcpu *vcpu);
|
||||||
@@ -364,4 +364,6 @@ static inline void kvm_vcpu_put_sysregs(struct kvm_vcpu *vcpu) {}
|
|||||||
struct kvm *kvm_arch_alloc_vm(void);
|
struct kvm *kvm_arch_alloc_vm(void);
|
||||||
void kvm_arch_free_vm(struct kvm *kvm);
|
void kvm_arch_free_vm(struct kvm *kvm);
|
||||||
|
|
||||||
|
#define kvm_arm_vcpu_loaded(vcpu) (false)
|
||||||
|
|
||||||
#endif /* __ARM_KVM_HOST_H__ */
|
#endif /* __ARM_KVM_HOST_H__ */
|
||||||
|
|||||||
@@ -16,6 +16,8 @@
|
|||||||
#ifndef _ASM_ARM_PERCPU_H_
|
#ifndef _ASM_ARM_PERCPU_H_
|
||||||
#define _ASM_ARM_PERCPU_H_
|
#define _ASM_ARM_PERCPU_H_
|
||||||
|
|
||||||
|
#include <asm/thread_info.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Same as asm-generic/percpu.h, except that we store the per cpu offset
|
* Same as asm-generic/percpu.h, except that we store the per cpu offset
|
||||||
* in the TPIDRPRW. TPIDRPRW only exists on V6K and V7
|
* in the TPIDRPRW. TPIDRPRW only exists on V6K and V7
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
#include <asm/ptrace.h>
|
#include <asm/ptrace.h>
|
||||||
#include <asm/types.h>
|
#include <asm/types.h>
|
||||||
#include <asm/unified.h>
|
#include <asm/unified.h>
|
||||||
|
#include <asm/vdso/processor.h>
|
||||||
|
|
||||||
#ifdef __KERNEL__
|
#ifdef __KERNEL__
|
||||||
#define STACK_TOP ((current->personality & ADDR_LIMIT_32BIT) ? \
|
#define STACK_TOP ((current->personality & ADDR_LIMIT_32BIT) ? \
|
||||||
@@ -94,16 +95,6 @@ extern void release_thread(struct task_struct *);
|
|||||||
|
|
||||||
unsigned long get_wchan(struct task_struct *p);
|
unsigned long get_wchan(struct task_struct *p);
|
||||||
|
|
||||||
#if __LINUX_ARM_ARCH__ == 6 || defined(CONFIG_ARM_ERRATA_754327)
|
|
||||||
#define cpu_relax() \
|
|
||||||
do { \
|
|
||||||
smp_mb(); \
|
|
||||||
__asm__ __volatile__("nop; nop; nop; nop; nop; nop; nop; nop; nop; nop;"); \
|
|
||||||
} while (0)
|
|
||||||
#else
|
|
||||||
#define cpu_relax() barrier()
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define task_pt_regs(p) \
|
#define task_pt_regs(p) \
|
||||||
((struct pt_regs *)(THREAD_START_SP + task_stack_page(p)) - 1)
|
((struct pt_regs *)(THREAD_START_SP + task_stack_page(p)) - 1)
|
||||||
|
|
||||||
|
|||||||
@@ -48,6 +48,12 @@ extern void smp_init_cpus(void);
|
|||||||
*/
|
*/
|
||||||
extern void set_smp_cross_call(void (*)(const struct cpumask *, unsigned int));
|
extern void set_smp_cross_call(void (*)(const struct cpumask *, unsigned int));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Provide a function to set a callback function pointer for updating the ipi
|
||||||
|
* history.
|
||||||
|
*/
|
||||||
|
extern void set_update_ipi_history_callback(void (*fn)(int));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Called from platform specific assembly code, this is the
|
* Called from platform specific assembly code, this is the
|
||||||
* secondary CPU entry point.
|
* secondary CPU entry point.
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ static inline void harden_branch_predictor(void)
|
|||||||
#define UDBG_BUS (1 << 4)
|
#define UDBG_BUS (1 << 4)
|
||||||
|
|
||||||
extern unsigned int user_debug;
|
extern unsigned int user_debug;
|
||||||
|
extern char* (*arch_read_hardware_id)(void);
|
||||||
|
|
||||||
static inline int handle_guest_sea(phys_addr_t addr, unsigned int esr)
|
static inline int handle_guest_sea(phys_addr_t addr, unsigned int esr)
|
||||||
{
|
{
|
||||||
|
|||||||
117
arch/arm/include/asm/uaccess-asm.h
Normal file
117
arch/arm/include/asm/uaccess-asm.h
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||||
|
|
||||||
|
#ifndef __ASM_UACCESS_ASM_H__
|
||||||
|
#define __ASM_UACCESS_ASM_H__
|
||||||
|
|
||||||
|
#include <asm/asm-offsets.h>
|
||||||
|
#include <asm/domain.h>
|
||||||
|
#include <asm/memory.h>
|
||||||
|
#include <asm/thread_info.h>
|
||||||
|
|
||||||
|
.macro csdb
|
||||||
|
#ifdef CONFIG_THUMB2_KERNEL
|
||||||
|
.inst.w 0xf3af8014
|
||||||
|
#else
|
||||||
|
.inst 0xe320f014
|
||||||
|
#endif
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro check_uaccess, addr:req, size:req, limit:req, tmp:req, bad:req
|
||||||
|
#ifndef CONFIG_CPU_USE_DOMAINS
|
||||||
|
adds \tmp, \addr, #\size - 1
|
||||||
|
sbcscc \tmp, \tmp, \limit
|
||||||
|
bcs \bad
|
||||||
|
#ifdef CONFIG_CPU_SPECTRE
|
||||||
|
movcs \addr, #0
|
||||||
|
csdb
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro uaccess_mask_range_ptr, addr:req, size:req, limit:req, tmp:req
|
||||||
|
#ifdef CONFIG_CPU_SPECTRE
|
||||||
|
sub \tmp, \limit, #1
|
||||||
|
subs \tmp, \tmp, \addr @ tmp = limit - 1 - addr
|
||||||
|
addhs \tmp, \tmp, #1 @ if (tmp >= 0) {
|
||||||
|
subshs \tmp, \tmp, \size @ tmp = limit - (addr + size) }
|
||||||
|
movlo \addr, #0 @ if (tmp < 0) addr = NULL
|
||||||
|
csdb
|
||||||
|
#endif
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro uaccess_disable, tmp, isb=1
|
||||||
|
#ifdef CONFIG_CPU_SW_DOMAIN_PAN
|
||||||
|
/*
|
||||||
|
* Whenever we re-enter userspace, the domains should always be
|
||||||
|
* set appropriately.
|
||||||
|
*/
|
||||||
|
mov \tmp, #DACR_UACCESS_DISABLE
|
||||||
|
mcr p15, 0, \tmp, c3, c0, 0 @ Set domain register
|
||||||
|
.if \isb
|
||||||
|
instr_sync
|
||||||
|
.endif
|
||||||
|
#endif
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro uaccess_enable, tmp, isb=1
|
||||||
|
#ifdef CONFIG_CPU_SW_DOMAIN_PAN
|
||||||
|
/*
|
||||||
|
* Whenever we re-enter userspace, the domains should always be
|
||||||
|
* set appropriately.
|
||||||
|
*/
|
||||||
|
mov \tmp, #DACR_UACCESS_ENABLE
|
||||||
|
mcr p15, 0, \tmp, c3, c0, 0
|
||||||
|
.if \isb
|
||||||
|
instr_sync
|
||||||
|
.endif
|
||||||
|
#endif
|
||||||
|
.endm
|
||||||
|
|
||||||
|
#if defined(CONFIG_CPU_SW_DOMAIN_PAN) || defined(CONFIG_CPU_USE_DOMAINS)
|
||||||
|
#define DACR(x...) x
|
||||||
|
#else
|
||||||
|
#define DACR(x...)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Save the address limit on entry to a privileged exception.
|
||||||
|
*
|
||||||
|
* If we are using the DACR for kernel access by the user accessors
|
||||||
|
* (CONFIG_CPU_USE_DOMAINS=y), always reset the DACR kernel domain
|
||||||
|
* back to client mode, whether or not \disable is set.
|
||||||
|
*
|
||||||
|
* If we are using SW PAN, set the DACR user domain to no access
|
||||||
|
* if \disable is set.
|
||||||
|
*/
|
||||||
|
.macro uaccess_entry, tsk, tmp0, tmp1, tmp2, disable
|
||||||
|
ldr \tmp1, [\tsk, #TI_ADDR_LIMIT]
|
||||||
|
mov \tmp2, #TASK_SIZE
|
||||||
|
str \tmp2, [\tsk, #TI_ADDR_LIMIT]
|
||||||
|
DACR( mrc p15, 0, \tmp0, c3, c0, 0)
|
||||||
|
DACR( str \tmp0, [sp, #SVC_DACR])
|
||||||
|
str \tmp1, [sp, #SVC_ADDR_LIMIT]
|
||||||
|
.if \disable && IS_ENABLED(CONFIG_CPU_SW_DOMAIN_PAN)
|
||||||
|
/* kernel=client, user=no access */
|
||||||
|
mov \tmp2, #DACR_UACCESS_DISABLE
|
||||||
|
mcr p15, 0, \tmp2, c3, c0, 0
|
||||||
|
instr_sync
|
||||||
|
.elseif IS_ENABLED(CONFIG_CPU_USE_DOMAINS)
|
||||||
|
/* kernel=client */
|
||||||
|
bic \tmp2, \tmp0, #domain_mask(DOMAIN_KERNEL)
|
||||||
|
orr \tmp2, \tmp2, #domain_val(DOMAIN_KERNEL, DOMAIN_CLIENT)
|
||||||
|
mcr p15, 0, \tmp2, c3, c0, 0
|
||||||
|
instr_sync
|
||||||
|
.endif
|
||||||
|
.endm
|
||||||
|
|
||||||
|
/* Restore the user access state previously saved by uaccess_entry */
|
||||||
|
.macro uaccess_exit, tsk, tmp0, tmp1
|
||||||
|
ldr \tmp1, [sp, #SVC_ADDR_LIMIT]
|
||||||
|
DACR( ldr \tmp0, [sp, #SVC_DACR])
|
||||||
|
str \tmp1, [\tsk, #TI_ADDR_LIMIT]
|
||||||
|
DACR( mcr p15, 0, \tmp0, c3, c0, 0)
|
||||||
|
.endm
|
||||||
|
|
||||||
|
#undef DACR
|
||||||
|
|
||||||
|
#endif /* __ASM_UACCESS_ASM_H__ */
|
||||||
9
arch/arm/include/asm/vdso/clocksource.h
Normal file
9
arch/arm/include/asm/vdso/clocksource.h
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||||||
|
#ifndef __ASM_VDSOCLOCKSOURCE_H
|
||||||
|
#define __ASM_VDSOCLOCKSOURCE_H
|
||||||
|
|
||||||
|
struct arch_clocksource_data {
|
||||||
|
bool vdso_direct; /* Usable for direct VDSO access? */
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* __ASM_VDSOCLOCKSOURCE_H */
|
||||||
38
arch/arm/include/asm/vdso/cp15.h
Normal file
38
arch/arm/include/asm/vdso/cp15.h
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2020 ARM Ltd.
|
||||||
|
*/
|
||||||
|
#ifndef __ASM_VDSO_CP15_H
|
||||||
|
#define __ASM_VDSO_CP15_H
|
||||||
|
|
||||||
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
|
#ifdef CONFIG_CPU_CP15
|
||||||
|
|
||||||
|
#include <linux/stringify.h>
|
||||||
|
|
||||||
|
#define __ACCESS_CP15(CRn, Op1, CRm, Op2) \
|
||||||
|
"mrc", "mcr", __stringify(p15, Op1, %0, CRn, CRm, Op2), u32
|
||||||
|
#define __ACCESS_CP15_64(Op1, CRm) \
|
||||||
|
"mrrc", "mcrr", __stringify(p15, Op1, %Q0, %R0, CRm), u64
|
||||||
|
|
||||||
|
#define __read_sysreg(r, w, c, t) ({ \
|
||||||
|
t __val; \
|
||||||
|
asm volatile(r " " c : "=r" (__val)); \
|
||||||
|
__val; \
|
||||||
|
})
|
||||||
|
#define read_sysreg(...) __read_sysreg(__VA_ARGS__)
|
||||||
|
|
||||||
|
#define __write_sysreg(v, r, w, c, t) asm volatile(w " " c : : "r" ((t)(v)))
|
||||||
|
#define write_sysreg(v, ...) __write_sysreg(v, __VA_ARGS__)
|
||||||
|
|
||||||
|
#define BPIALL __ACCESS_CP15(c7, 0, c5, 6)
|
||||||
|
#define ICIALLU __ACCESS_CP15(c7, 0, c5, 0)
|
||||||
|
|
||||||
|
#define CNTVCT __ACCESS_CP15_64(1, c14)
|
||||||
|
|
||||||
|
#endif /* CONFIG_CPU_CP15 */
|
||||||
|
|
||||||
|
#endif /* __ASSEMBLY__ */
|
||||||
|
|
||||||
|
#endif /* __ASM_VDSO_CP15_H */
|
||||||
145
arch/arm/include/asm/vdso/gettimeofday.h
Normal file
145
arch/arm/include/asm/vdso/gettimeofday.h
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2018 ARM Limited
|
||||||
|
*/
|
||||||
|
#ifndef __ASM_VDSO_GETTIMEOFDAY_H
|
||||||
|
#define __ASM_VDSO_GETTIMEOFDAY_H
|
||||||
|
|
||||||
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
|
#include <asm/errno.h>
|
||||||
|
#include <asm/unistd.h>
|
||||||
|
#include <asm/vdso/cp15.h>
|
||||||
|
#include <uapi/linux/time.h>
|
||||||
|
|
||||||
|
#define VDSO_HAS_CLOCK_GETRES 1
|
||||||
|
|
||||||
|
extern struct vdso_data *__get_datapage(void);
|
||||||
|
|
||||||
|
static __always_inline int gettimeofday_fallback(
|
||||||
|
struct __kernel_old_timeval *_tv,
|
||||||
|
struct timezone *_tz)
|
||||||
|
{
|
||||||
|
register struct timezone *tz asm("r1") = _tz;
|
||||||
|
register struct __kernel_old_timeval *tv asm("r0") = _tv;
|
||||||
|
register long ret asm ("r0");
|
||||||
|
register long nr asm("r7") = __NR_gettimeofday;
|
||||||
|
|
||||||
|
asm volatile(
|
||||||
|
" swi #0\n"
|
||||||
|
: "=r" (ret)
|
||||||
|
: "r" (tv), "r" (tz), "r" (nr)
|
||||||
|
: "memory");
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static __always_inline long clock_gettime_fallback(
|
||||||
|
clockid_t _clkid,
|
||||||
|
struct __kernel_timespec *_ts)
|
||||||
|
{
|
||||||
|
register struct __kernel_timespec *ts asm("r1") = _ts;
|
||||||
|
register clockid_t clkid asm("r0") = _clkid;
|
||||||
|
register long ret asm ("r0");
|
||||||
|
register long nr asm("r7") = __NR_clock_gettime64;
|
||||||
|
|
||||||
|
asm volatile(
|
||||||
|
" swi #0\n"
|
||||||
|
: "=r" (ret)
|
||||||
|
: "r" (clkid), "r" (ts), "r" (nr)
|
||||||
|
: "memory");
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static __always_inline long clock_gettime32_fallback(
|
||||||
|
clockid_t _clkid,
|
||||||
|
struct old_timespec32 *_ts)
|
||||||
|
{
|
||||||
|
register struct old_timespec32 *ts asm("r1") = _ts;
|
||||||
|
register clockid_t clkid asm("r0") = _clkid;
|
||||||
|
register long ret asm ("r0");
|
||||||
|
register long nr asm("r7") = __NR_clock_gettime;
|
||||||
|
|
||||||
|
asm volatile(
|
||||||
|
" swi #0\n"
|
||||||
|
: "=r" (ret)
|
||||||
|
: "r" (clkid), "r" (ts), "r" (nr)
|
||||||
|
: "memory");
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static __always_inline int clock_getres_fallback(
|
||||||
|
clockid_t _clkid,
|
||||||
|
struct __kernel_timespec *_ts)
|
||||||
|
{
|
||||||
|
register struct __kernel_timespec *ts asm("r1") = _ts;
|
||||||
|
register clockid_t clkid asm("r0") = _clkid;
|
||||||
|
register long ret asm ("r0");
|
||||||
|
register long nr asm("r7") = __NR_clock_getres_time64;
|
||||||
|
|
||||||
|
asm volatile(
|
||||||
|
" swi #0\n"
|
||||||
|
: "=r" (ret)
|
||||||
|
: "r" (clkid), "r" (ts), "r" (nr)
|
||||||
|
: "memory");
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static __always_inline int clock_getres32_fallback(
|
||||||
|
clockid_t _clkid,
|
||||||
|
struct old_timespec32 *_ts)
|
||||||
|
{
|
||||||
|
register struct old_timespec32 *ts asm("r1") = _ts;
|
||||||
|
register clockid_t clkid asm("r0") = _clkid;
|
||||||
|
register long ret asm ("r0");
|
||||||
|
register long nr asm("r7") = __NR_clock_getres;
|
||||||
|
|
||||||
|
asm volatile(
|
||||||
|
" swi #0\n"
|
||||||
|
: "=r" (ret)
|
||||||
|
: "r" (clkid), "r" (ts), "r" (nr)
|
||||||
|
: "memory");
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline bool arm_vdso_hres_capable(void)
|
||||||
|
{
|
||||||
|
return IS_ENABLED(CONFIG_ARM_ARCH_TIMER);
|
||||||
|
}
|
||||||
|
#define __arch_vdso_hres_capable arm_vdso_hres_capable
|
||||||
|
|
||||||
|
static __always_inline u64 __arch_get_hw_counter(int clock_mode)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_ARM_ARCH_TIMER
|
||||||
|
u64 cycle_now;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Core checks for mode already, so this raced against a concurrent
|
||||||
|
* update. Return something. Core will do another round and then
|
||||||
|
* see the mode change and fallback to the syscall.
|
||||||
|
*/
|
||||||
|
if (clock_mode == VDSO_CLOCKMODE_NONE)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
isb();
|
||||||
|
cycle_now = read_sysreg(CNTVCT);
|
||||||
|
|
||||||
|
return cycle_now;
|
||||||
|
#else
|
||||||
|
/* Make GCC happy. This is compiled out anyway */
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static __always_inline const struct vdso_data *__arch_get_vdso_data(void)
|
||||||
|
{
|
||||||
|
return __get_datapage();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* !__ASSEMBLY__ */
|
||||||
|
|
||||||
|
#endif /* __ASM_VDSO_GETTIMEOFDAY_H */
|
||||||
22
arch/arm/include/asm/vdso/processor.h
Normal file
22
arch/arm/include/asm/vdso/processor.h
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2020 ARM Ltd.
|
||||||
|
*/
|
||||||
|
#ifndef __ASM_VDSO_PROCESSOR_H
|
||||||
|
#define __ASM_VDSO_PROCESSOR_H
|
||||||
|
|
||||||
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
|
#if __LINUX_ARM_ARCH__ == 6 || defined(CONFIG_ARM_ERRATA_754327)
|
||||||
|
#define cpu_relax() \
|
||||||
|
do { \
|
||||||
|
smp_mb(); \
|
||||||
|
__asm__ __volatile__("nop; nop; nop; nop; nop; nop; nop; nop; nop; nop;"); \
|
||||||
|
} while (0)
|
||||||
|
#else
|
||||||
|
#define cpu_relax() barrier()
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __ASSEMBLY__ */
|
||||||
|
|
||||||
|
#endif /* __ASM_VDSO_PROCESSOR_H */
|
||||||
@@ -29,13 +29,13 @@
|
|||||||
ldr \tmp, =elf_hwcap @ may not have MVFR regs
|
ldr \tmp, =elf_hwcap @ may not have MVFR regs
|
||||||
ldr \tmp, [\tmp, #0]
|
ldr \tmp, [\tmp, #0]
|
||||||
tst \tmp, #HWCAP_VFPD32
|
tst \tmp, #HWCAP_VFPD32
|
||||||
ldcnel p11, cr0, [\base],#32*4 @ FLDMIAD \base!, {d16-d31}
|
ldclne p11, cr0, [\base],#32*4 @ FLDMIAD \base!, {d16-d31}
|
||||||
addeq \base, \base, #32*4 @ step over unused register space
|
addeq \base, \base, #32*4 @ step over unused register space
|
||||||
#else
|
#else
|
||||||
VFPFMRX \tmp, MVFR0 @ Media and VFP Feature Register 0
|
VFPFMRX \tmp, MVFR0 @ Media and VFP Feature Register 0
|
||||||
and \tmp, \tmp, #MVFR0_A_SIMD_MASK @ A_SIMD field
|
and \tmp, \tmp, #MVFR0_A_SIMD_MASK @ A_SIMD field
|
||||||
cmp \tmp, #2 @ 32 x 64bit registers?
|
cmp \tmp, #2 @ 32 x 64bit registers?
|
||||||
ldceql p11, cr0, [\base],#32*4 @ FLDMIAD \base!, {d16-d31}
|
ldcleq p11, cr0, [\base],#32*4 @ FLDMIAD \base!, {d16-d31}
|
||||||
addne \base, \base, #32*4 @ step over unused register space
|
addne \base, \base, #32*4 @ step over unused register space
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
@@ -53,13 +53,13 @@
|
|||||||
ldr \tmp, =elf_hwcap @ may not have MVFR regs
|
ldr \tmp, =elf_hwcap @ may not have MVFR regs
|
||||||
ldr \tmp, [\tmp, #0]
|
ldr \tmp, [\tmp, #0]
|
||||||
tst \tmp, #HWCAP_VFPD32
|
tst \tmp, #HWCAP_VFPD32
|
||||||
stcnel p11, cr0, [\base],#32*4 @ FSTMIAD \base!, {d16-d31}
|
stclne p11, cr0, [\base],#32*4 @ FSTMIAD \base!, {d16-d31}
|
||||||
addeq \base, \base, #32*4 @ step over unused register space
|
addeq \base, \base, #32*4 @ step over unused register space
|
||||||
#else
|
#else
|
||||||
VFPFMRX \tmp, MVFR0 @ Media and VFP Feature Register 0
|
VFPFMRX \tmp, MVFR0 @ Media and VFP Feature Register 0
|
||||||
and \tmp, \tmp, #MVFR0_A_SIMD_MASK @ A_SIMD field
|
and \tmp, \tmp, #MVFR0_A_SIMD_MASK @ A_SIMD field
|
||||||
cmp \tmp, #2 @ 32 x 64bit registers?
|
cmp \tmp, #2 @ 32 x 64bit registers?
|
||||||
stceql p11, cr0, [\base],#32*4 @ FSTMIAD \base!, {d16-d31}
|
stcleq p11, cr0, [\base],#32*4 @ FSTMIAD \base!, {d16-d31}
|
||||||
addne \base, \base, #32*4 @ step over unused register space
|
addne \base, \base, #32*4 @ step over unused register space
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
#include <asm/unistd.h>
|
#include <asm/unistd.h>
|
||||||
#include <asm/tls.h>
|
#include <asm/tls.h>
|
||||||
#include <asm/system_info.h>
|
#include <asm/system_info.h>
|
||||||
|
#include <asm/uaccess-asm.h>
|
||||||
|
|
||||||
#include "entry-header.S"
|
#include "entry-header.S"
|
||||||
#include <asm/entry-macro-multi.S>
|
#include <asm/entry-macro-multi.S>
|
||||||
@@ -182,15 +183,7 @@ ENDPROC(__und_invalid)
|
|||||||
stmia r7, {r2 - r6}
|
stmia r7, {r2 - r6}
|
||||||
|
|
||||||
get_thread_info tsk
|
get_thread_info tsk
|
||||||
ldr r0, [tsk, #TI_ADDR_LIMIT]
|
uaccess_entry tsk, r0, r1, r2, \uaccess
|
||||||
mov r1, #TASK_SIZE
|
|
||||||
str r1, [tsk, #TI_ADDR_LIMIT]
|
|
||||||
str r0, [sp, #SVC_ADDR_LIMIT]
|
|
||||||
|
|
||||||
uaccess_save r0
|
|
||||||
.if \uaccess
|
|
||||||
uaccess_disable r0
|
|
||||||
.endif
|
|
||||||
|
|
||||||
.if \trace
|
.if \trace
|
||||||
#ifdef CONFIG_TRACE_IRQFLAGS
|
#ifdef CONFIG_TRACE_IRQFLAGS
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#include <asm/asm-offsets.h>
|
#include <asm/asm-offsets.h>
|
||||||
#include <asm/errno.h>
|
#include <asm/errno.h>
|
||||||
#include <asm/thread_info.h>
|
#include <asm/thread_info.h>
|
||||||
|
#include <asm/uaccess-asm.h>
|
||||||
#include <asm/v7m.h>
|
#include <asm/v7m.h>
|
||||||
|
|
||||||
@ Bad Abort numbers
|
@ Bad Abort numbers
|
||||||
@@ -217,9 +218,7 @@
|
|||||||
blne trace_hardirqs_off
|
blne trace_hardirqs_off
|
||||||
#endif
|
#endif
|
||||||
.endif
|
.endif
|
||||||
ldr r1, [sp, #SVC_ADDR_LIMIT]
|
uaccess_exit tsk, r0, r1
|
||||||
uaccess_restore
|
|
||||||
str r1, [tsk, #TI_ADDR_LIMIT]
|
|
||||||
|
|
||||||
#ifndef CONFIG_THUMB2_KERNEL
|
#ifndef CONFIG_THUMB2_KERNEL
|
||||||
@ ARM mode SVC restore
|
@ ARM mode SVC restore
|
||||||
@@ -263,9 +262,7 @@
|
|||||||
@ on the stack remains correct).
|
@ on the stack remains correct).
|
||||||
@
|
@
|
||||||
.macro svc_exit_via_fiq
|
.macro svc_exit_via_fiq
|
||||||
ldr r1, [sp, #SVC_ADDR_LIMIT]
|
uaccess_exit tsk, r0, r1
|
||||||
uaccess_restore
|
|
||||||
str r1, [tsk, #TI_ADDR_LIMIT]
|
|
||||||
#ifndef CONFIG_THUMB2_KERNEL
|
#ifndef CONFIG_THUMB2_KERNEL
|
||||||
@ ARM mode restore
|
@ ARM mode restore
|
||||||
mov r0, sp
|
mov r0, sp
|
||||||
|
|||||||
@@ -688,6 +688,12 @@ static void disable_single_step(struct perf_event *bp)
|
|||||||
arch_install_hw_breakpoint(bp);
|
arch_install_hw_breakpoint(bp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int watchpoint_fault_on_uaccess(struct pt_regs *regs,
|
||||||
|
struct arch_hw_breakpoint *info)
|
||||||
|
{
|
||||||
|
return !user_mode(regs) && info->ctrl.privilege == ARM_BREAKPOINT_USER;
|
||||||
|
}
|
||||||
|
|
||||||
static void watchpoint_handler(unsigned long addr, unsigned int fsr,
|
static void watchpoint_handler(unsigned long addr, unsigned int fsr,
|
||||||
struct pt_regs *regs)
|
struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
@@ -761,16 +767,27 @@ static void watchpoint_handler(unsigned long addr, unsigned int fsr,
|
|||||||
}
|
}
|
||||||
|
|
||||||
pr_debug("watchpoint fired: address = 0x%x\n", info->trigger);
|
pr_debug("watchpoint fired: address = 0x%x\n", info->trigger);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we triggered a user watchpoint from a uaccess routine,
|
||||||
|
* then handle the stepping ourselves since userspace really
|
||||||
|
* can't help us with this.
|
||||||
|
*/
|
||||||
|
if (watchpoint_fault_on_uaccess(regs, info))
|
||||||
|
goto step;
|
||||||
|
|
||||||
perf_bp_event(wp, regs);
|
perf_bp_event(wp, regs);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If no overflow handler is present, insert a temporary
|
* Defer stepping to the overflow handler if one is installed.
|
||||||
* mismatch breakpoint so we can single-step over the
|
* Otherwise, insert a temporary mismatch breakpoint so that
|
||||||
* watchpoint trigger.
|
* we can single-step over the watchpoint trigger.
|
||||||
*/
|
*/
|
||||||
if (is_default_overflow_handler(wp))
|
if (!is_default_overflow_handler(wp))
|
||||||
enable_single_step(wp, instruction_pointer(regs));
|
goto unlock;
|
||||||
|
|
||||||
|
step:
|
||||||
|
enable_single_step(wp, instruction_pointer(regs));
|
||||||
unlock:
|
unlock:
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -229,8 +229,8 @@ static struct undef_hook arm_break_hook = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static struct undef_hook thumb_break_hook = {
|
static struct undef_hook thumb_break_hook = {
|
||||||
.instr_mask = 0xffff,
|
.instr_mask = 0xffffffff,
|
||||||
.instr_val = 0xde01,
|
.instr_val = 0x0000de01,
|
||||||
.cpsr_mask = PSR_T_BIT,
|
.cpsr_mask = PSR_T_BIT,
|
||||||
.cpsr_val = PSR_T_BIT,
|
.cpsr_val = PSR_T_BIT,
|
||||||
.fn = break_trap,
|
.fn = break_trap,
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user