Linux 5.10.146
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.146 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.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/arm64/Kconfig | 5 arch/arm64/boot/dts/rockchip/rk3399-gru-bob.dts | 5 arch/arm64/boot/dts/rockchip/rk3399-gru-chromebook.dtsi | 9 arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi | 1 arch/mips/lantiq/clk.c | 1 arch/mips/loongson32/common/platform.c | 16 arch/riscv/kernel/signal.c | 2 arch/x86/include/asm/kvm_host.h | 1 arch/x86/kvm/svm/sev.c | 8 arch/x86/kvm/svm/svm.c | 1 arch/x86/kvm/svm/svm.h | 2 arch/x86/kvm/x86.c | 6 drivers/dax/hmem/device.c | 1 drivers/dma/ti/k3-udma-private.c | 6 drivers/firmware/efi/libstub/secureboot.c | 8 drivers/firmware/efi/libstub/x86-stub.c | 7 drivers/gpio/gpio-mockup.c | 2 drivers/gpio/gpiolib-cdev.c | 5 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 23 + drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c | 15 drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 34 +- drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h | 1 drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 5 drivers/gpu/drm/amd/amdgpu/soc15.c | 25 - drivers/gpu/drm/amd/display/dc/dml/dcn30/display_mode_vba_30.c | 3 drivers/gpu/drm/amd/display/modules/color/color_gamma.c | 4 drivers/gpu/drm/gma500/gma_display.c | 11 drivers/gpu/drm/hisilicon/hibmc/Kconfig | 3 drivers/gpu/drm/mediatek/mtk_dsi.c | 24 - drivers/gpu/drm/panel/panel-simple.c | 2 drivers/gpu/drm/rockchip/cdn-dp-core.c | 5 drivers/hv/vmbus_drv.c | 10 drivers/i2c/busses/i2c-imx.c | 2 drivers/i2c/busses/i2c-mlxbf.c | 68 +--- drivers/interconnect/qcom/icc-rpmh.c | 10 drivers/interconnect/qcom/sm8150.c | 1 drivers/interconnect/qcom/sm8250.c | 1 drivers/iommu/intel/iommu.c | 2 drivers/media/usb/b2c2/flexcop-usb.c | 2 drivers/mmc/core/sd.c | 42 -- drivers/net/bonding/bond_3ad.c | 5 drivers/net/bonding/bond_main.c | 57 ++- drivers/net/can/flexcan.c | 10 drivers/net/can/usb/gs_usb.c | 4 drivers/net/ethernet/freescale/enetc/enetc.c | 32 - drivers/net/ethernet/freescale/enetc/enetc.h | 9 drivers/net/ethernet/freescale/enetc/enetc_pf.c | 11 drivers/net/ethernet/freescale/enetc/enetc_qos.c | 23 + drivers/net/ethernet/freescale/enetc/enetc_vf.c | 4 drivers/net/ethernet/intel/i40e/i40e_main.c | 32 + drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 20 + drivers/net/ethernet/intel/iavf/iavf_txrx.c | 9 drivers/net/ethernet/intel/iavf/iavf_virtchnl.c | 7 drivers/net/ethernet/sfc/efx_channels.c | 2 drivers/net/ethernet/sfc/tx.c | 2 drivers/net/ethernet/sun/sunhme.c | 4 drivers/net/ipa/gsi.c | 16 drivers/net/ipa/gsi_private.h | 2 drivers/net/ipa/gsi_trans.c | 9 drivers/net/ipa/ipa_cmd.c | 2 drivers/net/ipa/ipa_data.h | 4 drivers/net/ipa/ipa_qmi.c | 10 drivers/net/ipa/ipa_qmi_msg.c | 8 drivers/net/ipa/ipa_qmi_msg.h | 37 +- drivers/net/ipa/ipa_table.c | 88 ++--- drivers/net/ipa/ipa_table.h | 6 drivers/net/ipvlan/ipvlan_core.c | 6 drivers/net/mdio/of_mdio.c | 1 drivers/net/phy/aquantia_main.c | 53 +++ drivers/net/team/team.c | 24 + drivers/net/wireguard/netlink.c | 13 drivers/net/wireguard/selftest/ratelimiter.c | 25 - drivers/net/wireless/mediatek/mt76/mt7615/mac.c | 2 drivers/s390/block/dasd_alias.c | 9 drivers/scsi/mpt3sas/mpt3sas_base.c | 161 +++++++--- drivers/scsi/mpt3sas/mpt3sas_base.h | 1 drivers/tty/serial/atmel_serial.c | 8 drivers/tty/serial/serial-tegra.c | 5 drivers/tty/serial/tegra-tcu.c | 2 drivers/usb/cdns3/gadget.c | 4 drivers/usb/core/hub.c | 2 drivers/usb/dwc3/core.c | 4 drivers/usb/dwc3/core.h | 4 drivers/usb/dwc3/gadget.c | 81 ++--- drivers/usb/host/xhci-mtk-sch.c | 149 +++++---- drivers/usb/host/xhci-mtk.h | 2 drivers/usb/serial/option.c | 6 drivers/usb/typec/mux/intel_pmc_mux.c | 37 +- drivers/vfio/vfio_iommu_type1.c | 110 +++++- fs/cifs/cifsproto.h | 2 fs/cifs/cifssmb.c | 6 fs/cifs/connect.c | 22 + fs/cifs/transport.c | 6 fs/ext4/extents.c | 4 fs/ext4/ialloc.c | 2 fs/ext4/mballoc.c | 4 fs/xfs/libxfs/xfs_inode_buf.c | 35 +- fs/xfs/xfs_inode.c | 36 +- include/linux/inetdevice.h | 9 include/linux/kvm_host.h | 2 include/linux/netdevice.h | 8 include/linux/serial_core.h | 17 + include/net/bond_3ad.h | 2 include/net/bonding.h | 3 kernel/workqueue.c | 6 mm/slub.c | 5 net/bridge/netfilter/ebtables.c | 4 net/core/dev_ioctl.c | 44 -- net/core/flow_dissector.c | 21 - net/ipv4/devinet.c | 4 net/netfilter/nf_conntrack_irc.c | 34 +- net/netfilter/nf_conntrack_sip.c | 4 net/netfilter/nf_tables_api.c | 8 net/netfilter/nfnetlink_osf.c | 4 net/sched/cls_api.c | 1 net/sched/sch_taprio.c | 18 - net/smc/smc_core.c | 5 sound/pci/hda/hda_intel.c | 2 sound/pci/hda/patch_hdmi.c | 1 sound/pci/hda/patch_realtek.c | 32 + tools/perf/util/genelf.c | 14 tools/perf/util/genelf.h | 4 tools/perf/util/symbol-elf.c | 7 tools/testing/selftests/net/forwarding/sch_red.sh | 1 virt/kvm/kvm_main.c | 16 127 files changed, 1195 insertions(+), 703 deletions(-)
Adrian Hunter (2):
mmc: core: Fix inconsistent sd3_bus_mode at UHS-I SD voltage switch failure perf kcore_copy: Do not check /proc/modules is unchanged
Al Viro (1):
riscv: fix a nasty sigreturn bug...
Alan Stern (1):
USB: core: Fix RST error in hub.c
Alex Deucher (2):
drm/amdgpu: move nbio sdma_doorbell_range() into sdma code for vega drm/amdgpu: make sure to init common IP before gmc
Alex Elder (6):
net: ipa: fix assumptions about DMA address size
net: ipa: fix table alignment requirement
net: ipa: avoid 64-bit modulus
net: ipa: DMA addresses are nicely aligned
net: ipa: kill IPA_TABLE_ENTRY_SIZE
net: ipa: properly limit modem routing table use
Alex Williamson (1):
vfio/type1: Unpin zero pages
AngeloGioacchino Del Regno (1):
drm/mediatek: dsi: Add atomic {destroy,duplicate}_state, reset callbacks
Ard Biesheuvel (2):
efi: x86: Wipe setup_data on pure EFI boot
efi: libstub: check Shim mode using MokSBStateRT
Arnd Bergmann (1):
net: socket: remove register_gifconf
Asmaa Mnebhi (3):
i2c: mlxbf: incorrect base address passed during io write
i2c: mlxbf: prevent stack overflow in mlxbf_i2c_smbus_start_transaction()
i2c: mlxbf: Fix frequency calculation
Azhar Shaikh (1):
usb: typec: intel_pmc_mux: Update IOM port status offset for AlderLake
Bartosz Golaszewski (1):
gpio: mockup: fix NULL pointer dereference when removing debugfs
Benjamin Poirier (3):
net: bonding: Share lacpdu_mcast_addr definition
net: bonding: Unsync device addresses on ndo_stop
net: team: Unsync device addresses on ndo_stop
Brett Creeley (1):
iavf: Fix cached head and tail value for iavf_get_tx_pending
Brian Norris (1):
arm64: dts: rockchip: Pull up wlan wake# on Gru-Bob
Callum Osmotherly (2):
ALSA: hda/realtek: Enable 4-speaker output Dell Precision 5570 laptop
ALSA: hda/realtek: Enable 4-speaker output Dell Precision 5530 laptop
Carl Yin(殷张成) (1):
USB: serial: option: add Quectel BG95 0x0203 composition
Chao Yu (1):
mm/slub: fix to return errno if kmalloc() fails
Christoph Hellwig (1):
xfs: fix up non-directory creation in SGID directories
Chunfeng Yun (7):
usb: xhci-mtk: get the microframe boundary for ESIT
usb: xhci-mtk: add only one extra CS for FS/LS INTR
usb: xhci-mtk: use @sch_tt to check whether need do TT schedule
usb: xhci-mtk: add a function to (un)load bandwidth info
usb: xhci-mtk: add some schedule error number
usb: xhci-mtk: allow multiple Start-Split in a microframe
usb: xhci-mtk: fix issue of out-of-bounds array access
Dan Williams (1):
devdax: Fix soft-reservation memory description
Daniel Jordan (3):
vfio/type1: Change success value of vaddr_get_pfn() vfio/type1: Prepare for batched pinning with struct vfio_batch vfio/type1: fix vaddr_get_pfns() return in vfio_pin_page_external()
Dave Chinner (2):
xfs: reorder iunlink remove operation in xfs_ifree
xfs: validate inode fork size against fork format
David Howells (1):
cifs: use discard iterator to discard unneeded network data more efficiently
David Leadbeater (1):
netfilter: nf_conntrack_irc: Tighten matching on DCC message
Fabio Estevam (1):
arm64: dts: rockchip: Remove 'enable-active-low' from rk3399-puma
Felix Fietkau (1):
wifi: mt76: fix reading current per-tid starting sequence number for aggregation
Florian Westphal (1):
netfilter: ebtables: fix memory leak when blob is malformed
Greg Kroah-Hartman (3):
Revert "usb: add quirks for Lenovo OneLink+ Dock" Revert "usb: gadget: udc-xilinx: replace memcpy with memcpy_toio" Linux 5.10.146
Hamza Mahfooz (1):
drm/amdgpu: use dirty framebuffer helper
Hangbin Liu (1):
selftests: forwarding: add shebang for sch_red.sh
Hangyu Hua (1):
net: sched: fix possible refcount leak in tc_new_tfilter()
Hans de Goede (1):
drm/gma500: Fix BUG: sleeping function called from invalid context errors
Heiko Schocher (1):
drm/panel: simple: Fix innolux_g121i1_l01 bus_format
Igor Ryzhov (1):
netfilter: nf_conntrack_sip: fix ct_sip_walk_headers
Ikjoon Jang (1):
usb: xhci-mtk: relax TT periodic bandwidth allocation
Ilpo Järvinen (3):
serial: Create uart_xmit_advance()
serial: tegra: Use uart_xmit_advance(), fixes icount.tx accounting
serial: tegra-tcu: Use uart_xmit_advance(), fixes icount.tx accounting
Ioana Ciornei (1):
net: phy: aquantia: wait for the suspend/resume operations to finish
Jan Kara (1):
ext4: make directory inode spreading reflect flexbg size
Jason A. Donenfeld (2):
wireguard: ratelimiter: disable timings test by default
wireguard: netlink: avoid variable-sized memcpy on sockaddr
Javier Martinez Canillas (1):
drm/hisilicon/hibmc: Allow to be built if COMPILE_TEST is enabled
Jean-Francois Le Fillatre (1):
usb: add quirks for Lenovo OneLink+ Dock
Jingwen Chen (1):
drm/amd/amdgpu: fixing read wrong pf2vf data in SRIOV
Johan Hovold (1):
media: flexcop-usb: fix endpoint type check
Kai Vehmanen (1):
ALSA: hda: add Intel 5 Series / 3400 PCI DID
Liang He (2):
dmaengine: ti: k3-udma-private: Fix refcount leak bug in of_xudma_dev_get()
of: mdio: Add of_node_put() when breaking out of for_each_xx
Lieven Hey (1):
perf jit: Include program header in ELF files
Lino Sanfilippo (1):
serial: atmel: remove redundant assignment in rs485_config
Lu Wei (1):
ipvlan: Fix out-of-bound bugs caused by unset skb->mac_header
Luben Tuikov (1):
drm/amdgpu: Fix check for RAS support
Ludovic Cintrat (1):
net: core: fix flow symmetric hash
Luke D. Jones (3):
ALSA: hda/realtek: Add pincfg for ASUS G513 HP jack
ALSA: hda/realtek: Add pincfg for ASUS G533Z HP jack
ALSA: hda/realtek: Add quirk for ASUS GA503R laptop
Luís Henriques (1):
ext4: fix bug in extents parsing when eh_entries == 0 and eh_depth > 0
Marc Kleine-Budde (2):
can: flexcan: flexcan_mailbox_read() fix return value for drop = true
can: gs_usb: gs_can_open(): fix race dev->can.state condition
Mark Brown (1):
arm64/bti: Disable in kernel BTI when cross section thunks are broken
Meng Li (1):
gpiolib: cdev: Set lineevent_state::irq after IRQ register successfully
Michal Jaron (3):
iavf: Fix set max MTU size with port VLAN and jumbo frames
i40e: Fix VF set max MTU size
i40e: Fix set max_tx_rate when it is lower than 1 Mbps
Mike Tipton (1):
interconnect: qcom: icc-rpmh: Add BCMs to commit list in pre_aggregate
Mingwei Zhang (1):
KVM: SEV: add cache flush to solve SEV cache incoherency issues
Mohan Kumar (1):
ALSA: hda/tegra: set depop delay for tegra
Nathan Chancellor (2):
arm64: Restrict ARM64_BTI_KERNEL to clang 12.0.0 and newer drm/amd/display: Mark dml30's UseMinimumDCFCLK() as noinline for stack usage
Nathan Huckleberry (1):
drm/rockchip: Fix return type of cdn_dp_connector_mode_valid
Norbert Zulinski (1):
iavf: Fix bad page state
Nícolas F. R. A. Prado (1):
drm/mediatek: dsi: Move mtk_dsi_stop() call back to mtk_dsi_poweroff()
Pablo Neira Ayuso (1):
netfilter: nfnetlink_osf: fix possible bogus match in nf_osf_find()
Pawel Laszczak (2):
usb: cdns3: fix incorrect handling TRB_SMM flag for ISOC transfer
usb: cdns3: fix issue with rearming ISO OUT endpoint
Peng Ju Zhou (1):
drm/amdgpu: indirect register access for nv12 sriov
Piyush Mehta (1):
usb: gadget: udc-xilinx: replace memcpy with memcpy_toio
Randy Dunlap (2):
MIPS: lantiq: export clk_get_io() for lantiq_wdt.ko drm/hisilicon: Add depends on MMU
Sean Anderson (1):
net: sunhme: Fix packet reception for len < RX_COPY_THRESHOLD
Serge Semin (1):
MIPS: Loongson32: Fix PHY-mode being left unspecified
Sergiu Moga (1):
tty: serial: atmel: Preserve previous USART mode if RS485 disabled
Sreekanth Reddy (1):
scsi: mpt3sas: Fix return value check of dma_get_required_mask()
Stefan Haberland (1):
s390/dasd: fix Oops in dasd_alias_get_start_dev due to missing pavgroup
Stefan Metzmacher (1):
cifs: always initialize struct msghdr smb_msg completely
Suganath Prabu S (1):
scsi: mpt3sas: Force PCIe scatterlist allocations to be within same 4 GB region
Takashi Iwai (1):
ALSA: hda/realtek: Re-arrange quirk table entries
Tetsuo Handa (3):
netfilter: nf_tables: fix nft_counters_enabled underflow at nf_tables_addchain()
netfilter: nf_tables: fix percpu memory leak at nf_tables_addchain()
workqueue: don't skip lockdep work dependency in cancel_work_sync()
Theodore Ts'o (1):
ext4: limit the number of retries after discarding preallocations blocks
Thinh Nguyen (3):
usb: dwc3: gadget: Prevent repeat pullup()
usb: dwc3: gadget: Refactor pullup()
usb: dwc3: gadget: Don't modify GEVNTCOUNT in pullup()
Utkarsh Patel (1):
usb: typec: intel_pmc_mux: Add new ACPI ID for Meteor Lake IOM device
Uwe Kleine-König (1):
i2c: imx: If pm_runtime_get_sync() returned 1 device access is possible
Victor Skvortsov (1):
drm/amdgpu: Separate vf2pf work item init from virt data exchange
Vitaly Kuznetsov (1):
Drivers: hv: Never allocate anything besides framebuffer from framebuffer memory region
Vladimir Oltean (3):
net: enetc: move enetc_set_psfp() out of the common enetc_set_features() net/sched: taprio: avoid disabling offload when it was never enabled net/sched: taprio: make qdisc_leaf() see the per-netdev-queue pfifo child qdiscs
Wen Gu (1):
net/smc: Stop the CLC flow if no link to map buffers on
Wesley Cheng (3):
usb: dwc3: gadget: Avoid starting DWC3 gadget during UDC unbind
usb: dwc3: Issue core soft reset before enabling run/stop
usb: dwc3: gadget: Avoid duplicate requests to enable Run/Stop
Yao Wang1 (1):
drm/amd/display: Limit user regamma to a valid value
Yi Liu (1):
iommu/vt-d: Check correct capability for sagaw determination
huangwenhui (1):
ALSA: hda/realtek: Add quirk for Huawei WRT-WX9
jerry meng (1):
USB: serial: option: add Quectel RM520N
zain wang (1):
arm64: dts: rockchip: Set RK3399-Gru PCLK_EDP to 24 MHz
zhang kai (1):
net: let flow have same hash in two directions
Íñigo Huguet (2):
sfc: fix TX channel offset when using legacy interrupts
sfc: fix null pointer dereference in efx_hard_start_xmit
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 145 +SUBLEVEL = 146 EXTRAVERSION = NAME = Dare mighty things
arch/arm64/Kconfig +4 -1
@@ -1654,7 +1654,10 @@ config ARM64_BTI_KERNEL depends on CC_HAS_BRANCH_PROT_PAC_RET_BTI # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94697 depends on !CC_IS_GCC || GCC_VERSION >= 100100 - depends on !(CC_IS_CLANG && GCOV_KERNEL) + # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106671 + depends on !CC_IS_GCC + # https://github.com/llvm/llvm-project/commit/a88c722e687e6780dcd6a58718350dc76fcc4cc9 + depends on !CC_IS_CLANG || CLANG_VERSION >= 120000 depends on (!FUNCTION_GRAPH_TRACER || DYNAMIC_FTRACE_WITH_REGS) help Build the kernel with Branch Target Identification annotations
arch/arm64/boot/dts/rockchip/rk3399-gru-bob.dts +5 -0
@@ -87,3 +87,8 @@ h1_int_od_l: h1-int-od-l { }; }; }; + +&wlan_host_wake_l { + /* Kevin has an external pull up, but Bob does not. */ + rockchip,pins = <0 RK_PB0 RK_FUNC_GPIO &pcfg_pull_up>; +};
arch/arm64/boot/dts/rockchip/rk3399-gru-chromebook.dtsi +9 -0
@@ -237,6 +237,14 @@ &cdn_dp { &edp { status = "okay"; + /* + * eDP PHY/clk don't sync reliably at anything other than 24 MHz. Only + * set this here, because rk3399-gru.dtsi ensures we can generate this + * off GPLL=600MHz, whereas some other RK3399 boards may not. + */ + assigned-clocks = <&cru PCLK_EDP>; + assigned-clock-rates = <24000000>; + ports { edp_out: port@1 { reg = <1>;
@@ -395,6 +403,7 @@ wifi_perst_l: wifi-perst-l { }; wlan_host_wake_l: wlan-host-wake-l { + /* Kevin has an external pull up, but Bob does not */ rockchip,pins = <0 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>; }; };
arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi +0 -1
@@ -102,7 +102,6 @@ vcc3v3_sys: vcc3v3-sys { vcc5v0_host: vcc5v0-host-regulator { compatible = "regulator-fixed"; gpio = <&gpio4 RK_PA3 GPIO_ACTIVE_LOW>; - enable-active-low; pinctrl-names = "default"; pinctrl-0 = <&vcc5v0_host_en>; regulator-name = "vcc5v0_host";
arch/mips/lantiq/clk.c +1 -0
@@ -50,6 +50,7 @@ struct clk *clk_get_io(void) {return &cpu_clk_generic[2 ]; } +EXPORT_SYMBOL_GPL (clk_get_io);struct clk *clk_get_ppe (void ) {
arch/mips/loongson32/common/platform.c +8 -8
@@ -98,7 +98,7 @@ int ls1x_eth_mux_init(struct platform_device *pdev, void *priv)if (plat_dat->bus_id) {__raw_writel (__raw_readl (LS1X_MUX_CTRL0 ) |GMAC1_USE_UART1 |GMAC1_USE_UART0 ,LS1X_MUX_CTRL0 ); -switch (plat_dat->interface) { +switch (plat_dat->phy_interface) {case PHY_INTERFACE_MODE_RGMII : val &= ~(GMAC1_USE_TXCLK |GMAC1_USE_PWM23 );break ;
@@ -107,12 +107,12 @@ int ls1x_eth_mux_init(struct platform_device *pdev, void *priv)break ;default :pr_err ("unsupported mii mode %d\n" , - plat_dat->interface); + plat_dat->phy_interface);return -ENOTSUPP ; } val &= ~GMAC1_SHUT ; }else { -switch (plat_dat->interface) { +switch (plat_dat->phy_interface) {case PHY_INTERFACE_MODE_RGMII : val &= ~(GMAC0_USE_TXCLK |GMAC0_USE_PWM01 );break ;
@@ -121,7 +121,7 @@ int ls1x_eth_mux_init(struct platform_device *pdev, void *priv)break ;default :pr_err ("unsupported mii mode %d\n" , - plat_dat->interface); + plat_dat->phy_interface);return -ENOTSUPP ; } val &= ~GMAC0_SHUT ;
@@ -131,7 +131,7 @@ int ls1x_eth_mux_init(struct platform_device *pdev, void *priv) plat_dat =dev_get_platdata (&pdev->dev); val &= ~PHY_INTF_SELI ; -if (plat_dat->interface ==PHY_INTERFACE_MODE_RMII ) +if (plat_dat->phy_interface ==PHY_INTERFACE_MODE_RMII ) val |=0x4 <<PHY_INTF_SELI_SHIFT ;__raw_writel (val,LS1X_MUX_CTRL1 );
@@ -146,9 +146,9 @@ static struct plat_stmmacenet_data ls1x_eth0_pdata = { .bus_id = 0, .phy_addr = -1,#if defined(CONFIG_LOONGSON1_LS1B ) - .interface = PHY_INTERFACE_MODE_MII, + .phy_interface = PHY_INTERFACE_MODE_MII,#elif defined(CONFIG_LOONGSON1_LS1C ) - .interface = PHY_INTERFACE_MODE_RMII, + .phy_interface = PHY_INTERFACE_MODE_RMII, #endif .mdio_bus_data = &ls1x_mdio_bus_data, .dma_cfg = &ls1x_eth_dma_cfg,
@@ -186,7 +186,7 @@ struct platform_device ls1x_eth0_pdev = {static struct plat_stmmacenet_data ls1x_eth1_pdata = { .bus_id =1 , .phy_addr =-1 , - .interface =PHY_INTERFACE_MODE_MII , + .phy_interface =PHY_INTERFACE_MODE_MII , .mdio_bus_data = &ls1x_mdio_bus_data, .dma_cfg = &ls1x_eth_dma_cfg, .has_gmac =1 ,
arch/riscv/kernel/signal.c +2 -0
@@ -121,6 +121,8 @@ SYSCALL_DEFINE0(rt_sigreturn)if (restore_altstack (&frame->uc.uc_stack)) goto badframe; + regs->cause =-1UL ; +return regs->a0; badframe:
arch/x86/include/asm/kvm_host.h +1 -0
@@ -1275,6 +1275,7 @@ struct kvm_x86_ops {int (*mem_enc_op)(struct kvm *kvm,void __user *argp);int (*mem_enc_reg_region)(struct kvm *kvm,struct kvm_enc_region *argp);int (*mem_enc_unreg_region)(struct kvm *kvm,struct kvm_enc_region *argp); +void (*guest_memory_reclaimed)(struct kvm *kvm);int (*get_msr_feature)(struct kvm_msr_entry *entry);
arch/x86/kvm/svm/sev.c +8 -0
@@ -1177,6 +1177,14 @@ void sev_hardware_teardown(void)sev_flush_asids (); } +void sev_guest_memory_reclaimed (struct kvm *kvm) +{ +if (!sev_guest (kvm)) +return ; + +wbinvd_on_all_cpus (); +} +void pre_sev_run (struct vcpu_svm *svm,int cpu) {struct svm_cpu_data *sd =per_cpu (svm_data, cpu);
arch/x86/kvm/svm/svm.c +1 -0
@@ -4325,6 +4325,7 @@ static struct kvm_x86_ops svm_x86_ops __initdata = { .mem_enc_op = svm_mem_enc_op, .mem_enc_reg_region = svm_register_enc_region, .mem_enc_unreg_region = svm_unregister_enc_region, + .guest_memory_reclaimed = sev_guest_memory_reclaimed, .can_emulate_instruction = svm_can_emulate_instruction,
arch/x86/kvm/svm/svm.h +2 -0
@@ -491,6 +491,8 @@ int svm_register_enc_region(struct kvm *kvm, struct kvm_enc_region *range);int svm_unregister_enc_region (struct kvm *kvm,struct kvm_enc_region *range); +void sev_guest_memory_reclaimed (struct kvm *kvm); +void pre_sev_run (struct vcpu_svm *svm,int cpu);int __init sev_hardware_setup (void );void sev_hardware_teardown (void );
arch/x86/kvm/x86.c +6 -0
@@ -8875,6 +8875,12 @@ void kvm_arch_mmu_notifier_invalidate_range(struct kvm *kvm,kvm_make_all_cpus_request (kvm,KVM_REQ_APIC_PAGE_RELOAD ); } +void kvm_arch_guest_memory_reclaimed (struct kvm *kvm) +{ +if (kvm_x86_ops.guest_memory_reclaimed) + kvm_x86_ops.guest_memory_reclaimed (kvm); +} +void kvm_vcpu_reload_apic_access_page (struct kvm_vcpu *vcpu) {if (!lapic_in_kernel (vcpu))
drivers/dax/hmem/device.c +1 -0
@@ -15,6 +15,7 @@ void hmem_register_device(int target_nid, struct resource *r) .start = r->start, .end = r->end, .flags = IORESOURCE_MEM, + .desc = IORES_DESC_SOFT_RESERVED, };struct platform_device *pdev;struct memregion_info info;
drivers/dma/ti/k3-udma-private.c +3 -3
@@ -31,14 +31,14 @@ struct udma_dev *of_xudma_dev_get(struct device_node *np, const char *property) } pdev =of_find_device_by_node (udma_node); +if (np != udma_node) +of_node_put (udma_node); +if (!pdev) {pr_debug ("UDMA device not found\n" );return ERR_PTR (-EPROBE_DEFER ); } -if (np != udma_node) -of_node_put (udma_node); - ud =platform_get_drvdata (pdev);if (!ud) {pr_debug ("UDMA has not been probed\n" );
drivers/firmware/efi/libstub/secureboot.c +4 -4
@@ -19,7 +19,7 @@ static const efi_char16_t efi_SetupMode_name[] = L"SetupMode";/* SHIM variables */ static const efi_guid_t shim_guid =EFI_SHIM_LOCK_GUID ; -static const efi_char16_t shim_MokSBState_name[] =L"MokSBState" ; +static const efi_char16_t shim_MokSBState_name[] =L"MokSBStateRT" ;/* * Determine whether we're in secure boot mode.
@@ -53,8 +53,8 @@ enum efi_secureboot_mode efi_get_secureboot(void)/* * See if a user has put the shim into insecure mode. If so, and if the -* variable doesn't have the runtime attribute set, we might as well -* honor that. +* variable doesn't have the non-volatile attribute set, we might as +* well honor that. */ size =sizeof (moksbstate); status = get_efi_var(shim_MokSBState_name, &shim_guid,
@@ -63,7 +63,7 @@ enum efi_secureboot_mode efi_get_secureboot(void)/* If it fails, we don't care why. Default to secure */ if (status !=EFI_SUCCESS ) goto secure_boot_enabled; -if (!(attr &EFI_VARIABLE_RUNTIME_ACCESS ) && moksbstate ==1 ) +if (!(attr &EFI_VARIABLE_NON_VOLATILE ) && moksbstate ==1 )return efi_secureboot_mode_disabled; secure_boot_enabled:
drivers/firmware/efi/libstub/x86-stub.c +7 -0
@@ -414,6 +414,13 @@ efi_status_t __efiapi efi_pe_entry(efi_handle_t handle, hdr->ramdisk_image =0 ; hdr->ramdisk_size =0 ; +/* +* Disregard any setup data that was provided by the bootloader: +* setup_data could be pointing anywhere, and we have no way of +* authenticating or validating the payload. +*/ + hdr->setup_data =0 ; +efi_stub_entry (handle, sys_table_arg, boot_params);/* not reached */
drivers/gpio/gpio-mockup.c +1 -1
@@ -604,9 +604,9 @@ static int __init gpio_mockup_init(void) static void __exit gpio_mockup_exit(void) { +gpio_mockup_unregister_pdevs ();debugfs_remove_recursive (gpio_mockup_dbg_dir);platform_driver_unregister (&gpio_mockup_driver); -gpio_mockup_unregister_pdevs (); }module_init (gpio_mockup_init);
drivers/gpio/gpiolib-cdev.c +3 -2
@@ -1769,7 +1769,6 @@ static int lineevent_create(struct gpio_device *gdev, void __user *ip) ret = -ENODEV ; goto out_free_le; } - le->irq = irq;if (eflags &GPIOEVENT_REQUEST_RISING_EDGE ) irqflags |= test_bit(FLAG_ACTIVE_LOW, &desc->flags) ?
@@ -1783,7 +1782,7 @@ static int lineevent_create(struct gpio_device *gdev, void __user *ip)init_waitqueue_head (&le->wait);/* Request a thread to read the events */ - ret = request_threaded_irq(le->irq, + ret = request_threaded_irq(irq, lineevent_irq_handler, lineevent_irq_thread, irqflags,
@@ -1792,6 +1791,8 @@ static int lineevent_create(struct gpio_device *gdev, void __user *ip)if (ret) goto out_free_le; + le->irq = irq; + fd =get_unused_fd_flags (O_RDONLY |O_CLOEXEC );if (fd <0 ) { ret = fd;
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +20 -3
@@ -2047,6 +2047,11 @@ static int amdgpu_device_ip_early_init(struct amdgpu_device *adev)amdgpu_vf_error_put (adev,AMDGIM_ERROR_VF_ATOMBIOS_INIT_FAIL ,0 ,0 );return r; } + +/*get pf2vf msg info at it's earliest time*/ +if (amdgpu_sriov_vf (adev)) +amdgpu_virt_init_data_exchange (adev); + } }
@@ -2174,8 +2179,20 @@ static int amdgpu_device_ip_init(struct amdgpu_device *adev) } adev->ip_blocks[i].status.sw = true; -/* need to do gmc hw init early so we can allocate gpu mem */ -if (adev->ip_blocks[i].version->type ==AMD_IP_BLOCK_TYPE_GMC ) { +if (adev->ip_blocks[i].version->type ==AMD_IP_BLOCK_TYPE_COMMON ) { +/* need to do common hw init early so everything is set up for gmc */ + r = adev->ip_blocks[i].version->funcs->hw_init ((void *)adev); +if (r) { +DRM_ERROR ("hw_init %d failed %d\n" , i, r); + goto init_failed; + } + adev->ip_blocks[i].status.hw = true; + }else if (adev->ip_blocks[i].version->type ==AMD_IP_BLOCK_TYPE_GMC ) { +/* need to do gmc hw init early so we can allocate gpu mem */ +/* Try to reserve bad pages early */ +if (amdgpu_sriov_vf (adev)) +amdgpu_virt_exchange_data (adev); + r =amdgpu_device_vram_scratch_init (adev);if (r) {DRM_ERROR ("amdgpu_vram_scratch_init failed %d\n" , r);
@@ -2753,8 +2770,8 @@ static int amdgpu_device_ip_reinit_early_sriov(struct amdgpu_device *adev)int i, r;static enum amd_ip_block_type ip_order[] = { -AMD_IP_BLOCK_TYPE_GMC ,AMD_IP_BLOCK_TYPE_COMMON , +AMD_IP_BLOCK_TYPE_GMC ,AMD_IP_BLOCK_TYPE_PSP ,AMD_IP_BLOCK_TYPE_IH , };
drivers/gpu/drm/amd/amdgpu/amdgpu_display.c +2 -0
@@ -35,6 +35,7 @@#include <linux/pci.h> #include <linux/pm_runtime.h> #include <drm/drm_crtc_helper.h> +#include <drm/drm_damage_helper.h> #include <drm/drm_edid.h> #include <drm/drm_gem_framebuffer_helper.h> #include <drm/drm_fb_helper.h>
@@ -498,6 +499,7 @@ bool amdgpu_display_ddc_probe(struct amdgpu_connector *amdgpu_connector,static const struct drm_framebuffer_funcs amdgpu_fb_funcs = { .destroy = drm_gem_fb_destroy, .create_handle = drm_gem_fb_create_handle, + .dirty = drm_atomic_helper_dirtyfb, }; uint32_t amdgpu_display_supported_domains(struct amdgpu_device *adev,
drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c +6 -9
@@ -1979,15 +1979,12 @@ int amdgpu_ras_request_reset_on_boot(struct amdgpu_device *adev,return 0 ; } -static int amdgpu_ras_check_asic_type (struct amdgpu_device *adev) +static bool amdgpu_ras_asic_supported (struct amdgpu_device *adev) { -if (adev->asic_type !=CHIP_VEGA10 && - adev->asic_type !=CHIP_VEGA20 && - adev->asic_type !=CHIP_ARCTURUS && - adev->asic_type !=CHIP_SIENNA_CICHLID ) -return 1 ; -else -return 0 ; +return adev->asic_type ==CHIP_VEGA10 || + adev->asic_type ==CHIP_VEGA20 || + adev->asic_type ==CHIP_ARCTURUS || + adev->asic_type ==CHIP_SIENNA_CICHLID ; }/*
@@ -2006,7 +2003,7 @@ static void amdgpu_ras_check_supported(struct amdgpu_device *adev, *supported =0 ;if (amdgpu_sriov_vf (adev) || !adev->is_atom_fw || -amdgpu_ras_check_asic_type (adev)) + !amdgpu_ras_asic_supported (adev))return ;if (amdgpu_atomfirmware_mem_ecc_supported (adev)) {
drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c +24 -10
@@ -580,16 +580,34 @@ void amdgpu_virt_fini_data_exchange(struct amdgpu_device *adev)void amdgpu_virt_init_data_exchange (struct amdgpu_device *adev) { -uint64_t bp_block_offset =0 ; -uint32_t bp_block_size =0 ; -struct amd_sriov_msg_pf2vf_info *pf2vf_v2 =NULL ; - adev->virt.fw_reserve.p_pf2vf =NULL ; adev->virt.fw_reserve.p_vf2pf =NULL ; adev->virt.vf2pf_update_interval_ms =0 ;if (adev->mman.fw_vram_usage_va !=NULL ) { - adev->virt.vf2pf_update_interval_ms =2000 ; +/* go through this logic in ip_init and reset to init workqueue*/ +amdgpu_virt_exchange_data (adev); + +INIT_DELAYED_WORK (&adev->virt.vf2pf_work, amdgpu_virt_update_vf2pf_work_item); +schedule_delayed_work (&(adev->virt.vf2pf_work),msecs_to_jiffies (adev->virt.vf2pf_update_interval_ms)); + }else if (adev->bios !=NULL ) { +/* got through this logic in early init stage to get necessary flags, e.g. rlcg_acc related*/ + adev->virt.fw_reserve.p_pf2vf = + (struct amd_sriov_msg_pf2vf_info_header *) + (adev->bios + (AMD_SRIOV_MSG_PF2VF_OFFSET_KB <<10 )); + +amdgpu_virt_read_pf2vf_data (adev); + } +} + + +void amdgpu_virt_exchange_data (struct amdgpu_device *adev) +{ +uint64_t bp_block_offset =0 ; +uint32_t bp_block_size =0 ; +struct amd_sriov_msg_pf2vf_info *pf2vf_v2 =NULL ; + +if (adev->mman.fw_vram_usage_va !=NULL ) { adev->virt.fw_reserve.p_pf2vf = (struct amd_sriov_msg_pf2vf_info_header *)
@@ -616,13 +634,9 @@ void amdgpu_virt_init_data_exchange(struct amdgpu_device *adev)amdgpu_virt_add_bad_page (adev, bp_block_offset, bp_block_size); } } - -if (adev->virt.vf2pf_update_interval_ms !=0 ) { -INIT_DELAYED_WORK (&adev->virt.vf2pf_work, amdgpu_virt_update_vf2pf_work_item); -schedule_delayed_work (&(adev->virt.vf2pf_work), adev->virt.vf2pf_update_interval_ms); - } } +void amdgpu_detect_virtualization (struct amdgpu_device *adev) {uint32_t reg;
drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h +1 -0
@@ -271,6 +271,7 @@ int amdgpu_virt_alloc_mm_table(struct amdgpu_device *adev);void amdgpu_virt_free_mm_table (struct amdgpu_device *adev);void amdgpu_virt_release_ras_err_handler_data (struct amdgpu_device *adev);void amdgpu_virt_init_data_exchange (struct amdgpu_device *adev); +void amdgpu_virt_exchange_data (struct amdgpu_device *adev);void amdgpu_virt_fini_data_exchange (struct amdgpu_device *adev);void amdgpu_detect_virtualization (struct amdgpu_device *adev);
drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c +5 -0
@@ -1475,6 +1475,11 @@ static int sdma_v4_0_start(struct amdgpu_device *adev)WREG32_SDMA (i, mmSDMA0_CNTL, temp);if (!amdgpu_sriov_vf (adev)) { + ring = &adev->sdma.instance[i].ring; + adev->nbio.funcs->sdma_doorbell_range (adev, i, + ring->use_doorbell, ring->doorbell_index, + adev->doorbell_index.sdma_doorbell_range); +/* unhalt engine */ temp =RREG32_SDMA (i, mmSDMA0_F32_CNTL); temp =REG_SET_FIELD (temp,SDMA0_F32_CNTL ,HALT ,0 );
drivers/gpu/drm/amd/amdgpu/soc15.c +0 -25
@@ -1332,25 +1332,6 @@ static int soc15_common_sw_fini(void *handle)return 0 ; } -static void soc15_doorbell_range_init (struct amdgpu_device *adev) -{ -int i; -struct amdgpu_ring *ring; - -/* sdma/ih doorbell range are programed by hypervisor */ -if (!amdgpu_sriov_vf (adev)) { -for (i =0 ; i < adev->sdma.num_instances; i++) { - ring = &adev->sdma.instance[i].ring; - adev->nbio.funcs->sdma_doorbell_range (adev, i, - ring->use_doorbell, ring->doorbell_index, - adev->doorbell_index.sdma_doorbell_range); - } - - adev->nbio.funcs->ih_doorbell_range (adev, adev->irq.ih.use_doorbell, - adev->irq.ih.doorbell_index); - } -} -static int soc15_common_hw_init (void *handle) {struct amdgpu_device *adev = (struct amdgpu_device *)handle;
@@ -1370,12 +1351,6 @@ static int soc15_common_hw_init(void *handle)/* enable the doorbell aperture */ soc15_enable_doorbell_aperture (adev, true); -/* HW doorbell routing policy: doorbell writing not -* in SDMA/IH/MM/ACV range will be routed to CP. So -* we need to init SDMA/IH/MM/ACV doorbell range prior -* to CP ip block init and ring test. -*/ -soc15_doorbell_range_init (adev);return 0 ; }
drivers/gpu/drm/amd/display/dc/dml/dcn30/display_mode_vba_30.c +1 -2
@@ -6653,8 +6653,7 @@ static double CalculateUrgentLatency(return ret; } - -static void UseMinimumDCFCLK( +static noinline_for_stack void UseMinimumDCFCLK( struct display_mode_lib *mode_lib, int MaxInterDCNTileRepeaters, int MaxPrefetchMode,
drivers/gpu/drm/amd/display/modules/color/color_gamma.c +4 -0
@@ -1524,6 +1524,7 @@ static void interpolate_user_regamma(uint32_t hw_points_num,struct fixed31_32 lut2;struct fixed31_32 delta_lut;struct fixed31_32 delta_index; +const struct fixed31_32 one =dc_fixpt_from_int (1 ); i =0 ;/* fixed_pt library has problems handling too small values */
@@ -1552,6 +1553,9 @@ static void interpolate_user_regamma(uint32_t hw_points_num, }else hw_x = coordinates_x[i].x; +if (dc_fixpt_le (one, hw_x)) + hw_x = one; + norm_x =dc_fixpt_mul (norm_factor, hw_x); index =dc_fixpt_floor (norm_x);if (index <0 || index >255 )
drivers/gpu/drm/gma500/gma_display.c +7 -4
@@ -529,15 +529,18 @@ int gma_crtc_page_flip(struct drm_crtc *crtc,WARN_ON (drm_crtc_vblank_get (crtc) !=0 ); gma_crtc->page_flip_event = event; +spin_unlock_irqrestore (&dev->event_lock, flags);/* Call this locked if we want an event at vblank interrupt. */ ret = crtc_funcs->mode_set_base (crtc, crtc->x, crtc->y, old_fb);if (ret) { - gma_crtc->page_flip_event =NULL ; -drm_crtc_vblank_put (crtc); +spin_lock_irqsave (&dev->event_lock, flags); +if (gma_crtc->page_flip_event) { + gma_crtc->page_flip_event =NULL ; +drm_crtc_vblank_put (crtc); + } +spin_unlock_irqrestore (&dev->event_lock, flags); } - -spin_unlock_irqrestore (&dev->event_lock, flags); }else { ret = crtc_funcs->mode_set_base (crtc, crtc->x, crtc->y, old_fb); }
drivers/gpu/drm/hisilicon/hibmc/Kconfig +2 -1
@@ -1,7 +1,8 @@ # SPDX-License-Identifier: GPL-2.0-only config DRM_HISI_HIBMC tristate "DRM Support for Hisilicon Hibmc" - depends on DRM && PCI && ARM64 + depends on DRM && PCI && (ARM64 || COMPILE_TEST) + depends on MMU select DRM_KMS_HELPER select DRM_VRAM_HELPER select DRM_TTM
drivers/gpu/drm/mediatek/mtk_dsi.c +13 -11
@@ -668,6 +668,16 @@ static void mtk_dsi_poweroff(struct mtk_dsi *dsi)if (--dsi->refcount !=0 )return ; +/* +* mtk_dsi_stop() and mtk_dsi_start() is asymmetric, since +* mtk_dsi_stop() should be called after mtk_drm_crtc_atomic_disable(), +* which needs irq for vblank, and mtk_dsi_stop() will disable irq. +* mtk_dsi_start() needs to be called in mtk_output_dsi_enable(), +* after dsi is fully set. +*/ +mtk_dsi_stop (dsi); + +mtk_dsi_switch_to_cmd_mode (dsi,VM_DONE_INT_FLAG ,500 );mtk_dsi_reset_engine (dsi);mtk_dsi_lane0_ulp_mode_enter (dsi);mtk_dsi_clk_ulp_mode_enter (dsi);
@@ -718,17 +728,6 @@ static void mtk_output_dsi_disable(struct mtk_dsi *dsi)if (!dsi->enabled)return ; -/* -* mtk_dsi_stop() and mtk_dsi_start() is asymmetric, since -* mtk_dsi_stop() should be called after mtk_drm_crtc_atomic_disable(), -* which needs irq for vblank, and mtk_dsi_stop() will disable irq. -* mtk_dsi_start() needs to be called in mtk_output_dsi_enable(), -* after dsi is fully set. -*/ -mtk_dsi_stop (dsi); - -mtk_dsi_switch_to_cmd_mode (dsi,VM_DONE_INT_FLAG ,500 ); - dsi->enabled = false; }
@@ -791,10 +790,13 @@ static void mtk_dsi_bridge_atomic_post_disable(struct drm_bridge *bridge,static const struct drm_bridge_funcs mtk_dsi_bridge_funcs = { .attach = mtk_dsi_bridge_attach, + .atomic_destroy_state = drm_atomic_helper_bridge_destroy_state, .atomic_disable = mtk_dsi_bridge_atomic_disable, + .atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state, .atomic_enable = mtk_dsi_bridge_atomic_enable, .atomic_pre_enable = mtk_dsi_bridge_atomic_pre_enable, .atomic_post_disable = mtk_dsi_bridge_atomic_post_disable, + .atomic_reset = drm_atomic_helper_bridge_reset, .mode_set = mtk_dsi_bridge_mode_set, };
drivers/gpu/drm/panel/panel-simple.c +1 -1
@@ -2201,7 +2201,7 @@ static const struct panel_desc innolux_g121i1_l01 = { .enable = 200, .disable = 20, }, - .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG, + .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG, .connector_type = DRM_MODE_CONNECTOR_LVDS, };
drivers/gpu/drm/rockchip/cdn-dp-core.c +3 -2
@@ -276,8 +276,9 @@ static int cdn_dp_connector_get_modes(struct drm_connector *connector)return ret; } -static int cdn_dp_connector_mode_valid (struct drm_connector *connector, -struct drm_display_mode *mode) +static enum drm_mode_status +cdn_dp_connector_mode_valid (struct drm_connector *connector, +struct drm_display_mode *mode) {struct cdn_dp_device *dp =connector_to_dp (connector);struct drm_display_info *display_info = &dp->connector.display_info;
drivers/hv/vmbus_drv.c +9 -1
@@ -2251,7 +2251,7 @@ int vmbus_allocate_mmio(struct resource **new, struct hv_device *device_obj, bool fb_overlap_ok) {struct resource *iter, *shadow; -resource_size_t range_min, range_max, start; +resource_size_t range_min, range_max, start, end;const char *dev_n =dev_name (&device_obj->device);int retval;
@@ -2286,6 +2286,14 @@ int vmbus_allocate_mmio(struct resource **new, struct hv_device *device_obj, range_max = iter->end; start = (range_min + align -1 ) & ~(align -1 );for (; start + size -1 <= range_max; start += align) { + end = start + size -1 ; + +/* Skip the whole fb_mmio region if not fb_overlap_ok */ +if (!fb_overlap_ok && fb_mmio && + (((start >= fb_mmio->start) && (start <= fb_mmio->end)) || + ((end >= fb_mmio->start) && (end <= fb_mmio->end)))) +continue ; + shadow =__request_region (iter, start, size,NULL ,IORESOURCE_BUSY );if (!shadow)
drivers/i2c/busses/i2c-imx.c +1 -1
@@ -1289,7 +1289,7 @@ static int i2c_imx_remove(struct platform_device *pdev)if (i2c_imx->dma)i2c_imx_dma_free (i2c_imx); -if (ret ==0 ) { +if (ret >=0 ) {/* setup chip registers to defaults */ imx_i2c_write_reg (0 , i2c_imx,IMX_I2C_IADR );imx_i2c_write_reg (0 , i2c_imx,IMX_I2C_IFDR );
drivers/i2c/busses/i2c-mlxbf.c +27 -41
165 lines not on this page · raw message
drivers/interconnect/qcom/icc-rpmh.c +5 -5
@@ -20,13 +20,18 @@ void qcom_icc_pre_aggregate(struct icc_node *node) {size_t i;struct qcom_icc_node *qn; +struct qcom_icc_provider *qp; qn = node->data; + qp =to_qcom_provider (node->provider);for (i =0 ; i <QCOM_ICC_NUM_BUCKETS ; i++) { qn->sum_avg[i] =0 ; qn->max_peak[i] =0 ; } + +for (i =0 ; i < qn->num_bcms; i++) +qcom_icc_bcm_voter_add (qp->voter, qn->bcms[i]); }EXPORT_SYMBOL_GPL (qcom_icc_pre_aggregate);
@@ -44,10 +49,8 @@ int qcom_icc_aggregate(struct icc_node *node, u32 tag, u32 avg_bw, {size_t i;struct qcom_icc_node *qn; -struct qcom_icc_provider *qp; qn = node->data; - qp =to_qcom_provider (node->provider);if (!tag) tag =QCOM_ICC_TAG_ALWAYS ;
@@ -67,9 +70,6 @@ int qcom_icc_aggregate(struct icc_node *node, u32 tag, u32 avg_bw, *agg_avg += avg_bw; *agg_peak =max_t (u32, *agg_peak, peak_bw); -for (i =0 ; i < qn->num_bcms; i++) -qcom_icc_bcm_voter_add (qp->voter, qn->bcms[i]); -return 0 ; }EXPORT_SYMBOL_GPL (qcom_icc_aggregate);
drivers/interconnect/qcom/sm8150.c +0 -1
@@ -627,7 +627,6 @@ static struct platform_driver qnoc_driver = { .driver = { .name = "qnoc-sm8150", .of_match_table = qnoc_of_match, - .sync_state = icc_sync_state, }, };module_platform_driver (qnoc_driver);
drivers/interconnect/qcom/sm8250.c +0 -1
@@ -643,7 +643,6 @@ static struct platform_driver qnoc_driver = { .driver = { .name = "qnoc-sm8250", .of_match_table = qnoc_of_match, - .sync_state = icc_sync_state, }, };module_platform_driver (qnoc_driver);
drivers/iommu/intel/iommu.c +1 -1
@@ -569,7 +569,7 @@ static unsigned long __iommu_calculate_sagaw(struct intel_iommu *iommu) {unsigned long fl_sagaw, sl_sagaw; - fl_sagaw =BIT (2 ) | (cap_fl1gp_support (iommu->cap) ?BIT (3 ) :0 ); + fl_sagaw =BIT (2 ) | (cap_5lp_support (iommu->cap) ?BIT (3 ) :0 ); sl_sagaw =cap_sagaw (iommu->cap);/* Second level only. */
drivers/media/usb/b2c2/flexcop-usb.c +1 -1
@@ -512,7 +512,7 @@ static int flexcop_usb_init(struct flexcop_usb *fc_usb)if (fc_usb->uintf->cur_altsetting->desc.bNumEndpoints <1 )return -ENODEV ; -if (!usb_endpoint_is_isoc_in (&fc_usb->uintf->cur_altsetting->endpoint[1 ].desc)) +if (!usb_endpoint_is_isoc_in (&fc_usb->uintf->cur_altsetting->endpoint[0 ].desc))return -ENODEV ;switch (fc_usb->udev->speed) {
drivers/mmc/core/sd.c +16 -26
57 lines not on this page · raw message
drivers/net/bonding/bond_3ad.c +3 -2
@@ -85,8 +85,9 @@ static const u8 null_mac_addr[ETH_ALEN + 2] __long_aligned = {static u16 ad_ticks_per_sec;static const int ad_delta_in_ticks = (AD_TIMER_INTERVAL *HZ ) /1000 ; -static const u8 lacpdu_mcast_addr[ETH_ALEN + 2] __long_aligned = -MULTICAST_LACPDU_ADDR ; +const u8 lacpdu_mcast_addr[ETH_ALEN + 2] __long_aligned = { +0x01 ,0x80 ,0xC2 ,0x00 ,0x00 ,0x02 +};/* ================= main 802.3ad protocol functions ================== */ static int ad_lacpdu_send (struct port *port);
drivers/net/bonding/bond_main.c +36 -21
106 lines not on this page · raw message
drivers/net/can/flexcan.c +5 -5
@@ -954,11 +954,6 @@ static struct sk_buff *flexcan_mailbox_read(struct can_rx_offload *offload,u32 reg_ctrl, reg_id, reg_iflag1;int i; -if (unlikely (drop)) { - skb =ERR_PTR (-ENOBUFS ); - goto mark_as_read; - } - mb =flexcan_get_mb (priv, n);if (priv->devtype_data->quirks &FLEXCAN_QUIRK_USE_OFF_TIMESTAMP ) {
@@ -987,6 +982,11 @@ static struct sk_buff *flexcan_mailbox_read(struct can_rx_offload *offload, reg_ctrl = priv->read (&mb->can_ctrl); } +if (unlikely (drop)) { + skb =ERR_PTR (-ENOBUFS ); + goto mark_as_read; + } +if (reg_ctrl &FLEXCAN_MB_CNT_EDL ) skb =alloc_canfd_skb (offload->dev, &cfd);else
drivers/net/can/usb/gs_usb.c +2 -2
@@ -678,6 +678,7 @@ static int gs_can_open(struct net_device *netdev) flags |=GS_CAN_MODE_TRIPLE_SAMPLE ;/* finally start device */ + dev->can.state =CAN_STATE_ERROR_ACTIVE ; dm->mode =cpu_to_le32 (GS_CAN_MODE_START ); dm->flags =cpu_to_le32 (flags); rc = usb_control_msg(interface_to_usbdev(dev->iface),
@@ -694,13 +695,12 @@ static int gs_can_open(struct net_device *netdev)if (rc <0 ) {netdev_err (netdev,"Couldn't start device (err=%d)\n" , rc);kfree (dm); + dev->can.state =CAN_STATE_STOPPED ;return rc; }kfree (dm); - dev->can.state =CAN_STATE_ERROR_ACTIVE ; - parent->active_channels++;if (!(dev->can.ctrlmode &CAN_CTRLMODE_LISTENONLY ))netif_start_queue (netdev);
drivers/net/ethernet/freescale/enetc/enetc.c +1 -31
@@ -1671,29 +1671,6 @@ static int enetc_set_rss(struct net_device *ndev, int en)return 0 ; } -static int enetc_set_psfp (struct net_device *ndev,int en) -{ -struct enetc_ndev_priv *priv =netdev_priv (ndev); -int err; - -if (en) { - err =enetc_psfp_enable (priv); -if (err) -return err; - - priv->active_offloads |=ENETC_F_QCI ; -return 0 ; - } - - err =enetc_psfp_disable (priv); -if (err) -return err; - - priv->active_offloads &= ~ENETC_F_QCI ; - -return 0 ; -} -static void enetc_enable_rxvlan (struct net_device *ndev,bool en) {struct enetc_ndev_priv *priv =netdev_priv (ndev);
@@ -1712,11 +1689,9 @@ static void enetc_enable_txvlan(struct net_device *ndev, bool en)enetc_bdr_enable_txvlan (&priv->si->hw, i, en); } -int enetc_set_features (struct net_device *ndev, -netdev_features_t features) +void enetc_set_features (struct net_device *ndev,netdev_features_t features) {netdev_features_t changed = ndev->features ^ features; -int err =0 ;if (changed &NETIF_F_RXHASH )enetc_set_rss (ndev, !!(features &NETIF_F_RXHASH ));
@@ -1728,11 +1703,6 @@ int enetc_set_features(struct net_device *ndev,if (changed &NETIF_F_HW_VLAN_CTAG_TX )enetc_enable_txvlan (ndev, !!(features &NETIF_F_HW_VLAN_CTAG_TX )); - -if (changed &NETIF_F_HW_TC ) - err =enetc_set_psfp (ndev, !!(features &NETIF_F_HW_TC )); - -return err; }#ifdef CONFIG_FSL_ENETC_PTP_CLOCK
drivers/net/ethernet/freescale/enetc/enetc.h +7 -2
@@ -301,8 +301,7 @@ void enetc_start(struct net_device *ndev);void enetc_stop (struct net_device *ndev);netdev_tx_t enetc_xmit (struct sk_buff *skb,struct net_device *ndev);struct net_device_stats *enetc_get_stats (struct net_device *ndev); -int enetc_set_features (struct net_device *ndev, -netdev_features_t features); +void enetc_set_features (struct net_device *ndev,netdev_features_t features);int enetc_ioctl (struct net_device *ndev,struct ifreq *rq,int cmd);int enetc_setup_tc (struct net_device *ndev,enum tc_setup_type type,void *type_data);
@@ -335,6 +334,7 @@ int enetc_setup_tc_block_cb(enum tc_setup_type type, void *type_data,int enetc_setup_tc_psfp (struct net_device *ndev,void *type_data);int enetc_psfp_init (struct enetc_ndev_priv *priv);int enetc_psfp_clean (struct enetc_ndev_priv *priv); +int enetc_set_psfp (struct net_device *ndev,bool en);static inline void enetc_get_max_cap (struct enetc_ndev_priv *priv) {
@@ -410,4 +410,9 @@ static inline int enetc_psfp_disable(struct enetc_ndev_priv *priv) {return 0 ; } + +static inline int enetc_set_psfp (struct net_device *ndev,bool en) +{ +return 0 ; +}#endif
drivers/net/ethernet/freescale/enetc/enetc_pf.c +10 -1
@@ -671,6 +671,13 @@ static int enetc_pf_set_features(struct net_device *ndev, {netdev_features_t changed = ndev->features ^ features;struct enetc_ndev_priv *priv =netdev_priv (ndev); +int err; + +if (changed &NETIF_F_HW_TC ) { + err =enetc_set_psfp (ndev, !!(features &NETIF_F_HW_TC )); +if (err) +return err; + }if (changed &NETIF_F_HW_VLAN_CTAG_FILTER ) {struct enetc_pf *pf =enetc_si_priv (priv->si);
@@ -684,7 +691,9 @@ static int enetc_pf_set_features(struct net_device *ndev,if (changed &NETIF_F_LOOPBACK )enetc_set_loopback (ndev, !!(features &NETIF_F_LOOPBACK )); -return enetc_set_features (ndev, features); +enetc_set_features (ndev, features); + +return 0 ; }static const struct net_device_ops enetc_ndev_ops = {
drivers/net/ethernet/freescale/enetc/enetc_qos.c +23 -0
@@ -1525,6 +1525,29 @@ int enetc_setup_tc_block_cb(enum tc_setup_type type, void *type_data, } } +int enetc_set_psfp (struct net_device *ndev,bool en) +{ +struct enetc_ndev_priv *priv =netdev_priv (ndev); +int err; + +if (en) { + err =enetc_psfp_enable (priv); +if (err) +return err; + + priv->active_offloads |=ENETC_F_QCI ; +return 0 ; + } + + err =enetc_psfp_disable (priv); +if (err) +return err; + + priv->active_offloads &= ~ENETC_F_QCI ; + +return 0 ; +} +int enetc_psfp_init (struct enetc_ndev_priv *priv) {if (epsfp.psfp_sfi_bitmap)
drivers/net/ethernet/freescale/enetc/enetc_vf.c +3 -1
@@ -88,7 +88,9 @@ static int enetc_vf_set_mac_addr(struct net_device *ndev, void *addr)static int enetc_vf_set_features (struct net_device *ndev,netdev_features_t features) { -return enetc_set_features (ndev, features); +enetc_set_features (ndev, features); + +return 0 ; }/* Probing/ Init */
drivers/net/ethernet/intel/i40e/i40e_main.c +26 -6
@@ -5733,6 +5733,26 @@ static int i40e_get_link_speed(struct i40e_vsi *vsi) } } +/** +* i40e_bw_bytes_to_mbits - Convert max_tx_rate from bytes to mbits +* @vsi: Pointer to vsi structure +* @max_tx_rate: max TX rate in bytes to be converted into Mbits +* +* Helper function to convert units before send to set BW limit +**/ +static u64 i40e_bw_bytes_to_mbits (struct i40e_vsi *vsi,u64 max_tx_rate) +{ +if (max_tx_rate <I40E_BW_MBPS_DIVISOR ) { +dev_warn (&vsi->back->pdev->dev, +"Setting max tx rate to minimum usable value of 50Mbps.\n" ); + max_tx_rate =I40E_BW_CREDIT_DIVISOR ; + }else { +do_div (max_tx_rate,I40E_BW_MBPS_DIVISOR ); + } + +return max_tx_rate; +} +/** * i40e_set_bw_limit - setup BW limit for Tx traffic based on max_tx_rate * @vsi: VSI to be configured
@@ -5755,10 +5775,10 @@ int i40e_set_bw_limit(struct i40e_vsi *vsi, u16 seid, u64 max_tx_rate) max_tx_rate, seid);return -EINVAL ; } -if (max_tx_rate && max_tx_rate <50 ) { +if (max_tx_rate && max_tx_rate <I40E_BW_CREDIT_DIVISOR ) {dev_warn (&pf->pdev->dev,"Setting max tx rate to minimum usable value of 50Mbps.\n" ); - max_tx_rate =50 ; + max_tx_rate =I40E_BW_CREDIT_DIVISOR ; }/* Tx rate credits are in values of 50Mbps, 0 is disabled */
@@ -7719,9 +7739,9 @@ static int i40e_setup_tc(struct net_device *netdev, void *type_data)if (pf->flags &I40E_FLAG_TC_MQPRIO ) {if (vsi->mqprio_qopt.max_rate[0 ]) { -u64 max_tx_rate = vsi->mqprio_qopt.max_rate[0 ]; +u64 max_tx_rate =i40e_bw_bytes_to_mbits (vsi, + vsi->mqprio_qopt.max_rate[0 ]); -do_div (max_tx_rate,I40E_BW_MBPS_DIVISOR ); ret =i40e_set_bw_limit (vsi, vsi->seid, max_tx_rate);if (!ret) {u64 credits = max_tx_rate;
@@ -10366,10 +10386,10 @@ static void i40e_rebuild(struct i40e_pf *pf, bool reinit, bool lock_acquired) }if (vsi->mqprio_qopt.max_rate[0 ]) { -u64 max_tx_rate = vsi->mqprio_qopt.max_rate[0 ]; +u64 max_tx_rate =i40e_bw_bytes_to_mbits (vsi, + vsi->mqprio_qopt.max_rate[0 ]);u64 credits =0 ; -do_div (max_tx_rate,I40E_BW_MBPS_DIVISOR ); ret =i40e_set_bw_limit (vsi, vsi->seid, max_tx_rate);if (ret) goto end_unlock;
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c +20 -0
@@ -1985,6 +1985,25 @@ static void i40e_del_qch(struct i40e_vf *vf) } } +/** +* i40e_vc_get_max_frame_size +* @vf: pointer to the VF +* +* Max frame size is determined based on the current port's max frame size and +* whether a port VLAN is configured on this VF. The VF is not aware whether +* it's in a port VLAN so the PF needs to account for this in max frame size +* checks and sending the max frame size to the VF. +**/ +static u16 i40e_vc_get_max_frame_size (struct i40e_vf *vf) +{ +u16 max_frame_size = vf->pf->hw.phy.link_info.max_frame_size; + +if (vf->port_vlan_id) + max_frame_size -=VLAN_HLEN ; + +return max_frame_size; +} +/** * i40e_vc_get_vf_resources_msg * @vf: pointer to the VF info
@@ -2085,6 +2104,7 @@ static int i40e_vc_get_vf_resources_msg(struct i40e_vf *vf, u8 *msg) vfres->max_vectors = pf->hw.func_caps.num_msix_vectors_vf; vfres->rss_key_size =I40E_HKEY_ARRAY_SIZE ; vfres->rss_lut_size =I40E_VF_HLUT_ARRAY_SIZE ; + vfres->max_mtu =i40e_vc_get_max_frame_size (vf);if (vf->lan_vsi_idx) { vfres->vsi_res[0 ].vsi_id = vf->lan_vsi_id;
drivers/net/ethernet/intel/iavf/iavf_txrx.c +6 -3
@@ -114,8 +114,11 @@ u32 iavf_get_tx_pending(struct iavf_ring *ring, bool in_sw) {u32 head, tail; +/* underlying hardware might not allow access and/or always return +* 0 for the head/tail registers so just use the cached values +*/ head = ring->next_to_clean; - tail =readl (ring->tail); + tail = ring->next_to_use;if (head != tail) return (head < tail) ?
@@ -1368,7 +1371,7 @@ static struct sk_buff *iavf_build_skb(struct iavf_ring *rx_ring,#endif struct sk_buff *skb; -if (!rx_buffer) +if (!rx_buffer || !size)return NULL ;/* prefetch first cache line of first page */ va =page_address (rx_buffer->page) + rx_buffer->page_offset;
@@ -1526,7 +1529,7 @@ static int iavf_clean_rx_irq(struct iavf_ring *rx_ring, int budget)/* exit if we failed to retrieve a buffer */ if (!skb) { rx_ring->rx_stats.alloc_buff_failed++; -if (rx_buffer) +if (rx_buffer && size) rx_buffer->pagecnt_bias++;break ; }
drivers/net/ethernet/intel/iavf/iavf_virtchnl.c +5 -2
@@ -241,11 +241,14 @@ int iavf_get_vf_config(struct iavf_adapter *adapter)void iavf_configure_queues (struct iavf_adapter *adapter) {struct virtchnl_vsi_queue_config_info *vqci; -struct virtchnl_queue_pair_info *vqpi; +int i, max_frame = adapter->vf_res->max_mtu;int pairs = adapter->num_active_queues; -int i, max_frame =IAVF_MAX_RXBUFFER ; +struct virtchnl_queue_pair_info *vqpi;size_t len; +if (max_frame >IAVF_MAX_RXBUFFER || !max_frame) + max_frame =IAVF_MAX_RXBUFFER ; +if (adapter->current_op !=VIRTCHNL_OP_UNKNOWN ) {/* bail because we already have a command pending */ dev_err(&adapter->pdev->dev, "Cannot configure queues, command %d pending\n",
drivers/net/ethernet/sfc/efx_channels.c +1 -1
@@ -308,7 +308,7 @@ int efx_probe_interrupts(struct efx_nic *efx) efx->n_channels =1 + (efx_separate_tx_channels ?1 :0 ); efx->n_rx_channels =1 ; efx->n_tx_channels =1 ; - efx->tx_channel_offset =1 ; + efx->tx_channel_offset = efx_separate_tx_channels ?1 :0 ; efx->n_xdp_channels =0 ; efx->xdp_channel_offset = efx->n_channels; efx->legacy_irq = efx->pci_dev->irq;
drivers/net/ethernet/sfc/tx.c +1 -1
@@ -545,7 +545,7 @@ netdev_tx_t efx_hard_start_xmit(struct sk_buff *skb,* previous packets out. */ if (!netdev_xmit_more ()) -efx_tx_send_pending (tx_queue->channel); +efx_tx_send_pending (efx_get_tx_channel (efx, index));return NETDEV_TX_OK ; }
drivers/net/ethernet/sun/sunhme.c +2 -2
@@ -2063,9 +2063,9 @@ static void happy_meal_rx(struct happy_meal *hp, struct net_device *dev)skb_reserve (copy_skb,2 );skb_put (copy_skb, len); -dma_sync_single_for_cpu (hp->dma_dev, dma_addr, len,DMA_FROM_DEVICE ); +dma_sync_single_for_cpu (hp->dma_dev, dma_addr, len +2 ,DMA_FROM_DEVICE );skb_copy_from_linear_data (skb, copy_skb->data, len); -dma_sync_single_for_device (hp->dma_dev, dma_addr, len,DMA_FROM_DEVICE ); +dma_sync_single_for_device (hp->dma_dev, dma_addr, len +2 ,DMA_FROM_DEVICE );/* Reuse original ring buffer. */ hme_write_rxd(hp, this, (RXFLAG_OWN|((RX_BUF_ALLOC_SIZE-RX_OFFSET)<<16)),
drivers/net/ipa/gsi.c +7 -9
@@ -1251,20 +1251,18 @@ static void gsi_evt_ring_rx_update(struct gsi_evt_ring *evt_ring, u32 index)/* Initialize a ring, including allocating DMA memory for its entries */ static int gsi_ring_alloc (struct gsi *gsi,struct gsi_ring *ring,u32 count) { -size_t size = count *GSI_RING_ELEMENT_SIZE ; +u32 size = count *GSI_RING_ELEMENT_SIZE ;struct device *dev = gsi->dev;dma_addr_t addr; -/* Hardware requires a 2^n ring size, with alignment equal to size */ +/* Hardware requires a 2^n ring size, with alignment equal to size. +* The DMA address returned by dma_alloc_coherent() is guaranteed to +* be a power-of-2 number of pages, which satisfies the requirement. +*/ ring->virt =dma_alloc_coherent (dev, size, &addr,GFP_KERNEL ); -if (ring->virt && addr % size) { -dma_free_coherent (dev, size, ring->virt, addr); -dev_err (dev,"unable to alloc 0x%zx-aligned ring buffer\n" , - size); -return -EINVAL ;/* Not a good error value, but distinct */ - }else if (!ring->virt) { +if (!ring->virt)return -ENOMEM ; - } + ring->addr = addr; ring->count = count;
drivers/net/ipa/gsi_private.h +1 -1
@@ -14,7 +14,7 @@ struct gsi_trans;struct gsi_ring ;struct gsi_channel ; -#define GSI_RING_ELEMENT_SIZE 16/* bytes */ +#define GSI_RING_ELEMENT_SIZE 16/* bytes; must be a power of 2 */ /* Return the entry that follows one provided in a transaction pool */ void *gsi_trans_pool_next (struct gsi_trans_pool *pool,void *element);
drivers/net/ipa/gsi_trans.c +4 -5
@@ -153,11 +153,10 @@ int gsi_trans_pool_init_dma(struct device *dev, struct gsi_trans_pool *pool, size =__roundup_pow_of_two (size); total_size = (count + max_alloc -1 ) * size; -/* The allocator will give us a power-of-2 number of pages. But we -* can't guarantee that, so request it. That way we won't waste any -* memory that would be available beyond the required space. -* -* Note that gsi_trans_pool_exit_dma() assumes the total allocated +/* The allocator will give us a power-of-2 number of pages +* sufficient to satisfy our request. Round up our requested +* size to avoid any unused space in the allocation. This way +* gsi_trans_pool_exit_dma() can assume the total allocated * size is exactly (count * size). */ total_size =get_order (total_size) <<PAGE_SHIFT ;
drivers/net/ipa/ipa_cmd.c +1 -1
@@ -154,7 +154,7 @@ static void ipa_cmd_validate_build(void)* of entries, as and IPv4 and IPv6 route tables have the same number * of entries. */ -#define TABLE_SIZE (TABLE_COUNT_MAX * IPA_TABLE_ENTRY_SIZE) +#define TABLE_SIZE (TABLE_COUNT_MAX * sizeof(__le64))#define TABLE_COUNT_MAX max_t(u32, IPA_ROUTE_COUNT_MAX, IPA_FILTER_COUNT_MAX)BUILD_BUG_ON (TABLE_SIZE >field_max (IP_FLTRT_FLAGS_HASH_SIZE_FMASK ));BUILD_BUG_ON (TABLE_SIZE >field_max (IP_FLTRT_FLAGS_NHASH_SIZE_FMASK ));
drivers/net/ipa/ipa_data.h +2 -2
@@ -72,8 +72,8 @@* that can be included in a single transaction. */ struct gsi_channel_data { -u16 tre_count; -u16 event_count; +u16 tre_count;/* must be a power of 2 */ +u16 event_count;/* must be a power of 2 */ u8 tlv_count; };
drivers/net/ipa/ipa_qmi.c +4 -6
@@ -308,12 +308,12 @@ init_modem_driver_req(struct ipa_qmi *ipa_qmi) mem = &ipa->mem[IPA_MEM_V4_ROUTE ]; req.v4_route_tbl_info_valid =1 ; req.v4_route_tbl_info.start = ipa->mem_offset + mem->offset; - req.v4_route_tbl_info.count = mem->size /IPA_TABLE_ENTRY_SIZE ; + req.v4_route_tbl_info.end =IPA_ROUTE_MODEM_COUNT -1 ; mem = &ipa->mem[IPA_MEM_V6_ROUTE ]; req.v6_route_tbl_info_valid =1 ; req.v6_route_tbl_info.start = ipa->mem_offset + mem->offset; - req.v6_route_tbl_info.count = mem->size /IPA_TABLE_ENTRY_SIZE ; + req.v6_route_tbl_info.end =IPA_ROUTE_MODEM_COUNT -1 ; mem = &ipa->mem[IPA_MEM_V4_FILTER ]; req.v4_filter_tbl_start_valid =1 ;
@@ -352,8 +352,7 @@ init_modem_driver_req(struct ipa_qmi *ipa_qmi) req.v4_hash_route_tbl_info_valid =1 ; req.v4_hash_route_tbl_info.start = ipa->mem_offset + mem->offset; - req.v4_hash_route_tbl_info.count = - mem->size /IPA_TABLE_ENTRY_SIZE ; + req.v4_hash_route_tbl_info.end =IPA_ROUTE_MODEM_COUNT -1 ; } mem = &ipa->mem[IPA_MEM_V6_ROUTE_HASHED ];
@@ -361,8 +360,7 @@ init_modem_driver_req(struct ipa_qmi *ipa_qmi) req.v6_hash_route_tbl_info_valid =1 ; req.v6_hash_route_tbl_info.start = ipa->mem_offset + mem->offset; - req.v6_hash_route_tbl_info.count = - mem->size /IPA_TABLE_ENTRY_SIZE ; + req.v6_hash_route_tbl_info.end =IPA_ROUTE_MODEM_COUNT -1 ; } mem = &ipa->mem[IPA_MEM_V4_FILTER_HASHED ];
drivers/net/ipa/ipa_qmi_msg.c +4 -4
@@ -271,7 +271,7 @@ struct qmi_elem_info ipa_init_modem_driver_req_ei[] = { .tlv_type = 0x12, .offset = offsetof(struct ipa_init_modem_driver_req, v4_route_tbl_info), - .ei_array = ipa_mem_array_ei, + .ei_array = ipa_mem_bounds_ei, }, { .data_type = QMI_OPT_FLAG,
@@ -292,7 +292,7 @@ struct qmi_elem_info ipa_init_modem_driver_req_ei[] = { .tlv_type = 0x13, .offset = offsetof(struct ipa_init_modem_driver_req, v6_route_tbl_info), - .ei_array = ipa_mem_array_ei, + .ei_array = ipa_mem_bounds_ei, }, { .data_type = QMI_OPT_FLAG,
@@ -456,7 +456,7 @@ struct qmi_elem_info ipa_init_modem_driver_req_ei[] = { .tlv_type = 0x1b, .offset = offsetof(struct ipa_init_modem_driver_req, v4_hash_route_tbl_info), - .ei_array = ipa_mem_array_ei, + .ei_array = ipa_mem_bounds_ei, }, { .data_type = QMI_OPT_FLAG,
@@ -477,7 +477,7 @@ struct qmi_elem_info ipa_init_modem_driver_req_ei[] = { .tlv_type = 0x1c, .offset = offsetof(struct ipa_init_modem_driver_req, v6_hash_route_tbl_info), - .ei_array = ipa_mem_array_ei, + .ei_array = ipa_mem_bounds_ei, }, { .data_type = QMI_OPT_FLAG,
drivers/net/ipa/ipa_qmi_msg.h +21 -16
@@ -82,9 +82,11 @@ enum ipa_platform_type { IPA_QMI_PLATFORM_TYPE_MSM_QNX_V01 = 5, /* QNX MSM */ }; -/* This defines the start and end offset of a range of memory. Both -* fields are offsets relative to the start of IPA shared memory. -* The end value is the last addressable byte *within* the range. +/* This defines the start and end offset of a range of memory. The start +* value is a byte offset relative to the start of IPA shared memory. The +* end value is the last addressable unit *within* the range. Typically +* the end value is in units of bytes, however it can also be a maximum +* array index value. */ struct ipa_mem_bounds {u32 start;
@@ -125,18 +127,19 @@ struct ipa_init_modem_driver_req {u8 hdr_tbl_info_valid;struct ipa_mem_bounds hdr_tbl_info; -/* Routing table information. These define the location and size of -* non-hashable IPv4 and IPv6 filter tables. The start values are -* offsets relative to the start of IPA shared memory. +/* Routing table information. These define the location and maximum +* *index* (not byte) for the modem portion of non-hashable IPv4 and +* IPv6 routing tables. The start values are byte offsets relative +* to the start of IPA shared memory. */ u8 v4_route_tbl_info_valid; -struct ipa_mem_array v4_route_tbl_info; +struct ipa_mem_bounds v4_route_tbl_info;u8 v6_route_tbl_info_valid; -struct ipa_mem_array v6_route_tbl_info; +struct ipa_mem_bounds v6_route_tbl_info;/* Filter table information. These define the location of the * non-hashable IPv4 and IPv6 filter tables. The start values are -* offsets relative to the start of IPA shared memory. +* byte offsets relative to the start of IPA shared memory. */ u8 v4_filter_tbl_start_valid;u32 v4_filter_tbl_start;
@@ -177,18 +180,20 @@ struct ipa_init_modem_driver_req {u8 zip_tbl_info_valid;struct ipa_mem_bounds zip_tbl_info; -/* Routing table information. These define the location and size -* of hashable IPv4 and IPv6 filter tables. The start values are -* offsets relative to the start of IPA shared memory. +/* Routing table information. These define the location and maximum +* *index* (not byte) for the modem portion of hashable IPv4 and IPv6 +* routing tables (if supported by hardware). The start values are +* byte offsets relative to the start of IPA shared memory. */ u8 v4_hash_route_tbl_info_valid; -struct ipa_mem_array v4_hash_route_tbl_info; +struct ipa_mem_bounds v4_hash_route_tbl_info;u8 v6_hash_route_tbl_info_valid; -struct ipa_mem_array v6_hash_route_tbl_info; +struct ipa_mem_bounds v6_hash_route_tbl_info;/* Filter table information. These define the location and size -* of hashable IPv4 and IPv6 filter tables. The start values are -* offsets relative to the start of IPA shared memory. +* of hashable IPv4 and IPv6 filter tables (if supported by hardware). +* The start values are byte offsets relative to the start of IPA +* shared memory. */ u8 v4_hash_filter_tbl_start_valid;u32 v4_hash_filter_tbl_start;
drivers/net/ipa/ipa_table.c +46 -42
155 lines not on this page · raw message
drivers/net/ipa/ipa_table.h +3 -3
@@ -10,12 +10,12 @@struct ipa ; -/* The size of a filter or route table entry */ -#define IPA_TABLE_ENTRY_SIZE sizeof(__le64)/* Holds a physical address */ -/* The maximum number of filter table entries (IPv4, IPv6; hashed or not) */ #define IPA_FILTER_COUNT_MAX 14 +/* The number of route table entries allotted to the modem */ +#define IPA_ROUTE_MODEM_COUNT 8 +/* The maximum number of route table entries (IPv4, IPv6; hashed or not) */ #define IPA_ROUTE_COUNT_MAX 15
drivers/net/ipvlan/ipvlan_core.c +4 -2
@@ -496,7 +496,6 @@ static int ipvlan_process_v6_outbound(struct sk_buff *skb)static int ipvlan_process_outbound (struct sk_buff *skb) { -struct ethhdr *ethh =eth_hdr (skb);int ret =NET_XMIT_DROP ;/* The ipvlan is a pseudo-L2 device, so the packets that we receive
@@ -506,6 +505,8 @@ static int ipvlan_process_outbound(struct sk_buff *skb)if (skb_mac_header_was_set (skb)) {/* In this mode we dont care about * multicast and broadcast traffic */ +struct ethhdr *ethh =eth_hdr (skb); +if (is_multicast_ether_addr (ethh->h_dest)) { pr_debug_ratelimited( "Dropped {multi|broad}cast of type=[%x]\n",
@@ -590,7 +591,7 @@ static int ipvlan_xmit_mode_l3(struct sk_buff *skb, struct net_device *dev)static int ipvlan_xmit_mode_l2 (struct sk_buff *skb,struct net_device *dev) {const struct ipvl_dev *ipvlan =netdev_priv (dev); -struct ethhdr *eth =eth_hdr (skb); +struct ethhdr *eth =skb_eth_hdr (skb);struct ipvl_addr *addr;void *lyr3h;int addr_type;
@@ -620,6 +621,7 @@ static int ipvlan_xmit_mode_l2(struct sk_buff *skb, struct net_device *dev)return dev_forward_skb (ipvlan->phy_dev, skb); }else if (is_multicast_ether_addr (eth->h_dest)) { +skb_reset_mac_header (skb);ipvlan_skb_crossing_ns (skb,NULL );ipvlan_multicast_enqueue (ipvlan->port, skb, true);return NET_XMIT_SUCCESS ;
drivers/net/mdio/of_mdio.c +1 -0
@@ -332,6 +332,7 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np)return 0 ; unregister: +of_node_put (child);mdiobus_unregister (mdio);return rc; }
drivers/net/phy/aquantia_main.c +49 -4
77 lines not on this page · raw message
drivers/net/team/team.c +18 -6
@@ -1270,10 +1270,12 @@ static int team_port_add(struct team *team, struct net_device *port_dev, } } -netif_addr_lock_bh (dev); -dev_uc_sync_multiple (port_dev, dev); -dev_mc_sync_multiple (port_dev, dev); -netif_addr_unlock_bh (dev); +if (dev->flags &IFF_UP ) { +netif_addr_lock_bh (dev); +dev_uc_sync_multiple (port_dev, dev); +dev_mc_sync_multiple (port_dev, dev); +netif_addr_unlock_bh (dev); + } port->index =-1 ;list_add_tail_rcu (&port->list, &team->port_list);
@@ -1344,8 +1346,10 @@ static int team_port_del(struct team *team, struct net_device *port_dev)netdev_rx_handler_unregister (port_dev);team_port_disable_netpoll (port);vlan_vids_del_by_dev (port_dev, dev); -dev_uc_unsync (port_dev, dev); -dev_mc_unsync (port_dev, dev); +if (dev->flags &IFF_UP ) { +dev_uc_unsync (port_dev, dev); +dev_mc_unsync (port_dev, dev); + }dev_close (port_dev);team_port_leave (team, port);
@@ -1695,6 +1699,14 @@ static int team_open(struct net_device *dev)static int team_close (struct net_device *dev) { +struct team *team =netdev_priv (dev); +struct team_port *port; + +list_for_each_entry (port, &team->port_list, list) { +dev_uc_unsync (port->dev, dev); +dev_mc_unsync (port->dev, dev); + } +return 0 ; }
drivers/net/wireguard/netlink.c +6 -7
@@ -436,14 +436,13 @@ static int set_peer(struct wg_device *wg, struct nlattr **attrs)if (attrs[WGPEER_A_ENDPOINT ]) {struct sockaddr *addr =nla_data (attrs[WGPEER_A_ENDPOINT ]);size_t len =nla_len (attrs[WGPEER_A_ENDPOINT ]); +struct endpoint endpoint = { { {0 } } }; -if ((len ==sizeof (struct sockaddr_in ) && - addr->sa_family ==AF_INET ) || - (len ==sizeof (struct sockaddr_in6 ) && - addr->sa_family ==AF_INET6 )) { -struct endpoint endpoint = { { {0 } } }; - -memcpy (&endpoint.addr, addr, len); +if (len ==sizeof (struct sockaddr_in ) && addr->sa_family ==AF_INET ) { + endpoint.addr4 = *(struct sockaddr_in *)addr; +wg_socket_set_peer_endpoint (peer, &endpoint); + }else if (len ==sizeof (struct sockaddr_in6 ) && addr->sa_family ==AF_INET6 ) { + endpoint.addr6 = *(struct sockaddr_in6 *)addr;wg_socket_set_peer_endpoint (peer, &endpoint); } }
drivers/net/wireguard/selftest/ratelimiter.c +10 -15
@@ -6,29 +6,28 @@#ifdef DEBUG #include <linux/jiffies.h> -#include <linux/hrtimer.h> static const struct {bool result; -u64 nsec_to_sleep_before; +unsigned int msec_to_sleep_before; } expected_results[]__initconst = { [0 ...PACKETS_BURSTABLE -1 ] = { true,0 }, [PACKETS_BURSTABLE ] = { false,0 }, - [PACKETS_BURSTABLE +1 ] = { true,NSEC_PER_SEC /PACKETS_PER_SECOND }, + [PACKETS_BURSTABLE +1 ] = { true,MSEC_PER_SEC /PACKETS_PER_SECOND }, [PACKETS_BURSTABLE +2 ] = { false,0 }, - [PACKETS_BURSTABLE +3 ] = { true, (NSEC_PER_SEC /PACKETS_PER_SECOND ) *2 }, + [PACKETS_BURSTABLE +3 ] = { true, (MSEC_PER_SEC /PACKETS_PER_SECOND ) *2 }, [PACKETS_BURSTABLE +4 ] = { true,0 }, [PACKETS_BURSTABLE +5 ] = { false,0 } };static __init unsigned int maximum_jiffies_at_index (int index) { -u64 total_nsecs =2 *NSEC_PER_SEC /PACKETS_PER_SECOND /3 ; +unsigned int total_msecs =2 *MSEC_PER_SEC /PACKETS_PER_SECOND /3 ;int i;for (i =0 ; i <= index; ++i) - total_nsecs += expected_results[i].nsec_to_sleep_before; -return nsecs_to_jiffies (total_nsecs); + total_msecs += expected_results[i].msec_to_sleep_before; +return msecs_to_jiffies (total_msecs); } static __init int timings_test(struct sk_buff *skb4, struct iphdr *hdr4,
@@ -43,12 +42,8 @@ static __init int timings_test(struct sk_buff *skb4, struct iphdr *hdr4, loop_start_time = jiffies;for (i =0 ; i <ARRAY_SIZE (expected_results); ++i) { -if (expected_results[i].nsec_to_sleep_before) { -ktime_t timeout =ktime_add (ktime_add_ns (ktime_get_coarse_boottime (),TICK_NSEC *4 /3 ), -ns_to_ktime (expected_results[i].nsec_to_sleep_before)); -set_current_state (TASK_UNINTERRUPTIBLE ); -schedule_hrtimeout_range_clock (&timeout,0 ,HRTIMER_MODE_ABS ,CLOCK_BOOTTIME ); - } +if (expected_results[i].msec_to_sleep_before) +msleep (expected_results[i].msec_to_sleep_before);if (time_is_before_jiffies (loop_start_time +maximum_jiffies_at_index (i)))
@@ -132,7 +127,7 @@ bool __init wg_ratelimiter_selftest(void)if (IS_ENABLED (CONFIG_KASAN ) ||IS_ENABLED (CONFIG_UBSAN ))return true; -BUILD_BUG_ON (NSEC_PER_SEC %PACKETS_PER_SECOND !=0 ); +BUILD_BUG_ON (MSEC_PER_SEC %PACKETS_PER_SECOND !=0 );if (wg_ratelimiter_init ()) goto out;
@@ -172,7 +167,7 @@ bool __init wg_ratelimiter_selftest(void) ++test;#endif -for (trials =TRIALS_BEFORE_GIVING_UP ;;) { +for (trials =TRIALS_BEFORE_GIVING_UP ;IS_ENABLED (DEBUG_RATELIMITER_TIMINGS );) {int test_count =0 , ret; ret =timings_test (skb4, hdr4, skb6, hdr6, &test_count);
drivers/net/wireless/mediatek/mt76/mt7615/mac.c +1 -1
@@ -950,7 +950,7 @@ u32 mt7615_mac_get_sta_tid_sn(struct mt7615_dev *dev, int wcid, u8 tid) offset %=32 ; val =mt76_rr (dev, addr); - val >>= (tid %32 ); + val >>= offset;if (offset >20 ) { addr +=4 ;
drivers/s390/block/dasd_alias.c +7 -2
@@ -675,12 +675,12 @@ int dasd_alias_remove_device(struct dasd_device *device)struct dasd_device *dasd_alias_get_start_dev (struct dasd_device *base_device) {struct dasd_eckd_private *alias_priv, *private = base_device->private; -struct alias_pav_group *group = private->pavgroup;struct alias_lcu *lcu = private->lcu;struct dasd_device *alias_device; +struct alias_pav_group *group;unsigned long flags; -if (!group || !lcu) +if (!lcu)return NULL ;if (lcu->pav ==NO_PAV || lcu->flags & (NEED_UAC_UPDATE |UPDATE_PENDING ))
@@ -697,6 +697,11 @@ struct dasd_device *dasd_alias_get_start_dev(struct dasd_device *base_device) }spin_lock_irqsave (&lcu->lock, flags); + group = private->pavgroup; +if (!group) { +spin_unlock_irqrestore (&lcu->lock, flags); +return NULL ; + } alias_device = group->next;if (!alias_device) {if (list_empty (&group->aliaslist)) {
drivers/scsi/mpt3sas/mpt3sas_base.c +113 -48
227 lines not on this page · raw message
drivers/scsi/mpt3sas/mpt3sas_base.h +1 -0
@@ -1257,6 +1257,7 @@ struct MPT3SAS_ADAPTER {u16 thresh_hold;u8 high_iops_queues;u32 drv_support_bitmap; +u32 dma_mask;bool enable_sdev_max_qd;bool use_32bit_dma;
drivers/tty/serial/atmel_serial.c +2 -6
@@ -295,20 +295,16 @@ static int atmel_config_rs485(struct uart_port *port, mode =atmel_uart_readl (port,ATMEL_US_MR ); -/* Resetting serial mode to RS232 (0x0) */ - mode &= ~ATMEL_US_USMODE ; - - port->rs485 = *rs485conf; -if (rs485conf->flags &SER_RS485_ENABLED ) {dev_dbg (port->dev,"Setting UART to RS485\n" ); -if (port->rs485.flags &SER_RS485_RX_DURING_TX ) +if (rs485conf->flags &SER_RS485_RX_DURING_TX ) atmel_port->tx_done_mask =ATMEL_US_TXRDY ;else atmel_port->tx_done_mask =ATMEL_US_TXEMPTY ;atmel_uart_writel (port,ATMEL_US_TTGR , rs485conf->delay_rts_after_send); + mode &= ~ATMEL_US_USMODE ; mode |=ATMEL_US_USMODE_RS485 ; }else {dev_dbg (port->dev,"Setting UART to RS232\n" );
drivers/tty/serial/serial-tegra.c +2 -3
@@ -520,7 +520,7 @@ static void tegra_uart_tx_dma_complete(void *args) count = tup->tx_bytes_requested - state.residue;async_tx_ack (tup->tx_dma_desc);spin_lock_irqsave (&tup->uport.lock, flags); - xmit->tail = (xmit->tail + count) & (UART_XMIT_SIZE -1 ); +uart_xmit_advance (&tup->uport, count); tup->tx_in_progress =0 ;if (uart_circ_chars_pending (xmit) <WAKEUP_CHARS )uart_write_wakeup (&tup->uport);
@@ -608,7 +608,6 @@ static unsigned int tegra_uart_tx_empty(struct uart_port *u)static void tegra_uart_stop_tx (struct uart_port *u) {struct tegra_uart_port *tup =to_tegra_uport (u); -struct circ_buf *xmit = &tup->uport.state->xmit;struct dma_tx_state state;unsigned int count;
@@ -619,7 +618,7 @@ static void tegra_uart_stop_tx(struct uart_port *u)dmaengine_tx_status (tup->tx_dma_chan, tup->tx_cookie, &state); count = tup->tx_bytes_requested - state.residue;async_tx_ack (tup->tx_dma_desc); - xmit->tail = (xmit->tail + count) & (UART_XMIT_SIZE -1 ); +uart_xmit_advance (&tup->uport, count); tup->tx_in_progress =0 ; }
drivers/tty/serial/tegra-tcu.c +1 -1
@@ -101,7 +101,7 @@ static void tegra_tcu_uart_start_tx(struct uart_port *port)break ;tegra_tcu_write (tcu, &xmit->buf[xmit->tail], count); - xmit->tail = (xmit->tail + count) & (UART_XMIT_SIZE -1 ); +uart_xmit_advance (port, count); }uart_write_wakeup (port);
drivers/usb/cdns3/gadget.c +3 -1
@@ -1531,7 +1531,8 @@ static void cdns3_transfer_completed(struct cdns3_device *priv_dev,TRB_LEN (le32_to_cpu (trb->length));if (priv_req->num_of_trb >1 && -le32_to_cpu (trb->control) &TRB_SMM ) +le32_to_cpu (trb->control) &TRB_SMM && +le32_to_cpu (trb->control) &TRB_CHAIN ) transfer_end = true;cdns3_ep_inc_deq (priv_ep);
@@ -1691,6 +1692,7 @@ static int cdns3_check_ep_interrupt_proceed(struct cdns3_endpoint *priv_ep) ep_cfg &= ~EP_CFG_ENABLE ;writel (ep_cfg, &priv_dev->regs->ep_cfg); priv_ep->flags &= ~EP_QUIRK_ISO_OUT_EN ; + priv_ep->flags |=EP_UPDATE_EP_TRBADDR ; }cdns3_transfer_completed (priv_dev, priv_ep); } else if (!(priv_ep->flags & EP_STALLED) &&
drivers/usb/core/hub.c +1 -1
@@ -5968,7 +5968,7 @@ static int usb_reset_and_verify_device(struct usb_device *udev)* * Return: The same as for usb_reset_and_verify_device(). * However, if a reset is already in progress (for instance, if a -* driver doesn't have pre_ or post_reset() callbacks, and while +* driver doesn't have pre_reset() or post_reset() callbacks, and while * being unbound or re-bound during the ongoing reset its disconnect() * or probe() routine tries to perform a second, nested reset), the * routine returns -EINPROGRESS.
drivers/usb/dwc3/core.c +1 -3
@@ -114,8 +114,6 @@ void dwc3_set_prtcap(struct dwc3 *dwc, u32 mode) dwc->current_dr_role = mode; } -static int dwc3_core_soft_reset (struct dwc3 *dwc); -static void __dwc3_set_mode (struct work_struct *work) {struct dwc3 *dwc =work_to_dwc (work);
@@ -265,7 +263,7 @@ u32 dwc3_core_fifo_space(struct dwc3_ep *dep, u8 type)* dwc3_core_soft_reset - Issues core soft reset and PHY reset * @dwc: pointer to our context structure */ -static int dwc3_core_soft_reset (struct dwc3 *dwc) +int dwc3_core_soft_reset (struct dwc3 *dwc) {u32 reg;int retries =1000 ;
drivers/usb/dwc3/core.h +4 -0
@@ -1010,6 +1010,7 @@ struct dwc3_scratchpad_array {* @tx_max_burst_prd: max periodic ESS transmit burst size * @hsphy_interface: "utmi" or "ulpi" * @connected: true when we're connected to a host, false otherwise +* @softconnect: true when gadget connect is called, false when disconnect runs * @delayed_status: true when gadget driver asks for delayed status * @ep0_bounced: true when we used bounce buffer * @ep0_expect_in: true when we expect a DATA IN transfer
@@ -1218,6 +1219,7 @@ struct dwc3 {const char *hsphy_interface; unsigned connected:1; + unsigned softconnect:1; unsigned delayed_status:1; unsigned ep0_bounced:1; unsigned ep0_expect_in:1;
@@ -1456,6 +1458,8 @@ bool dwc3_has_imod(struct dwc3 *dwc);int dwc3_event_buffers_setup (struct dwc3 *dwc);void dwc3_event_buffers_cleanup (struct dwc3 *dwc); +int dwc3_core_soft_reset (struct dwc3 *dwc); +#if IS_ENABLED (CONFIG_USB_DWC3_HOST ) ||IS_ENABLED (CONFIG_USB_DWC3_DUAL_ROLE )int dwc3_host_init (struct dwc3 *dwc);void dwc3_host_exit (struct dwc3 *dwc);
drivers/usb/dwc3/gadget.c +43 -38
114 lines not on this page · raw message
drivers/usb/host/xhci-mtk-sch.c +85 -64
285 lines not on this page · raw message
drivers/usb/host/xhci-mtk.h +0 -2
@@ -20,14 +20,12 @@#define XHCI_MTK_MAX_ESIT 64/** -* @ss_bit_map: used to avoid start split microframes overlay * @fs_bus_bw: array to keep track of bandwidth already used for FS * @ep_list: Endpoints using this TT * @usb_tt: usb TT related * @tt_port: TT port number */ struct mu3h_sch_tt { - DECLARE_BITMAP(ss_bit_map, XHCI_MTK_MAX_ESIT);u32 fs_bus_bw[XHCI_MTK_MAX_ESIT ];struct list_head ep_list;struct usb_tt *usb_tt;
drivers/usb/serial/option.c +6 -0
@@ -256,6 +256,7 @@ static void option_instat_callback(struct urb *urb);#define QUECTEL_PRODUCT_EM060K 0x030b#define QUECTEL_PRODUCT_EM12 0x0512#define QUECTEL_PRODUCT_RM500Q 0x0800 +#define QUECTEL_PRODUCT_RM520N 0x0801#define QUECTEL_PRODUCT_EC200S_CN 0x6002#define QUECTEL_PRODUCT_EC200T 0x6026#define QUECTEL_PRODUCT_RM500K 0x7001
@@ -1138,6 +1139,8 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EG95, 0xff, 0xff, 0xff), .driver_info = NUMEP2 }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EG95, 0xff, 0, 0) }, + { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, 0x0203, 0xff), /* BG95-M3 */ + .driver_info = ZLP }, { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_BG96), .driver_info = RSVD(4) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EP06, 0xff, 0xff, 0xff),
@@ -1159,6 +1162,9 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0, 0) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0xff, 0x10), .driver_info = ZLP }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM520N, 0xff, 0xff, 0x30) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM520N, 0xff, 0, 0x40) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM520N, 0xff, 0, 0) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200S_CN, 0xff, 0, 0) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200T, 0xff, 0, 0) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500K, 0xff, 0x00, 0x00) },
drivers/usb/typec/mux/intel_pmc_mux.c +30 -7
@@ -83,8 +83,6 @@ enum {/* * Input Output Manager (IOM) PORT STATUS */ -#define IOM_PORT_STATUS_OFFSET 0x560 -#define IOM_PORT_STATUS_ACTIVITY_TYPE_MASK GENMASK(9, 6)#define IOM_PORT_STATUS_ACTIVITY_TYPE_SHIFT 6#define IOM_PORT_STATUS_ACTIVITY_TYPE_USB 0x03
@@ -144,6 +142,7 @@ struct pmc_usb {struct pmc_usb_port *port;struct acpi_device *iom_adev;void __iomem *iom_base; +u32 iom_port_status_offset; };static void update_port_status (struct pmc_usb_port *port)
@@ -153,7 +152,8 @@ static void update_port_status(struct pmc_usb_port *port)/* SoC expects the USB Type-C port numbers to start with 0 */ port_num = port->usb3_port -1 ; - port->iom_status =readl (port->pmc->iom_base +IOM_PORT_STATUS_OFFSET + + port->iom_status =readl (port->pmc->iom_base + + port->pmc->iom_port_status_offset + port_num *sizeof (u32)); }
@@ -541,19 +541,42 @@ static int pmc_usb_register_port(struct pmc_usb *pmc, int index,static int is_memory (struct acpi_resource *res,void *data) { -struct resource r; +struct resource_win win = {}; +struct resource *r = &win.res; -return !acpi_dev_resource_memory (res, &r); +return !(acpi_dev_resource_memory (res, r) || +acpi_dev_resource_address_space (res, &win)); } +/* IOM ACPI IDs and IOM_PORT_STATUS_OFFSET */ +static const struct acpi_device_id iom_acpi_ids[] = { +/* TigerLake */ + {"INTC1072" ,0x560 , }, + +/* AlderLake */ + {"INTC1079" ,0x160 , }, + +/* Meteor Lake */ + {"INTC107A" ,0x160 , }, + {} +}; +static int pmc_usb_probe_iom (struct pmc_usb *pmc) {struct list_head resource_list;struct resource_entry *rentry; -struct acpi_device *adev; +static const struct acpi_device_id *dev_id; +struct acpi_device *adev =NULL ;int ret; - adev =acpi_dev_get_first_match_dev ("INTC1072" ,NULL ,-1 ); +for (dev_id = &iom_acpi_ids[0 ]; dev_id->id[0 ]; dev_id++) { +if (acpi_dev_present (dev_id->id,NULL ,-1 )) { + pmc->iom_port_status_offset = (u32 )dev_id->driver_data; + adev =acpi_dev_get_first_match_dev (dev_id->id,NULL ,-1 ); +break ; + } + } +if (!adev)return -ENODEV ;
drivers/vfio/vfio_iommu_type1.c +90 -20
136 lines not on this page · raw message
net/core/dev_ioctl.c +10 -34
44 lines not on this page · raw message
tools/testing/selftests/net/forwarding/sch_red.sh +1 -0
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.