diff options
Diffstat (limited to 'target/linux/mvebu/patches-3.10/0037-memory-mvebu-devbus-Remove-address-decoding-window-w.patch')
-rw-r--r-- | target/linux/mvebu/patches-3.10/0037-memory-mvebu-devbus-Remove-address-decoding-window-w.patch | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/target/linux/mvebu/patches-3.10/0037-memory-mvebu-devbus-Remove-address-decoding-window-w.patch b/target/linux/mvebu/patches-3.10/0037-memory-mvebu-devbus-Remove-address-decoding-window-w.patch new file mode 100644 index 0000000..1983016 --- /dev/null +++ b/target/linux/mvebu/patches-3.10/0037-memory-mvebu-devbus-Remove-address-decoding-window-w.patch @@ -0,0 +1,109 @@ +From 9760aafa716292050a96d71a4bd7bd4e66053975 Mon Sep 17 00:00:00 2001 +From: Ezequiel Garcia <ezequiel.garcia@free-electrons.com> +Date: Tue, 21 May 2013 10:24:48 -0300 +Subject: [PATCH 037/203] memory: mvebu-devbus: Remove address decoding window + workaround + +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. + +Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> +Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com> +Tested-by: Andrew Lunn <andrew@lunn.ch> +Tested-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> +--- + drivers/memory/mvebu-devbus.c | 64 ++----------------------------------------- + 1 file changed, 2 insertions(+), 62 deletions(-) + +--- a/drivers/memory/mvebu-devbus.c ++++ b/drivers/memory/mvebu-devbus.c +@@ -208,16 +208,11 @@ static int mvebu_devbus_probe(struct pla + { + 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 pla + 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; + } |