Lines Matching +full:rs780e +full:- +full:pci

1 // SPDX-License-Identifier: GPL-2.0
3 * Loongson PCI Host Controller Driver
10 #include <linux/pci.h>
12 #include <linux/pci-acpi.h>
13 #include <linux/pci-ecam.h>
15 #include "../pci.h"
53 dev->class = PCI_CLASS_BRIDGE_PCI_NORMAL; in bridge_class_quirk()
68 pdev->mmio_always_on = 1; in system_bus_quirk()
69 pdev->non_compliant_bars = 1; in system_bus_quirk()
80 struct pci_bus *bus = dev->bus; in loongson_mrrs_quirk()
91 bridge = bus->self; in loongson_mrrs_quirk()
92 bus = bus->parent; in loongson_mrrs_quirk()
112 pdev->pin = 1 + (PCI_FUNC(pdev->devfn) & 3); in loongson_pci_pin_quirk()
134 return (struct loongson_pci *)(bus->sysdata); in pci_bus_to_loongson_pci()
136 cfg = bus->sysdata; in pci_bus_to_loongson_pci()
137 return (struct loongson_pci *)(cfg->priv); in pci_bus_to_loongson_pci()
144 unsigned char busnum = bus->number; in cfg0_map()
151 return priv->cfg0_base + addroff; in cfg0_map()
158 unsigned char busnum = bus->number; in cfg1_map()
165 return priv->cfg1_base + addroff; in cfg1_map()
186 if ((priv->data->flags & FLAG_DEV_FIX) && bus->self) { in pci_loongson_map_bus()
191 /* Don't access non-existent devices */ in pci_loongson_map_bus()
192 if (priv->data->flags & FLAG_DEV_HIDDEN) { in pci_loongson_map_bus()
198 if (where < PCI_CFG_SPACE_SIZE && priv->cfg0_base) in pci_loongson_map_bus()
202 if (where < PCI_CFG_SPACE_EXP_SIZE && priv->cfg1_base) in pci_loongson_map_bus()
228 /* LS2K/LS7A accept 8/16/32-bit PCI config operations */
235 /* RS780/SR5690 only accept 32-bit PCI config operations */
258 { .compatible = "loongson,ls2k-pci",
260 { .compatible = "loongson,ls7a-pci",
262 { .compatible = "loongson,rs780e-pci",
270 struct device *dev = &pdev->dev; in loongson_pci_probe()
271 struct device_node *node = dev->of_node; in loongson_pci_probe()
276 return -ENODEV; in loongson_pci_probe()
280 return -ENODEV; in loongson_pci_probe()
283 priv->pdev = pdev; in loongson_pci_probe()
284 priv->data = of_device_get_match_data(dev); in loongson_pci_probe()
286 if (priv->data->flags & FLAG_CFG0) { in loongson_pci_probe()
291 priv->cfg0_base = devm_pci_remap_cfg_resource(dev, regs); in loongson_pci_probe()
292 if (IS_ERR(priv->cfg0_base)) in loongson_pci_probe()
293 return PTR_ERR(priv->cfg0_base); in loongson_pci_probe()
297 if (priv->data->flags & FLAG_CFG1) { in loongson_pci_probe()
302 priv->cfg1_base = devm_pci_remap_cfg_resource(dev, regs); in loongson_pci_probe()
303 if (IS_ERR(priv->cfg1_base)) in loongson_pci_probe()
304 priv->cfg1_base = NULL; in loongson_pci_probe()
308 bridge->sysdata = priv; in loongson_pci_probe()
309 bridge->ops = priv->data->ops; in loongson_pci_probe()
310 bridge->map_irq = loongson_map_irq; in loongson_pci_probe()
317 .name = "loongson-pci",
330 struct device *dev = cfg->parent; in loongson_pci_ecam_init()
336 return -ENOMEM; in loongson_pci_ecam_init()
340 return -ENOMEM; in loongson_pci_ecam_init()
342 cfg->priv = priv; in loongson_pci_ecam_init()
343 data->flags = FLAG_CFG1 | FLAG_DEV_HIDDEN; in loongson_pci_ecam_init()
344 priv->data = data; in loongson_pci_ecam_init()
345 priv->cfg1_base = cfg->win - (cfg->busr.start << 16); in loongson_pci_ecam_init()