Init the cur_sample_rate to 200kHz. This is now the default sample
rate for the ASIX Sigma if no other is specified by -c samplerate=N
on the command line. Without this change, the driver would crash on
SIGFPE because a division by zero would happen.
Signed-off-by: Marek Vasut <marex@denx.de>
Due to the recent changes in the sigma driver, the trigger handling got
broken. Fix this by properly calculating and propagating the fact that
the trigger happened.
Signed-off-by: Marek Vasut <marex@denx.de>
Pull out the code for decoding the DRAM clusters into separate function.
This shall improve readability some more.
Signed-off-by: Marek Vasut <marex@denx.de>
These two values can pulled out from devc->state, so there really is
no need to pass them as function argument when we already pass the
devc.
Signed-off-by: Marek Vasut <marex@denx.de>
This function could have never returned correct data. Rework the decoding
logic according to the Sigma documentation. This patch also fixes the
handling of partial DRAM lines and partial DRAM clusters.
While at it, do not allocate megabytes of data on stack, just allocate 2KiB
which is plenty for all the work this function needs to do.
Signed-off-by: Marek Vasut <marex@denx.de>
The support for trailing DRAM lines was broken. This patch starts
rework of support for this, but in order to do that, we need to
rework decode_chunk_ts() a little first.
This patch adjusts the decode_chunk_ts() a little to receive the
total amount of events in DRAM line instead of some nonsense value.
This patch temporarily removes the support for the trailing DRAM
lines until the decode_chunk_ts() is fixed to cope with this, so
yes, this patch introduces breakage!
Signed-off-by: Marek Vasut <marex@denx.de>
Instead of this ad-hoc readout voodoo, use proper function to read
the timestemp. One which will not break even on big-endian machines.
Signed-off-by: Marek Vasut <marex@denx.de>
Use proper structure instead of plain buffer of uint8_t for the contents
of DRAM in download_capture(). This is beneficial as we can interpret the
contents easily.
Signed-off-by: Marek Vasut <marex@denx.de>
Clean up the way decode_chunk_ts() is called a little. Introduce a variable
which will not be -1 only in case a trigger happened on the particular DRAM
line.
Signed-off-by: Marek Vasut <marex@denx.de>
In the current configuration, the download capture used 32KiB buffer
for samples. This was the upper limit this function could download
from the Sigma. Even the sigma_read_dram() was only called once to
read up-to 32 DRAM line from address 0x0 in the DRAM.
This patch reworks the function to call sigma_read_dram() in a loop
in case there is need to download more than 32 DRAM lines of data
from Sigma. The data are then correctly passed for decoding to the
decoding function.
Signed-off-by: Marek Vasut <marex@denx.de>
Avoid allocating 32KiB of data on stack in download_capture(). Instead,
do a glib-variant of calloc(1, ) to allocate the data for the samples
which will be downloaded. This avoids explosions of stack on systems
with tight stack limits.
Furthermore, define structures describing the organisation of Sigma's
DRAM memory and start using those instead of ad-hoc preprocessor macros
defining the sizes of various structures in memory.
Signed-off-by: Marek Vasut <marex@denx.de>
The trigger position, stop position and chunk in which the trigger happened
are no longer needed in the global scope. Make those variables local to the
download_capture() function.
Signed-off-by: Marek Vasut <marex@denx.de>
Move all the register I/O that is necessary to do the download of samples
from Sigma into download_capture() function. This makes the downloading
code contained a bit more again.
Signed-off-by: Marek Vasut <marex@denx.de>
Reorder the sigma_capture_mode() function so that the part which handles
the download of samples from Sigma is clearly separated from the tests if
the download should be started.
Signed-off-by: Marek Vasut <marex@denx.de>
Pull out the code handling the Sigma which is in CAPTURE mode into
a separate function. This is so we can start reworking this entire
code easily soon.
Signed-off-by: Marek Vasut <marex@denx.de>
Check the position of ForceStop and Trigger events only in case we
are in CAPTURE state, it's useless to do this unconditionally when
receive_data() is called.
Signed-off-by: Marek Vasut <marex@denx.de>
Decode the logic mode start sequence into a series of FPGA instructions
instead and get rid of this sequence of magic numbers.
Signed-off-by: Marek Vasut <marex@denx.de>