Skip to contentSkip to conversation

Linux 5.14.12

DISCUSSION Greg Kroah-Hartman 1 participant 2 messages Oct 13, 2021 Stable branch

lore
Share & tools
lore

Greg Kroah-Hartman

author maintainer
#0 lore raw

I'm announcing the release of the 5.14.12 kernel.

All users of the 5.14 kernel series must upgrade.

The updated 5.14.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.14.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

------------

 Documentation/devicetree/bindings/display/bridge/ti,sn65dsi86.yaml |    2 
 Makefile                                                           |    2 
 arch/arm/boot/dts/imx53-m53menlo.dts                               |    4 
 arch/arm/boot/dts/imx6dl-yapp4-common.dtsi                         |    5 
 arch/arm/boot/dts/imx6qdl-pico.dtsi                                |   11 
 arch/arm/boot/dts/imx6sx-sdb.dts                                   |    4 
 arch/arm/boot/dts/imx6ul-14x14-evk.dtsi                            |    2 
 arch/arm/boot/dts/omap3430-sdp.dts                                 |    2 
 arch/arm/boot/dts/qcom-apq8064.dtsi                                |    7 
 arch/arm/configs/gemini_defconfig                                  |    1 
 arch/arm/mach-at91/pm.c                                            |   58 +
 arch/arm/mach-imx/pm-imx6.c                                        |    2 
 arch/arm/mach-omap2/omap_hwmod.c                                   |    2 
 arch/arm/net/bpf_jit_32.c                                          |   19 
 arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi                     |    4 
 arch/arm64/boot/dts/freescale/imx8mm-beacon-som.dtsi               |    2 
 arch/arm64/boot/dts/freescale/imx8mm-evk.dts                       |    2 
 arch/arm64/boot/dts/freescale/imx8mm-kontron-n801x-som.dtsi        |    1 
 arch/arm64/boot/dts/freescale/imx8mn-beacon-som.dtsi               |    2 
 arch/arm64/boot/dts/freescale/imx8mp-phycore-som.dtsi              |    2 
 arch/arm64/boot/dts/freescale/imx8mq-evk.dts                       |    2 
 arch/arm64/boot/dts/freescale/imx8mq-kontron-pitx-imx8m.dts        |    2 
 arch/arm64/boot/dts/qcom/pm8150.dtsi                               |    2 
 arch/arm64/boot/dts/qcom/sc7280.dtsi                               |    6 
 arch/mips/include/asm/mips-cps.h                                   |   23 
 arch/powerpc/boot/dts/fsl/t1023rdb.dts                             |    2 
 arch/powerpc/include/asm/book3s/32/kup.h                           |    8 
 arch/powerpc/include/asm/interrupt.h                               |    5 
 arch/powerpc/kernel/dma-iommu.c                                    |    9 
 arch/powerpc/kernel/exceptions-64s.S                               |   25 
 arch/powerpc/kernel/traps.c                                        |   43 -
 arch/powerpc/net/bpf_jit_comp32.c                                  |    8 
 arch/powerpc/net/bpf_jit_comp64.c                                  |   37 -
 arch/powerpc/platforms/pseries/eeh_pseries.c                       |    4 
 arch/riscv/Makefile                                                |    6 
 arch/riscv/include/asm/syscall.h                                   |    1 
 arch/riscv/include/asm/vdso.h                                      |   37 -
 arch/riscv/include/uapi/asm/unistd.h                               |    3 
 arch/riscv/kernel/syscall_table.c                                  |    1 
 arch/riscv/kernel/vdso.c                                           |   53 +
 arch/riscv/kernel/vdso/Makefile                                    |   25 
 arch/riscv/kernel/vdso/gen_vdso_offsets.sh                         |    5 
 arch/riscv/kernel/vdso/so2s.sh                                     |    6 
 arch/riscv/kernel/vdso/vdso.lds.S                                  |    3 
 arch/riscv/mm/cacheflush.c                                         |    2 
 arch/s390/net/bpf_jit_comp.c                                       |    2 
 arch/x86/Kconfig                                                   |    2 
 arch/x86/include/asm/entry-common.h                                |    2 
 arch/x86/kernel/cpu/common.c                                       |    1 
 arch/x86/kernel/early-quirks.c                                     |    6 
 arch/x86/kernel/fpu/signal.c                                       |   11 
 arch/x86/kernel/hpet.c                                             |   81 ++
 arch/x86/kernel/sev-shared.c                                       |    2 
 arch/x86/platform/olpc/olpc.c                                      |    2 
 arch/xtensa/include/asm/kmem_layout.h                              |    2 
 arch/xtensa/kernel/irq.c                                           |    2 
 arch/xtensa/kernel/setup.c                                         |   12 
 arch/xtensa/mm/mmu.c                                               |    2 
 drivers/bus/ti-sysc.c                                              |    4 
 drivers/gpu/drm/amd/amdgpu/amdgpu.h                                |    1 
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c                   |    1 
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c                         |    6 
 drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c                            |   14 
 drivers/gpu/drm/amd/display/dc/dcn10/dcn10_link_encoder.h          |    1 
 drivers/gpu/drm/amd/display/dc/dcn31/dcn31_dio_link_encoder.c      |   66 ++
 drivers/gpu/drm/amd/display/dc/dcn31/dcn31_dio_link_encoder.h      |   14 
 drivers/gpu/drm/amd/display/dc/dcn31/dcn31_resource.c              |    8 
 drivers/gpu/drm/amd/display/include/dal_asic_id.h                  |    2 
 drivers/gpu/drm/amd/include/asic_reg/dpcs/dpcs_4_2_0_offset.h      |   27 
 drivers/gpu/drm/i915/display/icl_dsi.c                             |   48 +
 drivers/gpu/drm/i915/display/intel_audio.c                         |    5 
 drivers/gpu/drm/i915/display/intel_bios.c                          |   22 
 drivers/gpu/drm/i915/display/intel_ddi.c                           |    8 
 drivers/gpu/drm/i915/display/intel_display.c                       |   20 
 drivers/gpu/drm/i915/display/intel_vbt_defs.h                      |    5 
 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c                       |    7 
 drivers/gpu/drm/i915/i915_reg.h                                    |    6 
 drivers/gpu/drm/i915/intel_pm.c                                    |   12 
 drivers/gpu/drm/nouveau/dispnv50/crc.c                             |    1 
 drivers/gpu/drm/nouveau/dispnv50/head.c                            |    2 
 drivers/gpu/drm/nouveau/include/nvif/class.h                       |    2 
 drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h                 |    1 
 drivers/gpu/drm/nouveau/nouveau_bo.c                               |    1 
 drivers/gpu/drm/nouveau/nouveau_chan.c                             |    6 
 drivers/gpu/drm/nouveau/nouveau_debugfs.c                          |    1 
 drivers/gpu/drm/nouveau/nouveau_drm.c                              |    4 
 drivers/gpu/drm/nouveau/nouveau_gem.c                              |    4 
 drivers/gpu/drm/nouveau/nv84_fence.c                               |    2 
 drivers/gpu/drm/nouveau/nvkm/engine/device/base.c                  |    3 
 drivers/gpu/drm/nouveau/nvkm/engine/fifo/Kbuild                    |    1 
 drivers/gpu/drm/nouveau/nvkm/engine/fifo/ga102.c                   |  311 ++++++++++
 drivers/gpu/drm/nouveau/nvkm/subdev/top/ga100.c                    |    7 
 drivers/gpu/drm/panel/panel-abt-y030xx067a.c                       |    4 
 drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c                              |    7 
 drivers/gpu/drm/sun4i/sun8i_dw_hdmi.h                              |    4 
 drivers/gpu/drm/sun4i/sun8i_hdmi_phy.c                             |   97 +--
 drivers/i2c/busses/i2c-mlxcpld.c                                   |    4 
 drivers/i2c/busses/i2c-mt65xx.c                                    |   11 
 drivers/i2c/i2c-core-acpi.c                                        |    1 
 drivers/mmc/host/meson-gx-mmc.c                                    |   73 +-
 drivers/mmc/host/sdhci-of-at91.c                                   |   22 
 drivers/net/ethernet/google/gve/gve.h                              |    2 
 drivers/net/ethernet/google/gve/gve_main.c                         |   45 -
 drivers/net/ethernet/google/gve/gve_rx.c                           |    8 
 drivers/net/ethernet/intel/i40e/i40e_main.c                        |    5 
 drivers/net/ethernet/intel/iavf/iavf_main.c                        |    1 
 drivers/net/ethernet/mellanox/mlx5/core/en.h                       |   11 
 drivers/net/ethernet/mellanox/mlx5/core/en/hv_vhca_stats.c         |    6 
 drivers/net/ethernet/mellanox/mlx5/core/en/ptp.c                   |    3 
 drivers/net/ethernet/mellanox/mlx5/core/en/ptp.h                   |    2 
 drivers/net/ethernet/mellanox/mlx5/core/en_main.c                  |   59 +
 drivers/net/ethernet/mellanox/mlx5/core/en_rep.c                   |    3 
 drivers/net/ethernet/mellanox/mlx5/core/en_rx.c                    |    7 
 drivers/net/ethernet/mellanox/mlx5/core/en_stats.c                 |   11 
 drivers/net/ethernet/mellanox/mlx5/core/esw/acl/egress_lgcy.c      |   12 
 drivers/net/ethernet/mellanox/mlx5/core/esw/acl/ingress_lgcy.c     |    4 
 drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c              |    4 
 drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c                |   37 -
 drivers/net/ethernet/mellanox/mlx5/core/pci_irq.c                  |    9 
 drivers/net/ethernet/mscc/ocelot_vcap.c                            |    4 
 drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c                     |    5 
 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c                  |    6 
 drivers/net/pcs/pcs-xpcs.c                                         |   45 +
 drivers/net/phy/mdio_bus.c                                         |    7 
 drivers/net/phy/sfp.c                                              |    2 
 drivers/net/wireless/ath/ath5k/Kconfig                             |    4 
 drivers/net/wireless/ath/ath5k/led.c                               |   10 
 drivers/net/wireless/intel/iwlwifi/mvm/time-event.c                |    3 
 drivers/net/wireless/intel/iwlwifi/pcie/drv.c                      |    2 
 drivers/of/base.c                                                  |    1 
 drivers/pci/controller/pci-hyperv.c                                |   13 
 drivers/ptp/ptp_pch.c                                              |    1 
 drivers/scsi/libiscsi.c                                            |   15 
 drivers/scsi/ufs/ufshcd.c                                          |   52 -
 drivers/scsi/ufs/ufshcd.h                                          |    1 
 drivers/soc/qcom/mdt_loader.c                                      |    2 
 drivers/soc/qcom/socinfo.c                                         |    2 
 drivers/soc/ti/omap_prm.c                                          |   27 
 drivers/usb/chipidea/ci_hdrc_imx.c                                 |   15 
 drivers/usb/class/cdc-acm.c                                        |    8 
 drivers/usb/class/cdc-wdm.c                                        |    6 
 drivers/usb/common/Kconfig                                         |    3 
 drivers/usb/gadget/function/f_uac2.c                               |   14 
 drivers/usb/typec/tcpm/tcpci.c                                     |    2 
 drivers/usb/typec/tcpm/tcpm.c                                      |    1 
 drivers/usb/typec/tipd/core.c                                      |    8 
 drivers/video/fbdev/Kconfig                                        |    5 
 drivers/video/fbdev/gbefb.c                                        |    2 
 drivers/xen/balloon.c                                              |   21 
 drivers/xen/privcmd.c                                              |    7 
 fs/afs/write.c                                                     |    3 
 fs/netfs/read_helper.c                                             |    2 
 fs/nfsd/nfs4xdr.c                                                  |   19 
 fs/nfsd/nfsctl.c                                                   |    2 
 fs/overlayfs/dir.c                                                 |   10 
 fs/overlayfs/file.c                                                |   15 
 include/net/netfilter/ipv6/nf_defrag_ipv6.h                        |    1 
 include/net/netfilter/nf_tables.h                                  |    2 
 include/net/netns/netfilter.h                                      |    6 
 include/soc/mscc/ocelot_vcap.h                                     |    4 
 kernel/bpf/stackmap.c                                              |    3 
 net/bridge/br_netlink.c                                            |    3 
 net/core/rtnetlink.c                                               |    2 
 net/dsa/tag_dsa.c                                                  |    2 
 net/ipv4/inet_hashtables.c                                         |    4 
 net/ipv4/netfilter/nf_defrag_ipv4.c                                |   30 
 net/ipv4/udp.c                                                     |    3 
 net/ipv6/inet6_hashtables.c                                        |    2 
 net/ipv6/netfilter/nf_conntrack_reasm.c                            |    2 
 net/ipv6/netfilter/nf_defrag_ipv6_hooks.c                          |   25 
 net/ipv6/udp.c                                                     |    3 
 net/netfilter/nf_tables_api.c                                      |   91 ++
 net/netfilter/nft_quota.c                                          |    2 
 net/netlink/af_netlink.c                                           |   14 
 net/sched/sch_fifo.c                                               |    3 
 net/sched/sch_taprio.c                                             |    4 
 net/sunrpc/auth_gss/svcauth_gss.c                                  |    2 
 tools/lib/bpf/libbpf.c                                             |    3 
 tools/lib/bpf/strset.c                                             |    1 
 tools/objtool/arch/x86/decode.c                                    |    2 
 tools/objtool/special.c                                            |   36 -
 tools/perf/pmu-events/jevents.c                                    |    2 
 182 files changed, 1619 insertions(+), 632 deletions(-)

Adrian Hunter (1):
scsi: ufs: core: Fix task management completion

Alexandre Ghiti (1):
riscv: Flush current cpu icache before other cpus

Alexey Kardashevskiy (1):
powerpc/iommu: Report the correct most efficient DMA mask for PCI devices

Andrew Lunn (1):
dsa: tag_dsa: Fix mask for trunked packets

Andrii Nakryiko (1):
libbpf: Fix memory leak in strset

Andy Shevchenko (1):
ptp_pch: Load module automatically if ID matches

Antonio Martorana (1):
soc: qcom: socinfo: Fixed argument passed to platform_set_data()

Arnd Bergmann (2):
fbdev: simplefb: fix Kconfig dependencies
ath5k: fix building with LEDS=m

Aya Levin (2):
net/mlx5: Force round second at 1PPS out start time net/mlx5: Avoid generating event after PPS out in Real time mode

Ben Hutchings (1):
Partially revert "usb: Kconfig: using select for USB_COMMON dependency"

Ben Skeggs (3):
drm/nouveau/kms/tu102-: delay enabling cursor until after assign_windows drm/nouveau/ga102-: support ttm buffer moves via copy engine drm/nouveau/fifo/ga102: initialise chid on return from channel creation

Borislav Petkov (1):
x86/fpu: Restore the masking out of reserved MXCSR bits

Catherine Sullivan (2):
gve: Correct available tx qpl check
gve: Properly handle errors in gve_assign_qpl

Christophe Branchereau (1):

      drm/panel: abt-y030xx067a: yellow tint fix

Christophe Leroy (1):
powerpc/32s: Fix kuap_kernel_restore()

Claudiu Beznea (3):
mmc: sdhci-of-at91: wait for calibration done before proceed
mmc: sdhci-of-at91: replace while loop with read_poll_timeout
ARM: at91: pm: do not panic if ram controllers are not enabled

David Heidelberg (1):
ARM: dts: qcom: apq8064: use compatible which contains chipid

David Howells (2):
netfs: Fix READ/WRITE confusion when calling iov_iter_xarray()
afs: Fix afs_launder_page() to set correct start file position

Dmitry Baryshkov (1):

      arm64: dts: qcom: pm8150: use qcom,pm8998-pon binding

Douglas Anderson (1):
Revert "arm64: dts: qcom: sc7280: Fixup the cpufreq node"

Eric Dumazet (8):
net_sched: fix NULL deref in fifo_set_limit()
net: bridge: use nla_total_size_64bit() in br_get_linkxstats_size()
net: bridge: fix under estimation in br_get_linkxstats_size() net/sched: sch_taprio: properly cancel timer from taprio_destroy()
netlink: annotate data races around nlk->bound
rtnetlink: fix if_nlmsg_stats_size() under estimation
gve: fix gve_get_stats()
gve: report 64bit tx_bytes counter from gve_handle_report_stats()

Fabio Estevam (2):
usb: chipidea: ci_hdrc_imx: Also search for 'phys' phandle
ARM: dts: imx6qdl-pico: Fix Ethernet support

Florian Westphal (1):
netfilter: conntrack: fix boot failure with nf_conntrack.enable_hooks=1

Geert Uytterhoeven (1):
dt-bindings: drm/bridge: ti-sn65dsi86: Fix reg value

Greg Kroah-Hartman (1):

      Linux 5.14.12

Guchun Chen (1):
drm/amdgpu: handle the case of pci_channel_io_frozen only in amdgpu_pci_resume

Haibo Chen (2):
ARM: dts: imx: change the spi-nor tx
arm64: dts: imx8: change the spi-nor tx

Hansen (1):
drm/amd/display: Fix detection of 4 lane for DPALT

Heikki Krogerus (1):
usb: typec: tipd: Remove dependency on "connector" child fwnode

Heiko Thiery (1):
arm64: dts: imx8mm-kontron-n801x-som: do not allow to switch off buck2

Ilan Peer (1):
iwlwifi: mvm: Fix possible NULL dereference

Ilya Lipnitskiy (1):
MIPS: Revert "add support for buggy MT7621S core detection"

Imre Deak (1):
drm/i915/tc: Fix TypeC port init/resume time sanitization

J. Bruce Fields (1):
SUNRPC: fix sign error causing rpcsec_gss drops

