xref: /qemu/include/hw/misc/allwinner-h3-dramc.h (revision 4dad0a9aa818698e0735c8352bf7925a1660df6f)
1b71d0385SNiek Linnenbank /*
2b71d0385SNiek Linnenbank  * Allwinner H3 SDRAM Controller emulation
3b71d0385SNiek Linnenbank  *
4b71d0385SNiek Linnenbank  * Copyright (C) 2019 Niek Linnenbank <nieklinnenbank@gmail.com>
5b71d0385SNiek Linnenbank  *
6b71d0385SNiek Linnenbank  * This program is free software: you can redistribute it and/or modify
7b71d0385SNiek Linnenbank  * it under the terms of the GNU General Public License as published by
8b71d0385SNiek Linnenbank  * the Free Software Foundation, either version 2 of the License, or
9b71d0385SNiek Linnenbank  * (at your option) any later version.
10b71d0385SNiek Linnenbank  *
11b71d0385SNiek Linnenbank  * This program is distributed in the hope that it will be useful,
12b71d0385SNiek Linnenbank  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13b71d0385SNiek Linnenbank  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14b71d0385SNiek Linnenbank  * GNU General Public License for more details.
15b71d0385SNiek Linnenbank  *
16b71d0385SNiek Linnenbank  * You should have received a copy of the GNU General Public License
17b71d0385SNiek Linnenbank  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18b71d0385SNiek Linnenbank  */
19b71d0385SNiek Linnenbank 
20b71d0385SNiek Linnenbank #ifndef HW_MISC_ALLWINNER_H3_DRAMC_H
21b71d0385SNiek Linnenbank #define HW_MISC_ALLWINNER_H3_DRAMC_H
22b71d0385SNiek Linnenbank 
23b71d0385SNiek Linnenbank #include "qom/object.h"
24b71d0385SNiek Linnenbank #include "hw/sysbus.h"
25b71d0385SNiek Linnenbank #include "exec/hwaddr.h"
26b71d0385SNiek Linnenbank 
27b71d0385SNiek Linnenbank /**
28b71d0385SNiek Linnenbank  * Constants
29b71d0385SNiek Linnenbank  * @{
30b71d0385SNiek Linnenbank  */
31b71d0385SNiek Linnenbank 
32b71d0385SNiek Linnenbank /** Highest register address used by DRAMCOM module */
33b71d0385SNiek Linnenbank #define AW_H3_DRAMCOM_REGS_MAXADDR  (0x804)
34b71d0385SNiek Linnenbank 
35b71d0385SNiek Linnenbank /** Total number of known DRAMCOM registers */
36b71d0385SNiek Linnenbank #define AW_H3_DRAMCOM_REGS_NUM      (AW_H3_DRAMCOM_REGS_MAXADDR / \
37b71d0385SNiek Linnenbank                                      sizeof(uint32_t))
38b71d0385SNiek Linnenbank 
39b71d0385SNiek Linnenbank /** Highest register address used by DRAMCTL module */
40b71d0385SNiek Linnenbank #define AW_H3_DRAMCTL_REGS_MAXADDR  (0x88c)
41b71d0385SNiek Linnenbank 
42b71d0385SNiek Linnenbank /** Total number of known DRAMCTL registers */
43b71d0385SNiek Linnenbank #define AW_H3_DRAMCTL_REGS_NUM      (AW_H3_DRAMCTL_REGS_MAXADDR / \
44b71d0385SNiek Linnenbank                                      sizeof(uint32_t))
45b71d0385SNiek Linnenbank 
46b71d0385SNiek Linnenbank /** Highest register address used by DRAMPHY module */
47b71d0385SNiek Linnenbank #define AW_H3_DRAMPHY_REGS_MAXADDR  (0x4)
48b71d0385SNiek Linnenbank 
49b71d0385SNiek Linnenbank /** Total number of known DRAMPHY registers */
50b71d0385SNiek Linnenbank #define AW_H3_DRAMPHY_REGS_NUM      (AW_H3_DRAMPHY_REGS_MAXADDR / \
51b71d0385SNiek Linnenbank                                      sizeof(uint32_t))
52b71d0385SNiek Linnenbank 
53b71d0385SNiek Linnenbank /** @} */
54b71d0385SNiek Linnenbank 
55b71d0385SNiek Linnenbank /**
56b71d0385SNiek Linnenbank  * Object model
57b71d0385SNiek Linnenbank  * @{
58b71d0385SNiek Linnenbank  */
59b71d0385SNiek Linnenbank 
60b71d0385SNiek Linnenbank #define TYPE_AW_H3_DRAMC "allwinner-h3-dramc"
61*8063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(AwH3DramCtlState, AW_H3_DRAMC)
62b71d0385SNiek Linnenbank 
63b71d0385SNiek Linnenbank /** @} */
64b71d0385SNiek Linnenbank 
65b71d0385SNiek Linnenbank /**
66b71d0385SNiek Linnenbank  * Allwinner H3 SDRAM Controller object instance state.
67b71d0385SNiek Linnenbank  */
68db1015e9SEduardo Habkost struct AwH3DramCtlState {
69b71d0385SNiek Linnenbank     /*< private >*/
70b71d0385SNiek Linnenbank     SysBusDevice parent_obj;
71b71d0385SNiek Linnenbank     /*< public >*/
72b71d0385SNiek Linnenbank 
73b71d0385SNiek Linnenbank     /** Physical base address for start of RAM */
74b71d0385SNiek Linnenbank     hwaddr ram_addr;
75b71d0385SNiek Linnenbank 
76b71d0385SNiek Linnenbank     /** Total RAM size in megabytes */
77b71d0385SNiek Linnenbank     uint32_t ram_size;
78b71d0385SNiek Linnenbank 
79b71d0385SNiek Linnenbank     /**
80b71d0385SNiek Linnenbank      * @name Memory Regions
81b71d0385SNiek Linnenbank      * @{
82b71d0385SNiek Linnenbank      */
83b71d0385SNiek Linnenbank 
84b71d0385SNiek Linnenbank     MemoryRegion row_mirror;       /**< Simulates rows for RAM size detection */
85b71d0385SNiek Linnenbank     MemoryRegion row_mirror_alias; /**< Alias of the row which is mirrored */
86b71d0385SNiek Linnenbank     MemoryRegion dramcom_iomem;    /**< DRAMCOM module I/O registers */
87b71d0385SNiek Linnenbank     MemoryRegion dramctl_iomem;    /**< DRAMCTL module I/O registers */
88b71d0385SNiek Linnenbank     MemoryRegion dramphy_iomem;    /**< DRAMPHY module I/O registers */
89b71d0385SNiek Linnenbank 
90b71d0385SNiek Linnenbank     /** @} */
91b71d0385SNiek Linnenbank 
92b71d0385SNiek Linnenbank     /**
93b71d0385SNiek Linnenbank      * @name Hardware Registers
94b71d0385SNiek Linnenbank      * @{
95b71d0385SNiek Linnenbank      */
96b71d0385SNiek Linnenbank 
97b71d0385SNiek Linnenbank     uint32_t dramcom[AW_H3_DRAMCOM_REGS_NUM]; /**< Array of DRAMCOM registers */
98b71d0385SNiek Linnenbank     uint32_t dramctl[AW_H3_DRAMCTL_REGS_NUM]; /**< Array of DRAMCTL registers */
99b71d0385SNiek Linnenbank     uint32_t dramphy[AW_H3_DRAMPHY_REGS_NUM] ;/**< Array of DRAMPHY registers */
100b71d0385SNiek Linnenbank 
101b71d0385SNiek Linnenbank     /** @} */
102b71d0385SNiek Linnenbank 
103db1015e9SEduardo Habkost };
104b71d0385SNiek Linnenbank 
105b71d0385SNiek Linnenbank #endif /* HW_MISC_ALLWINNER_H3_DRAMC_H */
106