Lines Matching refs:bus

141 static u32 bcma_scan_read32(struct bcma_bus *bus, u8 current_coreidx,  in bcma_scan_read32()  argument
144 return readl(bus->mmio + offset); in bcma_scan_read32()
147 static void bcma_scan_switch_core(struct bcma_bus *bus, u32 addr) in bcma_scan_switch_core() argument
149 if (bus->hosttype == BCMA_HOSTTYPE_PCI) in bcma_scan_switch_core()
150 pci_write_config_dword(bus->host_pci, BCMA_PCI_BAR0_WIN, in bcma_scan_switch_core()
154 static u32 bcma_erom_get_ent(struct bcma_bus *bus, u32 __iomem **eromptr) in bcma_erom_get_ent() argument
166 static s32 bcma_erom_get_ci(struct bcma_bus *bus, u32 __iomem **eromptr) in bcma_erom_get_ci() argument
168 u32 ent = bcma_erom_get_ent(bus, eromptr); in bcma_erom_get_ci()
176 static bool bcma_erom_is_end(struct bcma_bus *bus, u32 __iomem **eromptr) in bcma_erom_is_end() argument
178 u32 ent = bcma_erom_get_ent(bus, eromptr); in bcma_erom_is_end()
183 static bool bcma_erom_is_bridge(struct bcma_bus *bus, u32 __iomem **eromptr) in bcma_erom_is_bridge() argument
185 u32 ent = bcma_erom_get_ent(bus, eromptr); in bcma_erom_is_bridge()
192 static void bcma_erom_skip_component(struct bcma_bus *bus, u32 __iomem **eromptr) in bcma_erom_skip_component() argument
196 ent = bcma_erom_get_ent(bus, eromptr); in bcma_erom_skip_component()
206 static s32 bcma_erom_get_mst_port(struct bcma_bus *bus, u32 __iomem **eromptr) in bcma_erom_get_mst_port() argument
208 u32 ent = bcma_erom_get_ent(bus, eromptr); in bcma_erom_get_mst_port()
216 static u32 bcma_erom_get_addr_desc(struct bcma_bus *bus, u32 __iomem **eromptr, in bcma_erom_get_addr_desc() argument
222 u32 ent = bcma_erom_get_ent(bus, eromptr); in bcma_erom_get_addr_desc()
233 addrh = bcma_erom_get_ent(bus, eromptr); in bcma_erom_get_addr_desc()
238 size = bcma_erom_get_ent(bus, eromptr); in bcma_erom_get_addr_desc()
241 sizeh = bcma_erom_get_ent(bus, eromptr); in bcma_erom_get_addr_desc()
249 static struct bcma_device *bcma_find_core_by_index(struct bcma_bus *bus, in bcma_find_core_by_index() argument
254 list_for_each_entry(core, &bus->cores, list) { in bcma_find_core_by_index()
261 static struct bcma_device *bcma_find_core_reverse(struct bcma_bus *bus, u16 coreid) in bcma_find_core_reverse() argument
265 list_for_each_entry_reverse(core, &bus->cores, list) { in bcma_find_core_reverse()
274 static int bcma_get_next_core(struct bcma_bus *bus, u32 __iomem **eromptr, in bcma_get_next_core() argument
284 cia = bcma_erom_get_ci(bus, eromptr); in bcma_get_next_core()
287 if (bcma_erom_is_end(bus, eromptr)) in bcma_get_next_core()
291 cib = bcma_erom_get_ci(bus, eromptr); in bcma_get_next_core()
308 bcma_erom_skip_component(bus, eromptr); in bcma_get_next_core()
321 bcma_erom_skip_component(bus, eromptr); in bcma_get_next_core()
326 if (bcma_erom_is_bridge(bus, eromptr)) { in bcma_get_next_core()
327 bcma_erom_skip_component(bus, eromptr); in bcma_get_next_core()
331 if (bcma_find_core_by_index(bus, core_num)) { in bcma_get_next_core()
332 bcma_erom_skip_component(bus, eromptr); in bcma_get_next_core()
342 bcma_erom_skip_component(bus, eromptr); in bcma_get_next_core()
348 s32 mst_port_d = bcma_erom_get_mst_port(bus, eromptr); in bcma_get_next_core()
356 tmp = bcma_erom_get_addr_desc(bus, eromptr, SCAN_ADDR_TYPE_SLAVE, 0); in bcma_get_next_core()
359 tmp = bcma_erom_get_addr_desc(bus, eromptr, in bcma_get_next_core()
364 bcma_info(bus, "Bridge found\n"); in bcma_get_next_core()
374 tmp = bcma_erom_get_addr_desc(bus, eromptr, in bcma_get_next_core()
391 tmp = bcma_erom_get_addr_desc(bus, eromptr, in bcma_get_next_core()
409 tmp = bcma_erom_get_addr_desc(bus, eromptr, in bcma_get_next_core()
422 if (bus->hosttype == BCMA_HOSTTYPE_SOC) { in bcma_get_next_core()
438 void bcma_detect_chip(struct bcma_bus *bus) in bcma_detect_chip() argument
441 struct bcma_chipinfo *chipinfo = &(bus->chipinfo); in bcma_detect_chip()
444 bcma_scan_switch_core(bus, BCMA_ADDR_BASE); in bcma_detect_chip()
446 tmp = bcma_scan_read32(bus, 0, BCMA_CC_ID); in bcma_detect_chip()
453 bcma_info(bus, "Found chip with id %s, rev 0x%02X and package 0x%02X\n", in bcma_detect_chip()
457 int bcma_bus_scan(struct bcma_bus *bus) in bcma_bus_scan() argument
465 if (bus->nr_cores) in bcma_bus_scan()
468 erombase = bcma_scan_read32(bus, 0, BCMA_CC_EROM); in bcma_bus_scan()
469 if (bus->hosttype == BCMA_HOSTTYPE_SOC) { in bcma_bus_scan()
474 eromptr = bus->mmio; in bcma_bus_scan()
479 bcma_scan_switch_core(bus, erombase); in bcma_bus_scan()
489 core->bus = bus; in bcma_bus_scan()
491 err = bcma_get_next_core(bus, &eromptr, NULL, core_num, core); in bcma_bus_scan()
506 bus->nr_cores++; in bcma_bus_scan()
507 other_core = bcma_find_core_reverse(bus, core->id.id); in bcma_bus_scan()
509 bcma_prepare_core(bus, core); in bcma_bus_scan()
511 bcma_info(bus, "Core %d found: %s (manuf 0x%03X, id 0x%03X, rev 0x%02X, class 0x%X)\n", in bcma_bus_scan()
516 list_add_tail(&core->list, &bus->cores); in bcma_bus_scan()
521 if (bus->hosttype == BCMA_HOSTTYPE_SOC) in bcma_bus_scan()