diff options
Diffstat (limited to 'arch/mips/include/asm/mach-au1x00/au1000.h')
-rw-r--r-- | arch/mips/include/asm/mach-au1x00/au1000.h | 89 |
1 files changed, 54 insertions, 35 deletions
diff --git a/arch/mips/include/asm/mach-au1x00/au1000.h b/arch/mips/include/asm/mach-au1x00/au1000.h index 0d302bad4492..62f91f50b5b5 100644 --- a/arch/mips/include/asm/mach-au1x00/au1000.h +++ b/arch/mips/include/asm/mach-au1x00/au1000.h | |||
@@ -91,14 +91,57 @@ static inline u32 au_readl(unsigned long reg) | |||
91 | return *(volatile u32 *)reg; | 91 | return *(volatile u32 *)reg; |
92 | } | 92 | } |
93 | 93 | ||
94 | /* Early Au1000 have a write-only SYS_CPUPLL register. */ | ||
95 | static inline int au1xxx_cpu_has_pll_wo(void) | ||
96 | { | ||
97 | switch (read_c0_prid()) { | ||
98 | case 0x00030100: /* Au1000 DA */ | ||
99 | case 0x00030201: /* Au1000 HA */ | ||
100 | case 0x00030202: /* Au1000 HB */ | ||
101 | return 1; | ||
102 | } | ||
103 | return 0; | ||
104 | } | ||
105 | |||
106 | /* does CPU need CONFIG[OD] set to fix tons of errata? */ | ||
107 | static inline int au1xxx_cpu_needs_config_od(void) | ||
108 | { | ||
109 | /* | ||
110 | * c0_config.od (bit 19) was write only (and read as 0) on the | ||
111 | * early revisions of Alchemy SOCs. It disables the bus trans- | ||
112 | * action overlapping and needs to be set to fix various errata. | ||
113 | */ | ||
114 | switch (read_c0_prid()) { | ||
115 | case 0x00030100: /* Au1000 DA */ | ||
116 | case 0x00030201: /* Au1000 HA */ | ||
117 | case 0x00030202: /* Au1000 HB */ | ||
118 | case 0x01030200: /* Au1500 AB */ | ||
119 | /* | ||
120 | * Au1100/Au1200 errata actually keep silence about this bit, | ||
121 | * so we set it just in case for those revisions that require | ||
122 | * it to be set according to the (now gone) cpu_table. | ||
123 | */ | ||
124 | case 0x02030200: /* Au1100 AB */ | ||
125 | case 0x02030201: /* Au1100 BA */ | ||
126 | case 0x02030202: /* Au1100 BC */ | ||
127 | case 0x04030201: /* Au1200 AC */ | ||
128 | return 1; | ||
129 | } | ||
130 | return 0; | ||
131 | } | ||
94 | 132 | ||
95 | /* arch/mips/au1000/common/clocks.c */ | 133 | /* arch/mips/au1000/common/clocks.c */ |
96 | extern void set_au1x00_speed(unsigned int new_freq); | 134 | extern void set_au1x00_speed(unsigned int new_freq); |
97 | extern unsigned int get_au1x00_speed(void); | 135 | extern unsigned int get_au1x00_speed(void); |
98 | extern void set_au1x00_uart_baud_base(unsigned long new_baud_base); | 136 | extern void set_au1x00_uart_baud_base(unsigned long new_baud_base); |
99 | extern unsigned long get_au1x00_uart_baud_base(void); | 137 | extern unsigned long get_au1x00_uart_baud_base(void); |
100 | extern void set_au1x00_lcd_clock(void); | 138 | extern unsigned long au1xxx_calc_clock(void); |
101 | extern unsigned int get_au1x00_lcd_clock(void); | 139 | |
140 | /* PM: arch/mips/alchemy/common/sleeper.S, power.c, irq.c */ | ||
141 | void au1xxx_save_and_sleep(void); | ||
142 | void au_sleep(void); | ||
143 | void save_au1xxx_intctl(void); | ||
144 | void restore_au1xxx_intctl(void); | ||
102 | 145 | ||
103 | /* | 146 | /* |
104 | * Every board describes its IRQ mapping with this table. | 147 | * Every board describes its IRQ mapping with this table. |
@@ -109,10 +152,11 @@ struct au1xxx_irqmap { | |||
109 | int im_request; | 152 | int im_request; |
110 | }; | 153 | }; |
111 | 154 | ||
112 | /* | 155 | /* core calls this function to let boards initialize other IRQ sources */ |
113 | * init_IRQ looks for a table with this name. | 156 | void board_init_irq(void); |
114 | */ | 157 | |
115 | extern struct au1xxx_irqmap au1xxx_irq_map[]; | 158 | /* boards call this to register additional (GPIO) interrupts */ |
159 | void au1xxx_setup_irqmap(struct au1xxx_irqmap *map, int count); | ||
116 | 160 | ||
117 | #endif /* !defined (_LANGUAGE_ASSEMBLY) */ | 161 | #endif /* !defined (_LANGUAGE_ASSEMBLY) */ |
118 | 162 | ||
@@ -505,15 +549,6 @@ extern struct au1xxx_irqmap au1xxx_irq_map[]; | |||
505 | 549 | ||
506 | #define IC1_TESTBIT 0xB1800080 | 550 | #define IC1_TESTBIT 0xB1800080 |
507 | 551 | ||
508 | /* Interrupt Configuration Modes */ | ||
509 | #define INTC_INT_DISABLED 0x0 | ||
510 | #define INTC_INT_RISE_EDGE 0x1 | ||
511 | #define INTC_INT_FALL_EDGE 0x2 | ||
512 | #define INTC_INT_RISE_AND_FALL_EDGE 0x3 | ||
513 | #define INTC_INT_HIGH_LEVEL 0x5 | ||
514 | #define INTC_INT_LOW_LEVEL 0x6 | ||
515 | #define INTC_INT_HIGH_AND_LOW_LEVEL 0x7 | ||
516 | |||
517 | /* Interrupt Numbers */ | 552 | /* Interrupt Numbers */ |
518 | /* Au1000 */ | 553 | /* Au1000 */ |
519 | #ifdef CONFIG_SOC_AU1000 | 554 | #ifdef CONFIG_SOC_AU1000 |
@@ -1525,6 +1560,10 @@ enum soc_au1200_ints { | |||
1525 | #define SYS_SLPPWR 0xB1900078 | 1560 | #define SYS_SLPPWR 0xB1900078 |
1526 | #define SYS_SLEEP 0xB190007C | 1561 | #define SYS_SLEEP 0xB190007C |
1527 | 1562 | ||
1563 | #define SYS_WAKEMSK_D2 (1 << 9) | ||
1564 | #define SYS_WAKEMSK_M2 (1 << 8) | ||
1565 | #define SYS_WAKEMSK_GPIO(x) (1 << (x)) | ||
1566 | |||
1528 | /* Clock Controller */ | 1567 | /* Clock Controller */ |
1529 | #define SYS_FREQCTRL0 0xB1900020 | 1568 | #define SYS_FREQCTRL0 0xB1900020 |
1530 | # define SYS_FC_FRDIV2_BIT 22 | 1569 | # define SYS_FC_FRDIV2_BIT 22 |
@@ -1749,24 +1788,4 @@ static AU1X00_SYS * const sys = (AU1X00_SYS *)SYS_BASE; | |||
1749 | 1788 | ||
1750 | #endif | 1789 | #endif |
1751 | 1790 | ||
1752 | /* | ||
1753 | * Processor information based on PRID. | ||
1754 | * Copied from PowerPC. | ||
1755 | */ | ||
1756 | #ifndef _LANGUAGE_ASSEMBLY | ||
1757 | struct cpu_spec { | ||
1758 | /* CPU is matched via (PRID & prid_mask) == prid_value */ | ||
1759 | unsigned int prid_mask; | ||
1760 | unsigned int prid_value; | ||
1761 | |||
1762 | char *cpu_name; | ||
1763 | unsigned char cpu_od; /* Set Config[OD] */ | ||
1764 | unsigned char cpu_bclk; /* Enable BCLK switching */ | ||
1765 | unsigned char cpu_pll_wo; /* sys_cpupll reg. write-only */ | ||
1766 | }; | ||
1767 | |||
1768 | extern struct cpu_spec cpu_specs[]; | ||
1769 | extern struct cpu_spec *cur_cpu_spec[]; | ||
1770 | #endif | ||
1771 | |||
1772 | #endif | 1791 | #endif |