MCPcopy Create free account
hub / github.com/F-Stack/f-stack / octopci_attach

Function octopci_attach

freebsd/mips/cavium/octopci.c:133–213  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

131}
132
133static int
134octopci_attach(device_t dev)
135{
136 struct octopci_softc *sc;
137 unsigned subbus;
138 int error;
139
140 sc = device_get_softc(dev);
141 sc->sc_dev = dev;
142
143 if (octeon_has_feature(OCTEON_FEATURE_PCIE)) {
144 sc->sc_domain = device_get_unit(dev);
145
146 error = cvmx_pcie_rc_initialize(sc->sc_domain);
147 if (error != 0) {
148 device_printf(dev, "Failed to put PCIe bus in host mode.\n");
149 return (ENXIO);
150 }
151
152 /*
153 * In RC mode, the Simple Executive programs the first bus to
154 * be numbered as bus 1, because some IDT bridges used in
155 * Octeon systems object to being attached to bus 0.
156 */
157 sc->sc_bus = 1;
158
159 sc->sc_io_base = CVMX_ADD_IO_SEG(cvmx_pcie_get_io_base_address(sc->sc_domain));
160 sc->sc_io.rm_descr = "Cavium Octeon PCIe I/O Ports";
161
162 sc->sc_mem1_base = CVMX_ADD_IO_SEG(cvmx_pcie_get_mem_base_address(sc->sc_domain));
163 sc->sc_mem1.rm_descr = "Cavium Octeon PCIe Memory";
164 } else {
165 octopci_init_pci(dev);
166
167 sc->sc_domain = 0;
168 sc->sc_bus = 0;
169
170 sc->sc_io_base = CVMX_ADDR_DID(CVMX_FULL_DID(CVMX_OCT_DID_PCI, CVMX_OCT_SUBDID_PCI_IO));
171 sc->sc_io.rm_descr = "Cavium Octeon PCI I/O Ports";
172
173 sc->sc_mem1_base = CVMX_ADDR_DID(CVMX_FULL_DID(CVMX_OCT_DID_PCI, CVMX_OCT_SUBDID_PCI_MEM1));
174 sc->sc_mem1.rm_descr = "Cavium Octeon PCI Memory";
175 }
176
177 sc->sc_io.rm_type = RMAN_ARRAY;
178 error = rman_init(&sc->sc_io);
179 if (error != 0)
180 return (error);
181
182 error = rman_manage_region(&sc->sc_io, CVMX_OCT_PCI_IO_BASE,
183 CVMX_OCT_PCI_IO_BASE + CVMX_OCT_PCI_IO_SIZE);
184 if (error != 0)
185 return (error);
186
187 sc->sc_mem1.rm_type = RMAN_ARRAY;
188 error = rman_init(&sc->sc_mem1);
189 if (error != 0)
190 return (error);

Callers

nothing calls this directly

Calls 14

device_get_softcFunction · 0.85
octeon_has_featureFunction · 0.85
device_get_unitFunction · 0.85
cvmx_pcie_rc_initializeFunction · 0.85
device_printfFunction · 0.85
octopci_init_pciFunction · 0.85
rman_initFunction · 0.85
rman_manage_regionFunction · 0.85
octopci_write_configFunction · 0.85
octopci_init_busFunction · 0.85

Tested by

no test coverage detected