71 lines
2.4 KiB
Diff
Executable File
71 lines
2.4 KiB
Diff
Executable File
From 459fdb4b3f4d905072f1dfa25e90deee1347779b Mon Sep 17 00:00:00 2001
|
|
From: wangjue <jue.wang2@luxshare-ict.com>
|
|
Date: Wed, 22 Oct 2025 10:48:26 +0800
|
|
Subject: [PATCH] Solve the do_daa exception exit issue when the DIMM slots are
|
|
not fully populated.
|
|
|
|
Signed-off-by: wangjue <jue.wang2@luxshare-ict.com>
|
|
---
|
|
drivers/i3c/master.c | 8 ++++++++
|
|
drivers/i3c/master/dw-i3c-master.c | 4 ++--
|
|
2 files changed, 10 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c
|
|
index 9cd566d3928f..6997a92ac8e7 100644
|
|
--- a/drivers/i3c/master.c
|
|
+++ b/drivers/i3c/master.c
|
|
@@ -1979,6 +1979,7 @@ i3c_master_register_new_i3c_devs(struct i3c_master_controller *master)
|
|
int i3c_master_do_daa(struct i3c_master_controller *master)
|
|
{
|
|
int ret = 0;
|
|
+ bool result = false;
|
|
|
|
i3c_gpio_switch_init(master);
|
|
mutex_lock(&master->daa_lock);
|
|
@@ -1989,13 +1990,20 @@ int i3c_master_do_daa(struct i3c_master_controller *master)
|
|
usleep_range(2000, 2100);
|
|
ret = i3c_master_sethid_locked(master);
|
|
ret = i3c_master_setaasa_locked(master);
|
|
+ if(ret == 0)
|
|
+ result = true;
|
|
usleep_range(2000, 2100);
|
|
}
|
|
+ if(result)
|
|
+ ret = 0;
|
|
} else {
|
|
ret = master->ops->do_daa(master);
|
|
}
|
|
i3c_bus_maintenance_unlock(&master->bus);
|
|
|
|
+ dev_dbg(&master->dev,
|
|
+ "ret = %d, result = %d\n", ret, (int)result);
|
|
+
|
|
if (ret)
|
|
goto mutex_unlock;
|
|
|
|
diff --git a/drivers/i3c/master/dw-i3c-master.c b/drivers/i3c/master/dw-i3c-master.c
|
|
index c29c609510e7..d27b89318df2 100644
|
|
--- a/drivers/i3c/master/dw-i3c-master.c
|
|
+++ b/drivers/i3c/master/dw-i3c-master.c
|
|
@@ -3162,7 +3162,7 @@ static int dw_i3c_probe(struct platform_device *pdev)
|
|
master->maxdevs = DEVICE_ADDR_TABLE_DEPTH(ret);
|
|
master->dat_depth = DEVICE_ADDR_TABLE_DEPTH(ret);
|
|
if (master->maxdevs < MAX_DEVS) {
|
|
- dev_info(master->dev, "HW DAT supports only %i target devices - enabling SW DAT to support %i devices\n",
|
|
+ dev_dbg(master->dev, "HW DAT supports only %i target devices - enabling SW DAT to support %i devices\n",
|
|
master->maxdevs, MAX_DEVS);
|
|
master->maxdevs = MAX_DEVS;
|
|
master->sw_dat_enabled = true;
|
|
@@ -3215,7 +3215,7 @@ static int dw_i3c_probe(struct platform_device *pdev)
|
|
if (ret)
|
|
dev_warn(master->dev, "Failed to initialize debug FS, ret=%i\n", ret);
|
|
|
|
- dev_info(&pdev->dev, "i3c bus %d registered, irq %d\n",
|
|
+ dev_dbg(&pdev->dev, "i3c bus %d registered, irq %d\n",
|
|
master->base.bus_id, irq);
|
|
|
|
return 0;
|
|
--
|
|
2.34.1
|
|
|