diff --git a/ASIC-README b/ASIC-README index 55b76d83..a56666cb 100644 --- a/ASIC-README +++ b/ASIC-README @@ -102,11 +102,13 @@ ASIC SPECIFIC COMMANDS --avalon-options Set avalon options baud:miners:asic:timeout:freq --avalon-temp Set avalon target temperature (default: 50) --bflsc-overheat Set overheat temperature where BFLSC devices throttle, 0 to disable (default: 90) ---bitburner-voltage Set BitBurner core voltage, in millivolts +--bitburner-fury-options Override avalon-options for BitBurner Fury boards baud:miners:asic:timeout:freq +--bitburner-fury-voltage Set BitBurner Fury core voltage, in millivolts +--bitburner-voltage Set BitBurner (Avalon) core voltage, in millivolts --klondike-options Set klondike options clock:temp1:temp2:fan -AVALON DEVICES +AVALON AND BITBURNER DEVICES Currently all known Avalon devices come with their own operating system and a preinstalled version of cgminer as part of the flash firmware, based on the @@ -118,6 +120,9 @@ command, and adjust its fan control-temperature relationship with avalon-temp. By default the avalon will also cut off when its temperature reaches 60 degrees. +All current BitBurner devices (BitBurner X, BitBurner XX and BitBurner Fury) +emulate Avalon devices, whether or not they use Avalon chips. + Avalon commands: --avalon-auto Adjust avalon overclock frequency dynamically for best hashrate @@ -126,7 +131,9 @@ Avalon commands: --avalon-freq Set frequency range for avalon-auto, single value or range --avalon-options Set avalon options baud:miners:asic:timeout:freq --avalon-temp Set avalon target temperature (default: 50) ---bitburner-voltage Set BitBurner core voltage, in millivolts +--bitburner-fury-options Override avalon-options for BitBurner Fury boards baud:miners:asic:timeout:freq +--bitburner-fury-voltage Set BitBurner Fury core voltage, in millivolts +--bitburner-voltage Set BitBurner (Avalon) core voltage, in millivolts Avalon auto will enable dynamic overclocking gradually increasing and @@ -177,8 +184,15 @@ Miners: Most Avalons are 3 module devices, which come to 24 miners. 4 module devices would use 32 here. +For BitBurner X and BitBurner XX devices you should use twice the number of +boards in the stack. e.g. for a two-board stack you would use 4. For +BitBurner Fury devices you should use the total number of BitFury chips in the +stack (i.e. 16 times the number of boards). e.g. for a two-board stack you +would use 32. + Asic count: -Virtually all have 10, so don't change this. +Virtually all have 10, so don't change this. BitBurner devices use 10 here +even if the boards have some other number of ASICs. Timeout: This is how long the device will work on a work item before accepting new work @@ -198,16 +212,61 @@ Sample settings for valid different frequencies (last 2 values): 50:256 Frequency: -This is the clock speed of the devices. Only specific values work, 256, 270, -282 (default), 300, 325, 350 and 375. +This is the clock speed of the devices. For Avalon devices, only specific +values work, 256, 270, 282 (default), 300, 325, 350 and 375. For BitBurner +devices, other values can be used. Note that setting a value with an asterisk next to it will be using your avalon outside its spec and you do so at your own risk. +The default frequency for BitBurner X and BitBurner XX boards is 282. The +default frequency for BitBurner Fury boards is 256. Overclocking is +possible - please consult the product documentation and/or manufacturer for +information on safe values. Values outside this range are used at your own +risk. Underclocking is also possible, at least with the X and XX boards. + +eg: +--bitburner-fury-options Override avalon-options for BitBurner Fury boards baud:miners:asic:timeout:freq + +This option takes the same format as --avalon-options. When specified, it +will be used for BitBurner Fury boards in preference to the values specified +in --avalon-options. (If not specified, BitBurner Fury boards will be +controlled by the values used in --avalon options.) See --avalon-options for +a detailed description of the fields. + +This option is particularly useful when using a mixture of different BitBurner +devices as BitBurner Fury devices generally require significantly different +clock frequencies from Avalon-based devices. This option is only available +for boards with recent firmware that are recognized by cgminer as BBF. + eg: ---bitburner-voltage Set BitBurner core voltage, in millivolts +--bitburner-fury-voltage Set BitBurner Fury core voltage, in millivolts + +Sets the core voltage for the BitBurner Fury boards. The default value is +900. Overvolting is possible - please consult the product documentation +and/or manufaturer about the safe range of values. Values outside this range +are used at your own risk. + +This option is only available for boards with recent firmware that are +recognized by cgminer as BBF. For boards recognized as BTB, see +--bitburner-voltage + +eg: +--bitburner-voltage Set BitBurner (Avalon) core voltage, in millivolts + +Sets the core voltage for the Avalon-based BitBurner X and BitBurner XX +boards. The default value is 1200. Overvolting and undervolting is +possible - please consult the product documentation and/or the manufacturer +for information about the safe range. Values outside this range are used at +your own risk. + +Older BitBurner Fury firmware emulates a BitBurner XX board and is identified +by cgminer as BTB. On these devices, --bitburner-voltage is used to control +the voltage of the BitBurner Fury board. The actual core voltage will be +300mV less than the requested voltage, so to run a BitBurner Fury board at +950mV use --bitburner-voltage 1250. The default value of 1200 therefore +corresponds to the default core voltage of 900mV. -Self evident. If you use the full curses based interface with Avalons you will get this information: diff --git a/README b/README index 5c739912..832d424e 100644 --- a/README +++ b/README @@ -220,7 +220,9 @@ ASIC only options: --avalon-options Set avalon options baud:miners:asic:timeout:freq --avalon-temp Set avalon target temperature (default: 50) --bflsc-overheat Set overheat temperature where BFLSC devices throttle, 0 to disable (default: 90) ---bitburner-voltage Set BitBurner core voltage, in millivolts +--bitburner-fury-options Override avalon-options for BitBurner Fury boards baud:miners:asic:timeout:freq +--bitburner-fury-voltage Set BitBurner Fury core voltage, in millivolts +--bitburner-voltage Set BitBurner (Avalon) core voltage, in millivolts See ASIC-README for more information regarding these. diff --git a/cgminer.c b/cgminer.c index 99dbaa78..f6f5cce9 100644 --- a/cgminer.c +++ b/cgminer.c @@ -167,6 +167,7 @@ char *opt_icarus_timing = NULL; bool opt_worktime; #ifdef USE_AVALON char *opt_avalon_options = NULL; +char *opt_bitburner_fury_options = NULL; #endif #ifdef USE_KLONDIKE char *opt_klondike_options = NULL; @@ -1036,6 +1037,13 @@ static char *set_avalon_options(const char *arg) return NULL; } + +static char *set_bitburner_fury_options(const char *arg) +{ + opt_set_charp(arg, &opt_bitburner_fury_options); + + return NULL; +} #endif #ifdef USE_KLONDIKE @@ -1255,6 +1263,9 @@ static struct opt_table opt_config_table[] = { OPT_WITH_ARG("--bitburner-fury-voltage", opt_set_intval, NULL, &opt_bitburner_fury_core_voltage, "Set BitBurner Fury core voltage, in millivolts"), + OPT_WITH_ARG("--bitburner-fury-options", + set_bitburner_fury_options, NULL, NULL, + "Override avalon-options for BitBurner Fury boards baud:miners:asic:timeout:freq"), #endif #ifdef USE_KLONDIKE OPT_WITH_ARG("--klondike-options", diff --git a/driver-avalon.c b/driver-avalon.c index 09e6dfa2..75cd06ee 100644 --- a/driver-avalon.c +++ b/driver-avalon.c @@ -53,6 +53,7 @@ int opt_bitburner_fury_core_voltage = BITBURNER_FURY_DEFAULT_CORE_VOLTAGE; bool opt_avalon_auto; static int option_offset = -1; +static int bbf_option_offset = -1; static int avalon_init_task(struct avalon_task *at, uint8_t reset, uint8_t ff, uint8_t fan, @@ -400,7 +401,7 @@ static int avalon_calc_timeout(int frequency) } static bool get_options(int this_option_offset, int *baud, int *miner_count, - int *asic_count, int *timeout, int *frequency) + int *asic_count, int *timeout, int *frequency, char *options) { char buf[BUFSIZ+1]; char *ptr, *comma, *colon, *colon2, *colon3, *colon4; @@ -408,10 +409,10 @@ static bool get_options(int this_option_offset, int *baud, int *miner_count, size_t max; int i, tmp; - if (opt_avalon_options == NULL) + if (options == NULL) buf[0] = '\0'; else { - ptr = opt_avalon_options; + ptr = options; for (i = 0; i < this_option_offset; i++) { comma = strchr(ptr, ','); if (comma == NULL) @@ -754,7 +755,7 @@ static void bitburner_get_version(struct cgpu_info *avalon) static bool avalon_detect_one(libusb_device *dev, struct usb_find_devices *found) { int baud, miner_count, asic_count, timeout, frequency; - int this_option_offset = ++option_offset; + int this_option_offset; struct avalon_info *info; struct cgpu_info *avalon; bool configured; @@ -768,12 +769,14 @@ static bool avalon_detect_one(libusb_device *dev, struct usb_find_devices *found timeout = AVALON_DEFAULT_TIMEOUT; frequency = AVALON_DEFAULT_FREQUENCY; - configured = get_options(this_option_offset, &baud, &miner_count, - &asic_count, &timeout, &frequency); - if (!usb_init(avalon, dev, found)) goto shin; + this_option_offset = usb_ident(avalon) == IDENT_BBF ? ++bbf_option_offset : ++option_offset; + configured = get_options(this_option_offset, &baud, &miner_count, + &asic_count, &timeout, &frequency, + (usb_ident(avalon) == IDENT_BBF && opt_bitburner_fury_options != NULL) ? opt_bitburner_fury_options : opt_avalon_options); + /* Even though this is an FTDI type chip, we want to do the parsing * all ourselves so set it to std usb type */ avalon->usbdev->usb_type = USB_TYPE_STD; @@ -796,10 +799,18 @@ static bool avalon_detect_one(libusb_device *dev, struct usb_find_devices *found info->frequency = frequency; } else { info->baud = AVALON_IO_SPEED; - info->miner_count = AVALON_DEFAULT_MINER_NUM; info->asic_count = AVALON_DEFAULT_ASIC_NUM; - info->timeout = AVALON_DEFAULT_TIMEOUT; - info->frequency = AVALON_DEFAULT_FREQUENCY; + switch (usb_ident(avalon)) { + case IDENT_BBF: + info->miner_count = BITBURNER_FURY_DEFAULT_MINER_NUM; + info->timeout = BITBURNER_FURY_DEFAULT_TIMEOUT; + info->frequency = BITBURNER_FURY_DEFAULT_FREQUENCY; + break; + default: + info->miner_count = AVALON_DEFAULT_MINER_NUM; + info->timeout = AVALON_DEFAULT_TIMEOUT; + info->frequency = AVALON_DEFAULT_FREQUENCY; + } } info->fan_pwm = AVALON_DEFAULT_FAN_MIN_PWM; diff --git a/driver-avalon.h b/driver-avalon.h index e506388e..063fb68b 100644 --- a/driver-avalon.h +++ b/driver-avalon.h @@ -55,6 +55,12 @@ #define AVALON_MAX_MINER_NUM 0x100 #define AVALON_DEFAULT_ASIC_NUM 0xA +/* Default number of miners for Bitburner Fury is for a stack of 8 boards, + but it will work acceptably for smaller stacks, too */ +#define BITBURNER_FURY_DEFAULT_MINER_NUM 128 +#define BITBURNER_FURY_DEFAULT_FREQUENCY 256 +#define BITBURNER_FURY_DEFAULT_TIMEOUT 50 + #define AVALON_AUTO_CYCLE 1024 #define AVALON_FTDI_READSIZE 510 diff --git a/miner.h b/miner.h index 874f1721..bd80883a 100644 --- a/miner.h +++ b/miner.h @@ -1022,6 +1022,7 @@ extern char *opt_icarus_timing; extern bool opt_worktime; #ifdef USE_AVALON extern char *opt_avalon_options; +extern char *opt_bitburner_fury_options; #endif #ifdef USE_KLONDIKE extern char *opt_klondike_options;