VRM upgrade to run high Current OEM processors

RolloZ170

Well-Known Member
Apr 24, 2016
2,585
648
113
55
OK, for all who have a supermicro X11SPM/X11SPL/X11DPi/X11DPH and want to run high Current OEM processors
The Thermal Design Current(TDC) of those processors is 255A, normal is 228A and lower.
You can see this TDC value with AIDA, HWinfo does not show this parameter anymore.
UnbenanntQL2K cpuidC.png
We need the ElmorLabs EVC2SX/EVC2SE and the Software EVC2 1.0.1.13

I have made a device-xml for the EVC2 Software, MP2955A_PMBUS.xml
put it in the folder /I2C_DEVICES and delete all other files.

Code:
<?xml version="1.0" encoding="utf-8"?>

<EVC2>

    <!-- Application metadata -->
    <Application>
        <SoftwareVersion>12</SoftwareVersion>
        <FileVersion>6</FileVersion>
    </Application>

    <!-- Device specification -->
    <Device>
        <Name>MP2955A (PMBus)</Name>
        <Class>1</Class>
        <BusType>1</BusType>
        <BusSpeed>100</BusSpeed>
        <Address Type="Range">
            <Start>10</Start>
            <End>40</End>
        </Address>
        <Detect Type="RegisterMatch">
            <Register>
                <Command>BF</Command>
                <Length>2</Length>
                <Data>2555</Data> <!-- MPS MP2955A, 2556=MP2956A,2558=MP2958A -->
            </Register>
        </Detect>

        <Constant> <!-- Read once -->

        </Constant>

        <Status>


        </Status>

        <Configuration><!-- Read/Write options -->

            <Item>
                <Name>ICC_MAX</Name>
                <PreExec>
                    <Command>00</Command><!-- select Page 0 -->
                    <Data>00</Data>
                </PreExec>
                <Register Type="List" Restrict="WriteOnly">
                    <Command>EF</Command>
                    <Length>1</Length>
                    <Data Desc="min.190A">BE</Data>
                    <Data Desc="def.228A">E4</Data>
                    <Data Desc="max.255A">FF</Data>
                </Register>
            </Item>

            <Item>
                <Name>STORE_USER_ALL</Name>
                <Register Type="List" Restrict="WriteOnly">
                    <Command>15</Command>
                    <Length>0</Length>
                    <Data Desc="No">0</Data>
                    <Data Desc="Yes">1</Data>
                </Register>
            </Item>

        </Configuration>

        <Monitoring>
            <Item>
                <Name>MFR_ICC_MAX</Name>
                <Register Type="Math">
                    <Command>EF</Command>
                    <Length>1</Length>
                    <Math>
                        <Factor>1</Factor>
                        <Unit>A</Unit>
                        <Format>F1</Format>
                    </Math>
                </Register>
            </Item>
            <Item>
                <Name>Output Current</Name>
                <Register Type="Math">
                    <Command>8C</Command>
                    <Length>2</Length>
                    <StartBit>0</StartBit>
                    <EndBit>10</EndBit>
                    <Math>
                        <Factor>0.25</Factor>
                        <Unit>A</Unit>
                        <Format>F1</Format>
                    </Math>
                </Register>
            </Item>
        </Monitoring>
    </Device>

</EVC2>
I have made a device-xml for the EVC2 Software, TPS53679_PMBUS.xml
Code:
<?xml version="1.0" encoding="utf-8"?>

