All of lore.kernel.org
 help / color / mirror / Atom feed
From: Huacai Chen <chenhuacai@gmail.com>
To: WANG Xuerui <kernel@xen0n.name>
Cc: Huacai Chen <chenhuacai@loongson.cn>,
	Arnd Bergmann <arnd@arndb.de>, Andy Lutomirski <luto@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Peter Zijlstra <peterz@infradead.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	David Airlie <airlied@linux.ie>, Jonathan Corbet <corbet@lwn.net>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	linux-arch <linux-arch@vger.kernel.org>,
	"open list:DOCUMENTATION" <linux-doc@vger.kernel.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Xuefeng Li <lixuefeng@loongson.cn>,
	Yanteng Si <siyanteng@loongson.cn>, Guo Ren <guoren@kernel.org>,
	Jiaxun Yang <jiaxun.yang@flygoat.com>
Subject: Re: [PATCH V9 05/24] LoongArch: Add build infrastructure
Date: Sun, 1 May 2022 20:41:46 +0800	[thread overview]
Message-ID: <CAAhV-H7xR_4ib29Kaw3jBX5P=Mu70Lbts26hiPoht94Ouumh=g@mail.gmail.com> (raw)
In-Reply-To: <3f46aa25-ef45-fff8-dba5-5db1034b38d9@xen0n.name>

Hi, Xuerui,

