summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaptor Engineering Development Team <support@raptorengineering.com>2019-04-30 07:08:55 +0000
committerRaptor Engineering Development Team <support@raptorengineering.com>2019-04-30 07:27:06 +0000
commit16ef5424b780b116a7473f5fd3e511ec574f0181 (patch)
tree51d0a6e35d3b4e4206ab4c1e53881538c0899372
parentdf7e808365f0cbb8175f7f634dc9bc7a3e3a7443 (diff)
downloadtalos-system-fpga-16ef5424b780b116a7473f5fd3e511ec574f0181.zip
talos-system-fpga-16ef5424b780b116a7473f5fd3e511ec574f0181.tar.gz
Add optional workaround for buggy SuperMicro PSUs
This allows Talos II mainboards to start in 1620W SuperMicro chassis options
-rw-r--r--main.v36
1 files changed, 35 insertions, 1 deletions
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);
OpenPOWER on IntegriCloud