aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/netlogic/xlp/nlm_hal.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/mips/netlogic/xlp/nlm_hal.c')
-rw-r--r--arch/mips/netlogic/xlp/nlm_hal.c84
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
69int nlm_irq_to_irt(int irq) 69static 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
97static 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
195int 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
181unsigned int nlm_get_core_frequency(int node, int core) 209unsigned 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;