Re: [PATCH] MIPS: cavium-octeon: fix I/O space setup on non-PCI systems

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 07/20/2013 10:38 AM, Aaro Koskinen wrote:
Fix I/O space setup, so that on non-PCI systems using inb()/outb()
won't crash the system. Some drivers may try to probe I/O space and for
that purpose we can just allocate some normal memory. Drivers trying to
reserve a region will fail early as we set the size to 0.

Tested with EdgeRouter Lite by enabling CONFIG_SERIO_I8042 that caused
the originally reported crash.

Reported-by: Faidon Liambotis <paravoid@xxxxxxxxxx>
Signed-off-by: Aaro Koskinen <aaro.koskinen@xxxxxx>

NACK.

This doesn't handle the following cases:

1) CONFIG_PCI=n

2) SoCs with PCIe


I think we need to move the 'if (!octeon_is_pci_host())' block to a place where it will always run.

David Daney

---
  arch/mips/pci/pci-octeon.c | 10 +++++++---
  1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/arch/mips/pci/pci-octeon.c b/arch/mips/pci/pci-octeon.c
index 95c2ea8..1bfdcc8c 100644
--- a/arch/mips/pci/pci-octeon.c
+++ b/arch/mips/pci/pci-octeon.c
@@ -8,6 +8,7 @@
  #include <linux/kernel.h>
  #include <linux/init.h>
  #include <linux/pci.h>
+#include <linux/vmalloc.h>
  #include <linux/interrupt.h>
  #include <linux/time.h>
  #include <linux/delay.h>
@@ -587,13 +588,16 @@ static int __init octeon_pci_setup(void)
  		octeon_dma_bar_type = OCTEON_DMA_BAR_TYPE_BIG;

  	/* PCI I/O and PCI MEM values */
-	set_io_port_base(OCTEON_PCI_IOSPACE_BASE);
-	ioport_resource.start = 0;
-	ioport_resource.end = OCTEON_PCI_IOSPACE_SIZE - 1;
  	if (!octeon_is_pci_host()) {
  		pr_notice("Not in host mode, PCI Controller not initialized\n");
+		set_io_port_base((unsigned long)vzalloc(IO_SPACE_LIMIT));
+		ioport_resource.start = MAX_RESOURCE;
+		ioport_resource.end = 0;
  		return 0;
  	}
+	set_io_port_base(OCTEON_PCI_IOSPACE_BASE);
+	ioport_resource.start = 0;
+	ioport_resource.end = OCTEON_PCI_IOSPACE_SIZE - 1;

  	pr_notice("%s Octeon big bar support\n",
  		  (octeon_dma_bar_type ==




[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux