Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp1101077pxv; Fri, 25 Jun 2021 05:36:43 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwyb92X/EkMzqWaDuDhORjHa8Cai6oLyOK7SvR7liTo+qngqhQE8e52tIIPsgOmAq/JjR6/ X-Received: by 2002:a17:906:1806:: with SMTP id v6mr10641944eje.454.1624624603487; Fri, 25 Jun 2021 05:36:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1624624603; cv=none; d=google.com; s=arc-20160816; b=sf0zvSpq2fhqMWeftYJ1XfWScFIdAa9wmaB2KvMzRgvjhugnZw8TyzqyPlDH1d7iQb w3jcRTE8BatMVX8RrUmTuRJgoh/kVaOK+olfwxF7LKt1bEZxgdQBzuvBjkIFWTItFaa9 LUau/h+JStdAmiAU7cjeLRLe8ZlSRT6XCccdyqXVn15mVkuGzIRixWvdLkLl/vUb6aL/ TpiJ0TVtiBsLqaQ3XEWHTbXQ37+gwm9Pr9VqGKtlHnQzM4rtJyeJ7Xpqt+c1xdOknEL/ 8+SHF0L2/ior+dmLxExJf0tKbnpFS7xb00nEvZ3DMIR9PkbN3T+M4O63++hf+aoET66K RjOg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=26+KEZ0Hx72pvjQJfrOEoIc8ilnySOUXy/nlBhCQtpo=; b=utEg9U9cBItekplC7I0QdIZwE0fBFRnJQysN6DPi68fgOJLgAd0Fl3kY7xh1UDoepU 0ai+B0jzXys4Klv2N+ZWvOyHJMOVXSodSwCcoNXObJL156jWzw7pdpIbEWcWXbGIQ4zm ww1wbKXuPrz6Rf7p2KW3IYPNukZw+872o4rtBSEbLJBeSODhDvLCQsrgJcV6DsNnfZrg Qdk8rmgeXAqyuHe/rzrO6ndXSOorDhGDmQn9Isx7cLpFiaN93NR804E8dENSnEeTzrtC qBKBQgE3PL0fISUHi78bduEpnoNV5DI6YCSbWMJLJKf1/ZBi2PSr6C0tBQgBsjnYcWgN 7Yfg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=YotlkkYF; 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 w17si5943741ejb.632.2021.06.25.05.36.20; Fri, 25 Jun 2021 05:36:43 -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=YotlkkYF; 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 S231676AbhFYMhT (ORCPT + 99 others); Fri, 25 Jun 2021 08:37:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59858 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231445AbhFYMhK (ORCPT ); Fri, 25 Jun 2021 08:37:10 -0400 Received: from mail-pj1-x102f.google.com (mail-pj1-x102f.google.com [IPv6:2607:f8b0:4864:20::102f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B4D60C0617AE for ; Fri, 25 Jun 2021 05:34:39 -0700 (PDT) Received: by mail-pj1-x102f.google.com with SMTP id gd24-20020a17090b0fd8b02901702bcb0d90so1141117pjb.1 for ; Fri, 25 Jun 2021 05:34:39 -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 :mime-version:content-transfer-encoding; bh=26+KEZ0Hx72pvjQJfrOEoIc8ilnySOUXy/nlBhCQtpo=; b=YotlkkYFXipWrpHhbZnc7WPGJNhr6V4C7LtlckRCgvhIXOmkT9k9C4UEA3ym2/Ocqc ACXDQTu4TKQXGwoAJyvMkKdhbJDnmRSA6mzagez11GgFs/sBPOH/vcWB2qKcf6r2obbJ G+/QOhEkRs/cvE6z065OQYyqU1BwkFp4q/97q3Vzcov+DV2tfRRgsERYUjjX1soqi+uA s+HVgMVBKVZgVauxLGGTdhD1ltHOuoP1sIVvry3uMBA5D3Lfy2IXhjQoIQ7klGPHYwTv SQVX/fLGN4WBi/Vi1p8sviuonS5HaVCe7by3V8sqrBD5RmgOvUzJdbLJi303B66OXHmm kGBA== 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:mime-version:content-transfer-encoding; bh=26+KEZ0Hx72pvjQJfrOEoIc8ilnySOUXy/nlBhCQtpo=; b=ByBhLcN3Hyxcjm9534w6ZWmYAFDKbbHODEGjVdNMe64nZ3CwZwUpQsoQ4xgyGxtC6h bWA1yF8bTNqkdY2x92sekpH6hYs8lKrpI4qInrq/97VP4V/1d837xLqcVtUdaAO8FKf9 6nklHmOzQIQkD1e4Qr56QIRdnzYOYGpbIwgoOWj7NNGGJEGGAYRG+205n1fCtjZl6X/B /MG20afQA2ZRFtb3D6Ct1Lb5jm785V0teMpPG2bKMmYMUMWOHaeeNR1b0jQqzrESmetD yTMskp+ajAZpII1gLQhIn16GjfVMyG15l76RGUnOMwT0lVax2bfZv+fyuDrlAZxw65lZ vwog== X-Gm-Message-State: AOAM533GUWcnA+ICi87Meb1IOZFZQbpR2lsW+mGpqNFo04dnp5O7ZF2r EO9UepAvxJxhJ3bciLLPetO2 X-Received: by 2002:a17:90a:2e87:: with SMTP id r7mr20900741pjd.232.1624624479187; Fri, 25 Jun 2021 05:34:39 -0700 (PDT) Received: from localhost.localdomain ([2409:4072:600b:2a0:ed5d:53e7:c64e:1bac]) by smtp.gmail.com with ESMTPSA id y7sm6077780pfy.153.2021.06.25.05.34.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 25 Jun 2021 05:34:38 -0700 (PDT) From: Manivannan Sadhasivam To: gregkh@linuxfoundation.org Cc: hemantk@codeaurora.org, bbhatt@codeaurora.org, linux-arm-msm@vger.kernel.org, jhugo@codeaurora.org, linux-kernel@vger.kernel.org, loic.poulain@linaro.org, kvalo@codeaurora.org, ath11k@lists.infradead.org, Jeffrey Hugo , Manivannan Sadhasivam Subject: [PATCH 05/10] bus: mhi: core: Set BHI/BHIe offsets on power up preparation Date: Fri, 25 Jun 2021 18:03:50 +0530 Message-Id: <20210625123355.11578-6-manivannan.sadhasivam@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210625123355.11578-1-manivannan.sadhasivam@linaro.org> References: <20210625123355.11578-1-manivannan.sadhasivam@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Bhaumik Bhatt Set the BHI and/or BHIe offsets in mhi_prepare_for_power_up(), rearrange the function, and remove the equivalent from mhi_async_power_up(). This helps consolidate multiple checks in different parts of the driver and can help MHI fail early on before power up begins if the offsets are not read correctly. Signed-off-by: Bhaumik Bhatt Reviewed-by: Jeffrey Hugo Reviewed-by: Hemant Kumar Reviewed-by: Manivannan Sadhasivam Link: https://lore.kernel.org/r/1620330705-40192-2-git-send-email-bbhatt@codeaurora.org Signed-off-by: Manivannan Sadhasivam --- drivers/bus/mhi/core/init.c | 42 ++++++++++++++++++++----------------- drivers/bus/mhi/core/pm.c | 28 ++++--------------------- 2 files changed, 27 insertions(+), 43 deletions(-) diff --git a/drivers/bus/mhi/core/init.c b/drivers/bus/mhi/core/init.c index c81b377fca8f..11c7a3d3c9bf 100644 --- a/drivers/bus/mhi/core/init.c +++ b/drivers/bus/mhi/core/init.c @@ -1063,7 +1063,7 @@ EXPORT_SYMBOL_GPL(mhi_free_controller); int mhi_prepare_for_power_up(struct mhi_controller *mhi_cntrl) { struct device *dev = &mhi_cntrl->mhi_dev->dev; - u32 bhie_off; + u32 bhi_off, bhie_off; int ret; mutex_lock(&mhi_cntrl->pm_mutex); @@ -1072,29 +1072,36 @@ int mhi_prepare_for_power_up(struct mhi_controller *mhi_cntrl) if (ret) goto error_dev_ctxt; - /* - * Allocate RDDM table if specified, this table is for debugging purpose - */ - if (mhi_cntrl->rddm_size) { - mhi_alloc_bhie_table(mhi_cntrl, &mhi_cntrl->rddm_image, - mhi_cntrl->rddm_size); + ret = mhi_read_reg(mhi_cntrl, mhi_cntrl->regs, BHIOFF, &bhi_off); + if (ret) { + dev_err(dev, "Error getting BHI offset\n"); + goto error_reg_offset; + } + mhi_cntrl->bhi = mhi_cntrl->regs + bhi_off; - /* - * This controller supports RDDM, so we need to manually clear - * BHIE RX registers since POR values are undefined. - */ + if (mhi_cntrl->fbc_download || mhi_cntrl->rddm_size) { ret = mhi_read_reg(mhi_cntrl, mhi_cntrl->regs, BHIEOFF, &bhie_off); if (ret) { dev_err(dev, "Error getting BHIE offset\n"); - goto bhie_error; + goto error_reg_offset; } - mhi_cntrl->bhie = mhi_cntrl->regs + bhie_off; + } + + if (mhi_cntrl->rddm_size) { + /* + * This controller supports RDDM, so we need to manually clear + * BHIE RX registers since POR values are undefined. + */ memset_io(mhi_cntrl->bhie + BHIE_RXVECADDR_LOW_OFFS, 0, BHIE_RXVECSTATUS_OFFS - BHIE_RXVECADDR_LOW_OFFS + 4); - + /* + * Allocate RDDM table for debugging purpose if specified + */ + mhi_alloc_bhie_table(mhi_cntrl, &mhi_cntrl->rddm_image, + mhi_cntrl->rddm_size); if (mhi_cntrl->rddm_image) mhi_rddm_prepare(mhi_cntrl, mhi_cntrl->rddm_image); } @@ -1103,11 +1110,8 @@ int mhi_prepare_for_power_up(struct mhi_controller *mhi_cntrl) return 0; -bhie_error: - if (mhi_cntrl->rddm_image) { - mhi_free_bhie_table(mhi_cntrl, mhi_cntrl->rddm_image); - mhi_cntrl->rddm_image = NULL; - } +error_reg_offset: + mhi_deinit_dev_ctxt(mhi_cntrl); error_dev_ctxt: mutex_unlock(&mhi_cntrl->pm_mutex); diff --git a/drivers/bus/mhi/core/pm.c b/drivers/bus/mhi/core/pm.c index bbf6cd04861e..ff7cdc8653ef 100644 --- a/drivers/bus/mhi/core/pm.c +++ b/drivers/bus/mhi/core/pm.c @@ -1059,28 +1059,8 @@ int mhi_async_power_up(struct mhi_controller *mhi_cntrl) if (ret) goto error_setup_irq; - /* Setup BHI offset & INTVEC */ + /* Setup BHI INTVEC */ write_lock_irq(&mhi_cntrl->pm_lock); - ret = mhi_read_reg(mhi_cntrl, mhi_cntrl->regs, BHIOFF, &val); - if (ret) { - write_unlock_irq(&mhi_cntrl->pm_lock); - goto error_bhi_offset; - } - - mhi_cntrl->bhi = mhi_cntrl->regs + val; - - /* Setup BHIE offset */ - if (mhi_cntrl->fbc_download) { - ret = mhi_read_reg(mhi_cntrl, mhi_cntrl->regs, BHIEOFF, &val); - if (ret) { - write_unlock_irq(&mhi_cntrl->pm_lock); - dev_err(dev, "Error reading BHIE offset\n"); - goto error_bhi_offset; - } - - mhi_cntrl->bhie = mhi_cntrl->regs + val; - } - mhi_write_reg(mhi_cntrl, mhi_cntrl->bhi, BHI_INTVEC, 0); mhi_cntrl->pm_state = MHI_PM_POR; mhi_cntrl->ee = MHI_EE_MAX; @@ -1091,7 +1071,7 @@ int mhi_async_power_up(struct mhi_controller *mhi_cntrl) if (!MHI_IN_PBL(current_ee) && current_ee != MHI_EE_AMSS) { dev_err(dev, "Not a valid EE for power on\n"); ret = -EIO; - goto error_bhi_offset; + goto error_async_power_up; } state = mhi_get_mhi_state(mhi_cntrl); @@ -1110,7 +1090,7 @@ int mhi_async_power_up(struct mhi_controller *mhi_cntrl) if (!ret) { ret = -EIO; dev_info(dev, "Failed to reset MHI due to syserr state\n"); - goto error_bhi_offset; + goto error_async_power_up; } /* @@ -1132,7 +1112,7 @@ int mhi_async_power_up(struct mhi_controller *mhi_cntrl) return 0; -error_bhi_offset: +error_async_power_up: mhi_deinit_free_irq(mhi_cntrl); error_setup_irq: -- 2.25.1