mirror of
https://github.com/nxp-imx/linux-imx.git
synced 2025-10-23 07:34:24 +02:00
Merge remote-tracking branch 'aosp/android15-6.6' into nxp-linux-sdk/lf-6.6.y_android
Conflicts: android/abi_gki_protected_exports_aarch64 arch/arm64/boot/dts/freescale/imx8-ss-conn.dtsi drivers/pmdomain/imx/imx8mp-blk-ctrl.c Change-Id: I88515855368394b23b236a78a6b2ccfc002c614a
This commit is contained in:
commit
c9a5f671f8
90
BUILD.bazel
90
BUILD.bazel
|
@ -42,13 +42,6 @@ _GKI_AARCH64_MAKE_GOALS = [
|
|||
"modules",
|
||||
]
|
||||
|
||||
_GKI_RISCV64_MAKE_GOALS = [
|
||||
"Image",
|
||||
"Image.lz4",
|
||||
"Image.gz",
|
||||
"modules",
|
||||
]
|
||||
|
||||
_GKI_X86_64_MAKE_GOALS = [
|
||||
"bzImage",
|
||||
"modules",
|
||||
|
@ -98,15 +91,6 @@ write_file(
|
|||
],
|
||||
)
|
||||
|
||||
write_file(
|
||||
name = "gki_system_dlkm_modules_risc64",
|
||||
out = "android/gki_system_dlkm_modules_riscv64",
|
||||
content = get_gki_modules_list("riscv64") + [
|
||||
# Ensure new line at the end.
|
||||
"",
|
||||
],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "aarch64_additional_kmi_symbol_lists",
|
||||
srcs = [
|
||||
|
@ -143,7 +127,10 @@ define_common_kernels(target_configs = {
|
|||
"module_implicit_outs": get_gki_modules_list("arm64"),
|
||||
"make_goals": _GKI_AARCH64_MAKE_GOALS,
|
||||
"ddk_headers_archive": ":kernel_aarch64_ddk_headers_archive",
|
||||
"extra_dist": [":test_mappings_zip"],
|
||||
"extra_dist": [
|
||||
":test_mappings_zip",
|
||||
":tests_zip_arm64",
|
||||
],
|
||||
},
|
||||
"kernel_aarch64_16k": {
|
||||
"kmi_symbol_list_strict_mode": False,
|
||||
|
@ -151,16 +138,14 @@ define_common_kernels(target_configs = {
|
|||
"make_goals": _GKI_AARCH64_MAKE_GOALS,
|
||||
"extra_dist": [":test_mappings_zip"],
|
||||
},
|
||||
"kernel_riscv64": {
|
||||
"module_implicit_outs": get_gki_modules_list("riscv64"),
|
||||
"make_goals": _GKI_RISCV64_MAKE_GOALS,
|
||||
"extra_dist": [":test_mappings_zip"],
|
||||
},
|
||||
"kernel_x86_64": {
|
||||
"kmi_symbol_list_strict_mode": False,
|
||||
"module_implicit_outs": get_gki_modules_list("x86_64"),
|
||||
"make_goals": _GKI_X86_64_MAKE_GOALS,
|
||||
"extra_dist": [":test_mappings_zip"],
|
||||
"extra_dist": [
|
||||
":test_mappings_zip",
|
||||
":tests_zip_x86_64",
|
||||
],
|
||||
},
|
||||
})
|
||||
|
||||
|
@ -808,29 +793,6 @@ copy_to_dist_dir(
|
|||
log = "info",
|
||||
)
|
||||
|
||||
kernel_build(
|
||||
name = "kunit_riscv64",
|
||||
srcs = [":kernel_riscv64_sources"],
|
||||
outs = [],
|
||||
arch = "riscv64",
|
||||
base_kernel = ":kernel_riscv64",
|
||||
build_config = "build.config.kunit.riscv64",
|
||||
defconfig_fragments = [
|
||||
"tools/testing/kunit/configs/android/kunit_defconfig",
|
||||
"tools/testing/kunit/configs/android/kunit_clk_defconfig",
|
||||
],
|
||||
make_goals = ["modules"],
|
||||
module_outs = _KUNIT_COMMON_MODULES + _KUNIT_CLK_MODULES,
|
||||
)
|
||||
|
||||
copy_to_dist_dir(
|
||||
name = "kunit_riscv64_dist",
|
||||
data = [":kunit_riscv64"],
|
||||
dist_dir = "out/kunit_riscv64/dist",
|
||||
flat = True,
|
||||
log = "info",
|
||||
)
|
||||
|
||||
# DDK Headers
|
||||
# All headers. These are the public targets for DDK modules to use.
|
||||
alias(
|
||||
|
@ -865,15 +827,6 @@ ddk_headers(
|
|||
visibility = ["//visibility:public"],
|
||||
)
|
||||
|
||||
ddk_headers(
|
||||
name = "all_headers_riscv64",
|
||||
hdrs = [":all_headers_allowlist_riscv64"] + select({
|
||||
"//build/kernel/kleaf:allow_ddk_unsafe_headers_set": [":all_headers_unsafe"],
|
||||
"//conditions:default": [],
|
||||
}),
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
||||
|
||||
ddk_headers(
|
||||
name = "all_headers_x86_64",
|
||||
hdrs = [":all_headers_allowlist_x86_64"] + select({
|
||||
|
@ -924,24 +877,6 @@ ddk_headers(
|
|||
visibility = ["//visibility:private"],
|
||||
)
|
||||
|
||||
ddk_headers(
|
||||
name = "all_headers_allowlist_riscv64",
|
||||
hdrs = [
|
||||
":all_headers_allowlist_common_globs",
|
||||
":all_headers_allowlist_riscv64_globs",
|
||||
],
|
||||
# The list of include directories where source files can #include headers
|
||||
# from. In other words, these are the `-I` option to the C compiler.
|
||||
# These are prepended to LINUXINCLUDE.
|
||||
linux_includes = [
|
||||
"arch/riscv/include",
|
||||
"arch/riscv/include/uapi",
|
||||
"include",
|
||||
"include/uapi",
|
||||
],
|
||||
visibility = ["//visibility:private"],
|
||||
)
|
||||
|
||||
ddk_headers(
|
||||
name = "all_headers_allowlist_x86_64",
|
||||
hdrs = [
|
||||
|
@ -980,13 +915,6 @@ filegroup(
|
|||
visibility = ["//visibility:private"],
|
||||
)
|
||||
|
||||
# globs() for riscv64 only
|
||||
filegroup(
|
||||
name = "all_headers_allowlist_riscv64_globs",
|
||||
srcs = glob(["arch/riscv/include/**/*.h"]),
|
||||
visibility = ["//visibility:private"],
|
||||
)
|
||||
|
||||
# globs() for x86 only
|
||||
filegroup(
|
||||
name = "all_headers_allowlist_x86_64_globs",
|
||||
|
@ -2404,12 +2332,14 @@ pkg_zip(
|
|||
name = "tests_zip_x86_64",
|
||||
srcs = [":kselftest_tests_x86_64_pkg_files"],
|
||||
out = "x86_64/tests.zip",
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
||||
|
||||
pkg_zip(
|
||||
name = "tests_zip_arm64",
|
||||
srcs = [":kselftest_tests_arm64_pkg_files"],
|
||||
out = "arm64/tests.zip",
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
||||
|
||||
copy_to_dist_dir(
|
||||
|
|
|
@ -138,11 +138,10 @@ associated with the source address of the indirect branch. Specifically,
|
|||
the BHB might be shared across privilege levels even in the presence of
|
||||
Enhanced IBRS.
|
||||
|
||||
Currently the only known real-world BHB attack vector is via
|
||||
unprivileged eBPF. Therefore, it's highly recommended to not enable
|
||||
unprivileged eBPF, especially when eIBRS is used (without retpolines).
|
||||
For a full mitigation against BHB attacks, it's recommended to use
|
||||
retpolines (or eIBRS combined with retpolines).
|
||||
Previously the only known real-world BHB attack vector was via unprivileged
|
||||
eBPF. Further research has found attacks that don't require unprivileged eBPF.
|
||||
For a full mitigation against BHB attacks it is recommended to set BHI_DIS_S or
|
||||
use the BHB clearing sequence.
|
||||
|
||||
Attack scenarios
|
||||
----------------
|
||||
|
@ -430,6 +429,23 @@ The possible values in this file are:
|
|||
'PBRSB-eIBRS: Not affected' CPU is not affected by PBRSB
|
||||
=========================== =======================================================
|
||||
|
||||
- Branch History Injection (BHI) protection status:
|
||||
|
||||
.. list-table::
|
||||
|
||||
* - BHI: Not affected
|
||||
- System is not affected
|
||||
* - BHI: Retpoline
|
||||
- System is protected by retpoline
|
||||
* - BHI: BHI_DIS_S
|
||||
- System is protected by BHI_DIS_S
|
||||
* - BHI: SW loop, KVM SW loop
|
||||
- System is protected by software clearing sequence
|
||||
* - BHI: Vulnerable
|
||||
- System is vulnerable to BHI
|
||||
* - BHI: Vulnerable, KVM: SW loop
|
||||
- System is vulnerable; KVM is protected by software clearing sequence
|
||||
|
||||
Full mitigation might require a microcode update from the CPU
|
||||
vendor. When the necessary microcode is not available, the kernel will
|
||||
report vulnerability.
|
||||
|
@ -484,7 +500,11 @@ Spectre variant 2
|
|||
|
||||
Systems which support enhanced IBRS (eIBRS) enable IBRS protection once at
|
||||
boot, by setting the IBRS bit, and they're automatically protected against
|
||||
Spectre v2 variant attacks.
|
||||
some Spectre v2 variant attacks. The BHB can still influence the choice of
|
||||
indirect branch predictor entry, and although branch predictor entries are
|
||||
isolated between modes when eIBRS is enabled, the BHB itself is not isolated
|
||||
between modes. Systems which support BHI_DIS_S will set it to protect against
|
||||
BHI attacks.
|
||||
|
||||
On Intel's enhanced IBRS systems, this includes cross-thread branch target
|
||||
injections on SMT systems (STIBP). In other words, Intel eIBRS enables
|
||||
|
@ -638,6 +658,18 @@ kernel command line.
|
|||
spectre_v2=off. Spectre variant 1 mitigations
|
||||
cannot be disabled.
|
||||
|
||||
spectre_bhi=
|
||||
|
||||
[X86] Control mitigation of Branch History Injection
|
||||
(BHI) vulnerability. This setting affects the deployment
|
||||
of the HW BHI control and the SW BHB clearing sequence.
|
||||
|
||||
on
|
||||
(default) Enable the HW or SW mitigation as
|
||||
needed.
|
||||
off
|
||||
Disable the mitigation.
|
||||
|
||||
For spectre_v2_user see Documentation/admin-guide/kernel-parameters.txt
|
||||
|
||||
Mitigation selection guide
|
||||
|
|
|
@ -3296,9 +3296,7 @@
|
|||
|
||||
mem_encrypt= [X86-64] AMD Secure Memory Encryption (SME) control
|
||||
Valid arguments: on, off
|
||||
Default (depends on kernel configuration option):
|
||||
on (CONFIG_AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT=y)
|
||||
off (CONFIG_AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT=n)
|
||||
Default: off
|
||||
mem_encrypt=on: Activate SME
|
||||
mem_encrypt=off: Do not activate SME
|
||||
|
||||
|
@ -3372,6 +3370,7 @@
|
|||
reg_file_data_sampling=off [X86]
|
||||
retbleed=off [X86]
|
||||
spec_store_bypass_disable=off [X86,PPC]
|
||||
spectre_bhi=off [X86]
|
||||
spectre_v2_user=off [X86]
|
||||
srbds=off [X86,INTEL]
|
||||
ssbd=force-off [ARM64]
|
||||
|
@ -5969,6 +5968,15 @@
|
|||
sonypi.*= [HW] Sony Programmable I/O Control Device driver
|
||||
See Documentation/admin-guide/laptops/sonypi.rst
|
||||
|
||||
spectre_bhi= [X86] Control mitigation of Branch History Injection
|
||||
(BHI) vulnerability. This setting affects the
|
||||
deployment of the HW BHI control and the SW BHB
|
||||
clearing sequence.
|
||||
|
||||
on - (default) Enable the HW or SW mitigation
|
||||
as needed.
|
||||
off - Disable the mitigation.
|
||||
|
||||
spectre_v2= [X86] Control mitigation of Spectre variant 2
|
||||
(indirect branch speculation) vulnerability.
|
||||
The default operation protects the kernel from
|
||||
|
|
|
@ -87,14 +87,14 @@ The state of SME in the Linux kernel can be documented as follows:
|
|||
kernel is non-zero).
|
||||
|
||||
SME can also be enabled and activated in the BIOS. If SME is enabled and
|
||||
activated in the BIOS, then all memory accesses will be encrypted and it will
|
||||
not be necessary to activate the Linux memory encryption support. If the BIOS
|
||||
merely enables SME (sets bit 23 of the MSR_AMD64_SYSCFG), then Linux can activate
|
||||
memory encryption by default (CONFIG_AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT=y) or
|
||||
by supplying mem_encrypt=on on the kernel command line. However, if BIOS does
|
||||
not enable SME, then Linux will not be able to activate memory encryption, even
|
||||
if configured to do so by default or the mem_encrypt=on command line parameter
|
||||
is specified.
|
||||
activated in the BIOS, then all memory accesses will be encrypted and it
|
||||
will not be necessary to activate the Linux memory encryption support.
|
||||
|
||||
If the BIOS merely enables SME (sets bit 23 of the MSR_AMD64_SYSCFG),
|
||||
then memory encryption can be enabled by supplying mem_encrypt=on on the
|
||||
kernel command line. However, if BIOS does not enable SME, then Linux
|
||||
will not be able to activate memory encryption, even if configured to do
|
||||
so by default or the mem_encrypt=on command line parameter is specified.
|
||||
|
||||
Secure Nested Paging (SNP)
|
||||
==========================
|
||||
|
|
|
@ -345,9 +345,9 @@ sys.stderr.write("Using %s theme\n" % html_theme)
|
|||
html_static_path = ['sphinx-static']
|
||||
|
||||
# If true, Docutils "smart quotes" will be used to convert quotes and dashes
|
||||
# to typographically correct entities. This will convert "--" to "—",
|
||||
# which is not always what we want, so disable it.
|
||||
smartquotes = False
|
||||
# to typographically correct entities. However, conversion of "--" to "—"
|
||||
# is not always what we want, so enable only quotes.
|
||||
smartquotes_action = 'q'
|
||||
|
||||
# Custom sidebar templates, maps document names to template names.
|
||||
# Note that the RTD theme ignores this
|
||||
|
|
|
@ -54,6 +54,7 @@ ena_common_defs.h Common definitions for ena_com layer.
|
|||
ena_regs_defs.h Definition of ENA PCI memory-mapped (MMIO) registers.
|
||||
ena_netdev.[ch] Main Linux kernel driver.
|
||||
ena_ethtool.c ethtool callbacks.
|
||||
ena_xdp.[ch] XDP files
|
||||
ena_pci_id_tbl.h Supported device IDs.
|
||||
================= ======================================================
|
||||
|
||||
|
|
|
@ -8149,7 +8149,7 @@ M: Geoffrey D. Bennett <g@b4.vu>
|
|||
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
||||
S: Maintained
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git
|
||||
F: sound/usb/mixer_scarlett_gen2.c
|
||||
F: sound/usb/mixer_scarlett2.c
|
||||
|
||||
FORCEDETH GIGABIT ETHERNET DRIVER
|
||||
M: Rain River <rain.1986.08.12@gmail.com>
|
||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 6
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 23
|
||||
SUBLEVEL = 29
|
||||
EXTRAVERSION =
|
||||
NAME = Hurr durr I'ma ninja sloth
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -90,6 +90,7 @@
|
|||
__cpuhp_setup_state
|
||||
cpu_number
|
||||
__cpu_online_mask
|
||||
cpu_pm_register_notifier
|
||||
__cpu_possible_mask
|
||||
cpus_read_lock
|
||||
cpus_read_unlock
|
||||
|
@ -105,6 +106,7 @@
|
|||
debugfs_create_symlink
|
||||
debugfs_create_u32
|
||||
debugfs_create_x32
|
||||
debugfs_lookup
|
||||
debugfs_remove
|
||||
default_llseek
|
||||
delayed_work_timer_fn
|
||||
|
@ -114,6 +116,7 @@
|
|||
_dev_emerg
|
||||
_dev_err
|
||||
dev_err_probe
|
||||
devfreq_get_devfreq_by_phandle
|
||||
device_create
|
||||
device_create_bin_file
|
||||
device_create_file
|
||||
|
@ -132,6 +135,7 @@
|
|||
__devm_add_action
|
||||
devm_backlight_device_register
|
||||
devm_clk_get
|
||||
devm_clk_put
|
||||
__devm_drm_dev_alloc
|
||||
devm_free_irq
|
||||
devm_gen_pool_create
|
||||
|
@ -310,10 +314,12 @@
|
|||
gen_pool_create
|
||||
gen_pool_destroy
|
||||
gen_pool_free_owner
|
||||
gen_pool_has_addr
|
||||
gen_pool_size
|
||||
get_cpu_device
|
||||
get_device
|
||||
__get_free_pages
|
||||
get_pid_task
|
||||
get_random_bytes
|
||||
get_task_mm
|
||||
get_thermal_instance
|
||||
|
@ -461,12 +467,14 @@
|
|||
log_read_mmio
|
||||
log_write_mmio
|
||||
loops_per_jiffy
|
||||
lzo1x_decompress_safe
|
||||
memchr
|
||||
memcmp
|
||||
memcpy
|
||||
__memcpy_fromio
|
||||
__memcpy_toio
|
||||
memdup_user
|
||||
memmove
|
||||
mem_section
|
||||
memset
|
||||
__memset_io
|
||||
|
@ -520,6 +528,7 @@
|
|||
of_find_device_by_node
|
||||
of_find_matching_node_and_match
|
||||
of_find_node_by_name
|
||||
of_find_node_by_type
|
||||
of_find_node_opts_by_path
|
||||
of_find_property
|
||||
of_fwnode_ops
|
||||
|
@ -576,7 +585,10 @@
|
|||
pci_store_saved_state
|
||||
pci_write_config_dword
|
||||
__per_cpu_offset
|
||||
perf_event_create_kernel_counter
|
||||
perf_event_enable
|
||||
perf_event_read_local
|
||||
perf_event_release_kernel
|
||||
perf_trace_buf_alloc
|
||||
perf_trace_run_bpf_submit
|
||||
phy_power_off
|
||||
|
@ -829,6 +841,7 @@
|
|||
system_unbound_wq
|
||||
system_wq
|
||||
sys_tz
|
||||
__tasklet_hi_schedule
|
||||
tasklet_init
|
||||
tasklet_kill
|
||||
__tasklet_schedule
|
||||
|
@ -845,6 +858,7 @@
|
|||
trace_event_raw_init
|
||||
trace_event_reg
|
||||
trace_handle_return
|
||||
__traceiter_android_rvh_sched_fork_init
|
||||
__traceiter_android_vh_cpu_idle_enter
|
||||
__traceiter_android_vh_cpu_idle_exit
|
||||
__traceiter_android_vh_cpuidle_psci_enter
|
||||
|
@ -853,6 +867,7 @@
|
|||
__traceiter_device_pm_callback_end
|
||||
__traceiter_device_pm_callback_start
|
||||
__traceiter_suspend_resume
|
||||
__tracepoint_android_rvh_sched_fork_init
|
||||
__tracepoint_android_vh_cpu_idle_enter
|
||||
__tracepoint_android_vh_cpu_idle_exit
|
||||
__tracepoint_android_vh_cpuidle_psci_enter
|
||||
|
@ -907,13 +922,21 @@
|
|||
v4l2_m2m_buf_remove
|
||||
v4l2_m2m_ctx_init
|
||||
v4l2_m2m_ctx_release
|
||||
v4l2_m2m_dqbuf
|
||||
v4l2_m2m_get_curr_priv
|
||||
v4l2_m2m_get_vq
|
||||
v4l2_m2m_init
|
||||
v4l2_m2m_job_finish
|
||||
v4l2_m2m_mmap
|
||||
v4l2_m2m_next_buf
|
||||
v4l2_m2m_poll
|
||||
v4l2_m2m_qbuf
|
||||
v4l2_m2m_querybuf
|
||||
v4l2_m2m_release
|
||||
v4l2_m2m_reqbufs
|
||||
v4l2_m2m_streamoff
|
||||
v4l2_m2m_streamon
|
||||
v4l_bound_align_image
|
||||
vb2_buffer_done
|
||||
vb2_dma_sg_memops
|
||||
vb2_dqbuf
|
||||
|
@ -1081,7 +1104,6 @@
|
|||
cpu_topology
|
||||
deactivate_task
|
||||
double_rq_lock
|
||||
get_pid_task
|
||||
get_task_cred
|
||||
__hrtimer_get_remaining
|
||||
irq_work_queue
|
||||
|
@ -1091,9 +1113,6 @@
|
|||
memory_read_from_buffer
|
||||
migrate_swap
|
||||
ns_capable
|
||||
perf_event_create_kernel_counter
|
||||
perf_event_enable
|
||||
perf_event_release_kernel
|
||||
pfn_is_map_memory
|
||||
pick_highest_pushable_task
|
||||
__put_cred
|
||||
|
@ -1127,7 +1146,6 @@
|
|||
__traceiter_android_rvh_flush_task
|
||||
__traceiter_android_rvh_new_task_stats
|
||||
__traceiter_android_rvh_replace_next_task_fair
|
||||
__traceiter_android_rvh_sched_fork_init
|
||||
__traceiter_android_rvh_sched_newidle_balance
|
||||
__traceiter_android_rvh_sched_nohz_balancer_kick
|
||||
__traceiter_android_rvh_sched_rebalance_domains
|
||||
|
@ -1159,7 +1177,6 @@
|
|||
__tracepoint_android_rvh_flush_task
|
||||
__tracepoint_android_rvh_new_task_stats
|
||||
__tracepoint_android_rvh_replace_next_task_fair
|
||||
__tracepoint_android_rvh_sched_fork_init
|
||||
__tracepoint_android_rvh_sched_newidle_balance
|
||||
__tracepoint_android_rvh_sched_nohz_balancer_kick
|
||||
__tracepoint_android_rvh_sched_rebalance_domains
|
||||
|
@ -1186,14 +1203,17 @@
|
|||
# required by exynos-adv-tracer-s2d.ko
|
||||
simple_strtoul
|
||||
|
||||
# required by exynos-afm.ko
|
||||
jiffies_64_to_clock_t
|
||||
kobject_del
|
||||
smp_call_function_any
|
||||
|
||||
# required by exynos-chipid_v2.ko
|
||||
soc_device_register
|
||||
|
||||
# required by exynos-coresight.ko
|
||||
cpu_pm_register_notifier
|
||||
# required by exynos-coresight-etm.ko
|
||||
__cpuhp_setup_state_cpuslocked
|
||||
|
||||
# required by exynos-cpif-iommu_v9.ko
|
||||
gen_pool_has_addr
|
||||
|
||||
# required by exynos-cpufreq.ko
|
||||
cpufreq_freq_transition_begin
|
||||
|
@ -1210,7 +1230,6 @@
|
|||
# required by exynos-cpupm.ko
|
||||
cpuidle_get_cpu_driver
|
||||
cpuidle_get_driver
|
||||
of_find_node_by_type
|
||||
__traceiter_ipi_entry
|
||||
__traceiter_ipi_exit
|
||||
__traceiter_ipi_raise
|
||||
|
@ -1440,9 +1459,6 @@
|
|||
perf_event_read_value
|
||||
update_devfreq
|
||||
|
||||
# required by exynos_esca.ko
|
||||
debugfs_lookup
|
||||
|
||||
# required by exynos_mct_v3.ko
|
||||
clockevents_config_and_register
|
||||
__clocksource_register_scale
|
||||
|
@ -1549,6 +1565,16 @@
|
|||
__tracepoint_android_vh_do_wake_up_sync
|
||||
__tracepoint_android_vh_set_wake_flags
|
||||
|
||||
# required by hts.ko
|
||||
devm_devfreq_register_notifier
|
||||
kernel_cpustat
|
||||
kernfs_path_from_node
|
||||
__traceiter_android_rvh_cpufreq_transition
|
||||
__traceiter_android_vh_free_task
|
||||
__traceiter_android_vh_is_fpsimd_save
|
||||
__tracepoint_android_rvh_cpufreq_transition
|
||||
__tracepoint_android_vh_free_task
|
||||
__tracepoint_android_vh_is_fpsimd_save
|
||||
# required by i2c-dev.ko
|
||||
bus_register_notifier
|
||||
bus_unregister_notifier
|
||||
|
@ -1633,7 +1659,6 @@
|
|||
|
||||
# required by npu.ko
|
||||
class_register
|
||||
devm_clk_put
|
||||
vsprintf
|
||||
|
||||
# required by pablo-libs.ko
|
||||
|
@ -1645,6 +1670,7 @@
|
|||
kstrdup_const
|
||||
kthread_delayed_work_timer_fn
|
||||
kvmemdup
|
||||
kvrealloc
|
||||
llist_add_batch
|
||||
rb_first
|
||||
tasklet_setup
|
||||
|
@ -1821,14 +1847,7 @@
|
|||
sg_nents_for_len
|
||||
sync_file_get_fence
|
||||
v4l2_ctrl_handler_setup
|
||||
v4l2_m2m_dqbuf
|
||||
v4l2_m2m_mmap
|
||||
v4l2_m2m_poll
|
||||
v4l2_m2m_reqbufs
|
||||
v4l2_m2m_streamoff
|
||||
v4l2_m2m_streamon
|
||||
v4l2_m2m_try_schedule
|
||||
v4l_bound_align_image
|
||||
work_busy
|
||||
|
||||
# required by scsc_bt.ko
|
||||
|
@ -1886,7 +1905,6 @@
|
|||
ip_send_check
|
||||
linkwatch_fire_event
|
||||
__local_bh_enable_ip
|
||||
memmove
|
||||
napi_disable
|
||||
napi_gro_flush
|
||||
neigh_destroy
|
||||
|
@ -1914,7 +1932,6 @@
|
|||
skb_copy
|
||||
skb_copy_bits
|
||||
synchronize_net
|
||||
__tasklet_hi_schedule
|
||||
unregister_inet6addr_notifier
|
||||
unregister_inetaddr_notifier
|
||||
unregister_netdevice_queue
|
||||
|
@ -2218,7 +2235,6 @@
|
|||
# required by ufs-exynos-core.ko
|
||||
blk_mq_unique_tag
|
||||
blk_queue_update_dma_alignment
|
||||
devfreq_get_devfreq_by_phandle
|
||||
kobject_add
|
||||
kobject_init
|
||||
of_cpu_node_to_id
|
||||
|
@ -2276,7 +2292,48 @@
|
|||
# required by usb_notify_layer.ko
|
||||
kthread_complete_and_exit
|
||||
usb_speed_string
|
||||
usb_unregister_notify
|
||||
|
||||
# required by vendor_zram.ko
|
||||
bio_endio
|
||||
bio_end_io_acct_remapped
|
||||
bio_start_io_acct
|
||||
__blk_alloc_disk
|
||||
blk_queue_flag_set
|
||||
blk_queue_io_min
|
||||
blk_queue_io_opt
|
||||
blk_queue_logical_block_size
|
||||
blk_queue_max_discard_sectors
|
||||
blk_queue_max_write_zeroes_sectors
|
||||
blk_queue_physical_block_size
|
||||
__cpuhp_state_add_instance
|
||||
__cpuhp_state_remove_instance
|
||||
crypto_alloc_base
|
||||
crypto_comp_compress
|
||||
crypto_comp_decompress
|
||||
crypto_has_alg
|
||||
del_gendisk
|
||||
device_add_disk
|
||||
flush_dcache_page
|
||||
kstrtou16
|
||||
memparse
|
||||
memset64
|
||||
put_disk
|
||||
__register_blkdev
|
||||
set_capacity
|
||||
set_capacity_and_notify
|
||||
sync_blockdev
|
||||
sysfs_streq
|
||||
unregister_blkdev
|
||||
zs_compact
|
||||
zs_create_pool
|
||||
zs_destroy_pool
|
||||
zs_free
|
||||
zs_get_total_pages
|
||||
zs_huge_class_size
|
||||
zs_malloc
|
||||
zs_map_object
|
||||
zs_pool_stats
|
||||
zs_unmap_object
|
||||
|
||||
# required by xhci-exynos-audio.ko
|
||||
dma_pool_alloc
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
[abi_symbol_list]
|
||||
blkdev_get_by_path
|
||||
blkdev_issue_flush
|
||||
blk_queue_rq_timeout
|
||||
caches_clean_inval_pou
|
||||
_dev_alert
|
||||
__devm_alloc_percpu
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
devres_destroy
|
||||
down_read_trylock
|
||||
drm_crtc_vblank_waitqueue
|
||||
down_write_killable
|
||||
filp_close
|
||||
folio_add_lru
|
||||
folio_mapping
|
||||
|
@ -30,6 +31,7 @@
|
|||
gov_attr_set_get
|
||||
gpiod_to_chip
|
||||
have_governor_per_policy
|
||||
iterate_dir
|
||||
i2c_smbus_read_word_data
|
||||
i2c_smbus_write_word_data
|
||||
iio_channel_get
|
||||
|
@ -80,6 +82,7 @@
|
|||
rtc_read_alarm
|
||||
rtc_set_alarm
|
||||
__rtnl_link_unregister
|
||||
security_file_ioctl
|
||||
sdio_memcpy_fromio
|
||||
sdio_memcpy_toio
|
||||
sdio_set_block_size
|
||||
|
@ -102,6 +105,7 @@
|
|||
tcf_exts_dump_stats
|
||||
tcf_exts_validate
|
||||
tcf_queue_work
|
||||
vfs_llseek
|
||||
__traceiter_android_rvh_post_init_entity_util_avg
|
||||
__traceiter_android_vh_account_process_tick_gran
|
||||
__traceiter_android_vh_alloc_oem_binder_struct
|
||||
|
@ -125,6 +129,7 @@
|
|||
__traceiter_android_vh_cgroup_set_task
|
||||
__traceiter_android_vh_cpufreq_acct_update_power
|
||||
__traceiter_android_vh_check_folio_look_around_ref
|
||||
__traceiter_android_vh_customize_alloc_gfp
|
||||
__traceiter_android_vh_dup_task_struct
|
||||
__traceiter_android_vh_exit_signal
|
||||
__traceiter_android_vh_freq_qos_remove_request
|
||||
|
@ -158,6 +163,7 @@
|
|||
__traceiter_android_vh_meminfo_cache_adjust
|
||||
__traceiter_android_vh_si_mem_available_adjust
|
||||
__traceiter_android_vh_si_meminfo_adjust
|
||||
__traceiter_android_vh_tune_scan_type
|
||||
__traceiter_mm_vmscan_kswapd_wake
|
||||
__traceiter_block_bio_queue
|
||||
__traceiter_block_getrq
|
||||
|
@ -202,6 +208,7 @@
|
|||
__tracepoint_android_vh_cpu_cgroup_css_free
|
||||
__tracepoint_android_vh_cgroup_set_task
|
||||
__tracepoint_android_vh_cpufreq_acct_update_power
|
||||
__tracepoint_android_vh_customize_alloc_gfp
|
||||
__tracepoint_android_vh_dup_task_struct
|
||||
__tracepoint_android_vh_exit_signal
|
||||
__traceiter_android_vh_get_page_wmark
|
||||
|
@ -341,6 +348,7 @@
|
|||
__tracepoint_android_vh_rt_mutex_steal
|
||||
__tracepoint_android_vh_rtmutex_waiter_prio
|
||||
__tracepoint_android_vh_task_blocks_on_rtmutex
|
||||
__tracepoint_android_vh_tune_scan_type
|
||||
wq_worker_comm
|
||||
is_dma_buf_file
|
||||
dma_buf_get_each
|
||||
|
|
|
@ -1,8 +1,4 @@
|
|||
[abi_symbol_list]
|
||||
__traceiter_android_vh_mmap_region
|
||||
__traceiter_android_vh_try_to_unmap_one
|
||||
__tracepoint_android_vh_mmap_region
|
||||
__tracepoint_android_vh_try_to_unmap_one
|
||||
account_locked_vm
|
||||
activate_task
|
||||
add_cpu
|
||||
|
@ -14,8 +10,10 @@
|
|||
adjust_managed_page_count
|
||||
alloc_chrdev_region
|
||||
alloc_io_pgtable_ops
|
||||
alloc_netdev_mqs
|
||||
__alloc_pages
|
||||
__alloc_percpu
|
||||
__alloc_percpu_gfp
|
||||
__alloc_skb
|
||||
alloc_skb_with_frags
|
||||
alloc_workqueue
|
||||
|
@ -25,6 +23,8 @@
|
|||
amba_driver_unregister
|
||||
android_rvh_probe_register
|
||||
anon_inode_getfile
|
||||
arc4_crypt
|
||||
arc4_setkey
|
||||
__arch_copy_from_user
|
||||
__arch_copy_to_user
|
||||
arch_freq_scale
|
||||
|
@ -47,10 +47,12 @@
|
|||
backlight_device_get_by_type
|
||||
__balance_callbacks
|
||||
balance_push_callback
|
||||
bcmp
|
||||
bitmap_allocate_region
|
||||
__bitmap_andnot
|
||||
__bitmap_clear
|
||||
bitmap_find_next_zero_area_off
|
||||
bitmap_free
|
||||
__bitmap_or
|
||||
bitmap_print_to_pagebuf
|
||||
bitmap_release_region
|
||||
|
@ -84,6 +86,7 @@
|
|||
bus_register
|
||||
bus_unregister
|
||||
cache_line_size
|
||||
call_rcu
|
||||
cancel_delayed_work
|
||||
cancel_delayed_work_sync
|
||||
cancel_work_sync
|
||||
|
@ -175,6 +178,7 @@
|
|||
_copy_to_iter
|
||||
__cpu_active_mask
|
||||
cpu_bit_bitmap
|
||||
cpu_busy_with_softirqs
|
||||
__cpu_dying_mask
|
||||
cpufreq_cpu_get
|
||||
cpufreq_cpu_get_raw
|
||||
|
@ -209,18 +213,38 @@
|
|||
cpus_read_unlock
|
||||
cpu_subsys
|
||||
cpu_topology
|
||||
crc32_be
|
||||
crc32_le
|
||||
crc8
|
||||
crc8_populate_msb
|
||||
crypto_aead_decrypt
|
||||
crypto_aead_encrypt
|
||||
crypto_aead_setauthsize
|
||||
crypto_aead_setkey
|
||||
crypto_ahash_digest
|
||||
crypto_ahash_setkey
|
||||
crypto_alloc_aead
|
||||
crypto_alloc_ahash
|
||||
crypto_alloc_shash
|
||||
crypto_alloc_skcipher
|
||||
crypto_destroy_tfm
|
||||
__crypto_memneq
|
||||
crypto_register_aead
|
||||
crypto_register_rng
|
||||
crypto_register_rngs
|
||||
crypto_shash_digest
|
||||
crypto_shash_finup
|
||||
crypto_shash_setkey
|
||||
crypto_shash_update
|
||||
crypto_skcipher_decrypt
|
||||
crypto_skcipher_encrypt
|
||||
crypto_skcipher_setkey
|
||||
crypto_unregister_aead
|
||||
crypto_unregister_rng
|
||||
crypto_unregister_rngs
|
||||
__crypto_xor
|
||||
css_next_child
|
||||
csum_partial
|
||||
_ctype
|
||||
datagram_poll
|
||||
deactivate_task
|
||||
|
@ -239,20 +263,28 @@
|
|||
debugfs_file_put
|
||||
debugfs_lookup
|
||||
debugfs_remove
|
||||
debugfs_rename
|
||||
dec_node_page_state
|
||||
default_llseek
|
||||
deferred_free
|
||||
delayed_work_timer_fn
|
||||
destroy_workqueue
|
||||
dev_addr_mod
|
||||
dev_alloc_name
|
||||
__dev_change_net_namespace
|
||||
dev_close
|
||||
dev_coredumpm
|
||||
dev_coredumpv
|
||||
dev_driver_string
|
||||
_dev_err
|
||||
dev_err_probe
|
||||
dev_fetch_sw_netstats
|
||||
devfreq_add_governor
|
||||
devfreq_get_devfreq_by_node
|
||||
devfreq_remove_governor
|
||||
__dev_fwnode
|
||||
__dev_get_by_index
|
||||
dev_get_by_index
|
||||
dev_get_by_name
|
||||
dev_get_by_name_rcu
|
||||
dev_get_regmap
|
||||
|
@ -281,6 +313,7 @@
|
|||
device_property_read_u32_array
|
||||
device_register
|
||||
device_remove_file
|
||||
device_rename
|
||||
device_set_wakeup_capable
|
||||
device_show_int
|
||||
device_store_int
|
||||
|
@ -394,6 +427,7 @@
|
|||
dev_pm_qos_update_request
|
||||
dev_pm_set_wake_irq
|
||||
_dev_printk
|
||||
__dev_queue_xmit
|
||||
devres_add
|
||||
__devres_alloc_node
|
||||
devres_free
|
||||
|
@ -457,6 +491,7 @@
|
|||
dma_unmap_page_attrs
|
||||
dma_unmap_resource
|
||||
dma_unmap_sg_attrs
|
||||
do_trace_netlink_extack
|
||||
double_rq_lock
|
||||
down
|
||||
down_read
|
||||
|
@ -485,6 +520,7 @@
|
|||
drm_client_init
|
||||
drm_client_modeset_commit_locked
|
||||
drm_client_register
|
||||
drm_connector_list_update
|
||||
drm_connector_register
|
||||
drm_connector_unregister
|
||||
drm_crtc_add_crc_entry
|
||||
|
@ -516,16 +552,17 @@
|
|||
drm_mode_create_dp_colorspace_property
|
||||
drm_mode_is_420_only
|
||||
drm_mode_object_put
|
||||
drm_mode_prune_invalid
|
||||
drm_modeset_lock
|
||||
drm_modeset_lock_single_interruptible
|
||||
drm_mode_set_name
|
||||
drm_modeset_unlock
|
||||
drm_mode_sort
|
||||
drm_mode_prune_invalid
|
||||
drm_connector_list_update
|
||||
drm_object_property_set_value
|
||||
drm_printf
|
||||
__drm_printfn_debug
|
||||
drop_reasons_register_subsys
|
||||
drop_reasons_unregister_subsys
|
||||
dump_stack
|
||||
__dynamic_dev_dbg
|
||||
__dynamic_pr_debug
|
||||
|
@ -539,6 +576,10 @@
|
|||
edac_op_state
|
||||
enable_irq
|
||||
enable_percpu_irq
|
||||
ether_setup
|
||||
eth_mac_addr
|
||||
ethtool_op_get_link
|
||||
eth_type_trans
|
||||
eventfd_ctx_fdget
|
||||
eventfd_ctx_fileget
|
||||
eventfd_ctx_put
|
||||
|
@ -572,6 +613,7 @@
|
|||
fput
|
||||
free_io_pgtable_ops
|
||||
free_irq
|
||||
free_netdev
|
||||
__free_pages
|
||||
free_pages
|
||||
free_percpu
|
||||
|
@ -587,6 +629,7 @@
|
|||
fwnode_property_present
|
||||
fwnode_property_read_string
|
||||
fwnode_property_read_u32_array
|
||||
gcd
|
||||
generic_device_group
|
||||
generic_handle_domain_irq
|
||||
generic_handle_irq
|
||||
|
@ -605,6 +648,7 @@
|
|||
geni_se_select_mode
|
||||
geni_se_tx_dma_prep
|
||||
geni_se_tx_dma_unprep
|
||||
genlmsg_multicast_allns
|
||||
genlmsg_put
|
||||
genl_register_family
|
||||
genl_unregister_family
|
||||
|
@ -626,10 +670,13 @@
|
|||
get_each_object_track
|
||||
__get_free_pages
|
||||
get_governor_parent_kobj
|
||||
get_net_ns_by_fd
|
||||
get_net_ns_by_pid
|
||||
get_option
|
||||
get_page_owner_handle
|
||||
get_pid_task
|
||||
get_random_bytes
|
||||
get_random_u16
|
||||
get_random_u32
|
||||
get_sg_io_hdr
|
||||
get_slabinfo
|
||||
|
@ -694,6 +741,9 @@
|
|||
hvc_kick
|
||||
hvc_poll
|
||||
hvc_remove
|
||||
__hw_addr_init
|
||||
__hw_addr_sync
|
||||
__hw_addr_unsync
|
||||
hwspin_lock_free
|
||||
hwspin_lock_request_specific
|
||||
__hwspin_lock_timeout
|
||||
|
@ -742,6 +792,7 @@
|
|||
idr_alloc_u32
|
||||
idr_destroy
|
||||
idr_find
|
||||
idr_for_each
|
||||
idr_get_next
|
||||
idr_preload
|
||||
idr_remove
|
||||
|
@ -750,6 +801,7 @@
|
|||
inc_node_page_state
|
||||
in_egroup_p
|
||||
__inet6_lookup_established
|
||||
inet_csk_get_port
|
||||
__inet_lookup_established
|
||||
init_iova_domain
|
||||
init_net
|
||||
|
@ -758,6 +810,7 @@
|
|||
__init_swait_queue_head
|
||||
init_task
|
||||
init_timer_key
|
||||
init_uts_ns
|
||||
init_wait_entry
|
||||
__init_waitqueue_head
|
||||
input_close_device
|
||||
|
@ -867,14 +920,19 @@
|
|||
kernel_connect
|
||||
kernel_getsockname
|
||||
kernel_kobj
|
||||
kernel_param_lock
|
||||
kernel_param_unlock
|
||||
kernel_power_off
|
||||
kernel_recvmsg
|
||||
kernel_sendmsg
|
||||
key_put
|
||||
keyring_alloc
|
||||
__kfifo_in
|
||||
__kfifo_out
|
||||
kfree
|
||||
kfree_const
|
||||
kfree_sensitive
|
||||
kfree_skb_list_reason
|
||||
kfree_skb_reason
|
||||
kill_fasync
|
||||
kimage_vaddr
|
||||
|
@ -941,11 +999,15 @@
|
|||
kthread_stop
|
||||
kthread_worker_fn
|
||||
ktime_get
|
||||
ktime_get_coarse_with_offset
|
||||
ktime_get_mono_fast_ns
|
||||
ktime_get_real_ts64
|
||||
ktime_get_seconds
|
||||
ktime_get_with_offset
|
||||
kvasprintf_const
|
||||
kvfree
|
||||
kvfree_call_rcu
|
||||
kvfree_sensitive
|
||||
kvmalloc_node
|
||||
led_mc_calc_color_components
|
||||
__list_add_valid_or_report
|
||||
|
@ -953,6 +1015,7 @@
|
|||
list_sort
|
||||
llist_add_batch
|
||||
llist_reverse_order
|
||||
__local_bh_enable_ip
|
||||
lock_sock_nested
|
||||
log_post_read_mmio
|
||||
log_post_write_mmio
|
||||
|
@ -978,6 +1041,7 @@
|
|||
memblock_end_of_DRAM
|
||||
__memcat_p
|
||||
memchr_inv
|
||||
memcmp
|
||||
memcpy
|
||||
__memcpy_fromio
|
||||
__memcpy_toio
|
||||
|
@ -999,9 +1063,9 @@
|
|||
memunmap
|
||||
migrate_swap
|
||||
__migrate_task
|
||||
mipi_dsi_attach
|
||||
mipi_dsi_dcs_set_tear_off
|
||||
mipi_dsi_dcs_write
|
||||
mipi_dsi_attach
|
||||
mipi_dsi_detach
|
||||
mipi_dsi_device_register_full
|
||||
mipi_dsi_device_unregister
|
||||
|
@ -1018,6 +1082,7 @@
|
|||
mmc_send_tuning
|
||||
__mmdrop
|
||||
mmput
|
||||
mod_delayed_work_on
|
||||
mod_node_page_state
|
||||
mod_timer
|
||||
__module_get
|
||||
|
@ -1039,13 +1104,30 @@
|
|||
mutex_trylock
|
||||
mutex_unlock
|
||||
napi_gro_flush
|
||||
napi_gro_receive
|
||||
neigh_resolve_output
|
||||
__netdev_alloc_frag_align
|
||||
__netdev_alloc_skb
|
||||
netdev_err
|
||||
netdev_info
|
||||
netdev_set_default_ethtool_ops
|
||||
netif_carrier_off
|
||||
netif_carrier_on
|
||||
netif_receive_skb
|
||||
netif_receive_skb_list
|
||||
netif_rx
|
||||
netif_tx_wake_queue
|
||||
netlink_broadcast
|
||||
netlink_register_notifier
|
||||
netlink_unicast
|
||||
netlink_unregister_notifier
|
||||
net_ns_type_operations
|
||||
net_ratelimit
|
||||
nla_find
|
||||
nla_memcpy
|
||||
__nla_parse
|
||||
nla_put
|
||||
nla_put_64bit
|
||||
nla_reserve
|
||||
nla_reserve_64bit
|
||||
__nla_validate
|
||||
|
@ -1308,9 +1390,12 @@
|
|||
proc_set_user
|
||||
proto_register
|
||||
proto_unregister
|
||||
pskb_expand_head
|
||||
__pskb_pull_tail
|
||||
___pskb_trim
|
||||
put_device
|
||||
put_iova_domain
|
||||
__put_net
|
||||
put_sg_io_hdr
|
||||
__put_task_struct
|
||||
put_unused_fd
|
||||
|
@ -1364,6 +1449,7 @@
|
|||
rb_first
|
||||
rb_insert_color
|
||||
rb_next
|
||||
rcu_barrier
|
||||
__rcu_read_lock
|
||||
__rcu_read_unlock
|
||||
rdev_get_drvdata
|
||||
|
@ -1380,10 +1466,15 @@
|
|||
register_console
|
||||
register_die_notifier
|
||||
register_ftrace_export
|
||||
register_inet6addr_notifier
|
||||
register_inetaddr_notifier
|
||||
register_kretprobe
|
||||
register_memory_notifier
|
||||
register_module_notifier
|
||||
register_netdevice
|
||||
register_netdevice_notifier
|
||||
register_netevent_notifier
|
||||
register_pernet_device
|
||||
register_pm_notifier
|
||||
register_qdisc
|
||||
register_reboot_notifier
|
||||
|
@ -1434,6 +1525,7 @@
|
|||
request_any_context_irq
|
||||
request_firmware
|
||||
request_firmware_into_buf
|
||||
request_firmware_nowait
|
||||
__request_module
|
||||
__request_percpu_irq
|
||||
request_threaded_irq
|
||||
|
@ -1443,7 +1535,23 @@
|
|||
reset_control_deassert
|
||||
reset_control_release
|
||||
return_address
|
||||
rfkill_alloc
|
||||
rfkill_blocked
|
||||
rfkill_destroy
|
||||
rfkill_register
|
||||
rfkill_resume_polling
|
||||
rfkill_set_hw_state_reason
|
||||
rfkill_unregister
|
||||
rhashtable_free_and_destroy
|
||||
rhashtable_insert_slow
|
||||
rhltable_init
|
||||
__rht_bucket_nested
|
||||
rht_bucket_nested
|
||||
rht_bucket_nested_insert
|
||||
root_task_group
|
||||
round_jiffies
|
||||
round_jiffies_relative
|
||||
round_jiffies_up
|
||||
rpmsg_poll
|
||||
rpmsg_register_device
|
||||
rpmsg_register_device_override
|
||||
|
@ -1472,8 +1580,11 @@
|
|||
rtc_time64_to_tm
|
||||
rtc_tm_to_time64
|
||||
rtc_update_irq
|
||||
rtnl_is_locked
|
||||
rtnl_lock
|
||||
rtnl_trylock
|
||||
rtnl_unicast
|
||||
rtnl_unlock
|
||||
runqueues
|
||||
scatterwalk_ffwd
|
||||
sched_clock
|
||||
|
@ -1538,6 +1649,7 @@
|
|||
sg_alloc_table
|
||||
sg_alloc_table_from_pages_segment
|
||||
sg_free_table
|
||||
sg_init_one
|
||||
sg_init_table
|
||||
sg_miter_next
|
||||
sg_miter_skip
|
||||
|
@ -1553,21 +1665,30 @@
|
|||
shmem_read_mapping_page_gfp
|
||||
show_regs
|
||||
si_meminfo
|
||||
si_swapinfo
|
||||
simple_attr_open
|
||||
simple_attr_release
|
||||
simple_open
|
||||
simple_read_from_buffer
|
||||
single_open
|
||||
single_release
|
||||
si_swapinfo
|
||||
sk_alloc
|
||||
skb_add_rx_frag
|
||||
skb_append_pagefrags
|
||||
skb_clone
|
||||
skb_clone_sk
|
||||
skb_complete_wifi_ack
|
||||
skb_copy
|
||||
skb_copy_bits
|
||||
skb_copy_datagram_from_iter
|
||||
skb_copy_datagram_iter
|
||||
skb_copy_expand
|
||||
skb_csum_hwoffload_help
|
||||
skb_dequeue
|
||||
skb_ensure_writable
|
||||
skb_free_datagram
|
||||
__skb_get_hash
|
||||
__skb_gso_segment
|
||||
__skb_pad
|
||||
skb_pull
|
||||
skb_push
|
||||
|
@ -1608,6 +1729,7 @@
|
|||
soc_device_register
|
||||
soc_device_unregister
|
||||
sock_alloc_send_pskb
|
||||
__sock_create
|
||||
sock_create_kern
|
||||
sock_gen_put
|
||||
sock_gettstamp
|
||||
|
@ -1664,10 +1786,12 @@
|
|||
strscpy_pad
|
||||
strsep
|
||||
strstr
|
||||
__sw_hweight16
|
||||
__sw_hweight32
|
||||
__sw_hweight64
|
||||
__sw_hweight8
|
||||
synchronize_irq
|
||||
synchronize_net
|
||||
synchronize_rcu
|
||||
synchronize_srcu
|
||||
synth_event_create
|
||||
|
@ -1697,6 +1821,7 @@
|
|||
system_freezable_wq
|
||||
system_highpri_wq
|
||||
system_long_wq
|
||||
system_power_efficient_wq
|
||||
system_state
|
||||
system_unbound_wq
|
||||
system_wq
|
||||
|
@ -1809,6 +1934,7 @@
|
|||
__traceiter_android_vh_ftrace_size_check
|
||||
__traceiter_android_vh_ipi_stop
|
||||
__traceiter_android_vh_jiffies_update
|
||||
__traceiter_android_vh_mmap_region
|
||||
__traceiter_android_vh_mpam_set
|
||||
__traceiter_android_vh_printk_hotplug
|
||||
__traceiter_android_vh_rproc_recovery
|
||||
|
@ -1818,6 +1944,7 @@
|
|||
__traceiter_android_vh_show_suspend_epoch_val
|
||||
__traceiter_android_vh_timer_calc_index
|
||||
__traceiter_android_vh_try_fixup_sea
|
||||
__traceiter_android_vh_try_to_unmap_one
|
||||
__traceiter_android_vh_ufs_check_int_errors
|
||||
__traceiter_android_vh_ufs_compl_command
|
||||
__traceiter_android_vh_ufs_send_command
|
||||
|
@ -1902,6 +2029,7 @@
|
|||
__tracepoint_android_vh_ftrace_size_check
|
||||
__tracepoint_android_vh_ipi_stop
|
||||
__tracepoint_android_vh_jiffies_update
|
||||
__tracepoint_android_vh_mmap_region
|
||||
__tracepoint_android_vh_mpam_set
|
||||
__tracepoint_android_vh_printk_hotplug
|
||||
__tracepoint_android_vh_rproc_recovery
|
||||
|
@ -1911,6 +2039,7 @@
|
|||
__tracepoint_android_vh_show_suspend_epoch_val
|
||||
__tracepoint_android_vh_timer_calc_index
|
||||
__tracepoint_android_vh_try_fixup_sea
|
||||
__tracepoint_android_vh_try_to_unmap_one
|
||||
__tracepoint_android_vh_ufs_check_int_errors
|
||||
__tracepoint_android_vh_ufs_compl_command
|
||||
__tracepoint_android_vh_ufs_send_command
|
||||
|
@ -2001,8 +2130,13 @@
|
|||
unregister_console
|
||||
unregister_die_notifier
|
||||
unregister_ftrace_export
|
||||
unregister_inet6addr_notifier
|
||||
unregister_inetaddr_notifier
|
||||
unregister_kretprobe
|
||||
unregister_netdevice_notifier
|
||||
unregister_netdevice_queue
|
||||
unregister_netevent_notifier
|
||||
unregister_pernet_device
|
||||
unregister_pm_notifier
|
||||
unregister_qdisc
|
||||
unregister_reboot_notifier
|
||||
|
@ -2071,6 +2205,7 @@
|
|||
vchan_init
|
||||
vchan_tx_desc_free
|
||||
vchan_tx_submit
|
||||
verify_pkcs7_signature
|
||||
vfree
|
||||
vmalloc
|
||||
vmalloc_nr_pages
|
||||
|
@ -2100,9 +2235,11 @@
|
|||
wakeup_source_register
|
||||
wakeup_source_unregister
|
||||
__warn_printk
|
||||
wireless_nlevent_flush
|
||||
ww_mutex_lock
|
||||
ww_mutex_trylock
|
||||
ww_mutex_unlock
|
||||
x509_load_certificate_list
|
||||
__xa_alloc
|
||||
__xa_alloc_cyclic
|
||||
xa_destroy
|
||||
|
@ -2119,4 +2256,3 @@
|
|||
xhci_remove_secondary_interrupter
|
||||
xhci_stop_endpoint_sync
|
||||
zap_vma_ptes
|
||||
kvfree_sensitive
|
||||
|
|
|
@ -13,8 +13,11 @@
|
|||
device_create
|
||||
device_destroy
|
||||
device_initialize
|
||||
devm_extcon_register_notifier_all
|
||||
devm_hwspin_lock_request_specific
|
||||
_dev_info
|
||||
dev_set_name
|
||||
__dynamic_netdev_dbg
|
||||
finish_wait
|
||||
fortify_panic
|
||||
idr_alloc
|
||||
|
@ -27,6 +30,7 @@
|
|||
__kmalloc
|
||||
kmalloc_caches
|
||||
kmalloc_trace
|
||||
ktime_get_boot_fast_ns
|
||||
__list_add_valid_or_report
|
||||
__list_del_entry_valid_or_report
|
||||
memcpy
|
||||
|
@ -48,6 +52,9 @@
|
|||
__rcu_read_lock
|
||||
__rcu_read_unlock
|
||||
schedule
|
||||
si_swapinfo
|
||||
snd_ctl_find_id
|
||||
snd_info_get_line
|
||||
snprintf
|
||||
__stack_chk_fail
|
||||
strcmp
|
||||
|
@ -198,9 +205,64 @@
|
|||
tracepoint_probe_unregister
|
||||
__tracepoint_sched_switch
|
||||
unregister_chrdev_region
|
||||
usb_phy_get_charger_current
|
||||
vmalloc_nr_pages
|
||||
vsscanf
|
||||
__wake_up
|
||||
__warn_printk
|
||||
|
||||
# required by apsys-dvfs.ko
|
||||
devfreq_update_status
|
||||
|
||||
# required by audio-codec.ko
|
||||
regulator_register
|
||||
|
||||
# required by audio-platform.ko
|
||||
snd_pcm_rate_bit_to_rate
|
||||
|
||||
# required by audio-misc.ko
|
||||
__kfifo_from_user_r
|
||||
__kfifo_to_user_r
|
||||
|
||||
# required by gzvm.ko
|
||||
__traceiter_android_vh_gzvm_vcpu_exit_reason
|
||||
__tracepoint_android_vh_gzvm_vcpu_exit_reason
|
||||
|
||||
# required by ims_bridge.ko
|
||||
icmp6_send
|
||||
inet_select_addr
|
||||
ip6_find_1stfragopt
|
||||
ip6_route_output_flags
|
||||
ipv6_dev_get_saddr
|
||||
ipv6_select_ident
|
||||
nf_ct_get_tuplepr
|
||||
nf_ct_invert_tuple
|
||||
xfrm_state_afinfo_get_rcu
|
||||
|
||||
# required by iolimit.ko
|
||||
blkcg_policy_register
|
||||
__traceiter_android_rvh_ctl_dirty_rate
|
||||
__tracepoint_android_rvh_ctl_dirty_rate
|
||||
|
||||
# required by ledtrig-pattern.ko
|
||||
led_get_default_pattern
|
||||
led_set_brightness
|
||||
|
||||
# required by mmc_swcq.ko
|
||||
__blk_mq_end_request
|
||||
blk_mq_run_hw_queues
|
||||
blk_queue_flag_clear
|
||||
blk_update_request
|
||||
mmc_cqe_post_req
|
||||
|
||||
# required by mmdvfs.ko
|
||||
devfreq_event_get_event
|
||||
|
||||
# required by pinctrl-sprd.ko
|
||||
pinctrl_register
|
||||
pinctrl_unregister
|
||||
pinctrl_utils_add_map_mux
|
||||
|
||||
# required by ppp_generic.ko
|
||||
add_wait_queue
|
||||
alloc_netdev_mqs
|
||||
|
@ -310,6 +372,10 @@
|
|||
timecounter_init
|
||||
timecounter_read
|
||||
|
||||
# required by regmap-hook.ko
|
||||
__traceiter_android_vh_regmap_update
|
||||
__tracepoint_android_vh_regmap_update
|
||||
|
||||
# required by rfkill.ko
|
||||
add_uevent_var
|
||||
cancel_delayed_work_sync
|
||||
|
@ -334,10 +400,134 @@
|
|||
strlen
|
||||
system_power_efficient_wq
|
||||
|
||||
# required by sc2731_charger.ko
|
||||
power_supply_get_battery_info
|
||||
power_supply_put_battery_info
|
||||
|
||||
# required by sc8546-charger.ko
|
||||
__regmap_init_i2c
|
||||
|
||||
# required by sdhci-sprd.ko
|
||||
mmc_regulator_disable_vqmmc
|
||||
mmc_regulator_enable_vqmmc
|
||||
mmc_send_status
|
||||
sdhci_enable_v4_mode
|
||||
__sdhci_read_caps
|
||||
sdhci_request
|
||||
sdhci_request_atomic
|
||||
|
||||
# required by sensorhub.ko
|
||||
iio_pollfunc_store_time
|
||||
|
||||
# required by sfp_core.ko
|
||||
nf_conntrack_find_get
|
||||
nf_ct_destroy
|
||||
pskb_trim_rcsum_slow
|
||||
rt6_lookup
|
||||
|
||||
# required by sipa-core.ko
|
||||
alarm_forward
|
||||
|
||||
# required by slhc.ko
|
||||
bcmp
|
||||
memmove
|
||||
|
||||
# required by sprdbt_tty.ko
|
||||
tty_port_link_device
|
||||
|
||||
# required by sprd_camera.ko
|
||||
of_irq_to_resource
|
||||
|
||||
# required by sprd-charger-manager.ko
|
||||
alarm_expires_remaining
|
||||
|
||||
# required by sprd-dma.ko
|
||||
of_dma_simple_xlate
|
||||
|
||||
# required by sprd-drm.ko
|
||||
drm_ioctl_kernel
|
||||
drm_send_event_timestamp_locked
|
||||
mipi_dsi_set_maximum_return_packet_size
|
||||
of_get_drm_display_mode
|
||||
regmap_get_reg_stride
|
||||
|
||||
# required by sprd_noc_trace.ko
|
||||
sysfs_unmerge_group
|
||||
|
||||
# required by sprd_pmic_adc.ko
|
||||
nvmem_cell_read_u16
|
||||
|
||||
# required by sprd_soc_thm.ko
|
||||
thermal_zone_bind_cooling_device
|
||||
thermal_zone_unbind_cooling_device
|
||||
|
||||
# required by sprd_tcpm.ko
|
||||
typec_altmode_attention
|
||||
typec_altmode_notify
|
||||
typec_altmode_update_active
|
||||
typec_altmode_vdm
|
||||
typec_find_port_data_role
|
||||
typec_find_port_power_role
|
||||
typec_find_power_role
|
||||
typec_match_altmode
|
||||
typec_partner_register_altmode
|
||||
typec_port_register_altmode
|
||||
typec_set_mode
|
||||
typec_unregister_altmode
|
||||
usb_role_switch_put
|
||||
|
||||
# required by sprd_time_sync_cp.ko
|
||||
pvclock_gtod_register_notifier
|
||||
pvclock_gtod_unregister_notifier
|
||||
|
||||
# required by sprd_usb_f_rndis.ko
|
||||
gether_cleanup
|
||||
gether_connect
|
||||
gether_disconnect
|
||||
gether_get_dev_addr
|
||||
gether_get_host_addr
|
||||
gether_get_host_addr_u8
|
||||
gether_get_ifname
|
||||
gether_get_qmult
|
||||
gether_register_netdev
|
||||
gether_set_dev_addr
|
||||
gether_set_gadget
|
||||
gether_set_host_addr
|
||||
gether_set_ifname
|
||||
gether_set_qmult
|
||||
gether_setup_name_default
|
||||
|
||||
# required by sprd-vibra.ko
|
||||
input_ff_create_memless
|
||||
|
||||
# required by sysdump.ko
|
||||
node_states
|
||||
|
||||
# required by ufs_sprd.ko
|
||||
__scsi_add_device
|
||||
scsi_test_unit_ready
|
||||
ufshcd_query_attr
|
||||
|
||||
# required by unisoc_last_kmsg.ko
|
||||
blockdev_superblock
|
||||
pcpu_nr_pages
|
||||
vm_memory_committed
|
||||
|
||||
# required by unisoc_mm_emem.ko
|
||||
get_slabinfo
|
||||
__traceiter_android_vh_kmalloc_large_alloced
|
||||
__traceiter_android_vh_slab_folio_alloced
|
||||
__tracepoint_android_vh_kmalloc_large_alloced
|
||||
__tracepoint_android_vh_slab_folio_alloced
|
||||
|
||||
# required by unisoc_multi_control.ko
|
||||
refresh_frequency_limits
|
||||
|
||||
# required by unisoc-sched.ko
|
||||
tick_nohz_get_idle_calls_cpu
|
||||
__traceiter_android_rvh_effective_cpu_util
|
||||
__tracepoint_android_rvh_effective_cpu_util
|
||||
|
||||
# required by zram.ko
|
||||
bio_add_page
|
||||
bio_alloc_bioset
|
||||
|
|
|
@ -32,6 +32,9 @@
|
|||
__traceiter_android_vh_check_folio_look_around_ref
|
||||
__traceiter_android_vh_clear_rwsem_reader_owned
|
||||
__traceiter_android_vh_clear_rwsem_writer_owned
|
||||
__traceiter_android_vh_do_anonymous_page
|
||||
__traceiter_android_vh_do_swap_page
|
||||
__traceiter_android_vh_do_wp_page
|
||||
__traceiter_android_vh_dup_task_struct
|
||||
__traceiter_android_vh_free_task
|
||||
__traceiter_android_vh_irqtime_account_process_tick
|
||||
|
@ -55,9 +58,11 @@
|
|||
__traceiter_android_vh_scheduler_tick
|
||||
__traceiter_android_vh_sd_init_unmap_multi_segment
|
||||
__traceiter_android_vh_sd_setup_unmap_multi_segment
|
||||
__traceiter_android_vh_shmem_swapin_folio
|
||||
__traceiter_android_vh_sync_txn_recvd
|
||||
__traceiter_android_vh_test_clear_look_around_ref
|
||||
__traceiter_android_vh_try_to_unmap_one
|
||||
__traceiter_android_vh_uprobes_replace_page
|
||||
__traceiter_cpu_frequency_limits
|
||||
__traceiter_sched_switch
|
||||
__traceiter_sched_waking
|
||||
|
@ -81,6 +86,9 @@
|
|||
__tracepoint_android_vh_check_folio_look_around_ref
|
||||
__tracepoint_android_vh_clear_rwsem_reader_owned
|
||||
__tracepoint_android_vh_clear_rwsem_writer_owned
|
||||
__tracepoint_android_vh_do_anonymous_page
|
||||
__tracepoint_android_vh_do_swap_page
|
||||
__tracepoint_android_vh_do_wp_page
|
||||
__tracepoint_android_vh_dup_task_struct
|
||||
__tracepoint_android_vh_free_task
|
||||
__tracepoint_android_vh_irqtime_account_process_tick
|
||||
|
@ -104,9 +112,11 @@
|
|||
__tracepoint_android_vh_scheduler_tick
|
||||
__tracepoint_android_vh_sd_init_unmap_multi_segment
|
||||
__tracepoint_android_vh_sd_setup_unmap_multi_segment
|
||||
__tracepoint_android_vh_shmem_swapin_folio
|
||||
__tracepoint_android_vh_sync_txn_recvd
|
||||
__tracepoint_android_vh_test_clear_look_around_ref
|
||||
__tracepoint_android_vh_try_to_unmap_one
|
||||
__tracepoint_android_vh_uprobes_replace_page
|
||||
__tracepoint_cpu_frequency_limits
|
||||
__tracepoint_sched_switch
|
||||
__tracepoint_sched_waking
|
||||
|
@ -140,3 +150,4 @@
|
|||
__tracepoint_android_vh_tcp_rtt_estimator
|
||||
__tracepoint_android_vh_udp_enqueue_schedule_skb
|
||||
__tracepoint_android_vh_build_skb_around
|
||||
debugfs_print_regs32
|
||||
|
|
|
@ -42,6 +42,8 @@ net/6lowpan/nhc_mobility.ko
|
|||
net/6lowpan/nhc_routing.ko
|
||||
net/6lowpan/nhc_udp.ko
|
||||
net/8021q/8021q.ko
|
||||
net/9p/9pnet.ko
|
||||
net/9p/9pnet_fd.ko
|
||||
net/bluetooth/bluetooth.ko
|
||||
net/bluetooth/hidp/hidp.ko
|
||||
net/bluetooth/rfcomm/rfcomm.ko
|
||||
|
|
|
@ -590,8 +590,8 @@ source "arch/arm/mm/Kconfig"
|
|||
|
||||
config IWMMXT
|
||||
bool "Enable iWMMXt support"
|
||||
depends on CPU_XSCALE || CPU_XSC3 || CPU_MOHAWK || CPU_PJ4 || CPU_PJ4B
|
||||
default y if PXA27x || PXA3xx || ARCH_MMP || CPU_PJ4 || CPU_PJ4B
|
||||
depends on CPU_XSCALE || CPU_XSC3 || CPU_MOHAWK
|
||||
default y if PXA27x || PXA3xx || ARCH_MMP
|
||||
help
|
||||
Enable support for iWMMXt context switching at run time if
|
||||
running on a CPU that supports it.
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
&twsi1 {
|
||||
status = "okay";
|
||||
pmic: max8925@3c {
|
||||
compatible = "maxium,max8925";
|
||||
compatible = "maxim,max8925";
|
||||
reg = <0x3c>;
|
||||
interrupts = <1>;
|
||||
interrupt-parent = <&intcmux4>;
|
||||
|
|
|
@ -210,6 +210,7 @@
|
|||
remote-endpoint = <&mipi_from_sensor>;
|
||||
clock-lanes = <0>;
|
||||
data-lanes = <1>;
|
||||
link-frequencies = /bits/ 64 <330000000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -732,14 +732,20 @@
|
|||
status = "disabled";
|
||||
|
||||
ports {
|
||||
hdmi_in: port {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
hdmi_in_vop: endpoint@0 {
|
||||
reg = <0>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
hdmi_in: port@0 {
|
||||
reg = <0>;
|
||||
|
||||
hdmi_in_vop: endpoint {
|
||||
remote-endpoint = <&vop_out_hdmi>;
|
||||
};
|
||||
};
|
||||
|
||||
hdmi_out: port@1 {
|
||||
reg = <1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -1231,27 +1231,37 @@
|
|||
compatible = "rockchip,rk3288-dw-hdmi";
|
||||
reg = <0x0 0xff980000 0x0 0x20000>;
|
||||
reg-io-width = <4>;
|
||||
#sound-dai-cells = <0>;
|
||||
rockchip,grf = <&grf>;
|
||||
interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cru PCLK_HDMI_CTRL>, <&cru SCLK_HDMI_HDCP>, <&cru SCLK_HDMI_CEC>;
|
||||
clock-names = "iahb", "isfr", "cec";
|
||||
power-domains = <&power RK3288_PD_VIO>;
|
||||
rockchip,grf = <&grf>;
|
||||
#sound-dai-cells = <0>;
|
||||
status = "disabled";
|
||||
|
||||
ports {
|
||||
hdmi_in: port {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
hdmi_in: port@0 {
|
||||
reg = <0>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
hdmi_in_vopb: endpoint@0 {
|
||||
reg = <0>;
|
||||
remote-endpoint = <&vopb_out_hdmi>;
|
||||
};
|
||||
|
||||
hdmi_in_vopl: endpoint@1 {
|
||||
reg = <1>;
|
||||
remote-endpoint = <&vopl_out_hdmi>;
|
||||
};
|
||||
};
|
||||
|
||||
hdmi_out: port@1 {
|
||||
reg = <1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -367,6 +367,7 @@ CONFIG_FB_MXC_DCIC=y
|
|||
CONFIG_LCD_CLASS_DEVICE=y
|
||||
CONFIG_LCD_L4F00242T03=y
|
||||
CONFIG_LCD_PLATFORM=y
|
||||
CONFIG_BACKLIGHT_CLASS_DEVICE=y
|
||||
CONFIG_BACKLIGHT_PWM=y
|
||||
CONFIG_BACKLIGHT_GPIO=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
|
|
14
arch/arm/include/asm/mman.h
Normal file
14
arch/arm/include/asm/mman.h
Normal file
|
@ -0,0 +1,14 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef __ASM_MMAN_H__
|
||||
#define __ASM_MMAN_H__
|
||||
|
||||
#include <asm/system_info.h>
|
||||
#include <uapi/asm/mman.h>
|
||||
|
||||
static inline bool arch_memory_deny_write_exec_supported(void)
|
||||
{
|
||||
return cpu_architecture() >= CPU_ARCH_ARMv6;
|
||||
}
|
||||
#define arch_memory_deny_write_exec_supported arch_memory_deny_write_exec_supported
|
||||
|
||||
#endif /* __ASM_MMAN_H__ */
|
|
@ -75,8 +75,6 @@ obj-$(CONFIG_HAVE_HW_BREAKPOINT) += hw_breakpoint.o
|
|||
obj-$(CONFIG_CPU_XSCALE) += xscale-cp0.o
|
||||
obj-$(CONFIG_CPU_XSC3) += xscale-cp0.o
|
||||
obj-$(CONFIG_CPU_MOHAWK) += xscale-cp0.o
|
||||
obj-$(CONFIG_CPU_PJ4) += pj4-cp0.o
|
||||
obj-$(CONFIG_CPU_PJ4B) += pj4-cp0.o
|
||||
obj-$(CONFIG_IWMMXT) += iwmmxt.o
|
||||
obj-$(CONFIG_PERF_EVENTS) += perf_regs.o perf_callchain.o
|
||||
obj-$(CONFIG_HW_PERF_EVENTS) += perf_event_xscale.o perf_event_v6.o \
|
||||
|
|
|
@ -18,18 +18,6 @@
|
|||
#include <asm/assembler.h>
|
||||
#include "iwmmxt.h"
|
||||
|
||||
#if defined(CONFIG_CPU_PJ4) || defined(CONFIG_CPU_PJ4B)
|
||||
#define PJ4(code...) code
|
||||
#define XSC(code...)
|
||||
#elif defined(CONFIG_CPU_MOHAWK) || \
|
||||
defined(CONFIG_CPU_XSC3) || \
|
||||
defined(CONFIG_CPU_XSCALE)
|
||||
#define PJ4(code...)
|
||||
#define XSC(code...) code
|
||||
#else
|
||||
#error "Unsupported iWMMXt architecture"
|
||||
#endif
|
||||
|
||||
#define MMX_WR0 (0x00)
|
||||
#define MMX_WR1 (0x08)
|
||||
#define MMX_WR2 (0x10)
|
||||
|
@ -81,17 +69,13 @@ ENDPROC(iwmmxt_undef_handler)
|
|||
ENTRY(iwmmxt_task_enable)
|
||||
inc_preempt_count r10, r3
|
||||
|
||||
XSC(mrc p15, 0, r2, c15, c1, 0)
|
||||
PJ4(mrc p15, 0, r2, c1, c0, 2)
|
||||
mrc p15, 0, r2, c15, c1, 0
|
||||
@ CP0 and CP1 accessible?
|
||||
XSC(tst r2, #0x3)
|
||||
PJ4(tst r2, #0xf)
|
||||
tst r2, #0x3
|
||||
bne 4f @ if so no business here
|
||||
@ enable access to CP0 and CP1
|
||||
XSC(orr r2, r2, #0x3)
|
||||
XSC(mcr p15, 0, r2, c15, c1, 0)
|
||||
PJ4(orr r2, r2, #0xf)
|
||||
PJ4(mcr p15, 0, r2, c1, c0, 2)
|
||||
orr r2, r2, #0x3
|
||||
mcr p15, 0, r2, c15, c1, 0
|
||||
|
||||
ldr r3, =concan_owner
|
||||
ldr r2, [r0, #S_PC] @ current task pc value
|
||||
|
@ -218,12 +202,9 @@ ENTRY(iwmmxt_task_disable)
|
|||
bne 1f @ no: quit
|
||||
|
||||
@ enable access to CP0 and CP1
|
||||
XSC(mrc p15, 0, r4, c15, c1, 0)
|
||||
XSC(orr r4, r4, #0x3)
|
||||
XSC(mcr p15, 0, r4, c15, c1, 0)
|
||||
PJ4(mrc p15, 0, r4, c1, c0, 2)
|
||||
PJ4(orr r4, r4, #0xf)
|
||||
PJ4(mcr p15, 0, r4, c1, c0, 2)
|
||||
mrc p15, 0, r4, c15, c1, 0
|
||||
orr r4, r4, #0x3
|
||||
mcr p15, 0, r4, c15, c1, 0
|
||||
|
||||
mov r0, #0 @ nothing to load
|
||||
str r0, [r3] @ no more current owner
|
||||
|
@ -232,10 +213,8 @@ ENTRY(iwmmxt_task_disable)
|
|||
bl concan_save
|
||||
|
||||
@ disable access to CP0 and CP1
|
||||
XSC(bic r4, r4, #0x3)
|
||||
XSC(mcr p15, 0, r4, c15, c1, 0)
|
||||
PJ4(bic r4, r4, #0xf)
|
||||
PJ4(mcr p15, 0, r4, c1, c0, 2)
|
||||
bic r4, r4, #0x3
|
||||
mcr p15, 0, r4, c15, c1, 0
|
||||
|
||||
mrc p15, 0, r2, c2, c0, 0
|
||||
mov r2, r2 @ cpwait
|
||||
|
@ -330,11 +309,9 @@ ENDPROC(iwmmxt_task_restore)
|
|||
*/
|
||||
ENTRY(iwmmxt_task_switch)
|
||||
|
||||
XSC(mrc p15, 0, r1, c15, c1, 0)
|
||||
PJ4(mrc p15, 0, r1, c1, c0, 2)
|
||||
mrc p15, 0, r1, c15, c1, 0
|
||||
@ CP0 and CP1 accessible?
|
||||
XSC(tst r1, #0x3)
|
||||
PJ4(tst r1, #0xf)
|
||||
tst r1, #0x3
|
||||
bne 1f @ yes: block them for next task
|
||||
|
||||
ldr r2, =concan_owner
|
||||
|
@ -344,10 +321,8 @@ ENTRY(iwmmxt_task_switch)
|
|||
retne lr @ no: leave Concan disabled
|
||||
|
||||
1: @ flip Concan access
|
||||
XSC(eor r1, r1, #0x3)
|
||||
XSC(mcr p15, 0, r1, c15, c1, 0)
|
||||
PJ4(eor r1, r1, #0xf)
|
||||
PJ4(mcr p15, 0, r1, c1, c0, 2)
|
||||
eor r1, r1, #0x3
|
||||
mcr p15, 0, r1, c15, c1, 0
|
||||
|
||||
mrc p15, 0, r1, c2, c0, 0
|
||||
sub pc, lr, r1, lsr #32 @ cpwait and return
|
||||
|
|
|
@ -1,135 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* linux/arch/arm/kernel/pj4-cp0.c
|
||||
*
|
||||
* PJ4 iWMMXt coprocessor context switching and handling
|
||||
*
|
||||
* Copyright (c) 2010 Marvell International Inc.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/signal.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
#include <asm/thread_notify.h>
|
||||
#include <asm/cputype.h>
|
||||
|
||||
static int iwmmxt_do(struct notifier_block *self, unsigned long cmd, void *t)
|
||||
{
|
||||
struct thread_info *thread = t;
|
||||
|
||||
switch (cmd) {
|
||||
case THREAD_NOTIFY_FLUSH:
|
||||
/*
|
||||
* flush_thread() zeroes thread->fpstate, so no need
|
||||
* to do anything here.
|
||||
*
|
||||
* FALLTHROUGH: Ensure we don't try to overwrite our newly
|
||||
* initialised state information on the first fault.
|
||||
*/
|
||||
|
||||
case THREAD_NOTIFY_EXIT:
|
||||
iwmmxt_task_release(thread);
|
||||
break;
|
||||
|
||||
case THREAD_NOTIFY_SWITCH:
|
||||
iwmmxt_task_switch(thread);
|
||||
break;
|
||||
}
|
||||
|
||||
return NOTIFY_DONE;
|
||||
}
|
||||
|
||||
static struct notifier_block __maybe_unused iwmmxt_notifier_block = {
|
||||
.notifier_call = iwmmxt_do,
|
||||
};
|
||||
|
||||
|
||||
static u32 __init pj4_cp_access_read(void)
|
||||
{
|
||||
u32 value;
|
||||
|
||||
__asm__ __volatile__ (
|
||||
"mrc p15, 0, %0, c1, c0, 2\n\t"
|
||||
: "=r" (value));
|
||||
return value;
|
||||
}
|
||||
|
||||
static void __init pj4_cp_access_write(u32 value)
|
||||
{
|
||||
u32 temp;
|
||||
|
||||
__asm__ __volatile__ (
|
||||
"mcr p15, 0, %1, c1, c0, 2\n\t"
|
||||
#ifdef CONFIG_THUMB2_KERNEL
|
||||
"isb\n\t"
|
||||
#else
|
||||
"mrc p15, 0, %0, c1, c0, 2\n\t"
|
||||
"mov %0, %0\n\t"
|
||||
"sub pc, pc, #4\n\t"
|
||||
#endif
|
||||
: "=r" (temp) : "r" (value));
|
||||
}
|
||||
|
||||
static int __init pj4_get_iwmmxt_version(void)
|
||||
{
|
||||
u32 cp_access, wcid;
|
||||
|
||||
cp_access = pj4_cp_access_read();
|
||||
pj4_cp_access_write(cp_access | 0xf);
|
||||
|
||||
/* check if coprocessor 0 and 1 are available */
|
||||
if ((pj4_cp_access_read() & 0xf) != 0xf) {
|
||||
pj4_cp_access_write(cp_access);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
/* read iWMMXt coprocessor id register p1, c0 */
|
||||
__asm__ __volatile__ ("mrc p1, 0, %0, c0, c0, 0\n" : "=r" (wcid));
|
||||
|
||||
pj4_cp_access_write(cp_access);
|
||||
|
||||
/* iWMMXt v1 */
|
||||
if ((wcid & 0xffffff00) == 0x56051000)
|
||||
return 1;
|
||||
/* iWMMXt v2 */
|
||||
if ((wcid & 0xffffff00) == 0x56052000)
|
||||
return 2;
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Disable CP0/CP1 on boot, and let call_fpe() and the iWMMXt lazy
|
||||
* switch code handle iWMMXt context switching.
|
||||
*/
|
||||
static int __init pj4_cp0_init(void)
|
||||
{
|
||||
u32 __maybe_unused cp_access;
|
||||
int vers;
|
||||
|
||||
if (!cpu_is_pj4())
|
||||
return 0;
|
||||
|
||||
vers = pj4_get_iwmmxt_version();
|
||||
if (vers < 0)
|
||||
return 0;
|
||||
|
||||
#ifndef CONFIG_IWMMXT
|
||||
pr_info("PJ4 iWMMXt coprocessor detected, but kernel support is missing.\n");
|
||||
#else
|
||||
cp_access = pj4_cp_access_read() & ~0xf;
|
||||
pj4_cp_access_write(cp_access);
|
||||
|
||||
pr_info("PJ4 iWMMXt v%d coprocessor enabled.\n", vers);
|
||||
elf_hwcap |= HWCAP_IWMMXT;
|
||||
thread_register_notifier(&iwmmxt_notifier_block);
|
||||
register_iwmmxt_undef_handler();
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
late_initcall(pj4_cp0_init);
|
|
@ -79,10 +79,8 @@ static struct musb_hdrc_platform_data tusb_data = {
|
|||
static struct gpiod_lookup_table tusb_gpio_table = {
|
||||
.dev_id = "musb-tusb",
|
||||
.table = {
|
||||
GPIO_LOOKUP("gpio-0-15", 0, "enable",
|
||||
GPIO_ACTIVE_HIGH),
|
||||
GPIO_LOOKUP("gpio-48-63", 10, "int",
|
||||
GPIO_ACTIVE_HIGH),
|
||||
GPIO_LOOKUP("gpio-0-31", 0, "enable", GPIO_ACTIVE_HIGH),
|
||||
GPIO_LOOKUP("gpio-32-63", 26, "int", GPIO_ACTIVE_HIGH),
|
||||
{ }
|
||||
},
|
||||
};
|
||||
|
@ -140,12 +138,11 @@ static int slot1_cover_open;
|
|||
static int slot2_cover_open;
|
||||
static struct device *mmc_device;
|
||||
|
||||
static struct gpiod_lookup_table nokia8xx_mmc_gpio_table = {
|
||||
static struct gpiod_lookup_table nokia800_mmc_gpio_table = {
|
||||
.dev_id = "mmci-omap.0",
|
||||
.table = {
|
||||
/* Slot switch, GPIO 96 */
|
||||
GPIO_LOOKUP("gpio-80-111", 16,
|
||||
"switch", GPIO_ACTIVE_HIGH),
|
||||
GPIO_LOOKUP("gpio-96-127", 0, "switch", GPIO_ACTIVE_HIGH),
|
||||
{ }
|
||||
},
|
||||
};
|
||||
|
@ -153,12 +150,12 @@ static struct gpiod_lookup_table nokia8xx_mmc_gpio_table = {
|
|||
static struct gpiod_lookup_table nokia810_mmc_gpio_table = {
|
||||
.dev_id = "mmci-omap.0",
|
||||
.table = {
|
||||
/* Slot switch, GPIO 96 */
|
||||
GPIO_LOOKUP("gpio-96-127", 0, "switch", GPIO_ACTIVE_HIGH),
|
||||
/* Slot index 1, VSD power, GPIO 23 */
|
||||
GPIO_LOOKUP_IDX("gpio-16-31", 7,
|
||||
"vsd", 1, GPIO_ACTIVE_HIGH),
|
||||
GPIO_LOOKUP_IDX("gpio-0-31", 23, "vsd", 1, GPIO_ACTIVE_HIGH),
|
||||
/* Slot index 1, VIO power, GPIO 9 */
|
||||
GPIO_LOOKUP_IDX("gpio-0-15", 9,
|
||||
"vio", 1, GPIO_ACTIVE_HIGH),
|
||||
GPIO_LOOKUP_IDX("gpio-0-31", 9, "vio", 1, GPIO_ACTIVE_HIGH),
|
||||
{ }
|
||||
},
|
||||
};
|
||||
|
@ -415,8 +412,6 @@ static struct omap_mmc_platform_data *mmc_data[OMAP24XX_NR_MMC];
|
|||
|
||||
static void __init n8x0_mmc_init(void)
|
||||
{
|
||||
gpiod_add_lookup_table(&nokia8xx_mmc_gpio_table);
|
||||
|
||||
if (board_is_n810()) {
|
||||
mmc1_data.slots[0].name = "external";
|
||||
|
||||
|
@ -429,6 +424,8 @@ static void __init n8x0_mmc_init(void)
|
|||
mmc1_data.slots[1].name = "internal";
|
||||
mmc1_data.slots[1].ban_openended = 1;
|
||||
gpiod_add_lookup_table(&nokia810_mmc_gpio_table);
|
||||
} else {
|
||||
gpiod_add_lookup_table(&nokia800_mmc_gpio_table);
|
||||
}
|
||||
|
||||
mmc1_data.nr_slots = 2;
|
||||
|
|
|
@ -275,9 +275,19 @@ static struct platform_device pandora_backlight = {
|
|||
.id = -1,
|
||||
};
|
||||
|
||||
static struct gpiod_lookup_table pandora_soc_audio_gpios = {
|
||||
.dev_id = "soc-audio",
|
||||
.table = {
|
||||
GPIO_LOOKUP("gpio-112-127", 6, "dac", GPIO_ACTIVE_HIGH),
|
||||
GPIO_LOOKUP("gpio-0-15", 14, "amp", GPIO_ACTIVE_HIGH),
|
||||
{ }
|
||||
},
|
||||
};
|
||||
|
||||
static void __init omap3_pandora_legacy_init(void)
|
||||
{
|
||||
platform_device_register(&pandora_backlight);
|
||||
gpiod_add_lookup_table(&pandora_soc_audio_gpios);
|
||||
}
|
||||
#endif /* CONFIG_ARCH_OMAP3 */
|
||||
|
||||
|
|
|
@ -296,6 +296,9 @@ void __sync_icache_dcache(pte_t pteval)
|
|||
return;
|
||||
|
||||
folio = page_folio(pfn_to_page(pfn));
|
||||
if (folio_test_reserved(folio))
|
||||
return;
|
||||
|
||||
if (cache_is_vipt_aliasing())
|
||||
mapping = folio_flush_mapping(folio);
|
||||
else
|
||||
|
|
|
@ -62,8 +62,8 @@ dma_subsys: bus@5a000000 {
|
|||
#size-cells = <0>;
|
||||
interrupts = <GIC_SPI 336 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-parent = <&gic>;
|
||||
clocks = <&spi0_lpcg 0>,
|
||||
<&spi0_lpcg 1>;
|
||||
clocks = <&spi0_lpcg IMX_LPCG_CLK_0>,
|
||||
<&spi0_lpcg IMX_LPCG_CLK_4>;
|
||||
clock-names = "per", "ipg";
|
||||
assigned-clocks = <&clk IMX_SC_R_SPI_0 IMX_SC_PM_CLK_PER>;
|
||||
assigned-clock-rates = <60000000>;
|
||||
|
@ -80,8 +80,8 @@ dma_subsys: bus@5a000000 {
|
|||
#size-cells = <0>;
|
||||
interrupts = <GIC_SPI 337 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-parent = <&gic>;
|
||||
clocks = <&spi1_lpcg 0>,
|
||||
<&spi1_lpcg 1>;
|
||||
clocks = <&spi1_lpcg IMX_LPCG_CLK_0>,
|
||||
<&spi1_lpcg IMX_LPCG_CLK_4>;
|
||||
clock-names = "per", "ipg";
|
||||
assigned-clocks = <&clk IMX_SC_R_SPI_1 IMX_SC_PM_CLK_PER>;
|
||||
assigned-clock-rates = <60000000>;
|
||||
|
@ -98,8 +98,8 @@ dma_subsys: bus@5a000000 {
|
|||
#size-cells = <0>;
|
||||
interrupts = <GIC_SPI 338 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-parent = <&gic>;
|
||||
clocks = <&spi2_lpcg 0>,
|
||||
<&spi2_lpcg 1>;
|
||||
clocks = <&spi2_lpcg IMX_LPCG_CLK_0>,
|
||||
<&spi2_lpcg IMX_LPCG_CLK_4>;
|
||||
clock-names = "per", "ipg";
|
||||
assigned-clocks = <&clk IMX_SC_R_SPI_2 IMX_SC_PM_CLK_PER>;
|
||||
assigned-clock-rates = <60000000>;
|
||||
|
@ -116,8 +116,8 @@ dma_subsys: bus@5a000000 {
|
|||
#size-cells = <0>;
|
||||
interrupts = <GIC_SPI 339 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-parent = <&gic>;
|
||||
clocks = <&spi3_lpcg 0>,
|
||||
<&spi3_lpcg 1>;
|
||||
clocks = <&spi3_lpcg IMX_LPCG_CLK_0>,
|
||||
<&spi3_lpcg IMX_LPCG_CLK_4>;
|
||||
clock-names = "per", "ipg";
|
||||
assigned-clocks = <&clk IMX_SC_R_SPI_3 IMX_SC_PM_CLK_PER>;
|
||||
assigned-clock-rates = <60000000>;
|
||||
|
@ -360,8 +360,8 @@ dma_subsys: bus@5a000000 {
|
|||
reg = <0x5a880000 0x10000>;
|
||||
interrupts = <GIC_SPI 240 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-parent = <&gic>;
|
||||
clocks = <&adc0_lpcg 0>,
|
||||
<&adc0_lpcg 1>;
|
||||
clocks = <&adc0_lpcg IMX_LPCG_CLK_0>,
|
||||
<&adc0_lpcg IMX_LPCG_CLK_4>;
|
||||
clock-names = "per", "ipg";
|
||||
assigned-clocks = <&clk IMX_SC_R_ADC_0 IMX_SC_PM_CLK_PER>;
|
||||
assigned-clock-rates = <24000000>;
|
||||
|
@ -375,8 +375,8 @@ dma_subsys: bus@5a000000 {
|
|||
reg = <0x5a890000 0x10000>;
|
||||
interrupts = <GIC_SPI 241 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-parent = <&gic>;
|
||||
clocks = <&adc1_lpcg 0>,
|
||||
<&adc1_lpcg 1>;
|
||||
clocks = <&adc1_lpcg IMX_LPCG_CLK_0>,
|
||||
<&adc1_lpcg IMX_LPCG_CLK_4>;
|
||||
clock-names = "per", "ipg";
|
||||
assigned-clocks = <&clk IMX_SC_R_ADC_1 IMX_SC_PM_CLK_PER>;
|
||||
assigned-clock-rates = <24000000>;
|
||||
|
@ -389,8 +389,8 @@ dma_subsys: bus@5a000000 {
|
|||
reg = <0x5a8d0000 0x10000>;
|
||||
interrupts = <GIC_SPI 235 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-parent = <&gic>;
|
||||
clocks = <&can0_lpcg 1>,
|
||||
<&can0_lpcg 0>;
|
||||
clocks = <&can0_lpcg IMX_LPCG_CLK_4>,
|
||||
<&can0_lpcg IMX_LPCG_CLK_0>;
|
||||
clock-names = "ipg", "per";
|
||||
assigned-clocks = <&clk IMX_SC_R_CAN_0 IMX_SC_PM_CLK_PER>;
|
||||
assigned-clock-rates = <40000000>;
|
||||
|
@ -410,8 +410,8 @@ dma_subsys: bus@5a000000 {
|
|||
* CAN1 shares CAN0's clock and to enable CAN0's clock it
|
||||
* has to be powered on.
|
||||
*/
|
||||
clocks = <&can0_lpcg 1>,
|
||||
<&can0_lpcg 0>;
|
||||
clocks = <&can0_lpcg IMX_LPCG_CLK_4>,
|
||||
<&can0_lpcg IMX_LPCG_CLK_0>;
|
||||
clock-names = "ipg", "per";
|
||||
assigned-clocks = <&clk IMX_SC_R_CAN_0 IMX_SC_PM_CLK_PER>;
|
||||
assigned-clock-rates = <40000000>;
|
||||
|
@ -431,8 +431,8 @@ dma_subsys: bus@5a000000 {
|
|||
* CAN2 shares CAN0's clock and to enable CAN0's clock it
|
||||
* has to be powered on.
|
||||
*/
|
||||
clocks = <&can0_lpcg 1>,
|
||||
<&can0_lpcg 0>;
|
||||
clocks = <&can0_lpcg IMX_LPCG_CLK_4>,
|
||||
<&can0_lpcg IMX_LPCG_CLK_0>;
|
||||
clock-names = "ipg", "per";
|
||||
assigned-clocks = <&clk IMX_SC_R_CAN_0 IMX_SC_PM_CLK_PER>;
|
||||
assigned-clock-rates = <40000000>;
|
||||
|
|
|
@ -32,8 +32,8 @@ lsio_subsys: bus@5d000000 {
|
|||
compatible = "fsl,imx27-pwm";
|
||||
reg = <0x5d000000 0x10000>;
|
||||
clock-names = "ipg", "per";
|
||||
clocks = <&pwm0_lpcg 4>,
|
||||
<&pwm0_lpcg 1>;
|
||||
clocks = <&pwm0_lpcg IMX_LPCG_CLK_6>,
|
||||
<&pwm0_lpcg IMX_LPCG_CLK_1>;
|
||||
assigned-clocks = <&clk IMX_SC_R_PWM_0 IMX_SC_PM_CLK_PER>;
|
||||
assigned-clock-rates = <24000000>;
|
||||
#pwm-cells = <3>;
|
||||
|
@ -45,8 +45,8 @@ lsio_subsys: bus@5d000000 {
|
|||
compatible = "fsl,imx27-pwm";
|
||||
reg = <0x5d010000 0x10000>;
|
||||
clock-names = "ipg", "per";
|
||||
clocks = <&pwm1_lpcg 4>,
|
||||
<&pwm1_lpcg 1>;
|
||||
clocks = <&pwm1_lpcg IMX_LPCG_CLK_6>,
|
||||
<&pwm1_lpcg IMX_LPCG_CLK_1>;
|
||||
assigned-clocks = <&clk IMX_SC_R_PWM_1 IMX_SC_PM_CLK_PER>;
|
||||
assigned-clock-rates = <24000000>;
|
||||
#pwm-cells = <3>;
|
||||
|
@ -58,8 +58,8 @@ lsio_subsys: bus@5d000000 {
|
|||
compatible = "fsl,imx27-pwm";
|
||||
reg = <0x5d020000 0x10000>;
|
||||
clock-names = "ipg", "per";
|
||||
clocks = <&pwm2_lpcg 4>,
|
||||
<&pwm2_lpcg 1>;
|
||||
clocks = <&pwm2_lpcg IMX_LPCG_CLK_6>,
|
||||
<&pwm2_lpcg IMX_LPCG_CLK_1>;
|
||||
assigned-clocks = <&clk IMX_SC_R_PWM_2 IMX_SC_PM_CLK_PER>;
|
||||
assigned-clock-rates = <24000000>;
|
||||
#pwm-cells = <3>;
|
||||
|
@ -71,8 +71,8 @@ lsio_subsys: bus@5d000000 {
|
|||
compatible = "fsl,imx27-pwm";
|
||||
reg = <0x5d030000 0x10000>;
|
||||
clock-names = "ipg", "per";
|
||||
clocks = <&pwm3_lpcg 4>,
|
||||
<&pwm3_lpcg 1>;
|
||||
clocks = <&pwm3_lpcg IMX_LPCG_CLK_6>,
|
||||
<&pwm3_lpcg IMX_LPCG_CLK_1>;
|
||||
assigned-clocks = <&clk IMX_SC_R_PWM_3 IMX_SC_PM_CLK_PER>;
|
||||
assigned-clock-rates = <24000000>;
|
||||
#pwm-cells = <3>;
|
||||
|
|
|
@ -92,15 +92,15 @@
|
|||
};
|
||||
|
||||
&flexcan2 {
|
||||
clocks = <&can1_lpcg 1>,
|
||||
<&can1_lpcg 0>;
|
||||
clocks = <&can1_lpcg IMX_LPCG_CLK_4>,
|
||||
<&can1_lpcg IMX_LPCG_CLK_0>;
|
||||
assigned-clocks = <&clk IMX_SC_R_CAN_1 IMX_SC_PM_CLK_PER>;
|
||||
fsl,clk-source = /bits/ 8 <1>;
|
||||
};
|
||||
|
||||
&flexcan3 {
|
||||
clocks = <&can2_lpcg 1>,
|
||||
<&can2_lpcg 0>;
|
||||
clocks = <&can2_lpcg IMX_LPCG_CLK_4>,
|
||||
<&can2_lpcg IMX_LPCG_CLK_0>;
|
||||
assigned-clocks = <&clk IMX_SC_R_CAN_2 IMX_SC_PM_CLK_PER>;
|
||||
fsl,clk-source = /bits/ 8 <1>;
|
||||
};
|
||||
|
|
|
@ -970,6 +970,8 @@ ap_spi_fp: &spi10 {
|
|||
vddrf-supply = <&pp1300_l2c>;
|
||||
vddch0-supply = <&pp3300_l10c>;
|
||||
max-speed = <3200000>;
|
||||
|
||||
qcom,local-bd-address-broken;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -2098,8 +2098,16 @@
|
|||
ranges = <0x01000000 0x0 0x00000000 0x0 0x40200000 0x0 0x100000>,
|
||||
<0x02000000 0x0 0x40300000 0x0 0x40300000 0x0 0x1fd00000>;
|
||||
|
||||
interrupts = <GIC_SPI 307 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "msi";
|
||||
interrupts = <GIC_SPI 307 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 308 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 309 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 312 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 313 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 314 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 374 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 375 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "msi0", "msi1", "msi2", "msi3",
|
||||
"msi4", "msi5", "msi6", "msi7";
|
||||
#interrupt-cells = <1>;
|
||||
interrupt-map-mask = <0 0 0 0x7>;
|
||||
interrupt-map = <0 0 0 1 &intc 0 0 0 434 IRQ_TYPE_LEVEL_HIGH>,
|
||||
|
|
|
@ -721,6 +721,8 @@
|
|||
};
|
||||
|
||||
&pcie4 {
|
||||
max-link-speed = <2>;
|
||||
|
||||
perst-gpios = <&tlmm 141 GPIO_ACTIVE_LOW>;
|
||||
wake-gpios = <&tlmm 139 GPIO_ACTIVE_LOW>;
|
||||
|
||||
|
|
|
@ -743,7 +743,7 @@
|
|||
wcd_tx: codec@0,3 {
|
||||
compatible = "sdw20217010d00";
|
||||
reg = <0 3>;
|
||||
qcom,tx-port-mapping = <1 1 2 3>;
|
||||
qcom,tx-port-mapping = <2 2 3 4>;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -835,7 +835,7 @@
|
|||
wcd_tx: codec@0,3 {
|
||||
compatible = "sdw20217010d00";
|
||||
reg = <0 3>;
|
||||
qcom,tx-port-mapping = <1 1 2 3>;
|
||||
qcom,tx-port-mapping = <2 2 3 4>;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -743,11 +743,20 @@
|
|||
status = "disabled";
|
||||
|
||||
ports {
|
||||
hdmi_in: port {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
hdmi_in: port@0 {
|
||||
reg = <0>;
|
||||
|
||||
hdmi_in_vop: endpoint {
|
||||
remote-endpoint = <&vop_out_hdmi>;
|
||||
};
|
||||
};
|
||||
|
||||
hdmi_out: port@1 {
|
||||
reg = <1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -1953,6 +1953,7 @@
|
|||
hdmi: hdmi@ff940000 {
|
||||
compatible = "rockchip,rk3399-dw-hdmi";
|
||||
reg = <0x0 0xff940000 0x0 0x20000>;
|
||||
reg-io-width = <4>;
|
||||
interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||
clocks = <&cru PCLK_HDMI_CTRL>,
|
||||
<&cru SCLK_HDMI_SFR>,
|
||||
|
@ -1961,13 +1962,16 @@
|
|||
<&cru PLL_VPLL>;
|
||||
clock-names = "iahb", "isfr", "cec", "grf", "ref";
|
||||
power-domains = <&power RK3399_PD_HDCP>;
|
||||
reg-io-width = <4>;
|
||||
rockchip,grf = <&grf>;
|
||||
#sound-dai-cells = <0>;
|
||||
status = "disabled";
|
||||
|
||||
ports {
|
||||
hdmi_in: port {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
hdmi_in: port@0 {
|
||||
reg = <0>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
|
@ -1980,6 +1984,10 @@
|
|||
remote-endpoint = <&vopl_out_hdmi>;
|
||||
};
|
||||
};
|
||||
|
||||
hdmi_out: port@1 {
|
||||
reg = <1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -69,6 +69,8 @@ CONFIG_CMDLINE_EXTEND=y
|
|||
CONFIG_PM_WAKELOCKS=y
|
||||
CONFIG_PM_WAKELOCKS_LIMIT=0
|
||||
# CONFIG_PM_WAKELOCKS_GC is not set
|
||||
CONFIG_PM_DEBUG=y
|
||||
CONFIG_PM_ADVANCED_DEBUG=y
|
||||
CONFIG_ENERGY_MODEL=y
|
||||
CONFIG_CPU_IDLE=y
|
||||
CONFIG_CPU_IDLE_GOV_MENU=y
|
||||
|
@ -126,14 +128,12 @@ CONFIG_LRU_GEN=y
|
|||
CONFIG_LRU_GEN_ENABLED=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_XFRM_USER=y
|
||||
CONFIG_XFRM_INTERFACE=y
|
||||
CONFIG_XFRM_MIGRATE=y
|
||||
CONFIG_XFRM_STATISTICS=y
|
||||
CONFIG_NET_KEY=y
|
||||
CONFIG_XDP_SOCKETS=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
CONFIG_IP_ADVANCED_ROUTER=y
|
||||
CONFIG_IP_MULTIPLE_TABLES=y
|
||||
|
@ -284,6 +284,7 @@ CONFIG_BT_HCIUART_LL=y
|
|||
CONFIG_BT_HCIUART_BCM=y
|
||||
CONFIG_BT_HCIUART_QCA=y
|
||||
CONFIG_RFKILL=m
|
||||
CONFIG_NET_9P=m
|
||||
CONFIG_NFC=m
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCIEPORTBUS=y
|
||||
|
|
|
@ -154,12 +154,18 @@ static inline unsigned long get_trans_granule(void)
|
|||
#define MAX_TLBI_RANGE_PAGES __TLBI_RANGE_PAGES(31, 3)
|
||||
|
||||
/*
|
||||
* Generate 'num' values from -1 to 30 with -1 rejected by the
|
||||
* __flush_tlb_range() loop below.
|
||||
* Generate 'num' values from -1 to 31 with -1 rejected by the
|
||||
* __flush_tlb_range() loop below. Its return value is only
|
||||
* significant for a maximum of MAX_TLBI_RANGE_PAGES pages. If
|
||||
* 'pages' is more than that, you must iterate over the overall
|
||||
* range.
|
||||
*/
|
||||
#define TLBI_RANGE_MASK GENMASK_ULL(4, 0)
|
||||
#define __TLBI_RANGE_NUM(pages, scale) \
|
||||
((((pages) >> (5 * (scale) + 1)) & TLBI_RANGE_MASK) - 1)
|
||||
#define __TLBI_RANGE_NUM(pages, scale) \
|
||||
({ \
|
||||
int __pages = min((pages), \
|
||||
__TLBI_RANGE_PAGES(31, (scale))); \
|
||||
(__pages >> (5 * (scale) + 1)) - 1; \
|
||||
})
|
||||
|
||||
/*
|
||||
* TLB Invalidation
|
||||
|
@ -367,29 +373,25 @@ static inline void arch_tlbbatch_flush(struct arch_tlbflush_unmap_batch *batch)
|
|||
* entries one by one at the granularity of 'stride'. If the TLB
|
||||
* range ops are supported, then:
|
||||
*
|
||||
* 1. If 'pages' is odd, flush the first page through non-range
|
||||
* operations;
|
||||
* 1. The minimum range granularity is decided by 'scale', so multiple range
|
||||
* TLBI operations may be required. Start from scale = 3, flush the largest
|
||||
* possible number of pages ((num+1)*2^(5*scale+1)) that fit into the
|
||||
* requested range, then decrement scale and continue until one or zero pages
|
||||
* are left.
|
||||
*
|
||||
* 2. For remaining pages: the minimum range granularity is decided
|
||||
* by 'scale', so multiple range TLBI operations may be required.
|
||||
* Start from scale = 0, flush the corresponding number of pages
|
||||
* ((num+1)*2^(5*scale+1) starting from 'addr'), then increase it
|
||||
* until no pages left.
|
||||
*
|
||||
* Note that certain ranges can be represented by either num = 31 and
|
||||
* scale or num = 0 and scale + 1. The loop below favours the latter
|
||||
* since num is limited to 30 by the __TLBI_RANGE_NUM() macro.
|
||||
* 2. If there is 1 page remaining, flush it through non-range operations. Range
|
||||
* operations can only span an even number of pages.
|
||||
*/
|
||||
#define __flush_tlb_range_op(op, start, pages, stride, \
|
||||
asid, tlb_level, tlbi_user) \
|
||||
do { \
|
||||
int num = 0; \
|
||||
int scale = 0; \
|
||||
int scale = 3; \
|
||||
unsigned long addr; \
|
||||
\
|
||||
while (pages > 0) { \
|
||||
if (!system_supports_tlb_range() || \
|
||||
pages % 2 == 1) { \
|
||||
pages == 1) { \
|
||||
addr = __TLBI_VADDR(start, asid); \
|
||||
__tlbi_level(op, addr, tlb_level); \
|
||||
if (tlbi_user) \
|
||||
|
@ -409,7 +411,7 @@ do { \
|
|||
start += __TLBI_RANGE_PAGES(num, scale) << PAGE_SHIFT; \
|
||||
pages -= __TLBI_RANGE_PAGES(num, scale); \
|
||||
} \
|
||||
scale++; \
|
||||
scale--; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
|
|
|
@ -569,6 +569,11 @@ SYM_INNER_LABEL(init_el2, SYM_L_LOCAL)
|
|||
adr_l x1, __hyp_text_end
|
||||
adr_l x2, dcache_clean_poc
|
||||
blr x2
|
||||
|
||||
mov_q x0, INIT_SCTLR_EL2_MMU_OFF
|
||||
pre_disable_mmu_workaround
|
||||
msr sctlr_el2, x0
|
||||
isb
|
||||
0:
|
||||
mov_q x0, HCR_HOST_NVHE_FLAGS
|
||||
msr hcr_el2, x0
|
||||
|
|
|
@ -728,7 +728,6 @@ static void sve_init_header_from_task(struct user_sve_header *header,
|
|||
{
|
||||
unsigned int vq;
|
||||
bool active;
|
||||
bool fpsimd_only;
|
||||
enum vec_type task_type;
|
||||
|
||||
memset(header, 0, sizeof(*header));
|
||||
|
@ -744,12 +743,10 @@ static void sve_init_header_from_task(struct user_sve_header *header,
|
|||
case ARM64_VEC_SVE:
|
||||
if (test_tsk_thread_flag(target, TIF_SVE_VL_INHERIT))
|
||||
header->flags |= SVE_PT_VL_INHERIT;
|
||||
fpsimd_only = !test_tsk_thread_flag(target, TIF_SVE);
|
||||
break;
|
||||
case ARM64_VEC_SME:
|
||||
if (test_tsk_thread_flag(target, TIF_SME_VL_INHERIT))
|
||||
header->flags |= SVE_PT_VL_INHERIT;
|
||||
fpsimd_only = false;
|
||||
break;
|
||||
default:
|
||||
WARN_ON_ONCE(1);
|
||||
|
@ -757,7 +754,7 @@ static void sve_init_header_from_task(struct user_sve_header *header,
|
|||
}
|
||||
|
||||
if (active) {
|
||||
if (fpsimd_only) {
|
||||
if (target->thread.fp_type == FP_STATE_FPSIMD) {
|
||||
header->flags |= SVE_PT_REGS_FPSIMD;
|
||||
} else {
|
||||
header->flags |= SVE_PT_REGS_SVE;
|
||||
|
|
|
@ -334,12 +334,22 @@ static int handle_trap_exceptions(struct kvm_vcpu *vcpu)
|
|||
static int handle_hyp_req_mem(struct kvm_vcpu *vcpu,
|
||||
struct kvm_hyp_req *req)
|
||||
{
|
||||
struct kvm *kvm = vcpu->kvm;
|
||||
unsigned long nr_pages;
|
||||
int ret;
|
||||
|
||||
switch (req->mem.dest) {
|
||||
case REQ_MEM_DEST_HYP_ALLOC:
|
||||
return __pkvm_topup_hyp_alloc(req->mem.nr_pages);
|
||||
case REQ_MEM_DEST_VCPU_MEMCACHE:
|
||||
return topup_hyp_memcache(&vcpu->arch.stage2_mc,
|
||||
req->mem.nr_pages, 0);
|
||||
nr_pages = vcpu->arch.stage2_mc.nr_pages;
|
||||
ret = topup_hyp_memcache(&vcpu->arch.stage2_mc,
|
||||
req->mem.nr_pages, 0);
|
||||
nr_pages = vcpu->arch.stage2_mc.nr_pages - nr_pages;
|
||||
atomic64_add(nr_pages << PAGE_SHIFT, &kvm->stat.protected_hyp_mem);
|
||||
atomic64_add(nr_pages << PAGE_SHIFT, &kvm->stat.protected_pgtable_mem);
|
||||
|
||||
return ret;
|
||||
};
|
||||
|
||||
pr_warn("Unknown kvm_hyp_req mem dest: %d\n", req->mem.dest);
|
||||
|
|
|
@ -662,10 +662,15 @@ int host_stage2_set_owner_locked(phys_addr_t addr, u64 size, u8 owner_id)
|
|||
if (owner_id > KVM_MAX_OWNER_ID)
|
||||
return -EINVAL;
|
||||
|
||||
annotation = kvm_init_invalid_leaf_owner(owner_id);
|
||||
|
||||
ret = host_stage2_try(kvm_pgtable_stage2_annotate, &host_mmu.pgt,
|
||||
addr, size, &host_s2_pool, annotation);
|
||||
if (owner_id == PKVM_ID_HOST) {
|
||||
prot = default_host_prot(addr_is_memory(addr));
|
||||
ret = host_stage2_idmap_locked(addr, size, prot, false);
|
||||
} else {
|
||||
annotation = kvm_init_invalid_leaf_owner(owner_id);
|
||||
ret = host_stage2_try(kvm_pgtable_stage2_annotate,
|
||||
&host_mmu.pgt,
|
||||
addr, size, &host_s2_pool, annotation);
|
||||
}
|
||||
if (ret || !addr_is_memory(addr))
|
||||
return ret;
|
||||
|
||||
|
|
|
@ -795,12 +795,15 @@ static bool stage2_try_break_pte(const struct kvm_pgtable_visit_ctx *ctx,
|
|||
* Perform the appropriate TLB invalidation based on the
|
||||
* evicted pte value (if any).
|
||||
*/
|
||||
if (kvm_pte_table(ctx->old, ctx->level))
|
||||
kvm_tlb_flush_vmid_range(mmu, ctx->addr,
|
||||
kvm_granule_size(ctx->level));
|
||||
else if (kvm_pte_valid(ctx->old))
|
||||
if (kvm_pte_table(ctx->old, ctx->level)) {
|
||||
u64 size = kvm_granule_size(ctx->level);
|
||||
u64 addr = ALIGN_DOWN(ctx->addr, size);
|
||||
|
||||
kvm_tlb_flush_vmid_range(mmu, addr, size);
|
||||
} else if (kvm_pte_valid(ctx->old)) {
|
||||
kvm_call_hyp(__kvm_tlb_flush_vmid_ipa, mmu,
|
||||
ctx->addr, ctx->level);
|
||||
}
|
||||
}
|
||||
|
||||
if (pte_ops->pte_is_counted_cb(ctx->old, ctx->level))
|
||||
|
@ -1070,37 +1073,70 @@ static int stage2_map_walk_leaf(const struct kvm_pgtable_visit_ctx *ctx,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void debug_check_table_before_coalescing(
|
||||
const struct kvm_pgtable_visit_ctx *ctx,
|
||||
struct stage2_map_data *data,
|
||||
kvm_pte_t *ptep, u64 pa)
|
||||
{
|
||||
#ifdef CONFIG_NVHE_EL2_DEBUG
|
||||
u64 granule = kvm_granule_size(ctx->level + 1);
|
||||
int i;
|
||||
|
||||
for (i = 0; i < PTRS_PER_PTE; i++, ptep++, pa += granule) {
|
||||
kvm_pte_t pte = kvm_init_valid_leaf_pte(
|
||||
pa, data->attr, ctx->level + 1);
|
||||
WARN_ON(pte != *ptep);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static int stage2_coalesce_walk_table_post(const struct kvm_pgtable_visit_ctx *ctx,
|
||||
struct stage2_map_data *data)
|
||||
{
|
||||
struct kvm_pgtable_mm_ops *mm_ops = ctx->mm_ops;
|
||||
kvm_pte_t *childp = kvm_pte_follow(*ctx->ptep, mm_ops);
|
||||
kvm_pte_t new, *childp = kvm_pte_follow(ctx->old, mm_ops);
|
||||
u64 size, addr;
|
||||
|
||||
/*
|
||||
* Decrement the refcount only on the set ownership path to avoid a
|
||||
* loop situation when the following happens:
|
||||
* 1. We take a host stage2 fault and we create a small mapping which
|
||||
* has default attributes (is not refcounted).
|
||||
* 2. On the way back we execute the post handler and we zap the
|
||||
* table that holds our mapping.
|
||||
* We don't want to coalesce during pkvm initialisation, before the
|
||||
* overall structure of the host S2 table is created.
|
||||
*/
|
||||
if (kvm_phys_is_valid(data->phys) ||
|
||||
!kvm_level_supports_block_mapping(ctx->level))
|
||||
if (!static_branch_likely(&kvm_protected_mode_initialized))
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* Free a page that is not referenced anymore and drop the reference
|
||||
* of the page table page.
|
||||
* If we installed a non-refcounted valid mapping, and the table has no
|
||||
* other raised references, then we can immediately collapse to a block
|
||||
* mapping.
|
||||
*/
|
||||
if (mm_ops->page_count(childp) == 1) {
|
||||
u64 size = kvm_granule_size(ctx->level);
|
||||
u64 addr = ALIGN_DOWN(ctx->addr, size);
|
||||
if (!kvm_phys_is_valid(data->phys) ||
|
||||
!kvm_level_supports_block_mapping(ctx->level) ||
|
||||
(mm_ops->page_count(childp) != 1))
|
||||
return 0;
|
||||
|
||||
kvm_clear_pte(ctx->ptep);
|
||||
kvm_tlb_flush_vmid_range(data->mmu, addr, size);
|
||||
mm_ops->put_page(ctx->ptep);
|
||||
mm_ops->put_page(childp);
|
||||
}
|
||||
/*
|
||||
* This should apply only to the host S2, which does not refcount its
|
||||
* default memory and mmio mappings.
|
||||
*/
|
||||
WARN_ON(!(data->mmu->pgt->flags & KVM_PGTABLE_S2_IDMAP));
|
||||
|
||||
size = kvm_granule_size(ctx->level);
|
||||
addr = ALIGN_DOWN(ctx->addr, size);
|
||||
|
||||
debug_check_table_before_coalescing(ctx, data, childp, addr);
|
||||
|
||||
new = kvm_init_valid_leaf_pte(addr, data->attr, ctx->level);
|
||||
|
||||
/* Breaking must succeed, as this is not a shared walk. */
|
||||
WARN_ON(!stage2_try_break_pte(ctx, data->mmu));
|
||||
|
||||
/* Host doesn't require CMOs. */
|
||||
WARN_ON(mm_ops->dcache_clean_inval_poc || mm_ops->icache_inval_pou);
|
||||
|
||||
stage2_make_pte(ctx, new, data->mmu);
|
||||
|
||||
/* Finally, free the unlinked table. */
|
||||
mm_ops->put_page(childp);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1148,7 +1184,8 @@ int kvm_pgtable_stage2_map(struct kvm_pgtable *pgt, u64 addr, u64 size,
|
|||
.cb = stage2_map_walker,
|
||||
.flags = flags |
|
||||
KVM_PGTABLE_WALK_TABLE_PRE |
|
||||
KVM_PGTABLE_WALK_LEAF,
|
||||
KVM_PGTABLE_WALK_LEAF |
|
||||
KVM_PGTABLE_WALK_TABLE_POST,
|
||||
.arg = &map_data,
|
||||
};
|
||||
|
||||
|
@ -1181,8 +1218,7 @@ int kvm_pgtable_stage2_annotate(struct kvm_pgtable *pgt, u64 addr, u64 size,
|
|||
struct kvm_pgtable_walker walker = {
|
||||
.cb = stage2_map_walker,
|
||||
.flags = KVM_PGTABLE_WALK_TABLE_PRE |
|
||||
KVM_PGTABLE_WALK_LEAF |
|
||||
KVM_PGTABLE_WALK_TABLE_POST,
|
||||
KVM_PGTABLE_WALK_LEAF,
|
||||
.arg = &map_data,
|
||||
};
|
||||
|
||||
|
@ -1261,8 +1297,28 @@ static int stage2_reclaim_leaf_walker(const struct kvm_pgtable_visit_ctx *ctx,
|
|||
enum kvm_pgtable_walk_flags visit)
|
||||
{
|
||||
struct stage2_map_data *data = ctx->arg;
|
||||
struct kvm_pgtable_mm_ops *mm_ops = ctx->mm_ops;
|
||||
kvm_pte_t *childp = kvm_pte_follow(ctx->old, mm_ops);
|
||||
u64 size, addr;
|
||||
|
||||
stage2_coalesce_walk_table_post(ctx, data);
|
||||
/*
|
||||
* If this table's refcount is not raised, we can safely discard it.
|
||||
* Any mappings that it contains can be re-created on demand.
|
||||
*/
|
||||
if (!kvm_level_supports_block_mapping(ctx->level) ||
|
||||
(mm_ops->page_count(childp) != 1))
|
||||
return 0;
|
||||
|
||||
size = kvm_granule_size(ctx->level);
|
||||
addr = ALIGN_DOWN(ctx->addr, size);
|
||||
|
||||
/* Unlink the table and flush TLBs. */
|
||||
kvm_clear_pte(ctx->ptep);
|
||||
kvm_tlb_flush_vmid_range(data->mmu, addr, size);
|
||||
|
||||
/* Free the unlinked table, and drop its reference in the parent. */
|
||||
mm_ops->put_page(ctx->ptep);
|
||||
mm_ops->put_page(childp);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -289,7 +289,6 @@ static void invalidate_icache_guest_page(void *va, size_t size)
|
|||
|
||||
static int pkvm_unmap_guest(struct kvm *kvm, struct kvm_pinned_page *ppage)
|
||||
{
|
||||
struct mm_struct *mm = kvm->mm;
|
||||
int ret;
|
||||
|
||||
ret = kvm_call_hyp_nvhe(__pkvm_host_unmap_guest,
|
||||
|
@ -299,7 +298,6 @@ static int pkvm_unmap_guest(struct kvm *kvm, struct kvm_pinned_page *ppage)
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
account_locked_vm(mm, 1, false);
|
||||
/*
|
||||
* Non-protected guest pages are marked dirty from user_mem_abort(),
|
||||
* no update needed from here.
|
||||
|
@ -339,18 +337,26 @@ static struct rb_node *find_first_ppage_node(struct rb_root *root, u64 ipa)
|
|||
|
||||
static int pkvm_unmap_range(struct kvm *kvm, u64 start, u64 end)
|
||||
{
|
||||
struct mm_struct *mm = kvm->mm;
|
||||
struct kvm_pinned_page *ppage;
|
||||
struct rb_node *node, *temp;
|
||||
unsigned long cnt = 0;
|
||||
int ret;
|
||||
|
||||
for_ppage_node_in_range(kvm, start, end, node, temp) {
|
||||
ppage = rb_entry(node, struct kvm_pinned_page, node);
|
||||
ret = pkvm_unmap_guest(kvm, ppage);
|
||||
if (ret)
|
||||
return ret;
|
||||
break;
|
||||
cnt++;
|
||||
}
|
||||
|
||||
return 0;
|
||||
/* account_locked_vm may sleep */
|
||||
write_unlock(&kvm->mmu_lock);
|
||||
account_locked_vm(mm, cnt, false);
|
||||
write_lock(&kvm->mmu_lock);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -407,6 +413,12 @@ static void __unmap_stage2_range(struct kvm_s2_mmu *mmu, phys_addr_t start, u64
|
|||
if (is_protected_kvm_enabled() && kvm->arch.pkvm.enabled)
|
||||
return;
|
||||
|
||||
/*
|
||||
* pkvm_unmap_range() will release mmu_lock before calling
|
||||
* account_locked_vm() hence, only supporting may_block.
|
||||
*/
|
||||
WARN_ON_ONCE(!may_block);
|
||||
|
||||
lockdep_assert_held_write(&kvm->mmu_lock);
|
||||
WARN_ON(size & ~PAGE_MASK);
|
||||
WARN_ON(stage2_apply_range(kvm, start, end, ___unmap_stage2_range,
|
||||
|
|
|
@ -219,9 +219,6 @@ bool kernel_page_present(struct page *page)
|
|||
pte_t *ptep;
|
||||
unsigned long addr = (unsigned long)page_address(page);
|
||||
|
||||
if (!can_set_direct_map())
|
||||
return true;
|
||||
|
||||
pgdp = pgd_offset_k(addr);
|
||||
if (pgd_none(READ_ONCE(*pgdp)))
|
||||
return false;
|
||||
|
|
|
@ -876,7 +876,7 @@ static int build_insn(const struct bpf_insn *insn, struct jit_ctx *ctx,
|
|||
emit(A64_UXTH(is64, dst, dst), ctx);
|
||||
break;
|
||||
case 32:
|
||||
emit(A64_REV32(is64, dst, dst), ctx);
|
||||
emit(A64_REV32(0, dst, dst), ctx);
|
||||
/* upper 32 bits already cleared */
|
||||
break;
|
||||
case 64:
|
||||
|
@ -1189,7 +1189,7 @@ emit_cond_jmp:
|
|||
} else {
|
||||
emit_a64_mov_i(1, tmp, off, ctx);
|
||||
if (sign_extend)
|
||||
emit(A64_LDRSW(dst, src_adj, off_adj), ctx);
|
||||
emit(A64_LDRSW(dst, src, tmp), ctx);
|
||||
else
|
||||
emit(A64_LDR32(dst, src, tmp), ctx);
|
||||
}
|
||||
|
|
|
@ -63,6 +63,7 @@ SECTIONS
|
|||
STABS_DEBUG
|
||||
DWARF_DEBUG
|
||||
ELF_DETAILS
|
||||
.hexagon.attributes 0 : { *(.hexagon.attributes) }
|
||||
|
||||
DISCARDS
|
||||
}
|
||||
|
|
|
@ -44,7 +44,6 @@ static u32 crc32_loongarch_hw(u32 crc_, const u8 *p, unsigned int len)
|
|||
|
||||
CRC32(crc, value, w);
|
||||
p += sizeof(u32);
|
||||
len -= sizeof(u32);
|
||||
}
|
||||
|
||||
if (len & sizeof(u16)) {
|
||||
|
@ -80,7 +79,6 @@ static u32 crc32c_loongarch_hw(u32 crc_, const u8 *p, unsigned int len)
|
|||
|
||||
CRC32C(crc, value, w);
|
||||
p += sizeof(u32);
|
||||
len -= sizeof(u32);
|
||||
}
|
||||
|
||||
if (len & sizeof(u16)) {
|
||||
|
|
|
@ -4,6 +4,7 @@ generic-y += mcs_spinlock.h
|
|||
generic-y += parport.h
|
||||
generic-y += early_ioremap.h
|
||||
generic-y += qrwlock.h
|
||||
generic-y += qspinlock.h
|
||||
generic-y += rwsem.h
|
||||
generic-y += segment.h
|
||||
generic-y += user.h
|
||||
|
|
|
@ -71,6 +71,8 @@ extern void __memcpy_fromio(void *to, const volatile void __iomem *from, size_t
|
|||
#define memcpy_fromio(a, c, l) __memcpy_fromio((a), (c), (l))
|
||||
#define memcpy_toio(c, a, l) __memcpy_toio((c), (a), (l))
|
||||
|
||||
#define __io_aw() mmiowb()
|
||||
|
||||
#include <asm-generic/io.h>
|
||||
|
||||
#define ARCH_HAS_VALID_PHYS_ADDR_RANGE
|
||||
|
|
|
@ -29,7 +29,12 @@ static inline void set_my_cpu_offset(unsigned long off)
|
|||
__my_cpu_offset = off;
|
||||
csr_write64(off, PERCPU_BASE_KS);
|
||||
}
|
||||
#define __my_cpu_offset __my_cpu_offset
|
||||
|
||||
#define __my_cpu_offset \
|
||||
({ \
|
||||
__asm__ __volatile__("":"+r"(__my_cpu_offset)); \
|
||||
__my_cpu_offset; \
|
||||
})
|
||||
|
||||
#define PERCPU_OP(op, asm_op, c_op) \
|
||||
static __always_inline unsigned long __percpu_##op(void *ptr, \
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef _ASM_QSPINLOCK_H
|
||||
#define _ASM_QSPINLOCK_H
|
||||
|
||||
#include <asm-generic/qspinlock_types.h>
|
||||
|
||||
#define queued_spin_unlock queued_spin_unlock
|
||||
|
||||
static inline void queued_spin_unlock(struct qspinlock *lock)
|
||||
{
|
||||
compiletime_assert_atomic_type(lock->locked);
|
||||
c_sync();
|
||||
WRITE_ONCE(lock->locked, 0);
|
||||
}
|
||||
|
||||
#include <asm-generic/qspinlock.h>
|
||||
|
||||
#endif /* _ASM_QSPINLOCK_H */
|
|
@ -97,26 +97,28 @@
|
|||
* version takes two arguments: a src and destination register.
|
||||
* However, the source and destination registers can not be
|
||||
* the same register.
|
||||
*
|
||||
* We use add,l to avoid clobbering the C/B bits in the PSW.
|
||||
*/
|
||||
|
||||
.macro tophys grvirt, grphys
|
||||
ldil L%(__PAGE_OFFSET), \grphys
|
||||
sub \grvirt, \grphys, \grphys
|
||||
ldil L%(-__PAGE_OFFSET), \grphys
|
||||
addl \grvirt, \grphys, \grphys
|
||||
.endm
|
||||
|
||||
|
||||
.macro tovirt grphys, grvirt
|
||||
ldil L%(__PAGE_OFFSET), \grvirt
|
||||
add \grphys, \grvirt, \grvirt
|
||||
addl \grphys, \grvirt, \grvirt
|
||||
.endm
|
||||
|
||||
.macro tophys_r1 gr
|
||||
ldil L%(__PAGE_OFFSET), %r1
|
||||
sub \gr, %r1, \gr
|
||||
ldil L%(-__PAGE_OFFSET), %r1
|
||||
addl \gr, %r1, \gr
|
||||
.endm
|
||||
|
||||
|
||||
.macro tovirt_r1 gr
|
||||
ldil L%(__PAGE_OFFSET), %r1
|
||||
add \gr, %r1, \gr
|
||||
addl \gr, %r1, \gr
|
||||
.endm
|
||||
|
||||
.macro delay value
|
||||
|
|
|
@ -40,7 +40,7 @@ static inline __sum16 ip_fast_csum(const void *iph, unsigned int ihl)
|
|||
" addc %0, %5, %0\n"
|
||||
" addc %0, %3, %0\n"
|
||||
"1: ldws,ma 4(%1), %3\n"
|
||||
" addib,< 0, %2, 1b\n"
|
||||
" addib,> -1, %2, 1b\n"
|
||||
" addc %0, %3, %0\n"
|
||||
"\n"
|
||||
" extru %0, 31, 16, %4\n"
|
||||
|
@ -126,6 +126,7 @@ static __inline__ __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
|
|||
** Try to keep 4 registers with "live" values ahead of the ALU.
|
||||
*/
|
||||
|
||||
" depdi 0, 31, 32, %0\n"/* clear upper half of incoming checksum */
|
||||
" ldd,ma 8(%1), %4\n" /* get 1st saddr word */
|
||||
" ldd,ma 8(%2), %5\n" /* get 1st daddr word */
|
||||
" add %4, %0, %0\n"
|
||||
|
@ -137,8 +138,8 @@ static __inline__ __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
|
|||
" add,dc %3, %0, %0\n" /* fold in proto+len | carry bit */
|
||||
" extrd,u %0, 31, 32, %4\n"/* copy upper half down */
|
||||
" depdi 0, 31, 32, %0\n"/* clear upper half */
|
||||
" add %4, %0, %0\n" /* fold into 32-bits */
|
||||
" addc 0, %0, %0\n" /* add carry */
|
||||
" add,dc %4, %0, %0\n" /* fold into 32-bits, plus carry */
|
||||
" addc 0, %0, %0\n" /* add final carry */
|
||||
|
||||
#else
|
||||
|
||||
|
@ -163,7 +164,8 @@ static __inline__ __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
|
|||
" ldw,ma 4(%2), %7\n" /* 4th daddr */
|
||||
" addc %6, %0, %0\n"
|
||||
" addc %7, %0, %0\n"
|
||||
" addc %3, %0, %0\n" /* fold in proto+len, catch carry */
|
||||
" addc %3, %0, %0\n" /* fold in proto+len */
|
||||
" addc 0, %0, %0\n" /* add carry */
|
||||
|
||||
#endif
|
||||
: "=r" (sum), "=r" (saddr), "=r" (daddr), "=r" (len),
|
||||
|
|
14
arch/parisc/include/asm/mman.h
Normal file
14
arch/parisc/include/asm/mman.h
Normal file
|
@ -0,0 +1,14 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef __ASM_MMAN_H__
|
||||
#define __ASM_MMAN_H__
|
||||
|
||||
#include <uapi/asm/mman.h>
|
||||
|
||||
/* PARISC cannot allow mdwe as it needs writable stacks */
|
||||
static inline bool arch_memory_deny_write_exec_supported(void)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#define arch_memory_deny_write_exec_supported arch_memory_deny_write_exec_supported
|
||||
|
||||
#endif /* __ASM_MMAN_H__ */
|
|
@ -169,6 +169,7 @@ static int emulate_ldw(struct pt_regs *regs, int toreg, int flop)
|
|||
static int emulate_ldd(struct pt_regs *regs, int toreg, int flop)
|
||||
{
|
||||
unsigned long saddr = regs->ior;
|
||||
unsigned long shift, temp1;
|
||||
__u64 val = 0;
|
||||
ASM_EXCEPTIONTABLE_VAR(ret);
|
||||
|
||||
|
@ -180,25 +181,22 @@ static int emulate_ldd(struct pt_regs *regs, int toreg, int flop)
|
|||
|
||||
#ifdef CONFIG_64BIT
|
||||
__asm__ __volatile__ (
|
||||
" depd,z %3,60,3,%%r19\n" /* r19=(ofs&7)*8 */
|
||||
" mtsp %4, %%sr1\n"
|
||||
" depd %%r0,63,3,%3\n"
|
||||
"1: ldd 0(%%sr1,%3),%0\n"
|
||||
"2: ldd 8(%%sr1,%3),%%r20\n"
|
||||
" subi 64,%%r19,%%r19\n"
|
||||
" mtsar %%r19\n"
|
||||
" shrpd %0,%%r20,%%sar,%0\n"
|
||||
" depd,z %2,60,3,%3\n" /* shift=(ofs&7)*8 */
|
||||
" mtsp %5, %%sr1\n"
|
||||
" depd %%r0,63,3,%2\n"
|
||||
"1: ldd 0(%%sr1,%2),%0\n"
|
||||
"2: ldd 8(%%sr1,%2),%4\n"
|
||||
" subi 64,%3,%3\n"
|
||||
" mtsar %3\n"
|
||||
" shrpd %0,%4,%%sar,%0\n"
|
||||
"3: \n"
|
||||
ASM_EXCEPTIONTABLE_ENTRY_EFAULT(1b, 3b, "%1")
|
||||
ASM_EXCEPTIONTABLE_ENTRY_EFAULT(2b, 3b, "%1")
|
||||
: "=r" (val), "+r" (ret)
|
||||
: "0" (val), "r" (saddr), "r" (regs->isr)
|
||||
: "r19", "r20" );
|
||||
: "+r" (val), "+r" (ret), "+r" (saddr), "=&r" (shift), "=&r" (temp1)
|
||||
: "r" (regs->isr) );
|
||||
#else
|
||||
{
|
||||
unsigned long shift, temp1;
|
||||
__asm__ __volatile__ (
|
||||
" zdep %2,29,2,%3\n" /* r19=(ofs&3)*8 */
|
||||
" zdep %2,29,2,%3\n" /* shift=(ofs&3)*8 */
|
||||
" mtsp %5, %%sr1\n"
|
||||
" dep %%r0,31,2,%2\n"
|
||||
"1: ldw 0(%%sr1,%2),%0\n"
|
||||
|
@ -214,7 +212,6 @@ static int emulate_ldd(struct pt_regs *regs, int toreg, int flop)
|
|||
ASM_EXCEPTIONTABLE_ENTRY_EFAULT(3b, 4b, "%1")
|
||||
: "+r" (val), "+r" (ret), "+r" (saddr), "=&r" (shift), "=&r" (temp1)
|
||||
: "r" (regs->isr) );
|
||||
}
|
||||
#endif
|
||||
|
||||
DPRINTF("val = 0x%llx\n", val);
|
||||
|
|
|
@ -20,14 +20,6 @@
|
|||
#ifndef __ASSEMBLY__
|
||||
extern void _mcount(void);
|
||||
|
||||
static inline unsigned long ftrace_call_adjust(unsigned long addr)
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_ARCH_USING_PATCHABLE_FUNCTION_ENTRY))
|
||||
addr += MCOUNT_INSN_SIZE;
|
||||
|
||||
return addr;
|
||||
}
|
||||
|
||||
unsigned long prepare_ftrace_return(unsigned long parent, unsigned long ip,
|
||||
unsigned long sp);
|
||||
|
||||
|
@ -142,8 +134,10 @@ static inline u8 this_cpu_get_ftrace_enabled(void) { return 1; }
|
|||
#ifdef CONFIG_FUNCTION_TRACER
|
||||
extern unsigned int ftrace_tramp_text[], ftrace_tramp_init[];
|
||||
void ftrace_free_init_tramp(void);
|
||||
unsigned long ftrace_call_adjust(unsigned long addr);
|
||||
#else
|
||||
static inline void ftrace_free_init_tramp(void) { }
|
||||
static inline unsigned long ftrace_call_adjust(unsigned long addr) { return addr; }
|
||||
#endif
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
|
||||
|
|
|
@ -12,9 +12,16 @@
|
|||
#ifndef __ASSEMBLY__
|
||||
/* Performance Monitor Registers */
|
||||
#define mfpmr(rn) ({unsigned int rval; \
|
||||
asm volatile("mfpmr %0," __stringify(rn) \
|
||||
asm volatile(".machine push; " \
|
||||
".machine e300; " \
|
||||
"mfpmr %0," __stringify(rn) ";" \
|
||||
".machine pop; " \
|
||||
: "=r" (rval)); rval;})
|
||||
#define mtpmr(rn, v) asm volatile("mtpmr " __stringify(rn) ",%0" : : "r" (v))
|
||||
#define mtpmr(rn, v) asm volatile(".machine push; " \
|
||||
".machine e300; " \
|
||||
"mtpmr " __stringify(rn) ",%0; " \
|
||||
".machine pop; " \
|
||||
: : "r" (v))
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
/* Freescale Book E Performance Monitor APU Registers */
|
||||
|
|
|
@ -14,6 +14,7 @@ typedef struct func_desc func_desc_t;
|
|||
|
||||
extern char __head_end[];
|
||||
extern char __srwx_boundary[];
|
||||
extern char __exittext_begin[], __exittext_end[];
|
||||
|
||||
/* Patch sites */
|
||||
extern s32 patch__call_flush_branch_caches1;
|
||||
|
|
|
@ -375,6 +375,18 @@ static int __init early_init_dt_scan_cpus(unsigned long node,
|
|||
if (IS_ENABLED(CONFIG_PPC64))
|
||||
boot_cpu_hwid = be32_to_cpu(intserv[found_thread]);
|
||||
|
||||
if (nr_cpu_ids % nthreads != 0) {
|
||||
set_nr_cpu_ids(ALIGN(nr_cpu_ids, nthreads));
|
||||
pr_warn("nr_cpu_ids was not a multiple of threads_per_core, adjusted to %d\n",
|
||||
nr_cpu_ids);
|
||||
}
|
||||
|
||||
if (boot_cpuid >= nr_cpu_ids) {
|
||||
set_nr_cpu_ids(min(CONFIG_NR_CPUS, ALIGN(boot_cpuid + 1, nthreads)));
|
||||
pr_warn("Boot CPU %d >= nr_cpu_ids, adjusted nr_cpu_ids to %d\n",
|
||||
boot_cpuid, nr_cpu_ids);
|
||||
}
|
||||
|
||||
/*
|
||||
* PAPR defines "logical" PVR values for cpus that
|
||||
* meet various levels of the architecture:
|
||||
|
|
|
@ -27,10 +27,22 @@
|
|||
#include <asm/ftrace.h>
|
||||
#include <asm/syscall.h>
|
||||
#include <asm/inst.h>
|
||||
#include <asm/sections.h>
|
||||
|
||||
#define NUM_FTRACE_TRAMPS 2
|
||||
static unsigned long ftrace_tramps[NUM_FTRACE_TRAMPS];
|
||||
|
||||
unsigned long ftrace_call_adjust(unsigned long addr)
|
||||
{
|
||||
if (addr >= (unsigned long)__exittext_begin && addr < (unsigned long)__exittext_end)
|
||||
return 0;
|
||||
|
||||
if (IS_ENABLED(CONFIG_ARCH_USING_PATCHABLE_FUNCTION_ENTRY))
|
||||
addr += MCOUNT_INSN_SIZE;
|
||||
|
||||
return addr;
|
||||
}
|
||||
|
||||
static ppc_inst_t ftrace_create_branch_inst(unsigned long ip, unsigned long addr, int link)
|
||||
{
|
||||
ppc_inst_t op;
|
||||
|
|
|
@ -37,6 +37,11 @@
|
|||
#define NUM_FTRACE_TRAMPS 8
|
||||
static unsigned long ftrace_tramps[NUM_FTRACE_TRAMPS];
|
||||
|
||||
unsigned long ftrace_call_adjust(unsigned long addr)
|
||||
{
|
||||
return addr;
|
||||
}
|
||||
|
||||
static ppc_inst_t
|
||||
ftrace_call_replace(unsigned long ip, unsigned long addr, int link)
|
||||
{
|
||||
|
|
|
@ -281,7 +281,9 @@ SECTIONS
|
|||
* to deal with references from __bug_table
|
||||
*/
|
||||
.exit.text : AT(ADDR(.exit.text) - LOAD_OFFSET) {
|
||||
__exittext_begin = .;
|
||||
EXIT_TEXT
|
||||
__exittext_end = .;
|
||||
}
|
||||
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
|
|
|
@ -76,7 +76,7 @@ obj-$(CONFIG_PPC_LIB_RHEAP) += rheap.o
|
|||
obj-$(CONFIG_FTR_FIXUP_SELFTEST) += feature-fixups-test.o
|
||||
|
||||
obj-$(CONFIG_ALTIVEC) += xor_vmx.o xor_vmx_glue.o
|
||||
CFLAGS_xor_vmx.o += -maltivec $(call cc-option,-mabi=altivec)
|
||||
CFLAGS_xor_vmx.o += -mhard-float -maltivec $(call cc-option,-mabi=altivec)
|
||||
# Enable <altivec.h>
|
||||
CFLAGS_xor_vmx.o += -isystem $(shell $(CC) -print-file-name=include)
|
||||
|
||||
|
|
|
@ -130,7 +130,7 @@ void set_pud_at(struct mm_struct *mm, unsigned long addr,
|
|||
|
||||
WARN_ON(pte_hw_valid(pud_pte(*pudp)));
|
||||
assert_spin_locked(pud_lockptr(mm, pudp));
|
||||
WARN_ON(!(pud_large(pud)));
|
||||
WARN_ON(!(pud_leaf(pud)));
|
||||
#endif
|
||||
trace_hugepage_set_pud(addr, pud_val(pud));
|
||||
return set_pte_at(mm, addr, pudp_ptep(pudp), pud_pte(pud));
|
||||
|
|
|
@ -1,655 +0,0 @@
|
|||
CONFIG_AUDIT=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
CONFIG_BPF_SYSCALL=y
|
||||
CONFIG_BPF_JIT=y
|
||||
CONFIG_BPF_JIT_ALWAYS_ON=y
|
||||
# CONFIG_BPF_UNPRIV_DEFAULT_OFF is not set
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_IRQ_TIME_ACCOUNTING=y
|
||||
CONFIG_TASKSTATS=y
|
||||
CONFIG_TASK_DELAY_ACCT=y
|
||||
CONFIG_TASK_XACCT=y
|
||||
CONFIG_TASK_IO_ACCOUNTING=y
|
||||
CONFIG_PSI=y
|
||||
CONFIG_RCU_EXPERT=y
|
||||
CONFIG_RCU_BOOST=y
|
||||
CONFIG_RCU_NOCB_CPU=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_IKHEADERS=m
|
||||
CONFIG_UCLAMP_TASK=y
|
||||
CONFIG_UCLAMP_BUCKETS_COUNT=20
|
||||
CONFIG_CGROUPS=y
|
||||
CONFIG_MEMCG=y
|
||||
CONFIG_BLK_CGROUP=y
|
||||
CONFIG_CGROUP_SCHED=y
|
||||
CONFIG_UCLAMP_TASK_GROUP=y
|
||||
CONFIG_CGROUP_FREEZER=y
|
||||
CONFIG_CPUSETS=y
|
||||
CONFIG_CGROUP_CPUACCT=y
|
||||
CONFIG_CGROUP_BPF=y
|
||||
CONFIG_NAMESPACES=y
|
||||
# CONFIG_PID_NS is not set
|
||||
CONFIG_RT_SOFTIRQ_AWARE_SCHED=y
|
||||
# CONFIG_RD_BZIP2 is not set
|
||||
# CONFIG_RD_LZMA is not set
|
||||
# CONFIG_RD_XZ is not set
|
||||
# CONFIG_RD_LZO is not set
|
||||
CONFIG_BOOT_CONFIG=y
|
||||
CONFIG_EXPERT=y
|
||||
# CONFIG_SYSFS_SYSCALL is not set
|
||||
# CONFIG_FHANDLE is not set
|
||||
# CONFIG_RSEQ is not set
|
||||
CONFIG_PROFILING=y
|
||||
CONFIG_ARCH_SUNXI=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_SCHED_MC=y
|
||||
CONFIG_NR_CPUS=32
|
||||
CONFIG_RANDOMIZE_BASE=y
|
||||
CONFIG_CMDLINE="console=ttynull stack_depot_disable=on cgroup_disable=pressure kasan.stacktrace=off kvm-arm.mode=protected bootconfig ioremap_guard"
|
||||
CONFIG_PM_WAKELOCKS=y
|
||||
CONFIG_PM_WAKELOCKS_LIMIT=0
|
||||
# CONFIG_PM_WAKELOCKS_GC is not set
|
||||
CONFIG_ENERGY_MODEL=y
|
||||
CONFIG_CPU_IDLE=y
|
||||
CONFIG_CPU_IDLE_GOV_MENU=y
|
||||
CONFIG_CPU_IDLE_GOV_TEO=y
|
||||
CONFIG_CPU_FREQ=y
|
||||
CONFIG_CPU_FREQ_STAT=y
|
||||
CONFIG_CPU_FREQ_TIMES=y
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y
|
||||
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
|
||||
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
|
||||
CONFIG_VIRTUALIZATION=y
|
||||
CONFIG_KVM=y
|
||||
CONFIG_KPROBES=y
|
||||
CONFIG_JUMP_LABEL=y
|
||||
CONFIG_CFI_CLANG=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODVERSIONS=y
|
||||
CONFIG_MODULE_SCMVERSION=y
|
||||
CONFIG_MODULE_SIG=y
|
||||
CONFIG_MODULE_SIG_PROTECT=y
|
||||
CONFIG_BLK_DEV_ZONED=y
|
||||
CONFIG_BLK_DEV_THROTTLING=y
|
||||
CONFIG_BLK_CGROUP_IOPRIO=y
|
||||
CONFIG_BLK_INLINE_ENCRYPTION=y
|
||||
CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y
|
||||
CONFIG_GKI_HACKS_TO_FIX=y
|
||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||
CONFIG_BINFMT_MISC=y
|
||||
# CONFIG_SLAB_MERGE_DEFAULT is not set
|
||||
CONFIG_SLAB_FREELIST_RANDOM=y
|
||||
CONFIG_SLAB_FREELIST_HARDENED=y
|
||||
CONFIG_SHUFFLE_PAGE_ALLOCATOR=y
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
|
||||
CONFIG_TRANSPARENT_HUGEPAGE=y
|
||||
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
|
||||
CONFIG_CMA=y
|
||||
CONFIG_CMA_DEBUGFS=y
|
||||
CONFIG_CMA_AREAS=16
|
||||
CONFIG_ANON_VMA_NAME=y
|
||||
CONFIG_USERFAULTFD=y
|
||||
CONFIG_LRU_GEN=y
|
||||
CONFIG_LRU_GEN_ENABLED=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_XFRM_USER=y
|
||||
CONFIG_XFRM_INTERFACE=y
|
||||
CONFIG_XFRM_MIGRATE=y
|
||||
CONFIG_XFRM_STATISTICS=y
|
||||
CONFIG_NET_KEY=y
|
||||
CONFIG_XDP_SOCKETS=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
CONFIG_IP_ADVANCED_ROUTER=y
|
||||
CONFIG_IP_MULTIPLE_TABLES=y
|
||||
CONFIG_NET_IPIP=y
|
||||
CONFIG_NET_IPGRE_DEMUX=y
|
||||
CONFIG_NET_IPGRE=y
|
||||
CONFIG_NET_IPVTI=y
|
||||
CONFIG_INET_ESP=y
|
||||
CONFIG_INET_UDP_DIAG=y
|
||||
CONFIG_INET_DIAG_DESTROY=y
|
||||
CONFIG_IPV6_ROUTER_PREF=y
|
||||
CONFIG_IPV6_ROUTE_INFO=y
|
||||
CONFIG_IPV6_OPTIMISTIC_DAD=y
|
||||
CONFIG_INET6_ESP=y
|
||||
CONFIG_INET6_IPCOMP=y
|
||||
CONFIG_IPV6_MIP6=y
|
||||
CONFIG_IPV6_VTI=y
|
||||
CONFIG_IPV6_GRE=y
|
||||
CONFIG_IPV6_MULTIPLE_TABLES=y
|
||||
CONFIG_IPV6_MROUTE=y
|
||||
CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y
|
||||
CONFIG_NETFILTER=y
|
||||
CONFIG_NF_CONNTRACK=y
|
||||
CONFIG_NF_CONNTRACK_SECMARK=y
|
||||
CONFIG_NF_CONNTRACK_PROCFS=y
|
||||
CONFIG_NF_CONNTRACK_EVENTS=y
|
||||
CONFIG_NF_CONNTRACK_AMANDA=y
|
||||
CONFIG_NF_CONNTRACK_FTP=y
|
||||
CONFIG_NF_CONNTRACK_H323=y
|
||||
CONFIG_NF_CONNTRACK_IRC=y
|
||||
CONFIG_NF_CONNTRACK_NETBIOS_NS=y
|
||||
CONFIG_NF_CONNTRACK_PPTP=y
|
||||
CONFIG_NF_CONNTRACK_SANE=y
|
||||
CONFIG_NF_CONNTRACK_TFTP=y
|
||||
CONFIG_NF_CT_NETLINK=y
|
||||
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y
|
||||
CONFIG_NETFILTER_XT_TARGET_CONNMARK=y
|
||||
CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y
|
||||
CONFIG_NETFILTER_XT_TARGET_DSCP=y
|
||||
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y
|
||||
CONFIG_NETFILTER_XT_TARGET_MARK=y
|
||||
CONFIG_NETFILTER_XT_TARGET_NFLOG=y
|
||||
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y
|
||||
CONFIG_NETFILTER_XT_TARGET_NOTRACK=y
|
||||
CONFIG_NETFILTER_XT_TARGET_TEE=y
|
||||
CONFIG_NETFILTER_XT_TARGET_TPROXY=y
|
||||
CONFIG_NETFILTER_XT_TARGET_TRACE=y
|
||||
CONFIG_NETFILTER_XT_TARGET_SECMARK=y
|
||||
CONFIG_NETFILTER_XT_TARGET_TCPMSS=y
|
||||
CONFIG_NETFILTER_XT_MATCH_BPF=y
|
||||
CONFIG_NETFILTER_XT_MATCH_COMMENT=y
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNBYTES=y
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNMARK=y
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
|
||||
CONFIG_NETFILTER_XT_MATCH_DSCP=y
|
||||
CONFIG_NETFILTER_XT_MATCH_ESP=y
|
||||
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=y
|
||||
CONFIG_NETFILTER_XT_MATCH_HELPER=y
|
||||
CONFIG_NETFILTER_XT_MATCH_IPRANGE=y
|
||||
CONFIG_NETFILTER_XT_MATCH_L2TP=y
|
||||
CONFIG_NETFILTER_XT_MATCH_LENGTH=y
|
||||
CONFIG_NETFILTER_XT_MATCH_LIMIT=y
|
||||
CONFIG_NETFILTER_XT_MATCH_MAC=y
|
||||
CONFIG_NETFILTER_XT_MATCH_MARK=y
|
||||
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y
|
||||
CONFIG_NETFILTER_XT_MATCH_OWNER=y
|
||||
CONFIG_NETFILTER_XT_MATCH_POLICY=y
|
||||
CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y
|
||||
CONFIG_NETFILTER_XT_MATCH_QUOTA=y
|
||||
CONFIG_NETFILTER_XT_MATCH_QUOTA2=y
|
||||
CONFIG_NETFILTER_XT_MATCH_QUOTA2_LOG=y
|
||||
CONFIG_NETFILTER_XT_MATCH_SOCKET=y
|
||||
CONFIG_NETFILTER_XT_MATCH_STATE=y
|
||||
CONFIG_NETFILTER_XT_MATCH_STATISTIC=y
|
||||
CONFIG_NETFILTER_XT_MATCH_STRING=y
|
||||
CONFIG_NETFILTER_XT_MATCH_TIME=y
|
||||
CONFIG_NETFILTER_XT_MATCH_U32=y
|
||||
CONFIG_IP_NF_IPTABLES=y
|
||||
CONFIG_IP_NF_MATCH_ECN=y
|
||||
CONFIG_IP_NF_MATCH_TTL=y
|
||||
CONFIG_IP_NF_FILTER=y
|
||||
CONFIG_IP_NF_TARGET_REJECT=y
|
||||
CONFIG_IP_NF_NAT=y
|
||||
CONFIG_IP_NF_TARGET_MASQUERADE=y
|
||||
CONFIG_IP_NF_TARGET_NETMAP=y
|
||||
CONFIG_IP_NF_TARGET_REDIRECT=y
|
||||
CONFIG_IP_NF_MANGLE=y
|
||||
CONFIG_IP_NF_RAW=y
|
||||
CONFIG_IP_NF_SECURITY=y
|
||||
CONFIG_IP_NF_ARPTABLES=y
|
||||
CONFIG_IP_NF_ARPFILTER=y
|
||||
CONFIG_IP_NF_ARP_MANGLE=y
|
||||
CONFIG_IP6_NF_IPTABLES=y
|
||||
CONFIG_IP6_NF_MATCH_RPFILTER=y
|
||||
CONFIG_IP6_NF_FILTER=y
|
||||
CONFIG_IP6_NF_TARGET_REJECT=y
|
||||
CONFIG_IP6_NF_MANGLE=y
|
||||
CONFIG_IP6_NF_RAW=y
|
||||
CONFIG_TIPC=m
|
||||
CONFIG_L2TP=m
|
||||
CONFIG_BRIDGE=y
|
||||
CONFIG_VLAN_8021Q=m
|
||||
CONFIG_6LOWPAN=m
|
||||
CONFIG_IEEE802154=m
|
||||
CONFIG_IEEE802154_6LOWPAN=m
|
||||
CONFIG_MAC802154=m
|
||||
CONFIG_NET_SCHED=y
|
||||
CONFIG_NET_SCH_HTB=y
|
||||
CONFIG_NET_SCH_PRIO=y
|
||||
CONFIG_NET_SCH_MULTIQ=y
|
||||
CONFIG_NET_SCH_SFQ=y
|
||||
CONFIG_NET_SCH_TBF=y
|
||||
CONFIG_NET_SCH_NETEM=y
|
||||
CONFIG_NET_SCH_CODEL=y
|
||||
CONFIG_NET_SCH_FQ_CODEL=y
|
||||
CONFIG_NET_SCH_FQ=y
|
||||
CONFIG_NET_SCH_INGRESS=y
|
||||
CONFIG_NET_CLS_BASIC=y
|
||||
CONFIG_NET_CLS_FW=y
|
||||
CONFIG_NET_CLS_U32=y
|
||||
CONFIG_CLS_U32_MARK=y
|
||||
CONFIG_NET_CLS_FLOW=y
|
||||
CONFIG_NET_CLS_BPF=y
|
||||
CONFIG_NET_CLS_MATCHALL=y
|
||||
CONFIG_NET_EMATCH=y
|
||||
CONFIG_NET_EMATCH_CMP=y
|
||||
CONFIG_NET_EMATCH_NBYTE=y
|
||||
CONFIG_NET_EMATCH_U32=y
|
||||
CONFIG_NET_EMATCH_META=y
|
||||
CONFIG_NET_EMATCH_TEXT=y
|
||||
CONFIG_NET_CLS_ACT=y
|
||||
CONFIG_NET_ACT_POLICE=y
|
||||
CONFIG_NET_ACT_GACT=y
|
||||
CONFIG_NET_ACT_MIRRED=y
|
||||
CONFIG_NET_ACT_SKBEDIT=y
|
||||
CONFIG_NET_ACT_BPF=y
|
||||
CONFIG_VSOCKETS=y
|
||||
CONFIG_CGROUP_NET_PRIO=y
|
||||
CONFIG_CAN=m
|
||||
CONFIG_BT=m
|
||||
CONFIG_BT_RFCOMM=m
|
||||
CONFIG_BT_RFCOMM_TTY=y
|
||||
CONFIG_BT_HIDP=m
|
||||
CONFIG_BT_HCIBTSDIO=m
|
||||
CONFIG_BT_HCIUART=m
|
||||
CONFIG_BT_HCIUART_LL=y
|
||||
CONFIG_BT_HCIUART_BCM=y
|
||||
CONFIG_BT_HCIUART_QCA=y
|
||||
CONFIG_RFKILL=m
|
||||
CONFIG_NFC=m
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCIEPORTBUS=y
|
||||
CONFIG_PCIEAER=y
|
||||
CONFIG_PCI_IOV=y
|
||||
# CONFIG_VGA_ARB is not set
|
||||
CONFIG_PCI_HOST_GENERIC=y
|
||||
CONFIG_PCIE_DW_PLAT_EP=y
|
||||
CONFIG_PCI_ENDPOINT=y
|
||||
CONFIG_FW_LOADER_USER_HELPER=y
|
||||
# CONFIG_FW_CACHE is not set
|
||||
CONFIG_GNSS=y
|
||||
CONFIG_ZRAM=m
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_LOOP_MIN_COUNT=16
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=8192
|
||||
CONFIG_SRAM=y
|
||||
CONFIG_SCSI=y
|
||||
# CONFIG_SCSI_PROC_FS is not set
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_MD=y
|
||||
CONFIG_BLK_DEV_DM=y
|
||||
CONFIG_DM_CRYPT=y
|
||||
CONFIG_DM_DEFAULT_KEY=y
|
||||
CONFIG_DM_SNAPSHOT=y
|
||||
CONFIG_DM_UEVENT=y
|
||||
CONFIG_DM_VERITY=y
|
||||
CONFIG_DM_VERITY_FEC=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_DUMMY=y
|
||||
CONFIG_WIREGUARD=y
|
||||
CONFIG_IFB=y
|
||||
CONFIG_MACSEC=m
|
||||
CONFIG_TUN=y
|
||||
CONFIG_VETH=y
|
||||
CONFIG_LED_TRIGGER_PHY=y
|
||||
CONFIG_AX88796B_PHY=y
|
||||
CONFIG_CAN_VCAN=m
|
||||
CONFIG_CAN_SLCAN=m
|
||||
CONFIG_PPP=m
|
||||
CONFIG_PPP_BSDCOMP=m
|
||||
CONFIG_PPP_DEFLATE=m
|
||||
CONFIG_PPP_MPPE=m
|
||||
CONFIG_PPTP=m
|
||||
CONFIG_PPPOL2TP=m
|
||||
CONFIG_USB_NET_DRIVERS=m
|
||||
CONFIG_USB_RTL8150=m
|
||||
CONFIG_USB_RTL8152=m
|
||||
CONFIG_USB_USBNET=m
|
||||
CONFIG_USB_NET_CDC_EEM=m
|
||||
# CONFIG_USB_NET_NET1080 is not set
|
||||
# CONFIG_USB_NET_CDC_SUBSET is not set
|
||||
# CONFIG_USB_NET_ZAURUS is not set
|
||||
CONFIG_USB_NET_AQC111=m
|
||||
# CONFIG_WLAN_VENDOR_ADMTEK is not set
|
||||
# CONFIG_WLAN_VENDOR_ATH is not set
|
||||
# CONFIG_WLAN_VENDOR_ATMEL is not set
|
||||
# CONFIG_WLAN_VENDOR_BROADCOM is not set
|
||||
# CONFIG_WLAN_VENDOR_CISCO is not set
|
||||
# CONFIG_WLAN_VENDOR_INTEL is not set
|
||||
# CONFIG_WLAN_VENDOR_INTERSIL is not set
|
||||
# CONFIG_WLAN_VENDOR_MARVELL is not set
|
||||
# CONFIG_WLAN_VENDOR_MEDIATEK is not set
|
||||
# CONFIG_WLAN_VENDOR_RALINK is not set
|
||||
# CONFIG_WLAN_VENDOR_REALTEK is not set
|
||||
# CONFIG_WLAN_VENDOR_RSI is not set
|
||||
# CONFIG_WLAN_VENDOR_ST is not set
|
||||
# CONFIG_WLAN_VENDOR_TI is not set
|
||||
# CONFIG_WLAN_VENDOR_ZYDAS is not set
|
||||
# CONFIG_WLAN_VENDOR_QUANTENNA is not set
|
||||
CONFIG_WWAN=m
|
||||
# CONFIG_WWAN_DEBUGFS is not set
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
CONFIG_KEYBOARD_GPIO=y
|
||||
# CONFIG_MOUSE_PS2 is not set
|
||||
CONFIG_INPUT_JOYSTICK=y
|
||||
CONFIG_JOYSTICK_XPAD=y
|
||||
CONFIG_INPUT_TOUCHSCREEN=y
|
||||
CONFIG_INPUT_MISC=y
|
||||
CONFIG_INPUT_UINPUT=y
|
||||
# CONFIG_VT is not set
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
CONFIG_SERIAL_8250=y
|
||||
# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
# CONFIG_SERIAL_8250_EXAR is not set
|
||||
CONFIG_SERIAL_8250_NR_UARTS=32
|
||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=0
|
||||
CONFIG_SERIAL_8250_DW=y
|
||||
CONFIG_SERIAL_OF_PLATFORM=y
|
||||
CONFIG_SERIAL_SAMSUNG=y
|
||||
CONFIG_SERIAL_SAMSUNG_CONSOLE=y
|
||||
CONFIG_SERIAL_SPRD=y
|
||||
CONFIG_SERIAL_SPRD_CONSOLE=y
|
||||
CONFIG_NULL_TTY=y
|
||||
CONFIG_SERIAL_DEV_BUS=y
|
||||
CONFIG_HW_RANDOM=y
|
||||
# CONFIG_DEVMEM is not set
|
||||
# CONFIG_DEVPORT is not set
|
||||
# CONFIG_I2C_COMPAT is not set
|
||||
# CONFIG_I2C_HELPER_AUTO is not set
|
||||
CONFIG_I3C=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_MEM=y
|
||||
CONFIG_SPI_SLAVE=y
|
||||
CONFIG_PTP_1588_CLOCK=m
|
||||
CONFIG_PINCTRL=y
|
||||
CONFIG_GPIO_GENERIC_PLATFORM=y
|
||||
CONFIG_POWER_RESET=y
|
||||
CONFIG_POWER_RESET_SYSCON=y
|
||||
# CONFIG_HWMON is not set
|
||||
CONFIG_THERMAL=y
|
||||
CONFIG_THERMAL_NETLINK=y
|
||||
CONFIG_THERMAL_STATISTICS=y
|
||||
CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=100
|
||||
CONFIG_THERMAL_WRITABLE_TRIPS=y
|
||||
CONFIG_THERMAL_GOV_BANG_BANG=y
|
||||
CONFIG_THERMAL_GOV_USER_SPACE=y
|
||||
CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y
|
||||
CONFIG_CPU_THERMAL=y
|
||||
CONFIG_DEVFREQ_THERMAL=y
|
||||
CONFIG_THERMAL_EMULATION=y
|
||||
CONFIG_WATCHDOG=y
|
||||
CONFIG_WATCHDOG_CORE=y
|
||||
CONFIG_MFD_ACT8945A=y
|
||||
CONFIG_REGULATOR=y
|
||||
CONFIG_REGULATOR_FIXED_VOLTAGE=y
|
||||
CONFIG_RC_CORE=y
|
||||
CONFIG_BPF_LIRC_MODE2=y
|
||||
CONFIG_LIRC=y
|
||||
# CONFIG_RC_MAP is not set
|
||||
CONFIG_RC_DECODERS=y
|
||||
CONFIG_RC_DEVICES=y
|
||||
# CONFIG_MEDIA_ANALOG_TV_SUPPORT is not set
|
||||
# CONFIG_MEDIA_DIGITAL_TV_SUPPORT is not set
|
||||
# CONFIG_MEDIA_RADIO_SUPPORT is not set
|
||||
# CONFIG_MEDIA_SDR_SUPPORT is not set
|
||||
# CONFIG_MEDIA_TEST_SUPPORT is not set
|
||||
CONFIG_MEDIA_USB_SUPPORT=y
|
||||
CONFIG_USB_GSPCA=y
|
||||
CONFIG_USB_VIDEO_CLASS=y
|
||||
CONFIG_V4L_PLATFORM_DRIVERS=y
|
||||
CONFIG_V4L_MEM2MEM_DRIVERS=y
|
||||
CONFIG_DRM=y
|
||||
CONFIG_BACKLIGHT_CLASS_DEVICE=y
|
||||
CONFIG_SOUND=y
|
||||
CONFIG_SND=y
|
||||
CONFIG_SND_HRTIMER=y
|
||||
# CONFIG_SND_SUPPORT_OLD_API is not set
|
||||
# CONFIG_SND_VERBOSE_PROCFS is not set
|
||||
# CONFIG_SND_DRIVERS is not set
|
||||
CONFIG_SND_USB_AUDIO=y
|
||||
CONFIG_SND_SOC=y
|
||||
CONFIG_HID_BATTERY_STRENGTH=y
|
||||
CONFIG_HIDRAW=y
|
||||
CONFIG_UHID=y
|
||||
CONFIG_HID_APPLE=y
|
||||
CONFIG_HID_PRODIKEYS=y
|
||||
CONFIG_HID_ELECOM=y
|
||||
CONFIG_HID_UCLOGIC=y
|
||||
CONFIG_HID_LOGITECH=y
|
||||
CONFIG_HID_LOGITECH_DJ=y
|
||||
CONFIG_HID_MAGICMOUSE=y
|
||||
CONFIG_HID_MICROSOFT=y
|
||||
CONFIG_HID_MULTITOUCH=y
|
||||
CONFIG_HID_NINTENDO=y
|
||||
CONFIG_HID_PICOLCD=y
|
||||
CONFIG_HID_PLANTRONICS=y
|
||||
CONFIG_HID_PLAYSTATION=y
|
||||
CONFIG_PLAYSTATION_FF=y
|
||||
CONFIG_HID_ROCCAT=y
|
||||
CONFIG_HID_SONY=y
|
||||
CONFIG_SONY_FF=y
|
||||
CONFIG_HID_STEAM=y
|
||||
CONFIG_HID_WACOM=y
|
||||
CONFIG_HID_WIIMOTE=y
|
||||
CONFIG_USB_HIDDEV=y
|
||||
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
|
||||
CONFIG_USB_OTG=y
|
||||
CONFIG_USB_XHCI_HCD=y
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_EHCI_ROOT_HUB_TT=y
|
||||
CONFIG_USB_EHCI_HCD_PLATFORM=y
|
||||
CONFIG_USB_ACM=m
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_USB_UAS=y
|
||||
CONFIG_USB_DWC3=y
|
||||
CONFIG_USB_SERIAL=m
|
||||
CONFIG_USB_SERIAL_FTDI_SIO=m
|
||||
CONFIG_USB_GADGET=y
|
||||
CONFIG_USB_CONFIGFS=y
|
||||
CONFIG_ANDROID_USB_CONFIGFS_UEVENT=y
|
||||
CONFIG_USB_CONFIGFS_SERIAL=y
|
||||
CONFIG_USB_CONFIGFS_ACM=y
|
||||
CONFIG_USB_CONFIGFS_NCM=y
|
||||
CONFIG_USB_CONFIGFS_ECM=y
|
||||
CONFIG_USB_CONFIGFS_EEM=y
|
||||
CONFIG_USB_CONFIGFS_MASS_STORAGE=y
|
||||
CONFIG_USB_CONFIGFS_F_FS=y
|
||||
CONFIG_USB_CONFIGFS_F_UAC2=y
|
||||
CONFIG_USB_CONFIGFS_F_MIDI=y
|
||||
CONFIG_ANDROID_USB_F_MIDI_INFO=y
|
||||
CONFIG_USB_CONFIGFS_F_HID=y
|
||||
CONFIG_USB_CONFIGFS_F_UVC=y
|
||||
CONFIG_ANDROID_USB_CONFIGFS_F_ACC=y
|
||||
CONFIG_TYPEC=y
|
||||
CONFIG_TYPEC_TCPM=y
|
||||
CONFIG_TYPEC_TCPCI=y
|
||||
CONFIG_TYPEC_UCSI=y
|
||||
CONFIG_TYPEC_DP_ALTMODE=y
|
||||
CONFIG_MMC=y
|
||||
# CONFIG_PWRSEQ_EMMC is not set
|
||||
# CONFIG_PWRSEQ_SIMPLE is not set
|
||||
CONFIG_MMC_CRYPTO=y
|
||||
CONFIG_MMC_SDHCI=y
|
||||
CONFIG_MMC_SDHCI_PLTFM=y
|
||||
CONFIG_SCSI_UFSHCD=y
|
||||
CONFIG_SCSI_UFS_BSG=y
|
||||
CONFIG_SCSI_UFS_CRYPTO=y
|
||||
CONFIG_SCSI_UFSHCD_PCI=y
|
||||
CONFIG_SCSI_UFSHCD_PLATFORM=y
|
||||
CONFIG_SCSI_UFS_DWC_TC_PLATFORM=y
|
||||
CONFIG_LEDS_CLASS_FLASH=y
|
||||
CONFIG_LEDS_CLASS_MULTICOLOR=y
|
||||
CONFIG_LEDS_TRIGGER_TIMER=y
|
||||
CONFIG_LEDS_TRIGGER_TRANSIENT=y
|
||||
CONFIG_EDAC=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_DMABUF_HEAPS=y
|
||||
CONFIG_DMABUF_SYSFS_STATS=y
|
||||
CONFIG_UIO=y
|
||||
CONFIG_VHOST_VSOCK=y
|
||||
CONFIG_STAGING=y
|
||||
CONFIG_ASHMEM=y
|
||||
# CONFIG_SUNXI_CCU is not set
|
||||
CONFIG_HWSPINLOCK=y
|
||||
CONFIG_MAILBOX=y
|
||||
CONFIG_REMOTEPROC=y
|
||||
CONFIG_REMOTEPROC_CDEV=y
|
||||
CONFIG_RPMSG_CHAR=y
|
||||
CONFIG_DEVFREQ_GOV_PERFORMANCE=y
|
||||
CONFIG_DEVFREQ_GOV_POWERSAVE=y
|
||||
CONFIG_DEVFREQ_GOV_USERSPACE=y
|
||||
CONFIG_DEVFREQ_GOV_PASSIVE=y
|
||||
CONFIG_PM_DEVFREQ_EVENT=y
|
||||
CONFIG_IIO=y
|
||||
CONFIG_IIO_BUFFER=y
|
||||
CONFIG_IIO_TRIGGER=y
|
||||
CONFIG_PWM=y
|
||||
CONFIG_RESET_CONTROLLER=y
|
||||
CONFIG_GENERIC_PHY=y
|
||||
CONFIG_POWERCAP=y
|
||||
CONFIG_ANDROID_BINDER_IPC=y
|
||||
CONFIG_ANDROID_BINDERFS=y
|
||||
CONFIG_ANDROID_DEBUG_SYMBOLS=y
|
||||
CONFIG_ANDROID_VENDOR_HOOKS=y
|
||||
CONFIG_ANDROID_DEBUG_KINFO=y
|
||||
CONFIG_LIBNVDIMM=y
|
||||
CONFIG_INTERCONNECT=y
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_EXT4_FS_POSIX_ACL=y
|
||||
CONFIG_EXT4_FS_SECURITY=y
|
||||
CONFIG_F2FS_FS=y
|
||||
CONFIG_F2FS_FS_SECURITY=y
|
||||
CONFIG_F2FS_FS_COMPRESSION=y
|
||||
CONFIG_F2FS_UNFAIR_RWSEM=y
|
||||
CONFIG_FS_ENCRYPTION=y
|
||||
CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
|
||||
CONFIG_FS_VERITY=y
|
||||
# CONFIG_DNOTIFY is not set
|
||||
CONFIG_QUOTA=y
|
||||
CONFIG_QFMT_V2=y
|
||||
CONFIG_FUSE_FS=y
|
||||
CONFIG_VIRTIO_FS=y
|
||||
CONFIG_OVERLAY_FS=y
|
||||
CONFIG_INCREMENTAL_FS=y
|
||||
CONFIG_MSDOS_FS=y
|
||||
CONFIG_VFAT_FS=y
|
||||
CONFIG_EXFAT_FS=y
|
||||
CONFIG_TMPFS=y
|
||||
# CONFIG_EFIVAR_FS is not set
|
||||
CONFIG_PSTORE=y
|
||||
CONFIG_PSTORE_CONSOLE=y
|
||||
CONFIG_PSTORE_PMSG=y
|
||||
CONFIG_PSTORE_RAM=y
|
||||
CONFIG_EROFS_FS=y
|
||||
CONFIG_EROFS_FS_PCPU_KTHREAD=y
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_CODEPAGE_737=y
|
||||
CONFIG_NLS_CODEPAGE_775=y
|
||||
CONFIG_NLS_CODEPAGE_850=y
|
||||
CONFIG_NLS_CODEPAGE_852=y
|
||||
CONFIG_NLS_CODEPAGE_855=y
|
||||
CONFIG_NLS_CODEPAGE_857=y
|
||||
CONFIG_NLS_CODEPAGE_860=y
|
||||
CONFIG_NLS_CODEPAGE_861=y
|
||||
CONFIG_NLS_CODEPAGE_862=y
|
||||
CONFIG_NLS_CODEPAGE_863=y
|
||||
CONFIG_NLS_CODEPAGE_864=y
|
||||
CONFIG_NLS_CODEPAGE_865=y
|
||||
CONFIG_NLS_CODEPAGE_866=y
|
||||
CONFIG_NLS_CODEPAGE_869=y
|
||||
CONFIG_NLS_CODEPAGE_936=y
|
||||
CONFIG_NLS_CODEPAGE_950=y
|
||||
CONFIG_NLS_CODEPAGE_932=y
|
||||
CONFIG_NLS_CODEPAGE_949=y
|
||||
CONFIG_NLS_CODEPAGE_874=y
|
||||
CONFIG_NLS_ISO8859_8=y
|
||||
CONFIG_NLS_CODEPAGE_1250=y
|
||||
CONFIG_NLS_CODEPAGE_1251=y
|
||||
CONFIG_NLS_ASCII=y
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_NLS_ISO8859_2=y
|
||||
CONFIG_NLS_ISO8859_3=y
|
||||
CONFIG_NLS_ISO8859_4=y
|
||||
CONFIG_NLS_ISO8859_5=y
|
||||
CONFIG_NLS_ISO8859_6=y
|
||||
CONFIG_NLS_ISO8859_7=y
|
||||
CONFIG_NLS_ISO8859_9=y
|
||||
CONFIG_NLS_ISO8859_13=y
|
||||
CONFIG_NLS_ISO8859_14=y
|
||||
CONFIG_NLS_ISO8859_15=y
|
||||
CONFIG_NLS_KOI8_R=y
|
||||
CONFIG_NLS_KOI8_U=y
|
||||
CONFIG_NLS_MAC_ROMAN=y
|
||||
CONFIG_NLS_MAC_CELTIC=y
|
||||
CONFIG_NLS_MAC_CENTEURO=y
|
||||
CONFIG_NLS_MAC_CROATIAN=y
|
||||
CONFIG_NLS_MAC_CYRILLIC=y
|
||||
CONFIG_NLS_MAC_GAELIC=y
|
||||
CONFIG_NLS_MAC_GREEK=y
|
||||
CONFIG_NLS_MAC_ICELAND=y
|
||||
CONFIG_NLS_MAC_INUIT=y
|
||||
CONFIG_NLS_MAC_ROMANIAN=y
|
||||
CONFIG_NLS_MAC_TURKISH=y
|
||||
CONFIG_NLS_UTF8=y
|
||||
CONFIG_UNICODE=y
|
||||
CONFIG_SECURITY=y
|
||||
CONFIG_SECURITYFS=y
|
||||
CONFIG_SECURITY_NETWORK=y
|
||||
CONFIG_LSM_MMAP_MIN_ADDR=32768
|
||||
CONFIG_HARDENED_USERCOPY=y
|
||||
CONFIG_FORTIFY_SOURCE=y
|
||||
CONFIG_STATIC_USERMODEHELPER=y
|
||||
CONFIG_STATIC_USERMODEHELPER_PATH=""
|
||||
CONFIG_SECURITY_SELINUX=y
|
||||
CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y
|
||||
CONFIG_BUG_ON_DATA_CORRUPTION=y
|
||||
CONFIG_CRYPTO_ECDH=y
|
||||
CONFIG_CRYPTO_DES=y
|
||||
CONFIG_CRYPTO_ADIANTUM=y
|
||||
CONFIG_CRYPTO_HCTR2=y
|
||||
CONFIG_CRYPTO_CHACHA20POLY1305=y
|
||||
CONFIG_CRYPTO_CCM=y
|
||||
CONFIG_CRYPTO_BLAKE2B=y
|
||||
CONFIG_CRYPTO_CMAC=y
|
||||
CONFIG_CRYPTO_MD5=y
|
||||
CONFIG_CRYPTO_XCBC=y
|
||||
CONFIG_CRYPTO_LZO=y
|
||||
CONFIG_CRYPTO_LZ4=y
|
||||
CONFIG_CRYPTO_ZSTD=y
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=y
|
||||
CONFIG_CRC_CCITT=y
|
||||
CONFIG_CRC8=y
|
||||
CONFIG_XZ_DEC=y
|
||||
CONFIG_SWIOTLB_DYNAMIC=y
|
||||
CONFIG_DMA_CMA=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
CONFIG_PRINTK_CALLER=y
|
||||
CONFIG_DYNAMIC_DEBUG_CORE=y
|
||||
CONFIG_DEBUG_INFO_DWARF5=y
|
||||
CONFIG_DEBUG_INFO_COMPRESSED_ZSTD=y
|
||||
CONFIG_HEADERS_INSTALL=y
|
||||
# CONFIG_SECTION_MISMATCH_WARN_ONLY is not set
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_UBSAN=y
|
||||
CONFIG_UBSAN_TRAP=y
|
||||
# CONFIG_UBSAN_SHIFT is not set
|
||||
# CONFIG_UBSAN_BOOL is not set
|
||||
# CONFIG_UBSAN_ENUM is not set
|
||||
CONFIG_PAGE_OWNER=y
|
||||
CONFIG_DEBUG_STACK_USAGE=y
|
||||
CONFIG_DEBUG_MEMORY_INIT=y
|
||||
CONFIG_KFENCE=y
|
||||
CONFIG_KFENCE_SAMPLE_INTERVAL=500
|
||||
CONFIG_KFENCE_NUM_OBJECTS=63
|
||||
CONFIG_KFENCE_STATIC_KEYS=y
|
||||
CONFIG_PANIC_ON_OOPS=y
|
||||
CONFIG_PANIC_TIMEOUT=-1
|
||||
CONFIG_SOFTLOCKUP_DETECTOR=y
|
||||
CONFIG_WQ_WATCHDOG=y
|
||||
CONFIG_SCHEDSTATS=y
|
||||
CONFIG_SYNTH_EVENTS=y
|
||||
CONFIG_KUNIT=y
|
||||
CONFIG_KUNIT_DEBUGFS=y
|
||||
# CONFIG_KUNIT_DEFAULT_ENABLED is not set
|
||||
# CONFIG_RUNTIME_TESTING_MENU is not set
|
|
@ -319,7 +319,7 @@ unsigned long __must_check clear_user(void __user *to, unsigned long n)
|
|||
|
||||
#define __get_kernel_nofault(dst, src, type, err_label) \
|
||||
do { \
|
||||
long __kr_err; \
|
||||
long __kr_err = 0; \
|
||||
\
|
||||
__get_user_nocheck(*((type *)(dst)), (type *)(src), __kr_err); \
|
||||
if (unlikely(__kr_err)) \
|
||||
|
@ -328,7 +328,7 @@ do { \
|
|||
|
||||
#define __put_kernel_nofault(dst, src, type, err_label) \
|
||||
do { \
|
||||
long __kr_err; \
|
||||
long __kr_err = 0; \
|
||||
\
|
||||
__put_user_nocheck(*((type *)(src)), (type *)(dst), __kr_err); \
|
||||
if (unlikely(__kr_err)) \
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
#define AT_L3_CACHEGEOMETRY 47
|
||||
|
||||
/* entries in ARCH_DLINFO */
|
||||
#define AT_VECTOR_SIZE_ARCH 9
|
||||
#define AT_VECTOR_SIZE_ARCH 10
|
||||
#define AT_MINSIGSTKSZ 51
|
||||
|
||||
#endif /* _UAPI_ASM_RISCV_AUXVEC_H */
|
||||
|
|
|
@ -80,6 +80,8 @@ static int __patch_insn_set(void *addr, u8 c, size_t len)
|
|||
*/
|
||||
lockdep_assert_held(&text_mutex);
|
||||
|
||||
preempt_disable();
|
||||
|
||||
if (across_pages)
|
||||
patch_map(addr + PAGE_SIZE, FIX_TEXT_POKE1);
|
||||
|
||||
|
@ -92,6 +94,8 @@ static int __patch_insn_set(void *addr, u8 c, size_t len)
|
|||
if (across_pages)
|
||||
patch_unmap(FIX_TEXT_POKE1);
|
||||
|
||||
preempt_enable();
|
||||
|
||||
return 0;
|
||||
}
|
||||
NOKPROBE_SYMBOL(__patch_insn_set);
|
||||
|
@ -122,6 +126,8 @@ static int __patch_insn_write(void *addr, const void *insn, size_t len)
|
|||
if (!riscv_patch_in_stop_machine)
|
||||
lockdep_assert_held(&text_mutex);
|
||||
|
||||
preempt_disable();
|
||||
|
||||
if (across_pages)
|
||||
patch_map(addr + PAGE_SIZE, FIX_TEXT_POKE1);
|
||||
|
||||
|
@ -134,6 +140,8 @@ static int __patch_insn_write(void *addr, const void *insn, size_t len)
|
|||
if (across_pages)
|
||||
patch_unmap(FIX_TEXT_POKE1);
|
||||
|
||||
preempt_enable();
|
||||
|
||||
return ret;
|
||||
}
|
||||
NOKPROBE_SYMBOL(__patch_insn_write);
|
||||
|
|
|
@ -26,8 +26,6 @@
|
|||
#include <asm/cpuidle.h>
|
||||
#include <asm/vector.h>
|
||||
|
||||
register unsigned long gp_in_global __asm__("gp");
|
||||
|
||||
#if defined(CONFIG_STACKPROTECTOR) && !defined(CONFIG_STACKPROTECTOR_PER_TASK)
|
||||
#include <linux/stackprotector.h>
|
||||
unsigned long __stack_chk_guard __read_mostly;
|
||||
|
@ -189,7 +187,6 @@ int copy_thread(struct task_struct *p, const struct kernel_clone_args *args)
|
|||
if (unlikely(args->fn)) {
|
||||
/* Kernel thread */
|
||||
memset(childregs, 0, sizeof(struct pt_regs));
|
||||
childregs->gp = gp_in_global;
|
||||
/* Supervisor/Machine, irqs on: */
|
||||
childregs->status = SR_PP | SR_PIE;
|
||||
|
||||
|
|
|
@ -137,11 +137,21 @@ static void aplic_write_pending(struct aplic *aplic, u32 irq, bool pending)
|
|||
raw_spin_lock_irqsave(&irqd->lock, flags);
|
||||
|
||||
sm = irqd->sourcecfg & APLIC_SOURCECFG_SM_MASK;
|
||||
if (!pending &&
|
||||
((sm == APLIC_SOURCECFG_SM_LEVEL_HIGH) ||
|
||||
(sm == APLIC_SOURCECFG_SM_LEVEL_LOW)))
|
||||
if (sm == APLIC_SOURCECFG_SM_INACTIVE)
|
||||
goto skip_write_pending;
|
||||
|
||||
if (sm == APLIC_SOURCECFG_SM_LEVEL_HIGH ||
|
||||
sm == APLIC_SOURCECFG_SM_LEVEL_LOW) {
|
||||
if (!pending)
|
||||
goto skip_write_pending;
|
||||
if ((irqd->state & APLIC_IRQ_STATE_INPUT) &&
|
||||
sm == APLIC_SOURCECFG_SM_LEVEL_LOW)
|
||||
goto skip_write_pending;
|
||||
if (!(irqd->state & APLIC_IRQ_STATE_INPUT) &&
|
||||
sm == APLIC_SOURCECFG_SM_LEVEL_HIGH)
|
||||
goto skip_write_pending;
|
||||
}
|
||||
|
||||
if (pending)
|
||||
irqd->state |= APLIC_IRQ_STATE_PENDING;
|
||||
else
|
||||
|
@ -187,16 +197,31 @@ static void aplic_write_enabled(struct aplic *aplic, u32 irq, bool enabled)
|
|||
|
||||
static bool aplic_read_input(struct aplic *aplic, u32 irq)
|
||||
{
|
||||
bool ret;
|
||||
unsigned long flags;
|
||||
u32 sourcecfg, sm, raw_input, irq_inverted;
|
||||
struct aplic_irq *irqd;
|
||||
unsigned long flags;
|
||||
bool ret = false;
|
||||
|
||||
if (!irq || aplic->nr_irqs <= irq)
|
||||
return false;
|
||||
irqd = &aplic->irqs[irq];
|
||||
|
||||
raw_spin_lock_irqsave(&irqd->lock, flags);
|
||||
ret = (irqd->state & APLIC_IRQ_STATE_INPUT) ? true : false;
|
||||
|
||||
sourcecfg = irqd->sourcecfg;
|
||||
if (sourcecfg & APLIC_SOURCECFG_D)
|
||||
goto skip;
|
||||
|
||||
sm = sourcecfg & APLIC_SOURCECFG_SM_MASK;
|
||||
if (sm == APLIC_SOURCECFG_SM_INACTIVE)
|
||||
goto skip;
|
||||
|
||||
raw_input = (irqd->state & APLIC_IRQ_STATE_INPUT) ? 1 : 0;
|
||||
irq_inverted = (sm == APLIC_SOURCECFG_SM_LEVEL_LOW ||
|
||||
sm == APLIC_SOURCECFG_SM_EDGE_FALL) ? 1 : 0;
|
||||
ret = !!(raw_input ^ irq_inverted);
|
||||
|
||||
skip:
|
||||
raw_spin_unlock_irqrestore(&irqd->lock, flags);
|
||||
|
||||
return ret;
|
||||
|
|
|
@ -360,7 +360,7 @@ static void pgtable_pud_populate(p4d_t *p4d, unsigned long addr, unsigned long e
|
|||
}
|
||||
pmd = boot_crst_alloc(_SEGMENT_ENTRY_EMPTY);
|
||||
pud_populate(&init_mm, pud, pmd);
|
||||
} else if (pud_large(*pud)) {
|
||||
} else if (pud_leaf(*pud)) {
|
||||
continue;
|
||||
}
|
||||
pgtable_pmd_populate(pud, addr, next, mode);
|
||||
|
|
|
@ -729,7 +729,7 @@ static inline int pud_bad(pud_t pud)
|
|||
{
|
||||
unsigned long type = pud_val(pud) & _REGION_ENTRY_TYPE_MASK;
|
||||
|
||||
if (type > _REGION_ENTRY_TYPE_R3 || pud_large(pud))
|
||||
if (type > _REGION_ENTRY_TYPE_R3 || pud_leaf(pud))
|
||||
return 1;
|
||||
if (type < _REGION_ENTRY_TYPE_R3)
|
||||
return 0;
|
||||
|
@ -1398,7 +1398,7 @@ static inline unsigned long pud_deref(pud_t pud)
|
|||
unsigned long origin_mask;
|
||||
|
||||
origin_mask = _REGION_ENTRY_ORIGIN;
|
||||
if (pud_large(pud))
|
||||
if (pud_leaf(pud))
|
||||
origin_mask = _REGION3_ENTRY_ORIGIN_LARGE;
|
||||
return (unsigned long)__va(pud_val(pud) & origin_mask);
|
||||
}
|
||||
|
|
|
@ -653,6 +653,7 @@ SYM_DATA_START_LOCAL(daton_psw)
|
|||
SYM_DATA_END(daton_psw)
|
||||
|
||||
.section .rodata, "a"
|
||||
.balign 8
|
||||
#define SYSCALL(esame,emu) .quad __s390x_ ## esame
|
||||
SYM_DATA_START(sys_call_table)
|
||||
#include "asm/syscall_table.h"
|
||||
|
|
|
@ -596,7 +596,7 @@ int __gmap_link(struct gmap *gmap, unsigned long gaddr, unsigned long vmaddr)
|
|||
pud = pud_offset(p4d, vmaddr);
|
||||
VM_BUG_ON(pud_none(*pud));
|
||||
/* large puds cannot yet be handled */
|
||||
if (pud_large(*pud))
|
||||
if (pud_leaf(*pud))
|
||||
return -EFAULT;
|
||||
pmd = pmd_offset(pud, vmaddr);
|
||||
VM_BUG_ON(pmd_none(*pmd));
|
||||
|
|
|
@ -224,7 +224,7 @@ pte_t *huge_pte_offset(struct mm_struct *mm,
|
|||
if (p4d_present(*p4dp)) {
|
||||
pudp = pud_offset(p4dp, addr);
|
||||
if (pud_present(*pudp)) {
|
||||
if (pud_large(*pudp))
|
||||
if (pud_leaf(*pudp))
|
||||
return (pte_t *) pudp;
|
||||
pmdp = pmd_offset(pudp, addr);
|
||||
}
|
||||
|
@ -240,7 +240,7 @@ int pmd_huge(pmd_t pmd)
|
|||
|
||||
int pud_huge(pud_t pud)
|
||||
{
|
||||
return pud_large(pud);
|
||||
return pud_leaf(pud);
|
||||
}
|
||||
|
||||
bool __init arch_hugetlb_valid_size(unsigned long size)
|
||||
|
|
|
@ -274,7 +274,7 @@ static int walk_pud_level(p4d_t *p4d, unsigned long addr, unsigned long end,
|
|||
if (pud_none(*pudp))
|
||||
return -EINVAL;
|
||||
next = pud_addr_end(addr, end);
|
||||
if (pud_large(*pudp)) {
|
||||
if (pud_leaf(*pudp)) {
|
||||
need_split = !!(flags & SET_MEMORY_4K);
|
||||
need_split |= !!(addr & ~PUD_MASK);
|
||||
need_split |= !!(addr + PUD_SIZE > next);
|
||||
|
|
|
@ -479,7 +479,7 @@ static int pmd_lookup(struct mm_struct *mm, unsigned long addr, pmd_t **pmdp)
|
|||
return -ENOENT;
|
||||
|
||||
/* Large PUDs are not supported yet. */
|
||||
if (pud_large(*pud))
|
||||
if (pud_leaf(*pud))
|
||||
return -EFAULT;
|
||||
|
||||
*pmdp = pmd_offset(pud, addr);
|
||||
|
|
|
@ -322,7 +322,7 @@ static int modify_pud_table(p4d_t *p4d, unsigned long addr, unsigned long end,
|
|||
if (!add) {
|
||||
if (pud_none(*pud))
|
||||
continue;
|
||||
if (pud_large(*pud)) {
|
||||
if (pud_leaf(*pud)) {
|
||||
if (IS_ALIGNED(addr, PUD_SIZE) &&
|
||||
IS_ALIGNED(next, PUD_SIZE)) {
|
||||
pud_clear(pud);
|
||||
|
@ -343,7 +343,7 @@ static int modify_pud_table(p4d_t *p4d, unsigned long addr, unsigned long end,
|
|||
if (!pmd)
|
||||
goto out;
|
||||
pud_populate(&init_mm, pud, pmd);
|
||||
} else if (pud_large(*pud)) {
|
||||
} else if (pud_leaf(*pud)) {
|
||||
continue;
|
||||
}
|
||||
ret = modify_pmd_table(pud, addr, next, add, direct);
|
||||
|
@ -586,7 +586,7 @@ pte_t *vmem_get_alloc_pte(unsigned long addr, bool alloc)
|
|||
if (!pmd)
|
||||
goto out;
|
||||
pud_populate(&init_mm, pud, pmd);
|
||||
} else if (WARN_ON_ONCE(pud_large(*pud))) {
|
||||
} else if (WARN_ON_ONCE(pud_leaf(*pud))) {
|
||||
goto out;
|
||||
}
|
||||
pmd = pmd_offset(pud, addr);
|
||||
|
|
|
@ -516,11 +516,12 @@ static void bpf_skip(struct bpf_jit *jit, int size)
|
|||
* PLT for hotpatchable calls. The calling convention is the same as for the
|
||||
* ftrace hotpatch trampolines: %r0 is return address, %r1 is clobbered.
|
||||
*/
|
||||
extern const char bpf_plt[];
|
||||
extern const char bpf_plt_ret[];
|
||||
extern const char bpf_plt_target[];
|
||||
extern const char bpf_plt_end[];
|
||||
#define BPF_PLT_SIZE 32
|
||||
struct bpf_plt {
|
||||
char code[16];
|
||||
void *ret;
|
||||
void *target;
|
||||
} __packed;
|
||||
extern const struct bpf_plt bpf_plt;
|
||||
asm(
|
||||
".pushsection .rodata\n"
|
||||
" .balign 8\n"
|
||||
|
@ -531,15 +532,14 @@ asm(
|
|||
" .balign 8\n"
|
||||
"bpf_plt_ret: .quad 0\n"
|
||||
"bpf_plt_target: .quad 0\n"
|
||||
"bpf_plt_end:\n"
|
||||
" .popsection\n"
|
||||
);
|
||||
|
||||
static void bpf_jit_plt(void *plt, void *ret, void *target)
|
||||
static void bpf_jit_plt(struct bpf_plt *plt, void *ret, void *target)
|
||||
{
|
||||
memcpy(plt, bpf_plt, BPF_PLT_SIZE);
|
||||
*(void **)((char *)plt + (bpf_plt_ret - bpf_plt)) = ret;
|
||||
*(void **)((char *)plt + (bpf_plt_target - bpf_plt)) = target ?: ret;
|
||||
memcpy(plt, &bpf_plt, sizeof(*plt));
|
||||
plt->ret = ret;
|
||||
plt->target = target;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -662,9 +662,9 @@ static void bpf_jit_epilogue(struct bpf_jit *jit, u32 stack_depth)
|
|||
jit->prg = ALIGN(jit->prg, 8);
|
||||
jit->prologue_plt = jit->prg;
|
||||
if (jit->prg_buf)
|
||||
bpf_jit_plt(jit->prg_buf + jit->prg,
|
||||
bpf_jit_plt((struct bpf_plt *)(jit->prg_buf + jit->prg),
|
||||
jit->prg_buf + jit->prologue_plt_ret, NULL);
|
||||
jit->prg += BPF_PLT_SIZE;
|
||||
jit->prg += sizeof(struct bpf_plt);
|
||||
}
|
||||
|
||||
static int get_probe_mem_regno(const u8 *insn)
|
||||
|
@ -1901,9 +1901,6 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *fp)
|
|||
struct bpf_jit jit;
|
||||
int pass;
|
||||
|
||||
if (WARN_ON_ONCE(bpf_plt_end - bpf_plt != BPF_PLT_SIZE))
|
||||
return orig_fp;
|
||||
|
||||
if (!fp->jit_requested)
|
||||
return orig_fp;
|
||||
|
||||
|
@ -2009,14 +2006,11 @@ bool bpf_jit_supports_far_kfunc_call(void)
|
|||
int bpf_arch_text_poke(void *ip, enum bpf_text_poke_type t,
|
||||
void *old_addr, void *new_addr)
|
||||
{
|
||||
struct bpf_plt expected_plt, current_plt, new_plt, *plt;
|
||||
struct {
|
||||
u16 opc;
|
||||
s32 disp;
|
||||
} __packed insn;
|
||||
char expected_plt[BPF_PLT_SIZE];
|
||||
char current_plt[BPF_PLT_SIZE];
|
||||
char new_plt[BPF_PLT_SIZE];
|
||||
char *plt;
|
||||
char *ret;
|
||||
int err;
|
||||
|
||||
|
@ -2035,18 +2029,18 @@ int bpf_arch_text_poke(void *ip, enum bpf_text_poke_type t,
|
|||
*/
|
||||
} else {
|
||||
/* Verify the PLT. */
|
||||
plt = (char *)ip + (insn.disp << 1);
|
||||
err = copy_from_kernel_nofault(current_plt, plt, BPF_PLT_SIZE);
|
||||
plt = ip + (insn.disp << 1);
|
||||
err = copy_from_kernel_nofault(¤t_plt, plt,
|
||||
sizeof(current_plt));
|
||||
if (err < 0)
|
||||
return err;
|
||||
ret = (char *)ip + 6;
|
||||
bpf_jit_plt(expected_plt, ret, old_addr);
|
||||
if (memcmp(current_plt, expected_plt, BPF_PLT_SIZE))
|
||||
bpf_jit_plt(&expected_plt, ret, old_addr);
|
||||
if (memcmp(¤t_plt, &expected_plt, sizeof(current_plt)))
|
||||
return -EINVAL;
|
||||
/* Adjust the call address. */
|
||||
bpf_jit_plt(new_plt, ret, new_addr);
|
||||
s390_kernel_write(plt + (bpf_plt_target - bpf_plt),
|
||||
new_plt + (bpf_plt_target - bpf_plt),
|
||||
bpf_jit_plt(&new_plt, ret, new_addr);
|
||||
s390_kernel_write(&plt->target, &new_plt.target,
|
||||
sizeof(void *));
|
||||
}
|
||||
|
||||
|
|
|
@ -1,256 +1,11 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/* parport.h: sparc64 specific parport initialization and dma.
|
||||
*
|
||||
* Copyright (C) 1999 Eddie C. Dost (ecd@skynet.be)
|
||||
*/
|
||||
#ifndef ___ASM_SPARC_PARPORT_H
|
||||
#define ___ASM_SPARC_PARPORT_H
|
||||
|
||||
#ifndef _ASM_SPARC64_PARPORT_H
|
||||
#define _ASM_SPARC64_PARPORT_H 1
|
||||
|
||||
#include <linux/of.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
#include <asm/ebus_dma.h>
|
||||
#include <asm/ns87303.h>
|
||||
#include <asm/prom.h>
|
||||
|
||||
#define PARPORT_PC_MAX_PORTS PARPORT_MAX
|
||||
|
||||
/*
|
||||
* While sparc64 doesn't have an ISA DMA API, we provide something that looks
|
||||
* close enough to make parport_pc happy
|
||||
*/
|
||||
#define HAS_DMA
|
||||
|
||||
#ifdef CONFIG_PARPORT_PC_FIFO
|
||||
static DEFINE_SPINLOCK(dma_spin_lock);
|
||||
|
||||
#define claim_dma_lock() \
|
||||
({ unsigned long flags; \
|
||||
spin_lock_irqsave(&dma_spin_lock, flags); \
|
||||
flags; \
|
||||
})
|
||||
|
||||
#define release_dma_lock(__flags) \
|
||||
spin_unlock_irqrestore(&dma_spin_lock, __flags);
|
||||
#if defined(__sparc__) && defined(__arch64__)
|
||||
#include <asm/parport_64.h>
|
||||
#else
|
||||
#include <asm-generic/parport.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
static struct sparc_ebus_info {
|
||||
struct ebus_dma_info info;
|
||||
unsigned int addr;
|
||||
unsigned int count;
|
||||
int lock;
|
||||
|
||||
struct parport *port;
|
||||
} sparc_ebus_dmas[PARPORT_PC_MAX_PORTS];
|
||||
|
||||
static DECLARE_BITMAP(dma_slot_map, PARPORT_PC_MAX_PORTS);
|
||||
|
||||
static inline int request_dma(unsigned int dmanr, const char *device_id)
|
||||
{
|
||||
if (dmanr >= PARPORT_PC_MAX_PORTS)
|
||||
return -EINVAL;
|
||||
if (xchg(&sparc_ebus_dmas[dmanr].lock, 1) != 0)
|
||||
return -EBUSY;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void free_dma(unsigned int dmanr)
|
||||
{
|
||||
if (dmanr >= PARPORT_PC_MAX_PORTS) {
|
||||
printk(KERN_WARNING "Trying to free DMA%d\n", dmanr);
|
||||
return;
|
||||
}
|
||||
if (xchg(&sparc_ebus_dmas[dmanr].lock, 0) == 0) {
|
||||
printk(KERN_WARNING "Trying to free free DMA%d\n", dmanr);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static inline void enable_dma(unsigned int dmanr)
|
||||
{
|
||||
ebus_dma_enable(&sparc_ebus_dmas[dmanr].info, 1);
|
||||
|
||||
if (ebus_dma_request(&sparc_ebus_dmas[dmanr].info,
|
||||
sparc_ebus_dmas[dmanr].addr,
|
||||
sparc_ebus_dmas[dmanr].count))
|
||||
BUG();
|
||||
}
|
||||
|
||||
static inline void disable_dma(unsigned int dmanr)
|
||||
{
|
||||
ebus_dma_enable(&sparc_ebus_dmas[dmanr].info, 0);
|
||||
}
|
||||
|
||||
static inline void clear_dma_ff(unsigned int dmanr)
|
||||
{
|
||||
/* nothing */
|
||||
}
|
||||
|
||||
static inline void set_dma_mode(unsigned int dmanr, char mode)
|
||||
{
|
||||
ebus_dma_prepare(&sparc_ebus_dmas[dmanr].info, (mode != DMA_MODE_WRITE));
|
||||
}
|
||||
|
||||
static inline void set_dma_addr(unsigned int dmanr, unsigned int addr)
|
||||
{
|
||||
sparc_ebus_dmas[dmanr].addr = addr;
|
||||
}
|
||||
|
||||
static inline void set_dma_count(unsigned int dmanr, unsigned int count)
|
||||
{
|
||||
sparc_ebus_dmas[dmanr].count = count;
|
||||
}
|
||||
|
||||
static inline unsigned int get_dma_residue(unsigned int dmanr)
|
||||
{
|
||||
return ebus_dma_residue(&sparc_ebus_dmas[dmanr].info);
|
||||
}
|
||||
|
||||
static int ecpp_probe(struct platform_device *op)
|
||||
{
|
||||
unsigned long base = op->resource[0].start;
|
||||
unsigned long config = op->resource[1].start;
|
||||
unsigned long d_base = op->resource[2].start;
|
||||
unsigned long d_len;
|
||||
struct device_node *parent;
|
||||
struct parport *p;
|
||||
int slot, err;
|
||||
|
||||
parent = op->dev.of_node->parent;
|
||||
if (of_node_name_eq(parent, "dma")) {
|
||||
p = parport_pc_probe_port(base, base + 0x400,
|
||||
op->archdata.irqs[0], PARPORT_DMA_NOFIFO,
|
||||
op->dev.parent->parent, 0);
|
||||
if (!p)
|
||||
return -ENOMEM;
|
||||
dev_set_drvdata(&op->dev, p);
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (slot = 0; slot < PARPORT_PC_MAX_PORTS; slot++) {
|
||||
if (!test_and_set_bit(slot, dma_slot_map))
|
||||
break;
|
||||
}
|
||||
err = -ENODEV;
|
||||
if (slot >= PARPORT_PC_MAX_PORTS)
|
||||
goto out_err;
|
||||
|
||||
spin_lock_init(&sparc_ebus_dmas[slot].info.lock);
|
||||
|
||||
d_len = (op->resource[2].end - d_base) + 1UL;
|
||||
sparc_ebus_dmas[slot].info.regs =
|
||||
of_ioremap(&op->resource[2], 0, d_len, "ECPP DMA");
|
||||
|
||||
if (!sparc_ebus_dmas[slot].info.regs)
|
||||
goto out_clear_map;
|
||||
|
||||
sparc_ebus_dmas[slot].info.flags = 0;
|
||||
sparc_ebus_dmas[slot].info.callback = NULL;
|
||||
sparc_ebus_dmas[slot].info.client_cookie = NULL;
|
||||
sparc_ebus_dmas[slot].info.irq = 0xdeadbeef;
|
||||
strcpy(sparc_ebus_dmas[slot].info.name, "parport");
|
||||
if (ebus_dma_register(&sparc_ebus_dmas[slot].info))
|
||||
goto out_unmap_regs;
|
||||
|
||||
ebus_dma_irq_enable(&sparc_ebus_dmas[slot].info, 1);
|
||||
|
||||
/* Configure IRQ to Push Pull, Level Low */
|
||||
/* Enable ECP, set bit 2 of the CTR first */
|
||||
outb(0x04, base + 0x02);
|
||||
ns87303_modify(config, PCR,
|
||||
PCR_EPP_ENABLE |
|
||||
PCR_IRQ_ODRAIN,
|
||||
PCR_ECP_ENABLE |
|
||||
PCR_ECP_CLK_ENA |
|
||||
PCR_IRQ_POLAR);
|
||||
|
||||
/* CTR bit 5 controls direction of port */
|
||||
ns87303_modify(config, PTR,
|
||||
0, PTR_LPT_REG_DIR);
|
||||
|
||||
p = parport_pc_probe_port(base, base + 0x400,
|
||||
op->archdata.irqs[0],
|
||||
slot,
|
||||
op->dev.parent,
|
||||
0);
|
||||
err = -ENOMEM;
|
||||
if (!p)
|
||||
goto out_disable_irq;
|
||||
|
||||
dev_set_drvdata(&op->dev, p);
|
||||
|
||||
return 0;
|
||||
|
||||
out_disable_irq:
|
||||
ebus_dma_irq_enable(&sparc_ebus_dmas[slot].info, 0);
|
||||
ebus_dma_unregister(&sparc_ebus_dmas[slot].info);
|
||||
|
||||
out_unmap_regs:
|
||||
of_iounmap(&op->resource[2], sparc_ebus_dmas[slot].info.regs, d_len);
|
||||
|
||||
out_clear_map:
|
||||
clear_bit(slot, dma_slot_map);
|
||||
|
||||
out_err:
|
||||
return err;
|
||||
}
|
||||
|
||||
static int ecpp_remove(struct platform_device *op)
|
||||
{
|
||||
struct parport *p = dev_get_drvdata(&op->dev);
|
||||
int slot = p->dma;
|
||||
|
||||
parport_pc_unregister_port(p);
|
||||
|
||||
if (slot != PARPORT_DMA_NOFIFO) {
|
||||
unsigned long d_base = op->resource[2].start;
|
||||
unsigned long d_len;
|
||||
|
||||
d_len = (op->resource[2].end - d_base) + 1UL;
|
||||
|
||||
ebus_dma_irq_enable(&sparc_ebus_dmas[slot].info, 0);
|
||||
ebus_dma_unregister(&sparc_ebus_dmas[slot].info);
|
||||
of_iounmap(&op->resource[2],
|
||||
sparc_ebus_dmas[slot].info.regs,
|
||||
d_len);
|
||||
clear_bit(slot, dma_slot_map);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct of_device_id ecpp_match[] = {
|
||||
{
|
||||
.name = "ecpp",
|
||||
},
|
||||
{
|
||||
.name = "parallel",
|
||||
.compatible = "ecpp",
|
||||
},
|
||||
{
|
||||
.name = "parallel",
|
||||
.compatible = "ns87317-ecpp",
|
||||
},
|
||||
{
|
||||
.name = "parallel",
|
||||
.compatible = "pnpALI,1533,3",
|
||||
},
|
||||
{},
|
||||
};
|
||||
|
||||
static struct platform_driver ecpp_driver = {
|
||||
.driver = {
|
||||
.name = "ecpp",
|
||||
.of_match_table = ecpp_match,
|
||||
},
|
||||
.probe = ecpp_probe,
|
||||
.remove = ecpp_remove,
|
||||
};
|
||||
|
||||
static int parport_pc_find_nonpci_ports(int autoirq, int autodma)
|
||||
{
|
||||
return platform_driver_register(&ecpp_driver);
|
||||
}
|
||||
|
||||
#endif /* !(_ASM_SPARC64_PARPORT_H */
|
||||
|
|
256
arch/sparc/include/asm/parport_64.h
Normal file
256
arch/sparc/include/asm/parport_64.h
Normal file
|
@ -0,0 +1,256 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/* parport.h: sparc64 specific parport initialization and dma.
|
||||
*
|
||||
* Copyright (C) 1999 Eddie C. Dost (ecd@skynet.be)
|
||||
*/
|
||||
|
||||
#ifndef _ASM_SPARC64_PARPORT_H
|
||||
#define _ASM_SPARC64_PARPORT_H 1
|
||||
|
||||
#include <linux/of.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
#include <asm/ebus_dma.h>
|
||||
#include <asm/ns87303.h>
|
||||
#include <asm/prom.h>
|
||||
|
||||
#define PARPORT_PC_MAX_PORTS PARPORT_MAX
|
||||
|
||||
/*
|
||||
* While sparc64 doesn't have an ISA DMA API, we provide something that looks
|
||||
* close enough to make parport_pc happy
|
||||
*/
|
||||
#define HAS_DMA
|
||||
|
||||
#ifdef CONFIG_PARPORT_PC_FIFO
|
||||
static DEFINE_SPINLOCK(dma_spin_lock);
|
||||
|
||||
#define claim_dma_lock() \
|
||||
({ unsigned long flags; \
|
||||
spin_lock_irqsave(&dma_spin_lock, flags); \
|
||||
flags; \
|
||||
})
|
||||
|
||||
#define release_dma_lock(__flags) \
|
||||
spin_unlock_irqrestore(&dma_spin_lock, __flags);
|
||||
#endif
|
||||
|
||||
static struct sparc_ebus_info {
|
||||
struct ebus_dma_info info;
|
||||
unsigned int addr;
|
||||
unsigned int count;
|
||||
int lock;
|
||||
|
||||
struct parport *port;
|
||||
} sparc_ebus_dmas[PARPORT_PC_MAX_PORTS];
|
||||
|
||||
static DECLARE_BITMAP(dma_slot_map, PARPORT_PC_MAX_PORTS);
|
||||
|
||||
static inline int request_dma(unsigned int dmanr, const char *device_id)
|
||||
{
|
||||
if (dmanr >= PARPORT_PC_MAX_PORTS)
|
||||
return -EINVAL;
|
||||
if (xchg(&sparc_ebus_dmas[dmanr].lock, 1) != 0)
|
||||
return -EBUSY;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void free_dma(unsigned int dmanr)
|
||||
{
|
||||
if (dmanr >= PARPORT_PC_MAX_PORTS) {
|
||||
printk(KERN_WARNING "Trying to free DMA%d\n", dmanr);
|
||||
return;
|
||||
}
|
||||
if (xchg(&sparc_ebus_dmas[dmanr].lock, 0) == 0) {
|
||||
printk(KERN_WARNING "Trying to free free DMA%d\n", dmanr);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static inline void enable_dma(unsigned int dmanr)
|
||||
{
|
||||
ebus_dma_enable(&sparc_ebus_dmas[dmanr].info, 1);
|
||||
|
||||
if (ebus_dma_request(&sparc_ebus_dmas[dmanr].info,
|
||||
sparc_ebus_dmas[dmanr].addr,
|
||||
sparc_ebus_dmas[dmanr].count))
|
||||
BUG();
|
||||
}
|
||||
|
||||
static inline void disable_dma(unsigned int dmanr)
|
||||
{
|
||||
ebus_dma_enable(&sparc_ebus_dmas[dmanr].info, 0);
|
||||
}
|
||||
|
||||
static inline void clear_dma_ff(unsigned int dmanr)
|
||||
{
|
||||
/* nothing */
|
||||
}
|
||||
|
||||
static inline void set_dma_mode(unsigned int dmanr, char mode)
|
||||
{
|
||||
ebus_dma_prepare(&sparc_ebus_dmas[dmanr].info, (mode != DMA_MODE_WRITE));
|
||||
}
|
||||
|
||||
static inline void set_dma_addr(unsigned int dmanr, unsigned int addr)
|
||||
{
|
||||
sparc_ebus_dmas[dmanr].addr = addr;
|
||||
}
|
||||
|
||||
static inline void set_dma_count(unsigned int dmanr, unsigned int count)
|
||||
{
|
||||
sparc_ebus_dmas[dmanr].count = count;
|
||||
}
|
||||
|
||||
static inline unsigned int get_dma_residue(unsigned int dmanr)
|
||||
{
|
||||
return ebus_dma_residue(&sparc_ebus_dmas[dmanr].info);
|
||||
}
|
||||
|
||||
static int ecpp_probe(struct platform_device *op)
|
||||
{
|
||||
unsigned long base = op->resource[0].start;
|
||||
unsigned long config = op->resource[1].start;
|
||||
unsigned long d_base = op->resource[2].start;
|
||||
unsigned long d_len;
|
||||
struct device_node *parent;
|
||||
struct parport *p;
|
||||
int slot, err;
|
||||
|
||||
parent = op->dev.of_node->parent;
|
||||
if (of_node_name_eq(parent, "dma")) {
|
||||
p = parport_pc_probe_port(base, base + 0x400,
|
||||
op->archdata.irqs[0], PARPORT_DMA_NOFIFO,
|
||||
op->dev.parent->parent, 0);
|
||||
if (!p)
|
||||
return -ENOMEM;
|
||||
dev_set_drvdata(&op->dev, p);
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (slot = 0; slot < PARPORT_PC_MAX_PORTS; slot++) {
|
||||
if (!test_and_set_bit(slot, dma_slot_map))
|
||||
break;
|
||||
}
|
||||
err = -ENODEV;
|
||||
if (slot >= PARPORT_PC_MAX_PORTS)
|
||||
goto out_err;
|
||||
|
||||
spin_lock_init(&sparc_ebus_dmas[slot].info.lock);
|
||||
|
||||
d_len = (op->resource[2].end - d_base) + 1UL;
|
||||
sparc_ebus_dmas[slot].info.regs =
|
||||
of_ioremap(&op->resource[2], 0, d_len, "ECPP DMA");
|
||||
|
||||
if (!sparc_ebus_dmas[slot].info.regs)
|
||||
goto out_clear_map;
|
||||
|
||||
sparc_ebus_dmas[slot].info.flags = 0;
|
||||
sparc_ebus_dmas[slot].info.callback = NULL;
|
||||
sparc_ebus_dmas[slot].info.client_cookie = NULL;
|
||||
sparc_ebus_dmas[slot].info.irq = 0xdeadbeef;
|
||||
strcpy(sparc_ebus_dmas[slot].info.name, "parport");
|
||||
if (ebus_dma_register(&sparc_ebus_dmas[slot].info))
|
||||
goto out_unmap_regs;
|
||||
|
||||
ebus_dma_irq_enable(&sparc_ebus_dmas[slot].info, 1);
|
||||
|
||||
/* Configure IRQ to Push Pull, Level Low */
|
||||
/* Enable ECP, set bit 2 of the CTR first */
|
||||
outb(0x04, base + 0x02);
|
||||
ns87303_modify(config, PCR,
|
||||
PCR_EPP_ENABLE |
|
||||
PCR_IRQ_ODRAIN,
|
||||
PCR_ECP_ENABLE |
|
||||
PCR_ECP_CLK_ENA |
|
||||
PCR_IRQ_POLAR);
|
||||
|
||||
/* CTR bit 5 controls direction of port */
|
||||
ns87303_modify(config, PTR,
|
||||
0, PTR_LPT_REG_DIR);
|
||||
|
||||
p = parport_pc_probe_port(base, base + 0x400,
|
||||
op->archdata.irqs[0],
|
||||
slot,
|
||||
op->dev.parent,
|
||||
0);
|
||||
err = -ENOMEM;
|
||||
if (!p)
|
||||
goto out_disable_irq;
|
||||
|
||||
dev_set_drvdata(&op->dev, p);
|
||||
|
||||
return 0;
|
||||
|
||||
out_disable_irq:
|
||||
ebus_dma_irq_enable(&sparc_ebus_dmas[slot].info, 0);
|
||||
ebus_dma_unregister(&sparc_ebus_dmas[slot].info);
|
||||
|
||||
out_unmap_regs:
|
||||
of_iounmap(&op->resource[2], sparc_ebus_dmas[slot].info.regs, d_len);
|
||||
|
||||
out_clear_map:
|
||||
clear_bit(slot, dma_slot_map);
|
||||
|
||||
out_err:
|
||||
return err;
|
||||
}
|
||||
|
||||
static int ecpp_remove(struct platform_device *op)
|
||||
{
|
||||
struct parport *p = dev_get_drvdata(&op->dev);
|
||||
int slot = p->dma;
|
||||
|
||||
parport_pc_unregister_port(p);
|
||||
|
||||
if (slot != PARPORT_DMA_NOFIFO) {
|
||||
unsigned long d_base = op->resource[2].start;
|
||||
unsigned long d_len;
|
||||
|
||||
d_len = (op->resource[2].end - d_base) + 1UL;
|
||||
|
||||
ebus_dma_irq_enable(&sparc_ebus_dmas[slot].info, 0);
|
||||
ebus_dma_unregister(&sparc_ebus_dmas[slot].info);
|
||||
of_iounmap(&op->resource[2],
|
||||
sparc_ebus_dmas[slot].info.regs,
|
||||
d_len);
|
||||
clear_bit(slot, dma_slot_map);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct of_device_id ecpp_match[] = {
|
||||
{
|
||||
.name = "ecpp",
|
||||
},
|
||||
{
|
||||
.name = "parallel",
|
||||
.compatible = "ecpp",
|
||||
},
|
||||
{
|
||||
.name = "parallel",
|
||||
.compatible = "ns87317-ecpp",
|
||||
},
|
||||
{
|
||||
.name = "parallel",
|
||||
.compatible = "pnpALI,1533,3",
|
||||
},
|
||||
{},
|
||||
};
|
||||
|
||||
static struct platform_driver ecpp_driver = {
|
||||
.driver = {
|
||||
.name = "ecpp",
|
||||
.of_match_table = ecpp_match,
|
||||
},
|
||||
.probe = ecpp_probe,
|
||||
.remove = ecpp_remove,
|
||||
};
|
||||
|
||||
static int parport_pc_find_nonpci_ports(int autoirq, int autodma)
|
||||
{
|
||||
return platform_driver_register(&ecpp_driver);
|
||||
}
|
||||
|
||||
#endif /* !(_ASM_SPARC64_PARPORT_H */
|
|
@ -279,7 +279,7 @@ static int __init setup_nmi_watchdog(char *str)
|
|||
if (!strncmp(str, "panic", 5))
|
||||
panic_on_timeout = 1;
|
||||
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
__setup("nmi_watchdog=", setup_nmi_watchdog);
|
||||
|
||||
|
|
|
@ -1665,7 +1665,7 @@ bool kern_addr_valid(unsigned long addr)
|
|||
if (pud_none(*pud))
|
||||
return false;
|
||||
|
||||
if (pud_large(*pud))
|
||||
if (pud_leaf(*pud))
|
||||
return pfn_valid(pud_pfn(*pud));
|
||||
|
||||
pmd = pmd_offset(pud, addr);
|
||||
|
|
|
@ -449,9 +449,8 @@ static __init int vdso_setup(char *s)
|
|||
unsigned long val;
|
||||
|
||||
err = kstrtoul(s, 10, &val);
|
||||
if (err)
|
||||
return err;
|
||||
vdso_enabled = val;
|
||||
return 0;
|
||||
if (!err)
|
||||
vdso_enabled = val;
|
||||
return 1;
|
||||
}
|
||||
__setup("vdso=", vdso_setup);
|
||||
|
|
|
@ -1514,19 +1514,6 @@ config AMD_MEM_ENCRYPT
|
|||
This requires an AMD processor that supports Secure Memory
|
||||
Encryption (SME).
|
||||
|
||||
config AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT
|
||||
bool "Activate AMD Secure Memory Encryption (SME) by default"
|
||||
depends on AMD_MEM_ENCRYPT
|
||||
help
|
||||
Say yes to have system memory encrypted by default if running on
|
||||
an AMD processor that supports Secure Memory Encryption (SME).
|
||||
|
||||
If set to Y, then the encryption of system memory can be
|
||||
deactivated with the mem_encrypt=off command line option.
|
||||
|
||||
If set to N, then the encryption of system memory can be
|
||||
activated with the mem_encrypt=on command line option.
|
||||
|
||||
# Common NUMA Features
|
||||
config NUMA
|
||||
bool "NUMA Memory Allocation and Scheduler Support"
|
||||
|
@ -2582,6 +2569,16 @@ config MITIGATION_RFDS
|
|||
stored in floating point, vector and integer registers.
|
||||
See also <file:Documentation/admin-guide/hw-vuln/reg-file-data-sampling.rst>
|
||||
|
||||
config MITIGATION_SPECTRE_BHI
|
||||
bool "Mitigate Spectre-BHB (Branch History Injection)"
|
||||
depends on CPU_SUP_INTEL
|
||||
default y
|
||||
help
|
||||
Enable BHI mitigations. BHI attacks are a form of Spectre V2 attacks
|
||||
where the branch history buffer is poisoned to speculatively steer
|
||||
indirect branches.
|
||||
See <file:Documentation/admin-guide/hw-vuln/spectre.rst>
|
||||
|
||||
endif
|
||||
|
||||
config ARCH_HAS_ADD_PAGES
|
||||
|
|
|
@ -84,7 +84,7 @@ LDFLAGS_vmlinux += -T
|
|||
hostprogs := mkpiggy
|
||||
HOST_EXTRACFLAGS += -I$(srctree)/tools/include
|
||||
|
||||
sed-voffset := -e 's/^\([0-9a-fA-F]*\) [ABCDGRSTVW] \(_text\|__bss_start\|_end\)$$/\#define VO_\2 _AC(0x\1,UL)/p'
|
||||
sed-voffset := -e 's/^\([0-9a-fA-F]*\) [ABCDGRSTVW] \(_text\|__start_rodata\|__bss_start\|_end\)$$/\#define VO_\2 _AC(0x\1,UL)/p'
|
||||
|
||||
quiet_cmd_voffset = VOFFSET $@
|
||||
cmd_voffset = $(NM) $< | sed -n $(sed-voffset) > $@
|
||||
|
|
|
@ -15,10 +15,12 @@
|
|||
*/
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/msr.h>
|
||||
#include <asm/page_types.h>
|
||||
#include <asm/processor-flags.h>
|
||||
#include <asm/segment.h>
|
||||
#include <asm/setup.h>
|
||||
|
||||
.code64
|
||||
.text
|
||||
|
@ -49,6 +51,11 @@ SYM_FUNC_START(startup_64_mixed_mode)
|
|||
lea efi32_boot_args(%rip), %rdx
|
||||
mov 0(%rdx), %edi
|
||||
mov 4(%rdx), %esi
|
||||
|
||||
/* Switch to the firmware's stack */
|
||||
movl efi32_boot_sp(%rip), %esp
|
||||
andl $~7, %esp
|
||||
|
||||
#ifdef CONFIG_EFI_HANDOVER_PROTOCOL
|
||||
mov 8(%rdx), %edx // saved bootparams pointer
|
||||
test %edx, %edx
|
||||
|
@ -144,6 +151,7 @@ SYM_FUNC_END(__efi64_thunk)
|
|||
SYM_FUNC_START(efi32_stub_entry)
|
||||
call 1f
|
||||
1: popl %ecx
|
||||
leal (efi32_boot_args - 1b)(%ecx), %ebx
|
||||
|
||||
/* Clear BSS */
|
||||
xorl %eax, %eax
|
||||
|
@ -158,6 +166,7 @@ SYM_FUNC_START(efi32_stub_entry)
|
|||
popl %ecx
|
||||
popl %edx
|
||||
popl %esi
|
||||
movl %esi, 8(%ebx)
|
||||
jmp efi32_entry
|
||||
SYM_FUNC_END(efi32_stub_entry)
|
||||
#endif
|
||||
|
@ -234,8 +243,6 @@ SYM_FUNC_END(efi_enter32)
|
|||
*
|
||||
* Arguments: %ecx image handle
|
||||
* %edx EFI system table pointer
|
||||
* %esi struct bootparams pointer (or NULL when not using
|
||||
* the EFI handover protocol)
|
||||
*
|
||||
* Since this is the point of no return for ordinary execution, no registers
|
||||
* are considered live except for the function parameters. [Note that the EFI
|
||||
|
@ -254,13 +261,25 @@ SYM_FUNC_START_LOCAL(efi32_entry)
|
|||
/* Store firmware IDT descriptor */
|
||||
sidtl (efi32_boot_idt - 1b)(%ebx)
|
||||
|
||||
/* Store firmware stack pointer */
|
||||
movl %esp, (efi32_boot_sp - 1b)(%ebx)
|
||||
|
||||
/* Store boot arguments */
|
||||
leal (efi32_boot_args - 1b)(%ebx), %ebx
|
||||
movl %ecx, 0(%ebx)
|
||||
movl %edx, 4(%ebx)
|
||||
movl %esi, 8(%ebx)
|
||||
movb $0x0, 12(%ebx) // efi_is64
|
||||
|
||||
/*
|
||||
* Allocate some memory for a temporary struct boot_params, which only
|
||||
* needs the minimal pieces that startup_32() relies on.
|
||||
*/
|
||||
subl $PARAM_SIZE, %esp
|
||||
movl %esp, %esi
|
||||
movl $PAGE_SIZE, BP_kernel_alignment(%esi)
|
||||
movl $_end - 1b, BP_init_size(%esi)
|
||||
subl $startup_32 - 1b, BP_init_size(%esi)
|
||||
|
||||
/* Disable paging */
|
||||
movl %cr0, %eax
|
||||
btrl $X86_CR0_PG_BIT, %eax
|
||||
|
@ -286,8 +305,7 @@ SYM_FUNC_START(efi32_pe_entry)
|
|||
|
||||
movl 8(%ebp), %ecx // image_handle
|
||||
movl 12(%ebp), %edx // sys_table
|
||||
xorl %esi, %esi
|
||||
jmp efi32_entry // pass %ecx, %edx, %esi
|
||||
jmp efi32_entry // pass %ecx, %edx
|
||||
// no other registers remain live
|
||||
|
||||
2: popl %edi // restore callee-save registers
|
||||
|
@ -318,5 +336,6 @@ SYM_DATA_END(efi32_boot_idt)
|
|||
|
||||
SYM_DATA_LOCAL(efi32_boot_cs, .word 0)
|
||||
SYM_DATA_LOCAL(efi32_boot_ds, .word 0)
|
||||
SYM_DATA_LOCAL(efi32_boot_sp, .long 0)
|
||||
SYM_DATA_LOCAL(efi32_boot_args, .long 0, 0, 0)
|
||||
SYM_DATA(efi_is64, .byte 1)
|
||||
|
|
|
@ -330,6 +330,7 @@ static size_t parse_elf(void *output)
|
|||
return ehdr.e_entry - LOAD_PHYSICAL_ADDR;
|
||||
}
|
||||
|
||||
const unsigned long kernel_text_size = VO___start_rodata - VO__text;
|
||||
const unsigned long kernel_total_size = VO__end - VO__text;
|
||||
|
||||
static u8 boot_heap[BOOT_HEAP_SIZE] __aligned(4);
|
||||
|
@ -357,6 +358,19 @@ unsigned long decompress_kernel(unsigned char *outbuf, unsigned long virt_addr,
|
|||
return entry;
|
||||
}
|
||||
|
||||
/*
|
||||
* Set the memory encryption xloadflag based on the mem_encrypt= command line
|
||||
* parameter, if provided.
|
||||
*/
|
||||
static void parse_mem_encrypt(struct setup_header *hdr)
|
||||
{
|
||||
int on = cmdline_find_option_bool("mem_encrypt=on");
|
||||
int off = cmdline_find_option_bool("mem_encrypt=off");
|
||||
|
||||
if (on > off)
|
||||
hdr->xloadflags |= XLF_MEM_ENCRYPTION;
|
||||
}
|
||||
|
||||
/*
|
||||
* The compressed kernel image (ZO), has been moved so that its position
|
||||
* is against the end of the buffer used to hold the uncompressed kernel
|
||||
|
@ -387,6 +401,8 @@ asmlinkage __visible void *extract_kernel(void *rmode, unsigned char *output)
|
|||
/* Clear flags intended for solely in-kernel use. */
|
||||
boot_params->hdr.loadflags &= ~KASLR_FLAG;
|
||||
|
||||
parse_mem_encrypt(&boot_params->hdr);
|
||||
|
||||
sanitize_boot_params(boot_params);
|
||||
|
||||
if (boot_params->screen_info.orig_video_mode == 7) {
|
||||
|
|
|
@ -116,6 +116,9 @@ static bool fault_in_kernel_space(unsigned long address)
|
|||
#undef __init
|
||||
#define __init
|
||||
|
||||
#undef __head
|
||||
#define __head
|
||||
|
||||
#define __BOOT_COMPRESSED
|
||||
|
||||
/* Basic instruction decoding support needed */
|
||||
|
|
|
@ -3,18 +3,22 @@
|
|||
* Confidential Computing Platform Capability checks
|
||||
*
|
||||
* Copyright (C) 2021 Advanced Micro Devices, Inc.
|
||||
* Copyright (C) 2024 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
|
||||
*
|
||||
* Author: Tom Lendacky <thomas.lendacky@amd.com>
|
||||
*/
|
||||
|
||||
#include <linux/export.h>
|
||||
#include <linux/cc_platform.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/random.h>
|
||||
|
||||
#include <asm/archrandom.h>
|
||||
#include <asm/coco.h>
|
||||
#include <asm/processor.h>
|
||||
|
||||
enum cc_vendor cc_vendor __ro_after_init = CC_VENDOR_NONE;
|
||||
static u64 cc_mask __ro_after_init;
|
||||
u64 cc_mask __ro_after_init;
|
||||
|
||||
static bool noinstr intel_cc_platform_has(enum cc_attr attr)
|
||||
{
|
||||
|
@ -149,7 +153,39 @@ u64 cc_mkdec(u64 val)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(cc_mkdec);
|
||||
|
||||
__init void cc_set_mask(u64 mask)
|
||||
__init void cc_random_init(void)
|
||||
{
|
||||
cc_mask = mask;
|
||||
/*
|
||||
* The seed is 32 bytes (in units of longs), which is 256 bits, which
|
||||
* is the security level that the RNG is targeting.
|
||||
*/
|
||||
unsigned long rng_seed[32 / sizeof(long)];
|
||||
size_t i, longs;
|
||||
|
||||
if (!cc_platform_has(CC_ATTR_GUEST_MEM_ENCRYPT))
|
||||
return;
|
||||
|
||||
/*
|
||||
* Since the CoCo threat model includes the host, the only reliable
|
||||
* source of entropy that can be neither observed nor manipulated is
|
||||
* RDRAND. Usually, RDRAND failure is considered tolerable, but since
|
||||
* CoCo guests have no other unobservable source of entropy, it's
|
||||
* important to at least ensure the RNG gets some initial random seeds.
|
||||
*/
|
||||
for (i = 0; i < ARRAY_SIZE(rng_seed); i += longs) {
|
||||
longs = arch_get_random_longs(&rng_seed[i], ARRAY_SIZE(rng_seed) - i);
|
||||
|
||||
/*
|
||||
* A zero return value means that the guest doesn't have RDRAND
|
||||
* or the CPU is physically broken, and in both cases that
|
||||
* means most crypto inside of the CoCo instance will be
|
||||
* broken, defeating the purpose of CoCo in the first place. So
|
||||
* just panic here because it's absolutely unsafe to continue
|
||||
* executing.
|
||||
*/
|
||||
if (longs == 0)
|
||||
panic("RDRAND is defective.");
|
||||
}
|
||||
add_device_randomness(rng_seed, sizeof(rng_seed));
|
||||
memzero_explicit(rng_seed, sizeof(rng_seed));
|
||||
}
|
||||
|
|
|
@ -67,6 +67,8 @@ CONFIG_CMDLINE="console=ttynull stack_depot_disable=on cgroup_disable=pressure b
|
|||
CONFIG_PM_WAKELOCKS=y
|
||||
CONFIG_PM_WAKELOCKS_LIMIT=0
|
||||
# CONFIG_PM_WAKELOCKS_GC is not set
|
||||
CONFIG_PM_DEBUG=y
|
||||
CONFIG_PM_ADVANCED_DEBUG=y
|
||||
# CONFIG_ACPI_AC is not set
|
||||
# CONFIG_ACPI_BATTERY is not set
|
||||
# CONFIG_ACPI_FAN is not set
|
||||
|
@ -120,14 +122,12 @@ CONFIG_LRU_GEN=y
|
|||
CONFIG_LRU_GEN_ENABLED=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_XFRM_USER=y
|
||||
CONFIG_XFRM_INTERFACE=y
|
||||
CONFIG_XFRM_MIGRATE=y
|
||||
CONFIG_XFRM_STATISTICS=y
|
||||
CONFIG_NET_KEY=y
|
||||
CONFIG_XDP_SOCKETS=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
CONFIG_IP_ADVANCED_ROUTER=y
|
||||
CONFIG_IP_MULTIPLE_TABLES=y
|
||||
|
@ -278,6 +278,7 @@ CONFIG_BT_HCIUART_LL=y
|
|||
CONFIG_BT_HCIUART_BCM=y
|
||||
CONFIG_BT_HCIUART_QCA=y
|
||||
CONFIG_RFKILL=m
|
||||
CONFIG_NET_9P=m
|
||||
CONFIG_NFC=m
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCIEPORTBUS=y
|
||||
|
|
|
@ -48,7 +48,7 @@ static __always_inline bool do_syscall_x64(struct pt_regs *regs, int nr)
|
|||
|
||||
if (likely(unr < NR_syscalls)) {
|
||||
unr = array_index_nospec(unr, NR_syscalls);
|
||||
regs->ax = sys_call_table[unr](regs);
|
||||
regs->ax = x64_sys_call(regs, unr);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
@ -65,7 +65,7 @@ static __always_inline bool do_syscall_x32(struct pt_regs *regs, int nr)
|
|||
|
||||
if (IS_ENABLED(CONFIG_X86_X32_ABI) && likely(xnr < X32_NR_syscalls)) {
|
||||
xnr = array_index_nospec(xnr, X32_NR_syscalls);
|
||||
regs->ax = x32_sys_call_table[xnr](regs);
|
||||
regs->ax = x32_sys_call(regs, xnr);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
@ -114,7 +114,7 @@ static __always_inline void do_syscall_32_irqs_on(struct pt_regs *regs, int nr)
|
|||
|
||||
if (likely(unr < IA32_NR_syscalls)) {
|
||||
unr = array_index_nospec(unr, IA32_NR_syscalls);
|
||||
regs->ax = ia32_sys_call_table[unr](regs);
|
||||
regs->ax = ia32_sys_call(regs, unr);
|
||||
} else if (nr != -1) {
|
||||
regs->ax = __ia32_sys_ni_syscall(regs);
|
||||
}
|
||||
|
@ -141,7 +141,7 @@ static __always_inline bool int80_is_external(void)
|
|||
}
|
||||
|
||||
/**
|
||||
* int80_emulation - 32-bit legacy syscall entry
|
||||
* do_int80_emulation - 32-bit legacy syscall C entry from asm
|
||||
*
|
||||
* This entry point can be used by 32-bit and 64-bit programs to perform
|
||||
* 32-bit system calls. Instances of INT $0x80 can be found inline in
|
||||
|
@ -159,7 +159,7 @@ static __always_inline bool int80_is_external(void)
|
|||
* eax: system call number
|
||||
* ebx, ecx, edx, esi, edi, ebp: arg1 - arg 6
|
||||
*/
|
||||
DEFINE_IDTENTRY_RAW(int80_emulation)
|
||||
__visible noinstr void do_int80_emulation(struct pt_regs *regs)
|
||||
{
|
||||
int nr;
|
||||
|
||||
|
|
|
@ -116,6 +116,7 @@ SYM_INNER_LABEL(entry_SYSCALL_64_after_hwframe, SYM_L_GLOBAL)
|
|||
/* clobbers %rax, make sure it is after saving the syscall nr */
|
||||
IBRS_ENTER
|
||||
UNTRAIN_RET
|
||||
CLEAR_BRANCH_HISTORY
|
||||
|
||||
call do_syscall_64 /* returns with IRQs disabled */
|
||||
|
||||
|
@ -1549,3 +1550,63 @@ SYM_CODE_START_NOALIGN(rewind_stack_and_make_dead)
|
|||
call make_task_dead
|
||||
SYM_CODE_END(rewind_stack_and_make_dead)
|
||||
.popsection
|
||||
|
||||
/*
|
||||
* This sequence executes branches in order to remove user branch information
|
||||
* from the branch history tracker in the Branch Predictor, therefore removing
|
||||
* user influence on subsequent BTB lookups.
|
||||
*
|
||||
* It should be used on parts prior to Alder Lake. Newer parts should use the
|
||||
* BHI_DIS_S hardware control instead. If a pre-Alder Lake part is being
|
||||
* virtualized on newer hardware the VMM should protect against BHI attacks by
|
||||
* setting BHI_DIS_S for the guests.
|
||||
*
|
||||
* CALLs/RETs are necessary to prevent Loop Stream Detector(LSD) from engaging
|
||||
* and not clearing the branch history. The call tree looks like:
|
||||
*
|
||||
* call 1
|
||||
* call 2
|
||||
* call 2
|
||||
* call 2
|
||||
* call 2
|
||||
* call 2
|
||||
* ret
|
||||
* ret
|
||||
* ret
|
||||
* ret
|
||||
* ret
|
||||
* ret
|
||||
*
|
||||
* This means that the stack is non-constant and ORC can't unwind it with %rsp
|
||||
* alone. Therefore we unconditionally set up the frame pointer, which allows
|
||||
* ORC to unwind properly.
|
||||
*
|
||||
* The alignment is for performance and not for safety, and may be safely
|
||||
* refactored in the future if needed.
|
||||
*/
|
||||
SYM_FUNC_START(clear_bhb_loop)
|
||||
push %rbp
|
||||
mov %rsp, %rbp
|
||||
movl $5, %ecx
|
||||
ANNOTATE_INTRA_FUNCTION_CALL
|
||||
call 1f
|
||||
jmp 5f
|
||||
.align 64, 0xcc
|
||||
ANNOTATE_INTRA_FUNCTION_CALL
|
||||
1: call 2f
|
||||
RET
|
||||
.align 64, 0xcc
|
||||
2: movl $5, %eax
|
||||
3: jmp 4f
|
||||
nop
|
||||
4: sub $1, %eax
|
||||
jnz 3b
|
||||
sub $1, %ecx
|
||||
jnz 1b
|
||||
RET
|
||||
5: lfence
|
||||
pop %rbp
|
||||
RET
|
||||
SYM_FUNC_END(clear_bhb_loop)
|
||||
EXPORT_SYMBOL_GPL(clear_bhb_loop)
|
||||
STACK_FRAME_NON_STANDARD(clear_bhb_loop)
|
||||
|
|
|
@ -92,6 +92,7 @@ SYM_INNER_LABEL(entry_SYSENTER_compat_after_hwframe, SYM_L_GLOBAL)
|
|||
|
||||
IBRS_ENTER
|
||||
UNTRAIN_RET
|
||||
CLEAR_BRANCH_HISTORY
|
||||
|
||||
/*
|
||||
* SYSENTER doesn't filter flags, so we need to clear NT and AC
|
||||
|
@ -209,6 +210,7 @@ SYM_INNER_LABEL(entry_SYSCALL_compat_after_hwframe, SYM_L_GLOBAL)
|
|||
|
||||
IBRS_ENTER
|
||||
UNTRAIN_RET
|
||||
CLEAR_BRANCH_HISTORY
|
||||
|
||||
movq %rsp, %rdi
|
||||
call do_fast_syscall_32
|
||||
|
@ -277,3 +279,17 @@ SYM_INNER_LABEL(entry_SYSRETL_compat_end, SYM_L_GLOBAL)
|
|||
ANNOTATE_NOENDBR
|
||||
int3
|
||||
SYM_CODE_END(entry_SYSCALL_compat)
|
||||
|
||||
/*
|
||||
* int 0x80 is used by 32 bit mode as a system call entry. Normally idt entries
|
||||
* point to C routines, however since this is a system call interface the branch
|
||||
* history needs to be scrubbed to protect against BHI attacks, and that
|
||||
* scrubbing needs to take place in assembly code prior to entering any C
|
||||
* routines.
|
||||
*/
|
||||
SYM_CODE_START(int80_emulation)
|
||||
ANNOTATE_NOENDBR
|
||||
UNWIND_HINT_FUNC
|
||||
CLEAR_BRANCH_HISTORY
|
||||
jmp do_int80_emulation
|
||||
SYM_CODE_END(int80_emulation)
|
||||
|
|
|
@ -18,8 +18,25 @@
|
|||
#include <asm/syscalls_32.h>
|
||||
#undef __SYSCALL
|
||||
|
||||
/*
|
||||
* The sys_call_table[] is no longer used for system calls, but
|
||||
* kernel/trace/trace_syscalls.c still wants to know the system
|
||||
* call address.
|
||||
*/
|
||||
#ifdef CONFIG_X86_32
|
||||
#define __SYSCALL(nr, sym) __ia32_##sym,
|
||||
|
||||
__visible const sys_call_ptr_t ia32_sys_call_table[] = {
|
||||
const sys_call_ptr_t sys_call_table[] = {
|
||||
#include <asm/syscalls_32.h>
|
||||
};
|
||||
#undef __SYSCALL
|
||||
#endif
|
||||
|
||||
#define __SYSCALL(nr, sym) case nr: return __ia32_##sym(regs);
|
||||
|
||||
long ia32_sys_call(const struct pt_regs *regs, unsigned int nr)
|
||||
{
|
||||
switch (nr) {
|
||||
#include <asm/syscalls_32.h>
|
||||
default: return __ia32_sys_ni_syscall(regs);
|
||||
}
|
||||
};
|
||||
|
|
|
@ -11,8 +11,23 @@
|
|||
#include <asm/syscalls_64.h>
|
||||
#undef __SYSCALL
|
||||
|
||||
/*
|
||||
* The sys_call_table[] is no longer used for system calls, but
|
||||
* kernel/trace/trace_syscalls.c still wants to know the system
|
||||
* call address.
|
||||
*/
|
||||
#define __SYSCALL(nr, sym) __x64_##sym,
|
||||
|
||||
asmlinkage const sys_call_ptr_t sys_call_table[] = {
|
||||
const sys_call_ptr_t sys_call_table[] = {
|
||||
#include <asm/syscalls_64.h>
|
||||
};
|
||||
#undef __SYSCALL
|
||||
|
||||
#define __SYSCALL(nr, sym) case nr: return __x64_##sym(regs);
|
||||
|
||||
long x64_sys_call(const struct pt_regs *regs, unsigned int nr)
|
||||
{
|
||||
switch (nr) {
|
||||
#include <asm/syscalls_64.h>
|
||||
default: return __x64_sys_ni_syscall(regs);
|
||||
}
|
||||
};
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user