mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-21 11:44:01 +08:00
179ae57dba
Function names should tell what the function does, not how. mfsrin() and mtsrin() are read/writing segment registers. They are called that way because they are using mfsrin and mtsrin instructions, but it doesn't matter for the caller. In preparation of following patch, change their name to mfsr() and mtsr() in order to make it obvious they manipulate segment registers without messing up with how they do it. Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/f92d99f4349391b77766745900231aa880a0efb5.1612612022.git.christophe.leroy@csgroup.eu
63 lines
1.3 KiB
C
63 lines
1.3 KiB
C
// SPDX-License-Identifier: GPL-2.0+
|
|
/*
|
|
* Copyright 2018, Christophe Leroy CS S.I.
|
|
* <christophe.leroy@c-s.fr>
|
|
*
|
|
* This dumps the content of Segment Registers
|
|
*/
|
|
|
|
#include <asm/debugfs.h>
|
|
|
|
static void seg_show(struct seq_file *m, int i)
|
|
{
|
|
u32 val = mfsr(i << 28);
|
|
|
|
seq_printf(m, "0x%01x0000000-0x%01xfffffff ", i, i);
|
|
seq_printf(m, "Kern key %d ", (val >> 30) & 1);
|
|
seq_printf(m, "User key %d ", (val >> 29) & 1);
|
|
if (val & 0x80000000) {
|
|
seq_printf(m, "Device 0x%03x", (val >> 20) & 0x1ff);
|
|
seq_printf(m, "-0x%05x", val & 0xfffff);
|
|
} else {
|
|
if (val & 0x10000000)
|
|
seq_puts(m, "No Exec ");
|
|
seq_printf(m, "VSID 0x%06x", val & 0xffffff);
|
|
}
|
|
seq_puts(m, "\n");
|
|
}
|
|
|
|
static int sr_show(struct seq_file *m, void *v)
|
|
{
|
|
int i;
|
|
|
|
seq_puts(m, "---[ User Segments ]---\n");
|
|
for (i = 0; i < TASK_SIZE >> 28; i++)
|
|
seg_show(m, i);
|
|
|
|
seq_puts(m, "\n---[ Kernel Segments ]---\n");
|
|
for (; i < 16; i++)
|
|
seg_show(m, i);
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int sr_open(struct inode *inode, struct file *file)
|
|
{
|
|
return single_open(file, sr_show, NULL);
|
|
}
|
|
|
|
static const struct file_operations sr_fops = {
|
|
.open = sr_open,
|
|
.read = seq_read,
|
|
.llseek = seq_lseek,
|
|
.release = single_release,
|
|
};
|
|
|
|
static int __init sr_init(void)
|
|
{
|
|
debugfs_create_file("segment_registers", 0400, powerpc_debugfs_root,
|
|
NULL, &sr_fops);
|
|
return 0;
|
|
}
|
|
device_initcall(sr_init);
|