1c411396eSAntonio Nino Diaz /* 2*4f65c0beSLeo Yan * Copyright (c) 2014-2024, Arm Limited and Contributors. All rights reserved. 3c411396eSAntonio Nino Diaz * 4c411396eSAntonio Nino Diaz * SPDX-License-Identifier: BSD-3-Clause 5c411396eSAntonio Nino Diaz */ 6c411396eSAntonio Nino Diaz 7c411396eSAntonio Nino Diaz #ifndef CSS_MHU_DOORBELL_H 8c411396eSAntonio Nino Diaz #define CSS_MHU_DOORBELL_H 9c411396eSAntonio Nino Diaz 10c411396eSAntonio Nino Diaz #include <stdint.h> 11c411396eSAntonio Nino Diaz 12c411396eSAntonio Nino Diaz #include <lib/mmio.h> 13c411396eSAntonio Nino Diaz 14f8931606SAditya Angadi /* MHUv2 Frame Base Mask */ 15f8931606SAditya Angadi #define MHU_V2_FRAME_BASE_MASK UL(~0xFFF) 16c411396eSAntonio Nino Diaz 17c411396eSAntonio Nino Diaz /* MHUv2 Control Registers Offsets */ 18f8931606SAditya Angadi #define MHU_V2_MSG_NO_CAP_OFFSET UL(0xF80) 19f8931606SAditya Angadi #define MHU_V2_ACCESS_REQ_OFFSET UL(0xF88) 20f8931606SAditya Angadi #define MHU_V2_ACCESS_READY_OFFSET UL(0xF8C) 21c411396eSAntonio Nino Diaz 22c411396eSAntonio Nino Diaz #define SENDER_REG_STAT(_channel) (0x20 * (_channel)) 23c411396eSAntonio Nino Diaz #define SENDER_REG_SET(_channel) ((0x20 * (_channel)) + 0xC) 24c411396eSAntonio Nino Diaz 25*4f65c0beSLeo Yan #define MHU_V3_PBX_PDBCW_PAGE_OFFSET UL(0x1000) 26*4f65c0beSLeo Yan #define MHU_V3_SENDER_REG_SET(_channel) (MHU_V3_PBX_PDBCW_PAGE_OFFSET + \ 27*4f65c0beSLeo Yan SENDER_REG_SET(_channel)) 28*4f65c0beSLeo Yan 29c411396eSAntonio Nino Diaz /* Helper macro to ring doorbell */ 30c411396eSAntonio Nino Diaz #define MHU_RING_DOORBELL(addr, modify_mask, preserve_mask) do { \ 31c411396eSAntonio Nino Diaz uint32_t db = mmio_read_32(addr) & (preserve_mask); \ 32c411396eSAntonio Nino Diaz mmio_write_32(addr, db | (modify_mask)); \ 33c411396eSAntonio Nino Diaz } while (0) 34c411396eSAntonio Nino Diaz 35c411396eSAntonio Nino Diaz #define MHU_V2_ACCESS_REQUEST(addr) \ 36c411396eSAntonio Nino Diaz mmio_write_32((addr) + MHU_V2_ACCESS_REQ_OFFSET, 0x1) 37c411396eSAntonio Nino Diaz 38c411396eSAntonio Nino Diaz #define MHU_V2_CLEAR_REQUEST(addr) \ 39c411396eSAntonio Nino Diaz mmio_write_32((addr) + MHU_V2_ACCESS_REQ_OFFSET, 0x0) 40c411396eSAntonio Nino Diaz 41c411396eSAntonio Nino Diaz #define MHU_V2_IS_ACCESS_READY(addr) \ 42c411396eSAntonio Nino Diaz (mmio_read_32((addr) + MHU_V2_ACCESS_READY_OFFSET) & 0x1) 43c411396eSAntonio Nino Diaz 44c411396eSAntonio Nino Diaz struct scmi_channel_plat_info; 45c411396eSAntonio Nino Diaz void mhu_ring_doorbell(struct scmi_channel_plat_info *plat_info); 46c411396eSAntonio Nino Diaz void mhuv2_ring_doorbell(struct scmi_channel_plat_info *plat_info); 47c411396eSAntonio Nino Diaz 48c411396eSAntonio Nino Diaz #endif /* CSS_MHU_DOORBELL_H */ 49