<EVC2>
<!-- PMBus Device TPS -->
    <!-- Application metadata -->
    <Application>
        <SoftwareVersion>12</SoftwareVersion>
        <FileVersion>6</FileVersion>
    </Application>

    <!-- Device specification -->
    <Device>
        <Name>TPS53679 (PMBus)</Name>
        <Class>1</Class>
        <BusType>1</BusType>
        <BusSpeed>100</BusSpeed>
        <Address Type="Range">
            <Start>10</Start>
            <End>70</End>
        </Address>

        <Detect Type="RegisterMatch">

            <Register Type="Hex" AccessMethod="Normal">
                <Command>AD</Command> <!-- IC_DEVICE_ID        = 0xAD -->
                <Length>2</Length>
                <Data>7901</Data> <!-- 7901 = tps63679 -->
            </Register>

        </Detect>

        <Constant> <!-- Read once -->

            <Item>
                <Name>IOUT_MAX</Name>
                <PreExec>
                    <Command>00</Command><!-- select Page 0 -->
                    <Data>00</Data>
                </PreExec>
                <Register Type="Math" AccessMethod="Normal">
                    <Command>DA</Command>
                    <Length>2</Length>
                    <StartBit>0</StartBit>
                    <EndBit>7</EndBit>
                    <Math>
                        <Factor>1</Factor>
                        <Unit>A</Unit>
                        <Format>F0</Format>
                    </Math>
                </Register>
            </Item>

            <Item>
                <Name>IOUT_OC_FAULT_LIM</Name>
                <PreExec>
                    <Command>00</Command><!-- select Page 0 -->
                    <Data>00</Data>
                </PreExec>
                <Register Type="Math" AccessMethod="Normal">
                    <Command>46</Command>
                    <Length>2</Length>
                    <StartBit>0</StartBit>
                    <EndBit>10</EndBit>
                    <Math>
                        <Factor>1</Factor>
                        <Unit>A</Unit>
                        <Format>F0</Format>
                    </Math>
                </Register>
            </Item>

            <Item>
                <Name>IOUT_OC_WARN_LIM</Name>
                <PreExec>
                    <Command>00</Command><!-- select Page 0 -->
                    <Data>00</Data>
                </PreExec>
                <Register Type="Math" AccessMethod="Normal">
                    <Command>4A</Command>
                    <Length>2</Length>
                    <StartBit>0</StartBit>
                    <EndBit>10</EndBit>
                    <Math>
                        <Factor>1</Factor>
                        <Unit>A</Unit>
                        <Format>F0</Format>
                    </Math>
                </Register>
            </Item>
        </Constant>

        <Status>

        </Status>

        <Configuration> <!-- Read/Write options -->

            <Item>
                <Name>IOUT_MAX</Name>
                <PreExec>
                    <Command>00</Command> <!-- select Page 0 -->
                    <Data>00</Data>
                </PreExec>
                <Register Type="List">
                    <Command>DA</Command>
                    <Length>2</Length>
                    <StartBit>0</StartBit>
                    <EndBit>7</EndBit>
                    <Data Desc="low.190A">BE</Data> <!-- X11DPL-i standard -->
                    <Data Desc="def.228A">E4</Data> <!-- standard except X11DPL-i -->
                    <Data Desc="max.255A">FF</Data>
                </Register>
            </Item>

            <Item>
                <Name>STORE_DEFAULT_ALL</Name>
                <Register Type="List" Restrict="WriteOnly">
                    <Command>11</Command>
                    <Length>0</Length>
                    <Data Desc="No">0</Data>
                    <Data Desc="Yes">1</Data>
                </Register>
            </Item>

        </Configuration>

        <Monitoring>
            <Item>
                <Name>IOUT_MAX</Name>
                <PreExec>
                    <Command>00</Command> <!-- select Page 0 -->
                    <Data>00</Data>
                </PreExec>
                <Register Type="Math">
                    <Command>DA</Command>
                    <Length>2</Length>
                    <StartBit>0</StartBit>
                    <EndBit>7</EndBit>
                    <Math>
                        <Factor>1</Factor>
                        <Unit>A</Unit>
                        <Format>F1</Format>
                    </Math>
                </Register>
            </Item>

            <Item>
                <Name>Output Current</Name>
                <Register Type="Math">
                    <Command>8C</Command>
                    <Length>2</Length>
                    <StartBit>0</StartBit>
                    <EndBit>10</EndBit>
                    <Math>
                        <Factor>0.25</Factor>
                        <Unit>A</Unit>
                        <Format>F1</Format>
                    </Math>
                </Register>
            </Item>

        </Monitoring>
    </Device>