Jamie Iles (1):
i2c: acpi: fix resource leak in reconfiguration device addition

Jan Beulich (1):
xen/privcmd: fix error handling in mmap-resource processing

Jeremy Cline (1):
drm/nouveau: avoid a use-after-free when BO init fails

Jernej Skrabec (1):
drm/sun4i: dw-hdmi: Fix HDMI PHY clock setup

Jiri Benc (1):
i40e: fix endless loop under rtnl

Joe Lawrence (1):
objtool: Make .altinstructions section entry size consistent

Johan Almbladh (1):
bpf, arm: Fix register clobbering in div/mod implementation

Johan Hovold (2):
USB: cdc-acm: fix racy tty buffer accesses
USB: cdc-acm: fix break reporting

Josh Poimboeuf (1):
objtool: Remove reloc symbol type checks in get_alt_entry()

Jude Shih (1):
drm/amd/display: USB4 bring up set correct address

Juergen Gross (1):
xen/balloon: fix cancelled balloon action

Kai-Heng Feng (1):
drm/i915/audio: Use BIOS provided value for RKL HDA link

Kewei Xu (1):
i2c: mediatek: Add OFFSET_EXT_CONF setting back

Kumar Kartikeya Dwivedi (1):
libbpf: Fix segfault in light skeleton for objects without BTF

Lama Kayal (1):
net/mlx5e: Fix the presented RQ index in PTP stats

Lang Yu (1):

      drm/amdkfd: fix a potential ttm->sg memory leak

Lijo Lazar (1):
drm/amdgpu: During s0ix don't wait to signal GFXOFF

Like Xu (1):
perf jevents: Free the sys_event_tables list after processing entries

Linus Walleij (1):
ARM: defconfig: gemini: Restore framebuffer

Liu, Zhan (2):
drm/amd/display: Fix B0 USB-C DP Alt mode
drm/amd/display: Fix DCN3 B0 DP Alt Mapping

Long Li (1):
PCI: hv: Fix sleep while in non-sleep context when removing child devices from the bus

Lukas Bulwahn (3):
x86/platform/olpc: Correct ifdef symbol to intended CONFIG_OLPC_XO15_SCI x86/Kconfig: Correct reference to MWINCHIP3D
x86/entry: Correct reference to intended CONFIG_64_BIT

Lukasz Majczak (1):
drm/i915/bdb: Fix version check

Maarten Lankhorst (1):
drm/i915: Fix runtime pm handling in i915_gem_shrink

Mahesh Salgaonkar (1):
pseries/eeh: Fix the kdump kernel crash during eeh_pseries_init

Marek Vasut (2):
ARM: dts: imx: Add missing pinctrl-names for panel on M53Menlo
ARM: dts: imx: Fix USB host power regulator polarity on M53Menlo

Marijn Suijten (1):
ARM: dts: qcom: apq8064: Use 27MHz PXO clock as DSI PLL reference

Mark Brown (1):
video: fbdev: gbefb: Only instantiate device when built for IP32

Max Filippov (1):
xtensa: call irqchip_init only when CONFIG_USE_OF is selected

Michael Walle (1):

      arm64: dts: ls1028a: fix eSDHC2 node

Michal Vokáč (1):
ARM: dts: imx6dl-yapp4: Fix lp5562 LED driver probe

Mike Christie (1):
scsi: iscsi: Fix iscsi_task use after free

Mike Manning (1):
net: prefer socket bound to interface when not in VRF

Miklos Szeredi (1):
ovl: fix IOCB_DIRECT if underlying fs doesn't support direct IO

Moshe Shemesh (1):
net/mlx5: E-Switch, Fix double allocation of acl flow counter

Nathan Chancellor (1):
bus: ti-sysc: Add break in switch statement in sysc_init_soc()

Naveen N. Rao (6):
powerpc/bpf: Fix BPF_MOD when imm == 1
powerpc/bpf: Fix BPF_SUB when imm == 0x80000000
powerpc/bpf ppc32: Fix ALU32 BPF_ARSH operation
powerpc/bpf ppc32: Fix JMP32_JSET_K
powerpc/bpf ppc32: Do not emit zero extend instruction for 64-bit BPF_END powerpc/bpf ppc32: Fix BPF_SUB when imm == 0x80000000

Neil Armstrong (1):
mmc: meson-gx: do not use memcpy_to/fromio for dram-access-quirk

Nicholas Piggin (3):
powerpc/64s: fix program check interrupt emergency stack path powerpc/traps: do not enable irqs in _exception powerpc/64s: Fix unrecoverable MCE calling async handler from NMI

Nikola Cornij (1):
drm/amd/display: Limit display scaling to up to 4k for DCN 3.1

Oleksij Rempel (1):
ARM: imx6: disable the GIC CPU interface before calling stby-poweroff sequence

Pablo Neira Ayuso (3):
netfilter: nf_tables: add position handle in event notification
netfilter: nf_tables: reverse order in rule replacement expansion
netfilter: nf_tables: honor NLM_F_CREATE and NLM_F_EXCL in event notification

Pali Rohár (1):
powerpc/fsl/dts: Fix phy-connection-type for fm1mac3

Palmer Dabbelt (2):
RISC-V: Fix VDSO build for !MMU
RISC-V: Include clone3() on rv32

Patrick Ho (1):
nfsd: fix error handling of register_pernet_subsys() in init_nfsd()

Pavel Hofman (1):
usb: gadget: f_uac2: fixed EP-IN wMaxPacketSize

Pavel Skripkin (1):
phy: mdio: fix memory leak

Punit Agrawal (1):
net: stmmac: dwmac-rk: Fix ethernet on rk3399 based devices

Raed Salem (1):
net/mlx5e: IPSEC RX, enable checksum complete

Randy Dunlap (1):
xtensa: use CONFIG_USE_OF instead of CONFIG_OF

Rikard Falkeborn (1):
usb: cdc-wdm: Fix check for WWAN

Roger Quadros (1):
ARM: dts: omap3430-sdp: Fix NAND device node

Saleem Abdulrasool (1):
riscv: explicitly use symbol offsets for VDSO

Sean Anderson (1):
net: sfp: Fix typo in state machine debug string

Shawn Guo (1):
soc: qcom: mdt_loader: Drop PT_LOAD check on hash segment

Shay Drory (2):
net/mlx5: Fix length of irq_index in chars
net/mlx5: Fix setting number of EQs of SFs

Stefan Assmann (1):
iavf: fix double unlock of crit_lock

Sylwester Dziedziuch (1):
i40e: Fix freeing of uninitialized misc IRQ vector

Tao Liu (1):
gve: Avoid freeing NULL pointer

Tariq Toukan (1):
net/mlx5e: Keep the value for maximum number of channels in-sync

Tatsuhiko Yasumatsu (1):
bpf: Fix integer overflow in prealloc_elems_and_freelist()

Tejas Upadhyay (1):

      drm/i915/jsl: Add W/A 1409054076 for JSL

Thomas Gleixner (1):
x86/hpet: Use another crystalball to evaluate HPET usability

Tiezhu Yang (1):
bpf, s390: Fix potential memory leak about jit_data

Tom Lendacky (1):
x86/sev: Return an error on a returned non-zero SW_EXITINFO1[31:0]

Tong Tiangen (3):
riscv/vdso: Refactor asm/vdso.h
riscv/vdso: Move vdso data page up front
riscv/vdso: make arch_setup_additional_pages wait for mmap_sem for write killable

Tony Lindgren (2):
soc: ti: omap-prm: Fix external abort for am335x pruss
bus: ti-sysc: Use CLKDM_NOAUTO for dra7 dcan1 for errata i893

Trond Myklebust (1):
nfsd4: Handle the NFSv4 READDIR 'dircount' hint being zero

Vadim Pasternak (2):
i2c: mlxcpld: Fix criteria for frequency setting
i2c: mlxcpld: Modify register setting for 400KHz frequency

Vegard Nossum (1):
x86/entry: Clear X86_FEATURE_SMAP when CONFIG_X86_SMAP=n

Ville Syrjälä (1):
drm/i915: Extend the async flip VT-d w/a to skl/bxt

Vladimir Oltean (1):
net: mscc: ocelot: fix VCAP filters remaining active after being deleted

Vladimir Zapolskiy (1):
iwlwifi: pcie: add configuration of a Wi-Fi adapter on Dell XPS 15

Wong Vee Khee (3):
net: pcs: xpcs: fix incorrect CL37 AN sequence
net: pcs: xpcs: fix incorrect steps on disable EEE
net: stmmac: trigger PCS EEE to turn off on link down

Xu Yang (2):
usb: typec: tcpci: don't handle vSafe0V event if it's not enabled
usb: typec: tcpm: handle SRC_STARTUP state if cc changes

Yang Yingliang (2):
drm/nouveau/kms/nv50-: fix file release memory leak drm/nouveau/debugfs: fix file release memory leak

Zheng Liang (1):
ovl: fix missing negative dentry check in ovl_rename()

author maintainer
#1 lore raw
Documentation/devicetree/bindings/display/bridge/ti,sn65dsi86.yaml +1 -1
index 26932d2e86ab..8608b9dd8e9d 100644
@@ -18,7 +18,7 @@ properties:
     const: ti,sn65dsi86
 
   reg:
-    const: 0x2d
+    enum: [ 0x2c, 0x2d ]
 
   enable-gpios:
     maxItems: 1
Makefile +1 -1
index ca6c4472775c..02cde08f4978 100644
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0
 VERSION = 5
 PATCHLEVEL = 14
-SUBLEVEL = 11
+SUBLEVEL = 12
 EXTRAVERSION =
 NAME = Opossums on Parade
 
