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:
commit
8ec8dcf3dd
@ -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
|
||||
|
@ -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
|
||||
-----------
|
||||
|
||||
|
@ -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).
|
||||
|
@ -23,6 +23,7 @@ USB support
|
||||
mtouchusb
|
||||
ohci
|
||||
rio
|
||||
raw-gadget
|
||||
usbip_protocol
|
||||
usbmon
|
||||
usb-serial
|
||||
|
61
Documentation/usb/raw-gadget.rst
Normal file
61
Documentation/usb/raw-gadget.rst
Normal 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.
|
5
Makefile
5
Makefile
@ -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
|
||||
|
||||
|
139232
abi_gki_aarch64.xml
139232
abi_gki_aarch64.xml
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -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
|
||||
|
@ -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
|
||||
|
1160
abi_gki_aarch64_goldfish_whitelist
Normal file
1160
abi_gki_aarch64_goldfish_whitelist
Normal file
File diff suppressed because it is too large
Load Diff
1550
abi_gki_aarch64_hikey960_whitelist
Normal file
1550
abi_gki_aarch64_hikey960_whitelist
Normal file
File diff suppressed because it is too large
Load Diff
@ -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
|
||||
|
@ -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
|
||||
|
@ -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))
|
||||
|
@ -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.
|
||||
|
@ -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>;
|
||||
|
@ -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;
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -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>;
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -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>;
|
||||
|
||||
/*
|
||||
|
@ -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>,
|
||||
|
@ -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 {
|
||||
|
@ -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 {
|
||||
|
@ -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 = <®_drivevbus>;
|
||||
usb1_vbus-supply = <®_vmain>;
|
||||
usb2_vbus-supply = <®_vmain>;
|
||||
|
@ -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>;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -20,6 +20,8 @@
|
||||
};
|
||||
|
||||
&fman0 {
|
||||
fsl,erratum-a050385;
|
||||
|
||||
/* these aliases provide the FMan ports mapping */
|
||||
enet0: ethernet@e0000 {
|
||||
};
|
||||
|
@ -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 {
|
||||
|
@ -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 {
|
||||
|
@ -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
|
||||
|
66
arch/arm64/configs/hikey960_gki.fragment
Normal file
66
arch/arm64/configs/hikey960_gki.fragment
Normal 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
|
@ -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
|
||||
|
||||
/*
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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))
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
||||
/*
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
*
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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:
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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=''
|
||||
|
@ -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=""
|
@ -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=""
|
@ -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
|
||||
|
@ -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
17
build.config.hikey960
Normal 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
|
||||
"
|
@ -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
|
@ -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;
|
||||
|
@ -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)
|
||||
|
@ -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();
|
||||
|
@ -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 */);
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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 */
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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 */ }
|
||||
};
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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 },
|
||||
};
|
||||
|
||||
|
@ -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 = {
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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 */
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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",
|
||||
|
@ -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;
|
||||
|
@ -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 = {
|
||||
|
@ -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,
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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",
|
||||
|
@ -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 = {
|
||||
|
@ -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);
|
||||
|
@ -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 = {
|
||||
|
@ -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 = {
|
||||
|
@ -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 = {
|
||||
|
@ -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 = {
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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
Loading…
Reference in New Issue
Block a user