From e9cdc6374dc730dc61d2a8a81beabe563ad7fe88 Mon Sep 17 00:00:00 2001 From: Yulia Garbovich Date: Tue, 23 Nov 2021 20:00:04 +0200 Subject: Add mpu driver and remove interface library from drivers Add mpu driver for upstreaming After removing of interface library,targets and applications will list explicitly which libraries to link Change-Id: Icfa449a2981093161f283e45b4d52ca6199371b8 --- drivers/mhu_juno/CMakeLists.txt | 23 +++++++++++ drivers/mhu_juno/include/mhu_juno.hpp | 66 ++++++++++++++++++++++++++++++ drivers/mhu_juno/src/mhu_juno.cpp | 76 +++++++++++++++++++++++++++++++++++ 3 files changed, 165 insertions(+) create mode 100644 drivers/mhu_juno/CMakeLists.txt create mode 100644 drivers/mhu_juno/include/mhu_juno.hpp create mode 100644 drivers/mhu_juno/src/mhu_juno.cpp (limited to 'drivers/mhu_juno') diff --git a/drivers/mhu_juno/CMakeLists.txt b/drivers/mhu_juno/CMakeLists.txt new file mode 100644 index 0000000..2116ee7 --- /dev/null +++ b/drivers/mhu_juno/CMakeLists.txt @@ -0,0 +1,23 @@ +# +# Copyright (c) 2020-2021 Arm Limited. All rights reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the License); you may +# not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an AS IS BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +add_library(ethosu_mhu_juno STATIC) +target_include_directories(ethosu_mhu_juno PUBLIC include) + +target_sources(ethosu_mhu_juno PRIVATE src/mhu_juno.cpp) +target_link_libraries(ethosu_mhu_juno PRIVATE ethosu_mailbox) diff --git a/drivers/mhu_juno/include/mhu_juno.hpp b/drivers/mhu_juno/include/mhu_juno.hpp new file mode 100644 index 0000000..6b36512 --- /dev/null +++ b/drivers/mhu_juno/include/mhu_juno.hpp @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2020-2021 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MHU_JUNO_HPP +#define MHU_JUNO_HPP + +#include + +#include +#include + +namespace Mailbox { + +// Doorbell implementation only +class MHUJuno : public Mailbox { +public: + MHUJuno(const uint32_t baseAddress); + virtual ~MHUJuno(); + virtual bool sendMessage() final; + virtual void handleMessage() final; + virtual bool verifyHardware() final; + +private: + /* Offsets */ + static constexpr uint32_t CPU0_INTR_STAT = 0x00; + static constexpr uint32_t CPU0_INTR_SET = 0x04; + static constexpr uint32_t CPU0_INTR_CLR = 0x08; + static constexpr uint32_t CPU1_INTR_STAT = 0x10; + static constexpr uint32_t CPU1_INTR_SET = 0x14; + static constexpr uint32_t CPU1_INTR_CLR = 0x18; + static constexpr uint32_t OFFSET = 0x10; + static constexpr uint32_t PIDR0 = 0xfe0; + static constexpr uint32_t PIDR1 = 0xfe4; + static constexpr uint32_t PIDR2 = 0xfe8; + static constexpr uint32_t PIDR3 = 0xfec; + static constexpr uint32_t PIDR4 = 0xfd0; + static constexpr uint32_t CIDR0 = 0xff0; + static constexpr uint32_t CIDR1 = 0xff4; + static constexpr uint32_t CIDR2 = 0xff8; + static constexpr uint32_t CIDR3 = 0xffc; + + volatile uint32_t *baseAddr; + + void clearMessage(); + void write(uint32_t offset, uint32_t val); + uint32_t read(uint32_t offset); +}; + +} // namespace Mailbox + +#endif /* #ifndef MHU_JUNO_HPP */ diff --git a/drivers/mhu_juno/src/mhu_juno.cpp b/drivers/mhu_juno/src/mhu_juno.cpp new file mode 100644 index 0000000..04b1352 --- /dev/null +++ b/drivers/mhu_juno/src/mhu_juno.cpp @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2020-2021 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#include +#include +#include +#include + +namespace Mailbox { + +MHUJuno::MHUJuno(const uint32_t baseAddress) { + baseAddr = reinterpret_cast(baseAddress); +} + +void MHUJuno::handleMessage() { + clearMessage(); + notify(); +} + +MHUJuno::~MHUJuno() {} + +// Doorbell only +bool MHUJuno::sendMessage() { + write(CPU1_INTR_SET, 1); + return true; +} +// Doorbell only +void MHUJuno::clearMessage() { + write(CPU0_INTR_CLR, 0xF); +} + +bool MHUJuno::verifyHardware() { + uint32_t pidr0 = read(PIDR0); + uint32_t pidr1 = read(PIDR1); + uint32_t pidr2 = read(PIDR2); + uint32_t pidr3 = read(PIDR3); + uint32_t pidr4 = read(PIDR4); + uint32_t cidr0 = read(CIDR0); + uint32_t cidr1 = read(CIDR1); + uint32_t cidr2 = read(CIDR2); + uint32_t cidr3 = read(CIDR3); + + if (pidr0 != 0x56 || pidr1 != 0xb8 || pidr2 != 0x0b || pidr3 != 0x00 || pidr4 != 0x04 || cidr0 != 0x0d || + cidr1 != 0xf0 || cidr2 != 0x05 || cidr3 != 0xb1) { + return false; + } + return true; +} + +void MHUJuno::write(const uint32_t offset, const uint32_t value) { + write32(baseAddr, offset, value); +} + +uint32_t MHUJuno::read(const uint32_t offset) { + return read32(baseAddr, offset); +} + +} // namespace Mailbox -- cgit v1.2.1