#define vip volatile int *
+/* Save CIA configuration data as the console had it set up. */
+
+struct
+{
+ unsigned int w_base;
+ unsigned int w_mask;
+ unsigned int t_base;
+} saved_config[4] __attribute((common));
+
/*
* Given a bus, device, and function number, compute resulting
* configuration space address. It is therefore not safe to have
hose->dense_io_base = CIA_BW_IO - IDENT_ADDR;
}
+ /* Save CIA configuration data as the console had it set up. */
+
+ saved_config[0].w_base = *(vip)CIA_IOC_PCI_W0_BASE;
+ saved_config[0].w_mask = *(vip)CIA_IOC_PCI_W0_MASK;
+ saved_config[0].t_base = *(vip)CIA_IOC_PCI_T0_BASE;
+
+ saved_config[1].w_base = *(vip)CIA_IOC_PCI_W1_BASE;
+ saved_config[1].w_mask = *(vip)CIA_IOC_PCI_W1_MASK;
+ saved_config[1].t_base = *(vip)CIA_IOC_PCI_T1_BASE;
+
+ saved_config[2].w_base = *(vip)CIA_IOC_PCI_W2_BASE;
+ saved_config[2].w_mask = *(vip)CIA_IOC_PCI_W2_MASK;
+ saved_config[2].t_base = *(vip)CIA_IOC_PCI_T2_BASE;
+
+ saved_config[3].w_base = *(vip)CIA_IOC_PCI_W3_BASE;
+ saved_config[3].w_mask = *(vip)CIA_IOC_PCI_W3_MASK;
+ saved_config[3].t_base = *(vip)CIA_IOC_PCI_T3_BASE;
+
/*
* Set up the PCI to main memory translation windows.
*
do_init_arch(1);
}
+void
+cia_kill_arch(int mode)
+{
+ *(vip)CIA_IOC_PCI_W0_BASE = saved_config[0].w_base;
+ *(vip)CIA_IOC_PCI_W0_MASK = saved_config[0].w_mask;
+ *(vip)CIA_IOC_PCI_T0_BASE = saved_config[0].t_base;
+
+ *(vip)CIA_IOC_PCI_W1_BASE = saved_config[1].w_base;
+ *(vip)CIA_IOC_PCI_W1_MASK = saved_config[1].w_mask;
+ *(vip)CIA_IOC_PCI_T1_BASE = saved_config[1].t_base;
+
+ *(vip)CIA_IOC_PCI_W2_BASE = saved_config[2].w_base;
+ *(vip)CIA_IOC_PCI_W2_MASK = saved_config[2].w_mask;
+ *(vip)CIA_IOC_PCI_T2_BASE = saved_config[2].t_base;
+
+ *(vip)CIA_IOC_PCI_W3_BASE = saved_config[3].w_base;
+ *(vip)CIA_IOC_PCI_W3_MASK = saved_config[3].w_mask;
+ *(vip)CIA_IOC_PCI_T3_BASE = saved_config[3].t_base;
+}
+
void __init
cia_init_pci(void)
{
unsigned TITAN_agp = 0;
-static struct
+/* Save Titan configuration data as the console had it set up. */
+
+struct
{
unsigned long wsba[4];
unsigned long wsm[4];
unsigned long tba[4];
-} saved_pachip_port[4];
+} saved_config[4] __attribute__((common));
/*
* BIOS32-style PCI interface:
* Save the existing PCI window translations. SRM will
* need them when we go to reboot.
*/
- saved_pachip_port[index].wsba[0] = port->wsba[0].csr;
- saved_pachip_port[index].wsm[0] = port->wsm[0].csr;
- saved_pachip_port[index].tba[0] = port->tba[0].csr;
+ saved_config[index].wsba[0] = port->wsba[0].csr;
+ saved_config[index].wsm[0] = port->wsm[0].csr;
+ saved_config[index].tba[0] = port->tba[0].csr;
- saved_pachip_port[index].wsba[1] = port->wsba[1].csr;
- saved_pachip_port[index].wsm[1] = port->wsm[1].csr;
- saved_pachip_port[index].tba[1] = port->tba[1].csr;
+ saved_config[index].wsba[1] = port->wsba[1].csr;
+ saved_config[index].wsm[1] = port->wsm[1].csr;
+ saved_config[index].tba[1] = port->tba[1].csr;
- saved_pachip_port[index].wsba[2] = port->wsba[2].csr;
- saved_pachip_port[index].wsm[2] = port->wsm[2].csr;
- saved_pachip_port[index].tba[2] = port->tba[2].csr;
+ saved_config[index].wsba[2] = port->wsba[2].csr;
+ saved_config[index].wsm[2] = port->wsm[2].csr;
+ saved_config[index].tba[2] = port->tba[2].csr;
- saved_pachip_port[index].wsba[3] = port->wsba[3].csr;
- saved_pachip_port[index].wsm[3] = port->wsm[3].csr;
- saved_pachip_port[index].tba[3] = port->tba[3].csr;
+ saved_config[index].wsba[3] = port->wsba[3].csr;
+ saved_config[index].wsm[3] = port->wsm[3].csr;
+ saved_config[index].tba[3] = port->tba[3].csr;
/*
* Set up the PCI to main memory translation windows.
static void
titan_kill_one_pachip_port(titan_pachip_port *port, int index)
{
- port->wsba[0].csr = saved_pachip_port[index].wsba[0];
- port->wsm[0].csr = saved_pachip_port[index].wsm[0];
- port->tba[0].csr = saved_pachip_port[index].tba[0];
+ 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_pachip_port[index].wsba[1];
- port->wsm[1].csr = saved_pachip_port[index].wsm[1];
- port->tba[1].csr = saved_pachip_port[index].tba[1];
+ 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_pachip_port[index].wsba[2];
- port->wsm[2].csr = saved_pachip_port[index].wsm[2];
- port->tba[2].csr = saved_pachip_port[index].tba[2];
+ 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_pachip_port[index].wsba[3];
- port->wsm[3].csr = saved_pachip_port[index].wsm[3];
- port->tba[3].csr = saved_pachip_port[index].tba[3];
+ 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
#include "proto.h"
#include "pci_impl.h"
+/* Save Tsunami configuration data as the console had it set up. */
-static struct
+struct
{
unsigned long wsba[4];
unsigned long wsm[4];
unsigned long tba[4];
-} saved_pchip[2];
+} saved_config[2] __attribute__((common));
/*
* NOTE: Herein lie back-to-back mb instructions. They are magic.
* need them when we go to reboot.
*/
- saved_pchip[index].wsba[0] = pchip->wsba[0].csr;
- saved_pchip[index].wsm[0] = pchip->wsm[0].csr;
- saved_pchip[index].tba[0] = pchip->tba[0].csr;
+ saved_config[index].wsba[0] = pchip->wsba[0].csr;
+ saved_config[index].wsm[0] = pchip->wsm[0].csr;
+ saved_config[index].tba[0] = pchip->tba[0].csr;
- saved_pchip[index].wsba[1] = pchip->wsba[1].csr;
- saved_pchip[index].wsm[1] = pchip->wsm[1].csr;
- saved_pchip[index].tba[1] = pchip->tba[1].csr;
+ saved_config[index].wsba[1] = pchip->wsba[1].csr;
+ saved_config[index].wsm[1] = pchip->wsm[1].csr;
+ saved_config[index].tba[1] = pchip->tba[1].csr;
- saved_pchip[index].wsba[2] = pchip->wsba[2].csr;
- saved_pchip[index].wsm[2] = pchip->wsm[2].csr;
- saved_pchip[index].tba[2] = pchip->tba[2].csr;
+ saved_config[index].wsba[2] = pchip->wsba[2].csr;
+ saved_config[index].wsm[2] = pchip->wsm[2].csr;
+ saved_config[index].tba[2] = pchip->tba[2].csr;
- saved_pchip[index].wsba[3] = pchip->wsba[3].csr;
- saved_pchip[index].wsm[3] = pchip->wsm[3].csr;
- saved_pchip[index].tba[3] = pchip->tba[3].csr;
+ saved_config[index].wsba[3] = pchip->wsba[3].csr;
+ saved_config[index].wsm[3] = pchip->wsm[3].csr;
+ saved_config[index].tba[3] = pchip->tba[3].csr;
/*
* Set up the PCI to main memory translation windows.
static void
tsunami_kill_one_pchip(tsunami_pchip *pchip, int index)
{
- pchip->wsba[0].csr = saved_pchip[index].wsba[0];
- pchip->wsm[0].csr = saved_pchip[index].wsm[0];
- pchip->tba[0].csr = saved_pchip[index].tba[0];
+ pchip->wsba[0].csr = saved_config[index].wsba[0];
+ pchip->wsm[0].csr = saved_config[index].wsm[0];
+ pchip->tba[0].csr = saved_config[index].tba[0];
- pchip->wsba[1].csr = saved_pchip[index].wsba[1];
- pchip->wsm[1].csr = saved_pchip[index].wsm[1];
- pchip->tba[1].csr = saved_pchip[index].tba[1];
+ pchip->wsba[1].csr = saved_config[index].wsba[1];
+ pchip->wsm[1].csr = saved_config[index].wsm[1];
+ pchip->tba[1].csr = saved_config[index].tba[1];
- pchip->wsba[2].csr = saved_pchip[index].wsba[2];
- pchip->wsm[2].csr = saved_pchip[index].wsm[2];
- pchip->tba[2].csr = saved_pchip[index].tba[2];
+ pchip->wsba[2].csr = saved_config[index].wsba[2];
+ pchip->wsm[2].csr = saved_config[index].wsm[2];
+ pchip->tba[2].csr = saved_config[index].tba[2];
- pchip->wsba[3].csr = saved_pchip[index].wsba[3];
- pchip->wsm[3].csr = saved_pchip[index].wsm[3];
- pchip->tba[3].csr = saved_pchip[index].tba[3];
+ pchip->wsba[3].csr = saved_config[index].wsba[3];
+ pchip->wsm[3].csr = saved_config[index].wsm[3];
+ pchip->tba[3].csr = saved_config[index].tba[3];
}
void
extern void cia_init_pci(void);
extern void cia_init_arch(void);
extern void pyxis_init_arch(void);
+extern void cia_kill_arch(int);
extern void cia_machine_check(u64, u64, struct pt_regs *);
extern void cia_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t);
static void
alcor_kill_arch(int mode)
{
+ cia_kill_arch(mode);
+
switch(mode) {
case LINUX_REBOOT_CMD_RESTART:
/* Who said DEC engineer's have no sense of humor? ;-) */
init_irq: cabriolet_init_irq,
init_rtc: common_init_rtc,
init_pci: cabriolet_init_pci,
- kill_arch: NULL,
pci_map_irq: cabriolet_map_irq,
pci_swizzle: common_swizzle,
};
init_irq: cabriolet_init_irq,
init_rtc: common_init_rtc,
init_pci: cia_cab_init_pci,
+ kill_arch: cia_kill_arch,
pci_map_irq: cabriolet_map_irq,
pci_swizzle: common_swizzle,
};
init_irq: cabriolet_init_irq,
init_rtc: common_init_rtc,
init_pci: alphapc164_init_pci,
+ kill_arch: cia_kill_arch,
pci_map_irq: alphapc164_map_irq,
pci_swizzle: common_swizzle,
};
init_irq: pc164_init_irq,
init_rtc: common_init_rtc,
init_pci: alphapc164_init_pci,
+ kill_arch: cia_kill_arch,
pci_map_irq: alphapc164_map_irq,
pci_swizzle: common_swizzle,
};
static void
miata_kill_arch(int mode)
{
+ cia_kill_arch(mode);
+
switch(mode) {
case LINUX_REBOOT_CMD_RESTART:
/* Who said DEC engineers have no sense of humor? ;-) */
init_irq: mikasa_init_irq,
init_rtc: common_init_rtc,
init_pci: common_init_pci,
- kill_arch: NULL,
pci_map_irq: mikasa_map_irq,
pci_swizzle: common_swizzle,
};
init_irq: mikasa_init_irq,
init_rtc: common_init_rtc,
init_pci: cia_init_pci,
+ kill_arch: cia_kill_arch,
pci_map_irq: mikasa_map_irq,
pci_swizzle: common_swizzle,
};
init_irq: noritake_init_irq,
init_rtc: common_init_rtc,
init_pci: common_init_pci,
- kill_arch: NULL,
pci_map_irq: noritake_map_irq,
pci_swizzle: noritake_swizzle,
};
init_irq: noritake_init_irq,
init_rtc: common_init_rtc,
init_pci: cia_init_pci,
+ kill_arch: cia_kill_arch,
pci_map_irq: noritake_map_irq,
pci_swizzle: noritake_swizzle,
};
static void
ruffian_kill_arch (int mode)
{
+ cia_kill_arch(mode);
#if 0
/* This only causes re-entry to ARCSBIOS */
/* Perhaps this works for other PYXIS as well? */
init_irq: sx164_init_irq,
init_rtc: common_init_rtc,
init_pci: sx164_init_pci,
- kill_arch: NULL,
+ kill_arch: cia_kill_arch,
pci_map_irq: sx164_map_irq,
pci_swizzle: common_swizzle,
};
init_irq: takara_init_irq,
init_rtc: common_init_rtc,
init_pci: takara_init_pci,
- kill_arch: NULL,
+ kill_arch: cia_kill_arch,
pci_map_irq: takara_map_irq,
pci_swizzle: takara_swizzle,
};