17c1c69bcSCédric Le Goater /* 27c1c69bcSCédric Le Goater * ASPEED AST2400 SMC Controller (SPI Flash Only) 37c1c69bcSCédric Le Goater * 47c1c69bcSCédric Le Goater * Copyright (C) 2016 IBM Corp. 57c1c69bcSCédric Le Goater * 67c1c69bcSCédric Le Goater * Permission is hereby granted, free of charge, to any person obtaining a copy 77c1c69bcSCédric Le Goater * of this software and associated documentation files (the "Software"), to deal 87c1c69bcSCédric Le Goater * in the Software without restriction, including without limitation the rights 97c1c69bcSCédric Le Goater * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 107c1c69bcSCédric Le Goater * copies of the Software, and to permit persons to whom the Software is 117c1c69bcSCédric Le Goater * furnished to do so, subject to the following conditions: 127c1c69bcSCédric Le Goater * 137c1c69bcSCédric Le Goater * The above copyright notice and this permission notice shall be included in 147c1c69bcSCédric Le Goater * all copies or substantial portions of the Software. 157c1c69bcSCédric Le Goater * 167c1c69bcSCédric Le Goater * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 177c1c69bcSCédric Le Goater * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 187c1c69bcSCédric Le Goater * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 197c1c69bcSCédric Le Goater * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 207c1c69bcSCédric Le Goater * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 217c1c69bcSCédric Le Goater * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 227c1c69bcSCédric Le Goater * THE SOFTWARE. 237c1c69bcSCédric Le Goater */ 247c1c69bcSCédric Le Goater 257c1c69bcSCédric Le Goater #ifndef ASPEED_SMC_H 267c1c69bcSCédric Le Goater #define ASPEED_SMC_H 277c1c69bcSCédric Le Goater 287c1c69bcSCédric Le Goater #include "hw/ssi/ssi.h" 29ec150c7eSMarkus Armbruster #include "hw/sysbus.h" 307c1c69bcSCédric Le Goater 31924ed163SCédric Le Goater typedef struct AspeedSegments { 32924ed163SCédric Le Goater hwaddr addr; 33924ed163SCédric Le Goater uint32_t size; 34924ed163SCédric Le Goater } AspeedSegments; 35924ed163SCédric Le Goater 36924ed163SCédric Le Goater struct AspeedSMCState; 377c1c69bcSCédric Le Goater typedef struct AspeedSMCController { 387c1c69bcSCédric Le Goater const char *name; 397c1c69bcSCédric Le Goater uint8_t r_conf; 407c1c69bcSCédric Le Goater uint8_t r_ce_ctrl; 417c1c69bcSCédric Le Goater uint8_t r_ctrl0; 427c1c69bcSCédric Le Goater uint8_t r_timings; 437c1c69bcSCédric Le Goater uint8_t conf_enable_w0; 447c1c69bcSCédric Le Goater uint8_t max_slaves; 45924ed163SCédric Le Goater const AspeedSegments *segments; 46dcb83444SCédric Le Goater hwaddr flash_window_base; 47dcb83444SCédric Le Goater uint32_t flash_window_size; 48d09dc5b7SCédric Le Goater bool has_dma; 49c4e1f0b4SCédric Le Goater hwaddr dma_flash_mask; 50c4e1f0b4SCédric Le Goater hwaddr dma_dram_mask; 51087b57c9SCédric Le Goater uint32_t nregs; 527c1c69bcSCédric Le Goater } AspeedSMCController; 537c1c69bcSCédric Le Goater 54924ed163SCédric Le Goater typedef struct AspeedSMCFlash { 55fcdf2c59SCédric Le Goater struct AspeedSMCState *controller; 56924ed163SCédric Le Goater 57924ed163SCédric Le Goater uint8_t id; 58924ed163SCédric Le Goater uint32_t size; 59924ed163SCédric Le Goater 60924ed163SCédric Le Goater MemoryRegion mmio; 61924ed163SCédric Le Goater DeviceState *flash; 62924ed163SCédric Le Goater } AspeedSMCFlash; 63924ed163SCédric Le Goater 647c1c69bcSCédric Le Goater #define TYPE_ASPEED_SMC "aspeed.smc" 657c1c69bcSCédric Le Goater #define ASPEED_SMC(obj) OBJECT_CHECK(AspeedSMCState, (obj), TYPE_ASPEED_SMC) 667c1c69bcSCédric Le Goater #define ASPEED_SMC_CLASS(klass) \ 677c1c69bcSCédric Le Goater OBJECT_CLASS_CHECK(AspeedSMCClass, (klass), TYPE_ASPEED_SMC) 687c1c69bcSCédric Le Goater #define ASPEED_SMC_GET_CLASS(obj) \ 697c1c69bcSCédric Le Goater OBJECT_GET_CLASS(AspeedSMCClass, (obj), TYPE_ASPEED_SMC) 707c1c69bcSCédric Le Goater 717c1c69bcSCédric Le Goater typedef struct AspeedSMCClass { 727c1c69bcSCédric Le Goater SysBusDevice parent_obj; 737c1c69bcSCédric Le Goater const AspeedSMCController *ctrl; 747c1c69bcSCédric Le Goater } AspeedSMCClass; 757c1c69bcSCédric Le Goater 767c1c69bcSCédric Le Goater #define ASPEED_SMC_R_MAX (0x100 / 4) 777c1c69bcSCédric Le Goater 787c1c69bcSCédric Le Goater typedef struct AspeedSMCState { 797c1c69bcSCédric Le Goater SysBusDevice parent_obj; 807c1c69bcSCédric Le Goater 817c1c69bcSCédric Le Goater const AspeedSMCController *ctrl; 827c1c69bcSCédric Le Goater 837c1c69bcSCédric Le Goater MemoryRegion mmio; 84924ed163SCédric Le Goater MemoryRegion mmio_flash; 857c1c69bcSCédric Le Goater 867c1c69bcSCédric Le Goater qemu_irq irq; 877c1c69bcSCédric Le Goater int irqline; 887c1c69bcSCédric Le Goater 897c1c69bcSCédric Le Goater uint32_t num_cs; 907c1c69bcSCédric Le Goater qemu_irq *cs_lines; 91*5258c2a6SCédric Le Goater bool inject_failure; 927c1c69bcSCédric Le Goater 937c1c69bcSCédric Le Goater SSIBus *spi; 947c1c69bcSCédric Le Goater 957c1c69bcSCédric Le Goater uint32_t regs[ASPEED_SMC_R_MAX]; 967c1c69bcSCédric Le Goater 977c1c69bcSCédric Le Goater /* depends on the controller type */ 987c1c69bcSCédric Le Goater uint8_t r_conf; 997c1c69bcSCédric Le Goater uint8_t r_ce_ctrl; 1007c1c69bcSCédric Le Goater uint8_t r_ctrl0; 1017c1c69bcSCédric Le Goater uint8_t r_timings; 1027c1c69bcSCédric Le Goater uint8_t conf_enable_w0; 103924ed163SCédric Le Goater 1046da4433fSCédric Le Goater /* for DMA support */ 1056da4433fSCédric Le Goater uint64_t sdram_base; 1066da4433fSCédric Le Goater 107c4e1f0b4SCédric Le Goater AddressSpace flash_as; 108c4e1f0b4SCédric Le Goater MemoryRegion *dram_mr; 109c4e1f0b4SCédric Le Goater AddressSpace dram_as; 110c4e1f0b4SCédric Le Goater 111924ed163SCédric Le Goater AspeedSMCFlash *flashes; 112f95c4bffSCédric Le Goater 113f95c4bffSCédric Le Goater uint8_t snoop_index; 114f95c4bffSCédric Le Goater uint8_t snoop_dummies; 1157c1c69bcSCédric Le Goater } AspeedSMCState; 1167c1c69bcSCédric Le Goater 1177c1c69bcSCédric Le Goater #endif /* ASPEED_SMC_H */ 118