Merge android-5.4.30 (5cfdde5) into msm-5.4

* refs/heads/tmp-5cfdde5:
  Revert "ANDROID: gki_defconfig: enabled UAPI header compile testing"
  Linux 5.4.30
  arm64: dts: ls1046ardb: set RGMII interfaces to RGMII_ID mode
  arm64: dts: ls1043a-rdb: correct RGMII delay mode to rgmii-id
  ARM: dts: sun8i: r40: Move AHCI device node based on address order
  ARM: dts: N900: fix onenand timings
  ARM: dts: imx6: phycore-som: fix arm and soc minimum voltage
  ARM: bcm2835-rpi-zero-w: Add missing pinctrl name
  ARM: dts: oxnas: Fix clear-mask property
  perf map: Fix off by one in strncpy() size argument
  arm64: alternative: fix build with clang integrated assembler
  libceph: fix alloc_msg_with_page_vector() memory leaks
  clk: ti: am43xx: Fix clock parent for RTC clock
  clk: imx: Align imx sc clock parent msg structs to 4
  clk: imx: Align imx sc clock msg structs to 4
  net: ks8851-ml: Fix IO operations, again
  gpiolib: acpi: Add quirk to ignore EC wakeups on HP x2 10 CHT + AXP288 model
  bpf: Explicitly memset some bpf info structures declared on the stack
  bpf: Explicitly memset the bpf_attr structure
  platform/x86: pmc_atom: Add Lex 2I385SW to critclk_systems DMI table
  vt: vt_ioctl: fix use-after-free in vt_in_use()
  vt: vt_ioctl: fix VT_DISALLOCATE freeing in-use virtual console
  vt: vt_ioctl: remove unnecessary console allocation checks
  vt: switch vt_dont_switch to bool
  vt: ioctl, switch VT_IS_IN_USE and VT_BUSY to inlines
  vt: selection, introduce vc_is_sel
  serial: sprd: Fix a dereference warning
  mac80211: fix authentication with iwlwifi/mvm
  mac80211: Check port authorization in the ieee80211_tx_dequeue() case
  ANDROID: 5.4.29 ABI update
  ANDROID: GKI: remove kernel_read/write from whitelists
  ANDROID: GKI: Fix ABI for scsi/ufs patches
  FROMGIT: scsi: ufs-qcom: Override devfreq parameters
  BACKPORT: FROMGIT: scsi: ufshcd: Let vendor override devfreq parameters
  FROMGIT: scsi: ufshcd: Update the set frequency to devfreq
  FROMLIST: scsi: ufs: full reinit upon resume if link was off
  FROMGIT: scsi: ufs: set device as active power mode after resetting device
  FROMGIT: scsi: ufs: Enable block layer runtime PM for well-known logical units
  UPSTREAM: scsi: ufs: Fix possible unclocked access to auto hibern8 timer register
  ANDROID: db845c build: Use merge_configs
  ANDROID: ABI/Whitelist: update whitelist of unisoc
  Linux 5.4.29
  net: Fix CONFIG_NET_CLS_ACT=n and CONFIG_NFT_FWD_NETDEV={y, m} build
  media: v4l2-core: fix a use-after-free bug of sd->devnode
  media: xirlink_cit: add missing descriptor sanity checks
  media: stv06xx: add missing descriptor sanity checks
  media: dib0700: fix rc endpoint lookup
  media: ov519: add missing endpoint sanity checks
  libfs: fix infoleak in simple_attr_read()
  ahci: Add Intel Comet Lake H RAID PCI ID
  staging: wlan-ng: fix use-after-free Read in hfa384x_usbin_callback
  staging: wlan-ng: fix ODEBUG bug in prism2sta_disconnect_usb
  staging: rtl8188eu: Add ASUS USB-N10 Nano B1 to device table
  staging: kpc2000: prevent underflow in cpld_reconfigure()
  media: usbtv: fix control-message timeouts
  media: flexcop-usb: fix endpoint sanity check
  usb: musb: fix crash with highmen PIO and usbmon
  USB: serial: io_edgeport: fix slab-out-of-bounds read in edge_interrupt_callback
  USB: cdc-acm: restore capability check order
  USB: serial: option: add Wistron Neweb D19Q1
  USB: serial: option: add BroadMobi BM806U
  USB: serial: option: add support for ASKEY WWHC050
  bpf: Undo incorrect __reg_bound_offset32 handling
  clocksource/drivers/hyper-v: Untangle stimers and timesync from clocksources
  r8169: fix PHY driver check on platforms w/o module softdeps
  vti6: Fix memory leak of skb if input policy check fails
  ARM: dts: sun8i-a83t-tbs-a711: Fix USB OTG mode detection
  bpf, sockmap: Remove bucket->lock from sock_{hash|map}_free
  bpf/btf: Fix BTF verification of enum members in struct/union
  bpf: Initialize storage pointers to NULL to prevent freeing garbage pointer
  bpf, x32: Fix bug with JMP32 JSET BPF_X checking upper bits
  i2c: nvidia-gpu: Handle timeout correctly in gpu_i2c_check_status()
  netfilter: nft_fwd_netdev: allow to redirect to ifb via ingress
  netfilter: nft_fwd_netdev: validate family and chain type
  netfilter: flowtable: reload ip{v6}h in nf_flow_tuple_ip{v6}
  mac80211: set IEEE80211_TX_CTRL_PORT_CTRL_PROTO for nl80211 TX
  ieee80211: fix HE SPR size calculation
  afs: Fix unpinned address list during probing
  afs: Fix some tracing details
  afs: Fix client call Rx-phase signal handling
  xfrm: policy: Fix doulbe free in xfrm_policy_timer
  xfrm: add the missing verify_sec_ctx_len check in xfrm_add_acquire
  xfrm: fix uctx len check in verify_sec_ctx_len
  RDMA/mlx5: Block delay drop to unprivileged users
  RDMA/mlx5: Fix access to wrong pointer while performing flush due to error
  RDMA/mlx5: Fix the number of hwcounters of a dynamic counter
  vti[6]: fix packet tx through bpf_redirect() in XinY cases
  xfrm: handle NETDEV_UNREGISTER for xfrm device
  genirq: Fix reference leaks on irq affinity notifiers
  afs: Fix handling of an abort from a service handler
  RDMA/core: Ensure security pkey modify is not lost
  bpf: Fix cgroup ref leak in cgroup_bpf_inherit on out-of-memory
  gpiolib: acpi: Add quirk to ignore EC wakeups on HP x2 10 BYT + AXP288 model
  gpiolib: acpi: Rework honor_wakeup option into an ignore_wake option
  gpiolib: acpi: Correct comment for HP x2 10 honor_wakeup quirk
  mm: fork: fix kernel_stack memcg stats for various stack implementations
  mm/sparse: fix kernel crash with pfn_section_valid check
  drivers/base/memory.c: indicate all memory blocks as removable
  mm/swapfile.c: move inode_lock out of claim_swapfile
  mac80211: mark station unauthorized before key removal
  mac80211: drop data frames without key on encrypted links
  nl80211: fix NL80211_ATTR_CHANNEL_WIDTH attribute type
  scsi: sd: Fix optimal I/O size for devices that change reported values
  scripts/dtc: Remove redundant YYLOC global declaration
  tools: Let O= makes handle a relative path with -C option
  rtlwifi: rtl8188ee: Fix regression due to commit d1d1a96bdb
  perf probe: Do not depend on dwfl_module_addrsym()
  perf probe: Fix to delete multiple probe event
  x86/ioremap: Fix CONFIG_EFI=n build
  ARM: dts: omap5: Add bus_dma_limit for L3 bus
  ARM: dts: dra7: Add bus_dma_limit for L3 bus
  ceph: fix memory leak in ceph_cleanup_snapid_map()
  ceph: check POOL_FLAG_FULL/NEARFULL in addition to OSDMAP_FULL/NEARFULL
  RDMA/mad: Do not crash if the rdma device does not have a umad interface
  RDMA/nl: Do not permit empty devices names during RDMA_NLDEV_CMD_NEWLINK/SET
  gpiolib: Fix irq_disable() semantics
  RDMA/core: Fix missing error check on dev_set_name()
  IB/rdmavt: Free kernel completion queue when done
  Input: avoid BIT() macro usage in the serio.h UAPI header
  Input: synaptics - enable RMI on HP Envy 13-ad105ng
  Input: fix stale timestamp on key autorepeat events
  Input: raydium_i2c_ts - fix error codes in raydium_i2c_boot_trigger()
  i2c: hix5hd2: add missed clk_disable_unprepare in remove
  iwlwifi: mvm: fix non-ACPI function
  iommu/vt-d: Populate debugfs if IOMMUs are detected
  iommu/vt-d: Fix debugfs register reads
  net: hns3: fix "tc qdisc del" failed issue
  sxgbe: Fix off by one in samsung driver strncpy size arg
  dpaa_eth: Remove unnecessary boolean expression in dpaa_get_headroom
  mac80211: Do not send mesh HWMP PREQ if HWMP is disabled
  scsi: ipr: Fix softlockup when rescanning devices in petitboot
  s390/qeth: handle error when backing RX buffer
  s390/qeth: don't reset default_out_queue
  iommu/vt-d: Silence RCU-list debugging warnings
  drm/exynos: Fix cleanup of IOMMU related objects
  drm/amdgpu: correct ROM_INDEX/DATA offset for VEGA20
  drm/amd/display: update soc bb for nv14
  fsl/fman: detect FMan erratum A050385
  arm64: dts: ls1043a: FMan erratum A050385
  dt-bindings: net: FMan erratum A050385
  cgroup1: don't call release_agent when it is ""
  drivers/of/of_mdio.c:fix of_mdiobus_register()
  cpupower: avoid multiple definition with gcc -fno-common
  nfs: add minor version to nfs_server_key for fscache
  cgroup-v1: cgroup_pidlist_next should update position index
  net/mlx5e: Do not recover from a non-fatal syndrome
  net/mlx5e: Fix ICOSQ recovery flow with Striding RQ
  net/mlx5e: Fix missing reset of SW metadata in Striding RQ reset
  net/mlx5e: Enhance ICOSQ WQE info fields
  net/mlx5: DR, Fix postsend actions write length
  hsr: set .netnsok flag
  hsr: add restart routine into hsr_get_node_list()
  hsr: use rcu_read_lock() in hsr_get_node_{list/status}()
  net: ip_gre: Accept IFLA_INFO_DATA-less configuration
  net: ip_gre: Separate ERSPAN newlink / changelink callbacks
  bnxt_en: Reset rings if ring reservation fails during open()
  bnxt_en: Free context memory after disabling PCI in probe error path.
  bnxt_en: Return error if bnxt_alloc_ctx_mem() fails.
  bnxt_en: fix memory leaks in bnxt_dcbnl_ieee_getets()
  bnxt_en: Fix Priority Bytes and Packets counters in ethtool -S.
  vxlan: check return value of gro_cells_init()
  tcp: repair: fix TCP_QUEUE_SEQ implementation
  tcp: ensure skb->dev is NULL before leaving TCP stack
  tcp: also NULL skb->dev when copy was needed
  slcan: not call free_netdev before rtnl_unlock in slcan_open
  r8169: re-enable MSI on RTL8168c
  NFC: fdp: Fix a signedness bug in fdp_nci_send_patch()
  net: stmmac: dwmac-rk: fix error path in rk_gmac_probe
  net_sched: keep alloc_hash updated after hash allocation
  net_sched: hold rtnl lock in tcindex_partial_destroy_work()
  net_sched: cls_route: remove the right filter from hashtable
  net/sched: act_ct: Fix leak of ct zone template on replace
  net: qmi_wwan: add support for ASKEY WWHC050
  net: phy: mdio-mux-bcm-iproc: check clk_prepare_enable() return value
  net: phy: mdio-bcm-unimac: Fix clock handling
  net: phy: dp83867: w/a for fld detect threshold bootstrapping issue
  net/packet: tpacket_rcv: avoid a producer race condition
  net: mvneta: Fix the case where the last poll did not process all rx
  net: ena: Add PCI shutdown handler to allow safe kexec
  net: dsa: tag_8021q: replace dsa_8021q_remove_header with __skb_vlan_pop
  net: dsa: mt7530: Change the LINK bit to reflect the link status
  net: dsa: Fix duplicate frames flooded by learning
  net: cbs: Fix software cbs to consider packet sending time
  net/bpfilter: fix dprintf usage for /dev/kmsg
  mlxsw: spectrum_mr: Fix list iteration in error path
  mlxsw: pci: Only issue reset when system is ready
  macsec: restrict to ethernet devices
  ipv4: fix a RCU-list lock in inet_dump_fib()
  hsr: fix general protection fault in hsr_addr_is_self()
  geneve: move debug check after netdev unregister
  cxgb4: fix Txq restart check during backpressure
  cxgb4: fix throughput drop during Tx backpressure
  ACPI: PM: s2idle: Rework ACPI events synchronization
  mmc: sdhci-tegra: Fix busy detection by enabling MMC_CAP_NEED_RSP_BUSY
  mmc: sdhci-omap: Fix busy detection by enabling MMC_CAP_NEED_RSP_BUSY
  mmc: core: Respect MMC_CAP_NEED_RSP_BUSY for eMMC sleep command
  mmc: core: Respect MMC_CAP_NEED_RSP_BUSY for erase/trim/discard
  mmc: core: Allow host controllers to require R1B for CMD6
  ANDROID: GKI: defconfig: enable CONFIG_THERMAL_GOV_POWER_ALLOCATOR
  UPSTREAM: usb: raw_gadget: fix compilation warnings in uapi headers
  BACKPORT: usb: gadget: add raw-gadget interface
  UPSTREAM: usb: gadget: move choice ... endchoice to legacy/Kconfig
  ANDROID: GKI: Added goldfish whitelist to aarch64 abi
  ANDROID: GKI: update cf whitelist + gki whitelist
  UPSTREAM: ipv6: ndisc: add support for 'PREF64' dns64 prefix identifier
  ANDROID: ABI: Add initial ABI whitelist for QCOM
  ANDROID: GKI: Removed cuttlefish configs
  ANDROID: ABI/Whitelist: update for db845c
  ANDROID: clang: update to 10.0.5
  FROMLIST: arm64: define __alloc_zeroed_user_highpage
  BACKPORT: extcon: Mark extcon_get_edev_name() function as exported symbol
  ANDROID: Incremental fs: Fix two typos
  ANDROID: gki_defconfig: Enable CONFIG_REMOTEPROC
  ANDROID: GKI: Add CONFIG_RPMSG to gki_defconfig
  Revert "sched/core: Prevent race condition between cpuset and __sched_setscheduler()"
  Revert "ANDROID: binder: fix sleeping from invalid function caused by RT inheritance"
  ANDROID: Incremental fs: Add INCFS_IOC_GET_FILLED_BLOCKS
  ANDROID: GKI: defconfig: Enable CONFIG_SHUFFLE_PAGE_ALLOCATOR
  ANDROID: gki_defconfig: disable CONFIG_HARDENED_USERCOPY_FALLBACK
  ANDROID: gki_defconfig: enable CONFIG_DEBUG_LIST
  ANDROID: Follow aosp/1233812 to update ABI whitelists post-TPM addition.
  ANDROID: dm-bow: Fix free_show value is incorrect
  ANDROID: GKI: workqueue.h: add Android ABI padding to some structures
  ANDROID: gki_defconfig: enabled UAPI header compile testing
  ANDROID: GKI: fs.h: add Android ABI padding to some structures
  FROMLIST: media: v4l2-fh: define v4l2_fh struct regardless of condition
  ANDROID: update ABI for 5.4.28
  ANDROID: kbuild: do not merge .section..* into .section in modules
  Linux 5.4.28
  staging: greybus: loopback_test: fix potential path truncations
  staging: greybus: loopback_test: fix potential path truncation
  drm/bridge: dw-hdmi: fix AVI frame colorimetry
  nvmet-tcp: set MSG_MORE only if we actually have more to send
  arm64: smp: fix crash_smp_send_stop() behaviour
  arm64: smp: fix smp_send_stop() behaviour
  ALSA: hda/realtek: Fix pop noise on ALC225
  futex: Unbreak futex hashing
  futex: Fix inode life-time issue
  x86/mm: split vmalloc_sync_all()
  page-flags: fix a crash at SetPageError(THP_SWAP)
  mm, slub: prevent kmalloc_node crashes and memory leaks
  mm: slub: be more careful about the double cmpxchg of freelist
  epoll: fix possible lost wakeup on epoll_ctl() path
  mm: do not allow MADV_PAGEOUT for CoW pages
  mm/hotplug: fix hot remove failure in SPARSEMEM|!VMEMMAP case
  mm, memcg: throttle allocators based on ancestral memory.high
  mm, memcg: fix corruption on 64-bit divisor in memory.high throttling
  memcg: fix NULL pointer dereference in __mem_cgroup_usage_unregister_event
  stm class: sys-t: Fix the use of time_after()
  drm/lease: fix WARNING in idr_destroy
  drm/amd/amdgpu: Fix GPR read from debugfs (v2)
  btrfs: fix log context list corruption after rename whiteout error
  xhci: Do not open code __print_symbolic() in xhci trace events
  arm64: compat: Fix syscall number of compat_clock_getres
  rtc: max8907: add missing select REGMAP_IRQ
  modpost: move the namespace field in Module.symvers last
  intel_th: pci: Add Elkhart Lake CPU support
  intel_th: Fix user-visible error codes
  intel_th: msu: Fix the unexpected state warning
  staging/speakup: fix get_word non-space look-ahead
  staging: greybus: loopback_test: fix poll-mask build breakage
  staging: rtl8188eu: Add device id for MERCUSYS MW150US v2
  kbuild: Disable -Wpointer-to-enum-cast
  CIFS: fiemap: do not return EINVAL if get nothing
  mmc: sdhci-cadence: set SDHCI_QUIRK2_PRESET_VALUE_BROKEN for UniPhier
  mmc: sdhci-of-at91: fix cd-gpios for SAMA5D2
  mmc: rtsx_pci: Fix support for speed-modes that relies on tuning
  iio: light: vcnl4000: update sampling periods for vcnl4040
  iio: light: vcnl4000: update sampling periods for vcnl4200
  iio: adc: at91-sama5d2_adc: fix differential channels in triggered mode
  iio: adc: stm32-dfsdm: fix sleep in atomic context
  iio: magnetometer: ak8974: Fix negative raw values in sysfs
  iio: accel: adxl372: Set iio_chan BE
  iio: trigger: stm32-timer: disable master mode when stopping
  iio: st_sensors: remap SMO8840 to LIS2DH12
  iio: chemical: sps30: fix missing triggered buffer dependency
  tty: fix compat TIOCGSERIAL checking wrong function ptr
  tty: fix compat TIOCGSERIAL leaking uninitialized memory
  ALSA: pcm: oss: Remove WARNING from snd_pcm_plug_alloc() checks
  ALSA: pcm: oss: Avoid plugin buffer overflow
  ALSA: seq: oss: Fix running status after receiving sysex
  ALSA: seq: virmidi: Fix running status after receiving sysex
  ALSA: hda/realtek - Enable the headset of Acer N50-600 with ALC662
  ALSA: hda/realtek - Enable headset mic of Acer X2660G with ALC662
  ALSA: line6: Fix endless MIDI read loop
  USB: cdc-acm: fix rounding error in TIOCSSERIAL
  USB: cdc-acm: fix close_delay and closing_wait units in TIOCSSERIAL
  usb: typec: ucsi: displayport: Fix a potential race during registration
  usb: typec: ucsi: displayport: Fix NULL pointer dereference
  usb: xhci: apply XHCI_SUSPEND_DELAY to AMD XHCI controller 1022:145c
  USB: serial: pl2303: add device-id for HP LD381
  usb: host: xhci-plat: add a shutdown
  USB: serial: option: add ME910G1 ECM composition 0x110b
  usb: quirks: add NO_LPM quirk for RTL8153 based ethernet adapters
  USB: Disable LPM on WD19's Realtek Hub
  Revert "drm/fbdev: Fallback to non tiled mode if all tiles not present"
  binderfs: use refcount for binder control devices too
  parse-maintainers: Mark as executable
  block, bfq: fix overwrite of bfq_group pointer in bfq_find_set_group()
  xenbus: req->err should be updated before req->state
  xenbus: req->body should be updated before req->state
  drm/amd/display: fix dcc swath size calculations on dcn1
  drm/amd/display: Clear link settings on MST disable connector
  drm/amdgpu: clean wptr on wb when gpu recovery
  riscv: Fix range looking for kernel image memblock
  riscv: Force flat memory model with no-mmu
  spi: spi_register_controller(): free bus id on error paths
  ASoC: stm32: sai: manage rebind issue
  riscv: avoid the PIC offset of static percpu data in module beyond 2G limits
  dm integrity: use dm_bio_record and dm_bio_restore
  dm bio record: save/restore bi_end_io and bi_integrity
  altera-stapl: altera_get_note: prevent write beyond end of 'key'
  drivers/perf: arm_pmu_acpi: Fix incorrect checking of gicc pointer
  drivers/perf: fsl_imx8_ddr: Correct the CLEAR bit definition
  drm/exynos: hdmi: don't leak enable HDMI_EN regulator if probe fails
  drm/exynos: dsi: fix workaround for the legacy clock name
  drm/exynos: dsi: propagate error value and silence meaningless warning
  spi/zynqmp: remove entry that causes a cs glitch
  spi: pxa2xx: Add CS control clock quirk
  ARM: dts: dra7: Add "dma-ranges" property to PCIe RC DT nodes
  cifs: add missing mount option to /proc/mounts
  cifs: fix potential mismatch of UNC paths
  powerpc: Include .BTF section
  spi: qup: call spi_qup_pm_resume_runtime before suspending
  ARM: dts: dra7-l4: mark timer13-16 as pwm capable
  phy: ti: gmii-sel: do not fail in case of gmii
  phy: ti: gmii-sel: fix set of copy-paste errors
  drm/mediatek: Find the cursor plane instead of hard coding it
  spi: spi-omap2-mcspi: Support probe deferral for DMA channels
  locks: reinstate locks_delete_block optimization
  locks: fix a potential use-after-free problem when wakeup a waiter
  ANDROID: ABI/Whitelist: update whitelist of unisoc
  ANDROID: staging: ion: Allow for attach and detach ops to be overridden
  ANDROID: scsi: ufs: add ->map_sg_crypto() variant op
  ANDROID: ABI/Whitelist: update for db845c
  ANDROID: GKI: Add CONFIG_SOC_BUS to gki_defconfig
  ANDROID: ABI/Whitelist: update for hikey960
  ANDROID: hikey960: Add external mali driver support to build.config.hikey960
  ANDROID: hikey960: Add build.config.hikey960
  ANDROID: config: Add hikey960_gki fragment
  ANDROID: misc: hisi_hikey_usb: Driver to support usb functionality of Hikey960
  ANDROID: dt-bindings: misc: Add bindings for HiSilicon usb hub and data role switch functionality on HiKey960
  FROMGIT: usb: dwc3: Rework resets initialization to be more flexible
  FROMGIT: usb: dwc3: Rework clock initialization to be more flexible
  FROMGIT: dt-bindings: usb: dwc3: Allow clock list & resets to be more flexible
  FROMGIT: usb: dwc3: Add support for role-switch-default-mode binding
  FROMGIT: dt-bindings: usb: generic: Add role-switch-default-mode binding
  FROMGIT: usb: dwc3: Registering a role switch in the DRD code.
  UPSTREAM: bpf: Explicitly memset some bpf info structures declared on the stack
  UPSTREAM: bpf: Explicitly memset the bpf_attr structure
  FROMGIT: BACKPORT: driver core: Add device links from fwnode only for the primary device
  Linux 5.4.27
  ipv4: ensure rcu_read_lock() in cipso_v4_error()
  ARM: 8961/2: Fix Kbuild issue caused by per-task stack protector GCC plugin
  HID: add ALWAYS_POLL quirk to lenovo pixart mouse
  HID: google: add moonball USB id
  mm: slub: add missing TID bump in kmem_cache_alloc_bulk()
  ARM: 8958/1: rename missed uaccess .fixup section
  ARM: 8957/1: VDSO: Match ARMv8 timer in cntvct_functional()
  net: qrtr: fix len of skb_put_padto in qrtr_node_enqueue
  blk-mq: insert flush request to the front of dispatch queue
  jbd2: fix data races at struct journal_head
  sfc: fix timestamp reconstruction at 16-bit rollover points
  net: rmnet: fix packet forwarding in rmnet bridge mode
  net: rmnet: fix bridge mode bugs
  net: rmnet: use upper/lower device infrastructure
  net: rmnet: do not allow to change mux id if mux id is duplicated
  net: rmnet: remove rcu_read_lock in rmnet_force_unassociate_device()
  net: rmnet: fix suspicious RCU usage
  net: rmnet: fix NULL pointer dereference in rmnet_changelink()
  net: rmnet: fix NULL pointer dereference in rmnet_newlink()
  hinic: fix a bug of rss configuration
  hinic: fix a bug of setting hw_ioctxt
  hinic: fix a irq affinity bug
  net: phy: mscc: fix firmware paths
  slip: not call free_netdev before rtnl_unlock in slip_open
  signal: avoid double atomic counter increments for user accounting
  kbuild: add dt_binding_check to PHONY in a correct place
  kbuild: add dtbs_check to PHONY
  drm/amdgpu: fix memory leak during TDR test(v2)
  blk-mq: insert passthrough request into hctx->dispatch directly
  net: ll_temac: Handle DMA halt condition caused by buffer underrun
  net: ll_temac: Fix RX buffer descriptor handling on GFP_ATOMIC pressure
  net: ll_temac: Add more error handling of dma_map_single() calls
  net: ll_temac: Fix race condition causing TX hang
  mac80211: rx: avoid RCU list traversal under mutex
  net: ks8851-ml: Fix IRQ handling and locking
  net: usb: qmi_wwan: restore mtu min/max values after raw_ip switch
  scsi: libfc: free response frame from GPN_ID
  cfg80211: check reg_rule for NULL in handle_channel_custom()
  tracing: Fix number printing bug in print_synth_event()
  selftests/rseq: Fix out-of-tree compilation
  HID: hid-bigbenff: fix race condition for scheduled work during removal
  HID: hid-bigbenff: call hid_hw_stop() in case of error
  HID: hid-bigbenff: fix general protection fault caused by double kfree
  HID: i2c-hid: add Trekstor Surfbook E11B to descriptor override
  ACPI: watchdog: Set default timeout in probe
  HID: apple: Add support for recent firmware on Magic Keyboards
  ACPI: watchdog: Allow disabling WDAT at boot
  drm/amdgpu: Fix TLB invalidation request when using semaphore
  netfilter: xt_hashlimit: unregister proc file before releasing mutex
  netfilter: hashlimit: do not use indirect calls during gc
  ANDROID: staging: ion: Export query function to be used in modules
  UPSTREAM: Bluetooth: hci_qca: Add support for Qualcomm Bluetooth SoC WCN3991
  UPSTREAM: Bluetooth: btqca: Rename ROME specific variables to generic variables
  ANDROID: ABI: Update abi after enabling CONFIG_USB_PHY
  ANDROID: GKI: Enable CONFIG_USB_PHY for usb drivers like dwc3
  ANDROID: Update abi_gki_aarch64_unisoc_whitelist
  ANDROID: GKI: USB: add Android ABI padding to some structures
  FROMLIST: ubifs: wire up FS_IOC_GET_ENCRYPTION_NONCE
  FROMLIST: f2fs: wire up FS_IOC_GET_ENCRYPTION_NONCE
  FROMLIST: ext4: wire up FS_IOC_GET_ENCRYPTION_NONCE
  FROMLIST: fscrypt: add FS_IOC_GET_ENCRYPTION_NONCE ioctl
  ANDROID: GKI: mm: add Android ABI padding to some structures
  ANDROID: GKI: mount.h: add Android ABI padding to some structures
  ANDROID: GKI: sched.h: add Android ABI padding to some structures
  ANDROID: GKI: sock.h: add Android ABI padding to some structures
  ANDROID: GKI: module.h: add Android ABI padding to some structures
  UPSTREAM: driver core: Skip unnecessary work when device doesn't have sync_state()
  ANDROID: Incremental fs: Add INCFS_IOC_PERMIT_FILL
  ANDROID: Incremental fs: Remove signature checks from kernel
  ANDROID: Incremental fs: Pad hash blocks
  ANDROID: Incremental fs: Make fill block an ioctl
  ANDROID: Incremental fs: Remove all access_ok checks
  ANDROID: GKI: device.h: add Android ABI padding to some structures
  ANDROID: GKI: phy: add Android ABI padding to some structures
  ANDROID: ABI update for 5.4.26

