From patchwork Wed Jan 18 22:38:41 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Artyom Tarasenko X-Patchwork-Id: 716911 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3v3jTX05Zyz9t23 for ; Thu, 19 Jan 2017 10:14:08 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="iqDWjnjS"; dkim-atps=neutral Received: from localhost ([::1]:44977 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cTzQb-0001S0-6m for incoming@patchwork.ozlabs.org; Wed, 18 Jan 2017 18:14:05 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37328) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cTytb-00070I-GI for qemu-devel@nongnu.org; Wed, 18 Jan 2017 17:40:00 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cTyta-00034f-LP for qemu-devel@nongnu.org; Wed, 18 Jan 2017 17:39:59 -0500 Received: from mail-wm0-x243.google.com ([2a00:1450:400c:c09::243]:33257) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1cTyta-000347-F1 for qemu-devel@nongnu.org; Wed, 18 Jan 2017 17:39:58 -0500 Received: by mail-wm0-x243.google.com with SMTP id r144so7569941wme.0 for ; Wed, 18 Jan 2017 14:39:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=iauQPdCNi5Q3cvV5XDHOCDyyMrhx2dcEW2mHtyZodRA=; b=iqDWjnjS49li4BH2kpRbx/j/3qPsewfa5kla7w4s5hRh7JJAzXChW+x16QUf1DhpCX 6/Ul5l/LAtw+mXKTxQec20B4yewZojSxFaZDMBteX9EWKCN6X4U2midHkA+4qFJavUHO FCO8tw70d05rHtwbEHu1s7Hce7f2vLUxPUrU4Mh2ZgPcZw8KiFMG6c0evv1vxiRtobLe wKHfwmPBPfXGMv2VSAIuIxsyMsgryhuoiNKZXHTmvF+7a2jRilteyJI57wvO48dGHWt6 n0OdhZMyjgEqp4v1Eka7nMuXVRxIimlPG53VKrV3jFEZuD8dF07Ee6sEr1/VpvAntYCT BDtQ== 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; bh=iauQPdCNi5Q3cvV5XDHOCDyyMrhx2dcEW2mHtyZodRA=; b=T7tGkSrlCzHvyaXPSEzkuqzjrUQZi0NHijC4TOwQ5JZTiaNDtBZpSiUGSpfSUjYHxR 4eVHYJKMF5MGacJn3HXrSwSXSz8hcpaCH22qAiPFLr2CvuMlaMQjxYljK6y+Ybhr8v5n IZNxOTeQy5XbdPIMS7Ztj7e3yXHpXtySw+jGsWK3BJGWLwNaDG7LQm/zYIrXUL9Q68b2 r9Z7Gb3VxW/IC/Vwn254vZJnqLgCTsLXANnIV1N4KTKPS4uHVthBnahX3cwPpY2utpRP nh7eNryN1TRHi7OaRUaYmp1MDWIOZfcZ03MtYjC0wn6D+V0qf/tsn6ycxZuNM8K0/BWd 8paw== X-Gm-Message-State: AIkVDXJEscnjjzWKdFc+lLBNOg61w0eN5pcXnRACDwkDxyZ4IKjwx2PVq5xRvOl1REjzYg== X-Received: by 10.28.95.87 with SMTP id t84mr21213278wmb.135.1484779197418; Wed, 18 Jan 2017 14:39:57 -0800 (PST) Received: from localhost (x4e33e2b8.dyn.telefonica.de. [78.51.226.184]) by smtp.gmail.com with ESMTPSA id c9sm7954451wmi.16.2017.01.18.14.39.56 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 18 Jan 2017 14:39:56 -0800 (PST) From: Artyom Tarasenko To: peter.maydell@linaro.org Date: Wed, 18 Jan 2017 23:38:41 +0100 Message-Id: <1484779123-18968-29-git-send-email-atar4qemu@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1484779123-18968-1-git-send-email-atar4qemu@gmail.com> References: <1484779123-18968-1-git-send-email-atar4qemu@gmail.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2a00:1450:400c:c09::243 Subject: [Qemu-devel] [PULL 28/30] target-sparc: implement sun4v RTC X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: mark.cave-ayland@ilande.co.uk, qemu-devel@nongnu.org, Artyom Tarasenko , rth@twiddle.net Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Artyom Tarasenko --- MAINTAINERS | 6 +++ hw/timer/Makefile.objs | 2 + hw/timer/sun4v-rtc.c | 102 +++++++++++++++++++++++++++++++++++++++++++ include/hw/timer/sun4v-rtc.h | 1 + 4 files changed, 111 insertions(+) create mode 100644 hw/timer/sun4v-rtc.c create mode 100644 include/hw/timer/sun4v-rtc.h diff --git a/MAINTAINERS b/MAINTAINERS index 1444b26..54588e5 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1098,6 +1098,12 @@ F: hw/nvram/chrp_nvram.c F: include/hw/nvram/chrp_nvram.h F: tests/prom-env-test.c +sun4v RTC +M: Artyom Tarasenko +S: Maintained +F: hw/timer/sun4v-rtc.c +F: include/hw/timer/sun4v-rtc.h + Subsystems ---------- Audio diff --git a/hw/timer/Makefile.objs b/hw/timer/Makefile.objs index 7ba8c23..c1e93a3 100644 --- a/hw/timer/Makefile.objs +++ b/hw/timer/Makefile.objs @@ -34,3 +34,5 @@ obj-$(CONFIG_ALLWINNER_A10_PIT) += allwinner-a10-pit.o common-obj-$(CONFIG_STM32F2XX_TIMER) += stm32f2xx_timer.o common-obj-$(CONFIG_ASPEED_SOC) += aspeed_timer.o + +common-obj-$(CONFIG_SUN4V_RTC) += sun4v-rtc.o diff --git a/hw/timer/sun4v-rtc.c b/hw/timer/sun4v-rtc.c new file mode 100644 index 0000000..82e9e14 --- /dev/null +++ b/hw/timer/sun4v-rtc.c @@ -0,0 +1,102 @@ +/* + * QEMU sun4v Real Time Clock device + * + * The sun4v_rtc device (sun4v tod clock) + * + * Copyright (c) 2016 Artyom Tarasenko + * + * This code is licensed under the GNU GPL v3 or (at your option) any later + * version. + */ + +#include "qemu/osdep.h" +#include "hw/hw.h" +#include "hw/sysbus.h" +#include "qemu/timer.h" +#include "hw/timer/sun4v-rtc.h" + +//#define DEBUG_SUN4V_RTC + +#ifdef DEBUG_SUN4V_RTC +#define DPRINTF(fmt, ...) \ + do { printf("sun4v_rtc: " fmt , ## __VA_ARGS__); } while (0) +#else +#define DPRINTF(fmt, ...) do {} while (0) +#endif + +#define TYPE_SUN4V_RTC "sun4v_rtc" +#define SUN4V_RTC(obj) OBJECT_CHECK(Sun4vRtc, (obj), TYPE_SUN4V_RTC) + +typedef struct Sun4vRtc { + SysBusDevice parent_obj; + + MemoryRegion iomem; +} Sun4vRtc; + +static uint64_t sun4v_rtc_read(void *opaque, hwaddr addr, + unsigned size) +{ + uint64_t val = qemu_clock_get_ms(QEMU_CLOCK_REALTIME) / 1000; + if (!(addr & 4ULL)) { + /* accessing the high 32 bits */ + val >>= 32; + } + DPRINTF("read from " TARGET_FMT_plx " val %lx\n", addr, val); + return val; +} + +static void sun4v_rtc_write(void *opaque, hwaddr addr, + uint64_t val, unsigned size) +{ + DPRINTF("write 0x%x to " TARGET_FMT_plx "\n", (unsigned)val, addr); +} + +static const MemoryRegionOps sun4v_rtc_ops = { + .read = sun4v_rtc_read, + .write = sun4v_rtc_write, + .endianness = DEVICE_NATIVE_ENDIAN, +}; + +void sun4v_rtc_init(hwaddr addr) +{ + DeviceState *dev; + SysBusDevice *s; + + dev = qdev_create(NULL, TYPE_SUN4V_RTC); + s = SYS_BUS_DEVICE(dev); + + qdev_init_nofail(dev); + + sysbus_mmio_map(s, 0, addr); +} + +static int sun4v_rtc_init1(SysBusDevice *dev) +{ + Sun4vRtc *s = SUN4V_RTC(dev); + + memory_region_init_io(&s->iomem, OBJECT(s), &sun4v_rtc_ops, s, + "sun4v-rtc", 0x08ULL); + sysbus_init_mmio(dev, &s->iomem); + return 0; +} + +static void sun4v_rtc_class_init(ObjectClass *klass, void *data) +{ + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = sun4v_rtc_init1; +} + +static const TypeInfo sun4v_rtc_info = { + .name = TYPE_SUN4V_RTC, + .parent = TYPE_SYS_BUS_DEVICE, + .instance_size = sizeof(Sun4vRtc), + .class_init = sun4v_rtc_class_init, +}; + +static void sun4v_rtc_register_types(void) +{ + type_register_static(&sun4v_rtc_info); +} + +type_init(sun4v_rtc_register_types) diff --git a/include/hw/timer/sun4v-rtc.h b/include/hw/timer/sun4v-rtc.h new file mode 100644 index 0000000..407278f --- /dev/null +++ b/include/hw/timer/sun4v-rtc.h @@ -0,0 +1 @@ +void sun4v_rtc_init(hwaddr addr);