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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).