* [PATCH 0/5] drm/panel: panel-simple: Fix panel-dpi probe error
@ 2025-06-25 6:48 Maxime Ripard
2025-06-25 6:48 ` [PATCH 1/5] drm/mipi-dsi: Add dev_is_mipi_dsi function Maxime Ripard
` (5 more replies)
0 siblings, 6 replies; 11+ messages in thread
From: Maxime Ripard @ 2025-06-25 6:48 UTC (permalink / raw)
To: Neil Armstrong, Jessica Zhang, Maarten Lankhorst,
Thomas Zimmermann, David Airlie, Simona Vetter, Luca Ceresoli,
Anusha Srivatsa, Francesco Dolcini
Cc: dri-devel, linux-kernel, Maxime Ripard
Hi,
Here's a series fixing (hopefully) the panel-simple regression for
panels with a panel-dpi compatible.
It's only build tested, so if you could give that series a try
Francesco, I'd really appreciate it.
Thanks!
Maxime
Link: https://lore.kernel.org/dri-devel/20250612081834.GA248237@francesco-nb/
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Maxime Ripard (5):
drm/mipi-dsi: Add dev_is_mipi_dsi function
drm/panel: panel-simple: make panel_dpi_probe return a panel_desc
drm/panel: panel-simple: Make panel_simple_probe return its panel
drm/panel: panel-simple: Add function to look panel data up
drm/panel: panel-simple: get rid of panel_dpi hack
drivers/gpu/drm/drm_mipi_dsi.c | 3 +-
drivers/gpu/drm/panel/panel-simple.c | 131 ++++++++++++++++++++++-------------
include/drm/drm_mipi_dsi.h | 3 +
3 files changed, 86 insertions(+), 51 deletions(-)
---
base-commit: e04c78d86a9699d136910cfc0bdcf01087e3267e
change-id: 20250624-drm-panel-simple-fixes-ad7f88b9a328
Best regards,
--
Maxime Ripard <mripard@kernel.org>
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 1/5] drm/mipi-dsi: Add dev_is_mipi_dsi function
2025-06-25 6:48 [PATCH 0/5] drm/panel: panel-simple: Fix panel-dpi probe error Maxime Ripard
@ 2025-06-25 6:48 ` Maxime Ripard
2025-06-25 6:48 ` [PATCH 2/5] drm/panel: panel-simple: make panel_dpi_probe return a panel_desc Maxime Ripard
` (4 subsequent siblings)
5 siblings, 0 replies; 11+ messages in thread
From: Maxime Ripard @ 2025-06-25 6:48 UTC (permalink / raw)
To: Neil Armstrong, Jessica Zhang, Maarten Lankhorst,
Thomas Zimmermann, David Airlie, Simona Vetter, Luca Ceresoli,
Anusha Srivatsa, Francesco Dolcini
Cc: dri-devel, linux-kernel, Maxime Ripard
This will be especially useful for generic panels (like panel-simple)
which can take different code path depending on if they are MIPI-DSI
devices or platform devices.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
drivers/gpu/drm/drm_mipi_dsi.c | 3 ++-
include/drm/drm_mipi_dsi.h | 3 +++
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c
index e5184a0c24651756ee0b1eb27d94083d63eb35a7..21fd647f8ce1a6a862e2f8fb5320e701f26f614f 100644
--- a/drivers/gpu/drm/drm_mipi_dsi.c
+++ b/drivers/gpu/drm/drm_mipi_dsi.c
@@ -89,16 +89,17 @@ static const struct dev_pm_ops mipi_dsi_device_pm_ops = {
.thaw = pm_generic_thaw,
.poweroff = pm_generic_poweroff,
.restore = pm_generic_restore,
};
-static const struct bus_type mipi_dsi_bus_type = {
+const struct bus_type mipi_dsi_bus_type = {
.name = "mipi-dsi",
.match = mipi_dsi_device_match,
.uevent = mipi_dsi_uevent,
.pm = &mipi_dsi_device_pm_ops,
};
+EXPORT_SYMBOL_GPL(mipi_dsi_bus_type);
/**
* of_find_mipi_dsi_device_by_node() - find the MIPI DSI device matching a
* device tree node
* @np: device tree node
diff --git a/include/drm/drm_mipi_dsi.h b/include/drm/drm_mipi_dsi.h
index b37860f4a895c25ef8ba1c5b3f44827ef53aa100..6d2c08e8110151a97620389197f1ef79c058329d 100644
--- a/include/drm/drm_mipi_dsi.h
+++ b/include/drm/drm_mipi_dsi.h
@@ -221,10 +221,13 @@ struct mipi_dsi_multi_context {
#define MIPI_DSI_MODULE_PREFIX "mipi-dsi:"
#define to_mipi_dsi_device(__dev) container_of_const(__dev, struct mipi_dsi_device, dev)
+extern const struct bus_type mipi_dsi_bus_type;
+#define dev_is_mipi_dsi(dev) ((dev)->bus == &mipi_dsi_bus_type)
+
/**
* mipi_dsi_pixel_format_to_bpp - obtain the number of bits per pixel for any
* given pixel format defined by the MIPI DSI
* specification
* @fmt: MIPI DSI pixel format
--
2.49.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 2/5] drm/panel: panel-simple: make panel_dpi_probe return a panel_desc
2025-06-25 6:48 [PATCH 0/5] drm/panel: panel-simple: Fix panel-dpi probe error Maxime Ripard
2025-06-25 6:48 ` [PATCH 1/5] drm/mipi-dsi: Add dev_is_mipi_dsi function Maxime Ripard
@ 2025-06-25 6:48 ` Maxime Ripard
2025-06-25 6:48 ` [PATCH 3/5] drm/panel: panel-simple: Make panel_simple_probe return its panel Maxime Ripard
` (3 subsequent siblings)
5 siblings, 0 replies; 11+ messages in thread
From: Maxime Ripard @ 2025-06-25 6:48 UTC (permalink / raw)
To: Neil Armstrong, Jessica Zhang, Maarten Lankhorst,
Thomas Zimmermann, David Airlie, Simona Vetter, Luca Ceresoli,
Anusha Srivatsa, Francesco Dolcini
Cc: dri-devel, linux-kernel, Maxime Ripard
If the panel-simple driver is probed from a panel-dpi compatible, the
driver will use an empty panel_desc structure as a descriminant. It
will then allocate and fill another panel_desc as part of its probe.
However, that allocation needs to happen after the panel_simple
structure has been allocated, since panel_dpi_probe(), the function
doing the panel_desc allocation and initialization, takes a panel_simple
pointer as an argument.
This pointer is used to fill the panel_simple->desc pointer that is
still initialized with the empty panel_desc when panel_dpi_probe() is
called.
Since commit de04bb0089a9 ("drm/panel/panel-simple: Use the new
allocation in place of devm_kzalloc()"), we will need the panel
connector type found in panel_desc to allocate panel_simple. This
creates a circular dependency where we need panel_desc to create
panel_simple, and need panel_simple to create panel_desc.
Let's break that dependency by making panel_dpi_probe simply return the
panel_desc it initialized and move the panel_simple->desc assignment to
the caller.
This will not fix the breaking commit entirely, but will move us towards
the right direction.
Fixes: de04bb0089a9 ("drm/panel/panel-simple: Use the new allocation in place of devm_kzalloc()")
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
drivers/gpu/drm/panel/panel-simple.c | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
index 0a3b26bb4d731c54614e24e38018c308acd5367a..89188e683822f9202ec580c9a294e42083b9704a 100644
--- a/drivers/gpu/drm/panel/panel-simple.c
+++ b/drivers/gpu/drm/panel/panel-simple.c
@@ -430,12 +430,11 @@ static const struct drm_panel_funcs panel_simple_funcs = {
.get_timings = panel_simple_get_timings,
};
static struct panel_desc panel_dpi;
-static int panel_dpi_probe(struct device *dev,
- struct panel_simple *panel)
+static struct panel_desc *panel_dpi_probe(struct device *dev)
{
struct display_timing *timing;
const struct device_node *np;
struct panel_desc *desc;
unsigned int bus_flags;
@@ -443,21 +442,21 @@ static int panel_dpi_probe(struct device *dev,
int ret;
np = dev->of_node;
desc = devm_kzalloc(dev, sizeof(*desc), GFP_KERNEL);
if (!desc)
- return -ENOMEM;
+ return ERR_PTR(-ENOMEM);
timing = devm_kzalloc(dev, sizeof(*timing), GFP_KERNEL);
if (!timing)
- return -ENOMEM;
+ return ERR_PTR(-ENOMEM);
ret = of_get_display_timing(np, "panel-timing", timing);
if (ret < 0) {
dev_err(dev, "%pOF: no panel-timing node found for \"panel-dpi\" binding\n",
np);
- return ret;
+ return ERR_PTR(ret);
}
desc->timings = timing;
desc->num_timings = 1;
@@ -471,13 +470,11 @@ static int panel_dpi_probe(struct device *dev,
desc->bus_flags = bus_flags;
/* We do not know the connector for the DT node, so guess it */
desc->connector_type = DRM_MODE_CONNECTOR_DPI;
- panel->desc = desc;
-
- return 0;
+ return desc;
}
#define PANEL_SIMPLE_BOUNDS_CHECK(to_check, bounds, field) \
(to_check->field.typ >= bounds->field.min && \
to_check->field.typ <= bounds->field.max)
@@ -611,14 +608,17 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
return -EPROBE_DEFER;
}
if (desc == &panel_dpi) {
/* Handle the generic panel-dpi binding */
- err = panel_dpi_probe(dev, panel);
- if (err)
+ desc = panel_dpi_probe(dev);
+ if (IS_ERR(desc)) {
+ err = PTR_ERR(desc);
goto free_ddc;
- desc = panel->desc;
+ }
+
+ panel->desc = desc;
} else {
if (!of_get_display_timing(dev->of_node, "panel-timing", &dt))
panel_simple_parse_panel_timing_node(dev, panel, &dt);
}
--
2.49.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 3/5] drm/panel: panel-simple: Make panel_simple_probe return its panel
2025-06-25 6:48 [PATCH 0/5] drm/panel: panel-simple: Fix panel-dpi probe error Maxime Ripard
2025-06-25 6:48 ` [PATCH 1/5] drm/mipi-dsi: Add dev_is_mipi_dsi function Maxime Ripard
2025-06-25 6:48 ` [PATCH 2/5] drm/panel: panel-simple: make panel_dpi_probe return a panel_desc Maxime Ripard
@ 2025-06-25 6:48 ` Maxime Ripard
2025-06-25 6:48 ` [PATCH 4/5] drm/panel: panel-simple: Add function to look panel data up Maxime Ripard
` (2 subsequent siblings)
5 siblings, 0 replies; 11+ messages in thread
From: Maxime Ripard @ 2025-06-25 6:48 UTC (permalink / raw)
To: Neil Armstrong, Jessica Zhang, Maarten Lankhorst,
Thomas Zimmermann, David Airlie, Simona Vetter, Luca Ceresoli,
Anusha Srivatsa, Francesco Dolcini
Cc: dri-devel, linux-kernel, Maxime Ripard
In order to fix the regession introduced by commit de04bb0089a9
("drm/panel/panel-simple: Use the new allocation in place of
devm_kzalloc()"), we need to move the panel_desc lookup into the common
panel_simple_probe() function.
There's two callers for that function, the probe implementations of the
platform and MIPI-DSI drivers panel-simple implements.
The MIPI-DSI driver's probe will need to access the current panel_desc
to initialize properly, which won't be possible anymore if we make that
lookup in panel_simple_probe().
However, we can make panel_simple_probe() return the initialized
panel_simple structure it allocated, which will contain a pointer to the
associated panel_desc in its desc field.
This doesn't fix de04bb0089a9 ("drm/panel/panel-simple: Use the new
allocation in place of devm_kzalloc()") still, but makes progress
towards that goal.
Fixes: de04bb0089a9 ("drm/panel/panel-simple: Use the new allocation in place of devm_kzalloc()")
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
drivers/gpu/drm/panel/panel-simple.c | 33 ++++++++++++++++++++-------------
1 file changed, 20 insertions(+), 13 deletions(-)
diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
index 89188e683822f9202ec580c9a294e42083b9704a..e70ee2d4a538caaae673507b93e02b444a2e1640 100644
--- a/drivers/gpu/drm/panel/panel-simple.c
+++ b/drivers/gpu/drm/panel/panel-simple.c
@@ -565,11 +565,11 @@ static int panel_simple_override_nondefault_lvds_datamapping(struct device *dev,
}
return 0;
}
-static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
+static struct panel_simple *panel_simple_probe(struct device *dev, const struct panel_desc *desc)
{
struct panel_simple *panel;
struct display_timing dt;
struct device_node *ddc;
int connector_type;
@@ -577,37 +577,37 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
int err;
panel = devm_drm_panel_alloc(dev, struct panel_simple, base,
&panel_simple_funcs, desc->connector_type);
if (IS_ERR(panel))
- return PTR_ERR(panel);
+ return ERR_CAST(panel);
panel->desc = desc;
panel->supply = devm_regulator_get(dev, "power");
if (IS_ERR(panel->supply))
- return PTR_ERR(panel->supply);
+ return ERR_CAST(panel->supply);
panel->enable_gpio = devm_gpiod_get_optional(dev, "enable",
GPIOD_OUT_LOW);
if (IS_ERR(panel->enable_gpio))
- return dev_err_probe(dev, PTR_ERR(panel->enable_gpio),
- "failed to request GPIO\n");
+ return dev_err_cast_probe(dev, panel->enable_gpio,
+ "failed to request GPIO\n");
err = of_drm_get_panel_orientation(dev->of_node, &panel->orientation);
if (err) {
dev_err(dev, "%pOF: failed to get orientation %d\n", dev->of_node, err);
- return err;
+ return ERR_PTR(err);
}
ddc = of_parse_phandle(dev->of_node, "ddc-i2c-bus", 0);
if (ddc) {
panel->ddc = of_find_i2c_adapter_by_node(ddc);
of_node_put(ddc);
if (!panel->ddc)
- return -EPROBE_DEFER;
+ return ERR_PTR(-EPROBE_DEFER);
}
if (desc == &panel_dpi) {
/* Handle the generic panel-dpi binding */
desc = panel_dpi_probe(dev);
@@ -701,20 +701,20 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
goto disable_pm_runtime;
}
drm_panel_add(&panel->base);
- return 0;
+ return panel;
disable_pm_runtime:
pm_runtime_dont_use_autosuspend(dev);
pm_runtime_disable(dev);
free_ddc:
if (panel->ddc)
put_device(&panel->ddc->dev);
- return err;
+ return ERR_PTR(err);
}
static void panel_simple_shutdown(struct device *dev)
{
struct panel_simple *panel = dev_get_drvdata(dev);
@@ -5375,16 +5375,21 @@ static const struct of_device_id platform_of_match[] = {
MODULE_DEVICE_TABLE(of, platform_of_match);
static int panel_simple_platform_probe(struct platform_device *pdev)
{
const struct panel_desc *desc;
+ struct panel_simple *panel;
desc = of_device_get_match_data(&pdev->dev);
if (!desc)
return -ENODEV;
- return panel_simple_probe(&pdev->dev, desc);
+ panel = panel_simple_probe(&pdev->dev, desc);
+ if (IS_ERR(panel))
+ return PTR_ERR(panel);
+
+ return 0;
}
static void panel_simple_platform_remove(struct platform_device *pdev)
{
panel_simple_remove(&pdev->dev);
@@ -5651,20 +5656,22 @@ static const struct of_device_id dsi_of_match[] = {
MODULE_DEVICE_TABLE(of, dsi_of_match);
static int panel_simple_dsi_probe(struct mipi_dsi_device *dsi)
{
const struct panel_desc_dsi *desc;
+ struct panel_simple *panel;
int err;
desc = of_device_get_match_data(&dsi->dev);
if (!desc)
return -ENODEV;
- err = panel_simple_probe(&dsi->dev, &desc->desc);
- if (err < 0)
- return err;
+ panel = panel_simple_probe(&dsi->dev, &desc->desc);
+ if (IS_ERR(panel))
+ return PTR_ERR(panel);
+ desc = container_of(panel->desc, struct panel_desc_dsi, desc);
dsi->mode_flags = desc->flags;
dsi->format = desc->format;
dsi->lanes = desc->lanes;
err = mipi_dsi_attach(dsi);
--
2.49.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 4/5] drm/panel: panel-simple: Add function to look panel data up
2025-06-25 6:48 [PATCH 0/5] drm/panel: panel-simple: Fix panel-dpi probe error Maxime Ripard
` (2 preceding siblings ...)
2025-06-25 6:48 ` [PATCH 3/5] drm/panel: panel-simple: Make panel_simple_probe return its panel Maxime Ripard
@ 2025-06-25 6:48 ` Maxime Ripard
2025-06-25 6:48 ` [PATCH 5/5] drm/panel: panel-simple: get rid of panel_dpi hack Maxime Ripard
2025-06-26 9:25 ` [PATCH 0/5] drm/panel: panel-simple: Fix panel-dpi probe error Francesco Dolcini
5 siblings, 0 replies; 11+ messages in thread
From: Maxime Ripard @ 2025-06-25 6:48 UTC (permalink / raw)
To: Neil Armstrong, Jessica Zhang, Maarten Lankhorst,
Thomas Zimmermann, David Airlie, Simona Vetter, Luca Ceresoli,
Anusha Srivatsa, Francesco Dolcini
Cc: dri-devel, linux-kernel, Maxime Ripard
Commit de04bb0089a9 ("drm/panel/panel-simple: Use the new allocation in
place of devm_kzalloc()") moved the call to drm_panel_init into the
devm_drm_panel_alloc(), which needs a connector type to initialize
properly.
In the panel-dpi compatible case, the passed panel_desc structure is an
empty one used as a discriminant, and the connector type it contains
isn't actually initialized.
It is initialized through a call to panel_dpi_probe() later in the
function, which used to be before the call to drm_panel_init() that got
merged into devm_drm_panel_alloc().
So, we do need a proper panel_desc pointer before the call to
devm_drm_panel_alloc() now. All cases associate their panel_desc with
the panel compatible and use of_device_get_match_data, except for the
panel-dpi compatible.
In that case, we're expected to call panel_dpi_probe, which will
allocate and initialize the panel_desc for us.
Let's create such a helper function that would be called first in the
driver and will lookup the desc by compatible, or allocate one if
relevant.
Reported-by: Francesco Dolcini <francesco@dolcini.it>
Closes: https://lore.kernel.org/all/20250612081834.GA248237@francesco-nb/
Fixes: de04bb0089a9 ("drm/panel/panel-simple: Use the new allocation in place of devm_kzalloc()")
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
drivers/gpu/drm/panel/panel-simple.c | 81 +++++++++++++++++++++---------------
1 file changed, 48 insertions(+), 33 deletions(-)
diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
index e70ee2d4a538caaae673507b93e02b444a2e1640..d3390ba4ecec5a5aa531c12f51eebdf1ed9d5545 100644
--- a/drivers/gpu/drm/panel/panel-simple.c
+++ b/drivers/gpu/drm/panel/panel-simple.c
@@ -24,10 +24,11 @@
#include <linux/delay.h>
#include <linux/gpio/consumer.h>
#include <linux/i2c.h>
#include <linux/media-bus-format.h>
#include <linux/module.h>
+#include <linux/of_device.h>
#include <linux/of_platform.h>
#include <linux/platform_device.h>
#include <linux/pm_runtime.h>
#include <linux/regulator/consumer.h>
@@ -134,10 +135,18 @@ struct panel_desc {
/** @connector_type: LVDS, eDP, DSI, DPI, etc. */
int connector_type;
};
+struct panel_desc_dsi {
+ struct panel_desc desc;
+
+ unsigned long flags;
+ enum mipi_dsi_pixel_format format;
+ unsigned int lanes;
+};
+
struct panel_simple {
struct drm_panel base;
ktime_t unprepared_time;
@@ -565,19 +574,52 @@ static int panel_simple_override_nondefault_lvds_datamapping(struct device *dev,
}
return 0;
}
-static struct panel_simple *panel_simple_probe(struct device *dev, const struct panel_desc *desc)
+static const struct panel_desc *panel_simple_get_desc(struct device *dev)
{
+ if (dev_is_mipi_dsi(dev)) {
+ const struct panel_desc_dsi *dsi_desc;
+
+ dsi_desc = of_device_get_match_data(dev);
+ if (!dsi_desc)
+ return ERR_PTR(-ENODEV);
+
+ return &dsi_desc->desc;
+ }
+
+ if (dev_is_platform(dev)) {
+ const struct panel_desc *desc;
+
+ desc = of_device_get_match_data(dev);
+ if (!desc)
+ return ERR_PTR(-ENODEV);
+
+ if (desc == &panel_dpi)
+ return panel_dpi_probe(dev);
+
+ return desc;
+ }
+
+ return ERR_PTR(-ENODEV);
+}
+
+static struct panel_simple *panel_simple_probe(struct device *dev)
+{
+ const struct panel_desc *desc;
struct panel_simple *panel;
struct display_timing dt;
struct device_node *ddc;
int connector_type;
u32 bus_flags;
int err;
+ desc = panel_simple_get_desc(dev);
+ if (IS_ERR(desc))
+ return ERR_CAST(desc);
+
panel = devm_drm_panel_alloc(dev, struct panel_simple, base,
&panel_simple_funcs, desc->connector_type);
if (IS_ERR(panel))
return ERR_CAST(panel);
@@ -606,23 +648,13 @@ static struct panel_simple *panel_simple_probe(struct device *dev, const struct
if (!panel->ddc)
return ERR_PTR(-EPROBE_DEFER);
}
- if (desc == &panel_dpi) {
- /* Handle the generic panel-dpi binding */
- desc = panel_dpi_probe(dev);
- if (IS_ERR(desc)) {
- err = PTR_ERR(desc);
- goto free_ddc;
- }
-
- panel->desc = desc;
- } else {
- if (!of_get_display_timing(dev->of_node, "panel-timing", &dt))
- panel_simple_parse_panel_timing_node(dev, panel, &dt);
- }
+ if ((desc != &panel_dpi) &&
+ !of_get_display_timing(dev->of_node, "panel-timing", &dt))
+ panel_simple_parse_panel_timing_node(dev, panel, &dt);
if (desc->connector_type == DRM_MODE_CONNECTOR_LVDS) {
/* Optional data-mapping property for overriding bus format */
err = panel_simple_override_nondefault_lvds_datamapping(dev, panel);
if (err)
@@ -5374,18 +5406,13 @@ static const struct of_device_id platform_of_match[] = {
};
MODULE_DEVICE_TABLE(of, platform_of_match);
static int panel_simple_platform_probe(struct platform_device *pdev)
{
- const struct panel_desc *desc;
struct panel_simple *panel;
- desc = of_device_get_match_data(&pdev->dev);
- if (!desc)
- return -ENODEV;
-
- panel = panel_simple_probe(&pdev->dev, desc);
+ panel = panel_simple_probe(&pdev->dev);
if (IS_ERR(panel))
return PTR_ERR(panel);
return 0;
}
@@ -5415,18 +5442,10 @@ static struct platform_driver panel_simple_platform_driver = {
.probe = panel_simple_platform_probe,
.remove = panel_simple_platform_remove,
.shutdown = panel_simple_platform_shutdown,
};
-struct panel_desc_dsi {
- struct panel_desc desc;
-
- unsigned long flags;
- enum mipi_dsi_pixel_format format;
- unsigned int lanes;
-};
-
static const struct drm_display_mode auo_b080uan01_mode = {
.clock = 154500,
.hdisplay = 1200,
.hsync_start = 1200 + 62,
.hsync_end = 1200 + 62 + 4,
@@ -5659,15 +5678,11 @@ static int panel_simple_dsi_probe(struct mipi_dsi_device *dsi)
{
const struct panel_desc_dsi *desc;
struct panel_simple *panel;
int err;
- desc = of_device_get_match_data(&dsi->dev);
- if (!desc)
- return -ENODEV;
-
- panel = panel_simple_probe(&dsi->dev, &desc->desc);
+ panel = panel_simple_probe(&dsi->dev);
if (IS_ERR(panel))
return PTR_ERR(panel);
desc = container_of(panel->desc, struct panel_desc_dsi, desc);
dsi->mode_flags = desc->flags;
--
2.49.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 5/5] drm/panel: panel-simple: get rid of panel_dpi hack
2025-06-25 6:48 [PATCH 0/5] drm/panel: panel-simple: Fix panel-dpi probe error Maxime Ripard
` (3 preceding siblings ...)
2025-06-25 6:48 ` [PATCH 4/5] drm/panel: panel-simple: Add function to look panel data up Maxime Ripard
@ 2025-06-25 6:48 ` Maxime Ripard
2025-06-26 9:25 ` [PATCH 0/5] drm/panel: panel-simple: Fix panel-dpi probe error Francesco Dolcini
5 siblings, 0 replies; 11+ messages in thread
From: Maxime Ripard @ 2025-06-25 6:48 UTC (permalink / raw)
To: Neil Armstrong, Jessica Zhang, Maarten Lankhorst,
Thomas Zimmermann, David Airlie, Simona Vetter, Luca Ceresoli,
Anusha Srivatsa, Francesco Dolcini
Cc: dri-devel, linux-kernel, Maxime Ripard
The empty panel_dpi struct was only ever used as a discriminant, but
it's kind of a hack, and with the reworks done in the previous patches,
we shouldn't need it anymore.
Let's get rid of it.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
drivers/gpu/drm/panel/panel-simple.c | 27 ++++++++++++++++++---------
1 file changed, 18 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
index d3390ba4ecec5a5aa531c12f51eebdf1ed9d5545..d19170a4531dff7b6e522b6d58e72d0dadc70680 100644
--- a/drivers/gpu/drm/panel/panel-simple.c
+++ b/drivers/gpu/drm/panel/panel-simple.c
@@ -437,12 +437,10 @@ static const struct drm_panel_funcs panel_simple_funcs = {
.get_modes = panel_simple_get_modes,
.get_orientation = panel_simple_get_orientation,
.get_timings = panel_simple_get_timings,
};
-static struct panel_desc panel_dpi;
-
static struct panel_desc *panel_dpi_probe(struct device *dev)
{
struct display_timing *timing;
const struct device_node *np;
struct panel_desc *desc;
@@ -590,15 +588,21 @@ static const struct panel_desc *panel_simple_get_desc(struct device *dev)
if (dev_is_platform(dev)) {
const struct panel_desc *desc;
desc = of_device_get_match_data(dev);
- if (!desc)
- return ERR_PTR(-ENODEV);
-
- if (desc == &panel_dpi)
- return panel_dpi_probe(dev);
+ if (!desc) {
+ /*
+ * panel-dpi probes without a descriptor and
+ * panel_dpi_probe() will initialize one for us
+ * based on the device tree.
+ */
+ if (of_device_is_compatible(dev->of_node, "panel-dpi"))
+ return panel_dpi_probe(dev);
+ else
+ return ERR_PTR(-ENODEV);
+ }
return desc;
}
return ERR_PTR(-ENODEV);
@@ -648,11 +652,11 @@ static struct panel_simple *panel_simple_probe(struct device *dev)
if (!panel->ddc)
return ERR_PTR(-EPROBE_DEFER);
}
- if ((desc != &panel_dpi) &&
+ if (!of_device_is_compatible(dev->of_node, "panel-dpi") &&
!of_get_display_timing(dev->of_node, "panel-timing", &dt))
panel_simple_parse_panel_timing_node(dev, panel, &dt);
if (desc->connector_type == DRM_MODE_CONNECTOR_LVDS) {
/* Optional data-mapping property for overriding bus format */
@@ -5397,11 +5401,16 @@ static const struct of_device_id platform_of_match[] = {
.compatible = "microchip,ac69t88a",
.data = &mchp_ac69t88a,
}, {
/* Must be the last entry */
.compatible = "panel-dpi",
- .data = &panel_dpi,
+
+ /*
+ * Explicitly NULL, the panel_desc structure will be
+ * allocated by panel_dpi_probe().
+ */
+ .data = NULL,
}, {
/* sentinel */
}
};
MODULE_DEVICE_TABLE(of, platform_of_match);
--
2.49.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 0/5] drm/panel: panel-simple: Fix panel-dpi probe error
2025-06-25 6:48 [PATCH 0/5] drm/panel: panel-simple: Fix panel-dpi probe error Maxime Ripard
` (4 preceding siblings ...)
2025-06-25 6:48 ` [PATCH 5/5] drm/panel: panel-simple: get rid of panel_dpi hack Maxime Ripard
@ 2025-06-26 9:25 ` Francesco Dolcini
2025-06-26 9:35 ` Maxime Ripard
2025-06-26 9:35 ` Francesco Dolcini
5 siblings, 2 replies; 11+ messages in thread
From: Francesco Dolcini @ 2025-06-26 9:25 UTC (permalink / raw)
To: Maxime Ripard
Cc: Neil Armstrong, Jessica Zhang, Maarten Lankhorst,
Thomas Zimmermann, David Airlie, Simona Vetter, Luca Ceresoli,
Anusha Srivatsa, Francesco Dolcini, dri-devel, linux-kernel
Hello Maxime,
thanks for the patch
On Wed, Jun 25, 2025 at 08:48:37AM +0200, Maxime Ripard wrote:
> Here's a series fixing (hopefully) the panel-simple regression for
> panels with a panel-dpi compatible.
>
> It's only build tested, so if you could give that series a try
> Francesco, I'd really appreciate it.
It does not build for me, applied on top of commit ee88bddf7f2f ("Merge tag
'bpf-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf")
SYNC include/config/auto.conf.cmd
CALL scripts/checksyscalls.sh
CC drivers/gpu/drm/drm_of.o
CC [M] drivers/gpu/drm/panel/panel-simple.o
AR drivers/gpu/drm/built-in.a
AR drivers/gpu/built-in.a
AR drivers/built-in.a
AR built-in.a
AR vmlinux.a
LD vmlinux.o
OBJCOPY modules.builtin.modinfo
GEN modules.builtin
GEN .vmlinux.objs
MODPOST Module.symvers
ERROR: modpost: "mipi_dsi_bus_type" [drivers/gpu/drm/panel/panel-simple.ko] undefined!
make[2]: *** [scripts/Makefile.modpost:147: Module.symvers] Error 1
make[1]: *** [/home/francesco/Toradex/sources/linux/Makefile:1953: modpost] Error 2
make: *** [Makefile:248: __sub-make] Error 2
[Exit 2]
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 0/5] drm/panel: panel-simple: Fix panel-dpi probe error
2025-06-26 9:25 ` [PATCH 0/5] drm/panel: panel-simple: Fix panel-dpi probe error Francesco Dolcini
@ 2025-06-26 9:35 ` Maxime Ripard
2025-06-26 9:35 ` Francesco Dolcini
1 sibling, 0 replies; 11+ messages in thread
From: Maxime Ripard @ 2025-06-26 9:35 UTC (permalink / raw)
To: Francesco Dolcini
Cc: Neil Armstrong, Jessica Zhang, Maarten Lankhorst,
Thomas Zimmermann, David Airlie, Simona Vetter, Luca Ceresoli,
Anusha Srivatsa, dri-devel, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 1449 bytes --]
Hi Francesco,
On Thu, Jun 26, 2025 at 11:25:24AM +0200, Francesco Dolcini wrote:
> Hello Maxime,
> thanks for the patch
>
> On Wed, Jun 25, 2025 at 08:48:37AM +0200, Maxime Ripard wrote:
> > Here's a series fixing (hopefully) the panel-simple regression for
> > panels with a panel-dpi compatible.
> >
> > It's only build tested, so if you could give that series a try
> > Francesco, I'd really appreciate it.
>
> It does not build for me, applied on top of commit ee88bddf7f2f ("Merge tag
> 'bpf-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf")
>
> SYNC include/config/auto.conf.cmd
> CALL scripts/checksyscalls.sh
> CC drivers/gpu/drm/drm_of.o
> CC [M] drivers/gpu/drm/panel/panel-simple.o
> AR drivers/gpu/drm/built-in.a
> AR drivers/gpu/built-in.a
> AR drivers/built-in.a
> AR built-in.a
> AR vmlinux.a
> LD vmlinux.o
> OBJCOPY modules.builtin.modinfo
> GEN modules.builtin
> GEN .vmlinux.objs
> MODPOST Module.symvers
> ERROR: modpost: "mipi_dsi_bus_type" [drivers/gpu/drm/panel/panel-simple.ko] undefined!
> make[2]: *** [scripts/Makefile.modpost:147: Module.symvers] Error 1
> make[1]: *** [/home/francesco/Toradex/sources/linux/Makefile:1953: modpost] Error 2
> make: *** [Makefile:248: __sub-make] Error 2
> [Exit 2]
Thanks for giving it a try. Can you share the defconfig you've been using?
Maxime
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 273 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 0/5] drm/panel: panel-simple: Fix panel-dpi probe error
2025-06-26 9:25 ` [PATCH 0/5] drm/panel: panel-simple: Fix panel-dpi probe error Francesco Dolcini
2025-06-26 9:35 ` Maxime Ripard
@ 2025-06-26 9:35 ` Francesco Dolcini
2025-06-26 9:38 ` Francesco Dolcini
2025-06-26 10:04 ` Maxime Ripard
1 sibling, 2 replies; 11+ messages in thread
From: Francesco Dolcini @ 2025-06-26 9:35 UTC (permalink / raw)
To: Maxime Ripard
Cc: Neil Armstrong, Jessica Zhang, Maarten Lankhorst,
Thomas Zimmermann, David Airlie, Simona Vetter, Luca Ceresoli,
Anusha Srivatsa, dri-devel, linux-kernel, francesco
On Thu, Jun 26, 2025 at 11:25:24AM +0200, Francesco Dolcini wrote:
> On Wed, Jun 25, 2025 at 08:48:37AM +0200, Maxime Ripard wrote:
> > Here's a series fixing (hopefully) the panel-simple regression for
> > panels with a panel-dpi compatible.
> >
> > It's only build tested, so if you could give that series a try
> > Francesco, I'd really appreciate it.
>
> It does not build for me, applied on top of commit ee88bddf7f2f ("Merge tag
> 'bpf-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf")
>
> SYNC include/config/auto.conf.cmd
> CALL scripts/checksyscalls.sh
> CC drivers/gpu/drm/drm_of.o
> CC [M] drivers/gpu/drm/panel/panel-simple.o
> AR drivers/gpu/drm/built-in.a
> AR drivers/gpu/built-in.a
> AR drivers/built-in.a
> AR built-in.a
> AR vmlinux.a
> LD vmlinux.o
> OBJCOPY modules.builtin.modinfo
> GEN modules.builtin
> GEN .vmlinux.objs
> MODPOST Module.symvers
> ERROR: modpost: "mipi_dsi_bus_type" [drivers/gpu/drm/panel/panel-simple.ko] undefined!
> make[2]: *** [scripts/Makefile.modpost:147: Module.symvers] Error 1
> make[1]: *** [/home/francesco/Toradex/sources/linux/Makefile:1953: modpost] Error 2
> make: *** [Makefile:248: __sub-make] Error 2
> [Exit 2]
>
The issue is that I do not have CONFIG_DRM_MIPI_DSI. Adding it the build
finishes, and it also fixes the issue.
Francesco
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 0/5] drm/panel: panel-simple: Fix panel-dpi probe error
2025-06-26 9:35 ` Francesco Dolcini
@ 2025-06-26 9:38 ` Francesco Dolcini
2025-06-26 10:04 ` Maxime Ripard
1 sibling, 0 replies; 11+ messages in thread
From: Francesco Dolcini @ 2025-06-26 9:38 UTC (permalink / raw)
To: Maxime Ripard
Cc: Neil Armstrong, Jessica Zhang, Maarten Lankhorst,
Thomas Zimmermann, David Airlie, Simona Vetter, Luca Ceresoli,
Anusha Srivatsa, dri-devel, linux-kernel, Francesco Dolcini
[-- Attachment #1: Type: text/plain, Size: 1660 bytes --]
On Thu, Jun 26, 2025 at 11:35:12AM +0200, Francesco Dolcini wrote:
> On Thu, Jun 26, 2025 at 11:25:24AM +0200, Francesco Dolcini wrote:
> > On Wed, Jun 25, 2025 at 08:48:37AM +0200, Maxime Ripard wrote:
> > > Here's a series fixing (hopefully) the panel-simple regression for
> > > panels with a panel-dpi compatible.
> > >
> > > It's only build tested, so if you could give that series a try
> > > Francesco, I'd really appreciate it.
> >
> > It does not build for me, applied on top of commit ee88bddf7f2f ("Merge tag
> > 'bpf-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf")
> >
> > SYNC include/config/auto.conf.cmd
> > CALL scripts/checksyscalls.sh
> > CC drivers/gpu/drm/drm_of.o
> > CC [M] drivers/gpu/drm/panel/panel-simple.o
> > AR drivers/gpu/drm/built-in.a
> > AR drivers/gpu/built-in.a
> > AR drivers/built-in.a
> > AR built-in.a
> > AR vmlinux.a
> > LD vmlinux.o
> > OBJCOPY modules.builtin.modinfo
> > GEN modules.builtin
> > GEN .vmlinux.objs
> > MODPOST Module.symvers
> > ERROR: modpost: "mipi_dsi_bus_type" [drivers/gpu/drm/panel/panel-simple.ko] undefined!
> > make[2]: *** [scripts/Makefile.modpost:147: Module.symvers] Error 1
> > make[1]: *** [/home/francesco/Toradex/sources/linux/Makefile:1953: modpost] Error 2
> > make: *** [Makefile:248: __sub-make] Error 2
> > [Exit 2]
> >
>
> The issue is that I do not have CONFIG_DRM_MIPI_DSI. Adding it the build
> finishes, and it also fixes the issue.
Please find attached the defconfig that trigger this build issue. ARCH=arm, the
actual target I am testing on is an NXP i.MX6.
Francesco
[-- Attachment #2: defconfig --]
[-- Type: text/plain, Size: 9918 bytes --]
# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_KERNEL_LZ4=y
CONFIG_SYSVIPC=y
CONFIG_POSIX_MQUEUE=y
CONFIG_GENERIC_IRQ_DEBUGFS=y
CONFIG_NO_HZ_IDLE=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_BPF_SYSCALL=y
CONFIG_BPF_JIT=y
CONFIG_PREEMPT=y
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_CGROUPS=y
CONFIG_MEMCG=y
CONFIG_BLK_CGROUP=y
CONFIG_CGROUP_SCHED=y
CONFIG_CFS_BANDWIDTH=y
CONFIG_CGROUP_PIDS=y
CONFIG_CPUSETS=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_BPF=y
CONFIG_CGROUP_MISC=y
CONFIG_NAMESPACES=y
CONFIG_USER_NS=y
CONFIG_BLK_DEV_INITRD=y
CONFIG_SYSFS_SYSCALL=y
CONFIG_EXPERT=y
CONFIG_PROFILING=y
CONFIG_ARCH_MXC=y
CONFIG_SOC_IMX6Q=y
CONFIG_SOC_IMX6UL=y
CONFIG_SOC_IMX7D=y
CONFIG_SMP=y
CONFIG_ARM_PSCI=y
CONFIG_HIGHMEM=y
CONFIG_ARCH_FORCE_MAX_ORDER=13
CONFIG_CPU_FREQ=y
CONFIG_CPU_FREQ_STAT=y
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
CONFIG_CPU_FREQ_GOV_USERSPACE=y
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
CONFIG_CPUFREQ_DT=y
CONFIG_ARM_IMX6Q_CPUFREQ=y
CONFIG_ARM_IMX_CPUFREQ_DT=y
CONFIG_CPU_IDLE=y
CONFIG_ARM_CPUIDLE=y
CONFIG_ARM_PSCI_CPUIDLE=y
CONFIG_VFP=y
CONFIG_NEON=y
CONFIG_PM_DEBUG=y
CONFIG_PM_ADVANCED_DEBUG=y
CONFIG_ENERGY_MODEL=y
CONFIG_KPROBES=y
CONFIG_JUMP_LABEL=y
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODVERSIONS=y
CONFIG_BINFMT_MISC=m
# CONFIG_COMPAT_BRK is not set
CONFIG_CMA_DEBUGFS=y
CONFIG_CMA_SYSFS=y
CONFIG_CMA_AREAS=7
CONFIG_LRU_GEN=y
CONFIG_LRU_GEN_ENABLED=y
CONFIG_NET=y
CONFIG_PACKET=y
CONFIG_UNIX=y
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
CONFIG_IPV6=m
CONFIG_NETFILTER=y
CONFIG_BRIDGE_NETFILTER=m
CONFIG_NF_CONNTRACK=m
CONFIG_IP_NF_IPTABLES=m
CONFIG_IP_NF_FILTER=m
CONFIG_IP_NF_TARGET_REJECT=m
CONFIG_IP_NF_NAT=m
CONFIG_IP_NF_TARGET_MASQUERADE=m
CONFIG_IP6_NF_IPTABLES=m
CONFIG_IP6_NF_FILTER=m
CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_NAT=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m
CONFIG_BRIDGE=m
CONFIG_BRIDGE_VLAN_FILTERING=y
CONFIG_VLAN_8021Q=m
CONFIG_VLAN_8021Q_GVRP=y
CONFIG_VLAN_8021Q_MVRP=y
CONFIG_CAN=m
CONFIG_BT=m
CONFIG_BT_RFCOMM=m
CONFIG_BT_BNEP=m
CONFIG_BT_HIDP=m
CONFIG_BT_HCIBTUSB=m
CONFIG_BT_HCIBTSDIO=m
CONFIG_BT_HCIUART=m
CONFIG_BT_HCIUART_MRVL=y
CONFIG_BT_MRVL=m
CONFIG_BT_MRVL_SDIO=m
CONFIG_BT_NXPUART=m
CONFIG_CFG80211=m
CONFIG_CFG80211_WEXT=y
CONFIG_MAC80211=m
CONFIG_RFKILL=m
CONFIG_RFKILL_GPIO=m
CONFIG_PCI=y
CONFIG_PCIEPORTBUS=y
CONFIG_PCIEAER=y
CONFIG_PCI_MSI=y
# CONFIG_VGA_ARB is not set
CONFIG_PCI_IMX6_HOST=y
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_IMX_WEIM=y
CONFIG_ARM_SCMI_PROTOCOL=y
CONFIG_MTD=y
CONFIG_MTD_CMDLINE_PARTS=y
CONFIG_MTD_BLOCK=y
CONFIG_MTD_CFI=y
CONFIG_MTD_JEDECPROBE=y
CONFIG_MTD_CFI_INTELEXT=y
CONFIG_MTD_CFI_AMDSTD=y
CONFIG_MTD_CFI_STAA=y
CONFIG_MTD_PHYSMAP=y
CONFIG_MTD_PHYSMAP_OF=y
CONFIG_MTD_RAW_NAND=y
CONFIG_MTD_NAND_GPMI_NAND=y
CONFIG_MTD_SPI_NOR=m
CONFIG_MTD_UBI=y
CONFIG_MTD_UBI_FASTMAP=y
CONFIG_MTD_UBI_BLOCK=y
CONFIG_BLK_DEV_LOOP=m
CONFIG_BLK_DEV_NVME=m
CONFIG_EEPROM_AT24=y
CONFIG_EEPROM_AT25=y
CONFIG_SCSI=y
CONFIG_BLK_DEV_SD=m
CONFIG_SCSI_CONSTANTS=y
CONFIG_ATA=m
# CONFIG_SATA_PMP is not set
CONFIG_SATA_AHCI=m
CONFIG_SATA_MOBILE_LPM_POLICY=0
CONFIG_AHCI_IMX=m
# CONFIG_ATA_SFF is not set
CONFIG_NETDEVICES=y
CONFIG_R8169=m
CONFIG_MICREL_PHY=y
CONFIG_CAN_FLEXCAN=m
CONFIG_CAN_MCP251X=m
CONFIG_CAN_MCP251XFD=m
CONFIG_USB_PEGASUS=m
CONFIG_USB_RTL8150=m
CONFIG_USB_RTL8152=m
CONFIG_USB_USBNET=m
CONFIG_USB_NET_DM9601=m
CONFIG_USB_NET_SR9800=m
CONFIG_USB_NET_SMSC75XX=m
CONFIG_USB_NET_SMSC95XX=m
CONFIG_USB_NET_PLUSB=m
CONFIG_USB_NET_MCS7830=m
CONFIG_ATH10K=m
CONFIG_ATH10K_PCI=m
CONFIG_ATH10K_SDIO=m
CONFIG_ATH11K=m
CONFIG_ATH11K_PCI=m
CONFIG_ATH12K=m
CONFIG_IWLWIFI=m
CONFIG_MWIFIEX=m
CONFIG_MWIFIEX_SDIO=m
CONFIG_MWIFIEX_PCIE=m
CONFIG_RTL8192CU=m
CONFIG_RTL8XXXU=m
CONFIG_INPUT_EVDEV=m
# CONFIG_KEYBOARD_ATKBD is not set
CONFIG_KEYBOARD_GPIO=m
CONFIG_KEYBOARD_GPIO_POLLED=m
CONFIG_KEYBOARD_SNVS_PWRKEY=m
CONFIG_KEYBOARD_IMX=m
# CONFIG_INPUT_MOUSE is not set
CONFIG_INPUT_TOUCHSCREEN=y
CONFIG_TOUCHSCREEN_AD7879=m
CONFIG_TOUCHSCREEN_AD7879_I2C=m
CONFIG_TOUCHSCREEN_ATMEL_MXT=m
CONFIG_TOUCHSCREEN_STMPE=m
CONFIG_TOUCHSCREEN_COLIBRI_VF50=m
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_NR_UARTS=6
CONFIG_SERIAL_8250_RUNTIME_UARTS=6
CONFIG_SERIAL_OF_PLATFORM=y
CONFIG_SERIAL_IMX=y
CONFIG_SERIAL_IMX_CONSOLE=y
CONFIG_SERIAL_FSL_LPUART=y
CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
CONFIG_RPMSG_TTY=m
CONFIG_SERIAL_DEV_BUS=y
CONFIG_I2C_CHARDEV=y
CONFIG_I2C_GPIO=m
CONFIG_I2C_IMX=y
CONFIG_SPI=y
CONFIG_SPI_FSL_LPSPI=m
CONFIG_SPI_FSL_QUADSPI=m
CONFIG_SPI_IMX=m
CONFIG_SPI_SPIDEV=m
# CONFIG_PINCTRL_IMX8ULP is not set
CONFIG_GPIO_SYSFS=y
CONFIG_GPIO_MXC=y
CONFIG_POWER_RESET=y
CONFIG_POWER_RESET_GPIO=y
CONFIG_POWER_RESET_GPIO_RESTART=y
CONFIG_POWER_RESET_REGULATOR=y
CONFIG_POWER_RESET_SYSCON_POWEROFF=y
CONFIG_SENSORS_ARM_SCMI=y
CONFIG_SENSORS_GPIO_FAN=m
CONFIG_SENSORS_IIO_HWMON=m
CONFIG_SENSORS_LM75=m
CONFIG_SENSORS_PWM_FAN=m
CONFIG_SENSORS_AMC6821=m
CONFIG_SENSORS_INA2XX=m
CONFIG_THERMAL_STATISTICS=y
CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=10000
CONFIG_THERMAL_GOV_USER_SPACE=y
CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y
CONFIG_CPU_THERMAL=y
CONFIG_IMX_THERMAL=y
CONFIG_WATCHDOG=y
CONFIG_WATCHDOG_SYSFS=y
CONFIG_RN5T618_WATCHDOG=y
CONFIG_IMX2_WDT=y
CONFIG_MFD_RN5T618=y
CONFIG_MFD_STMPE=y
CONFIG_REGULATOR=y
CONFIG_REGULATOR_FIXED_VOLTAGE=y
CONFIG_REGULATOR_ANATOP=y
CONFIG_REGULATOR_GPIO=y
CONFIG_REGULATOR_PFUZE100=y
CONFIG_REGULATOR_RN5T618=y
CONFIG_MEDIA_SUPPORT=y
CONFIG_MEDIA_SUPPORT_FILTER=y
CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_PLATFORM_SUPPORT=y
CONFIG_MEDIA_USB_SUPPORT=y
CONFIG_USB_VIDEO_CLASS=m
CONFIG_V4L_PLATFORM_DRIVERS=y
CONFIG_V4L_MEM2MEM_DRIVERS=y
CONFIG_VIDEO_MUX=m
CONFIG_VIDEO_CODA=m
CONFIG_VIDEO_IMX7_CSI=m
CONFIG_VIDEO_IMX_MIPI_CSIS=m
CONFIG_VIDEO_IMX_PXP=m
CONFIG_VIDEO_OV5640=m
CONFIG_VIDEO_ADV7180=m
CONFIG_IMX_IPUV3_CORE=y
CONFIG_DRM=y
CONFIG_DRM_LOAD_EDID_FIRMWARE=y
CONFIG_DRM_PANEL_LVDS=m
CONFIG_DRM_PANEL_EDP=m
CONFIG_DRM_PANEL_SIMPLE=m
CONFIG_DRM_CDNS_MHDP8546=m
CONFIG_DRM_DW_HDMI_AHB_AUDIO=m
CONFIG_DRM_DW_HDMI_GP_AUDIO=m
CONFIG_DRM_DW_HDMI_CEC=m
CONFIG_DRM_IMX=y
CONFIG_DRM_IMX_PARALLEL_DISPLAY=y
CONFIG_DRM_IMX_TVE=y
CONFIG_DRM_IMX_LDB=y
CONFIG_DRM_IMX_HDMI=y
CONFIG_DRM_ETNAVIV=m
CONFIG_DRM_MXSFB=m
CONFIG_DRM_IMX_LCDIF=y
CONFIG_FB=y
CONFIG_BACKLIGHT_CLASS_DEVICE=y
CONFIG_BACKLIGHT_PWM=m
CONFIG_BACKLIGHT_GPIO=m
CONFIG_LOGO=y
CONFIG_SOUND=y
CONFIG_SND=y
CONFIG_SND_SOC=y
CONFIG_SND_SOC_FSL_ASRC=m
CONFIG_SND_IMX_SOC=m
CONFIG_SND_SOC_IMX_SGTL5000=m
CONFIG_SND_SOC_FSL_ASOC_CARD=m
CONFIG_SND_SOC_IMX_AUDMIX=m
CONFIG_SND_SOC_IMX_HDMI=m
CONFIG_SND_SOC_SOF_TOPLEVEL=y
CONFIG_SND_SOC_SOF_OF=m
CONFIG_SND_SOC_SPDIF=m
CONFIG_SND_SOC_NAU8822=m
CONFIG_SND_SIMPLE_CARD=m
CONFIG_SND_AUDIO_GRAPH_CARD=m
CONFIG_SND_AUDIO_GRAPH_CARD2=m
CONFIG_UHID=m
CONFIG_HID_MULTITOUCH=m
CONFIG_USB_HIDDEV=y
CONFIG_USB_CONN_GPIO=m
CONFIG_USB=y
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
CONFIG_USB_OTG=y
CONFIG_USB_MON=m
CONFIG_USB_XHCI_HCD=y
CONFIG_USB_XHCI_PLATFORM=y
CONFIG_USB_EHCI_HCD=m
CONFIG_USB_ACM=m
CONFIG_USB_STORAGE=y
CONFIG_USB_UAS=m
CONFIG_USB_CHIPIDEA=m
CONFIG_USB_CHIPIDEA_UDC=y
CONFIG_USB_CHIPIDEA_HOST=y
CONFIG_USB_SERIAL=m
CONFIG_USB_SERIAL_OPTION=m
CONFIG_USB_TEST=m
CONFIG_USB_EHSET_TEST_FIXTURE=m
CONFIG_USB_HUB_USB251XB=m
CONFIG_USB_HSIC_USB3503=m
CONFIG_NOP_USB_XCEIV=m
CONFIG_USB_MXS_PHY=m
CONFIG_USB_GADGET=y
CONFIG_USB_CONFIGFS=y
CONFIG_USB_CONFIGFS_SERIAL=y
CONFIG_USB_CONFIGFS_ACM=y
CONFIG_USB_CONFIGFS_NCM=y
CONFIG_USB_CONFIGFS_ECM=y
CONFIG_USB_CONFIGFS_ECM_SUBSET=y
CONFIG_USB_CONFIGFS_EEM=y
CONFIG_USB_CONFIGFS_MASS_STORAGE=y
CONFIG_USB_CONFIGFS_F_LB_SS=y
CONFIG_USB_CONFIGFS_F_FS=y
CONFIG_USB_CONFIGFS_F_UAC1=y
CONFIG_USB_CONFIGFS_F_UAC2=y
CONFIG_USB_CONFIGFS_F_HID=y
CONFIG_USB_CONFIGFS_F_UVC=y
CONFIG_MMC=y
CONFIG_MMC_SDHCI=y
CONFIG_MMC_SDHCI_PLTFM=y
CONFIG_MMC_SDHCI_ESDHC_IMX=y
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=m
CONFIG_LEDS_CLASS_MULTICOLOR=m
CONFIG_LEDS_GPIO=m
CONFIG_LEDS_PWM=m
CONFIG_LEDS_TRIGGERS=y
CONFIG_LEDS_TRIGGER_TIMER=m
CONFIG_LEDS_TRIGGER_DISK=y
CONFIG_LEDS_TRIGGER_HEARTBEAT=m
CONFIG_LEDS_TRIGGER_BACKLIGHT=m
CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
CONFIG_LEDS_TRIGGER_PANIC=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_DRV_DS1307=y
CONFIG_RTC_DRV_MXC=m
CONFIG_RTC_DRV_SNVS=y
CONFIG_DMADEVICES=y
CONFIG_IMX_SDMA=m
CONFIG_MXS_DMA=y
CONFIG_STAGING=y
CONFIG_STAGING_MEDIA=y
CONFIG_VIDEO_IMX_MEDIA=m
CONFIG_HWSPINLOCK=y
CONFIG_IMX_MBOX=y
CONFIG_REMOTEPROC=y
CONFIG_REMOTEPROC_CDEV=y
CONFIG_IMX_REMOTEPROC=y
CONFIG_RPMSG_CHAR=m
CONFIG_RPMSG_CTRL=m
CONFIG_RPMSG_VIRTIO=m
CONFIG_EXTCON_USB_GPIO=y
CONFIG_IIO=y
CONFIG_IIO_SW_TRIGGER=m
CONFIG_IMX7D_ADC=m
CONFIG_STMPE_ADC=m
CONFIG_TI_ADS1015=m
CONFIG_VF610_ADC=m
CONFIG_IIO_RESCALE=m
CONFIG_IIO_MUX=m
CONFIG_IIO_HRTIMER_TRIGGER=m
CONFIG_IIO_INTERRUPT_TRIGGER=m
CONFIG_IIO_SYSFS_TRIGGER=m
CONFIG_PWM=y
CONFIG_PWM_FSL_FTM=m
CONFIG_PWM_IMX27=m
CONFIG_PHY_CAN_TRANSCEIVER=m
CONFIG_NVMEM_IMX_OCOTP=y
CONFIG_NVMEM_IMX_OCOTP_ELE=m
CONFIG_NVMEM_SNVS_LPGPR=m
CONFIG_TEE=m
CONFIG_OPTEE=m
CONFIG_MUX_GPIO=m
CONFIG_MUX_MMIO=m
CONFIG_EXT3_FS=m
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_EXT3_FS_SECURITY=y
CONFIG_EXT4_FS=y
CONFIG_FANOTIFY=y
CONFIG_AUTOFS_FS=m
CONFIG_FUSE_FS=m
CONFIG_VFAT_FS=y
CONFIG_EXFAT_FS=y
CONFIG_NTFS3_FS=m
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_JFFS2_FS=m
CONFIG_UBIFS_FS=y
CONFIG_NFS_FS=y
CONFIG_NFS_V2=y
CONFIG_NFS_V4=y
CONFIG_NFS_V4_1=y
CONFIG_NFS_V4_2=y
CONFIG_ROOT_NFS=y
CONFIG_NLS_DEFAULT="cp437"
CONFIG_NLS_CODEPAGE_437=m
CONFIG_NLS_ASCII=m
CONFIG_NLS_ISO8859_1=m
CONFIG_NLS_ISO8859_15=m
CONFIG_NLS_UTF8=m
CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,bpf"
CONFIG_CRYPTO_NULL=m
CONFIG_CRYPTO_SHA256=y
CONFIG_CRYPTO_CRC32C=y
CONFIG_CRYPTO_DEV_FSL_CAAM=m
CONFIG_CRYPTO_DEV_MXS_DCP=m
CONFIG_CMA_SIZE_MBYTES=256
CONFIG_CMA_SIZE_PERCENTAGE=35
CONFIG_CMA_SIZE_SEL_MIN=y
CONFIG_PRINTK_TIME=y
CONFIG_DYNAMIC_DEBUG=y
CONFIG_MAGIC_SYSRQ=y
CONFIG_DEBUG_FS=y
CONFIG_DEBUG_MEMORY_INIT=y
CONFIG_HARDLOCKUP_DETECTOR=y
# CONFIG_FTRACE is not set
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 0/5] drm/panel: panel-simple: Fix panel-dpi probe error
2025-06-26 9:35 ` Francesco Dolcini
2025-06-26 9:38 ` Francesco Dolcini
@ 2025-06-26 10:04 ` Maxime Ripard
1 sibling, 0 replies; 11+ messages in thread
From: Maxime Ripard @ 2025-06-26 10:04 UTC (permalink / raw)
To: Francesco Dolcini
Cc: Neil Armstrong, Jessica Zhang, Maarten Lankhorst,
Thomas Zimmermann, David Airlie, Simona Vetter, Luca Ceresoli,
Anusha Srivatsa, dri-devel, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 1658 bytes --]
On Thu, Jun 26, 2025 at 11:35:12AM +0200, Francesco Dolcini wrote:
> On Thu, Jun 26, 2025 at 11:25:24AM +0200, Francesco Dolcini wrote:
> > On Wed, Jun 25, 2025 at 08:48:37AM +0200, Maxime Ripard wrote:
> > > Here's a series fixing (hopefully) the panel-simple regression for
> > > panels with a panel-dpi compatible.
> > >
> > > It's only build tested, so if you could give that series a try
> > > Francesco, I'd really appreciate it.
> >
> > It does not build for me, applied on top of commit ee88bddf7f2f ("Merge tag
> > 'bpf-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf")
> >
> > SYNC include/config/auto.conf.cmd
> > CALL scripts/checksyscalls.sh
> > CC drivers/gpu/drm/drm_of.o
> > CC [M] drivers/gpu/drm/panel/panel-simple.o
> > AR drivers/gpu/drm/built-in.a
> > AR drivers/gpu/built-in.a
> > AR drivers/built-in.a
> > AR built-in.a
> > AR vmlinux.a
> > LD vmlinux.o
> > OBJCOPY modules.builtin.modinfo
> > GEN modules.builtin
> > GEN .vmlinux.objs
> > MODPOST Module.symvers
> > ERROR: modpost: "mipi_dsi_bus_type" [drivers/gpu/drm/panel/panel-simple.ko] undefined!
> > make[2]: *** [scripts/Makefile.modpost:147: Module.symvers] Error 1
> > make[1]: *** [/home/francesco/Toradex/sources/linux/Makefile:1953: modpost] Error 2
> > make: *** [Makefile:248: __sub-make] Error 2
> > [Exit 2]
> >
>
> The issue is that I do not have CONFIG_DRM_MIPI_DSI. Adding it the build
> finishes, and it also fixes the issue.
Thanks! I've been able to reproduce, and I'll send a new version in a
couple of minutes.
Maxime
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 273 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2025-06-26 10:04 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-25 6:48 [PATCH 0/5] drm/panel: panel-simple: Fix panel-dpi probe error Maxime Ripard
2025-06-25 6:48 ` [PATCH 1/5] drm/mipi-dsi: Add dev_is_mipi_dsi function Maxime Ripard
2025-06-25 6:48 ` [PATCH 2/5] drm/panel: panel-simple: make panel_dpi_probe return a panel_desc Maxime Ripard
2025-06-25 6:48 ` [PATCH 3/5] drm/panel: panel-simple: Make panel_simple_probe return its panel Maxime Ripard
2025-06-25 6:48 ` [PATCH 4/5] drm/panel: panel-simple: Add function to look panel data up Maxime Ripard
2025-06-25 6:48 ` [PATCH 5/5] drm/panel: panel-simple: get rid of panel_dpi hack Maxime Ripard
2025-06-26 9:25 ` [PATCH 0/5] drm/panel: panel-simple: Fix panel-dpi probe error Francesco Dolcini
2025-06-26 9:35 ` Maxime Ripard
2025-06-26 9:35 ` Francesco Dolcini
2025-06-26 9:38 ` Francesco Dolcini
2025-06-26 10:04 ` Maxime Ripard
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).