view loadtools/flash.h @ 497:74610c4f10f7

target-utils: added 10 ms delay at the end of abb_power_off() The deosmification of the ABB access code (replacement of osmo_delay_ms() bogus delays with correctly-timed ones, which are significantly shorter) had one annoying side effect: when executing the poweroff command from any of the programs, one last '=' prompt character was being sent (and received by the x86 host) as the Calypso board powers off. With delays being shorter now, the abb_power_off() function was returning and the standalone program's main loop was printing its prompt before the Iota chip fully executed the switch-off sequence! I thought about inserting an endless tight loop at the end of the abb_power_off() function, but the implemented solution of a 10 ms delay is a little nicer IMO because if the DEVOFF operation doesn't happen for some reason in a manual hacking scenario, there won't be an artificial blocker in the form of a tight loop keeping us from further poking around.
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 25 May 2019 20:44:05 +0000
parents e7502631a0f9
children 0dd2c87c1b63
line wrap: on
line source

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

/*
 * 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 flash_idcheck {
	uint16_t	offset;
	uint16_t	expect_val;
};

struct flash_bank_desc {
	uint32_t		align_size;
	struct flash_geom	*geom;
	struct flash_idcheck	*idcheck_table;
	unsigned		idcheck_num;
};

struct flash_device_desc {
	char			*name;
	struct flash_bank_desc	*bank_desc;
	unsigned		nbanks;
	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_bank_desc	*bank_desc;
	struct flash_geom	*geom;
	struct flash_cmdset	*ops;
	struct sector_info	*sectors;
	int			idcheck_done;
};