|
@@ -79,29 +79,24 @@ setup_port(struct serial_private *priv, struct uart_8250_port *port,
|
|
|
int bar, int offset, int regshift)
|
|
|
{
|
|
|
struct pci_dev *dev = priv->dev;
|
|
|
- unsigned long base, len;
|
|
|
|
|
|
if (bar >= PCI_NUM_BAR_RESOURCES)
|
|
|
return -EINVAL;
|
|
|
|
|
|
- base = pci_resource_start(dev, bar);
|
|
|
-
|
|
|
if (pci_resource_flags(dev, bar) & IORESOURCE_MEM) {
|
|
|
- len = pci_resource_len(dev, bar);
|
|
|
-
|
|
|
if (!priv->remapped_bar[bar])
|
|
|
- priv->remapped_bar[bar] = ioremap_nocache(base, len);
|
|
|
+ priv->remapped_bar[bar] = pci_ioremap_bar(dev, bar);
|
|
|
if (!priv->remapped_bar[bar])
|
|
|
return -ENOMEM;
|
|
|
|
|
|
port->port.iotype = UPIO_MEM;
|
|
|
port->port.iobase = 0;
|
|
|
- port->port.mapbase = base + offset;
|
|
|
+ port->port.mapbase = pci_resource_start(dev, bar) + offset;
|
|
|
port->port.membase = priv->remapped_bar[bar] + offset;
|
|
|
port->port.regshift = regshift;
|
|
|
} else {
|
|
|
port->port.iotype = UPIO_PORT;
|
|
|
- port->port.iobase = base + offset;
|
|
|
+ port->port.iobase = pci_resource_start(dev, bar) + offset;
|
|
|
port->port.mapbase = 0;
|
|
|
port->port.membase = NULL;
|
|
|
port->port.regshift = 0;
|
|
@@ -317,7 +312,6 @@ static void pci_plx9050_exit(struct pci_dev *dev)
|
|
|
static void pci_ni8420_exit(struct pci_dev *dev)
|
|
|
{
|
|
|
void __iomem *p;
|
|
|
- unsigned long base, len;
|
|
|
unsigned int bar = 0;
|
|
|
|
|
|
if ((pci_resource_flags(dev, bar) & IORESOURCE_MEM) == 0) {
|
|
@@ -325,9 +319,7 @@ static void pci_ni8420_exit(struct pci_dev *dev)
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- base = pci_resource_start(dev, bar);
|
|
|
- len = pci_resource_len(dev, bar);
|
|
|
- p = ioremap_nocache(base, len);
|
|
|
+ p = pci_ioremap_bar(dev, bar);
|
|
|
if (p == NULL)
|
|
|
return;
|
|
|
|
|
@@ -349,7 +341,6 @@ static void pci_ni8420_exit(struct pci_dev *dev)
|
|
|
static void pci_ni8430_exit(struct pci_dev *dev)
|
|
|
{
|
|
|
void __iomem *p;
|
|
|
- unsigned long base, len;
|
|
|
unsigned int bar = 0;
|
|
|
|
|
|
if ((pci_resource_flags(dev, bar) & IORESOURCE_MEM) == 0) {
|
|
@@ -357,9 +348,7 @@ static void pci_ni8430_exit(struct pci_dev *dev)
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- base = pci_resource_start(dev, bar);
|
|
|
- len = pci_resource_len(dev, bar);
|
|
|
- p = ioremap_nocache(base, len);
|
|
|
+ p = pci_ioremap_bar(dev, bar);
|
|
|
if (p == NULL)
|
|
|
return;
|
|
|
|
|
@@ -682,7 +671,6 @@ static int pci_xircom_init(struct pci_dev *dev)
|
|
|
static int pci_ni8420_init(struct pci_dev *dev)
|
|
|
{
|
|
|
void __iomem *p;
|
|
|
- unsigned long base, len;
|
|
|
unsigned int bar = 0;
|
|
|
|
|
|
if ((pci_resource_flags(dev, bar) & IORESOURCE_MEM) == 0) {
|
|
@@ -690,9 +678,7 @@ static int pci_ni8420_init(struct pci_dev *dev)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
- base = pci_resource_start(dev, bar);
|
|
|
- len = pci_resource_len(dev, bar);
|
|
|
- p = ioremap_nocache(base, len);
|
|
|
+ p = pci_ioremap_bar(dev, bar);
|
|
|
if (p == NULL)
|
|
|
return -ENOMEM;
|
|
|
|
|
@@ -714,7 +700,7 @@ static int pci_ni8420_init(struct pci_dev *dev)
|
|
|
static int pci_ni8430_init(struct pci_dev *dev)
|
|
|
{
|
|
|
void __iomem *p;
|
|
|
- unsigned long base, len;
|
|
|
+ struct pci_bus_region region;
|
|
|
u32 device_window;
|
|
|
unsigned int bar = 0;
|
|
|
|
|
@@ -723,14 +709,17 @@ static int pci_ni8430_init(struct pci_dev *dev)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
- base = pci_resource_start(dev, bar);
|
|
|
- len = pci_resource_len(dev, bar);
|
|
|
- p = ioremap_nocache(base, len);
|
|
|
+ p = pci_ioremap_bar(dev, bar);
|
|
|
if (p == NULL)
|
|
|
return -ENOMEM;
|
|
|
|
|
|
- /* Set device window address and size in BAR0 */
|
|
|
- device_window = ((base + MITE_IOWBSR1_WIN_OFFSET) & 0xffffff00)
|
|
|
+ /*
|
|
|
+ * Set device window address and size in BAR0, while acknowledging that
|
|
|
+ * the resource structure may contain a translated address that differs
|
|
|
+ * from the address the device responds to.
|
|
|
+ */
|
|
|
+ pcibios_resource_to_bus(dev->bus, ®ion, &dev->resource[bar]);
|
|
|
+ device_window = ((region.start + MITE_IOWBSR1_WIN_OFFSET) & 0xffffff00)
|
|
|
| MITE_IOWBSR1_WENAB | MITE_IOWBSR1_WSIZE;
|
|
|
writel(device_window, p + MITE_IOWBSR1);
|
|
|
|
|
@@ -757,8 +746,8 @@ pci_ni8430_setup(struct serial_private *priv,
|
|
|
const struct pciserial_board *board,
|
|
|
struct uart_8250_port *port, int idx)
|
|
|
{
|
|
|
+ struct pci_dev *dev = priv->dev;
|
|
|
void __iomem *p;
|
|
|
- unsigned long base, len;
|
|
|
unsigned int bar, offset = board->first_offset;
|
|
|
|
|
|
if (idx >= board->num_ports)
|
|
@@ -767,9 +756,7 @@ pci_ni8430_setup(struct serial_private *priv,
|
|
|
bar = FL_GET_BASE(board->flags);
|
|
|
offset += idx * board->uart_offset;
|
|
|
|
|
|
- base = pci_resource_start(priv->dev, bar);
|
|
|
- len = pci_resource_len(priv->dev, bar);
|
|
|
- p = ioremap_nocache(base, len);
|
|
|
+ p = pci_ioremap_bar(dev, bar);
|
|
|
|
|
|
/* enable the transceiver */
|
|
|
writeb(readb(p + offset + NI8430_PORTCON) | NI8430_PORTCON_TXVR_ENABLE,
|