</EVC2>
Do not power the X11SPM, install a supported CPU and connect the EVC2SX-I2C1 header with a 3 wire Cable to the JVR1 header of the X11SPM
JVR1 c.jpg
Connect the EVC2SX with the USB Cable to your PC and start the EVC2 Software.
Now you can power on the X11SPM, click on I2C1 and click "Find Devices" the MP2955A should be found and visible under I2C1.
Click on this entry to open the Device:
EVC_MP2955A_01.jpg
click "Monitoring" to see the value of ICC_MAX.
you can select the standard or max. ICC_MAX in the dropdown menu.
EVC_MP2955A_02.jpg
STORE_USER_ALL is to save the setting permanent.
EVC_MP2955A_03.jpg
With a click at "Apply changes" the new ICC_MAX is written and if you choosed "yes" for STORE_USER-ALL this setting is copied in the NVM of the VRM controller.
EVC_MP2955A_04.jpg
If you have any questions, ask me.

UPDATE:
i have successfully connected the MPS EVKT-USBI2C-02 Interface to X11SPM and the MP2955A VRM controller is recognized by the MPS Software V4.5.11, if you need the Software with MP2955A support, PM me.

UPDATE2:
i have successfully modified a X11DPi-N(T) rev. 2.01A to run TDC 255A TDP 240W SKUs(i.e. Amazon AWS customs)
With CPU in both sockets installed the procedure is similar than decribed above, you will see two MP2955A (adr 0x20 and 0x21)
Remove the JVRM1/2 jumpers and connect the I2C :
JVRM1 pin2 = SCL
JVRM2 pin2 = SDA
USB2/3 pin7/8 = GND (or any other GND pin)

UPDATE3:
we have successfully modified a X11SPL-F,X11SPi-TF,X11DPL-i and X11DPH-i to run TDC 255A TDP 240W SKUs(i.e. Amazon AWS customs)
With CPU in both sockets installed the procedure is siliar than decribed above, you will see oneor two TPS53679 (adr 0x58/0x60)
X11SPL-F (may block TDP higher than 165W, ask me for modded BIOS 3.6)
X11SPM-(T)F (may block TDP higher than 165W,
Guide to make BIOS 3.8a with 255W support )
X11SPi-TF

JVR1 pin1 = SCL
JVR1 pin2 = SDA
JVR1 pin3 = GND

X11DPi:
JVRM1_JVRM2.jpgX11DPi I2C.jpg
Remove the JVRM1/2 jumpers and connect the I2C :
JVRM1 pin2 = SCL
JVRM2 pin2 = SDA
USB2/3 pin7/8 = GND (or any other GND pin)
X11DPH:
Remove the JVRM1/2 jumpers and connect the I2C :
JVRM1 pin2 = SCL
JVRM2 pin2 = SDA
T-SGPIO1 Header Pin3/6 = GND (or any other GND pin)
X11DPL-i: (set to 228A to run up to 205W SKU)
Remove the JVRM1/2 jumpers and connect the I2C :
JVRM1 pin2 = SCL
JVRM2 pin2 = SDA
USB2 Header pin7/8 = GND (or any other GND pin)

For motherboards with PXE1610C controller look here

MCP2221a (Adafruit)

if you don't want to buy EVC2 and can get a MCP2221a device, here is a TPS53679.csv for the microchip MCP2221Terminal software:
change the device address to match your needs.
Code:
True,SMBus,7 bit,58,Write,0,"00",Off,,sel.Page 0,Send
True,SMBus,7 bit,58,Read,AD,"2",Off,,IC_DEVICE_ID,Send
True,SMBus,7 bit,58,Write,0,"00",Off,,sel.Page 0,Send
True,SMBus,7 bit,58,Write,DA,"FF,00",Off,,write icc_max,Send
True,SMBus,7 bit,58,Write,0,"00",Off,,sel.Page 0,Send
True,SMBus,7 bit,58,Read,DA,"2",Off,,verify icc_max,Send
True,SMBus,7 bit,58,Write,11,"",Off,500,STORE_DEFAULT_ALL,Send
 
Last edited:

RolloZ170

Well-Known Member
Apr 24, 2016
2,585
648
113
55
on a Intel S2600BPB motherboard i could access the PXE1610C's in standby state, very easy because only the BMC is accessing the VRM rarely.

