diff --git a/adl.c b/adl.c index 94b301fe..c8dd2904 100644 --- a/adl.c +++ b/adl.c @@ -221,11 +221,16 @@ void init_adl(int nDevs) ga->DefPerfLev = lpOdPerformanceLevels; if (gpus[gpu].gpu_engine) { - applog(LOG_INFO, "Setting GPU %d engine clock to %d", gpu, gpus[gpu].gpu_engine); lpOdPerformanceLevels->aLevels[lev].iEngineClock = gpus[gpu].gpu_engine * 100; + applog(LOG_INFO, "Setting GPU %d engine clock to %d", gpu, gpus[gpu].gpu_engine); ADL_Overdrive5_ODPerformanceLevels_Set(iAdapterIndex, lpOdPerformanceLevels); - ADL_Overdrive5_ODPerformanceLevels_Get(iAdapterIndex, 0, lpOdPerformanceLevels); } + if (gpus[gpu].gpu_memclock) { + lpOdPerformanceLevels->aLevels[lev].iMemoryClock = gpus[gpu].gpu_memclock * 100; + applog(LOG_INFO, "Setting GPU %d memory clock to %d", gpu, gpus[gpu].gpu_memclock); + ADL_Overdrive5_ODPerformanceLevels_Set(iAdapterIndex, lpOdPerformanceLevels); + } + ADL_Overdrive5_ODPerformanceLevels_Get(iAdapterIndex, 0, lpOdPerformanceLevels); ga->iEngineClock = lpOdPerformanceLevels->aLevels[lev].iEngineClock; ga->iMemoryClock = lpOdPerformanceLevels->aLevels[lev].iMemoryClock; ga->iVddc = lpOdPerformanceLevels->aLevels[lev].iVddc; diff --git a/main.c b/main.c index 471cd2f9..4cbad3f1 100644 --- a/main.c +++ b/main.c @@ -1139,6 +1139,33 @@ static char *set_gpu_engine(char *arg) return NULL; } +static char *set_gpu_memclock(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 memclock"; + val = atoi(nextptr); + if (val <= 0 || val >= 9999) + return "Invalid value passed to set_gpu_memclock"; + + gpus[device++].gpu_memclock = val; + + while ((nextptr = strtok_r(NULL, ",", &saveptr)) != NULL) { + val = atoi(nextptr); + if (val <= 0 || val >= 9999) + return "Invalid value passed to set_gpu_memclock"; + + gpus[device++].gpu_memclock = val; + } + for (i = device; i < 16; i++) + gpus[i].gpu_memclock = val; + + return NULL; +} + #endif /* These options are available from config file or commandline */ @@ -1205,6 +1232,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-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."), #endif OPT_WITH_ARG("--intensity|-I", forced_int_1010, NULL, &scan_intensity, diff --git a/miner.h b/miner.h index 3f8a706a..6988be41 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_memclock; #endif };