android_kernel_xiaomi_sm8350/drivers/soc/qcom/cmd-db.c
Blagovest Kolenichev 40bffd325d Merge android11-5.4.54 (261a54f) into msm-5.4
* 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>
2020-08-04 11:54:06 -07:00

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");