wdt_base = of_iomap(np, 0);
        WARN(!wdt_base, "failed to map watchdog base address");
- 
-       of_id = of_match_node(sunxi_restart_ids, np);
-       WARN(!of_id, "restart function not available");
- 
-       arm_pm_restart = of_id->data;
  }
  
 -static void __init sunxi_timer_init(void)
 -{
 -      sunxi_init_clocks();
 -      clocksource_of_init();
 -}
 -
  static void __init sunxi_dt_init(void)
  {
        sunxi_setup_restart();
  
  DT_MACHINE_START(SUNXI_DT, "Allwinner A1X (Device Tree)")
        .init_machine   = sunxi_dt_init,
 -      .init_time      = sunxi_timer_init,
        .dt_compat      = sunxi_board_dt_compat,
+       .restart        = sun4i_restart,
+ MACHINE_END
+ 
+ static const char * const sun6i_board_dt_compat[] = {
+       "allwinner,sun6i-a31",
+       NULL,
+ };
+ 
+ DT_MACHINE_START(SUN6I_DT, "Allwinner sun6i (A31) Family")
+       .init_machine   = sunxi_dt_init,
+       .init_time      = sunxi_timer_init,
+       .dt_compat      = sun6i_board_dt_compat,
+       .restart        = sun6i_restart,
+ MACHINE_END
+ 
+ static const char * const sun7i_board_dt_compat[] = {
+       "allwinner,sun7i-a20",
+       NULL,
+ };
+ 
+ DT_MACHINE_START(SUN7I_DT, "Allwinner sun7i (A20) Family")
+       .init_machine   = sunxi_dt_init,
+       .init_time      = sunxi_timer_init,
+       .dt_compat      = sun7i_board_dt_compat,
+       .restart        = sun4i_restart,
  MACHINE_END