0
\$\begingroup\$

My question comes from a pure curiosity. I initially wrote that it has no practical value, but in the process of writing I came to the idea that one (e.g. an intruder) can potentially use it to intentionally cause a damage...

I'm having fun with an old AMD processor, experimenting with its configuration registers, particularly, voltage levels (aka undervolting). Undervolting should not normally bear any risk of HW damage. It may make the system unstable, unresponsive, cause a reset or shut down, but would not harm the CPU. What if the voltage goes to the negative zone though (i.e. changes the polarity)?

According to BKDG (BIOS and Kernel Developer Guide) of my CPU, the following formula is used to calculate voltage requested by CPU from a voltage regulator: $$ \frac{1550 mV - VID \cdot 12.5 mV}{1000mV} $$ where VID states for "Voltage level identifier" and can be configured through CPU registers in the range from MinVid to MaxVid. MinVid and MaxVid are read-only values.

For clarity, "min" and "max" are numerically reversed: MinVid defines the numerically highest value, and MaxVid respectively numerically lowest one. I.e. they are rather min/max resulting voltage levels, then min/max numbers.

On my machine, MaxVid is 0x10 (decimal 16), and MinVid is 0, where "00h indicates that no minimum VID code is specified" (see page 431 in BKDG).

VID is a 7-bits field (see definition of CpuVid on page 430), meaning that all values from 16 to 127 are valid and will be accepted/used by HW.

Now, if you look closely at the formula, you may pay attention that VID of 124 results in voltage of 0 mA, and VID values of 125, 126 and 127, turn voltage to the negative area.

Isn't it a bug? Won't it burn the CPU if VID is configured to those numerically high values?

\$\endgroup\$
6
  • 4
    \$\begingroup\$ There likely won't be any hardware on the board capable of Inverting the voltage to the CPU, so just because you ask for a negative voltage in software doesn't mean you'll actually get it from the hardware. \$\endgroup\$ Nov 10, 2023 at 11:17
  • \$\begingroup\$ Possibly so, but BKDG tells (chapter 2.5.1.1.2 on page 50): "Hardware limits the minimum and maximum VID code that is sent to the voltage regulator", and then there is a check condition, which doesn't prevent negative values in any way. Hence, it is not only SW. HW reads this register and uses its value. \$\endgroup\$
    – Andy
    Nov 10, 2023 at 11:24
  • 2
    \$\begingroup\$ @Andy - that's not how it really works. Producing a negative voltage requires different hardware to that required for a positive voltage - hardware which is not present on the motherboard. So even if you could send a 'request' for a negative voltage to the regulator, you're not going to get it. \$\endgroup\$
    – brhans
    Nov 10, 2023 at 13:05
  • \$\begingroup\$ @brhans, got it. This sounds like "undefined behavior" and consequently as a documentation bug. \$\endgroup\$
    – Andy
    Nov 10, 2023 at 13:29
  • \$\begingroup\$ Note that undervoltage can damage devices, it's just rare. Most things won't be hurt by it, but there's the odd system that will get into a destructively erratic state if held iin certain voltage ranges. \$\endgroup\$
    – Hearth
    Nov 10, 2023 at 15:48

1 Answer 1

0
\$\begingroup\$

You need to consider what the CPU operating range is and even if some range is allowed by specification to be indicated, it makes no sense for the CPU to request 0V or negative values, or other values so low that it has no way of working properly or at all.

And the motherboard may not be able to provide the range down to 0V or negative even if CPU says it's allowed.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.