1 /* 2 * QEMU PowerPC 405 shared definitions 3 * 4 * Copyright (c) 2007 Jocelyn Mayer 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a copy 7 * of this software and associated documentation files (the "Software"), to deal 8 * in the Software without restriction, including without limitation the rights 9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 * copies of the Software, and to permit persons to whom the Software is 11 * furnished to do so, subject to the following conditions: 12 * 13 * The above copyright notice and this permission notice shall be included in 14 * all copies or substantial portions of the Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 * THE SOFTWARE. 23 */ 24 25 #ifndef PPC405_H 26 #define PPC405_H 27 28 #include "qom/object.h" 29 #include "hw/ppc/ppc4xx.h" 30 #include "hw/intc/ppc-uic.h" 31 #include "hw/i2c/ppc4xx_i2c.h" 32 33 /* PLB to OPB bridge */ 34 #define TYPE_PPC405_POB "ppc405-pob" 35 OBJECT_DECLARE_SIMPLE_TYPE(Ppc405PobState, PPC405_POB); 36 struct Ppc405PobState { 37 Ppc4xxDcrDeviceState parent_obj; 38 39 uint32_t bear; 40 uint32_t besr0; 41 uint32_t besr1; 42 }; 43 44 /* OPB arbitrer */ 45 #define TYPE_PPC405_OPBA "ppc405-opba" 46 OBJECT_DECLARE_SIMPLE_TYPE(Ppc405OpbaState, PPC405_OPBA); 47 struct Ppc405OpbaState { 48 SysBusDevice parent_obj; 49 50 MemoryRegion io; 51 uint8_t cr; 52 uint8_t pr; 53 }; 54 55 /* DMA controller */ 56 #define TYPE_PPC405_DMA "ppc405-dma" 57 OBJECT_DECLARE_SIMPLE_TYPE(Ppc405DmaState, PPC405_DMA); 58 struct Ppc405DmaState { 59 Ppc4xxDcrDeviceState parent_obj; 60 61 qemu_irq irqs[4]; 62 uint32_t cr[4]; 63 uint32_t ct[4]; 64 uint32_t da[4]; 65 uint32_t sa[4]; 66 uint32_t sg[4]; 67 uint32_t sr; 68 uint32_t sgc; 69 uint32_t slp; 70 uint32_t pol; 71 }; 72 73 /* GPIO */ 74 #define TYPE_PPC405_GPIO "ppc405-gpio" 75 OBJECT_DECLARE_SIMPLE_TYPE(Ppc405GpioState, PPC405_GPIO); 76 struct Ppc405GpioState { 77 SysBusDevice parent_obj; 78 79 MemoryRegion io; 80 uint32_t or; 81 uint32_t tcr; 82 uint32_t osrh; 83 uint32_t osrl; 84 uint32_t tsrh; 85 uint32_t tsrl; 86 uint32_t odr; 87 uint32_t ir; 88 uint32_t rr1; 89 uint32_t isr1h; 90 uint32_t isr1l; 91 }; 92 93 /* On Chip Memory */ 94 #define TYPE_PPC405_OCM "ppc405-ocm" 95 OBJECT_DECLARE_SIMPLE_TYPE(Ppc405OcmState, PPC405_OCM); 96 struct Ppc405OcmState { 97 Ppc4xxDcrDeviceState parent_obj; 98 99 MemoryRegion ram; 100 MemoryRegion isarc_ram; 101 MemoryRegion dsarc_ram; 102 uint32_t isarc; 103 uint32_t isacntl; 104 uint32_t dsarc; 105 uint32_t dsacntl; 106 }; 107 108 /* General purpose timers */ 109 #define TYPE_PPC405_GPT "ppc405-gpt" 110 OBJECT_DECLARE_SIMPLE_TYPE(Ppc405GptState, PPC405_GPT); 111 struct Ppc405GptState { 112 SysBusDevice parent_obj; 113 114 MemoryRegion iomem; 115 116 int64_t tb_offset; 117 uint32_t tb_freq; 118 QEMUTimer *timer; 119 qemu_irq irqs[5]; 120 uint32_t oe; 121 uint32_t ol; 122 uint32_t im; 123 uint32_t is; 124 uint32_t ie; 125 uint32_t comp[5]; 126 uint32_t mask[5]; 127 }; 128 129 #define TYPE_PPC405_CPC "ppc405-cpc" 130 OBJECT_DECLARE_SIMPLE_TYPE(Ppc405CpcState, PPC405_CPC); 131 132 enum { 133 PPC405EP_CPU_CLK = 0, 134 PPC405EP_PLB_CLK = 1, 135 PPC405EP_OPB_CLK = 2, 136 PPC405EP_EBC_CLK = 3, 137 PPC405EP_MAL_CLK = 4, 138 PPC405EP_PCI_CLK = 5, 139 PPC405EP_UART0_CLK = 6, 140 PPC405EP_UART1_CLK = 7, 141 PPC405EP_CLK_NB = 8, 142 }; 143 144 struct Ppc405CpcState { 145 Ppc4xxDcrDeviceState parent_obj; 146 147 uint32_t sysclk; 148 clk_setup_t clk_setup[PPC405EP_CLK_NB]; 149 uint32_t boot; 150 uint32_t epctl; 151 uint32_t pllmr[2]; 152 uint32_t ucr; 153 uint32_t srr; 154 uint32_t jtagid; 155 uint32_t pci; 156 /* Clock and power management */ 157 uint32_t er; 158 uint32_t fr; 159 uint32_t sr; 160 }; 161 162 #define TYPE_PPC405_SOC "ppc405-soc" 163 OBJECT_DECLARE_SIMPLE_TYPE(Ppc405SoCState, PPC405_SOC); 164 165 struct Ppc405SoCState { 166 /* Private */ 167 DeviceState parent_obj; 168 169 /* Public */ 170 MemoryRegion ram_banks[2]; 171 hwaddr ram_bases[2], ram_sizes[2]; 172 bool do_dram_init; 173 174 MemoryRegion *dram_mr; 175 hwaddr ram_size; 176 177 PowerPCCPU cpu; 178 PPCUIC uic; 179 Ppc405CpcState cpc; 180 Ppc405GptState gpt; 181 Ppc405OcmState ocm; 182 Ppc405GpioState gpio; 183 Ppc405DmaState dma; 184 PPC4xxI2CState i2c; 185 Ppc4xxEbcState ebc; 186 Ppc405OpbaState opba; 187 Ppc405PobState pob; 188 Ppc4xxPlbState plb; 189 Ppc4xxMalState mal; 190 }; 191 192 #endif /* PPC405_H */ 193