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


/* Вспомогательная функция для быстрой печати 64-битного статуса в dmesg */
static void sysconfig_log_hardware_status(struct sysconfig_priv *priv, const char *label)
{
	const u8 lsc_read_status[] = SYSCONFIG_LSC_READ_STATUS;
	u8 raw_status[8];
	int ret;

	/* Читаем напрямую 8 байт регистра статуса 0x3C */
	ret = priv->command_transfer(priv, lsc_read_status, sizeof(lsc_read_status),
				     raw_status, sizeof(raw_status));
	if (!ret) {
		dev_info(priv->dev, "[DEBUG %s] Status: %02X %02X %02X %02X %02X %02X %02X %02X\n",
			 label, raw_status[0], raw_status[1], raw_status[2], raw_status[3],
			 raw_status[4], raw_status[5], raw_status[6], raw_status[7]);
	} else {
		dev_info(priv->dev, "[DEBUG %s] Failed to read status, ret=%d\n", label, ret);
	}
}

/* Модифицируем функцию записи */
static int sysconfig_bitstream_burst_write(struct sysconfig_priv *priv,
					   const char *buf, size_t count)
{
	int ret;

	/* Печатаем статус ПЛИС ПЕРЕД отправкой текущего чанка данных */
	sysconfig_log_hardware_status(priv, "BEFORE_CHUNK");

	dev_info(priv->dev, "Writing bitstream chunk of %zu bytes...\n", count);

	ret = priv->bitstream_burst_write(priv, buf, count);

	/* Печатаем статус ПЛИС СРАЗУ ПОСЛЕ отправки текущего чанка данных */
	sysconfig_log_hardware_status(priv, "AFTER_CHUNK");

	if (ret)
		sysconfig_burst_write_complete(priv);

	return ret;
}