1dd73185bSPeter Maydell /* 2dd73185bSPeter Maydell * ARM MPS2 SCC emulation 3dd73185bSPeter Maydell * 4dd73185bSPeter Maydell * Copyright (c) 2017 Linaro Limited 5dd73185bSPeter Maydell * Written by Peter Maydell 6dd73185bSPeter Maydell * 7dd73185bSPeter Maydell * This program is free software; you can redistribute it and/or modify 8dd73185bSPeter Maydell * it under the terms of the GNU General Public License version 2 or 9dd73185bSPeter Maydell * (at your option) any later version. 10dd73185bSPeter Maydell */ 11dd73185bSPeter Maydell 12c52c266dSPeter Maydell /* 13c52c266dSPeter Maydell * This is a model of the Serial Communication Controller (SCC) 14c52c266dSPeter Maydell * block found in most MPS FPGA images. 15c52c266dSPeter Maydell * 16c52c266dSPeter Maydell * QEMU interface: 17c52c266dSPeter Maydell * + sysbus MMIO region 0: the register bank 18c52c266dSPeter Maydell * + QOM property "scc-cfg4": value of the read-only CFG4 register 19c52c266dSPeter Maydell * + QOM property "scc-aid": value of the read-only SCC_AID register 20c52c266dSPeter Maydell * + QOM property "scc-id": value of the read-only SCC_ID register 215bddf92eSPeter Maydell * + QOM property "scc-cfg0": reset value of the CFG0 register 22c52c266dSPeter Maydell * + QOM property array "oscclk": reset values of the OSCCLK registers 23c52c266dSPeter Maydell * (which are accessed via the SYS_CFG channel provided by this device) 245bddf92eSPeter Maydell * + named GPIO output "remap": this tracks the value of CFG0 register 255bddf92eSPeter Maydell * bit 0. Boards where this bit controls memory remapping should 265bddf92eSPeter Maydell * connect this GPIO line to a function performing that mapping. 275bddf92eSPeter Maydell * Boards where bit 0 has no special function should leave the GPIO 285bddf92eSPeter Maydell * output disconnected. 29c52c266dSPeter Maydell */ 30dd73185bSPeter Maydell #ifndef MPS2_SCC_H 31dd73185bSPeter Maydell #define MPS2_SCC_H 32dd73185bSPeter Maydell 33dd73185bSPeter Maydell #include "hw/sysbus.h" 34435db7ebSPhilippe Mathieu-Daudé #include "hw/misc/led.h" 35db1015e9SEduardo Habkost #include "qom/object.h" 36dd73185bSPeter Maydell 37dd73185bSPeter Maydell #define TYPE_MPS2_SCC "mps2-scc" 388063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(MPS2SCC, MPS2_SCC) 39dd73185bSPeter Maydell 40db1015e9SEduardo Habkost struct MPS2SCC { 41dd73185bSPeter Maydell /*< private >*/ 42dd73185bSPeter Maydell SysBusDevice parent_obj; 43dd73185bSPeter Maydell 44dd73185bSPeter Maydell /*< public >*/ 45dd73185bSPeter Maydell MemoryRegion iomem; 46435db7ebSPhilippe Mathieu-Daudé LEDState *led[8]; 47dd73185bSPeter Maydell 48dd73185bSPeter Maydell uint32_t cfg0; 49dd73185bSPeter Maydell uint32_t cfg1; 508e4b4c1cSPeter Maydell uint32_t cfg2; 51dd73185bSPeter Maydell uint32_t cfg4; 528e4b4c1cSPeter Maydell uint32_t cfg5; 538e4b4c1cSPeter Maydell uint32_t cfg6; 54*2a5ee4e1SPeter Maydell uint32_t cfg7; 55dd73185bSPeter Maydell uint32_t cfgdata_rtn; 56dd73185bSPeter Maydell uint32_t cfgdata_out; 57dd73185bSPeter Maydell uint32_t cfgctrl; 58dd73185bSPeter Maydell uint32_t cfgstat; 59dd73185bSPeter Maydell uint32_t dll; 60dd73185bSPeter Maydell uint32_t aid; 61dd73185bSPeter Maydell uint32_t id; 624fb013afSPeter Maydell uint32_t num_oscclk; 634fb013afSPeter Maydell uint32_t *oscclk; 644fb013afSPeter Maydell uint32_t *oscclk_reset; 655bddf92eSPeter Maydell uint32_t cfg0_reset; 665bddf92eSPeter Maydell 675bddf92eSPeter Maydell qemu_irq remap; 68db1015e9SEduardo Habkost }; 69dd73185bSPeter Maydell 70dd73185bSPeter Maydell #endif 71