|
@@ -10,6 +10,7 @@
|
|
|
#include <linux/platform_device.h>
|
|
|
#include <linux/init.h>
|
|
|
#include <linux/serial.h>
|
|
|
+#include <linux/io.h>
|
|
|
#include <asm/sci.h>
|
|
|
|
|
|
static struct resource rtc_resources[] = {
|
|
@@ -239,7 +240,7 @@ static struct intc_vect irl_vectors[] __initdata = {
|
|
|
};
|
|
|
|
|
|
static struct intc_mask_reg irl3210_mask_registers[] __initdata = {
|
|
|
- { 0xffd00080, 0xffd00084, 32, /* INTMSK2 / INTMSKCLR2 */
|
|
|
+ { 0xffd40080, 0xffd40084, 32, /* INTMSK2 / INTMSKCLR2 */
|
|
|
{ IRL_LLLL, IRL_LLLH, IRL_LLHL, IRL_LLHH,
|
|
|
IRL_LHLL, IRL_LHLH, IRL_LHHL, IRL_LHHH,
|
|
|
IRL_HLLL, IRL_HLLH, IRL_HLHL, IRL_HLHH,
|
|
@@ -247,7 +248,7 @@ static struct intc_mask_reg irl3210_mask_registers[] __initdata = {
|
|
|
};
|
|
|
|
|
|
static struct intc_mask_reg irl7654_mask_registers[] __initdata = {
|
|
|
- { 0xffd00080, 0xffd00084, 32, /* INTMSK2 / INTMSKCLR2 */
|
|
|
+ { 0xffd40080, 0xffd40084, 32, /* INTMSK2 / INTMSKCLR2 */
|
|
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
IRL_LLLL, IRL_LLLH, IRL_LLHL, IRL_LLHH,
|
|
|
IRL_LHLL, IRL_LHLH, IRL_LHHL, IRL_LHHH,
|
|
@@ -261,8 +262,28 @@ static DECLARE_INTC_DESC(intc_irl7654_desc, "sh7780-irl7654", irl_vectors,
|
|
|
static DECLARE_INTC_DESC(intc_irl3210_desc, "sh7780-irl3210", irl_vectors,
|
|
|
NULL, NULL, irl3210_mask_registers, NULL, NULL);
|
|
|
|
|
|
+#define INTC_ICR0 0xffd00000
|
|
|
+#define INTC_INTMSK0 0xffd00044
|
|
|
+#define INTC_INTMSK1 0xffd00048
|
|
|
+#define INTC_INTMSK2 0xffd40080
|
|
|
+#define INTC_INTMSKCLR1 0xffd00068
|
|
|
+#define INTC_INTMSKCLR2 0xffd40084
|
|
|
+
|
|
|
void __init plat_irq_setup(void)
|
|
|
{
|
|
|
+ /* disable IRQ7-0 */
|
|
|
+ ctrl_outl(0xff000000, INTC_INTMSK0);
|
|
|
+
|
|
|
+ /* disable IRL3-0 + IRL7-4 */
|
|
|
+ ctrl_outl(0xc0000000, INTC_INTMSK1);
|
|
|
+ ctrl_outl(0xfffefffe, INTC_INTMSK2);
|
|
|
+
|
|
|
+ /* select IRL mode for IRL3-0 + IRL7-4 */
|
|
|
+ ctrl_outl(ctrl_inl(INTC_ICR0) & ~0x00c00000, INTC_ICR0);
|
|
|
+
|
|
|
+ /* disable holding function, ie enable "SH-4 Mode" */
|
|
|
+ ctrl_outl(ctrl_inl(INTC_ICR0) | 0x00200000, INTC_ICR0);
|
|
|
+
|
|
|
register_intc_controller(&intc_desc);
|
|
|
}
|
|
|
|
|
@@ -270,12 +291,28 @@ void __init plat_irq_setup_pins(int mode)
|
|
|
{
|
|
|
switch (mode) {
|
|
|
case IRQ_MODE_IRQ:
|
|
|
+ /* select IRQ mode for IRL3-0 + IRL7-4 */
|
|
|
+ ctrl_outl(ctrl_inl(INTC_ICR0) | 0x00c00000, INTC_ICR0);
|
|
|
register_intc_controller(&intc_irq_desc);
|
|
|
break;
|
|
|
case IRQ_MODE_IRL7654:
|
|
|
- register_intc_controller(&intc_irl7654_desc);
|
|
|
+ /* enable IRL7-4 but don't provide any masking */
|
|
|
+ ctrl_outl(0x40000000, INTC_INTMSKCLR1);
|
|
|
+ ctrl_outl(0x0000fffe, INTC_INTMSKCLR2);
|
|
|
break;
|
|
|
case IRQ_MODE_IRL3210:
|
|
|
+ /* enable IRL0-3 but don't provide any masking */
|
|
|
+ ctrl_outl(0x80000000, INTC_INTMSKCLR1);
|
|
|
+ ctrl_outl(0xfffe0000, INTC_INTMSKCLR2);
|
|
|
+ break;
|
|
|
+ case IRQ_MODE_IRL7654_MASK:
|
|
|
+ /* enable IRL7-4 and mask using cpu intc controller */
|
|
|
+ ctrl_outl(0x40000000, INTC_INTMSKCLR1);
|
|
|
+ register_intc_controller(&intc_irl7654_desc);
|
|
|
+ break;
|
|
|
+ case IRQ_MODE_IRL3210_MASK:
|
|
|
+ /* enable IRL0-3 and mask using cpu intc controller */
|
|
|
+ ctrl_outl(0x80000000, INTC_INTMSKCLR1);
|
|
|
register_intc_controller(&intc_irl3210_desc);
|
|
|
break;
|
|
|
default:
|