Message ID | ca0e99fa-9126-a4e9-baf7-6a65ad1a48e2@codeaurora.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Mon, Oct 24, 2016 at 03:33:18PM +0530, Archit Taneja wrote: > Hi Ville, > > On 10/22/2016 12:52 AM, ville.syrjala@linux.intel.com wrote: > > From: Ville Syrjälä <ville.syrjala@linux.intel.com> > > > > The global mode_config.rotation_property is going away, switch over to > > per-plane rotation_property. > > > I was trying to test this on msm/drm using modetest. The 180 rotation > works fine, but drm rejects reflect-x and reflect-y rotation prop > values. Is this expected? > > I needed to make this modification to get reflect-x/y working too: > > diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c > index a747bb1..9fcc2c9 100644 > --- a/drivers/gpu/drm/drm_atomic.c > +++ b/drivers/gpu/drm/drm_atomic.c > @@ -711,7 +711,7 @@ int drm_atomic_plane_set_property(struct drm_plane *plane, > state->src_h = val; > } else if (property == config->rotation_property || > property == plane->rotation_property) { > - if (!is_power_of_2(val & DRM_ROTATE_MASK)) > + if (!is_power_of_2(val & (DRM_ROTATE_MASK | DRM_REFLECT_MASK))) That makes no sense. You _must_ to pass one and only one rotation angle. In *addition* you can pass any number of the reflection flags. > return -EINVAL; > state->rotation = val; > } else if (property == plane->zpos_property) { > > > > Otherwise, the patches look fine to me. > > Thanks, > Archit > > > > > v2: Drop the BIT() > > > > Cc: Rob Clark <robdclark@gmail.com> > > Cc: Jilai Wang <jilaiw@codeaurora.org> > > Cc: Archit Taneja <architt@codeaurora.org> > > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> > > Reviewed-by: Rob Clark <robdclark@gmail.com> > > --- > > drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | 14 +++++--------- > > 1 file changed, 5 insertions(+), 9 deletions(-) > > > > diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c > > index 951c002b05df..2653ad893ebc 100644 > > --- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c > > +++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c > > @@ -75,15 +75,11 @@ static void mdp5_plane_install_rotation_property(struct drm_device *dev, > > !(mdp5_plane->caps & MDP_PIPE_CAP_VFLIP)) > > return; > > > > - if (!dev->mode_config.rotation_property) > > - dev->mode_config.rotation_property = > > - drm_mode_create_rotation_property(dev, > > - DRM_ROTATE_0 | DRM_REFLECT_X | DRM_REFLECT_Y); > > - > > - if (dev->mode_config.rotation_property) > > - drm_object_attach_property(&plane->base, > > - dev->mode_config.rotation_property, > > - DRM_ROTATE_0); > > + drm_plane_create_rotation_property(plane, > > + DRM_ROTATE_0, > > + DRM_ROTATE_0 | > > + DRM_REFLECT_X | > > + DRM_REFLECT_Y); > > } > > > > /* helper to install properties which are common to planes and crtcs */ > > > > -- > Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, > a Linux Foundation Collaborative Project
On 10/24/2016 03:45 PM, Ville Syrjälä wrote: > On Mon, Oct 24, 2016 at 03:33:18PM +0530, Archit Taneja wrote: >> Hi Ville, >> >> On 10/22/2016 12:52 AM, ville.syrjala@linux.intel.com wrote: >>> From: Ville Syrjälä <ville.syrjala@linux.intel.com> >>> >>> The global mode_config.rotation_property is going away, switch over to >>> per-plane rotation_property. >> >> >> I was trying to test this on msm/drm using modetest. The 180 rotation >> works fine, but drm rejects reflect-x and reflect-y rotation prop >> values. Is this expected? >> >> I needed to make this modification to get reflect-x/y working too: >> >> diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c >> index a747bb1..9fcc2c9 100644 >> --- a/drivers/gpu/drm/drm_atomic.c >> +++ b/drivers/gpu/drm/drm_atomic.c >> @@ -711,7 +711,7 @@ int drm_atomic_plane_set_property(struct drm_plane *plane, >> state->src_h = val; >> } else if (property == config->rotation_property || >> property == plane->rotation_property) { >> - if (!is_power_of_2(val & DRM_ROTATE_MASK)) >> + if (!is_power_of_2(val & (DRM_ROTATE_MASK | DRM_REFLECT_MASK))) > > That makes no sense. You _must_ to pass one and only one rotation angle. > In *addition* you can pass any number of the reflection flags. Okay. Does the rotation property also include reflection flags, though? When I dump plane properties using modetest, I get: 31 rotation: flags: bitmask values: rotate-0=0x1 rotate-180=0x4 reflect-x=0x10 reflect-y=0x20 value: 1 If I use modetest to set 0x10 or 0x20, it returns an error. I wanted to know if this is expected behavior or not? Thanks, Archit > >> return -EINVAL; >> state->rotation = val; >> } else if (property == plane->zpos_property) { >> >> >> >> Otherwise, the patches look fine to me. >> >> Thanks, >> Archit >> >>> >>> v2: Drop the BIT() >>> >>> Cc: Rob Clark <robdclark@gmail.com> >>> Cc: Jilai Wang <jilaiw@codeaurora.org> >>> Cc: Archit Taneja <architt@codeaurora.org> >>> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> >>> Reviewed-by: Rob Clark <robdclark@gmail.com> >>> --- >>> drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | 14 +++++--------- >>> 1 file changed, 5 insertions(+), 9 deletions(-) >>> >>> diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c >>> index 951c002b05df..2653ad893ebc 100644 >>> --- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c >>> +++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c >>> @@ -75,15 +75,11 @@ static void mdp5_plane_install_rotation_property(struct drm_device *dev, >>> !(mdp5_plane->caps & MDP_PIPE_CAP_VFLIP)) >>> return; >>> >>> - if (!dev->mode_config.rotation_property) >>> - dev->mode_config.rotation_property = >>> - drm_mode_create_rotation_property(dev, >>> - DRM_ROTATE_0 | DRM_REFLECT_X | DRM_REFLECT_Y); >>> - >>> - if (dev->mode_config.rotation_property) >>> - drm_object_attach_property(&plane->base, >>> - dev->mode_config.rotation_property, >>> - DRM_ROTATE_0); >>> + drm_plane_create_rotation_property(plane, >>> + DRM_ROTATE_0, >>> + DRM_ROTATE_0 | >>> + DRM_REFLECT_X | >>> + DRM_REFLECT_Y); >>> } >>> >>> /* helper to install properties which are common to planes and crtcs */ >>> >> >> -- >> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, >> a Linux Foundation Collaborative Project >
On Mon, Oct 24, 2016 at 03:52:09PM +0530, Archit Taneja wrote: > > > On 10/24/2016 03:45 PM, Ville Syrjälä wrote: > > On Mon, Oct 24, 2016 at 03:33:18PM +0530, Archit Taneja wrote: > >> Hi Ville, > >> > >> On 10/22/2016 12:52 AM, ville.syrjala@linux.intel.com wrote: > >>> From: Ville Syrjälä <ville.syrjala@linux.intel.com> > >>> > >>> The global mode_config.rotation_property is going away, switch over to > >>> per-plane rotation_property. > >> > >> > >> I was trying to test this on msm/drm using modetest. The 180 rotation > >> works fine, but drm rejects reflect-x and reflect-y rotation prop > >> values. Is this expected? > >> > >> I needed to make this modification to get reflect-x/y working too: > >> > >> diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c > >> index a747bb1..9fcc2c9 100644 > >> --- a/drivers/gpu/drm/drm_atomic.c > >> +++ b/drivers/gpu/drm/drm_atomic.c > >> @@ -711,7 +711,7 @@ int drm_atomic_plane_set_property(struct drm_plane *plane, > >> state->src_h = val; > >> } else if (property == config->rotation_property || > >> property == plane->rotation_property) { > >> - if (!is_power_of_2(val & DRM_ROTATE_MASK)) > >> + if (!is_power_of_2(val & (DRM_ROTATE_MASK | DRM_REFLECT_MASK))) > > > > That makes no sense. You _must_ to pass one and only one rotation angle. > > In *addition* you can pass any number of the reflection flags. > > Okay. Does the rotation property also include reflection flags, though? Yes. > > When I dump plane properties using modetest, I get: > > 31 rotation: > flags: bitmask > values: rotate-0=0x1 rotate-180=0x4 reflect-x=0x10 reflect-y=0x20 > value: 1 > > If I use modetest to set 0x10 or 0x20, it returns an error. I wanted to > know if this is expected behavior or not? It is. If you want 0 degree rotation with X reflection you have to pass 0x11. > > Thanks, > Archit > > > > >> return -EINVAL; > >> state->rotation = val; > >> } else if (property == plane->zpos_property) { > >> > >> > >> > >> Otherwise, the patches look fine to me. > >> > >> Thanks, > >> Archit > >> > >>> > >>> v2: Drop the BIT() > >>> > >>> Cc: Rob Clark <robdclark@gmail.com> > >>> Cc: Jilai Wang <jilaiw@codeaurora.org> > >>> Cc: Archit Taneja <architt@codeaurora.org> > >>> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> > >>> Reviewed-by: Rob Clark <robdclark@gmail.com> > >>> --- > >>> drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | 14 +++++--------- > >>> 1 file changed, 5 insertions(+), 9 deletions(-) > >>> > >>> diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c > >>> index 951c002b05df..2653ad893ebc 100644 > >>> --- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c > >>> +++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c > >>> @@ -75,15 +75,11 @@ static void mdp5_plane_install_rotation_property(struct drm_device *dev, > >>> !(mdp5_plane->caps & MDP_PIPE_CAP_VFLIP)) > >>> return; > >>> > >>> - if (!dev->mode_config.rotation_property) > >>> - dev->mode_config.rotation_property = > >>> - drm_mode_create_rotation_property(dev, > >>> - DRM_ROTATE_0 | DRM_REFLECT_X | DRM_REFLECT_Y); > >>> - > >>> - if (dev->mode_config.rotation_property) > >>> - drm_object_attach_property(&plane->base, > >>> - dev->mode_config.rotation_property, > >>> - DRM_ROTATE_0); > >>> + drm_plane_create_rotation_property(plane, > >>> + DRM_ROTATE_0, > >>> + DRM_ROTATE_0 | > >>> + DRM_REFLECT_X | > >>> + DRM_REFLECT_Y); > >>> } > >>> > >>> /* helper to install properties which are common to planes and crtcs */ > >>> > >> > >> -- > >> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, > >> a Linux Foundation Collaborative Project > > > > -- > Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, > a Linux Foundation Collaborative Project
On 10/24/2016 03:55 PM, Ville Syrjälä wrote: > On Mon, Oct 24, 2016 at 03:52:09PM +0530, Archit Taneja wrote: >> >> >> On 10/24/2016 03:45 PM, Ville Syrjälä wrote: >>> On Mon, Oct 24, 2016 at 03:33:18PM +0530, Archit Taneja wrote: >>>> Hi Ville, >>>> >>>> On 10/22/2016 12:52 AM, ville.syrjala@linux.intel.com wrote: >>>>> From: Ville Syrjälä <ville.syrjala@linux.intel.com> >>>>> >>>>> The global mode_config.rotation_property is going away, switch over to >>>>> per-plane rotation_property. >>>> >>>> >>>> I was trying to test this on msm/drm using modetest. The 180 rotation >>>> works fine, but drm rejects reflect-x and reflect-y rotation prop >>>> values. Is this expected? >>>> >>>> I needed to make this modification to get reflect-x/y working too: >>>> >>>> diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c >>>> index a747bb1..9fcc2c9 100644 >>>> --- a/drivers/gpu/drm/drm_atomic.c >>>> +++ b/drivers/gpu/drm/drm_atomic.c >>>> @@ -711,7 +711,7 @@ int drm_atomic_plane_set_property(struct drm_plane *plane, >>>> state->src_h = val; >>>> } else if (property == config->rotation_property || >>>> property == plane->rotation_property) { >>>> - if (!is_power_of_2(val & DRM_ROTATE_MASK)) >>>> + if (!is_power_of_2(val & (DRM_ROTATE_MASK | DRM_REFLECT_MASK))) >>> >>> That makes no sense. You _must_ to pass one and only one rotation angle. >>> In *addition* you can pass any number of the reflection flags. >> >> Okay. Does the rotation property also include reflection flags, though? > > Yes. > >> >> When I dump plane properties using modetest, I get: >> >> 31 rotation: >> flags: bitmask >> values: rotate-0=0x1 rotate-180=0x4 reflect-x=0x10 reflect-y=0x20 >> value: 1 >> >> If I use modetest to set 0x10 or 0x20, it returns an error. I wanted to >> know if this is expected behavior or not? > > It is. If you want 0 degree rotation with X reflection you have to pass > 0x11. Ah okay, didn't realize I had to put a 0 degree rotation along with the reflect. Works fine with 0x11. Thanks for the clarification. Archit > >> >> Thanks, >> Archit >> >>> >>>> return -EINVAL; >>>> state->rotation = val; >>>> } else if (property == plane->zpos_property) { >>>> >>>> >>>> >>>> Otherwise, the patches look fine to me. >>>> >>>> Thanks, >>>> Archit >>>> >>>>> >>>>> v2: Drop the BIT() >>>>> >>>>> Cc: Rob Clark <robdclark@gmail.com> >>>>> Cc: Jilai Wang <jilaiw@codeaurora.org> >>>>> Cc: Archit Taneja <architt@codeaurora.org> >>>>> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> >>>>> Reviewed-by: Rob Clark <robdclark@gmail.com> >>>>> --- >>>>> drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | 14 +++++--------- >>>>> 1 file changed, 5 insertions(+), 9 deletions(-) >>>>> >>>>> diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c >>>>> index 951c002b05df..2653ad893ebc 100644 >>>>> --- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c >>>>> +++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c >>>>> @@ -75,15 +75,11 @@ static void mdp5_plane_install_rotation_property(struct drm_device *dev, >>>>> !(mdp5_plane->caps & MDP_PIPE_CAP_VFLIP)) >>>>> return; >>>>> >>>>> - if (!dev->mode_config.rotation_property) >>>>> - dev->mode_config.rotation_property = >>>>> - drm_mode_create_rotation_property(dev, >>>>> - DRM_ROTATE_0 | DRM_REFLECT_X | DRM_REFLECT_Y); >>>>> - >>>>> - if (dev->mode_config.rotation_property) >>>>> - drm_object_attach_property(&plane->base, >>>>> - dev->mode_config.rotation_property, >>>>> - DRM_ROTATE_0); >>>>> + drm_plane_create_rotation_property(plane, >>>>> + DRM_ROTATE_0, >>>>> + DRM_ROTATE_0 | >>>>> + DRM_REFLECT_X | >>>>> + DRM_REFLECT_Y); >>>>> } >>>>> >>>>> /* helper to install properties which are common to planes and crtcs */ >>>>> >>>> >>>> -- >>>> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, >>>> a Linux Foundation Collaborative Project >>> >> >> -- >> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, >> a Linux Foundation Collaborative Project >
diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c index a747bb1..9fcc2c9 100644 --- a/drivers/gpu/drm/drm_atomic.c +++ b/drivers/gpu/drm/drm_atomic.c @@ -711,7 +711,7 @@ int drm_atomic_plane_set_property(struct drm_plane *plane, state->src_h = val; } else if (property == config->rotation_property || property == plane->rotation_property) { - if (!is_power_of_2(val & DRM_ROTATE_MASK)) + if (!is_power_of_2(val & (DRM_ROTATE_MASK | DRM_REFLECT_MASK))) return -EINVAL; state->rotation = val; } else if (property == plane->zpos_property) {