[Intel-gfx] [RFC Patch 1/3] DRM/I915: parse child device from VBT

Jesse Barnes jbarnes at virtuousgeek.org
Fri Aug 7 19:02:18 CEST 2009


On Fri,  7 Aug 2009 10:55:17 +0800
yakui.zhao at intel.com wrote:

> From: Zhao Yakui <yakui.zhao at intel.com>
> 
> Parse the child device from VBT.

Can you make the changelog a bit more verbose?  What types of child
devices are available?  On what ranges of chipsets?  Just a little bit
of description for someone browsing the history...

>  	if (drm_core_check_feature(dev, DRIVER_MODESET)) {
> +		dev_priv->child_dev = NULL;
> +		dev_priv->child_dev_num = 0;

Not needed, the dev_priv is allocated and zeroed already.

  
> +static void
> +parse_device_mapping_from_vbt(struct drm_i915_private *dev_priv,
> +		       struct bdb_header *bdb)

The _vbt suffix is redundant since the whole file deals with VBT
parsing.  So you can just call it "parse_child_devices" or something
similar.

> +{
> +	struct bdb_general_definitions *p_defs;
> +	struct child_device_config *p_child, *child_dev_ptr;
> +	int i, child_device_num, count;
> +	u16	block_size, *block_ptr;
> +
> +	p_defs = find_section(bdb, BDB_GENERAL_DEFINITIONS);
> +	if (!p_defs) {
> +		DRM_DEBUG("No general definition block is found\n");
> +		return;
> +	}

Eric may have already mentioned this, but we don't do Hungarian
notation in the kernel, so you can drop the "p_" prefixes to pointer
types.  We should probably clean up parse_sdvo_Device_mapping at some
point too (maybe this code was initially copy & pasted from that?).

> +	/* judge whether the size of child device meets the
> requirements.
> +	 * If the child device size obtained from general definition
> block
> +	 * is different with sizeof(struct child_device_config),
> skip the
> +	 * parsing of sdvo device info
> +	 */
> +	if (p_defs->child_dev_size != sizeof(*p_child)) {
> +		/* different child dev size . Ignore it */
> +		DRM_DEBUG("different child size is found.
> Invalid.\n");
> +		return;
> +	}

The message should be "Unsupported child device size, ignoring.\n".

> +	/* get the block size of general definitions */
> +	block_ptr = (u16 *)((char *)p_defs - 2);
> +	block_size = *block_ptr;
> +	/* get the number of child device */
> +	child_device_num = (block_size - sizeof(*p_defs)) /
> +				sizeof(*p_child);
> +	count = 0;
> +	/* get the number of child device that is present */
> +	for (i = 0; i < child_device_num; i++) {
> +		p_child = &(p_defs->devices[i]);
> +		if (!p_child->device_type) {
> +			/* skip the device block if device type is
> invalid */
> +			continue;
> +		}
> +		count++;
> +	}
> +	if (!count) {
> +		DRM_DEBUG("no child dev is parsed from VBT \n");
> +		return;
> +	}

More wordsmithing: "VBT contains no child devices.\n"

>  /**
>   * intel_init_bios - initialize VBIOS settings & find VBT
>   * @dev: DRM device
> @@ -365,6 +428,7 @@
>  	parse_lfp_panel_data(dev_priv, bdb);
>  	parse_sdvo_panel_data(dev_priv, bdb);
>  	parse_sdvo_device_mapping(dev_priv, bdb);
> +	parse_device_mapping_from_vbt(dev_priv, bdb);
>  	parse_driver_features(dev_priv, bdb);
>  
>  	pci_unmap_rom(pdev, bios);

Do we know how reliable the child device structures are?  Should we
limit the parsing to G4x devices?

-- 
Jesse Barnes, Intel Open Source Technology Center



More information about the Intel-gfx mailing list