1b821242cSHavard Skinnemoen /* 2b821242cSHavard Skinnemoen * Nuvoton NPCM7xx Flash Interface Unit (FIU) 3b821242cSHavard Skinnemoen * 4b821242cSHavard Skinnemoen * Copyright 2020 Google LLC 5b821242cSHavard Skinnemoen * 6b821242cSHavard Skinnemoen * This program is free software; you can redistribute it and/or modify it 7b821242cSHavard Skinnemoen * under the terms of the GNU General Public License as published by the 8b821242cSHavard Skinnemoen * Free Software Foundation; either version 2 of the License, or 9b821242cSHavard Skinnemoen * (at your option) any later version. 10b821242cSHavard Skinnemoen * 11b821242cSHavard Skinnemoen * This program is distributed in the hope that it will be useful, but WITHOUT 12b821242cSHavard Skinnemoen * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13b821242cSHavard Skinnemoen * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14b821242cSHavard Skinnemoen * for more details. 15b821242cSHavard Skinnemoen */ 16b821242cSHavard Skinnemoen #ifndef NPCM7XX_FIU_H 17b821242cSHavard Skinnemoen #define NPCM7XX_FIU_H 18b821242cSHavard Skinnemoen 19b821242cSHavard Skinnemoen #include "hw/ssi/ssi.h" 20b821242cSHavard Skinnemoen #include "hw/sysbus.h" 21b821242cSHavard Skinnemoen 22b821242cSHavard Skinnemoen /* 23b821242cSHavard Skinnemoen * Number of registers in our device state structure. Don't change this without 24b821242cSHavard Skinnemoen * incrementing the version_id in the vmstate. 25b821242cSHavard Skinnemoen */ 26b821242cSHavard Skinnemoen #define NPCM7XX_FIU_NR_REGS (0x7c / sizeof(uint32_t)) 27b821242cSHavard Skinnemoen 28b821242cSHavard Skinnemoen typedef struct NPCM7xxFIUState NPCM7xxFIUState; 29b821242cSHavard Skinnemoen 30b821242cSHavard Skinnemoen /** 31b821242cSHavard Skinnemoen * struct NPCM7xxFIUFlash - Per-chipselect flash controller state. 32b821242cSHavard Skinnemoen * @direct_access: Memory region for direct flash access. 33b821242cSHavard Skinnemoen * @fiu: Pointer to flash controller shared state. 34b821242cSHavard Skinnemoen */ 35b821242cSHavard Skinnemoen typedef struct NPCM7xxFIUFlash { 36b821242cSHavard Skinnemoen MemoryRegion direct_access; 37b821242cSHavard Skinnemoen NPCM7xxFIUState *fiu; 38b821242cSHavard Skinnemoen } NPCM7xxFIUFlash; 39b821242cSHavard Skinnemoen 40b821242cSHavard Skinnemoen /** 41b821242cSHavard Skinnemoen * NPCM7xxFIUState - Device state for one Flash Interface Unit. 42b821242cSHavard Skinnemoen * @parent: System bus device. 43b821242cSHavard Skinnemoen * @mmio: Memory region for register access. 44b821242cSHavard Skinnemoen * @cs_count: Number of flash chips that may be connected to this module. 45b821242cSHavard Skinnemoen * @active_cs: Currently active chip select, or -1 if no chip is selected. 46b821242cSHavard Skinnemoen * @cs_lines: GPIO lines that may be wired to flash chips. 47b821242cSHavard Skinnemoen * @flash: Array of @cs_count per-flash-chip state objects. 48b821242cSHavard Skinnemoen * @spi: The SPI bus mastered by this controller. 49b821242cSHavard Skinnemoen * @regs: Register contents. 50b821242cSHavard Skinnemoen * 51b821242cSHavard Skinnemoen * Each FIU has a shared bank of registers, and controls up to four chip 52b821242cSHavard Skinnemoen * selects. Each chip select has a dedicated memory region which may be used to 53b821242cSHavard Skinnemoen * read and write the flash connected to that chip select as if it were memory. 54b821242cSHavard Skinnemoen */ 55b821242cSHavard Skinnemoen struct NPCM7xxFIUState { 56b821242cSHavard Skinnemoen SysBusDevice parent; 57b821242cSHavard Skinnemoen 58b821242cSHavard Skinnemoen MemoryRegion mmio; 59b821242cSHavard Skinnemoen 60b821242cSHavard Skinnemoen int32_t cs_count; 61b821242cSHavard Skinnemoen int32_t active_cs; 62b821242cSHavard Skinnemoen qemu_irq *cs_lines; 63*e9be8467SHao Wu uint64_t flash_size; 64b821242cSHavard Skinnemoen NPCM7xxFIUFlash *flash; 65b821242cSHavard Skinnemoen 66b821242cSHavard Skinnemoen SSIBus *spi; 67b821242cSHavard Skinnemoen 68b821242cSHavard Skinnemoen uint32_t regs[NPCM7XX_FIU_NR_REGS]; 69b821242cSHavard Skinnemoen }; 70b821242cSHavard Skinnemoen 71b821242cSHavard Skinnemoen #define TYPE_NPCM7XX_FIU "npcm7xx-fiu" 72b821242cSHavard Skinnemoen #define NPCM7XX_FIU(obj) OBJECT_CHECK(NPCM7xxFIUState, (obj), TYPE_NPCM7XX_FIU) 73b821242cSHavard Skinnemoen 74b821242cSHavard Skinnemoen #endif /* NPCM7XX_FIU_H */ 75