Skip to content

Commit fe2be29

Browse files
committed
Add support to read neureka ECC-related internal registers
1 parent 67113b3 commit fe2be29

5 files changed

Lines changed: 21 additions & 0 deletions

File tree

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
@@ -44,6 +44,8 @@
4444
#define NEUREKA_WEIGHT_BANDWIDTH_BYTES_1x1 (NNX_NEUREKA_BANDWIDTH_1x1/8)
4545
#define NEUREKA_WEIGHT_BANDWIDTH_BYTES_3x3 (NNX_NEUREKA_BANDWIDTH_3x3/8)
4646

47+
#define NEUREKA_ECC_REGS_NUM (4)
48+
4749
/* TASK REGISTERS */
4850

4951
// 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)