mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-01 08:04:22 +08:00
Merge branch 'pci/misc'
- add macros for PCIe Link Control 2 register (Frederick Lawler) - replace IB/hfi1 custom macros with PCI core versions (Frederick Lawler) - remove dead microblaze and xtensa code (Bjorn Helgaas) - use dev_printk() when possible in xtensa and mips (Bjorn Helgaas) * pci/misc: MIPS: PCI: Use dev_printk() when possible xtensa/PCI: Use dev_printk() when possible xtensa/PCI: Make variables static xtensa/PCI: Remove dead code microblaze/PCI: Remove pcibios_claim_one_bus() dead code microblaze/PCI: Remove pcibios_finish_adding_to_bus() dead code IB/hfi1: Replace custom hfi1 macros with PCIe macros PCI: Add PCI_EXP_LNKCTL2_TLS* macros
This commit is contained in:
commit
aee9684a36
@ -68,10 +68,6 @@ extern int pci_mmap_legacy_page_range(struct pci_bus *bus,
|
||||
*/
|
||||
#define PCI_DMA_BUS_IS_PHYS (1)
|
||||
|
||||
extern void pcibios_claim_one_bus(struct pci_bus *b);
|
||||
|
||||
extern void pcibios_finish_adding_to_bus(struct pci_bus *bus);
|
||||
|
||||
extern void pcibios_resource_survey(void);
|
||||
|
||||
struct file;
|
||||
|
@ -915,67 +915,6 @@ void __init pcibios_resource_survey(void)
|
||||
pci_assign_unassigned_resources();
|
||||
}
|
||||
|
||||
/* This is used by the PCI hotplug driver to allocate resource
|
||||
* of newly plugged busses. We can try to consolidate with the
|
||||
* rest of the code later, for now, keep it as-is as our main
|
||||
* resource allocation function doesn't deal with sub-trees yet.
|
||||
*/
|
||||
void pcibios_claim_one_bus(struct pci_bus *bus)
|
||||
{
|
||||
struct pci_dev *dev;
|
||||
struct pci_bus *child_bus;
|
||||
|
||||
list_for_each_entry(dev, &bus->devices, bus_list) {
|
||||
int i;
|
||||
|
||||
for (i = 0; i < PCI_NUM_RESOURCES; i++) {
|
||||
struct resource *r = &dev->resource[i];
|
||||
|
||||
if (r->parent || !r->start || !r->flags)
|
||||
continue;
|
||||
|
||||
pr_debug("PCI: Claiming %s: ", pci_name(dev));
|
||||
pr_debug("Resource %d: %016llx..%016llx [%x]\n",
|
||||
i, (unsigned long long)r->start,
|
||||
(unsigned long long)r->end,
|
||||
(unsigned int)r->flags);
|
||||
|
||||
if (pci_claim_resource(dev, i) == 0)
|
||||
continue;
|
||||
|
||||
pci_claim_bridge_resource(dev, i);
|
||||
}
|
||||
}
|
||||
|
||||
list_for_each_entry(child_bus, &bus->children, node)
|
||||
pcibios_claim_one_bus(child_bus);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(pcibios_claim_one_bus);
|
||||
|
||||
|
||||
/* pcibios_finish_adding_to_bus
|
||||
*
|
||||
* This is to be called by the hotplug code after devices have been
|
||||
* added to a bus, this include calling it for a PHB that is just
|
||||
* being added
|
||||
*/
|
||||
void pcibios_finish_adding_to_bus(struct pci_bus *bus)
|
||||
{
|
||||
pr_debug("PCI: Finishing adding to hotplug bus %04x:%02x\n",
|
||||
pci_domain_nr(bus), bus->number);
|
||||
|
||||
/* Allocate bus and devices resources */
|
||||
pcibios_allocate_bus_resources(bus);
|
||||
pcibios_claim_one_bus(bus);
|
||||
|
||||
/* Add new devices to global lists. Register in proc, sysfs. */
|
||||
pci_bus_add_devices(bus);
|
||||
|
||||
/* Fixup EEH */
|
||||
/* eeh_add_device_tree_late(bus); */
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(pcibios_finish_adding_to_bus);
|
||||
|
||||
static void pcibios_setup_phb_resources(struct pci_controller *hose,
|
||||
struct list_head *resources)
|
||||
{
|
||||
|
@ -263,9 +263,8 @@ static int pcibios_enable_resources(struct pci_dev *dev, int mask)
|
||||
(!(r->flags & IORESOURCE_ROM_ENABLE)))
|
||||
continue;
|
||||
if (!r->start && r->end) {
|
||||
printk(KERN_ERR "PCI: Device %s not available "
|
||||
"because of resource collisions\n",
|
||||
pci_name(dev));
|
||||
pci_err(dev,
|
||||
"can't enable device: resource collisions\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
if (r->flags & IORESOURCE_IO)
|
||||
@ -274,8 +273,7 @@ static int pcibios_enable_resources(struct pci_dev *dev, int mask)
|
||||
cmd |= PCI_COMMAND_MEMORY;
|
||||
}
|
||||
if (cmd != old_cmd) {
|
||||
printk("PCI: Enabling device %s (%04x -> %04x)\n",
|
||||
pci_name(dev), old_cmd, cmd);
|
||||
pci_info(dev, "enabling device (%04x -> %04x)\n", old_cmd, cmd);
|
||||
pci_write_config_word(dev, PCI_COMMAND, cmd);
|
||||
}
|
||||
return 0;
|
||||
|
@ -20,8 +20,6 @@
|
||||
|
||||
#define pcibios_assign_all_busses() 0
|
||||
|
||||
extern struct pci_controller* pcibios_alloc_controller(void);
|
||||
|
||||
/* Assume some values. (We should revise them, if necessary) */
|
||||
|
||||
#define PCIBIOS_MIN_IO 0x2000
|
||||
|
@ -41,8 +41,8 @@
|
||||
* pci_bus_add_device
|
||||
*/
|
||||
|
||||
struct pci_controller* pci_ctrl_head;
|
||||
struct pci_controller** pci_ctrl_tail = &pci_ctrl_head;
|
||||
static struct pci_controller *pci_ctrl_head;
|
||||
static struct pci_controller **pci_ctrl_tail = &pci_ctrl_head;
|
||||
|
||||
static int pci_bus_count;
|
||||
|
||||
@ -80,50 +80,6 @@ pcibios_align_resource(void *data, const struct resource *res,
|
||||
return start;
|
||||
}
|
||||
|
||||
int
|
||||
pcibios_enable_resources(struct pci_dev *dev, int mask)
|
||||
{
|
||||
u16 cmd, old_cmd;
|
||||
int idx;
|
||||
struct resource *r;
|
||||
|
||||
pci_read_config_word(dev, PCI_COMMAND, &cmd);
|
||||
old_cmd = cmd;
|
||||
for(idx=0; idx<6; idx++) {
|
||||
r = &dev->resource[idx];
|
||||
if (!r->start && r->end) {
|
||||
pr_err("PCI: Device %s not available because "
|
||||
"of resource collisions\n", pci_name(dev));
|
||||
return -EINVAL;
|
||||
}
|
||||
if (r->flags & IORESOURCE_IO)
|
||||
cmd |= PCI_COMMAND_IO;
|
||||
if (r->flags & IORESOURCE_MEM)
|
||||
cmd |= PCI_COMMAND_MEMORY;
|
||||
}
|
||||
if (dev->resource[PCI_ROM_RESOURCE].start)
|
||||
cmd |= PCI_COMMAND_MEMORY;
|
||||
if (cmd != old_cmd) {
|
||||
pr_info("PCI: Enabling device %s (%04x -> %04x)\n",
|
||||
pci_name(dev), old_cmd, cmd);
|
||||
pci_write_config_word(dev, PCI_COMMAND, cmd);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct pci_controller * __init pcibios_alloc_controller(void)
|
||||
{
|
||||
struct pci_controller *pci_ctrl;
|
||||
|
||||
pci_ctrl = (struct pci_controller *)alloc_bootmem(sizeof(*pci_ctrl));
|
||||
memset(pci_ctrl, 0, sizeof(struct pci_controller));
|
||||
|
||||
*pci_ctrl_tail = pci_ctrl;
|
||||
pci_ctrl_tail = &pci_ctrl->next;
|
||||
|
||||
return pci_ctrl;
|
||||
}
|
||||
|
||||
static void __init pci_controller_apertures(struct pci_controller *pci_ctrl,
|
||||
struct list_head *resources)
|
||||
{
|
||||
@ -223,8 +179,7 @@ int pcibios_enable_device(struct pci_dev *dev, int mask)
|
||||
for (idx=0; idx<6; idx++) {
|
||||
r = &dev->resource[idx];
|
||||
if (!r->start && r->end) {
|
||||
pr_err("PCI: Device %s not available because "
|
||||
"of resource collisions\n", pci_name(dev));
|
||||
pci_err(dev, "can't enable device: resource collisions\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
if (r->flags & IORESOURCE_IO)
|
||||
@ -233,29 +188,13 @@ int pcibios_enable_device(struct pci_dev *dev, int mask)
|
||||
cmd |= PCI_COMMAND_MEMORY;
|
||||
}
|
||||
if (cmd != old_cmd) {
|
||||
pr_info("PCI: Enabling device %s (%04x -> %04x)\n",
|
||||
pci_name(dev), old_cmd, cmd);
|
||||
pci_info(dev, "enabling device (%04x -> %04x)\n", old_cmd, cmd);
|
||||
pci_write_config_word(dev, PCI_COMMAND, cmd);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PROC_FS
|
||||
|
||||
/*
|
||||
* Return the index of the PCI controller for device pdev.
|
||||
*/
|
||||
|
||||
int
|
||||
pci_controller_num(struct pci_dev *dev)
|
||||
{
|
||||
struct pci_controller *pci_ctrl = (struct pci_controller*) dev->sysdata;
|
||||
return pci_ctrl->index;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_PROC_FS */
|
||||
|
||||
/*
|
||||
* Platform support for /proc/bus/pci/X/Y mmap()s.
|
||||
* -- paulus.
|
||||
|
@ -56,11 +56,6 @@
|
||||
#include "chip_registers.h"
|
||||
#include "aspm.h"
|
||||
|
||||
/* link speed vector for Gen3 speed - not in Linux headers */
|
||||
#define GEN1_SPEED_VECTOR 0x1
|
||||
#define GEN2_SPEED_VECTOR 0x2
|
||||
#define GEN3_SPEED_VECTOR 0x3
|
||||
|
||||
/*
|
||||
* This file contains PCIe utility routines.
|
||||
*/
|
||||
@ -265,7 +260,7 @@ static u32 extract_speed(u16 linkstat)
|
||||
case PCI_EXP_LNKSTA_CLS_5_0GB:
|
||||
speed = 5000; /* Gen 2, 5GHz */
|
||||
break;
|
||||
case GEN3_SPEED_VECTOR:
|
||||
case PCI_EXP_LNKSTA_CLS_8_0GB:
|
||||
speed = 8000; /* Gen 3, 8GHz */
|
||||
break;
|
||||
}
|
||||
@ -320,7 +315,7 @@ int pcie_speeds(struct hfi1_devdata *dd)
|
||||
return ret;
|
||||
}
|
||||
|
||||
if ((linkcap & PCI_EXP_LNKCAP_SLS) != GEN3_SPEED_VECTOR) {
|
||||
if ((linkcap & PCI_EXP_LNKCAP_SLS) != PCI_EXP_LNKCAP_SLS_8_0GB) {
|
||||
dd_dev_info(dd,
|
||||
"This HFI is not Gen3 capable, max speed 0x%x, need 0x3\n",
|
||||
linkcap & PCI_EXP_LNKCAP_SLS);
|
||||
@ -697,9 +692,6 @@ const struct pci_error_handlers hfi1_pci_err_handler = {
|
||||
/* gasket block secondary bus reset delay */
|
||||
#define SBR_DELAY_US 200000 /* 200ms */
|
||||
|
||||
/* mask for PCIe capability register lnkctl2 target link speed */
|
||||
#define LNKCTL2_TARGET_LINK_SPEED_MASK 0xf
|
||||
|
||||
static uint pcie_target = 3;
|
||||
module_param(pcie_target, uint, S_IRUGO);
|
||||
MODULE_PARM_DESC(pcie_target, "PCIe target speed (0 skip, 1-3 Gen1-3)");
|
||||
@ -1048,13 +1040,13 @@ int do_pcie_gen3_transition(struct hfi1_devdata *dd)
|
||||
return 0;
|
||||
|
||||
if (pcie_target == 1) { /* target Gen1 */
|
||||
target_vector = GEN1_SPEED_VECTOR;
|
||||
target_vector = PCI_EXP_LNKCTL2_TLS_2_5GT;
|
||||
target_speed = 2500;
|
||||
} else if (pcie_target == 2) { /* target Gen2 */
|
||||
target_vector = GEN2_SPEED_VECTOR;
|
||||
target_vector = PCI_EXP_LNKCTL2_TLS_5_0GT;
|
||||
target_speed = 5000;
|
||||
} else if (pcie_target == 3) { /* target Gen3 */
|
||||
target_vector = GEN3_SPEED_VECTOR;
|
||||
target_vector = PCI_EXP_LNKCTL2_TLS_8_0GT;
|
||||
target_speed = 8000;
|
||||
} else {
|
||||
/* off or invalid target - skip */
|
||||
@ -1293,8 +1285,8 @@ retry:
|
||||
dd_dev_info(dd, "%s: ..old link control2: 0x%x\n", __func__,
|
||||
(u32)lnkctl2);
|
||||
/* only write to parent if target is not as high as ours */
|
||||
if ((lnkctl2 & LNKCTL2_TARGET_LINK_SPEED_MASK) < target_vector) {
|
||||
lnkctl2 &= ~LNKCTL2_TARGET_LINK_SPEED_MASK;
|
||||
if ((lnkctl2 & PCI_EXP_LNKCTL2_TLS) < target_vector) {
|
||||
lnkctl2 &= ~PCI_EXP_LNKCTL2_TLS;
|
||||
lnkctl2 |= target_vector;
|
||||
dd_dev_info(dd, "%s: ..new link control2: 0x%x\n", __func__,
|
||||
(u32)lnkctl2);
|
||||
@ -1319,7 +1311,7 @@ retry:
|
||||
|
||||
dd_dev_info(dd, "%s: ..old link control2: 0x%x\n", __func__,
|
||||
(u32)lnkctl2);
|
||||
lnkctl2 &= ~LNKCTL2_TARGET_LINK_SPEED_MASK;
|
||||
lnkctl2 &= ~PCI_EXP_LNKCTL2_TLS;
|
||||
lnkctl2 |= target_vector;
|
||||
dd_dev_info(dd, "%s: ..new link control2: 0x%x\n", __func__,
|
||||
(u32)lnkctl2);
|
||||
|
@ -655,6 +655,11 @@
|
||||
#define PCI_EXP_LNKCAP2_SLS_16_0GB 0x00000010 /* Supported Speed 16GT/s */
|
||||
#define PCI_EXP_LNKCAP2_CROSSLINK 0x00000100 /* Crosslink supported */
|
||||
#define PCI_EXP_LNKCTL2 48 /* Link Control 2 */
|
||||
#define PCI_EXP_LNKCTL2_TLS 0x000f
|
||||
#define PCI_EXP_LNKCTL2_TLS_2_5GT 0x0001 /* Supported Speed 2.5GT/s */
|
||||
#define PCI_EXP_LNKCTL2_TLS_5_0GT 0x0002 /* Supported Speed 5GT/s */
|
||||
#define PCI_EXP_LNKCTL2_TLS_8_0GT 0x0003 /* Supported Speed 8GT/s */
|
||||
#define PCI_EXP_LNKCTL2_TLS_16_0GT 0x0004 /* Supported Speed 16GT/s */
|
||||
#define PCI_EXP_LNKSTA2 50 /* Link Status 2 */
|
||||
#define PCI_CAP_EXP_ENDPOINT_SIZEOF_V2 52 /* v2 endpoints with link end here */
|
||||
#define PCI_EXP_SLTCAP2 52 /* Slot Capabilities 2 */
|
||||
|
Loading…
Reference in New Issue
Block a user