Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge tag 'pull-request-2023-06-29' of https://gitlab.com/thuth/qemu
…into staging

* Fix a compilation issue in the s390-ccw bios with Clang + binutils 2.40
* Create an initial stack frame for the main() function of the s390-ccw bios
* Clean up type definitions in the s390-ccw bios

# -----BEGIN PGP SIGNATURE-----
#
# iQJFBAABCAAvFiEEJ7iIR+7gJQEY8+q5LtnXdP5wLbUFAmSd1MwRHHRodXRoQHJl
# ZGhhdC5jb20ACgkQLtnXdP5wLbUNAg//aO7pkzKPIUXG/g8PSzzgjYu9bDTketrQ
# P08wk1jj9CQMLN6dcnVnmzPhC4EqyrZqMYvRH4qFPLJmi0m+Jq3fEEkVzKbI3baO
# 0qQX6DNJVLn6qcgvZ8+ZjkLmuWn/lN4+MH92vdUgpkCcj5y7FB4FjoaG+Z0yZxsS
# YI6gG8D/i6fnq0zsKGMzmzHCswmN4s9qnY9a4nLV0YeMnrZJjUmUUKomWv0FP5jM
# qtLf6pRtgR4u/WD9ktwjISlOn7AKQeCYgZcMu1kBnrSWDjhLytUrv8h2JqRxGOap
# nRtdFzTvgeWKJbCX9v+XLb1bqzFj/LLgoCRzUOqV1CdBKf3JycIXyLMpTJ1+kV4J
# NnzCjnfq/LSDwwCjeg3cRBUFjGkuHBZwQzBh5m4xXBqae07UhMGpWBmhIh7qgPy2
# RXox0xK8Ot/vhYxtNojOiEW0Wp4KJElB9Wxn1Vz0kX4OXRcxHu9CDazZXTKBuBGA
# YWZ9HbsquvwNMV5pgCuXzVWW3FCzrhGgtVYREwYyBIInJaEGCWKCyMAuDXb4fkWL
# eS0Mryp3AMaJ6CidK2ELWygMkKA8xDF8pKm5jgQWRhs5jirydi1B4hPeGFsm1vUI
# TYs08XuC9p66O2Ffn2Sc/uAXbe/FQ7Ce6EbGUUetpafo9FxPhbP28hPUhkcHt68Y
# tmGzqAuwgxc=
# =oWSq
# -----END PGP SIGNATURE-----
# gpg: Signature made Thu 29 Jun 2023 09:00:28 PM CEST
# gpg:                using RSA key 27B88847EEE0250118F3EAB92ED9D774FE702DB5
# gpg:                issuer "thuth@redhat.com"
# gpg: Good signature from "Thomas Huth <th.huth@gmx.de>" [undefined]
# gpg:                 aka "Thomas Huth <thuth@redhat.com>" [undefined]
# gpg:                 aka "Thomas Huth <th.huth@posteo.de>" [unknown]
# gpg:                 aka "Thomas Huth <huth@tuxfamily.org>" [undefined]
# gpg: WARNING: This key is not certified with a trusted signature!
# gpg:          There is no indication that the signature belongs to the owner.
# Primary key fingerprint: 27B8 8847 EEE0 2501 18F3  EAB9 2ED9 D774 FE70 2DB5

* tag 'pull-request-2023-06-29' of https://gitlab.com/thuth/qemu:
  pc-bios: Update the s390 bios images with the recent changes
  pc-bios/s390-ccw: Don't use __bss_start with the "larl" instruction
  pc-bios/s390-ccw: Move the stack array into start.S
  pc-bios/s390-ccw: Provide space for initial stack frame in start.S
  pc-bios/s390-ccw: Fix indentation in start.S
  pc-bios/s390-ccw/Makefile: Use -z noexecstack to silence linker warning
  pc-bios/s390-ccw: Get rid of the the __u* types
  s390-ccw: Getting rid of ulong

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
  • Loading branch information
rth7680 committed Jun 30, 2023
2 parents 3b746a4 + b806bc8 commit f788416
Show file tree
Hide file tree
Showing 15 changed files with 220 additions and 220 deletions.
Binary file modified pc-bios/s390-ccw.img
Binary file not shown.
2 changes: 1 addition & 1 deletion pc-bios/s390-ccw/Makefile
Expand Up @@ -55,7 +55,7 @@ config-cc.mak: Makefile
$(call cc-option,-march=z900,-march=z10)) 3> config-cc.mak
-include config-cc.mak

