[U-Boot] [PATCH v4 7/7] cmd: Add bind/unbind commands to bind a device to a driver from the command line

Stephen Warren swarren at wwwdotorg.org
Mon Aug 20 21:44:02 UTC 2018


On 08/09/2018 08:17 AM, Jean-Jacques Hiblot wrote:
> In some cases it can be useful to be able to bind a device to a driver from
> the command line.
> The obvious example is for versatile devices such as USB gadget.
> Another use case is when the devices are not yet ready at startup and
> require some setup before the drivers are bound (ex: FPGA which bitsream is
> fetched from a mass storage or ethernet)
> 
> usage example:
> 
> bind usb_dev_generic 0 usb_ether
> unbind usb_dev_generic 0 usb_ether
> or
> unbind eth 1
> 
> bind /ocp/omap_dwc3 at 48380000/usb at 48390000 usb_ether
> unbind /ocp/omap_dwc3 at 48380000/usb at 48390000

> diff --git a/test/py/tests/test_bind.py b/test/py/tests/test_bind.py

> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved.

That line looks wrong.

> +def in_tree(response, name, uclass, drv, depth, last_child):
> +	lines = [x.strip() for x in response.splitlines()]
> +	leaf = ' ' * 4 * depth;
> +	if not last_child:
> +		leaf = leaf + '\|'
> +	else:
> +		leaf = leaf + '`'
> +	leaf = leaf + '-- ' + name
> +	line = ' *{:10.10}  [0-9]*  \[ [ +] \]   {:10.10}  {}$'.format(uclass, drv,leaf)

Does Python 2 support that interpolation format? test/py should support 
both Python 2 and 3.

> + at pytest.mark.buildconfigspec('cmd_bind')
> +def test_bind_unbind_with_node(u_boot_console):
> +
> +	#bind /bind-test. Device should come up as well as its children
> +	response = u_boot_console.run_command("bind  /bind-test generic_simple_bus")

Nit: There are 2 spaces after "bind".

> +	#Unbind child #2. No error expected and all devices should be there except for bind-test-child2
...
> +	assert "bind-test-child2" not in tree
> +
> +
> +	#Bind child #2. No error expected and all devices should be there

Nit: No need for 2 blank lines there.

> +	#try binding invalid node with valid driver
> +	response = u_boot_console.run_command("bind  /not-a-valid-node generic_simple_bus")
> +	assert response != ''

Should this check for a specific (partial) error message or format of 
message?

> +	#bind /bind-test. Device should come up as well as its children
...
> +	response = u_boot_console.run_command("unbind  /bind-test")
> +	assert response == ''

Shouldn't this validate the dm tree output right at the end too?

> +def get_next_line(tree, name):
> +	treelines = [x.strip() for x in tree.splitlines() if x.strip()]
> +	child_line = ""
> +	for idx, line in enumerate(treelines):
> +		if ("-- " + name) in line:
> +			try:
> +				child_line = treelines[idx+1]
> +			except:
> +				pass

Squashing all exceptions seems a little drastic. What exceptions happen 
and why?

> +
> + at pytest.mark.buildconfigspec('cmd_bind')
> +def test_bind_unbind_with_uclass(u_boot_console):
...
> +	#check that the child is there and its uclass/index pair is right
> +	tree = u_boot_console.run_command("dm tree")
> +	treelines = [x.strip() for x in tree.splitlines() if x.strip()]

I don't /think/ treelines is used anywhere in this function?


More information about the U-Boot mailing list