|
@@ -358,3 +358,121 @@ titan_init_pachips(titan_pachip *pachip0, titan_pachip *pachip1)
|
|
|
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);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+/*
|
|
|
+ * IO map support.
|
|
|
+ */
|
|
|
+
|
|
|
+void __iomem *
|
|
|
+titan_ioportmap(unsigned long addr)
|
|
|
+{
|
|
|
+ FIXUP_IOADDR_VGA(addr);
|
|
|
+ return (void __iomem *)(addr + TITAN_IO_BIAS);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void __iomem *
|
|
|
+titan_ioremap(unsigned long addr, unsigned long size)
|
|
|
+{
|
|
|
+ int h = (addr & TITAN_HOSE_MASK) >> TITAN_HOSE_SHIFT;
|
|
|
+ unsigned long baddr = addr & ~TITAN_HOSE_MASK;
|
|
|
+ unsigned long last = baddr + size - 1;
|
|
|
+ struct pci_controller *hose;
|
|
|
+ struct vm_struct *area;
|
|
|
+ unsigned long vaddr;
|
|
|
+ unsigned long *ptes;
|
|
|
+ unsigned long pfn;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Adjust the address and hose, if necessary.
|
|
|
+ */
|
|
|
+ if (pci_vga_hose && __is_mem_vga(addr)) {
|
|
|
+ h = pci_vga_hose->index;
|
|
|
+ addr += pci_vga_hose->mem_space->start;
|
|
|
+ }
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Find the hose.
|
|
|
+ */
|
|
|
+ for (hose = hose_head; hose; hose = hose->next)
|
|
|
+ if (hose->index == h)
|
|
|
+ break;
|
|
|
+ if (!hose)
|