From 3a5663cac11bf5369d2594a7150d07f960dfaef8 Mon Sep 17 00:00:00 2001 From: Con Kolivas Date: Sun, 4 Sep 2011 22:25:31 +1000 Subject: [PATCH] Implement setting the GPU fan speed of all devices or each device as a comma separated value. --- adl.c | 8 ++++++++ main.c | 30 ++++++++++++++++++++++++++++++ miner.h | 1 + 3 files changed, 39 insertions(+) diff --git a/adl.c b/adl.c index 49aa7e0d..2f17eeac 100644 --- a/adl.c +++ b/adl.c @@ -252,6 +252,14 @@ void init_adl(int nDevs) /* Save the fanspeed values as defaults in case we reset later */ ADL_Overdrive5_FanSpeed_Get(ga->iAdapterIndex, 0, &ga->DefFanSpeedValue); + if (gpus[gpu].gpu_fan) { + ADL_Overdrive5_FanSpeed_Get(ga->iAdapterIndex, 0, &ga->lpFanSpeedValue); + ga->lpFanSpeedValue.iFanSpeed = gpus[gpu].gpu_fan; + ga->lpFanSpeedValue.iFlags = ADL_DL_FANCTRL_FLAG_USER_DEFINED_SPEED; + ga->lpFanSpeedValue.iSpeedType = ADL_DL_FANCTRL_SPEED_TYPE_PERCENT; + applog(LOG_INFO, "Setting GPU %d fan speed to %d%%", gpu, gpus[gpu].gpu_fan); + ADL_Overdrive5_FanSpeed_Set(ga->iAdapterIndex, 0, &ga->lpFanSpeedValue); + } /* Set some default temperatures for autotune when enabled */ ga->targettemp = opt_targettemp; diff --git a/main.c b/main.c index c938aebe..ebd1682d 100644 --- a/main.c +++ b/main.c @@ -1139,6 +1139,33 @@ static char *set_gpu_engine(char *arg) return NULL; } +static char *set_gpu_fan(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 fan"; + val = atoi(nextptr); + if (val < 0 || val > 100) + return "Invalid value passed to set_gpu_fan"; + + gpus[device++].gpu_fan = val; + + while ((nextptr = strtok_r(NULL, ",", &saveptr)) != NULL) { + val = atoi(nextptr); + if (val < 0 || val > 100) + return "Invalid value passed to set_gpu_fan"; + + gpus[device++].gpu_fan = val; + } + for (i = device; i < 16; i++) + gpus[i].gpu_fan = val; + + return NULL; +} + static char *set_gpu_memclock(char *arg) { int i, val = 0, device = 0; @@ -1260,6 +1287,9 @@ static struct opt_table opt_config_table[] = { OPT_WITH_ARG("--gpu-engine", set_gpu_engine, NULL, NULL, "Set the GPU engine (over)clock in Mhz - one value for all or separate by commas for per card."), + OPT_WITH_ARG("--gpu-fan", + set_gpu_fan, NULL, NULL, + "Set the GPU fan percentage - one value for all or separate by commas for per card."), 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."), diff --git a/miner.h b/miner.h index c5477e55..3da50292 100644 --- a/miner.h +++ b/miner.h @@ -199,6 +199,7 @@ struct cgpu_info { bool has_adl; struct gpu_adl adl; int gpu_engine; + int gpu_fan; int gpu_memclock; float gpu_vddc; #endif