diff mbox series

[U-Boot] video: arm: rpi: Bail out early if querying video information fails

Message ID 20190711145624.23007-1-matthias.bgg@kernel.org
State Accepted
Commit 970baf16d1322d3930a57fc78ddfb15d594d690c
Delegated to: Anatolij Gustschin
Headers show
Series [U-Boot] video: arm: rpi: Bail out early if querying video information fails | expand

Commit Message

Matthias Brugger July 11, 2019, 2:56 p.m. UTC
From: Fabian Vogt <fvogt@suse.com>

When probing we query for the width and hight of the display. If the
firmware does not report any connected display the system will crash.
See https://github.com/raspberrypi/firmware/issues/1157 for details.

Signed-off-by: Fabian Vogt <fvogt@suse.com>
[mb: update commit message]
Signed-off-by: Matthias Brugger <mbrugger@suse.com>
---
 drivers/video/bcm2835.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Andre Przywara July 26, 2019, 1:59 p.m. UTC | #1
On Thu, 11 Jul 2019 16:56:24 +0200
matthias.bgg@kernel.org wrote:

Hi,

> From: Fabian Vogt <fvogt@suse.com>
> 
> When probing we query for the width and hight of the display. If the
> firmware does not report any connected display the system will crash.
> See https://github.com/raspberrypi/firmware/issues/1157 for details.
> 
> Signed-off-by: Fabian Vogt <fvogt@suse.com>
> [mb: update commit message]
> Signed-off-by: Matthias Brugger <mbrugger@suse.com>

We could just propagate the value of ret instead of coalescing every error
to EIO, but that's just a nit, so:

Reviewed-by: Andre Przywara <andre.przywara@arm.com>
Tested-by: Andre Przywara <andre.przywara@arm.com>

I think this should be merged now, as on the RPi4 this is somewhat of a
showstopper, because we don't have PCIe yet, so no USB, and no keyboard
support. Which means serial console is the only way to control U-Boot.

Cheers,
Andre.

> ---
>  drivers/video/bcm2835.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/video/bcm2835.c b/drivers/video/bcm2835.c
> index bc41090aed..1d2eda084c 100644
> --- a/drivers/video/bcm2835.c
> +++ b/drivers/video/bcm2835.c
> @@ -19,13 +19,15 @@ static int bcm2835_video_probe(struct udevice *dev)
>  
>  	debug("bcm2835: Query resolution...\n");
>  	ret = bcm2835_get_video_size(&w, &h);
> -	if (ret)
> +	if (ret || w == 0 || h == 0)
>  		return -EIO;
>  
>  	debug("bcm2835: Setting up display for %d x %d\n", w, h);
>  	ret = bcm2835_set_video_params(&w, &h, 32, BCM2835_MBOX_PIXEL_ORDER_RGB,
>  				       BCM2835_MBOX_ALPHA_MODE_IGNORED,
>  				       &fb_base, &fb_size, &pitch);
> +	if (ret)
> +		return -EIO;
>  
>  	debug("bcm2835: Final resolution is %d x %d\n", w, h);
>
Anatolij Gustschin July 29, 2019, 9:21 a.m. UTC | #2
On Thu, 11 Jul 2019 16:56:24 +0200
matthias.bgg@kernel.org matthias.bgg@kernel.org wrote:
...
>  drivers/video/bcm2835.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)

Applied to u-boot-video/master, thanks!

--
Anatolij
diff mbox series

Patch

diff --git a/drivers/video/bcm2835.c b/drivers/video/bcm2835.c
index bc41090aed..1d2eda084c 100644
--- a/drivers/video/bcm2835.c
+++ b/drivers/video/bcm2835.c
@@ -19,13 +19,15 @@  static int bcm2835_video_probe(struct udevice *dev)
 
 	debug("bcm2835: Query resolution...\n");
 	ret = bcm2835_get_video_size(&w, &h);
-	if (ret)
+	if (ret || w == 0 || h == 0)
 		return -EIO;
 
 	debug("bcm2835: Setting up display for %d x %d\n", w, h);
 	ret = bcm2835_set_video_params(&w, &h, 32, BCM2835_MBOX_PIXEL_ORDER_RGB,
 				       BCM2835_MBOX_ALPHA_MODE_IGNORED,
 				       &fb_base, &fb_size, &pitch);
+	if (ret)
+		return -EIO;
 
 	debug("bcm2835: Final resolution is %d x %d\n", w, h);