xref: /qemu/include/hw/misc/aspeed_sdmc.h (revision 1550d7267984b19796089f767832c30da80494ec)
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