cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

collie.c (2745B)


      1/*
      2 * SA-1110-based Sharp Zaurus SL-5500 platform.
      3 *
      4 * Copyright (C) 2011 Dmitry Eremin-Solenikov
      5 *
      6 * This code is licensed under GNU GPL v2.
      7 *
      8 * Contributions after 2012-01-13 are licensed under the terms of the
      9 * GNU GPL, version 2 or (at your option) any later version.
     10 */
     11#include "qemu/osdep.h"
     12#include "qemu/units.h"
     13#include "qemu/cutils.h"
     14#include "hw/sysbus.h"
     15#include "hw/boards.h"
     16#include "strongarm.h"
     17#include "hw/arm/boot.h"
     18#include "hw/block/flash.h"
     19#include "exec/address-spaces.h"
     20#include "cpu.h"
     21#include "qom/object.h"
     22
     23struct CollieMachineState {
     24    MachineState parent;
     25
     26    StrongARMState *sa1110;
     27};
     28
     29#define TYPE_COLLIE_MACHINE MACHINE_TYPE_NAME("collie")
     30OBJECT_DECLARE_SIMPLE_TYPE(CollieMachineState, COLLIE_MACHINE)
     31
     32static struct arm_boot_info collie_binfo = {
     33    .loader_start = SA_SDCS0,
     34    .ram_size = 0x20000000,
     35};
     36
     37static void collie_init(MachineState *machine)
     38{
     39    DriveInfo *dinfo;
     40    MachineClass *mc = MACHINE_GET_CLASS(machine);
     41    CollieMachineState *cms = COLLIE_MACHINE(machine);
     42
     43    if (machine->ram_size != mc->default_ram_size) {
     44        char *sz = size_to_str(mc->default_ram_size);
     45        error_report("Invalid RAM size, should be %s", sz);
     46        g_free(sz);
     47        exit(EXIT_FAILURE);
     48    }
     49
     50    cms->sa1110 = sa1110_init(machine->cpu_type);
     51
     52    memory_region_add_subregion(get_system_memory(), SA_SDCS0, machine->ram);
     53
     54    dinfo = drive_get(IF_PFLASH, 0, 0);
     55    pflash_cfi01_register(SA_CS0, "collie.fl1", 0x02000000,
     56                    dinfo ? blk_by_legacy_dinfo(dinfo) : NULL,
     57                    64 * KiB, 4, 0x00, 0x00, 0x00, 0x00, 0);
     58
     59    dinfo = drive_get(IF_PFLASH, 0, 1);
     60    pflash_cfi01_register(SA_CS1, "collie.fl2", 0x02000000,
     61                    dinfo ? blk_by_legacy_dinfo(dinfo) : NULL,
     62                    64 * KiB, 4, 0x00, 0x00, 0x00, 0x00, 0);
     63
     64    sysbus_create_simple("scoop", 0x40800000, NULL);
     65
     66    collie_binfo.board_id = 0x208;
     67    arm_load_kernel(cms->sa1110->cpu, machine, &collie_binfo);
     68}
     69
     70static void collie_machine_class_init(ObjectClass *oc, void *data)
     71{
     72    MachineClass *mc = MACHINE_CLASS(oc);
     73
     74    mc->desc = "Sharp SL-5500 (Collie) PDA (SA-1110)";
     75    mc->init = collie_init;
     76    mc->ignore_memory_transaction_failures = true;
     77    mc->default_cpu_type = ARM_CPU_TYPE_NAME("sa1110");
     78    mc->default_ram_size = 0x20000000;
     79    mc->default_ram_id = "strongarm.sdram";
     80}
     81
     82static const TypeInfo collie_machine_typeinfo = {
     83    .name = TYPE_COLLIE_MACHINE,
     84    .parent = TYPE_MACHINE,
     85    .class_init = collie_machine_class_init,
     86    .instance_size = sizeof(CollieMachineState),
     87};
     88
     89static void collie_machine_register_types(void)
     90{
     91    type_register_static(&collie_machine_typeinfo);
     92}
     93type_init(collie_machine_register_types);