diff options
Diffstat (limited to 'arch/mips/netlogic/xlp/nlm_hal.c')
-rw-r--r-- | arch/mips/netlogic/xlp/nlm_hal.c | 84 |
1 files changed, 56 insertions, 28 deletions
diff --git a/arch/mips/netlogic/xlp/nlm_hal.c b/arch/mips/netlogic/xlp/nlm_hal.c index 7b277cda31f3..9f9814d646a9 100644 --- a/arch/mips/netlogic/xlp/nlm_hal.c +++ b/arch/mips/netlogic/xlp/nlm_hal.c | |||
@@ -66,31 +66,39 @@ void nlm_node_init(int node) | |||
66 | spin_lock_init(&nodep->piclock); | 66 | spin_lock_init(&nodep->piclock); |
67 | } | 67 | } |
68 | 68 | ||
69 | int nlm_irq_to_irt(int irq) | 69 | static int xlp9xx_irq_to_irt(int irq) |
70 | { | ||
71 | switch (irq) { | ||
72 | case PIC_GPIO_IRQ: | ||
73 | return 12; | ||
74 | case PIC_9XX_XHCI_0_IRQ: | ||
75 | return 114; | ||
76 | case PIC_9XX_XHCI_1_IRQ: | ||
77 | return 115; | ||
78 | case PIC_UART_0_IRQ: | ||
79 | return 133; | ||
80 | case PIC_UART_1_IRQ: | ||
81 | return 134; | ||
82 | case PIC_SATA_IRQ: | ||
83 | return 143; | ||
84 | case PIC_SPI_IRQ: | ||
85 | return 152; | ||
86 | case PIC_MMC_IRQ: | ||
87 | return 153; | ||
88 | case PIC_PCIE_LINK_LEGACY_IRQ(0): | ||
89 | case PIC_PCIE_LINK_LEGACY_IRQ(1): | ||
90 | case PIC_PCIE_LINK_LEGACY_IRQ(2): | ||
91 | case PIC_PCIE_LINK_LEGACY_IRQ(3): | ||
92 | return 191 + irq - PIC_PCIE_LINK_LEGACY_IRQ_BASE; | ||
93 | } | ||
94 | return -1; | ||
95 | } | ||
96 | |||
97 | static int xlp_irq_to_irt(int irq) | ||
70 | { | 98 | { |
71 | uint64_t pcibase; | 99 | uint64_t pcibase; |
72 | int devoff, irt; | 100 | int devoff, irt; |
73 | 101 | ||
74 | /* bypass for 9xx */ | ||
75 | if (cpu_is_xlp9xx()) { | ||
76 | switch (irq) { | ||
77 | case PIC_9XX_XHCI_0_IRQ: | ||
78 | return 114; | ||
79 | case PIC_9XX_XHCI_1_IRQ: | ||
80 | return 115; | ||
81 | case PIC_UART_0_IRQ: | ||
82 | return 133; | ||
83 | case PIC_UART_1_IRQ: | ||
84 | return 134; | ||
85 | case PIC_PCIE_LINK_LEGACY_IRQ(0): | ||
86 | case PIC_PCIE_LINK_LEGACY_IRQ(1): | ||
87 | case PIC_PCIE_LINK_LEGACY_IRQ(2): | ||
88 | case PIC_PCIE_LINK_LEGACY_IRQ(3): | ||
89 | return 191 + irq - PIC_PCIE_LINK_LEGACY_IRQ_BASE; | ||
90 | } | ||
91 | return -1; | ||
92 | } | ||
93 | |||
94 | devoff = 0; | 102 | devoff = 0; |
95 | switch (irq) { | 103 | switch (irq) { |
96 | case PIC_UART_0_IRQ: | 104 | case PIC_UART_0_IRQ: |
@@ -100,7 +108,7 @@ int nlm_irq_to_irt(int irq) | |||
100 | devoff = XLP_IO_UART1_OFFSET(0); | 108 | devoff = XLP_IO_UART1_OFFSET(0); |
101 | break; | 109 | break; |
102 | case PIC_MMC_IRQ: | 110 | case PIC_MMC_IRQ: |
103 | devoff = XLP_IO_SD_OFFSET(0); | 111 | devoff = XLP_IO_MMC_OFFSET(0); |
104 | break; | 112 | break; |
105 | case PIC_I2C_0_IRQ: /* I2C will be fixed up */ | 113 | case PIC_I2C_0_IRQ: /* I2C will be fixed up */ |
106 | case PIC_I2C_1_IRQ: | 114 | case PIC_I2C_1_IRQ: |
@@ -111,6 +119,18 @@ int nlm_irq_to_irt(int irq) | |||
111 | else | 119 | else |
112 | devoff = XLP_IO_I2C0_OFFSET(0); | 120 | devoff = XLP_IO_I2C0_OFFSET(0); |
113 | break; | 121 | break; |
122 | case PIC_SATA_IRQ: | ||
123 | devoff = XLP_IO_SATA_OFFSET(0); | ||
124 | break; | ||
125 | case PIC_GPIO_IRQ: | ||
126 | devoff = XLP_IO_GPIO_OFFSET(0); | ||
127 | break; | ||
128 | case PIC_NAND_IRQ: | ||
129 | devoff = XLP_IO_NAND_OFFSET(0); | ||
130 | break; | ||
131 | case PIC_SPI_IRQ: | ||
132 | devoff = XLP_IO_SPI_OFFSET(0); | ||
133 | break; | ||
114 | default: | 134 | default: |
115 | if (cpu_is_xlpii()) { | 135 | if (cpu_is_xlpii()) { |
116 | switch (irq) { | 136 | switch (irq) { |
@@ -166,18 +186,26 @@ int nlm_irq_to_irt(int irq) | |||
166 | /* HW bug, PCI IRT entries are bad on early silicon, fix */ | 186 | /* HW bug, PCI IRT entries are bad on early silicon, fix */ |
167 | irt = PIC_IRT_PCIE_LINK_INDEX(irq - | 187 | irt = PIC_IRT_PCIE_LINK_INDEX(irq - |
168 | PIC_PCIE_LINK_LEGACY_IRQ_BASE); | 188 | PIC_PCIE_LINK_LEGACY_IRQ_BASE); |
169 | } else if (irq >= PIC_PCIE_LINK_MSI_IRQ(0) && | ||
170 | irq <= PIC_PCIE_LINK_MSI_IRQ(3)) { | ||
171 | irt = -2; | ||
172 | } else if (irq >= PIC_PCIE_MSIX_IRQ(0) && | ||
173 | irq <= PIC_PCIE_MSIX_IRQ(3)) { | ||
174 | irt = -2; | ||
175 | } else { | 189 | } else { |
176 | irt = -1; | 190 | irt = -1; |
177 | } | 191 | } |
178 | return irt; | 192 | return irt; |
179 | } | 193 | } |
180 | 194 | ||
195 | int nlm_irq_to_irt(int irq) | ||
196 | { | ||
197 | /* return -2 for irqs without 1-1 mapping */ | ||
198 | if (irq >= PIC_PCIE_LINK_MSI_IRQ(0) && irq <= PIC_PCIE_LINK_MSI_IRQ(3)) | ||
199 | return -2; | ||
200 | if (irq >= PIC_PCIE_MSIX_IRQ(0) && irq <= PIC_PCIE_MSIX_IRQ(3)) | ||
201 | return -2; | ||
202 | |||
203 | if (cpu_is_xlp9xx()) | ||
204 | return xlp9xx_irq_to_irt(irq); | ||
205 | else | ||
206 | return xlp_irq_to_irt(irq); | ||
207 | } | ||
208 | |||
181 | unsigned int nlm_get_core_frequency(int node, int core) | 209 | unsigned int nlm_get_core_frequency(int node, int core) |
182 | { | 210 | { |
183 | unsigned int pll_divf, pll_divr, dfs_div, ext_div; | 211 | unsigned int pll_divf, pll_divr, dfs_div, ext_div; |