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 B35763612ED for ; Mon, 20 Apr 2026 15:07:06 +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=1776697628; cv=none; b=Kjr4BnIcID/FOD8mZTFqsBjHlN5UeDVWOFbSNVIG88bUGGLumMNaLOuaNzfE9SKsoOSaTS5YLIgwgJ2iBf88pcg6sBJYi8+fsdkEs88m43u8RBi8KVrDuiOeQw1BigKaJVEI5bcvz725YsgkZA0NKK/vFAQGoLoLMPCfPZjY5pc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776697628; c=relaxed/simple; bh=BWhb7emS7FYUlyYw3w1Gvu9rJQobpAxkk2nhhZVhZfs=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=tgSjGwI4nOTz6DQY9jnT4PWmZzEPZbGMODmzEiGYYKuSgPsN/qZRF+m/5rygAIKK+N7oDqwbBoirdU/eqmMYeQpAVbTcLW/ZarHWe7Jw7yWQSYow2aKGbgTMFKurZNdCYCiTuXtlTb5lhztvMTpEtK8B1qmz2fa/JwTIMuHlpBo= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=rgWksWKr; arc=none smtp.client-ip=209.85.221.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="rgWksWKr" Received: by mail-wr1-f43.google.com with SMTP id ffacd0b85a97d-43fe62837baso1913836f8f.3 for ; Mon, 20 Apr 2026 08:07:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776697625; x=1777302425; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=FTFWPLNElobcmFdIFsbIqWVDEXlAblTj1AkrYjafumU=; b=rgWksWKrunuuSKTZy7iqKkK2fEuiLrw2bPB1/lyU7VnanyRExSPl1FexQ157f+9ktA pgWuqrzcGC/5cutOw3Ql4saAa7r33hKbZQelQYMm9iZqaBDZRUJD40RqXonVZp41Pek2 EwO3GQeIP6BR09LY9aRDH81w32WH5WRIZQUmiu2bE/6dHlA8orPrjTghI0cYw3aOhkVv jPwo51u7p9AKf1yDJPe58Wd9wZvfzDrfBVcrJM1CL13QuLNu0Sw4fiaWSyfW1SGqtF21 X1YJRjcebcQK2Tn8VHM548MICMnYSPs0cWfLDH0DR3eJVDmpvDb2QMjcvhWZZGDa/3pv 13Ag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776697625; x=1777302425; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=FTFWPLNElobcmFdIFsbIqWVDEXlAblTj1AkrYjafumU=; b=l9FmTtTQglVpWiZRSMUc4G8nfGn9tPyvZ2EflThzYZFvBN/e1/GgadBQ/7wKKEBc2w /35zuc0zl70Q6qjZmlGz9y6pM/y0LjUJ//t52/PmyfdeMNwFKW+6xb4Z8Wea4X+aOa9H 7ATAlzRfTPXxw/DcqU+QVAceq2Iud4jPK1ZL3glUsJf3AQHAZOOdVgSHkg1GU0kyB8ht yT21dHDxopJella1QfReSOc3DsatOsabxHAl9dd33OgtOKkWASdmCXz6wJPf5/kZ54a7 EX7ee/V/L2uxKv3BsandNfDbtpHkw9HDcOXFmD6J8H3d/KPh3eIojEsTJqHSuwbt1gta 92GA== X-Forwarded-Encrypted: i=1; AFNElJ/q6E5prUdlzTRJJDoT9VHxRHtaQNE+Fjd5C9ljPyFd3RF56n1e4zn5Qs1iyK7flu8NYgTVoBx+FkxStok=@vger.kernel.org X-Gm-Message-State: AOJu0YxZX4bEn4bMfI9irW4lOuKelzr5FWWraVRTRiiaEY3EGoFXQvJ+ GNjU7pO0sD8S/W+i134AmS/qCtWU+ZaYc1V1X+qGvWVw9KQDtOp0NPaq X-Gm-Gg: AeBDievwxW4mfQKShwuLKe9bpRECRNtAU5QVQLIwGzgXHR27huhYmZcPyEV4u0Y78co pNNjVQVKOXQEdgWAYXSEridLshurMg04HVNbt1lCwO4HNBHCzdA2CLw0X3qyq7HFJPF19krdq7j cD+idoDDiJlDjIlVm9K6VU0OfpYqZS9Z1DykIgTCcGqgtHshLG5+5PAqSB+nM+Fyx4ZJox/2IEK Z71cjWhB1wmw6bH1/3CBOntX5nSOSQtXlNauTU8UcupBBj1SKjLfwv++OibwtKzC3WPr4J9W4Vk E1QzeYNfEwyvHI/JGOhQTwzHcumMx5Lq8suX2gSzUTPSfwKE/nsvGQKdDH/A4aHSw6SsuDzL0Mu JcS/5dzW4ixnVp6GuI560sS5u1rbii55FZiHmzAEhYTrkW8PI94UlTizXUvYnn5RdAccNrhb2Vp vB3PhpH8SUKZcUZkKIjmawtUvWlCtOw89i1FhL/KrFppPdTZfcPg3Oevjp3Dn82M5nUr1fbVU= X-Received: by 2002:a05:6000:2906:b0:43b:8f38:3b88 with SMTP id ffacd0b85a97d-43fe3df22bdmr21948856f8f.25.1776697624889; Mon, 20 Apr 2026 08:07:04 -0700 (PDT) Received: from osama.. ([2a02:908:1b6:8980:1552:6880:e516:62d2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43fe4e3a79esm31927136f8f.17.2026.04.20.08.07.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Apr 2026 08:07:04 -0700 (PDT) From: Osama Abdelkader To: Anitha Chrisanthus , Edmund Dea , David Airlie , Simona Vetter , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Cc: Osama Abdelkader Subject: [PATCH 1/2] drm/kmb: reset DSI host singleton state on teardown Date: Mon, 20 Apr 2026 17:06:57 +0200 Message-ID: <20260420150658.165734-1-osama.abdelkader@gmail.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Tear down and clear the global DSI host/device/bridge singleton state when unregistering the host so probe retries and remove/reprobe cycles start from a clean state. Guard the clock-disable path in kmb_dsi_host_unregister() to avoid dereferencing error pointers from early probe failure paths. Signed-off-by: Osama Abdelkader --- drivers/gpu/drm/kmb/kmb_dsi.c | 44 ++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/kmb/kmb_dsi.c b/drivers/gpu/drm/kmb/kmb_dsi.c index aeb2f9f98f23..500dc00ba6ae 100644 --- a/drivers/gpu/drm/kmb/kmb_dsi.c +++ b/drivers/gpu/drm/kmb/kmb_dsi.c @@ -5,6 +5,7 @@ #include #include +#include #include #include #include @@ -182,8 +183,18 @@ static void kmb_dsi_clk_disable(struct kmb_dsi *kmb_dsi) void kmb_dsi_host_unregister(struct kmb_dsi *kmb_dsi) { - kmb_dsi_clk_disable(kmb_dsi); - mipi_dsi_host_unregister(kmb_dsi->host); + if (!IS_ERR_OR_NULL(kmb_dsi)) + kmb_dsi_clk_disable(kmb_dsi); + + if (dsi_host) { + mipi_dsi_host_unregister(dsi_host); + kfree(dsi_host); + dsi_host = NULL; + } + + kfree(dsi_device); + dsi_device = NULL; + adv_bridge = NULL; } /* @@ -217,6 +228,8 @@ static const struct mipi_dsi_host_ops kmb_dsi_host_ops = { int kmb_dsi_host_bridge_init(struct device *dev) { struct device_node *encoder_node, *dsi_out; + bool host_registered = false; + int ret; /* Create and register MIPI DSI host */ if (!dsi_host) { @@ -230,25 +243,38 @@ int kmb_dsi_host_bridge_init(struct device *dev) dsi_device = kzalloc_obj(*dsi_device); if (!dsi_device) { kfree(dsi_host); + dsi_host = NULL; return -ENOMEM; } } dsi_host->dev = dev; - mipi_dsi_host_register(dsi_host); + ret = mipi_dsi_host_register(dsi_host); + if (ret) { + DRM_ERROR("failed to register dsi host\n"); + kfree(dsi_device); + dsi_device = NULL; + kfree(dsi_host); + dsi_host = NULL; + return ret; + } + + host_registered = true; } /* Find ADV7535 node and initialize it */ dsi_out = of_graph_get_endpoint_by_regs(dev->of_node, 0, 1); if (!dsi_out) { DRM_ERROR("Failed to get dsi_out node info from DT\n"); - return -EINVAL; + ret = -EINVAL; + goto err_unregister_host; } encoder_node = of_graph_get_remote_port_parent(dsi_out); if (!encoder_node) { of_node_put(dsi_out); DRM_ERROR("Failed to get bridge info from DT\n"); - return -EINVAL; + ret = -EINVAL; + goto err_unregister_host; } /* Locate drm bridge from the hdmi encoder DT node */ adv_bridge = of_drm_find_bridge(encoder_node); @@ -256,10 +282,16 @@ int kmb_dsi_host_bridge_init(struct device *dev) of_node_put(encoder_node); if (!adv_bridge) { DRM_DEBUG("Wait for external bridge driver DT\n"); - return -EPROBE_DEFER; + ret = -EPROBE_DEFER; + goto err_unregister_host; } return 0; + +err_unregister_host: + if (host_registered) + kmb_dsi_host_unregister(NULL); + return ret; } static u32 mipi_get_datatype_params(u32 data_type, u32 data_mode, -- 2.43.0