// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright ( C ) 2007 Lemote , Inc . & Institute of Computing Technology
* Author : Fuxin Zhang , zhangfx @ lemote . com
*/
#include <linux/pci.h>
#include <pci.h>
#include <loongson.h>
static struct resource loongson_pci_mem_resource = {
.name = "pci memory space" ,
.start = LOONGSON_PCI_MEM_START,
.end = LOONGSON_PCI_MEM_END,
.flags = IORESOURCE_MEM,
};
static struct resource loongson_pci_io_resource = {
.name = "pci io space" ,
.start = LOONGSON_PCI_IO_START,
.end = IO_SPACE_LIMIT,
.flags = IORESOURCE_IO,
};
static struct pci_controller loongson_pci_controller = {
.pci_ops = &loongson_pci_ops,
.io_resource = &loongson_pci_io_resource,
.mem_resource = &loongson_pci_mem_resource,
.mem_offset = 0 x00000000UL,
.io_offset = 0 x00000000UL,
};
static void __init setup_pcimap(void )
{
/*
* local to PCI mapping for CPU accessing PCI space
* CPU address space [ 256 M , 448 M ] is window for accessing pci space
* we set pcimap_lo [ 0 , 1 , 2 ] to map it to pci space [ 0 M , 64 M ] , [ 320 M , 448 M ]
*
* pcimap : PCI_MAP2 PCI_Mem_Lo2 PCI_Mem_Lo1 PCI_Mem_Lo0
* [ < 2 G ] [ 384 M , 448 M ] [ 320 M , 384 M ] [ 0 M , 64 M ]
*/
LOONGSON_PCIMAP = LOONGSON_PCIMAP_PCIMAP_2 |
LOONGSON_PCIMAP_WIN(2 , LOONGSON_PCILO2_BASE) |
LOONGSON_PCIMAP_WIN(1 , LOONGSON_PCILO1_BASE) |
LOONGSON_PCIMAP_WIN(0 , 0 );
/*
* PCI - DMA to local mapping : [ 2 G , 2 G + 256 M ] - > [ 0 M , 256 M ]
*/
LOONGSON_PCIBASE0 = 0 x80000000ul; /* base: 2G -> mmap: 0M */
/* size: 256M, burst transmission, pre-fetch enable, 64bit */
LOONGSON_PCI_HIT0_SEL_L = 0 xc000000cul;
LOONGSON_PCI_HIT0_SEL_H = 0 xfffffffful;
LOONGSON_PCI_HIT1_SEL_L = 0 x00000006ul; /* set this BAR as invalid */
LOONGSON_PCI_HIT1_SEL_H = 0 x00000000ul;
LOONGSON_PCI_HIT2_SEL_L = 0 x00000006ul; /* set this BAR as invalid */
LOONGSON_PCI_HIT2_SEL_H = 0 x00000000ul;
/* avoid deadlock of PCI reading/writing lock operation */
LOONGSON_PCI_ISR4C = 0 xd2000001ul;
/* can not change gnt to break pci transfer when device's gnt not
deassert for some broken device */
LOONGSON_PXARB_CFG = 0 x00fe0105ul;
#ifdef CONFIG_CPU_SUPPORTS_ADDRWINCFG
/*
* set cpu addr window2 to map CPU address space to PCI address space
*/
LOONGSON_ADDRWIN_CPUTOPCI(ADDRWIN_WIN2, LOONGSON_CPU_MEM_SRC,
LOONGSON_PCI_MEM_DST, MMAP_CPUTOPCI_SIZE);
#endif
}
static int __init pcibios_init(void )
{
setup_pcimap();
loongson_pci_controller.io_map_base = mips_io_port_base;
register_pci_controller(&loongson_pci_controller);
return 0 ;
}
arch_initcall(pcibios_init);
Messung V0.5 in Prozent C=89 H=100 G=94
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.10Bemerkung:
(vorverarbeitet am 2026-09-28)
¤
*Bot Zugriff