Skip to content

Commit 5b532b5

Browse files
authored
gcn.rs: reverse iteration over sclk and mclk levels
Writing the table in ascending order (P0 -> P7) can cause the later high P-state writes to be rejected/clamped by the driver because earlier states were still at higher voltages at the moment the write is processed. This manifests as P7 not going below a floor even though the OD table entry is updated. Reverse iteration (P7 -> P0) over sclk and mclk levels to ensure that when undervolting, each subsequent write never attempts to set a voltage below a previously committed higher P-state voltage, preventing the driver from rejecting the requested value. Fixes ilya-zlobintsev/LACT#933
1 parent 35fb233 commit 5b532b5

1 file changed

Lines changed: 2 additions & 2 deletions

File tree

  • src/gpu_handle/overdrive

src/gpu_handle/overdrive/gcn.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,12 @@ impl ClocksTable for Table {
2626
writer: &mut W,
2727
_previous_table: &ClocksTableGen,
2828
) -> Result<()> {
29-
for (i, level) in self.sclk_levels.iter().enumerate() {
29+
for (i, level) in self.sclk_levels.iter().enumerate().rev() {
3030
let command = level_command(*level, i, 's');
3131
writer.write_all(command.as_bytes())?;
3232
}
3333

34-
for (i, level) in self.mclk_levels.iter().enumerate() {
34+
for (i, level) in self.mclk_levels.iter().enumerate().rev() {
3535
let command = level_command(*level, i, 'm');
3636
writer.write_all(command.as_bytes())?;
3737
}

0 commit comments

Comments
 (0)