1 // SPDX-License-Identifier: GPL-2.0 OR MIT
2 /* Copyright 2018-2019 Qiang Yu <yuq825@gmail.com> */
5 #include <linux/device.h>
7 #include "lima_device.h"
8 #include "lima_bcast.h"
11 #define bcast_write(reg, data) writel(data, ip->iomem + reg)
12 #define bcast_read(reg) readl(ip->iomem + reg)
14 void lima_bcast_enable(struct lima_device
*dev
, int num_pp
)
16 struct lima_sched_pipe
*pipe
= dev
->pipe
+ lima_pipe_pp
;
17 struct lima_ip
*ip
= dev
->ip
+ lima_ip_bcast
;
18 int i
, mask
= bcast_read(LIMA_BCAST_BROADCAST_MASK
) & 0xffff0000;
20 for (i
= 0; i
< num_pp
; i
++) {
21 struct lima_ip
*pp
= pipe
->processor
[i
];
23 mask
|= 1 << (pp
->id
- lima_ip_pp0
);
26 bcast_write(LIMA_BCAST_BROADCAST_MASK
, mask
);
29 int lima_bcast_init(struct lima_ip
*ip
)
33 for (i
= lima_ip_pp0
; i
<= lima_ip_pp7
; i
++) {
34 if (ip
->dev
->ip
[i
].present
)
35 mask
|= 1 << (i
- lima_ip_pp0
);
38 bcast_write(LIMA_BCAST_BROADCAST_MASK
, mask
<< 16);
39 bcast_write(LIMA_BCAST_INTERRUPT_MASK
, mask
);
43 void lima_bcast_fini(struct lima_ip
*ip
)