xref: /openbmc/qemu/include/hw/block/flash.h (revision f774a677507966222624a9b2859f06ede7608100)
10d09e41aSPaolo Bonzini #ifndef HW_FLASH_H
2175de524SMarkus Armbruster #define HW_FLASH_H
30d09e41aSPaolo Bonzini 
40d09e41aSPaolo Bonzini /* NOR flash devices */
50d09e41aSPaolo Bonzini 
6d4842052SMarkus Armbruster #include "exec/hwaddr.h"
7db1015e9SEduardo Habkost #include "qom/object.h"
80d09e41aSPaolo Bonzini 
90d09e41aSPaolo Bonzini /* pflash_cfi01.c */
1016434065SMarkus Armbruster 
11e7b62741SMarkus Armbruster #define TYPE_PFLASH_CFI01 "cfi.pflash01"
128063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(PFlashCFI01, PFLASH_CFI01)
1316434065SMarkus Armbruster 
1416434065SMarkus Armbruster 
1516434065SMarkus Armbruster PFlashCFI01 *pflash_cfi01_register(hwaddr base,
16940d5b13SMarkus Armbruster                                    const char *name,
170d09e41aSPaolo Bonzini                                    hwaddr size,
184be74634SMarkus Armbruster                                    BlockBackend *blk,
19ce14710fSMarkus Armbruster                                    uint32_t sector_len,
2016434065SMarkus Armbruster                                    int width,
210d09e41aSPaolo Bonzini                                    uint16_t id0, uint16_t id1,
220d09e41aSPaolo Bonzini                                    uint16_t id2, uint16_t id3,
230d09e41aSPaolo Bonzini                                    int be);
24e60cf765SPhilippe Mathieu-Daudé BlockBackend *pflash_cfi01_get_blk(PFlashCFI01 *fl);
2516434065SMarkus Armbruster MemoryRegion *pflash_cfi01_get_memory(PFlashCFI01 *fl);
262d731dbdSMarkus Armbruster void pflash_cfi01_legacy_drive(PFlashCFI01 *dev, DriveInfo *dinfo);
270d09e41aSPaolo Bonzini 
2816434065SMarkus Armbruster /* pflash_cfi02.c */
2916434065SMarkus Armbruster 
30e7b62741SMarkus Armbruster #define TYPE_PFLASH_CFI02 "cfi.pflash02"
318063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(PFlashCFI02, PFLASH_CFI02)
3216434065SMarkus Armbruster 
3316434065SMarkus Armbruster 
3416434065SMarkus Armbruster PFlashCFI02 *pflash_cfi02_register(hwaddr base,
35940d5b13SMarkus Armbruster                                    const char *name,
3616434065SMarkus Armbruster                                    hwaddr size,
3716434065SMarkus Armbruster                                    BlockBackend *blk,
38ce14710fSMarkus Armbruster                                    uint32_t sector_len,
3916434065SMarkus Armbruster                                    int nb_mappings,
4016434065SMarkus Armbruster                                    int width,
4116434065SMarkus Armbruster                                    uint16_t id0, uint16_t id1,
4216434065SMarkus Armbruster                                    uint16_t id2, uint16_t id3,
4316434065SMarkus Armbruster                                    uint16_t unlock_addr0,
4416434065SMarkus Armbruster                                    uint16_t unlock_addr1,
4516434065SMarkus Armbruster                                    int be);
460d09e41aSPaolo Bonzini 
470d09e41aSPaolo Bonzini /* nand.c */
484be74634SMarkus Armbruster DeviceState *nand_init(BlockBackend *blk, int manf_id, int chip_id);
490d09e41aSPaolo Bonzini void nand_setpins(DeviceState *dev, uint8_t cle, uint8_t ale,
500d09e41aSPaolo Bonzini                   uint8_t ce, uint8_t wp, uint8_t gnd);
510d09e41aSPaolo Bonzini void nand_getpins(DeviceState *dev, int *rb);
520d09e41aSPaolo Bonzini void nand_setio(DeviceState *dev, uint32_t value);
530d09e41aSPaolo Bonzini uint32_t nand_getio(DeviceState *dev);
540d09e41aSPaolo Bonzini uint32_t nand_getbuswidth(DeviceState *dev);
550d09e41aSPaolo Bonzini 
560d09e41aSPaolo Bonzini #define NAND_MFR_TOSHIBA    0x98
570d09e41aSPaolo Bonzini #define NAND_MFR_SAMSUNG    0xec
580d09e41aSPaolo Bonzini #define NAND_MFR_FUJITSU    0x04
590d09e41aSPaolo Bonzini #define NAND_MFR_NATIONAL   0x8f
600d09e41aSPaolo Bonzini #define NAND_MFR_RENESAS    0x07
610d09e41aSPaolo Bonzini #define NAND_MFR_STMICRO    0x20
620d09e41aSPaolo Bonzini #define NAND_MFR_HYNIX      0xad
630d09e41aSPaolo Bonzini #define NAND_MFR_MICRON     0x2c
640d09e41aSPaolo Bonzini 
659ab26b0eSCédric Le Goater /* m25p80.c */
669ab26b0eSCédric Le Goater 
67*a7538ca0SCédric Le Goater #define TYPE_M25P80 "m25p80-generic"
68*a7538ca0SCédric Le Goater 
699ab26b0eSCédric Le Goater BlockBackend *m25p80_get_blk(DeviceState *dev);
709ab26b0eSCédric Le Goater 
710d09e41aSPaolo Bonzini #endif
72