]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/blame - arch/cris/arch-v32/drivers/pci/bios.c
Linux 4.14-rc6
[mirror_ubuntu-focal-kernel.git] / arch / cris / arch-v32 / drivers / pci / bios.c
CommitLineData
51533b61
MS
1#include <linux/pci.h>
2#include <linux/kernel.h>
d6094ced 3#include <hwregs/intr_vect.h>
51533b61 4
51533b61
MS
5void pcibios_set_master(struct pci_dev *dev)
6{
7 u8 lat;
8 pci_read_config_byte(dev, PCI_LATENCY_TIMER, &lat);
9 printk(KERN_DEBUG "PCI: Setting latency timer of device %s to %d\n", pci_name(dev), lat);
10 pci_write_config_byte(dev, PCI_LATENCY_TIMER, lat);
11}
12
b26b2d49 13resource_size_t
3b7a17fc 14pcibios_align_resource(void *data, const struct resource *res,
e31dd6e4 15 resource_size_t size, resource_size_t align)
51533b61 16{
b26b2d49 17 resource_size_t start = res->start;
51533b61 18
b26b2d49
DB
19 if ((res->flags & IORESOURCE_IO) && (start & 0x300))
20 start = (start + 0x3ff) & ~0x3ff;
21
f7454c5d 22 return start;
51533b61
MS
23}
24
25int pcibios_enable_resources(struct pci_dev *dev, int mask)
26{
27 u16 cmd, old_cmd;
28 int idx;
29 struct resource *r;
30
31 pci_read_config_word(dev, PCI_COMMAND, &cmd);
32 old_cmd = cmd;
33 for(idx=0; idx<6; idx++) {
34 /* Only set up the requested stuff */
35 if (!(mask & (1<<idx)))
36 continue;
37
38 r = &dev->resource[idx];
39 if (!r->start && r->end) {
40 printk(KERN_ERR "PCI: Device %s not available because of resource collisions\n", pci_name(dev));
41 return -EINVAL;
42 }
43 if (r->flags & IORESOURCE_IO)
44 cmd |= PCI_COMMAND_IO;
45 if (r->flags & IORESOURCE_MEM)
46 cmd |= PCI_COMMAND_MEMORY;
47 }
48 if (dev->resource[PCI_ROM_RESOURCE].start)
49 cmd |= PCI_COMMAND_MEMORY;
50 if (cmd != old_cmd) {
51 printk("PCI: Enabling device %s (%04x -> %04x)\n", pci_name(dev), old_cmd, cmd);
52 pci_write_config_word(dev, PCI_COMMAND, cmd);
53 }
54 return 0;
55}
56
57int pcibios_enable_irq(struct pci_dev *dev)
58{
59 dev->irq = EXT_INTR_VECT;
60 return 0;
61}
62
63int pcibios_enable_device(struct pci_dev *dev, int mask)
64{
65 int err;
66
67 if ((err = pcibios_enable_resources(dev, mask)) < 0)
68 return err;
69
bba6f6fc
EB
70 if (!dev->msi_enabled)
71 pcibios_enable_irq(dev);
72 return 0;
51533b61 73}