Merge tag 'android11-5.4.286_r00' into android11-5.4
This catches the android11-5.4 branch up to the 5.4.286 LTS release. Changes merged here are: *3871647ee4Revert "spi: Fix deadlock when adding SPI controllers on SPI buses" *a1434939a5Revert "spi: fix use-after-free of the add_lock mutex" *da1a77953eMerge 5.4.286 into android11-5.4-lts |\ | *cd5b619ac4Linux 5.4.286 | *3213fdcab9mm: avoid leaving partial pfn mappings around in error case | *cfb280cc3b9p: fix slab cache name creation for real | *b97a50adb3mm: add remap_pfn_range_notrack | *00106a045dmm/memory.c: make remap_pfn_range() reject unaligned addr | *e681c83006mm: fix ambiguous comments for better code readability | *31ccf3b44emm: clarify a confusing comment for remap_pfn_range() | *882e4c6a3bmd/raid10: improve code of mrdev in raid10_sync_request | *8bb1d617a3net: usb: qmi_wwan: add Fibocom FG132 0x0112 composition | *17ecb40c5cfs: Fix uninitialized value issue in from_kuid and from_kgid | *45eadf46ffpowerpc/powernv: Free name on error in opal_event_init() | *1fe7d27e6asound: Make CONFIG_SND depend on INDIRECT_IOMEM instead of UML | *c868a06a3fbpf: use kvzmalloc to allocate BPF verifier environment | *a8a1c7fe27HID: multitouch: Add quirk for HONOR MagicBook Art 14 touchpad | *9c28c5edc89p: Avoid creating multiple slab caches with the same name | *fae6fcef17ALSA: usb-audio: Add endianness annotations | *fd8ae34669vsock/virtio: Initialization of the dangling pointer occurring in vsk->trans | *4fe1d42f2ahv_sock: Initializing vsk->trans to NULL to prevent a dangling pointer | *eea46baf14ftrace: Fix possible use-after-free issue in ftrace_location() | *52300eb17eNFSD: Fix NFSv4's PUTPUBFH operation | *56fa2e5decALSA: usb-audio: Add quirks for Dell WD19 dock | *a19f12b52aALSA: usb-audio: Support jack detection on Dell dock | *168a9b8303ocfs2: remove entry once instead of null-ptr-dereference in ocfs2_xa_remove() | *8cdb2d0796irqchip/gic-v3: Force propagation of the active state with a read-back | *2f29a9fbaeUSB: serial: option: add Quectel RG650V | *02fcc5cda6USB: serial: option: add Fibocom FG132 0x0112 composition | *853fffe789USB: serial: qcserial: add support for Sierra Wireless EM86xx | *39709ce93fUSB: serial: io_edgeport: fix use after free in debug printk | *4aa77d5ea9usb: musb: sunxi: Fix accessing an released usb phy | *a1be63b9e7fs/proc: fix compile warning about variable 'vmcore_mmap_ops' | *684022f81fmedia: uvcvideo: Skip parsing frames of type UVC_VS_UNDEFINED in uvc_parse_format | *b2b7c43cd3net: bridge: xmit: make sure we have at least eth header len bytes | *54c2c96eafspi: fix use-after-free of the add_lock mutex | *aa3f3d7befspi: Fix deadlock when adding SPI controllers on SPI buses | *fb77ce7138mtd: rawnand: protect access to rawnand devices while in suspend | *93c5b8deccbtrfs: reinitialize delayed ref list after deleting it from the list | *bbfcd261ccnfs: Fix KMSAN warning in decode_getfattr_attrs() | *95da52fb73dm-unstriped: cast an operand to sector_t to prevent potential uint32_t overflow | *2222b0929ddm cache: fix potential out-of-bounds access on the first resume | *8c3400a7fbdm cache: optimize dirty bit checking with find_next_bit when resizing | *8501e38dc9dm cache: fix out-of-bounds access to the dirty bitset when resizing | *a45d78569bdm cache: correct the number of origin blocks to match the target length | *8d7a28eca7drm/amdgpu: prevent NULL pointer dereference if ATIF is not supported | *7ccd781794drm/amdgpu: add missing size check in amdgpu_debugfs_gprwave_read() | *f1d086c9b9pwm: imx-tpm: Use correct MODULO value for EPWM mode | *0bfc6e38eemedia: v4l2-tpg: prevent the risk of a division by zero | *cad97ca8cfmedia: cx24116: prevent overflows on SNR calculus | *e5117f6e7amedia: s5p-jpeg: prevent buffer overflows | *2df76b10cbALSA: firewire-lib: fix return value on fail in amdtp_tscm_init() | *31e562e5edmedia: adv7604: prevent underflow condition when reporting colorspace | *5b389fe18cmedia: dvb_frontend: don't play tricks with underflow values | *3b88675e18media: dvbdev: prevent the risk of out of memory access | *39023c18e8media: stb0899_algo: initialize cfr before using it | *7ae4e56de7net: hns3: fix kernel crash when uninstalling driver | *83b3b73afccan: c_can: fix {rx,tx}_errors statistics | *9b5d42aeafsctp: properly validate chunk size in sctp_sf_ootb() | *4d846b3671net: enetc: set MAC address to the VF net_device | *98394cf697enetc: simplify the return expression of enetc_vf_set_mac_addr() | *4efb69a0e2security/keys: fix slab-out-of-bounds in key_task_permission | *3f9e88f267HID: core: zero-initialize the report buffer | *1e635487b0ARM: dts: rockchip: Fix the realtek audio codec on rk3036-kylin | *18f4ca39c6ARM: dts: rockchip: Fix the spi controller on rk3036 | *a10fa5624bARM: dts: rockchip: drop grf reference from rk3036 hdmi | *43b8d98629ARM: dts: rockchip: fix rk3036 acodec node | *27873e995darm64: dts: rockchip: Remove #cooling-cells from fan on Theobroma lion | *b57072b869arm64: dts: rockchip: Fix bluetooth properties on Rock960 boards | *8d258ec8c3arm64: dts: rockchip: Remove hdmi's 2nd interrupt on rk3328 | *282a6ed21barm64: dts: rockchip: Fix rt5651 compatible value on rk3399-sapphire-excavator * |bc1dcc543bRevert "genetlink: hold RCU in genlmsg_mcast()" * |9d6ed89ef0Revert "arm64: probes: Fix uprobes for big-endian kernels" * |73ec729f1bRevert "arm64/uprobes: change the uprobe_opcode_t typedef to fix the sparse warning" * |39666daae5Revert "inet: inet_defrag: prevent sk release while still in use" * |94424b0fceMerge 5.4.285 into android11-5.4-lts |\| | *6b8cbbd597Linux 5.4.285 | *8ebee7565emm: krealloc: Fix MTE false alarm in __do_krealloc | *c6ab967946mac80211: always have ieee80211_sta_restart() | *dc794e878evt: prevent kernel-infoleak in con_font_get() | *7e948e456dRevert "drm/mipi-dsi: Set the fwnode for mipi_dsi_device" | *7cc30ada84mm: shmem: fix data-race in shmem_getattr() | *64afad73e4nilfs2: fix kernel bug due to missing clearing of checked flag | *95fbed8ae8ocfs2: pass u64 to ocfs2_truncate_inline maybe overflow | *23669f189friscv: Remove unused GENERATING_ASM_OFFSETS | *a1686db1e5nilfs2: fix potential deadlock with newly created symlinks | *fcd6b59f7astaging: iio: frequency: ad9832: fix division by zero in ad9832_calc_freqreg() | *9d89941e51wifi: iwlegacy: Clear stale interrupts before resuming device | *6fc9af3df6wifi: ath10k: Fix memory leak in management tx | *78b698fbf3wifi: mac80211: do not pass a stopped vif to the driver in .get_txpower | *d4dba9a076Revert "driver core: Fix uevent_show() vs driver detach race" | *b115ecd0c6xhci: Fix Link TRB DMA in command ring stopped completion event | *ceb2f3fe8eusb: phy: Fix API devm_usb_put_phy() can not release the phy | *aaa1b28378usbip: tools: Fix detach_port() invalid port error path | *d54dad3af7misc: sgi-gru: Don't disable preemption in GRU driver | *57aabb8c97net: amd: mvme147: Fix probe banner message | *14b6ca78c9firmware: arm_sdei: Fix the input parameter of cpuhp_remove_state() | *3c2206700edrivers/misc: ti-st: Remove unneeded variable in st_tty_open | *ac7df3fc80netfilter: nft_payload: sanitize offset and length before calling skb_checksum() | *477b35d94anet: skip offload for NETIF_F_IPV6_CSUM if ipv6 header contains extension | *5715da5410net: support ip generic csum processing in skb_csum_hwoffload_help | *91afbc0eb3bpf: Fix out-of-bounds write in trie_get_next_key() | *dbe778b08bnet/sched: stop qdisc_tree_reduce_backlog on TC_H_ROOT | *2bb69ce76egtp: allow -1 to be specified as file description from userspace | *5f6907bf5cgtp: simplify error handling code in 'gtp_encap_enable()' | *c593895bf0dt-bindings: gpu: Convert Samsung Image Rotator to dt-schema | *b2ed38ff2aASoC: cs42l51: Fix some error handling paths in cs42l51_probe() | *9c98ee7ea4wifi: iwlwifi: mvm: Fix response handling in iwl_mvm_send_recovery_cmd() | *8b30a66a94wifi: iwlwifi: mvm: disconnect station vifs if recovery failed | *130b34a204mac80211: Add support to trigger sta disconnect on hardware restart | *0a2112edf6mac80211: do drv_reconfig_complete() before restarting all | *e67cb5a1cdwifi: mac80211: skip non-uploaded keys in ieee80211_iter_keys | *4f3e9217fbcgroup: Fix potential overflow issue when checking max_depth | *401ad99a5axfrm: validate new SA's prefixlen using SA family when sel.family is unset | *9085d7eaacarm64/uprobes: change the uprobe_opcode_t typedef to fix the sparse warning | *5121ac6723selinux: improve error checking in sel_write_load() | *31a38a908chv_netvsc: Fix VF namespace also in synthetic NIC NETDEV_REGISTER event | *ae95e0235cALSA: hda/realtek: Add subwoofer quirk for Acer Predator G9-593 | *412a30b1b2nilfs2: fix kernel bug due to missing clearing of buffer delay flag | *507f393403ACPI: button: Add DMI quirk for Samsung Galaxy Book2 to fix initial lid detection issue | *0fdb503758ACPI: resource: Add LG 16T90SP to irq1_level_low_skip_override[] | *43b4fa6e0edrm/amd: Guard against bad data for ATIF ACPI method | *4cab98a173ALSA: hda/realtek: Update default depop procedure | *d575414361ALSA: firewire-lib: Avoid division by zero in apply_constraint_to_size() | *a8219446b9posix-clock: posix-clock: Fix unbalanced locking in pc_clock_settime() | *6e2bbba8bbr8169: avoid unsolicited interrupts | *2f868ce601net: sched: fix use-after-free in taprio_change() | *9fc566dfednet: usb: usbnet: fix name regression | *6b7ce8ee01be2net: fix potential memory leak in be_xmit() | *8d5b20fbc5net/sun3_82586: fix potential memory leak in sun3_82586_send_packet() | *5e3231b352tracing: Consider the NULL character when validating the event length | *8bbfbf681ejfs: Fix sanity check in dbMount | *417bd613bdudf: fix uninit-value use in udf_get_fileshortad | *02c86c5d5edrm/vboxvideo: Replace fake VLA at end of vbva_mouse_pointer_shape with real VLA | *c491ce22f9KVM: s390: gaccess: Check if guest address is in memslot | *f334578c68KVM: s390: gaccess: Cleanup access to guest pages | *8a2e882914KVM: s390: gaccess: Refactor access address range check | *f1f3615bc3KVM: s390: gaccess: Refactor gpa and length calculation | *e6ab336213arm64: probes: Fix uprobes for big-endian kernels | *5aa6cd3130arm64:uprobe fix the uprobe SWBP_INSN in big-endian | *2c439470b2Bluetooth: bnep: fix wild-memory-access in proto_unregister | *2c15c4133dusb: typec: altmode should keep reference to parent | *6f0516ef12smb: client: fix OOBs when building SMB2_IOCTL request | *0d2bd44bfegenetlink: hold RCU in genlmsg_mcast() | *31701ef0c4net: systemport: fix potential memory leak in bcm_sysport_xmit() | *389bdb093fnet: ethernet: aeroflex: fix potential memory leak in greth_start_xmit_gbit() | *37441f39eemacsec: don't increment counters for an unrelated SA | *ec674722c4drm/msm/dsi: fix 32-bit signed integer extension in pclk_rate calculation | *825ffa86c3RDMA/bnxt_re: Return more meaningful error | *772d5834e4ipv4: give an IPv4 dev to blackhole_netdev | *d7c4fd4902RDMA/cxgb4: Fix RDMA_CM_EVENT_UNREACHABLE error for iWARP | *fc2f42e4feARM: dts: bcm2837-rpi-cm3-io3: Fix HDMI hpd-gpio pin | *17648b72cbRDMA/bnxt_re: Fix incorrect AVID type in WQE structure | *7526339f91mac80211: Fix NULL ptr deref for injected rate info | *9ff2d260b2erofs: fix lz4 inplace decompression | *b4b3dc9e7enilfs2: propagate directory read errors from nilfs_find_entry() | *4aa8948673x86/apic: Always explicitly disarm TSC-deadline timer | *fd7133ec79x86/resctrl: Annotate get_mem_config() functions as __init | *b0641e53e6parport: Proper fix for array out-of-bounds access | *5ead5b445fUSB: serial: option: add Telit FN920C04 MBIM compositions | *bd704359a8USB: serial: option: add support for Quectel EG916Q-GL | *1f8cab3365xhci: Fix incorrect stream context type macro | *d42c3fa120Bluetooth: btusb: Fix regression with fake CSR controllers 0a12:0001 | *4b9cf50a78Bluetooth: Remove debugfs directory on module init failure | *f193dddd2fiio: adc: ti-ads124s08: add missing select IIO_(TRIGGERED_)BUFFER in Kconfig | *f36e441f30iio: proximity: mb1232: add missing select IIO_(TRIGGERED_)BUFFER in Kconfig | *81c795125aiio: light: opt3001: add missing full-scale range value | *96c1a70c13iio: hid-sensors: Fix an error handling path in _hid_sensor_set_report_latency() | *65cbc40d8ciio: adc: ti-ads8688: add missing select IIO_(TRIGGERED_)BUFFER in Kconfig | *06f899ff18iio: dac: stm32-dac-core: add missing select REGMAP_MMIO in Kconfig | *28d6fb095aiio: dac: ltc1660: add missing select REGMAP_SPI in Kconfig | *ab4274f9abdrm/vmwgfx: Handle surface check failure correctly | *d04b72c9efblk-rq-qos: fix crash on rq_qos_wait vs. rq_qos_wake_function race | *9051f851a4x86/cpufeatures: Define X86_FEATURE_AMD_IBPB_RET | *45d5596d44KVM: s390: Change virtual to physical address access in diag 0x258 handler | *f2f7d15487s390/sclp_vt220: Convert newlines to CRLF instead of LFCR | *4c141136a2KVM: Fix a data race on last_boosted_vcpu in kvm_vcpu_on_spin() | *2408f491ffwifi: mac80211: fix potential key use-after-free | *ba7f982cdbmm/swapfile: skip HugeTLB pages for unuse_vma | *085e68e97ffat: fix uninitialized variable | *10edcff094PCI: Add function 0 DMA alias quirk for Glenfly Arise chip | *f198659ecbtracing/kprobes: Fix symbol counting logic by looking at modules as well | *d3679f63a1tracing/kprobes: Return EADDRNOTAVAIL when func matches several symbols | *87677556d5arm64: probes: Fix simulate_ldr*_literal() | *ae743deca7arm64: probes: Remove broken LDR (literal) uprobe support | *e0c966bd3eposix-clock: Fix missing timespec64 check in pc_clock_settime() | *fd9bb7e996nouveau/dmem: Fix vulnerability in migrate_to_ram upon copy error | *8e0766fcf3net: Fix an unsafe loop on the list | *7f435eba84hid: intel-ish-hid: Fix uninitialized variable 'rv' in ish_fw_xfer_direct_dma | *5319b50c49usb: storage: ignore bogus device raised by JieLi BR21 USB sound chip | *72887e9fd6usb: xhci: Fix problem with xhci resume from suspend | *edb9ef4d88usb: dwc3: core: Stop processing of pending events if controller is halted | *3ac86888fcRevert "usb: yurex: Replace snprintf() with the safer scnprintf() variant" | *afaec54239HID: plantronics: Workaround for an unexcepted opposite volume key | *9957fbf34fCDC-NCM: avoid overflow in sanity checking | *333fbaf686resource: fix region_intersects() vs add_memory_driver_managed() | *a20d4f0d9elockdep: fix deadlock issue between lockdep and rcu | *abdc85d630locking/lockdep: Avoid potential access of invalid memory in lock_class | *991e129724locking/lockdep: Rework lockdep_lock | *60519a39aelocking/lockdep: Fix bad recursion pattern | *ba6501ea06slip: make slhc_remember() more robust against malicious packets | *8dfe93901bppp: fix ppp_async_encode() illegal access | *38a35450f3sctp: ensure sk_state is set to CLOSED if hashing fails in sctp_listen_start | *ed494a6050net: annotate lockless accesses to sk->sk_max_ack_backlog | *e9b8a2629enet: annotate lockless accesses to sk->sk_ack_backlog | *e2882b4677net: ibm: emac: mal: fix wrong goto | *2acbb9539bnet/sched: accept TCA_STAB only for root qdisc | *c92cbd283digb: Do not bring the device up after non-fatal error | *4fdc7ce5f3gpio: aspeed: Use devm_clk api to manage clock source | *eda428e573gpio: aspeed: Add the flush write to ensure the write complete. | *869c6ee62aBluetooth: RFCOMM: FIX possible deadlock in rfcomm_sk_state_change | *75dfcb7580netfilter: br_netfilter: fix panic with metadata_dst skb | *b56fc6407etcp: fix tcp_enter_recovery() to zero retrans_stamp when it's safe | *ff81628202tcp: fix to allow timestamp undo if no retransmits were sent | *dcd96d7352SUNRPC: Fix integer overflow in decode_rc_list() | *761bcde586ice: fix VLAN replay after reset | *c91fb72a2cRDMA/rxe: Fix seg fault in rxe_comp_queue_pkt | *57c4f4db0afbdev: sisfb: Fix strbuf array overflow | *7ad47b64c6driver core: bus: Return -EIO instead of 0 when show/store invalid bus attribute | *33529e2703tools/iio: Add memory allocation failure check for trigger_name | *59ac565c62virtio_pmem: Check device status before requesting flush | *0547f710d8usb: dwc2: Adjust the timing of USB Driver Interrupt Registration in the Crashkernel Scenario | *2a806805d3usb: chipidea: udc: enable suspend interrupt after usb reset | *6900b41263media: videobuf2-core: clear memory related fields in __vb2_plane_dmabuf_put() | *5126d8f556ntb: ntb_hw_switchtec: Fix use after free vulnerability in switchtec_ntb_remove due to race condition | *018a356880PCI: Mark Creative Labs EMU20k2 INTx masking as broken | *a3a4d6a441i2c: i801: Use a different adapter-name for IDF adapters | *7ca8f74f39PCI: Add ACS quirk for Qualcomm SA8775P | *96225fd15cclk: bcm: bcm53573: fix OF node leak in init | *978d712486ktest.pl: Avoid false positives with grub2 skip regex | *4a7b939113s390/cpum_sf: Remove WARN_ON_ONCE statements | *aa03f841cdext4: nested locking for xattr inode | *e040f33b30s390/mm: Add cond_resched() to cmm_alloc/free_pages() | *0671121942s390/facility: Disable compile time optimization for decompressor code | *d2e35f220cbpf: Check percpu map value size first | *a9beea8c85Input: synaptics-rmi4 - fix UAF of IRQ domain on driver removal | *3088336ff7virtio_console: fix misc probe bugs | *578d66b048tracing: Have saved_cmdlines arrays all in one allocation | *07effb3c96drm/crtc: fix uninitialized variable use even harder | *49da44d24ctracing: Remove precision vsnprintf() check from print event | *7eb94e52ebnet: ethernet: cortina: Drop TSO support | *18b5f47e7dunicode: Don't special case ignorable code points | *6de83ed473ext4: fix inode tree inconsistency caused by ENOMEM | *c47843a831ACPI: battery: Fix possible crash when unregistering a battery hook | *b5b7d4a012ACPI: battery: Simplify battery hook locking | *64648ae8c9r8169: add tally counter fields added with RTL8125 | *c2d43f2221r8169: Fix spelling mistake: "tx_underun" -> "tx_underrun" | *9dcff844c1clk: qcom: clk-rpmh: Fix overflow in BCM vote | *997526f85bclk: qcom: rpmh: Simplify clk_rpmh_bcm_send_cmd() | *86c3f6130bnfsd: fix delegation_blocked() to block correctly for at least 30 seconds | *8843824b67nfsd: use ktime_get_seconds() for timestamps | *fe5e9182d3uprobes: fix kernel info leak via "[uprobes]" vma | *7fc8b76903arm64: errata: Expand speculative SSBS workaround once more | *3b35b4461farm64: cputype: Add Neoverse-N3 definitions | *d493f26ef8arm64: Add Cortex-715 CPU part definition | *889b912954i2c: qcom-geni: Use IRQF_NO_AUTOEN flag in request_irq() | *66b9e6e2d4i2c: qcom-geni: Grow a dev pointer to simplify code | *d5bcb2f9aei2c: qcom-geni: Let firmware specify irq trigger flags | *dd6a664bd8gpio: davinci: fix lazy disable | *a71349b692btrfs: wait for fixup workers before stopping cleaner kthread during umount | *1282f001cbbtrfs: fix a NULL pointer dereference when failed to start a new trasacntion | *af40b4297aACPI: resource: Add Asus ExpertBook B2502CVA to irq1_level_low_skip_override[] | *fc2c013638ACPI: resource: Add Asus Vivobook X1704VAP to irq1_level_low_skip_override[] | *5d9dcd5b21Input: adp5589-keys - fix adp5589_gpio_get_value() | *fe6cdc1eeartc: at91sam9: fix OF node leak in probe() error path | *3ba06256d2tomoyo: fallback to realpath if symlink's pathname does not exist | *844738f40eiio: magnetometer: ak8975: Fix reading for ak099xx sensors | *63bbe26471media: venus: fix use after free bug in venus_remove due to race condition | *2f33c6b5ffmedia: uapi/linux/cec.h: cec_msg_set_reply_to: zero flags | *fd0ef59c99media: sun4i_csi: Implement link validate for sun4i_csi subdev | *dc57b2cd80clk: rockchip: fix error for unknown clocks | *a786265aecaoe: fix the potential use-after-free problem in more places | *a3915200c8riscv: define ILLEGAL_POINTER_VALUE for 64bit | *e68c832335ocfs2: fix possible null-ptr-deref in ocfs2_set_buffer_uptodate | *703b2c7e07ocfs2: fix null-ptr-deref when journal load failed. | *9753bcb17bocfs2: remove unreasonable unlock in ocfs2_read_blocks | *89043e7ed6ocfs2: cancel dqi_sync_work before freeing oinfo | *74364cb578ocfs2: reserve space for inline xattr before attaching reflink tree | *cb9561ef13ocfs2: fix uninit-value in ocfs2_get_block() | *efbe8e49a6ocfs2: fix the la space leak when unmounting an ocfs2 volume | *c383263ee8mm: krealloc: consider spare memory for __GFP_ZERO | *d5dc65370ajbd2: stop waiting for space when jbd2_cleanup_journal_tail() returns error | *c17a4f52fadrm: omapdrm: Add missing check for alloc_ordered_workqueue | *6cda681004of/irq: Support #msi-cells=<0> in of_msi_get_domain | *c20a17c2d2parisc: Fix stack start for ADDR_NO_RANDOMIZE personality | *8eed55de0dparisc: Fix 64-bit userspace syscall path | *897e2f5192ext4: fix incorrect tid assumption in ext4_wait_for_tail_page_commit() | *f9fd47c9d9ext4: fix double brelse() the buffer of the extents path | *975ca06f3fext4: aovid use-after-free in ext4_ext_insert_extent() | *2bcfc2dc6dext4: fix incorrect tid assumption in __jbd2_log_wait_for_space() | *0ddc7a7933ext4: propagate errors from ext4_find_extent() in ext4_insert_range() | *cdfd6ef391ext4: no need to continue when the number of entries is 1 | *f49f4fd18dALSA: core: add isascii() check to card ID generator | *24b4c5be6adrm: Consistently use struct drm_mode_rect for FB_DAMAGE_CLIPS | *107937ba80parisc: Fix itlb miss handler for 64-bit programs | *d346599940perf/core: Fix small negative period being ignored | *fec2ccd74bspi: bcm63xx: Fix module autoloading | *006c109da9firmware: tegra: bpmp: Drop unused mbox_client_to_bpmp() | *33efc8da77i2c: xiic: Wait for TX empty to avoid missed TX NAKs | *d6f1250a4di2c: stm32f7: Do not prepare/unprepare clock during runtime suspend/resume | *f53c17123bselftests: vDSO: fix vDSO symbols lookup for powerpc64 | *48441fd34fselftests: breakpoints: use remaining time to check if suspend succeed | *d5d9b789c3spi: s3c64xx: fix timeout counters in flush_fifo | *3c46d6060dext4: fix i_data_sem unlock order in ext4_ind_migrate() | *556452e986ext4: ext4_search_dir should return a proper error | *7bd0f5cb6dof/irq: Refer to actual buffer size in of_irq_parse_one() | *e17a5b8192drm/radeon/r100: Handle unknown family in r100_cp_init_microcode() | *7e19f1d284scsi: aacraid: Rearrange order of struct aac_srb_unit | *93a4273e5fdrm/printer: Allow NULL data in devcoredump printer | *8f0abb39c1drm/amd/display: Initialize get_bytes_per_element's default to 1 | *f5f6d90087drm/amd/display: Fix index out of bounds in degamma hardware format translation | *471c53350adrm/amd/display: Check stream before comparing them | *dac398ed27jfs: Fix uninit-value access of new_ea in ea_buffer | *35b91f15f4jfs: check if leafidx greater than num leaves per dmap tree | *3126ccde51jfs: Fix uaf in dbFreeBits | *22b166d7e5jfs: UBSAN: shift-out-of-bounds in dbFindBits | *2fe34fe07fata: sata_sil: Rename sil_blacklist to sil_quirks | *d35ad25f98power: reset: brcmstb: Do not go into infinite loop if reset fails | *6d0a07f68bfbdev: pxafb: Fix possible use after free in pxafb_task() | *da13b253adx86/syscall: Avoid memcpy() for ia32 syscall_get_arguments() | *8e5dd7d867ALSA: hdsp: Break infinite MIDI input flush loop | *ce2953e448ALSA: asihpi: Fix potential OOB array access | *53e9c1ab16signal: Replace BUG_ON()s | *267960ded6nfp: Use IRQF_NO_AUTOEN flag in request_irq() | *f9310a6704wifi: mwifiex: Fix memcpy() field-spanning write warning in mwifiex_cmd_802_11_scan_ext() | *299b917594proc: add config & param to block forcing mem writes | *f3b2acb1b6ACPICA: iasl: handle empty connection_node | *fb66354a6atcp: avoid reusing FIN_WAIT2 when trying to find port in connect() process | *b9d3b0459bipv4: Mask upper DSCP bits and ECN bits in NETLINK_FIB_LOOKUP family | *0b54f8e73bipv4: Check !in_dev earlier for ioctl(SIOCSIFADDR). | *89704e7aaanet: mvpp2: Increase size of queue_name buffer | *c79768ffbatipc: guard against string buffer overrun | *402b4c6b75ACPICA: check null return of ACPI_ALLOCATE_ZEROED() in acpi_db_convert_to_package() | *bcb4a23f03ACPI: EC: Do not release locks during operation region accesses | *1bf77d32e4wifi: rtw88: select WANT_DEV_COREDUMP | *f81b864fe5net: sched: consistently use rcu_replace_pointer() in taprio_change() | *f2c2c674cbACPICA: Fix memory leak if acpi_ps_get_next_field() fails | *b340de28c2ACPICA: Fix memory leak if acpi_ps_get_next_namepath() fails | *62c0d526c9net: hisilicon: hns_mdio: fix OF node leak in probe() | *8b8511d5bcnet: hisilicon: hns_dsaf_mac: fix OF node leak in hns_mac_get_info() | *beb04d5509net: hisilicon: hip04: fix OF node leak in probe() | *bd51b0e678ice: Adjust over allocation of memory in ice_sched_add_root_node() and ice_sched_add_node() | *d1f2fbc6a7wifi: ath9k_htc: Use __skb_set_length() for resetting urb before resubmit | *d96512bfeewifi: ath9k: fix possible integer overflow in ath9k_get_et_stats() | *4ce87674c3f2fs: Require FMODE_WRITE for atomic write ioctls | *9213d0b6a1ALSA: hda/conexant: Fix conflicting quirk for System76 Pangolin | *ec7b2b0a3bALSA: hda/generic: Unconditionally prefer preferred_dacs pairs | *f30b5295e8ALSA: hda/realtek: Fix the push button function for the ALC257 | *0e4e2e6055sctp: set sk_state back to CLOSED if autobind fails in sctp_listen_start | *5ac448133eipv4: ip_gre: Fix drops of small packets in ipgre_xmit | *473426a1d5net: add more sanity checks to qdisc_pkt_len_init() | *1598d70ad9net: avoid potential underflow in qdisc_pkt_len_init() with UFO | *60c068444cnet: ethernet: lantiq_etop: fix memory disclosure | *efd9ff49d9Bluetooth: btmrvl: Use IRQF_NO_AUTOEN flag in request_irq() | *8f390b9eedBluetooth: btmrvl_sdio: Refactor irq wakeup | *c0add6ed2cnetfilter: nf_tables: prevent nf_skb_duplicated corruption | *83b0b227a9net: ieee802154: mcr20a: Use IRQF_NO_AUTOEN flag in request_irq() | *4b16abbc2bnetfilter: uapi: NFTA_FLOWTABLE_HOOK is NLA_NESTED | *409105f06enet/mlx5: Added cond_resched() to crdump collection | *e61e5731a5ieee802154: Fix build error | *9715751935drivers: net: Fix Kconfig indentation, continued | *a720ee9ce1Minor fixes to the CAIF Transport drivers Kconfig file | *126b567a2eceph: remove the incorrect Fw reference check when dirtying pages | *b0de20de29mailbox: bcm2835: Fix timeout during suspend mode | *07975f7bc5mailbox: rockchip: fix a typo in module autoloading | *37480a590dusb: yurex: Fix inconsistent locking bug in yurex_read() | *031533b621i2c: isch: Add missed 'else' | *64af4be29bi2c: aspeed: Update the stop sw state when the bus recovery occurs | *6ed7f633damm: only enforce minimum stack gap size if it's sensible | *8b8de9986fpps: add an error check in parport_attach | *76abcdcabcpps: remove usage of the deprecated ida_simple_xx() API | *e66c626682USB: misc: yurex: fix race between read and write | *79038d945busb: yurex: Replace snprintf() with the safer scnprintf() variant | *c37bca2ce7soc: versatile: realview: fix soc_dev leak during device remove | *0f167c1456soc: versatile: realview: fix memory leak during device remove | *893e831406PCI: xilinx-nwl: Fix off-by-one in INTx IRQ handler | *12350c6062PCI: xilinx-nwl: Use irq_data_get_irq_chip_data() | *a33145f494ASoC: meson: axg-card: fix 'use-after-free' | *69f27ade48ASoC: meson: axg: extract sound card utils | *ba1cd08eb0nfs: fix memory leak in error path of nfs4_do_reclaim | *deaf93e3c9fs: Fix file_set_fowner LSM hook inconsistencies | *489faddb1avfs: fix race between evice_inodes() and find_inode()&iput() | *63b1db26b5hwrng: mtk - Use devm_pm_runtime_enable | *8c0b118bccf2fs: avoid potential int overflow in sanity_check_area_boundary() | *a71b1bec2bf2fs: prevent possible int overflow in dir_block_index() | *60be28d8f9debugobjects: Fix conditions in fill_pool() | *8587887c7cwifi: rtw88: 8822c: Fix reported RX band width | *8855fe99bfACPI: resource: Add another DMI match for the TongFang GMxXGxx | *2364b6af90ACPI: sysfs: validate return type of _STR method | *959974bf5ddrbd: Add NULL check for net_conf to prevent dereference in state validation | *9679a6e148drbd: Fix atomicity violation in drbd_uuid_set_bm() | *182e6a64dbtty: rp2: Fix reset with non forgiving PCIe host bridges | *9b1ca33ebdfirmware_loader: Block path traversal | *560ae2252fUSB: class: CDC-ACM: fix race between get_serial and set_serial | *34f0773c94USB: misc: cypress_cy7c63: check for short transfer | *18ae85ccaeUSB: appledisplay: close race between probe and completion handler | *2f4c0f5bb1drm/amd/display: Round calculated vtotal | *00ff88849bsoc: versatile: integrator: fix OF node leak in probe() error path | *4524056264Remove *.orig pattern from .gitignore | *b716e9c360crypto: aead,cipher - zeroize key buffer after use | *feea6020aanetfilter: ctnetlink: compile ctnetlink_label_size with CONFIG_NF_CONNTRACK_EVENTS | *16a73a0856net: qrtr: Update packets cloning when broadcasting | *16e0387d87tcp: check skb is non-NULL in tcp_rto_delta_us() | *b5a84b6c77net: seeq: Fix use after free vulnerability in ether3 Driver Due to Race Condition | *7bcbc4cda7netfilter: nf_reject_ipv6: fix nf_reject_ip6_tcphdr_put() | *b8efd48ed5coresight: tmc: sg: Do not leak sg_table | *f7f24d67f0iio: adc: ad7606: fix standby gpio state to match the documentation | *d44f8a17f4iio: adc: ad7606: fix oversampling gpio array | *6ec0f44471f2fs: reduce expensive checkpoint trigger frequency | *18a2f126faf2fs: remove unneeded check condition in __f2fs_setxattr() | *363eb38b9af2fs: fix to update i_ctime in __f2fs_setxattr() | *97a5007f2ef2fs: fix typo | *f1850e6ccaf2fs: enhance to update i_mode and acl atomically in f2fs_setattr() | *6d07040ae5nfsd: return -EINVAL when namelen is 0 | *c6b16e700cnfsd: call cache_put if xdr_reserve_space returns NULL | *4b2fbba4e4ntb: intel: Fix the NULL vs IS_ERR() bug for debugfs_create_dir() | *4e1fe68d69RDMA/cxgb4: Added NULL check for lookup_atid | *b1a0c9e35ariscv: Fix fp alignment bug in perf_callchain_user() | *5db879525cRDMA/hns: Optimize hem allocation performance | *9a1fe8d689watchdog: imx_sc_wdt: Don't disable WDT in suspend | *6b669f3888pinctrl: mvebu: Fix devinit_dove_pinctrl_probe function | *4679497af6clk: ti: dra7-atl: Fix leak of of_nodes | *888d0b49f2pinctrl: single: fix missing error code in pcs_probe() | *29b3bbd912RDMA/iwcm: Fix WARNING:at_kernel/workqueue.c:#check_flush_dependency | *fd9d50ee75PCI: xilinx-nwl: Fix register misspelling | *9c9afc3e75PCI: keystone: Fix if-statement expression in ks_pcie_quirk() | *883f794c6edrivers: media: dvb-frontends/rtl2830: fix an out-of-bounds write error | *49b33c38d2drivers: media: dvb-frontends/rtl2832: fix an out-of-bounds write error | *08e13a9ee8clk: rockchip: Set parent rate for DCLK_VOP clock on RK3228 | *1993819affperf time-utils: Fix 32-bit nsec parsing | *fc8d057930perf sched timehist: Fixed timestamp error when unable to confirm event sched_in time | *5c4a88f2aaperf sched timehist: Fix missing free of session in perf_sched__timehist() | *adfbc2440abpf: Fix bpf_strtol and bpf_strtoul helpers for 32bit | *ed76d381danilfs2: fix potential oob read in nilfs_btree_check_delete() | *98d0c6f11fnilfs2: determine empty node blocks as corrupted | *1d94dbdfbbnilfs2: fix potential null-ptr-deref in nilfs_btree_insert() | *8adf0eb4e3ext4: avoid OOB when system.data xattr changes underneath the filesystem | *52c5fdad08ext4: return error on ext4_find_inline_entry | *dd0bc5b7bdext4: avoid negative min_clusters in find_group_orlov() | *e8c1082c72smackfs: Use rcu_assign_pointer() to ensure safe assignment in smk_set_cipso | *22e130fe60ext4: clear EXT4_GROUP_INFO_WAS_TRIMMED_BIT even mount with discard | *cbb86a2339jbd2: introduce/export functions jbd2_journal_submit|finish_inode_data_buffers() | *a611f9ffcfkthread: fix task state in kthread worker if being frozen | *0f0de5d353kthread: add kthread_work tracepoints | *6c371167fdxz: cleanup CRC32 edits from 2018 | *8cd5699831selftests/bpf: Fix error compiling test_lru_map.c | *44d9436ea9selftests/bpf: Fix compiling tcp_rtt.c with musl-libc | *a620219bddselftests/bpf: Fix compiling flow_dissector.c with musl-libc | *dc5f75f3c3selftests/bpf: Fix compile error from rlim_t in sk_storage_map.c | *87e8134c18tpm: Clean up TPM space after command failure | *5df29a445fxen/swiotlb: add alignment check for dma buffers | *c87b0349f1xen: use correct end address of kernel for conflict checking | *4dac65dadcdrivers:drm:exynos_drm_gsc:Fix wrong assignment in gsc_bind() | *5c9a3510c8drm/msm: fix %s null argument error | *5434fdccabipmi: docs: don't advertise deprecated sysfs entries | *9bcf5687fedrm/msm/a5xx: fix races in preemption evaluation stage | *637823ff5edrm/msm/a5xx: properly clear preemption records on resume | *1299487518drm/msm/a5xx: disable preemption in submits by default | *df8e4cf27bdrm/msm: Fix incorrect file name output in adreno_request_fw() | *5ad6284c8djfs: fix out-of-bounds in dbNextAG() and diAlloc() | *41a3ed4182drm/radeon/evergreen_cs: fix int overflow errors in cs track offsets | *2ee92b995edrm/rockchip: dw_hdmi: Fix reading EDID when using a forced mode | *20878dec6ddrm/rockchip: vop: Allow 4096px width scaling | *746e3b6f25drm/radeon: properly handle vbios fake edid sizing | *4477639573drm/radeon: Replace one-element array with flexible-array member | *4209b70feadrm/amdgpu: properly handle vbios fake edid sizing | *24f4bdf1c8drm/amdgpu: Replace one-element array with flexible-array member | *ba2310096edrm/stm: Fix an error handling path in stm_drm_platform_probe() | *c3c9c5daeamtd: powernv: Add check devm_kasprintf() returned value | *bb8e820cf6fbdev: hpfb: Fix an error handling path in hpfb_dio_probe() | *65af6f4a72power: supply: max17042_battery: Fix SOC threshold calc w/ no current sense | *575ea801ccpower: supply: axp20x_battery: Remove design from min and max voltage | *206734f557power: supply: axp20x_battery: allow disabling battery charging | *1d8d2a0312hwmon: (ntc_thermistor) fix module autoloading | *31bd8df755mtd: slram: insert break after errors in parsing the map | *ce56acc0e2hwmon: (max16065) Fix overflows seen when writing limits | *06ca666a2eclocksource/drivers/qcom: Add missing iounmap() on errors in msm_dt_timer_init() | *e8384befe2reset: berlin: fix OF node leak in probe() error path | *1f578d2118ARM: versatile: fix OF node leak in CPUs prepare | *d3a63fa27fARM: dts: imx7d-zii-rmu2: fix Ethernet PHY pinctrl property | *2d98263d5cspi: ppc4xx: Avoid returning 0 when failed to parse and map IRQ | *dab6520643spi: ppc4xx: handle irq_of_parse_and_map() errors | *3a5f45a4adblock, bfq: don't break merge chain in bfq_split_bfqq() | *140c8e2caablock, bfq: choose the last bfqq from merge chain in bfq_setup_cooperator() | *bc2140534bblock, bfq: fix possible UAF for bfqq->bic with merge chain | *c3026230d2net: tipc: avoid possible garbage value | *309eb08b48Bluetooth: btusb: Fix not handling ZPL/short-transfer | *a833da8eeccan: bcm: Clear bo->bcm_proc_read after remove_proc_entry(). | *bc05f68556sock_map: Add a cond_resched() in sock_hash_free() | *5a24cedc24wifi: wilc1000: fix potential RCU dereference issue in wilc_parse_join_bss_param | *04f75f5baewifi: mac80211: use two-phase skb reclamation in ieee80211_do_stop() | *73d2e264bdmac80211: parse radiotap header when selecting Tx queue | *7ce40a1121wifi: cfg80211: fix two more possible UBSAN-detected off-by-one errors | *7d38d0cea3wifi: cfg80211: fix UBSAN noise in cfg80211_wext_siwscan() | *05f6631614netfilter: nf_tables: reject expiration higher than timeout | *bd6b2e3a01netfilter: nf_tables: reject element expiration with no timeout | *1f444ee91bnetfilter: nf_tables: elements with timeout below CONFIG_HZ never expire | *30e197f8bbcan: j1939: use correct function name in comment | *ac076cb0dbmount: handle OOM on mnt_warn_timestamp_expiry | *c6c1e1356dfs/namespace: fnic: Switch to use %ptTd | *7e2e113f94mount: warn only once about timestamp range expiration | *92738aab2ffs: explicitly unregister per-superblock BDIs | *8f88812306wifi: ath9k: Remove error checks when creating debugfs entries | *dab22cf5b4wifi: ath9k: fix parameter check in ath9k_init_debug() | *c2fbff12c6ACPI: PMIC: Remove unneeded check in tps68470_pmic_opregion_probe() | *fa65231888USB: usbtmc: prevent kernel-usb-infoleak | *a6eb2a486cUSB: serial: pl2303: add device id for Macrosilicon MS3020 | *1f5e352b90bpf: Fix DEVMAP_HASH overflow check on 32-bit arches | *1b6de5e657inet: inet_defrag: prevent sk release while still in use | *9ae2d8e75bgpio: prevent potential speculation leaks in gpio_device_get_desc() | *e8f9c4af7aocfs2: strict bound check before memcmp in ocfs2_xattr_find_entry() | *60c0d36189ocfs2: add bounds checking to ocfs2_xattr_find_entry() | *71fbc5018dx86/hyperv: Set X86_FEATURE_TSC_KNOWN_FREQ when Hyper-V provides frequency | *a38644c146spi: bcm63xx: Enable module autoloading | *1ccc2b0f6cdrm: komeda: Fix an issue related to normalized zpos | *79d978f254ASoC: tda7419: fix module autoloading | *16c1e5d522wifi: iwlwifi: mvm: don't wait for tx queues if firmware is dead | *5fa62c3fffwifi: iwlwifi: mvm: fix iwl_mvm_max_scan_ie_fw_cmd_room() | *9023ef9cbanet: ftgmac100: Ensure tx descriptor updates are visible | *33d60cd46emicroblaze: don't treat zero reserved memory regions as error | *f03b3fe7d7pinctrl: at91: make it work with current gpiolib | *f7fe730011ALSA: hda/realtek - FIxed ALC285 headphone no sound | *950b8ce6b8ALSA: hda/realtek - Fixed ALC256 headphone no sound | *06064053e7ASoC: allow module autoloading for table db1200_pids | *503e1d7cc8selftests: breakpoints: Fix a typo of function name | *2fdc7540a9soundwire: stream: Revert "soundwire: stream: fix programming slave ports for non-continous port maps" | *aa05db44dbspi: nxp-fspi: fix the KASAN report out-of-bounds bug | *dc43a096cfnet: dpaa: Pad packets to ETH_ZLEN | *cfb4552c0cnet: ftgmac100: Enable TX interrupt to avoid TX timeout | *453e69e145net/mlx5e: Add missing link modes to ptys2ethtool_map | *164df4ec5aice: fix accounting for filters shared by multiple VSIs | *d5901c4975arm64: dts: rockchip: override BIOS_DISABLE signal via GPIO hog on RK3399 Puma | *af8151c833scripts: kconfig: merge_config: config files: add a trailing newline | *bd21d96484net: phy: vitesse: repair vsc73xx autonegotiation | *ef2c4556a3net: ethernet: use ip_hdrlen() instead of bit shift | *11f5645c61usbnet: ipheth: fix carrier detection in modes 1 and 4 *b1c3b1041aMerge branch 'android11-5.4' into android11-5.4-lts Change-Id: Ifb715a26a2184f0dd505fb6c6e969132bf7133a7 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
commit
8ee3ff6010
472 changed files with 4162 additions and 2111 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -120,7 +120,6 @@ GTAGS
|
|||
# id-utils files
|
||||
ID
|
||||
|
||||
*.orig
|
||||
*~
|
||||
\#*#
|
||||
|
||||
|
|
|
|||
|
|
@ -518,7 +518,7 @@ at module load time (for a module) with::
|
|||
[dbg_probe=1]
|
||||
|
||||
The addresses are normal I2C addresses. The adapter is the string
|
||||
name of the adapter, as shown in /sys/class/i2c-adapter/i2c-<n>/name.
|
||||
name of the adapter, as shown in /sys/bus/i2c/devices/i2c-<n>/name.
|
||||
It is *NOT* i2c-<n> itself. Also, the comparison is done ignoring
|
||||
spaces, so if the name is "This is an I2C chip" you can say
|
||||
adapter_name=ThisisanI2cchip. This is because it's hard to pass in
|
||||
|
|
|
|||
|
|
@ -3818,6 +3818,16 @@
|
|||
printk.time= Show timing data prefixed to each printk message line
|
||||
Format: <bool> (1/Y/y=enable, 0/N/n=disable)
|
||||
|
||||
proc_mem.force_override= [KNL]
|
||||
Format: {always | ptrace | never}
|
||||
Traditionally /proc/pid/mem allows memory permissions to be
|
||||
overridden without restrictions. This option may be set to
|
||||
restrict that. Can be one of:
|
||||
- 'always': traditional behavior always allows mem overrides.
|
||||
- 'ptrace': only allow mem overrides for active ptracers.
|
||||
- 'never': never allow mem overrides.
|
||||
If not specified, default is the CONFIG_PROC_MEM_* choice.
|
||||
|
||||
processor.max_cstate= [HW,ACPI]
|
||||
Limit processor to maximum C-state
|
||||
max_cstate=9 overrides any DMI blacklist limit.
|
||||
|
|
|
|||
|
|
@ -98,6 +98,8 @@ stable kernels.
|
|||
+----------------+-----------------+-----------------+-----------------------------+
|
||||
| ARM | Cortex-A710 | #3324338 | ARM64_ERRATUM_3194386 |
|
||||
+----------------+-----------------+-----------------+-----------------------------+
|
||||
| ARM | Cortex-A715 | #3456084 | ARM64_ERRATUM_3194386 |
|
||||
+----------------+-----------------+-----------------+-----------------------------+
|
||||
| ARM | Cortex-A720 | #3456091 | ARM64_ERRATUM_3194386 |
|
||||
+----------------+-----------------+-----------------+-----------------------------+
|
||||
| ARM | Cortex-A725 | #3456106 | ARM64_ERRATUM_3194386 |
|
||||
|
|
@ -124,6 +126,8 @@ stable kernels.
|
|||
+----------------+-----------------+-----------------+-----------------------------+
|
||||
| ARM | Neoverse-N2 | #3324339 | ARM64_ERRATUM_3194386 |
|
||||
+----------------+-----------------+-----------------+-----------------------------+
|
||||
| ARM | Neoverse-N3 | #3456111 | ARM64_ERRATUM_3194386 |
|
||||
+----------------+-----------------+-----------------+-----------------------------+
|
||||
| ARM | Neoverse-V1 | #3324341 | ARM64_ERRATUM_3194386 |
|
||||
+----------------+-----------------+-----------------+-----------------------------+
|
||||
| ARM | Neoverse-V2 | #3324336 | ARM64_ERRATUM_3194386 |
|
||||
|
|
|
|||
|
|
@ -1,28 +0,0 @@
|
|||
* Samsung Image Rotator
|
||||
|
||||
Required properties:
|
||||
- compatible : value should be one of the following:
|
||||
* "samsung,s5pv210-rotator" for Rotator IP in S5PV210
|
||||
* "samsung,exynos4210-rotator" for Rotator IP in Exynos4210
|
||||
* "samsung,exynos4212-rotator" for Rotator IP in Exynos4212/4412
|
||||
* "samsung,exynos5250-rotator" for Rotator IP in Exynos5250
|
||||
|
||||
- reg : Physical base address of the IP registers and length of memory
|
||||
mapped region.
|
||||
|
||||
- interrupts : Interrupt specifier for rotator interrupt, according to format
|
||||
specific to interrupt parent.
|
||||
|
||||
- clocks : Clock specifier for rotator clock, according to generic clock
|
||||
bindings. (See Documentation/devicetree/bindings/clock/exynos*.txt)
|
||||
|
||||
- clock-names : Names of clocks. For exynos rotator, it should be "rotator".
|
||||
|
||||
Example:
|
||||
rotator@12810000 {
|
||||
compatible = "samsung,exynos4210-rotator";
|
||||
reg = <0x12810000 0x1000>;
|
||||
interrupts = <0 83 0>;
|
||||
clocks = <&clock 278>;
|
||||
clock-names = "rotator";
|
||||
};
|
||||
48
Documentation/devicetree/bindings/gpu/samsung-rotator.yaml
Normal file
48
Documentation/devicetree/bindings/gpu/samsung-rotator.yaml
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/gpu/samsung-rotator.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Samsung SoC Image Rotator
|
||||
|
||||
maintainers:
|
||||
- Inki Dae <inki.dae@samsung.com>
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- "samsung,s5pv210-rotator"
|
||||
- "samsung,exynos4210-rotator"
|
||||
- "samsung,exynos4212-rotator"
|
||||
- "samsung,exynos5250-rotator"
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
interrupts:
|
||||
maxItems: 1
|
||||
|
||||
clocks:
|
||||
maxItems: 1
|
||||
|
||||
clock-names:
|
||||
items:
|
||||
- const: rotator
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- interrupts
|
||||
- clocks
|
||||
- clock-names
|
||||
|
||||
examples:
|
||||
- |
|
||||
rotator@12810000 {
|
||||
compatible = "samsung,exynos4210-rotator";
|
||||
reg = <0x12810000 0x1000>;
|
||||
interrupts = <0 83 0>;
|
||||
clocks = <&clock 278>;
|
||||
clock-names = "rotator";
|
||||
};
|
||||
|
||||
2
Makefile
2
Makefile
|
|
@ -1,7 +1,7 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 5
|
||||
PATCHLEVEL = 4
|
||||
SUBLEVEL = 284
|
||||
SUBLEVEL = 286
|
||||
EXTRAVERSION =
|
||||
NAME = Kleptomaniac Octopus
|
||||
|
||||
|
|
|
|||
|
|
@ -77,7 +77,7 @@
|
|||
};
|
||||
|
||||
&hdmi {
|
||||
hpd-gpios = <&expgpio 1 GPIO_ACTIVE_LOW>;
|
||||
hpd-gpios = <&expgpio 0 GPIO_ACTIVE_LOW>;
|
||||
power-domains = <&power RPI_POWER_DOMAIN_HDMI>;
|
||||
status = "okay";
|
||||
};
|
||||
|
|
|
|||
|
|
@ -350,7 +350,7 @@
|
|||
|
||||
&iomuxc_lpsr {
|
||||
pinctrl_enet1_phy_interrupt: enet1phyinterruptgrp {
|
||||
fsl,phy = <
|
||||
fsl,pins = <
|
||||
MX7D_PAD_LPSR_GPIO1_IO02__GPIO1_IO2 0x08
|
||||
>;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -300,8 +300,8 @@
|
|||
&i2c2 {
|
||||
status = "okay";
|
||||
|
||||
rt5616: rt5616@1b {
|
||||
compatible = "rt5616";
|
||||
rt5616: audio-codec@1b {
|
||||
compatible = "realtek,rt5616";
|
||||
reg = <0x1b>;
|
||||
clocks = <&cru SCLK_I2S_OUT>;
|
||||
clock-names = "mclk";
|
||||
|
|
|
|||
|
|
@ -317,12 +317,13 @@
|
|||
};
|
||||
};
|
||||
|
||||
acodec: acodec-ana@20030000 {
|
||||
compatible = "rk3036-codec";
|
||||
acodec: audio-codec@20030000 {
|
||||
compatible = "rockchip,rk3036-codec";
|
||||
reg = <0x20030000 0x4000>;
|
||||
rockchip,grf = <&grf>;
|
||||
clock-names = "acodec_pclk";
|
||||
clocks = <&cru PCLK_ACODEC>;
|
||||
rockchip,grf = <&grf>;
|
||||
#sound-dai-cells = <0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
|
@ -332,7 +333,6 @@
|
|||
interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cru PCLK_HDMI>;
|
||||
clock-names = "pclk";
|
||||
rockchip,grf = <&grf>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&hdmi_ctl>;
|
||||
status = "disabled";
|
||||
|
|
@ -489,11 +489,11 @@
|
|||
};
|
||||
|
||||
spi: spi@20074000 {
|
||||
compatible = "rockchip,rockchip-spi";
|
||||
compatible = "rockchip,rk3036-spi";
|
||||
reg = <0x20074000 0x1000>;
|
||||
interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cru PCLK_SPI>, <&cru SCLK_SPI>;
|
||||
clock-names = "apb-pclk","spi_pclk";
|
||||
clocks = <&cru SCLK_SPI>, <&cru PCLK_SPI>;
|
||||
clock-names = "spiclk", "apb_pclk";
|
||||
dmas = <&pdma 8>, <&pdma 9>;
|
||||
dma-names = "tx", "rx";
|
||||
pinctrl-names = "default";
|
||||
|
|
|
|||
|
|
@ -66,6 +66,7 @@ static void __init realview_smp_prepare_cpus(unsigned int max_cpus)
|
|||
return;
|
||||
}
|
||||
map = syscon_node_to_regmap(np);
|
||||
of_node_put(np);
|
||||
if (IS_ERR(map)) {
|
||||
pr_err("PLATSMP: No syscon regmap\n");
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -605,6 +605,7 @@ config ARM64_ERRATUM_3194386
|
|||
* ARM Cortex-A78C erratum 3324346
|
||||
* ARM Cortex-A78C erratum 3324347
|
||||
* ARM Cortex-A710 erratam 3324338
|
||||
* ARM Cortex-A715 errartum 3456084
|
||||
* ARM Cortex-A720 erratum 3456091
|
||||
* ARM Cortex-A725 erratum 3456106
|
||||
* ARM Cortex-X1 erratum 3324344
|
||||
|
|
@ -615,6 +616,7 @@ config ARM64_ERRATUM_3194386
|
|||
* ARM Cortex-X925 erratum 3324334
|
||||
* ARM Neoverse-N1 erratum 3324349
|
||||
* ARM Neoverse N2 erratum 3324339
|
||||
* ARM Neoverse-N3 erratum 3456111
|
||||
* ARM Neoverse-V1 erratum 3324341
|
||||
* ARM Neoverse V2 erratum 3324336
|
||||
* ARM Neoverse-V3 erratum 3312417
|
||||
|
|
|
|||
|
|
@ -667,8 +667,7 @@
|
|||
compatible = "rockchip,rk3328-dw-hdmi";
|
||||
reg = <0x0 0xff3c0000 0x0 0x20000>;
|
||||
reg-io-width = <4>;
|
||||
interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cru PCLK_HDMI>,
|
||||
<&cru SCLK_HDMI_SFC>,
|
||||
<&cru SCLK_RTC32K>;
|
||||
|
|
|
|||
|
|
@ -56,7 +56,6 @@
|
|||
fan: fan@18 {
|
||||
compatible = "ti,amc6821";
|
||||
reg = <0x18>;
|
||||
#cooling-cells = <2>;
|
||||
};
|
||||
|
||||
rtc_twi: rtc@6f {
|
||||
|
|
|
|||
|
|
@ -148,6 +148,22 @@
|
|||
drive-impedance-ohm = <33>;
|
||||
};
|
||||
|
||||
&gpio3 {
|
||||
/*
|
||||
* The Qseven BIOS_DISABLE signal on the RK3399-Q7 keeps the on-module
|
||||
* eMMC and SPI flash powered-down initially (in fact it keeps the
|
||||
* reset signal asserted). BIOS_DISABLE_OVERRIDE pin allows to override
|
||||
* that signal so that eMMC and SPI can be used regardless of the state
|
||||
* of the signal.
|
||||
*/
|
||||
bios-disable-override-hog {
|
||||
gpios = <RK_PD5 GPIO_ACTIVE_LOW>;
|
||||
gpio-hog;
|
||||
line-name = "bios_disable_override";
|
||||
output-high;
|
||||
};
|
||||
};
|
||||
|
||||
&gmac {
|
||||
assigned-clocks = <&cru SCLK_RMII_SRC>;
|
||||
assigned-clock-parents = <&clkin_gmac>;
|
||||
|
|
@ -432,9 +448,14 @@
|
|||
|
||||
&pinctrl {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&q7_thermal_pin>;
|
||||
pinctrl-0 = <&q7_thermal_pin &bios_disable_override_hog_pin>;
|
||||
|
||||
gpios {
|
||||
bios_disable_override_hog_pin: bios-disable-override-hog-pin {
|
||||
rockchip,pins =
|
||||
<3 RK_PD5 RK_FUNC_GPIO &pcfg_pull_down>;
|
||||
};
|
||||
|
||||
q7_thermal_pin: q7-thermal-pin {
|
||||
rockchip,pins =
|
||||
<0 RK_PA3 RK_FUNC_GPIO &pcfg_pull_up>;
|
||||
|
|
|
|||
|
|
@ -557,7 +557,7 @@
|
|||
bluetooth {
|
||||
compatible = "brcm,bcm43438-bt";
|
||||
clocks = <&rk808 1>;
|
||||
clock-names = "ext_clock";
|
||||
clock-names = "txco";
|
||||
device-wakeup-gpios = <&gpio2 RK_PD3 GPIO_ACTIVE_HIGH>;
|
||||
host-wakeup-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_HIGH>;
|
||||
shutdown-gpios = <&gpio0 RK_PB1 GPIO_ACTIVE_HIGH>;
|
||||
|
|
|
|||
|
|
@ -159,7 +159,7 @@
|
|||
status = "okay";
|
||||
|
||||
rt5651: rt5651@1a {
|
||||
compatible = "rockchip,rt5651";
|
||||
compatible = "realtek,rt5651";
|
||||
reg = <0x1a>;
|
||||
clocks = <&cru SCLK_I2S_8CH_OUT>;
|
||||
clock-names = "mclk";
|
||||
|
|
|
|||
|
|
@ -77,6 +77,7 @@
|
|||
#define ARM_CPU_PART_CORTEX_A78 0xD41
|
||||
#define ARM_CPU_PART_CORTEX_X1 0xD44
|
||||
#define ARM_CPU_PART_CORTEX_A710 0xD47
|
||||
#define ARM_CPU_PART_CORTEX_A715 0xD4D
|
||||
#define ARM_CPU_PART_CORTEX_X2 0xD48
|
||||
#define ARM_CPU_PART_NEOVERSE_N2 0xD49
|
||||
#define ARM_CPU_PART_CORTEX_A78C 0xD4B
|
||||
|
|
@ -88,6 +89,7 @@
|
|||
#define ARM_CPU_PART_NEOVERSE_V3 0xD84
|
||||
#define ARM_CPU_PART_CORTEX_X925 0xD85
|
||||
#define ARM_CPU_PART_CORTEX_A725 0xD87
|
||||
#define ARM_CPU_PART_NEOVERSE_N3 0xD8E
|
||||
|
||||
#define APM_CPU_PART_POTENZA 0x000
|
||||
|
||||
|
|
@ -126,6 +128,7 @@
|
|||
#define MIDR_CORTEX_A78 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A78)
|
||||
#define MIDR_CORTEX_X1 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_X1)
|
||||
#define MIDR_CORTEX_A710 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A710)
|
||||
#define MIDR_CORTEX_A715 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A715)
|
||||
#define MIDR_CORTEX_X2 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_X2)
|
||||
#define MIDR_NEOVERSE_N2 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_NEOVERSE_N2)
|
||||
#define MIDR_CORTEX_A78C MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A78C)
|
||||
|
|
@ -137,6 +140,7 @@
|
|||
#define MIDR_NEOVERSE_V3 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_NEOVERSE_V3)
|
||||
#define MIDR_CORTEX_X925 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_X925)
|
||||
#define MIDR_CORTEX_A725 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A725)
|
||||
#define MIDR_NEOVERSE_N3 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_NEOVERSE_N3)
|
||||
#define MIDR_THUNDERX MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX)
|
||||
#define MIDR_THUNDERX_81XX MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX_81XX)
|
||||
#define MIDR_THUNDERX_83XX MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX_83XX)
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
#define MAX_UINSN_BYTES AARCH64_INSN_SIZE
|
||||
|
||||
#define UPROBE_SWBP_INSN BRK64_OPCODE_UPROBES
|
||||
#define UPROBE_SWBP_INSN cpu_to_le32(BRK64_OPCODE_UPROBES)
|
||||
#define UPROBE_SWBP_INSN_SIZE AARCH64_INSN_SIZE
|
||||
#define UPROBE_XOL_SLOT_BYTES MAX_UINSN_BYTES
|
||||
|
||||
|
|
|
|||
|
|
@ -848,6 +848,7 @@ static const struct midr_range erratum_spec_ssbs_list[] = {
|
|||
MIDR_ALL_VERSIONS(MIDR_CORTEX_A78),
|
||||
MIDR_ALL_VERSIONS(MIDR_CORTEX_A78C),
|
||||
MIDR_ALL_VERSIONS(MIDR_CORTEX_A710),
|
||||
MIDR_ALL_VERSIONS(MIDR_CORTEX_A715),
|
||||
MIDR_ALL_VERSIONS(MIDR_CORTEX_A720),
|
||||
MIDR_ALL_VERSIONS(MIDR_CORTEX_A725),
|
||||
MIDR_ALL_VERSIONS(MIDR_CORTEX_X1),
|
||||
|
|
@ -858,6 +859,7 @@ static const struct midr_range erratum_spec_ssbs_list[] = {
|
|||
MIDR_ALL_VERSIONS(MIDR_CORTEX_X925),
|
||||
MIDR_ALL_VERSIONS(MIDR_NEOVERSE_N1),
|
||||
MIDR_ALL_VERSIONS(MIDR_NEOVERSE_N2),
|
||||
MIDR_ALL_VERSIONS(MIDR_NEOVERSE_N3),
|
||||
MIDR_ALL_VERSIONS(MIDR_NEOVERSE_V1),
|
||||
MIDR_ALL_VERSIONS(MIDR_NEOVERSE_V2),
|
||||
MIDR_ALL_VERSIONS(MIDR_NEOVERSE_V3),
|
||||
|
|
|
|||
|
|
@ -96,10 +96,6 @@ arm_probe_decode_insn(probe_opcode_t insn, struct arch_probe_insn *api)
|
|||
aarch64_insn_is_blr(insn) ||
|
||||
aarch64_insn_is_ret(insn)) {
|
||||
api->handler = simulate_br_blr_ret;
|
||||
} else if (aarch64_insn_is_ldr_lit(insn)) {
|
||||
api->handler = simulate_ldr_literal;
|
||||
} else if (aarch64_insn_is_ldrsw_lit(insn)) {
|
||||
api->handler = simulate_ldrsw_literal;
|
||||
} else {
|
||||
/*
|
||||
* Instruction cannot be stepped out-of-line and we don't
|
||||
|
|
@ -137,6 +133,17 @@ arm_kprobe_decode_insn(kprobe_opcode_t *addr, struct arch_specific_insn *asi)
|
|||
probe_opcode_t insn = le32_to_cpu(*addr);
|
||||
probe_opcode_t *scan_end = NULL;
|
||||
unsigned long size = 0, offset = 0;
|
||||
struct arch_probe_insn *api = &asi->api;
|
||||
|
||||
if (aarch64_insn_is_ldr_lit(insn)) {
|
||||
api->handler = simulate_ldr_literal;
|
||||
decoded = INSN_GOOD_NO_SLOT;
|
||||
} else if (aarch64_insn_is_ldrsw_lit(insn)) {
|
||||
api->handler = simulate_ldrsw_literal;
|
||||
decoded = INSN_GOOD_NO_SLOT;
|
||||
} else {
|
||||
decoded = arm_probe_decode_insn(insn, &asi->api);
|
||||
}
|
||||
|
||||
/*
|
||||
* If there's a symbol defined in front of and near enough to
|
||||
|
|
@ -154,7 +161,6 @@ arm_kprobe_decode_insn(kprobe_opcode_t *addr, struct arch_specific_insn *asi)
|
|||
else
|
||||
scan_end = addr - MAX_ATOMIC_CONTEXT_SIZE;
|
||||
}
|
||||
decoded = arm_probe_decode_insn(insn, &asi->api);
|
||||
|
||||
if (decoded != INSN_REJECTED && scan_end)
|
||||
if (is_probed_address_atomic(addr - 1, scan_end))
|
||||
|
|
|
|||
|
|
@ -170,17 +170,15 @@ simulate_tbz_tbnz(u32 opcode, long addr, struct pt_regs *regs)
|
|||
void __kprobes
|
||||
simulate_ldr_literal(u32 opcode, long addr, struct pt_regs *regs)
|
||||
{
|
||||
u64 *load_addr;
|
||||
unsigned long load_addr;
|
||||
int xn = opcode & 0x1f;
|
||||
int disp;
|
||||
|
||||
disp = ldr_displacement(opcode);
|
||||
load_addr = (u64 *) (addr + disp);
|
||||
load_addr = addr + ldr_displacement(opcode);
|
||||
|
||||
if (opcode & (1 << 30)) /* x0-x30 */
|
||||
set_x_reg(regs, xn, *load_addr);
|
||||
set_x_reg(regs, xn, READ_ONCE(*(u64 *)load_addr));
|
||||
else /* w0-w30 */
|
||||
set_w_reg(regs, xn, *load_addr);
|
||||
set_w_reg(regs, xn, READ_ONCE(*(u32 *)load_addr));
|
||||
|
||||
instruction_pointer_set(regs, instruction_pointer(regs) + 4);
|
||||
}
|
||||
|
|
@ -188,14 +186,12 @@ simulate_ldr_literal(u32 opcode, long addr, struct pt_regs *regs)
|
|||
void __kprobes
|
||||
simulate_ldrsw_literal(u32 opcode, long addr, struct pt_regs *regs)
|
||||
{
|
||||
s32 *load_addr;
|
||||
unsigned long load_addr;
|
||||
int xn = opcode & 0x1f;
|
||||
int disp;
|
||||
|
||||
disp = ldr_displacement(opcode);
|
||||
load_addr = (s32 *) (addr + disp);
|
||||
load_addr = addr + ldr_displacement(opcode);
|
||||
|
||||
set_x_reg(regs, xn, *load_addr);
|
||||
set_x_reg(regs, xn, READ_ONCE(*(s32 *)load_addr));
|
||||
|
||||
instruction_pointer_set(regs, instruction_pointer(regs) + 4);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -276,11 +276,6 @@ asmlinkage void __init mmu_init(void)
|
|||
{
|
||||
unsigned int kstart, ksize;
|
||||
|
||||
if (!memblock.reserved.cnt) {
|
||||
pr_emerg("Error memory count\n");
|
||||
machine_restart(NULL);
|
||||
}
|
||||
|
||||
if ((u32) memblock.memory.regions[0].size < 0x400000) {
|
||||
pr_emerg("Memory must be greater than 4MB\n");
|
||||
machine_restart(NULL);
|
||||
|
|
|
|||
|
|
@ -1078,8 +1078,7 @@ ENTRY_CFI(intr_save) /* for os_hpmc */
|
|||
STREG %r16, PT_ISR(%r29)
|
||||
STREG %r17, PT_IOR(%r29)
|
||||
|
||||
#if 0 && defined(CONFIG_64BIT)
|
||||
/* Revisit when we have 64-bit code above 4Gb */
|
||||
#if defined(CONFIG_64BIT)
|
||||
b,n intr_save2
|
||||
|
||||
skip_save_ior:
|
||||
|
|
@ -1087,8 +1086,7 @@ skip_save_ior:
|
|||
* need to adjust iasq/iaoq here in the same way we adjusted isr/ior
|
||||
* above.
|
||||
*/
|
||||
extrd,u,* %r8,PSW_W_BIT,1,%r1
|
||||
cmpib,COND(=),n 1,%r1,intr_save2
|
||||
bb,COND(>=),n %r8,PSW_W_BIT,intr_save2
|
||||
LDREG PT_IASQ0(%r29), %r16
|
||||
LDREG PT_IAOQ0(%r29), %r17
|
||||
/* adjust iasq/iaoq */
|
||||
|
|
|
|||
|
|
@ -217,10 +217,10 @@ linux_gateway_entry:
|
|||
|
||||
#ifdef CONFIG_64BIT
|
||||
ldil L%sys_call_table, %r1
|
||||
or,= %r2,%r2,%r2
|
||||
addil L%(sys_call_table64-sys_call_table), %r1
|
||||
or,ev %r2,%r2,%r2
|
||||
ldil L%sys_call_table64, %r1
|
||||
ldo R%sys_call_table(%r1), %r19
|
||||
or,= %r2,%r2,%r2
|
||||
or,ev %r2,%r2,%r2
|
||||
ldo R%sys_call_table64(%r1), %r19
|
||||
#else
|
||||
load32 sys_call_table, %r19
|
||||
|
|
@ -355,10 +355,10 @@ tracesys_next:
|
|||
extrd,u %r19,63,1,%r2 /* W hidden in bottom bit */
|
||||
|
||||
ldil L%sys_call_table, %r1
|
||||
or,= %r2,%r2,%r2
|
||||
addil L%(sys_call_table64-sys_call_table), %r1
|
||||
or,ev %r2,%r2,%r2
|
||||
ldil L%sys_call_table64, %r1
|
||||
ldo R%sys_call_table(%r1), %r19
|
||||
or,= %r2,%r2,%r2
|
||||
or,ev %r2,%r2,%r2
|
||||
ldo R%sys_call_table64(%r1), %r19
|
||||
#else
|
||||
load32 sys_call_table, %r19
|
||||
|
|
@ -931,6 +931,8 @@ ENTRY(sys_call_table)
|
|||
END(sys_call_table)
|
||||
|
||||
#ifdef CONFIG_64BIT
|
||||
#undef __SYSCALL_WITH_COMPAT
|
||||
#define __SYSCALL_WITH_COMPAT(nr, native, compat) __SYSCALL(nr, native)
|
||||
.align 8
|
||||
ENTRY(sys_call_table64)
|
||||
#include <asm/syscall_table_64.h> /* 64-bit native syscalls */
|
||||
|
|
|
|||
|
|
@ -285,6 +285,7 @@ int __init opal_event_init(void)
|
|||
name, NULL);
|
||||
if (rc) {
|
||||
pr_warn("Error %d requesting OPAL irq %d\n", rc, (int)r->start);
|
||||
kfree(name);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -139,6 +139,11 @@ config GENERIC_HWEIGHT
|
|||
config FIX_EARLYCON_MEM
|
||||
def_bool y
|
||||
|
||||
config ILLEGAL_POINTER_VALUE
|
||||
hex
|
||||
default 0 if 32BIT
|
||||
default 0xdead000000000000 if 64BIT
|
||||
|
||||
config PGTABLE_LEVELS
|
||||
int
|
||||
default 3 if 64BIT
|
||||
|
|
|
|||
|
|
@ -4,8 +4,6 @@
|
|||
* Copyright (C) 2017 SiFive
|
||||
*/
|
||||
|
||||
#define GENERATING_ASM_OFFSETS
|
||||
|
||||
#include <linux/kbuild.h>
|
||||
#include <linux/sched.h>
|
||||
#include <asm/thread_info.h>
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ void perf_callchain_user(struct perf_callchain_entry_ctx *entry,
|
|||
perf_callchain_store(entry, regs->sepc);
|
||||
|
||||
fp = user_backtrace(entry, fp, regs->ra);
|
||||
while (fp && !(fp & 0x3) && entry->nr < entry->max_stack)
|
||||
while (fp && !(fp & 0x7) && entry->nr < entry->max_stack)
|
||||
fp = user_backtrace(entry, fp, 0);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -53,8 +53,10 @@ static inline int test_facility(unsigned long nr)
|
|||
unsigned long facilities_als[] = { FACILITIES_ALS };
|
||||
|
||||
if (__builtin_constant_p(nr) && nr < sizeof(facilities_als) * 8) {
|
||||
if (__test_facility(nr, &facilities_als))
|
||||
return 1;
|
||||
if (__test_facility(nr, &facilities_als)) {
|
||||
if (!__is_defined(__DECOMPRESSOR))
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return __test_facility(nr, &S390_lowcore.stfle_fac_list);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1412,7 +1412,7 @@ static int aux_output_begin(struct perf_output_handle *handle,
|
|||
unsigned long head, base, offset;
|
||||
struct hws_trailer_entry *te;
|
||||
|
||||
if (WARN_ON_ONCE(handle->head & ~PAGE_MASK))
|
||||
if (handle->head & ~PAGE_MASK)
|
||||
return -EINVAL;
|
||||
|
||||
aux->head = handle->head >> PAGE_SHIFT;
|
||||
|
|
@ -1580,7 +1580,7 @@ static void hw_collect_aux(struct cpu_hw_sf *cpuhw)
|
|||
unsigned long num_sdb;
|
||||
|
||||
aux = perf_get_aux(handle);
|
||||
if (WARN_ON_ONCE(!aux))
|
||||
if (!aux)
|
||||
return;
|
||||
|
||||
/* Inform user space new data arrived */
|
||||
|
|
@ -1599,7 +1599,7 @@ static void hw_collect_aux(struct cpu_hw_sf *cpuhw)
|
|||
debug_sprintf_event(sfdbg, 1, "AUX buffer used up\n");
|
||||
break;
|
||||
}
|
||||
if (WARN_ON_ONCE(!aux))
|
||||
if (!aux)
|
||||
return;
|
||||
|
||||
/* Update head and alert_mark to new position */
|
||||
|
|
@ -1836,12 +1836,8 @@ static void cpumsf_pmu_start(struct perf_event *event, int flags)
|
|||
{
|
||||
struct cpu_hw_sf *cpuhw = this_cpu_ptr(&cpu_hw_sf);
|
||||
|
||||
if (WARN_ON_ONCE(!(event->hw.state & PERF_HES_STOPPED)))
|
||||
if (!(event->hw.state & PERF_HES_STOPPED))
|
||||
return;
|
||||
|
||||
if (flags & PERF_EF_RELOAD)
|
||||
WARN_ON_ONCE(!(event->hw.state & PERF_HES_UPTODATE));
|
||||
|
||||
perf_pmu_disable(event->pmu);
|
||||
event->hw.state = 0;
|
||||
cpuhw->lsctl.cs = 1;
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@ static int __diag_page_ref_service(struct kvm_vcpu *vcpu)
|
|||
vcpu->stat.diagnose_258++;
|
||||
if (vcpu->run->s.regs.gprs[rx] & 7)
|
||||
return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION);
|
||||
rc = read_guest(vcpu, vcpu->run->s.regs.gprs[rx], rx, &parm, sizeof(parm));
|
||||
rc = read_guest_real(vcpu, vcpu->run->s.regs.gprs[rx], &parm, sizeof(parm));
|
||||
if (rc)
|
||||
return kvm_s390_inject_prog_cond(vcpu, rc);
|
||||
if (parm.parm_version != 2 || parm.parm_len < 5 || parm.code != 0x258)
|
||||
|
|
|
|||
|
|
@ -794,46 +794,102 @@ static int low_address_protection_enabled(struct kvm_vcpu *vcpu,
|
|||
return 1;
|
||||
}
|
||||
|
||||
static int guest_page_range(struct kvm_vcpu *vcpu, unsigned long ga, u8 ar,
|
||||
unsigned long *pages, unsigned long nr_pages,
|
||||
const union asce asce, enum gacc_mode mode)
|
||||
/**
|
||||
* guest_range_to_gpas() - Calculate guest physical addresses of page fragments
|
||||
* covering a logical range
|
||||
* @vcpu: virtual cpu
|
||||
* @ga: guest address, start of range
|
||||
* @ar: access register
|
||||
* @gpas: output argument, may be NULL
|
||||
* @len: length of range in bytes
|
||||
* @asce: address-space-control element to use for translation
|
||||
* @mode: access mode
|
||||
*
|
||||
* Translate a logical range to a series of guest absolute addresses,
|
||||
* such that the concatenation of page fragments starting at each gpa make up
|
||||
* the whole range.
|
||||
* The translation is performed as if done by the cpu for the given @asce, @ar,
|
||||
* @mode and state of the @vcpu.
|
||||
* If the translation causes an exception, its program interruption code is
|
||||
* returned and the &struct kvm_s390_pgm_info pgm member of @vcpu is modified
|
||||
* such that a subsequent call to kvm_s390_inject_prog_vcpu() will inject
|
||||
* a correct exception into the guest.
|
||||
* The resulting gpas are stored into @gpas, unless it is NULL.
|
||||
*
|
||||
* Note: All fragments except the first one start at the beginning of a page.
|
||||
* When deriving the boundaries of a fragment from a gpa, all but the last
|
||||
* fragment end at the end of the page.
|
||||
*
|
||||
* Return:
|
||||
* * 0 - success
|
||||
* * <0 - translation could not be performed, for example if guest
|
||||
* memory could not be accessed
|
||||
* * >0 - an access exception occurred. In this case the returned value
|
||||
* is the program interruption code and the contents of pgm may
|
||||
* be used to inject an exception into the guest.
|
||||
*/
|
||||
static int guest_range_to_gpas(struct kvm_vcpu *vcpu, unsigned long ga, u8 ar,
|
||||
unsigned long *gpas, unsigned long len,
|
||||
const union asce asce, enum gacc_mode mode)
|
||||
{
|
||||
psw_t *psw = &vcpu->arch.sie_block->gpsw;
|
||||
unsigned int offset = offset_in_page(ga);
|
||||
unsigned int fragment_len;
|
||||
int lap_enabled, rc = 0;
|
||||
enum prot_type prot;
|
||||
unsigned long gpa;
|
||||
|
||||
lap_enabled = low_address_protection_enabled(vcpu, asce);
|
||||
while (nr_pages) {
|
||||
while (min(PAGE_SIZE - offset, len) > 0) {
|
||||
fragment_len = min(PAGE_SIZE - offset, len);
|
||||
ga = kvm_s390_logical_to_effective(vcpu, ga);
|
||||
if (mode == GACC_STORE && lap_enabled && is_low_address(ga))
|
||||
return trans_exc(vcpu, PGM_PROTECTION, ga, ar, mode,
|
||||
PROT_TYPE_LA);
|
||||
ga &= PAGE_MASK;
|
||||
if (psw_bits(*psw).dat) {
|
||||
rc = guest_translate(vcpu, ga, pages, asce, mode, &prot);
|
||||
rc = guest_translate(vcpu, ga, &gpa, asce, mode, &prot);
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
} else {
|
||||
*pages = kvm_s390_real_to_abs(vcpu, ga);
|
||||
if (kvm_is_error_gpa(vcpu->kvm, *pages))
|
||||
gpa = kvm_s390_real_to_abs(vcpu, ga);
|
||||
if (kvm_is_error_gpa(vcpu->kvm, gpa))
|
||||
rc = PGM_ADDRESSING;
|
||||
}
|
||||
if (rc)
|
||||
return trans_exc(vcpu, rc, ga, ar, mode, prot);
|
||||
ga += PAGE_SIZE;
|
||||
pages++;
|
||||
nr_pages--;
|
||||
if (gpas)
|
||||
*gpas++ = gpa;
|
||||
offset = 0;
|
||||
ga += fragment_len;
|
||||
len -= fragment_len;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int access_guest_page(struct kvm *kvm, enum gacc_mode mode, gpa_t gpa,
|
||||
void *data, unsigned int len)
|
||||
{
|
||||
const unsigned int offset = offset_in_page(gpa);
|
||||
const gfn_t gfn = gpa_to_gfn(gpa);
|
||||
int rc;
|
||||
|
||||
if (!gfn_to_memslot(kvm, gfn))
|
||||
return PGM_ADDRESSING;
|
||||
if (mode == GACC_STORE)
|
||||
rc = kvm_write_guest_page(kvm, gfn, data, offset, len);
|
||||
else
|
||||
rc = kvm_read_guest_page(kvm, gfn, data, offset, len);
|
||||
return rc;
|
||||
}
|
||||
|
||||
int access_guest(struct kvm_vcpu *vcpu, unsigned long ga, u8 ar, void *data,
|
||||
unsigned long len, enum gacc_mode mode)
|
||||
{
|
||||
psw_t *psw = &vcpu->arch.sie_block->gpsw;
|
||||
unsigned long _len, nr_pages, gpa, idx;
|
||||
unsigned long pages_array[2];
|
||||
unsigned long *pages;
|
||||
unsigned long nr_pages, idx;
|
||||
unsigned long gpa_array[2];
|
||||
unsigned int fragment_len;
|
||||
unsigned long *gpas;
|
||||
int need_ipte_lock;
|
||||
union asce asce;
|
||||
int rc;
|
||||
|
|
@ -845,50 +901,45 @@ int access_guest(struct kvm_vcpu *vcpu, unsigned long ga, u8 ar, void *data,
|
|||
if (rc)
|
||||
return rc;
|
||||
nr_pages = (((ga & ~PAGE_MASK) + len - 1) >> PAGE_SHIFT) + 1;
|
||||
pages = pages_array;
|
||||
if (nr_pages > ARRAY_SIZE(pages_array))
|
||||
pages = vmalloc(array_size(nr_pages, sizeof(unsigned long)));
|
||||
if (!pages)
|
||||
gpas = gpa_array;
|
||||
if (nr_pages > ARRAY_SIZE(gpa_array))
|
||||
gpas = vmalloc(array_size(nr_pages, sizeof(unsigned long)));
|
||||
if (!gpas)
|
||||
return -ENOMEM;
|
||||
need_ipte_lock = psw_bits(*psw).dat && !asce.r;
|
||||
if (need_ipte_lock)
|
||||
ipte_lock(vcpu);
|
||||
rc = guest_page_range(vcpu, ga, ar, pages, nr_pages, asce, mode);
|
||||
rc = guest_range_to_gpas(vcpu, ga, ar, gpas, len, asce, mode);
|
||||
for (idx = 0; idx < nr_pages && !rc; idx++) {
|
||||
gpa = *(pages + idx) + (ga & ~PAGE_MASK);
|
||||
_len = min(PAGE_SIZE - (gpa & ~PAGE_MASK), len);
|
||||
if (mode == GACC_STORE)
|
||||
rc = kvm_write_guest(vcpu->kvm, gpa, data, _len);
|
||||
else
|
||||
rc = kvm_read_guest(vcpu->kvm, gpa, data, _len);
|
||||
len -= _len;
|
||||
ga += _len;
|
||||
data += _len;
|
||||
fragment_len = min(PAGE_SIZE - offset_in_page(gpas[idx]), len);
|
||||
rc = access_guest_page(vcpu->kvm, mode, gpas[idx], data, fragment_len);
|
||||
len -= fragment_len;
|
||||
data += fragment_len;
|
||||
}
|
||||
if (need_ipte_lock)
|
||||
ipte_unlock(vcpu);
|
||||
if (nr_pages > ARRAY_SIZE(pages_array))
|
||||
vfree(pages);
|
||||
if (nr_pages > ARRAY_SIZE(gpa_array))
|
||||
vfree(gpas);
|
||||
return rc;
|
||||
}
|
||||
|
||||
int access_guest_real(struct kvm_vcpu *vcpu, unsigned long gra,
|
||||
void *data, unsigned long len, enum gacc_mode mode)
|
||||
{
|
||||
unsigned long _len, gpa;
|
||||
unsigned int fragment_len;
|
||||
unsigned long gpa;
|
||||
int rc = 0;
|
||||
|
||||
while (len && !rc) {
|
||||
gpa = kvm_s390_real_to_abs(vcpu, gra);
|
||||
_len = min(PAGE_SIZE - (gpa & ~PAGE_MASK), len);
|
||||
if (mode)
|
||||
rc = write_guest_abs(vcpu, gpa, data, _len);
|
||||
else
|
||||
rc = read_guest_abs(vcpu, gpa, data, _len);
|
||||
len -= _len;
|
||||
gra += _len;
|
||||
data += _len;
|
||||
fragment_len = min(PAGE_SIZE - offset_in_page(gpa), len);
|
||||
rc = access_guest_page(vcpu->kvm, mode, gpa, data, fragment_len);
|
||||
len -= fragment_len;
|
||||
gra += fragment_len;
|
||||
data += fragment_len;
|
||||
}
|
||||
if (rc > 0)
|
||||
vcpu->arch.pgm.code = rc;
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
|
@ -904,8 +955,6 @@ int access_guest_real(struct kvm_vcpu *vcpu, unsigned long gra,
|
|||
int guest_translate_address(struct kvm_vcpu *vcpu, unsigned long gva, u8 ar,
|
||||
unsigned long *gpa, enum gacc_mode mode)
|
||||
{
|
||||
psw_t *psw = &vcpu->arch.sie_block->gpsw;
|
||||
enum prot_type prot;
|
||||
union asce asce;
|
||||
int rc;
|
||||
|
||||
|
|
@ -913,23 +962,7 @@ int guest_translate_address(struct kvm_vcpu *vcpu, unsigned long gva, u8 ar,
|
|||
rc = get_vcpu_asce(vcpu, &asce, gva, ar, mode);
|
||||
if (rc)
|
||||
return rc;
|
||||
if (is_low_address(gva) && low_address_protection_enabled(vcpu, asce)) {
|
||||
if (mode == GACC_STORE)
|
||||
return trans_exc(vcpu, PGM_PROTECTION, gva, 0,
|
||||
mode, PROT_TYPE_LA);
|
||||
}
|
||||
|
||||
if (psw_bits(*psw).dat && !asce.r) { /* Use DAT? */
|
||||
rc = guest_translate(vcpu, gva, gpa, asce, mode, &prot);
|
||||
if (rc > 0)
|
||||
return trans_exc(vcpu, rc, gva, 0, mode, prot);
|
||||
} else {
|
||||
*gpa = kvm_s390_real_to_abs(vcpu, gva);
|
||||
if (kvm_is_error_gpa(vcpu->kvm, *gpa))
|
||||
return trans_exc(vcpu, rc, gva, PGM_ADDRESSING, mode, 0);
|
||||
}
|
||||
|
||||
return rc;
|
||||
return guest_range_to_gpas(vcpu, gva, ar, gpa, 1, asce, mode);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -938,17 +971,14 @@ int guest_translate_address(struct kvm_vcpu *vcpu, unsigned long gva, u8 ar,
|
|||
int check_gva_range(struct kvm_vcpu *vcpu, unsigned long gva, u8 ar,
|
||||
unsigned long length, enum gacc_mode mode)
|
||||
{
|
||||
unsigned long gpa;
|
||||
unsigned long currlen;
|
||||
union asce asce;
|
||||
int rc = 0;
|
||||
|
||||
rc = get_vcpu_asce(vcpu, &asce, gva, ar, mode);
|
||||
if (rc)
|
||||
return rc;
|
||||
ipte_lock(vcpu);
|
||||
while (length > 0 && !rc) {
|
||||
currlen = min(length, PAGE_SIZE - (gva % PAGE_SIZE));
|
||||
rc = guest_translate_address(vcpu, gva, ar, &gpa, mode);
|
||||
gva += currlen;
|
||||
length -= currlen;
|
||||
}
|
||||
rc = guest_range_to_gpas(vcpu, gva, ar, NULL, length, asce, mode);
|
||||
ipte_unlock(vcpu);
|
||||
|
||||
return rc;
|
||||
|
|
|
|||
|
|
@ -344,11 +344,12 @@ int read_guest_abs(struct kvm_vcpu *vcpu, unsigned long gpa, void *data,
|
|||
* @len: number of bytes to copy
|
||||
*
|
||||
* Copy @len bytes from @data (kernel space) to @gra (guest real address).
|
||||
* It is up to the caller to ensure that the entire guest memory range is
|
||||
* valid memory before calling this function.
|
||||
* Guest low address and key protection are not checked.
|
||||
*
|
||||
* Returns zero on success or -EFAULT on error.
|
||||
* Returns zero on success, -EFAULT when copying from @data failed, or
|
||||
* PGM_ADRESSING in case @gra is outside a memslot. In this case, pgm check info
|
||||
* is also stored to allow injecting into the guest (if applicable) using
|
||||
* kvm_s390_inject_prog_cond().
|
||||
*
|
||||
* If an error occurs data may have been copied partially to guest memory.
|
||||
*/
|
||||
|
|
@ -367,11 +368,12 @@ int write_guest_real(struct kvm_vcpu *vcpu, unsigned long gra, void *data,
|
|||
* @len: number of bytes to copy
|
||||
*
|
||||
* Copy @len bytes from @gra (guest real address) to @data (kernel space).
|
||||
* It is up to the caller to ensure that the entire guest memory range is
|
||||
* valid memory before calling this function.
|
||||
* Guest key protection is not checked.
|
||||
*
|
||||
* Returns zero on success or -EFAULT on error.
|
||||
* Returns zero on success, -EFAULT when copying to @data failed, or
|
||||
* PGM_ADRESSING in case @gra is outside a memslot. In this case, pgm check info
|
||||
* is also stored to allow injecting into the guest (if applicable) using
|
||||
* kvm_s390_inject_prog_cond().
|
||||
*
|
||||
* If an error occurs data may have been copied partially to kernel space.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -98,11 +98,12 @@ static long cmm_alloc_pages(long nr, long *counter,
|
|||
(*counter)++;
|
||||
spin_unlock(&cmm_lock);
|
||||
nr--;
|
||||
cond_resched();
|
||||
}
|
||||
return nr;
|
||||
}
|
||||
|
||||
static long cmm_free_pages(long nr, long *counter, struct cmm_page_array **list)
|
||||
static long __cmm_free_pages(long nr, long *counter, struct cmm_page_array **list)
|
||||
{
|
||||
struct cmm_page_array *pa;
|
||||
unsigned long addr;
|
||||
|
|
@ -126,6 +127,21 @@ static long cmm_free_pages(long nr, long *counter, struct cmm_page_array **list)
|
|||
return nr;
|
||||
}
|
||||
|
||||
static long cmm_free_pages(long nr, long *counter, struct cmm_page_array **list)
|
||||
{
|
||||
long inc = 0;
|
||||
|
||||
while (nr) {
|
||||
inc = min(256L, nr);
|
||||
nr -= inc;
|
||||
inc = __cmm_free_pages(inc, counter, list);
|
||||
if (inc)
|
||||
break;
|
||||
cond_resched();
|
||||
}
|
||||
return nr + inc;
|
||||
}
|
||||
|
||||
static int cmm_oom_notify(struct notifier_block *self,
|
||||
unsigned long dummy, void *parm)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -217,7 +217,7 @@
|
|||
#define X86_FEATURE_SPEC_STORE_BYPASS_DISABLE ( 7*32+23) /* "" Disable Speculative Store Bypass. */
|
||||
#define X86_FEATURE_LS_CFG_SSBD ( 7*32+24) /* "" AMD SSBD implementation via LS_CFG MSR */
|
||||
#define X86_FEATURE_IBRS ( 7*32+25) /* Indirect Branch Restricted Speculation */
|
||||
#define X86_FEATURE_IBPB ( 7*32+26) /* Indirect Branch Prediction Barrier */
|
||||
#define X86_FEATURE_IBPB ( 7*32+26) /* "ibpb" Indirect Branch Prediction Barrier without a guaranteed RSB flush */
|
||||
#define X86_FEATURE_STIBP ( 7*32+27) /* Single Thread Indirect Branch Predictors */
|
||||
#define X86_FEATURE_ZEN ( 7*32+28) /* "" CPU is AMD family 0x17 (Zen) */
|
||||
#define X86_FEATURE_L1TF_PTEINV ( 7*32+29) /* "" L1TF workaround PTE inversion */
|
||||
|
|
@ -308,6 +308,7 @@
|
|||
#define X86_FEATURE_VIRT_SSBD (13*32+25) /* Virtualized Speculative Store Bypass Disable */
|
||||
#define X86_FEATURE_AMD_SSB_NO (13*32+26) /* "" Speculative Store Bypass is fixed in hardware. */
|
||||
#define X86_FEATURE_BTC_NO (13*32+29) /* "" Not vulnerable to Branch Type Confusion */
|
||||
#define X86_FEATURE_AMD_IBPB_RET (13*32+30) /* "" IBPB clears return address predictor */
|
||||
|
||||
/* Thermal and Power Management Leaf, CPUID level 0x00000006 (EAX), word 14 */
|
||||
#define X86_FEATURE_DTHERM (14*32+ 0) /* Digital Thermal Sensor */
|
||||
|
|
|
|||
|
|
@ -94,7 +94,12 @@ static inline void syscall_get_arguments(struct task_struct *task,
|
|||
struct pt_regs *regs,
|
||||
unsigned long *args)
|
||||
{
|
||||
memcpy(args, ®s->bx, 6 * sizeof(args[0]));
|
||||
args[0] = regs->bx;
|
||||
args[1] = regs->cx;
|
||||
args[2] = regs->dx;
|
||||
args[3] = regs->si;
|
||||
args[4] = regs->di;
|
||||
args[5] = regs->bp;
|
||||
}
|
||||
|
||||
static inline void syscall_set_arguments(struct task_struct *task,
|
||||
|
|
|
|||
|
|
@ -491,7 +491,19 @@ static int lapic_timer_shutdown(struct clock_event_device *evt)
|
|||
v = apic_read(APIC_LVTT);
|
||||
v |= (APIC_LVT_MASKED | LOCAL_TIMER_VECTOR);
|
||||
apic_write(APIC_LVTT, v);
|
||||
apic_write(APIC_TMICT, 0);
|
||||
|
||||
/*
|
||||
* Setting APIC_LVT_MASKED (above) should be enough to tell
|
||||
* the hardware that this timer will never fire. But AMD
|
||||
* erratum 411 and some Intel CPU behavior circa 2024 say
|
||||
* otherwise. Time for belt and suspenders programming: mask
|
||||
* the timer _and_ zero the counter registers:
|
||||
*/
|
||||
if (v & APIC_LVT_TIMER_TSCDEADLINE)
|
||||
wrmsrl(MSR_IA32_TSC_DEADLINE, 0);
|
||||
else
|
||||
apic_write(APIC_TMICT, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -256,6 +256,7 @@ static void __init ms_hyperv_init_platform(void)
|
|||
ms_hyperv.misc_features & HV_FEATURE_FREQUENCY_MSRS_AVAILABLE) {
|
||||
x86_platform.calibrate_tsc = hv_get_tsc_khz;
|
||||
x86_platform.calibrate_cpu = hv_get_tsc_khz;
|
||||
setup_force_cpu_cap(X86_FEATURE_TSC_KNOWN_FREQ);
|
||||
}
|
||||
|
||||
if (ms_hyperv.hints & HV_X64_ENLIGHTENED_VMCS_RECOMMENDED) {
|
||||
|
|
|
|||
|
|
@ -250,7 +250,7 @@ static inline bool rdt_get_mb_table(struct rdt_resource *r)
|
|||
return false;
|
||||
}
|
||||
|
||||
static bool __get_mem_config_intel(struct rdt_resource *r)
|
||||
static __init bool __get_mem_config_intel(struct rdt_resource *r)
|
||||
{
|
||||
union cpuid_0x10_3_eax eax;
|
||||
union cpuid_0x10_x_edx edx;
|
||||
|
|
@ -277,7 +277,7 @@ static bool __get_mem_config_intel(struct rdt_resource *r)
|
|||
return true;
|
||||
}
|
||||
|
||||
static bool __rdt_get_mem_config_amd(struct rdt_resource *r)
|
||||
static __init bool __rdt_get_mem_config_amd(struct rdt_resource *r)
|
||||
{
|
||||
union cpuid_0x10_3_eax eax;
|
||||
union cpuid_0x10_x_edx edx;
|
||||
|
|
|
|||
|
|
@ -875,7 +875,7 @@ char * __init xen_memory_setup(void)
|
|||
* to relocating (and even reusing) pages with kernel text or data.
|
||||
*/
|
||||
if (xen_is_e820_reserved(__pa_symbol(_text),
|
||||
__pa_symbol(__bss_stop) - __pa_symbol(_text))) {
|
||||
__pa_symbol(_end) - __pa_symbol(_text))) {
|
||||
xen_raw_console_write("Xen hypervisor allocated kernel memory conflicts with E820 map\n");
|
||||
BUG();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2610,8 +2610,12 @@ bfq_setup_cooperator(struct bfq_data *bfqd, struct bfq_queue *bfqq,
|
|||
struct bfq_queue *in_service_bfqq, *new_bfqq;
|
||||
|
||||
/* if a merge has already been setup, then proceed with that first */
|
||||
if (bfqq->new_bfqq)
|
||||
return bfqq->new_bfqq;
|
||||
new_bfqq = bfqq->new_bfqq;
|
||||
if (new_bfqq) {
|
||||
while (new_bfqq->new_bfqq)
|
||||
new_bfqq = new_bfqq->new_bfqq;
|
||||
return new_bfqq;
|
||||
}
|
||||
|
||||
/*
|
||||
* Do not perform queue merging if the device is non
|
||||
|
|
@ -5990,7 +5994,7 @@ bfq_split_bfqq(struct bfq_io_cq *bic, struct bfq_queue *bfqq)
|
|||
{
|
||||
bfq_log_bfqq(bfqq->bfqd, bfqq, "splitting queue");
|
||||
|
||||
if (bfqq_process_refs(bfqq) == 1) {
|
||||
if (bfqq_process_refs(bfqq) == 1 && !bfqq->new_bfqq) {
|
||||
bfqq->pid = current->pid;
|
||||
bfq_clear_bfqq_coop(bfqq);
|
||||
bfq_clear_bfqq_split_coop(bfqq);
|
||||
|
|
@ -6175,7 +6179,8 @@ static struct bfq_queue *bfq_init_rq(struct request *rq)
|
|||
* addition, if the queue has also just been split, we have to
|
||||
* resume its state.
|
||||
*/
|
||||
if (likely(bfqq != &bfqd->oom_bfqq) && bfqq_process_refs(bfqq) == 1) {
|
||||
if (likely(bfqq != &bfqd->oom_bfqq) && !bfqq->new_bfqq &&
|
||||
bfqq_process_refs(bfqq) == 1) {
|
||||
bfqq->bic = bic;
|
||||
if (split) {
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -225,8 +225,8 @@ static int rq_qos_wake_function(struct wait_queue_entry *curr,
|
|||
|
||||
data->got_token = true;
|
||||
smp_wmb();
|
||||
list_del_init(&curr->entry);
|
||||
wake_up_process(data->task);
|
||||
list_del_init_careful(&curr->entry);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -40,8 +40,7 @@ static int setkey_unaligned(struct crypto_aead *tfm, const u8 *key,
|
|||
alignbuffer = (u8 *)ALIGN((unsigned long)buffer, alignmask + 1);
|
||||
memcpy(alignbuffer, key, keylen);
|
||||
ret = crypto_aead_alg(tfm)->setkey(tfm, alignbuffer, keylen);
|
||||
memset(alignbuffer, 0, keylen);
|
||||
kfree(buffer);
|
||||
kzfree(buffer);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -33,8 +33,7 @@ static int setkey_unaligned(struct crypto_tfm *tfm, const u8 *key,
|
|||
alignbuffer = (u8 *)ALIGN((unsigned long)buffer, alignmask + 1);
|
||||
memcpy(alignbuffer, key, keylen);
|
||||
ret = cia->cia_setkey(tfm, alignbuffer, keylen);
|
||||
memset(alignbuffer, 0, keylen);
|
||||
kfree(buffer);
|
||||
kzfree(buffer);
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -170,6 +170,8 @@ acpi_status acpi_db_convert_to_package(char *string, union acpi_object *object)
|
|||
elements =
|
||||
ACPI_ALLOCATE_ZEROED(DB_DEFAULT_PKG_ELEMENTS *
|
||||
sizeof(union acpi_object));
|
||||
if (!elements)
|
||||
return (AE_NO_MEMORY);
|
||||
|
||||
this = string;
|
||||
for (i = 0; i < (DB_DEFAULT_PKG_ELEMENTS - 1); i++) {
|
||||
|
|
|
|||
|
|
@ -437,6 +437,9 @@ acpi_status acpi_ex_prep_field_value(struct acpi_create_field_info *info)
|
|||
|
||||
if (info->connection_node) {
|
||||
second_desc = info->connection_node->object;
|
||||
if (second_desc == NULL) {
|
||||
break;
|
||||
}
|
||||
if (!(second_desc->common.flags & AOPOBJ_DATA_VALID)) {
|
||||
status =
|
||||
acpi_ds_get_buffer_arguments(second_desc);
|
||||
|
|
|
|||
|
|
@ -25,6 +25,8 @@ acpi_ps_get_next_package_length(struct acpi_parse_state *parser_state);
|
|||
static union acpi_parse_object *acpi_ps_get_next_field(struct acpi_parse_state
|
||||
*parser_state);
|
||||
|
||||
static void acpi_ps_free_field_list(union acpi_parse_object *start);
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_ps_get_next_package_length
|
||||
|
|
@ -683,6 +685,39 @@ static union acpi_parse_object *acpi_ps_get_next_field(struct acpi_parse_state
|
|||
return_PTR(field);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_ps_free_field_list
|
||||
*
|
||||
* PARAMETERS: start - First Op in field list
|
||||
*
|
||||
* RETURN: None.
|
||||
*
|
||||
* DESCRIPTION: Free all Op objects inside a field list.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static void acpi_ps_free_field_list(union acpi_parse_object *start)
|
||||
{
|
||||
union acpi_parse_object *cur = start;
|
||||
union acpi_parse_object *next;
|
||||
union acpi_parse_object *arg;
|
||||
|
||||
while (cur) {
|
||||
next = cur->common.next;
|
||||
|
||||
/* AML_INT_CONNECTION_OP can have a single argument */
|
||||
|
||||
arg = acpi_ps_get_arg(cur, 0);
|
||||
if (arg) {
|
||||
acpi_ps_free_op(arg);
|
||||
}
|
||||
|
||||
acpi_ps_free_op(cur);
|
||||
cur = next;
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_ps_get_next_arg
|
||||
|
|
@ -751,6 +786,10 @@ acpi_ps_get_next_arg(struct acpi_walk_state *walk_state,
|
|||
while (parser_state->aml < parser_state->pkg_end) {
|
||||
field = acpi_ps_get_next_field(parser_state);
|
||||
if (!field) {
|
||||
if (arg) {
|
||||
acpi_ps_free_field_list(arg);
|
||||
}
|
||||
|
||||
return_ACPI_STATUS(AE_NO_MEMORY);
|
||||
}
|
||||
|
||||
|
|
@ -820,6 +859,10 @@ acpi_ps_get_next_arg(struct acpi_walk_state *walk_state,
|
|||
acpi_ps_get_next_namepath(walk_state, parser_state,
|
||||
arg,
|
||||
ACPI_NOT_METHOD_CALL);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
acpi_ps_free_op(arg);
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
} else {
|
||||
/* Single complex argument, nothing returned */
|
||||
|
||||
|
|
@ -854,6 +897,10 @@ acpi_ps_get_next_arg(struct acpi_walk_state *walk_state,
|
|||
acpi_ps_get_next_namepath(walk_state, parser_state,
|
||||
arg,
|
||||
ACPI_POSSIBLE_METHOD_CALL);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
acpi_ps_free_op(arg);
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
|
||||
if (arg->common.aml_opcode == AML_INT_METHODCALL_OP) {
|
||||
|
||||
|
|
|
|||
|
|
@ -706,27 +706,34 @@ static LIST_HEAD(acpi_battery_list);
|
|||
static LIST_HEAD(battery_hook_list);
|
||||
static DEFINE_MUTEX(hook_mutex);
|
||||
|
||||
static void __battery_hook_unregister(struct acpi_battery_hook *hook, int lock)
|
||||
static void battery_hook_unregister_unlocked(struct acpi_battery_hook *hook)
|
||||
{
|
||||
struct acpi_battery *battery;
|
||||
|
||||
/*
|
||||
* In order to remove a hook, we first need to
|
||||
* de-register all the batteries that are registered.
|
||||
*/
|
||||
if (lock)
|
||||
mutex_lock(&hook_mutex);
|
||||
list_for_each_entry(battery, &acpi_battery_list, list) {
|
||||
hook->remove_battery(battery->bat);
|
||||
}
|
||||
list_del(&hook->list);
|
||||
if (lock)
|
||||
mutex_unlock(&hook_mutex);
|
||||
list_del_init(&hook->list);
|
||||
|
||||
pr_info("extension unregistered: %s\n", hook->name);
|
||||
}
|
||||
|
||||
void battery_hook_unregister(struct acpi_battery_hook *hook)
|
||||
{
|
||||
__battery_hook_unregister(hook, 1);
|
||||
mutex_lock(&hook_mutex);
|
||||
/*
|
||||
* Ignore already unregistered battery hooks. This might happen
|
||||
* if a battery hook was previously unloaded due to an error when
|
||||
* adding a new battery.
|
||||
*/
|
||||
if (!list_empty(&hook->list))
|
||||
battery_hook_unregister_unlocked(hook);
|
||||
|
||||
mutex_unlock(&hook_mutex);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(battery_hook_unregister);
|
||||
|
||||
|
|
@ -735,7 +742,6 @@ void battery_hook_register(struct acpi_battery_hook *hook)
|
|||
struct acpi_battery *battery;
|
||||
|
||||
mutex_lock(&hook_mutex);
|
||||
INIT_LIST_HEAD(&hook->list);
|
||||
list_add(&hook->list, &battery_hook_list);
|
||||
/*
|
||||
* Now that the driver is registered, we need
|
||||
|
|
@ -752,7 +758,7 @@ void battery_hook_register(struct acpi_battery_hook *hook)
|
|||
* hooks.
|
||||
*/
|
||||
pr_err("extension failed to load: %s", hook->name);
|
||||
__battery_hook_unregister(hook, 0);
|
||||
battery_hook_unregister_unlocked(hook);
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
|
|
@ -789,7 +795,7 @@ static void battery_hook_add_battery(struct acpi_battery *battery)
|
|||
*/
|
||||
pr_err("error in extension, unloading: %s",
|
||||
hook_node->name);
|
||||
__battery_hook_unregister(hook_node, 0);
|
||||
battery_hook_unregister_unlocked(hook_node);
|
||||
}
|
||||
}
|
||||
mutex_unlock(&hook_mutex);
|
||||
|
|
@ -822,7 +828,7 @@ static void __exit battery_hook_exit(void)
|
|||
* need to remove the hooks.
|
||||
*/
|
||||
list_for_each_entry_safe(hook, ptr, &battery_hook_list, list) {
|
||||
__battery_hook_unregister(hook, 1);
|
||||
battery_hook_unregister(hook);
|
||||
}
|
||||
mutex_destroy(&hook_mutex);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -111,6 +111,17 @@ static const struct dmi_system_id lid_blacklst[] = {
|
|||
},
|
||||
.driver_data = (void *)(long)ACPI_BUTTON_LID_INIT_OPEN,
|
||||
},
|
||||
{
|
||||
/*
|
||||
* Samsung galaxybook2 ,initial _LID device notification returns
|
||||
* lid closed.
|
||||
*/
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "750XED"),
|
||||
},
|
||||
.driver_data = (void *)(long)ACPI_BUTTON_LID_INIT_OPEN,
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -533,8 +533,9 @@ int acpi_device_setup_files(struct acpi_device *dev)
|
|||
* If device has _STR, 'description' file is created
|
||||
*/
|
||||
if (acpi_has_method(dev->handle, "_STR")) {
|
||||
status = acpi_evaluate_object(dev->handle, "_STR",
|
||||
NULL, &buffer);
|
||||
status = acpi_evaluate_object_typed(dev->handle, "_STR",
|
||||
NULL, &buffer,
|
||||
ACPI_TYPE_BUFFER);
|
||||
if (ACPI_FAILURE(status))
|
||||
buffer.pointer = NULL;
|
||||
dev->pnp.str_obj = buffer.pointer;
|
||||
|
|
|
|||
|
|
@ -790,6 +790,9 @@ static int acpi_ec_transaction_unlocked(struct acpi_ec *ec,
|
|||
unsigned long tmp;
|
||||
int ret = 0;
|
||||
|
||||
if (t->rdata)
|
||||
memset(t->rdata, 0, t->rlen);
|
||||
|
||||
/* start transaction */
|
||||
spin_lock_irqsave(&ec->lock, tmp);
|
||||
/* Enable GPE for command processing (IBF=0/OBF=1) */
|
||||
|
|
@ -826,8 +829,6 @@ static int acpi_ec_transaction(struct acpi_ec *ec, struct transaction *t)
|
|||
|
||||
if (!ec || (!t) || (t->wlen && !t->wdata) || (t->rlen && !t->rdata))
|
||||
return -EINVAL;
|
||||
if (t->rdata)
|
||||
memset(t->rdata, 0, t->rlen);
|
||||
|
||||
mutex_lock(&ec->mutex);
|
||||
if (ec->global_lock) {
|
||||
|
|
@ -854,7 +855,7 @@ static int acpi_ec_burst_enable(struct acpi_ec *ec)
|
|||
.wdata = NULL, .rdata = &d,
|
||||
.wlen = 0, .rlen = 1};
|
||||
|
||||
return acpi_ec_transaction(ec, &t);
|
||||
return acpi_ec_transaction_unlocked(ec, &t);
|
||||
}
|
||||
|
||||
static int acpi_ec_burst_disable(struct acpi_ec *ec)
|
||||
|
|
@ -864,7 +865,7 @@ static int acpi_ec_burst_disable(struct acpi_ec *ec)
|
|||
.wlen = 0, .rlen = 0};
|
||||
|
||||
return (acpi_ec_read_status(ec) & ACPI_EC_FLAG_BURST) ?
|
||||
acpi_ec_transaction(ec, &t) : 0;
|
||||
acpi_ec_transaction_unlocked(ec, &t) : 0;
|
||||
}
|
||||
|
||||
static int acpi_ec_read(struct acpi_ec *ec, u8 address, u8 *data)
|
||||
|
|
@ -880,6 +881,19 @@ static int acpi_ec_read(struct acpi_ec *ec, u8 address, u8 *data)
|
|||
return result;
|
||||
}
|
||||
|
||||
static int acpi_ec_read_unlocked(struct acpi_ec *ec, u8 address, u8 *data)
|
||||
{
|
||||
int result;
|
||||
u8 d;
|
||||
struct transaction t = {.command = ACPI_EC_COMMAND_READ,
|
||||
.wdata = &address, .rdata = &d,
|
||||
.wlen = 1, .rlen = 1};
|
||||
|
||||
result = acpi_ec_transaction_unlocked(ec, &t);
|
||||
*data = d;
|
||||
return result;
|
||||
}
|
||||
|
||||
static int acpi_ec_write(struct acpi_ec *ec, u8 address, u8 data)
|
||||
{
|
||||
u8 wdata[2] = { address, data };
|
||||
|
|
@ -890,6 +904,16 @@ static int acpi_ec_write(struct acpi_ec *ec, u8 address, u8 data)
|
|||
return acpi_ec_transaction(ec, &t);
|
||||
}
|
||||
|
||||
static int acpi_ec_write_unlocked(struct acpi_ec *ec, u8 address, u8 data)
|
||||
{
|
||||
u8 wdata[2] = { address, data };
|
||||
struct transaction t = {.command = ACPI_EC_COMMAND_WRITE,
|
||||
.wdata = wdata, .rdata = NULL,
|
||||
.wlen = 2, .rlen = 0};
|
||||
|
||||
return acpi_ec_transaction_unlocked(ec, &t);
|
||||
}
|
||||
|
||||
int ec_read(u8 addr, u8 *val)
|
||||
{
|
||||
int err;
|
||||
|
|
@ -1300,6 +1324,7 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address,
|
|||
struct acpi_ec *ec = handler_context;
|
||||
int result = 0, i, bytes = bits / 8;
|
||||
u8 *value = (u8 *)value64;
|
||||
u32 glk;
|
||||
|
||||
if ((address > 0xFF) || !value || !handler_context)
|
||||
return AE_BAD_PARAMETER;
|
||||
|
|
@ -1307,13 +1332,25 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address,
|
|||
if (function != ACPI_READ && function != ACPI_WRITE)
|
||||
return AE_BAD_PARAMETER;
|
||||
|
||||
mutex_lock(&ec->mutex);
|
||||
|
||||
if (ec->global_lock) {
|
||||
acpi_status status;
|
||||
|
||||
status = acpi_acquire_global_lock(ACPI_EC_UDELAY_GLK, &glk);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
result = -ENODEV;
|
||||
goto unlock;
|
||||
}
|
||||
}
|
||||
|
||||
if (ec->busy_polling || bits > 8)
|
||||
acpi_ec_burst_enable(ec);
|
||||
|
||||
for (i = 0; i < bytes; ++i, ++address, ++value) {
|
||||
result = (function == ACPI_READ) ?
|
||||
acpi_ec_read(ec, address, value) :
|
||||
acpi_ec_write(ec, address, *value);
|
||||
acpi_ec_read_unlocked(ec, address, value) :
|
||||
acpi_ec_write_unlocked(ec, address, *value);
|
||||
if (result < 0)
|
||||
break;
|
||||
}
|
||||
|
|
@ -1321,6 +1358,12 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address,
|
|||
if (ec->busy_polling || bits > 8)
|
||||
acpi_ec_burst_disable(ec);
|
||||
|
||||
if (ec->global_lock)
|
||||
acpi_release_global_lock(glk);
|
||||
|
||||
unlock:
|
||||
mutex_unlock(&ec->mutex);
|
||||
|
||||
switch (result) {
|
||||
case -EINVAL:
|
||||
return AE_BAD_PARAMETER;
|
||||
|
|
|
|||
|
|
@ -376,10 +376,8 @@ static int tps68470_pmic_opregion_probe(struct platform_device *pdev)
|
|||
struct tps68470_pmic_opregion *opregion;
|
||||
acpi_status status;
|
||||
|
||||
if (!dev || !tps68470_regmap) {
|
||||
dev_warn(dev, "dev or regmap is NULL\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
if (!tps68470_regmap)
|
||||
return dev_err_probe(dev, -EINVAL, "regmap is missing\n");
|
||||
|
||||
if (!handle) {
|
||||
dev_warn(dev, "acpi handle is NULL\n");
|
||||
|
|
|
|||
|
|
@ -442,6 +442,13 @@ static const struct dmi_system_id asus_laptop[] = {
|
|||
DMI_MATCH(DMI_BOARD_NAME, "B2402CBA"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Asus Vivobook X1704VAP */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "X1704VAP"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* TongFang GMxXGxx/TUXEDO Polaris 15 Gen5 AMD */
|
||||
.matches = {
|
||||
|
|
@ -455,6 +462,12 @@ static const struct dmi_system_id asus_laptop[] = {
|
|||
DMI_MATCH(DMI_BOARD_NAME, "B1402CVA"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* TongFang GMxXGxX/TUXEDO Polaris 15 Gen5 AMD */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_NAME, "GMxXGxX"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* TongFang GMxXGxx sold as Eluktronics Inc. RP-15 */
|
||||
.matches = {
|
||||
|
|
@ -481,12 +494,26 @@ static const struct dmi_system_id asus_laptop[] = {
|
|||
DMI_MATCH(DMI_BOARD_NAME, "GXxHRXx"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Asus ExpertBook B2502CVA */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "B2502CVA"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* TongFang GMxHGxx/TUXEDO Stellaris Slim Gen1 AMD */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_NAME, "GMxHGxx"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* LG Electronics 16T90SP */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LG Electronics"),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "16T90SP"),
|
||||
},
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -128,7 +128,7 @@ static const struct pci_device_id sil_pci_tbl[] = {
|
|||
static const struct sil_drivelist {
|
||||
const char *product;
|
||||
unsigned int quirk;
|
||||
} sil_blacklist [] = {
|
||||
} sil_quirks[] = {
|
||||
{ "ST320012AS", SIL_QUIRK_MOD15WRITE },
|
||||
{ "ST330013AS", SIL_QUIRK_MOD15WRITE },
|
||||
{ "ST340017AS", SIL_QUIRK_MOD15WRITE },
|
||||
|
|
@ -601,8 +601,8 @@ static void sil_thaw(struct ata_port *ap)
|
|||
* list, and apply the fixups to only the specific
|
||||
* devices/hosts/firmwares that need it.
|
||||
*
|
||||
* 20040111 - Seagate drives affected by the Mod15Write bug are blacklisted
|
||||
* The Maxtor quirk is in the blacklist, but I'm keeping the original
|
||||
* 20040111 - Seagate drives affected by the Mod15Write bug are quirked
|
||||
* The Maxtor quirk is in sil_quirks, but I'm keeping the original
|
||||
* pessimistic fix for the following reasons...
|
||||
* - There seems to be less info on it, only one device gleaned off the
|
||||
* Windows driver, maybe only one is affected. More info would be greatly
|
||||
|
|
@ -621,9 +621,9 @@ static void sil_dev_config(struct ata_device *dev)
|
|||
|
||||
ata_id_c_string(dev->id, model_num, ATA_ID_PROD, sizeof(model_num));
|
||||
|
||||
for (n = 0; sil_blacklist[n].product; n++)
|
||||
if (!strcmp(sil_blacklist[n].product, model_num)) {
|
||||
quirks = sil_blacklist[n].quirk;
|
||||
for (n = 0; sil_quirks[n].product; n++)
|
||||
if (!strcmp(sil_quirks[n].product, model_num)) {
|
||||
quirks = sil_quirks[n].quirk;
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -103,7 +103,8 @@ static ssize_t bus_attr_show(struct kobject *kobj, struct attribute *attr,
|
|||
{
|
||||
struct bus_attribute *bus_attr = to_bus_attr(attr);
|
||||
struct subsys_private *subsys_priv = to_subsys_private(kobj);
|
||||
ssize_t ret = 0;
|
||||
/* return -EIO for reading a bus attribute without show() */
|
||||
ssize_t ret = -EIO;
|
||||
|
||||
if (bus_attr->show)
|
||||
ret = bus_attr->show(subsys_priv->bus, buf);
|
||||
|
|
@ -115,7 +116,8 @@ static ssize_t bus_attr_store(struct kobject *kobj, struct attribute *attr,
|
|||
{
|
||||
struct bus_attribute *bus_attr = to_bus_attr(attr);
|
||||
struct subsys_private *subsys_priv = to_subsys_private(kobj);
|
||||
ssize_t ret = 0;
|
||||
/* return -EIO for writing a bus attribute without store() */
|
||||
ssize_t ret = -EIO;
|
||||
|
||||
if (bus_attr->store)
|
||||
ret = bus_attr->store(subsys_priv->bus, buf, count);
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@
|
|||
#include <linux/mutex.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/rcupdate.h>
|
||||
#include <linux/sched/signal.h>
|
||||
#include <linux/sysfs.h>
|
||||
|
||||
|
|
@ -1832,7 +1831,6 @@ static int dev_uevent(struct kset *kset, struct kobject *kobj,
|
|||
struct kobj_uevent_env *env)
|
||||
{
|
||||
struct device *dev = kobj_to_dev(kobj);
|
||||
struct device_driver *driver;
|
||||
int retval = 0;
|
||||
|
||||
/* add device node properties if present */
|
||||
|
|
@ -1861,12 +1859,8 @@ static int dev_uevent(struct kset *kset, struct kobject *kobj,
|
|||
if (dev->type && dev->type->name)
|
||||
add_uevent_var(env, "DEVTYPE=%s", dev->type->name);
|
||||
|
||||
/* Synchronize with module_remove_driver() */
|
||||
rcu_read_lock();
|
||||
driver = READ_ONCE(dev->driver);
|
||||
if (driver)
|
||||
add_uevent_var(env, "DRIVER=%s", driver->name);
|
||||
rcu_read_unlock();
|
||||
if (dev->driver)
|
||||
add_uevent_var(env, "DRIVER=%s", dev->driver->name);
|
||||
|
||||
/* Add common DT information about the device */
|
||||
of_device_uevent(dev, env);
|
||||
|
|
@ -1936,8 +1930,11 @@ static ssize_t uevent_show(struct device *dev, struct device_attribute *attr,
|
|||
if (!env)
|
||||
return -ENOMEM;
|
||||
|
||||
/* Synchronize with really_probe() */
|
||||
device_lock(dev);
|
||||
/* let the kset specific function add its keys */
|
||||
retval = kset->uevent_ops->uevent(kset, &dev->kobj, env);
|
||||
device_unlock(dev);
|
||||
if (retval)
|
||||
goto out;
|
||||
|
||||
|
|
|
|||
|
|
@ -755,6 +755,26 @@ static void fw_abort_batch_reqs(struct firmware *fw)
|
|||
mutex_unlock(&fw_lock);
|
||||
}
|
||||
|
||||
/*
|
||||
* Reject firmware file names with ".." path components.
|
||||
* There are drivers that construct firmware file names from device-supplied
|
||||
* strings, and we don't want some device to be able to tell us "I would like to
|
||||
* be sent my firmware from ../../../etc/shadow, please".
|
||||
*
|
||||
* Search for ".." surrounded by either '/' or start/end of string.
|
||||
*
|
||||
* This intentionally only looks at the firmware name, not at the firmware base
|
||||
* directory or at symlink contents.
|
||||
*/
|
||||
static bool name_contains_dotdot(const char *name)
|
||||
{
|
||||
size_t name_len = strlen(name);
|
||||
|
||||
return strcmp(name, "..") == 0 || strncmp(name, "../", 3) == 0 ||
|
||||
strstr(name, "/../") != NULL ||
|
||||
(name_len >= 3 && strcmp(name+name_len-3, "/..") == 0);
|
||||
}
|
||||
|
||||
/* called from request_firmware() and request_firmware_work_func() */
|
||||
static int
|
||||
_request_firmware(const struct firmware **firmware_p, const char *name,
|
||||
|
|
@ -774,6 +794,14 @@ _request_firmware(const struct firmware **firmware_p, const char *name,
|
|||
goto out;
|
||||
}
|
||||
|
||||
if (name_contains_dotdot(name)) {
|
||||
dev_warn(device,
|
||||
"Firmware load for '%s' refused, path contains '..' component\n",
|
||||
name);
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = _request_firmware_prepare(&fw, name, device, buf, size,
|
||||
opt_flags);
|
||||
if (ret <= 0) /* error or already assigned */
|
||||
|
|
@ -835,6 +863,8 @@ _request_firmware(const struct firmware **firmware_p, const char *name,
|
|||
* @name will be used as $FIRMWARE in the uevent environment and
|
||||
* should be distinctive enough not to be confused with any other
|
||||
* firmware image for this or any other device.
|
||||
* It must not contain any ".." path components - "foo/bar..bin" is
|
||||
* allowed, but "foo/../bar.bin" is not.
|
||||
*
|
||||
* Caller must hold the reference count of @device.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@
|
|||
#include <linux/errno.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/rcupdate.h>
|
||||
#include "base.h"
|
||||
|
||||
static char *make_driver_name(struct device_driver *drv)
|
||||
|
|
@ -78,9 +77,6 @@ void module_remove_driver(struct device_driver *drv)
|
|||
if (!drv)
|
||||
return;
|
||||
|
||||
/* Synchronize with dev_uevent() */
|
||||
synchronize_rcu();
|
||||
|
||||
sysfs_remove_link(&drv->p->kobj, "module");
|
||||
|
||||
if (drv->owner)
|
||||
|
|
|
|||
|
|
@ -362,6 +362,7 @@ ata_rw_frameinit(struct frame *f)
|
|||
}
|
||||
|
||||
ah->cmdstat = ATA_CMD_PIO_READ | writebit | extbit;
|
||||
dev_hold(t->ifp->nd);
|
||||
skb->dev = t->ifp->nd;
|
||||
}
|
||||
|
||||
|
|
@ -402,6 +403,8 @@ aoecmd_ata_rw(struct aoedev *d)
|
|||
__skb_queue_head_init(&queue);
|
||||
__skb_queue_tail(&queue, skb);
|
||||
aoenet_xmit(&queue);
|
||||
} else {
|
||||
dev_put(f->t->ifp->nd);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
|
@ -484,10 +487,13 @@ resend(struct aoedev *d, struct frame *f)
|
|||
memcpy(h->dst, t->addr, sizeof h->dst);
|
||||
memcpy(h->src, t->ifp->nd->dev_addr, sizeof h->src);
|
||||
|
||||
dev_hold(t->ifp->nd);
|
||||
skb->dev = t->ifp->nd;
|
||||
skb = skb_clone(skb, GFP_ATOMIC);
|
||||
if (skb == NULL)
|
||||
if (skb == NULL) {
|
||||
dev_put(t->ifp->nd);
|
||||
return;
|
||||
}
|
||||
f->sent = ktime_get();
|
||||
__skb_queue_head_init(&queue);
|
||||
__skb_queue_tail(&queue, skb);
|
||||
|
|
@ -618,6 +624,8 @@ probe(struct aoetgt *t)
|
|||
__skb_queue_head_init(&queue);
|
||||
__skb_queue_tail(&queue, skb);
|
||||
aoenet_xmit(&queue);
|
||||
} else {
|
||||
dev_put(f->t->ifp->nd);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1405,6 +1413,7 @@ aoecmd_ata_id(struct aoedev *d)
|
|||
ah->cmdstat = ATA_CMD_ID_ATA;
|
||||
ah->lba3 = 0xa0;
|
||||
|
||||
dev_hold(t->ifp->nd);
|
||||
skb->dev = t->ifp->nd;
|
||||
|
||||
d->rttavg = RTTAVG_INIT;
|
||||
|
|
@ -1414,6 +1423,8 @@ aoecmd_ata_id(struct aoedev *d)
|
|||
skb = skb_clone(skb, GFP_ATOMIC);
|
||||
if (skb)
|
||||
f->sent = ktime_get();
|
||||
else
|
||||
dev_put(t->ifp->nd);
|
||||
|
||||
return skb;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3509,10 +3509,12 @@ void drbd_uuid_new_current(struct drbd_device *device) __must_hold(local)
|
|||
void drbd_uuid_set_bm(struct drbd_device *device, u64 val) __must_hold(local)
|
||||
{
|
||||
unsigned long flags;
|
||||
if (device->ldev->md.uuid[UI_BITMAP] == 0 && val == 0)
|
||||
return;
|
||||
|
||||
spin_lock_irqsave(&device->ldev->md.uuid_lock, flags);
|
||||
if (device->ldev->md.uuid[UI_BITMAP] == 0 && val == 0) {
|
||||
spin_unlock_irqrestore(&device->ldev->md.uuid_lock, flags);
|
||||
return;
|
||||
}
|
||||
|
||||
if (val == 0) {
|
||||
drbd_uuid_move_history(device);
|
||||
device->ldev->md.uuid[UI_HISTORY_START] = device->ldev->md.uuid[UI_BITMAP];
|
||||
|
|
|
|||
|
|
@ -876,7 +876,7 @@ is_valid_state(struct drbd_device *device, union drbd_state ns)
|
|||
ns.disk == D_OUTDATED)
|
||||
rv = SS_CONNECTED_OUTDATES;
|
||||
|
||||
else if ((ns.conn == C_VERIFY_S || ns.conn == C_VERIFY_T) &&
|
||||
else if (nc && (ns.conn == C_VERIFY_S || ns.conn == C_VERIFY_T) &&
|
||||
(nc->verify_alg[0] == 0))
|
||||
rv = SS_NO_VERIFY_ALG;
|
||||
|
||||
|
|
|
|||
|
|
@ -105,13 +105,15 @@ static int btmrvl_sdio_probe_of(struct device *dev,
|
|||
} else {
|
||||
ret = devm_request_irq(dev, cfg->irq_bt,
|
||||
btmrvl_wake_irq_bt,
|
||||
0, "bt_wake", card);
|
||||
IRQF_NO_AUTOEN, "bt_wake", card);
|
||||
if (ret) {
|
||||
dev_err(dev,
|
||||
"Failed to request irq_bt %d (%d)\n",
|
||||
cfg->irq_bt, ret);
|
||||
}
|
||||
disable_irq(cfg->irq_bt);
|
||||
|
||||
/* Configure wakeup (enabled by default) */
|
||||
device_init_wakeup(dev, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1654,6 +1656,7 @@ static void btmrvl_sdio_remove(struct sdio_func *func)
|
|||
MODULE_SHUTDOWN_REQ);
|
||||
btmrvl_sdio_disable_host_int(card);
|
||||
}
|
||||
|
||||
BT_DBG("unregister dev");
|
||||
card->priv->surprise_removed = true;
|
||||
btmrvl_sdio_unregister_dev(card);
|
||||
|
|
@ -1690,7 +1693,8 @@ static int btmrvl_sdio_suspend(struct device *dev)
|
|||
}
|
||||
|
||||
/* Enable platform specific wakeup interrupt */
|
||||
if (card->plt_wake_cfg && card->plt_wake_cfg->irq_bt >= 0) {
|
||||
if (card->plt_wake_cfg && card->plt_wake_cfg->irq_bt >= 0 &&
|
||||
device_may_wakeup(dev)) {
|
||||
card->plt_wake_cfg->wake_by_bt = false;
|
||||
enable_irq(card->plt_wake_cfg->irq_bt);
|
||||
enable_irq_wake(card->plt_wake_cfg->irq_bt);
|
||||
|
|
@ -1707,7 +1711,8 @@ static int btmrvl_sdio_suspend(struct device *dev)
|
|||
BT_ERR("HS not activated, suspend failed!");
|
||||
/* Disable platform specific wakeup interrupt */
|
||||
if (card->plt_wake_cfg &&
|
||||
card->plt_wake_cfg->irq_bt >= 0) {
|
||||
card->plt_wake_cfg->irq_bt >= 0 &&
|
||||
device_may_wakeup(dev)) {
|
||||
disable_irq_wake(card->plt_wake_cfg->irq_bt);
|
||||
disable_irq(card->plt_wake_cfg->irq_bt);
|
||||
}
|
||||
|
|
@ -1767,7 +1772,8 @@ static int btmrvl_sdio_resume(struct device *dev)
|
|||
hci_resume_dev(hcidev);
|
||||
|
||||
/* Disable platform specific wakeup interrupt */
|
||||
if (card->plt_wake_cfg && card->plt_wake_cfg->irq_bt >= 0) {
|
||||
if (card->plt_wake_cfg && card->plt_wake_cfg->irq_bt >= 0 &&
|
||||
device_may_wakeup(dev)) {
|
||||
disable_irq_wake(card->plt_wake_cfg->irq_bt);
|
||||
disable_irq(card->plt_wake_cfg->irq_bt);
|
||||
if (card->plt_wake_cfg->wake_by_bt)
|
||||
|
|
|
|||
|
|
@ -834,7 +834,15 @@ static int btusb_submit_intr_urb(struct hci_dev *hdev, gfp_t mem_flags)
|
|||
if (!urb)
|
||||
return -ENOMEM;
|
||||
|
||||
size = le16_to_cpu(data->intr_ep->wMaxPacketSize);
|
||||
if (le16_to_cpu(data->udev->descriptor.idVendor) == 0x0a12 &&
|
||||
le16_to_cpu(data->udev->descriptor.idProduct) == 0x0001)
|
||||
/* Fake CSR devices don't seem to support sort-transter */
|
||||
size = le16_to_cpu(data->intr_ep->wMaxPacketSize);
|
||||
else
|
||||
/* Use maximum HCI Event size so the USB stack handles
|
||||
* ZPL/short-transfer automatically.
|
||||
*/
|
||||
size = HCI_MAX_EVENT_SIZE;
|
||||
|
||||
buf = kmalloc(size, mem_flags);
|
||||
if (!buf) {
|
||||
|
|
|
|||
|
|
@ -149,7 +149,7 @@ static int mtk_rng_probe(struct platform_device *pdev)
|
|||
dev_set_drvdata(&pdev->dev, priv);
|
||||
pm_runtime_set_autosuspend_delay(&pdev->dev, RNG_AUTOSUSPEND_TIMEOUT);
|
||||
pm_runtime_use_autosuspend(&pdev->dev);
|
||||
pm_runtime_enable(&pdev->dev);
|
||||
devm_pm_runtime_enable(&pdev->dev);
|
||||
|
||||
dev_info(&pdev->dev, "registered RNG driver\n");
|
||||
|
||||
|
|
|
|||
|
|
@ -48,6 +48,8 @@ static ssize_t tpm_dev_transmit(struct tpm_chip *chip, struct tpm_space *space,
|
|||
|
||||
if (!ret)
|
||||
ret = tpm2_commit_space(chip, space, buf, &len);
|
||||
else
|
||||
tpm2_flush_space(chip);
|
||||
|
||||
out_rc:
|
||||
return ret ? ret : len;
|
||||
|
|
|
|||
|
|
@ -166,6 +166,9 @@ void tpm2_flush_space(struct tpm_chip *chip)
|
|||
struct tpm_space *space = &chip->work_space;
|
||||
int i;
|
||||
|
||||
if (!space)
|
||||
return;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(space->context_tbl); i++)
|
||||
if (space->context_tbl[i] && ~space->context_tbl[i])
|
||||
tpm2_flush_context(chip, space->context_tbl[i]);
|
||||
|
|
|
|||
|
|
@ -2051,25 +2051,27 @@ static int virtcons_probe(struct virtio_device *vdev)
|
|||
multiport = true;
|
||||
}
|
||||
|
||||
err = init_vqs(portdev);
|
||||
if (err < 0) {
|
||||
dev_err(&vdev->dev, "Error %d initializing vqs\n", err);
|
||||
goto free_chrdev;
|
||||
}
|
||||
|
||||
spin_lock_init(&portdev->ports_lock);
|
||||
INIT_LIST_HEAD(&portdev->ports);
|
||||
INIT_LIST_HEAD(&portdev->list);
|
||||
|
||||
virtio_device_ready(portdev->vdev);
|
||||
|
||||
INIT_WORK(&portdev->config_work, &config_work_handler);
|
||||
INIT_WORK(&portdev->control_work, &control_work_handler);
|
||||
|
||||
if (multiport) {
|
||||
spin_lock_init(&portdev->c_ivq_lock);
|
||||
spin_lock_init(&portdev->c_ovq_lock);
|
||||
}
|
||||
|
||||
err = init_vqs(portdev);
|
||||
if (err < 0) {
|
||||
dev_err(&vdev->dev, "Error %d initializing vqs\n", err);
|
||||
goto free_chrdev;
|
||||
}
|
||||
|
||||
virtio_device_ready(portdev->vdev);
|
||||
|
||||
if (multiport) {
|
||||
err = fill_queue(portdev->c_ivq, &portdev->c_ivq_lock);
|
||||
if (err < 0) {
|
||||
dev_err(&vdev->dev,
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@ static void bcm53573_ilp_init(struct device_node *np)
|
|||
goto err_free_ilp;
|
||||
}
|
||||
|
||||
ilp->regmap = syscon_node_to_regmap(of_get_parent(np));
|
||||
ilp->regmap = syscon_node_to_regmap(np->parent);
|
||||
if (IS_ERR(ilp->regmap)) {
|
||||
err = PTR_ERR(ilp->regmap);
|
||||
goto err_free_ilp;
|
||||
|
|
|
|||
|
|
@ -259,38 +259,35 @@ static int clk_rpmh_bcm_send_cmd(struct clk_rpmh *c, bool enable)
|
|||
{
|
||||
struct tcs_cmd cmd = { 0 };
|
||||
u32 cmd_state;
|
||||
int ret;
|
||||
int ret = 0;
|
||||
|
||||
mutex_lock(&rpmh_clk_lock);
|
||||
|
||||
cmd_state = 0;
|
||||
if (enable) {
|
||||
cmd_state = 1;
|
||||
if (c->aggr_state)
|
||||
cmd_state = c->aggr_state;
|
||||
} else {
|
||||
cmd_state = 0;
|
||||
}
|
||||
|
||||
if (c->last_sent_aggr_state == cmd_state) {
|
||||
mutex_unlock(&rpmh_clk_lock);
|
||||
return 0;
|
||||
cmd_state = min(cmd_state, BCM_TCS_CMD_VOTE_MASK);
|
||||
|
||||
if (c->last_sent_aggr_state != cmd_state) {
|
||||
cmd.addr = c->res_addr;
|
||||
cmd.data = BCM_TCS_CMD(1, enable, 0, cmd_state);
|
||||
|
||||
ret = clk_rpmh_send(c, RPMH_ACTIVE_ONLY_STATE, &cmd, enable);
|
||||
if (ret) {
|
||||
dev_err(c->dev, "set active state of %s failed: (%d)\n",
|
||||
c->res_name, ret);
|
||||
} else {
|
||||
c->last_sent_aggr_state = cmd_state;
|
||||
}
|
||||
}
|
||||
|
||||
cmd.addr = c->res_addr;
|
||||
cmd.data = BCM_TCS_CMD(1, enable, 0, cmd_state);
|
||||
|
||||
ret = clk_rpmh_send(c, RPMH_ACTIVE_ONLY_STATE, &cmd, enable);
|
||||
if (ret) {
|
||||
dev_err(c->dev, "set active state of %s failed: (%d)\n",
|
||||
c->res_name, ret);
|
||||
mutex_unlock(&rpmh_clk_lock);
|
||||
return ret;
|
||||
}
|
||||
|
||||
c->last_sent_aggr_state = cmd_state;
|
||||
|
||||
mutex_unlock(&rpmh_clk_lock);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int clk_rpmh_bcm_prepare(struct clk_hw *hw)
|
||||
|
|
|
|||
|
|
@ -408,7 +408,7 @@ static struct rockchip_clk_branch rk3228_clk_branches[] __initdata = {
|
|||
RK2928_CLKSEL_CON(29), 0, 3, DFLAGS),
|
||||
DIV(0, "sclk_vop_pre", "sclk_vop_src", 0,
|
||||
RK2928_CLKSEL_CON(27), 8, 8, DFLAGS),
|
||||
MUX(DCLK_VOP, "dclk_vop", mux_dclk_vop_p, 0,
|
||||
MUX(DCLK_VOP, "dclk_vop", mux_dclk_vop_p, CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
|
||||
RK2928_CLKSEL_CON(27), 1, 1, MFLAGS),
|
||||
|
||||
FACTOR(0, "xin12m", "xin24m", 0, 1, 2),
|
||||
|
|
|
|||
|
|
@ -439,12 +439,13 @@ void __init rockchip_clk_register_branches(
|
|||
struct rockchip_clk_branch *list,
|
||||
unsigned int nr_clk)
|
||||
{
|
||||
struct clk *clk = NULL;
|
||||
struct clk *clk;
|
||||
unsigned int idx;
|
||||
unsigned long flags;
|
||||
|
||||
for (idx = 0; idx < nr_clk; idx++, list++) {
|
||||
flags = list->flags;
|
||||
clk = NULL;
|
||||
|
||||
/* catch simple muxes */
|
||||
switch (list->branch_type) {
|
||||
|
|
|
|||
|
|
@ -257,6 +257,7 @@ static int of_dra7_atl_clk_probe(struct platform_device *pdev)
|
|||
}
|
||||
|
||||
clk = of_clk_get_from_provider(&clkspec);
|
||||
of_node_put(clkspec.np);
|
||||
if (IS_ERR(clk)) {
|
||||
pr_err("%s: failed to get atl clock %d from provider\n",
|
||||
__func__, i);
|
||||
|
|
|
|||
|
|
@ -233,6 +233,7 @@ static int __init msm_dt_timer_init(struct device_node *np)
|
|||
}
|
||||
|
||||
if (of_property_read_u32(np, "clock-frequency", &freq)) {
|
||||
iounmap(cpu0_base);
|
||||
pr_err("Unknown frequency\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
|
@ -243,7 +244,11 @@ static int __init msm_dt_timer_init(struct device_node *np)
|
|||
freq /= 4;
|
||||
writel_relaxed(DGT_CLK_CTL_DIV_4, source_base + DGT_CLK_CTL);
|
||||
|
||||
return msm_timer_init(freq, 32, irq, !!percpu_offset);
|
||||
ret = msm_timer_init(freq, 32, irq, !!percpu_offset);
|
||||
if (ret)
|
||||
iounmap(cpu0_base);
|
||||
|
||||
return ret;
|
||||
}
|
||||
TIMER_OF_DECLARE(kpss_timer, "qcom,kpss-timer", msm_dt_timer_init);
|
||||
TIMER_OF_DECLARE(scss_timer, "qcom,scss-timer", msm_dt_timer_init);
|
||||
|
|
|
|||
|
|
@ -24,12 +24,6 @@
|
|||
#define MSG_RING BIT(1)
|
||||
#define TAG_SZ 32
|
||||
|
||||
static inline struct tegra_bpmp *
|
||||
mbox_client_to_bpmp(struct mbox_client *client)
|
||||
{
|
||||
return container_of(client, struct tegra_bpmp, mbox.client);
|
||||
}
|
||||
|
||||
static inline const struct tegra_bpmp_ops *
|
||||
channel_to_ops(struct tegra_bpmp_channel *channel)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -404,6 +404,8 @@ static void __aspeed_gpio_set(struct gpio_chip *gc, unsigned int offset,
|
|||
gpio->dcache[GPIO_BANK(offset)] = reg;
|
||||
|
||||
iowrite32(reg, addr);
|
||||
/* Flush write */
|
||||
ioread32(addr);
|
||||
}
|
||||
|
||||
static void aspeed_gpio_set(struct gpio_chip *gc, unsigned int offset,
|
||||
|
|
@ -1157,7 +1159,7 @@ static int __init aspeed_gpio_probe(struct platform_device *pdev)
|
|||
if (!gpio_id)
|
||||
return -EINVAL;
|
||||
|
||||
gpio->clk = of_clk_get(pdev->dev.of_node, 0);
|
||||
gpio->clk = devm_clk_get_enabled(&pdev->dev, NULL);
|
||||
if (IS_ERR(gpio->clk)) {
|
||||
dev_warn(&pdev->dev,
|
||||
"Failed to get clock from devicetree, debouncing disabled\n");
|
||||
|
|
|
|||
|
|
@ -300,7 +300,7 @@ static int davinci_gpio_probe(struct platform_device *pdev)
|
|||
* serve as EDMA event triggers.
|
||||
*/
|
||||
|
||||
static void gpio_irq_disable(struct irq_data *d)
|
||||
static void gpio_irq_mask(struct irq_data *d)
|
||||
{
|
||||
struct davinci_gpio_regs __iomem *g = irq2regs(d);
|
||||
uintptr_t mask = (uintptr_t)irq_data_get_irq_handler_data(d);
|
||||
|
|
@ -309,7 +309,7 @@ static void gpio_irq_disable(struct irq_data *d)
|
|||
writel_relaxed(mask, &g->clr_rising);
|
||||
}
|
||||
|
||||
static void gpio_irq_enable(struct irq_data *d)
|
||||
static void gpio_irq_unmask(struct irq_data *d)
|
||||
{
|
||||
struct davinci_gpio_regs __iomem *g = irq2regs(d);
|
||||
uintptr_t mask = (uintptr_t)irq_data_get_irq_handler_data(d);
|
||||
|
|
@ -335,8 +335,8 @@ static int gpio_irq_type(struct irq_data *d, unsigned trigger)
|
|||
|
||||
static struct irq_chip gpio_irqchip = {
|
||||
.name = "GPIO",
|
||||
.irq_enable = gpio_irq_enable,
|
||||
.irq_disable = gpio_irq_disable,
|
||||
.irq_unmask = gpio_irq_unmask,
|
||||
.irq_mask = gpio_irq_mask,
|
||||
.irq_set_type = gpio_irq_type,
|
||||
.flags = IRQCHIP_SET_TYPE_MASKED | IRQCHIP_SKIP_SET_WAKE,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
#include <linux/module.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/nospec.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/device.h>
|
||||
|
|
@ -147,7 +148,7 @@ struct gpio_desc *gpiochip_get_desc(struct gpio_chip *chip,
|
|||
if (hwnum >= gdev->ngpio)
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
return &gdev->descs[hwnum];
|
||||
return &gdev->descs[array_index_nospec(hwnum, gdev->ngpio)];
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -85,6 +85,7 @@ static union acpi_object *amdgpu_atif_call(struct amdgpu_atif *atif,
|
|||
struct acpi_buffer *params)
|
||||
{
|
||||
acpi_status status;
|
||||
union acpi_object *obj;
|
||||
union acpi_object atif_arg_elements[2];
|
||||
struct acpi_object_list atif_arg;
|
||||
struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
|
||||
|
|
@ -107,16 +108,24 @@ static union acpi_object *amdgpu_atif_call(struct amdgpu_atif *atif,
|
|||
|
||||
status = acpi_evaluate_object(atif->handle, NULL, &atif_arg,
|
||||
&buffer);
|
||||
obj = (union acpi_object *)buffer.pointer;
|
||||
|
||||
/* Fail only if calling the method fails and ATIF is supported */
|
||||
if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
|
||||
/* Fail if calling the method fails */
|
||||
if (ACPI_FAILURE(status)) {
|
||||
DRM_DEBUG_DRIVER("failed to evaluate ATIF got %s\n",
|
||||
acpi_format_exception(status));
|
||||
kfree(buffer.pointer);
|
||||
kfree(obj);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return buffer.pointer;
|
||||
if (obj->type != ACPI_TYPE_BUFFER) {
|
||||
DRM_DEBUG_DRIVER("bad object returned from ATIF: %d\n",
|
||||
obj->type);
|
||||
kfree(obj);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -395,7 +395,7 @@ static ssize_t amdgpu_debugfs_regs_smc_read(struct file *f, char __user *buf,
|
|||
if (!adev->smc_rreg)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (size & 0x3 || *pos & 0x3)
|
||||
if (size > 4096 || size & 0x3 || *pos & 0x3)
|
||||
return -EINVAL;
|
||||
|
||||
while (size) {
|
||||
|
|
|
|||
|
|
@ -2098,23 +2098,29 @@ amdgpu_atombios_encoder_get_lcd_info(struct amdgpu_encoder *encoder)
|
|||
fake_edid_record = (ATOM_FAKE_EDID_PATCH_RECORD *)record;
|
||||
if (fake_edid_record->ucFakeEDIDLength) {
|
||||
struct edid *edid;
|
||||
int edid_size =
|
||||
max((int)EDID_LENGTH, (int)fake_edid_record->ucFakeEDIDLength);
|
||||
edid = kmalloc(edid_size, GFP_KERNEL);
|
||||
if (edid) {
|
||||
memcpy((u8 *)edid, (u8 *)&fake_edid_record->ucFakeEDIDString[0],
|
||||
fake_edid_record->ucFakeEDIDLength);
|
||||
int edid_size;
|
||||
|
||||
if (fake_edid_record->ucFakeEDIDLength == 128)
|
||||
edid_size = fake_edid_record->ucFakeEDIDLength;
|
||||
else
|
||||
edid_size = fake_edid_record->ucFakeEDIDLength * 128;
|
||||
edid = kmemdup(&fake_edid_record->ucFakeEDIDString[0],
|
||||
edid_size, GFP_KERNEL);
|
||||
if (edid) {
|
||||
if (drm_edid_is_valid(edid)) {
|
||||
adev->mode_info.bios_hardcoded_edid = edid;
|
||||
adev->mode_info.bios_hardcoded_edid_size = edid_size;
|
||||
} else
|
||||
} else {
|
||||
kfree(edid);
|
||||
}
|
||||
}
|
||||
record += struct_size(fake_edid_record,
|
||||
ucFakeEDIDString,
|
||||
edid_size);
|
||||
} else {
|
||||
/* empty fake edid record must be 3 bytes long */
|
||||
record += sizeof(ATOM_FAKE_EDID_PATCH_RECORD) + 1;
|
||||
}
|
||||
record += fake_edid_record->ucFakeEDIDLength ?
|
||||
fake_edid_record->ucFakeEDIDLength + 2 :
|
||||
sizeof(ATOM_FAKE_EDID_PATCH_RECORD);
|
||||
break;
|
||||
case LCD_PANEL_RESOLUTION_RECORD_TYPE:
|
||||
panel_res_record = (ATOM_PANEL_RESOLUTION_PATCH_RECORD *)record;
|
||||
|
|
|
|||
|
|
@ -1542,6 +1542,8 @@ static bool are_stream_backends_same(
|
|||
bool dc_is_stream_unchanged(
|
||||
struct dc_stream_state *old_stream, struct dc_stream_state *stream)
|
||||
{
|
||||
if (!old_stream || !stream)
|
||||
return false;
|
||||
|
||||
if (!are_stream_backends_same(old_stream, stream))
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -551,6 +551,8 @@ bool cm_helper_translate_curve_to_degamma_hw_format(
|
|||
i += increment) {
|
||||
if (j == hw_points - 1)
|
||||
break;
|
||||
if (i >= TRANSFER_FUNC_POINTS)
|
||||
return false;
|
||||
rgb_resulted[j].red = output_tf->tf_pts.red[i];
|
||||
rgb_resulted[j].green = output_tf->tf_pts.green[i];
|
||||
rgb_resulted[j].blue = output_tf->tf_pts.blue[i];
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@ static void calculate_ttu_cursor(struct display_mode_lib *mode_lib,
|
|||
|
||||
static unsigned int get_bytes_per_element(enum source_format_class source_format, bool is_chroma)
|
||||
{
|
||||
unsigned int ret_val = 0;
|
||||
unsigned int ret_val = 1;
|
||||
|
||||
if (source_format == dm_444_16) {
|
||||
if (!is_chroma)
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ static void calculate_ttu_cursor(
|
|||
|
||||
static unsigned int get_bytes_per_element(enum source_format_class source_format, bool is_chroma)
|
||||
{
|
||||
unsigned int ret_val = 0;
|
||||
unsigned int ret_val = 1;
|
||||
|
||||
if (source_format == dm_444_16) {
|
||||
if (!is_chroma)
|
||||
|
|
|
|||
|
|
@ -131,7 +131,7 @@ static unsigned int calc_v_total_from_refresh(
|
|||
|
||||
v_total = div64_u64(div64_u64(((unsigned long long)(
|
||||
frame_duration_in_ns) * (stream->timing.pix_clk_100hz / 10)),
|
||||
stream->timing.h_total), 1000000);
|
||||
stream->timing.h_total) + 500000, 1000000);
|
||||
|
||||
/* v_total cannot be less than nominal */
|
||||
if (v_total < stream->timing.v_total) {
|
||||
|
|
|
|||
|
|
@ -4107,7 +4107,7 @@ typedef struct _ATOM_FAKE_EDID_PATCH_RECORD
|
|||
{
|
||||
UCHAR ucRecordType;
|
||||
UCHAR ucFakeEDIDLength; // = 128 means EDID length is 128 bytes, otherwise the EDID length = ucFakeEDIDLength*128
|
||||
UCHAR ucFakeEDIDString[1]; // This actually has ucFakeEdidLength elements.
|
||||
UCHAR ucFakeEDIDString[]; // This actually has ucFakeEdidLength elements.
|
||||
} ATOM_FAKE_EDID_PATCH_RECORD;
|
||||
|
||||
typedef struct _ATOM_PANEL_RESOLUTION_PATCH_RECORD
|
||||
|
|
|
|||
|
|
@ -148,6 +148,7 @@ static int komeda_crtc_normalize_zpos(struct drm_crtc *crtc,
|
|||
struct drm_plane *plane;
|
||||
struct list_head zorder_list;
|
||||
int order = 0, err;
|
||||
u32 slave_zpos = 0;
|
||||
|
||||
DRM_DEBUG_ATOMIC("[CRTC:%d:%s] calculating normalized zpos values\n",
|
||||
crtc->base.id, crtc->name);
|
||||
|
|
@ -187,10 +188,13 @@ static int komeda_crtc_normalize_zpos(struct drm_crtc *crtc,
|
|||
plane_st->zpos, plane_st->normalized_zpos);
|
||||
|
||||
/* calculate max slave zorder */
|
||||
if (has_bit(drm_plane_index(plane), kcrtc->slave_planes))
|
||||
if (has_bit(drm_plane_index(plane), kcrtc->slave_planes)) {
|
||||
slave_zpos = plane_st->normalized_zpos;
|
||||
if (to_kplane_st(plane_st)->layer_split)
|
||||
slave_zpos++;
|
||||
kcrtc_st->max_slave_zorder =
|
||||
max(plane_st->normalized_zpos,
|
||||
kcrtc_st->max_slave_zorder);
|
||||
max(slave_zpos, kcrtc_st->max_slave_zorder);
|
||||
}
|
||||
}
|
||||
|
||||
crtc_st->zpos_changed = true;
|
||||
|
|
|
|||
|
|
@ -582,7 +582,7 @@ static int drm_atomic_plane_set_property(struct drm_plane *plane,
|
|||
&state->fb_damage_clips,
|
||||
val,
|
||||
-1,
|
||||
sizeof(struct drm_rect),
|
||||
sizeof(struct drm_mode_rect),
|
||||
&replaced);
|
||||
return ret;
|
||||
} else if (plane->funcs->atomic_set_property) {
|
||||
|
|
|
|||
|
|
@ -727,6 +727,7 @@ out:
|
|||
connector_set = NULL;
|
||||
fb = NULL;
|
||||
mode = NULL;
|
||||
num_connectors = 0;
|
||||
|
||||
DRM_MODESET_LOCK_ALL_END(ctx, ret);
|
||||
mutex_unlock(&crtc->dev->mode_config.mutex);
|
||||
|
|
|
|||
|
|
@ -221,7 +221,7 @@ mipi_dsi_device_register_full(struct mipi_dsi_host *host,
|
|||
return dsi;
|
||||
}
|
||||
|
||||
device_set_node(&dsi->dev, of_fwnode_handle(info->node));
|
||||
dsi->dev.of_node = info->node;
|
||||
dsi->channel = info->channel;
|
||||
strlcpy(dsi->name, info->type, sizeof(dsi->name));
|
||||
|
||||
|
|
|
|||
|
|
@ -59,8 +59,9 @@ void __drm_puts_coredump(struct drm_printer *p, const char *str)
|
|||
copy = iterator->remain;
|
||||
|
||||
/* Copy out the bit of the string that we need */
|
||||
memcpy(iterator->data,
|
||||
str + (iterator->start - iterator->offset), copy);
|
||||
if (iterator->data)
|
||||
memcpy(iterator->data,
|
||||
str + (iterator->start - iterator->offset), copy);
|
||||
|
||||
iterator->offset = iterator->start + copy;
|
||||
iterator->remain -= copy;
|
||||
|
|
@ -69,7 +70,8 @@ void __drm_puts_coredump(struct drm_printer *p, const char *str)
|
|||
|
||||
len = min_t(ssize_t, strlen(str), iterator->remain);
|
||||
|
||||
memcpy(iterator->data + pos, str, len);
|
||||
if (iterator->data)
|
||||
memcpy(iterator->data + pos, str, len);
|
||||
|
||||
iterator->offset += len;
|
||||
iterator->remain -= len;
|
||||
|
|
@ -99,8 +101,9 @@ void __drm_printfn_coredump(struct drm_printer *p, struct va_format *vaf)
|
|||
if ((iterator->offset >= iterator->start) && (len < iterator->remain)) {
|
||||
ssize_t pos = iterator->offset - iterator->start;
|
||||
|
||||
snprintf(((char *) iterator->data) + pos,
|
||||
iterator->remain, "%pV", vaf);
|
||||
if (iterator->data)
|
||||
snprintf(((char *) iterator->data) + pos,
|
||||
iterator->remain, "%pV", vaf);
|
||||
|
||||
iterator->offset += len;
|
||||
iterator->remain -= len;
|
||||
|
|
|
|||
|
|
@ -1169,7 +1169,7 @@ static int gsc_bind(struct device *dev, struct device *master, void *data)
|
|||
struct exynos_drm_ipp *ipp = &ctx->ipp;
|
||||
|
||||
ctx->drm_dev = drm_dev;
|
||||
ctx->drm_dev = drm_dev;
|
||||
ipp->drm_dev = drm_dev;
|
||||
exynos_drm_register_dma(drm_dev, dev, &ctx->dma_priv);
|
||||
|
||||
exynos_drm_ipp_register(dev, ipp, &ipp_funcs,
|
||||
|
|
|
|||
|
|
@ -134,9 +134,13 @@ static void a5xx_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit,
|
|||
OUT_PKT7(ring, CP_SET_PROTECTED_MODE, 1);
|
||||
OUT_RING(ring, 1);
|
||||
|
||||
/* Enable local preemption for finegrain preemption */
|
||||
/*
|
||||
* Disable local preemption by default because it requires
|
||||
* user-space to be aware of it and provide additional handling
|
||||
* to restore rendering state or do various flushes on switch.
|
||||
*/
|
||||
OUT_PKT7(ring, CP_PREEMPT_ENABLE_LOCAL, 1);
|
||||
OUT_RING(ring, 0x1);
|
||||
OUT_RING(ring, 0x0);
|
||||
|
||||
/* Allow CP_CONTEXT_SWITCH_YIELD packets in the IB2 */
|
||||
OUT_PKT7(ring, CP_YIELD_ENABLE, 1);
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ struct a5xx_gpu {
|
|||
uint64_t preempt_iova[MSM_GPU_MAX_RINGS];
|
||||
|
||||
atomic_t preempt_state;
|
||||
spinlock_t preempt_start_lock;
|
||||
struct timer_list preempt_timer;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -98,12 +98,19 @@ void a5xx_preempt_trigger(struct msm_gpu *gpu)
|
|||
if (gpu->nr_rings == 1)
|
||||
return;
|
||||
|
||||
/*
|
||||
* Serialize preemption start to ensure that we always make
|
||||
* decision on latest state. Otherwise we can get stuck in
|
||||
* lower priority or empty ring.
|
||||
*/
|
||||
spin_lock_irqsave(&a5xx_gpu->preempt_start_lock, flags);
|
||||
|
||||
/*
|
||||
* Try to start preemption by moving from NONE to START. If
|
||||
* unsuccessful, a preemption is already in flight
|
||||
*/
|
||||
if (!try_preempt_state(a5xx_gpu, PREEMPT_NONE, PREEMPT_START))
|
||||
return;
|
||||
goto out;
|
||||
|
||||
/* Get the next ring to preempt to */
|
||||
ring = get_next_ring(gpu);
|
||||
|
|
@ -128,9 +135,11 @@ void a5xx_preempt_trigger(struct msm_gpu *gpu)
|
|||
set_preempt_state(a5xx_gpu, PREEMPT_ABORT);
|
||||
update_wptr(gpu, a5xx_gpu->cur_ring);
|
||||
set_preempt_state(a5xx_gpu, PREEMPT_NONE);
|
||||
return;
|
||||
goto out;
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&a5xx_gpu->preempt_start_lock, flags);
|
||||
|
||||
/* Make sure the wptr doesn't update while we're in motion */
|
||||
spin_lock_irqsave(&ring->lock, flags);
|
||||
a5xx_gpu->preempt[ring->id]->wptr = get_wptr(ring);
|
||||
|
|
@ -154,6 +163,10 @@ void a5xx_preempt_trigger(struct msm_gpu *gpu)
|
|||
|
||||
/* And actually start the preemption */
|
||||
gpu_write(gpu, REG_A5XX_CP_CONTEXT_SWITCH_CNTL, 1);
|
||||
return;
|
||||
|
||||
out:
|
||||
spin_unlock_irqrestore(&a5xx_gpu->preempt_start_lock, flags);
|
||||
}
|
||||
|
||||
void a5xx_preempt_irq(struct msm_gpu *gpu)
|
||||
|
|
@ -191,6 +204,12 @@ void a5xx_preempt_irq(struct msm_gpu *gpu)
|
|||
update_wptr(gpu, a5xx_gpu->cur_ring);
|
||||
|
||||
set_preempt_state(a5xx_gpu, PREEMPT_NONE);
|
||||
|
||||
/*
|
||||
* Try to trigger preemption again in case there was a submit or
|
||||
* retire during ring switch
|
||||
*/
|
||||
a5xx_preempt_trigger(gpu);
|
||||
}
|
||||
|
||||
void a5xx_preempt_hw_init(struct msm_gpu *gpu)
|
||||
|
|
@ -207,6 +226,8 @@ void a5xx_preempt_hw_init(struct msm_gpu *gpu)
|
|||
return;
|
||||
|
||||
for (i = 0; i < gpu->nr_rings; i++) {
|
||||
a5xx_gpu->preempt[i]->data = 0;
|
||||
a5xx_gpu->preempt[i]->info = 0;
|
||||
a5xx_gpu->preempt[i]->wptr = 0;
|
||||
a5xx_gpu->preempt[i]->rptr = 0;
|
||||
a5xx_gpu->preempt[i]->rbase = gpu->rb[i]->iova;
|
||||
|
|
@ -287,5 +308,6 @@ void a5xx_preempt_init(struct msm_gpu *gpu)
|
|||
}
|
||||
}
|
||||
|
||||
spin_lock_init(&a5xx_gpu->preempt_start_lock);
|
||||
timer_setup(&a5xx_gpu->preempt_timer, a5xx_preempt_timer, 0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -247,7 +247,7 @@ adreno_request_fw(struct adreno_gpu *adreno_gpu, const char *fwname)
|
|||
ret = request_firmware_direct(&fw, fwname, drm->dev);
|
||||
if (!ret) {
|
||||
DRM_DEV_INFO(drm->dev, "loaded %s from legacy location\n",
|
||||
newname);
|
||||
fwname);
|
||||
adreno_gpu->fwloc = FW_LOCATION_LEGACY;
|
||||
goto out;
|
||||
} else if (adreno_gpu->fwloc != FW_LOCATION_UNKNOWN) {
|
||||
|
|
|
|||
|
|
@ -358,7 +358,7 @@ void mdp5_smp_dump(struct mdp5_smp *smp, struct drm_printer *p)
|
|||
|
||||
drm_printf(p, "%s:%d\t%d\t%s\n",
|
||||
pipe2name(pipe), j, inuse,
|
||||
plane ? plane->name : NULL);
|
||||
plane ? plane->name : "(null)");
|
||||
|
||||
total += inuse;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -663,7 +663,7 @@ static u32 dsi_get_pclk_rate(struct msm_dsi_host *msm_host, bool is_dual_dsi)
|
|||
struct drm_display_mode *mode = msm_host->mode;
|
||||
u32 pclk_rate;
|
||||
|
||||
pclk_rate = mode->clock * 1000;
|
||||
pclk_rate = mode->clock * 1000u;
|
||||
|
||||
/*
|
||||
* For dual DSI mode, the current DRM mode has the complete width of the
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue