* [PATCH V5 0/4] ufs: ufs-qcom: Add support firmware managed platforms
@ 2026-01-13 8:00 Ram Kumar Dwivedi
2026-01-13 8:00 ` [PATCH V5 1/4] MAINTAINERS: broaden UFS Qualcomm binding file pattern Ram Kumar Dwivedi
` (5 more replies)
0 siblings, 6 replies; 12+ messages in thread
From: Ram Kumar Dwivedi @ 2026-01-13 8:00 UTC (permalink / raw)
To: mani, alim.akhtar, avri.altman, bvanassche, robh, krzk+dt,
conor+dt, James.Bottomley, martin.petersen, ram.dwivedi
Cc: linux-arm-msm, linux-scsi, devicetree, linux-kernel
On Qualcomm automotive SoC SA8255P, platform resource like clocks,
interconnect, resets, regulators and PHY are configured remotely by
firmware.
Logical power domain is used to abstract these resources in firmware
and SCMI power protocol is used to request resource operations by using
runtime PM framework APIs such as pm_runtime_get/put_sync to invoke
power_on/_off calls from kernel respectively.
Changes from V1:
1. Updated "dma-coherent" property type from boolean to just true.
2. Switched from QUIC mail ID to OSS mail ID.
3. Added Acknowledged by tag from Dmitry for patch 1/3
4. Added Reviewed-by tag from Manivannan for patch 1/3
Changes from V2:
1. Added new patch "scsi: ufs: core Enforce minimum pm level for sysfs
configuration" to prevent users from selecting unsupported power
levels via sysfs.
2. Set minimum power level (UFS_PM_LVL_5) for SA8255P platforms.
3. Changed DT example in qcom,sa8255p-ufshc.yaml to use single-cell
addressing instead of dual-cell addressing.
Changes from V3:
1. Removed address-cells and size-cells from example DT in
qcom,sa8255p-ufshc.yaml.
Changes from V4:
1. Fixed indentation in example DT in qcom,sa8255p-ufshc.yaml.
2. Added missing kernel-doc description for pm_lvl_min in ufshcd.h.
3. Removed redundant spm_lvl check.
4. Consolidated spm_lvl, rpm_lvl, and pm_lvl_min assignments into
a single line.
Ram Kumar Dwivedi (4):
MAINTAINERS: broaden UFS Qualcomm binding file pattern
dt-bindings: ufs: Document bindings for SA8255P UFS Host Controller
scsi: ufs: core Enforce minimum pm level for sysfs configuration
ufs: ufs-qcom: Add support for firmware-managed resource abstraction
.../bindings/ufs/qcom,sa8255p-ufshc.yaml | 56 +++++++
MAINTAINERS | 2 +-
drivers/ufs/core/ufs-sysfs.c | 2 +-
drivers/ufs/host/ufs-qcom.c | 156 +++++++++++++++++-
drivers/ufs/host/ufs-qcom.h | 1 +
include/ufs/ufshcd.h | 2 +
6 files changed, 216 insertions(+), 3 deletions(-)
create mode 100644 Documentation/devicetree/bindings/ufs/qcom,sa8255p-ufshc.yaml
--
2.34.1
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH V5 1/4] MAINTAINERS: broaden UFS Qualcomm binding file pattern
2026-01-13 8:00 [PATCH V5 0/4] ufs: ufs-qcom: Add support firmware managed platforms Ram Kumar Dwivedi
@ 2026-01-13 8:00 ` Ram Kumar Dwivedi
2026-01-13 8:00 ` [PATCH V5 2/4] dt-bindings: ufs: Document bindings for SA8255P UFS Host Controller Ram Kumar Dwivedi
` (4 subsequent siblings)
5 siblings, 0 replies; 12+ messages in thread
From: Ram Kumar Dwivedi @ 2026-01-13 8:00 UTC (permalink / raw)
To: mani, alim.akhtar, avri.altman, bvanassche, robh, krzk+dt,
conor+dt, James.Bottomley, martin.petersen, ram.dwivedi
Cc: linux-arm-msm, linux-scsi, devicetree, linux-kernel,
Dmitry Baryshkov
Update the file pattern for UFS Qualcomm devicetree bindings to match
all files under `Documentation/devicetree/bindings/ufs/qcom*` instead
of only `qcom,ufs.yaml`. This ensures maintainers are correctly
notified for any related binding changes.
Acked-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Reviewed-by: Manivannan Sadhasivam <mani@kernel.org>
Signed-off-by: Ram Kumar Dwivedi <ram.dwivedi@oss.qualcomm.com>
---
MAINTAINERS | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index 0dbf349fc1ed..70c43fc74401 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -26842,7 +26842,7 @@ M: Manivannan Sadhasivam <mani@kernel.org>
L: linux-arm-msm@vger.kernel.org
L: linux-scsi@vger.kernel.org
S: Maintained
-F: Documentation/devicetree/bindings/ufs/qcom,ufs.yaml
+F: Documentation/devicetree/bindings/ufs/qcom*
F: drivers/ufs/host/ufs-qcom*
UNIVERSAL FLASH STORAGE HOST CONTROLLER DRIVER RENESAS HOOKS
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH V5 2/4] dt-bindings: ufs: Document bindings for SA8255P UFS Host Controller
2026-01-13 8:00 [PATCH V5 0/4] ufs: ufs-qcom: Add support firmware managed platforms Ram Kumar Dwivedi
2026-01-13 8:00 ` [PATCH V5 1/4] MAINTAINERS: broaden UFS Qualcomm binding file pattern Ram Kumar Dwivedi
@ 2026-01-13 8:00 ` Ram Kumar Dwivedi
2026-01-13 16:00 ` Krzysztof Kozlowski
2026-01-20 13:31 ` Manivannan Sadhasivam
2026-01-13 8:00 ` [PATCH V5 3/4] scsi: ufs: core Enforce minimum pm level for sysfs configuration Ram Kumar Dwivedi
` (3 subsequent siblings)
5 siblings, 2 replies; 12+ messages in thread
From: Ram Kumar Dwivedi @ 2026-01-13 8:00 UTC (permalink / raw)
To: mani, alim.akhtar, avri.altman, bvanassche, robh, krzk+dt,
conor+dt, James.Bottomley, martin.petersen, ram.dwivedi
Cc: linux-arm-msm, linux-scsi, devicetree, linux-kernel, Anjana Hari
Document the device tree bindings for UFS host controller on
Qualcomm SA8255P platform which integrates firmware-managed
resources.
The platform firmware implements the SCMI server and manages
resources such as the PHY, clocks, regulators and resets via the
SCMI power protocol. As a result, the OS-visible DT only describes
the controller’s MMIO, interrupt, IOMMU and power-domain interfaces.
The generic "qcom,ufshc" and "jedec,ufs-2.0" compatible strings are
removed from the binding, since this firmware managed design won't
be compatible with the drivers doing full resource management.
Co-developed-by: Anjana Hari <anjana.hari@oss.qualcomm.com>
Signed-off-by: Anjana Hari <anjana.hari@oss.qualcomm.com>
Signed-off-by: Ram Kumar Dwivedi <ram.dwivedi@oss.qualcomm.com>
---
.../bindings/ufs/qcom,sa8255p-ufshc.yaml | 56 +++++++++++++++++++
1 file changed, 56 insertions(+)
create mode 100644 Documentation/devicetree/bindings/ufs/qcom,sa8255p-ufshc.yaml
diff --git a/Documentation/devicetree/bindings/ufs/qcom,sa8255p-ufshc.yaml b/Documentation/devicetree/bindings/ufs/qcom,sa8255p-ufshc.yaml
new file mode 100644
index 000000000000..75fae9f1eba7
--- /dev/null
+++ b/Documentation/devicetree/bindings/ufs/qcom,sa8255p-ufshc.yaml
@@ -0,0 +1,56 @@
+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/ufs/qcom,sa8255p-ufshc.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Qualcomm SA8255P UFS Host Controller
+
+maintainers:
+ - Ram Kumar Dwivedi <ram.dwivedi@oss.qualcomm.com>
+
+properties:
+ compatible:
+ const: qcom,sa8255p-ufshc
+
+ reg:
+ maxItems: 1
+
+ interrupts:
+ maxItems: 1
+
+ iommus:
+ maxItems: 1
+
+ dma-coherent: true
+
+ power-domains:
+ maxItems: 1
+
+required:
+ - compatible
+ - reg
+ - interrupts
+ - power-domains
+ - iommus
+ - dma-coherent
+
+allOf:
+ - $ref: ufs-common.yaml
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/interrupt-controller/arm-gic.h>
+
+ ufshc@1d84000 {
+ compatible = "qcom,sa8255p-ufshc";
+ reg = <0x01d84000 0x3000>;
+ interrupts = <GIC_SPI 265 IRQ_TYPE_LEVEL_HIGH>;
+ lanes-per-direction = <2>;
+
+ iommus = <&apps_smmu 0x100 0x0>;
+ power-domains = <&scmi3_pd 0>;
+ dma-coherent;
+ };
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH V5 3/4] scsi: ufs: core Enforce minimum pm level for sysfs configuration
2026-01-13 8:00 [PATCH V5 0/4] ufs: ufs-qcom: Add support firmware managed platforms Ram Kumar Dwivedi
2026-01-13 8:00 ` [PATCH V5 1/4] MAINTAINERS: broaden UFS Qualcomm binding file pattern Ram Kumar Dwivedi
2026-01-13 8:00 ` [PATCH V5 2/4] dt-bindings: ufs: Document bindings for SA8255P UFS Host Controller Ram Kumar Dwivedi
@ 2026-01-13 8:00 ` Ram Kumar Dwivedi
2026-01-20 13:29 ` Manivannan Sadhasivam
2026-01-20 17:44 ` Bart Van Assche
2026-01-13 8:00 ` [PATCH V5 4/4] ufs: ufs-qcom: Add support for firmware-managed resource abstraction Ram Kumar Dwivedi
` (2 subsequent siblings)
5 siblings, 2 replies; 12+ messages in thread
From: Ram Kumar Dwivedi @ 2026-01-13 8:00 UTC (permalink / raw)
To: mani, alim.akhtar, avri.altman, bvanassche, robh, krzk+dt,
conor+dt, James.Bottomley, martin.petersen, ram.dwivedi
Cc: linux-arm-msm, linux-scsi, devicetree, linux-kernel
Some UFS platforms only support a limited subset of power levels.
Currently, the sysfs interface allows users to set any pm level
without validating the minimum supported value. If an unsupported
level is selected, suspend may fail.
Introduce an pm_lvl_min field in the ufs_hba structure and use it
to clamp the pm level requested via sysfs so that only supported
levels are accepted. Platforms that require a minimum pm level
can set this field during probe.
Signed-off-by: Ram Kumar Dwivedi <ram.dwivedi@oss.qualcomm.com>
---
drivers/ufs/core/ufs-sysfs.c | 2 +-
include/ufs/ufshcd.h | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/ufs/core/ufs-sysfs.c b/drivers/ufs/core/ufs-sysfs.c
index b33f8656edb5..02e5468ad49d 100644
--- a/drivers/ufs/core/ufs-sysfs.c
+++ b/drivers/ufs/core/ufs-sysfs.c
@@ -141,7 +141,7 @@ static inline ssize_t ufs_sysfs_pm_lvl_store(struct device *dev,
if (kstrtoul(buf, 0, &value))
return -EINVAL;
- if (value >= UFS_PM_LVL_MAX)
+ if (value >= UFS_PM_LVL_MAX || value < hba->pm_lvl_min)
return -EINVAL;
if (ufs_pm_lvl_states[value].dev_state == UFS_DEEPSLEEP_PWR_MODE &&
diff --git a/include/ufs/ufshcd.h b/include/ufs/ufshcd.h
index 19154228780b..a64c19563b03 100644
--- a/include/ufs/ufshcd.h
+++ b/include/ufs/ufshcd.h
@@ -834,6 +834,7 @@ enum ufshcd_mcq_opr {
* @uic_link_state: active state of the link to the UFS device.
* @rpm_lvl: desired UFS power management level during runtime PM.
* @spm_lvl: desired UFS power management level during system PM.
+ * @pm_lvl_min: minimum supported power management level.
* @pm_op_in_progress: whether or not a PM operation is in progress.
* @ahit: value of Auto-Hibernate Idle Timer register.
* @outstanding_tasks: Bits representing outstanding task requests
@@ -972,6 +973,7 @@ struct ufs_hba {
enum ufs_pm_level rpm_lvl;
/* Desired UFS power management level during system PM */
enum ufs_pm_level spm_lvl;
+ enum ufs_pm_level pm_lvl_min;
int pm_op_in_progress;
/* Auto-Hibernate Idle Timer register value */
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH V5 4/4] ufs: ufs-qcom: Add support for firmware-managed resource abstraction
2026-01-13 8:00 [PATCH V5 0/4] ufs: ufs-qcom: Add support firmware managed platforms Ram Kumar Dwivedi
` (2 preceding siblings ...)
2026-01-13 8:00 ` [PATCH V5 3/4] scsi: ufs: core Enforce minimum pm level for sysfs configuration Ram Kumar Dwivedi
@ 2026-01-13 8:00 ` Ram Kumar Dwivedi
2026-01-20 13:31 ` Manivannan Sadhasivam
2026-01-24 3:09 ` [PATCH V5 0/4] ufs: ufs-qcom: Add support firmware managed platforms Martin K. Petersen
2026-02-04 3:52 ` Martin K. Petersen
5 siblings, 1 reply; 12+ messages in thread
From: Ram Kumar Dwivedi @ 2026-01-13 8:00 UTC (permalink / raw)
To: mani, alim.akhtar, avri.altman, bvanassche, robh, krzk+dt,
conor+dt, James.Bottomley, martin.petersen, ram.dwivedi
Cc: linux-arm-msm, linux-scsi, devicetree, linux-kernel, Anjana Hari,
Shazad Hussain
Add a compatible string for SA8255p platforms where resources such as
PHY, clocks, regulators, and resets are managed by firmware through an
SCMI server. Use the SCMI power protocol to abstract these resources and
invoke power operations via runtime PM APIs (pm_runtime_get/put_sync).
Introduce vendor operations (vops) for SA8255p targets to enable SCMI-
based resource control. In this model, capabilities like clock scaling
and gating are not yet supported; these will be added incrementally.
Co-developed-by: Anjana Hari <anjana.hari@oss.qualcomm.com>
Signed-off-by: Anjana Hari <anjana.hari@oss.qualcomm.com>
Co-developed-by: Shazad Hussain <shazad.hussain@oss.qualcomm.com>
Signed-off-by: Shazad Hussain <shazad.hussain@oss.qualcomm.com>
Signed-off-by: Ram Kumar Dwivedi <ram.dwivedi@oss.qualcomm.com>
---
drivers/ufs/host/ufs-qcom.c | 156 +++++++++++++++++++++++++++++++++++-
drivers/ufs/host/ufs-qcom.h | 1 +
2 files changed, 156 insertions(+), 1 deletion(-)
diff --git a/drivers/ufs/host/ufs-qcom.c b/drivers/ufs/host/ufs-qcom.c
index 8ebee0cc5313..375fd24ba458 100644
--- a/drivers/ufs/host/ufs-qcom.c
+++ b/drivers/ufs/host/ufs-qcom.c
@@ -14,6 +14,7 @@
#include <linux/of.h>
#include <linux/phy/phy.h>
#include <linux/platform_device.h>
+#include <linux/pm_domain.h>
#include <linux/reset-controller.h>
#include <linux/time.h>
#include <linux/unaligned.h>
@@ -619,6 +620,27 @@ static int ufs_qcom_hce_enable_notify(struct ufs_hba *hba,
return err;
}
+static int ufs_qcom_fw_managed_hce_enable_notify(struct ufs_hba *hba,
+ enum ufs_notify_change_status status)
+{
+ struct ufs_qcom_host *host = ufshcd_get_variant(hba);
+
+ switch (status) {
+ case PRE_CHANGE:
+ ufs_qcom_select_unipro_mode(host);
+ break;
+ case POST_CHANGE:
+ ufs_qcom_enable_hw_clk_gating(hba);
+ ufs_qcom_ice_enable(host);
+ break;
+ default:
+ dev_err(hba->dev, "Invalid status %d\n", status);
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
/**
* ufs_qcom_cfg_timers - Configure ufs qcom cfg timers
*
@@ -789,6 +811,33 @@ static int ufs_qcom_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op)
return ufs_qcom_ice_resume(host);
}
+static int ufs_qcom_fw_managed_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op,
+ enum ufs_notify_change_status status)
+{
+ struct ufs_qcom_host *host = ufshcd_get_variant(hba);
+
+ if (status == PRE_CHANGE)
+ return 0;
+
+ pm_runtime_put_sync(hba->dev);
+
+ return ufs_qcom_ice_suspend(host);
+}
+
+static int ufs_qcom_fw_managed_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op)
+{
+ struct ufs_qcom_host *host = ufshcd_get_variant(hba);
+ int err;
+
+ err = pm_runtime_resume_and_get(hba->dev);
+ if (err) {
+ dev_err(hba->dev, "PM runtime resume failed: %d\n", err);
+ return err;
+ }
+
+ return ufs_qcom_ice_resume(host);
+}
+
static void ufs_qcom_dev_ref_clk_ctrl(struct ufs_qcom_host *host, bool enable)
{
if (host->dev_ref_clk_ctrl_mmio &&
@@ -1421,6 +1470,54 @@ static void ufs_qcom_exit(struct ufs_hba *hba)
phy_exit(host->generic_phy);
}
+static int ufs_qcom_fw_managed_init(struct ufs_hba *hba)
+{
+ struct device *dev = hba->dev;
+ struct ufs_qcom_host *host;
+ int err;
+
+ host = devm_kzalloc(dev, sizeof(*host), GFP_KERNEL);
+ if (!host)
+ return -ENOMEM;
+
+ host->hba = hba;
+ ufshcd_set_variant(hba, host);
+
+ ufs_qcom_get_controller_revision(hba, &host->hw_ver.major,
+ &host->hw_ver.minor, &host->hw_ver.step);
+
+ err = ufs_qcom_ice_init(host);
+ if (err)
+ goto out_variant_clear;
+
+ ufs_qcom_get_default_testbus_cfg(host);
+ err = ufs_qcom_testbus_config(host);
+ if (err)
+ /* Failure is non-fatal */
+ dev_warn(dev, "Failed to configure the testbus %d\n", err);
+
+ hba->caps |= UFSHCD_CAP_WB_EN;
+
+ ufs_qcom_advertise_quirks(hba);
+ host->hba->quirks &= ~UFSHCD_QUIRK_REINIT_AFTER_MAX_GEAR_SWITCH;
+
+ hba->spm_lvl = hba->rpm_lvl = hba->pm_lvl_min = UFS_PM_LVL_5;
+
+ ufs_qcom_set_host_params(hba);
+ ufs_qcom_parse_gear_limits(hba);
+
+ return 0;
+
+out_variant_clear:
+ ufshcd_set_variant(hba, NULL);
+ return err;
+}
+
+static void ufs_qcom_fw_managed_exit(struct ufs_hba *hba)
+{
+ pm_runtime_put_sync(hba->dev);
+}
+
/**
* ufs_qcom_set_clk_40ns_cycles - Configure 40ns clk cycles
*
@@ -1950,6 +2047,37 @@ static int ufs_qcom_device_reset(struct ufs_hba *hba)
return 0;
}
+/**
+ * ufs_qcom_fw_managed_device_reset - Reset UFS device under FW-managed design
+ * @hba: pointer to UFS host bus adapter
+ *
+ * In the firmware-managed reset model, the power domain is powered on by genpd
+ * before the UFS controller driver probes. For subsequent resets (such as
+ * suspend/resume or recovery), the UFS driver must explicitly invoke PM runtime
+ *
+ * Return: 0 on success or a negative error code on failure.
+ */
+static int ufs_qcom_fw_managed_device_reset(struct ufs_hba *hba)
+{
+ static bool is_boot = true;
+ int err;
+
+ /* Skip reset on cold boot; perform it on subsequent calls */
+ if (is_boot) {
+ is_boot = false;
+ return 0;
+ }
+
+ pm_runtime_put_sync(hba->dev);
+ err = pm_runtime_resume_and_get(hba->dev);
+ if (err < 0) {
+ dev_err(hba->dev, "PM runtime resume failed: %d\n", err);
+ return err;
+ }
+
+ return 0;
+}
+
static void ufs_qcom_config_scaling_param(struct ufs_hba *hba,
struct devfreq_dev_profile *p,
struct devfreq_simple_ondemand_data *d)
@@ -2229,6 +2357,20 @@ static const struct ufs_hba_variant_ops ufs_hba_qcom_vops = {
.freq_to_gear_speed = ufs_qcom_freq_to_gear_speed,
};
+static const struct ufs_hba_variant_ops ufs_hba_qcom_sa8255p_vops = {
+ .name = "qcom-sa8255p",
+ .init = ufs_qcom_fw_managed_init,
+ .exit = ufs_qcom_fw_managed_exit,
+ .hce_enable_notify = ufs_qcom_fw_managed_hce_enable_notify,
+ .pwr_change_notify = ufs_qcom_pwr_change_notify,
+ .apply_dev_quirks = ufs_qcom_apply_dev_quirks,
+ .fixup_dev_quirks = ufs_qcom_fixup_dev_quirks,
+ .suspend = ufs_qcom_fw_managed_suspend,
+ .resume = ufs_qcom_fw_managed_resume,
+ .dbg_register_dump = ufs_qcom_dump_dbg_regs,
+ .device_reset = ufs_qcom_fw_managed_device_reset,
+};
+
/**
* ufs_qcom_probe - probe routine of the driver
* @pdev: pointer to Platform device handle
@@ -2239,9 +2381,16 @@ static int ufs_qcom_probe(struct platform_device *pdev)
{
int err;
struct device *dev = &pdev->dev;
+ const struct ufs_hba_variant_ops *vops;
+ const struct ufs_qcom_drvdata *drvdata = device_get_match_data(dev);
+
+ if (drvdata && drvdata->vops)
+ vops = drvdata->vops;
+ else
+ vops = &ufs_hba_qcom_vops;
/* Perform generic probe */
- err = ufshcd_pltfrm_init(pdev, &ufs_hba_qcom_vops);
+ err = ufshcd_pltfrm_init(pdev, vops);
if (err)
return dev_err_probe(dev, err, "ufshcd_pltfrm_init() failed\n");
@@ -2269,10 +2418,15 @@ static const struct ufs_qcom_drvdata ufs_qcom_sm8550_drvdata = {
.no_phy_retention = true,
};
+static const struct ufs_qcom_drvdata ufs_qcom_sa8255p_drvdata = {
+ .vops = &ufs_hba_qcom_sa8255p_vops
+};
+
static const struct of_device_id ufs_qcom_of_match[] __maybe_unused = {
{ .compatible = "qcom,ufshc" },
{ .compatible = "qcom,sm8550-ufshc", .data = &ufs_qcom_sm8550_drvdata },
{ .compatible = "qcom,sm8650-ufshc", .data = &ufs_qcom_sm8550_drvdata },
+ { .compatible = "qcom,sa8255p-ufshc", .data = &ufs_qcom_sa8255p_drvdata },
{},
};
MODULE_DEVICE_TABLE(of, ufs_qcom_of_match);
diff --git a/drivers/ufs/host/ufs-qcom.h b/drivers/ufs/host/ufs-qcom.h
index 380d02333d38..1111ab34da01 100644
--- a/drivers/ufs/host/ufs-qcom.h
+++ b/drivers/ufs/host/ufs-qcom.h
@@ -313,6 +313,7 @@ struct ufs_qcom_host {
struct ufs_qcom_drvdata {
enum ufshcd_quirks quirks;
bool no_phy_retention;
+ const struct ufs_hba_variant_ops *vops;
};
static inline u32
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH V5 2/4] dt-bindings: ufs: Document bindings for SA8255P UFS Host Controller
2026-01-13 8:00 ` [PATCH V5 2/4] dt-bindings: ufs: Document bindings for SA8255P UFS Host Controller Ram Kumar Dwivedi
@ 2026-01-13 16:00 ` Krzysztof Kozlowski
2026-01-20 13:31 ` Manivannan Sadhasivam
1 sibling, 0 replies; 12+ messages in thread
From: Krzysztof Kozlowski @ 2026-01-13 16:00 UTC (permalink / raw)
To: Ram Kumar Dwivedi, mani, alim.akhtar, avri.altman, bvanassche,
robh, krzk+dt, conor+dt, James.Bottomley, martin.petersen
Cc: linux-arm-msm, linux-scsi, devicetree, linux-kernel, Anjana Hari
On 13/01/2026 09:00, Ram Kumar Dwivedi wrote:
> Document the device tree bindings for UFS host controller on
> Qualcomm SA8255P platform which integrates firmware-managed
> resources.
>
> The platform firmware implements the SCMI server and manages
> resources such as the PHY, clocks, regulators and resets via the
> SCMI power protocol. As a result, the OS-visible DT only describes
> the controller’s MMIO, interrupt, IOMMU and power-domain interfaces.
>
> The generic "qcom,ufshc" and "jedec,ufs-2.0" compatible strings are
> removed from the binding, since this firmware managed design won't
> be compatible with the drivers doing full resource management.
>
> Co-developed-by: Anjana Hari <anjana.hari@oss.qualcomm.com>
> Signed-off-by: Anjana Hari <anjana.hari@oss.qualcomm.com>
> Signed-off-by: Ram Kumar Dwivedi <ram.dwivedi@oss.qualcomm.com>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH V5 3/4] scsi: ufs: core Enforce minimum pm level for sysfs configuration
2026-01-13 8:00 ` [PATCH V5 3/4] scsi: ufs: core Enforce minimum pm level for sysfs configuration Ram Kumar Dwivedi
@ 2026-01-20 13:29 ` Manivannan Sadhasivam
2026-01-20 17:44 ` Bart Van Assche
1 sibling, 0 replies; 12+ messages in thread
From: Manivannan Sadhasivam @ 2026-01-20 13:29 UTC (permalink / raw)
To: Ram Kumar Dwivedi
Cc: alim.akhtar, avri.altman, bvanassche, robh, krzk+dt, conor+dt,
James.Bottomley, martin.petersen, linux-arm-msm, linux-scsi,
devicetree, linux-kernel
On Tue, Jan 13, 2026 at 01:30:45PM +0530, Ram Kumar Dwivedi wrote:
> Some UFS platforms only support a limited subset of power levels.
> Currently, the sysfs interface allows users to set any pm level
> without validating the minimum supported value. If an unsupported
> level is selected, suspend may fail.
>
> Introduce an pm_lvl_min field in the ufs_hba structure and use it
> to clamp the pm level requested via sysfs so that only supported
> levels are accepted. Platforms that require a minimum pm level
> can set this field during probe.
>
> Signed-off-by: Ram Kumar Dwivedi <ram.dwivedi@oss.qualcomm.com>
Reviewed-by: Manivannan Sadhasivam <mani@kernel.org>
- Mani
> ---
> drivers/ufs/core/ufs-sysfs.c | 2 +-
> include/ufs/ufshcd.h | 2 ++
> 2 files changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/ufs/core/ufs-sysfs.c b/drivers/ufs/core/ufs-sysfs.c
> index b33f8656edb5..02e5468ad49d 100644
> --- a/drivers/ufs/core/ufs-sysfs.c
> +++ b/drivers/ufs/core/ufs-sysfs.c
> @@ -141,7 +141,7 @@ static inline ssize_t ufs_sysfs_pm_lvl_store(struct device *dev,
> if (kstrtoul(buf, 0, &value))
> return -EINVAL;
>
> - if (value >= UFS_PM_LVL_MAX)
> + if (value >= UFS_PM_LVL_MAX || value < hba->pm_lvl_min)
> return -EINVAL;
>
> if (ufs_pm_lvl_states[value].dev_state == UFS_DEEPSLEEP_PWR_MODE &&
> diff --git a/include/ufs/ufshcd.h b/include/ufs/ufshcd.h
> index 19154228780b..a64c19563b03 100644
> --- a/include/ufs/ufshcd.h
> +++ b/include/ufs/ufshcd.h
> @@ -834,6 +834,7 @@ enum ufshcd_mcq_opr {
> * @uic_link_state: active state of the link to the UFS device.
> * @rpm_lvl: desired UFS power management level during runtime PM.
> * @spm_lvl: desired UFS power management level during system PM.
> + * @pm_lvl_min: minimum supported power management level.
> * @pm_op_in_progress: whether or not a PM operation is in progress.
> * @ahit: value of Auto-Hibernate Idle Timer register.
> * @outstanding_tasks: Bits representing outstanding task requests
> @@ -972,6 +973,7 @@ struct ufs_hba {
> enum ufs_pm_level rpm_lvl;
> /* Desired UFS power management level during system PM */
> enum ufs_pm_level spm_lvl;
> + enum ufs_pm_level pm_lvl_min;
> int pm_op_in_progress;
>
> /* Auto-Hibernate Idle Timer register value */
> --
> 2.34.1
>
--
மணிவண்ணன் சதாசிவம்
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH V5 4/4] ufs: ufs-qcom: Add support for firmware-managed resource abstraction
2026-01-13 8:00 ` [PATCH V5 4/4] ufs: ufs-qcom: Add support for firmware-managed resource abstraction Ram Kumar Dwivedi
@ 2026-01-20 13:31 ` Manivannan Sadhasivam
0 siblings, 0 replies; 12+ messages in thread
From: Manivannan Sadhasivam @ 2026-01-20 13:31 UTC (permalink / raw)
To: Ram Kumar Dwivedi
Cc: alim.akhtar, avri.altman, bvanassche, robh, krzk+dt, conor+dt,
James.Bottomley, martin.petersen, linux-arm-msm, linux-scsi,
devicetree, linux-kernel, Anjana Hari, Shazad Hussain
On Tue, Jan 13, 2026 at 01:30:46PM +0530, Ram Kumar Dwivedi wrote:
> Add a compatible string for SA8255p platforms where resources such as
> PHY, clocks, regulators, and resets are managed by firmware through an
> SCMI server. Use the SCMI power protocol to abstract these resources and
> invoke power operations via runtime PM APIs (pm_runtime_get/put_sync).
>
> Introduce vendor operations (vops) for SA8255p targets to enable SCMI-
> based resource control. In this model, capabilities like clock scaling
> and gating are not yet supported; these will be added incrementally.
>
> Co-developed-by: Anjana Hari <anjana.hari@oss.qualcomm.com>
> Signed-off-by: Anjana Hari <anjana.hari@oss.qualcomm.com>
> Co-developed-by: Shazad Hussain <shazad.hussain@oss.qualcomm.com>
> Signed-off-by: Shazad Hussain <shazad.hussain@oss.qualcomm.com>
> Signed-off-by: Ram Kumar Dwivedi <ram.dwivedi@oss.qualcomm.com>
Reviewed-by: Manivannan Sadhasivam <mani@kernel.org>
- Mani
> ---
> drivers/ufs/host/ufs-qcom.c | 156 +++++++++++++++++++++++++++++++++++-
> drivers/ufs/host/ufs-qcom.h | 1 +
> 2 files changed, 156 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/ufs/host/ufs-qcom.c b/drivers/ufs/host/ufs-qcom.c
> index 8ebee0cc5313..375fd24ba458 100644
> --- a/drivers/ufs/host/ufs-qcom.c
> +++ b/drivers/ufs/host/ufs-qcom.c
> @@ -14,6 +14,7 @@
> #include <linux/of.h>
> #include <linux/phy/phy.h>
> #include <linux/platform_device.h>
> +#include <linux/pm_domain.h>
> #include <linux/reset-controller.h>
> #include <linux/time.h>
> #include <linux/unaligned.h>
> @@ -619,6 +620,27 @@ static int ufs_qcom_hce_enable_notify(struct ufs_hba *hba,
> return err;
> }
>
> +static int ufs_qcom_fw_managed_hce_enable_notify(struct ufs_hba *hba,
> + enum ufs_notify_change_status status)
> +{
> + struct ufs_qcom_host *host = ufshcd_get_variant(hba);
> +
> + switch (status) {
> + case PRE_CHANGE:
> + ufs_qcom_select_unipro_mode(host);
> + break;
> + case POST_CHANGE:
> + ufs_qcom_enable_hw_clk_gating(hba);
> + ufs_qcom_ice_enable(host);
> + break;
> + default:
> + dev_err(hba->dev, "Invalid status %d\n", status);
> + return -EINVAL;
> + }
> +
> + return 0;
> +}
> +
> /**
> * ufs_qcom_cfg_timers - Configure ufs qcom cfg timers
> *
> @@ -789,6 +811,33 @@ static int ufs_qcom_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op)
> return ufs_qcom_ice_resume(host);
> }
>
> +static int ufs_qcom_fw_managed_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op,
> + enum ufs_notify_change_status status)
> +{
> + struct ufs_qcom_host *host = ufshcd_get_variant(hba);
> +
> + if (status == PRE_CHANGE)
> + return 0;
> +
> + pm_runtime_put_sync(hba->dev);
> +
> + return ufs_qcom_ice_suspend(host);
> +}
> +
> +static int ufs_qcom_fw_managed_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op)
> +{
> + struct ufs_qcom_host *host = ufshcd_get_variant(hba);
> + int err;
> +
> + err = pm_runtime_resume_and_get(hba->dev);
> + if (err) {
> + dev_err(hba->dev, "PM runtime resume failed: %d\n", err);
> + return err;
> + }
> +
> + return ufs_qcom_ice_resume(host);
> +}
> +
> static void ufs_qcom_dev_ref_clk_ctrl(struct ufs_qcom_host *host, bool enable)
> {
> if (host->dev_ref_clk_ctrl_mmio &&
> @@ -1421,6 +1470,54 @@ static void ufs_qcom_exit(struct ufs_hba *hba)
> phy_exit(host->generic_phy);
> }
>
> +static int ufs_qcom_fw_managed_init(struct ufs_hba *hba)
> +{
> + struct device *dev = hba->dev;
> + struct ufs_qcom_host *host;
> + int err;
> +
> + host = devm_kzalloc(dev, sizeof(*host), GFP_KERNEL);
> + if (!host)
> + return -ENOMEM;
> +
> + host->hba = hba;
> + ufshcd_set_variant(hba, host);
> +
> + ufs_qcom_get_controller_revision(hba, &host->hw_ver.major,
> + &host->hw_ver.minor, &host->hw_ver.step);
> +
> + err = ufs_qcom_ice_init(host);
> + if (err)
> + goto out_variant_clear;
> +
> + ufs_qcom_get_default_testbus_cfg(host);
> + err = ufs_qcom_testbus_config(host);
> + if (err)
> + /* Failure is non-fatal */
> + dev_warn(dev, "Failed to configure the testbus %d\n", err);
> +
> + hba->caps |= UFSHCD_CAP_WB_EN;
> +
> + ufs_qcom_advertise_quirks(hba);
> + host->hba->quirks &= ~UFSHCD_QUIRK_REINIT_AFTER_MAX_GEAR_SWITCH;
> +
> + hba->spm_lvl = hba->rpm_lvl = hba->pm_lvl_min = UFS_PM_LVL_5;
> +
> + ufs_qcom_set_host_params(hba);
> + ufs_qcom_parse_gear_limits(hba);
> +
> + return 0;
> +
> +out_variant_clear:
> + ufshcd_set_variant(hba, NULL);
> + return err;
> +}
> +
> +static void ufs_qcom_fw_managed_exit(struct ufs_hba *hba)
> +{
> + pm_runtime_put_sync(hba->dev);
> +}
> +
> /**
> * ufs_qcom_set_clk_40ns_cycles - Configure 40ns clk cycles
> *
> @@ -1950,6 +2047,37 @@ static int ufs_qcom_device_reset(struct ufs_hba *hba)
> return 0;
> }
>
> +/**
> + * ufs_qcom_fw_managed_device_reset - Reset UFS device under FW-managed design
> + * @hba: pointer to UFS host bus adapter
> + *
> + * In the firmware-managed reset model, the power domain is powered on by genpd
> + * before the UFS controller driver probes. For subsequent resets (such as
> + * suspend/resume or recovery), the UFS driver must explicitly invoke PM runtime
> + *
> + * Return: 0 on success or a negative error code on failure.
> + */
> +static int ufs_qcom_fw_managed_device_reset(struct ufs_hba *hba)
> +{
> + static bool is_boot = true;
> + int err;
> +
> + /* Skip reset on cold boot; perform it on subsequent calls */
> + if (is_boot) {
> + is_boot = false;
> + return 0;
> + }
> +
> + pm_runtime_put_sync(hba->dev);
> + err = pm_runtime_resume_and_get(hba->dev);
> + if (err < 0) {
> + dev_err(hba->dev, "PM runtime resume failed: %d\n", err);
> + return err;
> + }
> +
> + return 0;
> +}
> +
> static void ufs_qcom_config_scaling_param(struct ufs_hba *hba,
> struct devfreq_dev_profile *p,
> struct devfreq_simple_ondemand_data *d)
> @@ -2229,6 +2357,20 @@ static const struct ufs_hba_variant_ops ufs_hba_qcom_vops = {
> .freq_to_gear_speed = ufs_qcom_freq_to_gear_speed,
> };
>
> +static const struct ufs_hba_variant_ops ufs_hba_qcom_sa8255p_vops = {
> + .name = "qcom-sa8255p",
> + .init = ufs_qcom_fw_managed_init,
> + .exit = ufs_qcom_fw_managed_exit,
> + .hce_enable_notify = ufs_qcom_fw_managed_hce_enable_notify,
> + .pwr_change_notify = ufs_qcom_pwr_change_notify,
> + .apply_dev_quirks = ufs_qcom_apply_dev_quirks,
> + .fixup_dev_quirks = ufs_qcom_fixup_dev_quirks,
> + .suspend = ufs_qcom_fw_managed_suspend,
> + .resume = ufs_qcom_fw_managed_resume,
> + .dbg_register_dump = ufs_qcom_dump_dbg_regs,
> + .device_reset = ufs_qcom_fw_managed_device_reset,
> +};
> +
> /**
> * ufs_qcom_probe - probe routine of the driver
> * @pdev: pointer to Platform device handle
> @@ -2239,9 +2381,16 @@ static int ufs_qcom_probe(struct platform_device *pdev)
> {
> int err;
> struct device *dev = &pdev->dev;
> + const struct ufs_hba_variant_ops *vops;
> + const struct ufs_qcom_drvdata *drvdata = device_get_match_data(dev);
> +
> + if (drvdata && drvdata->vops)
> + vops = drvdata->vops;
> + else
> + vops = &ufs_hba_qcom_vops;
>
> /* Perform generic probe */
> - err = ufshcd_pltfrm_init(pdev, &ufs_hba_qcom_vops);
> + err = ufshcd_pltfrm_init(pdev, vops);
> if (err)
> return dev_err_probe(dev, err, "ufshcd_pltfrm_init() failed\n");
>
> @@ -2269,10 +2418,15 @@ static const struct ufs_qcom_drvdata ufs_qcom_sm8550_drvdata = {
> .no_phy_retention = true,
> };
>
> +static const struct ufs_qcom_drvdata ufs_qcom_sa8255p_drvdata = {
> + .vops = &ufs_hba_qcom_sa8255p_vops
> +};
> +
> static const struct of_device_id ufs_qcom_of_match[] __maybe_unused = {
> { .compatible = "qcom,ufshc" },
> { .compatible = "qcom,sm8550-ufshc", .data = &ufs_qcom_sm8550_drvdata },
> { .compatible = "qcom,sm8650-ufshc", .data = &ufs_qcom_sm8550_drvdata },
> + { .compatible = "qcom,sa8255p-ufshc", .data = &ufs_qcom_sa8255p_drvdata },
> {},
> };
> MODULE_DEVICE_TABLE(of, ufs_qcom_of_match);
> diff --git a/drivers/ufs/host/ufs-qcom.h b/drivers/ufs/host/ufs-qcom.h
> index 380d02333d38..1111ab34da01 100644
> --- a/drivers/ufs/host/ufs-qcom.h
> +++ b/drivers/ufs/host/ufs-qcom.h
> @@ -313,6 +313,7 @@ struct ufs_qcom_host {
> struct ufs_qcom_drvdata {
> enum ufshcd_quirks quirks;
> bool no_phy_retention;
> + const struct ufs_hba_variant_ops *vops;
> };
>
> static inline u32
> --
> 2.34.1
>
--
மணிவண்ணன் சதாசிவம்
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH V5 2/4] dt-bindings: ufs: Document bindings for SA8255P UFS Host Controller
2026-01-13 8:00 ` [PATCH V5 2/4] dt-bindings: ufs: Document bindings for SA8255P UFS Host Controller Ram Kumar Dwivedi
2026-01-13 16:00 ` Krzysztof Kozlowski
@ 2026-01-20 13:31 ` Manivannan Sadhasivam
1 sibling, 0 replies; 12+ messages in thread
From: Manivannan Sadhasivam @ 2026-01-20 13:31 UTC (permalink / raw)
To: Ram Kumar Dwivedi
Cc: alim.akhtar, avri.altman, bvanassche, robh, krzk+dt, conor+dt,
James.Bottomley, martin.petersen, linux-arm-msm, linux-scsi,
devicetree, linux-kernel, Anjana Hari
On Tue, Jan 13, 2026 at 01:30:44PM +0530, Ram Kumar Dwivedi wrote:
> Document the device tree bindings for UFS host controller on
> Qualcomm SA8255P platform which integrates firmware-managed
> resources.
>
> The platform firmware implements the SCMI server and manages
> resources such as the PHY, clocks, regulators and resets via the
> SCMI power protocol. As a result, the OS-visible DT only describes
> the controller’s MMIO, interrupt, IOMMU and power-domain interfaces.
>
> The generic "qcom,ufshc" and "jedec,ufs-2.0" compatible strings are
> removed from the binding, since this firmware managed design won't
> be compatible with the drivers doing full resource management.
>
> Co-developed-by: Anjana Hari <anjana.hari@oss.qualcomm.com>
> Signed-off-by: Anjana Hari <anjana.hari@oss.qualcomm.com>
> Signed-off-by: Ram Kumar Dwivedi <ram.dwivedi@oss.qualcomm.com>
Acked-by: Manivannan Sadhasivam <mani@kernel.org>
- Mani
> ---
> .../bindings/ufs/qcom,sa8255p-ufshc.yaml | 56 +++++++++++++++++++
> 1 file changed, 56 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/ufs/qcom,sa8255p-ufshc.yaml
>
> diff --git a/Documentation/devicetree/bindings/ufs/qcom,sa8255p-ufshc.yaml b/Documentation/devicetree/bindings/ufs/qcom,sa8255p-ufshc.yaml
> new file mode 100644
> index 000000000000..75fae9f1eba7
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/ufs/qcom,sa8255p-ufshc.yaml
> @@ -0,0 +1,56 @@
> +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/ufs/qcom,sa8255p-ufshc.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Qualcomm SA8255P UFS Host Controller
> +
> +maintainers:
> + - Ram Kumar Dwivedi <ram.dwivedi@oss.qualcomm.com>
> +
> +properties:
> + compatible:
> + const: qcom,sa8255p-ufshc
> +
> + reg:
> + maxItems: 1
> +
> + interrupts:
> + maxItems: 1
> +
> + iommus:
> + maxItems: 1
> +
> + dma-coherent: true
> +
> + power-domains:
> + maxItems: 1
> +
> +required:
> + - compatible
> + - reg
> + - interrupts
> + - power-domains
> + - iommus
> + - dma-coherent
> +
> +allOf:
> + - $ref: ufs-common.yaml
> +
> +unevaluatedProperties: false
> +
> +examples:
> + - |
> + #include <dt-bindings/interrupt-controller/arm-gic.h>
> +
> + ufshc@1d84000 {
> + compatible = "qcom,sa8255p-ufshc";
> + reg = <0x01d84000 0x3000>;
> + interrupts = <GIC_SPI 265 IRQ_TYPE_LEVEL_HIGH>;
> + lanes-per-direction = <2>;
> +
> + iommus = <&apps_smmu 0x100 0x0>;
> + power-domains = <&scmi3_pd 0>;
> + dma-coherent;
> + };
> --
> 2.34.1
>
--
மணிவண்ணன் சதாசிவம்
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH V5 3/4] scsi: ufs: core Enforce minimum pm level for sysfs configuration
2026-01-13 8:00 ` [PATCH V5 3/4] scsi: ufs: core Enforce minimum pm level for sysfs configuration Ram Kumar Dwivedi
2026-01-20 13:29 ` Manivannan Sadhasivam
@ 2026-01-20 17:44 ` Bart Van Assche
1 sibling, 0 replies; 12+ messages in thread
From: Bart Van Assche @ 2026-01-20 17:44 UTC (permalink / raw)
To: Ram Kumar Dwivedi, mani, alim.akhtar, avri.altman, robh, krzk+dt,
conor+dt, James.Bottomley, martin.petersen
Cc: linux-arm-msm, linux-scsi, devicetree, linux-kernel
On 1/13/26 12:00 AM, Ram Kumar Dwivedi wrote:
> Some UFS platforms only support a limited subset of power levels.
> Currently, the sysfs interface allows users to set any pm level
> without validating the minimum supported value. If an unsupported
> level is selected, suspend may fail.
>
> Introduce an pm_lvl_min field in the ufs_hba structure and use it
> to clamp the pm level requested via sysfs so that only supported
> levels are accepted. Platforms that require a minimum pm level
> can set this field during probe.
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH V5 0/4] ufs: ufs-qcom: Add support firmware managed platforms
2026-01-13 8:00 [PATCH V5 0/4] ufs: ufs-qcom: Add support firmware managed platforms Ram Kumar Dwivedi
` (3 preceding siblings ...)
2026-01-13 8:00 ` [PATCH V5 4/4] ufs: ufs-qcom: Add support for firmware-managed resource abstraction Ram Kumar Dwivedi
@ 2026-01-24 3:09 ` Martin K. Petersen
2026-02-04 3:52 ` Martin K. Petersen
5 siblings, 0 replies; 12+ messages in thread
From: Martin K. Petersen @ 2026-01-24 3:09 UTC (permalink / raw)
To: Ram Kumar Dwivedi
Cc: mani, alim.akhtar, avri.altman, bvanassche, robh, krzk+dt,
conor+dt, James.Bottomley, martin.petersen, linux-arm-msm,
linux-scsi, devicetree, linux-kernel
Ram,
> On Qualcomm automotive SoC SA8255P, platform resource like clocks,
> interconnect, resets, regulators and PHY are configured remotely by
> firmware.
>
> Logical power domain is used to abstract these resources in firmware
> and SCMI power protocol is used to request resource operations by
> using runtime PM framework APIs such as pm_runtime_get/put_sync to
> invoke power_on/_off calls from kernel respectively.
Applied to 6.20/scsi-staging, thanks!
--
Martin K. Petersen
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH V5 0/4] ufs: ufs-qcom: Add support firmware managed platforms
2026-01-13 8:00 [PATCH V5 0/4] ufs: ufs-qcom: Add support firmware managed platforms Ram Kumar Dwivedi
` (4 preceding siblings ...)
2026-01-24 3:09 ` [PATCH V5 0/4] ufs: ufs-qcom: Add support firmware managed platforms Martin K. Petersen
@ 2026-02-04 3:52 ` Martin K. Petersen
5 siblings, 0 replies; 12+ messages in thread
From: Martin K. Petersen @ 2026-02-04 3:52 UTC (permalink / raw)
To: mani, alim.akhtar, avri.altman, bvanassche, robh, krzk+dt,
conor+dt, James.Bottomley, Ram Kumar Dwivedi
Cc: Martin K . Petersen, linux-arm-msm, linux-scsi, devicetree,
linux-kernel
On Tue, 13 Jan 2026 13:30:42 +0530, Ram Kumar Dwivedi wrote:
> On Qualcomm automotive SoC SA8255P, platform resource like clocks,
> interconnect, resets, regulators and PHY are configured remotely by
> firmware.
>
> Logical power domain is used to abstract these resources in firmware
> and SCMI power protocol is used to request resource operations by using
> runtime PM framework APIs such as pm_runtime_get/put_sync to invoke
> power_on/_off calls from kernel respectively.
>
> [...]
Applied to 6.20/scsi-queue, thanks!
[1/4] MAINTAINERS: broaden UFS Qualcomm binding file pattern
https://git.kernel.org/mkp/scsi/c/7f386b05f994
[2/4] dt-bindings: ufs: Document bindings for SA8255P UFS Host Controller
https://git.kernel.org/mkp/scsi/c/e2725ed2a7fb
[3/4] scsi: ufs: core Enforce minimum pm level for sysfs configuration
https://git.kernel.org/mkp/scsi/c/26c06d0baeb7
[4/4] ufs: ufs-qcom: Add support for firmware-managed resource abstraction
https://git.kernel.org/mkp/scsi/c/ad44cf1b2845
--
Martin K. Petersen
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2026-02-04 3:53 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-13 8:00 [PATCH V5 0/4] ufs: ufs-qcom: Add support firmware managed platforms Ram Kumar Dwivedi
2026-01-13 8:00 ` [PATCH V5 1/4] MAINTAINERS: broaden UFS Qualcomm binding file pattern Ram Kumar Dwivedi
2026-01-13 8:00 ` [PATCH V5 2/4] dt-bindings: ufs: Document bindings for SA8255P UFS Host Controller Ram Kumar Dwivedi
2026-01-13 16:00 ` Krzysztof Kozlowski
2026-01-20 13:31 ` Manivannan Sadhasivam
2026-01-13 8:00 ` [PATCH V5 3/4] scsi: ufs: core Enforce minimum pm level for sysfs configuration Ram Kumar Dwivedi
2026-01-20 13:29 ` Manivannan Sadhasivam
2026-01-20 17:44 ` Bart Van Assche
2026-01-13 8:00 ` [PATCH V5 4/4] ufs: ufs-qcom: Add support for firmware-managed resource abstraction Ram Kumar Dwivedi
2026-01-20 13:31 ` Manivannan Sadhasivam
2026-01-24 3:09 ` [PATCH V5 0/4] ufs: ufs-qcom: Add support firmware managed platforms Martin K. Petersen
2026-02-04 3:52 ` Martin K. Petersen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox