171e2f4ddSJiaxun Yang /* SPDX-License-Identifier: GPL-2.0-or-later */
271e2f4ddSJiaxun Yang /*
371e2f4ddSJiaxun Yang  * Copyright (c) 2008 Zhang Le <r0bertz@gentoo.org>
471e2f4ddSJiaxun Yang  * Copyright (c) 2009 Wu Zhangjin <wuzhangjin@gmail.com>
571e2f4ddSJiaxun Yang  */
671e2f4ddSJiaxun Yang 
771e2f4ddSJiaxun Yang #ifndef __ASM_MACH_LOONGSON64_PCI_H_
871e2f4ddSJiaxun Yang #define __ASM_MACH_LOONGSON64_PCI_H_
971e2f4ddSJiaxun Yang 
1071e2f4ddSJiaxun Yang extern struct pci_ops loongson_pci_ops;
1171e2f4ddSJiaxun Yang 
1271e2f4ddSJiaxun Yang /* this is an offset from mips_io_port_base */
1371e2f4ddSJiaxun Yang #define LOONGSON_PCI_IO_START	0x00004000UL
1471e2f4ddSJiaxun Yang 
1571e2f4ddSJiaxun Yang #ifdef CONFIG_CPU_SUPPORTS_ADDRWINCFG
1671e2f4ddSJiaxun Yang 
1771e2f4ddSJiaxun Yang /*
1871e2f4ddSJiaxun Yang  * we use address window2 to map cpu address space to pci space
1971e2f4ddSJiaxun Yang  * window2: cpu [1G, 2G] -> pci [1G, 2G]
2071e2f4ddSJiaxun Yang  * why not use window 0 & 1? because they are used by cpu when booting.
2171e2f4ddSJiaxun Yang  * window0: cpu [0, 256M] -> ddr [0, 256M]
2271e2f4ddSJiaxun Yang  * window1: cpu [256M, 512M] -> pci [256M, 512M]
2371e2f4ddSJiaxun Yang  */
2471e2f4ddSJiaxun Yang 
2571e2f4ddSJiaxun Yang /* the smallest LOONGSON_CPU_MEM_SRC can be 512M */
2671e2f4ddSJiaxun Yang #define LOONGSON_CPU_MEM_SRC	0x40000000ul		/* 1G */
2771e2f4ddSJiaxun Yang #define LOONGSON_PCI_MEM_DST	LOONGSON_CPU_MEM_SRC
2871e2f4ddSJiaxun Yang 
2971e2f4ddSJiaxun Yang #define LOONGSON_PCI_MEM_START	LOONGSON_PCI_MEM_DST
3071e2f4ddSJiaxun Yang #define LOONGSON_PCI_MEM_END	(0x80000000ul-1)	/* 2G */
3171e2f4ddSJiaxun Yang 
3271e2f4ddSJiaxun Yang #define MMAP_CPUTOPCI_SIZE	(LOONGSON_PCI_MEM_END - \
3371e2f4ddSJiaxun Yang 					LOONGSON_PCI_MEM_START + 1)
3471e2f4ddSJiaxun Yang 
3571e2f4ddSJiaxun Yang #else	/* loongson2f/32bit & loongson2e */
3671e2f4ddSJiaxun Yang 
3771e2f4ddSJiaxun Yang /* this pci memory space is mapped by pcimap in pci.c */
3871e2f4ddSJiaxun Yang #ifdef CONFIG_CPU_LOONGSON64
3971e2f4ddSJiaxun Yang #define LOONGSON_PCI_MEM_START	0x40000000UL
4071e2f4ddSJiaxun Yang #define LOONGSON_PCI_MEM_END	0x7effffffUL
4171e2f4ddSJiaxun Yang #else
4271e2f4ddSJiaxun Yang #define LOONGSON_PCI_MEM_START	LOONGSON_PCILO1_BASE
4371e2f4ddSJiaxun Yang #define LOONGSON_PCI_MEM_END	(LOONGSON_PCILO1_BASE + 0x04000000 * 2)
4471e2f4ddSJiaxun Yang #endif
4571e2f4ddSJiaxun Yang /* this is an offset from mips_io_port_base */
4671e2f4ddSJiaxun Yang #define LOONGSON_PCI_IO_START	0x00004000UL
4771e2f4ddSJiaxun Yang 
4871e2f4ddSJiaxun Yang #endif	/* !CONFIG_CPU_SUPPORTS_ADDRWINCFG */
4971e2f4ddSJiaxun Yang 
5071e2f4ddSJiaxun Yang #endif /* !__ASM_MACH_LOONGSON64_PCI_H_ */
51