Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/pci/pci_host_generic_fdt.c
Show First 20 Lines • Show All 114 Lines • ▼ Show 20 Lines | if (ofw_bus_is_compatible(dev, "arm,gem5_pcie")) { | ||||
device_set_desc(dev, "GEM5 PCIe host controller"); | device_set_desc(dev, "GEM5 PCIe host controller"); | ||||
return (BUS_PROBE_DEFAULT); | return (BUS_PROBE_DEFAULT); | ||||
} | } | ||||
return (ENXIO); | return (ENXIO); | ||||
} | } | ||||
int | int | ||||
pci_host_generic_attach(device_t dev) | pci_host_generic_setup_fdt(device_t dev) | ||||
{ | { | ||||
andrew: After using the fdt softc in the bcm driver you can assume `device_get_softc(dev);` will return… | |||||
struct generic_pcie_fdt_softc *sc; | struct generic_pcie_fdt_softc *sc; | ||||
phandle_t node; | phandle_t node; | ||||
int error; | int error; | ||||
sc = device_get_softc(dev); | sc = device_get_softc(dev); | ||||
/* Retrieve 'ranges' property from FDT */ | /* Retrieve 'ranges' property from FDT */ | ||||
if (bootverbose) | if (bootverbose) | ||||
Show All 11 Lines | pci_host_generic_setup_fdt(device_t dev) | ||||
} | } | ||||
if (bootverbose) | if (bootverbose) | ||||
device_printf(dev, "Bus is%s cache-coherent\n", | device_printf(dev, "Bus is%s cache-coherent\n", | ||||
sc->base.coherent ? "" : " not"); | sc->base.coherent ? "" : " not"); | ||||
/* TODO parse FDT bus ranges */ | /* TODO parse FDT bus ranges */ | ||||
sc->base.bus_start = 0; | sc->base.bus_start = 0; | ||||
sc->base.bus_end = 0xFF; | sc->base.bus_end = 0xFF; | ||||
error = pci_host_generic_core_attach(dev); | error = pci_host_generic_core_attach(dev); | ||||
if (error != 0) | if (error != 0) | ||||
return (error); | return (error); | ||||
ofw_bus_setup_iinfo(node, &sc->pci_iinfo, sizeof(cell_t)); | ofw_bus_setup_iinfo(node, &sc->pci_iinfo, sizeof(cell_t)); | ||||
return (0); | |||||
} | |||||
int | |||||
pci_host_generic_attach(device_t dev) | |||||
{ | |||||
struct generic_pcie_fdt_softc *sc; | |||||
int error; | |||||
sc = device_get_softc(dev); | |||||
error = pci_host_generic_setup_fdt(dev); | |||||
if (error != 0) | |||||
return (error); | |||||
device_add_child(dev, "pci", -1); | device_add_child(dev, "pci", -1); | ||||
return (bus_generic_attach(dev)); | return (bus_generic_attach(dev)); | ||||
} | } | ||||
static int | static int | ||||
parse_pci_mem_ranges(device_t dev, struct generic_pcie_core_softc *sc) | parse_pci_mem_ranges(device_t dev, struct generic_pcie_core_softc *sc) | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 394 Lines • Show Last 20 Lines |
After using the fdt softc in the bcm driver you can assume device_get_softc(dev); will return the correct thing. The base softc is always first in the more specific struct so the returned pointer will be correct.