diff mbox

[01/15] drm/i915/bios: add proper documentation for the Video BIOS Table (VBT)

Message ID 3d826d4600688ca3518713776ab5bd8a8fc9f20f.1450702954.git.jani.nikula@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Jani Nikula Dec. 21, 2015, 1:10 p.m. UTC
Add an overview and documentation for the VBT/BDB header structures.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 Documentation/DocBook/gpu.tmpl    |  6 ++++++
 drivers/gpu/drm/i915/intel_bios.c | 24 +++++++++++++++++++++++-
 drivers/gpu/drm/i915/intel_bios.h | 38 ++++++++++++++++++++++++++++----------
 3 files changed, 57 insertions(+), 11 deletions(-)

Comments

Jani Nikula Dec. 22, 2015, 12:40 p.m. UTC | #1
On Mon, 21 Dec 2015, Jani Nikula <jani.nikula@intel.com> wrote:
> Add an overview and documentation for the VBT/BDB header structures.
>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>

Pushed this one patch to drm-intel-next-queued with Daniel's irc
ack. Fixed a small grammatical error while at it (*a* BDB Header).

BR,
Jani.

> ---
>  Documentation/DocBook/gpu.tmpl    |  6 ++++++
>  drivers/gpu/drm/i915/intel_bios.c | 24 +++++++++++++++++++++++-
>  drivers/gpu/drm/i915/intel_bios.h | 38 ++++++++++++++++++++++++++++----------
>  3 files changed, 57 insertions(+), 11 deletions(-)
>
> diff --git a/Documentation/DocBook/gpu.tmpl b/Documentation/DocBook/gpu.tmpl
> index 6c6e81a9eaf4..f96a5d467f84 100644
> --- a/Documentation/DocBook/gpu.tmpl
> +++ b/Documentation/DocBook/gpu.tmpl
> @@ -3507,6 +3507,12 @@ int num_ioctls;</synopsis>
>  !Pdrivers/gpu/drm/i915/intel_csr.c csr support for dmc
>  !Idrivers/gpu/drm/i915/intel_csr.c
>        </sect2>
> +      <sect2>
> +	<title>Video BIOS Table (VBT)</title>
> +!Pdrivers/gpu/drm/i915/intel_bios.c Video BIOS Table (VBT)
> +!Idrivers/gpu/drm/i915/intel_bios.c
> +!Idrivers/gpu/drm/i915/intel_bios.h
> +      </sect2>
>      </sect1>
>  
>      <sect1>
> diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
> index eba3e0f87181..d487f602a10e 100644
> --- a/drivers/gpu/drm/i915/intel_bios.c
> +++ b/drivers/gpu/drm/i915/intel_bios.c
> @@ -31,6 +31,28 @@
>  #include "i915_drv.h"
>  #include "intel_bios.h"
>  
> +/**
> + * DOC: Video BIOS Table (VBT)
> + *
> + * The Video BIOS Table, or VBT, provides platform and board specific
> + * configuration information to the driver that is not discoverable or available
> + * through other means. The configuration is mostly related to display
> + * hardware. The VBT is available via the ACPI OpRegion or, on older systems, in
> + * the PCI ROM.
> + *
> + * The VBT consists of a VBT Header (defined as &struct vbt_header), BDB Header
> + * (&struct bdb_header), and a number of BIOS Data Blocks (BDB) that contain the
> + * actual configuration information. The VBT Header, and thus the VBT, begins
> + * with "$VBT" signature. The VBT Header contains the offset of the BDB
> + * Header. The data blocks are concatenated after the BDB Header. The data
> + * blocks have a 1-byte Block ID, 2-byte Block Size, and Block Size bytes of
> + * data. (Block 53, the MIPI Sequence Block is an exception.)
> + *
> + * The driver parses the VBT during load. The relevant information is stored in
> + * driver private data for ease of use, and the actual VBT is not read after
> + * that.
> + */
> +
>  #define	SLAVE_ADDR1	0x70
>  #define	SLAVE_ADDR2	0x72
>  
> @@ -1285,7 +1307,7 @@ static const struct vbt_header *find_vbt(void __iomem *bios, size_t size)
>  
>  /**
>   * intel_bios_init - find VBT and initialize settings from the BIOS
> - * @dev: DRM device
> + * @dev_priv: i915 device instance
>   *
>   * Loads the Video BIOS and checks that the VBT exists.  Sets scratch registers
>   * to appropriate values.
> diff --git a/drivers/gpu/drm/i915/intel_bios.h b/drivers/gpu/drm/i915/intel_bios.h
> index 54eac1003a1e..2dc46a98c332 100644
> --- a/drivers/gpu/drm/i915/intel_bios.h
> +++ b/drivers/gpu/drm/i915/intel_bios.h
> @@ -28,22 +28,40 @@
>  #ifndef _I830_BIOS_H_
>  #define _I830_BIOS_H_
>  
> +/**
> + * struct vbt_header - VBT Header structure
> + * @signature:		VBT signature, always starts with "$VBT"
> + * @version:		Version of this structure
> + * @header_size:	Size of this structure
> + * @vbt_size:		Size of VBT (VBT Header, BDB Header and data blocks)
> + * @vbt_checksum:	Checksum
> + * @reserved0:		Reserved
> + * @bdb_offset:		Offset of &struct bdb_header from beginning of VBT
> + * @aim_offset:		Offsets of add-in data blocks from beginning of VBT
> + */
>  struct vbt_header {
> -	u8 signature[20];		/**< Always starts with 'VBT$' */
> -	u16 version;			/**< decimal */
> -	u16 header_size;		/**< in bytes */
> -	u16 vbt_size;			/**< in bytes */
> +	u8 signature[20];
> +	u16 version;
> +	u16 header_size;
> +	u16 vbt_size;
>  	u8 vbt_checksum;
>  	u8 reserved0;
> -	u32 bdb_offset;			/**< from beginning of VBT */
> -	u32 aim_offset[4];		/**< from beginning of VBT */
> +	u32 bdb_offset;
> +	u32 aim_offset[4];
>  } __packed;
>  
> +/**
> + * struct bdb_header - BDB Header structure
> + * @signature:		BDB signature "BIOS_DATA_BLOCK"
> + * @version:		Version of the data block definitions
> + * @header_size:	Size of this structure
> + * @bdb_size:		Size of BDB (BDB Header and data blocks)
> + */
>  struct bdb_header {
> -	u8 signature[16];		/**< Always 'BIOS_DATA_BLOCK' */
> -	u16 version;			/**< decimal */
> -	u16 header_size;		/**< in bytes */
> -	u16 bdb_size;			/**< in bytes */
> +	u8 signature[16];
> +	u16 version;
> +	u16 header_size;
> +	u16 bdb_size;
>  } __packed;
>  
>  /* strictly speaking, this is a "skip" block, but it has interesting info */
diff mbox

