diff mbox series

[v4,17/18] hw/avr: Remove the unrealistic AVR 'sample' board

Message ID 20200120220107.17825-18-f4bug@amsat.org
State New
Headers show
Series hw/avr: Introduce few Arduino boards | expand

Commit Message

Philippe Mathieu-Daudé Jan. 20, 2020, 10:01 p.m. UTC
The 'arduino-mega-2560-v3' board fully replace the 'sample'
board.

Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
!squash?
---
 default-configs/avr-softmmu.mak |   1 -
 hw/avr/sample.c                 | 295 --------------------------------
 tests/qtest/boot-serial-test.c  |   1 -
 hw/avr/Kconfig                  |   4 -
 hw/avr/Makefile.objs            |   1 -
 5 files changed, 302 deletions(-)
 delete mode 100644 hw/avr/sample.c
diff mbox series

Patch

diff --git a/default-configs/avr-softmmu.mak b/default-configs/avr-softmmu.mak
index d8d1d8e6fe..80218add98 100644
--- a/default-configs/avr-softmmu.mak
+++ b/default-configs/avr-softmmu.mak
@@ -3,4 +3,3 @@ 
 # Boards:
 #
 CONFIG_ARDUINO=y
-CONFIG_AVR_SAMPLE=y
diff --git a/hw/avr/sample.c b/hw/avr/sample.c
deleted file mode 100644
index 19b8c067e5..0000000000
--- a/hw/avr/sample.c
+++ /dev/null
@@ -1,295 +0,0 @@ 
-/*
- * QEMU AVR CPU
- *
- * Copyright (c) 2019 Michael Rolnik
- *
- * 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.1 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
- * <http://www.gnu.org/licenses/lgpl-2.1.html>
- */
-
-/*
- *  NOTE:
- *      This is not a real AVR board, this is an example!
- *      The CPU is an approximation of an ATmega2560, but is missing various
- *      built-in peripherals.
- *
- *      This example board loads provided binary file into flash memory and
- *      executes it from 0x00000000 address in the code memory space.
- *
- *      Currently used for AVR CPU validation
- *
- */
-
-#include "qemu/osdep.h"
-#include "qapi/error.h"
-#include "qemu-common.h"
-#include "cpu.h"
-#include "hw/hw.h"
-#include "sysemu/sysemu.h"
-#include "sysemu/qtest.h"
-#include "ui/console.h"
-#include "hw/boards.h"
-#include "hw/loader.h"
-#include "qemu/error-report.h"
-#include "exec/address-spaces.h"
-#include "include/hw/sysbus.h"
-#include "include/hw/char/atmel_usart.h"
-#include "include/hw/timer/atmel_timer16.h"
-#include "include/hw/misc/atmel_power.h"
-#include "elf.h"
-#include "hw/misc/unimp.h"
-
-#define SIZE_FLASH 0x00040000
-#define SIZE_SRAM 0x00002000
-/*
- * Size of additional "external" memory, as if the AVR were configured to use
- * an external RAM chip.
- * Note that the configuration registers that normally enable this feature are
- * unimplemented.
- */
-#define SIZE_EXMEM 0x00000000
-
-/* Offsets of peripherals in emulated memory space (i.e. not host addresses)  */
-#define PRR0_BASE 0x64
-#define PRR1_BASE 0x65
-#define USART_BASE 0xc0
-#define TIMER1_BASE 0x80
-#define TIMER1_IMSK_BASE 0x6f
-#define TIMER1_IFR_BASE 0x36
-
-/* Interrupt numbers used by peripherals */
-#define USART_RXC_IRQ 24
-#define USART_DRE_IRQ 25
-#define USART_TXC_IRQ 26
-
-#define TIMER1_CAPT_IRQ 15
-#define TIMER1_COMPA_IRQ 16
-#define TIMER1_COMPB_IRQ 17
-#define TIMER1_COMPC_IRQ 18
-#define TIMER1_OVF_IRQ 19
-
-/*  Power reduction     */
-#define PRR1_BIT_PRTIM5     0x05    /*  Timer/Counter5  */
-#define PRR1_BIT_PRTIM4     0x04    /*  Timer/Counter4  */
-#define PRR1_BIT_PRTIM3     0x03    /*  Timer/Counter3  */
-#define PRR1_BIT_PRUSART3   0x02    /*  USART3  */
-#define PRR1_BIT_PRUSART2   0x01    /*  USART2  */
-#define PRR1_BIT_PRUSART1   0x00    /*  USART1  */
-
-#define PRR0_BIT_PRTWI      0x06    /*  TWI */
-#define PRR0_BIT_PRTIM2     0x05    /*  Timer/Counter2  */
-#define PRR0_BIT_PRTIM0     0x04    /*  Timer/Counter0  */
-#define PRR0_BIT_PRTIM1     0x03    /*  Timer/Counter1  */
-#define PRR0_BIT_PRSPI      0x02    /*  Serial Peripheral Interface */
-#define PRR0_BIT_PRUSART0   0x01    /*  USART0  */
-#define PRR0_BIT_PRADC      0x00    /*  ADC */
-
-#define configCPU_CLOCK_HZ ((unsigned long)16000000)
-
-typedef struct {
-    MachineClass parent;
-} SampleMachineClass;
-
-typedef struct {
-    MachineState parent;
-    MemoryRegion *ram;
-    MemoryRegion *flash;
-    AVRUsartState *usart0;
-    AVRTimer16State *timer1;
-    AVRMaskState *prr[2];
-} SampleMachineState;
-
-#define TYPE_SAMPLE_MACHINE MACHINE_TYPE_NAME("sample")
-
-#define SAMPLE_MACHINE(obj) \
-    OBJECT_CHECK(SampleMachineState, obj, TYPE_SAMPLE_MACHINE)
-#define SAMPLE_MACHINE_GET_CLASS(obj) \
-    OBJECT_GET_CLASS(SampleMachineClass, obj, TYPE_SAMPLE_MACHINE)
-#define SAMPLE_MACHINE_CLASS(klass) \
-    OBJECT_CLASS_CHECK(SampleMachineClass, klass, TYPE_SAMPLE_MACHINE)
-
-static void sample_init(MachineState *machine)
-{
-    SampleMachineState *sms = SAMPLE_MACHINE(machine);
-    MemoryRegion *system_memory = get_system_memory();
-    AVRCPU *cpu;
-    const char *firmware = NULL;
-    const char *filename = NULL;
-    const char *cpu_type = NULL;
-    uint32_t e_flags;
-    int bytes_loaded;
-    SysBusDevice *busdev;
-    DeviceState *cpudev;
-
-    system_memory = get_system_memory();
-    sms->ram = g_new(MemoryRegion, 1);
-    sms->flash = g_new(MemoryRegion, 1);
-
-    /* if ELF file is provided, determine CPU type reading ELF e_flags */
-    cpu_type = machine->cpu_type;
-    firmware = machine->firmware;
-    if (firmware != NULL) {
-        filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, firmware);
-        if (filename == NULL) {
-            error_report("Unable to find %s", firmware);
-            exit(1);
-        }
-
-        bytes_loaded = load_elf_ram_sym(filename, NULL, NULL, NULL, NULL, NULL,
-                NULL, &e_flags, 0, EM_AVR, 0, 0, NULL, 0, 0);
-        if (bytes_loaded > 0) {
-            cpu_type = avr_flags_to_cpu_type(e_flags, cpu_type);
-        }
-    }
-
-    cpu = AVR_CPU(cpu_create(cpu_type));
-    cpudev = DEVICE(cpu);
-
-    memory_region_init_rom(sms->flash, NULL, "avr.flash", SIZE_FLASH,
-            &error_fatal);
-    memory_region_add_subregion(system_memory, OFFSET_CODE, sms->flash);
-
-    /* following are atmel2560 device */
-    create_unimplemented_device("usart 3", OFFSET_DATA + 0x0130, 0x0007);
-    create_unimplemented_device("timer-counter-16bit 5",
-            OFFSET_DATA + 0x0120, 0x000e);
-    create_unimplemented_device("gpio L", OFFSET_DATA + 0x0109, 0x0003);
-    create_unimplemented_device("gpio K", OFFSET_DATA + 0x0106, 0x0003);
-    create_unimplemented_device("gpio J", OFFSET_DATA + 0x0103, 0x0003);
-    create_unimplemented_device("gpio H", OFFSET_DATA + 0x0100, 0x0003);
-    create_unimplemented_device("usart 2", OFFSET_DATA + 0x00d0, 0x0007);
-    create_unimplemented_device("usart 1", OFFSET_DATA + 0x00c8, 0x0007);
-    create_unimplemented_device("twi", OFFSET_DATA + 0x00b8, 0x0006);
-    create_unimplemented_device("timer-counter-async-8bit 2",
-            OFFSET_DATA + 0x00b0, 0x0007);
-    create_unimplemented_device("timer-counter-16bit 4",
-            OFFSET_DATA + 0x00a0, 0x000e);
-    create_unimplemented_device("timer-counter-16bit 3",
-            OFFSET_DATA + 0x0090, 0x000e);
-    create_unimplemented_device("ac / adc",
-            OFFSET_DATA + 0x0078, 0x0008);
-    create_unimplemented_device("ext-mem-iface",
-            OFFSET_DATA + 0x0074, 0x0002);
-    create_unimplemented_device("int-controller",
-            OFFSET_DATA + 0x0068, 0x0006);
-    create_unimplemented_device("sys",
-            OFFSET_DATA + 0x0060, 0x0007);
-    create_unimplemented_device("spi",
-            OFFSET_DATA + 0x004c, 0x0003);
-    create_unimplemented_device("ext-mem-iface",
-            OFFSET_DATA + 0x004a, 0x0002);
-    create_unimplemented_device("timer-counter-pwm-8bit 0",
-            OFFSET_DATA + 0x0044, 0x0005);
-    create_unimplemented_device("ext-mem-iface",
-            OFFSET_DATA + 0x003e, 0x0005);
-    create_unimplemented_device("int-controller",
-            OFFSET_DATA + 0x0035, 0x0009);
-    create_unimplemented_device("gpio G", OFFSET_DATA + 0x0032, 0x0003);
-    create_unimplemented_device("gpio F", OFFSET_DATA + 0x002f, 0x0003);
-    create_unimplemented_device("gpio E", OFFSET_DATA + 0x002c, 0x0003);
-    create_unimplemented_device("gpio D", OFFSET_DATA + 0x0029, 0x0003);
-    create_unimplemented_device("gpio C", OFFSET_DATA + 0x0026, 0x0003);
-    create_unimplemented_device("gpio B", OFFSET_DATA + 0x0023, 0x0003);
-    create_unimplemented_device("gpio A", OFFSET_DATA + 0x0020, 0x0003);
-
-    memory_region_allocate_system_memory(
-        sms->ram, NULL, "avr.ram", SIZE_SRAM + SIZE_EXMEM);
-    memory_region_add_subregion(system_memory, OFFSET_DATA + 0x200, sms->ram);
-
-    /* Power Reduction built-in peripheral */
-    sms->prr[0] = AVR_MASK(sysbus_create_simple(TYPE_AVR_MASK,
-                    OFFSET_DATA + PRR0_BASE, NULL));
-    sms->prr[1] = AVR_MASK(sysbus_create_simple(TYPE_AVR_MASK,
-                    OFFSET_DATA + PRR1_BASE, NULL));
-
-    /* USART 0 built-in peripheral */
-    sms->usart0 = AVR_USART(object_new(TYPE_AVR_USART));
-    busdev = SYS_BUS_DEVICE(sms->usart0);
-    qdev_prop_set_chr(DEVICE(sms->usart0), "chardev", serial_hd(0));
-    object_property_set_bool(OBJECT(sms->usart0), true, "realized",
-            &error_fatal);
-    sysbus_mmio_map(busdev, 0, OFFSET_DATA + USART_BASE);
-    /*
-     * These IRQ numbers don't match the datasheet because we're counting from
-     * zero and not including reset.
-     */
-    sysbus_connect_irq(busdev, 0, qdev_get_gpio_in(cpudev, USART_RXC_IRQ));
-    sysbus_connect_irq(busdev, 1, qdev_get_gpio_in(cpudev, USART_DRE_IRQ));
-    sysbus_connect_irq(busdev, 2, qdev_get_gpio_in(cpudev, USART_TXC_IRQ));
-    sysbus_connect_irq(SYS_BUS_DEVICE(sms->prr[1]), PRR1_BIT_PRUSART1,
-            qdev_get_gpio_in(DEVICE(sms->usart0), 0));
-
-    /* Timer 1 built-in periphal */
-    sms->timer1 = AVR_TIMER16(object_new(TYPE_AVR_TIMER16));
-    object_property_set_uint(OBJECT(sms->timer1), 1, "id", &error_abort);
-    object_property_set_uint(OBJECT(sms->timer1), configCPU_CLOCK_HZ,
-                                 "cpu-frequency-hz", &error_abort);
-    object_property_set_bool(OBJECT(sms->timer1), true, "realized",
-            &error_fatal);
-    busdev = SYS_BUS_DEVICE(sms->timer1);
-    sysbus_mmio_map(busdev, 0, OFFSET_DATA + TIMER1_BASE);
-    sysbus_mmio_map(busdev, 1, OFFSET_DATA + TIMER1_IMSK_BASE);
-    sysbus_mmio_map(busdev, 2, OFFSET_DATA + TIMER1_IFR_BASE);
-    sysbus_connect_irq(busdev, 0, qdev_get_gpio_in(cpudev, TIMER1_CAPT_IRQ));
-    sysbus_connect_irq(busdev, 1, qdev_get_gpio_in(cpudev, TIMER1_COMPA_IRQ));
-    sysbus_connect_irq(busdev, 2, qdev_get_gpio_in(cpudev, TIMER1_COMPB_IRQ));
-    sysbus_connect_irq(busdev, 3, qdev_get_gpio_in(cpudev, TIMER1_COMPC_IRQ));
-    sysbus_connect_irq(busdev, 4, qdev_get_gpio_in(cpudev, TIMER1_OVF_IRQ));
-    sysbus_connect_irq(SYS_BUS_DEVICE(sms->prr[0]), PRR0_BIT_PRTIM1,
-            qdev_get_gpio_in(DEVICE(sms->timer1), 0));
-
-    /* Load firmware (contents of flash) trying to auto-detect format */
-    if (filename != NULL) {
-        bytes_loaded = load_elf(
-            filename, NULL, NULL, NULL, NULL, NULL, NULL, 0, EM_NONE, 0, 0);
-        if (bytes_loaded < 0) {
-            bytes_loaded = load_image_targphys(
-                filename, OFFSET_CODE, SIZE_FLASH);
-        }
-        if (bytes_loaded < 0) {
-            error_report(
-                "Unable to load firmware image %s as ELF or raw binary",
-                firmware);
-            exit(1);
-        }
-    }
-}
-
-static void sample_class_init(ObjectClass *oc, void *data)
-{
-    MachineClass *mc = MACHINE_CLASS(oc);
-
-    mc->desc = "AVR sample/example board (ATmega2560)";
-    mc->init = sample_init;
-    mc->default_cpus = 1;
-    mc->min_cpus = mc->default_cpus;
-    mc->max_cpus = mc->default_cpus;
-    mc->default_cpu_type = AVR_CPU_TYPE_NAME("avr5");
-    mc->is_default = 1;
-}
-
-static const TypeInfo sample_info = {
-    .name = TYPE_SAMPLE_MACHINE,
-    .parent = TYPE_MACHINE,
-    .instance_size = sizeof(SampleMachineState),
-    .class_size = sizeof(SampleMachineClass),
-    .class_init = sample_class_init,
-};
-
-static void sample_machine_init(void)
-{
-    type_register_static(&sample_info);
-}
-
-type_init(sample_machine_init);
diff --git a/tests/qtest/boot-serial-test.c b/tests/qtest/boot-serial-test.c
index 582a497963..07067b76a2 100644
--- a/tests/qtest/boot-serial-test.c
+++ b/tests/qtest/boot-serial-test.c
@@ -112,7 +112,6 @@  typedef struct testdef {
 
 static testdef_t tests[] = {
     { "alpha", "clipper", "", "PCI:" },
-    { "avr", "sample", "", "T", sizeof(bios_avr), NULL, bios_avr },
     { "avr", "arduino-duemilanove", "", "T", sizeof(bios_avr), NULL, bios_avr },
     { "avr", "arduino-mega-2560-v3", "", "T", sizeof(bios_avr), NULL, bios_avr},
     { "ppc", "ppce500", "", "U-Boot" },
diff --git a/hw/avr/Kconfig b/hw/avr/Kconfig
index 7907584ac7..59d9649d27 100644
--- a/hw/avr/Kconfig
+++ b/hw/avr/Kconfig
@@ -7,7 +7,3 @@  config ATMEL_ATMEGA_MCU
 config ARDUINO
     select ATMEL_ATMEGA_MCU
     select UNIMP
-
-config AVR_SAMPLE
-    select ATMEL_ATMEGA_MCU
-    select UNIMP
diff --git a/hw/avr/Makefile.objs b/hw/avr/Makefile.objs
index b36ca77cf0..f6aab1438d 100644
--- a/hw/avr/Makefile.objs
+++ b/hw/avr/Makefile.objs
@@ -1,3 +1,2 @@ 
 obj-$(CONFIG_ATMEL_ATMEGA_MCU) += atmel_atmega.o
 obj-$(CONFIG_ARDUINO) += arduino.o
-obj-$(CONFIG_AVR_SAMPLE) += sample.o