aspeed/smc: Drop AspeedSMCController structure
The characteristics of the Aspeed controllers are described in a AspeedSMCController structure which is redundant with the AspeedSMCClass. Move all attributes under the class and adapt the code to use class attributes instead. This is a large change but it is functionally equivalent. Signed-off-by: Cédric Le Goater <clg@kaod.org>
This commit is contained in:
parent
d0180a3ae4
commit
30b6852ce4
@ -352,7 +352,7 @@ static void aspeed_soc_ast2600_realize(DeviceState *dev, Error **errp)
|
||||
}
|
||||
sysbus_mmio_map(SYS_BUS_DEVICE(&s->fmc), 0, sc->memmap[ASPEED_DEV_FMC]);
|
||||
sysbus_mmio_map(SYS_BUS_DEVICE(&s->fmc), 1,
|
||||
s->fmc.ctrl->flash_window_base);
|
||||
ASPEED_SMC_GET_CLASS(&s->fmc)->flash_window_base);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->fmc), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_FMC));
|
||||
|
||||
@ -367,7 +367,7 @@ static void aspeed_soc_ast2600_realize(DeviceState *dev, Error **errp)
|
||||
sysbus_mmio_map(SYS_BUS_DEVICE(&s->spi[i]), 0,
|
||||
sc->memmap[ASPEED_DEV_SPI1 + i]);
|
||||
sysbus_mmio_map(SYS_BUS_DEVICE(&s->spi[i]), 1,
|
||||
s->spi[i].ctrl->flash_window_base);
|
||||
ASPEED_SMC_GET_CLASS(&s->spi[i])->flash_window_base);
|
||||
}
|
||||
|
||||
/* EHCI */
|
||||
|
@ -310,7 +310,7 @@ static void aspeed_soc_realize(DeviceState *dev, Error **errp)
|
||||
}
|
||||
sysbus_mmio_map(SYS_BUS_DEVICE(&s->fmc), 0, sc->memmap[ASPEED_DEV_FMC]);
|
||||
sysbus_mmio_map(SYS_BUS_DEVICE(&s->fmc), 1,
|
||||
s->fmc.ctrl->flash_window_base);
|
||||
ASPEED_SMC_GET_CLASS(&s->fmc)->flash_window_base);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->fmc), 0,
|
||||
aspeed_soc_get_irq(s, ASPEED_DEV_FMC));
|
||||
|
||||
@ -323,7 +323,7 @@ static void aspeed_soc_realize(DeviceState *dev, Error **errp)
|
||||
sysbus_mmio_map(SYS_BUS_DEVICE(&s->spi[i]), 0,
|
||||
sc->memmap[ASPEED_DEV_SPI1 + i]);
|
||||
sysbus_mmio_map(SYS_BUS_DEVICE(&s->spi[i]), 1,
|
||||
s->spi[i].ctrl->flash_window_base);
|
||||
ASPEED_SMC_GET_CLASS(&s->spi[i])->flash_window_base);
|
||||
}
|
||||
|
||||
/* EHCI */
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -29,35 +29,7 @@
|
||||
#include "hw/sysbus.h"
|
||||
#include "qom/object.h"
|
||||
|
||||
typedef struct AspeedSegments {
|
||||
hwaddr addr;
|
||||
uint32_t size;
|
||||
} AspeedSegments;
|
||||
|
||||
struct AspeedSMCState;
|
||||
typedef struct AspeedSMCController {
|
||||
const char *name;
|
||||
uint8_t r_conf;
|
||||
uint8_t r_ce_ctrl;
|
||||
uint8_t r_ctrl0;
|
||||
uint8_t r_timings;
|
||||
uint8_t nregs_timings;
|
||||
uint8_t conf_enable_w0;
|
||||
uint8_t max_peripherals;
|
||||
const AspeedSegments *segments;
|
||||
hwaddr flash_window_base;
|
||||
uint32_t flash_window_size;
|
||||
uint32_t features;
|
||||
hwaddr dma_flash_mask;
|
||||
hwaddr dma_dram_mask;
|
||||
uint32_t nregs;
|
||||
uint32_t (*segment_to_reg)(const struct AspeedSMCState *s,
|
||||
const AspeedSegments *seg);
|
||||
void (*reg_to_segment)(const struct AspeedSMCState *s, uint32_t reg,
|
||||
AspeedSegments *seg);
|
||||
void (*dma_ctrl)(struct AspeedSMCState *s, uint32_t value);
|
||||
} AspeedSMCController;
|
||||
|
||||
typedef struct AspeedSMCFlash {
|
||||
struct AspeedSMCState *controller;
|
||||
|
||||
@ -71,18 +43,11 @@ typedef struct AspeedSMCFlash {
|
||||
#define TYPE_ASPEED_SMC "aspeed.smc"
|
||||
OBJECT_DECLARE_TYPE(AspeedSMCState, AspeedSMCClass, ASPEED_SMC)
|
||||
|
||||
struct AspeedSMCClass {
|
||||
SysBusDevice parent_obj;
|
||||
const AspeedSMCController *ctrl;
|
||||
};
|
||||
|
||||
#define ASPEED_SMC_R_MAX (0x100 / 4)
|
||||
|
||||
struct AspeedSMCState {
|
||||
SysBusDevice parent_obj;
|
||||
|
||||
const AspeedSMCController *ctrl;
|
||||
|
||||
MemoryRegion mmio;
|
||||
MemoryRegion mmio_flash;
|
||||
MemoryRegion mmio_flash_alias;
|
||||
@ -115,4 +80,33 @@ struct AspeedSMCState {
|
||||
uint8_t snoop_dummies;
|
||||
};
|
||||
|
||||
typedef struct AspeedSegments {
|
||||
hwaddr addr;
|
||||
uint32_t size;
|
||||
} AspeedSegments;
|
||||
|
||||
struct AspeedSMCClass {
|
||||
SysBusDeviceClass parent_obj;
|
||||
|
||||
uint8_t r_conf;
|
||||
uint8_t r_ce_ctrl;
|
||||
uint8_t r_ctrl0;
|
||||
uint8_t r_timings;
|
||||
uint8_t nregs_timings;
|
||||
uint8_t conf_enable_w0;
|
||||
uint8_t max_peripherals;
|
||||
const AspeedSegments *segments;
|
||||
hwaddr flash_window_base;
|
||||
uint32_t flash_window_size;
|
||||
uint32_t features;
|
||||
hwaddr dma_flash_mask;
|
||||
hwaddr dma_dram_mask;
|
||||
uint32_t nregs;
|
||||
uint32_t (*segment_to_reg)(const AspeedSMCState *s,
|
||||
const AspeedSegments *seg);
|
||||
void (*reg_to_segment)(const AspeedSMCState *s, uint32_t reg,
|
||||
AspeedSegments *seg);
|
||||
void (*dma_ctrl)(AspeedSMCState *s, uint32_t value);
|
||||
};
|
||||
|
||||
#endif /* ASPEED_SMC_H */
|
||||
|
Loading…
Reference in New Issue
Block a user