Patch

diff --git a/Documentation/DocBook/gpu.tmpl b/Documentation/DocBook/gpu.tmpl
index 6c6e81a9eaf4..f96a5d467f84 100644
--- a/Documentation/DocBook/gpu.tmpl
+++ b/Documentation/DocBook/gpu.tmpl
@@ -3507,6 +3507,12 @@  int num_ioctls;</synopsis>
 !Pdrivers/gpu/drm/i915/intel_csr.c csr support for dmc
 !Idrivers/gpu/drm/i915/intel_csr.c
       </sect2>
+      <sect2>
+	<title>Video BIOS Table (VBT)</title>
+!Pdrivers/gpu/drm/i915/intel_bios.c Video BIOS Table (VBT)
+!Idrivers/gpu/drm/i915/intel_bios.c
+!Idrivers/gpu/drm/i915/intel_bios.h
+      </sect2>
     </sect1>
 
     <sect1>
diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
index eba3e0f87181..d487f602a10e 100644
--- a/drivers/gpu/drm/i915/intel_bios.c
+++ b/drivers/gpu/drm/i915/intel_bios.c
@@ -31,6 +31,28 @@ 
 #include "i915_drv.h"
 #include "intel_bios.h"
 
+/**
+ * DOC: Video BIOS Table (VBT)
+ *
+ * The Video BIOS Table, or VBT, provides platform and board specific
+ * configuration information to the driver that is not discoverable or available
+ * through other means. The configuration is mostly related to display
+ * hardware. The VBT is available via the ACPI OpRegion or, on older systems, in
+ * the PCI ROM.
+ *
+ * The VBT consists of a VBT Header (defined as &struct vbt_header), BDB Header
+ * (&struct bdb_header), and a number of BIOS Data Blocks (BDB) that contain the
+ * actual configuration information. The VBT Header, and thus the VBT, begins
+ * with "$VBT" signature. The VBT Header contains the offset of the BDB
+ * Header. The data blocks are concatenated after the BDB Header. The data
+ * blocks have a 1-byte Block ID, 2-byte Block Size, and Block Size bytes of
+ * data. (Block 53, the MIPI Sequence Block is an exception.)
+ *
+ * The driver parses the VBT during load. The relevant information is stored in
+ * driver private data for ease of use, and the actual VBT is not read after
+ * that.
+ */
+
 #define	SLAVE_ADDR1	0x70
 #define	SLAVE_ADDR2	0x72
 