On Sun, May 1, 2022 at 6:09 PM WANG Xuerui <kernel@xen0n.name> wrote:
>
>
> On 4/30/22 17:04, Huacai Chen wrote:
> > This patch adds Kbuild, Makefile, Kconfig and link script for LoongArch
> > build infrastructure.
> >
> > Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
> > ---
> >   arch/loongarch/.gitignore              |   9 +
> >   arch/loongarch/Kbuild                  |   3 +
> >   arch/loongarch/Kconfig                 | 351 +++++++++++++++++++++++++
> >   arch/loongarch/Kconfig.debug           |   0
> >   arch/loongarch/Makefile                |  99 +++++++
> >   arch/loongarch/include/asm/Kbuild      |  29 ++
> >   arch/loongarch/include/uapi/asm/Kbuild |   2 +
> >   arch/loongarch/kernel/Makefile         |  22 ++
> >   arch/loongarch/kernel/vmlinux.lds.S    | 100 +++++++
> >   arch/loongarch/lib/Makefile            |   7 +
> >   arch/loongarch/mm/Makefile             |   9 +
> >   arch/loongarch/pci/Makefile            |   7 +
> >   scripts/subarch.include                |   2 +-
> >   13 files changed, 639 insertions(+), 1 deletion(-)
> >   create mode 100644 arch/loongarch/.gitignore
> >   create mode 100644 arch/loongarch/Kbuild
> >   create mode 100644 arch/loongarch/Kconfig
> >   create mode 100644 arch/loongarch/Kconfig.debug
> >   create mode 100644 arch/loongarch/Makefile
> >   create mode 100644 arch/loongarch/include/asm/Kbuild
> >   create mode 100644 arch/loongarch/include/uapi/asm/Kbuild
> >   create mode 100644 arch/loongarch/kernel/Makefile
> >   create mode 100644 arch/loongarch/kernel/vmlinux.lds.S
> >   create mode 100644 arch/loongarch/lib/Makefile
> >   create mode 100644 arch/loongarch/mm/Makefile
> >   create mode 100644 arch/loongarch/pci/Makefile
> >
> > diff --git a/arch/loongarch/.gitignore b/arch/loongarch/.gitignore
> > new file mode 100644
> > index 000000000000..fd88d21e7172
> > --- /dev/null
> > +++ b/arch/loongarch/.gitignore
> > @@ -0,0 +1,9 @@
> > +*.lds
> > +*.raw
> > +calc_vmlinuz_load_addr
> > +elf-entry
> > +relocs
> > +vmlinux*
> > +vmlinuz*
> > +
> > +!kernel/vmlinux.lds.S
> This exclude entry is unnecessary?
> > diff --git a/arch/loongarch/Kbuild b/arch/loongarch/Kbuild
> > new file mode 100644
> > index 000000000000..1ad35aabdd16
> > --- /dev/null
> > +++ b/arch/loongarch/Kbuild
> > @@ -0,0 +1,3 @@
> > +obj-y += kernel/
> > +obj-y += mm/
> > +obj-y += vdso/
> > diff --git a/arch/loongarch/Kconfig b/arch/loongarch/Kconfig
> > new file mode 100644
> > index 000000000000..44b763046893
> > --- /dev/null
> > +++ b/arch/loongarch/Kconfig
> > @@ -0,0 +1,351 @@
> > +# SPDX-License-Identifier: GPL-2.0
> > +config LOONGARCH
> > +     bool
> > +     default y
> > +     select ACPI_MCFG if ACPI
> > +     select ACPI_SYSTEM_POWER_STATES_SUPPORT if ACPI
> > +     select ARCH_BINFMT_ELF_STATE
> > +     select ARCH_ENABLE_MEMORY_HOTPLUG
> > +     select ARCH_ENABLE_MEMORY_HOTREMOVE
> > +     select ARCH_HAS_ACPI_TABLE_UPGRADE      if ACPI
> > +     select ARCH_HAS_PTE_SPECIAL
> > +     select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
> > +     select ARCH_INLINE_READ_LOCK if !PREEMPTION
> > +     select ARCH_INLINE_READ_LOCK_BH if !PREEMPTION
> > +     select ARCH_INLINE_READ_LOCK_IRQ if !PREEMPTION
> > +     select ARCH_INLINE_READ_LOCK_IRQSAVE if !PREEMPTION
> > +     select ARCH_INLINE_READ_UNLOCK if !PREEMPTION
> > +     select ARCH_INLINE_READ_UNLOCK_BH if !PREEMPTION
> > +     select ARCH_INLINE_READ_UNLOCK_IRQ if !PREEMPTION
> > +     select ARCH_INLINE_READ_UNLOCK_IRQRESTORE if !PREEMPTION
> > +     select ARCH_INLINE_WRITE_LOCK if !PREEMPTION
> > +     select ARCH_INLINE_WRITE_LOCK_BH if !PREEMPTION
> > +     select ARCH_INLINE_WRITE_LOCK_IRQ if !PREEMPTION
> > +     select ARCH_INLINE_WRITE_LOCK_IRQSAVE if !PREEMPTION
> > +     select ARCH_INLINE_WRITE_UNLOCK if !PREEMPTION
> > +     select ARCH_INLINE_WRITE_UNLOCK_BH if !PREEMPTION
> > +     select ARCH_INLINE_WRITE_UNLOCK_IRQ if !PREEMPTION
> > +     select ARCH_INLINE_WRITE_UNLOCK_IRQRESTORE if !PREEMPTION
> > +     select ARCH_INLINE_SPIN_TRYLOCK if !PREEMPTION
> > +     select ARCH_INLINE_SPIN_TRYLOCK_BH if !PREEMPTION
> > +     select ARCH_INLINE_SPIN_LOCK if !PREEMPTION
> > +     select ARCH_INLINE_SPIN_LOCK_BH if !PREEMPTION
> > +     select ARCH_INLINE_SPIN_LOCK_IRQ if !PREEMPTION
> > +     select ARCH_INLINE_SPIN_LOCK_IRQSAVE if !PREEMPTION
> > +     select ARCH_INLINE_SPIN_UNLOCK if !PREEMPTION
> > +     select ARCH_INLINE_SPIN_UNLOCK_BH if !PREEMPTION
> > +     select ARCH_INLINE_SPIN_UNLOCK_IRQ if !PREEMPTION
> > +     select ARCH_INLINE_SPIN_UNLOCK_IRQRESTORE if !PREEMPTION
> > +     select ARCH_MIGHT_HAVE_PC_PARPORT
> > +     select ARCH_MIGHT_HAVE_PC_SERIO
> > +     select ARCH_SPARSEMEM_ENABLE
> > +     select ARCH_SUPPORTS_ACPI
> > +     select ARCH_SUPPORTS_ATOMIC_RMW
> > +     select ARCH_SUPPORTS_HUGETLBFS
> > +     select ARCH_USE_BUILTIN_BSWAP
> > +     select ARCH_USE_CMPXCHG_LOCKREF
> > +     select ARCH_USE_QUEUED_RWLOCKS
> > +     select ARCH_USE_QUEUED_SPINLOCKS
> > +     select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT
> > +     select ARCH_WANTS_NO_INSTR
> > +     select BUILDTIME_TABLE_SORT
> > +     select COMMON_CLK
> > +     select GENERIC_CLOCKEVENTS
> > +     select GENERIC_CMOS_UPDATE
> > +     select GENERIC_CPU_AUTOPROBE
> > +     select GENERIC_ENTRY
> > +     select GENERIC_FIND_FIRST_BIT
> > +     select GENERIC_GETTIMEOFDAY
> > +     select GENERIC_IRQ_MULTI_HANDLER
> > +     select GENERIC_IRQ_PROBE
> > +     select GENERIC_IRQ_SHOW
> > +     select GENERIC_LIB_ASHLDI3
> > +     select GENERIC_LIB_ASHRDI3
> > +     select GENERIC_LIB_CMPDI2
> > +     select GENERIC_LIB_LSHRDI3
> > +     select GENERIC_LIB_UCMPDI2
> > +     select GENERIC_PCI_IOMAP
> > +     select GENERIC_SCHED_CLOCK
> > +     select GENERIC_TIME_VSYSCALL
> > +     select GPIOLIB
> > +     select HAVE_ARCH_AUDITSYSCALL
> > +     select HAVE_ARCH_COMPILER_H
> > +     select HAVE_ARCH_MMAP_RND_BITS if MMU
> > +     select HAVE_ARCH_SECCOMP_FILTER
> > +     select HAVE_ARCH_TRACEHOOK
> > +     select HAVE_ARCH_TRANSPARENT_HUGEPAGE
> > +     select HAVE_ASM_MODVERSIONS
> > +     select HAVE_CONTEXT_TRACKING
> > +     select HAVE_COPY_THREAD_TLS
> > +     select HAVE_DEBUG_KMEMLEAK
> > +     select HAVE_DEBUG_STACKOVERFLOW
> > +     select HAVE_DMA_CONTIGUOUS
> > +     select HAVE_EXIT_THREAD
> > +     select HAVE_FAST_GUP
> > +     select HAVE_GENERIC_VDSO
> > +     select HAVE_IOREMAP_PROT
> > +     select HAVE_IRQ_EXIT_ON_IRQ_STACK
> > +     select HAVE_IRQ_TIME_ACCOUNTING
> > +     select HAVE_MEMBLOCK
> > +     select HAVE_MEMBLOCK_NODE_MAP
> > +     select HAVE_MOD_ARCH_SPECIFIC
> > +     select HAVE_NMI
> > +     select HAVE_PCI
> > +     select HAVE_PERF_EVENTS
> > +     select HAVE_REGS_AND_STACK_ACCESS_API
> > +     select HAVE_RSEQ
> > +     select HAVE_SYSCALL_TRACEPOINTS
> > +     select HAVE_TIF_NOHZ
> > +     select HAVE_VIRT_CPU_ACCOUNTING_GEN
> > +     select IRQ_FORCED_THREADING
> > +     select IRQ_LOONGARCH_CPU
> > +     select MODULES_USE_ELF_RELA if MODULES
> > +     select PCI
> > +     select PCI_DOMAINS_GENERIC
> > +     select PCI_ECAM if ACPI
> > +     select PCI_MSI_ARCH_FALLBACKS
> > +     select PERF_USE_VMALLOC
> > +     select RTC_LIB
> > +     select SPARSE_IRQ
> > +     select SYSCTL_EXCEPTION_TRACE
> > +     select SWIOTLB
> > +     select TRACE_IRQFLAGS_SUPPORT
> > +     select ZONE_DMA32
> > +
> > +config 32BIT
> > +     bool
> > +
> > +config 64BIT
> > +     def_bool y
> > +
> > +config CPU_HAS_FPU
> > +     bool
> > +     default y
> > +
> > +config CPU_HAS_PREFETCH
> > +     bool
> > +     default y
> > +
> > +config GENERIC_CALIBRATE_DELAY
> > +     def_bool y
> > +
> > +config GENERIC_CSUM
> > +     def_bool y
> > +
> > +config GENERIC_HWEIGHT
> > +     def_bool y
> > +
> > +config L1_CACHE_SHIFT
> > +     int
> > +     default "6"
> > +
> > +config LOCKDEP_SUPPORT
> > +     bool
> > +     default y
> > +
> > +config MACH_LOONGSON32
> > +     def_bool 32BIT
> > +
> > +config MACH_LOONGSON64
> > +     def_bool 64BIT
> These two config symbols are not used anywhere in arch/loongarch, but
> from a quick grep it seems they're sharing the names of the MIPS config
> symbols, on purpose, maybe for sharing code between the MIPS-era
> Loongson models and the LoongArch models. If so, a comment explaining
> this could be beneficial.
> > +
> > +config PAGE_SIZE_4KB
> > +     bool
> > +
> > +config PAGE_SIZE_16KB
> > +     bool
> > +
> > +config PAGE_SIZE_64KB
> > +     bool
> > +
> > +config PGTABLE_2LEVEL
> > +     bool
> > +
> > +config PGTABLE_3LEVEL
> > +     bool
> > +
> > +config PGTABLE_4LEVEL
> > +     bool
> > +
> > +config PGTABLE_LEVELS
> > +     int
> > +     default 2 if PGTABLE_2LEVEL
> > +     default 3 if PGTABLE_3LEVEL
> > +     default 4 if PGTABLE_4LEVEL
> > +
> > +config SCHED_OMIT_FRAME_POINTER
> > +     bool
> > +     default y
> > +
> > +menu "Kernel type"
> > +
> > +source "kernel/Kconfig.hz"
> > +
> > +choice
> > +     prompt "Page Table Layout"
> > +     default 16KB_2LEVEL if 32BIT
> > +     default 16KB_3LEVEL if 64BIT
> > +     help
> > +       Allows choosing the page table layout, which is a combination
> > +       of page size and page table levels. The virtual memory address
> > +       space bits are determined by the page table layout.
> "The size of virtual memory address space"?
> > +
> > +config 4KB_3LEVEL
> > +     bool "4KB with 3 levels"
> > +     select PAGE_SIZE_4KB
> > +     select PGTABLE_3LEVEL
> > +     help
> > +       This option selects 4KB page size with 3 level page tables, which
> > +       support a maximum 39 bits of application virtual memory.
> "a maximum of XX bits" -- similarly for all occurrences below.
OK, most of your suggestions will be taken.