Conflicts:
	Documentation/devicetree/bindings
	Documentation/devicetree/bindings/net/fsl-fman.txt
	Documentation/devicetree/bindings/usb/dwc3.txt
	Documentation/devicetree/bindings/usb/generic.txt
	abi_gki_aarch64_qcom_whitelist
	drivers/misc/Kconfig
	drivers/misc/Makefile
	drivers/scsi/ufs/ufs-qcom.c
	drivers/usb/dwc3/core.c
	drivers/usb/gadget/Kconfig
	include/linux/device.h
	net/qrtr/qrtr.c

Change-Id: I43806ae33997efaf3265461e15fdbe49de74d741
Signed-off-by: Blagovest Kolenichev <bkolenichev@codeaurora.org>
This commit is contained in:
Blagovest Kolenichev 2020-05-19 13:01:47 -07:00
commit 8ec8dcf3dd
440 changed files with 135509 additions and 104053 deletions

View File

@ -136,6 +136,10 @@
dynamic table installation which will install SSDT
tables to /sys/firmware/acpi/tables/dynamic.
acpi_no_watchdog [HW,ACPI,WDT]
Ignore the ACPI-based watchdog interface (WDAT) and let
a native driver control the watchdog device instead.
acpi_rsdp= [ACPI,EFI,KEXEC]
Pass the RSDP address to the kernel, mostly used
on machines running EFI runtime service to boot the

View File

@ -633,6 +633,17 @@ from a passphrase or other low-entropy user credential.
FS_IOC_GET_ENCRYPTION_PWSALT is deprecated. Instead, prefer to
generate and manage any needed salt(s) in userspace.
Getting a file's encryption nonce
---------------------------------
Since Linux v5.7, the ioctl FS_IOC_GET_ENCRYPTION_NONCE is supported.
On encrypted files and directories it gets the inode's 16-byte nonce.
On unencrypted files and directories, it fails with ENODATA.
This ioctl can be useful for automated tests which verify that the
encryption is being done correctly. It is not needed for normal use
of fscrypt.
Adding keys
-----------

View File

@ -470,9 +470,9 @@ build.
The syntax of the Module.symvers file is::
<CRC> <Symbol> <Namespace> <Module> <Export Type>
<CRC> <Symbol> <Module> <Export Type> <Namespace>
0xe1cc2a05 usb_stor_suspend USB_STORAGE drivers/usb/storage/usb-storage EXPORT_SYMBOL_GPL
0xe1cc2a05 usb_stor_suspend drivers/usb/storage/usb-storage EXPORT_SYMBOL_GPL USB_STORAGE
The fields are separated by tabs and values may be empty (e.g.
if no namespace is defined for an exported symbol).

View File

@ -23,6 +23,7 @@ USB support
mtouchusb
ohci
rio
raw-gadget
usbip_protocol
usbmon
usb-serial

View File

@ -0,0 +1,61 @@
==============
USB Raw Gadget
==============
USB Raw Gadget is a kernel module that provides a userspace interface for
the USB Gadget subsystem. Essentially it allows to emulate USB devices
from userspace. Enabled with CONFIG_USB_RAW_GADGET. Raw Gadget is
currently a strictly debugging feature and shouldn't be used in
production, use GadgetFS instead.
Comparison to GadgetFS
~~~~~~~~~~~~~~~~~~~~~~
Raw Gadget is similar to GadgetFS, but provides a more low-level and
direct access to the USB Gadget layer for the userspace. The key
differences are:
1. Every USB request is passed to the userspace to get a response, while
GadgetFS responds to some USB requests internally based on the provided
descriptors. However note, that the UDC driver might respond to some
requests on its own and never forward them to the Gadget layer.
2. GadgetFS performs some sanity checks on the provided USB descriptors,
while Raw Gadget allows you to provide arbitrary data as responses to
USB requests.
3. Raw Gadget provides a way to select a UDC device/driver to bind to,
while GadgetFS currently binds to the first available UDC.
4. Raw Gadget uses predictable endpoint names (handles) across different
UDCs (as long as UDCs have enough endpoints of each required transfer
type).
5. Raw Gadget has ioctl-based interface instead of a filesystem-based one.
Userspace interface
~~~~~~~~~~~~~~~~~~~
To create a Raw Gadget instance open /dev/raw-gadget. Multiple raw-gadget
instances (bound to different UDCs) can be used at the same time. The
interaction with the opened file happens through the ioctl() calls, see
comments in include/uapi/linux/usb/raw_gadget.h for details.
The typical usage of Raw Gadget looks like:
1. Open Raw Gadget instance via /dev/raw-gadget.
2. Initialize the instance via USB_RAW_IOCTL_INIT.
3. Launch the instance with USB_RAW_IOCTL_RUN.
4. In a loop issue USB_RAW_IOCTL_EVENT_FETCH calls to receive events from
Raw Gadget and react to those depending on what kind of USB device
needs to be emulated.
Potential future improvements
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Implement ioctl's for setting/clearing halt status on endpoints.
- Reporting more events (suspend, resume, etc.) through
USB_RAW_IOCTL_EVENT_FETCH.
- Support O_NONBLOCK I/O.

View File

