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