From patchwork Thu Sep 5 07:52:55 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Antony Pavlov X-Patchwork-Id: 272812 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)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 335A52C00E1 for ; Thu, 5 Sep 2013 17:56:17 +1000 (EST) Received: from localhost ([::1]:57355 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VHUQI-0000Cx-EV for incoming@patchwork.ozlabs.org; Thu, 05 Sep 2013 03:56:14 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54905) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VHUPe-00007W-Af for qemu-devel@nongnu.org; Thu, 05 Sep 2013 03:55:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VHUPZ-0000mN-O5 for qemu-devel@nongnu.org; Thu, 05 Sep 2013 03:55:34 -0400 Received: from mail-la0-x235.google.com ([2a00:1450:4010:c03::235]:64790) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VHUPZ-0000mH-Bm for qemu-devel@nongnu.org; Thu, 05 Sep 2013 03:55:29 -0400 Received: by mail-la0-f53.google.com with SMTP id el20so1224366lab.26 for ; Thu, 05 Sep 2013 00:55:28 -0700 (PDT) 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; bh=Z1K3vrdPYzYITZ2OkkgyB4krW1CB0+xGZwFu4qGWvJw=; b=M8cRC7+nvvk4j73I2+UNZKdbaX3bkHiiflSUZg3niMD6NnErQx2QLeZJYPW44WAsY4 gWOV6H5XCteAHEckP2uzbwWuIQoPZzOn9A5Vk61Bi2aVl7ajU5wsPOjsDRJBq96mKhD3 bjQeKPv/7syRuIx92pkOhgSnuyU61LWOCMmK1DmyWAvqAiAGZxumgxLxJn3H1lADw8oq HGiOF6oOB6r0geadcTo8Sr03317clqVo6SrDLIHSiT2E0/4rl/98ViyCXo53JPJEfbNJ IEmMHgZSltjJ3o5+xCBg8CW3OW1nk4V63xY6nUggXjTIqJTQKmETElQXQohzlhwWopWs TRQQ== X-Received: by 10.152.120.37 with SMTP id kz5mr6349876lab.21.1378367728181; Thu, 05 Sep 2013 00:55:28 -0700 (PDT) Received: from localhost.localdomain (ppp37-190-57-26.pppoe.spdop.ru. [37.190.57.26]) by mx.google.com with ESMTPSA id w10sm12302130lbv.6.1969.12.31.16.00.00 (version=TLSv1.2 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 05 Sep 2013 00:55:27 -0700 (PDT) From: Antony Pavlov To: qemu-devel@nongnu.org Date: Thu, 5 Sep 2013 11:52:55 +0400 Message-Id: <1378367579-1099-2-git-send-email-antonynpavlov@gmail.com> X-Mailer: git-send-email 1.8.4.rc3 In-Reply-To: <1378367579-1099-1-git-send-email-antonynpavlov@gmail.com> References: <1378367579-1099-1-git-send-email-antonynpavlov@gmail.com> X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2a00:1450:4010:c03::235 Cc: Alex Dumitrache , Peter Crosthwaite , Giovanni Condello , g3gg0 , Peter Maydell , Paul Brook , Paolo Bonzini , =?UTF-8?q?Andreas=20F=C3=A4rber?= , Antony Pavlov Subject: [Qemu-devel] [RFC v4 1/5] 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 --- default-configs/arm-softmmu.mak | 1 + hw/arm/Makefile.objs | 2 +- hw/arm/digic.c | 70 +++++++++++++++++++++++++++++++++++++++++ include/hw/arm/digic.h | 23 ++++++++++++++ 4 files changed, 95 insertions(+), 1 deletion(-) 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 ac0815d..0d1d783 100644 --- a/default-configs/arm-softmmu.mak +++ b/default-configs/arm-softmmu.mak @@ -63,6 +63,7 @@ CONFIG_FRAMEBUFFER=y CONFIG_XILINX_SPIPS=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 3671b42..e140485 100644 --- a/hw/arm/Makefile.objs +++ b/hw/arm/Makefile.objs @@ -3,5 +3,5 @@ obj-y += integratorcp.o kzm.o mainstone.o musicpal.o nseries.o obj-y += omap_sx1.o palm.o realview.o spitz.o stellaris.o obj-y += tosa.o versatilepb.o vexpress.o xilinx_zynq.o z2.o -obj-y += armv7m.o exynos4210.o pxa2xx.o pxa2xx_gpio.o pxa2xx_pic.o +obj-y += armv7m.o digic.o exynos4210.o pxa2xx.o pxa2xx_gpio.o pxa2xx_pic.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..95a9fcd --- /dev/null +++ b/hw/arm/digic.c @@ -0,0 +1,70 @@ +/* + * 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 library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, see . + * + */ + +#include "hw/sysbus.h" +#include "target-arm/cpu-qom.h" +#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, "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..0ef4723 --- /dev/null +++ b/include/hw/arm/digic.h @@ -0,0 +1,23 @@ +/* + * Misc DIGIC declarations + * + * Copyright (C) 2013 Antony Pavlov + * + */ + +#ifndef __DIGIC_H__ +#define __DIGIC_H__ + +#include "cpu-qom.h" + +#define TYPE_DIGIC "digic" + +#define DIGIC(obj) OBJECT_CHECK(DigicState, (obj), TYPE_DIGIC) + +typedef struct DigicState { + Object parent_obj; + + ARMCPU cpu; +} DigicState; + +#endif /* __DIGIC_H__ */