@@ -56,14 +56,18 @@ task_slot!(SPI_FRONT, spi_front);
56
56
task_slot ! ( AUXFLASH , auxflash) ;
57
57
58
58
const SP_TO_SP5_NMI_SYNC_FLOOD_L : sys_api:: PinSet = sys_api:: Port :: J . pin ( 2 ) ;
59
+ const SP_TO_IGN_TRGT_FPGA_FAULT_L : sys_api:: PinSet = sys_api:: Port :: B . pin ( 7 ) ;
60
+ const SP_CHASSIS_STATUS_LED : sys_api:: PinSet = sys_api:: Port :: C . pin ( 6 ) ;
59
61
60
62
#[ export_name = "main" ]
61
63
fn main ( ) -> ! {
62
64
// XXX set up fault pin
63
65
match init ( ) {
64
66
// Set up everything nicely, time to start serving incoming messages.
65
67
Ok ( mut server) => {
68
+ // Mark that we've reached A2, and turn on the chassis LED
66
69
server. set_state_impl ( PowerState :: A2 ) ;
70
+ server. sys . gpio_set ( SP_CHASSIS_STATUS_LED ) ;
67
71
68
72
let mut buffer = [ 0 ; idl:: INCOMING_SIZE ] ;
69
73
loop {
@@ -93,9 +97,27 @@ fn main() -> ! {
93
97
}
94
98
95
99
fn init ( ) -> Result < ServerImpl , SeqError > {
96
- // XXX initialize fault pin
97
-
98
100
let sys = sys_api:: Sys :: from ( SYS . get_task_id ( ) ) ;
101
+
102
+ // Pull the fault line low while we're loading
103
+ sys. gpio_configure_output (
104
+ SP_TO_IGN_TRGT_FPGA_FAULT_L ,
105
+ sys_api:: OutputType :: OpenDrain ,
106
+ sys_api:: Speed :: Low ,
107
+ sys_api:: Pull :: None ,
108
+ ) ;
109
+ sys. gpio_reset ( SP_TO_IGN_TRGT_FPGA_FAULT_L ) ;
110
+
111
+ // Turn off the chassis LED, in case this is a task restart (and not a
112
+ // full chip restart, which would leave the GPIO unconfigured).
113
+ sys. gpio_configure_output (
114
+ SP_CHASSIS_STATUS_LED ,
115
+ sys_api:: OutputType :: PushPull ,
116
+ sys_api:: Speed :: Low ,
117
+ sys_api:: Pull :: None ,
118
+ ) ;
119
+ sys. gpio_reset ( SP_CHASSIS_STATUS_LED ) ;
120
+
99
121
let spi_front = drv_spi_api:: Spi :: from ( SPI_FRONT . get_task_id ( ) ) ;
100
122
let aux = drv_auxflash_api:: AuxFlash :: from ( AUXFLASH . get_task_id ( ) ) ;
101
123
@@ -113,7 +135,7 @@ fn init() -> Result<ServerImpl, SeqError> {
113
135
let loader = Spartan7Loader :: from ( LOADER . get_task_id ( ) ) ;
114
136
loader. ping ( ) ;
115
137
116
- // Bring up the fault / NMI pin
138
+ // Bring up the SP5 NMI pin
117
139
sys. gpio_set ( SP_TO_SP5_NMI_SYNC_FLOOD_L ) ;
118
140
sys. gpio_configure_output (
119
141
SP_TO_SP5_NMI_SYNC_FLOOD_L ,
@@ -122,7 +144,9 @@ fn init() -> Result<ServerImpl, SeqError> {
122
144
sys_api:: Pull :: None ,
123
145
) ;
124
146
125
- // XXX fix fault pin
147
+ // Clear the fault pin
148
+ sys. gpio_set ( SP_TO_IGN_TRGT_FPGA_FAULT_L ) ;
149
+
126
150
Ok ( ServerImpl {
127
151
jefe : Jefe :: from ( JEFE . get_task_id ( ) ) ,
128
152
sys,
0 commit comments