Implement setting the GPU memory clock speed of all devices or each device as a comma separated value.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
diff --git a/adl.c b/adl.c
index 94b301f..c8dd290 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 471cd2f..4cbad3f 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 3f8a706..6988be4 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
};