/* * Nuvoton NPCM7xx Flash Interface Unit (FIU) * * Copyright 2020 Google LLC * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. */ #ifndef NPCM7XX_FIU_H #define NPCM7XX_FIU_H #include "hw/ssi/ssi.h" #include "hw/sysbus.h" /* * Number of registers in our device state structure. Don't change this without * incrementing the version_id in the vmstate. */ #define NPCM7XX_FIU_NR_REGS (0x7c / sizeof(uint32_t)) typedef struct NPCM7xxFIUState NPCM7xxFIUState; /** * struct NPCM7xxFIUFlash - Per-chipselect flash controller state. * @direct_access: Memory region for direct flash access. * @fiu: Pointer to flash controller shared state. */ typedef struct NPCM7xxFIUFlash { MemoryRegion direct_access; NPCM7xxFIUState *fiu; } NPCM7xxFIUFlash; /** * NPCM7xxFIUState - Device state for one Flash Interface Unit. * @parent: System bus device. * @mmio: Memory region for register access. * @cs_count: Number of flash chips that may be connected to this module. * @active_cs: Currently active chip select, or -1 if no chip is selected. * @cs_lines: GPIO lines that may be wired to flash chips. * @flash: Array of @cs_count per-flash-chip state objects. * @spi: The SPI bus mastered by this controller. * @regs: Register contents. * * Each FIU has a shared bank of registers, and controls up to four chip * selects. Each chip select has a dedicated memory region which may be used to * read and write the flash connected to that chip select as if it were memory. */ struct NPCM7xxFIUState { SysBusDevice parent; MemoryRegion mmio; int32_t cs_count; int32_t active_cs; qemu_irq *cs_lines; NPCM7xxFIUFlash *flash; SSIBus *spi; uint32_t regs[NPCM7XX_FIU_NR_REGS]; }; #define TYPE_NPCM7XX_FIU "npcm7xx-fiu" #define NPCM7XX_FIU(obj) OBJECT_CHECK(NPCM7xxFIUState, (obj), TYPE_NPCM7XX_FIU) #endif /* NPCM7XX_FIU_H */