Skip to content

Commit 3240214

Browse files
Mr-Bossmanavpatel
authored andcommitted
lib: sbi: dbtr: Fix update_triggers to match SBI
OpenSBI implements sbi_dbtr_update_trig as `sbi_dbtr_update_trig(unsigned long trig_idx_base, unsigned long trig_idx_mask)` yet SBI v3.0-rc7 Chapter 19. Debug Triggers Extension [0] declares it as `sbi_debug_update_triggers(unsigned long trig_count)` Change update_triggers to match SBI. [0] https://github.com/riscv-non-isa/riscv-sbi-doc/tree/v3.0-rc7/src/ext-debug-triggers.adoc Fixes: 97f234f ("lib: sbi: Introduce the SBI debug triggers extension support") Signed-off-by: Jesse Taube <[email protected]> Reviewed-by: Himanshu Chauhan <[email protected]> Tested-by: Charlie Jenkins <[email protected]> Reviewed-by: Charlie Jenkins <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Anup Patel <[email protected]>
1 parent 03f44e6 commit 3240214

File tree

3 files changed

+21
-16
lines changed

3 files changed

+21
-16
lines changed

include/sbi/sbi_dbtr.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,7 @@ int sbi_dbtr_uninstall_trig(unsigned long trig_idx_base,
115115
int sbi_dbtr_enable_trig(unsigned long trig_idx_base,
116116
unsigned long trig_idx_mask);
117117
int sbi_dbtr_update_trig(unsigned long smode,
118-
unsigned long trig_idx_base,
119-
unsigned long trig_idx_mask);
118+
unsigned long trig_count);
120119
int sbi_dbtr_disable_trig(unsigned long trig_idx_base,
121120
unsigned long trig_idx_mask);
122121

lib/sbi/sbi_dbtr.c

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -652,13 +652,9 @@ int sbi_dbtr_enable_trig(unsigned long trig_idx_base,
652652
}
653653

654654
int sbi_dbtr_update_trig(unsigned long smode,
655-
unsigned long trig_idx_base,
656-
unsigned long trig_idx_mask)
655+
unsigned long trig_count)
657656
{
658-
unsigned long trig_mask = trig_idx_mask << trig_idx_base;
659-
unsigned long idx = trig_idx_base;
660-
struct sbi_dbtr_data_msg *recv;
661-
unsigned long uidx = 0;
657+
unsigned long trig_idx;
662658
struct sbi_dbtr_trigger *trig;
663659
union sbi_dbtr_shmem_entry *entry;
664660
void *shmem_base = NULL;
@@ -673,18 +669,28 @@ int sbi_dbtr_update_trig(unsigned long smode,
673669

674670
shmem_base = hart_shmem_base(hs);
675671

676-
for_each_set_bit_from(idx, &trig_mask, hs->total_trigs) {
677-
trig = INDEX_TO_TRIGGER(idx);
672+
if (trig_count >= hs->total_trigs)
673+
return SBI_ERR_BAD_RANGE;
678674

679-
if (!(trig->state & RV_DBTR_BIT_MASK(TS, MAPPED)))
675+
for_each_trig_entry(shmem_base, trig_count, typeof(*entry), entry) {
676+
sbi_hart_map_saddr((unsigned long)entry, sizeof(*entry));
677+
trig_idx = entry->id.idx;
678+
679+
if (trig_idx >= hs->total_trigs) {
680+
sbi_hart_unmap_saddr();
680681
return SBI_ERR_INVALID_PARAM;
682+
}
683+
684+
trig = INDEX_TO_TRIGGER(trig_idx);
681685

682-
entry = (shmem_base + uidx * sizeof(*entry));
683-
recv = &entry->data;
686+
if (!(trig->state & RV_DBTR_BIT_MASK(TS, MAPPED))) {
687+
sbi_hart_unmap_saddr();
688+
return SBI_ERR_FAILED;
689+
}
684690

685-
trig->tdata2 = lle_to_cpu(recv->tdata2);
691+
dbtr_trigger_setup(trig, &entry->data);
692+
sbi_hart_unmap_saddr();
686693
dbtr_trigger_enable(trig);
687-
uidx++;
688694
}
689695

690696
return SBI_SUCCESS;

lib/sbi/sbi_ecall_dbtr.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ static int sbi_ecall_dbtr_handler(unsigned long extid, unsigned long funcid,
4343
ret = sbi_dbtr_enable_trig(regs->a0, regs->a1);
4444
break;
4545
case SBI_EXT_DBTR_TRIGGER_UPDATE:
46-
ret = sbi_dbtr_update_trig(smode, regs->a0, regs->a1);
46+
ret = sbi_dbtr_update_trig(smode, regs->a0);
4747
break;
4848
case SBI_EXT_DBTR_TRIGGER_DISABLE:
4949
ret = sbi_dbtr_disable_trig(regs->a0, regs->a1);

0 commit comments

Comments
 (0)