Lines Matching refs:bus
32 int ssb_pci_switch_coreidx(struct ssb_bus *bus, u8 coreidx) in ssb_pci_switch_coreidx() argument
39 err = pci_write_config_dword(bus->host_pci, SSB_BAR0_WIN, in ssb_pci_switch_coreidx()
44 err = pci_read_config_dword(bus->host_pci, SSB_BAR0_WIN, in ssb_pci_switch_coreidx()
63 int ssb_pci_switch_core(struct ssb_bus *bus, in ssb_pci_switch_core() argument
75 spin_lock_irqsave(&bus->bar_lock, flags); in ssb_pci_switch_core()
76 err = ssb_pci_switch_coreidx(bus, dev->core_index); in ssb_pci_switch_core()
78 bus->mapped_device = dev; in ssb_pci_switch_core()
79 spin_unlock_irqrestore(&bus->bar_lock, flags); in ssb_pci_switch_core()
85 int ssb_pci_xtal(struct ssb_bus *bus, u32 what, int turn_on) in ssb_pci_xtal() argument
91 if (bus->bustype != SSB_BUSTYPE_PCI) in ssb_pci_xtal()
94 err = pci_read_config_dword(bus->host_pci, SSB_GPIO_IN, &in); in ssb_pci_xtal()
97 err = pci_read_config_dword(bus->host_pci, SSB_GPIO_OUT, &out); in ssb_pci_xtal()
100 err = pci_read_config_dword(bus->host_pci, SSB_GPIO_OUT_ENABLE, &outenable); in ssb_pci_xtal()
117 err = pci_write_config_dword(bus->host_pci, SSB_GPIO_OUT, out); in ssb_pci_xtal()
120 err = pci_write_config_dword(bus->host_pci, SSB_GPIO_OUT_ENABLE, in ssb_pci_xtal()
129 err = pci_write_config_dword(bus->host_pci, SSB_GPIO_OUT, out); in ssb_pci_xtal()
136 err = pci_read_config_word(bus->host_pci, PCI_STATUS, &pci_status); in ssb_pci_xtal()
140 err = pci_write_config_word(bus->host_pci, PCI_STATUS, pci_status); in ssb_pci_xtal()
152 err = pci_write_config_dword(bus->host_pci, SSB_GPIO_OUT, out); in ssb_pci_xtal()
155 err = pci_write_config_dword(bus->host_pci, SSB_GPIO_OUT_ENABLE, outenable); in ssb_pci_xtal()
272 static int sprom_do_read(struct ssb_bus *bus, u16 *sprom) in sprom_do_read() argument
276 for (i = 0; i < bus->sprom_size; i++) in sprom_do_read()
277 sprom[i] = ioread16(bus->mmio + bus->sprom_offset + (i * 2)); in sprom_do_read()
282 static int sprom_do_write(struct ssb_bus *bus, const u16 *sprom) in sprom_do_write() argument
284 struct pci_dev *pdev = bus->host_pci; in sprom_do_write()
287 u16 size = bus->sprom_size; in sprom_do_write()
308 writew(sprom[i], bus->mmio + bus->sprom_offset + (i * 2)); in sprom_do_write()
813 static int sprom_extract(struct ssb_bus *bus, struct ssb_sprom *out, in sprom_extract() argument
823 if ((bus->chip_id & 0xFF00) == 0x4400) { in sprom_extract()
859 static int ssb_pci_sprom_get(struct ssb_bus *bus, in ssb_pci_sprom_get() argument
865 if (!ssb_is_sprom_available(bus)) { in ssb_pci_sprom_get()
869 if (bus->chipco.dev) { /* can be unavailable! */ in ssb_pci_sprom_get()
875 if (bus->chipco.dev->id.revision >= 31) in ssb_pci_sprom_get()
876 bus->sprom_offset = SSB_SPROM_BASE31; in ssb_pci_sprom_get()
877 else if (bus->chip_id == 0x4312 && in ssb_pci_sprom_get()
878 (bus->chipco.status & 0x03) == 2) in ssb_pci_sprom_get()
879 bus->sprom_offset = SSB_SPROM_BASE31; in ssb_pci_sprom_get()
881 bus->sprom_offset = SSB_SPROM_BASE1; in ssb_pci_sprom_get()
883 bus->sprom_offset = SSB_SPROM_BASE1; in ssb_pci_sprom_get()
885 ssb_dbg("SPROM offset is 0x%x\n", bus->sprom_offset); in ssb_pci_sprom_get()
890 bus->sprom_size = SSB_SPROMSIZE_WORDS_R123; in ssb_pci_sprom_get()
891 sprom_do_read(bus, buf); in ssb_pci_sprom_get()
892 err = sprom_check_crc(buf, bus->sprom_size); in ssb_pci_sprom_get()
900 bus->sprom_size = SSB_SPROMSIZE_WORDS_R4; in ssb_pci_sprom_get()
901 sprom_do_read(bus, buf); in ssb_pci_sprom_get()
902 err = sprom_check_crc(buf, bus->sprom_size); in ssb_pci_sprom_get()
908 err = ssb_fill_sprom_with_fallback(bus, sprom); in ssb_pci_sprom_get()
921 err = sprom_extract(bus, sprom, buf, bus->sprom_size); in ssb_pci_sprom_get()
928 static void ssb_pci_get_boardinfo(struct ssb_bus *bus, in ssb_pci_get_boardinfo() argument
931 bi->vendor = bus->host_pci->subsystem_vendor; in ssb_pci_get_boardinfo()
932 bi->type = bus->host_pci->subsystem_device; in ssb_pci_get_boardinfo()
935 int ssb_pci_get_invariants(struct ssb_bus *bus, in ssb_pci_get_invariants() argument
940 err = ssb_pci_sprom_get(bus, &iv->sprom); in ssb_pci_get_invariants()
943 ssb_pci_get_boardinfo(bus, &iv->boardinfo); in ssb_pci_get_invariants()
950 static int ssb_pci_assert_buspower(struct ssb_bus *bus) in ssb_pci_assert_buspower() argument
952 if (likely(bus->powered_up)) in ssb_pci_assert_buspower()
957 if (bus->power_warn_count <= 10) { in ssb_pci_assert_buspower()
958 bus->power_warn_count++; in ssb_pci_assert_buspower()
965 static inline int ssb_pci_assert_buspower(struct ssb_bus *bus) in ssb_pci_assert_buspower() argument
973 struct ssb_bus *bus = dev->bus; in ssb_pci_read8() local
975 if (unlikely(ssb_pci_assert_buspower(bus))) in ssb_pci_read8()
977 if (unlikely(bus->mapped_device != dev)) { in ssb_pci_read8()
978 if (unlikely(ssb_pci_switch_core(bus, dev))) in ssb_pci_read8()
981 return ioread8(bus->mmio + offset); in ssb_pci_read8()
986 struct ssb_bus *bus = dev->bus; in ssb_pci_read16() local
988 if (unlikely(ssb_pci_assert_buspower(bus))) in ssb_pci_read16()
990 if (unlikely(bus->mapped_device != dev)) { in ssb_pci_read16()
991 if (unlikely(ssb_pci_switch_core(bus, dev))) in ssb_pci_read16()
994 return ioread16(bus->mmio + offset); in ssb_pci_read16()
999 struct ssb_bus *bus = dev->bus; in ssb_pci_read32() local
1001 if (unlikely(ssb_pci_assert_buspower(bus))) in ssb_pci_read32()
1003 if (unlikely(bus->mapped_device != dev)) { in ssb_pci_read32()
1004 if (unlikely(ssb_pci_switch_core(bus, dev))) in ssb_pci_read32()
1007 return ioread32(bus->mmio + offset); in ssb_pci_read32()
1014 struct ssb_bus *bus = dev->bus; in ssb_pci_block_read() local
1015 void __iomem *addr = bus->mmio + offset; in ssb_pci_block_read()
1017 if (unlikely(ssb_pci_assert_buspower(bus))) in ssb_pci_block_read()
1019 if (unlikely(bus->mapped_device != dev)) { in ssb_pci_block_read()
1020 if (unlikely(ssb_pci_switch_core(bus, dev))) in ssb_pci_block_read()
1047 struct ssb_bus *bus = dev->bus; in ssb_pci_write8() local
1049 if (unlikely(ssb_pci_assert_buspower(bus))) in ssb_pci_write8()
1051 if (unlikely(bus->mapped_device != dev)) { in ssb_pci_write8()
1052 if (unlikely(ssb_pci_switch_core(bus, dev))) in ssb_pci_write8()
1055 iowrite8(value, bus->mmio + offset); in ssb_pci_write8()
1060 struct ssb_bus *bus = dev->bus; in ssb_pci_write16() local
1062 if (unlikely(ssb_pci_assert_buspower(bus))) in ssb_pci_write16()
1064 if (unlikely(bus->mapped_device != dev)) { in ssb_pci_write16()
1065 if (unlikely(ssb_pci_switch_core(bus, dev))) in ssb_pci_write16()
1068 iowrite16(value, bus->mmio + offset); in ssb_pci_write16()
1073 struct ssb_bus *bus = dev->bus; in ssb_pci_write32() local
1075 if (unlikely(ssb_pci_assert_buspower(bus))) in ssb_pci_write32()
1077 if (unlikely(bus->mapped_device != dev)) { in ssb_pci_write32()
1078 if (unlikely(ssb_pci_switch_core(bus, dev))) in ssb_pci_write32()
1081 iowrite32(value, bus->mmio + offset); in ssb_pci_write32()
1088 struct ssb_bus *bus = dev->bus; in ssb_pci_block_write() local
1089 void __iomem *addr = bus->mmio + offset; in ssb_pci_block_write()
1091 if (unlikely(ssb_pci_assert_buspower(bus))) in ssb_pci_block_write()
1093 if (unlikely(bus->mapped_device != dev)) { in ssb_pci_block_write()
1094 if (unlikely(ssb_pci_switch_core(bus, dev))) in ssb_pci_block_write()
1134 struct ssb_bus *bus; in ssb_pci_attr_sprom_show() local
1136 bus = ssb_pci_dev_to_bus(pdev); in ssb_pci_attr_sprom_show()
1137 if (!bus) in ssb_pci_attr_sprom_show()
1140 return ssb_attr_sprom_show(bus, buf, sprom_do_read); in ssb_pci_attr_sprom_show()
1148 struct ssb_bus *bus; in ssb_pci_attr_sprom_store() local
1150 bus = ssb_pci_dev_to_bus(pdev); in ssb_pci_attr_sprom_store()
1151 if (!bus) in ssb_pci_attr_sprom_store()
1154 return ssb_attr_sprom_store(bus, buf, count, in ssb_pci_attr_sprom_store()
1162 void ssb_pci_exit(struct ssb_bus *bus) in ssb_pci_exit() argument
1166 if (bus->bustype != SSB_BUSTYPE_PCI) in ssb_pci_exit()
1169 pdev = bus->host_pci; in ssb_pci_exit()
1173 int ssb_pci_init(struct ssb_bus *bus) in ssb_pci_init() argument
1178 if (bus->bustype != SSB_BUSTYPE_PCI) in ssb_pci_init()
1181 pdev = bus->host_pci; in ssb_pci_init()
1182 mutex_init(&bus->sprom_mutex); in ssb_pci_init()