From: Thierry Reding <thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org>
To: Stephen Warren <swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
Cc: David Airlie <airlied-cv59FeDIM0c@public.gmane.org>,
devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org,
dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org,
Olof Johansson <olof-nZhT3qVonbNeoWH0uzbU5w@public.gmane.org>,
iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
Colin Cross <ccross-z5hGa2qSFaRBDgjK7y7TUQ@public.gmane.org>,
linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
Jon Mayo <jmayo-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
Subject: Re: [RFC 4/4] drm: Add NVIDIA Tegra support
Date: Thu, 12 Apr 2012 08:50:38 +0200 [thread overview]
Message-ID: <20120412065038.GB4162@avionic-0098.adnet.avionic-design.de> (raw)
In-Reply-To: <4F85C97E.50203-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
[-- Attachment #1.1: Type: text/plain, Size: 7435 bytes --]
* Stephen Warren wrote:
> On 04/11/2012 06:10 AM, Thierry Reding wrote:
> > This commit adds a very basic DRM driver for NVIDIA Tegra SoCs. It
> > currently has rudimentary GEM support and can run a console on the
> > framebuffer as well as X using the xf86-video-modesetting driver.
> > Only the RGB output is supported. Quite a lot of things still need
> > to be worked out and there is a lot of room for cleanup.
>
> I'll let Jon Mayo comment on the actual driver implementation, since
> he's a lot more familiar with Tegra's display hardware. However, I have
> some general comments below.
>
> > .../devicetree/bindings/gpu/drm/tegra.txt | 24 +
> > arch/arm/mach-tegra/board-dt-tegra20.c | 3 +
> > arch/arm/mach-tegra/tegra2_clocks.c | 8 +-
> > drivers/gpu/drm/Kconfig | 2 +
> > drivers/gpu/drm/Makefile | 1 +
> > drivers/gpu/drm/tegra/Kconfig | 10 +
> > drivers/gpu/drm/tegra/Makefile | 5 +
> > drivers/gpu/drm/tegra/tegra_drv.c | 2241 ++++++++++++++++++++
> > drivers/gpu/drm/tegra/tegra_drv.h | 184 ++
> > include/drm/tegra_drm.h | 44 +
>
> Splitting this patch into two, between arch/arm and drivers/gpu would be
> a good idea.
I can certainly do that.
> > diff --git a/Documentation/devicetree/bindings/gpu/drm/tegra.txt b/Documentation/devicetree/bindings/gpu/drm/tegra.txt
>
> > + drm@54200000 {
> > + compatible = "nvidia,tegra20-drm";
>
> This doesn't seem right; there isn't a "DRM" hardware module on Tegra,
> since "DRM" is a Linux/software-specific term.
>
> I'd at least expect to see this compatible flag be renamed to something
> more like "nvidia,tegra20-dc" (dc==display controller).
>
> Since Tegra has two display controller modules (I believe identical?),
> and numerous other independent(?) blocks, I'd expect to see multiple
> nodes in device tree, one per hardware block, such that each block gets
> its own device and driver. That said, I'm not familiar enough with
> Tegra's display and graphics HW to know if this makes sense. Jon, what's
> your take here? The clock change below, and in particular the original
> code there that we use downstream, lends weight to my argument.
>
> > + reg = < 0x54200000 0x00040000 /* display A */
> > + 0x54240000 0x00040000 /* display B */
> > + 0x58000000 0x02000000 >; /* GART aperture */
> > + interrupts = < 0 73 0x04 /* display A */
> > + 0 74 0x04 >; /* display B */
> > +
> > + lvds {
> > + type = "rgb";
>
> These sub-nodes probably want a "compatible" property rather than a
> "type" property.
"compatible" suggests that a driver would bind to it. However the data really
is only passed to the DC driver for configuration.
> > + size = <345 194>;
> > +
> > + default-mode {
> > + pixel-clock = <61715000>;
> > + vertical-refresh = <50>;
> > + resolution = <1366 768>;
> > + bits-per-pixel = <16>;
> > + horizontal-timings = <4 136 2 36>;
> > + vertical-timings = <2 4 21 10>;
> > + };
> > + };
>
> I imagine that quite a bit of thought needs to be put into the output
> part of the binding in order to:
>
> * Model the outputs/connectors separately from display controllers.
> * Make sure that the basic infra-structure for representing an output is
> general enough to be extensible to all the kinds of outputs we support,
> not just the LVDS output.
I haven't played around with HDMI at all yet, so I don't know of the
requirements. I'm pretty sure the above isn't anywhere near complete
though.
> * We were wondering about putting an EDID into the DT to represent the
> display modes, so that all outputs had EDIDs rather than "real" monitors
> having EDIDs, and fixed internal displays having some other
> representation of capabilities.
That's an interesting approach. I like it.
> I'm hoping that Jon will drive this.
>
> > diff --git a/arch/arm/mach-tegra/tegra2_clocks.c b/arch/arm/mach-tegra/tegra2_clocks.c
>
> > - PERIPH_CLK("disp1", "tegradc.0", NULL, 27, 0x138, 600000000, mux_pllp_plld_pllc_clkm, MUX), /* scales with voltage and process_id */
> > - PERIPH_CLK("disp2", "tegradc.1", NULL, 26, 0x13c, 600000000, mux_pllp_plld_pllc_clkm, MUX), /* scales with voltage and process_id */
> > + PERIPH_CLK("disp1", "tegra-drm", NULL, 27, 0x138, 600000000, mux_pllp_plld_pllc_clkm, MUX), /* scales with voltage and process_id */
> > + PERIPH_CLK("disp2", "tegra-drm", NULL, 26, 0x13c, 600000000, mux_pllp_plld_pllc_clkm, MUX), /* scales with voltage and process_id */
>
> This doesn't seem right, and couples back to my assertion above that the
> two display controller modules probably deserve separate device objects,
> named e.g. tegradc.*.
I think I understand where you're going with this. Does the following look
more correct?
disp1 : dc@54200000 {
compatible = "nvidia,tegra20-dc";
reg = <0x54200000, 0x00040000>;
interrupts = <0 73 0x04>;
};
disp2 : dc@54240000 {
compatible = "nvidia,tegra20-dc";
reg = <0x54240000, 0x00040000>;
interrupts = <0 74 0x04>;
};
drm {
compatible = "nvidia,tegra20-drm";
lvds {
compatible = "...";
dc = <&disp1>;
};
hdmi {
compatible = "...";
dc = <&disp2>;
};
};
> > +static int tegra_drm_parse_dt_mode(struct device *dev,
> ...
> > + err = of_property_read_u32(node, "pixel-clock", &value);
> > + if (err < 0)
> > + return err;
>
> Is it useful to call dev_err() when the DT is present but can't be
> parsed, to give some clue what the problem is?
Yes, that might be a good idea.
> > +static int tegra_drm_parse_dt(struct platform_device *pdev)
> > +{
> ...
> > + pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
> > + if (!pdata)
> > + return -ENOMEM;
> ...
> > + dev->platform_data = pdata;
>
> I don't think you should assign to dev->platform_data. If you do, then I
> think the following could happen:
>
> * During first probe, the assignment above happens
> * Module is removed, hence device removed, hence dev->platform_data
> freed, but not zero'd out
Actually the code does zero out platform_data in tegra_drm_remove(). In fact
I did test module unloading and reloading and it works properly. But it
should probably be zeroed in case drm_platform_init() fails as well.
> * Module is re-inserted, finds that dev->platform_data!=NULL and
> proceeds to use it.
>
> Instead, the active platform data should probably be stored in a
> tegra_drm struct that's stored in the dev's private data.
> tegra_drm_probe() might then look more like:
>
> struct tegra_drm *tdev;
>
> tdev = devm_kzalloc();
> tdev->pdata = pdev->dev.platform_data;
> if (!tdev->pdata)
> tdev->pdata = tegra_drm_parse_dt();
> if (!tdev->pdata)
> return -EINVAL;
>
> dev_set_drvdata(dev, tdev);
>
> This is safe, since probe() will never assume that dev_get_drvdata()
> might contain something valid before probe() sets it.
I prefer my approach over storing the data in an extra field because the
device platform_data field is where everybody would expect it. Furthermore
this wouldn't be relevant if we decided not to support non-DT setups.
Thierry
[-- Attachment #1.2: Type: application/pgp-signature, Size: 198 bytes --]
[-- Attachment #2: Type: text/plain, Size: 190 bytes --]
_______________________________________________
iommu mailing list
iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu
next prev parent reply other threads:[~2012-04-12 6:50 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-04-11 12:10 [RFC 0/4] Add NVIDIA Tegra DRM support Thierry Reding
[not found] ` <1334146230-1795-1-git-send-email-thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org>
2012-04-11 12:10 ` [RFC 1/4] iommu: tegra/gart: use correct gart_device Thierry Reding
2012-04-11 12:10 ` [RFC 2/4] iommu: tegra/gart: Add device tree support Thierry Reding
[not found] ` <1334146230-1795-3-git-send-email-thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org>
2012-04-11 17:21 ` Stephen Warren
[not found] ` <4F85BD9D.7050409-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-04-12 6:51 ` Thierry Reding
2012-04-11 12:10 ` [RFC 3/4] drm: fixed: Add dfixed_frac() macro Thierry Reding
[not found] ` <1334146230-1795-4-git-send-email-thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org>
2012-04-11 17:25 ` Stephen Warren
[not found] ` <4F85BE77.7090807-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-04-12 6:52 ` Thierry Reding
2012-04-11 12:10 ` [RFC 4/4] drm: Add NVIDIA Tegra support Thierry Reding
[not found] ` <1334146230-1795-5-git-send-email-thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org>
2012-04-11 12:48 ` Daniel Vetter
[not found] ` <20120411124810.GK4296-dv86pmgwkMBes7Z6vYuT8azUEOm+Xw19@public.gmane.org>
2012-04-11 13:23 ` Thierry Reding
[not found] ` <20120411132326.GD27337-RM9K5IK7kjIyiCvfTdI0JKcOhU4Rzj621B7CTYaBSLdn68oJJulU0Q@public.gmane.org>
2012-04-11 13:35 ` Daniel Vetter
[not found] ` <20120411133512.GL4296-dv86pmgwkMBes7Z6vYuT8azUEOm+Xw19@public.gmane.org>
2012-04-11 14:11 ` Thierry Reding
[not found] ` <20120411141108.GI27337-RM9K5IK7kjIyiCvfTdI0JKcOhU4Rzj621B7CTYaBSLdn68oJJulU0Q@public.gmane.org>
2012-04-11 14:34 ` Daniel Vetter
[not found] ` <20120411143456.GM4296-dv86pmgwkMBes7Z6vYuT8azUEOm+Xw19@public.gmane.org>
2012-04-11 14:43 ` Alan Cox
[not found] ` <20120411154309.1f04fb80-38n7/U1jhRXW96NNrWNlrekiAK3p4hvP@public.gmane.org>
2012-04-11 14:49 ` Daniel Vetter
2012-04-11 15:00 ` Thierry Reding
2012-04-11 14:52 ` Alan Cox
[not found] ` <20120411155237.24233afc-38n7/U1jhRXW96NNrWNlrekiAK3p4hvP@public.gmane.org>
2012-04-11 15:06 ` Thierry Reding
[not found] ` <20120411150603.GC20811-RM9K5IK7kjIyiCvfTdI0JKcOhU4Rzj621B7CTYaBSLdn68oJJulU0Q@public.gmane.org>
2012-04-11 15:11 ` Alan Cox
2012-04-11 15:18 ` Arnd Bergmann
[not found] ` <201204111518.41968.arnd-r2nGTMty4D4@public.gmane.org>
2012-04-12 7:18 ` Thierry Reding
[not found] ` <20120412071816.GA18252-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org>
2012-04-12 8:40 ` Marek Szyprowski
[not found] ` <025f01cd1887$da56b6e0$8f0424a0$%szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2012-04-12 11:18 ` Arnd Bergmann
[not found] ` <201204121118.19685.arnd-r2nGTMty4D4@public.gmane.org>
2012-04-12 13:30 ` Marek Szyprowski
[not found] ` <02aa01cd18b0$7b2586a0$717093e0$%szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2012-04-12 13:34 ` Thierry Reding
2012-04-12 14:23 ` Daniel Vetter
2012-04-12 13:42 ` Thierry Reding
[not found] ` <20120412134216.GB15701-RM9K5IK7kjIyiCvfTdI0JKcOhU4Rzj621B7CTYaBSLdn68oJJulU0Q@public.gmane.org>
2012-04-12 14:20 ` Marek Szyprowski
2012-04-12 23:10 ` Lucas Stach
2012-04-12 18:56 ` Jon Mayo
2012-04-11 18:12 ` Stephen Warren
[not found] ` <4F85C97E.50203-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-04-12 6:50 ` Thierry Reding [this message]
[not found] ` <20120412065038.GB4162-RM9K5IK7kjIyiCvfTdI0JKcOhU4Rzj621B7CTYaBSLdn68oJJulU0Q@public.gmane.org>
2012-04-12 15:49 ` Stephen Warren
[not found] ` <4F86F97C.8010508-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-04-12 17:44 ` Thierry Reding
[not found] ` <20120412174429.GB10042-RM9K5IK7kjIyiCvfTdI0JKcOhU4Rzj621B7CTYaBSLdn68oJJulU0Q@public.gmane.org>
2012-04-12 22:13 ` Stephen Warren
[not found] ` <4F8753A0.6040907-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-04-13 9:14 ` Thierry Reding
[not found] ` <20120413091457.GB617-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org>
2012-04-13 19:19 ` Stephen Warren
[not found] ` <4F887C54.6030306-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-04-15 8:39 ` Thierry Reding
[not found] ` <20120415083905.GA15207-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org>
2012-04-16 16:00 ` Stephen Warren
[not found] ` <4F8C423B.8050609-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-04-16 18:48 ` Thierry Reding
[not found] ` <20120416184819.GA21043-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org>
2012-04-16 18:57 ` Stephen Warren
[not found] ` <4F8C6B80.4000001-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-04-16 19:03 ` Thierry Reding
[not found] ` <20120416190320.GA21233-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org>
2012-04-16 20:37 ` Stephen Warren
2012-04-12 9:21 ` Sascha Hauer
[not found] ` <20120412092106.GU3852-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2012-04-12 9:33 ` Thierry Reding
[not found] ` <20120412093301.GB23336-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org>
2012-04-12 13:16 ` Alex Deucher
[not found] ` <CADnq5_Oiez8zAHqFw-_qXk=3PnnEqgm3ir9M3KsWaQr-dLS5pw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-04-12 13:25 ` Thierry Reding
[not found] ` <20120412132531.GC5353-RM9K5IK7kjIyiCvfTdI0JKcOhU4Rzj621B7CTYaBSLdn68oJJulU0Q@public.gmane.org>
2012-04-12 14:09 ` Alex Deucher
[not found] ` <CADnq5_P-iGtCxtW+1Y2N34Q6WA5dUUC7ZxZNT29BXTAV0+VfpQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-04-12 14:12 ` Alex Deucher
[not found] ` <CADnq5_OLaKPLktd8DkQvwrmZPpaQP4zA1a4+742mQCGvRXfD7g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-04-12 16:32 ` Thierry Reding
2012-04-11 12:25 ` [RFC 0/4] Add NVIDIA Tegra DRM support Alan Cox
[not found] ` <20120411132548.7d738b42-38n7/U1jhRXW96NNrWNlrekiAK3p4hvP@public.gmane.org>
2012-04-11 13:35 ` Thierry Reding
2012-04-11 12:46 ` Hiroshi Doyu
[not found] ` <20120411.154642.1389197434468515943.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2012-04-11 13:24 ` Thierry Reding
2012-04-19 17:35 ` Thierry Reding
[not found] ` <20120419173537.GA7692-RM9K5IK7kjIyiCvfTdI0JKcOhU4Rzj621B7CTYaBSLdn68oJJulU0Q@public.gmane.org>
2012-04-19 19:28 ` Dave Airlie
[not found] ` <CAPM=9tzK83yYS33eNruvFDwb62ycZxJMC31davVRN=yaZD53YA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-04-19 20:40 ` Thierry Reding
[not found] ` <20120419204016.GA8954-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org>
2012-04-19 20:59 ` Jon Mayo
[not found] ` <4F907CBB.4080705-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2012-04-20 5:02 ` Thierry Reding
[not found] ` <20120420050231.GA15313-RM9K5IK7kjIyiCvfTdI0JKcOhU4Rzj621B7CTYaBSLdn68oJJulU0Q@public.gmane.org>
2012-04-20 6:05 ` Lucas Stach
2012-04-20 19:54 ` Jon Mayo
2012-04-19 22:21 ` Jerome Glisse
[not found] ` <CAH3drwZhTzuOVfybB_KBgk22csK47xXv5G4aMOuqPy+ibKd21A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-04-20 5:05 ` Thierry Reding
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=20120412065038.GB4162@avionic-0098.adnet.avionic-design.de \
--to=thierry.reding-rm9k5ik7kjkj5m59nbduvrnah6klmebb@public.gmane.org \
--cc=airlied-cv59FeDIM0c@public.gmane.org \
--cc=ccross-z5hGa2qSFaRBDgjK7y7TUQ@public.gmane.org \
--cc=devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org \
--cc=dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
--cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=jmayo-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org \
--cc=linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=olof-nZhT3qVonbNeoWH0uzbU5w@public.gmane.org \
--cc=swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.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