18599515fSGabor Juhos /* 28599515fSGabor Juhos * Faraday FTPCI100 PCI Bridge Controller Device Driver Implementation 38599515fSGabor Juhos * 48599515fSGabor Juhos * Copyright (C) 2010 Andes Technology Corporation 58599515fSGabor Juhos * Gavin Guo, Andes Technology Corporation <gavinguo@andestech.com> 68599515fSGabor Juhos * Macpaul Lin, Andes Technology Corporation <macpaul@andestech.com> 78599515fSGabor Juhos * 8*aaf5e825STom Rini * SPDX-License-Identifier: GPL-2.0+ 98599515fSGabor Juhos */ 108599515fSGabor Juhos 118599515fSGabor Juhos #ifndef __FTPCI100_H 128599515fSGabor Juhos #define __FTPCI100_H 138599515fSGabor Juhos 148599515fSGabor Juhos /* AHB Control Registers */ 158599515fSGabor Juhos struct ftpci100_ahbc { 168599515fSGabor Juhos unsigned int iosize; /* 0x00 - I/O Space Size Signal */ 178599515fSGabor Juhos unsigned int prot; /* 0x04 - AHB Protection */ 188599515fSGabor Juhos unsigned int rsved[8]; /* 0x08-0x24 - Reserved */ 198599515fSGabor Juhos unsigned int conf; /* 0x28 - PCI Configuration */ 208599515fSGabor Juhos unsigned int data; /* 0x2c - PCI Configuration DATA */ 218599515fSGabor Juhos }; 228599515fSGabor Juhos 238599515fSGabor Juhos /* 248599515fSGabor Juhos * FTPCI100_IOSIZE_REG's constant definitions 258599515fSGabor Juhos */ 268599515fSGabor Juhos #define FTPCI100_BASE_IO_SIZE(x) (ffs(x) - 1) /* 1M - 2048M */ 278599515fSGabor Juhos 288599515fSGabor Juhos /* 298599515fSGabor Juhos * PCI Configuration Register 308599515fSGabor Juhos */ 318599515fSGabor Juhos #define PCI_INT_MASK 0x4c 328599515fSGabor Juhos #define PCI_MEM_BASE_SIZE1 0x50 338599515fSGabor Juhos #define PCI_MEM_BASE_SIZE2 0x54 348599515fSGabor Juhos #define PCI_MEM_BASE_SIZE3 0x58 358599515fSGabor Juhos 368599515fSGabor Juhos /* 378599515fSGabor Juhos * PCI_INT_MASK's bit definitions 388599515fSGabor Juhos */ 398599515fSGabor Juhos #define PCI_INTA_ENABLE (1 << 22) 408599515fSGabor Juhos #define PCI_INTB_ENABLE (1 << 23) 418599515fSGabor Juhos #define PCI_INTC_ENABLE (1 << 24) 428599515fSGabor Juhos #define PCI_INTD_ENABLE (1 << 25) 438599515fSGabor Juhos 448599515fSGabor Juhos /* 458599515fSGabor Juhos * PCI_MEM_BASE_SIZE1's constant definitions 468599515fSGabor Juhos */ 478599515fSGabor Juhos #define FTPCI100_BASE_ADR_SIZE(x) ((ffs(x) - 1) << 16) /* 1M - 2048M */ 488599515fSGabor Juhos 498599515fSGabor Juhos #define FTPCI100_MAX_FUNCTIONS 20 508599515fSGabor Juhos #define PCI_IRQ_LINES 4 518599515fSGabor Juhos 528599515fSGabor Juhos #define MAX_BUS_NUM 256 538599515fSGabor Juhos #define MAX_DEV_NUM 32 548599515fSGabor Juhos #define MAX_FUN_NUM 8 558599515fSGabor Juhos 568599515fSGabor Juhos #define PCI_MAX_BAR_PER_FUNC 6 578599515fSGabor Juhos 588599515fSGabor Juhos /* 598599515fSGabor Juhos * PCI_MEM_SIZE 608599515fSGabor Juhos */ 618599515fSGabor Juhos #define FTPCI100_MEM_SIZE(x) (ffs(x) << 24) 628599515fSGabor Juhos 638599515fSGabor Juhos /* This definition is used by pci_ftpci_init() */ 648599515fSGabor Juhos #define FTPCI100_BRIDGE_VENDORID 0x159b 658599515fSGabor Juhos #define FTPCI100_BRIDGE_DEVICEID 0x4321 668599515fSGabor Juhos 678599515fSGabor Juhos void pci_ftpci_init(void); 688599515fSGabor Juhos 698599515fSGabor Juhos struct pcibar { 708599515fSGabor Juhos unsigned int size; 718599515fSGabor Juhos unsigned int addr; 728599515fSGabor Juhos }; 738599515fSGabor Juhos 748599515fSGabor Juhos struct pci_config { 758599515fSGabor Juhos unsigned int bus; 768599515fSGabor Juhos unsigned int dev; /* device */ 778599515fSGabor Juhos unsigned int func; 788599515fSGabor Juhos unsigned int pin; 798599515fSGabor Juhos unsigned short v_id; /* vendor id */ 808599515fSGabor Juhos unsigned short d_id; /* device id */ 818599515fSGabor Juhos struct pcibar bar[PCI_MAX_BAR_PER_FUNC + 1]; 828599515fSGabor Juhos }; 838599515fSGabor Juhos 848599515fSGabor Juhos #endif 85