* [U-Boot] [PATCH v2 04/10] fdt: Add fdt_getprop_u32_default helpers
@ 2008-10-23 12:58 Kumar Gala
2008-10-23 12:58 ` [U-Boot] [PATCH v2 05/10] fdt: Added helper to set PCI dma-ranges property Kumar Gala
2008-10-23 13:08 ` [U-Boot] [PATCH v2 04/10] fdt: Add fdt_getprop_u32_default helpers Jerry Van Baren
0 siblings, 2 replies; 4+ messages in thread
From: Kumar Gala @ 2008-10-23 12:58 UTC (permalink / raw)
To: u-boot
Add helper functions to return find a node and return it's property
or a default value.
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
---
common/fdt_support.c | 27 +++++++++++++++++++++++++++
include/fdt_support.h | 2 ++
2 files changed, 29 insertions(+), 0 deletions(-)
diff --git a/common/fdt_support.c b/common/fdt_support.c
index 8ceeb0f..f430777 100644
--- a/common/fdt_support.c
+++ b/common/fdt_support.c
@@ -35,6 +35,33 @@
*/
DECLARE_GLOBAL_DATA_PTR;
+/**
+ * fdt_getprop_u32_default - Find a node and return it's property or a default
+ *
+ * @fdt: ptr to device tree
+ * @path: path of node
+ * @prop: property name
+ * @dflt: default value if the property isn't found
+ *
+ * Convenience function to find a node and return it's property or a
+ * default value if it doesn't exist.
+ */
+u32 fdt_getprop_u32_default(void *fdt, const char *path, const char *prop,
+ const u32 dflt)
+{
+ const u32 *val;
+ int off;
+
+ off = fdt_path_offset(fdt, path);
+ if (off < 0)
+ return dflt;
+
+ val = fdt_getprop(fdt, off, prop, NULL);
+ if (val)
+ return *val;
+ else
+ return dflt;
+}
/**
* fdt_find_and_setprop: Find a node and set it's property
diff --git a/include/fdt_support.h b/include/fdt_support.h
index ceaadc2..816c9d0 100644
--- a/include/fdt_support.h
+++ b/include/fdt_support.h
@@ -28,6 +28,8 @@
#include <fdt.h>
+u32 fdt_getprop_u32_default(void *fdt, const char *path, const char *prop,
+ const u32 dflt);
int fdt_chosen(void *fdt, int force);
int fdt_initrd(void *fdt, ulong initrd_start, ulong initrd_end, int force);
void do_fixup_by_path(void *fdt, const char *path, const char *prop,
--
1.5.5.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [U-Boot] [PATCH v2 05/10] fdt: Added helper to set PCI dma-ranges property
2008-10-23 12:58 [U-Boot] [PATCH v2 04/10] fdt: Add fdt_getprop_u32_default helpers Kumar Gala
@ 2008-10-23 12:58 ` Kumar Gala
2008-10-23 13:11 ` Jerry Van Baren
2008-10-23 13:08 ` [U-Boot] [PATCH v2 04/10] fdt: Add fdt_getprop_u32_default helpers Jerry Van Baren
1 sibling, 1 reply; 4+ messages in thread
From: Kumar Gala @ 2008-10-23 12:58 UTC (permalink / raw)
To: u-boot
Added fdt_pci_dma_ranges() that parses the pci_region info from the
struct pci_controller and populates the dma-ranges based on it.
The max # of windws/dma-ranges we support is 3 since on embedded
PowerPC based systems this is the max number of windows.
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
---
move to using fdt_getprop_u32_default
- k
common/fdt_support.c | 69 +++++++++++++++++++++++++++++++++++++++++++++++++
include/fdt_support.h | 5 +++
2 files changed, 74 insertions(+), 0 deletions(-)
diff --git a/common/fdt_support.c b/common/fdt_support.c
index f430777..d483d66 100644
--- a/common/fdt_support.c
+++ b/common/fdt_support.c
@@ -620,3 +620,72 @@ int fdt_resize(void *blob)
return actualsize;
}
+
+#ifdef CONFIG_PCI
+#define CONFIG_SYS_PCI_NR_INBOUND_WIN 3
+
+#define FDT_PCI_PREFETCH (0x40000000)
+#define FDT_PCI_MEM32 (0x02000000)
+#define FDT_PCI_IO (0x01000000)
+#define FDT_PCI_MEM64 (0x03000000)
+
+int fdt_pci_dma_ranges(void *blob, int phb_off, struct pci_controller *hose) {
+
+ int addrcell, sizecell, len, r;
+ u32 *dma_range;
+ /* sized based on pci addr cells, size-cells, & address-cells */
+ u32 dma_ranges[(3 + 2 + 2) * CONFIG_SYS_PCI_NR_INBOUND_WIN];
+
+ addrcell = fdt_getprop_u32_default(blob, "/", "#address-cells", 1);
+ sizecell = fdt_getprop_u32_default(blob, "/", "#size-cells", 1);
+
+ dma_range = &dma_ranges[0];
+ for (r = 0; r < hose->region_count; r++) {
+ u64 bus_start, phys_start, size;
+
+ /* skip if !PCI_REGION_MEMORY */
+ if (!(hose->regions[r].flags & PCI_REGION_MEMORY))
+ continue;
+
+ bus_start = (u64)hose->regions[r].bus_start;
+ phys_start = (u64)hose->regions[r].phys_start;
+ size = (u64)hose->regions[r].size;
+
+ dma_range[0] = 0;
+ if (size > 0x100000000ull)
+ dma_range[0] |= FDT_PCI_MEM64;
+ else
+ dma_range[0] |= FDT_PCI_MEM32;
+ if (hose->regions[r].flags & PCI_REGION_PREFETCH)
+ dma_range[0] |= FDT_PCI_PREFETCH;
+#ifdef CONFIG_SYS_PCI_64BIT
+ dma_range[1] = bus_start >> 32;
+#else
+ dma_range[1] = 0;
+#endif
+ dma_range[2] = bus_start & 0xffffffff;
+
+ if (addrcell == 2) {
+ dma_range[3] = phys_start >> 32;
+ dma_range[4] = phys_start & 0xffffffff;
+ } else {
+ dma_range[3] = phys_start & 0xffffffff;
+ }
+
+ if (sizecell == 2) {
+ dma_range[3 + addrcell + 0] = size >> 32;
+ dma_range[3 + addrcell + 1] = size & 0xffffffff;
+ } else {
+ dma_range[3 + addrcell + 0] = size & 0xffffffff;
+ }
+
+ dma_range += (3 + addrcell + sizecell);
+ }
+
+ len = dma_range - &dma_ranges[0];
+ if (len)
+ fdt_setprop(blob, phb_off, "dma-ranges", &dma_ranges[0], len*4);
+
+ return 0;
+}
+#endif
diff --git a/include/fdt_support.h b/include/fdt_support.h
index 816c9d0..6062df9 100644
--- a/include/fdt_support.h
+++ b/include/fdt_support.h
@@ -65,6 +65,11 @@ void fdt_fixup_crypto_node(void *blob, int sec_rev);
static inline void fdt_fixup_crypto_node(void *blob, int sec_rev) {}
#endif
+#ifdef CONFIG_PCI
+#include <pci.h>
+int fdt_pci_dma_ranges(void *blob, int phb_off, struct pci_controller *hose);
+#endif
+
#ifdef CONFIG_OF_BOARD_SETUP
void ft_board_setup(void *blob, bd_t *bd);
void ft_cpu_setup(void *blob, bd_t *bd);
--
1.5.5.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [U-Boot] [PATCH v2 04/10] fdt: Add fdt_getprop_u32_default helpers
2008-10-23 12:58 [U-Boot] [PATCH v2 04/10] fdt: Add fdt_getprop_u32_default helpers Kumar Gala
2008-10-23 12:58 ` [U-Boot] [PATCH v2 05/10] fdt: Added helper to set PCI dma-ranges property Kumar Gala
@ 2008-10-23 13:08 ` Jerry Van Baren
1 sibling, 0 replies; 4+ messages in thread
From: Jerry Van Baren @ 2008-10-23 13:08 UTC (permalink / raw)
To: u-boot
Kumar Gala wrote:
> Add helper functions to return find a node and return it's property
> or a default value.
>
> Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
> ---
> common/fdt_support.c | 27 +++++++++++++++++++++++++++
> include/fdt_support.h | 2 ++
> 2 files changed, 29 insertions(+), 0 deletions(-)
>
> diff --git a/common/fdt_support.c b/common/fdt_support.c
> index 8ceeb0f..f430777 100644
> --- a/common/fdt_support.c
> +++ b/common/fdt_support.c
> @@ -35,6 +35,33 @@
> */
> DECLARE_GLOBAL_DATA_PTR;
>
> +/**
> + * fdt_getprop_u32_default - Find a node and return it's property or a default
> + *
> + * @fdt: ptr to device tree
> + * @path: path of node
> + * @prop: property name
> + * @dflt: default value if the property isn't found
> + *
> + * Convenience function to find a node and return it's property or a
> + * default value if it doesn't exist.
> + */
> +u32 fdt_getprop_u32_default(void *fdt, const char *path, const char *prop,
> + const u32 dflt)
> +{
> + const u32 *val;
> + int off;
> +
> + off = fdt_path_offset(fdt, path);
> + if (off < 0)
> + return dflt;
> +
> + val = fdt_getprop(fdt, off, prop, NULL);
> + if (val)
> + return *val;
> + else
> + return dflt;
> +}
>
> /**
> * fdt_find_and_setprop: Find a node and set it's property
> diff --git a/include/fdt_support.h b/include/fdt_support.h
> index ceaadc2..816c9d0 100644
> --- a/include/fdt_support.h
> +++ b/include/fdt_support.h
> @@ -28,6 +28,8 @@
>
> #include <fdt.h>
>
> +u32 fdt_getprop_u32_default(void *fdt, const char *path, const char *prop,
> + const u32 dflt);
> int fdt_chosen(void *fdt, int force);
> int fdt_initrd(void *fdt, ulong initrd_start, ulong initrd_end, int force);
> void do_fixup_by_path(void *fdt, const char *path, const char *prop,
Acked-by: Gerald Van Baren <vanbaren@cideas.com>
Thanks!
gvb
^ permalink raw reply [flat|nested] 4+ messages in thread
* [U-Boot] [PATCH v2 05/10] fdt: Added helper to set PCI dma-ranges property
2008-10-23 12:58 ` [U-Boot] [PATCH v2 05/10] fdt: Added helper to set PCI dma-ranges property Kumar Gala
@ 2008-10-23 13:11 ` Jerry Van Baren
0 siblings, 0 replies; 4+ messages in thread
From: Jerry Van Baren @ 2008-10-23 13:11 UTC (permalink / raw)
To: u-boot
Kumar Gala wrote:
> Added fdt_pci_dma_ranges() that parses the pci_region info from the
> struct pci_controller and populates the dma-ranges based on it.
>
> The max # of windws/dma-ranges we support is 3 since on embedded
> PowerPC based systems this is the max number of windows.
>
> Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
> ---
>
> move to using fdt_getprop_u32_default
>
> - k
>
> common/fdt_support.c | 69 +++++++++++++++++++++++++++++++++++++++++++++++++
> include/fdt_support.h | 5 +++
> 2 files changed, 74 insertions(+), 0 deletions(-)
>
> diff --git a/common/fdt_support.c b/common/fdt_support.c
> index f430777..d483d66 100644
> --- a/common/fdt_support.c
> +++ b/common/fdt_support.c
[snip]
> diff --git a/include/fdt_support.h b/include/fdt_support.h
> index 816c9d0..6062df9 100644
> --- a/include/fdt_support.h
> +++ b/include/fdt_support.h
[snip]
I'm not really authoritative on the PCI changes, but it looks good to me
so I'm OK with adding this to fdt_support.[ch].
Acked-by: Gerald Van Baren <vanbaren@cideas.com>
Thanks,
gvb
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2008-10-23 13:11 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-10-23 12:58 [U-Boot] [PATCH v2 04/10] fdt: Add fdt_getprop_u32_default helpers Kumar Gala
2008-10-23 12:58 ` [U-Boot] [PATCH v2 05/10] fdt: Added helper to set PCI dma-ranges property Kumar Gala
2008-10-23 13:11 ` Jerry Van Baren
2008-10-23 13:08 ` [U-Boot] [PATCH v2 04/10] fdt: Add fdt_getprop_u32_default helpers Jerry Van Baren
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.