my other test system Dell T7820 i have to power up the system and have at least go to the BIOS.
A other way is to supply the very bare 7820/7920 motherboard with 3.3V only(attantion: the 24pin black power conn.is NOT std.pinout)
the PCH(Intel ME) accesses the PXE1610C rel. often and its not easy to get stable access. manualy step by step it can be done, but that is not satisfying me. the best way is to power the motherboard with 3.3V only (the 24pin 7820/7920 is NOT ATX pinout)
Dell T7920 PJPP2.jpg

we have successfully modified a Lenovo P920 motherboard:
controllers are PXE1610C
addresses are 60/62(7bit) same like Dell.
I2C header is PJ1100 Pinout:
[1] SCL
(2) SDA
(3) Ground

if someone is in a hurry here is what you have to do:

investigate the addresses of the PXE1610C, ( i.e. 60h on the Dell T7820 motherboard )
use 400000hz I2C clock if possible.
all write/read to this client address:
write byte addr=00h, value=3Fh REM set Page to 63
write word addr=27h, value=B37Ch REM set reg_pwd - allow to change registers
write byte addr=00h, value=20h REM set Page to 32
write word addr=73h, value=00FFh REM set icc_max to 255Amps
read word addr=73h REM check if icc_max was changed
write byte addr=00h, value=3Fh REM set Page to 63
write word addr=29h, value=EFD7h REM set nvm_pwd - allow to access OTP NVM
write byte addr=00h, value=3Fh REM set Page to 63
SendByte addr=34h, no bytes REM upload_cfg_send_byte
pause 500ms REM give the controller time to work
write byte addr=00h, value=3Fh REM set Page to 63
write word addr=29h, value=0000h REM clr nvm_pwd

you can check if the remaining attempts are decremented, proof of succesful operation.
write byte addr=00h, value=50h REM set Page to 80
read word addr=82 REM bits 6 to 11 = OTP remaining attempts,
edit:
got a MCP2221a pcb, microchip provides a CLI & Terminal software.
Ada_MPC2221a.jpgMCterminal.jpg
relplace the 60 with the 7 bit slave addr. of your system.(MCP2221 Terminal can investiage the avail.Devices, read the Doc)
Code:
True,SMBus,7 bit,60,Write,0,"50",Off,,sel.Page 80,Send
True,SMBus,7 bit,60,Read,82,"2",Off,,read rem.Attempts,Send
True,SMBus,7 bit,60,Write,0,"3F",Off,,sel. Page 63,Send
True,SMBus,7 bit,60,Write,27,"7C,B3",Off,,write reg_pwd,Send
True,SMBus,7 bit,60,Write,0,"20",Off,,sel. Page 32,Send
True,SMBus,7 bit,60,Read,73,"2",Off,,read icc_max,Send
True,SMBus,7 bit,60,Write,73,"FF,00",Off,,write icc_max,Send
True,SMBus,7 bit,60,Read,73,"2",Off,,verify icc_max,Send
True,SMBus,7 bit,60,Write,0,"3F",Off,,sel. Page 63,Send
True,SMBus,7 bit,60,Write,29,"D7,EF",Off,,write nvm_pwd,Send
True,SMBus,7 bit,60,Write,34,"",Off,500,upload_cfg_send_byte,Send
True,SMBus,7 bit,60,Write,29,"0,0",Off,500,write nvm_pwd,Send
True,SMBus,7 bit,60,Write,0,"50",Off,,sel.Page 80,Send
True,SMBus,7 bit,60,Read,82,"2",Off,,read rem.Attempts,Send
create a *.csv and import in MCP2221 Terminal

update:
made now a device.xml for ElmoLabs EVC2
because Elmor still lacks <PreExec> support in <Detect> section you have add the device manualy.
but still tricky with EVC2 software:
select profile "PXE1610C_PMBUS" set addr. to 60 or 62 and click [add] (manualy)
change reg_pwd to set
choose icc_max
change nvm_pwd to set
change cfg_send_byte to send (there is no other way, i can not just send a cmd)
then click [Apply changes]
Code:
<?xml version="1.0" encoding="utf-8"?>

