svn commit: r259391 - in projects/specific_leg/sys/arm: arm broadcom/bcm2835 include ti ti/omap4
Andrew Turner
andrew at FreeBSD.org
Sat Dec 14 14:49:11 UTC 2013
Author: andrew
Date: Sat Dec 14 14:49:09 2013
New Revision: 259391
URL: http://svnweb.freebsd.org/changeset/base/259391
Log:
Add cpu_reset, cpu_initclocks, and DELAY to the platform code
Modified:
projects/specific_leg/sys/arm/arm/mpcore_timer.c
projects/specific_leg/sys/arm/arm/platform.c
projects/specific_leg/sys/arm/arm/platform_if.m
projects/specific_leg/sys/arm/broadcom/bcm2835/bcm2835_machdep.c
projects/specific_leg/sys/arm/broadcom/bcm2835/bcm2835_systimer.c
projects/specific_leg/sys/arm/include/platformvar.h
projects/specific_leg/sys/arm/ti/omap4/omap4_prcm_clks.c
projects/specific_leg/sys/arm/ti/ti_machdep.c
Modified: projects/specific_leg/sys/arm/arm/mpcore_timer.c
==============================================================================
--- projects/specific_leg/sys/arm/arm/mpcore_timer.c Sat Dec 14 14:47:29 2013 (r259390)
+++ projects/specific_leg/sys/arm/arm/mpcore_timer.c Sat Dec 14 14:49:09 2013 (r259391)
@@ -58,6 +58,8 @@ __FBSDID("$FreeBSD$");
#include <machine/bus.h>
#include <machine/cpu.h>
#include <machine/intr.h>
+#include <machine/intr.h>
+#include <machine/platformvar.h>
#include <dev/fdt/fdt_common.h>
#include <dev/ofw/openfirm.h>
@@ -365,7 +367,7 @@ DRIVER_MODULE(mp_tmr, simplebus, arm_tmr
* nothing
*/
void
-cpu_initclocks(void)
+arm_tmr_cpu_initclocks(platform_t plat)
{
if (PCPU_GET(cpuid) == 0)
cpu_initclocks_bsp();
@@ -374,7 +376,7 @@ cpu_initclocks(void)
}
/**
- * DELAY - Delay for at least usec microseconds.
+ * arm_tmr_delay - Delay for at least usec microseconds.
* @usec: number of microseconds to delay by
*
* This function is called all over the kernel and is suppose to provide a
@@ -385,7 +387,7 @@ cpu_initclocks(void)
* nothing
*/
void
-DELAY(int usec)
+arm_tmr_delay(platform_t plat, int usec)
{
int32_t counts_per_usec;
int32_t counts;
Modified: projects/specific_leg/sys/arm/arm/platform.c
==============================================================================
--- projects/specific_leg/sys/arm/arm/platform.c Sat Dec 14 14:47:29 2013 (r259390)
+++ projects/specific_leg/sys/arm/arm/platform.c Sat Dec 14 14:49:09 2013 (r259391)
@@ -170,6 +170,14 @@ platform_late_init(void)
PLATFORM_LATE_INIT(plat_obj);
}
+void
+cpu_reset(void)
+{
+ PLATFORM_CPU_RESET(plat_obj);
+
+ panic("CPU failed to reset");
+}
+
int
arm_get_next_irq(int last)
{
@@ -199,3 +207,16 @@ bus_dma_get_range_nb(void)
{
return PLATFORM_BUS_DMA_GET_RANGE_NB(plat_obj);
}
+
+void
+cpu_initclocks(void)
+{
+ PLATFORM_CPU_INITCLOCKS(plat_obj);
+}
+
+void
+DELAY(int usec)
+{
+ PLATFORM_DELAY(plat_obj, usec);
+}
+
Modified: projects/specific_leg/sys/arm/arm/platform_if.m
==============================================================================
--- projects/specific_leg/sys/arm/arm/platform_if.m Sat Dec 14 14:47:29 2013 (r259390)
+++ projects/specific_leg/sys/arm/arm/platform_if.m Sat Dec 14 14:49:09 2013 (r259391)
@@ -149,6 +149,12 @@ METHOD void late_init {
/**
*/
+METHOD void cpu_reset {
+ platform_t _plat;
+};
+
+/**
+ */
METHOD int get_next_irq {
platform_t _plat;
int last;
@@ -180,3 +186,15 @@ METHOD int bus_dma_get_range_nb {
platform_t _plat;
} DEFAULT platform_null_bus_dma_get_range_nb;
+/**
+ */
+METHOD void cpu_initclocks {
+ platform_t _plat;
+};
+
+/**
+ */
+METHOD void delay {
+ platform_t _plat;
+ int usec;
+};
Modified: projects/specific_leg/sys/arm/broadcom/bcm2835/bcm2835_machdep.c
==============================================================================
--- projects/specific_leg/sys/arm/broadcom/bcm2835/bcm2835_machdep.c Sat Dec 14 14:47:29 2013 (r259390)
+++ projects/specific_leg/sys/arm/broadcom/bcm2835/bcm2835_machdep.c Sat Dec 14 14:49:09 2013 (r259391)
@@ -116,8 +116,8 @@ bcm2835_devmap_init(platform_t plat)
return (0);
}
-void
-cpu_reset()
+static void
+bcm_2835_cpu_reset(platform_t plat)
{
bcmwd_watchdog_reset();
while (1);
@@ -126,16 +126,23 @@ cpu_reset()
int bcm2835_get_next_irq(platform_t, int);
void bcm2835_mask_irq(platform_t, uintptr_t);
void bcm2835_unmask_irq(platform_t, uintptr_t);
+void bcm2835_cpu_initclocks(platform_t);
+void bcm2835_delay(platform_t, int);
static platform_method_t bcm2835_methods[] = {
PLATFORMMETHOD(platform_devmap_init, bcm2835_devmap_init),
PLATFORMMETHOD(platform_lastaddr, bcm2835_lastaddr),
PLATFORMMETHOD(platform_late_init, bcm2835_late_init),
+ PLATFORMMETHOD(platform_cpu_reset, bcm_2835_cpu_reset),
+
PLATFORMMETHOD(platform_get_next_irq, bcm2835_get_next_irq),
PLATFORMMETHOD(platform_mask_irq, bcm2835_mask_irq),
PLATFORMMETHOD(platform_unmask_irq, bcm2835_unmask_irq),
+ PLATFORMMETHOD(platform_cpu_initclocks, bcm2835_cpu_initclocks),
+ PLATFORMMETHOD(platform_delay, bcm2835_delay),
+
PLATFORMMETHOD_END,
};
Modified: projects/specific_leg/sys/arm/broadcom/bcm2835/bcm2835_systimer.c
==============================================================================
--- projects/specific_leg/sys/arm/broadcom/bcm2835/bcm2835_systimer.c Sat Dec 14 14:47:29 2013 (r259390)
+++ projects/specific_leg/sys/arm/broadcom/bcm2835/bcm2835_systimer.c Sat Dec 14 14:49:09 2013 (r259391)
@@ -41,6 +41,7 @@ __FBSDID("$FreeBSD$");
#include <machine/bus.h>
#include <machine/cpu.h>
#include <machine/intr.h>
+#include <machine/platformvar.h>
#include <dev/fdt/fdt_common.h>
#include <dev/ofw/openfirm.h>
@@ -274,14 +275,17 @@ static devclass_t bcm_systimer_devclass;
DRIVER_MODULE(bcm_systimer, simplebus, bcm_systimer_driver, bcm_systimer_devclass, 0, 0);
+void bcm2835_cpu_initclocks(platform_t);
+void bcm2835_delay(platform_t, int);
+
void
-cpu_initclocks(void)
+bcm2835_cpu_initclocks(platform_t plat)
{
cpu_initclocks_bsp();
}
void
-DELAY(int usec)
+bcm2835_delay(platform_t plat, int usec)
{
int32_t counts;
uint32_t first, last;
Modified: projects/specific_leg/sys/arm/include/platformvar.h
==============================================================================
--- projects/specific_leg/sys/arm/include/platformvar.h Sat Dec 14 14:47:29 2013 (r259390)
+++ projects/specific_leg/sys/arm/include/platformvar.h Sat Dec 14 14:49:09 2013 (r259391)
@@ -121,4 +121,7 @@ DATA_SET(platform_set, NAME ## _platform
#endif
+void arm_tmr_cpu_initclocks(platform_t);
+void arm_tmr_delay(platform_t, int);
+
#endif /* _MACHINE_PLATFORMVAR_H_ */
Modified: projects/specific_leg/sys/arm/ti/omap4/omap4_prcm_clks.c
==============================================================================
--- projects/specific_leg/sys/arm/ti/omap4/omap4_prcm_clks.c Sat Dec 14 14:47:29 2013 (r259390)
+++ projects/specific_leg/sys/arm/ti/omap4/omap4_prcm_clks.c Sat Dec 14 14:49:09 2013 (r259391)
@@ -45,6 +45,7 @@ __FBSDID("$FreeBSD$");
#include <machine/cpufunc.h>
#include <machine/resource.h>
#include <machine/intr.h>
+#include <machine/platformvar.h>
#include <arm/ti/tivar.h>
#include <arm/ti/ti_prcm.h>
@@ -1339,8 +1340,10 @@ omap4_clk_hsusbhost_set_source(struct ti
#define PRM_RSTCTRL 0x1b00
#define PRM_RSTCTRL_RESET 0x2
-static void
-omap4_prcm_reset(void)
+void omap4_prcm_reset(platform_t);
+
+void
+omap4_prcm_reset(platform_t plat)
{
struct omap4_prcm_softc *sc = omap4_prcm_sc;
bus_write_4(sc->sc_res[0], PRM_RSTCTRL,
@@ -1398,7 +1401,6 @@ omap4_prcm_attach(device_t dev)
}
omap4_prcm_sc = sc;
- ti_cpu_reset = omap4_prcm_reset;
omap4_clk_get_arm_fclk_freq(NULL, &freq);
platform_arm_tmr_freq = freq / 2;
Modified: projects/specific_leg/sys/arm/ti/ti_machdep.c
==============================================================================
--- projects/specific_leg/sys/arm/ti/ti_machdep.c Sat Dec 14 14:47:29 2013 (r259390)
+++ projects/specific_leg/sys/arm/ti/ti_machdep.c Sat Dec 14 14:49:09 2013 (r259391)
@@ -69,13 +69,10 @@ __FBSDID("$FreeBSD$");
#error Not yet able to use both OMAP4 and AM335X in the same kernel
#endif
-void (*ti_cpu_reset)(void);
-
static int
ti_attach(platform_t plat)
{
- ti_cpu_reset = NULL;
return (0);
}
@@ -127,27 +124,23 @@ ti_am335x_devmap_init(platform_t plat)
}
#endif
-void
-cpu_reset()
-{
- if (ti_cpu_reset)
- (*ti_cpu_reset)();
- else
- printf("no cpu_reset implementation\n");
- printf("Reset failed!\n");
- while (1);
-}
-
#if defined(SOC_OMAP4)
+void omap4_prcm_reset(platform_t);
+
static platform_method_t omap4_methods[] = {
PLATFORMMETHOD(platform_attach, ti_attach),
PLATFORMMETHOD(platform_devmap_init, ti_omap4_devmap_init),
PLATFORMMETHOD(platform_lastaddr, ti_lastaddr),
+ PLATFORMMETHOD(platform_cpu_reset, omap4_prcm_reset),
+
PLATFORMMETHOD(platform_get_next_irq, gic_get_next_irq),
PLATFORMMETHOD(platform_mask_irq, gic_mask_irq),
PLATFORMMETHOD(platform_unmask_irq, gic_unmask_irq),
+ PLATFORMMETHOD(platform_cpu_initclocks, arm_tmr_cpu_initclocks),
+ PLATFORMMETHOD(platform_delay, arm_tmr_delay),
+
PLATFORMMETHOD_END,
};
More information about the svn-src-projects
mailing list