Huacai
> > +
> > +config 4KB_4LEVEL
> > +     bool "4KB with 4 levels"
> > +     select PAGE_SIZE_4KB
> > +     select PGTABLE_4LEVEL
> > +     help
> > +       This option selects 4KB page size with 4 level page tables, which
> > +       support a maximum 48 bits of application virtual memory.
> > +
> > +config 16KB_2LEVEL
> > +     bool "16KB with 2 levels"
> > +     select PAGE_SIZE_16KB
> > +     select PGTABLE_2LEVEL
> > +     help
> > +       This option selects 16KB page size with 2 level page tables, which
> > +       support a maximum 36 bits of application virtual memory.
> > +
> > +config 16KB_3LEVEL
> > +     bool "16KB with 3 levels"
> > +     select PAGE_SIZE_16KB
> > +     select PGTABLE_3LEVEL
> > +     help
> > +       This option selects 16KB page size with 3 level page tables, which
> > +       support a maximum 47 bits of application virtual memory.
> > +
> > +config 64KB_2LEVEL
> > +     bool "64KB with 2 levels"
> > +     select PAGE_SIZE_64KB
> > +     select PGTABLE_2LEVEL
> > +     help
> > +       This option selects 64KB page size with 2 level page tables, which
> > +       support a maximum 42 bits of application virtual memory.
> > +
> > +config 64KB_3LEVEL
> > +     bool "64KB with 3 levels"
> > +     select PAGE_SIZE_64KB
> > +     select PGTABLE_3LEVEL
> > +     help
> > +       This option selects 64KB page size with 3 level page tables, which
> > +       support a maximum 55 bits of application virtual memory.
> > +
> > +endchoice
> > +
> > +config DMI
> > +     bool "Enable DMI scanning"
> > +     select DMI_SCAN_MACHINE_NON_EFI_FALLBACK
> > +     default y
> > +     help
> > +       Enabled scanning of DMI to identify machine quirks. Say Y
> Should be "Enable scanning ..." but the arch/x86 and arch/mips versions
> of this text all have this typo. Might be wise to fix here... then fix
> the other two later.
> > +       here unless you have verified that your setup is not
> > +       affected by entries in the DMI blacklist. Required by PNP
> > +       BIOS code.
> Do we have a "PNP BIOS"? I know this is also copied text, but we may
> tweak it to suit our platform.
> > +
> > +config EFI
> > +     bool "EFI runtime service support"
> > +     select UCS2_STRING
> > +     select EFI_RUNTIME_WRAPPERS
> > +     help
> > +       This enables the kernel to use EFI runtime services that are
> > +       available (such as the EFI variable services).
> > +
> > +       This option is only useful on systems that have EFI firmware.
> > +       In addition, you should use the latest ELILO loader available
> > +       at <http://elilo.sourceforge.net> in order to take advantage
> > +       of EFI runtime services. However, even with this option, the
> Remove mention of ELILO?
> > +       resultant kernel should continue to boot on existing non-EFI
> > +       platforms.
> > +
> > +config FORCE_MAX_ZONEORDER
> > +     int "Maximum zone order"
> > +     range 14 64 if PAGE_SIZE_64KB
> > +     default "14" if PAGE_SIZE_64KB
> > +     range 12 64 if PAGE_SIZE_16KB
> > +     default "12" if PAGE_SIZE_16KB
> > +     range 11 64
> > +     default "11"
> > +     help
> > +       The kernel memory allocator divides physically contiguous memory
> > +       blocks into "zones", where each zone is a power of two number of
> > +       pages.  This option selects the largest power of two that the kernel
> > +       keeps in the memory allocator.  If you need to allocate very large
> > +       blocks of physically contiguous memory, then you may need to
> > +       increase this value.
> > +
> > +       This config option is actually maximum order plus one. For example,
> > +       a value of 11 means that the largest free memory block is 2^10 pages.
> > +
> > +       The page size is not necessarily 4KB.  Keep this in mind
> > +       when choosing a value for this option.
> > +
> > +config SECCOMP
> > +     bool "Enable seccomp to safely compute untrusted bytecode"
> > +     depends on PROC_FS
> > +     default y
> > +     help
> > +       This kernel feature is useful for number crunching applications
> > +       that may need to compute untrusted bytecode during their
> > +       execution. By using pipes or other transports made available to
> > +       the process as file descriptors supporting the read/write
> > +       syscalls, it's possible to isolate those applications in
> > +       their own address space using seccomp. Once seccomp is
> > +       enabled via /proc/<pid>/seccomp, it cannot be disabled
> > +       and the task is only allowed to execute a few safe syscalls
> > +       defined by each seccomp mode.
> > +
> > +       If unsure, say Y. Only embedded should say N here.
> > +
> > +endmenu
> > +
> > +config ARCH_SELECT_MEMORY_MODEL
> > +     def_bool y
> > +
> > +config ARCH_FLATMEM_ENABLE
> > +     def_bool y
> > +
> > +config ARCH_SPARSEMEM_ENABLE
> > +     def_bool y
> > +     help
> > +       Say Y to support efficient handling of sparse physical memory,
> > +       for architectures which are either NUMA (Non-Uniform Memory Access)
> > +       or have huge holes in the physical address space for other reasons.
> > +       See <file:Documentation/vm/numa.rst> for more.
> > +
> > +config ARCH_ENABLE_THP_MIGRATION
> > +     def_bool y
> > +     depends on TRANSPARENT_HUGEPAGE
> > +
> > +config ARCH_MEMORY_PROBE
> > +     def_bool y
> > +     depends on MEMORY_HOTPLUG
> > +
> > +config MMU
> > +     bool
> > +     default y
> > +
> > +config ARCH_MMAP_RND_BITS_MIN
> > +     default 12
> > +
> > +config ARCH_MMAP_RND_BITS_MAX
> > +     default 18
> > +
> > +menu "Bus options"
> > +
> > +endmenu
> > +
> > +menu "Power management options"
> > +
> > +source "drivers/acpi/Kconfig"
> > +
> > +endmenu
> > +
> > +source "drivers/firmware/Kconfig"
> > diff --git a/arch/loongarch/Kconfig.debug b/arch/loongarch/Kconfig.debug
> > new file mode 100644
> > index 000000000000..e69de29bb2d1
> > diff --git a/arch/loongarch/Makefile b/arch/loongarch/Makefile
> > new file mode 100644
> > index 000000000000..0a40e79b3265
> > --- /dev/null
> > +++ b/arch/loongarch/Makefile
> > @@ -0,0 +1,99 @@
> > +# SPDX-License-Identifier: GPL-2.0
> > +#
> > +# Author: Huacai Chen <chenhuacai@loongson.cn>
> > +# Copyright (C) 2020-2022 Loongson Technology Corporation Limited
> > +
> > +#
> > +# Select the object file format to substitute into the linker script.
> > +#
> > +64bit-tool-archpref  = loongarch64
> > +32bit-bfd            = elf32-loongarch
> > +64bit-bfd            = elf64-loongarch
> > +32bit-emul           = elf32loongarch
> > +64bit-emul           = elf64loongarch
> > +
> > +ifdef CONFIG_64BIT
> > +tool-archpref                = $(64bit-tool-archpref)
> > +UTS_MACHINE          := loongarch64
> > +endif
> > +
> > +ifneq ($(SUBARCH),$(ARCH))
> > +  ifeq ($(CROSS_COMPILE),)
> > +    CROSS_COMPILE := $(call cc-cross-prefix, $(tool-archpref)-linux-  $(tool-archpref)-linux-gnu-  $(tool-archpref)-unknown-linux-gnu-)
> > +  endif
> > +endif
> > +
> > +cflags-y += $(call cc-option, -mno-check-zero-division)
> > +
> > +ifdef CONFIG_64BIT
> > +ld-emul                      = $(64bit-emul)
> > +cflags-y             += -mabi=lp64s
> > +endif
> > +
> > +all-y                        := vmlinux
> > +
> > +#
> > +# GCC uses -G0 -mabicalls -fpic as default.  We don't want PIC in the kernel
> > +# code since it only slows down the whole thing.  At some point we might make
> > +# use of global pointer optimizations but their use of $r2 conflicts with
> > +# the current pointer optimization.
> LoongArch doesn't have any notion of "abicalls", please remove the whole
> MIPS legacy... or at least replace with something suitable for LoongArch.
> > +#
> > +cflags-y                     += -G0 -pipe
> > +cflags-y                     += -msoft-float
> > +LDFLAGS_vmlinux                      += -G0 -static -n -nostdlib
> > +KBUILD_AFLAGS_KERNEL         += -Wa,-mla-global-with-pcrel
> > +KBUILD_CFLAGS_KERNEL         += -Wa,-mla-global-with-pcrel
> > +KBUILD_AFLAGS_MODULE         += -Wa,-mla-global-with-abs
> > +KBUILD_CFLAGS_MODULE         += -fplt -Wa,-mla-global-with-abs,-mla-local-with-abs
> These switches are the ones that should receive more love via
> comments... they are here to tell the assembler to emit the "la.global"
> and "la.local" pseudo-insns in a particular "flavor". Why not simply use
> the default? This needs explanation!
> > +
> > +cflags-y += -ffreestanding
> > +cflags-y += $(call as-option,-Wa$(comma)-mno-fix-loongson3-llsc,)
> Unfortunately we're still working around the LL/SC hardware issue even
> after migrating to LoongArch... might be better to add a comment too.
> (something along the line of "we work around the issue manually in the
> handwritten assembly, so no automatic workarounds should kick in")
> > +
> > +load-y               = 0x9000000000200000
> > +bootvars-y   = VMLINUX_LOAD_ADDRESS=$(load-y)
> > +
> > +drivers-$(CONFIG_PCI)                += arch/loongarch/pci/
> > +
> > +KBUILD_AFLAGS        += $(cflags-y)
> > +KBUILD_CFLAGS        += $(cflags-y)
> > +KBUILD_CPPFLAGS += -DVMLINUX_LOAD_ADDRESS=$(load-y)
> > +
> > +# This is required to get dwarf unwinding tables into .debug_frame
> > +# instead of .eh_frame so we don't discard them.
> > +KBUILD_CFLAGS += -fno-asynchronous-unwind-tables
> > +KBUILD_CFLAGS += -isystem $(shell $(CC) -print-file-name=include)
> > +KBUILD_CFLAGS += $(call cc-option,-mstrict-align)
> Explain reason of this -mstrict-align request -- it's because not all
> LoongArch cores support unaligned accesses, and as kernel we can't rely
> on others to provide emulation for these accesses.
> > +
> > +KBUILD_LDFLAGS       += -m $(ld-emul)
> > +
> > +ifdef CONFIG_LOONGARCH
> > +CHECKFLAGS += $(shell $(CC) $(KBUILD_CFLAGS) -dM -E -x c /dev/null | \
> > +     egrep -vw '__GNUC_(MINOR_|PATCHLEVEL_)?_' | \
> > +     sed -e "s/^\#define /-D'/" -e "s/ /'='/" -e "s/$$/'/" -e 's/\$$/&&/g')
> > +endif
> > +
> > +head-y := arch/loongarch/kernel/head.o
> > +
> > +libs-y += arch/loongarch/lib/
> > +
> > +prepare: vdso_prepare
> > +vdso_prepare: prepare0
> > +     $(Q)$(MAKE) $(build)=arch/loongarch/vdso include/generated/vdso-offsets.h
> > +
> > +PHONY += vdso_install
> > +vdso_install:
> > +     $(Q)$(MAKE) $(build)=arch/loongarch/vdso $@
> > +
> > +all: $(all-y)
> > +
> > +CLEAN_FILES += vmlinux
> > +
> > +install:
> > +     $(Q)install -D -m 755 vmlinux $(INSTALL_PATH)/vmlinux-$(KERNELRELEASE)
> > +     $(Q)install -D -m 644 .config $(INSTALL_PATH)/config-$(KERNELRELEASE)
> > +     $(Q)install -D -m 644 System.map $(INSTALL_PATH)/System.map-$(KERNELRELEASE)
> > +
> > +define archhelp
> > +     echo '  install              - install kernel into $(INSTALL_PATH)'
> > +     echo
> > +endef
> > diff --git a/arch/loongarch/include/asm/Kbuild b/arch/loongarch/include/asm/Kbuild
> > new file mode 100644
> > index 000000000000..a0eed6076c79
> > --- /dev/null
> > +++ b/arch/loongarch/include/asm/Kbuild
> > @@ -0,0 +1,29 @@
> > +# SPDX-License-Identifier: GPL-2.0
> > +generic-y += dma-contiguous.h
> > +generic-y += export.h
> > +generic-y += mcs_spinlock.h
> > +generic-y += parport.h
> > +generic-y += early_ioremap.h
> > +generic-y += qrwlock.h
> > +generic-y += qspinlock.h
> > +generic-y += rwsem.h
> > +generic-y += segment.h
> > +generic-y += user.h
> > +generic-y += stat.h
> > +generic-y += fcntl.h
> > +generic-y += ioctl.h
> > +generic-y += ioctls.h
> > +generic-y += mman.h
> > +generic-y += msgbuf.h
> > +generic-y += sembuf.h
> > +generic-y += shmbuf.h
> > +generic-y += statfs.h
> > +generic-y += socket.h
> > +generic-y += sockios.h
> > +generic-y += termios.h
> > +generic-y += termbits.h
> > +generic-y += poll.h
> > +generic-y += param.h
> > +generic-y += posix_types.h
> > +generic-y += resource.h
> > +generic-y += kvm_para.h
> > diff --git a/arch/loongarch/include/uapi/asm/Kbuild b/arch/loongarch/include/uapi/asm/Kbuild
> > new file mode 100644
> > index 000000000000..4aa680ca2e5f
> > --- /dev/null
> > +++ b/arch/loongarch/include/uapi/asm/Kbuild
> > @@ -0,0 +1,2 @@
> > +# SPDX-License-Identifier: GPL-2.0
> > +generic-y += kvm_para.h
> > diff --git a/arch/loongarch/kernel/Makefile b/arch/loongarch/kernel/Makefile
> > new file mode 100644
> > index 000000000000..ead27a11e8e0
> > --- /dev/null
> > +++ b/arch/loongarch/kernel/Makefile
> > @@ -0,0 +1,22 @@
> > +# SPDX-License-Identifier: GPL-2.0
> > +#
> > +# Makefile for the Linux/LoongArch kernel.
> > +#
> > +
> > +extra-y              := head.o vmlinux.lds
> > +
> > +obj-y                += cpu-probe.o cacheinfo.o cmdline.o env.o setup.o entry.o genex.o \
> > +                traps.o irq.o idle.o process.o dma.o mem.o io.o reset.o switch.o \
> > +                elf.o rtc.o syscall.o signal.o time.o topology.o cmpxchg.o \
> > +                inst.o ptrace.o vdso.o
> > +
> > +obj-$(CONFIG_ACPI)           += acpi.o
> > +obj-$(CONFIG_EFI)            += efi.o
> > +
> > +obj-$(CONFIG_CPU_HAS_FPU)    += fpu.o
> > +
> > +obj-$(CONFIG_MODULES)                += module.o module-sections.o
> > +
> > +obj-$(CONFIG_PROC_FS)                += proc.o
> > +
> > +CPPFLAGS_vmlinux.lds         := $(KBUILD_CFLAGS)
> > diff --git a/arch/loongarch/kernel/vmlinux.lds.S b/arch/loongarch/kernel/vmlinux.lds.S
> > new file mode 100644
> > index 000000000000..02abfaaa4892
> > --- /dev/null
> > +++ b/arch/loongarch/kernel/vmlinux.lds.S
> > @@ -0,0 +1,100 @@
> > +/* SPDX-License-Identifier: GPL-2.0 */
> > +#include <linux/sizes.h>
> > +#include <asm/asm-offsets.h>
> > +#include <asm/thread_info.h>
> > +
> > +#define PAGE_SIZE _PAGE_SIZE
> > +
> > +/*
> > + * Put .bss..swapper_pg_dir as the first thing in .bss. This will
> > + * ensure that it has .bss alignment (64K).
> > + */
> > +#define BSS_FIRST_SECTIONS *(.bss..swapper_pg_dir)
> > +
> > +#include <asm-generic/vmlinux.lds.h>
> > +
> > +OUTPUT_ARCH(loongarch)
> > +ENTRY(kernel_entry)
> > +PHDRS {
> > +     text PT_LOAD FLAGS(7);  /* RWX */
> > +     note PT_NOTE FLAGS(4);  /* R__ */
> > +}
> > +
> > +jiffies       = jiffies_64;
> > +
> > +SECTIONS
> > +{
> > +     . = VMLINUX_LOAD_ADDRESS;
> > +
> > +     _text = .;
> > +     .text : {
> > +             TEXT_TEXT
> > +             SCHED_TEXT
> > +             CPUIDLE_TEXT
> > +             LOCK_TEXT
> > +             KPROBES_TEXT
> > +             IRQENTRY_TEXT
> > +             SOFTIRQENTRY_TEXT
> > +             *(.fixup)
> > +             *(.gnu.warning)
> > +     } :text = 0
> > +     _etext = .;
> > +
> > +     EXCEPTION_TABLE(16)
> > +
> > +     . = ALIGN(PAGE_SIZE);
> > +     __init_begin = .;
> > +     __inittext_begin = .;
> > +
> > +     INIT_TEXT_SECTION(PAGE_SIZE)
> > +     .exit.text : {
> > +             EXIT_TEXT
> > +     }
> > +
> > +     __inittext_end = .;
> > +
> > +     __initdata_begin = .;
> > +
> > +     INIT_DATA_SECTION(16)
> > +     .exit.data : {
> > +             EXIT_DATA
> > +     }
> > +
> > +     __initdata_end = .;
> > +
> > +     __init_end = .;
> > +
> > +     _sdata = .;
> > +     RO_DATA(4096)
> > +     RW_DATA(1 << CONFIG_L1_CACHE_SHIFT, PAGE_SIZE, THREAD_SIZE)
> > +
> > +     .sdata : {
> > +             *(.sdata)
> > +     }
> > +
> > +     . = ALIGN(SZ_64K);
> > +     _edata =  .;
> > +
> > +     BSS_SECTION(0, SZ_64K, 8)
> > +
> > +     _end = .;
> > +
> > +     STABS_DEBUG
> > +     DWARF_DEBUG
> > +
> > +     .gptab.sdata : {
> > +             *(.gptab.data)
> > +             *(.gptab.sdata)
> > +     }
> > +     .gptab.sbss : {
> > +             *(.gptab.bss)
> > +             *(.gptab.sbss)
> > +     }
> > +
> > +     DISCARDS
> > +     /DISCARD/ : {
> > +             *(.gnu.attributes)
> > +             *(.options)
> > +             *(.eh_frame)
> > +     }
> > +}
> > diff --git a/arch/loongarch/lib/Makefile b/arch/loongarch/lib/Makefile
> > new file mode 100644
> > index 000000000000..7f32f3e4a6ec
> > --- /dev/null
> > +++ b/arch/loongarch/lib/Makefile
> > @@ -0,0 +1,7 @@
> > +# SPDX-License-Identifier: GPL-2.0
> > +#
> > +# Makefile for LoongArch-specific library files..
> One extra period at end of line.
> > +#
> > +
> > +lib-y        += delay.o memset.o memcpy.o memmove.o \
> > +        clear_user.o copy_user.o dump_tlb.o
> > diff --git a/arch/loongarch/mm/Makefile b/arch/loongarch/mm/Makefile
> > new file mode 100644
> > index 000000000000..8ffc6383f836
> > --- /dev/null
> > +++ b/arch/loongarch/mm/Makefile
> > @@ -0,0 +1,9 @@
> > +# SPDX-License-Identifier: GPL-2.0
> > +#
> > +# Makefile for the Linux/LoongArch-specific parts of the memory manager.
> > +#
> > +
> > +obj-y                                += init.o cache.o tlb.o tlbex.o extable.o \
> > +                                fault.o ioremap.o maccess.o mmap.o pgtable.o page.o
> > +
> > +obj-$(CONFIG_HUGETLB_PAGE)   += hugetlbpage.o
> > diff --git a/arch/loongarch/pci/Makefile b/arch/loongarch/pci/Makefile
> > new file mode 100644
> > index 000000000000..8101ef3df71c
> > --- /dev/null
> > +++ b/arch/loongarch/pci/Makefile
> > @@ -0,0 +1,7 @@
> > +# SPDX-License-Identifier: GPL-2.0
> > +#
> > +# Makefile for the PCI specific kernel interface routines under Linux.
> > +#
> > +
> > +obj-y                                += pci.o
> > +obj-$(CONFIG_ACPI)           += acpi.o
> > diff --git a/scripts/subarch.include b/scripts/subarch.include
> > index 776849a3c500..4bd327d0ae42 100644
> > --- a/scripts/subarch.include
> > +++ b/scripts/subarch.include
> > @@ -10,4 +10,4 @@ SUBARCH := $(shell uname -m | sed -e s/i.86/x86/ -e s/x86_64/x86/ \
> >                                 -e s/s390x/s390/ \
> >                                 -e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
> >                                 -e s/sh[234].*/sh/ -e s/aarch64.*/arm64/ \
> > -                               -e s/riscv.*/riscv/)
> > +                               -e s/riscv.*/riscv/ -e s/loongarch.*/loongarch/)

  reply	other threads:[~2022-05-01 12:42 UTC|newest]

