* Re: [PATCH v2 07/20] drm: mediatek: Rely on the default ->best_encoder() behavior
From: Matthias Brugger @ 2016-06-08 11:17 UTC (permalink / raw)
To: Boris Brezillon, David Airlie, Daniel Vetter, dri-devel,
Daniel Vetter
Cc: Krzysztof Kozlowski, Heiko Stuebner, Stefan Agner, virtualization,
Eric Anholt, Thierry Reding, Laurent Pinchart, Benjamin Gaignard,
Alexandre Courbot, linux-samsung-soc, Joonyoung Shim,
Alexey Brodkin, Kyungmin Park, linux-rockchip, Chen-Yu Tsai,
Kukjin Kim, Stephen Warren, linux-arm-msm, intel-gfx, Jani Nikula,
Inki Dae, linux-mediatek, linux-tegra, Vincent
In-Reply-To: <1465300095-16971-8-git-send-email-boris.brezillon@free-electrons.com>
On 07/06/16 13:48, Boris Brezillon wrote:
> We have a 1:1 relationship between connectors and encoders and the
> driver is relying on the atomic helpers: we can drop the custom
> ->best_encoder() implementation and let the core call
> drm_atomic_helper_best_encoder() for us.
>
> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Reviewed-by: Matthias Brugger <matthias.bgg@gmail.com>
> ---
> drivers/gpu/drm/mediatek/mtk_dsi.c | 9 ---------
> 1 file changed, 9 deletions(-)
>
> diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c
> index 2d808e5..7343ffc 100644
> --- a/drivers/gpu/drm/mediatek/mtk_dsi.c
> +++ b/drivers/gpu/drm/mediatek/mtk_dsi.c
> @@ -575,14 +575,6 @@ static int mtk_dsi_connector_get_modes(struct drm_connector *connector)
> return drm_panel_get_modes(dsi->panel);
> }
>
> -static struct drm_encoder *mtk_dsi_connector_best_encoder(
> - struct drm_connector *connector)
> -{
> - struct mtk_dsi *dsi = connector_to_dsi(connector);
> -
> - return &dsi->encoder;
> -}
> -
> static const struct drm_encoder_helper_funcs mtk_dsi_encoder_helper_funcs = {
> .mode_fixup = mtk_dsi_encoder_mode_fixup,
> .mode_set = mtk_dsi_encoder_mode_set,
> @@ -603,7 +595,6 @@ static const struct drm_connector_funcs mtk_dsi_connector_funcs = {
> static const struct drm_connector_helper_funcs
> mtk_dsi_connector_helper_funcs = {
> .get_modes = mtk_dsi_connector_get_modes,
> - .best_encoder = mtk_dsi_connector_best_encoder,
> };
>
> static int mtk_drm_attach_bridge(struct drm_bridge *bridge,
>
^ permalink raw reply
* Re: [PATCH v2 08/20] drm: msm: Rely on the default ->best_encoder() behavior where appropriate
From: Archit Taneja @ 2016-06-08 10:09 UTC (permalink / raw)
To: Boris Brezillon, David Airlie, Daniel Vetter, dri-devel,
Daniel Vetter
Cc: Krzysztof Kozlowski, Heiko Stuebner, Stefan Agner, virtualization,
Eric Anholt, Thierry Reding, Laurent Pinchart, Benjamin Gaignard,
Alexandre Courbot, linux-samsung-soc, Joonyoung Shim,
Alexey Brodkin, Kyungmin Park, linux-rockchip, Chen-Yu Tsai,
Kukjin Kim, linux-tegra, Stephen Warren, linux-arm-msm, intel-gfx,
Jani Nikula, Inki Dae, linux-mediatek, Matthi
In-Reply-To: <1465300095-16971-9-git-send-email-boris.brezillon@free-electrons.com>
Hi,
On 06/07/2016 05:18 PM, Boris Brezillon wrote:
> For all outputs except DSI we have a 1:1 relationship between connectors
> and encoders and the driver is relying on the atomic helpers: we can
> drop the custom ->best_encoder() and let the core call
> drm_atomic_helper_best_encoder() for us.
Works fine with msm.
Tested-by: Archit Taneja <architt@codeaurora.org>
Thanks,
Archit
>
> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
> ---
> drivers/gpu/drm/msm/edp/edp_connector.c | 10 ----------
> drivers/gpu/drm/msm/hdmi/hdmi_connector.c | 8 --------
> drivers/gpu/drm/msm/mdp/mdp4/mdp4_lvds_connector.c | 9 ---------
> 3 files changed, 27 deletions(-)
>
> diff --git a/drivers/gpu/drm/msm/edp/edp_connector.c b/drivers/gpu/drm/msm/edp/edp_connector.c
> index 72360cd..5960628 100644
> --- a/drivers/gpu/drm/msm/edp/edp_connector.c
> +++ b/drivers/gpu/drm/msm/edp/edp_connector.c
> @@ -91,15 +91,6 @@ static int edp_connector_mode_valid(struct drm_connector *connector,
> return MODE_OK;
> }
>
> -static struct drm_encoder *
> -edp_connector_best_encoder(struct drm_connector *connector)
> -{
> - struct edp_connector *edp_connector = to_edp_connector(connector);
> -
> - DBG("");
> - return edp_connector->edp->encoder;
> -}
> -
> static const struct drm_connector_funcs edp_connector_funcs = {
> .dpms = drm_atomic_helper_connector_dpms,
> .detect = edp_connector_detect,
> @@ -113,7 +104,6 @@ static const struct drm_connector_funcs edp_connector_funcs = {
> static const struct drm_connector_helper_funcs edp_connector_helper_funcs = {
> .get_modes = edp_connector_get_modes,
> .mode_valid = edp_connector_mode_valid,
> - .best_encoder = edp_connector_best_encoder,
> };
>
> /* initialize connector */
> diff --git a/drivers/gpu/drm/msm/hdmi/hdmi_connector.c b/drivers/gpu/drm/msm/hdmi/hdmi_connector.c
> index b15d726..a2515b4 100644
> --- a/drivers/gpu/drm/msm/hdmi/hdmi_connector.c
> +++ b/drivers/gpu/drm/msm/hdmi/hdmi_connector.c
> @@ -406,13 +406,6 @@ static int msm_hdmi_connector_mode_valid(struct drm_connector *connector,
> return 0;
> }
>
> -static struct drm_encoder *
> -msm_hdmi_connector_best_encoder(struct drm_connector *connector)
> -{
> - struct hdmi_connector *hdmi_connector = to_hdmi_connector(connector);
> - return hdmi_connector->hdmi->encoder;
> -}
> -
> static const struct drm_connector_funcs hdmi_connector_funcs = {
> .dpms = drm_atomic_helper_connector_dpms,
> .detect = hdmi_connector_detect,
> @@ -426,7 +419,6 @@ static const struct drm_connector_funcs hdmi_connector_funcs = {
> static const struct drm_connector_helper_funcs msm_hdmi_connector_helper_funcs = {
> .get_modes = msm_hdmi_connector_get_modes,
> .mode_valid = msm_hdmi_connector_mode_valid,
> - .best_encoder = msm_hdmi_connector_best_encoder,
> };
>
> /* initialize connector */
> diff --git a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_lvds_connector.c b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_lvds_connector.c
> index 2648cd7..353429b 100644
> --- a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_lvds_connector.c
> +++ b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_lvds_connector.c
> @@ -90,14 +90,6 @@ static int mdp4_lvds_connector_mode_valid(struct drm_connector *connector,
> return MODE_OK;
> }
>
> -static struct drm_encoder *
> -mdp4_lvds_connector_best_encoder(struct drm_connector *connector)
> -{
> - struct mdp4_lvds_connector *mdp4_lvds_connector =
> - to_mdp4_lvds_connector(connector);
> - return mdp4_lvds_connector->encoder;
> -}
> -
> static const struct drm_connector_funcs mdp4_lvds_connector_funcs = {
> .dpms = drm_atomic_helper_connector_dpms,
> .detect = mdp4_lvds_connector_detect,
> @@ -111,7 +103,6 @@ static const struct drm_connector_funcs mdp4_lvds_connector_funcs = {
> static const struct drm_connector_helper_funcs mdp4_lvds_connector_helper_funcs = {
> .get_modes = mdp4_lvds_connector_get_modes,
> .mode_valid = mdp4_lvds_connector_mode_valid,
> - .best_encoder = mdp4_lvds_connector_best_encoder,
> };
>
> /* initialize connector */
>
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora
Forum, hosted by The Linux Foundation
^ permalink raw reply
* Re: [PATCH v2 11/20] drm: sti: Rely on the default ->best_encoder() behavior
From: Vincent ABRIOU @ 2016-06-08 9:35 UTC (permalink / raw)
To: Boris Brezillon, David Airlie, Daniel Vetter,
dri-devel@lists.freedesktop.org, Daniel Vetter
Cc: Krzysztof Kozlowski, Heiko Stuebner, Stefan Agner,
virtualization@lists.linux-foundation.org, Eric Anholt,
Thierry Reding, Laurent Pinchart, Benjamin Gaignard,
Alexandre Courbot, linux-samsung-soc@vger.kernel.org,
Joonyoung Shim, Alexey Brodkin, Kyungmin Park,
linux-rockchip@lists.infradead.org, Chen-Yu Tsai, Kukjin Kim,
linux-tegra@vger.kernel.org, Stephen Warren, linux-arm-msm
In-Reply-To: <1465300095-16971-12-git-send-email-boris.brezillon@free-electrons.com>
Hi Boris,
Thanks for the patch.
Acked-by: Vincent Abriou <vincent.abriou@st.com>
Vincent
On 06/07/2016 01:48 PM, Boris Brezillon wrote:
> All outputs have a 1:1 relationship between connectors and encoders
> and the driver is relying on the atomic helpers: we can drop the custom
> ->best_encoder() implementations and let the core call
> drm_atomic_helper_best_encoder() for us.
>
> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
> ---
> drivers/gpu/drm/sti/sti_dvo.c | 10 ----------
> drivers/gpu/drm/sti/sti_hda.c | 10 ----------
> drivers/gpu/drm/sti/sti_hdmi.c | 10 ----------
> 3 files changed, 30 deletions(-)
>
> diff --git a/drivers/gpu/drm/sti/sti_dvo.c b/drivers/gpu/drm/sti/sti_dvo.c
> index 25f7663..d5627d1 100644
> --- a/drivers/gpu/drm/sti/sti_dvo.c
> +++ b/drivers/gpu/drm/sti/sti_dvo.c
> @@ -384,20 +384,10 @@ static int sti_dvo_connector_mode_valid(struct drm_connector *connector,
> return MODE_OK;
> }
>
> -struct drm_encoder *sti_dvo_best_encoder(struct drm_connector *connector)
> -{
> - struct sti_dvo_connector *dvo_connector
> - = to_sti_dvo_connector(connector);
> -
> - /* Best encoder is the one associated during connector creation */
> - return dvo_connector->encoder;
> -}
> -
> static const
> struct drm_connector_helper_funcs sti_dvo_connector_helper_funcs = {
> .get_modes = sti_dvo_connector_get_modes,
> .mode_valid = sti_dvo_connector_mode_valid,
> - .best_encoder = sti_dvo_best_encoder,
> };
>
> static enum drm_connector_status
> diff --git a/drivers/gpu/drm/sti/sti_hda.c b/drivers/gpu/drm/sti/sti_hda.c
> index f7d3464..c4649f5 100644
> --- a/drivers/gpu/drm/sti/sti_hda.c
> +++ b/drivers/gpu/drm/sti/sti_hda.c
> @@ -676,20 +676,10 @@ static int sti_hda_connector_mode_valid(struct drm_connector *connector,
> return MODE_OK;
> }
>
> -struct drm_encoder *sti_hda_best_encoder(struct drm_connector *connector)
> -{
> - struct sti_hda_connector *hda_connector
> - = to_sti_hda_connector(connector);
> -
> - /* Best encoder is the one associated during connector creation */
> - return hda_connector->encoder;
> -}
> -
> static const
> struct drm_connector_helper_funcs sti_hda_connector_helper_funcs = {
> .get_modes = sti_hda_connector_get_modes,
> .mode_valid = sti_hda_connector_mode_valid,
> - .best_encoder = sti_hda_best_encoder,
> };
>
> static enum drm_connector_status
> diff --git a/drivers/gpu/drm/sti/sti_hdmi.c b/drivers/gpu/drm/sti/sti_hdmi.c
> index 6ef0715..dc9ab6e 100644
> --- a/drivers/gpu/drm/sti/sti_hdmi.c
> +++ b/drivers/gpu/drm/sti/sti_hdmi.c
> @@ -897,20 +897,10 @@ static int sti_hdmi_connector_mode_valid(struct drm_connector *connector,
> return MODE_OK;
> }
>
> -struct drm_encoder *sti_hdmi_best_encoder(struct drm_connector *connector)
> -{
> - struct sti_hdmi_connector *hdmi_connector
> - = to_sti_hdmi_connector(connector);
> -
> - /* Best encoder is the one associated during connector creation */
> - return hdmi_connector->encoder;
> -}
> -
> static const
> struct drm_connector_helper_funcs sti_hdmi_connector_helper_funcs = {
> .get_modes = sti_hdmi_connector_get_modes,
> .mode_valid = sti_hdmi_connector_mode_valid,
> - .best_encoder = sti_hdmi_best_encoder,
> };
>
> /* get detection status of display device */
>
^ permalink raw reply
* Re: [PATCH V3 2/2] vhost_net: conditionally enable tx polling
From: Jason Wang @ 2016-06-08 6:48 UTC (permalink / raw)
To: Michael S. Tsirkin; +Cc: netdev, linux-kernel, kvm, virtualization
In-Reply-To: <20160607152407-mutt-send-email-mst@redhat.com>
On 2016年06月07日 20:26, Michael S. Tsirkin wrote:
> On Wed, Jun 01, 2016 at 01:56:34AM -0400, Jason Wang wrote:
>> We always poll tx for socket, this is sub optimal since:
>>
>> - it will be only used when we exceed the sndbuf of the socket.
>> - since we use two independent polls for tx and vq, this will slightly
>> increase the waitqueue traversing time and more important, vhost
>> could not benefit from commit
>> 9e641bdcfa4ef4d6e2fbaa59c1be0ad5d1551fd5 ("net-tun: restructure
>> tun_do_read for better sleep/wakeup efficiency") even if we've
>> stopped rx polling during handle_rx since tx poll were still left in
>> the waitqueue.
>>
>> Fix this by conditionally enable tx polling only when -EAGAIN were
>> met.
>>
>> Test shows about 8% improvement on guest rx pps.
>>
>> Before: ~1350000
>> After: ~1460000
>>
>> Signed-off-by: Jason Wang <jasowang@redhat.com>
>> ---
>> drivers/vhost/net.c | 3 +++
>> 1 file changed, 3 insertions(+)
>>
>> diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
>> index 1d3e45f..e75ffcc 100644
>> --- a/drivers/vhost/net.c
>> +++ b/drivers/vhost/net.c
>> @@ -378,6 +378,7 @@ static void handle_tx(struct vhost_net *net)
>> goto out;
>>
>> vhost_disable_notify(&net->dev, vq);
>> + vhost_net_disable_vq(net, vq);
>>
>> hdr_size = nvq->vhost_hlen;
>> zcopy = nvq->ubufs;
>> @@ -459,6 +460,8 @@ static void handle_tx(struct vhost_net *net)
>> % UIO_MAXIOV;
>> }
>> vhost_discard_vq_desc(vq, 1);
>> + if (err == -EAGAIN)
>> + vhost_net_enable_vq(net, vq);
>> break;
>> }
>> if (err != len)
> This seems rather risky. What if TX failed for some other reason?
> Polling won't ever be re-enabled ...
>
But why we need to enable tx poll in this case? Even if we enable it, we
wont' get any wakeup.
>> --
>> 1.8.3.1
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply
* Re: [PATCH V3 1/2] vhost_net: stop polling socket during rx processing
From: David Miller @ 2016-06-07 21:46 UTC (permalink / raw)
To: jasowang; +Cc: netdev, virtualization, linux-kernel, kvm, mst
In-Reply-To: <1464760594-30326-2-git-send-email-jasowang@redhat.com>
From: Jason Wang <jasowang@redhat.com>
Date: Wed, 1 Jun 2016 01:56:33 -0400
> We don't stop rx polling socket during rx processing, this will lead
> unnecessary wakeups from under layer net devices (E.g
> sock_def_readable() form tun). Rx will be slowed down in this
> way. This patch avoids this by stop polling socket during rx
> processing. A small drawback is that this introduces some overheads in
> light load case because of the extra start/stop polling, but single
> netperf TCP_RR does not notice any change. In a super heavy load case,
> e.g using pktgen to inject packet to guest, we get about ~8.8%
> improvement on pps:
>
> before: ~1240000 pkt/s
> after: ~1350000 pkt/s
>
> Signed-off-by: Jason Wang <jasowang@redhat.com>
Applied.
^ permalink raw reply
* Re: [PATCH v2 01/20] drm/atomic: Fix remaining places where !funcs->best_encoder is valid
From: Daniel Vetter @ 2016-06-07 14:39 UTC (permalink / raw)
To: Boris Brezillon
Cc: Krzysztof Kozlowski, Heiko Stuebner, David Airlie, dri-devel,
virtualization, Eric Anholt, Thierry Reding, Laurent Pinchart,
Benjamin Gaignard, Daniel Vetter, Alexandre Courbot,
linux-samsung-soc, Joonyoung Shim, Alexey Brodkin, Kyungmin Park,
linux-rockchip, Chen-Yu Tsai, Kukjin Kim, linux-tegra,
Stephen Warren, linux-arm-msm, intel-gfx, Jani Nikula
In-Reply-To: <1465300095-16971-2-git-send-email-boris.brezillon@free-electrons.com>
On Tue, Jun 07, 2016 at 01:47:56PM +0200, Boris Brezillon wrote:
> Adapt drm_pick_crtcs() and update_connector_routing() to fallback to
> drm_atomic_helper_best_encoder() if funcs->best_encoder() is NULL so
> that DRM drivers can leave this hook unassigned if they know they want
> to use drm_atomic_helper_best_encoder().
>
> Update the vtables documentation accordingly.
>
> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Applied to drm-misc, thanks. I think I'll wait with the driver patches
until next week or so.
-Daniel
> ---
> drivers/gpu/drm/drm_atomic_helper.c | 4 +++-
> drivers/gpu/drm/drm_fb_helper.c | 13 ++++++++++++-
> include/drm/drm_modeset_helper_vtables.h | 10 ++++++++--
> 3 files changed, 23 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
> index f6a3350..849d029 100644
> --- a/drivers/gpu/drm/drm_atomic_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> @@ -300,8 +300,10 @@ update_connector_routing(struct drm_atomic_state *state,
> if (funcs->atomic_best_encoder)
> new_encoder = funcs->atomic_best_encoder(connector,
> connector_state);
> - else
> + else if (funcs->best_encoder)
> new_encoder = funcs->best_encoder(connector);
> + else
> + new_encoder = drm_atomic_helper_best_encoder(connector);
>
> if (!new_encoder) {
> DRM_DEBUG_ATOMIC("No suitable encoder found for [CONNECTOR:%d:%s]\n",
> diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
> index 7c2eb75..d44389a 100644
> --- a/drivers/gpu/drm/drm_fb_helper.c
> +++ b/drivers/gpu/drm/drm_fb_helper.c
> @@ -2000,7 +2000,18 @@ static int drm_pick_crtcs(struct drm_fb_helper *fb_helper,
> my_score++;
>
> connector_funcs = connector->helper_private;
> - encoder = connector_funcs->best_encoder(connector);
> +
> + /*
> + * If the DRM device implements atomic hooks and ->best_encoder() is
> + * NULL we fallback to the default drm_atomic_helper_best_encoder()
> + * helper.
> + */
> + if (fb_helper->dev->mode_config.funcs->atomic_commit &&
> + !connector_funcs->best_encoder)
> + encoder = drm_atomic_helper_best_encoder(connector);
> + else
> + encoder = connector_funcs->best_encoder(connector);
> +
> if (!encoder)
> goto out;
>
> diff --git a/include/drm/drm_modeset_helper_vtables.h b/include/drm/drm_modeset_helper_vtables.h
> index d4619dc..4e7a53b 100644
> --- a/include/drm/drm_modeset_helper_vtables.h
> +++ b/include/drm/drm_modeset_helper_vtables.h
> @@ -736,6 +736,11 @@ struct drm_connector_helper_funcs {
> * inspect dynamic configuration state should instead use
> * @atomic_best_encoder.
> *
> + * You can leave this function to NULL if the connector is only
> + * attached to a single encoder and you are using the atomic helpers.
> + * In this case, the core will call drm_atomic_helper_best_encoder()
> + * for you.
> + *
> * RETURNS:
> *
> * Encoder that should be used for the given connector and connector
> @@ -752,8 +757,9 @@ struct drm_connector_helper_funcs {
> * need to select the best encoder depending upon the desired
> * configuration and can't select it statically.
> *
> - * This function is used by drm_atomic_helper_check_modeset() and either
> - * this or @best_encoder is required.
> + * This function is used by drm_atomic_helper_check_modeset().
> + * If it is not implemented, the core will fallback to @best_encoder
> + * (or drm_atomic_helper_best_encoder() if @best_encoder is NULL).
> *
> * NOTE:
> *
> --
> 2.7.4
>
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
^ permalink raw reply
* Re: [PATCH V3 2/2] vhost_net: conditionally enable tx polling
From: Michael S. Tsirkin @ 2016-06-07 12:26 UTC (permalink / raw)
To: Jason Wang; +Cc: netdev, linux-kernel, kvm, virtualization
In-Reply-To: <1464760594-30326-3-git-send-email-jasowang@redhat.com>
On Wed, Jun 01, 2016 at 01:56:34AM -0400, Jason Wang wrote:
> We always poll tx for socket, this is sub optimal since:
>
> - it will be only used when we exceed the sndbuf of the socket.
> - since we use two independent polls for tx and vq, this will slightly
> increase the waitqueue traversing time and more important, vhost
> could not benefit from commit
> 9e641bdcfa4ef4d6e2fbaa59c1be0ad5d1551fd5 ("net-tun: restructure
> tun_do_read for better sleep/wakeup efficiency") even if we've
> stopped rx polling during handle_rx since tx poll were still left in
> the waitqueue.
>
> Fix this by conditionally enable tx polling only when -EAGAIN were
> met.
>
> Test shows about 8% improvement on guest rx pps.
>
> Before: ~1350000
> After: ~1460000
>
> Signed-off-by: Jason Wang <jasowang@redhat.com>
> ---
> drivers/vhost/net.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
> index 1d3e45f..e75ffcc 100644
> --- a/drivers/vhost/net.c
> +++ b/drivers/vhost/net.c
> @@ -378,6 +378,7 @@ static void handle_tx(struct vhost_net *net)
> goto out;
>
> vhost_disable_notify(&net->dev, vq);
> + vhost_net_disable_vq(net, vq);
>
> hdr_size = nvq->vhost_hlen;
> zcopy = nvq->ubufs;
> @@ -459,6 +460,8 @@ static void handle_tx(struct vhost_net *net)
> % UIO_MAXIOV;
> }
> vhost_discard_vq_desc(vq, 1);
> + if (err == -EAGAIN)
> + vhost_net_enable_vq(net, vq);
> break;
> }
> if (err != len)
This seems rather risky. What if TX failed for some other reason?
Polling won't ever be re-enabled ...
> --
> 1.8.3.1
^ permalink raw reply
* Re: [PATCH V3 1/2] vhost_net: stop polling socket during rx processing
From: Michael S. Tsirkin @ 2016-06-07 12:23 UTC (permalink / raw)
To: Jason Wang; +Cc: netdev, linux-kernel, kvm, virtualization
In-Reply-To: <1464760594-30326-2-git-send-email-jasowang@redhat.com>
On Wed, Jun 01, 2016 at 01:56:33AM -0400, Jason Wang wrote:
> We don't stop rx polling socket during rx processing, this will lead
> unnecessary wakeups from under layer net devices (E.g
> sock_def_readable() form tun). Rx will be slowed down in this
> way. This patch avoids this by stop polling socket during rx
> processing. A small drawback is that this introduces some overheads in
> light load case because of the extra start/stop polling, but single
> netperf TCP_RR does not notice any change. In a super heavy load case,
> e.g using pktgen to inject packet to guest, we get about ~8.8%
> improvement on pps:
>
> before: ~1240000 pkt/s
> after: ~1350000 pkt/s
>
> Signed-off-by: Jason Wang <jasowang@redhat.com>
I guess this works though I suspect it's even faster to
maintain some state in the vq structure so we don't need
to play with waitq all the time.
For now
Acked-by: Michael S. Tsirkin <mst@redhat.com>
> ---
> drivers/vhost/net.c | 64 +++++++++++++++++++++++++++--------------------------
> 1 file changed, 33 insertions(+), 31 deletions(-)
>
> diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
> index f744eeb..1d3e45f 100644
> --- a/drivers/vhost/net.c
> +++ b/drivers/vhost/net.c
> @@ -301,6 +301,32 @@ static bool vhost_can_busy_poll(struct vhost_dev *dev,
> !vhost_has_work(dev);
> }
>
> +static void vhost_net_disable_vq(struct vhost_net *n,
> + struct vhost_virtqueue *vq)
> +{
> + struct vhost_net_virtqueue *nvq =
> + container_of(vq, struct vhost_net_virtqueue, vq);
> + struct vhost_poll *poll = n->poll + (nvq - n->vqs);
> + if (!vq->private_data)
> + return;
> + vhost_poll_stop(poll);
> +}
> +
> +static int vhost_net_enable_vq(struct vhost_net *n,
> + struct vhost_virtqueue *vq)
> +{
> + struct vhost_net_virtqueue *nvq =
> + container_of(vq, struct vhost_net_virtqueue, vq);
> + struct vhost_poll *poll = n->poll + (nvq - n->vqs);
> + struct socket *sock;
> +
> + sock = vq->private_data;
> + if (!sock)
> + return 0;
> +
> + return vhost_poll_start(poll, sock->file);
> +}
> +
> static int vhost_net_tx_get_vq_desc(struct vhost_net *net,
> struct vhost_virtqueue *vq,
> struct iovec iov[], unsigned int iov_size,
> @@ -613,6 +639,7 @@ static void handle_rx(struct vhost_net *net)
> if (!sock)
> goto out;
> vhost_disable_notify(&net->dev, vq);
> + vhost_net_disable_vq(net, vq);
>
> vhost_hlen = nvq->vhost_hlen;
> sock_hlen = nvq->sock_hlen;
> @@ -629,7 +656,7 @@ static void handle_rx(struct vhost_net *net)
> likely(mergeable) ? UIO_MAXIOV : 1);
> /* On error, stop handling until the next kick. */
> if (unlikely(headcount < 0))
> - break;
> + goto out;
> /* On overrun, truncate and discard */
> if (unlikely(headcount > UIO_MAXIOV)) {
> iov_iter_init(&msg.msg_iter, READ, vq->iov, 1, 1);
> @@ -648,7 +675,7 @@ static void handle_rx(struct vhost_net *net)
> }
> /* Nothing new? Wait for eventfd to tell us
> * they refilled. */
> - break;
> + goto out;
> }
> /* We don't need to be notified again. */
> iov_iter_init(&msg.msg_iter, READ, vq->iov, in, vhost_len);
> @@ -676,7 +703,7 @@ static void handle_rx(struct vhost_net *net)
> &fixup) != sizeof(hdr)) {
> vq_err(vq, "Unable to write vnet_hdr "
> "at addr %p\n", vq->iov->iov_base);
> - break;
> + goto out;
> }
> } else {
> /* Header came from socket; we'll need to patch
> @@ -692,7 +719,7 @@ static void handle_rx(struct vhost_net *net)
> &fixup) != sizeof num_buffers) {
> vq_err(vq, "Failed num_buffers write");
> vhost_discard_vq_desc(vq, headcount);
> - break;
> + goto out;
> }
> vhost_add_used_and_signal_n(&net->dev, vq, vq->heads,
> headcount);
> @@ -701,9 +728,10 @@ static void handle_rx(struct vhost_net *net)
> total_len += vhost_len;
> if (unlikely(total_len >= VHOST_NET_WEIGHT)) {
> vhost_poll_queue(&vq->poll);
> - break;
> + goto out;
> }
> }
> + vhost_net_enable_vq(net, vq);
> out:
> mutex_unlock(&vq->mutex);
> }
> @@ -782,32 +810,6 @@ static int vhost_net_open(struct inode *inode, struct file *f)
> return 0;
> }
>
> -static void vhost_net_disable_vq(struct vhost_net *n,
> - struct vhost_virtqueue *vq)
> -{
> - struct vhost_net_virtqueue *nvq =
> - container_of(vq, struct vhost_net_virtqueue, vq);
> - struct vhost_poll *poll = n->poll + (nvq - n->vqs);
> - if (!vq->private_data)
> - return;
> - vhost_poll_stop(poll);
> -}
> -
> -static int vhost_net_enable_vq(struct vhost_net *n,
> - struct vhost_virtqueue *vq)
> -{
> - struct vhost_net_virtqueue *nvq =
> - container_of(vq, struct vhost_net_virtqueue, vq);
> - struct vhost_poll *poll = n->poll + (nvq - n->vqs);
> - struct socket *sock;
> -
> - sock = vq->private_data;
> - if (!sock)
> - return 0;
> -
> - return vhost_poll_start(poll, sock->file);
> -}
> -
> static struct socket *vhost_net_stop_vq(struct vhost_net *n,
> struct vhost_virtqueue *vq)
> {
> --
> 1.8.3.1
^ permalink raw reply
* [PATCH v2 20/20] drm/bridge: dw-hdmi: Use drm_atomic_helper_best_encoder()
From: Boris Brezillon @ 2016-06-07 11:48 UTC (permalink / raw)
To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
Cc: Krzysztof Kozlowski, Heiko Stuebner, Stefan Agner, virtualization,
Eric Anholt, Thierry Reding, Laurent Pinchart, Benjamin Gaignard,
Alexandre Courbot, linux-samsung-soc, Joonyoung Shim,
Boris Brezillon, Alexey Brodkin, Kyungmin Park, linux-rockchip,
Chen-Yu Tsai, Kukjin Kim, linux-tegra, Stephen Warren,
linux-arm-msm, intel-gfx, Jani Nikula, Inki Dae
In-Reply-To: <1465300095-16971-1-git-send-email-boris.brezillon@free-electrons.com>
We have a 1:1 relationship between connectors and encoders, which means
we can rely on the drm_atomic_helper_best_encoder() behavior.
We still have to explicitly assign ->best_encoder() to
drm_atomic_helper_best_encoder(), because the automated fallback to
drm_atomic_helper_best_encoder() when ->best_encoder() is NULL is only
available when the DRM device is using the atomic helpers, and this bridge
is compatible with non-atomic and atomic devices.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
drivers/gpu/drm/bridge/dw-hdmi.c | 11 +----------
1 file changed, 1 insertion(+), 10 deletions(-)
diff --git a/drivers/gpu/drm/bridge/dw-hdmi.c b/drivers/gpu/drm/bridge/dw-hdmi.c
index c9d9412..70b1f7d 100644
--- a/drivers/gpu/drm/bridge/dw-hdmi.c
+++ b/drivers/gpu/drm/bridge/dw-hdmi.c
@@ -1476,15 +1476,6 @@ dw_hdmi_connector_mode_valid(struct drm_connector *connector,
return mode_status;
}
-static struct drm_encoder *dw_hdmi_connector_best_encoder(struct drm_connector
- *connector)
-{
- struct dw_hdmi *hdmi = container_of(connector, struct dw_hdmi,
- connector);
-
- return hdmi->encoder;
-}
-
static void dw_hdmi_connector_destroy(struct drm_connector *connector)
{
drm_connector_unregister(connector);
@@ -1525,7 +1516,7 @@ static const struct drm_connector_funcs dw_hdmi_atomic_connector_funcs = {
static const struct drm_connector_helper_funcs dw_hdmi_connector_helper_funcs = {
.get_modes = dw_hdmi_connector_get_modes,
.mode_valid = dw_hdmi_connector_mode_valid,
- .best_encoder = dw_hdmi_connector_best_encoder,
+ .best_encoder = drm_atomic_helper_best_encoder,
};
static const struct drm_bridge_funcs dw_hdmi_bridge_funcs = {
--
2.7.4
^ permalink raw reply related
* [PATCH v2 19/20] drm/bridge: ps8622: Rely on the default ->best_encoder() behavior
From: Boris Brezillon @ 2016-06-07 11:48 UTC (permalink / raw)
To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
Cc: Krzysztof Kozlowski, Heiko Stuebner, Stefan Agner, virtualization,
Eric Anholt, Thierry Reding, Laurent Pinchart, Benjamin Gaignard,
Alexandre Courbot, linux-samsung-soc, Joonyoung Shim,
Boris Brezillon, Alexey Brodkin, Kyungmin Park, linux-rockchip,
Chen-Yu Tsai, Kukjin Kim, linux-tegra, Stephen Warren,
linux-arm-msm, intel-gfx, Jani Nikula, Inki Dae
In-Reply-To: <1465300095-16971-1-git-send-email-boris.brezillon@free-electrons.com>
We have a 1:1 relationship between connectors and encoders, and the driver
is relying on the atomic helpers: we can drop the custom ->best_encoder(),
and let the core call drm_atomic_helper_best_encoder() for us.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
drivers/gpu/drm/bridge/parade-ps8622.c | 10 ----------
1 file changed, 10 deletions(-)
diff --git a/drivers/gpu/drm/bridge/parade-ps8622.c b/drivers/gpu/drm/bridge/parade-ps8622.c
index be881e9..5cd8dd7 100644
--- a/drivers/gpu/drm/bridge/parade-ps8622.c
+++ b/drivers/gpu/drm/bridge/parade-ps8622.c
@@ -474,18 +474,8 @@ static int ps8622_get_modes(struct drm_connector *connector)
return drm_panel_get_modes(ps8622->panel);
}
-static struct drm_encoder *ps8622_best_encoder(struct drm_connector *connector)
-{
- struct ps8622_bridge *ps8622;
-
- ps8622 = connector_to_ps8622(connector);
-
- return ps8622->bridge.encoder;
-}
-
static const struct drm_connector_helper_funcs ps8622_connector_helper_funcs = {
.get_modes = ps8622_get_modes,
- .best_encoder = ps8622_best_encoder,
};
static enum drm_connector_status ps8622_detect(struct drm_connector *connector,
--
2.7.4
^ permalink raw reply related
* [PATCH v2 18/20] drm/bridge: ptn3460: Rely on the default ->best_encoder() behavior
From: Boris Brezillon @ 2016-06-07 11:48 UTC (permalink / raw)
To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
Cc: Krzysztof Kozlowski, Heiko Stuebner, Stefan Agner, virtualization,
Eric Anholt, Thierry Reding, Laurent Pinchart, Benjamin Gaignard,
Alexandre Courbot, linux-samsung-soc, Joonyoung Shim,
Boris Brezillon, Alexey Brodkin, Kyungmin Park, linux-rockchip,
Chen-Yu Tsai, Kukjin Kim, linux-tegra, Stephen Warren,
linux-arm-msm, intel-gfx, Jani Nikula, Inki Dae
In-Reply-To: <1465300095-16971-1-git-send-email-boris.brezillon@free-electrons.com>
We have a 1:1 relationship between connectors and encoders, and the driver
is relying on the atomic helpers: we can drop the custom ->best_encoder(),
and let the core call drm_atomic_helper_best_encoder() for us.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
drivers/gpu/drm/bridge/nxp-ptn3460.c | 8 --------
1 file changed, 8 deletions(-)
diff --git a/drivers/gpu/drm/bridge/nxp-ptn3460.c b/drivers/gpu/drm/bridge/nxp-ptn3460.c
index 7ecd59f..93f3dac 100644
--- a/drivers/gpu/drm/bridge/nxp-ptn3460.c
+++ b/drivers/gpu/drm/bridge/nxp-ptn3460.c
@@ -235,16 +235,8 @@ out:
return num_modes;
}
-static struct drm_encoder *ptn3460_best_encoder(struct drm_connector *connector)
-{
- struct ptn3460_bridge *ptn_bridge = connector_to_ptn3460(connector);
-
- return ptn_bridge->bridge.encoder;
-}
-
static const struct drm_connector_helper_funcs ptn3460_connector_helper_funcs = {
.get_modes = ptn3460_get_modes,
- .best_encoder = ptn3460_best_encoder,
};
static enum drm_connector_status ptn3460_detect(struct drm_connector *connector,
--
2.7.4
^ permalink raw reply related
* [PATCH v2 17/20] drm/bridge: anx78xx: Rely on the default ->best_encoder() behavior
From: Boris Brezillon @ 2016-06-07 11:48 UTC (permalink / raw)
To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
Cc: Krzysztof Kozlowski, Heiko Stuebner, Stefan Agner, virtualization,
Eric Anholt, Thierry Reding, Laurent Pinchart, Benjamin Gaignard,
Alexandre Courbot, linux-samsung-soc, Joonyoung Shim,
Boris Brezillon, Alexey Brodkin, Kyungmin Park, linux-rockchip,
Chen-Yu Tsai, Kukjin Kim, linux-tegra, Stephen Warren,
linux-arm-msm, intel-gfx, Jani Nikula, Inki Dae
In-Reply-To: <1465300095-16971-1-git-send-email-boris.brezillon@free-electrons.com>
We have a 1:1 relationship between connectors and encoders, and the driver
is relying on the atomic helpers: we can drop the custom ->best_encoder(),
and let the core call drm_atomic_helper_best_encoder() for us.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
drivers/gpu/drm/bridge/analogix-anx78xx.c | 8 --------
1 file changed, 8 deletions(-)
diff --git a/drivers/gpu/drm/bridge/analogix-anx78xx.c b/drivers/gpu/drm/bridge/analogix-anx78xx.c
index d087b05..f9f03bc 100644
--- a/drivers/gpu/drm/bridge/analogix-anx78xx.c
+++ b/drivers/gpu/drm/bridge/analogix-anx78xx.c
@@ -986,16 +986,8 @@ unlock:
return num_modes;
}
-static struct drm_encoder *anx78xx_best_encoder(struct drm_connector *connector)
-{
- struct anx78xx *anx78xx = connector_to_anx78xx(connector);
-
- return anx78xx->bridge.encoder;
-}
-
static const struct drm_connector_helper_funcs anx78xx_connector_helper_funcs = {
.get_modes = anx78xx_get_modes,
- .best_encoder = anx78xx_best_encoder,
};
static enum drm_connector_status anx78xx_detect(struct drm_connector *connector,
--
2.7.4
^ permalink raw reply related
* [PATCH v2 16/20] drm: omap: Rely on the default ->best_encoder() behavior
From: Boris Brezillon @ 2016-06-07 11:48 UTC (permalink / raw)
To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
Cc: Krzysztof Kozlowski, Heiko Stuebner, Stefan Agner, virtualization,
Eric Anholt, Thierry Reding, Laurent Pinchart, Benjamin Gaignard,
Alexandre Courbot, linux-samsung-soc, Joonyoung Shim,
Boris Brezillon, Alexey Brodkin, Kyungmin Park, linux-rockchip,
Chen-Yu Tsai, Kukjin Kim, linux-tegra, Stephen Warren,
linux-arm-msm, intel-gfx, Jani Nikula, Inki Dae
In-Reply-To: <1465300095-16971-1-git-send-email-boris.brezillon@free-electrons.com>
We have a 1:1 relationship between connectors and encoders and the
driver is relying on the atomic helpers: we can drop the custom
->best_encoder() implementation and let the core call
drm_atomic_helper_best_encoder() for us.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
drivers/gpu/drm/omapdrm/omap_connector.c | 10 ----------
1 file changed, 10 deletions(-)
diff --git a/drivers/gpu/drm/omapdrm/omap_connector.c b/drivers/gpu/drm/omapdrm/omap_connector.c
index ce2d67b..137fe69 100644
--- a/drivers/gpu/drm/omapdrm/omap_connector.c
+++ b/drivers/gpu/drm/omapdrm/omap_connector.c
@@ -32,7 +32,6 @@
struct omap_connector {
struct drm_connector base;
struct omap_dss_device *dssdev;
- struct drm_encoder *encoder;
bool hdmi_mode;
};
@@ -256,13 +255,6 @@ static int omap_connector_mode_valid(struct drm_connector *connector,
return ret;
}
-struct drm_encoder *omap_connector_attached_encoder(
- struct drm_connector *connector)
-{
- struct omap_connector *omap_connector = to_omap_connector(connector);
- return omap_connector->encoder;
-}
-
static const struct drm_connector_funcs omap_connector_funcs = {
.dpms = drm_atomic_helper_connector_dpms,
.reset = drm_atomic_helper_connector_reset,
@@ -276,7 +268,6 @@ static const struct drm_connector_funcs omap_connector_funcs = {
static const struct drm_connector_helper_funcs omap_connector_helper_funcs = {
.get_modes = omap_connector_get_modes,
.mode_valid = omap_connector_mode_valid,
- .best_encoder = omap_connector_attached_encoder,
};
/* initialize connector */
@@ -296,7 +287,6 @@ struct drm_connector *omap_connector_init(struct drm_device *dev,
goto fail;
omap_connector->dssdev = dssdev;
- omap_connector->encoder = encoder;
connector = &omap_connector->base;
--
2.7.4
^ permalink raw reply related
* [PATCH v2 15/20] drm: virtgpu: Rely on the default ->best_encoder() behavior
From: Boris Brezillon @ 2016-06-07 11:48 UTC (permalink / raw)
To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
Cc: Krzysztof Kozlowski, Heiko Stuebner, Stefan Agner, virtualization,
Eric Anholt, Thierry Reding, Laurent Pinchart, Benjamin Gaignard,
Alexandre Courbot, linux-samsung-soc, Joonyoung Shim,
Boris Brezillon, Alexey Brodkin, Kyungmin Park, linux-rockchip,
Chen-Yu Tsai, Kukjin Kim, linux-tegra, Stephen Warren,
linux-arm-msm, intel-gfx, Jani Nikula, Inki Dae
In-Reply-To: <1465300095-16971-1-git-send-email-boris.brezillon@free-electrons.com>
The virtgpu output exposes a 1:1 relationship between connectors and
encoders and the driver is relying on the atomic helpers: we can drop
the custom ->best_encoder() implementation and let the core call
drm_atomic_helper_best_encoder() for us.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
drivers/gpu/drm/virtio/virtgpu_display.c | 10 ----------
1 file changed, 10 deletions(-)
diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c b/drivers/gpu/drm/virtio/virtgpu_display.c
index d4305da..4d41dcb 100644
--- a/drivers/gpu/drm/virtio/virtgpu_display.c
+++ b/drivers/gpu/drm/virtio/virtgpu_display.c
@@ -341,15 +341,6 @@ static int virtio_gpu_conn_mode_valid(struct drm_connector *connector,
return MODE_BAD;
}
-static struct drm_encoder*
-virtio_gpu_best_encoder(struct drm_connector *connector)
-{
- struct virtio_gpu_output *virtio_gpu_output =
- drm_connector_to_virtio_gpu_output(connector);
-
- return &virtio_gpu_output->enc;
-}
-
static const struct drm_encoder_helper_funcs virtio_gpu_enc_helper_funcs = {
.mode_set = virtio_gpu_enc_mode_set,
.enable = virtio_gpu_enc_enable,
@@ -359,7 +350,6 @@ static const struct drm_encoder_helper_funcs virtio_gpu_enc_helper_funcs = {
static const struct drm_connector_helper_funcs virtio_gpu_conn_helper_funcs = {
.get_modes = virtio_gpu_conn_get_modes,
.mode_valid = virtio_gpu_conn_mode_valid,
- .best_encoder = virtio_gpu_best_encoder,
};
static enum drm_connector_status virtio_gpu_conn_detect(
--
2.7.4
^ permalink raw reply related
* [PATCH v2 14/20] drm: vc4: Rely on the default ->best_encoder() behavior
From: Boris Brezillon @ 2016-06-07 11:48 UTC (permalink / raw)
To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
Cc: Krzysztof Kozlowski, Heiko Stuebner, Stefan Agner, virtualization,
Eric Anholt, Thierry Reding, Laurent Pinchart, Benjamin Gaignard,
Alexandre Courbot, linux-samsung-soc, Joonyoung Shim,
Boris Brezillon, Alexey Brodkin, Kyungmin Park, linux-rockchip,
Chen-Yu Tsai, Kukjin Kim, linux-tegra, Stephen Warren,
linux-arm-msm, intel-gfx, Jani Nikula, Inki Dae
In-Reply-To: <1465300095-16971-1-git-send-email-boris.brezillon@free-electrons.com>
All outputs have a 1:1 relationship between connectors and encoders and
the driver is relying on the atomic helpers: we can drop the custom
->best_encoder() implementations and let the core call
drm_atomic_helper_best_encoder() for us.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
drivers/gpu/drm/vc4/vc4_dpi.c | 9 ---------
drivers/gpu/drm/vc4/vc4_hdmi.c | 9 ---------
2 files changed, 18 deletions(-)
diff --git a/drivers/gpu/drm/vc4/vc4_dpi.c b/drivers/gpu/drm/vc4/vc4_dpi.c
index 9817dbf..dba1114 100644
--- a/drivers/gpu/drm/vc4/vc4_dpi.c
+++ b/drivers/gpu/drm/vc4/vc4_dpi.c
@@ -208,14 +208,6 @@ static int vc4_dpi_connector_get_modes(struct drm_connector *connector)
return 0;
}
-static struct drm_encoder *
-vc4_dpi_connector_best_encoder(struct drm_connector *connector)
-{
- struct vc4_dpi_connector *dpi_connector =
- to_vc4_dpi_connector(connector);
- return dpi_connector->encoder;
-}
-
static const struct drm_connector_funcs vc4_dpi_connector_funcs = {
.dpms = drm_atomic_helper_connector_dpms,
.detect = vc4_dpi_connector_detect,
@@ -228,7 +220,6 @@ static const struct drm_connector_funcs vc4_dpi_connector_funcs = {
static const struct drm_connector_helper_funcs vc4_dpi_connector_helper_funcs = {
.get_modes = vc4_dpi_connector_get_modes,
- .best_encoder = vc4_dpi_connector_best_encoder,
};
static struct drm_connector *vc4_dpi_connector_init(struct drm_device *dev,
diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c
index fd2644d..68df91c 100644
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -208,14 +208,6 @@ static int vc4_hdmi_connector_get_modes(struct drm_connector *connector)
return ret;
}
-static struct drm_encoder *
-vc4_hdmi_connector_best_encoder(struct drm_connector *connector)
-{
- struct vc4_hdmi_connector *hdmi_connector =
- to_vc4_hdmi_connector(connector);
- return hdmi_connector->encoder;
-}
-
static const struct drm_connector_funcs vc4_hdmi_connector_funcs = {
.dpms = drm_atomic_helper_connector_dpms,
.detect = vc4_hdmi_connector_detect,
@@ -228,7 +220,6 @@ static const struct drm_connector_funcs vc4_hdmi_connector_funcs = {
static const struct drm_connector_helper_funcs vc4_hdmi_connector_helper_funcs = {
.get_modes = vc4_hdmi_connector_get_modes,
- .best_encoder = vc4_hdmi_connector_best_encoder,
};
static struct drm_connector *vc4_hdmi_connector_init(struct drm_device *dev,
--
2.7.4
^ permalink raw reply related
* [PATCH v2 13/20] drm: tegra: Rely on the default ->best_encoder() behavior
From: Boris Brezillon @ 2016-06-07 11:48 UTC (permalink / raw)
To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
Cc: Krzysztof Kozlowski, Heiko Stuebner, Stefan Agner, virtualization,
Eric Anholt, Thierry Reding, Laurent Pinchart, Benjamin Gaignard,
Alexandre Courbot, linux-samsung-soc, Joonyoung Shim,
Boris Brezillon, Alexey Brodkin, Kyungmin Park, linux-rockchip,
Chen-Yu Tsai, Kukjin Kim, linux-tegra, Stephen Warren,
linux-arm-msm, intel-gfx, Jani Nikula, Inki Dae
In-Reply-To: <1465300095-16971-1-git-send-email-boris.brezillon@free-electrons.com>
All outputs have a 1:1 relationship between connectors and encoders
and the driver is relying on the atomic helpers: we can drop the custom
->best_encoder() implementation and let the core call
drm_atomic_helper_best_encoder() for us.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
drivers/gpu/drm/tegra/drm.h | 2 --
drivers/gpu/drm/tegra/dsi.c | 1 -
drivers/gpu/drm/tegra/hdmi.c | 1 -
drivers/gpu/drm/tegra/output.c | 8 --------
drivers/gpu/drm/tegra/rgb.c | 1 -
drivers/gpu/drm/tegra/sor.c | 1 -
6 files changed, 14 deletions(-)
diff --git a/drivers/gpu/drm/tegra/drm.h b/drivers/gpu/drm/tegra/drm.h
index f52d6cb2..0ddcce1 100644
--- a/drivers/gpu/drm/tegra/drm.h
+++ b/drivers/gpu/drm/tegra/drm.h
@@ -239,8 +239,6 @@ int tegra_output_init(struct drm_device *drm, struct tegra_output *output);
void tegra_output_exit(struct tegra_output *output);
int tegra_output_connector_get_modes(struct drm_connector *connector);
-struct drm_encoder *
-tegra_output_connector_best_encoder(struct drm_connector *connector);
enum drm_connector_status
tegra_output_connector_detect(struct drm_connector *connector, bool force);
void tegra_output_connector_destroy(struct drm_connector *connector);
diff --git a/drivers/gpu/drm/tegra/dsi.c b/drivers/gpu/drm/tegra/dsi.c
index d1239eb..099cccb 100644
--- a/drivers/gpu/drm/tegra/dsi.c
+++ b/drivers/gpu/drm/tegra/dsi.c
@@ -794,7 +794,6 @@ tegra_dsi_connector_mode_valid(struct drm_connector *connector,
static const struct drm_connector_helper_funcs tegra_dsi_connector_helper_funcs = {
.get_modes = tegra_output_connector_get_modes,
.mode_valid = tegra_dsi_connector_mode_valid,
- .best_encoder = tegra_output_connector_best_encoder,
};
static const struct drm_encoder_funcs tegra_dsi_encoder_funcs = {
diff --git a/drivers/gpu/drm/tegra/hdmi.c b/drivers/gpu/drm/tegra/hdmi.c
index b7ef492..2fdb879 100644
--- a/drivers/gpu/drm/tegra/hdmi.c
+++ b/drivers/gpu/drm/tegra/hdmi.c
@@ -806,7 +806,6 @@ static const struct drm_connector_helper_funcs
tegra_hdmi_connector_helper_funcs = {
.get_modes = tegra_output_connector_get_modes,
.mode_valid = tegra_hdmi_connector_mode_valid,
- .best_encoder = tegra_output_connector_best_encoder,
};
static const struct drm_encoder_funcs tegra_hdmi_encoder_funcs = {
diff --git a/drivers/gpu/drm/tegra/output.c b/drivers/gpu/drm/tegra/output.c
index 46664b6..1480f6a 100644
--- a/drivers/gpu/drm/tegra/output.c
+++ b/drivers/gpu/drm/tegra/output.c
@@ -42,14 +42,6 @@ int tegra_output_connector_get_modes(struct drm_connector *connector)
return err;
}
-struct drm_encoder *
-tegra_output_connector_best_encoder(struct drm_connector *connector)
-{
- struct tegra_output *output = connector_to_output(connector);
-
- return &output->encoder;
-}
-
enum drm_connector_status
tegra_output_connector_detect(struct drm_connector *connector, bool force)
{
diff --git a/drivers/gpu/drm/tegra/rgb.c b/drivers/gpu/drm/tegra/rgb.c
index e246334..a131b44 100644
--- a/drivers/gpu/drm/tegra/rgb.c
+++ b/drivers/gpu/drm/tegra/rgb.c
@@ -112,7 +112,6 @@ tegra_rgb_connector_mode_valid(struct drm_connector *connector,
static const struct drm_connector_helper_funcs tegra_rgb_connector_helper_funcs = {
.get_modes = tegra_output_connector_get_modes,
.mode_valid = tegra_rgb_connector_mode_valid,
- .best_encoder = tegra_output_connector_best_encoder,
};
static const struct drm_encoder_funcs tegra_rgb_encoder_funcs = {
diff --git a/drivers/gpu/drm/tegra/sor.c b/drivers/gpu/drm/tegra/sor.c
index 757c6e8..34958d7 100644
--- a/drivers/gpu/drm/tegra/sor.c
+++ b/drivers/gpu/drm/tegra/sor.c
@@ -1087,7 +1087,6 @@ tegra_sor_connector_mode_valid(struct drm_connector *connector,
static const struct drm_connector_helper_funcs tegra_sor_connector_helper_funcs = {
.get_modes = tegra_sor_connector_get_modes,
.mode_valid = tegra_sor_connector_mode_valid,
- .best_encoder = tegra_output_connector_best_encoder,
};
static const struct drm_encoder_funcs tegra_sor_encoder_funcs = {
--
2.7.4
^ permalink raw reply related
* [PATCH v2 12/20] drm: sun4i: Rely on the default ->best_encoder() behavior
From: Boris Brezillon @ 2016-06-07 11:48 UTC (permalink / raw)
To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
Cc: Krzysztof Kozlowski, Heiko Stuebner, Stefan Agner, virtualization,
Eric Anholt, Thierry Reding, Laurent Pinchart, Benjamin Gaignard,
Alexandre Courbot, linux-samsung-soc, Joonyoung Shim,
Boris Brezillon, Alexey Brodkin, Kyungmin Park, linux-rockchip,
Chen-Yu Tsai, Kukjin Kim, linux-tegra, Stephen Warren,
linux-arm-msm, intel-gfx, Jani Nikula, Inki Dae
In-Reply-To: <1465300095-16971-1-git-send-email-boris.brezillon@free-electrons.com>
All outputs have a 1:1 relationship between connectors and encoders
and the driver is relying on the atomic helpers: we can drop the custom
->best_encoder() implementations and let the core call
drm_atomic_helper_best_encoder() for us.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
drivers/gpu/drm/sun4i/sun4i_rgb.c | 10 ----------
drivers/gpu/drm/sun4i/sun4i_tv.c | 9 ---------
2 files changed, 19 deletions(-)
diff --git a/drivers/gpu/drm/sun4i/sun4i_rgb.c b/drivers/gpu/drm/sun4i/sun4i_rgb.c
index ab64948..442cfe2 100644
--- a/drivers/gpu/drm/sun4i/sun4i_rgb.c
+++ b/drivers/gpu/drm/sun4i/sun4i_rgb.c
@@ -90,19 +90,9 @@ static int sun4i_rgb_mode_valid(struct drm_connector *connector,
return MODE_OK;
}
-static struct drm_encoder *
-sun4i_rgb_best_encoder(struct drm_connector *connector)
-{
- struct sun4i_rgb *rgb =
- drm_connector_to_sun4i_rgb(connector);
-
- return &rgb->encoder;
-}
-
static struct drm_connector_helper_funcs sun4i_rgb_con_helper_funcs = {
.get_modes = sun4i_rgb_get_modes,
.mode_valid = sun4i_rgb_mode_valid,
- .best_encoder = sun4i_rgb_best_encoder,
};
static enum drm_connector_status
diff --git a/drivers/gpu/drm/sun4i/sun4i_tv.c b/drivers/gpu/drm/sun4i/sun4i_tv.c
index bc047f9..b841478 100644
--- a/drivers/gpu/drm/sun4i/sun4i_tv.c
+++ b/drivers/gpu/drm/sun4i/sun4i_tv.c
@@ -526,18 +526,9 @@ static int sun4i_tv_comp_mode_valid(struct drm_connector *connector,
return MODE_OK;
}
-static struct drm_encoder *
-sun4i_tv_comp_best_encoder(struct drm_connector *connector)
-{
- struct sun4i_tv *tv = drm_connector_to_sun4i_tv(connector);
-
- return &tv->encoder;
-}
-
static struct drm_connector_helper_funcs sun4i_tv_comp_connector_helper_funcs = {
.get_modes = sun4i_tv_comp_get_modes,
.mode_valid = sun4i_tv_comp_mode_valid,
- .best_encoder = sun4i_tv_comp_best_encoder,
};
static enum drm_connector_status
--
2.7.4
^ permalink raw reply related
* [PATCH v2 11/20] drm: sti: Rely on the default ->best_encoder() behavior
From: Boris Brezillon @ 2016-06-07 11:48 UTC (permalink / raw)
To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
Cc: Krzysztof Kozlowski, Heiko Stuebner, Stefan Agner, virtualization,
Eric Anholt, Thierry Reding, Laurent Pinchart, Benjamin Gaignard,
Alexandre Courbot, linux-samsung-soc, Joonyoung Shim,
Boris Brezillon, Alexey Brodkin, Kyungmin Park, linux-rockchip,
Chen-Yu Tsai, Kukjin Kim, linux-tegra, Stephen Warren,
linux-arm-msm, intel-gfx, Jani Nikula, Inki Dae
In-Reply-To: <1465300095-16971-1-git-send-email-boris.brezillon@free-electrons.com>
All outputs have a 1:1 relationship between connectors and encoders
and the driver is relying on the atomic helpers: we can drop the custom
->best_encoder() implementations and let the core call
drm_atomic_helper_best_encoder() for us.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
drivers/gpu/drm/sti/sti_dvo.c | 10 ----------
drivers/gpu/drm/sti/sti_hda.c | 10 ----------
drivers/gpu/drm/sti/sti_hdmi.c | 10 ----------
3 files changed, 30 deletions(-)
diff --git a/drivers/gpu/drm/sti/sti_dvo.c b/drivers/gpu/drm/sti/sti_dvo.c
index 25f7663..d5627d1 100644
--- a/drivers/gpu/drm/sti/sti_dvo.c
+++ b/drivers/gpu/drm/sti/sti_dvo.c
@@ -384,20 +384,10 @@ static int sti_dvo_connector_mode_valid(struct drm_connector *connector,
return MODE_OK;
}
-struct drm_encoder *sti_dvo_best_encoder(struct drm_connector *connector)
-{
- struct sti_dvo_connector *dvo_connector
- = to_sti_dvo_connector(connector);
-
- /* Best encoder is the one associated during connector creation */
- return dvo_connector->encoder;
-}
-
static const
struct drm_connector_helper_funcs sti_dvo_connector_helper_funcs = {
.get_modes = sti_dvo_connector_get_modes,
.mode_valid = sti_dvo_connector_mode_valid,
- .best_encoder = sti_dvo_best_encoder,
};
static enum drm_connector_status
diff --git a/drivers/gpu/drm/sti/sti_hda.c b/drivers/gpu/drm/sti/sti_hda.c
index f7d3464..c4649f5 100644
--- a/drivers/gpu/drm/sti/sti_hda.c
+++ b/drivers/gpu/drm/sti/sti_hda.c
@@ -676,20 +676,10 @@ static int sti_hda_connector_mode_valid(struct drm_connector *connector,
return MODE_OK;
}
-struct drm_encoder *sti_hda_best_encoder(struct drm_connector *connector)
-{
- struct sti_hda_connector *hda_connector
- = to_sti_hda_connector(connector);
-
- /* Best encoder is the one associated during connector creation */
- return hda_connector->encoder;
-}
-
static const
struct drm_connector_helper_funcs sti_hda_connector_helper_funcs = {
.get_modes = sti_hda_connector_get_modes,
.mode_valid = sti_hda_connector_mode_valid,
- .best_encoder = sti_hda_best_encoder,
};
static enum drm_connector_status
diff --git a/drivers/gpu/drm/sti/sti_hdmi.c b/drivers/gpu/drm/sti/sti_hdmi.c
index 6ef0715..dc9ab6e 100644
--- a/drivers/gpu/drm/sti/sti_hdmi.c
+++ b/drivers/gpu/drm/sti/sti_hdmi.c
@@ -897,20 +897,10 @@ static int sti_hdmi_connector_mode_valid(struct drm_connector *connector,
return MODE_OK;
}
-struct drm_encoder *sti_hdmi_best_encoder(struct drm_connector *connector)
-{
- struct sti_hdmi_connector *hdmi_connector
- = to_sti_hdmi_connector(connector);
-
- /* Best encoder is the one associated during connector creation */
- return hdmi_connector->encoder;
-}
-
static const
struct drm_connector_helper_funcs sti_hdmi_connector_helper_funcs = {
.get_modes = sti_hdmi_connector_get_modes,
.mode_valid = sti_hdmi_connector_mode_valid,
- .best_encoder = sti_hdmi_best_encoder,
};
/* get detection status of display device */
--
2.7.4
^ permalink raw reply related
* [PATCH v2 10/20] drm: rockchip: Rely on the default ->best_encoder() behavior
From: Boris Brezillon @ 2016-06-07 11:48 UTC (permalink / raw)
To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
Cc: Krzysztof Kozlowski, Heiko Stuebner, Stefan Agner, virtualization,
Eric Anholt, Thierry Reding, Laurent Pinchart, Benjamin Gaignard,
Alexandre Courbot, linux-samsung-soc, Joonyoung Shim,
Boris Brezillon, Alexey Brodkin, Kyungmin Park, linux-rockchip,
Chen-Yu Tsai, Kukjin Kim, linux-tegra, Stephen Warren,
linux-arm-msm, intel-gfx, Jani Nikula, Inki Dae
In-Reply-To: <1465300095-16971-1-git-send-email-boris.brezillon@free-electrons.com>
All outputs have a 1:1 relationship between connectors and encoders
and the driver is relying on the atomic helpers: we can drop the custom
->best_encoder() implementations and let the core call
drm_atomic_helper_best_encoder() for us.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Acked-by: Mark Yao <mark.yao@rock-chips.com>
---
drivers/gpu/drm/rockchip/dw-mipi-dsi.c | 9 ---------
drivers/gpu/drm/rockchip/inno_hdmi.c | 9 ---------
2 files changed, 18 deletions(-)
diff --git a/drivers/gpu/drm/rockchip/dw-mipi-dsi.c b/drivers/gpu/drm/rockchip/dw-mipi-dsi.c
index dedc65b..ca22e5e 100644
--- a/drivers/gpu/drm/rockchip/dw-mipi-dsi.c
+++ b/drivers/gpu/drm/rockchip/dw-mipi-dsi.c
@@ -964,18 +964,9 @@ static enum drm_mode_status dw_mipi_dsi_mode_valid(
return mode_status;
}
-static struct drm_encoder *dw_mipi_dsi_connector_best_encoder(
- struct drm_connector *connector)
-{
- struct dw_mipi_dsi *dsi = con_to_dsi(connector);
-
- return &dsi->encoder;
-}
-
static struct drm_connector_helper_funcs dw_mipi_dsi_connector_helper_funcs = {
.get_modes = dw_mipi_dsi_connector_get_modes,
.mode_valid = dw_mipi_dsi_mode_valid,
- .best_encoder = dw_mipi_dsi_connector_best_encoder,
};
static enum drm_connector_status
diff --git a/drivers/gpu/drm/rockchip/inno_hdmi.c b/drivers/gpu/drm/rockchip/inno_hdmi.c
index f8b4feb..006260d 100644
--- a/drivers/gpu/drm/rockchip/inno_hdmi.c
+++ b/drivers/gpu/drm/rockchip/inno_hdmi.c
@@ -579,14 +579,6 @@ inno_hdmi_connector_mode_valid(struct drm_connector *connector,
return MODE_OK;
}
-static struct drm_encoder *
-inno_hdmi_connector_best_encoder(struct drm_connector *connector)
-{
- struct inno_hdmi *hdmi = to_inno_hdmi(connector);
-
- return &hdmi->encoder;
-}
-
static int
inno_hdmi_probe_single_connector_modes(struct drm_connector *connector,
uint32_t maxX, uint32_t maxY)
@@ -613,7 +605,6 @@ static struct drm_connector_funcs inno_hdmi_connector_funcs = {
static struct drm_connector_helper_funcs inno_hdmi_connector_helper_funcs = {
.get_modes = inno_hdmi_connector_get_modes,
.mode_valid = inno_hdmi_connector_mode_valid,
- .best_encoder = inno_hdmi_connector_best_encoder,
};
static int inno_hdmi_register(struct drm_device *drm, struct inno_hdmi *hdmi)
--
2.7.4
^ permalink raw reply related
* [PATCH v2 09/20] drm: rcar-du: Rely on the default ->best_encoder() behavior
From: Boris Brezillon @ 2016-06-07 11:48 UTC (permalink / raw)
To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
Cc: Krzysztof Kozlowski, Heiko Stuebner, Stefan Agner, virtualization,
Eric Anholt, Thierry Reding, Laurent Pinchart, Benjamin Gaignard,
Alexandre Courbot, linux-samsung-soc, Joonyoung Shim,
Boris Brezillon, Alexey Brodkin, Kyungmin Park, linux-rockchip,
Chen-Yu Tsai, Kukjin Kim, linux-tegra, Stephen Warren,
linux-arm-msm, intel-gfx, Jani Nikula, Inki Dae
In-Reply-To: <1465300095-16971-1-git-send-email-boris.brezillon@free-electrons.com>
All outputs have a 1:1 relationship between connectors and encoders,
and the driver is relying on the atomic helpers: we can drop the custom
->best_encoder() implementations and let the core call
drm_atomic_helper_best_encoder() for us.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
drivers/gpu/drm/rcar-du/rcar_du_encoder.c | 12 ------------
drivers/gpu/drm/rcar-du/rcar_du_encoder.h | 3 ---
drivers/gpu/drm/rcar-du/rcar_du_hdmicon.c | 1 -
drivers/gpu/drm/rcar-du/rcar_du_lvdscon.c | 1 -
drivers/gpu/drm/rcar-du/rcar_du_vgacon.c | 3 ---
5 files changed, 20 deletions(-)
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_encoder.c b/drivers/gpu/drm/rcar-du/rcar_du_encoder.c
index 4e939e4..55149e9 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_encoder.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_encoder.c
@@ -27,18 +27,6 @@
#include "rcar_du_vgacon.h"
/* -----------------------------------------------------------------------------
- * Common connector functions
- */
-
-struct drm_encoder *
-rcar_du_connector_best_encoder(struct drm_connector *connector)
-{
- struct rcar_du_connector *rcon = to_rcar_connector(connector);
-
- return rcar_encoder_to_drm_encoder(rcon->encoder);
-}
-
-/* -----------------------------------------------------------------------------
* Encoder
*/
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_encoder.h b/drivers/gpu/drm/rcar-du/rcar_du_encoder.h
index 719b6f2a..a8669c3 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_encoder.h
+++ b/drivers/gpu/drm/rcar-du/rcar_du_encoder.h
@@ -49,9 +49,6 @@ struct rcar_du_connector {
#define to_rcar_connector(c) \
container_of(c, struct rcar_du_connector, connector)
-struct drm_encoder *
-rcar_du_connector_best_encoder(struct drm_connector *connector);
-
int rcar_du_encoder_init(struct rcar_du_device *rcdu,
enum rcar_du_encoder_type type,
enum rcar_du_output output,
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_hdmicon.c b/drivers/gpu/drm/rcar-du/rcar_du_hdmicon.c
index 6c92714..612b4d5 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_hdmicon.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_hdmicon.c
@@ -52,7 +52,6 @@ static int rcar_du_hdmi_connector_mode_valid(struct drm_connector *connector,
static const struct drm_connector_helper_funcs connector_helper_funcs = {
.get_modes = rcar_du_hdmi_connector_get_modes,
.mode_valid = rcar_du_hdmi_connector_mode_valid,
- .best_encoder = rcar_du_connector_best_encoder,
};
static enum drm_connector_status
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_lvdscon.c b/drivers/gpu/drm/rcar-du/rcar_du_lvdscon.c
index e905f5d..6afd0af 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_lvdscon.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_lvdscon.c
@@ -59,7 +59,6 @@ static int rcar_du_lvds_connector_get_modes(struct drm_connector *connector)
static const struct drm_connector_helper_funcs connector_helper_funcs = {
.get_modes = rcar_du_lvds_connector_get_modes,
- .best_encoder = rcar_du_connector_best_encoder,
};
static enum drm_connector_status
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_vgacon.c b/drivers/gpu/drm/rcar-du/rcar_du_vgacon.c
index 9d7e5c9..8d6125c 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_vgacon.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_vgacon.c
@@ -28,7 +28,6 @@ static int rcar_du_vga_connector_get_modes(struct drm_connector *connector)
static const struct drm_connector_helper_funcs connector_helper_funcs = {
.get_modes = rcar_du_vga_connector_get_modes,
- .best_encoder = rcar_du_connector_best_encoder,
};
static enum drm_connector_status
@@ -79,7 +78,5 @@ int rcar_du_vga_connector_init(struct rcar_du_device *rcdu,
if (ret < 0)
return ret;
- rcon->encoder = renc;
-
return 0;
}
--
2.7.4
^ permalink raw reply related
* [PATCH v2 08/20] drm: msm: Rely on the default ->best_encoder() behavior where appropriate
From: Boris Brezillon @ 2016-06-07 11:48 UTC (permalink / raw)
To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
Cc: Krzysztof Kozlowski, Heiko Stuebner, Stefan Agner, virtualization,
Eric Anholt, Thierry Reding, Laurent Pinchart, Benjamin Gaignard,
Alexandre Courbot, linux-samsung-soc, Joonyoung Shim,
Boris Brezillon, Alexey Brodkin, Kyungmin Park, linux-rockchip,
Chen-Yu Tsai, Kukjin Kim, linux-tegra, Stephen Warren,
linux-arm-msm, intel-gfx, Jani Nikula, Inki Dae
In-Reply-To: <1465300095-16971-1-git-send-email-boris.brezillon@free-electrons.com>
For all outputs except DSI we have a 1:1 relationship between connectors
and encoders and the driver is relying on the atomic helpers: we can
drop the custom ->best_encoder() and let the core call
drm_atomic_helper_best_encoder() for us.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
drivers/gpu/drm/msm/edp/edp_connector.c | 10 ----------
drivers/gpu/drm/msm/hdmi/hdmi_connector.c | 8 --------
drivers/gpu/drm/msm/mdp/mdp4/mdp4_lvds_connector.c | 9 ---------
3 files changed, 27 deletions(-)
diff --git a/drivers/gpu/drm/msm/edp/edp_connector.c b/drivers/gpu/drm/msm/edp/edp_connector.c
index 72360cd..5960628 100644
--- a/drivers/gpu/drm/msm/edp/edp_connector.c
+++ b/drivers/gpu/drm/msm/edp/edp_connector.c
@@ -91,15 +91,6 @@ static int edp_connector_mode_valid(struct drm_connector *connector,
return MODE_OK;
}
-static struct drm_encoder *
-edp_connector_best_encoder(struct drm_connector *connector)
-{
- struct edp_connector *edp_connector = to_edp_connector(connector);
-
- DBG("");
- return edp_connector->edp->encoder;
-}
-
static const struct drm_connector_funcs edp_connector_funcs = {
.dpms = drm_atomic_helper_connector_dpms,
.detect = edp_connector_detect,
@@ -113,7 +104,6 @@ static const struct drm_connector_funcs edp_connector_funcs = {
static const struct drm_connector_helper_funcs edp_connector_helper_funcs = {
.get_modes = edp_connector_get_modes,
.mode_valid = edp_connector_mode_valid,
- .best_encoder = edp_connector_best_encoder,
};
/* initialize connector */
diff --git a/drivers/gpu/drm/msm/hdmi/hdmi_connector.c b/drivers/gpu/drm/msm/hdmi/hdmi_connector.c
index b15d726..a2515b4 100644
--- a/drivers/gpu/drm/msm/hdmi/hdmi_connector.c
+++ b/drivers/gpu/drm/msm/hdmi/hdmi_connector.c
@@ -406,13 +406,6 @@ static int msm_hdmi_connector_mode_valid(struct drm_connector *connector,
return 0;
}
-static struct drm_encoder *
-msm_hdmi_connector_best_encoder(struct drm_connector *connector)
-{
- struct hdmi_connector *hdmi_connector = to_hdmi_connector(connector);
- return hdmi_connector->hdmi->encoder;
-}
-
static const struct drm_connector_funcs hdmi_connector_funcs = {
.dpms = drm_atomic_helper_connector_dpms,
.detect = hdmi_connector_detect,
@@ -426,7 +419,6 @@ static const struct drm_connector_funcs hdmi_connector_funcs = {
static const struct drm_connector_helper_funcs msm_hdmi_connector_helper_funcs = {
.get_modes = msm_hdmi_connector_get_modes,
.mode_valid = msm_hdmi_connector_mode_valid,
- .best_encoder = msm_hdmi_connector_best_encoder,
};
/* initialize connector */
diff --git a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_lvds_connector.c b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_lvds_connector.c
index 2648cd7..353429b 100644
--- a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_lvds_connector.c
+++ b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_lvds_connector.c
@@ -90,14 +90,6 @@ static int mdp4_lvds_connector_mode_valid(struct drm_connector *connector,
return MODE_OK;
}
-static struct drm_encoder *
-mdp4_lvds_connector_best_encoder(struct drm_connector *connector)
-{
- struct mdp4_lvds_connector *mdp4_lvds_connector =
- to_mdp4_lvds_connector(connector);
- return mdp4_lvds_connector->encoder;
-}
-
static const struct drm_connector_funcs mdp4_lvds_connector_funcs = {
.dpms = drm_atomic_helper_connector_dpms,
.detect = mdp4_lvds_connector_detect,
@@ -111,7 +103,6 @@ static const struct drm_connector_funcs mdp4_lvds_connector_funcs = {
static const struct drm_connector_helper_funcs mdp4_lvds_connector_helper_funcs = {
.get_modes = mdp4_lvds_connector_get_modes,
.mode_valid = mdp4_lvds_connector_mode_valid,
- .best_encoder = mdp4_lvds_connector_best_encoder,
};
/* initialize connector */
--
2.7.4
^ permalink raw reply related
* [PATCH v2 07/20] drm: mediatek: Rely on the default ->best_encoder() behavior
From: Boris Brezillon @ 2016-06-07 11:48 UTC (permalink / raw)
To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
Cc: Krzysztof Kozlowski, Heiko Stuebner, Stefan Agner, virtualization,
Eric Anholt, Thierry Reding, Laurent Pinchart, Benjamin Gaignard,
Alexandre Courbot, linux-samsung-soc, Joonyoung Shim,
Boris Brezillon, Alexey Brodkin, Kyungmin Park, linux-rockchip,
Chen-Yu Tsai, Kukjin Kim, linux-tegra, Stephen Warren,
linux-arm-msm, intel-gfx, Jani Nikula, Inki Dae
In-Reply-To: <1465300095-16971-1-git-send-email-boris.brezillon@free-electrons.com>
We have a 1:1 relationship between connectors and encoders and the
driver is relying on the atomic helpers: we can drop the custom
->best_encoder() implementation and let the core call
drm_atomic_helper_best_encoder() for us.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
drivers/gpu/drm/mediatek/mtk_dsi.c | 9 ---------
1 file changed, 9 deletions(-)
diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c
index 2d808e5..7343ffc 100644
--- a/drivers/gpu/drm/mediatek/mtk_dsi.c
+++ b/drivers/gpu/drm/mediatek/mtk_dsi.c
@@ -575,14 +575,6 @@ static int mtk_dsi_connector_get_modes(struct drm_connector *connector)
return drm_panel_get_modes(dsi->panel);
}
-static struct drm_encoder *mtk_dsi_connector_best_encoder(
- struct drm_connector *connector)
-{
- struct mtk_dsi *dsi = connector_to_dsi(connector);
-
- return &dsi->encoder;
-}
-
static const struct drm_encoder_helper_funcs mtk_dsi_encoder_helper_funcs = {
.mode_fixup = mtk_dsi_encoder_mode_fixup,
.mode_set = mtk_dsi_encoder_mode_set,
@@ -603,7 +595,6 @@ static const struct drm_connector_funcs mtk_dsi_connector_funcs = {
static const struct drm_connector_helper_funcs
mtk_dsi_connector_helper_funcs = {
.get_modes = mtk_dsi_connector_get_modes,
- .best_encoder = mtk_dsi_connector_best_encoder,
};
static int mtk_drm_attach_bridge(struct drm_bridge *bridge,
--
2.7.4
^ permalink raw reply related
* [PATCH v2 06/20] drm: i915: Rely on the default ->best_encoder() behavior where appropriate
From: Boris Brezillon @ 2016-06-07 11:48 UTC (permalink / raw)
To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
Cc: Krzysztof Kozlowski, Heiko Stuebner, Stefan Agner, virtualization,
Eric Anholt, Thierry Reding, Laurent Pinchart, Benjamin Gaignard,
Alexandre Courbot, linux-samsung-soc, Joonyoung Shim,
Boris Brezillon, Alexey Brodkin, Kyungmin Park, linux-rockchip,
Chen-Yu Tsai, Kukjin Kim, linux-tegra, Stephen Warren,
linux-arm-msm, intel-gfx, Jani Nikula, Inki Dae
In-Reply-To: <1465300095-16971-1-git-send-email-boris.brezillon@free-electrons.com>
For all outputs except dp_mst, we have a 1:1 relationship between
connectors and encoders and the driver is relying on the atomic helpers:
we can drop the custom ->best_encoder() implementation and let the core
call drm_atomic_helper_best_encoder() for us.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
drivers/gpu/drm/i915/intel_crt.c | 1 -
drivers/gpu/drm/i915/intel_display.c | 8 --------
drivers/gpu/drm/i915/intel_dp.c | 1 -
drivers/gpu/drm/i915/intel_drv.h | 1 -
drivers/gpu/drm/i915/intel_dsi.c | 1 -
drivers/gpu/drm/i915/intel_dvo.c | 1 -
drivers/gpu/drm/i915/intel_hdmi.c | 1 -
drivers/gpu/drm/i915/intel_lvds.c | 1 -
drivers/gpu/drm/i915/intel_sdvo.c | 1 -
drivers/gpu/drm/i915/intel_tv.c | 1 -
10 files changed, 17 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
index 3fbb6fc..bd0cd68 100644
--- a/drivers/gpu/drm/i915/intel_crt.c
+++ b/drivers/gpu/drm/i915/intel_crt.c
@@ -753,7 +753,6 @@ static const struct drm_connector_funcs intel_crt_connector_funcs = {
static const struct drm_connector_helper_funcs intel_crt_connector_helper_funcs = {
.mode_valid = intel_crt_mode_valid,
.get_modes = intel_crt_get_modes,
- .best_encoder = intel_best_encoder,
};
static const struct drm_encoder_funcs intel_crt_enc_funcs = {
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 2113f40..77026ce 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -16113,14 +16113,6 @@ void intel_modeset_cleanup(struct drm_device *dev)
intel_teardown_gmbus(dev);
}
-/*
- * Return which encoder is currently attached for connector.
- */
-struct drm_encoder *intel_best_encoder(struct drm_connector *connector)
-{
- return &intel_attached_encoder(connector)->base;
-}
-
void intel_connector_attach_encoder(struct intel_connector *connector,
struct intel_encoder *encoder)
{
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index f192f58..21b2833 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -4935,7 +4935,6 @@ static const struct drm_connector_funcs intel_dp_connector_funcs = {
static const struct drm_connector_helper_funcs intel_dp_connector_helper_funcs = {
.get_modes = intel_dp_get_modes,
.mode_valid = intel_dp_mode_valid,
- .best_encoder = intel_best_encoder,
};
static const struct drm_encoder_funcs intel_dp_enc_funcs = {
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index a28b4aa..79a4d6b 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1128,7 +1128,6 @@ struct intel_connector *intel_connector_alloc(void);
bool intel_connector_get_hw_state(struct intel_connector *connector);
void intel_connector_attach_encoder(struct intel_connector *connector,
struct intel_encoder *encoder);
-struct drm_encoder *intel_best_encoder(struct drm_connector *connector);
struct drm_display_mode *intel_crtc_mode_get(struct drm_device *dev,
struct drm_crtc *crtc);
enum pipe intel_get_pipe_from_connector(struct intel_connector *connector);
diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c
index 366ad6c..ec51952 100644
--- a/drivers/gpu/drm/i915/intel_dsi.c
+++ b/drivers/gpu/drm/i915/intel_dsi.c
@@ -1378,7 +1378,6 @@ static const struct drm_encoder_funcs intel_dsi_funcs = {
static const struct drm_connector_helper_funcs intel_dsi_connector_helper_funcs = {
.get_modes = intel_dsi_get_modes,
.mode_valid = intel_dsi_mode_valid,
- .best_encoder = intel_best_encoder,
};
static const struct drm_connector_funcs intel_dsi_connector_funcs = {
diff --git a/drivers/gpu/drm/i915/intel_dvo.c b/drivers/gpu/drm/i915/intel_dvo.c
index 286baec..34b7e3f 100644
--- a/drivers/gpu/drm/i915/intel_dvo.c
+++ b/drivers/gpu/drm/i915/intel_dvo.c
@@ -351,7 +351,6 @@ static const struct drm_connector_funcs intel_dvo_connector_funcs = {
static const struct drm_connector_helper_funcs intel_dvo_connector_helper_funcs = {
.mode_valid = intel_dvo_mode_valid,
.get_modes = intel_dvo_get_modes,
- .best_encoder = intel_best_encoder,
};
static void intel_dvo_enc_destroy(struct drm_encoder *encoder)
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index 2c3bd9c..aef4bc8 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -2114,7 +2114,6 @@ static const struct drm_connector_funcs intel_hdmi_connector_funcs = {
static const struct drm_connector_helper_funcs intel_hdmi_connector_helper_funcs = {
.get_modes = intel_hdmi_get_modes,
.mode_valid = intel_hdmi_mode_valid,
- .best_encoder = intel_best_encoder,
};
static const struct drm_encoder_funcs intel_hdmi_enc_funcs = {
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
index bc53c0d..d4faa5a 100644
--- a/drivers/gpu/drm/i915/intel_lvds.c
+++ b/drivers/gpu/drm/i915/intel_lvds.c
@@ -547,7 +547,6 @@ static int intel_lvds_set_property(struct drm_connector *connector,
static const struct drm_connector_helper_funcs intel_lvds_connector_helper_funcs = {
.get_modes = intel_lvds_get_modes,
.mode_valid = intel_lvds_mode_valid,
- .best_encoder = intel_best_encoder,
};
static const struct drm_connector_funcs intel_lvds_connector_funcs = {
diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
index 2128fae..5cd48ff 100644
--- a/drivers/gpu/drm/i915/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/intel_sdvo.c
@@ -2191,7 +2191,6 @@ static const struct drm_connector_funcs intel_sdvo_connector_funcs = {
static const struct drm_connector_helper_funcs intel_sdvo_connector_helper_funcs = {
.get_modes = intel_sdvo_get_modes,
.mode_valid = intel_sdvo_mode_valid,
- .best_encoder = intel_best_encoder,
};
static void intel_sdvo_enc_destroy(struct drm_encoder *encoder)
diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
index 223129d..47fe241 100644
--- a/drivers/gpu/drm/i915/intel_tv.c
+++ b/drivers/gpu/drm/i915/intel_tv.c
@@ -1512,7 +1512,6 @@ static const struct drm_connector_funcs intel_tv_connector_funcs = {
static const struct drm_connector_helper_funcs intel_tv_connector_helper_funcs = {
.mode_valid = intel_tv_mode_valid,
.get_modes = intel_tv_get_modes,
- .best_encoder = intel_best_encoder,
};
static const struct drm_encoder_funcs intel_tv_enc_funcs = {
--
2.7.4
^ permalink raw reply related
* [PATCH v2 05/20] drm: fsl-dcu: Rely on the default ->best_encoder() behavior
From: Boris Brezillon @ 2016-06-07 11:48 UTC (permalink / raw)
To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
Cc: Krzysztof Kozlowski, Heiko Stuebner, Stefan Agner, virtualization,
Eric Anholt, Thierry Reding, Laurent Pinchart, Benjamin Gaignard,
Alexandre Courbot, linux-samsung-soc, Joonyoung Shim,
Boris Brezillon, Alexey Brodkin, Kyungmin Park, linux-rockchip,
Chen-Yu Tsai, Kukjin Kim, linux-tegra, Stephen Warren,
linux-arm-msm, intel-gfx, Jani Nikula, Inki Dae
In-Reply-To: <1465300095-16971-1-git-send-email-boris.brezillon@free-electrons.com>
We have a 1:1 relationship between connectors and encoders and the
driver is relying on the atomic helpers: we can drop the custom
->best_encoder() and let the core call drm_atomic_helper_best_encoder()
for us.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c | 9 ---------
1 file changed, 9 deletions(-)
diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c
index 98c998d..0b0989e 100644
--- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c
+++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c
@@ -102,14 +102,6 @@ static const struct drm_connector_funcs fsl_dcu_drm_connector_funcs = {
.reset = drm_atomic_helper_connector_reset,
};
-static struct drm_encoder *
-fsl_dcu_drm_connector_best_encoder(struct drm_connector *connector)
-{
- struct fsl_dcu_drm_connector *fsl_con = to_fsl_dcu_connector(connector);
-
- return fsl_con->encoder;
-}
-
static int fsl_dcu_drm_connector_get_modes(struct drm_connector *connector)
{
struct fsl_dcu_drm_connector *fsl_connector;
@@ -136,7 +128,6 @@ static int fsl_dcu_drm_connector_mode_valid(struct drm_connector *connector,
}
static const struct drm_connector_helper_funcs connector_helper_funcs = {
- .best_encoder = fsl_dcu_drm_connector_best_encoder,
.get_modes = fsl_dcu_drm_connector_get_modes,
.mode_valid = fsl_dcu_drm_connector_mode_valid,
};
--
2.7.4
^ permalink raw reply related
* [PATCH v2 04/20] drm: exynos: Rely on the default ->best_encoder() behavior
From: Boris Brezillon @ 2016-06-07 11:47 UTC (permalink / raw)
To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
Cc: Krzysztof Kozlowski, Heiko Stuebner, Stefan Agner, virtualization,
Eric Anholt, Thierry Reding, Laurent Pinchart, Benjamin Gaignard,
Alexandre Courbot, linux-samsung-soc, Joonyoung Shim,
Boris Brezillon, Alexey Brodkin, Kyungmin Park, linux-rockchip,
Chen-Yu Tsai, Kukjin Kim, linux-tegra, Stephen Warren,
linux-arm-msm, intel-gfx, Jani Nikula, Inki Dae
In-Reply-To: <1465300095-16971-1-git-send-email-boris.brezillon@free-electrons.com>
We have 1:1 relationship between connectors and encoders and the driver
is relying on the atomic helpers: we can drop the custom ->best_encoder()
implementations and let the core call drm_atomic_helper_best_encoder()
for us.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
drivers/gpu/drm/exynos/exynos_drm_dpi.c | 9 ---------
drivers/gpu/drm/exynos/exynos_drm_dsi.c | 9 ---------
drivers/gpu/drm/exynos/exynos_drm_vidi.c | 8 --------
drivers/gpu/drm/exynos/exynos_hdmi.c | 8 --------
4 files changed, 34 deletions(-)
diff --git a/drivers/gpu/drm/exynos/exynos_drm_dpi.c b/drivers/gpu/drm/exynos/exynos_drm_dpi.c
index 5e38e74..ad6b73c 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_dpi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_dpi.c
@@ -93,17 +93,8 @@ static int exynos_dpi_get_modes(struct drm_connector *connector)
return 0;
}
-static struct drm_encoder *
-exynos_dpi_best_encoder(struct drm_connector *connector)
-{
- struct exynos_dpi *ctx = connector_to_dpi(connector);
-
- return &ctx->encoder;
-}
-
static const struct drm_connector_helper_funcs exynos_dpi_connector_helper_funcs = {
.get_modes = exynos_dpi_get_modes,
- .best_encoder = exynos_dpi_best_encoder,
};
static int exynos_dpi_create_connector(struct drm_encoder *encoder)
diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
index 601ecf8..e07cb1f 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
@@ -1566,17 +1566,8 @@ static int exynos_dsi_get_modes(struct drm_connector *connector)
return 0;
}
-static struct drm_encoder *
-exynos_dsi_best_encoder(struct drm_connector *connector)
-{
- struct exynos_dsi *dsi = connector_to_dsi(connector);
-
- return &dsi->encoder;
-}
-
static const struct drm_connector_helper_funcs exynos_dsi_connector_helper_funcs = {
.get_modes = exynos_dsi_get_modes,
- .best_encoder = exynos_dsi_best_encoder,
};
static int exynos_dsi_create_connector(struct drm_encoder *encoder)
diff --git a/drivers/gpu/drm/exynos/exynos_drm_vidi.c b/drivers/gpu/drm/exynos/exynos_drm_vidi.c
index 608b0af..e8f6c92 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_vidi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_vidi.c
@@ -378,16 +378,8 @@ static int vidi_get_modes(struct drm_connector *connector)
return drm_add_edid_modes(connector, edid);
}
-static struct drm_encoder *vidi_best_encoder(struct drm_connector *connector)
-{
- struct vidi_context *ctx = ctx_from_connector(connector);
-
- return &ctx->encoder;
-}
-
static const struct drm_connector_helper_funcs vidi_connector_helper_funcs = {
.get_modes = vidi_get_modes,
- .best_encoder = vidi_best_encoder,
};
static int vidi_create_connector(struct drm_encoder *encoder)
diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c
index 58de5a4..1625d7c 100644
--- a/drivers/gpu/drm/exynos/exynos_hdmi.c
+++ b/drivers/gpu/drm/exynos/exynos_hdmi.c
@@ -937,17 +937,9 @@ static int hdmi_mode_valid(struct drm_connector *connector,
return MODE_OK;
}
-static struct drm_encoder *hdmi_best_encoder(struct drm_connector *connector)
-{
- struct hdmi_context *hdata = connector_to_hdmi(connector);
-
- return &hdata->encoder;
-}
-
static const struct drm_connector_helper_funcs hdmi_connector_helper_funcs = {
.get_modes = hdmi_get_modes,
.mode_valid = hdmi_mode_valid,
- .best_encoder = hdmi_best_encoder,
};
static int hdmi_create_connector(struct drm_encoder *encoder)
--
2.7.4
^ permalink raw reply related
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox