diff options
author | Davide Grohmann <davide.grohmann@arm.com> | 2022-04-25 12:52:38 +0200 |
---|---|---|
committer | Davide Grohmann <davide.grohmann@arm.com> | 2022-05-02 09:40:15 +0200 |
commit | 82d225899bd3d4fd07d70cac80f50c1b288dc4a3 (patch) | |
tree | d0edc8d0fa059bba99e00377feab1aad42385590 /kernel | |
parent | 415de582dcf6f06dc71c9c48eeed0a01bfefc222 (diff) | |
download | ethos-u-linux-driver-stack-82d225899bd3d4fd07d70cac80f50c1b288dc4a3.tar.gz |
Add support for rejected inference responses
Change-Id: I62e13df69c712ed4cf70766429b4cb13fc9c9dcb
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/ethosu_core_interface.h | 4 | ||||
-rw-r--r-- | kernel/ethosu_inference.c | 44 | ||||
-rw-r--r-- | kernel/uapi/ethosu.h | 4 |
3 files changed, 34 insertions, 18 deletions
diff --git a/kernel/ethosu_core_interface.h b/kernel/ethosu_core_interface.h index 5a6e55d..76fe35e 100644 --- a/kernel/ethosu_core_interface.h +++ b/kernel/ethosu_core_interface.h @@ -95,7 +95,9 @@ struct ethosu_core_queue { */ enum ethosu_core_status { ETHOSU_CORE_STATUS_OK, - ETHOSU_CORE_STATUS_ERROR + ETHOSU_CORE_STATUS_ERROR, + ETHOSU_CORE_STATUS_RUNNING, + ETHOSU_CORE_STATUS_REJECTED, }; /** diff --git a/kernel/ethosu_inference.c b/kernel/ethosu_inference.c index 3c18bbd..73a8c06 100644 --- a/kernel/ethosu_inference.c +++ b/kernel/ethosu_inference.c @@ -70,6 +70,12 @@ static const char *status_to_string(const enum ethosu_uapi_status status) case ETHOSU_UAPI_STATUS_ERROR: { return "Error"; } + case ETHOSU_UAPI_STATUS_RUNNING: { + return "Running"; + } + case ETHOSU_UAPI_STATUS_REJECTED: { + return "Rejected"; + } default: { return "Unknown"; } @@ -93,6 +99,8 @@ static int ethosu_inference_send(struct ethosu_inference *inf) if (ret) return ret; + inf->status = ETHOSU_UAPI_STATUS_RUNNING; + ethosu_inference_get(inf); return 0; @@ -412,29 +420,33 @@ void ethosu_inference_rsp(struct ethosu_device *edev, if (ret) inf->status = ETHOSU_UAPI_STATUS_ERROR; } + } else if (rsp->status == ETHOSU_CORE_STATUS_REJECTED) { + inf->status = ETHOSU_UAPI_STATUS_REJECTED; } else { inf->status = ETHOSU_UAPI_STATUS_ERROR; } - for (i = 0; i < ETHOSU_CORE_PMU_MAX; i++) { - inf->pmu_event_config[i] = rsp->pmu_event_config[i]; - inf->pmu_event_count[i] = rsp->pmu_event_count[i]; - } + if (inf->status == ETHOSU_UAPI_STATUS_OK) { + for (i = 0; i < ETHOSU_CORE_PMU_MAX; i++) { + inf->pmu_event_config[i] = rsp->pmu_event_config[i]; + inf->pmu_event_count[i] = rsp->pmu_event_count[i]; + } - inf->pmu_cycle_counter_enable = rsp->pmu_cycle_counter_enable; - inf->pmu_cycle_counter_count = rsp->pmu_cycle_counter_count; + inf->pmu_cycle_counter_enable = rsp->pmu_cycle_counter_enable; + inf->pmu_cycle_counter_count = rsp->pmu_cycle_counter_count; - dev_info(edev->dev, - "PMU events. config=[%u, %u, %u, %u], count=[%u, %u, %u, %u]\n", - inf->pmu_event_config[0], inf->pmu_event_config[1], - inf->pmu_event_config[2], inf->pmu_event_config[3], - inf->pmu_event_count[0], inf->pmu_event_count[1], - inf->pmu_event_count[2], inf->pmu_event_count[3]); + dev_info(edev->dev, + "PMU events. config=[%u, %u, %u, %u], count=[%u, %u, %u, %u]\n", + inf->pmu_event_config[0], inf->pmu_event_config[1], + inf->pmu_event_config[2], inf->pmu_event_config[3], + inf->pmu_event_count[0], inf->pmu_event_count[1], + inf->pmu_event_count[2], inf->pmu_event_count[3]); - dev_info(edev->dev, - "PMU cycle counter. enable=%u, count=%llu\n", - inf->pmu_cycle_counter_enable, - inf->pmu_cycle_counter_count); + dev_info(edev->dev, + "PMU cycle counter. enable=%u, count=%llu\n", + inf->pmu_cycle_counter_enable, + inf->pmu_cycle_counter_count); + } inf->done = true; wake_up_interruptible(&inf->waitq); diff --git a/kernel/uapi/ethosu.h b/kernel/uapi/ethosu.h index fda7fc2..4627cb9 100644 --- a/kernel/uapi/ethosu.h +++ b/kernel/uapi/ethosu.h @@ -75,7 +75,9 @@ namespace EthosU { */ enum ethosu_uapi_status { ETHOSU_UAPI_STATUS_OK, - ETHOSU_UAPI_STATUS_ERROR + ETHOSU_UAPI_STATUS_ERROR, + ETHOSU_UAPI_STATUS_RUNNING, + ETHOSU_UAPI_STATUS_REJECTED, }; /** |