[Pdbg] [PATCH 2/5] libpdbg: Add pib_write_mask() to write scom values with mask

Amitay Isaacs amitay at ozlabs.org
Fri Jul 19 16:03:45 AEST 2019


Signed-off-by: Amitay Isaacs <amitay at ozlabs.org>
---
 libpdbg/libpdbg.h |  1 +
 libpdbg/target.c  | 14 ++++++++++++++
 2 files changed, 15 insertions(+)

diff --git a/libpdbg/libpdbg.h b/libpdbg/libpdbg.h
index c72a96c..f1eab4f 100644
--- a/libpdbg/libpdbg.h
+++ b/libpdbg/libpdbg.h
@@ -132,6 +132,7 @@ int fsi_write_mask(struct pdbg_target *target, uint32_t addr, uint32_t val, uint
 
 int pib_read(struct pdbg_target *target, uint64_t addr, uint64_t *val);
 int pib_write(struct pdbg_target *target, uint64_t addr, uint64_t val);
+int pib_write_mask(struct pdbg_target *target, uint64_t addr, uint64_t val, uint64_t mask);
 int pib_wait(struct pdbg_target *pib_dt, uint64_t addr, uint64_t mask, uint64_t data);
 
 struct thread_regs {
diff --git a/libpdbg/target.c b/libpdbg/target.c
index a5dcba8..6befe25 100644
--- a/libpdbg/target.c
+++ b/libpdbg/target.c
@@ -153,6 +153,20 @@ int pib_write(struct pdbg_target *pib_dt, uint64_t addr, uint64_t data)
 	return rc;
 }
 
+int pib_write_mask(struct pdbg_target *pib_dt, uint64_t addr, uint64_t data, uint64_t mask)
+{
+	uint64_t value;
+	int rc;
+
+	rc = pib_read(pib_dt, addr, &value);
+	if (rc)
+		return rc;
+
+	value = (value & ~mask) | (data & mask);
+
+	return pib_write(pib_dt, addr, value);
+}
+
 /* Wait for a SCOM register addr to match value & mask == data */
 int pib_wait(struct pdbg_target *pib_dt, uint64_t addr, uint64_t mask, uint64_t data)
 {
-- 
2.21.0



More information about the Pdbg mailing list