mirror of
https://github.com/AsahiLinux/m1n1
synced 2024-11-27 08:50:17 +00:00
hv_vm/hv_exc: Add cpu_id to exception & mmiotrace structs
Signed-off-by: Hector Martin <marcan@marcan.st>
This commit is contained in:
parent
a13a23d5fa
commit
56b54a6641
6 changed files with 10 additions and 3 deletions
|
@ -15,6 +15,7 @@ from . import xnutools, shell
|
||||||
__all__ = ["HV"]
|
__all__ = ["HV"]
|
||||||
|
|
||||||
class MMIOTraceFlags(Register32):
|
class MMIOTraceFlags(Register32):
|
||||||
|
CPU = 23, 16
|
||||||
WIDTH = 4, 0
|
WIDTH = 4, 0
|
||||||
WRITE = 5
|
WRITE = 5
|
||||||
MULTI = 6
|
MULTI = 6
|
||||||
|
|
|
@ -67,6 +67,7 @@ class EXC_RET(IntEnum):
|
||||||
STEP = 4
|
STEP = 4
|
||||||
|
|
||||||
ExcInfo = Struct(
|
ExcInfo = Struct(
|
||||||
|
"cpu_id" / Int64ul,
|
||||||
"spsr" / RegAdapter(SPSR),
|
"spsr" / RegAdapter(SPSR),
|
||||||
"elr" / Int64ul,
|
"elr" / Int64ul,
|
||||||
"esr" / RegAdapter(ESR),
|
"esr" / RegAdapter(ESR),
|
||||||
|
|
5
src/hv.h
5
src/hv.h
|
@ -9,9 +9,10 @@
|
||||||
|
|
||||||
typedef bool(hv_hook_t)(u64 addr, u64 *val, bool write, int width);
|
typedef bool(hv_hook_t)(u64 addr, u64 *val, bool write, int width);
|
||||||
|
|
||||||
#define MMIO_EVT_WIDTH GENMASK(4, 0)
|
#define MMIO_EVT_CPU GENMASK(23, 16)
|
||||||
#define MMIO_EVT_WRITE BIT(5)
|
|
||||||
#define MMIO_EVT_MULTI BIT(6)
|
#define MMIO_EVT_MULTI BIT(6)
|
||||||
|
#define MMIO_EVT_WRITE BIT(5)
|
||||||
|
#define MMIO_EVT_WIDTH GENMASK(4, 0)
|
||||||
|
|
||||||
struct hv_evt_mmiotrace {
|
struct hv_evt_mmiotrace {
|
||||||
u32 flags;
|
u32 flags;
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#include "assert.h"
|
#include "assert.h"
|
||||||
#include "cpu_regs.h"
|
#include "cpu_regs.h"
|
||||||
#include "exception.h"
|
#include "exception.h"
|
||||||
|
#include "smp.h"
|
||||||
#include "string.h"
|
#include "string.h"
|
||||||
#include "uart.h"
|
#include "uart.h"
|
||||||
#include "uartproxy.h"
|
#include "uartproxy.h"
|
||||||
|
@ -33,6 +34,7 @@ void hv_exc_proxy(u64 *regs, uartproxy_boot_reason_t reason, uartproxy_exc_code_
|
||||||
hv_wdt_breadcrumb('P');
|
hv_wdt_breadcrumb('P');
|
||||||
|
|
||||||
struct uartproxy_exc_info exc_info = {
|
struct uartproxy_exc_info exc_info = {
|
||||||
|
.cpu_id = smp_id(),
|
||||||
.spsr = hv_get_spsr(),
|
.spsr = hv_get_spsr(),
|
||||||
.elr = hv_get_elr(),
|
.elr = hv_get_elr(),
|
||||||
.esr = hv_get_esr(),
|
.esr = hv_get_esr(),
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include "cpu_regs.h"
|
#include "cpu_regs.h"
|
||||||
#include "iodev.h"
|
#include "iodev.h"
|
||||||
#include "malloc.h"
|
#include "malloc.h"
|
||||||
|
#include "smp.h"
|
||||||
#include "string.h"
|
#include "string.h"
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "uartproxy.h"
|
#include "uartproxy.h"
|
||||||
|
@ -616,7 +617,7 @@ static bool emulate_store(u64 *regs, u32 insn, u64 *val, u64 *width)
|
||||||
static void emit_mmiotrace(u64 pc, u64 addr, u64 *data, u64 width, u64 flags, bool sync)
|
static void emit_mmiotrace(u64 pc, u64 addr, u64 *data, u64 width, u64 flags, bool sync)
|
||||||
{
|
{
|
||||||
struct hv_evt_mmiotrace evt = {
|
struct hv_evt_mmiotrace evt = {
|
||||||
.flags = flags,
|
.flags = flags | FIELD_PREP(MMIO_EVT_CPU, smp_id()),
|
||||||
.pc = pc,
|
.pc = pc,
|
||||||
.addr = addr,
|
.addr = addr,
|
||||||
};
|
};
|
||||||
|
|
|
@ -33,6 +33,7 @@ typedef enum _uartproxy_event_type_t {
|
||||||
} uartproxy_event_type_t;
|
} uartproxy_event_type_t;
|
||||||
|
|
||||||
struct uartproxy_exc_info {
|
struct uartproxy_exc_info {
|
||||||
|
u64 cpu_id;
|
||||||
u64 spsr;
|
u64 spsr;
|
||||||
u64 elr;
|
u64 elr;
|
||||||
u64 esr;
|
u64 esr;
|
||||||
|
|
Loading…
Reference in a new issue