From 459fdb4b3f4d905072f1dfa25e90deee1347779b Mon Sep 17 00:00:00 2001 From: wangjue 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 --- 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