From 82d225899bd3d4fd07d70cac80f50c1b288dc4a3 Mon Sep 17 00:00:00 2001 From: Davide Grohmann Date: Mon, 25 Apr 2022 12:52:38 +0200 Subject: Add support for rejected inference responses Change-Id: I62e13df69c712ed4cf70766429b4cb13fc9c9dcb --- kernel/ethosu_inference.c | 44 ++++++++++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 16 deletions(-) (limited to 'kernel/ethosu_inference.c') 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); -- cgit v1.2.1