[PATCH 3/3] drm: rcar-du: add R8A77970 support

Sergei Shtylyov sergei.shtylyov at cogentembedded.com
Fri Jan 12 14:38:49 UTC 2018


On 01/12/2018 05:30 PM, Laurent Pinchart wrote:

>>>> Add support for the R-Car  V3M  (R8A77970) SoC to the DU driver (this SoC
>>>> has only  1 display port). Note that there are some differences  with the
>>>> other R-Car gen3 SoCs in the LVDS encoder part, e.g. LVDPLLCR has the
>>>> same layout  as  on the R-Car gen2 SoCs...
>>>>
>>>> Signed-off-by: Sergei Shtylyov <sergei.shtylyov at cogentembedded.com>
>>>
>>> Could you please rebase this series on top of the LVDS rework posted as
>>> "[PATCH 00/10] R-Car DU: Convert LVDS code to bridge driver" (https://
>>> www.spinics.net/lists/dri-devel/msg161931.html) ? It should make it easier
>>> to implement support for V3M. Please then split the DU and LVDS drivers
>>> changes in two patches.
>>>
>>>> ---
>>>>
>>>>    Documentation/devicetree/bindings/display/renesas,du.txt |    1
>>>
>>> Please split the DT bindings changes to a separate patch.
>>
>>      I don't like putting a one-line chnage into a separate bindings patch...

[...]
>>>> Index: linux/drivers/gpu/drm/rcar-du/rcar_du_group.c
>>>> ===================================================================
>>>> --- linux.orig/drivers/gpu/drm/rcar-du/rcar_du_group.c
>>>> +++ linux/drivers/gpu/drm/rcar-du/rcar_du_group.c
>>>> @@ -133,10 +133,12 @@ static void rcar_du_group_setup(struct r
>>>>
>>>>    	rcar_du_group_write(rgrp, DORCR, DORCR_PG1D_DS1 | DORCR_DPRS);
>>>>    	
>>>>    	/* Apply planes to CRTCs association. */
>>>>
>>>> -	mutex_lock(&rgrp->lock);
>>>> -	rcar_du_group_write(rgrp, DPTSR, (rgrp->dptsr_planes << 16) |
>>>> -			    rgrp->dptsr_planes);
>>>> -	mutex_unlock(&rgrp->lock);
>>>> +	if (rcdu->info->num_crtcs > 1) {
>>>> +		mutex_lock(&rgrp->lock);
>>>> +		rcar_du_group_write(rgrp, DPTSR, (rgrp->dptsr_planes << 16) |
>>>> +				    rgrp->dptsr_planes);
>>>> +		mutex_unlock(&rgrp->lock);
>>>> +	}
>>>
>>> Shouldn't you skip writing to the DPTSR register if there's a single DPTSR
>>> in the group ? That would then apply to M3-W as well, which doesn't have
>>> the DPTSR2 register. I'd split this change to a separate patch.
>>
>> OK, I guess you know this stuff better -- I didn't know DPTSR2 is used
>> at all... :-)
> 
> Should I send a patch for this as well ?

    I thought that was a "previous" issue you meant? Please fix this too, if 
it's not too much trouble. :-)

>> [...]
>>
>>>> Index: linux/drivers/gpu/drm/rcar-du/rcar_du_lvdsenc.c
>>>> ===================================================================
>>>> --- linux.orig/drivers/gpu/drm/rcar-du/rcar_du_lvdsenc.c
>>>> +++ linux/drivers/gpu/drm/rcar-du/rcar_du_lvdsenc.c
>>
>> [...]
>>
>>>> @@ -177,14 +185,14 @@ int rcar_du_lvdsenc_enable(struct rcar_d
>>>>    void rcar_du_lvdsenc_atomic_check(struct rcar_du_lvdsenc *lvds,
>>>>    				  struct drm_display_mode *mode)
>>>>    {
>>>> -	struct rcar_du_device *rcdu = lvds->dev;
>>>> +	const struct rcar_du_device_info *info = lvds->dev->info;
>>>>
>>>>    /*
>>>>     * The internal LVDS encoder has a restricted clock frequency
>>>>    	 operating
>>>> -	 * range (30MHz to 150MHz on Gen2, 25.175MHz to 148.5MHz on Gen3).
>>>> Clamp
>>>> -	 * the clock accordingly.
>>>> +	 * range (30MHz to 150MHz on Gen2 and R-Car V3M, 25.175MHz to 148.5MHz
>>>> +	 * on Gen3). Clamp the clock accordingly.
>>>>   	 */
>>>> -	if (rcdu->info->gen < 3)
>>>> +	if (info->gen < 3 || info->model == R8A77970)
>>>>    		mode->clock = clamp(mode->clock, 30000, 150000);
>>>
>>> According to the datasheet the frequency range for V3M is the same as for
>>> the H3 and M3 SoCs.
>>
>>      Indeed! I thought it's determined by the LVDPLLCR layout but it's not...
>>
>>> The range seems to have changed starting in datasheet version
>>> 0.52. I would fix the range in a separate patch first.
>>
>>      Yes.
>>
>>> If you want I can send patches to fix this issue
>>
>>      Yes, please. You clearly know about DU more than me. :-)
> 
> I've prepared a patch, I'm testing it now and I'll then send it.
> 
>>> and the previous one, or you can write them and include them in v2. Let me

    Here you're talking about the previous issue -- I figured it was about 
DPTSR...

>>> know what you'd prefer.
>>>
>>>>    	else
>>>>    		mode->clock = clamp(mode->clock, 25175, 148500);
>>
>>      The lower bound documented on gen3 is 31 MHz indeed...
> 
> And I just found out that the latest versions of the Gen2 datasheets also
> document the 31 MHz - 148.5 MHz range. This will simplify the code.

    Indeed! Thanks for looking. :-)

MBR, Sergei


More information about the dri-devel mailing list