Closes#198#200
Making it a soft panic makes it more involved with a bit of code duplication - setting up mgmt requires setting up the interface and sockets. Maybe can be done a bit cleaner.
```
[spaqin@hera:~/m-labs/artiq-zynq]$ artiq_sinara_tester
****** Sinara system tester ******
[...]
ConnectionRefusedError: [Errno 111] Connection refused
[spaqin@hera:~/m-labs/artiq-zynq]$ artiq_coremgmt -D 192.168.1.56 log
[ 0.000067s] INFO(runtime): NAR3/Zynq7000 starting...
[ 0.005238s] INFO(runtime): detected gateware: GenericMaster
[ 0.016152s] INFO(libboard_zynq::i2c): PCA9548 detected
[ 0.023004s] WARN(runtime): config initialization failed: SD error: Card initialization error: No card inserted, check if the card is inserted properly.
[ 0.036730s] WARN(runtime::rtio_clocking): error reading configuration. Falling back to default.
[ 0.213000s] ERROR(runtime::rtio_clocking): RTIO PLL failed to lock
[ 0.224443s] INFO(libboard_zynq::i2c): PCA9548 detected
[ 0.256197s] INFO(runtime::comms): network addresses: MAC=e8-eb-1b-13-49-8b IPv4=192.168.1.56 IPv6-LL=fe80::eaeb:1bff:fe13:498b IPv6: no configured address
[ 0.270183s] ERROR(runtime::comms): There has been an error configuring the device: RTIO PLL failed to lock. Only mgmt interface will be available.
[ 4.000095s] INFO(libboard_zynq::eth): eth: got Link { speed: S1000, duplex: Full }
[ 33.148521s] INFO(runtime::mgmt): received connection
```
Reviewed-on: #199
Co-authored-by: mwojcik <mw@m-labs.hk>
Co-committed-by: mwojcik <mw@m-labs.hk>
The backtrace is now nested, and should be used together with the stack
pointer array to construct the full backtrace for each exception.
We now allocate exception objects in a stack, but their names are still
not allocated. This is fine for exceptions raised in the driver or artiq
code, but we will have to implement allocation for names of exceptions
raised in RPC calls. The compiler should also emit code to store the
exception names once they catch it, to prepare for later reraising.
Port of 4a6bea479a
Co-authored-by: Steve Fan <sf@m-labs.hk>
Reviewed-on: #156
Co-authored-by: stevefan1999 <sf@m-labs.hk>
Co-committed-by: stevefan1999 <sf@m-labs.hk>
The previous method of taking the channel could cause deadlock, we now
use semaphore to signal if the channel is available instead of busy
polling the mutex.
* Changed the KERNEL_CHANNEL_* to Mutex<T> with proper type, remove the
need for unsafe.
* Exposed a const pointer to KernelImage, with UnsafeCell holding
the library field for unbind with interior mutability.
* Cache flush should be done before playback instead when getting the
handler.
* `csr::rtio_dma::enable_read()` would loop forever, probably bug in the
gateware.