mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-28 22:54:05 +08:00
LoongArch fixes for v6.1-final
-----BEGIN PGP SIGNATURE----- iQJKBAABCAA0FiEEzOlt8mkP+tbeiYy5AoYrw/LiJnoFAmOR3UcWHGNoZW5odWFj YWlAa2VybmVsLm9yZwAKCRAChivD8uImesDED/90fKvraGLbwAzS/nV131JyrJO9 BQ96cSbD9fzsy9Iq+sO9tutyPPCR3thJpJ2gnaCHlo9pn1mjQVEzX39izSkaOJ0G 0OWeBXa429RMbNERMgxc62aZd21LNKGrrAaW9+1pnZebQ0ELvx55+PnoQNKbxlhR EoyjBtSZ9Hb+FV1f6yroAtAWfBw5X2GYYfSr2yjnxY2py6zLKEzTsEOzzU6rPbso e0457hFPB5mudAsdTjB2Icjays9BUaJffhp/eLDleky8P0ERJLfldYhnxnKqTE3q hZOeHZH3O9rbNUnktlgj/J8VTrrb7yYHaZMQGOzTaXBrvjj9q0k5kSMNKWdoRq37 ZfnXwMtEGmgXf/htx/wY9sM7FCqV7QY5ubU5SkfU2ygNOdsWQFHmgl6QNtuvx4ii GvkHzYpymNdvlD1ZbqFPq7eABBriGs3tefUHPQ8/FoaiMudlAgZKjSuDYIUcy3nK 3d5abAjCmxMybLGc9bI3T3BPFPGrpUlme/WdKZvvQJ3azia5F0sn2JMa7STVg3FF hLFvbS5RKP7dD7uP4CHbnCe5OD7aFBHmar5MYiJY4WrBIKiMQv+URtGKg9g+PDv1 rFiiEfMfRWe2tVPuyZ5XnkQJxJp4otgaWdRNdQUDmo5uPE85H0hHw1bHw3eEtAK/ f133+V+/kxamE1F6jg== =2sT6 -----END PGP SIGNATURE----- Merge tag 'loongarch-fixes-6.1-3' of git://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson Pull LoongArch fixes from Huacai Chen: "Export smp_send_reschedule() for modules use, fix a huge page entry update issue, and add documents for booting description" * tag 'loongarch-fixes-6.1-3' of git://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson: docs/zh_CN: Add LoongArch booting description's translation docs/LoongArch: Add booting description LoongArch: mm: Fix huge page entry update for virtual machine LoongArch: Export symbol for function smp_send_reschedule()
This commit is contained in:
commit
7f043b7662
42
Documentation/loongarch/booting.rst
Normal file
42
Documentation/loongarch/booting.rst
Normal file
@ -0,0 +1,42 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
=======================
|
||||
Booting Linux/LoongArch
|
||||
=======================
|
||||
|
||||
:Author: Yanteng Si <siyanteng@loongson.cn>
|
||||
:Date: 18 Nov 2022
|
||||
|
||||
Information passed from BootLoader to kernel
|
||||
============================================
|
||||
|
||||
LoongArch supports ACPI and FDT. The information that needs to be passed
|
||||
to the kernel includes the memmap, the initrd, the command line, optionally
|
||||
the ACPI/FDT tables, and so on.
|
||||
|
||||
The kernel is passed the following arguments on `kernel_entry` :
|
||||
|
||||
- a0 = efi_boot: `efi_boot` is a flag indicating whether
|
||||
this boot environment is fully UEFI-compliant.
|
||||
|
||||
- a1 = cmdline: `cmdline` is a pointer to the kernel command line.
|
||||
|
||||
- a2 = systemtable: `systemtable` points to the EFI system table.
|
||||
All pointers involved at this stage are in physical addresses.
|
||||
|
||||
Header of Linux/LoongArch kernel images
|
||||
=======================================
|
||||
|
||||
Linux/LoongArch kernel images are EFI images. Being PE files, they have
|
||||
a 64-byte header structured like::
|
||||
|
||||
u32 MZ_MAGIC /* "MZ", MS-DOS header */
|
||||
u32 res0 = 0 /* Reserved */
|
||||
u64 kernel_entry /* Kernel entry point */
|
||||
u64 _end - _text /* Kernel image effective size */
|
||||
u64 load_offset /* Kernel image load offset from start of RAM */
|
||||
u64 res1 = 0 /* Reserved */
|
||||
u64 res2 = 0 /* Reserved */
|
||||
u64 res3 = 0 /* Reserved */
|
||||
u32 LINUX_PE_MAGIC /* Magic number */
|
||||
u32 pe_header - _head /* Offset to the PE header */
|
@ -9,6 +9,7 @@ LoongArch Architecture
|
||||
:numbered:
|
||||
|
||||
introduction
|
||||
booting
|
||||
irq-chip-model
|
||||
|
||||
features
|
||||
|
48
Documentation/translations/zh_CN/loongarch/booting.rst
Normal file
48
Documentation/translations/zh_CN/loongarch/booting.rst
Normal file
@ -0,0 +1,48 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
.. include:: ../disclaimer-zh_CN.rst
|
||||
|
||||
:Original: Documentation/loongarch/booting.rst
|
||||
|
||||
:翻译:
|
||||
|
||||
司延腾 Yanteng Si <siyanteng@loongson.cn>
|
||||
|
||||
====================
|
||||
启动 Linux/LoongArch
|
||||
====================
|
||||
|
||||
:作者: 司延腾 <siyanteng@loongson.cn>
|
||||
:日期: 2022年11月18日
|
||||
|
||||
BootLoader传递给内核的信息
|
||||
==========================
|
||||
|
||||
LoongArch支持ACPI和FDT启动,需要传递给内核的信息包括memmap、initrd、cmdline、可
|
||||
选的ACPI/FDT表等。
|
||||
|
||||
内核在 `kernel_entry` 入口处被传递以下参数:
|
||||
|
||||
- a0 = efi_boot: `efi_boot` 是一个标志,表示这个启动环境是否完全符合UEFI
|
||||
的要求。
|
||||
|
||||
- a1 = cmdline: `cmdline` 是一个指向内核命令行的指针。
|
||||
|
||||
- a2 = systemtable: `systemtable` 指向EFI的系统表,在这个阶段涉及的所有
|
||||
指针都是物理地址。
|
||||
|
||||
Linux/LoongArch内核镜像文件头
|
||||
=============================
|
||||
|
||||
内核镜像是EFI镜像。作为PE文件,它们有一个64字节的头部结构体,如下所示::
|
||||
|
||||
u32 MZ_MAGIC /* "MZ", MS-DOS 头 */
|
||||
u32 res0 = 0 /* 保留 */
|
||||
u64 kernel_entry /* 内核入口点 */
|
||||
u64 _end - _text /* 内核镜像有效大小 */
|
||||
u64 load_offset /* 加载内核镜像相对内存起始地址的偏移量 */
|
||||
u64 res1 = 0 /* 保留 */
|
||||
u64 res2 = 0 /* 保留 */
|
||||
u64 res3 = 0 /* 保留 */
|
||||
u32 LINUX_PE_MAGIC /* 魔术数 */
|
||||
u32 pe_header - _head /* 到PE头的偏移量 */
|
@ -14,6 +14,7 @@ LoongArch体系结构
|
||||
:numbered:
|
||||
|
||||
introduction
|
||||
booting
|
||||
irq-chip-model
|
||||
|
||||
features
|
||||
|
@ -78,16 +78,6 @@ extern void calculate_cpu_foreign_map(void);
|
||||
*/
|
||||
extern void show_ipi_list(struct seq_file *p, int prec);
|
||||
|
||||
/*
|
||||
* This function sends a 'reschedule' IPI to another CPU.
|
||||
* it goes straight through and wastes no time serializing
|
||||
* anything. Worst case is that we lose a reschedule ...
|
||||
*/
|
||||
static inline void smp_send_reschedule(int cpu)
|
||||
{
|
||||
loongson_send_ipi_single(cpu, SMP_RESCHEDULE);
|
||||
}
|
||||
|
||||
static inline void arch_send_call_function_single_ipi(int cpu)
|
||||
{
|
||||
loongson_send_ipi_single(cpu, SMP_CALL_FUNCTION);
|
||||
|
@ -149,6 +149,17 @@ void loongson_send_ipi_mask(const struct cpumask *mask, unsigned int action)
|
||||
ipi_write_action(cpu_logical_map(i), (u32)action);
|
||||
}
|
||||
|
||||
/*
|
||||
* This function sends a 'reschedule' IPI to another CPU.
|
||||
* it goes straight through and wastes no time serializing
|
||||
* anything. Worst case is that we lose a reschedule ...
|
||||
*/
|
||||
void smp_send_reschedule(int cpu)
|
||||
{
|
||||
loongson_send_ipi_single(cpu, SMP_RESCHEDULE);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(smp_send_reschedule);
|
||||
|
||||
irqreturn_t loongson_ipi_interrupt(int irq, void *dev)
|
||||
{
|
||||
unsigned int action;
|
||||
|
@ -10,6 +10,8 @@
|
||||
#include <asm/regdef.h>
|
||||
#include <asm/stackframe.h>
|
||||
|
||||
#define INVTLB_ADDR_GFALSE_AND_ASID 5
|
||||
|
||||
#define PTRS_PER_PGD_BITS (PAGE_SHIFT - 3)
|
||||
#define PTRS_PER_PUD_BITS (PAGE_SHIFT - 3)
|
||||
#define PTRS_PER_PMD_BITS (PAGE_SHIFT - 3)
|
||||
@ -136,13 +138,10 @@ tlb_huge_update_load:
|
||||
ori t0, ra, _PAGE_VALID
|
||||
st.d t0, t1, 0
|
||||
#endif
|
||||
tlbsrch
|
||||
addu16i.d t1, zero, -(CSR_TLBIDX_EHINV >> 16)
|
||||
addi.d ra, t1, 0
|
||||
csrxchg ra, t1, LOONGARCH_CSR_TLBIDX
|
||||
tlbwr
|
||||
|
||||
csrxchg zero, t1, LOONGARCH_CSR_TLBIDX
|
||||
csrrd ra, LOONGARCH_CSR_ASID
|
||||
csrrd t1, LOONGARCH_CSR_BADV
|
||||
andi ra, ra, CSR_ASID_ASID
|
||||
invtlb INVTLB_ADDR_GFALSE_AND_ASID, ra, t1
|
||||
|
||||
/*
|
||||
* A huge PTE describes an area the size of the
|
||||
@ -287,13 +286,11 @@ tlb_huge_update_store:
|
||||
ori t0, ra, (_PAGE_VALID | _PAGE_DIRTY | _PAGE_MODIFIED)
|
||||
st.d t0, t1, 0
|
||||
#endif
|
||||
tlbsrch
|
||||
addu16i.d t1, zero, -(CSR_TLBIDX_EHINV >> 16)
|
||||
addi.d ra, t1, 0
|
||||
csrxchg ra, t1, LOONGARCH_CSR_TLBIDX
|
||||
tlbwr
|
||||
csrrd ra, LOONGARCH_CSR_ASID
|
||||
csrrd t1, LOONGARCH_CSR_BADV
|
||||
andi ra, ra, CSR_ASID_ASID
|
||||
invtlb INVTLB_ADDR_GFALSE_AND_ASID, ra, t1
|
||||
|
||||
csrxchg zero, t1, LOONGARCH_CSR_TLBIDX
|
||||
/*
|
||||
* A huge PTE describes an area the size of the
|
||||
* configured huge page size. This is twice the
|
||||
@ -436,6 +433,11 @@ tlb_huge_update_modify:
|
||||
ori t0, ra, (_PAGE_VALID | _PAGE_DIRTY | _PAGE_MODIFIED)
|
||||
st.d t0, t1, 0
|
||||
#endif
|
||||
csrrd ra, LOONGARCH_CSR_ASID
|
||||
csrrd t1, LOONGARCH_CSR_BADV
|
||||
andi ra, ra, CSR_ASID_ASID
|
||||
invtlb INVTLB_ADDR_GFALSE_AND_ASID, ra, t1
|
||||
|
||||
/*
|
||||
* A huge PTE describes an area the size of the
|
||||
* configured huge page size. This is twice the
|
||||
@ -466,7 +468,7 @@ tlb_huge_update_modify:
|
||||
addu16i.d t1, zero, (PS_HUGE_SIZE << (CSR_TLBIDX_PS_SHIFT - 16))
|
||||
csrxchg t1, t0, LOONGARCH_CSR_TLBIDX
|
||||
|
||||
tlbwr
|
||||
tlbfill
|
||||
|
||||
/* Reset default page size */
|
||||
addu16i.d t0, zero, (CSR_TLBIDX_PS >> 16)
|
||||
|
Loading…
Reference in New Issue
Block a user