mirror of
https://github.com/nxp-imx/linux-imx.git
synced 2025-07-10 19:35:21 +02:00
This is the 6.6.36 stable release
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmZ9UcMACgkQONu9yGCS aT4wtw//d08jymmJRWFySKz7BZeXhkCaElyGfSh43297UEMKuRZBShh4QqT9WvcX MvFQJ8Kzyg6xL+VV/49YVve4YbEZ9SLQalQJ//6wUtKxCbBQ5xmydOwTikBbifdf U4edeT4ZU/e8TVvrABgz/Cu5vjhWbOCbEEARthXntG4X9msI3tifhVM80t4wTiLn OvnYVq2x93/f9nbw50T7VYtrKnsEdVo4GNF/76DyFDXy8upwBWSvtfrbvAvI/Gx9 /m7eQqhUx13ms3Rfb4fd+inYDjfYOADnQEh0feb5VvghXoZmfu+Y8VcyLPOcKpyy fWDeB40s4Pj8dhSdKbLLjknVsyyJ0qGdRz3R1/rlJRMGMqXkqa42AlPfSR/dpJbW jwPpZZ8RvVvxQx+hmPG1TIoflhblJK0nZjdfTq+0Eqe7Iupl4Ni7nihTvOUEdg9m VD/HLmHkHFTBc7pSeNfjlNvmw4EJ51309g0s/sd7oGoHIt7FQXkHMPb56w0z6fuR CTmGKMbXwDbPnCTsH3FnPXLd/RVjgbjtn81iWIPawQ57sJoKP96dz80KpcD9Woz1 6b+rvxWI6cQfD4L/Tu+4sv5Hu5aIRjFXPKD7OHLPFaz06bQVzISLwswjrxWTYfST wxARzK8fD0jquYXl98oFmvapmGFJfkyfCxUvBa7zWkrOKbUdHDg= =1haK -----END PGP SIGNATURE----- Merge 6.6.36 into android15-6.6-lts Changes in 6.6.36 fs/writeback: bail out if there is no more inodes for IO and queued once padata: Disable BH when taking works lock on MT path crypto: hisilicon/sec - Fix memory leak for sec resource release crypto: hisilicon/qm - Add the err memory release process to qm uninit io_uring/sqpoll: work around a potential audit memory leak rcutorture: Fix rcu_torture_one_read() pipe_count overflow comment rcutorture: Make stall-tasks directly exit when rcutorture tests end rcutorture: Fix invalid context warning when enable srcu barrier testing block/ioctl: prefer different overflow check ssb: Fix potential NULL pointer dereference in ssb_device_uevent() selftests/bpf: Prevent client connect before server bind in test_tc_tunnel.sh selftests/bpf: Fix flaky test btf_map_in_map/lookup_update batman-adv: bypass empty buckets in batadv_purge_orig_ref() wifi: ath9k: work around memset overflow warning af_packet: avoid a false positive warning in packet_setsockopt() ACPI: x86: Add PNP_UART1_SKIP quirk for Lenovo Blade2 tablets drop_monitor: replace spin_lock by raw_spin_lock scsi: qedi: Fix crash while reading debugfs attribute net: sfp: add quirk for ATS SFP-GE-T 1000Base-TX module net/sched: fix false lockdep warning on qdisc root lock kselftest: arm64: Add a null pointer check net: dsa: realtek: keep default LED state in rtl8366rb netpoll: Fix race condition in netpoll_owner_active wifi: mt76: mt7921s: fix potential hung tasks during chip recovery HID: Add quirk for Logitech Casa touchpad HID: asus: fix more n-key report descriptors if n-key quirked ACPI: video: Add backlight=native quirk for Lenovo Slim 7 16ARH7 Bluetooth: ath3k: Fix multiple issues reported by checkpatch.pl drm/amd/display: Exit idle optimizations before HDCP execution platform/x86: toshiba_acpi: Add quirk for buttons on Z830 ASoC: Intel: sof_sdw: add JD2 quirk for HP Omen 14 ASoC: Intel: sof_sdw: add quirk for Dell SKU 0C0F drm/lima: add mask irq callback to gp and pp drm/lima: mask irqs in timeout path before hard reset ALSA: hda/realtek: Add quirks for Lenovo 13X powerpc/pseries: Enforce hcall result buffer validity and size media: intel/ipu6: Fix build with !ACPI media: mtk-vcodec: potential null pointer deference in SCP powerpc/io: Avoid clang null pointer arithmetic warnings platform/x86: p2sb: Don't init until unassigned resources have been assigned power: supply: cros_usbpd: provide ID table for avoiding fallback match iommu/arm-smmu-v3: Free MSIs in case of ENOMEM ext4: fix uninitialized ratelimit_state->lock access in __ext4_fill_super() kprobe/ftrace: bail out if ftrace was killed usb: gadget: uvc: configfs: ensure guid to be valid before set f2fs: remove clear SB_INLINECRYPT flag in default_options usb: misc: uss720: check for incompatible versions of the Belkin F5U002 Avoid hw_desc array overrun in dw-axi-dmac usb: dwc3: pci: Don't set "linux,phy_charger_detect" property on Lenovo Yoga Tab2 1380 usb: typec: ucsi_glink: drop special handling for CCI_BUSY udf: udftime: prevent overflow in udf_disk_stamp_to_time() PCI/PM: Avoid D3cold for HP Pavilion 17 PC/1972 PCIe Ports f2fs: don't set RO when shutting down f2fs MIPS: Octeon: Add PCIe link status check serial: imx: Introduce timeout when waiting on transmitter empty serial: exar: adding missing CTI and Exar PCI ids usb: gadget: function: Remove usage of the deprecated ida_simple_xx() API tty: add the option to have a tty reject a new ldisc vfio/pci: Collect hot-reset devices to local buffer cpufreq: amd-pstate: fix memory leak on CPU EPP exit ACPI: EC: Install address space handler at the namespace root PCI: Do not wait for disconnected devices when resuming ALSA: hda: cs35l41: Possible null pointer dereference in cs35l41_hda_unbind() ALSA: seq: ump: Fix missing System Reset message handling MIPS: Routerboard 532: Fix vendor retry check code mips: bmips: BCM6358: make sure CBR is correctly set tracing: Build event generation tests only as modules ALSA: hda/realtek: Remove Framework Laptop 16 from quirks ALSA/hda: intel-dsp-config: Document AVS as dsp_driver option ice: avoid IRQ collision to fix init failure on ACPI S3 resume btrfs: zoned: allocate dummy checksums for zoned NODATASUM writes net: mvpp2: use slab_build_skb for oversized frames cipso: fix total option length computation ALSA: hda: cs35l56: Component should be unbound before deconstruction ALSA: hda: tas2781: Component should be unbound before deconstruction bpf: Avoid splat in pskb_pull_reason ALSA: hda/realtek: Enable headset mic on IdeaPad 330-17IKB 81DM netrom: Fix a memory leak in nr_heartbeat_expiry() ipv6: prevent possible NULL deref in fib6_nh_init() ipv6: prevent possible NULL dereference in rt6_probe() xfrm6: check ip6_dst_idev() return value in xfrm6_get_saddr() netns: Make get_net_ns() handle zero refcount net qca_spi: Make interrupt remembering atomic net: lan743x: disable WOL upon resume to restore full data path operation net: lan743x: Support WOL at both the PHY and MAC appropriately net: phy: mxl-gpy: Remove interrupt mask clearing from config_init net/sched: act_api: rely on rcu in tcf_idr_check_alloc net/sched: act_api: fix possible infinite loop in tcf_idr_check_alloc() tipc: force a dst refcount before doing decryption sched: act_ct: add netns into the key of tcf_ct_flow_table ptp: fix integer overflow in max_vclocks_store selftests: openvswitch: Use bash as interpreter net: stmmac: No need to calculate speed divider when offload is disabled virtio_net: checksum offloading handling fix virtio_net: fixing XDP for fully checksummed packets handling octeontx2-pf: Add error handling to VLAN unoffload handling octeontx2-pf: Fix linking objects into multiple modules netfilter: ipset: Fix suspicious rcu_dereference_protected() seg6: fix parameter passing when calling NF_HOOK() in End.DX4 and End.DX6 behaviors netfilter: move the sysctl nf_hooks_lwtunnel into the netfilter core ice: Fix VSI list rule with ICE_SW_LKUP_LAST type bnxt_en: Restore PTP tx_avail count in case of skb_pad() error net: usb: rtl8150 fix unintiatilzed variables in rtl8150_get_link_ksettings RDMA/bnxt_re: Fix the max msix vectors macro spi: cs42l43: Correct SPI root clock speed RDMA/rxe: Fix responder length checking for UD request packets regulator: core: Fix modpost error "regulator_get_regmap" undefined dmaengine: idxd: Fix possible Use-After-Free in irq_process_work_list dmaengine: ioatdma: Fix leaking on version mismatch dmaengine: ioatdma: Fix error path in ioat3_dma_probe() dmaengine: ioatdma: Fix kmemleak in ioat_pci_probe() dmaengine: fsl-edma: avoid linking both modules dmaengine: ioatdma: Fix missing kmem_cache_destroy() regulator: bd71815: fix ramp values thermal/drivers/mediatek/lvts_thermal: Return error in case of invalid efuse data arm64: dts: imx8mp: Fix TC9595 reset GPIO on DH i.MX8M Plus DHCOM SoM arm64: dts: imx8mp: Fix TC9595 input clock on DH i.MX8M Plus DHCOM SoM arm64: dts: freescale: imx8mp-venice-gw73xx-2x: fix BT shutdown GPIO arm64: dts: imx93-11x11-evk: Remove the 'no-sdio' property arm64: dts: freescale: imx8mm-verdin: enable hysteresis on slow input pin ACPICA: Revert "ACPICA: avoid Info: mapping multiple BARs. Your kernel is fine." spi: spi-imx: imx51: revert burst length calculation back to bits_per_word io_uring/rsrc: fix incorrect assignment of iter->nr_segs in io_import_fixed firmware: psci: Fix return value from psci_system_suspend() RDMA/mlx5: Fix unwind flow as part of mlx5_ib_stage_init_init RDMA/mlx5: Add check for srq max_sge attribute RDMA/mana_ib: Ignore optional access flags for MRs ACPI: EC: Evaluate orphan _REG under EC device arm64: defconfig: enable the vf610 gpio driver ext4: avoid overflow when setting values via sysfs ext4: fix slab-out-of-bounds in ext4_mb_find_good_group_avg_frag_lists() locking/atomic: scripts: fix ${atomic}_sub_and_test() kerneldoc net: stmmac: Assign configured channel value to EXTTS event net: usb: ax88179_178a: improve reset check net: do not leave a dangling sk pointer, when socket creation fails btrfs: retry block group reclaim without infinite loop scsi: ufs: core: Free memory allocated for model before reinit cifs: fix typo in module parameter enable_gcm_256 LoongArch: Fix watchpoint setting error LoongArch: Trigger user-space watchpoints correctly LoongArch: Fix multiple hardware watchpoint issues KVM: Fix a data race on last_boosted_vcpu in kvm_vcpu_on_spin() KVM: arm64: Disassociate vcpus from redistributor region on teardown KVM: x86: Always sync PIR to IRR prior to scanning I/O APIC routes RDMA/rxe: Fix data copy for IB_SEND_INLINE RDMA/mlx5: Remove extra unlock on error path RDMA/mlx5: Follow rb_key.ats when creating new mkeys ovl: fix encoding fid for lower only root ALSA: hda/realtek: fix mute/micmute LEDs don't work for ProBook 445/465 G11. ALSA: hda/realtek: Limit mic boost on N14AP7 ALSA: hda/realtek: Add quirk for Lenovo Yoga Pro 7 14AHP9 drm/i915/mso: using joiner is not possible with eDP MSO drm/radeon: fix UBSAN warning in kv_dpm.c drm/amdgpu: fix UBSAN warning in kv_dpm.c dt-bindings: dma: fsl-edma: fix dma-channels constraints ocfs2: fix NULL pointer dereference in ocfs2_journal_dirty() ocfs2: fix NULL pointer dereference in ocfs2_abort_trigger() gcov: add support for GCC 14 kcov: don't lose track of remote references during softirqs efi/x86: Free EFI memory map only when installing a new one. serial: 8250_dw: Revert "Move definitions to the shared header" mm: mmap: allow for the maximum number of bits for randomizing mmap_base by default tcp: clear tp->retrans_stamp in tcp_rcv_fastopen_synack() mm/page_table_check: fix crash on ZONE_DEVICE i2c: ocores: set IACK bit after core is enabled dt-bindings: i2c: atmel,at91sam: correct path to i2c-controller schema dt-bindings: i2c: google,cros-ec-i2c-tunnel: correct path to i2c-controller schema spi: stm32: qspi: Fix dual flash mode sanity test in stm32_qspi_setup() arm64: dts: imx8qm-mek: fix gpio number for reg_usdhc2_vmmc spi: stm32: qspi: Clamp stm32_qspi_get_mode() output to CCR_BUSWIDTH_4 perf: script: add raw|disasm arguments to --insn-trace option perf script: Show also errors for --insn-trace option wifi: rtl8xxxu: enable MFP support with security flag of RX descriptor ocfs2: convert to new timestamp accessors ocfs2: update inode fsync transaction id in ocfs2_unlink and ocfs2_link nbd: Improve the documentation of the locking assumptions nbd: Fix signal handling tracing: Add MODULE_DESCRIPTION() to preemptirq_delay_test x86/cpu/vfm: Add new macros to work with (vendor/family/model) values x86/cpu: Fix x86_match_cpu() to match just X86_VENDOR_INTEL riscv: Don't use PGD entries for the linear mapping riscv: force PAGE_SIZE linear mapping if debug_pagealloc is enabled vgacon: rework screen_info #ifdef checks efi/loongarch: Directly position the loaded image file LoongArch: Fix entry point in kernel image header drm/amd/display: revert Exit idle optimizations before HDCP execution ASoC: Intel: sof-sdw: really remove FOUR_SPEAKER quirk net/sched: unregister lockdep keys in qdisc_create/qdisc_alloc error path kprobe/ftrace: fix build error due to bad function definition hid: asus: asus_report_fixup: fix potential read out of bounds Revert "mm: mmap: allow for the maximum number of bits for randomizing mmap_base by default" Linux 6.6.36 Change-Id: I978c4658504c1ed1fc41b3c4036a131218d43e7c Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
commit
47deb51546
|
@ -47,8 +47,8 @@ properties:
|
|||
- 3
|
||||
|
||||
dma-channels:
|
||||
minItems: 1
|
||||
maxItems: 64
|
||||
minimum: 1
|
||||
maximum: 64
|
||||
|
||||
clocks:
|
||||
minItems: 1
|
||||
|
|
|
@ -75,7 +75,7 @@ required:
|
|||
- clocks
|
||||
|
||||
allOf:
|
||||
- $ref: i2c-controller.yaml
|
||||
- $ref: /schemas/i2c/i2c-controller.yaml#
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
|
|
|
@ -21,7 +21,7 @@ description: |
|
|||
google,cros-ec-spi or google,cros-ec-i2c.
|
||||
|
||||
allOf:
|
||||
- $ref: i2c-controller.yaml#
|
||||
- $ref: /schemas/i2c/i2c-controller.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 6
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 35
|
||||
SUBLEVEL = 36
|
||||
EXTRAVERSION =
|
||||
NAME = Hurr durr I'ma ninja sloth
|
||||
|
||||
|
|
|
@ -131,6 +131,7 @@ static void determine_cpu_caches (unsigned int);
|
|||
|
||||
static char __initdata command_line[COMMAND_LINE_SIZE];
|
||||
|
||||
#ifdef CONFIG_VGA_CONSOLE
|
||||
/*
|
||||
* The format of "screen_info" is strange, and due to early
|
||||
* i386-setup code. This is just enough to make the console
|
||||
|
@ -147,6 +148,7 @@ struct screen_info screen_info = {
|
|||
};
|
||||
|
||||
EXPORT_SYMBOL(screen_info);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The direct map I/O window, if any. This should be the same
|
||||
|
|
|
@ -57,11 +57,13 @@ sio_init_irq(void)
|
|||
static inline void __init
|
||||
alphabook1_init_arch(void)
|
||||
{
|
||||
#ifdef CONFIG_VGA_CONSOLE
|
||||
/* The AlphaBook1 has LCD video fixed at 800x600,
|
||||
37 rows and 100 cols. */
|
||||
screen_info.orig_y = 37;
|
||||
screen_info.orig_video_cols = 100;
|
||||
screen_info.orig_video_lines = 37;
|
||||
#endif
|
||||
|
||||
lca_init_arch();
|
||||
}
|
||||
|
|
|
@ -929,7 +929,7 @@
|
|||
/* Verdin GPIO_9_DSI (pulled-up as active-low) */
|
||||
pinctrl_gpio_9_dsi: gpio9dsigrp {
|
||||
fsl,pins =
|
||||
<MX8MM_IOMUXC_NAND_RE_B_GPIO3_IO15 0x146>; /* SODIMM 17 */
|
||||
<MX8MM_IOMUXC_NAND_RE_B_GPIO3_IO15 0x1c6>; /* SODIMM 17 */
|
||||
};
|
||||
|
||||
/* Verdin GPIO_10_DSI (pulled-up as active-low) */
|
||||
|
|
|
@ -251,8 +251,8 @@
|
|||
<&clk IMX8MP_CLK_CLKOUT2>,
|
||||
<&clk IMX8MP_AUDIO_PLL2_OUT>;
|
||||
assigned-clock-parents = <&clk IMX8MP_AUDIO_PLL2_OUT>;
|
||||
assigned-clock-rates = <13000000>, <13000000>, <156000000>;
|
||||
reset-gpios = <&gpio3 21 GPIO_ACTIVE_HIGH>;
|
||||
assigned-clock-rates = <13000000>, <13000000>, <208000000>;
|
||||
reset-gpios = <&gpio4 1 GPIO_ACTIVE_HIGH>;
|
||||
status = "disabled";
|
||||
|
||||
ports {
|
||||
|
|
|
@ -161,7 +161,7 @@
|
|||
|
||||
bluetooth {
|
||||
compatible = "brcm,bcm4330-bt";
|
||||
shutdown-gpios = <&gpio4 16 GPIO_ACTIVE_HIGH>;
|
||||
shutdown-gpios = <&gpio1 3 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
regulator-name = "SD1_SPWR";
|
||||
regulator-min-microvolt = <3000000>;
|
||||
regulator-max-microvolt = <3000000>;
|
||||
gpio = <&lsio_gpio4 19 GPIO_ACTIVE_HIGH>;
|
||||
gpio = <&lsio_gpio4 7 GPIO_ACTIVE_HIGH>;
|
||||
enable-active-high;
|
||||
};
|
||||
};
|
||||
|
|
|
@ -168,7 +168,6 @@
|
|||
vmmc-supply = <®_usdhc2_vmmc>;
|
||||
bus-width = <4>;
|
||||
status = "okay";
|
||||
no-sdio;
|
||||
no-mmc;
|
||||
};
|
||||
|
||||
|
|
|
@ -623,6 +623,7 @@ CONFIG_GPIO_RCAR=y
|
|||
CONFIG_GPIO_UNIPHIER=y
|
||||
CONFIG_GPIO_VISCONTI=y
|
||||
CONFIG_GPIO_WCD934X=m
|
||||
CONFIG_GPIO_VF610=y
|
||||
CONFIG_GPIO_XGENE=y
|
||||
CONFIG_GPIO_XGENE_SB=y
|
||||
CONFIG_GPIO_MAX732X=y
|
||||
|
|
|
@ -355,7 +355,7 @@ static void kvm_vgic_dist_destroy(struct kvm *kvm)
|
|||
|
||||
if (dist->vgic_model == KVM_DEV_TYPE_ARM_VGIC_V3) {
|
||||
list_for_each_entry_safe(rdreg, next, &dist->rd_regions, list)
|
||||
vgic_v3_free_redist_region(rdreg);
|
||||
vgic_v3_free_redist_region(kvm, rdreg);
|
||||
INIT_LIST_HEAD(&dist->rd_regions);
|
||||
} else {
|
||||
dist->vgic_cpu_base = VGIC_ADDR_UNDEF;
|
||||
|
|
|
@ -942,8 +942,19 @@ free:
|
|||
return ret;
|
||||
}
|
||||
|
||||
void vgic_v3_free_redist_region(struct vgic_redist_region *rdreg)
|
||||
void vgic_v3_free_redist_region(struct kvm *kvm, struct vgic_redist_region *rdreg)
|
||||
{
|
||||
struct kvm_vcpu *vcpu;
|
||||
unsigned long c;
|
||||
|
||||
lockdep_assert_held(&kvm->arch.config_lock);
|
||||
|
||||
/* Garbage collect the region */
|
||||
kvm_for_each_vcpu(c, vcpu, kvm) {
|
||||
if (vcpu->arch.vgic_cpu.rdreg == rdreg)
|
||||
vcpu->arch.vgic_cpu.rdreg = NULL;
|
||||
}
|
||||
|
||||
list_del(&rdreg->list);
|
||||
kfree(rdreg);
|
||||
}
|
||||
|
@ -968,7 +979,7 @@ int vgic_v3_set_redist_base(struct kvm *kvm, u32 index, u64 addr, u32 count)
|
|||
|
||||
mutex_lock(&kvm->arch.config_lock);
|
||||
rdreg = vgic_v3_rdist_region_from_index(kvm, index);
|
||||
vgic_v3_free_redist_region(rdreg);
|
||||
vgic_v3_free_redist_region(kvm, rdreg);
|
||||
mutex_unlock(&kvm->arch.config_lock);
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -308,7 +308,7 @@ vgic_v3_rd_region_size(struct kvm *kvm, struct vgic_redist_region *rdreg)
|
|||
|
||||
struct vgic_redist_region *vgic_v3_rdist_region_from_index(struct kvm *kvm,
|
||||
u32 index);
|
||||
void vgic_v3_free_redist_region(struct vgic_redist_region *rdreg);
|
||||
void vgic_v3_free_redist_region(struct kvm *kvm, struct vgic_redist_region *rdreg);
|
||||
|
||||
bool vgic_v3_rdist_overlap(struct kvm *kvm, gpa_t base, size_t size);
|
||||
|
||||
|
|
|
@ -12,6 +12,9 @@ void kprobe_ftrace_handler(unsigned long ip, unsigned long parent_ip,
|
|||
struct kprobe_ctlblk *kcb;
|
||||
struct pt_regs *regs;
|
||||
|
||||
if (unlikely(kprobe_ftrace_disabled))
|
||||
return;
|
||||
|
||||
bit = ftrace_test_recursion_trylock(ip, parent_ip);
|
||||
if (bit < 0)
|
||||
return;
|
||||
|
|
|
@ -86,9 +86,13 @@ EXPORT_SYMBOL(local_per_cpu_offset);
|
|||
#endif
|
||||
unsigned long ia64_cycles_per_usec;
|
||||
struct ia64_boot_param *ia64_boot_param;
|
||||
#if defined(CONFIG_VGA_CONSOLE) || defined(CONFIG_EFI)
|
||||
struct screen_info screen_info;
|
||||
#endif
|
||||
#ifdef CONFIG_VGA_CONSOLE
|
||||
unsigned long vga_console_iobase;
|
||||
unsigned long vga_console_membase;
|
||||
#endif
|
||||
|
||||
static struct resource data_resource = {
|
||||
.name = "Kernel data",
|
||||
|
@ -497,6 +501,7 @@ early_console_setup (char *cmdline)
|
|||
static void __init
|
||||
screen_info_setup(void)
|
||||
{
|
||||
#ifdef CONFIG_VGA_CONSOLE
|
||||
unsigned int orig_x, orig_y, num_cols, num_rows, font_height;
|
||||
|
||||
memset(&screen_info, 0, sizeof(screen_info));
|
||||
|
@ -525,6 +530,7 @@ screen_info_setup(void)
|
|||
screen_info.orig_video_mode = 3; /* XXX fake */
|
||||
screen_info.orig_video_isVGA = 1; /* XXX fake */
|
||||
screen_info.orig_video_ega_bx = 3; /* XXX fake */
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void
|
||||
|
|
|
@ -32,6 +32,4 @@ static inline unsigned long efi_get_kimg_min_align(void)
|
|||
|
||||
#define EFI_KIMG_PREFERRED_ADDRESS PHYSADDR(VMLINUX_LOAD_ADDRESS)
|
||||
|
||||
unsigned long kernel_entry_address(unsigned long kernel_addr);
|
||||
|
||||
#endif /* _ASM_LOONGARCH_EFI_H */
|
||||
|
|
|
@ -75,6 +75,8 @@ do { \
|
|||
#define CSR_MWPC_NUM 0x3f
|
||||
|
||||
#define CTRL_PLV_ENABLE 0x1e
|
||||
#define CTRL_PLV0_ENABLE 0x02
|
||||
#define CTRL_PLV3_ENABLE 0x10
|
||||
|
||||
#define MWPnCFG3_LoadEn 8
|
||||
#define MWPnCFG3_StoreEn 9
|
||||
|
@ -101,7 +103,7 @@ struct perf_event;
|
|||
struct perf_event_attr;
|
||||
|
||||
extern int arch_bp_generic_fields(struct arch_hw_breakpoint_ctrl ctrl,
|
||||
int *gen_len, int *gen_type, int *offset);
|
||||
int *gen_len, int *gen_type);
|
||||
extern int arch_check_bp_in_kernelspace(struct arch_hw_breakpoint *hw);
|
||||
extern int hw_breakpoint_arch_parse(struct perf_event *bp,
|
||||
const struct perf_event_attr *attr,
|
||||
|
|
|
@ -287,6 +287,9 @@ void kprobe_ftrace_handler(unsigned long ip, unsigned long parent_ip,
|
|||
struct kprobe *p;
|
||||
struct kprobe_ctlblk *kcb;
|
||||
|
||||
if (unlikely(kprobe_ftrace_disabled))
|
||||
return;
|
||||
|
||||
bit = ftrace_test_recursion_trylock(ip, parent_ip);
|
||||
if (bit < 0)
|
||||
return;
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
_head:
|
||||
.word MZ_MAGIC /* "MZ", MS-DOS header */
|
||||
.org 0x8
|
||||
.dword kernel_entry /* Kernel entry point */
|
||||
.dword _kernel_entry /* Kernel entry point (physical address) */
|
||||
.dword _kernel_asize /* Kernel image effective size */
|
||||
.quad PHYS_LINK_KADDR /* Kernel image load offset from start of RAM */
|
||||
.org 0x38 /* 0x20 ~ 0x37 reserved */
|
||||
|
@ -34,7 +34,6 @@ pe_header:
|
|||
|
||||
SYM_DATA(kernel_asize, .long _kernel_asize);
|
||||
SYM_DATA(kernel_fsize, .long _kernel_fsize);
|
||||
SYM_DATA(kernel_offset, .long _kernel_offset);
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -174,11 +174,21 @@ void flush_ptrace_hw_breakpoint(struct task_struct *tsk)
|
|||
static int hw_breakpoint_control(struct perf_event *bp,
|
||||
enum hw_breakpoint_ops ops)
|
||||
{
|
||||
u32 ctrl;
|
||||
u32 ctrl, privilege;
|
||||
int i, max_slots, enable;
|
||||
struct pt_regs *regs;
|
||||
struct perf_event **slots;
|
||||
struct arch_hw_breakpoint *info = counter_arch_bp(bp);
|
||||
|
||||
if (arch_check_bp_in_kernelspace(info))
|
||||
privilege = CTRL_PLV0_ENABLE;
|
||||
else
|
||||
privilege = CTRL_PLV3_ENABLE;
|
||||
|
||||
/* Whether bp belongs to a task. */
|
||||
if (bp->hw.target)
|
||||
regs = task_pt_regs(bp->hw.target);
|
||||
|
||||
if (info->ctrl.type == LOONGARCH_BREAKPOINT_EXECUTE) {
|
||||
/* Breakpoint */
|
||||
slots = this_cpu_ptr(bp_on_reg);
|
||||
|
@ -197,31 +207,38 @@ static int hw_breakpoint_control(struct perf_event *bp,
|
|||
switch (ops) {
|
||||
case HW_BREAKPOINT_INSTALL:
|
||||
/* Set the FWPnCFG/MWPnCFG 1~4 register. */
|
||||
write_wb_reg(CSR_CFG_ADDR, i, 0, info->address);
|
||||
write_wb_reg(CSR_CFG_ADDR, i, 1, info->address);
|
||||
write_wb_reg(CSR_CFG_MASK, i, 0, info->mask);
|
||||
write_wb_reg(CSR_CFG_MASK, i, 1, info->mask);
|
||||
write_wb_reg(CSR_CFG_ASID, i, 0, 0);
|
||||
write_wb_reg(CSR_CFG_ASID, i, 1, 0);
|
||||
if (info->ctrl.type == LOONGARCH_BREAKPOINT_EXECUTE) {
|
||||
write_wb_reg(CSR_CFG_CTRL, i, 0, CTRL_PLV_ENABLE);
|
||||
write_wb_reg(CSR_CFG_ADDR, i, 0, info->address);
|
||||
write_wb_reg(CSR_CFG_MASK, i, 0, info->mask);
|
||||
write_wb_reg(CSR_CFG_ASID, i, 0, 0);
|
||||
write_wb_reg(CSR_CFG_CTRL, i, 0, privilege);
|
||||
} else {
|
||||
write_wb_reg(CSR_CFG_ADDR, i, 1, info->address);
|
||||
write_wb_reg(CSR_CFG_MASK, i, 1, info->mask);
|
||||
write_wb_reg(CSR_CFG_ASID, i, 1, 0);
|
||||
ctrl = encode_ctrl_reg(info->ctrl);
|
||||
write_wb_reg(CSR_CFG_CTRL, i, 1, ctrl | CTRL_PLV_ENABLE);
|
||||
write_wb_reg(CSR_CFG_CTRL, i, 1, ctrl | privilege);
|
||||
}
|
||||
enable = csr_read64(LOONGARCH_CSR_CRMD);
|
||||
csr_write64(CSR_CRMD_WE | enable, LOONGARCH_CSR_CRMD);
|
||||
if (bp->hw.target)
|
||||
regs->csr_prmd |= CSR_PRMD_PWE;
|
||||
break;
|
||||
case HW_BREAKPOINT_UNINSTALL:
|
||||
/* Reset the FWPnCFG/MWPnCFG 1~4 register. */
|
||||
write_wb_reg(CSR_CFG_ADDR, i, 0, 0);
|
||||
write_wb_reg(CSR_CFG_ADDR, i, 1, 0);
|
||||
write_wb_reg(CSR_CFG_MASK, i, 0, 0);
|
||||
write_wb_reg(CSR_CFG_MASK, i, 1, 0);
|
||||
write_wb_reg(CSR_CFG_CTRL, i, 0, 0);
|
||||
write_wb_reg(CSR_CFG_CTRL, i, 1, 0);
|
||||
write_wb_reg(CSR_CFG_ASID, i, 0, 0);
|
||||
write_wb_reg(CSR_CFG_ASID, i, 1, 0);
|
||||
if (info->ctrl.type == LOONGARCH_BREAKPOINT_EXECUTE) {
|
||||
write_wb_reg(CSR_CFG_ADDR, i, 0, 0);
|
||||
write_wb_reg(CSR_CFG_MASK, i, 0, 0);
|
||||
write_wb_reg(CSR_CFG_CTRL, i, 0, 0);
|
||||
write_wb_reg(CSR_CFG_ASID, i, 0, 0);
|
||||
} else {
|
||||
write_wb_reg(CSR_CFG_ADDR, i, 1, 0);
|
||||
write_wb_reg(CSR_CFG_MASK, i, 1, 0);
|
||||
write_wb_reg(CSR_CFG_CTRL, i, 1, 0);
|
||||
write_wb_reg(CSR_CFG_ASID, i, 1, 0);
|
||||
}
|
||||
if (bp->hw.target)
|
||||
regs->csr_prmd &= ~CSR_PRMD_PWE;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -283,7 +300,7 @@ int arch_check_bp_in_kernelspace(struct arch_hw_breakpoint *hw)
|
|||
* to generic breakpoint descriptions.
|
||||
*/
|
||||
int arch_bp_generic_fields(struct arch_hw_breakpoint_ctrl ctrl,
|
||||
int *gen_len, int *gen_type, int *offset)
|
||||
int *gen_len, int *gen_type)
|
||||
{
|
||||
/* Type */
|
||||
switch (ctrl.type) {
|
||||
|
@ -303,11 +320,6 @@ int arch_bp_generic_fields(struct arch_hw_breakpoint_ctrl ctrl,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!ctrl.len)
|
||||
return -EINVAL;
|
||||
|
||||
*offset = __ffs(ctrl.len);
|
||||
|
||||
/* Len */
|
||||
switch (ctrl.len) {
|
||||
case LOONGARCH_BREAKPOINT_LEN_1:
|
||||
|
@ -386,21 +398,17 @@ int hw_breakpoint_arch_parse(struct perf_event *bp,
|
|||
struct arch_hw_breakpoint *hw)
|
||||
{
|
||||
int ret;
|
||||
u64 alignment_mask, offset;
|
||||
u64 alignment_mask;
|
||||
|
||||
/* Build the arch_hw_breakpoint. */
|
||||
ret = arch_build_bp_info(bp, attr, hw);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (hw->ctrl.type != LOONGARCH_BREAKPOINT_EXECUTE)
|
||||
alignment_mask = 0x7;
|
||||
else
|
||||
if (hw->ctrl.type == LOONGARCH_BREAKPOINT_EXECUTE) {
|
||||
alignment_mask = 0x3;
|
||||
offset = hw->address & alignment_mask;
|
||||
|
||||
hw->address &= ~alignment_mask;
|
||||
hw->ctrl.len <<= offset;
|
||||
hw->address &= ~alignment_mask;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -471,12 +479,15 @@ void breakpoint_handler(struct pt_regs *regs)
|
|||
slots = this_cpu_ptr(bp_on_reg);
|
||||
|
||||
for (i = 0; i < boot_cpu_data.watch_ireg_count; ++i) {
|
||||
bp = slots[i];
|
||||
if (bp == NULL)
|
||||
continue;
|
||||
perf_bp_event(bp, regs);
|
||||
if ((csr_read32(LOONGARCH_CSR_FWPS) & (0x1 << i))) {
|
||||
bp = slots[i];
|
||||
if (bp == NULL)
|
||||
continue;
|
||||
perf_bp_event(bp, regs);
|
||||
csr_write32(0x1 << i, LOONGARCH_CSR_FWPS);
|
||||
update_bp_registers(regs, 0, 0);
|
||||
}
|
||||
}
|
||||
update_bp_registers(regs, 0, 0);
|
||||
}
|
||||
NOKPROBE_SYMBOL(breakpoint_handler);
|
||||
|
||||
|
@ -488,12 +499,15 @@ void watchpoint_handler(struct pt_regs *regs)
|
|||
slots = this_cpu_ptr(wp_on_reg);
|
||||
|
||||
for (i = 0; i < boot_cpu_data.watch_dreg_count; ++i) {
|
||||
wp = slots[i];
|
||||
if (wp == NULL)
|
||||
continue;
|
||||
perf_bp_event(wp, regs);
|
||||
if ((csr_read32(LOONGARCH_CSR_MWPS) & (0x1 << i))) {
|
||||
wp = slots[i];
|
||||
if (wp == NULL)
|
||||
continue;
|
||||
perf_bp_event(wp, regs);
|
||||
csr_write32(0x1 << i, LOONGARCH_CSR_MWPS);
|
||||
update_bp_registers(regs, 0, 1);
|
||||
}
|
||||
}
|
||||
update_bp_registers(regs, 0, 1);
|
||||
}
|
||||
NOKPROBE_SYMBOL(watchpoint_handler);
|
||||
|
||||
|
|
|
@ -11,7 +11,6 @@ __efistub_strcmp = strcmp;
|
|||
__efistub_kernel_entry = kernel_entry;
|
||||
__efistub_kernel_asize = kernel_asize;
|
||||
__efistub_kernel_fsize = kernel_fsize;
|
||||
__efistub_kernel_offset = kernel_offset;
|
||||
__efistub_screen_info = screen_info;
|
||||
|
||||
#endif
|
||||
|
|
|
@ -494,28 +494,14 @@ static int ptrace_hbp_fill_attr_ctrl(unsigned int note_type,
|
|||
struct arch_hw_breakpoint_ctrl ctrl,
|
||||
struct perf_event_attr *attr)
|
||||
{
|
||||
int err, len, type, offset;
|
||||
int err, len, type;
|
||||
|
||||
err = arch_bp_generic_fields(ctrl, &len, &type, &offset);
|
||||
err = arch_bp_generic_fields(ctrl, &len, &type);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
switch (note_type) {
|
||||
case NT_LOONGARCH_HW_BREAK:
|
||||
if ((type & HW_BREAKPOINT_X) != type)
|
||||
return -EINVAL;
|
||||
break;
|
||||
case NT_LOONGARCH_HW_WATCH:
|
||||
if ((type & HW_BREAKPOINT_RW) != type)
|
||||
return -EINVAL;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
attr->bp_len = len;
|
||||
attr->bp_type = type;
|
||||
attr->bp_addr += offset;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -609,10 +595,27 @@ static int ptrace_hbp_set_ctrl(unsigned int note_type,
|
|||
return PTR_ERR(bp);
|
||||
|
||||
attr = bp->attr;
|
||||
decode_ctrl_reg(uctrl, &ctrl);
|
||||
err = ptrace_hbp_fill_attr_ctrl(note_type, ctrl, &attr);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
switch (note_type) {
|
||||
case NT_LOONGARCH_HW_BREAK:
|
||||
ctrl.type = LOONGARCH_BREAKPOINT_EXECUTE;
|
||||
ctrl.len = LOONGARCH_BREAKPOINT_LEN_4;
|
||||
break;
|
||||
case NT_LOONGARCH_HW_WATCH:
|
||||
decode_ctrl_reg(uctrl, &ctrl);
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (uctrl & CTRL_PLV_ENABLE) {
|
||||
err = ptrace_hbp_fill_attr_ctrl(note_type, ctrl, &attr);
|
||||
if (err)
|
||||
return err;
|
||||
attr.disabled = 0;
|
||||
} else {
|
||||
attr.disabled = 1;
|
||||
}
|
||||
|
||||
return modify_user_hw_breakpoint(bp, &attr);
|
||||
}
|
||||
|
@ -643,6 +646,10 @@ static int ptrace_hbp_set_addr(unsigned int note_type,
|
|||
struct perf_event *bp;
|
||||
struct perf_event_attr attr;
|
||||
|
||||
/* Kernel-space address cannot be monitored by user-space */
|
||||
if ((unsigned long)addr >= XKPRANGE)
|
||||
return -EINVAL;
|
||||
|
||||
bp = ptrace_hbp_get_initialised_bp(note_type, tsk, idx);
|
||||
if (IS_ERR(bp))
|
||||
return PTR_ERR(bp);
|
||||
|
|
|
@ -57,7 +57,9 @@
|
|||
#define SMBIOS_CORE_PACKAGE_OFFSET 0x23
|
||||
#define LOONGSON_EFI_ENABLE (1 << 3)
|
||||
|
||||
#ifdef CONFIG_EFI
|
||||
struct screen_info screen_info __section(".data");
|
||||
#endif
|
||||
|
||||
unsigned long fw_arg0, fw_arg1, fw_arg2;
|
||||
DEFINE_PER_CPU(unsigned long, kernelsp);
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
#define PAGE_SIZE _PAGE_SIZE
|
||||
#define RO_EXCEPTION_TABLE_ALIGN 4
|
||||
#define PHYSADDR_MASK 0xffffffffffff /* 48-bit */
|
||||
|
||||
/*
|
||||
* Put .bss..swapper_pg_dir as the first thing in .bss. This will
|
||||
|
@ -139,11 +140,11 @@ SECTIONS
|
|||
|
||||
#ifdef CONFIG_EFI_STUB
|
||||
/* header symbols */
|
||||
_kernel_asize = _end - _text;
|
||||
_kernel_fsize = _edata - _text;
|
||||
_kernel_vsize = _end - __initdata_begin;
|
||||
_kernel_rsize = _edata - __initdata_begin;
|
||||
_kernel_offset = kernel_offset - _text;
|
||||
_kernel_entry = ABSOLUTE(kernel_entry & PHYSADDR_MASK);
|
||||
_kernel_asize = ABSOLUTE(_end - _text);
|
||||
_kernel_fsize = ABSOLUTE(_edata - _text);
|
||||
_kernel_vsize = ABSOLUTE(_end - __initdata_begin);
|
||||
_kernel_rsize = ABSOLUTE(_edata - __initdata_begin);
|
||||
#endif
|
||||
|
||||
.gptab.sdata : {
|
||||
|
|
|
@ -110,7 +110,8 @@ static void bcm6358_quirks(void)
|
|||
* RAC flush causes kernel panics on BCM6358 when booting from TP1
|
||||
* because the bootloader is not initializing it properly.
|
||||
*/
|
||||
bmips_rac_flush_disable = !!(read_c0_brcm_cmt_local() & (1 << 31));
|
||||
bmips_rac_flush_disable = !!(read_c0_brcm_cmt_local() & (1 << 31)) ||
|
||||
!!BMIPS_GET_CBR();
|
||||
}
|
||||
|
||||
static void bcm6368_quirks(void)
|
||||
|
|
|
@ -54,7 +54,7 @@ struct cpuinfo_mips cpu_data[NR_CPUS] __read_mostly;
|
|||
|
||||
EXPORT_SYMBOL(cpu_data);
|
||||
|
||||
#ifdef CONFIG_VT
|
||||
#ifdef CONFIG_VGA_CONSOLE
|
||||
struct screen_info screen_info;
|
||||
#endif
|
||||
|
||||
|
|
|
@ -112,8 +112,8 @@ retry:
|
|||
* gives them time to settle
|
||||
*/
|
||||
if (where == PCI_VENDOR_ID) {
|
||||
if (ret == 0xffffffff || ret == 0x00000000 ||
|
||||
ret == 0x0000ffff || ret == 0xffff0000) {
|
||||
if (*val == 0xffffffff || *val == 0x00000000 ||
|
||||
*val == 0x0000ffff || *val == 0xffff0000) {
|
||||
if (delay > 4)
|
||||
return 0;
|
||||
delay *= 2;
|
||||
|
|
6
arch/mips/pci/pcie-octeon.c
Normal file → Executable file
6
arch/mips/pci/pcie-octeon.c
Normal file → Executable file
|
@ -230,12 +230,18 @@ static inline uint64_t __cvmx_pcie_build_config_addr(int pcie_port, int bus,
|
|||
{
|
||||
union cvmx_pcie_address pcie_addr;
|
||||
union cvmx_pciercx_cfg006 pciercx_cfg006;
|
||||
union cvmx_pciercx_cfg032 pciercx_cfg032;
|
||||
|
||||
pciercx_cfg006.u32 =
|
||||
cvmx_pcie_cfgx_read(pcie_port, CVMX_PCIERCX_CFG006(pcie_port));
|
||||
if ((bus <= pciercx_cfg006.s.pbnum) && (dev != 0))
|
||||
return 0;
|
||||
|
||||
pciercx_cfg032.u32 =
|
||||
cvmx_pcie_cfgx_read(pcie_port, CVMX_PCIERCX_CFG032(pcie_port));
|
||||
if ((pciercx_cfg032.s.dlla == 0) || (pciercx_cfg032.s.lt == 1))
|
||||
return 0;
|
||||
|
||||
pcie_addr.u64 = 0;
|
||||
pcie_addr.config.upper = 2;
|
||||
pcie_addr.config.io = 1;
|
||||
|
|
|
@ -129,7 +129,7 @@ void __init plat_mem_setup(void)
|
|||
if (m41t81_probe())
|
||||
swarm_rtc_type = RTC_M41T81;
|
||||
|
||||
#ifdef CONFIG_VT
|
||||
#ifdef CONFIG_VGA_CONSOLE
|
||||
screen_info = (struct screen_info) {
|
||||
.orig_video_page = 52,
|
||||
.orig_video_mode = 3,
|
||||
|
|
|
@ -38,7 +38,7 @@ extern void sni_machine_power_off(void);
|
|||
|
||||
static void __init sni_display_setup(void)
|
||||
{
|
||||
#if defined(CONFIG_VT) && defined(CONFIG_VGA_CONSOLE) && defined(CONFIG_FW_ARC)
|
||||
#if defined(CONFIG_VGA_CONSOLE) && defined(CONFIG_FW_ARC)
|
||||
struct screen_info *si = &screen_info;
|
||||
DISPLAY_STATUS *di;
|
||||
|
||||
|
|
|
@ -206,6 +206,9 @@ void kprobe_ftrace_handler(unsigned long ip, unsigned long parent_ip,
|
|||
struct kprobe *p;
|
||||
int bit;
|
||||
|
||||
if (unlikely(kprobe_ftrace_disabled))
|
||||
return;
|
||||
|
||||
bit = ftrace_test_recursion_trylock(ip, parent_ip);
|
||||
if (bit < 0)
|
||||
return;
|
||||
|
|
|
@ -494,7 +494,7 @@ long plpar_hcall_norets_notrace(unsigned long opcode, ...);
|
|||
* Used for all but the craziest of phyp interfaces (see plpar_hcall9)
|
||||
*/
|
||||
#define PLPAR_HCALL_BUFSIZE 4
|
||||
long plpar_hcall(unsigned long opcode, unsigned long *retbuf, ...);
|
||||
long plpar_hcall(unsigned long opcode, unsigned long retbuf[static PLPAR_HCALL_BUFSIZE], ...);
|
||||
|
||||
/**
|
||||
* plpar_hcall_raw: - Make a hypervisor call without calculating hcall stats
|
||||
|
@ -508,7 +508,7 @@ long plpar_hcall(unsigned long opcode, unsigned long *retbuf, ...);
|
|||
* plpar_hcall, but plpar_hcall_raw works in real mode and does not
|
||||
* calculate hypervisor call statistics.
|
||||
*/
|
||||
long plpar_hcall_raw(unsigned long opcode, unsigned long *retbuf, ...);
|
||||
long plpar_hcall_raw(unsigned long opcode, unsigned long retbuf[static PLPAR_HCALL_BUFSIZE], ...);
|
||||
|
||||
/**
|
||||
* plpar_hcall9: - Make a pseries hypervisor call with up to 9 return arguments
|
||||
|
@ -519,8 +519,8 @@ long plpar_hcall_raw(unsigned long opcode, unsigned long *retbuf, ...);
|
|||
* PLPAR_HCALL9_BUFSIZE to size the return argument buffer.
|
||||
*/
|
||||
#define PLPAR_HCALL9_BUFSIZE 9
|
||||
long plpar_hcall9(unsigned long opcode, unsigned long *retbuf, ...);
|
||||
long plpar_hcall9_raw(unsigned long opcode, unsigned long *retbuf, ...);
|
||||
long plpar_hcall9(unsigned long opcode, unsigned long retbuf[static PLPAR_HCALL9_BUFSIZE], ...);
|
||||
long plpar_hcall9_raw(unsigned long opcode, unsigned long retbuf[static PLPAR_HCALL9_BUFSIZE], ...);
|
||||
|
||||
/* pseries hcall tracing */
|
||||
extern struct static_key hcall_tracepoint_key;
|
||||
|
|
|
@ -585,12 +585,12 @@ __do_out_asm(_rec_outl, "stwbrx")
|
|||
#define __do_inw(port) _rec_inw(port)
|
||||
#define __do_inl(port) _rec_inl(port)
|
||||
#else /* CONFIG_PPC32 */
|
||||
#define __do_outb(val, port) writeb(val,(PCI_IO_ADDR)_IO_BASE+port);
|
||||
#define __do_outw(val, port) writew(val,(PCI_IO_ADDR)_IO_BASE+port);
|
||||
#define __do_outl(val, port) writel(val,(PCI_IO_ADDR)_IO_BASE+port);
|
||||
#define __do_inb(port) readb((PCI_IO_ADDR)_IO_BASE + port);
|
||||
#define __do_inw(port) readw((PCI_IO_ADDR)_IO_BASE + port);
|
||||
#define __do_inl(port) readl((PCI_IO_ADDR)_IO_BASE + port);
|
||||
#define __do_outb(val, port) writeb(val,(PCI_IO_ADDR)(_IO_BASE+port));
|
||||
#define __do_outw(val, port) writew(val,(PCI_IO_ADDR)(_IO_BASE+port));
|
||||
#define __do_outl(val, port) writel(val,(PCI_IO_ADDR)(_IO_BASE+port));
|
||||
#define __do_inb(port) readb((PCI_IO_ADDR)(_IO_BASE + port));
|
||||
#define __do_inw(port) readw((PCI_IO_ADDR)(_IO_BASE + port));
|
||||
#define __do_inl(port) readl((PCI_IO_ADDR)(_IO_BASE + port));
|
||||
#endif /* !CONFIG_PPC32 */
|
||||
|
||||
#ifdef CONFIG_EEH
|
||||
|
@ -606,12 +606,12 @@ __do_out_asm(_rec_outl, "stwbrx")
|
|||
#define __do_writesw(a, b, n) _outsw(PCI_FIX_ADDR(a),(b),(n))
|
||||
#define __do_writesl(a, b, n) _outsl(PCI_FIX_ADDR(a),(b),(n))
|
||||
|
||||
#define __do_insb(p, b, n) readsb((PCI_IO_ADDR)_IO_BASE+(p), (b), (n))
|
||||
#define __do_insw(p, b, n) readsw((PCI_IO_ADDR)_IO_BASE+(p), (b), (n))
|
||||
#define __do_insl(p, b, n) readsl((PCI_IO_ADDR)_IO_BASE+(p), (b), (n))
|
||||
#define __do_outsb(p, b, n) writesb((PCI_IO_ADDR)_IO_BASE+(p),(b),(n))
|
||||
#define __do_outsw(p, b, n) writesw((PCI_IO_ADDR)_IO_BASE+(p),(b),(n))
|
||||
#define __do_outsl(p, b, n) writesl((PCI_IO_ADDR)_IO_BASE+(p),(b),(n))
|
||||
#define __do_insb(p, b, n) readsb((PCI_IO_ADDR)(_IO_BASE+(p)), (b), (n))
|
||||
#define __do_insw(p, b, n) readsw((PCI_IO_ADDR)(_IO_BASE+(p)), (b), (n))
|
||||
#define __do_insl(p, b, n) readsl((PCI_IO_ADDR)(_IO_BASE+(p)), (b), (n))
|
||||
#define __do_outsb(p, b, n) writesb((PCI_IO_ADDR)(_IO_BASE+(p)),(b),(n))
|
||||
#define __do_outsw(p, b, n) writesw((PCI_IO_ADDR)(_IO_BASE+(p)),(b),(n))
|
||||
#define __do_outsl(p, b, n) writesl((PCI_IO_ADDR)(_IO_BASE+(p)),(b),(n))
|
||||
|
||||
#define __do_memset_io(addr, c, n) \
|
||||
_memset_io(PCI_FIX_ADDR(addr), c, n)
|
||||
|
|
|
@ -21,6 +21,9 @@ void kprobe_ftrace_handler(unsigned long nip, unsigned long parent_nip,
|
|||
struct pt_regs *regs;
|
||||
int bit;
|
||||
|
||||
if (unlikely(kprobe_ftrace_disabled))
|
||||
return;
|
||||
|
||||
bit = ftrace_test_recursion_trylock(nip, parent_nip);
|
||||
if (bit < 0)
|
||||
return;
|
||||
|
|
|
@ -11,6 +11,9 @@ void kprobe_ftrace_handler(unsigned long ip, unsigned long parent_ip,
|
|||
struct kprobe_ctlblk *kcb;
|
||||
int bit;
|
||||
|
||||
if (unlikely(kprobe_ftrace_disabled))
|
||||
return;
|
||||
|
||||
bit = ftrace_test_recursion_trylock(ip, parent_ip);
|
||||
if (bit < 0)
|
||||
return;
|
||||
|
|
|
@ -40,15 +40,8 @@
|
|||
|
||||
#include "head.h"
|
||||
|
||||
#if defined(CONFIG_DUMMY_CONSOLE) || defined(CONFIG_EFI)
|
||||
struct screen_info screen_info __section(".data") = {
|
||||
.orig_video_lines = 30,
|
||||
.orig_video_cols = 80,
|
||||
.orig_video_mode = 0,
|
||||
.orig_video_ega_bx = 0,
|
||||
.orig_video_isVGA = 1,
|
||||
.orig_video_points = 8
|
||||
};
|
||||
#if defined(CONFIG_EFI)
|
||||
struct screen_info screen_info __section(".data");
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
|
|
@ -668,16 +668,19 @@ void __init create_pgd_mapping(pgd_t *pgdp,
|
|||
static uintptr_t __init best_map_size(phys_addr_t pa, uintptr_t va,
|
||||
phys_addr_t size)
|
||||
{
|
||||
if (!(pa & (PGDIR_SIZE - 1)) && !(va & (PGDIR_SIZE - 1)) && size >= PGDIR_SIZE)
|
||||
return PGDIR_SIZE;
|
||||
if (debug_pagealloc_enabled())
|
||||
return PAGE_SIZE;
|
||||
|
||||
if (!(pa & (P4D_SIZE - 1)) && !(va & (P4D_SIZE - 1)) && size >= P4D_SIZE)
|
||||
if (pgtable_l5_enabled &&
|
||||
!(pa & (P4D_SIZE - 1)) && !(va & (P4D_SIZE - 1)) && size >= P4D_SIZE)
|
||||
return P4D_SIZE;
|
||||
|
||||
if (!(pa & (PUD_SIZE - 1)) && !(va & (PUD_SIZE - 1)) && size >= PUD_SIZE)
|
||||
if (pgtable_l4_enabled &&
|
||||
!(pa & (PUD_SIZE - 1)) && !(va & (PUD_SIZE - 1)) && size >= PUD_SIZE)
|
||||
return PUD_SIZE;
|
||||
|
||||
if (!(pa & (PMD_SIZE - 1)) && !(va & (PMD_SIZE - 1)) && size >= PMD_SIZE)
|
||||
if (IS_ENABLED(CONFIG_64BIT) &&
|
||||
!(pa & (PMD_SIZE - 1)) && !(va & (PMD_SIZE - 1)) && size >= PMD_SIZE)
|
||||
return PMD_SIZE;
|
||||
|
||||
return PAGE_SIZE;
|
||||
|
|
|
@ -296,6 +296,9 @@ void kprobe_ftrace_handler(unsigned long ip, unsigned long parent_ip,
|
|||
struct kprobe *p;
|
||||
int bit;
|
||||
|
||||
if (unlikely(kprobe_ftrace_disabled))
|
||||
return;
|
||||
|
||||
bit = ftrace_test_recursion_trylock(ip, parent_ip);
|
||||
if (bit < 0)
|
||||
return;
|
||||
|
|
|
@ -2,6 +2,39 @@
|
|||
#ifndef _ASM_X86_CPU_DEVICE_ID
|
||||
#define _ASM_X86_CPU_DEVICE_ID
|
||||
|
||||
/*
|
||||
* Can't use <linux/bitfield.h> because it generates expressions that
|
||||
* cannot be used in structure initializers. Bitfield construction
|
||||
* here must match the union in struct cpuinfo_86:
|
||||
* union {
|
||||
* struct {
|
||||
* __u8 x86_model;
|
||||
* __u8 x86;
|
||||
* __u8 x86_vendor;
|
||||
* __u8 x86_reserved;
|
||||
* };
|
||||
* __u32 x86_vfm;
|
||||
* };
|
||||
*/
|
||||
#define VFM_MODEL_BIT 0
|
||||
#define VFM_FAMILY_BIT 8
|
||||
#define VFM_VENDOR_BIT 16
|
||||
#define VFM_RSVD_BIT 24
|
||||
|
||||
#define VFM_MODEL_MASK GENMASK(VFM_FAMILY_BIT - 1, VFM_MODEL_BIT)
|
||||
#define VFM_FAMILY_MASK GENMASK(VFM_VENDOR_BIT - 1, VFM_FAMILY_BIT)
|
||||
#define VFM_VENDOR_MASK GENMASK(VFM_RSVD_BIT - 1, VFM_VENDOR_BIT)
|
||||
|
||||
#define VFM_MODEL(vfm) (((vfm) & VFM_MODEL_MASK) >> VFM_MODEL_BIT)
|
||||
#define VFM_FAMILY(vfm) (((vfm) & VFM_FAMILY_MASK) >> VFM_FAMILY_BIT)
|
||||
#define VFM_VENDOR(vfm) (((vfm) & VFM_VENDOR_MASK) >> VFM_VENDOR_BIT)
|
||||
|
||||
#define VFM_MAKE(_vendor, _family, _model) ( \
|
||||
((_model) << VFM_MODEL_BIT) | \
|
||||
((_family) << VFM_FAMILY_BIT) | \
|
||||
((_vendor) << VFM_VENDOR_BIT) \
|
||||
)
|
||||
|
||||
/*
|
||||
* Declare drivers belonging to specific x86 CPUs
|
||||
* Similar in spirit to pci_device_id and related PCI functions
|
||||
|
@ -20,6 +53,9 @@
|
|||
#define X86_CENTAUR_FAM6_C7_D 0xd
|
||||
#define X86_CENTAUR_FAM6_NANO 0xf
|
||||
|
||||
/* x86_cpu_id::flags */
|
||||
#define X86_CPU_ID_FLAG_ENTRY_VALID BIT(0)
|
||||
|
||||
#define X86_STEPPINGS(mins, maxs) GENMASK(maxs, mins)
|
||||
/**
|
||||
* X86_MATCH_VENDOR_FAM_MODEL_STEPPINGS_FEATURE - Base macro for CPU matching
|
||||
|
@ -46,6 +82,18 @@
|
|||
.model = _model, \
|
||||
.steppings = _steppings, \
|
||||
.feature = _feature, \
|
||||
.flags = X86_CPU_ID_FLAG_ENTRY_VALID, \
|
||||
.driver_data = (unsigned long) _data \
|
||||
}
|
||||
|
||||
#define X86_MATCH_VENDORID_FAM_MODEL_STEPPINGS_FEATURE(_vendor, _family, _model, \
|
||||
_steppings, _feature, _data) { \
|
||||
.vendor = _vendor, \
|
||||
.family = _family, \
|
||||
.model = _model, \
|
||||
.steppings = _steppings, \
|
||||
.feature = _feature, \
|
||||
.flags = X86_CPU_ID_FLAG_ENTRY_VALID, \
|
||||
.driver_data = (unsigned long) _data \
|
||||
}
|
||||
|
||||
|
@ -164,6 +212,56 @@
|
|||
X86_MATCH_VENDOR_FAM_MODEL_STEPPINGS_FEATURE(INTEL, 6, INTEL_FAM6_##model, \
|
||||
steppings, X86_FEATURE_ANY, data)
|
||||
|
||||
/**
|
||||
* X86_MATCH_VFM - Match encoded vendor/family/model
|
||||
* @vfm: Encoded 8-bits each for vendor, family, model
|
||||
* @data: Driver specific data or NULL. The internal storage
|
||||
* format is unsigned long. The supplied value, pointer
|
||||
* etc. is cast to unsigned long internally.
|
||||
*
|
||||
* Stepping and feature are set to wildcards
|
||||
*/
|
||||
#define X86_MATCH_VFM(vfm, data) \
|
||||
X86_MATCH_VENDORID_FAM_MODEL_STEPPINGS_FEATURE( \
|
||||
VFM_VENDOR(vfm), \
|
||||
VFM_FAMILY(vfm), \
|
||||
VFM_MODEL(vfm), \
|
||||
X86_STEPPING_ANY, X86_FEATURE_ANY, data)
|
||||
|
||||
/**
|
||||
* X86_MATCH_VFM_STEPPINGS - Match encoded vendor/family/model/stepping
|
||||
* @vfm: Encoded 8-bits each for vendor, family, model
|
||||
* @steppings: Bitmask of steppings to match
|
||||
* @data: Driver specific data or NULL. The internal storage
|
||||
* format is unsigned long. The supplied value, pointer
|
||||
* etc. is cast to unsigned long internally.
|
||||
*
|
||||
* feature is set to wildcard
|
||||
*/
|
||||
#define X86_MATCH_VFM_STEPPINGS(vfm, steppings, data) \
|
||||
X86_MATCH_VENDORID_FAM_MODEL_STEPPINGS_FEATURE( \
|
||||
VFM_VENDOR(vfm), \
|
||||
VFM_FAMILY(vfm), \
|
||||
VFM_MODEL(vfm), \
|
||||
steppings, X86_FEATURE_ANY, data)
|
||||
|
||||
/**
|
||||
* X86_MATCH_VFM_FEATURE - Match encoded vendor/family/model/feature
|
||||
* @vfm: Encoded 8-bits each for vendor, family, model
|
||||
* @feature: A X86_FEATURE bit
|
||||
* @data: Driver specific data or NULL. The internal storage
|
||||
* format is unsigned long. The supplied value, pointer
|
||||
* etc. is cast to unsigned long internally.
|
||||
*
|
||||
* Steppings is set to wildcard
|
||||
*/
|
||||
#define X86_MATCH_VFM_FEATURE(vfm, feature, data) \
|
||||
X86_MATCH_VENDORID_FAM_MODEL_STEPPINGS_FEATURE( \
|
||||
VFM_VENDOR(vfm), \
|
||||
VFM_FAMILY(vfm), \
|
||||
VFM_MODEL(vfm), \
|
||||
X86_STEPPING_ANY, feature, data)
|
||||
|
||||
/*
|
||||
* Match specific microcode revisions.
|
||||
*
|
||||
|
|
|
@ -410,7 +410,6 @@ extern int __init efi_memmap_alloc(unsigned int num_entries,
|
|||
struct efi_memory_map_data *data);
|
||||
extern void __efi_memmap_free(u64 phys, unsigned long size,
|
||||
unsigned long flags);
|
||||
#define __efi_memmap_free __efi_memmap_free
|
||||
|
||||
extern int __init efi_memmap_install(struct efi_memory_map_data *data);
|
||||
extern int __init efi_memmap_split_count(efi_memory_desc_t *md,
|
||||
|
|
|
@ -39,9 +39,7 @@ const struct x86_cpu_id *x86_match_cpu(const struct x86_cpu_id *match)
|
|||
const struct x86_cpu_id *m;
|
||||
struct cpuinfo_x86 *c = &boot_cpu_data;
|
||||
|
||||
for (m = match;
|
||||
m->vendor | m->family | m->model | m->steppings | m->feature;
|
||||
m++) {
|
||||
for (m = match; m->flags & X86_CPU_ID_FLAG_ENTRY_VALID; m++) {
|
||||
if (m->vendor != X86_VENDOR_ANY && c->x86_vendor != m->vendor)
|
||||
continue;
|
||||
if (m->family != X86_FAMILY_ANY && c->x86 != m->family)
|
||||
|
|
|
@ -21,6 +21,9 @@ void kprobe_ftrace_handler(unsigned long ip, unsigned long parent_ip,
|
|||
struct kprobe_ctlblk *kcb;
|
||||
int bit;
|
||||
|
||||
if (unlikely(kprobe_ftrace_disabled))
|
||||
return;
|
||||
|
||||
bit = ftrace_test_recursion_trylock(ip, parent_ip);
|
||||
if (bit < 0)
|
||||
return;
|
||||
|
|
|
@ -10456,13 +10456,12 @@ static void vcpu_scan_ioapic(struct kvm_vcpu *vcpu)
|
|||
|
||||
bitmap_zero(vcpu->arch.ioapic_handled_vectors, 256);
|
||||
|
||||
static_call_cond(kvm_x86_sync_pir_to_irr)(vcpu);
|
||||
|
||||
if (irqchip_split(vcpu->kvm))
|
||||
kvm_scan_ioapic_routes(vcpu, vcpu->arch.ioapic_handled_vectors);
|
||||
else {
|
||||
static_call_cond(kvm_x86_sync_pir_to_irr)(vcpu);
|
||||
if (ioapic_in_kernel(vcpu->kvm))
|
||||
kvm_ioapic_scan_entry(vcpu, vcpu->arch.ioapic_handled_vectors);
|
||||
}
|
||||
else if (ioapic_in_kernel(vcpu->kvm))
|
||||
kvm_ioapic_scan_entry(vcpu, vcpu->arch.ioapic_handled_vectors);
|
||||
|
||||
if (is_guest_mode(vcpu))
|
||||
vcpu->arch.load_eoi_exitmap_pending = true;
|
||||
|
|
|
@ -92,12 +92,22 @@ int __init efi_memmap_alloc(unsigned int num_entries,
|
|||
*/
|
||||
int __init efi_memmap_install(struct efi_memory_map_data *data)
|
||||
{
|
||||
unsigned long size = efi.memmap.desc_size * efi.memmap.nr_map;
|
||||
unsigned long flags = efi.memmap.flags;
|
||||
u64 phys = efi.memmap.phys_map;
|
||||
int ret;
|
||||
|
||||
efi_memmap_unmap();
|
||||
|
||||
if (efi_enabled(EFI_PARAVIRT))
|
||||
return 0;
|
||||
|
||||
return __efi_memmap_init(data);
|
||||
ret = __efi_memmap_init(data);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
__efi_memmap_free(phys, size, flags);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -33,7 +33,7 @@ static int blkpg_do_ioctl(struct block_device *bdev,
|
|||
if (op == BLKPG_DEL_PARTITION)
|
||||
return bdev_del_partition(disk, p.pno);
|
||||
|
||||
if (p.start < 0 || p.length <= 0 || p.start + p.length < 0)
|
||||
if (p.start < 0 || p.length <= 0 || LLONG_MAX - p.length < p.start)
|
||||
return -EINVAL;
|
||||
/* Check that the partition is aligned to the block size */
|
||||
if (!IS_ALIGNED(p.start | p.length, bdev_logical_block_size(bdev)))
|
||||
|
|
|
@ -191,6 +191,10 @@ void
|
|||
acpi_ev_execute_reg_methods(struct acpi_namespace_node *node,
|
||||
acpi_adr_space_type space_id, u32 function);
|
||||
|
||||
void
|
||||
acpi_ev_execute_orphan_reg_method(struct acpi_namespace_node *node,
|
||||
acpi_adr_space_type space_id);
|
||||
|
||||
acpi_status
|
||||
acpi_ev_execute_reg_method(union acpi_operand_object *region_obj, u32 function);
|
||||
|
||||
|
|
|
@ -20,10 +20,6 @@ extern u8 acpi_gbl_default_address_spaces[];
|
|||
|
||||
/* Local prototypes */
|
||||
|
||||
static void
|
||||
acpi_ev_execute_orphan_reg_method(struct acpi_namespace_node *device_node,
|
||||
acpi_adr_space_type space_id);
|
||||
|
||||
static acpi_status
|
||||
acpi_ev_reg_run(acpi_handle obj_handle,
|
||||
u32 level, void *context, void **return_value);
|
||||
|
@ -818,7 +814,7 @@ acpi_ev_reg_run(acpi_handle obj_handle,
|
|||
*
|
||||
******************************************************************************/
|
||||
|
||||
static void
|
||||
void
|
||||
acpi_ev_execute_orphan_reg_method(struct acpi_namespace_node *device_node,
|
||||
acpi_adr_space_type space_id)
|
||||
{
|
||||
|
|
|
@ -306,3 +306,57 @@ acpi_execute_reg_methods(acpi_handle device, acpi_adr_space_type space_id)
|
|||
}
|
||||
|
||||
ACPI_EXPORT_SYMBOL(acpi_execute_reg_methods)
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_execute_orphan_reg_method
|
||||
*
|
||||
* PARAMETERS: device - Handle for the device
|
||||
* space_id - The address space ID
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Execute an "orphan" _REG method that appears under an ACPI
|
||||
* device. This is a _REG method that has no corresponding region
|
||||
* within the device's scope.
|
||||
*
|
||||
******************************************************************************/
|
||||
acpi_status
|
||||
acpi_execute_orphan_reg_method(acpi_handle device, acpi_adr_space_type space_id)
|
||||
{
|
||||
struct acpi_namespace_node *node;
|
||||
acpi_status status;
|
||||
|
||||
ACPI_FUNCTION_TRACE(acpi_execute_orphan_reg_method);
|
||||
|
||||
/* Parameter validation */
|
||||
|
||||
if (!device) {
|
||||
return_ACPI_STATUS(AE_BAD_PARAMETER);
|
||||
}
|
||||
|
||||
status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
|
||||
/* Convert and validate the device handle */
|
||||
|
||||
node = acpi_ns_validate_handle(device);
|
||||
if (node) {
|
||||
|
||||
/*
|
||||
* If an "orphan" _REG method is present in the device's scope
|
||||
* for the given address space ID, run it.
|
||||
*/
|
||||
|
||||
acpi_ev_execute_orphan_reg_method(node, space_id);
|
||||
} else {
|
||||
status = AE_BAD_PARAMETER;
|
||||
}
|
||||
|
||||
(void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
|
||||
ACPI_EXPORT_SYMBOL(acpi_execute_orphan_reg_method)
|
||||
|
|
|
@ -44,7 +44,6 @@ acpi_ex_system_memory_space_handler(u32 function,
|
|||
struct acpi_mem_mapping *mm = mem_info->cur_mm;
|
||||
u32 length;
|
||||
acpi_size map_length;
|
||||
acpi_size page_boundary_map_length;
|
||||
#ifdef ACPI_MISALIGNMENT_NOT_SUPPORTED
|
||||
u32 remainder;
|
||||
#endif
|
||||
|
@ -138,26 +137,8 @@ acpi_ex_system_memory_space_handler(u32 function,
|
|||
map_length = (acpi_size)
|
||||
((mem_info->address + mem_info->length) - address);
|
||||
|
||||
/*
|
||||
* If mapping the entire remaining portion of the region will cross
|
||||
* a page boundary, just map up to the page boundary, do not cross.
|
||||
* On some systems, crossing a page boundary while mapping regions
|
||||
* can cause warnings if the pages have different attributes
|
||||
* due to resource management.
|
||||
*
|
||||
* This has the added benefit of constraining a single mapping to
|
||||
* one page, which is similar to the original code that used a 4k
|
||||
* maximum window.
|
||||
*/
|
||||
page_boundary_map_length = (acpi_size)
|
||||
(ACPI_ROUND_UP(address, ACPI_DEFAULT_PAGE_SIZE) - address);
|
||||
if (page_boundary_map_length == 0) {
|
||||
page_boundary_map_length = ACPI_DEFAULT_PAGE_SIZE;
|
||||
}
|
||||
|
||||
if (map_length > page_boundary_map_length) {
|
||||
map_length = page_boundary_map_length;
|
||||
}
|
||||
if (map_length > ACPI_DEFAULT_PAGE_SIZE)
|
||||
map_length = ACPI_DEFAULT_PAGE_SIZE;
|
||||
|
||||
/* Create a new mapping starting at the address given */
|
||||
|
||||
|
|
|
@ -1482,13 +1482,14 @@ static bool install_gpio_irq_event_handler(struct acpi_ec *ec)
|
|||
static int ec_install_handlers(struct acpi_ec *ec, struct acpi_device *device,
|
||||
bool call_reg)
|
||||
{
|
||||
acpi_handle scope_handle = ec == first_ec ? ACPI_ROOT_OBJECT : ec->handle;
|
||||
acpi_status status;
|
||||
|
||||
acpi_ec_start(ec, false);
|
||||
|
||||
if (!test_bit(EC_FLAGS_EC_HANDLER_INSTALLED, &ec->flags)) {
|
||||
acpi_ec_enter_noirq(ec);
|
||||
status = acpi_install_address_space_handler_no_reg(ec->handle,
|
||||
status = acpi_install_address_space_handler_no_reg(scope_handle,
|
||||
ACPI_ADR_SPACE_EC,
|
||||
&acpi_ec_space_handler,
|
||||
NULL, ec);
|
||||
|
@ -1497,11 +1498,13 @@ static int ec_install_handlers(struct acpi_ec *ec, struct acpi_device *device,
|
|||
return -ENODEV;
|
||||
}
|
||||
set_bit(EC_FLAGS_EC_HANDLER_INSTALLED, &ec->flags);
|
||||
ec->address_space_handler_holder = ec->handle;
|
||||
}
|
||||
|
||||
if (call_reg && !test_bit(EC_FLAGS_EC_REG_CALLED, &ec->flags)) {
|
||||
acpi_execute_reg_methods(ec->handle, ACPI_ADR_SPACE_EC);
|
||||
acpi_execute_reg_methods(scope_handle, ACPI_ADR_SPACE_EC);
|
||||
if (scope_handle != ec->handle)
|
||||
acpi_execute_orphan_reg_method(ec->handle, ACPI_ADR_SPACE_EC);
|
||||
|
||||
set_bit(EC_FLAGS_EC_REG_CALLED, &ec->flags);
|
||||
}
|
||||
|
||||
|
@ -1553,10 +1556,13 @@ static int ec_install_handlers(struct acpi_ec *ec, struct acpi_device *device,
|
|||
|
||||
static void ec_remove_handlers(struct acpi_ec *ec)
|
||||
{
|
||||
acpi_handle scope_handle = ec == first_ec ? ACPI_ROOT_OBJECT : ec->handle;
|
||||
|
||||
if (test_bit(EC_FLAGS_EC_HANDLER_INSTALLED, &ec->flags)) {
|
||||
if (ACPI_FAILURE(acpi_remove_address_space_handler(
|
||||
ec->address_space_handler_holder,
|
||||
ACPI_ADR_SPACE_EC, &acpi_ec_space_handler)))
|
||||
scope_handle,
|
||||
ACPI_ADR_SPACE_EC,
|
||||
&acpi_ec_space_handler)))
|
||||
pr_err("failed to remove space handler\n");
|
||||
clear_bit(EC_FLAGS_EC_HANDLER_INSTALLED, &ec->flags);
|
||||
}
|
||||
|
@ -1595,14 +1601,18 @@ static int acpi_ec_setup(struct acpi_ec *ec, struct acpi_device *device, bool ca
|
|||
{
|
||||
int ret;
|
||||
|
||||
ret = ec_install_handlers(ec, device, call_reg);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* First EC capable of handling transactions */
|
||||
if (!first_ec)
|
||||
first_ec = ec;
|
||||
|
||||
ret = ec_install_handlers(ec, device, call_reg);
|
||||
if (ret) {
|
||||
if (ec == first_ec)
|
||||
first_ec = NULL;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
pr_info("EC_CMD/EC_SC=0x%lx, EC_DATA=0x%lx\n", ec->command_addr,
|
||||
ec->data_addr);
|
||||
|
||||
|
|
|
@ -167,7 +167,6 @@ enum acpi_ec_event_state {
|
|||
|
||||
struct acpi_ec {
|
||||
acpi_handle handle;
|
||||
acpi_handle address_space_handler_holder;
|
||||
int gpe;
|
||||
int irq;
|
||||
unsigned long command_addr;
|
||||
|
|
|
@ -505,6 +505,14 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
|
|||
DMI_MATCH(DMI_PRODUCT_NAME, "82BK"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = video_detect_force_native,
|
||||
/* Lenovo Slim 7 16ARH7 */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "82UX"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = video_detect_force_native,
|
||||
/* Lenovo ThinkPad X131e (3371 AMD version) */
|
||||
|
|
|
@ -257,9 +257,10 @@ bool force_storage_d3(void)
|
|||
#define ACPI_QUIRK_SKIP_I2C_CLIENTS BIT(0)
|
||||
#define ACPI_QUIRK_UART1_SKIP BIT(1)
|
||||
#define ACPI_QUIRK_UART1_TTY_UART2_SKIP BIT(2)
|
||||
#define ACPI_QUIRK_SKIP_ACPI_AC_AND_BATTERY BIT(3)
|
||||
#define ACPI_QUIRK_USE_ACPI_AC_AND_BATTERY BIT(4)
|
||||
#define ACPI_QUIRK_SKIP_GPIO_EVENT_HANDLERS BIT(5)
|
||||
#define ACPI_QUIRK_PNP_UART1_SKIP BIT(3)
|
||||
#define ACPI_QUIRK_SKIP_ACPI_AC_AND_BATTERY BIT(4)
|
||||
#define ACPI_QUIRK_USE_ACPI_AC_AND_BATTERY BIT(5)
|
||||
#define ACPI_QUIRK_SKIP_GPIO_EVENT_HANDLERS BIT(6)
|
||||
|
||||
static const struct dmi_system_id acpi_quirk_skip_dmi_ids[] = {
|
||||
/*
|
||||
|
@ -339,6 +340,7 @@ static const struct dmi_system_id acpi_quirk_skip_dmi_ids[] = {
|
|||
DMI_MATCH(DMI_BIOS_VERSION, "BLADE_21"),
|
||||
},
|
||||
.driver_data = (void *)(ACPI_QUIRK_SKIP_I2C_CLIENTS |
|
||||
ACPI_QUIRK_PNP_UART1_SKIP |
|
||||
ACPI_QUIRK_SKIP_ACPI_AC_AND_BATTERY),
|
||||
},
|
||||
{
|
||||
|
@ -437,14 +439,18 @@ static int acpi_dmi_skip_serdev_enumeration(struct device *controller_parent, bo
|
|||
if (ret)
|
||||
return 0;
|
||||
|
||||
/* to not match on PNP enumerated debug UARTs */
|
||||
if (!dev_is_platform(controller_parent))
|
||||
return 0;
|
||||
|
||||
dmi_id = dmi_first_match(acpi_quirk_skip_dmi_ids);
|
||||
if (dmi_id)
|
||||
quirks = (unsigned long)dmi_id->driver_data;
|
||||
|
||||
if (!dev_is_platform(controller_parent)) {
|
||||
/* PNP enumerated UARTs */
|
||||
if ((quirks & ACPI_QUIRK_PNP_UART1_SKIP) && uid == 1)
|
||||
*skip = true;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((quirks & ACPI_QUIRK_UART1_SKIP) && uid == 1)
|
||||
*skip = true;
|
||||
|
||||
|
|
|
@ -569,7 +569,10 @@ static inline int was_interrupted(int result)
|
|||
return result == -ERESTARTSYS || result == -EINTR;
|
||||
}
|
||||
|
||||
/* always call with the tx_lock held */
|
||||
/*
|
||||
* Returns BLK_STS_RESOURCE if the caller should retry after a delay. Returns
|
||||
* -EAGAIN if the caller should requeue @cmd. Returns -EIO if sending failed.
|
||||
*/
|
||||
static int nbd_send_cmd(struct nbd_device *nbd, struct nbd_cmd *cmd, int index)
|
||||
{
|
||||
struct request *req = blk_mq_rq_from_pdu(cmd);
|
||||
|
@ -586,6 +589,9 @@ static int nbd_send_cmd(struct nbd_device *nbd, struct nbd_cmd *cmd, int index)
|
|||
u32 nbd_cmd_flags = 0;
|
||||
int sent = nsock->sent, skip = 0;
|
||||
|
||||
lockdep_assert_held(&cmd->lock);
|
||||
lockdep_assert_held(&nsock->tx_lock);
|
||||
|
||||
iov_iter_kvec(&from, ITER_SOURCE, &iov, 1, sizeof(request));
|
||||
|
||||
type = req_to_nbd_cmd_type(req);
|
||||
|
@ -650,7 +656,7 @@ static int nbd_send_cmd(struct nbd_device *nbd, struct nbd_cmd *cmd, int index)
|
|||
nsock->sent = sent;
|
||||
}
|
||||
set_bit(NBD_CMD_REQUEUED, &cmd->flags);
|
||||
return BLK_STS_RESOURCE;
|
||||
return (__force int)BLK_STS_RESOURCE;
|
||||
}
|
||||
dev_err_ratelimited(disk_to_dev(nbd->disk),
|
||||
"Send control failed (result %d)\n", result);
|
||||
|
@ -691,7 +697,7 @@ send_pages:
|
|||
nsock->pending = req;
|
||||
nsock->sent = sent;
|
||||
set_bit(NBD_CMD_REQUEUED, &cmd->flags);
|
||||
return BLK_STS_RESOURCE;
|
||||
return (__force int)BLK_STS_RESOURCE;
|
||||
}
|
||||
dev_err(disk_to_dev(nbd->disk),
|
||||
"Send data failed (result %d)\n",
|
||||
|
@ -988,7 +994,7 @@ static int wait_for_reconnect(struct nbd_device *nbd)
|
|||
return !test_bit(NBD_RT_DISCONNECTED, &config->runtime_flags);
|
||||
}
|
||||
|
||||
static int nbd_handle_cmd(struct nbd_cmd *cmd, int index)
|
||||
static blk_status_t nbd_handle_cmd(struct nbd_cmd *cmd, int index)
|
||||
{
|
||||
struct request *req = blk_mq_rq_from_pdu(cmd);
|
||||
struct nbd_device *nbd = cmd->nbd;
|
||||
|
@ -996,18 +1002,20 @@ static int nbd_handle_cmd(struct nbd_cmd *cmd, int index)
|
|||
struct nbd_sock *nsock;
|
||||
int ret;
|
||||
|
||||
lockdep_assert_held(&cmd->lock);
|
||||
|
||||
config = nbd_get_config_unlocked(nbd);
|
||||
if (!config) {
|
||||
dev_err_ratelimited(disk_to_dev(nbd->disk),
|
||||
"Socks array is empty\n");
|
||||
return -EINVAL;
|
||||
return BLK_STS_IOERR;
|
||||
}
|
||||
|
||||
if (index >= config->num_connections) {
|
||||
dev_err_ratelimited(disk_to_dev(nbd->disk),
|
||||
"Attempted send on invalid socket\n");
|
||||
nbd_config_put(nbd);
|
||||
return -EINVAL;
|
||||
return BLK_STS_IOERR;
|
||||
}
|
||||
cmd->status = BLK_STS_OK;
|
||||
again:
|
||||
|
@ -1030,7 +1038,7 @@ again:
|
|||
*/
|
||||
sock_shutdown(nbd);
|
||||
nbd_config_put(nbd);
|
||||
return -EIO;
|
||||
return BLK_STS_IOERR;
|
||||
}
|
||||
goto again;
|
||||
}
|
||||
|
@ -1043,7 +1051,7 @@ again:
|
|||
blk_mq_start_request(req);
|
||||
if (unlikely(nsock->pending && nsock->pending != req)) {
|
||||
nbd_requeue_cmd(cmd);
|
||||
ret = 0;
|
||||
ret = BLK_STS_OK;
|
||||
goto out;
|
||||
}
|
||||
/*
|
||||
|
@ -1062,19 +1070,19 @@ again:
|
|||
"Request send failed, requeueing\n");
|
||||
nbd_mark_nsock_dead(nbd, nsock, 1);
|
||||
nbd_requeue_cmd(cmd);
|
||||
ret = 0;
|
||||
ret = BLK_STS_OK;
|
||||
}
|
||||
out:
|
||||
mutex_unlock(&nsock->tx_lock);
|
||||
nbd_config_put(nbd);
|
||||
return ret;
|
||||
return ret < 0 ? BLK_STS_IOERR : (__force blk_status_t)ret;
|
||||
}
|
||||
|
||||
static blk_status_t nbd_queue_rq(struct blk_mq_hw_ctx *hctx,
|
||||
const struct blk_mq_queue_data *bd)
|
||||
{
|
||||
struct nbd_cmd *cmd = blk_mq_rq_to_pdu(bd->rq);
|
||||
int ret;
|
||||
blk_status_t ret;
|
||||
|
||||
/*
|
||||
* Since we look at the bio's to send the request over the network we
|
||||
|
@ -1094,10 +1102,6 @@ static blk_status_t nbd_queue_rq(struct blk_mq_hw_ctx *hctx,
|
|||
* appropriate.
|
||||
*/
|
||||
ret = nbd_handle_cmd(cmd, hctx->queue_num);
|
||||
if (ret < 0)
|
||||
ret = BLK_STS_IOERR;
|
||||
else if (!ret)
|
||||
ret = BLK_STS_OK;
|
||||
mutex_unlock(&cmd->lock);
|
||||
|
||||
return ret;
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
* Copyright (c) 2008-2009 Atheros Communications Inc.
|
||||
*/
|
||||
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
|
@ -128,7 +127,6 @@ MODULE_DEVICE_TABLE(usb, ath3k_table);
|
|||
* for AR3012
|
||||
*/
|
||||
static const struct usb_device_id ath3k_blist_tbl[] = {
|
||||
|
||||
/* Atheros AR3012 with sflash firmware*/
|
||||
{ USB_DEVICE(0x0489, 0xe04e), .driver_info = BTUSB_ATH3012 },
|
||||
{ USB_DEVICE(0x0489, 0xe04d), .driver_info = BTUSB_ATH3012 },
|
||||
|
@ -202,7 +200,7 @@ static inline void ath3k_log_failed_loading(int err, int len, int size,
|
|||
#define TIMEGAP_USEC_MAX 100
|
||||
|
||||
static int ath3k_load_firmware(struct usb_device *udev,
|
||||
const struct firmware *firmware)
|
||||
const struct firmware *firmware)
|
||||
{
|
||||
u8 *send_buf;
|
||||
int len = 0;
|
||||
|
@ -237,9 +235,9 @@ static int ath3k_load_firmware(struct usb_device *udev,
|
|||
memcpy(send_buf, firmware->data + sent, size);
|
||||
|
||||
err = usb_bulk_msg(udev, pipe, send_buf, size,
|
||||
&len, 3000);
|
||||
&len, 3000);
|
||||
|
||||
if (err || (len != size)) {
|
||||
if (err || len != size) {
|
||||
ath3k_log_failed_loading(err, len, size, count);
|
||||
goto error;
|
||||
}
|
||||
|
@ -262,7 +260,7 @@ static int ath3k_get_state(struct usb_device *udev, unsigned char *state)
|
|||
}
|
||||
|
||||
static int ath3k_get_version(struct usb_device *udev,
|
||||
struct ath3k_version *version)
|
||||
struct ath3k_version *version)
|
||||
{
|
||||
return usb_control_msg_recv(udev, 0, ATH3K_GETVERSION,
|
||||
USB_TYPE_VENDOR | USB_DIR_IN, 0, 0,
|
||||
|
@ -271,7 +269,7 @@ static int ath3k_get_version(struct usb_device *udev,
|
|||
}
|
||||
|
||||
static int ath3k_load_fwfile(struct usb_device *udev,
|
||||
const struct firmware *firmware)
|
||||
const struct firmware *firmware)
|
||||
{
|
||||
u8 *send_buf;
|
||||
int len = 0;
|
||||
|
@ -310,8 +308,8 @@ static int ath3k_load_fwfile(struct usb_device *udev,
|
|||
memcpy(send_buf, firmware->data + sent, size);
|
||||
|
||||
err = usb_bulk_msg(udev, pipe, send_buf, size,
|
||||
&len, 3000);
|
||||
if (err || (len != size)) {
|
||||
&len, 3000);
|
||||
if (err || len != size) {
|
||||
ath3k_log_failed_loading(err, len, size, count);
|
||||
kfree(send_buf);
|
||||
return err;
|
||||
|
@ -425,7 +423,6 @@ static int ath3k_load_syscfg(struct usb_device *udev)
|
|||
}
|
||||
|
||||
switch (fw_version.ref_clock) {
|
||||
|
||||
case ATH3K_XTAL_FREQ_26M:
|
||||
clk_value = 26;
|
||||
break;
|
||||
|
@ -441,7 +438,7 @@ static int ath3k_load_syscfg(struct usb_device *udev)
|
|||
}
|
||||
|
||||
snprintf(filename, ATH3K_NAME_LEN, "ar3k/ramps_0x%08x_%d%s",
|
||||
le32_to_cpu(fw_version.rom_version), clk_value, ".dfu");
|
||||
le32_to_cpu(fw_version.rom_version), clk_value, ".dfu");
|
||||
|
||||
ret = request_firmware(&firmware, filename, &udev->dev);
|
||||
if (ret < 0) {
|
||||
|
@ -456,7 +453,7 @@ static int ath3k_load_syscfg(struct usb_device *udev)
|
|||
}
|
||||
|
||||
static int ath3k_probe(struct usb_interface *intf,
|
||||
const struct usb_device_id *id)
|
||||
const struct usb_device_id *id)
|
||||
{
|
||||
const struct firmware *firmware;
|
||||
struct usb_device *udev = interface_to_usbdev(intf);
|
||||
|
@ -505,10 +502,10 @@ static int ath3k_probe(struct usb_interface *intf,
|
|||
if (ret < 0) {
|
||||
if (ret == -ENOENT)
|
||||
BT_ERR("Firmware file \"%s\" not found",
|
||||
ATH3K_FIRMWARE);
|
||||
ATH3K_FIRMWARE);
|
||||
else
|
||||
BT_ERR("Firmware file \"%s\" request failed (err=%d)",
|
||||
ATH3K_FIRMWARE, ret);
|
||||
ATH3K_FIRMWARE, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -1216,6 +1216,13 @@ free_cpudata1:
|
|||
|
||||
static int amd_pstate_epp_cpu_exit(struct cpufreq_policy *policy)
|
||||
{
|
||||
struct amd_cpudata *cpudata = policy->driver_data;
|
||||
|
||||
if (cpudata) {
|
||||
kfree(cpudata);
|
||||
policy->driver_data = NULL;
|
||||
}
|
||||
|
||||
pr_debug("CPU %d exiting\n", policy->cpu);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -2952,12 +2952,9 @@ void hisi_qm_uninit(struct hisi_qm *qm)
|
|||
hisi_qm_set_state(qm, QM_NOT_READY);
|
||||
up_write(&qm->qps_lock);
|
||||
|
||||
qm_remove_uacce(qm);
|
||||
qm_irqs_unregister(qm);
|
||||
hisi_qm_pci_uninit(qm);
|
||||
if (qm->use_sva) {
|
||||
uacce_remove(qm->uacce);
|
||||
qm->uacce = NULL;
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(hisi_qm_uninit);
|
||||
|
||||
|
|
|
@ -478,8 +478,10 @@ static void sec_alg_resource_free(struct sec_ctx *ctx,
|
|||
|
||||
if (ctx->pbuf_supported)
|
||||
sec_free_pbuf_resource(dev, qp_ctx->res);
|
||||
if (ctx->alg_type == SEC_AEAD)
|
||||
if (ctx->alg_type == SEC_AEAD) {
|
||||
sec_free_mac_resource(dev, qp_ctx->res);
|
||||
sec_free_aiv_resource(dev, qp_ctx->res);
|
||||
}
|
||||
}
|
||||
|
||||
static int sec_alloc_qp_ctx_resource(struct hisi_qm *qm, struct sec_ctx *ctx,
|
||||
|
|
|
@ -380,7 +380,7 @@ config LPC18XX_DMAMUX
|
|||
|
||||
config MCF_EDMA
|
||||
tristate "Freescale eDMA engine support, ColdFire mcf5441x SoCs"
|
||||
depends on M5441x || COMPILE_TEST
|
||||
depends on M5441x || (COMPILE_TEST && FSL_EDMA=n)
|
||||
select DMA_ENGINE
|
||||
select DMA_VIRTUAL_CHANNELS
|
||||
help
|
||||
|
|
|
@ -256,6 +256,7 @@ static struct axi_dma_desc *axi_desc_alloc(u32 num)
|
|||
kfree(desc);
|
||||
return NULL;
|
||||
}
|
||||
desc->nr_hw_descs = num;
|
||||
|
||||
return desc;
|
||||
}
|
||||
|
@ -282,7 +283,7 @@ static struct axi_dma_lli *axi_desc_get(struct axi_dma_chan *chan,
|
|||
static void axi_desc_put(struct axi_dma_desc *desc)
|
||||
{
|
||||
struct axi_dma_chan *chan = desc->chan;
|
||||
int count = atomic_read(&chan->descs_allocated);
|
||||
int count = desc->nr_hw_descs;
|
||||
struct axi_dma_hw_desc *hw_desc;
|
||||
int descs_put;
|
||||
|
||||
|
@ -1093,9 +1094,6 @@ static void axi_chan_block_xfer_complete(struct axi_dma_chan *chan)
|
|||
/* Remove the completed descriptor from issued list before completing */
|
||||
list_del(&vd->node);
|
||||
vchan_cookie_complete(vd);
|
||||
|
||||
/* Submit queued descriptors after processing the completed ones */
|
||||
axi_chan_start_first_queued(chan);
|
||||
}
|
||||
|
||||
out:
|
||||
|
|
|
@ -104,6 +104,7 @@ struct axi_dma_desc {
|
|||
u32 completed_blocks;
|
||||
u32 length;
|
||||
u32 period_len;
|
||||
u32 nr_hw_descs;
|
||||
};
|
||||
|
||||
struct axi_dma_chan_config {
|
||||
|
|
|
@ -611,11 +611,13 @@ static void irq_process_work_list(struct idxd_irq_entry *irq_entry)
|
|||
|
||||
spin_unlock(&irq_entry->list_lock);
|
||||
|
||||
list_for_each_entry(desc, &flist, list) {
|
||||
list_for_each_entry_safe(desc, n, &flist, list) {
|
||||
/*
|
||||
* Check against the original status as ABORT is software defined
|
||||
* and 0xff, which DSA_COMP_STATUS_MASK can mask out.
|
||||
*/
|
||||
list_del(&desc->list);
|
||||
|
||||
if (unlikely(desc->completion->status == IDXD_COMP_DESC_ABORT)) {
|
||||
idxd_dma_complete_txd(desc, IDXD_COMPLETE_ABORT, true);
|
||||
continue;
|
||||
|
|
|
@ -534,18 +534,6 @@ err_out:
|
|||
return err;
|
||||
}
|
||||
|
||||
static int ioat_register(struct ioatdma_device *ioat_dma)
|
||||
{
|
||||
int err = dma_async_device_register(&ioat_dma->dma_dev);
|
||||
|
||||
if (err) {
|
||||
ioat_disable_interrupts(ioat_dma);
|
||||
dma_pool_destroy(ioat_dma->completion_pool);
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static void ioat_dma_remove(struct ioatdma_device *ioat_dma)
|
||||
{
|
||||
struct dma_device *dma = &ioat_dma->dma_dev;
|
||||
|
@ -1181,9 +1169,9 @@ static int ioat3_dma_probe(struct ioatdma_device *ioat_dma, int dca)
|
|||
ioat_chan->reg_base + IOAT_DCACTRL_OFFSET);
|
||||
}
|
||||
|
||||
err = ioat_register(ioat_dma);
|
||||
err = dma_async_device_register(&ioat_dma->dma_dev);
|
||||
if (err)
|
||||
return err;
|
||||
goto err_disable_interrupts;
|
||||
|
||||
ioat_kobject_add(ioat_dma, &ioat_ktype);
|
||||
|
||||
|
@ -1192,20 +1180,29 @@ static int ioat3_dma_probe(struct ioatdma_device *ioat_dma, int dca)
|
|||
|
||||
/* disable relaxed ordering */
|
||||
err = pcie_capability_read_word(pdev, PCI_EXP_DEVCTL, &val16);
|
||||
if (err)
|
||||
return pcibios_err_to_errno(err);
|
||||
if (err) {
|
||||
err = pcibios_err_to_errno(err);
|
||||
goto err_disable_interrupts;
|
||||
}
|
||||
|
||||
/* clear relaxed ordering enable */
|
||||
val16 &= ~PCI_EXP_DEVCTL_RELAX_EN;
|
||||
err = pcie_capability_write_word(pdev, PCI_EXP_DEVCTL, val16);
|
||||
if (err)
|
||||
return pcibios_err_to_errno(err);
|
||||
if (err) {
|
||||
err = pcibios_err_to_errno(err);
|
||||
goto err_disable_interrupts;
|
||||
}
|
||||
|
||||
if (ioat_dma->cap & IOAT_CAP_DPS)
|
||||
writeb(ioat_pending_level + 1,
|
||||
ioat_dma->reg_base + IOAT_PREFETCH_LIMIT_OFFSET);
|
||||
|
||||
return 0;
|
||||
|
||||
err_disable_interrupts:
|
||||
ioat_disable_interrupts(ioat_dma);
|
||||
dma_pool_destroy(ioat_dma->completion_pool);
|
||||
return err;
|
||||
}
|
||||
|
||||
static void ioat_shutdown(struct pci_dev *pdev)
|
||||
|
@ -1350,6 +1347,8 @@ static int ioat_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||
void __iomem * const *iomap;
|
||||
struct device *dev = &pdev->dev;
|
||||
struct ioatdma_device *device;
|
||||
unsigned int i;
|
||||
u8 version;
|
||||
int err;
|
||||
|
||||
err = pcim_enable_device(pdev);
|
||||
|
@ -1363,6 +1362,10 @@ static int ioat_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||
if (!iomap)
|
||||
return -ENOMEM;
|
||||
|
||||
version = readb(iomap[IOAT_MMIO_BAR] + IOAT_VER_OFFSET);
|
||||
if (version < IOAT_VER_3_0)
|
||||
return -ENODEV;
|
||||
|
||||
err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
|
||||
if (err)
|
||||
return err;
|
||||
|
@ -1373,17 +1376,18 @@ static int ioat_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||
pci_set_master(pdev);
|
||||
pci_set_drvdata(pdev, device);
|
||||
|
||||
device->version = readb(device->reg_base + IOAT_VER_OFFSET);
|
||||
device->version = version;
|
||||
if (device->version >= IOAT_VER_3_4)
|
||||
ioat_dca_enabled = 0;
|
||||
if (device->version >= IOAT_VER_3_0) {
|
||||
if (is_skx_ioat(pdev))
|
||||
device->version = IOAT_VER_3_2;
|
||||
err = ioat3_dma_probe(device, ioat_dca_enabled);
|
||||
} else
|
||||
return -ENODEV;
|
||||
|
||||
if (is_skx_ioat(pdev))
|
||||
device->version = IOAT_VER_3_2;
|
||||
|
||||
err = ioat3_dma_probe(device, ioat_dca_enabled);
|
||||
if (err) {
|
||||
for (i = 0; i < IOAT_MAX_CHANS; i++)
|
||||
kfree(device->idx[i]);
|
||||
kfree(device);
|
||||
dev_err(dev, "Intel(R) I/OAT DMA Engine init failed\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
@ -1445,6 +1449,7 @@ module_init(ioat_init_module);
|
|||
static void __exit ioat_exit_module(void)
|
||||
{
|
||||
pci_unregister_driver(&ioat_pci_driver);
|
||||
kmem_cache_destroy(ioat_sed_cache);
|
||||
kmem_cache_destroy(ioat_cache);
|
||||
}
|
||||
module_exit(ioat_exit_module);
|
||||
|
|
|
@ -8,10 +8,10 @@
|
|||
#include <asm/efi.h>
|
||||
#include <asm/addrspace.h>
|
||||
#include "efistub.h"
|
||||
#include "loongarch-stub.h"
|
||||
|
||||
extern int kernel_asize;
|
||||
extern int kernel_fsize;
|
||||
extern int kernel_offset;
|
||||
extern int kernel_entry;
|
||||
|
||||
efi_status_t handle_kernel_image(unsigned long *image_addr,
|
||||
|
@ -24,7 +24,7 @@ efi_status_t handle_kernel_image(unsigned long *image_addr,
|
|||
efi_status_t status;
|
||||
unsigned long kernel_addr = 0;
|
||||
|
||||
kernel_addr = (unsigned long)&kernel_offset - kernel_offset;
|
||||
kernel_addr = (unsigned long)image->image_base;
|
||||
|
||||
status = efi_relocate_kernel(&kernel_addr, kernel_fsize, kernel_asize,
|
||||
EFI_KIMG_PREFERRED_ADDRESS, efi_get_kimg_min_align(), 0x0);
|
||||
|
@ -35,9 +35,10 @@ efi_status_t handle_kernel_image(unsigned long *image_addr,
|
|||
return status;
|
||||
}
|
||||
|
||||
unsigned long kernel_entry_address(unsigned long kernel_addr)
|
||||
unsigned long kernel_entry_address(unsigned long kernel_addr,
|
||||
efi_loaded_image_t *image)
|
||||
{
|
||||
unsigned long base = (unsigned long)&kernel_offset - kernel_offset;
|
||||
unsigned long base = (unsigned long)image->image_base;
|
||||
|
||||
return (unsigned long)&kernel_entry - base + kernel_addr;
|
||||
}
|
||||
|
|
4
drivers/firmware/efi/libstub/loongarch-stub.h
Normal file
4
drivers/firmware/efi/libstub/loongarch-stub.h
Normal file
|
@ -0,0 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
unsigned long kernel_entry_address(unsigned long kernel_addr,
|
||||
efi_loaded_image_t *image);
|
|
@ -8,6 +8,7 @@
|
|||
#include <asm/efi.h>
|
||||
#include <asm/addrspace.h>
|
||||
#include "efistub.h"
|
||||
#include "loongarch-stub.h"
|
||||
|
||||
typedef void __noreturn (*kernel_entry_t)(bool efi, unsigned long cmdline,
|
||||
unsigned long systab);
|
||||
|
@ -37,9 +38,10 @@ static efi_status_t exit_boot_func(struct efi_boot_memmap *map, void *priv)
|
|||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
unsigned long __weak kernel_entry_address(unsigned long kernel_addr)
|
||||
unsigned long __weak kernel_entry_address(unsigned long kernel_addr,
|
||||
efi_loaded_image_t *image)
|
||||
{
|
||||
return *(unsigned long *)(kernel_addr + 8) - VMLINUX_LOAD_ADDRESS + kernel_addr;
|
||||
return *(unsigned long *)(kernel_addr + 8) - PHYSADDR(VMLINUX_LOAD_ADDRESS) + kernel_addr;
|
||||
}
|
||||
|
||||
efi_status_t efi_boot_kernel(void *handle, efi_loaded_image_t *image,
|
||||
|
@ -73,7 +75,7 @@ efi_status_t efi_boot_kernel(void *handle, efi_loaded_image_t *image,
|
|||
csr_write64(CSR_DMW0_INIT, LOONGARCH_CSR_DMWIN0);
|
||||
csr_write64(CSR_DMW1_INIT, LOONGARCH_CSR_DMWIN1);
|
||||
|
||||
real_kernel_entry = (void *)kernel_entry_address(kernel_addr);
|
||||
real_kernel_entry = (void *)kernel_entry_address(kernel_addr, image);
|
||||
|
||||
real_kernel_entry(true, (unsigned long)cmdline_ptr,
|
||||
(unsigned long)efi_system_table);
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
#include <asm/early_ioremap.h>
|
||||
#include <asm/efi.h>
|
||||
|
||||
#ifndef __efi_memmap_free
|
||||
#define __efi_memmap_free(phys, size, flags) do { } while (0)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* __efi_memmap_init - Common code for mapping the EFI memory map
|
||||
* @data: EFI memory map data
|
||||
|
@ -51,11 +47,6 @@ int __init __efi_memmap_init(struct efi_memory_map_data *data)
|
|||
return -ENOMEM;
|
||||
}
|
||||
|
||||
if (efi.memmap.flags & (EFI_MEMMAP_MEMBLOCK | EFI_MEMMAP_SLAB))
|
||||
__efi_memmap_free(efi.memmap.phys_map,
|
||||
efi.memmap.desc_size * efi.memmap.nr_map,
|
||||
efi.memmap.flags);
|
||||
|
||||
map.phys_map = data->phys_map;
|
||||
map.nr_map = data->size / data->desc_size;
|
||||
map.map_end = map.map + data->size;
|
||||
|
|
|
@ -509,10 +509,12 @@ int psci_cpu_suspend_enter(u32 state)
|
|||
|
||||
static int psci_system_suspend(unsigned long unused)
|
||||
{
|
||||
int err;
|
||||
phys_addr_t pa_cpu_resume = __pa_symbol(cpu_resume);
|
||||
|
||||
return invoke_psci_fn(PSCI_FN_NATIVE(1_0, SYSTEM_SUSPEND),
|
||||
err = invoke_psci_fn(PSCI_FN_NATIVE(1_0, SYSTEM_SUSPEND),
|
||||
pa_cpu_resume, 0, 0);
|
||||
return psci_to_linux_errno(err);
|
||||
}
|
||||
|
||||
static int psci_system_suspend_enter(suspend_state_t state)
|
||||
|
|
|
@ -164,6 +164,8 @@ static void sumo_construct_vid_mapping_table(struct amdgpu_device *adev,
|
|||
|
||||
for (i = 0; i < SUMO_MAX_HARDWARE_POWERLEVELS; i++) {
|
||||
if (table[i].ulSupportedSCLK != 0) {
|
||||
if (table[i].usVoltageIndex >= SUMO_MAX_NUMBER_VOLTAGES)
|
||||
continue;
|
||||
vid_mapping_table->entries[table[i].usVoltageIndex].vid_7bit =
|
||||
table[i].usVoltageID;
|
||||
vid_mapping_table->entries[table[i].usVoltageIndex].vid_2bit =
|
||||
|
|
|
@ -393,6 +393,10 @@ bool intel_dp_can_bigjoiner(struct intel_dp *intel_dp)
|
|||
struct intel_encoder *encoder = &intel_dig_port->base;
|
||||
struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
|
||||
|
||||
/* eDP MSO is not compatible with joiner */
|
||||
if (intel_dp->mso_link_count)
|
||||
return false;
|
||||
|
||||
return DISPLAY_VER(dev_priv) >= 12 ||
|
||||
(DISPLAY_VER(dev_priv) == 11 &&
|
||||
encoder->port != PORT_A);
|
||||
|
|
|
@ -43,6 +43,18 @@ void lima_bcast_suspend(struct lima_ip *ip)
|
|||
|
||||
}
|
||||
|
||||
int lima_bcast_mask_irq(struct lima_ip *ip)
|
||||
{
|
||||
bcast_write(LIMA_BCAST_BROADCAST_MASK, 0);
|
||||
bcast_write(LIMA_BCAST_INTERRUPT_MASK, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lima_bcast_reset(struct lima_ip *ip)
|
||||
{
|
||||
return lima_bcast_hw_init(ip);
|
||||
}
|
||||
|
||||
int lima_bcast_init(struct lima_ip *ip)
|
||||
{
|
||||
int i;
|
||||
|
|
|
@ -13,4 +13,7 @@ void lima_bcast_fini(struct lima_ip *ip);
|
|||
|
||||
void lima_bcast_enable(struct lima_device *dev, int num_pp);
|
||||
|
||||
int lima_bcast_mask_irq(struct lima_ip *ip);
|
||||
int lima_bcast_reset(struct lima_ip *ip);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -212,6 +212,13 @@ static void lima_gp_task_mmu_error(struct lima_sched_pipe *pipe)
|
|||
lima_sched_pipe_task_done(pipe);
|
||||
}
|
||||
|
||||
static void lima_gp_task_mask_irq(struct lima_sched_pipe *pipe)
|
||||
{
|
||||
struct lima_ip *ip = pipe->processor[0];
|
||||
|
||||
gp_write(LIMA_GP_INT_MASK, 0);
|
||||
}
|
||||
|
||||
static int lima_gp_task_recover(struct lima_sched_pipe *pipe)
|
||||
{
|
||||
struct lima_ip *ip = pipe->processor[0];
|
||||
|
@ -344,6 +351,7 @@ int lima_gp_pipe_init(struct lima_device *dev)
|
|||
pipe->task_error = lima_gp_task_error;
|
||||
pipe->task_mmu_error = lima_gp_task_mmu_error;
|
||||
pipe->task_recover = lima_gp_task_recover;
|
||||
pipe->task_mask_irq = lima_gp_task_mask_irq;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -408,6 +408,9 @@ static void lima_pp_task_error(struct lima_sched_pipe *pipe)
|
|||
|
||||
lima_pp_hard_reset(ip);
|
||||
}
|
||||
|
||||
if (pipe->bcast_processor)
|
||||
lima_bcast_reset(pipe->bcast_processor);
|
||||
}
|
||||
|
||||
static void lima_pp_task_mmu_error(struct lima_sched_pipe *pipe)
|
||||
|
@ -416,6 +419,20 @@ static void lima_pp_task_mmu_error(struct lima_sched_pipe *pipe)
|
|||
lima_sched_pipe_task_done(pipe);
|
||||
}
|
||||
|
||||
static void lima_pp_task_mask_irq(struct lima_sched_pipe *pipe)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < pipe->num_processor; i++) {
|
||||
struct lima_ip *ip = pipe->processor[i];
|
||||
|
||||
pp_write(LIMA_PP_INT_MASK, 0);
|
||||
}
|
||||
|
||||
if (pipe->bcast_processor)
|
||||
lima_bcast_mask_irq(pipe->bcast_processor);
|
||||
}
|
||||
|
||||
static struct kmem_cache *lima_pp_task_slab;
|
||||
static int lima_pp_task_slab_refcnt;
|
||||
|
||||
|
@ -447,6 +464,7 @@ int lima_pp_pipe_init(struct lima_device *dev)
|
|||
pipe->task_fini = lima_pp_task_fini;
|
||||
pipe->task_error = lima_pp_task_error;
|
||||
pipe->task_mmu_error = lima_pp_task_mmu_error;
|
||||
pipe->task_mask_irq = lima_pp_task_mask_irq;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -402,6 +402,13 @@ static enum drm_gpu_sched_stat lima_sched_timedout_job(struct drm_sched_job *job
|
|||
struct lima_sched_task *task = to_lima_task(job);
|
||||
struct lima_device *ldev = pipe->ldev;
|
||||
|
||||
/*
|
||||
* The task might still finish while this timeout handler runs.
|
||||
* To prevent a race condition on its completion, mask all irqs
|
||||
* on the running core until the next hard reset completes.
|
||||
*/
|
||||
pipe->task_mask_irq(pipe);
|
||||
|
||||
if (!pipe->error)
|
||||
DRM_ERROR("lima job timeout\n");
|
||||
|
||||
|
|
|
@ -80,6 +80,7 @@ struct lima_sched_pipe {
|
|||
void (*task_error)(struct lima_sched_pipe *pipe);
|
||||
void (*task_mmu_error)(struct lima_sched_pipe *pipe);
|
||||
int (*task_recover)(struct lima_sched_pipe *pipe);
|
||||
void (*task_mask_irq)(struct lima_sched_pipe *pipe);
|
||||
|
||||
struct work_struct recover_work;
|
||||
};
|
||||
|
|
|
@ -1621,6 +1621,8 @@ void sumo_construct_vid_mapping_table(struct radeon_device *rdev,
|
|||
|
||||
for (i = 0; i < SUMO_MAX_HARDWARE_POWERLEVELS; i++) {
|
||||
if (table[i].ulSupportedSCLK != 0) {
|
||||
if (table[i].usVoltageIndex >= SUMO_MAX_NUMBER_VOLTAGES)
|
||||
continue;
|
||||
vid_mapping_table->entries[table[i].usVoltageIndex].vid_7bit =
|
||||
table[i].usVoltageID;
|
||||
vid_mapping_table->entries[table[i].usVoltageIndex].vid_2bit =
|
||||
|
|
|
@ -335,36 +335,20 @@ static int asus_raw_event(struct hid_device *hdev,
|
|||
if (drvdata->quirks & QUIRK_MEDION_E1239T)
|
||||
return asus_e1239t_event(drvdata, data, size);
|
||||
|
||||
if (drvdata->quirks & QUIRK_USE_KBD_BACKLIGHT) {
|
||||
/*
|
||||
* Skip these report ID, the device emits a continuous stream associated
|
||||
* with the AURA mode it is in which looks like an 'echo'.
|
||||
*/
|
||||
if (report->id == FEATURE_KBD_LED_REPORT_ID1 || report->id == FEATURE_KBD_LED_REPORT_ID2)
|
||||
return -1;
|
||||
if (drvdata->quirks & QUIRK_ROG_NKEY_KEYBOARD) {
|
||||
/*
|
||||
* Skip these report ID, the device emits a continuous stream associated
|
||||
* with the AURA mode it is in which looks like an 'echo'.
|
||||
* G713 and G733 send these codes on some keypresses, depending on
|
||||
* the key pressed it can trigger a shutdown event if not caught.
|
||||
*/
|
||||
if (report->id == FEATURE_KBD_LED_REPORT_ID1 ||
|
||||
report->id == FEATURE_KBD_LED_REPORT_ID2) {
|
||||
if (data[0] == 0x02 && data[1] == 0x30) {
|
||||
return -1;
|
||||
/* Additional report filtering */
|
||||
} else if (report->id == FEATURE_KBD_REPORT_ID) {
|
||||
/*
|
||||
* G14 and G15 send these codes on some keypresses with no
|
||||
* discernable reason for doing so. We'll filter them out to avoid
|
||||
* unmapped warning messages later.
|
||||
*/
|
||||
if (data[1] == 0xea || data[1] == 0xec || data[1] == 0x02 ||
|
||||
data[1] == 0x8a || data[1] == 0x9e) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
if (drvdata->quirks & QUIRK_ROG_NKEY_KEYBOARD) {
|
||||
/*
|
||||
* G713 and G733 send these codes on some keypresses, depending on
|
||||
* the key pressed it can trigger a shutdown event if not caught.
|
||||
*/
|
||||
if(data[0] == 0x02 && data[1] == 0x30) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (drvdata->quirks & QUIRK_ROG_CLAYMORE_II_KEYBOARD) {
|
||||
|
@ -1250,6 +1234,19 @@ static __u8 *asus_report_fixup(struct hid_device *hdev, __u8 *rdesc,
|
|||
rdesc[205] = 0x01;
|
||||
}
|
||||
|
||||
/* match many more n-key devices */
|
||||
if (drvdata->quirks & QUIRK_ROG_NKEY_KEYBOARD && *rsize > 15) {
|
||||
for (int i = 0; i < *rsize - 15; i++) {
|
||||
/* offset to the count from 0x5a report part always 14 */
|
||||
if (rdesc[i] == 0x85 && rdesc[i + 1] == 0x5a &&
|
||||
rdesc[i + 14] == 0x95 && rdesc[i + 15] == 0x05) {
|
||||
hid_info(hdev, "Fixing up Asus N-Key report descriptor\n");
|
||||
rdesc[i + 15] = 0x01;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return rdesc;
|
||||
}
|
||||
|
||||
|
@ -1319,4 +1316,4 @@ static struct hid_driver asus_driver = {
|
|||
};
|
||||
module_hid_driver(asus_driver);
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
|
@ -820,6 +820,7 @@
|
|||
#define USB_DEVICE_ID_LOGITECH_AUDIOHUB 0x0a0e
|
||||
#define USB_DEVICE_ID_LOGITECH_T651 0xb00c
|
||||
#define USB_DEVICE_ID_LOGITECH_DINOVO_EDGE_KBD 0xb309
|
||||
#define USB_DEVICE_ID_LOGITECH_CASA_TOUCHPAD 0xbb00
|
||||
#define USB_DEVICE_ID_LOGITECH_C007 0xc007
|
||||
#define USB_DEVICE_ID_LOGITECH_C077 0xc077
|
||||
#define USB_DEVICE_ID_LOGITECH_RECEIVER 0xc101
|
||||
|
|
|
@ -2084,6 +2084,12 @@ static const struct hid_device_id mt_devices[] = {
|
|||
USB_VENDOR_ID_LENOVO,
|
||||
USB_DEVICE_ID_LENOVO_X12_TAB) },
|
||||
|
||||
/* Logitech devices */
|
||||
{ .driver_data = MT_CLS_NSMU,
|
||||
HID_DEVICE(BUS_BLUETOOTH, HID_GROUP_MULTITOUCH_WIN_8,
|
||||
USB_VENDOR_ID_LOGITECH,
|
||||
USB_DEVICE_ID_LOGITECH_CASA_TOUCHPAD) },
|
||||
|
||||
/* MosArt panels */
|
||||
{ .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
|
||||
MT_USB_DEVICE(USB_VENDOR_ID_ASUS,
|
||||
|
|
|
@ -442,8 +442,8 @@ static int ocores_init(struct device *dev, struct ocores_i2c *i2c)
|
|||
oc_setreg(i2c, OCI2C_PREHIGH, prescale >> 8);
|
||||
|
||||
/* Init the device */
|
||||
oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_IACK);
|
||||
oc_setreg(i2c, OCI2C_CONTROL, ctrl | OCI2C_CTRL_EN);
|
||||
oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_IACK);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -106,8 +106,6 @@ struct bnxt_re_gsi_context {
|
|||
struct bnxt_re_sqp_entries *sqp_tbl;
|
||||
};
|
||||
|
||||
#define BNXT_RE_MIN_MSIX 2
|
||||
#define BNXT_RE_MAX_MSIX 9
|
||||
#define BNXT_RE_AEQ_IDX 0
|
||||
#define BNXT_RE_NQ_IDX 1
|
||||
#define BNXT_RE_GEN_P5_MAX_VF 64
|
||||
|
@ -166,7 +164,7 @@ struct bnxt_re_dev {
|
|||
struct bnxt_qplib_rcfw rcfw;
|
||||
|
||||
/* NQ */
|
||||
struct bnxt_qplib_nq nq[BNXT_RE_MAX_MSIX];
|
||||
struct bnxt_qplib_nq nq[BNXT_MAX_ROCE_MSIX];
|
||||
|
||||
/* Device Resources */
|
||||
struct bnxt_qplib_dev_attr dev_attr;
|
||||
|
|
|
@ -118,6 +118,7 @@ struct ib_mr *mana_ib_reg_user_mr(struct ib_pd *ibpd, u64 start, u64 length,
|
|||
"start 0x%llx, iova 0x%llx length 0x%llx access_flags 0x%x",
|
||||
start, iova, length, access_flags);
|
||||
|
||||
access_flags &= ~IB_ACCESS_OPTIONAL;
|
||||
if (access_flags & ~VALID_MR_FLAGS)
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
|
|
|
@ -3732,10 +3732,10 @@ static int mlx5_ib_stage_init_init(struct mlx5_ib_dev *dev)
|
|||
spin_lock_init(&dev->dm.lock);
|
||||
dev->dm.dev = mdev;
|
||||
return 0;
|
||||
err:
|
||||
mlx5r_macsec_dealloc_gids(dev);
|
||||
err_mp:
|
||||
mlx5_ib_cleanup_multiport_master(dev);
|
||||
err:
|
||||
mlx5r_macsec_dealloc_gids(dev);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
|
|
@ -308,6 +308,7 @@ static void set_cache_mkc(struct mlx5_cache_ent *ent, void *mkc)
|
|||
MLX5_SET(mkc, mkc, access_mode_1_0, ent->rb_key.access_mode & 0x3);
|
||||
MLX5_SET(mkc, mkc, access_mode_4_2,
|
||||
(ent->rb_key.access_mode >> 2) & 0x7);
|
||||
MLX5_SET(mkc, mkc, ma_translation_mode, !!ent->rb_key.ats);
|
||||
|
||||
MLX5_SET(mkc, mkc, translations_octword_size,
|
||||
get_mkc_octo_size(ent->rb_key.access_mode,
|
||||
|
@ -697,10 +698,8 @@ static int mlx5_cache_ent_insert(struct mlx5_mkey_cache *cache,
|
|||
new = &((*new)->rb_left);
|
||||
if (cmp < 0)
|
||||
new = &((*new)->rb_right);
|
||||
if (cmp == 0) {
|
||||
mutex_unlock(&cache->rb_lock);
|
||||
if (cmp == 0)
|
||||
return -EEXIST;
|
||||
}
|
||||
}
|
||||
|
||||
/* Add new node and rebalance tree. */
|
||||
|
|
|
@ -199,17 +199,20 @@ int mlx5_ib_create_srq(struct ib_srq *ib_srq,
|
|||
int err;
|
||||
struct mlx5_srq_attr in = {};
|
||||
__u32 max_srq_wqes = 1 << MLX5_CAP_GEN(dev->mdev, log_max_srq_sz);
|
||||
__u32 max_sge_sz = MLX5_CAP_GEN(dev->mdev, max_wqe_sz_rq) /
|
||||
sizeof(struct mlx5_wqe_data_seg);
|
||||
|
||||
if (init_attr->srq_type != IB_SRQT_BASIC &&
|
||||
init_attr->srq_type != IB_SRQT_XRC &&
|
||||
init_attr->srq_type != IB_SRQT_TM)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
/* Sanity check SRQ size before proceeding */
|
||||
if (init_attr->attr.max_wr >= max_srq_wqes) {
|
||||
mlx5_ib_dbg(dev, "max_wr %d, cap %d\n",
|
||||
init_attr->attr.max_wr,
|
||||
max_srq_wqes);
|
||||
/* Sanity check SRQ and sge size before proceeding */
|
||||
if (init_attr->attr.max_wr >= max_srq_wqes ||
|
||||
init_attr->attr.max_sge > max_sge_sz) {
|
||||
mlx5_ib_dbg(dev, "max_wr %d,wr_cap %d,max_sge %d, sge_cap:%d\n",
|
||||
init_attr->attr.max_wr, max_srq_wqes,
|
||||
init_attr->attr.max_sge, max_sge_sz);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
|
|
@ -354,6 +354,19 @@ static enum resp_states rxe_resp_check_length(struct rxe_qp *qp,
|
|||
* receive buffer later. For rmda operations additional
|
||||
* length checks are performed in check_rkey.
|
||||
*/
|
||||
if ((qp_type(qp) == IB_QPT_GSI) || (qp_type(qp) == IB_QPT_UD)) {
|
||||
unsigned int payload = payload_size(pkt);
|
||||
unsigned int recv_buffer_len = 0;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < qp->resp.wqe->dma.num_sge; i++)
|
||||
recv_buffer_len += qp->resp.wqe->dma.sge[i].length;
|
||||
if (payload + 40 > recv_buffer_len) {
|
||||
rxe_dbg_qp(qp, "The receive buffer is too small for this UD packet.\n");
|
||||
return RESPST_ERR_LENGTH;
|
||||
}
|
||||
}
|
||||
|
||||
if (pkt->mask & RXE_PAYLOAD_MASK && ((qp_type(qp) == IB_QPT_RC) ||
|
||||
(qp_type(qp) == IB_QPT_UC))) {
|
||||
unsigned int mtu = qp->mtu;
|
||||
|
|
|
@ -812,7 +812,7 @@ static void copy_inline_data_to_wqe(struct rxe_send_wqe *wqe,
|
|||
int i;
|
||||
|
||||
for (i = 0; i < ibwr->num_sge; i++, sge++) {
|
||||
memcpy(p, ib_virt_dma_to_page(sge->addr), sge->length);
|
||||
memcpy(p, ib_virt_dma_to_ptr(sge->addr), sge->length);
|
||||
p += sge->length;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,6 +14,8 @@
|
|||
#include <media/ipu-bridge.h>
|
||||
#include <media/v4l2-fwnode.h>
|
||||
|
||||
#define ADEV_DEV(adev) ACPI_PTR(&((adev)->dev))
|
||||
|
||||
/*
|
||||
* 92335fcf-3203-4472-af93-7b4453ac29da
|
||||
*
|
||||
|
@ -84,6 +86,7 @@ static const char * const ipu_vcm_types[] = {
|
|||
"lc898212axb",
|
||||
};
|
||||
|
||||
#if IS_ENABLED(CONFIG_ACPI)
|
||||
/*
|
||||
* Used to figure out IVSC acpi device by ipu_bridge_get_ivsc_acpi_dev()
|
||||
* instead of device and driver match to probe IVSC device.
|
||||
|
@ -97,13 +100,13 @@ static const struct acpi_device_id ivsc_acpi_ids[] = {
|
|||
|
||||
static struct acpi_device *ipu_bridge_get_ivsc_acpi_dev(struct acpi_device *adev)
|
||||
{
|
||||
acpi_handle handle = acpi_device_handle(adev);
|
||||
struct acpi_device *consumer, *ivsc_adev;
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(ivsc_acpi_ids); i++) {
|
||||
const struct acpi_device_id *acpi_id = &ivsc_acpi_ids[i];
|
||||
struct acpi_device *consumer, *ivsc_adev;
|
||||
|
||||
acpi_handle handle = acpi_device_handle(adev);
|
||||
for_each_acpi_dev_match(ivsc_adev, acpi_id->id, NULL, -1)
|
||||
/* camera sensor depends on IVSC in DSDT if exist */
|
||||
for_each_acpi_consumer_dev(ivsc_adev, consumer)
|
||||
|
@ -115,6 +118,12 @@ static struct acpi_device *ipu_bridge_get_ivsc_acpi_dev(struct acpi_device *adev
|
|||
|
||||
return NULL;
|
||||
}
|
||||
#else
|
||||
static struct acpi_device *ipu_bridge_get_ivsc_acpi_dev(struct acpi_device *adev)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int ipu_bridge_match_ivsc_dev(struct device *dev, const void *adev)
|
||||
{
|
||||
|
@ -160,7 +169,7 @@ static int ipu_bridge_check_ivsc_dev(struct ipu_sensor *sensor,
|
|||
csi_dev = ipu_bridge_get_ivsc_csi_dev(adev);
|
||||
if (!csi_dev) {
|
||||
acpi_dev_put(adev);
|
||||
dev_err(&adev->dev, "Failed to find MEI CSI dev\n");
|
||||
dev_err(ADEV_DEV(adev), "Failed to find MEI CSI dev\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
|
@ -179,24 +188,25 @@ static int ipu_bridge_read_acpi_buffer(struct acpi_device *adev, char *id,
|
|||
acpi_status status;
|
||||
int ret = 0;
|
||||
|
||||
status = acpi_evaluate_object(adev->handle, id, NULL, &buffer);
|
||||
status = acpi_evaluate_object(ACPI_PTR(adev->handle),
|
||||
id, NULL, &buffer);
|
||||
if (ACPI_FAILURE(status))
|
||||
return -ENODEV;
|
||||
|
||||
obj = buffer.pointer;
|
||||
if (!obj) {
|
||||
dev_err(&adev->dev, "Couldn't locate ACPI buffer\n");
|
||||
dev_err(ADEV_DEV(adev), "Couldn't locate ACPI buffer\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (obj->type != ACPI_TYPE_BUFFER) {
|
||||
dev_err(&adev->dev, "Not an ACPI buffer\n");
|
||||
dev_err(ADEV_DEV(adev), "Not an ACPI buffer\n");
|
||||
ret = -ENODEV;
|
||||
goto out_free_buff;
|
||||
}
|
||||
|
||||
if (obj->buffer.length > size) {
|
||||
dev_err(&adev->dev, "Given buffer is too small\n");
|
||||
dev_err(ADEV_DEV(adev), "Given buffer is too small\n");
|
||||
ret = -EINVAL;
|
||||
goto out_free_buff;
|
||||
}
|
||||
|
@ -217,7 +227,7 @@ static u32 ipu_bridge_parse_rotation(struct acpi_device *adev,
|
|||
case IPU_SENSOR_ROTATION_INVERTED:
|
||||
return 180;
|
||||
default:
|
||||
dev_warn(&adev->dev,
|
||||
dev_warn(ADEV_DEV(adev),
|
||||
"Unknown rotation %d. Assume 0 degree rotation\n",
|
||||
ssdb->degree);
|
||||
return 0;
|
||||
|
@ -227,12 +237,14 @@ static u32 ipu_bridge_parse_rotation(struct acpi_device *adev,
|
|||
static enum v4l2_fwnode_orientation ipu_bridge_parse_orientation(struct acpi_device *adev)
|
||||
{
|
||||
enum v4l2_fwnode_orientation orientation;
|
||||
struct acpi_pld_info *pld;
|
||||
acpi_status status;
|
||||
struct acpi_pld_info *pld = NULL;
|
||||
acpi_status status = AE_ERROR;
|
||||
|
||||
#if IS_ENABLED(CONFIG_ACPI)
|
||||
status = acpi_get_physical_device_location(adev->handle, &pld);
|
||||
#endif
|
||||
if (ACPI_FAILURE(status)) {
|
||||
dev_warn(&adev->dev, "_PLD call failed, using default orientation\n");
|
||||
dev_warn(ADEV_DEV(adev), "_PLD call failed, using default orientation\n");
|
||||
return V4L2_FWNODE_ORIENTATION_EXTERNAL;
|
||||
}
|
||||
|
||||
|
@ -250,7 +262,8 @@ static enum v4l2_fwnode_orientation ipu_bridge_parse_orientation(struct acpi_dev
|
|||
orientation = V4L2_FWNODE_ORIENTATION_EXTERNAL;
|
||||
break;
|
||||
default:
|
||||
dev_warn(&adev->dev, "Unknown _PLD panel val %d\n", pld->panel);
|
||||
dev_warn(ADEV_DEV(adev), "Unknown _PLD panel val %d\n",
|
||||
pld->panel);
|
||||
orientation = V4L2_FWNODE_ORIENTATION_EXTERNAL;
|
||||
break;
|
||||
}
|
||||
|
@ -269,12 +282,12 @@ int ipu_bridge_parse_ssdb(struct acpi_device *adev, struct ipu_sensor *sensor)
|
|||
return ret;
|
||||
|
||||
if (ssdb.vcmtype > ARRAY_SIZE(ipu_vcm_types)) {
|
||||
dev_warn(&adev->dev, "Unknown VCM type %d\n", ssdb.vcmtype);
|
||||
dev_warn(ADEV_DEV(adev), "Unknown VCM type %d\n", ssdb.vcmtype);
|
||||
ssdb.vcmtype = 0;
|
||||
}
|
||||
|
||||
if (ssdb.lanes > IPU_MAX_LANES) {
|
||||
dev_err(&adev->dev, "Number of lanes in SSDB is invalid\n");
|
||||
dev_err(ADEV_DEV(adev), "Number of lanes in SSDB is invalid\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -462,8 +475,14 @@ static void ipu_bridge_create_connection_swnodes(struct ipu_bridge *bridge,
|
|||
sensor->ipu_properties);
|
||||
|
||||
if (sensor->csi_dev) {
|
||||
const char *device_hid = "";
|
||||
|
||||
#if IS_ENABLED(CONFIG_ACPI)
|
||||
device_hid = acpi_device_hid(sensor->ivsc_adev);
|
||||
#endif
|
||||
|
||||
snprintf(sensor->ivsc_name, sizeof(sensor->ivsc_name), "%s-%u",
|
||||
acpi_device_hid(sensor->ivsc_adev), sensor->link);
|
||||
device_hid, sensor->link);
|
||||
|
||||
nodes[SWNODE_IVSC_HID] = NODE_SENSOR(sensor->ivsc_name,
|
||||
sensor->ivsc_properties);
|
||||
|
@ -628,11 +647,15 @@ static int ipu_bridge_connect_sensor(const struct ipu_sensor_config *cfg,
|
|||
{
|
||||
struct fwnode_handle *fwnode, *primary;
|
||||
struct ipu_sensor *sensor;
|
||||
struct acpi_device *adev;
|
||||
struct acpi_device *adev = NULL;
|
||||
int ret;
|
||||
|
||||
#if IS_ENABLED(CONFIG_ACPI)
|
||||
for_each_acpi_dev_match(adev, cfg->hid, NULL, -1) {
|
||||
if (!adev->status.enabled)
|
||||
#else
|
||||
while (true) {
|
||||
#endif
|
||||
if (!ACPI_PTR(adev->status.enabled))
|
||||
continue;
|
||||
|
||||
if (bridge->n_sensors >= IPU_MAX_PORTS) {
|
||||
|
@ -668,7 +691,7 @@ static int ipu_bridge_connect_sensor(const struct ipu_sensor_config *cfg,
|
|||
goto err_free_swnodes;
|
||||
}
|
||||
|
||||
sensor->adev = acpi_dev_get(adev);
|
||||
sensor->adev = ACPI_PTR(acpi_dev_get(adev));
|
||||
|
||||
primary = acpi_fwnode_handle(adev);
|
||||
primary->secondary = fwnode;
|
||||
|
@ -724,11 +747,16 @@ static int ipu_bridge_ivsc_is_ready(void)
|
|||
unsigned int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(ipu_supported_sensors); i++) {
|
||||
#if IS_ENABLED(CONFIG_ACPI)
|
||||
const struct ipu_sensor_config *cfg =
|
||||
&ipu_supported_sensors[i];
|
||||
|
||||
for_each_acpi_dev_match(sensor_adev, cfg->hid, NULL, -1) {
|
||||
if (!sensor_adev->status.enabled)
|
||||
#else
|
||||
while (true) {
|
||||
sensor_adev = NULL;
|
||||
#endif
|
||||
if (!ACPI_PTR(sensor_adev->status.enabled))
|
||||
continue;
|
||||
|
||||
adev = ipu_bridge_get_ivsc_acpi_dev(sensor_adev);
|
||||
|
|
|
@ -79,6 +79,8 @@ struct mtk_vcodec_fw *mtk_vcodec_fw_scp_init(void *priv, enum mtk_vcodec_fw_use
|
|||
}
|
||||
|
||||
fw = devm_kzalloc(&plat_dev->dev, sizeof(*fw), GFP_KERNEL);
|
||||
if (!fw)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
fw->type = SCP;
|
||||
fw->ops = &mtk_vcodec_rproc_msg;
|
||||
fw->scp = scp;
|
||||
|
|
|
@ -186,7 +186,12 @@
|
|||
#define RTL8366RB_LED_BLINKRATE_222MS 0x0004
|
||||
#define RTL8366RB_LED_BLINKRATE_446MS 0x0005
|
||||
|
||||
/* LED trigger event for each group */
|
||||
#define RTL8366RB_LED_CTRL_REG 0x0431
|
||||
#define RTL8366RB_LED_CTRL_OFFSET(led_group) \
|
||||
(4 * (led_group))
|
||||
#define RTL8366RB_LED_CTRL_MASK(led_group) \
|
||||
(0xf << RTL8366RB_LED_CTRL_OFFSET(led_group))
|
||||
#define RTL8366RB_LED_OFF 0x0
|
||||
#define RTL8366RB_LED_DUP_COL 0x1
|
||||
#define RTL8366RB_LED_LINK_ACT 0x2
|
||||
|
@ -203,6 +208,11 @@
|
|||
#define RTL8366RB_LED_LINK_TX 0xd
|
||||
#define RTL8366RB_LED_MASTER 0xe
|
||||
#define RTL8366RB_LED_FORCE 0xf
|
||||
|
||||
/* The RTL8366RB_LED_X_X registers are used to manually set the LED state only
|
||||
* when the corresponding LED group in RTL8366RB_LED_CTRL_REG is
|
||||
* RTL8366RB_LED_FORCE. Otherwise, it is ignored.
|
||||
*/
|
||||
#define RTL8366RB_LED_0_1_CTRL_REG 0x0432
|
||||
#define RTL8366RB_LED_1_OFFSET 6
|
||||
#define RTL8366RB_LED_2_3_CTRL_REG 0x0433
|
||||
|
@ -998,28 +1008,20 @@ static int rtl8366rb_setup(struct dsa_switch *ds)
|
|||
*/
|
||||
if (priv->leds_disabled) {
|
||||
/* Turn everything off */
|
||||
regmap_update_bits(priv->map,
|
||||
RTL8366RB_LED_0_1_CTRL_REG,
|
||||
0x0FFF, 0);
|
||||
regmap_update_bits(priv->map,
|
||||
RTL8366RB_LED_2_3_CTRL_REG,
|
||||
0x0FFF, 0);
|
||||
regmap_update_bits(priv->map,
|
||||
RTL8366RB_INTERRUPT_CONTROL_REG,
|
||||
RTL8366RB_P4_RGMII_LED,
|
||||
0);
|
||||
val = RTL8366RB_LED_OFF;
|
||||
} else {
|
||||
/* TODO: make this configurable per LED */
|
||||
val = RTL8366RB_LED_FORCE;
|
||||
}
|
||||
for (i = 0; i < 4; i++) {
|
||||
ret = regmap_update_bits(priv->map,
|
||||
RTL8366RB_LED_CTRL_REG,
|
||||
0xf << (i * 4),
|
||||
val << (i * 4));
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
for (i = 0; i < RTL8366RB_NUM_LEDGROUPS; i++) {
|
||||
val = RTL8366RB_LED_OFF << RTL8366RB_LED_CTRL_OFFSET(i);
|
||||
ret = regmap_update_bits(priv->map,
|
||||
RTL8366RB_LED_CTRL_REG,
|
||||
RTL8366RB_LED_CTRL_MASK(i),
|
||||
val);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
ret = rtl8366_reset_vlan(priv);
|
||||
|
@ -1134,52 +1136,6 @@ rtl8366rb_mac_link_down(struct dsa_switch *ds, int port, unsigned int mode,
|
|||
}
|
||||
}
|
||||
|
||||
static void rb8366rb_set_port_led(struct realtek_priv *priv,
|
||||
int port, bool enable)
|
||||
{
|
||||
u16 val = enable ? 0x3f : 0;
|
||||
int ret;
|
||||
|
||||
if (priv->leds_disabled)
|
||||
return;
|
||||
|
||||
switch (port) {
|
||||
case 0:
|
||||
ret = regmap_update_bits(priv->map,
|
||||
RTL8366RB_LED_0_1_CTRL_REG,
|
||||
0x3F, val);
|
||||
break;
|
||||
case 1:
|
||||
ret = regmap_update_bits(priv->map,
|
||||
RTL8366RB_LED_0_1_CTRL_REG,
|
||||
0x3F << RTL8366RB_LED_1_OFFSET,
|
||||
val << RTL8366RB_LED_1_OFFSET);
|
||||
break;
|
||||
case 2:
|
||||
ret = regmap_update_bits(priv->map,
|
||||
RTL8366RB_LED_2_3_CTRL_REG,
|
||||
0x3F, val);
|
||||
break;
|
||||
case 3:
|
||||
ret = regmap_update_bits(priv->map,
|
||||
RTL8366RB_LED_2_3_CTRL_REG,
|
||||
0x3F << RTL8366RB_LED_3_OFFSET,
|
||||
val << RTL8366RB_LED_3_OFFSET);
|
||||
break;
|
||||
case 4:
|
||||
ret = regmap_update_bits(priv->map,
|
||||
RTL8366RB_INTERRUPT_CONTROL_REG,
|
||||
RTL8366RB_P4_RGMII_LED,
|
||||
enable ? RTL8366RB_P4_RGMII_LED : 0);
|
||||
break;
|
||||
default:
|
||||
dev_err(priv->dev, "no LED for port %d\n", port);
|
||||
return;
|
||||
}
|
||||
if (ret)
|
||||
dev_err(priv->dev, "error updating LED on port %d\n", port);
|
||||
}
|
||||
|
||||
static int
|
||||
rtl8366rb_port_enable(struct dsa_switch *ds, int port,
|
||||
struct phy_device *phy)
|
||||
|
@ -1193,7 +1149,6 @@ rtl8366rb_port_enable(struct dsa_switch *ds, int port,
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
rb8366rb_set_port_led(priv, port, true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1208,8 +1163,6 @@ rtl8366rb_port_disable(struct dsa_switch *ds, int port)
|
|||
BIT(port));
|
||||
if (ret)
|
||||
return;
|
||||
|
||||
rb8366rb_set_port_led(priv, port, false);
|
||||
}
|
||||
|
||||
static int
|
||||
|
|
|
@ -656,9 +656,6 @@ tx_done:
|
|||
return NETDEV_TX_OK;
|
||||
|
||||
tx_dma_error:
|
||||
if (BNXT_TX_PTP_IS_SET(lflags))
|
||||
atomic_inc(&bp->ptp_cfg->tx_avail);
|
||||
|
||||
last_frag = i;
|
||||
|
||||
/* start back at beginning and unmap skb */
|
||||
|
@ -680,6 +677,8 @@ tx_dma_error:
|
|||
tx_free:
|
||||
dev_kfree_skb_any(skb);
|
||||
tx_kick_pending:
|
||||
if (BNXT_TX_PTP_IS_SET(lflags))
|
||||
atomic_inc(&bp->ptp_cfg->tx_avail);
|
||||
if (txr->kick_pending)
|
||||
bnxt_txr_db_kick(bp, txr, txr->tx_prod);
|
||||
txr->tx_buf_ring[txr->tx_prod].skb = NULL;
|
||||
|
|
|
@ -5348,7 +5348,7 @@ static int __maybe_unused ice_suspend(struct device *dev)
|
|||
*/
|
||||
disabled = ice_service_task_stop(pf);
|
||||
|
||||
ice_unplug_aux_dev(pf);
|
||||
ice_deinit_rdma(pf);
|
||||
|
||||
/* Already suspended?, then there is nothing to do */
|
||||
if (test_and_set_bit(ICE_SUSPENDED, pf->state)) {
|
||||
|
@ -5428,6 +5428,11 @@ static int __maybe_unused ice_resume(struct device *dev)
|
|||
if (ret)
|
||||
dev_err(dev, "Cannot restore interrupt scheme: %d\n", ret);
|
||||
|
||||
ret = ice_init_rdma(pf);
|
||||
if (ret)
|
||||
dev_err(dev, "Reinitialize RDMA during resume failed: %d\n",
|
||||
ret);
|
||||
|
||||
clear_bit(ICE_DOWN, pf->state);
|
||||
/* Now perform PF reset and rebuild */
|
||||
reset_type = ICE_RESET_PFR;
|
||||
|
|
|
@ -1829,7 +1829,8 @@ ice_aq_alloc_free_vsi_list(struct ice_hw *hw, u16 *vsi_list_id,
|
|||
lkup_type == ICE_SW_LKUP_ETHERTYPE_MAC ||
|
||||
lkup_type == ICE_SW_LKUP_PROMISC ||
|
||||
lkup_type == ICE_SW_LKUP_PROMISC_VLAN ||
|
||||
lkup_type == ICE_SW_LKUP_DFLT) {
|
||||
lkup_type == ICE_SW_LKUP_DFLT ||
|
||||
lkup_type == ICE_SW_LKUP_LAST) {
|
||||
sw_buf->res_type = cpu_to_le16(ICE_AQC_RES_TYPE_VSI_LIST_REP);
|
||||
} else if (lkup_type == ICE_SW_LKUP_VLAN) {
|
||||
if (opc == ice_aqc_opc_alloc_res)
|
||||
|
@ -2775,7 +2776,8 @@ ice_update_vsi_list_rule(struct ice_hw *hw, u16 *vsi_handle_arr, u16 num_vsi,
|
|||
lkup_type == ICE_SW_LKUP_ETHERTYPE_MAC ||
|
||||
lkup_type == ICE_SW_LKUP_PROMISC ||
|
||||
lkup_type == ICE_SW_LKUP_PROMISC_VLAN ||
|
||||
lkup_type == ICE_SW_LKUP_DFLT)
|
||||
lkup_type == ICE_SW_LKUP_DFLT ||
|
||||
lkup_type == ICE_SW_LKUP_LAST)
|
||||
rule_type = remove ? ICE_AQC_SW_RULES_T_VSI_LIST_CLEAR :
|
||||
ICE_AQC_SW_RULES_T_VSI_LIST_SET;
|
||||
else if (lkup_type == ICE_SW_LKUP_VLAN)
|
||||
|
|
|
@ -4001,7 +4001,10 @@ static int mvpp2_rx(struct mvpp2_port *port, struct napi_struct *napi,
|
|||
}
|
||||
}
|
||||
|
||||
skb = build_skb(data, frag_size);
|
||||
if (frag_size)
|
||||
skb = build_skb(data, frag_size);
|
||||
else
|
||||
skb = slab_build_skb(data);
|
||||
if (!skb) {
|
||||
netdev_warn(port->dev, "skb build failed\n");
|
||||
goto err_drop_frame;
|
||||
|
|
|
@ -9,10 +9,9 @@ obj-$(CONFIG_OCTEONTX2_VF) += rvu_nicvf.o otx2_ptp.o
|
|||
rvu_nicpf-y := otx2_pf.o otx2_common.o otx2_txrx.o otx2_ethtool.o \
|
||||
otx2_flows.o otx2_tc.o cn10k.o otx2_dmac_flt.o \
|
||||
otx2_devlink.o qos_sq.o qos.o
|
||||
rvu_nicvf-y := otx2_vf.o otx2_devlink.o
|
||||
rvu_nicvf-y := otx2_vf.o
|
||||
|
||||
rvu_nicpf-$(CONFIG_DCB) += otx2_dcbnl.o
|
||||
rvu_nicvf-$(CONFIG_DCB) += otx2_dcbnl.o
|
||||
rvu_nicpf-$(CONFIG_MACSEC) += cn10k_macsec.o
|
||||
|
||||
ccflags-y += -I$(srctree)/drivers/net/ethernet/marvell/octeontx2/af
|
||||
|
|
|
@ -54,6 +54,7 @@ int otx2_pfc_txschq_config(struct otx2_nic *pfvf)
|
|||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(otx2_pfc_txschq_config);
|
||||
|
||||
static int otx2_pfc_txschq_alloc_one(struct otx2_nic *pfvf, u8 prio)
|
||||
{
|
||||
|
@ -122,6 +123,7 @@ int otx2_pfc_txschq_alloc(struct otx2_nic *pfvf)
|
|||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(otx2_pfc_txschq_alloc);
|
||||
|
||||
static int otx2_pfc_txschq_stop_one(struct otx2_nic *pfvf, u8 prio)
|
||||
{
|
||||
|
@ -260,6 +262,7 @@ update_sq_smq_map:
|
|||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(otx2_pfc_txschq_update);
|
||||
|
||||
int otx2_pfc_txschq_stop(struct otx2_nic *pfvf)
|
||||
{
|
||||
|
@ -282,6 +285,7 @@ int otx2_pfc_txschq_stop(struct otx2_nic *pfvf)
|
|||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(otx2_pfc_txschq_stop);
|
||||
|
||||
int otx2_config_priority_flow_ctrl(struct otx2_nic *pfvf)
|
||||
{
|
||||
|
@ -321,6 +325,7 @@ unlock:
|
|||
mutex_unlock(&pfvf->mbox.lock);
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL(otx2_config_priority_flow_ctrl);
|
||||
|
||||
void otx2_update_bpid_in_rqctx(struct otx2_nic *pfvf, int vlan_prio, int qidx,
|
||||
bool pfc_enable)
|
||||
|
@ -385,6 +390,7 @@ out:
|
|||
"Updating BPIDs in CQ and Aura contexts of RQ%d failed with err %d\n",
|
||||
qidx, err);
|
||||
}
|
||||
EXPORT_SYMBOL(otx2_update_bpid_in_rqctx);
|
||||
|
||||
static int otx2_dcbnl_ieee_getpfc(struct net_device *dev, struct ieee_pfc *pfc)
|
||||
{
|
||||
|
@ -472,3 +478,4 @@ int otx2_dcbnl_set_ops(struct net_device *dev)
|
|||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(otx2_dcbnl_set_ops);
|
||||
|
|
|
@ -112,6 +112,7 @@ err_dl:
|
|||
devlink_free(dl);
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL(otx2_register_dl);
|
||||
|
||||
void otx2_unregister_dl(struct otx2_nic *pfvf)
|
||||
{
|
||||
|
@ -123,3 +124,4 @@ void otx2_unregister_dl(struct otx2_nic *pfvf)
|
|||
ARRAY_SIZE(otx2_dl_params));
|
||||
devlink_free(dl);
|
||||
}
|
||||
EXPORT_SYMBOL(otx2_unregister_dl);
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user