coresight: tmc-etr: Add function to register catu ops
Make etr_catu_buf_ops static. Instead of directly accessing it in etr_buf_ops[], add a function to let catu driver register the ops at runtime. Break circular dependency between tmc-etr and catu drivers. Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com> Signed-off-by: Mian Yousaf Kaukab <ykaukab@suse.de> Signed-off-by: Tingwei Zhang <tingwei@codeaurora.org> Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org> Link: https://lore.kernel.org/r/20200928163513.70169-23-mathieu.poirier@linaro.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
3c3fd1a145
commit
66af416d9d
|
@ -358,7 +358,7 @@ static int catu_alloc_etr_buf(struct tmc_drvdata *tmc_drvdata,
|
|||
return 0;
|
||||
}
|
||||
|
||||
const struct etr_buf_operations etr_catu_buf_ops = {
|
||||
static const struct etr_buf_operations etr_catu_buf_ops = {
|
||||
.alloc = catu_alloc_etr_buf,
|
||||
.free = catu_free_etr_buf,
|
||||
.sync = catu_sync_etr_buf,
|
||||
|
@ -582,4 +582,22 @@ static struct amba_driver catu_driver = {
|
|||
.id_table = catu_ids,
|
||||
};
|
||||
|
||||
builtin_amba_driver(catu_driver);
|
||||
static int __init catu_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = amba_driver_register(&catu_driver);
|
||||
if (ret)
|
||||
pr_info("Error registering catu driver\n");
|
||||
tmc_etr_set_catu_ops(&etr_catu_buf_ops);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void __exit catu_exit(void)
|
||||
{
|
||||
tmc_etr_remove_catu_ops();
|
||||
amba_driver_unregister(&catu_driver);
|
||||
}
|
||||
|
||||
module_init(catu_init);
|
||||
module_exit(catu_exit);
|
||||
|
|
|
@ -108,6 +108,4 @@ static inline bool coresight_is_catu_device(struct coresight_device *csdev)
|
|||
return true;
|
||||
}
|
||||
|
||||
extern const struct etr_buf_operations etr_catu_buf_ops;
|
||||
|
||||
#endif
|
||||
|
|
|
@ -794,10 +794,21 @@ static inline void tmc_etr_disable_catu(struct tmc_drvdata *drvdata)
|
|||
static const struct etr_buf_operations *etr_buf_ops[] = {
|
||||
[ETR_MODE_FLAT] = &etr_flat_buf_ops,
|
||||
[ETR_MODE_ETR_SG] = &etr_sg_buf_ops,
|
||||
[ETR_MODE_CATU] = IS_ENABLED(CONFIG_CORESIGHT_CATU)
|
||||
? &etr_catu_buf_ops : NULL,
|
||||
[ETR_MODE_CATU] = NULL,
|
||||
};
|
||||
|
||||
void tmc_etr_set_catu_ops(const struct etr_buf_operations *catu)
|
||||
{
|
||||
etr_buf_ops[ETR_MODE_CATU] = catu;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(tmc_etr_set_catu_ops);
|
||||
|
||||
void tmc_etr_remove_catu_ops(void)
|
||||
{
|
||||
etr_buf_ops[ETR_MODE_CATU] = NULL;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(tmc_etr_remove_catu_ops);
|
||||
|
||||
static inline int tmc_etr_mode_alloc_buf(int mode,
|
||||
struct tmc_drvdata *drvdata,
|
||||
struct etr_buf *etr_buf, int node,
|
||||
|
|
|
@ -326,4 +326,7 @@ tmc_sg_table_buf_size(struct tmc_sg_table *sg_table)
|
|||
|
||||
struct coresight_device *tmc_etr_get_catu_device(struct tmc_drvdata *drvdata);
|
||||
|
||||
void tmc_etr_set_catu_ops(const struct etr_buf_operations *catu);
|
||||
void tmc_etr_remove_catu_ops(void);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue