From 16ef5424b780b116a7473f5fd3e511ec574f0181 Mon Sep 17 00:00:00 2001 From: Raptor Engineering Development Team Date: Tue, 30 Apr 2019 07:08:55 +0000 Subject: Add optional workaround for buggy SuperMicro PSUs This allows Talos II mainboards to start in 1620W SuperMicro chassis options --- main.v | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/main.v b/main.v index 699452a..5e3ddbb 100644 --- a/main.v +++ b/main.v @@ -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); -- cgit v1.2.1