1008ff9d7Sj_mayer /* 2008ff9d7Sj_mayer * QEMU PowerPC 4xx emulation shared definitions 3008ff9d7Sj_mayer * 4008ff9d7Sj_mayer * Copyright (c) 2007 Jocelyn Mayer 5008ff9d7Sj_mayer * 6008ff9d7Sj_mayer * Permission is hereby granted, free of charge, to any person obtaining a copy 7008ff9d7Sj_mayer * of this software and associated documentation files (the "Software"), to deal 8008ff9d7Sj_mayer * in the Software without restriction, including without limitation the rights 9008ff9d7Sj_mayer * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10008ff9d7Sj_mayer * copies of the Software, and to permit persons to whom the Software is 11008ff9d7Sj_mayer * furnished to do so, subject to the following conditions: 12008ff9d7Sj_mayer * 13008ff9d7Sj_mayer * The above copyright notice and this permission notice shall be included in 14008ff9d7Sj_mayer * all copies or substantial portions of the Software. 15008ff9d7Sj_mayer * 16008ff9d7Sj_mayer * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17008ff9d7Sj_mayer * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18008ff9d7Sj_mayer * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19008ff9d7Sj_mayer * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20008ff9d7Sj_mayer * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21008ff9d7Sj_mayer * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22008ff9d7Sj_mayer * THE SOFTWARE. 23008ff9d7Sj_mayer */ 24008ff9d7Sj_mayer 25121d0712SMarkus Armbruster #ifndef PPC4XX_H 26121d0712SMarkus Armbruster #define PPC4XX_H 27008ff9d7Sj_mayer 28ec150c7eSMarkus Armbruster #include "hw/ppc/ppc.h" 29*8be545baSRichard Henderson #include "system/memory.h" 30629cae61SCédric Le Goater #include "hw/sysbus.h" 31ec150c7eSMarkus Armbruster 32629cae61SCédric Le Goater /* 33629cae61SCédric Le Goater * Generic DCR device 34629cae61SCédric Le Goater */ 35629cae61SCédric Le Goater #define TYPE_PPC4xx_DCR_DEVICE "ppc4xx-dcr-device" 36629cae61SCédric Le Goater OBJECT_DECLARE_SIMPLE_TYPE(Ppc4xxDcrDeviceState, PPC4xx_DCR_DEVICE); 37629cae61SCédric Le Goater struct Ppc4xxDcrDeviceState { 38629cae61SCédric Le Goater SysBusDevice parent_obj; 39629cae61SCédric Le Goater 40629cae61SCédric Le Goater PowerPCCPU *cpu; 41629cae61SCédric Le Goater }; 42629cae61SCédric Le Goater 43629cae61SCédric Le Goater void ppc4xx_dcr_register(Ppc4xxDcrDeviceState *dev, int dcrn, void *opaque, 44629cae61SCédric Le Goater dcr_read_cb dcr_read, dcr_write_cb dcr_write); 45629cae61SCédric Le Goater bool ppc4xx_dcr_realize(Ppc4xxDcrDeviceState *dev, PowerPCCPU *cpu, 46629cae61SCédric Le Goater Error **errp); 47629cae61SCédric Le Goater 48da116a8aSCédric Le Goater /* Memory Access Layer (MAL) */ 49da116a8aSCédric Le Goater #define TYPE_PPC4xx_MAL "ppc4xx-mal" 50da116a8aSCédric Le Goater OBJECT_DECLARE_SIMPLE_TYPE(Ppc4xxMalState, PPC4xx_MAL); 51da116a8aSCédric Le Goater struct Ppc4xxMalState { 52da116a8aSCédric Le Goater Ppc4xxDcrDeviceState parent_obj; 53da116a8aSCédric Le Goater 54da116a8aSCédric Le Goater qemu_irq irqs[4]; 55da116a8aSCédric Le Goater uint32_t cfg; 56da116a8aSCédric Le Goater uint32_t esr; 57da116a8aSCédric Le Goater uint32_t ier; 58da116a8aSCédric Le Goater uint32_t txcasr; 59da116a8aSCédric Le Goater uint32_t txcarr; 60da116a8aSCédric Le Goater uint32_t txeobisr; 61da116a8aSCédric Le Goater uint32_t txdeir; 62da116a8aSCédric Le Goater uint32_t rxcasr; 63da116a8aSCédric Le Goater uint32_t rxcarr; 64da116a8aSCédric Le Goater uint32_t rxeobisr; 65da116a8aSCédric Le Goater uint32_t rxdeir; 66da116a8aSCédric Le Goater uint32_t *txctpr; 67da116a8aSCédric Le Goater uint32_t *rxctpr; 68da116a8aSCédric Le Goater uint32_t *rcbs; 69da116a8aSCédric Le Goater uint8_t txcnum; 70da116a8aSCédric Le Goater uint8_t rxcnum; 71da116a8aSCédric Le Goater }; 72da116a8aSCédric Le Goater 732d54aaf1SBALATON Zoltan /* Peripheral local bus arbitrer */ 74052c779bSBALATON Zoltan #define TYPE_PPC4xx_PLB "ppc4xx-plb" 75052c779bSBALATON Zoltan OBJECT_DECLARE_SIMPLE_TYPE(Ppc4xxPlbState, PPC4xx_PLB); 76052c779bSBALATON Zoltan struct Ppc4xxPlbState { 772d54aaf1SBALATON Zoltan Ppc4xxDcrDeviceState parent_obj; 782d54aaf1SBALATON Zoltan 792d54aaf1SBALATON Zoltan uint32_t acr; 802d54aaf1SBALATON Zoltan uint32_t bear; 812d54aaf1SBALATON Zoltan uint32_t besr; 822d54aaf1SBALATON Zoltan }; 832d54aaf1SBALATON Zoltan 84127ba8d0SBALATON Zoltan /* Peripheral controller */ 85cba58aa7SBALATON Zoltan #define TYPE_PPC4xx_EBC "ppc4xx-ebc" 86cba58aa7SBALATON Zoltan OBJECT_DECLARE_SIMPLE_TYPE(Ppc4xxEbcState, PPC4xx_EBC); 87cba58aa7SBALATON Zoltan struct Ppc4xxEbcState { 88127ba8d0SBALATON Zoltan Ppc4xxDcrDeviceState parent_obj; 89127ba8d0SBALATON Zoltan 90127ba8d0SBALATON Zoltan uint32_t addr; 91127ba8d0SBALATON Zoltan uint32_t bcr[8]; 92127ba8d0SBALATON Zoltan uint32_t bap[8]; 93127ba8d0SBALATON Zoltan uint32_t bear; 94127ba8d0SBALATON Zoltan uint32_t besr0; 95127ba8d0SBALATON Zoltan uint32_t besr1; 96127ba8d0SBALATON Zoltan uint32_t cfg; 97127ba8d0SBALATON Zoltan }; 98127ba8d0SBALATON Zoltan 994fc30e15SBALATON Zoltan /* SDRAM DDR controller */ 100080741abSBALATON Zoltan typedef struct { 101080741abSBALATON Zoltan MemoryRegion ram; 102080741abSBALATON Zoltan MemoryRegion container; /* used for clipping */ 103080741abSBALATON Zoltan hwaddr base; 104080741abSBALATON Zoltan hwaddr size; 105080741abSBALATON Zoltan uint32_t bcr; 106080741abSBALATON Zoltan } Ppc4xxSdramBank; 107080741abSBALATON Zoltan 1082196d337SBALATON Zoltan #define SDR0_DDR0_DDRM_ENCODE(n) ((((unsigned long)(n)) & 0x03) << 29) 1092196d337SBALATON Zoltan #define SDR0_DDR0_DDRM_DDR1 0x20000000 1102196d337SBALATON Zoltan #define SDR0_DDR0_DDRM_DDR2 0x40000000 1112196d337SBALATON Zoltan 1124fc30e15SBALATON Zoltan #define TYPE_PPC4xx_SDRAM_DDR "ppc4xx-sdram-ddr" 1134fc30e15SBALATON Zoltan OBJECT_DECLARE_SIMPLE_TYPE(Ppc4xxSdramDdrState, PPC4xx_SDRAM_DDR); 1144fc30e15SBALATON Zoltan struct Ppc4xxSdramDdrState { 1154fc30e15SBALATON Zoltan Ppc4xxDcrDeviceState parent_obj; 1164fc30e15SBALATON Zoltan 1174fc30e15SBALATON Zoltan MemoryRegion *dram_mr; 1184fc30e15SBALATON Zoltan uint32_t nbanks; /* Banks to use from 4, e.g. when board has less slots */ 1194fc30e15SBALATON Zoltan Ppc4xxSdramBank bank[4]; 1204fc30e15SBALATON Zoltan qemu_irq irq; 1214fc30e15SBALATON Zoltan 1224fc30e15SBALATON Zoltan uint32_t addr; 1234fc30e15SBALATON Zoltan uint32_t besr0; 1244fc30e15SBALATON Zoltan uint32_t besr1; 1254fc30e15SBALATON Zoltan uint32_t bear; 1264fc30e15SBALATON Zoltan uint32_t cfg; 1274fc30e15SBALATON Zoltan uint32_t status; 1284fc30e15SBALATON Zoltan uint32_t rtr; 1294fc30e15SBALATON Zoltan uint32_t pmit; 1304fc30e15SBALATON Zoltan uint32_t tr; 1314fc30e15SBALATON Zoltan uint32_t ecccfg; 1324fc30e15SBALATON Zoltan uint32_t eccesr; 1334fc30e15SBALATON Zoltan }; 1344fc30e15SBALATON Zoltan 1351e545fbcSBALATON Zoltan void ppc4xx_sdram_ddr_enable(Ppc4xxSdramDdrState *s); 1364fc30e15SBALATON Zoltan 1375f7effe4SBALATON Zoltan /* SDRAM DDR2 controller */ 1385f7effe4SBALATON Zoltan #define TYPE_PPC4xx_SDRAM_DDR2 "ppc4xx-sdram-ddr2" 1395f7effe4SBALATON Zoltan OBJECT_DECLARE_SIMPLE_TYPE(Ppc4xxSdramDdr2State, PPC4xx_SDRAM_DDR2); 1405f7effe4SBALATON Zoltan struct Ppc4xxSdramDdr2State { 1415f7effe4SBALATON Zoltan Ppc4xxDcrDeviceState parent_obj; 1425f7effe4SBALATON Zoltan 1435f7effe4SBALATON Zoltan MemoryRegion *dram_mr; 1445f7effe4SBALATON Zoltan uint32_t nbanks; /* Banks to use from 4, e.g. when board has less slots */ 1455f7effe4SBALATON Zoltan Ppc4xxSdramBank bank[4]; 1465f7effe4SBALATON Zoltan 1475f7effe4SBALATON Zoltan uint32_t addr; 1485f7effe4SBALATON Zoltan uint32_t mcopt2; 1495f7effe4SBALATON Zoltan }; 1505f7effe4SBALATON Zoltan 1515f7effe4SBALATON Zoltan void ppc4xx_sdram_ddr2_enable(Ppc4xxSdramDdr2State *s); 1525f7effe4SBALATON Zoltan 153121d0712SMarkus Armbruster #endif /* PPC4XX_H */ 154