diff options
Diffstat (limited to 'arch/mips/netlogic/xlp/nlm_hal.c')
| -rw-r--r-- | arch/mips/netlogic/xlp/nlm_hal.c | 67 |
1 files changed, 15 insertions, 52 deletions
diff --git a/arch/mips/netlogic/xlp/nlm_hal.c b/arch/mips/netlogic/xlp/nlm_hal.c index 6c65ac701912..529e74742d9f 100644 --- a/arch/mips/netlogic/xlp/nlm_hal.c +++ b/arch/mips/netlogic/xlp/nlm_hal.c | |||
| @@ -40,23 +40,23 @@ | |||
| 40 | #include <asm/mipsregs.h> | 40 | #include <asm/mipsregs.h> |
| 41 | #include <asm/time.h> | 41 | #include <asm/time.h> |
| 42 | 42 | ||
| 43 | #include <asm/netlogic/common.h> | ||
| 43 | #include <asm/netlogic/haldefs.h> | 44 | #include <asm/netlogic/haldefs.h> |
| 44 | #include <asm/netlogic/xlp-hal/iomap.h> | 45 | #include <asm/netlogic/xlp-hal/iomap.h> |
| 45 | #include <asm/netlogic/xlp-hal/xlp.h> | 46 | #include <asm/netlogic/xlp-hal/xlp.h> |
| 46 | #include <asm/netlogic/xlp-hal/pic.h> | 47 | #include <asm/netlogic/xlp-hal/pic.h> |
| 47 | #include <asm/netlogic/xlp-hal/sys.h> | 48 | #include <asm/netlogic/xlp-hal/sys.h> |
| 48 | 49 | ||
| 49 | /* These addresses are computed by the nlm_hal_init() */ | ||
| 50 | uint64_t nlm_io_base; | ||
| 51 | uint64_t nlm_sys_base; | ||
| 52 | uint64_t nlm_pic_base; | ||
| 53 | |||
| 54 | /* Main initialization */ | 50 | /* Main initialization */ |
| 55 | void nlm_hal_init(void) | 51 | void nlm_node_init(int node) |
| 56 | { | 52 | { |
| 57 | nlm_io_base = CKSEG1ADDR(XLP_DEFAULT_IO_BASE); | 53 | struct nlm_soc_info *nodep; |
| 58 | nlm_sys_base = nlm_get_sys_regbase(0); /* node 0 */ | 54 | |
| 59 | nlm_pic_base = nlm_get_pic_regbase(0); /* node 0 */ | 55 | nodep = nlm_get_node(node); |
| 56 | nodep->sysbase = nlm_get_sys_regbase(node); | ||
| 57 | nodep->picbase = nlm_get_pic_regbase(node); | ||
| 58 | nodep->ebase = read_c0_ebase() & (~((1 << 12) - 1)); | ||
| 59 | spin_lock_init(&nodep->piclock); | ||
| 60 | } | 60 | } |
| 61 | 61 | ||
| 62 | int nlm_irq_to_irt(int irq) | 62 | int nlm_irq_to_irt(int irq) |
| @@ -100,52 +100,15 @@ int nlm_irq_to_irt(int irq) | |||
| 100 | } | 100 | } |
| 101 | } | 101 | } |
| 102 | 102 | ||
| 103 | int nlm_irt_to_irq(int irt) | 103 | unsigned int nlm_get_core_frequency(int node, int core) |
| 104 | { | ||
| 105 | switch (irt) { | ||
| 106 | case PIC_IRT_UART_0_INDEX: | ||
| 107 | return PIC_UART_0_IRQ; | ||
| 108 | case PIC_IRT_UART_1_INDEX: | ||
| 109 | return PIC_UART_1_IRQ; | ||
| 110 | case PIC_IRT_PCIE_LINK_0_INDEX: | ||
| 111 | return PIC_PCIE_LINK_0_IRQ; | ||
| 112 | case PIC_IRT_PCIE_LINK_1_INDEX: | ||
| 113 | return PIC_PCIE_LINK_1_IRQ; | ||
| 114 | case PIC_IRT_PCIE_LINK_2_INDEX: | ||
| 115 | return PIC_PCIE_LINK_2_IRQ; | ||
| 116 | case PIC_IRT_PCIE_LINK_3_INDEX: | ||
| 117 | return PIC_PCIE_LINK_3_IRQ; | ||
| 118 | case PIC_IRT_EHCI_0_INDEX: | ||
| 119 | return PIC_EHCI_0_IRQ; | ||
| 120 | case PIC_IRT_EHCI_1_INDEX: | ||
| 121 | return PIC_EHCI_1_IRQ; | ||
| 122 | case PIC_IRT_OHCI_0_INDEX: | ||
| 123 | return PIC_OHCI_0_IRQ; | ||
| 124 | case PIC_IRT_OHCI_1_INDEX: | ||
| 125 | return PIC_OHCI_1_IRQ; | ||
| 126 | case PIC_IRT_OHCI_2_INDEX: | ||
| 127 | return PIC_OHCI_2_IRQ; | ||
| 128 | case PIC_IRT_OHCI_3_INDEX: | ||
| 129 | return PIC_OHCI_3_IRQ; | ||
| 130 | case PIC_IRT_MMC_INDEX: | ||
| 131 | return PIC_MMC_IRQ; | ||
| 132 | case PIC_IRT_I2C_0_INDEX: | ||
| 133 | return PIC_I2C_0_IRQ; | ||
| 134 | case PIC_IRT_I2C_1_INDEX: | ||
| 135 | return PIC_I2C_1_IRQ; | ||
| 136 | default: | ||
| 137 | return -1; | ||
| 138 | } | ||
| 139 | } | ||
| 140 | |||
| 141 | unsigned int nlm_get_core_frequency(int core) | ||
| 142 | { | 104 | { |
| 143 | unsigned int pll_divf, pll_divr, dfs_div, ext_div; | 105 | unsigned int pll_divf, pll_divr, dfs_div, ext_div; |
| 144 | unsigned int rstval, dfsval, denom; | 106 | unsigned int rstval, dfsval, denom; |
| 145 | uint64_t num; | 107 | uint64_t num, sysbase; |
| 146 | 108 | ||
| 147 | rstval = nlm_read_sys_reg(nlm_sys_base, SYS_POWER_ON_RESET_CFG); | 109 | sysbase = nlm_get_node(node)->sysbase; |
| 148 | dfsval = nlm_read_sys_reg(nlm_sys_base, SYS_CORE_DFS_DIV_VALUE); | 110 | rstval = nlm_read_sys_reg(sysbase, SYS_POWER_ON_RESET_CFG); |
| 111 | dfsval = nlm_read_sys_reg(sysbase, SYS_CORE_DFS_DIV_VALUE); | ||
| 149 | pll_divf = ((rstval >> 10) & 0x7f) + 1; | 112 | pll_divf = ((rstval >> 10) & 0x7f) + 1; |
| 150 | pll_divr = ((rstval >> 8) & 0x3) + 1; | 113 | pll_divr = ((rstval >> 8) & 0x3) + 1; |
| 151 | ext_div = ((rstval >> 30) & 0x3) + 1; | 114 | ext_div = ((rstval >> 30) & 0x3) + 1; |
| @@ -159,5 +122,5 @@ unsigned int nlm_get_core_frequency(int core) | |||
| 159 | 122 | ||
| 160 | unsigned int nlm_get_cpu_frequency(void) | 123 | unsigned int nlm_get_cpu_frequency(void) |
| 161 | { | 124 | { |
| 162 | return nlm_get_core_frequency(0); | 125 | return nlm_get_core_frequency(0, 0); |
| 163 | } | 126 | } |
