Message ID | 3d826d4600688ca3518713776ab5bd8a8fc9f20f.1450702954.git.jani.nikula@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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 --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 */
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(-)