<EVC2>
<!-- PMBus Device for Infineon PXE1610, PXE1110 and PXM1310 -->
    <!-- Application metadata -->
    <Application>
        <SoftwareVersion>12</SoftwareVersion>
        <FileVersion>6</FileVersion>
    </Application>
 
    <!-- Device specification -->
    <Device>
        <Name>PXE1610C (PMBus)</Name>
        <Class>1</Class>
        <BusType>1</BusType>
        <BusSpeed>400</BusSpeed>
        <Address Type="Range">
            <Start>10</Start>
            <End>CF</End>
        </Address>

        <Detect Type="RegisterMatch">

            <Register AccessMethod="Normal">
                <Command>FD</Command> <!-- chiptype 0xFD 253u -->
                <Length>1</Length>
                <Data>B3</Data> <!-- 179 -->
            </Register>

            <Register AccessMethod="Normal">
                <Command>1A</Command> <!-- chiptype 0x1A,26u page 79 -->
                <Length>1</Length>    <!-- 2 bytes but StartBit/EndBit not implemented -->
                <Data>00</Data> <!-- 00u,1045u => "E1610C", -->
                <!-- <Data>30</Data> 48u,1025u => "E1110C", -->
                <!-- <Data>40</Data> 64u,2057u => "M1310C", -->
            </Register>

            <Register AccessMethod="Normal">
                <Command>32</Command> <!-- chiptype 0x32,50u page 79 -->
                <Length>2</Length>
                <Data>0415</Data> <!-- 1045u => "E1610C", -->
                <!-- <Data>0401</Data> 1025u => "E1110C", -->
                <!-- <Data>0809</Data> 2057u => "M1310C", -->
            </Register>

        </Detect>

        <Constant> <!-- Read once -->

            <Item>
                <Name>rem.Attempts</Name>
                <PreExec Restrict="WriteOnly">
                    <Command>00</Command><!-- select Page 80 -->
                    <Data>50</Data>
                </PreExec>
                <Register AccessMethod="Normal">
                    <Command>82</Command><!--  130u(0x82),P80(0x50) -->
                    <Length>2</Length>
                    <StartBit>6</StartBit>
                    <EndBit>11</EndBit>
                </Register>
            </Item>
         
            <Item>
                <Name>imax</Name>
                <PreExec Restrict="WriteOnly">
                    <Command>00</Command><!-- select Page 32 -->
                    <Data>20</Data>
                </PreExec>
                <Register AccessMethod="Normal">
                    <Command>73</Command>
                    <Length>2</Length>
                    <StartBit>0</StartBit>
                    <EndBit>7</EndBit>
                </Register>
            </Item>

            <Item>
                <Name>chiptype50u</Name>
                <PreExec Restrict="WriteOnly">
                    <Command>00</Command><!-- select Page 79 -->
                    <Data>4F</Data>
                </PreExec>
                <Register AccessMethod="Normal" Restrict="ReadOnly">
                    <Command>32</Command> <!-- chiptype 50u page 79 -->
                    <Length>2</Length>
                </Register>
            </Item>

        </Constant>

        <Status>

        </Status>

        <Configuration><!-- Read/Write options -->

            <Item>
                <Name>reg_pwd</Name>
                <PreExec Restrict="WriteOnly">
                    <Command>00</Command><!-- select Page 63 -->
                    <Data>3F</Data>
                </PreExec>
                <Register Type="List">
                    <Command>27</Command>
                    <Length>2</Length>
                    <Data Desc="clr">0000</Data>
                    <Data Desc="set">B37C</Data>
                </Register>
            </Item>
            <Item>
                <Name>ICC_MAX</Name>
                <PreExec Restrict="WriteOnly">
                    <Command>00</Command><!-- select Page 32 -->
                    <Data>20</Data>
                </PreExec>
                <Register Type="List">
                    <Command>73</Command>
                    <Length>2</Length>
                    <Data Desc="199A">C7</Data>
                    <Data Desc="205A">CD</Data>
                    <Data Desc="228A">E4</Data>
                    <Data Desc="240A">F0</Data>
                    <Data Desc="255A">FF</Data>
                </Register>
            </Item>
            <Item>
                <Name>nvm_pwd</Name>
                <PreExec Restrict="WriteOnly">
                    <Command>00</Command><!-- select Page 63 -->
                    <Data>3F</Data>
                </PreExec>
                <Register Type="List">
                    <Command>29</Command>
                    <Length>2</Length>
                    <Data Desc="clr">0000</Data>
                    <Data Desc="set">EFD7</Data>
                </Register>
            </Item>

        
            <Item>
                <Name>cfg_send_byte</Name>
                <PreExec Restrict="WriteOnly">
                    <Command>0</Command><!-- select Page 63 -->
                    <Data>3F</Data>
                </PreExec>
                <Register Type="List" Restrict="WriteOnly">
                    <Command>34</Command>
                    <Length>0</Length><!-- no data byte,only cmd -->
                    <Data Desc="none">0</Data>
                    <Data Desc="send">1</Data><!-- select this, or Elmor does not exec.this item -->
                </Register>
            </Item>

         
        </Configuration>

        <Monitoring>

        </Monitoring>
    </Device>
 
