2019-12-18 06:35:58 +08:00
|
|
|
#![no_std]
|
|
|
|
|
2020-06-11 05:20:43 +08:00
|
|
|
extern crate alloc;
|
|
|
|
|
2020-03-26 05:23:30 +08:00
|
|
|
/// Re-export so that dependents can always use the same version
|
|
|
|
pub use smoltcp;
|
|
|
|
|
2019-10-22 04:19:03 +08:00
|
|
|
pub mod slcr;
|
|
|
|
pub mod clocks;
|
|
|
|
pub mod uart;
|
2020-01-20 19:26:29 +08:00
|
|
|
pub mod devc;
|
2019-12-18 06:35:58 +08:00
|
|
|
pub mod stdio;
|
2019-10-22 04:19:03 +08:00
|
|
|
pub mod eth;
|
2019-10-19 05:46:00 +08:00
|
|
|
pub mod axi_hp;
|
2019-10-19 07:46:43 +08:00
|
|
|
pub mod axi_gp;
|
2019-10-22 04:12:10 +08:00
|
|
|
pub mod ddr;
|
2019-11-14 09:11:58 +08:00
|
|
|
pub mod mpcore;
|
2019-11-21 07:14:09 +08:00
|
|
|
pub mod flash;
|
2020-04-25 06:18:45 +08:00
|
|
|
pub mod time;
|
|
|
|
pub mod timer;
|
2020-05-06 11:06:38 +08:00
|
|
|
pub mod sdio;
|
2020-05-01 07:33:00 +08:00
|
|
|
pub mod logger;
|
2020-06-25 07:40:42 +08:00
|
|
|
pub mod ps7_init;
|
2020-06-20 08:24:46 +08:00
|
|
|
|
|
|
|
pub use libcortex_a9::pl310::L2Cache;
|
|
|
|
|
|
|
|
pub fn l2cache() -> L2Cache {
|
|
|
|
const PL310_BASEADDR: usize = 0xF8F02000;
|
|
|
|
L2Cache::new(PL310_BASEADDR)
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn setup_l2cache() {
|
|
|
|
slcr::RegisterBlock::unlocked(|slcr| {
|
|
|
|
assert_eq!(&slcr.unnamed1 as *const _ as u32, 0xF8000A1C);
|
|
|
|
unsafe { slcr.unnamed1.write(0x020202); }
|
|
|
|
});
|
2020-06-22 08:32:38 +08:00
|
|
|
|
2020-06-20 08:24:46 +08:00
|
|
|
let mut l2 = l2cache();
|
2020-06-22 08:32:38 +08:00
|
|
|
use log::info;
|
|
|
|
info!("l2 aux={:08X}", l2.regs.aux_control.read());
|
2020-06-20 08:24:46 +08:00
|
|
|
// TODO: set prefetch
|
|
|
|
|
|
|
|
// Configure ZYNQ-specific latency
|
|
|
|
l2.set_tag_ram_latencies(1, 1, 1);
|
|
|
|
l2.set_data_ram_latencies(1, 2, 1);
|
|
|
|
|
|
|
|
l2.disable_interrupts();
|
|
|
|
l2.reset_interrupts();
|
|
|
|
l2.invalidate_all();
|
|
|
|
l2.enable();
|
|
|
|
}
|