diff options
author | Raptor Engineering Development Team <support@raptorengineering.com> | 2019-04-30 07:08:55 +0000 |
---|---|---|
committer | Raptor Engineering Development Team <support@raptorengineering.com> | 2019-04-30 07:27:06 +0000 |
commit | 16ef5424b780b116a7473f5fd3e511ec574f0181 (patch) | |
tree | 51d0a6e35d3b4e4206ab4c1e53881538c0899372 | |
parent | df7e808365f0cbb8175f7f634dc9bc7a3e3a7443 (diff) | |
download | talos-system-fpga-16ef5424b780b116a7473f5fd3e511ec574f0181.tar.gz talos-system-fpga-16ef5424b780b116a7473f5fd3e511ec574f0181.zip |
Add optional workaround for buggy SuperMicro PSUs
This allows Talos II mainboards to start in 1620W SuperMicro chassis options
-rw-r--r-- | main.v | 36 |
1 files changed, 35 insertions, 1 deletions
@@ -114,6 +114,9 @@ module system_fpga_top // Use open-drain reset signal reg cpu_stby_rst_assert = 1'b1; + // Tie SuperMicro startup sequence mode to unused mode jumper + reg use_supermicro_startup_sequence = ~mode_set_n; + SB_IO #( .PIN_TYPE(6'b101001), .PULLUP(1'b0) @@ -839,10 +842,41 @@ module system_fpga_top wait_err_detail = en_buf ^ pg_buf; end end + + // Generate SuperMicro-specific startup sequence + // It appears SuperMicro tuned their 1620W PSUs to operate with the Intel ME-generated + // on-off-on PWREN sequence commonly found on Xeon server boards. The PSUs appear to + // rely on the initial "burst" of PWREN to come out of deep slumber; if this burst is not + // provided they try to start but are unable to, and lock out immediately. + reg [15:0] supermicro_start_counter; + reg supermicro_start_atx_en; + always @(posedge timer_clk_3) begin + if (en_buf[0]) begin + if (supermicro_start_counter < 10) begin + // Initial burst + supermicro_start_atx_en <= 0; + supermicro_start_counter <= supermicro_start_counter + 1; + end else if (supermicro_start_counter < 20) begin + // Recovery period + supermicro_start_atx_en <= 1; + supermicro_start_counter <= supermicro_start_counter + 1; + end else begin + // Final enable + supermicro_start_atx_en <= 0; + end + end else begin + supermicro_start_counter <= 0; + supermicro_start_atx_en <= 1; + end + end // Assign Ports to Enables always @(posedge clk_in) begin - atx_en = ~en_buf[0]; + if (use_supermicro_startup_sequence) begin + atx_en = supermicro_start_atx_en; + end else begin + atx_en = ~en_buf[0]; + end miscio_en = en_buf[1]; vdna_en = en_buf[2]; vdnb_en = en_buf[3] & (~cpub_present_n | mfr_force_enable); |