artiq_coreboot: block until hotswap image is actually received.

This commit is contained in:
whitequark 2017-03-07 06:44:21 +00:00
parent 804e69b144
commit 795a3e24d8
3 changed files with 16 additions and 2 deletions

View File

@ -60,6 +60,8 @@ class _D2HMsgType(Enum):
WATCHDOG_EXPIRED = 14
CLOCK_FAILURE = 15
HOTSWAP_IMMINENT = 16
class _LogLevel(Enum):
OFF = 0
@ -332,6 +334,8 @@ class CommKernel:
self._write_header(_H2DMsgType.HOTSWAP)
self._write_bytes(image)
self._read_empty(_D2HMsgType.HOTSWAP_IMMINENT)
def load(self, kernel_library):
self._write_header(_H2DMsgType.LOAD_KERNEL)
self._write_bytes(kernel_library)

View File

@ -140,6 +140,8 @@ pub enum Reply<'a> {
WatchdogExpired,
ClockFailure,
HotswapImminent,
}
impl<'a> Reply<'a> {
@ -219,6 +221,9 @@ impl<'a> Reply<'a> {
Reply::ClockFailure => {
writer.write_u8(15)?;
},
Reply::HotswapImminent => {
writer.write_u8(16)?;
}
}
Ok(())
}

View File

@ -116,6 +116,7 @@ fn host_read(stream: &mut TcpStream) -> io::Result<host::Request> {
let request = host::Request::read_from(stream)?;
match &request {
&host::Request::LoadKernel(_) => debug!("comm<-host LoadLibrary(...)"),
&host::Request::Hotswap(_) => debug!("comm<-host Hotswap(...)"),
_ => debug!("comm<-host {:?}", request)
}
Ok(request)
@ -269,8 +270,12 @@ fn process_host_message(io: &Io,
}
// artiq_coreboot
host::Request::Hotswap(binary) =>
unsafe { board::hotswap::run(&binary) },
host::Request::Hotswap(binary) => {
host_write(stream, host::Reply::HotswapImminent)?;
stream.close()?;
warn!("hotswapping firmware");
unsafe { board::hotswap::run(&binary) }
}
// artiq_run/artiq_master
host::Request::SwitchClock(clk) => {