Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp309742pxj; Thu, 10 Jun 2021 23:05:17 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzwnxllTb3GDvvENLx+3+tiJlEjM92qHAoVF79DaEtaFisiZbT+agK4xPeaM+o9RsYovZcJ X-Received: by 2002:aa7:d288:: with SMTP id w8mr1921682edq.276.1623391517355; Thu, 10 Jun 2021 23:05:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1623391517; cv=none; d=google.com; s=arc-20160816; b=OwSmxb4nxPCsiLkkRGkT9WFyoNYs6C88xEr7v2sJLu2XCjICYVVusGvA+Vehw7kiMI HvzTSXrBF4huo33DvgIpL0c6FvMX5U5g9PEwkH6P3c5r8ZevpJMAU8mBxI58VRyTHX8u 797wLszu94nu68bu1VbaSehsufAm75mqM4gOoOfXIMEocxFkwxAAiLEQVUg9hJdevK1F xqvJuVVOH8fTg2GBZwgngZa3u4o8iIG8ZW/gy+kJ86ACFmcjMkptnmGEO5+EhxVXxPgy szh/Onrc1goxQpaI5MB2hxnnLc2OFqrkt1fwgyncnsjn+Xy7GPc9f0dJcLXTuDfHBdNQ rpjg== 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 :message-id:date:subject:cc:to:from; bh=7tCldDw2RVG5sr4IE6IkhCwbQohDWQw4M389/p4z0eY=; b=mvdc7/+8xWS8LpxyJ2z0kyCJ0dYgz5gIqAa0y1Z/8EAmaz5YAScuv7QLjQha7XsTId lNA+t/VzHUK6mHpclp4dvznD1vr3eLeKecOYCQjr0iQotCnzKYmXeLN0+c6jfafzRnZW fuNsfAFbqh1ChBUaLCXJ04DreNOzqCAFZlgkY+ZaNV8MCBefLKIwGA8v/ERsmoVJCm+4 9dSckdxmdCW0DMYUP0CpUikQnlx1Pcax4qApr/MdKOG4CBTLAcpQ0VZA41/yI4wlAe7T vx+ZhmFwyLTDAyXeY8ULzfEJMt5bmmo6p3BDtScmHejM6KhNmdgNlmNdDdhbCjBsH8Ro B/wQ== ARC-Authentication-Results: i=1; mx.google.com; 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 e16si3932249ejj.154.2021.06.10.23.04.45; Thu, 10 Jun 2021 23:05:17 -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; 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 S230479AbhFKGE1 (ORCPT + 99 others); Fri, 11 Jun 2021 02:04:27 -0400 Received: from muru.com ([72.249.23.125]:41672 "EHLO muru.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230216AbhFKGE0 (ORCPT ); Fri, 11 Jun 2021 02:04:26 -0400 Received: from hillo.muru.com (localhost [127.0.0.1]) by muru.com (Postfix) with ESMTP id 8B9F080E1; Fri, 11 Jun 2021 06:02:35 +0000 (UTC) From: Tony Lindgren To: linux-omap@vger.kernel.org Cc: Dave Gerlach , Faiz Abbas , Greg Kroah-Hartman , Grygorii Strashko , Keerthy , Nishanth Menon , Suman Anna , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Jarkko Nikula Subject: [PATCH] bus: ti-sysc: Fix gpt12 system timer issue with reserved status Date: Fri, 11 Jun 2021 09:02:24 +0300 Message-Id: <20210611060224.36769-1-tony@atomide.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Jarkko Nikula reported that Beagleboard revision c2 stopped booting. Jarkko bisected the issue down to commit 6cfcd5563b4f ("clocksource/drivers/timer-ti-dm: Fix suspend and resume for am3 and am4"). Let's fix the issue by tagging system timers as reserved rather than ignoring them. And let's not probe any interconnect target module child devices for reserved modules. This allows PM runtime to keep track of clocks and clockdomains for the interconnect target module, and prevent the system timer from idling as we already have SYSC_QUIRK_NO_IDLE and SYSC_QUIRK_NO_IDLE_ON_INIT flags set for system timers. Fixes: 6cfcd5563b4f ("clocksource/drivers/timer-ti-dm: Fix suspend and resume for am3 and am4") Reported-by: Jarkko Nikula Signed-off-by: Tony Lindgren --- drivers/bus/ti-sysc.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/drivers/bus/ti-sysc.c b/drivers/bus/ti-sysc.c --- a/drivers/bus/ti-sysc.c +++ b/drivers/bus/ti-sysc.c @@ -100,6 +100,7 @@ static const char * const clock_names[SYSC_MAX_CLOCKS] = { * @cookie: data used by legacy platform callbacks * @name: name if available * @revision: interconnect target module revision + * @reserved: target module is reserved and already in use * @enabled: sysc runtime enabled status * @needs_resume: runtime resume needed on resume from suspend * @child_needs_resume: runtime resume needed for child on resume from suspend @@ -130,6 +131,7 @@ struct sysc { struct ti_sysc_cookie cookie; const char *name; u32 revision; + unsigned int reserved:1; unsigned int enabled:1; unsigned int needs_resume:1; unsigned int child_needs_resume:1; @@ -3093,8 +3095,8 @@ static int sysc_probe(struct platform_device *pdev) return error; error = sysc_check_active_timer(ddata); - if (error) - return error; + if (error == -EBUSY) + ddata->reserved = true; error = sysc_get_clocks(ddata); if (error) @@ -3130,11 +3132,15 @@ static int sysc_probe(struct platform_device *pdev) sysc_show_registers(ddata); ddata->dev->type = &sysc_device_type; - error = of_platform_populate(ddata->dev->of_node, sysc_match_table, - pdata ? pdata->auxdata : NULL, - ddata->dev); - if (error) - goto err; + + if (!ddata->reserved) { + error = of_platform_populate(ddata->dev->of_node, + sysc_match_table, + pdata ? pdata->auxdata : NULL, + ddata->dev); + if (error) + goto err; + } INIT_DELAYED_WORK(&ddata->idle_work, ti_sysc_idle); -- 2.31.1