From patchwork Mon Jan 21 18:51:09 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 156242 Delivered-To: patches@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp6701165jaa; Mon, 21 Jan 2019 10:51:37 -0800 (PST) X-Received: by 2002:a5d:6a42:: with SMTP id t2mr31595998wrw.50.1548096697345; Mon, 21 Jan 2019 10:51:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548096697; cv=none; d=google.com; s=arc-20160816; b=E9AcfNoyqmME4HxkG3+AxTcfzM2cOvaYVC6sJBQHyIXKvS85UItR4QqcAIwTxWUydc An05uc4BsgBArvpgKvPJcC59KP5KsTtKq7Vgzh579BLusnbkGAOh2HLX9OjhY1Hzmeqc wfi4Lui2V24gtskRXG4O7Jiiolp3r+GUXDPjR9QA4Pii2buo7w8OBj0WFSxVg1JNnG6/ 15WkpYOvGN4eREO9mjtYGf90fqGeyC0a0rDSj6vs3xDcxbVlPatgK5R78abLyswP+sfN hqI6NnS0G0Lj3nNNis9QQ/wcpUfpOKy9uCqFDYla2RY4pnNz+24m0AYR8NpBvw0krfF2 20ow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=VmHuIRIe0slMKOXr+14HFfLZdXo4lblxIN5l7d3ILAc=; b=Rwr8P8+EKacEVfBBp4L2XipNJU3v1bq8TNPiP+Qf6zIom8Xbau2sNZL84VnQ5AyO3g 4amoTjVNIm8zXKRp8UoN+oMI5iuXAH3d11H4hg6gm02grN62acos4kgICYqm60aIAEi8 RreSwZM4BIdfeqYGyIt523v0dJHPLOLc6iOp1R8vpzgUQidwJSxh2sAxsnqDhl4r3vM6 4t8gzouwcJV750s7yALLcAwBP1Fv9iEZ3MSeOpQ84MA9LygcS9fGkUHVq/ojzUpjFya3 LdHZzXFhRb2+q5YWAMJKk1zo3gk56JzDw2/P4/zwHalVNVm7kx/G9Lnog0Ft0L4AuTKI ywew== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=SesOGL77; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id r124sor5810329wma.0.2019.01.21.10.51.37 for (Google Transport Security); Mon, 21 Jan 2019 10:51:37 -0800 (PST) Received-SPF: pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=SesOGL77; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=VmHuIRIe0slMKOXr+14HFfLZdXo4lblxIN5l7d3ILAc=; b=SesOGL775fsc9/86PZIQVXi1iJ6ymEgeMQdsTAHfJr1xh8SHO19KzSSu3eNIUYmhts 01un4Q/lXFCf9G2YD66HKEQJKS8AqvREwmM/9i4cnnrnHsyQZ4UobZgM4vztejm7fjtM /a6c8+/FvgP1E1hpF9FmIdF+JD8Rkl3Xx+jcE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=VmHuIRIe0slMKOXr+14HFfLZdXo4lblxIN5l7d3ILAc=; b=SF19x7ZKQpt6TEzWOlFOCGkJihBGxjdV9Waan0kRCmE6TgoLC8nRMMd8m62r/mlnrj ZzGzUCxlhqYkR1h2MepxfuWpiS1LsRW/wa9B72nmcFFhMFANrpAgOHdslS7ltXXx8FRE 0CZ7d+dBHsTRDEhMkmCS/ILd2myvL4mmFfgJ5wPUvyZHdTC1a0q8IHRPThbsVrQcWaHk daQqDpcQICky6kI8dssAOcrdEKGEVoJ7U/hybK02cYbUAENq3dUsGAFwlV5qHp3m9NqT sL0WbaXOzHsKFs9GrJPkuMjF+/brjCCAA5K78b3y2gyDeeidykKyc4jJXPqVUjhcfsI5 lN0A== X-Gm-Message-State: AJcUukcDxN9I5iaVzIaODXvQS9pbrDNUhTNNoH+rgeZdbuVar8H+B+bs fvS2vfQ/DD9bzwNw4+tdyV5zCIvZZ2Gh3YCd X-Google-Smtp-Source: ALg8bN4SD6VtGPSe4qgq4pF/Twajt18eftHA/2OLSmOKYgGv6s48F39+LHzsyvNXAQooSX8z3h/Sag== X-Received: by 2002:a1c:cf0d:: with SMTP id f13mr559540wmg.70.1548096696872; Mon, 21 Jan 2019 10:51:36 -0800 (PST) Return-Path: Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id n82sm50386660wma.42.2019.01.21.10.51.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 21 Jan 2019 10:51:36 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Cc: patches@linaro.org Subject: [PATCH 14/23] iotkit-sysinfo: Make SYS_VERSION and SYS_CONFIG configurable Date: Mon, 21 Jan 2019 18:51:09 +0000 Message-Id: <20190121185118.18550-15-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190121185118.18550-1-peter.maydell@linaro.org> References: <20190121185118.18550-1-peter.maydell@linaro.org> MIME-Version: 1.0 The SYS_VERSION and SYS_CONFIG register values differ between the IoTKit and SSE-200. Make them configurable via QOM properties rather than hard-coded, and set them appropriately in the ARMSSE code that instantiates the IOTKIT_SYSINFO device. Signed-off-by: Peter Maydell --- include/hw/misc/iotkit-sysinfo.h | 6 ++++ hw/arm/armsse.c | 51 ++++++++++++++++++++++++++++++++ hw/misc/iotkit-sysinfo.c | 15 ++++++++-- 3 files changed, 70 insertions(+), 2 deletions(-) -- 2.20.1 Reviewed-by: Richard Henderson diff --git a/include/hw/misc/iotkit-sysinfo.h b/include/hw/misc/iotkit-sysinfo.h index 7b2e1a5e48b..d84eb203b90 100644 --- a/include/hw/misc/iotkit-sysinfo.h +++ b/include/hw/misc/iotkit-sysinfo.h @@ -14,6 +14,8 @@ * Arm IoTKit and documented in * http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ecm0601256/index.html * QEMU interface: + * + QOM property "SYS_VERSION": value to use for SYS_VERSION register + * + QOM property "SYS_CONFIG": value to use for SYS_CONFIG register * + sysbus MMIO region 0: the system information register bank */ @@ -32,6 +34,10 @@ typedef struct IoTKitSysInfo { /*< public >*/ MemoryRegion iomem; + + /* Properties */ + uint32_t sys_version; + uint32_t sys_config; } IoTKitSysInfo; #endif diff --git a/hw/arm/armsse.c b/hw/arm/armsse.c index 2eb4ea3bfe0..19cae77e770 100644 --- a/hw/arm/armsse.c +++ b/hw/arm/armsse.c @@ -18,10 +18,18 @@ #include "hw/arm/armsse.h" #include "hw/arm/arm.h" +/* Format of the System Information block SYS_CONFIG register */ +typedef enum SysConfigFormat { + IoTKitFormat, + SSE200Format, +} SysConfigFormat; + struct ARMSSEInfo { const char *name; int sram_banks; int num_cpus; + uint32_t sys_version; + SysConfigFormat sys_config_format; }; static const ARMSSEInfo armsse_variants[] = { @@ -29,9 +37,39 @@ static const ARMSSEInfo armsse_variants[] = { .name = TYPE_IOTKIT, .sram_banks = 1, .num_cpus = 1, + .sys_version = 0x41743, + .sys_config_format = IoTKitFormat, }, }; +static uint32_t armsse_sys_config_value(ARMSSE *s, const ARMSSEInfo *info) +{ + /* Return the SYS_CONFIG value for this SSE */ + uint32_t sys_config; + + switch (info->sys_config_format) { + case IoTKitFormat: + sys_config = 0; + sys_config = deposit32(sys_config, 0, 4, info->sram_banks); + sys_config = deposit32(sys_config, 4, 4, s->sram_addr_width - 12); + break; + case SSE200Format: + sys_config = 0; + sys_config = deposit32(sys_config, 0, 4, info->sram_banks); + sys_config = deposit32(sys_config, 4, 5, s->sram_addr_width); + sys_config = deposit32(sys_config, 24, 4, 2); + if (info->num_cpus > 1) { + sys_config = deposit32(sys_config, 10, 1, 1); + sys_config = deposit32(sys_config, 20, 4, info->sram_banks - 1); + sys_config = deposit32(sys_config, 28, 4, 2); + } + break; + default: + g_assert_not_reached(); + } + return sys_config; +} + /* Clock frequency in HZ of the 32KHz "slow clock" */ #define S32KCLK (32 * 1000) @@ -726,6 +764,19 @@ static void armsse_realize(DeviceState *dev, Error **errp) qdev_get_gpio_in_named(dev_apb_ppc1, "cfg_sec_resp", 0)); + object_property_set_int(OBJECT(&s->sysinfo), info->sys_version, + "SYS_VERSION", &err); + if (err) { + error_propagate(errp, err); + return; + } + object_property_set_int(OBJECT(&s->sysinfo), + armsse_sys_config_value(s, info), + "SYS_CONFIG", &err); + if (err) { + error_propagate(errp, err); + return; + } object_property_set_bool(OBJECT(&s->sysinfo), true, "realized", &err); if (err) { error_propagate(errp, err); diff --git a/hw/misc/iotkit-sysinfo.c b/hw/misc/iotkit-sysinfo.c index 78955bc45f5..026ba942613 100644 --- a/hw/misc/iotkit-sysinfo.c +++ b/hw/misc/iotkit-sysinfo.c @@ -51,15 +51,16 @@ static const int sysinfo_id[] = { static uint64_t iotkit_sysinfo_read(void *opaque, hwaddr offset, unsigned size) { + IoTKitSysInfo *s = IOTKIT_SYSINFO(opaque); uint64_t r; switch (offset) { case A_SYS_VERSION: - r = 0x41743; + r = s->sys_version; break; case A_SYS_CONFIG: - r = 0x31; + r = s->sys_config; break; case A_PID4 ... A_CID3: r = sysinfo_id[(offset - A_PID4) / 4]; @@ -94,6 +95,12 @@ static const MemoryRegionOps iotkit_sysinfo_ops = { .valid.max_access_size = 4, }; +static Property iotkit_sysinfo_props[] = { + DEFINE_PROP_UINT32("SYS_VERSION", IoTKitSysInfo, sys_version, 0), + DEFINE_PROP_UINT32("SYS_CONFIG", IoTKitSysInfo, sys_config, 0), + DEFINE_PROP_END_OF_LIST() +}; + static void iotkit_sysinfo_init(Object *obj) { SysBusDevice *sbd = SYS_BUS_DEVICE(obj); @@ -106,10 +113,14 @@ static void iotkit_sysinfo_init(Object *obj) static void iotkit_sysinfo_class_init(ObjectClass *klass, void *data) { + DeviceClass *dc = DEVICE_CLASS(klass); + /* * This device has no guest-modifiable state and so it * does not need a reset function or VMState. */ + + dc->props = iotkit_sysinfo_props; } static const TypeInfo iotkit_sysinfo_info = {