Linux 5.4.17
Greg KH
maintainerI'm announcing the release of the 5.4.17 kernel.
All users of the 5.4 kernel series must upgrade.
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.4.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arc/plat-eznps/Kconfig | 2 arch/arm/configs/aspeed_g5_defconfig | 1 arch/arm64/kvm/debug.c | 6 arch/um/include/asm/common.lds.S | 2 arch/um/kernel/dyn.lds.S | 1 crypto/af_alg.c | 6 crypto/pcrypt.c | 3 drivers/android/binder.c | 37 +-- drivers/atm/eni.c | 4 drivers/base/component.c | 8 drivers/base/test/test_async_driver_probe.c | 3 drivers/bluetooth/btbcm.c | 6 drivers/bluetooth/btusb.c | 2 drivers/bus/ti-sysc.c | 27 ++ drivers/crypto/caam/ctrl.c | 6 drivers/crypto/chelsio/chcr_algo.c | 16 - drivers/crypto/vmx/aes_xts.c | 3 drivers/extcon/extcon-intel-cht-wc.c | 16 + drivers/gpio/Kconfig | 1 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 1 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 45 ++- drivers/hid/hid-asus.c | 3 drivers/hid/hid-ids.h | 3 drivers/hid/hid-ite.c | 3 drivers/hid/hid-multitouch.c | 5 drivers/hid/hid-quirks.c | 1 drivers/hid/hid-steam.c | 4 drivers/hid/i2c-hid/i2c-hid-core.c | 16 + drivers/hid/intel-ish-hid/ipc/hw-ish.h | 2 drivers/hid/intel-ish-hid/ipc/pci-ish.c | 2 drivers/hid/wacom_wac.c | 6 drivers/iio/adc/stm32-dfsdm-adc.c | 2 drivers/iio/gyro/st_gyro_core.c | 75 ++++++ drivers/iommu/amd_iommu.c | 170 ++++++++------- drivers/iommu/amd_iommu_types.h | 2 drivers/iommu/dma-iommu.c | 3 drivers/media/usb/dvb-usb-v2/dvbsky.c | 3 drivers/mfd/intel-lpss-pci.c | 13 + drivers/misc/mei/hdcp/mei_hdcp.c | 33 ++ drivers/misc/mei/hw-me-regs.h | 4 drivers/misc/mei/pci-me.c | 2 drivers/mmc/host/sdhci-pci-core.c | 53 ++++ drivers/mmc/host/sdhci-pci.h | 2 drivers/net/can/m_can/tcan4x5x.c | 27 ++ drivers/net/ethernet/broadcom/b44.c | 9 drivers/net/ethernet/google/gve/gve_rx.c | 2 drivers/net/ethernet/google/gve/gve_tx.c | 6 drivers/net/ethernet/mellanox/mlxsw/minimal.c | 2 drivers/net/ethernet/socionext/netsec.c | 4 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 32 ++ drivers/net/wan/sdla.c | 2 drivers/net/wireless/ath/ath9k/hif_usb.c | 2 drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c | 4 drivers/net/wireless/intersil/orinoco/orinoco_usb.c | 4 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c | 2 drivers/net/wireless/rsi/rsi_91x_hal.c | 12 - drivers/net/wireless/rsi/rsi_91x_usb.c | 37 ++- drivers/net/wireless/zydas/zd1211rw/zd_usb.c | 2 drivers/pci/quirks.c | 34 +++ drivers/perf/fsl_imx8_ddr_perf.c | 63 +++-- drivers/phy/motorola/phy-cpcap-usb.c | 18 + drivers/phy/qualcomm/phy-qcom-qmp.c | 2 drivers/platform/x86/dell-laptop.c | 26 ++ drivers/power/supply/ingenic-battery.c | 15 - drivers/spi/spi-dw.c | 15 + drivers/spi/spi-dw.h | 1 drivers/spi/spi-pxa2xx.c | 4 drivers/staging/most/net/net.c | 10 drivers/staging/mt7621-pci/pci-mt7621.c | 23 +- drivers/staging/vt6656/device.h | 2 drivers/staging/vt6656/int.c | 6 drivers/staging/vt6656/main_usb.c | 1 drivers/staging/vt6656/rxtx.c | 26 +- drivers/staging/wlan-ng/prism2mgmt.c | 2 drivers/tty/serial/8250/8250_bcm2835aux.c | 2 drivers/tty/serial/imx.c | 51 +++- drivers/usb/dwc3/core.c | 3 drivers/usb/dwc3/dwc3-pci.c | 4 drivers/usb/host/xhci-tegra.c | 1 drivers/usb/musb/jz4740.c | 7 drivers/usb/serial/ir-usb.c | 136 +++++++++--- drivers/usb/storage/unusual_uas.h | 7 drivers/usb/typec/tcpm/fusb302.c | 2 drivers/usb/typec/tcpm/wcove.c | 2 drivers/watchdog/Kconfig | 1 drivers/watchdog/orion_wdt.c | 4 drivers/watchdog/rn5t618_wdt.c | 1 fs/cifs/cifsglob.h | 1 fs/cifs/smb2misc.c | 2 fs/cifs/smb2ops.c | 9 fs/cifs/smb2transport.c | 2 fs/cifs/transport.c | 3 fs/debugfs/file.c | 17 - include/linux/platform_data/ti-sysc.h | 2 include/linux/power/smartreflex.h | 3 include/linux/usb/irda.h | 13 + include/media/dvb-usb-ids.h | 1 include/net/pkt_cls.h | 33 +- include/net/sch_generic.h | 3 include/net/udp.h | 3 init/Kconfig | 1 kernel/gcov/Kconfig | 2 net/bluetooth/hci_core.c | 26 ++ net/ipv4/nexthop.c | 4 net/rxrpc/input.c | 12 - net/sched/cls_basic.c | 11 net/sched/cls_bpf.c | 11 net/sched/cls_flower.c | 11 net/sched/cls_fw.c | 11 net/sched/cls_matchall.c | 11 net/sched/cls_route.c | 11 net/sched/cls_rsvp.h | 11 net/sched/cls_tcindex.c | 11 net/sched/cls_u32.c | 11 net/sched/ematch.c | 3 net/sched/sch_api.c | 47 +++- sound/pci/hda/patch_realtek.c | 17 - sound/soc/fsl/fsl_audmix.c | 9 sound/soc/intel/boards/cht_bsw_rt5645.c | 26 +- sound/soc/soc-topology.c | 6 sound/soc/sof/intel/hda-dai.c | 11 sound/soc/sof/ipc.c | 3 tools/testing/selftests/bpf/bpf_helpers.h | 2 tools/testing/selftests/bpf/progs/test_get_stack_rawtp.c | 3 125 files changed, 1161 insertions(+), 423 deletions(-)
Aaron Ma (1):
HID: multitouch: Add LG MELF0410 I2C touchscreen support
Adrian Hunter (1):
mmc: sdhci-pci: Add support for Intel JSL
Andre Heider (1):
Bluetooth: btbcm: Use the BDADDR_PROPERTY quirk
Andreas Kemnade (1):
watchdog: rn5t618_wdt: fix module aliases
Andrew Murray (1):
KVM: arm64: Write arch.mdcr_el2 changes since last vcpu_load on VHE
Andrey Shvetsov (1):
staging: most: net: fix buffer overflow
Andrii Nakryiko (1):
libbpf: Fix BTF-defined map's __type macro handling of arrays
Andy Shevchenko (2):
iio: st_gyro: Correct data for LSM9DS0 gyro
mfd: intel-lpss: Add Intel Comet Lake PCH-H PCI IDs
Arnd Bergmann (1):
atm: eni: fix uninitialized variable warning
Ben Dooks (1):
ARM: OMAP2+: SmartReflex: add omap_sr_pdata definition
Bin Liu (1):
usb: dwc3: turn off VBUS when leaving host mode
Bjorn Andersson (1):
phy: qcom-qmp: Increase PHY ready timeout
Christophe JAILLET (1):
mlxsw: minimal: Fix an error handling path in 'mlxsw_m_port_create()'
Chuhong Yuan (1):
ASoC: fsl_audmix: add missed pm_runtime_disable
Colin Ian King (1):
staging: wlan-ng: ensure error return is actually returned
Cong Wang (2):
net_sched: fix ops->bind_class() implementations
net_sched: walk through all child classes in tc_bind_tclass()
Daniel Axtens (1):
crypto: vmx - reject xts inputs that are too short
David Engraf (1):
watchdog: max77620_wdt: fix potential build errors
David Howells (1):
rxrpc: Fix use-after-free in rxrpc_receive_data()
Dmitry Osipenko (1):
gpio: max77620: Add missing dependency on GPIOLIB_IRQCHIP
Dragos Tarcatu (1):
ASoC: topology: Prevent use-after-free in snd_soc_get_pcm_runtime()
Eric Biggers (1):
crypto: chelsio - fix writing tfm flags to wrong place
Eric Dumazet (1):
net_sched: ematch: reject invalid TCF_EM_SIMPLE
Eric Snowberg (1):
debugfs: Return -EPERM when locked down
Even Xu (1):
HID: intel-ish-hid: ipc: add CMP device id
Fenghua Yu (1):
drivers/net/b44: Change to non-atomic bit operations on pwol_mask
Greg Kroah-Hartman (1):
Linux 5.4.17
Guenter Roeck (1):
driver core: Fix test_async_driver_probe if NUMA is disabled
Hans de Goede (2):
HID: ite: Add USB id match for Acer SW5-012 keyboard dock
HID: asus: Ignore Asus vendor-page usage-code 0xff events
Heikki Krogerus (1):
usb: dwc3: pci: add ID for the Intel Comet Lake -V variant
Herbert Xu (2):
crypto: af_alg - Use bh_lock_sock in sk_destruct
crypto: pcrypt - Fix user-after-free on module unload
Hui Wang (1):
ALSA: hda/realtek - Move some alc236 pintbls to fallback table
Iuliana Prodan (1):
crypto: caam - do not reset pointer size from MCFGR register
Jarkko Nikula (1):
spi: pxa2xx: Add support for Intel Comet Lake-H
Jason Gerecke (1):
HID: wacom: Recognize new MobileStudio Pro PID
Jiange Zhao (1):
drm/amdgpu/SRIOV: add navi12 pci id for SRIOV (v2)
Jiping Ma (1):
stmmac: debugfs entry name is not be changed when udev rename device name.
Joakim Zhang (1):
perf/imx_ddr: Add enhanced AXI ID filter support
Joel Stanley (1):
ARM: config: aspeed-g5: Enable 8250_DW quirks
Johan Hovold (14):
Bluetooth: btusb: fix non-atomic allocation in completion handler
orinoco_usb: fix interface sanity check
rsi_91x_usb: fix interface sanity check
USB: serial: ir-usb: add missing endpoint sanity check
USB: serial: ir-usb: fix link-speed handling
USB: serial: ir-usb: fix IrLAP framing
ath9k: fix storage endpoint lookup
brcmfmac: fix interface sanity check
rtl8xxxu: fix interface sanity check
zd1211rw: fix storage endpoint lookup
rsi: fix use-after-free on failed probe and unbind
rsi: fix use-after-free on probe errors
rsi: fix memory leak on failed URB submission
rsi: fix non-atomic allocation in completion handler
Johannes Berg (1):
Revert "um: Enable CONFIG_CONSTRUCTORS"
Kai Vehmanen (1):
ASoC: SOF: fix fault at driver unload after failed probe
Krzysztof Kozlowski (1):
net: wan: sdla: Fix cast from pointer to integer of different size
Laura Abbott (1):
usb-storage: Disable UAS on JMicron SATA enclosure
Liran Alon (1):
net: Google gve: Remove dma_wmb() before ringing doorbell
Logan Gunthorpe (2):
iommu/amd: Support multiple PCI DMA aliases in device table iommu/amd: Support multiple PCI DMA aliases in IRQ Remapping
Lorenzo Bianconi (2):
net: socionext: fix possible user-after-free in netsec_process_rx
net: socionext: fix xdp_result initialization in netsec_process_rx
Lubomir Rintel (1):
component: do not dereference opaque pointer in debugfs
Lukas Wunner (1):
serial: 8250_bcm2835aux: Fix line mismatch on driver unbind
Malcolm Priestley (3):
staging: vt6656: correct packet types for CTS protect, mode.
staging: vt6656: use NULLFUCTION stack on mac80211
staging: vt6656: Fix false Tx excessive retries reporting.
Marcel Holtmann (1):
Bluetooth: Allow combination of BDADDR_PROPERTY and INVALID_BDADDR quirks
Martin Fuzzey (1):
binder: fix log spam for existing debugfs file creation.
Olivier Moysan (1):
iio: adc: stm32-dfsdm: fix single conversion
Pacien TRAN-GIRARD (1):
platform/x86: dell-laptop: disable kbd backlight on Inspiron 10xx
Pan Zhang (1):
drivers/hid/hid-multitouch.c: fix a possible null pointer access.
Paul Cercueil (2):
usb: musb: jz4740: Silence error if code is -EPROBE_DEFER power/supply: ingenic-battery: Don't change scale if there's only one
Paulo Alcantara (SUSE) (1):
cifs: Fix memory allocation in __smb2_handle_cancelled_cmd()
Pavel Balan (1):
HID: Add quirk for incorrect input length on Lenovo Y720
Peter Robinson (1):
usb: host: xhci-tegra: set MODULE_FIRMWARE for tegra186
Pierre-Louis Bossart (1):
ASoC: SOF: Intel: hda: hda-dai: fix oops on hda_link .hw_free
Priit Laes (1):
HID: Add quirk for Xin-Mo Dual Controller
Qian Cai (1):
iommu/dma: fix variable 'cookie' set but not used
Randy Dunlap (1):
arc: eznps: fix allmodconfig kconfig warning
Raul E Rangel (1):
mmc: sdhci-pci: Quirk for AMD SDHC Device 0x7906
Rodrigo Rivas Costa (1):
HID: steam: Fix input device disappearing
Ronnie Sahlberg (1):
cifs: set correct max-buffer-size for smb2_ioctl_init()
Russell King (1):
watchdog: orion: fix platform_get_irq() complaints
Sam McNally (1):
ASoC: Intel: cht_bsw_rt5645: Add quirk for boards using pmc_plt_clk_0
Sean Nyekjaer (1):
can: tcan4x5x: tcan4x5x_parse_config(): reset device before register access
Sergio Paracuellos (1):
staging: mt7621-pci: add quirks for 'E2' revision using 'soc_device_attribute'
Slawomir Pawlowski (1):
PCI: Add DMA alias quirk for Intel VCA NTB
Srinivas Pandruvada (1):
HID: intel-ish-hid: ipc: Add Tiger Lake PCI device ID
Stephen Worley (1):
net: include struct nhmsg size in nh nlmsg size
Thomas Anderson (1):
drm/amd/display: Reduce HDMI pixel encoding if max clock is exceeded
Thomas Hebb (2):
usb: typec: wcove: fix "op-sink-microwatt" default that was in mW
usb: typec: fusb302: fix "op-sink-microwatt" default that was in mW
Thomas Voegtle (1):
media: dvbsky: add support for eyeTV Geniatech T2 lite
Tomas Winkler (2):
mei: hdcp: bind only with i915 on the same PCH
mei: me: add comet point (lake) H device ids
Tony Lindgren (5):
phy: cpcap-usb: Prevent USB line glitches from waking up modem
bus: ti-sysc: Handle mstandby quirk and use it for musb
bus: ti-sysc: Use swsup quirks also for am335x musb
bus: ti-sysc: Add module enable quirk for audio AESS
bus: ti-sysc: Fix missing force mstandby quirk handling
Uwe Kleine-König (1):
serial: imx: fix a race condition in receive path
Vincent Whitchurch (1):
CIFS: Fix task struct use-after-free on reconnect
Willem de Bruijn (1):
udp: segment looped gso packets correctly
Yauhen Kharuzhy (1):
extcon-intel-cht-wc: Don't reset USB data connection at probe
wuxu.wu (1):
spi: spi-dw: Add lock protect dw_spi rx/tx to prevent concurrent calls
Greg KH
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 16 +SUBLEVEL = 17 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/arc/plat-eznps/Kconfig +1 -1
@@ -7,7 +7,7 @@ menuconfig ARC_PLAT_EZNPS bool "\"EZchip\" ARC dev platform" select CPU_BIG_ENDIAN - select CLKSRC_NPS + select CLKSRC_NPS if !PHYS_ADDR_T_64BIT select EZNPS_GIC select EZCHIP_NPS_MANAGEMENT_ENET if ETHERNET help
arch/arm/configs/aspeed_g5_defconfig +1 -0
@@ -139,6 +139,7 @@ CONFIG_SERIAL_8250_RUNTIME_UARTS=6 CONFIG_SERIAL_8250_EXTENDED=y CONFIG_SERIAL_8250_ASPEED_VUART=y CONFIG_SERIAL_8250_SHARE_IRQ=y +CONFIG_SERIAL_8250_DW=y CONFIG_SERIAL_OF_PLATFORM=y CONFIG_ASPEED_KCS_IPMI_BMC=y CONFIG_ASPEED_BT_IPMI_BMC=y
arch/arm64/kvm/debug.c +5 -1
@@ -101,7 +101,7 @@ void kvm_arm_reset_debug_ptr(struct kvm_vcpu *vcpu)void kvm_arm_setup_debug (struct kvm_vcpu *vcpu) {bool trap_debug = !(vcpu->arch.flags &KVM_ARM64_DEBUG_DIRTY ); -unsigned long mdscr; +unsigned long mdscr, orig_mdcr_el2 = vcpu->arch.mdcr_el2;trace_kvm_arm_setup_debug (vcpu, vcpu->guest_debug);
@@ -197,6 +197,10 @@ void kvm_arm_setup_debug(struct kvm_vcpu *vcpu)if (vcpu_read_sys_reg (vcpu,MDSCR_EL1 ) & (DBG_MDSCR_KDE |DBG_MDSCR_MDE )) vcpu->arch.flags |=KVM_ARM64_DEBUG_DIRTY ; +/* Write mdcr_el2 changes since vcpu_load on VHE systems */ +if (has_vhe () && orig_mdcr_el2 != vcpu->arch.mdcr_el2) +write_sysreg (vcpu->arch.mdcr_el2, mdcr_el2); +trace_kvm_arm_set_dreg32 ("MDCR_EL2" , vcpu->arch.mdcr_el2);trace_kvm_arm_set_dreg32 ("MDSCR_EL1" ,vcpu_read_sys_reg (vcpu,MDSCR_EL1 )); }
arch/um/include/asm/common.lds.S +1 -1
@@ -83,8 +83,8 @@ __preinit_array_end = .; } .init_array : { - /* dummy - we call this ourselves */ __init_array_start = .; + *(.init_array) __init_array_end = .; } .fini_array : {
arch/um/kernel/dyn.lds.S +1 -0
@@ -103,6 +103,7 @@ SECTIONS be empty, which isn't pretty. */ . = ALIGN(32 / 8); .preinit_array : { *(.preinit_array) } + .init_array : { *(.init_array) } .fini_array : { *(.fini_array) } .data : { INIT_TASK_DATA(KERNEL_STACK_SIZE)
crypto/af_alg.c +4 -2
@@ -134,11 +134,13 @@ void af_alg_release_parent(struct sock *sk) sk = ask->parent; ask =alg_sk (sk); -lock_sock (sk); +local_bh_disable (); +bh_lock_sock (sk); ask->nokey_refcnt -= nokey;if (!last) last = !--ask->refcnt; -release_sock (sk); +bh_unlock_sock (sk); +local_bh_enable ();if (last)sock_put (sk);
crypto/pcrypt.c +2 -1
@@ -362,11 +362,12 @@ static int __init pcrypt_init(void) static void __exit pcrypt_exit(void) { +crypto_unregister_template (&pcrypt_tmpl); +pcrypt_fini_padata (pencrypt);pcrypt_fini_padata (pdecrypt);kset_unregister (pcrypt_kset); -crypto_unregister_template (&pcrypt_tmpl); }subsys_initcall (pcrypt_init);
drivers/android/binder.c +19 -18
@@ -5203,10 +5203,11 @@ static int binder_mmap(struct file *filp, struct vm_area_struct *vma)static int binder_open (struct inode *nodp,struct file *filp) { -struct binder_proc *proc; +struct binder_proc *proc, *itr;struct binder_device *binder_dev;struct binderfs_info *info;struct dentry *binder_binderfs_dir_entry_proc =NULL ; +bool existing_pid = false;binder_debug (BINDER_DEBUG_OPEN_CLOSE ,"%s: %d:%d\n" , __func__, current->group_leader->pid, current->pid);
@@ -5239,19 +5240,24 @@ static int binder_open(struct inode *nodp, struct file *filp) filp->private_data = proc;mutex_lock (&binder_procs_lock); +hlist_for_each_entry (itr, &binder_procs, proc_node) { +if (itr->pid == proc->pid) { + existing_pid = true; +break ; + } + }hlist_add_head (&proc->proc_node, &binder_procs);mutex_unlock (&binder_procs_lock); -if (binder_debugfs_dir_entry_proc) { +if (binder_debugfs_dir_entry_proc && !existing_pid) {char strbuf[11 ];snprintf (strbuf,sizeof (strbuf),"%u" , proc->pid);/* -* proc debug entries are shared between contexts, so -* this will fail if the process tries to open the driver -* again with a different context. The priting code will -* anyway print all contexts that a given PID has, so this -* is not a problem. +* proc debug entries are shared between contexts. +* Only create for the first PID to avoid debugfs log spamming +* The printing code will anyway print all contexts for a given +* PID so this is not a problem. */ proc->debugfs_entry = debugfs_create_file(strbuf, 0444, binder_debugfs_dir_entry_proc,
@@ -5259,19 +5265,16 @@ static int binder_open(struct inode *nodp, struct file *filp) &proc_fops); } -if (binder_binderfs_dir_entry_proc) { +if (binder_binderfs_dir_entry_proc && !existing_pid) {char strbuf[11 ];struct dentry *binderfs_entry;snprintf (strbuf,sizeof (strbuf),"%u" , proc->pid);/* * Similar to debugfs, the process specific log file is shared -* between contexts. If the file has already been created for a -* process, the following binderfs_create_file() call will -* fail with error code EEXIST if another context of the same -* process invoked binder_open(). This is ok since same as -* debugfs, the log file will contain information on all -* contexts of a given PID. +* between contexts. Only create for the first PID. +* This is ok since same as debugfs, the log file will contain +* information on all contexts of a given PID. */ binderfs_entry =binderfs_create_file (binder_binderfs_dir_entry_proc, strbuf, &proc_fops, (void *)(unsigned long )proc->pid);
@@ -5281,10 +5284,8 @@ static int binder_open(struct inode *nodp, struct file *filp)int error; error =PTR_ERR (binderfs_entry); -if (error != -EEXIST ) { -pr_warn ("Unable to create file %s in binderfs (error %d)\n" , - strbuf, error); - } +pr_warn ("Unable to create file %s in binderfs (error %d)\n" , + strbuf, error); } }
drivers/atm/eni.c +2 -2
@@ -374,7 +374,7 @@ static int do_rx_dma(struct atm_vcc *vcc,struct sk_buff *skb, here = (eni_vcc->descr+skip) & (eni_vcc->words-1 ); dma[j++] = (here <<MID_DMA_COUNT_SHIFT ) | (vcc->vci <<MID_DMA_VCI_SHIFT ) |MID_DT_JK ; - j++; + dma[j++] =0 ; } here = (eni_vcc->descr+size+skip) & (eni_vcc->words-1 );if (!eff) size += skip;
@@ -447,7 +447,7 @@ static int do_rx_dma(struct atm_vcc *vcc,struct sk_buff *skb,if (size != eff) { dma[j++] = (here <<MID_DMA_COUNT_SHIFT ) | (vcc->vci <<MID_DMA_VCI_SHIFT ) |MID_DT_JK ; - j++; + dma[j++] =0 ; }if (!j || j >2 *RX_DMA_BUF ) { printk(KERN_CRIT DEV_LABEL "!j or j too big!!!\n");
drivers/base/component.c +4 -4
@@ -102,11 +102,11 @@ static int component_devices_show(struct seq_file *s, void *data)seq_printf (s,"%-40s %20s\n" ,"device name" ,"status" );seq_puts (s,"-------------------------------------------------------------\n" );for (i =0 ; i < match->num; i++) { -struct device *d = (struct device *)match->compare[i].data; +struct component *component = match->compare[i].component; -seq_printf (s,"%-40s %20s\n" ,dev_name (d), - match->compare[i].component ? -"registered" :"not registered" ); +seq_printf (s,"%-40s %20s\n" , + component ?dev_name (component->dev) :"(unknown)" , + component ? (component->bound ?"bound" :"not bound" ) :"not registered" ); }mutex_unlock (&component_mutex);
drivers/base/test/test_async_driver_probe.c +2 -1
@@ -44,7 +44,8 @@ static int test_probe(struct platform_device *pdev)* performing an async init on that node. */ if (dev->driver->probe_type ==PROBE_PREFER_ASYNCHRONOUS ) { -if (dev_to_node (dev) !=numa_node_id ()) { +if (IS_ENABLED (CONFIG_NUMA ) && +dev_to_node (dev) !=numa_node_id ()) {dev_warn (dev,"NUMA node mismatch %d != %d\n" ,dev_to_node (dev),numa_node_id ());atomic_inc (&warnings);
drivers/bluetooth/btbcm.c +6 -0
@@ -440,6 +440,12 @@ int btbcm_finalize(struct hci_dev *hdev)set_bit (HCI_QUIRK_STRICT_DUPLICATE_FILTER , &hdev->quirks); +/* Some devices ship with the controller default address. +* Allow the bootloader to set a valid address through the +* device tree. +*/ +set_bit (HCI_QUIRK_USE_BDADDR_PROPERTY , &hdev->quirks); +return 0 ; }EXPORT_SYMBOL_GPL (btbcm_finalize);
drivers/bluetooth/btusb.c +1 -1
@@ -2585,7 +2585,7 @@ static void btusb_mtk_wmt_recv(struct urb *urb)* and being processed the events from there then. */ if (test_bit (BTUSB_TX_WAIT_VND_EVT , &data->flags)) { - data->evt_skb =skb_clone (skb,GFP_KERNEL ); + data->evt_skb =skb_clone (skb,GFP_ATOMIC );if (!data->evt_skb) goto err_out; }
drivers/bus/ti-sysc.c +24 -3
@@ -923,6 +923,9 @@ static int sysc_enable_module(struct device *dev)return -EINVAL ; } +if (ddata->cfg.quirks &SYSC_QUIRK_SWSUP_MSTANDBY ) + best_mode =SYSC_IDLE_NO ; + reg &= ~(SYSC_IDLE_MASK << regbits->midle_shift); reg |= best_mode << regbits->midle_shift;sysc_write (ddata, ddata->offsets[SYSC_SYSCONFIG ], reg);
@@ -984,6 +987,10 @@ static int sysc_disable_module(struct device *dev)return ret; } +if (ddata->cfg.quirks & (SYSC_QUIRK_SWSUP_MSTANDBY ) || + ddata->cfg.quirks & (SYSC_QUIRK_FORCE_MSTANDBY )) + best_mode =SYSC_IDLE_FORCE ; + reg &= ~(SYSC_IDLE_MASK << regbits->midle_shift); reg |= best_mode << regbits->midle_shift;sysc_write (ddata, ddata->offsets[SYSC_SYSCONFIG ], reg);
@@ -1242,6 +1249,8 @@ static const struct sysc_revision_quirk sysc_revision_quirks[] = { SYSC_QUIRK_SWSUP_SIDLE),/* Quirks that need to be set based on detected module */ +SYSC_QUIRK ("aess" ,0 ,0 ,0x10 ,-1 ,0x40000000 ,0xffffffff , +SYSC_MODULE_QUIRK_AESS ),SYSC_QUIRK ("hdq1w" ,0 ,0 ,0x14 ,0x18 ,0x00000006 ,0xffffffff ,SYSC_MODULE_QUIRK_HDQ1W ), SYSC_QUIRK("hdq1w", 0, 0, 0x14, 0x18, 0x0000000a, 0xffffffff,
@@ -1257,6 +1266,10 @@ static const struct sysc_revision_quirk sysc_revision_quirks[] = {SYSC_QUIRK ("gpu" ,0x50000000 ,0x14 ,-1 ,-1 ,0x00010201 ,0xffffffff ,0 ),SYSC_QUIRK ("gpu" ,0x50000000 ,0xfe00 ,0xfe10 ,-1 ,0x40000000 ,0xffffffff ,SYSC_MODULE_QUIRK_SGX ), +SYSC_QUIRK ("usb_otg_hs" ,0 ,0x400 ,0x404 ,0x408 ,0x00000050 , +0xffffffff ,SYSC_QUIRK_SWSUP_SIDLE |SYSC_QUIRK_SWSUP_MSTANDBY ), +SYSC_QUIRK ("usb_otg_hs" ,0 ,0 ,0x10 ,-1 ,0x4ea2080d ,0xffffffff , +SYSC_QUIRK_SWSUP_SIDLE |SYSC_QUIRK_SWSUP_MSTANDBY ),SYSC_QUIRK ("wdt" ,0 ,0 ,0x10 ,0x14 ,0x502a0500 ,0xfffff0f0 , SYSC_MODULE_QUIRK_WDT),/* Watchdog on am3 and am4 */
@@ -1266,7 +1279,6 @@ static const struct sysc_revision_quirk sysc_revision_quirks[] = {#ifdef DEBUG SYSC_QUIRK ("adc" ,0 ,0 ,0x10 ,-1 ,0x47300001 ,0xffffffff ,0 ),SYSC_QUIRK ("atl" ,0 ,0 ,-1 ,-1 ,0x0a070100 ,0xffffffff ,0 ), -SYSC_QUIRK ("aess" ,0 ,0 ,0x10 ,-1 ,0x40000000 ,0xffffffff ,0 ),SYSC_QUIRK ("cm" ,0 ,0 ,-1 ,-1 ,0x40000301 ,0xffffffff ,0 ),SYSC_QUIRK ("control" ,0 ,0 ,0x10 ,-1 ,0x40000900 ,0xffffffff ,0 ), SYSC_QUIRK("cpgmac", 0, 0x1200, 0x1208, 0x1204, 0x4edb1902,
@@ -1315,8 +1327,6 @@ static const struct sysc_revision_quirk sysc_revision_quirks[] = {SYSC_QUIRK ("usbhstll" ,0 ,0 ,0x10 ,0x14 ,0x00000008 ,0xffffffff ,0 ),SYSC_QUIRK ("usb_host_hs" ,0 ,0 ,0x10 ,0x14 ,0x50700100 ,0xffffffff ,0 ),SYSC_QUIRK ("usb_host_hs" ,0 ,0 ,0x10 ,-1 ,0x50700101 ,0xffffffff ,0 ), -SYSC_QUIRK ("usb_otg_hs" ,0 ,0x400 ,0x404 ,0x408 ,0x00000050 , -0xffffffff ,0 ), SYSC_QUIRK("vfpe", 0, 0, 0x104, -1, 0x4d001200, 0xffffffff, 0), #endif };
@@ -1400,6 +1410,14 @@ static void sysc_clk_enable_quirk_hdq1w(struct sysc *ddata)sysc_write (ddata, offset, val); } +/* AESS (Audio Engine SubSystem) needs autogating set after enable */ +static void sysc_module_enable_quirk_aess (struct sysc *ddata) +{ +int offset =0x7c ;/* AESS_AUTO_GATING_ENABLE */ + +sysc_write (ddata, offset,1 ); +} +/* I2C needs extra enable bit toggling for reset */ static void sysc_clk_quirk_i2c (struct sysc *ddata,bool enable) {
@@ -1482,6 +1500,9 @@ static void sysc_init_module_quirks(struct sysc *ddata)return ; } +if (ddata->cfg.quirks &SYSC_MODULE_QUIRK_AESS ) + ddata->module_enable_quirk = sysc_module_enable_quirk_aess; +if (ddata->cfg.quirks &SYSC_MODULE_QUIRK_SGX ) ddata->module_enable_quirk = sysc_module_enable_quirk_sgx;
drivers/crypto/caam/ctrl.c +2 -4
@@ -685,11 +685,9 @@ static int caam_probe(struct platform_device *pdev)of_node_put (np);if (!ctrlpriv->mc_en) -clrsetbits_32 (&ctrl->mcr,MCFGR_AWCACHE_MASK |MCFGR_LONG_PTR , +clrsetbits_32 (&ctrl->mcr,MCFGR_AWCACHE_MASK ,MCFGR_AWCACHE_CACH |MCFGR_AWCACHE_BUFF | -MCFGR_WDENABLE |MCFGR_LARGE_BURST | - (sizeof (dma_addr_t) ==sizeof (u64) ? -MCFGR_LONG_PTR :0 )); +MCFGR_WDENABLE |MCFGR_LARGE_BURST );handle_imx6_err005766 (&ctrl->mcr);
drivers/crypto/chelsio/chcr_algo.c +3 -13
@@ -3194,9 +3194,6 @@ static int chcr_gcm_setauthsize(struct crypto_aead *tfm, unsigned int authsize) aeadctx->mayverify =VERIFY_SW ;break ;default : - -crypto_tfm_set_flags ((struct crypto_tfm *) tfm, -CRYPTO_TFM_RES_BAD_KEY_LEN );return -EINVAL ; }return crypto_aead_setauthsize (aeadctx->sw_cipher, authsize);
@@ -3221,8 +3218,6 @@ static int chcr_4106_4309_setauthsize(struct crypto_aead *tfm, aeadctx->mayverify =VERIFY_HW ;break ;default : -crypto_tfm_set_flags ((struct crypto_tfm *)tfm, -CRYPTO_TFM_RES_BAD_KEY_LEN );return -EINVAL ; }return crypto_aead_setauthsize (aeadctx->sw_cipher, authsize);
@@ -3263,8 +3258,6 @@ static int chcr_ccm_setauthsize(struct crypto_aead *tfm, aeadctx->mayverify =VERIFY_HW ;break ;default : -crypto_tfm_set_flags ((struct crypto_tfm *)tfm, -CRYPTO_TFM_RES_BAD_KEY_LEN );return -EINVAL ; }return crypto_aead_setauthsize (aeadctx->sw_cipher, authsize);
@@ -3289,8 +3282,7 @@ static int chcr_ccm_common_setkey(struct crypto_aead *aead, ck_size =CHCR_KEYCTX_CIPHER_KEY_SIZE_256 ; mk_size =CHCR_KEYCTX_MAC_KEY_SIZE_256 ; }else { -crypto_tfm_set_flags ((struct crypto_tfm *)aead, -CRYPTO_TFM_RES_BAD_KEY_LEN ); +crypto_aead_set_flags (aead,CRYPTO_TFM_RES_BAD_KEY_LEN ); aeadctx->enckey_len =0 ;return -EINVAL ; }
@@ -3328,8 +3320,7 @@ static int chcr_aead_rfc4309_setkey(struct crypto_aead *aead, const u8 *key,int error;if (keylen <3 ) { -crypto_tfm_set_flags ((struct crypto_tfm *)aead, -CRYPTO_TFM_RES_BAD_KEY_LEN ); +crypto_aead_set_flags (aead,CRYPTO_TFM_RES_BAD_KEY_LEN ); aeadctx->enckey_len =0 ;return -EINVAL ; }
@@ -3379,8 +3370,7 @@ static int chcr_gcm_setkey(struct crypto_aead *aead, const u8 *key, }else if (keylen ==AES_KEYSIZE_256 ) { ck_size =CHCR_KEYCTX_CIPHER_KEY_SIZE_256 ; }else { -crypto_tfm_set_flags ((struct crypto_tfm *)aead, -CRYPTO_TFM_RES_BAD_KEY_LEN ); +crypto_aead_set_flags (aead,CRYPTO_TFM_RES_BAD_KEY_LEN );pr_err ("GCM: Invalid key length %d\n" , keylen); ret = -EINVAL ; goto out;
drivers/crypto/vmx/aes_xts.c +3 -0
@@ -84,6 +84,9 @@ static int p8_aes_xts_crypt(struct skcipher_request *req, int enc)u8 tweak[AES_BLOCK_SIZE ];int ret; +if (req->cryptlen <AES_BLOCK_SIZE ) +return -EINVAL ; +if (!crypto_simd_usable () || (req->cryptlen %XTS_BLOCK_SIZE ) !=0 ) {struct skcipher_request *subreq =skcipher_request_ctx (req);
drivers/extcon/extcon-intel-cht-wc.c +14 -2
@@ -338,6 +338,7 @@ static int cht_wc_extcon_probe(struct platform_device *pdev)struct intel_soc_pmic *pmic =dev_get_drvdata (pdev->dev.parent);struct cht_wc_extcon_data *ext;unsigned long mask = ~(CHT_WC_PWRSRC_VBUS |CHT_WC_PWRSRC_USBID_MASK ); +int pwrsrc_sts, id;int irq, ret; irq =platform_get_irq (pdev,0 );
@@ -387,8 +388,19 @@ static int cht_wc_extcon_probe(struct platform_device *pdev) goto disable_sw_control; } -/* Route D+ and D- to PMIC for initial charger detection */ -cht_wc_extcon_set_phymux (ext,MUX_SEL_PMIC ); + ret =regmap_read (ext->regmap,CHT_WC_PWRSRC_STS , &pwrsrc_sts); +if (ret) { +dev_err (ext->dev,"Error reading pwrsrc status: %d\n" , ret); + goto disable_sw_control; + } + +/* +* If no USB host or device connected, route D+ and D- to PMIC for +* initial charger detection +*/ + id =cht_wc_extcon_get_id (ext, pwrsrc_sts); +if (id !=INTEL_USB_ID_GND ) +cht_wc_extcon_set_phymux (ext,MUX_SEL_PMIC );/* Get initial state */ cht_wc_extcon_pwrsrc_event (ext);
drivers/gpio/Kconfig +1 -0
@@ -1120,6 +1120,7 @@ config GPIO_MADERA config GPIO_MAX77620 tristate "GPIO support for PMIC MAX77620 and MAX20024" depends on MFD_MAX77620 + select GPIOLIB_IRQCHIP help GPIO driver for MAX77620 and MAX20024 PMIC from Maxim Semiconductor. MAX77620 PMIC has 8 pins that can be configured as GPIOs. The
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +1 -0
@@ -1023,6 +1023,7 @@ static const struct pci_device_id pciidlist[] = {/* Navi12 */ {0x1002, 0x7360, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI12|AMD_EXP_HW_SUPPORT}, + {0x1002, 0x7362, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI12|AMD_EXP_HW_SUPPORT}, {0, 0, 0} };
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +23 -22
72 lines not on this page · raw message
drivers/hid/hid-asus.c +2 -1
@@ -261,7 +261,8 @@ static int asus_event(struct hid_device *hdev, struct hid_field *field, struct hid_usage *usage, __s32 value) {if ((usage->hid &HID_USAGE_PAGE ) ==0xff310000 && - (usage->hid &HID_USAGE ) !=0x00 && !usage->type) { + (usage->hid &HID_USAGE ) !=0x00 && + (usage->hid &HID_USAGE ) !=0xff && !usage->type) {hid_warn (hdev,"Unmapped Asus vendor usagepage code 0x%02x\n" , usage->hid &HID_USAGE ); }
drivers/hid/hid-ids.h +3 -0
@@ -631,6 +631,7 @@#define USB_VENDOR_ID_ITE 0x048d#define USB_DEVICE_ID_ITE_LENOVO_YOGA 0x8386#define USB_DEVICE_ID_ITE_LENOVO_YOGA2 0x8350 +#define I2C_DEVICE_ID_ITE_LENOVO_LEGION_Y720 0x837a#define USB_DEVICE_ID_ITE_LENOVO_YOGA900 0x8396#define USB_DEVICE_ID_ITE8595 0x8595
@@ -730,6 +731,7 @@#define USB_DEVICE_ID_LG_MULTITOUCH 0x0064#define USB_DEVICE_ID_LG_MELFAS_MT 0x6007#define I2C_DEVICE_ID_LG_8001 0x8001 +#define I2C_DEVICE_ID_LG_7010 0x7010#define USB_VENDOR_ID_LOGITECH 0x046d#define USB_DEVICE_ID_LOGITECH_AUDIOHUB 0x0a0e
@@ -1098,6 +1100,7 @@#define USB_DEVICE_ID_SYNAPTICS_LTS2 0x1d10#define USB_DEVICE_ID_SYNAPTICS_HD 0x0ac3#define USB_DEVICE_ID_SYNAPTICS_QUAD_HD 0x1ac3 +#define USB_DEVICE_ID_SYNAPTICS_ACER_SWITCH5_012 0x2968#define USB_DEVICE_ID_SYNAPTICS_TP_V103 0x5710#define USB_DEVICE_ID_SYNAPTICS_ACER_SWITCH5 0x81a7
drivers/hid/hid-ite.c +3 -0
@@ -40,6 +40,9 @@ static int ite_event(struct hid_device *hdev, struct hid_field *field,static const struct hid_device_id ite_devices[] = { {HID_USB_DEVICE (USB_VENDOR_ID_ITE ,USB_DEVICE_ID_ITE8595 ) }, {HID_USB_DEVICE (USB_VENDOR_ID_258A ,USB_DEVICE_ID_258A_6A88 ) }, +/* ITE8595 USB kbd ctlr, with Synaptics touchpad connected to it. */ + {HID_USB_DEVICE (USB_VENDOR_ID_SYNAPTICS , +USB_DEVICE_ID_SYNAPTICS_ACER_SWITCH5_012 ) }, { } };MODULE_DEVICE_TABLE (hid, ite_devices);
drivers/hid/hid-multitouch.c +4 -1
@@ -1019,7 +1019,7 @@ static int mt_process_slot(struct mt_device *td, struct input_dev *input, tool =MT_TOOL_DIAL ; else if (unlikely(!confidence_state)) { tool =MT_TOOL_PALM ; -if (!active && +if (!active && mt &&input_mt_is_active (&mt->slots[slotnum])) {/* * The non-confidence was reported for
@@ -1985,6 +1985,9 @@ static const struct hid_device_id mt_devices[] = { { .driver_data = MT_CLS_LG,HID_USB_DEVICE (USB_VENDOR_ID_LG , USB_DEVICE_ID_LG_MELFAS_MT) }, + { .driver_data = MT_CLS_LG, +HID_DEVICE (BUS_I2C ,HID_GROUP_GENERIC , + USB_VENDOR_ID_LG, I2C_DEVICE_ID_LG_7010) }, /* MosArt panels */ { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
drivers/hid/hid-quirks.c +1 -0
@@ -174,6 +174,7 @@ static const struct hid_device_id hid_quirks[] = { { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SIRIUS_BATTERY_FREE_TABLET), HID_QUIRK_MULTI_INPUT }, { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD2, USB_DEVICE_ID_SMARTJOY_DUAL_PLUS), HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT }, { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_QUAD_USB_JOYPAD), HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_XIN_MO, USB_DEVICE_ID_XIN_MO_DUAL_ARCADE), HID_QUIRK_MULTI_INPUT }, { 0 } };
drivers/hid/hid-steam.c +4 -0
@@ -768,8 +768,12 @@ static int steam_probe(struct hid_device *hdev,if (steam->quirks &STEAM_QUIRK_WIRELESS ) {hid_info (hdev,"Steam wireless receiver connected" ); +/* If using a wireless adaptor ask for connection status */ + steam->connected = false;steam_request_conn_status (steam); }else { +/* A wired connection is always present */ + steam->connected = true; ret =steam_register (steam);if (ret) { hid_err(hdev,
drivers/hid/i2c-hid/i2c-hid-core.c +13 -3
@@ -49,6 +49,8 @@#define I2C_HID_QUIRK_NO_IRQ_AFTER_RESET BIT(1)#define I2C_HID_QUIRK_BOGUS_IRQ BIT(4)#define I2C_HID_QUIRK_RESET_ON_RESUME BIT(5) +#define I2C_HID_QUIRK_BAD_INPUT_SIZE BIT(6) +/* flags */ #define I2C_HID_STARTED 0
@@ -177,6 +179,8 @@ static const struct i2c_hid_quirks { I2C_HID_QUIRK_BOGUS_IRQ }, {USB_VENDOR_ID_ALPS_JP ,HID_ANY_ID , I2C_HID_QUIRK_RESET_ON_RESUME }, + { USB_VENDOR_ID_ITE, I2C_DEVICE_ID_ITE_LENOVO_LEGION_Y720, + I2C_HID_QUIRK_BAD_INPUT_SIZE }, { 0, 0 } };
@@ -498,9 +502,15 @@ static void i2c_hid_get_input(struct i2c_hid *ihid) }if ((ret_size > size) || (ret_size <2 )) { -dev_err (&ihid->client->dev,"%s: incomplete report (%d/%d)\n" , - __func__, size, ret_size); -return ; +if (ihid->quirks &I2C_HID_QUIRK_BAD_INPUT_SIZE ) { + ihid->inbuf[0 ] = size &0xff ; + ihid->inbuf[1 ] = size >>8 ; + ret_size = size; + }else { +dev_err (&ihid->client->dev,"%s: incomplete report (%d/%d)\n" , + __func__, size, ret_size); +return ; + } }i2c_hid_dbg (ihid,"input: %*ph\n" , ret_size, ihid->inbuf);
drivers/hid/intel-ish-hid/ipc/hw-ish.h +2 -0
@@ -24,7 +24,9 @@#define ICL_MOBILE_DEVICE_ID 0x34FC#define SPT_H_DEVICE_ID 0xA135#define CML_LP_DEVICE_ID 0x02FC +#define CMP_H_DEVICE_ID 0x06FC#define EHL_Ax_DEVICE_ID 0x4BB3 +#define TGL_LP_DEVICE_ID 0xA0FC#define REVISION_ID_CHT_A0 0x6#define REVISION_ID_CHT_Ax_SI 0x0
drivers/hid/intel-ish-hid/ipc/pci-ish.c +2 -0
@@ -34,7 +34,9 @@ static const struct pci_device_id ish_pci_tbl[] = { {PCI_DEVICE(PCI_VENDOR_ID_INTEL, ICL_MOBILE_DEVICE_ID)}, {PCI_DEVICE(PCI_VENDOR_ID_INTEL, SPT_H_DEVICE_ID)}, {PCI_DEVICE(PCI_VENDOR_ID_INTEL, CML_LP_DEVICE_ID)}, + {PCI_DEVICE(PCI_VENDOR_ID_INTEL, CMP_H_DEVICE_ID)}, {PCI_DEVICE(PCI_VENDOR_ID_INTEL, EHL_Ax_DEVICE_ID)}, + {PCI_DEVICE(PCI_VENDOR_ID_INTEL, TGL_LP_DEVICE_ID)}, {0, } };MODULE_DEVICE_TABLE (pci, ish_pci_tbl);
drivers/hid/wacom_wac.c +4 -2
@@ -2096,14 +2096,16 @@ static void wacom_wac_pad_event(struct hid_device *hdev, struct hid_field *field (hdev->product ==0x34d || hdev->product ==0x34e ||/* MobileStudio Pro */ hdev->product ==0x357 || hdev->product ==0x358 ||/* Intuos Pro 2 */ hdev->product ==0x392 ||/* Intuos Pro 2 */ - hdev->product == 0x398 || hdev->product == 0x399)) { /* MobileStudio Pro */ + hdev->product ==0x398 || hdev->product ==0x399 ||/* MobileStudio Pro */ + hdev->product == 0x3AA)) { /* MobileStudio Pro */ value = (field->logical_maximum - value);if (hdev->product ==0x357 || hdev->product ==0x358 || hdev->product ==0x392 ) value =wacom_offset_rotation (input, usage, value,3 ,16 );else if (hdev->product ==0x34d || hdev->product ==0x34e || - hdev->product ==0x398 || hdev->product ==0x399 ) + hdev->product ==0x398 || hdev->product ==0x399 || + hdev->product ==0x3AA ) value =wacom_offset_rotation (input, usage, value,1 ,2 ); } else {
drivers/iio/adc/stm32-dfsdm-adc.c +2 -0
@@ -1204,6 +1204,8 @@ static int stm32_dfsdm_single_conv(struct iio_dev *indio_dev,stm32_dfsdm_stop_conv (adc); +stm32_dfsdm_process_data (adc, res); + stop_dfsdm:stm32_dfsdm_stop_dfsdm (adc->dfsdm);
drivers/iio/gyro/st_gyro_core.c +74 -1
87 lines not on this page · raw message
drivers/iommu/amd_iommu.c +91 -79
304 lines not on this page · raw message
drivers/iommu/amd_iommu_types.h +1 -1
@@ -639,8 +639,8 @@ struct iommu_dev_data {struct list_head list;/* For domain->dev_list */ struct llist_node dev_data_list;/* For global dev_data_list */ struct protection_domain *domain;/* Domain the device is bound to */ +struct pci_dev *pdev;u16 devid;/* PCI Device ID */ -u16 alias;/* Alias Device ID */ bool iommu_v2;/* Device can make use of IOMMUv2 */ bool passthrough;/* Device is identity mapped */ struct {
drivers/iommu/dma-iommu.c +0 -3
@@ -1177,7 +1177,6 @@ int iommu_dma_prepare_msi(struct msi_desc *desc, phys_addr_t msi_addr) {struct device *dev =msi_desc_to_dev (desc);struct iommu_domain *domain =iommu_get_domain_for_dev (dev); -struct iommu_dma_cookie *cookie;struct iommu_dma_msi_page *msi_page;static DEFINE_MUTEX (msi_prepare_lock);/* see below */
@@ -1186,8 +1185,6 @@ int iommu_dma_prepare_msi(struct msi_desc *desc, phys_addr_t msi_addr)return 0 ; } - cookie = domain->iova_cookie; -/* * In fact the whole prepare operation should already be serialised by * irq_domain_mutex further up the callchain, but that's pretty subtle
drivers/media/usb/dvb-usb-v2/dvbsky.c +3 -0
@@ -792,6 +792,9 @@ static const struct usb_device_id dvbsky_id_table[] = { {DVB_USB_DEVICE (USB_VID_CONEXANT ,USB_PID_MYGICA_T230C , &mygica_t230c_props,"MyGica Mini DVB-T2 USB Stick T230C" , RC_MAP_TOTAL_MEDIA_IN_HAND_02) }, + { DVB_USB_DEVICE(USB_VID_CONEXANT, USB_PID_MYGICA_T230C_LITE, + &mygica_t230c_props,"MyGica Mini DVB-T2 USB Stick T230C Lite" , + NULL) }, { DVB_USB_DEVICE(USB_VID_CONEXANT, USB_PID_MYGICA_T230C2, &mygica_t230c_props,"MyGica Mini DVB-T2 USB Stick T230C v2" , RC_MAP_TOTAL_MEDIA_IN_HAND_02) },
drivers/mfd/intel-lpss-pci.c +12 -1
@@ -140,7 +140,7 @@ static const struct intel_lpss_platform_info cnl_i2c_info = { };static const struct pci_device_id intel_lpss_pci_ids[] = { -/* CML */ +/* CML-LP */ {PCI_VDEVICE (INTEL ,0x02a8 ), (kernel_ulong_t)&spt_uart_info }, {PCI_VDEVICE (INTEL ,0x02a9 ), (kernel_ulong_t)&spt_uart_info }, {PCI_VDEVICE (INTEL ,0x02aa ), (kernel_ulong_t)&spt_info },
@@ -153,6 +153,17 @@ static const struct pci_device_id intel_lpss_pci_ids[] = { { PCI_VDEVICE(INTEL, 0x02ea), (kernel_ulong_t)&cnl_i2c_info }, { PCI_VDEVICE(INTEL, 0x02eb), (kernel_ulong_t)&cnl_i2c_info }, { PCI_VDEVICE(INTEL, 0x02fb), (kernel_ulong_t)&spt_info }, +/* CML-H */ + { PCI_VDEVICE(INTEL, 0x06a8), (kernel_ulong_t)&spt_uart_info }, + { PCI_VDEVICE(INTEL, 0x06a9), (kernel_ulong_t)&spt_uart_info }, + { PCI_VDEVICE(INTEL, 0x06aa), (kernel_ulong_t)&spt_info }, + { PCI_VDEVICE(INTEL, 0x06ab), (kernel_ulong_t)&spt_info }, + { PCI_VDEVICE(INTEL, 0x06c7), (kernel_ulong_t)&spt_uart_info }, + { PCI_VDEVICE(INTEL, 0x06e8), (kernel_ulong_t)&cnl_i2c_info }, + { PCI_VDEVICE(INTEL, 0x06e9), (kernel_ulong_t)&cnl_i2c_info }, + { PCI_VDEVICE(INTEL, 0x06ea), (kernel_ulong_t)&cnl_i2c_info }, + { PCI_VDEVICE(INTEL, 0x06eb), (kernel_ulong_t)&cnl_i2c_info }, + { PCI_VDEVICE(INTEL, 0x06fb), (kernel_ulong_t)&spt_info },/* BXT A-Step */ { PCI_VDEVICE(INTEL, 0x0aac), (kernel_ulong_t)&bxt_i2c_info }, { PCI_VDEVICE(INTEL, 0x0aae), (kernel_ulong_t)&bxt_i2c_info },
drivers/misc/mei/hdcp/mei_hdcp.c +30 -3
@@ -758,11 +758,38 @@ static const struct component_master_ops mei_component_master_ops = { .unbind = mei_component_master_unbind, }; +/** +* mei_hdcp_component_match - compare function for matching mei hdcp. +* +* The function checks if the driver is i915, the subcomponent is HDCP +* and the grand parent of hdcp and the parent of i915 are the same +* PCH device. +* +* @dev: master device +* @subcomponent: subcomponent to match (I915_COMPONENT_HDCP) +* @data: compare data (mei hdcp device) +* +* Return: +* * 1 - if components match +* * 0 - otherwise +*/ static int mei_hdcp_component_match (struct device *dev,int subcomponent,void *data) { -return !strcmp (dev->driver->name,"i915" ) && - subcomponent ==I915_COMPONENT_HDCP ; +struct device *base = data; + +if (strcmp (dev->driver->name,"i915" ) || + subcomponent !=I915_COMPONENT_HDCP ) +return 0 ; + + base = base->parent; +if (!base) +return 0 ; + + base = base->parent; + dev = dev->parent; + +return (base && dev && dev == base); } static int mei_hdcp_probe(struct mei_cl_device *cldev,
@@ -786,7 +813,7 @@ static int mei_hdcp_probe(struct mei_cl_device *cldev, master_match =NULL ;component_match_add_typed (&cldev->dev, &master_match, - mei_hdcp_component_match, comp_master); + mei_hdcp_component_match, &cldev->dev);if (IS_ERR_OR_NULL (master_match)) { ret = -ENOMEM ; goto err_exit;
drivers/misc/mei/hw-me-regs.h +4 -0
@@ -81,8 +81,12 @@#define MEI_DEV_ID_CMP_LP 0x02e0/* Comet Point LP */ #define MEI_DEV_ID_CMP_LP_3 0x02e4/* Comet Point LP 3 (iTouch) */ +#define MEI_DEV_ID_CMP_V 0xA3BA/* Comet Point Lake V */ +#define MEI_DEV_ID_CMP_H 0x06e0/* Comet Lake H */ +#define MEI_DEV_ID_CMP_H_3 0x06e4/* Comet Lake H 3 (iTouch) */ +#define MEI_DEV_ID_ICP_LP 0x34E0/* Ice Lake Point LP */ #define MEI_DEV_ID_TGP_LP 0xA0E0/* Tiger Lake Point LP */
drivers/misc/mei/pci-me.c +2 -0
@@ -99,6 +99,8 @@ static const struct pci_device_id mei_me_pci_tbl[] = { {MEI_PCI_DEVICE(MEI_DEV_ID_CMP_LP, MEI_ME_PCH12_CFG)}, {MEI_PCI_DEVICE(MEI_DEV_ID_CMP_LP_3, MEI_ME_PCH8_CFG)}, {MEI_PCI_DEVICE(MEI_DEV_ID_CMP_V, MEI_ME_PCH12_CFG)}, + {MEI_PCI_DEVICE(MEI_DEV_ID_CMP_H, MEI_ME_PCH12_CFG)}, + {MEI_PCI_DEVICE(MEI_DEV_ID_CMP_H_3, MEI_ME_PCH8_CFG)}, {MEI_PCI_DEVICE(MEI_DEV_ID_ICP_LP, MEI_ME_PCH12_CFG)},
drivers/mmc/host/sdhci-pci-core.c +52 -1
75 lines not on this page · raw message
drivers/mmc/host/sdhci-pci.h +2 -0
@@ -55,6 +55,8 @@#define PCI_DEVICE_ID_INTEL_CML_EMMC 0x02c4#define PCI_DEVICE_ID_INTEL_CML_SD 0x02f5#define PCI_DEVICE_ID_INTEL_CMLH_SD 0x06f5 +#define PCI_DEVICE_ID_INTEL_JSL_EMMC 0x4dc4 +#define PCI_DEVICE_ID_INTEL_JSL_SD 0x4df8#define PCI_DEVICE_ID_SYSKONNECT_8000 0x8000#define PCI_DEVICE_ID_VIA_95D0 0x95d0
drivers/net/can/m_can/tcan4x5x.c +26 -1
@@ -164,6 +164,28 @@ static void tcan4x5x_check_wake(struct tcan4x5x_priv *priv) } } +static int tcan4x5x_reset (struct tcan4x5x_priv *priv) +{ +int ret =0 ; + +if (priv->reset_gpio) { +gpiod_set_value (priv->reset_gpio,1 ); + +/* tpulse_width minimum 30us */ +usleep_range (30 ,100 ); +gpiod_set_value (priv->reset_gpio,0 ); + }else { + ret =regmap_write (priv->regmap,TCAN4X5X_CONFIG , +TCAN4X5X_SW_RESET ); +if (ret) +return ret; + } + +usleep_range (700 ,1000 ); + +return ret; +} +static int regmap_spi_gather_write (void *context,const void *reg,size_t reg_len,const void *val,size_t val_len)
@@ -341,6 +363,7 @@ static int tcan4x5x_init(struct m_can_classdev *cdev)static int tcan4x5x_parse_config (struct m_can_classdev *cdev) {struct tcan4x5x_priv *tcan4x5x = cdev->device_data; +int ret; tcan4x5x->device_wake_gpio =devm_gpiod_get (cdev->dev,"device-wake" ,GPIOD_OUT_HIGH );
@@ -354,7 +377,9 @@ static int tcan4x5x_parse_config(struct m_can_classdev *cdev)if (IS_ERR (tcan4x5x->reset_gpio)) tcan4x5x->reset_gpio =NULL ; -usleep_range (700 ,1000 ); + ret =tcan4x5x_reset (tcan4x5x); +if (ret) +return ret; tcan4x5x->device_state_gpio = devm_gpiod_get_optional(cdev->dev, "device-state",
drivers/net/ethernet/broadcom/b44.c +6 -3
@@ -1519,8 +1519,10 @@ static int b44_magic_pattern(u8 *macaddr, u8 *ppattern, u8 *pmask, int offset)int ethaddr_bytes =ETH_ALEN ;memset (ppattern + offset,0xff , magicsync); -for (j =0 ; j < magicsync; j++) -set_bit (len++, (unsigned long *) pmask); +for (j =0 ; j < magicsync; j++) { + pmask[len >>3 ] |=BIT (len &7 ); + len++; + }for (j =0 ; j <B44_MAX_PATTERNS ; j++) {if ((B44_PATTERN_SIZE - len) >=ETH_ALEN )
@@ -1532,7 +1534,8 @@ static int b44_magic_pattern(u8 *macaddr, u8 *ppattern, u8 *pmask, int offset)for (k =0 ; k< ethaddr_bytes; k++) { ppattern[offset + magicsync + (j *ETH_ALEN ) + k] = macaddr[k]; -set_bit (len++, (unsigned long *) pmask); + pmask[len >>3 ] |=BIT (len &7 ); + len++; } }return len -1 ;
drivers/net/ethernet/google/gve/gve_rx.c +0 -2
@@ -418,8 +418,6 @@ bool gve_clean_rx_done(struct gve_rx_ring *rx, int budget, rx->cnt = cnt; rx->fill_cnt += work_done; -/* restock desc ring slots */ -dma_wmb ();/* Ensure descs are visible before ringing doorbell */ gve_rx_write_doorbell (priv, rx);return gve_rx_work_pending (rx); }
drivers/net/ethernet/google/gve/gve_tx.c +0 -6
@@ -487,10 +487,6 @@ netdev_tx_t gve_tx(struct sk_buff *skb, struct net_device *dev)* may have added descriptors without ringing the doorbell. */ -/* Ensure tx descs from a prior gve_tx are visible before -* ringing doorbell. -*/ -dma_wmb ();gve_tx_put_doorbell (priv, tx->q_resources, tx->req);return NETDEV_TX_BUSY ; }
@@ -505,8 +501,6 @@ netdev_tx_t gve_tx(struct sk_buff *skb, struct net_device *dev)if (!netif_xmit_stopped (tx->netdev_txq) &&netdev_xmit_more ())return NETDEV_TX_OK ; -/* Ensure tx descs are visible before ringing doorbell */ -dma_wmb ();gve_tx_put_doorbell (priv, tx->q_resources, tx->req);return NETDEV_TX_OK ; }
drivers/net/ethernet/mellanox/mlxsw/minimal.c +1 -1
@@ -204,8 +204,8 @@ mlxsw_m_port_create(struct mlxsw_m *mlxsw_m, u8 local_port, u8 module) err_register_netdev: mlxsw_m->ports[local_port] =NULL ; -free_netdev (dev); err_dev_addr_get: +free_netdev (dev); err_alloc_etherdev:mlxsw_core_port_fini (mlxsw_m->core, local_port);return err;
drivers/net/ethernet/socionext/netsec.c +2 -2
@@ -928,7 +928,6 @@ static int netsec_process_rx(struct netsec_priv *priv, int budget)struct netsec_rx_pkt_info rx_info;enum dma_data_direction dma_dir;struct bpf_prog *xdp_prog; -struct sk_buff *skb =NULL ;u16 xdp_xmit =0 ;u32 xdp_act =0 ;int done =0 ;
@@ -942,7 +941,8 @@ static int netsec_process_rx(struct netsec_priv *priv, int budget)struct netsec_de *de = dring->vaddr + (DESC_SZ * idx);struct netsec_desc *desc = &dring->desc[idx];struct page *page =virt_to_page (desc->addr); -u32 xdp_result =XDP_PASS ; +u32 xdp_result =NETSEC_XDP_PASS ; +struct sk_buff *skb =NULL ;u16 pkt_len, desc_len;dma_addr_t dma_handle;struct xdp_buff xdp;
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +32 -0
@@ -105,6 +105,7 @@ MODULE_PARM_DESC(chain_mode, "To use chain instead of ring mode");static irqreturn_t stmmac_interrupt (int irq,void *dev_id);#ifdef CONFIG_DEBUG_FS +static const struct net_device_ops stmmac_netdev_ops;static void stmmac_init_fs (struct net_device *dev);static void stmmac_exit_fs (struct net_device *dev);#endif
@@ -4175,6 +4176,34 @@ static int stmmac_dma_cap_show(struct seq_file *seq, void *v) }DEFINE_SHOW_ATTRIBUTE (stmmac_dma_cap); +/* Use network device events to rename debugfs file entries. +*/ +static int stmmac_device_event (struct notifier_block *unused, +unsigned long event,void *ptr) +{ +struct net_device *dev =netdev_notifier_info_to_dev (ptr); +struct stmmac_priv *priv =netdev_priv (dev); + +if (dev->netdev_ops != &stmmac_netdev_ops) + goto done; + +switch (event) { +case NETDEV_CHANGENAME : +if (priv->dbgfs_dir) + priv->dbgfs_dir =debugfs_rename (stmmac_fs_dir, + priv->dbgfs_dir, + stmmac_fs_dir, + dev->name); +break ; + } +done: +return NOTIFY_DONE ; +} + +static struct notifier_block stmmac_notifier = { + .notifier_call = stmmac_device_event, +}; +static void stmmac_init_fs (struct net_device *dev) {struct stmmac_priv *priv =netdev_priv (dev);
@@ -4189,12 +4218,15 @@ static void stmmac_init_fs(struct net_device *dev)/* Entry to report the DMA HW features */ debugfs_create_file ("dma_cap" ,0444 , priv->dbgfs_dir, dev, &stmmac_dma_cap_fops); + + register_netdevice_notifier(&stmmac_notifier); }static void stmmac_exit_fs (struct net_device *dev) {struct stmmac_priv *priv =netdev_priv (dev); +unregister_netdevice_notifier (&stmmac_notifier);debugfs_remove_recursive (priv->dbgfs_dir); }#endif /* CONFIG_DEBUG_FS */
drivers/net/wan/sdla.c +1 -1
@@ -708,7 +708,7 @@ static netdev_tx_t sdla_transmit(struct sk_buff *skb,spin_lock_irqsave (&sdla_lock, flags);SDLA_WINDOW (dev, addr); - pbuf = (void *)(((int ) dev->mem_start) + (addr &SDLA_ADDR_MASK )); + pbuf = (void *)(dev->mem_start + (addr &SDLA_ADDR_MASK ));__sdla_write (dev, pbuf->buf_addr, skb->data, skb->len);SDLA_WINDOW (dev, addr); pbuf->opp_flag =1 ;
drivers/net/wireless/ath/ath9k/hif_usb.c +1 -1
@@ -1216,7 +1216,7 @@ static void ath9k_hif_usb_firmware_cb(const struct firmware *fw, void *context)static int send_eject_command (struct usb_interface *interface) {struct usb_device *udev =interface_to_usbdev (interface); -struct usb_host_interface *iface_desc = &interface->altsetting[0 ]; +struct usb_host_interface *iface_desc = interface->cur_altsetting;struct usb_endpoint_descriptor *endpoint;unsigned char *cmd;u8 bulk_out_ep;
drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c +2 -2
@@ -1348,7 +1348,7 @@ brcmf_usb_probe(struct usb_interface *intf, const struct usb_device_id *id) goto fail; } - desc = &intf->altsetting[0 ].desc; + desc = &intf->cur_altsetting->desc;if ((desc->bInterfaceClass !=USB_CLASS_VENDOR_SPEC ) || (desc->bInterfaceSubClass !=2 ) || (desc->bInterfaceProtocol !=0xff )) {
@@ -1361,7 +1361,7 @@ brcmf_usb_probe(struct usb_interface *intf, const struct usb_device_id *id) num_of_eps = desc->bNumEndpoints;for (ep =0 ; ep < num_of_eps; ep++) { - endpoint = &intf->altsetting[0 ].endpoint[ep].desc; + endpoint = &intf->cur_altsetting->endpoint[ep].desc; endpoint_num =usb_endpoint_num (endpoint);if (!usb_endpoint_xfer_bulk (endpoint))continue ;
drivers/net/wireless/intersil/orinoco/orinoco_usb.c +2 -2
@@ -1608,9 +1608,9 @@ static int ezusb_probe(struct usb_interface *interface,/* set up the endpoint information */ /* check out the endpoints */ - iface_desc = &interface->altsetting[0 ].desc; + iface_desc = &interface->cur_altsetting->desc;for (i =0 ; i < iface_desc->bNumEndpoints; ++i) { - ep = &interface->altsetting[0 ].endpoint[i].desc; + ep = &interface->cur_altsetting->endpoint[i].desc;if (usb_endpoint_is_bulk_in (ep)) {/* we found a bulk in endpoint */
drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c +1 -1
@@ -5915,7 +5915,7 @@ static int rtl8xxxu_parse_usb(struct rtl8xxxu_priv *priv,u8 dir, xtype, num;int ret =0 ; - host_interface = &interface->altsetting[0 ]; + host_interface = interface->cur_altsetting; interface_desc = &host_interface->desc; endpoints = interface_desc->bNumEndpoints;
drivers/net/wireless/rsi/rsi_91x_hal.c +6 -6
@@ -622,6 +622,7 @@ static int bl_cmd(struct rsi_hw *adapter, u8 cmd, u8 exp_resp, char *str)bl_start_cmd_timer (adapter, timeout); status =bl_write_cmd (adapter, cmd, exp_resp, ®out_val);if (status <0 ) { +bl_stop_cmd_timer (adapter);rsi_dbg (ERR_ZONE ,"%s: Command %s (%0x) writing failed..\n" , __func__, str, cmd);
@@ -737,10 +738,9 @@ static int ping_pong_write(struct rsi_hw *adapter, u8 cmd, u8 *addr, u32 size) } status =bl_cmd (adapter, cmd_req, cmd_resp, str); -if (status) { -bl_stop_cmd_timer (adapter); +if (status)return status; - } +return 0 ; }
@@ -828,10 +828,9 @@ static int auto_fw_upgrade(struct rsi_hw *adapter, u8 *flash_content, status =bl_cmd (adapter,EOF_REACHED ,FW_LOADING_SUCCESSFUL ,"EOF_REACHED" ); -if (status) { -bl_stop_cmd_timer (adapter); +if (status)return status; - } +rsi_dbg (INFO_ZONE ,"FW loading is done and FW is running..\n" );return 0 ; }
@@ -849,6 +848,7 @@ static int rsi_hal_prepare_fwload(struct rsi_hw *adapter) ®out_val, RSI_COMMON_REG_SIZE);if (status <0 ) { +bl_stop_cmd_timer (adapter);rsi_dbg (ERR_ZONE ,"%s: REGOUT read failed\n" , __func__);return status;
drivers/net/wireless/rsi/rsi_91x_usb.c +28 -9
@@ -16,6 +16,7 @@*/ #include <linux/module.h> +#include <linux/types.h> #include <net/rsi_91x.h> #include "rsi_usb.h" #include "rsi_hal.h"
@@ -29,7 +30,7 @@ MODULE_PARM_DESC(dev_oper_mode,"9[Wi-Fi STA + BT LE], 13[Wi-Fi STA + BT classic + BT LE]\n" "6[AP + BT classic], 14[AP + BT classic + BT LE]"); -static int rsi_rx_urb_submit (struct rsi_hw *adapter,u8 ep_num); +static int rsi_rx_urb_submit (struct rsi_hw *adapter,u8 ep_num,gfp_t flags);/** * rsi_usb_card_write() - This function writes to the USB Card.
@@ -117,7 +118,7 @@ static int rsi_find_bulk_in_and_out_endpoints(struct usb_interface *interface,__le16 buffer_size;int ii, bin_found =0 , bout_found =0 ; - iface_desc = &(interface->altsetting[0 ]); + iface_desc = interface->cur_altsetting;for (ii =0 ; ii < iface_desc->desc.bNumEndpoints; ++ii) { endpoint = &(iface_desc->endpoint[ii].desc);
@@ -285,20 +286,29 @@ static void rsi_rx_done_handler(struct urb *urb) status =0 ; out: -if (rsi_rx_urb_submit (dev->priv, rx_cb->ep_num)) +if (rsi_rx_urb_submit (dev->priv, rx_cb->ep_num,GFP_ATOMIC ))rsi_dbg (ERR_ZONE ,"%s: Failed in urb submission" , __func__);if (status)dev_kfree_skb (rx_cb->rx_skb); } +static void rsi_rx_urb_kill (struct rsi_hw *adapter,u8 ep_num) +{ +struct rsi_91x_usbdev *dev = (struct rsi_91x_usbdev *)adapter->rsi_dev; +struct rx_usb_ctrl_block *rx_cb = &dev->rx_cb[ep_num -1 ]; +struct urb *urb = rx_cb->rx_urb; + +usb_kill_urb (urb); +} +/** * rsi_rx_urb_submit() - This function submits the given URB to the USB stack. * @adapter: Pointer to the adapter structure. * * Return: 0 on success, a negative error code on failure. */ -static int rsi_rx_urb_submit (struct rsi_hw *adapter,u8 ep_num) +static int rsi_rx_urb_submit (struct rsi_hw *adapter,u8 ep_num,gfp_t mem_flags) {struct rsi_91x_usbdev *dev = (struct rsi_91x_usbdev *)adapter->rsi_dev;struct rx_usb_ctrl_block *rx_cb = &dev->rx_cb[ep_num -1 ];
@@ -328,9 +338,11 @@ static int rsi_rx_urb_submit(struct rsi_hw *adapter, u8 ep_num) rsi_rx_done_handler, rx_cb); - status =usb_submit_urb (urb,GFP_KERNEL ); -if (status) + status =usb_submit_urb (urb, mem_flags); +if (status) {rsi_dbg (ERR_ZONE ,"%s: Failed in urb submission\n" , __func__); +dev_kfree_skb (skb); + }return status; }
@@ -816,17 +828,20 @@ static int rsi_probe(struct usb_interface *pfunction,rsi_dbg (INIT_ZONE ,"%s: Device Init Done\n" , __func__); } - status =rsi_rx_urb_submit (adapter,WLAN_EP ); + status =rsi_rx_urb_submit (adapter,WLAN_EP ,GFP_KERNEL );if (status) goto err1;if (adapter->priv->coex_mode >1 ) { - status =rsi_rx_urb_submit (adapter,BT_EP ); + status =rsi_rx_urb_submit (adapter,BT_EP ,GFP_KERNEL );if (status) - goto err1; + goto err_kill_wlan_urb; }return 0 ; + +err_kill_wlan_urb: +rsi_rx_urb_kill (adapter,WLAN_EP ); err1:rsi_deinit_usb_interface (adapter); err:
@@ -857,6 +872,10 @@ static void rsi_disconnect(struct usb_interface *pfunction) adapter->priv->bt_adapter =NULL ; } +if (adapter->priv->coex_mode >1 ) +rsi_rx_urb_kill (adapter,BT_EP ); +rsi_rx_urb_kill (adapter,WLAN_EP ); +rsi_reset_card (adapter);rsi_deinit_usb_interface (adapter);rsi_91x_deinit (adapter);
drivers/net/wireless/zydas/zd1211rw/zd_usb.c +1 -1
@@ -1263,7 +1263,7 @@ static void print_id(struct usb_device *udev)static int eject_installer (struct usb_interface *intf) {struct usb_device *udev =interface_to_usbdev (intf); -struct usb_host_interface *iface_desc = &intf->altsetting[0 ]; +struct usb_host_interface *iface_desc = intf->cur_altsetting;struct usb_endpoint_descriptor *endpoint;unsigned char *cmd;u8 bulk_out_ep;
drivers/pci/quirks.c +34 -0
@@ -4080,6 +4080,40 @@ static void quirk_mic_x200_dma_alias(struct pci_dev *pdev)DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x2260 , quirk_mic_x200_dma_alias);DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x2264 , quirk_mic_x200_dma_alias); +/* +* Intel Visual Compute Accelerator (VCA) is a family of PCIe add-in devices +* exposing computational units via Non Transparent Bridges (NTB, PEX 87xx). +* +* Similarly to MIC x200, we need to add DMA aliases to allow buffer access +* when IOMMU is enabled. These aliases allow computational unit access to +* host memory. These aliases mark the whole VCA device as one IOMMU +* group. +* +* All possible slot numbers (0x20) are used, since we are unable to tell +* what slot is used on other side. This quirk is intended for both host +* and computational unit sides. The VCA devices have up to five functions +* (four for DMA channels and one additional). +*/ +static void quirk_pex_vca_alias (struct pci_dev *pdev) +{ +const unsigned int num_pci_slots =0x20 ; +unsigned int slot; + +for (slot =0 ; slot < num_pci_slots; slot++) { +pci_add_dma_alias (pdev,PCI_DEVFN (slot,0x0 )); +pci_add_dma_alias (pdev,PCI_DEVFN (slot,0x1 )); +pci_add_dma_alias (pdev,PCI_DEVFN (slot,0x2 )); +pci_add_dma_alias (pdev,PCI_DEVFN (slot,0x3 )); +pci_add_dma_alias (pdev,PCI_DEVFN (slot,0x4 )); + } +} +DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x2954 , quirk_pex_vca_alias); +DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x2955 , quirk_pex_vca_alias); +DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x2956 , quirk_pex_vca_alias); +DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x2958 , quirk_pex_vca_alias); +DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x2959 , quirk_pex_vca_alias); +DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x295A , quirk_pex_vca_alias); +/* * The IOMMU and interrupt controller on Broadcom Vulcan/Cavium ThunderX2 are * associated not at the root bus, but at a bridge below. This quirk avoids
drivers/perf/fsl_imx8_ddr_perf.c +42 -21
82 lines not on this page · raw message
drivers/phy/motorola/phy-cpcap-usb.c +15 -3
@@ -115,7 +115,7 @@ struct cpcap_usb_ints_state {enum cpcap_gpio_mode {CPCAP_DM_DP ,CPCAP_MDM_RX_TX , -CPCAP_UNKNOWN , +CPCAP_UNKNOWN_DISABLED ,/* Seems to disable USB lines */ CPCAP_OTG_DM_DP , };
@@ -381,7 +381,8 @@ static int cpcap_usb_set_uart_mode(struct cpcap_phy_ddata *ddata) {int error; - error =cpcap_usb_gpio_set_mode (ddata,CPCAP_DM_DP ); +/* Disable lines to prevent glitches from waking up mdm6600 */ + error =cpcap_usb_gpio_set_mode (ddata,CPCAP_UNKNOWN_DISABLED );if (error) goto out_err;
@@ -408,6 +409,11 @@ static int cpcap_usb_set_uart_mode(struct cpcap_phy_ddata *ddata)if (error) goto out_err; +/* Enable UART mode */ + error =cpcap_usb_gpio_set_mode (ddata,CPCAP_DM_DP ); +if (error) + goto out_err; +return 0 ; out_err:
@@ -420,7 +426,8 @@ static int cpcap_usb_set_usb_mode(struct cpcap_phy_ddata *ddata) {int error; - error =cpcap_usb_gpio_set_mode (ddata,CPCAP_OTG_DM_DP ); +/* Disable lines to prevent glitches from waking up mdm6600 */ + error =cpcap_usb_gpio_set_mode (ddata,CPCAP_UNKNOWN_DISABLED );if (error)return error;
@@ -460,6 +467,11 @@ static int cpcap_usb_set_usb_mode(struct cpcap_phy_ddata *ddata)if (error) goto out_err; +/* Enable USB mode */ + error =cpcap_usb_gpio_set_mode (ddata,CPCAP_OTG_DM_DP ); +if (error) + goto out_err; +return 0 ; out_err:
drivers/phy/qualcomm/phy-qcom-qmp.c +1 -1
@@ -66,7 +66,7 @@/* QPHY_V3_PCS_MISC_CLAMP_ENABLE register bits */ #define CLAMP_EN BIT(0)/* enables i/o clamp_n */ -#define PHY_INIT_COMPLETE_TIMEOUT 1000 +#define PHY_INIT_COMPLETE_TIMEOUT 10000#define POWER_DOWN_DELAY_US_MIN 10#define POWER_DOWN_DELAY_US_MAX 11
drivers/platform/x86/dell-laptop.c +26 -0
@@ -33,6 +33,7 @@struct quirk_entry {bool touchpad_led; +bool kbd_led_not_present;bool kbd_led_levels_off_1;bool kbd_missing_ac_tag;
@@ -73,6 +74,10 @@ static struct quirk_entry quirk_dell_latitude_e6410 = { .kbd_led_levels_off_1 = true, }; +static struct quirk_entry quirk_dell_inspiron_1012 = { + .kbd_led_not_present = true, +}; +static struct platform_driver platform_driver = { .driver = { .name ="dell-laptop" ,
@@ -310,6 +315,24 @@ static const struct dmi_system_id dell_quirks[] __initconst = { }, .driver_data = &quirk_dell_latitude_e6410, }, + { + .callback = dmi_matched, + .ident = "Dell Inspiron 1012", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 1012"), + }, + .driver_data = &quirk_dell_inspiron_1012, + }, + { + .callback = dmi_matched, + .ident = "Dell Inspiron 1018", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 1018"), + }, + .driver_data = &quirk_dell_inspiron_1012, + }, { } };
@@ -1493,6 +1516,9 @@ static void kbd_init(void) {int ret; +if (quirks && quirks->kbd_led_not_present) +return ; + ret =kbd_init_info ();kbd_init_tokens ();
drivers/power/supply/ingenic-battery.c +11 -4
@@ -100,10 +100,17 @@ static int ingenic_battery_set_scale(struct ingenic_battery *bat)return -EINVAL ; } -return iio_write_channel_attribute (bat->channel, - scale_raw[best_idx], - scale_raw[best_idx +1 ], -IIO_CHAN_INFO_SCALE ); +/* Only set scale if there is more than one (fractional) entry */ +if (scale_len >2 ) { + ret =iio_write_channel_attribute (bat->channel, + scale_raw[best_idx], + scale_raw[best_idx +1 ], +IIO_CHAN_INFO_SCALE ); +if (ret) +return ret; + } + +return 0 ; }static enum power_supply_property ingenic_battery_properties[] = {
drivers/spi/spi-dw.c +12 -3
@@ -172,9 +172,11 @@ static inline u32 rx_max(struct dw_spi *dws)static void dw_writer (struct dw_spi *dws) { -u32 max =tx_max (dws); +u32 max;u16 txw =0 ; +spin_lock (&dws->buf_lock); + max =tx_max (dws);while (max--) {/* Set the tx word if the transfer's original "tx" is not null */ if (dws->tx_end - dws->len) {
@@ -186,13 +188,16 @@ static void dw_writer(struct dw_spi *dws)dw_write_io_reg (dws,DW_SPI_DR , txw); dws->tx += dws->n_bytes; } +spin_unlock (&dws->buf_lock); }static void dw_reader (struct dw_spi *dws) { -u32 max =rx_max (dws); +u32 max;u16 rxw; +spin_lock (&dws->buf_lock); + max =rx_max (dws);while (max--) { rxw =dw_read_io_reg (dws,DW_SPI_DR );/* Care rx only if the transfer's original "rx" is not null */
@@ -204,6 +209,7 @@ static void dw_reader(struct dw_spi *dws) } dws->rx += dws->n_bytes; } +spin_unlock (&dws->buf_lock); }static void int_error_stop (struct dw_spi *dws,const char *msg)
@@ -276,18 +282,20 @@ static int dw_spi_transfer_one(struct spi_controller *master, {struct dw_spi *dws =spi_controller_get_devdata (master);struct chip_data *chip =spi_get_ctldata (spi); +unsigned long flags;u8 imask =0 ;u16 txlevel =0 ;u32 cr0;int ret; dws->dma_mapped =0 ; - +spin_lock_irqsave (&dws->buf_lock, flags); dws->tx = (void *)transfer->tx_buf; dws->tx_end = dws->tx + transfer->len; dws->rx = transfer->rx_buf; dws->rx_end = dws->rx + transfer->len; dws->len = transfer->len; +spin_unlock_irqrestore (&dws->buf_lock, flags);spi_enable_chip (dws,0 );
@@ -471,6 +479,7 @@ int dw_spi_add_host(struct device *dev, struct dw_spi *dws) dws->type =SSI_MOTO_SPI ; dws->dma_inited =0 ; dws->dma_addr = (dma_addr_t)(dws->paddr +DW_SPI_DR ); +spin_lock_init (&dws->buf_lock);spi_controller_set_devdata (master, dws);
drivers/spi/spi-dw.h +1 -0
@@ -120,6 +120,7 @@ struct dw_spi {size_t len;void *tx;void *tx_end; +spinlock_t buf_lock;void *rx;void *rx_end;int dma_mapped;
drivers/spi/spi-pxa2xx.c +4 -0
@@ -1461,6 +1461,10 @@ static const struct pci_device_id pxa2xx_spi_pci_compound_match[] = { { PCI_VDEVICE(INTEL, 0x02aa), LPSS_CNL_SSP }, { PCI_VDEVICE(INTEL, 0x02ab), LPSS_CNL_SSP }, { PCI_VDEVICE(INTEL, 0x02fb), LPSS_CNL_SSP }, +/* CML-H */ + { PCI_VDEVICE(INTEL, 0x06aa), LPSS_CNL_SSP }, + { PCI_VDEVICE(INTEL, 0x06ab), LPSS_CNL_SSP }, + { PCI_VDEVICE(INTEL, 0x06fb), LPSS_CNL_SSP },/* TGL-LP */ { PCI_VDEVICE(INTEL, 0xa0aa), LPSS_CNL_SSP }, { PCI_VDEVICE(INTEL, 0xa0ab), LPSS_CNL_SSP },
drivers/staging/most/net/net.c +10 -0
@@ -81,6 +81,11 @@ static int skb_to_mamac(const struct sk_buff *skb, struct mbo *mbo)unsigned int payload_len = skb->len -ETH_HLEN ;unsigned int mdp_len = payload_len +MDP_HDR_LEN ; +if (mdp_len < skb->len) { +pr_err ("drop: too large packet! (%u)\n" , skb->len); +return -EINVAL ; + } +if (mbo->buffer_length < mdp_len) {pr_err ("drop: too small buffer! (%d for %d)\n" , mbo->buffer_length, mdp_len);
@@ -128,6 +133,11 @@ static int skb_to_mep(const struct sk_buff *skb, struct mbo *mbo)u8 *buff = mbo->virt_address;unsigned int mep_len = skb->len +MEP_HDR_LEN ; +if (mep_len < skb->len) { +pr_err ("drop: too large packet! (%u)\n" , skb->len); +return -EINVAL ; + } +if (mbo->buffer_length < mep_len) {pr_err ("drop: too small buffer! (%d for %d)\n" , mbo->buffer_length, mep_len);
drivers/staging/mt7621-pci/pci-mt7621.c +17 -6
@@ -29,15 +29,14 @@#include <linux/phy/phy.h> #include <linux/platform_device.h> #include <linux/reset.h> +#include <linux/sys_soc.h> #include <mt7621.h> #include <ralink_regs.h> #include "../../pci/pci.h" /* sysctl */ -#define MT7621_CHIP_REV_ID 0x0c#define MT7621_GPIO_MODE 0x60 -#define CHIP_REV_MT7621_E2 0x0101/* MediaTek specific configuration registers */ #define PCIE_FTS_NUM 0x70c
@@ -126,6 +125,8 @@ struct mt7621_pcie_port {* @ports: pointer to PCIe port information * @perst: gpio reset * @rst: pointer to pcie reset +* @resets_inverted: depends on chip revision +* reset lines are inverted. */ struct mt7621_pcie {void __iomem *base;
@@ -140,6 +141,7 @@ struct mt7621_pcie {struct list_head ports;struct gpio_desc *perst;struct reset_control *rst; +bool resets_inverted; };static inline u32 pcie_read (struct mt7621_pcie *pcie,u32 reg)
@@ -229,9 +231,9 @@ static inline void mt7621_pcie_port_clk_disable(struct mt7621_pcie_port *port)static inline void mt7621_control_assert (struct mt7621_pcie_port *port) { -u32 chip_rev_id =rt_sysc_r32 (MT7621_CHIP_REV_ID ); +struct mt7621_pcie *pcie = port->pcie; -if ((chip_rev_id &0xFFFF ) ==CHIP_REV_MT7621_E2 ) +if (pcie->resets_inverted)reset_control_assert (port->pcie_rst);else reset_control_deassert (port->pcie_rst);
@@ -239,9 +241,9 @@ static inline void mt7621_control_assert(struct mt7621_pcie_port *port)static inline void mt7621_control_deassert (struct mt7621_pcie_port *port) { -u32 chip_rev_id =rt_sysc_r32 (MT7621_CHIP_REV_ID ); +struct mt7621_pcie *pcie = port->pcie; -if ((chip_rev_id &0xFFFF ) ==CHIP_REV_MT7621_E2 ) +if (pcie->resets_inverted)reset_control_deassert (port->pcie_rst);else reset_control_assert (port->pcie_rst);
@@ -641,9 +643,14 @@ static int mt7621_pcie_register_host(struct pci_host_bridge *host,return pci_host_probe (host); } +static const struct soc_device_attribute mt7621_pci_quirks_match[] = { + { .soc_id ="mt7621" , .revision ="E2" } +}; +static int mt7621_pci_probe (struct platform_device *pdev) {struct device *dev = &pdev->dev; +const struct soc_device_attribute *attr;struct mt7621_pcie *pcie;struct pci_host_bridge *bridge;int err;
@@ -661,6 +668,10 @@ static int mt7621_pci_probe(struct platform_device *pdev)platform_set_drvdata (pdev, pcie);INIT_LIST_HEAD (&pcie->ports); + attr =soc_device_match (mt7621_pci_quirks_match); +if (attr) + pcie->resets_inverted = true; + err =mt7621_pcie_parse_dt (pcie);if (err) {dev_err (dev,"Parsing DT failed\n" );
drivers/staging/vt6656/device.h +2 -0
@@ -52,6 +52,8 @@#define RATE_AUTO 12#define MAX_RATE 12 +#define VNT_B_RATES (BIT(RATE_1M) | BIT(RATE_2M) |\ + BIT(RATE_5M) | BIT(RATE_11M))/* * device specific
drivers/staging/vt6656/int.c +4 -2
@@ -99,9 +99,11 @@ static int vnt_int_report_rate(struct vnt_private *priv, u8 pkt_no, u8 tsr) info->status.rates[0 ].count = tx_retry; -if (!(tsr & (TSR_TMO |TSR_RETRYTMO ))) { +if (!(tsr &TSR_TMO )) { info->status.rates[0 ].idx = idx; - info->flags |=IEEE80211_TX_STAT_ACK ; + +if (!(info->flags &IEEE80211_TX_CTL_NO_ACK )) + info->flags |=IEEE80211_TX_STAT_ACK ; }ieee80211_tx_status_irqsafe (priv->hw, context->skb);
drivers/staging/vt6656/main_usb.c +1 -0
@@ -1016,6 +1016,7 @@ vt6656_probe(struct usb_interface *intf, const struct usb_device_id *id)ieee80211_hw_set (priv->hw,RX_INCLUDES_FCS );ieee80211_hw_set (priv->hw,REPORTS_TX_ACK_STATUS );ieee80211_hw_set (priv->hw,SUPPORTS_PS ); +ieee80211_hw_set (priv->hw,PS_NULLFUNC_STACK ); priv->hw->max_signal =100 ;
drivers/staging/vt6656/rxtx.c +13 -13
@@ -278,11 +278,9 @@ static u16 vnt_rxtx_datahead_g(struct vnt_usb_send_context *tx_context, PK_TYPE_11B, &buf->b);/* Get Duration and TimeStamp */ -if (ieee80211_is_pspoll (hdr->frame_control)) { -__le16 dur =cpu_to_le16 (priv->current_aid |BIT (14 ) |BIT (15 )); - - buf->duration_a = dur; - buf->duration_b = dur; +if (ieee80211_is_nullfunc (hdr->frame_control)) { + buf->duration_a = hdr->duration_id; + buf->duration_b = hdr->duration_id; }else { buf->duration_a =vnt_get_duration_le (priv, tx_context->pkt_type, need_ack);
@@ -371,10 +369,8 @@ static u16 vnt_rxtx_datahead_ab(struct vnt_usb_send_context *tx_context, tx_context->pkt_type, &buf->ab);/* Get Duration and TimeStampOff */ -if (ieee80211_is_pspoll (hdr->frame_control)) { -__le16 dur =cpu_to_le16 (priv->current_aid |BIT (14 ) |BIT (15 )); - - buf->duration = dur; +if (ieee80211_is_nullfunc (hdr->frame_control)) { + buf->duration = hdr->duration_id; }else { buf->duration =vnt_get_duration_le (priv, tx_context->pkt_type, need_ack);
@@ -815,10 +811,14 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb)if (info->band ==NL80211_BAND_5GHZ ) { pkt_type =PK_TYPE_11A ; }else { -if (tx_rate->flags &IEEE80211_TX_RC_USE_CTS_PROTECT ) - pkt_type =PK_TYPE_11GB ; -else - pkt_type =PK_TYPE_11GA ; +if (tx_rate->flags &IEEE80211_TX_RC_USE_CTS_PROTECT ) { +if (priv->basic_rates &VNT_B_RATES ) + pkt_type =PK_TYPE_11GB ; +else + pkt_type =PK_TYPE_11GA ; + }else { + pkt_type =PK_TYPE_11A ; + } } }else { pkt_type =PK_TYPE_11B ;
drivers/staging/wlan-ng/prism2mgmt.c +1 -1
@@ -959,7 +959,7 @@ int prism2mgmt_flashdl_state(struct wlandevice *wlandev, void *msgp) } } -return 0 ; +return result; }/*----------------------------------------------------------------
drivers/tty/serial/8250/8250_bcm2835aux.c +1 -1
@@ -113,7 +113,7 @@ static int bcm2835aux_serial_remove(struct platform_device *pdev) {struct bcm2835aux_data *data =platform_get_drvdata (pdev); -serial8250_unregister_port (data->uart.port.line); +serial8250_unregister_port (data->line);clk_disable_unprepare (data->clk);return 0 ;
drivers/tty/serial/imx.c +38 -13
124 lines not on this page · raw message
drivers/usb/dwc3/core.c +3 -0
@@ -1209,6 +1209,9 @@ static void dwc3_core_exit_mode(struct dwc3 *dwc)/* do nothing */ break ; } + +/* de-assert DRVVBUS for HOST and OTG mode */ +dwc3_set_prtcap (dwc,DWC3_GCTL_PRTCAP_DEVICE ); }static void dwc3_get_properties (struct dwc3 *dwc)
drivers/usb/dwc3/dwc3-pci.c +4 -0
@@ -34,6 +34,7 @@#define PCI_DEVICE_ID_INTEL_GLK 0x31aa#define PCI_DEVICE_ID_INTEL_CNPLP 0x9dee#define PCI_DEVICE_ID_INTEL_CNPH 0xa36e +#define PCI_DEVICE_ID_INTEL_CNPV 0xa3b0#define PCI_DEVICE_ID_INTEL_ICLLP 0x34ee#define PCI_DEVICE_ID_INTEL_EHLLP 0x4b7e#define PCI_DEVICE_ID_INTEL_TGPLP 0xa0ee
@@ -342,6 +343,9 @@ static const struct pci_device_id dwc3_pci_id_table[] = { {PCI_VDEVICE (INTEL ,PCI_DEVICE_ID_INTEL_CNPH ), (kernel_ulong_t) &dwc3_pci_intel_properties, }, + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_CNPV), + (kernel_ulong_t) &dwc3_pci_intel_properties, }, + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ICLLP), (kernel_ulong_t) &dwc3_pci_intel_properties, },
drivers/usb/host/xhci-tegra.c +1 -0
@@ -1413,6 +1413,7 @@ MODULE_FIRMWARE("nvidia/tegra210/xusb.bin");static const char *const tegra186_supply_names[] = { }; +MODULE_FIRMWARE ("nvidia/tegra186/xusb.bin" );static const struct tegra_xusb_phy_type tegra186_phy_types[] = { { .name ="usb3" , .num =3 , },
drivers/usb/musb/jz4740.c +5 -2
@@ -75,14 +75,17 @@ static struct musb_hdrc_platform_data jz4740_musb_platform_data = {static int jz4740_musb_init (struct musb *musb) {struct device *dev = musb->controller->parent; +int err;if (dev->of_node) musb->xceiv =devm_usb_get_phy_by_phandle (dev,"phys" ,0 );else musb->xceiv =devm_usb_get_phy (dev,USB_PHY_TYPE_USB2 );if (IS_ERR (musb->xceiv)) { -dev_err (dev,"No transceiver configured\n" ); -return PTR_ERR (musb->xceiv); + err =PTR_ERR (musb->xceiv); +if (err != -EPROBE_DEFER ) +dev_err (dev,"No transceiver configured: %d" , err); +return err; }/* Silicon does not implement ConfigData register.
drivers/usb/serial/ir-usb.c +104 -32
196 lines not on this page · raw message
drivers/usb/storage/unusual_uas.h +5 -2
@@ -87,12 +87,15 @@ UNUSUAL_DEV(0x2537, 0x1068, 0x0000, 0x9999, USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_IGNORE_UAS), -/* Reported-by: Takeo Nakayama <[email protected]> */ +/* +* Initially Reported-by: Takeo Nakayama <[email protected]> +* UAS Ignore Reported by Steven Ellis <[email protected]> +*/ UNUSUAL_DEV (0x357d ,0x7788 ,0x0000 ,0x9999 ,"JMicron" ,"JMS566" ,USB_SC_DEVICE ,USB_PR_DEVICE ,NULL , -US_FL_NO_REPORT_OPCODES ), +US_FL_NO_REPORT_OPCODES |US_FL_IGNORE_UAS ),/* Reported-by: Hans de Goede <[email protected]> */ UNUSUAL_DEV(0x4971, 0x1012, 0x0000, 0x9999,
drivers/usb/typec/tcpm/fusb302.c +1 -1
@@ -1666,7 +1666,7 @@ static const struct property_entry port_props[] = {PROPERTY_ENTRY_STRING ("try-power-role" ,"sink" ),PROPERTY_ENTRY_U32_ARRAY ("source-pdos" , src_pdo),PROPERTY_ENTRY_U32_ARRAY ("sink-pdos" , snk_pdo), - PROPERTY_ENTRY_U32("op-sink-microwatt", 2500), + PROPERTY_ENTRY_U32("op-sink-microwatt", 2500000), { } };
drivers/usb/typec/tcpm/wcove.c +1 -1
@@ -597,7 +597,7 @@ static const struct property_entry wcove_props[] = {PROPERTY_ENTRY_STRING ("try-power-role" ,"sink" ),PROPERTY_ENTRY_U32_ARRAY ("source-pdos" , src_pdo),PROPERTY_ENTRY_U32_ARRAY ("sink-pdos" , snk_pdo), - PROPERTY_ENTRY_U32("op-sink-microwatt", 15000), + PROPERTY_ENTRY_U32("op-sink-microwatt", 15000000), { } };
drivers/watchdog/Kconfig +1 -0
@@ -687,6 +687,7 @@ config MAX63XX_WATCHDOG config MAX77620_WATCHDOG tristate "Maxim Max77620 Watchdog Timer" depends on MFD_MAX77620 || COMPILE_TEST + select WATCHDOG_CORE help This is the driver for the Max77620 watchdog timer. Say 'Y' here to enable the watchdog timer support for
drivers/watchdog/orion_wdt.c +2 -2
@@ -602,7 +602,7 @@ static int orion_wdt_probe(struct platform_device *pdev)set_bit (WDOG_HW_RUNNING , &dev->wdt.status);/* Request the IRQ only after the watchdog is disabled */ - irq =platform_get_irq (pdev,0 ); + irq =platform_get_irq_optional (pdev,0 );if (irq >0 ) {/* * Not all supported platforms specify an interrupt for the
@@ -617,7 +617,7 @@ static int orion_wdt_probe(struct platform_device *pdev) }/* Optional 2nd interrupt for pretimeout */ - irq =platform_get_irq (pdev,1 ); + irq =platform_get_irq_optional (pdev,1 );if (irq >0 ) { orion_wdt_info.options |=WDIOF_PRETIMEOUT ; ret = devm_request_irq(&pdev->dev, irq, orion_wdt_pre_irq,
drivers/watchdog/rn5t618_wdt.c +1 -0
@@ -188,6 +188,7 @@ static struct platform_driver rn5t618_wdt_driver = {module_platform_driver (rn5t618_wdt_driver); +MODULE_ALIAS ("platform:rn5t618-wdt" );MODULE_AUTHOR ("Beniamino Galvani <[email protected]>" );MODULE_DESCRIPTION ("RN5T618 watchdog driver" );MODULE_LICENSE ("GPL v2" );
fs/cifs/cifsglob.h +1 -0
@@ -1538,6 +1538,7 @@ struct mid_q_entry {mid_callback_t *callback;/* call completion callback */ mid_handle_t *handle;/* call handle mid callback */ void *callback_data;/* general purpose pointer for callback */ +struct task_struct *creator;void *resp_buf;/* pointer to received SMB header */ unsigned int resp_buf_size;int mid_state;/* wish this were enum but can not pass to wait_event */
fs/cifs/smb2misc.c +1 -1
@@ -750,7 +750,7 @@ __smb2_handle_cancelled_close(struct cifs_tcon *tcon, __u64 persistent_fid, {struct close_cancelled_open *cancelled; - cancelled =kzalloc (sizeof (*cancelled),GFP_KERNEL ); + cancelled =kzalloc (sizeof (*cancelled),GFP_ATOMIC );if (!cancelled)return -ENOMEM ;
fs/cifs/smb2ops.c +7 -2
@@ -1461,7 +1461,9 @@ smb2_ioctl_query_info(const unsigned int xid,COMPOUND_FID ,COMPOUND_FID , qi.info_type, true, buffer, qi.output_buffer_length, - CIFSMaxBufSize); + CIFSMaxBufSize - +MAX_SMB2_CREATE_RESPONSE_SIZE - + MAX_SMB2_CLOSE_RESPONSE_SIZE); } }else if (qi.flags ==PASSTHRU_SET_INFO ) {/* Can eventually relax perm check since server enforces too */
@@ -2634,7 +2636,10 @@ smb2_query_symlink(const unsigned int xid, struct cifs_tcon *tcon, rc =SMB2_ioctl_init (tcon, &rqst[1 ], fid.persistent_fid, fid.volatile_fid,FSCTL_GET_REPARSE_POINT , - true/* is_fctl */ ,NULL ,0 , CIFSMaxBufSize); + true/* is_fctl */ ,NULL ,0 , + CIFSMaxBufSize - +MAX_SMB2_CREATE_RESPONSE_SIZE - +MAX_SMB2_CLOSE_RESPONSE_SIZE );if (rc) goto querty_exit;
fs/cifs/smb2transport.c +2 -0
@@ -599,6 +599,8 @@ smb2_mid_entry_alloc(const struct smb2_sync_hdr *shdr,* The default is for the mid to be synchronous, so the * default callback just wakes up the current task. */ +get_task_struct (current); + temp->creator = current; temp->callback = cifs_wake_up_task; temp->callback_data = current;
fs/cifs/transport.c +3 -0
@@ -76,6 +76,8 @@ AllocMidQEntry(const struct smb_hdr *smb_buffer, struct TCP_Server_Info *server)* The default is for the mid to be synchronous, so the * default callback just wakes up the current task. */ +get_task_struct (current); + temp->creator = current; temp->callback = cifs_wake_up_task; temp->callback_data = current;
@@ -158,6 +160,7 @@ static void _cifs_mid_q_entry_release(struct kref *refcount) } }#endif +put_task_struct (midEntry->creator);mempool_free (midEntry, cifs_mid_poolp); }
fs/debugfs/file.c +10 -7
@@ -142,18 +142,21 @@ EXPORT_SYMBOL_GPL(debugfs_file_put);* We also need to exclude any file that has ways to write or alter it as root * can bypass the permissions check. */ -static bool debugfs_is_locked_down (struct inode *inode, -struct file *filp, -const struct file_operations *real_fops) +static int debugfs_locked_down (struct inode *inode, +struct file *filp, +const struct file_operations *real_fops) {if ((inode->i_mode &07777 ) ==0444 && !(filp->f_mode &FMODE_WRITE ) && !real_fops->unlocked_ioctl && !real_fops->compat_ioctl && !real_fops->mmap) -return false; +return 0 ; -return security_locked_down (LOCKDOWN_DEBUGFS ); +if (security_locked_down (LOCKDOWN_DEBUGFS )) +return -EPERM ; + +return 0 ; }static int open_proxy_open (struct inode *inode,struct file *filp)
@@ -168,7 +171,7 @@ static int open_proxy_open(struct inode *inode, struct file *filp) real_fops =debugfs_real_fops (filp); - r =debugfs_is_locked_down (inode, filp, real_fops); + r =debugfs_locked_down (inode, filp, real_fops);if (r) goto out;
@@ -298,7 +301,7 @@ static int full_proxy_open(struct inode *inode, struct file *filp) real_fops =debugfs_real_fops (filp); - r =debugfs_is_locked_down (inode, filp, real_fops); + r =debugfs_locked_down (inode, filp, real_fops);if (r) goto out;
include/linux/platform_data/ti-sysc.h +2 -0
@@ -49,6 +49,8 @@ struct sysc_regbits {s8 emufree_shift; }; +#define SYSC_QUIRK_FORCE_MSTANDBY BIT(20) +#define SYSC_MODULE_QUIRK_AESS BIT(19)#define SYSC_MODULE_QUIRK_SGX BIT(18)#define SYSC_MODULE_QUIRK_HDQ1W BIT(17)#define SYSC_MODULE_QUIRK_I2C BIT(16)
include/linux/power/smartreflex.h +3 -0
@@ -293,6 +293,9 @@ struct omap_sr_data {struct voltagedomain *voltdm; }; + +extern struct omap_sr_data omap_sr_pdata[OMAP_SR_NR ]; +#ifdef CONFIG_POWER_AVS_OMAP /* Smartreflex module enable/disable interface */
include/linux/usb/irda.h +12 -1
@@ -119,11 +119,22 @@ struct usb_irda_cs_descriptor {* 6 - 115200 bps * 7 - 576000 bps * 8 - 1.152 Mbps -* 9 - 5 mbps +* 9 - 4 Mbps * 10..15 - Reserved */ #define USB_IRDA_STATUS_LINK_SPEED 0x0f +#define USB_IRDA_LS_NO_CHANGE 0 +#define USB_IRDA_LS_2400 1 +#define USB_IRDA_LS_9600 2 +#define USB_IRDA_LS_19200 3 +#define USB_IRDA_LS_38400 4 +#define USB_IRDA_LS_57600 5 +#define USB_IRDA_LS_115200 6 +#define USB_IRDA_LS_576000 7 +#define USB_IRDA_LS_1152000 8 +#define USB_IRDA_LS_4000000 9 +/* The following is a 4-bit value used only for * outbound header: *
include/media/dvb-usb-ids.h +1 -0
@@ -389,6 +389,7 @@#define USB_PID_MYGICA_T230 0xc688#define USB_PID_MYGICA_T230C 0xc689#define USB_PID_MYGICA_T230C2 0xc68a +#define USB_PID_MYGICA_T230C_LITE 0xc699#define USB_PID_ELGATO_EYETV_DIVERSITY 0x0011#define USB_PID_ELGATO_EYETV_DTT 0x0021#define USB_PID_ELGATO_EYETV_DTT_2 0x003f
include/net/pkt_cls.h +19 -14
@@ -141,31 +141,38 @@ __cls_set_class(unsigned long *clp, unsigned long cl)return xchg (clp, cl); } -static inline unsigned long -cls_set_class (struct Qdisc *q,unsigned long *clp,unsigned long cl) +static inline void +__tcf_bind_filter (struct Qdisc *q,struct tcf_result *r,unsigned long base) { -unsigned long old_cl; +unsigned long cl; -sch_tree_lock (q); - old_cl =__cls_set_class (clp, cl); -sch_tree_unlock (q); -return old_cl; + cl = q->ops->cl_ops->bind_tcf (q, base, r->classid); + cl =__cls_set_class (&r->class, cl); +if (cl) + q->ops->cl_ops->unbind_tcf (q, cl); }static inline void tcf_bind_filter (struct tcf_proto *tp,struct tcf_result *r,unsigned long base) {struct Qdisc *q = tp->chain->block->q; -unsigned long cl;/* Check q as it is not set for shared blocks. In that case, * setting class is not supported. */ if (!q)return ; - cl = q->ops->cl_ops->bind_tcf (q, base, r->classid); - cl =cls_set_class (q, &r->class, cl); -if (cl) +sch_tree_lock (q); +__tcf_bind_filter (q, r, base); +sch_tree_unlock (q); +} + +static inline void +__tcf_unbind_filter (struct Qdisc *q,struct tcf_result *r) +{ +unsigned long cl; + +if ((cl =__cls_set_class (&r->class,0 )) !=0 ) q->ops->cl_ops->unbind_tcf (q, cl); }
@@ -173,12 +180,10 @@ static inline void tcf_unbind_filter(struct tcf_proto *tp, struct tcf_result *r) { struct Qdisc *q = tp->chain->block->q; -unsigned long cl;if (!q)return ; -if ((cl =__cls_set_class (&r->class,0 )) !=0 ) - q->ops->cl_ops->unbind_tcf (q, cl); +__tcf_unbind_filter (q, r); } struct tcf_exts {
include/net/sch_generic.h +2 -1
@@ -318,7 +318,8 @@ struct tcf_proto_ops { void *type_data);void (*hw_del)(struct tcf_proto *tp,void *type_data); -void (*bind_class)(void *,u32 ,unsigned long ); +void (*bind_class)(void *,u32 ,unsigned long , +void *,unsigned long ); void * (*tmplt_create)(struct net *net, struct tcf_chain *chain, struct nlattr **tca,
include/net/udp.h +3 -0
@@ -476,6 +476,9 @@ static inline struct sk_buff *udp_rcv_segment(struct sock *sk,if (!inet_get_convert_csum (sk)) features |=NETIF_F_IP_CSUM |NETIF_F_IPV6_CSUM ; +if (skb->pkt_type ==PACKET_LOOPBACK ) + skb->ip_summed =CHECKSUM_PARTIAL ; +/* the GSO CB lays after the UDP one, no need to save and restore any * CB fragment */
init/Kconfig +1 -0
@@ -54,6 +54,7 @@ config CC_DISABLE_WARN_MAYBE_UNINITIALIZED config CONSTRUCTORS bool + depends on !UML config IRQ_WORK bool
kernel/gcov/Kconfig +1 -1
@@ -4,7 +4,7 @@ menu "GCOV-based kernel profiling" config GCOV_KERNEL bool "Enable gcov-based kernel profiling" depends on DEBUG_FS - select CONSTRUCTORS + select CONSTRUCTORS if !UML default n ---help--- This option enables gcov-based code profiling (e.g. for code coverage
net/bluetooth/hci_core.c +24 -2
@@ -1444,11 +1444,20 @@ static int hci_dev_do_open(struct hci_dev *hdev)if (hci_dev_test_flag (hdev,HCI_SETUP ) ||test_bit (HCI_QUIRK_NON_PERSISTENT_SETUP , &hdev->quirks)) { +bool invalid_bdaddr; +hci_sock_dev_event (hdev,HCI_DEV_SETUP );if (hdev->setup) ret = hdev->setup (hdev); +/* The transport driver can set the quirk to mark the +* BD_ADDR invalid before creating the HCI device or in +* its setup callback. +*/ + invalid_bdaddr =test_bit (HCI_QUIRK_INVALID_BDADDR , + &hdev->quirks); +if (ret) goto setup_failed;
@@ -1457,20 +1466,33 @@ static int hci_dev_do_open(struct hci_dev *hdev)hci_dev_get_bd_addr_from_property (hdev);if (bacmp (&hdev->public_addr,BDADDR_ANY ) && - hdev->set_bdaddr) + hdev->set_bdaddr) { ret = hdev->set_bdaddr (hdev, &hdev->public_addr); + +/* If setting of the BD_ADDR from the device +* property succeeds, then treat the address +* as valid even if the invalid BD_ADDR +* quirk indicates otherwise. +*/ +if (!ret) + invalid_bdaddr = false; + } } setup_failed:/* The transport driver can set these quirks before * creating the HCI device or in its setup callback. * +* For the invalid BD_ADDR quirk it is possible that +* it becomes a valid address if the bootloader does +* provide it (see above). +* * In case any of them is set, the controller has to * start up as unconfigured. */ if (test_bit (HCI_QUIRK_EXTERNAL_CONFIG , &hdev->quirks) || -test_bit (HCI_QUIRK_INVALID_BDADDR , &hdev->quirks)) + invalid_bdaddr)hci_dev_set_flag (hdev,HCI_UNCONFIGURED );/* For an unconfigured controller it is required to
net/ipv4/nexthop.c +3 -1
@@ -322,7 +322,9 @@ static size_t nh_nlmsg_size_single(struct nexthop *nh)static size_t nh_nlmsg_size (struct nexthop *nh) { -size_t sz =nla_total_size (4 );/* NHA_ID */ +size_t sz =NLMSG_ALIGN (sizeof (struct nhmsg )); + + sz +=nla_total_size (4 );/* NHA_ID */ if (nh->is_group) sz +=nh_nlmsg_size_grp (nh);
net/rxrpc/input.c +7 -5
@@ -413,7 +413,7 @@ static void rxrpc_input_data(struct rxrpc_call *call, struct sk_buff *skb) {struct rxrpc_skb_priv *sp =rxrpc_skb (skb);enum rxrpc_call_state state; -unsigned int j; +unsigned int j, nr_subpackets;rxrpc_serial_t serial = sp->hdr.serial, ack_serial =0 ;rxrpc_seq_t seq0 = sp->hdr.seq, hard_ack;bool immediate_ack = false, jumbo_bad = false;
@@ -457,7 +457,8 @@ static void rxrpc_input_data(struct rxrpc_call *call, struct sk_buff *skb) call->ackr_prev_seq = seq0; hard_ack =READ_ONCE (call->rx_hard_ack); -if (sp->nr_subpackets >1 ) { + nr_subpackets = sp->nr_subpackets; +if (nr_subpackets >1 ) {if (call->nr_jumbo_bad >3 ) { ack =RXRPC_ACK_NOSPACE ; ack_serial = serial;
@@ -465,11 +466,11 @@ static void rxrpc_input_data(struct rxrpc_call *call, struct sk_buff *skb) } } -for (j =0 ; j < sp->nr_subpackets; j++) { +for (j =0 ; j < nr_subpackets; j++) {rxrpc_serial_t serial = sp->hdr.serial + j;rxrpc_seq_t seq = seq0 + j;unsigned int ix = seq &RXRPC_RXTX_BUFF_MASK ; -bool terminal = (j == sp->nr_subpackets -1 ); +bool terminal = (j == nr_subpackets -1 );bool last = terminal && (sp->rx_flags &RXRPC_SKB_INCL_LAST );u8 flags, annotation = j;
@@ -506,7 +507,7 @@ static void rxrpc_input_data(struct rxrpc_call *call, struct sk_buff *skb) }if (call->rxtx_buffer[ix]) { -rxrpc_input_dup_data (call, seq, sp->nr_subpackets >1 , +rxrpc_input_dup_data (call, seq, nr_subpackets >1 , &jumbo_bad);if (ack !=RXRPC_ACK_DUPLICATE ) { ack =RXRPC_ACK_DUPLICATE ;
@@ -564,6 +565,7 @@ static void rxrpc_input_data(struct rxrpc_call *call, struct sk_buff *skb)* ring. */ skb =NULL ; + sp =NULL ; }if (last) {
net/sched/cls_basic.c +8 -3
@@ -263,12 +263,17 @@ static void basic_walk(struct tcf_proto *tp, struct tcf_walker *arg, } } -static void basic_bind_class (void *fh,u32 classid,unsigned long cl) +static void basic_bind_class (void *fh,u32 classid,unsigned long cl,void *q, +unsigned long base) {struct basic_filter *f = fh; -if (f && f->res.classid == classid) - f->res.class = cl; +if (f && f->res.classid == classid) { +if (cl) +__tcf_bind_filter (q, &f->res, base); +else +__tcf_unbind_filter (q, &f->res); + } } static int basic_dump(struct net *net, struct tcf_proto *tp, void *fh,
net/sched/cls_bpf.c +8 -3
@@ -631,12 +631,17 @@ static int cls_bpf_dump(struct net *net, struct tcf_proto *tp, void *fh,return -1 ; } -static void cls_bpf_bind_class (void *fh,u32 classid,unsigned long cl) +static void cls_bpf_bind_class (void *fh,u32 classid,unsigned long cl, +void *q,unsigned long base) {struct cls_bpf_prog *prog = fh; -if (prog && prog->res.classid == classid) - prog->res.class = cl; +if (prog && prog->res.classid == classid) { +if (cl) +__tcf_bind_filter (q, &prog->res, base); +else +__tcf_unbind_filter (q, &prog->res); + } } static void cls_bpf_walk(struct tcf_proto *tp, struct tcf_walker *arg,
net/sched/cls_flower.c +8 -3
@@ -2511,12 +2511,17 @@ static int fl_tmplt_dump(struct sk_buff *skb, struct net *net, void *tmplt_priv)return -EMSGSIZE ; } -static void fl_bind_class (void *fh,u32 classid,unsigned long cl) +static void fl_bind_class (void *fh,u32 classid,unsigned long cl,void *q, +unsigned long base) {struct cls_fl_filter *f = fh; -if (f && f->res.classid == classid) - f->res.class = cl; +if (f && f->res.classid == classid) { +if (cl) +__tcf_bind_filter (q, &f->res, base); +else +__tcf_unbind_filter (q, &f->res); + } }static bool fl_delete_empty (struct tcf_proto *tp)
net/sched/cls_fw.c +8 -3
@@ -419,12 +419,17 @@ static int fw_dump(struct net *net, struct tcf_proto *tp, void *fh,return -1 ; } -static void fw_bind_class (void *fh,u32 classid,unsigned long cl) +static void fw_bind_class (void *fh,u32 classid,unsigned long cl,void *q, +unsigned long base) {struct fw_filter *f = fh; -if (f && f->res.classid == classid) - f->res.class = cl; +if (f && f->res.classid == classid) { +if (cl) +__tcf_bind_filter (q, &f->res, base); +else +__tcf_unbind_filter (q, &f->res); + } }static struct tcf_proto_ops cls_fw_ops__read_mostly = {
net/sched/cls_matchall.c +8 -3
@@ -393,12 +393,17 @@ static int mall_dump(struct net *net, struct tcf_proto *tp, void *fh,return -1 ; } -static void mall_bind_class (void *fh,u32 classid,unsigned long cl) +static void mall_bind_class (void *fh,u32 classid,unsigned long cl,void *q, +unsigned long base) {struct cls_mall_head *head = fh;
Lines of this file are not shown. View the raw message.
net/sched/sch_api.c +34 -13
47 lines not on this page · raw message
sound/soc/intel/boards/cht_bsw_rt5645.c +20 -6
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/bpf_helpers.h +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/progs/test_get_stack_rawtp.c +1 -2
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.