view loadtools/flash.h @ 613:ab4021fb1c66

doc/Loadtools-performance: flash programming added
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 24 Feb 2020 22:30:00 +0000
parents 0dd2c87c1b63
children 9c5b0629e346
line wrap: on
line source

/* this header file contains definitions for fc-loadtool flash support */

/* global configuration */
#define	FLASH_GLOBAL_CFG_NONE		0
#define	FLASH_GLOBAL_CFG_SINGLE_4M	1
#define	FLASH_GLOBAL_CFG_SINGLE_8M	2
#define	FLASH_GLOBAL_CFG_DUAL_8M	3

/*
 * The following structures represent an "abstract"
 * description of flash devices.
 *
 * A "region" is a consecutive group of erase units of the same size.
 */

struct flash_region_desc {
	uint32_t	sector_size;
	unsigned	nsectors;
};

#define	CFI_MAX_REGIONS		4

/*
 * The info in struct flash_geom can be either
 * gathered from CFI or hard-coded.
 */
struct flash_geom {
	uint32_t			total_size;
	unsigned			nregions;
	struct flash_region_desc	regions[CFI_MAX_REGIONS];
	unsigned			total_sectors;
};

struct cfi_check {
	int	offset;
	uint8_t	expect_val;
};

struct flash_device {
	char			*name;
	struct cfi_check	*cfi_table;
	int			required_global_config;
	struct flash_geom	*bank_geom[2];
	struct flash_cmdset	*cmdset;
};

/* the following structures describe flash banks as accessible to us */

struct sector_info {
	uint32_t	start;
	uint32_t	size;
};

struct flash_cmdset {
	char	*cmdset_name;
	int	(*reset_cmd)();
	int	(*status_cmd)();
	int	(*unlock_sector)();
	int	(*erase_sector)();
	int	(*prep_for_program)();
	char	*loadagent_setbase_cmd;
	char	*loadagent_program_cmd;
	int	needs_unlock;
};

struct flash_bank_info {
	uint32_t		base_addr;
	struct flash_device	*device;
	struct flash_geom	*geom;
	struct flash_cmdset	*ops;
	struct sector_info	*sectors;
	int			detect_done;
};