Commit 4f05e820 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'loongarch-6.10' of...

Merge tag 'loongarch-6.10' of git://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson

Pull LoongArch updates from Huacai Chen:

 - Select some options in Kconfig

 - Give a chance to build with !CONFIG_SMP

 - Switch to use built-in rustc target

 - Add new supported device nodes to dts

 - Some bug fixes and other small changes

 - Update the default config file

* tag 'loongarch-6.10' of git://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson:
  LoongArch: Update Loongson-3 default config file
  LoongArch: dts: Add new supported device nodes to Loongson-2K2000
  LoongArch: dts: Add new supported device nodes to Loongson-2K0500
  LoongArch: dts: Remove "disabled" state of clock controller node
  LoongArch: rust: Switch to use built-in rustc target
  LoongArch: Fix callchain parse error with kernel tracepoint events again
  LoongArch: Give a chance to build with !CONFIG_SMP
  LoongArch: Select THP_SWAP if HAVE_ARCH_TRANSPARENT_HUGEPAGE
  LoongArch: Select ARCH_WANT_DEFAULT_BPF_JIT
  LoongArch: Select ARCH_SUPPORTS_INT128 if CC_HAS_INT128
  LoongArch: Select ARCH_HAS_FAST_MULTIPLIER
parents f33fda22 9cc1df42
...@@ -16,6 +16,7 @@ config LOONGARCH ...@@ -16,6 +16,7 @@ config LOONGARCH
select ARCH_HAS_ACPI_TABLE_UPGRADE if ACPI select ARCH_HAS_ACPI_TABLE_UPGRADE if ACPI
select ARCH_HAS_CPU_FINALIZE_INIT select ARCH_HAS_CPU_FINALIZE_INIT
select ARCH_HAS_CURRENT_STACK_POINTER select ARCH_HAS_CURRENT_STACK_POINTER
select ARCH_HAS_FAST_MULTIPLIER
select ARCH_HAS_FORTIFY_SOURCE select ARCH_HAS_FORTIFY_SOURCE
select ARCH_HAS_KCOV select ARCH_HAS_KCOV
select ARCH_HAS_NMI_SAFE_THIS_CPU_OPS select ARCH_HAS_NMI_SAFE_THIS_CPU_OPS
...@@ -56,6 +57,7 @@ config LOONGARCH ...@@ -56,6 +57,7 @@ config LOONGARCH
select ARCH_SUPPORTS_ACPI select ARCH_SUPPORTS_ACPI
select ARCH_SUPPORTS_ATOMIC_RMW select ARCH_SUPPORTS_ATOMIC_RMW
select ARCH_SUPPORTS_HUGETLBFS select ARCH_SUPPORTS_HUGETLBFS
select ARCH_SUPPORTS_INT128 if CC_HAS_INT128
select ARCH_SUPPORTS_LTO_CLANG select ARCH_SUPPORTS_LTO_CLANG
select ARCH_SUPPORTS_LTO_CLANG_THIN select ARCH_SUPPORTS_LTO_CLANG_THIN
select ARCH_SUPPORTS_NUMA_BALANCING select ARCH_SUPPORTS_NUMA_BALANCING
...@@ -63,10 +65,12 @@ config LOONGARCH ...@@ -63,10 +65,12 @@ config LOONGARCH
select ARCH_USE_CMPXCHG_LOCKREF select ARCH_USE_CMPXCHG_LOCKREF
select ARCH_USE_QUEUED_RWLOCKS select ARCH_USE_QUEUED_RWLOCKS
select ARCH_USE_QUEUED_SPINLOCKS select ARCH_USE_QUEUED_SPINLOCKS
select ARCH_WANT_DEFAULT_BPF_JIT
select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT
select ARCH_WANT_LD_ORPHAN_WARN select ARCH_WANT_LD_ORPHAN_WARN
select ARCH_WANT_OPTIMIZE_HUGETLB_VMEMMAP select ARCH_WANT_OPTIMIZE_HUGETLB_VMEMMAP
select ARCH_WANTS_NO_INSTR select ARCH_WANTS_NO_INSTR
select ARCH_WANTS_THP_SWAP if HAVE_ARCH_TRANSPARENT_HUGEPAGE
select BUILDTIME_TABLE_SORT select BUILDTIME_TABLE_SORT
select COMMON_CLK select COMMON_CLK
select CPU_PM select CPU_PM
...@@ -174,7 +178,6 @@ config LOONGARCH ...@@ -174,7 +178,6 @@ config LOONGARCH
select PCI_QUIRKS select PCI_QUIRKS
select PERF_USE_VMALLOC select PERF_USE_VMALLOC
select RTC_LIB select RTC_LIB
select SMP
select SPARSE_IRQ select SPARSE_IRQ
select SYSCTL_ARCH_UNALIGN_ALLOW select SYSCTL_ARCH_UNALIGN_ALLOW
select SYSCTL_ARCH_UNALIGN_NO_WARN select SYSCTL_ARCH_UNALIGN_NO_WARN
...@@ -420,6 +423,7 @@ config EFI_STUB ...@@ -420,6 +423,7 @@ config EFI_STUB
config SCHED_SMT config SCHED_SMT
bool "SMT scheduler support" bool "SMT scheduler support"
depends on SMP
default y default y
help help
Improves scheduler's performance when there are multiple Improves scheduler's performance when there are multiple
......
...@@ -101,7 +101,7 @@ ifdef CONFIG_OBJTOOL ...@@ -101,7 +101,7 @@ ifdef CONFIG_OBJTOOL
KBUILD_CFLAGS += -fno-jump-tables KBUILD_CFLAGS += -fno-jump-tables
endif endif
KBUILD_RUSTFLAGS += --target=$(objtree)/scripts/target.json KBUILD_RUSTFLAGS += --target=loongarch64-unknown-none-softfloat
KBUILD_RUSTFLAGS_MODULE += -Crelocation-model=pic KBUILD_RUSTFLAGS_MODULE += -Crelocation-model=pic
ifeq ($(CONFIG_RELOCATABLE),y) ifeq ($(CONFIG_RELOCATABLE),y)
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
/dts-v1/; /dts-v1/;
#include <dt-bindings/interrupt-controller/irq.h> #include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/clock/loongson,ls2k-clk.h>
/ { / {
#address-cells = <2>; #address-cells = <2>;
...@@ -19,14 +20,15 @@ cpu0: cpu@0 { ...@@ -19,14 +20,15 @@ cpu0: cpu@0 {
compatible = "loongson,la264"; compatible = "loongson,la264";
device_type = "cpu"; device_type = "cpu";
reg = <0x0>; reg = <0x0>;
clocks = <&cpu_clk>; clocks = <&clk LOONGSON2_NODE_CLK>;
}; };
}; };
cpu_clk: cpu-clk { ref_100m: clock-ref-100m {
compatible = "fixed-clock"; compatible = "fixed-clock";
#clock-cells = <0>; #clock-cells = <0>;
clock-frequency = <500000000>; clock-frequency = <100000000>;
clock-output-names = "ref_100m";
}; };
cpuintc: interrupt-controller { cpuintc: interrupt-controller {
...@@ -35,6 +37,28 @@ cpuintc: interrupt-controller { ...@@ -35,6 +37,28 @@ cpuintc: interrupt-controller {
interrupt-controller; interrupt-controller;
}; };
thermal-zones {
cpu-thermal {
polling-delay-passive = <1000>;
polling-delay = <5000>;
thermal-sensors = <&tsensor 0>;
trips {
cpu-alert {
temperature = <33000>;
hysteresis = <2000>;
type = "active";
};
cpu-crit {
temperature = <85000>;
hysteresis = <5000>;
type = "critical";
};
};
};
};
bus@10000000 { bus@10000000 {
compatible = "simple-bus"; compatible = "simple-bus";
ranges = <0x0 0x10000000 0x0 0x10000000 0x0 0x10000000>, ranges = <0x0 0x10000000 0x0 0x10000000 0x0 0x10000000>,
...@@ -52,6 +76,54 @@ isa@16400000 { ...@@ -52,6 +76,54 @@ isa@16400000 {
ranges = <1 0x0 0x0 0x16400000 0x4000>; ranges = <1 0x0 0x0 0x16400000 0x4000>;
}; };
clk: clock-controller@1fe10400 {
compatible = "loongson,ls2k0500-clk";
reg = <0x0 0x1fe10400 0x0 0x2c>;
#clock-cells = <1>;
clocks = <&ref_100m>;
clock-names = "ref_100m";
};
dma-controller@1fe10c00 {
compatible = "loongson,ls2k0500-apbdma", "loongson,ls2k1000-apbdma";
reg = <0 0x1fe10c00 0 0x8>;
interrupt-parent = <&eiointc>;
interrupts = <67>;
clocks = <&clk LOONGSON2_APB_CLK>;
#dma-cells = <1>;
status = "disabled";
};
dma-controller@1fe10c10 {
compatible = "loongson,ls2k0500-apbdma", "loongson,ls2k1000-apbdma";
reg = <0 0x1fe10c10 0 0x8>;
interrupt-parent = <&eiointc>;
interrupts = <68>;
clocks = <&clk LOONGSON2_APB_CLK>;
#dma-cells = <1>;
status = "disabled";
};
dma-controller@1fe10c20 {
compatible = "loongson,ls2k0500-apbdma", "loongson,ls2k1000-apbdma";
reg = <0 0x1fe10c20 0 0x8>;
interrupt-parent = <&eiointc>;
interrupts = <69>;
clocks = <&clk LOONGSON2_APB_CLK>;
#dma-cells = <1>;
status = "disabled";
};
dma-controller@1fe10c30 {
compatible = "loongson,ls2k0500-apbdma", "loongson,ls2k1000-apbdma";
reg = <0 0x1fe10c30 0 0x8>;
interrupt-parent = <&eiointc>;
interrupts = <70>;
clocks = <&clk LOONGSON2_APB_CLK>;
#dma-cells = <1>;
status = "disabled";
};
liointc0: interrupt-controller@1fe11400 { liointc0: interrupt-controller@1fe11400 {
compatible = "loongson,liointc-2.0"; compatible = "loongson,liointc-2.0";
reg = <0x0 0x1fe11400 0x0 0x40>, reg = <0x0 0x1fe11400 0x0 0x40>,
...@@ -139,6 +211,14 @@ ohci0: usb@1f058000 { ...@@ -139,6 +211,14 @@ ohci0: usb@1f058000 {
status = "disabled"; status = "disabled";
}; };
tsensor: thermal-sensor@1fe11500 {
compatible = "loongson,ls2k0500-thermal", "loongson,ls2k1000-thermal";
reg = <0x0 0x1fe11500 0x0 0x30>;
interrupt-parent = <&liointc0>;
interrupts = <7 IRQ_TYPE_LEVEL_HIGH>;
#thermal-sensor-cells = <1>;
};
uart0: serial@1ff40800 { uart0: serial@1ff40800 {
compatible = "ns16550a"; compatible = "ns16550a";
reg = <0x0 0x1ff40800 0x0 0x10>; reg = <0x0 0x1ff40800 0x0 0x10>;
......
...@@ -113,10 +113,6 @@ &uart0 { ...@@ -113,10 +113,6 @@ &uart0 {
status = "okay"; status = "okay";
}; };
&clk {
status = "okay";
};
&rtc0 { &rtc0 {
status = "okay"; status = "okay";
}; };
......
...@@ -159,7 +159,6 @@ clk: clock-controller@1fe00480 { ...@@ -159,7 +159,6 @@ clk: clock-controller@1fe00480 {
#clock-cells = <1>; #clock-cells = <1>;
clocks = <&ref_100m>; clocks = <&ref_100m>;
clock-names = "ref_100m"; clock-names = "ref_100m";
status = "disabled";
}; };
gpio0: gpio@1fe00500 { gpio0: gpio@1fe00500 {
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
/dts-v1/; /dts-v1/;
#include <dt-bindings/interrupt-controller/irq.h> #include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/clock/loongson,ls2k-clk.h>
/ { / {
#address-cells = <2>; #address-cells = <2>;
...@@ -19,21 +20,22 @@ cpu0: cpu@1 { ...@@ -19,21 +20,22 @@ cpu0: cpu@1 {
compatible = "loongson,la364"; compatible = "loongson,la364";
device_type = "cpu"; device_type = "cpu";
reg = <0x0>; reg = <0x0>;
clocks = <&cpu_clk>; clocks = <&clk LOONGSON2_NODE_CLK>;
}; };
cpu1: cpu@2 { cpu1: cpu@2 {
compatible = "loongson,la364"; compatible = "loongson,la364";
device_type = "cpu"; device_type = "cpu";
reg = <0x1>; reg = <0x1>;
clocks = <&cpu_clk>; clocks = <&clk LOONGSON2_NODE_CLK>;
}; };
}; };
cpu_clk: cpu-clk { ref_100m: clock-ref-100m {
compatible = "fixed-clock"; compatible = "fixed-clock";
#clock-cells = <0>; #clock-cells = <0>;
clock-frequency = <1400000000>; clock-frequency = <100000000>;
clock-output-names = "ref_100m";
}; };
cpuintc: interrupt-controller { cpuintc: interrupt-controller {
...@@ -42,6 +44,28 @@ cpuintc: interrupt-controller { ...@@ -42,6 +44,28 @@ cpuintc: interrupt-controller {
interrupt-controller; interrupt-controller;
}; };
thermal-zones {
cpu-thermal {
polling-delay-passive = <1000>;
polling-delay = <5000>;
thermal-sensors = <&tsensor 0>;
trips {
cpu-alert {
temperature = <40000>;
hysteresis = <2000>;
type = "active";
};
cpu-crit {
temperature = <85000>;
hysteresis = <5000>;
type = "critical";
};
};
};
};
bus@10000000 { bus@10000000 {
compatible = "simple-bus"; compatible = "simple-bus";
ranges = <0x0 0x10000000 0x0 0x10000000 0x0 0x10000000>, ranges = <0x0 0x10000000 0x0 0x10000000 0x0 0x10000000>,
...@@ -58,6 +82,14 @@ isa@18400000 { ...@@ -58,6 +82,14 @@ isa@18400000 {
ranges = <1 0x0 0x0 0x18400000 0x4000>; ranges = <1 0x0 0x0 0x18400000 0x4000>;
}; };
clk: clock-controller@10010480 {
compatible = "loongson,ls2k2000-clk";
reg = <0x0 0x10010480 0x0 0x100>;
#clock-cells = <1>;
clocks = <&ref_100m>;
clock-names = "ref_100m";
};
pmc: power-management@100d0000 { pmc: power-management@100d0000 {
compatible = "loongson,ls2k2000-pmc", "loongson,ls2k0500-pmc", "syscon"; compatible = "loongson,ls2k2000-pmc", "loongson,ls2k0500-pmc", "syscon";
reg = <0x0 0x100d0000 0x0 0x58>; reg = <0x0 0x100d0000 0x0 0x58>;
...@@ -80,6 +112,15 @@ syscon-poweroff { ...@@ -80,6 +112,15 @@ syscon-poweroff {
}; };
}; };
tsensor: thermal-sensor@1fe01460 {
compatible = "loongson,ls2k2000-thermal";
reg = <0x0 0x1fe01460 0x0 0x30>,
<0x0 0x1fe0019c 0x0 0x4>;
interrupt-parent = <&liointc>;
interrupts = <7 IRQ_TYPE_LEVEL_HIGH>;
#thermal-sensor-cells = <1>;
};
liointc: interrupt-controller@1fe01400 { liointc: interrupt-controller@1fe01400 {
compatible = "loongson,liointc-1.0"; compatible = "loongson,liointc-1.0";
reg = <0x0 0x1fe01400 0x0 0x64>; reg = <0x0 0x1fe01400 0x0 0x64>;
......
...@@ -14,6 +14,10 @@ CONFIG_TASKSTATS=y ...@@ -14,6 +14,10 @@ CONFIG_TASKSTATS=y
CONFIG_TASK_DELAY_ACCT=y CONFIG_TASK_DELAY_ACCT=y
CONFIG_TASK_XACCT=y CONFIG_TASK_XACCT=y
CONFIG_TASK_IO_ACCOUNTING=y CONFIG_TASK_IO_ACCOUNTING=y
CONFIG_PSI=y
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_IKHEADERS=y
CONFIG_LOG_BUF_SHIFT=18 CONFIG_LOG_BUF_SHIFT=18
CONFIG_NUMA_BALANCING=y CONFIG_NUMA_BALANCING=y
CONFIG_MEMCG=y CONFIG_MEMCG=y
...@@ -129,13 +133,22 @@ CONFIG_IP_MROUTE=y ...@@ -129,13 +133,22 @@ CONFIG_IP_MROUTE=y
CONFIG_IP_MROUTE_MULTIPLE_TABLES=y CONFIG_IP_MROUTE_MULTIPLE_TABLES=y
CONFIG_IP_PIMSM_V1=y CONFIG_IP_PIMSM_V1=y
CONFIG_IP_PIMSM_V2=y CONFIG_IP_PIMSM_V2=y
CONFIG_INET_AH=m
CONFIG_INET_ESP=m CONFIG_INET_ESP=m
CONFIG_INET_ESP_OFFLOAD=m
CONFIG_INET_ESPINTCP=y
CONFIG_INET_IPCOMP=m
CONFIG_INET_UDP_DIAG=y CONFIG_INET_UDP_DIAG=y
CONFIG_TCP_CONG_ADVANCED=y CONFIG_TCP_CONG_ADVANCED=y
CONFIG_TCP_CONG_BBR=m CONFIG_TCP_CONG_BBR=m
CONFIG_IPV6_ROUTER_PREF=y CONFIG_IPV6_ROUTER_PREF=y
CONFIG_IPV6_ROUTE_INFO=y CONFIG_IPV6_ROUTE_INFO=y
CONFIG_INET6_AH=m
CONFIG_INET6_ESP=m CONFIG_INET6_ESP=m
CONFIG_INET6_ESP_OFFLOAD=m
CONFIG_INET6_ESPINTCP=y
CONFIG_INET6_IPCOMP=m
CONFIG_IPV6_MULTIPLE_TABLES=y
CONFIG_IPV6_MROUTE=y CONFIG_IPV6_MROUTE=y
CONFIG_MPTCP=y CONFIG_MPTCP=y
CONFIG_NETWORK_PHY_TIMESTAMPING=y CONFIG_NETWORK_PHY_TIMESTAMPING=y
...@@ -151,6 +164,8 @@ CONFIG_NF_CONNTRACK_PPTP=m ...@@ -151,6 +164,8 @@ CONFIG_NF_CONNTRACK_PPTP=m
CONFIG_NF_CONNTRACK_TFTP=m CONFIG_NF_CONNTRACK_TFTP=m
CONFIG_NF_CT_NETLINK=m CONFIG_NF_CT_NETLINK=m
CONFIG_NF_TABLES=m CONFIG_NF_TABLES=m
CONFIG_NF_TABLES_INET=y
CONFIG_NFT_CT=m
CONFIG_NFT_CONNLIMIT=m CONFIG_NFT_CONNLIMIT=m
CONFIG_NFT_LOG=m CONFIG_NFT_LOG=m
CONFIG_NFT_LIMIT=m CONFIG_NFT_LIMIT=m
...@@ -163,6 +178,7 @@ CONFIG_NFT_QUOTA=m ...@@ -163,6 +178,7 @@ CONFIG_NFT_QUOTA=m
CONFIG_NFT_REJECT=m CONFIG_NFT_REJECT=m
CONFIG_NFT_COMPAT=m CONFIG_NFT_COMPAT=m
CONFIG_NFT_HASH=m CONFIG_NFT_HASH=m
CONFIG_NFT_FIB_INET=m
CONFIG_NFT_SOCKET=m CONFIG_NFT_SOCKET=m
CONFIG_NFT_OSF=m CONFIG_NFT_OSF=m
CONFIG_NFT_TPROXY=m CONFIG_NFT_TPROXY=m
...@@ -259,6 +275,7 @@ CONFIG_IP_NF_ARPTABLES=m ...@@ -259,6 +275,7 @@ CONFIG_IP_NF_ARPTABLES=m
CONFIG_IP_NF_ARPFILTER=m CONFIG_IP_NF_ARPFILTER=m
CONFIG_IP_NF_ARP_MANGLE=m CONFIG_IP_NF_ARP_MANGLE=m
CONFIG_NF_TABLES_IPV6=y CONFIG_NF_TABLES_IPV6=y
CONFIG_NFT_FIB_IPV6=m
CONFIG_IP6_NF_IPTABLES=y CONFIG_IP6_NF_IPTABLES=y
CONFIG_IP6_NF_MATCH_AH=m CONFIG_IP6_NF_MATCH_AH=m
CONFIG_IP6_NF_MATCH_EUI64=m CONFIG_IP6_NF_MATCH_EUI64=m
...@@ -279,6 +296,7 @@ CONFIG_IP6_NF_NAT=m ...@@ -279,6 +296,7 @@ CONFIG_IP6_NF_NAT=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m CONFIG_IP6_NF_TARGET_MASQUERADE=m
CONFIG_IP6_NF_TARGET_NPT=m CONFIG_IP6_NF_TARGET_NPT=m
CONFIG_NF_TABLES_BRIDGE=m CONFIG_NF_TABLES_BRIDGE=m
CONFIG_NF_CONNTRACK_BRIDGE=m
CONFIG_BRIDGE_NF_EBTABLES=m CONFIG_BRIDGE_NF_EBTABLES=m
CONFIG_BRIDGE_EBT_BROUTE=m CONFIG_BRIDGE_EBT_BROUTE=m
CONFIG_BRIDGE_EBT_T_FILTER=m CONFIG_BRIDGE_EBT_T_FILTER=m
...@@ -549,6 +567,7 @@ CONFIG_NGBE=y ...@@ -549,6 +567,7 @@ CONFIG_NGBE=y
CONFIG_TXGBE=y CONFIG_TXGBE=y
# CONFIG_NET_VENDOR_WIZNET is not set # CONFIG_NET_VENDOR_WIZNET is not set
# CONFIG_NET_VENDOR_XILINX is not set # CONFIG_NET_VENDOR_XILINX is not set
CONFIG_MOTORCOMM_PHY=y
CONFIG_PPP=m CONFIG_PPP=m
CONFIG_PPP_BSDCOMP=m CONFIG_PPP_BSDCOMP=m
CONFIG_PPP_DEFLATE=m CONFIG_PPP_DEFLATE=m
...@@ -810,6 +829,7 @@ CONFIG_NTB_SWITCHTEC=m ...@@ -810,6 +829,7 @@ CONFIG_NTB_SWITCHTEC=m
CONFIG_NTB_PERF=m CONFIG_NTB_PERF=m
CONFIG_NTB_TRANSPORT=m CONFIG_NTB_TRANSPORT=m
CONFIG_PWM=y CONFIG_PWM=y
CONFIG_GENERIC_PHY=y
CONFIG_USB4=y CONFIG_USB4=y
CONFIG_EXT2_FS=y CONFIG_EXT2_FS=y
CONFIG_EXT2_FS_XATTR=y CONFIG_EXT2_FS_XATTR=y
...@@ -875,10 +895,13 @@ CONFIG_UBIFS_FS=m ...@@ -875,10 +895,13 @@ CONFIG_UBIFS_FS=m
CONFIG_UBIFS_FS_ADVANCED_COMPR=y CONFIG_UBIFS_FS_ADVANCED_COMPR=y
CONFIG_CRAMFS=m CONFIG_CRAMFS=m
CONFIG_SQUASHFS=y CONFIG_SQUASHFS=y
CONFIG_SQUASHFS_FILE_DIRECT=y
CONFIG_SQUASHFS_CHOICE_DECOMP_BY_MOUNT=y
CONFIG_SQUASHFS_XATTR=y CONFIG_SQUASHFS_XATTR=y
CONFIG_SQUASHFS_LZ4=y CONFIG_SQUASHFS_LZ4=y
CONFIG_SQUASHFS_LZO=y CONFIG_SQUASHFS_LZO=y
CONFIG_SQUASHFS_XZ=y CONFIG_SQUASHFS_XZ=y
CONFIG_SQUASHFS_ZSTD=y
CONFIG_MINIX_FS=m CONFIG_MINIX_FS=m
CONFIG_ROMFS_FS=m CONFIG_ROMFS_FS=m
CONFIG_PSTORE=m CONFIG_PSTORE=m
...@@ -960,3 +983,4 @@ CONFIG_DEBUG_FS=y ...@@ -960,3 +983,4 @@ CONFIG_DEBUG_FS=y
CONFIG_SCHEDSTATS=y CONFIG_SCHEDSTATS=y
# CONFIG_DEBUG_PREEMPT is not set # CONFIG_DEBUG_PREEMPT is not set
# CONFIG_FTRACE is not set # CONFIG_FTRACE is not set
CONFIG_UNWINDER_ORC=y
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#ifndef _ASM_LOONGARCH_ACPI_H #ifndef _ASM_LOONGARCH_ACPI_H
#define _ASM_LOONGARCH_ACPI_H #define _ASM_LOONGARCH_ACPI_H
#include <asm/smp.h>
#include <asm/suspend.h> #include <asm/suspend.h>
#ifdef CONFIG_ACPI #ifdef CONFIG_ACPI
......
...@@ -6,3 +6,9 @@ ...@@ -6,3 +6,9 @@
#include <asm/page.h> #include <asm/page.h>
#include <asm/ftrace.h> #include <asm/ftrace.h>
#include <asm-generic/asm-prototypes.h> #include <asm-generic/asm-prototypes.h>
#ifdef CONFIG_ARCH_SUPPORTS_INT128
__int128_t __ashlti3(__int128_t a, int b);
__int128_t __ashrti3(__int128_t a, int b);
__int128_t __lshrti3(__int128_t a, int b);
#endif
...@@ -13,8 +13,7 @@ ...@@ -13,8 +13,7 @@
#define perf_arch_fetch_caller_regs(regs, __ip) { \ #define perf_arch_fetch_caller_regs(regs, __ip) { \
(regs)->csr_era = (__ip); \ (regs)->csr_era = (__ip); \
(regs)->regs[3] = current_stack_pointer; \ (regs)->regs[3] = (unsigned long) __builtin_frame_address(0); \
(regs)->regs[22] = (unsigned long) __builtin_frame_address(0); \
} }
#endif /* __LOONGARCH_PERF_EVENT_H__ */ #endif /* __LOONGARCH_PERF_EVENT_H__ */
...@@ -6,6 +6,8 @@ ...@@ -6,6 +6,8 @@
#ifndef __ASM_SMP_H #ifndef __ASM_SMP_H
#define __ASM_SMP_H #define __ASM_SMP_H
#ifdef CONFIG_SMP
#include <linux/atomic.h> #include <linux/atomic.h>
#include <linux/bitops.h> #include <linux/bitops.h>
#include <linux/linkage.h> #include <linux/linkage.h>
...@@ -109,4 +111,8 @@ static inline void __cpu_die(unsigned int cpu) ...@@ -109,4 +111,8 @@ static inline void __cpu_die(unsigned int cpu)
} }
#endif #endif
#else /* !CONFIG_SMP */
#define cpu_logical_map(cpu) 0
#endif /* CONFIG_SMP */
#endif /* __ASM_SMP_H */ #endif /* __ASM_SMP_H */
...@@ -225,6 +225,7 @@ void crash_smp_send_stop(void) ...@@ -225,6 +225,7 @@ void crash_smp_send_stop(void)
void machine_shutdown(void) void machine_shutdown(void)
{ {
#ifdef CONFIG_SMP
int cpu; int cpu;
/* All CPUs go to reboot_code_buffer */ /* All CPUs go to reboot_code_buffer */
...@@ -232,7 +233,6 @@ void machine_shutdown(void) ...@@ -232,7 +233,6 @@ void machine_shutdown(void)
if (!cpu_online(cpu)) if (!cpu_online(cpu))
cpu_device_up(get_cpu_device(cpu)); cpu_device_up(get_cpu_device(cpu));
#ifdef CONFIG_SMP
smp_call_function(kexec_shutdown_secondary, NULL, 0); smp_call_function(kexec_shutdown_secondary, NULL, 0);
#endif #endif
} }
......
...@@ -6,6 +6,8 @@ ...@@ -6,6 +6,8 @@
lib-y += delay.o memset.o memcpy.o memmove.o \ lib-y += delay.o memset.o memcpy.o memmove.o \
clear_user.o copy_user.o csum.o dump_tlb.o unaligned.o clear_user.o copy_user.o csum.o dump_tlb.o unaligned.o
obj-$(CONFIG_ARCH_SUPPORTS_INT128) += tishift.o
obj-$(CONFIG_CPU_HAS_LSX) += xor_simd.o xor_simd_glue.o obj-$(CONFIG_CPU_HAS_LSX) += xor_simd.o xor_simd_glue.o
obj-$(CONFIG_FUNCTION_ERROR_INJECTION) += error-inject.o obj-$(CONFIG_FUNCTION_ERROR_INJECTION) += error-inject.o
/* SPDX-License-Identifier: GPL-2.0-only */
#include <asm/asmmacro.h>
#include <linux/export.h>
#include <linux/linkage.h>
SYM_FUNC_START(__ashlti3)
srli.d t2, a0, 1
nor t3, zero, a2
sll.d t1, a1, a2
srl.d t2, t2, t3
andi t0, a2, 64
sll.d a0, a0, a2
or t1, t2, t1
maskeqz a1, a0, t0
masknez a0, a0, t0
masknez t0, t1, t0
or a1, t0, a1
jr ra
SYM_FUNC_END(__ashlti3)
EXPORT_SYMBOL(__ashlti3)
SYM_FUNC_START(__ashrti3)
nor t3, zero, a2
slli.d t2, a1, 1
srl.d t1, a0, a2
sll.d t2, t2, t3
andi t0, a2, 64
or t1, t2, t1
sra.d a2, a1, a2
srai.d a1, a1, 63
maskeqz a0, a2, t0
maskeqz a1, a1, t0
masknez a2, a2, t0
masknez t0, t1, t0
or a1, a1, a2
or a0, t0, a0
jr ra
SYM_FUNC_END(__ashrti3)
EXPORT_SYMBOL(__ashrti3)
SYM_FUNC_START(__lshrti3)
slli.d t2, a1, 1
nor t3, zero, a2
srl.d t1, a0, a2
sll.d t2, t2, t3
andi t0, a2, 64
srl.d a1, a1, a2
or t1, t2, t1
maskeqz a0, a1, t0
masknez a1, a1, t0
masknez t0, t1, t0
or a0, t0, a0
jr ra
SYM_FUNC_END(__lshrti3)
EXPORT_SYMBOL(__lshrti3)
...@@ -125,6 +125,8 @@ vmalloc_load: ...@@ -125,6 +125,8 @@ vmalloc_load:
tlb_huge_update_load: tlb_huge_update_load:
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
ll.d ra, t1, 0 ll.d ra, t1, 0
#else
rotri.d ra, ra, 64 - (_PAGE_HUGE_SHIFT + 1)
#endif #endif
andi t0, ra, _PAGE_PRESENT andi t0, ra, _PAGE_PRESENT
beqz t0, nopage_tlb_load beqz t0, nopage_tlb_load
...@@ -135,7 +137,6 @@ tlb_huge_update_load: ...@@ -135,7 +137,6 @@ tlb_huge_update_load:
beqz t0, tlb_huge_update_load beqz t0, tlb_huge_update_load
ori t0, ra, _PAGE_VALID ori t0, ra, _PAGE_VALID
#else #else
rotri.d ra, ra, 64 - (_PAGE_HUGE_SHIFT + 1)
ori t0, ra, _PAGE_VALID ori t0, ra, _PAGE_VALID
st.d t0, t1, 0 st.d t0, t1, 0
#endif #endif
...@@ -281,6 +282,8 @@ vmalloc_store: ...@@ -281,6 +282,8 @@ vmalloc_store:
tlb_huge_update_store: tlb_huge_update_store:
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
ll.d ra, t1, 0 ll.d ra, t1, 0
#else
rotri.d ra, ra, 64 - (_PAGE_HUGE_SHIFT + 1)
#endif #endif
andi t0, ra, _PAGE_PRESENT | _PAGE_WRITE andi t0, ra, _PAGE_PRESENT | _PAGE_WRITE
xori t0, t0, _PAGE_PRESENT | _PAGE_WRITE xori t0, t0, _PAGE_PRESENT | _PAGE_WRITE
...@@ -292,7 +295,6 @@ tlb_huge_update_store: ...@@ -292,7 +295,6 @@ tlb_huge_update_store:
beqz t0, tlb_huge_update_store beqz t0, tlb_huge_update_store
ori t0, ra, (_PAGE_VALID | _PAGE_DIRTY | _PAGE_MODIFIED) ori t0, ra, (_PAGE_VALID | _PAGE_DIRTY | _PAGE_MODIFIED)
#else #else
rotri.d ra, ra, 64 - (_PAGE_HUGE_SHIFT + 1)
ori t0, ra, (_PAGE_VALID | _PAGE_DIRTY | _PAGE_MODIFIED) ori t0, ra, (_PAGE_VALID | _PAGE_DIRTY | _PAGE_MODIFIED)
st.d t0, t1, 0 st.d t0, t1, 0
#endif #endif
...@@ -438,6 +440,8 @@ vmalloc_modify: ...@@ -438,6 +440,8 @@ vmalloc_modify:
tlb_huge_update_modify: tlb_huge_update_modify:
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
ll.d ra, t1, 0 ll.d ra, t1, 0
#else
rotri.d ra, ra, 64 - (_PAGE_HUGE_SHIFT + 1)
#endif #endif
andi t0, ra, _PAGE_WRITE andi t0, ra, _PAGE_WRITE
beqz t0, nopage_tlb_modify beqz t0, nopage_tlb_modify
...@@ -448,7 +452,6 @@ tlb_huge_update_modify: ...@@ -448,7 +452,6 @@ tlb_huge_update_modify:
beqz t0, tlb_huge_update_modify beqz t0, tlb_huge_update_modify
ori t0, ra, (_PAGE_VALID | _PAGE_DIRTY | _PAGE_MODIFIED) ori t0, ra, (_PAGE_VALID | _PAGE_DIRTY | _PAGE_MODIFIED)
#else #else
rotri.d ra, ra, 64 - (_PAGE_HUGE_SHIFT + 1)
ori t0, ra, (_PAGE_VALID | _PAGE_DIRTY | _PAGE_MODIFIED) ori t0, ra, (_PAGE_VALID | _PAGE_DIRTY | _PAGE_MODIFIED)
st.d t0, t1, 0 st.d t0, t1, 0
#endif #endif
......
...@@ -24,6 +24,7 @@ struct saved_registers { ...@@ -24,6 +24,7 @@ struct saved_registers {
u64 kpgd; u64 kpgd;
u32 pwctl0; u32 pwctl0;
u32 pwctl1; u32 pwctl1;
u64 pcpu_base;
}; };
static struct saved_registers saved_regs; static struct saved_registers saved_regs;
...@@ -36,6 +37,7 @@ void loongarch_common_suspend(void) ...@@ -36,6 +37,7 @@ void loongarch_common_suspend(void)
saved_regs.pwctl1 = csr_read32(LOONGARCH_CSR_PWCTL1); saved_regs.pwctl1 = csr_read32(LOONGARCH_CSR_PWCTL1);
saved_regs.ecfg = csr_read32(LOONGARCH_CSR_ECFG); saved_regs.ecfg = csr_read32(LOONGARCH_CSR_ECFG);
saved_regs.euen = csr_read32(LOONGARCH_CSR_EUEN); saved_regs.euen = csr_read32(LOONGARCH_CSR_EUEN);
saved_regs.pcpu_base = csr_read64(PERCPU_BASE_KS);
loongarch_suspend_addr = loongson_sysconf.suspend_addr; loongarch_suspend_addr = loongson_sysconf.suspend_addr;
} }
...@@ -44,7 +46,6 @@ void loongarch_common_resume(void) ...@@ -44,7 +46,6 @@ void loongarch_common_resume(void)
{ {
sync_counter(); sync_counter();
local_flush_tlb_all(); local_flush_tlb_all();
csr_write64(per_cpu_offset(0), PERCPU_BASE_KS);
csr_write64(eentry, LOONGARCH_CSR_EENTRY); csr_write64(eentry, LOONGARCH_CSR_EENTRY);
csr_write64(eentry, LOONGARCH_CSR_MERRENTRY); csr_write64(eentry, LOONGARCH_CSR_MERRENTRY);
csr_write64(tlbrentry, LOONGARCH_CSR_TLBRENTRY); csr_write64(tlbrentry, LOONGARCH_CSR_TLBRENTRY);
...@@ -55,6 +56,7 @@ void loongarch_common_resume(void) ...@@ -55,6 +56,7 @@ void loongarch_common_resume(void)
csr_write32(saved_regs.pwctl1, LOONGARCH_CSR_PWCTL1); csr_write32(saved_regs.pwctl1, LOONGARCH_CSR_PWCTL1);
csr_write32(saved_regs.ecfg, LOONGARCH_CSR_ECFG); csr_write32(saved_regs.ecfg, LOONGARCH_CSR_ECFG);
csr_write32(saved_regs.euen, LOONGARCH_CSR_EUEN); csr_write32(saved_regs.euen, LOONGARCH_CSR_EUEN);
csr_write64(saved_regs.pcpu_base, PERCPU_BASE_KS);
} }
int loongarch_acpi_suspend(void) int loongarch_acpi_suspend(void)
......
...@@ -426,7 +426,7 @@ $(obj)/core.o: private rustc_objcopy = $(foreach sym,$(redirect-intrinsics),--re ...@@ -426,7 +426,7 @@ $(obj)/core.o: private rustc_objcopy = $(foreach sym,$(redirect-intrinsics),--re
$(obj)/core.o: private rustc_target_flags = $(core-cfgs) $(obj)/core.o: private rustc_target_flags = $(core-cfgs)
$(obj)/core.o: $(RUST_LIB_SRC)/core/src/lib.rs FORCE $(obj)/core.o: $(RUST_LIB_SRC)/core/src/lib.rs FORCE
+$(call if_changed_dep,rustc_library) +$(call if_changed_dep,rustc_library)
ifneq ($(or $(CONFIG_X86_64),$(CONFIG_LOONGARCH)),) ifdef CONFIG_X86_64
$(obj)/core.o: scripts/target.json $(obj)/core.o: scripts/target.json
endif endif
......
...@@ -12,7 +12,7 @@ hostprogs-always-$(CONFIG_SYSTEM_EXTRA_CERTIFICATE) += insert-sys-cert ...@@ -12,7 +12,7 @@ hostprogs-always-$(CONFIG_SYSTEM_EXTRA_CERTIFICATE) += insert-sys-cert
hostprogs-always-$(CONFIG_RUST_KERNEL_DOCTESTS) += rustdoc_test_builder hostprogs-always-$(CONFIG_RUST_KERNEL_DOCTESTS) += rustdoc_test_builder
hostprogs-always-$(CONFIG_RUST_KERNEL_DOCTESTS) += rustdoc_test_gen hostprogs-always-$(CONFIG_RUST_KERNEL_DOCTESTS) += rustdoc_test_gen
ifneq ($(or $(CONFIG_X86_64),$(CONFIG_LOONGARCH)),) ifdef CONFIG_X86_64
always-$(CONFIG_RUST) += target.json always-$(CONFIG_RUST) += target.json
filechk_rust_target = $< < include/config/auto.conf filechk_rust_target = $< < include/config/auto.conf
......
...@@ -164,12 +164,7 @@ fn main() { ...@@ -164,12 +164,7 @@ fn main() {
ts.push("llvm-target", "x86_64-linux-gnu"); ts.push("llvm-target", "x86_64-linux-gnu");
ts.push("target-pointer-width", "64"); ts.push("target-pointer-width", "64");
} else if cfg.has("LOONGARCH") { } else if cfg.has("LOONGARCH") {
ts.push("arch", "loongarch64"); panic!("loongarch uses the builtin rustc loongarch64-unknown-none-softfloat target");
ts.push("data-layout", "e-m:e-p:64:64-i64:64-i128:128-n64-S128");
ts.push("features", "-f,-d");
ts.push("llvm-target", "loongarch64-linux-gnusf");
ts.push("llvm-abiname", "lp64s");
ts.push("target-pointer-width", "64");
} else { } else {
panic!("Unsupported architecture"); panic!("Unsupported architecture");
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment