Compare commits
12 Commits
master
...
bump_to_ll
Author | SHA1 | Date | |
---|---|---|---|
2d2ccee10d | |||
54af1c5fd3 | |||
a49098b831 | |||
d622ae26b2 | |||
b357121749 | |||
56cf0b9d33 | |||
b057f01883 | |||
9a8dac9d09 | |||
3f6b41f683 | |||
85768d70d8 | |||
3015ad518d | |||
57524cccf4 |
49
flake.lock
generated
49
flake.lock
generated
@ -11,11 +11,11 @@
|
|||||||
"src-pythonparser": "src-pythonparser"
|
"src-pythonparser": "src-pythonparser"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1736946744,
|
"lastModified": 1734418848,
|
||||||
"narHash": "sha256-RKqrWcJfkLlm5JYVfz46KOVg1FYch1pNkKDpW5VzehU=",
|
"narHash": "sha256-FiK84edtdmpJ3FUA58XAUmDDp4oVPgupmf1CcgJ6rC0=",
|
||||||
"ref": "refs/heads/master",
|
"ref": "refs/heads/master",
|
||||||
"rev": "33c91d73bb768a06fa427c237b124916261c5ab9",
|
"rev": "366bb0fc59dbe4d5f544908b0f3e31f8eb19f7c1",
|
||||||
"revCount": 9135,
|
"revCount": 9121,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/m-labs/artiq.git"
|
"url": "https://github.com/m-labs/artiq.git"
|
||||||
},
|
},
|
||||||
@ -37,11 +37,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1734270714,
|
"lastModified": 1720768567,
|
||||||
"narHash": "sha256-7bzGn/hXLIsLQHGQsvo+uoIFUrw9DjXSlMC449BY4ME=",
|
"narHash": "sha256-3VoK7o5MtHtbHLrc6Pv+eQWFtaz5Gd/YWyV5TD3c5Ss=",
|
||||||
"owner": "m-labs",
|
"owner": "m-labs",
|
||||||
"repo": "artiq-comtools",
|
"repo": "artiq-comtools",
|
||||||
"rev": "7e3152314af8f5987370e33b347b2ec2697567ed",
|
"rev": "f93570d8f2ed5a3cfb3e1c16ab00f2540551e994",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@ -70,11 +70,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1736798957,
|
"lastModified": 1733940404,
|
||||||
"narHash": "sha256-qwpCtZhSsSNQtK4xYGzMiyEDhkNzOCz/Vfu4oL2ETsQ=",
|
"narHash": "sha256-Pj39hSoUA86ZePPF/UXiYHHM7hMIkios8TYG29kQT4g=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "9abb87b552b7f55ac8916b6fc9e5cb486656a2f3",
|
"rev": "5d67ea6b4b63378b9c13be21e2ec9d1afc921713",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@ -158,11 +158,11 @@
|
|||||||
"src-migen": {
|
"src-migen": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1735131698,
|
"lastModified": 1727677091,
|
||||||
"narHash": "sha256-P4vaF+9iVekRAC2/mc9G7IwI6baBpPAxiDQ8uye4sAs=",
|
"narHash": "sha256-Zg3SQnTwMM/VkOGKogbPyuCC2NhLy8HB2SPEUWWNgCU=",
|
||||||
"owner": "m-labs",
|
"owner": "m-labs",
|
||||||
"repo": "migen",
|
"repo": "migen",
|
||||||
"rev": "4c2ae8dfeea37f235b52acb8166f12acaaae4f7c",
|
"rev": "c19ae9f8ae162ffe2d310a92bfce53ac2a821bc8",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@ -174,11 +174,11 @@
|
|||||||
"src-misoc": {
|
"src-misoc": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1736416570,
|
"lastModified": 1729234629,
|
||||||
"narHash": "sha256-tbcN/fzejZIaYbTbwk8Ir1glYevESqMinMeDB3z8oxg=",
|
"narHash": "sha256-TLsTCXV5AC2xh+bS7EhBVBKqdqIU3eKrnlWcFF9LtAM=",
|
||||||
"ref": "refs/heads/master",
|
"ref": "refs/heads/master",
|
||||||
"rev": "1f5318e9edc1085ac77e9b85b8f5e03371dba54c",
|
"rev": "6085a312bca26adeca6584e37d08c8ba2e1d6e38",
|
||||||
"revCount": 2464,
|
"revCount": 2460,
|
||||||
"submodules": true,
|
"submodules": true,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/m-labs/misoc.git"
|
"url": "https://github.com/m-labs/misoc.git"
|
||||||
@ -229,17 +229,18 @@
|
|||||||
"rust-overlay": "rust-overlay_2"
|
"rust-overlay": "rust-overlay_2"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1734668221,
|
"lastModified": 1736152520,
|
||||||
"narHash": "sha256-X0U2yPmlsD3VLBZQyfWv8qw04Qn0qFWIONJUPPigB0U=",
|
"narHash": "sha256-+NfLPQfqDKZJK7D0RyXF3GM5eWj5QRr/bYDfOaIZi88=",
|
||||||
"ref": "refs/heads/master",
|
"ref": "bump_to_llvm14",
|
||||||
"rev": "213529cf7a50aa1b2d9ffdf575e3e38202ff9bd6",
|
"rev": "bae8081935b0b936e1468c0ab74ea6610477ad62",
|
||||||
"revCount": 666,
|
"revCount": 678,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://git.m-labs.hk/m-labs/zynq-rs"
|
"url": "https://git.m-labs.hk/srenblad/zynq-rs/"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
"ref": "bump_to_llvm14",
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://git.m-labs.hk/m-labs/zynq-rs"
|
"url": "https://git.m-labs.hk/srenblad/zynq-rs/"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
14
flake.nix
14
flake.nix
@ -2,7 +2,7 @@
|
|||||||
description = "ARTIQ port to the Zynq-7000 platform";
|
description = "ARTIQ port to the Zynq-7000 platform";
|
||||||
|
|
||||||
inputs.artiq.url = git+https://github.com/m-labs/artiq.git;
|
inputs.artiq.url = git+https://github.com/m-labs/artiq.git;
|
||||||
inputs.zynq-rs.url = git+https://git.m-labs.hk/m-labs/zynq-rs;
|
inputs.zynq-rs.url = git+https://git.m-labs.hk/srenblad/zynq-rs/?ref=bump_to_llvm14;
|
||||||
inputs.zynq-rs.inputs.nixpkgs.follows = "artiq/nixpkgs";
|
inputs.zynq-rs.inputs.nixpkgs.follows = "artiq/nixpkgs";
|
||||||
|
|
||||||
outputs = { self, zynq-rs, artiq }:
|
outputs = { self, zynq-rs, artiq }:
|
||||||
@ -135,13 +135,13 @@
|
|||||||
pkgs.gnumake
|
pkgs.gnumake
|
||||||
(pkgs.python3.withPackages(ps: [ ps.jsonschema artiqpkgs.migen migen-axi artiqpkgs.misoc artiqpkgs.artiq ]))
|
(pkgs.python3.withPackages(ps: [ ps.jsonschema artiqpkgs.migen migen-axi artiqpkgs.misoc artiqpkgs.artiq ]))
|
||||||
zynqpkgs.cargo-xbuild
|
zynqpkgs.cargo-xbuild
|
||||||
pkgs.llvmPackages_13.llvm
|
pkgs.llvmPackages_14.llvm
|
||||||
pkgs.llvmPackages_13.clang-unwrapped
|
pkgs.llvmPackages_14.clang-unwrapped
|
||||||
];
|
];
|
||||||
buildPhase = ''
|
buildPhase = ''
|
||||||
export ZYNQ_REV=${zynqRev}
|
export ZYNQ_REV=${zynqRev}
|
||||||
export XARGO_RUST_SRC="${rust}/lib/rustlib/src/rust/library"
|
export XARGO_RUST_SRC="${rust}/lib/rustlib/src/rust/library"
|
||||||
export CLANG_EXTRA_INCLUDE_DIR="${pkgs.llvmPackages_13.clang-unwrapped.lib}/lib/clang/13.0.1/include"
|
export CLANG_EXTRA_INCLUDE_DIR="${pkgs.llvmPackages_14.clang-unwrapped.lib}/lib/clang/14.0.6/include"
|
||||||
export CARGO_HOME=$(mktemp -d cargo-home.XXX)
|
export CARGO_HOME=$(mktemp -d cargo-home.XXX)
|
||||||
export ZYNQ_RS=${zynq-rs}
|
export ZYNQ_RS=${zynq-rs}
|
||||||
make TARGET=${target} GWARGS="${if json == null then "-V ${variant}" else json}" ${fwtype}
|
make TARGET=${target} GWARGS="${if json == null then "-V ${variant}" else json}" ${fwtype}
|
||||||
@ -376,8 +376,8 @@
|
|||||||
name = "artiq-zynq-dev-shell";
|
name = "artiq-zynq-dev-shell";
|
||||||
buildInputs = with pkgs; [
|
buildInputs = with pkgs; [
|
||||||
rust
|
rust
|
||||||
llvmPackages_13.llvm
|
llvmPackages_14.llvm
|
||||||
llvmPackages_13.clang-unwrapped
|
llvmPackages_14.clang-unwrapped
|
||||||
gnumake
|
gnumake
|
||||||
cacert
|
cacert
|
||||||
zynqpkgs.cargo-xbuild
|
zynqpkgs.cargo-xbuild
|
||||||
@ -392,7 +392,7 @@
|
|||||||
];
|
];
|
||||||
ZYNQ_REV="${zynqRev}";
|
ZYNQ_REV="${zynqRev}";
|
||||||
XARGO_RUST_SRC = "${rust}/lib/rustlib/src/rust/library";
|
XARGO_RUST_SRC = "${rust}/lib/rustlib/src/rust/library";
|
||||||
CLANG_EXTRA_INCLUDE_DIR = "${pkgs.llvmPackages_13.clang-unwrapped.lib}/lib/clang/13.0.1/include";
|
CLANG_EXTRA_INCLUDE_DIR = "${pkgs.llvmPackages_14.clang-unwrapped.lib}/lib/clang/14.0.6/include";
|
||||||
ZYNQ_RS = "${zynq-rs}";
|
ZYNQ_RS = "${zynq-rs}";
|
||||||
OPENOCD_ZYNQ = "${zynq-rs}/openocd";
|
OPENOCD_ZYNQ = "${zynq-rs}/openocd";
|
||||||
SZL = "${zynqpkgs.szl}";
|
SZL = "${zynqpkgs.szl}";
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
[target.armv7-none-eabihf]
|
[target.armv7-none-eabihf]
|
||||||
rustflags = [
|
rustflags = [
|
||||||
"-C", "link-arg=-Tlink.x",
|
"-C", "link-arg=-Tlink.x",
|
||||||
"-C", "target-feature=a9,armv7-a,neon",
|
"-C", "target-feature=+a9,+armv7-a,+neon",
|
||||||
"-C", "target-cpu=cortex-a9",
|
"-C", "target-cpu=cortex-a9",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
4
src/Cargo.lock
generated
4
src/Cargo.lock
generated
@ -82,9 +82,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "compiler_builtins"
|
name = "compiler_builtins"
|
||||||
version = "0.1.49"
|
version = "0.1.70"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "20b1438ef42c655665a8ab2c1c6d605a305f031d38d9be689ddfef41a20f3aa2"
|
checksum = "80873f979f0a344a4ade87c2f70d9ccf5720b83b10c97ec7cd745895d021e85a"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "core_io"
|
name = "core_io"
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
use core::slice;
|
use core::slice;
|
||||||
|
use core::arch::asm;
|
||||||
|
|
||||||
use core_io::{Error as IoError, ErrorKind as IoErrorKind};
|
use core_io::{Error as IoError, ErrorKind as IoErrorKind};
|
||||||
use crc;
|
use crc;
|
||||||
@ -39,6 +40,7 @@ pub fn copy_work_buffer(src: *mut u32, dst: *mut u32, len: isize) {
|
|||||||
// fix for artiq-zynq#344
|
// fix for artiq-zynq#344
|
||||||
unsafe {
|
unsafe {
|
||||||
for i in 0..(len / 4) {
|
for i in 0..(len / 4) {
|
||||||
|
asm!("", options(preserves_flags, nostack, readonly));
|
||||||
*dst.offset(i) = *src.offset(i);
|
*dst.offset(i) = *src.offset(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
use libboard_zynq::{println, stdio};
|
use libboard_zynq::{println, stdio};
|
||||||
use libcortex_a9::{interrupt_handler, regs::MPIDR};
|
use libcortex_a9::{interrupt_handler, regs::MPIDR};
|
||||||
use libregister::RegisterR;
|
use libregister::RegisterR;
|
||||||
|
use core::arch::asm;
|
||||||
|
|
||||||
#[cfg(has_si549)]
|
#[cfg(has_si549)]
|
||||||
use crate::si549;
|
use crate::si549;
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
#![no_std]
|
#![no_std]
|
||||||
#![feature(never_type)]
|
#![feature(never_type)]
|
||||||
#![feature(naked_functions)]
|
#![feature(naked_functions)]
|
||||||
#![feature(asm)]
|
|
||||||
|
|
||||||
extern crate core_io;
|
extern crate core_io;
|
||||||
extern crate crc;
|
extern crate crc;
|
||||||
|
@ -62,12 +62,8 @@ impl Write for Cursor<&mut [u8]> {
|
|||||||
fn write(&mut self, buf: &[u8]) -> Result<usize, IoError> {
|
fn write(&mut self, buf: &[u8]) -> Result<usize, IoError> {
|
||||||
let data = &mut self.inner[self.pos..];
|
let data = &mut self.inner[self.pos..];
|
||||||
let len = buf.len().min(data.len());
|
let len = buf.len().min(data.len());
|
||||||
for i in 0..len {
|
// as long as 'copy_work_buffer' is used in drtioaux, memcpy here is allowed
|
||||||
unsafe {
|
data[..len].copy_from_slice(&buf[..len]);
|
||||||
asm!("", options(preserves_flags, nostack, readonly));
|
|
||||||
}
|
|
||||||
data[i] = buf[i];
|
|
||||||
}
|
|
||||||
self.pos += len;
|
self.pos += len;
|
||||||
Ok(len)
|
Ok(len)
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
#![no_std]
|
#![no_std]
|
||||||
#![feature(never_type)]
|
#![feature(never_type)]
|
||||||
#![feature(asm)]
|
|
||||||
|
|
||||||
#[cfg(feature = "alloc")]
|
#[cfg(feature = "alloc")]
|
||||||
extern crate alloc;
|
extern crate alloc;
|
||||||
|
@ -3,6 +3,7 @@ use core::sync::atomic::{AtomicBool, Ordering};
|
|||||||
use libboard_zynq::{gic, mpcore, println, stdio};
|
use libboard_zynq::{gic, mpcore, println, stdio};
|
||||||
use libcortex_a9::{asm, interrupt_handler, notify_spin_lock, regs::MPIDR, spin_lock_yield};
|
use libcortex_a9::{asm, interrupt_handler, notify_spin_lock, regs::MPIDR, spin_lock_yield};
|
||||||
use libregister::RegisterR;
|
use libregister::RegisterR;
|
||||||
|
use core::arch::asm;
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
static mut __stack1_start: u32;
|
static mut __stack1_start: u32;
|
||||||
|
@ -8,7 +8,7 @@ use dyld::{self, elf::EXIDX_Entry, Library};
|
|||||||
use libboard_zynq::{gic, mpcore};
|
use libboard_zynq::{gic, mpcore};
|
||||||
use libcortex_a9::{asm::{dsb, isb},
|
use libcortex_a9::{asm::{dsb, isb},
|
||||||
cache::{bpiall, dcci_slice, iciallu},
|
cache::{bpiall, dcci_slice, iciallu},
|
||||||
enable_fpu, sync_channel};
|
sync_channel};
|
||||||
use libsupport_zynq::ram;
|
use libsupport_zynq::ram;
|
||||||
use log::{debug, error, info};
|
use log::{debug, error, info};
|
||||||
|
|
||||||
@ -126,7 +126,6 @@ impl KernelImage {
|
|||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "C" fn main_core1() {
|
pub extern "C" fn main_core1() {
|
||||||
enable_fpu();
|
|
||||||
debug!("Core1 started");
|
debug!("Core1 started");
|
||||||
|
|
||||||
ram::init_alloc_core1();
|
ram::init_alloc_core1();
|
||||||
|
@ -1,10 +1,8 @@
|
|||||||
#![no_std]
|
#![no_std]
|
||||||
#![allow(incomplete_features)]
|
|
||||||
#![feature(c_variadic)]
|
#![feature(c_variadic)]
|
||||||
#![feature(const_btree_new)]
|
#![feature(const_btree_new)]
|
||||||
#![feature(inline_const)]
|
#![feature(inline_const)]
|
||||||
#![feature(naked_functions)]
|
#![feature(naked_functions)]
|
||||||
#![feature(asm)]
|
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate alloc;
|
extern crate alloc;
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#![feature(alloc_error_handler)]
|
#![feature(alloc_error_handler)]
|
||||||
#![feature(const_btree_new)]
|
#![feature(const_btree_new)]
|
||||||
#![feature(panic_info_message)]
|
#![feature(panic_info_message)]
|
||||||
|
#![feature(lang_items)]
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate alloc;
|
extern crate alloc;
|
||||||
@ -43,6 +44,11 @@ extern "C" {
|
|||||||
static __exceptions_start: u32;
|
static __exceptions_start: u32;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// linker may complain about missing rust_eh_personality but it is unused
|
||||||
|
#[lang = "eh_personality"]
|
||||||
|
#[allow(unused)]
|
||||||
|
pub fn dummy_personality() { }
|
||||||
|
|
||||||
#[cfg(all(feature = "target_kasli_soc", has_virtual_leds))]
|
#[cfg(all(feature = "target_kasli_soc", has_virtual_leds))]
|
||||||
async fn io_expanders_service(
|
async fn io_expanders_service(
|
||||||
i2c_bus: RefCell<&mut libboard_zynq::i2c::I2c>,
|
i2c_bus: RefCell<&mut libboard_zynq::i2c::I2c>,
|
||||||
|
@ -411,32 +411,29 @@ pub mod drtio {
|
|||||||
}
|
}
|
||||||
Ok(Packet::DestinationOkReply) => (),
|
Ok(Packet::DestinationOkReply) => (),
|
||||||
Ok(Packet::DestinationSequenceErrorReply { channel }) => {
|
Ok(Packet::DestinationSequenceErrorReply { channel }) => {
|
||||||
let global_ch = ((destination as u32) << 16) | channel as u32;
|
|
||||||
error!(
|
error!(
|
||||||
"[DEST#{}] RTIO sequence error involving channel 0x{:04x}:{}",
|
"[DEST#{}] RTIO sequence error involving channel 0x{:04x}:{}",
|
||||||
destination,
|
destination,
|
||||||
channel,
|
channel,
|
||||||
resolve_channel_name(global_ch)
|
resolve_channel_name(channel as u32)
|
||||||
);
|
);
|
||||||
unsafe { SEEN_ASYNC_ERRORS |= ASYNC_ERROR_SEQUENCE_ERROR };
|
unsafe { SEEN_ASYNC_ERRORS |= ASYNC_ERROR_SEQUENCE_ERROR };
|
||||||
}
|
}
|
||||||
Ok(Packet::DestinationCollisionReply { channel }) => {
|
Ok(Packet::DestinationCollisionReply { channel }) => {
|
||||||
let global_ch = ((destination as u32) << 16) | channel as u32;
|
|
||||||
error!(
|
error!(
|
||||||
"[DEST#{}] RTIO collision involving channel 0x{:04x}:{}",
|
"[DEST#{}] RTIO collision involving channel 0x{:04x}:{}",
|
||||||
destination,
|
destination,
|
||||||
channel,
|
channel,
|
||||||
resolve_channel_name(global_ch)
|
resolve_channel_name(channel as u32)
|
||||||
);
|
);
|
||||||
unsafe { SEEN_ASYNC_ERRORS |= ASYNC_ERROR_COLLISION };
|
unsafe { SEEN_ASYNC_ERRORS |= ASYNC_ERROR_COLLISION };
|
||||||
}
|
}
|
||||||
Ok(Packet::DestinationBusyReply { channel }) => {
|
Ok(Packet::DestinationBusyReply { channel }) => {
|
||||||
let global_ch = ((destination as u32) << 16) | channel as u32;
|
|
||||||
error!(
|
error!(
|
||||||
"[DEST#{}] RTIO busy error involving channel 0x{:04x}:{}",
|
"[DEST#{}] RTIO busy error involving channel 0x{:04x}:{}",
|
||||||
destination,
|
destination,
|
||||||
channel,
|
channel,
|
||||||
resolve_channel_name(global_ch)
|
resolve_channel_name(channel as u32)
|
||||||
);
|
);
|
||||||
unsafe { SEEN_ASYNC_ERRORS |= ASYNC_ERROR_BUSY };
|
unsafe { SEEN_ASYNC_ERRORS |= ASYNC_ERROR_BUSY };
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#![no_std]
|
#![no_std]
|
||||||
#![no_main]
|
#![no_main]
|
||||||
#![feature(alloc_error_handler, never_type, panic_info_message)]
|
#![feature(alloc_error_handler, never_type, panic_info_message, lang_items)]
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate log;
|
extern crate log;
|
||||||
@ -61,6 +61,11 @@ extern "C" {
|
|||||||
static __exceptions_start: u32;
|
static __exceptions_start: u32;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// linker may complain about missing rust_eh_personality but it is unused
|
||||||
|
#[lang = "eh_personality"]
|
||||||
|
#[allow(unused)]
|
||||||
|
pub fn dummy_personality() { }
|
||||||
|
|
||||||
fn drtiosat_reset(reset: bool) {
|
fn drtiosat_reset(reset: bool) {
|
||||||
unsafe {
|
unsafe {
|
||||||
csr::drtiosat::reset_write(if reset { 1 } else { 0 });
|
csr::drtiosat::reset_write(if reset { 1 } else { 0 });
|
||||||
|
Loading…
Reference in New Issue
Block a user