@ -1,7 +1,7 @@
# SPDX-License-Identifier: GPL-2.0
VERSION = 5
PATCHLEVEL = 4
SUBLEVEL = 26
SUBLEVEL = 30
EXTRAVERSION =
NAME = Kleptomaniac Octopus
@ -1323,7 +1323,7 @@ ifneq ($(dtstree),)
%.dtb: include/config/kernel.release scripts_dtc
$(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@
PHONY += dtbs dtbs_install dt_binding_check
PHONY += dtbs dtbs_install dtbs_check
dtbs dtbs_check: include/config/kernel.release scripts_dtc
$(Q)$(MAKE) $(build)=$(dtstree)
@ -1343,6 +1343,7 @@ PHONY += scripts_dtc
scripts_dtc: scripts_basic
$(Q)$(MAKE) $(build)=scripts/dtc
PHONY += dt_binding_check
dt_binding_check: scripts_dtc
$(Q)$(MAKE) $(build)=Documentation/devicetree/bindings

File diff suppressed because it is too large Load Diff

View File

@ -9,8 +9,6 @@
__arch_copy_to_user
arm64_const_caps_ready
bcmp
bus_register
bus_unregister
cancel_delayed_work_sync
capable
__cfi_slowpath
@ -19,12 +17,10 @@
consume_skb
cpu_hwcap_keys
cpu_hwcaps
cpumask_next
cpu_number
__cpu_online_mask
delayed_work_timer_fn
destroy_workqueue
dev_driver_string
_dev_err
device_register
device_unregister
@ -34,25 +30,27 @@
dev_queue_xmit
dev_set_name
_dev_warn
dma_alloc_attrs
dma_direct_map_page
dma_direct_unmap_page
dma_fence_release
dma_fence_wait_timeout
dma_free_attrs
dma_resv_add_excl_fence
dma_set_coherent_mask
dma_set_mask
down_write
ethtool_op_get_link
eth_validate_addr
event_triggers_call
fd_install
finish_wait
flush_work
fput
free_irq
free_netdev
__free_pages
get_device
get_random_bytes
get_unused_fd_flags
hwrng_register
hwrng_unregister
ida_alloc_range
ida_free
init_timer_key
@ -68,13 +66,19 @@
kmem_cache_create
kmem_cache_destroy
kmem_cache_free
kmemdup
kstrdup
kvfree
kvmalloc_node
__list_add_valid
__list_del_entry_valid
__local_bh_enable_ip
lock_sock_nested
memcpy
memset
misc_deregister
misc_register
mod_timer
__module_get
module_layout
module_put
@ -94,6 +98,8 @@
netif_device_detach
netif_tx_stop_all_queues
netif_tx_wake_queue
no_llseek
noop_llseek
nr_cpu_ids
param_ops_bool
param_ops_charp
@ -123,6 +129,7 @@
put_device
__put_page
__put_task_struct
put_unused_fd
queue_delayed_work_on
queue_work_on
_raw_spin_lock
@ -139,6 +146,8 @@
refcount_inc_checked
register_netdev
register_netdevice_notifier
register_virtio_device
register_virtio_driver
release_sock
remove_wait_queue
request_threaded_irq
@ -151,7 +160,6 @@
seq_printf
sg_init_one
sg_init_table
sg_next
skb_clone
skb_put
sk_free
@ -183,7 +191,34 @@
unregister_netdev
unregister_netdevice_notifier
unregister_netdevice_queue
unregister_virtio_device
unregister_virtio_driver
up_read
up_write
usleep_range
virtio_check_driver_offered_feature
virtio_config_changed
virtio_max_dma_size
virtqueue_add_inbuf
virtqueue_add_outbuf
virtqueue_add_sgs
virtqueue_detach_unused_buf
virtqueue_disable_cb
virtqueue_enable_cb
virtqueue_get_avail_addr
virtqueue_get_buf
virtqueue_get_desc_addr
virtqueue_get_used_addr
virtqueue_get_vring_size
virtqueue_is_broken
virtqueue_kick
virtqueue_kick_prepare
virtqueue_notify
vmemmap
vring_create_virtqueue
vring_del_virtqueue
vring_interrupt
vring_transport_features
wait_woken
__wake_up
__warn_printk
@ -191,8 +226,9 @@
ww_mutex_lock_interruptible
ww_mutex_unlock
# required by blk-mq-virtio.ko
blk_mq_map_queues
# required by ac97_bus.ko
bus_register
bus_unregister
# required by dummy-cpufreq.ko
cpufreq_generic_attr
@ -203,7 +239,6 @@
device_create_file
device_remove_file
ktime_get_ts64
mod_timer
platform_device_add_data
sg_miter_next
sg_miter_start
@ -228,7 +263,6 @@
usb_put_dev
usb_put_hcd
usb_remove_hcd
usleep_range
# required by failover.ko
netdev_master_upper_dev_link
@ -312,7 +346,6 @@
dget_parent
d_invalidate
d_make_root
down_write
d_path
dput
d_rehash
@ -369,7 +402,6 @@
unlock_new_inode
unlock_rename
unregister_filesystem
up_write
vfs_create2
vfs_fsync_range
vfs_getattr
@ -435,15 +467,67 @@
vfree
vmalloc
# required by tpm.ko
alloc_chrdev_region
cdev_device_add
cdev_device_del
cdev_init
__class_create
class_destroy
__compat_only_sysfs_link_entry_to_kobj
del_timer_sync
device_initialize
devm_add_action
down_read
efi
efi_tpm_final_log_size
hash_digest_size
idr_alloc
idr_destroy
idr_get_next
idr_remove
idr_replace
__init_rwsem
jiffies_to_msecs
jiffies_to_usecs
krealloc
memchr_inv
memremap
memunmap
of_find_property
of_get_property
of_property_match_string
physvirt_offset
securityfs_create_dir
securityfs_create_file
securityfs_remove
seq_lseek
seq_open
seq_putc
seq_read
seq_release
seq_write
sysfs_remove_link
unregister_chrdev_region
__usecs_to_jiffies
# required by tpm_vtpm_proxy.ko
anon_inode_getfile
# required by ttm.ko
clear_page
copy_page
dev_driver_string
devres_add
devres_alloc_node
devres_destroy
devres_free
dma_alloc_attrs
dma_direct_map_page
dma_direct_unmap_page
dma_fence_enable_sw_signaling
dma_fence_signal
dma_free_attrs
dma_resv_add_shared_fence
dma_resv_copy_fences
dma_resv_fini
@ -492,7 +576,6 @@
si_meminfo
unmap_mapping_range
unregister_shrinker
up_read
vmalloc_to_page
vmap
vmf_insert_mixed
@ -607,15 +690,12 @@
drm_release
drm_set_preferred_mode
drm_universal_plane_init
fd_install
__get_task_comm
get_unused_fd_flags
kmalloc_order_trace
memdup_user
noop_llseek
put_unused_fd
__sg_alloc_table_from_pages
sg_free_table
sg_next
strncpy
sync_file_create
sync_file_get_fence
@ -623,20 +703,9 @@
# required by virtio-rng.ko
complete
hwrng_register
hwrng_unregister
wait_for_completion
wait_for_completion_killable
# required by virtio.ko
add_uevent_var
device_add
device_initialize
driver_register
driver_unregister
ida_destroy
panic
# required by virtio_blk.ko
__alloc_disk_node
blk_cleanup_queue
@ -652,6 +721,7 @@
blk_mq_start_stopped_hw_queues
blk_mq_stop_hw_queue
blk_mq_unquiesce_queue
blk_mq_virtio_map_queues
blk_put_request
blk_queue_alignment_offset
blk_queue_flag_set
@ -715,6 +785,7 @@
__cpuhp_setup_state
__cpuhp_state_add_instance
__cpuhp_state_remove_instance
cpumask_next
cpumask_next_wrap
cpus_read_lock
cpus_read_unlock
@ -724,7 +795,6 @@
eth_type_trans
find_next_bit
flow_keys_basic_dissector
kmemdup
__napi_alloc_skb
napi_complete_done
napi_consume_skb
@ -756,6 +826,11 @@
skb_tstamp_tx
softnet_data
__tracepoint_xdp_exception
virtqueue_add_inbuf_ctx
virtqueue_enable_cb_delayed
virtqueue_enable_cb_prepare
virtqueue_get_buf_ctx
virtqueue_poll
xdp_convert_zc_to_xdp_frame
xdp_do_flush_map
xdp_do_redirect
@ -766,7 +841,6 @@
xdp_rxq_info_unreg
# required by virtio_pci.ko
get_device
irq_set_affinity_hint
pci_alloc_irq_vectors_affinity
pci_find_capability
@ -781,20 +855,14 @@
pci_release_selected_regions
pci_request_region
pci_request_selected_regions
virtio_device_freeze
virtio_device_restore
# required by virtio_pmem.ko
nvdimm_bus_register
nvdimm_bus_unregister
nvdimm_pmem_region_create
# required by virtio_ring.ko
alloc_pages_exact
dma_max_mapping_size
free_pages_exact
kimage_voffset
physvirt_offset
vabits_actual
# required by vmw_vsock_virtio_transport_common.ko
bpf_trace_run10
bpf_trace_run8
@ -805,8 +873,6 @@
# required by vsock.ko
autoremove_wake_function
misc_deregister
misc_register
nonseekable_open
prandom_u32
prepare_to_wait

View File

@ -51,6 +51,7 @@
destroy_workqueue
dev_driver_string
_dev_err
dev_fwnode
dev_get_regmap
device_create_file
device_init_wakeup
@ -65,6 +66,7 @@
__dev_kfree_skb_any
devm_add_action
devm_clk_bulk_get
devm_clk_bulk_get_all
devm_clk_get
devm_clk_get_optional
devm_clk_hw_register
@ -87,6 +89,7 @@
devm_reset_control_array_get
__devm_reset_control_get
devm_reset_controller_register
devm_usb_get_phy_by_phandle
devm_watchdog_register_device
dev_set_name
_dev_warn
@ -182,6 +185,8 @@
kstrtouint
ktime_get
ktime_get_mono_fast_ns
__list_add_valid
__list_del_entry_valid
memcpy
memset
mii_ethtool_gset
@ -425,125 +430,21 @@
__warn_printk
watchdog_init_timeout
# required by asix.ko
eth_mac_addr
eth_platform_get_mac_address
genphy_resume
get_random_bytes
mdiobus_alloc_size
mdiobus_free
__mdiobus_register
mdiobus_unregister
memmove
mii_check_media
mii_link_ok
netdev_err
phy_connect
phy_disconnect
phy_ethtool_get_link_ksettings
phy_ethtool_nway_reset
phy_ethtool_set_link_ksettings
phy_mii_ioctl
phy_print_status
phy_start
phy_stop
skb_copy_expand
usbnet_change_mtu
usbnet_get_drvinfo
usbnet_get_link
usbnet_get_link_ksettings
usbnet_set_link_ksettings
usbnet_unlink_rx_urbs
# required by ax88179_178a.ko
ethtool_op_get_link
mii_ethtool_get_link_ksettings
mii_ethtool_set_link_ksettings
netif_carrier_on
pskb_expand_head
skb_trim
# required by regmap-spmi.ko
__devm_regmap_init
__regmap_init
spmi_ext_register_read
spmi_ext_register_readl
spmi_ext_register_write
spmi_ext_register_writel
spmi_register_read
spmi_register_write
spmi_register_zero_write
# required by btqca.ko
__hci_cmd_send
__hci_cmd_sync_ev
# required by clk-qcom.ko
__clk_determine_rate
__clk_get_name
clk_hw_get_flags
clk_hw_get_name
clk_hw_get_num_parents
clk_hw_get_parent_by_index
clk_hw_round_rate
__clk_is_enabled
__clk_mux_determine_rate_closest
divider_ro_round_rate_parent
of_find_node_opts_by_path
of_genpd_add_provider_onecell
of_genpd_del_provider
of_prop_next_u32
pm_genpd_add_subdomain
pm_genpd_init
pm_genpd_remove_subdomain
# required by clk-rpmh.ko
clk_hw_is_prepared
# required by clk-scmi.ko
clk_hw_set_rate_range
scmi_driver_register
scmi_driver_unregister
# required by dwc3-qcom.ko
devm_extcon_register_notifier
of_clk_get_parent_count
# required by dwc3.ko
device_property_read_u8_array
devm_kmemdup
extcon_find_edev_by_node
extcon_get_extcon_dev
of_usb_get_phy_mode
phy_pm_runtime_get_sync
phy_pm_runtime_put_sync
platform_get_irq_byname_optional
system_freezable_wq
usb_add_gadget_udc
usb_decode_ctrl
usb_del_gadget_udc
usb_ep_set_maxpacket_limit
usb_gadget_giveback_request
usb_gadget_map_request_by_dev
usb_gadget_set_state
usb_gadget_udc_reset
usb_gadget_unmap_request_by_dev
usb_get_maximum_speed
# required by ehci-hcd.ko
device_remove_file
ehci_cf_port_reset_rwsem
hrtimer_cancel
ktime_get_with_offset
usb_for_each_dev
# required by ehci-pci.ko
pci_clear_mwi
pci_find_capability
usb_amd_hang_symptom_quirk
# required by ehci-platform.ko
device_pm_wait_for_dev
usb_of_get_companion_dev
# required by extcon-usb-gpio.ko
devm_extcon_dev_allocate
devm_extcon_dev_register
extcon_set_state_sync
gpiod_get_value_cansleep
gpiod_set_debounce
gpiod_to_irq
system_power_efficient_wq
# required by hci_uart.ko
bit_wait_timeout
hci_alloc_dev
@ -577,14 +478,41 @@
tty_unthrottle
wake_up_bit
# required by i2c-qcom-geni.ko
i2c_get_dma_safe_msg_buf
i2c_put_dma_safe_msg_buf
of_machine_is_compatible
# required by clk-scmi.ko
clk_hw_set_rate_range
scmi_driver_register
scmi_driver_unregister
# required by i2c-qup.ko
_dev_notice
__usecs_to_jiffies
# required by clk-qcom.ko
__clk_determine_rate
__clk_get_name
clk_hw_get_flags
clk_hw_get_name
clk_hw_get_num_parents
clk_hw_get_parent_by_index
clk_hw_round_rate
__clk_is_enabled
__clk_mux_determine_rate_closest
divider_ro_round_rate_parent
of_find_node_opts_by_path
of_genpd_add_provider_onecell
of_genpd_del_provider
of_prop_next_u32
pm_genpd_add_subdomain
pm_genpd_init
pm_genpd_remove_subdomain
# required by clk-rpmh.ko
clk_hw_is_prepared
# required by extcon-usb-gpio.ko
devm_extcon_dev_allocate
devm_extcon_dev_register
extcon_set_state_sync
gpiod_get_value_cansleep
gpiod_set_debounce
gpiod_to_irq
system_power_efficient_wq
# required by lt9611.ko
__devm_regmap_init_i2c
@ -601,11 +529,6 @@
of_find_mipi_dsi_host_by_node
regmap_multi_reg_write
# required by mdt_loader.ko
qcom_scm_pas_init_image
qcom_scm_pas_mem_setup
request_firmware_into_buf
# required by msm.ko
__bitmap_andnot
__bitmap_weight
@ -634,7 +557,6 @@
devfreq_resume_device
devfreq_suspend_device
device_find_child
devm_clk_bulk_get_all
devm_clk_register
devm_devfreq_add_device
devm_ioremap_nocache
@ -922,26 +844,97 @@
ww_mutex_lock_interruptible
ww_mutex_unlock
# required by msm_serial.ko
iomem_resource
__release_region
__request_region
tty_termios_baud_rate
# required by qcom_hwspinlock.ko
devm_regmap_field_alloc
hwspin_lock_register
hwspin_lock_unregister
regmap_field_read
regmap_field_update_bits_base
# required by i2c-qcom-geni.ko
i2c_get_dma_safe_msg_buf
i2c_put_dma_safe_msg_buf
of_machine_is_compatible
# required by i2c-qup.ko
_dev_notice
__usecs_to_jiffies
# required by pm8941-pwrkey.ko
devm_input_allocate_device
input_event
input_register_device
input_set_capability
# required by qnoc-sdm845.ko
icc_link_create
icc_node_add
icc_node_create
icc_node_del
icc_node_destroy
icc_provider_add
icc_provider_del
of_icc_xlate_onecell
rpmh_invalidate
rpmh_write_batch
# required by qcom-spmi-pmic.ko
__spmi_driver_register
# required by sdhci-msm.ko
mmc_of_parse
mmc_send_tuning
regulator_is_supported_voltage
sdhci_add_host
sdhci_enable_clk
sdhci_get_property
sdhci_pltfm_free
sdhci_pltfm_init
sdhci_remove_host
sdhci_reset
sdhci_set_bus_width
# required by asix.ko
eth_mac_addr
eth_platform_get_mac_address
genphy_resume
get_random_bytes
mdiobus_alloc_size
mdiobus_free
__mdiobus_register
mdiobus_unregister
memmove
mii_check_media
mii_link_ok
netdev_err
phy_connect
phy_disconnect
phy_ethtool_get_link_ksettings
phy_ethtool_nway_reset
phy_ethtool_set_link_ksettings
phy_mii_ioctl
phy_print_status
phy_start
phy_stop
skb_copy_expand
usbnet_change_mtu
usbnet_get_drvinfo
usbnet_get_link
usbnet_get_link_ksettings
usbnet_set_link_ksettings
usbnet_unlink_rx_urbs
# required by ax88179_178a.ko
ethtool_op_get_link
mii_ethtool_get_link_ksettings
mii_ethtool_set_link_ksettings
netif_carrier_on
pskb_expand_head
skb_trim
# required by nvmem_qfprom.ko
devm_nvmem_register
# required by ohci-hcd.ko
flush_work
gen_pool_dma_alloc_align
gen_pool_dma_zalloc_align
gen_pool_free_owner
sb800_prefetch
# required by ohci-pci.ko
pci_get_slot
usb_amd_prefetch_quirk
# required by phy-qcom-qmp.ko
of_clk_get_by_name
of_clk_hw_simple_get
@ -973,109 +966,6 @@
# required by pinctrl-spmi-mpp.ko
platform_irq_count
# required by pm8941-pwrkey.ko
devm_input_allocate_device
input_event
input_register_device
input_set_capability
# required by qcom-rpmh-regulator.ko
of_get_regulator_init_data
of_node_name_eq
regulator_list_voltage_linear_range
rpmh_write
# required by qcom-spmi-pmic.ko
__spmi_driver_register
# required by qcom-wdt.ko
platform_get_irq_optional
# required by qcom_geni_serial.ko
console_stop
devm_platform_ioremap_resource
handle_sysrq
kstrtoint
oops_in_progress
_raw_spin_trylock
tty_insert_flip_string_fixed_flag
uart_console_device
uart_console_write
uart_parse_options
uart_set_options
# required by qcom_hwspinlock.ko
devm_regmap_field_alloc
hwspin_lock_register
hwspin_lock_unregister
regmap_field_read
regmap_field_update_bits_base
# required by qcom_spmi-regulator.ko
jiffies_to_usecs
regulator_disable_regmap
regulator_enable_regmap
regulator_is_enabled_regmap
smp_call_function_single
# required by qnoc-sdm845.ko
icc_link_create
icc_node_add
icc_node_create
icc_node_del
icc_node_destroy
icc_provider_add
icc_provider_del
of_icc_xlate_onecell
rpmh_invalidate
rpmh_write_batch
# required by qrtr-tun.ko
_copy_to_iter
misc_deregister
misc_register
schedule
# required by qrtr.ko
capable
datagram_poll
idr_alloc
idr_get_next
idr_remove
lock_sock_nested
netlink_capable
__nla_parse
proto_register
proto_unregister
refcount_dec_and_mutex_lock
refcount_dec_checked
release_sock
rtnl_is_locked
rtnl_register_module
rtnl_unregister
sk_alloc
skb_copy_bits
skb_copy_datagram_iter
skb_free_datagram
__skb_pad
skb_recv_datagram
skb_set_owner_w
sk_free
sock_alloc_send_skb
sock_gettstamp
sock_init_data
sock_no_accept
sock_no_getsockopt
sock_no_listen
sock_no_mmap
sock_no_sendpage
sock_no_setsockopt
sock_no_shutdown
sock_no_socketpair
sock_queue_rcv_skb
sock_register
sock_unregister
# required by reboot-mode.ko
devres_add
devres_alloc_node
@ -1084,16 +974,51 @@
kfree_const
kstrdup_const
# required by regmap-spmi.ko
__devm_regmap_init
__regmap_init
spmi_ext_register_read
spmi_ext_register_readl
spmi_ext_register_write
spmi_ext_register_writel
spmi_register_read
spmi_register_write
spmi_register_zero_write
# required by qcom-rpmh-regulator.ko
of_get_regulator_init_data
of_node_name_eq
regulator_list_voltage_linear_range
rpmh_write
# required by qcom_spmi-regulator.ko
jiffies_to_usecs
regulator_disable_regmap
regulator_enable_regmap
regulator_is_enabled_regmap
smp_call_function_single
# required by rtc-pm8xxx.ko
devm_request_any_context_irq
devm_rtc_device_register
rtc_time64_to_tm
rtc_tm_to_time64
rtc_update_irq
rtc_valid_tm
# required by ufs-qcom.ko
print_hex_dump
ufshcd_dme_get_attr
ufshcd_dme_set_attr
ufshcd_dump_regs
ufshcd_get_local_unipro_ver
ufshcd_get_pwr_dev_param
ufshcd_hold
ufshcd_pltfrm_init
ufshcd_pltfrm_resume
ufshcd_pltfrm_runtime_idle
ufshcd_pltfrm_runtime_resume
ufshcd_pltfrm_runtime_suspend
ufshcd_pltfrm_shutdown
ufshcd_pltfrm_suspend
ufshcd_release
ufshcd_remove
ufshcd_uic_hibern8_enter
ufshcd_uic_hibern8_exit
# required by mdt_loader.ko
qcom_scm_pas_init_image
qcom_scm_pas_mem_setup
request_firmware_into_buf
# required by rmtfs_mem.ko
alloc_chrdev_region
@ -1110,11 +1035,150 @@
remap_pfn_range
unregister_chrdev_region
# required by smem.ko
devm_ioremap_wc
hwspin_lock_free
hwspin_lock_request_specific
__hwspin_lock_timeout
__hwspin_unlock
of_hwspin_lock_get_id
# required by smsm.ko
handle_nested_irq
irq_domain_xlate_twocell
qcom_smem_state_register
qcom_smem_state_unregister
# required by spmi-pmic-arb.ko
handle_edge_irq
irq_domain_free_irqs_common
irq_domain_set_info
spmi_controller_add
spmi_controller_alloc
spmi_controller_remove
# required by msm_serial.ko
iomem_resource
__release_region
__request_region
tty_termios_baud_rate
# required by qcom_geni_serial.ko
console_stop
devm_platform_ioremap_resource
handle_sysrq
kstrtoint
oops_in_progress
_raw_spin_trylock
tty_insert_flip_string_fixed_flag
uart_console_device
uart_console_write
uart_parse_options
uart_set_options
# required by ulpi.ko
bus_register
bus_unregister
driver_register
of_device_modalias
of_device_request_module
of_device_uevent_modalias
__request_module
# required by dwc3-qcom.ko
devm_extcon_register_notifier
of_clk_get_parent_count
# required by dwc3.ko
device_property_read_u8_array
devm_usb_get_phy
extcon_find_edev_by_node
extcon_get_extcon_dev
of_usb_get_phy_mode
phy_pm_runtime_get_sync
phy_pm_runtime_put_sync
platform_get_irq_byname_optional
system_freezable_wq
usb_add_gadget_udc
usb_decode_ctrl
usb_del_gadget_udc
usb_ep_set_maxpacket_limit
usb_gadget_giveback_request
usb_gadget_map_request_by_dev
usb_gadget_set_state
usb_gadget_udc_reset
usb_gadget_unmap_request_by_dev
usb_get_maximum_speed
# required by ehci-hcd.ko
device_remove_file
ehci_cf_port_reset_rwsem
hrtimer_cancel
ktime_get_with_offset
usb_for_each_dev
# required by ehci-pci.ko
pci_clear_mwi
pci_find_capability
usb_amd_hang_symptom_quirk
# required by ehci-platform.ko
device_pm_wait_for_dev
usb_of_get_companion_dev
# required by ohci-hcd.ko
flush_work
gen_pool_dma_alloc_align
gen_pool_dma_zalloc_align
gen_pool_free_owner
sb800_prefetch
# required by ohci-pci.ko
pci_get_slot
usb_amd_prefetch_quirk
# required by xhci-hcd.ko
add_timer
cancel_delayed_work
mod_delayed_work_on
__num_online_cpus
param_ops_ullong
pci_alloc_irq_vectors_affinity
pci_free_irq_vectors
pci_irq_vector
radix_tree_maybe_preload
sg_pcopy_from_buffer
sg_pcopy_to_buffer
trace_print_symbols_seq
usb_amd_pt_check_port
usb_asmedia_modifyflowcontrol
usb_disable_xhci_ports
usb_hcd_irq
usb_hcd_map_urb_for_dma
usb_wakeup_notification
wait_for_completion
# required by xhci-pci-renesas.ko
device_release_driver
pci_dev_get
pci_write_config_dword
request_firmware_nowait
# required by xhci-pci.ko
pci_d3cold_disable
pci_set_power_state
usb_create_shared_hcd
usb_enable_intel_xhci_ports
# required by xhci-plat-hcd.ko
of_usb_host_tpl_support
pci_bus_type
__usb_create_hcd
# required by roles.ko
__class_create
class_destroy
class_find_device
dev_fwnode
device_connection_find_match
device_match_fwnode
device_match_name
@ -1126,13 +1190,8 @@
__sysfs_match_string
try_module_get
# required by rtc-pm8xxx.ko
devm_request_any_context_irq
devm_rtc_device_register
rtc_time64_to_tm
rtc_tm_to_time64
rtc_update_irq
rtc_valid_tm
# required by qcom-wdt.ko
platform_get_irq_optional
# required by sdcardfs.ko
__break_lease
@ -1224,32 +1283,51 @@
vfs_unlink2
vfs_write
# required by sdhci-msm.ko
mmc_of_parse
mmc_send_tuning
regulator_is_supported_voltage
sdhci_add_host
sdhci_enable_clk
sdhci_get_property
sdhci_pltfm_free
sdhci_pltfm_init
sdhci_remove_host
sdhci_reset
sdhci_set_bus_width
# required by qrtr-tun.ko
_copy_to_iter
misc_deregister
misc_register
schedule
# required by smem.ko
devm_ioremap_wc
hwspin_lock_free
hwspin_lock_request_specific
__hwspin_lock_timeout
__hwspin_unlock
of_hwspin_lock_get_id
# required by smsm.ko
handle_nested_irq
irq_domain_xlate_twocell
qcom_smem_state_register
qcom_smem_state_unregister
# required by qrtr.ko
capable
datagram_poll
idr_alloc
idr_get_next
idr_remove
lock_sock_nested
netlink_capable
__nla_parse
proto_register
proto_unregister
refcount_dec_and_mutex_lock
refcount_dec_checked
release_sock
rtnl_is_locked
rtnl_register_module
rtnl_unregister
sk_alloc
skb_copy_bits
skb_copy_datagram_iter
skb_free_datagram
__skb_pad
skb_recv_datagram
skb_set_owner_w
sk_free
sock_alloc_send_skb
sock_gettstamp
sock_init_data
sock_no_accept
sock_no_getsockopt
sock_no_listen
sock_no_mmap
sock_no_sendpage
sock_no_setsockopt
sock_no_shutdown
sock_no_socketpair
sock_queue_rcv_skb
sock_register
sock_unregister
# required by snd-soc-hdmi-codec.ko
devm_snd_soc_register_component
@ -1261,77 +1339,3 @@
snd_pcm_hw_constraint_eld
snd_soc_dapm_add_routes
snd_soc_jack_report
# required by spmi-pmic-arb.ko
handle_edge_irq
irq_domain_free_irqs_common
irq_domain_set_info
spmi_controller_add
spmi_controller_alloc
spmi_controller_remove
# required by ufs-qcom.ko
print_hex_dump
ufshcd_dme_get_attr
ufshcd_dme_set_attr
ufshcd_dump_regs
ufshcd_get_local_unipro_ver
ufshcd_get_pwr_dev_param
ufshcd_hold
ufshcd_pltfrm_init
ufshcd_pltfrm_resume
ufshcd_pltfrm_runtime_idle
ufshcd_pltfrm_runtime_resume
ufshcd_pltfrm_runtime_suspend
ufshcd_pltfrm_shutdown
ufshcd_pltfrm_suspend
ufshcd_release
ufshcd_remove
ufshcd_uic_hibern8_enter
ufshcd_uic_hibern8_exit
# required by ulpi.ko
bus_register
bus_unregister
driver_register
of_device_modalias
of_device_request_module
of_device_uevent_modalias
__request_module
# required by xhci-hcd.ko
add_timer
cancel_delayed_work
mod_delayed_work_on
__num_online_cpus
param_ops_ullong
pci_alloc_irq_vectors_affinity
pci_free_irq_vectors
pci_irq_vector
radix_tree_maybe_preload
sg_pcopy_from_buffer
sg_pcopy_to_buffer
usb_amd_pt_check_port
usb_asmedia_modifyflowcontrol
usb_disable_xhci_ports
usb_hcd_irq
usb_hcd_map_urb_for_dma
usb_wakeup_notification
wait_for_completion
# required by xhci-pci-renesas.ko
device_release_driver
pci_dev_get
pci_write_config_dword
request_firmware_nowait
# required by xhci-pci.ko
pci_d3cold_disable
pci_set_power_state
usb_create_shared_hcd
usb_enable_intel_xhci_ports
# required by xhci-plat-hcd.ko
of_usb_host_tpl_support
pci_bus_type
__usb_create_hcd

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1283,6 +1283,8 @@
led_trigger_register_simple
led_trigger_unregister
led_trigger_unregister_simple
__list_add_valid
__list_del_entry_valid
list_sort
llist_add_batch
llist_reverse_order
@ -1839,6 +1841,7 @@
register_pm_notifier
register_reboot_notifier
register_restart_handler
__register_rpmsg_driver
register_shrinker
register_syscore_ops
register_sysctl_table
@ -1925,6 +1928,15 @@
rpmh_write
rpmh_write_async
rpmh_write_batch
rpmsg_create_ept
rpmsg_destroy_ept
rpmsg_get_sigs
rpmsg_poll
rpmsg_register_device
rpmsg_send
rpmsg_set_sigs
rpmsg_trysend
rpmsg_unregister_device
rtc_class_close
rtc_class_open
rtc_read_time
@ -2422,6 +2434,7 @@
unregister_pernet_subsys
unregister_pm_notifier
unregister_reboot_notifier
unregister_rpmsg_driver
unregister_shrinker
unregister_syscore_ops
unregister_sysctl_table
@ -2509,6 +2522,7 @@
usb_hcd_pci_probe
usb_hcd_pci_remove
usb_hcd_pci_shutdown
usb_hcd_platform_shutdown
usb_hcd_poll_rh_status
usb_hcd_resume_root_hub
usb_hcd_start_port_resume

View File

@ -31,6 +31,8 @@
cancel_work_sync
cdev_add
cdev_del
cdev_device_add
cdev_device_del
cdev_init
__cfi_slowpath
__check_object_size
@ -52,6 +54,7 @@
clk_unprepare
complete
complete_all
config_ep_by_speed
__const_udelay
cpu_hwcap_keys
cpu_hwcaps
@ -61,7 +64,6 @@
__cpu_possible_mask
csum_ipv6_magic
csum_partial
debug_smp_processor_id
default_llseek
delayed_work_timer_fn
del_timer
@ -85,11 +87,13 @@
device_property_read_u32_array
device_register
device_remove_file
device_set_wakeup_capable
device_unregister
_dev_info
__dev_kfree_skb_any
devm_add_action
devm_backlight_device_register
devm_clk_bulk_get_all
devm_clk_get
devm_free_irq
devm_gpiochip_add_data
@ -113,6 +117,8 @@
devm_regulator_register
devm_request_threaded_irq
devm_spi_register_controller
devm_usb_get_phy
devm_usb_get_phy_by_phandle
dev_queue_xmit
dev_set_name
_dev_warn
@ -162,6 +168,7 @@
__free_pages
free_pages_exact
free_percpu
free_reserved_area
freezing_slow_path
fwnode_property_present
fwnode_property_read_string
@ -173,13 +180,16 @@
gen_pool_alloc_algo_owner
gen_pool_create
gen_pool_free_owner
get_cpu_device
__get_free_pages
get_random_bytes
gpiochip_get_data
gpiochip_line_is_irq
gpiod_direction_input
gpiod_direction_output_raw
gpiod_get_raw_value
gpiod_set_raw_value
gpiod_to_chip
gpiod_to_irq
gpio_free
gpio_request
@ -220,7 +230,6 @@
jiffies
jiffies_to_msecs
kernel_kobj
kernel_read
__kfifo_alloc
__kfifo_free
__kfifo_in
@ -240,6 +249,7 @@
kmemdup
kobject_create_and_add
kobject_uevent_env
kstrndup
kstrtobool
kstrtoint
kstrtoll
@ -263,6 +273,7 @@
msleep
__mutex_init
mutex_lock
mutex_lock_interruptible
mutex_trylock
mutex_unlock
nd_tbl
@ -291,11 +302,13 @@
of_find_property
of_get_child_by_name
of_get_named_gpio_flags
of_get_next_available_child
of_get_next_child
of_get_property
of_get_regulator_init_data
of_graph_get_remote_node
of_match_node
of_nvmem_cell_get
of_parse_phandle
of_parse_phandle_with_args
of_platform_depopulate
@ -304,6 +317,7 @@
of_property_match_string
of_property_read_string
of_property_read_u32_index
of_property_read_u64
of_property_read_variable_u32_array
of_prop_next_string
panic
@ -357,8 +371,6 @@
power_supply_get_drvdata
power_supply_get_property
power_supply_put
preempt_count_add
preempt_count_sub
preempt_schedule
preempt_schedule_notrace
prepare_to_wait_event
@ -479,6 +491,8 @@
strncpy_from_user
strnlen
strstr
__sw_hweight32
__sw_hweight64
syscon_regmap_lookup_by_phandle
syscon_regmap_lookup_by_phandle_args
sysfs_create_file_ns
@ -498,6 +512,7 @@
tasklet_init
tasklet_kill
__tasklet_schedule
thermal_zone_get_zone_by_name
trace_define_field
trace_event_buffer_commit
trace_event_buffer_reserve
@ -543,15 +558,28 @@
usb_control_msg
usb_del_gadget_udc
usb_deregister
usb_ep_alloc_request
usb_ep_autoconfig
usb_ep_dequeue
usb_ep_enable
usb_ep_free_request
usb_ep_queue
usb_ep_set_maxpacket_limit
usb_find_common_endpoints
usb_free_coherent
usb_free_urb
usb_function_register
usb_function_unregister
usb_gadget_giveback_request
usb_gadget_udc_reset
usb_get_dr_mode
usb_get_intf
usb_hcd_is_primary_hcd
usb_interface_id
usb_kill_urb
usb_phy_get_charger_current
usb_phy_set_charger_current
usb_put_function_instance
usb_put_intf
usb_register_driver
usb_submit_urb
@ -563,6 +591,7 @@
vm_map_ram
vm_unmap_ram
vsnprintf
vunmap
wait_for_completion
wait_for_completion_interruptible
wait_for_completion_interruptible_timeout
@ -596,6 +625,17 @@
usb_get_from_anchor
usb_ifnum_to_if
# required by charger-manager.ko
alarm_cancel
alarm_expires_remaining
alarm_init
alarm_start
alarmtimer_get_rtcdev
devm_kasprintf
regulator_force_disable
regulator_set_current_limit
thermal_zone_get_temp
# required by clk-sprd.ko
clk_hw_get_num_parents
clk_hw_get_parent
@ -686,6 +726,16 @@
i2c_add_numbered_adapter
i2c_del_adapter
# required by img_mem.ko
dma_direct_map_sg
dma_direct_sync_sg_for_cpu
dma_direct_sync_sg_for_device
dma_direct_unmap_sg
idr_get_next
sg_alloc_table
sg_free_table
vsprintf
# required by ims_bridge.ko
in4_pton
in6_pton
@ -711,9 +761,68 @@
strim
xfrm_lookup
# required by kfifo_buf.ko
devres_add
devres_alloc_node
devres_free
devres_release
iio_buffer_init
iio_buffer_put
__kfifo_to_user
# required by leds-sc27xx-bltc.ko
devm_led_classdev_register_ext
# required by mali_gondul.ko
anon_inode_getfd
__bitmap_weight
clear_page
devfreq_add_device
devfreq_remove_device
devfreq_resume_device
devfreq_suspend_device
dev_pm_opp_disable
dev_pm_opp_find_freq_floor
dev_pm_opp_put_regulators
dev_pm_opp_set_regulators
dma_fence_get_status
dma_fence_remove_callback
downgrade_write
down_trylock
get_user_pages
get_user_pages_fast
get_user_pages_remote
hrtimer_active
hrtimer_forward
iomem_resource
kstrtobool_from_user
memstart_addr
__mmdrop
nonseekable_open
of_property_read_variable_u64_array
param_ops_byte
rb_erase
rb_first
rb_insert_color
rb_next
rb_prev
rb_replace_node
regulator_get_optional
__release_region
remap_vmalloc_range
__request_region
reservation_ww_class
seq_open
__seq_open_private
seq_release_private
seq_write
set_page_dirty_lock
strcspn
system_highpri_wq
vmalloc_user
ww_mutex_lock
ww_mutex_unlock
# required by microarray_fp.ko
cdev_alloc
@ -760,9 +869,15 @@
pci_stop_and_remove_bus_device
pci_unlock_rescan_remove
# required by phy-sprd-sharkl3.ko
usb_add_phy_dev
usb_phy_set_charger_state
usb_remove_phy
# required by pinctrl-sprd.ko
devm_platform_ioremap_resource
of_property_read_string_helper
pinconf_generic_parse_dt_config
pinctrl_dev_get_drvdata
pinctrl_register
pinctrl_unregister
@ -770,6 +885,7 @@
pinctrl_utils_add_map_mux
pinctrl_utils_free_map
pinctrl_utils_reserve_map
pin_get_name
# required by pvrsrvkm.ko
autoremove_wake_function
@ -865,6 +981,15 @@
pwmchip_add
pwmchip_remove
# required by pwm_bl.ko
backlight_device_register
backlight_device_unregister
devm_pwm_get
gpiod_get_direction
int_pow
pwm_free
pwm_request
# required by roles.ko
fwnode_connection_find_match
fwnode_get_parent
@ -902,12 +1027,26 @@
power_supply_find_ocv2cap_table
power_supply_ocv2cap_simple
power_supply_put_battery_info
power_supply_temp2resist_simple
# required by sc27xx_pd.ko
device_get_named_child_node
devm_extcon_register_notifier_all
devm_regulator_get_optional
# required by sc27xx_typec.ko
devm_extcon_dev_allocate
devm_extcon_dev_register
extcon_set_state_sync
typec_register_partner
typec_register_port
typec_set_data_role
typec_set_pwr_opmode
typec_set_pwr_role
typec_set_vconn_role
typec_unregister_partner
typec_unregister_port
# required by sc27xx-vibra.ko
input_ff_create_memless
@ -1065,7 +1204,6 @@
iio_device_alloc
iio_device_free
iio_device_unregister
kernel_write
ktime_get_with_offset
param_array_ops
unregister_pm_notifier
@ -1164,6 +1302,20 @@
snd_ctl_boolean_mono_info
snd_pcm_hw_constraint_list
# required by sprd-cpufreq-common.ko
dev_pm_opp_remove
# required by sprd-cpufreqhw.ko
arch_set_freq_scale
cpufreq_generic_attr
cpufreq_generic_frequency_table_verify
cpufreq_generic_get
cpufreq_generic_suspend
cpufreq_register_driver
cpufreq_unregister_driver
dev_pm_opp_free_cpufreq_table
dev_pm_opp_init_cpufreq_table
# required by sprd-dpu.ko
component_add
component_bind_all
@ -1179,12 +1331,14 @@
drm_atomic_helper_async_commit
drm_atomic_helper_check
drm_atomic_helper_cleanup_planes
drm_atomic_helper_commit
drm_atomic_helper_commit_cleanup_done
drm_atomic_helper_commit_hw_done
drm_atomic_helper_commit_modeset_disables
drm_atomic_helper_commit_modeset_enables
drm_atomic_helper_commit_planes
drm_atomic_helper_commit_tail
drm_atomic_helper_commit_tail_rpm
drm_atomic_helper_connector_destroy_state
drm_atomic_helper_connector_duplicate_state
drm_atomic_helper_connector_reset
@ -1311,6 +1465,15 @@
of_dma_controller_register
of_dma_simple_xlate
# required by sprd-gsp.ko
__kthread_init_worker
kthread_queue_work
kthread_worker_fn
# required by sprd-hwdvfs-sharkl3.ko
__i2c_transfer
rt_mutex_trylock
# required by sprd_hwspinlock.ko
hwspin_lock_register
hwspin_lock_unregister
@ -1331,6 +1494,11 @@
# required by sprd_cproc.ko
of_get_parent
# required by sprd_cpu_cooling.ko
cpu_down
cpufreq_get_policy
cpu_up
# required by sprd_mcd.ko
gpiod_set_value_cansleep
kernel_power_off
@ -1344,6 +1512,11 @@
pci_save_state
pci_set_power_state
# required by sprd_pm_domain.ko
kfree_const
kstrdup_const
of_genpd_add_subdomain
# required by sprd_powerdebug.ko
cpu_pm_register_notifier
pm_print_active_wakeup_sources
@ -1352,6 +1525,21 @@
# required by sprd_sdio_fm.ko
vfs_llseek
# required by sprd_soc_thm.ko
thermal_zone_device_unregister
thermal_zone_device_update
thermal_zone_of_sensor_register
# required by sprd_vdsp.ko
bsearch
devm_kstrdup
__memcpy_toio
of_match_device
of_n_addr_cells
of_n_size_cells
of_translate_address
sort
# required by sprd_wdt.ko
devm_watchdog_register_device
watchdog_init_timeout
@ -1485,6 +1673,10 @@
usb_sg_wait
usb_unlink_urb
# required by usb_f_mtp.ko
usb_os_desc_prepare_interf_dir
usb_string_id
# required by usbserial.ko
device_del
driver_attach
@ -1503,6 +1695,16 @@
usb_store_new_id
usb_unpoison_urb
# required by vha.ko
clk_bulk_get
device_wakeup_disable
devm_iounmap
__ndelay
param_ops_long
param_ops_ulong
pm_relax
pm_stay_awake
# required by virtio_crypto.ko
cpu_bit_bitmap
cpus_read_lock
@ -1519,3 +1721,39 @@
scatterwalk_map_and_copy
sg_init_one
sg_nents_for_len
# required by xhci-hcd.ko
dma_pool_alloc
dma_pool_create
dma_pool_destroy
dma_pool_free
__num_online_cpus
param_ops_ullong
pci_alloc_irq_vectors_affinity
pci_free_irq_vectors
pci_irq_vector
radix_tree_delete
radix_tree_insert
radix_tree_lookup
radix_tree_maybe_preload
sg_pcopy_from_buffer
sg_pcopy_to_buffer
usb_amd_dev_put
usb_amd_pt_check_port
usb_amd_quirk_pll_disable
usb_amd_quirk_pll_enable
usb_asmedia_modifyflowcontrol
usb_disable_xhci_ports
usb_hcd_end_port_resume
usb_hc_died
usb_hcd_irq
usb_hcd_start_port_resume
usb_hub_clear_tt_buffer
usb_root_hub_lost_power
usb_wakeup_notification
# required by xhci-plat-hcd.ko
devm_clk_get_optional
of_usb_host_tpl_support
pci_bus_type
__usb_create_hcd

View File

@ -309,13 +309,15 @@ endif
ifeq ($(CONFIG_STACKPROTECTOR_PER_TASK),y)
prepare: stack_protector_prepare
stack_protector_prepare: prepare0
$(eval KBUILD_CFLAGS += \
$(eval SSP_PLUGIN_CFLAGS := \
-fplugin-arg-arm_ssp_per_task_plugin-tso=$(shell \
awk '{if ($$2 == "THREAD_SZ_ORDER") print $$3;}'\
include/generated/asm-offsets.h) \
-fplugin-arg-arm_ssp_per_task_plugin-offset=$(shell \
awk '{if ($$2 == "TI_STACK_CANARY") print $$3;}'\
include/generated/asm-offsets.h))
$(eval KBUILD_CFLAGS += $(SSP_PLUGIN_CFLAGS))
$(eval GCC_PLUGINS_CFLAGS += $(SSP_PLUGIN_CFLAGS))
endif
all: $(notdir $(KBUILD_IMAGE))

View File

@ -101,7 +101,6 @@ clean-files += piggy_data lib1funcs.S ashldi3.S bswapsdi2.S \
$(libfdt) $(libfdt_hdrs) hyp-stub.S
KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING
KBUILD_CFLAGS += $(DISABLE_ARM_SSP_PER_TASK_PLUGIN)
ifeq ($(CONFIG_FUNCTION_TRACER),y)
ORIG_CFLAGS := $(KBUILD_CFLAGS)
@ -117,7 +116,8 @@ CFLAGS_fdt_ro.o := $(nossp_flags)
CFLAGS_fdt_rw.o := $(nossp_flags)
CFLAGS_fdt_wip.o := $(nossp_flags)
ccflags-y := -fpic $(call cc-option,-mno-single-pic-base,) -fno-builtin -I$(obj)
ccflags-y := -fpic $(call cc-option,-mno-single-pic-base,) -fno-builtin \
-I$(obj) $(DISABLE_ARM_SSP_PER_TASK_PLUGIN)
asflags-y := -DZIMAGE
# Supply kernel BSS size to the decompressor via a linker symbol.

View File

@ -112,6 +112,7 @@
&sdhci {
#address-cells = <1>;
#size-cells = <0>;
pinctrl-names = "default";
pinctrl-0 = <&emmc_gpio34 &gpclk2_gpio43>;
bus-width = <4>;
mmc-pwrseq = <&wifi_pwrseq>;

View File

@ -3413,6 +3413,7 @@
clocks = <&l4per3_clkctrl DRA7_L4PER3_TIMER13_CLKCTRL 24>;
clock-names = "fck";
interrupts = <GIC_SPI 339 IRQ_TYPE_LEVEL_HIGH>;
ti,timer-pwm;
};
};
@ -3441,6 +3442,7 @@
clocks = <&l4per3_clkctrl DRA7_L4PER3_TIMER14_CLKCTRL 24>;
clock-names = "fck";
interrupts = <GIC_SPI 340 IRQ_TYPE_LEVEL_HIGH>;
ti,timer-pwm;
};
};
@ -3469,6 +3471,7 @@
clocks = <&l4per3_clkctrl DRA7_L4PER3_TIMER15_CLKCTRL 24>;
clock-names = "fck";
interrupts = <GIC_SPI 341 IRQ_TYPE_LEVEL_HIGH>;
ti,timer-pwm;
};
};
@ -3497,6 +3500,7 @@
clocks = <&l4per3_clkctrl DRA7_L4PER3_TIMER16_CLKCTRL 24>;
clock-names = "fck";
interrupts = <GIC_SPI 342 IRQ_TYPE_LEVEL_HIGH>;
ti,timer-pwm;
};
};