LDFLAGS += -Wl,-pie -nostdlib
LDFLAGS += -Wl,-pie -nostdlib -z noexecstack

build-all: s390-ccw.img s390-netboot.img

Expand Down
232 changes: 116 additions & 116 deletions pc-bios/s390-ccw/cio.h
Expand Up @@ -17,57 +17,57 @@
* path management control word
*/
struct pmcw {
__u32 intparm; /* interruption parameter */
__u32 qf:1; /* qdio facility */
__u32 w:1;
__u32 isc:3; /* interruption subclass */
__u32 res5:3; /* reserved zeros */
__u32 ena:1; /* enabled */
__u32 lm:2; /* limit mode */
__u32 mme:2; /* measurement-mode enable */
__u32 mp:1; /* multipath mode */
__u32 tf:1; /* timing facility */
__u32 dnv:1; /* device number valid */
__u32 dev:16; /* device number */
__u8 lpm; /* logical path mask */
__u8 pnom; /* path not operational mask */
__u8 lpum; /* last path used mask */
__u8 pim; /* path installed mask */
__u16 mbi; /* measurement-block index */
__u8 pom; /* path operational mask */
__u8 pam; /* path available mask */
__u8 chpid[8]; /* CHPID 0-7 (if available) */
__u32 unused1:8; /* reserved zeros */
__u32 st:3; /* subchannel type */
__u32 unused2:18; /* reserved zeros */
__u32 mbfc:1; /* measurement block format control */
__u32 xmwme:1; /* extended measurement word mode enable */
__u32 csense:1; /* concurrent sense; can be enabled ...*/
u32 intparm; /* interruption parameter */
u32 qf:1; /* qdio facility */
u32 w:1;
u32 isc:3; /* interruption subclass */
u32 res5:3; /* reserved zeros */
u32 ena:1; /* enabled */
u32 lm:2; /* limit mode */
u32 mme:2; /* measurement-mode enable */
u32 mp:1; /* multipath mode */
u32 tf:1; /* timing facility */
u32 dnv:1; /* device number valid */
u32 dev:16; /* device number */
u8 lpm; /* logical path mask */
u8 pnom; /* path not operational mask */
u8 lpum; /* last path used mask */
u8 pim; /* path installed mask */
u16 mbi; /* measurement-block index */
u8 pom; /* path operational mask */
u8 pam; /* path available mask */
u8 chpid[8]; /* CHPID 0-7 (if available) */
u32 unused1:8; /* reserved zeros */
u32 st:3; /* subchannel type */
u32 unused2:18; /* reserved zeros */
u32 mbfc:1; /* measurement block format control */
u32 xmwme:1; /* extended measurement word mode enable */
u32 csense:1; /* concurrent sense; can be enabled ...*/
/* ... per MSCH, however, if facility */
/* ... is not installed, this results */
/* ... in an operand exception. */
} __attribute__ ((packed));

/* Target SCHIB configuration. */
struct schib_config {
__u64 mba;
__u32 intparm;
__u16 mbi;
__u32 isc:3;
__u32 ena:1;
__u32 mme:2;
__u32 mp:1;
__u32 csense:1;
__u32 mbfc:1;
u64 mba;
u32 intparm;
u16 mbi;
u32 isc:3;
u32 ena:1;
u32 mme:2;
u32 mp:1;
u32 csense:1;
u32 mbfc:1;
} __attribute__ ((packed));

struct scsw {
__u16 flags;
__u16 ctrl;
__u32 cpa;
__u8 dstat;
__u8 cstat;
__u16 count;
u16 flags;
u16 ctrl;
u32 cpa;
u8 dstat;
u8 cstat;
u16 count;
} __attribute__ ((packed));

