Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp118316pxb; Wed, 24 Feb 2021 20:28:27 -0800 (PST) X-Google-Smtp-Source: ABdhPJxcxBGtTkoPWYy56gH2XiXg52brEUJcrmljY6emCzSq2KZ+f275yfFdi/AHqSZZZffe+WjM X-Received: by 2002:a05:6402:1689:: with SMTP id a9mr1026873edv.273.1614227307410; Wed, 24 Feb 2021 20:28:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1614227307; cv=none; d=google.com; s=arc-20160816; b=mhXHOYAJlxmShB0pxl392VQou7LDLpQh5/7zGxeFwQRVS4BY4ApmAXf0XHsr5lmrY/ M6Q3nmNaKEfXsSwxHkX20/+6fgjV1D92i8OxCwMxUAMAkEZh0m7IGlbFY/kPqEduX/li hZNyuPtyNV+cvlo1mOR8WH0b0dtzEsHqUH3My3vnwj6raUPUT/Qo3zAIcmDF1r7n9WTU 51hPUjKHjegsz2tvWu0x/RMyQqREIIAMoJOU9iBdFsNbWyWNmaDEA+5ho7NU8yUlq0aT /sm6x/j/65BfvAFRRwbnXV7BCNv4cSrGAhObbHgu2vgiuh15Iv1HTddF/D6nKH8ueyn/ 02Tg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:message-id:date:subject :cc:to:from:dmarc-filter:sender:dkim-signature; bh=8T6P76FXP0K2CJLnto7cSRZ87UyMwlPQHm2Vq68Yzqw=; b=fHxTcZ07ZtRM00x2aFxK95LCnPxTuel+IRfVOoRgbIu7q73JuVQ1W8YVMIlmlHYMT/ Gt+8y/2+Kvx+FHum73qodgVYjXM/Qq6ptuxWptBJeeNtviy5zz5o3AfK3+LYlZ5DkdcA T298464six/nf/4Bje//6jf3tCZE1H11UwmYu3tSj+KiabOVS61cY2L6Zwdq9v9BRZ7z lAizkUwLaEN9mH0zbKtjhpUAQmu/pVk9LJvfalf6CDHILWD/Rwqsq/JchHJZ+nt6HbId PpSMvW3udij+2HoNTXLJcPTYKQtISKLmNbqOp+h4j6h7O4lr5s6yrXfxjHHNdubZAYjj 0+qg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@mg.codeaurora.org header.s=smtp header.b=FE1FwTyx; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id pj7si2843312ejb.85.2021.02.24.20.28.03; Wed, 24 Feb 2021 20:28:27 -0800 (PST) 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=@mg.codeaurora.org header.s=smtp header.b=FE1FwTyx; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236231AbhBXXYS (ORCPT + 99 others); Wed, 24 Feb 2021 18:24:18 -0500 Received: from m42-2.mailgun.net ([69.72.42.2]:53463 "EHLO m42-2.mailgun.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236229AbhBXXYE (ORCPT ); Wed, 24 Feb 2021 18:24:04 -0500 DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=mg.codeaurora.org; q=dns/txt; s=smtp; t=1614209019; h=References: In-Reply-To: Message-Id: Date: Subject: Cc: To: From: Sender; bh=8T6P76FXP0K2CJLnto7cSRZ87UyMwlPQHm2Vq68Yzqw=; b=FE1FwTyxSUSZoxIUTNTYDhG9843ZKvvCTldXpObE1JC9bPT6RG4D8REkJK10zeV+cx2oLJw7 7+GINLuZuZMO15LJhWDQwivD5HEq/4Iqqg24ZoDyf5NwxYbDvnymkVzAEkALI+wVqBhHQfbQ NoAVPJ33rv918Q+zpDm7HHKZApg= X-Mailgun-Sending-Ip: 69.72.42.2 X-Mailgun-Sid: WyI0MWYwYSIsICJsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnIiwgImJlOWU0YSJd Received: from smtp.codeaurora.org (ec2-35-166-182-171.us-west-2.compute.amazonaws.com [35.166.182.171]) by smtp-out-n04.prod.us-east-1.postgun.com with SMTP id 6036dfe1e9080d5ff79c517b (version=TLS1.2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256); Wed, 24 Feb 2021 23:23:13 GMT Sender: bbhatt=codeaurora.org@mg.codeaurora.org Received: by smtp.codeaurora.org (Postfix, from userid 1001) id CE3A8C43461; Wed, 24 Feb 2021 23:23:12 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-caf-mail-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=ALL_TRUSTED,BAYES_00,SPF_FAIL, URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from malabar-linux.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: bbhatt) by smtp.codeaurora.org (Postfix) with ESMTPSA id 86997C433CA; Wed, 24 Feb 2021 23:23:11 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 86997C433CA Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; spf=fail smtp.mailfrom=bbhatt@codeaurora.org From: Bhaumik Bhatt To: manivannan.sadhasivam@linaro.org Cc: linux-arm-msm@vger.kernel.org, hemantk@codeaurora.org, jhugo@codeaurora.org, linux-kernel@vger.kernel.org, loic.poulain@linaro.org, carl.yin@quectel.com, naveen.kumar@quectel.com, Bhaumik Bhatt Subject: [PATCH v6 1/4] bus: mhi: core: Destroy SBL devices when moving to mission mode Date: Wed, 24 Feb 2021 15:23:02 -0800 Message-Id: <1614208985-20851-2-git-send-email-bbhatt@codeaurora.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1614208985-20851-1-git-send-email-bbhatt@codeaurora.org> References: <1614208985-20851-1-git-send-email-bbhatt@codeaurora.org> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently, client devices are created in SBL or AMSS (mission mode) and only destroyed after power down or SYS ERROR. When moving between certain execution environments, such as from SBL to AMSS, no clean-up is required. This presents an issue where SBL-specific channels are left open and client drivers now run in an execution environment where they cannot operate. Fix this by expanding the mhi_destroy_device() to do an execution environment specific clean-up if one is requested. Close the gap and destroy devices in such scenarios that allow SBL client drivers to clean up once device enters mission mode. Signed-off-by: Bhaumik Bhatt --- drivers/bus/mhi/core/main.c | 29 +++++++++++++++++++++++++---- drivers/bus/mhi/core/pm.c | 3 +++ 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/drivers/bus/mhi/core/main.c b/drivers/bus/mhi/core/main.c index 4e0131b..7a2e98c 100644 --- a/drivers/bus/mhi/core/main.c +++ b/drivers/bus/mhi/core/main.c @@ -244,8 +244,10 @@ static void mhi_del_ring_element(struct mhi_controller *mhi_cntrl, int mhi_destroy_device(struct device *dev, void *data) { + struct mhi_chan *ul_chan, *dl_chan; struct mhi_device *mhi_dev; struct mhi_controller *mhi_cntrl; + enum mhi_ee_type ee = MHI_EE_MAX; if (dev->bus != &mhi_bus_type) return 0; @@ -257,6 +259,17 @@ int mhi_destroy_device(struct device *dev, void *data) if (mhi_dev->dev_type == MHI_DEVICE_CONTROLLER) return 0; + ul_chan = mhi_dev->ul_chan; + dl_chan = mhi_dev->dl_chan; + + /* + * If execution environment is specified, remove only those devices that + * started in them based on ee_mask for the channels as we move on to a + * different execution environment + */ + if (data) + ee = *(enum mhi_ee_type *)data; + /* * For the suspend and resume case, this function will get called * without mhi_unregister_controller(). Hence, we need to drop the @@ -264,11 +277,19 @@ int mhi_destroy_device(struct device *dev, void *data) * be sure that there will be no instances of mhi_dev left after * this. */ - if (mhi_dev->ul_chan) - put_device(&mhi_dev->ul_chan->mhi_dev->dev); + if (ul_chan) { + if (ee != MHI_EE_MAX && !(ul_chan->ee_mask & BIT(ee))) + return 0; - if (mhi_dev->dl_chan) - put_device(&mhi_dev->dl_chan->mhi_dev->dev); + put_device(&ul_chan->mhi_dev->dev); + } + + if (dl_chan) { + if (ee != MHI_EE_MAX && !(dl_chan->ee_mask & BIT(ee))) + return 0; + + put_device(&dl_chan->mhi_dev->dev); + } dev_dbg(&mhi_cntrl->mhi_dev->dev, "destroy device for chan:%s\n", mhi_dev->name); diff --git a/drivers/bus/mhi/core/pm.c b/drivers/bus/mhi/core/pm.c index 681960c..3bd81d0 100644 --- a/drivers/bus/mhi/core/pm.c +++ b/drivers/bus/mhi/core/pm.c @@ -377,6 +377,7 @@ static int mhi_pm_mission_mode_transition(struct mhi_controller *mhi_cntrl) { struct mhi_event *mhi_event; struct device *dev = &mhi_cntrl->mhi_dev->dev; + enum mhi_ee_type current_ee = mhi_cntrl->ee; int i, ret; dev_dbg(dev, "Processing Mission Mode transition\n"); @@ -395,6 +396,8 @@ static int mhi_pm_mission_mode_transition(struct mhi_controller *mhi_cntrl) wake_up_all(&mhi_cntrl->state_event); + device_for_each_child(&mhi_cntrl->mhi_dev->dev, ¤t_ee, + mhi_destroy_device); mhi_cntrl->status_cb(mhi_cntrl, MHI_CB_EE_MISSION_MODE); /* Force MHI to be in M0 state before continuing */ -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project