/* XXX */
void verify_flash(struct ptentry *p, void *addr, unsigned len, int extra)
{
	uint32_t offset = 0;
	void *buf = malloc(FLASH_PAGE_SIZE + extra);
	int verify_extra = extra;
	if (verify_extra > 4)
		verify_extra = 16;
	while (len > 0) {
		flash_read_ext(p, extra, offset, buf, FLASH_PAGE_SIZE);
		if (memcmp(addr, buf, FLASH_PAGE_SIZE + verify_extra)) {
			dprintf(CRITICAL, "verify failed at 0x%08x\n", offset);
			jtag_fail("verify failed");
			return;
		}
		offset += FLASH_PAGE_SIZE;
		addr += FLASH_PAGE_SIZE;
		len -= FLASH_PAGE_SIZE;
		if (extra) {
			addr += extra;
			len -= extra;
		}
	}
	dprintf(INFO, "verify done %d extra bytes\n", verify_extra);
	jtag_okay("verify done");
}
void verify_flash(ptentry *p, void *addr, unsigned len, int extra)
{
    int offset = 0;
    void *buf = alloc(FLASH_PAGE_SIZE + extra);
    int verify_extra = extra;
    if(verify_extra > 4)
        verify_extra = 16;
    while(len > 0) {
        /* coverity[unchecked_value] */
        flash_read_ext(p, extra, offset, buf, FLASH_PAGE_SIZE, 0);
        if(memcmp(addr, buf, FLASH_PAGE_SIZE + verify_extra)) {
            dprintf("verify failed at %x\n", offset);
            jtag_fail("verify failed");
            return;
        }
        offset += FLASH_PAGE_SIZE;
        addr += FLASH_PAGE_SIZE;
        len -= FLASH_PAGE_SIZE;
        if(extra) {
            addr += extra;
            len -= extra;
        }
    }
    dprintf("verify done %d extra bytes\n", verify_extra);
    jtag_okay("verify done");
}