From: Thomas Hellstrom <thomas@shipmail.org>
To: Rob Clark <rob.clark@linaro.org>
Cc: Inki Dae <inki.dae@samsung.com>,
dri-devel@lists.freedesktop.org, patches@linaro.org
Subject: Re: [PATCH] RFCv2: omapdrm DRM/KMS driver for TI OMAP platforms
Date: Sun, 18 Sep 2011 22:00:17 +0200 [thread overview]
Message-ID: <4E764DD1.2060404@shipmail.org> (raw)
In-Reply-To: <CAF6AEGtkD6Yq_t=bXGqiW9B9gsmQ02njs6KfWQhrfG-a9mPgdA@mail.gmail.com>
On 09/18/2011 09:50 PM, Rob Clark wrote:
> On Sun, Sep 18, 2011 at 2:36 PM, Thomas Hellstrom<thomas@shipmail.org> wrote:
>
>> On 09/17/2011 11:32 PM, Rob Clark wrote:
>>
>>> From: Rob Clark<rob@ti.com>
>>>
>>> A DRM display driver for TI OMAP platform. Similar to omapfb (fbdev)
>>> and omap_vout (v4l2 display) drivers in the past, this driver uses the
>>> DSS2 driver to access the display hardware, including support for
>>> HDMI, DVI, and various types of LCD panels. And it implements GEM
>>> support for buffer allocation (for KMS as well as offscreen buffers
>>> used by the xf86-video-omap userspace xorg driver).
>>>
>>> The driver maps CRTCs to overlays, encoders to overlay-managers, and
>>> connectors to dssdev's. Note that this arrangement might change slightly
>>> when support for drm_plane overlays is added.
>>>
>>> For GEM support, non-scanout buffers are using the shmem backed pages
>>> provided by GEM core (In drm_gem_object_init()). In the case of scanout
>>> buffers, which need to be physically contiguous, those are allocated
>>> with CMA and use drm_gem_private_object_init().
>>>
>>> See userspace xorg driver:
>>> git://github.com/robclark/xf86-video-omap.git
>>>
>>> Refer to this link for CMA (Continuous Memory Allocator):
>>> http://lkml.org/lkml/2011/8/19/302
>>>
>>> Links to previous versions of the patch:
>>> v1: http://lwn.net/Articles/458137/
>>>
>>> History:
>>>
>>> v2: replace omap_vram with CMA for scanout buffer allocation, remove
>>> unneeded functions, use dma_addr_t for physical addresses, error
>>> handling cleanup, refactor attach/detach pages into common drm
>>> functions, split non-userspace-facing API into omap_priv.h, remove
>>> plugin API
>>>
>>> v1: original
>>> ---
>>> drivers/staging/Kconfig | 2 +
>>> drivers/staging/Makefile | 1 +
>>> drivers/staging/omapdrm/Kconfig | 24 +
>>> drivers/staging/omapdrm/Makefile | 9 +
>>> drivers/staging/omapdrm/TODO.txt | 14 +
>>> drivers/staging/omapdrm/omap_connector.c | 357 ++++++++++++++
>>> drivers/staging/omapdrm/omap_crtc.c | 332 +++++++++++++
>>> drivers/staging/omapdrm/omap_drv.c | 766
>>> ++++++++++++++++++++++++++++++
>>> drivers/staging/omapdrm/omap_drv.h | 126 +++++
>>> drivers/staging/omapdrm/omap_encoder.c | 188 ++++++++
>>> drivers/staging/omapdrm/omap_fb.c | 259 ++++++++++
>>> drivers/staging/omapdrm/omap_fbdev.c | 309 ++++++++++++
>>> drivers/staging/omapdrm/omap_gem.c | 720
>>> ++++++++++++++++++++++++++++
>>> drivers/video/omap2/omapfb/Kconfig | 2 +-
>>> include/drm/Kbuild | 1 +
>>> include/drm/omap_drm.h | 111 +++++
>>> include/drm/omap_priv.h | 42 ++
>>> 17 files changed, 3262 insertions(+), 1 deletions(-)
>>> create mode 100644 drivers/staging/omapdrm/Kconfig
>>> create mode 100644 drivers/staging/omapdrm/Makefile
>>> create mode 100644 drivers/staging/omapdrm/TODO.txt
>>> create mode 100644 drivers/staging/omapdrm/omap_connector.c
>>> create mode 100644 drivers/staging/omapdrm/omap_crtc.c
>>> create mode 100644 drivers/staging/omapdrm/omap_drv.c
>>> create mode 100644 drivers/staging/omapdrm/omap_drv.h
>>> create mode 100644 drivers/staging/omapdrm/omap_encoder.c
>>> create mode 100644 drivers/staging/omapdrm/omap_fb.c
>>> create mode 100644 drivers/staging/omapdrm/omap_fbdev.c
>>> create mode 100644 drivers/staging/omapdrm/omap_gem.c
>>> create mode 100644 include/drm/omap_drm.h
>>> create mode 100644 include/drm/omap_priv.h
>>>
>>>
>>>
>> ...
>>
>>
>>> diff --git a/include/drm/omap_drm.h b/include/drm/omap_drm.h
>>> new file mode 100644
>>> index 0000000..ea0ae8e
>>> --- /dev/null
>>> +++ b/include/drm/omap_drm.h
>>> @@ -0,0 +1,111 @@
>>> +/*
>>> + * linux/include/drm/omap_drm.h
>>> + *
>>> + * Copyright (C) 2011 Texas Instruments
>>> + * Author: Rob Clark<rob@ti.com>
>>> + *
>>> + * This program is free software; you can redistribute it and/or modify
>>> it
>>> + * under the terms of the GNU General Public License version 2 as
>>> published by
>>> + * the Free Software Foundation.
>>> + *
>>> + * This program is distributed in the hope that it will be useful, but
>>> WITHOUT
>>> + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
>>> + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
>>> for
>>> + * more details.
>>> + *
>>> + * You should have received a copy of the GNU General Public License
>>> along with
>>> + * this program. If not, see<http://www.gnu.org/licenses/>.
>>> + */
>>> +
>>> +#ifndef __OMAP_DRM_H__
>>> +#define __OMAP_DRM_H__
>>> +
>>> +#include "drm.h"
>>> +
>>> +/* Please note that modifications to all structs defined here are
>>> + * subject to backwards-compatibility constraints.
>>> + */
>>> +
>>> +#define OMAP_PARAM_CHIPSET_ID 1 /* ie. 0x3430, 0x4430, etc */
>>> +
>>> +struct drm_omap_param {
>>> + uint64_t param; /* in */
>>> + uint64_t value; /* in (set_param), out (get_param)
>>> */
>>> +};
>>> +
>>> +struct drm_omap_get_base {
>>> + char plugin_name[64]; /* in */
>>> + uint32_t ioctl_base; /* out */
>>> +};
>>>
>>>
>> What about future ARM 64-bit vs 32-bit structure sizes? On x86 we always
>> take care to make structures appearing in the drm user-space interfaces
>> having sizes that are a multiple of 64-bits, to avoid having to maintain
>> compat code for 32-bit apps running on 64 bit kernels. For the same
>> reasons, structure members with 64 bit alignment requirements on 64-bit
>> systems need to be carefully places.
>>
>> I don't know whether there is or will be a 64-bit ARM, but it might be worth
>> taking into consideration.
>>
> There isn't currently any 64-bit ARM, but it is a safe assumption that
> there will be some day.. I guess we'll have enough fun w/ various
> random 32b devices when LPAE arrives w/ the cortex-a15..
>
> I did try to make sure any uint64_t's were aligned to a 64bit offset,
> but beyond that I confess to not being an expert on how 64 vs 32b
> ioctl compat stuff is handled or what the issues going from 32->64b
> are. If there are some additional considerations that should be taken
> care of, then now is the time. So far I don't have any pointer fields
> in any of the ioctl structs. Beyond that, I'm not entirely sure what
> else needs to be done, but would appreciate any pointers to docs about
> how the compat stuff works.
>
> BR,
> -R
>
I've actually avoided writing compat ioctl code myself, by trying to
make sure that structures look identical in the 64-bit and 32-bit x86
ABIs, but the compat code is there to translate pointers and to overcome
alignment incompatibilities.
A good way to at least try to avoid having to maintain compat code once
the 64-bit ABI shows up is to make sure that 64-bit scalars and embedded
structures are placed on 64-bit boundaries, padding if necessary, and to
make sure (using padding) that struct sizes are always multiples of 64 bits.
But since there is no 64-bit ARM yet, it might be better to rely on
using compat code in the future than on making guesses about alignment
restrictions of the ABI...
/Thomas
next prev parent reply other threads:[~2011-09-18 20:02 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-17 21:32 [PATCH] RFCv2: omapdrm DRM/KMS driver for TI OMAP platforms Rob Clark
2011-09-18 10:23 ` Daniel Vetter
2011-09-18 15:31 ` Rob Clark
2011-09-18 15:55 ` Daniel Vetter
2011-09-18 18:50 ` Rob Clark
2011-09-18 19:36 ` Thomas Hellstrom
2011-09-18 19:50 ` Rob Clark
2011-09-18 20:00 ` Thomas Hellstrom [this message]
2011-09-18 20:15 ` Rob Clark
2011-09-18 20:31 ` Thomas Hellstrom
2011-09-18 21:03 ` Rob Clark
2011-09-19 7:44 ` Inki Dae
2011-09-19 13:14 ` Rob Clark
2011-09-21 22:32 ` Konrad Rzeszutek Wilk
2011-09-22 20:21 ` Rob Clark
2011-09-26 13:55 ` Konrad Rzeszutek Wilk
2011-09-26 19:21 ` Konrad Rzeszutek Wilk
2011-10-14 14:03 ` Rob Clark
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=4E764DD1.2060404@shipmail.org \
--to=thomas@shipmail.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=inki.dae@samsung.com \
--cc=patches@linaro.org \
--cc=rob.clark@linaro.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.