2 * Copyright(c) 2015 EZchip Technologies.
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms and conditions of the GNU General Public License,
6 * version 2, as published by the Free Software Foundation.
8 * This program is distributed in the hope it will be useful, but WITHOUT
9 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
13 * The full GNU General Public License is included in this distribution in
14 * the file called "COPYING".
17 #include <linux/init.h>
19 #include <asm/mach_desc.h>
22 static void __init
eznps_configure_msu(void)
25 struct nps_host_reg_msu_en_cfg msu_en_cfg
= {.value
= 0};
27 msu_en_cfg
.msu_en
= 1;
28 msu_en_cfg
.ipi_en
= 1;
29 msu_en_cfg
.gim_0_en
= 1;
30 msu_en_cfg
.gim_1_en
= 1;
32 /* enable IPI and GIM messages on all clusters */
33 for (cpu
= 0 ; cpu
< eznps_max_cpus
; cpu
+= eznps_cpus_per_cluster
)
34 iowrite32be(msu_en_cfg
.value
,
35 nps_host_reg(cpu
, NPS_MSU_BLKID
, NPS_MSU_EN_CFG
));
38 static void __init
eznps_configure_gim(void)
42 struct nps_host_reg_gim_p_int_dst gim_p_int_dst
= {.value
= 0};
44 gim_int_lines
= NPS_GIM_UART_LINE
;
45 gim_int_lines
|= NPS_GIM_DBG_LAN_EAST_TX_DONE_LINE
;
46 gim_int_lines
|= NPS_GIM_DBG_LAN_EAST_RX_RDY_LINE
;
47 gim_int_lines
|= NPS_GIM_DBG_LAN_WEST_TX_DONE_LINE
;
48 gim_int_lines
|= NPS_GIM_DBG_LAN_WEST_RX_RDY_LINE
;
53 * negative or positive edge
55 reg_value
= ioread32be(REG_GIM_P_INT_POL_0
);
56 reg_value
&= ~gim_int_lines
;
57 iowrite32be(reg_value
, REG_GIM_P_INT_POL_0
);
59 /* IRQ type level or edge */
60 reg_value
= ioread32be(REG_GIM_P_INT_SENS_0
);
61 reg_value
|= NPS_GIM_DBG_LAN_EAST_TX_DONE_LINE
;
62 reg_value
|= NPS_GIM_DBG_LAN_WEST_TX_DONE_LINE
;
63 iowrite32be(reg_value
, REG_GIM_P_INT_SENS_0
);
66 * GIM interrupt select type for
67 * dbg_lan TX and RX interrupts
73 iowrite32be(gim_p_int_dst
.value
, REG_GIM_P_INT_DST_10
);
74 iowrite32be(gim_p_int_dst
.value
, REG_GIM_P_INT_DST_11
);
75 iowrite32be(gim_p_int_dst
.value
, REG_GIM_P_INT_DST_25
);
76 iowrite32be(gim_p_int_dst
.value
, REG_GIM_P_INT_DST_26
);
79 * CTOP IRQ lines should be defined
82 iowrite32be(gim_int_lines
, REG_GIM_P_INT_BLK_0
);
84 /* enable CTOP IRQ lines in GIM */
85 iowrite32be(gim_int_lines
, REG_GIM_P_INT_EN_0
);
88 static void __init
eznps_early_init(void)
90 eznps_configure_msu();
91 eznps_configure_gim();
94 static const char *eznps_compat
[] __initconst
= {
99 MACHINE_START(NPS
, "nps")
100 .dt_compat
= eznps_compat
,
101 .init_early
= eznps_early_init
,