aboutsummaryrefslogtreecommitdiff
path: root/include/xscom.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/xscom.h')
-rw-r--r--include/xscom.h17
1 files changed, 15 insertions, 2 deletions
diff --git a/include/xscom.h b/include/xscom.h
index f955021..bad9140 100644
--- a/include/xscom.h
+++ b/include/xscom.h
@@ -208,9 +208,22 @@
* Error codes TBD, 0 = success
*/
+/* Use only in select places where multiple SCOMs are time/latency sensitive */
+extern void _xscom_lock(void);
+extern int _xscom_read(uint32_t partid, uint64_t pcb_addr, uint64_t *val, bool take_lock);
+extern int _xscom_write(uint32_t partid, uint64_t pcb_addr, uint64_t val, bool take_lock);
+extern void _xscom_unlock(void);
+
+
/* Targeted SCOM access */
-extern int xscom_read(uint32_t partid, uint64_t pcb_addr, uint64_t *val);
-extern int xscom_write(uint32_t partid, uint64_t pcb_addr, uint64_t val);
+static inline int xscom_read(uint32_t partid, uint64_t pcb_addr, uint64_t *val)
+{
+ return _xscom_read(partid, pcb_addr, val, true);
+}
+static inline int xscom_write(uint32_t partid, uint64_t pcb_addr, uint64_t val) {
+ return _xscom_write(partid, pcb_addr, val, true);
+}
+
/* This chip SCOM access */
extern int xscom_readme(uint64_t pcb_addr, uint64_t *val);