[PATCH v3 06/12] memory: mvebu-devbus: Remove address decoding window workaround
Jason Cooper
jason at lakedaemon.net
Tue Jun 18 07:39:20 EDT 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 linux-arm-kernel
mailing list