From b609366c6fd2ccb22b3184d594095c4bac52bdee Mon Sep 17 00:00:00 2001 From: Sebastien Bourdeauducq Date: Thu, 31 Aug 2017 13:42:32 +0800 Subject: [PATCH] runtime: fix Rust types in RTIO Previous code assumed all RTIO registers were u32, but this was changed by misoc c5edcd08. --- artiq/firmware/ksupport/rtio.rs | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/artiq/firmware/ksupport/rtio.rs b/artiq/firmware/ksupport/rtio.rs index ddbd38afc..ebc86b9f5 100644 --- a/artiq/firmware/ksupport/rtio.rs +++ b/artiq/firmware/ksupport/rtio.rs @@ -4,12 +4,12 @@ use board::csr; use ::send; use kernel_proto::*; -pub const RTIO_O_STATUS_WAIT: u32 = 1; -pub const RTIO_O_STATUS_UNDERFLOW: u32 = 2; -pub const RTIO_O_STATUS_SEQUENCE_ERROR: u32 = 4; -pub const RTIO_I_STATUS_WAIT_EVENT: u32 = 1; -pub const RTIO_I_STATUS_OVERFLOW: u32 = 2; -pub const RTIO_I_STATUS_WAIT_STATUS: u32 = 4; +pub const RTIO_O_STATUS_WAIT: u8 = 1; +pub const RTIO_O_STATUS_UNDERFLOW: u8 = 2; +pub const RTIO_O_STATUS_SEQUENCE_ERROR: u8 = 4; +pub const RTIO_I_STATUS_WAIT_EVENT: u8 = 1; +pub const RTIO_I_STATUS_OVERFLOW: u8 = 2; +pub const RTIO_I_STATUS_WAIT_STATUS: u8 = 4; pub extern fn init() { send(&RtioInitRequest); @@ -36,7 +36,7 @@ pub unsafe fn rtio_i_data_read(offset: usize) -> u32 { } #[inline(never)] -unsafe fn process_exceptional_status(timestamp: i64, channel: i32, status: u32) { +unsafe fn process_exceptional_status(timestamp: i64, channel: i32, status: u8) { if status & RTIO_O_STATUS_WAIT != 0 { while csr::rtio::o_status_read() & RTIO_O_STATUS_WAIT != 0 {} } @@ -54,11 +54,11 @@ unsafe fn process_exceptional_status(timestamp: i64, channel: i32, status: u32) pub extern fn output(timestamp: i64, channel: i32, addr: i32, data: i32) { unsafe { - csr::rtio::chan_sel_write(channel as u32); + csr::rtio::chan_sel_write(channel as _); // writing timestamp clears o_data csr::rtio::timestamp_write(timestamp as u64); - csr::rtio::o_address_write(addr as u32); - rtio_o_data_write(0, data as u32); + csr::rtio::o_address_write(addr as _); + rtio_o_data_write(0, data as _); csr::rtio::o_we_write(1); let status = csr::rtio::o_status_read(); if status != 0 { @@ -69,12 +69,12 @@ pub extern fn output(timestamp: i64, channel: i32, addr: i32, data: i32) { pub extern fn output_wide(timestamp: i64, channel: i32, addr: i32, data: CSlice) { unsafe { - csr::rtio::chan_sel_write(channel as u32); + csr::rtio::chan_sel_write(channel as _); // writing timestamp clears o_data csr::rtio::timestamp_write(timestamp as u64); - csr::rtio::o_address_write(addr as u32); + csr::rtio::o_address_write(addr as _); for i in 0..data.len() { - rtio_o_data_write(i, data[i] as u32) + rtio_o_data_write(i, data[i] as _) } csr::rtio::o_we_write(1); let status = csr::rtio::o_status_read(); @@ -86,7 +86,7 @@ pub extern fn output_wide(timestamp: i64, channel: i32, addr: i32, data: CSlice< pub extern fn input_timestamp(timeout: i64, channel: i32) -> u64 { unsafe { - csr::rtio::chan_sel_write(channel as u32); + csr::rtio::chan_sel_write(channel as _); csr::rtio::timestamp_write(timeout as u64); csr::rtio::i_request_write(1); @@ -110,7 +110,7 @@ pub extern fn input_timestamp(timeout: i64, channel: i32) -> u64 { pub extern fn input_data(channel: i32) -> i32 { unsafe { - csr::rtio::chan_sel_write(channel as u32); + csr::rtio::chan_sel_write(channel as _); csr::rtio::timestamp_write(0xffffffff_ffffffff); csr::rtio::i_request_write(1);