arch/arm/boot/dts/imx53-m53menlo.dts +2 -2
index d3082b9774e4..4f88e96d81dd 100644
@@ -56,6 +56,7 @@ eth {
 	panel {
 		compatible = "edt,etm0700g0dh6";
 		pinctrl-0 = <&pinctrl_display_gpio>;
+		pinctrl-names = "default";
 		enable-gpios = <&gpio6 0 GPIO_ACTIVE_HIGH>;
 
 		port {
@@ -76,8 +77,7 @@ reg_usbh1_vbus: regulator-usbh1-vbus {
 		regulator-name = "vbus";
 		regulator-min-microvolt = <5000000>;
 		regulator-max-microvolt = <5000000>;
-		gpio = <&gpio1 2 GPIO_ACTIVE_HIGH>;
-		enable-active-high;
+		gpio = <&gpio1 2 0>;
 	};
 };
 
arch/arm/boot/dts/imx6dl-yapp4-common.dtsi +5 -0
index cb8b539eb29d..e5c4dc65fbab 100644
@@ -5,6 +5,7 @@
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/interrupt-controller/irq.h>
 #include <dt-bindings/input/input.h>
+#include <dt-bindings/leds/common.h>
 #include <dt-bindings/pwm/pwm.h>
 
 / {
@@ -277,6 +278,7 @@ chan@0 {
 			led-cur = /bits/ 8 <0x20>;
 			max-cur = /bits/ 8 <0x60>;
 			reg = <0>;
+			color = <LED_COLOR_ID_RED>;
 		};
 
 		chan@1 {
@@ -284,6 +286,7 @@ chan@1 {
 			led-cur = /bits/ 8 <0x20>;
 			max-cur = /bits/ 8 <0x60>;
 			reg = <1>;
+			color = <LED_COLOR_ID_GREEN>;
 		};
 
 		chan@2 {
@@ -291,6 +294,7 @@ chan@2 {
 			led-cur = /bits/ 8 <0x20>;
 			max-cur = /bits/ 8 <0x60>;
 			reg = <2>;
+			color = <LED_COLOR_ID_BLUE>;
 		};
 
 		chan@3 {
@@ -298,6 +302,7 @@ chan@3 {
 			led-cur = /bits/ 8 <0x0>;
 			max-cur = /bits/ 8 <0x0>;
 			reg = <3>;
+			color = <LED_COLOR_ID_WHITE>;
 		};
 	};
 
arch/arm/boot/dts/imx6qdl-pico.dtsi +11 -0
index 5de4ccb97916..f7a56d6b160c 100644
@@ -176,7 +176,18 @@ &fec {
 	pinctrl-0 = <&pinctrl_enet>;
 	phy-mode = "rgmii-id";
 	phy-reset-gpios = <&gpio1 26 GPIO_ACTIVE_LOW>;
+	phy-handle = <&phy>;
 	status = "okay";
+
+	mdio {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		phy: ethernet-phy@1 {
+			reg = <1>;
+			qca,clk-out-frequency = <125000000>;
+		};
+	};
 };
 
 &hdmi {
arch/arm/boot/dts/imx6sx-sdb.dts +2 -2
index 5a63ca615722..99f4cf777a38 100644
@@ -114,7 +114,7 @@ flash0: n25q256a@0 {
 		compatible = "micron,n25q256a", "jedec,spi-nor";
 		spi-max-frequency = <29000000>;
 		spi-rx-bus-width = <4>;
-		spi-tx-bus-width = <4>;
+		spi-tx-bus-width = <1>;
 		reg = <0>;
 	};
 
@@ -124,7 +124,7 @@ flash1: n25q256a@2 {
 		compatible = "micron,n25q256a", "jedec,spi-nor";
 		spi-max-frequency = <29000000>;
 		spi-rx-bus-width = <4>;
-		spi-tx-bus-width = <4>;
+		spi-tx-bus-width = <1>;
 		reg = <2>;
 	};
 };
arch/arm/boot/dts/imx6ul-14x14-evk.dtsi +1 -1
index 779cc536566d..a3fde3316c73 100644
@@ -292,7 +292,7 @@ flash0: n25q256a@0 {
 		compatible = "micron,n25q256a", "jedec,spi-nor";
 		spi-max-frequency = <29000000>;
 		spi-rx-bus-width = <4>;
-		spi-tx-bus-width = <4>;
+		spi-tx-bus-width = <1>;
 		reg = <0>;
 	};
 };
arch/arm/boot/dts/omap3430-sdp.dts +1 -1
index c5b903718414..7d530ae3483b 100644
@@ -101,7 +101,7 @@ partition@280000 {
 
 	nand@1,0 {
 		compatible = "ti,omap2-nand";
-		reg = <0 0 4>; /* CS0, offset 0, IO size 4 */
+		reg = <1 0 4>; /* CS1, offset 0, IO size 4 */
 		interrupt-parent = <&gpmc>;
 		interrupts = <0 IRQ_TYPE_NONE>, /* fifoevent */
 			     <1 IRQ_TYPE_NONE>;	/* termcount */
arch/arm/boot/dts/qcom-apq8064.dtsi +3 -4
index e36d590e8373..72c4a9fc41a2 100644
@@ -198,7 +198,7 @@ cxo_board: cxo_board {
 			clock-frequency = <19200000>;
 		};
 
-		pxo_board {
+		pxo_board: pxo_board {
 			compatible = "fixed-clock";
 			#clock-cells = <0>;
 			clock-frequency = <27000000>;
@@ -1148,7 +1148,7 @@ tcsr: syscon@1a400000 {
 		};
 
 		gpu: adreno-3xx@4300000 {
-			compatible = "qcom,adreno-3xx";
+			compatible = "qcom,adreno-320.2", "qcom,adreno";
 			reg = <0x04300000 0x20000>;
 			reg-names = "kgsl_3d0_reg_memory";
 			interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>;
@@ -1163,7 +1163,6 @@ gpu: adreno-3xx@4300000 {
 			    <&mmcc GFX3D_AHB_CLK>,
 			    <&mmcc GFX3D_AXI_CLK>,
 			    <&mmcc MMSS_IMEM_AHB_CLK>;
-			qcom,chipid = <0x03020002>;
 
 			iommus = <&gfx3d 0
 				  &gfx3d 1
@@ -1306,7 +1305,7 @@ dsi0_phy: dsi-phy@4700200 {
 			reg-names = "dsi_pll", "dsi_phy", "dsi_phy_regulator";
 			clock-names = "iface_clk", "ref";
 			clocks = <&mmcc DSI_M_AHB_CLK>,
-				 <&cxo_board>;
+				 <&pxo_board>;
 		};
 
 
arch/arm/configs/gemini_defconfig +1 -0
index d2d5f1cf815f..e6ff844821cf 100644
@@ -76,6 +76,7 @@ CONFIG_REGULATOR_FIXED_VOLTAGE=y
 CONFIG_DRM=y
 CONFIG_DRM_PANEL_ILITEK_IL9322=y
 CONFIG_DRM_TVE200=y
+CONFIG_FB=y
 CONFIG_LOGO=y
 CONFIG_USB=y
 CONFIG_USB_MON=y
arch/arm/mach-at91/pm.c +47 -11

144 lines not on this page · raw message

arch/arm/mach-imx/pm-imx6.c +2 -0
index 9244437cb1b9..f2ecca339910 100644
@@ -10,6 +10,7 @@
 #include <linux/io.h>
 #include <linux/irq.h>
 #include <linux/genalloc.h>
+#include <linux/irqchip/arm-gic.h>
 #include <linux/mfd/syscon.h>
 #include <linux/mfd/syscon/imx6q-iomuxc-gpr.h>
 #include <linux/of.h>
@@ -619,6 +620,7 @@ static void __init imx6_pm_common_init(const struct imx6_pm_socdata
 
 static void imx6_pm_stby_poweroff(void)
 {
+	gic_cpu_if_down(0);
 	imx6_set_lpm(STOP_POWER_OFF);
 	imx6q_suspend_finish(0);
 
arch/arm/mach-omap2/omap_hwmod.c +2 -0
index 12b26e04686f..0c2936c7a379 100644
@@ -3614,6 +3614,8 @@ int omap_hwmod_init_module(struct device *dev,
 		oh->flags |= HWMOD_SWSUP_SIDLE_ACT;
 	if (data->cfg->quirks & SYSC_QUIRK_SWSUP_MSTANDBY)
 		oh->flags |= HWMOD_SWSUP_MSTANDBY;
+	if (data->cfg->quirks & SYSC_QUIRK_CLKDM_NOAUTO)
+		oh->flags |= HWMOD_CLKDM_NOAUTO;
 
 	error = omap_hwmod_check_module(dev, oh, data, sysc_fields,
 					rev_offs, sysc_offs, syss_offs,
arch/arm/net/bpf_jit_32.c +19 -0
index a951276f0547..a903b26cde40 100644
@@ -36,6 +36,10 @@
  *                        +-----+
  *                        |RSVD | JIT scratchpad
  * current ARM_SP =>      +-----+ <= (BPF_FP - STACK_SIZE + SCRATCH_SIZE)
+ *                        | ... | caller-saved registers
+ *                        +-----+
+ *                        | ... | arguments passed on stack
+ * ARM_SP during call =>  +-----|
  *                        |     |
  *                        | ... | Function call stack
  *                        |     |
@@ -63,6 +67,12 @@
  *
  * When popping registers off the stack at the end of a BPF function, we
  * reference them via the current ARM_FP register.
+ *
+ * Some eBPF operations are implemented via a call to a helper function.
+ * Such calls are "invisible" in the eBPF code, so it is up to the calling
+ * program to preserve any caller-saved ARM registers during the call. The
+ * JIT emits code to push and pop those registers onto the stack, immediately
+ * above the callee stack frame.
  */
 #define CALLEE_MASK	(1 << ARM_R4 | 1 << ARM_R5 | 1 << ARM_R6 | \
 			 1 << ARM_R7 | 1 << ARM_R8 | 1 << ARM_R9 | \
@@ -70,6 +80,8 @@
 #define CALLEE_PUSH_MASK (CALLEE_MASK | 1 << ARM_LR)
 #define CALLEE_POP_MASK  (CALLEE_MASK | 1 << ARM_PC)
 
+#define CALLER_MASK	(1 << ARM_R0 | 1 << ARM_R1 | 1 << ARM_R2 | 1 << ARM_R3)
+
 enum {
 	/* Stack layout - these are offsets from (top of stack - 4) */
 	BPF_R2_HI,
@@ -464,6 +476,7 @@ static inline int epilogue_offset(const struct jit_ctx *ctx)
 
 static inline void emit_udivmod(u8 rd, u8 rm, u8 rn, struct jit_ctx *ctx, u8 op)
 {
+	const int exclude_mask = BIT(ARM_R0) | BIT(ARM_R1);
 	const s8 *tmp = bpf2a32[TMP_REG_1];
 
 #if __LINUX_ARM_ARCH__ == 7
@@ -495,11 +508,17 @@ static inline void emit_udivmod(u8 rd, u8 rm, u8 rn, struct jit_ctx *ctx, u8 op)
 		emit(ARM_MOV_R(ARM_R0, rm), ctx);
 	}
 
+	/* Push caller-saved registers on stack */
+	emit(ARM_PUSH(CALLER_MASK & ~exclude_mask), ctx);
+
 	/* Call appropriate function */
 	emit_mov_i(ARM_IP, op == BPF_DIV ?
 		   (u32)jit_udiv32 : (u32)jit_mod32, ctx);
 	emit_blx_r(ARM_IP, ctx);
 
+	/* Restore caller-saved registers from stack */
+	emit(ARM_POP(CALLER_MASK & ~exclude_mask), ctx);
+
 	/* Save return value */
 	if (rd != ARM_R0)
 		emit(ARM_MOV_R(rd, ARM_R0), ctx);
arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi +2 -2
index 343ecf0e8973..06b36cc65865 100644
@@ -405,9 +405,9 @@ esdhc1: mmc@2150000 {
 			interrupts = <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>;
 			clock-frequency = <0>; /* fixed up by bootloader */
 			clocks = <&clockgen QORIQ_CLK_HWACCEL 1>;
-			voltage-ranges = <1800 1800 3300 3300>;
+			voltage-ranges = <1800 1800>;
 			sdhci,auto-cmd12;
-			broken-cd;
+			non-removable;
 			little-endian;
 			bus-width = <4>;
 			status = "disabled";
arch/arm64/boot/dts/freescale/imx8mm-beacon-som.dtsi +1 -1
index 988f8ab679ad..40f5e7a3b064 100644
@@ -91,7 +91,7 @@ flash@0 {
 		#size-cells = <1>;
 		compatible = "jedec,spi-nor";
 		spi-max-frequency = <80000000>;
-		spi-tx-bus-width = <4>;
+		spi-tx-bus-width = <1>;
 		spi-rx-bus-width = <4>;
 	};
 };
arch/arm64/boot/dts/freescale/imx8mm-evk.dts +1 -1
index 4e2820d19244..a2b24d4d4e3e 100644
@@ -48,7 +48,7 @@ flash@0 {
 		#size-cells = <1>;
 		compatible = "jedec,spi-nor";
 		spi-max-frequency = <80000000>;
-		spi-tx-bus-width = <4>;
+		spi-tx-bus-width = <1>;
 		spi-rx-bus-width = <4>;
 	};
 };
arch/arm64/boot/dts/freescale/imx8mm-kontron-n801x-som.dtsi +1 -0
index d0456daefda8..9db9b90bf2bc 100644
@@ -102,6 +102,7 @@ reg_vdd_arm: BUCK2 {
 				regulator-min-microvolt = <850000>;
 				regulator-max-microvolt = <950000>;
 				regulator-boot-on;
+				regulator-always-on;
 				regulator-ramp-delay = <3125>;
 				nxp,dvs-run-voltage = <950000>;
 				nxp,dvs-standby-voltage = <850000>;
arch/arm64/boot/dts/freescale/imx8mn-beacon-som.dtsi +1 -1
index 54eaf3d6055b..3b2d627a0342 100644
@@ -101,7 +101,7 @@ flash@0 {
 		#size-cells = <1>;
 		compatible = "jedec,spi-nor";
 		spi-max-frequency = <80000000>;
-		spi-tx-bus-width = <4>;
+		spi-tx-bus-width = <1>;
 		spi-rx-bus-width = <4>;
 	};
 };
arch/arm64/boot/dts/freescale/imx8mp-phycore-som.dtsi +1 -1
index aa78e0d8c72b..fc178eebf8aa 100644
@@ -74,7 +74,7 @@ som_flash: flash@0 {
 		compatible = "jedec,spi-nor";
 		reg = <0>;
 		spi-max-frequency = <80000000>;
-		spi-tx-bus-width = <4>;
+		spi-tx-bus-width = <1>;
 		spi-rx-bus-width = <4>;
 	};
 };
arch/arm64/boot/dts/freescale/imx8mq-evk.dts +2 -0
index 4d2035e3dd7c..4886f3e31587 100644
@@ -337,6 +337,8 @@ n25q256a: flash@0 {
 		#size-cells = <1>;
 		compatible = "micron,n25q256a", "jedec,spi-nor";
 		spi-max-frequency = <29000000>;
+		spi-tx-bus-width = <1>;
+		spi-rx-bus-width = <4>;
 	};
 };
 
arch/arm64/boot/dts/freescale/imx8mq-kontron-pitx-imx8m.dts +1 -1
index f593e4ff62e1..564746d5000d 100644
@@ -281,7 +281,7 @@ flash@0 {
 		#address-cells = <1>;
 		#size-cells = <1>;
 		reg = <0>;
-		spi-tx-bus-width = <4>;
+		spi-tx-bus-width = <1>;
 		spi-rx-bus-width = <4>;
 		m25p,fast-read;
 		spi-max-frequency = <50000000>;
arch/arm64/boot/dts/qcom/pm8150.dtsi +1 -1
index c566a64b1373..00385b1fd358 100644
@@ -48,7 +48,7 @@ pm8150_0: pmic@0 {
 		#size-cells = <0>;
 
 		pon: power-on@800 {
-			compatible = "qcom,pm8916-pon";
+			compatible = "qcom,pm8998-pon";
 			reg = <0x0800>;
 
 			pon_pwrkey: pwrkey {
arch/arm64/boot/dts/qcom/sc7280.dtsi +3 -3
index c08f07410699..188c5768a55a 100644
@@ -1437,9 +1437,9 @@ rpmhcc: clock-controller {
 
 		cpufreq_hw: cpufreq@18591000 {
 			compatible = "qcom,cpufreq-epss";
-			reg = <0 0x18591100 0 0x900>,
-			      <0 0x18592100 0 0x900>,
-			      <0 0x18593100 0 0x900>;
+			reg = <0 0x18591000 0 0x1000>,
+			      <0 0x18592000 0 0x1000>,
+			      <0 0x18593000 0 0x1000>;
 			clocks = <&rpmhcc RPMH_CXO_CLK>, <&gcc GCC_GPLL0>;
 			clock-names = "xo", "alternate";
 			#freq-domain-cells = <1>;
arch/mips/include/asm/mips-cps.h +1 -22
index 35fb8ee6dd33..fd43d876892e 100644
@@ -10,8 +10,6 @@
 #include <linux/io.h>
 #include <linux/types.h>
 
-#include <asm/mips-boards/launch.h>
-
 extern unsigned long __cps_access_bad_size(void)
 	__compiletime_error("Bad size for CPS accessor");
 
@@ -167,30 +165,11 @@ static inline uint64_t mips_cps_cluster_config(unsigned int cluster)
  */
 static inline unsigned int mips_cps_numcores(unsigned int cluster)
 {
-	unsigned int ncores;
-
 	if (!mips_cm_present())
 		return 0;
 
 	/* Add one before masking to handle 0xff indicating no cores */
-	ncores = (mips_cps_cluster_config(cluster) + 1) & CM_GCR_CONFIG_PCORES;
-
-	if (IS_ENABLED(CONFIG_SOC_MT7621)) {
-		struct cpulaunch *launch;
-
-		/*
-		 * Ralink MT7621S SoC is single core, but the GCR_CONFIG method
-		 * always reports 2 cores. Check the second core's LAUNCH_FREADY
-		 * flag to detect if the second core is missing. This method
-		 * only works before the core has been started.
-		 */
-		launch = (struct cpulaunch *)CKSEG0ADDR(CPULAUNCH);
-		launch += 2; /* MT7621 has 2 VPEs per core */
-		if (!(launch->flags & LAUNCH_FREADY))
-			ncores = 1;
-	}
-
-	return ncores;
+	return (mips_cps_cluster_config(cluster) + 1) & CM_GCR_CONFIG_PCORES;
 }
 
 /**
arch/powerpc/boot/dts/fsl/t1023rdb.dts +1 -1
index 5ba6fbfca274..f82f85c65964 100644
@@ -154,7 +154,7 @@ fm1mac2: ethernet@e2000 {
 
 			fm1mac3: ethernet@e4000 {
 				phy-handle = <&sgmii_aqr_phy3>;
-				phy-connection-type = "sgmii-2500";
+				phy-connection-type = "2500base-x";
 				sleep = <&rcpm 0x20000000>;
 			};
 
arch/powerpc/include/asm/book3s/32/kup.h +8 -0
index d4b145b279f6..9f38040f0641 100644
@@ -136,6 +136,14 @@ static inline void kuap_kernel_restore(struct pt_regs *regs, unsigned long kuap)
 	if (kuap_is_disabled())
 		return;
 
+	if (unlikely(kuap != KUAP_NONE)) {
+		current->thread.kuap = KUAP_NONE;
+		kuap_lock(kuap, false);
+	}
+
+	if (likely(regs->kuap == KUAP_NONE))
+		return;
+
 	current->thread.kuap = regs->kuap;
 
 	kuap_unlock(regs->kuap, false);
arch/powerpc/include/asm/interrupt.h +2 -3
index 6b800d3e2681..a925dbc5833c 100644
@@ -525,10 +525,9 @@ static __always_inline long ____##func(struct pt_regs *regs)
 /* kernel/traps.c */
 DECLARE_INTERRUPT_HANDLER_NMI(system_reset_exception);
 #ifdef CONFIG_PPC_BOOK3S_64
-DECLARE_INTERRUPT_HANDLER_ASYNC(machine_check_exception);
-#else
-DECLARE_INTERRUPT_HANDLER_NMI(machine_check_exception);
+DECLARE_INTERRUPT_HANDLER_ASYNC(machine_check_exception_async);
 #endif
+DECLARE_INTERRUPT_HANDLER_NMI(machine_check_exception);
 DECLARE_INTERRUPT_HANDLER(SMIException);
 DECLARE_INTERRUPT_HANDLER(handle_hmi_exception);
 DECLARE_INTERRUPT_HANDLER(unknown_exception);
arch/powerpc/kernel/dma-iommu.c +9 -0
index 111249fd619d..038ce8d9061d 100644
@@ -184,6 +184,15 @@ u64 dma_iommu_get_required_mask(struct device *dev)
 	struct iommu_table *tbl = get_iommu_table_base(dev);
 	u64 mask;
 
+	if (dev_is_pci(dev)) {
+		u64 bypass_mask = dma_direct_get_required_mask(dev);
+
+		if (dma_iommu_dma_supported(dev, bypass_mask)) {
+			dev_info(dev, "%s: returning bypass mask 0x%llx\n", __func__, bypass_mask);
+			return bypass_mask;
+		}
+	}
+
 	if (!tbl)
 		return 0;
 
arch/powerpc/kernel/exceptions-64s.S +16 -9
index 37859e62a8dc..eaf1f72131a1 100644
@@ -1243,7 +1243,7 @@ EXC_COMMON_BEGIN(machine_check_common)
 	li	r10,MSR_RI
 	mtmsrd 	r10,1
 	addi	r3,r1,STACK_FRAME_OVERHEAD
-	bl	machine_check_exception
+	bl	machine_check_exception_async
 	b	interrupt_return_srr
 
 
@@ -1303,7 +1303,11 @@ END_FTR_SECTION_IFSET(CPU_FTR_HVMODE)
 	subi	r12,r12,1
 	sth	r12,PACA_IN_MCE(r13)
 
-	/* Invoke machine_check_exception to print MCE event and panic. */
+	/*
+	 * Invoke machine_check_exception to print MCE event and panic.
+	 * This is the NMI version of the handler because we are called from
+	 * the early handler which is a true NMI.
+	 */
 	addi	r3,r1,STACK_FRAME_OVERHEAD
 	bl	machine_check_exception
 
@@ -1665,27 +1669,30 @@ EXC_COMMON_BEGIN(program_check_common)
 	 */
 
 	andi.	r10,r12,MSR_PR
-	bne	2f			/* If userspace, go normal path */
+	bne	.Lnormal_stack		/* If userspace, go normal path */
 
 	andis.	r10,r12,(SRR1_PROGTM)@h
-	bne	1f			/* If TM, emergency		*/
+	bne	.Lemergency_stack	/* If TM, emergency		*/
 
 	cmpdi	r1,-INT_FRAME_SIZE	/* check if r1 is in userspace	*/
-	blt	2f			/* normal path if not		*/
+	blt	.Lnormal_stack		/* normal path if not		*/
 
 	/* Use the emergency stack					*/
-1:	andi.	r10,r12,MSR_PR		/* Set CR0 correctly for label	*/
+.Lemergency_stack:
+	andi.	r10,r12,MSR_PR		/* Set CR0 correctly for label	*/
 					/* 3 in EXCEPTION_PROLOG_COMMON	*/
 	mr	r10,r1			/* Save r1			*/
 	ld	r1,PACAEMERGSP(r13)	/* Use emergency stack		*/
 	subi	r1,r1,INT_FRAME_SIZE	/* alloc stack frame		*/
 	__ISTACK(program_check)=0
 	__GEN_COMMON_BODY program_check
-	b 3f
-2:
+	b .Ldo_program_check
+
+.Lnormal_stack:
 	__ISTACK(program_check)=1
 	__GEN_COMMON_BODY program_check
-3:
+
+.Ldo_program_check:
 	addi	r3,r1,STACK_FRAME_OVERHEAD
 	bl	program_check_exception
 	REST_NVGPRS(r1) /* instruction emulation may change GPRs */
arch/powerpc/kernel/traps.c +27 -16

73 lines not on this page · raw message

arch/powerpc/net/bpf_jit_comp32.c +4 -4
index beb12cbc8c29..a7759aa8043d 100644
@@ -355,7 +355,7 @@ int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, struct codegen_context *
 				PPC_LI32(_R0, imm);
 				EMIT(PPC_RAW_ADDC(dst_reg, dst_reg, _R0));
 			}
-			if (imm >= 0)
+			if (imm >= 0 || (BPF_OP(code) == BPF_SUB && imm == 0x80000000))
 				EMIT(PPC_RAW_ADDZE(dst_reg_h, dst_reg_h));
 			else
 				EMIT(PPC_RAW_ADDME(dst_reg_h, dst_reg_h));
@@ -623,7 +623,7 @@ int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, struct codegen_context *
 			EMIT(PPC_RAW_LI(dst_reg_h, 0));
 			break;
 		case BPF_ALU | BPF_ARSH | BPF_X: /* (s32) dst >>= src */
-			EMIT(PPC_RAW_SRAW(dst_reg_h, dst_reg, src_reg));
+			EMIT(PPC_RAW_SRAW(dst_reg, dst_reg, src_reg));
 			break;
 		case BPF_ALU64 | BPF_ARSH | BPF_X: /* (s64) dst >>= src */
 			bpf_set_seen_register(ctx, tmp_reg);
@@ -1073,7 +1073,7 @@ int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, struct codegen_context *
 				break;
 			case BPF_JMP32 | BPF_JSET | BPF_K:
 				/* andi does not sign-extend the immediate */
-				if (imm >= -32768 && imm < 32768) {
+				if (imm >= 0 && imm < 32768) {
 					/* PPC_ANDI is _only/always_ dot-form */
 					EMIT(PPC_RAW_ANDI(_R0, dst_reg, imm));
 				} else {
@@ -1103,7 +1103,7 @@ int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, struct codegen_context *
 			return -EOPNOTSUPP;
 		}
 		if (BPF_CLASS(code) == BPF_ALU && !fp->aux->verifier_zext &&
-		    !insn_is_zext(&insn[i + 1]))
+		    !insn_is_zext(&insn[i + 1]) && !(BPF_OP(code) == BPF_END && imm == 64))
 			EMIT(PPC_RAW_LI(dst_reg_h, 0));
 	}
 
arch/powerpc/net/bpf_jit_comp64.c +25 -12
index b87a63dba9c8..dff4a2930970 100644
@@ -328,18 +328,25 @@ int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, struct codegen_context *
 			EMIT(PPC_RAW_SUB(dst_reg, dst_reg, src_reg));
 			goto bpf_alu32_trunc;
 		case BPF_ALU | BPF_ADD | BPF_K: /* (u32) dst += (u32) imm */
-		case BPF_ALU | BPF_SUB | BPF_K: /* (u32) dst -= (u32) imm */
 		case BPF_ALU64 | BPF_ADD | BPF_K: /* dst += imm */
+			if (!imm) {
+				goto bpf_alu32_trunc;
+			} else if (imm >= -32768 && imm < 32768) {
+				EMIT(PPC_RAW_ADDI(dst_reg, dst_reg, IMM_L(imm)));
+			} else {
+				PPC_LI32(b2p[TMP_REG_1], imm);
+				EMIT(PPC_RAW_ADD(dst_reg, dst_reg, b2p[TMP_REG_1]));
+			}
+			goto bpf_alu32_trunc;
+		case BPF_ALU | BPF_SUB | BPF_K: /* (u32) dst -= (u32) imm */
 		case BPF_ALU64 | BPF_SUB | BPF_K: /* dst -= imm */
-			if (BPF_OP(code) == BPF_SUB)
-				imm = -imm;
-			if (imm) {
-				if (imm >= -32768 && imm < 32768)
-					EMIT(PPC_RAW_ADDI(dst_reg, dst_reg, IMM_L(imm)));
-				else {
-					PPC_LI32(b2p[TMP_REG_1], imm);
-					EMIT(PPC_RAW_ADD(dst_reg, dst_reg, b2p[TMP_REG_1]));
-				}
+			if (!imm) {
+				goto bpf_alu32_trunc;
+			} else if (imm > -32768 && imm <= 32768) {
+				EMIT(PPC_RAW_ADDI(dst_reg, dst_reg, IMM_L(-imm)));
+			} else {
+				PPC_LI32(b2p[TMP_REG_1], imm);
+				EMIT(PPC_RAW_SUB(dst_reg, dst_reg, b2p[TMP_REG_1]));
 			}
 			goto bpf_alu32_trunc;
 		case BPF_ALU | BPF_MUL | BPF_X: /* (u32) dst *= (u32) src */
@@ -389,8 +396,14 @@ int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, struct codegen_context *
 		case BPF_ALU64 | BPF_DIV | BPF_K: /* dst /= imm */
 			if (imm == 0)
 				return -EINVAL;
-			else if (imm == 1)
-				goto bpf_alu32_trunc;
+			if (imm == 1) {
+				if (BPF_OP(code) == BPF_DIV) {
+					goto bpf_alu32_trunc;
+				} else {
+					EMIT(PPC_RAW_LI(dst_reg, 0));
+					break;
+				}
+			}
 
 			PPC_LI32(b2p[TMP_REG_1], imm);
 			switch (BPF_CLASS(code)) {
arch/powerpc/platforms/pseries/eeh_pseries.c +4 -0
index bc15200852b7..09fafcf2d3a0 100644
@@ -867,6 +867,10 @@ static int __init eeh_pseries_init(void)
 	if (is_kdump_kernel() || reset_devices) {
 		pr_info("Issue PHB reset ...\n");
 		list_for_each_entry(phb, &hose_list, list_node) {
+			// Skip if the slot is empty
+			if (list_empty(&PCI_DN(phb->dn)->child_list))
+				continue;
+
 			pdn = list_first_entry(&PCI_DN(phb->dn)->child_list, struct pci_dn, list);
 			config_addr = pseries_eeh_get_pe_config_addr(pdn);
 
arch/riscv/Makefile +6 -0
index bc74afdbf31e..83ee0e71204c 100644
@@ -108,6 +108,12 @@ PHONY += vdso_install
 vdso_install:
 	$(Q)$(MAKE) $(build)=arch/riscv/kernel/vdso $@
 
+ifeq ($(CONFIG_MMU),y)
+prepare: vdso_prepare
+vdso_prepare: prepare0
+	$(Q)$(MAKE) $(build)=arch/riscv/kernel/vdso include/generated/vdso-offsets.h
+endif
+
 ifneq ($(CONFIG_XIP_KERNEL),y)
 ifeq ($(CONFIG_RISCV_M_MODE)$(CONFIG_SOC_CANAAN),yy)
 KBUILD_IMAGE := $(boot)/loader.bin
arch/riscv/include/asm/syscall.h +1 -0
index b933b1583c9f..34fbb3ea21d5 100644
@@ -82,4 +82,5 @@ static inline int syscall_get_arch(struct task_struct *task)
 #endif
 }
 
+asmlinkage long sys_riscv_flush_icache(uintptr_t, uintptr_t, uintptr_t);
 #endif	/* _ASM_RISCV_SYSCALL_H */
arch/riscv/include/asm/vdso.h +21 -16
index 1453a2f563bc..208e31bc5d1c 100644
@@ -8,27 +8,32 @@
 #ifndef _ASM_RISCV_VDSO_H
 #define _ASM_RISCV_VDSO_H
 
-#include <linux/types.h>
 
-#ifndef CONFIG_GENERIC_TIME_VSYSCALL
-struct vdso_data {
-};
-#endif
+/*
+ * All systems with an MMU have a VDSO, but systems without an MMU don't
+ * support shared libraries and therefor don't have one.
+ */
+#ifdef CONFIG_MMU
 
+#include <linux/types.h>
 /*
- * The VDSO symbols are mapped into Linux so we can just use regular symbol
- * addressing to get their offsets in userspace.  The symbols are mapped at an
- * offset of 0, but since the linker must support setting weak undefined
- * symbols to the absolute address 0 it also happens to support other low
- * addresses even when the code model suggests those low addresses would not
- * otherwise be availiable.
+ * All systems with an MMU have a VDSO, but systems without an MMU don't
+ * support shared libraries and therefor don't have one.
  */
+#ifdef CONFIG_MMU
+
+#define __VVAR_PAGES    1
+
+#ifndef __ASSEMBLY__
+#include <generated/vdso-offsets.h>
+
 #define VDSO_SYMBOL(base, name)							\
-({										\
-	extern const char __vdso_##name[];					\
-	(void __user *)((unsigned long)(base) + __vdso_##name);			\
-})
+	(void __user *)((unsigned long)(base) + __vdso_##name##_offset)
+
+#endif /* CONFIG_MMU */
+
+#endif /* !__ASSEMBLY__ */
 
-asmlinkage long sys_riscv_flush_icache(uintptr_t, uintptr_t, uintptr_t);
+#endif /* CONFIG_MMU */
 
 #endif /* _ASM_RISCV_VDSO_H */
arch/riscv/include/uapi/asm/unistd.h +2 -1
index 4b989ae15d59..8062996c2dfd 100644
@@ -18,9 +18,10 @@
 #ifdef __LP64__
 #define __ARCH_WANT_NEW_STAT
 #define __ARCH_WANT_SET_GET_RLIMIT
-#define __ARCH_WANT_SYS_CLONE3
 #endif /* __LP64__ */
 
+#define __ARCH_WANT_SYS_CLONE3
+
 #include <asm-generic/unistd.h>
 
 /*
arch/riscv/kernel/syscall_table.c +0 -1
index a63c667c27b3..44b1420a2270 100644
@@ -7,7 +7,6 @@
 #include <linux/linkage.h>
 #include <linux/syscalls.h>
 #include <asm-generic/syscalls.h>
-#include <asm/vdso.h>
 #include <asm/syscall.h>
 
 #undef __SYSCALL
arch/riscv/kernel/vdso.c +33 -20

99 lines not on this page · raw message

arch/riscv/kernel/vdso/Makefile +11 -14
index 24d936c147cd..f8cb9144a284 100644
@@ -23,10 +23,10 @@ ifneq ($(c-gettimeofday-y),)
 endif
 
 # Build rules
-targets := $(obj-vdso) vdso.so vdso.so.dbg vdso.lds vdso-syms.S
+targets := $(obj-vdso) vdso.so vdso.so.dbg vdso.lds
 obj-vdso := $(addprefix $(obj)/, $(obj-vdso))
 
-obj-y += vdso.o vdso-syms.o
+obj-y += vdso.o
 CPPFLAGS_vdso.lds += -P -C -U$(ARCH)
 
 # Disable -pg to prevent insert call site
@@ -43,20 +43,22 @@ $(obj)/vdso.o: $(obj)/vdso.so
 # link rule for the .so file, .lds has to be first
 $(obj)/vdso.so.dbg: $(obj)/vdso.lds $(obj-vdso) FORCE
 	$(call if_changed,vdsold)
-LDFLAGS_vdso.so.dbg = -shared -s -soname=linux-vdso.so.1 \
+LDFLAGS_vdso.so.dbg = -shared -S -soname=linux-vdso.so.1 \
 	--build-id=sha1 --hash-style=both --eh-frame-hdr
 
-# We also create a special relocatable object that should mirror the symbol
-# table and layout of the linked DSO. With ld --just-symbols we can then
-# refer to these symbols in the kernel code rather than hand-coded addresses.
-$(obj)/vdso-syms.S: $(obj)/vdso.so FORCE
-	$(call if_changed,so2s)
-
 # strip rule for the .so file
 $(obj)/%.so: OBJCOPYFLAGS := -S
 $(obj)/%.so: $(obj)/%.so.dbg FORCE
 	$(call if_changed,objcopy)
 
+# Generate VDSO offsets using helper script
+gen-vdsosym := $(srctree)/$(src)/gen_vdso_offsets.sh
+quiet_cmd_vdsosym = VDSOSYM $@
+	cmd_vdsosym = $(NM) $< | $(gen-vdsosym) | LC_ALL=C sort > $@
+
+include/generated/vdso-offsets.h: $(obj)/vdso.so.dbg FORCE
+	$(call if_changed,vdsosym)
+
 # actual build commands
 # The DSO images are built using a special linker script
 # Make sure only to export the intended __vdso_xxx symbol offsets.
@@ -65,11 +67,6 @@ quiet_cmd_vdsold = VDSOLD  $@
                    $(OBJCOPY) $(patsubst %, -G __vdso_%, $(vdso-syms)) [email protected] $@ && \
                    rm [email protected]
 
-# Extracts symbol offsets from the VDSO, converting them into an assembly file
-# that contains the same symbols at the same offsets.
-quiet_cmd_so2s = SO2S    $@
-      cmd_so2s = $(NM) -D $< | $(srctree)/$(src)/so2s.sh > $@
-
 # install commands for the unstripped file
 quiet_cmd_vdso_install = INSTALL $@
       cmd_vdso_install = cp $(obj)/[email protected] $(MODLIB)/vdso/$@
arch/riscv/kernel/vdso/gen_vdso_offsets.sh new file +5 -0
new file mode 100755
index 000000000000..c2e5613f3495
@@ -0,0 +1,5 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0
+
+LC_ALL=C
+sed -n -e 's/^[0]\+\(0[0-9a-fA-F]*\) . \(__vdso_[a-zA-Z0-9_]*\)$/\#define \2_offset\t0x\1/p'
arch/riscv/kernel/vdso/so2s.sh deleted +0 -6
deleted file mode 100755
index e64cb6d9440e..000000000000
@@ -1,6 +0,0 @@
-#!/bin/sh
-# SPDX-License-Identifier: GPL-2.0+
-# Copyright 2020 Palmer Dabbelt <[email protected]>
-
-sed 's!\([0-9a-f]*\) T \([a-z0-9_]*\)\(@@LINUX_4.15\)*!.global \2\n.set \2,0x\1!' \
-| grep '^\.'
arch/riscv/kernel/vdso/vdso.lds.S +2 -1
index e6f558bca71b..e9111f700af0 100644
@@ -3,12 +3,13 @@
  * Copyright (C) 2012 Regents of the University of California
  */
 #include <asm/page.h>
+#include <asm/vdso.h>
 
 OUTPUT_ARCH(riscv)
 
 SECTIONS
 {
-	PROVIDE(_vdso_data = . + PAGE_SIZE);
+	PROVIDE(_vdso_data = . - __VVAR_PAGES * PAGE_SIZE);
 	. = SIZEOF_HEADERS;
 
 	.hash		: { *(.hash) }			:text
arch/riscv/mm/cacheflush.c +2 -0
index 094118663285..89f81067e09e 100644
@@ -16,6 +16,8 @@ static void ipi_remote_fence_i(void *info)
 
 void flush_icache_all(void)
 {
+	local_flush_icache_all();
+
 	if (IS_ENABLED(CONFIG_RISCV_SBI))
 		sbi_remote_fence_i(NULL);
 	else
arch/s390/net/bpf_jit_comp.c +1 -1
index 840d8594437d..1a374d021e25 100644
@@ -1826,7 +1826,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *fp)
 	jit.addrs = kvcalloc(fp->len + 1, sizeof(*jit.addrs), GFP_KERNEL);
 	if (jit.addrs == NULL) {
 		fp = orig_fp;
-		goto out;
+		goto free_addrs;
 	}
 	/*
 	 * Three initial passes:
arch/x86/Kconfig +1 -1
index 88fb922c23a0..51341f2e218d 100644
@@ -1400,7 +1400,7 @@ config HIGHMEM4G
 
 config HIGHMEM64G
 	bool "64GB"
-	depends on !M486SX && !M486 && !M586 && !M586TSC && !M586MMX && !MGEODE_LX && !MGEODEGX1 && !MCYRIXIII && !MELAN && !MWINCHIPC6 && !WINCHIP3D && !MK6
+	depends on !M486SX && !M486 && !M586 && !M586TSC && !M586MMX && !MGEODE_LX && !MGEODEGX1 && !MCYRIXIII && !MELAN && !MWINCHIPC6 && !MWINCHIP3D && !MK6
 	select X86_PAE
 	help
 	  Select this if you have a 32-bit processor and more than 4
arch/x86/include/asm/entry-common.h +1 -1
index 14ebd2196569..43184640b579 100644
@@ -25,7 +25,7 @@ static __always_inline void arch_check_user_regs(struct pt_regs *regs)
 		 * For !SMAP hardware we patch out CLAC on entry.
 		 */
 		if (boot_cpu_has(X86_FEATURE_SMAP) ||
-		    (IS_ENABLED(CONFIG_64_BIT) && boot_cpu_has(X86_FEATURE_XENPV)))
+		    (IS_ENABLED(CONFIG_64BIT) && boot_cpu_has(X86_FEATURE_XENPV)))
 			mask |= X86_EFLAGS_AC;
 
 		WARN_ON_ONCE(flags & mask);
arch/x86/kernel/cpu/common.c +1 -0
index 64b805bd6a54..340caa7aebfb 100644
@@ -320,6 +320,7 @@ static __always_inline void setup_smap(struct cpuinfo_x86 *c)
 #ifdef CONFIG_X86_SMAP
 		cr4_set_bits(X86_CR4_SMAP);
 #else
+		clear_cpu_cap(c, X86_FEATURE_SMAP);
 		cr4_clear_bits(X86_CR4_SMAP);
 #endif
 	}
arch/x86/kernel/early-quirks.c +0 -6
index 38837dad46e6..391a4e2b8604 100644
@@ -714,12 +714,6 @@ static struct chipset early_qrk[] __initdata = {
 	 */
 	{ PCI_VENDOR_ID_INTEL, 0x0f00,
 		PCI_CLASS_BRIDGE_HOST, PCI_ANY_ID, 0, force_disable_hpet},
-	{ PCI_VENDOR_ID_INTEL, 0x3e20,
-		PCI_CLASS_BRIDGE_HOST, PCI_ANY_ID, 0, force_disable_hpet},
-	{ PCI_VENDOR_ID_INTEL, 0x3ec4,
-		PCI_CLASS_BRIDGE_HOST, PCI_ANY_ID, 0, force_disable_hpet},
-	{ PCI_VENDOR_ID_INTEL, 0x8a12,
-		PCI_CLASS_BRIDGE_HOST, PCI_ANY_ID, 0, force_disable_hpet},
 	{ PCI_VENDOR_ID_BROADCOM, 0x4331,
 	  PCI_CLASS_NETWORK_OTHER, PCI_ANY_ID, 0, apple_airport_reset},
 	{}
arch/x86/kernel/fpu/signal.c +8 -3
index 445c57c9c539..fa17a27390ab 100644
@@ -379,9 +379,14 @@ static int __fpu_restore_sig(void __user *buf, void __user *buf_fx,
 				     sizeof(fpu->state.fxsave)))
 			return -EFAULT;
 
-		/* Reject invalid MXCSR values. */
-		if (fpu->state.fxsave.mxcsr & ~mxcsr_feature_mask)
-			return -EINVAL;
+		if (IS_ENABLED(CONFIG_X86_64)) {
+			/* Reject invalid MXCSR values. */
+			if (fpu->state.fxsave.mxcsr & ~mxcsr_feature_mask)
+				return -EINVAL;
+		} else {
+			/* Mask invalid bits out for historical reasons (broken hardware). */
+			fpu->state.fxsave.mxcsr &= ~mxcsr_feature_mask;
+		}
 
 		/* Enforce XFEATURE_MASK_FPSSE when XSAVE is enabled */
 		if (use_xsave())
arch/x86/kernel/hpet.c +81 -0

99 lines not on this page · raw message

arch/x86/kernel/sev-shared.c +2 -0
index 9f90f460a28c..bf1033a62e48 100644
@@ -130,6 +130,8 @@ static enum es_result sev_es_ghcb_hv_call(struct ghcb *ghcb,
 		} else {
 			ret = ES_VMM_ERROR;
 		}
+	} else if (ghcb->save.sw_exit_info_1 & 0xffffffff) {
+		ret = ES_VMM_ERROR;
 	} else {
 		ret = ES_OK;
 	}
arch/x86/platform/olpc/olpc.c +1 -1
index ee2beda590d0..1d4a00e767ec 100644
@@ -274,7 +274,7 @@ static struct olpc_ec_driver ec_xo1_driver = {
 
 static struct olpc_ec_driver ec_xo1_5_driver = {
 	.ec_cmd = olpc_xo1_ec_cmd,
-#ifdef CONFIG_OLPC_XO1_5_SCI
+#ifdef CONFIG_OLPC_XO15_SCI
 	/*
 	 * XO-1.5 EC wakeups are available when olpc-xo15-sci driver is
 	 * compiled in
arch/xtensa/include/asm/kmem_layout.h +1 -1
index 7cbf68ca7106..6fc05cba61a2 100644
@@ -78,7 +78,7 @@
 #endif
 #define XCHAL_KIO_SIZE			0x10000000
 
-#if (!XCHAL_HAVE_PTP_MMU || XCHAL_HAVE_SPANNING_WAY) && defined(CONFIG_OF)
+#if (!XCHAL_HAVE_PTP_MMU || XCHAL_HAVE_SPANNING_WAY) && defined(CONFIG_USE_OF)
 #define XCHAL_KIO_PADDR			xtensa_get_kio_paddr()
 #ifndef __ASSEMBLY__
 extern unsigned long xtensa_kio_paddr;
arch/xtensa/kernel/irq.c +1 -1
index a48bf2d10ac2..80cc9770a8d2 100644
@@ -145,7 +145,7 @@ unsigned xtensa_get_ext_irq_no(unsigned irq)
 
 void __init init_IRQ(void)
 {
-#ifdef CONFIG_OF
+#ifdef CONFIG_USE_OF
 	irqchip_init();
 #else
 #ifdef CONFIG_HAVE_SMP
arch/xtensa/kernel/setup.c +6 -6
index ed184106e4cf..ee9082a142fe 100644
@@ -63,7 +63,7 @@ extern unsigned long initrd_end;
 extern int initrd_below_start_ok;
 #endif
 
-#ifdef CONFIG_OF
+#ifdef CONFIG_USE_OF
 void *dtb_start = __dtb_start;
 #endif
 
@@ -125,7 +125,7 @@ __tagtable(BP_TAG_INITRD, parse_tag_initrd);
 
 #endif /* CONFIG_BLK_DEV_INITRD */
 
-#ifdef CONFIG_OF
+#ifdef CONFIG_USE_OF
 
 static int __init parse_tag_fdt(const bp_tag_t *tag)
 {
@@ -135,7 +135,7 @@ static int __init parse_tag_fdt(const bp_tag_t *tag)
 
 __tagtable(BP_TAG_FDT, parse_tag_fdt);
 
-#endif /* CONFIG_OF */
+#endif /* CONFIG_USE_OF */
 
 static int __init parse_tag_cmdline(const bp_tag_t* tag)
 {
@@ -183,7 +183,7 @@ static int __init parse_bootparam(const bp_tag_t *tag)
 }
 #endif
 
-#ifdef CONFIG_OF
+#ifdef CONFIG_USE_OF
 
 #if !XCHAL_HAVE_PTP_MMU || XCHAL_HAVE_SPANNING_WAY
 unsigned long xtensa_kio_paddr = XCHAL_KIO_DEFAULT_PADDR;
@@ -232,7 +232,7 @@ void __init early_init_devtree(void *params)
 		strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE);
 }
 
-#endif /* CONFIG_OF */
+#endif /* CONFIG_USE_OF */
 
 /*
  * Initialize architecture. (Early stage)
@@ -253,7 +253,7 @@ void __init init_arch(bp_tag_t *bp_start)
 	if (bp_start)
 		parse_bootparam(bp_start);
 
-#ifdef CONFIG_OF
+#ifdef CONFIG_USE_OF
 	early_init_devtree(dtb_start);
 #endif
 
arch/xtensa/mm/mmu.c +1 -1
index 7e4d97dc8bd8..38acda4f04e8 100644
@@ -101,7 +101,7 @@ void init_mmu(void)
 
 void init_kio(void)
 {
-#if XCHAL_HAVE_PTP_MMU && XCHAL_HAVE_SPANNING_WAY && defined(CONFIG_OF)
+#if XCHAL_HAVE_PTP_MMU && XCHAL_HAVE_SPANNING_WAY && defined(CONFIG_USE_OF)
 	/*
 	 * Update the IO area mapping in case xtensa_kio_paddr has changed
 	 */
drivers/bus/ti-sysc.c +4 -0
index 148a4dd8cb9a..418ada474a85 100644
@@ -1468,6 +1468,9 @@ static const struct sysc_revision_quirk sysc_revision_quirks[] = {
 	/* Quirks that need to be set based on detected module */
 	SYSC_QUIRK("aess", 0, 0, 0x10, -ENODEV, 0x40000000, 0xffffffff,
 		   SYSC_MODULE_QUIRK_AESS),
+	/* Errata i893 handling for dra7 dcan1 and 2 */
+	SYSC_QUIRK("dcan", 0x4ae3c000, 0x20, -ENODEV, -ENODEV, 0xa3170504, 0xffffffff,
+		   SYSC_QUIRK_CLKDM_NOAUTO),
 	SYSC_QUIRK("dcan", 0x48480000, 0x20, -ENODEV, -ENODEV, 0xa3170504, 0xffffffff,
 		   SYSC_QUIRK_CLKDM_NOAUTO),
 	SYSC_QUIRK("dss", 0x4832a000, 0, 0x10, 0x14, 0x00000020, 0xffffffff,
@@ -2955,6 +2958,7 @@ static int sysc_init_soc(struct sysc *ddata)
 			break;
 		case SOC_AM3:
 			sysc_add_disabled(0x48310000);  /* rng */
+			break;
 		default:
 			break;
 		}
drivers/gpu/drm/amd/amdgpu/amdgpu.h +1 -0
index 177a663a6a69..a1c5bd2859fc 100644
@@ -1082,6 +1082,7 @@ struct amdgpu_device {
 
 	bool                            no_hw_access;
 	struct pci_saved_state          *pci_state;
+	pci_channel_state_t		pci_channel_state;
 
 	struct amdgpu_reset_control     *reset_cntl;
 };
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +1 -0
index 4fb15750b9bb..b18c0697356c 100644
@@ -563,6 +563,7 @@ kfd_mem_dmaunmap_userptr(struct kgd_mem *mem,
 
 	dma_unmap_sgtable(adev->dev, ttm->sg, direction, 0);
 	sg_free_table(ttm->sg);
+	kfree(ttm->sg);
 	ttm->sg = NULL;
 }
 
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +6 -0
index d3247a5cceb4..d60096b3b2c2 100644
@@ -5329,6 +5329,8 @@ pci_ers_result_t amdgpu_pci_error_detected(struct pci_dev *pdev, pci_channel_sta
 		return PCI_ERS_RESULT_DISCONNECT;
 	}
 
+	adev->pci_channel_state = state;
+
 	switch (state) {
 	case pci_channel_io_normal:
 		return PCI_ERS_RESULT_CAN_RECOVER;
@@ -5471,6 +5473,10 @@ void amdgpu_pci_resume(struct pci_dev *pdev)
 
 	DRM_INFO("PCI error: resume callback!!\n");
 
+	/* Only continue execution for the case of pci_channel_io_frozen */
+	if (adev->pci_channel_state != pci_channel_io_frozen)
+		return;
+
 	for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
 		struct amdgpu_ring *ring = adev->rings[i];
 
drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c +12 -2
index b4ced45301be..1795d448c700 100644
@@ -31,6 +31,8 @@
 /* delay 0.1 second to enable gfx off feature */
 #define GFX_OFF_DELAY_ENABLE         msecs_to_jiffies(100)
 
+#define GFX_OFF_NO_DELAY 0
+
 /*
  * GPU GFX IP block helpers function.
  */
@@ -558,6 +560,8 @@ int amdgpu_gfx_enable_kcq(struct amdgpu_device *adev)
 
 void amdgpu_gfx_off_ctrl(struct amdgpu_device *adev, bool enable)
 {
+	unsigned long delay = GFX_OFF_DELAY_ENABLE;
+
 	if (!(adev->pm.pp_feature & PP_GFXOFF_MASK))
 		return;
 
@@ -573,8 +577,14 @@ void amdgpu_gfx_off_ctrl(struct amdgpu_device *adev, bool enable)
 
 		adev->gfx.gfx_off_req_count--;
 
-		if (adev->gfx.gfx_off_req_count == 0 && !adev->gfx.gfx_off_state)
-			schedule_delayed_work(&adev->gfx.gfx_off_delay_work, GFX_OFF_DELAY_ENABLE);
+		if (adev->gfx.gfx_off_req_count == 0 &&
+		    !adev->gfx.gfx_off_state) {
+			/* If going to s2idle, no need to wait */
+			if (adev->in_s0ix)
+				delay = GFX_OFF_NO_DELAY;
+			schedule_delayed_work(&adev->gfx.gfx_off_delay_work,
+					      delay);
+		}
 	} else {
 		if (adev->gfx.gfx_off_req_count == 0) {
 			cancel_delayed_work_sync(&adev->gfx.gfx_off_delay_work);
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_link_encoder.h +1 -0
index d8b22618b79e..c337588231ff 100644
@@ -118,6 +118,7 @@ struct dcn10_link_enc_registers {
 	uint32_t RDPCSTX_PHY_CNTL4;
 	uint32_t RDPCSTX_PHY_CNTL5;
 	uint32_t RDPCSTX_PHY_CNTL6;
+	uint32_t RDPCSPIPE_PHY_CNTL6;
 	uint32_t RDPCSTX_PHY_CNTL7;
 	uint32_t RDPCSTX_PHY_CNTL8;
 	uint32_t RDPCSTX_PHY_CNTL9;
drivers/gpu/drm/amd/display/dc/dcn31/dcn31_dio_link_encoder.c +64 -2

87 lines not on this page · raw message

drivers/gpu/drm/amd/display/dc/dcn31/dcn31_dio_link_encoder.h +13 -1
index 32d146312838..3454f1e7c1f1 100644
@@ -69,6 +69,7 @@
 	SRI(RDPCSTX_PHY_CNTL4, RDPCSTX, id), \
 	SRI(RDPCSTX_PHY_CNTL5, RDPCSTX, id), \
 	SRI(RDPCSTX_PHY_CNTL6, RDPCSTX, id), \
+	SRI(RDPCSPIPE_PHY_CNTL6, RDPCSPIPE, id), \
 	SRI(RDPCSTX_PHY_CNTL7, RDPCSTX, id), \
 	SRI(RDPCSTX_PHY_CNTL8, RDPCSTX, id), \
 	SRI(RDPCSTX_PHY_CNTL9, RDPCSTX, id), \
@@ -115,7 +116,9 @@
 	LE_SF(RDPCSTX0_RDPCSTX_PHY_CNTL6, RDPCS_PHY_DP_TX2_MPLL_EN, mask_sh),\
 	LE_SF(RDPCSTX0_RDPCSTX_PHY_CNTL6, RDPCS_PHY_DP_TX3_MPLL_EN, mask_sh),\
 	LE_SF(RDPCSTX0_RDPCSTX_PHY_CNTL6, RDPCS_PHY_DPALT_DP4, mask_sh),\
-	LE_SF(RDPCSTX0_RDPCSTX_PHY_CNTL6, RDPCS_PHY_DPALT_DISABLE, mask_sh),\
+	LE_SF(RDPCSPIPE0_RDPCSPIPE_PHY_CNTL6, RDPCS_PHY_DPALT_DP4, mask_sh),\
+	LE_SF(RDPCSPIPE0_RDPCSPIPE_PHY_CNTL6, RDPCS_PHY_DPALT_DISABLE, mask_sh),\
+	LE_SF(RDPCSPIPE0_RDPCSPIPE_PHY_CNTL6, RDPCS_PHY_DPALT_DISABLE_ACK, mask_sh),\
 	LE_SF(RDPCSTX0_RDPCSTX_PHY_CNTL7, RDPCS_PHY_DP_MPLLB_FRACN_QUOT, mask_sh),\
 	LE_SF(RDPCSTX0_RDPCSTX_PHY_CNTL7, RDPCS_PHY_DP_MPLLB_FRACN_DEN, mask_sh),\
 	LE_SF(RDPCSTX0_RDPCSTX_PHY_CNTL8, RDPCS_PHY_DP_MPLLB_SSC_PEAK, mask_sh),\
@@ -243,4 +246,13 @@ void dcn31_link_encoder_disable_output(
 	struct link_encoder *enc,
 	enum signal_type signal);
 
+/*
+ * Check whether USB-C DP Alt mode is disabled
+ */
+bool dcn31_link_encoder_is_in_alt_mode(
+	struct link_encoder *enc);
+
+void dcn31_link_encoder_get_max_link_cap(struct link_encoder *enc,
+	struct dc_link_settings *link_settings);
+
 #endif /* __DC_LINK_ENCODER__DCN31_H__ */
drivers/gpu/drm/amd/display/dc/dcn31/dcn31_resource.c +7 -1
index cd3248dc31d8..7ea362a864c4 100644
@@ -928,7 +928,7 @@ static const struct dc_debug_options debug_defaults_drv = {
 	.disable_dcc = DCC_ENABLE,
 	.vsr_support = true,
 	.performance_trace = false,
-	.max_downscale_src_width = 7680,/*upto 8K*/
+	.max_downscale_src_width = 3840,/*upto 4K*/
 	.disable_pplib_wm_range = false,
 	.scl_reset_length10 = true,
 	.sanity_checks = false,
@@ -1284,6 +1284,12 @@ static struct stream_encoder *dcn31_stream_encoder_create(
 	if (!enc1 || !vpg || !afmt)
 		return NULL;
 
+	if (ctx->asic_id.chip_family == FAMILY_YELLOW_CARP &&
+			ctx->asic_id.hw_internal_rev == YELLOW_CARP_B0) {
+		if ((eng_id == ENGINE_ID_DIGC) || (eng_id == ENGINE_ID_DIGD))
+			eng_id = eng_id + 3; // For B0 only. C->F, D->G.
+	}
+
 	dcn30_dio_stream_encoder_construct(enc1, ctx, ctx->dc_bios,
 					eng_id, vpg, afmt,
 					&stream_enc_regs[eng_id],
drivers/gpu/drm/amd/display/include/dal_asic_id.h +1 -1
index 381c17caace1..5adc471bef57 100644
@@ -227,7 +227,7 @@ enum {
 #define FAMILY_YELLOW_CARP                     146
 
 #define YELLOW_CARP_A0 0x01
-#define YELLOW_CARP_B0 0x02		// TODO: DCN31 - update with correct B0 ID
+#define YELLOW_CARP_B0 0x1A
 #define YELLOW_CARP_UNKNOWN 0xFF
 
 #ifndef ASICREV_IS_YELLOW_CARP
drivers/gpu/drm/amd/include/asic_reg/dpcs/dpcs_4_2_0_offset.h +27 -0
index 92caf8441d1e..01a56556cde1 100644
@@ -11932,5 +11932,32 @@
 #define ixDPCSSYS_CR4_RAWLANEX_DIG_PCS_XF_RX_OVRD_OUT_2                                                0xe0c7
 #define ixDPCSSYS_CR4_RAWLANEX_DIG_PCS_XF_TX_OVRD_IN_2                                                 0xe0c8
 
+//RDPCSPIPE0_RDPCSPIPE_PHY_CNTL6
+#define RDPCSPIPE0_RDPCSPIPE_PHY_CNTL6__RDPCS_PHY_DPALT_DP4__SHIFT                                            0x10
+#define RDPCSPIPE0_RDPCSPIPE_PHY_CNTL6__RDPCS_PHY_DPALT_DISABLE__SHIFT                                        0x11
+#define RDPCSPIPE0_RDPCSPIPE_PHY_CNTL6__RDPCS_PHY_DPALT_DISABLE_ACK__SHIFT                                    0x12
+#define RDPCSPIPE0_RDPCSPIPE_PHY_CNTL6__RDPCS_PHY_DPALT_DP4_MASK                                              0x00010000L
+#define RDPCSPIPE0_RDPCSPIPE_PHY_CNTL6__RDPCS_PHY_DPALT_DISABLE_MASK                                          0x00020000L
+#define RDPCSPIPE0_RDPCSPIPE_PHY_CNTL6__RDPCS_PHY_DPALT_DISABLE_ACK_MASK                                      0x00040000L
+
+//RDPCSPIPE1_RDPCSPIPE_PHY_CNTL6
+#define RDPCSPIPE1_RDPCSPIPE_PHY_CNTL6__RDPCS_PHY_DPALT_DP4__SHIFT                                            0x10
+#define RDPCSPIPE1_RDPCSPIPE_PHY_CNTL6__RDPCS_PHY_DPALT_DISABLE__SHIFT                                        0x11
+#define RDPCSPIPE1_RDPCSPIPE_PHY_CNTL6__RDPCS_PHY_DPALT_DISABLE_ACK__SHIFT                                    0x12
+#define RDPCSPIPE1_RDPCSPIPE_PHY_CNTL6__RDPCS_PHY_DPALT_DP4_MASK                                              0x00010000L
+#define RDPCSPIPE1_RDPCSPIPE_PHY_CNTL6__RDPCS_PHY_DPALT_DISABLE_MASK                                          0x00020000L
+#define RDPCSPIPE1_RDPCSPIPE_PHY_CNTL6__RDPCS_PHY_DPALT_DISABLE_ACK_MASK                                      0x00040000L
+
+//[Note] Hack. RDPCSPIPE only has 2 instances.
+#define regRDPCSPIPE0_RDPCSPIPE_PHY_CNTL6                                                              0x2d73
+#define regRDPCSPIPE0_RDPCSPIPE_PHY_CNTL6_BASE_IDX                                                     2
+#define regRDPCSPIPE1_RDPCSPIPE_PHY_CNTL6                                                              0x2e4b
+#define regRDPCSPIPE1_RDPCSPIPE_PHY_CNTL6_BASE_IDX                                                     2
+#define regRDPCSPIPE2_RDPCSPIPE_PHY_CNTL6                                                              0x2d73
+#define regRDPCSPIPE2_RDPCSPIPE_PHY_CNTL6_BASE_IDX                                                     2
+#define regRDPCSPIPE3_RDPCSPIPE_PHY_CNTL6                                                              0x2e4b
+#define regRDPCSPIPE3_RDPCSPIPE_PHY_CNTL6_BASE_IDX                                                     2
+#define regRDPCSPIPE4_RDPCSPIPE_PHY_CNTL6                                                              0x2d73
+#define regRDPCSPIPE4_RDPCSPIPE_PHY_CNTL6_BASE_IDX                                                     2
 
 #endif
drivers/gpu/drm/i915/display/icl_dsi.c +48 -0

87 lines not on this page · raw message

drivers/gpu/drm/i915/display/intel_audio.c +3 -2
index 5f4f316b3ab5..4e4429535f9e 100644
@@ -1308,8 +1308,9 @@ static void i915_audio_component_init(struct drm_i915_private *dev_priv)
 		else
 			aud_freq = aud_freq_init;
 
-		/* use BIOS provided value for TGL unless it is a known bad value */
-		if (IS_TIGERLAKE(dev_priv) && aud_freq_init != AUD_FREQ_TGL_BROKEN)
+		/* use BIOS provided value for TGL and RKL unless it is a known bad value */
+		if ((IS_TIGERLAKE(dev_priv) || IS_ROCKETLAKE(dev_priv)) &&
+		    aud_freq_init != AUD_FREQ_TGL_BROKEN)
 			aud_freq = aud_freq_init;
 
 		drm_dbg_kms(&dev_priv->drm, "use AUD_FREQ_CNTRL of 0x%x (init value 0x%x)\n",
drivers/gpu/drm/i915/display/intel_bios.c +16 -6
index aa667fa71158..106f696e50a0 100644
@@ -451,13 +451,23 @@ parse_lfp_backlight(struct drm_i915_private *i915,
 	}
 
 	i915->vbt.backlight.type = INTEL_BACKLIGHT_DISPLAY_DDI;
-	if (bdb->version >= 191 &&
-	    get_blocksize(backlight_data) >= sizeof(*backlight_data)) {
-		const struct lfp_backlight_control_method *method;
+	if (bdb->version >= 191) {
+		size_t exp_size;
 
-		method = &backlight_data->backlight_control[panel_type];
-		i915->vbt.backlight.type = method->type;
-		i915->vbt.backlight.controller = method->controller;
+		if (bdb->version >= 236)
+			exp_size = sizeof(struct bdb_lfp_backlight_data);
+		else if (bdb->version >= 234)
+			exp_size = EXP_BDB_LFP_BL_DATA_SIZE_REV_234;
+		else
+			exp_size = EXP_BDB_LFP_BL_DATA_SIZE_REV_191;
+
+		if (get_blocksize(backlight_data) >= exp_size) {
+			const struct lfp_backlight_control_method *method;
+
+			method = &backlight_data->backlight_control[panel_type];
+			i915->vbt.backlight.type = method->type;
+			i915->vbt.backlight.controller = method->controller;
+		}
 	}
 
 	i915->vbt.backlight.pwm_freq_hz = entry->pwm_freq_hz;
drivers/gpu/drm/i915/display/intel_ddi.c +7 -1
index 00dade49665b..89a109f65f38 100644
@@ -3899,7 +3899,13 @@ void hsw_ddi_get_config(struct intel_encoder *encoder,
 static void intel_ddi_sync_state(struct intel_encoder *encoder,
 				 const struct intel_crtc_state *crtc_state)
 {
-	if (intel_crtc_has_dp_encoder(crtc_state))
+	struct drm_i915_private *i915 = to_i915(encoder->base.dev);
+	enum phy phy = intel_port_to_phy(i915, encoder->port);
+
+	if (intel_phy_is_tc(i915, phy))
+		intel_tc_port_sanitize(enc_to_dig_port(encoder));
+
+	if (crtc_state && intel_crtc_has_dp_encoder(crtc_state))
 		intel_dp_sync_state(encoder, crtc_state);
 }
 
drivers/gpu/drm/i915/display/intel_display.c +5 -15
index 0a8a2395c8ac..bb1d2b19be15 100644
@@ -12933,18 +12933,16 @@ static void intel_modeset_readout_hw_state(struct drm_device *dev)
 	readout_plane_state(dev_priv);
 
 	for_each_intel_encoder(dev, encoder) {
+		struct intel_crtc_state *crtc_state = NULL;
+
 		pipe = 0;
 
 		if (encoder->get_hw_state(encoder, &pipe)) {
-			struct intel_crtc_state *crtc_state;
-
 			crtc = intel_get_crtc_for_pipe(dev_priv, pipe);
 			crtc_state = to_intel_crtc_state(crtc->base.state);
 
 			encoder->base.crtc = &crtc->base;
 			intel_encoder_get_config(encoder, crtc_state);
-			if (encoder->sync_state)
-				encoder->sync_state(encoder, crtc_state);
 
 			/* read out to slave crtc as well for bigjoiner */
 			if (crtc_state->bigjoiner) {
@@ -12959,6 +12957,9 @@ static void intel_modeset_readout_hw_state(struct drm_device *dev)
 			encoder->base.crtc = NULL;
 		}
 
+		if (encoder->sync_state)
+			encoder->sync_state(encoder, crtc_state);
+
 		drm_dbg_kms(&dev_priv->drm,
 			    "[ENCODER:%d:%s] hw state readout: %s, pipe %c\n",
 			    encoder->base.base.id, encoder->base.name,
@@ -13241,17 +13242,6 @@ intel_modeset_setup_hw_state(struct drm_device *dev,
 	intel_modeset_readout_hw_state(dev);
 
 	/* HW state is read out, now we need to sanitize this mess. */
-
-	/* Sanitize the TypeC port mode upfront, encoders depend on this */
-	for_each_intel_encoder(dev, encoder) {
-		enum phy phy = intel_port_to_phy(dev_priv, encoder->port);
-
-		/* We need to sanitize only the MST primary port. */
-		if (encoder->type != INTEL_OUTPUT_DP_MST &&
-		    intel_phy_is_tc(dev_priv, phy))
-			intel_tc_port_sanitize(enc_to_dig_port(encoder));
-	}
-
 	get_encoder_power_domains(dev_priv);
 
 	if (HAS_PCH_IBX(dev_priv))
drivers/gpu/drm/i915/display/intel_vbt_defs.h +5 -0
index dbe24d7e7375..cf1ffe4a0e46 100644
@@ -814,6 +814,11 @@ struct lfp_brightness_level {
 	u16 reserved;
 } __packed;
 
+#define EXP_BDB_LFP_BL_DATA_SIZE_REV_191 \
+	offsetof(struct bdb_lfp_backlight_data, brightness_level)
+#define EXP_BDB_LFP_BL_DATA_SIZE_REV_234 \
+	offsetof(struct bdb_lfp_backlight_data, brightness_precision_bits)
+
 struct bdb_lfp_backlight_data {
 	u8 entry_size;
 	struct lfp_backlight_data_entry data[16];
drivers/gpu/drm/i915/gem/i915_gem_shrinker.c +5 -2
index e382b7f2353b..5ab136ffdeb2 100644
@@ -118,7 +118,7 @@ i915_gem_shrink(struct i915_gem_ww_ctx *ww,
 	intel_wakeref_t wakeref = 0;
 	unsigned long count = 0;
 	unsigned long scanned = 0;
-	int err;
+	int err = 0;
 
 	/* CHV + VTD workaround use stop_machine(); need to trylock vm->mutex */
 	bool trylock_vm = !ww && intel_vm_no_concurrent_access_wa(i915);
@@ -242,12 +242,15 @@ i915_gem_shrink(struct i915_gem_ww_ctx *ww,
 		list_splice_tail(&still_in_list, phase->list);
 		spin_unlock_irqrestore(&i915->mm.obj_lock, flags);
 		if (err)
-			return err;
+			break;
 	}
 
 	if (shrink & I915_SHRINK_BOUND)
 		intel_runtime_pm_put(&i915->runtime_pm, wakeref);
 
+	if (err)
+		return err;
+
 	if (nr_scanned)
 		*nr_scanned += scanned;
 	return count;
drivers/gpu/drm/i915/i915_reg.h +6 -0
index 476bb3b9ad11..5aa5ddefd22d 100644
@@ -8113,6 +8113,7 @@ enum {
 # define CHICKEN3_DGMG_DONE_FIX_DISABLE		(1 << 2)
 
 #define CHICKEN_PAR1_1			_MMIO(0x42080)
+#define  IGNORE_KVMR_PIPE_A		REG_BIT(23)
 #define  KBL_ARB_FILL_SPARE_22		REG_BIT(22)
 #define  DIS_RAM_BYPASS_PSR2_MAN_TRACK	(1 << 16)
 #define  SKL_DE_COMPRESSED_HASH_MODE	(1 << 15)
@@ -8150,6 +8151,11 @@ enum {
 #define  HSW_SPR_STRETCH_MAX_X1		REG_FIELD_PREP(HSW_SPR_STRETCH_MAX_MASK, 3)
 #define  HSW_FBCQ_DIS			(1 << 22)
 #define  BDW_DPRS_MASK_VBLANK_SRD	(1 << 0)
+#define  SKL_PLANE1_STRETCH_MAX_MASK	REG_GENMASK(1, 0)
+#define  SKL_PLANE1_STRETCH_MAX_X8	REG_FIELD_PREP(SKL_PLANE1_STRETCH_MAX_MASK, 0)
+#define  SKL_PLANE1_STRETCH_MAX_X4	REG_FIELD_PREP(SKL_PLANE1_STRETCH_MAX_MASK, 1)
+#define  SKL_PLANE1_STRETCH_MAX_X2	REG_FIELD_PREP(SKL_PLANE1_STRETCH_MAX_MASK, 2)
+#define  SKL_PLANE1_STRETCH_MAX_X1	REG_FIELD_PREP(SKL_PLANE1_STRETCH_MAX_MASK, 3)
 #define CHICKEN_PIPESL_1(pipe) _MMIO_PIPE(pipe, _CHICKEN_PIPESL_1_A, _CHICKEN_PIPESL_1_B)
 
 #define _CHICKEN_TRANS_A	0x420c0
drivers/gpu/drm/i915/intel_pm.c +12 -0
index 45fefa0ed160..28959e67c00e 100644
@@ -76,6 +76,8 @@ struct intel_wm_config {
 
 static void gen9_init_clock_gating(struct drm_i915_private *dev_priv)
 {
+	enum pipe pipe;
+
 	if (HAS_LLC(dev_priv)) {
 		/*
 		 * WaCompressedResourceDisplayNewHashMode:skl,kbl
@@ -89,6 +91,16 @@ static void gen9_init_clock_gating(struct drm_i915_private *dev_priv)
 			   SKL_DE_COMPRESSED_HASH_MODE);
 	}
 
+	for_each_pipe(dev_priv, pipe) {
+		/*
+		 * "Plane N strech max must be programmed to 11b (x1)
+		 *  when Async flips are enabled on that plane."
+		 */
+		if (!IS_GEMINILAKE(dev_priv) && intel_vtd_active())
+			intel_uncore_rmw(&dev_priv->uncore, CHICKEN_PIPESL_1(pipe),
+					 SKL_PLANE1_STRETCH_MAX_MASK, SKL_PLANE1_STRETCH_MAX_X1);
+	}
+
 	/* See Bspec note for PSR2_CTL bit 31, Wa#828:skl,bxt,kbl,cfl */
 	intel_uncore_write(&dev_priv->uncore, CHICKEN_PAR1_1,
 		   intel_uncore_read(&dev_priv->uncore, CHICKEN_PAR1_1) | SKL_EDP_PSR_FIX_RDWRAP);
drivers/gpu/drm/nouveau/dispnv50/crc.c +1 -0
index b8c31b697797..66f32d965c72 100644
@@ -704,6 +704,7 @@ static const struct file_operations nv50_crc_flip_threshold_fops = {
 	.open = nv50_crc_debugfs_flip_threshold_open,
 	.read = seq_read,
 	.write = nv50_crc_debugfs_flip_threshold_set,
+	.release = single_release,
 };
 
 int nv50_head_crc_late_register(struct nv50_head *head)
drivers/gpu/drm/nouveau/dispnv50/head.c +1 -1
index d66f97280282..72099d1e4816 100644
@@ -52,6 +52,7 @@ nv50_head_flush_clr(struct nv50_head *head,
 void
 nv50_head_flush_set_wndw(struct nv50_head *head, struct nv50_head_atom *asyh)
 {
+	if (asyh->set.curs   ) head->func->curs_set(head, asyh);
 	if (asyh->set.olut   ) {
 		asyh->olut.offset = nv50_lut_load(&head->olut,
 						  asyh->olut.buffer,
@@ -67,7 +68,6 @@ nv50_head_flush_set(struct nv50_head *head, struct nv50_head_atom *asyh)
 	if (asyh->set.view   ) head->func->view    (head, asyh);
 	if (asyh->set.mode   ) head->func->mode    (head, asyh);
 	if (asyh->set.core   ) head->func->core_set(head, asyh);
-	if (asyh->set.curs   ) head->func->curs_set(head, asyh);
 	if (asyh->set.base   ) head->func->base    (head, asyh);
 	if (asyh->set.ovly   ) head->func->ovly    (head, asyh);
 	if (asyh->set.dither ) head->func->dither  (head, asyh);
drivers/gpu/drm/nouveau/include/nvif/class.h +2 -0
index c68cc957248e..a582c0cb0cb0 100644
@@ -71,6 +71,7 @@
 #define PASCAL_CHANNEL_GPFIFO_A                       /* cla06f.h */ 0x0000c06f
 #define VOLTA_CHANNEL_GPFIFO_A                        /* clc36f.h */ 0x0000c36f
 #define TURING_CHANNEL_GPFIFO_A                       /* clc36f.h */ 0x0000c46f
+#define AMPERE_CHANNEL_GPFIFO_B                       /* clc36f.h */ 0x0000c76f
 
 #define NV50_DISP                                     /* cl5070.h */ 0x00005070
 #define G82_DISP                                      /* cl5070.h */ 0x00008270
@@ -200,6 +201,7 @@
 #define PASCAL_DMA_COPY_B                                            0x0000c1b5
 #define VOLTA_DMA_COPY_A                                             0x0000c3b5
 #define TURING_DMA_COPY_A                                            0x0000c5b5
+#define AMPERE_DMA_COPY_B                                            0x0000c7b5
 
 #define FERMI_DECOMPRESS                                             0x000090b8
 
drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h +1 -0
index 54fab7cc36c1..64ee82c7c1be 100644
@@ -77,4 +77,5 @@ int gp100_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct
 int gp10b_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
 int gv100_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
 int tu102_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
+int ga102_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
 #endif
drivers/gpu/drm/nouveau/nouveau_bo.c +1 -0
index 6d07e653f82d..c58bcdba2c7a 100644
@@ -844,6 +844,7 @@ nouveau_bo_move_init(struct nouveau_drm *drm)
 			    struct ttm_resource *, struct ttm_resource *);
 		int (*init)(struct nouveau_channel *, u32 handle);
 	} _methods[] = {
+		{  "COPY", 4, 0xc7b5, nve0_bo_move_copy, nve0_bo_move_init },
 		{  "COPY", 4, 0xc5b5, nve0_bo_move_copy, nve0_bo_move_init },
 		{  "GRCE", 0, 0xc5b5, nve0_bo_move_copy, nvc0_bo_move_init },
 		{  "COPY", 4, 0xc3b5, nve0_bo_move_copy, nve0_bo_move_init },
drivers/gpu/drm/nouveau/nouveau_chan.c +4 -2
index 80099ef75702..ea7769135b0d 100644
@@ -250,7 +250,8 @@ static int
 nouveau_channel_ind(struct nouveau_drm *drm, struct nvif_device *device,
 		    u64 runlist, bool priv, struct nouveau_channel **pchan)
 {
-	static const u16 oclasses[] = { TURING_CHANNEL_GPFIFO_A,
+	static const u16 oclasses[] = { AMPERE_CHANNEL_GPFIFO_B,
+					TURING_CHANNEL_GPFIFO_A,
 					VOLTA_CHANNEL_GPFIFO_A,
 					PASCAL_CHANNEL_GPFIFO_A,
 					MAXWELL_CHANNEL_GPFIFO_A,
@@ -386,7 +387,8 @@ nouveau_channel_init(struct nouveau_channel *chan, u32 vram, u32 gart)
 
 	nvif_object_map(&chan->user, NULL, 0);
 
-	if (chan->user.oclass >= FERMI_CHANNEL_GPFIFO) {
+	if (chan->user.oclass >= FERMI_CHANNEL_GPFIFO &&
+	    chan->user.oclass < AMPERE_CHANNEL_GPFIFO_B) {
 		ret = nvif_notify_ctor(&chan->user, "abi16ChanKilled",
 				       nouveau_channel_killed,
 				       true, NV906F_V0_NTFY_KILLED,
drivers/gpu/drm/nouveau/nouveau_debugfs.c +1 -0
index c2bc05eb2e54..1cbe01048b93 100644
@@ -207,6 +207,7 @@ static const struct file_operations nouveau_pstate_fops = {
 	.open = nouveau_debugfs_pstate_open,
 	.read = seq_read,
 	.write = nouveau_debugfs_pstate_set,
+	.release = single_release,
 };
 
 static struct drm_info_list nouveau_debugfs_list[] = {
drivers/gpu/drm/nouveau/nouveau_drm.c +4 -0
index ba4cd5f83725..9b0084e4bbcf 100644
@@ -345,6 +345,9 @@ nouveau_accel_gr_init(struct nouveau_drm *drm)
 	u32 arg0, arg1;
 	int ret;
 
+	if (device->info.family >= NV_DEVICE_INFO_V0_AMPERE)
+		return;
+
 	/* Allocate channel that has access to the graphics engine. */
 	if (device->info.family >= NV_DEVICE_INFO_V0_KEPLER) {
 		arg0 = nvif_fifo_runlist(device, NV_DEVICE_HOST_RUNLIST_ENGINES_GR);
@@ -469,6 +472,7 @@ nouveau_accel_init(struct nouveau_drm *drm)
 		case PASCAL_CHANNEL_GPFIFO_A:
 		case VOLTA_CHANNEL_GPFIFO_A:
 		case TURING_CHANNEL_GPFIFO_A:
+		case AMPERE_CHANNEL_GPFIFO_B:
 			ret = nvc0_fence_create(drm);
 			break;
 		default:
drivers/gpu/drm/nouveau/nouveau_gem.c +1 -3
index 5b27845075a1..8c2ecc282723 100644
@@ -247,10 +247,8 @@ nouveau_gem_new(struct nouveau_cli *cli, u64 size, int align, uint32_t domain,
 	}
 
 	ret = nouveau_bo_init(nvbo, size, align, domain, NULL, NULL);
-	if (ret) {
-		nouveau_bo_ref(NULL, &nvbo);
+	if (ret)
 		return ret;
-	}
 
 	/* we restrict allowed domains on nv50+ to only the types
 	 * that were requested at creation time.  not possibly on
drivers/gpu/drm/nouveau/nv84_fence.c +1 -1
index 7c9c928c3196..c3526a8622e3 100644
@@ -204,7 +204,7 @@ nv84_fence_create(struct nouveau_drm *drm)
 	priv->base.context_new = nv84_fence_context_new;
 	priv->base.context_del = nv84_fence_context_del;
 
-	priv->base.uevent = true;
+	priv->base.uevent = drm->client.device.info.family < NV_DEVICE_INFO_V0_AMPERE;
 
 	mutex_init(&priv->mutex);
 
drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +3 -0
index 93ddf63d1114..ca75c5f6ecaf 100644
@@ -2602,6 +2602,7 @@ nv172_chipset = {
 	.top      = { 0x00000001, ga100_top_new },
 	.disp     = { 0x00000001, ga102_disp_new },
 	.dma      = { 0x00000001, gv100_dma_new },
+	.fifo     = { 0x00000001, ga102_fifo_new },
 };
 
 static const struct nvkm_device_chip
@@ -2622,6 +2623,7 @@ nv174_chipset = {
 	.top      = { 0x00000001, ga100_top_new },
 	.disp     = { 0x00000001, ga102_disp_new },
 	.dma      = { 0x00000001, gv100_dma_new },
+	.fifo     = { 0x00000001, ga102_fifo_new },
 };
 
 static const struct nvkm_device_chip
@@ -2642,6 +2644,7 @@ nv177_chipset = {
 	.top      = { 0x00000001, ga100_top_new },
 	.disp     = { 0x00000001, ga102_disp_new },
 	.dma      = { 0x00000001, gv100_dma_new },
+	.fifo     = { 0x00000001, ga102_fifo_new },
 };
 
 static int
drivers/gpu/drm/nouveau/nvkm/engine/fifo/Kbuild +1 -0
index 3209eb7af65f..5e831d347a95 100644
@@ -18,6 +18,7 @@ nvkm-y += nvkm/engine/fifo/gp100.o
 nvkm-y += nvkm/engine/fifo/gp10b.o
 nvkm-y += nvkm/engine/fifo/gv100.o
 nvkm-y += nvkm/engine/fifo/tu102.o
+nvkm-y += nvkm/engine/fifo/ga102.o
 
 nvkm-y += nvkm/engine/fifo/chan.o
 nvkm-y += nvkm/engine/fifo/channv50.o
drivers/gpu/drm/nouveau/nvkm/engine/fifo/ga102.c new file +311 -0

311 lines not on this page · raw message

drivers/gpu/drm/nouveau/nvkm/subdev/top/ga100.c +4 -3
index 31933f3e5a07..c982d834c8d9 100644
@@ -54,7 +54,7 @@ ga100_top_oneinit(struct nvkm_top *top)
 			info->reset   = (data & 0x0000001f);
 			break;
 		case 2:
-			info->runlist = (data & 0x0000fc00) >> 10;
+			info->runlist = (data & 0x00fffc00);
 			info->engine  = (data & 0x00000003);
 			break;
 		default:
@@ -85,9 +85,10 @@ ga100_top_oneinit(struct nvkm_top *top)
 		}
 
 		nvkm_debug(subdev, "%02x.%d (%8s): addr %06x fault %2d "
-				   "runlist %2d engine %2d reset %2d\n", type, inst,
+				   "runlist %6x engine %2d reset %2d\n", type, inst,
 			   info->type == NVKM_SUBDEV_NR ? "????????" : nvkm_subdev_type[info->type],
-			   info->addr, info->fault, info->runlist, info->engine, info->reset);
+			   info->addr, info->fault, info->runlist < 0 ? 0 : info->runlist,
+			   info->engine, info->reset);
 		info = NULL;
 	}
 
drivers/gpu/drm/panel/panel-abt-y030xx067a.c +2 -2
index 2d8794d495d0..3d8a9ab47cae 100644
@@ -146,8 +146,8 @@ static const struct reg_sequence y030xx067a_init_sequence[] = {
 	{ 0x09, REG09_SUB_BRIGHT_R(0x20) },
 	{ 0x0a, REG0A_SUB_BRIGHT_B(0x20) },
 	{ 0x0b, REG0B_HD_FREERUN | REG0B_VD_FREERUN },
-	{ 0x0c, REG0C_CONTRAST_R(0x10) },
-	{ 0x0d, REG0D_CONTRAST_G(0x10) },
+	{ 0x0c, REG0C_CONTRAST_R(0x00) },
+	{ 0x0d, REG0D_CONTRAST_G(0x00) },
 	{ 0x0e, REG0E_CONTRAST_B(0x10) },
 	{ 0x0f, 0 },
 	{ 0x10, REG10_BRIGHT(0x7f) },
drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c +5 -2
index f75fb157f2ff..016b877051da 100644
@@ -216,11 +216,13 @@ static int sun8i_dw_hdmi_bind(struct device *dev, struct device *master,
 		goto err_disable_clk_tmds;
 	}
 
+	ret = sun8i_hdmi_phy_init(hdmi->phy);
+	if (ret)
+		goto err_disable_clk_tmds;
+
 	drm_encoder_helper_add(encoder, &sun8i_dw_hdmi_encoder_helper_funcs);
 	drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_TMDS);
 
-	sun8i_hdmi_phy_init(hdmi->phy);
-
 	plat_data->mode_valid = hdmi->quirks->mode_valid;
 	plat_data->use_drm_infoframe = hdmi->quirks->use_drm_infoframe;
 	sun8i_hdmi_phy_set_ops(hdmi->phy, plat_data);
@@ -262,6 +264,7 @@ static void sun8i_dw_hdmi_unbind(struct device *dev, struct device *master,
 	struct sun8i_dw_hdmi *hdmi = dev_get_drvdata(dev);
 
 	dw_hdmi_unbind(hdmi->hdmi);
+	sun8i_hdmi_phy_deinit(hdmi->phy);
 	clk_disable_unprepare(hdmi->clk_tmds);
 	reset_control_assert(hdmi->rst_ctrl);
 	gpiod_set_value(hdmi->ddc_en, 0);
drivers/gpu/drm/sun4i/sun8i_dw_hdmi.h +3 -1
index 74f6ed0e2570..bffe1b9cd3dc 100644
@@ -169,6 +169,7 @@ struct sun8i_hdmi_phy {
 	struct clk			*clk_phy;
 	struct clk			*clk_pll0;
 	struct clk			*clk_pll1;
+	struct device			*dev;
 	unsigned int			rcal;
 	struct regmap			*regs;
 	struct reset_control		*rst_phy;
@@ -205,7 +206,8 @@ encoder_to_sun8i_dw_hdmi(struct drm_encoder *encoder)
 
 int sun8i_hdmi_phy_get(struct sun8i_dw_hdmi *hdmi, struct device_node *node);
 
-void sun8i_hdmi_phy_init(struct sun8i_hdmi_phy *phy);
+int sun8i_hdmi_phy_init(struct sun8i_hdmi_phy *phy);
+void sun8i_hdmi_phy_deinit(struct sun8i_hdmi_phy *phy);
 void sun8i_hdmi_phy_set_ops(struct sun8i_hdmi_phy *phy,
 			    struct dw_hdmi_plat_data *plat_data);
 
drivers/gpu/drm/sun4i/sun8i_hdmi_phy.c +53 -44

127 lines not on this page · raw message

drivers/i2c/busses/i2c-mlxcpld.c +2 -2
index 4e0b7c2882ce..015e11c4663f 100644
@@ -49,7 +49,7 @@
 #define MLXCPLD_LPCI2C_NACK_IND		2
 
 #define MLXCPLD_I2C_FREQ_1000KHZ_SET	0x04
-#define MLXCPLD_I2C_FREQ_400KHZ_SET	0x0f
+#define MLXCPLD_I2C_FREQ_400KHZ_SET	0x0c
 #define MLXCPLD_I2C_FREQ_100KHZ_SET	0x42
 
 enum mlxcpld_i2c_frequency {
@@ -495,7 +495,7 @@ mlxcpld_i2c_set_frequency(struct mlxcpld_i2c_priv *priv,
 		return err;
 
 	/* Set frequency only if it is not 100KHz, which is default. */
-	switch ((data->reg & data->mask) >> data->bit) {
+	switch ((regval & data->mask) >> data->bit) {
 	case MLXCPLD_I2C_FREQ_1000KHZ:
 		freq = MLXCPLD_I2C_FREQ_1000KHZ_SET;
 		break;
drivers/i2c/busses/i2c-mt65xx.c +10 -1
index 477480d1de6b..7d4b3eb7077a 100644
@@ -41,6 +41,8 @@
 #define I2C_HANDSHAKE_RST		0x0020
 #define I2C_FIFO_ADDR_CLR		0x0001
 #define I2C_DELAY_LEN			0x0002
+#define I2C_ST_START_CON		0x8001
+#define I2C_FS_START_CON		0x1800
 #define I2C_TIME_CLR_VALUE		0x0000
 #define I2C_TIME_DEFAULT_VALUE		0x0003
 #define I2C_WRRD_TRANAC_VALUE		0x0002
@@ -480,6 +482,7 @@ static void mtk_i2c_init_hw(struct mtk_i2c *i2c)
 {
 	u16 control_reg;
 	u16 intr_stat_reg;
+	u16 ext_conf_val;
 
 	mtk_i2c_writew(i2c, I2C_CHN_CLR_FLAG, OFFSET_START);
 	intr_stat_reg = mtk_i2c_readw(i2c, OFFSET_INTR_STAT);
@@ -518,8 +521,13 @@ static void mtk_i2c_init_hw(struct mtk_i2c *i2c)
 	if (i2c->dev_comp->ltiming_adjust)
 		mtk_i2c_writew(i2c, i2c->ltiming_reg, OFFSET_LTIMING);
 
+	if (i2c->speed_hz <= I2C_MAX_STANDARD_MODE_FREQ)
+		ext_conf_val = I2C_ST_START_CON;
+	else
+		ext_conf_val = I2C_FS_START_CON;
+
 	if (i2c->dev_comp->timing_adjust) {
-		mtk_i2c_writew(i2c, i2c->ac_timing.ext, OFFSET_EXT_CONF);
+		ext_conf_val = i2c->ac_timing.ext;
 		mtk_i2c_writew(i2c, i2c->ac_timing.inter_clk_div,
 			       OFFSET_CLOCK_DIV);
 		mtk_i2c_writew(i2c, I2C_SCL_MIS_COMP_VALUE,
@@ -544,6 +552,7 @@ static void mtk_i2c_init_hw(struct mtk_i2c *i2c)
 				       OFFSET_HS_STA_STO_AC_TIMING);
 		}
 	}
+	mtk_i2c_writew(i2c, ext_conf_val, OFFSET_EXT_CONF);
 
 	/* If use i2c pin from PMIC mt6397 side, need set PATH_DIR first */
 	if (i2c->have_pmic)
drivers/i2c/i2c-core-acpi.c +1 -0
index 6f0aa0ed3241..74925621f239 100644
@@ -422,6 +422,7 @@ static int i2c_acpi_notify(struct notifier_block *nb, unsigned long value,
 			break;
 
 		i2c_acpi_register_device(adapter, adev, &info);
+		put_device(&adapter->dev);
 		break;
 	case ACPI_RECONFIG_DEVICE_REMOVE:
 		if (!acpi_device_enumerated(adev))
drivers/mmc/host/meson-gx-mmc.c +59 -14

113 lines not on this page · raw message

drivers/mmc/host/sdhci-of-at91.c +11 -11
index 5564d7b23e7c..d1a1c548c515 100644
@@ -11,6 +11,7 @@
 #include <linux/delay.h>
 #include <linux/err.h>
 #include <linux/io.h>
+#include <linux/iopoll.h>
 #include <linux/kernel.h>
 #include <linux/mmc/host.h>
 #include <linux/mmc/slot-gpio.h>
@@ -61,7 +62,6 @@ static void sdhci_at91_set_force_card_detect(struct sdhci_host *host)
 static void sdhci_at91_set_clock(struct sdhci_host *host, unsigned int clock)
 {
 	u16 clk;
-	unsigned long timeout;
 
 	host->mmc->actual_clock = 0;
 
@@ -86,16 +86,11 @@ static void sdhci_at91_set_clock(struct sdhci_host *host, unsigned int clock)
 	sdhci_writew(host, clk, SDHCI_CLOCK_CONTROL);
 
 	/* Wait max 20 ms */
-	timeout = 20;
-	while (!((clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL))
-		& SDHCI_CLOCK_INT_STABLE)) {
-		if (timeout == 0) {
-			pr_err("%s: Internal clock never stabilised.\n",
-			       mmc_hostname(host->mmc));
-			return;
-		}
-		timeout--;
-		mdelay(1);
+	if (read_poll_timeout(sdhci_readw, clk, (clk & SDHCI_CLOCK_INT_STABLE),
+			      1000, 20000, false, host, SDHCI_CLOCK_CONTROL)) {
+		pr_err("%s: Internal clock never stabilised.\n",
+		       mmc_hostname(host->mmc));
+		return;
 	}
 
 	clk |= SDHCI_CLOCK_CARD_EN;
@@ -114,6 +109,7 @@ static void sdhci_at91_reset(struct sdhci_host *host, u8 mask)
 {
 	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
 	struct sdhci_at91_priv *priv = sdhci_pltfm_priv(pltfm_host);
+	unsigned int tmp;
 
 	sdhci_reset(host, mask);
 
@@ -126,6 +122,10 @@ static void sdhci_at91_reset(struct sdhci_host *host, u8 mask)
 
 		sdhci_writel(host, calcr | SDMMC_CALCR_ALWYSON | SDMMC_CALCR_EN,
 			     SDMMC_CALCR);
+
+		if (read_poll_timeout(sdhci_readl, tmp, !(tmp & SDMMC_CALCR_EN),
+				      10, 20000, false, host, SDMMC_CALCR))
+			dev_err(mmc_dev(host->mmc), "Failed to calibrate\n");
 	}
 }
 
drivers/net/ethernet/google/gve/gve.h +1 -1
index 1d3188e8e3b3..92dc18a4bcc4 100644
@@ -780,7 +780,7 @@ struct gve_queue_page_list *gve_assign_rx_qpl(struct gve_priv *priv)
 				    gve_num_tx_qpls(priv));
 
 	/* we are out of rx qpls */
-	if (id == priv->qpl_cfg.qpl_map_size)
+	if (id == gve_num_tx_qpls(priv) + gve_num_rx_qpls(priv))
 		return NULL;
 
 	set_bit(id, priv->qpl_cfg.qpl_id_map);
drivers/net/ethernet/google/gve/gve_main.c +29 -16

94 lines not on this page · raw message

drivers/net/ethernet/google/gve/gve_rx.c +7 -1
index bb8261368250..94941d4e4744 100644
@@ -104,8 +104,14 @@ static int gve_prefill_rx_pages(struct gve_rx_ring *rx)
 	if (!rx->data.page_info)
 		return -ENOMEM;
 
-	if (!rx->data.raw_addressing)
+	if (!rx->data.raw_addressing) {
 		rx->data.qpl = gve_assign_rx_qpl(priv);
+		if (!rx->data.qpl) {
+			kvfree(rx->data.page_info);
+			rx->data.page_info = NULL;
+			return -ENOMEM;
+		}
+	}
 	for (i = 0; i < slots; i++) {
 		if (!rx->data.raw_addressing) {
 			struct page *page = rx->data.qpl->pages[i];
drivers/net/ethernet/intel/i40e/i40e_main.c +3 -2
index 1d1f52756a93..5d3d6b1dae7b 100644
@@ -4868,7 +4868,8 @@ static void i40e_clear_interrupt_scheme(struct i40e_pf *pf)
 {
 	int i;
 
-	i40e_free_misc_vector(pf);
+	if (test_bit(__I40E_MISC_IRQ_REQUESTED, pf->state))
+		i40e_free_misc_vector(pf);
 
 	i40e_put_lump(pf->irq_pile, pf->iwarp_base_vector,
 		      I40E_IWARP_IRQ_PILE_ID);
@@ -10110,7 +10111,7 @@ static int i40e_get_capabilities(struct i40e_pf *pf,
 		if (pf->hw.aq.asq_last_status == I40E_AQ_RC_ENOMEM) {
 			/* retry with a larger buffer */
 			buf_len = data_size;
-		} else if (pf->hw.aq.asq_last_status != I40E_AQ_RC_OK) {
+		} else if (pf->hw.aq.asq_last_status != I40E_AQ_RC_OK || err) {
 			dev_info(&pf->pdev->dev,
 				 "capability discovery failed, err %s aq_err %s\n",
 				 i40e_stat_str(&pf->hw, err),
drivers/net/ethernet/intel/iavf/iavf_main.c +0 -1
index 23762a7ef740..cada4e0e40b4 100644
@@ -1965,7 +1965,6 @@ static void iavf_watchdog_task(struct work_struct *work)
 		}
 		adapter->aq_required = 0;
 		adapter->current_op = VIRTCHNL_OP_UNKNOWN;
-		mutex_unlock(&adapter->crit_lock);
 		queue_delayed_work(iavf_wq,
 				   &adapter->watchdog_task,
 				   msecs_to_jiffies(10));
drivers/net/ethernet/mellanox/mlx5/core/en.h +4 -7
index 3f67efbe12fc..dcbdf746be35 100644
@@ -863,6 +863,7 @@ struct mlx5e_priv {
 	struct mlx5e_channel_stats channel_stats[MLX5E_MAX_NUM_CHANNELS];
 	struct mlx5e_channel_stats trap_stats;
 	struct mlx5e_ptp_stats     ptp_stats;
+	u16                        stats_nch;
 	u16                        max_nch;
 	u8                         max_opened_tc;
 	bool                       tx_ptp_opened;
@@ -1156,12 +1157,6 @@ int mlx5e_ethtool_set_pauseparam(struct mlx5e_priv *priv,
 				 struct ethtool_pauseparam *pauseparam);
 
 /* mlx5e generic netdev management API */
-static inline unsigned int
-mlx5e_calc_max_nch(struct mlx5e_priv *priv, const struct mlx5e_profile *profile)
-{
-	return priv->netdev->num_rx_queues / max_t(u8, profile->rq_groups, 1);
-}
-
 static inline bool
 mlx5e_tx_mpwqe_supported(struct mlx5_core_dev *mdev)
 {
@@ -1170,11 +1165,13 @@ mlx5e_tx_mpwqe_supported(struct mlx5_core_dev *mdev)
 }
 
 int mlx5e_priv_init(struct mlx5e_priv *priv,
+		    const struct mlx5e_profile *profile,
 		    struct net_device *netdev,
 		    struct mlx5_core_dev *mdev);
 void mlx5e_priv_cleanup(struct mlx5e_priv *priv);
 struct net_device *
-mlx5e_create_netdev(struct mlx5_core_dev *mdev, unsigned int txqs, unsigned int rxqs);
+mlx5e_create_netdev(struct mlx5_core_dev *mdev, const struct mlx5e_profile *profile,
+		    unsigned int txqs, unsigned int rxqs);
 int mlx5e_attach_netdev(struct mlx5e_priv *priv);
 void mlx5e_detach_netdev(struct mlx5e_priv *priv);
 void mlx5e_destroy_netdev(struct mlx5e_priv *priv);
drivers/net/ethernet/mellanox/mlx5/core/en/hv_vhca_stats.c +3 -3
index ac44bbe95c5c..d290d7276b8d 100644
@@ -35,7 +35,7 @@ static void mlx5e_hv_vhca_fill_stats(struct mlx5e_priv *priv, void *data,
 {
 	int ch, i = 0;
 
-	for (ch = 0; ch < priv->max_nch; ch++) {
+	for (ch = 0; ch < priv->stats_nch; ch++) {
 		void *buf = data + i;
 
 		if (WARN_ON_ONCE(buf +
@@ -51,7 +51,7 @@ static void mlx5e_hv_vhca_fill_stats(struct mlx5e_priv *priv, void *data,
 static int mlx5e_hv_vhca_stats_buf_size(struct mlx5e_priv *priv)
 {
 	return (sizeof(struct mlx5e_hv_vhca_per_ring_stats) *
-		priv->max_nch);
+		priv->stats_nch);
 }
 
 static void mlx5e_hv_vhca_stats_work(struct work_struct *work)
@@ -100,7 +100,7 @@ static void mlx5e_hv_vhca_stats_control(struct mlx5_hv_vhca_agent *agent,
 	sagent = &priv->stats_agent;
 
 	block->version = MLX5_HV_VHCA_STATS_VERSION;
-	block->rings   = priv->max_nch;
+	block->rings   = priv->stats_nch;
 
 	if (!block->command) {
 		cancel_delayed_work_sync(&priv->stats_agent.work);
drivers/net/ethernet/mellanox/mlx5/core/en/ptp.c +1 -2
index efef4adce086..93a8fa31255d 100644
@@ -13,8 +13,6 @@ struct mlx5e_ptp_fs {
 	bool valid;
 };
 
-#define MLX5E_PTP_CHANNEL_IX 0
-
 struct mlx5e_ptp_params {
 	struct mlx5e_params params;
 	struct mlx5e_sq_param txq_sq_param;
@@ -505,6 +503,7 @@ static int mlx5e_init_ptp_rq(struct mlx5e_ptp *c, struct mlx5e_params *params,
 	rq->mdev         = mdev;
 	rq->hw_mtu       = MLX5E_SW2HW_MTU(params, params->sw_mtu);
 	rq->stats        = &c->priv->ptp_stats.rq;
+	rq->ix           = MLX5E_PTP_CHANNEL_IX;
 	rq->ptp_cyc2time = mlx5_rq_ts_translator(mdev);
 	err = mlx5e_rq_set_handlers(rq, params, false);
 	if (err)
drivers/net/ethernet/mellanox/mlx5/core/en/ptp.h +2 -0
index c96668bd701c..a71a32e00ebb 100644
@@ -8,6 +8,8 @@
 #include "en_stats.h"
 #include <linux/ptp_classify.h>
 
+#define MLX5E_PTP_CHANNEL_IX 0
+
 struct mlx5e_ptpsq {
 	struct mlx5e_txqsq       txqsq;
 	struct mlx5e_cq          ts_cq;
drivers/net/ethernet/mellanox/mlx5/core/en_main.c +43 -16

100 lines not on this page · raw message

drivers/net/ethernet/mellanox/mlx5/core/en_rep.c +1 -2
index bf94bcb6fa5d..bec1d344481c 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/mellanox/mlx5/core/en_rx.c +1 -6
index 3c65fd0bcf31..29a6586ef28d 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/mellanox/mlx5/core/en_stats.c +6 -5
index e4f5b6395148..e1dd17019030 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/mellanox/mlx5/core/esw/acl/egress_lgcy.c +8 -4
index 0399a396d166..60a73990017c 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/mellanox/mlx5/core/esw/acl/ingress_lgcy.c +3 -1
index f75b86abaf1c..b1a5199260f6 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c +2 -2
index 620d638e1e8f..1c9de6eddef8 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c +16 -21
index ce696d523493..c009ccc88df4 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/mellanox/mlx5/core/pci_irq.c +5 -4
index 3465b363fc2f..d9345c9ebbff 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/mscc/ocelot_vcap.c +2 -2
index 7945393a0655..99d7376a70a7 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c +5 -0
index ed817011a94a..6924a6aacbd5 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +5 -1
index 86151a817b79..6b2a5e5769e8 100644

Lines of this file are not shown. View the raw message.

drivers/net/pcs/pcs-xpcs.c +36 -9

45 lines not on this page · raw message

drivers/net/phy/mdio_bus.c +7 -0
index ee8313a4ac71..6865d9319197 100644

Lines of this file are not shown. View the raw message.

drivers/net/phy/sfp.c +1 -1
index 34e90216bd2c..ab77a9f439ef 100644

Lines of this file are not shown. View the raw message.

drivers/net/wireless/ath/ath5k/Kconfig +1 -3
index f35cd8de228e..6914b37bb0fb 100644

Lines of this file are not shown. View the raw message.

drivers/net/wireless/ath/ath5k/led.c +6 -4
index 6a2a16856763..33e9928af363 100644

Lines of this file are not shown. View the raw message.

drivers/net/wireless/intel/iwlwifi/mvm/time-event.c +2 -1
index 24b658a3098a..3ae727bc4e94 100644

Lines of this file are not shown. View the raw message.

drivers/net/wireless/intel/iwlwifi/pcie/drv.c +2 -0
index 6f49950a5f6d..be3ad4281353 100644

Lines of this file are not shown. View the raw message.

drivers/of/base.c +1 -0
index 48e941f99558..073ea7cd007b 100644

Lines of this file are not shown. View the raw message.

drivers/pci/controller/pci-hyperv.c +10 -3
index a53bd8728d0d..fc1a29acadbb 100644

Lines of this file are not shown. View the raw message.

drivers/ptp/ptp_pch.c +1 -0
index a17e8cc642c5..8070f3fd98f0 100644

Lines of this file are not shown. View the raw message.

drivers/scsi/libiscsi.c +9 -6
index 4683c183e9d4..5bc91d34df63 100644

Lines of this file are not shown. View the raw message.

drivers/scsi/ufs/ufshcd.c +22 -30

52 lines not on this page · raw message

drivers/scsi/ufs/ufshcd.h +1 -0
index aa95deffb873..6069e37ec983 100644

Lines of this file are not shown. View the raw message.

drivers/soc/qcom/mdt_loader.c +1 -1
index eba7f76f9d61..6034cd8992b0 100644

Lines of this file are not shown. View the raw message.

drivers/soc/qcom/socinfo.c +1 -1
index b2f049faa3df..a6cffd57d3c7 100644

Lines of this file are not shown. View the raw message.

drivers/soc/ti/omap_prm.c +15 -12
index ea64e187854e..f32e1cbbe8c5 100644

Lines of this file are not shown. View the raw message.

drivers/usb/chipidea/ci_hdrc_imx.c +10 -5
index 8b7bc10b6e8b..f1d100671ee6 100644

Lines of this file are not shown. View the raw message.

drivers/usb/class/cdc-acm.c +8 -0
index 5b90d0979c60..8913c58c306e 100644

Lines of this file are not shown. View the raw message.

drivers/usb/class/cdc-wdm.c +3 -3
index 35d5908b5478..fdf79bcf7eb0 100644

Lines of this file are not shown. View the raw message.

drivers/usb/common/Kconfig +1 -2
index 5e8a04e3dd3c..b856622431a7 100644

Lines of this file are not shown. View the raw message.

drivers/usb/gadget/function/f_uac2.c +10 -4
index 37c94031af1e..53cb6b2637a0 100644

Lines of this file are not shown. View the raw message.

drivers/usb/typec/tcpm/tcpci.c +1 -1
index 9858716698df..c15eec9cc460 100644

Lines of this file are not shown. View the raw message.

drivers/usb/typec/tcpm/tcpm.c +1 -0
index 5d05de666597..686b9245d6d6 100644

Lines of this file are not shown. View the raw message.

drivers/usb/typec/tipd/core.c +3 -5
index 21b3ae25c76d..ea4cc0a6e40c 100644

Lines of this file are not shown. View the raw message.

drivers/video/fbdev/Kconfig +3 -2
index d33c5cd684c0..f71668367caf 100644

Lines of this file are not shown. View the raw message.

drivers/video/fbdev/gbefb.c +1 -1
index c5b99a4861e8..6b4d5a7f3e15 100644

Lines of this file are not shown. View the raw message.

drivers/xen/balloon.c +15 -6
index 43ebfe36ac27..3a50f097ed3e 100644

Lines of this file are not shown. View the raw message.

drivers/xen/privcmd.c +4 -3
index 720a7b7abd46..fe8df32bb612 100644

Lines of this file are not shown. View the raw message.

fs/afs/write.c +1 -2
index 2dfe3b3a53d6..f24370f5c774 100644

Lines of this file are not shown. View the raw message.

fs/netfs/read_helper.c +1 -1
index 0b6cd3b8734c..994ec22d4040 100644

Lines of this file are not shown. View the raw message.

fs/nfsd/nfs4xdr.c +11 -8
index 7abeccb975b2..cf030ebe2827 100644

Lines of this file are not shown. View the raw message.

fs/nfsd/nfsctl.c +1 -1
index c2c3d9077dc5..09ae1a0873d0 100644

Lines of this file are not shown. View the raw message.

fs/overlayfs/dir.c +7 -3
index 7c1850adec28..a4ad25f1f797 100644

Lines of this file are not shown. View the raw message.

fs/overlayfs/file.c +14 -1
index d081faa55e83..c88ac571593d 100644

Lines of this file are not shown. View the raw message.

include/net/netfilter/ipv6/nf_defrag_ipv6.h +0 -1
index 0fd8a4159662..ceadf8ba25a4 100644

Lines of this file are not shown. View the raw message.

include/net/netfilter/nf_tables.h +1 -1
index 148f5d8ee5ab..a16171c5fd9e 100644

Lines of this file are not shown. View the raw message.

include/net/netns/netfilter.h +6 -0
index 15e2b13fb0c0..71343b969cd3 100644

Lines of this file are not shown. View the raw message.

include/soc/mscc/ocelot_vcap.h +2 -2
index 25fd525aaf92..4869ebbd438d 100644

Lines of this file are not shown. View the raw message.

kernel/bpf/stackmap.c +2 -1
index 6fbc2abe9c91..2553caf4f74a 100644

Lines of this file are not shown. View the raw message.

net/bridge/br_netlink.c +2 -1
index 8642e56059fb..2abfbd4b8a15 100644

Lines of this file are not shown. View the raw message.

net/core/rtnetlink.c +1 -1
index 662eb1c37f47..10e2a0e4804b 100644

Lines of this file are not shown. View the raw message.

net/dsa/tag_dsa.c +1 -1
index a822355afc90..26c6768b6b0c 100644

Lines of this file are not shown. View the raw message.

net/ipv4/inet_hashtables.c +3 -1
index 80aeaf9e6e16..bfb522e51346 100644

Lines of this file are not shown. View the raw message.

net/ipv4/netfilter/nf_defrag_ipv4.c +9 -21
index 613432a36f0a..e61ea428ea18 100644

Lines of this file are not shown. View the raw message.

net/ipv4/udp.c +2 -1
index 915ea635b2d5..cbc7907f79b8 100644

Lines of this file are not shown. View the raw message.

net/ipv6/inet6_hashtables.c +1 -1
index 55c290d55605..67c9114835c8 100644

Lines of this file are not shown. View the raw message.

net/ipv6/netfilter/nf_conntrack_reasm.c +1 -1
index a0108415275f..5c47be29b9ee 100644

Lines of this file are not shown. View the raw message.

net/ipv6/netfilter/nf_defrag_ipv6_hooks.c +9 -16
index e8a59d8bf2ad..cb4eb1d2c620 100644

Lines of this file are not shown. View the raw message.

net/ipv6/udp.c +2 -1
index 80ae024d13c8..ba77955d75fb 100644

Lines of this file are not shown. View the raw message.

net/netfilter/nf_tables_api.c +64 -27

91 lines not on this page · raw message

net/netfilter/nft_quota.c +1 -1
index 0363f533a42b..c4d1389f7185 100644

Lines of this file are not shown. View the raw message.

net/netlink/af_netlink.c +10 -4
index 24b7cf447bc5..ada47e59647a 100644

Lines of this file are not shown. View the raw message.

net/sched/sch_fifo.c +3 -0
index a579a4131d22..e1040421b797 100644

Lines of this file are not shown. View the raw message.

net/sched/sch_taprio.c +4 -0
index 1ab2fc933a21..b9fd18d98646 100644

Lines of this file are not shown. View the raw message.

net/sunrpc/auth_gss/svcauth_gss.c +1 -1
index 3d685fe328fa..9fd35a60de6c 100644

Lines of this file are not shown. View the raw message.

tools/lib/bpf/libbpf.c +2 -1
index d27e017ebfbe..f1bc09e606cd 100644

Lines of this file are not shown. View the raw message.

tools/lib/bpf/strset.c +1 -0
index 1fb8b49de1d6..ea655318153f 100644

Lines of this file are not shown. View the raw message.

tools/objtool/arch/x86/decode.c +1 -1
index bc821056aba9..0893436cc09f 100644

Lines of this file are not shown. View the raw message.

tools/objtool/special.c +7 -29
index f1428e32a505..83d5f969bcb0 100644

Lines of this file are not shown. View the raw message.

tools/perf/pmu-events/jevents.c +2 -0
index 9604446f8360..8b536117e154 100644

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.