Thread overview: 94+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-30  9:04 [PATCH V9 00/22] arch: Add basic LoongArch support Huacai Chen
2022-04-30  9:04 ` [PATCH V9 01/24] Documentation: LoongArch: Add basic documentations Huacai Chen
2022-05-01  7:48   ` Bagas Sanjaya
2022-05-01  8:55     ` Huacai Chen
2022-05-01  9:32   ` WANG Xuerui
2022-05-01 10:17     ` Huacai Chen
2022-04-30  9:04 ` [PATCH V9 02/24] Documentation/zh_CN: Add basic LoongArch documentations Huacai Chen
2022-05-01  9:38   ` WANG Xuerui
2022-04-30  9:04 ` [PATCH V9 03/24] LoongArch: Add elf-related definitions Huacai Chen
2022-05-01  9:41   ` WANG Xuerui
2022-05-01 14:27     ` Huacai Chen
2022-04-30  9:04 ` [PATCH V9 04/24] LoongArch: Add writecombine support for drm Huacai Chen
2022-04-30  9:04 ` [PATCH V9 05/24] LoongArch: Add build infrastructure Huacai Chen
2022-05-01 10:09   ` WANG Xuerui
2022-05-01 12:41     ` Huacai Chen [this message]
2022-05-01 15:43     ` Xi Ruoyao
2022-04-30  9:05 ` [PATCH V9 06/24] LoongArch: Add CPU definition headers Huacai Chen
2022-05-01 11:05   ` WANG Xuerui
2022-05-01 15:07     ` Huacai Chen
2022-04-30  9:05 ` [PATCH V9 07/24] LoongArch: Add atomic/locking headers Huacai Chen
2022-05-01 11:16   ` WANG Xuerui
2022-05-01 13:16     ` Huacai Chen
2022-04-30  9:05 ` [PATCH V9 08/24] LoongArch: Add other common headers Huacai Chen
2022-05-01 11:39   ` WANG Xuerui
2022-05-01 14:26     ` Huacai Chen
2022-04-30  9:05 ` [PATCH V9 09/24] LoongArch: Add boot and setup routines Huacai Chen
2022-04-30  9:05 ` [PATCH V9 10/24] LoongArch: Add exception/interrupt handling Huacai Chen
2022-05-01 16:27   ` Xi Ruoyao
2022-05-01 17:08     ` Xi Ruoyao
2022-05-02  0:01       ` Huacai Chen
2022-04-30  9:05 ` [PATCH V9 11/24] LoongArch: Add process management Huacai Chen
2022-04-30  9:05 ` [PATCH V9 12/24] LoongArch: Add memory management Huacai Chen
2022-04-30  9:05 ` [PATCH V9 13/24] LoongArch: Add system call support Huacai Chen
2022-04-30  9:44   ` Arnd Bergmann
2022-04-30 10:05     ` Huacai Chen
2022-04-30 10:34       ` Arnd Bergmann
2022-05-07 12:11         ` Christian Brauner
2022-05-09 10:00           ` Christian Brauner
2022-05-11  7:11             ` Arnd Bergmann
2022-05-11 21:12               ` [musl] " Rich Felker
2022-05-12  7:21                 ` Arnd Bergmann
2022-05-12 12:11                   ` Rich Felker
2022-05-11 16:17             ` Florian Weimer
2022-04-30  9:05 ` [PATCH V9 14/24] LoongArch: Add signal handling support Huacai Chen
2022-04-30  9:05 ` [PATCH V9 15/24] LoongArch: Add elf and module support Huacai Chen
2022-04-30  9:05 ` [PATCH V9 16/24] LoongArch: Add misc common routines Huacai Chen
2022-04-30  9:50   ` Arnd Bergmann
2022-04-30 10:00     ` Huacai Chen
2022-04-30 10:41       ` Arnd Bergmann
2022-04-30 13:22         ` Palmer Dabbelt
2022-05-01  5:12           ` Huacai Chen
2022-04-30  9:05 ` [PATCH V9 17/24] LoongArch: Add some library functions Huacai Chen
2022-05-01 10:55   ` Guo Ren
2022-05-01 12:18     ` Huacai Chen
2022-04-30  9:05 ` [PATCH V9 18/24] LoongArch: Add PCI controller support Huacai Chen
2022-04-30  9:05 ` [PATCH V9 19/24] LoongArch: Add VDSO and VSYSCALL support Huacai Chen
2022-04-30  9:05 ` [PATCH V9 20/24] LoongArch: Add efistub booting support Huacai Chen
2022-04-30  9:56   ` Arnd Bergmann
2022-04-30 10:02     ` Huacai Chen
2022-05-03  7:23     ` Ard Biesheuvel
2022-05-05  9:59       ` Huacai Chen
2022-05-06  8:14         ` Ard Biesheuvel
2022-05-06 11:26           ` WANG Xuerui
2022-05-06 11:41             ` Arnd Bergmann
2022-05-06 13:20               ` Huacai Chen
2022-05-13 19:32                 ` Arnd Bergmann
2022-05-14  2:27                   ` Huacai Chen
2022-04-30  9:05 ` [PATCH V9 21/24] LoongArch: Add zboot (compressed kernel) support Huacai Chen
2022-04-30 10:07   ` Arnd Bergmann
2022-04-30 10:07     ` Arnd Bergmann
2022-04-30 10:07     ` Arnd Bergmann
2022-05-01  5:22     ` Huacai Chen
2022-05-01  5:22       ` Huacai Chen
2022-05-01  5:22       ` Huacai Chen
2022-05-01  6:35       ` Russell King (Oracle)
2022-05-01  6:35         ` Russell King (Oracle)
2022-05-01  6:35         ` Russell King (Oracle)
2022-05-01  8:46         ` Huacai Chen
2022-05-01  8:46           ` Huacai Chen
2022-05-01  8:46           ` Huacai Chen
2022-05-01 11:28           ` Russell King (Oracle)
2022-05-01 11:28             ` Russell King (Oracle)
2022-05-01 11:28             ` Russell King (Oracle)
2022-05-01  8:33       ` Arnd Bergmann
2022-05-01  8:33         ` Arnd Bergmann
2022-05-01  8:33         ` Arnd Bergmann
2022-05-01 23:36     ` Ard Biesheuvel
2022-05-01 23:36       ` Ard Biesheuvel
2022-05-01 23:36       ` Ard Biesheuvel
2022-04-30  9:05 ` [PATCH V9 22/24] LoongArch: Add multi-processor (SMP) support Huacai Chen
2022-04-30  9:05 ` [PATCH V9 23/24] LoongArch: Add Non-Uniform Memory Access (NUMA) support Huacai Chen
2022-04-30  9:05 ` [PATCH V9 24/24] LoongArch: Add Loongson-3 default config file Huacai Chen
2022-05-01  8:19 ` [PATCH V9 00/22] arch: Add basic LoongArch support Bagas Sanjaya
2022-05-01  8:55   ` Huacai Chen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAAhV-H7xR_4ib29Kaw3jBX5P=Mu70Lbts26hiPoht94Ouumh=g@mail.gmail.com' \
    --to=chenhuacai@gmail.com \
    --cc=airlied@linux.ie \
    --cc=akpm@linux-foundation.org \
    --cc=arnd@arndb.de \
    --cc=chenhuacai@loongson.cn \
    --cc=corbet@lwn.net \
    --cc=guoren@kernel.org \
    --cc=jiaxun.yang@flygoat.com \
    --cc=kernel@xen0n.name \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lixuefeng@loongson.cn \
    --cc=luto@kernel.org \
    --cc=peterz@infradead.org \
    --cc=siyanteng@loongson.cn \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.