[PATCH v3 06/12] memory: mvebu-devbus: Remove address decoding window workaround

Jason Cooper jason at lakedaemon.net
Tue Jun 18 21:39:20 EST 2013


On Tue, Jun 18, 2013 at 08:25:31AM -0300, Ezequiel Garcia wrote:
> Now that mbus device tree binding has been introduced, remove the address
> decoding window management from this driver.
> A suitable 'ranges' entry should be added to the devbus-compatible node in
> the device tree, as described by the mbus binding documentation.
> 
> Signed-off-by: Ezequiel Garcia <ezequiel.garcia at free-electrons.com>
> ---
>  drivers/memory/mvebu-devbus.c | 64 ++-----------------------------------------
>  1 file changed, 2 insertions(+), 62 deletions(-)

Unfortunately, the patch adding mvebu-devbus is going through gregkh's
tree.  Either this patch needs to wait for v3.12, or ask Greg if he can
take this one.

thx,

Jason.

> 
> diff --git a/drivers/memory/mvebu-devbus.c b/drivers/memory/mvebu-devbus.c
> index 978e8e3..94c9248 100644
> --- a/drivers/memory/mvebu-devbus.c
> +++ b/drivers/memory/mvebu-devbus.c
> @@ -208,16 +208,11 @@ static int mvebu_devbus_probe(struct platform_device *pdev)
>  {
>  	struct device *dev = &pdev->dev;
>  	struct device_node *node = pdev->dev.of_node;
> -	struct device_node *parent;
>  	struct devbus *devbus;
>  	struct resource *res;
>  	struct clk *clk;
>  	unsigned long rate;
> -	const __be32 *ranges;
> -	int err, cs;
> -	int addr_cells, p_addr_cells, size_cells;
> -	int ranges_len, tuple_len;
> -	u32 base, size;
> +	int err;
>  
>  	devbus = devm_kzalloc(&pdev->dev, sizeof(struct devbus), GFP_KERNEL);
>  	if (!devbus)
> @@ -248,68 +243,13 @@ static int mvebu_devbus_probe(struct platform_device *pdev)
>  		return err;
>  
>  	/*
> -	 * Allocate an address window for this device.
> -	 * If the device probing fails, then we won't be able to
> -	 * remove the allocated address decoding window.
> -	 *
> -	 * FIXME: This is only a temporary hack! We need to do this here
> -	 * because we still don't have device tree bindings for mbus.
> -	 * Once that support is added, we will declare these address windows
> -	 * statically in the device tree, and remove the window configuration
> -	 * from here.
> -	 */
> -
> -	/*
> -	 * Get the CS to choose the window string.
> -	 * This is a bit hacky, but it will be removed once the
> -	 * address windows are declared in the device tree.
> -	 */
> -	cs = (((unsigned long)devbus->base) % 0x400) / 8;
> -
> -	/*
> -	 * Parse 'ranges' property to obtain a (base,size) window tuple.
> -	 * This will be removed once the address windows
> -	 * are declared in the device tree.
> -	 */
> -	parent = of_get_parent(node);
> -	if (!parent)
> -		return -EINVAL;
> -
> -	p_addr_cells = of_n_addr_cells(parent);
> -	of_node_put(parent);
> -
> -	addr_cells = of_n_addr_cells(node);
> -	size_cells = of_n_size_cells(node);
> -	tuple_len = (p_addr_cells + addr_cells + size_cells) * sizeof(__be32);
> -
> -	ranges = of_get_property(node, "ranges", &ranges_len);
> -	if (ranges == NULL || ranges_len != tuple_len)
> -		return -EINVAL;
> -
> -	base = of_translate_address(node, ranges + addr_cells);
> -	if (base == OF_BAD_ADDR)
> -		return -EINVAL;
> -	size = of_read_number(ranges + addr_cells + p_addr_cells, size_cells);
> -
> -	/*
> -	 * Create an mbus address windows.
> -	 * FIXME: Remove this, together with the above code, once the
> -	 * address windows are declared in the device tree.
> -	 */
> -	err = mvebu_mbus_add_window(devbus_wins[cs], base, size);
> -	if (err < 0)
> -		return err;
> -
> -	/*
>  	 * We need to create a child device explicitly from here to
>  	 * guarantee that the child will be probed after the timing
>  	 * parameters for the bus are written.
>  	 */
>  	err = of_platform_populate(node, NULL, NULL, dev);
> -	if (err < 0) {
> -		mvebu_mbus_del_window(base, size);
> +	if (err < 0)
>  		return err;
> -	}
>  
>  	return 0;
>  }
> -- 
> 1.8.1.5
> 


More information about the devicetree-discuss mailing list