From 6402247003aa1e6899c6a16930a05d85a0fb77c8 Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Mon, 6 May 2019 17:02:15 +0200 Subject: [PATCH] zynq_boards: enable L2 cache --- src/bootstrap/spec/zynq_parallella/board.h | 33 +++++++++++++++++++++- src/bootstrap/spec/zynq_zc702/board.h | 33 +++++++++++++++++++++- src/bootstrap/spec/zynq_zc706/board.h | 33 +++++++++++++++++++++- src/bootstrap/spec/zynq_zedboard/board.h | 33 +++++++++++++++++++++- 4 files changed, 128 insertions(+), 4 deletions(-) diff --git a/src/bootstrap/spec/zynq_parallella/board.h b/src/bootstrap/spec/zynq_parallella/board.h index 479f7ea..f89a3aa 100644 --- a/src/bootstrap/spec/zynq_parallella/board.h +++ b/src/bootstrap/spec/zynq_parallella/board.h @@ -25,8 +25,9 @@ #include namespace Board { + struct L2_cache; + using namespace Zynq_parallella; - using L2_cache = Hw::Pl310; using Cpu_mmio = Hw::Cortex_a9_mmio; using Serial = Genode::Xilinx_uart; @@ -35,4 +36,34 @@ namespace Board { }; } +struct Board::L2_cache : Hw::Pl310 +{ + L2_cache(Genode::addr_t mmio) : Hw::Pl310(mmio) + { + Aux::access_t aux = 0; + Aux::Full_line_of_zero::set(aux, true); + Aux::Associativity::set(aux, Aux::Associativity::WAY_8); + Aux::Way_size::set(aux, Aux::Way_size::KB_64); + Aux::Share_override::set(aux, true); + Aux::Replacement_policy::set(aux, Aux::Replacement_policy::PRAND); + Aux::Ns_lockdown::set(aux, true); + Aux::Data_prefetch::set(aux, true); + Aux::Inst_prefetch::set(aux, true); + Aux::Early_bresp::set(aux, true); + write(aux); + } + + using Hw::Pl310::invalidate; + + void enable() + { + Pl310::mask_interrupts(); + write(1); + } + + void disable() { + write(0); + } +}; + #endif /* _SRC__BOOTSTRAP__SPEC__ZYNQ_PARALLELLA__BOARD_H_ */ diff --git a/src/bootstrap/spec/zynq_zc702/board.h b/src/bootstrap/spec/zynq_zc702/board.h index 4bd2bba..e7b89f7 100644 --- a/src/bootstrap/spec/zynq_zc702/board.h +++ b/src/bootstrap/spec/zynq_zc702/board.h @@ -25,8 +25,9 @@ #include namespace Board { + struct L2_cache; + using namespace Zynq_zc702; - using L2_cache = Hw::Pl310; using Cpu_mmio = Hw::Cortex_a9_mmio; using Serial = Genode::Xilinx_uart; @@ -35,4 +36,34 @@ namespace Board { }; } +struct Board::L2_cache : Hw::Pl310 +{ + L2_cache(Genode::addr_t mmio) : Hw::Pl310(mmio) + { + Aux::access_t aux = 0; + Aux::Full_line_of_zero::set(aux, true); + Aux::Associativity::set(aux, Aux::Associativity::WAY_8); + Aux::Way_size::set(aux, Aux::Way_size::KB_64); + Aux::Share_override::set(aux, true); + Aux::Replacement_policy::set(aux, Aux::Replacement_policy::PRAND); + Aux::Ns_lockdown::set(aux, true); + Aux::Data_prefetch::set(aux, true); + Aux::Inst_prefetch::set(aux, true); + Aux::Early_bresp::set(aux, true); + write(aux); + } + + using Hw::Pl310::invalidate; + + void enable() + { + Pl310::mask_interrupts(); + write(1); + } + + void disable() { + write(0); + } +}; + #endif /* _SRC__BOOTSTRAP__SPEC__ZYNQ_ZC702__BOARD_H_ */ diff --git a/src/bootstrap/spec/zynq_zc706/board.h b/src/bootstrap/spec/zynq_zc706/board.h index 28746a7..0538459 100644 --- a/src/bootstrap/spec/zynq_zc706/board.h +++ b/src/bootstrap/spec/zynq_zc706/board.h @@ -25,8 +25,9 @@ #include namespace Board { + struct L2_cache; + using namespace Zynq_zc706; - using L2_cache = Hw::Pl310; using Cpu_mmio = Hw::Cortex_a9_mmio; using Serial = Genode::Xilinx_uart; @@ -35,4 +36,34 @@ namespace Board { }; } +struct Board::L2_cache : Hw::Pl310 +{ + L2_cache(Genode::addr_t mmio) : Hw::Pl310(mmio) + { + Aux::access_t aux = 0; + Aux::Full_line_of_zero::set(aux, true); + Aux::Associativity::set(aux, Aux::Associativity::WAY_8); + Aux::Way_size::set(aux, Aux::Way_size::KB_64); + Aux::Share_override::set(aux, true); + Aux::Replacement_policy::set(aux, Aux::Replacement_policy::PRAND); + Aux::Ns_lockdown::set(aux, true); + Aux::Data_prefetch::set(aux, true); + Aux::Inst_prefetch::set(aux, true); + Aux::Early_bresp::set(aux, true); + write(aux); + } + + using Hw::Pl310::invalidate; + + void enable() + { + Pl310::mask_interrupts(); + write(1); + } + + void disable() { + write(0); + } +}; + #endif /* _SRC__BOOTSTRAP__SPEC__ZYNQ_ZC706__BOARD_H_ */ diff --git a/src/bootstrap/spec/zynq_zedboard/board.h b/src/bootstrap/spec/zynq_zedboard/board.h index 73ee418..6998ec6 100644 --- a/src/bootstrap/spec/zynq_zedboard/board.h +++ b/src/bootstrap/spec/zynq_zedboard/board.h @@ -25,8 +25,9 @@ #include namespace Board { + struct L2_cache; + using namespace Zynq_zedboard; - using L2_cache = Hw::Pl310; using Cpu_mmio = Hw::Cortex_a9_mmio; using Serial = Genode::Xilinx_uart; @@ -35,4 +36,34 @@ namespace Board { }; } +struct Board::L2_cache : Hw::Pl310 +{ + L2_cache(Genode::addr_t mmio) : Hw::Pl310(mmio) + { + Aux::access_t aux = 0; + Aux::Full_line_of_zero::set(aux, true); + Aux::Associativity::set(aux, Aux::Associativity::WAY_8); + Aux::Way_size::set(aux, Aux::Way_size::KB_64); + Aux::Share_override::set(aux, true); + Aux::Replacement_policy::set(aux, Aux::Replacement_policy::PRAND); + Aux::Ns_lockdown::set(aux, true); + Aux::Data_prefetch::set(aux, true); + Aux::Inst_prefetch::set(aux, true); + Aux::Early_bresp::set(aux, true); + write(aux); + } + + using Hw::Pl310::invalidate; + + void enable() + { + Pl310::mask_interrupts(); + write(1); + } + + void disable() { + write(0); + } +}; + #endif /* _SRC__BOOTSTRAP__SPEC__ZYNQ_ZEDBOARD__BOARD_H_ */