</EVC2>
 
Last edited:

RolloZ170

Well-Known Member
Apr 24, 2016
2,585
648
113
55
S26000BPB uses other address. you can find it with Terminal search devices function.
supply only +5VSB without CPUs and you can access the VRMs of this board.
first PXE1610C 7/8 30h/60h
second PXE1610C 7/8 38h/70h
S2600BPB VRM addr sth.jpg
i made a c# code for automatic programming. download here
(if you have concerns using my exe on your system: use iLSpy to see/get the c# sourcecode of them, and recomplie your own)

Where is 3 pin i2c connector on S2600BPB motherboard located?

SMBus VR.jpg
edit: the 3pin header is labeled "SMB VR"
just solder two cables on SCL/SDA and take any Ground Pin from USB i.e. or LAN shield metal.
if you want to install a 3Pin header don't waste your time with the ground pin, the heat is sinked by the huge copper plane, take a 0,8mm drill and remove the solder that way.
 
Last edited:
  • Like
Reactions: Aleksei P

fkyuu

New Member
Jan 24, 2023
2
0
3
Neat, is there a list of processors and their associated TDCs? I'd love to see what processors I can and cannot run on my X11SPM, and what I could use after this mod.
 

RolloZ170

Well-Known Member
Apr 24, 2016
2,585
648
113
55
Neat, is there a list of processors and their associated TDCs? I'd love to see what processors I can and cannot run on my X11SPM, and what I could use after this mod.
std. is 228A for SKU up to 205W TDP, SKUs with TDP 140W and lower have lower TDC.
W-3175X and OEM high current have TDC=255A
X11SPM & modded BIOS: with the modd to ICC_MAX=255A you can run ALL but don't expect full continious performance with the 5 VRM stages.
( latest BIOS blocks TDP higher than 165W on X11SPL & X11SPM in ProjectPeiDriver )
 
Last edited:
  • Like
Reactions: Stephan

RolloZ170

Well-Known Member
Apr 24, 2016
2,585
648
113
55
Guide in the Guide:
modify X11SPL-F & X11SPM-(T)(P)F BIOS 3.8a to support 255Watts
download the BIOS 3.8a from supermicro.
download HxD or use your favorite Hex Editor amd open the BIOS file.

( A5 hex = 165 dec. / FF hex = 255 dec. )

search for "6C 68 A5 00 00 00 68"
replace with "6C 68 FF 00 00 00 68"

search for "FB B9 A5 00 00 00 5E"
replace with "FB B9 FF 00 00 00 5E"

( this is only correction of ProjectPeiDriver.ffs checksum )
search for "26 22 9C 73 64 32 54 44 99 1C 8D C4 4A 73 D6 AF C3 EE"
replace with "26 22 9C 73 64 32 54 44 99 1C 8D C4 4A 73 D6 AF C3 3A"

save as "BIOS_X11SPL-096E_20221028_3.8a_255W.bin" respective
save as "BIOS_X11SPM-095D_20221028_3.8a_255W.bin" (just for example)
its works now, here is a proof
Unbenannt0200sth.jpg
 
Last edited: