/* Вспомогательная функция для быстрой печати 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;
}