| .. | .. |
|---|
| 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 */ |
|---|