Also removes random module and switches to new bcm2711 thermal driver. Boot tested on RPi 4B v1.1 4G. Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
		
			
				
	
	
		
			68 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 1fbbd377bd1c6b4e3342d03091f19089ccb7fcbe Mon Sep 17 00:00:00 2001
 | |
| From: Jonathan Bell <jonathan@raspberrypi.org>
 | |
| Date: Tue, 28 May 2019 13:56:06 +0100
 | |
| Subject: [PATCH] drm: vc4: handle the case where there are no
 | |
|  available displays
 | |
| 
 | |
| It's reasonable for the firmware to return zero as the number of
 | |
| attached displays. Handle this case as otherwise drm thinks that
 | |
| the DSI panel is attached, which is nonsense.
 | |
| 
 | |
| Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
 | |
| ---
 | |
|  drivers/gpu/drm/vc4/vc4_firmware_kms.c | 32 +++++++++++++++-----------
 | |
|  1 file changed, 18 insertions(+), 14 deletions(-)
 | |
| 
 | |
| --- a/drivers/gpu/drm/vc4/vc4_firmware_kms.c
 | |
| +++ b/drivers/gpu/drm/vc4/vc4_firmware_kms.c
 | |
| @@ -1303,13 +1303,13 @@ static int vc4_fkms_bind(struct device *
 | |
|  				    RPI_FIRMWARE_FRAMEBUFFER_GET_NUM_DISPLAYS,
 | |
|  				    &num_displays, sizeof(u32));
 | |
|  
 | |
| -	/* If we fail to get the number of displays, or it returns 0, then
 | |
| +	/* If we fail to get the number of displays, then
 | |
|  	 * assume old firmware that doesn't have the mailbox call, so just
 | |
|  	 * set one display
 | |
|  	 */
 | |
| -	if (ret || num_displays == 0) {
 | |
| +	if (ret) {
 | |
|  		num_displays = 1;
 | |
| -		DRM_WARN("Unable to determine number of displays's. Assuming 1\n");
 | |
| +		DRM_WARN("Unable to determine number of displays - assuming 1\n");
 | |
|  		ret = 0;
 | |
|  	}
 | |
|  
 | |
| @@ -1338,17 +1338,21 @@ static int vc4_fkms_bind(struct device *
 | |
|  				  display_num);
 | |
|  	}
 | |
|  
 | |
| -	/* Map the SMI interrupt reg */
 | |
| -	crtc_list[0]->regs = vc4_ioremap_regs(pdev, 0);
 | |
| -	if (IS_ERR(crtc_list[0]->regs))
 | |
| -		DRM_ERROR("Oh dear, failed to map registers\n");
 | |
| -
 | |
| -	writel(0, crtc_list[0]->regs + SMICS);
 | |
| -	ret = devm_request_irq(dev, platform_get_irq(pdev, 0),
 | |
| -			       vc4_crtc_irq_handler, 0, "vc4 firmware kms",
 | |
| -			       crtc_list);
 | |
| -	if (ret)
 | |
| -		DRM_ERROR("Oh dear, failed to register IRQ\n");
 | |
| +	if (num_displays > 0) {
 | |
| +		/* Map the SMI interrupt reg */
 | |
| +		crtc_list[0]->regs = vc4_ioremap_regs(pdev, 0);
 | |
| +		if (IS_ERR(crtc_list[0]->regs))
 | |
| +			DRM_ERROR("Oh dear, failed to map registers\n");
 | |
| +
 | |
| +		writel(0, crtc_list[0]->regs + SMICS);
 | |
| +		ret = devm_request_irq(dev, platform_get_irq(pdev, 0),
 | |
| +				       vc4_crtc_irq_handler, 0,
 | |
| +				       "vc4 firmware kms", crtc_list);
 | |
| +		if (ret)
 | |
| +			DRM_ERROR("Oh dear, failed to register IRQ\n");
 | |
| +	} else {
 | |
| +		DRM_WARN("No displays found. Consider forcing hotplug if HDMI is attached\n");
 | |
| +	}
 | |
|  
 | |
|  	platform_set_drvdata(pdev, crtc_list);
 | |
|  
 |