@@ -1285,7 +1307,7 @@  static const struct vbt_header *find_vbt(void __iomem *bios, size_t size)
 
 /**
  * intel_bios_init - find VBT and initialize settings from the BIOS
- * @dev: DRM device
+ * @dev_priv: i915 device instance
  *
  * Loads the Video BIOS and checks that the VBT exists.  Sets scratch registers
  * to appropriate values.
diff --git a/drivers/gpu/drm/i915/intel_bios.h b/drivers/gpu/drm/i915/intel_bios.h
index 54eac1003a1e..2dc46a98c332 100644
--- a/drivers/gpu/drm/i915/intel_bios.h
+++ b/drivers/gpu/drm/i915/intel_bios.h
@@ -28,22 +28,40 @@ 
 #ifndef _I830_BIOS_H_
 #define _I830_BIOS_H_
 
+/**
+ * struct vbt_header - VBT Header structure
+ * @signature:		VBT signature, always starts with "$VBT"
+ * @version:		Version of this structure
+ * @header_size:	Size of this structure
+ * @vbt_size:		Size of VBT (VBT Header, BDB Header and data blocks)
+ * @vbt_checksum:	Checksum
+ * @reserved0:		Reserved
+ * @bdb_offset:		Offset of &struct bdb_header from beginning of VBT
+ * @aim_offset:		Offsets of add-in data blocks from beginning of VBT
+ */
 struct vbt_header {
-	u8 signature[20];		/**< Always starts with 'VBT$' */
-	u16 version;			/**< decimal */
-	u16 header_size;		/**< in bytes */
-	u16 vbt_size;			/**< in bytes */
+	u8 signature[20];
+	u16 version;
+	u16 header_size;
+	u16 vbt_size;
 	u8 vbt_checksum;
 	u8 reserved0;
-	u32 bdb_offset;			/**< from beginning of VBT */
-	u32 aim_offset[4];		/**< from beginning of VBT */
+	u32 bdb_offset;
+	u32 aim_offset[4];
 } __packed;
 
+/**
+ * struct bdb_header - BDB Header structure
+ * @signature:		BDB signature "BIOS_DATA_BLOCK"
+ * @version:		Version of the data block definitions
+ * @header_size:	Size of this structure
+ * @bdb_size:		Size of BDB (BDB Header and data blocks)
+ */
 struct bdb_header {
-	u8 signature[16];		/**< Always 'BIOS_DATA_BLOCK' */
-	u16 version;			/**< decimal */
-	u16 header_size;		/**< in bytes */
-	u16 bdb_size;			/**< in bytes */
+	u8 signature[16];
+	u16 version;
+	u16 header_size;
+	u16 bdb_size;
 } __packed;
 
 /* strictly speaking, this is a "skip" block, but it has interesting info */