2013-06-20 13:21:06 +08:00
|
|
|
/*
|
|
|
|
* The file intends to implement the functions needed by EEH, which is
|
|
|
|
* built on IODA compliant chip. Actually, lots of functions related
|
|
|
|
* to EEH would be built based on the OPAL APIs.
|
|
|
|
*
|
|
|
|
* Copyright Benjamin Herrenschmidt & Gavin Shan, IBM Corporation 2013.
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <linux/bootmem.h>
|
|
|
|
#include <linux/delay.h>
|
|
|
|
#include <linux/init.h>
|
|
|
|
#include <linux/io.h>
|
|
|
|
#include <linux/irq.h>
|
|
|
|
#include <linux/kernel.h>
|
|
|
|
#include <linux/msi.h>
|
|
|
|
#include <linux/pci.h>
|
|
|
|
#include <linux/string.h>
|
|
|
|
|
|
|
|
#include <asm/eeh.h>
|
|
|
|
#include <asm/eeh_event.h>
|
|
|
|
#include <asm/io.h>
|
|
|
|
#include <asm/iommu.h>
|
|
|
|
#include <asm/msi_bitmap.h>
|
|
|
|
#include <asm/opal.h>
|
|
|
|
#include <asm/pci-bridge.h>
|
|
|
|
#include <asm/ppc-pci.h>
|
|
|
|
#include <asm/tce.h>
|
|
|
|
|
|
|
|
#include "powernv.h"
|
|
|
|
#include "pci.h"
|
|
|
|
|
2013-06-20 13:21:07 +08:00
|
|
|
/**
|
|
|
|
* ioda_eeh_post_init - Chip dependent post initialization
|
|
|
|
* @hose: PCI controller
|
|
|
|
*
|
|
|
|
* The function will be called after eeh PEs and devices
|
|
|
|
* have been built. That means the EEH is ready to supply
|
|
|
|
* service with I/O cache.
|
|
|
|
*/
|
|
|
|
static int ioda_eeh_post_init(struct pci_controller *hose)
|
|
|
|
{
|
|
|
|
struct pnv_phb *phb = hose->private_data;
|
|
|
|
|
|
|
|
/* FIXME: Enable it for PHB3 later */
|
|
|
|
if (phb->type == PNV_PHB_IODA1)
|
|
|
|
phb->eeh_enabled = 1;
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2013-06-20 13:21:06 +08:00
|
|
|
struct pnv_eeh_ops ioda_eeh_ops = {
|
2013-06-20 13:21:07 +08:00
|
|
|
.post_init = ioda_eeh_post_init,
|
2013-06-20 13:21:06 +08:00
|
|
|
.set_option = NULL,
|
|
|
|
.get_state = NULL,
|
|
|
|
.reset = NULL,
|
|
|
|
.get_log = NULL,
|
|
|
|
.configure_bridge = NULL,
|
|
|
|
.next_error = NULL
|
|
|
|
};
|