diff options
| -rw-r--r-- | arch/microblaze/kernel/prom.c | 23 | ||||
| -rw-r--r-- | arch/powerpc/kernel/prom.c | 24 | ||||
| -rw-r--r-- | drivers/of/fdt.c | 26 | ||||
| -rw-r--r-- | include/linux/of_fdt.h | 6 |
4 files changed, 32 insertions, 47 deletions
diff --git a/arch/microblaze/kernel/prom.c b/arch/microblaze/kernel/prom.c index 7959495b1d00..189179a9b554 100644 --- a/arch/microblaze/kernel/prom.c +++ b/arch/microblaze/kernel/prom.c | |||
| @@ -42,9 +42,6 @@ | |||
| 42 | #include <asm/sections.h> | 42 | #include <asm/sections.h> |
| 43 | #include <asm/pci-bridge.h> | 43 | #include <asm/pci-bridge.h> |
| 44 | 44 | ||
| 45 | static int __initdata dt_root_addr_cells; | ||
| 46 | static int __initdata dt_root_size_cells; | ||
| 47 | |||
| 48 | typedef u32 cell_t; | 45 | typedef u32 cell_t; |
| 49 | 46 | ||
| 50 | /* export that to outside world */ | 47 | /* export that to outside world */ |
| @@ -158,26 +155,6 @@ static int __init early_init_dt_scan_chosen(unsigned long node, | |||
| 158 | return 1; | 155 | return 1; |
| 159 | } | 156 | } |
| 160 | 157 | ||
| 161 | static int __init early_init_dt_scan_root(unsigned long node, | ||
| 162 | const char *uname, int depth, void *data) | ||
| 163 | { | ||
| 164 | u32 *prop; | ||
| 165 | |||
| 166 | if (depth != 0) | ||
| 167 | return 0; | ||
| 168 | |||
| 169 | prop = of_get_flat_dt_prop(node, "#size-cells", NULL); | ||
| 170 | dt_root_size_cells = (prop == NULL) ? 1 : *prop; | ||
| 171 | pr_debug("dt_root_size_cells = %x\n", dt_root_size_cells); | ||
| 172 | |||
| 173 | prop = of_get_flat_dt_prop(node, "#address-cells", NULL); | ||
| 174 | dt_root_addr_cells = (prop == NULL) ? 2 : *prop; | ||
| 175 | pr_debug("dt_root_addr_cells = %x\n", dt_root_addr_cells); | ||
| 176 | |||
| 177 | /* break now */ | ||
| 178 | return 1; | ||
| 179 | } | ||
| 180 | |||
| 181 | static u64 __init dt_mem_next_cell(int s, cell_t **cellp) | 158 | static u64 __init dt_mem_next_cell(int s, cell_t **cellp) |
| 182 | { | 159 | { |
| 183 | cell_t *p = *cellp; | 160 | cell_t *p = *cellp; |
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c index 1ecd6c6ecabd..78f65a4d8b03 100644 --- a/arch/powerpc/kernel/prom.c +++ b/arch/powerpc/kernel/prom.c | |||
| @@ -61,10 +61,6 @@ | |||
| 61 | #define DBG(fmt...) | 61 | #define DBG(fmt...) |
| 62 | #endif | 62 | #endif |
| 63 | 63 | ||
| 64 | |||
| 65 | static int __initdata dt_root_addr_cells; | ||
| 66 | static int __initdata dt_root_size_cells; | ||
| 67 | |||
| 68 | #ifdef CONFIG_PPC64 | 64 | #ifdef CONFIG_PPC64 |
| 69 | int __initdata iommu_is_off; | 65 | int __initdata iommu_is_off; |
| 70 | int __initdata iommu_force_on; | 66 | int __initdata iommu_force_on; |
| @@ -436,26 +432,6 @@ static int __init early_init_dt_scan_chosen(unsigned long node, | |||
| 436 | return 1; | 432 | return 1; |
| 437 | } | 433 | } |
| 438 | 434 | ||
| 439 | static int __init early_init_dt_scan_root(unsigned long node, | ||
| 440 | const char *uname, int depth, void *data) | ||
| 441 | { | ||
| 442 | u32 *prop; | ||
| 443 | |||
| 444 | if (depth != 0) | ||
| 445 | return 0; | ||
| 446 | |||
| 447 | prop = of_get_flat_dt_prop(node, "#size-cells", NULL); | ||
| 448 | dt_root_size_cells = (prop == NULL) ? 1 : *prop; | ||
| 449 | DBG("dt_root_size_cells = %x\n", dt_root_size_cells); | ||
| 450 | |||
| 451 | prop = of_get_flat_dt_prop(node, "#address-cells", NULL); | ||
| 452 | dt_root_addr_cells = (prop == NULL) ? 2 : *prop; | ||
| 453 | DBG("dt_root_addr_cells = %x\n", dt_root_addr_cells); | ||
| 454 | |||
| 455 | /* break now */ | ||
| 456 | return 1; | ||
| 457 | } | ||
| 458 | |||
| 459 | static u64 __init dt_mem_next_cell(int s, cell_t **cellp) | 435 | static u64 __init dt_mem_next_cell(int s, cell_t **cellp) |
| 460 | { | 436 | { |
| 461 | cell_t *p = *cellp; | 437 | cell_t *p = *cellp; |
diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index 6ad98e85dc93..be200be47269 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c | |||
| @@ -15,6 +15,9 @@ | |||
| 15 | #include <linux/of.h> | 15 | #include <linux/of.h> |
| 16 | #include <linux/of_fdt.h> | 16 | #include <linux/of_fdt.h> |
| 17 | 17 | ||
| 18 | int __initdata dt_root_addr_cells; | ||
| 19 | int __initdata dt_root_size_cells; | ||
| 20 | |||
| 18 | struct boot_param_header *initial_boot_params; | 21 | struct boot_param_header *initial_boot_params; |
| 19 | 22 | ||
| 20 | char *find_flat_dt_string(u32 offset) | 23 | char *find_flat_dt_string(u32 offset) |
| @@ -407,6 +410,29 @@ inline void early_init_dt_check_for_initrd(unsigned long node) | |||
| 407 | #endif /* CONFIG_BLK_DEV_INITRD */ | 410 | #endif /* CONFIG_BLK_DEV_INITRD */ |
| 408 | 411 | ||
| 409 | /** | 412 | /** |
| 413 | * early_init_dt_scan_root - fetch the top level address and size cells | ||
| 414 | */ | ||
| 415 | int __init early_init_dt_scan_root(unsigned long node, const char *uname, | ||
| 416 | int depth, void *data) | ||
| 417 | { | ||
| 418 | u32 *prop; | ||
| 419 | |||
| 420 | if (depth != 0) | ||
| 421 | return 0; | ||
| 422 | |||
| 423 | prop = of_get_flat_dt_prop(node, "#size-cells", NULL); | ||
| 424 | dt_root_size_cells = (prop == NULL) ? 1 : *prop; | ||
| 425 | pr_debug("dt_root_size_cells = %x\n", dt_root_size_cells); | ||
| 426 | |||
| 427 | prop = of_get_flat_dt_prop(node, "#address-cells", NULL); | ||
| 428 | dt_root_addr_cells = (prop == NULL) ? 2 : *prop; | ||
| 429 | pr_debug("dt_root_addr_cells = %x\n", dt_root_addr_cells); | ||
| 430 | |||
| 431 | /* break now */ | ||
| 432 | return 1; | ||
| 433 | } | ||
| 434 | |||
| 435 | /** | ||
| 410 | * unflatten_device_tree - create tree of device_nodes from flat blob | 436 | * unflatten_device_tree - create tree of device_nodes from flat blob |
| 411 | * | 437 | * |
| 412 | * unflattens the device-tree passed by the firmware, creating the | 438 | * unflattens the device-tree passed by the firmware, creating the |
diff --git a/include/linux/of_fdt.h b/include/linux/of_fdt.h index ec2db8278c3f..828c3cdaea78 100644 --- a/include/linux/of_fdt.h +++ b/include/linux/of_fdt.h | |||
| @@ -58,6 +58,8 @@ struct boot_param_header { | |||
| 58 | }; | 58 | }; |
| 59 | 59 | ||
| 60 | /* TBD: Temporary export of fdt globals - remove when code fully merged */ | 60 | /* TBD: Temporary export of fdt globals - remove when code fully merged */ |
| 61 | extern int __initdata dt_root_addr_cells; | ||
| 62 | extern int __initdata dt_root_size_cells; | ||
| 61 | extern struct boot_param_header *initial_boot_params; | 63 | extern struct boot_param_header *initial_boot_params; |
| 62 | 64 | ||
| 63 | /* For scanning the flat device-tree at boot time */ | 65 | /* For scanning the flat device-tree at boot time */ |
| @@ -71,6 +73,10 @@ extern int of_flat_dt_is_compatible(unsigned long node, const char *name); | |||
| 71 | extern unsigned long of_get_flat_dt_root(void); | 73 | extern unsigned long of_get_flat_dt_root(void); |
| 72 | extern void early_init_dt_check_for_initrd(unsigned long node); | 74 | extern void early_init_dt_check_for_initrd(unsigned long node); |
| 73 | 75 | ||
| 76 | /* Early flat tree scan hooks */ | ||
| 77 | extern int early_init_dt_scan_root(unsigned long node, const char *uname, | ||
| 78 | int depth, void *data); | ||
| 79 | |||
| 74 | /* Other Prototypes */ | 80 | /* Other Prototypes */ |
| 75 | extern void finish_device_tree(void); | 81 | extern void finish_device_tree(void); |
| 76 | extern void unflatten_device_tree(void); | 82 | extern void unflatten_device_tree(void); |
