Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp981890ybt; Wed, 17 Jun 2020 19:51:50 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwKP00C4K40fNZXe057Aq+o/5drhB+m+w/eVrOKf5FYkXgo+H5VlZarn2bI+EFDmQnlwQMi X-Received: by 2002:aa7:cb52:: with SMTP id w18mr2064490edt.1.1592448710500; Wed, 17 Jun 2020 19:51:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592448710; cv=none; d=google.com; s=arc-20160816; b=tXRe2VunWm0GzSjL4sjlHLY8cPXg4pTi8xanMESNjJMSL5DkZHc2wASdrXh2MyOdKk wE1+JT4N6x/ug8aEnFkwkipRN9bek4lGApGi0L42KYZR424aUsnGrHCcQwRm4Y9+7R28 e5QzVGoxVLfk9BFkVq50CcznLFUApzbHXoYSw3UrQNRvPgEGuTpAjxWPzvsEUnX2M4ux cXKODoNq0WshZrVpCHV2/sFt7JDDNDENeZRMWMt20dZ8Qy8A4HSGA55XmSFuBS44ub8n 5cUCwGFf8Efhc2bWZWF1YsElp2esNNinVZeZCfvD188ZIKUAXC+wwnsRMax1cEufu56f D2KA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=3KCVxEHot/LV0gKia78T3CB3Giv4wBK3XjOrGw3o2c0=; b=V6s+SfxtinttOyNwJ7kwFhuybPy6Y5xA1Po2A+jKSG6Nqee2Q2h/PxeLsuCtbRR99G qJDsx7WWJXnDiouv+c/Ex5q1dP/JJPFgE5l7pB0ugzAPDSRY/JsLB/9Tb28PzYRlJsDd PX4TShxFEMENs9PWDao3Q61uib/4CzcPHEO5wEA4vYtMs8JItt5m/iMYgaEyj9sUb13P I7XL3k0oOUypUoUmAHo66m3z5CB9vH625fg6SJqDHacmv8Y02iiaZj24uvKk2+AYeY8D F3kYtxhWbj335APbqF2YjK/YtyGMVmedXCWTAzh9YiYBR7l4JyY47N4nLsxIMShzX/yQ BnSA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=GcFLz1YC; 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=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id cz19si1149986edb.40.2020.06.17.19.51.28; Wed, 17 Jun 2020 19:51:50 -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=@kernel.org header.s=default header.b=GcFLz1YC; 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=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728190AbgFRBJb (ORCPT + 99 others); Wed, 17 Jun 2020 21:09:31 -0400 Received: from mail.kernel.org ([198.145.29.99]:35854 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728159AbgFRBJ3 (ORCPT ); Wed, 17 Jun 2020 21:09:29 -0400 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 6420921974; Thu, 18 Jun 2020 01:09:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1592442568; bh=St+32PWtOnP3r5Q0VnSaOgp8ULPNXgJlQD252LrToqI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GcFLz1YCVOETdI6GpDA1WtWU019HKLCtJk/zPXIfNAg1DKT2ED4NeB9mgk3bjdKWI aUOPH3130eWhfLVofzT5++0F+5jFCCgN9dU+6hMtbkfv4f7WXlrW6WuZb9oD0MPsQl fPPn/ISq1VH85FUhW8dAzVxjn5kiUVjEiOH2rCCc= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Sai Prakash Ranjan , Stephen Boyd , Mathieu Poirier , Greg Kroah-Hartman , Sasha Levin , linux-arm-kernel@lists.infradead.org Subject: [PATCH AUTOSEL 5.7 062/388] coresight: tmc: Fix TMC mode read in tmc_read_prepare_etb() Date: Wed, 17 Jun 2020 21:02:39 -0400 Message-Id: <20200618010805.600873-62-sashal@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200618010805.600873-1-sashal@kernel.org> References: <20200618010805.600873-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Sai Prakash Ranjan [ Upstream commit 347adb0d6385c3220dc01ab61807a5b1892901cc ] On some QCOM platforms like SC7180, SDM845 and SM8150, reading TMC mode register without proper coresight power management can lead to async exceptions like the one in the call trace below in tmc_read_prepare_etb(). This can happen if the user tries to read the TMC etf data via device node without setting up source and the sink first. Fix this by having a check for coresight sysfs mode before reading TMC mode management register. Kernel panic - not syncing: Asynchronous SError Interrupt CPU: 7 PID: 2605 Comm: hexdump Tainted: G S 5.4.30 #122 Call trace: dump_backtrace+0x0/0x188 show_stack+0x20/0x2c dump_stack+0xdc/0x144 panic+0x168/0x36c panic+0x0/0x36c arm64_serror_panic+0x78/0x84 do_serror+0x130/0x138 el1_error+0x84/0xf8 tmc_read_prepare_etb+0x88/0xb8 tmc_open+0x40/0xd8 misc_open+0x120/0x158 chrdev_open+0xb8/0x1a4 do_dentry_open+0x268/0x3a0 vfs_open+0x34/0x40 path_openat+0x39c/0xdf4 do_filp_open+0x90/0x10c do_sys_open+0x150/0x3e8 __arm64_compat_sys_openat+0x28/0x34 el0_svc_common+0xa8/0x160 el0_svc_compat_handler+0x2c/0x38 el0_svc_compat+0x8/0x10 Fixes: 4525412a5046 ("coresight: tmc: making prepare/unprepare functions generic") Reported-by: Stephen Boyd Suggested-by: Mathieu Poirier Signed-off-by: Sai Prakash Ranjan Signed-off-by: Mathieu Poirier Link: https://lore.kernel.org/r/20200518180242.7916-14-mathieu.poirier@linaro.org Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sasha Levin --- drivers/hwtracing/coresight/coresight-tmc-etf.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/hwtracing/coresight/coresight-tmc-etf.c b/drivers/hwtracing/coresight/coresight-tmc-etf.c index d0cc3985b72a..36cce2bfb744 100644 --- a/drivers/hwtracing/coresight/coresight-tmc-etf.c +++ b/drivers/hwtracing/coresight/coresight-tmc-etf.c @@ -596,13 +596,6 @@ int tmc_read_prepare_etb(struct tmc_drvdata *drvdata) goto out; } - /* There is no point in reading a TMC in HW FIFO mode */ - mode = readl_relaxed(drvdata->base + TMC_MODE); - if (mode != TMC_MODE_CIRCULAR_BUFFER) { - ret = -EINVAL; - goto out; - } - /* Don't interfere if operated from Perf */ if (drvdata->mode == CS_MODE_PERF) { ret = -EINVAL; @@ -616,8 +609,15 @@ int tmc_read_prepare_etb(struct tmc_drvdata *drvdata) } /* Disable the TMC if need be */ - if (drvdata->mode == CS_MODE_SYSFS) + if (drvdata->mode == CS_MODE_SYSFS) { + /* There is no point in reading a TMC in HW FIFO mode */ + mode = readl_relaxed(drvdata->base + TMC_MODE); + if (mode != TMC_MODE_CIRCULAR_BUFFER) { + ret = -EINVAL; + goto out; + } __tmc_etb_disable_hw(drvdata); + } drvdata->reading = true; out: -- 2.25.1