| /* SPDX-License-Identifier: GPL-2.0 */ |
| /* |
| * Copyright (c) 2019 MediaTek Inc. |
| * Author: Ping-Hsun Wu <ping-hsun.wu@mediatek.com> |
| */ |
| |
| #ifndef __MMSYS_REG_BASE_H__ |
| #define __MMSYS_REG_BASE_H__ |
| |
| #ifndef CMDQ_ADDR_HIGH |
| #define CMDQ_ADDR_HIGH(addr) ((u32)(((addr) >> 16) & GENMASK(31, 0))) |
| #endif |
| #ifndef CMDQ_ADDR_LOW |
| #define CMDQ_ADDR_LOW(addr) ((u16)((addr) & 0xFFFF) | BIT(1)) |
| #endif |
| #define UNUSED(x) (void)(x) |
| |
| #define CMDQ_THR_SPR_0 (0) |
| #define CMDQ_THR_SPR_1 (1) |
| #define CMDQ_THR_SPR_2 (2) |
| #define CMDQ_THR_SPR_3 (3) |
| #define GCE_GPR_R11 (11) |
| /* CMDQ: P7: debug */ |
| #define GCE_GPR_R14 0x0E |
| #define GCE_GPR_R15 0x0F |
| |
| #define MM_REG_WRITE_MASK(cmd, id, base, ofst, val, mask, ...) \ |
| cmdq_pkt_write_mask(cmd->pkt, id, \ |
| (base) + (ofst), (val), (mask), ##__VA_ARGS__) |
| #define MM_REG_WRITE(cmd, id, base, ofst, val, mask, ...) \ |
| MM_REG_WRITE_MASK(cmd, id, base, ofst, val, \ |
| (((mask) & (ofst##_MASK)) == (ofst##_MASK)) ? \ |
| (0xffffffff) : (mask), ##__VA_ARGS__) |
| |
| #define MM_REG_WRITE_S(cmd, id, base, ofst, val, mask, ...) \ |
| do{ \ |
| UNUSED(id); \ |
| cmdq_pkt_assign(cmd->pkt, CMDQ_THR_SPR_0, \ |
| CMDQ_ADDR_HIGH(base+ofst)); \ |
| cmdq_pkt_write_s_mask_value(cmd->pkt, CMDQ_THR_SPR_0, \ |
| CMDQ_ADDR_LOW(base+ofst), (val), (mask), ##__VA_ARGS__); \ |
| }while(0) |
| |
| #define MM_REG_WAIT(cmd, evt) \ |
| cmdq_pkt_wfe(cmd->pkt, cmd->event[(evt)]) |
| |
| #define MM_REG_WAIT_NO_CLEAR(cmd, evt) \ |
| cmdq_pkt_wait_no_clear(cmd->pkt, cmd->event[(evt)]) |
| |
| #define MM_REG_CLEAR(cmd, evt) \ |
| cmdq_pkt_clear_event(cmd->pkt, cmd->event[(evt)]) |
| |
| #define MM_REG_SET_EVENT(cmd, evt) \ |
| cmdq_pkt_set_event(cmd->pkt, cmd->event[(evt)]) |
| |
| #define MM_REG_POLL_MASK(cmd, id, base, ofst, val, mask, ...) \ |
| cmdq_pkt_poll_mask(cmd->pkt, id, \ |
| (base) + (ofst), (val), (mask), ##__VA_ARGS__) |
| #define MM_REG_POLL(cmd, id, base, ofst, val, mask, ...) \ |
| MM_REG_POLL_MASK(cmd, id, base, ofst, val, \ |
| (((mask) & (ofst##_MASK)) == (ofst##_MASK)) ? \ |
| (0xffffffff) : (mask), ##__VA_ARGS__) |
| |
| #define MM_REG_POLL_S(cmd, id, base, ofst, val, mask, ...) \ |
| do{ \ |
| UNUSED(id); \ |
| cmdq_pkt_poll_addr(cmd->pkt, val, ((base) + (ofst)), mask, GCE_GPR_R14); \ |
| }while(0) |
| |
| #endif // __MM_REG_BASE_H__ |