.. | .. |
---|
| 1 | +/* SPDX-License-Identifier: GPL-2.0-or-later */ |
---|
1 | 2 | /* |
---|
2 | 3 | * Copyright (C) 2009 Lemote, Inc. |
---|
3 | 4 | * Author: Wu Zhangjin <wuzhangjin@gmail.com> |
---|
4 | | - * |
---|
5 | | - * This program is free software; you can redistribute it and/or modify it |
---|
6 | | - * under the terms of the GNU General Public License as published by the |
---|
7 | | - * Free Software Foundation; either version 2 of the License, or (at your |
---|
8 | | - * option) any later version. |
---|
9 | 5 | */ |
---|
10 | 6 | |
---|
11 | 7 | #ifndef __ASM_MACH_LOONGSON64_LOONGSON_H |
---|
.. | .. |
---|
16 | 12 | #include <linux/irq.h> |
---|
17 | 13 | #include <boot_param.h> |
---|
18 | 14 | |
---|
19 | | -/* loongson internal northbridge initialization */ |
---|
20 | | -extern void bonito_irq_init(void); |
---|
21 | 15 | |
---|
22 | 16 | /* machine-specific reboot/halt operation */ |
---|
23 | 17 | extern void mach_prepare_reboot(void); |
---|
.. | .. |
---|
30 | 24 | |
---|
31 | 25 | /* loongson-specific command line, env and memory initialization */ |
---|
32 | 26 | extern void __init prom_init_memory(void); |
---|
33 | | -extern void __init prom_init_cmdline(void); |
---|
34 | | -extern void __init prom_init_machtype(void); |
---|
35 | 27 | extern void __init prom_init_env(void); |
---|
36 | | -#ifdef CONFIG_LOONGSON_UART_BASE |
---|
37 | | -extern unsigned long _loongson_uart_base[], loongson_uart_base[]; |
---|
38 | | -extern void prom_init_loongson_uart_base(void); |
---|
39 | | -#endif |
---|
40 | | - |
---|
41 | | -static inline void prom_init_uart_base(void) |
---|
42 | | -{ |
---|
43 | | -#ifdef CONFIG_LOONGSON_UART_BASE |
---|
44 | | - prom_init_loongson_uart_base(); |
---|
45 | | -#endif |
---|
46 | | -} |
---|
| 28 | +extern void *loongson_fdt_blob; |
---|
47 | 29 | |
---|
48 | 30 | /* irq operation functions */ |
---|
49 | | -extern void bonito_irqdispatch(void); |
---|
50 | | -extern void __init bonito_irq_init(void); |
---|
51 | | -extern void __init mach_init_irq(void); |
---|
52 | 31 | extern void mach_irq_dispatch(unsigned int pending); |
---|
53 | 32 | extern int mach_i8259_irq(void); |
---|
54 | 33 | |
---|
.. | .. |
---|
67 | 46 | |
---|
68 | 47 | #define LOONGSON3_REG32(base, x) \ |
---|
69 | 48 | (*(volatile u32 *)((char *)TO_UNCAC(base) + (x))) |
---|
70 | | - |
---|
71 | | -#define LOONGSON_IRQ_BASE 32 |
---|
72 | | -#define LOONGSON2_PERFCNT_IRQ (MIPS_CPU_IRQ_BASE + 6) /* cpu perf counter */ |
---|
73 | | - |
---|
74 | | -#include <linux/interrupt.h> |
---|
75 | | -static inline void do_perfcnt_IRQ(void) |
---|
76 | | -{ |
---|
77 | | -#if IS_ENABLED(CONFIG_OPROFILE) |
---|
78 | | - do_IRQ(LOONGSON2_PERFCNT_IRQ); |
---|
79 | | -#endif |
---|
80 | | -} |
---|
81 | 49 | |
---|
82 | 50 | #define LOONGSON_FLASH_BASE 0x1c000000 |
---|
83 | 51 | #define LOONGSON_FLASH_SIZE 0x02000000 /* 32M */ |
---|
.. | .. |
---|
113 | 81 | #define LOONGSON_PCICFG_SIZE 0x00000800 /* 2K */ |
---|
114 | 82 | #define LOONGSON_PCICFG_TOP (LOONGSON_PCICFG_BASE+LOONGSON_PCICFG_SIZE-1) |
---|
115 | 83 | |
---|
116 | | -#if defined(CONFIG_HT_PCI) |
---|
117 | 84 | #define LOONGSON_PCIIO_BASE loongson_sysconf.pci_io_base |
---|
118 | | -#else |
---|
119 | | -#define LOONGSON_PCIIO_BASE 0x1fd00000 |
---|
120 | | -#endif |
---|
121 | 85 | |
---|
122 | 86 | #define LOONGSON_PCIIO_SIZE 0x00100000 /* 1M */ |
---|
123 | 87 | #define LOONGSON_PCIIO_TOP (LOONGSON_PCIIO_BASE+LOONGSON_PCIIO_SIZE-1) |
---|
.. | .. |
---|
273 | 237 | #define LOONGSON_PCIMAP_PCIMAP_2 0x00040000 |
---|
274 | 238 | #define LOONGSON_PCIMAP_WIN(WIN, ADDR) \ |
---|
275 | 239 | ((((ADDR)>>26) & LOONGSON_PCIMAP_PCIMAP_LO0) << ((WIN)*6)) |
---|
276 | | - |
---|
277 | | -#ifdef CONFIG_CPU_SUPPORTS_CPUFREQ |
---|
278 | | -#include <linux/cpufreq.h> |
---|
279 | | -extern struct cpufreq_frequency_table loongson2_clockmod_table[]; |
---|
280 | | -#endif |
---|
281 | | - |
---|
282 | | -/* |
---|
283 | | - * address windows configuration module |
---|
284 | | - * |
---|
285 | | - * loongson2e do not have this module |
---|
286 | | - */ |
---|
287 | | -#ifdef CONFIG_CPU_SUPPORTS_ADDRWINCFG |
---|
288 | | - |
---|
289 | | -/* address window config module base address */ |
---|
290 | | -#define LOONGSON_ADDRWINCFG_BASE 0x3ff00000ul |
---|
291 | | -#define LOONGSON_ADDRWINCFG_SIZE 0x180 |
---|
292 | | - |
---|
293 | | -extern unsigned long _loongson_addrwincfg_base; |
---|
294 | | -#define LOONGSON_ADDRWINCFG(offset) \ |
---|
295 | | - (*(volatile u64 *)(_loongson_addrwincfg_base + (offset))) |
---|
296 | | - |
---|
297 | | -#define CPU_WIN0_BASE LOONGSON_ADDRWINCFG(0x00) |
---|
298 | | -#define CPU_WIN1_BASE LOONGSON_ADDRWINCFG(0x08) |
---|
299 | | -#define CPU_WIN2_BASE LOONGSON_ADDRWINCFG(0x10) |
---|
300 | | -#define CPU_WIN3_BASE LOONGSON_ADDRWINCFG(0x18) |
---|
301 | | - |
---|
302 | | -#define CPU_WIN0_MASK LOONGSON_ADDRWINCFG(0x20) |
---|
303 | | -#define CPU_WIN1_MASK LOONGSON_ADDRWINCFG(0x28) |
---|
304 | | -#define CPU_WIN2_MASK LOONGSON_ADDRWINCFG(0x30) |
---|
305 | | -#define CPU_WIN3_MASK LOONGSON_ADDRWINCFG(0x38) |
---|
306 | | - |
---|
307 | | -#define CPU_WIN0_MMAP LOONGSON_ADDRWINCFG(0x40) |
---|
308 | | -#define CPU_WIN1_MMAP LOONGSON_ADDRWINCFG(0x48) |
---|
309 | | -#define CPU_WIN2_MMAP LOONGSON_ADDRWINCFG(0x50) |
---|
310 | | -#define CPU_WIN3_MMAP LOONGSON_ADDRWINCFG(0x58) |
---|
311 | | - |
---|
312 | | -#define PCIDMA_WIN0_BASE LOONGSON_ADDRWINCFG(0x60) |
---|
313 | | -#define PCIDMA_WIN1_BASE LOONGSON_ADDRWINCFG(0x68) |
---|
314 | | -#define PCIDMA_WIN2_BASE LOONGSON_ADDRWINCFG(0x70) |
---|
315 | | -#define PCIDMA_WIN3_BASE LOONGSON_ADDRWINCFG(0x78) |
---|
316 | | - |
---|
317 | | -#define PCIDMA_WIN0_MASK LOONGSON_ADDRWINCFG(0x80) |
---|
318 | | -#define PCIDMA_WIN1_MASK LOONGSON_ADDRWINCFG(0x88) |
---|
319 | | -#define PCIDMA_WIN2_MASK LOONGSON_ADDRWINCFG(0x90) |
---|
320 | | -#define PCIDMA_WIN3_MASK LOONGSON_ADDRWINCFG(0x98) |
---|
321 | | - |
---|
322 | | -#define PCIDMA_WIN0_MMAP LOONGSON_ADDRWINCFG(0xa0) |
---|
323 | | -#define PCIDMA_WIN1_MMAP LOONGSON_ADDRWINCFG(0xa8) |
---|
324 | | -#define PCIDMA_WIN2_MMAP LOONGSON_ADDRWINCFG(0xb0) |
---|
325 | | -#define PCIDMA_WIN3_MMAP LOONGSON_ADDRWINCFG(0xb8) |
---|
326 | | - |
---|
327 | | -#define ADDRWIN_WIN0 0 |
---|
328 | | -#define ADDRWIN_WIN1 1 |
---|
329 | | -#define ADDRWIN_WIN2 2 |
---|
330 | | -#define ADDRWIN_WIN3 3 |
---|
331 | | - |
---|
332 | | -#define ADDRWIN_MAP_DST_DDR 0 |
---|
333 | | -#define ADDRWIN_MAP_DST_PCI 1 |
---|
334 | | -#define ADDRWIN_MAP_DST_LIO 1 |
---|
335 | | - |
---|
336 | | -/* |
---|
337 | | - * s: CPU, PCIDMA |
---|
338 | | - * d: DDR, PCI, LIO |
---|
339 | | - * win: 0, 1, 2, 3 |
---|
340 | | - * src: map source |
---|
341 | | - * dst: map destination |
---|
342 | | - * size: ~mask + 1 |
---|
343 | | - */ |
---|
344 | | -#define LOONGSON_ADDRWIN_CFG(s, d, w, src, dst, size) do {\ |
---|
345 | | - s##_WIN##w##_BASE = (src); \ |
---|
346 | | - s##_WIN##w##_MMAP = (dst) | ADDRWIN_MAP_DST_##d; \ |
---|
347 | | - s##_WIN##w##_MASK = ~(size-1); \ |
---|
348 | | -} while (0) |
---|
349 | | - |
---|
350 | | -#define LOONGSON_ADDRWIN_CPUTOPCI(win, src, dst, size) \ |
---|
351 | | - LOONGSON_ADDRWIN_CFG(CPU, PCI, win, src, dst, size) |
---|
352 | | -#define LOONGSON_ADDRWIN_CPUTODDR(win, src, dst, size) \ |
---|
353 | | - LOONGSON_ADDRWIN_CFG(CPU, DDR, win, src, dst, size) |
---|
354 | | -#define LOONGSON_ADDRWIN_PCITODDR(win, src, dst, size) \ |
---|
355 | | - LOONGSON_ADDRWIN_CFG(PCIDMA, DDR, win, src, dst, size) |
---|
356 | | - |
---|
357 | | -#endif /* ! CONFIG_CPU_SUPPORTS_ADDRWINCFG */ |
---|
358 | 240 | |
---|
359 | 241 | #endif /* __ASM_MACH_LOONGSON64_LOONGSON_H */ |
---|