Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp3653578img; Mon, 25 Mar 2019 15:00:28 -0700 (PDT) X-Google-Smtp-Source: APXvYqwT+2dSGQBO1fK3QtV8S7+ryiHu3cF6PUUoBOgSV9nJf3T5XJ5TRrXfh3Go8eKmOu3+IshG X-Received: by 2002:a63:d5f:: with SMTP id 31mr25363840pgn.274.1553551228144; Mon, 25 Mar 2019 15:00:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553551228; cv=none; d=google.com; s=arc-20160816; b=SgG+R+lsFW3kXgQlmcABpS4HyDCCqFgRQ17G7L7L1juOpjnL0WdgKkCoBPbRpwMyjw zIOFkGqstSR9ahLQJp9rQhXPLjgtIy+Ez8dnoD5rNYuw0xtxLBbIBij+/MZ7e5W/U7Hp p4AfQDmSEnYmcd23VerTFBPUfZtV7TiiaVUI34+JrD+dUsKq+bmr2MlXwU+P+QRPkSkq +sMhW3LCgpGgBohrpWos7FgRwbTkQem+yxzHp+3ivGG5NtdeqIxsW+LrwWdqV5v8C9GM NhkSqbP+/w9G58xCPEoDMa82QU8h9O/sa+g5FxKR1pyIGdz7G3kH3VDyPGjXkgDlCSgj 3geA== 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; bh=Y4LkIZ1wbJlAzZqqDEZWQJMkqq54L7WsCb46CGVIsLc=; b=zyy7WCe3cVYLIpCe7N2EEcWAxCOY8u7dtTYywf9OjQ72F5InnW+lrrIa3gE8qhRepe kvD+OC30Y4ndyOuvlArOoyaZZiHVbaBtdiCOYS0K55Wot/db9DSDvXNU89XSTl5t9aY+ KWCt4mayQtbhNNPGnnIx1v8dw5LX8c5O1+FPJf2/2Y/R6ZXZ/1hDbUJarSYAo+3UszRc kIKVPQD6L11lCGnjrNekDTqiiyU4NyhfuqLsSBHMkFNiUSEHUCenBzHNIZZc9pFiqv0T OY+08ZpaVkYjsVTBAJQcL3/RB6ajyy+U8bOp/tpMtETWhiAy88j3niCIXoWEK1s4/qpX 5cIQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f73si14488140pff.184.2019.03.25.15.00.12; Mon, 25 Mar 2019 15:00:28 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730709AbfCYV7W (ORCPT + 99 others); Mon, 25 Mar 2019 17:59:22 -0400 Received: from muru.com ([72.249.23.125]:42654 "EHLO muru.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730641AbfCYV7U (ORCPT ); Mon, 25 Mar 2019 17:59:20 -0400 Received: from hillo.muru.com (localhost [127.0.0.1]) by muru.com (Postfix) with ESMTP id 0B9EF80CC; Mon, 25 Mar 2019 21:59:32 +0000 (UTC) From: Tony Lindgren To: linux-omap@vger.kernel.org Cc: Dave Gerlach , Faiz Abbas , Greg Kroah-Hartman , Keerthy , Nishanth Menon , Peter Ujfalusi , Roger Quadros , Suman Anna , Tero Kristo , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH 10/14] bus: ti-sysc: Add support for early quirks based on register address Date: Mon, 25 Mar 2019 14:58:45 -0700 Message-Id: <20190325215849.13182-11-tony@atomide.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190325215849.13182-1-tony@atomide.com> References: <20190325215849.13182-1-tony@atomide.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org At least mcpdm needs an optional external clock enabled to function and this clock typically comes from the PMIC. We can detect mcpdm based on the interconnect target module address and set a quirk flag early. To do this, let's initialize the clocks a bit later and add a new function for sysc_init_early_quirks(). Note that we cannot yet enable the early quirks for mcpdm until the optional external clocks are handled in the in the following patch. Signed-off-by: Tony Lindgren --- drivers/bus/ti-sysc.c | 46 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 4 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 @@ -959,6 +959,42 @@ static const struct sysc_revision_quirk sysc_revision_quirks[] = { #endif }; +/* + * Early quirks based on module base and register offsets only that are + * needed before the module revision can be read + */ +static void sysc_init_early_quirks(struct sysc *ddata) +{ + const struct sysc_revision_quirk *q; + int i; + + for (i = 0; i < ARRAY_SIZE(sysc_revision_quirks); i++) { + q = &sysc_revision_quirks[i]; + + if (!q->base) + continue; + + if (q->base != ddata->module_pa) + continue; + + if (q->rev_offset >= 0 && + q->rev_offset != ddata->offsets[SYSC_REVISION]) + continue; + + if (q->sysc_offset >= 0 && + q->sysc_offset != ddata->offsets[SYSC_SYSCONFIG]) + continue; + + if (q->syss_offset >= 0 && + q->syss_offset != ddata->offsets[SYSC_SYSSTATUS]) + continue; + + ddata->name = q->name; + ddata->cfg.quirks |= q->quirks; + } +} + +/* Quirks that also consider the revision register value */ static void sysc_init_revision_quirks(struct sysc *ddata) { const struct sysc_revision_quirk *q; @@ -1825,10 +1861,6 @@ static int sysc_probe(struct platform_device *pdev) if (error) goto unprepare; - error = sysc_get_clocks(ddata); - if (error) - return error; - error = sysc_map_and_check_registers(ddata); if (error) goto unprepare; @@ -1849,6 +1881,12 @@ static int sysc_probe(struct platform_device *pdev) if (error) goto unprepare; + sysc_init_early_quirks(ddata); + + error = sysc_get_clocks(ddata); + if (error) + return error; + error = sysc_init_resets(ddata); if (error) return error; -- 2.21.0