* refs/heads/tmp-261a54f: Revert "soc: qcom: rpmh: Update dirty flag only when data changes" Revert "soc: qcom: rpmh: Invalidate SLEEP and WAKE TCSes before flushing new data" Revert "soc: qcom: rpmh-rsc: Clear active mode configuration for wake TCS" Revert "soc: qcom: rpmh-rsc: Allow using free WAKE TCS for active request" Revert "soc: qcom: rpmh: Dirt can only make you dirtier, not cleaner" Linux 5.4.54 ath9k: Fix regression with Atheros 9271 ath9k: Fix general protection fault in ath9k_hif_usb_rx_cb dm integrity: fix integrity recalculation that is improperly skipped ASoC: topology: fix tlvs in error handling for widget_dmixer ASoC: topology: fix kernel oops on route addition error ASoC: qcom: Drop HAS_DMA dependency to fix link failure ASoC: rt5670: Add new gpio1_is_ext_spk_en quirk and enable it on the Lenovo Miix 2 10 x86, vmlinux.lds: Page-align end of ..page_aligned sections parisc: Add atomic64_set_release() define to avoid CPU soft lockups drm/amd/powerplay: fix a crash when overclocking Vega M drm/amdgpu: Fix NULL dereference in dpm sysfs handlers mmc: sdhci-of-aspeed: Fix clock divider calculation io-mapping: indicate mapping failure khugepaged: fix null-pointer dereference due to race mm: memcg/slab: fix memory leak at non-root kmem_cache destroy mm/memcg: fix refcount error while moving and swapping mm/mmap.c: close race between munmap() and expand_upwards()/downwards() Makefile: Fix GCC_TOOLCHAIN_DIR prefix for Clang cross compilation vt: Reject zero-sized screen buffer size. fbdev: Detect integer underflow at "struct fbcon_ops"->clear_margins. /dev/mem: Add missing memory barriers for devmem_inode serial: 8250_mtk: Fix high-speed baud rates clamping serial: 8250: fix null-ptr-deref in serial8250_start_tx() serial: tegra: fix CREAD handling for PIO staging: comedi: addi_apci_1564: check INSN_CONFIG_DIGITAL_TRIG shift staging: comedi: addi_apci_1500: check INSN_CONFIG_DIGITAL_TRIG shift staging: comedi: ni_6527: fix INSN_CONFIG_DIGITAL_TRIG support staging: comedi: addi_apci_1032: check INSN_CONFIG_DIGITAL_TRIG shift staging: wlan-ng: properly check endpoint types tty: xilinx_uartps: Really fix id assignment iwlwifi: mvm: don't call iwl_mvm_free_inactive_queue() under RCU Revert "cifs: Fix the target file was deleted when rename failed." usb: xhci: Fix ASM2142/ASM3142 DMA addressing usb: xhci-mtk: fix the failure of bandwidth allocation binder: Don't use mmput() from shrinker function. RISC-V: Upgrade smp_mb__after_spinlock() to iorw,iorw drivers/perf: Prevent forced unbinding of PMU drivers asm-generic/mmiowb: Allow mmiowb_set_pending() when preemptible() x86: math-emu: Fix up 'cmp' insn for clang ias arm64: Use test_tsk_thread_flag() for checking TIF_SINGLESTEP drivers/perf: Fix kernel panic when rmmod PMU modules during perf sampling ALSA: hda/realtek - fixup for yet another Intel reference board hwmon: (scmi) Fix potential buffer overflow in scmi_hwmon_probe() platform/x86: asus-wmi: allow BAT1 battery name platform/x86: ISST: Add new PCI device ids hwmon: (nct6775) Accept PECI Calibration as temperature source for NCT6798D drm/amdgpu: fix preemption unit test drm/amdgpu/gfx10: fix race condition for kiq hwmon: (adm1275) Make sure we are reading enough data for different chips usb: cdns3: trace: fix some endian issues usb: cdns3: ep0: fix some endian issues usb: gadget: udc: gr_udc: fix memleak on error handling path in gr_ep_init() usb: dwc3: pci: add support for the Intel Jasper Lake usb: dwc3: pci: add support for the Intel Tiger Lake PCH -H variant Input: elan_i2c - only increment wakeup count on touch Input: synaptics - enable InterTouch for ThinkPad X1E 1st gen dmaengine: ioat setting ioat timeout as module parameter dmaengine: fsl-edma: fix wrong tcd endianness for big-endian cpu hwmon: (aspeed-pwm-tacho) Avoid possible buffer overflow regmap: dev_get_regmap_match(): fix string comparison spi: mediatek: use correct SPI_CFG2_REG MACRO ARM: dts: n900: remove mmc1 card detect gpio Input: add `SW_MACHINE_COVER` dmaengine: tegra210-adma: Fix runtime PM imbalance on error HID: apple: Disable Fn-key key-re-mapping on clone keyboards HID: steam: fixes race in handling device list. HID: alps: support devices with report id 2 HID: i2c-hid: add Mediacom FlexBook edge13 to descriptor override scripts/gdb: fix lx-symbols 'gdb.error' while loading modules scripts/decode_stacktrace: strip basepath from all paths serial: exar: Fix GPIO configuration for Sealevel cards based on XR17V35X geneve: fix an uninitialized value in geneve_changelink() bonding: check return value of register_netdevice() in bond_newlink() i2c: i2c-qcom-geni: Fix DMA transfer race i2c: rcar: always clear ICSAR to avoid side effects enetc: Remove the mdio bus on PF probe bailout nfsd4: fix NULL dereference in nfsd/clients display code Revert "PCI/PM: Assume ports without DLL Link Active train links in 100 ms" net: ethernet: ave: Fix error returns in ave_init ipvs: fix the connection sync failed in some cases qed: suppress false-positives interrupt error messages on HW init qed: suppress "don't support RoCE & iWARP" flooding on HW init netdevsim: fix unbalaced locking in nsim_create() net: dsa: microchip: call phy_remove_link_mode during probe net: hns3: fix error handling for desc filling net: ag71xx: add missed clk_disable_unprepare in error path of probe ionic: fix up filter locks and debug msgs ionic: use offset for ethtool regs data mlxsw: destroy workqueue when trap_register in mlxsw_emad_init bonding: check error value of register_netdevice() immediately net: smc91x: Fix possible memory leak in smc_drv_probe() drm: sun4i: hdmi: Fix inverted HPD result ieee802154: fix one possible memleak in adf7242_probe net: dp83640: fix SIOCSHWTSTAMP to update the struct with actual configuration ASoC: Intel: bytcht_es8316: Add missed put_device() RDMA/mlx5: Use xa_lock_irq when access to SRQ table ax88172a: fix ax88172a_unbind() failures vsock/virtio: annotate 'the_virtio_vsock' RCU pointer hippi: Fix a size used in a 'pci_free_consistent()' in an error handling path fpga: dfl: fix bug in port reset handshake fpga: dfl: pci: reduce the scope of variable 'ret' bnxt_en: Fix completion ring sizing with TPA enabled. bnxt_en: Fix race when modifying pause settings. btrfs: fix page leaks after failure to lock page for delalloc btrfs: fix mount failure caused by race with umount btrfs: fix double free on ulist after backref resolution failure ASoC: rt5670: Correct RT5670_LDO_SEL_MASK ALSA: info: Drop WARN_ON() from buffer NULL sanity check ALSA: hda/realtek: Fixed ALC298 sound bug by adding quirk for Samsung Notebook Pen S uprobes: Change handle_swbp() to send SIGTRAP with si_code=SI_KERNEL, to fix GDB regression btrfs: reloc: clear DEAD_RELOC_TREE bit for orphan roots to prevent runaway balance btrfs: reloc: fix reloc root leak and NULL pointer dereference SUNRPC reverting d03727b248d0 ("NFSv4 fix CLOSE not waiting for direct IO compeletion") drm/amd/display: Check DMCU Exists Before Loading dmabuf: use spinlock to access dmabuf->name ARM: dts: imx6qdl-gw551x: fix audio SSI ARM: dts: imx6qdl-gw551x: Do not use 'simple-audio-card,dai-link' irqdomain/treewide: Keep firmware node unconditionally allocated fuse: fix weird page warning drivers/firmware/psci: Fix memory leakage in alloc_init_cpu_groups() dm: use bio_uninit instead of bio_disassociate_blkg scsi: dh: Add Fujitsu device to devinfo and dh lists scsi: mpt3sas: Fix error returns in BRM_status_show drm/nouveau/i2c/g94-: increase NV_PMGR_DP_AUXCTL_TRANSACTREQ timeout net: sky2: initialize return of gm_phy_read ALSA: hda/hdmi: fix failures at PCM open on Intel ICL and later drivers/net/wan/lapbether: Fixed the value of hard_header_len scsi: mpt3sas: Fix unlock imbalance xtensa: update *pos in cpuinfo_op.next xtensa: fix __sync_fetch_and_{and,or}_4 declarations scsi: scsi_transport_spi: Fix function pointer check mac80211: allow rx of mesh eapol frames with default rx key pinctrl: amd: fix npins for uart0 in kerncz_groups gpio: arizona: put pm_runtime in case of failure gpio: arizona: handle pm_runtime_get_sync failure case soc: qcom: rpmh: Dirt can only make you dirtier, not cleaner ANDROID: build: update ABI definitions ANDROID: update the kernel release format for GKI ANDROID: GKI: update clocksource abi due to upstream fixes needed for VDSO backport UPSTREAM: arm64: arch_timer: Disable the compat vdso for cores affected by ARM64_WORKAROUND_1418040 UPSTREAM: arm64: arch_timer: Allow an workaround descriptor to disable compat vdso UPSTREAM: arm64: Introduce a way to disable the 32bit vdso ANDROID: staging: android: ion: Fix compilation error for ion_trace.h ANDROID: GKI: enable CONFIG_SCSI_UFS_BSG=y ANDROID: Incremental fs: magic number compatible 32-bit ANDROID: kbuild: don't merge .*..compoundliteral in modules ANDROID: KABI updates for db845c (QCOM_COMMAND_DB fixups) ANDROID: soc: qcom: cmd-db: Allow COMMAND_DB driver to be loaded as a module ANDROID: GKI: preserve ABI for struct sock_cgroup_data Revert "genetlink: remove genl_bind" Revert "arm64/alternatives: use subsections for replacement sequences" ANDROID: KABI updates for db845c (USB_EHCI_HCD, USB_EHCI_HCD_PLATFORM and DWC3 fixups) ANDROID: db845c_gki.fragment: Remove DWC3 modules built into GKI ANDROID: db845c_gki.fragment: Remove modules built into GKI ANDROID: power: wakeup_reason: refine wakeup logs ANDROID: power: wakeup_reason: export log_threaded_irq_wakeup_reason Linux 5.4.53 gpio: pca953x: disable regmap locking for automatic address incrementing drm/i915/gvt: Fix two CFL MMIO handling caused by regression. iommu/vt-d: Make Intel SVM code 64-bit only ionic: export features for vlans to use spi: sprd: switch the sequence of setting WDG_LOAD_LOW and _HIGH rxrpc: Fix trace string libceph: don't omit recovery_deletes in target_copy() block: fix get_max_segment_size() overflow on 32bit arch block: fix splitting segments on boundary masks drm/i915/gt: Ignore irq enabling on the virtual engines drm/amdgpu/sdma5: fix wptr overwritten in ->get_wptr() genirq/affinity: Handle affinity setting on inactive interrupts correctly sched/fair: handle case of task_h_load() returning 0 sched: Fix unreliable rseq cpu_id for new tasks arm64: compat: Ensure upper 32 bits of x0 are zero on syscall return arm64: ptrace: Consistently use pseudo-singlestep exceptions arm64: ptrace: Override SPSR.SS when single-stepping is enabled thermal/drivers/cpufreq_cooling: Fix wrong frequency converted from power thermal: int3403_thermal: Downgrade error message misc: atmel-ssc: lock with mutex instead of spinlock dmaengine: fsl-edma-common: correct DSIZE_32BYTE dmaengine: mcf-edma: Fix NULL pointer exception in mcf_edma_tx_handler dmaengine: fsl-edma: Fix NULL pointer exception in fsl_edma_tx_handler intel_th: Fix a NULL dereference when hub driver is not loaded intel_th: pci: Add Emmitsburg PCH support intel_th: pci: Add Tiger Lake PCH-H support intel_th: pci: Add Jasper Lake CPU support powerpc/pseries/svm: Fix incorrect check for shared_lppaca_size powerpc/book3s64/pkeys: Fix pkey_access_permitted() for execute disable pkey hwmon: (emc2103) fix unable to change fan pwm1_enable attribute riscv: use 16KB kernel stack on 64-bit timer: Fix wheel index calculation on last level timer: Prevent base->clk from moving backward scsi: megaraid_sas: Remove undefined ENABLE_IRQ_POLL macro uio_pdrv_genirq: fix use without device tree and no interrupt uio_pdrv_genirq: Remove warning when irq is not specified Input: elan_i2c - add more hardware ID for Lenovo laptops Input: i8042 - add Lenovo XiaoXin Air 12 to i8042 nomux list mei: bus: don't clean driver pointer Revert "zram: convert remaining CLASS_ATTR() to CLASS_ATTR_RO()" fuse: Fix parameter for FS_IOC_{GET,SET}FLAGS fuse: use ->reconfigure() instead of ->remount_fs() fuse: ignore 'data' argument of mount(..., MS_REMOUNT) ovl: fix unneeded call to ovl_change_flags() ovl: relax WARN_ON() when decoding lower directory file handle ovl: inode reference leak in ovl_is_inuse true case. ovl: fix regression with re-formatted lower squashfs serial: mxs-auart: add missed iounmap() in probe failure and remove virtio: virtio_console: add missing MODULE_DEVICE_TABLE() for rproc serial Revert "tty: xilinx_uartps: Fix missing id assignment to the console" virt: vbox: Fix guest capabilities mask check virt: vbox: Fix VBGL_IOCTL_VMMDEV_REQUEST_BIG and _LOG req numbers to match upstream USB: serial: option: add Quectel EG95 LTE modem USB: serial: option: add GosunCn GM500 series USB: serial: ch341: add new Product ID for CH340 USB: serial: cypress_m8: enable Simply Automated UPB PIM USB: serial: iuu_phoenix: fix memory corruption usb: gadget: function: fix missing spinlock in f_uac1_legacy usb: chipidea: core: add wakeup support for extcon usb: dwc2: Fix shutdown callback in platform USB: c67x00: fix use after free in c67x00_giveback_urb ALSA: hda/realtek - Enable Speaker for ASUS UX563 ALSA: hda/realtek - Enable Speaker for ASUS UX533 and UX534 ALSA: hda/realtek: Enable headset mic of Acer TravelMate B311R-31 with ALC256 ALSA: hda/realtek: enable headset mic of ASUS ROG Zephyrus G14(G401) series with ALC289 ALSA: hda/realtek - change to suitable link model for ASUS platform ALSA: usb-audio: Fix race against the error recovery URB submission ALSA: line6: Sync the pending work cancel at disconnection ALSA: line6: Perform sanity check for each URB creation HID: quirks: Ignore Simply Automated UPB PIM HID: quirks: Always poll Obins Anne Pro 2 keyboard HID: magicmouse: do not set up autorepeat HID: logitech-hidpp: avoid repeated "multiplier = " log messages slimbus: core: Fix mismatch in of_node_get/put clk: qcom: gcc: Add missing UFS clocks for SM8150 clk: qcom: gcc: Add GPU and NPU clocks for SM8150 mtd: rawnand: oxnas: Release all devices in the _remove() path mtd: rawnand: oxnas: Unregister all devices on error mtd: rawnand: oxnas: Keep track of registered devices mtd: rawnand: brcmnand: fix CS0 layout mtd: rawnand: brcmnand: correctly verify erased pages mtd: rawnand: timings: Fix default tR_max and tCCS_min timings mtd: rawnand: marvell: Fix probe error path mtd: rawnand: marvell: Use nand_cleanup() when the device is not yet registered mtd: rawnand: marvell: Fix the condition on a return code RDMA/mlx5: Verify that QP is created with RQ or SQ soc: qcom: rpmh-rsc: Allow using free WAKE TCS for active request soc: qcom: rpmh-rsc: Clear active mode configuration for wake TCS soc: qcom: rpmh: Invalidate SLEEP and WAKE TCSes before flushing new data soc: qcom: rpmh: Update dirty flag only when data changes perf stat: Zero all the 'ena' and 'run' array slot stats for interval mode PCI/PM: Call .bridge_d3() hook only if non-NULL habanalabs: Align protection bits configuration of all TPCs apparmor: ensure that dfa state tables have entries soc: qcom: socinfo: add missing soc_id sysfs entry arm: dts: mt7623: add phy-mode property for gmac2 copy_xstate_to_kernel: Fix typo which caused GDB regression regmap: debugfs: Don't sleep while atomic for fast_io regmaps keys: asymmetric: fix error return code in software_key_query() arm64: dts: spcfpga: Align GIC, NAND and UART nodenames with dtschema ARM: dts: socfpga: Align L2 cache-controller nodename with dtschema xprtrdma: fix incorrect header size calculations Revert "thermal: mediatek: fix register index error" ARM: dts: Fix dcan driver probe failed on am437x platform fuse: don't ignore errors from fuse_writepages_fill() NFS: Fix interrupted slots by sending a solo SEQUENCE operation clk: AST2600: Add mux for EMMC clock clk: mvebu: ARMADA_AP_CPU_CLK needs to select ARMADA_AP_CP_HELPER staging: comedi: verify array index is correct before using it usb: gadget: udc: atmel: fix uninitialized read in debug printk spi: spi-sun6i: sun6i_spi_transfer_one(): fix setting of clock rate dmaengine: dmatest: stop completed threads when running without set channel dmaengine: dw: Initialize channel before each transfer iio: adc: ad7780: Fix a resource handling path in 'ad7780_probe()' bus: ti-sysc: Do not disable on suspend for no-idle bus: ti-sysc: Fix sleeping function called from invalid context for RTC quirk bus: ti-sysc: Fix wakeirq sleeping function called from invalid context arm64: dts: meson-gxl-s805x: reduce initial Mali450 core frequency arm64: dts: meson: add missing gxl rng clock phy: sun4i-usb: fix dereference of pointer phy0 before it is null checked dmaengine: sh: usb-dmac: set tx_result parameters soundwire: intel: fix memory leak with devm_kasprintf iio:health:afe4404 Fix timestamp alignment and prevent data leak. ALSA: usb-audio: Add registration quirk for Kingston HyperX Cloud Flight S bus: ti-sysc: Use optional clocks on for enable and wait for softreset bit ACPI: video: Use native backlight on Acer TravelMate 5735Z Input: mms114 - add extra compatible for mms345l ALSA: usb-audio: Add quirk for Focusrite Scarlett 2i2 ALSA: usb-audio: Add registration quirk for Kingston HyperX Cloud Alpha S ACPI: video: Use native backlight on Acer Aspire 5783z ALSA: usb-audio: Rewrite registration quirk handling mmc: sdhci: do not enable card detect interrupt for gpio cd type doc: dt: bindings: usb: dwc3: Update entries for disabling SS instances in park mode ALSA: usb-audio: Create a registration quirk for Kingston HyperX Amp (0951:16d8) Input: goodix - fix touch coordinates on Cube I15-TC ALSA: usb-audio: Add support for MOTU MicroBook IIc bus: ti-sysc: Detect EDMA and set quirk flags for tptc arm64: dts: g12-common: add parkmode_disable_ss_quirk on DWC3 controller bus: ti-sysc: Detect display subsystem related devices bus: ti-sysc: Handle module unlock quirk needed for some RTC bus: ti-sysc: Consider non-existing registers too when matching quirks bus: ti-sysc: Rename clk related quirks to pre_reset and post_reset quirks scsi: sr: remove references to BLK_DEV_SR_VENDOR, leave it enabled drm/sun4i: tcon: Separate quirks for tcon0 and tcon1 on A20 ARM: at91: pm: add quirk for sam9x60's ulp1 HID: quirks: Remove ITE 8595 entry from hid_have_special_driver mmc: mmci: Support any block sizes for ux500v2 and qcom variant ARM: OMAP2+: use separate IOMMU pdata to fix DRA7 IPU1 boot ARM: OMAP2+: Add workaround for DRA7 DSP MStandby errata i879 ARM: OMAP4+: remove pdata quirks for omap4+ iommus net: sfp: add some quirks for GPON modules net: sfp: add support for module quirks Revert "usb/xhci-plat: Set PM runtime as active on resume" Revert "usb/ehci-platform: Set PM runtime as active on resume" Revert "usb/ohci-platform: Fix a warning when hibernating" net: ethernet: mvneta: Add back interface mode validation net: ethernet: mvneta: Do not error out in non serdes modes net: macb: call pm_runtime_put_sync on failure path of: of_mdio: Correct loop scanning logic net: dsa: bcm_sf2: Fix node reference count spi: spi-fsl-dspi: Fix lockup if device is shutdown during SPI transfer iio:health:afe4403 Fix timestamp alignment and prevent data leak. iio:pressure:ms5611 Fix buffer element alignment iio:humidity:hts221 Fix alignment and data leak issues iio: pressure: zpa2326: handle pm_runtime_get_sync failure iio: mma8452: Add missed iio_device_unregister() call in mma8452_probe() iio: core: add missing IIO_MOD_H2/ETHANOL string identifiers iio: magnetometer: ak8974: Fix runtime PM imbalance on error iio:humidity:hdc100x Fix alignment and data leak issues iio:magnetometer:ak8974: Fix alignment and data leak issues arm64/alternatives: don't patch up internal branches i2c: eg20t: Load module automatically if ID matches gfs2: read-only mounts should grab the sd_freeze_gl glock tpm_tis: extra chip->ops check on error path in tpm_tis_core_init arm64/alternatives: use subsections for replacement sequences cifs: prevent truncation from long to int in wait_for_free_credits dt-bindings: mailbox: zynqmp_ipi: fix unit address m68k: mm: fix node memblock init m68k: nommu: register start of the memory with memblock blk-mq-debugfs: update blk_queue_flag_name[] accordingly for new flags thermal/drivers: imx: Fix missing of_node_put() at probe time x86/fpu: Reset MXCSR to default in kernel_fpu_begin() drm/exynos: fix ref count leak in mic_pre_enable drm/exynos: Properly propagate return value in drm_iommu_attach_device() drm/msm/dpu: allow initialization of encoder locks during encoder init drm/msm: fix potential memleak in error branch arm64: arch_timer: Disable the compat vdso for cores affected by ARM64_WORKAROUND_1418040 arm64: arch_timer: Allow an workaround descriptor to disable compat vdso arm64: Introduce a way to disable the 32bit vdso ip: Fix SO_MARK in RST, ACK and ICMP packets cgroup: Fix sock_cgroup_data on big-endian. cgroup: fix cgroup_sk_alloc() for sk_clone_lock() tcp: md5: allow changing MD5 keys in all socket states tcp: md5: refine tcp_md5_do_add()/tcp_md5_hash_key() barriers vlan: consolidate VLAN parsing code and limit max parsing depth tcp: md5: do not send silly options in SYNCOOKIES tcp: md5: add missing memory barriers in tcp_md5_do_add()/tcp_md5_hash_key() tcp: make sure listeners don't initialize congestion-control state tcp: fix SO_RCVLOWAT possible hangs under high mem pressure sched: consistently handle layer3 header accesses in the presence of VLANs net: usb: qmi_wwan: add support for Quectel EG95 LTE modem net_sched: fix a memory leak in atm_tc_init() net: dsa: microchip: set the correct number of ports net: Added pointer check for dst->ops->neigh_lookup in dst_neigh_lookup_skb llc: make sure applications use ARPHRD_ETHER l2tp: remove skb_dst_set() from l2tp_xmit_skb() ipv6: Fix use of anycast address with loopback ipv6: fib6_select_path can not use out path for nexthop objects ipv4: fill fl4_icmp_{type,code} in ping_v4_sendmsg genetlink: remove genl_bind bridge: mcast: Fix MLD2 Report IPv6 payload length check net: rmnet: fix lower interface leak net: atlantic: fix ip dst and ipv6 address filters crypto: atmel - Fix build error of CRYPTO_AUTHENC crypto: atmel - Fix selection of CRYPTO_AUTHENC ANDROID: GKI: update abi symbol lists now that CONFIG_DWC3 is enabled. ANDROID: GKI: Enable CONFIG_USB_DWC3 ANDROID: ABI: add the symbols of dwc3.ko and sprd-dma.ko to unisoc ANDROID: ABI: Update the ABI whitelist for QCOM ANDROID: GKI: Update CF abi list for virtio-console UPSTREAM: lkdtm/heap: Avoid edge and middle of slabs UPSTREAM: lkdtm: Avoid more compiler optimizations for bad writes ANDROID: GKI: Update ABI after RPMH config change ANDROID: GKI: Adjust symbol lists after RPMH removed from gki_defconfig ANDROID: db845c_gki.fragment: Add QCOM_RPMH and QCOM_RPMHPD as modules ANDROID: gki_defconfig: Remove QCOM_RPMH from the gki_defconfig ANDROID: Kconfig.gki: Remove GKI_QCOM_CLKS_CONFIGS and QCOM_RPMHPD from GKI_HACKS config option FROMLIST: soc: qcom: rpmh: Allow RPMH driver to be loaded as a module UPSTREAM: soc: qcom: rpmhpd: Allow RPMHPD driver to be loaded as a module ANDROID: GKI: Export memblock_free to drivers ANDROID: GKI: do not export symbol_get/put() ANDROID: add xfs back to allmodconfig build tests FROMLIST: rpmsg: core: Add signal API support ANDROID: GKI: Fix x86 warning on DMA_VIRTUAL_CHANNELS ANDROID: GKI: Update ABI and export list for qcom Revert "ANDROID: net: enable wireless core features with GKI_LEGACY_WEXT_ALLCONFIG" Revert "ALSA: compress: fix partial_drain completion state" Conflicts: Documentation/devicetree/bindings Documentation/devicetree/bindings/mailbox/xlnx,zynqmp-ipi-mailbox.txt Documentation/devicetree/bindings/usb/dwc3.txt android/abi_gki_aarch64_qcom drivers/soc/qcom/Kconfig drivers/soc/qcom/socinfo.c drivers/usb/host/xhci-plat.c kernel/sched/core.c Change-Id: If4d45d5447eb2b1b86326bae8c3844fe565a0b42 Signed-off-by: Blagovest Kolenichev <bkolenichev@codeaurora.org>
411 lines
9.5 KiB
C
411 lines
9.5 KiB
C
// SPDX-License-Identifier: GPL-2.0-only
|
|
/* Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. */
|
|
|
|
#include <linux/debugfs.h>
|
|
#include <linux/fs.h>
|
|
#include <linux/kernel.h>
|
|
#include <linux/module.h>
|
|
#include <linux/of.h>
|
|
#include <linux/of_address.h>
|
|
#include <linux/of_platform.h>
|
|
#include <linux/of_reserved_mem.h>
|
|
#include <linux/platform_device.h>
|
|
#include <linux/seq_file.h>
|
|
#include <linux/types.h>
|
|
|
|
#include <soc/qcom/cmd-db.h>
|
|
|
|
#define NUM_PRIORITY 2
|
|
#define MAX_SLV_ID 8
|
|
#define SLAVE_ID_MASK 0x7
|
|
#define SLAVE_ID_SHIFT 16
|
|
#define CMD_DB_STANDALONE_MASK BIT(0)
|
|
|
|
/**
|
|
* struct entry_header: header for each entry in cmddb
|
|
*
|
|
* @id: resource's identifier
|
|
* @priority: unused
|
|
* @addr: the address of the resource
|
|
* @len: length of the data
|
|
* @offset: offset from :@data_offset, start of the data
|
|
*/
|
|
struct entry_header {
|
|
u8 id[8];
|
|
__le32 priority[NUM_PRIORITY];
|
|
__le32 addr;
|
|
__le16 len;
|
|
__le16 offset;
|
|
};
|
|
|
|
/**
|
|
* struct rsc_hdr: resource header information
|
|
*
|
|
* @slv_id: id for the resource
|
|
* @header_offset: entry's header at offset from the end of the cmd_db_header
|
|
* @data_offset: entry's data at offset from the end of the cmd_db_header
|
|
* @cnt: number of entries for HW type
|
|
* @version: MSB is major, LSB is minor
|
|
* @reserved: reserved for future use.
|
|
*/
|
|
struct rsc_hdr {
|
|
__le16 slv_id;
|
|
__le16 header_offset;
|
|
__le16 data_offset;
|
|
__le16 cnt;
|
|
__le16 version;
|
|
__le16 reserved[3];
|
|
};
|
|
|
|
/**
|
|
* struct cmd_db_header: The DB header information
|
|
*
|
|
* @version: The cmd db version
|
|
* @magic: constant expected in the database
|
|
* @header: array of resources
|
|
* @checksum: checksum for the header. Unused.
|
|
* @reserved: reserved memory
|
|
* @data: driver specific data
|
|
*/
|
|
struct cmd_db_header {
|
|
__le32 version;
|
|
u8 magic[4];
|
|
struct rsc_hdr header[MAX_SLV_ID];
|
|
__le32 checksum;
|
|
__le32 reserved;
|
|
u8 data[];
|
|
};
|
|
|
|
/**
|
|
* DOC: Description of the Command DB database.
|
|
*
|
|
* At the start of the command DB memory is the cmd_db_header structure.
|
|
* The cmd_db_header holds the version, checksum, magic key as well as an
|
|
* array for header for each slave (depicted by the rsc_header). Each h/w
|
|
* based accelerator is a 'slave' (shared resource) and has slave id indicating
|
|
* the type of accelerator. The rsc_header is the header for such individual
|
|
* slaves of a given type. The entries for each of these slaves begin at the
|
|
* rsc_hdr.header_offset. In addition each slave could have auxiliary data
|
|
* that may be needed by the driver. The data for the slave starts at the
|
|
* entry_header.offset to the location pointed to by the rsc_hdr.data_offset.
|
|
*
|
|
* Drivers have a stringified key to a slave/resource. They can query the slave
|
|
* information and get the slave id and the auxiliary data and the length of the
|
|
* data. Using this information, they can format the request to be sent to the
|
|
* h/w accelerator and request a resource state.
|
|
*/
|
|
|
|
static const u8 CMD_DB_MAGIC[] = { 0xdb, 0x30, 0x03, 0x0c };
|
|
static struct dentry *debugfs;
|
|
|
|
static bool cmd_db_magic_matches(const struct cmd_db_header *header)
|
|
{
|
|
const u8 *magic = header->magic;
|
|
|
|
return memcmp(magic, CMD_DB_MAGIC, ARRAY_SIZE(CMD_DB_MAGIC)) == 0;
|
|
}
|
|
|
|
static struct cmd_db_header *cmd_db_header;
|
|
|
|
static inline const void *rsc_to_entry_header(const struct rsc_hdr *hdr)
|
|
{
|
|
u16 offset = le16_to_cpu(hdr->header_offset);
|
|
|
|
return cmd_db_header->data + offset;
|
|
}
|
|
|
|
static inline void *
|
|
rsc_offset(const struct rsc_hdr *hdr, const struct entry_header *ent)
|
|
{
|
|
u16 offset = le16_to_cpu(hdr->data_offset);
|
|
u16 loffset = le16_to_cpu(ent->offset);
|
|
|
|
return cmd_db_header->data + offset + loffset;
|
|
}
|
|
|
|
/**
|
|
* cmd_db_ready - Indicates if command DB is available
|
|
*
|
|
* Return: 0 on success, errno otherwise
|
|
*/
|
|
int cmd_db_ready(void)
|
|
{
|
|
if (cmd_db_header == NULL)
|
|
return -EPROBE_DEFER;
|
|
else if (!cmd_db_magic_matches(cmd_db_header))
|
|
return -EINVAL;
|
|
|
|
return 0;
|
|
}
|
|
EXPORT_SYMBOL(cmd_db_ready);
|
|
|
|
static int cmd_db_get_header(const char *id, const struct entry_header **eh,
|
|
const struct rsc_hdr **rh)
|
|
{
|
|
const struct rsc_hdr *rsc_hdr;
|
|
const struct entry_header *ent;
|
|
int ret, i, j;
|
|
u8 query[8];
|
|
|
|
ret = cmd_db_ready();
|
|
if (ret)
|
|
return ret;
|
|
|
|
/* Pad out query string to same length as in DB */
|
|
strncpy(query, id, sizeof(query));
|
|
|
|
for (i = 0; i < MAX_SLV_ID; i++) {
|
|
rsc_hdr = &cmd_db_header->header[i];
|
|
if (!rsc_hdr->slv_id)
|
|
break;
|
|
|
|
ent = rsc_to_entry_header(rsc_hdr);
|
|
for (j = 0; j < le16_to_cpu(rsc_hdr->cnt); j++, ent++) {
|
|
if (memcmp(ent->id, query, sizeof(ent->id)) == 0) {
|
|
if (eh)
|
|
*eh = ent;
|
|
if (rh)
|
|
*rh = rsc_hdr;
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
return -ENODEV;
|
|
}
|
|
|
|
/**
|
|
* cmd_db_read_addr() - Query command db for resource id address.
|
|
*
|
|
* @id: resource id to query for address
|
|
*
|
|
* Return: resource address on success, 0 on error
|
|
*
|
|
* This is used to retrieve resource address based on resource
|
|
* id.
|
|
*/
|
|
u32 cmd_db_read_addr(const char *id)
|
|
{
|
|
int ret;
|
|
const struct entry_header *ent;
|
|
|
|
ret = cmd_db_get_header(id, &ent, NULL);
|
|
|
|
return ret < 0 ? 0 : le32_to_cpu(ent->addr);
|
|
}
|
|
EXPORT_SYMBOL(cmd_db_read_addr);
|
|
|
|
/**
|
|
* cmd_db_read_aux_data() - Query command db for aux data.
|
|
*
|
|
* @id: Resource to retrieve AUX Data on
|
|
* @len: size of data buffer returned
|
|
*
|
|
* Return: pointer to data on success, error pointer otherwise
|
|
*/
|
|
const void *cmd_db_read_aux_data(const char *id, size_t *len)
|
|
{
|
|
int ret;
|
|
const struct entry_header *ent;
|
|
const struct rsc_hdr *rsc_hdr;
|
|
|
|
ret = cmd_db_get_header(id, &ent, &rsc_hdr);
|
|
if (ret)
|
|
return ERR_PTR(ret);
|
|
|
|
if (len)
|
|
*len = le16_to_cpu(ent->len);
|
|
|
|
return rsc_offset(rsc_hdr, ent);
|
|
}
|
|
EXPORT_SYMBOL(cmd_db_read_aux_data);
|
|
|
|
/**
|
|
* cmd_db_read_slave_id - Get the slave ID for a given resource address
|
|
*
|
|
* @id: Resource id to query the DB for version
|
|
*
|
|
* Return: cmd_db_hw_type enum on success, CMD_DB_HW_INVALID on error
|
|
*/
|
|
enum cmd_db_hw_type cmd_db_read_slave_id(const char *id)
|
|
{
|
|
int ret;
|
|
const struct entry_header *ent;
|
|
u32 addr;
|
|
|
|
ret = cmd_db_get_header(id, &ent, NULL);
|
|
if (ret < 0)
|
|
return CMD_DB_HW_INVALID;
|
|
|
|
addr = le32_to_cpu(ent->addr);
|
|
return (addr >> SLAVE_ID_SHIFT) & SLAVE_ID_MASK;
|
|
}
|
|
EXPORT_SYMBOL(cmd_db_read_slave_id);
|
|
|
|
bool cmd_db_is_standalone(void)
|
|
{
|
|
int ret = cmd_db_ready();
|
|
u32 standalone = le32_to_cpu(cmd_db_header->reserved) &
|
|
CMD_DB_STANDALONE_MASK;
|
|
|
|
return !ret && standalone;
|
|
}
|
|
EXPORT_SYMBOL(cmd_db_is_standalone);
|
|
|
|
static void *cmd_db_start(struct seq_file *m, loff_t *pos)
|
|
{
|
|
int slv_idx, ent_idx, cnt;
|
|
struct entry_header *ent;
|
|
int total = 0;
|
|
|
|
for (slv_idx = 0; slv_idx < MAX_SLV_ID; slv_idx++) {
|
|
cnt = le16_to_cpu(cmd_db_header->header[slv_idx].cnt);
|
|
if (!cnt)
|
|
continue;
|
|
ent_idx = *pos - total;
|
|
if (ent_idx < cnt)
|
|
break;
|
|
total += cnt;
|
|
}
|
|
|
|
if (slv_idx == MAX_SLV_ID)
|
|
return NULL;
|
|
|
|
ent = (void *)cmd_db_header->data +
|
|
le16_to_cpu(cmd_db_header->header[slv_idx].header_offset);
|
|
|
|
return &ent[ent_idx];
|
|
}
|
|
|
|
static void cmd_db_stop(struct seq_file *m, void *v)
|
|
{
|
|
}
|
|
|
|
static void *cmd_db_next(struct seq_file *m, void *v, loff_t *pos)
|
|
{
|
|
(*pos)++;
|
|
return cmd_db_start(m, pos);
|
|
}
|
|
|
|
static int cmd_db_seq_show(struct seq_file *m, void *v)
|
|
{
|
|
struct entry_header *eh = v;
|
|
char buf[9] = {0};
|
|
int eh_addr, eh_len, eh_offset;
|
|
|
|
if (!eh)
|
|
return 0;
|
|
|
|
memcpy(buf, &eh->id, sizeof(eh->id));
|
|
eh_addr = le32_to_cpu(eh->addr);
|
|
eh_len = le16_to_cpu(eh->len);
|
|
eh_offset = le16_to_cpu(eh->offset);
|
|
seq_printf(m, "Address: 0x%05x, id: %s", eh_addr, buf);
|
|
|
|
if (eh_len) {
|
|
int slv_id = (eh_addr >> SLAVE_ID_SHIFT) & SLAVE_ID_MASK;
|
|
u8 aux[32] = {0};
|
|
int len, offset;
|
|
int k;
|
|
|
|
len = min_t(u32, eh_len, sizeof(aux));
|
|
for (k = 0; k < MAX_SLV_ID; k++) {
|
|
struct rsc_hdr *hdr = &cmd_db_header->header[k];
|
|
|
|
if (le16_to_cpu(hdr->slv_id) == slv_id)
|
|
break;
|
|
}
|
|
|
|
if (k == MAX_SLV_ID)
|
|
return -EINVAL;
|
|
|
|
offset = le16_to_cpu(cmd_db_header->header[k].data_offset);
|
|
memcpy(aux, cmd_db_header->data + offset + eh_offset, len);
|
|
|
|
seq_puts(m, ", aux data: ");
|
|
|
|
for (k = 0; k < len; k++)
|
|
seq_printf(m, "%02x ", aux[k]);
|
|
|
|
}
|
|
seq_puts(m, "\n");
|
|
|
|
return 0;
|
|
}
|
|
|
|
static const struct seq_operations cmd_db_seq_ops = {
|
|
.start = cmd_db_start,
|
|
.stop = cmd_db_stop,
|
|
.next = cmd_db_next,
|
|
.show = cmd_db_seq_show,
|
|
};
|
|
|
|
static int cmd_db_file_open(struct inode *inode, struct file *file)
|
|
{
|
|
return seq_open(file, &cmd_db_seq_ops);
|
|
}
|
|
|
|
static const struct file_operations cmd_db_fops = {
|
|
.owner = THIS_MODULE,
|
|
.open = cmd_db_file_open,
|
|
.read = seq_read,
|
|
.release = seq_release,
|
|
.llseek = no_llseek,
|
|
};
|
|
|
|
static int cmd_db_dev_probe(struct platform_device *pdev)
|
|
{
|
|
struct reserved_mem *rmem;
|
|
int ret = 0;
|
|
|
|
rmem = of_reserved_mem_lookup(pdev->dev.of_node);
|
|
if (!rmem) {
|
|
dev_err(&pdev->dev, "failed to acquire memory region\n");
|
|
return -EINVAL;
|
|
}
|
|
|
|
cmd_db_header = memremap(rmem->base, rmem->size, MEMREMAP_WB);
|
|
if (!cmd_db_header) {
|
|
ret = -ENOMEM;
|
|
cmd_db_header = NULL;
|
|
return ret;
|
|
}
|
|
|
|
if (!cmd_db_magic_matches(cmd_db_header)) {
|
|
dev_err(&pdev->dev, "Invalid Command DB Magic\n");
|
|
return -EINVAL;
|
|
}
|
|
|
|
if (cmd_db_is_standalone())
|
|
pr_info("Command DB is initialized in standalone mode.\n");
|
|
|
|
debugfs = debugfs_create_file("cmd_db", 0444, NULL, NULL, &cmd_db_fops);
|
|
if (!debugfs)
|
|
pr_err("Couldn't create debugfs\n");
|
|
|
|
return 0;
|
|
}
|
|
|
|
static const struct of_device_id cmd_db_match_table[] = {
|
|
{ .compatible = "qcom,cmd-db" },
|
|
{ },
|
|
};
|
|
MODULE_DEVICE_TABLE(of, cmd_db_match_table);
|
|
|
|
static struct platform_driver cmd_db_dev_driver = {
|
|
.probe = cmd_db_dev_probe,
|
|
.driver = {
|
|
.name = "cmd-db",
|
|
.of_match_table = cmd_db_match_table,
|
|
},
|
|
};
|
|
|
|
static int __init cmd_db_device_init(void)
|
|
{
|
|
return platform_driver_register(&cmd_db_dev_driver);
|
|
}
|
|
arch_initcall(cmd_db_device_init);
|
|
|
|
MODULE_DESCRIPTION("Qualcomm Technologies, Inc. Command DB for QCOM SoCs");
|
|
MODULE_LICENSE("GPL v2");
|