xref: /qemu/include/hw/misc/mps2-scc.h (revision 727385c4)
1 /*
2  * ARM MPS2 SCC emulation
3  *
4  * Copyright (c) 2017 Linaro Limited
5  * Written by Peter Maydell
6  *
7  *  This program is free software; you can redistribute it and/or modify
8  *  it under the terms of the GNU General Public License version 2 or
9  *  (at your option) any later version.
10  */
11 
12 /*
13  * This is a model of the Serial Communication Controller (SCC)
14  * block found in most MPS FPGA images.
15  *
16  * QEMU interface:
17  *  + sysbus MMIO region 0: the register bank
18  *  + QOM property "scc-cfg4": value of the read-only CFG4 register
19  *  + QOM property "scc-aid": value of the read-only SCC_AID register
20  *  + QOM property "scc-id": value of the read-only SCC_ID register
21  *  + QOM property "scc-cfg0": reset value of the CFG0 register
22  *  + QOM property array "oscclk": reset values of the OSCCLK registers
23  *    (which are accessed via the SYS_CFG channel provided by this device)
24  *  + named GPIO output "remap": this tracks the value of CFG0 register
25  *    bit 0. Boards where this bit controls memory remapping should
26  *    connect this GPIO line to a function performing that mapping.
27  *    Boards where bit 0 has no special function should leave the GPIO
28  *    output disconnected.
29  */
30 #ifndef MPS2_SCC_H
31 #define MPS2_SCC_H
32 
33 #include "hw/sysbus.h"
34 #include "hw/misc/led.h"
35 #include "qom/object.h"
36 
37 #define TYPE_MPS2_SCC "mps2-scc"
38 OBJECT_DECLARE_SIMPLE_TYPE(MPS2SCC, MPS2_SCC)
39 
40 struct MPS2SCC {
41     /*< private >*/
42     SysBusDevice parent_obj;
43 
44     /*< public >*/
45     MemoryRegion iomem;
46     LEDState *led[8];
47 
48     uint32_t cfg0;
49     uint32_t cfg1;
50     uint32_t cfg2;
51     uint32_t cfg4;
52     uint32_t cfg5;
53     uint32_t cfg6;
54     uint32_t cfgdata_rtn;
55     uint32_t cfgdata_out;
56     uint32_t cfgctrl;
57     uint32_t cfgstat;
58     uint32_t dll;
59     uint32_t aid;
60     uint32_t id;
61     uint32_t num_oscclk;
62     uint32_t *oscclk;
63     uint32_t *oscclk_reset;
64     uint32_t cfg0_reset;
65 
66     qemu_irq remap;
67 };
68 
69 #endif
70