1c2da8a8bSCédric Le Goater /* 2c2da8a8bSCédric Le Goater * ASPEED SDRAM Memory Controller 3c2da8a8bSCédric Le Goater * 4c2da8a8bSCédric Le Goater * Copyright (C) 2016 IBM Corp. 5c2da8a8bSCédric Le Goater * 6c2da8a8bSCédric Le Goater * This code is licensed under the GPL version 2 or later. See the 7c2da8a8bSCédric Le Goater * COPYING file in the top-level directory. 8c2da8a8bSCédric Le Goater */ 9c2da8a8bSCédric Le Goater #ifndef ASPEED_SDMC_H 10c2da8a8bSCédric Le Goater #define ASPEED_SDMC_H 11c2da8a8bSCédric Le Goater 12c2da8a8bSCédric Le Goater #include "hw/sysbus.h" 13c2da8a8bSCédric Le Goater 14c2da8a8bSCédric Le Goater #define TYPE_ASPEED_SDMC "aspeed.sdmc" 15c2da8a8bSCédric Le Goater #define ASPEED_SDMC(obj) OBJECT_CHECK(AspeedSDMCState, (obj), TYPE_ASPEED_SDMC) 168e00d1a9SCédric Le Goater #define TYPE_ASPEED_2400_SDMC TYPE_ASPEED_SDMC "-ast2400" 178e00d1a9SCédric Le Goater #define TYPE_ASPEED_2500_SDMC TYPE_ASPEED_SDMC "-ast2500" 18*1550d726SJoel Stanley #define TYPE_ASPEED_2600_SDMC TYPE_ASPEED_SDMC "-ast2600" 19c2da8a8bSCédric Le Goater 20a40085d2SJoel Stanley #define ASPEED_SDMC_NR_REGS (0x174 >> 2) 21c2da8a8bSCédric Le Goater 22c2da8a8bSCédric Le Goater typedef struct AspeedSDMCState { 23c2da8a8bSCédric Le Goater /*< private >*/ 24c2da8a8bSCédric Le Goater SysBusDevice parent_obj; 25c2da8a8bSCédric Le Goater 26c2da8a8bSCédric Le Goater /*< public >*/ 27c2da8a8bSCédric Le Goater MemoryRegion iomem; 28c2da8a8bSCédric Le Goater 29c2da8a8bSCédric Le Goater uint32_t regs[ASPEED_SDMC_NR_REGS]; 30c6c7cfb0SCédric Le Goater uint64_t ram_size; 31ebe31c0aSCédric Le Goater uint64_t max_ram_size; 32c2da8a8bSCédric Le Goater } AspeedSDMCState; 33c2da8a8bSCédric Le Goater 348e00d1a9SCédric Le Goater #define ASPEED_SDMC_CLASS(klass) \ 358e00d1a9SCédric Le Goater OBJECT_CLASS_CHECK(AspeedSDMCClass, (klass), TYPE_ASPEED_SDMC) 368e00d1a9SCédric Le Goater #define ASPEED_SDMC_GET_CLASS(obj) \ 378e00d1a9SCédric Le Goater OBJECT_GET_CLASS(AspeedSDMCClass, (obj), TYPE_ASPEED_SDMC) 388e00d1a9SCédric Le Goater 398e00d1a9SCédric Le Goater typedef struct AspeedSDMCClass { 408e00d1a9SCédric Le Goater SysBusDeviceClass parent_class; 418e00d1a9SCédric Le Goater 428e00d1a9SCédric Le Goater uint64_t max_ram_size; 438e00d1a9SCédric Le Goater uint32_t (*compute_conf)(AspeedSDMCState *s, uint32_t data); 448e00d1a9SCédric Le Goater void (*write)(AspeedSDMCState *s, uint32_t reg, uint32_t data); 458e00d1a9SCédric Le Goater } AspeedSDMCClass; 468e00d1a9SCédric Le Goater 47c2da8a8bSCédric Le Goater #endif /* ASPEED_SDMC_H */ 48