pciehp: evaluate _OSC/OSHP before controller init
Current pciehp evaluates _OSC/OSHP method after some controller initialization is done. So if evaluating _OSC/OSHP is failed, we need to cleanup already initialized data structures or hardware. This clearly is not robust way. With this patch, _OSC/OSHP evaluation is done first. Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
This commit is contained in:
committed by
Jesse Barnes
parent
b143b3cc82
commit
125c39f7d2
@@ -444,7 +444,13 @@ static int pciehp_probe(struct pcie_device *dev, const struct pcie_port_service_
|
||||
struct controller *ctrl;
|
||||
struct slot *t_slot;
|
||||
u8 value;
|
||||
struct pci_dev *pdev;
|
||||
struct pci_dev *pdev = dev->port;
|
||||
|
||||
if (pciehp_force)
|
||||
dbg("Bypassing BIOS check for pciehp use on %s\n",
|
||||
pci_name(pdev));
|
||||
else if (pciehp_get_hp_hw_control_from_firmware(pdev))
|
||||
goto err_out_none;
|
||||
|
||||
ctrl = kzalloc(sizeof(*ctrl), GFP_KERNEL);
|
||||
if (!ctrl) {
|
||||
@@ -453,8 +459,6 @@ static int pciehp_probe(struct pcie_device *dev, const struct pcie_port_service_
|
||||
}
|
||||
INIT_LIST_HEAD(&ctrl->slot_list);
|
||||
|
||||
pdev = dev->port;
|
||||
|
||||
rc = pcie_init(ctrl, dev);
|
||||
if (rc) {
|
||||
dbg("%s: controller initialization failed\n", PCIE_MODULE_NAME);
|
||||
|
Reference in New Issue
Block a user