/* Function Control */
Expand Down Expand Up @@ -117,80 +117,80 @@ struct scsw {
typedef struct schib {
struct pmcw pmcw; /* path management control word */
struct scsw scsw; /* subchannel status word */
__u64 mba; /* measurement block address */
__u8 mda[4]; /* model dependent area */
u64 mba; /* measurement block address */
u8 mda[4]; /* model dependent area */
} __attribute__ ((packed, aligned(4))) Schib;

typedef struct subchannel_id {
union {
struct {
__u16 cssid:8;
__u16 reserved:4;
__u16 m:1;
__u16 ssid:2;
__u16 one:1;
u16 cssid:8;
u16 reserved:4;
u16 m:1;
u16 ssid:2;
u16 one:1;
};
__u16 sch_id;
u16 sch_id;
};
__u16 sch_no;
u16 sch_no;
} __attribute__ ((packed, aligned(4))) SubChannelId;

struct chsc_header {
__u16 length;
__u16 code;
u16 length;
u16 code;
} __attribute__((packed));

typedef struct chsc_area_sda {
struct chsc_header request;
__u8 reserved1:4;
__u8 format:4;
__u8 reserved2;
__u16 operation_code;
__u32 reserved3;
__u32 reserved4;
__u32 operation_data_area[252];
u8 reserved1:4;
u8 format:4;
u8 reserved2;
u16 operation_code;
u32 reserved3;
u32 reserved4;
u32 operation_data_area[252];
struct chsc_header response;
__u32 reserved5:4;
__u32 format2:4;
__u32 reserved6:24;
u32 reserved5:4;
u32 format2:4;
u32 reserved6:24;
} __attribute__((packed)) ChscAreaSda;

/*
* TPI info structure
*/
struct tpi_info {
struct subchannel_id schid;
__u32 intparm; /* interruption parameter */
__u32 adapter_IO:1;
__u32 reserved2:1;
__u32 isc:3;
__u32 reserved3:12;
__u32 int_type:3;
__u32 reserved4:12;
u32 intparm; /* interruption parameter */
u32 adapter_IO:1;
u32 reserved2:1;
u32 isc:3;
u32 reserved3:12;
u32 int_type:3;
u32 reserved4:12;
} __attribute__ ((packed, aligned(4)));

/* channel command word (format 0) */
typedef struct ccw0 {
__u8 cmd_code;
__u32 cda:24;
__u32 chainData:1;
__u32 chain:1;
__u32 sli:1;
__u32 skip:1;
__u32 pci:1;
__u32 ida:1;
__u32 suspend:1;
__u32 mida:1;
__u8 reserved;
__u16 count;
u8 cmd_code;
u32 cda:24;
u32 chainData:1;
u32 chain:1;
u32 sli:1;
u32 skip:1;
u32 pci:1;
u32 ida:1;
u32 suspend:1;
u32 mida:1;
u8 reserved;
u16 count;
} __attribute__ ((packed, aligned(8))) Ccw0;

/* channel command word (format 1) */
typedef struct ccw1 {
__u8 cmd_code;
__u8 flags;
__u16 count;
__u32 cda;
u8 cmd_code;
u8 flags;
u16 count;
u32 cda;
} __attribute__ ((packed, aligned(8))) Ccw1;

/* do_cio() CCW formats */
Expand Down Expand Up @@ -234,31 +234,31 @@ typedef struct ccw1 {
* Command-mode operation request block
*/
typedef struct cmd_orb {
__u32 intparm; /* interruption parameter */
__u32 key:4; /* flags, like key, suspend control, etc. */
__u32 spnd:1; /* suspend control */
__u32 res1:1; /* reserved */
__u32 mod:1; /* modification control */
__u32 sync:1; /* synchronize control */
__u32 fmt:1; /* format control */
__u32 pfch:1; /* prefetch control */
__u32 isic:1; /* initial-status-interruption control */
__u32 alcc:1; /* address-limit-checking control */
__u32 ssic:1; /* suppress-suspended-interr. control */
__u32 res2:1; /* reserved */
__u32 c64:1; /* IDAW/QDIO 64 bit control */
__u32 i2k:1; /* IDAW 2/4kB block size control */
__u32 lpm:8; /* logical path mask */
__u32 ils:1; /* incorrect length */
__u32 zero:6; /* reserved zeros */
__u32 orbx:1; /* ORB extension control */
__u32 cpa; /* channel program address */
u32 intparm; /* interruption parameter */
u32 key:4; /* flags, like key, suspend control, etc. */
u32 spnd:1; /* suspend control */
u32 res1:1; /* reserved */
u32 mod:1; /* modification control */
u32 sync:1; /* synchronize control */
u32 fmt:1; /* format control */
u32 pfch:1; /* prefetch control */
u32 isic:1; /* initial-status-interruption control */
u32 alcc:1; /* address-limit-checking control */
u32 ssic:1; /* suppress-suspended-interr. control */
u32 res2:1; /* reserved */
u32 c64:1; /* IDAW/QDIO 64 bit control */
u32 i2k:1; /* IDAW 2/4kB block size control */
u32 lpm:8; /* logical path mask */
u32 ils:1; /* incorrect length */
u32 zero:6; /* reserved zeros */
u32 orbx:1; /* ORB extension control */
u32 cpa; /* channel program address */
} __attribute__ ((packed, aligned(4))) CmdOrb;

struct ciw {
__u8 type;
__u8 command;
__u16 count;
u8 type;
u8 command;
u16 count;
};

#define CU_TYPE_UNKNOWN 0x0000
Expand All @@ -271,12 +271,12 @@ struct ciw {
*/
typedef struct senseid {
/* common part */
__u8 reserved; /* always 0x'FF' */
__u16 cu_type; /* control unit type */
__u8 cu_model; /* control unit model */
__u16 dev_type; /* device type */
__u8 dev_model; /* device model */
__u8 unused; /* padding byte */
u8 reserved; /* always 0x'FF' */
u16 cu_type; /* control unit type */
u8 cu_model; /* control unit model */
u16 dev_type; /* device type */
u8 dev_model; /* device model */
u8 unused; /* padding byte */
/* extended part */
struct ciw ciw[62];
} __attribute__ ((packed, aligned(4))) SenseId;
Expand Down Expand Up @@ -342,9 +342,9 @@ typedef struct SenseDataEckdDasd {
/* interruption response block */
typedef struct irb {
struct scsw scsw;
__u32 esw[5];
__u32 ecw[8];
__u32 emw[8];
u32 esw[5];
u32 ecw[8];
u32 emw[8];
} __attribute__ ((packed, aligned(4))) Irb;

/* Used for SEEK ccw commands */
Expand Down
2 changes: 1 addition & 1 deletion pc-bios/s390-ccw/helper.h
Expand Up @@ -38,7 +38,7 @@ static inline void yield(void)

static inline void sleep(unsigned int seconds)
{
ulong target = get_time_seconds() + seconds;
unsigned long target = get_time_seconds() + seconds;

while (get_time_seconds() < target) {
yield();
Expand Down
1 change: 0 additions & 1 deletion pc-bios/s390-ccw/main.c
Expand Up @@ -17,7 +17,6 @@
#include "virtio-scsi.h"
#include "dasd-ipl.h"

char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE)));
static SubChannelId blk_schid = { .one = 1 };
static char loadparm_str[LOADPARM_LEN + 1];
QemuIplParameters qipl;
Expand Down
1 change: 0 additions & 1 deletion pc-bios/s390-ccw/netmain.c
Expand Up @@ -50,7 +50,6 @@ void write_iplb_location(void) {}
/* STSI 3.2.2 offset of first vmdb + offset of uuid inside vmdb */
#define STSI322_VMDB_UUID_OFFSET ((8 + 12) * 4)

char stack[PAGE_SIZE * 8] __attribute__((aligned(PAGE_SIZE)));
IplParameterBlock iplb __attribute__((aligned(PAGE_SIZE)));
static char cfgbuf[2048];

Expand Down
12 changes: 3 additions & 9 deletions pc-bios/s390-ccw/s390-ccw.h
Expand Up @@ -17,11 +17,6 @@ typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int u32;
typedef unsigned long long u64;
typedef unsigned long ulong;
typedef unsigned char __u8;
typedef unsigned short __u16;
typedef unsigned int __u32;
typedef unsigned long long __u64;

#define true 1
#define false 0
Expand Down Expand Up @@ -55,7 +50,6 @@ void consume_io_int(void);
/* main.c */
void write_subsystem_identification(void);
void write_iplb_location(void);
extern char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE)));
unsigned int get_loadparm_index(void);
void main(void);

Expand All @@ -67,11 +61,11 @@ void sclp_get_loadparm_ascii(char *loadparm);
int sclp_read(char *str, size_t count);

/* virtio.c */
unsigned long virtio_load_direct(ulong rec_list1, ulong rec_list2,
ulong subchan_id, void *load_addr);
unsigned long virtio_load_direct(unsigned long rec_list1, unsigned long rec_list2,
unsigned long subchan_id, void *load_addr);
bool virtio_is_supported(SubChannelId schid);
int virtio_blk_setup_device(SubChannelId schid);
int virtio_read(ulong sector, void *load_addr);
int virtio_read(unsigned long sector, void *load_addr);

/* bootmap.c */
void zipl_load(void);
Expand Down

0 comments on commit f788416

Please sign in to comment.