mirror of
https://github.com/torvalds/linux.git
synced 2024-11-24 21:21:41 +00:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Cross-merge networking fixes after downstream PR. Conflicts: drivers/net/phy/aquantia/aquantia.h219343755e
("net: phy: aquantia: add missing include guards")61578f6793
("net: phy: aquantia: add support for PHY LEDs") drivers/net/ethernet/wangxun/libwx/wx_hw.cbd07a98178
("net: txgbe: remove separate irq request for MSI and INTx")b501d261a5
("net: txgbe: add FDIR ATR support") https://lore.kernel.org/all/20240703112936.483c1975@canb.auug.org.au/ include/linux/mlx5/mlx5_ifc.h048a403648
("net/mlx5: IFC updates for changing max EQs")99be56171f
("net/mlx5e: SHAMPO, Re-enable HW-GRO") https://lore.kernel.org/all/20240701133951.6926b2e3@canb.auug.org.au/ Adjacent changes: drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c4130c67cd1
("wifi: iwlwifi: mvm: check vif for NULL/ERR_PTR before dereference")3f3126515f
("wifi: iwlwifi: mvm: add mvm-specific guard") include/net/mac80211.h816c6bec09
("wifi: mac80211: fix BSS_CHANGED_UNSOL_BCAST_PROBE_RESP")5a009b42e0
("wifi: mac80211: track changes in AP's TPE") Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
76ed626479
@ -788,25 +788,6 @@
|
||||
Documentation/networking/netconsole.rst for an
|
||||
alternative.
|
||||
|
||||
<DEVNAME>:<n>.<n>[,options]
|
||||
Use the specified serial port on the serial core bus.
|
||||
The addressing uses DEVNAME of the physical serial port
|
||||
device, followed by the serial core controller instance,
|
||||
and the serial port instance. The options are the same
|
||||
as documented for the ttyS addressing above.
|
||||
|
||||
The mapping of the serial ports to the tty instances
|
||||
can be viewed with:
|
||||
|
||||
$ ls -d /sys/bus/serial-base/devices/*:*.*/tty/*
|
||||
/sys/bus/serial-base/devices/00:04:0.0/tty/ttyS0
|
||||
|
||||
In the above example, the console can be addressed with
|
||||
console=00:04:0.0. Note that a console addressed this
|
||||
way will only get added when the related device driver
|
||||
is ready. The use of an earlycon parameter in addition to
|
||||
the console may be desired for console output early on.
|
||||
|
||||
uart[8250],io,<addr>[,options]
|
||||
uart[8250],mmio,<addr>[,options]
|
||||
uart[8250],mmio16,<addr>[,options]
|
||||
|
@ -328,6 +328,12 @@ CXL Memory Device
|
||||
.. kernel-doc:: drivers/cxl/mem.c
|
||||
:doc: cxl mem
|
||||
|
||||
.. kernel-doc:: drivers/cxl/cxlmem.h
|
||||
:internal:
|
||||
|
||||
.. kernel-doc:: drivers/cxl/core/memdev.c
|
||||
:identifiers:
|
||||
|
||||
CXL Port
|
||||
--------
|
||||
.. kernel-doc:: drivers/cxl/port.c
|
||||
@ -341,6 +347,15 @@ CXL Core
|
||||
.. kernel-doc:: drivers/cxl/cxl.h
|
||||
:internal:
|
||||
|
||||
.. kernel-doc:: drivers/cxl/core/hdm.c
|
||||
:doc: cxl core hdm
|
||||
|
||||
.. kernel-doc:: drivers/cxl/core/hdm.c
|
||||
:identifiers:
|
||||
|
||||
.. kernel-doc:: drivers/cxl/core/cdat.c
|
||||
:identifiers:
|
||||
|
||||
.. kernel-doc:: drivers/cxl/core/port.c
|
||||
:doc: cxl core
|
||||
|
||||
|
@ -128,7 +128,7 @@ executed to make module versioning work.
|
||||
|
||||
modules_install
|
||||
Install the external module(s). The default location is
|
||||
/lib/modules/<kernel_release>/extra/, but a prefix may
|
||||
/lib/modules/<kernel_release>/updates/, but a prefix may
|
||||
be added with INSTALL_MOD_PATH (discussed in section 5).
|
||||
|
||||
clean
|
||||
@ -417,7 +417,7 @@ directory:
|
||||
|
||||
And external modules are installed in:
|
||||
|
||||
/lib/modules/$(KERNELRELEASE)/extra/
|
||||
/lib/modules/$(KERNELRELEASE)/updates/
|
||||
|
||||
5.1 INSTALL_MOD_PATH
|
||||
--------------------
|
||||
@ -438,10 +438,10 @@ And external modules are installed in:
|
||||
-------------------
|
||||
|
||||
External modules are by default installed to a directory under
|
||||
/lib/modules/$(KERNELRELEASE)/extra/, but you may wish to
|
||||
/lib/modules/$(KERNELRELEASE)/updates/, but you may wish to
|
||||
locate modules for a specific functionality in a separate
|
||||
directory. For this purpose, use INSTALL_MOD_DIR to specify an
|
||||
alternative name to "extra."::
|
||||
alternative name to "updates."::
|
||||
|
||||
$ make INSTALL_MOD_DIR=gandalf -C $KDIR \
|
||||
M=$PWD modules_install
|
||||
|
@ -186,6 +186,7 @@ Code Seq# Include File Comments
|
||||
'Q' all linux/soundcard.h
|
||||
'R' 00-1F linux/random.h conflict!
|
||||
'R' 01 linux/rfkill.h conflict!
|
||||
'R' 20-2F linux/trace_mmap.h
|
||||
'R' C0-DF net/bluetooth/rfcomm.h
|
||||
'R' E0 uapi/linux/fsl_mc.h
|
||||
'S' all linux/cdrom.h conflict!
|
||||
|
10
MAINTAINERS
10
MAINTAINERS
@ -1044,7 +1044,7 @@ M: Joerg Roedel <joro@8bytes.org>
|
||||
R: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
|
||||
L: iommu@lists.linux.dev
|
||||
S: Maintained
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/iommu/linux.git
|
||||
F: drivers/iommu/amd/
|
||||
F: include/linux/amd-iommu.h
|
||||
|
||||
@ -11157,7 +11157,7 @@ M: David Woodhouse <dwmw2@infradead.org>
|
||||
M: Lu Baolu <baolu.lu@linux.intel.com>
|
||||
L: iommu@lists.linux.dev
|
||||
S: Supported
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/iommu/linux.git
|
||||
F: drivers/iommu/intel/
|
||||
|
||||
INTEL IPU3 CSI-2 CIO2 DRIVER
|
||||
@ -11530,7 +11530,7 @@ IOMMU DMA-API LAYER
|
||||
M: Robin Murphy <robin.murphy@arm.com>
|
||||
L: iommu@lists.linux.dev
|
||||
S: Maintained
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/iommu/linux.git
|
||||
F: drivers/iommu/dma-iommu.c
|
||||
F: drivers/iommu/dma-iommu.h
|
||||
F: drivers/iommu/iova.c
|
||||
@ -11542,7 +11542,7 @@ M: Will Deacon <will@kernel.org>
|
||||
R: Robin Murphy <robin.murphy@arm.com>
|
||||
L: iommu@lists.linux.dev
|
||||
S: Maintained
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/iommu/linux.git
|
||||
F: Documentation/devicetree/bindings/iommu/
|
||||
F: Documentation/userspace-api/iommu.rst
|
||||
F: drivers/iommu/
|
||||
@ -19324,7 +19324,7 @@ F: drivers/perf/riscv_pmu_legacy.c
|
||||
F: drivers/perf/riscv_pmu_sbi.c
|
||||
|
||||
RISC-V THEAD SoC SUPPORT
|
||||
M: Jisheng Zhang <jszhang@kernel.org>
|
||||
M: Drew Fustini <drew@pdp7.com>
|
||||
M: Guo Ren <guoren@kernel.org>
|
||||
M: Fu Wei <wefu@redhat.com>
|
||||
L: linux-riscv@lists.infradead.org
|
||||
|
2
Makefile
2
Makefile
@ -2,7 +2,7 @@
|
||||
VERSION = 6
|
||||
PATCHLEVEL = 10
|
||||
SUBLEVEL = 0
|
||||
EXTRAVERSION = -rc5
|
||||
EXTRAVERSION = -rc6
|
||||
NAME = Baby Opossum Posse
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
@ -128,6 +128,7 @@
|
||||
pinctrl-0 = <&hdmii2c_xfer>, <&hdmi_hpd>;
|
||||
power-domains = <&power RK3066_PD_VIO>;
|
||||
rockchip,grf = <&grf>;
|
||||
#sound-dai-cells = <0>;
|
||||
status = "disabled";
|
||||
|
||||
ports {
|
||||
|
@ -5,6 +5,8 @@
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
|
||||
#include <dt-bindings/leds/common.h>
|
||||
#include "rk3308.dtsi"
|
||||
|
||||
/ {
|
||||
@ -24,17 +26,21 @@
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&green_led_gio>, <&heartbeat_led_gpio>;
|
||||
pinctrl-0 = <&green_led>, <&heartbeat_led>;
|
||||
|
||||
green-led {
|
||||
color = <LED_COLOR_ID_GREEN>;
|
||||
default-state = "on";
|
||||
function = LED_FUNCTION_POWER;
|
||||
gpios = <&gpio0 RK_PA6 GPIO_ACTIVE_HIGH>;
|
||||
label = "rockpis:green:power";
|
||||
linux,default-trigger = "default-on";
|
||||
};
|
||||
|
||||
blue-led {
|
||||
color = <LED_COLOR_ID_BLUE>;
|
||||
default-state = "on";
|
||||
function = LED_FUNCTION_HEARTBEAT;
|
||||
gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_HIGH>;
|
||||
label = "rockpis:blue:user";
|
||||
linux,default-trigger = "heartbeat";
|
||||
@ -126,10 +132,12 @@
|
||||
};
|
||||
|
||||
&emmc {
|
||||
bus-width = <4>;
|
||||
cap-mmc-highspeed;
|
||||
mmc-hs200-1_8v;
|
||||
cap-sd-highspeed;
|
||||
no-sdio;
|
||||
non-removable;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&emmc_bus8 &emmc_clk &emmc_cmd>;
|
||||
vmmc-supply = <&vcc_io>;
|
||||
status = "okay";
|
||||
};
|
||||
@ -214,11 +222,11 @@
|
||||
pinctrl-0 = <&rtc_32k>;
|
||||
|
||||
leds {
|
||||
green_led_gio: green-led-gpio {
|
||||
green_led: green-led {
|
||||
rockchip,pins = <0 RK_PA6 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
};
|
||||
|
||||
heartbeat_led_gpio: heartbeat-led-gpio {
|
||||
heartbeat_led: heartbeat-led {
|
||||
rockchip,pins = <0 RK_PA5 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
};
|
||||
};
|
||||
|
@ -811,7 +811,7 @@
|
||||
clocks = <&cru SCLK_I2S2_8CH_TX_OUT>,
|
||||
<&cru SCLK_I2S2_8CH_RX_OUT>,
|
||||
<&cru PCLK_ACODEC>;
|
||||
reset-names = "codec-reset";
|
||||
reset-names = "codec";
|
||||
resets = <&cru SRST_ACODEC_P>;
|
||||
#sound-dai-cells = <0>;
|
||||
status = "disabled";
|
||||
|
@ -241,8 +241,8 @@
|
||||
rk805: pmic@18 {
|
||||
compatible = "rockchip,rk805";
|
||||
reg = <0x18>;
|
||||
interrupt-parent = <&gpio2>;
|
||||
interrupts = <6 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&gpio0>;
|
||||
interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
|
||||
#clock-cells = <1>;
|
||||
clock-output-names = "xin32k", "rk805-clkout2";
|
||||
gpio-controller;
|
||||
|
@ -793,6 +793,7 @@
|
||||
dma-names = "tx";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&spdif_tx>;
|
||||
#sound-dai-cells = <0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -804,6 +805,7 @@
|
||||
clocks = <&cru SCLK_I2S_2CH>, <&cru HCLK_I2S_2CH>;
|
||||
dmas = <&dmac_bus 6>, <&dmac_bus 7>;
|
||||
dma-names = "tx", "rx";
|
||||
#sound-dai-cells = <0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -817,6 +819,7 @@
|
||||
dma-names = "tx", "rx";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2s_8ch_bus>;
|
||||
#sound-dai-cells = <0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@ -450,7 +450,7 @@ ap_i2c_audio: &i2c8 {
|
||||
dlg,btn-cfg = <50>;
|
||||
dlg,mic-det-thr = <500>;
|
||||
dlg,jack-ins-deb = <20>;
|
||||
dlg,jack-det-rate = "32ms_64ms";
|
||||
dlg,jack-det-rate = "32_64";
|
||||
dlg,jack-rem-deb = <1>;
|
||||
|
||||
dlg,a-d-btn-thr = <0xa>;
|
||||
|
@ -289,7 +289,7 @@
|
||||
regulator-name = "vdd_gpu";
|
||||
regulator-always-on;
|
||||
regulator-boot-on;
|
||||
regulator-min-microvolt = <900000>;
|
||||
regulator-min-microvolt = <500000>;
|
||||
regulator-max-microvolt = <1350000>;
|
||||
regulator-ramp-delay = <6001>;
|
||||
|
||||
|
@ -444,6 +444,7 @@
|
||||
&sdmmc {
|
||||
bus-width = <4>;
|
||||
cap-sd-highspeed;
|
||||
cd-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_LOW>;
|
||||
disable-wp;
|
||||
max-frequency = <150000000>;
|
||||
no-sdio;
|
||||
|
@ -435,6 +435,7 @@
|
||||
&sdmmc {
|
||||
bus-width = <4>;
|
||||
cap-sd-highspeed;
|
||||
cd-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_LOW>;
|
||||
disable-wp;
|
||||
max-frequency = <150000000>;
|
||||
no-sdio;
|
||||
|
@ -383,6 +383,7 @@
|
||||
bus-width = <4>;
|
||||
cap-mmc-highspeed;
|
||||
cap-sd-highspeed;
|
||||
cd-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_LOW>;
|
||||
disable-wp;
|
||||
sd-uhs-sdr104;
|
||||
vmmc-supply = <&vcc_3v3_s3>;
|
||||
|
@ -344,6 +344,11 @@
|
||||
};
|
||||
};
|
||||
|
||||
&pwm0 {
|
||||
pinctrl-0 = <&pwm0m1_pins>;
|
||||
pinctrl-names = "default";
|
||||
};
|
||||
|
||||
&saradc {
|
||||
vref-supply = <&vcc_1v8_s0>;
|
||||
status = "okay";
|
||||
|
@ -288,9 +288,9 @@
|
||||
pinctrl-0 = <&i2c7m0_xfer>;
|
||||
status = "okay";
|
||||
|
||||
es8316: audio-codec@11 {
|
||||
es8316: audio-codec@10 {
|
||||
compatible = "everest,es8316";
|
||||
reg = <0x11>;
|
||||
reg = <0x10>;
|
||||
assigned-clocks = <&cru I2S0_8CH_MCLKOUT>;
|
||||
assigned-clock-rates = <12288000>;
|
||||
clocks = <&cru I2S0_8CH_MCLKOUT>;
|
||||
|
@ -366,6 +366,7 @@
|
||||
bus-width = <4>;
|
||||
cap-mmc-highspeed;
|
||||
cap-sd-highspeed;
|
||||
cd-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_LOW>;
|
||||
disable-wp;
|
||||
max-frequency = <150000000>;
|
||||
no-sdio;
|
||||
@ -393,6 +394,7 @@
|
||||
pinctrl-0 = <&pmic_pins>, <&rk806_dvs1_null>,
|
||||
<&rk806_dvs2_null>, <&rk806_dvs3_null>;
|
||||
spi-max-frequency = <1000000>;
|
||||
system-power-controller;
|
||||
|
||||
vcc1-supply = <&vcc5v0_sys>;
|
||||
vcc2-supply = <&vcc5v0_sys>;
|
||||
|
@ -170,6 +170,7 @@
|
||||
#define PTE_CONT (_AT(pteval_t, 1) << 52) /* Contiguous range */
|
||||
#define PTE_PXN (_AT(pteval_t, 1) << 53) /* Privileged XN */
|
||||
#define PTE_UXN (_AT(pteval_t, 1) << 54) /* User XN */
|
||||
#define PTE_SWBITS_MASK _AT(pteval_t, (BIT(63) | GENMASK(58, 55)))
|
||||
|
||||
#define PTE_ADDR_LOW (((_AT(pteval_t, 1) << (50 - PAGE_SHIFT)) - 1) << PAGE_SHIFT)
|
||||
#ifdef CONFIG_ARM64_PA_BITS_52
|
||||
|
@ -840,7 +840,7 @@ __SYSCALL(__NR_pselect6_time64, compat_sys_pselect6_time64)
|
||||
#define __NR_ppoll_time64 414
|
||||
__SYSCALL(__NR_ppoll_time64, compat_sys_ppoll_time64)
|
||||
#define __NR_io_pgetevents_time64 416
|
||||
__SYSCALL(__NR_io_pgetevents_time64, sys_io_pgetevents)
|
||||
__SYSCALL(__NR_io_pgetevents_time64, compat_sys_io_pgetevents_time64)
|
||||
#define __NR_recvmmsg_time64 417
|
||||
__SYSCALL(__NR_recvmmsg_time64, compat_sys_recvmmsg_time64)
|
||||
#define __NR_mq_timedsend_time64 418
|
||||
|
@ -173,7 +173,7 @@ static void __init remap_idmap_for_lpa2(void)
|
||||
* Don't bother with the FDT, we no longer need it after this.
|
||||
*/
|
||||
memset(init_idmap_pg_dir, 0,
|
||||
(u64)init_idmap_pg_dir - (u64)init_idmap_pg_end);
|
||||
(u64)init_idmap_pg_end - (u64)init_idmap_pg_dir);
|
||||
|
||||
create_init_idmap(init_idmap_pg_dir, mask);
|
||||
dsb(ishst);
|
||||
|
@ -53,17 +53,15 @@ static void invoke_syscall(struct pt_regs *regs, unsigned int scno,
|
||||
syscall_set_return_value(current, regs, 0, ret);
|
||||
|
||||
/*
|
||||
* Ultimately, this value will get limited by KSTACK_OFFSET_MAX(),
|
||||
* but not enough for arm64 stack utilization comfort. To keep
|
||||
* reasonable stack head room, reduce the maximum offset to 9 bits.
|
||||
* This value will get limited by KSTACK_OFFSET_MAX(), which is 10
|
||||
* bits. The actual entropy will be further reduced by the compiler
|
||||
* when applying stack alignment constraints: the AAPCS mandates a
|
||||
* 16-byte aligned SP at function boundaries, which will remove the
|
||||
* 4 low bits from any entropy chosen here.
|
||||
*
|
||||
* The actual entropy will be further reduced by the compiler when
|
||||
* applying stack alignment constraints: the AAPCS mandates a
|
||||
* 16-byte (i.e. 4-bit) aligned SP at function boundaries.
|
||||
*
|
||||
* The resulting 5 bits of entropy is seen in SP[8:4].
|
||||
* The resulting 6 bits of entropy is seen in SP[9:4].
|
||||
*/
|
||||
choose_random_kstack_offset(get_random_u16() & 0x1FF);
|
||||
choose_random_kstack_offset(get_random_u16());
|
||||
}
|
||||
|
||||
static inline bool has_syscall_work(unsigned long flags)
|
||||
|
@ -124,7 +124,8 @@ bool pgattr_change_is_safe(u64 old, u64 new)
|
||||
* The following mapping attributes may be updated in live
|
||||
* kernel mappings without the need for break-before-make.
|
||||
*/
|
||||
pteval_t mask = PTE_PXN | PTE_RDONLY | PTE_WRITE | PTE_NG;
|
||||
pteval_t mask = PTE_PXN | PTE_RDONLY | PTE_WRITE | PTE_NG |
|
||||
PTE_SWBITS_MASK;
|
||||
|
||||
/* creating or taking down mappings is always safe */
|
||||
if (!pte_valid(__pte(old)) || !pte_valid(__pte(new)))
|
||||
|
@ -6,6 +6,7 @@
|
||||
#define __ARCH_WANT_SYS_CLONE3
|
||||
#define __ARCH_WANT_SET_GET_RLIMIT
|
||||
#define __ARCH_WANT_TIME32_SYSCALLS
|
||||
#define __ARCH_WANT_SYNC_FILE_RANGE2
|
||||
#include <asm-generic/unistd.h>
|
||||
|
||||
#define __NR_set_thread_area (__NR_arch_specific_syscall + 0)
|
||||
|
@ -20,7 +20,7 @@ SYSCALL_DEFINE6(mmap2,
|
||||
unsigned long, prot,
|
||||
unsigned long, flags,
|
||||
unsigned long, fd,
|
||||
off_t, offset)
|
||||
unsigned long, offset)
|
||||
{
|
||||
if (unlikely(offset & (~PAGE_MASK >> 12)))
|
||||
return -EINVAL;
|
||||
|
6
arch/hexagon/include/asm/syscalls.h
Normal file
6
arch/hexagon/include/asm/syscalls.h
Normal file
@ -0,0 +1,6 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
|
||||
#include <asm-generic/syscalls.h>
|
||||
|
||||
asmlinkage long sys_hexagon_fadvise64_64(int fd, int advice,
|
||||
u32 a2, u32 a3, u32 a4, u32 a5);
|
@ -36,5 +36,6 @@
|
||||
#define __ARCH_WANT_SYS_VFORK
|
||||
#define __ARCH_WANT_SYS_FORK
|
||||
#define __ARCH_WANT_TIME32_SYSCALLS
|
||||
#define __ARCH_WANT_SYNC_FILE_RANGE2
|
||||
|
||||
#include <asm-generic/unistd.h>
|
||||
|
@ -14,6 +14,13 @@
|
||||
#undef __SYSCALL
|
||||
#define __SYSCALL(nr, call) [nr] = (call),
|
||||
|
||||
SYSCALL_DEFINE6(hexagon_fadvise64_64, int, fd, int, advice,
|
||||
SC_ARG64(offset), SC_ARG64(len))
|
||||
{
|
||||
return ksys_fadvise64_64(fd, SC_VAL64(loff_t, offset), SC_VAL64(loff_t, len), advice);
|
||||
}
|
||||
#define sys_fadvise64_64 sys_hexagon_fadvise64_64
|
||||
|
||||
void *sys_call_table[__NR_syscalls] = {
|
||||
#include <asm/unistd.h>
|
||||
};
|
||||
|
@ -22,7 +22,7 @@
|
||||
#define __SYSCALL(nr, call) [nr] = (call),
|
||||
|
||||
SYSCALL_DEFINE6(mmap, unsigned long, addr, unsigned long, len, unsigned long,
|
||||
prot, unsigned long, flags, unsigned long, fd, off_t, offset)
|
||||
prot, unsigned long, flags, unsigned long, fd, unsigned long, offset)
|
||||
{
|
||||
if (offset & ~PAGE_MASK)
|
||||
return -EINVAL;
|
||||
|
@ -35,7 +35,7 @@
|
||||
|
||||
SYSCALL_DEFINE6(mmap, unsigned long, addr, unsigned long, len,
|
||||
unsigned long, prot, unsigned long, flags, unsigned long, fd,
|
||||
off_t, pgoff)
|
||||
unsigned long, pgoff)
|
||||
{
|
||||
if (pgoff & ~PAGE_MASK)
|
||||
return -EINVAL;
|
||||
|
@ -354,7 +354,7 @@
|
||||
412 n32 utimensat_time64 sys_utimensat
|
||||
413 n32 pselect6_time64 compat_sys_pselect6_time64
|
||||
414 n32 ppoll_time64 compat_sys_ppoll_time64
|
||||
416 n32 io_pgetevents_time64 sys_io_pgetevents
|
||||
416 n32 io_pgetevents_time64 compat_sys_io_pgetevents_time64
|
||||
417 n32 recvmmsg_time64 compat_sys_recvmmsg_time64
|
||||
418 n32 mq_timedsend_time64 sys_mq_timedsend
|
||||
419 n32 mq_timedreceive_time64 sys_mq_timedreceive
|
||||
|
@ -403,7 +403,7 @@
|
||||
412 o32 utimensat_time64 sys_utimensat sys_utimensat
|
||||
413 o32 pselect6_time64 sys_pselect6 compat_sys_pselect6_time64
|
||||
414 o32 ppoll_time64 sys_ppoll compat_sys_ppoll_time64
|
||||
416 o32 io_pgetevents_time64 sys_io_pgetevents sys_io_pgetevents
|
||||
416 o32 io_pgetevents_time64 sys_io_pgetevents compat_sys_io_pgetevents_time64
|
||||
417 o32 recvmmsg_time64 sys_recvmmsg compat_sys_recvmmsg_time64
|
||||
418 o32 mq_timedsend_time64 sys_mq_timedsend sys_mq_timedsend
|
||||
419 o32 mq_timedreceive_time64 sys_mq_timedreceive sys_mq_timedreceive
|
||||
|
@ -16,6 +16,7 @@ config PARISC
|
||||
select ARCH_HAS_UBSAN
|
||||
select ARCH_HAS_PTE_SPECIAL
|
||||
select ARCH_NO_SG_CHAIN
|
||||
select ARCH_SPLIT_ARG64 if !64BIT
|
||||
select ARCH_SUPPORTS_HUGETLBFS if PA20
|
||||
select ARCH_SUPPORTS_MEMORY_FAILURE
|
||||
select ARCH_STACKWALK
|
||||
|
@ -23,12 +23,3 @@ asmlinkage long sys32_unimplemented(int r26, int r25, int r24, int r23,
|
||||
current->comm, current->pid, r20);
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
asmlinkage long sys32_fanotify_mark(compat_int_t fanotify_fd, compat_uint_t flags,
|
||||
compat_uint_t mask0, compat_uint_t mask1, compat_int_t dfd,
|
||||
const char __user * pathname)
|
||||
{
|
||||
return sys_fanotify_mark(fanotify_fd, flags,
|
||||
((__u64)mask1 << 32) | mask0,
|
||||
dfd, pathname);
|
||||
}
|
||||
|
@ -108,7 +108,7 @@
|
||||
95 common fchown sys_fchown
|
||||
96 common getpriority sys_getpriority
|
||||
97 common setpriority sys_setpriority
|
||||
98 common recv sys_recv
|
||||
98 common recv sys_recv compat_sys_recv
|
||||
99 common statfs sys_statfs compat_sys_statfs
|
||||
100 common fstatfs sys_fstatfs compat_sys_fstatfs
|
||||
101 common stat64 sys_stat64
|
||||
@ -135,7 +135,7 @@
|
||||
120 common clone sys_clone_wrapper
|
||||
121 common setdomainname sys_setdomainname
|
||||
122 common sendfile sys_sendfile compat_sys_sendfile
|
||||
123 common recvfrom sys_recvfrom
|
||||
123 common recvfrom sys_recvfrom compat_sys_recvfrom
|
||||
124 32 adjtimex sys_adjtimex_time32
|
||||
124 64 adjtimex sys_adjtimex
|
||||
125 common mprotect sys_mprotect
|
||||
@ -364,7 +364,7 @@
|
||||
320 common accept4 sys_accept4
|
||||
321 common prlimit64 sys_prlimit64
|
||||
322 common fanotify_init sys_fanotify_init
|
||||
323 common fanotify_mark sys_fanotify_mark sys32_fanotify_mark
|
||||
323 common fanotify_mark sys_fanotify_mark compat_sys_fanotify_mark
|
||||
324 32 clock_adjtime sys_clock_adjtime32
|
||||
324 64 clock_adjtime sys_clock_adjtime
|
||||
325 common name_to_handle_at sys_name_to_handle_at
|
||||
|
@ -230,8 +230,10 @@
|
||||
178 nospu rt_sigsuspend sys_rt_sigsuspend compat_sys_rt_sigsuspend
|
||||
179 32 pread64 sys_ppc_pread64 compat_sys_ppc_pread64
|
||||
179 64 pread64 sys_pread64
|
||||
179 spu pread64 sys_pread64
|
||||
180 32 pwrite64 sys_ppc_pwrite64 compat_sys_ppc_pwrite64
|
||||
180 64 pwrite64 sys_pwrite64
|
||||
180 spu pwrite64 sys_pwrite64
|
||||
181 common chown sys_chown
|
||||
182 common getcwd sys_getcwd
|
||||
183 common capget sys_capget
|
||||
@ -246,6 +248,7 @@
|
||||
190 common ugetrlimit sys_getrlimit compat_sys_getrlimit
|
||||
191 32 readahead sys_ppc_readahead compat_sys_ppc_readahead
|
||||
191 64 readahead sys_readahead
|
||||
191 spu readahead sys_readahead
|
||||
192 32 mmap2 sys_mmap2 compat_sys_mmap2
|
||||
193 32 truncate64 sys_ppc_truncate64 compat_sys_ppc_truncate64
|
||||
194 32 ftruncate64 sys_ppc_ftruncate64 compat_sys_ppc_ftruncate64
|
||||
@ -293,6 +296,7 @@
|
||||
232 nospu set_tid_address sys_set_tid_address
|
||||
233 32 fadvise64 sys_ppc32_fadvise64 compat_sys_ppc32_fadvise64
|
||||
233 64 fadvise64 sys_fadvise64
|
||||
233 spu fadvise64 sys_fadvise64
|
||||
234 nospu exit_group sys_exit_group
|
||||
235 nospu lookup_dcookie sys_ni_syscall
|
||||
236 common epoll_create sys_epoll_create
|
||||
@ -502,7 +506,7 @@
|
||||
412 32 utimensat_time64 sys_utimensat sys_utimensat
|
||||
413 32 pselect6_time64 sys_pselect6 compat_sys_pselect6_time64
|
||||
414 32 ppoll_time64 sys_ppoll compat_sys_ppoll_time64
|
||||
416 32 io_pgetevents_time64 sys_io_pgetevents sys_io_pgetevents
|
||||
416 32 io_pgetevents_time64 sys_io_pgetevents compat_sys_io_pgetevents_time64
|
||||
417 32 recvmmsg_time64 sys_recvmmsg compat_sys_recvmmsg_time64
|
||||
418 32 mq_timedsend_time64 sys_mq_timedsend sys_mq_timedsend
|
||||
419 32 mq_timedreceive_time64 sys_mq_timedreceive sys_mq_timedreceive
|
||||
|
@ -15,6 +15,10 @@
|
||||
model = "Kendryte KD233";
|
||||
compatible = "canaan,kendryte-kd233", "canaan,kendryte-k210";
|
||||
|
||||
aliases {
|
||||
serial0 = &uarths0;
|
||||
};
|
||||
|
||||
chosen {
|
||||
bootargs = "earlycon console=ttySIF0";
|
||||
stdout-path = "serial0:115200n8";
|
||||
@ -46,7 +50,6 @@
|
||||
&fpioa {
|
||||
pinctrl-0 = <&jtag_pinctrl>;
|
||||
pinctrl-names = "default";
|
||||
status = "okay";
|
||||
|
||||
jtag_pinctrl: jtag-pinmux {
|
||||
pinmux = <K210_FPIOA(0, K210_PCF_JTAG_TCLK)>,
|
||||
@ -118,6 +121,7 @@
|
||||
#sound-dai-cells = <1>;
|
||||
pinctrl-0 = <&i2s0_pinctrl>;
|
||||
pinctrl-names = "default";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&spi0 {
|
||||
@ -125,6 +129,7 @@
|
||||
pinctrl-names = "default";
|
||||
num-cs = <1>;
|
||||
cs-gpios = <&gpio0 20 GPIO_ACTIVE_HIGH>;
|
||||
status = "okay";
|
||||
|
||||
panel@0 {
|
||||
compatible = "canaan,kd233-tft", "ilitek,ili9341";
|
||||
|
@ -16,13 +16,6 @@
|
||||
#size-cells = <1>;
|
||||
compatible = "canaan,kendryte-k210";
|
||||
|
||||
aliases {
|
||||
serial0 = &uarths0;
|
||||
serial1 = &uart1;
|
||||
serial2 = &uart2;
|
||||
serial3 = &uart3;
|
||||
};
|
||||
|
||||
/*
|
||||
* The K210 has an sv39 MMU following the privileged specification v1.9.
|
||||
* Since this is a non-ratified draft specification, the kernel does not
|
||||
@ -137,6 +130,7 @@
|
||||
reg = <0x38000000 0x1000>;
|
||||
interrupts = <33>;
|
||||
clocks = <&sysclk K210_CLK_CPU>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
gpio0: gpio-controller@38001000 {
|
||||
@ -152,6 +146,7 @@
|
||||
<62>, <63>, <64>, <65>;
|
||||
gpio-controller;
|
||||
ngpios = <32>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
dmac0: dma-controller@50000000 {
|
||||
@ -187,6 +182,7 @@
|
||||
<&sysclk K210_CLK_GPIO>;
|
||||
clock-names = "bus", "db";
|
||||
resets = <&sysrst K210_RST_GPIO>;
|
||||
status = "disabled";
|
||||
|
||||
gpio1_0: gpio-port@0 {
|
||||
#gpio-cells = <2>;
|
||||
@ -214,6 +210,7 @@
|
||||
dsr-override;
|
||||
cts-override;
|
||||
ri-override;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart2: serial@50220000 {
|
||||
@ -230,6 +227,7 @@
|
||||
dsr-override;
|
||||
cts-override;
|
||||
ri-override;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart3: serial@50230000 {
|
||||
@ -246,6 +244,7 @@
|
||||
dsr-override;
|
||||
cts-override;
|
||||
ri-override;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi2: spi@50240000 {
|
||||
@ -259,6 +258,7 @@
|
||||
<&sysclk K210_CLK_APB0>;
|
||||
clock-names = "ssi_clk", "pclk";
|
||||
resets = <&sysrst K210_RST_SPI2>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2s0: i2s@50250000 {
|
||||
@ -268,6 +268,7 @@
|
||||
clocks = <&sysclk K210_CLK_I2S0>;
|
||||
clock-names = "i2sclk";
|
||||
resets = <&sysrst K210_RST_I2S0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2s1: i2s@50260000 {
|
||||
@ -277,6 +278,7 @@
|
||||
clocks = <&sysclk K210_CLK_I2S1>;
|
||||
clock-names = "i2sclk";
|
||||
resets = <&sysrst K210_RST_I2S1>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2s2: i2s@50270000 {
|
||||
@ -286,6 +288,7 @@
|
||||
clocks = <&sysclk K210_CLK_I2S2>;
|
||||
clock-names = "i2sclk";
|
||||
resets = <&sysrst K210_RST_I2S2>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c0: i2c@50280000 {
|
||||
@ -296,6 +299,7 @@
|
||||
<&sysclk K210_CLK_APB0>;
|
||||
clock-names = "ref", "pclk";
|
||||
resets = <&sysrst K210_RST_I2C0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c1: i2c@50290000 {
|
||||
@ -306,6 +310,7 @@
|
||||
<&sysclk K210_CLK_APB0>;
|
||||
clock-names = "ref", "pclk";
|
||||
resets = <&sysrst K210_RST_I2C1>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c2: i2c@502a0000 {
|
||||
@ -316,6 +321,7 @@
|
||||
<&sysclk K210_CLK_APB0>;
|
||||
clock-names = "ref", "pclk";
|
||||
resets = <&sysrst K210_RST_I2C2>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
fpioa: pinmux@502b0000 {
|
||||
@ -464,6 +470,7 @@
|
||||
reset-names = "spi";
|
||||
num-cs = <4>;
|
||||
reg-io-width = <4>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi1: spi@53000000 {
|
||||
@ -479,6 +486,7 @@
|
||||
reset-names = "spi";
|
||||
num-cs = <4>;
|
||||
reg-io-width = <4>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi3: spi@54000000 {
|
||||
@ -495,6 +503,7 @@
|
||||
|
||||
num-cs = <4>;
|
||||
reg-io-width = <4>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -15,6 +15,10 @@
|
||||
model = "Kendryte K210 generic";
|
||||
compatible = "canaan,kendryte-k210";
|
||||
|
||||
aliases {
|
||||
serial0 = &uarths0;
|
||||
};
|
||||
|
||||
chosen {
|
||||
bootargs = "earlycon console=ttySIF0";
|
||||
stdout-path = "serial0:115200n8";
|
||||
@ -24,7 +28,6 @@
|
||||
&fpioa {
|
||||
pinctrl-0 = <&jtag_pins>;
|
||||
pinctrl-names = "default";
|
||||
status = "okay";
|
||||
|
||||
jtag_pins: jtag-pinmux {
|
||||
pinmux = <K210_FPIOA(0, K210_PCF_JTAG_TCLK)>,
|
||||
|
@ -17,6 +17,10 @@
|
||||
compatible = "sipeed,maix-bit", "sipeed,maix-bitm",
|
||||
"canaan,kendryte-k210";
|
||||
|
||||
aliases {
|
||||
serial0 = &uarths0;
|
||||
};
|
||||
|
||||
chosen {
|
||||
bootargs = "earlycon console=ttySIF0";
|
||||
stdout-path = "serial0:115200n8";
|
||||
@ -58,7 +62,6 @@
|
||||
&fpioa {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&jtag_pinctrl>;
|
||||
status = "okay";
|
||||
|
||||
jtag_pinctrl: jtag-pinmux {
|
||||
pinmux = <K210_FPIOA(0, K210_PCF_JTAG_TCLK)>,
|
||||
@ -156,6 +159,7 @@
|
||||
#sound-dai-cells = <1>;
|
||||
pinctrl-0 = <&i2s0_pinctrl>;
|
||||
pinctrl-names = "default";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
@ -170,6 +174,7 @@
|
||||
pinctrl-names = "default";
|
||||
num-cs = <1>;
|
||||
cs-gpios = <&gpio0 20 GPIO_ACTIVE_HIGH>;
|
||||
status = "okay";
|
||||
|
||||
panel@0 {
|
||||
compatible = "sitronix,st7789v";
|
||||
@ -199,6 +204,8 @@
|
||||
};
|
||||
|
||||
&spi3 {
|
||||
status = "okay";
|
||||
|
||||
flash@0 {
|
||||
compatible = "jedec,spi-nor";
|
||||
reg = <0>;
|
||||
|
@ -17,6 +17,10 @@
|
||||
compatible = "sipeed,maix-dock-m1", "sipeed,maix-dock-m1w",
|
||||
"canaan,kendryte-k210";
|
||||
|
||||
aliases {
|
||||
serial0 = &uarths0;
|
||||
};
|
||||
|
||||
chosen {
|
||||
bootargs = "earlycon console=ttySIF0";
|
||||
stdout-path = "serial0:115200n8";
|
||||
@ -63,7 +67,6 @@
|
||||
&fpioa {
|
||||
pinctrl-0 = <&jtag_pinctrl>;
|
||||
pinctrl-names = "default";
|
||||
status = "okay";
|
||||
|
||||
jtag_pinctrl: jtag-pinmux {
|
||||
pinmux = <K210_FPIOA(0, K210_PCF_JTAG_TCLK)>,
|
||||
@ -159,6 +162,7 @@
|
||||
#sound-dai-cells = <1>;
|
||||
pinctrl-0 = <&i2s0_pinctrl>;
|
||||
pinctrl-names = "default";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
@ -173,6 +177,7 @@
|
||||
pinctrl-names = "default";
|
||||
num-cs = <1>;
|
||||
cs-gpios = <&gpio0 20 GPIO_ACTIVE_HIGH>;
|
||||
status = "okay";
|
||||
|
||||
panel@0 {
|
||||
compatible = "sitronix,st7789v";
|
||||
|
@ -16,6 +16,10 @@
|
||||
model = "SiPeed MAIX GO";
|
||||
compatible = "sipeed,maix-go", "canaan,kendryte-k210";
|
||||
|
||||
aliases {
|
||||
serial0 = &uarths0;
|
||||
};
|
||||
|
||||
chosen {
|
||||
bootargs = "earlycon console=ttySIF0";
|
||||
stdout-path = "serial0:115200n8";
|
||||
@ -69,7 +73,6 @@
|
||||
&fpioa {
|
||||
pinctrl-0 = <&jtag_pinctrl>;
|
||||
pinctrl-names = "default";
|
||||
status = "okay";
|
||||
|
||||
jtag_pinctrl: jtag-pinmux {
|
||||
pinmux = <K210_FPIOA(0, K210_PCF_JTAG_TCLK)>,
|
||||
@ -167,6 +170,7 @@
|
||||
#sound-dai-cells = <1>;
|
||||
pinctrl-0 = <&i2s0_pinctrl>;
|
||||
pinctrl-names = "default";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
@ -181,6 +185,7 @@
|
||||
pinctrl-names = "default";
|
||||
num-cs = <1>;
|
||||
cs-gpios = <&gpio0 20 GPIO_ACTIVE_HIGH>;
|
||||
status = "okay";
|
||||
|
||||
panel@0 {
|
||||
compatible = "sitronix,st7789v";
|
||||
@ -209,6 +214,8 @@
|
||||
};
|
||||
|
||||
&spi3 {
|
||||
status = "okay";
|
||||
|
||||
flash@0 {
|
||||
compatible = "jedec,spi-nor";
|
||||
reg = <0>;
|
||||
|
@ -15,6 +15,10 @@
|
||||
model = "SiPeed MAIXDUINO";
|
||||
compatible = "sipeed,maixduino", "canaan,kendryte-k210";
|
||||
|
||||
aliases {
|
||||
serial0 = &uarths0;
|
||||
};
|
||||
|
||||
chosen {
|
||||
bootargs = "earlycon console=ttySIF0";
|
||||
stdout-path = "serial0:115200n8";
|
||||
@ -39,8 +43,6 @@
|
||||
};
|
||||
|
||||
&fpioa {
|
||||
status = "okay";
|
||||
|
||||
uarths_pinctrl: uarths-pinmux {
|
||||
pinmux = <K210_FPIOA(4, K210_PCF_UARTHS_RX)>, /* Header "0" */
|
||||
<K210_FPIOA(5, K210_PCF_UARTHS_TX)>; /* Header "1" */
|
||||
@ -132,6 +134,7 @@
|
||||
#sound-dai-cells = <1>;
|
||||
pinctrl-0 = <&i2s0_pinctrl>;
|
||||
pinctrl-names = "default";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
@ -146,6 +149,7 @@
|
||||
pinctrl-names = "default";
|
||||
num-cs = <1>;
|
||||
cs-gpios = <&gpio0 20 GPIO_ACTIVE_HIGH>;
|
||||
status = "okay";
|
||||
|
||||
panel@0 {
|
||||
compatible = "sitronix,st7789v";
|
||||
@ -174,6 +178,8 @@
|
||||
};
|
||||
|
||||
&spi3 {
|
||||
status = "okay";
|
||||
|
||||
flash@0 {
|
||||
compatible = "jedec,spi-nor";
|
||||
reg = <0>;
|
||||
|
@ -244,7 +244,7 @@
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-name = "emmc_vdd";
|
||||
};
|
||||
};
|
||||
|
@ -145,7 +145,7 @@
|
||||
|
||||
/* parts of opcode for RVF, RVD and RVQ */
|
||||
#define RVFDQ_FL_FS_WIDTH_OFF 12
|
||||
#define RVFDQ_FL_FS_WIDTH_MASK GENMASK(3, 0)
|
||||
#define RVFDQ_FL_FS_WIDTH_MASK GENMASK(2, 0)
|
||||
#define RVFDQ_FL_FS_WIDTH_W 2
|
||||
#define RVFDQ_FL_FS_WIDTH_D 3
|
||||
#define RVFDQ_LS_FS_WIDTH_Q 4
|
||||
|
@ -120,9 +120,6 @@ int ftrace_init_nop(struct module *mod, struct dyn_ftrace *rec)
|
||||
out = ftrace_make_nop(mod, rec, MCOUNT_ADDR);
|
||||
mutex_unlock(&text_mutex);
|
||||
|
||||
if (!mod)
|
||||
local_flush_icache_range(rec->ip, rec->ip + MCOUNT_INSN_SIZE);
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
@ -156,9 +153,9 @@ static int __ftrace_modify_code(void *data)
|
||||
} else {
|
||||
while (atomic_read(¶m->cpu_count) <= num_online_cpus())
|
||||
cpu_relax();
|
||||
}
|
||||
|
||||
local_flush_icache_all();
|
||||
local_flush_icache_all();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -89,6 +89,14 @@ static int __patch_insn_set(void *addr, u8 c, size_t len)
|
||||
|
||||
memset(waddr, c, len);
|
||||
|
||||
/*
|
||||
* We could have just patched a function that is about to be
|
||||
* called so make sure we don't execute partially patched
|
||||
* instructions by flushing the icache as soon as possible.
|
||||
*/
|
||||
local_flush_icache_range((unsigned long)waddr,
|
||||
(unsigned long)waddr + len);
|
||||
|
||||
patch_unmap(FIX_TEXT_POKE0);
|
||||
|
||||
if (across_pages)
|
||||
@ -135,6 +143,14 @@ static int __patch_insn_write(void *addr, const void *insn, size_t len)
|
||||
|
||||
ret = copy_to_kernel_nofault(waddr, insn, len);
|
||||
|
||||
/*
|
||||
* We could have just patched a function that is about to be
|
||||
* called so make sure we don't execute partially patched
|
||||
* instructions by flushing the icache as soon as possible.
|
||||
*/
|
||||
local_flush_icache_range((unsigned long)waddr,
|
||||
(unsigned long)waddr + len);
|
||||
|
||||
patch_unmap(FIX_TEXT_POKE0);
|
||||
|
||||
if (across_pages)
|
||||
@ -189,9 +205,6 @@ int patch_text_set_nosync(void *addr, u8 c, size_t len)
|
||||
|
||||
ret = patch_insn_set(tp, c, len);
|
||||
|
||||
if (!ret)
|
||||
flush_icache_range((uintptr_t)tp, (uintptr_t)tp + len);
|
||||
|
||||
return ret;
|
||||
}
|
||||
NOKPROBE_SYMBOL(patch_text_set_nosync);
|
||||
@ -224,9 +237,6 @@ int patch_text_nosync(void *addr, const void *insns, size_t len)
|
||||
|
||||
ret = patch_insn_write(tp, insns, len);
|
||||
|
||||
if (!ret)
|
||||
flush_icache_range((uintptr_t) tp, (uintptr_t) tp + len);
|
||||
|
||||
return ret;
|
||||
}
|
||||
NOKPROBE_SYMBOL(patch_text_nosync);
|
||||
@ -253,9 +263,9 @@ static int patch_text_cb(void *data)
|
||||
} else {
|
||||
while (atomic_read(&patch->cpu_count) <= num_online_cpus())
|
||||
cpu_relax();
|
||||
}
|
||||
|
||||
local_flush_icache_all();
|
||||
local_flush_icache_all();
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -156,7 +156,7 @@ unsigned long __get_wchan(struct task_struct *task)
|
||||
return pc;
|
||||
}
|
||||
|
||||
noinline void arch_stack_walk(stack_trace_consume_fn consume_entry, void *cookie,
|
||||
noinline noinstr void arch_stack_walk(stack_trace_consume_fn consume_entry, void *cookie,
|
||||
struct task_struct *task, struct pt_regs *regs)
|
||||
{
|
||||
walk_stackframe(task, regs, consume_entry, cookie);
|
||||
|
@ -23,7 +23,7 @@ static long riscv_sys_mmap(unsigned long addr, unsigned long len,
|
||||
#ifdef CONFIG_64BIT
|
||||
SYSCALL_DEFINE6(mmap, unsigned long, addr, unsigned long, len,
|
||||
unsigned long, prot, unsigned long, flags,
|
||||
unsigned long, fd, off_t, offset)
|
||||
unsigned long, fd, unsigned long, offset)
|
||||
{
|
||||
return riscv_sys_mmap(addr, len, prot, flags, fd, offset, 0);
|
||||
}
|
||||
@ -32,7 +32,7 @@ SYSCALL_DEFINE6(mmap, unsigned long, addr, unsigned long, len,
|
||||
#if defined(CONFIG_32BIT) || defined(CONFIG_COMPAT)
|
||||
SYSCALL_DEFINE6(mmap2, unsigned long, addr, unsigned long, len,
|
||||
unsigned long, prot, unsigned long, flags,
|
||||
unsigned long, fd, off_t, offset)
|
||||
unsigned long, fd, unsigned long, offset)
|
||||
{
|
||||
/*
|
||||
* Note that the shift for mmap2 is constant (12),
|
||||
|
@ -170,11 +170,14 @@ static void kaslr_adjust_got(unsigned long offset)
|
||||
u64 *entry;
|
||||
|
||||
/*
|
||||
* Even without -fPIE, Clang still uses a global offset table for some
|
||||
* reason. Adjust the GOT entries.
|
||||
* Adjust GOT entries, except for ones for undefined weak symbols
|
||||
* that resolved to zero. This also skips the first three reserved
|
||||
* entries on s390x that are zero.
|
||||
*/
|
||||
for (entry = (u64 *)vmlinux.got_start; entry < (u64 *)vmlinux.got_end; entry++)
|
||||
*entry += offset - __START_KERNEL;
|
||||
for (entry = (u64 *)vmlinux.got_start; entry < (u64 *)vmlinux.got_end; entry++) {
|
||||
if (*entry)
|
||||
*entry += offset - __START_KERNEL;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -601,17 +601,16 @@ CONFIG_WATCHDOG=y
|
||||
CONFIG_WATCHDOG_NOWAYOUT=y
|
||||
CONFIG_SOFT_WATCHDOG=m
|
||||
CONFIG_DIAG288_WATCHDOG=m
|
||||
CONFIG_DRM=m
|
||||
CONFIG_DRM_VIRTIO_GPU=m
|
||||
CONFIG_FB=y
|
||||
# CONFIG_FB_DEVICE is not set
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
|
||||
# CONFIG_HID_SUPPORT is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
CONFIG_INFINIBAND=m
|
||||
CONFIG_INFINIBAND_USER_ACCESS=m
|
||||
CONFIG_MLX4_INFINIBAND=m
|
||||
CONFIG_MLX5_INFINIBAND=m
|
||||
CONFIG_SYNC_FILE=y
|
||||
CONFIG_VFIO=m
|
||||
CONFIG_VFIO_PCI=m
|
||||
CONFIG_MLX5_VFIO_PCI=m
|
||||
|
@ -592,17 +592,16 @@ CONFIG_WATCHDOG_CORE=y
|
||||
CONFIG_WATCHDOG_NOWAYOUT=y
|
||||
CONFIG_SOFT_WATCHDOG=m
|
||||
CONFIG_DIAG288_WATCHDOG=m
|
||||
CONFIG_DRM=m
|
||||
CONFIG_DRM_VIRTIO_GPU=m
|
||||
CONFIG_FB=y
|
||||
# CONFIG_FB_DEVICE is not set
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
|
||||
# CONFIG_HID_SUPPORT is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
CONFIG_INFINIBAND=m
|
||||
CONFIG_INFINIBAND_USER_ACCESS=m
|
||||
CONFIG_MLX4_INFINIBAND=m
|
||||
CONFIG_MLX5_INFINIBAND=m
|
||||
CONFIG_SYNC_FILE=y
|
||||
CONFIG_VFIO=m
|
||||
CONFIG_VFIO_PCI=m
|
||||
CONFIG_MLX5_VFIO_PCI=m
|
||||
|
@ -54,7 +54,7 @@ static __always_inline void arch_exit_to_user_mode(void)
|
||||
static inline void arch_exit_to_user_mode_prepare(struct pt_regs *regs,
|
||||
unsigned long ti_work)
|
||||
{
|
||||
choose_random_kstack_offset(get_tod_clock_fast() & 0xff);
|
||||
choose_random_kstack_offset(get_tod_clock_fast());
|
||||
}
|
||||
|
||||
#define arch_exit_to_user_mode_prepare arch_exit_to_user_mode_prepare
|
||||
|
@ -38,33 +38,6 @@
|
||||
|
||||
#include "entry.h"
|
||||
|
||||
/*
|
||||
* Perform the mmap() system call. Linux for S/390 isn't able to handle more
|
||||
* than 5 system call parameters, so this system call uses a memory block
|
||||
* for parameter passing.
|
||||
*/
|
||||
|
||||
struct s390_mmap_arg_struct {
|
||||
unsigned long addr;
|
||||
unsigned long len;
|
||||
unsigned long prot;
|
||||
unsigned long flags;
|
||||
unsigned long fd;
|
||||
unsigned long offset;
|
||||
};
|
||||
|
||||
SYSCALL_DEFINE1(mmap2, struct s390_mmap_arg_struct __user *, arg)
|
||||
{
|
||||
struct s390_mmap_arg_struct a;
|
||||
int error = -EFAULT;
|
||||
|
||||
if (copy_from_user(&a, arg, sizeof(a)))
|
||||
goto out;
|
||||
error = ksys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, a.offset);
|
||||
out:
|
||||
return error;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SYSVIPC
|
||||
/*
|
||||
* sys_ipc() is the de-multiplexer for the SysV IPC calls.
|
||||
|
@ -418,7 +418,7 @@
|
||||
412 32 utimensat_time64 - sys_utimensat
|
||||
413 32 pselect6_time64 - compat_sys_pselect6_time64
|
||||
414 32 ppoll_time64 - compat_sys_ppoll_time64
|
||||
416 32 io_pgetevents_time64 - sys_io_pgetevents
|
||||
416 32 io_pgetevents_time64 - compat_sys_io_pgetevents_time64
|
||||
417 32 recvmmsg_time64 - compat_sys_recvmmsg_time64
|
||||
418 32 mq_timedsend_time64 - sys_mq_timedsend
|
||||
419 32 mq_timedreceive_time64 - sys_mq_timedreceive
|
||||
|
@ -410,7 +410,7 @@ static void __init cpu_enable_directed_irq(void *unused)
|
||||
union zpci_sic_iib iib = {{0}};
|
||||
union zpci_sic_iib ziib = {{0}};
|
||||
|
||||
iib.cdiib.dibv_addr = (u64) zpci_ibv[smp_processor_id()]->vector;
|
||||
iib.cdiib.dibv_addr = virt_to_phys(zpci_ibv[smp_processor_id()]->vector);
|
||||
|
||||
zpci_set_irq_ctrl(SIC_IRQ_MODE_SET_CPU, 0, &iib);
|
||||
zpci_set_irq_ctrl(SIC_IRQ_MODE_D_SINGLE, PCI_ISC, &ziib);
|
||||
|
@ -59,3 +59,14 @@ asmlinkage int sys_fadvise64_64_wrapper(int fd, u32 offset0, u32 offset1,
|
||||
(u64)len0 << 32 | len1, advice);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* swap the arguments the way that libc wants them instead of
|
||||
* moving flags ahead of the 64-bit nbytes argument
|
||||
*/
|
||||
SYSCALL_DEFINE6(sh_sync_file_range6, int, fd, SC_ARG64(offset),
|
||||
SC_ARG64(nbytes), unsigned int, flags)
|
||||
{
|
||||
return ksys_sync_file_range(fd, SC_VAL64(loff_t, offset),
|
||||
SC_VAL64(loff_t, nbytes), flags);
|
||||
}
|
||||
|
@ -321,7 +321,7 @@
|
||||
311 common set_robust_list sys_set_robust_list
|
||||
312 common get_robust_list sys_get_robust_list
|
||||
313 common splice sys_splice
|
||||
314 common sync_file_range sys_sync_file_range
|
||||
314 common sync_file_range sys_sh_sync_file_range6
|
||||
315 common tee sys_tee
|
||||
316 common vmsplice sys_vmsplice
|
||||
317 common move_pages sys_move_pages
|
||||
@ -395,6 +395,7 @@
|
||||
385 common pkey_alloc sys_pkey_alloc
|
||||
386 common pkey_free sys_pkey_free
|
||||
387 common rseq sys_rseq
|
||||
388 common sync_file_range2 sys_sync_file_range2
|
||||
# room for arch specific syscalls
|
||||
393 common semget sys_semget
|
||||
394 common semctl sys_semctl
|
||||
|
@ -18,224 +18,3 @@ sys32_mmap2:
|
||||
sethi %hi(sys_mmap), %g1
|
||||
jmpl %g1 + %lo(sys_mmap), %g0
|
||||
sllx %o5, 12, %o5
|
||||
|
||||
.align 32
|
||||
.globl sys32_socketcall
|
||||
sys32_socketcall: /* %o0=call, %o1=args */
|
||||
cmp %o0, 1
|
||||
bl,pn %xcc, do_einval
|
||||
cmp %o0, 18
|
||||
bg,pn %xcc, do_einval
|
||||
sub %o0, 1, %o0
|
||||
sllx %o0, 5, %o0
|
||||
sethi %hi(__socketcall_table_begin), %g2
|
||||
or %g2, %lo(__socketcall_table_begin), %g2
|
||||
jmpl %g2 + %o0, %g0
|
||||
nop
|
||||
do_einval:
|
||||
retl
|
||||
mov -EINVAL, %o0
|
||||
|
||||
.align 32
|
||||
__socketcall_table_begin:
|
||||
|
||||
/* Each entry is exactly 32 bytes. */
|
||||
do_sys_socket: /* sys_socket(int, int, int) */
|
||||
1: ldswa [%o1 + 0x0] %asi, %o0
|
||||
sethi %hi(sys_socket), %g1
|
||||
2: ldswa [%o1 + 0x8] %asi, %o2
|
||||
jmpl %g1 + %lo(sys_socket), %g0
|
||||
3: ldswa [%o1 + 0x4] %asi, %o1
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
do_sys_bind: /* sys_bind(int fd, struct sockaddr *, int) */
|
||||
4: ldswa [%o1 + 0x0] %asi, %o0
|
||||
sethi %hi(sys_bind), %g1
|
||||
5: ldswa [%o1 + 0x8] %asi, %o2
|
||||
jmpl %g1 + %lo(sys_bind), %g0
|
||||
6: lduwa [%o1 + 0x4] %asi, %o1
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
do_sys_connect: /* sys_connect(int, struct sockaddr *, int) */
|
||||
7: ldswa [%o1 + 0x0] %asi, %o0
|
||||
sethi %hi(sys_connect), %g1
|
||||
8: ldswa [%o1 + 0x8] %asi, %o2
|
||||
jmpl %g1 + %lo(sys_connect), %g0
|
||||
9: lduwa [%o1 + 0x4] %asi, %o1
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
do_sys_listen: /* sys_listen(int, int) */
|
||||
10: ldswa [%o1 + 0x0] %asi, %o0
|
||||
sethi %hi(sys_listen), %g1
|
||||
jmpl %g1 + %lo(sys_listen), %g0
|
||||
11: ldswa [%o1 + 0x4] %asi, %o1
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
do_sys_accept: /* sys_accept(int, struct sockaddr *, int *) */
|
||||
12: ldswa [%o1 + 0x0] %asi, %o0
|
||||
sethi %hi(sys_accept), %g1
|
||||
13: lduwa [%o1 + 0x8] %asi, %o2
|
||||
jmpl %g1 + %lo(sys_accept), %g0
|
||||
14: lduwa [%o1 + 0x4] %asi, %o1
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
do_sys_getsockname: /* sys_getsockname(int, struct sockaddr *, int *) */
|
||||
15: ldswa [%o1 + 0x0] %asi, %o0
|
||||
sethi %hi(sys_getsockname), %g1
|
||||
16: lduwa [%o1 + 0x8] %asi, %o2
|
||||
jmpl %g1 + %lo(sys_getsockname), %g0
|
||||
17: lduwa [%o1 + 0x4] %asi, %o1
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
do_sys_getpeername: /* sys_getpeername(int, struct sockaddr *, int *) */
|
||||
18: ldswa [%o1 + 0x0] %asi, %o0
|
||||
sethi %hi(sys_getpeername), %g1
|
||||
19: lduwa [%o1 + 0x8] %asi, %o2
|
||||
jmpl %g1 + %lo(sys_getpeername), %g0
|
||||
20: lduwa [%o1 + 0x4] %asi, %o1
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
do_sys_socketpair: /* sys_socketpair(int, int, int, int *) */
|
||||
21: ldswa [%o1 + 0x0] %asi, %o0
|
||||
sethi %hi(sys_socketpair), %g1
|
||||
22: ldswa [%o1 + 0x8] %asi, %o2
|
||||
23: lduwa [%o1 + 0xc] %asi, %o3
|
||||
jmpl %g1 + %lo(sys_socketpair), %g0
|
||||
24: ldswa [%o1 + 0x4] %asi, %o1
|
||||
nop
|
||||
nop
|
||||
do_sys_send: /* sys_send(int, void *, size_t, unsigned int) */
|
||||
25: ldswa [%o1 + 0x0] %asi, %o0
|
||||
sethi %hi(sys_send), %g1
|
||||
26: lduwa [%o1 + 0x8] %asi, %o2
|
||||
27: lduwa [%o1 + 0xc] %asi, %o3
|
||||
jmpl %g1 + %lo(sys_send), %g0
|
||||
28: lduwa [%o1 + 0x4] %asi, %o1
|
||||
nop
|
||||
nop
|
||||
do_sys_recv: /* sys_recv(int, void *, size_t, unsigned int) */
|
||||
29: ldswa [%o1 + 0x0] %asi, %o0
|
||||
sethi %hi(sys_recv), %g1
|
||||
30: lduwa [%o1 + 0x8] %asi, %o2
|
||||
31: lduwa [%o1 + 0xc] %asi, %o3
|
||||
jmpl %g1 + %lo(sys_recv), %g0
|
||||
32: lduwa [%o1 + 0x4] %asi, %o1
|
||||
nop
|
||||
nop
|
||||
do_sys_sendto: /* sys_sendto(int, u32, compat_size_t, unsigned int, u32, int) */
|
||||
33: ldswa [%o1 + 0x0] %asi, %o0
|
||||
sethi %hi(sys_sendto), %g1
|
||||
34: lduwa [%o1 + 0x8] %asi, %o2
|
||||
35: lduwa [%o1 + 0xc] %asi, %o3
|
||||
36: lduwa [%o1 + 0x10] %asi, %o4
|
||||
37: ldswa [%o1 + 0x14] %asi, %o5
|
||||
jmpl %g1 + %lo(sys_sendto), %g0
|
||||
38: lduwa [%o1 + 0x4] %asi, %o1
|
||||
do_sys_recvfrom: /* sys_recvfrom(int, u32, compat_size_t, unsigned int, u32, u32) */
|
||||
39: ldswa [%o1 + 0x0] %asi, %o0
|
||||
sethi %hi(sys_recvfrom), %g1
|
||||
40: lduwa [%o1 + 0x8] %asi, %o2
|
||||
41: lduwa [%o1 + 0xc] %asi, %o3
|
||||
42: lduwa [%o1 + 0x10] %asi, %o4
|
||||
43: lduwa [%o1 + 0x14] %asi, %o5
|
||||
jmpl %g1 + %lo(sys_recvfrom), %g0
|
||||
44: lduwa [%o1 + 0x4] %asi, %o1
|
||||
do_sys_shutdown: /* sys_shutdown(int, int) */
|
||||
45: ldswa [%o1 + 0x0] %asi, %o0
|
||||
sethi %hi(sys_shutdown), %g1
|
||||
jmpl %g1 + %lo(sys_shutdown), %g0
|
||||
46: ldswa [%o1 + 0x4] %asi, %o1
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
do_sys_setsockopt: /* sys_setsockopt(int, int, int, char *, int) */
|
||||
47: ldswa [%o1 + 0x0] %asi, %o0
|
||||
sethi %hi(sys_setsockopt), %g1
|
||||
48: ldswa [%o1 + 0x8] %asi, %o2
|
||||
49: lduwa [%o1 + 0xc] %asi, %o3
|
||||
50: ldswa [%o1 + 0x10] %asi, %o4
|
||||
jmpl %g1 + %lo(sys_setsockopt), %g0
|
||||
51: ldswa [%o1 + 0x4] %asi, %o1
|
||||
nop
|
||||
do_sys_getsockopt: /* sys_getsockopt(int, int, int, u32, u32) */
|
||||
52: ldswa [%o1 + 0x0] %asi, %o0
|
||||
sethi %hi(sys_getsockopt), %g1
|
||||
53: ldswa [%o1 + 0x8] %asi, %o2
|
||||
54: lduwa [%o1 + 0xc] %asi, %o3
|
||||
55: lduwa [%o1 + 0x10] %asi, %o4
|
||||
jmpl %g1 + %lo(sys_getsockopt), %g0
|
||||
56: ldswa [%o1 + 0x4] %asi, %o1
|
||||
nop
|
||||
do_sys_sendmsg: /* compat_sys_sendmsg(int, struct compat_msghdr *, unsigned int) */
|
||||
57: ldswa [%o1 + 0x0] %asi, %o0
|
||||
sethi %hi(compat_sys_sendmsg), %g1
|
||||
58: lduwa [%o1 + 0x8] %asi, %o2
|
||||
jmpl %g1 + %lo(compat_sys_sendmsg), %g0
|
||||
59: lduwa [%o1 + 0x4] %asi, %o1
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
do_sys_recvmsg: /* compat_sys_recvmsg(int, struct compat_msghdr *, unsigned int) */
|
||||
60: ldswa [%o1 + 0x0] %asi, %o0
|
||||
sethi %hi(compat_sys_recvmsg), %g1
|
||||
61: lduwa [%o1 + 0x8] %asi, %o2
|
||||
jmpl %g1 + %lo(compat_sys_recvmsg), %g0
|
||||
62: lduwa [%o1 + 0x4] %asi, %o1
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
do_sys_accept4: /* sys_accept4(int, struct sockaddr *, int *, int) */
|
||||
63: ldswa [%o1 + 0x0] %asi, %o0
|
||||
sethi %hi(sys_accept4), %g1
|
||||
64: lduwa [%o1 + 0x8] %asi, %o2
|
||||
65: ldswa [%o1 + 0xc] %asi, %o3
|
||||
jmpl %g1 + %lo(sys_accept4), %g0
|
||||
66: lduwa [%o1 + 0x4] %asi, %o1
|
||||
nop
|
||||
nop
|
||||
|
||||
.section __ex_table,"a"
|
||||
.align 4
|
||||
.word 1b, __retl_efault, 2b, __retl_efault
|
||||
.word 3b, __retl_efault, 4b, __retl_efault
|
||||
.word 5b, __retl_efault, 6b, __retl_efault
|
||||
.word 7b, __retl_efault, 8b, __retl_efault
|
||||
.word 9b, __retl_efault, 10b, __retl_efault
|
||||
.word 11b, __retl_efault, 12b, __retl_efault
|
||||
.word 13b, __retl_efault, 14b, __retl_efault
|
||||
.word 15b, __retl_efault, 16b, __retl_efault
|
||||
.word 17b, __retl_efault, 18b, __retl_efault
|
||||
.word 19b, __retl_efault, 20b, __retl_efault
|
||||
.word 21b, __retl_efault, 22b, __retl_efault
|
||||
.word 23b, __retl_efault, 24b, __retl_efault
|
||||
.word 25b, __retl_efault, 26b, __retl_efault
|
||||
.word 27b, __retl_efault, 28b, __retl_efault
|
||||
.word 29b, __retl_efault, 30b, __retl_efault
|
||||
.word 31b, __retl_efault, 32b, __retl_efault
|
||||
.word 33b, __retl_efault, 34b, __retl_efault
|
||||
.word 35b, __retl_efault, 36b, __retl_efault
|
||||
.word 37b, __retl_efault, 38b, __retl_efault
|
||||
.word 39b, __retl_efault, 40b, __retl_efault
|
||||
.word 41b, __retl_efault, 42b, __retl_efault
|
||||
.word 43b, __retl_efault, 44b, __retl_efault
|
||||
.word 45b, __retl_efault, 46b, __retl_efault
|
||||
.word 47b, __retl_efault, 48b, __retl_efault
|
||||
.word 49b, __retl_efault, 50b, __retl_efault
|
||||
.word 51b, __retl_efault, 52b, __retl_efault
|
||||
.word 53b, __retl_efault, 54b, __retl_efault
|
||||
.word 55b, __retl_efault, 56b, __retl_efault
|
||||
.word 57b, __retl_efault, 58b, __retl_efault
|
||||
.word 59b, __retl_efault, 60b, __retl_efault
|
||||
.word 61b, __retl_efault, 62b, __retl_efault
|
||||
.word 63b, __retl_efault, 64b, __retl_efault
|
||||
.word 65b, __retl_efault, 66b, __retl_efault
|
||||
.previous
|
||||
|
@ -117,7 +117,7 @@
|
||||
90 common dup2 sys_dup2
|
||||
91 32 setfsuid32 sys_setfsuid
|
||||
92 common fcntl sys_fcntl compat_sys_fcntl
|
||||
93 common select sys_select
|
||||
93 common select sys_select compat_sys_select
|
||||
94 32 setfsgid32 sys_setfsgid
|
||||
95 common fsync sys_fsync
|
||||
96 common setpriority sys_setpriority
|
||||
@ -155,7 +155,7 @@
|
||||
123 32 fchown sys_fchown16
|
||||
123 64 fchown sys_fchown
|
||||
124 common fchmod sys_fchmod
|
||||
125 common recvfrom sys_recvfrom
|
||||
125 common recvfrom sys_recvfrom compat_sys_recvfrom
|
||||
126 32 setreuid sys_setreuid16
|
||||
126 64 setreuid sys_setreuid
|
||||
127 32 setregid sys_setregid16
|
||||
@ -247,7 +247,7 @@
|
||||
204 32 readdir sys_old_readdir compat_sys_old_readdir
|
||||
204 64 readdir sys_nis_syscall
|
||||
205 common readahead sys_readahead compat_sys_readahead
|
||||
206 common socketcall sys_socketcall sys32_socketcall
|
||||
206 common socketcall sys_socketcall compat_sys_socketcall
|
||||
207 common syslog sys_syslog
|
||||
208 common lookup_dcookie sys_ni_syscall
|
||||
209 common fadvise64 sys_fadvise64 compat_sys_fadvise64
|
||||
@ -461,7 +461,7 @@
|
||||
412 32 utimensat_time64 sys_utimensat sys_utimensat
|
||||
413 32 pselect6_time64 sys_pselect6 compat_sys_pselect6_time64
|
||||
414 32 ppoll_time64 sys_ppoll compat_sys_ppoll_time64
|
||||
416 32 io_pgetevents_time64 sys_io_pgetevents sys_io_pgetevents
|
||||
416 32 io_pgetevents_time64 sys_io_pgetevents compat_sys_io_pgetevents_time64
|
||||
417 32 recvmmsg_time64 sys_recvmmsg compat_sys_recvmmsg_time64
|
||||
418 32 mq_timedsend_time64 sys_mq_timedsend sys_mq_timedsend
|
||||
419 32 mq_timedreceive_time64 sys_mq_timedreceive sys_mq_timedreceive
|
||||
|
@ -420,7 +420,7 @@
|
||||
412 i386 utimensat_time64 sys_utimensat
|
||||
413 i386 pselect6_time64 sys_pselect6 compat_sys_pselect6_time64
|
||||
414 i386 ppoll_time64 sys_ppoll compat_sys_ppoll_time64
|
||||
416 i386 io_pgetevents_time64 sys_io_pgetevents
|
||||
416 i386 io_pgetevents_time64 sys_io_pgetevents compat_sys_io_pgetevents_time64
|
||||
417 i386 recvmmsg_time64 sys_recvmmsg compat_sys_recvmmsg_time64
|
||||
418 i386 mq_timedsend_time64 sys_mq_timedsend
|
||||
419 i386 mq_timedreceive_time64 sys_mq_timedreceive
|
||||
|
@ -93,10 +93,9 @@ static __always_inline bool __try_cmpxchg64_local(volatile u64 *ptr, u64 *oldp,
|
||||
\
|
||||
asm volatile(ALTERNATIVE(_lock_loc \
|
||||
"call cmpxchg8b_emu", \
|
||||
_lock "cmpxchg8b %[ptr]", X86_FEATURE_CX8) \
|
||||
: [ptr] "+m" (*(_ptr)), \
|
||||
"+a" (o.low), "+d" (o.high) \
|
||||
: "b" (n.low), "c" (n.high), "S" (_ptr) \
|
||||
_lock "cmpxchg8b %a[ptr]", X86_FEATURE_CX8) \
|
||||
: "+a" (o.low), "+d" (o.high) \
|
||||
: "b" (n.low), "c" (n.high), [ptr] "S" (_ptr) \
|
||||
: "memory"); \
|
||||
\
|
||||
o.full; \
|
||||
@ -122,12 +121,11 @@ static __always_inline u64 arch_cmpxchg64_local(volatile u64 *ptr, u64 old, u64
|
||||
\
|
||||
asm volatile(ALTERNATIVE(_lock_loc \
|
||||
"call cmpxchg8b_emu", \
|
||||
_lock "cmpxchg8b %[ptr]", X86_FEATURE_CX8) \
|
||||
_lock "cmpxchg8b %a[ptr]", X86_FEATURE_CX8) \
|
||||
CC_SET(e) \
|
||||
: CC_OUT(e) (ret), \
|
||||
[ptr] "+m" (*(_ptr)), \
|
||||
"+a" (o.low), "+d" (o.high) \
|
||||
: "b" (n.low), "c" (n.high), "S" (_ptr) \
|
||||
: "b" (n.low), "c" (n.high), [ptr] "S" (_ptr) \
|
||||
: "memory"); \
|
||||
\
|
||||
if (unlikely(!ret)) \
|
||||
|
@ -73,19 +73,16 @@ static inline void arch_exit_to_user_mode_prepare(struct pt_regs *regs,
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Ultimately, this value will get limited by KSTACK_OFFSET_MAX(),
|
||||
* but not enough for x86 stack utilization comfort. To keep
|
||||
* reasonable stack head room, reduce the maximum offset to 8 bits.
|
||||
*
|
||||
* The actual entropy will be further reduced by the compiler when
|
||||
* applying stack alignment constraints (see cc_stack_align4/8 in
|
||||
* This value will get limited by KSTACK_OFFSET_MAX(), which is 10
|
||||
* bits. The actual entropy will be further reduced by the compiler
|
||||
* when applying stack alignment constraints (see cc_stack_align4/8 in
|
||||
* arch/x86/Makefile), which will remove the 3 (x86_64) or 2 (ia32)
|
||||
* low bits from any entropy chosen here.
|
||||
*
|
||||
* Therefore, final stack offset entropy will be 5 (x86_64) or
|
||||
* 6 (ia32) bits.
|
||||
* Therefore, final stack offset entropy will be 7 (x86_64) or
|
||||
* 8 (ia32) bits.
|
||||
*/
|
||||
choose_random_kstack_offset(rdtsc() & 0xFF);
|
||||
choose_random_kstack_offset(rdtsc());
|
||||
}
|
||||
#define arch_exit_to_user_mode_prepare arch_exit_to_user_mode_prepare
|
||||
|
||||
|
@ -27,25 +27,7 @@
|
||||
|
||||
unsigned long profile_pc(struct pt_regs *regs)
|
||||
{
|
||||
unsigned long pc = instruction_pointer(regs);
|
||||
|
||||
if (!user_mode(regs) && in_lock_functions(pc)) {
|
||||
#ifdef CONFIG_FRAME_POINTER
|
||||
return *(unsigned long *)(regs->bp + sizeof(long));
|
||||
#else
|
||||
unsigned long *sp = (unsigned long *)regs->sp;
|
||||
/*
|
||||
* Return address is either directly at stack pointer
|
||||
* or above a saved flags. Eflags has bits 22-31 zero,
|
||||
* kernel addresses don't.
|
||||
*/
|
||||
if (sp[0] >> 22)
|
||||
return sp[0];
|
||||
if (sp[1] >> 22)
|
||||
return sp[1];
|
||||
#endif
|
||||
}
|
||||
return pc;
|
||||
return instruction_pointer(regs);
|
||||
}
|
||||
EXPORT_SYMBOL(profile_pc);
|
||||
|
||||
|
@ -1975,8 +1975,10 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
n_ports = max(ahci_nr_ports(hpriv->cap), fls(hpriv->port_map));
|
||||
|
||||
host = ata_host_alloc_pinfo(&pdev->dev, ppi, n_ports);
|
||||
if (!host)
|
||||
return -ENOMEM;
|
||||
if (!host) {
|
||||
rc = -ENOMEM;
|
||||
goto err_rm_sysfs_file;
|
||||
}
|
||||
host->private_data = hpriv;
|
||||
|
||||
if (ahci_init_msi(pdev, n_ports, hpriv) < 0) {
|
||||
@ -2031,11 +2033,11 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
/* initialize adapter */
|
||||
rc = ahci_configure_dma_masks(pdev, hpriv);
|
||||
if (rc)
|
||||
return rc;
|
||||
goto err_rm_sysfs_file;
|
||||
|
||||
rc = ahci_pci_reset_controller(host);
|
||||
if (rc)
|
||||
return rc;
|
||||
goto err_rm_sysfs_file;
|
||||
|
||||
ahci_pci_init_controller(host);
|
||||
ahci_pci_print_info(host);
|
||||
@ -2044,10 +2046,15 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
|
||||
rc = ahci_host_activate(host, &ahci_sht);
|
||||
if (rc)
|
||||
return rc;
|
||||
goto err_rm_sysfs_file;
|
||||
|
||||
pm_runtime_put_noidle(&pdev->dev);
|
||||
return 0;
|
||||
|
||||
err_rm_sysfs_file:
|
||||
sysfs_remove_file_from_group(&pdev->dev.kobj,
|
||||
&dev_attr_remapped_nvme.attr, NULL);
|
||||
return rc;
|
||||
}
|
||||
|
||||
static void ahci_shutdown_one(struct pci_dev *pdev)
|
||||
|
@ -4137,8 +4137,7 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
|
||||
{ "PIONEER BD-RW BDR-205", NULL, ATA_HORKAGE_NOLPM },
|
||||
|
||||
/* Crucial devices with broken LPM support */
|
||||
{ "CT500BX100SSD1", NULL, ATA_HORKAGE_NOLPM },
|
||||
{ "CT240BX500SSD1", NULL, ATA_HORKAGE_NOLPM },
|
||||
{ "CT*0BX*00SSD1", NULL, ATA_HORKAGE_NOLPM },
|
||||
|
||||
/* 512GB MX100 with MU01 firmware has both queued TRIM and LPM issues */
|
||||
{ "Crucial_CT512MX100*", "MU01", ATA_HORKAGE_NO_NCQ_TRIM |
|
||||
@ -5490,6 +5489,18 @@ struct ata_port *ata_port_alloc(struct ata_host *host)
|
||||
return ap;
|
||||
}
|
||||
|
||||
void ata_port_free(struct ata_port *ap)
|
||||
{
|
||||
if (!ap)
|
||||
return;
|
||||
|
||||
kfree(ap->pmp_link);
|
||||
kfree(ap->slave_link);
|
||||
kfree(ap->ncq_sense_buf);
|
||||
kfree(ap);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ata_port_free);
|
||||
|
||||
static void ata_devres_release(struct device *gendev, void *res)
|
||||
{
|
||||
struct ata_host *host = dev_get_drvdata(gendev);
|
||||
@ -5516,12 +5527,7 @@ static void ata_host_release(struct kref *kref)
|
||||
int i;
|
||||
|
||||
for (i = 0; i < host->n_ports; i++) {
|
||||
struct ata_port *ap = host->ports[i];
|
||||
|
||||
kfree(ap->pmp_link);
|
||||
kfree(ap->slave_link);
|
||||
kfree(ap->ncq_sense_buf);
|
||||
kfree(ap);
|
||||
ata_port_free(host->ports[i]);
|
||||
host->ports[i] = NULL;
|
||||
}
|
||||
kfree(host);
|
||||
@ -5571,8 +5577,10 @@ struct ata_host *ata_host_alloc(struct device *dev, int max_ports)
|
||||
if (!host)
|
||||
return NULL;
|
||||
|
||||
if (!devres_open_group(dev, NULL, GFP_KERNEL))
|
||||
goto err_free;
|
||||
if (!devres_open_group(dev, NULL, GFP_KERNEL)) {
|
||||
kfree(host);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
dr = devres_alloc(ata_devres_release, 0, GFP_KERNEL);
|
||||
if (!dr)
|
||||
@ -5604,8 +5612,6 @@ struct ata_host *ata_host_alloc(struct device *dev, int max_ports)
|
||||
|
||||
err_out:
|
||||
devres_release_group(dev, NULL);
|
||||
err_free:
|
||||
kfree(host);
|
||||
return NULL;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ata_host_alloc);
|
||||
@ -5904,7 +5910,7 @@ int ata_host_register(struct ata_host *host, const struct scsi_host_template *sh
|
||||
* allocation time.
|
||||
*/
|
||||
for (i = host->n_ports; host->ports[i]; i++)
|
||||
kfree(host->ports[i]);
|
||||
ata_port_free(host->ports[i]);
|
||||
|
||||
/* give ports names and add SCSI hosts */
|
||||
for (i = 0; i < host->n_ports; i++) {
|
||||
|
@ -382,7 +382,7 @@ static int btintel_pcie_recv_frame(struct btintel_pcie_data *data,
|
||||
|
||||
/* The first 4 bytes indicates the Intel PCIe specific packet type */
|
||||
pdata = skb_pull_data(skb, BTINTEL_PCIE_HCI_TYPE_LEN);
|
||||
if (!data) {
|
||||
if (!pdata) {
|
||||
bt_dev_err(hdev, "Corrupted packet received");
|
||||
ret = -EILSEQ;
|
||||
goto exit_error;
|
||||
|
@ -281,7 +281,7 @@ static u8 crc8_table[CRC8_TABLE_SIZE];
|
||||
|
||||
/* Default configurations */
|
||||
#define DEFAULT_H2C_WAKEUP_MODE WAKEUP_METHOD_BREAK
|
||||
#define DEFAULT_PS_MODE PS_MODE_DISABLE
|
||||
#define DEFAULT_PS_MODE PS_MODE_ENABLE
|
||||
#define FW_INIT_BAUDRATE HCI_NXP_PRI_BAUDRATE
|
||||
|
||||
static struct sk_buff *nxp_drv_send_cmd(struct hci_dev *hdev, u16 opcode,
|
||||
|
@ -495,6 +495,10 @@ struct bcm4377_data;
|
||||
* extended scanning
|
||||
* broken_mws_transport_config: Set to true if the chip erroneously claims to
|
||||
* support MWS Transport Configuration
|
||||
* broken_le_ext_adv_report_phy: Set to true if this chip stuffs flags inside
|
||||
* reserved bits of Primary/Secondary_PHY inside
|
||||
* LE Extended Advertising Report events which
|
||||
* have to be ignored
|
||||
* send_calibration: Optional callback to send calibration data
|
||||
* send_ptb: Callback to send "PTB" regulatory/calibration data
|
||||
*/
|
||||
@ -513,6 +517,7 @@ struct bcm4377_hw {
|
||||
unsigned long broken_ext_scan : 1;
|
||||
unsigned long broken_mws_transport_config : 1;
|
||||
unsigned long broken_le_coded : 1;
|
||||
unsigned long broken_le_ext_adv_report_phy : 1;
|
||||
|
||||
int (*send_calibration)(struct bcm4377_data *bcm4377);
|
||||
int (*send_ptb)(struct bcm4377_data *bcm4377,
|
||||
@ -716,7 +721,7 @@ static void bcm4377_handle_ack(struct bcm4377_data *bcm4377,
|
||||
ring->events[msgid] = NULL;
|
||||
}
|
||||
|
||||
bitmap_release_region(ring->msgids, msgid, ring->n_entries);
|
||||
bitmap_release_region(ring->msgids, msgid, 0);
|
||||
|
||||
unlock:
|
||||
spin_unlock_irqrestore(&ring->lock, flags);
|
||||
@ -2373,6 +2378,8 @@ static int bcm4377_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
set_bit(HCI_QUIRK_BROKEN_EXT_SCAN, &hdev->quirks);
|
||||
if (bcm4377->hw->broken_le_coded)
|
||||
set_bit(HCI_QUIRK_BROKEN_LE_CODED, &hdev->quirks);
|
||||
if (bcm4377->hw->broken_le_ext_adv_report_phy)
|
||||
set_bit(HCI_QUIRK_FIXUP_LE_EXT_ADV_REPORT_PHY, &hdev->quirks);
|
||||
|
||||
pci_set_drvdata(pdev, bcm4377);
|
||||
hci_set_drvdata(hdev, bcm4377);
|
||||
@ -2477,6 +2484,7 @@ static const struct bcm4377_hw bcm4377_hw_variants[] = {
|
||||
.clear_pciecfg_subsystem_ctrl_bit19 = true,
|
||||
.broken_mws_transport_config = true,
|
||||
.broken_le_coded = true,
|
||||
.broken_le_ext_adv_report_phy = true,
|
||||
.send_calibration = bcm4387_send_calibration,
|
||||
.send_ptb = bcm4378_send_ptb,
|
||||
},
|
||||
|
@ -2450,15 +2450,27 @@ static void qca_serdev_shutdown(struct device *dev)
|
||||
struct qca_serdev *qcadev = serdev_device_get_drvdata(serdev);
|
||||
struct hci_uart *hu = &qcadev->serdev_hu;
|
||||
struct hci_dev *hdev = hu->hdev;
|
||||
struct qca_data *qca = hu->priv;
|
||||
const u8 ibs_wake_cmd[] = { 0xFD };
|
||||
const u8 edl_reset_soc_cmd[] = { 0x01, 0x00, 0xFC, 0x01, 0x05 };
|
||||
|
||||
if (qcadev->btsoc_type == QCA_QCA6390) {
|
||||
if (test_bit(QCA_BT_OFF, &qca->flags) ||
|
||||
!test_bit(HCI_RUNNING, &hdev->flags))
|
||||
/* The purpose of sending the VSC is to reset SOC into a initial
|
||||
* state and the state will ensure next hdev->setup() success.
|
||||
* if HCI_QUIRK_NON_PERSISTENT_SETUP is set, it means that
|
||||
* hdev->setup() can do its job regardless of SoC state, so
|
||||
* don't need to send the VSC.
|
||||
* if HCI_SETUP is set, it means that hdev->setup() was never
|
||||
* invoked and the SOC is already in the initial state, so
|
||||
* don't also need to send the VSC.
|
||||
*/
|
||||
if (test_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks) ||
|
||||
hci_dev_test_flag(hdev, HCI_SETUP))
|
||||
return;
|
||||
|
||||
/* The serdev must be in open state when conrol logic arrives
|
||||
* here, so also fix the use-after-free issue caused by that
|
||||
* the serdev is flushed or wrote after it is closed.
|
||||
*/
|
||||
serdev_device_write_flush(serdev);
|
||||
ret = serdev_device_write_buf(serdev, ibs_wake_cmd,
|
||||
sizeof(ibs_wake_cmd));
|
||||
|
@ -6,6 +6,7 @@
|
||||
*/
|
||||
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/counter.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/mod_devicetable.h>
|
||||
@ -376,6 +377,7 @@ static int ti_eqep_probe(struct platform_device *pdev)
|
||||
struct counter_device *counter;
|
||||
struct ti_eqep_cnt *priv;
|
||||
void __iomem *base;
|
||||
struct clk *clk;
|
||||
int err;
|
||||
|
||||
counter = devm_counter_alloc(dev, sizeof(*priv));
|
||||
@ -415,6 +417,10 @@ static int ti_eqep_probe(struct platform_device *pdev)
|
||||
pm_runtime_enable(dev);
|
||||
pm_runtime_get_sync(dev);
|
||||
|
||||
clk = devm_clk_get_enabled(dev, NULL);
|
||||
if (IS_ERR(clk))
|
||||
return dev_err_probe(dev, PTR_ERR(clk), "failed to enable clock\n");
|
||||
|
||||
err = counter_add(counter);
|
||||
if (err < 0) {
|
||||
pm_runtime_put_sync(dev);
|
||||
|
@ -355,15 +355,14 @@ static void intel_pstate_set_itmt_prio(int cpu)
|
||||
int ret;
|
||||
|
||||
ret = cppc_get_perf_caps(cpu, &cppc_perf);
|
||||
if (ret)
|
||||
return;
|
||||
|
||||
/*
|
||||
* On some systems with overclocking enabled, CPPC.highest_perf is hardcoded to 0xff.
|
||||
* In this case we can't use CPPC.highest_perf to enable ITMT.
|
||||
* In this case we can look at MSR_HWP_CAPABILITIES bits [8:0] to decide.
|
||||
* If CPPC is not available, fall back to MSR_HWP_CAPABILITIES bits [8:0].
|
||||
*
|
||||
* Also, on some systems with overclocking enabled, CPPC.highest_perf is
|
||||
* hardcoded to 0xff, so CPPC.highest_perf cannot be used to enable ITMT.
|
||||
* Fall back to MSR_HWP_CAPABILITIES then too.
|
||||
*/
|
||||
if (cppc_perf.highest_perf == CPPC_MAX_PERF)
|
||||
if (ret || cppc_perf.highest_perf == CPPC_MAX_PERF)
|
||||
cppc_perf.highest_perf = HWP_HIGHEST_PERF(READ_ONCE(all_cpu_data[cpu]->hwp_cap_cached));
|
||||
|
||||
/*
|
||||
|
@ -39,7 +39,8 @@ intel_qat-objs := adf_cfg.o \
|
||||
adf_sysfs_rl.o \
|
||||
qat_uclo.o \
|
||||
qat_hal.o \
|
||||
qat_bl.o
|
||||
qat_bl.o \
|
||||
qat_mig_dev.o
|
||||
|
||||
intel_qat-$(CONFIG_DEBUG_FS) += adf_transport_debug.o \
|
||||
adf_fw_counters.o \
|
||||
@ -56,6 +57,6 @@ intel_qat-$(CONFIG_DEBUG_FS) += adf_transport_debug.o \
|
||||
intel_qat-$(CONFIG_PCI_IOV) += adf_sriov.o adf_vf_isr.o adf_pfvf_utils.o \
|
||||
adf_pfvf_pf_msg.o adf_pfvf_pf_proto.o \
|
||||
adf_pfvf_vf_msg.o adf_pfvf_vf_proto.o \
|
||||
adf_gen2_pfvf.o adf_gen4_pfvf.o qat_mig_dev.o
|
||||
adf_gen2_pfvf.o adf_gen4_pfvf.o
|
||||
|
||||
intel_qat-$(CONFIG_CRYPTO_DEV_QAT_ERROR_INJECTION) += adf_heartbeat_inject.o
|
||||
|
@ -52,6 +52,14 @@ int devm_cxl_add_passthrough_decoder(struct cxl_port *port)
|
||||
struct cxl_dport *dport = NULL;
|
||||
int single_port_map[1];
|
||||
unsigned long index;
|
||||
struct cxl_hdm *cxlhdm = dev_get_drvdata(&port->dev);
|
||||
|
||||
/*
|
||||
* Capability checks are moot for passthrough decoders, support
|
||||
* any and all possibilities.
|
||||
*/
|
||||
cxlhdm->interleave_mask = ~0U;
|
||||
cxlhdm->iw_cap_mask = ~0UL;
|
||||
|
||||
cxlsd = cxl_switch_decoder_alloc(port, 1);
|
||||
if (IS_ERR(cxlsd))
|
||||
@ -79,6 +87,11 @@ static void parse_hdm_decoder_caps(struct cxl_hdm *cxlhdm)
|
||||
cxlhdm->interleave_mask |= GENMASK(11, 8);
|
||||
if (FIELD_GET(CXL_HDM_DECODER_INTERLEAVE_14_12, hdm_cap))
|
||||
cxlhdm->interleave_mask |= GENMASK(14, 12);
|
||||
cxlhdm->iw_cap_mask = BIT(1) | BIT(2) | BIT(4) | BIT(8);
|
||||
if (FIELD_GET(CXL_HDM_DECODER_INTERLEAVE_3_6_12_WAY, hdm_cap))
|
||||
cxlhdm->iw_cap_mask |= BIT(3) | BIT(6) | BIT(12);
|
||||
if (FIELD_GET(CXL_HDM_DECODER_INTERLEAVE_16_WAY, hdm_cap))
|
||||
cxlhdm->iw_cap_mask |= BIT(16);
|
||||
}
|
||||
|
||||
static bool should_emulate_decoders(struct cxl_endpoint_dvsec_info *info)
|
||||
|
@ -62,10 +62,14 @@ static int match_nvdimm_bridge(struct device *dev, void *data)
|
||||
return is_cxl_nvdimm_bridge(dev);
|
||||
}
|
||||
|
||||
struct cxl_nvdimm_bridge *cxl_find_nvdimm_bridge(struct cxl_memdev *cxlmd)
|
||||
/**
|
||||
* cxl_find_nvdimm_bridge() - find a bridge device relative to a port
|
||||
* @port: any descendant port of an nvdimm-bridge associated
|
||||
* root-cxl-port
|
||||
*/
|
||||
struct cxl_nvdimm_bridge *cxl_find_nvdimm_bridge(struct cxl_port *port)
|
||||
{
|
||||
struct cxl_root *cxl_root __free(put_cxl_root) =
|
||||
find_cxl_root(cxlmd->endpoint);
|
||||
struct cxl_root *cxl_root __free(put_cxl_root) = find_cxl_root(port);
|
||||
struct device *dev;
|
||||
|
||||
if (!cxl_root)
|
||||
@ -242,18 +246,20 @@ static void cxlmd_release_nvdimm(void *_cxlmd)
|
||||
|
||||
/**
|
||||
* devm_cxl_add_nvdimm() - add a bridge between a cxl_memdev and an nvdimm
|
||||
* @parent_port: parent port for the (to be added) @cxlmd endpoint port
|
||||
* @cxlmd: cxl_memdev instance that will perform LIBNVDIMM operations
|
||||
*
|
||||
* Return: 0 on success negative error code on failure.
|
||||
*/
|
||||
int devm_cxl_add_nvdimm(struct cxl_memdev *cxlmd)
|
||||
int devm_cxl_add_nvdimm(struct cxl_port *parent_port,
|
||||
struct cxl_memdev *cxlmd)
|
||||
{
|
||||
struct cxl_nvdimm_bridge *cxl_nvb;
|
||||
struct cxl_nvdimm *cxl_nvd;
|
||||
struct device *dev;
|
||||
int rc;
|
||||
|
||||
cxl_nvb = cxl_find_nvdimm_bridge(cxlmd);
|
||||
cxl_nvb = cxl_find_nvdimm_bridge(parent_port);
|
||||
if (!cxl_nvb)
|
||||
return -ENODEV;
|
||||
|
||||
|
@ -1101,6 +1101,26 @@ static int cxl_port_attach_region(struct cxl_port *port,
|
||||
}
|
||||
cxld = cxl_rr->decoder;
|
||||
|
||||
/*
|
||||
* the number of targets should not exceed the target_count
|
||||
* of the decoder
|
||||
*/
|
||||
if (is_switch_decoder(&cxld->dev)) {
|
||||
struct cxl_switch_decoder *cxlsd;
|
||||
|
||||
cxlsd = to_cxl_switch_decoder(&cxld->dev);
|
||||
if (cxl_rr->nr_targets > cxlsd->nr_targets) {
|
||||
dev_dbg(&cxlr->dev,
|
||||
"%s:%s %s add: %s:%s @ %d overflows targets: %d\n",
|
||||
dev_name(port->uport_dev), dev_name(&port->dev),
|
||||
dev_name(&cxld->dev), dev_name(&cxlmd->dev),
|
||||
dev_name(&cxled->cxld.dev), pos,
|
||||
cxlsd->nr_targets);
|
||||
rc = -ENXIO;
|
||||
goto out_erase;
|
||||
}
|
||||
}
|
||||
|
||||
rc = cxl_rr_ep_add(cxl_rr, cxled);
|
||||
if (rc) {
|
||||
dev_dbg(&cxlr->dev,
|
||||
@ -1210,6 +1230,50 @@ static int check_last_peer(struct cxl_endpoint_decoder *cxled,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int check_interleave_cap(struct cxl_decoder *cxld, int iw, int ig)
|
||||
{
|
||||
struct cxl_port *port = to_cxl_port(cxld->dev.parent);
|
||||
struct cxl_hdm *cxlhdm = dev_get_drvdata(&port->dev);
|
||||
unsigned int interleave_mask;
|
||||
u8 eiw;
|
||||
u16 eig;
|
||||
int high_pos, low_pos;
|
||||
|
||||
if (!test_bit(iw, &cxlhdm->iw_cap_mask))
|
||||
return -ENXIO;
|
||||
/*
|
||||
* Per CXL specification r3.1(8.2.4.20.13 Decoder Protection),
|
||||
* if eiw < 8:
|
||||
* DPAOFFSET[51: eig + 8] = HPAOFFSET[51: eig + 8 + eiw]
|
||||
* DPAOFFSET[eig + 7: 0] = HPAOFFSET[eig + 7: 0]
|
||||
*
|
||||
* when the eiw is 0, all the bits of HPAOFFSET[51: 0] are used, the
|
||||
* interleave bits are none.
|
||||
*
|
||||
* if eiw >= 8:
|
||||
* DPAOFFSET[51: eig + 8] = HPAOFFSET[51: eig + eiw] / 3
|
||||
* DPAOFFSET[eig + 7: 0] = HPAOFFSET[eig + 7: 0]
|
||||
*
|
||||
* when the eiw is 8, all the bits of HPAOFFSET[51: 0] are used, the
|
||||
* interleave bits are none.
|
||||
*/
|
||||
ways_to_eiw(iw, &eiw);
|
||||
if (eiw == 0 || eiw == 8)
|
||||
return 0;
|
||||
|
||||
granularity_to_eig(ig, &eig);
|
||||
if (eiw > 8)
|
||||
high_pos = eiw + eig - 1;
|
||||
else
|
||||
high_pos = eiw + eig + 7;
|
||||
low_pos = eig + 8;
|
||||
interleave_mask = GENMASK(high_pos, low_pos);
|
||||
if (interleave_mask & ~cxlhdm->interleave_mask)
|
||||
return -ENXIO;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cxl_port_setup_targets(struct cxl_port *port,
|
||||
struct cxl_region *cxlr,
|
||||
struct cxl_endpoint_decoder *cxled)
|
||||
@ -1360,6 +1424,15 @@ static int cxl_port_setup_targets(struct cxl_port *port,
|
||||
return -ENXIO;
|
||||
}
|
||||
} else {
|
||||
rc = check_interleave_cap(cxld, iw, ig);
|
||||
if (rc) {
|
||||
dev_dbg(&cxlr->dev,
|
||||
"%s:%s iw: %d ig: %d is not supported\n",
|
||||
dev_name(port->uport_dev),
|
||||
dev_name(&port->dev), iw, ig);
|
||||
return rc;
|
||||
}
|
||||
|
||||
cxld->interleave_ways = iw;
|
||||
cxld->interleave_granularity = ig;
|
||||
cxld->hpa_range = (struct range) {
|
||||
@ -1796,6 +1869,15 @@ static int cxl_region_attach(struct cxl_region *cxlr,
|
||||
struct cxl_dport *dport;
|
||||
int rc = -ENXIO;
|
||||
|
||||
rc = check_interleave_cap(&cxled->cxld, p->interleave_ways,
|
||||
p->interleave_granularity);
|
||||
if (rc) {
|
||||
dev_dbg(&cxlr->dev, "%s iw: %d ig: %d is not supported\n",
|
||||
dev_name(&cxled->cxld.dev), p->interleave_ways,
|
||||
p->interleave_granularity);
|
||||
return rc;
|
||||
}
|
||||
|
||||
if (cxled->mode != cxlr->mode) {
|
||||
dev_dbg(&cxlr->dev, "%s region mode: %d mismatch: %d\n",
|
||||
dev_name(&cxled->cxld.dev), cxlr->mode, cxled->mode);
|
||||
@ -2688,22 +2770,33 @@ static int __cxl_dpa_to_region(struct device *dev, void *arg)
|
||||
{
|
||||
struct cxl_dpa_to_region_context *ctx = arg;
|
||||
struct cxl_endpoint_decoder *cxled;
|
||||
struct cxl_region *cxlr;
|
||||
u64 dpa = ctx->dpa;
|
||||
|
||||
if (!is_endpoint_decoder(dev))
|
||||
return 0;
|
||||
|
||||
cxled = to_cxl_endpoint_decoder(dev);
|
||||
if (!cxled->dpa_res || !resource_size(cxled->dpa_res))
|
||||
if (!cxled || !cxled->dpa_res || !resource_size(cxled->dpa_res))
|
||||
return 0;
|
||||
|
||||
if (dpa > cxled->dpa_res->end || dpa < cxled->dpa_res->start)
|
||||
return 0;
|
||||
|
||||
dev_dbg(dev, "dpa:0x%llx mapped in region:%s\n", dpa,
|
||||
dev_name(&cxled->cxld.region->dev));
|
||||
/*
|
||||
* Stop the region search (return 1) when an endpoint mapping is
|
||||
* found. The region may not be fully constructed so offering
|
||||
* the cxlr in the context structure is not guaranteed.
|
||||
*/
|
||||
cxlr = cxled->cxld.region;
|
||||
if (cxlr)
|
||||
dev_dbg(dev, "dpa:0x%llx mapped in region:%s\n", dpa,
|
||||
dev_name(&cxlr->dev));
|
||||
else
|
||||
dev_dbg(dev, "dpa:0x%llx mapped in endpoint:%s\n", dpa,
|
||||
dev_name(dev));
|
||||
|
||||
ctx->cxlr = cxled->cxld.region;
|
||||
ctx->cxlr = cxlr;
|
||||
|
||||
return 1;
|
||||
}
|
||||
@ -2847,7 +2940,7 @@ static int cxl_pmem_region_alloc(struct cxl_region *cxlr)
|
||||
* bridge for one device is the same for all.
|
||||
*/
|
||||
if (i == 0) {
|
||||
cxl_nvb = cxl_find_nvdimm_bridge(cxlmd);
|
||||
cxl_nvb = cxl_find_nvdimm_bridge(cxlmd->endpoint);
|
||||
if (!cxl_nvb)
|
||||
return -ENODEV;
|
||||
cxlr->cxl_nvb = cxl_nvb;
|
||||
|
@ -47,6 +47,8 @@ extern const struct nvdimm_security_ops *cxl_security_ops;
|
||||
#define CXL_HDM_DECODER_TARGET_COUNT_MASK GENMASK(7, 4)
|
||||
#define CXL_HDM_DECODER_INTERLEAVE_11_8 BIT(8)
|
||||
#define CXL_HDM_DECODER_INTERLEAVE_14_12 BIT(9)
|
||||
#define CXL_HDM_DECODER_INTERLEAVE_3_6_12_WAY BIT(11)
|
||||
#define CXL_HDM_DECODER_INTERLEAVE_16_WAY BIT(12)
|
||||
#define CXL_HDM_DECODER_CTRL_OFFSET 0x4
|
||||
#define CXL_HDM_DECODER_ENABLE BIT(1)
|
||||
#define CXL_HDM_DECODER0_BASE_LOW_OFFSET(i) (0x20 * (i) + 0x10)
|
||||
@ -855,8 +857,8 @@ struct cxl_nvdimm_bridge *devm_cxl_add_nvdimm_bridge(struct device *host,
|
||||
struct cxl_nvdimm *to_cxl_nvdimm(struct device *dev);
|
||||
bool is_cxl_nvdimm(struct device *dev);
|
||||
bool is_cxl_nvdimm_bridge(struct device *dev);
|
||||
int devm_cxl_add_nvdimm(struct cxl_memdev *cxlmd);
|
||||
struct cxl_nvdimm_bridge *cxl_find_nvdimm_bridge(struct cxl_memdev *cxlmd);
|
||||
int devm_cxl_add_nvdimm(struct cxl_port *parent_port, struct cxl_memdev *cxlmd);
|
||||
struct cxl_nvdimm_bridge *cxl_find_nvdimm_bridge(struct cxl_port *port);
|
||||
|
||||
#ifdef CONFIG_CXL_REGION
|
||||
bool is_cxl_pmem_region(struct device *dev);
|
||||
|
@ -395,9 +395,9 @@ enum cxl_devtype {
|
||||
|
||||
/**
|
||||
* struct cxl_dpa_perf - DPA performance property entry
|
||||
* @dpa_range - range for DPA address
|
||||
* @coord - QoS performance data (i.e. latency, bandwidth)
|
||||
* @qos_class - QoS Class cookies
|
||||
* @dpa_range: range for DPA address
|
||||
* @coord: QoS performance data (i.e. latency, bandwidth)
|
||||
* @qos_class: QoS Class cookies
|
||||
*/
|
||||
struct cxl_dpa_perf {
|
||||
struct range dpa_range;
|
||||
@ -464,13 +464,14 @@ struct cxl_dev_state {
|
||||
* @active_persistent_bytes: sum of hard + soft persistent
|
||||
* @next_volatile_bytes: volatile capacity change pending device reset
|
||||
* @next_persistent_bytes: persistent capacity change pending device reset
|
||||
* @ram_perf: performance data entry matched to RAM partition
|
||||
* @pmem_perf: performance data entry matched to PMEM partition
|
||||
* @event: event log driver state
|
||||
* @poison: poison driver state info
|
||||
* @security: security driver state info
|
||||
* @fw: firmware upload / activation state
|
||||
* @mbox_wait: RCU wait for mbox send completely
|
||||
* @mbox_send: @dev specific transport for transmitting mailbox commands
|
||||
* @ram_perf: performance data entry matched to RAM partition
|
||||
* @pmem_perf: performance data entry matched to PMEM partition
|
||||
*
|
||||
* See CXL 3.0 8.2.9.8.2 Capacity Configuration and Label Storage for
|
||||
* details on capacity parameters.
|
||||
@ -851,11 +852,21 @@ static inline void cxl_mem_active_dec(void)
|
||||
|
||||
int cxl_mem_sanitize(struct cxl_memdev *cxlmd, u16 cmd);
|
||||
|
||||
/**
|
||||
* struct cxl_hdm - HDM Decoder registers and cached / decoded capabilities
|
||||
* @regs: mapped registers, see devm_cxl_setup_hdm()
|
||||
* @decoder_count: number of decoders for this port
|
||||
* @target_count: for switch decoders, max downstream port targets
|
||||
* @interleave_mask: interleave granularity capability, see check_interleave_cap()
|
||||
* @iw_cap_mask: bitmask of supported interleave ways, see check_interleave_cap()
|
||||
* @port: mapped cxl_port, see devm_cxl_setup_hdm()
|
||||
*/
|
||||
struct cxl_hdm {
|
||||
struct cxl_component_regs regs;
|
||||
unsigned int decoder_count;
|
||||
unsigned int target_count;
|
||||
unsigned int interleave_mask;
|
||||
unsigned long iw_cap_mask;
|
||||
struct cxl_port *port;
|
||||
};
|
||||
|
||||
|
@ -152,6 +152,15 @@ static int cxl_mem_probe(struct device *dev)
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
if (resource_size(&cxlds->pmem_res) && IS_ENABLED(CONFIG_CXL_PMEM)) {
|
||||
rc = devm_cxl_add_nvdimm(parent_port, cxlmd);
|
||||
if (rc) {
|
||||
if (rc == -ENODEV)
|
||||
dev_info(dev, "PMEM disabled by platform\n");
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
|
||||
if (dport->rch)
|
||||
endpoint_parent = parent_port->uport_dev;
|
||||
else
|
||||
@ -174,14 +183,6 @@ unlock:
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
if (resource_size(&cxlds->pmem_res) && IS_ENABLED(CONFIG_CXL_PMEM)) {
|
||||
rc = devm_cxl_add_nvdimm(cxlmd);
|
||||
if (rc == -ENODEV)
|
||||
dev_info(dev, "PMEM disabled by platform\n");
|
||||
else
|
||||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
* The kernel may be operating out of CXL memory on this device,
|
||||
* there is no spec defined way to determine whether this device
|
||||
|
@ -225,6 +225,11 @@ static int davinci_gpio_probe(struct platform_device *pdev)
|
||||
else
|
||||
nirq = DIV_ROUND_UP(ngpio, 16);
|
||||
|
||||
if (nirq > MAX_INT_PER_BANK) {
|
||||
dev_err(dev, "Too many IRQs!\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
chips = devm_kzalloc(dev, sizeof(*chips), GFP_KERNEL);
|
||||
if (!chips)
|
||||
return -ENOMEM;
|
||||
|
@ -296,6 +296,8 @@ static int gnr_gpio_probe(struct platform_device *pdev)
|
||||
if (!priv)
|
||||
return -ENOMEM;
|
||||
|
||||
raw_spin_lock_init(&priv->lock);
|
||||
|
||||
regs = devm_platform_ioremap_resource(pdev, 0);
|
||||
if (IS_ERR(regs))
|
||||
return PTR_ERR(regs);
|
||||
|
@ -758,6 +758,8 @@ static void pca953x_irq_bus_sync_unlock(struct irq_data *d)
|
||||
int level;
|
||||
|
||||
if (chip->driver_data & PCA_PCAL) {
|
||||
guard(mutex)(&chip->i2c_lock);
|
||||
|
||||
/* Enable latch on interrupt-enabled inputs */
|
||||
pca953x_write_regs(chip, PCAL953X_IN_LATCH, chip->irq_mask);
|
||||
|
||||
|
@ -89,6 +89,10 @@ struct linehandle_state {
|
||||
GPIOHANDLE_REQUEST_OPEN_DRAIN | \
|
||||
GPIOHANDLE_REQUEST_OPEN_SOURCE)
|
||||
|
||||
#define GPIOHANDLE_REQUEST_DIRECTION_FLAGS \
|
||||
(GPIOHANDLE_REQUEST_INPUT | \
|
||||
GPIOHANDLE_REQUEST_OUTPUT)
|
||||
|
||||
static int linehandle_validate_flags(u32 flags)
|
||||
{
|
||||
/* Return an error if an unknown flag is set */
|
||||
@ -169,21 +173,21 @@ static long linehandle_set_config(struct linehandle_state *lh,
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Lines must be reconfigured explicitly as input or output. */
|
||||
if (!(lflags & GPIOHANDLE_REQUEST_DIRECTION_FLAGS))
|
||||
return -EINVAL;
|
||||
|
||||
for (i = 0; i < lh->num_descs; i++) {
|
||||
desc = lh->descs[i];
|
||||
linehandle_flags_to_desc_flags(gcnf.flags, &desc->flags);
|
||||
linehandle_flags_to_desc_flags(lflags, &desc->flags);
|
||||
|
||||
/*
|
||||
* Lines have to be requested explicitly for input
|
||||
* or output, else the line will be treated "as is".
|
||||
*/
|
||||
if (lflags & GPIOHANDLE_REQUEST_OUTPUT) {
|
||||
int val = !!gcnf.default_values[i];
|
||||
|
||||
ret = gpiod_direction_output(desc, val);
|
||||
if (ret)
|
||||
return ret;
|
||||
} else if (lflags & GPIOHANDLE_REQUEST_INPUT) {
|
||||
} else {
|
||||
ret = gpiod_direction_input(desc);
|
||||
if (ret)
|
||||
return ret;
|
||||
@ -1530,12 +1534,14 @@ static long linereq_set_config(struct linereq *lr, void __user *ip)
|
||||
line = &lr->lines[i];
|
||||
desc = lr->lines[i].desc;
|
||||
flags = gpio_v2_line_config_flags(&lc, i);
|
||||
/*
|
||||
* Lines not explicitly reconfigured as input or output
|
||||
* are left unchanged.
|
||||
*/
|
||||
if (!(flags & GPIO_V2_LINE_DIRECTION_FLAGS))
|
||||
continue;
|
||||
gpio_v2_line_config_flags_to_desc_flags(flags, &desc->flags);
|
||||
edflags = flags & GPIO_V2_LINE_EDGE_DETECTOR_FLAGS;
|
||||
/*
|
||||
* Lines have to be requested explicitly for input
|
||||
* or output, else the line will be treated "as is".
|
||||
*/
|
||||
if (flags & GPIO_V2_LINE_FLAG_OUTPUT) {
|
||||
int val = gpio_v2_line_config_output_value(&lc, i);
|
||||
|
||||
@ -1543,7 +1549,7 @@ static long linereq_set_config(struct linereq *lr, void __user *ip)
|
||||
ret = gpiod_direction_output(desc, val);
|
||||
if (ret)
|
||||
return ret;
|
||||
} else if (flags & GPIO_V2_LINE_FLAG_INPUT) {
|
||||
} else {
|
||||
ret = gpiod_direction_input(desc);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
@ -400,7 +400,7 @@ amdgpu_atomfirmware_get_vram_info(struct amdgpu_device *adev,
|
||||
mem_channel_number = vram_info->v30.channel_num;
|
||||
mem_channel_width = vram_info->v30.channel_width;
|
||||
if (vram_width)
|
||||
*vram_width = mem_channel_number * (1 << mem_channel_width);
|
||||
*vram_width = mem_channel_number * 16;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
|
@ -5220,11 +5220,14 @@ int amdgpu_device_mode1_reset(struct amdgpu_device *adev)
|
||||
|
||||
dev_info(adev->dev, "GPU mode1 reset\n");
|
||||
|
||||
/* Cache the state before bus master disable. The saved config space
|
||||
* values are used in other cases like restore after mode-2 reset.
|
||||
*/
|
||||
amdgpu_device_cache_pci_state(adev->pdev);
|
||||
|
||||
/* disable BM */
|
||||
pci_clear_master(adev->pdev);
|
||||
|
||||
amdgpu_device_cache_pci_state(adev->pdev);
|
||||
|
||||
if (amdgpu_dpm_is_mode1_reset_supported(adev)) {
|
||||
dev_info(adev->dev, "GPU smu mode1 reset\n");
|
||||
ret = amdgpu_dpm_mode1_reset(adev);
|
||||
|
@ -640,6 +640,20 @@ static const char *psp_gfx_cmd_name(enum psp_gfx_cmd_id cmd_id)
|
||||
}
|
||||
}
|
||||
|
||||
static bool psp_err_warn(struct psp_context *psp)
|
||||
{
|
||||
struct psp_gfx_cmd_resp *cmd = psp->cmd_buf_mem;
|
||||
|
||||
/* This response indicates reg list is already loaded */
|
||||
if (amdgpu_ip_version(psp->adev, MP0_HWIP, 0) == IP_VERSION(13, 0, 2) &&
|
||||
cmd->cmd_id == GFX_CMD_ID_LOAD_IP_FW &&
|
||||
cmd->cmd.cmd_load_ip_fw.fw_type == GFX_FW_TYPE_REG_LIST &&
|
||||
cmd->resp.status == TEE_ERROR_CANCEL)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static int
|
||||
psp_cmd_submit_buf(struct psp_context *psp,
|
||||
struct amdgpu_firmware_info *ucode,
|
||||
@ -699,10 +713,13 @@ psp_cmd_submit_buf(struct psp_context *psp,
|
||||
dev_warn(psp->adev->dev,
|
||||
"failed to load ucode %s(0x%X) ",
|
||||
amdgpu_ucode_name(ucode->ucode_id), ucode->ucode_id);
|
||||
dev_warn(psp->adev->dev,
|
||||
"psp gfx command %s(0x%X) failed and response status is (0x%X)\n",
|
||||
psp_gfx_cmd_name(psp->cmd_buf_mem->cmd_id), psp->cmd_buf_mem->cmd_id,
|
||||
psp->cmd_buf_mem->resp.status);
|
||||
if (psp_err_warn(psp))
|
||||
dev_warn(
|
||||
psp->adev->dev,
|
||||
"psp gfx command %s(0x%X) failed and response status is (0x%X)\n",
|
||||
psp_gfx_cmd_name(psp->cmd_buf_mem->cmd_id),
|
||||
psp->cmd_buf_mem->cmd_id,
|
||||
psp->cmd_buf_mem->resp.status);
|
||||
/* If any firmware (including CAP) load fails under SRIOV, it should
|
||||
* return failure to stop the VF from initializing.
|
||||
* Also return failure in case of timeout
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_edid.h>
|
||||
#include <drm/drm_simple_kms_helper.h>
|
||||
#include <drm/drm_gem_framebuffer_helper.h>
|
||||
#include <drm/drm_vblank.h>
|
||||
|
||||
#include "amdgpu.h"
|
||||
@ -314,7 +315,13 @@ static int amdgpu_vkms_prepare_fb(struct drm_plane *plane,
|
||||
return 0;
|
||||
}
|
||||
afb = to_amdgpu_framebuffer(new_state->fb);
|
||||
obj = new_state->fb->obj[0];
|
||||
|
||||
obj = drm_gem_fb_get_obj(new_state->fb, 0);
|
||||
if (!obj) {
|
||||
DRM_ERROR("Failed to get obj from framebuffer\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
rbo = gem_to_amdgpu_bo(obj);
|
||||
adev = amdgpu_ttm_adev(rbo->tbo.bdev);
|
||||
|
||||
@ -368,12 +375,19 @@ static void amdgpu_vkms_cleanup_fb(struct drm_plane *plane,
|
||||
struct drm_plane_state *old_state)
|
||||
{
|
||||
struct amdgpu_bo *rbo;
|
||||
struct drm_gem_object *obj;
|
||||
int r;
|
||||
|
||||
if (!old_state->fb)
|
||||
return;
|
||||
|
||||
rbo = gem_to_amdgpu_bo(old_state->fb->obj[0]);
|
||||
obj = drm_gem_fb_get_obj(old_state->fb, 0);
|
||||
if (!obj) {
|
||||
DRM_ERROR("Failed to get obj from framebuffer\n");
|
||||
return;
|
||||
}
|
||||
|
||||
rbo = gem_to_amdgpu_bo(obj);
|
||||
r = amdgpu_bo_reserve(rbo, false);
|
||||
if (unlikely(r)) {
|
||||
DRM_ERROR("failed to reserve rbo before unpin\n");
|
||||
|
@ -464,8 +464,9 @@ struct psp_gfx_rb_frame
|
||||
#define PSP_ERR_UNKNOWN_COMMAND 0x00000100
|
||||
|
||||
enum tee_error_code {
|
||||
TEE_SUCCESS = 0x00000000,
|
||||
TEE_ERROR_NOT_SUPPORTED = 0xFFFF000A,
|
||||
TEE_SUCCESS = 0x00000000,
|
||||
TEE_ERROR_CANCEL = 0xFFFF0002,
|
||||
TEE_ERROR_NOT_SUPPORTED = 0xFFFF000A,
|
||||
};
|
||||
|
||||
#endif /* _PSP_TEE_GFX_IF_H_ */
|
||||
|
@ -1590,9 +1590,17 @@ static bool retrieve_link_cap(struct dc_link *link)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (dp_is_lttpr_present(link))
|
||||
if (dp_is_lttpr_present(link)) {
|
||||
configure_lttpr_mode_transparent(link);
|
||||
|
||||
// Echo TOTAL_LTTPR_CNT back downstream
|
||||
core_link_write_dpcd(
|
||||
link,
|
||||
DP_TOTAL_LTTPR_CNT,
|
||||
&link->dpcd_caps.lttpr_caps.phy_repeater_cnt,
|
||||
sizeof(link->dpcd_caps.lttpr_caps.phy_repeater_cnt));
|
||||
}
|
||||
|
||||
/* Read DP tunneling information. */
|
||||
status = dpcd_get_tunneling_device_data(link);
|
||||
|
||||
|
@ -177,4 +177,9 @@ enum dpcd_psr_sink_states {
|
||||
#define DP_SINK_PR_PIXEL_DEVIATION_PER_LINE 0x379
|
||||
#define DP_SINK_PR_MAX_NUMBER_OF_DEVIATION_LINE 0x37A
|
||||
|
||||
/* Remove once drm_dp_helper.h is updated upstream */
|
||||
#ifndef DP_TOTAL_LTTPR_CNT
|
||||
#define DP_TOTAL_LTTPR_CNT 0xF000A /* 2.1 */
|
||||
#endif
|
||||
|
||||
#endif /* __DAL_DPCD_DEFS_H__ */
|
||||
|
@ -324,6 +324,18 @@ static int smu_dpm_set_umsch_mm_enable(struct smu_context *smu,
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int smu_set_mall_enable(struct smu_context *smu)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
if (!smu->ppt_funcs->set_mall_enable)
|
||||
return 0;
|
||||
|
||||
ret = smu->ppt_funcs->set_mall_enable(smu);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* smu_dpm_set_power_gate - power gate/ungate the specific IP block
|
||||
*
|
||||
@ -1791,6 +1803,7 @@ static int smu_hw_init(void *handle)
|
||||
smu_dpm_set_jpeg_enable(smu, true);
|
||||
smu_dpm_set_vpe_enable(smu, true);
|
||||
smu_dpm_set_umsch_mm_enable(smu, true);
|
||||
smu_set_mall_enable(smu);
|
||||
smu_set_gfx_cgpg(smu, true);
|
||||
}
|
||||
|
||||
|
@ -1394,6 +1394,11 @@ struct pptable_funcs {
|
||||
*/
|
||||
int (*dpm_set_umsch_mm_enable)(struct smu_context *smu, bool enable);
|
||||
|
||||
/**
|
||||
* @set_mall_enable: Init MALL power gating control.
|
||||
*/
|
||||
int (*set_mall_enable)(struct smu_context *smu);
|
||||
|
||||
/**
|
||||
* @notify_rlc_state: Notify RLC power state to SMU.
|
||||
*/
|
||||
|
@ -106,8 +106,8 @@
|
||||
#define PPSMC_MSG_DisableLSdma 0x35 ///< Disable LSDMA
|
||||
#define PPSMC_MSG_SetSoftMaxVpe 0x36 ///<
|
||||
#define PPSMC_MSG_SetSoftMinVpe 0x37 ///<
|
||||
#define PPSMC_MSG_AllocMALLCache 0x38 ///< Allocating MALL Cache
|
||||
#define PPSMC_MSG_ReleaseMALLCache 0x39 ///< Releasing MALL Cache
|
||||
#define PPSMC_MSG_MALLPowerController 0x38 ///< Set MALL control
|
||||
#define PPSMC_MSG_MALLPowerState 0x39 ///< Enter/Exit MALL PG
|
||||
#define PPSMC_Message_Count 0x3A ///< Total number of PPSMC messages
|
||||
/** @}*/
|
||||
|
||||
|
@ -272,7 +272,9 @@
|
||||
__SMU_DUMMY_MAP(SetSoftMinVpe), \
|
||||
__SMU_DUMMY_MAP(GetMetricsVersion), \
|
||||
__SMU_DUMMY_MAP(EnableUCLKShadow), \
|
||||
__SMU_DUMMY_MAP(RmaDueToBadPageThreshold),
|
||||
__SMU_DUMMY_MAP(RmaDueToBadPageThreshold), \
|
||||
__SMU_DUMMY_MAP(MALLPowerController), \
|
||||
__SMU_DUMMY_MAP(MALLPowerState),
|
||||
|
||||
#undef __SMU_DUMMY_MAP
|
||||
#define __SMU_DUMMY_MAP(type) SMU_MSG_##type
|
||||
|
@ -52,6 +52,19 @@
|
||||
#define mmMP1_SMN_C2PMSG_90 0x029a
|
||||
#define mmMP1_SMN_C2PMSG_90_BASE_IDX 0
|
||||
|
||||
/* MALLPowerController message arguments (Defines for the Cache mode control) */
|
||||
#define SMU_MALL_PMFW_CONTROL 0
|
||||
#define SMU_MALL_DRIVER_CONTROL 1
|
||||
|
||||
/*
|
||||
* MALLPowerState message arguments
|
||||
* (Defines for the Allocate/Release Cache mode if in driver mode)
|
||||
*/
|
||||
#define SMU_MALL_EXIT_PG 0
|
||||
#define SMU_MALL_ENTER_PG 1
|
||||
|
||||
#define SMU_MALL_PG_CONFIG_DEFAULT SMU_MALL_PG_CONFIG_DRIVER_CONTROL_ALWAYS_ON
|
||||
|
||||
#define FEATURE_MASK(feature) (1ULL << feature)
|
||||
#define SMC_DPM_FEATURE ( \
|
||||
FEATURE_MASK(FEATURE_CCLK_DPM_BIT) | \
|
||||
@ -66,6 +79,12 @@
|
||||
FEATURE_MASK(FEATURE_GFX_DPM_BIT) | \
|
||||
FEATURE_MASK(FEATURE_VPE_DPM_BIT))
|
||||
|
||||
enum smu_mall_pg_config {
|
||||
SMU_MALL_PG_CONFIG_PMFW_CONTROL = 0,
|
||||
SMU_MALL_PG_CONFIG_DRIVER_CONTROL_ALWAYS_ON = 1,
|
||||
SMU_MALL_PG_CONFIG_DRIVER_CONTROL_ALWAYS_OFF = 2,
|
||||
};
|
||||
|
||||
static struct cmn2asic_msg_mapping smu_v14_0_0_message_map[SMU_MSG_MAX_COUNT] = {
|
||||
MSG_MAP(TestMessage, PPSMC_MSG_TestMessage, 1),
|
||||
MSG_MAP(GetSmuVersion, PPSMC_MSG_GetPmfwVersion, 1),
|
||||
@ -113,6 +132,8 @@ static struct cmn2asic_msg_mapping smu_v14_0_0_message_map[SMU_MSG_MAX_COUNT] =
|
||||
MSG_MAP(PowerDownUmsch, PPSMC_MSG_PowerDownUmsch, 1),
|
||||
MSG_MAP(SetSoftMaxVpe, PPSMC_MSG_SetSoftMaxVpe, 1),
|
||||
MSG_MAP(SetSoftMinVpe, PPSMC_MSG_SetSoftMinVpe, 1),
|
||||
MSG_MAP(MALLPowerController, PPSMC_MSG_MALLPowerController, 1),
|
||||
MSG_MAP(MALLPowerState, PPSMC_MSG_MALLPowerState, 1),
|
||||
};
|
||||
|
||||
static struct cmn2asic_mapping smu_v14_0_0_feature_mask_map[SMU_FEATURE_COUNT] = {
|
||||
@ -1423,6 +1444,57 @@ static int smu_v14_0_common_get_dpm_table(struct smu_context *smu, struct dpm_cl
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int smu_v14_0_1_init_mall_power_gating(struct smu_context *smu, enum smu_mall_pg_config pg_config)
|
||||
{
|
||||
struct amdgpu_device *adev = smu->adev;
|
||||
int ret = 0;
|
||||
|
||||
if (pg_config == SMU_MALL_PG_CONFIG_PMFW_CONTROL) {
|
||||
ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_MALLPowerController,
|
||||
SMU_MALL_PMFW_CONTROL, NULL);
|
||||
if (ret) {
|
||||
dev_err(adev->dev, "Init MALL PMFW CONTROL Failure\n");
|
||||
return ret;
|
||||
}
|
||||
} else {
|
||||
ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_MALLPowerController,
|
||||
SMU_MALL_DRIVER_CONTROL, NULL);
|
||||
if (ret) {
|
||||
dev_err(adev->dev, "Init MALL Driver CONTROL Failure\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (pg_config == SMU_MALL_PG_CONFIG_DRIVER_CONTROL_ALWAYS_ON) {
|
||||
ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_MALLPowerState,
|
||||
SMU_MALL_EXIT_PG, NULL);
|
||||
if (ret) {
|
||||
dev_err(adev->dev, "EXIT MALL PG Failure\n");
|
||||
return ret;
|
||||
}
|
||||
} else if (pg_config == SMU_MALL_PG_CONFIG_DRIVER_CONTROL_ALWAYS_OFF) {
|
||||
ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_MALLPowerState,
|
||||
SMU_MALL_ENTER_PG, NULL);
|
||||
if (ret) {
|
||||
dev_err(adev->dev, "Enter MALL PG Failure\n");
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int smu_v14_0_common_set_mall_enable(struct smu_context *smu)
|
||||
{
|
||||
enum smu_mall_pg_config pg_config = SMU_MALL_PG_CONFIG_DEFAULT;
|
||||
int ret = 0;
|
||||
|
||||
if (amdgpu_ip_version(smu->adev, MP1_HWIP, 0) == IP_VERSION(14, 0, 1))
|
||||
ret = smu_v14_0_1_init_mall_power_gating(smu, pg_config);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static const struct pptable_funcs smu_v14_0_0_ppt_funcs = {
|
||||
.check_fw_status = smu_v14_0_check_fw_status,
|
||||
.check_fw_version = smu_v14_0_check_fw_version,
|
||||
@ -1454,6 +1526,7 @@ static const struct pptable_funcs smu_v14_0_0_ppt_funcs = {
|
||||
.dpm_set_vpe_enable = smu_v14_0_0_set_vpe_enable,
|
||||
.dpm_set_umsch_mm_enable = smu_v14_0_0_set_umsch_mm_enable,
|
||||
.get_dpm_clock_table = smu_v14_0_common_get_dpm_table,
|
||||
.set_mall_enable = smu_v14_0_common_set_mall_enable,
|
||||
};
|
||||
|
||||
static void smu_v14_0_0_set_smu_mailbox_registers(struct smu_context *smu)
|
||||
|
@ -524,6 +524,9 @@ struct fb_info *drm_fb_helper_alloc_info(struct drm_fb_helper *fb_helper)
|
||||
if (!info)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
if (!drm_leak_fbdev_smem)
|
||||
info->flags |= FBINFO_HIDE_SMEM_START;
|
||||
|
||||
ret = fb_alloc_cmap(&info->cmap, 256, 0);
|
||||
if (ret)
|
||||
goto err_release;
|
||||
@ -1860,9 +1863,6 @@ __drm_fb_helper_initial_config_and_unlock(struct drm_fb_helper *fb_helper)
|
||||
info = fb_helper->info;
|
||||
info->var.pixclock = 0;
|
||||
|
||||
if (!drm_leak_fbdev_smem)
|
||||
info->flags |= FBINFO_HIDE_SMEM_START;
|
||||
|
||||
/* Need to drop locks to avoid recursive deadlock in
|
||||
* register_framebuffer. This is ok because the only thing left to do is
|
||||
* register the fbdev emulation instance in kernel_fb_helper_list. */
|
||||
|
@ -130,7 +130,10 @@ static int drm_fbdev_dma_helper_fb_probe(struct drm_fb_helper *fb_helper,
|
||||
info->flags |= FBINFO_READS_FAST; /* signal caching */
|
||||
info->screen_size = sizes->surface_height * fb->pitches[0];
|
||||
info->screen_buffer = map.vaddr;
|
||||
info->fix.smem_start = page_to_phys(virt_to_page(info->screen_buffer));
|
||||
if (!(info->flags & FBINFO_HIDE_SMEM_START)) {
|
||||
if (!drm_WARN_ON(dev, is_vmalloc_addr(info->screen_buffer)))
|
||||
info->fix.smem_start = page_to_phys(virt_to_page(info->screen_buffer));
|
||||
}
|
||||
info->fix.smem_len = info->screen_size;
|
||||
|
||||
return 0;
|
||||
|
@ -469,14 +469,12 @@ void drm_file_update_pid(struct drm_file *filp)
|
||||
|
||||
dev = filp->minor->dev;
|
||||
mutex_lock(&dev->filelist_mutex);
|
||||
get_pid(pid);
|
||||
old = rcu_replace_pointer(filp->pid, pid, 1);
|
||||
mutex_unlock(&dev->filelist_mutex);
|
||||
|
||||
if (pid != old) {
|
||||
get_pid(pid);
|
||||
synchronize_rcu();
|
||||
put_pid(old);
|
||||
}
|
||||
synchronize_rcu();
|
||||
put_pid(old);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -298,6 +298,7 @@ void i915_vma_revoke_fence(struct i915_vma *vma)
|
||||
return;
|
||||
|
||||
GEM_BUG_ON(fence->vma != vma);
|
||||
i915_active_wait(&fence->active);
|
||||
GEM_BUG_ON(!i915_active_is_idle(&fence->active));
|
||||
GEM_BUG_ON(atomic_read(&fence->pin_count));
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user