xref: /openbmc/qemu/include/hw/misc/mps2-scc.h (revision 3ff11e4dcabe2b5b4c26e49d741018ec326f127f)
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