Merge tag 'ASB-2021-06-05_4.19-stable' of https://github.com/aosp-mirror/kernel_common into android12-base
https://source.android.com/security/bulletin/2021-06-01 CVE-2020-14305 CVE-2020-14381 CVE-2021-0512 CVE-2021-3347 * tag 'ASB-2021-06-05_4.19-stable' of https://github.com/aosp-mirror/kernel_common: Linux 4.19.193 usb: core: reduce power-on-good delay time of root hub net: hns3: check the return of skb_checksum_help() drivers/net/ethernet: clean up unused assignments hugetlbfs: hugetlb_fault_mutex_hash() cleanup MIPS: ralink: export rt_sysc_membase for rt2880_wdt.c MIPS: alchemy: xxs1500: add gpio-au1000.h header file sch_dsmark: fix a NULL deref in qdisc_reset() ipv6: record frag_max_size in atomic fragments in input path scsi: libsas: Use _safe() loop in sas_resume_port() ixgbe: fix large MTU request from VF bpf: Set mac_len in bpf_skb_change_head ASoC: cs35l33: fix an error code in probe() staging: emxx_udc: fix loop in _nbu2ss_nuke() mld: fix panic in mld_newpack() net: bnx2: Fix error return code in bnx2_init_board() openvswitch: meter: fix race when getting now_ms. net: mdio: octeon: Fix some double free issues net: mdio: thunder: Fix a double free issue in the .remove function net: fec: fix the potential memory leak in fec_enet_init() net: dsa: fix error code getting shifted with 4 in dsa_slave_get_sset_count net: netcp: Fix an error message drm/amdgpu: Fix a use-after-free drm/amd/amdgpu: fix refcount leak drm/amd/display: Disconnect non-DP with no EDID SMB3: incorrect file id in requests compounded with open platform/x86: intel_punit_ipc: Append MODULE_DEVICE_TABLE for ACPI platform/x86: hp-wireless: add AMD's hardware id to the supported list btrfs: do not BUG_ON in link_to_fixup_dir openrisc: Define memory barrier mb scsi: BusLogic: Fix 64-bit system enumeration error for Buslogic media: gspca: properly check for errors in po1030_probe() media: dvb: Add check on sp8870_readreg return ASoC: cs43130: handle errors in cs43130_probe() properly libertas: register sysfs groups properly dmaengine: qcom_hidma: comment platform_driver_register call isdn: mISDNinfineon: check/cleanup ioremap failure correctly in setup_io char: hpet: add checks after calling ioremap net: caif: remove BUG_ON(dev == NULL) in caif_xmit net: fujitsu: fix potential null-ptr-deref serial: max310x: unregister uart driver in case of failure and abort platform/x86: hp_accel: Avoid invoking _INI to speed up resume perf jevents: Fix getting maximum number of fds i2c: i801: Don't generate an interrupt on bus reset i2c: s3c2410: fix possible NULL pointer deref on read message after write net: dsa: fix a crash if ->get_sset_count() fails net: dsa: mt7530: fix VLAN traffic leaks tipc: skb_linearize the head skb when reassembling msgs Revert "net:tipc: Fix a double free in tipc_sk_mcast_rcv" net/mlx4: Fix EEPROM dump support drm/meson: fix shutdown crash when component not probed NFSv4: Fix v4.0/v4.1 SEEK_DATA return -ENOTSUPP when set NFS_V4_2 config NFS: Don't corrupt the value of pg_bytes_written in nfs_do_recoalesce() NFS: fix an incorrect limit in filelayout_decode_layout() Bluetooth: cmtp: fix file refcount when cmtp_attach_device fails spi: mt7621: Don't leak SPI master in probe error path spi: mt7621: Disable clock in probe error path spi: gpio: Don't leak SPI master in probe error path bpf: No need to simulate speculative domain for immediates bpf: Fix mask direction swap upon off reg sign change bpf: Wrap aux data inside bpf_sanitize_info container bpf: Fix leakage of uninitialized bpf stack under speculation bpf: Update selftests to reflect new error states bpf: Tighten speculative pointer arithmetic mask bpf: Move sanitize_val_alu out of op switch bpf: Refactor and streamline bounds check into helper bpf: Improve verifier error messages for users bpf: Rework ptr_limit into alu_limit and add common error path bpf: Ensure off_reg has no mixed signed bounds for all types bpf: Move off_reg into sanitize_ptr_alu bpf, test_verifier: switch bpf_get_stack's 0 s> r8 test bpf: Test_verifier, bpf_get_stack return value add <0 bpf: extend is_branch_taken to registers selftests/bpf: add selftest part of "bpf: improve verifier branch analysis" selftests/bpf: Test narrow loads with off > 0 in test_verifier bpf, selftests: Fix up some test_verifier cases for unprivileged bpf: fix up selftests after backports were fixed net: usb: fix memory leak in smsc75xx_bind usb: gadget: udc: renesas_usb3: Fix a race in usb3_start_pipen() usb: dwc3: gadget: Properly track pending and queued SG USB: serial: pl2303: add device id for ADLINK ND-6530 GC USB: serial: ftdi_sio: add IDs for IDS GmbH Products USB: serial: option: add Telit LE910-S1 compositions 0x7010, 0x7011 USB: serial: ti_usb_3410_5052: add startech.com device id serial: rp2: use 'request_firmware' instead of 'request_firmware_nowait' serial: sh-sci: Fix off-by-one error in FIFO threshold register setting USB: usbfs: Don't WARN about excessively large memory allocations USB: trancevibrator: fix control-request direction iio: adc: ad7793: Add missing error code in ad7793_setup() staging: iio: cdc: ad7746: avoid overwrite of num_channels mei: request autosuspend after sending rx flow control thunderbolt: dma_port: Fix NVM read buffer bounds and offset issue misc/uss720: fix memory leak in uss720_probe kgdb: fix gcc-11 warnings harder dm snapshot: properly fix a crash when an origin has no snapshots ath10k: Validate first subframe of A-MSDU before processing the list mac80211: extend protection against mixed key and fragment cache attacks mac80211: do not accept/forward invalid EAPOL frames mac80211: prevent attacks on TKIP/WEP as well mac80211: check defrag PN against current frame mac80211: add fragment cache to sta_info mac80211: drop A-MSDUs on old ciphers cfg80211: mitigate A-MSDU aggregation attacks mac80211: properly handle A-MSDUs that start with an RFC 1042 header mac80211: prevent mixed key and fragment cache attacks mac80211: assure all fragments are encrypted net: hso: fix control-request directions proc: Check /proc/$pid/attr/ writes against file opener perf intel-pt: Fix transaction abort handling perf intel-pt: Fix sample instruction bytes iommu/vt-d: Fix sysfs leak in alloc_iommu() NFSv4: Fix a NULL pointer dereference in pnfs_mark_matching_lsegs_return() cifs: set server->cipher_type to AES-128-CCM for SMB3.0 NFC: nci: fix memory leak in nci_allocate_device usb: dwc3: gadget: Enable suspend events mm, vmstat: drop zone->lock in /proc/pagetypeinfo Revert "spi: Fix use-after-free with devm_spi_alloc_*" Revert "modules: inherit TAINT_PROPRIETARY_MODULE" Linux 4.19.192 Bluetooth: SMP: Fail if remote and local public keys are identical video: hgafb: correctly handle card detect failure during probe tty: vt: always invoke vc->vc_sw->con_resize callback vt: Fix character height handling with VT_RESIZEX vgacon: Record video mode changes with VT_RESIZEX video: hgafb: fix potential NULL pointer dereference qlcnic: Add null check after calling netdev_alloc_skb leds: lp5523: check return value of lp5xx_read and jump to cleanup code net: rtlwifi: properly check for alloc_workqueue() failure scsi: ufs: handle cleanup correctly on devm_reset_control_get error net: stmicro: handle clk_prepare() failure during init ethernet: sun: niu: fix missing checks of niu_pci_eeprom_read() Revert "niu: fix missing checks of niu_pci_eeprom_read" Revert "qlcnic: Avoid potential NULL pointer dereference" Revert "rtlwifi: fix a potential NULL pointer dereference" Revert "media: rcar_drif: fix a memory disclosure" cdrom: gdrom: initialize global variable at init time cdrom: gdrom: deallocate struct gdrom_unit fields in remove_gdrom Revert "gdrom: fix a memory leak bug" Revert "scsi: ufs: fix a missing check of devm_reset_control_get" Revert "ecryptfs: replace BUG_ON with error handling code" Revert "video: imsttfb: fix potential NULL pointer dereferences" Revert "hwmon: (lm80) fix a missing check of bus read in lm80 probe" Revert "leds: lp5523: fix a missing check of return value of lp55xx_read" Revert "net: stmicro: fix a missing check of clk_prepare" Revert "video: hgafb: fix potential NULL pointer dereference" dm snapshot: fix crash with transient storage and zero chunk size xen-pciback: reconfigure also from backend watch handler Revert "serial: mvebu-uart: Fix to avoid a potential NULL pointer dereference" rapidio: handle create_workqueue() failure Revert "rapidio: fix a NULL pointer dereference when create_workqueue() fails" ALSA: hda/realtek: Add some CLOVE SSIDs of ALC293 ALSA: hda/realtek: reset eapd coeff to default value for alc287 Revert "ALSA: sb8: add a check for request_region" ALSA: bebob/oxfw: fix Kconfig entry for Mackie d.2 Pro ALSA: usb-audio: Validate MS endpoint descriptors ALSA: dice: fix stream format at middle sampling rate for Alesis iO 26 ALSA: line6: Fix racy initialization of LINE6 MIDI ALSA: dice: fix stream format for TC Electronic Konnekt Live at high sampling transfer frequency cifs: fix memory leak in smb2_copychunk_range locking/mutex: clear MUTEX_FLAGS if wait_list is empty due to signal nvmet: seset ns->file when open fails ptrace: make ptrace() fail if the tracee changed its pid unexpectedly platform/x86: dell-smbios-wmi: Fix oops on rmmod dell_smbios RDMA/mlx5: Recover from fatal event in dual port mode scsi: qla2xxx: Fix error return code in qla82xx_write_flash_dword() RDMA/rxe: Clear all QP fields if creation failed openrisc: Fix a memory leak firmware: arm_scpi: Prevent the ternary sign expansion bug Linux 4.19.191 scripts: switch explicitly to Python 3 tweewide: Fix most Shebang lines KVM: arm64: Initialize VCPU mdcr_el2 before loading it iomap: fix sub-page uptodate handling ipv6: remove extra dev_hold() for fallback tunnels ip6_tunnel: sit: proper dev_{hold|put} in ndo_[un]init methods sit: proper dev_{hold|put} in ndo_[un]init methods ip6_gre: proper dev_{hold|put} in ndo_[un]init methods net: stmmac: Do not enable RX FIFO overflow interrupts lib: stackdepot: turn depot_lock spinlock to raw_spinlock block: reexpand iov_iter after read/write ALSA: hda: generic: change the DAC ctl name for LO+SPK or LO+HP gpiolib: acpi: Add quirk to ignore EC wakeups on Dell Venue 10 Pro 5055 scsi: target: tcmu: Return from tcmu_handle_completions() if cmd_id not found ceph: fix fscache invalidation riscv: Workaround mcount name prior to clang-13 scripts/recordmcount.pl: Fix RISC-V regex for clang ARM: 9075/1: kernel: Fix interrupted SMC calls um: Mark all kernel symbols as local Input: silead - add workaround for x86 BIOS-es which bring the chip up in a stuck state Input: elants_i2c - do not bind to i2c-hid compatible ACPI instantiated devices ACPI / hotplug / PCI: Fix reference count leak in enable_slot() ARM: 9066/1: ftrace: pause/unpause function graph tracer in cpu_suspend() PCI: thunder: Fix compile testing xsk: Simplify detection of empty and full rings pinctrl: ingenic: Improve unreachable code generation isdn: capi: fix mismatched prototypes cxgb4: Fix the -Wmisleading-indentation warning usb: sl811-hcd: improve misleading indentation kgdb: fix gcc-11 warning on indentation x86/msr: Fix wr/rdmsr_safe_regs_on_cpu() prototypes nvme: do not try to reconfigure APST when the controller is not live clk: exynos7: Mark aclk_fsys1_200 as critical netfilter: conntrack: Make global sysctls readonly in non-init netns kobject_uevent: remove warning in init_uevent_argv() thermal/core/fair share: Lock the thermal zone while looping over instances MIPS: Avoid handcoded DIVU in `__div64_32' altogether MIPS: Avoid DIVU in `__div64_32' is result would be zero MIPS: Reinstate platform `__div64_32' handler FDDI: defxx: Make MMIO the configuration default except for EISA KVM: x86: Cancel pvclock_gtod_work on module removal cdc-wdm: untangle a circular dependency between callback and softint iio: tsl2583: Fix division by a zero lux_val iio: gyro: mpu3050: Fix reported temperature value xhci: Add reset resume quirk for AMD xhci controller. xhci: Do not use GFP_KERNEL in (potentially) atomic context usb: dwc3: gadget: Return success always for kick transfer in ep queue usb: core: hub: fix race condition about TRSMRCY of resume usb: dwc2: Fix gadget DMA unmap direction usb: xhci: Increase timeout for HC halt usb: dwc3: pci: Enable usb2-gadget-lpm-disable for Intel Merrifield usb: dwc3: omap: improve extcon initialization blk-mq: Swap two calls in blk_mq_exit_queue() ACPI: scan: Fix a memory leak in an error handling path usb: fotg210-hcd: Fix an error message iio: proximity: pulsedlight: Fix rumtime PM imbalance on error drm/radeon/dpm: Disable sclk switching on Oland when two 4K 60Hz monitors are connected userfaultfd: release page in error path to avoid BUG_ON squashfs: fix divide error in calculate_skip() hfsplus: prevent corruption in shrinking truncate powerpc/64s: Fix crashes when toggling entry flush barrier powerpc/64s: Fix crashes when toggling stf barrier ARC: entry: fix off-by-one error in syscall number validation i40e: Fix use-after-free in i40e_client_subtask() netfilter: nftables: avoid overflows in nft_hash_buckets() kernel: kexec_file: fix error return code of kexec_calculate_store_digests() sched/fair: Fix unfairness caused by missing load decay netfilter: nfnetlink_osf: Fix a missing skb_header_pointer() NULL check smc: disallow TCP_ULP in smc_setsockopt() net: fix nla_strcmp to handle more then one trailing null character ksm: fix potential missing rmap_item for stable_node mm/hugeltb: handle the error case in hugetlb_fix_reserve_counts() khugepaged: fix wrong result value for trace_mm_collapse_huge_page_isolate() drm/radeon: Avoid power table parsing memory leaks drm/radeon: Fix off-by-one power_state index heap overwrite netfilter: xt_SECMARK: add new revision to fix structure layout sctp: fix a SCTP_MIB_CURRESTAB leak in sctp_sf_do_dupcook_b ethernet:enic: Fix a use after free bug in enic_hard_start_xmit sctp: do asoc update earlier in sctp_sf_do_dupcook_a net: hns3: disable phy loopback setting in hclge_mac_start_phy rtc: ds1307: Fix wday settings for rx8130 NFSv4.2 fix handling of sr_eof in SEEK's reply pNFS/flexfiles: fix incorrect size check in decode_nfs_fh() PCI: endpoint: Fix missing destroy_workqueue() NFS: Deal correctly with attribute generation counter overflow NFSv4.2: Always flush out writes in nfs42_proc_fallocate() rpmsg: qcom_glink_native: fix error return code of qcom_glink_rx_data() ARM: 9064/1: hw_breakpoint: Do not directly check the event's overflow_handler hook PCI: Release OF node in pci_scan_device()'s error path PCI: iproc: Fix return value of iproc_msi_irq_domain_alloc() f2fs: fix a redundant call to f2fs_balance_fs if an error occurs ASoC: rt286: Make RT286_SET_GPIO_* readable and writable ia64: module: fix symbolizer crash on fdescr net: ethernet: mtk_eth_soc: fix RX VLAN offload powerpc/iommu: Annotate nested lock for lockdep wl3501_cs: Fix out-of-bounds warnings in wl3501_mgmt_join wl3501_cs: Fix out-of-bounds warnings in wl3501_send_pkt powerpc/pseries: Stop calling printk in rtas_stop_self() samples/bpf: Fix broken tracex1 due to kprobe argument change ethtool: ioctl: Fix out-of-bounds warning in store_link_ksettings_for_user() ASoC: rt286: Generalize support for ALC3263 codec powerpc/smp: Set numa node before updating mask sctp: Fix out-of-bounds warning in sctp_process_asconf_param() kconfig: nconf: stop endless search loops selftests: Set CC to clang in lib.mk if LLVM is set cuse: prevent clone pinctrl: samsung: use 'int' for register masks in Exynos mac80211: clear the beacon's CRC after channel switch i2c: Add I2C_AQ_NO_REP_START adapter quirk ASoC: Intel: bytcr_rt5640: Add quirk for the Chuwi Hi8 tablet ip6_vti: proper dev_{hold|put} in ndo_[un]init methods Bluetooth: check for zapped sk before connecting net: bridge: when suppression is enabled exclude RARP packets Bluetooth: initialize skb_queue_head at l2cap_chan_create() Bluetooth: Set CONF_NOT_COMPLETE as l2cap_chan default ALSA: rme9652: don't disable if not enabled ALSA: hdspm: don't disable if not enabled ALSA: hdsp: don't disable if not enabled i2c: bail out early when RDWR parameters are wrong net: stmmac: Set FIFO sizes for ipq806x ASoC: Intel: bytcr_rt5640: Enable jack-detect support on Asus T100TAF tipc: convert dest node's address to network order fs: dlm: fix debugfs dump tpm: fix error return code in tpm2_get_cc_attrs_tbl() Revert "fdt: Properly handle "no-map" field in the memory region" Revert "of/fdt: Make sure no-map does not remove already reserved regions" sctp: delay auto_asconf init until binding the first addr Revert "net/sctp: fix race condition in sctp_destroy_sock" smp: Fix smp_call_function_single_async prototype net: Only allow init netns to set default tcp cong to a restricted algo mm/memory-failure: unnecessary amount of unmapping mm/sparse: add the missing sparse_buffer_fini() in error branch kfifo: fix ternary sign extension bugs net:nfc:digital: Fix a double free in digital_tg_recv_dep_req RDMA/bnxt_re: Fix a double free in bnxt_qplib_alloc_res net:emac/emac-mac: Fix a use after free in emac_mac_tx_buf_send net: geneve: modify IP header check in geneve6_xmit_skb and geneve_xmit_skb arm64: dts: uniphier: Change phy-mode to RGMII-ID to enable delay pins for RTL8211E ARM: dts: uniphier: Change phy-mode to RGMII-ID to enable delay pins for RTL8211E bnxt_en: fix ternary sign extension bug in bnxt_show_temp() powerpc/52xx: Fix an invalid ASM expression ('addi' used instead of 'add') ath10k: Fix ath10k_wmi_tlv_op_pull_peer_stats_info() unlock without lock ath9k: Fix error check in ath9k_hw_read_revisions() for PCI devices net: davinci_emac: Fix incorrect masking of tx and rx error channel ALSA: usb: midi: don't return -ENOMEM when usb_urb_ep_type_check fails RDMA/i40iw: Fix error unwinding when i40iw_hmc_sd_one fails vsock/vmci: log once the failed queue pair allocation mwl8k: Fix a double Free in mwl8k_probe_hw i2c: sh7760: fix IRQ error path rtlwifi: 8821ae: upgrade PHY and RF parameters powerpc/pseries: extract host bridge from pci_bus prior to bus removal MIPS: pci-legacy: stop using of_pci_range_to_resource drm/i915/gvt: Fix error code in intel_gvt_init_device() ASoC: ak5558: correct reset polarity i2c: sh7760: add IRQ check i2c: jz4780: add IRQ check i2c: emev2: add IRQ check i2c: cadence: add IRQ check RDMA/srpt: Fix error return code in srpt_cm_req_recv() net: thunderx: Fix unintentional sign extension issue IB/hfi1: Fix error return code in parse_platform_config() mt7601u: fix always true expression mac80211: bail out if cipher schemes are invalid powerpc: iommu: fix build when neither PCI or IBMVIO is set powerpc/perf: Fix PMU constraint check for EBB events powerpc/64s: Fix pte update for kernel memory on radix liquidio: Fix unintented sign extension of a left shift of a u16 ALSA: usb-audio: Add error checks for usb_driver_claim_interface() calls net: hns3: Limiting the scope of vector_ring_chain variable nfc: pn533: prevent potential memory corruption bug: Remove redundant condition check in report_bug ALSA: core: remove redundant spin_lock pair in snd_card_disconnect powerpc: Fix HAVE_HARDLOCKUP_DETECTOR_ARCH build configuration powerpc/prom: Mark identical_pvr_fixup as __init net: lapbether: Prevent racing when checking whether the netif is running perf symbols: Fix dso__fprintf_symbols_by_name() to return the number of printed chars HID: plantronics: Workaround for double volume key presses drivers/block/null_blk/main: Fix a double free in null_init. sched/debug: Fix cgroup_path[] serialization x86/events/amd/iommu: Fix sysfs type mismatch HSI: core: fix resource leaks in hsi_add_client_from_dt() mfd: stm32-timers: Avoid clearing auto reload register scsi: ibmvfc: Fix invalid state machine BUG_ON() scsi: sni_53c710: Add IRQ check scsi: sun3x_esp: Add IRQ check scsi: jazz_esp: Add IRQ check clk: uniphier: Fix potential infinite loop clk: qcom: a53-pll: Add missing MODULE_DEVICE_TABLE vfio/mdev: Do not allow a mdev_type to have a NULL parent pointer nvme: retrigger ANA log update if group descriptor isn't found ata: libahci_platform: fix IRQ check sata_mv: add IRQ checks pata_ipx4xx_cf: fix IRQ check pata_arasan_cf: fix IRQ check x86/kprobes: Fix to check non boostable prefixes correctly drm/amdkfd: fix build error with AMD_IOMMU_V2=m media: m88rs6000t: avoid potential out-of-bounds reads on arrays media: omap4iss: return error code when omap4iss_get() failed media: vivid: fix assignment of dev->fbuf_out_flags soc: aspeed: fix a ternary sign expansion bug ttyprintk: Add TTY hangup callback. usb: dwc2: Fix hibernation between host and device modes. usb: dwc2: Fix host mode hibernation exit with remote wakeup flow. Drivers: hv: vmbus: Increase wait time for VMbus unload x86/platform/uv: Fix !KEXEC build failure platform/x86: pmc_atom: Match all Beckhoff Automation baytrail boards with critclk_systems DMI table usbip: vudc: fix missing unlock on error in usbip_sockfd_store() firmware: qcom-scm: Fix QCOM_SCM configuration tty: fix return value for unsupported ioctls tty: actually undefine superseded ASYNC flags USB: cdc-acm: fix unprivileged TIOCCSERIAL usb: gadget: r8a66597: Add missing null check on return from platform_get_resource cpufreq: armada-37xx: Fix determining base CPU frequency cpufreq: armada-37xx: Fix driver cleanup when registration failed clk: mvebu: armada-37xx-periph: Fix workaround for switching from L1 to L0 clk: mvebu: armada-37xx-periph: Fix switching CPU freq from 250 Mhz to 1 GHz cpufreq: armada-37xx: Fix the AVS value for load L1 clk: mvebu: armada-37xx-periph: remove .set_parent method for CPU PM clock cpufreq: armada-37xx: Fix setting TBG parent for load levels crypto: qat - Fix a double free in adf_create_ring ACPI: CPPC: Replace cppc_attr with kobj_attribute soc: qcom: mdt_loader: Detect truncated read of segments soc: qcom: mdt_loader: Validate that p_filesz < p_memsz spi: Fix use-after-free with devm_spi_alloc_* staging: greybus: uart: fix unprivileged TIOCCSERIAL staging: rtl8192u: Fix potential infinite loop irqchip/gic-v3: Fix OF_BAD_ADDR error handling mtd: rawnand: gpmi: Fix a double free in gpmi_nand_init soundwire: stream: fix memory leak in stream config error path USB: gadget: udc: fix wrong pointer passed to IS_ERR() and PTR_ERR() usb: gadget: aspeed: fix dma map failure crypto: qat - fix error path in adf_isr_resource_alloc() phy: marvell: ARMADA375_USBCLUSTER_PHY should not default to y, unconditionally soundwire: bus: Fix device found flag correctly bus: qcom: Put child node before return mtd: require write permissions for locking and badblock ioctls fotg210-udc: Complete OUT requests on short packets fotg210-udc: Don't DMA more than the buffer can take fotg210-udc: Mask GRP2 interrupts we don't handle fotg210-udc: Remove a dubious condition leading to fotg210_done fotg210-udc: Fix EP0 IN requests bigger than two packets fotg210-udc: Fix DMA on EP0 for length > max packet size crypto: qat - ADF_STATUS_PF_RUNNING should be set after adf_dev_init crypto: qat - don't release uninitialized resources usb: gadget: pch_udc: Check for DMA mapping error usb: gadget: pch_udc: Check if driver is present before calling ->setup() usb: gadget: pch_udc: Replace cpu_to_le32() by lower_32_bits() x86/microcode: Check for offline CPUs before requesting new microcode mtd: rawnand: qcom: Return actual error code instead of -ENODEV mtd: Handle possible -EPROBE_DEFER from parse_mtd_partitions() mtd: rawnand: brcmnand: fix OOB R/W with Hamming ECC mtd: rawnand: fsmc: Fix error code in fsmc_nand_probe() regmap: set debugfs_name to NULL after it is freed usb: typec: tcpci: Check ROLE_CONTROL while interpreting CC_STATUS serial: stm32: fix tx_empty condition serial: stm32: fix incorrect characters on console ARM: dts: exynos: correct PMIC interrupt trigger level on Snow ARM: dts: exynos: correct PMIC interrupt trigger level on SMDK5250 ARM: dts: exynos: correct PMIC interrupt trigger level on Odroid X/U3 family ARM: dts: exynos: correct PMIC interrupt trigger level on Midas family ARM: dts: exynos: correct MUIC interrupt trigger level on Midas family ARM: dts: exynos: correct fuel gauge interrupt trigger level on Midas family memory: gpmc: fix out of bounds read and dereference on gpmc_cs[] usb: gadget: pch_udc: Revertd3cb25a121
completely ovl: fix missing revert_creds() on error path KVM: s390: split kvm_s390_real_to_abs KVM: s390: fix guarded storage control register handling KVM: s390: split kvm_s390_logical_to_effective x86/cpu: Initialize MSR_TSC_AUX if RDTSCP *or* RDPID is supported ALSA: hda/realtek: Remove redundant entry for ALC861 Haier/Uniwill devices ALSA: hda/realtek: Re-order ALC269 Lenovo quirk table entries ALSA: hda/realtek: Re-order ALC269 Sony quirk table entries ALSA: hda/realtek: Re-order ALC269 Dell quirk table entries ALSA: hda/realtek: Re-order ALC269 HP quirk table entries ALSA: hda/realtek: Re-order ALC882 Clevo quirk table entries ALSA: hda/realtek: Re-order ALC882 Sony quirk table entries ALSA: hda/realtek: Re-order ALC882 Acer quirk table entries drm/radeon: fix copy of uninitialized variable back to userspace cfg80211: scan: drop entry from hidden_list on overflow ipw2x00: potential buffer overflow in libipw_wx_set_encodeext() md: Fix missing unused status line of /proc/mdstat md: md_open returns -EBUSY when entering racing area md: factor out a mddev_find_locked helper from mddev_find md: split mddev_find md-cluster: fix use-after-free issue when removing rdev md/bitmap: wait for external bitmap writes to complete during tear down misc: vmw_vmci: explicitly initialize vmci_datagram payload misc: vmw_vmci: explicitly initialize vmci_notify_bm_set_msg struct misc: lis3lv02d: Fix false-positive WARN on various HP models iio:accel:adis16201: Fix wrong axis assignment that prevents loading FDDI: defxx: Bail out gracefully with unassigned PCI resource for CSR MIPS: pci-rt2880: fix slot 0 configuration MIPS: pci-mt7620: fix PLL lock check ASoC: samsung: tm2_wm5110: check of of_parse return value net/nfc: fix use-after-free llcp_sock_bind/connect bluetooth: eliminate the potential race condition when removing the HCI controller hsr: use netdev_err() instead of WARN_ONCE() Bluetooth: verify AMP hci_chan before amp_destroy modules: inherit TAINT_PROPRIETARY_MODULE modules: return licensing information from find_symbol modules: rename the licence field in struct symsearch to license modules: unexport __module_address modules: unexport __module_text_address modules: mark each_symbol_section static modules: mark find_symbol static modules: mark ref_module static dm rq: fix double free of blk_mq_tag_set in dev remove after table load fails dm space map common: fix division bug in sm_ll_find_free_block() dm persistent data: packed struct should have an aligned() attribute too tracing: Restructure trace_clock_global() to never block tracing: Map all PIDs to command lines rsi: Use resume_noirq for SDIO tty: fix memory leak in vc_deallocate usb: dwc2: Fix session request interrupt handler usb: dwc3: gadget: Fix START_TRANSFER link state check usb: gadget/function/f_fs string table fix for multiple languages usb: gadget: Fix double free of device descriptor pointers usb: gadget: dummy_hcd: fix gpf in gadget_setup media: dvbdev: Fix memory leak in dvb_media_device_free() ext4: fix error code in ext4_commit_super ext4: do not set SB_ACTIVE in ext4_orphan_cleanup() ext4: fix check to prevent false positive report of incorrect used inodes arm64: vdso: remove commas between macro name and arguments posix-timers: Preserve return value in clock_adjtime32() Revert337f13046f
("futex: Allow FUTEX_CLOCK_REALTIME with FUTEX_WAIT op") jffs2: check the validity of dstlen in jffs2_zlib_compress() Fix misc new gcc warnings security: commoncap: fix -Wstringop-overread warning dm raid: fix inconclusive reshape layout on fast raid4/5/6 table reload sequences md/raid1: properly indicate failure when ending a failed write request tpm: vtpm_proxy: Avoid reading host log when using a virtual device intel_th: pci: Add Alder Lake-M support powerpc: fix EDEADLOCK redefinition error in uapi/asm/errno.h powerpc/eeh: Fix EEH handling for hugepages in ioremap space. jffs2: Fix kasan slab-out-of-bounds problem NFSv4: Don't discard segments marked for return in _pnfs_return_layout() NFS: Don't discard pNFS layout segments that are marked for return ACPI: GTDT: Don't corrupt interrupt mappings on watchdow probe failure openvswitch: fix stack OOB read while fragmenting IPv4 packets mlxsw: spectrum_mr: Update egress RIF list before route's action f2fs: fix to avoid out-of-bounds memory access ubifs: Only check replay with inode type to judge if inode linked arm64/vdso: Discard .note.gnu.property sections in vDSO btrfs: fix race when picking most recent mod log operation for an old root ALSA: hda/realtek: Add quirk for Intel Clevo PCx0Dx ALSA: usb-audio: Add dB range mapping for Sennheiser Communications Headset PC 8 ALSA: usb-audio: More constifications ALSA: usb-audio: Explicitly set up the clock selector ALSA: sb: Fix two use after free in snd_sb_qsound_build ALSA: hda/conexant: Re-order CX5066 quirk table entries ALSA: emu8000: Fix a use after free in snd_emu8000_create_mixer s390/archrandom: add parameter check for s390_arch_random_generate scsi: libfc: Fix a format specifier scsi: lpfc: Remove unsupported mbox PORT_CAPABILITIES logic scsi: lpfc: Fix crash when a REG_RPI mailbox fails triggering a LOGO response drm/amdgpu: fix NULL pointer dereference amdgpu: avoid incorrect %hu format string drm/msm/mdp5: Configure PP_SYNC_HEIGHT to double the vtotal media: gscpa/stv06xx: fix memory leak media: dvb-usb: fix memory leak in dvb_usb_adapter_init media: i2c: adv7842: fix possible use-after-free in adv7842_remove() media: i2c: adv7511-v4l2: fix possible use-after-free in adv7511_remove() media: adv7604: fix possible use-after-free in adv76xx_remove() media: tc358743: fix possible use-after-free in tc358743_remove() power: supply: s3c_adc_battery: fix possible use-after-free in s3c_adc_bat_remove() power: supply: generic-adc-battery: fix possible use-after-free in gab_remove() clk: socfpga: arria10: Fix memory leak of socfpga_clk on error return media: vivid: update EDID media: em28xx: fix memory leak scsi: scsi_dh_alua: Remove check for ASC 24h in alua_rtpg() scsi: qla2xxx: Fix use after free in bsg scsi: qla2xxx: Always check the return value of qla24xx_get_isp_stats() drm/amdgpu : Fix asic reset regression issue introduce by 8f211fe8ac7c4f power: supply: Use IRQF_ONESHOT media: gspca/sq905.c: fix uninitialized variable media: media/saa7164: fix saa7164_encoder_register() memory leak bugs extcon: arizona: Fix some issues when HPDET IRQ fires after the jack has been unplugged power: supply: bq27xxx: fix power_avg for newer ICs media: drivers: media: pci: sta2x11: fix Kconfig dependency on GPIOLIB media: ite-cir: check for receive overflow scsi: target: pscsi: Fix warning in pscsi_complete_cmd() scsi: lpfc: Fix pt2pt connection does not recover after LOGO scsi: lpfc: Fix incorrect dbde assignment when building target abts wqe btrfs: convert logic BUG_ON()'s in replace_path to ASSERT()'s phy: phy-twl4030-usb: Fix possible use-after-free in twl4030_usb_remove() intel_th: Consistency and off-by-one fix spi: omap-100k: Fix reference leak to master spi: dln2: Fix reference leak to master xhci: fix potential array out of bounds with several interrupters xhci: check control context is valid before dereferencing it. usb: xhci-mtk: support quirk to disable usb2 lpm perf/arm_pmu_platform: Fix error handling tee: optee: do not check memref size on return from Secure World x86/build: Propagate $(CLANG_FLAGS) to $(REALMODE_FLAGS) PCI: PM: Do not read power state in pci_enable_device_flags() usb: xhci: Fix port minor revision usb: dwc3: gadget: Ignore EP queue requests during bus reset usb: gadget: f_uac1: validate input parameters genirq/matrix: Prevent allocation counter corruption usb: gadget: uvc: add bInterval checking for HS mode crypto: api - check for ERR pointers in crypto_destroy_tfm() staging: wimax/i2400m: fix byte-order issue fbdev: zero-fill colormap in fbcmap.c intel_th: pci: Add Rocket Lake CPU support btrfs: fix metadata extent leak after failure to create subvolume cifs: Return correct error code from smb2_get_enc_key erofs: add unsupported inode i_format check mmc: core: Set read only for SD cards with permanent write protect bit mmc: core: Do a power cycle when the CMD11 fails mmc: block: Issue a cache flush only when it's enabled mmc: block: Update ext_csd.cache_ctrl if it was written mmc: sdhci-pci: Fix initialization of some SD cards for Intel BYT-based controllers scsi: qla2xxx: Fix crash in qla2xxx_mqueuecommand() spi: spi-ti-qspi: Free DMA resources mtd: rawnand: atmel: Update ecc_stats.corrected counter mtd: spinand: core: add missing MODULE_DEVICE_TABLE() ecryptfs: fix kernel panic with null dev_name arm64: dts: mt8173: fix property typo of 'phys' in dsi node arm64: dts: marvell: armada-37xx: add syscon compatible to NB clk node ARM: 9056/1: decompressor: fix BSS size calculation for LLVM ld.lld ftrace: Handle commands when closing set_ftrace_filter file ACPI: custom_method: fix a possible memory leak ACPI: custom_method: fix potential use-after-free issue s390/disassembler: increase ebpf disasm buffer size BACKPORT: arm64: vdso32: drop -no-integrated-as flag ANDROID: GKI: update allowed list for incrementalfs.ko ANDROID: dm-user: Drop additional reference ANDROID: FUSE OWNERS pointing to android-mainline OWNERS UPSTREAM: sched: Fix out-of-bound access in uclamp Linux 4.19.190 ovl: allow upperdir inside lowerdir platform/x86: thinkpad_acpi: Correct thermal sensor allocation USB: Add reset-resume quirk for WD19's Realtek Hub USB: Add LPM quirk for Lenovo ThinkPad USB-C Dock Gen2 Ethernet ALSA: usb-audio: Add MIDI quirk for Vox ToneLab EX iwlwifi: Fix softirq/hardirq disabling in iwl_pcie_gen2_enqueue_hcmd() bpf: Fix masking negation logic upon negative dst register mips: Do not include hi and lo in clobber list for R6 iwlwifi: Fix softirq/hardirq disabling in iwl_pcie_enqueue_hcmd() net: usb: ax88179_178a: initialize local variables before use ACPI: x86: Call acpi_boot_table_init() after acpi_table_upgrade() ACPI: tables: x86: Reserve memory occupied by ACPI tables erofs: fix extended inode could cross boundary BACKPORT: FROMGIT: virt_wifi: Return micros for BSS TSF values Change-Id: I84cac05396bbdf22ad69fbdbdce8480aafb8347b Signed-off-by: UtsavBalar1231 <utsavbalar1231@gmail.com> Conflicts: drivers/mmc/core/core.h drivers/mmc/core/mmc.c drivers/mmc/core/mmc_ops.c drivers/usb/core/hub.c drivers/usb/dwc3/gadget.c
This commit is contained in:
commit
6f8c7ff4c7
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/perl
|
||||
#!/usr/bin/env perl
|
||||
use strict;
|
||||
use Text::Tabs;
|
||||
use Getopt::Long;
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python
|
||||
#!/usr/bin/env python
|
||||
# The TCM v4 multi-protocol fabric module generation script for drivers/target/$NEW_MOD
|
||||
#
|
||||
# Copyright (c) 2010 Rising Tide Systems
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python
|
||||
#!/usr/bin/env python
|
||||
# add symbolic names to read_msr / write_msr in trace
|
||||
# decode_msr msr-index.h < trace
|
||||
import sys
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/perl
|
||||
#!/usr/bin/env perl
|
||||
# This is a POC (proof of concept or piece of crap, take your pick) for reading the
|
||||
# text representation of trace output related to page allocation. It makes an attempt
|
||||
# to extract some high-level information on what is going on. The accuracy of the parser
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/perl
|
||||
#!/usr/bin/env perl
|
||||
# This is a POC for reading the text representation of trace output related to
|
||||
# page reclaim. It makes an attempt to extract some high-level information on
|
||||
# what is going on. The accuracy of the parser may vary
|
||||
|
2
Makefile
2
Makefile
@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 4
|
||||
PATCHLEVEL = 19
|
||||
SUBLEVEL = 189
|
||||
SUBLEVEL = 193
|
||||
EXTRAVERSION =
|
||||
NAME = "People's Front"
|
||||
|
||||
|
@ -2284,6 +2284,7 @@
|
||||
<elf-symbol name='sysfs_create_group' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2a0c8109'/>
|
||||
<elf-symbol name='sysfs_create_groups' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5c35623'/>
|
||||
<elf-symbol name='sysfs_create_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x18320d4b'/>
|
||||
<elf-symbol name='sysfs_emit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x80b14da5'/>
|
||||
<elf-symbol name='sysfs_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe7e1288'/>
|
||||
<elf-symbol name='sysfs_remove_bin_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e09439d'/>
|
||||
<elf-symbol name='sysfs_remove_file_ns' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9805d77f'/>
|
||||
@ -10815,7 +10816,7 @@
|
||||
<var-decl name='module' type-id='7a2c185b' visibility='default' filepath='kernel/audit.h' line='205' column='1'/>
|
||||
</data-member>
|
||||
</union-decl>
|
||||
<union-decl name='__anonymous_union__13' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/cred.h' line='154' column='1' id='0a97cc35'>
|
||||
<union-decl name='__anonymous_union__8' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/cred.h' line='154' column='1' id='0a97cc35'>
|
||||
<data-member access='public'>
|
||||
<var-decl name='non_rcu' type-id='95e97e5e' visibility='default' filepath='include/linux/cred.h' line='155' column='1'/>
|
||||
</data-member>
|
||||
@ -16680,7 +16681,7 @@
|
||||
<var-decl name='__rcu_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/iocontext.h' line='89' column='1'/>
|
||||
</data-member>
|
||||
</union-decl>
|
||||
<union-decl name='__anonymous_union__36' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='1176' column='1' id='adf5bf47'>
|
||||
<union-decl name='__anonymous_union__35' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='1176' column='1' id='adf5bf47'>
|
||||
<data-member access='public'>
|
||||
<var-decl name='hashinfo' type-id='d7a1e3c2' visibility='default' filepath='include/net/sock.h' line='1177' column='1'/>
|
||||
</data-member>
|
||||
@ -16694,7 +16695,7 @@
|
||||
<var-decl name='smc_hash' type-id='aa8162a3' visibility='default' filepath='include/net/sock.h' line='1180' column='1'/>
|
||||
</data-member>
|
||||
</union-decl>
|
||||
<union-decl name='__anonymous_union__12' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='214' column='1' id='d5d77d48'>
|
||||
<union-decl name='__anonymous_union__7' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='214' column='1' id='d5d77d48'>
|
||||
<data-member access='public'>
|
||||
<var-decl name='payload' type-id='2888d74a' visibility='default' filepath='include/linux/key.h' line='215' column='1'/>
|
||||
</data-member>
|
||||
@ -16702,7 +16703,7 @@
|
||||
<var-decl name='' type-id='607bacb1' visibility='default' filepath='include/linux/key.h' line='216' column='1'/>
|
||||
</data-member>
|
||||
</union-decl>
|
||||
<union-decl name='__anonymous_union__11' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='202' column='1' id='5446e20e'>
|
||||
<union-decl name='__anonymous_union__6' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='202' column='1' id='5446e20e'>
|
||||
<data-member access='public'>
|
||||
<var-decl name='index_key' type-id='16ab8749' visibility='default' filepath='include/linux/key.h' line='203' column='1'/>
|
||||
</data-member>
|
||||
@ -16718,7 +16719,7 @@
|
||||
<var-decl name='d_wait' type-id='03d48e96' visibility='default' filepath='include/linux/dcache.h' line='109' column='1'/>
|
||||
</data-member>
|
||||
</union-decl>
|
||||
<union-decl name='__anonymous_union__9' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='158' column='1' id='1a65b0a7'>
|
||||
<union-decl name='__anonymous_union__4' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='158' column='1' id='1a65b0a7'>
|
||||
<data-member access='public'>
|
||||
<var-decl name='graveyard_link' type-id='72f469ec' visibility='default' filepath='include/linux/key.h' line='159' column='1'/>
|
||||
</data-member>
|
||||
@ -16773,7 +16774,7 @@
|
||||
<var-decl name='insnsi' type-id='b50399da' visibility='default' filepath='include/linux/filter.h' line='504' column='1'/>
|
||||
</data-member>
|
||||
</union-decl>
|
||||
<union-decl name='__anonymous_union__10' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='165' column='1' id='21f0eb77'>
|
||||
<union-decl name='__anonymous_union__5' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='165' column='1' id='21f0eb77'>
|
||||
<data-member access='public'>
|
||||
<var-decl name='expiry' type-id='1afd27ac' visibility='default' filepath='include/linux/key.h' line='166' column='1'/>
|
||||
</data-member>
|
||||
@ -22473,7 +22474,7 @@
|
||||
<var-decl name='lower' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='1814' column='1'/>
|
||||
</data-member>
|
||||
</class-decl>
|
||||
<class-decl name='__anonymous_struct__3' size-in-bits='768' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/slab.h' line='641' column='1' id='26b3aff0'>
|
||||
<class-decl name='__anonymous_struct__4' size-in-bits='768' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/slab.h' line='641' column='1' id='26b3aff0'>
|
||||
<data-member access='public' layout-offset-in-bits='0'>
|
||||
<var-decl name='memcg' type-id='223696fb' visibility='default' filepath='include/linux/slab.h' line='642' column='1'/>
|
||||
</data-member>
|
||||
@ -22490,7 +22491,7 @@
|
||||
<var-decl name='' type-id='655b0d99' visibility='default' filepath='include/linux/slab.h' line='647' column='1'/>
|
||||
</data-member>
|
||||
</class-decl>
|
||||
<class-decl name='__anonymous_struct__2' size-in-bits='384' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/slab.h' line='635' column='1' id='22e2627b'>
|
||||
<class-decl name='__anonymous_struct__3' size-in-bits='384' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/slab.h' line='635' column='1' id='22e2627b'>
|
||||
<data-member access='public' layout-offset-in-bits='0'>
|
||||
<var-decl name='memcg_caches' type-id='2c8ce02f' visibility='default' filepath='include/linux/slab.h' line='636' column='1'/>
|
||||
</data-member>
|
||||
@ -28582,7 +28583,7 @@
|
||||
<array-type-def dimensions='1' type-id='19c2251e' size-in-bits='256' id='1c6311dd'>
|
||||
<subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
|
||||
</array-type-def>
|
||||
<union-decl name='__anonymous_union__13' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/inet_hashtables.h' line='118' column='1' id='ba169a6c'>
|
||||
<union-decl name='__anonymous_union__14' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/inet_hashtables.h' line='118' column='1' id='ba169a6c'>
|
||||
<data-member access='public'>
|
||||
<var-decl name='head' type-id='e151255a' visibility='default' filepath='include/net/inet_hashtables.h' line='119' column='1'/>
|
||||
</data-member>
|
||||
@ -40844,6 +40845,17 @@
|
||||
</class-decl>
|
||||
<typedef-decl name='compat_uptr_t' type-id='19c2251e' filepath='arch/arm64/include/asm/compat.h' line='66' column='1' id='782d78af'/>
|
||||
<typedef-decl name='compat_long_t' type-id='a7832498' filepath='arch/arm64/include/asm/compat.h' line='60' column='1' id='abb906de'/>
|
||||
<union-decl name='__anonymous_union__21' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/dcache.h' line='154' column='1' id='ecf138a1'>
|
||||
<data-member access='public'>
|
||||
<var-decl name='d_canonical_path' type-id='8581ac2b' visibility='default' filepath='include/linux/dcache.h' line='154' column='1'/>
|
||||
</data-member>
|
||||
<data-member access='public'>
|
||||
<var-decl name='__UNIQUE_ID_android_kabi_hide67' type-id='156952c4' visibility='default' filepath='include/linux/dcache.h' line='154' column='1'/>
|
||||
</data-member>
|
||||
<data-member access='public'>
|
||||
<var-decl name='' type-id='2a125a28' visibility='default' filepath='include/linux/dcache.h' line='154' column='1'/>
|
||||
</data-member>
|
||||
</union-decl>
|
||||
<pointer-type-def type-id='85c22421' size-in-bits='64' id='ee406209'/>
|
||||
<pointer-type-def type-id='830ee0a7' size-in-bits='64' id='5d3a884e'/>
|
||||
<pointer-type-def type-id='3b5c61ad' size-in-bits='64' id='a38aafde'/>
|
||||
@ -52855,7 +52867,7 @@
|
||||
<var-decl name='nh' type-id='708c2394' visibility='default' filepath='include/drm/drm_panel.h' line='122' column='1'/>
|
||||
</data-member>
|
||||
</class-decl>
|
||||
<class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/drm/drm_device.h' line='205' column='1' id='76c13bb3'>
|
||||
<class-decl name='__anonymous_struct__1' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/drm/drm_device.h' line='205' column='1' id='76c13bb3'>
|
||||
<data-member access='public' layout-offset-in-bits='0'>
|
||||
<var-decl name='context' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_device.h' line='206' column='1'/>
|
||||
</data-member>
|
||||
@ -54478,7 +54490,7 @@
|
||||
<var-decl name='skip_vt_switch' type-id='b50a4934' visibility='default' filepath='include/linux/fb.h' line='530' column='1'/>
|
||||
</data-member>
|
||||
</class-decl>
|
||||
<class-decl name='__anonymous_struct__1' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/drm/drm_connector.h' line='399' column='1' id='34ac2cf8'>
|
||||
<class-decl name='__anonymous_struct__2' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/drm/drm_connector.h' line='399' column='1' id='34ac2cf8'>
|
||||
<data-member access='public' layout-offset-in-bits='0'>
|
||||
<var-decl name='left' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='400' column='1'/>
|
||||
</data-member>
|
||||
@ -58165,7 +58177,7 @@
|
||||
<enumerator name='NOT_SUPPORTED' value='0'/>
|
||||
<enumerator name='SUPPORTED' value='1'/>
|
||||
</enum-decl>
|
||||
<class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/drm/drm_device.h' line='205' column='1' id='76c13bb3'>
|
||||
<class-decl name='__anonymous_struct__1' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/drm/drm_device.h' line='205' column='1' id='76c13bb3'>
|
||||
<data-member access='public' layout-offset-in-bits='0'>
|
||||
<var-decl name='context' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_device.h' line='206' column='1'/>
|
||||
</data-member>
|
||||
@ -59778,7 +59790,7 @@
|
||||
<enumerator name='DRM_MODE_SUBCONNECTOR_Component' value='8'/>
|
||||
<enumerator name='DRM_MODE_SUBCONNECTOR_SCART' value='9'/>
|
||||
</enum-decl>
|
||||
<class-decl name='__anonymous_struct__1' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/drm/drm_connector.h' line='399' column='1' id='34ac2cf8'>
|
||||
<class-decl name='__anonymous_struct__2' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/drm/drm_connector.h' line='399' column='1' id='34ac2cf8'>
|
||||
<data-member access='public' layout-offset-in-bits='0'>
|
||||
<var-decl name='left' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='400' column='1'/>
|
||||
</data-member>
|
||||
@ -62625,6 +62637,17 @@
|
||||
<array-type-def dimensions='1' type-id='2a455b43' size-in-bits='7360' id='6fd035e6'>
|
||||
<subrange length='23' type-id='7ff19f0f' id='fdd0f594'/>
|
||||
</array-type-def>
|
||||
<union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/dcache.h' line='154' column='1' id='be592189'>
|
||||
<data-member access='public'>
|
||||
<var-decl name='d_canonical_path' type-id='8581ac2b' visibility='default' filepath='include/linux/dcache.h' line='154' column='1'/>
|
||||
</data-member>
|
||||
<data-member access='public'>
|
||||
<var-decl name='__UNIQUE_ID_android_kabi_hide34' type-id='156952c4' visibility='default' filepath='include/linux/dcache.h' line='154' column='1'/>
|
||||
</data-member>
|
||||
<data-member access='public'>
|
||||
<var-decl name='' type-id='2a125a28' visibility='default' filepath='include/linux/dcache.h' line='154' column='1'/>
|
||||
</data-member>
|
||||
</union-decl>
|
||||
<class-decl name='drm_lock_data' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/drm/drm_auth.h' line='37' column='1' id='7e19749d'>
|
||||
<data-member access='public' layout-offset-in-bits='0'>
|
||||
<var-decl name='hw_lock' type-id='19248fba' visibility='default' filepath='include/drm/drm_auth.h' line='38' column='1'/>
|
||||
@ -67913,17 +67936,6 @@
|
||||
</function-decl>
|
||||
</abi-instr>
|
||||
<abi-instr address-size='64' path='drivers/input/evdev.c' language='LANG_C89'>
|
||||
<union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/dcache.h' line='154' column='1' id='be592189'>
|
||||
<data-member access='public'>
|
||||
<var-decl name='d_canonical_path' type-id='8581ac2b' visibility='default' filepath='include/linux/dcache.h' line='154' column='1'/>
|
||||
</data-member>
|
||||
<data-member access='public'>
|
||||
<var-decl name='__UNIQUE_ID_android_kabi_hide34' type-id='156952c4' visibility='default' filepath='include/linux/dcache.h' line='154' column='1'/>
|
||||
</data-member>
|
||||
<data-member access='public'>
|
||||
<var-decl name='' type-id='2a125a28' visibility='default' filepath='include/linux/dcache.h' line='154' column='1'/>
|
||||
</data-member>
|
||||
</union-decl>
|
||||
<function-decl name='cdev_init' mangled-name='cdev_init' filepath='include/linux/cdev.h' line='23' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cdev_init'>
|
||||
<parameter type-id='3e6eb939'/>
|
||||
<parameter type-id='61758ee5'/>
|
||||
@ -73085,7 +73097,7 @@
|
||||
<array-type-def dimensions='1' type-id='fa0b179b' size-in-bits='512' id='f6e5abef'>
|
||||
<subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
|
||||
</array-type-def>
|
||||
<union-decl name='__anonymous_union__6' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/videobuf2-core.h' line='179' column='1' id='07aa0de4'>
|
||||
<union-decl name='__anonymous_union__9' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/videobuf2-core.h' line='179' column='1' id='07aa0de4'>
|
||||
<data-member access='public'>
|
||||
<var-decl name='offset' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='180' column='1'/>
|
||||
</data-member>
|
||||
@ -74561,7 +74573,7 @@
|
||||
<var-decl name='p' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-ctrls.h' line='52' column='1'/>
|
||||
</data-member>
|
||||
</union-decl>
|
||||
<union-decl name='__anonymous_union__5' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='227' column='1' id='87415f3a'>
|
||||
<union-decl name='__anonymous_union__8' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='227' column='1' id='87415f3a'>
|
||||
<data-member access='public'>
|
||||
<var-decl name='qmenu' type-id='13956559' visibility='default' filepath='include/media/v4l2-ctrls.h' line='228' column='1'/>
|
||||
</data-member>
|
||||
@ -74569,7 +74581,7 @@
|
||||
<var-decl name='qmenu_int' type-id='43ae54cf' visibility='default' filepath='include/media/v4l2-ctrls.h' line='229' column='1'/>
|
||||
</data-member>
|
||||
</union-decl>
|
||||
<union-decl name='__anonymous_union__4' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='223' column='1' id='b91b9370'>
|
||||
<union-decl name='__anonymous_union__7' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='223' column='1' id='b91b9370'>
|
||||
<data-member access='public'>
|
||||
<var-decl name='step' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='224' column='1'/>
|
||||
</data-member>
|
||||
@ -78661,7 +78673,7 @@
|
||||
<parameter type-id='6ec0fd31'/>
|
||||
<return type-id='48b5725f'/>
|
||||
</function-type>
|
||||
<union-decl name='__anonymous_union__8' size-in-bits='512' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2249' column='1' id='454ee2bf'>
|
||||
<union-decl name='__anonymous_union__10' size-in-bits='512' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2249' column='1' id='454ee2bf'>
|
||||
<data-member access='public'>
|
||||
<var-decl name='vsync' type-id='cbe6daf0' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2250' column='1'/>
|
||||
</data-member>
|
||||
@ -78737,7 +78749,7 @@
|
||||
<var-decl name='field' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2200' column='1'/>
|
||||
</data-member>
|
||||
</class-decl>
|
||||
<union-decl name='__anonymous_union__9' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2211' column='1' id='de5442d3'>
|
||||
<union-decl name='__anonymous_union__11' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2211' column='1' id='de5442d3'>
|
||||
<data-member access='public'>
|
||||
<var-decl name='value' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2212' column='1'/>
|
||||
</data-member>
|
||||
@ -79029,7 +79041,7 @@
|
||||
<enumerator name='V4L2_CTRL_TYPE_U16' value='257'/>
|
||||
<enumerator name='V4L2_CTRL_TYPE_U32' value='258'/>
|
||||
</enum-decl>
|
||||
<union-decl name='__anonymous_union__4' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='223' column='1' id='b91b9370'>
|
||||
<union-decl name='__anonymous_union__7' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='223' column='1' id='b91b9370'>
|
||||
<data-member access='public'>
|
||||
<var-decl name='step' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='224' column='1'/>
|
||||
</data-member>
|
||||
@ -79037,7 +79049,7 @@
|
||||
<var-decl name='menu_skip_mask' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='225' column='1'/>
|
||||
</data-member>
|
||||
</union-decl>
|
||||
<union-decl name='__anonymous_union__5' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='227' column='1' id='87415f3a'>
|
||||
<union-decl name='__anonymous_union__8' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='227' column='1' id='87415f3a'>
|
||||
<data-member access='public'>
|
||||
<var-decl name='qmenu' type-id='13956559' visibility='default' filepath='include/media/v4l2-ctrls.h' line='228' column='1'/>
|
||||
</data-member>
|
||||
@ -79152,7 +79164,7 @@
|
||||
<var-decl name='data_offset' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='184' column='1'/>
|
||||
</data-member>
|
||||
</class-decl>
|
||||
<union-decl name='__anonymous_union__6' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/videobuf2-core.h' line='179' column='1' id='07aa0de4'>
|
||||
<union-decl name='__anonymous_union__9' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/videobuf2-core.h' line='179' column='1' id='07aa0de4'>
|
||||
<data-member access='public'>
|
||||
<var-decl name='offset' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='180' column='1'/>
|
||||
</data-member>
|
||||
@ -79264,7 +79276,7 @@
|
||||
<var-decl name='reserved' type-id='7f84eb57' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2261' column='1'/>
|
||||
</data-member>
|
||||
</class-decl>
|
||||
<union-decl name='__anonymous_union__8' size-in-bits='512' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2249' column='1' id='454ee2bf'>
|
||||
<union-decl name='__anonymous_union__10' size-in-bits='512' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2249' column='1' id='454ee2bf'>
|
||||
<data-member access='public'>
|
||||
<var-decl name='vsync' type-id='cbe6daf0' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2250' column='1'/>
|
||||
</data-member>
|
||||
@ -79315,7 +79327,7 @@
|
||||
<var-decl name='default_value' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2219' column='1'/>
|
||||
</data-member>
|
||||
</class-decl>
|
||||
<union-decl name='__anonymous_union__9' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2211' column='1' id='de5442d3'>
|
||||
<union-decl name='__anonymous_union__11' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2211' column='1' id='de5442d3'>
|
||||
<data-member access='public'>
|
||||
<var-decl name='value' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2212' column='1'/>
|
||||
</data-member>
|
||||
@ -87549,7 +87561,7 @@
|
||||
<enumerator name='PIN_MAP_TYPE_CONFIGS_PIN' value='3'/>
|
||||
<enumerator name='PIN_MAP_TYPE_CONFIGS_GROUP' value='4'/>
|
||||
</enum-decl>
|
||||
<union-decl name='__anonymous_union__' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/pinctrl/machine.h' line='73' column='1' id='2789d524'>
|
||||
<union-decl name='__anonymous_union__1' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/pinctrl/machine.h' line='73' column='1' id='2789d524'>
|
||||
<data-member access='public'>
|
||||
<var-decl name='mux' type-id='ad4dd73d' visibility='default' filepath='include/linux/pinctrl/machine.h' line='74' column='1'/>
|
||||
</data-member>
|
||||
@ -107317,6 +107329,12 @@
|
||||
<parameter type-id='cd733e18' name='ptr' filepath='fs/sysfs/file.c' line='499' column='1'/>
|
||||
<return type-id='48b5725f'/>
|
||||
</function-decl>
|
||||
<function-decl name='sysfs_emit' mangled-name='sysfs_emit' filepath='fs/sysfs/file.c' line='572' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_emit'>
|
||||
<parameter type-id='26a90f95' name='buf' filepath='fs/sysfs/file.c' line='572' column='1'/>
|
||||
<parameter type-id='80f4b756' name='fmt' filepath='fs/sysfs/file.c' line='572' column='1'/>
|
||||
<parameter is-variadic='yes'/>
|
||||
<return type-id='95e97e5e'/>
|
||||
</function-decl>
|
||||
<pointer-type-def type-id='be65923c' size-in-bits='64' id='cfe4f8a2'/>
|
||||
<qualified-type-def type-id='a6222917' const='yes' id='be65923c'/>
|
||||
</abi-instr>
|
||||
@ -125870,7 +125888,7 @@
|
||||
<var-decl name='' type-id='26b3aff0' visibility='default' filepath='include/linux/slab.h' line='641' column='1'/>
|
||||
</data-member>
|
||||
</union-decl>
|
||||
<class-decl name='__anonymous_struct__2' size-in-bits='384' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/slab.h' line='635' column='1' id='22e2627b'>
|
||||
<class-decl name='__anonymous_struct__3' size-in-bits='384' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/slab.h' line='635' column='1' id='22e2627b'>
|
||||
<data-member access='public' layout-offset-in-bits='0'>
|
||||
<var-decl name='memcg_caches' type-id='2c8ce02f' visibility='default' filepath='include/linux/slab.h' line='636' column='1'/>
|
||||
</data-member>
|
||||
@ -125892,7 +125910,7 @@
|
||||
<var-decl name='entries' type-id='c66d33bc' visibility='default' filepath='include/linux/slab.h' line='596' column='1'/>
|
||||
</data-member>
|
||||
</class-decl>
|
||||
<class-decl name='__anonymous_struct__3' size-in-bits='768' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/slab.h' line='641' column='1' id='26b3aff0'>
|
||||
<class-decl name='__anonymous_struct__4' size-in-bits='768' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/slab.h' line='641' column='1' id='26b3aff0'>
|
||||
<data-member access='public' layout-offset-in-bits='0'>
|
||||
<var-decl name='memcg' type-id='223696fb' visibility='default' filepath='include/linux/slab.h' line='642' column='1'/>
|
||||
</data-member>
|
||||
@ -127737,7 +127755,7 @@
|
||||
<var-decl name='' type-id='ba169a6c' visibility='default' filepath='include/net/inet_hashtables.h' line='118' column='1'/>
|
||||
</data-member>
|
||||
</class-decl>
|
||||
<union-decl name='__anonymous_union__13' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/inet_hashtables.h' line='118' column='1' id='ba169a6c'>
|
||||
<union-decl name='__anonymous_union__14' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/inet_hashtables.h' line='118' column='1' id='ba169a6c'>
|
||||
<data-member access='public'>
|
||||
<var-decl name='head' type-id='e151255a' visibility='default' filepath='include/net/inet_hashtables.h' line='119' column='1'/>
|
||||
</data-member>
|
||||
|
@ -1445,6 +1445,7 @@
|
||||
simple_statfs
|
||||
strndup_user
|
||||
sync_filesystem
|
||||
sysfs_emit
|
||||
touch_atime
|
||||
truncate_inode_pages
|
||||
unlock_new_inode
|
||||
|
@ -169,7 +169,7 @@ tracesys:
|
||||
|
||||
; Do the Sys Call as we normally would.
|
||||
; Validate the Sys Call number
|
||||
cmp r8, NR_syscalls
|
||||
cmp r8, NR_syscalls - 1
|
||||
mov.hi r0, -ENOSYS
|
||||
bhi tracesys_exit
|
||||
|
||||
@ -252,7 +252,7 @@ ENTRY(EV_Trap)
|
||||
;============ Normal syscall case
|
||||
|
||||
; syscall num shd not exceed the total system calls avail
|
||||
cmp r8, NR_syscalls
|
||||
cmp r8, NR_syscalls - 1
|
||||
mov.hi r0, -ENOSYS
|
||||
bhi .Lret_from_system_call
|
||||
|
||||
|
@ -121,8 +121,8 @@ asflags-y := -DZIMAGE
|
||||
|
||||
# Supply kernel BSS size to the decompressor via a linker symbol.
|
||||
KBSS_SZ = $(shell echo $$(($$($(NM) $(obj)/../../../../vmlinux | \
|
||||
sed -n -e 's/^\([^ ]*\) [AB] __bss_start$$/-0x\1/p' \
|
||||
-e 's/^\([^ ]*\) [AB] __bss_stop$$/+0x\1/p') )) )
|
||||
sed -n -e 's/^\([^ ]*\) [ABD] __bss_start$$/-0x\1/p' \
|
||||
-e 's/^\([^ ]*\) [ABD] __bss_stop$$/+0x\1/p') )) )
|
||||
LDFLAGS_vmlinux = --defsym _kernel_bss_size=$(KBSS_SZ)
|
||||
# Supply ZRELADDR to the decompressor via a linker symbol.
|
||||
ifneq ($(CONFIG_AUTO_ZRELADDR),y)
|
||||
|
@ -139,7 +139,7 @@
|
||||
max77693@66 {
|
||||
compatible = "maxim,max77693";
|
||||
interrupt-parent = <&gpx1>;
|
||||
interrupts = <5 IRQ_TYPE_EDGE_FALLING>;
|
||||
interrupts = <5 IRQ_TYPE_LEVEL_LOW>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&max77693_irq>;
|
||||
reg = <0x66>;
|
||||
@ -187,7 +187,7 @@
|
||||
max77693-fuel-gauge@36 {
|
||||
compatible = "maxim,max17047";
|
||||
interrupt-parent = <&gpx2>;
|
||||
interrupts = <3 IRQ_TYPE_EDGE_FALLING>;
|
||||
interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&max77693_fuel_irq>;
|
||||
reg = <0x36>;
|
||||
@ -579,7 +579,7 @@
|
||||
max77686: max77686_pmic@9 {
|
||||
compatible = "maxim,max77686";
|
||||
interrupt-parent = <&gpx0>;
|
||||
interrupts = <7 IRQ_TYPE_NONE>;
|
||||
interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
|
||||
pinctrl-0 = <&max77686_irq>;
|
||||
pinctrl-names = "default";
|
||||
reg = <0x09>;
|
||||
|
@ -265,7 +265,7 @@
|
||||
max77686: pmic@9 {
|
||||
compatible = "maxim,max77686";
|
||||
interrupt-parent = <&gpx3>;
|
||||
interrupts = <2 IRQ_TYPE_NONE>;
|
||||
interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&max77686_irq>;
|
||||
reg = <0x09>;
|
||||
|
@ -132,7 +132,7 @@
|
||||
compatible = "maxim,max77686";
|
||||
reg = <0x09>;
|
||||
interrupt-parent = <&gpx3>;
|
||||
interrupts = <2 IRQ_TYPE_NONE>;
|
||||
interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&max77686_irq>;
|
||||
wakeup-source;
|
||||
|
@ -292,7 +292,7 @@
|
||||
max77686: max77686@9 {
|
||||
compatible = "maxim,max77686";
|
||||
interrupt-parent = <&gpx3>;
|
||||
interrupts = <2 IRQ_TYPE_NONE>;
|
||||
interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&max77686_irq>;
|
||||
wakeup-source;
|
||||
|
@ -513,7 +513,7 @@
|
||||
clocks = <&sys_clk 6>;
|
||||
reset-names = "ether";
|
||||
resets = <&sys_rst 6>;
|
||||
phy-mode = "rgmii";
|
||||
phy-mode = "rgmii-id";
|
||||
local-mac-address = [00 00 00 00 00 00];
|
||||
socionext,syscon-phy-mode = <&soc_glue 0>;
|
||||
|
||||
|
@ -303,6 +303,7 @@ static inline void kvm_arch_sched_in(struct kvm_vcpu *vcpu, int cpu) {}
|
||||
static inline void kvm_arch_vcpu_block_finish(struct kvm_vcpu *vcpu) {}
|
||||
|
||||
static inline void kvm_arm_init_debug(void) {}
|
||||
static inline void kvm_arm_vcpu_init_debug(struct kvm_vcpu *vcpu) {}
|
||||
static inline void kvm_arm_setup_debug(struct kvm_vcpu *vcpu) {}
|
||||
static inline void kvm_arm_clear_debug(struct kvm_vcpu *vcpu) {}
|
||||
static inline void kvm_arm_reset_debug_ptr(struct kvm_vcpu *vcpu) {}
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include <asm/vdso_datapage.h>
|
||||
#include <asm/hardware/cache-l2x0.h>
|
||||
#include <linux/kbuild.h>
|
||||
#include <linux/arm-smccc.h>
|
||||
#include "signal.h"
|
||||
|
||||
/*
|
||||
@ -159,6 +160,8 @@ int main(void)
|
||||
DEFINE(SLEEP_SAVE_SP_PHYS, offsetof(struct sleep_save_sp, save_ptr_stash_phys));
|
||||
DEFINE(SLEEP_SAVE_SP_VIRT, offsetof(struct sleep_save_sp, save_ptr_stash));
|
||||
#endif
|
||||
DEFINE(ARM_SMCCC_QUIRK_ID_OFFS, offsetof(struct arm_smccc_quirk, id));
|
||||
DEFINE(ARM_SMCCC_QUIRK_STATE_OFFS, offsetof(struct arm_smccc_quirk, state));
|
||||
BLANK();
|
||||
DEFINE(DMA_BIDIRECTIONAL, DMA_BIDIRECTIONAL);
|
||||
DEFINE(DMA_TO_DEVICE, DMA_TO_DEVICE);
|
||||
|
@ -891,7 +891,7 @@ static void breakpoint_handler(unsigned long unknown, struct pt_regs *regs)
|
||||
info->trigger = addr;
|
||||
pr_debug("breakpoint fired: address = 0x%x\n", addr);
|
||||
perf_bp_event(bp, regs);
|
||||
if (!bp->overflow_handler)
|
||||
if (is_default_overflow_handler(bp))
|
||||
enable_single_step(bp, addr);
|
||||
goto unlock;
|
||||
}
|
||||
|
@ -12,7 +12,9 @@
|
||||
*
|
||||
*/
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/arm-smccc.h>
|
||||
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/opcodes-sec.h>
|
||||
#include <asm/opcodes-virt.h>
|
||||
#include <asm/unwind.h>
|
||||
@ -36,7 +38,14 @@ UNWIND( .fnstart)
|
||||
UNWIND( .save {r4-r7})
|
||||
ldm r12, {r4-r7}
|
||||
\instr
|
||||
pop {r4-r7}
|
||||
ldr r4, [sp, #36]
|
||||
cmp r4, #0
|
||||
beq 1f // No quirk structure
|
||||
ldr r5, [r4, #ARM_SMCCC_QUIRK_ID_OFFS]
|
||||
cmp r5, #ARM_SMCCC_QUIRK_QCOM_A6
|
||||
bne 1f // No quirk present
|
||||
str r6, [r4, #ARM_SMCCC_QUIRK_STATE_OFFS]
|
||||
1: pop {r4-r7}
|
||||
ldr r12, [sp, #(4 * 4)]
|
||||
stm r12, {r0-r3}
|
||||
bx lr
|
||||
|
@ -1,4 +1,5 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
#include <linux/ftrace.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/mm_types.h>
|
||||
@ -26,6 +27,13 @@ int cpu_suspend(unsigned long arg, int (*fn)(unsigned long))
|
||||
if (!idmap_pgd)
|
||||
return -EINVAL;
|
||||
|
||||
/*
|
||||
* Function graph tracer state gets incosistent when the kernel
|
||||
* calls functions that never return (aka suspend finishers) hence
|
||||
* disable graph tracing during their execution.
|
||||
*/
|
||||
pause_graph_tracing();
|
||||
|
||||
/*
|
||||
* Provide a temporary page table with an identity mapping for
|
||||
* the MMU-enable code, required for resuming. On successful
|
||||
@ -33,6 +41,9 @@ int cpu_suspend(unsigned long arg, int (*fn)(unsigned long))
|
||||
* back to the correct page tables.
|
||||
*/
|
||||
ret = __cpu_suspend(arg, fn, __mpidr);
|
||||
|
||||
unpause_graph_tracing();
|
||||
|
||||
if (ret == 0) {
|
||||
cpu_switch_mm(mm->pgd, mm);
|
||||
local_flush_bp_all();
|
||||
@ -46,7 +57,13 @@ int cpu_suspend(unsigned long arg, int (*fn)(unsigned long))
|
||||
int cpu_suspend(unsigned long arg, int (*fn)(unsigned long))
|
||||
{
|
||||
u32 __mpidr = cpu_logical_map(smp_processor_id());
|
||||
return __cpu_suspend(arg, fn, __mpidr);
|
||||
int ret;
|
||||
|
||||
pause_graph_tracing();
|
||||
ret = __cpu_suspend(arg, fn, __mpidr);
|
||||
unpause_graph_tracing();
|
||||
|
||||
return ret;
|
||||
}
|
||||
#define idmap_pgd NULL
|
||||
#endif
|
||||
|
@ -143,7 +143,8 @@
|
||||
};
|
||||
|
||||
nb_periph_clk: nb-periph-clk@13000 {
|
||||
compatible = "marvell,armada-3700-periph-clock-nb";
|
||||
compatible = "marvell,armada-3700-periph-clock-nb",
|
||||
"syscon";
|
||||
reg = <0x13000 0x100>;
|
||||
clocks = <&tbg 0>, <&tbg 1>, <&tbg 2>,
|
||||
<&tbg 3>, <&xtalclk>;
|
||||
|
@ -1111,7 +1111,7 @@
|
||||
<&mmsys CLK_MM_DSI1_DIGITAL>,
|
||||
<&mipi_tx1>;
|
||||
clock-names = "engine", "digital", "hs";
|
||||
phy = <&mipi_tx1>;
|
||||
phys = <&mipi_tx1>;
|
||||
phy-names = "dphy";
|
||||
status = "disabled";
|
||||
};
|
||||
|
@ -610,7 +610,7 @@
|
||||
clocks = <&sys_clk 6>;
|
||||
reset-names = "ether";
|
||||
resets = <&sys_rst 6>;
|
||||
phy-mode = "rgmii";
|
||||
phy-mode = "rgmii-id";
|
||||
local-mac-address = [00 00 00 00 00 00];
|
||||
socionext,syscon-phy-mode = <&soc_glue 0>;
|
||||
|
||||
|
@ -416,7 +416,7 @@
|
||||
clocks = <&sys_clk 6>;
|
||||
reset-names = "ether";
|
||||
resets = <&sys_rst 6>;
|
||||
phy-mode = "rgmii";
|
||||
phy-mode = "rgmii-id";
|
||||
local-mac-address = [00 00 00 00 00 00];
|
||||
socionext,syscon-phy-mode = <&soc_glue 0>;
|
||||
|
||||
@ -437,7 +437,7 @@
|
||||
clocks = <&sys_clk 7>;
|
||||
reset-names = "ether";
|
||||
resets = <&sys_rst 7>;
|
||||
phy-mode = "rgmii";
|
||||
phy-mode = "rgmii-id";
|
||||
local-mac-address = [00 00 00 00 00 00];
|
||||
socionext,syscon-phy-mode = <&soc_glue 1>;
|
||||
|
||||
|
@ -455,6 +455,7 @@ static inline void kvm_arch_sched_in(struct kvm_vcpu *vcpu, int cpu) {}
|
||||
static inline void kvm_arch_vcpu_block_finish(struct kvm_vcpu *vcpu) {}
|
||||
|
||||
void kvm_arm_init_debug(void);
|
||||
void kvm_arm_vcpu_init_debug(struct kvm_vcpu *vcpu);
|
||||
void kvm_arm_setup_debug(struct kvm_vcpu *vcpu);
|
||||
void kvm_arm_clear_debug(struct kvm_vcpu *vcpu);
|
||||
void kvm_arm_reset_debug_ptr(struct kvm_vcpu *vcpu);
|
||||
|
@ -39,6 +39,13 @@ SECTIONS
|
||||
.gnu.version_d : { *(.gnu.version_d) }
|
||||
.gnu.version_r : { *(.gnu.version_r) }
|
||||
|
||||
/*
|
||||
* Discard .note.gnu.property sections which are unused and have
|
||||
* different alignment requirement from vDSO note sections.
|
||||
*/
|
||||
/DISCARD/ : {
|
||||
*(.note.GNU-stack .note.gnu.property)
|
||||
}
|
||||
.note : { *(.note.*) } :text :note
|
||||
|
||||
. = ALIGN(16);
|
||||
@ -59,7 +66,6 @@ SECTIONS
|
||||
PROVIDE(end = .);
|
||||
|
||||
/DISCARD/ : {
|
||||
*(.note.GNU-stack)
|
||||
*(.data .data.* .gnu.linkonce.d.* .sdata*)
|
||||
*(.bss .sbss .dynbss .dynsbss)
|
||||
}
|
||||
|
@ -10,15 +10,7 @@ include $(srctree)/lib/vdso/Makefile
|
||||
|
||||
# Same as cc-*option, but using CC_COMPAT instead of CC
|
||||
ifeq ($(CONFIG_CC_IS_CLANG), y)
|
||||
COMPAT_GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE_COMPAT)elfedit))
|
||||
COMPAT_GCC_TOOLCHAIN := $(realpath $(COMPAT_GCC_TOOLCHAIN_DIR)/..)
|
||||
|
||||
CC_COMPAT_CLANG_FLAGS := --target=$(notdir $(CROSS_COMPILE_COMPAT:%-=%))
|
||||
CC_COMPAT_CLANG_FLAGS += --prefix=$(COMPAT_GCC_TOOLCHAIN_DIR)
|
||||
CC_COMPAT_CLANG_FLAGS += -no-integrated-as -Qunused-arguments
|
||||
ifneq ($(COMPAT_GCC_TOOLCHAIN),)
|
||||
CC_COMPAT_CLANG_FLAGS += --gcc-toolchain=$(COMPAT_GCC_TOOLCHAIN)
|
||||
endif
|
||||
|
||||
CC_COMPAT ?= $(CC)
|
||||
CC_COMPAT += $(CC_COMPAT_CLANG_FLAGS)
|
||||
|
@ -79,6 +79,64 @@ void kvm_arm_init_debug(void)
|
||||
__this_cpu_write(mdcr_el2, kvm_call_hyp(__kvm_get_mdcr_el2));
|
||||
}
|
||||
|
||||
/**
|
||||
* kvm_arm_setup_mdcr_el2 - configure vcpu mdcr_el2 value
|
||||
*
|
||||
* @vcpu: the vcpu pointer
|
||||
*
|
||||
* This ensures we will trap access to:
|
||||
* - Performance monitors (MDCR_EL2_TPM/MDCR_EL2_TPMCR)
|
||||
* - Debug ROM Address (MDCR_EL2_TDRA)
|
||||
* - OS related registers (MDCR_EL2_TDOSA)
|
||||
* - Statistical profiler (MDCR_EL2_TPMS/MDCR_EL2_E2PB)
|
||||
* - Self-hosted Trace Filter controls (MDCR_EL2_TTRF)
|
||||
*/
|
||||
static void kvm_arm_setup_mdcr_el2(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
/*
|
||||
* This also clears MDCR_EL2_E2PB_MASK to disable guest access
|
||||
* to the profiling buffer.
|
||||
*/
|
||||
vcpu->arch.mdcr_el2 = __this_cpu_read(mdcr_el2) & MDCR_EL2_HPMN_MASK;
|
||||
vcpu->arch.mdcr_el2 |= (MDCR_EL2_TPM |
|
||||
MDCR_EL2_TPMS |
|
||||
MDCR_EL2_TTRF |
|
||||
MDCR_EL2_TPMCR |
|
||||
MDCR_EL2_TDRA |
|
||||
MDCR_EL2_TDOSA);
|
||||
|
||||
/* Is the VM being debugged by userspace? */
|
||||
if (vcpu->guest_debug)
|
||||
/* Route all software debug exceptions to EL2 */
|
||||
vcpu->arch.mdcr_el2 |= MDCR_EL2_TDE;
|
||||
|
||||
/*
|
||||
* Trap debug register access when one of the following is true:
|
||||
* - Userspace is using the hardware to debug the guest
|
||||
* (KVM_GUESTDBG_USE_HW is set).
|
||||
* - The guest is not using debug (KVM_ARM64_DEBUG_DIRTY is clear).
|
||||
*/
|
||||
if ((vcpu->guest_debug & KVM_GUESTDBG_USE_HW) ||
|
||||
!(vcpu->arch.flags & KVM_ARM64_DEBUG_DIRTY))
|
||||
vcpu->arch.mdcr_el2 |= MDCR_EL2_TDA;
|
||||
|
||||
trace_kvm_arm_set_dreg32("MDCR_EL2", vcpu->arch.mdcr_el2);
|
||||
}
|
||||
|
||||
/**
|
||||
* kvm_arm_vcpu_init_debug - setup vcpu debug traps
|
||||
*
|
||||
* @vcpu: the vcpu pointer
|
||||
*
|
||||
* Set vcpu initial mdcr_el2 value.
|
||||
*/
|
||||
void kvm_arm_vcpu_init_debug(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
preempt_disable();
|
||||
kvm_arm_setup_mdcr_el2(vcpu);
|
||||
preempt_enable();
|
||||
}
|
||||
|
||||
/**
|
||||
* kvm_arm_reset_debug_ptr - reset the debug ptr to point to the vcpu state
|
||||
*/
|
||||
@ -94,13 +152,7 @@ void kvm_arm_reset_debug_ptr(struct kvm_vcpu *vcpu)
|
||||
* @vcpu: the vcpu pointer
|
||||
*
|
||||
* This is called before each entry into the hypervisor to setup any
|
||||
* debug related registers. Currently this just ensures we will trap
|
||||
* access to:
|
||||
* - Performance monitors (MDCR_EL2_TPM/MDCR_EL2_TPMCR)
|
||||
* - Debug ROM Address (MDCR_EL2_TDRA)
|
||||
* - OS related registers (MDCR_EL2_TDOSA)
|
||||
* - Statistical profiler (MDCR_EL2_TPMS/MDCR_EL2_E2PB)
|
||||
* - Self-hosted Trace Filter controls (MDCR_EL2_TTRF)
|
||||
* debug related registers.
|
||||
*
|
||||
* Additionally, KVM only traps guest accesses to the debug registers if
|
||||
* the guest is not actively using them (see the KVM_ARM64_DEBUG_DIRTY
|
||||
@ -112,28 +164,14 @@ void kvm_arm_reset_debug_ptr(struct kvm_vcpu *vcpu)
|
||||
|
||||
void kvm_arm_setup_debug(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
bool trap_debug = !(vcpu->arch.flags & KVM_ARM64_DEBUG_DIRTY);
|
||||
unsigned long mdscr, orig_mdcr_el2 = vcpu->arch.mdcr_el2;
|
||||
|
||||
trace_kvm_arm_setup_debug(vcpu, vcpu->guest_debug);
|
||||
|
||||
/*
|
||||
* This also clears MDCR_EL2_E2PB_MASK to disable guest access
|
||||
* to the profiling buffer.
|
||||
*/
|
||||
vcpu->arch.mdcr_el2 = __this_cpu_read(mdcr_el2) & MDCR_EL2_HPMN_MASK;
|
||||
vcpu->arch.mdcr_el2 |= (MDCR_EL2_TPM |
|
||||
MDCR_EL2_TPMS |
|
||||
MDCR_EL2_TTRF |
|
||||
MDCR_EL2_TPMCR |
|
||||
MDCR_EL2_TDRA |
|
||||
MDCR_EL2_TDOSA);
|
||||
kvm_arm_setup_mdcr_el2(vcpu);
|
||||
|
||||
/* Is Guest debugging in effect? */
|
||||
if (vcpu->guest_debug) {
|
||||
/* Route all software debug exceptions to EL2 */
|
||||
vcpu->arch.mdcr_el2 |= MDCR_EL2_TDE;
|
||||
|
||||
/* Save guest debug state */
|
||||
save_guest_debug_regs(vcpu);
|
||||
|
||||
@ -187,7 +225,6 @@ void kvm_arm_setup_debug(struct kvm_vcpu *vcpu)
|
||||
|
||||
vcpu->arch.debug_ptr = &vcpu->arch.external_debug_state;
|
||||
vcpu->arch.flags |= KVM_ARM64_DEBUG_DIRTY;
|
||||
trap_debug = true;
|
||||
|
||||
trace_kvm_arm_set_regset("BKPTS", get_num_brps(),
|
||||
&vcpu->arch.debug_ptr->dbg_bcr[0],
|
||||
@ -202,10 +239,6 @@ void kvm_arm_setup_debug(struct kvm_vcpu *vcpu)
|
||||
BUG_ON(!vcpu->guest_debug &&
|
||||
vcpu->arch.debug_ptr != &vcpu->arch.vcpu_debug_state);
|
||||
|
||||
/* Trap debug register access */
|
||||
if (trap_debug)
|
||||
vcpu->arch.mdcr_el2 |= MDCR_EL2_TDA;
|
||||
|
||||
/* If KDE or MDE are set, perform a full save/restore cycle. */
|
||||
if (vcpu_read_sys_reg(vcpu, MDSCR_EL1) & (DBG_MDSCR_KDE | DBG_MDSCR_MDE))
|
||||
vcpu->arch.flags |= KVM_ARM64_DEBUG_DIRTY;
|
||||
@ -214,7 +247,6 @@ void kvm_arm_setup_debug(struct kvm_vcpu *vcpu)
|
||||
if (has_vhe() && orig_mdcr_el2 != vcpu->arch.mdcr_el2)
|
||||
write_sysreg(vcpu->arch.mdcr_el2, mdcr_el2);
|
||||
|
||||
trace_kvm_arm_set_dreg32("MDCR_EL2", vcpu->arch.mdcr_el2);
|
||||
trace_kvm_arm_set_dreg32("MDSCR_EL1", vcpu_read_sys_reg(vcpu, MDSCR_EL1));
|
||||
}
|
||||
|
||||
|
@ -14,16 +14,20 @@
|
||||
struct elf64_shdr; /* forward declration */
|
||||
|
||||
struct mod_arch_specific {
|
||||
/* Used only at module load time. */
|
||||
struct elf64_shdr *core_plt; /* core PLT section */
|
||||
struct elf64_shdr *init_plt; /* init PLT section */
|
||||
struct elf64_shdr *got; /* global offset table */
|
||||
struct elf64_shdr *opd; /* official procedure descriptors */
|
||||
struct elf64_shdr *unwind; /* unwind-table section */
|
||||
unsigned long gp; /* global-pointer for module */
|
||||
unsigned int next_got_entry; /* index of next available got entry */
|
||||
|
||||
/* Used at module run and cleanup time. */
|
||||
void *core_unw_table; /* core unwind-table cookie returned by unwinder */
|
||||
void *init_unw_table; /* init unwind-table cookie returned by unwinder */
|
||||
unsigned int next_got_entry; /* index of next available got entry */
|
||||
void *opd_addr; /* symbolize uses .opd to get to actual function */
|
||||
unsigned long opd_size;
|
||||
};
|
||||
|
||||
#define MODULE_PROC_FAMILY "ia64"
|
||||
|
@ -905,9 +905,31 @@ register_unwind_table (struct module *mod)
|
||||
int
|
||||
module_finalize (const Elf_Ehdr *hdr, const Elf_Shdr *sechdrs, struct module *mod)
|
||||
{
|
||||
struct mod_arch_specific *mas = &mod->arch;
|
||||
|
||||
DEBUGP("%s: init: entry=%p\n", __func__, mod->init);
|
||||
if (mod->arch.unwind)
|
||||
if (mas->unwind)
|
||||
register_unwind_table(mod);
|
||||
|
||||
/*
|
||||
* ".opd" was already relocated to the final destination. Store
|
||||
* it's address for use in symbolizer.
|
||||
*/
|
||||
mas->opd_addr = (void *)mas->opd->sh_addr;
|
||||
mas->opd_size = mas->opd->sh_size;
|
||||
|
||||
/*
|
||||
* Module relocation was already done at this point. Section
|
||||
* headers are about to be deleted. Wipe out load-time context.
|
||||
*/
|
||||
mas->core_plt = NULL;
|
||||
mas->init_plt = NULL;
|
||||
mas->got = NULL;
|
||||
mas->opd = NULL;
|
||||
mas->unwind = NULL;
|
||||
mas->gp = 0;
|
||||
mas->next_got_entry = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -926,10 +948,9 @@ module_arch_cleanup (struct module *mod)
|
||||
|
||||
void *dereference_module_function_descriptor(struct module *mod, void *ptr)
|
||||
{
|
||||
Elf64_Shdr *opd = mod->arch.opd;
|
||||
struct mod_arch_specific *mas = &mod->arch;
|
||||
|
||||
if (ptr < (void *)opd->sh_addr ||
|
||||
ptr >= (void *)(opd->sh_addr + opd->sh_size))
|
||||
if (ptr < mas->opd_addr || ptr >= mas->opd_addr + mas->opd_size)
|
||||
return ptr;
|
||||
|
||||
return dereference_function_descriptor(ptr);
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python
|
||||
#!/usr/bin/env python
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
#
|
||||
# Usage: unwcheck.py FILE
|
||||
|
@ -31,6 +31,7 @@
|
||||
#include <asm/reboot.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/mach-au1x00/au1000.h>
|
||||
#include <asm/mach-au1x00/gpio-au1000.h>
|
||||
#include <prom.h>
|
||||
|
||||
const char *get_system_type(void)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2000, 2004 Maciej W. Rozycki
|
||||
* Copyright (C) 2000, 2004, 2021 Maciej W. Rozycki
|
||||
* Copyright (C) 2003, 07 Ralf Baechle (ralf@linux-mips.org)
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
@ -9,25 +9,18 @@
|
||||
#ifndef __ASM_DIV64_H
|
||||
#define __ASM_DIV64_H
|
||||
|
||||
#include <asm-generic/div64.h>
|
||||
#include <asm/bitsperlong.h>
|
||||
|
||||
#if BITS_PER_LONG == 64
|
||||
|
||||
#include <linux/types.h>
|
||||
#if BITS_PER_LONG == 32
|
||||
|
||||
/*
|
||||
* No traps on overflows for any of these...
|
||||
*/
|
||||
|
||||
#define __div64_32(n, base) \
|
||||
({ \
|
||||
#define do_div64_32(res, high, low, base) ({ \
|
||||
unsigned long __cf, __tmp, __tmp2, __i; \
|
||||
unsigned long __quot32, __mod32; \
|
||||
unsigned long __high, __low; \
|
||||
unsigned long long __n; \
|
||||
\
|
||||
__high = *__n >> 32; \
|
||||
__low = __n; \
|
||||
__asm__( \
|
||||
" .set push \n" \
|
||||
" .set noat \n" \
|
||||
@ -51,18 +44,48 @@
|
||||
" subu %0, %0, %z6 \n" \
|
||||
" addiu %2, %2, 1 \n" \
|
||||
"3: \n" \
|
||||
" bnez %4, 0b\n\t" \
|
||||
" srl %5, %1, 0x1f\n\t" \
|
||||
" bnez %4, 0b \n" \
|
||||
" srl %5, %1, 0x1f \n" \
|
||||
" .set pop" \
|
||||
: "=&r" (__mod32), "=&r" (__tmp), \
|
||||
"=&r" (__quot32), "=&r" (__cf), \
|
||||
"=&r" (__i), "=&r" (__tmp2) \
|
||||
: "Jr" (base), "0" (__high), "1" (__low)); \
|
||||
: "Jr" (base), "0" (high), "1" (low)); \
|
||||
\
|
||||
(__n) = __quot32; \
|
||||
(res) = __quot32; \
|
||||
__mod32; \
|
||||
})
|
||||
|
||||
#endif /* BITS_PER_LONG == 64 */
|
||||
#define __div64_32(n, base) ({ \
|
||||
unsigned long __upper, __low, __high, __radix; \
|
||||
unsigned long long __quot; \
|
||||
unsigned long long __div; \
|
||||
unsigned long __mod; \
|
||||
\
|
||||
__div = (*n); \
|
||||
__radix = (base); \
|
||||
\
|
||||
__high = __div >> 32; \
|
||||
__low = __div; \
|
||||
\
|
||||
if (__high < __radix) { \
|
||||
__upper = __high; \
|
||||
__high = 0; \
|
||||
} else { \
|
||||
__upper = __high % __radix; \
|
||||
__high /= __radix; \
|
||||
} \
|
||||
\
|
||||
__mod = do_div64_32(__low, __upper, __low, __radix); \
|
||||
\
|
||||
__quot = __high; \
|
||||
__quot = __quot << 32 | __low; \
|
||||
(*n) = __quot; \
|
||||
__mod; \
|
||||
})
|
||||
|
||||
#endif /* BITS_PER_LONG == 32 */
|
||||
|
||||
#include <asm-generic/div64.h>
|
||||
|
||||
#endif /* __ASM_DIV64_H */
|
||||
|
@ -169,8 +169,13 @@ void pci_load_of_ranges(struct pci_controller *hose, struct device_node *node)
|
||||
res = hose->mem_resource;
|
||||
break;
|
||||
}
|
||||
if (res != NULL)
|
||||
of_pci_range_to_resource(&range, node, res);
|
||||
if (res != NULL) {
|
||||
res->name = node->full_name;
|
||||
res->flags = range.flags;
|
||||
res->start = range.cpu_addr;
|
||||
res->end = range.cpu_addr + range.size - 1;
|
||||
res->parent = res->child = res->sibling = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -33,6 +33,7 @@
|
||||
#define RALINK_GPIOMODE 0x60
|
||||
|
||||
#define PPLL_CFG1 0x9c
|
||||
#define PPLL_LD BIT(23)
|
||||
|
||||
#define PPLL_DRV 0xa0
|
||||
#define PDRV_SW_SET BIT(31)
|
||||
@ -242,8 +243,8 @@ static int mt7620_pci_hw_init(struct platform_device *pdev)
|
||||
rt_sysc_m32(0, RALINK_PCIE0_CLK_EN, RALINK_CLKCFG1);
|
||||
mdelay(100);
|
||||
|
||||
if (!(rt_sysc_r32(PPLL_CFG1) & PDRV_SW_SET)) {
|
||||
dev_err(&pdev->dev, "MT7620 PPLL unlock\n");
|
||||
if (!(rt_sysc_r32(PPLL_CFG1) & PPLL_LD)) {
|
||||
dev_err(&pdev->dev, "pcie PLL not locked, aborting init\n");
|
||||
reset_control_assert(rstpcie0);
|
||||
rt_sysc_m32(RALINK_PCIE0_CLK_EN, 0, RALINK_CLKCFG1);
|
||||
return -1;
|
||||
|
@ -183,7 +183,6 @@ static inline void rt2880_pci_write_u32(unsigned long reg, u32 val)
|
||||
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
u16 cmd;
|
||||
int irq = -1;
|
||||
|
||||
if (dev->bus->number != 0)
|
||||
@ -191,8 +190,6 @@ int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
|
||||
switch (PCI_SLOT(dev->devfn)) {
|
||||
case 0x00:
|
||||
rt2880_pci_write_u32(PCI_BASE_ADDRESS_0, 0x08000000);
|
||||
(void) rt2880_pci_read_u32(PCI_BASE_ADDRESS_0);
|
||||
break;
|
||||
case 0x11:
|
||||
irq = RT288X_CPU_IRQ_PCI;
|
||||
@ -204,16 +201,6 @@ int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
break;
|
||||
}
|
||||
|
||||
pci_write_config_byte((struct pci_dev *) dev,
|
||||
PCI_CACHE_LINE_SIZE, 0x14);
|
||||
pci_write_config_byte((struct pci_dev *) dev, PCI_LATENCY_TIMER, 0xFF);
|
||||
pci_read_config_word((struct pci_dev *) dev, PCI_COMMAND, &cmd);
|
||||
cmd |= PCI_COMMAND_MASTER | PCI_COMMAND_IO | PCI_COMMAND_MEMORY |
|
||||
PCI_COMMAND_INVALIDATE | PCI_COMMAND_FAST_BACK |
|
||||
PCI_COMMAND_SERR | PCI_COMMAND_WAIT | PCI_COMMAND_PARITY;
|
||||
pci_write_config_word((struct pci_dev *) dev, PCI_COMMAND, cmd);
|
||||
pci_write_config_byte((struct pci_dev *) dev, PCI_INTERRUPT_LINE,
|
||||
dev->irq);
|
||||
return irq;
|
||||
}
|
||||
|
||||
@ -252,6 +239,30 @@ static int rt288x_pci_probe(struct platform_device *pdev)
|
||||
|
||||
int pcibios_plat_dev_init(struct pci_dev *dev)
|
||||
{
|
||||
static bool slot0_init;
|
||||
|
||||
/*
|
||||
* Nobody seems to initialize slot 0, but this platform requires it, so
|
||||
* do it once when some other slot is being enabled. The PCI subsystem
|
||||
* should configure other slots properly, so no need to do anything
|
||||
* special for those.
|
||||
*/
|
||||
if (!slot0_init && dev->bus->number == 0) {
|
||||
u16 cmd;
|
||||
u32 bar0;
|
||||
|
||||
slot0_init = true;
|
||||
|
||||
pci_bus_write_config_dword(dev->bus, 0, PCI_BASE_ADDRESS_0,
|
||||
0x08000000);
|
||||
pci_bus_read_config_dword(dev->bus, 0, PCI_BASE_ADDRESS_0,
|
||||
&bar0);
|
||||
|
||||
pci_bus_read_config_word(dev->bus, 0, PCI_COMMAND, &cmd);
|
||||
cmd |= PCI_COMMAND_MASTER | PCI_COMMAND_IO | PCI_COMMAND_MEMORY;
|
||||
pci_bus_write_config_word(dev->bus, 0, PCI_COMMAND, cmd);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -10,6 +10,7 @@
|
||||
|
||||
#include <linux/io.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/export.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <linux/of_fdt.h>
|
||||
@ -27,6 +28,7 @@
|
||||
|
||||
__iomem void *rt_sysc_membase;
|
||||
__iomem void *rt_memc_membase;
|
||||
EXPORT_SYMBOL_GPL(rt_sysc_membase);
|
||||
|
||||
__iomem void *plat_of_remap_node(const char *node)
|
||||
{
|
||||
|
@ -18,6 +18,12 @@
|
||||
#include <asm/unistd.h>
|
||||
#include <asm/vdso.h>
|
||||
|
||||
#if MIPS_ISA_REV < 6
|
||||
#define VDSO_SYSCALL_CLOBBERS "hi", "lo",
|
||||
#else
|
||||
#define VDSO_SYSCALL_CLOBBERS
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MIPS_CLOCK_VSYSCALL
|
||||
|
||||
static __always_inline long gettimeofday_fallback(struct timeval *_tv,
|
||||
@ -34,7 +40,9 @@ static __always_inline long gettimeofday_fallback(struct timeval *_tv,
|
||||
: "=r" (ret), "=r" (error)
|
||||
: "r" (tv), "r" (tz), "r" (nr)
|
||||
: "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
|
||||
"$14", "$15", "$24", "$25", "hi", "lo", "memory");
|
||||
"$14", "$15", "$24", "$25",
|
||||
VDSO_SYSCALL_CLOBBERS
|
||||
"memory");
|
||||
|
||||
return error ? -ret : ret;
|
||||
}
|
||||
@ -55,7 +63,9 @@ static __always_inline long clock_gettime_fallback(clockid_t _clkid,
|
||||
: "=r" (ret), "=r" (error)
|
||||
: "r" (clkid), "r" (ts), "r" (nr)
|
||||
: "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
|
||||
"$14", "$15", "$24", "$25", "hi", "lo", "memory");
|
||||
"$14", "$15", "$24", "$25",
|
||||
VDSO_SYSCALL_CLOBBERS
|
||||
"memory");
|
||||
|
||||
return error ? -ret : ret;
|
||||
}
|
||||
|
9
arch/openrisc/include/asm/barrier.h
Normal file
9
arch/openrisc/include/asm/barrier.h
Normal file
@ -0,0 +1,9 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef __ASM_BARRIER_H
|
||||
#define __ASM_BARRIER_H
|
||||
|
||||
#define mb() asm volatile ("l.msync" ::: "memory")
|
||||
|
||||
#include <asm-generic/barrier.h>
|
||||
|
||||
#endif /* __ASM_BARRIER_H */
|
@ -281,6 +281,8 @@ void calibrate_delay(void)
|
||||
pr_cont("%lu.%02lu BogoMIPS (lpj=%lu)\n",
|
||||
loops_per_jiffy / (500000 / HZ),
|
||||
(loops_per_jiffy / (5000 / HZ)) % 100, loops_per_jiffy);
|
||||
|
||||
of_node_put(cpu);
|
||||
}
|
||||
|
||||
void __init setup_arch(char **cmdline_p)
|
||||
|
@ -208,7 +208,7 @@ config PPC
|
||||
select HAVE_MEMBLOCK_NODE_MAP
|
||||
select HAVE_MOD_ARCH_SPECIFIC
|
||||
select HAVE_NMI if PERF_EVENTS || (PPC64 && PPC_BOOK3S)
|
||||
select HAVE_HARDLOCKUP_DETECTOR_ARCH if (PPC64 && PPC_BOOK3S)
|
||||
select HAVE_HARDLOCKUP_DETECTOR_ARCH if PPC64 && PPC_BOOK3S && SMP
|
||||
select HAVE_OPROFILE
|
||||
select HAVE_OPTPROBES if PPC64
|
||||
select HAVE_PERF_EVENTS
|
||||
|
@ -350,6 +350,7 @@ config PPC_EARLY_DEBUG_CPM_ADDR
|
||||
config FAIL_IOMMU
|
||||
bool "Fault-injection capability for IOMMU"
|
||||
depends on FAULT_INJECTION
|
||||
depends on PCI || IBMVIO
|
||||
help
|
||||
Provide fault-injection capability for IOMMU. Each device can
|
||||
be selectively enabled via the fail_iommu property.
|
||||
|
@ -204,8 +204,10 @@ static inline void radix__set_pte_at(struct mm_struct *mm, unsigned long addr,
|
||||
* from ptesync, it should probably go into update_mmu_cache, rather
|
||||
* than set_pte_at (which is used to set ptes unrelated to faults).
|
||||
*
|
||||
* Spurious faults to vmalloc region are not tolerated, so there is
|
||||
* a ptesync in flush_cache_vmap.
|
||||
* Spurious faults from the kernel memory are not tolerated, so there
|
||||
* is a ptesync in flush_cache_vmap, and __map_kernel_page() follows
|
||||
* the pte update sequence from ISA Book III 6.10 Translation Table
|
||||
* Update Synchronization Requirements.
|
||||
*/
|
||||
}
|
||||
|
||||
|
@ -2,6 +2,7 @@
|
||||
#ifndef _ASM_POWERPC_ERRNO_H
|
||||
#define _ASM_POWERPC_ERRNO_H
|
||||
|
||||
#undef EDEADLOCK
|
||||
#include <asm-generic/errno.h>
|
||||
|
||||
#undef EDEADLOCK
|
||||
|
@ -364,14 +364,11 @@ static inline unsigned long eeh_token_to_phys(unsigned long token)
|
||||
pa = pte_pfn(*ptep);
|
||||
|
||||
/* On radix we can do hugepage mappings for io, so handle that */
|
||||
if (hugepage_shift) {
|
||||
pa <<= hugepage_shift;
|
||||
pa |= token & ((1ul << hugepage_shift) - 1);
|
||||
} else {
|
||||
pa <<= PAGE_SHIFT;
|
||||
pa |= token & (PAGE_SIZE - 1);
|
||||
}
|
||||
if (!hugepage_shift)
|
||||
hugepage_shift = PAGE_SHIFT;
|
||||
|
||||
pa <<= PAGE_SHIFT;
|
||||
pa |= token & ((1ul << hugepage_shift) - 1);
|
||||
return pa;
|
||||
}
|
||||
|
||||
|
@ -1030,7 +1030,7 @@ int iommu_take_ownership(struct iommu_table *tbl)
|
||||
|
||||
spin_lock_irqsave(&tbl->large_pool.lock, flags);
|
||||
for (i = 0; i < tbl->nr_pools; i++)
|
||||
spin_lock(&tbl->pools[i].lock);
|
||||
spin_lock_nest_lock(&tbl->pools[i].lock, &tbl->large_pool.lock);
|
||||
|
||||
if (tbl->it_offset == 0)
|
||||
clear_bit(0, tbl->it_map);
|
||||
@ -1059,7 +1059,7 @@ void iommu_release_ownership(struct iommu_table *tbl)
|
||||
|
||||
spin_lock_irqsave(&tbl->large_pool.lock, flags);
|
||||
for (i = 0; i < tbl->nr_pools; i++)
|
||||
spin_lock(&tbl->pools[i].lock);
|
||||
spin_lock_nest_lock(&tbl->pools[i].lock, &tbl->large_pool.lock);
|
||||
|
||||
memset(tbl->it_map, 0, sz);
|
||||
|
||||
|
@ -266,7 +266,7 @@ static struct feature_property {
|
||||
};
|
||||
|
||||
#if defined(CONFIG_44x) && defined(CONFIG_PPC_FPU)
|
||||
static inline void identical_pvr_fixup(unsigned long node)
|
||||
static __init void identical_pvr_fixup(unsigned long node)
|
||||
{
|
||||
unsigned int pvr;
|
||||
const char *model = of_get_flat_dt_prop(node, "model", NULL);
|
||||
|
@ -1032,6 +1032,9 @@ void start_secondary(void *unused)
|
||||
|
||||
vdso_getcpu_init();
|
||||
#endif
|
||||
set_numa_node(numa_cpu_lookup_table[cpu]);
|
||||
set_numa_mem(local_memory_node(numa_cpu_lookup_table[cpu]));
|
||||
|
||||
/* Update topology CPU masks */
|
||||
add_cpu_to_masks(cpu);
|
||||
|
||||
@ -1042,9 +1045,6 @@ void start_secondary(void *unused)
|
||||
if (!cpumask_equal(cpu_l2_cache_mask(cpu), cpu_sibling_mask(cpu)))
|
||||
shared_caches = true;
|
||||
|
||||
set_numa_node(numa_cpu_lookup_table[cpu]);
|
||||
set_numa_mem(local_memory_node(numa_cpu_lookup_table[cpu]));
|
||||
|
||||
smp_wmb();
|
||||
notify_cpu_starting(cpu);
|
||||
set_cpu_online(cpu, true);
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include <linux/string.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/sched/mm.h>
|
||||
#include <linux/stop_machine.h>
|
||||
#include <asm/cputable.h>
|
||||
#include <asm/code-patching.h>
|
||||
#include <asm/page.h>
|
||||
@ -225,11 +226,25 @@ void do_stf_exit_barrier_fixups(enum stf_barrier_type types)
|
||||
: "unknown");
|
||||
}
|
||||
|
||||
static int __do_stf_barrier_fixups(void *data)
|
||||
{
|
||||
enum stf_barrier_type *types = data;
|
||||
|
||||
do_stf_entry_barrier_fixups(*types);
|
||||
do_stf_exit_barrier_fixups(*types);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void do_stf_barrier_fixups(enum stf_barrier_type types)
|
||||
{
|
||||
do_stf_entry_barrier_fixups(types);
|
||||
do_stf_exit_barrier_fixups(types);
|
||||
/*
|
||||
* The call to the fallback entry flush, and the fallback/sync-ori exit
|
||||
* flush can not be safely patched in/out while other CPUs are executing
|
||||
* them. So call __do_stf_barrier_fixups() on one CPU while all other CPUs
|
||||
* spin in the stop machine core with interrupts hard disabled.
|
||||
*/
|
||||
stop_machine(__do_stf_barrier_fixups, &types, NULL);
|
||||
}
|
||||
|
||||
void do_uaccess_flush_fixups(enum l1d_flush_type types)
|
||||
@ -282,8 +297,9 @@ void do_uaccess_flush_fixups(enum l1d_flush_type types)
|
||||
: "unknown");
|
||||
}
|
||||
|
||||
void do_entry_flush_fixups(enum l1d_flush_type types)
|
||||
static int __do_entry_flush_fixups(void *data)
|
||||
{
|
||||
enum l1d_flush_type types = *(enum l1d_flush_type *)data;
|
||||
unsigned int instrs[3], *dest;
|
||||
long *start, *end;
|
||||
int i;
|
||||
@ -334,6 +350,19 @@ void do_entry_flush_fixups(enum l1d_flush_type types)
|
||||
: "ori type" :
|
||||
(types & L1D_FLUSH_MTTRIG) ? "mttrig type"
|
||||
: "unknown");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void do_entry_flush_fixups(enum l1d_flush_type types)
|
||||
{
|
||||
/*
|
||||
* The call to the fallback flush can not be safely patched in/out while
|
||||
* other CPUs are executing it. So call __do_entry_flush_fixups() on one
|
||||
* CPU while all other CPUs spin in the stop machine core with interrupts
|
||||
* hard disabled.
|
||||
*/
|
||||
stop_machine(__do_entry_flush_fixups, &types, NULL);
|
||||
}
|
||||
|
||||
void do_rfi_flush_fixups(enum l1d_flush_type types)
|
||||
|
@ -115,7 +115,7 @@ static int early_map_kernel_page(unsigned long ea, unsigned long pa,
|
||||
|
||||
set_the_pte:
|
||||
set_pte_at(&init_mm, ea, ptep, pfn_pte(pfn, flags));
|
||||
smp_wmb();
|
||||
asm volatile("ptesync": : :"memory");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -169,7 +169,7 @@ static int __map_kernel_page(unsigned long ea, unsigned long pa,
|
||||
|
||||
set_the_pte:
|
||||
set_pte_at(&init_mm, ea, ptep, pfn_pte(pfn, flags));
|
||||
smp_wmb();
|
||||
asm volatile("ptesync": : :"memory");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -359,8 +359,8 @@ ebb_bhrb:
|
||||
* EBB events are pinned & exclusive, so this should never actually
|
||||
* hit, but we leave it as a fallback in case.
|
||||
*/
|
||||
mask |= CNST_EBB_VAL(ebb);
|
||||
value |= CNST_EBB_MASK;
|
||||
mask |= CNST_EBB_MASK;
|
||||
value |= CNST_EBB_VAL(ebb);
|
||||
|
||||
*maskp = mask;
|
||||
*valp = value;
|
||||
|
@ -181,7 +181,7 @@ sram_code:
|
||||
udelay: /* r11 - tb_ticks_per_usec, r12 - usecs, overwrites r13 */
|
||||
mullw r12, r12, r11
|
||||
mftb r13 /* start */
|
||||
addi r12, r13, r12 /* end */
|
||||
add r12, r13, r12 /* end */
|
||||
1:
|
||||
mftb r13 /* current */
|
||||
cmp cr0, r13, r12
|
||||
|
@ -95,9 +95,6 @@ static void rtas_stop_self(void)
|
||||
|
||||
BUG_ON(rtas_stop_self_token == RTAS_UNKNOWN_SERVICE);
|
||||
|
||||
printk("cpu %u (hwid %u) Ready to die...\n",
|
||||
smp_processor_id(), hard_smp_processor_id());
|
||||
|
||||
rtas_call_unlocked(&args, rtas_stop_self_token, 0, 1, NULL);
|
||||
|
||||
panic("Alas, I survived.\n");
|
||||
|
@ -66,6 +66,7 @@ EXPORT_SYMBOL_GPL(init_phb_dynamic);
|
||||
int remove_phb_dynamic(struct pci_controller *phb)
|
||||
{
|
||||
struct pci_bus *b = phb->bus;
|
||||
struct pci_host_bridge *host_bridge = to_pci_host_bridge(b->bridge);
|
||||
struct resource *res;
|
||||
int rc, i;
|
||||
|
||||
@ -92,7 +93,8 @@ int remove_phb_dynamic(struct pci_controller *phb)
|
||||
/* Remove the PCI bus and unregister the bridge device from sysfs */
|
||||
phb->bus = NULL;
|
||||
pci_remove_bus(b);
|
||||
device_unregister(b->bridge);
|
||||
host_bridge->bus = NULL;
|
||||
device_unregister(&host_bridge->dev);
|
||||
|
||||
/* Now release the IO resource */
|
||||
if (res->flags & IORESOURCE_IO)
|
||||
|
@ -10,9 +10,19 @@
|
||||
#endif
|
||||
#define HAVE_FUNCTION_GRAPH_RET_ADDR_PTR
|
||||
|
||||
/*
|
||||
* Clang prior to 13 had "mcount" instead of "_mcount":
|
||||
* https://reviews.llvm.org/D98881
|
||||
*/
|
||||
#if defined(CONFIG_CC_IS_GCC) || CONFIG_CLANG_VERSION >= 130000
|
||||
#define MCOUNT_NAME _mcount
|
||||
#else
|
||||
#define MCOUNT_NAME mcount
|
||||
#endif
|
||||
|
||||
#define ARCH_SUPPORTS_FTRACE_OPS 1
|
||||
#ifndef __ASSEMBLY__
|
||||
void _mcount(void);
|
||||
void MCOUNT_NAME(void);
|
||||
static inline unsigned long ftrace_call_adjust(unsigned long addr)
|
||||
{
|
||||
return addr;
|
||||
@ -33,7 +43,7 @@ struct dyn_arch_ftrace {
|
||||
* both auipc and jalr at the same time.
|
||||
*/
|
||||
|
||||
#define MCOUNT_ADDR ((unsigned long)_mcount)
|
||||
#define MCOUNT_ADDR ((unsigned long)MCOUNT_NAME)
|
||||
#define JALR_SIGN_MASK (0x00000800)
|
||||
#define JALR_OFFSET_MASK (0x00000fff)
|
||||
#define AUIPC_OFFSET_MASK (0xfffff000)
|
||||
|
@ -47,8 +47,8 @@
|
||||
|
||||
ENTRY(ftrace_stub)
|
||||
#ifdef CONFIG_DYNAMIC_FTRACE
|
||||
.global _mcount
|
||||
.set _mcount, ftrace_stub
|
||||
.global MCOUNT_NAME
|
||||
.set MCOUNT_NAME, ftrace_stub
|
||||
#endif
|
||||
ret
|
||||
ENDPROC(ftrace_stub)
|
||||
@ -79,7 +79,7 @@ EXPORT_SYMBOL(return_to_handler)
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_DYNAMIC_FTRACE
|
||||
ENTRY(_mcount)
|
||||
ENTRY(MCOUNT_NAME)
|
||||
la t4, ftrace_stub
|
||||
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
|
||||
la t0, ftrace_graph_return
|
||||
@ -125,6 +125,6 @@ do_trace:
|
||||
jalr t5
|
||||
RESTORE_ABI_STATE
|
||||
ret
|
||||
ENDPROC(_mcount)
|
||||
ENDPROC(MCOUNT_NAME)
|
||||
#endif
|
||||
EXPORT_SYMBOL(_mcount)
|
||||
EXPORT_SYMBOL(MCOUNT_NAME)
|
||||
|
@ -53,6 +53,10 @@ static DECLARE_DELAYED_WORK(arch_rng_work, arch_rng_refill_buffer);
|
||||
|
||||
bool s390_arch_random_generate(u8 *buf, unsigned int nbytes)
|
||||
{
|
||||
/* max hunk is ARCH_RNG_BUF_SIZE */
|
||||
if (nbytes > ARCH_RNG_BUF_SIZE)
|
||||
return false;
|
||||
|
||||
/* lock rng buffer */
|
||||
if (!spin_trylock(&arch_rng_lock))
|
||||
return false;
|
||||
|
@ -558,7 +558,7 @@ void show_code(struct pt_regs *regs)
|
||||
|
||||
void print_fn_code(unsigned char *code, unsigned long len)
|
||||
{
|
||||
char buffer[64], *ptr;
|
||||
char buffer[128], *ptr;
|
||||
int opsize, i;
|
||||
|
||||
while (len) {
|
||||
|
@ -16,6 +16,23 @@
|
||||
#include <linux/ptrace.h>
|
||||
#include "kvm-s390.h"
|
||||
|
||||
/**
|
||||
* kvm_s390_real_to_abs - convert guest real address to guest absolute address
|
||||
* @prefix - guest prefix
|
||||
* @gra - guest real address
|
||||
*
|
||||
* Returns the guest absolute address that corresponds to the passed guest real
|
||||
* address @gra of by applying the given prefix.
|
||||
*/
|
||||
static inline unsigned long _kvm_s390_real_to_abs(u32 prefix, unsigned long gra)
|
||||
{
|
||||
if (gra < 2 * PAGE_SIZE)
|
||||
gra += prefix;
|
||||
else if (gra >= prefix && gra < prefix + 2 * PAGE_SIZE)
|
||||
gra -= prefix;
|
||||
return gra;
|
||||
}
|
||||
|
||||
/**
|
||||
* kvm_s390_real_to_abs - convert guest real address to guest absolute address
|
||||
* @vcpu - guest virtual cpu
|
||||
@ -27,13 +44,30 @@
|
||||
static inline unsigned long kvm_s390_real_to_abs(struct kvm_vcpu *vcpu,
|
||||
unsigned long gra)
|
||||
{
|
||||
unsigned long prefix = kvm_s390_get_prefix(vcpu);
|
||||
return _kvm_s390_real_to_abs(kvm_s390_get_prefix(vcpu), gra);
|
||||
}
|
||||
|
||||
if (gra < 2 * PAGE_SIZE)
|
||||
gra += prefix;
|
||||
else if (gra >= prefix && gra < prefix + 2 * PAGE_SIZE)
|
||||
gra -= prefix;
|
||||
return gra;
|
||||
/**
|
||||
* _kvm_s390_logical_to_effective - convert guest logical to effective address
|
||||
* @psw: psw of the guest
|
||||
* @ga: guest logical address
|
||||
*
|
||||
* Convert a guest logical address to an effective address by applying the
|
||||
* rules of the addressing mode defined by bits 31 and 32 of the given PSW
|
||||
* (extendended/basic addressing mode).
|
||||
*
|
||||
* Depending on the addressing mode, the upper 40 bits (24 bit addressing
|
||||
* mode), 33 bits (31 bit addressing mode) or no bits (64 bit addressing
|
||||
* mode) of @ga will be zeroed and the remaining bits will be returned.
|
||||
*/
|
||||
static inline unsigned long _kvm_s390_logical_to_effective(psw_t *psw,
|
||||
unsigned long ga)
|
||||
{
|
||||
if (psw_bits(*psw).eaba == PSW_BITS_AMODE_64BIT)
|
||||
return ga;
|
||||
if (psw_bits(*psw).eaba == PSW_BITS_AMODE_31BIT)
|
||||
return ga & ((1UL << 31) - 1);
|
||||
return ga & ((1UL << 24) - 1);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -52,13 +86,7 @@ static inline unsigned long kvm_s390_real_to_abs(struct kvm_vcpu *vcpu,
|
||||
static inline unsigned long kvm_s390_logical_to_effective(struct kvm_vcpu *vcpu,
|
||||
unsigned long ga)
|
||||
{
|
||||
psw_t *psw = &vcpu->arch.sie_block->gpsw;
|
||||
|
||||
if (psw_bits(*psw).eaba == PSW_BITS_AMODE_64BIT)
|
||||
return ga;
|
||||
if (psw_bits(*psw).eaba == PSW_BITS_AMODE_31BIT)
|
||||
return ga & ((1UL << 31) - 1);
|
||||
return ga & ((1UL << 24) - 1);
|
||||
return _kvm_s390_logical_to_effective(&vcpu->arch.sie_block->gpsw, ga);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -3624,16 +3624,16 @@ static void store_regs(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
|
||||
current->thread.fpu.fpc = vcpu->arch.host_fpregs.fpc;
|
||||
current->thread.fpu.regs = vcpu->arch.host_fpregs.regs;
|
||||
if (MACHINE_HAS_GS) {
|
||||
preempt_disable();
|
||||
__ctl_set_bit(2, 4);
|
||||
if (vcpu->arch.gs_enabled)
|
||||
save_gs_cb(current->thread.gs_cb);
|
||||
preempt_disable();
|
||||
current->thread.gs_cb = vcpu->arch.host_gscb;
|
||||
restore_gs_cb(vcpu->arch.host_gscb);
|
||||
preempt_enable();
|
||||
if (!vcpu->arch.host_gscb)
|
||||
__ctl_clear_bit(2, 4);
|
||||
vcpu->arch.host_gscb = NULL;
|
||||
preempt_enable();
|
||||
}
|
||||
/* SIE will save etoken directly into SDNX and therefore kvm_run */
|
||||
}
|
||||
|
@ -6,6 +6,12 @@ OUTPUT_ARCH(ELF_ARCH)
|
||||
ENTRY(_start)
|
||||
jiffies = jiffies_64;
|
||||
|
||||
VERSION {
|
||||
{
|
||||
local: *;
|
||||
};
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
PROVIDE (__executable_start = START);
|
||||
|
@ -7,6 +7,12 @@ OUTPUT_ARCH(ELF_ARCH)
|
||||
ENTRY(_start)
|
||||
jiffies = jiffies_64;
|
||||
|
||||
VERSION {
|
||||
{
|
||||
local: *;
|
||||
};
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
/* This must contain the right address - not quite the default ELF one.*/
|
||||
|
@ -536,6 +536,7 @@ config X86_UV
|
||||
depends on X86_EXTENDED_PLATFORM
|
||||
depends on NUMA
|
||||
depends on EFI
|
||||
depends on KEXEC_CORE
|
||||
depends on X86_X2APIC
|
||||
depends on PCI
|
||||
---help---
|
||||
|
@ -40,6 +40,7 @@ REALMODE_CFLAGS += $(call __cc-option, $(CC), $(REALMODE_CFLAGS), -ffreestanding
|
||||
REALMODE_CFLAGS += $(call __cc-option, $(CC), $(REALMODE_CFLAGS), -fno-stack-protector)
|
||||
REALMODE_CFLAGS += $(call __cc-option, $(CC), $(REALMODE_CFLAGS), -Wno-address-of-packed-member)
|
||||
REALMODE_CFLAGS += $(call __cc-option, $(CC), $(REALMODE_CFLAGS), $(cc_stack_align4))
|
||||
REALMODE_CFLAGS += $(CLANG_FLAGS)
|
||||
export REALMODE_CFLAGS
|
||||
|
||||
# BITS is used as extension for files which are available in a 32 bit
|
||||
|
@ -84,12 +84,12 @@ static struct attribute_group amd_iommu_events_group = {
|
||||
};
|
||||
|
||||
struct amd_iommu_event_desc {
|
||||
struct kobj_attribute attr;
|
||||
struct device_attribute attr;
|
||||
const char *event;
|
||||
};
|
||||
|
||||
static ssize_t _iommu_event_show(struct kobject *kobj,
|
||||
struct kobj_attribute *attr, char *buf)
|
||||
static ssize_t _iommu_event_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct amd_iommu_event_desc *event =
|
||||
container_of(attr, struct amd_iommu_event_desc, attr);
|
||||
|
@ -1565,10 +1565,18 @@ void __init acpi_boot_table_init(void)
|
||||
/*
|
||||
* Initialize the ACPI boot-time table parser.
|
||||
*/
|
||||
if (acpi_table_init()) {
|
||||
if (acpi_locate_initial_tables())
|
||||
disable_acpi();
|
||||
return;
|
||||
}
|
||||
else
|
||||
acpi_reserve_initial_tables();
|
||||
}
|
||||
|
||||
int __init early_acpi_boot_init(void)
|
||||
{
|
||||
if (acpi_disabled)
|
||||
return 1;
|
||||
|
||||
acpi_table_init_complete();
|
||||
|
||||
acpi_table_parse(ACPI_SIG_BOOT, acpi_parse_sbf);
|
||||
|
||||
@ -1581,18 +1589,9 @@ void __init acpi_boot_table_init(void)
|
||||
} else {
|
||||
printk(KERN_WARNING PREFIX "Disabling ACPI support\n");
|
||||
disable_acpi();
|
||||
return;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int __init early_acpi_boot_init(void)
|
||||
{
|
||||
/*
|
||||
* If acpi_disabled, bail out
|
||||
*/
|
||||
if (acpi_disabled)
|
||||
return 1;
|
||||
|
||||
/*
|
||||
* Process the Multiple APIC Description Table (MADT), if present
|
||||
|
@ -1769,7 +1769,7 @@ static void setup_getcpu(int cpu)
|
||||
unsigned long cpudata = vdso_encode_cpunode(cpu, early_cpu_to_node(cpu));
|
||||
struct desc_struct d = { };
|
||||
|
||||
if (static_cpu_has(X86_FEATURE_RDTSCP))
|
||||
if (boot_cpu_has(X86_FEATURE_RDTSCP))
|
||||
write_rdtscp_aux(cpudata);
|
||||
|
||||
/* Store CPU and node number in limit. */
|
||||
|
@ -627,16 +627,16 @@ static ssize_t reload_store(struct device *dev,
|
||||
if (val != 1)
|
||||
return size;
|
||||
|
||||
tmp_ret = microcode_ops->request_microcode_fw(bsp, µcode_pdev->dev, true);
|
||||
if (tmp_ret != UCODE_NEW)
|
||||
return size;
|
||||
|
||||
get_online_cpus();
|
||||
|
||||
ret = check_online_cpus();
|
||||
if (ret)
|
||||
goto put;
|
||||
|
||||
tmp_ret = microcode_ops->request_microcode_fw(bsp, µcode_pdev->dev, true);
|
||||
if (tmp_ret != UCODE_NEW)
|
||||
goto put;
|
||||
|
||||
mutex_lock(µcode_mutex);
|
||||
ret = microcode_reload_late();
|
||||
mutex_unlock(µcode_mutex);
|
||||
|
@ -170,6 +170,8 @@ NOKPROBE_SYMBOL(skip_prefixes);
|
||||
int can_boost(struct insn *insn, void *addr)
|
||||
{
|
||||
kprobe_opcode_t opcode;
|
||||
insn_byte_t prefix;
|
||||
int i;
|
||||
|
||||
if (search_exception_tables((unsigned long)addr))
|
||||
return 0; /* Page fault may occur on this address. */
|
||||
@ -182,9 +184,14 @@ int can_boost(struct insn *insn, void *addr)
|
||||
if (insn->opcode.nbytes != 1)
|
||||
return 0;
|
||||
|
||||
/* Can't boost Address-size override prefix */
|
||||
if (unlikely(inat_is_address_size_prefix(insn->attr)))
|
||||
return 0;
|
||||
for_each_insn_prefix(insn, i, prefix) {
|
||||
insn_attr_t attr;
|
||||
|
||||
attr = inat_get_opcode_attribute(prefix);
|
||||
/* Can't boost Address-size override prefix and CS override prefix */
|
||||
if (prefix == 0x2e || inat_is_address_size_prefix(attr))
|
||||
return 0;
|
||||
}
|
||||
|
||||
opcode = insn->opcode.bytes[0];
|
||||
|
||||
@ -209,8 +216,8 @@ int can_boost(struct insn *insn, void *addr)
|
||||
/* clear and set flags are boostable */
|
||||
return (opcode == 0xf5 || (0xf7 < opcode && opcode < 0xfe));
|
||||
default:
|
||||
/* CS override prefix and call are not boostable */
|
||||
return (opcode != 0x2e && opcode != 0x9a);
|
||||
/* call is not boostable */
|
||||
return opcode != 0x9a;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1176,6 +1176,8 @@ void __init setup_arch(char **cmdline_p)
|
||||
reserve_initrd();
|
||||
|
||||
acpi_table_upgrade();
|
||||
/* Look for ACPI tables and reserve memory occupied by them. */
|
||||
acpi_boot_table_init();
|
||||
|
||||
vsmp_init();
|
||||
|
||||
@ -1183,11 +1185,6 @@ void __init setup_arch(char **cmdline_p)
|
||||
|
||||
early_platform_quirks();
|
||||
|
||||
/*
|
||||
* Parse the ACPI tables for possible boot-time SMP configuration.
|
||||
*/
|
||||
acpi_boot_table_init();
|
||||
|
||||
early_acpi_boot_init();
|
||||
|
||||
initmem_init();
|
||||
|
@ -6911,6 +6911,7 @@ void kvm_arch_exit(void)
|
||||
cpuhp_remove_state_nocalls(CPUHP_AP_X86_KVM_CLK_ONLINE);
|
||||
#ifdef CONFIG_X86_64
|
||||
pvclock_gtod_unregister_notifier(&pvclock_gtod_notifier);
|
||||
cancel_work_sync(&pvclock_gtod_work);
|
||||
#endif
|
||||
kvm_x86_ops = NULL;
|
||||
kvm_mmu_module_exit();
|
||||
|
@ -253,7 +253,7 @@ static void __wrmsr_safe_regs_on_cpu(void *info)
|
||||
rv->err = wrmsr_safe_regs(rv->regs);
|
||||
}
|
||||
|
||||
int rdmsr_safe_regs_on_cpu(unsigned int cpu, u32 *regs)
|
||||
int rdmsr_safe_regs_on_cpu(unsigned int cpu, u32 regs[8])
|
||||
{
|
||||
int err;
|
||||
struct msr_regs_info rv;
|
||||
@ -266,7 +266,7 @@ int rdmsr_safe_regs_on_cpu(unsigned int cpu, u32 *regs)
|
||||
}
|
||||
EXPORT_SYMBOL(rdmsr_safe_regs_on_cpu);
|
||||
|
||||
int wrmsr_safe_regs_on_cpu(unsigned int cpu, u32 *regs)
|
||||
int wrmsr_safe_regs_on_cpu(unsigned int cpu, u32 regs[8])
|
||||
{
|
||||
int err;
|
||||
struct msr_regs_info rv;
|
||||
|
@ -2673,10 +2673,12 @@ EXPORT_SYMBOL(blk_mq_init_allocated_queue);
|
||||
/* tags can _not_ be used after returning from blk_mq_exit_queue */
|
||||
void blk_mq_exit_queue(struct request_queue *q)
|
||||
{
|
||||
struct blk_mq_tag_set *set = q->tag_set;
|
||||
struct blk_mq_tag_set *set = q->tag_set;
|
||||
|
||||
blk_mq_del_queue_tag_set(q);
|
||||
/* Checks hctx->flags & BLK_MQ_F_TAG_QUEUE_SHARED. */
|
||||
blk_mq_exit_hw_queues(q, set, set->nr_hw_queues);
|
||||
/* May clear BLK_MQ_F_TAG_QUEUE_SHARED in hctx->flags. */
|
||||
blk_mq_del_queue_tag_set(q);
|
||||
}
|
||||
|
||||
/* Basically redo blk_mq_init_queue with queue frozen */
|
||||
|
@ -571,7 +571,7 @@ void crypto_destroy_tfm(void *mem, struct crypto_tfm *tfm)
|
||||
{
|
||||
struct crypto_alg *alg;
|
||||
|
||||
if (unlikely(!mem))
|
||||
if (IS_ERR_OR_NULL(mem))
|
||||
return;
|
||||
|
||||
alg = tfm->__crt_alg;
|
||||
|
@ -332,7 +332,7 @@ static int __init gtdt_import_sbsa_gwdt(struct acpi_gtdt_watchdog *wd,
|
||||
int index)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
int irq = map_gt_gsi(wd->timer_interrupt, wd->timer_flags);
|
||||
int irq;
|
||||
|
||||
/*
|
||||
* According to SBSA specification the size of refresh and control
|
||||
@ -341,7 +341,7 @@ static int __init gtdt_import_sbsa_gwdt(struct acpi_gtdt_watchdog *wd,
|
||||
struct resource res[] = {
|
||||
DEFINE_RES_MEM(wd->control_frame_address, SZ_4K),
|
||||
DEFINE_RES_MEM(wd->refresh_frame_address, SZ_4K),
|
||||
DEFINE_RES_IRQ(irq),
|
||||
{},
|
||||
};
|
||||
int nr_res = ARRAY_SIZE(res);
|
||||
|
||||
@ -351,10 +351,11 @@ static int __init gtdt_import_sbsa_gwdt(struct acpi_gtdt_watchdog *wd,
|
||||
|
||||
if (!(wd->refresh_frame_address && wd->control_frame_address)) {
|
||||
pr_err(FW_BUG "failed to get the Watchdog base address.\n");
|
||||
acpi_unregister_gsi(wd->timer_interrupt);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
irq = map_gt_gsi(wd->timer_interrupt, wd->timer_flags);
|
||||
res[2] = (struct resource)DEFINE_RES_IRQ(irq);
|
||||
if (irq <= 0) {
|
||||
pr_warn("failed to map the Watchdog interrupt.\n");
|
||||
nr_res--;
|
||||
@ -367,7 +368,8 @@ static int __init gtdt_import_sbsa_gwdt(struct acpi_gtdt_watchdog *wd,
|
||||
*/
|
||||
pdev = platform_device_register_simple("sbsa-gwdt", index, res, nr_res);
|
||||
if (IS_ERR(pdev)) {
|
||||
acpi_unregister_gsi(wd->timer_interrupt);
|
||||
if (irq > 0)
|
||||
acpi_unregister_gsi(wd->timer_interrupt);
|
||||
return PTR_ERR(pdev);
|
||||
}
|
||||
|
||||
|
@ -122,23 +122,15 @@ static DEFINE_PER_CPU(struct cpc_desc *, cpc_desc_ptr);
|
||||
*/
|
||||
#define NUM_RETRIES 500ULL
|
||||
|
||||
struct cppc_attr {
|
||||
struct attribute attr;
|
||||
ssize_t (*show)(struct kobject *kobj,
|
||||
struct attribute *attr, char *buf);
|
||||
ssize_t (*store)(struct kobject *kobj,
|
||||
struct attribute *attr, const char *c, ssize_t count);
|
||||
};
|
||||
|
||||
#define define_one_cppc_ro(_name) \
|
||||
static struct cppc_attr _name = \
|
||||
static struct kobj_attribute _name = \
|
||||
__ATTR(_name, 0444, show_##_name, NULL)
|
||||
|
||||
#define to_cpc_desc(a) container_of(a, struct cpc_desc, kobj)
|
||||
|
||||
#define show_cppc_data(access_fn, struct_name, member_name) \
|
||||
static ssize_t show_##member_name(struct kobject *kobj, \
|
||||
struct attribute *attr, char *buf) \
|
||||
struct kobj_attribute *attr, char *buf) \
|
||||
{ \
|
||||
struct cpc_desc *cpc_ptr = to_cpc_desc(kobj); \
|
||||
struct struct_name st_name = {0}; \
|
||||
@ -164,7 +156,7 @@ show_cppc_data(cppc_get_perf_ctrs, cppc_perf_fb_ctrs, reference_perf);
|
||||
show_cppc_data(cppc_get_perf_ctrs, cppc_perf_fb_ctrs, wraparound_time);
|
||||
|
||||
static ssize_t show_feedback_ctrs(struct kobject *kobj,
|
||||
struct attribute *attr, char *buf)
|
||||
struct kobj_attribute *attr, char *buf)
|
||||
{
|
||||
struct cpc_desc *cpc_ptr = to_cpc_desc(kobj);
|
||||
struct cppc_perf_fb_ctrs fb_ctrs = {0};
|
||||
|
@ -37,6 +37,8 @@ static ssize_t cm_write(struct file *file, const char __user * user_buf,
|
||||
sizeof(struct acpi_table_header)))
|
||||
return -EFAULT;
|
||||
uncopied_bytes = max_size = table.length;
|
||||
/* make sure the buf is not allocated */
|
||||
kfree(buf);
|
||||
buf = kzalloc(max_size, GFP_KERNEL);
|
||||
if (!buf)
|
||||
return -ENOMEM;
|
||||
@ -50,6 +52,7 @@ static ssize_t cm_write(struct file *file, const char __user * user_buf,
|
||||
(*ppos + count < count) ||
|
||||
(count > uncopied_bytes)) {
|
||||
kfree(buf);
|
||||
buf = NULL;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@ -71,7 +74,6 @@ static ssize_t cm_write(struct file *file, const char __user * user_buf,
|
||||
add_taint(TAINT_OVERRIDDEN_ACPI_TABLE, LOCKDEP_NOW_UNRELIABLE);
|
||||
}
|
||||
|
||||
kfree(buf);
|
||||
return count;
|
||||
}
|
||||
|
||||
|
@ -705,6 +705,7 @@ int acpi_device_add(struct acpi_device *device,
|
||||
|
||||
result = acpi_device_set_name(device, acpi_device_bus_id);
|
||||
if (result) {
|
||||
kfree_const(acpi_device_bus_id->bus_id);
|
||||
kfree(acpi_device_bus_id);
|
||||
goto err_unlock;
|
||||
}
|
||||
|
@ -732,7 +732,7 @@ acpi_os_table_override(struct acpi_table_header *existing_table,
|
||||
}
|
||||
|
||||
/*
|
||||
* acpi_table_init()
|
||||
* acpi_locate_initial_tables()
|
||||
*
|
||||
* find RSDP, find and checksum SDT/XSDT.
|
||||
* checksum all tables, print SDT/XSDT
|
||||
@ -740,7 +740,7 @@ acpi_os_table_override(struct acpi_table_header *existing_table,
|
||||
* result: sdt_entry[] is initialized
|
||||
*/
|
||||
|
||||
int __init acpi_table_init(void)
|
||||
int __init acpi_locate_initial_tables(void)
|
||||
{
|
||||
acpi_status status;
|
||||
|
||||
@ -755,9 +755,45 @@ int __init acpi_table_init(void)
|
||||
status = acpi_initialize_tables(initial_tables, ACPI_MAX_TABLES, 0);
|
||||
if (ACPI_FAILURE(status))
|
||||
return -EINVAL;
|
||||
acpi_table_initrd_scan();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void __init acpi_reserve_initial_tables(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ACPI_MAX_TABLES; i++) {
|
||||
struct acpi_table_desc *table_desc = &initial_tables[i];
|
||||
u64 start = table_desc->address;
|
||||
u64 size = table_desc->length;
|
||||
|
||||
if (!start || !size)
|
||||
break;
|
||||
|
||||
pr_info("Reserving %4s table memory at [mem 0x%llx-0x%llx]\n",
|
||||
table_desc->signature.ascii, start, start + size - 1);
|
||||
|
||||
memblock_reserve(start, size);
|
||||
}
|
||||
}
|
||||
|
||||
void __init acpi_table_init_complete(void)
|
||||
{
|
||||
acpi_table_initrd_scan();
|
||||
check_multiple_madt();
|
||||
}
|
||||
|
||||
int __init acpi_table_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = acpi_locate_initial_tables();
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
acpi_table_init_complete();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -544,11 +544,13 @@ int ahci_platform_init_host(struct platform_device *pdev,
|
||||
int i, irq, n_ports, rc;
|
||||
|
||||
irq = platform_get_irq(pdev, 0);
|
||||
if (irq <= 0) {
|
||||
if (irq < 0) {
|
||||
if (irq != -EPROBE_DEFER)
|
||||
dev_err(dev, "no irq\n");
|
||||
return irq;
|
||||
}
|
||||
if (!irq)
|
||||
return -EINVAL;
|
||||
|
||||
hpriv->irq = irq;
|
||||
|
||||
|
@ -817,12 +817,19 @@ static int arasan_cf_probe(struct platform_device *pdev)
|
||||
else
|
||||
quirk = CF_BROKEN_UDMA; /* as it is on spear1340 */
|
||||
|
||||
/* if irq is 0, support only PIO */
|
||||
acdev->irq = platform_get_irq(pdev, 0);
|
||||
if (acdev->irq)
|
||||
/*
|
||||
* If there's an error getting IRQ (or we do get IRQ0),
|
||||
* support only PIO
|
||||
*/
|
||||
ret = platform_get_irq(pdev, 0);
|
||||
if (ret > 0) {
|
||||
acdev->irq = ret;
|
||||
irq_handler = arasan_cf_interrupt;
|
||||
else
|
||||
} else if (ret == -EPROBE_DEFER) {
|
||||
return ret;
|
||||
} else {
|
||||
quirk |= CF_BROKEN_MWDMA | CF_BROKEN_UDMA;
|
||||
}
|
||||
|
||||
acdev->pbase = res->start;
|
||||
acdev->vbase = devm_ioremap_nocache(&pdev->dev, res->start,
|
||||
|
@ -169,8 +169,12 @@ static int ixp4xx_pata_probe(struct platform_device *pdev)
|
||||
return -ENOMEM;
|
||||
|
||||
irq = platform_get_irq(pdev, 0);
|
||||
if (irq)
|
||||
if (irq > 0)
|
||||
irq_set_irq_type(irq, IRQ_TYPE_EDGE_RISING);
|
||||
else if (irq < 0)
|
||||
return irq;
|
||||
else
|
||||
return -EINVAL;
|
||||
|
||||
/* Setup expansion bus chip selects */
|
||||
*data->cs0_cfg = data->cs0_bits;
|
||||
|
@ -4110,6 +4110,10 @@ static int mv_platform_probe(struct platform_device *pdev)
|
||||
n_ports = mv_platform_data->n_ports;
|
||||
irq = platform_get_irq(pdev, 0);
|
||||
}
|
||||
if (irq < 0)
|
||||
return irq;
|
||||
if (!irq)
|
||||
return -EINVAL;
|
||||
|
||||
host = ata_host_alloc_pinfo(&pdev->dev, ppi, n_ports);
|
||||
hpriv = devm_kzalloc(&pdev->dev, sizeof(*hpriv), GFP_KERNEL);
|
||||
|
@ -737,6 +737,7 @@ void regmap_debugfs_exit(struct regmap *map)
|
||||
regmap_debugfs_free_dump_cache(map);
|
||||
mutex_unlock(&map->cache_lock);
|
||||
kfree(map->debugfs_name);
|
||||
map->debugfs_name = NULL;
|
||||
} else {
|
||||
struct regmap_debugfs_node *node, *tmp;
|
||||
|
||||
|
@ -56,6 +56,7 @@ int null_zone_init(struct nullb_device *dev)
|
||||
void null_zone_exit(struct nullb_device *dev)
|
||||
{
|
||||
kvfree(dev->zones);
|
||||
dev->zones = NULL;
|
||||
}
|
||||
|
||||
static void null_zone_fill_bio(struct nullb_device *dev, struct bio *bio,
|
||||
|
@ -357,8 +357,10 @@ static int qcom_ebi2_probe(struct platform_device *pdev)
|
||||
|
||||
/* Figure out the chipselect */
|
||||
ret = of_property_read_u32(child, "reg", &csindex);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
of_node_put(child);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (csindex > 5) {
|
||||
dev_err(dev,
|
||||
|
@ -775,6 +775,13 @@ static int probe_gdrom_setupqueue(void)
|
||||
static int probe_gdrom(struct platform_device *devptr)
|
||||
{
|
||||
int err;
|
||||
|
||||
/*
|
||||
* Ensure our "one" device is initialized properly in case of previous
|
||||
* usages of it
|
||||
*/
|
||||
memset(&gd, 0, sizeof(gd));
|
||||
|
||||
/* Start the device */
|
||||
if (gdrom_execute_diagnostic() != 1) {
|
||||
pr_warning("ATA Probe for GDROM failed\n");
|
||||
@ -857,6 +864,8 @@ static int remove_gdrom(struct platform_device *devptr)
|
||||
if (gdrom_major)
|
||||
unregister_blkdev(gdrom_major, GDROM_DEV_NAME);
|
||||
unregister_cdrom(gd.cd_info);
|
||||
kfree(gd.cd_info);
|
||||
kfree(gd.toc);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -872,7 +881,7 @@ static struct platform_driver gdrom_driver = {
|
||||
static int __init init_gdrom(void)
|
||||
{
|
||||
int rc;
|
||||
gd.toc = NULL;
|
||||
|
||||
rc = platform_driver_register(&gdrom_driver);
|
||||
if (rc)
|
||||
return rc;
|
||||
@ -888,8 +897,6 @@ static void __exit exit_gdrom(void)
|
||||
{
|
||||
platform_device_unregister(pd);
|
||||
platform_driver_unregister(&gdrom_driver);
|
||||
kfree(gd.toc);
|
||||
kfree(gd.cd_info);
|
||||
}
|
||||
|
||||
module_init(init_gdrom);
|
||||
|
@ -975,6 +975,8 @@ static acpi_status hpet_resources(struct acpi_resource *res, void *data)
|
||||
if (ACPI_SUCCESS(status)) {
|
||||
hdp->hd_phys_address = addr.address.minimum;
|
||||
hdp->hd_address = ioremap(addr.address.minimum, addr.address.address_length);
|
||||
if (!hdp->hd_address)
|
||||
return AE_ERROR;
|
||||
|
||||
if (hpet_is_known(hdp)) {
|
||||
iounmap(hdp->hd_address);
|
||||
@ -988,6 +990,8 @@ static acpi_status hpet_resources(struct acpi_resource *res, void *data)
|
||||
hdp->hd_phys_address = fixmem32->address;
|
||||
hdp->hd_address = ioremap(fixmem32->address,
|
||||
HPET_RANGE_SIZE);
|
||||
if (!hdp->hd_address)
|
||||
return AE_ERROR;
|
||||
|
||||
if (hpet_is_known(hdp)) {
|
||||
iounmap(hdp->hd_address);
|
||||
|
@ -112,6 +112,9 @@ void tpm_bios_log_setup(struct tpm_chip *chip)
|
||||
int log_version;
|
||||
int rc = 0;
|
||||
|
||||
if (chip->flags & TPM_CHIP_FLAG_VIRTUAL)
|
||||
return;
|
||||
|
||||
rc = tpm_read_log(chip);
|
||||
if (rc < 0)
|
||||
return;
|
||||
|
@ -960,6 +960,7 @@ static int tpm2_get_cc_attrs_tbl(struct tpm_chip *chip)
|
||||
|
||||
if (nr_commands !=
|
||||
be32_to_cpup((__be32 *)&buf.data[TPM_HEADER_SIZE + 5])) {
|
||||
rc = -EFAULT;
|
||||
tpm_buf_destroy(&buf);
|
||||
goto out;
|
||||
}
|
||||
|
@ -159,12 +159,23 @@ static int tpk_ioctl(struct tty_struct *tty,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* TTY operations hangup function.
|
||||
*/
|
||||
static void tpk_hangup(struct tty_struct *tty)
|
||||
{
|
||||
struct ttyprintk_port *tpkp = tty->driver_data;
|
||||
|
||||
tty_port_hangup(&tpkp->port);
|
||||
}
|
||||
|
||||
static const struct tty_operations ttyprintk_ops = {
|
||||
.open = tpk_open,
|
||||
.close = tpk_close,
|
||||
.write = tpk_write,
|
||||
.write_room = tpk_write_room,
|
||||
.ioctl = tpk_ioctl,
|
||||
.hangup = tpk_hangup,
|
||||
};
|
||||
|
||||
static const struct tty_port_operations null_ops = { };
|
||||
|
@ -74,6 +74,7 @@ struct clk_pm_cpu {
|
||||
void __iomem *reg_div;
|
||||
u8 shift_div;
|
||||
struct regmap *nb_pm_base;
|
||||
unsigned long l1_expiration;
|
||||
};
|
||||
|
||||
#define to_clk_double_div(_hw) container_of(_hw, struct clk_double_div, hw)
|
||||
@ -428,33 +429,6 @@ static u8 clk_pm_cpu_get_parent(struct clk_hw *hw)
|
||||
return val;
|
||||
}
|
||||
|
||||
static int clk_pm_cpu_set_parent(struct clk_hw *hw, u8 index)
|
||||
{
|
||||
struct clk_pm_cpu *pm_cpu = to_clk_pm_cpu(hw);
|
||||
struct regmap *base = pm_cpu->nb_pm_base;
|
||||
int load_level;
|
||||
|
||||
/*
|
||||
* We set the clock parent only if the DVFS is available but
|
||||
* not enabled.
|
||||
*/
|
||||
if (IS_ERR(base) || armada_3700_pm_dvfs_is_enabled(base))
|
||||
return -EINVAL;
|
||||
|
||||
/* Set the parent clock for all the load level */
|
||||
for (load_level = 0; load_level < LOAD_LEVEL_NR; load_level++) {
|
||||
unsigned int reg, mask, val,
|
||||
offset = ARMADA_37XX_NB_TBG_SEL_OFF;
|
||||
|
||||
armada_3700_pm_dvfs_update_regs(load_level, ®, &offset);
|
||||
|
||||
val = index << offset;
|
||||
mask = ARMADA_37XX_NB_TBG_SEL_MASK << offset;
|
||||
regmap_update_bits(base, reg, mask, val);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static unsigned long clk_pm_cpu_recalc_rate(struct clk_hw *hw,
|
||||
unsigned long parent_rate)
|
||||
{
|
||||
@ -502,8 +476,10 @@ static long clk_pm_cpu_round_rate(struct clk_hw *hw, unsigned long rate,
|
||||
}
|
||||
|
||||
/*
|
||||
* Switching the CPU from the L2 or L3 frequencies (300 and 200 Mhz
|
||||
* respectively) to L0 frequency (1.2 Ghz) requires a significant
|
||||
* Workaround when base CPU frequnecy is 1000 or 1200 MHz
|
||||
*
|
||||
* Switching the CPU from the L2 or L3 frequencies (250/300 or 200 MHz
|
||||
* respectively) to L0 frequency (1/1.2 GHz) requires a significant
|
||||
* amount of time to let VDD stabilize to the appropriate
|
||||
* voltage. This amount of time is large enough that it cannot be
|
||||
* covered by the hardware countdown register. Due to this, the CPU
|
||||
@ -513,26 +489,56 @@ static long clk_pm_cpu_round_rate(struct clk_hw *hw, unsigned long rate,
|
||||
* To work around this problem, we prevent switching directly from the
|
||||
* L2/L3 frequencies to the L0 frequency, and instead switch to the L1
|
||||
* frequency in-between. The sequence therefore becomes:
|
||||
* 1. First switch from L2/L3(200/300MHz) to L1(600MHZ)
|
||||
* 1. First switch from L2/L3 (200/250/300 MHz) to L1 (500/600 MHz)
|
||||
* 2. Sleep 20ms for stabling VDD voltage
|
||||
* 3. Then switch from L1(600MHZ) to L0(1200Mhz).
|
||||
* 3. Then switch from L1 (500/600 MHz) to L0 (1000/1200 MHz).
|
||||
*/
|
||||
static void clk_pm_cpu_set_rate_wa(unsigned long rate, struct regmap *base)
|
||||
static void clk_pm_cpu_set_rate_wa(struct clk_pm_cpu *pm_cpu,
|
||||
unsigned int new_level, unsigned long rate,
|
||||
struct regmap *base)
|
||||
{
|
||||
unsigned int cur_level;
|
||||
|
||||
if (rate != 1200 * 1000 * 1000)
|
||||
return;
|
||||
|
||||
regmap_read(base, ARMADA_37XX_NB_CPU_LOAD, &cur_level);
|
||||
cur_level &= ARMADA_37XX_NB_CPU_LOAD_MASK;
|
||||
if (cur_level <= ARMADA_37XX_DVFS_LOAD_1)
|
||||
|
||||
if (cur_level == new_level)
|
||||
return;
|
||||
|
||||
/*
|
||||
* System wants to go to L1 on its own. If we are going from L2/L3,
|
||||
* remember when 20ms will expire. If from L0, set the value so that
|
||||
* next switch to L0 won't have to wait.
|
||||
*/
|
||||
if (new_level == ARMADA_37XX_DVFS_LOAD_1) {
|
||||
if (cur_level == ARMADA_37XX_DVFS_LOAD_0)
|
||||
pm_cpu->l1_expiration = jiffies;
|
||||
else
|
||||
pm_cpu->l1_expiration = jiffies + msecs_to_jiffies(20);
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* If we are setting to L2/L3, just invalidate L1 expiration time,
|
||||
* sleeping is not needed.
|
||||
*/
|
||||
if (rate < 1000*1000*1000)
|
||||
goto invalidate_l1_exp;
|
||||
|
||||
/*
|
||||
* We are going to L0 with rate >= 1GHz. Check whether we have been at
|
||||
* L1 for long enough time. If not, go to L1 for 20ms.
|
||||
*/
|
||||
if (pm_cpu->l1_expiration && jiffies >= pm_cpu->l1_expiration)
|
||||
goto invalidate_l1_exp;
|
||||
|
||||
regmap_update_bits(base, ARMADA_37XX_NB_CPU_LOAD,
|
||||
ARMADA_37XX_NB_CPU_LOAD_MASK,
|
||||
ARMADA_37XX_DVFS_LOAD_1);
|
||||
msleep(20);
|
||||
|
||||
invalidate_l1_exp:
|
||||
pm_cpu->l1_expiration = 0;
|
||||
}
|
||||
|
||||
static int clk_pm_cpu_set_rate(struct clk_hw *hw, unsigned long rate,
|
||||
@ -566,7 +572,9 @@ static int clk_pm_cpu_set_rate(struct clk_hw *hw, unsigned long rate,
|
||||
reg = ARMADA_37XX_NB_CPU_LOAD;
|
||||
mask = ARMADA_37XX_NB_CPU_LOAD_MASK;
|
||||
|
||||
clk_pm_cpu_set_rate_wa(rate, base);
|
||||
/* Apply workaround when base CPU frequency is 1000 or 1200 MHz */
|
||||
if (parent_rate >= 1000*1000*1000)
|
||||
clk_pm_cpu_set_rate_wa(pm_cpu, load_level, rate, base);
|
||||
|
||||
regmap_update_bits(base, reg, mask, load_level);
|
||||
|
||||
@ -580,7 +588,6 @@ static int clk_pm_cpu_set_rate(struct clk_hw *hw, unsigned long rate,
|
||||
|
||||
static const struct clk_ops clk_pm_cpu_ops = {
|
||||
.get_parent = clk_pm_cpu_get_parent,
|
||||
.set_parent = clk_pm_cpu_set_parent,
|
||||
.round_rate = clk_pm_cpu_round_rate,
|
||||
.set_rate = clk_pm_cpu_set_rate,
|
||||
.recalc_rate = clk_pm_cpu_recalc_rate,
|
||||
|
@ -93,6 +93,7 @@ static const struct of_device_id qcom_a53pll_match_table[] = {
|
||||
{ .compatible = "qcom,msm8916-a53pll" },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, qcom_a53pll_match_table);
|
||||
|
||||
static struct platform_driver qcom_a53pll_driver = {
|
||||
.probe = qcom_a53pll_probe,
|
||||
|
@ -541,8 +541,13 @@ static const struct samsung_gate_clock top1_gate_clks[] __initconst = {
|
||||
GATE(CLK_ACLK_FSYS0_200, "aclk_fsys0_200", "dout_aclk_fsys0_200",
|
||||
ENABLE_ACLK_TOP13, 28, CLK_SET_RATE_PARENT |
|
||||
CLK_IS_CRITICAL, 0),
|
||||
/*
|
||||
* This clock is required for the CMU_FSYS1 registers access, keep it
|
||||
* enabled permanently until proper runtime PM support is added.
|
||||
*/
|
||||
GATE(CLK_ACLK_FSYS1_200, "aclk_fsys1_200", "dout_aclk_fsys1_200",
|
||||
ENABLE_ACLK_TOP13, 24, CLK_SET_RATE_PARENT, 0),
|
||||
ENABLE_ACLK_TOP13, 24, CLK_SET_RATE_PARENT |
|
||||
CLK_IS_CRITICAL, 0),
|
||||
|
||||
GATE(CLK_SCLK_PHY_FSYS1_26M, "sclk_phy_fsys1_26m",
|
||||
"dout_sclk_phy_fsys1_26m", ENABLE_SCLK_TOP1_FSYS11,
|
||||
|
@ -157,6 +157,7 @@ static void __init __socfpga_gate_init(struct device_node *node,
|
||||
if (IS_ERR(socfpga_clk->sys_mgr_base_addr)) {
|
||||
pr_err("%s: failed to find altr,sys-mgr regmap!\n",
|
||||
__func__);
|
||||
kfree(socfpga_clk);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -40,10 +40,10 @@ static int uniphier_clk_mux_set_parent(struct clk_hw *hw, u8 index)
|
||||
static u8 uniphier_clk_mux_get_parent(struct clk_hw *hw)
|
||||
{
|
||||
struct uniphier_clk_mux *mux = to_uniphier_clk_mux(hw);
|
||||
int num_parents = clk_hw_get_num_parents(hw);
|
||||
unsigned int num_parents = clk_hw_get_num_parents(hw);
|
||||
int ret;
|
||||
unsigned int val;
|
||||
u8 i;
|
||||
unsigned int i;
|
||||
|
||||
ret = regmap_read(mux->regmap, mux->reg, &val);
|
||||
if (ret)
|
||||
|
@ -25,6 +25,10 @@
|
||||
|
||||
#include "cpufreq-dt.h"
|
||||
|
||||
/* Clk register set */
|
||||
#define ARMADA_37XX_CLK_TBG_SEL 0
|
||||
#define ARMADA_37XX_CLK_TBG_SEL_CPU_OFF 22
|
||||
|
||||
/* Power management in North Bridge register set */
|
||||
#define ARMADA_37XX_NB_L0L1 0x18
|
||||
#define ARMADA_37XX_NB_L2L3 0x1C
|
||||
@ -69,6 +73,8 @@
|
||||
#define LOAD_LEVEL_NR 4
|
||||
|
||||
#define MIN_VOLT_MV 1000
|
||||
#define MIN_VOLT_MV_FOR_L1_1000MHZ 1108
|
||||
#define MIN_VOLT_MV_FOR_L1_1200MHZ 1155
|
||||
|
||||
/* AVS value for the corresponding voltage (in mV) */
|
||||
static int avs_map[] = {
|
||||
@ -120,10 +126,15 @@ static struct armada_37xx_dvfs *armada_37xx_cpu_freq_info_get(u32 freq)
|
||||
* will be configured then the DVFS will be enabled.
|
||||
*/
|
||||
static void __init armada37xx_cpufreq_dvfs_setup(struct regmap *base,
|
||||
struct clk *clk, u8 *divider)
|
||||
struct regmap *clk_base, u8 *divider)
|
||||
{
|
||||
u32 cpu_tbg_sel;
|
||||
int load_lvl;
|
||||
struct clk *parent;
|
||||
|
||||
/* Determine to which TBG clock is CPU connected */
|
||||
regmap_read(clk_base, ARMADA_37XX_CLK_TBG_SEL, &cpu_tbg_sel);
|
||||
cpu_tbg_sel >>= ARMADA_37XX_CLK_TBG_SEL_CPU_OFF;
|
||||
cpu_tbg_sel &= ARMADA_37XX_NB_TBG_SEL_MASK;
|
||||
|
||||
for (load_lvl = 0; load_lvl < LOAD_LEVEL_NR; load_lvl++) {
|
||||
unsigned int reg, mask, val, offset = 0;
|
||||
@ -142,6 +153,11 @@ static void __init armada37xx_cpufreq_dvfs_setup(struct regmap *base,
|
||||
mask = (ARMADA_37XX_NB_CLK_SEL_MASK
|
||||
<< ARMADA_37XX_NB_CLK_SEL_OFF);
|
||||
|
||||
/* Set TBG index, for all levels we use the same TBG */
|
||||
val = cpu_tbg_sel << ARMADA_37XX_NB_TBG_SEL_OFF;
|
||||
mask = (ARMADA_37XX_NB_TBG_SEL_MASK
|
||||
<< ARMADA_37XX_NB_TBG_SEL_OFF);
|
||||
|
||||
/*
|
||||
* Set cpu divider based on the pre-computed array in
|
||||
* order to have balanced step.
|
||||
@ -160,14 +176,6 @@ static void __init armada37xx_cpufreq_dvfs_setup(struct regmap *base,
|
||||
|
||||
regmap_update_bits(base, reg, mask, val);
|
||||
}
|
||||
|
||||
/*
|
||||
* Set cpu clock source, for all the level we keep the same
|
||||
* clock source that the one already configured. For this one
|
||||
* we need to use the clock framework
|
||||
*/
|
||||
parent = clk_get_parent(clk);
|
||||
clk_set_parent(clk, parent);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -202,6 +210,8 @@ static u32 armada_37xx_avs_val_match(int target_vm)
|
||||
* - L2 & L3 voltage should be about 150mv smaller than L0 voltage.
|
||||
* This function calculates L1 & L2 & L3 AVS values dynamically based
|
||||
* on L0 voltage and fill all AVS values to the AVS value table.
|
||||
* When base CPU frequency is 1000 or 1200 MHz then there is additional
|
||||
* minimal avs value for load L1.
|
||||
*/
|
||||
static void __init armada37xx_cpufreq_avs_configure(struct regmap *base,
|
||||
struct armada_37xx_dvfs *dvfs)
|
||||
@ -233,6 +243,19 @@ static void __init armada37xx_cpufreq_avs_configure(struct regmap *base,
|
||||
for (load_level = 1; load_level < LOAD_LEVEL_NR; load_level++)
|
||||
dvfs->avs[load_level] = avs_min;
|
||||
|
||||
/*
|
||||
* Set the avs values for load L0 and L1 when base CPU frequency
|
||||
* is 1000/1200 MHz to its typical initial values according to
|
||||
* the Armada 3700 Hardware Specifications.
|
||||
*/
|
||||
if (dvfs->cpu_freq_max >= 1000*1000*1000) {
|
||||
if (dvfs->cpu_freq_max >= 1200*1000*1000)
|
||||
avs_min = armada_37xx_avs_val_match(MIN_VOLT_MV_FOR_L1_1200MHZ);
|
||||
else
|
||||
avs_min = armada_37xx_avs_val_match(MIN_VOLT_MV_FOR_L1_1000MHZ);
|
||||
dvfs->avs[0] = dvfs->avs[1] = avs_min;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@ -252,6 +275,26 @@ static void __init armada37xx_cpufreq_avs_configure(struct regmap *base,
|
||||
target_vm = avs_map[l0_vdd_min] - 150;
|
||||
target_vm = target_vm > MIN_VOLT_MV ? target_vm : MIN_VOLT_MV;
|
||||
dvfs->avs[2] = dvfs->avs[3] = armada_37xx_avs_val_match(target_vm);
|
||||
|
||||
/*
|
||||
* Fix the avs value for load L1 when base CPU frequency is 1000/1200 MHz,
|
||||
* otherwise the CPU gets stuck when switching from load L1 to load L0.
|
||||
* Also ensure that avs value for load L1 is not higher than for L0.
|
||||
*/
|
||||
if (dvfs->cpu_freq_max >= 1000*1000*1000) {
|
||||
u32 avs_min_l1;
|
||||
|
||||
if (dvfs->cpu_freq_max >= 1200*1000*1000)
|
||||
avs_min_l1 = armada_37xx_avs_val_match(MIN_VOLT_MV_FOR_L1_1200MHZ);
|
||||
else
|
||||
avs_min_l1 = armada_37xx_avs_val_match(MIN_VOLT_MV_FOR_L1_1000MHZ);
|
||||
|
||||
if (avs_min_l1 > dvfs->avs[0])
|
||||
avs_min_l1 = dvfs->avs[0];
|
||||
|
||||
if (dvfs->avs[1] < avs_min_l1)
|
||||
dvfs->avs[1] = avs_min_l1;
|
||||
}
|
||||
}
|
||||
|
||||
static void __init armada37xx_cpufreq_avs_setup(struct regmap *base,
|
||||
@ -360,11 +403,16 @@ static int __init armada37xx_cpufreq_driver_init(void)
|
||||
struct platform_device *pdev;
|
||||
unsigned long freq;
|
||||
unsigned int cur_frequency, base_frequency;
|
||||
struct regmap *nb_pm_base, *avs_base;
|
||||
struct regmap *nb_clk_base, *nb_pm_base, *avs_base;
|
||||
struct device *cpu_dev;
|
||||
int load_lvl, ret;
|
||||
struct clk *clk, *parent;
|
||||
|
||||
nb_clk_base =
|
||||
syscon_regmap_lookup_by_compatible("marvell,armada-3700-periph-clock-nb");
|
||||
if (IS_ERR(nb_clk_base))
|
||||
return -ENODEV;
|
||||
|
||||
nb_pm_base =
|
||||
syscon_regmap_lookup_by_compatible("marvell,armada-3700-nb-pm");
|
||||
|
||||
@ -423,7 +471,7 @@ static int __init armada37xx_cpufreq_driver_init(void)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
dvfs = armada_37xx_cpu_freq_info_get(cur_frequency);
|
||||
dvfs = armada_37xx_cpu_freq_info_get(base_frequency);
|
||||
if (!dvfs) {
|
||||
clk_put(clk);
|
||||
return -EINVAL;
|
||||
@ -441,7 +489,7 @@ static int __init armada37xx_cpufreq_driver_init(void)
|
||||
armada37xx_cpufreq_avs_configure(avs_base, dvfs);
|
||||
armada37xx_cpufreq_avs_setup(avs_base, dvfs);
|
||||
|
||||
armada37xx_cpufreq_dvfs_setup(nb_pm_base, clk, dvfs->divider);
|
||||
armada37xx_cpufreq_dvfs_setup(nb_pm_base, nb_clk_base, dvfs->divider);
|
||||
clk_put(clk);
|
||||
|
||||
for (load_lvl = ARMADA_37XX_DVFS_LOAD_0; load_lvl < LOAD_LEVEL_NR;
|
||||
@ -475,7 +523,7 @@ disable_dvfs:
|
||||
remove_opp:
|
||||
/* clean-up the already added opp before leaving */
|
||||
while (load_lvl-- > ARMADA_37XX_DVFS_LOAD_0) {
|
||||
freq = cur_frequency / dvfs->divider[load_lvl];
|
||||
freq = base_frequency / dvfs->divider[load_lvl];
|
||||
dev_pm_opp_remove(cpu_dev, freq);
|
||||
}
|
||||
|
||||
|
@ -238,12 +238,12 @@ static int adf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
if (ret)
|
||||
goto out_err_free_reg;
|
||||
|
||||
set_bit(ADF_STATUS_PF_RUNNING, &accel_dev->status);
|
||||
|
||||
ret = adf_dev_init(accel_dev);
|
||||
if (ret)
|
||||
goto out_err_dev_shutdown;
|
||||
|
||||
set_bit(ADF_STATUS_PF_RUNNING, &accel_dev->status);
|
||||
|
||||
ret = adf_dev_start(accel_dev);
|
||||
if (ret)
|
||||
goto out_err_dev_stop;
|
||||
|
@ -238,12 +238,12 @@ static int adf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
if (ret)
|
||||
goto out_err_free_reg;
|
||||
|
||||
set_bit(ADF_STATUS_PF_RUNNING, &accel_dev->status);
|
||||
|
||||
ret = adf_dev_init(accel_dev);
|
||||
if (ret)
|
||||
goto out_err_dev_shutdown;
|
||||
|
||||
set_bit(ADF_STATUS_PF_RUNNING, &accel_dev->status);
|
||||
|
||||
ret = adf_dev_start(accel_dev);
|
||||
if (ret)
|
||||
goto out_err_dev_stop;
|
||||
|
@ -330,19 +330,32 @@ int adf_isr_resource_alloc(struct adf_accel_dev *accel_dev)
|
||||
|
||||
ret = adf_isr_alloc_msix_entry_table(accel_dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
if (adf_enable_msix(accel_dev))
|
||||
goto err_out;
|
||||
|
||||
if (adf_setup_bh(accel_dev))
|
||||
goto err_out;
|
||||
ret = adf_enable_msix(accel_dev);
|
||||
if (ret)
|
||||
goto err_free_msix_table;
|
||||
|
||||
if (adf_request_irqs(accel_dev))
|
||||
goto err_out;
|
||||
ret = adf_setup_bh(accel_dev);
|
||||
if (ret)
|
||||
goto err_disable_msix;
|
||||
|
||||
ret = adf_request_irqs(accel_dev);
|
||||
if (ret)
|
||||
goto err_cleanup_bh;
|
||||
|
||||
return 0;
|
||||
|
||||
err_cleanup_bh:
|
||||
adf_cleanup_bh(accel_dev);
|
||||
|
||||
err_disable_msix:
|
||||
adf_disable_msix(&accel_dev->accel_pci_dev);
|
||||
|
||||
err_free_msix_table:
|
||||
adf_isr_free_msix_entry_table(accel_dev);
|
||||
|
||||
err_out:
|
||||
adf_isr_resource_free(accel_dev);
|
||||
return -EFAULT;
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(adf_isr_resource_alloc);
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user