diff --git a/adl.c b/adl.c index 913bd78b..58ae1b1b 100644 --- a/adl.c +++ b/adl.c @@ -270,6 +270,11 @@ void init_adl(int nDevs) if (ADL_Overdrive5_PowerControl_Get(ga->iAdapterIndex, &ga->iPercentage, &dummy) != ADL_OK) applog(LOG_INFO, "Failed to ADL_Overdrive5_PowerControl_get"); + if (gpus[gpu].gpu_powertune) { + ADL_Overdrive5_PowerControl_Set(ga->iAdapterIndex, gpus[gpu].gpu_powertune); + ADL_Overdrive5_PowerControl_Get(ga->iAdapterIndex, &ga->iPercentage, &dummy); + } + /* Set some default temperatures for autotune when enabled */ ga->targettemp = opt_targettemp; ga->overtemp = opt_overheattemp; diff --git a/main.c b/main.c index 5a1327d3..88a7ed84 100644 --- a/main.c +++ b/main.c @@ -1193,6 +1193,33 @@ static char *set_gpu_memclock(char *arg) return NULL; } +static char *set_gpu_powertune(char *arg) +{ + int i, val = 0, device = 0; + char *saveptr = NULL, *nextptr; + + nextptr = strtok_r(arg, ",", &saveptr); + if (nextptr == NULL) + return "Invalid parameters for set gpu powertune"; + val = atoi(nextptr); + if (val < -99 || val > 99) + return "Invalid value passed to set_gpu_powertune"; + + gpus[device++].gpu_powertune = val; + + while ((nextptr = strtok_r(NULL, ",", &saveptr)) != NULL) { + val = atoi(nextptr); + if (val < -99 || val > 99) + return "Invalid value passed to set_gpu_powertune"; + + gpus[device++].gpu_powertune = val; + } + for (i = device; i < 16; i++) + gpus[i].gpu_powertune = val; + + return NULL; +} + static char *set_gpu_vddc(char *arg) { int i, device = 0; @@ -1293,6 +1320,9 @@ static struct opt_table opt_config_table[] = { OPT_WITH_ARG("--gpu-memclock", set_gpu_memclock, NULL, NULL, "Set the GPU memory (over)clock in Mhz - one value for all or separate by commas for per card."), + OPT_WITH_ARG("--gpu-powertune", + set_gpu_powertune, NULL, NULL, + "Set the GPU powertune percentage - one value for all or separate by commas for per card."), OPT_WITH_ARG("--gpu-vddc", set_gpu_vddc, NULL, NULL, "Set the GPU voltage in Volts - one value for all or separate by commas for per card."), diff --git a/miner.h b/miner.h index 12c10d27..710b91ef 100644 --- a/miner.h +++ b/miner.h @@ -202,6 +202,7 @@ struct cgpu_info { int gpu_engine; int gpu_fan; int gpu_memclock; + int gpu_powertune; float gpu_vddc; #endif };