ommu_arena_new(hose, 0xc0000000, 0x40000000, SMP_CACHE_BYTES); hose->sg_pci->align_entry = 4; /* Titan caches 4 PTEs at a time */ port->wsba[0].csr = hose->sg_isa->dma_base | 3; port->wsm[0].csr = (hose->sg_isa->size - 1) & 0xfff00000; port->tba[0].csr = virt_to_phys(hose->sg_isa->ptes); port->wsba[1].csr = __direct_map_base | 1; port->wsm[1].csr = (__direct_map_size - 1) & 0xfff00000; port->tba[1].csr = 0; port->wsba[2].csr = hose->sg_pci->dma_base | 3; port->wsm[2].csr = (hose->sg_pci->size - 1) & 0xfff00000; port->tba[2].csr = virt_to_phys(hose->sg_pci->ptes); port->wsba[3].csr = 0; /* Enable the Monster Window to make DAC pci64 possible. */ port->pctl.csr |= pctl_m_mwin; /* * If it's an AGP port, initialize agplastwr. */ if (titan_query_agp(port)) port->port_specific.a.agplastwr.csr = __direct_map_base; titan_pci_tbi(hose, 0, -1); } static void __init titan_init_pachips(titan_pachip *pachip0, titan_pachip *pachip1) { titan_pchip1_present = TITAN_cchip->csc.csr & 1L<<14; /* Init the ports in hose order... */ titan_init_one_pachip_port(&pachip0->g_port, 0); /* hose 0 */ if (titan_pchip1_present) titan_init_one_pachip_port(&pachip1->g_port, 1);/* hose 1 */ titan_init_one_pachip_port(&pachip0->a_port, 2); /* hose 2 */ if (titan_pchip1_present) titan_init_one_pachip_port(&pachip1->a_port, 3);/* hose 3 */ } void __init titan_init_arch(void) { #if 0 printk("%s: titan_init_arch()\n", __func__); printk("%s: CChip registers:\n", __func__); printk("%s: CSR_CSC 0x%lx\n", __func__, TITAN_cchip->csc.csr); printk("%s: CSR_MTR 0x%lx\n", __func__, TITAN_cchip->mtr.csr); printk("%s: CSR_MISC 0x%lx\n", __func__, TITAN_cchip->misc.csr); printk("%s: CSR_DIM0 0x%lx\n", __func__, TITAN_cchip->dim0.csr); printk("%s: CSR_DIM1 0x%lx\n", __func__, TITAN_cchip->dim1.csr); printk("%s: CSR_DIR0 0x%lx\n", __func__, TITAN_cchip->dir0.csr); printk("%s: CSR_DIR1 0x%lx\n", __func__, TITAN_cchip->dir1.csr); printk("%s: CSR_DRIR 0x%lx\n", __func__, TITAN_cchip->drir.csr); printk("%s: DChip registers:\n", __func__); printk("%s: CSR_DSC 0x%lx\n", __func__, TITAN_dchip->dsc.csr); printk("%s: CSR_STR 0x%lx\n", __func__, TITAN_dchip->str.csr); printk("%s: CSR_DREV 0x%lx\n", __func__, TITAN_dchip->drev.csr); #endif boot_cpuid = __hard_smp_processor_id(); /* With multiple PCI busses, we play with I/O as physical addrs. */ ioport_resource.end = ~0UL; iomem_resource.end = ~0UL; /* PCI DMA Direct Mapping is 1GB at 2GB. */ __direct_map_base = 0x80000000; __direct_map_size = 0x40000000; /* Init the PA chip(s). */ titan_init_pachips(TITAN_pachip0, TITAN_pachip1); /* Check for graphic console location (if any). */ find_console_vga_hose(); } static void titan_kill_one_pachip_port(titan_pachip_port *port, int index) { port->wsba[0].csr = saved_config[index].wsba[0]; port->wsm[0].csr = saved_config[index].wsm[0]; port->tba[0].csr = saved_config[index].tba[0]; port->wsba[1].csr = saved_config[index].wsba[1]; port->wsm[1].csr = saved_config[index].wsm[1]; port->tba[1].csr = saved_config[index].tba[1]; port->wsba[2].csr = saved_config[index].wsba[2]; port->wsm[2].csr = saved_config[index].wsm[2]; port->tba[2].csr = saved_config[index].tba[2]; port->wsba[3].csr = saved_config[index].wsba[3]; port->wsm[3].csr = saved_config[index].wsm[3]; port->tba[3].csr = saved_config[index].tba[3]; } static void titan_kill_pachips(titan_pachip *pachip0, titan_pachip *pachip1) { if (titan_pchip1_present) { titan_kill_one_pachip_port(&pachip1->g_port, 1); titan_kill_one_pachip_port(&pachip1->a_port, 3); } titan_kill_one_pachip_port(&pachip0->g_port, 0); titan_kill_one_pachip_port(&pachip0->a_port, 2); } void titan_kill_arch(int mode) { titan_kill_pachips(TITAN_pachip0, TITAN_pachip1); }