|
@@ -1697,3 +1697,90 @@ static void __init u300_assign_physmem(void)
|
|
|
|
|
|
for (i = 0; i < ARRAY_SIZE(platform_devs); i++) {
|
|
|
for (j = 0; j < platform_devs[i]->num_resources; j++) {
|
|
|
+ struct resource *const res =
|
|
|
+ &platform_devs[i]->resource[j];
|
|
|
+
|
|
|
+ if (IORESOURCE_MEM == res->flags &&
|
|
|
+ 0 == res->start) {
|
|
|
+ res->start = curr_start;
|
|
|
+ res->end += curr_start;
|
|
|
+ curr_start += resource_size(res);
|
|
|
+
|
|
|
+ printk(KERN_INFO "core.c: Mapping RAM " \
|
|
|
+ "%#x-%#x to device %s:%s\n",
|
|
|
+ res->start, res->end,
|
|
|
+ platform_devs[i]->name, res->name);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+static void __init u300_init_machine(void)
|
|
|
+{
|
|
|
+ int i;
|
|
|
+ u16 val;
|
|
|
+
|
|
|
+ /* Check what platform we run and print some status information */
|
|
|
+ u300_init_check_chip();
|
|
|
+
|
|
|
+ /* Initialize SPI device with some board specifics */
|
|
|
+ u300_spi_init(&pl022_device);
|
|
|
+
|
|
|
+ /* Register the AMBA devices in the AMBA bus abstraction layer */
|
|
|
+ for (i = 0; i < ARRAY_SIZE(amba_devs); i++) {
|
|
|
+ struct amba_device *d = amba_devs[i];
|
|
|
+ amba_device_register(d, &iomem_resource);
|
|
|
+ }
|
|
|
+
|
|
|
+ u300_assign_physmem();
|
|
|
+
|
|
|
+ /* Initialize pinmuxing */
|
|
|
+ pinctrl_register_mappings(u300_pinmux_map,
|
|
|
+ ARRAY_SIZE(u300_pinmux_map));
|
|
|
+
|
|
|
+ /* Register subdevices on the I2C buses */
|
|
|
+ u300_i2c_register_board_devices();
|
|
|
+
|
|
|
+ /* Register the platform devices */
|
|
|
+ platform_add_devices(platform_devs, ARRAY_SIZE(platform_devs));
|
|
|
+
|
|
|
+ /* Register subdevices on the SPI bus */
|
|
|
+ u300_spi_register_board_devices();
|
|
|
+
|
|
|
+ /* Enable SEMI self refresh */
|
|
|
+ val = readw(U300_SYSCON_VBASE + U300_SYSCON_SMCR) |
|
|
|
+ U300_SYSCON_SMCR_SEMI_SREFREQ_ENABLE;
|
|
|
+ writew(val, U300_SYSCON_VBASE + U300_SYSCON_SMCR);
|
|
|
+}
|
|
|
+
|
|
|
+/* Forward declare this function from the watchdog */
|
|
|
+void coh901327_watchdog_reset(void);
|
|
|
+
|
|
|
+static void u300_restart(char mode, const char *cmd)
|
|
|
+{
|
|
|
+ switch (mode) {
|
|
|
+ case 's':
|
|
|
+ case 'h':
|
|
|
+#ifdef CONFIG_COH901327_WATCHDOG
|
|
|
+ coh901327_watchdog_reset();
|
|
|
+#endif
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ /* Do nothing */
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ /* Wait for system do die/reset. */
|
|
|
+ while (1);
|
|
|
+}
|
|
|
+
|
|
|
+MACHINE_START(U300, "Ericsson AB U335 S335/B335 Prototype Board")
|
|
|
+ /* Maintainer: Linus Walleij <linus.walleij@stericsson.com> */
|
|
|
+ .atag_offset = 0x100,
|
|
|
+ .map_io = u300_map_io,
|
|
|
+ .nr_irqs = 0,
|
|
|
+ .init_irq = u300_init_irq,
|
|
|
+ .handle_irq = vic_handle_irq,
|
|
|
+ .timer = &u300_timer,
|
|
|
+ .init_machine = u300_init_machine,
|
|
|
+ .restart = u300_restart,
|
|
|
+MACHINE_END
|