1 /* 2 * Raspberry Pi 4B emulation 3 * 4 * Copyright (C) 2022 Ovchinnikov Vitalii <vitalii.ovchinnikov@auriga.com> 5 * 6 * SPDX-License-Identifier: GPL-2.0-or-later 7 */ 8 9 #include "qemu/osdep.h" 10 #include "qemu/units.h" 11 #include "qemu/cutils.h" 12 #include "qapi/error.h" 13 #include "qapi/visitor.h" 14 #include "hw/arm/raspi_platform.h" 15 #include "hw/display/bcm2835_fb.h" 16 #include "hw/registerfields.h" 17 #include "qemu/error-report.h" 18 #include "sysemu/device_tree.h" 19 #include "hw/boards.h" 20 #include "hw/loader.h" 21 #include "hw/arm/boot.h" 22 #include "qom/object.h" 23 #include "hw/arm/bcm2838.h" 24 25 #define TYPE_RASPI4B_MACHINE MACHINE_TYPE_NAME("raspi4b") 26 OBJECT_DECLARE_SIMPLE_TYPE(Raspi4bMachineState, RASPI4B_MACHINE) 27 28 struct Raspi4bMachineState { 29 RaspiBaseMachineState parent_obj; 30 BCM2838State soc; 31 }; 32 33 static void raspi4b_machine_init(MachineState *machine) 34 { 35 Raspi4bMachineState *s = RASPI4B_MACHINE(machine); 36 RaspiBaseMachineState *s_base = RASPI_BASE_MACHINE(machine); 37 RaspiBaseMachineClass *mc = RASPI_BASE_MACHINE_GET_CLASS(machine); 38 BCM2838State *soc = &s->soc; 39 40 s_base->binfo.board_id = mc->board_rev; 41 42 object_initialize_child(OBJECT(machine), "soc", soc, 43 board_soc_type(mc->board_rev)); 44 45 raspi_base_machine_init(machine, &soc->parent_obj); 46 } 47 48 static void raspi4b_machine_class_init(ObjectClass *oc, void *data) 49 { 50 MachineClass *mc = MACHINE_CLASS(oc); 51 RaspiBaseMachineClass *rmc = RASPI_BASE_MACHINE_CLASS(oc); 52 53 rmc->board_rev = 0xb03115; /* Revision 1.5, 2 Gb RAM */ 54 raspi_machine_class_common_init(mc, rmc->board_rev); 55 mc->init = raspi4b_machine_init; 56 } 57 58 static const TypeInfo raspi4b_machine_type = { 59 .name = TYPE_RASPI4B_MACHINE, 60 .parent = TYPE_RASPI_BASE_MACHINE, 61 .instance_size = sizeof(Raspi4bMachineState), 62 .class_init = raspi4b_machine_class_init, 63 }; 64 65 static void raspi4b_machine_register_type(void) 66 { 67 type_register_static(&raspi4b_machine_type); 68 } 69 70 type_init(raspi4b_machine_register_type) 71