From nobody Sat May 18 07:09:02 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1558086329; cv=none; d=zoho.com; s=zohoarc; b=kVpzyDW3/eq98SCjUM0BEDvvBQvLTFFocmDniUM3nfWjnpyAxF5K8ktbeDoUtbOWIHVEU0vVhvKmUGSbCr2pTPjnHZmBQ6YqxuTN7Zu+D2kMo8U8hMpbRGfeQSD+lisYLK/Uc4jQdMHBZunj1hev0j+T7C4s88RybI5JjCFgOmA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558086329; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=gR47lRGumQD2IKzx1MXBnchdMacnsHIZ4t0g86RZBy4=; b=nS5qeMD6EhDO5fahqn4hLqGZ7RnJkLkVxCA5bugGQXjmyNnOwoHL7G4+LiGm1PnBllzWcSdX2XXNKEbgPAS6f1SLtYFeSgRNND8i0R4L3imp9zuidKihMbVwwJfRF1Bl+M/hFp+DpyyLYe97fXyfzRQEjLChrfi4AaORrSNhh+4= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1558086329655528.5085094439588; Fri, 17 May 2019 02:45:29 -0700 (PDT) Received: from localhost ([127.0.0.1]:45325 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hRZQW-0007XN-AC for importer@patchew.org; Fri, 17 May 2019 05:45:23 -0400 Received: from eggs.gnu.org ([209.51.188.92]:39854) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hRZM1-0004IQ-0Y for qemu-devel@nongnu.org; Fri, 17 May 2019 05:40:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hRZLz-00022Y-NA for qemu-devel@nongnu.org; Fri, 17 May 2019 05:40:40 -0400 Received: from mail.ilande.co.uk ([46.43.2.167]:55346 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hRZLz-0001xo-F0 for qemu-devel@nongnu.org; Fri, 17 May 2019 05:40:39 -0400 Received: from host109-146-247-8.range109-146.btcentralplus.com ([109.146.247.8] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.89) (envelope-from ) id 1hRZLD-00018L-7T; Fri, 17 May 2019 10:39:51 +0100 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Fri, 17 May 2019 10:40:22 +0100 Message-Id: <20190517094029.7667-2-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190517094029.7667-1-mark.cave-ayland@ilande.co.uk> References: <20190517094029.7667-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 109.146.247.8 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk X-SA-Exim-Version: 4.2.1 (built Tue, 02 Aug 2016 21:08:31 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 46.43.2.167 Subject: [Qemu-devel] [PULL 1/8] hw/char/escc: Lower irq when transmit buffer is filled 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" From: Stephen Checkoway The SCC/ESCC will briefly stop asserting an interrupt when the transmit FIFO is filled. This code doesn't model the transmit FIFO/shift register so the pending transmit interrupt is never deasserted which means that an edge-triggered interrupt controller will never see the low-to-high transition it needs to raise another interrupt. The practical consequence of this is that guest firmware with an interrupt service routine for the ESCC that does not send all of the data it has immediately will stop sending data if the following sequence of events occurs: 1. Disable processor interrupts 2. Write a character to the ESCC 3. Add additional characters to a buffer which is drained by the ISR 4. Enable processor interrupts In this case, the first character will be sent, the interrupt will fire and the ISR will output the second character. Since the pending transmit interrupt remains asserted, no additional interrupts will ever fire. This behavior was triggered by firmware for an embedded system with a Z85C30 which necessitated this patch. This patch fixes that situation by explicitly lowering the IRQ when a character is written to the buffer and no other interrupts are currently pending. Signed-off-by: Stephen Checkoway Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Mark Cave-Ayland --- hw/char/escc.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/hw/char/escc.c b/hw/char/escc.c index 628f5f81f7..c5b05a63f1 100644 --- a/hw/char/escc.c +++ b/hw/char/escc.c @@ -509,6 +509,13 @@ static void escc_mem_write(void *opaque, hwaddr addr, break; case SERIAL_DATA: trace_escc_mem_writeb_data(CHN_C(s), val); + /* + * Lower the irq when data is written to the Tx buffer and no other + * interrupts are currently pending. The irq will be raised again = once + * the Tx buffer becomes empty below. + */ + s->txint =3D 0; + escc_update_irq(s); s->tx =3D val; if (s->wregs[W_TXCTRL2] & TXCTRL2_TXEN) { // tx enabled if (qemu_chr_fe_backend_connected(&s->chr)) { --=20 2.11.0 From nobody Sat May 18 07:09:02 2024 Delivered-To: importer@patchew.org Received-SPF: temperror (zoho.com: Error in retrieving data from DNS) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=temperror (zoho.com: Error in retrieving data from DNS) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1558086184; cv=none; d=zoho.com; s=zohoarc; b=KkUvjwvS4AdxPTLIGCAXogSOpgBOIsKnfqrEi3LJGuoC+AUscTFNPXiv+MmAyrgwygptr4PjuCvUI2GQCzrD68Qo76WdvdbTf+zxPmUXee9RFUD7PxRfiiglZrRyrzsWrB9YTcQARReepXXIuj6rUcmoYBLAJ6xK+hKiQ7zPH4U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558086184; h=Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=D42Slidm+XszXSSbTf+dRRDDJ43/x7Os3GxFtbvUrz8=; b=ond7jqeCn83/B4yEiqwnGZVZTCBZbj/QhvlG172HUC9iwMbZHP6gSh6Q6hQMJo8Ff/iqYSJuAmme4ZroYYmT+bxqmV3LOvEhK8tEW6W79+XA0iG3ZFjpqTyabXsEwwp2LYsDtQbY4z96EcLhfswJu+Z7W6eNPCKBQrqPJW8wF0Y= ARC-Authentication-Results: i=1; mx.zoho.com; spf=temperror (zoho.com: Error in retrieving data from DNS) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1558086184126720.0121375064125; Fri, 17 May 2019 02:43:04 -0700 (PDT) Received: from localhost ([127.0.0.1]:45304 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hRZO4-0005Tz-Tp for importer@patchew.org; Fri, 17 May 2019 05:42:49 -0400 Received: from eggs.gnu.org ([209.51.188.92]:39850) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hRZM0-0004IP-Tc for qemu-devel@nongnu.org; Fri, 17 May 2019 05:40:41 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hRZLz-00022i-Mm for qemu-devel@nongnu.org; Fri, 17 May 2019 05:40:40 -0400 Received: from mail.ilande.co.uk ([46.43.2.167]:55350 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hRZLz-0001xp-F8 for qemu-devel@nongnu.org; Fri, 17 May 2019 05:40:39 -0400 Received: from host109-146-247-8.range109-146.btcentralplus.com ([109.146.247.8] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.89) (envelope-from ) id 1hRZLD-00018L-NP; Fri, 17 May 2019 10:39:52 +0100 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Fri, 17 May 2019 10:40:23 +0100 Message-Id: <20190517094029.7667-3-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190517094029.7667-1-mark.cave-ayland@ilande.co.uk> References: <20190517094029.7667-1-mark.cave-ayland@ilande.co.uk> X-SA-Exim-Connect-IP: 109.146.247.8 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk X-SA-Exim-Version: 4.2.1 (built Tue, 02 Aug 2016 21:08:31 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 46.43.2.167 Subject: [Qemu-devel] [PULL 2/8] leon3: fix the error message when no bios are provided 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: KONRAD Frederic The leon3 board is looking for u-boot.bin by default (LEON3_PROM_FILENAME).. But in the case this file is not found and no other file are given on the command line we get the following error: $ ./qemu-system-sparc -M leon3_generic qemu-system-sparc: Can't read bios image (null) So use LEON3_PROM_FILENAME instead of filename in case it is NULL to get a less cryptic message: $ ./qemu-system-sparc -M leon3_generic qemu-system-sparc: Can't read bios image 'u-boot.bin' Suggested-by: Mark Cave-Ayland Signed-off-by: KONRAD Frederic Signed-off-by: Mark Cave-Ayland --- hw/sparc/leon3.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/hw/sparc/leon3.c b/hw/sparc/leon3.c index 0383b17c29..f438718794 100644 --- a/hw/sparc/leon3.c +++ b/hw/sparc/leon3.c @@ -1,7 +1,7 @@ /* * QEMU Leon3 System Emulator * - * Copyright (c) 2010-2011 AdaCore + * Copyright (c) 2010-2019 AdaCore * * Permission is hereby granted, free of charge, to any person obtaining a= copy * of this software and associated documentation files (the "Software"), t= o deal @@ -43,7 +43,7 @@ /* Default system clock. */ #define CPU_CLK (40 * 1000 * 1000) =20 -#define PROM_FILENAME "u-boot.bin" +#define LEON3_PROM_FILENAME "u-boot.bin" =20 #define MAX_PILS 16 =20 @@ -158,7 +158,7 @@ static void leon3_generic_hw_init(MachineState *machine) =20 /* Load boot prom */ if (bios_name =3D=3D NULL) { - bios_name =3D PROM_FILENAME; + bios_name =3D LEON3_PROM_FILENAME; } filename =3D qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name); =20 @@ -180,7 +180,9 @@ static void leon3_generic_hw_init(MachineState *machine) exit(1); } } else if (kernel_filename =3D=3D NULL && !qtest_enabled()) { - error_report("Can't read bios image %s", filename); + error_report("Can't read bios image '%s'", filename + ? filename + : LEON3_PROM_FILENAME); exit(1); } g_free(filename); --=20 2.11.0 From nobody Sat May 18 07:09:02 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1558086458; cv=none; d=zoho.com; s=zohoarc; b=Imq27/2euw9jp6bdKwm2ijJX1rX+soYK+WzetLdul2NrE9iVfADx/aQfcORjv37fSR8kD5KLRyEnSmY2lrZtGHEu0Lqz7TPiYPgOFgfsHHSOihg9oLU+fVK3ClLkv6bihy6/O+uwZilUhhcHbeFj7A5QR1/98ulKGuGznIRSPHs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558086458; h=Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=Lk4O5022BfdgsXozaU4aW4xnur6MwgzVlTkjn3XMKsY=; b=lP6hXIDqXkORktAqm6vEMy/Eh+E98dXVBJ4K62xpikH19evSM3sFCfXD8Nk0xLFm4NebVsuQKNX3e7xbCTg/l8BDFcDv2LE5JNGRfUcCK+/YItVsA65wCrAaqU/WqEiJhLGmWB+LxgJOvDV/AJhcdyiz7rvmJ96OuUTmtoVb0FY= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 155808645813964.75596209216678; Fri, 17 May 2019 02:47:38 -0700 (PDT) Received: from localhost ([127.0.0.1]:45380 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hRZSb-00018p-Un for importer@patchew.org; Fri, 17 May 2019 05:47:29 -0400 Received: from eggs.gnu.org ([209.51.188.92]:39864) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hRZM1-0004IX-Dr for qemu-devel@nongnu.org; Fri, 17 May 2019 05:40:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hRZM0-000261-6M for qemu-devel@nongnu.org; Fri, 17 May 2019 05:40:41 -0400 Received: from mail.ilande.co.uk ([46.43.2.167]:55358 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hRZLz-00021A-VZ for qemu-devel@nongnu.org; Fri, 17 May 2019 05:40:40 -0400 Received: from host109-146-247-8.range109-146.btcentralplus.com ([109.146.247.8] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.89) (envelope-from ) id 1hRZLE-00018L-5p; Fri, 17 May 2019 10:39:52 +0100 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Fri, 17 May 2019 10:40:24 +0100 Message-Id: <20190517094029.7667-4-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190517094029.7667-1-mark.cave-ayland@ilande.co.uk> References: <20190517094029.7667-1-mark.cave-ayland@ilande.co.uk> X-SA-Exim-Connect-IP: 109.146.247.8 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk X-SA-Exim-Version: 4.2.1 (built Tue, 02 Aug 2016 21:08:31 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 46.43.2.167 Subject: [Qemu-devel] [PULL 3/8] grlib, irqmp: get rid of the old-style create function 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: KONRAD Frederic Suggested-by: Mark Cave-Ayland Signed-off-by: KONRAD Frederic Signed-off-by: Mark Cave-Ayland --- hw/intc/grlib_irqmp.c | 3 +-- hw/sparc/leon3.c | 12 ++++++++++-- include/hw/sparc/grlib.h | 31 ++----------------------------- 3 files changed, 13 insertions(+), 33 deletions(-) diff --git a/hw/intc/grlib_irqmp.c b/hw/intc/grlib_irqmp.c index d6f9cb3692..20accb6c4d 100644 --- a/hw/intc/grlib_irqmp.c +++ b/hw/intc/grlib_irqmp.c @@ -3,7 +3,7 @@ * * (Multiprocessor and extended interrupt not supported) * - * Copyright (c) 2010-2011 AdaCore + * Copyright (c) 2010-2019 AdaCore * * Permission is hereby granted, free of charge, to any person obtaining a= copy * of this software and associated documentation files (the "Software"), t= o deal @@ -47,7 +47,6 @@ #define FORCE_OFFSET 0x80 #define EXTENDED_OFFSET 0xC0 =20 -#define TYPE_GRLIB_IRQMP "grlib,irqmp" #define GRLIB_IRQMP(obj) OBJECT_CHECK(IRQMP, (obj), TYPE_GRLIB_IRQMP) =20 typedef struct IRQMPState IRQMPState; diff --git a/hw/sparc/leon3.c b/hw/sparc/leon3.c index f438718794..34306937bc 100644 --- a/hw/sparc/leon3.c +++ b/hw/sparc/leon3.c @@ -47,6 +47,8 @@ =20 #define MAX_PILS 16 =20 +#define LEON3_IRQMP_OFFSET (0x80000200) + typedef struct ResetData { SPARCCPU *cpu; uint32_t entry; /* save kernel entry in case of reset */ @@ -121,6 +123,7 @@ static void leon3_generic_hw_init(MachineState *machine) int bios_size; int prom_size; ResetData *reset_info; + DeviceState *dev; =20 /* Init CPU */ cpu =3D SPARC_CPU(cpu_create(machine->cpu_type)); @@ -135,9 +138,14 @@ static void leon3_generic_hw_init(MachineState *machin= e) qemu_register_reset(main_cpu_reset, reset_info); =20 /* Allocate IRQ manager */ - grlib_irqmp_create(0x80000200, env, &cpu_irqs, MAX_PILS, &leon3_set_pi= l_in); - + dev =3D qdev_create(NULL, TYPE_GRLIB_IRQMP); + qdev_prop_set_ptr(dev, "set_pil_in", leon3_set_pil_in); + qdev_prop_set_ptr(dev, "set_pil_in_opaque", env); + qdev_init_nofail(dev); + sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, LEON3_IRQMP_OFFSET); + env->irq_manager =3D dev; env->qemu_irq_ack =3D leon3_irq_manager; + cpu_irqs =3D qemu_allocate_irqs(grlib_irqmp_set_irq, dev, MAX_PILS); =20 /* Allocate RAM */ if (ram_size > 1 * GiB) { diff --git a/include/hw/sparc/grlib.h b/include/hw/sparc/grlib.h index 61a345c269..bef371a06f 100644 --- a/include/hw/sparc/grlib.h +++ b/include/hw/sparc/grlib.h @@ -1,7 +1,7 @@ /* * QEMU GRLIB Components * - * Copyright (c) 2010-2011 AdaCore + * Copyright (c) 2010-2019 AdaCore * * Permission is hereby granted, free of charge, to any person obtaining a= copy * of this software and associated documentation files (the "Software"), t= o deal @@ -33,6 +33,7 @@ */ =20 /* IRQMP */ +#define TYPE_GRLIB_IRQMP "grlib,irqmp" =20 typedef void (*set_pil_in_fn) (void *opaque, uint32_t pil_in); =20 @@ -40,34 +41,6 @@ void grlib_irqmp_set_irq(void *opaque, int irq, int leve= l); =20 void grlib_irqmp_ack(DeviceState *dev, int intno); =20 -static inline -DeviceState *grlib_irqmp_create(hwaddr base, - CPUSPARCState *env, - qemu_irq **cpu_irqs, - uint32_t nr_irqs, - set_pil_in_fn set_pil_in) -{ - DeviceState *dev; - - assert(cpu_irqs !=3D NULL); - - dev =3D qdev_create(NULL, "grlib,irqmp"); - qdev_prop_set_ptr(dev, "set_pil_in", set_pil_in); - qdev_prop_set_ptr(dev, "set_pil_in_opaque", env); - - qdev_init_nofail(dev); - - env->irq_manager =3D dev; - - sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, base); - - *cpu_irqs =3D qemu_allocate_irqs(grlib_irqmp_set_irq, - dev, - nr_irqs); - - return dev; -} - /* GPTimer */ =20 static inline --=20 2.11.0 From nobody Sat May 18 07:09:02 2024 Delivered-To: importer@patchew.org Received-SPF: temperror (zoho.com: Error in retrieving data from DNS) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=temperror (zoho.com: Error in retrieving data from DNS) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1558086181; cv=none; d=zoho.com; s=zohoarc; b=PWlXzXpeDwuK2SVhPmY0BokhXy7/oW4xki4hv93CtLmm8JvlBiC5+XidGm32OHQUZolF96E9tmBJbAslEwEDmXyLEoyQkyB4MLmYqJ/Z9kNCShJiepY2H02hnUbPE77hPFrMa+UNsS4Y9iOoHDl0RjyjRpVo3zxbaw5anxsLb1I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558086181; h=Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=fMLjnZB8p/4mxy3+2/tfo6U0wNFsdUEJcvSbxoL4szY=; b=BiJq/4qRrri7Y0iwuRwM4IqtY5QcEFbSDjb0zt7u87PdqAcAnDgymDccHlkMCQSZ55dtPfBMkfgwBagCIOKF9K9Lac8/me6fEpD/+ln/Q2HesppfTOdT5CB5iy+pgQ7vrpZP//Rokcv9Pve6Ftoa+F5ATZ+lYnryWcXkYzEQhDE= ARC-Authentication-Results: i=1; mx.zoho.com; spf=temperror (zoho.com: Error in retrieving data from DNS) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1558086181098992.8850735910372; Fri, 17 May 2019 02:43:01 -0700 (PDT) Received: from localhost ([127.0.0.1]:45300 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hRZO1-0005S9-6B for importer@patchew.org; Fri, 17 May 2019 05:42:45 -0400 Received: from eggs.gnu.org ([209.51.188.92]:39836) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hRZM0-0004IN-DY for qemu-devel@nongnu.org; Fri, 17 May 2019 05:40:41 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hRZLz-00020Q-7W for qemu-devel@nongnu.org; Fri, 17 May 2019 05:40:40 -0400 Received: from mail.ilande.co.uk ([46.43.2.167]:55340 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hRZLz-0001vP-0i for qemu-devel@nongnu.org; Fri, 17 May 2019 05:40:39 -0400 Received: from host109-146-247-8.range109-146.btcentralplus.com ([109.146.247.8] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.89) (envelope-from ) id 1hRZLE-00018L-LU; Fri, 17 May 2019 10:39:53 +0100 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Fri, 17 May 2019 10:40:25 +0100 Message-Id: <20190517094029.7667-5-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190517094029.7667-1-mark.cave-ayland@ilande.co.uk> References: <20190517094029.7667-1-mark.cave-ayland@ilande.co.uk> X-SA-Exim-Connect-IP: 109.146.247.8 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk X-SA-Exim-Version: 4.2.1 (built Tue, 02 Aug 2016 21:08:31 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 46.43.2.167 Subject: [Qemu-devel] [PULL 4/8] grlib, gptimer: get rid of the old-style create function 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: KONRAD Frederic Suggested-by: Mark Cave-Ayland Signed-off-by: KONRAD Frederic Signed-off-by: Mark Cave-Ayland --- hw/sparc/leon3.c | 17 ++++++++++++++++- hw/timer/grlib_gptimer.c | 4 ++-- include/hw/sparc/grlib.h | 27 +-------------------------- 3 files changed, 19 insertions(+), 29 deletions(-) diff --git a/hw/sparc/leon3.c b/hw/sparc/leon3.c index 34306937bc..fb52527add 100644 --- a/hw/sparc/leon3.c +++ b/hw/sparc/leon3.c @@ -49,6 +49,10 @@ =20 #define LEON3_IRQMP_OFFSET (0x80000200) =20 +#define LEON3_TIMER_OFFSET (0x80000300) +#define LEON3_TIMER_IRQ (6) +#define LEON3_TIMER_COUNT (2) + typedef struct ResetData { SPARCCPU *cpu; uint32_t entry; /* save kernel entry in case of reset */ @@ -124,6 +128,7 @@ static void leon3_generic_hw_init(MachineState *machine) int prom_size; ResetData *reset_info; DeviceState *dev; + int i; =20 /* Init CPU */ cpu =3D SPARC_CPU(cpu_create(machine->cpu_type)); @@ -220,7 +225,17 @@ static void leon3_generic_hw_init(MachineState *machin= e) } =20 /* Allocate timers */ - grlib_gptimer_create(0x80000300, 2, CPU_CLK, cpu_irqs, 6); + dev =3D qdev_create(NULL, TYPE_GRLIB_GPTIMER); + qdev_prop_set_uint32(dev, "nr-timers", LEON3_TIMER_COUNT); + qdev_prop_set_uint32(dev, "frequency", CPU_CLK); + qdev_prop_set_uint32(dev, "irq-line", LEON3_TIMER_IRQ); + qdev_init_nofail(dev); + + sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, LEON3_TIMER_OFFSET); + for (i =3D 0; i < LEON3_TIMER_COUNT; i++) { + sysbus_connect_irq(SYS_BUS_DEVICE(dev), i, + cpu_irqs[LEON3_TIMER_IRQ + i]); + } =20 /* Allocate uart */ if (serial_hd(0)) { diff --git a/hw/timer/grlib_gptimer.c b/hw/timer/grlib_gptimer.c index 183eddc073..4b7088fc84 100644 --- a/hw/timer/grlib_gptimer.c +++ b/hw/timer/grlib_gptimer.c @@ -1,7 +1,7 @@ /* * QEMU GRLIB GPTimer Emulator * - * Copyright (c) 2010-2011 AdaCore + * Copyright (c) 2010-2019 AdaCore * * Permission is hereby granted, free of charge, to any person obtaining a= copy * of this software and associated documentation files (the "Software"), t= o deal @@ -23,6 +23,7 @@ */ =20 #include "qemu/osdep.h" +#include "hw/sparc/grlib.h" #include "hw/sysbus.h" #include "qemu/timer.h" #include "hw/ptimer.h" @@ -52,7 +53,6 @@ #define COUNTER_RELOAD_OFFSET 0x04 #define TIMER_BASE 0x10 =20 -#define TYPE_GRLIB_GPTIMER "grlib,gptimer" #define GRLIB_GPTIMER(obj) \ OBJECT_CHECK(GPTimerUnit, (obj), TYPE_GRLIB_GPTIMER) =20 diff --git a/include/hw/sparc/grlib.h b/include/hw/sparc/grlib.h index bef371a06f..fe553e93b8 100644 --- a/include/hw/sparc/grlib.h +++ b/include/hw/sparc/grlib.h @@ -42,32 +42,7 @@ void grlib_irqmp_set_irq(void *opaque, int irq, int leve= l); void grlib_irqmp_ack(DeviceState *dev, int intno); =20 /* GPTimer */ - -static inline -DeviceState *grlib_gptimer_create(hwaddr base, - uint32_t nr_timers, - uint32_t freq, - qemu_irq *cpu_irqs, - int base_irq) -{ - DeviceState *dev; - int i; - - dev =3D qdev_create(NULL, "grlib,gptimer"); - qdev_prop_set_uint32(dev, "nr-timers", nr_timers); - qdev_prop_set_uint32(dev, "frequency", freq); - qdev_prop_set_uint32(dev, "irq-line", base_irq); - - qdev_init_nofail(dev); - - sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, base); - - for (i =3D 0; i < nr_timers; i++) { - sysbus_connect_irq(SYS_BUS_DEVICE(dev), i, cpu_irqs[base_irq + i]); - } - - return dev; -} +#define TYPE_GRLIB_GPTIMER "grlib,gptimer" =20 /* APB UART */ =20 --=20 2.11.0 From nobody Sat May 18 07:09:02 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1558086566; cv=none; d=zoho.com; s=zohoarc; b=h9QstSQ7eha7JUxHimPKrsG34B8i8NoFM5MTYHfqOlFO2An3yiNCLc5mUmJ0b+Pp1iPyXUWt+D0rxuv1PyP5aBfz8sM8PcDWyX5JucCWBdufZh2Dyob71023XcYvuPZ1nloHo65Dog9S52ifcBNvWUTia49NDZNPKOmwUyzSSrA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558086566; h=Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=7BB3u94oFdmMpdkbhgZqRv5Gpzt5z+f5RGnpZHD4gcY=; b=ASLiegNy3DkJjeAKW/0tOnL2EMYt9vMOOQ8nbHQuK8KywhhrSNumYUBe9xoI0WzwdWOgUsSr0AjoGDdQ5J2kyz77c9ERVWL6HIu4Le8vnfXZY0mps/GDptXX4WfZMqzI9HoyH9aCzV1kpJuHf8y0kpSvSPUVg+iwIk7bNmxk7jM= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1558086566228891.5932552849914; Fri, 17 May 2019 02:49:26 -0700 (PDT) Received: from localhost ([127.0.0.1]:45400 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hRZUH-0002Wq-6z for importer@patchew.org; Fri, 17 May 2019 05:49:13 -0400 Received: from eggs.gnu.org ([209.51.188.92]:39879) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hRZM1-0004Ic-Q0 for qemu-devel@nongnu.org; Fri, 17 May 2019 05:40:50 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hRZLz-00022q-NA for qemu-devel@nongnu.org; Fri, 17 May 2019 05:40:41 -0400 Received: from mail.ilande.co.uk ([46.43.2.167]:55354 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hRZLz-0001yD-GE for qemu-devel@nongnu.org; Fri, 17 May 2019 05:40:39 -0400 Received: from host109-146-247-8.range109-146.btcentralplus.com ([109.146.247.8] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.89) (envelope-from ) id 1hRZLF-00018L-3Z; Fri, 17 May 2019 10:39:53 +0100 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Fri, 17 May 2019 10:40:26 +0100 Message-Id: <20190517094029.7667-6-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190517094029.7667-1-mark.cave-ayland@ilande.co.uk> References: <20190517094029.7667-1-mark.cave-ayland@ilande.co.uk> X-SA-Exim-Connect-IP: 109.146.247.8 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk X-SA-Exim-Version: 4.2.1 (built Tue, 02 Aug 2016 21:08:31 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 46.43.2.167 Subject: [Qemu-devel] [PULL 5/8] grlib, apbuart: get rid of the old-style create function 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: KONRAD Frederic Suggested-by: Mark Cave-Ayland Signed-off-by: KONRAD Frederic Signed-off-by: Mark Cave-Ayland --- hw/char/grlib_apbuart.c | 4 ++-- hw/sparc/leon3.c | 9 ++++++++- include/hw/sparc/grlib.h | 20 +------------------- 3 files changed, 11 insertions(+), 22 deletions(-) diff --git a/hw/char/grlib_apbuart.c b/hw/char/grlib_apbuart.c index e1d258b611..9623016d56 100644 --- a/hw/char/grlib_apbuart.c +++ b/hw/char/grlib_apbuart.c @@ -1,7 +1,7 @@ /* * QEMU GRLIB APB UART Emulator * - * Copyright (c) 2010-2011 AdaCore + * Copyright (c) 2010-2019 AdaCore * * Permission is hereby granted, free of charge, to any person obtaining a= copy * of this software and associated documentation files (the "Software"), t= o deal @@ -23,6 +23,7 @@ */ =20 #include "qemu/osdep.h" +#include "hw/sparc/grlib.h" #include "hw/sysbus.h" #include "chardev/char-fe.h" =20 @@ -68,7 +69,6 @@ =20 #define FIFO_LENGTH 1024 =20 -#define TYPE_GRLIB_APB_UART "grlib,apbuart" #define GRLIB_APB_UART(obj) \ OBJECT_CHECK(UART, (obj), TYPE_GRLIB_APB_UART) =20 diff --git a/hw/sparc/leon3.c b/hw/sparc/leon3.c index fb52527add..4f586910f2 100644 --- a/hw/sparc/leon3.c +++ b/hw/sparc/leon3.c @@ -47,6 +47,9 @@ =20 #define MAX_PILS 16 =20 +#define LEON3_UART_OFFSET (0x80000100) +#define LEON3_UART_IRQ (3) + #define LEON3_IRQMP_OFFSET (0x80000200) =20 #define LEON3_TIMER_OFFSET (0x80000300) @@ -239,7 +242,11 @@ static void leon3_generic_hw_init(MachineState *machin= e) =20 /* Allocate uart */ if (serial_hd(0)) { - grlib_apbuart_create(0x80000100, serial_hd(0), cpu_irqs[3]); + dev =3D qdev_create(NULL, TYPE_GRLIB_APB_UART); + qdev_prop_set_chr(dev, "chrdev", serial_hd(0)); + qdev_init_nofail(dev); + sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, LEON3_UART_OFFSET); + sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, cpu_irqs[LEON3_UART_IRQ= ]); } } =20 diff --git a/include/hw/sparc/grlib.h b/include/hw/sparc/grlib.h index fe553e93b8..5606ff0a97 100644 --- a/include/hw/sparc/grlib.h +++ b/include/hw/sparc/grlib.h @@ -45,24 +45,6 @@ void grlib_irqmp_ack(DeviceState *dev, int intno); #define TYPE_GRLIB_GPTIMER "grlib,gptimer" =20 /* APB UART */ - -static inline -DeviceState *grlib_apbuart_create(hwaddr base, - Chardev *serial, - qemu_irq irq) -{ - DeviceState *dev; - - dev =3D qdev_create(NULL, "grlib,apbuart"); - qdev_prop_set_chr(dev, "chrdev", serial); - - qdev_init_nofail(dev); - - sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, base); - - sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, irq); - - return dev; -} +#define TYPE_GRLIB_APB_UART "grlib,apbuart" =20 #endif /* GRLIB_H */ --=20 2.11.0 From nobody Sat May 18 07:09:02 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1558086332; cv=none; d=zoho.com; s=zohoarc; b=B1Dej9U2W9XfRqpIR3dgCyIcsE4vUZdOY4u+HXTsN2lCy6yznk2vkE+QV66+3LZcW1zn8QnmWS9fur6qP2i6geQjBv/5rMwWh+VPFG0ubp2evrsdW+Cp94UJN2x89AXADYSTHIF3hzAhJD83pjGeR9mX0eT1a5gzyOjgNuKrLsA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558086332; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=v9vp/a+TrkzqbO1H1k1YJ181u3R3jaw7Mpmz8qgYafM=; b=aBDH3v+joQ05GrHcUCOUK1Bq+Ta+U61UM0idAVyaHIMV8eC1TfXsgIhx9m9nCj725c7iceRKdy5LMZWqIXvLv9RgT6UWiOF1GaTaDLC0b6jZ7TFVK4cMl4EZN5KJJdi5T8GS+XFw1EkFI4Doqo8A6b/hqtOo2Bjqy/kEvgE67hw= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1558086332713477.3935000311077; Fri, 17 May 2019 02:45:32 -0700 (PDT) Received: from localhost ([127.0.0.1]:45327 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hRZQc-0007YX-Ks for importer@patchew.org; Fri, 17 May 2019 05:45:26 -0400 Received: from eggs.gnu.org ([209.51.188.92]:39843) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hRZM0-0004IO-N5 for qemu-devel@nongnu.org; Fri, 17 May 2019 05:40:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hRZLz-00020W-7u for qemu-devel@nongnu.org; Fri, 17 May 2019 05:40:40 -0400 Received: from mail.ilande.co.uk ([46.43.2.167]:55336 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hRZLz-0001tA-0a for qemu-devel@nongnu.org; Fri, 17 May 2019 05:40:39 -0400 Received: from host109-146-247-8.range109-146.btcentralplus.com ([109.146.247.8] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.89) (envelope-from ) id 1hRZLF-00018L-J4; Fri, 17 May 2019 10:39:54 +0100 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Fri, 17 May 2019 10:40:27 +0100 Message-Id: <20190517094029.7667-7-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190517094029.7667-1-mark.cave-ayland@ilande.co.uk> References: <20190517094029.7667-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 109.146.247.8 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk X-SA-Exim-Version: 4.2.1 (built Tue, 02 Aug 2016 21:08:31 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 46.43.2.167 Subject: [Qemu-devel] [PULL 6/8] leon3: add a little bootloader 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" From: KONRAD Frederic This adds a little bootloader to the leon3_machine when a ram image is given through the kernel parameter and no bios are provided: * The UART transmiter is enabled. * The TIMER is initialized. Reviewed-by: Fabien Chouteau Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: KONRAD Frederic Signed-off-by: Mark Cave-Ayland --- hw/sparc/leon3.c | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++--= ---- 1 file changed, 71 insertions(+), 8 deletions(-) diff --git a/hw/sparc/leon3.c b/hw/sparc/leon3.c index 4f586910f2..6ba63e68ca 100644 --- a/hw/sparc/leon3.c +++ b/hw/sparc/leon3.c @@ -44,6 +44,8 @@ #define CPU_CLK (40 * 1000 * 1000) =20 #define LEON3_PROM_FILENAME "u-boot.bin" +#define LEON3_PROM_OFFSET (0x00000000) +#define LEON3_RAM_OFFSET (0x40000000) =20 #define MAX_PILS 16 =20 @@ -62,6 +64,59 @@ typedef struct ResetData { target_ulong sp; /* initial stack pointer */ } ResetData; =20 +static uint32_t *gen_store_u32(uint32_t *code, hwaddr addr, uint32_t val) +{ + stl_p(code++, 0x82100000); /* mov %g0, %g1 */ + stl_p(code++, 0x84100000); /* mov %g0, %g2 */ + stl_p(code++, 0x03000000 + + extract32(addr, 10, 22)); + /* sethi %hi(addr), %g1 */ + stl_p(code++, 0x82106000 + + extract32(addr, 0, 10)); + /* or %g1, addr, %g1 */ + stl_p(code++, 0x05000000 + + extract32(val, 10, 22)); + /* sethi %hi(val), %g2 */ + stl_p(code++, 0x8410a000 + + extract32(val, 0, 10)); + /* or %g2, val, %g2 */ + stl_p(code++, 0xc4204000); /* st %g2, [ %g1 ] */ + + return code; +} + +/* + * When loading a kernel in RAM the machine is expected to be in a differe= nt + * state (eg: initialized by the bootloader). This little code reproduces + * this behavior. + */ +static void write_bootloader(CPUSPARCState *env, uint8_t *base, + hwaddr kernel_addr) +{ + uint32_t *p =3D (uint32_t *) base; + + /* Initialize the UARTs */ + /* *UART_CONTROL =3D UART_RECEIVE_ENABLE | UART_TRANSMIT_ENABLE; */ + p =3D gen_store_u32(p, 0x80000108, 3); + + /* Initialize the TIMER 0 */ + /* *GPTIMER_SCALER_RELOAD =3D 40 - 1; */ + p =3D gen_store_u32(p, 0x80000304, 39); + /* *GPTIMER0_COUNTER_RELOAD =3D 0xFFFE; */ + p =3D gen_store_u32(p, 0x80000314, 0xFFFFFFFE); + /* *GPTIMER0_CONFIG =3D GPTIMER_ENABLE | GPTIMER_RESTART; */ + p =3D gen_store_u32(p, 0x80000318, 3); + + /* JUMP to the entry point */ + stl_p(p++, 0x82100000); /* mov %g0, %g1 */ + stl_p(p++, 0x03000000 + extract32(kernel_addr, 10, 22)); + /* sethi %hi(kernel_addr), %g1 */ + stl_p(p++, 0x82106000 + extract32(kernel_addr, 0, 10)); + /* or kernel_addr, %g1 */ + stl_p(p++, 0x81c04000); /* jmp %g1 */ + stl_p(p++, 0x01000000); /* nop */ +} + static void main_cpu_reset(void *opaque) { ResetData *s =3D (ResetData *)opaque; @@ -142,7 +197,7 @@ static void leon3_generic_hw_init(MachineState *machine) /* Reset data */ reset_info =3D g_malloc0(sizeof(ResetData)); reset_info->cpu =3D cpu; - reset_info->sp =3D 0x40000000 + ram_size; + reset_info->sp =3D LEON3_RAM_OFFSET + ram_size; qemu_register_reset(main_cpu_reset, reset_info); =20 /* Allocate IRQ manager */ @@ -164,13 +219,13 @@ static void leon3_generic_hw_init(MachineState *machi= ne) } =20 memory_region_allocate_system_memory(ram, NULL, "leon3.ram", ram_size); - memory_region_add_subregion(address_space_mem, 0x40000000, ram); + memory_region_add_subregion(address_space_mem, LEON3_RAM_OFFSET, ram); =20 /* Allocate BIOS */ prom_size =3D 8 * MiB; memory_region_init_ram(prom, NULL, "Leon3.bios", prom_size, &error_fat= al); memory_region_set_readonly(prom, true); - memory_region_add_subregion(address_space_mem, 0x00000000, prom); + memory_region_add_subregion(address_space_mem, LEON3_PROM_OFFSET, prom= ); =20 /* Load boot prom */ if (bios_name =3D=3D NULL) { @@ -190,7 +245,7 @@ static void leon3_generic_hw_init(MachineState *machine) } =20 if (bios_size > 0) { - ret =3D load_image_targphys(filename, 0x00000000, bios_size); + ret =3D load_image_targphys(filename, LEON3_PROM_OFFSET, bios_size= ); if (ret < 0 || ret > prom_size) { error_report("could not load prom '%s'", filename); exit(1); @@ -220,10 +275,18 @@ static void leon3_generic_hw_init(MachineState *machi= ne) exit(1); } if (bios_size <=3D 0) { - /* If there is no bios/monitor, start the application. */ - env->pc =3D entry; - env->npc =3D entry + 4; - reset_info->entry =3D entry; + /* + * If there is no bios/monitor just start the application but = put + * the machine in an initialized state through a little + * bootloader. + */ + uint8_t *bootloader_entry; + + bootloader_entry =3D memory_region_get_ram_ptr(prom); + write_bootloader(env, bootloader_entry, entry); + env->pc =3D LEON3_PROM_OFFSET; + env->npc =3D LEON3_PROM_OFFSET + 4; + reset_info->entry =3D LEON3_PROM_OFFSET; } } =20 --=20 2.11.0 From nobody Sat May 18 07:09:02 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1558086642; cv=none; d=zoho.com; s=zohoarc; b=WzEUrNUhgwUVxreZ0/GWn1etYYPq9uE1PCZcqXYh2jGvIdkNadjU8X/3WrfdwO5vmUggTJ8gJMEZ7naZtpJQSvTnADVW7CS77TKa48xmV9uec9sAJGBMYSj9Fg8Z7AMLnp8gRRrGkHfpXeE7Cq8xlkzur/vH5oIozUfqJhWnsdk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558086642; h=Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=t+397ZiDCIsDzn/C3JmN0qL1698OhhLFumwlZP4XjFA=; b=BKp/bPeVPv1XhozzUttBPIY4Qe6mpBusv12IQYMTYw/rKB2I2V5GhTdZNb+NsIfCnbG8+PM45EPeTYlUVJV62EE+A+nflrnpyn0aSFzlWVq3HIZwGT1EAIYeamvCE3X095RxLxX3+m8lW0SpwMUseQ2P4QAYspVgZEyAMNkhjGo= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1558086642860877.3172512065514; Fri, 17 May 2019 02:50:42 -0700 (PDT) Received: from localhost ([127.0.0.1]:45439 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hRZVW-0003GC-NJ for importer@patchew.org; Fri, 17 May 2019 05:50:30 -0400 Received: from eggs.gnu.org ([209.51.188.92]:39921) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hRZM6-0004M6-Nc for qemu-devel@nongnu.org; Fri, 17 May 2019 05:40:50 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hRZM0-00027e-G4 for qemu-devel@nongnu.org; Fri, 17 May 2019 05:40:46 -0400 Received: from mail.ilande.co.uk ([46.43.2.167]:55362 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hRZM0-00021g-5p for qemu-devel@nongnu.org; Fri, 17 May 2019 05:40:40 -0400 Received: from host109-146-247-8.range109-146.btcentralplus.com ([109.146.247.8] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.89) (envelope-from ) id 1hRZLG-00018L-3a; Fri, 17 May 2019 10:39:56 +0100 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Fri, 17 May 2019 10:40:28 +0100 Message-Id: <20190517094029.7667-8-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190517094029.7667-1-mark.cave-ayland@ilande.co.uk> References: <20190517094029.7667-1-mark.cave-ayland@ilande.co.uk> X-SA-Exim-Connect-IP: 109.146.247.8 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk X-SA-Exim-Version: 4.2.1 (built Tue, 02 Aug 2016 21:08:31 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 46.43.2.167 Subject: [Qemu-devel] [PULL 7/8] leon3: introduce the plug and play mechanism 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: KONRAD Frederic This adds the AHB and APB plug and play devices. They are scanned during the linux boot to discover the various peripheral. Reviewed-by: Fabien Chouteau Signed-off-by: KONRAD Frederic Signed-off-by: Mark Cave-Ayland --- MAINTAINERS | 2 +- hw/misc/Makefile.objs | 2 + hw/misc/grlib_ahb_apb_pnp.c | 269 ++++++++++++++++++++++++++++++++= ++++ hw/sparc/leon3.c | 30 ++++ include/hw/misc/grlib_ahb_apb_pnp.h | 60 ++++++++ 5 files changed, 362 insertions(+), 1 deletion(-) create mode 100644 hw/misc/grlib_ahb_apb_pnp.c create mode 100644 include/hw/misc/grlib_ahb_apb_pnp.h diff --git a/MAINTAINERS b/MAINTAINERS index a73a61a546..bc54c6d212 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1161,7 +1161,7 @@ M: Fabien Chouteau S: Maintained F: hw/sparc/leon3.c F: hw/*/grlib* -F: include/hw/sparc/grlib.h +F: include/hw/*/grlib* =20 S390 Machines ------------- diff --git a/hw/misc/Makefile.objs b/hw/misc/Makefile.objs index c71e07ae35..77b9df9796 100644 --- a/hw/misc/Makefile.objs +++ b/hw/misc/Makefile.objs @@ -77,3 +77,5 @@ obj-$(CONFIG_AUX) +=3D auxbus.o obj-$(CONFIG_ASPEED_SOC) +=3D aspeed_scu.o aspeed_sdmc.o obj-$(CONFIG_MSF2) +=3D msf2-sysreg.o obj-$(CONFIG_NRF51_SOC) +=3D nrf51_rng.o + +obj-$(CONFIG_GRLIB) +=3D grlib_ahb_apb_pnp.o diff --git a/hw/misc/grlib_ahb_apb_pnp.c b/hw/misc/grlib_ahb_apb_pnp.c new file mode 100644 index 0000000000..7338461694 --- /dev/null +++ b/hw/misc/grlib_ahb_apb_pnp.c @@ -0,0 +1,269 @@ +/* + * GRLIB AHB APB PNP + * + * Copyright (C) 2019 AdaCore + * + * Developed by : + * Frederic Konrad + * + * 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. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, see . + * + */ + +#include "qemu/osdep.h" +#include "hw/sysbus.h" +#include "hw/misc/grlib_ahb_apb_pnp.h" + +#define GRLIB_PNP_VENDOR_SHIFT (24) +#define GRLIB_PNP_VENDOR_SIZE (8) +#define GRLIB_PNP_DEV_SHIFT (12) +#define GRLIB_PNP_DEV_SIZE (12) +#define GRLIB_PNP_VER_SHIFT (5) +#define GRLIB_PNP_VER_SIZE (5) +#define GRLIB_PNP_IRQ_SHIFT (0) +#define GRLIB_PNP_IRQ_SIZE (5) +#define GRLIB_PNP_ADDR_SHIFT (20) +#define GRLIB_PNP_ADDR_SIZE (12) +#define GRLIB_PNP_MASK_SHIFT (4) +#define GRLIB_PNP_MASK_SIZE (12) + +#define GRLIB_AHB_DEV_ADDR_SHIFT (20) +#define GRLIB_AHB_DEV_ADDR_SIZE (12) +#define GRLIB_AHB_ENTRY_SIZE (0x20) +#define GRLIB_AHB_MAX_DEV (64) +#define GRLIB_AHB_SLAVE_OFFSET (0x800) + +#define GRLIB_APB_DEV_ADDR_SHIFT (8) +#define GRLIB_APB_DEV_ADDR_SIZE (12) +#define GRLIB_APB_ENTRY_SIZE (0x08) +#define GRLIB_APB_MAX_DEV (512) + +#define GRLIB_PNP_MAX_REGS (0x1000) + +typedef struct AHBPnp { + SysBusDevice parent_obj; + MemoryRegion iomem; + + uint32_t regs[GRLIB_PNP_MAX_REGS >> 2]; + uint8_t master_count; + uint8_t slave_count; +} AHBPnp; + +void grlib_ahb_pnp_add_entry(AHBPnp *dev, uint32_t address, uint32_t mask, + uint8_t vendor, uint16_t device, int slave, + int type) +{ + unsigned int reg_start; + + /* + * AHB entries look like this: + * + * 31 -------- 23 -------- 11 ----- 9 -------- 4 --- 0 + * | VENDOR ID | DEVICE ID | IRQ ? | VERSION | IRQ | + * -------------------------------------------------- + * | USER | + * -------------------------------------------------- + * | USER | + * -------------------------------------------------- + * | USER | + * -------------------------------------------------- + * | USER | + * -------------------------------------------------- + * 31 ----------- 20 --- 15 ----------------- 3 ---- 0 + * | ADDR[31..12] | 00PC | MASK | TYPE | + * -------------------------------------------------- + * 31 ----------- 20 --- 15 ----------------- 3 ---- 0 + * | ADDR[31..12] | 00PC | MASK | TYPE | + * -------------------------------------------------- + * 31 ----------- 20 --- 15 ----------------- 3 ---- 0 + * | ADDR[31..12] | 00PC | MASK | TYPE | + * -------------------------------------------------- + * 31 ----------- 20 --- 15 ----------------- 3 ---- 0 + * | ADDR[31..12] | 00PC | MASK | TYPE | + * -------------------------------------------------- + */ + + if (slave) { + assert(dev->slave_count < GRLIB_AHB_MAX_DEV); + reg_start =3D (GRLIB_AHB_SLAVE_OFFSET + + (dev->slave_count * GRLIB_AHB_ENTRY_SIZE)) >> 2; + dev->slave_count++; + } else { + assert(dev->master_count < GRLIB_AHB_MAX_DEV); + reg_start =3D (dev->master_count * GRLIB_AHB_ENTRY_SIZE) >> 2; + dev->master_count++; + } + + dev->regs[reg_start] =3D deposit32(dev->regs[reg_start], + GRLIB_PNP_VENDOR_SHIFT, + GRLIB_PNP_VENDOR_SIZE, + vendor); + dev->regs[reg_start] =3D deposit32(dev->regs[reg_start], + GRLIB_PNP_DEV_SHIFT, + GRLIB_PNP_DEV_SIZE, + device); + reg_start +=3D 4; + /* AHB Memory Space */ + dev->regs[reg_start] =3D type; + dev->regs[reg_start] =3D deposit32(dev->regs[reg_start], + GRLIB_PNP_ADDR_SHIFT, + GRLIB_PNP_ADDR_SIZE, + extract32(address, + GRLIB_AHB_DEV_ADDR_SHIFT, + GRLIB_AHB_DEV_ADDR_SIZE)); + dev->regs[reg_start] =3D deposit32(dev->regs[reg_start], + GRLIB_PNP_MASK_SHIFT, + GRLIB_PNP_MASK_SIZE, + mask); +} + +static uint64_t grlib_ahb_pnp_read(void *opaque, hwaddr offset, unsigned s= ize) +{ + AHBPnp *ahb_pnp =3D GRLIB_AHB_PNP(opaque); + + return ahb_pnp->regs[offset >> 2]; +} + +static const MemoryRegionOps grlib_ahb_pnp_ops =3D { + .read =3D grlib_ahb_pnp_read, + .endianness =3D DEVICE_BIG_ENDIAN, +}; + +static void grlib_ahb_pnp_realize(DeviceState *dev, Error **errp) +{ + AHBPnp *ahb_pnp =3D GRLIB_AHB_PNP(dev); + SysBusDevice *sbd =3D SYS_BUS_DEVICE(dev); + + memory_region_init_io(&ahb_pnp->iomem, OBJECT(dev), &grlib_ahb_pnp_ops, + ahb_pnp, TYPE_GRLIB_AHB_PNP, GRLIB_PNP_MAX_REGS); + sysbus_init_mmio(sbd, &ahb_pnp->iomem); +} + +static void grlib_ahb_pnp_class_init(ObjectClass *klass, void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + + dc->realize =3D grlib_ahb_pnp_realize; +} + +static const TypeInfo grlib_ahb_pnp_info =3D { + .name =3D TYPE_GRLIB_AHB_PNP, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(AHBPnp), + .class_init =3D grlib_ahb_pnp_class_init, +}; + +/* APBPnp */ + +typedef struct APBPnp { + SysBusDevice parent_obj; + MemoryRegion iomem; + + uint32_t regs[GRLIB_PNP_MAX_REGS >> 2]; + uint32_t entry_count; +} APBPnp; + +void grlib_apb_pnp_add_entry(APBPnp *dev, uint32_t address, uint32_t mask, + uint8_t vendor, uint16_t device, uint8_t vers= ion, + uint8_t irq, int type) +{ + unsigned int reg_start; + + /* + * APB entries look like this: + * + * 31 -------- 23 -------- 11 ----- 9 ------- 4 --- 0 + * | VENDOR ID | DEVICE ID | IRQ ? | VERSION | IRQ | + * + * 31 ---------- 20 --- 15 ----------------- 3 ---- 0 + * | ADDR[20..8] | 0000 | MASK | TYPE | + */ + + assert(dev->entry_count < GRLIB_APB_MAX_DEV); + reg_start =3D (dev->entry_count * GRLIB_APB_ENTRY_SIZE) >> 2; + dev->entry_count++; + + dev->regs[reg_start] =3D deposit32(dev->regs[reg_start], + GRLIB_PNP_VENDOR_SHIFT, + GRLIB_PNP_VENDOR_SIZE, + vendor); + dev->regs[reg_start] =3D deposit32(dev->regs[reg_start], + GRLIB_PNP_DEV_SHIFT, + GRLIB_PNP_DEV_SIZE, + device); + dev->regs[reg_start] =3D deposit32(dev->regs[reg_start], + GRLIB_PNP_VER_SHIFT, + GRLIB_PNP_VER_SIZE, + version); + dev->regs[reg_start] =3D deposit32(dev->regs[reg_start], + GRLIB_PNP_IRQ_SHIFT, + GRLIB_PNP_IRQ_SIZE, + irq); + reg_start +=3D 1; + dev->regs[reg_start] =3D type; + dev->regs[reg_start] =3D deposit32(dev->regs[reg_start], + GRLIB_PNP_ADDR_SHIFT, + GRLIB_PNP_ADDR_SIZE, + extract32(address, + GRLIB_APB_DEV_ADDR_SHIFT, + GRLIB_APB_DEV_ADDR_SIZE)); + dev->regs[reg_start] =3D deposit32(dev->regs[reg_start], + GRLIB_PNP_MASK_SHIFT, + GRLIB_PNP_MASK_SIZE, + mask); +} + +static uint64_t grlib_apb_pnp_read(void *opaque, hwaddr offset, unsigned s= ize) +{ + APBPnp *apb_pnp =3D GRLIB_APB_PNP(opaque); + + return apb_pnp->regs[offset >> 2]; +} + +static const MemoryRegionOps grlib_apb_pnp_ops =3D { + .read =3D grlib_apb_pnp_read, + .endianness =3D DEVICE_BIG_ENDIAN, +}; + +static void grlib_apb_pnp_realize(DeviceState *dev, Error **errp) +{ + APBPnp *apb_pnp =3D GRLIB_APB_PNP(dev); + SysBusDevice *sbd =3D SYS_BUS_DEVICE(dev); + + memory_region_init_io(&apb_pnp->iomem, OBJECT(dev), &grlib_apb_pnp_ops, + apb_pnp, TYPE_GRLIB_APB_PNP, GRLIB_PNP_MAX_REGS); + sysbus_init_mmio(sbd, &apb_pnp->iomem); +} + +static void grlib_apb_pnp_class_init(ObjectClass *klass, void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + + dc->realize =3D grlib_apb_pnp_realize; +} + +static const TypeInfo grlib_apb_pnp_info =3D { + .name =3D TYPE_GRLIB_APB_PNP, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(APBPnp), + .class_init =3D grlib_apb_pnp_class_init, +}; + +static void grlib_ahb_apb_pnp_register_types(void) +{ + type_register_static(&grlib_ahb_pnp_info); + type_register_static(&grlib_apb_pnp_info); +} + +type_init(grlib_ahb_apb_pnp_register_types) diff --git a/hw/sparc/leon3.c b/hw/sparc/leon3.c index 6ba63e68ca..bdead85a93 100644 --- a/hw/sparc/leon3.c +++ b/hw/sparc/leon3.c @@ -39,6 +39,7 @@ #include "exec/address-spaces.h" =20 #include "hw/sparc/grlib.h" +#include "hw/misc/grlib_ahb_apb_pnp.h" =20 /* Default system clock. */ #define CPU_CLK (40 * 1000 * 1000) @@ -58,6 +59,9 @@ #define LEON3_TIMER_IRQ (6) #define LEON3_TIMER_COUNT (2) =20 +#define LEON3_APB_PNP_OFFSET (0x800FF000) +#define LEON3_AHB_PNP_OFFSET (0xFFFFF000) + typedef struct ResetData { SPARCCPU *cpu; uint32_t entry; /* save kernel entry in case of reset */ @@ -187,6 +191,8 @@ static void leon3_generic_hw_init(MachineState *machine) ResetData *reset_info; DeviceState *dev; int i; + AHBPnp *ahb_pnp; + APBPnp *apb_pnp; =20 /* Init CPU */ cpu =3D SPARC_CPU(cpu_create(machine->cpu_type)); @@ -200,6 +206,20 @@ static void leon3_generic_hw_init(MachineState *machin= e) reset_info->sp =3D LEON3_RAM_OFFSET + ram_size; qemu_register_reset(main_cpu_reset, reset_info); =20 + ahb_pnp =3D GRLIB_AHB_PNP(object_new(TYPE_GRLIB_AHB_PNP)); + object_property_set_bool(OBJECT(ahb_pnp), true, "realized", &error_fat= al); + sysbus_mmio_map(SYS_BUS_DEVICE(ahb_pnp), 0, LEON3_AHB_PNP_OFFSET); + grlib_ahb_pnp_add_entry(ahb_pnp, 0, 0, GRLIB_VENDOR_GAISLER, + GRLIB_LEON3_DEV, GRLIB_AHB_MASTER, + GRLIB_CPU_AREA); + + apb_pnp =3D GRLIB_APB_PNP(object_new(TYPE_GRLIB_APB_PNP)); + object_property_set_bool(OBJECT(apb_pnp), true, "realized", &error_fat= al); + sysbus_mmio_map(SYS_BUS_DEVICE(apb_pnp), 0, LEON3_APB_PNP_OFFSET); + grlib_ahb_pnp_add_entry(ahb_pnp, LEON3_APB_PNP_OFFSET, 0xFFF, + GRLIB_VENDOR_GAISLER, GRLIB_APBMST_DEV, + GRLIB_AHB_SLAVE, GRLIB_AHBMEM_AREA); + /* Allocate IRQ manager */ dev =3D qdev_create(NULL, TYPE_GRLIB_IRQMP); qdev_prop_set_ptr(dev, "set_pil_in", leon3_set_pil_in); @@ -209,6 +229,9 @@ static void leon3_generic_hw_init(MachineState *machine) env->irq_manager =3D dev; env->qemu_irq_ack =3D leon3_irq_manager; cpu_irqs =3D qemu_allocate_irqs(grlib_irqmp_set_irq, dev, MAX_PILS); + grlib_apb_pnp_add_entry(apb_pnp, LEON3_IRQMP_OFFSET, 0xFFF, + GRLIB_VENDOR_GAISLER, GRLIB_IRQMP_DEV, + 2, 0, GRLIB_APBIO_AREA); =20 /* Allocate RAM */ if (ram_size > 1 * GiB) { @@ -303,6 +326,10 @@ static void leon3_generic_hw_init(MachineState *machin= e) cpu_irqs[LEON3_TIMER_IRQ + i]); } =20 + grlib_apb_pnp_add_entry(apb_pnp, LEON3_TIMER_OFFSET, 0xFFF, + GRLIB_VENDOR_GAISLER, GRLIB_GPTIMER_DEV, + 0, LEON3_TIMER_IRQ, GRLIB_APBIO_AREA); + /* Allocate uart */ if (serial_hd(0)) { dev =3D qdev_create(NULL, TYPE_GRLIB_APB_UART); @@ -310,6 +337,9 @@ static void leon3_generic_hw_init(MachineState *machine) qdev_init_nofail(dev); sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, LEON3_UART_OFFSET); sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, cpu_irqs[LEON3_UART_IRQ= ]); + grlib_apb_pnp_add_entry(apb_pnp, LEON3_UART_OFFSET, 0xFFF, + GRLIB_VENDOR_GAISLER, GRLIB_APBUART_DEV, 1, + LEON3_UART_IRQ, GRLIB_APBIO_AREA); } } =20 diff --git a/include/hw/misc/grlib_ahb_apb_pnp.h b/include/hw/misc/grlib_ah= b_apb_pnp.h new file mode 100644 index 0000000000..a0f6dcfda7 --- /dev/null +++ b/include/hw/misc/grlib_ahb_apb_pnp.h @@ -0,0 +1,60 @@ +/* + * GRLIB AHB APB PNP + * + * Copyright (C) 2019 AdaCore + * + * Developed by : + * Frederic Konrad + * + * 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. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, see . + * + */ + +#ifndef GRLIB_AHB_APB_PNP_H +#define GRLIB_AHB_APB_PNP_H + +#define TYPE_GRLIB_AHB_PNP "grlib,ahbpnp" +#define GRLIB_AHB_PNP(obj) \ + OBJECT_CHECK(AHBPnp, (obj), TYPE_GRLIB_AHB_PNP) +typedef struct AHBPnp AHBPnp; + +#define TYPE_GRLIB_APB_PNP "grlib,apbpnp" +#define GRLIB_APB_PNP(obj) \ + OBJECT_CHECK(APBPnp, (obj), TYPE_GRLIB_APB_PNP) +typedef struct APBPnp APBPnp; + +void grlib_ahb_pnp_add_entry(AHBPnp *dev, uint32_t address, uint32_t mask, + uint8_t vendor, uint16_t device, int slave, + int type); +void grlib_apb_pnp_add_entry(APBPnp *dev, uint32_t address, uint32_t mask, + uint8_t vendor, uint16_t device, uint8_t vers= ion, + uint8_t irq, int type); + +/* VENDORS */ +#define GRLIB_VENDOR_GAISLER (0x01) +/* DEVICES */ +#define GRLIB_LEON3_DEV (0x03) +#define GRLIB_APBMST_DEV (0x06) +#define GRLIB_APBUART_DEV (0x0C) +#define GRLIB_IRQMP_DEV (0x0D) +#define GRLIB_GPTIMER_DEV (0x11) +/* TYPE */ +#define GRLIB_CPU_AREA (0x00) +#define GRLIB_APBIO_AREA (0x01) +#define GRLIB_AHBMEM_AREA (0x02) + +#define GRLIB_AHB_MASTER (0x00) +#define GRLIB_AHB_SLAVE (0x01) + +#endif /* GRLIB_AHB_APB_PNP_H */ --=20 2.11.0 From nobody Sat May 18 07:09:02 2024 Delivered-To: importer@patchew.org Received-SPF: temperror (zoho.com: Error in retrieving data from DNS) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=temperror (zoho.com: Error in retrieving data from DNS) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1558086184; cv=none; d=zoho.com; s=zohoarc; b=YZhiMe6UMQjaaR3St1ILHZj2PLkia2yvLKdxOK4FeKvUIyz5FYGpda4On9Xxd1lrzSGrabNMWeAAGH4yHWtzFjjX760ISTm48r2GYf13y4jzA+5MTYCY0QPJVyevHQg+d9sEGkz5pbepxv8wg8dW+rJmPhJg0Ycy0Ksnr3Dhr3Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558086184; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=IOhsKdwPzv6Z7dtEf/Me9/skHs7lEoWIXAmIVZUEHrw=; b=WSajPsEW5t8oFaBm6p9DPDORd/Q08YSzOVxHkHBIlWu3VPxCZabrwADcJhb30CPIpPGTY2sIlYeZukcwUOGguFlFGfTV6WI3jvWeR5zYo1bQqpJ2Ro/2cT3uTLkSyNEqawx13eZYYKb+hky0x5VR5tCZUNGJxgzcPvRppmAvAKQ= ARC-Authentication-Results: i=1; mx.zoho.com; spf=temperror (zoho.com: Error in retrieving data from DNS) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1558086184943334.12336381941634; Fri, 17 May 2019 02:43:04 -0700 (PDT) Received: from localhost ([127.0.0.1]:45306 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hRZO5-0005VM-QU for importer@patchew.org; Fri, 17 May 2019 05:42:49 -0400 Received: from eggs.gnu.org ([209.51.188.92]:39910) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hRZM3-0004J2-Es for qemu-devel@nongnu.org; Fri, 17 May 2019 05:40:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hRZM2-0002Jd-K1 for qemu-devel@nongnu.org; Fri, 17 May 2019 05:40:43 -0400 Received: from mail.ilande.co.uk ([46.43.2.167]:55366 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hRZM2-0002Fe-Ea for qemu-devel@nongnu.org; Fri, 17 May 2019 05:40:42 -0400 Received: from host109-146-247-8.range109-146.btcentralplus.com ([109.146.247.8] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.89) (envelope-from ) id 1hRZLI-00018L-6y; Fri, 17 May 2019 10:39:56 +0100 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Fri, 17 May 2019 10:40:29 +0100 Message-Id: <20190517094029.7667-9-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190517094029.7667-1-mark.cave-ayland@ilande.co.uk> References: <20190517094029.7667-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 109.146.247.8 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk X-SA-Exim-Version: 4.2.1 (built Tue, 02 Aug 2016 21:08:31 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 46.43.2.167 Subject: [Qemu-devel] [PULL 8/8] MAINTAINERS: add myself for leon3 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" From: KONRAD Frederic Reviewed-by: Fabien Chouteau Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Mark Cave-Ayland Signed-off-by: KONRAD Frederic Signed-off-by: Mark Cave-Ayland --- MAINTAINERS | 1 + 1 file changed, 1 insertion(+) diff --git a/MAINTAINERS b/MAINTAINERS index bc54c6d212..9424a490d6 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1158,6 +1158,7 @@ F: include/hw/timer/sun4v-rtc.h =20 Leon3 M: Fabien Chouteau +M: KONRAD Frederic S: Maintained F: hw/sparc/leon3.c F: hw/*/grlib* --=20 2.11.0