of.c 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. *
  4. * Copyright (C) 2008 Imre Kaloz <[email protected]>
  5. * Copyright (C) 2008-2009 Gabor Juhos <[email protected]>
  6. * Copyright (C) 2013 John Crispin <[email protected]>
  7. */
  8. #include <linux/io.h>
  9. #include <linux/clk.h>
  10. #include <linux/export.h>
  11. #include <linux/init.h>
  12. #include <linux/sizes.h>
  13. #include <linux/of_fdt.h>
  14. #include <linux/kernel.h>
  15. #include <linux/memblock.h>
  16. #include <linux/of_platform.h>
  17. #include <linux/of_address.h>
  18. #include <asm/reboot.h>
  19. #include <asm/bootinfo.h>
  20. #include <asm/addrspace.h>
  21. #include <asm/prom.h>
  22. #include <asm/mach-ralink/ralink_regs.h>
  23. #include "common.h"
  24. __iomem void *rt_sysc_membase;
  25. __iomem void *rt_memc_membase;
  26. EXPORT_SYMBOL_GPL(rt_sysc_membase);
  27. __iomem void *plat_of_remap_node(const char *node)
  28. {
  29. struct resource res;
  30. struct device_node *np;
  31. np = of_find_compatible_node(NULL, NULL, node);
  32. if (!np)
  33. panic("Failed to find %s node", node);
  34. if (of_address_to_resource(np, 0, &res))
  35. panic("Failed to get resource for %s", node);
  36. of_node_put(np);
  37. if (!request_mem_region(res.start,
  38. resource_size(&res),
  39. res.name))
  40. panic("Failed to request resources for %s", node);
  41. return ioremap(res.start, resource_size(&res));
  42. }
  43. void __init plat_mem_setup(void)
  44. {
  45. void *dtb;
  46. set_io_port_base(KSEG1);
  47. /*
  48. * Load the builtin devicetree. This causes the chosen node to be
  49. * parsed resulting in our memory appearing.
  50. */
  51. dtb = get_fdt();
  52. __dt_setup_arch(dtb);
  53. if (early_init_dt_scan_memory())
  54. return;
  55. if (soc_info.mem_detect)
  56. soc_info.mem_detect();
  57. else if (soc_info.mem_size)
  58. memblock_add(soc_info.mem_base, soc_info.mem_size * SZ_1M);
  59. else
  60. detect_memory_region(soc_info.mem_base,
  61. soc_info.mem_size_min * SZ_1M,
  62. soc_info.mem_size_max * SZ_1M);
  63. }
  64. static int __init plat_of_setup(void)
  65. {
  66. __dt_register_buses(soc_info.compatible, "palmbus");
  67. /* make sure that the reset controller is setup early */
  68. if (ralink_soc != MT762X_SOC_MT7621AT)
  69. ralink_rst_init();
  70. return 0;
  71. }
  72. arch_initcall(plat_of_setup);