From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f43.google.com (mail-wr1-f43.google.com [209.85.221.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CFD6A429000 for ; Tue, 21 Jul 2026 10:04:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.43 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784628265; cv=none; b=XS/Bt1t363g9mlfsecpht0tkf+2Bpckmbs/ulvCzhM9OfnxcwE/A8wYVF4iQgCyFcqDbWN6KjsdhgCkP+HsHlMYrvdUMq9ppr2SWoGLTZQSArkRPtx/oyYi7+14TVn9t3Gr38VXEQeJTdtoRjiuHEz8H9d/vsf/0Eb0MlW/aVvw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784628265; c=relaxed/simple; bh=WSP4K5mDBZtz2TmsSpWu2Au8Ihf1zXcU/eoIaZ1Yv78=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=ehJ6QCGOVSYCVrn1UMf3G403Lx5FqPcLOMeiF+9eKNQB3Rgvi6unox3SDuOBbf94l2QFIL9EZvh6LPo7kwMdK9J78ex/cLb95bkWuCTShaQnkpxf8Ye+XaHngUE0/nYqStQBo6yJvougzbIFKCr+PnuNuQqGgsrsfkRGTWYWzKg= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com; spf=pass smtp.mailfrom=suse.com; dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b=ggRy2ina; arc=none smtp.client-ip=209.85.221.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b="ggRy2ina" Received: by mail-wr1-f43.google.com with SMTP id ffacd0b85a97d-47640541585so5687017f8f.1 for ; Tue, 21 Jul 2026 03:04:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1784628262; x=1785233062; darn=vger.kernel.org; h=content-transfer-encoding:content-type:in-reply-to:autocrypt:from :content-language:references:cc:to:subject:user-agent:mime-version :date:message-id:from:to:cc:subject:date:message-id:reply-to :content-type; bh=kLeL9jKfipa/VjS3zS2dWv9s5mmuFH1TcnG1jZ4V6xI=; b=ggRy2inaEUsEEKky28TlEMOKLVioAN7Z8QqTkeNe9LW/EbbHNC5CTVm0NvedojAXoX h6vMX95u7vuwk/hZMckivgIiviZWD6heZs4cyNGPUDTzBvpa1rAzMGbU7HoS81gULkRf 2h1LauwrjECmFAdura3sznbG9hv/tdwdioI+HBAP5WUrC+bj5lVrwsoK9wAdm10qLVLd Lxv8Y4JqTDNiEgBHVF1mDiLaeQ4yYupThdgKJ7Hw5Jrk1UUrpAFp0ufTJ3r36GKzPym0 tzQeW2/40G0h6mS1QcJKFP2DFI5bNfNfYokdj2mGxtWURJlN/yn0jLC9PvCzRFl4Fo1c CpRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784628262; x=1785233062; h=content-transfer-encoding:content-type:in-reply-to:autocrypt:from :content-language:references:cc:to:subject:user-agent:mime-version :date:message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=kLeL9jKfipa/VjS3zS2dWv9s5mmuFH1TcnG1jZ4V6xI=; b=b+gYDaTivOF53ykvzpcPLbaaram2KvqTKoWKQY4wGrLdUqE7BLAqpqYsPvjJRvvTxc dBlhLjeG+9APeh1QMCi9/ui4pWV0Bqszc6aJ7fi3y79+Xjj/3TWp9afNzv3itltG53G6 GQdE8fkp95vJrljhjMxwVOZ7z6619d/qKdXDtv+HhLFGUko+igKASS9RHs2JkKFfyTNR OkTTmcaqNyKtug++noA+b1zMuJN80x/rC+M7CYw+LRWVNnbzfQ7kw6E/pciHbyrHRzuk SNut0zpWgRc0DGCJzVjbE/ASbVAuxl7EPgZ7qslbbplDz/7iCOuZlkE1H8y1fl+JvibE ERGg== X-Forwarded-Encrypted: i=1; AHgh+RrA89k818ko2tbFS6As860ac+1GYEib+fnG6837adVB6HBSMjkBVTGuL2e6rJY1Wp/QJmzApJvaVCsqhuc=@vger.kernel.org X-Gm-Message-State: AOJu0YwnvWxqBIT42r9tI4vEgga4l8f2r2cWeKknTKv6vVK7LnAO6Tym ucELAdVSZpdhp1hQW7roHLM12qfy6BilyI+WkXwYPslEQ8uVasnSsXoF8TcjgczwWq8= X-Gm-Gg: AR+sD127LmvJBbjcsa+JJUlwUVgajbN0AqKfqfJ3v7zSBSHt+26+WdjorFgMOLf87MX VZUb3rmv8QY9skuCa0X0atPpQzTLrTeGo5zDQlFV2Dqft2AOFYYvRgwIuIR3sJ2J96yIBcOzvry b5lCtNLEbzhfKafi1CWuFJGxj/85e+6RRKd/L2Vvu6gjr/qx/wTLLwTbzog5BORXDEGnVavi6HZ kwK4cO+T+Yfbbyf8rum+A1PRbx2iEeCzZnF+0+n0M6tS9XR5ODN4z8fcQ4GzIdygU94cHqWn27n mRUey+6GOTk0cID0BN5S9BHtcDiR3ts6IKh8UR21SX2VXvVarC9tlijmXMXUcOqSEVYl4UY0599 JEd2njW4ntU8/DAdKGR6nlgNthiCg0kSSxlzWLva4JWgpVME/Begr/k37dz31nPgABOvLW9LONk s6A9H1aIU/ex7Qb7o6UPgYbz03dy4caEqRd9vmysFRjxRhcJsy0Q== X-Received: by 2002:a05:6000:238a:b0:475:3a97:8e3c with SMTP id ffacd0b85a97d-47f6230f633mr19834090f8f.18.1784628261969; Tue, 21 Jul 2026 03:04:21 -0700 (PDT) Received: from [192.168.2.177] (48.85-85-171.dynamic.clientes.euskaltel.es. [85.85.171.48]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-47f63ee9281sm40830238f8f.36.2026.07.21.03.04.20 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 21 Jul 2026 03:04:21 -0700 (PDT) Message-ID: Date: Tue, 21 Jul 2026 12:04:15 +0200 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v3 2/3] pmdomain: mediatek: Add support for secure modem power domain control To: nikolai.burov@jolla.com, Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno , Ulf Hansson Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-pm@vger.kernel.org, Nikolai Burov References: <20260720-mt6858-pmdomain-v3-0-8966d8de93c8@jolla.com> <20260720-mt6858-pmdomain-v3-2-8966d8de93c8@jolla.com> Content-Language: en-US, ca-ES, es-ES From: Matthias Brugger Autocrypt: addr=mbrugger@suse.com; keydata= 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 PVrr2NoUqi/bxI8fFQJD1jVj8K0= In-Reply-To: <20260720-mt6858-pmdomain-v3-2-8966d8de93c8@jolla.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 20/07/2026 22:46, Nikolai Burov via B4 Relay wrote: > From: Nikolai Burov > > On recent MediaTek SoCs such as MT6858, the kernel is required to use > a secure monitor call (SMC) to enable or disable the modem power domain. > The power domain control register can be read, but firmware prevents it > from being modified directly. Some other parts of the power sequence, > such as setting the ext_buck_iso register, still need to be performed on > the kernel side. > > In preparation for modem support, add a flag to enable this new power > sequence for SoCs that need it. Power domains using this flag are not > expected to configure any bus protection registers, since these are > handled internally by the SMC call. > > Signed-off-by: Nikolai Burov Reviewed-by: Matthias Brugger > --- > drivers/pmdomain/mediatek/mtk-pm-domains.c | 50 +++++++++++++++++++++++++++--- > drivers/pmdomain/mediatek/mtk-pm-domains.h | 1 + > include/linux/soc/mediatek/mtk_sip_svc.h | 3 ++ > 3 files changed, 49 insertions(+), 5 deletions(-) > > diff --git a/drivers/pmdomain/mediatek/mtk-pm-domains.c b/drivers/pmdomain/mediatek/mtk-pm-domains.c > index 8309a4b46afb..5b4d860318a4 100644 > --- a/drivers/pmdomain/mediatek/mtk-pm-domains.c > +++ b/drivers/pmdomain/mediatek/mtk-pm-domains.c > @@ -57,6 +57,10 @@ > > #define MTK_SIP_KERNEL_HWCCF_CONTROL MTK_SIP_SMC_CMD(0x540) > > +/* Secure MTCMOS commands for modem subsystem */ > +#define MTK_MD_MTCMOS_ENABLE 18 > +#define MTK_MD_MTCMOS_DISABLE 19 > + > struct scpsys_domain { > struct generic_pm_domain genpd; > const struct scpsys_domain_data *data; > @@ -668,6 +672,34 @@ static int scpsys_modem_pwrseq_off(struct scpsys_domain *pd) > return 0; > } > > +static bool scpsys_modem_sec_poll(unsigned long cmd) > +{ > + struct arm_smccc_res res; > + > + arm_smccc_smc(MTK_SIP_KERNEL_CCCI_CONTROL, cmd, 1, 0, 0, 0, 0, 0, &res); > + > + return res.a0 == 0; > +} > + > +static int scpsys_modem_sec_power_on(bool on) > +{ > + struct arm_smccc_res res; > + unsigned long cmd = on ? MTK_MD_MTCMOS_ENABLE : MTK_MD_MTCMOS_DISABLE; > + bool tmp; > + int ret; > + > + arm_smccc_smc(MTK_SIP_KERNEL_CCCI_CONTROL, cmd, 0, 0, 0, 0, 0, 0, &res); > + if (res.a0 == 0) > + return 0; > + > + ret = readx_poll_timeout(scpsys_modem_sec_poll, cmd, tmp, tmp, > + MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT); > + if (ret < 0) > + return ret; > + > + return 0; > +} > + > static int scpsys_power_on(struct generic_pm_domain *genpd) > { > struct scpsys_domain *pd = container_of(genpd, struct scpsys_domain, genpd); > @@ -686,7 +718,9 @@ static int scpsys_power_on(struct generic_pm_domain *genpd) > regmap_clear_bits(scpsys->base, pd->data->ext_buck_iso_offs, > pd->data->ext_buck_iso_mask); > > - if (MTK_SCPD_CAPS(pd, MTK_SCPD_MODEM_PWRSEQ)) > + if (MTK_SCPD_CAPS(pd, MTK_SCPD_MODEM_SECURE_PWRSEQ)) > + ret = scpsys_modem_sec_power_on(true); > + else if (MTK_SCPD_CAPS(pd, MTK_SCPD_MODEM_PWRSEQ)) > ret = scpsys_modem_pwrseq_on(pd); > else if (MTK_SCPD_CAPS(pd, MTK_SCPD_SIMPLE_PWRSEQ)) > ret = scpsys_simple_pwrseq_on(pd); > @@ -717,7 +751,8 @@ static int scpsys_power_on(struct generic_pm_domain *genpd) > goto err_pwr_ack; > } > > - if (!MTK_SCPD_CAPS(pd, MTK_SCPD_SIMPLE_PWRSEQ)) { > + if (!MTK_SCPD_CAPS(pd, MTK_SCPD_SIMPLE_PWRSEQ) && > + !MTK_SCPD_CAPS(pd, MTK_SCPD_MODEM_SECURE_PWRSEQ)) { > ret = scpsys_sram_enable(pd); > if (ret < 0) > goto err_disable_subsys_clks; > @@ -739,7 +774,8 @@ static int scpsys_power_on(struct generic_pm_domain *genpd) > err_enable_bus_protect: > scpsys_bus_protect_enable(pd, 0); > err_disable_sram: > - if (!MTK_SCPD_CAPS(pd, MTK_SCPD_SIMPLE_PWRSEQ)) > + if (!MTK_SCPD_CAPS(pd, MTK_SCPD_SIMPLE_PWRSEQ) && > + !MTK_SCPD_CAPS(pd, MTK_SCPD_MODEM_SECURE_PWRSEQ)) > scpsys_sram_disable(pd); > err_disable_subsys_clks: > if (!MTK_SCPD_CAPS(pd, MTK_SCPD_STRICT_BUS_PROTECTION)) > @@ -761,7 +797,11 @@ static int scpsys_power_off_internal(struct scpsys_domain *pd) > if (ret < 0) > return ret; > > - if (!MTK_SCPD_CAPS(pd, MTK_SCPD_SIMPLE_PWRSEQ)) { > + if (MTK_SCPD_CAPS(pd, MTK_SCPD_MODEM_SECURE_PWRSEQ)) { > + ret = scpsys_modem_sec_power_on(false); > + if (ret) > + return ret; > + } else if (!MTK_SCPD_CAPS(pd, MTK_SCPD_SIMPLE_PWRSEQ)) { > ret = scpsys_sram_disable(pd); > if (ret < 0) > return ret; > @@ -781,7 +821,7 @@ static int scpsys_power_off_internal(struct scpsys_domain *pd) > ret = scpsys_modem_pwrseq_off(pd); > else if (MTK_SCPD_CAPS(pd, MTK_SCPD_SIMPLE_PWRSEQ)) > ret = scpsys_simple_pwrseq_off(pd); > - else > + else if (!MTK_SCPD_CAPS(pd, MTK_SCPD_MODEM_SECURE_PWRSEQ)) > ret = scpsys_ctl_pwrseq_off(pd); > > if (ret < 0) { > diff --git a/drivers/pmdomain/mediatek/mtk-pm-domains.h b/drivers/pmdomain/mediatek/mtk-pm-domains.h > index 092403de66fa..8690690335ad 100644 > --- a/drivers/pmdomain/mediatek/mtk-pm-domains.h > +++ b/drivers/pmdomain/mediatek/mtk-pm-domains.h > @@ -18,6 +18,7 @@ > #define MTK_SCPD_SKIP_RESET_B BIT(11) > #define MTK_SCPD_INFRA_PWR_CTL BIT(12) > #define MTK_SCPD_SIMPLE_PWRSEQ BIT(13) > +#define MTK_SCPD_MODEM_SECURE_PWRSEQ BIT(14) > #define MTK_SCPD_CAPS(_scpd, _x) ((_scpd)->data ? \ > (_scpd)->data->caps & (_x) : \ > (_scpd)->hwv_data->caps & (_x)) > diff --git a/include/linux/soc/mediatek/mtk_sip_svc.h b/include/linux/soc/mediatek/mtk_sip_svc.h > index abe24a73ee19..6c95a29b79fa 100644 > --- a/include/linux/soc/mediatek/mtk_sip_svc.h > +++ b/include/linux/soc/mediatek/mtk_sip_svc.h > @@ -22,6 +22,9 @@ > ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL, MTK_SIP_SMC_CONVENTION, \ > ARM_SMCCC_OWNER_SIP, fn_id) > > +/* Modem related SMC call */ > +#define MTK_SIP_KERNEL_CCCI_CONTROL MTK_SIP_SMC_CMD(0x505) > + > /* DVFSRC SMC calls */ > #define MTK_SIP_DVFSRC_VCOREFS_CONTROL MTK_SIP_SMC_CMD(0x506) > >