Thank you everyone for your work!
Matthieu.
On Wed, Nov 16 2022 at 03:32:01 PM +0200, Jani Nikula
<jani.nikula@xxxxxxxxx> wrote:
On Wed, 16 Nov 2022, Thomas Zimmermann <tzimmermann@xxxxxxx> wrote:
Hi
Am 14.11.22 um 12:17 schrieb Jani Nikula:
We've used a temporary platform device for firmware EDID loading
since
it was introduced in commit da0df92b5731 ("drm: allow loading an
EDID as
firmware to override broken monitor"), but there's no explanation
why.
Using a temporary device does not play well with CONFIG_FW_CACHE=y,
which caches firmware images (e.g. on suspend) so that drivers can
request firmware when the system is not ready for it, and return
the
images from the cache (e.g. during resume). This works
automatically for
regular devices, but obviously not for a temporarily created
device.
Stop using the throwaway platform device, and use the drm device
instead.
Note that this may still be problematic for cases where the
display was
plugged in during suspend, and the firmware wasn't loaded and
therefore
not cached before suspend.
References:
https://lore.kernel.org/r/20220727074152.43059-1-matthieu.charette@xxxxxxxxx
Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/2061
Reported-by: Matthieu CHARETTE <matthieu.charette@xxxxxxxxx>
Tested-by: Matthieu CHARETTE <matthieu.charette@xxxxxxxxx>
Cc: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx>
Signed-off-by: Jani Nikula <jani.nikula@xxxxxxxxx>
Acked-by: Thomas Zimmermann <tzimmermann@xxxxxxx>
I looked through request_firmware() but did not see any signs that
it
somehow depends on a platform device. I assume that this might only
affect the device name in the error message.
Thanks, pushed to drm-misc-next.
Matthieu, thanks for you patience and the report as well!
BR,
Jani.
Best regards
Thomas
---
Resend with a proper commit message; patch itself is unchanged.
---
drivers/gpu/drm/drm_edid_load.c | 13 +------------
1 file changed, 1 insertion(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/drm_edid_load.c
b/drivers/gpu/drm/drm_edid_load.c
index ef4ab59d6935..5d9ef267ebb3 100644
--- a/drivers/gpu/drm/drm_edid_load.c
+++ b/drivers/gpu/drm/drm_edid_load.c
@@ -172,20 +172,9 @@ static const struct drm_edid
*edid_load(struct drm_connector *connector, const c
fwdata = generic_edid[builtin];
fwsize = sizeof(generic_edid[builtin]);
} else {
- struct platform_device *pdev;
int err;
- pdev = platform_device_register_simple(connector->name, -1,
NULL, 0);
- if (IS_ERR(pdev)) {
- drm_err(connector->dev,
- "[CONNECTOR:%d:%s] Failed to register EDID firmware platform
device for connector \"%s\"\n",
- connector->base.id, connector->name,
- connector->name);
- return ERR_CAST(pdev);
- }
-
- err = request_firmware(&fw, name, &pdev->dev);
- platform_device_unregister(pdev);
+ err = request_firmware(&fw, name, connector->dev->dev);
if (err) {
drm_err(connector->dev,
"[CONNECTOR:%d:%s] Requesting EDID firmware \"%s\" failed
(err=%d)\n",
--
Jani Nikula, Intel Open Source Graphics Center