mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
Merge tag 'pull-target-arm-20220609' of https://git.linaro.org/people/pmaydell/qemu-arm into staging
target-arm queue: * target/arm: Declare support for FEAT_RASv1p1 * target/arm: Implement FEAT_DoubleFault * Fix 'writeable' typos * xlnx_dp: Implement vblank interrupt * target/arm: Move page-table-walk code to ptw.c * target/arm: Preparatory patches for SME support # -----BEGIN PGP SIGNATURE----- # # iQJNBAABCAA3FiEE4aXFk81BneKOgxXPPCUl7RQ2DN4FAmKht40ZHHBldGVyLm1h # eWRlbGxAbGluYXJvLm9yZwAKCRA8JSXtFDYM3p/hEACkUlUhKStyMCimLZJQ2wfG # rBO6zHPNVDWtWqUy/1e5HgeU6HXqk0TXLGIbk+6/2y1wos2KGHPOIjIw0miPuZF9 # tsVvwjKlnOPecJc5tm3vxPswBK29Rp7BtNTIXSlGOcByOK1L94ern5pi29QK1ltm # rZ8vbzJTJ58vCTUkYjcnIeLWAWzgiEgVdEWwl7+3dGIr0x9uawfku/eFd0zFb5+v # TtBUz0d92te7SehtiGI9CbdQnxvSOLV/3LbAhPhG8G4tG5YwxW7aQbT/YnBVLqek # CiLuN9/Wib7UYkYpeP1dAGhqMmPmIxrwCuxFMXhzARiiyLSKZhBHRCOv5WF8wkL5 # F7j+Cx8v+A6wUQBx09Oxb9mK6EDcjiaaSqlDSoq4WvvUWVphugFyoypKTa8XZM8H # qrs+jOyODFeRz6QOiei2FG0eswvSDIFMZt8mtFC5vutSSzIaGmD/yCDU/oMfoFwC # r7O85dVhhDnyagmp1wnQaePSehoekcnN87A4Zego/LM6sGua+3GYMR5qnKnMsKgr # wSJ8nPHGK30et4qfCqdYH0FK2EoRwTc/17C5FXV5FiMXQuEPuyMRqrUFj8Iv4AZc # MqvNfJvDHS6ZXrZv4a9rFY/LkOfupC/Zsd+p3QoT3CTicebaxEr/6TTOR9vFvw3k # InzNe4cc9Be4TtyamRA1mA== # =a85M # -----END PGP SIGNATURE----- # gpg: Signature made Thu 09 Jun 2022 02:04:13 AM PDT # gpg: using RSA key E1A5C593CD419DE28E8315CF3C2525ED14360CDE # gpg: issuer "peter.maydell@linaro.org" # gpg: Good signature from "Peter Maydell <peter.maydell@linaro.org>" [full] # gpg: aka "Peter Maydell <pmaydell@gmail.com>" [full] # gpg: aka "Peter Maydell <pmaydell@chiark.greenend.org.uk>" [full] * tag 'pull-target-arm-20220609' of https://git.linaro.org/people/pmaydell/qemu-arm: (55 commits) target/arm: Add ID_AA64SMFR0_EL1 target/arm: Add isar_feature_aa64_sme target/arm: Export bfdotadd from vec_helper.c target/arm: Move expand_pred_h to vec_internal.h target/arm: Use expand_pred_b in mve_helper.c target/arm: Move expand_pred_b to vec_internal.h target/arm: Export sve contiguous ldst support functions target/arm: Split out load/store primitives to sve_ldst_internal.h target/arm: Rename sve_zcr_len_for_el to sve_vqm1_for_el target/arm: Use uint32_t instead of bitmap for sve vq's target/arm: Merge aarch64_sve_zcr_get_valid_len into caller target/arm: Do not use aarch64_sve_zcr_get_valid_len in reset target/arm: Hoist arm_is_el2_enabled check in sve_exception_el target/arm: Use el_is_in_host for sve_exception_el target/arm: Use el_is_in_host for sve_zcr_len_for_el target/arm: Add el_is_in_host target/arm: Remove fp checks from sve_exception_el target/arm: Remove route_to_el2 check from sve_exception_el linux-user/aarch64: Introduce sve_vq target/arm: Rename TBFLAG_A64 ZCR_LEN to VL ... Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
@@ -120,12 +120,12 @@ static void hvf_set_phys_mem(MemoryRegionSection *section, bool add)
|
||||
{
|
||||
hvf_slot *mem;
|
||||
MemoryRegion *area = section->mr;
|
||||
bool writeable = !area->readonly && !area->rom_device;
|
||||
bool writable = !area->readonly && !area->rom_device;
|
||||
hv_memory_flags_t flags;
|
||||
uint64_t page_size = qemu_real_host_page_size();
|
||||
|
||||
if (!memory_region_is_ram(area)) {
|
||||
if (writeable) {
|
||||
if (writable) {
|
||||
return;
|
||||
} else if (!memory_region_is_romd(area)) {
|
||||
/*
|
||||
|
||||
+2
-2
@@ -1346,13 +1346,13 @@ static void kvm_set_phys_mem(KVMMemoryListener *kml,
|
||||
KVMSlot *mem;
|
||||
int err;
|
||||
MemoryRegion *mr = section->mr;
|
||||
bool writeable = !mr->readonly && !mr->rom_device;
|
||||
bool writable = !mr->readonly && !mr->rom_device;
|
||||
hwaddr start_addr, size, slot_size, mr_offset;
|
||||
ram_addr_t ram_start_offset;
|
||||
void *ram;
|
||||
|
||||
if (!memory_region_is_ram(mr)) {
|
||||
if (writeable || !kvm_readonly_mem_allowed) {
|
||||
if (writable || !kvm_readonly_mem_allowed) {
|
||||
return;
|
||||
} else if (!mr->romd_mode) {
|
||||
/* If the memory device is not in romd_mode, then we actually want
|
||||
|
||||
@@ -101,10 +101,10 @@ MMUAccessType adjust_signal_pc(uintptr_t *pc, bool is_write)
|
||||
* Return true if the write fault has been handled, and should be re-tried.
|
||||
*
|
||||
* Note that it is important that we don't call page_unprotect() unless
|
||||
* this is really a "write to nonwriteable page" fault, because
|
||||
* this is really a "write to nonwritable page" fault, because
|
||||
* page_unprotect() assumes that if it is called for an access to
|
||||
* a page that's writeable this means we had two threads racing and
|
||||
* another thread got there first and already made the page writeable;
|
||||
* a page that's writable this means we had two threads racing and
|
||||
* another thread got there first and already made the page writable;
|
||||
* so we will retry the access. If we were to call page_unprotect()
|
||||
* for some other kind of fault that should really be passed to the
|
||||
* guest, we'd end up in an infinite loop of retrying the faulting access.
|
||||
|
||||
@@ -222,7 +222,7 @@ Virtio device config space
|
||||
:size: a 32-bit configuration space access size in bytes
|
||||
|
||||
:flags: a 32-bit value:
|
||||
- 0: Vhost front-end messages used for writeable fields
|
||||
- 0: Vhost front-end messages used for writable fields
|
||||
- 1: Vhost front-end messages used for live migration
|
||||
|
||||
:payload: Size bytes array holding the contents of the virtio
|
||||
|
||||
@@ -153,7 +153,7 @@ change the contents of the memory at runtime, specifically when starting a
|
||||
backed-up or snapshotted image. In order to do this, QEMU must know the
|
||||
address that has been allocated.
|
||||
|
||||
The mechanism chosen for this memory sharing is writeable fw_cfg blobs.
|
||||
The mechanism chosen for this memory sharing is writable fw_cfg blobs.
|
||||
These are data object that are visible to both QEMU and guests, and are
|
||||
addressable as sequential files.
|
||||
|
||||
@@ -164,7 +164,7 @@ Two fw_cfg blobs are used in this case:
|
||||
/etc/vmgenid_guid - contains the actual VM Generation ID GUID
|
||||
- read-only to the guest
|
||||
/etc/vmgenid_addr - contains the address of the downloaded vmgenid blob
|
||||
- writeable by the guest
|
||||
- writable by the guest
|
||||
|
||||
|
||||
QEMU sends the following commands to the guest at startup:
|
||||
|
||||
@@ -23,6 +23,7 @@ the following architecture extensions:
|
||||
- FEAT_Debugv8p2 (Debug changes for v8.2)
|
||||
- FEAT_Debugv8p4 (Debug changes for v8.4)
|
||||
- FEAT_DotProd (Advanced SIMD dot product instructions)
|
||||
- FEAT_DoubleFault (Double Fault Extension)
|
||||
- FEAT_FCMA (Floating-point complex number instructions)
|
||||
- FEAT_FHM (Floating-point half-precision multiplication instructions)
|
||||
- FEAT_FP16 (Half-precision floating-point data processing)
|
||||
@@ -52,6 +53,7 @@ the following architecture extensions:
|
||||
- FEAT_PMUv3p1 (PMU Extensions v3.1)
|
||||
- FEAT_PMUv3p4 (PMU Extensions v3.4)
|
||||
- FEAT_RAS (Reliability, availability, and serviceability)
|
||||
- FEAT_RASv1p1 (RAS Extension v1.1)
|
||||
- FEAT_RDM (Advanced SIMD rounding double multiply accumulate instructions)
|
||||
- FEAT_RNG (Random number generator)
|
||||
- FEAT_S2FWB (Stage 2 forced Write-Back)
|
||||
|
||||
+1
-1
@@ -249,7 +249,7 @@ void build_ghes_error_table(GArray *hardware_errors, BIOSLinker *linker)
|
||||
for (i = 0; i < ACPI_GHES_ERROR_SOURCE_COUNT; i++) {
|
||||
/*
|
||||
* Initialize the value of read_ack_register to 1, so GHES can be
|
||||
* writeable after (re)boot.
|
||||
* writable after (re)boot.
|
||||
* ACPI 6.2: 18.3.2.8 Generic Hardware Error Source version 2
|
||||
* (GHESv2 - Type 10)
|
||||
*/
|
||||
|
||||
@@ -60,10 +60,10 @@
|
||||
#define SERDES_SIZE 0x20000
|
||||
|
||||
#define DP_ADDR 0xfd4a0000
|
||||
#define DP_IRQ 113
|
||||
#define DP_IRQ 0x77
|
||||
|
||||
#define DPDMA_ADDR 0xfd4c0000
|
||||
#define DPDMA_IRQ 116
|
||||
#define DPDMA_IRQ 0x7a
|
||||
|
||||
#define APU_ADDR 0xfd5c0000
|
||||
#define APU_IRQ 153
|
||||
|
||||
+37
-12
@@ -114,6 +114,7 @@
|
||||
#define DP_TX_N_AUD (0x032C >> 2)
|
||||
#define DP_TX_AUDIO_EXT_DATA(n) ((0x0330 + 4 * n) >> 2)
|
||||
#define DP_INT_STATUS (0x03A0 >> 2)
|
||||
#define DP_INT_VBLNK_START (1 << 13)
|
||||
#define DP_INT_MASK (0x03A4 >> 2)
|
||||
#define DP_INT_EN (0x03A8 >> 2)
|
||||
#define DP_INT_DS (0x03AC >> 2)
|
||||
@@ -260,7 +261,7 @@ typedef enum DPVideoFmt DPVideoFmt;
|
||||
|
||||
static const VMStateDescription vmstate_dp = {
|
||||
.name = TYPE_XLNX_DP,
|
||||
.version_id = 1,
|
||||
.version_id = 2,
|
||||
.fields = (VMStateField[]){
|
||||
VMSTATE_UINT32_ARRAY(core_registers, XlnxDPState,
|
||||
DP_CORE_REG_ARRAY_SIZE),
|
||||
@@ -270,10 +271,15 @@ static const VMStateDescription vmstate_dp = {
|
||||
DP_VBLEND_REG_ARRAY_SIZE),
|
||||
VMSTATE_UINT32_ARRAY(audio_registers, XlnxDPState,
|
||||
DP_AUDIO_REG_ARRAY_SIZE),
|
||||
VMSTATE_PTIMER(vblank, XlnxDPState),
|
||||
VMSTATE_END_OF_LIST()
|
||||
}
|
||||
};
|
||||
|
||||
#define DP_VBLANK_PTIMER_POLICY (PTIMER_POLICY_WRAP_AFTER_ONE_PERIOD | \
|
||||
PTIMER_POLICY_CONTINUOUS_TRIGGER | \
|
||||
PTIMER_POLICY_NO_IMMEDIATE_TRIGGER)
|
||||
|
||||
static void xlnx_dp_update_irq(XlnxDPState *s);
|
||||
|
||||
static uint64_t xlnx_dp_audio_read(void *opaque, hwaddr offset, unsigned size)
|
||||
@@ -773,6 +779,13 @@ static void xlnx_dp_write(void *opaque, hwaddr offset, uint64_t value,
|
||||
break;
|
||||
case DP_TRANSMITTER_ENABLE:
|
||||
s->core_registers[offset] = value & 0x01;
|
||||
ptimer_transaction_begin(s->vblank);
|
||||
if (value & 0x1) {
|
||||
ptimer_run(s->vblank, 0);
|
||||
} else {
|
||||
ptimer_stop(s->vblank);
|
||||
}
|
||||
ptimer_transaction_commit(s->vblank);
|
||||
break;
|
||||
case DP_FORCE_SCRAMBLER_RESET:
|
||||
/*
|
||||
@@ -876,7 +889,7 @@ static void xlnx_dp_write(void *opaque, hwaddr offset, uint64_t value,
|
||||
xlnx_dp_update_irq(s);
|
||||
break;
|
||||
case DP_INT_DS:
|
||||
s->core_registers[DP_INT_MASK] |= ~value;
|
||||
s->core_registers[DP_INT_MASK] |= value;
|
||||
xlnx_dp_update_irq(s);
|
||||
break;
|
||||
default:
|
||||
@@ -1177,9 +1190,6 @@ static void xlnx_dp_update_display(void *opaque)
|
||||
return;
|
||||
}
|
||||
|
||||
s->core_registers[DP_INT_STATUS] |= (1 << 13);
|
||||
xlnx_dp_update_irq(s);
|
||||
|
||||
xlnx_dpdma_trigger_vsync_irq(s->dpdma);
|
||||
|
||||
/*
|
||||
@@ -1219,19 +1229,22 @@ static void xlnx_dp_init(Object *obj)
|
||||
SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
|
||||
XlnxDPState *s = XLNX_DP(obj);
|
||||
|
||||
memory_region_init(&s->container, obj, TYPE_XLNX_DP, 0xC050);
|
||||
memory_region_init(&s->container, obj, TYPE_XLNX_DP, DP_CONTAINER_SIZE);
|
||||
|
||||
memory_region_init_io(&s->core_iomem, obj, &dp_ops, s, TYPE_XLNX_DP
|
||||
".core", 0x3AF);
|
||||
memory_region_add_subregion(&s->container, 0x0000, &s->core_iomem);
|
||||
".core", sizeof(s->core_registers));
|
||||
memory_region_add_subregion(&s->container, DP_CORE_REG_OFFSET,
|
||||
&s->core_iomem);
|
||||
|
||||
memory_region_init_io(&s->vblend_iomem, obj, &vblend_ops, s, TYPE_XLNX_DP
|
||||
".v_blend", 0x1DF);
|
||||
memory_region_add_subregion(&s->container, 0xA000, &s->vblend_iomem);
|
||||
".v_blend", sizeof(s->vblend_registers));
|
||||
memory_region_add_subregion(&s->container, DP_VBLEND_REG_OFFSET,
|
||||
&s->vblend_iomem);
|
||||
|
||||
memory_region_init_io(&s->avbufm_iomem, obj, &avbufm_ops, s, TYPE_XLNX_DP
|
||||
".av_buffer_manager", 0x238);
|
||||
memory_region_add_subregion(&s->container, 0xB000, &s->avbufm_iomem);
|
||||
".av_buffer_manager", sizeof(s->avbufm_registers));
|
||||
memory_region_add_subregion(&s->container, DP_AVBUF_REG_OFFSET,
|
||||
&s->avbufm_iomem);
|
||||
|
||||
memory_region_init_io(&s->audio_iomem, obj, &audio_ops, s, TYPE_XLNX_DP
|
||||
".audio", sizeof(s->audio_registers));
|
||||
@@ -1272,6 +1285,14 @@ static void xlnx_dp_finalize(Object *obj)
|
||||
fifo8_destroy(&s->rx_fifo);
|
||||
}
|
||||
|
||||
static void vblank_hit(void *opaque)
|
||||
{
|
||||
XlnxDPState *s = XLNX_DP(opaque);
|
||||
|
||||
s->core_registers[DP_INT_STATUS] |= DP_INT_VBLNK_START;
|
||||
xlnx_dp_update_irq(s);
|
||||
}
|
||||
|
||||
static void xlnx_dp_realize(DeviceState *dev, Error **errp)
|
||||
{
|
||||
XlnxDPState *s = XLNX_DP(dev);
|
||||
@@ -1306,6 +1327,10 @@ static void xlnx_dp_realize(DeviceState *dev, Error **errp)
|
||||
&as);
|
||||
AUD_set_volume_out(s->amixer_output_stream, 0, 255, 255);
|
||||
xlnx_dp_audio_activate(s);
|
||||
s->vblank = ptimer_init(vblank_hit, s, DP_VBLANK_PTIMER_POLICY);
|
||||
ptimer_transaction_begin(s->vblank);
|
||||
ptimer_set_freq(s->vblank, 30);
|
||||
ptimer_transaction_commit(s->vblank);
|
||||
}
|
||||
|
||||
static void xlnx_dp_reset(DeviceState *dev)
|
||||
|
||||
@@ -2047,7 +2047,7 @@ static void icc_ctlr_el3_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||
cs->icc_ctlr_el1[GICV3_S] |= ICC_CTLR_EL1_CBPR;
|
||||
}
|
||||
|
||||
/* The only bit stored in icc_ctlr_el3 which is writeable is EOIMODE_EL3: */
|
||||
/* The only bit stored in icc_ctlr_el3 which is writable is EOIMODE_EL3: */
|
||||
mask = ICC_CTLR_EL3_EOIMODE_EL3;
|
||||
|
||||
cs->icc_ctlr_el3 &= ~mask;
|
||||
|
||||
@@ -611,7 +611,7 @@ static bool gicd_writel(GICv3State *s, hwaddr offset,
|
||||
if (value & mask & GICD_CTLR_DS) {
|
||||
/* We just set DS, so the ARE_NS and EnG1S bits are now RES0.
|
||||
* Note that this is a one-way transition because if DS is set
|
||||
* then it's not writeable, so it can only go back to 0 with a
|
||||
* then it's not writable, so it can only go back to 0 with a
|
||||
* hardware reset.
|
||||
*/
|
||||
s->gicd_ctlr &= ~(GICD_CTLR_EN_GRP1S | GICD_CTLR_ARE_NS);
|
||||
|
||||
@@ -257,7 +257,7 @@ static void gicr_write_vpendbaser(GICv3CPUState *cs, uint64_t newval)
|
||||
|
||||
/*
|
||||
* The DIRTY bit is read-only and for us is always zero;
|
||||
* other fields are writeable.
|
||||
* other fields are writable.
|
||||
*/
|
||||
newval &= R_GICR_VPENDBASER_INNERCACHE_MASK |
|
||||
R_GICR_VPENDBASER_SHAREABILITY_MASK |
|
||||
@@ -491,7 +491,7 @@ static MemTxResult gicr_writel(GICv3CPUState *cs, hwaddr offset,
|
||||
/* RAZ/WI for our implementation */
|
||||
return MEMTX_OK;
|
||||
case GICR_WAKER:
|
||||
/* Only the ProcessorSleep bit is writeable. When the guest sets
|
||||
/* Only the ProcessorSleep bit is writable. When the guest sets
|
||||
* it it requests that we transition the channel between the
|
||||
* redistributor and the cpu interface to quiescent, and that
|
||||
* we set the ChildrenAsleep bit once the inteface has reached the
|
||||
|
||||
@@ -463,7 +463,7 @@ static void riscv_aclint_swi_realize(DeviceState *dev, Error **errp)
|
||||
/* Claim software interrupt bits */
|
||||
for (i = 0; i < swi->num_harts; i++) {
|
||||
RISCVCPU *cpu = RISCV_CPU(qemu_get_cpu(swi->hartid_base + i));
|
||||
/* We don't claim mip.SSIP because it is writeable by software */
|
||||
/* We don't claim mip.SSIP because it is writable by software */
|
||||
if (riscv_cpu_claim_interrupts(cpu, swi->sswi ? 0 : MIP_MSIP) < 0) {
|
||||
error_report("MSIP already claimed");
|
||||
exit(1);
|
||||
|
||||
@@ -646,7 +646,7 @@ static void riscv_aplic_write(void *opaque, hwaddr addr, uint64_t value,
|
||||
}
|
||||
|
||||
if (addr == APLIC_DOMAINCFG) {
|
||||
/* Only IE bit writeable at the moment */
|
||||
/* Only IE bit writable at the moment */
|
||||
value &= APLIC_DOMAINCFG_IE;
|
||||
aplic->domaincfg = value;
|
||||
} else if ((APLIC_SOURCECFG_BASE <= addr) &&
|
||||
|
||||
+1
-1
@@ -456,7 +456,7 @@ static int shpc_cap_add_config(PCIDevice *d, Error **errp)
|
||||
pci_set_byte(config + SHPC_CAP_CxP, 0);
|
||||
pci_set_long(config + SHPC_CAP_DWORD_DATA, 0);
|
||||
d->shpc->cap = config_offset;
|
||||
/* Make dword select and data writeable. */
|
||||
/* Make dword select and data writable. */
|
||||
pci_set_byte(d->wmask + config_offset + SHPC_CAP_DWORD_SELECT, 0xff);
|
||||
pci_set_long(d->wmask + config_offset + SHPC_CAP_DWORD_DATA, 0xffffffff);
|
||||
return 0;
|
||||
|
||||
+1
-1
@@ -633,7 +633,7 @@ struct mfi_ctrl_props {
|
||||
* metadata and user data
|
||||
* 1=5%, 2=10%, 3=15% and so on
|
||||
*/
|
||||
uint8_t viewSpace; /* snapshot writeable VIEWs
|
||||
uint8_t viewSpace; /* snapshot writable VIEWs
|
||||
* capacity as a % of source LD
|
||||
* capacity. 0=READ only
|
||||
* 1=5%, 2=10%, 3=15% and so on
|
||||
|
||||
@@ -165,7 +165,7 @@ static IOMMUTLBEntry sun4u_translate_iommu(IOMMUMemoryRegion *iommu,
|
||||
}
|
||||
|
||||
if (tte & IOMMU_TTE_DATA_W) {
|
||||
/* Writeable */
|
||||
/* Writable */
|
||||
ret.perm = IOMMU_RW;
|
||||
} else {
|
||||
ret.perm = IOMMU_RO;
|
||||
|
||||
@@ -324,7 +324,7 @@ static void sse_timer_write(void *opaque, hwaddr offset, uint64_t value,
|
||||
{
|
||||
uint32_t old_ctl = s->cntp_aival_ctl;
|
||||
|
||||
/* EN bit is writeable; CLR bit is write-0-to-clear, write-1-ignored */
|
||||
/* EN bit is writable; CLR bit is write-0-to-clear, write-1-ignored */
|
||||
s->cntp_aival_ctl &= ~R_CNTP_AIVAL_CTL_EN_MASK;
|
||||
s->cntp_aival_ctl |= value & R_CNTP_AIVAL_CTL_EN_MASK;
|
||||
if (!(value & R_CNTP_AIVAL_CTL_CLR_MASK)) {
|
||||
|
||||
@@ -35,14 +35,20 @@
|
||||
#include "hw/dma/xlnx_dpdma.h"
|
||||
#include "audio/audio.h"
|
||||
#include "qom/object.h"
|
||||
#include "hw/ptimer.h"
|
||||
|
||||
#define AUD_CHBUF_MAX_DEPTH (32 * KiB)
|
||||
#define MAX_QEMU_BUFFER_SIZE (4 * KiB)
|
||||
|
||||
#define DP_CORE_REG_ARRAY_SIZE (0x3AF >> 2)
|
||||
#define DP_CORE_REG_OFFSET (0x0000)
|
||||
#define DP_CORE_REG_ARRAY_SIZE (0x3B0 >> 2)
|
||||
#define DP_AVBUF_REG_OFFSET (0xB000)
|
||||
#define DP_AVBUF_REG_ARRAY_SIZE (0x238 >> 2)
|
||||
#define DP_VBLEND_REG_ARRAY_SIZE (0x1DF >> 2)
|
||||
#define DP_VBLEND_REG_OFFSET (0xA000)
|
||||
#define DP_VBLEND_REG_ARRAY_SIZE (0x1E0 >> 2)
|
||||
#define DP_AUDIO_REG_OFFSET (0xC000)
|
||||
#define DP_AUDIO_REG_ARRAY_SIZE (0x50 >> 2)
|
||||
#define DP_CONTAINER_SIZE (0xC050)
|
||||
|
||||
struct PixmanPlane {
|
||||
pixman_format_code_t format;
|
||||
@@ -102,6 +108,8 @@ struct XlnxDPState {
|
||||
*/
|
||||
DPCDState *dpcd;
|
||||
I2CDDCState *edid;
|
||||
|
||||
ptimer_state *vblank;
|
||||
};
|
||||
|
||||
#define TYPE_XLNX_DP "xlnx.v-dp"
|
||||
|
||||
@@ -315,7 +315,7 @@ static int target_restore_sigframe(CPUARMState *env,
|
||||
|
||||
case TARGET_SVE_MAGIC:
|
||||
if (cpu_isar_feature(aa64_sve, env_archcpu(env))) {
|
||||
vq = (env->vfp.zcr_el[1] & 0xf) + 1;
|
||||
vq = sve_vq(env);
|
||||
sve_size = QEMU_ALIGN_UP(TARGET_SVE_SIG_CONTEXT_SIZE(vq), 16);
|
||||
if (!sve && size == sve_size) {
|
||||
sve = (struct target_sve_context *)ctx;
|
||||
@@ -434,7 +434,7 @@ static void target_setup_frame(int usig, struct target_sigaction *ka,
|
||||
|
||||
/* SVE state needs saving only if it exists. */
|
||||
if (cpu_isar_feature(aa64_sve, env_archcpu(env))) {
|
||||
vq = (env->vfp.zcr_el[1] & 0xf) + 1;
|
||||
vq = sve_vq(env);
|
||||
sve_size = QEMU_ALIGN_UP(TARGET_SVE_SIG_CONTEXT_SIZE(vq), 16);
|
||||
sve_ofs = alloc_sigframe_space(sve_size, &layout);
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user