From patchwork Mon Dec 16 10:02:58 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Antony Pavlov X-Patchwork-Id: 301597 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 326CF2C007A for ; Mon, 16 Dec 2013 20:58:10 +1100 (EST) Received: from localhost ([::1]:54935 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VsUwB-0001P9-EM for incoming@patchwork.ozlabs.org; Mon, 16 Dec 2013 04:58:07 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46760) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VsUty-0006t1-HY for qemu-devel@nongnu.org; Mon, 16 Dec 2013 04:55:55 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VsUtt-0001et-BY for qemu-devel@nongnu.org; Mon, 16 Dec 2013 04:55:50 -0500 Received: from mail-lb0-x232.google.com ([2a00:1450:4010:c04::232]:50513) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VsUts-0001eX-D7 for qemu-devel@nongnu.org; Mon, 16 Dec 2013 04:55:45 -0500 Received: by mail-lb0-f178.google.com with SMTP id c11so743226lbj.37 for ; Mon, 16 Dec 2013 01:55:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-type:content-transfer-encoding; bh=4dIcBChA1yF93/P56fpapyR3PZy5BPzxieUoctZNAwg=; b=Jx4eljcqrIh8NWOxq21bRKj+UYoFrohG/pAoChTI4N33VDzUxCI8znKWM/+LCNvolv FEqPqPDBL8Z8hHIbScnnEthJbFdp3WV4HS2h3MpTjpx4dZ8iApcUpvZExVa6CRsgwEjT SdtZM0z3Ppko3UUFNl9TsY3/DH4p592jNTqRTacuNG6+lEbp2KL6itp1rTtcAB4b3ol1 IptAaZJRuNRDKDKAiP5pS/SxBNZrDUSPZ4udSGgQnS4BpU/CDcQm4MOqut5GhofWKFM7 m7oNtFVNV+zqGI/h8R160c/QN/hUHcWQUPbDwz5MfBrbnR4X03VcX9KttU2IUHgZHQ3J 4VEw== X-Received: by 10.112.126.164 with SMTP id mz4mr3333322lbb.52.1387187743306; Mon, 16 Dec 2013 01:55:43 -0800 (PST) Received: from localhost.localdomain (broadband-95-84-154-9.nationalcablenetworks.ru. [95.84.154.9]) by mx.google.com with ESMTPSA id np10sm8982562lbb.7.2013.12.16.01.55.40 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 16 Dec 2013 01:55:41 -0800 (PST) From: Antony Pavlov To: qemu-devel@nongnu.org Date: Mon, 16 Dec 2013 14:02:58 +0400 Message-Id: <1387188183-607-2-git-send-email-antonynpavlov@gmail.com> X-Mailer: git-send-email 1.8.5 In-Reply-To: <1387188183-607-1-git-send-email-antonynpavlov@gmail.com> References: <1387188183-607-1-git-send-email-antonynpavlov@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2a00:1450:4010:c04::232 Cc: Peter Maydell , Peter Crosthwaite , Giovanni Condello , g3gg0 , Alex Dumitrache , Paul Brook , Paolo Bonzini , =?UTF-8?q?Andreas=20F=C3=A4rber?= , Antony Pavlov Subject: [Qemu-devel] [PATCH 1/6] hw/arm: add very initial support for Canon DIGIC SoC X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org DIGIC is Canon Inc.'s name for a family of SoC for digital cameras and camcorders. There is no publicly available specification for DIGIC chips. All information about DIGIC chip internals is based on reverse engineering efforts made by CHDK (http://chdk.wikia.com) and Magic Lantern (http://www.magiclantern.fm) projects contributors. Signed-off-by: Antony Pavlov Reviewed-by: Andreas Färber Reviewed-by: Peter Maydell Reviewed-by: Peter Crosthwaite --- default-configs/arm-softmmu.mak | 1 + hw/arm/Makefile.objs | 1 + hw/arm/digic.c | 71 +++++++++++++++++++++++++++++++++++++++++ include/hw/arm/digic.h | 35 ++++++++++++++++++++ 4 files changed, 108 insertions(+) create mode 100644 hw/arm/digic.c create mode 100644 include/hw/arm/digic.h diff --git a/default-configs/arm-softmmu.mak b/default-configs/arm-softmmu.mak index e48f102..2135be3 100644 --- a/default-configs/arm-softmmu.mak +++ b/default-configs/arm-softmmu.mak @@ -64,6 +64,7 @@ CONFIG_XILINX_SPIPS=y CONFIG_ARM11SCU=y CONFIG_A9SCU=y +CONFIG_DIGIC=y CONFIG_MARVELL_88W8618=y CONFIG_OMAP=y CONFIG_TSC210X=y diff --git a/hw/arm/Makefile.objs b/hw/arm/Makefile.objs index 78b5614..8789807 100644 --- a/hw/arm/Makefile.objs +++ b/hw/arm/Makefile.objs @@ -4,4 +4,5 @@ obj-y += omap_sx1.o palm.o realview.o spitz.o stellaris.o obj-y += tosa.o versatilepb.o vexpress.o virt.o xilinx_zynq.o z2.o obj-y += armv7m.o exynos4210.o pxa2xx.o pxa2xx_gpio.o pxa2xx_pic.o +obj-$(CONFIG_DIGIC) += digic.o obj-y += omap1.o omap2.o strongarm.o diff --git a/hw/arm/digic.c b/hw/arm/digic.c new file mode 100644 index 0000000..2620262 --- /dev/null +++ b/hw/arm/digic.c @@ -0,0 +1,71 @@ +/* + * QEMU model of the Canon DIGIC SoC. + * + * Copyright (C) 2013 Antony Pavlov + * + * This model is based on reverse engineering efforts + * made by CHDK (http://chdk.wikia.com) and + * Magic Lantern (http://www.magiclantern.fm) projects + * contributors. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#include "hw/arm/digic.h" + +static void digic_init(Object *obj) +{ + DigicState *s = DIGIC(obj); + + object_initialize(&s->cpu, sizeof(s->cpu), "arm946-" TYPE_ARM_CPU); + object_property_add_child(obj, "cpu", OBJECT(&s->cpu), NULL); +} + +static void digic_realize(DeviceState *dev, Error **errp) +{ + DigicState *s = DIGIC(dev); + Error *err = NULL; + + object_property_set_bool(OBJECT(&s->cpu), true, "reset-hivecs", &err); + if (err != NULL) { + error_propagate(errp, err); + return; + } + + object_property_set_bool(OBJECT(&s->cpu), true, "realized", &err); + if (err != NULL) { + error_propagate(errp, err); + return; + } +} + +static void digic_class_init(ObjectClass *oc, void *data) +{ + DeviceClass *dc = DEVICE_CLASS(oc); + + dc->realize = digic_realize; +} + +static const TypeInfo digic_type_info = { + .name = TYPE_DIGIC, + .parent = TYPE_DEVICE, + .instance_size = sizeof(DigicState), + .instance_init = digic_init, + .class_init = digic_class_init, +}; + +static void digic_register_types(void) +{ + type_register_static(&digic_type_info); +} + +type_init(digic_register_types) diff --git a/include/hw/arm/digic.h b/include/hw/arm/digic.h new file mode 100644 index 0000000..b7d16fb --- /dev/null +++ b/include/hw/arm/digic.h @@ -0,0 +1,35 @@ +/* + * Misc Canon DIGIC declarations. + * + * Copyright (C) 2013 Antony Pavlov + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#ifndef HW_ARM_DIGIC_H +#define HW_ARM_DIGIC_H + +#include "cpu.h" + +#define TYPE_DIGIC "digic" + +#define DIGIC(obj) OBJECT_CHECK(DigicState, (obj), TYPE_DIGIC) + +typedef struct DigicState { + /*< private >*/ + DeviceState parent_obj; + /*< public >*/ + + ARMCPU cpu; +} DigicState; + +#endif /* HW_ARM_DIGIC_H */