Received: by 2002:a25:ca44:0:0:0:0:0 with SMTP id a65csp1862980ybg; Thu, 30 Jul 2020 04:49:58 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyNaV/sXgZloH6w/H4diuq0SgFm4JpDGR01WJq+X7pfw2gi/Iu/jEjwCcOluDDecZMVEvKS X-Received: by 2002:a50:bf09:: with SMTP id f9mr2183693edk.249.1596109798388; Thu, 30 Jul 2020 04:49:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1596109798; cv=none; d=google.com; s=arc-20160816; b=fe/5zn3fw7dZn495i2Dh4PRz/05gIROpEgwNHdkho1bnUhQ0K7F1nV3Qj/5yLe3LgH QeAZVnqtn2EldnURaRjwbIVl1z9D1GsIbGB2oIm+lgDe/N7H6XNFeNMqrcsOPOgM4YwI LrpwNm+vIDpXsIPMZm5dN2k4rzTw0BkIPGzYNo5Z4ZdK0K0QehSjuX9EGOmi4V4Sw+Rd Skx0cJr+9Fr9Oer6OhPrUtBxGAjUlB7D+eBjYe2Q9oDv8FDYYWF2iIif79EHc25syEfD IAXNYU3ki9J9Wi8DBrLG12QxlcEeeK93la4mDhSxBBF9DuySNOpjOsDWx6pvZ3D43egY 0jjg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=YqqkwlyeTqm8wK7NZ5whyaJb7lnPkkqR0DOowlryp8Y=; b=AJNyZP7gGS/yx3M3A9sRHxyHMINdweyMYqCmlT7RzcxRYIWE+K8upldOCMQyxl7Ut0 TdUuuD+zOVeEN/O+RFsKaJMW+/oNVg3PbD288gnESJqYqOX42sLVDWosAV9VhAbvUl2H ApkpQNsKHk+jiXMbGoRgb5Mgyia8X6jaeRdiVhEwnt+IZXQ0xRmIrFvRqNk7Wdu/t7LM P/8ENmdLZyEYXvbYtZMdLWgbxUngiK9VyX45nTXqILxBtb02qupskWqm+bNXZpJmr3+i gQIVEi/hcI/18hBGAWY2hk2MgIbxNzINPfdGbAVYSK21CDoDhBF0zBLDDh8UtzR1hQoC 3JSA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=jzg2hwb9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id fy21si2783339ejb.725.2020.07.30.04.49.36; Thu, 30 Jul 2020 04:49:58 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=jzg2hwb9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728004AbgG3Lr2 (ORCPT + 99 others); Thu, 30 Jul 2020 07:47:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58458 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727988AbgG3Lr0 (ORCPT ); Thu, 30 Jul 2020 07:47:26 -0400 Received: from mail-wm1-x344.google.com (mail-wm1-x344.google.com [IPv6:2a00:1450:4864:20::344]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 07B11C061794 for ; Thu, 30 Jul 2020 04:47:25 -0700 (PDT) Received: by mail-wm1-x344.google.com with SMTP id 3so5928809wmi.1 for ; Thu, 30 Jul 2020 04:47:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=YqqkwlyeTqm8wK7NZ5whyaJb7lnPkkqR0DOowlryp8Y=; b=jzg2hwb9COuCcPenG5X/xHPyQOHLNtf2QtJlU5FLwtZ+lLCbvchX7MVPqmY9XTj1DR tRl3OzzMxFCFPudy4ugU7ga6eYI342MheKypEiZkx/8CSk0c/Tngm8E9MbE0dCThXxD4 FjQqLDapoxF6GgrBJijQ0//pN/MygWlG1bwdZdl9mV6LIsCwo/0d6NrLjPw1x4GnPInl gxvpccHvhUKBcOTZo5VkRx+FBgtM1IdpJ3F2CYv+S7eWTiGbJVDzsGNTVllBinqruSVh oVxOqvPFUcEQ8mDpT9DxVg38lK1sHBL/8p++zg00HL/+Quj3n7j6qNU5Cyqj0Lakd2dI 8m+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=YqqkwlyeTqm8wK7NZ5whyaJb7lnPkkqR0DOowlryp8Y=; b=i2p479oPBAIMMrJfD7CDGjOGiurK62aCjxcETKOCffSst6EO6IusV0a8vdifDghZtu 9oBWQMZbMAHuzXbpxNYPNGUuy97+qvIUFNiQH5jBqkL0YKjMBJGQZK5n2O6KFPL+AW4g ibACGXhTB8Rb6r0h+GbyvycdEAvN41dAsjg4HExWdrs/YRWhDVR6uoI3s1RApgrhrz/1 CzrJnPWrcuUyMy42xLIjP3K9KDCRa/xmKyejxPqOzceQ1W2sxUu15TMxzCKk5axN5JT/ AXyIe+V5TSnaQX0FInKUqYdcEtL+R10p/LMcL13Vp5+NGXCzgzAQn/EjtukD8EIXSDhC IZhw== X-Gm-Message-State: AOAM533QFVoyZjTWDofveZ91TLOl0LPgKP290lC5bNXIqDSNP1Em9b5K 4mb80+zKmg8oTazT6MXbIASlFw== X-Received: by 2002:a1c:6289:: with SMTP id w131mr4902033wmb.41.1596109643689; Thu, 30 Jul 2020 04:47:23 -0700 (PDT) Received: from localhost.localdomain ([195.24.90.54]) by smtp.gmail.com with ESMTPSA id 32sm9636691wrn.86.2020.07.30.04.47.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Jul 2020 04:47:23 -0700 (PDT) From: Stanimir Varbanov To: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Stanimir Varbanov Subject: [PATCH 3/3] venus: Add new interface queues reinit Date: Thu, 30 Jul 2020 14:46:32 +0300 Message-Id: <20200730114632.6717-4-stanimir.varbanov@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200730114632.6717-1-stanimir.varbanov@linaro.org> References: <20200730114632.6717-1-stanimir.varbanov@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Presently the recovery mechanism is using two hfi functions to destroy and create interface queues. For the purpose of recovery we don't need to free and allocate the memory used for interface message queues, that's why we introduce new function which just reinit the queues. Also this will give to the recovery procedure one less reason to fail (if for some reason we couldn't allocate memory). Signed-off-by: Stanimir Varbanov --- drivers/media/platform/qcom/venus/core.c | 3 +- drivers/media/platform/qcom/venus/hfi.c | 5 ++ drivers/media/platform/qcom/venus/hfi.h | 1 + drivers/media/platform/qcom/venus/hfi_venus.c | 51 +++++++++++++++++++ drivers/media/platform/qcom/venus/hfi_venus.h | 1 + 5 files changed, 59 insertions(+), 2 deletions(-) diff --git a/drivers/media/platform/qcom/venus/core.c b/drivers/media/platform/qcom/venus/core.c index 46f6e34d435a..eda8f35425df 100644 --- a/drivers/media/platform/qcom/venus/core.c +++ b/drivers/media/platform/qcom/venus/core.c @@ -72,8 +72,7 @@ static void venus_sys_error_handler(struct work_struct *work) while (core->pmdomains[0] && pm_runtime_active(core->pmdomains[0])) usleep_range(1000, 1500); - hfi_destroy(core); - ret |= hfi_create(core, &venus_core_ops); + hfi_reinit(core); pm_runtime_get_sync(core->dev); diff --git a/drivers/media/platform/qcom/venus/hfi.c b/drivers/media/platform/qcom/venus/hfi.c index a211eb93e0f9..a59022adb14c 100644 --- a/drivers/media/platform/qcom/venus/hfi.c +++ b/drivers/media/platform/qcom/venus/hfi.c @@ -517,3 +517,8 @@ void hfi_destroy(struct venus_core *core) { venus_hfi_destroy(core); } + +void hfi_reinit(struct venus_core *core) +{ + venus_hfi_queues_reinit(core); +} diff --git a/drivers/media/platform/qcom/venus/hfi.h b/drivers/media/platform/qcom/venus/hfi.h index 62c315291484..f25d412d6553 100644 --- a/drivers/media/platform/qcom/venus/hfi.h +++ b/drivers/media/platform/qcom/venus/hfi.h @@ -145,6 +145,7 @@ struct hfi_ops { int hfi_create(struct venus_core *core, const struct hfi_core_ops *ops); void hfi_destroy(struct venus_core *core); +void hfi_reinit(struct venus_core *core); int hfi_core_init(struct venus_core *core); int hfi_core_deinit(struct venus_core *core, bool blocking); diff --git a/drivers/media/platform/qcom/venus/hfi_venus.c b/drivers/media/platform/qcom/venus/hfi_venus.c index 3392fd177d22..90067cd8c892 100644 --- a/drivers/media/platform/qcom/venus/hfi_venus.c +++ b/drivers/media/platform/qcom/venus/hfi_venus.c @@ -1603,3 +1603,54 @@ int venus_hfi_create(struct venus_core *core) core->ops = NULL; return ret; } + +void venus_hfi_queues_reinit(struct venus_core *core) +{ + struct venus_hfi_device *hdev = to_hfi_priv(core); + struct hfi_queue_table_header *tbl_hdr; + struct iface_queue *queue; + struct hfi_sfr *sfr; + unsigned int i; + + mutex_lock(&hdev->lock); + + for (i = 0; i < IFACEQ_NUM; i++) { + queue = &hdev->queues[i]; + queue->qhdr = + IFACEQ_GET_QHDR_START_ADDR(hdev->ifaceq_table.kva, i); + + venus_set_qhdr_defaults(queue->qhdr); + + queue->qhdr->start_addr = queue->qmem.da; + + if (i == IFACEQ_CMD_IDX) + queue->qhdr->type |= HFI_HOST_TO_CTRL_CMD_Q; + else if (i == IFACEQ_MSG_IDX) + queue->qhdr->type |= HFI_CTRL_TO_HOST_MSG_Q; + else if (i == IFACEQ_DBG_IDX) + queue->qhdr->type |= HFI_CTRL_TO_HOST_DBG_Q; + } + + tbl_hdr = hdev->ifaceq_table.kva; + tbl_hdr->version = 0; + tbl_hdr->size = IFACEQ_TABLE_SIZE; + tbl_hdr->qhdr0_offset = sizeof(struct hfi_queue_table_header); + tbl_hdr->qhdr_size = sizeof(struct hfi_queue_header); + tbl_hdr->num_q = IFACEQ_NUM; + tbl_hdr->num_active_q = IFACEQ_NUM; + + /* + * Set receive request to zero on debug queue as there is no + * need of interrupt from video hardware for debug messages + */ + queue = &hdev->queues[IFACEQ_DBG_IDX]; + queue->qhdr->rx_req = 0; + + sfr = hdev->sfr.kva; + sfr->buf_size = ALIGNED_SFR_SIZE; + + /* ensure table and queue header structs are settled in memory */ + wmb(); + + mutex_unlock(&hdev->lock); +} diff --git a/drivers/media/platform/qcom/venus/hfi_venus.h b/drivers/media/platform/qcom/venus/hfi_venus.h index 57154832090e..1b656ef2bf07 100644 --- a/drivers/media/platform/qcom/venus/hfi_venus.h +++ b/drivers/media/platform/qcom/venus/hfi_venus.h @@ -10,5 +10,6 @@ struct venus_core; void venus_hfi_destroy(struct venus_core *core); int venus_hfi_create(struct venus_core *core); +void venus_hfi_queues_reinit(struct venus_core *core); #endif -- 2.17.1