Received: by 2002:a05:6358:bb9e:b0:b9:5105:a5b4 with SMTP id df30csp2840999rwb; Mon, 5 Sep 2022 02:18:44 -0700 (PDT) X-Google-Smtp-Source: AA6agR6rnjVH7pbkJLuR48lvowKUxEieP3gQTkZCf9KDGWX6i7RNuh2Na9HqBa16IYcxaU9Nzx/M X-Received: by 2002:a17:907:160d:b0:741:a253:422f with SMTP id hb13-20020a170907160d00b00741a253422fmr22412795ejc.640.1662369524116; Mon, 05 Sep 2022 02:18:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1662369524; cv=none; d=google.com; s=arc-20160816; b=ypvFGKCvstfO27tWD74gwg7TyGP1ePfF65WickmF2G59k/ZSyobyQyBhDMmiO9DkHj F5chlg+2L9koFb3D32yfQA6+ndN3PzIuls7g08tiOh8aDNXUbw2NG6BJ6L6AyqD1IcM8 lA83q3bnLTvVn4PTY43w6B/8MWIJh318/YyunX6oKdIqq6TnKVbTw8y+9pTnj4aKArNL AZxKC8AwVKKHkgnvpQZF8EYZJb0tpbIF4n6Bulbp4HIgNZJ/uHBtOBrJOjJ/pog84IQH o7wDNE6E5+wKYhixivArqIrzMVb8E1+9DQoLvahykCF2LIIL4D7pMyjdT2UqfTug39mS qX3Q== 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=AdS8+B/O/n4mduTrHxo0RL4fuHx8wGK9eiouBtBzHLE=; b=SZ113DvdcutYdhddSKeD+A2xe7VTnr0A1SHqGDqK/qRRK50UfAjieNVQhgPbIqbpbR vFmalVq7vxexTf0eoiSlp0EvUBVxSEsUAVHz/7a68axX8Wes78Ewqe8UNXjicNbleyNW QGnh8HMa/Kg0SNPyQFa6Zbu5S99OMMMnl8/WtzEzCwlxqF4V3QJDrcF568J2mAe8ruJB CdLSBSC//ArL/eQ49pUqeEWjmV0mNWpW/hwxPKxTYxHgJ3INqnnq5tIrD0JB5TIAqXdx 6zfLNl6LJQZm1lPy0P3FEqJhlhMu63C9GUDb1spXkoK2YaV9aW+rrI/GkGqD7Zk6zKMK JIxw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@maxlinear.com header.s=selector header.b="nq/Sz1Z7"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=maxlinear.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id p24-20020a50cd98000000b0044882fc9940si6427901edi.569.2022.09.05.02.18.19; Mon, 05 Sep 2022 02:18:43 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@maxlinear.com header.s=selector header.b="nq/Sz1Z7"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=maxlinear.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236734AbiIEHzM (ORCPT + 99 others); Mon, 5 Sep 2022 03:55:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58014 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236396AbiIEHzJ (ORCPT ); Mon, 5 Sep 2022 03:55:09 -0400 Received: from us-smtp-delivery-115.mimecast.com (us-smtp-delivery-115.mimecast.com [170.10.133.115]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1F060175B1 for ; Mon, 5 Sep 2022 00:55:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=maxlinear.com; s=selector; t=1662364501; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=AdS8+B/O/n4mduTrHxo0RL4fuHx8wGK9eiouBtBzHLE=; b=nq/Sz1Z7EABiXwAHZKYqd+Carge9I9yVZMSrZasFXAw5iMpT+xL9kqBYBTKsCI8emXOaRC 5xCEosXDh7yh+gs1cEXpOuWwwHrKFYVAY/VyKrZCrCRA2eLG1YteZC6HSimHW+M8hkzSoT hfnEk80xbK9/LKXf3idMg72/DBI7bOunHmfFZI/80nEZLEEApsMvcIWLzYISLffCKGyhvo 3DfhZzTTcIsXS4yYs39KKDk5D1fQ9GzRkypE9APQ5big6pfaA2eSxVsvYB6ckwU6IBBjSm IZzeUfz8NuF28TcUzgFk4FX4zQtHEFz3FUG2SYjl4bc6r56As52GzF5VbngPNw== Received: from mail.maxlinear.com (174-47-1-83.static.ctl.one [174.47.1.83]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id us-mta-354-xdhXJq8hOTmBhXYhWCcCPw-1; Mon, 05 Sep 2022 03:44:03 -0400 X-MC-Unique: xdhXJq8hOTmBhXYhWCcCPw-1 Received: from sgsxdev001.isng.phoenix.local (10.226.81.111) by mail.maxlinear.com (10.23.38.120) with Microsoft SMTP Server id 15.1.2375.24; Mon, 5 Sep 2022 00:43:59 -0700 From: Rahul Tanwar To: , , CC: , , "Rahul Tanwar" Subject: [PATCH v2 3/5] clk: mxl: Avoid disabling gate clocks from clk driver Date: Mon, 5 Sep 2022 15:43:46 +0800 Message-ID: <496372f326760be1b997ae2aabd1999627f7376d.1662363020.git.rtanwar@maxlinear.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: References: MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: maxlinear.com Content-Type: text/plain; charset=WINDOWS-1252 Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In MxL's LGM SoC, gate clocks are supposed to be enabled or disabled from EPU (power management IP) in certain power saving modes. If gate clocks are allowed to be enabled/disabled from CGU clk driver, then there arises a conflict where in case clk driver disables a gate clk, and then EPU tries to disable the same gate clk, then it will hang polling for the clk gated successful status. To avoid such a conflict, disable gate clocks enabling/disabling from CGU clk driver. But add a GATE_CLK_HW flag to control this in order to be backward compatible with other SoCs which share the same CGU IP but not the same EPU IP. Signed-off-by: Rahul Tanwar --- drivers/clk/x86/clk-cgu.c | 32 ++++++++++++++++++++++++-------- drivers/clk/x86/clk-cgu.h | 1 + 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/drivers/clk/x86/clk-cgu.c b/drivers/clk/x86/clk-cgu.c index 1f7e93de67bc..d24173cfe0b0 100644 --- a/drivers/clk/x86/clk-cgu.c +++ b/drivers/clk/x86/clk-cgu.c @@ -258,8 +258,12 @@ static int lgm_clk_gate_enable(struct clk_hw *hw) =09struct lgm_clk_gate *gate =3D to_lgm_clk_gate(hw); =09unsigned int reg; =20 -=09reg =3D GATE_HW_REG_EN(gate->reg); -=09lgm_set_clk_val(gate->membase, reg, gate->shift, 1, 1); +=09if (gate->flags & GATE_CLK_HW) { +=09=09reg =3D GATE_HW_REG_EN(gate->reg); +=09=09lgm_set_clk_val(gate->membase, reg, gate->shift, 1, 1); +=09} else { +=09=09gate->reg =3D 1; +=09} =20 =09return 0; } @@ -269,8 +273,12 @@ static void lgm_clk_gate_disable(struct clk_hw *hw) =09struct lgm_clk_gate *gate =3D to_lgm_clk_gate(hw); =09unsigned int reg; =20 -=09reg =3D GATE_HW_REG_DIS(gate->reg); -=09lgm_set_clk_val(gate->membase, reg, gate->shift, 1, 1); +=09if (gate->flags & GATE_CLK_HW) { +=09=09reg =3D GATE_HW_REG_DIS(gate->reg); +=09=09lgm_set_clk_val(gate->membase, reg, gate->shift, 1, 1); +=09} else { +=09=09gate->reg =3D 0; +=09} } =20 static int lgm_clk_gate_is_enabled(struct clk_hw *hw) @@ -278,8 +286,12 @@ static int lgm_clk_gate_is_enabled(struct clk_hw *hw) =09struct lgm_clk_gate *gate =3D to_lgm_clk_gate(hw); =09unsigned int reg, ret; =20 -=09reg =3D GATE_HW_REG_STAT(gate->reg); -=09ret =3D lgm_get_clk_val(gate->membase, reg, gate->shift, 1); +=09if (gate->flags & GATE_CLK_HW) { +=09=09reg =3D GATE_HW_REG_STAT(gate->reg); +=09=09ret =3D lgm_get_clk_val(gate->membase, reg, gate->shift, 1); +=09} else { +=09=09ret =3D gate->reg; +=09} =20 =09return ret; } @@ -315,7 +327,8 @@ lgm_clk_register_gate(struct lgm_clk_provider *ctx, =09init.num_parents =3D pname ? 1 : 0; =20 =09gate->membase =3D ctx->membase; -=09gate->reg =3D reg; +=09if (cflags & GATE_CLK_HW) +=09=09gate->reg =3D reg; =09gate->shift =3D shift; =09gate->flags =3D cflags; =09gate->hw.init =3D &init; @@ -326,7 +339,10 @@ lgm_clk_register_gate(struct lgm_clk_provider *ctx, =09=09return ERR_PTR(ret); =20 =09if (cflags & CLOCK_FLAG_VAL_INIT) { -=09=09lgm_set_clk_val(gate->membase, reg, shift, 1, list->gate_val); +=09=09if (cflags & GATE_CLK_HW) +=09=09=09lgm_set_clk_val(gate->membase, reg, shift, 1, list->gate_val); +=09=09else +=09=09=09gate->reg =3D 1; =09} =20 =09return hw; diff --git a/drivers/clk/x86/clk-cgu.h b/drivers/clk/x86/clk-cgu.h index 0aa0f35d63a0..73ce84345f81 100644 --- a/drivers/clk/x86/clk-cgu.h +++ b/drivers/clk/x86/clk-cgu.h @@ -197,6 +197,7 @@ struct lgm_clk_branch { /* clock flags definition */ #define CLOCK_FLAG_VAL_INIT=09BIT(16) #define MUX_CLK_SW=09=09BIT(17) +#define GATE_CLK_HW=09=09BIT(18) =20 #define LGM_MUX(_id, _name, _pdata, _f, _reg,=09=09\ =09=09_shift, _width, _cf, _v)=09=09\ --=20 2.17.1