From: Ladislav Michl <ladis@linux-mips.org>
To: linux-fbdev@vger.kernel.org
Subject: Re: [PATCH] omapfb: dss: Do not duplicate features data
Date: Wed, 29 Nov 2017 16:08:18 +0000 [thread overview]
Message-ID: <20171129160818.GA30740@lenoch> (raw)
In-Reply-To: <20171129123308.GA26578@lenoch>
Hi Adam,
On Wed, Nov 29, 2017 at 09:12:34AM -0600, Adam Ford wrote:
> On Wed, Nov 29, 2017 at 6:33 AM, Ladislav Michl <ladis@linux-mips.org> wrote:
> > As features data are read only, there is no need to allocate their
> > copy on the heap.
> >
> > Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
> > Suggested-by: Markus Elfring <elfring@users.sourceforge.net>
> > ---
> > Note: This patch is not runtime tested. If you have hardware and can test
> > it, please do so and eventually add you Tested-by tag. Thank you.
>
> Unfortunately, this fails to load properly on a Logic PD Torpedo kit
> (omap3630/DM3730).
Thank you for testing.
> [ 0.975097] omapdss_dss 48050000.dss: master bind failed: -517
This is -EPROBE_DEFER, you'll probably get that also without patch.
> [ 3.821807] omapdss_dispc 48050400.dispc: Failed to allocate DISPC Features
I wonder how could you get this as this is the message patch removes...
> [ 3.829345] omapdss_dss 48050000.dss: failed to bind 48050400.dispc
> (ops dispc_component_ops): -12
> [ 3.842254] omapdss_dss 48050000.dss: master bind failed: -12
> [ 3.848724] omapdss_dispc: probe of 48050400.dispc failed with error -12
>
> I also get
> [ 12.258056] panel-dpi display: failed to find video source
These are only consequences of above error.
> > Note2: Marcus, I hope it is okay to add your Suggested-by tag. Please
> > let me know, if I'm wrong.
> >
> > drivers/video/fbdev/omap2/omapfb/dss/dispc.c | 39 ++++++---------------
> > drivers/video/fbdev/omap2/omapfb/dss/dss.c | 45 +++++++------------------
> > drivers/video/fbdev/omap2/omapfb/dss/hdmi_phy.c | 31 ++++-------------
> > 3 files changed, 29 insertions(+), 86 deletions(-)
> >
> > diff --git a/drivers/video/fbdev/omap2/omapfb/dss/dispc.c b/drivers/video/fbdev/omap2/omapfb/dss/dispc.c
> > index 7a75dfda9845..6be13a106ece 100644
> > --- a/drivers/video/fbdev/omap2/omapfb/dss/dispc.c
> > +++ b/drivers/video/fbdev/omap2/omapfb/dss/dispc.c
> > @@ -3976,52 +3976,33 @@ static const struct dispc_features omap54xx_dispc_feats = {
> > .has_writeback = true,
> > };
> >
> > -static int dispc_init_features(struct platform_device *pdev)
> > +static const struct dispc_features* dispc_get_features(void)
> > {
> > - const struct dispc_features *src;
> > - struct dispc_features *dst;
> > -
> > - dst = devm_kzalloc(&pdev->dev, sizeof(*dst), GFP_KERNEL);
> > - if (!dst) {
> > - dev_err(&pdev->dev, "Failed to allocate DISPC Features\n");
Here -------------------------------------^
> > - return -ENOMEM;
> > - }
> > -
> > switch (omapdss_get_version()) {
> > case OMAPDSS_VER_OMAP24xx:
> > - src = &omap24xx_dispc_feats;
> > - break;
> > + return &omap24xx_dispc_feats;
> >
> > case OMAPDSS_VER_OMAP34xx_ES1:
> > - src = &omap34xx_rev1_0_dispc_feats;
> > - break;
> > + return &omap34xx_rev1_0_dispc_feats;
> >
> > case OMAPDSS_VER_OMAP34xx_ES3:
> > case OMAPDSS_VER_OMAP3630:
> > case OMAPDSS_VER_AM35xx:
> > case OMAPDSS_VER_AM43xx:
> > - src = &omap34xx_rev3_0_dispc_feats;
> > - break;
> > + return &omap34xx_rev3_0_dispc_feats;
> >
> > case OMAPDSS_VER_OMAP4430_ES1:
> > case OMAPDSS_VER_OMAP4430_ES2:
> > case OMAPDSS_VER_OMAP4:
> > - src = &omap44xx_dispc_feats;
> > - break;
> > + return &omap44xx_dispc_feats;
> >
> > case OMAPDSS_VER_OMAP5:
> > case OMAPDSS_VER_DRA7xx:
> > - src = &omap54xx_dispc_feats;
> > - break;
> > + return &omap54xx_dispc_feats;
> >
> > default:
> > - return -ENODEV;
> > + return NULL;
> > }
> > -
> > - memcpy(dst, src, sizeof(*dst));
> > - dispc.feat = dst;
> > -
> > - return 0;
> > }
> >
> > static irqreturn_t dispc_irq_handler(int irq, void *arg)
> > @@ -4078,9 +4059,9 @@ static int dispc_bind(struct device *dev, struct device *master, void *data)
> >
> > spin_lock_init(&dispc.control_lock);
> >
> > - r = dispc_init_features(dispc.pdev);
> > - if (r)
> > - return r;
> > + dispc.feat = dispc_get_features();
> > + if (!dispc.feat)
> > + return -ENODEV;
> >
> > dispc_mem = platform_get_resource(dispc.pdev, IORESOURCE_MEM, 0);
> > if (!dispc_mem) {
> > diff --git a/drivers/video/fbdev/omap2/omapfb/dss/dss.c b/drivers/video/fbdev/omap2/omapfb/dss/dss.c
> > index 48c6500c24e1..9a255ffe77c5 100644
> > --- a/drivers/video/fbdev/omap2/omapfb/dss/dss.c
> > +++ b/drivers/video/fbdev/omap2/omapfb/dss/dss.c
> > @@ -887,58 +887,37 @@ static const struct dss_features dra7xx_dss_feats = {
> > .num_ports = ARRAY_SIZE(dra7xx_ports),
> > };
> >
> > -static int dss_init_features(struct platform_device *pdev)
> > +static const struct dss_features* dss_get_features(void)
> > {
> > - const struct dss_features *src;
> > - struct dss_features *dst;
> > -
> > - dst = devm_kzalloc(&pdev->dev, sizeof(*dst), GFP_KERNEL);
> > - if (!dst) {
> > - dev_err(&pdev->dev, "Failed to allocate local DSS Features\n");
> > - return -ENOMEM;
> > - }
> > -
> > switch (omapdss_get_version()) {
> > case OMAPDSS_VER_OMAP24xx:
> > - src = &omap24xx_dss_feats;
> > - break;
> > + return &omap24xx_dss_feats;
> >
> > case OMAPDSS_VER_OMAP34xx_ES1:
> > case OMAPDSS_VER_OMAP34xx_ES3:
> > case OMAPDSS_VER_AM35xx:
> > - src = &omap34xx_dss_feats;
> > - break;
> > + return &omap34xx_dss_feats;
> >
> > case OMAPDSS_VER_OMAP3630:
> > - src = &omap3630_dss_feats;
> > - break;
> > + return &omap3630_dss_feats;
> >
> > case OMAPDSS_VER_OMAP4430_ES1:
> > case OMAPDSS_VER_OMAP4430_ES2:
> > case OMAPDSS_VER_OMAP4:
> > - src = &omap44xx_dss_feats;
> > - break;
> > + return &omap44xx_dss_feats;
> >
> > case OMAPDSS_VER_OMAP5:
> > - src = &omap54xx_dss_feats;
> > - break;
> > + return &omap54xx_dss_feats;
> >
> > case OMAPDSS_VER_AM43xx:
> > - src = &am43xx_dss_feats;
> > - break;
> > + return &am43xx_dss_feats;
> >
> > case OMAPDSS_VER_DRA7xx:
> > - src = &dra7xx_dss_feats;
> > - break;
> > + return &dra7xx_dss_feats;
> >
> > default:
> > - return -ENODEV;
> > + return NULL;
> > }
> > -
> > - memcpy(dst, src, sizeof(*dst));
> > - dss.feat = dst;
> > -
> > - return 0;
> > }
> >
> > static void dss_uninit_ports(struct platform_device *pdev);
> > @@ -1104,9 +1083,9 @@ static int dss_bind(struct device *dev)
> >
> > dss.pdev = pdev;
> >
> > - r = dss_init_features(dss.pdev);
> > - if (r)
> > - return r;
> > + dss.feat = dss_get_features();
> > + if (!dss.feat)
> > + return -ENODEV;
> >
> > dss_mem = platform_get_resource(dss.pdev, IORESOURCE_MEM, 0);
> > if (!dss_mem) {
> > diff --git a/drivers/video/fbdev/omap2/omapfb/dss/hdmi_phy.c b/drivers/video/fbdev/omap2/omapfb/dss/hdmi_phy.c
> > index 9a13c35fd6d8..07d46e14cea4 100644
> > --- a/drivers/video/fbdev/omap2/omapfb/dss/hdmi_phy.c
> > +++ b/drivers/video/fbdev/omap2/omapfb/dss/hdmi_phy.c
> > @@ -189,47 +189,30 @@ static const struct hdmi_phy_features omap54xx_phy_feats = {
> > .max_phy = 186000000,
> > };
> >
> > -static int hdmi_phy_init_features(struct platform_device *pdev)
> > +static const struct hdmi_phy_features* hdmi_phy_get_features(void)
> > {
> > - struct hdmi_phy_features *dst;
> > - const struct hdmi_phy_features *src;
> > -
> > - dst = devm_kzalloc(&pdev->dev, sizeof(*dst), GFP_KERNEL);
> > - if (!dst) {
> > - dev_err(&pdev->dev, "Failed to allocate HDMI PHY Features\n");
> > - return -ENOMEM;
> > - }
> > -
> > switch (omapdss_get_version()) {
> > case OMAPDSS_VER_OMAP4430_ES1:
> > case OMAPDSS_VER_OMAP4430_ES2:
> > case OMAPDSS_VER_OMAP4:
> > - src = &omap44xx_phy_feats;
> > - break;
> > + return &omap44xx_phy_feats;
> >
> > case OMAPDSS_VER_OMAP5:
> > case OMAPDSS_VER_DRA7xx:
> > - src = &omap54xx_phy_feats;
> > - break;
> > + return &omap54xx_phy_feats;
> >
> > default:
> > - return -ENODEV;
> > + return NULL;
> > }
> > -
> > - memcpy(dst, src, sizeof(*dst));
> > - phy_feat = dst;
> > -
> > - return 0;
> > }
> >
> > int hdmi_phy_init(struct platform_device *pdev, struct hdmi_phy_data *phy)
> > {
> > - int r;
> > struct resource *res;
> >
> > - r = hdmi_phy_init_features(pdev);
> > - if (r)
> > - return r;
> > + phy_feat = hdmi_phy_get_features();
> > + if (!phy_feat)
> > + return -ENODEV;
> >
> > res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "phy");
> > if (!res) {
> > --
> > 2.15.0
> >
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2017-11-29 16:08 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-29 12:33 [PATCH] omapfb: dss: Do not duplicate features data Ladislav Michl
2017-11-29 15:12 ` Adam Ford
2017-11-29 16:08 ` Ladislav Michl [this message]
2017-11-29 16:36 ` Adam Ford
2017-11-29 16:45 ` Adam Ford
2017-11-29 17:03 ` Ladislav Michl
2018-01-04 14:10 ` Bartlomiej Zolnierkiewicz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20171129160818.GA30740@lenoch \
--to=ladis@linux-mips.org \
--cc=linux-fbdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.