* Attach s390x sclpconsole to a proper parent in the QOM tree
* SCLP related clean-ups * Report deprecated-props in cpu-model-expansion reply on s390x * Deprecate "-runas" and introduce "-run-with user=..." instead * Add some more qtest cases on LoongArch -----BEGIN PGP SIGNATURE----- iQJFBAABCAAvFiEEJ7iIR+7gJQEY8+q5LtnXdP5wLbUFAmY9wHwRHHRodXRoQHJl ZGhhdC5jb20ACgkQLtnXdP5wLbUF+A/+JsraF7XOWv1eqW5/O+F5Id1a15CI15bQ +rUxW0H0wYxdg1i7jj4cB1dIBXgp59lTkpKUN7ftmnP54oxYQkdcJVCvclzAcwzh ZoMiIw3u88JEBZYpF4HcEaKawXxbTMU/ZGOAil1DSkdv+bwhISCS+aIo6ra2Nclg 2Zwzvb6DsHqcaYIqvrhbxr5VNhZ+o9AU0PEO67AbN6NKXAFCYlRf6Y9OlEveizZi 4bNnpa/YpA71dL418argAI0Wq78UPENjLeTVGap0DWGbufiiZ4M/Qov6czT0eYuG Us2CGJcimV9W+mR45g4xGIgaPmp7PFiobrOoTrAhbixxRA9FQWjamTsElcifktqE XiE8kYnTx052bY24ttgLOKYRV+whkw+luxtIZo5JPwNkM5S6rZiwY8EsAmd6fIxR aBlWPWQVO5JBc1Ol6MOWqZ/odpr6nQRe4gnL6tcCTFnpZwpyzaQiooNFES0a8KWJ MIsywMbIheMNI6m85rngdbKZ4lI1HTUnqLpfoDym3nlHtdx00ctq0O8RjJArfzt6 aRltpbIAvbGgDyRMzJjezCiMbBSwIHyv4eheJVMi/SAuSevGtnfVNZjCw208Qir6 sWEAWjavom/XnOFOtLwzkBdjBDiWHiPbLLLgRKcwZ7wbBgH4vhITwSz71fyKpo8n aTjjveXlUr0= =y1dS -----END PGP SIGNATURE----- Merge tag 'pull-request-2024-05-10' of https://gitlab.com/thuth/qemu into staging * Attach s390x sclpconsole to a proper parent in the QOM tree * SCLP related clean-ups * Report deprecated-props in cpu-model-expansion reply on s390x * Deprecate "-runas" and introduce "-run-with user=..." instead * Add some more qtest cases on LoongArch # -----BEGIN PGP SIGNATURE----- # # iQJFBAABCAAvFiEEJ7iIR+7gJQEY8+q5LtnXdP5wLbUFAmY9wHwRHHRodXRoQHJl # ZGhhdC5jb20ACgkQLtnXdP5wLbUF+A/+JsraF7XOWv1eqW5/O+F5Id1a15CI15bQ # +rUxW0H0wYxdg1i7jj4cB1dIBXgp59lTkpKUN7ftmnP54oxYQkdcJVCvclzAcwzh # ZoMiIw3u88JEBZYpF4HcEaKawXxbTMU/ZGOAil1DSkdv+bwhISCS+aIo6ra2Nclg # 2Zwzvb6DsHqcaYIqvrhbxr5VNhZ+o9AU0PEO67AbN6NKXAFCYlRf6Y9OlEveizZi # 4bNnpa/YpA71dL418argAI0Wq78UPENjLeTVGap0DWGbufiiZ4M/Qov6czT0eYuG # Us2CGJcimV9W+mR45g4xGIgaPmp7PFiobrOoTrAhbixxRA9FQWjamTsElcifktqE # XiE8kYnTx052bY24ttgLOKYRV+whkw+luxtIZo5JPwNkM5S6rZiwY8EsAmd6fIxR # aBlWPWQVO5JBc1Ol6MOWqZ/odpr6nQRe4gnL6tcCTFnpZwpyzaQiooNFES0a8KWJ # MIsywMbIheMNI6m85rngdbKZ4lI1HTUnqLpfoDym3nlHtdx00ctq0O8RjJArfzt6 # aRltpbIAvbGgDyRMzJjezCiMbBSwIHyv4eheJVMi/SAuSevGtnfVNZjCw208Qir6 # sWEAWjavom/XnOFOtLwzkBdjBDiWHiPbLLLgRKcwZ7wbBgH4vhITwSz71fyKpo8n # aTjjveXlUr0= # =y1dS # -----END PGP SIGNATURE----- # gpg: Signature made Fri 10 May 2024 08:36:44 AM CEST # gpg: using RSA key 27B88847EEE0250118F3EAB92ED9D774FE702DB5 # gpg: issuer "thuth@redhat.com" # gpg: Good signature from "Thomas Huth <th.huth@gmx.de>" [full] # gpg: aka "Thomas Huth <thuth@redhat.com>" [full] # gpg: aka "Thomas Huth <th.huth@posteo.de>" [unknown] # gpg: aka "Thomas Huth <huth@tuxfamily.org>" [full] * tag 'pull-request-2024-05-10' of https://gitlab.com/thuth/qemu: tests/qtest: Add some test cases support on LoongArch qemu-options: Deprecate "-runas" and introduce "-run-with user=..." instead target/s390x: flag te and cte as deprecated target/s390x: report deprecated-props in cpu-model-expansion reply s390x/sclp: Simplify get_sclp_device() s390x/event-facility: Simplify sclp_get_event_facility_bus() s390x: Introduce a SCLPDevice pointer under the machine hw/s390x: Attach the sclpconsole to /machine/sclp/s390-sclp-event-facility Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
commit
dafec285bd
@ -61,6 +61,12 @@ configurations (e.g. -smp drawers=1,books=1,clusters=1 for x86 PC machine) is
|
|||||||
marked deprecated since 9.0, users have to ensure that all the topology members
|
marked deprecated since 9.0, users have to ensure that all the topology members
|
||||||
described with -smp are supported by the target machine.
|
described with -smp are supported by the target machine.
|
||||||
|
|
||||||
|
``-runas`` (since 9.1)
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
Use ``-run-with user=..`` instead.
|
||||||
|
|
||||||
|
|
||||||
User-mode emulator command line arguments
|
User-mode emulator command line arguments
|
||||||
-----------------------------------------
|
-----------------------------------------
|
||||||
|
|
||||||
|
@ -523,16 +523,7 @@ static void register_types(void)
|
|||||||
|
|
||||||
type_init(register_types)
|
type_init(register_types)
|
||||||
|
|
||||||
BusState *sclp_get_event_facility_bus(void)
|
BusState *sclp_get_event_facility_bus(SCLPEventFacility *ef)
|
||||||
{
|
{
|
||||||
Object *busobj;
|
return BUS(&ef->sbus);
|
||||||
SCLPEventsBus *sbus;
|
|
||||||
|
|
||||||
busobj = object_resolve_path_type("", TYPE_SCLP_EVENTS_BUS, NULL);
|
|
||||||
sbus = OBJECT_CHECK(SCLPEventsBus, busobj, TYPE_SCLP_EVENTS_BUS);
|
|
||||||
if (!sbus) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return &sbus->qbus;
|
|
||||||
}
|
}
|
||||||
|
@ -237,23 +237,31 @@ static void s390_create_virtio_net(BusState *bus, const char *name)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void s390_create_sclpconsole(const char *type, Chardev *chardev)
|
static void s390_create_sclpconsole(SCLPDevice *sclp,
|
||||||
|
const char *type, Chardev *chardev)
|
||||||
{
|
{
|
||||||
|
SCLPEventFacility *ef = sclp->event_facility;
|
||||||
|
BusState *ev_fac_bus = sclp_get_event_facility_bus(ef);
|
||||||
DeviceState *dev;
|
DeviceState *dev;
|
||||||
|
|
||||||
dev = qdev_new(type);
|
dev = qdev_new(type);
|
||||||
|
object_property_add_child(OBJECT(ef), type, OBJECT(dev));
|
||||||
qdev_prop_set_chr(dev, "chardev", chardev);
|
qdev_prop_set_chr(dev, "chardev", chardev);
|
||||||
qdev_realize_and_unref(dev, sclp_get_event_facility_bus(), &error_fatal);
|
qdev_realize_and_unref(dev, ev_fac_bus, &error_fatal);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ccw_init(MachineState *machine)
|
static void ccw_init(MachineState *machine)
|
||||||
{
|
{
|
||||||
MachineClass *mc = MACHINE_GET_CLASS(machine);
|
MachineClass *mc = MACHINE_GET_CLASS(machine);
|
||||||
|
S390CcwMachineState *ms = S390_CCW_MACHINE(machine);
|
||||||
int ret;
|
int ret;
|
||||||
VirtualCssBus *css_bus;
|
VirtualCssBus *css_bus;
|
||||||
DeviceState *dev;
|
DeviceState *dev;
|
||||||
|
|
||||||
s390_sclp_init();
|
ms->sclp = SCLP(object_new(TYPE_SCLP));
|
||||||
|
object_property_add_child(OBJECT(machine), TYPE_SCLP, OBJECT(ms->sclp));
|
||||||
|
qdev_realize_and_unref(DEVICE(ms->sclp), NULL, &error_fatal);
|
||||||
|
|
||||||
/* init memory + setup max page size. Required for the CPU model */
|
/* init memory + setup max page size. Required for the CPU model */
|
||||||
s390_memory_init(machine->ram);
|
s390_memory_init(machine->ram);
|
||||||
|
|
||||||
@ -302,10 +310,10 @@ static void ccw_init(MachineState *machine)
|
|||||||
|
|
||||||
/* init consoles */
|
/* init consoles */
|
||||||
if (serial_hd(0)) {
|
if (serial_hd(0)) {
|
||||||
s390_create_sclpconsole("sclpconsole", serial_hd(0));
|
s390_create_sclpconsole(ms->sclp, "sclpconsole", serial_hd(0));
|
||||||
}
|
}
|
||||||
if (serial_hd(1)) {
|
if (serial_hd(1)) {
|
||||||
s390_create_sclpconsole("sclplmconsole", serial_hd(1));
|
s390_create_sclpconsole(ms->sclp, "sclplmconsole", serial_hd(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* init the TOD clock */
|
/* init the TOD clock */
|
||||||
|
@ -21,13 +21,14 @@
|
|||||||
#include "hw/s390x/s390-pci-bus.h"
|
#include "hw/s390x/s390-pci-bus.h"
|
||||||
#include "hw/s390x/ipl.h"
|
#include "hw/s390x/ipl.h"
|
||||||
#include "hw/s390x/cpu-topology.h"
|
#include "hw/s390x/cpu-topology.h"
|
||||||
|
#include "hw/s390x/s390-virtio-ccw.h"
|
||||||
|
|
||||||
static inline SCLPDevice *get_sclp_device(void)
|
static SCLPDevice *get_sclp_device(void)
|
||||||
{
|
{
|
||||||
static SCLPDevice *sclp;
|
static SCLPDevice *sclp;
|
||||||
|
|
||||||
if (!sclp) {
|
if (!sclp) {
|
||||||
sclp = SCLP(object_resolve_path_type("", TYPE_SCLP, NULL));
|
sclp = S390_CCW_MACHINE(qdev_get_machine())->sclp;
|
||||||
}
|
}
|
||||||
return sclp;
|
return sclp;
|
||||||
}
|
}
|
||||||
@ -378,16 +379,6 @@ void sclp_service_interrupt(uint32_t sccb)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* qemu object creation and initialization functions */
|
/* qemu object creation and initialization functions */
|
||||||
|
|
||||||
void s390_sclp_init(void)
|
|
||||||
{
|
|
||||||
Object *new = object_new(TYPE_SCLP);
|
|
||||||
|
|
||||||
object_property_add_child(qdev_get_machine(), TYPE_SCLP, new);
|
|
||||||
object_unref(new);
|
|
||||||
qdev_realize(DEVICE(new), NULL, &error_fatal);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void sclp_realize(DeviceState *dev, Error **errp)
|
static void sclp_realize(DeviceState *dev, Error **errp)
|
||||||
{
|
{
|
||||||
MachineState *machine = MACHINE(qdev_get_machine());
|
MachineState *machine = MACHINE(qdev_get_machine());
|
||||||
|
@ -203,6 +203,6 @@ struct SCLPEventFacilityClass {
|
|||||||
bool (*event_pending)(SCLPEventFacility *ef);
|
bool (*event_pending)(SCLPEventFacility *ef);
|
||||||
};
|
};
|
||||||
|
|
||||||
BusState *sclp_get_event_facility_bus(void);
|
BusState *sclp_get_event_facility_bus(SCLPEventFacility *ef);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
#include "hw/boards.h"
|
#include "hw/boards.h"
|
||||||
#include "qom/object.h"
|
#include "qom/object.h"
|
||||||
|
#include "hw/s390x/sclp.h"
|
||||||
|
|
||||||
#define TYPE_S390_CCW_MACHINE "s390-ccw-machine"
|
#define TYPE_S390_CCW_MACHINE "s390-ccw-machine"
|
||||||
|
|
||||||
@ -28,6 +29,8 @@ struct S390CcwMachineState {
|
|||||||
bool dea_key_wrap;
|
bool dea_key_wrap;
|
||||||
bool pv;
|
bool pv;
|
||||||
uint8_t loadparm[8];
|
uint8_t loadparm[8];
|
||||||
|
|
||||||
|
SCLPDevice *sclp;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define S390_PTF_REASON_NONE (0x00 << 8)
|
#define S390_PTF_REASON_NONE (0x00 << 8)
|
||||||
|
@ -221,8 +221,6 @@ static inline int sccb_data_len(SCCB *sccb)
|
|||||||
return be16_to_cpu(sccb->h.length) - sizeof(sccb->h);
|
return be16_to_cpu(sccb->h.length) - sizeof(sccb->h);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void s390_sclp_init(void);
|
|
||||||
void sclp_service_interrupt(uint32_t sccb);
|
void sclp_service_interrupt(uint32_t sccb);
|
||||||
void raise_irq_cpu_hotplug(void);
|
void raise_irq_cpu_hotplug(void);
|
||||||
int sclp_service_call(S390CPU *cpu, uint64_t sccb, uint32_t code);
|
int sclp_service_call(S390CPU *cpu, uint64_t sccb, uint32_t code);
|
||||||
|
@ -20,11 +20,16 @@
|
|||||||
#
|
#
|
||||||
# @props: a dictionary of QOM properties to be applied
|
# @props: a dictionary of QOM properties to be applied
|
||||||
#
|
#
|
||||||
|
# @deprecated-props: a list of properties that are flagged as deprecated
|
||||||
|
# by the CPU vendor. These props are a subset of the full model's
|
||||||
|
# definition list of properties. (since 9.1)
|
||||||
|
#
|
||||||
# Since: 2.8
|
# Since: 2.8
|
||||||
##
|
##
|
||||||
{ 'struct': 'CpuModelInfo',
|
{ 'struct': 'CpuModelInfo',
|
||||||
'data': { 'name': 'str',
|
'data': { 'name': 'str',
|
||||||
'*props': 'any' } }
|
'*props': 'any',
|
||||||
|
'*deprecated-props': ['str'] } }
|
||||||
|
|
||||||
##
|
##
|
||||||
# @CpuModelExpansionType:
|
# @CpuModelExpansionType:
|
||||||
|
@ -4824,7 +4824,8 @@ DEF("runas", HAS_ARG, QEMU_OPTION_runas, \
|
|||||||
SRST
|
SRST
|
||||||
``-runas user``
|
``-runas user``
|
||||||
Immediately before starting guest execution, drop root privileges,
|
Immediately before starting guest execution, drop root privileges,
|
||||||
switching to the specified user.
|
switching to the specified user. This option is deprecated, use
|
||||||
|
``-run-with user=...`` instead.
|
||||||
ERST
|
ERST
|
||||||
|
|
||||||
DEF("prom-env", HAS_ARG, QEMU_OPTION_prom_env,
|
DEF("prom-env", HAS_ARG, QEMU_OPTION_prom_env,
|
||||||
@ -4990,13 +4991,15 @@ DEF("qtest-log", HAS_ARG, QEMU_OPTION_qtest_log, "", QEMU_ARCH_ALL)
|
|||||||
|
|
||||||
#ifdef CONFIG_POSIX
|
#ifdef CONFIG_POSIX
|
||||||
DEF("run-with", HAS_ARG, QEMU_OPTION_run_with,
|
DEF("run-with", HAS_ARG, QEMU_OPTION_run_with,
|
||||||
"-run-with [async-teardown=on|off][,chroot=dir]\n"
|
"-run-with [async-teardown=on|off][,chroot=dir][user=username|uid:gid]\n"
|
||||||
" Set miscellaneous QEMU process lifecycle options:\n"
|
" Set miscellaneous QEMU process lifecycle options:\n"
|
||||||
" async-teardown=on enables asynchronous teardown (Linux only)\n"
|
" async-teardown=on enables asynchronous teardown (Linux only)\n"
|
||||||
" chroot=dir chroot to dir just before starting the VM\n",
|
" chroot=dir chroot to dir just before starting the VM\n"
|
||||||
|
" user=username switch to the specified user before starting the VM\n"
|
||||||
|
" user=uid:gid ditto, but use specified user-ID and group-ID instead\n",
|
||||||
QEMU_ARCH_ALL)
|
QEMU_ARCH_ALL)
|
||||||
SRST
|
SRST
|
||||||
``-run-with [async-teardown=on|off][,chroot=dir]``
|
``-run-with [async-teardown=on|off][,chroot=dir][user=username|uid:gid]``
|
||||||
Set QEMU process lifecycle options.
|
Set QEMU process lifecycle options.
|
||||||
|
|
||||||
``async-teardown=on`` enables asynchronous teardown. A new process called
|
``async-teardown=on`` enables asynchronous teardown. A new process called
|
||||||
@ -5013,6 +5016,10 @@ SRST
|
|||||||
``chroot=dir`` can be used for doing a chroot to the specified directory
|
``chroot=dir`` can be used for doing a chroot to the specified directory
|
||||||
immediately before starting the guest execution. This is especially useful
|
immediately before starting the guest execution. This is especially useful
|
||||||
in combination with -runas.
|
in combination with -runas.
|
||||||
|
|
||||||
|
``user=username`` or ``user=uid:gid`` can be used to drop root privileges
|
||||||
|
by switching to the specified user (via username) or user and group
|
||||||
|
(via uid:gid) immediately before starting guest execution.
|
||||||
ERST
|
ERST
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
15
system/vl.c
15
system/vl.c
@ -773,6 +773,10 @@ static QemuOptsList qemu_run_with_opts = {
|
|||||||
.name = "chroot",
|
.name = "chroot",
|
||||||
.type = QEMU_OPT_STRING,
|
.type = QEMU_OPT_STRING,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.name = "user",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},
|
||||||
{ /* end of list */ }
|
{ /* end of list */ }
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@ -3587,6 +3591,7 @@ void qemu_init(int argc, char **argv)
|
|||||||
break;
|
break;
|
||||||
#if defined(CONFIG_POSIX)
|
#if defined(CONFIG_POSIX)
|
||||||
case QEMU_OPTION_runas:
|
case QEMU_OPTION_runas:
|
||||||
|
warn_report("-runas is deprecated, use '-run-with user=...' instead");
|
||||||
if (!os_set_runas(optarg)) {
|
if (!os_set_runas(optarg)) {
|
||||||
error_report("User \"%s\" doesn't exist"
|
error_report("User \"%s\" doesn't exist"
|
||||||
" (and is not <uid>:<gid>)",
|
" (and is not <uid>:<gid>)",
|
||||||
@ -3613,6 +3618,16 @@ void qemu_init(int argc, char **argv)
|
|||||||
if (str) {
|
if (str) {
|
||||||
os_set_chroot(str);
|
os_set_chroot(str);
|
||||||
}
|
}
|
||||||
|
str = qemu_opt_get(opts, "user");
|
||||||
|
if (str) {
|
||||||
|
if (!os_set_runas(str)) {
|
||||||
|
error_report("User \"%s\" doesn't exist"
|
||||||
|
" (and is not <uid>:<gid>)",
|
||||||
|
optarg);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_POSIX */
|
#endif /* CONFIG_POSIX */
|
||||||
|
@ -212,6 +212,23 @@ void s390_feat_bitmap_to_ascii(const S390FeatBitmap features, void *opaque,
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void s390_get_deprecated_features(S390FeatBitmap features)
|
||||||
|
{
|
||||||
|
static const int feats[] = {
|
||||||
|
/* CSSKE is deprecated on newer generations */
|
||||||
|
S390_FEAT_CONDITIONAL_SSKE,
|
||||||
|
S390_FEAT_BPB,
|
||||||
|
/* Deprecated on z16 */
|
||||||
|
S390_FEAT_CONSTRAINT_TRANSACTIONAL_EXE,
|
||||||
|
S390_FEAT_TRANSACTIONAL_EXE
|
||||||
|
};
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE(feats); i++) {
|
||||||
|
set_bit(feats[i], features);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#define FEAT_GROUP_INIT(_name, _group, _desc) \
|
#define FEAT_GROUP_INIT(_name, _group, _desc) \
|
||||||
{ \
|
{ \
|
||||||
.name = _name, \
|
.name = _name, \
|
||||||
|
@ -69,6 +69,7 @@ void s390_add_from_feat_block(S390FeatBitmap features, S390FeatType type,
|
|||||||
uint8_t *data);
|
uint8_t *data);
|
||||||
void s390_feat_bitmap_to_ascii(const S390FeatBitmap features, void *opaque,
|
void s390_feat_bitmap_to_ascii(const S390FeatBitmap features, void *opaque,
|
||||||
void (*fn)(const char *name, void *opaque));
|
void (*fn)(const char *name, void *opaque));
|
||||||
|
void s390_get_deprecated_features(S390FeatBitmap features);
|
||||||
|
|
||||||
/* Definition of a CPU feature group */
|
/* Definition of a CPU feature group */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -206,6 +206,14 @@ static void cpu_info_from_model(CpuModelInfo *info, const S390CPUModel *model,
|
|||||||
} else {
|
} else {
|
||||||
info->props = QOBJECT(qdict);
|
info->props = QOBJECT(qdict);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* features flagged as deprecated */
|
||||||
|
bitmap_zero(bitmap, S390_FEAT_MAX);
|
||||||
|
s390_get_deprecated_features(bitmap);
|
||||||
|
|
||||||
|
bitmap_and(bitmap, bitmap, model->def->full_feat, S390_FEAT_MAX);
|
||||||
|
s390_feat_bitmap_to_ascii(bitmap, &info->deprecated_props, list_add_feat);
|
||||||
|
info->has_deprecated_props = !!info->deprecated_props;
|
||||||
}
|
}
|
||||||
|
|
||||||
CpuModelExpansionInfo *qmp_query_cpu_model_expansion(CpuModelExpansionType type,
|
CpuModelExpansionInfo *qmp_query_cpu_model_expansion(CpuModelExpansionType type,
|
||||||
|
@ -26,6 +26,14 @@ static const uint8_t bios_avr[] = {
|
|||||||
0x80, 0x93, 0xc6, 0x00, /* sts 0x00C6, r24 ; Output 'T' */
|
0x80, 0x93, 0xc6, 0x00, /* sts 0x00C6, r24 ; Output 'T' */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const uint8_t bios_loongarch64[] = {
|
||||||
|
0x0c, 0xc0, 0x3f, 0x14, /* lu12i.w $t0, 0x1fe00 */
|
||||||
|
0x8c, 0x81, 0x87, 0x03, /* ori $t0, $t0, 0x1e0 */
|
||||||
|
0x0d, 0x50, 0x81, 0x03, /* li.w $t1, 'T' */
|
||||||
|
0x8d, 0x01, 0x00, 0x29, /* st.b $t1, $t0, 0 */
|
||||||
|
0xff, 0xf3, 0xff, 0x53, /* b -16 # loop */
|
||||||
|
};
|
||||||
|
|
||||||
static const uint8_t kernel_mcf5208[] = {
|
static const uint8_t kernel_mcf5208[] = {
|
||||||
0x41, 0xf9, 0xfc, 0x06, 0x00, 0x00, /* lea 0xfc060000,%a0 */
|
0x41, 0xf9, 0xfc, 0x06, 0x00, 0x00, /* lea 0xfc060000,%a0 */
|
||||||
0x10, 0x3c, 0x00, 0x54, /* move.b #'T',%d0 */
|
0x10, 0x3c, 0x00, 0x54, /* move.b #'T',%d0 */
|
||||||
@ -167,6 +175,8 @@ static const testdef_t tests[] = {
|
|||||||
{ "sparc", "SS-600MP", "", "TMS390Z55" },
|
{ "sparc", "SS-600MP", "", "TMS390Z55" },
|
||||||
{ "sparc64", "sun4u", "", "UltraSPARC" },
|
{ "sparc64", "sun4u", "", "UltraSPARC" },
|
||||||
{ "s390x", "s390-ccw-virtio", "", "device" },
|
{ "s390x", "s390-ccw-virtio", "", "device" },
|
||||||
|
{ "loongarch64", "virt", "-cpu max", "TT", sizeof(bios_loongarch64),
|
||||||
|
NULL, bios_loongarch64 },
|
||||||
{ "m68k", "mcf5208evb", "", "TT", sizeof(kernel_mcf5208), kernel_mcf5208 },
|
{ "m68k", "mcf5208evb", "", "TT", sizeof(kernel_mcf5208), kernel_mcf5208 },
|
||||||
{ "m68k", "next-cube", "", "TT", sizeof(bios_nextcube), 0, bios_nextcube },
|
{ "m68k", "next-cube", "", "TT", sizeof(bios_nextcube), 0, bios_nextcube },
|
||||||
{ "microblaze", "petalogix-s3adsp1800", "", "TT",
|
{ "microblaze", "petalogix-s3adsp1800", "", "TT",
|
||||||
|
@ -139,6 +139,9 @@ qtests_hppa = ['boot-serial-test'] + \
|
|||||||
qtests_filter + \
|
qtests_filter + \
|
||||||
(config_all_devices.has_key('CONFIG_VGA') ? ['display-vga-test'] : [])
|
(config_all_devices.has_key('CONFIG_VGA') ? ['display-vga-test'] : [])
|
||||||
|
|
||||||
|
qtests_loongarch64 = qtests_filter + \
|
||||||
|
['boot-serial-test']
|
||||||
|
|
||||||
qtests_m68k = ['boot-serial-test'] + \
|
qtests_m68k = ['boot-serial-test'] + \
|
||||||
qtests_filter
|
qtests_filter
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user