summaryrefslogtreecommitdiff
path: root/utils/regtools
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2014-02-10 23:10:21 +0100
committerAmaury Pouly <amaury.pouly@gmail.com>2014-02-10 23:14:27 +0100
commit6e132b48d52ad285728529f982bb6421b100ba8a (patch)
tree84e60834306d6409fc5abf73f1ae4a70febb541a /utils/regtools
parent68163e8f4974545a33de236139b5995883df7a17 (diff)
downloadrockbox-6e132b48d52ad285728529f982bb6421b100ba8a.tar.gz
rockbox-6e132b48d52ad285728529f982bb6421b100ba8a.zip
regtools/qeditor: enhance backend write with write mode (SCT)
Change-Id: I723bce7a60fb08c1d1d5f894a225c36bc1ba4394
Diffstat (limited to 'utils/regtools')
-rw-r--r--utils/regtools/qeditor/backend.cpp36
-rw-r--r--utils/regtools/qeditor/backend.h37
2 files changed, 56 insertions, 17 deletions
diff --git a/utils/regtools/qeditor/backend.cpp b/utils/regtools/qeditor/backend.cpp
index fa107ec26c..44430c25da 100644
--- a/utils/regtools/qeditor/backend.cpp
+++ b/utils/regtools/qeditor/backend.cpp
@@ -106,11 +106,17 @@ bool FileIoBackend::Reload()
106 return true; 106 return true;
107} 107}
108 108
109bool FileIoBackend::WriteRegister(const QString& name, soc_word_t value) 109bool FileIoBackend::WriteRegister(const QString& name, soc_word_t value, WriteMode mode)
110{ 110{
111 m_dirty = true; 111 m_dirty = true;
112 m_map[name] = value; 112 switch(mode)
113 return true; 113 {
114 case Write: m_map[name] = value; return true;
115 case Set: m_map[name] |= value; return true;
116 case Clear: m_map[name] &= ~value; return true;
117 case Toggle: m_map[name] ^= value; return true;
118 default: return false;
119 }
114} 120}
115 121
116bool FileIoBackend::Commit() 122bool FileIoBackend::Commit()
@@ -281,8 +287,15 @@ bool HWStubIoBackend::ReadRegister(soc_addr_t addr, soc_word_t& value)
281 return m_dev->ReadMem(addr, sizeof(value), &value); 287 return m_dev->ReadMem(addr, sizeof(value), &value);
282} 288}
283 289
284bool HWStubIoBackend:: WriteRegister(soc_addr_t addr, soc_word_t value) 290bool HWStubIoBackend::WriteRegister(soc_addr_t addr, soc_word_t value, WriteMode mode)
285{ 291{
292 switch(mode)
293 {
294 case Set: addr += 4; break;
295 case Clear: addr += 8; break;
296 case Toggle: addr += 12; break;
297 default: break;
298 }
286 return m_dev->WriteMem(addr, sizeof(value), &value); 299 return m_dev->WriteMem(addr, sizeof(value), &value);
287} 300}
288 301
@@ -387,6 +400,19 @@ bool BackendHelper::ReadRegister(const QString& dev, const QString& reg, soc_wor
387 return false; 400 return false;
388} 401}
389 402
403bool BackendHelper::WriteRegister(const QString& dev, const QString& reg,
404 soc_word_t v, IoBackend::WriteMode mode)
405{
406 if(m_io_backend->SupportAccess(IoBackend::ByName))
407 return m_io_backend->WriteRegister("HW." + dev + "." + reg, v, mode);
408 if(m_io_backend->SupportAccess(IoBackend::ByAddress))
409 {
410 soc_addr_t addr;
411 if(GetRegisterAddress(dev, reg, addr))
412 return m_io_backend->WriteRegister(addr, v, mode);
413 }
414 return false;
415}
390 416
391bool BackendHelper::GetDevRef(const QString& sdev, SocDevRef& ref) 417bool BackendHelper::GetDevRef(const QString& sdev, SocDevRef& ref)
392{ 418{
@@ -456,4 +482,4 @@ bool BackendHelper::ReadRegisterField(const QString& dev, const QString& reg,
456 return false; 482 return false;
457 v = (v & field_ref.GetField().bitmask()) >> field_ref.GetField().first_bit; 483 v = (v & field_ref.GetField().bitmask()) >> field_ref.GetField().first_bit;
458 return true; 484 return true;
459} \ No newline at end of file 485}
diff --git a/utils/regtools/qeditor/backend.h b/utils/regtools/qeditor/backend.h
index 72a19b6ec1..939ed9529f 100644
--- a/utils/regtools/qeditor/backend.h
+++ b/utils/regtools/qeditor/backend.h
@@ -17,12 +17,21 @@ public:
17 IoBackend() {} 17 IoBackend() {}
18 virtual ~IoBackend() {} 18 virtual ~IoBackend() {}
19 19
20 enum WriteMode
21 {
22 Write, Set, Clear, Toggle
23 };
24
20 enum AccessType 25 enum AccessType
21 { 26 {
22 ByName, 27 ByName,
23 ByAddress, 28 ByAddress,
24 }; 29 };
25 30
31 /** Register naming convention: name based access are of the form:
32 * HW.dev.reg
33 * where <dev> is the device name (including index like APPUART1)
34 * and <reg> is the register name (including index like PRIORITY29) */
26 /* report whether backend supports register access type */ 35 /* report whether backend supports register access type */
27 virtual bool SupportAccess(AccessType type) = 0; 36 virtual bool SupportAccess(AccessType type) = 0;
28 /* get SoC name */ 37 /* get SoC name */
@@ -37,8 +46,10 @@ public:
37 /* write a register by name or address 46 /* write a register by name or address
38 * NOTE: even on a read-only backend, a write is allowed be successful as long 47 * NOTE: even on a read-only backend, a write is allowed be successful as long
39 * as commit fails */ 48 * as commit fails */
40 virtual bool WriteRegister(const QString& name, soc_word_t value) = 0; 49 virtual bool WriteRegister(const QString& name, soc_word_t value,
41 virtual bool WriteRegister(soc_addr_t addr, soc_word_t value) = 0; 50 WriteMode mode = Write) = 0;
51 virtual bool WriteRegister(soc_addr_t addr, soc_word_t value,
52 WriteMode mode = Write) = 0;
42 /* check whether backend contains uncommitted (ie cached) writes */ 53 /* check whether backend contains uncommitted (ie cached) writes */
43 virtual bool IsDirty() = 0; 54 virtual bool IsDirty() = 0;
44 /* commit all writes */ 55 /* commit all writes */
@@ -59,10 +70,10 @@ public:
59 { (void) addr; (void) value; return false; } 70 { (void) addr; (void) value; return false; }
60 virtual bool Reload() { return false; } 71 virtual bool Reload() { return false; }
61 virtual bool IsReadOnly() { return true; } 72 virtual bool IsReadOnly() { return true; }
62 virtual bool WriteRegister(const QString& name, soc_word_t value) 73 virtual bool WriteRegister(const QString& name, soc_word_t value, WriteMode mode)
63 { (void) name; (void) value; return false; } 74 { (void) name; (void) value; (void) mode; return false; }
64 virtual bool WriteRegister(soc_addr_t addr, soc_word_t value) 75 virtual bool WriteRegister(soc_addr_t addr, soc_word_t value, WriteMode mode)
65 { (void) addr; (void) value; return false; } 76 { (void) addr; (void) value; (void) mode; return false; }
66 virtual bool IsDirty() { return false; } 77 virtual bool IsDirty() { return false; }
67 virtual bool Commit() { return false; } 78 virtual bool Commit() { return false; }
68}; 79};
@@ -82,9 +93,9 @@ public:
82 { (void) addr; (void) value; return false; } 93 { (void) addr; (void) value; return false; }
83 virtual bool Reload(); 94 virtual bool Reload();
84 virtual bool IsReadOnly() { return m_readonly; } 95 virtual bool IsReadOnly() { return m_readonly; }
85 virtual bool WriteRegister(const QString& name, soc_word_t value); 96 virtual bool WriteRegister(const QString& name, soc_word_t value, WriteMode mode);
86 virtual bool WriteRegister(soc_addr_t addr, soc_word_t value) 97 virtual bool WriteRegister(soc_addr_t addr, soc_word_t value, WriteMode mode)
87 { (void) addr; (void) value; return false; } 98 { (void) addr; (void) value; (void) mode; return false; }
88 virtual bool IsDirty() { return m_dirty; } 99 virtual bool IsDirty() { return m_dirty; }
89 virtual bool Commit(); 100 virtual bool Commit();
90 101
@@ -142,9 +153,9 @@ public:
142 virtual bool ReadRegister(soc_addr_t addr, soc_word_t& value); 153 virtual bool ReadRegister(soc_addr_t addr, soc_word_t& value);
143 virtual bool Reload(); 154 virtual bool Reload();
144 virtual bool IsReadOnly() { return false; } 155 virtual bool IsReadOnly() { return false; }
145 virtual bool WriteRegister(const QString& name, soc_word_t value) 156 virtual bool WriteRegister(const QString& name, soc_word_t value, WriteMode mode)
146 { (void) name; (void) value; return false; } 157 { (void) name; (void) value; (void) mode; return false; }
147 virtual bool WriteRegister(soc_addr_t addr, soc_word_t value); 158 virtual bool WriteRegister(soc_addr_t addr, soc_word_t value, WriteMode mode);
148 virtual bool IsDirty() { return false; } 159 virtual bool IsDirty() { return false; }
149 virtual bool Commit() { return true; } 160 virtual bool Commit() { return true; }
150 161
@@ -258,6 +269,8 @@ public:
258 bool ReadRegister(const QString& dev, const QString& reg, soc_word_t& v); 269 bool ReadRegister(const QString& dev, const QString& reg, soc_word_t& v);
259 bool ReadRegisterField(const QString& dev, const QString& reg, 270 bool ReadRegisterField(const QString& dev, const QString& reg,
260 const QString& field, soc_word_t& v); 271 const QString& field, soc_word_t& v);
272 bool WriteRegister(const QString& dev, const QString& reg, soc_word_t v,
273 IoBackend::WriteMode mode = IoBackend::Write);
261 bool GetDevRef(const QString& dev, SocDevRef& ref); 274 bool GetDevRef(const QString& dev, SocDevRef& ref);
262 bool GetRegRef(const SocDevRef& dev, const QString& reg, SocRegRef& ref); 275 bool GetRegRef(const SocDevRef& dev, const QString& reg, SocRegRef& ref);
263 bool GetFieldRef(const SocRegRef& reg, const QString& field, SocFieldRef& ref); 276 bool GetFieldRef(const SocRegRef& reg, const QString& field, SocFieldRef& ref);