Merge remote-tracking branch 'remotes/origin/tmp-aefd2d632eb0' into msm-lahaina
* remotes/origin/tmp-aefd2d632eb0: ANDROID: binder: fix sleeping from invalid function caused by RT inheritance FROMGIT: scsi: ufs: override auto suspend tunables for ufs FROMGIT: scsi: core: allow auto suspend override by low-level driver Linux 5.4-rc6 net: fix installing orphaned programs net: cls_bpf: fix NULL deref on offload filter removal selftests: bpf: Skip write only files in debugfs selftests: net: reuseport_dualstack: fix uninitalized parameter r8169: fix wrong PHY ID issue with RTL8168dp net: dsa: bcm_sf2: Fix IMP setup for port different than 8 net: phylink: Fix phylink_dbg() macro gve: Fixes DMA synchronization. inet: stop leaking jiffies on the wire ixgbe: Remove duplicate clear_bit() call Documentation: networking: device drivers: Remove stray asterisks e1000: fix memory leaks i40e: Fix receive buffer starvation for AF_XDP igb: Fix constant media auto sense switching when no cable is connected net: ethernet: arc: add the missed clk_disable_unprepare ANDROID: gki_defconfig: enable CONFIG_KEYBOARD_GPIO NFS: Fix an RCU lock leak in nfs4_refresh_delegation_stateid() NFSv4: Don't allow a cached open with a revoked delegation arm64: apply ARM64_ERRATUM_843419 workaround for Brahma-B53 core arm64: Brahma-B53 is SSB and spectre v2 safe arm64: apply ARM64_ERRATUM_845719 workaround for Brahma-B53 core igb: Enable media autosense for the i350. igb/igc: Don't warn on fatal read failures when the device is removed tcp: increase tcp_max_syn_backlog max value net: increase SOMAXCONN to 4096 netdevsim: Fix use-after-free during device dismantle rxrpc: Fix handling of last subpacket of jumbo packet usb: dwc3: gadget: fix race when disabling ep with cancelled xfers ANDROID: Remove KVM_INTEL allmodconfig workaround ANDROID: Fix x86_64 allmodconfig build iocost: don't nest spin_lock_irq in ioc_weight_write() s390/idle: fix cpu idle time calculation s390/unwind: fix mixing regs and sp s390/cmm: fix information leak in cmm_timeout_handler() arm64: cpufeature: Enable Qualcomm Falkor errata 1009 for Kryo KVM: vmx, svm: always run with EFER.NXE=1 when shadow paging is active kvm: call kvm_arch_destroy_vm if vm creation fails efi/efi_test: Lock down /dev/efi_test and require CAP_SYS_ADMIN x86, efi: Never relocate kernel below lowest acceptable address efi: libstub/arm: Account for firmware reserved memory at the base of RAM efi/random: Treat EFI_RNG_PROTOCOL output as bootloader randomness efi/tpm: Return -EINVAL when determining tpm final events log size fails efi: Make CONFIG_EFI_RCI2_TABLE selectable on x86 only hv_netvsc: Fix error handling in netvsc_attach() hv_netvsc: Fix error handling in netvsc_set_features() cxgb4: fix panic when attaching to ULD fail net: annotate lockless accesses to sk->sk_napi_id FROMLIST: scsi: ufs-qcom: enter and exit hibern8 during clock scaling FROMLIST: scsi: ufs: export hibern8 entry and exit ANDROID: scsi: ufs: UFS crypto variant operations API ANDROID: gki_defconfig: enable inline encryption FROMLIST: ext4: add inline encryption support FROMLIST: f2fs: add inline encryption support FROMLIST: fscrypt: add inline encryption support FROMLIST: scsi: ufs: Add inline encryption support to UFS FROMLIST: scsi: ufs: UFS crypto API FROMLIST: scsi: ufs: UFS driver v2.1 spec crypto additions FROMLIST: block: blk-crypto for Inline Encryption ANDROID: block: Fix bio_crypt_should_process WARN_ON ALSA: timer: Fix mutex deadlock at releasing card FROMLIST: block: Add encryption context to struct bio io_uring: ensure we clear io_kiocb->result before each issue parisc: fix frame pointer in ftrace_regs_caller() net: annotate accesses to sk->sk_incoming_cpu FROMLIST: block: Keyslot Manager for Inline Encryption FROMLIST: f2fs: add support for IV_INO_LBLK_64 encryption policies FROMLIST: ext4: add support for IV_INO_LBLK_64 encryption policies FROMLIST: fscrypt: add support for IV_INO_LBLK_64 policies FROMLIST: docs: ioctl-number: document fscrypt ioctl numbers FROMLIST: fscrypt: zeroize fscrypt_info before freeing FROMLIST: fscrypt: remove struct fscrypt_ctx FROMLIST: fscrypt: invoke crypto API for ESSIV handling mlxsw: core: Unpublish devlink parameters during reload qed: Optimize execution time for nvm attributes configuration. vxlan: fix unexpected failure of vxlan_changelink() qed: fix spelling mistake "queuess" -> "queues" SUNRPC: Destroy the back channel when we destroy the host transport SUNRPC: The RDMA back channel mustn't disappear while requests are outstanding SUNRPC: The TCP back channel mustn't disappear while requests are outstanding drm/amdgpu: enable -msse2 for GCC 7.1+ users drm/amdgpu: fix stack alignment ABI mismatch for GCC 7.1+ drm/amdgpu: fix stack alignment ABI mismatch for Clang drm/radeon: Fix EEH during kexec drm/amdgpu/gmc10: properly set BANK_SELECT and FRAGMENT_SIZE drm/amdgpu/powerplay/vega10: allow undervolting in p7 dc.c:use kzalloc without test drm/amd/display: setting the DIG_MODE to the correct value. drm/amd/display: Passive DP->HDMI dongle detection fix drm/amd/display: add 50us buffer as WA for pstate switch in active drm/amd/display: Allow inverted gamma drm/amd/display: do not synchronize "drr" displays drm/amdgpu: If amdgpu_ib_schedule fails return back the error. drm/sched: Set error to s_fence if HW job submission failed. drm/amdgpu/gfx10: update gfx golden settings for navi12 drm/amdgpu/gfx10: update gfx golden settings for navi14 drm/amdgpu/gfx10: update gfx golden settings drm/amd/display: Change Navi14's DWB flag to 1 drm/amdgpu/sdma5: do not execute 0-sized IBs (v2) drm/amdgpu: Fix SDMA hang when performing VKexample test iwlwifi: fw api: support new API for scan config cmd mt76: dma: fix buffer unmap with non-linear skbs mt76: mt76x2e: disable pcie_aspm by default ALSA: hda - Fix mutex deadlock in HDMI codec driver usb: cdns3: gadget: Fix g_audio use case when connected to Super-Speed host usb: cdns3: gadget: reset EP_CLAIMED flag while unloading gfs2: Fix initialisation of args for remount iommu/vt-d: Fix panic after kexec -p for kdump iommu/amd: Apply the same IVRS IOAPIC workaround to Acer Aspire A315-41 iommu/ipmmu-vmsa: Remove dev_err() on platform_get_irq() failure nl80211: fix validation of mesh path nexthop nl80211: Disallow setting of HT for channel 14 USB: serial: whiteheat: fix line-speed endianness USB: serial: whiteheat: fix potential slab corruption MAINTAINERS: Change to my personal email address drm/i915: Fix PCH reference clock for FDI on HSW/BDW net: rtnetlink: fix a typo fbd -> fdb net/smc: fix refcounting for non-blocking connect() bonding: fix using uninitialized mode_lock net: fec_ptp: Use platform_get_irq_xxx_optional() to avoid error message net: fec_main: Use platform_get_irq_byname_optional() to avoid error message MAINTAINERS: remove Dave Watson as TLS maintainer vxlan: check tun_info options_len properly erspan: fix the tun_info options_len check for erspan net: hisilicon: Fix ping latency when deal with high throughput net/mlx4_core: Dynamically set guaranteed amount of counters per VF net/mlx5e: Initialize on stack link modes bitmap net/mlx5e: Fix ethtool self test: link speed net/mlx5e: Fix handling of compressed CQEs in case of low NAPI budget net/mlx5e: Don't store direct pointer to action's tunnel info net/mlx5: Fix NULL pointer dereference in extended destination net/mlx5: Fix rtable reference leak net/mlx5e: Only skip encap flows update when encap init failed net/mlx5e: Replace kfree with kvfree when free vhca stats net/mlx5e: Remove incorrect match criteria assignment line net/mlx5e: Determine source port properly for vlan push action net/mlx5: Fix flow counter list auto bits struct net: mscc: ocelot: refuse to overwrite the port's native vlan net: mscc: ocelot: fix vlan_filtering when enslaving to bridge before link is up wimax: i2400: Fix memory leak in i2400m_op_rfkill_sw_toggle drm/i915/tgl: Fix doc not corresponding to code ANDROID: staging: ion: Fix dynamic heap ID assignment ANDROID: Fix typo for FROMLIST: section drm/panfrost: Don't dereference bogus MMU pointers ANDROID: media: increase video max frame number drm/panfrost: fix -Wmissing-prototypes warnings net: hisilicon: Fix "Trying to free already-free IRQ" fjes: Handle workqueue allocation failure Revert "sched: Rework pick_next_task() slow-path" arm64: cpufeature: Enable Qualcomm Falkor/Kryo errata 1003 drm/etnaviv: fix dumping of iommuv2 drm/etnaviv: reinstate MMUv1 command buffer window check drm/etnaviv: fix deadlock in GPU coredump arm64: Ensure VM_WRITE|VM_SHARED ptes are clean by default um-ubd: Entrust re-queue to the upper layers nvme-multipath: remove unused groups_only mode in ana log nvme-multipath: fix possible io hang after ctrl reconnect powerpc/powernv: Fix CPU idle to be called with IRQs disabled sched/topology: Allow sched_asym_cpucapacity to be disabled sched/topology: Don't try to build empty sched domains USB: gadget: Reject endpoints with 0 maxpacket value powerpc/prom_init: Undo relocation before entering secure mode ANDROID: dummy_cpufreq: Implement get() ANDROID: gki_defconfig: enable CONFIG_CPUSETS ANDROID: virtio: virtio_input: Set the amount of multitouch slots in virtio input scsi: qla2xxx: stop timer in shutdown path hwmon: (ina3221) Fix read timeout issue net: usb: lan78xx: Disable interrupts before calling generic_handle_irq() Revert "ANDROID: Revert "kheaders: make headers archive reproducible"" net: dsa: sja1105: improve NET_DSA_SJA1105_TAS dependency net: ethernet: ftgmac100: Fix DMA coherency issue with SW checksum net: fix sk_page_frag() recursion from memory reclaim udp: fix data-race in udp_set_dev_scratch() net: dpaa2: Use the correct style for SPDX License Identifier net: add READ_ONCE() annotation in __skb_wait_for_more_packets() net: use skb_queue_empty_lockless() in busy poll contexts net: use skb_queue_empty_lockless() in poll() handlers udp: use skb_queue_empty_lockless() net: add skb_queue_empty_lockless() ANDROID: gki_defconfig: enable CONFIG_CPU_FREQ_GOV_CONSERVATIVE RDMA/hns: Prevent memory leaks of eq->buf_list RISC-V: Add PCIe I/O BAR memory mapping RDMA/iw_cxgb4: Avoid freeing skb twice in arp failure case RDMA/mlx5: Use irq xarray locking for mkey_table ANDROID: fix VIDEOBUF2_CORE dependency in 'allmodconfig' builds UAS: Revert commit3ae62a4209
("UAS: fix alignment of scatter/gather segments") usb-storage: Revert commit747668dbc0
("usb-storage: Set virt_boundary_mask to avoid SG overflows") usbip: Fix free of unallocated memory in vhci tx usbip: tools: Fix read_usb_vudc_device() error path handling usb: xhci: fix __le32/__le64 accessors in debugfs code usb: xhci: fix Immediate Data Transfer endianness xhci: Fix use-after-free regression in xhci clear hub TT implementation USB: ldusb: fix control-message timeout USB: ldusb: use unsigned size format specifiers USB: ldusb: fix ring-buffer locking USB: Skip endpoints with 0 maxpacket length io_uring: don't touch ctx in setup after ring fd install ANDROID: modpost: fix up merge issues due to namespace removal Revert "ALSA: hda: Flush interrupts on disabling" perf/headers: Fix spelling s/EACCESS/EACCES/, s/privilidge/privilege/ perf/x86/uncore: Fix event group support perf/x86/amd/ibs: Handle erratum #420 only on the affected CPU family (10h) perf/x86/amd/ibs: Fix reading of the IBS OpData register and thus precise RIP validity perf/core: Start rejecting the syscall with attr.__reserved_2 set vringh: fix copy direction of vringh_iov_push_kern() vsock/virtio: remove unused 'work' field from 'struct virtio_vsock_pkt' virtio_ring: fix stalls for packed rings riscv: for C functions called only from assembly, mark with __visible riscv: fp: add missing __user pointer annotations riscv: add missing header file includes riscv: mark some code and data as file-static riscv: init: merge split string literals in preprocessor directive riscv: add prototypes for assembly language functions from head.S io_uring: Fix leaked shadow_req fix memory leak in large read decrypt offload Linux 5.4-rc5 usb: cdns3: gadget: Don't manage pullups usb: dwc3: remove the call trace of USBx_GFLADJ usb: gadget: configfs: fix concurrent issue between composite APIs usb: dwc3: pci: prevent memory leak in dwc3_pci_probe usb: gadget: composite: Fix possible double free memory bug usb: gadget: udc: atmel: Fix interrupt storm in FIFO mode. usb: renesas_usbhs: fix type of buf usb: renesas_usbhs: Fix warnings in usbhsg_recip_handler_std_set_device() usb: gadget: udc: renesas_usb3: Fix __le16 warnings usb: renesas_usbhs: fix __le16 warnings usb: cdns3: include host-export,h for cdns3_host_init usb: mtu3: fix missing include of mtu3_dr.h usb: fsl: Check memory resource before releasing it usb: dwc3: select CONFIG_REGMAP_MMIO ANDROID: add README.md selftests: fib_tests: add more tests for metric update ipv4: fix route update on metric change. net: Zeroing the structure ethtool_wolinfo in ethtool_get_wol() ALSA: bebob: Fix prototype of helper function to return negative value cxgb4: request the TX CIDX updates to status page netns: fix GFP flags in rtnl_net_notifyid() net: ethernet: Use the correct style for SPDX License Identifier net/smc: keep vlan_id for SMC-R in smc_listen_work() net/smc: fix closing of fallback SMC sockets ANDROID: virt_wifi: Add data ops for scan data simulation ANDROID: Allow DRM_IOCTL_MODE_*_DUMB for render clients. riscv: cleanup do_trap_break net: hwbm: if CONFIG_NET_HWBM unset, make stub functions static ANDROID: cpufreq: create dummy cpufreq driver net: mvneta: make stub functions static inline net: sch_generic: Use pfifo_fast as fallback scheduler for CAN hardware nbd: verify socket is supported during setup ata: libahci_platform: Fix regulator_get_optional() misuse nbd: handle racing with error'ed out commands nbd: protect cmd->status with cmd->lock Revert "ANDROID: x86: Remove a useless warning message" ANDROID: init: GKI: enable hidden configs for media ANDROID: gki_defconfig: add FORTIFY_SOURCE, remove SPMI_MSM_PMIC_ARB Revert "Revert "Revert "Revert "x86/mm: Identify the end of the kernel area to be reserved"""" build.config.*: Link android-mainline kernels with LLD ANDROID: ALSA: jack: Update supported jack switch types ANDROID: ASoC: compress: fix unsigned integer overflow check io_uring: fix bad inflight accounting for SETUP_IOPOLL|SETUP_SQTHREAD io_uring: used cached copies of sq->dropped and cq->overflow FROMLIST: iommu: Export core IOMMU functions to kernel modules FROMLIST: PCI: Export PCI ACS and DMA searching functions to modules FROMLIST: of: Export of_phandle_iterator_args() to modules ARM: dts: stm32: relax qspi pins slew-rate for stm32mp157 io_uring: Fix race for sqes with userspace io_uring: Fix broken links with offloading io_uring: Fix corrupted user_data xen: issue deprecation warning for 32-bit pv guest kvm: Allocate memslots and buses before calling kvm_arch_init_vm powerpc/powernv/eeh: Fix oops when probing cxl devices irqchip/sifive-plic: Skip contexts except supervisor in plic_init() ANDROID: soc: qcom: Add required header to irq.h ACPI: processor: Add QoS requests for all CPUs cifs: Fix cifsInodeInfo lock_sem deadlock when reconnect occurs CIFS: Fix use after free of file info structures CIFS: Fix retry mid list corruption on reconnects scsi: sd: define variable dif as unsigned int instead of bool ANDROID: v4l2-compat-ioctl32.c: copy reserved fields scsi: target: cxgbit: Fix cxgbit_fw4_ack() IB/core: Avoid deadlock during netlink message handling ANDROID: of: property: Enable of_devlink by default virt_wifi: fix refcnt leak in module exit routine net: remove unnecessary variables and callback vxlan: add adjacent link to limit depth level net: core: add ignore flag to netdev_adjacent structure macsec: fix refcnt leak in module exit routine team: fix nested locking lockdep warning bonding: use dynamic lockdep key instead of subclass bonding: fix unexpected IFF_BONDING bit unset net: core: add generic lockdep keys net: core: limit nested device depth keys: Fix memory leak in copy_net_ns ANDROID: of: property: Make sure child dependencies don't block probing of parent ANDROID: driver core: Allow fwnode_operations.add_links to differentiate errors ANDROID: driver core: Allow a device to wait on optional suppliers ANDROID: driver core: Add device link support for SYNC_STATE_ONLY flag FROMGIT: docs: driver-model: Add documentation for sync_state FROMGIT: driver: core: Improve documentation for fwnode_operations.add_links() FROMGIT: of: property: Minor code formatting/style clean ups i2c: stm32f7: remove warning when compiling with W=1 i2c: stm32f7: fix a race in slave mode with arbitration loss irq i2c: stm32f7: fix first byte to send in slave mode i2c: mt65xx: fix NULL ptr dereference RDMA/nldev: Skip counter if port doesn't match irqchip/gic-v3-its: Use the exact ITSList for VMOVP FROMLIST: drivers: pinctrl: msm: setup GPIO chip in hierarchy FROMLIST: drivers: irqchip: pdc: Add irqchip set/get state calls FROMLIST: genirq: Introduce irq_chip_get/set_parent_state calls FROMLIST: drivers: irqchip: pdc: additionally set type in SPI config registers FROMLIST: dt-bindings/interrupt-controller: pdc: add SPI config register FROMLIST: of: irq: document properties for wakeup interrupt parent FROMLIST: drivers: irqchip: add PDC irqdomain for wakeup capable GPIOs FROMLIST: drivers: irqchip: pdc: Do not toggle IRQ_ENABLE during mask/unmask FROMLIST: drivers: irqchip: qcom-pdc: update max PDC interrupts FROMLIST: irqdomain: add bus token DOMAIN_BUS_WAKEUP gfs2: Fix memory leak when gfs2meta's fs_context is freed ALSA: hda/realtek - Fix 2 front mics of codec 0x623 ALSA: hda/realtek - Add support for ALC623 ALSA: usb-audio: Add DSD support for Gustard U16/X26 USB Interface netfilter: nft_payload: fix missing check for matching length in offloads ipvs: move old_secure_tcp into struct netns_ipvs ipvs: don't ignore errors in case refcounting ip_vs module fails ANDROID: drop patches/ symbolic link mfd: mt6397: Fix probe after changing mt6397-core net: phy: smsc: LAN8740: add PHY_RST_AFTER_CLK_EN flag MIPS: tlbex: Fix build_restore_pagemask KScratch restore io_uring: correct timeout req sequence when inserting a new entry io_uring : correct timeout req sequence when waiting timeout io_uring: revert "io_uring: optimize submit_and_wait API" MIPS: bmips: mark exception vectors as char arrays xsk: Fix registration of Rx-only sockets net/flow_dissector: switch to siphash MAINTAINERS: Update the Spreadtrum SoC maintainer ANDROID: Revert "ANDROID: Removed check for asm-goto" riscv: cleanup <asm/bug.h> riscv: Fix undefined reference to vmemmap_populate_basepages riscv: Fix implicit declaration of 'page_to_section' riscv: fix fs/proc/kcore.c compilation with sparsemem enabled ANDROID: sdcardfs: evict dentries on fscrypt key removal ANDROID: fscrypt: add key removal notifier chain ANDROID: move up spin_unlock_bh() ahead of remove_proc_entry() ANDROID: Kconfig.gki: Add hidden MMC config support ANDROID: Kconfig.gki: Add Hidden QCOM configs ANDROID: Kconfig.gki: Add SND_PCM_ELD to HIDDEN_DRM configs ANDROID: Kconfig.gki: Add extra audio selections ANDROID: Kconfig.gki: Add extra GKI_HIDDEN_REGMAP_CONFIGS selections ANDROID: Four part re-add of asm-goto usage [4/4] ANDROID: Four part re-add of asm-goto usage [3/4] ANDROID: Four part re-add of asm-goto usage [2/4] ANDROID: Four part re-add of asm-goto usage [1/4] ANDROID: Move out patches/ and replace by link to kernel/common-patches project of: reserved_mem: add missing of_node_put() for proper ref-counting of: unittest: fix memory leak in unittest_data_add dt-bindings: riscv: Fix CPU schema errors MAINTAINERS: Remove Gregory and Brian for ARCH_BRCMSTB drm/v3d: Fix memory leak in v3d_submit_cl_ioctl panfrost: Properly undo pm_runtime_enable when deferring a probe dmaengine: cppi41: Fix cppi41_dma_prep_slave_sg() when idle posix-cpu-timers: Fix two trivial comments timers/sched_clock: Include local timekeeping.h for missing declarations lib/vdso: Make clock_getres() POSIX compliant again fuse: redundant get_fuse_inode() calls in fuse_writepages_fill() fuse: Add changelog entries for protocols 7.1 - 7.8 fuse: truncate pending writes on O_TRUNC fuse: flush dirty data/metadata before non-truncate setattr netfilter: nf_tables_offload: restore basechain deletion netfilter: nf_flow_table: set timeout before insertion into hashes rtlwifi: rtl_pci: Fix problem of too small skb->len iwlwifi: pcie: 0x2720 is qu and 0x30DC is not iwlwifi: pcie: add workaround for power gating in integrated 22000 iwlwifi: mvm: handle iwl_mvm_tvqm_enable_txq() error return iwlwifi: pcie: fix all 9460 entries for qnj iwlwifi: pcie: fix PCI ID 0x2720 configs that should be soc rtlwifi: Fix potential overflow on P2P code iwlwifi: pcie: fix merge damage on making QnJ exclusive scripts/nsdeps: use alternative sed delimiter virtiofs: Remove set but not used variable 'fc' fs/dax: Fix pmd vs pte conflict detection opp: Reinitialize the list_kref before adding the static OPPs again bpf: Fix use after free in bpf_get_prog_name ALSA: hda: Add Tigerlake/Jasperlake PCI ID scsi: qla2xxx: Fix partial flash write of MBI scsi: qla2xxx: Initialized mailbox to prevent driver load failure scsi: lpfc: Honor module parameter lpfc_use_adisc ipv6: include <net/addrconf.h> for missing declarations net: openvswitch: free vport unless register_netdevice() succeeds selftests: Make l2tp.sh executable net: sched: taprio: fix -Wmissing-prototypes warnings bnxt_en: Avoid disabling pci device in bnxt_remove_one() for already disabled device. bnxt_en: Minor formatting changes in FW devlink_health_reporter bnxt_en: Adjust the time to wait before polling firmware readiness. bnxt_en: Fix devlink NVRAM related byte order related issues. bnxt_en: Fix the size of devlink MSIX parameters. net: stmmac: Fix the problem of tso_xmit dynamic_debug: provide dynamic_hex_dump stub bpf: Fix use after free in subprog's jited symbol removal RDMA/uverbs: Prevent potential underflow KVM: nVMX: Don't leak L1 MMIO regions to L2 ARC: perf: Accommodate big-endian CPU ARC: [plat-hsdk]: Enable on-boardi SPI ADC IC ARC: [plat-hsdk]: Enable on-board SPI NOR flash IC KVM: SVM: Fix potential wrong physical id in avic_handle_ldr_update cpufreq: Cancel policy update work scheduled before freeing s390/kaslr: add support for R_390_GLOB_DAT relocation type s390/zcrypt: fix memleak at release ALSA: usb-audio: Fix copy&paste error in the validator perf/aux: Fix AUX output stopping kvm: clear kvmclock MSR on reset KVM: x86: fix bugon.cocci warnings KVM: VMX: Remove specialized handling of unexpected exit-reasons selftests: kvm: fix sync_regs_test with newer gccs selftests: kvm: vmx_dirty_log_test: skip the test when VMX is not supported selftests: kvm: consolidate VMX support checks selftests: kvm: vmx_set_nested_state_test: don't check for VMX support twice KVM: Don't shrink/grow vCPU halt_poll_ns if host side polling is disabled selftests: kvm: synchronize .gitignore to Makefile kvm: x86: Expose RDPID in KVM_GET_SUPPORTED_CPUID cpuidle: haltpoll: Take 'idle=' override into account ACPI: NFIT: Fix unlock on error in scrub_show() tracing: Fix race in perf_trace_buf initialization x86/cpu/vmware: Fix platform detection VMWARE_PORT macro x86/cpu/vmware: Use the full form of INL in VMWARE_HYPERCALL, for clang/llvm xdp: Handle device unregister for devmap_hash map type r8152: add device id for Lenovo ThinkPad USB-C Dock Gen 2 ipv4: fix IPSKB_FRAG_PMTU handling with fragmentation ARM: 8926/1: v7m: remove register save to stack before svc Input: st1232 - fix reporting multitouch coordinates Revert "pwm: Let pwm_get_state() return the last implemented state" mmc: mxs: fix flags passed to dmaengine_prep_slave_sg virtiofs: Retry request submission from worker context virtiofs: Count pending forgets as in_flight forgets virtiofs: Set FR_SENT flag only after request has been sent virtiofs: No need to check fpq->connected state virtiofs: Do not end request in submission context fuse: don't advise readdirplus for negative lookup drm/komeda: Fix typos in komeda_splitter_validate drm/komeda: Don't flush inactive pipes i2c: aspeed: fix master pending state handling mmc: cqhci: Commit descriptors before setting the doorbell mmc: sdhci-omap: Fix Tuning procedure for temperatures < -20C ALSA: hda/realtek - Add support for ALC711 perf/aux: Fix tracking of auxiliary trace buffer allocation fuse: don't dereference req->args on finished request opp: core: Revert "add regulators enable and disable" cifs: Fix missed free operations CIFS: avoid using MID 0xFFFF cifs: clarify comment about timestamp granularity for old servers cifs: Handle -EINPROGRESS only when noblockcnt is set PM: QoS: Drop frequency QoS types from device PM QoS cpufreq: Use per-policy frequency QoS PM: QoS: Introduce frequency QoS Linux 5.4-rc4 hwmon: (nct7904) Fix the incorrect value of vsen_mask & tcpu_mask & temp_mode in nct7904_data struct. perf/x86/intel/pt: Fix base for single entry topa KVM: arm64: pmu: Reset sample period on overflow handling KVM: arm64: pmu: Set the CHAINED attribute before creating the in-kernel event arm64: KVM: Handle PMCR_EL0.LC as RES1 on pure AArch64 systems KVM: arm64: pmu: Fix cycle counter truncation net: reorder 'struct net' fields to avoid false sharing net: dsa: fix switch tree list net: ethernet: dwmac-sun8i: show message only when switching to promisc net: aquantia: add an error handling in aq_nic_set_multicast_list net: netem: correct the parent's backlog when corrupted packet was dropped net: netem: fix error path for corrupted GSO frames macb: propagate errors when getting optional clocks xen/netback: fix error path of xenvif_connect_data() net: hns3: fix mis-counting IRQ vector numbers issue scripts/gdb: fix debugging modules on s390 kernel/events/uprobes.c: only do FOLL_SPLIT_PMD for uprobe register mm/thp: allow dropping THP from page cache mm/vmscan.c: support removing arbitrary sized pages from mapping mm/thp: fix node page state in split_huge_page_to_list() proc/meminfo: fix output alignment mm/init-mm.c: include <linux/mman.h> for vm_committed_as_batch mm/filemap.c: include <linux/ramfs.h> for generic_file_vm_ops definition mm: include <linux/huge_mm.h> for is_vma_temporary_stack zram: fix race between backing_dev_show and backing_dev_store mm/memcontrol: update lruvec counters in mem_cgroup_move_account ocfs2: fix panic due to ocfs2_wq is null hugetlbfs: don't access uninitialized memmaps in pfn_range_valid_gigantic() mm: memblock: do not enforce current limit for memblock_phys* family mm: memcg: get number of pages on the LRU list in memcgroup base on lru_zone_size mm/gup: fix a misnamed "write" argument, and a related bug mm/gup_benchmark: add a missing "w" to getopt string ocfs2: fix error handling in ocfs2_setattr() mm: memcg/slab: fix panic in __free_slab() caused by premature memcg pointer release mm/memunmap: don't access uninitialized memmap in memunmap_pages() mm/memory_hotplug: don't access uninitialized memmaps in shrink_pgdat_span() mm/page_owner: don't access uninitialized memmaps when reading /proc/pagetypeinfo scripts/gdb: fix lx-dmesg when CONFIG_PRINTK_CALLER is set mm/memory-failure.c: don't access uninitialized memmaps in memory_failure() fs/proc/page.c: don't access uninitialized memmaps in fs/proc/page.c drivers/base/memory.c: don't access uninitialized memmaps in soft_offline_page_store() xdp: Prevent overflow in devmap_hash cost calculation for 32-bit builds filldir[64]: remove WARN_ON_ONCE() for bad directory entries scsi: ufs-bsg: Wake the device before sending raw upiu commands scsi: lpfc: Check queue pointer before use mips: vdso: Fix __arch_get_hw_counter() MAINTAINERS: Use @kernel.org address for Paul Burton scsi: qla2xxx: fixup incorrect usage of host_byte selftests/bpf: More compatible nc options in test_tc_edt net/mlx5: fix memory leak in mlx5_fw_fatal_reporter_dump net/mlx5: prevent memory leak in mlx5_fpga_conn_create_cq net/mlx5e: TX, Fix consumer index of error cqe dump net/mlx5e: kTLS, Enhance TX resync flow net/mlx5e: kTLS, Save a copy of the crypto info net/mlx5e: kTLS, Remove unneeded cipher type checks net/mlx5e: kTLS, Limit DUMP wqe size net/mlx5e: kTLS, Fix missing SQ edge fill net/mlx5e: kTLS, Fix page refcnt leak in TX resync error flow net/mlx5e: kTLS, Save by-value copy of the record frags net/mlx5e: kTLS, Save only the frag page to release at completion net/mlx5e: kTLS, Size of a Dump WQE is fixed net/mlx5e: kTLS, Release reference on DUMPed fragments in shutdown flow net/mlx5e: Tx, Zero-memset WQE info struct upon update net/mlx5e: Tx, Fix assumption of single WQEBB of NOP in cleanup flow usb: cdns3: Error out if USB_DR_MODE_UNKNOWN in cdns3_core_init_role() ARM: dts: bcm2837-rpi-cm3: Avoid leds-gpio probing issue USB: ldusb: fix read info leaks IB/core: Use rdma_read_gid_l2_fields to compare GID L2 fields RDMA/qedr: Fix reported firmware version RDMA/siw: free siw_base_qp in kref release routine tracing: Fix "gfp_t" format for synthetic events RDMA/iwcm: move iw_rem_ref() calls out of spinlock iw_cxgb4: fix ECN check on the passive accept net: usb: lan78xx: Connect PHY before registering MAC vsock/virtio: discard packets if credit is not respected vsock/virtio: send a credit update when buffer size is changed mlxsw: spectrum_trap: Push Ethernet header before reporting trap ASoC: SOF: control: return true when kcontrol values change ASoC: stm32: sai: fix sysclk management on shutdown ASoC: Intel: sof-rt5682: add a check for devm_clk_get ASoC: rsnd: Reinitialize bit clock inversion flag for every format setting net: ensure correct skb->tstamp in various fragmenters net: bcmgenet: reset 40nm EPHY on energy detect net: bcmgenet: soft reset 40nm EPHYs before MAC init net: phy: bcm7xxx: define soft_reset for 40nm EPHY net: bcmgenet: don't set phydev->link from MAC bus: ti-sysc: Fix watchdog quirk handling ARM: OMAP2+: Add pdata for OMAP3 ISP IOMMU ARM: OMAP2+: Plug in device_enable/idle ops for IOMMUs iommu/vt-d: Return the correct dma mask when we are bypassing the IOMMU iommu/amd: Check PM_LEVEL_SIZE() condition in locked section nvme-pci: Set the prp2 correctly when using more than 4k page HID: i2c-hid: add Trekstor Primebook C11B to descriptor override symbol namespaces: revert to previous __ksymtab name scheme modpost: make updating the symbol namespace explicit modpost: delegate updating namespaces to separate function HID: logitech-hidpp: do all FF cleanup in hidpp_ff_destroy() HID: logitech-hidpp: rework device validation HID: logitech-hidpp: split g920_get_config() HID: i2c-hid: Remove runtime power management x86/boot/acpi: Move get_cmdline_acpi_rsdp() under #ifdef guard x86/hyperv: Set pv_info.name to "Hyper-V" ACPI: CPPC: Set pcc_data[pcc_ss_id] to NULL in acpi_cppc_processor_exit() dmaengine: qcom: bam_dma: Fix resource leak scsi: lpfc: remove left-over BUILD_NVME defines scsi: core: try to get module before removing device scsi: hpsa: add missing hunks in reset-patch scsi: target: core: Do not overwrite CDB byte 1 net: Update address for MediaTek ethernet driver in MAINTAINERS ipv4: fix race condition between route lookup and invalidation ipv4: Return -ENETUNREACH if we can't create route but saddr is valid net: phy: micrel: Update KSZ87xx PHY name net: phy: micrel: Discern KSZ8051 and KSZ8795 PHYs io_uring: fix logic error in io_timeout io_uring: fix up O_NONBLOCK handling for sockets drm/amdgpu/vce: fix allocation size in enc ring test drm/amdgpu: fix error handling in amdgpu_bo_list_create drm/amdgpu: fix potential VM faults drm/amdgpu: user pages array memory leak fix drm/amdgpu/vcn: fix allocation size in enc ring test drm/amdgpu/uvd7: fix allocation size in enc ring test (v2) drm/amdgpu/uvd6: fix allocation size in enc ring test (v2) IB/hfi1: Use a common pad buffer for 9B and 16B packets IB/hfi1: Avoid excessive retry for TID RDMA READ request RDMA/mlx5: Clear old rate limit when closing QP net: dsa: microchip: Add shared regmap mutex net: dsa: microchip: Do not reinit mutexes on KSZ87xx net: stmmac: fix argument to stmmac_pcs_ctrl_ane() dpaa2-eth: Fix TX FQID values dpaa2-eth: add irq for the dpmac connect/disconnect event usb: hso: obey DMA rules in tiocmget Btrfs: check for the full sync flag while holding the inode lock during fsync Btrfs: fix qgroup double free after failure to reserve metadata for delalloc coccinelle: api/devm_platform_ioremap_resource: remove useless script ALSA: hda - Force runtime PM on Nvidia HDMI codecs dm cache: fix bugs when a GFP_NOWAIT allocation fails ARM: davinci_all_defconfig: enable GPIO backlight ARM: davinci: dm365: Fix McBSP dma_slave_map entry binder: Don't modify VMA bounds in ->mmap handler btrfs: tracepoints: Fix bad entry members of qgroup events btrfs: tracepoints: Fix wrong parameter order for qgroup events stop_machine: Avoid potential race behaviour EDAC/ghes: Fix Use after free in ghes_edac remove path ALSA: hda/realtek - Enable headset mic on Asus MJ401TA ALSA: usb-audio: Disable quirks for BOSS Katana amplifiers kheaders: substituting --sort in archive creation powerpc/32s: fix allow/prevent_user_access() when crossing segment boundaries. net: stmmac: disable/enable ptp_ref_clk in suspend/resume flow net: phy: Fix "link partner" information disappear issue rxrpc: use rcu protection while reading sk->sk_user_data drm/i915: Fixup preempt-to-busy vs resubmission of a virtual request drm/i915/userptr: Never allow userptr into the mappable GGTT drm/i915: Favor last VBT child device with conflicting AUX ch/DDC pin drm/i915/execlists: Refactor -EIO markup of hung requests Revert "blackhole_netdev: fix syzkaller reported issue" arm64: tags: Preserve tags for addresses translated via TTBR1 arm64: mm: fix inverted PAR_EL1.F check arm64: sysreg: fix incorrect definition of SYS_PAR_EL1_F arm64: entry.S: Do not preempt from IRQ before all cpufeatures are enabled md/raid0: fix warning message for parameter default_layout kthread: make __kthread_queue_delayed_work static pinctrl: aspeed-g6: Rename SD3 to EMMC and rework pin groups pinctrl: aspeed-g6: Fix UART13 group pinmux pinctrl: aspeed-g6: Make SIG_DESC_CLEAR() behave intuitively pinctrl: aspeed-g6: Fix I3C3/I3C4 pinmux configuration pinctrl: aspeed-g6: Fix I2C14 SDA description pinctrl: aspeed-g6: Sort pins for sanity dt-bindings: pinctrl: aspeed-g6: Rework SD3 function and groups perf kmem: Fix memory leak in compact_gfp_flags() usercopy: Avoid soft lockups in test_check_nonzero_user() pinctrl: berlin: as370: fix a typo s/spififib/spdifib ACPI: processor: Avoid NULL pointer dereferences at init time USB: serial: ti_usb_3410_5052: clean up serial data access USB: serial: ti_usb_3410_5052: fix port-close races xtensa: fix change_bit in exclusive access option HID: intel-ish-hid: fix wrong error handling in ishtp_cl_alloc_tx_ring() RISC-V: fix virtual address overlapped in FIXADDR_START and VMEMMAP_START net: usb: sr9800: fix uninitialized local variable net: bcmgenet: Fix RGMII_MODE_EN value for GENET v1/2/3 net: stmmac: make tc_flow_parsers static davinci_cpdma: make cpdma_chan_split_pool static net: i82596: fix dma_alloc_attr for sni_82596 sctp: change sctp_prot .no_autobind with true sched: etf: Fix ordering of packets with same txtime net: avoid potential infinite loop in tc_ctl_action() net: dsa: sja1105: Use the correct style for SPDX License Identifier tcp: fix a possible lockdep splat in tcp_done() arm: dts: mediatek: Update mt7629 dts to reflect the latest dt-binding net: ethernet: mediatek: Fix MT7629 missing GMII mode support Revert "Input: elantech - enable SMBus on new (2018+) systems" net/sched: fix corrupted L2 header with MPLS 'push' and 'pop' actions net: avoid errors when trying to pop MLPS header on non-MPLS packets net: cavium: Use the correct style for SPDX License Identifier net: dsa: microchip: Use the correct style for SPDX License Identifier PCI: PM: Fix pci_power_up() xtensa: virt: fix PCI IO ports mapping libata/ahci: Fix PCS quirk application vfio/type1: Initialize resv_msi_base 8250-men-mcb: fix error checking when get_num_ports returns -ENODEV USB: usblp: fix use-after-free on disconnect usb: udc: lpc32xx: fix bad bit shift operation usb: cdns3: Fix dequeue implementation. USB: legousbtower: fix a signedness bug in tower_probe() USB: legousbtower: fix memleak on disconnect USB: ldusb: fix memleak on disconnect net: ethernet: broadcom: have drivers select DIMLIB as needed net: Update address for vrf and l3mdev in MAINTAINERS net: bcmgenet: Set phydev->dev_flags only for internal PHYs blackhole_netdev: fix syzkaller reported issue ARM: dts: bcm2835-rpi-zero-w: Fix bus-width of sdhci sparc64: disable fast-GUP due to unexplained oopses btrfs: qgroup: Always free PREALLOC META reserve in btrfs_delalloc_release_extents() drm/panfrost: Handle resetting on timeout better blk-rq-qos: fix first node deletion of rq_qos_del() blkcg: Fix multiple bugs in blkcg_activate_policy() xfs: change the seconds fields in xfs_bulkstat to signed tools headers UAPI: Sync sched.h with the kernel rbd: cancel lock_dwork if the wait is interrupted ceph: just skip unrecognized info in ceph_reply_info_extra tools headers kvm: Sync kvm.h headers with the kernel sources tools headers kvm: Sync kvm headers with the kernel sources tools headers kvm: Sync kvm headers with the kernel sources perf c2c: Fix memory leak in build_cl_output() perf tools: Fix mode setting in copyfile_mode_ns() perf annotate: Fix multiple memory and file descriptor leaks io_uring: consider the overflow of sequence for timeout req perf tools: Fix resource leak of closedir() on the error paths perf evlist: Fix fix for freed id arrays perf jvmti: Link against tools/lib/ctype.h to have weak strlcpy() scripts: setlocalversion: fix a bashism kbuild: update comment about KBUILD_ALLDIRS virtio-fs: don't show mount options nvme-tcp: fix possible leakage during error flow nvmet-loop: fix possible leakage during error flow btrfs: don't needlessly create extent-refs kernel thread iommu/amd: Fix incorrect PASID decoding from event log iommu/ipmmu-vmsa: Only call platform_get_irq() when interrupt is mandatory iommu/rockchip: Don't use platform_get_irq to implicitly count irqs dmaengine: sprd: Fix the possible memory leak issue dmaengine: xilinx_dma: Fix control reg update in vdma_channel_set_config dmaengine: xilinx_dma: Fix 64-bit simple AXIDMA transfer x86/apic/x2apic: Fix a NULL pointer deref when handling a dying cpu x86/hyperv: Make vapic support x2apic mode KVM: PPC: Book3S HV: XIVE: Ensure VP isn't already in use arm64: hibernate: check pgd table allocation arm64: cpufeature: Treat ID_AA64ZFR0_EL1 as RAZ when SVE is not enabled net: aquantia: correctly handle macvlan and multicast coexistence net: aquantia: do not pass lro session with invalid tcp checksum net: aquantia: when cleaning hw cache it should be toggled net: aquantia: temperature retrieval fix gpio: lynxpoint: set default handler to be handle_bad_irq() gpio: merrifield: Move hardware initialization to callback gpio: lynxpoint: Move hardware initialization to callback gpio: intel-mid: Move hardware initialization to callback gpiolib: Initialize the hardware with a callback gpio: merrifield: Restore use of irq_base xtensa: drop EXPORT_SYMBOL for outs*/ins* mm/memory-failure: poison read receives SIGKILL instead of SIGBUS if mmaped more than once mm/slab.c: fix kernel-doc warning for __ksize() xarray.h: fix kernel-doc warning bitmap.h: fix kernel-doc warning and typo fs/fs-writeback.c: fix kernel-doc warning fs/libfs.c: fix kernel-doc warning fs/direct-io.c: fix kernel-doc warning mm, compaction: fix wrong pfn handling in __reset_isolation_pfn() mm, hugetlb: allow hugepage allocations to reclaim as needed lib/test_meminit: add a kmem_cache_alloc_bulk() test mm/slub.c: init_on_free=1 should wipe freelist ptr for bulk allocations lib/generic-radix-tree.c: add kmemleak annotations mm/slub: fix a deadlock in show_slab_objects() mm, page_owner: rename flag indicating that page is allocated mm, page_owner: decouple freeing stack trace from debug_pagealloc mm, page_owner: fix off-by-one error in __set_page_owner_handle() xtensa: fix type conversion in __get_user_[no]check xtensa: clean up assembly arguments in uaccess macros block: Fix elv_support_iosched() parisc: Remove 32-bit DMA enforcement from sba_iommu parisc: Fix vmap memory leak in ioremap()/iounmap() parisc: prefer __section from compiler_attributes.h parisc: sysctl.c: Use CONFIG_PARISC instead of __hppa_ define firmware: dmi: Fix unlikely out-of-bounds read in save_mem_devices riscv: tlbflush: remove confusing comment on local_flush_tlb_all() riscv: dts: HiFive Unleashed: add default chosen/stdout-path riscv: remove the switch statement in do_trap_break() drm/panfrost: Add missing GPU feature registers bpf: lwtunnel: Fix reroute supplying invalid dst xtensa: fix {get,put}_user() for 64bit values kmemleak: Do not corrupt the object_list during clean-up nvme-tcp: Initialize sk->sk_ll_usec only with NET_RX_BUSY_POLL nvme: Wait for reset state when required nvme: Prevent resets during paused controller state nvme: Restart request timers in resetting state nvme: Remove ADMIN_ONLY state nvme-pci: Free tagset if no IO queues hrtimer: Annotate lockless access to timer->base staging: wlan-ng: fix exit return when sme->key_idx >= NUM_WEPKEYS ARM: imx_v6_v7_defconfig: Enable CONFIG_DRM_MSM arm64: dts: imx8mn: Use correct clock for usdhc's ipg clk arm64: dts: imx8mm: Use correct clock for usdhc's ipg clk arm64: dts: imx8mq: Use correct clock for usdhc's ipg clk platform/x86: i2c-multi-instantiate: Fail the probe if no IRQ provided ARM: dts: imx7s: Correct GPT's ipg clock source ARM: dts: vf610-zii-scu4-aib: Specify 'i2c-mux-idle-disconnect' drm/ttm: fix handling in ttm_bo_add_mem_to_lru drm/ttm: Restore ttm prefaulting drm/ttm: fix busy reference in ttm_mem_evict_first ARM: dts: imx6q-logicpd: Re-Enable SNVS power key ath10k: fix latency issue for QCA988x virtio-fs: Change module name to virtiofs.ko dmaengine: imx-sdma: fix size check for sdma script_number dmaengine: tegra210-adma: fix transfer failure arm64: dts: lx2160a: Correct CPU core idle state name dmaengine: sprd: Fix the link-list pointer register configuration issue batman-adv: Avoid free/alloc race when handling OGM buffer batman-adv: Avoid free/alloc race when handling OGM2 buffer netdevsim: Fix error handling in nsim_fib_init and nsim_fib_exit net/ibmvnic: Fix EOI when running in XIVE mode. net: lpc_eth: avoid resetting twice tcp: annotate sk->sk_wmem_queued lockless reads tcp: annotate sk->sk_sndbuf lockless reads tcp: annotate sk->sk_rcvbuf lockless reads tcp: annotate tp->urg_seq lockless reads tcp: annotate tp->snd_nxt lockless reads tcp: annotate tp->write_seq lockless reads tcp: annotate tp->copied_seq lockless reads tcp: annotate tp->rcv_nxt lockless reads tcp: add rcu protection around tp->fastopen_rsk vhost/test: stop device before reset tools/virtio: xen stub mailmap: Add Simon Arlott (replacement for expired email address) rxrpc: Fix possible NULL pointer access in ICMP handling drm/amdgpu/sdma5: fix mask value of POLL_REGMEM packet for pipe sync drm/amdgpu: Bail earlier when amdgpu.cik_/si_support is not set to 1 Revert "drm/radeon: Fix EEH during kexec" Input: synaptics-rmi4 - avoid processing unknown IRQs btrfs: block-group: Fix a memory leak due to missing btrfs_put_block_group() drm/msm/dsi: Implement reset correctly Btrfs: add missing extents release on file extent cluster relocation error x86/boot/64: Round memory hole size up to next PMD page x86/boot/64: Make level2_kernel_pgt pages invalid outside kernel area arm64: Fix kcore macros after 52-bit virtual addressing fallout tools/virtio: more stubs net/smc: receive pending data after RCV_SHUTDOWN net/smc: receive returns without data net/smc: fix SMCD link group creation with VLAN id net: update net_dim documentation after rename r8169: fix jumbo packet handling on resume from suspend arm64: dts: rockchip: Fix override mode for rk3399-kevin panel arm64: dts: rockchip: Fix usb-c on Hugsun X99 TV Box arm64: dts: rockchip: fix RockPro64 sdmmc settings ARM: 8914/1: NOMMU: Fix exc_ret for XIP ARM: 8908/1: add __always_inline to functions called from __get_user_check() HID: google: add magnemite/masterball USB ids MAINTAINERS: Add BCM2711 to BCM2835 ARCH dma-buf/resv: fix exclusive fence get drm/edid: Add 6 bpc quirk for SDC panel in Lenovo G50 dm snapshot: rework COW throttling to fix deadlock dm snapshot: introduce account_start_copy() and account_end_copy() drm/tiny: Kconfig: Remove always-y THERMAL dep. from TINYDRM_REPAPER platform/x86: intel_punit_ipc: Avoid error message when retrieving IRQ platform/x86: classmate-laptop: remove unused variable opp: of: drop incorrect lockdep_assert_held() PM: sleep: include <linux/pm_runtime.h> for pm_wq cpufreq: Avoid cpufreq_suspend() deadlock on system shutdown ACPI: PM: Drop Dell XPS13 9360 from LPS0 Idle _DSM blacklist net: silence KCSAN warnings about sk->sk_backlog.len reads net: annotate sk->sk_rcvlowat lockless reads net: silence KCSAN warnings around sk_add_backlog() calls tcp: annotate lockless access to tcp_memory_pressure net: add {READ|WRITE}_ONCE() annotations on ->rskq_accept_head net: avoid possible false sharing in sk_leave_memory_pressure() tun: remove possible false sharing in tun_flow_update() netfilter: conntrack: avoid possible false sharing netns: fix NLM_F_ECHO mechanism for RTM_NEWNSID scsi: ch: Make it possible to open a ch device multiple times again scsi: fix kconfig dependency warning related to 53C700_LE_ON_BE scsi: sni_53c710: fix compilation error scsi: scsi_dh_alua: handle RTPG sense code correctly during state transitions scsi: qla2xxx: fix a potential NULL pointer dereference net: usb: qmi_wwan: add Telit 0x1050 composition act_mirred: Fix mirred_init_module error handling net: taprio: Fix returning EINVAL when configuring without flags s390/qeth: Fix initialization of vnicc cmd masks during set online s390/qeth: Fix error handling during VNICC initialization phylink: fix kernel-doc warnings sctp: add chunks to sk_backlog when the newsk sk_socket is not set bonding: fix potential NULL deref in bond_update_slave_arr net: stmmac: fix disabling flexible PPS output net: stmmac: fix length of PTP clock's name string ARM: mm: alignment: use "u32" for 32-bit instructions ARM: mm: fix alignment handler faults under memory pressure ARM: dts: Use level interrupt for omap4 & 5 wlcore drivers/amba: fix reset control error handling ASoC: simple_card_utils.h: Fix potential multiple redefinition error ASoC: msm8916-wcd-digital: add missing MIX2 path for RX1/2 drm/amdgpu/powerplay: fix typo in mvdd table setup iwlwifi: pcie: change qu with jf devices to use qu configuration iwlwifi: exclude GEO SAR support for 3168 iwlwifi: pcie: fix memory leaks in iwl_pcie_ctxt_info_gen3_init iwlwifi: dbg_ini: fix memory leak in alloc_sgtable iwlwifi: pcie: fix rb_allocator workqueue allocation iwlwifi: pcie: fix indexing in command dump for new HW iwlwifi: mvm: fix race in sync rx queue notification iwlwifi: mvm: force single phy init iwlwifi: fix ACPI table revision checks iwlwifi: don't access trans_cfg via cfg memstick: jmb38x_ms: Fix an error handling path in 'jmb38x_ms_probe()' mmc: sdhci-iproc: fix spurious interrupts on Multiblock reads with bcm2711 pinctrl: armada-37xx: swap polarity on LED group arm64: dts: armada-3720-turris-mox: convert usb-phy to phy-supply ip6erspan: remove the incorrect mtu limit for ip6erspan Doc: networking/device_drivers/pensando: fix ionic.rst warnings NFC: pn533: fix use-after-free and memleaks Input: soc_button_array - partial revert of support for newer surface devices net_sched: fix backward compatibility for TCA_ACT_KIND net_sched: fix backward compatibility for TCA_KIND net/mlx5: DR, Allow insertion of duplicate rules selftests/bpf: More compatible nc options in test_lwt_ip_encap selftests/bpf: Set rp_filter in test_flow_dissector llc: fix sk_buff refcounting in llc_conn_state_process() llc: fix another potential sk_buff leak in llc_ui_sendmsg() llc: fix sk_buff leak in llc_conn_service() llc: fix sk_buff leak in llc_sap_state_process() dm clone: Make __hash_find static rt2x00: remove input-polldev.h header ARM: dts: am3874-iceboard: Fix 'i2c-mux-idle-disconnect' usage ARM: dts: omap5: fix gpu_cm clock provider name arm64: Allow CAVIUM_TX2_ERRATUM_219 to be selected arm64: Avoid Cavium TX2 erratum 219 when switching TTBR arm64: Enable workaround for Cavium TX2 erratum 219 when running SMT arm64: KVM: Trap VM ops when ARM64_WORKAROUND_CAVIUM_TX2_219_TVM is set mac80211: fix scan when operating on DFS channels in ETSI domains mac80211: accept deauth frames in IBSS mode cfg80211: fix a bunch of RCU issues in multi-bssid code nl80211: fix memory leak in nl80211_get_ftm_responder_stats ptp: fix typo of "mechanism" in Kconfig help text ionic: fix stats memory dereference ASoC: core: Fix pcm code debugfs error ARM: dts: sun7i: Drop the module clock from the device tree dt-bindings: media: sun4i-csi: Drop the module clock rxrpc: Fix call crypto state cleanup rxrpc: rxrpc_peer needs to hold a ref on the rxrpc_local record rxrpc: Fix trace-after-put looking at the put call record rxrpc: Fix trace-after-put looking at the put connection record rxrpc: Fix trace-after-put looking at the put peer record media: dt-bindings: Fix building error for dt_binding_check rxrpc: Fix call ref leak ALSA: hdac: clear link output stream mapping ALSA: hda/realtek: Reduce the Headphone static noise on XPS 9350/9360 lib: test_user_copy: style cleanup net: stmmac: selftests: Fix L2 Hash Filter test net: stmmac: gmac4+: Not all Unicast addresses may be available net: stmmac: selftests: Check if filtering is available before running net: dsa: b53: Do not clear existing mirrored port mask arm64: dts: zii-ultra: fix ARM regulator states soc: imx: imx-scu: Getting UID from SCU should have response pinctrl: stmfx: fix null pointer on remove pinctrl: iproc: allow for error from platform_get_irq() nvme: retain split access workaround for capability reads nvme: fix possible deadlock when nvme_update_formats fails pinctrl: ns2: Fix off by one bugs in ns2_pinmux_enable() pinctrl: bcm-iproc: Use SPDX header pinctrl: armada-37xx: fix control of pins 32 and up arm64: dts: rockchip: fix RockPro64 sdhci settings arm64: dts: rockchip: fix RockPro64 vdd-log regulator settings regulator: qcom-rpmh: Fix PMIC5 BoB min voltage ARM: dts: logicpd-torpedo-som: Remove twl_keypad cfg80211: wext: avoid copying malformed SSIDs mac80211: Reject malformed SSID elements mac80211_hwsim: fix incorrect dev_alloc_name failure goto MAINTAINERS: Add hp_sdc drivers to parisc arch scsi: MAINTAINERS: Update qla2xxx driver scsi: zfcp: fix reaction on bit error threshold notification scsi: core: save/restore command resid for error handling dt-bindings: arm: rockchip: fix Theobroma-System board bindings arm64: dts: rockchip: fix Rockpro64 RK808 interrupt line HID: Fix assumption that devices have inputs ARM: omap2plus_defconfig: Fix selected panels after generic panel changes samples/bpf: Add a workaround for asm_inline xsk: Fix crash in poll when device does not support ndo_xsk_wakeup samples/bpf: Fix build for task_fd_query_user.c ASoc: rockchip: i2s: Fix RPM imbalance mmc: sh_mmcif: Use platform_get_irq_optional() for optional interrupt mmc: renesas_sdhi: Do not use platform_get_irq() to count interrupts ACPI: HMAT: ACPI_HMAT_MEMORY_PD_VALID is deprecated since ACPI-6.3 Input: goodix - add support for 9-bytes reports Input: da9063 - fix capability and drop KEY_SLEEP ASoC: wm_adsp: Don't generate kcontrols without READ flags sysfs: Fixes __BIN_ATTR_WO() macro rt2x00: initialize last_reset selftests/bpf: test_progs: Don't leak server_fd in test_sockopt_inherit selftests/bpf: test_progs: Don't leak server_fd in tcp_rtt regulator: pfuze100-regulator: Variable "val" in pfuze100_regulator_probe() could be uninitialized ASoC: intel: bytcr_rt5651: add null check to support_button_press ASoC: intel: sof_rt5682: add remove function to disable jack ASoC: rt5682: add NULL handler to set_jack function ASoC: intel: sof_rt5682: use separate route map for dmic ASoC: SOF: Intel: hda: Disable DMI L1 entry during capture ASoC: SOF: Intel: initialise and verify FW crash dump data. ASoC: SOF: Intel: hda: fix warnings during FW load ASoC: SOF: pcm: harden PCM STOP sequence ASoC: SOF: pcm: fix resource leak in hw_free ASoC: SOF: topology: fix parse fail issue for byte/bool tuple types ASoC: SOF: loader: fix kernel oops on firmware boot failure regulator: lochnagar: Add on_off_delay for VDDCORE ASoC: wm_adsp: Fix theoretical NULL pointer for alg_region pinctrl: cherryview: restore Strago DMI workaround for all versions pinctrl: intel: Allocate IRQ chip dynamic HID: prodikeys: make array keys static const, makes object smaller HID: fix error message in hid_open_report() ASoC: max98373: check for device node before parsing regulator: ti-abb: Fix timeout in ti_abb_wait_txdone/ti_abb_clear_all_txdone iommu/io-pgtable-arm: Support all Mali configurations iommu/io-pgtable-arm: Correct Mali attributes iommu/arm-smmu: Free context bitmap in the err path of arm_smmu_init_domain_context scsi: qla2xxx: Remove WARN_ON_ONCE in qla2x00_status_cont_entry() scsi: sd: Ignore a failure to sync cache due to lack of authorization arm64: dts: Fix gpio to pinmux mapping libbpf: handle symbol versioning properly for libbpf.a arm64: dts: allwinner: a64: sopine-baseboard: Add PHY regulator delay arm64: dts: allwinner: a64: Drop PMU node arm64: dts: allwinner: a64: pine64-plus: Add PHY regulator delay tools: bpf: Use !building_out_of_srctree to determine srctree ASoC: topology: Fix a signedness bug in soc_tplg_dapm_widget_create() scsi: core: fix dh and multipathing for SCSI hosts without request batching scsi: core: fix missing .cleanup_rq for SCSI hosts without request batching regulator: da9062: fix suspend_enable/disable preparation dt-bindings: fixed-regulator: fix compatible enum regulator: fixed: Prevent NULL pointer dereference when !CONFIG_OF ASoC: soc-component: fix a couple missing error assignments ASoC: wm8994: Do not register inapplicable controls for WM1811 ASoC: samsung: arndale: Add missing OF node dereferencing irqchip/sifive-plic: Switch to fasteoi flow irqchip/gic-v3: Fix GIC_LINE_NR accessor regulator: core: make regulator_register() EPROBE_DEFER aware regulator: of: fix suspend-min/max-voltage parsing irqchip/atmel-aic5: Add support for sam9x60 irqchip irqchip/al-fic: Add support for irq retrigger Change-Id: I5e7fd941c93a36889378f480cc27d8ea77d11b39 Signed-off-by: Raghavendra Rao Ananta <rananta@codeaurora.org>
This commit is contained in:
commit
c249464a77
4
.mailmap
4
.mailmap
@ -196,7 +196,8 @@ Oleksij Rempel <linux@rempel-privat.de> <o.rempel@pengutronix.de>
|
|||||||
Oleksij Rempel <linux@rempel-privat.de> <ore@pengutronix.de>
|
Oleksij Rempel <linux@rempel-privat.de> <ore@pengutronix.de>
|
||||||
Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
|
Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
|
||||||
Patrick Mochel <mochel@digitalimplant.org>
|
Patrick Mochel <mochel@digitalimplant.org>
|
||||||
Paul Burton <paul.burton@mips.com> <paul.burton@imgtec.com>
|
Paul Burton <paulburton@kernel.org> <paul.burton@imgtec.com>
|
||||||
|
Paul Burton <paulburton@kernel.org> <paul.burton@mips.com>
|
||||||
Peter A Jonsson <pj@ludd.ltu.se>
|
Peter A Jonsson <pj@ludd.ltu.se>
|
||||||
Peter Oruba <peter@oruba.de>
|
Peter Oruba <peter@oruba.de>
|
||||||
Peter Oruba <peter.oruba@amd.com>
|
Peter Oruba <peter.oruba@amd.com>
|
||||||
@ -229,6 +230,7 @@ Shuah Khan <shuah@kernel.org> <shuahkhan@gmail.com>
|
|||||||
Shuah Khan <shuah@kernel.org> <shuah.khan@hp.com>
|
Shuah Khan <shuah@kernel.org> <shuah.khan@hp.com>
|
||||||
Shuah Khan <shuah@kernel.org> <shuahkh@osg.samsung.com>
|
Shuah Khan <shuah@kernel.org> <shuahkh@osg.samsung.com>
|
||||||
Shuah Khan <shuah@kernel.org> <shuah.kh@samsung.com>
|
Shuah Khan <shuah@kernel.org> <shuah.kh@samsung.com>
|
||||||
|
Simon Arlott <simon@octiron.net> <simon@fire.lp0.eu>
|
||||||
Simon Kelley <simon@thekelleys.org.uk>
|
Simon Kelley <simon@thekelleys.org.uk>
|
||||||
Stéphane Witzmann <stephane.witzmann@ubpmes.univ-bpclermont.fr>
|
Stéphane Witzmann <stephane.witzmann@ubpmes.univ-bpclermont.fr>
|
||||||
Stephen Hemminger <shemminger@osdl.org>
|
Stephen Hemminger <shemminger@osdl.org>
|
||||||
|
@ -91,6 +91,11 @@ stable kernels.
|
|||||||
| ARM | MMU-500 | #841119,826419 | N/A |
|
| ARM | MMU-500 | #841119,826419 | N/A |
|
||||||
+----------------+-----------------+-----------------+-----------------------------+
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
+----------------+-----------------+-----------------+-----------------------------+
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
|
| Broadcom | Brahma-B53 | N/A | ARM64_ERRATUM_845719 |
|
||||||
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
|
| Broadcom | Brahma-B53 | N/A | ARM64_ERRATUM_843419 |
|
||||||
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
| Cavium | ThunderX ITS | #22375,24313 | CAVIUM_ERRATUM_22375 |
|
| Cavium | ThunderX ITS | #22375,24313 | CAVIUM_ERRATUM_22375 |
|
||||||
+----------------+-----------------+-----------------+-----------------------------+
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
| Cavium | ThunderX ITS | #23144 | CAVIUM_ERRATUM_23144 |
|
| Cavium | ThunderX ITS | #23144 | CAVIUM_ERRATUM_23144 |
|
||||||
@ -107,6 +112,8 @@ stable kernels.
|
|||||||
+----------------+-----------------+-----------------+-----------------------------+
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
| Cavium | ThunderX2 SMMUv3| #126 | N/A |
|
| Cavium | ThunderX2 SMMUv3| #126 | N/A |
|
||||||
+----------------+-----------------+-----------------+-----------------------------+
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
|
| Cavium | ThunderX2 Core | #219 | CAVIUM_TX2_ERRATUM_219 |
|
||||||
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
+----------------+-----------------+-----------------+-----------------------------+
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
| Freescale/NXP | LS2080A/LS1043A | A-008585 | FSL_ERRATUM_A008585 |
|
| Freescale/NXP | LS2080A/LS1043A | A-008585 | FSL_ERRATUM_A008585 |
|
||||||
+----------------+-----------------+-----------------+-----------------------------+
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
@ -124,7 +131,7 @@ stable kernels.
|
|||||||
+----------------+-----------------+-----------------+-----------------------------+
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
| Qualcomm Tech. | Kryo/Falkor v1 | E1003 | QCOM_FALKOR_ERRATUM_1003 |
|
| Qualcomm Tech. | Kryo/Falkor v1 | E1003 | QCOM_FALKOR_ERRATUM_1003 |
|
||||||
+----------------+-----------------+-----------------+-----------------------------+
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
| Qualcomm Tech. | Falkor v1 | E1009 | QCOM_FALKOR_ERRATUM_1009 |
|
| Qualcomm Tech. | Kryo/Falkor v1 | E1009 | QCOM_FALKOR_ERRATUM_1009 |
|
||||||
+----------------+-----------------+-----------------+-----------------------------+
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
| Qualcomm Tech. | QDF2400 ITS | E0065 | QCOM_QDF2400_ERRATUM_0065 |
|
| Qualcomm Tech. | QDF2400 ITS | E0065 | QCOM_QDF2400_ERRATUM_0065 |
|
||||||
+----------------+-----------------+-----------------+-----------------------------+
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
|
@ -14,6 +14,7 @@ Block
|
|||||||
cmdline-partition
|
cmdline-partition
|
||||||
data-integrity
|
data-integrity
|
||||||
deadline-iosched
|
deadline-iosched
|
||||||
|
inline-encryption
|
||||||
ioprio
|
ioprio
|
||||||
kyber-iosched
|
kyber-iosched
|
||||||
null_blk
|
null_blk
|
||||||
|
183
Documentation/block/inline-encryption.rst
Normal file
183
Documentation/block/inline-encryption.rst
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
=================
|
||||||
|
Inline Encryption
|
||||||
|
=================
|
||||||
|
|
||||||
|
Objective
|
||||||
|
=========
|
||||||
|
|
||||||
|
We want to support inline encryption (IE) in the kernel.
|
||||||
|
To allow for testing, we also want a crypto API fallback when actual
|
||||||
|
IE hardware is absent. We also want IE to work with layered devices
|
||||||
|
like dm and loopback (i.e. we want to be able to use the IE hardware
|
||||||
|
of the underlying devices if present, or else fall back to crypto API
|
||||||
|
en/decryption).
|
||||||
|
|
||||||
|
|
||||||
|
Constraints and notes
|
||||||
|
=====================
|
||||||
|
|
||||||
|
- IE hardware have a limited number of "keyslots" that can be programmed
|
||||||
|
with an encryption context (key, algorithm, data unit size, etc.) at any time.
|
||||||
|
One can specify a keyslot in a data request made to the device, and the
|
||||||
|
device will en/decrypt the data using the encryption context programmed into
|
||||||
|
that specified keyslot. When possible, we want to make multiple requests with
|
||||||
|
the same encryption context share the same keyslot.
|
||||||
|
|
||||||
|
- We need a way for filesystems to specify an encryption context to use for
|
||||||
|
en/decrypting a struct bio, and a device driver (like UFS) needs to be able
|
||||||
|
to use that encryption context when it processes the bio.
|
||||||
|
|
||||||
|
- We need a way for device drivers to expose their capabilities in a unified
|
||||||
|
way to the upper layers.
|
||||||
|
|
||||||
|
|
||||||
|
Design
|
||||||
|
======
|
||||||
|
|
||||||
|
We add a struct bio_crypt_ctx to struct bio that can represent an
|
||||||
|
encryption context, because we need to be able to pass this encryption
|
||||||
|
context from the FS layer to the device driver to act upon.
|
||||||
|
|
||||||
|
While IE hardware works on the notion of keyslots, the FS layer has no
|
||||||
|
knowledge of keyslots - it simply wants to specify an encryption context to
|
||||||
|
use while en/decrypting a bio.
|
||||||
|
|
||||||
|
We introduce a keyslot manager (KSM) that handles the translation from
|
||||||
|
encryption contexts specified by the FS to keyslots on the IE hardware.
|
||||||
|
This KSM also serves as the way IE hardware can expose their capabilities to
|
||||||
|
upper layers. The generic mode of operation is: each device driver that wants
|
||||||
|
to support IE will construct a KSM and set it up in its struct request_queue.
|
||||||
|
Upper layers that want to use IE on this device can then use this KSM in
|
||||||
|
the device's struct request_queue to translate an encryption context into
|
||||||
|
a keyslot. The presence of the KSM in the request queue shall be used to mean
|
||||||
|
that the device supports IE.
|
||||||
|
|
||||||
|
On the device driver end of the interface, the device driver needs to tell the
|
||||||
|
KSM how to actually manipulate the IE hardware in the device to do things like
|
||||||
|
programming the crypto key into the IE hardware into a particular keyslot. All
|
||||||
|
this is achieved through the :c:type:`struct keyslot_mgmt_ll_ops` that the
|
||||||
|
device driver passes to the KSM when creating it.
|
||||||
|
|
||||||
|
It uses refcounts to track which keyslots are idle (either they have no
|
||||||
|
encryption context programmed, or there are no in-flight struct bios
|
||||||
|
referencing that keyslot). When a new encryption context needs a keyslot, it
|
||||||
|
tries to find a keyslot that has already been programmed with the same
|
||||||
|
encryption context, and if there is no such keyslot, it evicts the least
|
||||||
|
recently used idle keyslot and programs the new encryption context into that
|
||||||
|
one. If no idle keyslots are available, then the caller will sleep until there
|
||||||
|
is at least one.
|
||||||
|
|
||||||
|
|
||||||
|
Blk-crypto
|
||||||
|
==========
|
||||||
|
|
||||||
|
The above is sufficient for simple cases, but does not work if there is a
|
||||||
|
need for a crypto API fallback, or if we are want to use IE with layered
|
||||||
|
devices. To these ends, we introduce blk-crypto. Blk-crypto allows us to
|
||||||
|
present a unified view of encryption to the FS (so FS only needs to specify
|
||||||
|
an encryption context and not worry about keyslots at all), and blk-crypto
|
||||||
|
can decide whether to delegate the en/decryption to IE hardware or to the
|
||||||
|
crypto API. Blk-crypto maintains an internal KSM that serves as the crypto
|
||||||
|
API fallback.
|
||||||
|
|
||||||
|
Blk-crypto needs to ensure that the encryption context is programmed into the
|
||||||
|
"correct" keyslot manager for IE. If a bio is submitted to a layered device
|
||||||
|
that eventually passes the bio down to a device that really does support IE, we
|
||||||
|
want the encryption context to be programmed into a keyslot for the KSM of the
|
||||||
|
device with IE support. However, blk-crypto does not know a priori whether a
|
||||||
|
particular device is the final device in the layering structure for a bio or
|
||||||
|
not. So in the case that a particular device does not support IE, since it is
|
||||||
|
possibly the final destination device for the bio, if the bio requires
|
||||||
|
encryption (i.e. the bio is doing a write operation), blk-crypto must fallback
|
||||||
|
to the crypto API *before* sending the bio to the device.
|
||||||
|
|
||||||
|
Blk-crypto ensures that:
|
||||||
|
|
||||||
|
- The bio's encryption context is programmed into a keyslot in the KSM of the
|
||||||
|
request queue that the bio is being submitted to (or the crypto API fallback
|
||||||
|
KSM if the request queue doesn't have a KSM), and that the ``processing_ksm``
|
||||||
|
in the ``bi_crypt_context`` is set to this KSM
|
||||||
|
|
||||||
|
- That the bio has its own individual reference to the keyslot in this KSM.
|
||||||
|
Once the bio passes through blk-crypto, its encryption context is programmed
|
||||||
|
in some KSM. The "its own individual reference to the keyslot" ensures that
|
||||||
|
keyslots can be released by each bio independently of other bios while
|
||||||
|
ensuring that the bio has a valid reference to the keyslot when, for e.g., the
|
||||||
|
crypto API fallback KSM in blk-crypto performs crypto on the device's behalf.
|
||||||
|
The individual references are ensured by increasing the refcount for the
|
||||||
|
keyslot in the ``processing_ksm`` when a bio with a programmed encryption
|
||||||
|
context is cloned.
|
||||||
|
|
||||||
|
|
||||||
|
What blk-crypto does on bio submission
|
||||||
|
--------------------------------------
|
||||||
|
|
||||||
|
**Case 1:** blk-crypto is given a bio with only an encryption context that hasn't
|
||||||
|
been programmed into any keyslot in any KSM (for e.g. a bio from the FS).
|
||||||
|
In this case, blk-crypto will program the encryption context into the KSM of the
|
||||||
|
request queue the bio is being submitted to (and if this KSM does not exist,
|
||||||
|
then it will program it into blk-crypto's internal KSM for crypto API
|
||||||
|
fallback). The KSM that this encryption context was programmed into is stored
|
||||||
|
as the ``processing_ksm`` in the bio's ``bi_crypt_context``.
|
||||||
|
|
||||||
|
**Case 2:** blk-crypto is given a bio whose encryption context has already been
|
||||||
|
programmed into a keyslot in the *crypto API fallback* KSM.
|
||||||
|
In this case, blk-crypto does nothing; it treats the bio as not having
|
||||||
|
specified an encryption context. Note that we cannot do here what we will do
|
||||||
|
in Case 3 because we would have already encrypted the bio via the crypto API
|
||||||
|
by this point.
|
||||||
|
|
||||||
|
**Case 3:** blk-crypto is given a bio whose encryption context has already been
|
||||||
|
programmed into a keyslot in some KSM (that is *not* the crypto API fallback
|
||||||
|
KSM).
|
||||||
|
In this case, blk-crypto first releases that keyslot from that KSM and then
|
||||||
|
treats the bio as in Case 1.
|
||||||
|
|
||||||
|
This way, when a device driver is processing a bio, it can be sure that
|
||||||
|
the bio's encryption context has been programmed into some KSM (either the
|
||||||
|
device driver's request queue's KSM, or blk-crypto's crypto API fallback KSM).
|
||||||
|
It then simply needs to check if the bio's processing_ksm is the device's
|
||||||
|
request queue's KSM. If so, then it should proceed with IE. If not, it should
|
||||||
|
simply do nothing with respect to crypto, because some other KSM (perhaps the
|
||||||
|
blk-crypto crypto API fallback KSM) is handling the en/decryption.
|
||||||
|
|
||||||
|
Blk-crypto will release the keyslot that is being held by the bio (and also
|
||||||
|
decrypt it if the bio is using the crypto API fallback KSM) once
|
||||||
|
``bio_remaining_done`` returns true for the bio.
|
||||||
|
|
||||||
|
|
||||||
|
Layered Devices
|
||||||
|
===============
|
||||||
|
|
||||||
|
Layered devices that wish to support IE need to create their own keyslot
|
||||||
|
manager for their request queue, and expose whatever functionality they choose.
|
||||||
|
When a layered device wants to pass a bio to another layer (either by
|
||||||
|
resubmitting the same bio, or by submitting a clone), it doesn't need to do
|
||||||
|
anything special because the bio (or the clone) will once again pass through
|
||||||
|
blk-crypto, which will work as described in Case 3. If a layered device wants
|
||||||
|
for some reason to do the IO by itself instead of passing it on to a child
|
||||||
|
device, but it also chose to expose IE capabilities by setting up a KSM in its
|
||||||
|
request queue, it is then responsible for en/decrypting the data itself. In
|
||||||
|
such cases, the device can choose to call the blk-crypto function
|
||||||
|
``blk_crypto_fallback_to_kernel_crypto_api`` (TODO: Not yet implemented), which will
|
||||||
|
cause the en/decryption to be done via the crypto API fallback.
|
||||||
|
|
||||||
|
|
||||||
|
Future Optimizations for layered devices
|
||||||
|
========================================
|
||||||
|
|
||||||
|
Creating a keyslot manager for the layered device uses up memory for each
|
||||||
|
keyslot, and in general, a layered device (like dm-linear) merely passes the
|
||||||
|
request on to a "child" device, so the keyslots in the layered device itself
|
||||||
|
might be completely unused. We can instead define a new type of KSM; the
|
||||||
|
"passthrough KSM", that layered devices can use to let blk-crypto know that
|
||||||
|
this layered device *will* pass the bio to some child device (and hence
|
||||||
|
through blk-crypto again, at which point blk-crypto can program the encryption
|
||||||
|
context, instead of programming it into the layered device's KSM). Again, if
|
||||||
|
the device "lies" and decides to do the IO itself instead of passing it on to
|
||||||
|
a child device, it is responsible for doing the en/decryption (and can choose
|
||||||
|
to call ``blk_crypto_fallback_to_kernel_crypto_api``). Another use case for the
|
||||||
|
"passthrough KSM" is for IE devices that want to manage their own keyslots/do
|
||||||
|
not have a limited number of keyslots.
|
@ -41,6 +41,9 @@ smaller binary while the latter is 1.1 - 2 times faster.
|
|||||||
Both KASAN modes work with both SLUB and SLAB memory allocators.
|
Both KASAN modes work with both SLUB and SLAB memory allocators.
|
||||||
For better bug detection and nicer reporting, enable CONFIG_STACKTRACE.
|
For better bug detection and nicer reporting, enable CONFIG_STACKTRACE.
|
||||||
|
|
||||||
|
To augment reports with last allocation and freeing stack of the physical page,
|
||||||
|
it is recommended to enable also CONFIG_PAGE_OWNER and boot with page_owner=on.
|
||||||
|
|
||||||
To disable instrumentation for specific files or directories, add a line
|
To disable instrumentation for specific files or directories, add a line
|
||||||
similar to the following to the respective kernel Makefile:
|
similar to the following to the respective kernel Makefile:
|
||||||
|
|
||||||
|
@ -169,6 +169,49 @@ A driver's probe() may return a negative errno value to indicate that
|
|||||||
the driver did not bind to this device, in which case it should have
|
the driver did not bind to this device, in which case it should have
|
||||||
released all resources it allocated::
|
released all resources it allocated::
|
||||||
|
|
||||||
|
void (*sync_state)(struct device *dev);
|
||||||
|
|
||||||
|
sync_state is called only once for a device. It's called when all the consumer
|
||||||
|
devices of the device have successfully probed. The list of consumers of the
|
||||||
|
device is obtained by looking at the device links connecting that device to its
|
||||||
|
consumer devices.
|
||||||
|
|
||||||
|
The first attempt to call sync_state() is made during late_initcall_sync() to
|
||||||
|
give firmware and drivers time to link devices to each other. During the first
|
||||||
|
attempt at calling sync_state(), if all the consumers of the device at that
|
||||||
|
point in time have already probed successfully, sync_state() is called right
|
||||||
|
away. If there are no consumers of the device during the first attempt, that
|
||||||
|
too is considered as "all consumers of the device have probed" and sync_state()
|
||||||
|
is called right away.
|
||||||
|
|
||||||
|
If during the first attempt at calling sync_state() for a device, there are
|
||||||
|
still consumers that haven't probed successfully, the sync_state() call is
|
||||||
|
postponed and reattempted in the future only when one or more consumers of the
|
||||||
|
device probe successfully. If during the reattempt, the driver core finds that
|
||||||
|
there are one or more consumers of the device that haven't probed yet, then
|
||||||
|
sync_state() call is postponed again.
|
||||||
|
|
||||||
|
A typical use case for sync_state() is to have the kernel cleanly take over
|
||||||
|
management of devices from the bootloader. For example, if a device is left on
|
||||||
|
and at a particular hardware configuration by the bootloader, the device's
|
||||||
|
driver might need to keep the device in the boot configuration until all the
|
||||||
|
consumers of the device have probed. Once all the consumers of the device have
|
||||||
|
probed, the device's driver can synchronize the hardware state of the device to
|
||||||
|
match the aggregated software state requested by all the consumers. Hence the
|
||||||
|
name sync_state().
|
||||||
|
|
||||||
|
While obvious examples of resources that can benefit from sync_state() include
|
||||||
|
resources such as regulator, sync_state() can also be useful for complex
|
||||||
|
resources like IOMMUs. For example, IOMMUs with multiple consumers (devices
|
||||||
|
whose addresses are remapped by the IOMMU) might need to keep their mappings
|
||||||
|
fixed at (or additive to) the boot configuration until all its consumers have
|
||||||
|
probed.
|
||||||
|
|
||||||
|
While the typical use case for sync_state() is to have the kernel cleanly take
|
||||||
|
over management of devices from the bootloader, the usage of sync_state() is
|
||||||
|
not restricted to that. Use it whenever it makes sense to take an action after
|
||||||
|
all the consumers of a device have probed.
|
||||||
|
|
||||||
int (*remove) (struct device *dev);
|
int (*remove) (struct device *dev);
|
||||||
|
|
||||||
remove is called to unbind a driver from a device. This may be
|
remove is called to unbind a driver from a device. This may be
|
||||||
|
@ -256,13 +256,8 @@ alternative master keys or to support rotating master keys. Instead,
|
|||||||
the master keys may be wrapped in userspace, e.g. as is done by the
|
the master keys may be wrapped in userspace, e.g. as is done by the
|
||||||
`fscrypt <https://github.com/google/fscrypt>`_ tool.
|
`fscrypt <https://github.com/google/fscrypt>`_ tool.
|
||||||
|
|
||||||
Including the inode number in the IVs was considered. However, it was
|
DIRECT_KEY policies
|
||||||
rejected as it would have prevented ext4 filesystems from being
|
-------------------
|
||||||
resized, and by itself still wouldn't have been sufficient to prevent
|
|
||||||
the same key from being directly reused for both XTS and CTS-CBC.
|
|
||||||
|
|
||||||
DIRECT_KEY and per-mode keys
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
The Adiantum encryption mode (see `Encryption modes and usage`_) is
|
The Adiantum encryption mode (see `Encryption modes and usage`_) is
|
||||||
suitable for both contents and filenames encryption, and it accepts
|
suitable for both contents and filenames encryption, and it accepts
|
||||||
@ -285,6 +280,21 @@ IV. Moreover:
|
|||||||
key derived using the KDF. Users may use the same master key for
|
key derived using the KDF. Users may use the same master key for
|
||||||
other v2 encryption policies.
|
other v2 encryption policies.
|
||||||
|
|
||||||
|
IV_INO_LBLK_64 policies
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
When FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64 is set in the fscrypt policy,
|
||||||
|
the encryption keys are derived from the master key, encryption mode
|
||||||
|
number, and filesystem UUID. This normally results in all files
|
||||||
|
protected by the same master key sharing a single contents encryption
|
||||||
|
key and a single filenames encryption key. To still encrypt different
|
||||||
|
files' data differently, inode numbers are included in the IVs.
|
||||||
|
Consequently, shrinking the filesystem may not be allowed.
|
||||||
|
|
||||||
|
This format is optimized for use with inline encryption hardware
|
||||||
|
compliant with the UFS or eMMC standards, which support only 64 IV
|
||||||
|
bits per I/O request and may have only a small number of keyslots.
|
||||||
|
|
||||||
Key identifiers
|
Key identifiers
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
@ -308,8 +318,9 @@ If unsure, you should use the (AES-256-XTS, AES-256-CTS-CBC) pair.
|
|||||||
|
|
||||||
AES-128-CBC was added only for low-powered embedded devices with
|
AES-128-CBC was added only for low-powered embedded devices with
|
||||||
crypto accelerators such as CAAM or CESA that do not support XTS. To
|
crypto accelerators such as CAAM or CESA that do not support XTS. To
|
||||||
use AES-128-CBC, CONFIG_CRYPTO_SHA256 (or another SHA-256
|
use AES-128-CBC, CONFIG_CRYPTO_ESSIV and CONFIG_CRYPTO_SHA256 (or
|
||||||
implementation) must be enabled so that ESSIV can be used.
|
another SHA-256 implementation) must be enabled so that ESSIV can be
|
||||||
|
used.
|
||||||
|
|
||||||
Adiantum is a (primarily) stream cipher-based mode that is fast even
|
Adiantum is a (primarily) stream cipher-based mode that is fast even
|
||||||
on CPUs without dedicated crypto instructions. It's also a true
|
on CPUs without dedicated crypto instructions. It's also a true
|
||||||
@ -341,10 +352,16 @@ a little endian number, except that:
|
|||||||
is encrypted with AES-256 where the AES-256 key is the SHA-256 hash
|
is encrypted with AES-256 where the AES-256 key is the SHA-256 hash
|
||||||
of the file's data encryption key.
|
of the file's data encryption key.
|
||||||
|
|
||||||
- In the "direct key" configuration (FSCRYPT_POLICY_FLAG_DIRECT_KEY
|
- With `DIRECT_KEY policies`_, the file's nonce is appended to the IV.
|
||||||
set in the fscrypt_policy), the file's nonce is also appended to the
|
Currently this is only allowed with the Adiantum encryption mode.
|
||||||
IV. Currently this is only allowed with the Adiantum encryption
|
|
||||||
mode.
|
- With `IV_INO_LBLK_64 policies`_, the logical block number is limited
|
||||||
|
to 32 bits and is placed in bits 0-31 of the IV. The inode number
|
||||||
|
(which is also limited to 32 bits) is placed in bits 32-63.
|
||||||
|
|
||||||
|
Note that because file logical block numbers are included in the IVs,
|
||||||
|
filesystems must enforce that blocks are never shifted around within
|
||||||
|
encrypted files, e.g. via "collapse range" or "insert range".
|
||||||
|
|
||||||
Filenames encryption
|
Filenames encryption
|
||||||
--------------------
|
--------------------
|
||||||
@ -354,10 +371,10 @@ the requirements to retain support for efficient directory lookups and
|
|||||||
filenames of up to 255 bytes, the same IV is used for every filename
|
filenames of up to 255 bytes, the same IV is used for every filename
|
||||||
in a directory.
|
in a directory.
|
||||||
|
|
||||||
However, each encrypted directory still uses a unique key; or
|
However, each encrypted directory still uses a unique key, or
|
||||||
alternatively (for the "direct key" configuration) has the file's
|
alternatively has the file's nonce (for `DIRECT_KEY policies`_) or
|
||||||
nonce included in the IVs. Thus, IV reuse is limited to within a
|
inode number (for `IV_INO_LBLK_64 policies`_) included in the IVs.
|
||||||
single directory.
|
Thus, IV reuse is limited to within a single directory.
|
||||||
|
|
||||||
With CTS-CBC, the IV reuse means that when the plaintext filenames
|
With CTS-CBC, the IV reuse means that when the plaintext filenames
|
||||||
share a common prefix at least as long as the cipher block size (16
|
share a common prefix at least as long as the cipher block size (16
|
||||||
@ -431,12 +448,15 @@ This structure must be initialized as follows:
|
|||||||
(1) for ``contents_encryption_mode`` and FSCRYPT_MODE_AES_256_CTS
|
(1) for ``contents_encryption_mode`` and FSCRYPT_MODE_AES_256_CTS
|
||||||
(4) for ``filenames_encryption_mode``.
|
(4) for ``filenames_encryption_mode``.
|
||||||
|
|
||||||
- ``flags`` must contain a value from ``<linux/fscrypt.h>`` which
|
- ``flags`` contains optional flags from ``<linux/fscrypt.h>``:
|
||||||
identifies the amount of NUL-padding to use when encrypting
|
|
||||||
filenames. If unsure, use FSCRYPT_POLICY_FLAGS_PAD_32 (0x3).
|
- FSCRYPT_POLICY_FLAGS_PAD_*: The amount of NUL padding to use when
|
||||||
Additionally, if the encryption modes are both
|
encrypting filenames. If unsure, use FSCRYPT_POLICY_FLAGS_PAD_32
|
||||||
FSCRYPT_MODE_ADIANTUM, this can contain
|
(0x3).
|
||||||
FSCRYPT_POLICY_FLAG_DIRECT_KEY; see `DIRECT_KEY and per-mode keys`_.
|
- FSCRYPT_POLICY_FLAG_DIRECT_KEY: See `DIRECT_KEY policies`_.
|
||||||
|
- FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64: See `IV_INO_LBLK_64
|
||||||
|
policies`_. This is mutually exclusive with DIRECT_KEY and is not
|
||||||
|
supported on v1 policies.
|
||||||
|
|
||||||
- For v2 encryption policies, ``__reserved`` must be zeroed.
|
- For v2 encryption policies, ``__reserved`` must be zeroed.
|
||||||
|
|
||||||
@ -1089,7 +1109,7 @@ policy structs (see `Setting an encryption policy`_), except that the
|
|||||||
context structs also contain a nonce. The nonce is randomly generated
|
context structs also contain a nonce. The nonce is randomly generated
|
||||||
by the kernel and is used as KDF input or as a tweak to cause
|
by the kernel and is used as KDF input or as a tweak to cause
|
||||||
different files to be encrypted differently; see `Per-file keys`_ and
|
different files to be encrypted differently; see `Per-file keys`_ and
|
||||||
`DIRECT_KEY and per-mode keys`_.
|
`DIRECT_KEY policies`_.
|
||||||
|
|
||||||
Data path changes
|
Data path changes
|
||||||
-----------------
|
-----------------
|
||||||
|
@ -233,6 +233,7 @@ Code Seq# Include File Comments
|
|||||||
'f' 00-0F fs/ext4/ext4.h conflict!
|
'f' 00-0F fs/ext4/ext4.h conflict!
|
||||||
'f' 00-0F linux/fs.h conflict!
|
'f' 00-0F linux/fs.h conflict!
|
||||||
'f' 00-0F fs/ocfs2/ocfs2_fs.h conflict!
|
'f' 00-0F fs/ocfs2/ocfs2_fs.h conflict!
|
||||||
|
'f' 13-27 linux/fscrypt.h
|
||||||
'f' 81-8F linux/fsverity.h
|
'f' 81-8F linux/fsverity.h
|
||||||
'g' 00-0F linux/usb/gadgetfs.h
|
'g' 00-0F linux/usb/gadgetfs.h
|
||||||
'g' 20-2F linux/usb/g_printer.h
|
'g' 20-2F linux/usb/g_printer.h
|
||||||
|
@ -16,16 +16,21 @@ the kernel may be unreproducible, and how to avoid them.
|
|||||||
Timestamps
|
Timestamps
|
||||||
----------
|
----------
|
||||||
|
|
||||||
The kernel embeds a timestamp in two places:
|
The kernel embeds timestamps in three places:
|
||||||
|
|
||||||
* The version string exposed by ``uname()`` and included in
|
* The version string exposed by ``uname()`` and included in
|
||||||
``/proc/version``
|
``/proc/version``
|
||||||
|
|
||||||
* File timestamps in the embedded initramfs
|
* File timestamps in the embedded initramfs
|
||||||
|
|
||||||
By default the timestamp is the current time. This must be overridden
|
* If enabled via ``CONFIG_IKHEADERS``, file timestamps of kernel
|
||||||
using the `KBUILD_BUILD_TIMESTAMP`_ variable. If you are building
|
headers embedded in the kernel or respective module,
|
||||||
from a git commit, you could use its commit date.
|
exposed via ``/sys/kernel/kheaders.tar.xz``
|
||||||
|
|
||||||
|
By default the timestamp is the current time and in the case of
|
||||||
|
``kheaders`` the various files' modification times. This must
|
||||||
|
be overridden using the `KBUILD_BUILD_TIMESTAMP`_ variable.
|
||||||
|
If you are building from a git commit, you could use its commit date.
|
||||||
|
|
||||||
The kernel does *not* use the ``__DATE__`` and ``__TIME__`` macros,
|
The kernel does *not* use the ``__DATE__`` and ``__TIME__`` macros,
|
||||||
and enables warnings if they are used. If you incorporate external
|
and enables warnings if they are used. If you incorporate external
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
.. SPDX-License-Identifier: GPL-2.0+
|
.. SPDX-License-Identifier: GPL-2.0+
|
||||||
|
|
||||||
==============================================================
|
=============================================================
|
||||||
Linux* Base Driver for the Intel(R) PRO/100 Family of Adapters
|
Linux Base Driver for the Intel(R) PRO/100 Family of Adapters
|
||||||
==============================================================
|
=============================================================
|
||||||
|
|
||||||
June 1, 2018
|
June 1, 2018
|
||||||
|
|
||||||
@ -21,7 +21,7 @@ Contents
|
|||||||
In This Release
|
In This Release
|
||||||
===============
|
===============
|
||||||
|
|
||||||
This file describes the Linux* Base Driver for the Intel(R) PRO/100 Family of
|
This file describes the Linux Base Driver for the Intel(R) PRO/100 Family of
|
||||||
Adapters. This driver includes support for Itanium(R)2-based systems.
|
Adapters. This driver includes support for Itanium(R)2-based systems.
|
||||||
|
|
||||||
For questions related to hardware requirements, refer to the documentation
|
For questions related to hardware requirements, refer to the documentation
|
||||||
@ -138,9 +138,9 @@ version 1.6 or later is required for this functionality.
|
|||||||
The latest release of ethtool can be found from
|
The latest release of ethtool can be found from
|
||||||
https://www.kernel.org/pub/software/network/ethtool/
|
https://www.kernel.org/pub/software/network/ethtool/
|
||||||
|
|
||||||
Enabling Wake on LAN* (WoL)
|
Enabling Wake on LAN (WoL)
|
||||||
---------------------------
|
--------------------------
|
||||||
WoL is provided through the ethtool* utility. For instructions on
|
WoL is provided through the ethtool utility. For instructions on
|
||||||
enabling WoL with ethtool, refer to the ethtool man page. WoL will be
|
enabling WoL with ethtool, refer to the ethtool man page. WoL will be
|
||||||
enabled on the system during the next shut down or reboot. For this
|
enabled on the system during the next shut down or reboot. For this
|
||||||
driver version, in order to enable WoL, the e100 driver must be loaded
|
driver version, in order to enable WoL, the e100 driver must be loaded
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
.. SPDX-License-Identifier: GPL-2.0+
|
.. SPDX-License-Identifier: GPL-2.0+
|
||||||
|
|
||||||
===========================================================
|
==========================================================
|
||||||
Linux* Base Driver for Intel(R) Ethernet Network Connection
|
Linux Base Driver for Intel(R) Ethernet Network Connection
|
||||||
===========================================================
|
==========================================================
|
||||||
|
|
||||||
Intel Gigabit Linux driver.
|
Intel Gigabit Linux driver.
|
||||||
Copyright(c) 1999 - 2013 Intel Corporation.
|
Copyright(c) 1999 - 2013 Intel Corporation.
|
||||||
@ -438,10 +438,10 @@ ethtool
|
|||||||
The latest release of ethtool can be found from
|
The latest release of ethtool can be found from
|
||||||
https://www.kernel.org/pub/software/network/ethtool/
|
https://www.kernel.org/pub/software/network/ethtool/
|
||||||
|
|
||||||
Enabling Wake on LAN* (WoL)
|
Enabling Wake on LAN (WoL)
|
||||||
---------------------------
|
--------------------------
|
||||||
|
|
||||||
WoL is configured through the ethtool* utility.
|
WoL is configured through the ethtool utility.
|
||||||
|
|
||||||
WoL will be enabled on the system during the next shut down or reboot.
|
WoL will be enabled on the system during the next shut down or reboot.
|
||||||
For this driver version, in order to enable WoL, the e1000 driver must be
|
For this driver version, in order to enable WoL, the e1000 driver must be
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
.. SPDX-License-Identifier: GPL-2.0+
|
.. SPDX-License-Identifier: GPL-2.0+
|
||||||
|
|
||||||
======================================================
|
=====================================================
|
||||||
Linux* Driver for Intel(R) Ethernet Network Connection
|
Linux Driver for Intel(R) Ethernet Network Connection
|
||||||
======================================================
|
=====================================================
|
||||||
|
|
||||||
Intel Gigabit Linux driver.
|
Intel Gigabit Linux driver.
|
||||||
Copyright(c) 2008-2018 Intel Corporation.
|
Copyright(c) 2008-2018 Intel Corporation.
|
||||||
@ -338,7 +338,7 @@ and higher cannot be forced. Use the autonegotiation advertising setting to
|
|||||||
manually set devices for 1 Gbps and higher.
|
manually set devices for 1 Gbps and higher.
|
||||||
|
|
||||||
Speed, duplex, and autonegotiation advertising are configured through the
|
Speed, duplex, and autonegotiation advertising are configured through the
|
||||||
ethtool* utility.
|
ethtool utility.
|
||||||
|
|
||||||
Caution: Only experienced network administrators should force speed and duplex
|
Caution: Only experienced network administrators should force speed and duplex
|
||||||
or change autonegotiation advertising manually. The settings at the switch must
|
or change autonegotiation advertising manually. The settings at the switch must
|
||||||
@ -351,9 +351,9 @@ will not attempt to auto-negotiate with its link partner since those adapters
|
|||||||
operate only in full duplex and only at their native speed.
|
operate only in full duplex and only at their native speed.
|
||||||
|
|
||||||
|
|
||||||
Enabling Wake on LAN* (WoL)
|
Enabling Wake on LAN (WoL)
|
||||||
---------------------------
|
--------------------------
|
||||||
WoL is configured through the ethtool* utility.
|
WoL is configured through the ethtool utility.
|
||||||
|
|
||||||
WoL will be enabled on the system during the next shut down or reboot. For
|
WoL will be enabled on the system during the next shut down or reboot. For
|
||||||
this driver version, in order to enable WoL, the e1000e driver must be loaded
|
this driver version, in order to enable WoL, the e1000e driver must be loaded
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
.. SPDX-License-Identifier: GPL-2.0+
|
.. SPDX-License-Identifier: GPL-2.0+
|
||||||
|
|
||||||
==============================================================
|
=============================================================
|
||||||
Linux* Base Driver for Intel(R) Ethernet Multi-host Controller
|
Linux Base Driver for Intel(R) Ethernet Multi-host Controller
|
||||||
==============================================================
|
=============================================================
|
||||||
|
|
||||||
August 20, 2018
|
August 20, 2018
|
||||||
Copyright(c) 2015-2018 Intel Corporation.
|
Copyright(c) 2015-2018 Intel Corporation.
|
||||||
@ -120,8 +120,8 @@ rx-flow-hash tcp4|udp4|ah4|esp4|sctp4|tcp6|udp6|ah6|esp6|sctp6 m|v|t|s|d|f|n|r
|
|||||||
Known Issues/Troubleshooting
|
Known Issues/Troubleshooting
|
||||||
============================
|
============================
|
||||||
|
|
||||||
Enabling SR-IOV in a 64-bit Microsoft* Windows Server* 2012/R2 guest OS under Linux KVM
|
Enabling SR-IOV in a 64-bit Microsoft Windows Server 2012/R2 guest OS under Linux KVM
|
||||||
---------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------
|
||||||
KVM Hypervisor/VMM supports direct assignment of a PCIe device to a VM. This
|
KVM Hypervisor/VMM supports direct assignment of a PCIe device to a VM. This
|
||||||
includes traditional PCIe devices, as well as SR-IOV-capable devices based on
|
includes traditional PCIe devices, as well as SR-IOV-capable devices based on
|
||||||
the Intel Ethernet Controller XL710.
|
the Intel Ethernet Controller XL710.
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
.. SPDX-License-Identifier: GPL-2.0+
|
.. SPDX-License-Identifier: GPL-2.0+
|
||||||
|
|
||||||
==================================================================
|
=================================================================
|
||||||
Linux* Base Driver for the Intel(R) Ethernet Controller 700 Series
|
Linux Base Driver for the Intel(R) Ethernet Controller 700 Series
|
||||||
==================================================================
|
=================================================================
|
||||||
|
|
||||||
Intel 40 Gigabit Linux driver.
|
Intel 40 Gigabit Linux driver.
|
||||||
Copyright(c) 1999-2018 Intel Corporation.
|
Copyright(c) 1999-2018 Intel Corporation.
|
||||||
@ -384,7 +384,7 @@ NOTE: You cannot set the speed for devices based on the Intel(R) Ethernet
|
|||||||
Network Adapter XXV710 based devices.
|
Network Adapter XXV710 based devices.
|
||||||
|
|
||||||
Speed, duplex, and autonegotiation advertising are configured through the
|
Speed, duplex, and autonegotiation advertising are configured through the
|
||||||
ethtool* utility.
|
ethtool utility.
|
||||||
|
|
||||||
Caution: Only experienced network administrators should force speed and duplex
|
Caution: Only experienced network administrators should force speed and duplex
|
||||||
or change autonegotiation advertising manually. The settings at the switch must
|
or change autonegotiation advertising manually. The settings at the switch must
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
.. SPDX-License-Identifier: GPL-2.0+
|
.. SPDX-License-Identifier: GPL-2.0+
|
||||||
|
|
||||||
==================================================================
|
=================================================================
|
||||||
Linux* Base Driver for Intel(R) Ethernet Adaptive Virtual Function
|
Linux Base Driver for Intel(R) Ethernet Adaptive Virtual Function
|
||||||
==================================================================
|
=================================================================
|
||||||
|
|
||||||
Intel Ethernet Adaptive Virtual Function Linux driver.
|
Intel Ethernet Adaptive Virtual Function Linux driver.
|
||||||
Copyright(c) 2013-2018 Intel Corporation.
|
Copyright(c) 2013-2018 Intel Corporation.
|
||||||
@ -19,7 +19,7 @@ Contents
|
|||||||
Overview
|
Overview
|
||||||
========
|
========
|
||||||
|
|
||||||
This file describes the iavf Linux* Base Driver. This driver was formerly
|
This file describes the iavf Linux Base Driver. This driver was formerly
|
||||||
called i40evf.
|
called i40evf.
|
||||||
|
|
||||||
The iavf driver supports the below mentioned virtual function devices and
|
The iavf driver supports the below mentioned virtual function devices and
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
.. SPDX-License-Identifier: GPL-2.0+
|
.. SPDX-License-Identifier: GPL-2.0+
|
||||||
|
|
||||||
===================================================================
|
==================================================================
|
||||||
Linux* Base Driver for the Intel(R) Ethernet Connection E800 Series
|
Linux Base Driver for the Intel(R) Ethernet Connection E800 Series
|
||||||
===================================================================
|
==================================================================
|
||||||
|
|
||||||
Intel ice Linux driver.
|
Intel ice Linux driver.
|
||||||
Copyright(c) 2018 Intel Corporation.
|
Copyright(c) 2018 Intel Corporation.
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
.. SPDX-License-Identifier: GPL-2.0+
|
.. SPDX-License-Identifier: GPL-2.0+
|
||||||
|
|
||||||
===========================================================
|
==========================================================
|
||||||
Linux* Base Driver for Intel(R) Ethernet Network Connection
|
Linux Base Driver for Intel(R) Ethernet Network Connection
|
||||||
===========================================================
|
==========================================================
|
||||||
|
|
||||||
Intel Gigabit Linux driver.
|
Intel Gigabit Linux driver.
|
||||||
Copyright(c) 1999-2018 Intel Corporation.
|
Copyright(c) 1999-2018 Intel Corporation.
|
||||||
@ -129,9 +129,9 @@ version is required for this functionality. Download it at:
|
|||||||
https://www.kernel.org/pub/software/network/ethtool/
|
https://www.kernel.org/pub/software/network/ethtool/
|
||||||
|
|
||||||
|
|
||||||
Enabling Wake on LAN* (WoL)
|
Enabling Wake on LAN (WoL)
|
||||||
---------------------------
|
--------------------------
|
||||||
WoL is configured through the ethtool* utility.
|
WoL is configured through the ethtool utility.
|
||||||
|
|
||||||
WoL will be enabled on the system during the next shut down or reboot. For
|
WoL will be enabled on the system during the next shut down or reboot. For
|
||||||
this driver version, in order to enable WoL, the igb driver must be loaded
|
this driver version, in order to enable WoL, the igb driver must be loaded
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
.. SPDX-License-Identifier: GPL-2.0+
|
.. SPDX-License-Identifier: GPL-2.0+
|
||||||
|
|
||||||
============================================================
|
===========================================================
|
||||||
Linux* Base Virtual Function Driver for Intel(R) 1G Ethernet
|
Linux Base Virtual Function Driver for Intel(R) 1G Ethernet
|
||||||
============================================================
|
===========================================================
|
||||||
|
|
||||||
Intel Gigabit Virtual Function Linux driver.
|
Intel Gigabit Virtual Function Linux driver.
|
||||||
Copyright(c) 1999-2018 Intel Corporation.
|
Copyright(c) 1999-2018 Intel Corporation.
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
.. SPDX-License-Identifier: GPL-2.0+
|
.. SPDX-License-Identifier: GPL-2.0+
|
||||||
|
|
||||||
=============================================================================
|
===========================================================================
|
||||||
Linux* Base Driver for the Intel(R) Ethernet 10 Gigabit PCI Express Adapters
|
Linux Base Driver for the Intel(R) Ethernet 10 Gigabit PCI Express Adapters
|
||||||
=============================================================================
|
===========================================================================
|
||||||
|
|
||||||
Intel 10 Gigabit Linux driver.
|
Intel 10 Gigabit Linux driver.
|
||||||
Copyright(c) 1999-2018 Intel Corporation.
|
Copyright(c) 1999-2018 Intel Corporation.
|
||||||
@ -519,8 +519,8 @@ The offload is also supported for ixgbe's VFs, but the VF must be set as
|
|||||||
Known Issues/Troubleshooting
|
Known Issues/Troubleshooting
|
||||||
============================
|
============================
|
||||||
|
|
||||||
Enabling SR-IOV in a 64-bit Microsoft* Windows Server* 2012/R2 guest OS
|
Enabling SR-IOV in a 64-bit Microsoft Windows Server 2012/R2 guest OS
|
||||||
-----------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
Linux KVM Hypervisor/VMM supports direct assignment of a PCIe device to a VM.
|
Linux KVM Hypervisor/VMM supports direct assignment of a PCIe device to a VM.
|
||||||
This includes traditional PCIe devices, as well as SR-IOV-capable devices based
|
This includes traditional PCIe devices, as well as SR-IOV-capable devices based
|
||||||
on the Intel Ethernet Controller XL710.
|
on the Intel Ethernet Controller XL710.
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
.. SPDX-License-Identifier: GPL-2.0+
|
.. SPDX-License-Identifier: GPL-2.0+
|
||||||
|
|
||||||
=============================================================
|
============================================================
|
||||||
Linux* Base Virtual Function Driver for Intel(R) 10G Ethernet
|
Linux Base Virtual Function Driver for Intel(R) 10G Ethernet
|
||||||
=============================================================
|
============================================================
|
||||||
|
|
||||||
Intel 10 Gigabit Virtual Function Linux driver.
|
Intel 10 Gigabit Virtual Function Linux driver.
|
||||||
Copyright(c) 1999-2018 Intel Corporation.
|
Copyright(c) 1999-2018 Intel Corporation.
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
.. SPDX-License-Identifier: GPL-2.0+
|
.. SPDX-License-Identifier: GPL-2.0+
|
||||||
|
|
||||||
==========================================================
|
========================================================
|
||||||
Linux* Driver for the Pensando(R) Ethernet adapter family
|
Linux Driver for the Pensando(R) Ethernet adapter family
|
||||||
==========================================================
|
========================================================
|
||||||
|
|
||||||
Pensando Linux Ethernet driver.
|
Pensando Linux Ethernet driver.
|
||||||
Copyright(c) 2019 Pensando Systems, Inc
|
Copyright(c) 2019 Pensando Systems, Inc
|
||||||
@ -36,8 +36,10 @@ Support
|
|||||||
=======
|
=======
|
||||||
For general Linux networking support, please use the netdev mailing
|
For general Linux networking support, please use the netdev mailing
|
||||||
list, which is monitored by Pensando personnel::
|
list, which is monitored by Pensando personnel::
|
||||||
|
|
||||||
netdev@vger.kernel.org
|
netdev@vger.kernel.org
|
||||||
|
|
||||||
For more specific support needs, please use the Pensando driver support
|
For more specific support needs, please use the Pensando driver support
|
||||||
email::
|
email::
|
||||||
drivers@pensando.io
|
|
||||||
|
drivers@pensando.io
|
||||||
|
@ -207,8 +207,8 @@ TCP variables:
|
|||||||
|
|
||||||
somaxconn - INTEGER
|
somaxconn - INTEGER
|
||||||
Limit of socket listen() backlog, known in userspace as SOMAXCONN.
|
Limit of socket listen() backlog, known in userspace as SOMAXCONN.
|
||||||
Defaults to 128. See also tcp_max_syn_backlog for additional tuning
|
Defaults to 4096. (Was 128 before linux-5.4)
|
||||||
for TCP sockets.
|
See also tcp_max_syn_backlog for additional tuning for TCP sockets.
|
||||||
|
|
||||||
tcp_abort_on_overflow - BOOLEAN
|
tcp_abort_on_overflow - BOOLEAN
|
||||||
If listening service is too slow to accept new connections,
|
If listening service is too slow to accept new connections,
|
||||||
@ -408,11 +408,14 @@ tcp_max_orphans - INTEGER
|
|||||||
up to ~64K of unswappable memory.
|
up to ~64K of unswappable memory.
|
||||||
|
|
||||||
tcp_max_syn_backlog - INTEGER
|
tcp_max_syn_backlog - INTEGER
|
||||||
Maximal number of remembered connection requests, which have not
|
Maximal number of remembered connection requests (SYN_RECV),
|
||||||
received an acknowledgment from connecting client.
|
which have not received an acknowledgment from connecting client.
|
||||||
|
This is a per-listener limit.
|
||||||
The minimal value is 128 for low memory machines, and it will
|
The minimal value is 128 for low memory machines, and it will
|
||||||
increase in proportion to the memory of machine.
|
increase in proportion to the memory of machine.
|
||||||
If server suffers from overload, try increasing this number.
|
If server suffers from overload, try increasing this number.
|
||||||
|
Remember to also check /proc/sys/net/core/somaxconn
|
||||||
|
A SYN_RECV request socket consumes about 304 bytes of memory.
|
||||||
|
|
||||||
tcp_max_tw_buckets - INTEGER
|
tcp_max_tw_buckets - INTEGER
|
||||||
Maximal number of timewait sockets held by system simultaneously.
|
Maximal number of timewait sockets held by system simultaneously.
|
||||||
|
@ -92,16 +92,16 @@ under some conditions.
|
|||||||
Part III: Registering a Network Device to DIM
|
Part III: Registering a Network Device to DIM
|
||||||
==============================================
|
==============================================
|
||||||
|
|
||||||
Net DIM API exposes the main function net_dim(struct net_dim *dim,
|
Net DIM API exposes the main function net_dim(struct dim *dim,
|
||||||
struct net_dim_sample end_sample). This function is the entry point to the Net
|
struct dim_sample end_sample). This function is the entry point to the Net
|
||||||
DIM algorithm and has to be called every time the driver would like to check if
|
DIM algorithm and has to be called every time the driver would like to check if
|
||||||
it should change interrupt moderation parameters. The driver should provide two
|
it should change interrupt moderation parameters. The driver should provide two
|
||||||
data structures: struct net_dim and struct net_dim_sample. Struct net_dim
|
data structures: struct dim and struct dim_sample. Struct dim
|
||||||
describes the state of DIM for a specific object (RX queue, TX queue,
|
describes the state of DIM for a specific object (RX queue, TX queue,
|
||||||
other queues, etc.). This includes the current selected profile, previous data
|
other queues, etc.). This includes the current selected profile, previous data
|
||||||
samples, the callback function provided by the driver and more.
|
samples, the callback function provided by the driver and more.
|
||||||
Struct net_dim_sample describes a data sample, which will be compared to the
|
Struct dim_sample describes a data sample, which will be compared to the
|
||||||
data sample stored in struct net_dim in order to decide on the algorithm's next
|
data sample stored in struct dim in order to decide on the algorithm's next
|
||||||
step. The sample should include bytes, packets and interrupts, measured by
|
step. The sample should include bytes, packets and interrupts, measured by
|
||||||
the driver.
|
the driver.
|
||||||
|
|
||||||
@ -110,9 +110,9 @@ main net_dim() function. The recommended method is to call net_dim() on each
|
|||||||
interrupt. Since Net DIM has a built-in moderation and it might decide to skip
|
interrupt. Since Net DIM has a built-in moderation and it might decide to skip
|
||||||
iterations under certain conditions, there is no need to moderate the net_dim()
|
iterations under certain conditions, there is no need to moderate the net_dim()
|
||||||
calls as well. As mentioned above, the driver needs to provide an object of type
|
calls as well. As mentioned above, the driver needs to provide an object of type
|
||||||
struct net_dim to the net_dim() function call. It is advised for each entity
|
struct dim to the net_dim() function call. It is advised for each entity
|
||||||
using Net DIM to hold a struct net_dim as part of its data structure and use it
|
using Net DIM to hold a struct dim as part of its data structure and use it
|
||||||
as the main Net DIM API object. The struct net_dim_sample should hold the latest
|
as the main Net DIM API object. The struct dim_sample should hold the latest
|
||||||
bytes, packets and interrupts count. No need to perform any calculations, just
|
bytes, packets and interrupts count. No need to perform any calculations, just
|
||||||
include the raw data.
|
include the raw data.
|
||||||
|
|
||||||
@ -132,19 +132,19 @@ usage is not complete but it should make the outline of the usage clear.
|
|||||||
|
|
||||||
my_driver.c:
|
my_driver.c:
|
||||||
|
|
||||||
#include <linux/net_dim.h>
|
#include <linux/dim.h>
|
||||||
|
|
||||||
/* Callback for net DIM to schedule on a decision to change moderation */
|
/* Callback for net DIM to schedule on a decision to change moderation */
|
||||||
void my_driver_do_dim_work(struct work_struct *work)
|
void my_driver_do_dim_work(struct work_struct *work)
|
||||||
{
|
{
|
||||||
/* Get struct net_dim from struct work_struct */
|
/* Get struct dim from struct work_struct */
|
||||||
struct net_dim *dim = container_of(work, struct net_dim,
|
struct dim *dim = container_of(work, struct dim,
|
||||||
work);
|
work);
|
||||||
/* Do interrupt moderation related stuff */
|
/* Do interrupt moderation related stuff */
|
||||||
...
|
...
|
||||||
|
|
||||||
/* Signal net DIM work is done and it should move to next iteration */
|
/* Signal net DIM work is done and it should move to next iteration */
|
||||||
dim->state = NET_DIM_START_MEASURE;
|
dim->state = DIM_START_MEASURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* My driver's interrupt handler */
|
/* My driver's interrupt handler */
|
||||||
@ -152,13 +152,13 @@ int my_driver_handle_interrupt(struct my_driver_entity *my_entity, ...)
|
|||||||
{
|
{
|
||||||
...
|
...
|
||||||
/* A struct to hold current measured data */
|
/* A struct to hold current measured data */
|
||||||
struct net_dim_sample dim_sample;
|
struct dim_sample dim_sample;
|
||||||
...
|
...
|
||||||
/* Initiate data sample struct with current data */
|
/* Initiate data sample struct with current data */
|
||||||
net_dim_sample(my_entity->events,
|
dim_update_sample(my_entity->events,
|
||||||
my_entity->packets,
|
my_entity->packets,
|
||||||
my_entity->bytes,
|
my_entity->bytes,
|
||||||
&dim_sample);
|
&dim_sample);
|
||||||
/* Call net DIM */
|
/* Call net DIM */
|
||||||
net_dim(&my_entity->dim, dim_sample);
|
net_dim(&my_entity->dim, dim_sample);
|
||||||
...
|
...
|
||||||
|
37
MAINTAINERS
37
MAINTAINERS
@ -2323,11 +2323,13 @@ F: drivers/edac/altera_edac.
|
|||||||
|
|
||||||
ARM/SPREADTRUM SoC SUPPORT
|
ARM/SPREADTRUM SoC SUPPORT
|
||||||
M: Orson Zhai <orsonzhai@gmail.com>
|
M: Orson Zhai <orsonzhai@gmail.com>
|
||||||
M: Baolin Wang <baolin.wang@linaro.org>
|
M: Baolin Wang <baolin.wang7@gmail.com>
|
||||||
M: Chunyan Zhang <zhang.lyra@gmail.com>
|
M: Chunyan Zhang <zhang.lyra@gmail.com>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: arch/arm64/boot/dts/sprd
|
F: arch/arm64/boot/dts/sprd
|
||||||
N: sprd
|
N: sprd
|
||||||
|
N: sc27xx
|
||||||
|
N: sc2731
|
||||||
|
|
||||||
ARM/STI ARCHITECTURE
|
ARM/STI ARCHITECTURE
|
||||||
M: Patrice Chotard <patrice.chotard@st.com>
|
M: Patrice Chotard <patrice.chotard@st.com>
|
||||||
@ -3096,7 +3098,7 @@ S: Supported
|
|||||||
F: arch/arm64/net/
|
F: arch/arm64/net/
|
||||||
|
|
||||||
BPF JIT for MIPS (32-BIT AND 64-BIT)
|
BPF JIT for MIPS (32-BIT AND 64-BIT)
|
||||||
M: Paul Burton <paul.burton@mips.com>
|
M: Paul Burton <paulburton@kernel.org>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
L: bpf@vger.kernel.org
|
L: bpf@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
@ -3183,7 +3185,7 @@ N: bcm216*
|
|||||||
N: kona
|
N: kona
|
||||||
F: arch/arm/mach-bcm/
|
F: arch/arm/mach-bcm/
|
||||||
|
|
||||||
BROADCOM BCM2835 ARM ARCHITECTURE
|
BROADCOM BCM2711/BCM2835 ARM ARCHITECTURE
|
||||||
M: Eric Anholt <eric@anholt.net>
|
M: Eric Anholt <eric@anholt.net>
|
||||||
M: Stefan Wahren <wahrenst@gmx.net>
|
M: Stefan Wahren <wahrenst@gmx.net>
|
||||||
L: bcm-kernel-feedback-list@broadcom.com
|
L: bcm-kernel-feedback-list@broadcom.com
|
||||||
@ -3191,6 +3193,7 @@ L: linux-rpi-kernel@lists.infradead.org (moderated for non-subscribers)
|
|||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
T: git git://github.com/anholt/linux
|
T: git git://github.com/anholt/linux
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
N: bcm2711
|
||||||
N: bcm2835
|
N: bcm2835
|
||||||
F: drivers/staging/vc04_services
|
F: drivers/staging/vc04_services
|
||||||
|
|
||||||
@ -3237,8 +3240,6 @@ S: Maintained
|
|||||||
F: drivers/usb/gadget/udc/bcm63xx_udc.*
|
F: drivers/usb/gadget/udc/bcm63xx_udc.*
|
||||||
|
|
||||||
BROADCOM BCM7XXX ARM ARCHITECTURE
|
BROADCOM BCM7XXX ARM ARCHITECTURE
|
||||||
M: Brian Norris <computersforpeace@gmail.com>
|
|
||||||
M: Gregory Fong <gregory.0xf0@gmail.com>
|
|
||||||
M: Florian Fainelli <f.fainelli@gmail.com>
|
M: Florian Fainelli <f.fainelli@gmail.com>
|
||||||
M: bcm-kernel-feedback-list@broadcom.com
|
M: bcm-kernel-feedback-list@broadcom.com
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
@ -8001,7 +8002,7 @@ S: Maintained
|
|||||||
F: drivers/usb/atm/ueagle-atm.c
|
F: drivers/usb/atm/ueagle-atm.c
|
||||||
|
|
||||||
IMGTEC ASCII LCD DRIVER
|
IMGTEC ASCII LCD DRIVER
|
||||||
M: Paul Burton <paul.burton@mips.com>
|
M: Paul Burton <paulburton@kernel.org>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/devicetree/bindings/auxdisplay/img-ascii-lcd.txt
|
F: Documentation/devicetree/bindings/auxdisplay/img-ascii-lcd.txt
|
||||||
F: drivers/auxdisplay/img-ascii-lcd.c
|
F: drivers/auxdisplay/img-ascii-lcd.c
|
||||||
@ -9122,7 +9123,7 @@ F: drivers/auxdisplay/ks0108.c
|
|||||||
F: include/linux/ks0108.h
|
F: include/linux/ks0108.h
|
||||||
|
|
||||||
L3MDEV
|
L3MDEV
|
||||||
M: David Ahern <dsa@cumulusnetworks.com>
|
M: David Ahern <dsahern@kernel.org>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: net/l3mdev
|
F: net/l3mdev
|
||||||
@ -10255,7 +10256,7 @@ MEDIATEK ETHERNET DRIVER
|
|||||||
M: Felix Fietkau <nbd@openwrt.org>
|
M: Felix Fietkau <nbd@openwrt.org>
|
||||||
M: John Crispin <john@phrozen.org>
|
M: John Crispin <john@phrozen.org>
|
||||||
M: Sean Wang <sean.wang@mediatek.com>
|
M: Sean Wang <sean.wang@mediatek.com>
|
||||||
M: Nelson Chang <nelson.chang@mediatek.com>
|
M: Mark Lee <Mark-MC.Lee@mediatek.com>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/net/ethernet/mediatek/
|
F: drivers/net/ethernet/mediatek/
|
||||||
@ -10828,7 +10829,7 @@ F: drivers/usb/image/microtek.*
|
|||||||
|
|
||||||
MIPS
|
MIPS
|
||||||
M: Ralf Baechle <ralf@linux-mips.org>
|
M: Ralf Baechle <ralf@linux-mips.org>
|
||||||
M: Paul Burton <paul.burton@mips.com>
|
M: Paul Burton <paulburton@kernel.org>
|
||||||
M: James Hogan <jhogan@kernel.org>
|
M: James Hogan <jhogan@kernel.org>
|
||||||
L: linux-mips@vger.kernel.org
|
L: linux-mips@vger.kernel.org
|
||||||
W: http://www.linux-mips.org/
|
W: http://www.linux-mips.org/
|
||||||
@ -10842,7 +10843,7 @@ F: arch/mips/
|
|||||||
F: drivers/platform/mips/
|
F: drivers/platform/mips/
|
||||||
|
|
||||||
MIPS BOSTON DEVELOPMENT BOARD
|
MIPS BOSTON DEVELOPMENT BOARD
|
||||||
M: Paul Burton <paul.burton@mips.com>
|
M: Paul Burton <paulburton@kernel.org>
|
||||||
L: linux-mips@vger.kernel.org
|
L: linux-mips@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/devicetree/bindings/clock/img,boston-clock.txt
|
F: Documentation/devicetree/bindings/clock/img,boston-clock.txt
|
||||||
@ -10852,7 +10853,7 @@ F: drivers/clk/imgtec/clk-boston.c
|
|||||||
F: include/dt-bindings/clock/boston-clock.h
|
F: include/dt-bindings/clock/boston-clock.h
|
||||||
|
|
||||||
MIPS GENERIC PLATFORM
|
MIPS GENERIC PLATFORM
|
||||||
M: Paul Burton <paul.burton@mips.com>
|
M: Paul Burton <paulburton@kernel.org>
|
||||||
L: linux-mips@vger.kernel.org
|
L: linux-mips@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: Documentation/devicetree/bindings/power/mti,mips-cpc.txt
|
F: Documentation/devicetree/bindings/power/mti,mips-cpc.txt
|
||||||
@ -11407,7 +11408,6 @@ F: include/trace/events/tcp.h
|
|||||||
NETWORKING [TLS]
|
NETWORKING [TLS]
|
||||||
M: Boris Pismenny <borisp@mellanox.com>
|
M: Boris Pismenny <borisp@mellanox.com>
|
||||||
M: Aviad Yehezkel <aviadye@mellanox.com>
|
M: Aviad Yehezkel <aviadye@mellanox.com>
|
||||||
M: Dave Watson <davejwatson@fb.com>
|
|
||||||
M: John Fastabend <john.fastabend@gmail.com>
|
M: John Fastabend <john.fastabend@gmail.com>
|
||||||
M: Daniel Borkmann <daniel@iogearbox.net>
|
M: Daniel Borkmann <daniel@iogearbox.net>
|
||||||
M: Jakub Kicinski <jakub.kicinski@netronome.com>
|
M: Jakub Kicinski <jakub.kicinski@netronome.com>
|
||||||
@ -12312,12 +12312,15 @@ F: arch/parisc/
|
|||||||
F: Documentation/parisc/
|
F: Documentation/parisc/
|
||||||
F: drivers/parisc/
|
F: drivers/parisc/
|
||||||
F: drivers/char/agp/parisc-agp.c
|
F: drivers/char/agp/parisc-agp.c
|
||||||
|
F: drivers/input/misc/hp_sdc_rtc.c
|
||||||
F: drivers/input/serio/gscps2.c
|
F: drivers/input/serio/gscps2.c
|
||||||
|
F: drivers/input/serio/hp_sdc*
|
||||||
F: drivers/parport/parport_gsc.*
|
F: drivers/parport/parport_gsc.*
|
||||||
F: drivers/tty/serial/8250/8250_gsc.c
|
F: drivers/tty/serial/8250/8250_gsc.c
|
||||||
F: drivers/video/fbdev/sti*
|
F: drivers/video/fbdev/sti*
|
||||||
F: drivers/video/console/sti*
|
F: drivers/video/console/sti*
|
||||||
F: drivers/video/logo/logo_parisc*
|
F: drivers/video/logo/logo_parisc*
|
||||||
|
F: include/linux/hp_sdc.h
|
||||||
|
|
||||||
PARMAN
|
PARMAN
|
||||||
M: Jiri Pirko <jiri@mellanox.com>
|
M: Jiri Pirko <jiri@mellanox.com>
|
||||||
@ -13361,7 +13364,7 @@ S: Maintained
|
|||||||
F: drivers/scsi/qla1280.[ch]
|
F: drivers/scsi/qla1280.[ch]
|
||||||
|
|
||||||
QLOGIC QLA2XXX FC-SCSI DRIVER
|
QLOGIC QLA2XXX FC-SCSI DRIVER
|
||||||
M: qla2xxx-upstream@qlogic.com
|
M: hmadhani@marvell.com
|
||||||
L: linux-scsi@vger.kernel.org
|
L: linux-scsi@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: Documentation/scsi/LICENSE.qla2xxx
|
F: Documentation/scsi/LICENSE.qla2xxx
|
||||||
@ -13902,7 +13905,7 @@ F: drivers/mtd/nand/raw/r852.h
|
|||||||
|
|
||||||
RISC-V ARCHITECTURE
|
RISC-V ARCHITECTURE
|
||||||
M: Paul Walmsley <paul.walmsley@sifive.com>
|
M: Paul Walmsley <paul.walmsley@sifive.com>
|
||||||
M: Palmer Dabbelt <palmer@sifive.com>
|
M: Palmer Dabbelt <palmer@dabbelt.com>
|
||||||
M: Albert Ou <aou@eecs.berkeley.edu>
|
M: Albert Ou <aou@eecs.berkeley.edu>
|
||||||
L: linux-riscv@lists.infradead.org
|
L: linux-riscv@lists.infradead.org
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux.git
|
||||||
@ -14779,7 +14782,7 @@ F: drivers/media/usb/siano/
|
|||||||
F: drivers/media/mmc/siano/
|
F: drivers/media/mmc/siano/
|
||||||
|
|
||||||
SIFIVE DRIVERS
|
SIFIVE DRIVERS
|
||||||
M: Palmer Dabbelt <palmer@sifive.com>
|
M: Palmer Dabbelt <palmer@dabbelt.com>
|
||||||
M: Paul Walmsley <paul.walmsley@sifive.com>
|
M: Paul Walmsley <paul.walmsley@sifive.com>
|
||||||
L: linux-riscv@lists.infradead.org
|
L: linux-riscv@lists.infradead.org
|
||||||
T: git git://github.com/sifive/riscv-linux.git
|
T: git git://github.com/sifive/riscv-linux.git
|
||||||
@ -14789,7 +14792,7 @@ N: sifive
|
|||||||
|
|
||||||
SIFIVE FU540 SYSTEM-ON-CHIP
|
SIFIVE FU540 SYSTEM-ON-CHIP
|
||||||
M: Paul Walmsley <paul.walmsley@sifive.com>
|
M: Paul Walmsley <paul.walmsley@sifive.com>
|
||||||
M: Palmer Dabbelt <palmer@sifive.com>
|
M: Palmer Dabbelt <palmer@dabbelt.com>
|
||||||
L: linux-riscv@lists.infradead.org
|
L: linux-riscv@lists.infradead.org
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/pjw/sifive.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/pjw/sifive.git
|
||||||
S: Supported
|
S: Supported
|
||||||
@ -17430,7 +17433,7 @@ F: include/linux/regulator/
|
|||||||
K: regulator_get_optional
|
K: regulator_get_optional
|
||||||
|
|
||||||
VRF
|
VRF
|
||||||
M: David Ahern <dsa@cumulusnetworks.com>
|
M: David Ahern <dsahern@kernel.org>
|
||||||
M: Shrijeet Mukherjee <shrijeet@gmail.com>
|
M: Shrijeet Mukherjee <shrijeet@gmail.com>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
6
Makefile
6
Makefile
@ -2,8 +2,8 @@
|
|||||||
VERSION = 5
|
VERSION = 5
|
||||||
PATCHLEVEL = 4
|
PATCHLEVEL = 4
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION = -rc3
|
EXTRAVERSION = -rc6
|
||||||
NAME = Nesting Opossum
|
NAME = Kleptomaniac Octopus
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
# To see a list of typical targets execute "make help"
|
# To see a list of typical targets execute "make help"
|
||||||
@ -1047,7 +1047,7 @@ export KBUILD_VMLINUX_OBJS := $(head-y) $(init-y) $(core-y) $(libs-y2) \
|
|||||||
export KBUILD_VMLINUX_LIBS := $(libs-y1)
|
export KBUILD_VMLINUX_LIBS := $(libs-y1)
|
||||||
export KBUILD_LDS := arch/$(SRCARCH)/kernel/vmlinux.lds
|
export KBUILD_LDS := arch/$(SRCARCH)/kernel/vmlinux.lds
|
||||||
export LDFLAGS_vmlinux
|
export LDFLAGS_vmlinux
|
||||||
# used by scripts/package/Makefile
|
# used by scripts/Makefile.package
|
||||||
export KBUILD_ALLDIRS := $(sort $(filter-out arch/%,$(vmlinux-alldirs)) LICENSES arch include scripts tools)
|
export KBUILD_ALLDIRS := $(sort $(filter-out arch/%,$(vmlinux-alldirs)) LICENSES arch include scripts tools)
|
||||||
|
|
||||||
vmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS)
|
vmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS)
|
||||||
|
142
README.md
Normal file
142
README.md
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
# How do I submit patches to Android Common Kernels
|
||||||
|
|
||||||
|
1. BEST: Make all of your changes to upstream Linux. If appropriate, backport to the stable releases.
|
||||||
|
These patches will be merged automatically in the corresponding common kernels. If the patch is already
|
||||||
|
in upstream Linux, post a backport of the patch that conforms to the patch requirements below.
|
||||||
|
|
||||||
|
2. LESS GOOD: Develop your patches out-of-tree (from an upstream Linux point-of-view). Unless these are
|
||||||
|
fixing an Android-specific bug, these are very unlikely to be accepted unless they have been
|
||||||
|
coordinated with kernel-team@android.com. If you want to proceed, post a patch that conforms to the
|
||||||
|
patch requirements below.
|
||||||
|
|
||||||
|
# Common Kernel patch requirements
|
||||||
|
|
||||||
|
- All patches must conform to the Linux kernel coding standards and pass `script/checkpatch.pl`
|
||||||
|
- Patches shall not break gki_defconfig or allmodconfig builds for arm, arm64, x86, x86_64 architectures
|
||||||
|
(see https://source.android.com/setup/build/building-kernels)
|
||||||
|
- If the patch is not merged from an upstream branch, the subject must be tagged with the type of patch:
|
||||||
|
`UPSTREAM:`, `BACKPORT:`, `FROMGIT:`, `FROMLIST:`, or `ANDROID:`.
|
||||||
|
- All patches must have a `Change-Id:` tag (see https://gerrit-review.googlesource.com/Documentation/user-changeid.html)
|
||||||
|
- If an Android bug has been assigned, there must be a `Bug:` tag.
|
||||||
|
- All patches must have a `Signed-off-by:` tag by the author and the submitter
|
||||||
|
|
||||||
|
Additional requirements are listed below based on patch type
|
||||||
|
|
||||||
|
## Requirements for backports from mainline Linux: `UPSTREAM:`, `BACKPORT:`
|
||||||
|
|
||||||
|
- If the patch is a cherry-pick from Linux mainline with no changes at all
|
||||||
|
- tag the patch subject with `UPSTREAM:`.
|
||||||
|
- add upstream commit information with a `(cherry-picked from ...)` line
|
||||||
|
- Example:
|
||||||
|
- if the upstream commit message is
|
||||||
|
```
|
||||||
|
important patch from upstream
|
||||||
|
|
||||||
|
This is the detailed description of the important patch
|
||||||
|
|
||||||
|
Signed-off-by: Fred Jones <fred.jones@foo.org>
|
||||||
|
```
|
||||||
|
- then Joe Smith would upload the patch for the common kernel as
|
||||||
|
```
|
||||||
|
UPSTREAM: important patch from upstream
|
||||||
|
|
||||||
|
This is the detailed description of the important patch
|
||||||
|
|
||||||
|
Signed-off-by: Fred Jones <fred.jones@foo.org>
|
||||||
|
|
||||||
|
Bug: 135791357
|
||||||
|
Change-Id: I4caaaa566ea080fa148c5e768bb1a0b6f7201c01
|
||||||
|
(cherry-picked from c31e73121f4c1ec41143423ac6ce3ce6dafdcec1)
|
||||||
|
Signed-off-by: Joe Smith <joe.smith@foo.org>
|
||||||
|
```
|
||||||
|
|
||||||
|
- If the patch requires any changes from the upstream version, tag the patch with `BACKPORT:`
|
||||||
|
instead of `UPSTREAM:`.
|
||||||
|
- use the same tags as `UPSTREAM:`
|
||||||
|
- add comments about the changes under the `(cherry-picked from ...)` line
|
||||||
|
- Example:
|
||||||
|
```
|
||||||
|
BACKPORT: important patch from upstream
|
||||||
|
|
||||||
|
This is the detailed description of the important patch
|
||||||
|
|
||||||
|
Signed-off-by: Fred Jones <fred.jones@foo.org>
|
||||||
|
|
||||||
|
Bug: 135791357
|
||||||
|
Change-Id: I4caaaa566ea080fa148c5e768bb1a0b6f7201c01
|
||||||
|
(cherry-picked from c31e73121f4c1ec41143423ac6ce3ce6dafdcec1)
|
||||||
|
[ Resolved minor conflict in drivers/foo/bar.c ]
|
||||||
|
Signed-off-by: Joe Smith <joe.smith@foo.org>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Requirements for other backports: `FROMGIT:`, `FROMLIST:`,
|
||||||
|
|
||||||
|
- If the patch has been merged into an upstream maintainer tree, but has not yet
|
||||||
|
been merged into Linux mainline
|
||||||
|
- tag the patch subject with `FROMGIT:`
|
||||||
|
- add info on where the patch came from as `(cherry picked from commit <sha1> <repo> <branch>)`. This
|
||||||
|
must be a stable maintainer branch (not rebased, so don't use `linux-next` for example).
|
||||||
|
- if changes were required, use `BACKPORT: FROMGIT:`
|
||||||
|
- Example:
|
||||||
|
- if the commit message in the maintainer tree is
|
||||||
|
```
|
||||||
|
important patch from upstream
|
||||||
|
|
||||||
|
This is the detailed description of the important patch
|
||||||
|
|
||||||
|
Signed-off-by: Fred Jones <fred.jones@foo.org>
|
||||||
|
```
|
||||||
|
- then Joe Smith would upload the patch for the common kernel as
|
||||||
|
```
|
||||||
|
FROMGIT: important patch from upstream
|
||||||
|
|
||||||
|
This is the detailed description of the important patch
|
||||||
|
|
||||||
|
Signed-off-by: Fred Jones <fred.jones@foo.org>
|
||||||
|
|
||||||
|
Bug: 135791357
|
||||||
|
(cherry picked from commit 878a2fd9de10b03d11d2f622250285c7e63deace
|
||||||
|
https://git.kernel.org/pub/scm/linux/kernel/git/foo/bar.git test-branch)
|
||||||
|
Change-Id: I4caaaa566ea080fa148c5e768bb1a0b6f7201c01
|
||||||
|
Signed-off-by: Joe Smith <joe.smith@foo.org>
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
- If the patch has been submitted to LKML, but not accepted into any maintainer tree
|
||||||
|
- tag the patch subject with `FROMLIST:`
|
||||||
|
- add a `Link:` tag with a link to the submittal on lore.kernel.org
|
||||||
|
- if changes were required, use `BACKPORT: FROMLIST:`
|
||||||
|
- Example:
|
||||||
|
```
|
||||||
|
FROMLIST: important patch from upstream
|
||||||
|
|
||||||
|
This is the detailed description of the important patch
|
||||||
|
|
||||||
|
Signed-off-by: Fred Jones <fred.jones@foo.org>
|
||||||
|
|
||||||
|
Bug: 135791357
|
||||||
|
Link: https://lore.kernel.org/lkml/20190619171517.GA17557@someone.com/
|
||||||
|
Change-Id: I4caaaa566ea080fa148c5e768bb1a0b6f7201c01
|
||||||
|
Signed-off-by: Joe Smith <joe.smith@foo.org>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Requirements for Android-specific patches: `ANDROID:`
|
||||||
|
|
||||||
|
- If the patch is fixing a bug to Android-specific code
|
||||||
|
- tag the patch subject with `ANDROID:`
|
||||||
|
- add a `Fixes:` tag that cites the patch with the bug
|
||||||
|
- Example:
|
||||||
|
```
|
||||||
|
ANDROID: fix android-specific bug in foobar.c
|
||||||
|
|
||||||
|
This is the detailed description of the important fix
|
||||||
|
|
||||||
|
Fixes: 1234abcd2468 ("foobar: add cool feature")
|
||||||
|
Change-Id: I4caaaa566ea080fa148c5e768bb1a0b6f7201c01
|
||||||
|
Signed-off-by: Joe Smith <joe.smith@foo.org>
|
||||||
|
```
|
||||||
|
|
||||||
|
- If the patch is a new feature
|
||||||
|
- tag the patch subject with `ANDROID:`
|
||||||
|
- add a `Bug:` tag with the Android bug (required for android-specific features)
|
||||||
|
|
@ -65,6 +65,14 @@ input_clk: input-clk {
|
|||||||
clock-frequency = <33333333>;
|
clock-frequency = <33333333>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
reg_5v0: regulator-5v0 {
|
||||||
|
compatible = "regulator-fixed";
|
||||||
|
|
||||||
|
regulator-name = "5v0-supply";
|
||||||
|
regulator-min-microvolt = <5000000>;
|
||||||
|
regulator-max-microvolt = <5000000>;
|
||||||
|
};
|
||||||
|
|
||||||
cpu_intc: cpu-interrupt-controller {
|
cpu_intc: cpu-interrupt-controller {
|
||||||
compatible = "snps,archs-intc";
|
compatible = "snps,archs-intc";
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
@ -264,6 +272,21 @@ spi0: spi@20000 {
|
|||||||
clocks = <&input_clk>;
|
clocks = <&input_clk>;
|
||||||
cs-gpios = <&creg_gpio 0 GPIO_ACTIVE_LOW>,
|
cs-gpios = <&creg_gpio 0 GPIO_ACTIVE_LOW>,
|
||||||
<&creg_gpio 1 GPIO_ACTIVE_LOW>;
|
<&creg_gpio 1 GPIO_ACTIVE_LOW>;
|
||||||
|
|
||||||
|
spi-flash@0 {
|
||||||
|
compatible = "sst26wf016b", "jedec,spi-nor";
|
||||||
|
reg = <0>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
spi-max-frequency = <4000000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
adc@1 {
|
||||||
|
compatible = "ti,adc108s102";
|
||||||
|
reg = <1>;
|
||||||
|
vref-supply = <®_5v0>;
|
||||||
|
spi-max-frequency = <1000000>;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
creg_gpio: gpio@14b0 {
|
creg_gpio: gpio@14b0 {
|
||||||
|
@ -32,6 +32,8 @@ CONFIG_INET=y
|
|||||||
CONFIG_DEVTMPFS=y
|
CONFIG_DEVTMPFS=y
|
||||||
# CONFIG_STANDALONE is not set
|
# CONFIG_STANDALONE is not set
|
||||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||||
|
CONFIG_MTD=y
|
||||||
|
CONFIG_MTD_SPI_NOR=y
|
||||||
CONFIG_SCSI=y
|
CONFIG_SCSI=y
|
||||||
CONFIG_BLK_DEV_SD=y
|
CONFIG_BLK_DEV_SD=y
|
||||||
CONFIG_NETDEVICES=y
|
CONFIG_NETDEVICES=y
|
||||||
@ -55,6 +57,8 @@ CONFIG_GPIO_SYSFS=y
|
|||||||
CONFIG_GPIO_DWAPB=y
|
CONFIG_GPIO_DWAPB=y
|
||||||
CONFIG_GPIO_SNPS_CREG=y
|
CONFIG_GPIO_SNPS_CREG=y
|
||||||
# CONFIG_HWMON is not set
|
# CONFIG_HWMON is not set
|
||||||
|
CONFIG_REGULATOR=y
|
||||||
|
CONFIG_REGULATOR_FIXED_VOLTAGE=y
|
||||||
CONFIG_DRM=y
|
CONFIG_DRM=y
|
||||||
# CONFIG_DRM_FBDEV_EMULATION is not set
|
# CONFIG_DRM_FBDEV_EMULATION is not set
|
||||||
CONFIG_DRM_UDL=y
|
CONFIG_DRM_UDL=y
|
||||||
@ -72,6 +76,8 @@ CONFIG_MMC_SDHCI_PLTFM=y
|
|||||||
CONFIG_MMC_DW=y
|
CONFIG_MMC_DW=y
|
||||||
CONFIG_DMADEVICES=y
|
CONFIG_DMADEVICES=y
|
||||||
CONFIG_DW_AXI_DMAC=y
|
CONFIG_DW_AXI_DMAC=y
|
||||||
|
CONFIG_IIO=y
|
||||||
|
CONFIG_TI_ADC108S102=y
|
||||||
CONFIG_EXT3_FS=y
|
CONFIG_EXT3_FS=y
|
||||||
CONFIG_VFAT_FS=y
|
CONFIG_VFAT_FS=y
|
||||||
CONFIG_TMPFS=y
|
CONFIG_TMPFS=y
|
||||||
|
@ -614,8 +614,8 @@ static int arc_pmu_device_probe(struct platform_device *pdev)
|
|||||||
/* loop thru all available h/w condition indexes */
|
/* loop thru all available h/w condition indexes */
|
||||||
for (i = 0; i < cc_bcr.c; i++) {
|
for (i = 0; i < cc_bcr.c; i++) {
|
||||||
write_aux_reg(ARC_REG_CC_INDEX, i);
|
write_aux_reg(ARC_REG_CC_INDEX, i);
|
||||||
cc_name.indiv.word0 = read_aux_reg(ARC_REG_CC_NAME0);
|
cc_name.indiv.word0 = le32_to_cpu(read_aux_reg(ARC_REG_CC_NAME0));
|
||||||
cc_name.indiv.word1 = read_aux_reg(ARC_REG_CC_NAME1);
|
cc_name.indiv.word1 = le32_to_cpu(read_aux_reg(ARC_REG_CC_NAME1));
|
||||||
|
|
||||||
arc_pmu_map_hw_event(i, cc_name.str);
|
arc_pmu_map_hw_event(i, cc_name.str);
|
||||||
arc_pmu_add_raw_event_attr(i, cc_name.str);
|
arc_pmu_add_raw_event_attr(i, cc_name.str);
|
||||||
|
@ -111,13 +111,13 @@ pca9548@70 {
|
|||||||
reg = <0x70>;
|
reg = <0x70>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
i2c-mux-idle-disconnect;
|
||||||
|
|
||||||
i2c@0 {
|
i2c@0 {
|
||||||
/* FMC A */
|
/* FMC A */
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
reg = <0>;
|
reg = <0>;
|
||||||
i2c-mux-idle-disconnect;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
i2c@1 {
|
i2c@1 {
|
||||||
@ -125,7 +125,6 @@ i2c@1 {
|
|||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
reg = <1>;
|
reg = <1>;
|
||||||
i2c-mux-idle-disconnect;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
i2c@2 {
|
i2c@2 {
|
||||||
@ -133,7 +132,6 @@ i2c@2 {
|
|||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
reg = <2>;
|
reg = <2>;
|
||||||
i2c-mux-idle-disconnect;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
i2c@3 {
|
i2c@3 {
|
||||||
@ -141,7 +139,6 @@ i2c@3 {
|
|||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
reg = <3>;
|
reg = <3>;
|
||||||
i2c-mux-idle-disconnect;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
i2c@4 {
|
i2c@4 {
|
||||||
@ -149,14 +146,12 @@ i2c@4 {
|
|||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
reg = <4>;
|
reg = <4>;
|
||||||
i2c-mux-idle-disconnect;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
i2c@5 {
|
i2c@5 {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
reg = <5>;
|
reg = <5>;
|
||||||
i2c-mux-idle-disconnect;
|
|
||||||
|
|
||||||
ina230@40 { compatible = "ti,ina230"; reg = <0x40>; shunt-resistor = <5000>; };
|
ina230@40 { compatible = "ti,ina230"; reg = <0x40>; shunt-resistor = <5000>; };
|
||||||
ina230@41 { compatible = "ti,ina230"; reg = <0x41>; shunt-resistor = <5000>; };
|
ina230@41 { compatible = "ti,ina230"; reg = <0x41>; shunt-resistor = <5000>; };
|
||||||
@ -182,14 +177,12 @@ i2c@6 {
|
|||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
reg = <6>;
|
reg = <6>;
|
||||||
i2c-mux-idle-disconnect;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
i2c@7 {
|
i2c@7 {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
reg = <7>;
|
reg = <7>;
|
||||||
i2c-mux-idle-disconnect;
|
|
||||||
|
|
||||||
u41: pca9575@20 {
|
u41: pca9575@20 {
|
||||||
compatible = "nxp,pca9575";
|
compatible = "nxp,pca9575";
|
||||||
|
@ -113,6 +113,7 @@ &sdhci {
|
|||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
pinctrl-0 = <&emmc_gpio34 &gpclk2_gpio43>;
|
pinctrl-0 = <&emmc_gpio34 &gpclk2_gpio43>;
|
||||||
|
bus-width = <4>;
|
||||||
mmc-pwrseq = <&wifi_pwrseq>;
|
mmc-pwrseq = <&wifi_pwrseq>;
|
||||||
non-removable;
|
non-removable;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
@ -9,6 +9,14 @@ memory@0 {
|
|||||||
reg = <0 0x40000000>;
|
reg = <0 0x40000000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
leds {
|
||||||
|
/*
|
||||||
|
* Since there is no upstream GPIO driver yet,
|
||||||
|
* remove the incomplete node.
|
||||||
|
*/
|
||||||
|
/delete-node/ act;
|
||||||
|
};
|
||||||
|
|
||||||
reg_3v3: fixed-regulator {
|
reg_3v3: fixed-regulator {
|
||||||
compatible = "regulator-fixed";
|
compatible = "regulator-fixed";
|
||||||
regulator-name = "3V3";
|
regulator-name = "3V3";
|
||||||
|
@ -207,6 +207,10 @@ ®_soc
|
|||||||
vin-supply = <&sw1c_reg>;
|
vin-supply = <&sw1c_reg>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&snvs_poweroff {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
&iomuxc {
|
&iomuxc {
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&pinctrl_hog>;
|
pinctrl-0 = <&pinctrl_hog>;
|
||||||
|
@ -448,7 +448,7 @@ gpt1: gpt@302d0000 {
|
|||||||
compatible = "fsl,imx7d-gpt", "fsl,imx6sx-gpt";
|
compatible = "fsl,imx7d-gpt", "fsl,imx6sx-gpt";
|
||||||
reg = <0x302d0000 0x10000>;
|
reg = <0x302d0000 0x10000>;
|
||||||
interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clks IMX7D_CLK_DUMMY>,
|
clocks = <&clks IMX7D_GPT1_ROOT_CLK>,
|
||||||
<&clks IMX7D_GPT1_ROOT_CLK>;
|
<&clks IMX7D_GPT1_ROOT_CLK>;
|
||||||
clock-names = "ipg", "per";
|
clock-names = "ipg", "per";
|
||||||
};
|
};
|
||||||
@ -457,7 +457,7 @@ gpt2: gpt@302e0000 {
|
|||||||
compatible = "fsl,imx7d-gpt", "fsl,imx6sx-gpt";
|
compatible = "fsl,imx7d-gpt", "fsl,imx6sx-gpt";
|
||||||
reg = <0x302e0000 0x10000>;
|
reg = <0x302e0000 0x10000>;
|
||||||
interrupts = <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clks IMX7D_CLK_DUMMY>,
|
clocks = <&clks IMX7D_GPT2_ROOT_CLK>,
|
||||||
<&clks IMX7D_GPT2_ROOT_CLK>;
|
<&clks IMX7D_GPT2_ROOT_CLK>;
|
||||||
clock-names = "ipg", "per";
|
clock-names = "ipg", "per";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
@ -467,7 +467,7 @@ gpt3: gpt@302f0000 {
|
|||||||
compatible = "fsl,imx7d-gpt", "fsl,imx6sx-gpt";
|
compatible = "fsl,imx7d-gpt", "fsl,imx6sx-gpt";
|
||||||
reg = <0x302f0000 0x10000>;
|
reg = <0x302f0000 0x10000>;
|
||||||
interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clks IMX7D_CLK_DUMMY>,
|
clocks = <&clks IMX7D_GPT3_ROOT_CLK>,
|
||||||
<&clks IMX7D_GPT3_ROOT_CLK>;
|
<&clks IMX7D_GPT3_ROOT_CLK>;
|
||||||
clock-names = "ipg", "per";
|
clock-names = "ipg", "per";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
@ -477,7 +477,7 @@ gpt4: gpt@30300000 {
|
|||||||
compatible = "fsl,imx7d-gpt", "fsl,imx6sx-gpt";
|
compatible = "fsl,imx7d-gpt", "fsl,imx6sx-gpt";
|
||||||
reg = <0x30300000 0x10000>;
|
reg = <0x30300000 0x10000>;
|
||||||
interrupts = <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clks IMX7D_CLK_DUMMY>,
|
clocks = <&clks IMX7D_GPT4_ROOT_CLK>,
|
||||||
<&clks IMX7D_GPT4_ROOT_CLK>;
|
<&clks IMX7D_GPT4_ROOT_CLK>;
|
||||||
clock-names = "ipg", "per";
|
clock-names = "ipg", "per";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
@ -192,3 +192,7 @@ twl_power: power {
|
|||||||
&twl_gpio {
|
&twl_gpio {
|
||||||
ti,use-leds;
|
ti,use-leds;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&twl_keypad {
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
@ -66,9 +66,21 @@ ð {
|
|||||||
pinctrl-1 = <&ephy_leds_pins>;
|
pinctrl-1 = <&ephy_leds_pins>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
|
gmac0: mac@0 {
|
||||||
|
compatible = "mediatek,eth-mac";
|
||||||
|
reg = <0>;
|
||||||
|
phy-mode = "2500base-x";
|
||||||
|
fixed-link {
|
||||||
|
speed = <2500>;
|
||||||
|
full-duplex;
|
||||||
|
pause;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
gmac1: mac@1 {
|
gmac1: mac@1 {
|
||||||
compatible = "mediatek,eth-mac";
|
compatible = "mediatek,eth-mac";
|
||||||
reg = <1>;
|
reg = <1>;
|
||||||
|
phy-mode = "gmii";
|
||||||
phy-handle = <&phy0>;
|
phy-handle = <&phy0>;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -78,7 +90,6 @@ mdio: mdio-bus {
|
|||||||
|
|
||||||
phy0: ethernet-phy@0 {
|
phy0: ethernet-phy@0 {
|
||||||
reg = <0>;
|
reg = <0>;
|
||||||
phy-mode = "gmii";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -468,14 +468,12 @@ sgmiisys0: syscon@1b128000 {
|
|||||||
compatible = "mediatek,mt7629-sgmiisys", "syscon";
|
compatible = "mediatek,mt7629-sgmiisys", "syscon";
|
||||||
reg = <0x1b128000 0x3000>;
|
reg = <0x1b128000 0x3000>;
|
||||||
#clock-cells = <1>;
|
#clock-cells = <1>;
|
||||||
mediatek,physpeed = "2500";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
sgmiisys1: syscon@1b130000 {
|
sgmiisys1: syscon@1b130000 {
|
||||||
compatible = "mediatek,mt7629-sgmiisys", "syscon";
|
compatible = "mediatek,mt7629-sgmiisys", "syscon";
|
||||||
reg = <0x1b130000 0x3000>;
|
reg = <0x1b130000 0x3000>;
|
||||||
#clock-cells = <1>;
|
#clock-cells = <1>;
|
||||||
mediatek,physpeed = "2500";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -369,7 +369,7 @@ wlcore: wlcore@2 {
|
|||||||
compatible = "ti,wl1285", "ti,wl1283";
|
compatible = "ti,wl1285", "ti,wl1283";
|
||||||
reg = <2>;
|
reg = <2>;
|
||||||
/* gpio_100 with gpmc_wait2 pad as wakeirq */
|
/* gpio_100 with gpmc_wait2 pad as wakeirq */
|
||||||
interrupts-extended = <&gpio4 4 IRQ_TYPE_EDGE_RISING>,
|
interrupts-extended = <&gpio4 4 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
<&omap4_pmx_core 0x4e>;
|
<&omap4_pmx_core 0x4e>;
|
||||||
interrupt-names = "irq", "wakeup";
|
interrupt-names = "irq", "wakeup";
|
||||||
ref-clock-frequency = <26000000>;
|
ref-clock-frequency = <26000000>;
|
||||||
|
@ -474,7 +474,7 @@ wlcore: wlcore@2 {
|
|||||||
compatible = "ti,wl1271";
|
compatible = "ti,wl1271";
|
||||||
reg = <2>;
|
reg = <2>;
|
||||||
/* gpio_53 with gpmc_ncs3 pad as wakeup */
|
/* gpio_53 with gpmc_ncs3 pad as wakeup */
|
||||||
interrupts-extended = <&gpio2 21 IRQ_TYPE_EDGE_RISING>,
|
interrupts-extended = <&gpio2 21 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
<&omap4_pmx_core 0x3a>;
|
<&omap4_pmx_core 0x3a>;
|
||||||
interrupt-names = "irq", "wakeup";
|
interrupt-names = "irq", "wakeup";
|
||||||
ref-clock-frequency = <38400000>;
|
ref-clock-frequency = <38400000>;
|
||||||
|
@ -512,7 +512,7 @@ wlcore: wlcore@2 {
|
|||||||
compatible = "ti,wl1281";
|
compatible = "ti,wl1281";
|
||||||
reg = <2>;
|
reg = <2>;
|
||||||
interrupt-parent = <&gpio1>;
|
interrupt-parent = <&gpio1>;
|
||||||
interrupts = <21 IRQ_TYPE_EDGE_RISING>; /* gpio 53 */
|
interrupts = <21 IRQ_TYPE_LEVEL_HIGH>; /* gpio 53 */
|
||||||
ref-clock-frequency = <26000000>;
|
ref-clock-frequency = <26000000>;
|
||||||
tcxo-clock-frequency = <26000000>;
|
tcxo-clock-frequency = <26000000>;
|
||||||
};
|
};
|
||||||
|
@ -69,7 +69,7 @@ wlcore: wlcore@2 {
|
|||||||
compatible = "ti,wl1271";
|
compatible = "ti,wl1271";
|
||||||
reg = <2>;
|
reg = <2>;
|
||||||
interrupt-parent = <&gpio2>;
|
interrupt-parent = <&gpio2>;
|
||||||
interrupts = <9 IRQ_TYPE_EDGE_RISING>; /* gpio 41 */
|
interrupts = <9 IRQ_TYPE_LEVEL_HIGH>; /* gpio 41 */
|
||||||
ref-clock-frequency = <38400000>;
|
ref-clock-frequency = <38400000>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -362,7 +362,7 @@ wlcore: wlcore@2 {
|
|||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&wlcore_irq_pin>;
|
pinctrl-0 = <&wlcore_irq_pin>;
|
||||||
interrupt-parent = <&gpio1>;
|
interrupt-parent = <&gpio1>;
|
||||||
interrupts = <14 IRQ_TYPE_EDGE_RISING>; /* gpio 14 */
|
interrupts = <14 IRQ_TYPE_LEVEL_HIGH>; /* gpio 14 */
|
||||||
ref-clock-frequency = <26000000>;
|
ref-clock-frequency = <26000000>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -1146,7 +1146,7 @@ dss_clkctrl: clk@20 {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
gpu_cm: clock-controller@1500 {
|
gpu_cm: gpu_cm@1500 {
|
||||||
compatible = "ti,omap4-cm";
|
compatible = "ti,omap4-cm";
|
||||||
reg = <0x1500 0x100>;
|
reg = <0x1500 0x100>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
|
@ -609,13 +609,13 @@ pins1 {
|
|||||||
<STM32_PINMUX('F', 6, AF9)>; /* QSPI_BK1_IO3 */
|
<STM32_PINMUX('F', 6, AF9)>; /* QSPI_BK1_IO3 */
|
||||||
bias-disable;
|
bias-disable;
|
||||||
drive-push-pull;
|
drive-push-pull;
|
||||||
slew-rate = <3>;
|
slew-rate = <1>;
|
||||||
};
|
};
|
||||||
pins2 {
|
pins2 {
|
||||||
pinmux = <STM32_PINMUX('B', 6, AF10)>; /* QSPI_BK1_NCS */
|
pinmux = <STM32_PINMUX('B', 6, AF10)>; /* QSPI_BK1_NCS */
|
||||||
bias-pull-up;
|
bias-pull-up;
|
||||||
drive-push-pull;
|
drive-push-pull;
|
||||||
slew-rate = <3>;
|
slew-rate = <1>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -637,13 +637,13 @@ pins1 {
|
|||||||
<STM32_PINMUX('G', 7, AF11)>; /* QSPI_BK2_IO3 */
|
<STM32_PINMUX('G', 7, AF11)>; /* QSPI_BK2_IO3 */
|
||||||
bias-disable;
|
bias-disable;
|
||||||
drive-push-pull;
|
drive-push-pull;
|
||||||
slew-rate = <3>;
|
slew-rate = <1>;
|
||||||
};
|
};
|
||||||
pins2 {
|
pins2 {
|
||||||
pinmux = <STM32_PINMUX('C', 0, AF10)>; /* QSPI_BK2_NCS */
|
pinmux = <STM32_PINMUX('C', 0, AF10)>; /* QSPI_BK2_NCS */
|
||||||
bias-pull-up;
|
bias-pull-up;
|
||||||
drive-push-pull;
|
drive-push-pull;
|
||||||
slew-rate = <3>;
|
slew-rate = <1>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -380,9 +380,8 @@ csi0: csi@1c09000 {
|
|||||||
compatible = "allwinner,sun7i-a20-csi0";
|
compatible = "allwinner,sun7i-a20-csi0";
|
||||||
reg = <0x01c09000 0x1000>;
|
reg = <0x01c09000 0x1000>;
|
||||||
interrupts = <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&ccu CLK_AHB_CSI0>, <&ccu CLK_CSI0>,
|
clocks = <&ccu CLK_AHB_CSI0>, <&ccu CLK_CSI_SCLK>, <&ccu CLK_DRAM_CSI0>;
|
||||||
<&ccu CLK_CSI_SCLK>, <&ccu CLK_DRAM_CSI0>;
|
clock-names = "bus", "isp", "ram";
|
||||||
clock-names = "bus", "mod", "isp", "ram";
|
|
||||||
resets = <&ccu RST_CSI0>;
|
resets = <&ccu RST_CSI0>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
@ -602,6 +602,7 @@ tca9548@70 {
|
|||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
reg = <0x70>;
|
reg = <0x70>;
|
||||||
|
i2c-mux-idle-disconnect;
|
||||||
|
|
||||||
sff0_i2c: i2c@1 {
|
sff0_i2c: i2c@1 {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
@ -640,6 +641,7 @@ tca9548@71 {
|
|||||||
reg = <0x71>;
|
reg = <0x71>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
i2c-mux-idle-disconnect;
|
||||||
|
|
||||||
sff5_i2c: i2c@1 {
|
sff5_i2c: i2c@1 {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
|
@ -167,6 +167,7 @@ CONFIG_FB=y
|
|||||||
CONFIG_FIRMWARE_EDID=y
|
CONFIG_FIRMWARE_EDID=y
|
||||||
CONFIG_FB_DA8XX=y
|
CONFIG_FB_DA8XX=y
|
||||||
CONFIG_BACKLIGHT_PWM=m
|
CONFIG_BACKLIGHT_PWM=m
|
||||||
|
CONFIG_BACKLIGHT_GPIO=m
|
||||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||||
CONFIG_LOGO=y
|
CONFIG_LOGO=y
|
||||||
CONFIG_SOUND=m
|
CONFIG_SOUND=m
|
||||||
|
@ -276,6 +276,7 @@ CONFIG_VIDEO_OV5640=m
|
|||||||
CONFIG_VIDEO_OV5645=m
|
CONFIG_VIDEO_OV5645=m
|
||||||
CONFIG_IMX_IPUV3_CORE=y
|
CONFIG_IMX_IPUV3_CORE=y
|
||||||
CONFIG_DRM=y
|
CONFIG_DRM=y
|
||||||
|
CONFIG_DRM_MSM=y
|
||||||
CONFIG_DRM_PANEL_LVDS=y
|
CONFIG_DRM_PANEL_LVDS=y
|
||||||
CONFIG_DRM_PANEL_SIMPLE=y
|
CONFIG_DRM_PANEL_SIMPLE=y
|
||||||
CONFIG_DRM_PANEL_SEIKO_43WVF1G=y
|
CONFIG_DRM_PANEL_SEIKO_43WVF1G=y
|
||||||
|
@ -356,15 +356,15 @@ CONFIG_DRM_OMAP_CONNECTOR_HDMI=m
|
|||||||
CONFIG_DRM_OMAP_CONNECTOR_ANALOG_TV=m
|
CONFIG_DRM_OMAP_CONNECTOR_ANALOG_TV=m
|
||||||
CONFIG_DRM_OMAP_PANEL_DPI=m
|
CONFIG_DRM_OMAP_PANEL_DPI=m
|
||||||
CONFIG_DRM_OMAP_PANEL_DSI_CM=m
|
CONFIG_DRM_OMAP_PANEL_DSI_CM=m
|
||||||
CONFIG_DRM_OMAP_PANEL_SONY_ACX565AKM=m
|
|
||||||
CONFIG_DRM_OMAP_PANEL_LGPHILIPS_LB035Q02=m
|
|
||||||
CONFIG_DRM_OMAP_PANEL_SHARP_LS037V7DW01=m
|
|
||||||
CONFIG_DRM_OMAP_PANEL_TPO_TD028TTEC1=m
|
|
||||||
CONFIG_DRM_OMAP_PANEL_TPO_TD043MTEA1=m
|
|
||||||
CONFIG_DRM_OMAP_PANEL_NEC_NL8048HL11=m
|
|
||||||
CONFIG_DRM_TILCDC=m
|
CONFIG_DRM_TILCDC=m
|
||||||
CONFIG_DRM_PANEL_SIMPLE=m
|
CONFIG_DRM_PANEL_SIMPLE=m
|
||||||
CONFIG_DRM_TI_TFP410=m
|
CONFIG_DRM_TI_TFP410=m
|
||||||
|
CONFIG_DRM_PANEL_LG_LB035Q02=m
|
||||||
|
CONFIG_DRM_PANEL_NEC_NL8048HL11=m
|
||||||
|
CONFIG_DRM_PANEL_SHARP_LS037V7DW01=m
|
||||||
|
CONFIG_DRM_PANEL_SONY_ACX565AKM=m
|
||||||
|
CONFIG_DRM_PANEL_TPO_TD028TTEC1=m
|
||||||
|
CONFIG_DRM_PANEL_TPO_TD043MTEA1=m
|
||||||
CONFIG_FB=y
|
CONFIG_FB=y
|
||||||
CONFIG_FIRMWARE_EDID=y
|
CONFIG_FIRMWARE_EDID=y
|
||||||
CONFIG_FB_MODE_HELPERS=y
|
CONFIG_FB_MODE_HELPERS=y
|
||||||
|
@ -82,7 +82,7 @@
|
|||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
#ifdef CONFIG_CPU_CP15_MMU
|
#ifdef CONFIG_CPU_CP15_MMU
|
||||||
static inline unsigned int get_domain(void)
|
static __always_inline unsigned int get_domain(void)
|
||||||
{
|
{
|
||||||
unsigned int domain;
|
unsigned int domain;
|
||||||
|
|
||||||
@ -94,7 +94,7 @@ static inline unsigned int get_domain(void)
|
|||||||
return domain;
|
return domain;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void set_domain(unsigned val)
|
static __always_inline void set_domain(unsigned int val)
|
||||||
{
|
{
|
||||||
asm volatile(
|
asm volatile(
|
||||||
"mcr p15, 0, %0, c3, c0 @ set domain"
|
"mcr p15, 0, %0, c3, c0 @ set domain"
|
||||||
@ -102,12 +102,12 @@ static inline void set_domain(unsigned val)
|
|||||||
isb();
|
isb();
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
static inline unsigned int get_domain(void)
|
static __always_inline unsigned int get_domain(void)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void set_domain(unsigned val)
|
static __always_inline void set_domain(unsigned int val)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
* perform such accesses (eg, via list poison values) which could then
|
* perform such accesses (eg, via list poison values) which could then
|
||||||
* be exploited for priviledge escalation.
|
* be exploited for priviledge escalation.
|
||||||
*/
|
*/
|
||||||
static inline unsigned int uaccess_save_and_enable(void)
|
static __always_inline unsigned int uaccess_save_and_enable(void)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_CPU_SW_DOMAIN_PAN
|
#ifdef CONFIG_CPU_SW_DOMAIN_PAN
|
||||||
unsigned int old_domain = get_domain();
|
unsigned int old_domain = get_domain();
|
||||||
@ -37,7 +37,7 @@ static inline unsigned int uaccess_save_and_enable(void)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void uaccess_restore(unsigned int flags)
|
static __always_inline void uaccess_restore(unsigned int flags)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_CPU_SW_DOMAIN_PAN
|
#ifdef CONFIG_CPU_SW_DOMAIN_PAN
|
||||||
/* Restore the user access mask */
|
/* Restore the user access mask */
|
||||||
|
@ -68,7 +68,7 @@ ENDPROC(__vet_atags)
|
|||||||
* The following fragment of code is executed with the MMU on in MMU mode,
|
* The following fragment of code is executed with the MMU on in MMU mode,
|
||||||
* and uses absolute addresses; this is not position independent.
|
* and uses absolute addresses; this is not position independent.
|
||||||
*
|
*
|
||||||
* r0 = cp#15 control register
|
* r0 = cp#15 control register (exc_ret for M-class)
|
||||||
* r1 = machine ID
|
* r1 = machine ID
|
||||||
* r2 = atags/dtb pointer
|
* r2 = atags/dtb pointer
|
||||||
* r9 = processor ID
|
* r9 = processor ID
|
||||||
@ -137,7 +137,8 @@ __mmap_switched_data:
|
|||||||
#ifdef CONFIG_CPU_CP15
|
#ifdef CONFIG_CPU_CP15
|
||||||
.long cr_alignment @ r3
|
.long cr_alignment @ r3
|
||||||
#else
|
#else
|
||||||
.long 0 @ r3
|
M_CLASS(.long exc_ret) @ r3
|
||||||
|
AR_CLASS(.long 0) @ r3
|
||||||
#endif
|
#endif
|
||||||
.size __mmap_switched_data, . - __mmap_switched_data
|
.size __mmap_switched_data, . - __mmap_switched_data
|
||||||
|
|
||||||
|
@ -201,6 +201,8 @@ M_CLASS(streq r3, [r12, #PMSAv8_MAIR1])
|
|||||||
bic r0, r0, #V7M_SCB_CCR_IC
|
bic r0, r0, #V7M_SCB_CCR_IC
|
||||||
#endif
|
#endif
|
||||||
str r0, [r12, V7M_SCB_CCR]
|
str r0, [r12, V7M_SCB_CCR]
|
||||||
|
/* Pass exc_ret to __mmap_switched */
|
||||||
|
mov r0, r10
|
||||||
#endif /* CONFIG_CPU_CP15 elif CONFIG_CPU_V7M */
|
#endif /* CONFIG_CPU_CP15 elif CONFIG_CPU_V7M */
|
||||||
ret lr
|
ret lr
|
||||||
ENDPROC(__after_proc_init)
|
ENDPROC(__after_proc_init)
|
||||||
|
@ -462,8 +462,8 @@ static s8 dm365_queue_priority_mapping[][2] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const struct dma_slave_map dm365_edma_map[] = {
|
static const struct dma_slave_map dm365_edma_map[] = {
|
||||||
{ "davinci-mcbsp.0", "tx", EDMA_FILTER_PARAM(0, 2) },
|
{ "davinci-mcbsp", "tx", EDMA_FILTER_PARAM(0, 2) },
|
||||||
{ "davinci-mcbsp.0", "rx", EDMA_FILTER_PARAM(0, 3) },
|
{ "davinci-mcbsp", "rx", EDMA_FILTER_PARAM(0, 3) },
|
||||||
{ "davinci_voicecodec", "tx", EDMA_FILTER_PARAM(0, 2) },
|
{ "davinci_voicecodec", "tx", EDMA_FILTER_PARAM(0, 2) },
|
||||||
{ "davinci_voicecodec", "rx", EDMA_FILTER_PARAM(0, 3) },
|
{ "davinci_voicecodec", "rx", EDMA_FILTER_PARAM(0, 3) },
|
||||||
{ "spi_davinci.2", "tx", EDMA_FILTER_PARAM(0, 10) },
|
{ "spi_davinci.2", "tx", EDMA_FILTER_PARAM(0, 10) },
|
||||||
|
@ -89,6 +89,13 @@ static struct iommu_platform_data omap3_iommu_pdata = {
|
|||||||
.reset_name = "mmu",
|
.reset_name = "mmu",
|
||||||
.assert_reset = omap_device_assert_hardreset,
|
.assert_reset = omap_device_assert_hardreset,
|
||||||
.deassert_reset = omap_device_deassert_hardreset,
|
.deassert_reset = omap_device_deassert_hardreset,
|
||||||
|
.device_enable = omap_device_enable,
|
||||||
|
.device_idle = omap_device_idle,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct iommu_platform_data omap3_iommu_isp_pdata = {
|
||||||
|
.device_enable = omap_device_enable,
|
||||||
|
.device_idle = omap_device_idle,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int omap3_sbc_t3730_twl_callback(struct device *dev,
|
static int omap3_sbc_t3730_twl_callback(struct device *dev,
|
||||||
@ -424,6 +431,8 @@ static struct iommu_platform_data omap4_iommu_pdata = {
|
|||||||
.reset_name = "mmu_cache",
|
.reset_name = "mmu_cache",
|
||||||
.assert_reset = omap_device_assert_hardreset,
|
.assert_reset = omap_device_assert_hardreset,
|
||||||
.deassert_reset = omap_device_deassert_hardreset,
|
.deassert_reset = omap_device_deassert_hardreset,
|
||||||
|
.device_enable = omap_device_enable,
|
||||||
|
.device_idle = omap_device_idle,
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -617,6 +626,8 @@ static struct of_dev_auxdata omap_auxdata_lookup[] = {
|
|||||||
#ifdef CONFIG_ARCH_OMAP3
|
#ifdef CONFIG_ARCH_OMAP3
|
||||||
OF_DEV_AUXDATA("ti,omap2-iommu", 0x5d000000, "5d000000.mmu",
|
OF_DEV_AUXDATA("ti,omap2-iommu", 0x5d000000, "5d000000.mmu",
|
||||||
&omap3_iommu_pdata),
|
&omap3_iommu_pdata),
|
||||||
|
OF_DEV_AUXDATA("ti,omap2-iommu", 0x480bd400, "480bd400.mmu",
|
||||||
|
&omap3_iommu_isp_pdata),
|
||||||
OF_DEV_AUXDATA("ti,omap3-smartreflex-core", 0x480cb000,
|
OF_DEV_AUXDATA("ti,omap3-smartreflex-core", 0x480cb000,
|
||||||
"480cb000.smartreflex", &omap_sr_pdata[OMAP_SR_CORE]),
|
"480cb000.smartreflex", &omap_sr_pdata[OMAP_SR_CORE]),
|
||||||
OF_DEV_AUXDATA("ti,omap3-smartreflex-mpu-iva", 0x480c9000,
|
OF_DEV_AUXDATA("ti,omap3-smartreflex-mpu-iva", 0x480c9000,
|
||||||
|
@ -324,7 +324,7 @@ union offset_union {
|
|||||||
__put32_unaligned_check("strbt", val, addr)
|
__put32_unaligned_check("strbt", val, addr)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
do_alignment_finish_ldst(unsigned long addr, unsigned long instr, struct pt_regs *regs, union offset_union offset)
|
do_alignment_finish_ldst(unsigned long addr, u32 instr, struct pt_regs *regs, union offset_union offset)
|
||||||
{
|
{
|
||||||
if (!LDST_U_BIT(instr))
|
if (!LDST_U_BIT(instr))
|
||||||
offset.un = -offset.un;
|
offset.un = -offset.un;
|
||||||
@ -337,7 +337,7 @@ do_alignment_finish_ldst(unsigned long addr, unsigned long instr, struct pt_regs
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
do_alignment_ldrhstrh(unsigned long addr, unsigned long instr, struct pt_regs *regs)
|
do_alignment_ldrhstrh(unsigned long addr, u32 instr, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
unsigned int rd = RD_BITS(instr);
|
unsigned int rd = RD_BITS(instr);
|
||||||
|
|
||||||
@ -386,8 +386,7 @@ do_alignment_ldrhstrh(unsigned long addr, unsigned long instr, struct pt_regs *r
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
do_alignment_ldrdstrd(unsigned long addr, unsigned long instr,
|
do_alignment_ldrdstrd(unsigned long addr, u32 instr, struct pt_regs *regs)
|
||||||
struct pt_regs *regs)
|
|
||||||
{
|
{
|
||||||
unsigned int rd = RD_BITS(instr);
|
unsigned int rd = RD_BITS(instr);
|
||||||
unsigned int rd2;
|
unsigned int rd2;
|
||||||
@ -449,7 +448,7 @@ do_alignment_ldrdstrd(unsigned long addr, unsigned long instr,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
do_alignment_ldrstr(unsigned long addr, unsigned long instr, struct pt_regs *regs)
|
do_alignment_ldrstr(unsigned long addr, u32 instr, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
unsigned int rd = RD_BITS(instr);
|
unsigned int rd = RD_BITS(instr);
|
||||||
|
|
||||||
@ -498,7 +497,7 @@ do_alignment_ldrstr(unsigned long addr, unsigned long instr, struct pt_regs *reg
|
|||||||
* PU = 10 A B
|
* PU = 10 A B
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
do_alignment_ldmstm(unsigned long addr, unsigned long instr, struct pt_regs *regs)
|
do_alignment_ldmstm(unsigned long addr, u32 instr, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
unsigned int rd, rn, correction, nr_regs, regbits;
|
unsigned int rd, rn, correction, nr_regs, regbits;
|
||||||
unsigned long eaddr, newaddr;
|
unsigned long eaddr, newaddr;
|
||||||
@ -539,7 +538,7 @@ do_alignment_ldmstm(unsigned long addr, unsigned long instr, struct pt_regs *reg
|
|||||||
* processor for us.
|
* processor for us.
|
||||||
*/
|
*/
|
||||||
if (addr != eaddr) {
|
if (addr != eaddr) {
|
||||||
pr_err("LDMSTM: PC = %08lx, instr = %08lx, "
|
pr_err("LDMSTM: PC = %08lx, instr = %08x, "
|
||||||
"addr = %08lx, eaddr = %08lx\n",
|
"addr = %08lx, eaddr = %08lx\n",
|
||||||
instruction_pointer(regs), instr, addr, eaddr);
|
instruction_pointer(regs), instr, addr, eaddr);
|
||||||
show_regs(regs);
|
show_regs(regs);
|
||||||
@ -716,10 +715,10 @@ thumb2arm(u16 tinstr)
|
|||||||
* 2. Register name Rt from ARMv7 is same as Rd from ARMv6 (Rd is Rt)
|
* 2. Register name Rt from ARMv7 is same as Rd from ARMv6 (Rd is Rt)
|
||||||
*/
|
*/
|
||||||
static void *
|
static void *
|
||||||
do_alignment_t32_to_handler(unsigned long *pinstr, struct pt_regs *regs,
|
do_alignment_t32_to_handler(u32 *pinstr, struct pt_regs *regs,
|
||||||
union offset_union *poffset)
|
union offset_union *poffset)
|
||||||
{
|
{
|
||||||
unsigned long instr = *pinstr;
|
u32 instr = *pinstr;
|
||||||
u16 tinst1 = (instr >> 16) & 0xffff;
|
u16 tinst1 = (instr >> 16) & 0xffff;
|
||||||
u16 tinst2 = instr & 0xffff;
|
u16 tinst2 = instr & 0xffff;
|
||||||
|
|
||||||
@ -767,17 +766,48 @@ do_alignment_t32_to_handler(unsigned long *pinstr, struct pt_regs *regs,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int alignment_get_arm(struct pt_regs *regs, u32 *ip, u32 *inst)
|
||||||
|
{
|
||||||
|
u32 instr = 0;
|
||||||
|
int fault;
|
||||||
|
|
||||||
|
if (user_mode(regs))
|
||||||
|
fault = get_user(instr, ip);
|
||||||
|
else
|
||||||
|
fault = probe_kernel_address(ip, instr);
|
||||||
|
|
||||||
|
*inst = __mem_to_opcode_arm(instr);
|
||||||
|
|
||||||
|
return fault;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int alignment_get_thumb(struct pt_regs *regs, u16 *ip, u16 *inst)
|
||||||
|
{
|
||||||
|
u16 instr = 0;
|
||||||
|
int fault;
|
||||||
|
|
||||||
|
if (user_mode(regs))
|
||||||
|
fault = get_user(instr, ip);
|
||||||
|
else
|
||||||
|
fault = probe_kernel_address(ip, instr);
|
||||||
|
|
||||||
|
*inst = __mem_to_opcode_thumb16(instr);
|
||||||
|
|
||||||
|
return fault;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
|
do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
union offset_union uninitialized_var(offset);
|
union offset_union uninitialized_var(offset);
|
||||||
unsigned long instr = 0, instrptr;
|
unsigned long instrptr;
|
||||||
int (*handler)(unsigned long addr, unsigned long instr, struct pt_regs *regs);
|
int (*handler)(unsigned long addr, u32 instr, struct pt_regs *regs);
|
||||||
unsigned int type;
|
unsigned int type;
|
||||||
unsigned int fault;
|
u32 instr = 0;
|
||||||
u16 tinstr = 0;
|
u16 tinstr = 0;
|
||||||
int isize = 4;
|
int isize = 4;
|
||||||
int thumb2_32b = 0;
|
int thumb2_32b = 0;
|
||||||
|
int fault;
|
||||||
|
|
||||||
if (interrupts_enabled(regs))
|
if (interrupts_enabled(regs))
|
||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
@ -786,15 +816,14 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
|
|||||||
|
|
||||||
if (thumb_mode(regs)) {
|
if (thumb_mode(regs)) {
|
||||||
u16 *ptr = (u16 *)(instrptr & ~1);
|
u16 *ptr = (u16 *)(instrptr & ~1);
|
||||||
fault = probe_kernel_address(ptr, tinstr);
|
|
||||||
tinstr = __mem_to_opcode_thumb16(tinstr);
|
fault = alignment_get_thumb(regs, ptr, &tinstr);
|
||||||
if (!fault) {
|
if (!fault) {
|
||||||
if (cpu_architecture() >= CPU_ARCH_ARMv7 &&
|
if (cpu_architecture() >= CPU_ARCH_ARMv7 &&
|
||||||
IS_T32(tinstr)) {
|
IS_T32(tinstr)) {
|
||||||
/* Thumb-2 32-bit */
|
/* Thumb-2 32-bit */
|
||||||
u16 tinst2 = 0;
|
u16 tinst2;
|
||||||
fault = probe_kernel_address(ptr + 1, tinst2);
|
fault = alignment_get_thumb(regs, ptr + 1, &tinst2);
|
||||||
tinst2 = __mem_to_opcode_thumb16(tinst2);
|
|
||||||
instr = __opcode_thumb32_compose(tinstr, tinst2);
|
instr = __opcode_thumb32_compose(tinstr, tinst2);
|
||||||
thumb2_32b = 1;
|
thumb2_32b = 1;
|
||||||
} else {
|
} else {
|
||||||
@ -803,8 +832,7 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
fault = probe_kernel_address((void *)instrptr, instr);
|
fault = alignment_get_arm(regs, (void *)instrptr, &instr);
|
||||||
instr = __mem_to_opcode_arm(instr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fault) {
|
if (fault) {
|
||||||
@ -926,7 +954,7 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
|
|||||||
* Oops, we didn't handle the instruction.
|
* Oops, we didn't handle the instruction.
|
||||||
*/
|
*/
|
||||||
pr_err("Alignment trap: not handling instruction "
|
pr_err("Alignment trap: not handling instruction "
|
||||||
"%0*lx at [<%08lx>]\n",
|
"%0*x at [<%08lx>]\n",
|
||||||
isize << 1,
|
isize << 1,
|
||||||
isize == 2 ? tinstr : instr, instrptr);
|
isize == 2 ? tinstr : instr, instrptr);
|
||||||
ai_skipped += 1;
|
ai_skipped += 1;
|
||||||
@ -936,7 +964,7 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
|
|||||||
ai_user += 1;
|
ai_user += 1;
|
||||||
|
|
||||||
if (ai_usermode & UM_WARN)
|
if (ai_usermode & UM_WARN)
|
||||||
printk("Alignment trap: %s (%d) PC=0x%08lx Instr=0x%0*lx "
|
printk("Alignment trap: %s (%d) PC=0x%08lx Instr=0x%0*x "
|
||||||
"Address=0x%08lx FSR 0x%03x\n", current->comm,
|
"Address=0x%08lx FSR 0x%03x\n", current->comm,
|
||||||
task_pid_nr(current), instrptr,
|
task_pid_nr(current), instrptr,
|
||||||
isize << 1,
|
isize << 1,
|
||||||
|
@ -132,13 +132,11 @@ __v7m_setup_cont:
|
|||||||
dsb
|
dsb
|
||||||
mov r6, lr @ save LR
|
mov r6, lr @ save LR
|
||||||
ldr sp, =init_thread_union + THREAD_START_SP
|
ldr sp, =init_thread_union + THREAD_START_SP
|
||||||
stmia sp, {r0-r3, r12}
|
|
||||||
cpsie i
|
cpsie i
|
||||||
svc #0
|
svc #0
|
||||||
1: cpsid i
|
1: cpsid i
|
||||||
ldr r0, =exc_ret
|
/* Calculate exc_ret */
|
||||||
orr lr, lr, #EXC_RET_THREADMODE_PROCESSSTACK
|
orr r10, lr, #EXC_RET_THREADMODE_PROCESSSTACK
|
||||||
str lr, [r0]
|
|
||||||
ldmia sp, {r0-r3, r12}
|
ldmia sp, {r0-r3, r12}
|
||||||
str r5, [r12, #11 * 4] @ restore the original SVC vector entry
|
str r5, [r12, #11 * 4] @ restore the original SVC vector entry
|
||||||
mov lr, r6 @ restore LR
|
mov lr, r6 @ restore LR
|
||||||
|
@ -618,6 +618,23 @@ config CAVIUM_ERRATUM_30115
|
|||||||
|
|
||||||
If unsure, say Y.
|
If unsure, say Y.
|
||||||
|
|
||||||
|
config CAVIUM_TX2_ERRATUM_219
|
||||||
|
bool "Cavium ThunderX2 erratum 219: PRFM between TTBR change and ISB fails"
|
||||||
|
default y
|
||||||
|
help
|
||||||
|
On Cavium ThunderX2, a load, store or prefetch instruction between a
|
||||||
|
TTBR update and the corresponding context synchronizing operation can
|
||||||
|
cause a spurious Data Abort to be delivered to any hardware thread in
|
||||||
|
the CPU core.
|
||||||
|
|
||||||
|
Work around the issue by avoiding the problematic code sequence and
|
||||||
|
trapping KVM guest TTBRx_EL1 writes to EL2 when SMT is enabled. The
|
||||||
|
trap handler performs the corresponding register access, skips the
|
||||||
|
instruction and ensures context synchronization by virtue of the
|
||||||
|
exception return.
|
||||||
|
|
||||||
|
If unsure, say Y.
|
||||||
|
|
||||||
config QCOM_FALKOR_ERRATUM_1003
|
config QCOM_FALKOR_ERRATUM_1003
|
||||||
bool "Falkor E1003: Incorrect translation due to ASID change"
|
bool "Falkor E1003: Incorrect translation due to ASID change"
|
||||||
default y
|
default y
|
||||||
|
@ -63,3 +63,12 @@ ext_rgmii_phy: ethernet-phy@1 {
|
|||||||
reg = <1>;
|
reg = <1>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
®_dc1sw {
|
||||||
|
/*
|
||||||
|
* Ethernet PHY needs 30ms to properly power up and some more
|
||||||
|
* to initialize. 100ms should be plenty of time to finish
|
||||||
|
* whole process.
|
||||||
|
*/
|
||||||
|
regulator-enable-ramp-delay = <100000>;
|
||||||
|
};
|
||||||
|
@ -159,6 +159,12 @@ &ohci1 {
|
|||||||
};
|
};
|
||||||
|
|
||||||
®_dc1sw {
|
®_dc1sw {
|
||||||
|
/*
|
||||||
|
* Ethernet PHY needs 30ms to properly power up and some more
|
||||||
|
* to initialize. 100ms should be plenty of time to finish
|
||||||
|
* whole process.
|
||||||
|
*/
|
||||||
|
regulator-enable-ramp-delay = <100000>;
|
||||||
regulator-name = "vcc-phy";
|
regulator-name = "vcc-phy";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -142,15 +142,6 @@ osc32k: osc32k_clk {
|
|||||||
clock-output-names = "ext-osc32k";
|
clock-output-names = "ext-osc32k";
|
||||||
};
|
};
|
||||||
|
|
||||||
pmu {
|
|
||||||
compatible = "arm,cortex-a53-pmu";
|
|
||||||
interrupts = <GIC_SPI 152 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<GIC_SPI 153 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<GIC_SPI 154 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<GIC_SPI 155 IRQ_TYPE_LEVEL_HIGH>;
|
|
||||||
interrupt-affinity = <&cpu0>, <&cpu1>, <&cpu2>, <&cpu3>;
|
|
||||||
};
|
|
||||||
|
|
||||||
psci {
|
psci {
|
||||||
compatible = "arm,psci-0.2";
|
compatible = "arm,psci-0.2";
|
||||||
method = "smc";
|
method = "smc";
|
||||||
|
@ -42,13 +42,14 @@ pinconf: pinconf@140000 {
|
|||||||
|
|
||||||
pinmux: pinmux@14029c {
|
pinmux: pinmux@14029c {
|
||||||
compatible = "pinctrl-single";
|
compatible = "pinctrl-single";
|
||||||
reg = <0x0014029c 0x250>;
|
reg = <0x0014029c 0x26c>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
pinctrl-single,register-width = <32>;
|
pinctrl-single,register-width = <32>;
|
||||||
pinctrl-single,function-mask = <0xf>;
|
pinctrl-single,function-mask = <0xf>;
|
||||||
pinctrl-single,gpio-range = <
|
pinctrl-single,gpio-range = <
|
||||||
&range 0 154 MODE_GPIO
|
&range 0 91 MODE_GPIO
|
||||||
|
&range 95 60 MODE_GPIO
|
||||||
>;
|
>;
|
||||||
range: gpio-range {
|
range: gpio-range {
|
||||||
#pinctrl-single,gpio-range-cells = <3>;
|
#pinctrl-single,gpio-range-cells = <3>;
|
||||||
|
@ -464,8 +464,7 @@ gpio_hsls: gpio@d0000 {
|
|||||||
<&pinmux 108 16 27>,
|
<&pinmux 108 16 27>,
|
||||||
<&pinmux 135 77 6>,
|
<&pinmux 135 77 6>,
|
||||||
<&pinmux 141 67 4>,
|
<&pinmux 141 67 4>,
|
||||||
<&pinmux 145 149 6>,
|
<&pinmux 145 149 6>;
|
||||||
<&pinmux 151 91 4>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
i2c1: i2c@e0000 {
|
i2c1: i2c@e0000 {
|
||||||
|
@ -33,7 +33,7 @@ cpu@0 {
|
|||||||
i-cache-line-size = <64>;
|
i-cache-line-size = <64>;
|
||||||
i-cache-sets = <192>;
|
i-cache-sets = <192>;
|
||||||
next-level-cache = <&cluster0_l2>;
|
next-level-cache = <&cluster0_l2>;
|
||||||
cpu-idle-states = <&cpu_pw20>;
|
cpu-idle-states = <&cpu_pw15>;
|
||||||
};
|
};
|
||||||
|
|
||||||
cpu@1 {
|
cpu@1 {
|
||||||
@ -49,7 +49,7 @@ cpu@1 {
|
|||||||
i-cache-line-size = <64>;
|
i-cache-line-size = <64>;
|
||||||
i-cache-sets = <192>;
|
i-cache-sets = <192>;
|
||||||
next-level-cache = <&cluster0_l2>;
|
next-level-cache = <&cluster0_l2>;
|
||||||
cpu-idle-states = <&cpu_pw20>;
|
cpu-idle-states = <&cpu_pw15>;
|
||||||
};
|
};
|
||||||
|
|
||||||
cpu@100 {
|
cpu@100 {
|
||||||
@ -65,7 +65,7 @@ cpu@100 {
|
|||||||
i-cache-line-size = <64>;
|
i-cache-line-size = <64>;
|
||||||
i-cache-sets = <192>;
|
i-cache-sets = <192>;
|
||||||
next-level-cache = <&cluster1_l2>;
|
next-level-cache = <&cluster1_l2>;
|
||||||
cpu-idle-states = <&cpu_pw20>;
|
cpu-idle-states = <&cpu_pw15>;
|
||||||
};
|
};
|
||||||
|
|
||||||
cpu@101 {
|
cpu@101 {
|
||||||
@ -81,7 +81,7 @@ cpu@101 {
|
|||||||
i-cache-line-size = <64>;
|
i-cache-line-size = <64>;
|
||||||
i-cache-sets = <192>;
|
i-cache-sets = <192>;
|
||||||
next-level-cache = <&cluster1_l2>;
|
next-level-cache = <&cluster1_l2>;
|
||||||
cpu-idle-states = <&cpu_pw20>;
|
cpu-idle-states = <&cpu_pw15>;
|
||||||
};
|
};
|
||||||
|
|
||||||
cpu@200 {
|
cpu@200 {
|
||||||
@ -97,7 +97,7 @@ cpu@200 {
|
|||||||
i-cache-line-size = <64>;
|
i-cache-line-size = <64>;
|
||||||
i-cache-sets = <192>;
|
i-cache-sets = <192>;
|
||||||
next-level-cache = <&cluster2_l2>;
|
next-level-cache = <&cluster2_l2>;
|
||||||
cpu-idle-states = <&cpu_pw20>;
|
cpu-idle-states = <&cpu_pw15>;
|
||||||
};
|
};
|
||||||
|
|
||||||
cpu@201 {
|
cpu@201 {
|
||||||
@ -113,7 +113,7 @@ cpu@201 {
|
|||||||
i-cache-line-size = <64>;
|
i-cache-line-size = <64>;
|
||||||
i-cache-sets = <192>;
|
i-cache-sets = <192>;
|
||||||
next-level-cache = <&cluster2_l2>;
|
next-level-cache = <&cluster2_l2>;
|
||||||
cpu-idle-states = <&cpu_pw20>;
|
cpu-idle-states = <&cpu_pw15>;
|
||||||
};
|
};
|
||||||
|
|
||||||
cpu@300 {
|
cpu@300 {
|
||||||
@ -129,7 +129,7 @@ cpu@300 {
|
|||||||
i-cache-line-size = <64>;
|
i-cache-line-size = <64>;
|
||||||
i-cache-sets = <192>;
|
i-cache-sets = <192>;
|
||||||
next-level-cache = <&cluster3_l2>;
|
next-level-cache = <&cluster3_l2>;
|
||||||
cpu-idle-states = <&cpu_pw20>;
|
cpu-idle-states = <&cpu_pw15>;
|
||||||
};
|
};
|
||||||
|
|
||||||
cpu@301 {
|
cpu@301 {
|
||||||
@ -145,7 +145,7 @@ cpu@301 {
|
|||||||
i-cache-line-size = <64>;
|
i-cache-line-size = <64>;
|
||||||
i-cache-sets = <192>;
|
i-cache-sets = <192>;
|
||||||
next-level-cache = <&cluster3_l2>;
|
next-level-cache = <&cluster3_l2>;
|
||||||
cpu-idle-states = <&cpu_pw20>;
|
cpu-idle-states = <&cpu_pw15>;
|
||||||
};
|
};
|
||||||
|
|
||||||
cpu@400 {
|
cpu@400 {
|
||||||
@ -161,7 +161,7 @@ cpu@400 {
|
|||||||
i-cache-line-size = <64>;
|
i-cache-line-size = <64>;
|
||||||
i-cache-sets = <192>;
|
i-cache-sets = <192>;
|
||||||
next-level-cache = <&cluster4_l2>;
|
next-level-cache = <&cluster4_l2>;
|
||||||
cpu-idle-states = <&cpu_pw20>;
|
cpu-idle-states = <&cpu_pw15>;
|
||||||
};
|
};
|
||||||
|
|
||||||
cpu@401 {
|
cpu@401 {
|
||||||
@ -177,7 +177,7 @@ cpu@401 {
|
|||||||
i-cache-line-size = <64>;
|
i-cache-line-size = <64>;
|
||||||
i-cache-sets = <192>;
|
i-cache-sets = <192>;
|
||||||
next-level-cache = <&cluster4_l2>;
|
next-level-cache = <&cluster4_l2>;
|
||||||
cpu-idle-states = <&cpu_pw20>;
|
cpu-idle-states = <&cpu_pw15>;
|
||||||
};
|
};
|
||||||
|
|
||||||
cpu@500 {
|
cpu@500 {
|
||||||
@ -193,7 +193,7 @@ cpu@500 {
|
|||||||
i-cache-line-size = <64>;
|
i-cache-line-size = <64>;
|
||||||
i-cache-sets = <192>;
|
i-cache-sets = <192>;
|
||||||
next-level-cache = <&cluster5_l2>;
|
next-level-cache = <&cluster5_l2>;
|
||||||
cpu-idle-states = <&cpu_pw20>;
|
cpu-idle-states = <&cpu_pw15>;
|
||||||
};
|
};
|
||||||
|
|
||||||
cpu@501 {
|
cpu@501 {
|
||||||
@ -209,7 +209,7 @@ cpu@501 {
|
|||||||
i-cache-line-size = <64>;
|
i-cache-line-size = <64>;
|
||||||
i-cache-sets = <192>;
|
i-cache-sets = <192>;
|
||||||
next-level-cache = <&cluster5_l2>;
|
next-level-cache = <&cluster5_l2>;
|
||||||
cpu-idle-states = <&cpu_pw20>;
|
cpu-idle-states = <&cpu_pw15>;
|
||||||
};
|
};
|
||||||
|
|
||||||
cpu@600 {
|
cpu@600 {
|
||||||
@ -225,7 +225,7 @@ cpu@600 {
|
|||||||
i-cache-line-size = <64>;
|
i-cache-line-size = <64>;
|
||||||
i-cache-sets = <192>;
|
i-cache-sets = <192>;
|
||||||
next-level-cache = <&cluster6_l2>;
|
next-level-cache = <&cluster6_l2>;
|
||||||
cpu-idle-states = <&cpu_pw20>;
|
cpu-idle-states = <&cpu_pw15>;
|
||||||
};
|
};
|
||||||
|
|
||||||
cpu@601 {
|
cpu@601 {
|
||||||
@ -241,7 +241,7 @@ cpu@601 {
|
|||||||
i-cache-line-size = <64>;
|
i-cache-line-size = <64>;
|
||||||
i-cache-sets = <192>;
|
i-cache-sets = <192>;
|
||||||
next-level-cache = <&cluster6_l2>;
|
next-level-cache = <&cluster6_l2>;
|
||||||
cpu-idle-states = <&cpu_pw20>;
|
cpu-idle-states = <&cpu_pw15>;
|
||||||
};
|
};
|
||||||
|
|
||||||
cpu@700 {
|
cpu@700 {
|
||||||
@ -257,7 +257,7 @@ cpu@700 {
|
|||||||
i-cache-line-size = <64>;
|
i-cache-line-size = <64>;
|
||||||
i-cache-sets = <192>;
|
i-cache-sets = <192>;
|
||||||
next-level-cache = <&cluster7_l2>;
|
next-level-cache = <&cluster7_l2>;
|
||||||
cpu-idle-states = <&cpu_pw20>;
|
cpu-idle-states = <&cpu_pw15>;
|
||||||
};
|
};
|
||||||
|
|
||||||
cpu@701 {
|
cpu@701 {
|
||||||
@ -273,7 +273,7 @@ cpu@701 {
|
|||||||
i-cache-line-size = <64>;
|
i-cache-line-size = <64>;
|
||||||
i-cache-sets = <192>;
|
i-cache-sets = <192>;
|
||||||
next-level-cache = <&cluster7_l2>;
|
next-level-cache = <&cluster7_l2>;
|
||||||
cpu-idle-states = <&cpu_pw20>;
|
cpu-idle-states = <&cpu_pw15>;
|
||||||
};
|
};
|
||||||
|
|
||||||
cluster0_l2: l2-cache0 {
|
cluster0_l2: l2-cache0 {
|
||||||
@ -340,9 +340,9 @@ cluster7_l2: l2-cache7 {
|
|||||||
cache-level = <2>;
|
cache-level = <2>;
|
||||||
};
|
};
|
||||||
|
|
||||||
cpu_pw20: cpu-pw20 {
|
cpu_pw15: cpu-pw15 {
|
||||||
compatible = "arm,idle-state";
|
compatible = "arm,idle-state";
|
||||||
idle-state-name = "PW20";
|
idle-state-name = "PW15";
|
||||||
arm,psci-suspend-param = <0x0>;
|
arm,psci-suspend-param = <0x0>;
|
||||||
entry-latency-us = <2000>;
|
entry-latency-us = <2000>;
|
||||||
exit-latency-us = <2000>;
|
exit-latency-us = <2000>;
|
||||||
|
@ -694,7 +694,7 @@ usdhc1: mmc@30b40000 {
|
|||||||
compatible = "fsl,imx8mm-usdhc", "fsl,imx7d-usdhc";
|
compatible = "fsl,imx8mm-usdhc", "fsl,imx7d-usdhc";
|
||||||
reg = <0x30b40000 0x10000>;
|
reg = <0x30b40000 0x10000>;
|
||||||
interrupts = <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clk IMX8MM_CLK_DUMMY>,
|
clocks = <&clk IMX8MM_CLK_IPG_ROOT>,
|
||||||
<&clk IMX8MM_CLK_NAND_USDHC_BUS>,
|
<&clk IMX8MM_CLK_NAND_USDHC_BUS>,
|
||||||
<&clk IMX8MM_CLK_USDHC1_ROOT>;
|
<&clk IMX8MM_CLK_USDHC1_ROOT>;
|
||||||
clock-names = "ipg", "ahb", "per";
|
clock-names = "ipg", "ahb", "per";
|
||||||
@ -710,7 +710,7 @@ usdhc2: mmc@30b50000 {
|
|||||||
compatible = "fsl,imx8mm-usdhc", "fsl,imx7d-usdhc";
|
compatible = "fsl,imx8mm-usdhc", "fsl,imx7d-usdhc";
|
||||||
reg = <0x30b50000 0x10000>;
|
reg = <0x30b50000 0x10000>;
|
||||||
interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clk IMX8MM_CLK_DUMMY>,
|
clocks = <&clk IMX8MM_CLK_IPG_ROOT>,
|
||||||
<&clk IMX8MM_CLK_NAND_USDHC_BUS>,
|
<&clk IMX8MM_CLK_NAND_USDHC_BUS>,
|
||||||
<&clk IMX8MM_CLK_USDHC2_ROOT>;
|
<&clk IMX8MM_CLK_USDHC2_ROOT>;
|
||||||
clock-names = "ipg", "ahb", "per";
|
clock-names = "ipg", "ahb", "per";
|
||||||
@ -724,7 +724,7 @@ usdhc3: mmc@30b60000 {
|
|||||||
compatible = "fsl,imx8mm-usdhc", "fsl,imx7d-usdhc";
|
compatible = "fsl,imx8mm-usdhc", "fsl,imx7d-usdhc";
|
||||||
reg = <0x30b60000 0x10000>;
|
reg = <0x30b60000 0x10000>;
|
||||||
interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clk IMX8MM_CLK_DUMMY>,
|
clocks = <&clk IMX8MM_CLK_IPG_ROOT>,
|
||||||
<&clk IMX8MM_CLK_NAND_USDHC_BUS>,
|
<&clk IMX8MM_CLK_NAND_USDHC_BUS>,
|
||||||
<&clk IMX8MM_CLK_USDHC3_ROOT>;
|
<&clk IMX8MM_CLK_USDHC3_ROOT>;
|
||||||
clock-names = "ipg", "ahb", "per";
|
clock-names = "ipg", "ahb", "per";
|
||||||
|
@ -569,7 +569,7 @@ usdhc1: mmc@30b40000 {
|
|||||||
compatible = "fsl,imx8mn-usdhc", "fsl,imx7d-usdhc";
|
compatible = "fsl,imx8mn-usdhc", "fsl,imx7d-usdhc";
|
||||||
reg = <0x30b40000 0x10000>;
|
reg = <0x30b40000 0x10000>;
|
||||||
interrupts = <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clk IMX8MN_CLK_DUMMY>,
|
clocks = <&clk IMX8MN_CLK_IPG_ROOT>,
|
||||||
<&clk IMX8MN_CLK_NAND_USDHC_BUS>,
|
<&clk IMX8MN_CLK_NAND_USDHC_BUS>,
|
||||||
<&clk IMX8MN_CLK_USDHC1_ROOT>;
|
<&clk IMX8MN_CLK_USDHC1_ROOT>;
|
||||||
clock-names = "ipg", "ahb", "per";
|
clock-names = "ipg", "ahb", "per";
|
||||||
@ -585,7 +585,7 @@ usdhc2: mmc@30b50000 {
|
|||||||
compatible = "fsl,imx8mn-usdhc", "fsl,imx7d-usdhc";
|
compatible = "fsl,imx8mn-usdhc", "fsl,imx7d-usdhc";
|
||||||
reg = <0x30b50000 0x10000>;
|
reg = <0x30b50000 0x10000>;
|
||||||
interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clk IMX8MN_CLK_DUMMY>,
|
clocks = <&clk IMX8MN_CLK_IPG_ROOT>,
|
||||||
<&clk IMX8MN_CLK_NAND_USDHC_BUS>,
|
<&clk IMX8MN_CLK_NAND_USDHC_BUS>,
|
||||||
<&clk IMX8MN_CLK_USDHC2_ROOT>;
|
<&clk IMX8MN_CLK_USDHC2_ROOT>;
|
||||||
clock-names = "ipg", "ahb", "per";
|
clock-names = "ipg", "ahb", "per";
|
||||||
@ -599,7 +599,7 @@ usdhc3: mmc@30b60000 {
|
|||||||
compatible = "fsl,imx8mn-usdhc", "fsl,imx7d-usdhc";
|
compatible = "fsl,imx8mn-usdhc", "fsl,imx7d-usdhc";
|
||||||
reg = <0x30b60000 0x10000>;
|
reg = <0x30b60000 0x10000>;
|
||||||
interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clk IMX8MN_CLK_DUMMY>,
|
clocks = <&clk IMX8MN_CLK_IPG_ROOT>,
|
||||||
<&clk IMX8MN_CLK_NAND_USDHC_BUS>,
|
<&clk IMX8MN_CLK_NAND_USDHC_BUS>,
|
||||||
<&clk IMX8MN_CLK_USDHC3_ROOT>;
|
<&clk IMX8MN_CLK_USDHC3_ROOT>;
|
||||||
clock-names = "ipg", "ahb", "per";
|
clock-names = "ipg", "ahb", "per";
|
||||||
|
@ -89,8 +89,8 @@ reg_arm: regulator-arm {
|
|||||||
regulator-min-microvolt = <900000>;
|
regulator-min-microvolt = <900000>;
|
||||||
regulator-max-microvolt = <1000000>;
|
regulator-max-microvolt = <1000000>;
|
||||||
gpios = <&gpio3 19 GPIO_ACTIVE_HIGH>;
|
gpios = <&gpio3 19 GPIO_ACTIVE_HIGH>;
|
||||||
states = <1000000 0x0
|
states = <1000000 0x1
|
||||||
900000 0x1>;
|
900000 0x0>;
|
||||||
regulator-always-on;
|
regulator-always-on;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -850,7 +850,7 @@ usdhc1: mmc@30b40000 {
|
|||||||
"fsl,imx7d-usdhc";
|
"fsl,imx7d-usdhc";
|
||||||
reg = <0x30b40000 0x10000>;
|
reg = <0x30b40000 0x10000>;
|
||||||
interrupts = <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clk IMX8MQ_CLK_DUMMY>,
|
clocks = <&clk IMX8MQ_CLK_IPG_ROOT>,
|
||||||
<&clk IMX8MQ_CLK_NAND_USDHC_BUS>,
|
<&clk IMX8MQ_CLK_NAND_USDHC_BUS>,
|
||||||
<&clk IMX8MQ_CLK_USDHC1_ROOT>;
|
<&clk IMX8MQ_CLK_USDHC1_ROOT>;
|
||||||
clock-names = "ipg", "ahb", "per";
|
clock-names = "ipg", "ahb", "per";
|
||||||
@ -867,7 +867,7 @@ usdhc2: mmc@30b50000 {
|
|||||||
"fsl,imx7d-usdhc";
|
"fsl,imx7d-usdhc";
|
||||||
reg = <0x30b50000 0x10000>;
|
reg = <0x30b50000 0x10000>;
|
||||||
interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clk IMX8MQ_CLK_DUMMY>,
|
clocks = <&clk IMX8MQ_CLK_IPG_ROOT>,
|
||||||
<&clk IMX8MQ_CLK_NAND_USDHC_BUS>,
|
<&clk IMX8MQ_CLK_NAND_USDHC_BUS>,
|
||||||
<&clk IMX8MQ_CLK_USDHC2_ROOT>;
|
<&clk IMX8MQ_CLK_USDHC2_ROOT>;
|
||||||
clock-names = "ipg", "ahb", "per";
|
clock-names = "ipg", "ahb", "per";
|
||||||
|
@ -60,11 +60,6 @@ exp_usb3_vbus: usb3-vbus {
|
|||||||
gpio = <&gpiosb 0 GPIO_ACTIVE_HIGH>;
|
gpio = <&gpiosb 0 GPIO_ACTIVE_HIGH>;
|
||||||
};
|
};
|
||||||
|
|
||||||
usb3_phy: usb3-phy {
|
|
||||||
compatible = "usb-nop-xceiv";
|
|
||||||
vcc-supply = <&exp_usb3_vbus>;
|
|
||||||
};
|
|
||||||
|
|
||||||
vsdc_reg: vsdc-reg {
|
vsdc_reg: vsdc-reg {
|
||||||
compatible = "regulator-gpio";
|
compatible = "regulator-gpio";
|
||||||
regulator-name = "vsdc";
|
regulator-name = "vsdc";
|
||||||
@ -255,10 +250,16 @@ &usb2 {
|
|||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&comphy2 {
|
||||||
|
connector {
|
||||||
|
compatible = "usb-a-connector";
|
||||||
|
phy-supply = <&exp_usb3_vbus>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
&usb3 {
|
&usb3 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
phys = <&comphy2 0>;
|
phys = <&comphy2 0>;
|
||||||
usb-phy = <&usb3_phy>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
&mdio {
|
&mdio {
|
||||||
|
@ -44,7 +44,7 @@ edp_panel: edp-panel {
|
|||||||
power-supply = <&pp3300_disp>;
|
power-supply = <&pp3300_disp>;
|
||||||
|
|
||||||
panel-timing {
|
panel-timing {
|
||||||
clock-frequency = <266604720>;
|
clock-frequency = <266666667>;
|
||||||
hactive = <2400>;
|
hactive = <2400>;
|
||||||
hfront-porch = <48>;
|
hfront-porch = <48>;
|
||||||
hback-porch = <84>;
|
hback-porch = <84>;
|
||||||
|
@ -644,7 +644,7 @@ &u2phy0 {
|
|||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
u2phy0_host: host-port {
|
u2phy0_host: host-port {
|
||||||
phy-supply = <&vcc5v0_host>;
|
phy-supply = <&vcc5v0_typec>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -712,7 +712,7 @@ &usbdrd3_0 {
|
|||||||
|
|
||||||
&usbdrd_dwc3_0 {
|
&usbdrd_dwc3_0 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
dr_mode = "otg";
|
dr_mode = "host";
|
||||||
};
|
};
|
||||||
|
|
||||||
&usbdrd3_1 {
|
&usbdrd3_1 {
|
||||||
|
@ -173,7 +173,7 @@ vdd_log: vdd-log {
|
|||||||
regulator-always-on;
|
regulator-always-on;
|
||||||
regulator-boot-on;
|
regulator-boot-on;
|
||||||
regulator-min-microvolt = <800000>;
|
regulator-min-microvolt = <800000>;
|
||||||
regulator-max-microvolt = <1400000>;
|
regulator-max-microvolt = <1700000>;
|
||||||
vin-supply = <&vcc5v0_sys>;
|
vin-supply = <&vcc5v0_sys>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -247,8 +247,8 @@ &i2c0 {
|
|||||||
rk808: pmic@1b {
|
rk808: pmic@1b {
|
||||||
compatible = "rockchip,rk808";
|
compatible = "rockchip,rk808";
|
||||||
reg = <0x1b>;
|
reg = <0x1b>;
|
||||||
interrupt-parent = <&gpio1>;
|
interrupt-parent = <&gpio3>;
|
||||||
interrupts = <21 IRQ_TYPE_LEVEL_LOW>;
|
interrupts = <10 IRQ_TYPE_LEVEL_LOW>;
|
||||||
#clock-cells = <1>;
|
#clock-cells = <1>;
|
||||||
clock-output-names = "xin32k", "rk808-clkout2";
|
clock-output-names = "xin32k", "rk808-clkout2";
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
@ -574,7 +574,7 @@ pcie_pwr_en: pcie-pwr-en {
|
|||||||
|
|
||||||
pmic {
|
pmic {
|
||||||
pmic_int_l: pmic-int-l {
|
pmic_int_l: pmic-int-l {
|
||||||
rockchip,pins = <1 RK_PC5 RK_FUNC_GPIO &pcfg_pull_up>;
|
rockchip,pins = <3 RK_PB2 RK_FUNC_GPIO &pcfg_pull_up>;
|
||||||
};
|
};
|
||||||
|
|
||||||
vsel1_gpio: vsel1-gpio {
|
vsel1_gpio: vsel1-gpio {
|
||||||
@ -624,7 +624,6 @@ &saradc {
|
|||||||
|
|
||||||
&sdmmc {
|
&sdmmc {
|
||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
cap-mmc-highspeed;
|
|
||||||
cap-sd-highspeed;
|
cap-sd-highspeed;
|
||||||
cd-gpios = <&gpio0 7 GPIO_ACTIVE_LOW>;
|
cd-gpios = <&gpio0 7 GPIO_ACTIVE_LOW>;
|
||||||
disable-wp;
|
disable-wp;
|
||||||
@ -636,8 +635,7 @@ &sdmmc {
|
|||||||
|
|
||||||
&sdhci {
|
&sdhci {
|
||||||
bus-width = <8>;
|
bus-width = <8>;
|
||||||
mmc-hs400-1_8v;
|
mmc-hs200-1_8v;
|
||||||
mmc-hs400-enhanced-strobe;
|
|
||||||
non-removable;
|
non-removable;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
@ -61,6 +61,7 @@ CONFIG_CPU_FREQ_TIMES=y
|
|||||||
CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y
|
CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y
|
||||||
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
|
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
|
||||||
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
|
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
|
||||||
|
CONFIG_CPUFREQ_DUMMY=m
|
||||||
CONFIG_ARM_SCPI_CPUFREQ=y
|
CONFIG_ARM_SCPI_CPUFREQ=y
|
||||||
CONFIG_ARM_SCMI_CPUFREQ=y
|
CONFIG_ARM_SCMI_CPUFREQ=y
|
||||||
CONFIG_ARM_SCMI_PROTOCOL=y
|
CONFIG_ARM_SCMI_PROTOCOL=y
|
||||||
@ -75,6 +76,7 @@ CONFIG_KPROBES=y
|
|||||||
CONFIG_MODULES=y
|
CONFIG_MODULES=y
|
||||||
CONFIG_MODULE_UNLOAD=y
|
CONFIG_MODULE_UNLOAD=y
|
||||||
CONFIG_MODVERSIONS=y
|
CONFIG_MODVERSIONS=y
|
||||||
|
CONFIG_BLK_INLINE_ENCRYPTION=y
|
||||||
CONFIG_GKI_HACKS_TO_FIX=y
|
CONFIG_GKI_HACKS_TO_FIX=y
|
||||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||||
CONFIG_MEMORY_HOTPLUG=y
|
CONFIG_MEMORY_HOTPLUG=y
|
||||||
@ -213,6 +215,7 @@ CONFIG_SCSI=y
|
|||||||
CONFIG_BLK_DEV_SD=y
|
CONFIG_BLK_DEV_SD=y
|
||||||
CONFIG_SCSI_UFSHCD=y
|
CONFIG_SCSI_UFSHCD=y
|
||||||
CONFIG_SCSI_UFSHCD_PLATFORM=y
|
CONFIG_SCSI_UFSHCD_PLATFORM=y
|
||||||
|
CONFIG_SCSI_UFS_CRYPTO=y
|
||||||
CONFIG_MD=y
|
CONFIG_MD=y
|
||||||
CONFIG_BLK_DEV_DM=y
|
CONFIG_BLK_DEV_DM=y
|
||||||
CONFIG_DM_CRYPT=y
|
CONFIG_DM_CRYPT=y
|
||||||
@ -260,6 +263,7 @@ CONFIG_USB_USBNET=y
|
|||||||
# CONFIG_WLAN_VENDOR_QUANTENNA is not set
|
# CONFIG_WLAN_VENDOR_QUANTENNA is not set
|
||||||
CONFIG_VIRT_WIFI=y
|
CONFIG_VIRT_WIFI=y
|
||||||
CONFIG_INPUT_EVDEV=y
|
CONFIG_INPUT_EVDEV=y
|
||||||
|
CONFIG_KEYBOARD_GPIO=y
|
||||||
# CONFIG_INPUT_MOUSE is not set
|
# CONFIG_INPUT_MOUSE is not set
|
||||||
CONFIG_INPUT_JOYSTICK=y
|
CONFIG_INPUT_JOYSTICK=y
|
||||||
CONFIG_INPUT_MISC=y
|
CONFIG_INPUT_MISC=y
|
||||||
@ -284,6 +288,7 @@ CONFIG_HW_RANDOM_VIRTIO=y
|
|||||||
# CONFIG_I2C_HELPER_AUTO is not set
|
# CONFIG_I2C_HELPER_AUTO is not set
|
||||||
CONFIG_SPI=y
|
CONFIG_SPI=y
|
||||||
CONFIG_SPMI=y
|
CONFIG_SPMI=y
|
||||||
|
# CONFIG_SPMI_MSM_PMIC_ARB is not set
|
||||||
CONFIG_PINCTRL_AMD=y
|
CONFIG_PINCTRL_AMD=y
|
||||||
CONFIG_POWER_AVS=y
|
CONFIG_POWER_AVS=y
|
||||||
CONFIG_POWER_RESET_HISI=y
|
CONFIG_POWER_RESET_HISI=y
|
||||||
@ -296,7 +301,6 @@ CONFIG_WATCHDOG=y
|
|||||||
CONFIG_MFD_ACT8945A=y
|
CONFIG_MFD_ACT8945A=y
|
||||||
CONFIG_MFD_SYSCON=y
|
CONFIG_MFD_SYSCON=y
|
||||||
CONFIG_REGULATOR=y
|
CONFIG_REGULATOR=y
|
||||||
CONFIG_MEDIA_SUPPORT=y
|
|
||||||
CONFIG_MEDIA_CAMERA_SUPPORT=y
|
CONFIG_MEDIA_CAMERA_SUPPORT=y
|
||||||
CONFIG_MEDIA_CONTROLLER=y
|
CONFIG_MEDIA_CONTROLLER=y
|
||||||
# CONFIG_VGA_ARB is not set
|
# CONFIG_VGA_ARB is not set
|
||||||
@ -381,6 +385,7 @@ CONFIG_EXT4_FS_SECURITY=y
|
|||||||
CONFIG_F2FS_FS=y
|
CONFIG_F2FS_FS=y
|
||||||
CONFIG_F2FS_FS_SECURITY=y
|
CONFIG_F2FS_FS_SECURITY=y
|
||||||
CONFIG_FS_ENCRYPTION=y
|
CONFIG_FS_ENCRYPTION=y
|
||||||
|
CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
|
||||||
CONFIG_FS_VERITY=y
|
CONFIG_FS_VERITY=y
|
||||||
CONFIG_FS_VERITY_BUILTIN_SIGNATURES=y
|
CONFIG_FS_VERITY_BUILTIN_SIGNATURES=y
|
||||||
# CONFIG_DNOTIFY is not set
|
# CONFIG_DNOTIFY is not set
|
||||||
@ -449,6 +454,7 @@ CONFIG_SECURITY_PERF_EVENTS_RESTRICT=y
|
|||||||
CONFIG_SECURITY=y
|
CONFIG_SECURITY=y
|
||||||
CONFIG_SECURITY_NETWORK=y
|
CONFIG_SECURITY_NETWORK=y
|
||||||
CONFIG_HARDENED_USERCOPY=y
|
CONFIG_HARDENED_USERCOPY=y
|
||||||
|
CONFIG_FORTIFY_SOURCE=y
|
||||||
CONFIG_SECURITY_SELINUX=y
|
CONFIG_SECURITY_SELINUX=y
|
||||||
CONFIG_CRYPTO_ADIANTUM=y
|
CONFIG_CRYPTO_ADIANTUM=y
|
||||||
CONFIG_CRYPTO_MD4=y
|
CONFIG_CRYPTO_MD4=y
|
||||||
|
@ -78,10 +78,9 @@ alternative_else_nop_endif
|
|||||||
/*
|
/*
|
||||||
* Remove the address tag from a virtual address, if present.
|
* Remove the address tag from a virtual address, if present.
|
||||||
*/
|
*/
|
||||||
.macro clear_address_tag, dst, addr
|
.macro untagged_addr, dst, addr
|
||||||
tst \addr, #(1 << 55)
|
sbfx \dst, \addr, #0, #56
|
||||||
bic \dst, \addr, #(0xff << 56)
|
and \dst, \dst, \addr
|
||||||
csel \dst, \dst, \addr, eq
|
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -52,7 +52,9 @@
|
|||||||
#define ARM64_HAS_IRQ_PRIO_MASKING 42
|
#define ARM64_HAS_IRQ_PRIO_MASKING 42
|
||||||
#define ARM64_HAS_DCPODP 43
|
#define ARM64_HAS_DCPODP 43
|
||||||
#define ARM64_WORKAROUND_1463225 44
|
#define ARM64_WORKAROUND_1463225 44
|
||||||
|
#define ARM64_WORKAROUND_CAVIUM_TX2_219_TVM 45
|
||||||
|
#define ARM64_WORKAROUND_CAVIUM_TX2_219_PRFM 46
|
||||||
|
|
||||||
#define ARM64_NCAPS 45
|
#define ARM64_NCAPS 47
|
||||||
|
|
||||||
#endif /* __ASM_CPUCAPS_H */
|
#endif /* __ASM_CPUCAPS_H */
|
||||||
|
@ -79,6 +79,7 @@
|
|||||||
#define CAVIUM_CPU_PART_THUNDERX_83XX 0x0A3
|
#define CAVIUM_CPU_PART_THUNDERX_83XX 0x0A3
|
||||||
#define CAVIUM_CPU_PART_THUNDERX2 0x0AF
|
#define CAVIUM_CPU_PART_THUNDERX2 0x0AF
|
||||||
|
|
||||||
|
#define BRCM_CPU_PART_BRAHMA_B53 0x100
|
||||||
#define BRCM_CPU_PART_VULCAN 0x516
|
#define BRCM_CPU_PART_VULCAN 0x516
|
||||||
|
|
||||||
#define QCOM_CPU_PART_FALKOR_V1 0x800
|
#define QCOM_CPU_PART_FALKOR_V1 0x800
|
||||||
@ -105,6 +106,7 @@
|
|||||||
#define MIDR_THUNDERX_81XX MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX_81XX)
|
#define MIDR_THUNDERX_81XX MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX_81XX)
|
||||||
#define MIDR_THUNDERX_83XX MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX_83XX)
|
#define MIDR_THUNDERX_83XX MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX_83XX)
|
||||||
#define MIDR_CAVIUM_THUNDERX2 MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX2)
|
#define MIDR_CAVIUM_THUNDERX2 MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX2)
|
||||||
|
#define MIDR_BRAHMA_B53 MIDR_CPU_MODEL(ARM_CPU_IMP_BRCM, BRCM_CPU_PART_BRAHMA_B53)
|
||||||
#define MIDR_BRCM_VULCAN MIDR_CPU_MODEL(ARM_CPU_IMP_BRCM, BRCM_CPU_PART_VULCAN)
|
#define MIDR_BRCM_VULCAN MIDR_CPU_MODEL(ARM_CPU_IMP_BRCM, BRCM_CPU_PART_VULCAN)
|
||||||
#define MIDR_QCOM_FALKOR_V1 MIDR_CPU_MODEL(ARM_CPU_IMP_QCOM, QCOM_CPU_PART_FALKOR_V1)
|
#define MIDR_QCOM_FALKOR_V1 MIDR_CPU_MODEL(ARM_CPU_IMP_QCOM, QCOM_CPU_PART_FALKOR_V1)
|
||||||
#define MIDR_QCOM_FALKOR MIDR_CPU_MODEL(ARM_CPU_IMP_QCOM, QCOM_CPU_PART_FALKOR)
|
#define MIDR_QCOM_FALKOR MIDR_CPU_MODEL(ARM_CPU_IMP_QCOM, QCOM_CPU_PART_FALKOR)
|
||||||
|
@ -215,12 +215,18 @@ static inline unsigned long kaslr_offset(void)
|
|||||||
* up with a tagged userland pointer. Clear the tag to get a sane pointer to
|
* up with a tagged userland pointer. Clear the tag to get a sane pointer to
|
||||||
* pass on to access_ok(), for instance.
|
* pass on to access_ok(), for instance.
|
||||||
*/
|
*/
|
||||||
#define untagged_addr(addr) \
|
#define __untagged_addr(addr) \
|
||||||
((__force __typeof__(addr))sign_extend64((__force u64)(addr), 55))
|
((__force __typeof__(addr))sign_extend64((__force u64)(addr), 55))
|
||||||
|
|
||||||
|
#define untagged_addr(addr) ({ \
|
||||||
|
u64 __addr = (__force u64)addr; \
|
||||||
|
__addr &= __untagged_addr(__addr); \
|
||||||
|
(__force __typeof__(addr))__addr; \
|
||||||
|
})
|
||||||
|
|
||||||
#ifdef CONFIG_KASAN_SW_TAGS
|
#ifdef CONFIG_KASAN_SW_TAGS
|
||||||
#define __tag_shifted(tag) ((u64)(tag) << 56)
|
#define __tag_shifted(tag) ((u64)(tag) << 56)
|
||||||
#define __tag_reset(addr) untagged_addr(addr)
|
#define __tag_reset(addr) __untagged_addr(addr)
|
||||||
#define __tag_get(addr) (__u8)((u64)(addr) >> 56)
|
#define __tag_get(addr) (__u8)((u64)(addr) >> 56)
|
||||||
#else
|
#else
|
||||||
#define __tag_shifted(tag) 0UL
|
#define __tag_shifted(tag) 0UL
|
||||||
|
@ -32,11 +32,11 @@
|
|||||||
#define PROT_DEFAULT (_PROT_DEFAULT | PTE_MAYBE_NG)
|
#define PROT_DEFAULT (_PROT_DEFAULT | PTE_MAYBE_NG)
|
||||||
#define PROT_SECT_DEFAULT (_PROT_SECT_DEFAULT | PMD_MAYBE_NG)
|
#define PROT_SECT_DEFAULT (_PROT_SECT_DEFAULT | PMD_MAYBE_NG)
|
||||||
|
|
||||||
#define PROT_DEVICE_nGnRnE (PROT_DEFAULT | PTE_PXN | PTE_UXN | PTE_DIRTY | PTE_WRITE | PTE_ATTRINDX(MT_DEVICE_nGnRnE))
|
#define PROT_DEVICE_nGnRnE (PROT_DEFAULT | PTE_PXN | PTE_UXN | PTE_WRITE | PTE_ATTRINDX(MT_DEVICE_nGnRnE))
|
||||||
#define PROT_DEVICE_nGnRE (PROT_DEFAULT | PTE_PXN | PTE_UXN | PTE_DIRTY | PTE_WRITE | PTE_ATTRINDX(MT_DEVICE_nGnRE))
|
#define PROT_DEVICE_nGnRE (PROT_DEFAULT | PTE_PXN | PTE_UXN | PTE_WRITE | PTE_ATTRINDX(MT_DEVICE_nGnRE))
|
||||||
#define PROT_NORMAL_NC (PROT_DEFAULT | PTE_PXN | PTE_UXN | PTE_DIRTY | PTE_WRITE | PTE_ATTRINDX(MT_NORMAL_NC))
|
#define PROT_NORMAL_NC (PROT_DEFAULT | PTE_PXN | PTE_UXN | PTE_WRITE | PTE_ATTRINDX(MT_NORMAL_NC))
|
||||||
#define PROT_NORMAL_WT (PROT_DEFAULT | PTE_PXN | PTE_UXN | PTE_DIRTY | PTE_WRITE | PTE_ATTRINDX(MT_NORMAL_WT))
|
#define PROT_NORMAL_WT (PROT_DEFAULT | PTE_PXN | PTE_UXN | PTE_WRITE | PTE_ATTRINDX(MT_NORMAL_WT))
|
||||||
#define PROT_NORMAL (PROT_DEFAULT | PTE_PXN | PTE_UXN | PTE_DIRTY | PTE_WRITE | PTE_ATTRINDX(MT_NORMAL))
|
#define PROT_NORMAL (PROT_DEFAULT | PTE_PXN | PTE_UXN | PTE_WRITE | PTE_ATTRINDX(MT_NORMAL))
|
||||||
|
|
||||||
#define PROT_SECT_DEVICE_nGnRE (PROT_SECT_DEFAULT | PMD_SECT_PXN | PMD_SECT_UXN | PMD_ATTRINDX(MT_DEVICE_nGnRE))
|
#define PROT_SECT_DEVICE_nGnRE (PROT_SECT_DEFAULT | PMD_SECT_PXN | PMD_SECT_UXN | PMD_ATTRINDX(MT_DEVICE_nGnRE))
|
||||||
#define PROT_SECT_NORMAL (PROT_SECT_DEFAULT | PMD_SECT_PXN | PMD_SECT_UXN | PMD_ATTRINDX(MT_NORMAL))
|
#define PROT_SECT_NORMAL (PROT_SECT_DEFAULT | PMD_SECT_PXN | PMD_SECT_UXN | PMD_ATTRINDX(MT_NORMAL))
|
||||||
@ -80,8 +80,9 @@
|
|||||||
#define PAGE_S2_DEVICE __pgprot(_PROT_DEFAULT | PAGE_S2_MEMATTR(DEVICE_nGnRE) | PTE_S2_RDONLY | PTE_S2_XN)
|
#define PAGE_S2_DEVICE __pgprot(_PROT_DEFAULT | PAGE_S2_MEMATTR(DEVICE_nGnRE) | PTE_S2_RDONLY | PTE_S2_XN)
|
||||||
|
|
||||||
#define PAGE_NONE __pgprot(((_PAGE_DEFAULT) & ~PTE_VALID) | PTE_PROT_NONE | PTE_RDONLY | PTE_NG | PTE_PXN | PTE_UXN)
|
#define PAGE_NONE __pgprot(((_PAGE_DEFAULT) & ~PTE_VALID) | PTE_PROT_NONE | PTE_RDONLY | PTE_NG | PTE_PXN | PTE_UXN)
|
||||||
#define PAGE_SHARED __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_NG | PTE_PXN | PTE_UXN | PTE_WRITE)
|
/* shared+writable pages are clean by default, hence PTE_RDONLY|PTE_WRITE */
|
||||||
#define PAGE_SHARED_EXEC __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_NG | PTE_PXN | PTE_WRITE)
|
#define PAGE_SHARED __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_RDONLY | PTE_NG | PTE_PXN | PTE_UXN | PTE_WRITE)
|
||||||
|
#define PAGE_SHARED_EXEC __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_RDONLY | PTE_NG | PTE_PXN | PTE_WRITE)
|
||||||
#define PAGE_READONLY __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_RDONLY | PTE_NG | PTE_PXN | PTE_UXN)
|
#define PAGE_READONLY __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_RDONLY | PTE_NG | PTE_PXN | PTE_UXN)
|
||||||
#define PAGE_READONLY_EXEC __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_RDONLY | PTE_NG | PTE_PXN)
|
#define PAGE_READONLY_EXEC __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_RDONLY | PTE_NG | PTE_PXN)
|
||||||
#define PAGE_EXECONLY __pgprot(_PAGE_DEFAULT | PTE_RDONLY | PTE_NG | PTE_PXN)
|
#define PAGE_EXECONLY __pgprot(_PAGE_DEFAULT | PTE_RDONLY | PTE_NG | PTE_PXN)
|
||||||
|
@ -876,9 +876,6 @@ static inline void update_mmu_cache(struct vm_area_struct *vma,
|
|||||||
|
|
||||||
#define update_mmu_cache_pmd(vma, address, pmd) do { } while (0)
|
#define update_mmu_cache_pmd(vma, address, pmd) do { } while (0)
|
||||||
|
|
||||||
#define kc_vaddr_to_offset(v) ((v) & ~PAGE_END)
|
|
||||||
#define kc_offset_to_vaddr(o) ((o) | PAGE_END)
|
|
||||||
|
|
||||||
#ifdef CONFIG_ARM64_PA_BITS_52
|
#ifdef CONFIG_ARM64_PA_BITS_52
|
||||||
#define phys_to_ttbr(addr) (((addr) | ((addr) >> 46)) & TTBR_BADDR_MASK_52)
|
#define phys_to_ttbr(addr) (((addr) | ((addr) >> 46)) & TTBR_BADDR_MASK_52)
|
||||||
#else
|
#else
|
||||||
|
@ -212,7 +212,7 @@
|
|||||||
#define SYS_FAR_EL1 sys_reg(3, 0, 6, 0, 0)
|
#define SYS_FAR_EL1 sys_reg(3, 0, 6, 0, 0)
|
||||||
#define SYS_PAR_EL1 sys_reg(3, 0, 7, 4, 0)
|
#define SYS_PAR_EL1 sys_reg(3, 0, 7, 4, 0)
|
||||||
|
|
||||||
#define SYS_PAR_EL1_F BIT(1)
|
#define SYS_PAR_EL1_F BIT(0)
|
||||||
#define SYS_PAR_EL1_FST GENMASK(6, 1)
|
#define SYS_PAR_EL1_FST GENMASK(6, 1)
|
||||||
|
|
||||||
/*** Statistical Profiling Extension ***/
|
/*** Statistical Profiling Extension ***/
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#include <asm/cpu.h>
|
#include <asm/cpu.h>
|
||||||
#include <asm/cputype.h>
|
#include <asm/cputype.h>
|
||||||
#include <asm/cpufeature.h>
|
#include <asm/cpufeature.h>
|
||||||
|
#include <asm/smp_plat.h>
|
||||||
|
|
||||||
static bool __maybe_unused
|
static bool __maybe_unused
|
||||||
is_affected_midr_range(const struct arm64_cpu_capabilities *entry, int scope)
|
is_affected_midr_range(const struct arm64_cpu_capabilities *entry, int scope)
|
||||||
@ -488,6 +489,7 @@ static const struct midr_range arm64_ssb_cpus[] = {
|
|||||||
MIDR_ALL_VERSIONS(MIDR_CORTEX_A35),
|
MIDR_ALL_VERSIONS(MIDR_CORTEX_A35),
|
||||||
MIDR_ALL_VERSIONS(MIDR_CORTEX_A53),
|
MIDR_ALL_VERSIONS(MIDR_CORTEX_A53),
|
||||||
MIDR_ALL_VERSIONS(MIDR_CORTEX_A55),
|
MIDR_ALL_VERSIONS(MIDR_CORTEX_A55),
|
||||||
|
MIDR_ALL_VERSIONS(MIDR_BRAHMA_B53),
|
||||||
{},
|
{},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -572,6 +574,7 @@ static const struct midr_range spectre_v2_safe_list[] = {
|
|||||||
MIDR_ALL_VERSIONS(MIDR_CORTEX_A35),
|
MIDR_ALL_VERSIONS(MIDR_CORTEX_A35),
|
||||||
MIDR_ALL_VERSIONS(MIDR_CORTEX_A53),
|
MIDR_ALL_VERSIONS(MIDR_CORTEX_A53),
|
||||||
MIDR_ALL_VERSIONS(MIDR_CORTEX_A55),
|
MIDR_ALL_VERSIONS(MIDR_CORTEX_A55),
|
||||||
|
MIDR_ALL_VERSIONS(MIDR_BRAHMA_B53),
|
||||||
{ /* sentinel */ }
|
{ /* sentinel */ }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -623,6 +626,30 @@ check_branch_predictor(const struct arm64_cpu_capabilities *entry, int scope)
|
|||||||
return (need_wa > 0);
|
return (need_wa > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const __maybe_unused struct midr_range tx2_family_cpus[] = {
|
||||||
|
MIDR_ALL_VERSIONS(MIDR_BRCM_VULCAN),
|
||||||
|
MIDR_ALL_VERSIONS(MIDR_CAVIUM_THUNDERX2),
|
||||||
|
{},
|
||||||
|
};
|
||||||
|
|
||||||
|
static bool __maybe_unused
|
||||||
|
needs_tx2_tvm_workaround(const struct arm64_cpu_capabilities *entry,
|
||||||
|
int scope)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (!is_affected_midr_range_list(entry, scope) ||
|
||||||
|
!is_hyp_mode_available())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
for_each_possible_cpu(i) {
|
||||||
|
if (MPIDR_AFFINITY_LEVEL(cpu_logical_map(i), 0) != 0)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_HARDEN_EL2_VECTORS
|
#ifdef CONFIG_HARDEN_EL2_VECTORS
|
||||||
|
|
||||||
static const struct midr_range arm64_harden_el2_vectors[] = {
|
static const struct midr_range arm64_harden_el2_vectors[] = {
|
||||||
@ -634,17 +661,23 @@ static const struct midr_range arm64_harden_el2_vectors[] = {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_ARM64_WORKAROUND_REPEAT_TLBI
|
#ifdef CONFIG_ARM64_WORKAROUND_REPEAT_TLBI
|
||||||
|
static const struct arm64_cpu_capabilities arm64_repeat_tlbi_list[] = {
|
||||||
static const struct midr_range arm64_repeat_tlbi_cpus[] = {
|
|
||||||
#ifdef CONFIG_QCOM_FALKOR_ERRATUM_1009
|
#ifdef CONFIG_QCOM_FALKOR_ERRATUM_1009
|
||||||
MIDR_RANGE(MIDR_QCOM_FALKOR_V1, 0, 0, 0, 0),
|
{
|
||||||
|
ERRATA_MIDR_REV(MIDR_QCOM_FALKOR_V1, 0, 0)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.midr_range.model = MIDR_QCOM_KRYO,
|
||||||
|
.matches = is_kryo_midr,
|
||||||
|
},
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_ARM64_ERRATUM_1286807
|
#ifdef CONFIG_ARM64_ERRATUM_1286807
|
||||||
MIDR_RANGE(MIDR_CORTEX_A76, 0, 0, 3, 0),
|
{
|
||||||
|
ERRATA_MIDR_RANGE(MIDR_CORTEX_A76, 0, 0, 3, 0),
|
||||||
|
},
|
||||||
#endif
|
#endif
|
||||||
{},
|
{},
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_CAVIUM_ERRATUM_27456
|
#ifdef CONFIG_CAVIUM_ERRATUM_27456
|
||||||
@ -712,6 +745,33 @@ static const struct midr_range erratum_1418040_list[] = {
|
|||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_ARM64_ERRATUM_845719
|
||||||
|
static const struct midr_range erratum_845719_list[] = {
|
||||||
|
/* Cortex-A53 r0p[01234] */
|
||||||
|
MIDR_REV_RANGE(MIDR_CORTEX_A53, 0, 0, 4),
|
||||||
|
/* Brahma-B53 r0p[0] */
|
||||||
|
MIDR_REV(MIDR_BRAHMA_B53, 0, 0),
|
||||||
|
{},
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_ARM64_ERRATUM_843419
|
||||||
|
static const struct arm64_cpu_capabilities erratum_843419_list[] = {
|
||||||
|
{
|
||||||
|
/* Cortex-A53 r0p[01234] */
|
||||||
|
.matches = is_affected_midr_range,
|
||||||
|
ERRATA_MIDR_REV_RANGE(MIDR_CORTEX_A53, 0, 0, 4),
|
||||||
|
MIDR_FIXED(0x4, BIT(8)),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
/* Brahma-B53 r0p[0] */
|
||||||
|
.matches = is_affected_midr_range,
|
||||||
|
ERRATA_MIDR_REV(MIDR_BRAHMA_B53, 0, 0),
|
||||||
|
},
|
||||||
|
{},
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
const struct arm64_cpu_capabilities arm64_errata[] = {
|
const struct arm64_cpu_capabilities arm64_errata[] = {
|
||||||
#ifdef CONFIG_ARM64_WORKAROUND_CLEAN_CACHE
|
#ifdef CONFIG_ARM64_WORKAROUND_CLEAN_CACHE
|
||||||
{
|
{
|
||||||
@ -743,19 +803,18 @@ const struct arm64_cpu_capabilities arm64_errata[] = {
|
|||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_ARM64_ERRATUM_843419
|
#ifdef CONFIG_ARM64_ERRATUM_843419
|
||||||
{
|
{
|
||||||
/* Cortex-A53 r0p[01234] */
|
|
||||||
.desc = "ARM erratum 843419",
|
.desc = "ARM erratum 843419",
|
||||||
.capability = ARM64_WORKAROUND_843419,
|
.capability = ARM64_WORKAROUND_843419,
|
||||||
ERRATA_MIDR_REV_RANGE(MIDR_CORTEX_A53, 0, 0, 4),
|
.type = ARM64_CPUCAP_LOCAL_CPU_ERRATUM,
|
||||||
MIDR_FIXED(0x4, BIT(8)),
|
.matches = cpucap_multi_entry_cap_matches,
|
||||||
|
.match_list = erratum_843419_list,
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_ARM64_ERRATUM_845719
|
#ifdef CONFIG_ARM64_ERRATUM_845719
|
||||||
{
|
{
|
||||||
/* Cortex-A53 r0p[01234] */
|
|
||||||
.desc = "ARM erratum 845719",
|
.desc = "ARM erratum 845719",
|
||||||
.capability = ARM64_WORKAROUND_845719,
|
.capability = ARM64_WORKAROUND_845719,
|
||||||
ERRATA_MIDR_REV_RANGE(MIDR_CORTEX_A53, 0, 0, 4),
|
ERRATA_MIDR_RANGE_LIST(erratum_845719_list),
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_CAVIUM_ERRATUM_23154
|
#ifdef CONFIG_CAVIUM_ERRATUM_23154
|
||||||
@ -791,6 +850,7 @@ const struct arm64_cpu_capabilities arm64_errata[] = {
|
|||||||
{
|
{
|
||||||
.desc = "Qualcomm Technologies Falkor/Kryo erratum 1003",
|
.desc = "Qualcomm Technologies Falkor/Kryo erratum 1003",
|
||||||
.capability = ARM64_WORKAROUND_QCOM_FALKOR_E1003,
|
.capability = ARM64_WORKAROUND_QCOM_FALKOR_E1003,
|
||||||
|
.type = ARM64_CPUCAP_LOCAL_CPU_ERRATUM,
|
||||||
.matches = cpucap_multi_entry_cap_matches,
|
.matches = cpucap_multi_entry_cap_matches,
|
||||||
.match_list = qcom_erratum_1003_list,
|
.match_list = qcom_erratum_1003_list,
|
||||||
},
|
},
|
||||||
@ -799,7 +859,9 @@ const struct arm64_cpu_capabilities arm64_errata[] = {
|
|||||||
{
|
{
|
||||||
.desc = "Qualcomm erratum 1009, ARM erratum 1286807",
|
.desc = "Qualcomm erratum 1009, ARM erratum 1286807",
|
||||||
.capability = ARM64_WORKAROUND_REPEAT_TLBI,
|
.capability = ARM64_WORKAROUND_REPEAT_TLBI,
|
||||||
ERRATA_MIDR_RANGE_LIST(arm64_repeat_tlbi_cpus),
|
.type = ARM64_CPUCAP_LOCAL_CPU_ERRATUM,
|
||||||
|
.matches = cpucap_multi_entry_cap_matches,
|
||||||
|
.match_list = arm64_repeat_tlbi_list,
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_ARM64_ERRATUM_858921
|
#ifdef CONFIG_ARM64_ERRATUM_858921
|
||||||
@ -851,6 +913,19 @@ const struct arm64_cpu_capabilities arm64_errata[] = {
|
|||||||
.type = ARM64_CPUCAP_LOCAL_CPU_ERRATUM,
|
.type = ARM64_CPUCAP_LOCAL_CPU_ERRATUM,
|
||||||
.matches = has_cortex_a76_erratum_1463225,
|
.matches = has_cortex_a76_erratum_1463225,
|
||||||
},
|
},
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_CAVIUM_TX2_ERRATUM_219
|
||||||
|
{
|
||||||
|
.desc = "Cavium ThunderX2 erratum 219 (KVM guest sysreg trapping)",
|
||||||
|
.capability = ARM64_WORKAROUND_CAVIUM_TX2_219_TVM,
|
||||||
|
ERRATA_MIDR_RANGE_LIST(tx2_family_cpus),
|
||||||
|
.matches = needs_tx2_tvm_workaround,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.desc = "Cavium ThunderX2 erratum 219 (PRFM removal)",
|
||||||
|
.capability = ARM64_WORKAROUND_CAVIUM_TX2_219_PRFM,
|
||||||
|
ERRATA_MIDR_RANGE_LIST(tx2_family_cpus),
|
||||||
|
},
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -176,11 +176,16 @@ static const struct arm64_ftr_bits ftr_id_aa64pfr1[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const struct arm64_ftr_bits ftr_id_aa64zfr0[] = {
|
static const struct arm64_ftr_bits ftr_id_aa64zfr0[] = {
|
||||||
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_SM4_SHIFT, 4, 0),
|
ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
|
||||||
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_SHA3_SHIFT, 4, 0),
|
FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_SM4_SHIFT, 4, 0),
|
||||||
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_BITPERM_SHIFT, 4, 0),
|
ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
|
||||||
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_AES_SHIFT, 4, 0),
|
FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_SHA3_SHIFT, 4, 0),
|
||||||
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_SVEVER_SHIFT, 4, 0),
|
ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
|
||||||
|
FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_BITPERM_SHIFT, 4, 0),
|
||||||
|
ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
|
||||||
|
FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_AES_SHIFT, 4, 0),
|
||||||
|
ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
|
||||||
|
FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_SVEVER_SHIFT, 4, 0),
|
||||||
ARM64_FTR_END,
|
ARM64_FTR_END,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -604,7 +604,7 @@ el1_da:
|
|||||||
*/
|
*/
|
||||||
mrs x3, far_el1
|
mrs x3, far_el1
|
||||||
inherit_daif pstate=x23, tmp=x2
|
inherit_daif pstate=x23, tmp=x2
|
||||||
clear_address_tag x0, x3
|
untagged_addr x0, x3
|
||||||
mov x2, sp // struct pt_regs
|
mov x2, sp // struct pt_regs
|
||||||
bl do_mem_abort
|
bl do_mem_abort
|
||||||
|
|
||||||
@ -680,7 +680,7 @@ alternative_if ARM64_HAS_IRQ_PRIO_MASKING
|
|||||||
orr x24, x24, x0
|
orr x24, x24, x0
|
||||||
alternative_else_nop_endif
|
alternative_else_nop_endif
|
||||||
cbnz x24, 1f // preempt count != 0 || NMI return path
|
cbnz x24, 1f // preempt count != 0 || NMI return path
|
||||||
bl preempt_schedule_irq // irq en/disable is done inside
|
bl arm64_preempt_schedule_irq // irq en/disable is done inside
|
||||||
1:
|
1:
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -808,7 +808,7 @@ el0_da:
|
|||||||
mrs x26, far_el1
|
mrs x26, far_el1
|
||||||
ct_user_exit_irqoff
|
ct_user_exit_irqoff
|
||||||
enable_daif
|
enable_daif
|
||||||
clear_address_tag x0, x26
|
untagged_addr x0, x26
|
||||||
mov x1, x25
|
mov x1, x25
|
||||||
mov x2, sp
|
mov x2, sp
|
||||||
bl do_mem_abort
|
bl do_mem_abort
|
||||||
@ -1071,7 +1071,9 @@ alternative_insn isb, nop, ARM64_WORKAROUND_QCOM_FALKOR_E1003
|
|||||||
#else
|
#else
|
||||||
ldr x30, =vectors
|
ldr x30, =vectors
|
||||||
#endif
|
#endif
|
||||||
|
alternative_if_not ARM64_WORKAROUND_CAVIUM_TX2_219_PRFM
|
||||||
prfm plil1strm, [x30, #(1b - tramp_vectors)]
|
prfm plil1strm, [x30, #(1b - tramp_vectors)]
|
||||||
|
alternative_else_nop_endif
|
||||||
msr vbar_el1, x30
|
msr vbar_el1, x30
|
||||||
add x30, x30, #(1b - tramp_vectors)
|
add x30, x30, #(1b - tramp_vectors)
|
||||||
isb
|
isb
|
||||||
|
@ -201,6 +201,7 @@ static int create_safe_exec_page(void *src_start, size_t length,
|
|||||||
gfp_t mask)
|
gfp_t mask)
|
||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
pgd_t *trans_pgd;
|
||||||
pgd_t *pgdp;
|
pgd_t *pgdp;
|
||||||
pud_t *pudp;
|
pud_t *pudp;
|
||||||
pmd_t *pmdp;
|
pmd_t *pmdp;
|
||||||
@ -215,7 +216,13 @@ static int create_safe_exec_page(void *src_start, size_t length,
|
|||||||
memcpy((void *)dst, src_start, length);
|
memcpy((void *)dst, src_start, length);
|
||||||
__flush_icache_range(dst, dst + length);
|
__flush_icache_range(dst, dst + length);
|
||||||
|
|
||||||
pgdp = pgd_offset_raw(allocator(mask), dst_addr);
|
trans_pgd = allocator(mask);
|
||||||
|
if (!trans_pgd) {
|
||||||
|
rc = -ENOMEM;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
pgdp = pgd_offset_raw(trans_pgd, dst_addr);
|
||||||
if (pgd_none(READ_ONCE(*pgdp))) {
|
if (pgd_none(READ_ONCE(*pgdp))) {
|
||||||
pudp = allocator(mask);
|
pudp = allocator(mask);
|
||||||
if (!pudp) {
|
if (!pudp) {
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#include <linux/sched/task.h>
|
#include <linux/sched/task.h>
|
||||||
#include <linux/sched/task_stack.h>
|
#include <linux/sched/task_stack.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/lockdep.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/stddef.h>
|
#include <linux/stddef.h>
|
||||||
#include <linux/sysctl.h>
|
#include <linux/sysctl.h>
|
||||||
@ -44,6 +45,7 @@
|
|||||||
#include <asm/alternative.h>
|
#include <asm/alternative.h>
|
||||||
#include <asm/arch_gicv3.h>
|
#include <asm/arch_gicv3.h>
|
||||||
#include <asm/compat.h>
|
#include <asm/compat.h>
|
||||||
|
#include <asm/cpufeature.h>
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
#include <asm/exec.h>
|
#include <asm/exec.h>
|
||||||
#include <asm/fpsimd.h>
|
#include <asm/fpsimd.h>
|
||||||
@ -631,3 +633,19 @@ static int __init tagged_addr_init(void)
|
|||||||
|
|
||||||
core_initcall(tagged_addr_init);
|
core_initcall(tagged_addr_init);
|
||||||
#endif /* CONFIG_ARM64_TAGGED_ADDR_ABI */
|
#endif /* CONFIG_ARM64_TAGGED_ADDR_ABI */
|
||||||
|
|
||||||
|
asmlinkage void __sched arm64_preempt_schedule_irq(void)
|
||||||
|
{
|
||||||
|
lockdep_assert_irqs_disabled();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Preempting a task from an IRQ means we leave copies of PSTATE
|
||||||
|
* on the stack. cpufeature's enable calls may modify PSTATE, but
|
||||||
|
* resuming one of these preempted tasks would undo those changes.
|
||||||
|
*
|
||||||
|
* Only allow a task to be preempted once cpufeatures have been
|
||||||
|
* enabled.
|
||||||
|
*/
|
||||||
|
if (static_branch_likely(&arm64_const_caps_ready))
|
||||||
|
preempt_schedule_irq();
|
||||||
|
}
|
||||||
|
@ -124,6 +124,9 @@ static void __hyp_text __activate_traps(struct kvm_vcpu *vcpu)
|
|||||||
{
|
{
|
||||||
u64 hcr = vcpu->arch.hcr_el2;
|
u64 hcr = vcpu->arch.hcr_el2;
|
||||||
|
|
||||||
|
if (cpus_have_const_cap(ARM64_WORKAROUND_CAVIUM_TX2_219_TVM))
|
||||||
|
hcr |= HCR_TVM;
|
||||||
|
|
||||||
write_sysreg(hcr, hcr_el2);
|
write_sysreg(hcr, hcr_el2);
|
||||||
|
|
||||||
if (cpus_have_const_cap(ARM64_HAS_RAS_EXTN) && (hcr & HCR_VSE))
|
if (cpus_have_const_cap(ARM64_HAS_RAS_EXTN) && (hcr & HCR_VSE))
|
||||||
@ -174,8 +177,10 @@ static void __hyp_text __deactivate_traps(struct kvm_vcpu *vcpu)
|
|||||||
* the crucial bit is "On taking a vSError interrupt,
|
* the crucial bit is "On taking a vSError interrupt,
|
||||||
* HCR_EL2.VSE is cleared to 0."
|
* HCR_EL2.VSE is cleared to 0."
|
||||||
*/
|
*/
|
||||||
if (vcpu->arch.hcr_el2 & HCR_VSE)
|
if (vcpu->arch.hcr_el2 & HCR_VSE) {
|
||||||
vcpu->arch.hcr_el2 = read_sysreg(hcr_el2);
|
vcpu->arch.hcr_el2 &= ~HCR_VSE;
|
||||||
|
vcpu->arch.hcr_el2 |= read_sysreg(hcr_el2) & HCR_VSE;
|
||||||
|
}
|
||||||
|
|
||||||
if (has_vhe())
|
if (has_vhe())
|
||||||
deactivate_traps_vhe();
|
deactivate_traps_vhe();
|
||||||
@ -380,6 +385,61 @@ static bool __hyp_text __hyp_handle_fpsimd(struct kvm_vcpu *vcpu)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool __hyp_text handle_tx2_tvm(struct kvm_vcpu *vcpu)
|
||||||
|
{
|
||||||
|
u32 sysreg = esr_sys64_to_sysreg(kvm_vcpu_get_hsr(vcpu));
|
||||||
|
int rt = kvm_vcpu_sys_get_rt(vcpu);
|
||||||
|
u64 val = vcpu_get_reg(vcpu, rt);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The normal sysreg handling code expects to see the traps,
|
||||||
|
* let's not do anything here.
|
||||||
|
*/
|
||||||
|
if (vcpu->arch.hcr_el2 & HCR_TVM)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
switch (sysreg) {
|
||||||
|
case SYS_SCTLR_EL1:
|
||||||
|
write_sysreg_el1(val, SYS_SCTLR);
|
||||||
|
break;
|
||||||
|
case SYS_TTBR0_EL1:
|
||||||
|
write_sysreg_el1(val, SYS_TTBR0);
|
||||||
|
break;
|
||||||
|
case SYS_TTBR1_EL1:
|
||||||
|
write_sysreg_el1(val, SYS_TTBR1);
|
||||||
|
break;
|
||||||
|
case SYS_TCR_EL1:
|
||||||
|
write_sysreg_el1(val, SYS_TCR);
|
||||||
|
break;
|
||||||
|
case SYS_ESR_EL1:
|
||||||
|
write_sysreg_el1(val, SYS_ESR);
|
||||||
|
break;
|
||||||
|
case SYS_FAR_EL1:
|
||||||
|
write_sysreg_el1(val, SYS_FAR);
|
||||||
|
break;
|
||||||
|
case SYS_AFSR0_EL1:
|
||||||
|
write_sysreg_el1(val, SYS_AFSR0);
|
||||||
|
break;
|
||||||
|
case SYS_AFSR1_EL1:
|
||||||
|
write_sysreg_el1(val, SYS_AFSR1);
|
||||||
|
break;
|
||||||
|
case SYS_MAIR_EL1:
|
||||||
|
write_sysreg_el1(val, SYS_MAIR);
|
||||||
|
break;
|
||||||
|
case SYS_AMAIR_EL1:
|
||||||
|
write_sysreg_el1(val, SYS_AMAIR);
|
||||||
|
break;
|
||||||
|
case SYS_CONTEXTIDR_EL1:
|
||||||
|
write_sysreg_el1(val, SYS_CONTEXTIDR);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
__kvm_skip_instr(vcpu);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return true when we were able to fixup the guest exit and should return to
|
* Return true when we were able to fixup the guest exit and should return to
|
||||||
* the guest, false when we should restore the host state and return to the
|
* the guest, false when we should restore the host state and return to the
|
||||||
@ -399,6 +459,11 @@ static bool __hyp_text fixup_guest_exit(struct kvm_vcpu *vcpu, u64 *exit_code)
|
|||||||
if (*exit_code != ARM_EXCEPTION_TRAP)
|
if (*exit_code != ARM_EXCEPTION_TRAP)
|
||||||
goto exit;
|
goto exit;
|
||||||
|
|
||||||
|
if (cpus_have_const_cap(ARM64_WORKAROUND_CAVIUM_TX2_219_TVM) &&
|
||||||
|
kvm_vcpu_trap_get_class(vcpu) == ESR_ELx_EC_SYS64 &&
|
||||||
|
handle_tx2_tvm(vcpu))
|
||||||
|
return true;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We trap the first access to the FP/SIMD to save the host context
|
* We trap the first access to the FP/SIMD to save the host context
|
||||||
* and restore the guest context lazily.
|
* and restore the guest context lazily.
|
||||||
|
@ -632,6 +632,8 @@ static void reset_pmcr(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r)
|
|||||||
*/
|
*/
|
||||||
val = ((pmcr & ~ARMV8_PMU_PMCR_MASK)
|
val = ((pmcr & ~ARMV8_PMU_PMCR_MASK)
|
||||||
| (ARMV8_PMU_PMCR_MASK & 0xdecafbad)) & (~ARMV8_PMU_PMCR_E);
|
| (ARMV8_PMU_PMCR_MASK & 0xdecafbad)) & (~ARMV8_PMU_PMCR_E);
|
||||||
|
if (!system_supports_32bit_el0())
|
||||||
|
val |= ARMV8_PMU_PMCR_LC;
|
||||||
__vcpu_sys_reg(vcpu, r->reg) = val;
|
__vcpu_sys_reg(vcpu, r->reg) = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -682,6 +684,8 @@ static bool access_pmcr(struct kvm_vcpu *vcpu, struct sys_reg_params *p,
|
|||||||
val = __vcpu_sys_reg(vcpu, PMCR_EL0);
|
val = __vcpu_sys_reg(vcpu, PMCR_EL0);
|
||||||
val &= ~ARMV8_PMU_PMCR_MASK;
|
val &= ~ARMV8_PMU_PMCR_MASK;
|
||||||
val |= p->regval & ARMV8_PMU_PMCR_MASK;
|
val |= p->regval & ARMV8_PMU_PMCR_MASK;
|
||||||
|
if (!system_supports_32bit_el0())
|
||||||
|
val |= ARMV8_PMU_PMCR_LC;
|
||||||
__vcpu_sys_reg(vcpu, PMCR_EL0) = val;
|
__vcpu_sys_reg(vcpu, PMCR_EL0) = val;
|
||||||
kvm_pmu_handle_pmcr(vcpu, val);
|
kvm_pmu_handle_pmcr(vcpu, val);
|
||||||
kvm_vcpu_pmu_restore_guest(vcpu);
|
kvm_vcpu_pmu_restore_guest(vcpu);
|
||||||
|
@ -268,8 +268,12 @@ static bool __kprobes is_spurious_el1_translation_fault(unsigned long addr,
|
|||||||
par = read_sysreg(par_el1);
|
par = read_sysreg(par_el1);
|
||||||
local_irq_restore(flags);
|
local_irq_restore(flags);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we now have a valid translation, treat the translation fault as
|
||||||
|
* spurious.
|
||||||
|
*/
|
||||||
if (!(par & SYS_PAR_EL1_F))
|
if (!(par & SYS_PAR_EL1_F))
|
||||||
return false;
|
return true;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If we got a different type of fault from the AT instruction,
|
* If we got a different type of fault from the AT instruction,
|
||||||
|
@ -84,7 +84,7 @@ void __init prom_init(void)
|
|||||||
* Here we will start up CPU1 in the background and ask it to
|
* Here we will start up CPU1 in the background and ask it to
|
||||||
* reconfigure itself then go back to sleep.
|
* reconfigure itself then go back to sleep.
|
||||||
*/
|
*/
|
||||||
memcpy((void *)0xa0000200, &bmips_smp_movevec, 0x20);
|
memcpy((void *)0xa0000200, bmips_smp_movevec, 0x20);
|
||||||
__sync();
|
__sync();
|
||||||
set_c0_cause(C_SW0);
|
set_c0_cause(C_SW0);
|
||||||
cpumask_set_cpu(1, &bmips_booted_mask);
|
cpumask_set_cpu(1, &bmips_booted_mask);
|
||||||
|
@ -75,11 +75,11 @@ static inline int register_bmips_smp_ops(void)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
extern char bmips_reset_nmi_vec;
|
extern char bmips_reset_nmi_vec[];
|
||||||
extern char bmips_reset_nmi_vec_end;
|
extern char bmips_reset_nmi_vec_end[];
|
||||||
extern char bmips_smp_movevec;
|
extern char bmips_smp_movevec[];
|
||||||
extern char bmips_smp_int_vec;
|
extern char bmips_smp_int_vec[];
|
||||||
extern char bmips_smp_int_vec_end;
|
extern char bmips_smp_int_vec_end[];
|
||||||
|
|
||||||
extern int bmips_smp_enabled;
|
extern int bmips_smp_enabled;
|
||||||
extern int bmips_cpu_offset;
|
extern int bmips_cpu_offset;
|
||||||
|
@ -24,6 +24,8 @@
|
|||||||
|
|
||||||
#define VDSO_HAS_CLOCK_GETRES 1
|
#define VDSO_HAS_CLOCK_GETRES 1
|
||||||
|
|
||||||
|
#define __VDSO_USE_SYSCALL ULLONG_MAX
|
||||||
|
|
||||||
#ifdef CONFIG_MIPS_CLOCK_VSYSCALL
|
#ifdef CONFIG_MIPS_CLOCK_VSYSCALL
|
||||||
|
|
||||||
static __always_inline long gettimeofday_fallback(
|
static __always_inline long gettimeofday_fallback(
|
||||||
@ -205,7 +207,7 @@ static __always_inline u64 __arch_get_hw_counter(s32 clock_mode)
|
|||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
cycle_now = 0;
|
cycle_now = __VDSO_USE_SYSCALL;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -464,10 +464,10 @@ static void bmips_wr_vec(unsigned long dst, char *start, char *end)
|
|||||||
|
|
||||||
static inline void bmips_nmi_handler_setup(void)
|
static inline void bmips_nmi_handler_setup(void)
|
||||||
{
|
{
|
||||||
bmips_wr_vec(BMIPS_NMI_RESET_VEC, &bmips_reset_nmi_vec,
|
bmips_wr_vec(BMIPS_NMI_RESET_VEC, bmips_reset_nmi_vec,
|
||||||
&bmips_reset_nmi_vec_end);
|
bmips_reset_nmi_vec_end);
|
||||||
bmips_wr_vec(BMIPS_WARM_RESTART_VEC, &bmips_smp_int_vec,
|
bmips_wr_vec(BMIPS_WARM_RESTART_VEC, bmips_smp_int_vec,
|
||||||
&bmips_smp_int_vec_end);
|
bmips_smp_int_vec_end);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct reset_vec_info {
|
struct reset_vec_info {
|
||||||
|
@ -653,6 +653,13 @@ static void build_restore_pagemask(u32 **p, struct uasm_reloc **r,
|
|||||||
int restore_scratch)
|
int restore_scratch)
|
||||||
{
|
{
|
||||||
if (restore_scratch) {
|
if (restore_scratch) {
|
||||||
|
/*
|
||||||
|
* Ensure the MFC0 below observes the value written to the
|
||||||
|
* KScratch register by the prior MTC0.
|
||||||
|
*/
|
||||||
|
if (scratch_reg >= 0)
|
||||||
|
uasm_i_ehb(p);
|
||||||
|
|
||||||
/* Reset default page size */
|
/* Reset default page size */
|
||||||
if (PM_DEFAULT_MASK >> 16) {
|
if (PM_DEFAULT_MASK >> 16) {
|
||||||
uasm_i_lui(p, tmp, PM_DEFAULT_MASK >> 16);
|
uasm_i_lui(p, tmp, PM_DEFAULT_MASK >> 16);
|
||||||
@ -667,12 +674,10 @@ static void build_restore_pagemask(u32 **p, struct uasm_reloc **r,
|
|||||||
uasm_i_mtc0(p, 0, C0_PAGEMASK);
|
uasm_i_mtc0(p, 0, C0_PAGEMASK);
|
||||||
uasm_il_b(p, r, lid);
|
uasm_il_b(p, r, lid);
|
||||||
}
|
}
|
||||||
if (scratch_reg >= 0) {
|
if (scratch_reg >= 0)
|
||||||
uasm_i_ehb(p);
|
|
||||||
UASM_i_MFC0(p, 1, c0_kscratch(), scratch_reg);
|
UASM_i_MFC0(p, 1, c0_kscratch(), scratch_reg);
|
||||||
} else {
|
else
|
||||||
UASM_i_LW(p, 1, scratchpad_offset(0), 0);
|
UASM_i_LW(p, 1, scratchpad_offset(0), 0);
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
/* Reset default page size */
|
/* Reset default page size */
|
||||||
if (PM_DEFAULT_MASK >> 16) {
|
if (PM_DEFAULT_MASK >> 16) {
|
||||||
@ -921,6 +926,10 @@ build_get_pgd_vmalloc64(u32 **p, struct uasm_label **l, struct uasm_reloc **r,
|
|||||||
}
|
}
|
||||||
if (mode != not_refill && check_for_high_segbits) {
|
if (mode != not_refill && check_for_high_segbits) {
|
||||||
uasm_l_large_segbits_fault(l, *p);
|
uasm_l_large_segbits_fault(l, *p);
|
||||||
|
|
||||||
|
if (mode == refill_scratch && scratch_reg >= 0)
|
||||||
|
uasm_i_ehb(p);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We get here if we are an xsseg address, or if we are
|
* We get here if we are an xsseg address, or if we are
|
||||||
* an xuseg address above (PGDIR_SHIFT+PGDIR_BITS) boundary.
|
* an xuseg address above (PGDIR_SHIFT+PGDIR_BITS) boundary.
|
||||||
@ -939,12 +948,10 @@ build_get_pgd_vmalloc64(u32 **p, struct uasm_label **l, struct uasm_reloc **r,
|
|||||||
uasm_i_jr(p, ptr);
|
uasm_i_jr(p, ptr);
|
||||||
|
|
||||||
if (mode == refill_scratch) {
|
if (mode == refill_scratch) {
|
||||||
if (scratch_reg >= 0) {
|
if (scratch_reg >= 0)
|
||||||
uasm_i_ehb(p);
|
|
||||||
UASM_i_MFC0(p, 1, c0_kscratch(), scratch_reg);
|
UASM_i_MFC0(p, 1, c0_kscratch(), scratch_reg);
|
||||||
} else {
|
else
|
||||||
UASM_i_LW(p, 1, scratchpad_offset(0), 0);
|
UASM_i_LW(p, 1, scratchpad_offset(0), 0);
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
uasm_i_nop(p);
|
uasm_i_nop(p);
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
#define ARCH_DMA_MINALIGN L1_CACHE_BYTES
|
#define ARCH_DMA_MINALIGN L1_CACHE_BYTES
|
||||||
|
|
||||||
#define __read_mostly __attribute__((__section__(".data..read_mostly")))
|
#define __read_mostly __section(.data..read_mostly)
|
||||||
|
|
||||||
void parisc_cache_init(void); /* initializes cache-flushing */
|
void parisc_cache_init(void); /* initializes cache-flushing */
|
||||||
void disable_sr_hashing_asm(int); /* low level support for above */
|
void disable_sr_hashing_asm(int); /* low level support for above */
|
||||||
|
@ -52,7 +52,7 @@
|
|||||||
})
|
})
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
# define __lock_aligned __attribute__((__section__(".data..lock_aligned")))
|
# define __lock_aligned __section(.data..lock_aligned)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* __PARISC_LDCW_H */
|
#endif /* __PARISC_LDCW_H */
|
||||||
|
@ -2125,7 +2125,7 @@ ftrace_regs_caller:
|
|||||||
copy %rp, %r26
|
copy %rp, %r26
|
||||||
LDREG -FTRACE_FRAME_SIZE-PT_SZ_ALGN(%sp), %r25
|
LDREG -FTRACE_FRAME_SIZE-PT_SZ_ALGN(%sp), %r25
|
||||||
ldo -8(%r25), %r25
|
ldo -8(%r25), %r25
|
||||||
copy %r3, %arg2
|
ldo -FTRACE_FRAME_SIZE(%r1), %arg2
|
||||||
b,l ftrace_function_trampoline, %rp
|
b,l ftrace_function_trampoline, %rp
|
||||||
copy %r1, %arg3 /* struct pt_regs */
|
copy %r1, %arg3 /* struct pt_regs */
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
* arch/parisc/mm/ioremap.c
|
* arch/parisc/mm/ioremap.c
|
||||||
*
|
*
|
||||||
* (C) Copyright 1995 1996 Linus Torvalds
|
* (C) Copyright 1995 1996 Linus Torvalds
|
||||||
* (C) Copyright 2001-2006 Helge Deller <deller@gmx.de>
|
* (C) Copyright 2001-2019 Helge Deller <deller@gmx.de>
|
||||||
* (C) Copyright 2005 Kyle McMartin <kyle@parisc-linux.org>
|
* (C) Copyright 2005 Kyle McMartin <kyle@parisc-linux.org>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -84,7 +84,7 @@ void __iomem * __ioremap(unsigned long phys_addr, unsigned long size, unsigned l
|
|||||||
addr = (void __iomem *) area->addr;
|
addr = (void __iomem *) area->addr;
|
||||||
if (ioremap_page_range((unsigned long)addr, (unsigned long)addr + size,
|
if (ioremap_page_range((unsigned long)addr, (unsigned long)addr + size,
|
||||||
phys_addr, pgprot)) {
|
phys_addr, pgprot)) {
|
||||||
vfree(addr);
|
vunmap(addr);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,9 +92,11 @@ void __iomem * __ioremap(unsigned long phys_addr, unsigned long size, unsigned l
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(__ioremap);
|
EXPORT_SYMBOL(__ioremap);
|
||||||
|
|
||||||
void iounmap(const volatile void __iomem *addr)
|
void iounmap(const volatile void __iomem *io_addr)
|
||||||
{
|
{
|
||||||
if (addr > high_memory)
|
unsigned long addr = (unsigned long)io_addr & PAGE_MASK;
|
||||||
return vfree((void *) (PAGE_MASK & (unsigned long __force) addr));
|
|
||||||
|
if (is_vmalloc_addr((void *)addr))
|
||||||
|
vunmap((void *)addr);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(iounmap);
|
EXPORT_SYMBOL(iounmap);
|
||||||
|
@ -91,6 +91,7 @@
|
|||||||
|
|
||||||
static inline void kuap_update_sr(u32 sr, u32 addr, u32 end)
|
static inline void kuap_update_sr(u32 sr, u32 addr, u32 end)
|
||||||
{
|
{
|
||||||
|
addr &= 0xf0000000; /* align addr to start of segment */
|
||||||
barrier(); /* make sure thread.kuap is updated before playing with SRs */
|
barrier(); /* make sure thread.kuap is updated before playing with SRs */
|
||||||
while (addr < end) {
|
while (addr < end) {
|
||||||
mtsrin(sr, addr);
|
mtsrin(sr, addr);
|
||||||
|
@ -175,4 +175,7 @@ do { \
|
|||||||
ARCH_DLINFO_CACHE_GEOMETRY; \
|
ARCH_DLINFO_CACHE_GEOMETRY; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
/* Relocate the kernel image to @final_address */
|
||||||
|
void relocate(unsigned long final_address);
|
||||||
|
|
||||||
#endif /* _ASM_POWERPC_ELF_H */
|
#endif /* _ASM_POWERPC_ELF_H */
|
||||||
|
@ -3249,7 +3249,20 @@ static void setup_secure_guest(unsigned long kbase, unsigned long fdt)
|
|||||||
/* Switch to secure mode. */
|
/* Switch to secure mode. */
|
||||||
prom_printf("Switching to secure mode.\n");
|
prom_printf("Switching to secure mode.\n");
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The ultravisor will do an integrity check of the kernel image but we
|
||||||
|
* relocated it so the check will fail. Restore the original image by
|
||||||
|
* relocating it back to the kernel virtual base address.
|
||||||
|
*/
|
||||||
|
if (IS_ENABLED(CONFIG_RELOCATABLE))
|
||||||
|
relocate(KERNELBASE);
|
||||||
|
|
||||||
ret = enter_secure_mode(kbase, fdt);
|
ret = enter_secure_mode(kbase, fdt);
|
||||||
|
|
||||||
|
/* Relocate the kernel again. */
|
||||||
|
if (IS_ENABLED(CONFIG_RELOCATABLE))
|
||||||
|
relocate(kbase);
|
||||||
|
|
||||||
if (ret != U_SUCCESS) {
|
if (ret != U_SUCCESS) {
|
||||||
prom_printf("Returned %d from switching to secure mode.\n", ret);
|
prom_printf("Returned %d from switching to secure mode.\n", ret);
|
||||||
prom_rtas_os_term("Switch to secure mode failed.\n");
|
prom_rtas_os_term("Switch to secure mode failed.\n");
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user