Загрузка данных


static int sysconfig_isc_finish(struct sysconfig_priv *priv)
{
	struct gpio_desc *done_gpio = priv->done;
	u32 status;
	int ret;

	if (done_gpio) {
		ret = sysconfig_isc_disable(priv);
		if (ret)
			return ret;

		return sysconfig_poll_gpio(done_gpio, true);
	}

	ret = sysconfig_poll_status(priv, &status);
	if (ret)
		return ret;

	/* ВАЖНО: Выводим финальный статус ПЛИС перед выходом */
	dev_info(priv->dev, "FINISHING: Device status register is 0x%08X\n", status);

	if ((status & SYSCONFIG_STATUS_DONE) &&
	    !(status & SYSCONFIG_STATUS_BUSY) &&
	    !(status & SYSCONFIG_STATUS_ERR)) {
		
		dev_info(priv->dev, "SUCCESS: DONE bit is set! FPGA is starting user logic...\n");
		
		/* Отключаем режим программирования */
		ret = sysconfig_isc_disable(priv);
		if (ret)
			return ret;

		/* Принудительно шлем REFRESH для старта прошивки, если DONE сам не запустил её */
		return sysconfig_lsc_refresh(priv);
	}

	dev_err(priv->dev, "ERROR: FPGA rejected bitstream. Status error flags present.\n");
	return -EFAULT;
}