| 521 | } |
| 522 | |
| 523 | static rt_err_t gicv3_irq_set_affinity(struct rt_pic_irq *pirq, rt_bitmap_t *affinity) |
| 524 | { |
| 525 | rt_err_t ret = RT_EOK; |
| 526 | rt_uint64_t val; |
| 527 | rt_ubase_t mpidr; |
| 528 | rt_uint32_t offset, index; |
| 529 | int hwirq = pirq->hwirq, cpu_id = rt_bitmap_next_set_bit(affinity, 0, RT_CPUS_NR); |
| 530 | |
| 531 | mpidr = rt_cpu_mpidr_table[cpu_id]; |
| 532 | |
| 533 | offset = gicv3_hwirq_convert_offset_index(hwirq, GICD_IROUTER, &index); |
| 534 | val = ((rt_uint64_t)MPIDR_AFFINITY_LEVEL(mpidr, 3) << 32 | |
| 535 | MPIDR_AFFINITY_LEVEL(mpidr, 2) << 16 | |
| 536 | MPIDR_AFFINITY_LEVEL(mpidr, 1) << 8 | |
| 537 | MPIDR_AFFINITY_LEVEL(mpidr, 0)); |
| 538 | |
| 539 | HWREG64(_gic.dist_base + offset + (index * 8)) = val; |
| 540 | |
| 541 | return ret; |
| 542 | } |
| 543 | |
| 544 | static rt_err_t gicv3_irq_set_triger_mode(struct rt_pic_irq *pirq, rt_uint32_t mode) |
| 545 | { |
nothing calls this directly
no test coverage detected