View File

@ -148,6 +148,7 @@
#address-cells = <1>;
#size-cells = <1>;
ranges = <0x0 0x0 0x0 0xc0000000>;
dma-ranges = <0x80000000 0x0 0x80000000 0x80000000>;
ti,hwmods = "l3_main_1", "l3_main_2";
reg = <0x0 0x44000000 0x0 0x1000000>,
<0x0 0x45000000 0x0 0x1000>;
@ -184,6 +185,7 @@
device_type = "pci";
ranges = <0x81000000 0 0 0x03000 0 0x00010000
0x82000000 0 0x20013000 0x13000 0 0xffed000>;
dma-ranges = <0x02000000 0x0 0x00000000 0x00000000 0x1 0x00000000>;
bus-range = <0x00 0xff>;
#interrupt-cells = <1>;
num-lanes = <1>;
@ -238,6 +240,7 @@
device_type = "pci";
ranges = <0x81000000 0 0 0x03000 0 0x00010000
0x82000000 0 0x30013000 0x13000 0 0xffed000>;
dma-ranges = <0x02000000 0x0 0x00000000 0x00000000 0x1 0x00000000>;
bus-range = <0x00 0xff>;
#interrupt-cells = <1>;
num-lanes = <1>;

View File

@ -107,14 +107,14 @@
regulators {
vdd_arm: buck1 {
regulator-name = "vdd_arm";
regulator-min-microvolt = <730000>;
regulator-min-microvolt = <925000>;
regulator-max-microvolt = <1380000>;
regulator-always-on;
};
vdd_soc: buck2 {
regulator-name = "vdd_soc";
regulator-min-microvolt = <730000>;
regulator-min-microvolt = <1150000>;
regulator-max-microvolt = <1380000>;
regulator-always-on;
};

View File

@ -849,34 +849,46 @@
compatible = "ti,omap2-onenand";
reg = <0 0 0x20000>; /* CS0, offset 0, IO size 128K */
/*
* These timings are based on CONFIG_OMAP_GPMC_DEBUG=y reported
* bootloader set values when booted with v5.1
* (OneNAND Manufacturer: Samsung):
*
* cs0 GPMC_CS_CONFIG1: 0xfb001202
* cs0 GPMC_CS_CONFIG2: 0x00111100
* cs0 GPMC_CS_CONFIG3: 0x00020200
* cs0 GPMC_CS_CONFIG4: 0x11001102
* cs0 GPMC_CS_CONFIG5: 0x03101616
* cs0 GPMC_CS_CONFIG6: 0x90060000
*/
gpmc,sync-read;
gpmc,sync-write;
gpmc,burst-length = <16>;
gpmc,burst-read;
gpmc,burst-wrap;
gpmc,burst-write;
gpmc,device-width = <2>; /* GPMC_DEVWIDTH_16BIT */
gpmc,mux-add-data = <2>; /* GPMC_MUX_AD */
gpmc,device-width = <2>;
gpmc,mux-add-data = <2>;
gpmc,cs-on-ns = <0>;
gpmc,cs-rd-off-ns = <87>;
gpmc,cs-wr-off-ns = <87>;
gpmc,cs-rd-off-ns = <102>;
gpmc,cs-wr-off-ns = <102>;
gpmc,adv-on-ns = <0>;
gpmc,adv-rd-off-ns = <10>;
gpmc,adv-wr-off-ns = <10>;
gpmc,oe-on-ns = <15>;
gpmc,oe-off-ns = <87>;
gpmc,adv-rd-off-ns = <12>;
gpmc,adv-wr-off-ns = <12>;
gpmc,oe-on-ns = <12>;
gpmc,oe-off-ns = <102>;
gpmc,we-on-ns = <0>;
gpmc,we-off-ns = <87>;
gpmc,rd-cycle-ns = <112>;
gpmc,wr-cycle-ns = <112>;
gpmc,access-ns = <81>;
gpmc,page-burst-access-ns = <15>;
gpmc,we-off-ns = <102>;
gpmc,rd-cycle-ns = <132>;
gpmc,wr-cycle-ns = <132>;
gpmc,access-ns = <96>;
gpmc,page-burst-access-ns = <18>;
gpmc,bus-turnaround-ns = <0>;
gpmc,cycle2cycle-delay-ns = <0>;
gpmc,wait-monitoring-ns = <0>;
gpmc,clk-activation-ns = <5>;
gpmc,wr-data-mux-bus-ns = <30>;
gpmc,wr-access-ns = <81>;
gpmc,clk-activation-ns = <6>;
gpmc,wr-data-mux-bus-ns = <36>;
gpmc,wr-access-ns = <96>;
gpmc,sync-clk-ps = <15000>;
/*

View File

@ -143,6 +143,7 @@
#address-cells = <1>;
#size-cells = <1>;
ranges = <0 0 0 0xc0000000>;
dma-ranges = <0x80000000 0x0 0x80000000 0x80000000>;
ti,hwmods = "l3_main_1", "l3_main_2", "l3_main_3";
reg = <0 0x44000000 0 0x2000>,
<0 0x44800000 0 0x3000>,

View File

@ -323,8 +323,8 @@
interrupt-controller;
reg = <0 0x200>;
#interrupt-cells = <1>;
valid-mask = <0xFFFFFFFF>;
clear-mask = <0>;
valid-mask = <0xffffffff>;
clear-mask = <0xffffffff>;
};
timer0: timer@200 {

View File

@ -240,8 +240,8 @@
reg = <0 0x200>;
interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
#interrupt-cells = <1>;
valid-mask = <0xFFFFFFFF>;
clear-mask = <0>;
valid-mask = <0xffffffff>;
clear-mask = <0xffffffff>;
};
timer0: timer@200 {

View File

@ -482,7 +482,8 @@
};
&usbphy {
usb0_id_det-gpios = <&pio 7 11 GPIO_ACTIVE_HIGH>; /* PH11 */
usb0_id_det-gpios = <&pio 7 11 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; /* PH11 */
usb0_vbus_power-supply = <&usb_power_supply>;
usb0_vbus-supply = <&reg_drivevbus>;
usb1_vbus-supply = <&reg_vmain>;
usb2_vbus-supply = <&reg_vmain>;

View File

@ -266,6 +266,16 @@
#phy-cells = <1>;
};
ahci: sata@1c18000 {
compatible = "allwinner,sun8i-r40-ahci";
reg = <0x01c18000 0x1000>;
interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&ccu CLK_BUS_SATA>, <&ccu CLK_SATA>;
resets = <&ccu RST_BUS_SATA>;
reset-names = "ahci";
status = "disabled";
};
ehci1: usb@1c19000 {
compatible = "allwinner,sun8i-r40-ehci", "generic-ehci";
reg = <0x01c19000 0x100>;
@ -557,17 +567,6 @@
#size-cells = <0>;
};
ahci: sata@1c18000 {
compatible = "allwinner,sun8i-r40-ahci";
reg = <0x01c18000 0x1000>;
interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&ccu CLK_BUS_SATA>, <&ccu CLK_SATA>;
resets = <&ccu RST_BUS_SATA>;
reset-names = "ahci";
status = "disabled";
};
gmac: ethernet@1c50000 {
compatible = "allwinner,sun8i-r40-gmac";
syscon = <&ccu>;

View File

@ -92,6 +92,8 @@ static bool __init cntvct_functional(void)
* this.
*/
np = of_find_compatible_node(NULL, NULL, "arm,armv7-timer");
if (!np)
np = of_find_compatible_node(NULL, NULL, "arm,armv8-timer");
if (!np)
goto out_put;

View File

@ -20,6 +20,8 @@
};
&fman0 {
fsl,erratum-a050385;
/* these aliases provide the FMan ports mapping */
enet0: ethernet@e0000 {
};

View File

@ -119,12 +119,12 @@
ethernet@e4000 {
phy-handle = <&rgmii_phy1>;
phy-connection-type = "rgmii-txid";
phy-connection-type = "rgmii-id";
};
ethernet@e6000 {
phy-handle = <&rgmii_phy2>;
phy-connection-type = "rgmii-txid";
phy-connection-type = "rgmii-id";
};
ethernet@e8000 {

View File

@ -127,12 +127,12 @@
&fman0 {
ethernet@e4000 {
phy-handle = <&rgmii_phy1>;
phy-connection-type = "rgmii";
phy-connection-type = "rgmii-id";
};
ethernet@e6000 {
phy-handle = <&rgmii_phy2>;
phy-connection-type = "rgmii";
phy-connection-type = "rgmii-id";
};
ethernet@e8000 {

View File

@ -38,6 +38,7 @@ CONFIG_EMBEDDED=y
# CONFIG_SLAB_MERGE_DEFAULT is not set
CONFIG_SLAB_FREELIST_RANDOM=y
CONFIG_SLAB_FREELIST_HARDENED=y
CONFIG_SHUFFLE_PAGE_ALLOCATOR=y
CONFIG_PROFILING=y
CONFIG_ARCH_HISI=y
CONFIG_ARCH_QCOM=y
@ -307,6 +308,7 @@ CONFIG_POWER_RESET_HISI=y
# CONFIG_HWMON is not set
CONFIG_THERMAL=y
CONFIG_THERMAL_GOV_USER_SPACE=y
CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y
CONFIG_CPU_THERMAL=y
CONFIG_DEVFREQ_THERMAL=y
CONFIG_WATCHDOG=y
@ -379,13 +381,14 @@ CONFIG_HWSPINLOCK=y
CONFIG_MAILBOX=y
CONFIG_IOMMU_LIMIT_IOVA_ALIGNMENT=y
CONFIG_ARM_SMMU=y
CONFIG_REMOTEPROC=y
CONFIG_RPMSG_CHAR=y
CONFIG_QCOM_COMMAND_DB=y
CONFIG_QCOM_RPMH=y
CONFIG_DEVFREQ_GOV_PERFORMANCE=y
CONFIG_DEVFREQ_GOV_POWERSAVE=y
CONFIG_DEVFREQ_GOV_USERSPACE=y
CONFIG_DEVFREQ_GOV_PASSIVE=y
CONFIG_EXTCON=y
CONFIG_IIO=y
CONFIG_IIO_BUFFER=y
CONFIG_IIO_TRIGGER=y
@ -474,6 +477,7 @@ CONFIG_SECURITY=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_NETWORK=y
CONFIG_HARDENED_USERCOPY=y
# CONFIG_HARDENED_USERCOPY_FALLBACK is not set
CONFIG_FORTIFY_SOURCE=y
CONFIG_SECURITY_SELINUX=y
CONFIG_INIT_STACK_ALL=y
@ -498,5 +502,6 @@ CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_PANIC_TIMEOUT=5
CONFIG_SCHEDSTATS=y
# CONFIG_DEBUG_PREEMPT is not set
CONFIG_DEBUG_LIST=y
CONFIG_CORESIGHT=y
CONFIG_CORESIGHT_STM=y

View File

@ -0,0 +1,66 @@
CONFIG_CPUFREQ_DT=m
CONFIG_BT_RFCOMM=m
CONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_HIDP=m
CONFIG_BT_HCIBTSDIO=m
CONFIG_BT_HCIUART=m
CONFIG_BT_HCIUART_LL=y
CONFIG_RFKILL_GPIO=m
CONFIG_CONNECTOR=m
CONFIG_BLK_DEV_NVME=m
CONFIG_NVME_TARGET=m
CONFIG_HISI_HIKEY_USB=m
CONFIG_SCSI_UFS_HISI=m
CONFIG_WLAN_VENDOR_TI=y
CONFIG_WL18XX=m
CONFIG_WLCORE_SDIO=m
CONFIG_INPUT_HISI_POWERKEY=m
CONFIG_SERIO_AMBAKMI=m
CONFIG_SERIAL_8250_DW=m
CONFIG_I2C_CHARDEV=m
CONFIG_I2C_DESIGNWARE_PLATFORM=m
CONFIG_SPI_PL022=m
CONFIG_SPI_SPIDEV=m
CONFIG_SYSCON_REBOOT_MODE=m
CONFIG_HWMON=m
CONFIG_THERMAL_WRITABLE_TRIPS=y
CONFIG_THERMAL_DEFAULT_GOV_POWER_ALLOCATOR=y
CONFIG_THERMAL_GOV_STEP_WISE=y
CONFIG_HISI_THERMAL=m
CONFIG_MFD_HI6421_PMIC=m
CONFIG_MFD_HI655X_PMIC=m
CONFIG_REGULATOR_HI6421V530=m
CONFIG_REGULATOR_HI655X=m
CONFIG_MALI_DEVFREQ=y
CONFIG_DRM_I2C_ADV7511=m
CONFIG_DRM_I2C_ADV7511_AUDIO=y
CONFIG_DRM_HISI_KIRIN=m
CONFIG_DRM_HISI_KIRIN960=y
CONFIG_SND_I2S_HI3660_I2S=m
CONFIG_SND_SIMPLE_CARD=m
CONFIG_USB_XHCI_HCD=m
CONFIG_USB_EHCI_HCD=m
CONFIG_USB_EHCI_HCD_PLATFORM=m
CONFIG_USB_OHCI_HCD=m
CONFIG_USB_OHCI_HCD_PLATFORM=m
CONFIG_USB_DWC3=m
CONFIG_USB_GADGETFS=m
CONFIG_TYPEC_TCPM=m
CONFIG_TYPEC_TCPCI=m
CONFIG_TYPEC_RT1711H=m
CONFIG_MMC_BLOCK=m
CONFIG_MMC_BLOCK_MINORS=64
CONFIG_MMC_ARMMMCI=m
CONFIG_MMC_SPI=m
CONFIG_MMC_DW=m
CONFIG_MMC_DW_EXYNOS=m
CONFIG_MMC_DW_K3=m
CONFIG_RTC_DRV_EFI=m
CONFIG_K3_DMA=m
CONFIG_ION_CMA_HEAP=m
CONFIG_HI3660_MBOX=m
CONFIG_MALI_MIDGARD=m
CONFIG_MALI_PLATFORM_NAME="hisilicon"
CONFIG_MALI_EXPERT=y
CONFIG_MALI_PWRSOFT_765=y
CONFIG_PHY_HI3660_USB=m

View File

@ -221,7 +221,7 @@ alternative_endif
.macro user_alt, label, oldinstr, newinstr, cond
9999: alternative_insn "\oldinstr", "\newinstr", \cond
_ASM_EXTABLE 9999b, \label
_asm_extable 9999b, \label
.endm
/*

View File

@ -21,6 +21,10 @@ extern void __cpu_copy_user_page(void *to, const void *from,
extern void copy_page(void *to, const void *from);
extern void clear_page(void *to);
#define __alloc_zeroed_user_highpage(movableflags, vma, vaddr) \
alloc_page_vma(GFP_HIGHUSER | __GFP_ZERO | movableflags, vma, vaddr)
#define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE
#define clear_user_page(addr,vaddr,pg) __cpu_clear_user_page(addr, vaddr)
#define copy_user_page(to,from,vaddr,pg) __cpu_copy_user_page(to, from, vaddr)

View File

@ -25,8 +25,8 @@
#define __NR_compat_gettimeofday 78
#define __NR_compat_sigreturn 119
#define __NR_compat_rt_sigreturn 173
#define __NR_compat_clock_getres 247
#define __NR_compat_clock_gettime 263
#define __NR_compat_clock_getres 264
#define __NR_compat_clock_gettime64 403
#define __NR_compat_clock_getres_time64 406

View File

@ -995,11 +995,22 @@ void tick_broadcast(const struct cpumask *mask)
}
#endif
/*
* The number of CPUs online, not counting this CPU (which may not be
* fully online and so not counted in num_online_cpus()).
*/
static inline unsigned int num_other_online_cpus(void)
{
unsigned int this_cpu_online = cpu_online(smp_processor_id());
return num_online_cpus() - this_cpu_online;
}
void smp_send_stop(void)
{
unsigned long timeout;
if (num_online_cpus() > 1) {
if (num_other_online_cpus()) {
cpumask_t mask;
cpumask_copy(&mask, cpu_online_mask);
@ -1012,10 +1023,10 @@ void smp_send_stop(void)
/* Wait up to one second for other CPUs to stop */
timeout = USEC_PER_SEC;
while (num_online_cpus() > 1 && timeout--)
while (num_other_online_cpus() && timeout--)
udelay(1);
if (num_online_cpus() > 1)
if (num_other_online_cpus())
pr_warning("SMP: failed to stop secondary CPUs %*pbl\n",
cpumask_pr_args(cpu_online_mask));
@ -1038,7 +1049,11 @@ void crash_smp_send_stop(void)
cpus_stopped = 1;
if (num_online_cpus() == 1) {
/*
* If this cpu is the only one alive at this point in time, online or
* not, there are no stop messages to be sent around, so just back out.
*/
if (num_other_online_cpus() == 0) {
sdei_mask_local_cpu();
return;
}
@ -1046,7 +1061,7 @@ void crash_smp_send_stop(void)
cpumask_copy(&mask, cpu_online_mask);
cpumask_clear_cpu(smp_processor_id(), &mask);
atomic_set(&waiting_for_crash_ipi, num_online_cpus() - 1);
atomic_set(&waiting_for_crash_ipi, num_other_online_cpus());
pr_crit("SMP: stopping secondary CPUs\n");
smp_cross_call(&mask, IPI_CPU_CRASH_STOP);

View File

@ -326,6 +326,12 @@ SECTIONS
*(.branch_lt)
}
#ifdef CONFIG_DEBUG_INFO_BTF
.BTF : AT(ADDR(.BTF) - LOAD_OFFSET) {
*(.BTF)
}
#endif
.opd : AT(ADDR(.opd) - LOAD_OFFSET) {
__start_opd = .;
KEEP(*(.opd))

View File

@ -101,6 +101,7 @@ config ARCH_FLATMEM_ENABLE
config ARCH_SPARSEMEM_ENABLE
def_bool y
depends on MMU
select SPARSEMEM_VMEMMAP_ENABLE
config ARCH_SELECT_MEMORY_MODEL

View File

@ -8,6 +8,10 @@
#include <linux/err.h>
#include <linux/errno.h>
#include <linux/moduleloader.h>
#include <linux/vmalloc.h>
#include <linux/sizes.h>
#include <asm/pgtable.h>
#include <asm/sections.h>
static int apply_r_riscv_32_rela(struct module *me, u32 *location, Elf_Addr v)
{
@ -386,3 +390,15 @@ int apply_relocate_add(Elf_Shdr *sechdrs, const char *strtab,
return 0;
}
#if defined(CONFIG_MMU) && defined(CONFIG_64BIT)
#define VMALLOC_MODULE_START \
max(PFN_ALIGN((unsigned long)&_end - SZ_2G), VMALLOC_START)
void *module_alloc(unsigned long size)
{
return __vmalloc_node_range(size, 1, VMALLOC_MODULE_START,
VMALLOC_END, GFP_KERNEL,
PAGE_KERNEL_EXEC, 0, NUMA_NO_NODE,
__builtin_return_address(0));
}
#endif

View File

@ -98,7 +98,7 @@ void __init setup_bootmem(void)
for_each_memblock(memory, reg) {
phys_addr_t end = reg->base + reg->size;
if (reg->base <= vmlinux_end && vmlinux_end <= end) {
if (reg->base <= vmlinux_start && vmlinux_end <= end) {
mem_size = min(reg->size, (phys_addr_t)-PAGE_OFFSET);
/*

View File

@ -38,6 +38,7 @@ CONFIG_EMBEDDED=y
# CONFIG_SLAB_MERGE_DEFAULT is not set
CONFIG_SLAB_FREELIST_RANDOM=y
CONFIG_SLAB_FREELIST_HARDENED=y
CONFIG_SHUFFLE_PAGE_ALLOCATOR=y
CONFIG_PROFILING=y
CONFIG_SMP=y
CONFIG_HYPERVISOR_GUEST=y
@ -264,6 +265,7 @@ CONFIG_HPET=y
CONFIG_SPI=y
CONFIG_GPIOLIB=y
# CONFIG_HWMON is not set
CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y
CONFIG_DEVFREQ_THERMAL=y
# CONFIG_X86_PKG_TEMP_THERMAL is not set
CONFIG_WATCHDOG=y
@ -321,6 +323,8 @@ CONFIG_STAGING=y
CONFIG_ASHMEM=y
CONFIG_ION=y
CONFIG_ION_SYSTEM_HEAP=y
CONFIG_REMOTEPROC=y
CONFIG_RPMSG_CHAR=y
CONFIG_PM_DEVFREQ=y
CONFIG_IIO=y
CONFIG_IIO_BUFFER=y
@ -408,6 +412,7 @@ CONFIG_SECURITY=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_NETWORK=y
CONFIG_HARDENED_USERCOPY=y
# CONFIG_HARDENED_USERCOPY_FALLBACK is not set
CONFIG_FORTIFY_SOURCE=y
CONFIG_SECURITY_SELINUX=y
CONFIG_INIT_STACK_ALL=y
@ -432,3 +437,4 @@ CONFIG_SOFTLOCKUP_DETECTOR=y
# CONFIG_DETECT_HUNG_TASK is not set
CONFIG_PANIC_TIMEOUT=5
CONFIG_SCHEDSTATS=y
CONFIG_DEBUG_LIST=y

View File

@ -189,7 +189,7 @@ static inline pmd_t *vmalloc_sync_one(pgd_t *pgd, unsigned long address)
return pmd_k;
}
void vmalloc_sync_all(void)
static void vmalloc_sync(void)
{
unsigned long address;
@ -216,6 +216,16 @@ void vmalloc_sync_all(void)
}
}
void vmalloc_sync_mappings(void)
{
vmalloc_sync();
}
void vmalloc_sync_unmappings(void)
{
vmalloc_sync();
}
/*
* 32-bit:
*
@ -318,11 +328,23 @@ static void dump_pagetable(unsigned long address)
#else /* CONFIG_X86_64: */
void vmalloc_sync_all(void)
void vmalloc_sync_mappings(void)
{
/*
* 64-bit mappings might allocate new p4d/pud pages
* that need to be propagated to all tasks' PGDs.
*/
sync_global_pgds(VMALLOC_START & PGDIR_MASK, VMALLOC_END);
}
void vmalloc_sync_unmappings(void)
{
/*
* Unmappings never allocate or free p4d/pud pages.
* No work is required here.
*/
}
/*
* 64-bit:
*

View File

@ -115,6 +115,9 @@ static void __ioremap_check_other(resource_size_t addr, struct ioremap_desc *des
if (!sev_active())
return;
if (!IS_ENABLED(CONFIG_EFI))
return;
if (efi_mem_type(addr) == EFI_RUNTIME_SERVICES_DATA)
desc->flags |= IORES_MAP_ENCRYPTED;
}

View File

@ -2039,10 +2039,12 @@ static int do_jit(struct bpf_prog *bpf_prog, int *addrs, u8 *image,
}
/* and dreg_lo,sreg_lo */
EMIT2(0x23, add_2reg(0xC0, sreg_lo, dreg_lo));
/* and dreg_hi,sreg_hi */
EMIT2(0x23, add_2reg(0xC0, sreg_hi, dreg_hi));
/* or dreg_lo,dreg_hi */
EMIT2(0x09, add_2reg(0xC0, dreg_lo, dreg_hi));
if (is_jmp64) {
/* and dreg_hi,sreg_hi */
EMIT2(0x23, add_2reg(0xC0, sreg_hi, dreg_hi));
/* or dreg_lo,dreg_hi */
EMIT2(0x09, add_2reg(0xC0, dreg_lo, dreg_hi));
}
goto emit_cond_jmp;
}
case BPF_JMP | BPF_JSET | BPF_K:

View File

@ -593,12 +593,13 @@ struct bfq_group *bfq_find_set_group(struct bfq_data *bfqd,
*/
entity = &bfqg->entity;
for_each_entity(entity) {
bfqg = container_of(entity, struct bfq_group, entity);
if (bfqg != bfqd->root_group) {
parent = bfqg_parent(bfqg);
struct bfq_group *curr_bfqg = container_of(entity,
struct bfq_group, entity);
if (curr_bfqg != bfqd->root_group) {
parent = bfqg_parent(curr_bfqg);
if (!parent)
parent = bfqd->root_group;
bfq_group_set_parent(bfqg, parent);
bfq_group_set_parent(curr_bfqg, parent);
}
}

View File

@ -399,7 +399,7 @@ void blk_insert_flush(struct request *rq)
*/
if ((policy & REQ_FSEQ_DATA) &&
!(policy & (REQ_FSEQ_PREFLUSH | REQ_FSEQ_POSTFLUSH))) {
blk_mq_request_bypass_insert(rq, false);
blk_mq_request_bypass_insert(rq, false, false);
return;
}

View File

@ -361,13 +361,19 @@ static bool blk_mq_sched_bypass_insert(struct blk_mq_hw_ctx *hctx,
bool has_sched,
struct request *rq)
{
/* dispatch flush rq directly */
if (rq->rq_flags & RQF_FLUSH_SEQ) {
spin_lock(&hctx->lock);
list_add(&rq->queuelist, &hctx->dispatch);
spin_unlock(&hctx->lock);
/*
* dispatch flush and passthrough rq directly
*
* passthrough request has to be added to hctx->dispatch directly.
* For some reason, device may be in one situation which can't
* handle FS request, so STS_RESOURCE is always returned and the
* FS request will be added to hctx->dispatch. However passthrough
* request may be required at that time for fixing the problem. If
* passthrough request is added to scheduler queue, there isn't any
* chance to dispatch it given we prioritize requests in hctx->dispatch.
*/
if ((rq->rq_flags & RQF_FLUSH_SEQ) || blk_rq_is_passthrough(rq))
return true;
}
if (has_sched)
rq->rq_flags |= RQF_SORTED;
@ -391,8 +397,32 @@ void blk_mq_sched_insert_request(struct request *rq, bool at_head,
WARN_ON(e && (rq->tag != -1));
if (blk_mq_sched_bypass_insert(hctx, !!e, rq))
if (blk_mq_sched_bypass_insert(hctx, !!e, rq)) {
/*
* Firstly normal IO request is inserted to scheduler queue or
* sw queue, meantime we add flush request to dispatch queue(
* hctx->dispatch) directly and there is at most one in-flight
* flush request for each hw queue, so it doesn't matter to add
* flush request to tail or front of the dispatch queue.
*
* Secondly in case of NCQ, flush request belongs to non-NCQ
* command, and queueing it will fail when there is any
* in-flight normal IO request(NCQ command). When adding flush
* rq to the front of hctx->dispatch, it is easier to introduce
* extra time to flush rq's latency because of S_SCHED_RESTART
* compared with adding to the tail of dispatch queue, then
* chance of flush merge is increased, and less flush requests
* will be issued to controller. It is observed that ~10% time
* is saved in blktests block/004 on disk attached to AHCI/NCQ
* drive when adding flush rq to the front of hctx->dispatch.
*
* Simply queue flush rq to the front of hctx->dispatch so that
* intensive flush workloads can benefit in case of NCQ HW.
*/
at_head = (rq->rq_flags & RQF_FLUSH_SEQ) ? true : at_head;
blk_mq_request_bypass_insert(rq, at_head, false);
goto run;
}
if (e && e->type->ops.insert_requests) {
LIST_HEAD(list);

View File

@ -761,7 +761,7 @@ static void blk_mq_requeue_work(struct work_struct *work)
* merge.
*/
if (rq->rq_flags & RQF_DONTPREP)
blk_mq_request_bypass_insert(rq, false);
blk_mq_request_bypass_insert(rq, false, false);
else
blk_mq_sched_insert_request(rq, true, false, false);
}
@ -1313,7 +1313,7 @@ bool blk_mq_dispatch_rq_list(struct request_queue *q, struct list_head *list,
q->mq_ops->commit_rqs(hctx);
spin_lock(&hctx->lock);
list_splice_init(list, &hctx->dispatch);
list_splice_tail_init(list, &hctx->dispatch);
spin_unlock(&hctx->lock);
/*
@ -1668,12 +1668,16 @@ void __blk_mq_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,
* Should only be used carefully, when the caller knows we want to
* bypass a potential IO scheduler on the target device.
*/
void blk_mq_request_bypass_insert(struct request *rq, bool run_queue)
void blk_mq_request_bypass_insert(struct request *rq, bool at_head,
bool run_queue)
{
struct blk_mq_hw_ctx *hctx = rq->mq_hctx;
spin_lock(&hctx->lock);
list_add_tail(&rq->queuelist, &hctx->dispatch);
if (at_head)
list_add(&rq->queuelist, &hctx->dispatch);
else
list_add_tail(&rq->queuelist, &hctx->dispatch);
spin_unlock(&hctx->lock);
if (run_queue)
@ -1863,7 +1867,7 @@ static blk_status_t __blk_mq_try_issue_directly(struct blk_mq_hw_ctx *hctx,
if (bypass_insert)
return BLK_STS_RESOURCE;
blk_mq_request_bypass_insert(rq, run_queue);
blk_mq_request_bypass_insert(rq, false, run_queue);
return BLK_STS_OK;
}
@ -1879,7 +1883,7 @@ static void blk_mq_try_issue_directly(struct blk_mq_hw_ctx *hctx,
ret = __blk_mq_try_issue_directly(hctx, rq, cookie, false, true);
if (ret == BLK_STS_RESOURCE || ret == BLK_STS_DEV_RESOURCE)
blk_mq_request_bypass_insert(rq, true);
blk_mq_request_bypass_insert(rq, false, true);
else if (ret != BLK_STS_OK)
blk_mq_end_request(rq, ret);
@ -1913,7 +1917,7 @@ void blk_mq_try_issue_list_directly(struct blk_mq_hw_ctx *hctx,
if (ret != BLK_STS_OK) {
if (ret == BLK_STS_RESOURCE ||
ret == BLK_STS_DEV_RESOURCE) {
blk_mq_request_bypass_insert(rq,
blk_mq_request_bypass_insert(rq, false,
list_empty(list));
break;
}

View File

@ -66,7 +66,8 @@ int blk_mq_alloc_rqs(struct blk_mq_tag_set *set, struct blk_mq_tags *tags,
*/
void __blk_mq_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,
bool at_head);
void blk_mq_request_bypass_insert(struct request *rq, bool run_queue);
void blk_mq_request_bypass_insert(struct request *rq, bool at_head,
bool run_queue);
void blk_mq_insert_requests(struct blk_mq_hw_ctx *hctx, struct blk_mq_ctx *ctx,
struct list_head *list);

View File

@ -5,7 +5,7 @@ CC=clang
LD=ld.lld
NM=llvm-nm
OBJCOPY=llvm-objcopy
CLANG_PREBUILT_BIN=prebuilts-master/clang/host/linux-x86/clang-r377782b/bin
CLANG_PREBUILT_BIN=prebuilts-master/clang/host/linux-x86/clang-r377782c/bin
BUILDTOOLS_PREBUILT_BIN=build/build-tools/path/linux-x86
EXTRA_CMDS=''

View File

@ -1,11 +0,0 @@
. ${ROOT_DIR}/common/build.config.common
. ${ROOT_DIR}/common/build.config.aarch64
. ${ROOT_DIR}/common/build.config.gki
BUILD_INITRAMFS=1
DEFCONFIG=cf_aarch_64_gki_defconfig
PRE_DEFCONFIG_CMDS="KCONFIG_CONFIG=${ROOT_DIR}/common/arch/arm64/configs/${DEFCONFIG} ${ROOT_DIR}/common/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/common/arch/arm64/configs/gki_defconfig ${ROOT_DIR}/common/cuttlefish.fragment"
POST_DEFCONFIG_CMDS="rm ${ROOT_DIR}/common/arch/arm64/configs/${DEFCONFIG}"
# Not saving any kernel images. This build step is meant purely to generate the .kos.
FILES=""

View File

@ -1,11 +0,0 @@
. ${ROOT_DIR}/common/build.config.common
. ${ROOT_DIR}/common/build.config.x86_64
. ${ROOT_DIR}/common/build.config.gki
BUILD_INITRAMFS=1
DEFCONFIG=cf_x86_64_gki_defconfig
PRE_DEFCONFIG_CMDS="KCONFIG_CONFIG=${ROOT_DIR}/common/arch/x86/configs/${DEFCONFIG} ${ROOT_DIR}/common/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/common/arch/x86/configs/gki_defconfig ${ROOT_DIR}/common/cuttlefish.fragment"
POST_DEFCONFIG_CMDS="rm ${ROOT_DIR}/common/arch/x86/configs/${DEFCONFIG}"
# Not saving any kernel images. This build step is meant purely to generate the .kos.
FILES=""

View File

@ -2,8 +2,8 @@
. ${ROOT_DIR}/common/build.config.aarch64
DEFCONFIG=db845c_gki_defconfig
PRE_DEFCONFIG_CMDS="cat ./common/arch/arm64/configs/gki_defconfig ./common/arch/arm64/configs/db845c_gki.fragment > ./common/arch/arm64/configs/${DEFCONFIG};"
POST_DEFCONFIG_CMDS="rm ./common/arch/arm64/configs/${DEFCONFIG}"
PRE_DEFCONFIG_CMDS="KCONFIG_CONFIG=${ROOT_DIR}/common/arch/arm64/configs/${DEFCONFIG} ${ROOT_DIR}/common/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/common/arch/arm64/configs/gki_defconfig ${ROOT_DIR}/common/arch/arm64/configs/db845c_gki.fragment"
POST_DEFCONFIG_CMDS="rm ${ROOT_DIR}/common/arch/arm64/configs/${DEFCONFIG}"
FILES="
arch/arm64/boot/Image.gz

View File

@ -7,6 +7,9 @@ KMI_WHITELIST=abi_gki_aarch64_whitelist
ADDITIONAL_KMI_WHITELISTS="
abi_gki_aarch64_cuttlefish_whitelist
abi_gki_aarch64_db845c_whitelist
abi_gki_aarch64_goldfish_whitelist
abi_gki_aarch64_hikey960_whitelist
abi_gki_aarch64_qcom_whitelist
abi_gki_aarch64_unisoc_whitelist
"
TRIM_NONLISTED_KMI=1

17
build.config.hikey960 Normal file
View File

@ -0,0 +1,17 @@
. ${ROOT_DIR}/common/build.config.common
. ${ROOT_DIR}/common/build.config.aarch64
DEFCONFIG=hikey960_gki_defconfig
PRE_DEFCONFIG_CMDS="cat ./common/arch/arm64/configs/gki_defconfig ./common/arch/arm64/configs/hikey960_gki.fragment > ./common/arch/arm64/configs/${DEFCONFIG};"
POST_DEFCONFIG_CMDS="rm ./common/arch/arm64/configs/${DEFCONFIG}"
EXT_MODULES="
hikey-modules/midgard
"
FILES="
arch/arm64/boot/Image.gz
arch/arm64/boot/dts/hisilicon/hi3660-hikey960.dtb
vmlinux
System.map
"

View File

@ -1,22 +0,0 @@
CONFIG_CPUFREQ_DUMMY=m
CONFIG_VSOCKETS=m
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_GNSS_CMDLINE_SERIAL=m
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_NET=m
CONFIG_VIRT_WIFI=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_DRM_VIRTIO_GPU=m
CONFIG_SND_INTEL8X0=m
CONFIG_USB_DUMMY_HCD=m
CONFIG_RTC_DRV_TEST=m
CONFIG_VIRTIO_PCI=m
CONFIG_VIRTIO_PMEM=m
CONFIG_VIRTIO_INPUT=m
CONFIG_VIRTIO_MMIO=m
CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
CONFIG_TEST_STACKINIT=m
CONFIG_TEST_MEMINIT=m
CONFIG_SDCARD_FS=m
CONFIG_TCG_TPM=m
CONFIG_TCG_VTPM_PROXY=m

View File

@ -55,12 +55,14 @@ static bool acpi_watchdog_uses_rtc(const struct acpi_table_wdat *wdat)
}
#endif
static bool acpi_no_watchdog;
static const struct acpi_table_wdat *acpi_watchdog_get_wdat(void)
{
const struct acpi_table_wdat *wdat = NULL;
acpi_status status;
if (acpi_disabled)
if (acpi_disabled || acpi_no_watchdog)
return NULL;
status = acpi_get_table(ACPI_SIG_WDAT, 0,
@ -88,6 +90,14 @@ bool acpi_has_watchdog(void)
}
EXPORT_SYMBOL_GPL(acpi_has_watchdog);
/* ACPI watchdog can be disabled on boot command line */
static int __init disable_acpi_watchdog(char *str)
{
acpi_no_watchdog = true;
return 1;
}
__setup("acpi_no_watchdog", disable_acpi_watchdog);
void __init acpi_watchdog_init(void)
{
const struct acpi_wdat_entry *entries;

View File

@ -171,7 +171,7 @@ int ghes_estatus_pool_init(int num_ghes)
* New allocation must be visible in all pgd before it can be found by
* an NMI allocating from the pool.
*/
vmalloc_sync_all();
vmalloc_sync_mappings();
rc = gen_pool_add(ghes_estatus_pool, addr, PAGE_ALIGN(len), -1);
if (rc)

View File

@ -977,6 +977,16 @@ static int acpi_s2idle_prepare_late(void)
return 0;
}
static void acpi_s2idle_sync(void)
{
/*
* The EC driver uses the system workqueue and an additional special
* one, so those need to be flushed too.
*/
acpi_ec_flush_work();
acpi_os_wait_events_complete(); /* synchronize Notify handling */
}
static bool acpi_s2idle_wake(void)
{
if (!acpi_sci_irq_valid())
@ -1021,13 +1031,8 @@ static bool acpi_s2idle_wake(void)
* should be missed by canceling the wakeup here.
*/
pm_system_cancel_wakeup();
/*
* The EC driver uses the system workqueue and an additional
* special one, so those need to be flushed too.
*/
acpi_os_wait_events_complete(); /* synchronize EC GPE processing */
acpi_ec_flush_work();
acpi_os_wait_events_complete(); /* synchronize Notify handling */
acpi_s2idle_sync();
/*
* The SCI is in the "suspended" state now and it cannot produce
@ -1055,6 +1060,13 @@ static void acpi_s2idle_restore_early(void)
static void acpi_s2idle_restore(void)
{
/*
* Drain pending events before restoring the working-state configuration
* of GPEs.
*/
acpi_os_wait_events_complete(); /* synchronize GPE processing */
acpi_s2idle_sync();
s2idle_wakeup = false;
acpi_enable_all_runtime_gpes();

View File

@ -2911,50 +2911,19 @@ static bool binder_proc_transaction(struct binder_transaction *t,
struct binder_priority node_prio;
bool oneway = !!(t->flags & TF_ONE_WAY);
bool pending_async = false;
bool retry = false;
BUG_ON(!node);
set_thread_prio:
binder_node_lock(node);
node_prio.prio = node->min_priority;
node_prio.sched_policy = node->sched_policy;
if (thread) {
/*
* Priority must be set outside of lock, but must be
* done before enqueuing the transaction.
*/
binder_transaction_priority(thread->task, t, node_prio,
node->inherit_rt);
}
retry_after_prio_restore:
binder_node_lock(node);
if (oneway) {
BUG_ON(!retry && thread);
BUG_ON(thread);
if (node->has_async_transaction) {
pending_async = true;
} else {
node->has_async_transaction = true;
}
if (thread && pending_async) {
/*
* The node state has changed since we selected
* the thread. Return the thread to the
* waiting_threads list. We have to drop
* the node lock to restore priority so we
* have to re-check the node state.
*/
binder_node_unlock(node);
binder_restore_priority(thread->task,
proc->default_priority);
binder_inner_proc_lock(proc);
list_add(&thread->waiting_thread_node,
&proc->waiting_threads);
binder_inner_proc_unlock(proc);
thread = NULL;
goto retry_after_prio_restore;
}
}
binder_inner_proc_lock(proc);
@ -2965,24 +2934,18 @@ static bool binder_proc_transaction(struct binder_transaction *t,
return false;
}
if (!thread && !pending_async) {
if (!thread && !pending_async)
thread = binder_select_thread_ilocked(proc);
if (thread) {
if (oneway)
node->has_async_transaction = false;
binder_inner_proc_unlock(proc);
binder_node_unlock(node);
retry = true;
goto set_thread_prio;
}
}
if (thread)
if (thread) {
binder_transaction_priority(thread->task, t, node_prio,
node->inherit_rt);
binder_enqueue_thread_work_ilocked(thread, &t->work);
else if (!pending_async)
} else if (!pending_async) {
binder_enqueue_work_ilocked(&t->work, &proc->todo);
else
} else {
binder_enqueue_work_ilocked(&t->work, &node->async_todo);
}
if (!pending_async)
binder_wakeup_thread_ilocked(proc, thread, !oneway /* sync */);

View File

@ -448,6 +448,7 @@ static int binderfs_binder_ctl_create(struct super_block *sb)
inode->i_uid = info->root_uid;
inode->i_gid = info->root_gid;
refcount_set(&device->ref, 1);
device->binderfs_inode = inode;
device->miscdev.minor = minor;

View File

@ -393,6 +393,7 @@ static const struct pci_device_id ahci_pci_tbl[] = {
{ PCI_VDEVICE(INTEL, 0xa252), board_ahci }, /* Lewisburg RAID*/
{ PCI_VDEVICE(INTEL, 0xa256), board_ahci }, /* Lewisburg RAID*/
{ PCI_VDEVICE(INTEL, 0xa356), board_ahci }, /* Cannon Lake PCH-H RAID */
{ PCI_VDEVICE(INTEL, 0x06d7), board_ahci }, /* Comet Lake-H RAID */
{ PCI_VDEVICE(INTEL, 0x0f22), board_ahci_mobile }, /* Bay Trail AHCI */
{ PCI_VDEVICE(INTEL, 0x0f23), board_ahci_mobile }, /* Bay Trail AHCI */
{ PCI_VDEVICE(INTEL, 0x22a3), board_ahci_mobile }, /* Cherry Tr. AHCI */

View File

@ -114,30 +114,13 @@ static ssize_t phys_index_show(struct device *dev,
}
/*
* Show whether the memory block is likely to be offlineable (or is already
* offline). Once offline, the memory block could be removed. The return
* value does, however, not indicate that there is a way to remove the
* memory block.
* Legacy interface that we cannot remove. Always indicate "removable"
* with CONFIG_MEMORY_HOTREMOVE - bad heuristic.
*/
static ssize_t removable_show(struct device *dev, struct device_attribute *attr,
char *buf)
{
struct memory_block *mem = to_memory_block(dev);
unsigned long pfn;
int ret = 1, i;
if (mem->state != MEM_ONLINE)
goto out;
for (i = 0; i < sections_per_block; i++) {
if (!present_section_nr(mem->start_section_nr + i))
continue;
pfn = section_nr_to_pfn(mem->start_section_nr + i);
ret &= is_mem_section_removable(pfn, PAGES_PER_SECTION);
}
out:
return sprintf(buf, "%d\n", ret);
return sprintf(buf, "%d\n", (int)IS_ENABLED(CONFIG_MEMORY_HOTREMOVE));
}
/*

View File

@ -14,19 +14,33 @@
#define VERSION "0.1"
int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version)
int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version,
enum qca_btsoc_type soc_type)
{
struct sk_buff *skb;
struct edl_event_hdr *edl;
struct rome_version *ver;
struct qca_btsoc_version *ver;
char cmd;
int err = 0;
u8 event_type = HCI_EV_VENDOR;
u8 rlen = sizeof(*edl) + sizeof(*ver);
u8 rtype = EDL_APP_VER_RES_EVT;
bt_dev_dbg(hdev, "QCA Version Request");
/* Unlike other SoC's sending version command response as payload to
* VSE event. WCN3991 sends version command response as a payload to
* command complete event.
*/
if (soc_type == QCA_WCN3991) {
event_type = 0;
rlen += 1;
rtype = EDL_PATCH_VER_REQ_CMD;
}
cmd = EDL_PATCH_VER_REQ_CMD;
skb = __hci_cmd_sync_ev(hdev, EDL_PATCH_CMD_OPCODE, EDL_PATCH_CMD_LEN,
&cmd, HCI_EV_VENDOR, HCI_INIT_TIMEOUT);
&cmd, event_type, HCI_INIT_TIMEOUT);
if (IS_ERR(skb)) {
err = PTR_ERR(skb);
bt_dev_err(hdev, "Reading QCA version information failed (%d)",
@ -34,7 +48,7 @@ int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version)
return err;
}
if (skb->len != sizeof(*edl) + sizeof(*ver)) {
if (skb->len != rlen) {
bt_dev_err(hdev, "QCA Version size mismatch len %d", skb->len);
err = -EILSEQ;
goto out;
@ -48,18 +62,21 @@ int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version)
}
if (edl->cresp != EDL_CMD_REQ_RES_EVT ||
edl->rtype != EDL_APP_VER_RES_EVT) {
edl->rtype != rtype) {
bt_dev_err(hdev, "QCA Wrong packet received %d %d", edl->cresp,
edl->rtype);
err = -EIO;
goto out;
}
ver = (struct rome_version *)(edl->data);
if (soc_type == QCA_WCN3991)
memmove(&edl->data, &edl->data[1], sizeof(*ver));
ver = (struct qca_btsoc_version *)(edl->data);
BT_DBG("%s: Product:0x%08x", hdev->name, le32_to_cpu(ver->product_id));
BT_DBG("%s: Patch :0x%08x", hdev->name, le16_to_cpu(ver->patch_ver));
BT_DBG("%s: ROM :0x%08x", hdev->name, le16_to_cpu(ver->rome_ver));
BT_DBG("%s: ROM :0x%08x", hdev->name, le16_to_cpu(ver->rom_ver));
BT_DBG("%s: SOC :0x%08x", hdev->name, le32_to_cpu(ver->soc_id));
/* QCA chipset version can be decided by patch and SoC
@ -67,7 +84,7 @@ int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version)
* and lower 2 bytes from patch will be used.
*/
*soc_version = (le32_to_cpu(ver->soc_id) << 16) |
(le16_to_cpu(ver->rome_ver) & 0x0000ffff);
(le16_to_cpu(ver->rom_ver) & 0x0000ffff);
if (*soc_version == 0)
err = -EILSEQ;
@ -121,7 +138,7 @@ int qca_send_pre_shutdown_cmd(struct hci_dev *hdev)
}
EXPORT_SYMBOL_GPL(qca_send_pre_shutdown_cmd);
static void qca_tlv_check_data(struct rome_config *config,
static void qca_tlv_check_data(struct qca_fw_config *config,
const struct firmware *fw)
{
const u8 *data;
@ -140,8 +157,8 @@ static void qca_tlv_check_data(struct rome_config *config,
BT_DBG("TLV Type\t\t : 0x%x", type_len & 0x000000ff);
BT_DBG("Length\t\t : %d bytes", length);
config->dnld_mode = ROME_SKIP_EVT_NONE;
config->dnld_type = ROME_SKIP_EVT_NONE;
config->dnld_mode = QCA_SKIP_EVT_NONE;
config->dnld_type = QCA_SKIP_EVT_NONE;
switch (config->type) {
case TLV_TYPE_PATCH:
@ -223,31 +240,45 @@ static void qca_tlv_check_data(struct rome_config *config,
}
static int qca_tlv_send_segment(struct hci_dev *hdev, int seg_size,
const u8 *data, enum rome_tlv_dnld_mode mode)
const u8 *data, enum qca_tlv_dnld_mode mode,
enum qca_btsoc_type soc_type)
{
struct sk_buff *skb;
struct edl_event_hdr *edl;
struct tlv_seg_resp *tlv_resp;
u8 cmd[MAX_SIZE_PER_TLV_SEGMENT + 2];
int err = 0;
u8 event_type = HCI_EV_VENDOR;
u8 rlen = (sizeof(*edl) + sizeof(*tlv_resp));
u8 rtype = EDL_TVL_DNLD_RES_EVT;
cmd[0] = EDL_PATCH_TLV_REQ_CMD;
cmd[1] = seg_size;
memcpy(cmd + 2, data, seg_size);
if (mode == ROME_SKIP_EVT_VSE_CC || mode == ROME_SKIP_EVT_VSE)
if (mode == QCA_SKIP_EVT_VSE_CC || mode == QCA_SKIP_EVT_VSE)
return __hci_cmd_send(hdev, EDL_PATCH_CMD_OPCODE, seg_size + 2,
cmd);
/* Unlike other SoC's sending version command response as payload to
* VSE event. WCN3991 sends version command response as a payload to
* command complete event.
*/
if (soc_type == QCA_WCN3991) {
event_type = 0;
rlen = sizeof(*edl);
rtype = EDL_PATCH_TLV_REQ_CMD;
}
skb = __hci_cmd_sync_ev(hdev, EDL_PATCH_CMD_OPCODE, seg_size + 2, cmd,
HCI_EV_VENDOR, HCI_INIT_TIMEOUT);
event_type, HCI_INIT_TIMEOUT);
if (IS_ERR(skb)) {
err = PTR_ERR(skb);
bt_dev_err(hdev, "QCA Failed to send TLV segment (%d)", err);
return err;
}
if (skb->len != sizeof(*edl) + sizeof(*tlv_resp)) {
if (skb->len != rlen) {
bt_dev_err(hdev, "QCA TLV response size mismatch");
err = -EILSEQ;
goto out;
@ -260,13 +291,19 @@ static int qca_tlv_send_segment(struct hci_dev *hdev, int seg_size,
goto out;
}
tlv_resp = (struct tlv_seg_resp *)(edl->data);
if (edl->cresp != EDL_CMD_REQ_RES_EVT || edl->rtype != rtype) {
bt_dev_err(hdev, "QCA TLV with error stat 0x%x rtype 0x%x",
edl->cresp, edl->rtype);
err = -EIO;
}
if (edl->cresp != EDL_CMD_REQ_RES_EVT ||
edl->rtype != EDL_TVL_DNLD_RES_EVT || tlv_resp->result != 0x00) {
if (soc_type == QCA_WCN3991)
goto out;
tlv_resp = (struct tlv_seg_resp *)(edl->data);
if (tlv_resp->result) {
bt_dev_err(hdev, "QCA TLV with error stat 0x%x rtype 0x%x (0x%x)",
edl->cresp, edl->rtype, tlv_resp->result);
err = -EIO;
}
out:
@ -301,7 +338,8 @@ static int qca_inject_cmd_complete_event(struct hci_dev *hdev)
}
static int qca_download_firmware(struct hci_dev *hdev,
struct rome_config *config)
struct qca_fw_config *config,
enum qca_btsoc_type soc_type)
{
const struct firmware *fw;
const u8 *segment;
@ -328,10 +366,10 @@ static int qca_download_firmware(struct hci_dev *hdev,
remain -= segsize;
/* The last segment is always acked regardless download mode */
if (!remain || segsize < MAX_SIZE_PER_TLV_SEGMENT)
config->dnld_mode = ROME_SKIP_EVT_NONE;
config->dnld_mode = QCA_SKIP_EVT_NONE;
ret = qca_tlv_send_segment(hdev, segsize, segment,
config->dnld_mode);
config->dnld_mode, soc_type);
if (ret)
goto out;
@ -344,8 +382,8 @@ static int qca_download_firmware(struct hci_dev *hdev,
* decrease the BT in initialization time. Here we will inject a command
* complete event to avoid a command timeout error message.
*/
if (config->dnld_type == ROME_SKIP_EVT_VSE_CC ||
config->dnld_type == ROME_SKIP_EVT_VSE)
if (config->dnld_type == QCA_SKIP_EVT_VSE_CC ||
config->dnld_type == QCA_SKIP_EVT_VSE)
ret = qca_inject_cmd_complete_event(hdev);
out:
@ -382,7 +420,7 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
enum qca_btsoc_type soc_type, u32 soc_ver,
const char *firmware_name)
{
struct rome_config config;
struct qca_fw_config config;
int err;
u8 rom_ver = 0;
@ -405,7 +443,7 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
"qca/rampatch_%08x.bin", soc_ver);
}
err = qca_download_firmware(hdev, &config);
err = qca_download_firmware(hdev, &config, soc_type);
if (err < 0) {
bt_dev_err(hdev, "QCA Failed to download patch (%d)", err);
return err;
@ -426,7 +464,7 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
snprintf(config.fwname, sizeof(config.fwname),
"qca/nvm_%08x.bin", soc_ver);
err = qca_download_firmware(hdev, &config);
err = qca_download_firmware(hdev, &config, soc_type);
if (err < 0) {
bt_dev_err(hdev, "QCA Failed to download NVM (%d)", err);
return err;

View File

@ -56,24 +56,24 @@ enum qca_baudrate {
QCA_BAUDRATE_RESERVED
};
enum rome_tlv_dnld_mode {
ROME_SKIP_EVT_NONE,
ROME_SKIP_EVT_VSE,
ROME_SKIP_EVT_CC,
ROME_SKIP_EVT_VSE_CC
enum qca_tlv_dnld_mode {
QCA_SKIP_EVT_NONE,
QCA_SKIP_EVT_VSE,
QCA_SKIP_EVT_CC,
QCA_SKIP_EVT_VSE_CC
};
enum rome_tlv_type {
enum qca_tlv_type {
TLV_TYPE_PATCH = 1,
TLV_TYPE_NVM
};
struct rome_config {
struct qca_fw_config {
u8 type;
char fwname[64];
uint8_t user_baud_rate;
enum rome_tlv_dnld_mode dnld_mode;
enum rome_tlv_dnld_mode dnld_type;
enum qca_tlv_dnld_mode dnld_mode;
enum qca_tlv_dnld_mode dnld_type;
};
struct edl_event_hdr {
@ -82,10 +82,10 @@ struct edl_event_hdr {
__u8 data[0];
} __packed;
struct rome_version {
struct qca_btsoc_version {
__le32 product_id;
__le16 patch_ver;
__le16 rome_ver;
__le16 rom_ver;
__le32 soc_id;
} __packed;
@ -125,6 +125,7 @@ enum qca_btsoc_type {
QCA_AR3002,
QCA_ROME,
QCA_WCN3990,
QCA_WCN3991,
QCA_WCN3998,
};
@ -134,12 +135,14 @@ int qca_set_bdaddr_rome(struct hci_dev *hdev, const bdaddr_t *bdaddr);
int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
enum qca_btsoc_type soc_type, u32 soc_ver,
const char *firmware_name);
int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version);
int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version,
enum qca_btsoc_type);
int qca_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr);
int qca_send_pre_shutdown_cmd(struct hci_dev *hdev);
static inline bool qca_is_wcn399x(enum qca_btsoc_type soc_type)
{
return soc_type == QCA_WCN3990 || soc_type == QCA_WCN3998;
return soc_type == QCA_WCN3990 || soc_type == QCA_WCN3991 ||
soc_type == QCA_WCN3998;
}
#else
@ -155,7 +158,8 @@ static inline int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
return -EOPNOTSUPP;
}
static inline int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version)
static inline int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version,
enum qca_btsoc_type)
{
return -EOPNOTSUPP;
}

View File

@ -1262,7 +1262,7 @@ static int qca_setup(struct hci_uart *hu)
if (ret)
return ret;
ret = qca_read_soc_version(hdev, &soc_ver);
ret = qca_read_soc_version(hdev, &soc_ver, soc_type);
if (ret)
return ret;
} else {
@ -1282,7 +1282,7 @@ static int qca_setup(struct hci_uart *hu)
if (!qca_is_wcn399x(soc_type)) {
/* Get QCA version information */
ret = qca_read_soc_version(hdev, &soc_ver);
ret = qca_read_soc_version(hdev, &soc_ver, soc_type);
if (ret)
return ret;
}
@ -1340,6 +1340,17 @@ static const struct qca_vreg_data qca_soc_data_wcn3990 = {
.num_vregs = 4,
};
static const struct qca_vreg_data qca_soc_data_wcn3991 = {
.soc_type = QCA_WCN3991,
.vregs = (struct qca_vreg []) {
{ "vddio", 15000 },
{ "vddxo", 80000 },
{ "vddrf", 300000 },
{ "vddch0", 450000 },
},
.num_vregs = 4,
};
static const struct qca_vreg_data qca_soc_data_wcn3998 = {
.soc_type = QCA_WCN3998,
.vregs = (struct qca_vreg []) {
@ -1567,6 +1578,7 @@ static void qca_serdev_remove(struct serdev_device *serdev)
static const struct of_device_id qca_bluetooth_of_match[] = {
{ .compatible = "qcom,qca6174-bt" },
{ .compatible = "qcom,wcn3990-bt", .data = &qca_soc_data_wcn3990},
{ .compatible = "qcom,wcn3991-bt", .data = &qca_soc_data_wcn3991},
{ .compatible = "qcom,wcn3998-bt", .data = &qca_soc_data_wcn3998},
{ /* sentinel */ }
};

View File

@ -43,12 +43,12 @@ struct imx_sc_msg_req_set_clock_rate {
__le32 rate;
__le16 resource;
u8 clk;
} __packed;
} __packed __aligned(4);
struct req_get_clock_rate {
__le16 resource;
u8 clk;
} __packed;
} __packed __aligned(4);
struct resp_get_clock_rate {
__le32 rate;
@ -84,7 +84,7 @@ struct imx_sc_msg_get_clock_parent {
struct req_get_clock_parent {
__le16 resource;
u8 clk;
} __packed req;
} __packed __aligned(4) req;
struct resp_get_clock_parent {
u8 parent;
} resp;
@ -121,7 +121,7 @@ struct imx_sc_msg_req_clock_enable {
u8 clk;
u8 enable;
u8 autog;
} __packed;
} __packed __aligned(4);
static inline struct clk_scu *to_clk_scu(struct clk_hw *hw)
{

View File

@ -78,7 +78,7 @@ static const struct omap_clkctrl_reg_data am4_gfx_l3_clkctrl_regs[] __initconst
};
static const struct omap_clkctrl_reg_data am4_l4_rtc_clkctrl_regs[] __initconst = {
{ AM4_L4_RTC_RTC_CLKCTRL, NULL, CLKF_SW_SUP, "clk_32768_ck" },
{ AM4_L4_RTC_RTC_CLKCTRL, NULL, CLKF_SW_SUP, "clkdiv32k_ick" },
{ 0 },
};

View File

@ -233,7 +233,8 @@ static u64 notrace read_hv_clock_tsc(struct clocksource *arg)
static u64 read_hv_sched_clock_tsc(void)
{
return read_hv_clock_tsc(NULL) - hv_sched_clock_offset;
return (read_hv_clock_tsc(NULL) - hv_sched_clock_offset) *
(NSEC_PER_SEC / HV_CLOCK_HZ);
}
static struct clocksource hyperv_cs_tsc = {
@ -258,7 +259,8 @@ static u64 notrace read_hv_clock_msr(struct clocksource *arg)
static u64 read_hv_sched_clock_msr(void)
{
return read_hv_clock_msr(NULL) - hv_sched_clock_offset;
return (read_hv_clock_msr(NULL) - hv_sched_clock_offset) *
(NSEC_PER_SEC / HV_CLOCK_HZ);
}
static struct clocksource hyperv_cs_msr = {

View File

@ -21,18 +21,21 @@
#include "gpiolib.h"
#include "gpiolib-acpi.h"
#define QUIRK_NO_EDGE_EVENTS_ON_BOOT 0x01l
#define QUIRK_NO_WAKEUP 0x02l
static int run_edge_events_on_boot = -1;
module_param(run_edge_events_on_boot, int, 0444);
MODULE_PARM_DESC(run_edge_events_on_boot,
"Run edge _AEI event-handlers at boot: 0=no, 1=yes, -1=auto");
static int honor_wakeup = -1;
module_param(honor_wakeup, int, 0444);
MODULE_PARM_DESC(honor_wakeup,
"Honor the ACPI wake-capable flag: 0=no, 1=yes, -1=auto");
static char *ignore_wake;
module_param(ignore_wake, charp, 0444);
MODULE_PARM_DESC(ignore_wake,
"controller@pin combos on which to ignore the ACPI wake flag "
"ignore_wake=controller@pin[,controller@pin[,...]]");
struct acpi_gpiolib_dmi_quirk {
bool no_edge_events_on_boot;
char *ignore_wake;
};
/**
* struct acpi_gpio_event - ACPI GPIO event handler data
@ -202,6 +205,57 @@ static void acpi_gpiochip_request_irqs(struct acpi_gpio_chip *acpi_gpio)
acpi_gpiochip_request_irq(acpi_gpio, event);
}
static bool acpi_gpio_in_ignore_list(const char *controller_in, int pin_in)
{
const char *controller, *pin_str;
int len, pin;
char *endp;
controller = ignore_wake;
while (controller) {
pin_str = strchr(controller, '@');
if (!pin_str)
goto err;
len = pin_str - controller;
if (len == strlen(controller_in) &&
strncmp(controller, controller_in, len) == 0) {
pin = simple_strtoul(pin_str + 1, &endp, 10);
if (*endp != 0 && *endp != ',')
goto err;
if (pin == pin_in)
return true;
}
controller = strchr(controller, ',');
if (controller)
controller++;
}
return false;
err:
pr_err_once("Error invalid value for gpiolib_acpi.ignore_wake: %s\n",
ignore_wake);
return false;
}
static bool acpi_gpio_irq_is_wake(struct device *parent,
struct acpi_resource_gpio *agpio)
{
int pin = agpio->pin_table[0];
if (agpio->wake_capable != ACPI_WAKE_CAPABLE)
return false;
if (acpi_gpio_in_ignore_list(dev_name(parent), pin)) {
dev_info(parent, "Ignoring wakeup on pin %d\n", pin);
return false;
}
return true;
}
static acpi_status acpi_gpiochip_alloc_event(struct acpi_resource *ares,
void *context)
{
@ -282,7 +336,7 @@ static acpi_status acpi_gpiochip_alloc_event(struct acpi_resource *ares,
event->handle = evt_handle;
event->handler = handler;
event->irq = irq;
event->irq_is_wake = honor_wakeup && agpio->wake_capable == ACPI_WAKE_CAPABLE;
event->irq_is_wake = acpi_gpio_irq_is_wake(chip->parent, agpio);
event->pin = pin;
event->desc = desc;
@ -1321,7 +1375,9 @@ static const struct dmi_system_id gpiolib_acpi_quirks[] = {
DMI_MATCH(DMI_SYS_VENDOR, "MINIX"),
DMI_MATCH(DMI_PRODUCT_NAME, "Z83-4"),
},
.driver_data = (void *)QUIRK_NO_EDGE_EVENTS_ON_BOOT,
.driver_data = &(struct acpi_gpiolib_dmi_quirk) {
.no_edge_events_on_boot = true,
},
},
{
/*
@ -1334,16 +1390,20 @@ static const struct dmi_system_id gpiolib_acpi_quirks[] = {
DMI_MATCH(DMI_SYS_VENDOR, "Wortmann_AG"),
DMI_MATCH(DMI_PRODUCT_NAME, "TERRA_PAD_1061"),
},
.driver_data = (void *)QUIRK_NO_EDGE_EVENTS_ON_BOOT,
.driver_data = &(struct acpi_gpiolib_dmi_quirk) {
.no_edge_events_on_boot = true,
},
},
{
/*
* Various HP X2 10 Cherry Trail models use an external
* embedded-controller connected via I2C + an ACPI GPIO
* event handler. The embedded controller generates various
* spurious wakeup events when suspended. So disable wakeup
* for its handler (it uses the only ACPI GPIO event handler).
* This breaks wakeup when opening the lid, the user needs
* HP X2 10 models with Cherry Trail SoC + TI PMIC use an
* external embedded-controller connected via I2C + an ACPI GPIO
* event handler on INT33FF:01 pin 0, causing spurious wakeups.
* When suspending by closing the LID, the power to the USB
* keyboard is turned off, causing INT0002 ACPI events to
* trigger once the XHCI controller notices the keyboard is
* gone. So INT0002 events cause spurious wakeups too. Ignoring
* EC wakes breaks wakeup when opening the lid, the user needs
* to press the power-button to wakeup the system. The
* alternative is suspend simply not working, which is worse.
*/
@ -1351,33 +1411,61 @@ static const struct dmi_system_id gpiolib_acpi_quirks[] = {
DMI_MATCH(DMI_SYS_VENDOR, "HP"),
DMI_MATCH(DMI_PRODUCT_NAME, "HP x2 Detachable 10-p0XX"),
},
.driver_data = (void *)QUIRK_NO_WAKEUP,
.driver_data = &(struct acpi_gpiolib_dmi_quirk) {
.ignore_wake = "INT33FF:01@0,INT0002:00@2",
},
},
{
/*
* HP X2 10 models with Bay Trail SoC + AXP288 PMIC use an
* external embedded-controller connected via I2C + an ACPI GPIO
* event handler on INT33FC:02 pin 28, causing spurious wakeups.
*/
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion x2 Detachable"),
DMI_MATCH(DMI_BOARD_NAME, "815D"),
},
.driver_data = &(struct acpi_gpiolib_dmi_quirk) {
.ignore_wake = "INT33FC:02@28",
},
},
{
/*
* HP X2 10 models with Cherry Trail SoC + AXP288 PMIC use an
* external embedded-controller connected via I2C + an ACPI GPIO
* event handler on INT33FF:01 pin 0, causing spurious wakeups.
*/
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "HP"),
DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion x2 Detachable"),
DMI_MATCH(DMI_BOARD_NAME, "813E"),
},
.driver_data = &(struct acpi_gpiolib_dmi_quirk) {
.ignore_wake = "INT33FF:01@0",
},
},
{} /* Terminating entry */
};
static int acpi_gpio_setup_params(void)
{
const struct acpi_gpiolib_dmi_quirk *quirk = NULL;
const struct dmi_system_id *id;
long quirks = 0;
id = dmi_first_match(gpiolib_acpi_quirks);
if (id)
quirks = (long)id->driver_data;
quirk = id->driver_data;
if (run_edge_events_on_boot < 0) {
if (quirks & QUIRK_NO_EDGE_EVENTS_ON_BOOT)
if (quirk && quirk->no_edge_events_on_boot)
run_edge_events_on_boot = 0;
else
run_edge_events_on_boot = 1;
}
if (honor_wakeup < 0) {
if (quirks & QUIRK_NO_WAKEUP)
honor_wakeup = 0;
else
honor_wakeup = 1;
}
if (ignore_wake == NULL && quirk && quirk->ignore_wake)
ignore_wake = quirk->ignore_wake;
return 0;
}

View File

@ -2194,9 +2194,16 @@ static void gpiochip_irq_disable(struct irq_data *d)
{
struct gpio_chip *chip = irq_data_get_irq_chip_data(d);
/*
* Since we override .irq_disable() we need to mimic the
* behaviour of __irq_disable() in irq/chip.c.
* First call .irq_disable() if it exists, else mimic the
* behaviour of mask_irq() which calls .irq_mask() if
* it exists.
*/
if (chip->irq.irq_disable)
chip->irq.irq_disable(d);
else
else if (chip->irq.chip->irq_mask)
chip->irq.chip->irq_mask(d);
gpiochip_disable_irq(chip, d->hwirq);
}

View File

@ -694,11 +694,11 @@ static ssize_t amdgpu_debugfs_gpr_read(struct file *f, char __user *buf,
ssize_t result = 0;
uint32_t offset, se, sh, cu, wave, simd, thread, bank, *data;
if (size & 3 || *pos & 3)
if (size > 4096 || size & 3 || *pos & 3)
return -EINVAL;
/* decode offset */
offset = *pos & GENMASK_ULL(11, 0);
offset = (*pos & GENMASK_ULL(11, 0)) >> 2;
se = (*pos & GENMASK_ULL(19, 12)) >> 12;
sh = (*pos & GENMASK_ULL(27, 20)) >> 20;
cu = (*pos & GENMASK_ULL(35, 28)) >> 28;
@ -729,7 +729,7 @@ static ssize_t amdgpu_debugfs_gpr_read(struct file *f, char __user *buf,
while (size) {
uint32_t value;
value = data[offset++];
value = data[result >> 2];
r = put_user(value, (uint32_t *)buf);
if (r) {
result = r;

View File

@ -3555,6 +3555,7 @@ static int gfx_v10_0_kcq_init_queue(struct amdgpu_ring *ring)
/* reset ring buffer */
ring->wptr = 0;
atomic64_set((atomic64_t *)&adev->wb.wb[ring->wptr_offs], 0);
amdgpu_ring_clear_ring(ring);
} else {
amdgpu_ring_clear_ring(ring);

View File

@ -3756,6 +3756,7 @@ static int gfx_v9_0_kcq_init_queue(struct amdgpu_ring *ring)
/* reset ring buffer */
ring->wptr = 0;
atomic64_set((atomic64_t *)&adev->wb.wb[ring->wptr_offs], 0);
amdgpu_ring_clear_ring(ring);
} else {
amdgpu_ring_clear_ring(ring);

View File

@ -230,7 +230,8 @@ static void gmc_v10_0_flush_vm_hub(struct amdgpu_device *adev, uint32_t vmid,
unsigned int vmhub, uint32_t flush_type)
{
struct amdgpu_vmhub *hub = &adev->vmhub[vmhub];
u32 tmp = gmc_v10_0_get_invalidate_req(vmid, flush_type);
u32 inv_req = gmc_v10_0_get_invalidate_req(vmid, flush_type);
u32 tmp;
/* Use register 17 for GART */
const unsigned eng = 17;
unsigned int i;
@ -258,7 +259,7 @@ static void gmc_v10_0_flush_vm_hub(struct amdgpu_device *adev, uint32_t vmid,
DRM_ERROR("Timeout waiting for sem acquire in VM flush!\n");
}
WREG32_NO_KIQ(hub->vm_inv_eng0_req + eng, tmp);
WREG32_NO_KIQ(hub->vm_inv_eng0_req + eng, inv_req);
/*
* Issue a dummy read to wait for the ACK register to be cleared

View File

@ -487,13 +487,13 @@ static void gmc_v9_0_flush_gpu_tlb(struct amdgpu_device *adev, uint32_t vmid,
{
bool use_semaphore = gmc_v9_0_use_invalidate_semaphore(adev, vmhub);
const unsigned eng = 17;
u32 j, tmp;
u32 j, inv_req, tmp;
struct amdgpu_vmhub *hub;
BUG_ON(vmhub >= adev->num_vmhubs);
hub = &adev->vmhub[vmhub];
tmp = gmc_v9_0_get_invalidate_req(vmid, flush_type);
inv_req = gmc_v9_0_get_invalidate_req(vmid, flush_type);
/* This is necessary for a HW workaround under SRIOV as well
* as GFXOFF under bare metal
@ -504,7 +504,7 @@ static void gmc_v9_0_flush_gpu_tlb(struct amdgpu_device *adev, uint32_t vmid,
uint32_t req = hub->vm_inv_eng0_req + eng;
uint32_t ack = hub->vm_inv_eng0_ack + eng;
amdgpu_virt_kiq_reg_write_reg_wait(adev, req, ack, tmp,
amdgpu_virt_kiq_reg_write_reg_wait(adev, req, ack, inv_req,
1 << vmid);
return;
}
@ -532,7 +532,7 @@ static void gmc_v9_0_flush_gpu_tlb(struct amdgpu_device *adev, uint32_t vmid,
DRM_ERROR("Timeout waiting for sem acquire in VM flush!\n");
}
WREG32_NO_KIQ(hub->vm_inv_eng0_req + eng, tmp);
WREG32_NO_KIQ(hub->vm_inv_eng0_req + eng, inv_req);
/*
* Issue a dummy read to wait for the ACK register to be cleared

View File

@ -84,6 +84,13 @@
#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_CTRL_EN_MASK 0x00010000L
#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_LS_EN_MASK 0x00020000L
#define mmHDP_MEM_POWER_CTRL_BASE_IDX 0
/* for Vega20/arcturus regiter offset change */
#define mmROM_INDEX_VG20 0x00e4
#define mmROM_INDEX_VG20_BASE_IDX 0
#define mmROM_DATA_VG20 0x00e5
#define mmROM_DATA_VG20_BASE_IDX 0
/*
* Indirect registers accessor
*/
@ -304,6 +311,8 @@ static bool soc15_read_bios_from_rom(struct amdgpu_device *adev,
{
u32 *dw_ptr;
u32 i, length_dw;
uint32_t rom_index_offset;
uint32_t rom_data_offset;
if (bios == NULL)
return false;
@ -316,11 +325,23 @@ static bool soc15_read_bios_from_rom(struct amdgpu_device *adev,
dw_ptr = (u32 *)bios;
length_dw = ALIGN(length_bytes, 4) / 4;
switch (adev->asic_type) {
case CHIP_VEGA20:
case CHIP_ARCTURUS:
rom_index_offset = SOC15_REG_OFFSET(SMUIO, 0, mmROM_INDEX_VG20);
rom_data_offset = SOC15_REG_OFFSET(SMUIO, 0, mmROM_DATA_VG20);
break;
default:
rom_index_offset = SOC15_REG_OFFSET(SMUIO, 0, mmROM_INDEX);
rom_data_offset = SOC15_REG_OFFSET(SMUIO, 0, mmROM_DATA);
break;
}
/* set rom index to 0 */
WREG32(SOC15_REG_OFFSET(SMUIO, 0, mmROM_INDEX), 0);
WREG32(rom_index_offset, 0);
/* read out the rom data */
for (i = 0; i < length_dw; i++)
dw_ptr[i] = RREG32(SOC15_REG_OFFSET(SMUIO, 0, mmROM_DATA));
dw_ptr[i] = RREG32(rom_data_offset);
return true;
}

View File

@ -379,6 +379,7 @@ static void dm_dp_destroy_mst_connector(struct drm_dp_mst_topology_mgr *mgr,
aconnector->dc_sink);
dc_sink_release(aconnector->dc_sink);
aconnector->dc_sink = NULL;
aconnector->dc_link->cur_link_settings.lane_count = 0;
}
drm_connector_unregister(connector);

View File

@ -840,8 +840,8 @@ static void hubbub1_det_request_size(
hubbub1_get_blk256_size(&blk256_width, &blk256_height, bpe);
swath_bytes_horz_wc = height * blk256_height * bpe;
swath_bytes_vert_wc = width * blk256_width * bpe;
swath_bytes_horz_wc = width * blk256_height * bpe;
swath_bytes_vert_wc = height * blk256_width * bpe;
*req128_horz_wc = (2 * swath_bytes_horz_wc <= detile_buf_size) ?
false : /* full 256B request */

View File

@ -269,6 +269,117 @@ struct _vcs_dpi_soc_bounding_box_st dcn2_0_soc = {
.use_urgent_burst_bw = 0
};
struct _vcs_dpi_soc_bounding_box_st dcn2_0_nv14_soc = {
.clock_limits = {
{
.state = 0,
.dcfclk_mhz = 560.0,
.fabricclk_mhz = 560.0,
.dispclk_mhz = 513.0,
.dppclk_mhz = 513.0,
.phyclk_mhz = 540.0,
.socclk_mhz = 560.0,
.dscclk_mhz = 171.0,
.dram_speed_mts = 8960.0,
},
{
.state = 1,
.dcfclk_mhz = 694.0,
.fabricclk_mhz = 694.0,
.dispclk_mhz = 642.0,
.dppclk_mhz = 642.0,
.phyclk_mhz = 600.0,
.socclk_mhz = 694.0,
.dscclk_mhz = 214.0,
.dram_speed_mts = 11104.0,
},
{
.state = 2,
.dcfclk_mhz = 875.0,
.fabricclk_mhz = 875.0,
.dispclk_mhz = 734.0,
.dppclk_mhz = 734.0,
.phyclk_mhz = 810.0,
.socclk_mhz = 875.0,
.dscclk_mhz = 245.0,
.dram_speed_mts = 14000.0,
},
{
.state = 3,
.dcfclk_mhz = 1000.0,
.fabricclk_mhz = 1000.0,
.dispclk_mhz = 1100.0,
.dppclk_mhz = 1100.0,
.phyclk_mhz = 810.0,
.socclk_mhz = 1000.0,
.dscclk_mhz = 367.0,
.dram_speed_mts = 16000.0,
},
{
.state = 4,
.dcfclk_mhz = 1200.0,
.fabricclk_mhz = 1200.0,
.dispclk_mhz = 1284.0,
.dppclk_mhz = 1284.0,
.phyclk_mhz = 810.0,
.socclk_mhz = 1200.0,
.dscclk_mhz = 428.0,
.dram_speed_mts = 16000.0,
},
/*Extra state, no dispclk ramping*/
{
.state = 5,
.dcfclk_mhz = 1200.0,
.fabricclk_mhz = 1200.0,
.dispclk_mhz = 1284.0,
.dppclk_mhz = 1284.0,
.phyclk_mhz = 810.0,
.socclk_mhz = 1200.0,
.dscclk_mhz = 428.0,
.dram_speed_mts = 16000.0,
},
},
.num_states = 5,
.sr_exit_time_us = 8.6,
.sr_enter_plus_exit_time_us = 10.9,
.urgent_latency_us = 4.0,
.urgent_latency_pixel_data_only_us = 4.0,
.urgent_latency_pixel_mixed_with_vm_data_us = 4.0,
.urgent_latency_vm_data_only_us = 4.0,
.urgent_out_of_order_return_per_channel_pixel_only_bytes = 4096,
.urgent_out_of_order_return_per_channel_pixel_and_vm_bytes = 4096,
.urgent_out_of_order_return_per_channel_vm_only_bytes = 4096,
.pct_ideal_dram_sdp_bw_after_urgent_pixel_only = 40.0,
.pct_ideal_dram_sdp_bw_after_urgent_pixel_and_vm = 40.0,
.pct_ideal_dram_sdp_bw_after_urgent_vm_only = 40.0,
.max_avg_sdp_bw_use_normal_percent = 40.0,
.max_avg_dram_bw_use_normal_percent = 40.0,
.writeback_latency_us = 12.0,
.ideal_dram_bw_after_urgent_percent = 40.0,
.max_request_size_bytes = 256,
.dram_channel_width_bytes = 2,
.fabric_datapath_to_dcn_data_return_bytes = 64,
.dcn_downspread_percent = 0.5,
.downspread_percent = 0.38,
.dram_page_open_time_ns = 50.0,
.dram_rw_turnaround_time_ns = 17.5,
.dram_return_buffer_per_channel_bytes = 8192,
.round_trip_ping_latency_dcfclk_cycles = 131,
.urgent_out_of_order_return_per_channel_bytes = 256,
.channel_interleave_bytes = 256,
.num_banks = 8,
.num_chans = 8,
.vmm_page_size_bytes = 4096,
.dram_clock_change_latency_us = 404.0,
.dummy_pstate_latency_us = 5.0,
.writeback_dram_clock_change_latency_us = 23.0,
.return_bus_width_bytes = 64,
.dispclk_dppclk_vco_speed_mhz = 3850,
.xfc_bus_transport_time_us = 20,
.xfc_xbuf_latency_tolerance_us = 4,
.use_urgent_burst_bw = 0
};
struct _vcs_dpi_soc_bounding_box_st dcn2_0_nv12_soc = { 0 };
#ifndef mmDP0_DP_DPHY_INTERNAL_CTRL
@ -3135,6 +3246,9 @@ static void patch_bounding_box(struct dc *dc, struct _vcs_dpi_soc_bounding_box_s
static struct _vcs_dpi_soc_bounding_box_st *get_asic_rev_soc_bb(
uint32_t hw_internal_rev)
{
if (ASICREV_IS_NAVI14_M(hw_internal_rev))
return &dcn2_0_nv14_soc;
if (ASICREV_IS_NAVI12_P(hw_internal_rev))
return &dcn2_0_nv12_soc;

View File

@ -988,8 +988,12 @@ static int smu_v11_0_init_max_sustainable_clocks(struct smu_context *smu)
struct smu_11_0_max_sustainable_clocks *max_sustainable_clocks;
int ret = 0;
max_sustainable_clocks = kzalloc(sizeof(struct smu_11_0_max_sustainable_clocks),
if (!smu->smu_table.max_sustainable_clocks)
max_sustainable_clocks = kzalloc(sizeof(struct smu_11_0_max_sustainable_clocks),
GFP_KERNEL);
else
max_sustainable_clocks = smu->smu_table.max_sustainable_clocks;
smu->smu_table.max_sustainable_clocks = (void *)max_sustainable_clocks;
max_sustainable_clocks->uclock = smu->smu_table.boot_values.uclk / 100;

View File

@ -1576,28 +1576,34 @@ static void hdmi_config_AVI(struct dw_hdmi *hdmi, struct drm_display_mode *mode)
frame.colorspace = HDMI_COLORSPACE_RGB;
/* Set up colorimetry */
switch (hdmi->hdmi_data.enc_out_encoding) {
case V4L2_YCBCR_ENC_601:
if (hdmi->hdmi_data.enc_in_encoding == V4L2_YCBCR_ENC_XV601)
frame.colorimetry = HDMI_COLORIMETRY_EXTENDED;
else
if (!hdmi_bus_fmt_is_rgb(hdmi->hdmi_data.enc_out_bus_format)) {
switch (hdmi->hdmi_data.enc_out_encoding) {
case V4L2_YCBCR_ENC_601:
if (hdmi->hdmi_data.enc_in_encoding == V4L2_YCBCR_ENC_XV601)
frame.colorimetry = HDMI_COLORIMETRY_EXTENDED;
else
frame.colorimetry = HDMI_COLORIMETRY_ITU_601;
frame.extended_colorimetry =
HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
break;
case V4L2_YCBCR_ENC_709:
if (hdmi->hdmi_data.enc_in_encoding == V4L2_YCBCR_ENC_XV709)
frame.colorimetry = HDMI_COLORIMETRY_EXTENDED;
else
frame.colorimetry = HDMI_COLORIMETRY_ITU_709;
frame.extended_colorimetry =
HDMI_EXTENDED_COLORIMETRY_XV_YCC_709;
break;
default: /* Carries no data */
frame.colorimetry = HDMI_COLORIMETRY_ITU_601;
frame.extended_colorimetry =
HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
break;
}
} else {
frame.colorimetry = HDMI_COLORIMETRY_NONE;
frame.extended_colorimetry =
HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
break;
case V4L2_YCBCR_ENC_709:
if (hdmi->hdmi_data.enc_in_encoding == V4L2_YCBCR_ENC_XV709)
frame.colorimetry = HDMI_COLORIMETRY_EXTENDED;
else
frame.colorimetry = HDMI_COLORIMETRY_ITU_709;
frame.extended_colorimetry =
HDMI_EXTENDED_COLORIMETRY_XV_YCC_709;
break;
default: /* Carries no data */
frame.colorimetry = HDMI_COLORIMETRY_ITU_601;
frame.extended_colorimetry =
HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
break;
HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
}
frame.scan_mode = HDMI_SCAN_MODE_NONE;

View File

@ -114,33 +114,6 @@ drm_client_find_modeset(struct drm_client_dev *client, struct drm_crtc *crtc)
return NULL;
}
static struct drm_display_mode *
drm_connector_get_tiled_mode(struct drm_connector *connector)
{
struct drm_display_mode *mode;
list_for_each_entry(mode, &connector->modes, head) {
if (mode->hdisplay == connector->tile_h_size &&
mode->vdisplay == connector->tile_v_size)
return mode;
}
return NULL;
}
static struct drm_display_mode *
drm_connector_fallback_non_tiled_mode(struct drm_connector *connector)
{
struct drm_display_mode *mode;
list_for_each_entry(mode, &connector->modes, head) {
if (mode->hdisplay == connector->tile_h_size &&
mode->vdisplay == connector->tile_v_size)
continue;
return mode;
}
return NULL;
}
static struct drm_display_mode *
drm_connector_has_preferred_mode(struct drm_connector *connector, int width, int height)
{
@ -375,15 +348,8 @@ static bool drm_client_target_preferred(struct drm_connector **connectors,
struct drm_connector *connector;
u64 conn_configured = 0;
int tile_pass = 0;
int num_tiled_conns = 0;
int i;
for (i = 0; i < connector_count; i++) {
if (connectors[i]->has_tile &&
connectors[i]->status == connector_status_connected)
num_tiled_conns++;
}
retry:
for (i = 0; i < connector_count; i++) {
connector = connectors[i];
@ -433,28 +399,6 @@ static bool drm_client_target_preferred(struct drm_connector **connectors,
list_for_each_entry(modes[i], &connector->modes, head)
break;
}
/*
* In case of tiled mode if all tiles not present fallback to
* first available non tiled mode.
* After all tiles are present, try to find the tiled mode
* for all and if tiled mode not present due to fbcon size
* limitations, use first non tiled mode only for
* tile 0,0 and set to no mode for all other tiles.
*/
if (connector->has_tile) {
if (num_tiled_conns <
connector->num_h_tile * connector->num_v_tile ||
(connector->tile_h_loc == 0 &&
connector->tile_v_loc == 0 &&
!drm_connector_get_tiled_mode(connector))) {
DRM_DEBUG_KMS("Falling back to non tiled mode on Connector %d\n",
connector->base.id);
modes[i] = drm_connector_fallback_non_tiled_mode(connector);
} else {
modes[i] = drm_connector_get_tiled_mode(connector);
}
}
DRM_DEBUG_KMS("found mode %s\n", modes[i] ? modes[i]->name :
"none");
conn_configured |= BIT_ULL(i);
@ -572,7 +516,6 @@ static bool drm_client_firmware_config(struct drm_client_dev *client,
bool fallback = true, ret = true;
int num_connectors_enabled = 0;
int num_connectors_detected = 0;
int num_tiled_conns = 0;
struct drm_modeset_acquire_ctx ctx;
if (!drm_drv_uses_atomic_modeset(dev))
@ -590,11 +533,6 @@ static bool drm_client_firmware_config(struct drm_client_dev *client,
memcpy(save_enabled, enabled, count);
mask = GENMASK(count - 1, 0);
conn_configured = 0;
for (i = 0; i < count; i++) {
if (connectors[i]->has_tile &&
connectors[i]->status == connector_status_connected)
num_tiled_conns++;
}
retry:
conn_seq = conn_configured;
for (i = 0; i < count; i++) {
@ -694,16 +632,6 @@ static bool drm_client_firmware_config(struct drm_client_dev *client,
connector->name);
modes[i] = &connector->state->crtc->mode;
}
/*
* In case of tiled modes, if all tiles are not present
* then fallback to a non tiled mode.
*/
if (connector->has_tile &&
num_tiled_conns < connector->num_h_tile * connector->num_v_tile) {
DRM_DEBUG_KMS("Falling back to non tiled mode on Connector %d\n",
connector->base.id);
modes[i] = drm_connector_fallback_non_tiled_mode(connector);
}
crtcs[i] = new_crtc;
DRM_DEBUG_KMS("connector %s on [CRTC:%d:%s]: %dx%d%s\n",

View File

@ -542,10 +542,12 @@ int drm_mode_create_lease_ioctl(struct drm_device *dev,
}
DRM_DEBUG_LEASE("Creating lease\n");
/* lessee will take the ownership of leases */
lessee = drm_lease_create(lessor, &leases);
if (IS_ERR(lessee)) {
ret = PTR_ERR(lessee);
idr_destroy(&leases);
goto out_leases;
}
@ -580,7 +582,6 @@ int drm_mode_create_lease_ioctl(struct drm_device *dev,
out_leases:
put_unused_fd(fd);
idr_destroy(&leases);
DRM_DEBUG_LEASE("drm_mode_create_lease_ioctl failed: %d\n", ret);
return ret;

View File

@ -55,6 +55,7 @@ static const char * const decon_clks_name[] = {
struct decon_context {
struct device *dev;
struct drm_device *drm_dev;
void *dma_priv;
struct exynos_drm_crtc *crtc;
struct exynos_drm_plane planes[WINDOWS_NR];
struct exynos_drm_plane_config configs[WINDOWS_NR];
@ -644,7 +645,7 @@ static int decon_bind(struct device *dev, struct device *master, void *data)
decon_clear_channels(ctx->crtc);
return exynos_drm_register_dma(drm_dev, dev);
return exynos_drm_register_dma(drm_dev, dev, &ctx->dma_priv);
}
static void decon_unbind(struct device *dev, struct device *master, void *data)
@ -654,7 +655,7 @@ static void decon_unbind(struct device *dev, struct device *master, void *data)
decon_disable(ctx->crtc);
/* detach this sub driver from iommu mapping if supported. */
exynos_drm_unregister_dma(ctx->drm_dev, ctx->dev);
exynos_drm_unregister_dma(ctx->drm_dev, ctx->dev, &ctx->dma_priv);
}
static const struct component_ops decon_component_ops = {

View File

@ -40,6 +40,7 @@
struct decon_context {
struct device *dev;
struct drm_device *drm_dev;
void *dma_priv;
struct exynos_drm_crtc *crtc;
struct exynos_drm_plane planes[WINDOWS_NR];
struct exynos_drm_plane_config configs[WINDOWS_NR];
@ -127,13 +128,13 @@ static int decon_ctx_initialize(struct decon_context *ctx,
decon_clear_channels(ctx->crtc);
return exynos_drm_register_dma(drm_dev, ctx->dev);
return exynos_drm_register_dma(drm_dev, ctx->dev, &ctx->dma_priv);
}
static void decon_ctx_remove(struct decon_context *ctx)
{
/* detach this sub driver from iommu mapping if supported. */
exynos_drm_unregister_dma(ctx->drm_dev, ctx->dev);
exynos_drm_unregister_dma(ctx->drm_dev, ctx->dev, &ctx->dma_priv);
}
static u32 decon_calc_clkdiv(struct decon_context *ctx,

View File

@ -58,7 +58,7 @@ static inline void clear_dma_max_seg_size(struct device *dev)
* mapping.
*/
static int drm_iommu_attach_device(struct drm_device *drm_dev,
struct device *subdrv_dev)
struct device *subdrv_dev, void **dma_priv)
{
struct exynos_drm_private *priv = drm_dev->dev_private;
int ret;
@ -74,7 +74,14 @@ static int drm_iommu_attach_device(struct drm_device *drm_dev,
return ret;
if (IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU)) {
if (to_dma_iommu_mapping(subdrv_dev))
/*
* Keep the original DMA mapping of the sub-device and
* restore it on Exynos DRM detach, otherwise the DMA
* framework considers it as IOMMU-less during the next
* probe (in case of deferred probe or modular build)
*/
*dma_priv = to_dma_iommu_mapping(subdrv_dev);
if (*dma_priv)
arm_iommu_detach_device(subdrv_dev);
ret = arm_iommu_attach_device(subdrv_dev, priv->mapping);
@ -98,19 +105,21 @@ static int drm_iommu_attach_device(struct drm_device *drm_dev,
* mapping
*/
static void drm_iommu_detach_device(struct drm_device *drm_dev,
struct device *subdrv_dev)
struct device *subdrv_dev, void **dma_priv)
{
struct exynos_drm_private *priv = drm_dev->dev_private;
if (IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU))
if (IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU)) {
arm_iommu_detach_device(subdrv_dev);
else if (IS_ENABLED(CONFIG_IOMMU_DMA))
arm_iommu_attach_device(subdrv_dev, *dma_priv);
} else if (IS_ENABLED(CONFIG_IOMMU_DMA))
iommu_detach_device(priv->mapping, subdrv_dev);
clear_dma_max_seg_size(subdrv_dev);
}
int exynos_drm_register_dma(struct drm_device *drm, struct device *dev)
int exynos_drm_register_dma(struct drm_device *drm, struct device *dev,
void **dma_priv)
{
struct exynos_drm_private *priv = drm->dev_private;
@ -137,13 +146,14 @@ int exynos_drm_register_dma(struct drm_device *drm, struct device *dev)
priv->mapping = mapping;
}
return drm_iommu_attach_device(drm, dev);
return drm_iommu_attach_device(drm, dev, dma_priv);
}
void exynos_drm_unregister_dma(struct drm_device *drm, struct device *dev)
void exynos_drm_unregister_dma(struct drm_device *drm, struct device *dev,
void **dma_priv)
{
if (IS_ENABLED(CONFIG_EXYNOS_IOMMU))
drm_iommu_detach_device(drm, dev);
drm_iommu_detach_device(drm, dev, dma_priv);
}
void exynos_drm_cleanup_dma(struct drm_device *drm)

View File

@ -223,8 +223,10 @@ static inline bool is_drm_iommu_supported(struct drm_device *drm_dev)
return priv->mapping ? true : false;
}
int exynos_drm_register_dma(struct drm_device *drm, struct device *dev);
void exynos_drm_unregister_dma(struct drm_device *drm, struct device *dev);
int exynos_drm_register_dma(struct drm_device *drm, struct device *dev,
void **dma_priv);
void exynos_drm_unregister_dma(struct drm_device *drm, struct device *dev,
void **dma_priv);
void exynos_drm_cleanup_dma(struct drm_device *drm);
#ifdef CONFIG_DRM_EXYNOS_DPI

View File

@ -1750,8 +1750,9 @@ static int exynos_dsi_probe(struct platform_device *pdev)
ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(dsi->supplies),
dsi->supplies);
if (ret) {
dev_info(dev, "failed to get regulators: %d\n", ret);
return -EPROBE_DEFER;
if (ret != -EPROBE_DEFER)
dev_info(dev, "failed to get regulators: %d\n", ret);
return ret;
}
dsi->clks = devm_kcalloc(dev,
@ -1764,9 +1765,10 @@ static int exynos_dsi_probe(struct platform_device *pdev)
dsi->clks[i] = devm_clk_get(dev, clk_names[i]);
if (IS_ERR(dsi->clks[i])) {
if (strcmp(clk_names[i], "sclk_mipi") == 0) {
strcpy(clk_names[i], OLD_SCLK_MIPI_CLK_NAME);
i--;
continue;
dsi->clks[i] = devm_clk_get(dev,
OLD_SCLK_MIPI_CLK_NAME);
if (!IS_ERR(dsi->clks[i]))
continue;
}
dev_info(dev, "failed to get the clock: %s\n",

View File

@ -97,6 +97,7 @@ struct fimc_scaler {
struct fimc_context {
struct exynos_drm_ipp ipp;
struct drm_device *drm_dev;
void *dma_priv;
struct device *dev;
struct exynos_drm_ipp_task *task;
struct exynos_drm_ipp_formats *formats;
@ -1133,7 +1134,7 @@ static int fimc_bind(struct device *dev, struct device *master, void *data)
ctx->drm_dev = drm_dev;
ipp->drm_dev = drm_dev;
exynos_drm_register_dma(drm_dev, dev);
exynos_drm_register_dma(drm_dev, dev, &ctx->dma_priv);
exynos_drm_ipp_register(dev, ipp, &ipp_funcs,
DRM_EXYNOS_IPP_CAP_CROP | DRM_EXYNOS_IPP_CAP_ROTATE |
@ -1153,7 +1154,7 @@ static void fimc_unbind(struct device *dev, struct device *master,
struct exynos_drm_ipp *ipp = &ctx->ipp;
exynos_drm_ipp_unregister(dev, ipp);
exynos_drm_unregister_dma(drm_dev, dev);
exynos_drm_unregister_dma(drm_dev, dev, &ctx->dma_priv);
}
static const struct component_ops fimc_component_ops = {

View File

@ -167,6 +167,7 @@ static struct fimd_driver_data exynos5420_fimd_driver_data = {
struct fimd_context {
struct device *dev;
struct drm_device *drm_dev;
void *dma_priv;
struct exynos_drm_crtc *crtc;
struct exynos_drm_plane planes[WINDOWS_NR];
struct exynos_drm_plane_config configs[WINDOWS_NR];
@ -1090,7 +1091,7 @@ static int fimd_bind(struct device *dev, struct device *master, void *data)
if (is_drm_iommu_supported(drm_dev))
fimd_clear_channels(ctx->crtc);
return exynos_drm_register_dma(drm_dev, dev);
return exynos_drm_register_dma(drm_dev, dev, &ctx->dma_priv);
}
static void fimd_unbind(struct device *dev, struct device *master,
@ -1100,7 +1101,7 @@ static void fimd_unbind(struct device *dev, struct device *master,
fimd_disable(ctx->crtc);
exynos_drm_unregister_dma(ctx->drm_dev, ctx->dev);
exynos_drm_unregister_dma(ctx->drm_dev, ctx->dev, &ctx->dma_priv);
if (ctx->encoder)
exynos_dpi_remove(ctx->encoder);

View File

@ -232,6 +232,7 @@ struct g2d_runqueue_node {
struct g2d_data {
struct device *dev;
void *dma_priv;
struct clk *gate_clk;
void __iomem *regs;
int irq;
@ -1409,7 +1410,7 @@ static int g2d_bind(struct device *dev, struct device *master, void *data)
return ret;
}
ret = exynos_drm_register_dma(drm_dev, dev);
ret = exynos_drm_register_dma(drm_dev, dev, &g2d->dma_priv);
if (ret < 0) {
dev_err(dev, "failed to enable iommu.\n");
g2d_fini_cmdlist(g2d);
@ -1434,7 +1435,7 @@ static void g2d_unbind(struct device *dev, struct device *master, void *data)
priv->g2d_dev = NULL;
cancel_work_sync(&g2d->runqueue_work);
exynos_drm_unregister_dma(g2d->drm_dev, dev);
exynos_drm_unregister_dma(g2d->drm_dev, dev, &g2d->dma_priv);
}
static const struct component_ops g2d_component_ops = {

View File

@ -97,6 +97,7 @@ struct gsc_scaler {
struct gsc_context {
struct exynos_drm_ipp ipp;
struct drm_device *drm_dev;
void *dma_priv;
struct device *dev;
struct exynos_drm_ipp_task *task;
struct exynos_drm_ipp_formats *formats;
@ -1169,7 +1170,7 @@ static int gsc_bind(struct device *dev, struct device *master, void *data)
ctx->drm_dev = drm_dev;
ctx->drm_dev = drm_dev;
exynos_drm_register_dma(drm_dev, dev);
exynos_drm_register_dma(drm_dev, dev, &ctx->dma_priv);
exynos_drm_ipp_register(dev, ipp, &ipp_funcs,
DRM_EXYNOS_IPP_CAP_CROP | DRM_EXYNOS_IPP_CAP_ROTATE |
@ -1189,7 +1190,7 @@ static void gsc_unbind(struct device *dev, struct device *master,
struct exynos_drm_ipp *ipp = &ctx->ipp;
exynos_drm_ipp_unregister(dev, ipp);
exynos_drm_unregister_dma(drm_dev, dev);
exynos_drm_unregister_dma(drm_dev, dev, &ctx->dma_priv);
}
static const struct component_ops gsc_component_ops = {

View File

@ -56,6 +56,7 @@ struct rot_variant {
struct rot_context {
struct exynos_drm_ipp ipp;
struct drm_device *drm_dev;
void *dma_priv;
struct device *dev;
void __iomem *regs;
struct clk *clock;
@ -243,7 +244,7 @@ static int rotator_bind(struct device *dev, struct device *master, void *data)
rot->drm_dev = drm_dev;
ipp->drm_dev = drm_dev;
exynos_drm_register_dma(drm_dev, dev);
exynos_drm_register_dma(drm_dev, dev, &rot->dma_priv);
exynos_drm_ipp_register(dev, ipp, &ipp_funcs,
DRM_EXYNOS_IPP_CAP_CROP | DRM_EXYNOS_IPP_CAP_ROTATE,
@ -261,7 +262,7 @@ static void rotator_unbind(struct device *dev, struct device *master,
struct exynos_drm_ipp *ipp = &rot->ipp;
exynos_drm_ipp_unregister(dev, ipp);
exynos_drm_unregister_dma(rot->drm_dev, rot->dev);
exynos_drm_unregister_dma(rot->drm_dev, rot->dev, &rot->dma_priv);
}
static const struct component_ops rotator_component_ops = {

View File

@ -39,6 +39,7 @@ struct scaler_data {
struct scaler_context {
struct exynos_drm_ipp ipp;
struct drm_device *drm_dev;
void *dma_priv;
struct device *dev;
void __iomem *regs;
struct clk *clock[SCALER_MAX_CLK];
@ -450,7 +451,7 @@ static int scaler_bind(struct device *dev, struct device *master, void *data)
scaler->drm_dev = drm_dev;
ipp->drm_dev = drm_dev;
exynos_drm_register_dma(drm_dev, dev);
exynos_drm_register_dma(drm_dev, dev, &scaler->dma_priv);
exynos_drm_ipp_register(dev, ipp, &ipp_funcs,
DRM_EXYNOS_IPP_CAP_CROP | DRM_EXYNOS_IPP_CAP_ROTATE |
@ -470,7 +471,8 @@ static void scaler_unbind(struct device *dev, struct device *master,
struct exynos_drm_ipp *ipp = &scaler->ipp;
exynos_drm_ipp_unregister(dev, ipp);
exynos_drm_unregister_dma(scaler->drm_dev, scaler->dev);
exynos_drm_unregister_dma(scaler->drm_dev, scaler->dev,
&scaler->dma_priv);
}
static const struct component_ops scaler_component_ops = {

View File

@ -1802,18 +1802,10 @@ static int hdmi_resources_init(struct hdmi_context *hdata)
hdata->reg_hdmi_en = devm_regulator_get_optional(dev, "hdmi-en");
if (PTR_ERR(hdata->reg_hdmi_en) != -ENODEV) {
if (PTR_ERR(hdata->reg_hdmi_en) != -ENODEV)
if (IS_ERR(hdata->reg_hdmi_en))
return PTR_ERR(hdata->reg_hdmi_en);
ret = regulator_enable(hdata->reg_hdmi_en);
if (ret) {
DRM_DEV_ERROR(dev,
"failed to enable hdmi-en regulator\n");
return ret;
}
}
return hdmi_bridge_init(hdata);
}
@ -2020,6 +2012,15 @@ static int hdmi_probe(struct platform_device *pdev)
}
}
if (!IS_ERR(hdata->reg_hdmi_en)) {
ret = regulator_enable(hdata->reg_hdmi_en);
if (ret) {
DRM_DEV_ERROR(dev,
"failed to enable hdmi-en regulator\n");
goto err_hdmiphy;
}
}
pm_runtime_enable(dev);
audio_infoframe = &hdata->audio.infoframe;
@ -2044,7 +2045,8 @@ static int hdmi_probe(struct platform_device *pdev)
err_rpm_disable:
pm_runtime_disable(dev);
if (!IS_ERR(hdata->reg_hdmi_en))
regulator_disable(hdata->reg_hdmi_en);
err_hdmiphy:
if (hdata->hdmiphy_port)
put_device(&hdata->hdmiphy_port->dev);

View File

@ -94,6 +94,7 @@ struct mixer_context {
struct platform_device *pdev;
struct device *dev;
struct drm_device *drm_dev;
void *dma_priv;
struct exynos_drm_crtc *crtc;
struct exynos_drm_plane planes[MIXER_WIN_NR];
unsigned long flags;
@ -894,12 +895,14 @@ static int mixer_initialize(struct mixer_context *mixer_ctx,
}
}
return exynos_drm_register_dma(drm_dev, mixer_ctx->dev);
return exynos_drm_register_dma(drm_dev, mixer_ctx->dev,
&mixer_ctx->dma_priv);
}
static void mixer_ctx_remove(struct mixer_context *mixer_ctx)
{
exynos_drm_unregister_dma(mixer_ctx->drm_dev, mixer_ctx->dev);
exynos_drm_unregister_dma(mixer_ctx->drm_dev, mixer_ctx->dev,
&mixer_ctx->dma_priv);
}
static int mixer_enable_vblank(struct exynos_drm_crtc *crtc)

View File

@ -496,10 +496,18 @@ static const struct drm_crtc_helper_funcs mtk_crtc_helper_funcs = {
static int mtk_drm_crtc_init(struct drm_device *drm,
struct mtk_drm_crtc *mtk_crtc,
struct drm_plane *primary,
struct drm_plane *cursor, unsigned int pipe)
unsigned int pipe)
{
int ret;
struct drm_plane *primary = NULL;
struct drm_plane *cursor = NULL;
int i, ret;
for (i = 0; i < mtk_crtc->layer_nr; i++) {
if (mtk_crtc->planes[i].type == DRM_PLANE_TYPE_PRIMARY)
primary = &mtk_crtc->planes[i];
else if (mtk_crtc->planes[i].type == DRM_PLANE_TYPE_CURSOR)
cursor = &mtk_crtc->planes[i];
}
ret = drm_crtc_init_with_planes(drm, &mtk_crtc->base, primary, cursor,
&mtk_crtc_funcs, NULL);
@ -608,9 +616,7 @@ int mtk_drm_crtc_create(struct drm_device *drm_dev,
return ret;
}
ret = mtk_drm_crtc_init(drm_dev, mtk_crtc, &mtk_crtc->planes[0],
mtk_crtc->layer_nr > 1 ? &mtk_crtc->planes[1] :
NULL, pipe);
ret = mtk_drm_crtc_init(drm_dev, mtk_crtc, pipe);
if (ret < 0)
return ret;

View File

@ -340,7 +340,8 @@ static int apple_input_mapping(struct hid_device *hdev, struct hid_input *hi,
unsigned long **bit, int *max)
{
if (usage->hid == (HID_UP_CUSTOM | 0x0003) ||
usage->hid == (HID_UP_MSVENDOR | 0x0003)) {
usage->hid == (HID_UP_MSVENDOR | 0x0003) ||
usage->hid == (HID_UP_HPVENDOR2 | 0x0003)) {
/* The fn key on Apple USB keyboards */
set_bit(EV_REP, hi->input->evbit);
hid_map_usage_clear(hi, usage, bit, max, EV_KEY, KEY_FN);

View File

@ -174,6 +174,7 @@ static __u8 pid0902_rdesc_fixed[] = {
struct bigben_device {
struct hid_device *hid;
struct hid_report *report;
bool removed;
u8 led_state; /* LED1 = 1 .. LED4 = 8 */
u8 right_motor_on; /* right motor off/on 0/1 */
u8 left_motor_force; /* left motor force 0-255 */
@ -190,6 +191,9 @@ static void bigben_worker(struct work_struct *work)
struct bigben_device, worker);
struct hid_field *report_field = bigben->report->field[0];
if (bigben->removed)
return;
if (bigben->work_led) {
bigben->work_led = false;
report_field->value[0] = 0x01; /* 1 = led message */
@ -220,10 +224,16 @@ static void bigben_worker(struct work_struct *work)
static int hid_bigben_play_effect(struct input_dev *dev, void *data,
struct ff_effect *effect)
{
struct bigben_device *bigben = data;
struct hid_device *hid = input_get_drvdata(dev);
struct bigben_device *bigben = hid_get_drvdata(hid);
u8 right_motor_on;
u8 left_motor_force;
if (!bigben) {
hid_err(hid, "no device data\n");
return 0;
}
if (effect->type != FF_RUMBLE)
return 0;
@ -298,8 +308,8 @@ static void bigben_remove(struct hid_device *hid)
{
struct bigben_device *bigben = hid_get_drvdata(hid);
bigben->removed = true;
cancel_work_sync(&bigben->worker);
hid_hw_close(hid);
hid_hw_stop(hid);
}
@ -319,6 +329,7 @@ static int bigben_probe(struct hid_device *hid,
return -ENOMEM;
hid_set_drvdata(hid, bigben);
bigben->hid = hid;
bigben->removed = false;
error = hid_parse(hid);
if (error) {
@ -341,10 +352,10 @@ static int bigben_probe(struct hid_device *hid,
INIT_WORK(&bigben->worker, bigben_worker);
error = input_ff_create_memless(hidinput->input, bigben,
error = input_ff_create_memless(hidinput->input, NULL,
hid_bigben_play_effect);
if (error)
return error;
goto error_hw_stop;
name_sz = strlen(dev_name(&hid->dev)) + strlen(":red:bigben#") + 1;
@ -354,8 +365,10 @@ static int bigben_probe(struct hid_device *hid,
sizeof(struct led_classdev) + name_sz,
GFP_KERNEL
);
if (!led)
return -ENOMEM;
if (!led) {
error = -ENOMEM;
goto error_hw_stop;
}
name = (void *)(&led[1]);
snprintf(name, name_sz,
"%s:red:bigben%d",
@ -369,7 +382,7 @@ static int bigben_probe(struct hid_device *hid,
bigben->leds[n] = led;
error = devm_led_classdev_register(&hid->dev, led);
if (error)
return error;
goto error_hw_stop;
}
/* initial state: LED1 is on, no rumble effect */
@ -383,6 +396,10 @@ static int bigben_probe(struct hid_device *hid,
hid_info(hid, "LED and force feedback support for BigBen gamepad\n");
return 0;
error_hw_stop:
hid_hw_stop(hid);
return error;
}
static __u8 *bigben_report_fixup(struct hid_device *hid, __u8 *rdesc,

Some files were not shown because too many files have changed in this diff Show More