at91_common.c revision 269958
1269958Simp#include <sys/cdefs.h>
2269958Simp__FBSDID("$FreeBSD: head/sys/arm/at91/at91_common.c 269958 2014-08-14 04:21:20Z imp $");
3269958Simp
4269958Simp#define _ARM32_BUS_DMA_PRIVATE
5269958Simp#include <sys/param.h>
6269958Simp#include <sys/systm.h>
7269958Simp#include <vm/vm.h>
8269958Simp#include <machine/devmap.h>
9269958Simp#include <machine/machdep.h>
10269958Simp#include <arm/at91/at91var.h>
11269958Simp#include <arm/at91/at91soc.h>
12269958Simp#include <arm/at91/at91_aicreg.h>
13269958Simp#include <dev/fdt/fdt_common.h>
14269958Simp#include <dev/ofw/openfirm.h>
15269958Simp#include <machine/fdt.h>
16269958Simp
17269958Simpextern const struct arm_devmap_entry at91_devmap[];
18269958Simpextern struct bus_space at91_bs_tag;
19269958Simpbus_space_tag_t fdtbus_bs_tag = &at91_bs_tag;
20269958Simp
21269958Simpstruct fdt_fixup_entry fdt_fixup_table[] = {
22269958Simp	{ NULL, NULL }
23269958Simp};
24269958Simp
25269958Simpstatic int
26269958Simpfdt_aic_decode_ic(phandle_t node, pcell_t *intr, int *interrupt, int *trig,
27269958Simp    int *pol)
28269958Simp{
29269958Simp	int offset;
30269958Simp
31269958Simp	if (fdt_is_compatible(node, "atmel,at91rm9200-aic"))
32269958Simp		offset = 0;
33269958Simp	else
34269958Simp		return (ENXIO);
35269958Simp
36269958Simp	*interrupt = fdt32_to_cpu(intr[0]) + offset;
37269958Simp	*trig = INTR_TRIGGER_CONFORM;
38269958Simp	*pol = INTR_POLARITY_CONFORM;
39269958Simp
40269958Simp	return (0);
41269958Simp}
42269958Simp
43269958Simpfdt_pic_decode_t fdt_pic_table[] = {
44269958Simp	&fdt_aic_decode_ic,
45269958Simp	NULL
46269958Simp};
47269958Simp
48269958Simpstatic void
49269958Simpat91_eoi(void *unused)
50269958Simp{
51269958Simp	uint32_t *eoicr = (uint32_t *)(0xdffff000 + IC_EOICR);
52269958Simp
53269958Simp	*eoicr = 0;
54269958Simp}
55269958Simp
56269958Simp
57269958Simpvm_offset_t
58269958Simpinitarm_lastaddr(void)
59269958Simp{
60269958Simp
61269958Simp	return (arm_devmap_lastaddr());
62269958Simp}
63269958Simp
64269958Simpvoid
65269958Simpinitarm_early_init(void)
66269958Simp{
67269958Simp
68269958Simp	arm_post_filter = at91_eoi;
69269958Simp	at91_soc_id();
70269958Simp	arm_devmap_register_table(at91_devmap);
71269958Simp}
72269958Simp
73269958Simpint
74269958Simpinitarm_devmap_init(void)
75269958Simp{
76269958Simp
77269958Simp//	arm_devmap_add_entry(0xfff00000, 0x00100000); /* 1MB - uart, aic and timers*/
78269958Simp
79269958Simp	return (0);
80269958Simp}
81269958Simp
82269958Simpvoid
83269958Simpinitarm_gpio_init(void)
84269958Simp{
85269958Simp}
86269958Simp
87269958Simpvoid
88269958Simpinitarm_late_init(void)
89269958Simp{
90269958Simp}
91