1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Copyright (C) 2018 Arm Limited. All rights reserved. 4 * 5 * Author: Suzuki K Poulose <suzuki.poulose@arm.com> 6 */ 7 8 #ifndef _CORESIGHT_CATU_H 9 #define _CORESIGHT_CATU_H 10 11 #include "coresight-priv.h" 12 13 /* Register offset from base */ 14 #define CATU_CONTROL 0x000 15 #define CATU_MODE 0x004 16 #define CATU_AXICTRL 0x008 17 #define CATU_IRQEN 0x00c 18 #define CATU_SLADDRLO 0x020 19 #define CATU_SLADDRHI 0x024 20 #define CATU_INADDRLO 0x028 21 #define CATU_INADDRHI 0x02c 22 #define CATU_STATUS 0x100 23 #define CATU_DEVARCH 0xfbc 24 25 #define CATU_CONTROL_ENABLE 0 26 27 #define CATU_MODE_PASS_THROUGH 0U 28 #define CATU_MODE_TRANSLATE 1U 29 30 #define CATU_STATUS_READY 8 31 #define CATU_STATUS_ADRERR 0 32 #define CATU_STATUS_AXIERR 4 33 34 #define CATU_IRQEN_ON 0x1 35 #define CATU_IRQEN_OFF 0x0 36 37 struct catu_drvdata { 38 struct device *dev; 39 void __iomem *base; 40 struct coresight_device *csdev; 41 int irq; 42 }; 43 44 #define CATU_REG32(name, offset) \ 45 static inline u32 \ 46 catu_read_##name(struct catu_drvdata *drvdata) \ 47 { \ 48 return coresight_read_reg_pair(drvdata->base, offset, -1); \ 49 } \ 50 static inline void \ 51 catu_write_##name(struct catu_drvdata *drvdata, u32 val) \ 52 { \ 53 coresight_write_reg_pair(drvdata->base, val, offset, -1); \ 54 } 55 56 #define CATU_REG_PAIR(name, lo_off, hi_off) \ 57 static inline u64 \ 58 catu_read_##name(struct catu_drvdata *drvdata) \ 59 { \ 60 return coresight_read_reg_pair(drvdata->base, lo_off, hi_off); \ 61 } \ 62 static inline void \ 63 catu_write_##name(struct catu_drvdata *drvdata, u64 val) \ 64 { \ 65 coresight_write_reg_pair(drvdata->base, val, lo_off, hi_off); \ 66 } 67 68 CATU_REG32(control, CATU_CONTROL); 69 CATU_REG32(mode, CATU_MODE); 70 CATU_REG_PAIR(sladdr, CATU_SLADDRLO, CATU_SLADDRHI) 71 CATU_REG_PAIR(inaddr, CATU_INADDRLO, CATU_INADDRHI) 72 73 static inline bool coresight_is_catu_device(struct coresight_device *csdev) 74 { 75 if (!IS_ENABLED(CONFIG_CORESIGHT_CATU)) 76 return false; 77 if (csdev->type != CORESIGHT_DEV_TYPE_HELPER) 78 return false; 79 if (csdev->subtype.helper_subtype != CORESIGHT_DEV_SUBTYPE_HELPER_CATU) 80 return false; 81 return true; 82 } 83 84 #endif 85