Received: by 2002:a05:6359:c8b:b0:c7:702f:21d4 with SMTP id go11csp389225rwb; Thu, 22 Sep 2022 00:38:33 -0700 (PDT) X-Google-Smtp-Source: AMsMyM7fdWdnDHofeEKzVFF0wRcInVIcWmRhSDOy2aR2ayDUV8ucUSaj6YbIFjLgNfeR5WspbGUt X-Received: by 2002:a05:6402:27c8:b0:451:440a:2f48 with SMTP id c8-20020a05640227c800b00451440a2f48mr1877706ede.1.1663832313650; Thu, 22 Sep 2022 00:38:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1663832313; cv=none; d=google.com; s=arc-20160816; b=fF/jrT0khPz1yaX9aFK/kIxzOcKL5SbNi/+KJpIPezj+FaEG1TBX60K3mCvRaJWAcD IRtC3/vVzJV+AWRSBEa7qmvvXuijiXwSS9k1xLWAloHzggVVY4OjzcT+gaGs75eofgja qJoFYxQJVAX89WWn67C/ciR2ZnDYt7oa+y1NgcJJ+Syz3FfFMyJyd3F58XANLryiUc4n ecsTQjG8TIczGvo62Yj2WDEais6CwFSZ1OVBgIxopVCWHOicEN8Zv3jVTkZNM0tx4cyi 32RkQbE4KiNQcYI5VkhQytGENCRdeJMBVddyaqd1LLHW/vZd2/opcpPmMwBSYbTyY3C8 1H7A== 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=tAeN+xu1GDb8xrlsTMzwCxm8H1fH+WYNdnN8ftiLb0vPLw1obDK/cGMkDVmQZ/1U0T CQR/09jeIEpvm82UoL2cMntODDeuS+cY2239J3O6JL/RdaLAjKrt+wnGa6in38iVuao7 phdJRO8eV1idTJLc0vPMQuzgO15E8OB9cJ7h4LxAJ3Lv6wloNBl2z+D//HTaHjaDVwuk e8uJxSUugU46ItnbkxYUQ9r3p9QRRwOOz2sY0kbFyPBhwNt7P1XT68dTHwC56/718UqH ZpFQG2SklwP17/xxxVkRXmLDZOBoTEkulE54/qo833VU9AXXlXOBTzmHW/VdSqFhQKnz Bpdw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@maxlinear.com header.s=selector header.b=EenPhqvW; 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 f28-20020a50a6dc000000b004483b772d31si4234268edc.230.2022.09.22.00.38.07; Thu, 22 Sep 2022 00:38:33 -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=EenPhqvW; 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 S230119AbiIVGZF (ORCPT + 99 others); Thu, 22 Sep 2022 02:25:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55260 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230080AbiIVGYz (ORCPT ); Thu, 22 Sep 2022 02:24:55 -0400 Received: from us-smtp-delivery-115.mimecast.com (us-smtp-delivery-115.mimecast.com [170.10.129.115]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 206699A9E8 for ; Wed, 21 Sep 2022 23:24:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=maxlinear.com; s=selector; t=1663827891; 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=EenPhqvWigLB7aTvIy0DSg/REUhWFPlCNZq6ndHh/kiZXDl5ua9MqqFlh1PMLxT0HMdk7G r5cdOWHlMjy3z+2GVZBCAUIvfe1cD1FfsH+AwGvil8aA6A+LlP5QBw8Gna2t8iKGN/QTjj LzxZ1uMvjwrya+gwqiBv/eYRqbdNWF0qJH+Cl4vsA+Fcmalga31oK1nODSEYg8VlUlkHmP Kv0fIBBRdYIe9+EeBH9cPgtYDp2MG3stX6JhDm/KmBaohWk6FFVCf+gV+DOi3ZzfNOWbjg /qqda3Vj+G2IykvwYwDRHx8QNFzpAjX/Gz2kTH4MEbZs2GBlIwD6ZN6wTBB4sw== 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-151-LhUWCdljOtSMnXHrnA6CAg-1; Thu, 22 Sep 2022 02:24:48 -0400 X-MC-Unique: LhUWCdljOtSMnXHrnA6CAg-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; Wed, 21 Sep 2022 23:24:45 -0700 From: Rahul Tanwar To: , , CC: , , "Rahul Tanwar" Subject: [PATCH RESEND v2 3/5] clk: mxl: Avoid disabling gate clocks from clk driver Date: Thu, 22 Sep 2022 14:24:26 +0800 Message-ID: <5a88bd5a9e93cc6e794080e5cac821ae0c27ec56.1663827071.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.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW,SPF_HELO_NONE, SPF_PASS 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