Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.24-rc8 322 lines 10 kB view raw
1/* 2 * include/asm-ppc/gt64260.h 3 * 4 * Prototypes, etc. for the Marvell/Galileo GT64260 host bridge routines. 5 * 6 * Author: Mark A. Greer <mgreer@mvista.com> 7 * 8 * 2001 (c) MontaVista, Software, Inc. This file is licensed under 9 * the terms of the GNU General Public License version 2. This program 10 * is licensed "as is" without any warranty of any kind, whether express 11 * or implied. 12 */ 13#ifndef __ASMPPC_GT64260_H 14#define __ASMPPC_GT64260_H 15 16#include <linux/kernel.h> 17#include <linux/init.h> 18#include <linux/pci.h> 19#include <linux/slab.h> 20 21#include <asm/byteorder.h> 22#include <asm/io.h> 23#include <asm/irq.h> 24#include <asm/uaccess.h> 25#include <asm/machdep.h> 26#include <asm/pci-bridge.h> 27#include <asm/gt64260_defs.h> 28 29 30extern u32 gt64260_base; 31extern u32 gt64260_irq_base; /* We handle the next 96 IRQs from here */ 32extern u32 gt64260_revision; 33extern u8 gt64260_pci_exclude_bridge; 34 35#ifndef TRUE 36#define TRUE 1 37#endif 38 39#ifndef FALSE 40#define FALSE 0 41#endif 42 43/* IRQs defined by the 64260 */ 44#define GT64260_IRQ_MPSC0 40 45#define GT64260_IRQ_MPSC1 42 46#define GT64260_IRQ_SDMA 36 47 48/* 49 * Define a default physical memory map to be set up on the bridge. 50 * Also define a struct to pass that info from board-specific routines to 51 * GT64260 generic set up routines. By passing this info in, the board 52 * support developer can modify it at will. 53 */ 54 55/* 56 * This is the default memory map: 57 * CPU PCI 58 * --- --- 59 * PCI 0 I/O: 0xfa000000-0xfaffffff 0x00000000-0x00ffffff 60 * PCI 1 I/O: 0xfb000000-0xfbffffff 0x01000000-0x01ffffff 61 * PCI 0 MEM: 0x80000000-0x8fffffff 0x80000000-0x8fffffff 62 * PCI 1 MEM: 0x90000000-0x9fffffff 0x90000000-0x9fffffff 63 */ 64 65/* Default physical memory map for the GT64260 bridge */ 66 67/* 68 * PCI Bus 0 Definitions 69 */ 70#define GT64260_PCI_0_IO_SIZE 0x01000000U 71#define GT64260_PCI_0_MEM_SIZE 0x10000000U 72 73/* Processor Physical addresses */ 74#define GT64260_PCI_0_IO_START_PROC 0xfa000000U 75#define GT64260_PCI_0_IO_END_PROC (GT64260_PCI_0_IO_START_PROC + \ 76 GT64260_PCI_0_IO_SIZE - 1) 77 78/* PCI 0 addresses */ 79#define GT64260_PCI_0_IO_START 0x00000000U 80#define GT64260_PCI_0_IO_END (GT64260_PCI_0_IO_START + \ 81 GT64260_PCI_0_IO_SIZE - 1) 82 83/* Processor Physical addresses */ 84#define GT64260_PCI_0_MEM_START_PROC 0x80000000U 85#define GT64260_PCI_0_MEM_END_PROC (GT64260_PCI_0_MEM_START_PROC + \ 86 GT64260_PCI_0_MEM_SIZE - 1) 87 88/* PCI 0 addresses */ 89#define GT64260_PCI_0_MEM_START 0x80000000U 90#define GT64260_PCI_0_MEM_END (GT64260_PCI_0_MEM_START + \ 91 GT64260_PCI_0_MEM_SIZE - 1) 92 93/* 94 * PCI Bus 1 Definitions 95 */ 96#define GT64260_PCI_1_IO_SIZE 0x01000000U 97#define GT64260_PCI_1_MEM_SIZE 0x10000000U 98 99/* PCI 1 addresses */ 100#define GT64260_PCI_1_IO_START 0x01000000U 101#define GT64260_PCI_1_IO_END (GT64260_PCI_1_IO_START + \ 102 GT64260_PCI_1_IO_SIZE - 1) 103 104/* Processor Physical addresses */ 105#define GT64260_PCI_1_IO_START_PROC 0xfb000000U 106#define GT64260_PCI_1_IO_END_PROC (GT64260_PCI_1_IO_START_PROC + \ 107 GT64260_PCI_1_IO_SIZE - 1) 108 109/* PCI 1 addresses */ 110#define GT64260_PCI_1_MEM_START 0x90000000U 111#define GT64260_PCI_1_MEM_END (GT64260_PCI_1_MEM_START + \ 112 GT64260_PCI_1_MEM_SIZE - 1) 113 114/* Processor Physical addresses */ 115#define GT64260_PCI_1_MEM_START_PROC 0x90000000U 116#define GT64260_PCI_1_MEM_END_PROC (GT64260_PCI_1_MEM_START_PROC + \ 117 GT64260_PCI_1_MEM_SIZE - 1) 118 119/* Define struct to pass mem-map info into gt64260_common.c code */ 120typedef struct { 121 struct pci_controller *hose_a; 122 struct pci_controller *hose_b; 123 124 u32 mem_size; 125 126 u32 pci_0_io_start_proc; 127 u32 pci_0_io_start_pci; 128 u32 pci_0_io_size; 129 u32 pci_0_io_swap; 130 131 u32 pci_0_mem_start_proc; 132 u32 pci_0_mem_start_pci_hi; 133 u32 pci_0_mem_start_pci_lo; 134 u32 pci_0_mem_size; 135 u32 pci_0_mem_swap; 136 137 u32 pci_1_io_start_proc; 138 u32 pci_1_io_start_pci; 139 u32 pci_1_io_size; 140 u32 pci_1_io_swap; 141 142 u32 pci_1_mem_start_proc; 143 u32 pci_1_mem_start_pci_hi; 144 u32 pci_1_mem_start_pci_lo; 145 u32 pci_1_mem_size; 146 u32 pci_1_mem_swap; 147} gt64260_bridge_info_t; 148 149#define GT64260_BRIDGE_INFO_DEFAULT(ip, ms) { \ 150 (ip)->mem_size = (ms); \ 151 \ 152 (ip)->pci_0_io_start_proc = GT64260_PCI_0_IO_START_PROC; \ 153 (ip)->pci_0_io_start_pci = GT64260_PCI_0_IO_START; \ 154 (ip)->pci_0_io_size = GT64260_PCI_0_IO_SIZE; \ 155 (ip)->pci_0_io_swap = GT64260_CPU_PCI_SWAP_NONE; \ 156 \ 157 (ip)->pci_0_mem_start_proc = GT64260_PCI_0_MEM_START_PROC; \ 158 (ip)->pci_0_mem_start_pci_hi = 0x00000000; \ 159 (ip)->pci_0_mem_start_pci_lo = GT64260_PCI_0_MEM_START; \ 160 (ip)->pci_0_mem_size = GT64260_PCI_0_MEM_SIZE; \ 161 (ip)->pci_0_mem_swap = GT64260_CPU_PCI_SWAP_NONE; \ 162 \ 163 (ip)->pci_1_io_start_proc = GT64260_PCI_1_IO_START_PROC; \ 164 (ip)->pci_1_io_start_pci = GT64260_PCI_1_IO_START; \ 165 (ip)->pci_1_io_size = GT64260_PCI_1_IO_SIZE; \ 166 (ip)->pci_1_io_swap = GT64260_CPU_PCI_SWAP_NONE; \ 167 \ 168 (ip)->pci_1_mem_start_proc = GT64260_PCI_1_MEM_START_PROC; \ 169 (ip)->pci_1_mem_start_pci_hi = 0x00000000; \ 170 (ip)->pci_1_mem_start_pci_lo = GT64260_PCI_1_MEM_START; \ 171 (ip)->pci_1_mem_size = GT64260_PCI_1_MEM_SIZE; \ 172 (ip)->pci_1_mem_swap = GT64260_CPU_PCI_SWAP_NONE; \ 173} 174 175/* 176 ***************************************************************************** 177 * 178 * I/O macros to access the 64260's registers 179 * 180 ***************************************************************************** 181 */ 182 183extern inline uint32_t gt_read(uint32_t offs){ 184 return (in_le32((volatile uint *)(gt64260_base + offs))); 185} 186extern inline void gt_write(uint32_t offs, uint32_t d){ 187 out_le32((volatile uint *)(gt64260_base + offs), d); 188} 189 190#if 0 /* paranoid SMP version */ 191extern inline void gt_modify(u32 offs, u32 data, u32 mask) \ 192{ 193 uint32_t reg; 194 spin_lock(&gt64260_lock); 195 reg = gt_read(offs) & (~mask); /* zero any bits we care about*/ 196 reg |= data & mask; /* set bits from the data */ 197 gt_write(offs, reg); 198 spin_unlock(&gt64260_lock); 199} 200#else 201extern inline void gt_modify(uint32_t offs, uint32_t data, uint32_t mask) 202{ 203 uint32_t reg; 204 reg = gt_read(offs) & (~(mask)); /* zero any bits we care about*/ 205 reg |= (data) & (mask); /* set bits from the data */ 206 gt_write(offs, reg); 207} 208#endif 209#define gt_set_bits(offs, bits) gt_modify(offs, ~0, bits) 210 211#define gt_clr_bits(offs, bits) gt_modify(offs, 0, bits) 212 213 214/* 215 ***************************************************************************** 216 * 217 * Function Prototypes 218 * 219 ***************************************************************************** 220 */ 221 222int gt64260_find_bridges(u32 phys_base_addr, gt64260_bridge_info_t *info, 223 int ((*map_irq)(struct pci_dev *, unsigned char, unsigned char))); 224int gt64260_bridge_init(gt64260_bridge_info_t *info); 225int gt64260_cpu_scs_set_window(u32 window, 226 u32 base_addr, 227 u32 size); 228int gt64260_cpu_cs_set_window(u32 window, 229 u32 base_addr, 230 u32 size); 231int gt64260_cpu_boot_set_window(u32 base_addr, 232 u32 size); 233int gt64260_cpu_set_pci_io_window(u32 pci_bus, 234 u32 cpu_base_addr, 235 u32 pci_base_addr, 236 u32 size, 237 u32 swap); 238int gt64260_cpu_set_pci_mem_window(u32 pci_bus, 239 u32 window, 240 u32 cpu_base_addr, 241 u32 pci_base_addr_hi, 242 u32 pci_base_addr_lo, 243 u32 size, 244 u32 swap_64bit); 245int gt64260_cpu_prot_set_window(u32 window, 246 u32 base_addr, 247 u32 size, 248 u32 access_bits); 249int gt64260_cpu_snoop_set_window(u32 window, 250 u32 base_addr, 251 u32 size, 252 u32 snoop_type); 253void gt64260_cpu_disable_all_windows(void); 254int gt64260_pci_bar_enable(u32 pci_bus, u32 enable_bits); 255int gt64260_pci_slave_scs_set_window(struct pci_controller *hose, 256 u32 window, 257 u32 pci_base_addr, 258 u32 cpu_base_addr, 259 u32 size); 260int gt64260_pci_slave_cs_set_window(struct pci_controller *hose, 261 u32 window, 262 u32 pci_base_addr, 263 u32 cpu_base_addr, 264 u32 size); 265int gt64260_pci_slave_boot_set_window(struct pci_controller *hose, 266 u32 pci_base_addr, 267 u32 cpu_base_addr, 268 u32 size); 269int gt64260_pci_slave_p2p_mem_set_window(struct pci_controller *hose, 270 u32 window, 271 u32 pci_base_addr, 272 u32 other_bus_base_addr, 273 u32 size); 274int gt64260_pci_slave_p2p_io_set_window(struct pci_controller *hose, 275 u32 pci_base_addr, 276 u32 other_bus_base_addr, 277 u32 size); 278int gt64260_pci_slave_dac_scs_set_window(struct pci_controller *hose, 279 u32 window, 280 u32 pci_base_addr_hi, 281 u32 pci_base_addr_lo, 282 u32 cpu_base_addr, 283 u32 size); 284int gt64260_pci_slave_dac_cs_set_window(struct pci_controller *hose, 285 u32 window, 286 u32 pci_base_addr_hi, 287 u32 pci_base_addr_lo, 288 u32 cpu_base_addr, 289 u32 size); 290int gt64260_pci_slave_dac_boot_set_window(struct pci_controller *hose, 291 u32 pci_base_addr_hi, 292 u32 pci_base_addr_lo, 293 u32 cpu_base_addr, 294 u32 size); 295int gt64260_pci_slave_dac_p2p_mem_set_window(struct pci_controller *hose, 296 u32 window, 297 u32 pci_base_addr_hi, 298 u32 pci_base_addr_lo, 299 u32 other_bus_base_addr, 300 u32 size); 301int gt64260_pci_acc_cntl_set_window(u32 pci_bus, 302 u32 window, 303 u32 base_addr_hi, 304 u32 base_addr_lo, 305 u32 size, 306 u32 features); 307int gt64260_pci_snoop_set_window(u32 pci_bus, 308 u32 window, 309 u32 base_addr_hi, 310 u32 base_addr_lo, 311 u32 size, 312 u32 snoop_type); 313int gt64260_set_base(u32 new_base); 314int gt64260_get_base(u32 *base); 315int gt64260_pci_exclude_device(u8 bus, u8 devfn); 316 317void gt64260_init_irq(void); 318int gt64260_get_irq(void); 319 320void gt64260_mpsc_progress(char *s, unsigned short hex); 321 322#endif /* __ASMPPC_GT64260_H */