Compare commits

...

12 Commits

14 changed files with 37 additions and 30 deletions

15
flake.lock generated
View File

@ -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/"
} }
} }
}, },

View File

@ -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}";

View File

@ -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
View File

@ -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"

View File

@ -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);
} }
} }

View File

@ -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;

View File

@ -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;

View File

@ -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)
} }

View File

@ -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;

View File

@ -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;

View File

@ -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();

View File

@ -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;

View File

@ -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>,

View File

@ -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 });