Index: sunxi_platform.c =================================================================== RCS file: /cvsroot/src/sys/arch/arm/sunxi/sunxi_platform.c,v retrieving revision 1.36 diff -p -u -r1.36 sunxi_platform.c --- sunxi_platform.c 30 Apr 2019 10:10:45 -0000 1.36 +++ sunxi_platform.c 5 Jun 2019 20:33:05 -0000 @@ -114,6 +114,8 @@ extern struct bus_space arm_generic_a4x_ #define sunxi_bs_tag arm_generic_bs_tag #define sunxi_a4x_bs_tag arm_generic_a4x_bs_tag +static bus_space_handle_t reset_bsh; + static const struct pmap_devmap * sunxi_platform_devmap(void) { @@ -268,6 +270,42 @@ sunxi_platform_bootstrap(void) } } +static void +sun4i_platform_bootstrap(void) +{ + bus_space_tag_t bst = &sunxi_bs_tag; + + sunxi_platform_bootstrap(); + bus_space_map(bst, SUN4I_WDT_BASE, SUN4I_WDT_SIZE, 0, &reset_bsh); +} + +static void +sun6i_platform_bootstrap(void) +{ + bus_space_tag_t bst = &sunxi_bs_tag; + + sunxi_platform_bootstrap(); + bus_space_map(bst, SUN6I_WDT_BASE, SUN6I_WDT_SIZE, 0, &reset_bsh); +} + +static void +sun9i_platform_bootstrap(void) +{ + bus_space_tag_t bst = &sunxi_bs_tag; + + sunxi_platform_bootstrap(); + bus_space_map(bst, SUN9I_WDT_BASE, SUN9I_WDT_SIZE, 0, &reset_bsh); +} + +static void +sun50i_h6_platform_bootstrap(void) +{ + bus_space_tag_t bst = &sunxi_bs_tag; + + sunxi_platform_bootstrap(); + bus_space_map(bst, SUN50I_H6_WDT_BASE, SUN50I_H6_WDT_SIZE, 0, &reset_bsh); +} + #if defined(SOC_SUNXI_MC) static int cpu_enable_sun8i_a83t(int phandle) @@ -296,14 +334,11 @@ static void sun4i_platform_reset(void) { bus_space_tag_t bst = &sunxi_bs_tag; - bus_space_handle_t bsh; - - bus_space_map(bst, SUN4I_WDT_BASE, SUN4I_WDT_SIZE, 0, &bsh); - bus_space_write_4(bst, bsh, SUN4I_WDT_CTRL, + bus_space_write_4(bst, reset_bsh, SUN4I_WDT_CTRL, SUN4I_WDT_CTRL_KEY | SUN4I_WDT_CTRL_RESTART); for (;;) { - bus_space_write_4(bst, bsh, SUN4I_WDT_MODE, + bus_space_write_4(bst, reset_bsh, SUN4I_WDT_MODE, SUN4I_WDT_MODE_EN | SUN4I_WDT_MODE_RST_EN); } } @@ -344,41 +379,32 @@ static void sun6i_platform_reset(void) { bus_space_tag_t bst = &sunxi_bs_tag; - bus_space_handle_t bsh; - bus_space_map(bst, SUN6I_WDT_BASE, SUN6I_WDT_SIZE, 0, &bsh); - - bus_space_write_4(bst, bsh, SUN6I_WDT_CFG, SUN6I_WDT_CFG_SYS); - bus_space_write_4(bst, bsh, SUN6I_WDT_MODE, SUN6I_WDT_MODE_EN); + bus_space_write_4(bst, reset_bsh, SUN6I_WDT_CFG, SUN6I_WDT_CFG_SYS); + bus_space_write_4(bst, reset_bsh, SUN6I_WDT_MODE, SUN6I_WDT_MODE_EN); } static void sun9i_platform_reset(void) { bus_space_tag_t bst = &sunxi_bs_tag; - bus_space_handle_t bsh; - - bus_space_map(bst, SUN9I_WDT_BASE, SUN9I_WDT_SIZE, 0, &bsh); - bus_space_write_4(bst, bsh, SUN9I_WDT_CFG, SUN9I_WDT_CFG_SYS); - bus_space_write_4(bst, bsh, SUN9I_WDT_MODE, SUN9I_WDT_MODE_EN); + bus_space_write_4(bst, reset_bsh, SUN9I_WDT_CFG, SUN9I_WDT_CFG_SYS); + bus_space_write_4(bst, reset_bsh, SUN9I_WDT_MODE, SUN9I_WDT_MODE_EN); } static void sun50i_h6_platform_reset(void) { bus_space_tag_t bst = &sunxi_bs_tag; - bus_space_handle_t bsh; - - bus_space_map(bst, SUN50I_H6_WDT_BASE, SUN50I_H6_WDT_SIZE, 0, &bsh); - bus_space_write_4(bst, bsh, SUN50I_H6_WDT_CFG, SUN50I_H6_WDT_CFG_SYS); - bus_space_write_4(bst, bsh, SUN50I_H6_WDT_MODE, SUN50I_H6_WDT_MODE_EN); + bus_space_write_4(bst, reset_bsh, SUN50I_H6_WDT_CFG, SUN50I_H6_WDT_CFG_SYS); + bus_space_write_4(bst, reset_bsh, SUN50I_H6_WDT_MODE, SUN50I_H6_WDT_MODE_EN); } static const struct arm_platform sun4i_platform = { .ap_devmap = sunxi_platform_devmap, - .ap_bootstrap = sunxi_platform_bootstrap, + .ap_bootstrap = sun4i_platform_bootstrap, .ap_init_attach_args = sunxi_platform_init_attach_args, .ap_device_register = sunxi_platform_device_register, .ap_reset = sun4i_platform_reset, @@ -390,7 +416,7 @@ ARM_PLATFORM(sun4i_a10, "allwinner,sun4i static const struct arm_platform sun5i_platform = { .ap_devmap = sunxi_platform_devmap, - .ap_bootstrap = sunxi_platform_bootstrap, + .ap_bootstrap = sun4i_platform_bootstrap, .ap_init_attach_args = sunxi_platform_init_attach_args, .ap_device_register = sunxi_platform_device_register, .ap_reset = sun4i_platform_reset, @@ -403,7 +429,7 @@ ARM_PLATFORM(sun5i_gr8, "nextthing,gr8", static const struct arm_platform sun6i_platform = { .ap_devmap = sunxi_platform_devmap, - .ap_bootstrap = sunxi_platform_bootstrap, + .ap_bootstrap = sun6i_platform_bootstrap, .ap_init_attach_args = sunxi_platform_init_attach_args, .ap_device_register = sunxi_platform_device_register, .ap_reset = sun6i_platform_reset, @@ -416,7 +442,7 @@ ARM_PLATFORM(sun6i_a31, "allwinner,sun6i static const struct arm_platform sun7i_platform = { .ap_devmap = sunxi_platform_devmap, - .ap_bootstrap = sunxi_platform_bootstrap, + .ap_bootstrap = sun4i_platform_bootstrap, .ap_init_attach_args = sunxi_platform_init_attach_args, .ap_device_register = sunxi_platform_device_register, .ap_reset = sun4i_platform_reset, @@ -429,7 +455,7 @@ ARM_PLATFORM(sun7i_a20, "allwinner,sun7i static const struct arm_platform sun8i_platform = { .ap_devmap = sunxi_platform_devmap, - .ap_bootstrap = sunxi_platform_bootstrap, + .ap_bootstrap = sun6i_platform_bootstrap, .ap_init_attach_args = sunxi_platform_init_attach_args, .ap_device_register = sunxi_platform_device_register, .ap_reset = sun6i_platform_reset, @@ -443,7 +469,7 @@ ARM_PLATFORM(sun8i_h3, "allwinner,sun8i- static const struct arm_platform sun8i_a83t_platform = { .ap_devmap = sun8i_a83t_platform_devmap, - .ap_bootstrap = sunxi_platform_bootstrap, + .ap_bootstrap = sun6i_platform_bootstrap, .ap_init_attach_args = sunxi_platform_init_attach_args, .ap_device_register = sunxi_platform_device_register, .ap_reset = sun6i_platform_reset, @@ -456,7 +482,7 @@ ARM_PLATFORM(sun8i_a83t, "allwinner,sun8 static const struct arm_platform sun9i_platform = { .ap_devmap = sun9i_a80_platform_devmap, - .ap_bootstrap = sunxi_platform_bootstrap, + .ap_bootstrap = sun9i_platform_bootstrap, .ap_init_attach_args = sunxi_platform_init_attach_args, .ap_device_register = sunxi_platform_device_register, .ap_reset = sun9i_platform_reset, @@ -469,7 +495,7 @@ ARM_PLATFORM(sun9i_a80, "allwinner,sun9i static const struct arm_platform sun50i_platform = { .ap_devmap = sunxi_platform_devmap, - .ap_bootstrap = sunxi_platform_bootstrap, + .ap_bootstrap = sun6i_platform_bootstrap, .ap_init_attach_args = sunxi_platform_init_attach_args, .ap_device_register = sunxi_platform_device_register, .ap_reset = sun6i_platform_reset, @@ -483,7 +509,7 @@ ARM_PLATFORM(sun50i_h5, "allwinner,sun50 static const struct arm_platform sun50i_h6_platform = { .ap_devmap = sunxi_platform_devmap, - .ap_bootstrap = sunxi_platform_bootstrap, + .ap_bootstrap = sun50i_h6_platform_bootstrap, .ap_init_attach_args = sunxi_platform_init_attach_args, .ap_device_register = sunxi_platform_device_register, .ap_reset = sun50i_h6_platform_reset,