Skip to content

Commit 47baf51

Browse files
committed
Add support to read neureka ECC-related internal registers
(cherry picked from commit fe2be29)
1 parent 37a8013 commit 47baf51

File tree

5 files changed

+21
-0
lines changed

5 files changed

+21
-0
lines changed

inc/pulp_nnx_neureka.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,9 @@ int neureka_nnx_resolve_check(neureka_dev_t *dev, neureka_task_t *task);
5959
* Block until you can resolve the task.
6060
*/
6161
void neureka_nnx_resolve_wait(neureka_dev_t *dev, neureka_task_t *task);
62+
63+
/** neureka_nnx_read_ecc_regs
64+
*
65+
* Read ECC-related internal registers.
66+
*/
67+
void neureka_nnx_read_ecc_regs(neureka_dev_t *dev, uint32_t *ecc_regs);

neureka/hal/neureka_task_defs.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@
4141
#define NEUREKA_OUTPUT_BANDWIDTH_BYTES (32)
4242
#define NEUREKA_WEIGHT_BANDWIDTH_BYTES (32)
4343

44+
#define NEUREKA_ECC_REGS_NUM (4)
45+
4446
/* TASK REGISTERS */
4547

4648
// job configuration

src/pulp_nnx_neureka.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,7 @@ void neureka_nnx_resolve_wait(neureka_dev_t *dev, neureka_task_t *task) {
7474
neureka_bsp_event_wait_and_clear();
7575
}
7676
}
77+
78+
void neureka_nnx_read_ecc_regs(neureka_dev_t *dev, uint32_t *ecc_regs) {
79+
hwpe_ecc_regs_check(&dev->hwpe_dev, ecc_regs, NEUREKA_ECC_REGS_NUM);
80+
}

util/hwpe.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
#define HWPE_SOFT_CLEAR 5
3030
#define HWPE_SWSYNC 6
3131
#define HWPE_TASK_REG_OFFSET 8
32+
#define HWPE_PARAMS_REG_OFFSET 48
33+
#define HWPE_ECC_REG_OFFSET (HWPE_TASK_REG_OFFSET+HWPE_PARAMS_REG_OFFSET)
3234

3335
inline void hwpe_reg_write(hwpe_dev_t *dev, int reg, uint32_t value) {
3436
dev->base_addr[reg] = value;
@@ -83,3 +85,9 @@ void hwpe_task_queue_release(hwpe_dev_t *dev) {
8385
uint8_t hwpe_last_task_id(hwpe_dev_t *dev) {
8486
return (uint8_t)hwpe_reg_read(dev, HWPE_RUNNING_JOB);
8587
}
88+
89+
void hwpe_ecc_regs_check(hwpe_dev_t *dev, uint32_t *data, int len) {
90+
for (int i = 0; i < len; i++) {
91+
data[i] = hwpe_reg_read(dev, HWPE_ECC_REG_OFFSET + i);
92+
}
93+
}

util/hwpe.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,6 @@ void hwpe_task_queue_write_task(hwpe_dev_t *dev, uint32_t *data, int len);
3939
void hwpe_task_queue_release_and_run(hwpe_dev_t *dev);
4040
void hwpe_task_queue_release(hwpe_dev_t *dev);
4141
uint8_t hwpe_last_task_id(hwpe_dev_t *dev);
42+
void hwpe_ecc_regs_check(hwpe_dev_t *dev, uint32_t *data, int len);
4243

4344
#endif // !__HWPE_H__

0 commit comments

Comments
 (0)