}
if (npu_dspm_size < model_dspm_size) {
- logerr (TAG, "The minimum DSPM size of model is %u KiB (NPU: %u KiB)\n", model_dspm_size / 1024,
- npu_dspm_size / 1024);
+ logerr (TAG, "The minimum DSPM size is %u KiB (vs. DSPM size for vISA: %u KiB)\n",
+ model_dspm_size / 1024, npu_dspm_size / 1024);
return -ENOMEM;
}
#define TAG _N94
#define MAX_EMUL_DEVICES (3)
+#define DEFAULT_DSPM_SIZE (128 * 1024) /* 128 KiB */
+#define RESERVED_DSPM_SIZE (64 * 1024) /* 64 KiB */
static uint64_t global_exec_seq = 0;
return -EINVAL;
}
- /* unlimited size */
- *dspm = UINT32_MAX;
+ *dspm = DEFAULT_DSPM_SIZE;
+
+ char *dspm_str = getenv ("MRPSIM_SPM_SIZE");
+ if (dspm_str != NULL) {
+ unsigned long val;
+ char *unit = nullptr;
+
+ errno = 0;
+ val = strtoul (dspm_str, &unit, 10);
+ if (errno == 0) {
+ if (unit) {
+ if (*unit == 'K' || *unit == 'k') {
+ val *= 1024;
+ } else if (*unit == 'M' || *unit == 'm') {
+ val *= 1024 * 1024;
+ } else if (*unit == 'G' || *unit == 'g') {
+ val *= 1024 * 1024 * 1024;
+ }
+ }
+
+ /* unlimited size */
+ if (val > UINT32_MAX)
+ val = UINT32_MAX;
+
+ *dspm = static_cast<uint32_t> (val);
+ }
+ }
+
+ if (*dspm > RESERVED_DSPM_SIZE)
+ *dspm -= RESERVED_DSPM_SIZE;
+ else
+ *dspm = 0;
return 0;
}