diff options
| author | Bjorn Helgaas <bhelgaas@google.com> | 2018-01-31 11:12:56 -0500 |
|---|---|---|
| committer | Bjorn Helgaas <helgaas@kernel.org> | 2018-01-31 11:12:56 -0500 |
| commit | 414ae7609e19580a56647344e61f13f3768e0820 (patch) | |
| tree | f4a2e50f589d459406e5c1dae1cb06b8f4668b03 | |
| parent | 11377725da463951cd501f5cecce30af999ee338 (diff) | |
| parent | a9b94b74806b47348727aa3334a0541427e0061b (diff) | |
Merge branch 'pci/resource' into next
* pci/resource:
PCI: tegra: Remove PCI_REASSIGN_ALL_BUS use on Tegra
resource: Set type when reserving new regions
resource: Set type of "reserve=" user-specified resources
irqchip/i8259: Set I/O port resource types correctly
powerpc: Set I/O port resource types correctly
MIPS: Set I/O port resource types correctly
vgacon: Set VGA struct resource types
PCI: Use dev_info() rather than dev_err() for ROM validation
PCI: Remove PCI_REASSIGN_ALL_RSRC use on arm and arm64
PCI: Remove sysfs resource mmap warning
Conflicts:
drivers/pci/rom.c
| -rw-r--r-- | Documentation/admin-guide/kernel-parameters.txt | 6 | ||||
| -rw-r--r-- | arch/alpha/kernel/console.c | 1 | ||||
| -rw-r--r-- | arch/arm/include/asm/pci.h | 5 | ||||
| -rw-r--r-- | arch/arm/kernel/bios32.c | 2 | ||||
| -rw-r--r-- | arch/mips/jazz/setup.c | 8 | ||||
| -rw-r--r-- | arch/mips/mti-malta/malta-setup.c | 10 | ||||
| -rw-r--r-- | arch/powerpc/platforms/maple/time.c | 2 | ||||
| -rw-r--r-- | arch/powerpc/sysdev/i8259.c | 6 | ||||
| -rw-r--r-- | drivers/irqchip/irq-i8259.c | 4 | ||||
| -rw-r--r-- | drivers/pci/host/pci-host-common.c | 2 | ||||
| -rw-r--r-- | drivers/pci/host/pci-tegra.c | 1 | ||||
| -rw-r--r-- | drivers/pci/host/pci-versatile.c | 2 | ||||
| -rw-r--r-- | drivers/pci/host/pcie-rcar.c | 2 | ||||
| -rw-r--r-- | drivers/pci/pci-sysfs.c | 9 | ||||
| -rw-r--r-- | drivers/pci/rom.c | 8 | ||||
| -rw-r--r-- | drivers/video/console/vgacon.c | 34 | ||||
| -rw-r--r-- | kernel/resource.c | 29 |
17 files changed, 79 insertions, 52 deletions
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index 6571fbfdb2a1..78cdf6a637fc 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt | |||
| @@ -3675,7 +3675,11 @@ | |||
| 3675 | [KNL, SMP] Set scheduler's default relax_domain_level. | 3675 | [KNL, SMP] Set scheduler's default relax_domain_level. |
| 3676 | See Documentation/cgroup-v1/cpusets.txt. | 3676 | See Documentation/cgroup-v1/cpusets.txt. |
| 3677 | 3677 | ||
| 3678 | reserve= [KNL,BUGS] Force the kernel to ignore some iomem area | 3678 | reserve= [KNL,BUGS] Force kernel to ignore I/O ports or memory |
| 3679 | Format: <base1>,<size1>[,<base2>,<size2>,...] | ||
| 3680 | Reserve I/O ports or memory so the kernel won't use | ||
| 3681 | them. If <base> is less than 0x10000, the region | ||
| 3682 | is assumed to be I/O ports; otherwise it is memory. | ||
| 3679 | 3683 | ||
| 3680 | reservetop= [X86-32] | 3684 | reservetop= [X86-32] |
| 3681 | Format: nn[KMG] | 3685 | Format: nn[KMG] |
diff --git a/arch/alpha/kernel/console.c b/arch/alpha/kernel/console.c index 8e9a41966881..5476279329a6 100644 --- a/arch/alpha/kernel/console.c +++ b/arch/alpha/kernel/console.c | |||
| @@ -21,6 +21,7 @@ | |||
| 21 | struct pci_controller *pci_vga_hose; | 21 | struct pci_controller *pci_vga_hose; |
| 22 | static struct resource alpha_vga = { | 22 | static struct resource alpha_vga = { |
| 23 | .name = "alpha-vga+", | 23 | .name = "alpha-vga+", |
| 24 | .flags = IORESOURCE_IO, | ||
| 24 | .start = 0x3C0, | 25 | .start = 0x3C0, |
| 25 | .end = 0x3DF | 26 | .end = 0x3DF |
| 26 | }; | 27 | }; |
diff --git a/arch/arm/include/asm/pci.h b/arch/arm/include/asm/pci.h index 960d9dc4f380..1f0de808d111 100644 --- a/arch/arm/include/asm/pci.h +++ b/arch/arm/include/asm/pci.h | |||
| @@ -10,10 +10,7 @@ extern unsigned long pcibios_min_io; | |||
| 10 | extern unsigned long pcibios_min_mem; | 10 | extern unsigned long pcibios_min_mem; |
| 11 | #define PCIBIOS_MIN_MEM pcibios_min_mem | 11 | #define PCIBIOS_MIN_MEM pcibios_min_mem |
| 12 | 12 | ||
| 13 | static inline int pcibios_assign_all_busses(void) | 13 | #define pcibios_assign_all_busses() pci_has_flag(PCI_REASSIGN_ALL_BUS) |
| 14 | { | ||
| 15 | return pci_has_flag(PCI_REASSIGN_ALL_RSRC); | ||
| 16 | } | ||
| 17 | 14 | ||
| 18 | #ifdef CONFIG_PCI_DOMAINS | 15 | #ifdef CONFIG_PCI_DOMAINS |
| 19 | static inline int pci_proc_domain(struct pci_bus *bus) | 16 | static inline int pci_proc_domain(struct pci_bus *bus) |
diff --git a/arch/arm/kernel/bios32.c b/arch/arm/kernel/bios32.c index 0cd0aefb3a8f..ed46ca69813d 100644 --- a/arch/arm/kernel/bios32.c +++ b/arch/arm/kernel/bios32.c | |||
| @@ -527,7 +527,7 @@ void pci_common_init_dev(struct device *parent, struct hw_pci *hw) | |||
| 527 | struct pci_sys_data *sys; | 527 | struct pci_sys_data *sys; |
| 528 | LIST_HEAD(head); | 528 | LIST_HEAD(head); |
| 529 | 529 | ||
| 530 | pci_add_flags(PCI_REASSIGN_ALL_RSRC); | 530 | pci_add_flags(PCI_REASSIGN_ALL_BUS); |
| 531 | if (hw->preinit) | 531 | if (hw->preinit) |
| 532 | hw->preinit(); | 532 | hw->preinit(); |
| 533 | pcibios_init_hw(parent, hw, &head); | 533 | pcibios_init_hw(parent, hw, &head); |
diff --git a/arch/mips/jazz/setup.c b/arch/mips/jazz/setup.c index e4374a5651ce..448fd41792e4 100644 --- a/arch/mips/jazz/setup.c +++ b/arch/mips/jazz/setup.c | |||
| @@ -32,22 +32,22 @@ static struct resource jazz_io_resources[] = { | |||
| 32 | .start = 0x00, | 32 | .start = 0x00, |
| 33 | .end = 0x1f, | 33 | .end = 0x1f, |
| 34 | .name = "dma1", | 34 | .name = "dma1", |
| 35 | .flags = IORESOURCE_BUSY | 35 | .flags = IORESOURCE_IO | IORESOURCE_BUSY |
| 36 | }, { | 36 | }, { |
| 37 | .start = 0x40, | 37 | .start = 0x40, |
| 38 | .end = 0x5f, | 38 | .end = 0x5f, |
| 39 | .name = "timer", | 39 | .name = "timer", |
| 40 | .flags = IORESOURCE_BUSY | 40 | .flags = IORESOURCE_IO | IORESOURCE_BUSY |
| 41 | }, { | 41 | }, { |
| 42 | .start = 0x80, | 42 | .start = 0x80, |
| 43 | .end = 0x8f, | 43 | .end = 0x8f, |
| 44 | .name = "dma page reg", | 44 | .name = "dma page reg", |
| 45 | .flags = IORESOURCE_BUSY | 45 | .flags = IORESOURCE_IO | IORESOURCE_BUSY |
| 46 | }, { | 46 | }, { |
| 47 | .start = 0xc0, | 47 | .start = 0xc0, |
| 48 | .end = 0xdf, | 48 | .end = 0xdf, |
| 49 | .name = "dma2", | 49 | .name = "dma2", |
| 50 | .flags = IORESOURCE_BUSY | 50 | .flags = IORESOURCE_IO | IORESOURCE_BUSY |
| 51 | } | 51 | } |
| 52 | }; | 52 | }; |
| 53 | 53 | ||
diff --git a/arch/mips/mti-malta/malta-setup.c b/arch/mips/mti-malta/malta-setup.c index de34adb76157..7b63914d2e58 100644 --- a/arch/mips/mti-malta/malta-setup.c +++ b/arch/mips/mti-malta/malta-setup.c | |||
| @@ -47,31 +47,31 @@ static struct resource standard_io_resources[] = { | |||
| 47 | .name = "dma1", | 47 | .name = "dma1", |
| 48 | .start = 0x00, | 48 | .start = 0x00, |
| 49 | .end = 0x1f, | 49 | .end = 0x1f, |
| 50 | .flags = IORESOURCE_BUSY | 50 | .flags = IORESOURCE_IO | IORESOURCE_BUSY |
| 51 | }, | 51 | }, |
| 52 | { | 52 | { |
| 53 | .name = "timer", | 53 | .name = "timer", |
| 54 | .start = 0x40, | 54 | .start = 0x40, |
| 55 | .end = 0x5f, | 55 | .end = 0x5f, |
| 56 | .flags = IORESOURCE_BUSY | 56 | .flags = IORESOURCE_IO | IORESOURCE_BUSY |
| 57 | }, | 57 | }, |
| 58 | { | 58 | { |
| 59 | .name = "keyboard", | 59 | .name = "keyboard", |
| 60 | .start = 0x60, | 60 | .start = 0x60, |
| 61 | .end = 0x6f, | 61 | .end = 0x6f, |
| 62 | .flags = IORESOURCE_BUSY | 62 | .flags = IORESOURCE_IO | IORESOURCE_BUSY |
| 63 | }, | 63 | }, |
| 64 | { | 64 | { |
| 65 | .name = "dma page reg", | 65 | .name = "dma page reg", |
| 66 | .start = 0x80, | 66 | .start = 0x80, |
| 67 | .end = 0x8f, | 67 | .end = 0x8f, |
| 68 | .flags = IORESOURCE_BUSY | 68 | .flags = IORESOURCE_IO | IORESOURCE_BUSY |
| 69 | }, | 69 | }, |
| 70 | { | 70 | { |
| 71 | .name = "dma2", | 71 | .name = "dma2", |
| 72 | .start = 0xc0, | 72 | .start = 0xc0, |
| 73 | .end = 0xdf, | 73 | .end = 0xdf, |
| 74 | .flags = IORESOURCE_BUSY | 74 | .flags = IORESOURCE_IO | IORESOURCE_BUSY |
| 75 | }, | 75 | }, |
| 76 | }; | 76 | }; |
| 77 | 77 | ||
diff --git a/arch/powerpc/platforms/maple/time.c b/arch/powerpc/platforms/maple/time.c index 81799d70a1ee..cfddc87f81bf 100644 --- a/arch/powerpc/platforms/maple/time.c +++ b/arch/powerpc/platforms/maple/time.c | |||
| @@ -134,7 +134,7 @@ int maple_set_rtc_time(struct rtc_time *tm) | |||
| 134 | 134 | ||
| 135 | static struct resource rtc_iores = { | 135 | static struct resource rtc_iores = { |
| 136 | .name = "rtc", | 136 | .name = "rtc", |
| 137 | .flags = IORESOURCE_BUSY, | 137 | .flags = IORESOURCE_IO | IORESOURCE_BUSY, |
| 138 | }; | 138 | }; |
| 139 | 139 | ||
| 140 | unsigned long __init maple_get_boot_time(void) | 140 | unsigned long __init maple_get_boot_time(void) |
diff --git a/arch/powerpc/sysdev/i8259.c b/arch/powerpc/sysdev/i8259.c index bafb014e1a7e..cb9a8b71fd0f 100644 --- a/arch/powerpc/sysdev/i8259.c +++ b/arch/powerpc/sysdev/i8259.c | |||
| @@ -145,21 +145,21 @@ static struct resource pic1_iores = { | |||
| 145 | .name = "8259 (master)", | 145 | .name = "8259 (master)", |
| 146 | .start = 0x20, | 146 | .start = 0x20, |
| 147 | .end = 0x21, | 147 | .end = 0x21, |
| 148 | .flags = IORESOURCE_BUSY, | 148 | .flags = IORESOURCE_IO | IORESOURCE_BUSY, |
| 149 | }; | 149 | }; |
| 150 | 150 | ||
| 151 | static struct resource pic2_iores = { | 151 | static struct resource pic2_iores = { |
| 152 | .name = "8259 (slave)", | 152 | .name = "8259 (slave)", |
| 153 | .start = 0xa0, | 153 | .start = 0xa0, |
| 154 | .end = 0xa1, | 154 | .end = 0xa1, |
| 155 | .flags = IORESOURCE_BUSY, | 155 | .flags = IORESOURCE_IO | IORESOURCE_BUSY, |
| 156 | }; | 156 | }; |
| 157 | 157 | ||
| 158 | static struct resource pic_edgectrl_iores = { | 158 | static struct resource pic_edgectrl_iores = { |
| 159 | .name = "8259 edge control", | 159 | .name = "8259 edge control", |
| 160 | .start = 0x4d0, | 160 | .start = 0x4d0, |
| 161 | .end = 0x4d1, | 161 | .end = 0x4d1, |
| 162 | .flags = IORESOURCE_BUSY, | 162 | .flags = IORESOURCE_IO | IORESOURCE_BUSY, |
| 163 | }; | 163 | }; |
| 164 | 164 | ||
| 165 | static int i8259_host_match(struct irq_domain *h, struct device_node *node, | 165 | static int i8259_host_match(struct irq_domain *h, struct device_node *node, |
diff --git a/drivers/irqchip/irq-i8259.c b/drivers/irqchip/irq-i8259.c index 7aafbb091b67..b0d4aab1a58c 100644 --- a/drivers/irqchip/irq-i8259.c +++ b/drivers/irqchip/irq-i8259.c | |||
| @@ -289,14 +289,14 @@ static struct resource pic1_io_resource = { | |||
| 289 | .name = "pic1", | 289 | .name = "pic1", |
| 290 | .start = PIC_MASTER_CMD, | 290 | .start = PIC_MASTER_CMD, |
| 291 | .end = PIC_MASTER_IMR, | 291 | .end = PIC_MASTER_IMR, |
| 292 | .flags = IORESOURCE_BUSY | 292 | .flags = IORESOURCE_IO | IORESOURCE_BUSY |
| 293 | }; | 293 | }; |
| 294 | 294 | ||
| 295 | static struct resource pic2_io_resource = { | 295 | static struct resource pic2_io_resource = { |
| 296 | .name = "pic2", | 296 | .name = "pic2", |
| 297 | .start = PIC_SLAVE_CMD, | 297 | .start = PIC_SLAVE_CMD, |
| 298 | .end = PIC_SLAVE_IMR, | 298 | .end = PIC_SLAVE_IMR, |
| 299 | .flags = IORESOURCE_BUSY | 299 | .flags = IORESOURCE_IO | IORESOURCE_BUSY |
| 300 | }; | 300 | }; |
| 301 | 301 | ||
| 302 | static int i8259A_irq_domain_map(struct irq_domain *d, unsigned int virq, | 302 | static int i8259A_irq_domain_map(struct irq_domain *d, unsigned int virq, |
diff --git a/drivers/pci/host/pci-host-common.c b/drivers/pci/host/pci-host-common.c index 44a47d4f0b8f..c4b891c84703 100644 --- a/drivers/pci/host/pci-host-common.c +++ b/drivers/pci/host/pci-host-common.c | |||
| @@ -142,7 +142,7 @@ int pci_host_common_probe(struct platform_device *pdev, | |||
| 142 | 142 | ||
| 143 | /* Do not reassign resources if probe only */ | 143 | /* Do not reassign resources if probe only */ |
| 144 | if (!pci_has_flag(PCI_PROBE_ONLY)) | 144 | if (!pci_has_flag(PCI_PROBE_ONLY)) |
| 145 | pci_add_flags(PCI_REASSIGN_ALL_RSRC | PCI_REASSIGN_ALL_BUS); | 145 | pci_add_flags(PCI_REASSIGN_ALL_BUS); |
| 146 | 146 | ||
| 147 | list_splice_init(&resources, &bridge->windows); | 147 | list_splice_init(&resources, &bridge->windows); |
| 148 | bridge->dev.parent = dev; | 148 | bridge->dev.parent = dev; |
diff --git a/drivers/pci/host/pci-tegra.c b/drivers/pci/host/pci-tegra.c index f9d3960dc39f..67328a21d0ee 100644 --- a/drivers/pci/host/pci-tegra.c +++ b/drivers/pci/host/pci-tegra.c | |||
| @@ -2382,7 +2382,6 @@ static int tegra_pcie_probe(struct platform_device *pdev) | |||
| 2382 | 2382 | ||
| 2383 | tegra_pcie_enable_ports(pcie); | 2383 | tegra_pcie_enable_ports(pcie); |
| 2384 | 2384 | ||
| 2385 | pci_add_flags(PCI_REASSIGN_ALL_RSRC | PCI_REASSIGN_ALL_BUS); | ||
| 2386 | host->busnr = pcie->busn.start; | 2385 | host->busnr = pcie->busn.start; |
| 2387 | host->dev.parent = &pdev->dev; | 2386 | host->dev.parent = &pdev->dev; |
| 2388 | host->ops = &tegra_pcie_ops; | 2387 | host->ops = &tegra_pcie_ops; |
diff --git a/drivers/pci/host/pci-versatile.c b/drivers/pci/host/pci-versatile.c index d417acab0ecf..2a2dfcd68e86 100644 --- a/drivers/pci/host/pci-versatile.c +++ b/drivers/pci/host/pci-versatile.c | |||
| @@ -202,7 +202,7 @@ static int versatile_pci_probe(struct platform_device *pdev) | |||
| 202 | writel(0, versatile_cfg_base[0] + PCI_INTERRUPT_LINE); | 202 | writel(0, versatile_cfg_base[0] + PCI_INTERRUPT_LINE); |
| 203 | 203 | ||
| 204 | pci_add_flags(PCI_ENABLE_PROC_DOMAINS); | 204 | pci_add_flags(PCI_ENABLE_PROC_DOMAINS); |
| 205 | pci_add_flags(PCI_REASSIGN_ALL_BUS | PCI_REASSIGN_ALL_RSRC); | 205 | pci_add_flags(PCI_REASSIGN_ALL_BUS); |
| 206 | 206 | ||
| 207 | list_splice_init(&pci_res, &bridge->windows); | 207 | list_splice_init(&pci_res, &bridge->windows); |
| 208 | bridge->dev.parent = dev; | 208 | bridge->dev.parent = dev; |
diff --git a/drivers/pci/host/pcie-rcar.c b/drivers/pci/host/pcie-rcar.c index 52ab3cb0a0bf..2ef5ff9cddf6 100644 --- a/drivers/pci/host/pcie-rcar.c +++ b/drivers/pci/host/pcie-rcar.c | |||
| @@ -459,7 +459,7 @@ static int rcar_pcie_enable(struct rcar_pcie *pcie) | |||
| 459 | 459 | ||
| 460 | rcar_pcie_setup(&bridge->windows, pcie); | 460 | rcar_pcie_setup(&bridge->windows, pcie); |
| 461 | 461 | ||
| 462 | pci_add_flags(PCI_REASSIGN_ALL_RSRC | PCI_REASSIGN_ALL_BUS); | 462 | pci_add_flags(PCI_REASSIGN_ALL_BUS); |
| 463 | 463 | ||
| 464 | bridge->dev.parent = dev; | 464 | bridge->dev.parent = dev; |
| 465 | bridge->sysdata = pcie; | 465 | bridge->sysdata = pcie; |
diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c index c7941a0512a5..7b282f4ba8dc 100644 --- a/drivers/pci/pci-sysfs.c +++ b/drivers/pci/pci-sysfs.c | |||
| @@ -1216,14 +1216,9 @@ static int pci_mmap_resource(struct kobject *kobj, struct bin_attribute *attr, | |||
| 1216 | if (res->flags & IORESOURCE_MEM && iomem_is_exclusive(res->start)) | 1216 | if (res->flags & IORESOURCE_MEM && iomem_is_exclusive(res->start)) |
| 1217 | return -EINVAL; | 1217 | return -EINVAL; |
| 1218 | 1218 | ||
| 1219 | if (!pci_mmap_fits(pdev, bar, vma, PCI_MMAP_SYSFS)) { | 1219 | if (!pci_mmap_fits(pdev, bar, vma, PCI_MMAP_SYSFS)) |
| 1220 | WARN(1, "process \"%s\" tried to map 0x%08lx bytes at page 0x%08lx on %s BAR %d (start 0x%16Lx, size 0x%16Lx)\n", | ||
| 1221 | current->comm, vma->vm_end-vma->vm_start, vma->vm_pgoff, | ||
| 1222 | pci_name(pdev), bar, | ||
| 1223 | (u64)pci_resource_start(pdev, bar), | ||
| 1224 | (u64)pci_resource_len(pdev, bar)); | ||
| 1225 | return -EINVAL; | 1220 | return -EINVAL; |
| 1226 | } | 1221 | |
| 1227 | mmap_type = res->flags & IORESOURCE_MEM ? pci_mmap_mem : pci_mmap_io; | 1222 | mmap_type = res->flags & IORESOURCE_MEM ? pci_mmap_mem : pci_mmap_io; |
| 1228 | 1223 | ||
| 1229 | return pci_mmap_resource_range(pdev, bar, vma, mmap_type, write_combine); | 1224 | return pci_mmap_resource_range(pdev, bar, vma, mmap_type, write_combine); |
diff --git a/drivers/pci/rom.c b/drivers/pci/rom.c index 61f9e8a5ea8b..2f8fcd9ba5c1 100644 --- a/drivers/pci/rom.c +++ b/drivers/pci/rom.c | |||
| @@ -92,15 +92,15 @@ size_t pci_get_rom_size(struct pci_dev *pdev, void __iomem *rom, size_t size) | |||
| 92 | void __iomem *pds; | 92 | void __iomem *pds; |
| 93 | /* Standard PCI ROMs start out with these bytes 55 AA */ | 93 | /* Standard PCI ROMs start out with these bytes 55 AA */ |
| 94 | if (readw(image) != 0xAA55) { | 94 | if (readw(image) != 0xAA55) { |
| 95 | pci_err(pdev, "Invalid PCI ROM header signature: expecting 0xaa55, got %#06x\n", | 95 | pci_info(pdev, "Invalid PCI ROM header signature: expecting 0xaa55, got %#06x\n", |
| 96 | readw(image)); | 96 | readw(image)); |
| 97 | break; | 97 | break; |
| 98 | } | 98 | } |
| 99 | /* get the PCI data structure and check its "PCIR" signature */ | 99 | /* get the PCI data structure and check its "PCIR" signature */ |
| 100 | pds = image + readw(image + 24); | 100 | pds = image + readw(image + 24); |
| 101 | if (readl(pds) != 0x52494350) { | 101 | if (readl(pds) != 0x52494350) { |
| 102 | pci_err(pdev, "Invalid PCI ROM data signature: expecting 0x52494350, got %#010x\n", | 102 | pci_info(pdev, "Invalid PCI ROM data signature: expecting 0x52494350, got %#010x\n", |
| 103 | readl(pds)); | 103 | readl(pds)); |
| 104 | break; | 104 | break; |
| 105 | } | 105 | } |
| 106 | last_image = readb(pds + 21) & 0x80; | 106 | last_image = readb(pds + 21) & 0x80; |
diff --git a/drivers/video/console/vgacon.c b/drivers/video/console/vgacon.c index 445b1dc5d441..a17ba1465815 100644 --- a/drivers/video/console/vgacon.c +++ b/drivers/video/console/vgacon.c | |||
| @@ -422,7 +422,10 @@ static const char *vgacon_startup(void) | |||
| 422 | vga_video_port_val = VGA_CRT_DM; | 422 | vga_video_port_val = VGA_CRT_DM; |
| 423 | if ((screen_info.orig_video_ega_bx & 0xff) != 0x10) { | 423 | if ((screen_info.orig_video_ega_bx & 0xff) != 0x10) { |
| 424 | static struct resource ega_console_resource = | 424 | static struct resource ega_console_resource = |
| 425 | { .name = "ega", .start = 0x3B0, .end = 0x3BF }; | 425 | { .name = "ega", |
| 426 | .flags = IORESOURCE_IO, | ||
| 427 | .start = 0x3B0, | ||
| 428 | .end = 0x3BF }; | ||
| 426 | vga_video_type = VIDEO_TYPE_EGAM; | 429 | vga_video_type = VIDEO_TYPE_EGAM; |
| 427 | vga_vram_size = 0x8000; | 430 | vga_vram_size = 0x8000; |
| 428 | display_desc = "EGA+"; | 431 | display_desc = "EGA+"; |
| @@ -430,9 +433,15 @@ static const char *vgacon_startup(void) | |||
| 430 | &ega_console_resource); | 433 | &ega_console_resource); |
| 431 | } else { | 434 | } else { |
| 432 | static struct resource mda1_console_resource = | 435 | static struct resource mda1_console_resource = |
| 433 | { .name = "mda", .start = 0x3B0, .end = 0x3BB }; | 436 | { .name = "mda", |
| 437 | .flags = IORESOURCE_IO, | ||
| 438 | .start = 0x3B0, | ||
| 439 | .end = 0x3BB }; | ||
| 434 | static struct resource mda2_console_resource = | 440 | static struct resource mda2_console_resource = |
| 435 | { .name = "mda", .start = 0x3BF, .end = 0x3BF }; | 441 | { .name = "mda", |
| 442 | .flags = IORESOURCE_IO, | ||
| 443 | .start = 0x3BF, | ||
| 444 | .end = 0x3BF }; | ||
| 436 | vga_video_type = VIDEO_TYPE_MDA; | 445 | vga_video_type = VIDEO_TYPE_MDA; |
| 437 | vga_vram_size = 0x2000; | 446 | vga_vram_size = 0x2000; |
| 438 | display_desc = "*MDA"; | 447 | display_desc = "*MDA"; |
| @@ -454,15 +463,21 @@ static const char *vgacon_startup(void) | |||
| 454 | vga_vram_size = 0x8000; | 463 | vga_vram_size = 0x8000; |
| 455 | 464 | ||
| 456 | if (!screen_info.orig_video_isVGA) { | 465 | if (!screen_info.orig_video_isVGA) { |
| 457 | static struct resource ega_console_resource | 466 | static struct resource ega_console_resource = |
| 458 | = { .name = "ega", .start = 0x3C0, .end = 0x3DF }; | 467 | { .name = "ega", |
| 468 | .flags = IORESOURCE_IO, | ||
| 469 | .start = 0x3C0, | ||
| 470 | .end = 0x3DF }; | ||
| 459 | vga_video_type = VIDEO_TYPE_EGAC; | 471 | vga_video_type = VIDEO_TYPE_EGAC; |
| 460 | display_desc = "EGA"; | 472 | display_desc = "EGA"; |
| 461 | request_resource(&ioport_resource, | 473 | request_resource(&ioport_resource, |
| 462 | &ega_console_resource); | 474 | &ega_console_resource); |
| 463 | } else { | 475 | } else { |
| 464 | static struct resource vga_console_resource | 476 | static struct resource vga_console_resource = |
| 465 | = { .name = "vga+", .start = 0x3C0, .end = 0x3DF }; | 477 | { .name = "vga+", |
| 478 | .flags = IORESOURCE_IO, | ||
| 479 | .start = 0x3C0, | ||
| 480 | .end = 0x3DF }; | ||
| 466 | vga_video_type = VIDEO_TYPE_VGAC; | 481 | vga_video_type = VIDEO_TYPE_VGAC; |
| 467 | display_desc = "VGA+"; | 482 | display_desc = "VGA+"; |
| 468 | request_resource(&ioport_resource, | 483 | request_resource(&ioport_resource, |
| @@ -494,7 +509,10 @@ static const char *vgacon_startup(void) | |||
| 494 | } | 509 | } |
| 495 | } else { | 510 | } else { |
| 496 | static struct resource cga_console_resource = | 511 | static struct resource cga_console_resource = |
| 497 | { .name = "cga", .start = 0x3D4, .end = 0x3D5 }; | 512 | { .name = "cga", |
| 513 | .flags = IORESOURCE_IO, | ||
| 514 | .start = 0x3D4, | ||
| 515 | .end = 0x3D5 }; | ||
| 498 | vga_video_type = VIDEO_TYPE_CGA; | 516 | vga_video_type = VIDEO_TYPE_CGA; |
| 499 | vga_vram_size = 0x2000; | 517 | vga_vram_size = 0x2000; |
| 500 | display_desc = "*CGA"; | 518 | display_desc = "*CGA"; |
diff --git a/kernel/resource.c b/kernel/resource.c index 54ba6de3757c..8c527d83ca76 100644 --- a/kernel/resource.c +++ b/kernel/resource.c | |||
| @@ -1022,6 +1022,7 @@ static void __init __reserve_region_with_split(struct resource *root, | |||
| 1022 | struct resource *conflict; | 1022 | struct resource *conflict; |
| 1023 | struct resource *res = alloc_resource(GFP_ATOMIC); | 1023 | struct resource *res = alloc_resource(GFP_ATOMIC); |
| 1024 | struct resource *next_res = NULL; | 1024 | struct resource *next_res = NULL; |
| 1025 | int type = resource_type(root); | ||
| 1025 | 1026 | ||
| 1026 | if (!res) | 1027 | if (!res) |
| 1027 | return; | 1028 | return; |
| @@ -1029,7 +1030,7 @@ static void __init __reserve_region_with_split(struct resource *root, | |||
| 1029 | res->name = name; | 1030 | res->name = name; |
| 1030 | res->start = start; | 1031 | res->start = start; |
| 1031 | res->end = end; | 1032 | res->end = end; |
| 1032 | res->flags = IORESOURCE_BUSY; | 1033 | res->flags = type | IORESOURCE_BUSY; |
| 1033 | res->desc = IORES_DESC_NONE; | 1034 | res->desc = IORES_DESC_NONE; |
| 1034 | 1035 | ||
| 1035 | while (1) { | 1036 | while (1) { |
| @@ -1064,7 +1065,7 @@ static void __init __reserve_region_with_split(struct resource *root, | |||
| 1064 | next_res->name = name; | 1065 | next_res->name = name; |
| 1065 | next_res->start = conflict->end + 1; | 1066 | next_res->start = conflict->end + 1; |
| 1066 | next_res->end = end; | 1067 | next_res->end = end; |
| 1067 | next_res->flags = IORESOURCE_BUSY; | 1068 | next_res->flags = type | IORESOURCE_BUSY; |
| 1068 | next_res->desc = IORES_DESC_NONE; | 1069 | next_res->desc = IORES_DESC_NONE; |
| 1069 | } | 1070 | } |
| 1070 | } else { | 1071 | } else { |
| @@ -1478,7 +1479,7 @@ void __devm_release_region(struct device *dev, struct resource *parent, | |||
| 1478 | EXPORT_SYMBOL(__devm_release_region); | 1479 | EXPORT_SYMBOL(__devm_release_region); |
| 1479 | 1480 | ||
| 1480 | /* | 1481 | /* |
| 1481 | * Called from init/main.c to reserve IO ports. | 1482 | * Reserve I/O ports or memory based on "reserve=" kernel parameter. |
| 1482 | */ | 1483 | */ |
| 1483 | #define MAXRESERVE 4 | 1484 | #define MAXRESERVE 4 |
| 1484 | static int __init reserve_setup(char *str) | 1485 | static int __init reserve_setup(char *str) |
| @@ -1489,26 +1490,38 @@ static int __init reserve_setup(char *str) | |||
| 1489 | for (;;) { | 1490 | for (;;) { |
| 1490 | unsigned int io_start, io_num; | 1491 | unsigned int io_start, io_num; |
| 1491 | int x = reserved; | 1492 | int x = reserved; |
| 1493 | struct resource *parent; | ||
| 1492 | 1494 | ||
| 1493 | if (get_option (&str, &io_start) != 2) | 1495 | if (get_option(&str, &io_start) != 2) |
| 1494 | break; | 1496 | break; |
| 1495 | if (get_option (&str, &io_num) == 0) | 1497 | if (get_option(&str, &io_num) == 0) |
| 1496 | break; | 1498 | break; |
| 1497 | if (x < MAXRESERVE) { | 1499 | if (x < MAXRESERVE) { |
| 1498 | struct resource *res = reserve + x; | 1500 | struct resource *res = reserve + x; |
| 1501 | |||
| 1502 | /* | ||
| 1503 | * If the region starts below 0x10000, we assume it's | ||
| 1504 | * I/O port space; otherwise assume it's memory. | ||
| 1505 | */ | ||
| 1506 | if (io_start < 0x10000) { | ||
| 1507 | res->flags = IORESOURCE_IO; | ||
| 1508 | parent = &ioport_resource; | ||
| 1509 | } else { | ||
| 1510 | res->flags = IORESOURCE_MEM; | ||
| 1511 | parent = &iomem_resource; | ||
| 1512 | } | ||
| 1499 | res->name = "reserved"; | 1513 | res->name = "reserved"; |
| 1500 | res->start = io_start; | 1514 | res->start = io_start; |
| 1501 | res->end = io_start + io_num - 1; | 1515 | res->end = io_start + io_num - 1; |
| 1502 | res->flags = IORESOURCE_BUSY; | 1516 | res->flags |= IORESOURCE_BUSY; |
| 1503 | res->desc = IORES_DESC_NONE; | 1517 | res->desc = IORES_DESC_NONE; |
| 1504 | res->child = NULL; | 1518 | res->child = NULL; |
| 1505 | if (request_resource(res->start >= 0x10000 ? &iomem_resource : &ioport_resource, res) == 0) | 1519 | if (request_resource(parent, res) == 0) |
| 1506 | reserved = x+1; | 1520 | reserved = x+1; |
| 1507 | } | 1521 | } |
| 1508 | } | 1522 | } |
| 1509 | return 1; | 1523 | return 1; |
| 1510 | } | 1524 | } |
| 1511 | |||
| 1512 | __setup("reserve=", reserve_setup); | 1525 | __setup("reserve=", reserve_setup); |
| 1513 | 1526 | ||
| 1514 | /* | 1527 | /* |
