Re: linux-next: sparc tree build failure

Kristoffer Glembo
2009-11-13T10:37:42Z

I noticed just now that this patch broke the driver on LEON SPARC. It
does not find the root node by using of_find_node_by_name(NULL, "/").

I'm not sure whether this is because we build our OF tree wrong or if
it is an incorrect way of doing things. But if I instead change it to
of_find_node_by_path("/") it works fine.

Signed-off-by: Kristoffer Glembo <kristoffer@gaisler.com>

---
drivers/serial/apbuart.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/serial/apbuart.c b/drivers/serial/apbuart.c
index a1e9503..fe91319 100644
--- a/drivers/serial/apbuart.c
+++ b/drivers/serial/apbuart.c
@@ -609,7 +609,7 @@ static void grlib_apbuart_configure(void)
return;

/* Get bus frequency */
- rp = of_find_node_by_name(NULL, "/");
+ rp = of_find_node_by_path("/");
rp = of_get_next_child(rp, NULL);
prop = of_get_property(rp, "clock-frequency", NULL);
freq_khz = *prop;
--
1.5.2.2

David Miller wrote:
>
> Hmm, it took a tiny bit more than that :-) Here's what I commited
> to fix this, thanks.
>
> apbuart: Kill dependency on deprecated Sparc-only PROM interfaces.
>
> Use the proper modern OF ones instead.
>
> Noticed by Stephen Rothwell.
>
> Signed-off-by: David S. Miller <davem@davemloft.net>
> ---
> drivers/serial/apbuart.c | 12 ++++++------
> 1 files changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/serial/apbuart.c b/drivers/serial/apbuart.c
> index c7883a3..5f9dec3 100644
> --- a/drivers/serial/apbuart.c
> +++ b/drivers/serial/apbuart.c
> @@ -29,7 +29,6 @@
> #include <linux/io.h>
> #include <linux/serial_core.h>
> #include <asm/irq.h>
> -#include <asm/oplib.h>
>
> #include "apbuart.h"
>
> @@ -596,10 +595,9 @@ static struct of_platform_driver grlib_apbuart_of_driver = {
> static void grlib_apbuart_configure(void)
> {
> static int enum_done;
> - struct device_node *np;
> + struct device_node *np, *rp;
> struct uart_port *port = NULL;
> -
> - int node;
> + const u32 *prop;
> int freq_khz;
> int v = 0, d = 0;
> unsigned int addr;
> @@ -610,8 +608,10 @@ static void grlib_apbuart_configure(void)
> return;
>
> /* Get bus frequency */
> - node = prom_getchild(prom_root_node);
> - freq_khz = prom_getint(node, "clock-frequency");
> + rp = of_find_node_by_name(NULL, "/");
> + rp = of_get_next_child(rp, NULL);
> + prop = of_get_property(rp, "clock-frequency", NULL);
> + freq_khz = *prop;
>
> line = 0;
> for_each_matching_node(np, apbuart_match) {