summaryrefslogtreecommitdiff
path: root/FAQ
blob: f99201a1f701940fca284e764f148e8c37144963 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
FAQ for xf86-video-armada
=========================

Q1. Why does xf86-video-armada Etnadrm backend require etna_viv's
    (aka libetnaviv) include files?

A1. xf86-video-armada's etnaviv backend is shared between the libetnaviv
    and etnadrm drivers.  The structure of these drivers is:

    Xorg -> etnaviv front end -> gpu command stream -> kernel interface

    The front end is common between etnadrm and etnaviv GPU drivers,
    and shares datastructures and function names with libetnaviv.  This
    means that both GPU drivers generate indentical GPU command streams
    for the same Xorg operations.

    The only parts that differ between the two backends is the kernel
    interface, which is responsible for submitting the command stream to
    the kernel, waiting for completion of these streams, and providing
    GPU buffer memory management.

    For etnaviv, we use the libetnaviv library, which requires certain
    structures to be used not only at the kernel interface level, but
    throughout the driver.

    For etnadrm, we use our own kernel interface which is binary
    compatible with libetnaviv.  Hence, libetnaviv headers are required
    when building etnadrm to maintain binary compatibility with
    libetnaviv.

    The alternative would be to maintain and build three entirely
    separate GPU backends - which is not desirable.  Having common code
    which generates exactly the same command stream means that when a
    bug is found, we can compare the behaviour of the DRM kernel
    support with Vivante's kernel support.

Q2. Do I need to build etna_viv (aka, libetnaviv) to build the etnadrm
    backend?

A2. No, it should not be necessary to build etna_viv or configure it
    when building only the etnadrm GPU backend.  xf86-video-armada only
    requires the libetnaviv include files in this case.  At the time of
    writing, these are:

      etnaviv/cmdstream.xml.h
      etnaviv/common.xml.h
      etnaviv/etna.h
      etnaviv/etna_bo.h
      etnaviv/etna_util.h
      etnaviv/state.xml.h
      etnaviv/state_2d.xml.h
      etnaviv/viv.h

Q3. Why does xf86-video-armada use libdrm_armada and not libdrm_etnaviv?

A3. libdrm_armada provides the DDX with the ability to interface with
    the KMS (display) side, it has almost nothing to do with the GPU
    drivers.  It provides efficient allocation of buffers for the KMS,
    and provides various features missing from the core libdrm that are
    necessary to interwork with the GPU drivers.

    libdrm_etnaviv is not used by the etnaviv DRM GPU driver as the
    libdrm_etnaviv interfaces are too restrictive to allow efficient
    command stream generation, lacks proper buffer caching for efficient
    buffer handling, and implementation would mean yours truely would
    need to maintain three separate GPU drivers for the same hardware.

Q4. Is the dependency on libdrm_armada going to be removed?

A4. Not any time soon.  The libdrm_armada is necessary for the KMS side
    as explained in Q3.

Q5. Is libdrm_etnaviv going to be integrated?

A5. As long as the DDX supports the libetnaviv (GALcore compatible) GPU
    backend, and libdrm_etnaviv suffers the problems mentioned in Q3,
    moving to libdrm_etnaviv would be a backwards step.