Great job again!
We might just need to go through all the different versions of each source file to find which one is the most up to date. For instance I "think" this is the latest/greatest device_baikal.h file:
#ifndef __DEVICE_BAIKAL_H__
#define __DEVICE_BAIKAL_H__
#include "miner.h"
#define BAIKAL_1751 (0x1)
#define BAIKAL_1772 (0x2)
#define BAIKAL_1791 (0x4)
#define BAIKAL_ALL (0x7)
#define BAIKAL_TYPE (BAIKAL_ALL)
#define BAIKAL_MAXMINERS (5)
#define BAIKAL_MAXUNIT (4)
#define BAIKAL_MAXASICS (16)
#define BAIKAL_WORK_FIFO (200)
#define BAIKAL_CLK_MIN (150)
#define BAIKAL_CLK_MAX (300)
#if BAIKAL_TYPE == BAIKAL_1751
#define BAIKAL_CLK_DEF (200)
#elif BAIKAL_TYPE == BAIKAL_1791
#define BAIKAL_CLK_DEF (400)
#else
#define BAIKAL_CLK_DEF (300)
#endif
#define BAIKAL_CUTOFF_TEMP (60)
#define BAIKAL_FANSPEED_DEF (100)
#define BAIKAL_FANSPEED_MAX (100)
#define BAIKAL_RECOVER_TEMP (40)
#define BAIKAL_RESET (0x01)
#define BAIKAL_GET_INFO (0x02)
#define BAIKAL_SET_OPTION (0x03)
#define BAIKAL_SEND_WORK (0x04)
#define BAIKAL_GET_RESULT (0x05)
#define BAIKAL_SET_ID (0x06)
#define BAIKAL_SET_IDLE (0x07)
#define BAIKAL_MINER_TYPE_NONE (0x00)
#define BAIKAL_MINER_TYPE_MINI (0x01)
#define BAIKAL_MINER_TYPE_CUBE (0x02)
#define BAIKAL_ENABLE_SETCLK (0)
#define BAIKAL_CHECK_STALE (0)
#define BAIKAL_EN_HWE (0)
#define BAIKAL_CLK_FIX (1)
struct asic_info {
uint32_t nonce;
uint32_t error;
};
struct miner_info {
int thr_id;
int asic_count;
int asic_count_r;
int unit_count;
int temp;
int clock;
int bbg;
bool working;
bool overheated;
uint8_t fw_ver;
uint8_t hw_ver;
uint8_t asic_ver;
uint32_t nonce;
uint32_t error;
double working_diff;
struct asic_info asics[BAIKAL_MAXUNIT][BAIKAL_MAXASICS];
uint8_t work_idx;
struct work *works[BAIKAL_WORK_FIFO];
cgtimer_t start_time;
};
struct baikal_info {
struct pool pool;
int miner_count;
int clock;
uint8_t cutofftemp;
uint8_t fanspeed; // percent
uint8_t recovertemp;
pthread_t *process_thr;
struct miner_info miners[BAIKAL_MAXMINERS];
uint8_t miner_type;
};
typedef struct {
uint8_t miner_id;
uint8_t cmd;
uint8_t param;
uint8_t dest;
uint8_t data[512];
uint32_t len;
} baikal_msg;
#endif /* __DEVICE_BAIKAL_H__ */
this is the current driver-baikal.h file that i use. Very similiar to the one you have
#ifndef __DEVICE_BAIKAL_H__
#define __DEVICE_BAIKAL_H__
#include "miner.h"
#define BAIKAL_1751 (0x1)
#define BAIKAL_1772 (0x2)
#define BAIKAL_1791 (0x4)
#define BAIKAL_ALL (0x7)
#define BAIKAL_TYPE (BAIKAL_ALL)
#define BAIKAL_MAXMINERS (5)
#define BAIKAL_MAXUNIT (4)
#define BAIKAL_MAXASICS (16)
#define BAIKAL_WORK_FIFO (200)
#define BAIKAL_CLK_MIN (150)
#define BAIKAL_CLK_DEF (400)
#define BAIKAL_CLK_MAX (400)
#define BAIKAL_CUTOFF_TEMP (55)
#define BAIKAL_FANSPEED_DEF (100)
#define BAIKAL_FANSPEED_MAX (100)
#define BAIKAL_RECOVER_TEMP (40)
#define BAIKAL_RESET (0x01)
#define BAIKAL_GET_INFO (0x02)
#define BAIKAL_SET_OPTION (0x03)
#define BAIKAL_SEND_WORK (0x04)
#define BAIKAL_GET_RESULT (0x05)
#define BAIKAL_SET_ID (0x06)
#define BAIKAL_SET_IDLE (0x07)
#define BAIKAL_MINER_TYPE_NONE (0x00)
#define BAIKAL_MINER_TYPE_MINI (0x01)
#define BAIKAL_MINER_TYPE_CUBE (0x02)
#define BAIKAL_ENABLE_SETCLK (0)
#define BAIKAL_CHECK_STALE (0)
#define BAIKAL_EN_HWE (0)
#define BAIKAL_CLK_FIX (1)
struct asic_info {
uint32_t nonce;
uint32_t error;
};
struct miner_info {
int thr_id;
int asic_count;
int asic_count_r;
int unit_count;
int temp;
int clock;
int bbg;
bool working;
bool overheated;
uint8_t fw_ver;
uint8_t hw_ver;
uint8_t asic_ver;
uint32_t nonce;
uint32_t error;
double working_diff;
struct asic_info asics[BAIKAL_MAXUNIT][BAIKAL_MAXASICS];
uint8_t work_idx;
struct work *works[BAIKAL_WORK_FIFO];
cgtimer_t start_time;
};
struct baikal_info {
struct pool pool;
int miner_count;
int clock;
uint8_t cutofftemp;
uint8_t fanspeed; // percent
uint8_t recovertemp;
pthread_t *process_thr;
struct miner_info miners[BAIKAL_MAXMINERS];
uint8_t miner_type;
};
typedef struct {
uint8_t miner_id;
uint8_t cmd;
uint8_t param;
uint8_t dest;
uint8_t data[512];
uint32_t len;
} baikal_msg;
#endif /* __DEVICE_BAIKAL_H__ */
Only difference is that in your version it sets clock depending on Baikal chip type(1751: CN, 1791: B), so it does no difference on X10, however it does difference to CN and B.
Ive tried to overclock it but its not possible at this moment, both by enabling ENABLE_SETCLK and disabling CLK_FIX, and even tried another definition of CLK_DEF. Even though sgminer says its set to 400 Mhz, it aint - seems to be limited on firmware level!
When it comes to different algo`s, none of them work (gives only HW errors) - either needed some updates in algo files, or what i think it is also limited at firmware level. However, i did gather some different power usages:
Groestl: Unknown @ 690w
Nist5: Unknown @ 690w
X11Gost: Unknown, but possibly 450MHs @ 450w
sgminer 5.6.2-cod3gen - Started: [2018-03-26 00:38:34] - [0 days 10:12:35]
--------------------------------------------------------------------------------
(5s):10.82G (avg):10.81Gh/s | A:9148 R:78 HW:381 WU:33820.422/m
ST: 1 SS: 0 NB: 638 LW: 2261672 GF: 0 RF: 0
Connected to quark.eu.nicehash.com (stratum) diff 5.24K as user XXX
Block: 57e616c6... Diff:117M Started: [10:48:08] Best share: 10.8M
--------------------------------------------------------------------------------
[U]SB management [P]ool management [S]ettings [D]isplay options [Q]uit
BKLU 0: 38C 400MHz [ASICS #64] | 3.604G/3.604Gh/s | A:2763 R: 21 HW: 54 WU:9921.705/m
BKLU 1: 38C 400MHz [ASICS #64] | 3.604G/3.604Gh/s | A:3194 R: 27 HW:150 WU:11941.753/m
BKLU 2: 38C 400MHz [ASICS #64] | 3.604G/3.604Gh/s | A:3191 R: 30 HW:177 WU:11956.965/m
Actual stats on nicehash is slightly lower than orginal version.