mirror of
https://github.com/saymrwulf/xous-core.git
synced 2026-11-15 08:30:02 +00:00
add power-on utilization reporting
there is now an extra field in the status bar that gives the %'age of time that the clocks are running.
This commit is contained in:
parent
ee2e38be05
commit
25e6bced00
8 changed files with 479 additions and 56 deletions
|
|
@ -3,7 +3,7 @@
|
|||
<device schemaVersion="1.1" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="CMSIS-SVD.xsd" >
|
||||
<vendor>litex</vendor>
|
||||
<name>SOC</name>
|
||||
<description><![CDATA[Litex SoC 2021-06-01 16:27:12]]></description>
|
||||
<description><![CDATA[Litex SoC 2021-06-02 00:30:35]]></description>
|
||||
|
||||
<addressUnitBits>8</addressUnitBits>
|
||||
<width>32</width>
|
||||
|
|
@ -1162,7 +1162,7 @@ register to disable individual events.]]></description>
|
|||
<register>
|
||||
<name>GIT_MAJOR</name>
|
||||
<description><![CDATA[Major git tag version. For example, this firmware was built from git tag
|
||||
``v0.0.0``, so this value is ``0``.]]></description>
|
||||
``v0.8.1``, so this value is ``0``.]]></description>
|
||||
<addressOffset>0x0008</addressOffset>
|
||||
<resetValue>0x00</resetValue>
|
||||
<size>32</size>
|
||||
|
|
@ -1178,9 +1178,9 @@ register to disable individual events.]]></description>
|
|||
<register>
|
||||
<name>GIT_MINOR</name>
|
||||
<description><![CDATA[Minor git tag version. For example, this firmware was built from git tag
|
||||
``v0.0.0``, so this value is ``0``.]]></description>
|
||||
``v0.8.1``, so this value is ``8``.]]></description>
|
||||
<addressOffset>0x000c</addressOffset>
|
||||
<resetValue>0x00</resetValue>
|
||||
<resetValue>0x08</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
<field>
|
||||
|
|
@ -1194,9 +1194,9 @@ register to disable individual events.]]></description>
|
|||
<register>
|
||||
<name>GIT_REVISION</name>
|
||||
<description><![CDATA[Revision git tag version. For example, this firmware was built from git tag
|
||||
``v0.0.0``, so this value is ``0``.]]></description>
|
||||
``v0.8.1``, so this value is ``1``.]]></description>
|
||||
<addressOffset>0x0010</addressOffset>
|
||||
<resetValue>0x00</resetValue>
|
||||
<resetValue>0x01</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
<field>
|
||||
|
|
@ -1210,10 +1210,10 @@ register to disable individual events.]]></description>
|
|||
<register>
|
||||
<name>GIT_GITREV</name>
|
||||
<description><![CDATA[First 32-bits of the git revision. This documentation was built from git rev
|
||||
``9e77f50e``, so this value is 2658661646, which should be enough to check out
|
||||
``cf5b40e6``, so this value is 3478864102, which should be enough to check out
|
||||
the exact git version used to build this firmware.]]></description>
|
||||
<addressOffset>0x0014</addressOffset>
|
||||
<resetValue>0x9e77f50e</resetValue>
|
||||
<resetValue>0xcf5b40e6</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
<field>
|
||||
|
|
@ -2657,10 +2657,112 @@ sources (power, sha512, and engine25519)]]></description>
|
|||
</field>
|
||||
</fields>
|
||||
</register>
|
||||
<register>
|
||||
<name>WAKEUP_SOURCE</name>
|
||||
<addressOffset>0x0008</addressOffset>
|
||||
<resetValue>0xff</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
<field>
|
||||
<name>kbd</name>
|
||||
<msb>0</msb>
|
||||
<bitRange>[0:0]</bitRange>
|
||||
<lsb>0</lsb>
|
||||
<description><![CDATA[Use the keyboard as wakeup source]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>ticktimer</name>
|
||||
<msb>1</msb>
|
||||
<bitRange>[1:1]</bitRange>
|
||||
<lsb>1</lsb>
|
||||
<description><![CDATA[Use the ticktimer as wakeup source]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>timer0</name>
|
||||
<msb>2</msb>
|
||||
<bitRange>[2:2]</bitRange>
|
||||
<lsb>2</lsb>
|
||||
<description><![CDATA[Use timer0 (os timer) as wakeup source]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>usb</name>
|
||||
<msb>3</msb>
|
||||
<bitRange>[3:3]</bitRange>
|
||||
<lsb>3</lsb>
|
||||
<description><![CDATA[Use USB k-transition as wakeup source]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>audio</name>
|
||||
<msb>4</msb>
|
||||
<bitRange>[4:4]</bitRange>
|
||||
<lsb>4</lsb>
|
||||
<description><![CDATA[Use audio FIFO empty as wakeup source]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>com</name>
|
||||
<msb>5</msb>
|
||||
<bitRange>[5:5]</bitRange>
|
||||
<lsb>5</lsb>
|
||||
<description><![CDATA[Use COM hold falling as wakeup source]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>rtc</name>
|
||||
<msb>6</msb>
|
||||
<bitRange>[6:6]</bitRange>
|
||||
<lsb>6</lsb>
|
||||
<description><![CDATA[Use RTC external interrupt as wakeup source]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>console</name>
|
||||
<msb>7</msb>
|
||||
<bitRange>[7:7]</bitRange>
|
||||
<lsb>7</lsb>
|
||||
<description><![CDATA[Use the console UART RX line dropping as wakeup source]]></description>
|
||||
</field>
|
||||
</fields>
|
||||
</register>
|
||||
<register>
|
||||
<name>ACTIVITY_RATE</name>
|
||||
<addressOffset>0x000c</addressOffset>
|
||||
<resetValue>0x00</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
<field>
|
||||
<name>counts_awake</name>
|
||||
<msb>30</msb>
|
||||
<bitRange>[30:0]</bitRange>
|
||||
<lsb>0</lsb>
|
||||
<description><![CDATA[number of counts in the last sample interval that we were active]]></description>
|
||||
</field>
|
||||
</fields>
|
||||
</register>
|
||||
<register>
|
||||
<name>SAMPLING_PERIOD</name>
|
||||
<addressOffset>0x0010</addressOffset>
|
||||
<resetValue>0x00</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
<field>
|
||||
<name>sample_period</name>
|
||||
<msb>30</msb>
|
||||
<bitRange>[30:0]</bitRange>
|
||||
<lsb>0</lsb>
|
||||
<description><![CDATA[Sampling period for counts awake, in 12MHz cycles]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>kill_sampler</name>
|
||||
<msb>31</msb>
|
||||
<bitRange>[31:31]</bitRange>
|
||||
<lsb>31</lsb>
|
||||
<description><![CDATA[When set, permanently disable reporting (in case you don't want the high-
|
||||
resolutionn timing sidechannel)]]></description>
|
||||
</field>
|
||||
</fields>
|
||||
</register>
|
||||
<register>
|
||||
<name>VIBE</name>
|
||||
<description><![CDATA[Vibration motor configuration register]]></description>
|
||||
<addressOffset>0x0008</addressOffset>
|
||||
<addressOffset>0x0014</addressOffset>
|
||||
<resetValue>0x00</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
|
|
@ -2675,8 +2777,8 @@ sources (power, sha512, and engine25519)]]></description>
|
|||
</register>
|
||||
<register>
|
||||
<name>EV_STATUS</name>
|
||||
<description><![CDATA[USB attach event]]></description>
|
||||
<addressOffset>0x000c</addressOffset>
|
||||
<description><![CDATA[update available to activity register]]></description>
|
||||
<addressOffset>0x0018</addressOffset>
|
||||
<resetValue>0x00</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
|
|
@ -2687,12 +2789,19 @@ sources (power, sha512, and engine25519)]]></description>
|
|||
<lsb>0</lsb>
|
||||
<description><![CDATA[Level of the ``usb_attach`` event]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>activity_update</name>
|
||||
<msb>1</msb>
|
||||
<bitRange>[1:1]</bitRange>
|
||||
<lsb>1</lsb>
|
||||
<description><![CDATA[Level of the ``activity_update`` event]]></description>
|
||||
</field>
|
||||
</fields>
|
||||
</register>
|
||||
<register>
|
||||
<name>EV_PENDING</name>
|
||||
<description><![CDATA[USB attach event]]></description>
|
||||
<addressOffset>0x0010</addressOffset>
|
||||
<description><![CDATA[update available to activity register]]></description>
|
||||
<addressOffset>0x001c</addressOffset>
|
||||
<resetValue>0x00</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
|
|
@ -2703,12 +2812,19 @@ sources (power, sha512, and engine25519)]]></description>
|
|||
<lsb>0</lsb>
|
||||
<description><![CDATA[USB attach event]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>activity_update</name>
|
||||
<msb>1</msb>
|
||||
<bitRange>[1:1]</bitRange>
|
||||
<lsb>1</lsb>
|
||||
<description><![CDATA[update available to activity register]]></description>
|
||||
</field>
|
||||
</fields>
|
||||
</register>
|
||||
<register>
|
||||
<name>EV_ENABLE</name>
|
||||
<description><![CDATA[USB attach event]]></description>
|
||||
<addressOffset>0x0014</addressOffset>
|
||||
<description><![CDATA[update available to activity register]]></description>
|
||||
<addressOffset>0x0020</addressOffset>
|
||||
<resetValue>0x00</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
|
|
@ -2719,12 +2835,19 @@ sources (power, sha512, and engine25519)]]></description>
|
|||
<lsb>0</lsb>
|
||||
<description><![CDATA[Write a ``1`` to enable the ``usb_attach`` Event]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>activity_update</name>
|
||||
<msb>1</msb>
|
||||
<bitRange>[1:1]</bitRange>
|
||||
<lsb>1</lsb>
|
||||
<description><![CDATA[Write a ``1`` to enable the ``activity_update`` Event]]></description>
|
||||
</field>
|
||||
</fields>
|
||||
</register>
|
||||
</registers>
|
||||
<addressBlock>
|
||||
<offset>0</offset>
|
||||
<size>0x18</size>
|
||||
<size>0x24</size>
|
||||
<usage>registers</usage>
|
||||
</addressBlock>
|
||||
<interrupt>
|
||||
|
|
@ -3316,7 +3439,7 @@ inject too fast.]]></description>
|
|||
<name>SEED1</name>
|
||||
<description><![CDATA[Bits 32-63 of `SEED_SEED`. Seed used for the build]]></description>
|
||||
<addressOffset>0x0000</addressOffset>
|
||||
<resetValue>0x56f38707</resetValue>
|
||||
<resetValue>0x742b5c26</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
<field>
|
||||
|
|
@ -3331,7 +3454,7 @@ inject too fast.]]></description>
|
|||
<name>SEED0</name>
|
||||
<description><![CDATA[Bits 0-31 of `SEED_SEED`.]]></description>
|
||||
<addressOffset>0x0004</addressOffset>
|
||||
<resetValue>0x400f5344</resetValue>
|
||||
<resetValue>0x645c9ef4</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
<field>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
<device schemaVersion="1.1" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="CMSIS-SVD.xsd" >
|
||||
<vendor>litex</vendor>
|
||||
<name>SOC</name>
|
||||
<description><![CDATA[Litex SoC 2021-06-01 16:48:00]]></description>
|
||||
<description><![CDATA[Litex SoC 2021-06-02 00:30:35]]></description>
|
||||
|
||||
<addressUnitBits>8</addressUnitBits>
|
||||
<width>32</width>
|
||||
|
|
@ -1244,7 +1244,7 @@ beyond the tag indicated in `MAJOR`, `MINOR`, and `REVISION`.]]></description>
|
|||
<register>
|
||||
<name>GIT_DIRTY</name>
|
||||
<addressOffset>0x001c</addressOffset>
|
||||
<resetValue>0x00</resetValue>
|
||||
<resetValue>0x01</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
<field>
|
||||
|
|
@ -2657,10 +2657,112 @@ sources (power, sha512, and engine25519)]]></description>
|
|||
</field>
|
||||
</fields>
|
||||
</register>
|
||||
<register>
|
||||
<name>WAKEUP_SOURCE</name>
|
||||
<addressOffset>0x0008</addressOffset>
|
||||
<resetValue>0xff</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
<field>
|
||||
<name>kbd</name>
|
||||
<msb>0</msb>
|
||||
<bitRange>[0:0]</bitRange>
|
||||
<lsb>0</lsb>
|
||||
<description><![CDATA[Use the keyboard as wakeup source]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>ticktimer</name>
|
||||
<msb>1</msb>
|
||||
<bitRange>[1:1]</bitRange>
|
||||
<lsb>1</lsb>
|
||||
<description><![CDATA[Use the ticktimer as wakeup source]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>timer0</name>
|
||||
<msb>2</msb>
|
||||
<bitRange>[2:2]</bitRange>
|
||||
<lsb>2</lsb>
|
||||
<description><![CDATA[Use timer0 (os timer) as wakeup source]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>usb</name>
|
||||
<msb>3</msb>
|
||||
<bitRange>[3:3]</bitRange>
|
||||
<lsb>3</lsb>
|
||||
<description><![CDATA[Use USB k-transition as wakeup source]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>audio</name>
|
||||
<msb>4</msb>
|
||||
<bitRange>[4:4]</bitRange>
|
||||
<lsb>4</lsb>
|
||||
<description><![CDATA[Use audio FIFO empty as wakeup source]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>com</name>
|
||||
<msb>5</msb>
|
||||
<bitRange>[5:5]</bitRange>
|
||||
<lsb>5</lsb>
|
||||
<description><![CDATA[Use COM hold falling as wakeup source]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>rtc</name>
|
||||
<msb>6</msb>
|
||||
<bitRange>[6:6]</bitRange>
|
||||
<lsb>6</lsb>
|
||||
<description><![CDATA[Use RTC external interrupt as wakeup source]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>console</name>
|
||||
<msb>7</msb>
|
||||
<bitRange>[7:7]</bitRange>
|
||||
<lsb>7</lsb>
|
||||
<description><![CDATA[Use the console UART RX line dropping as wakeup source]]></description>
|
||||
</field>
|
||||
</fields>
|
||||
</register>
|
||||
<register>
|
||||
<name>ACTIVITY_RATE</name>
|
||||
<addressOffset>0x000c</addressOffset>
|
||||
<resetValue>0x00</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
<field>
|
||||
<name>counts_awake</name>
|
||||
<msb>30</msb>
|
||||
<bitRange>[30:0]</bitRange>
|
||||
<lsb>0</lsb>
|
||||
<description><![CDATA[number of counts in the last sample interval that we were active]]></description>
|
||||
</field>
|
||||
</fields>
|
||||
</register>
|
||||
<register>
|
||||
<name>SAMPLING_PERIOD</name>
|
||||
<addressOffset>0x0010</addressOffset>
|
||||
<resetValue>0x00</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
<field>
|
||||
<name>sample_period</name>
|
||||
<msb>30</msb>
|
||||
<bitRange>[30:0]</bitRange>
|
||||
<lsb>0</lsb>
|
||||
<description><![CDATA[Sampling period for counts awake, in 12MHz cycles]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>kill_sampler</name>
|
||||
<msb>31</msb>
|
||||
<bitRange>[31:31]</bitRange>
|
||||
<lsb>31</lsb>
|
||||
<description><![CDATA[When set, permanently disable reporting (in case you don't want the high-
|
||||
resolutionn timing sidechannel)]]></description>
|
||||
</field>
|
||||
</fields>
|
||||
</register>
|
||||
<register>
|
||||
<name>VIBE</name>
|
||||
<description><![CDATA[Vibration motor configuration register]]></description>
|
||||
<addressOffset>0x0008</addressOffset>
|
||||
<addressOffset>0x0014</addressOffset>
|
||||
<resetValue>0x00</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
|
|
@ -2675,8 +2777,8 @@ sources (power, sha512, and engine25519)]]></description>
|
|||
</register>
|
||||
<register>
|
||||
<name>EV_STATUS</name>
|
||||
<description><![CDATA[USB attach event]]></description>
|
||||
<addressOffset>0x000c</addressOffset>
|
||||
<description><![CDATA[update available to activity register]]></description>
|
||||
<addressOffset>0x0018</addressOffset>
|
||||
<resetValue>0x00</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
|
|
@ -2687,12 +2789,19 @@ sources (power, sha512, and engine25519)]]></description>
|
|||
<lsb>0</lsb>
|
||||
<description><![CDATA[Level of the ``usb_attach`` event]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>activity_update</name>
|
||||
<msb>1</msb>
|
||||
<bitRange>[1:1]</bitRange>
|
||||
<lsb>1</lsb>
|
||||
<description><![CDATA[Level of the ``activity_update`` event]]></description>
|
||||
</field>
|
||||
</fields>
|
||||
</register>
|
||||
<register>
|
||||
<name>EV_PENDING</name>
|
||||
<description><![CDATA[USB attach event]]></description>
|
||||
<addressOffset>0x0010</addressOffset>
|
||||
<description><![CDATA[update available to activity register]]></description>
|
||||
<addressOffset>0x001c</addressOffset>
|
||||
<resetValue>0x00</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
|
|
@ -2703,12 +2812,19 @@ sources (power, sha512, and engine25519)]]></description>
|
|||
<lsb>0</lsb>
|
||||
<description><![CDATA[USB attach event]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>activity_update</name>
|
||||
<msb>1</msb>
|
||||
<bitRange>[1:1]</bitRange>
|
||||
<lsb>1</lsb>
|
||||
<description><![CDATA[update available to activity register]]></description>
|
||||
</field>
|
||||
</fields>
|
||||
</register>
|
||||
<register>
|
||||
<name>EV_ENABLE</name>
|
||||
<description><![CDATA[USB attach event]]></description>
|
||||
<addressOffset>0x0014</addressOffset>
|
||||
<description><![CDATA[update available to activity register]]></description>
|
||||
<addressOffset>0x0020</addressOffset>
|
||||
<resetValue>0x00</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
|
|
@ -2719,12 +2835,19 @@ sources (power, sha512, and engine25519)]]></description>
|
|||
<lsb>0</lsb>
|
||||
<description><![CDATA[Write a ``1`` to enable the ``usb_attach`` Event]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>activity_update</name>
|
||||
<msb>1</msb>
|
||||
<bitRange>[1:1]</bitRange>
|
||||
<lsb>1</lsb>
|
||||
<description><![CDATA[Write a ``1`` to enable the ``activity_update`` Event]]></description>
|
||||
</field>
|
||||
</fields>
|
||||
</register>
|
||||
</registers>
|
||||
<addressBlock>
|
||||
<offset>0</offset>
|
||||
<size>0x18</size>
|
||||
<size>0x24</size>
|
||||
<usage>registers</usage>
|
||||
</addressBlock>
|
||||
<interrupt>
|
||||
|
|
@ -3316,7 +3439,7 @@ inject too fast.]]></description>
|
|||
<name>SEED1</name>
|
||||
<description><![CDATA[Bits 32-63 of `SEED_SEED`. Seed used for the build]]></description>
|
||||
<addressOffset>0x0000</addressOffset>
|
||||
<resetValue>0x178b8559</resetValue>
|
||||
<resetValue>0x742b5c26</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
<field>
|
||||
|
|
@ -3331,7 +3454,7 @@ inject too fast.]]></description>
|
|||
<name>SEED0</name>
|
||||
<description><![CDATA[Bits 0-31 of `SEED_SEED`.]]></description>
|
||||
<addressOffset>0x0004</addressOffset>
|
||||
<resetValue>0x1c2378e2</resetValue>
|
||||
<resetValue>0x645c9ef4</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
<field>
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -225,8 +225,11 @@ pub fn status_thread(canvas_gid_0: usize, canvas_gid_1: usize, canvas_gid_2: usi
|
|||
};
|
||||
write!(&mut uptime_tv, "{:02}:{:02} {} {}/{}", dt.hours, dt.minutes, day, dt.months, dt.days).unwrap();
|
||||
} else {
|
||||
write!(&mut uptime_tv, "Up {:02}:{:02}:{:02}",
|
||||
(elapsed_time / 3_600_000), (elapsed_time / 60_000) % 60, now_seconds).expect("|status: can't write string");
|
||||
let (latest_activity, period) = llio.activity_instantaneous().expect("couldn't get CPU activity");
|
||||
write!(&mut uptime_tv, "Up {}:{:02}:{:02} {:.0}%",
|
||||
(elapsed_time / 3_600_000), (elapsed_time / 60_000) % 60, now_seconds,
|
||||
((latest_activity as f32) / (period as f32)) * 100.0
|
||||
).expect("|status: can't write string");
|
||||
}
|
||||
log::trace!("|status: requesting draw of '{}'", uptime_tv);
|
||||
gam.post_textview(&mut uptime_tv).expect("|status: can't draw uptime");
|
||||
|
|
|
|||
|
|
@ -188,6 +188,7 @@ pub(crate) enum Opcode {
|
|||
PowerCryptoStatus,
|
||||
WfiOverride,
|
||||
DebugPowerdown,
|
||||
GetActivity,
|
||||
DebugWakeup,
|
||||
EcSnoopAllow, //(bool),
|
||||
EcReset,
|
||||
|
|
@ -215,6 +216,7 @@ pub(crate) enum Opcode {
|
|||
EventComEnable, //(bool),
|
||||
EventRtcEnable, //(bool),
|
||||
EventUsbAttachEnable, //(bool),
|
||||
EventActivityHappened,
|
||||
|
||||
/// internal from handler to main loop
|
||||
EventComHappened,
|
||||
|
|
|
|||
|
|
@ -511,6 +511,18 @@ impl Llio {
|
|||
Message::new_scalar(Opcode::DebugWakeup.to_usize().unwrap(), arg, 0, 0, 0)
|
||||
).map(|_| ())
|
||||
}
|
||||
pub fn activity_instantaneous(&self) -> Result<(u32, u32), xous::Error> {
|
||||
let response = send_message(self.conn,
|
||||
Message::new_blocking_scalar(Opcode::GetActivity.to_usize().unwrap(), 0, 0, 0, 0))?;
|
||||
if let xous::Result::Scalar2(active, total) = response {
|
||||
Ok(
|
||||
(active as u32, total as u32)
|
||||
)
|
||||
} else {
|
||||
log::error!("LLIO: unexpected return value: {:#?}", response);
|
||||
Err(xous::Error::InternalError)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@ mod implementation {
|
|||
power_susres: RegManager::<{utra::power::POWER_NUMREGS}>,
|
||||
xadc_csr: utralib::CSR<u32>, // be careful with this as XADC is shared with TRNG
|
||||
ticktimer: ticktimer_server::Ticktimer,
|
||||
activity_period: u32, // 12mhz clock cycles over which to sample activity
|
||||
destruct_armed: bool,
|
||||
}
|
||||
|
||||
|
|
@ -81,12 +82,23 @@ mod implementation {
|
|||
}
|
||||
fn handle_power_irq(_irq_no: usize, arg: *mut usize) {
|
||||
let xl = unsafe { &mut *(arg as *mut Llio) };
|
||||
if let Some(conn) = xl.handler_conn {
|
||||
xous::try_send_message(conn,
|
||||
xous::Message::new_scalar(Opcode::EventUsbHappened.to_usize().unwrap(),
|
||||
0, 0, 0, 0)).map(|_|()).unwrap();
|
||||
} else {
|
||||
log::error!("|handle_event_irq: USB interrupt, but no connection for notification!")
|
||||
if xl.power_csr.rf(utra::power::EV_PENDING_USB_ATTACH) != 0 {
|
||||
if let Some(conn) = xl.handler_conn {
|
||||
xous::try_send_message(conn,
|
||||
xous::Message::new_scalar(Opcode::EventUsbHappened.to_usize().unwrap(),
|
||||
0, 0, 0, 0)).map(|_|()).unwrap();
|
||||
} else {
|
||||
log::error!("|handle_event_irq: USB interrupt, but no connection for notification!")
|
||||
}
|
||||
} else if xl.power_csr.rf(utra::power::EV_PENDING_ACTIVITY_UPDATE) != 0 {
|
||||
if let Some(conn) = xl.handler_conn {
|
||||
let activity = xl.power_csr.rf(utra::power::ACTIVITY_RATE_COUNTS_AWAKE);
|
||||
xous::try_send_message(conn,
|
||||
xous::Message::new_scalar(Opcode::EventActivityHappened.to_usize().unwrap(),
|
||||
activity as usize, 0, 0, 0)).map(|_|()).unwrap();
|
||||
} else {
|
||||
log::error!("|handle_event_irq: activity interrupt, but no connection for notification!")
|
||||
}
|
||||
}
|
||||
xl.power_csr
|
||||
.wo(utra::power::EV_PENDING, xl.power_csr.r(utra::power::EV_PENDING));
|
||||
|
|
@ -167,6 +179,7 @@ mod implementation {
|
|||
power_susres: RegManager::new(power_csr.as_mut_ptr() as *mut u32),
|
||||
xadc_csr: CSR::new(xadc_csr.as_mut_ptr() as *mut u32),
|
||||
ticktimer,
|
||||
activity_period: 24_000_000, // 2 second interval initially
|
||||
destruct_armed: false,
|
||||
};
|
||||
|
||||
|
|
@ -205,6 +218,12 @@ mod implementation {
|
|||
xl.power_csr.rmwf(utra::power::POWER_CRYPTO_ON, 0); // save power on crypto block
|
||||
xl.power_susres.push(RegOrField::Reg(utra::power::POWER), None);
|
||||
xl.power_susres.push(RegOrField::Reg(utra::power::VIBE), None);
|
||||
|
||||
xl.power_csr.wfo(utra::power::SAMPLING_PERIOD_SAMPLE_PERIOD, xl.activity_period); // 2 second sampling intervals
|
||||
xl.power_susres.push(RegOrField::Reg(utra::power::SAMPLING_PERIOD), None);
|
||||
xl.power_csr.wfo(utra::power::EV_PENDING_ACTIVITY_UPDATE, 1);
|
||||
xl.power_csr.rmwf(utra::power::EV_ENABLE_ACTIVITY_UPDATE, 1);
|
||||
|
||||
xl.power_susres.push_fixed_value(RegOrField::Reg(utra::power::EV_PENDING), 0xFFFF_FFFF);
|
||||
xl.power_susres.push(RegOrField::Reg(utra::power::EV_ENABLE), None);
|
||||
|
||||
|
|
@ -225,6 +244,14 @@ mod implementation {
|
|||
self.event_susres.resume();
|
||||
self.gpio_susres.resume();
|
||||
}
|
||||
#[allow(dead_code)]
|
||||
pub fn activity_set_period(&mut self, period: u32) {
|
||||
self.activity_period = period;
|
||||
self.power_csr.wfo(utra::power::SAMPLING_PERIOD_SAMPLE_PERIOD, period);
|
||||
}
|
||||
pub fn activity_get_period(&mut self) -> u32 {
|
||||
self.activity_period
|
||||
}
|
||||
|
||||
pub fn gpio_dout(&mut self, d: u32) {
|
||||
self.gpio_csr.wfo(utra::gpio::OUTPUT_OUTPUT, d);
|
||||
|
|
@ -598,6 +625,7 @@ fn xmain() -> ! {
|
|||
// register a suspend/resume listener
|
||||
let sr_cid = xous::connect(llio_sid).expect("couldn't create suspend callback connection");
|
||||
let mut susres = susres::Susres::new(&xns, Opcode::SuspendResume as u32, sr_cid).expect("couldn't create suspend/resume object");
|
||||
let mut latest_activity = 0;
|
||||
|
||||
let mut usb_cb_conns: [Option<ScalarCallback>; 32] = [None; 32];
|
||||
let mut com_cb_conns: [Option<ScalarCallback>; 32] = [None; 32];
|
||||
|
|
@ -810,6 +838,15 @@ fn xmain() -> ! {
|
|||
Some(Opcode::GpioIntHappened) => msg_scalar_unpack!(msg, channel, _, _, _, {
|
||||
send_event(&gpio_cb_conns, channel as usize);
|
||||
}),
|
||||
Some(Opcode::EventActivityHappened) => msg_scalar_unpack!(msg, activity, _, _, _, {
|
||||
log::debug!("activity: {}", activity);
|
||||
latest_activity = activity as u32;
|
||||
}),
|
||||
Some(Opcode::GetActivity) => msg_blocking_scalar_unpack!(msg, _, _, _, _, {
|
||||
let period = llio.activity_get_period() as u32;
|
||||
log::debug!("activity/period: {}/{}, {:.2}%", latest_activity, period, (latest_activity as f32 / period as f32) * 100.0);
|
||||
xous::return_scalar2(msg.sender, latest_activity as usize, period as usize).expect("couldn't return activity");
|
||||
}),
|
||||
Some(Opcode::Quit) => {
|
||||
log::info!("Received quit opcode, exiting.");
|
||||
let dropconn = xous::connect(i2c_sid).unwrap();
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
<device schemaVersion="1.1" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="CMSIS-SVD.xsd" >
|
||||
<vendor>litex</vendor>
|
||||
<name>SOC</name>
|
||||
<description><![CDATA[Litex SoC 2021-06-01 16:27:12]]></description>
|
||||
<description><![CDATA[Litex SoC 2021-06-02 00:30:35]]></description>
|
||||
|
||||
<addressUnitBits>8</addressUnitBits>
|
||||
<width>32</width>
|
||||
|
|
@ -1162,7 +1162,7 @@ register to disable individual events.]]></description>
|
|||
<register>
|
||||
<name>GIT_MAJOR</name>
|
||||
<description><![CDATA[Major git tag version. For example, this firmware was built from git tag
|
||||
``v0.0.0``, so this value is ``0``.]]></description>
|
||||
``v0.8.1``, so this value is ``0``.]]></description>
|
||||
<addressOffset>0x0008</addressOffset>
|
||||
<resetValue>0x00</resetValue>
|
||||
<size>32</size>
|
||||
|
|
@ -1178,9 +1178,9 @@ register to disable individual events.]]></description>
|
|||
<register>
|
||||
<name>GIT_MINOR</name>
|
||||
<description><![CDATA[Minor git tag version. For example, this firmware was built from git tag
|
||||
``v0.0.0``, so this value is ``0``.]]></description>
|
||||
``v0.8.1``, so this value is ``8``.]]></description>
|
||||
<addressOffset>0x000c</addressOffset>
|
||||
<resetValue>0x00</resetValue>
|
||||
<resetValue>0x08</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
<field>
|
||||
|
|
@ -1194,9 +1194,9 @@ register to disable individual events.]]></description>
|
|||
<register>
|
||||
<name>GIT_REVISION</name>
|
||||
<description><![CDATA[Revision git tag version. For example, this firmware was built from git tag
|
||||
``v0.0.0``, so this value is ``0``.]]></description>
|
||||
``v0.8.1``, so this value is ``1``.]]></description>
|
||||
<addressOffset>0x0010</addressOffset>
|
||||
<resetValue>0x00</resetValue>
|
||||
<resetValue>0x01</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
<field>
|
||||
|
|
@ -1210,10 +1210,10 @@ register to disable individual events.]]></description>
|
|||
<register>
|
||||
<name>GIT_GITREV</name>
|
||||
<description><![CDATA[First 32-bits of the git revision. This documentation was built from git rev
|
||||
``9e77f50e``, so this value is 2658661646, which should be enough to check out
|
||||
``cf5b40e6``, so this value is 3478864102, which should be enough to check out
|
||||
the exact git version used to build this firmware.]]></description>
|
||||
<addressOffset>0x0014</addressOffset>
|
||||
<resetValue>0x9e77f50e</resetValue>
|
||||
<resetValue>0xcf5b40e6</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
<field>
|
||||
|
|
@ -2657,10 +2657,112 @@ sources (power, sha512, and engine25519)]]></description>
|
|||
</field>
|
||||
</fields>
|
||||
</register>
|
||||
<register>
|
||||
<name>WAKEUP_SOURCE</name>
|
||||
<addressOffset>0x0008</addressOffset>
|
||||
<resetValue>0xff</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
<field>
|
||||
<name>kbd</name>
|
||||
<msb>0</msb>
|
||||
<bitRange>[0:0]</bitRange>
|
||||
<lsb>0</lsb>
|
||||
<description><![CDATA[Use the keyboard as wakeup source]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>ticktimer</name>
|
||||
<msb>1</msb>
|
||||
<bitRange>[1:1]</bitRange>
|
||||
<lsb>1</lsb>
|
||||
<description><![CDATA[Use the ticktimer as wakeup source]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>timer0</name>
|
||||
<msb>2</msb>
|
||||
<bitRange>[2:2]</bitRange>
|
||||
<lsb>2</lsb>
|
||||
<description><![CDATA[Use timer0 (os timer) as wakeup source]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>usb</name>
|
||||
<msb>3</msb>
|
||||
<bitRange>[3:3]</bitRange>
|
||||
<lsb>3</lsb>
|
||||
<description><![CDATA[Use USB k-transition as wakeup source]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>audio</name>
|
||||
<msb>4</msb>
|
||||
<bitRange>[4:4]</bitRange>
|
||||
<lsb>4</lsb>
|
||||
<description><![CDATA[Use audio FIFO empty as wakeup source]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>com</name>
|
||||
<msb>5</msb>
|
||||
<bitRange>[5:5]</bitRange>
|
||||
<lsb>5</lsb>
|
||||
<description><![CDATA[Use COM hold falling as wakeup source]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>rtc</name>
|
||||
<msb>6</msb>
|
||||
<bitRange>[6:6]</bitRange>
|
||||
<lsb>6</lsb>
|
||||
<description><![CDATA[Use RTC external interrupt as wakeup source]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>console</name>
|
||||
<msb>7</msb>
|
||||
<bitRange>[7:7]</bitRange>
|
||||
<lsb>7</lsb>
|
||||
<description><![CDATA[Use the console UART RX line dropping as wakeup source]]></description>
|
||||
</field>
|
||||
</fields>
|
||||
</register>
|
||||
<register>
|
||||
<name>ACTIVITY_RATE</name>
|
||||
<addressOffset>0x000c</addressOffset>
|
||||
<resetValue>0x00</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
<field>
|
||||
<name>counts_awake</name>
|
||||
<msb>30</msb>
|
||||
<bitRange>[30:0]</bitRange>
|
||||
<lsb>0</lsb>
|
||||
<description><![CDATA[number of counts in the last sample interval that we were active]]></description>
|
||||
</field>
|
||||
</fields>
|
||||
</register>
|
||||
<register>
|
||||
<name>SAMPLING_PERIOD</name>
|
||||
<addressOffset>0x0010</addressOffset>
|
||||
<resetValue>0x00</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
<field>
|
||||
<name>sample_period</name>
|
||||
<msb>30</msb>
|
||||
<bitRange>[30:0]</bitRange>
|
||||
<lsb>0</lsb>
|
||||
<description><![CDATA[Sampling period for counts awake, in 12MHz cycles]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>kill_sampler</name>
|
||||
<msb>31</msb>
|
||||
<bitRange>[31:31]</bitRange>
|
||||
<lsb>31</lsb>
|
||||
<description><![CDATA[When set, permanently disable reporting (in case you don't want the high-
|
||||
resolutionn timing sidechannel)]]></description>
|
||||
</field>
|
||||
</fields>
|
||||
</register>
|
||||
<register>
|
||||
<name>VIBE</name>
|
||||
<description><![CDATA[Vibration motor configuration register]]></description>
|
||||
<addressOffset>0x0008</addressOffset>
|
||||
<addressOffset>0x0014</addressOffset>
|
||||
<resetValue>0x00</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
|
|
@ -2675,8 +2777,8 @@ sources (power, sha512, and engine25519)]]></description>
|
|||
</register>
|
||||
<register>
|
||||
<name>EV_STATUS</name>
|
||||
<description><![CDATA[USB attach event]]></description>
|
||||
<addressOffset>0x000c</addressOffset>
|
||||
<description><![CDATA[update available to activity register]]></description>
|
||||
<addressOffset>0x0018</addressOffset>
|
||||
<resetValue>0x00</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
|
|
@ -2687,12 +2789,19 @@ sources (power, sha512, and engine25519)]]></description>
|
|||
<lsb>0</lsb>
|
||||
<description><![CDATA[Level of the ``usb_attach`` event]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>activity_update</name>
|
||||
<msb>1</msb>
|
||||
<bitRange>[1:1]</bitRange>
|
||||
<lsb>1</lsb>
|
||||
<description><![CDATA[Level of the ``activity_update`` event]]></description>
|
||||
</field>
|
||||
</fields>
|
||||
</register>
|
||||
<register>
|
||||
<name>EV_PENDING</name>
|
||||
<description><![CDATA[USB attach event]]></description>
|
||||
<addressOffset>0x0010</addressOffset>
|
||||
<description><![CDATA[update available to activity register]]></description>
|
||||
<addressOffset>0x001c</addressOffset>
|
||||
<resetValue>0x00</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
|
|
@ -2703,12 +2812,19 @@ sources (power, sha512, and engine25519)]]></description>
|
|||
<lsb>0</lsb>
|
||||
<description><![CDATA[USB attach event]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>activity_update</name>
|
||||
<msb>1</msb>
|
||||
<bitRange>[1:1]</bitRange>
|
||||
<lsb>1</lsb>
|
||||
<description><![CDATA[update available to activity register]]></description>
|
||||
</field>
|
||||
</fields>
|
||||
</register>
|
||||
<register>
|
||||
<name>EV_ENABLE</name>
|
||||
<description><![CDATA[USB attach event]]></description>
|
||||
<addressOffset>0x0014</addressOffset>
|
||||
<description><![CDATA[update available to activity register]]></description>
|
||||
<addressOffset>0x0020</addressOffset>
|
||||
<resetValue>0x00</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
|
|
@ -2719,12 +2835,19 @@ sources (power, sha512, and engine25519)]]></description>
|
|||
<lsb>0</lsb>
|
||||
<description><![CDATA[Write a ``1`` to enable the ``usb_attach`` Event]]></description>
|
||||
</field>
|
||||
<field>
|
||||
<name>activity_update</name>
|
||||
<msb>1</msb>
|
||||
<bitRange>[1:1]</bitRange>
|
||||
<lsb>1</lsb>
|
||||
<description><![CDATA[Write a ``1`` to enable the ``activity_update`` Event]]></description>
|
||||
</field>
|
||||
</fields>
|
||||
</register>
|
||||
</registers>
|
||||
<addressBlock>
|
||||
<offset>0</offset>
|
||||
<size>0x18</size>
|
||||
<size>0x24</size>
|
||||
<usage>registers</usage>
|
||||
</addressBlock>
|
||||
<interrupt>
|
||||
|
|
@ -3316,7 +3439,7 @@ inject too fast.]]></description>
|
|||
<name>SEED1</name>
|
||||
<description><![CDATA[Bits 32-63 of `SEED_SEED`. Seed used for the build]]></description>
|
||||
<addressOffset>0x0000</addressOffset>
|
||||
<resetValue>0x56f38707</resetValue>
|
||||
<resetValue>0x742b5c26</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
<field>
|
||||
|
|
@ -3331,7 +3454,7 @@ inject too fast.]]></description>
|
|||
<name>SEED0</name>
|
||||
<description><![CDATA[Bits 0-31 of `SEED_SEED`.]]></description>
|
||||
<addressOffset>0x0004</addressOffset>
|
||||
<resetValue>0x400f5344</resetValue>
|
||||
<resetValue>0x645c9ef4</resetValue>
|
||||
<size>32</size>
|
||||
<fields>
|
||||
<field>
|
||||
|
|
|
|||
Loading…
Reference in a new issue