|
@@ -4,10 +4,47 @@
|
|
|
* SPDX-License-Identifier: GPL-2.0+
|
|
|
*/
|
|
|
|
|
|
+#include <common.h>
|
|
|
+#include <libfdt.h>
|
|
|
+#include <linux/io.h>
|
|
|
+
|
|
|
#include "init.h"
|
|
|
#include "micro-support-card.h"
|
|
|
#include "soc-info.h"
|
|
|
|
|
|
+DECLARE_GLOBAL_DATA_PTR;
|
|
|
+
|
|
|
+static void uniphier_setup_xirq(void)
|
|
|
+{
|
|
|
+ const void *fdt = gd->fdt_blob;
|
|
|
+ int soc_node, aidet_node;
|
|
|
+ const u32 *val;
|
|
|
+ unsigned long aidet_base;
|
|
|
+ u32 tmp;
|
|
|
+
|
|
|
+ soc_node = fdt_path_offset(fdt, "/soc");
|
|
|
+ if (soc_node < 0)
|
|
|
+ return;
|
|
|
+
|
|
|
+ aidet_node = fdt_subnode_offset_namelen(fdt, soc_node, "aidet", 5);
|
|
|
+ if (aidet_node < 0)
|
|
|
+ return;
|
|
|
+
|
|
|
+ val = fdt_getprop(fdt, aidet_node, "reg", NULL);
|
|
|
+ if (!val)
|
|
|
+ return;
|
|
|
+
|
|
|
+ aidet_base = fdt32_to_cpu(*val);
|
|
|
+
|
|
|
+ tmp = readl(aidet_base + 8); /* AIDET DETCONFR2 */
|
|
|
+ tmp |= 0x00ff0000; /* Set XIRQ0-7 low active */
|
|
|
+ writel(tmp, aidet_base + 8);
|
|
|
+
|
|
|
+ tmp = readl(0x55000090); /* IRQCTL */
|
|
|
+ tmp |= 0x000000ff;
|
|
|
+ writel(tmp, 0x55000090);
|
|
|
+}
|
|
|
+
|
|
|
int board_early_init_f(void)
|
|
|
{
|
|
|
led_puts("U0");
|
|
@@ -81,6 +118,8 @@ int board_early_init_f(void)
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
+ uniphier_setup_xirq();
|
|
|
+
|
|
|
led_puts("U2");
|
|
|
|
|
|
return 0;
|