3985 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2/*3 * Driver for OHCI 1394 controllers4 *5 * Copyright (C) 2003-2006 Kristian Hoegsberg <krh@bitplanet.net>6 */7 8#include <linux/bitops.h>9#include <linux/bug.h>10#include <linux/compiler.h>11#include <linux/delay.h>12#include <linux/device.h>13#include <linux/dma-mapping.h>14#include <linux/firewire.h>15#include <linux/firewire-constants.h>16#include <linux/init.h>17#include <linux/interrupt.h>18#include <linux/io.h>19#include <linux/kernel.h>20#include <linux/list.h>21#include <linux/mm.h>22#include <linux/module.h>23#include <linux/moduleparam.h>24#include <linux/mutex.h>25#include <linux/pci.h>26#include <linux/pci_ids.h>27#include <linux/slab.h>28#include <linux/spinlock.h>29#include <linux/string.h>30#include <linux/time.h>31#include <linux/vmalloc.h>32#include <linux/workqueue.h>33 34#include <asm/byteorder.h>35#include <asm/page.h>36 37#ifdef CONFIG_PPC_PMAC38#include <asm/pmac_feature.h>39#endif40 41#include "core.h"42#include "ohci.h"43#include "packet-header-definitions.h"44#include "phy-packet-definitions.h"45 46#include <trace/events/firewire.h>47 48static u32 cond_le32_to_cpu(__le32 value, bool has_be_header_quirk);49 50#define CREATE_TRACE_POINTS51#include <trace/events/firewire_ohci.h>52 53#define ohci_notice(ohci, f, args...) dev_notice(ohci->card.device, f, ##args)54#define ohci_err(ohci, f, args...) dev_err(ohci->card.device, f, ##args)55 56#define DESCRIPTOR_OUTPUT_MORE 057#define DESCRIPTOR_OUTPUT_LAST (1 << 12)58#define DESCRIPTOR_INPUT_MORE (2 << 12)59#define DESCRIPTOR_INPUT_LAST (3 << 12)60#define DESCRIPTOR_STATUS (1 << 11)61#define DESCRIPTOR_KEY_IMMEDIATE (2 << 8)62#define DESCRIPTOR_PING (1 << 7)63#define DESCRIPTOR_YY (1 << 6)64#define DESCRIPTOR_NO_IRQ (0 << 4)65#define DESCRIPTOR_IRQ_ERROR (1 << 4)66#define DESCRIPTOR_IRQ_ALWAYS (3 << 4)67#define DESCRIPTOR_BRANCH_ALWAYS (3 << 2)68#define DESCRIPTOR_WAIT (3 << 0)69 70#define DESCRIPTOR_CMD (0xf << 12)71 72struct descriptor {73 __le16 req_count;74 __le16 control;75 __le32 data_address;76 __le32 branch_address;77 __le16 res_count;78 __le16 transfer_status;79} __aligned(16);80 81#define CONTROL_SET(regs) (regs)82#define CONTROL_CLEAR(regs) ((regs) + 4)83#define COMMAND_PTR(regs) ((regs) + 12)84#define CONTEXT_MATCH(regs) ((regs) + 16)85 86#define AR_BUFFER_SIZE (32*1024)87#define AR_BUFFERS_MIN DIV_ROUND_UP(AR_BUFFER_SIZE, PAGE_SIZE)88/* we need at least two pages for proper list management */89#define AR_BUFFERS (AR_BUFFERS_MIN >= 2 ? AR_BUFFERS_MIN : 2)90 91#define MAX_ASYNC_PAYLOAD 409692#define MAX_AR_PACKET_SIZE (16 + MAX_ASYNC_PAYLOAD + 4)93#define AR_WRAPAROUND_PAGES DIV_ROUND_UP(MAX_AR_PACKET_SIZE, PAGE_SIZE)94 95struct ar_context {96 struct fw_ohci *ohci;97 struct page *pages[AR_BUFFERS];98 void *buffer;99 struct descriptor *descriptors;100 dma_addr_t descriptors_bus;101 void *pointer;102 unsigned int last_buffer_index;103 u32 regs;104 struct tasklet_struct tasklet;105};106 107struct context;108 109typedef int (*descriptor_callback_t)(struct context *ctx,110 struct descriptor *d,111 struct descriptor *last);112 113/*114 * A buffer that contains a block of DMA-able coherent memory used for115 * storing a portion of a DMA descriptor program.116 */117struct descriptor_buffer {118 struct list_head list;119 dma_addr_t buffer_bus;120 size_t buffer_size;121 size_t used;122 struct descriptor buffer[];123};124 125struct context {126 struct fw_ohci *ohci;127 u32 regs;128 int total_allocation;129 u32 current_bus;130 bool running;131 bool flushing;132 133 /*134 * List of page-sized buffers for storing DMA descriptors.135 * Head of list contains buffers in use and tail of list contains136 * free buffers.137 */138 struct list_head buffer_list;139 140 /*141 * Pointer to a buffer inside buffer_list that contains the tail142 * end of the current DMA program.143 */144 struct descriptor_buffer *buffer_tail;145 146 /*147 * The descriptor containing the branch address of the first148 * descriptor that has not yet been filled by the device.149 */150 struct descriptor *last;151 152 /*153 * The last descriptor block in the DMA program. It contains the branch154 * address that must be updated upon appending a new descriptor.155 */156 struct descriptor *prev;157 int prev_z;158 159 descriptor_callback_t callback;160 161 struct tasklet_struct tasklet;162};163 164struct iso_context {165 struct fw_iso_context base;166 struct context context;167 void *header;168 size_t header_length;169 unsigned long flushing_completions;170 u32 mc_buffer_bus;171 u16 mc_completed;172 u16 last_timestamp;173 u8 sync;174 u8 tags;175};176 177#define CONFIG_ROM_SIZE (CSR_CONFIG_ROM_END - CSR_CONFIG_ROM)178 179struct fw_ohci {180 struct fw_card card;181 182 __iomem char *registers;183 int node_id;184 int generation;185 int request_generation; /* for timestamping incoming requests */186 unsigned quirks;187 unsigned int pri_req_max;188 u32 bus_time;189 bool bus_time_running;190 bool is_root;191 bool csr_state_setclear_abdicate;192 int n_ir;193 int n_it;194 /*195 * Spinlock for accessing fw_ohci data. Never call out of196 * this driver with this lock held.197 */198 spinlock_t lock;199 200 struct mutex phy_reg_mutex;201 202 void *misc_buffer;203 dma_addr_t misc_buffer_bus;204 205 struct ar_context ar_request_ctx;206 struct ar_context ar_response_ctx;207 struct context at_request_ctx;208 struct context at_response_ctx;209 210 u32 it_context_support;211 u32 it_context_mask; /* unoccupied IT contexts */212 struct iso_context *it_context_list;213 u64 ir_context_channels; /* unoccupied channels */214 u32 ir_context_support;215 u32 ir_context_mask; /* unoccupied IR contexts */216 struct iso_context *ir_context_list;217 u64 mc_channels; /* channels in use by the multichannel IR context */218 bool mc_allocated;219 220 __be32 *config_rom;221 dma_addr_t config_rom_bus;222 __be32 *next_config_rom;223 dma_addr_t next_config_rom_bus;224 __be32 next_header;225 226 __le32 *self_id;227 dma_addr_t self_id_bus;228 struct work_struct bus_reset_work;229 230 u32 self_id_buffer[512];231};232 233static struct workqueue_struct *selfid_workqueue;234 235static inline struct fw_ohci *fw_ohci(struct fw_card *card)236{237 return container_of(card, struct fw_ohci, card);238}239 240#define IT_CONTEXT_CYCLE_MATCH_ENABLE 0x80000000241#define IR_CONTEXT_BUFFER_FILL 0x80000000242#define IR_CONTEXT_ISOCH_HEADER 0x40000000243#define IR_CONTEXT_CYCLE_MATCH_ENABLE 0x20000000244#define IR_CONTEXT_MULTI_CHANNEL_MODE 0x10000000245#define IR_CONTEXT_DUAL_BUFFER_MODE 0x08000000246 247#define CONTEXT_RUN 0x8000248#define CONTEXT_WAKE 0x1000249#define CONTEXT_DEAD 0x0800250#define CONTEXT_ACTIVE 0x0400251 252#define OHCI1394_MAX_AT_REQ_RETRIES 0xf253#define OHCI1394_MAX_AT_RESP_RETRIES 0x2254#define OHCI1394_MAX_PHYS_RESP_RETRIES 0x8255 256#define OHCI1394_REGISTER_SIZE 0x800257#define OHCI1394_PCI_HCI_Control 0x40258#define SELF_ID_BUF_SIZE 0x800259#define OHCI_VERSION_1_1 0x010010260 261static char ohci_driver_name[] = KBUILD_MODNAME;262 263#define PCI_VENDOR_ID_PINNACLE_SYSTEMS 0x11bd264#define PCI_DEVICE_ID_AGERE_FW643 0x5901265#define PCI_DEVICE_ID_CREATIVE_SB1394 0x4001266#define PCI_DEVICE_ID_JMICRON_JMB38X_FW 0x2380267#define PCI_DEVICE_ID_TI_TSB12LV22 0x8009268#define PCI_DEVICE_ID_TI_TSB12LV26 0x8020269#define PCI_DEVICE_ID_TI_TSB82AA2 0x8025270#define PCI_DEVICE_ID_VIA_VT630X 0x3044271#define PCI_REV_ID_VIA_VT6306 0x46272#define PCI_DEVICE_ID_VIA_VT6315 0x3403273 274#define QUIRK_CYCLE_TIMER 0x1275#define QUIRK_RESET_PACKET 0x2276#define QUIRK_BE_HEADERS 0x4277#define QUIRK_NO_1394A 0x8278#define QUIRK_NO_MSI 0x10279#define QUIRK_TI_SLLZ059 0x20280#define QUIRK_IR_WAKE 0x40281 282// On PCI Express Root Complex in any type of AMD Ryzen machine, VIA VT6306/6307/6308 with Asmedia283// ASM1083/1085 brings an inconvenience that the read accesses to 'Isochronous Cycle Timer' register284// (at offset 0xf0 in PCI I/O space) often causes unexpected system reboot. The mechanism is not285// clear, since the read access to the other registers is enough safe; e.g. 'Node ID' register,286// while it is probable due to detection of any type of PCIe error.287#define QUIRK_REBOOT_BY_CYCLE_TIMER_READ 0x80000000288 289#if IS_ENABLED(CONFIG_X86)290 291static bool has_reboot_by_cycle_timer_read_quirk(const struct fw_ohci *ohci)292{293 return !!(ohci->quirks & QUIRK_REBOOT_BY_CYCLE_TIMER_READ);294}295 296#define PCI_DEVICE_ID_ASMEDIA_ASM108X 0x1080297 298static bool detect_vt630x_with_asm1083_on_amd_ryzen_machine(const struct pci_dev *pdev)299{300 const struct pci_dev *pcie_to_pci_bridge;301 302 // Detect any type of AMD Ryzen machine.303 if (!static_cpu_has(X86_FEATURE_ZEN))304 return false;305 306 // Detect VIA VT6306/6307/6308.307 if (pdev->vendor != PCI_VENDOR_ID_VIA)308 return false;309 if (pdev->device != PCI_DEVICE_ID_VIA_VT630X)310 return false;311 312 // Detect Asmedia ASM1083/1085.313 pcie_to_pci_bridge = pdev->bus->self;314 if (pcie_to_pci_bridge->vendor != PCI_VENDOR_ID_ASMEDIA)315 return false;316 if (pcie_to_pci_bridge->device != PCI_DEVICE_ID_ASMEDIA_ASM108X)317 return false;318 319 return true;320}321 322#else323#define has_reboot_by_cycle_timer_read_quirk(ohci) false324#define detect_vt630x_with_asm1083_on_amd_ryzen_machine(pdev) false325#endif326 327/* In case of multiple matches in ohci_quirks[], only the first one is used. */328static const struct {329 unsigned short vendor, device, revision, flags;330} ohci_quirks[] = {331 {PCI_VENDOR_ID_AL, PCI_ANY_ID, PCI_ANY_ID,332 QUIRK_CYCLE_TIMER},333 334 {PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_FW, PCI_ANY_ID,335 QUIRK_BE_HEADERS},336 337 {PCI_VENDOR_ID_ATT, PCI_DEVICE_ID_AGERE_FW643, 6,338 QUIRK_NO_MSI},339 340 {PCI_VENDOR_ID_CREATIVE, PCI_DEVICE_ID_CREATIVE_SB1394, PCI_ANY_ID,341 QUIRK_RESET_PACKET},342 343 {PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB38X_FW, PCI_ANY_ID,344 QUIRK_NO_MSI},345 346 {PCI_VENDOR_ID_NEC, PCI_ANY_ID, PCI_ANY_ID,347 QUIRK_CYCLE_TIMER},348 349 {PCI_VENDOR_ID_O2, PCI_ANY_ID, PCI_ANY_ID,350 QUIRK_NO_MSI},351 352 {PCI_VENDOR_ID_RICOH, PCI_ANY_ID, PCI_ANY_ID,353 QUIRK_CYCLE_TIMER | QUIRK_NO_MSI},354 355 {PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_TSB12LV22, PCI_ANY_ID,356 QUIRK_CYCLE_TIMER | QUIRK_RESET_PACKET | QUIRK_NO_1394A},357 358 {PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_TSB12LV26, PCI_ANY_ID,359 QUIRK_RESET_PACKET | QUIRK_TI_SLLZ059},360 361 {PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_TSB82AA2, PCI_ANY_ID,362 QUIRK_RESET_PACKET | QUIRK_TI_SLLZ059},363 364 {PCI_VENDOR_ID_TI, PCI_ANY_ID, PCI_ANY_ID,365 QUIRK_RESET_PACKET},366 367 {PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT630X, PCI_REV_ID_VIA_VT6306,368 QUIRK_CYCLE_TIMER | QUIRK_IR_WAKE},369 370 {PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT6315, 0,371 QUIRK_CYCLE_TIMER /* FIXME: necessary? */ | QUIRK_NO_MSI},372 373 {PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT6315, PCI_ANY_ID,374 QUIRK_NO_MSI},375 376 {PCI_VENDOR_ID_VIA, PCI_ANY_ID, PCI_ANY_ID,377 QUIRK_CYCLE_TIMER | QUIRK_NO_MSI},378};379 380/* This overrides anything that was found in ohci_quirks[]. */381static int param_quirks;382module_param_named(quirks, param_quirks, int, 0644);383MODULE_PARM_DESC(quirks, "Chip quirks (default = 0"384 ", nonatomic cycle timer = " __stringify(QUIRK_CYCLE_TIMER)385 ", reset packet generation = " __stringify(QUIRK_RESET_PACKET)386 ", AR/selfID endianness = " __stringify(QUIRK_BE_HEADERS)387 ", no 1394a enhancements = " __stringify(QUIRK_NO_1394A)388 ", disable MSI = " __stringify(QUIRK_NO_MSI)389 ", TI SLLZ059 erratum = " __stringify(QUIRK_TI_SLLZ059)390 ", IR wake unreliable = " __stringify(QUIRK_IR_WAKE)391 ")");392 393#define OHCI_PARAM_DEBUG_AT_AR 1394#define OHCI_PARAM_DEBUG_SELFIDS 2395#define OHCI_PARAM_DEBUG_IRQS 4396 397static int param_debug;398module_param_named(debug, param_debug, int, 0644);399MODULE_PARM_DESC(debug, "Verbose logging, deprecated in v6.11 kernel or later. (default = 0"400 ", AT/AR events = " __stringify(OHCI_PARAM_DEBUG_AT_AR)401 ", self-IDs = " __stringify(OHCI_PARAM_DEBUG_SELFIDS)402 ", IRQs = " __stringify(OHCI_PARAM_DEBUG_IRQS)403 ", or a combination, or all = -1)");404 405static bool param_remote_dma;406module_param_named(remote_dma, param_remote_dma, bool, 0444);407MODULE_PARM_DESC(remote_dma, "Enable unfiltered remote DMA (default = N)");408 409static void log_irqs(struct fw_ohci *ohci, u32 evt)410{411 if (likely(!(param_debug & OHCI_PARAM_DEBUG_IRQS)))412 return;413 414 ohci_notice(ohci, "IRQ %08x%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s\n", evt,415 evt & OHCI1394_selfIDComplete ? " selfID" : "",416 evt & OHCI1394_RQPkt ? " AR_req" : "",417 evt & OHCI1394_RSPkt ? " AR_resp" : "",418 evt & OHCI1394_reqTxComplete ? " AT_req" : "",419 evt & OHCI1394_respTxComplete ? " AT_resp" : "",420 evt & OHCI1394_isochRx ? " IR" : "",421 evt & OHCI1394_isochTx ? " IT" : "",422 evt & OHCI1394_postedWriteErr ? " postedWriteErr" : "",423 evt & OHCI1394_cycleTooLong ? " cycleTooLong" : "",424 evt & OHCI1394_cycle64Seconds ? " cycle64Seconds" : "",425 evt & OHCI1394_cycleInconsistent ? " cycleInconsistent" : "",426 evt & OHCI1394_regAccessFail ? " regAccessFail" : "",427 evt & OHCI1394_unrecoverableError ? " unrecoverableError" : "",428 evt & OHCI1394_busReset ? " busReset" : "",429 evt & ~(OHCI1394_selfIDComplete | OHCI1394_RQPkt |430 OHCI1394_RSPkt | OHCI1394_reqTxComplete |431 OHCI1394_respTxComplete | OHCI1394_isochRx |432 OHCI1394_isochTx | OHCI1394_postedWriteErr |433 OHCI1394_cycleTooLong | OHCI1394_cycle64Seconds |434 OHCI1394_cycleInconsistent |435 OHCI1394_regAccessFail | OHCI1394_busReset)436 ? " ?" : "");437}438 439static void log_selfids(struct fw_ohci *ohci, int generation, int self_id_count)440{441 static const char *const speed[] = {442 [0] = "S100", [1] = "S200", [2] = "S400", [3] = "beta",443 };444 static const char *const power[] = {445 [0] = "+0W", [1] = "+15W", [2] = "+30W", [3] = "+45W",446 [4] = "-3W", [5] = " ?W", [6] = "-3..-6W", [7] = "-3..-10W",447 };448 static const char port[] = {449 [PHY_PACKET_SELF_ID_PORT_STATUS_NONE] = '.',450 [PHY_PACKET_SELF_ID_PORT_STATUS_NCONN] = '-',451 [PHY_PACKET_SELF_ID_PORT_STATUS_PARENT] = 'p',452 [PHY_PACKET_SELF_ID_PORT_STATUS_CHILD] = 'c',453 };454 struct self_id_sequence_enumerator enumerator = {455 .cursor = ohci->self_id_buffer,456 .quadlet_count = self_id_count,457 };458 459 if (likely(!(param_debug & OHCI_PARAM_DEBUG_SELFIDS)))460 return;461 462 ohci_notice(ohci, "%d selfIDs, generation %d, local node ID %04x\n",463 self_id_count, generation, ohci->node_id);464 465 while (enumerator.quadlet_count > 0) {466 unsigned int quadlet_count;467 unsigned int port_index;468 const u32 *s;469 int i;470 471 s = self_id_sequence_enumerator_next(&enumerator, &quadlet_count);472 if (IS_ERR(s))473 break;474 475 ohci_notice(ohci,476 "selfID 0: %08x, phy %d [%c%c%c] %s gc=%d %s %s%s%s\n",477 *s,478 phy_packet_self_id_get_phy_id(*s),479 port[self_id_sequence_get_port_status(s, quadlet_count, 0)],480 port[self_id_sequence_get_port_status(s, quadlet_count, 1)],481 port[self_id_sequence_get_port_status(s, quadlet_count, 2)],482 speed[*s >> 14 & 3], *s >> 16 & 63,483 power[*s >> 8 & 7], *s >> 22 & 1 ? "L" : "",484 *s >> 11 & 1 ? "c" : "", *s & 2 ? "i" : "");485 486 port_index = 3;487 for (i = 1; i < quadlet_count; ++i) {488 ohci_notice(ohci,489 "selfID n: %08x, phy %d [%c%c%c%c%c%c%c%c]\n",490 s[i],491 phy_packet_self_id_get_phy_id(s[i]),492 port[self_id_sequence_get_port_status(s, quadlet_count, port_index)],493 port[self_id_sequence_get_port_status(s, quadlet_count, port_index + 1)],494 port[self_id_sequence_get_port_status(s, quadlet_count, port_index + 2)],495 port[self_id_sequence_get_port_status(s, quadlet_count, port_index + 3)],496 port[self_id_sequence_get_port_status(s, quadlet_count, port_index + 4)],497 port[self_id_sequence_get_port_status(s, quadlet_count, port_index + 5)],498 port[self_id_sequence_get_port_status(s, quadlet_count, port_index + 6)],499 port[self_id_sequence_get_port_status(s, quadlet_count, port_index + 7)]500 );501 502 port_index += 8;503 }504 }505}506 507static const char *evts[] = {508 [0x00] = "evt_no_status", [0x01] = "-reserved-",509 [0x02] = "evt_long_packet", [0x03] = "evt_missing_ack",510 [0x04] = "evt_underrun", [0x05] = "evt_overrun",511 [0x06] = "evt_descriptor_read", [0x07] = "evt_data_read",512 [0x08] = "evt_data_write", [0x09] = "evt_bus_reset",513 [0x0a] = "evt_timeout", [0x0b] = "evt_tcode_err",514 [0x0c] = "-reserved-", [0x0d] = "-reserved-",515 [0x0e] = "evt_unknown", [0x0f] = "evt_flushed",516 [0x10] = "-reserved-", [0x11] = "ack_complete",517 [0x12] = "ack_pending ", [0x13] = "-reserved-",518 [0x14] = "ack_busy_X", [0x15] = "ack_busy_A",519 [0x16] = "ack_busy_B", [0x17] = "-reserved-",520 [0x18] = "-reserved-", [0x19] = "-reserved-",521 [0x1a] = "-reserved-", [0x1b] = "ack_tardy",522 [0x1c] = "-reserved-", [0x1d] = "ack_data_error",523 [0x1e] = "ack_type_error", [0x1f] = "-reserved-",524 [0x20] = "pending/cancelled",525};526 527static void log_ar_at_event(struct fw_ohci *ohci,528 char dir, int speed, u32 *header, int evt)529{530 static const char *const tcodes[] = {531 [TCODE_WRITE_QUADLET_REQUEST] = "QW req",532 [TCODE_WRITE_BLOCK_REQUEST] = "BW req",533 [TCODE_WRITE_RESPONSE] = "W resp",534 [0x3] = "-reserved-",535 [TCODE_READ_QUADLET_REQUEST] = "QR req",536 [TCODE_READ_BLOCK_REQUEST] = "BR req",537 [TCODE_READ_QUADLET_RESPONSE] = "QR resp",538 [TCODE_READ_BLOCK_RESPONSE] = "BR resp",539 [TCODE_CYCLE_START] = "cycle start",540 [TCODE_LOCK_REQUEST] = "Lk req",541 [TCODE_STREAM_DATA] = "async stream packet",542 [TCODE_LOCK_RESPONSE] = "Lk resp",543 [0xc] = "-reserved-",544 [0xd] = "-reserved-",545 [TCODE_LINK_INTERNAL] = "link internal",546 [0xf] = "-reserved-",547 };548 int tcode = async_header_get_tcode(header);549 char specific[12];550 551 if (likely(!(param_debug & OHCI_PARAM_DEBUG_AT_AR)))552 return;553 554 if (unlikely(evt >= ARRAY_SIZE(evts)))555 evt = 0x1f;556 557 if (evt == OHCI1394_evt_bus_reset) {558 ohci_notice(ohci, "A%c evt_bus_reset, generation %d\n",559 dir, (header[2] >> 16) & 0xff);560 return;561 }562 563 switch (tcode) {564 case TCODE_WRITE_QUADLET_REQUEST:565 case TCODE_READ_QUADLET_RESPONSE:566 case TCODE_CYCLE_START:567 snprintf(specific, sizeof(specific), " = %08x",568 be32_to_cpu((__force __be32)header[3]));569 break;570 case TCODE_WRITE_BLOCK_REQUEST:571 case TCODE_READ_BLOCK_REQUEST:572 case TCODE_READ_BLOCK_RESPONSE:573 case TCODE_LOCK_REQUEST:574 case TCODE_LOCK_RESPONSE:575 snprintf(specific, sizeof(specific), " %x,%x",576 async_header_get_data_length(header),577 async_header_get_extended_tcode(header));578 break;579 default:580 specific[0] = '\0';581 }582 583 switch (tcode) {584 case TCODE_STREAM_DATA:585 ohci_notice(ohci, "A%c %s, %s\n",586 dir, evts[evt], tcodes[tcode]);587 break;588 case TCODE_LINK_INTERNAL:589 ohci_notice(ohci, "A%c %s, PHY %08x %08x\n",590 dir, evts[evt], header[1], header[2]);591 break;592 case TCODE_WRITE_QUADLET_REQUEST:593 case TCODE_WRITE_BLOCK_REQUEST:594 case TCODE_READ_QUADLET_REQUEST:595 case TCODE_READ_BLOCK_REQUEST:596 case TCODE_LOCK_REQUEST:597 ohci_notice(ohci,598 "A%c spd %x tl %02x, %04x -> %04x, %s, %s, %012llx%s\n",599 dir, speed, async_header_get_tlabel(header),600 async_header_get_source(header), async_header_get_destination(header),601 evts[evt], tcodes[tcode], async_header_get_offset(header), specific);602 break;603 default:604 ohci_notice(ohci,605 "A%c spd %x tl %02x, %04x -> %04x, %s, %s%s\n",606 dir, speed, async_header_get_tlabel(header),607 async_header_get_source(header), async_header_get_destination(header),608 evts[evt], tcodes[tcode], specific);609 }610}611 612static inline void reg_write(const struct fw_ohci *ohci, int offset, u32 data)613{614 writel(data, ohci->registers + offset);615}616 617static inline u32 reg_read(const struct fw_ohci *ohci, int offset)618{619 return readl(ohci->registers + offset);620}621 622static inline void flush_writes(const struct fw_ohci *ohci)623{624 /* Do a dummy read to flush writes. */625 reg_read(ohci, OHCI1394_Version);626}627 628/*629 * Beware! read_phy_reg(), write_phy_reg(), update_phy_reg(), and630 * read_paged_phy_reg() require the caller to hold ohci->phy_reg_mutex.631 * In other words, only use ohci_read_phy_reg() and ohci_update_phy_reg()632 * directly. Exceptions are intrinsically serialized contexts like pci_probe.633 */634static int read_phy_reg(struct fw_ohci *ohci, int addr)635{636 u32 val;637 int i;638 639 reg_write(ohci, OHCI1394_PhyControl, OHCI1394_PhyControl_Read(addr));640 for (i = 0; i < 3 + 100; i++) {641 val = reg_read(ohci, OHCI1394_PhyControl);642 if (!~val)643 return -ENODEV; /* Card was ejected. */644 645 if (val & OHCI1394_PhyControl_ReadDone)646 return OHCI1394_PhyControl_ReadData(val);647 648 /*649 * Try a few times without waiting. Sleeping is necessary650 * only when the link/PHY interface is busy.651 */652 if (i >= 3)653 msleep(1);654 }655 ohci_err(ohci, "failed to read phy reg %d\n", addr);656 dump_stack();657 658 return -EBUSY;659}660 661static int write_phy_reg(const struct fw_ohci *ohci, int addr, u32 val)662{663 int i;664 665 reg_write(ohci, OHCI1394_PhyControl,666 OHCI1394_PhyControl_Write(addr, val));667 for (i = 0; i < 3 + 100; i++) {668 val = reg_read(ohci, OHCI1394_PhyControl);669 if (!~val)670 return -ENODEV; /* Card was ejected. */671 672 if (!(val & OHCI1394_PhyControl_WritePending))673 return 0;674 675 if (i >= 3)676 msleep(1);677 }678 ohci_err(ohci, "failed to write phy reg %d, val %u\n", addr, val);679 dump_stack();680 681 return -EBUSY;682}683 684static int update_phy_reg(struct fw_ohci *ohci, int addr,685 int clear_bits, int set_bits)686{687 int ret = read_phy_reg(ohci, addr);688 if (ret < 0)689 return ret;690 691 /*692 * The interrupt status bits are cleared by writing a one bit.693 * Avoid clearing them unless explicitly requested in set_bits.694 */695 if (addr == 5)696 clear_bits |= PHY_INT_STATUS_BITS;697 698 return write_phy_reg(ohci, addr, (ret & ~clear_bits) | set_bits);699}700 701static int read_paged_phy_reg(struct fw_ohci *ohci, int page, int addr)702{703 int ret;704 705 ret = update_phy_reg(ohci, 7, PHY_PAGE_SELECT, page << 5);706 if (ret < 0)707 return ret;708 709 return read_phy_reg(ohci, addr);710}711 712static int ohci_read_phy_reg(struct fw_card *card, int addr)713{714 struct fw_ohci *ohci = fw_ohci(card);715 716 guard(mutex)(&ohci->phy_reg_mutex);717 718 return read_phy_reg(ohci, addr);719}720 721static int ohci_update_phy_reg(struct fw_card *card, int addr,722 int clear_bits, int set_bits)723{724 struct fw_ohci *ohci = fw_ohci(card);725 726 guard(mutex)(&ohci->phy_reg_mutex);727 728 return update_phy_reg(ohci, addr, clear_bits, set_bits);729}730 731static inline dma_addr_t ar_buffer_bus(struct ar_context *ctx, unsigned int i)732{733 return page_private(ctx->pages[i]);734}735 736static void ar_context_link_page(struct ar_context *ctx, unsigned int index)737{738 struct descriptor *d;739 740 d = &ctx->descriptors[index];741 d->branch_address &= cpu_to_le32(~0xf);742 d->res_count = cpu_to_le16(PAGE_SIZE);743 d->transfer_status = 0;744 745 wmb(); /* finish init of new descriptors before branch_address update */746 d = &ctx->descriptors[ctx->last_buffer_index];747 d->branch_address |= cpu_to_le32(1);748 749 ctx->last_buffer_index = index;750 751 reg_write(ctx->ohci, CONTROL_SET(ctx->regs), CONTEXT_WAKE);752}753 754static void ar_context_release(struct ar_context *ctx)755{756 struct device *dev = ctx->ohci->card.device;757 unsigned int i;758 759 if (!ctx->buffer)760 return;761 762 vunmap(ctx->buffer);763 764 for (i = 0; i < AR_BUFFERS; i++) {765 if (ctx->pages[i])766 dma_free_pages(dev, PAGE_SIZE, ctx->pages[i],767 ar_buffer_bus(ctx, i), DMA_FROM_DEVICE);768 }769}770 771static void ar_context_abort(struct ar_context *ctx, const char *error_msg)772{773 struct fw_ohci *ohci = ctx->ohci;774 775 if (reg_read(ohci, CONTROL_CLEAR(ctx->regs)) & CONTEXT_RUN) {776 reg_write(ohci, CONTROL_CLEAR(ctx->regs), CONTEXT_RUN);777 flush_writes(ohci);778 779 ohci_err(ohci, "AR error: %s; DMA stopped\n", error_msg);780 }781 /* FIXME: restart? */782}783 784static inline unsigned int ar_next_buffer_index(unsigned int index)785{786 return (index + 1) % AR_BUFFERS;787}788 789static inline unsigned int ar_first_buffer_index(struct ar_context *ctx)790{791 return ar_next_buffer_index(ctx->last_buffer_index);792}793 794/*795 * We search for the buffer that contains the last AR packet DMA data written796 * by the controller.797 */798static unsigned int ar_search_last_active_buffer(struct ar_context *ctx,799 unsigned int *buffer_offset)800{801 unsigned int i, next_i, last = ctx->last_buffer_index;802 __le16 res_count, next_res_count;803 804 i = ar_first_buffer_index(ctx);805 res_count = READ_ONCE(ctx->descriptors[i].res_count);806 807 /* A buffer that is not yet completely filled must be the last one. */808 while (i != last && res_count == 0) {809 810 /* Peek at the next descriptor. */811 next_i = ar_next_buffer_index(i);812 rmb(); /* read descriptors in order */813 next_res_count = READ_ONCE(ctx->descriptors[next_i].res_count);814 /*815 * If the next descriptor is still empty, we must stop at this816 * descriptor.817 */818 if (next_res_count == cpu_to_le16(PAGE_SIZE)) {819 /*820 * The exception is when the DMA data for one packet is821 * split over three buffers; in this case, the middle822 * buffer's descriptor might be never updated by the823 * controller and look still empty, and we have to peek824 * at the third one.825 */826 if (MAX_AR_PACKET_SIZE > PAGE_SIZE && i != last) {827 next_i = ar_next_buffer_index(next_i);828 rmb();829 next_res_count = READ_ONCE(ctx->descriptors[next_i].res_count);830 if (next_res_count != cpu_to_le16(PAGE_SIZE))831 goto next_buffer_is_active;832 }833 834 break;835 }836 837next_buffer_is_active:838 i = next_i;839 res_count = next_res_count;840 }841 842 rmb(); /* read res_count before the DMA data */843 844 *buffer_offset = PAGE_SIZE - le16_to_cpu(res_count);845 if (*buffer_offset > PAGE_SIZE) {846 *buffer_offset = 0;847 ar_context_abort(ctx, "corrupted descriptor");848 }849 850 return i;851}852 853static void ar_sync_buffers_for_cpu(struct ar_context *ctx,854 unsigned int end_buffer_index,855 unsigned int end_buffer_offset)856{857 unsigned int i;858 859 i = ar_first_buffer_index(ctx);860 while (i != end_buffer_index) {861 dma_sync_single_for_cpu(ctx->ohci->card.device,862 ar_buffer_bus(ctx, i),863 PAGE_SIZE, DMA_FROM_DEVICE);864 i = ar_next_buffer_index(i);865 }866 if (end_buffer_offset > 0)867 dma_sync_single_for_cpu(ctx->ohci->card.device,868 ar_buffer_bus(ctx, i),869 end_buffer_offset, DMA_FROM_DEVICE);870}871 872#if defined(CONFIG_PPC_PMAC) && defined(CONFIG_PPC32)873static u32 cond_le32_to_cpu(__le32 value, bool has_be_header_quirk)874{875 return has_be_header_quirk ? (__force __u32)value : le32_to_cpu(value);876}877 878static bool has_be_header_quirk(const struct fw_ohci *ohci)879{880 return !!(ohci->quirks & QUIRK_BE_HEADERS);881}882#else883static u32 cond_le32_to_cpu(__le32 value, bool has_be_header_quirk __maybe_unused)884{885 return le32_to_cpu(value);886}887 888static bool has_be_header_quirk(const struct fw_ohci *ohci)889{890 return false;891}892#endif893 894static __le32 *handle_ar_packet(struct ar_context *ctx, __le32 *buffer)895{896 struct fw_ohci *ohci = ctx->ohci;897 struct fw_packet p;898 u32 status, length, tcode;899 int evt;900 901 p.header[0] = cond_le32_to_cpu(buffer[0], has_be_header_quirk(ohci));902 p.header[1] = cond_le32_to_cpu(buffer[1], has_be_header_quirk(ohci));903 p.header[2] = cond_le32_to_cpu(buffer[2], has_be_header_quirk(ohci));904 905 tcode = async_header_get_tcode(p.header);906 switch (tcode) {907 case TCODE_WRITE_QUADLET_REQUEST:908 case TCODE_READ_QUADLET_RESPONSE:909 p.header[3] = (__force __u32) buffer[3];910 p.header_length = 16;911 p.payload_length = 0;912 break;913 914 case TCODE_READ_BLOCK_REQUEST :915 p.header[3] = cond_le32_to_cpu(buffer[3], has_be_header_quirk(ohci));916 p.header_length = 16;917 p.payload_length = 0;918 break;919 920 case TCODE_WRITE_BLOCK_REQUEST:921 case TCODE_READ_BLOCK_RESPONSE:922 case TCODE_LOCK_REQUEST:923 case TCODE_LOCK_RESPONSE:924 p.header[3] = cond_le32_to_cpu(buffer[3], has_be_header_quirk(ohci));925 p.header_length = 16;926 p.payload_length = async_header_get_data_length(p.header);927 if (p.payload_length > MAX_ASYNC_PAYLOAD) {928 ar_context_abort(ctx, "invalid packet length");929 return NULL;930 }931 break;932 933 case TCODE_WRITE_RESPONSE:934 case TCODE_READ_QUADLET_REQUEST:935 case TCODE_LINK_INTERNAL:936 p.header_length = 12;937 p.payload_length = 0;938 break;939 940 default:941 ar_context_abort(ctx, "invalid tcode");942 return NULL;943 }944 945 p.payload = (void *) buffer + p.header_length;946 947 /* FIXME: What to do about evt_* errors? */948 length = (p.header_length + p.payload_length + 3) / 4;949 status = cond_le32_to_cpu(buffer[length], has_be_header_quirk(ohci));950 evt = (status >> 16) & 0x1f;951 952 p.ack = evt - 16;953 p.speed = (status >> 21) & 0x7;954 p.timestamp = status & 0xffff;955 p.generation = ohci->request_generation;956 957 log_ar_at_event(ohci, 'R', p.speed, p.header, evt);958 959 /*960 * Several controllers, notably from NEC and VIA, forget to961 * write ack_complete status at PHY packet reception.962 */963 if (evt == OHCI1394_evt_no_status && tcode == TCODE_LINK_INTERNAL)964 p.ack = ACK_COMPLETE;965 966 /*967 * The OHCI bus reset handler synthesizes a PHY packet with968 * the new generation number when a bus reset happens (see969 * section 8.4.2.3). This helps us determine when a request970 * was received and make sure we send the response in the same971 * generation. We only need this for requests; for responses972 * we use the unique tlabel for finding the matching973 * request.974 *975 * Alas some chips sometimes emit bus reset packets with a976 * wrong generation. We set the correct generation for these977 * at a slightly incorrect time (in bus_reset_work).978 */979 if (evt == OHCI1394_evt_bus_reset) {980 if (!(ohci->quirks & QUIRK_RESET_PACKET))981 ohci->request_generation = (p.header[2] >> 16) & 0xff;982 } else if (ctx == &ohci->ar_request_ctx) {983 fw_core_handle_request(&ohci->card, &p);984 } else {985 fw_core_handle_response(&ohci->card, &p);986 }987 988 return buffer + length + 1;989}990 991static void *handle_ar_packets(struct ar_context *ctx, void *p, void *end)992{993 void *next;994 995 while (p < end) {996 next = handle_ar_packet(ctx, p);997 if (!next)998 return p;999 p = next;1000 }1001 1002 return p;1003}1004 1005static void ar_recycle_buffers(struct ar_context *ctx, unsigned int end_buffer)1006{1007 unsigned int i;1008 1009 i = ar_first_buffer_index(ctx);1010 while (i != end_buffer) {1011 dma_sync_single_for_device(ctx->ohci->card.device,1012 ar_buffer_bus(ctx, i),1013 PAGE_SIZE, DMA_FROM_DEVICE);1014 ar_context_link_page(ctx, i);1015 i = ar_next_buffer_index(i);1016 }1017}1018 1019static void ar_context_tasklet(unsigned long data)1020{1021 struct ar_context *ctx = (struct ar_context *)data;1022 unsigned int end_buffer_index, end_buffer_offset;1023 void *p, *end;1024 1025 p = ctx->pointer;1026 if (!p)1027 return;1028 1029 end_buffer_index = ar_search_last_active_buffer(ctx,1030 &end_buffer_offset);1031 ar_sync_buffers_for_cpu(ctx, end_buffer_index, end_buffer_offset);1032 end = ctx->buffer + end_buffer_index * PAGE_SIZE + end_buffer_offset;1033 1034 if (end_buffer_index < ar_first_buffer_index(ctx)) {1035 /*1036 * The filled part of the overall buffer wraps around; handle1037 * all packets up to the buffer end here. If the last packet1038 * wraps around, its tail will be visible after the buffer end1039 * because the buffer start pages are mapped there again.1040 */1041 void *buffer_end = ctx->buffer + AR_BUFFERS * PAGE_SIZE;1042 p = handle_ar_packets(ctx, p, buffer_end);1043 if (p < buffer_end)1044 goto error;1045 /* adjust p to point back into the actual buffer */1046 p -= AR_BUFFERS * PAGE_SIZE;1047 }1048 1049 p = handle_ar_packets(ctx, p, end);1050 if (p != end) {1051 if (p > end)1052 ar_context_abort(ctx, "inconsistent descriptor");1053 goto error;1054 }1055 1056 ctx->pointer = p;1057 ar_recycle_buffers(ctx, end_buffer_index);1058 1059 return;1060 1061error:1062 ctx->pointer = NULL;1063}1064 1065static int ar_context_init(struct ar_context *ctx, struct fw_ohci *ohci,1066 unsigned int descriptors_offset, u32 regs)1067{1068 struct device *dev = ohci->card.device;1069 unsigned int i;1070 dma_addr_t dma_addr;1071 struct page *pages[AR_BUFFERS + AR_WRAPAROUND_PAGES];1072 struct descriptor *d;1073 1074 ctx->regs = regs;1075 ctx->ohci = ohci;1076 tasklet_init(&ctx->tasklet, ar_context_tasklet, (unsigned long)ctx);1077 1078 for (i = 0; i < AR_BUFFERS; i++) {1079 ctx->pages[i] = dma_alloc_pages(dev, PAGE_SIZE, &dma_addr,1080 DMA_FROM_DEVICE, GFP_KERNEL);1081 if (!ctx->pages[i])1082 goto out_of_memory;1083 set_page_private(ctx->pages[i], dma_addr);1084 dma_sync_single_for_device(dev, dma_addr, PAGE_SIZE,1085 DMA_FROM_DEVICE);1086 }1087 1088 for (i = 0; i < AR_BUFFERS; i++)1089 pages[i] = ctx->pages[i];1090 for (i = 0; i < AR_WRAPAROUND_PAGES; i++)1091 pages[AR_BUFFERS + i] = ctx->pages[i];1092 ctx->buffer = vmap(pages, ARRAY_SIZE(pages), VM_MAP, PAGE_KERNEL);1093 if (!ctx->buffer)1094 goto out_of_memory;1095 1096 ctx->descriptors = ohci->misc_buffer + descriptors_offset;1097 ctx->descriptors_bus = ohci->misc_buffer_bus + descriptors_offset;1098 1099 for (i = 0; i < AR_BUFFERS; i++) {1100 d = &ctx->descriptors[i];1101 d->req_count = cpu_to_le16(PAGE_SIZE);1102 d->control = cpu_to_le16(DESCRIPTOR_INPUT_MORE |1103 DESCRIPTOR_STATUS |1104 DESCRIPTOR_BRANCH_ALWAYS);1105 d->data_address = cpu_to_le32(ar_buffer_bus(ctx, i));1106 d->branch_address = cpu_to_le32(ctx->descriptors_bus +1107 ar_next_buffer_index(i) * sizeof(struct descriptor));1108 }1109 1110 return 0;1111 1112out_of_memory:1113 ar_context_release(ctx);1114 1115 return -ENOMEM;1116}1117 1118static void ar_context_run(struct ar_context *ctx)1119{1120 unsigned int i;1121 1122 for (i = 0; i < AR_BUFFERS; i++)1123 ar_context_link_page(ctx, i);1124 1125 ctx->pointer = ctx->buffer;1126 1127 reg_write(ctx->ohci, COMMAND_PTR(ctx->regs), ctx->descriptors_bus | 1);1128 reg_write(ctx->ohci, CONTROL_SET(ctx->regs), CONTEXT_RUN);1129}1130 1131static struct descriptor *find_branch_descriptor(struct descriptor *d, int z)1132{1133 __le16 branch;1134 1135 branch = d->control & cpu_to_le16(DESCRIPTOR_BRANCH_ALWAYS);1136 1137 /* figure out which descriptor the branch address goes in */1138 if (z == 2 && branch == cpu_to_le16(DESCRIPTOR_BRANCH_ALWAYS))1139 return d;1140 else1141 return d + z - 1;1142}1143 1144static void context_retire_descriptors(struct context *ctx)1145{1146 struct descriptor *d, *last;1147 u32 address;1148 int z;1149 struct descriptor_buffer *desc;1150 1151 desc = list_entry(ctx->buffer_list.next,1152 struct descriptor_buffer, list);1153 last = ctx->last;1154 while (last->branch_address != 0) {1155 struct descriptor_buffer *old_desc = desc;1156 address = le32_to_cpu(last->branch_address);1157 z = address & 0xf;1158 address &= ~0xf;1159 ctx->current_bus = address;1160 1161 /* If the branch address points to a buffer outside of the1162 * current buffer, advance to the next buffer. */1163 if (address < desc->buffer_bus ||1164 address >= desc->buffer_bus + desc->used)1165 desc = list_entry(desc->list.next,1166 struct descriptor_buffer, list);1167 d = desc->buffer + (address - desc->buffer_bus) / sizeof(*d);1168 last = find_branch_descriptor(d, z);1169 1170 if (!ctx->callback(ctx, d, last))1171 break;1172 1173 if (old_desc != desc) {1174 // If we've advanced to the next buffer, move the previous buffer to the1175 // free list.1176 old_desc->used = 0;1177 guard(spinlock_irqsave)(&ctx->ohci->lock);1178 list_move_tail(&old_desc->list, &ctx->buffer_list);1179 }1180 ctx->last = last;1181 }1182}1183 1184static void context_tasklet(unsigned long data)1185{1186 struct context *ctx = (struct context *) data;1187 1188 context_retire_descriptors(ctx);1189}1190 1191static void ohci_isoc_context_work(struct work_struct *work)1192{1193 struct fw_iso_context *base = container_of(work, struct fw_iso_context, work);1194 struct iso_context *isoc_ctx = container_of(base, struct iso_context, base);1195 1196 context_retire_descriptors(&isoc_ctx->context);1197}1198 1199/*1200 * Allocate a new buffer and add it to the list of free buffers for this1201 * context. Must be called with ohci->lock held.1202 */1203static int context_add_buffer(struct context *ctx)1204{1205 struct descriptor_buffer *desc;1206 dma_addr_t bus_addr;1207 int offset;1208 1209 /*1210 * 16MB of descriptors should be far more than enough for any DMA1211 * program. This will catch run-away userspace or DoS attacks.1212 */1213 if (ctx->total_allocation >= 16*1024*1024)1214 return -ENOMEM;1215 1216 desc = dmam_alloc_coherent(ctx->ohci->card.device, PAGE_SIZE, &bus_addr, GFP_ATOMIC);1217 if (!desc)1218 return -ENOMEM;1219 1220 offset = (void *)&desc->buffer - (void *)desc;1221 /*1222 * Some controllers, like JMicron ones, always issue 0x20-byte DMA reads1223 * for descriptors, even 0x10-byte ones. This can cause page faults when1224 * an IOMMU is in use and the oversized read crosses a page boundary.1225 * Work around this by always leaving at least 0x10 bytes of padding.1226 */1227 desc->buffer_size = PAGE_SIZE - offset - 0x10;1228 desc->buffer_bus = bus_addr + offset;1229 desc->used = 0;1230 1231 list_add_tail(&desc->list, &ctx->buffer_list);1232 ctx->total_allocation += PAGE_SIZE;1233 1234 return 0;1235}1236 1237static int context_init(struct context *ctx, struct fw_ohci *ohci,1238 u32 regs, descriptor_callback_t callback)1239{1240 ctx->ohci = ohci;1241 ctx->regs = regs;1242 ctx->total_allocation = 0;1243 1244 INIT_LIST_HEAD(&ctx->buffer_list);1245 if (context_add_buffer(ctx) < 0)1246 return -ENOMEM;1247 1248 ctx->buffer_tail = list_entry(ctx->buffer_list.next,1249 struct descriptor_buffer, list);1250 1251 tasklet_init(&ctx->tasklet, context_tasklet, (unsigned long)ctx);1252 ctx->callback = callback;1253 1254 /*1255 * We put a dummy descriptor in the buffer that has a NULL1256 * branch address and looks like it's been sent. That way we1257 * have a descriptor to append DMA programs to.1258 */1259 memset(ctx->buffer_tail->buffer, 0, sizeof(*ctx->buffer_tail->buffer));1260 ctx->buffer_tail->buffer->control = cpu_to_le16(DESCRIPTOR_OUTPUT_LAST);1261 ctx->buffer_tail->buffer->transfer_status = cpu_to_le16(0x8011);1262 ctx->buffer_tail->used += sizeof(*ctx->buffer_tail->buffer);1263 ctx->last = ctx->buffer_tail->buffer;1264 ctx->prev = ctx->buffer_tail->buffer;1265 ctx->prev_z = 1;1266 1267 return 0;1268}1269 1270static void context_release(struct context *ctx)1271{1272 struct fw_card *card = &ctx->ohci->card;1273 struct descriptor_buffer *desc, *tmp;1274 1275 list_for_each_entry_safe(desc, tmp, &ctx->buffer_list, list) {1276 dmam_free_coherent(card->device, PAGE_SIZE, desc,1277 desc->buffer_bus - ((void *)&desc->buffer - (void *)desc));1278 }1279}1280 1281/* Must be called with ohci->lock held */1282static struct descriptor *context_get_descriptors(struct context *ctx,1283 int z, dma_addr_t *d_bus)1284{1285 struct descriptor *d = NULL;1286 struct descriptor_buffer *desc = ctx->buffer_tail;1287 1288 if (z * sizeof(*d) > desc->buffer_size)1289 return NULL;1290 1291 if (z * sizeof(*d) > desc->buffer_size - desc->used) {1292 /* No room for the descriptor in this buffer, so advance to the1293 * next one. */1294 1295 if (desc->list.next == &ctx->buffer_list) {1296 /* If there is no free buffer next in the list,1297 * allocate one. */1298 if (context_add_buffer(ctx) < 0)1299 return NULL;1300 }1301 desc = list_entry(desc->list.next,1302 struct descriptor_buffer, list);1303 ctx->buffer_tail = desc;1304 }1305 1306 d = desc->buffer + desc->used / sizeof(*d);1307 memset(d, 0, z * sizeof(*d));1308 *d_bus = desc->buffer_bus + desc->used;1309 1310 return d;1311}1312 1313static void context_run(struct context *ctx, u32 extra)1314{1315 struct fw_ohci *ohci = ctx->ohci;1316 1317 reg_write(ohci, COMMAND_PTR(ctx->regs),1318 le32_to_cpu(ctx->last->branch_address));1319 reg_write(ohci, CONTROL_CLEAR(ctx->regs), ~0);1320 reg_write(ohci, CONTROL_SET(ctx->regs), CONTEXT_RUN | extra);1321 ctx->running = true;1322 flush_writes(ohci);1323}1324 1325static void context_append(struct context *ctx,1326 struct descriptor *d, int z, int extra)1327{1328 dma_addr_t d_bus;1329 struct descriptor_buffer *desc = ctx->buffer_tail;1330 struct descriptor *d_branch;1331 1332 d_bus = desc->buffer_bus + (d - desc->buffer) * sizeof(*d);1333 1334 desc->used += (z + extra) * sizeof(*d);1335 1336 wmb(); /* finish init of new descriptors before branch_address update */1337 1338 d_branch = find_branch_descriptor(ctx->prev, ctx->prev_z);1339 d_branch->branch_address = cpu_to_le32(d_bus | z);1340 1341 /*1342 * VT6306 incorrectly checks only the single descriptor at the1343 * CommandPtr when the wake bit is written, so if it's a1344 * multi-descriptor block starting with an INPUT_MORE, put a copy of1345 * the branch address in the first descriptor.1346 *1347 * Not doing this for transmit contexts since not sure how it interacts1348 * with skip addresses.1349 */1350 if (unlikely(ctx->ohci->quirks & QUIRK_IR_WAKE) &&1351 d_branch != ctx->prev &&1352 (ctx->prev->control & cpu_to_le16(DESCRIPTOR_CMD)) ==1353 cpu_to_le16(DESCRIPTOR_INPUT_MORE)) {1354 ctx->prev->branch_address = cpu_to_le32(d_bus | z);1355 }1356 1357 ctx->prev = d;1358 ctx->prev_z = z;1359}1360 1361static void context_stop(struct context *ctx)1362{1363 struct fw_ohci *ohci = ctx->ohci;1364 u32 reg;1365 int i;1366 1367 reg_write(ohci, CONTROL_CLEAR(ctx->regs), CONTEXT_RUN);1368 ctx->running = false;1369 1370 for (i = 0; i < 1000; i++) {1371 reg = reg_read(ohci, CONTROL_SET(ctx->regs));1372 if ((reg & CONTEXT_ACTIVE) == 0)1373 return;1374 1375 if (i)1376 udelay(10);1377 }1378 ohci_err(ohci, "DMA context still active (0x%08x)\n", reg);1379}1380 1381struct driver_data {1382 u8 inline_data[8];1383 struct fw_packet *packet;1384};1385 1386/*1387 * This function apppends a packet to the DMA queue for transmission.1388 * Must always be called with the ochi->lock held to ensure proper1389 * generation handling and locking around packet queue manipulation.1390 */1391static int at_context_queue_packet(struct context *ctx,1392 struct fw_packet *packet)1393{1394 struct fw_ohci *ohci = ctx->ohci;1395 dma_addr_t d_bus, payload_bus;1396 struct driver_data *driver_data;1397 struct descriptor *d, *last;1398 __le32 *header;1399 int z, tcode;1400 1401 d = context_get_descriptors(ctx, 4, &d_bus);1402 if (d == NULL) {1403 packet->ack = RCODE_SEND_ERROR;1404 return -1;1405 }1406 1407 d[0].control = cpu_to_le16(DESCRIPTOR_KEY_IMMEDIATE);1408 d[0].res_count = cpu_to_le16(packet->timestamp);1409 1410 tcode = async_header_get_tcode(packet->header);1411 header = (__le32 *) &d[1];1412 switch (tcode) {1413 case TCODE_WRITE_QUADLET_REQUEST:1414 case TCODE_WRITE_BLOCK_REQUEST:1415 case TCODE_WRITE_RESPONSE:1416 case TCODE_READ_QUADLET_REQUEST:1417 case TCODE_READ_BLOCK_REQUEST:1418 case TCODE_READ_QUADLET_RESPONSE:1419 case TCODE_READ_BLOCK_RESPONSE:1420 case TCODE_LOCK_REQUEST:1421 case TCODE_LOCK_RESPONSE:1422 ohci1394_at_data_set_src_bus_id(header, false);1423 ohci1394_at_data_set_speed(header, packet->speed);1424 ohci1394_at_data_set_tlabel(header, async_header_get_tlabel(packet->header));1425 ohci1394_at_data_set_retry(header, async_header_get_retry(packet->header));1426 ohci1394_at_data_set_tcode(header, tcode);1427 1428 ohci1394_at_data_set_destination_id(header,1429 async_header_get_destination(packet->header));1430 1431 if (ctx == &ctx->ohci->at_response_ctx) {1432 ohci1394_at_data_set_rcode(header, async_header_get_rcode(packet->header));1433 } else {1434 ohci1394_at_data_set_destination_offset(header,1435 async_header_get_offset(packet->header));1436 }1437 1438 if (tcode_is_block_packet(tcode))1439 header[3] = cpu_to_le32(packet->header[3]);1440 else1441 header[3] = (__force __le32) packet->header[3];1442 1443 d[0].req_count = cpu_to_le16(packet->header_length);1444 break;1445 case TCODE_LINK_INTERNAL:1446 ohci1394_at_data_set_speed(header, packet->speed);1447 ohci1394_at_data_set_tcode(header, TCODE_LINK_INTERNAL);1448 1449 header[1] = cpu_to_le32(packet->header[1]);1450 header[2] = cpu_to_le32(packet->header[2]);1451 d[0].req_count = cpu_to_le16(12);1452 1453 if (is_ping_packet(&packet->header[1]))1454 d[0].control |= cpu_to_le16(DESCRIPTOR_PING);1455 break;1456 1457 case TCODE_STREAM_DATA:1458 ohci1394_it_data_set_speed(header, packet->speed);1459 ohci1394_it_data_set_tag(header, isoc_header_get_tag(packet->header[0]));1460 ohci1394_it_data_set_channel(header, isoc_header_get_channel(packet->header[0]));1461 ohci1394_it_data_set_tcode(header, TCODE_STREAM_DATA);1462 ohci1394_it_data_set_sync(header, isoc_header_get_sy(packet->header[0]));1463 1464 ohci1394_it_data_set_data_length(header, isoc_header_get_data_length(packet->header[0]));1465 1466 d[0].req_count = cpu_to_le16(8);1467 break;1468 1469 default:1470 /* BUG(); */1471 packet->ack = RCODE_SEND_ERROR;1472 return -1;1473 }1474 1475 BUILD_BUG_ON(sizeof(struct driver_data) > sizeof(struct descriptor));1476 driver_data = (struct driver_data *) &d[3];1477 driver_data->packet = packet;1478 packet->driver_data = driver_data;1479 1480 if (packet->payload_length > 0) {1481 if (packet->payload_length > sizeof(driver_data->inline_data)) {1482 payload_bus = dma_map_single(ohci->card.device,1483 packet->payload,1484 packet->payload_length,1485 DMA_TO_DEVICE);1486 if (dma_mapping_error(ohci->card.device, payload_bus)) {1487 packet->ack = RCODE_SEND_ERROR;1488 return -1;1489 }1490 packet->payload_bus = payload_bus;1491 packet->payload_mapped = true;1492 } else {1493 memcpy(driver_data->inline_data, packet->payload,1494 packet->payload_length);1495 payload_bus = d_bus + 3 * sizeof(*d);1496 }1497 1498 d[2].req_count = cpu_to_le16(packet->payload_length);1499 d[2].data_address = cpu_to_le32(payload_bus);1500 last = &d[2];1501 z = 3;1502 } else {1503 last = &d[0];1504 z = 2;1505 }1506 1507 last->control |= cpu_to_le16(DESCRIPTOR_OUTPUT_LAST |1508 DESCRIPTOR_IRQ_ALWAYS |1509 DESCRIPTOR_BRANCH_ALWAYS);1510 1511 /* FIXME: Document how the locking works. */1512 if (ohci->generation != packet->generation) {1513 if (packet->payload_mapped)1514 dma_unmap_single(ohci->card.device, payload_bus,1515 packet->payload_length, DMA_TO_DEVICE);1516 packet->ack = RCODE_GENERATION;1517 return -1;1518 }1519 1520 context_append(ctx, d, z, 4 - z);1521 1522 if (ctx->running)1523 reg_write(ohci, CONTROL_SET(ctx->regs), CONTEXT_WAKE);1524 else1525 context_run(ctx, 0);1526 1527 return 0;1528}1529 1530static void at_context_flush(struct context *ctx)1531{1532 tasklet_disable(&ctx->tasklet);1533 1534 ctx->flushing = true;1535 context_tasklet((unsigned long)ctx);1536 ctx->flushing = false;1537 1538 tasklet_enable(&ctx->tasklet);1539}1540 1541static int handle_at_packet(struct context *context,1542 struct descriptor *d,1543 struct descriptor *last)1544{1545 struct driver_data *driver_data;1546 struct fw_packet *packet;1547 struct fw_ohci *ohci = context->ohci;1548 int evt;1549 1550 if (last->transfer_status == 0 && !context->flushing)1551 /* This descriptor isn't done yet, stop iteration. */1552 return 0;1553 1554 driver_data = (struct driver_data *) &d[3];1555 packet = driver_data->packet;1556 if (packet == NULL)1557 /* This packet was cancelled, just continue. */1558 return 1;1559 1560 if (packet->payload_mapped)1561 dma_unmap_single(ohci->card.device, packet->payload_bus,1562 packet->payload_length, DMA_TO_DEVICE);1563 1564 evt = le16_to_cpu(last->transfer_status) & 0x1f;1565 packet->timestamp = le16_to_cpu(last->res_count);1566 1567 log_ar_at_event(ohci, 'T', packet->speed, packet->header, evt);1568 1569 switch (evt) {1570 case OHCI1394_evt_timeout:1571 /* Async response transmit timed out. */1572 packet->ack = RCODE_CANCELLED;1573 break;1574 1575 case OHCI1394_evt_flushed:1576 /*1577 * The packet was flushed should give same error as1578 * when we try to use a stale generation count.1579 */1580 packet->ack = RCODE_GENERATION;1581 break;1582 1583 case OHCI1394_evt_missing_ack:1584 if (context->flushing)1585 packet->ack = RCODE_GENERATION;1586 else {1587 /*1588 * Using a valid (current) generation count, but the1589 * node is not on the bus or not sending acks.1590 */1591 packet->ack = RCODE_NO_ACK;1592 }1593 break;1594 1595 case ACK_COMPLETE + 0x10:1596 case ACK_PENDING + 0x10:1597 case ACK_BUSY_X + 0x10:1598 case ACK_BUSY_A + 0x10:1599 case ACK_BUSY_B + 0x10:1600 case ACK_DATA_ERROR + 0x10:1601 case ACK_TYPE_ERROR + 0x10:1602 packet->ack = evt - 0x10;1603 break;1604 1605 case OHCI1394_evt_no_status:1606 if (context->flushing) {1607 packet->ack = RCODE_GENERATION;1608 break;1609 }1610 fallthrough;1611 1612 default:1613 packet->ack = RCODE_SEND_ERROR;1614 break;1615 }1616 1617 packet->callback(packet, &ohci->card, packet->ack);1618 1619 return 1;1620}1621 1622static u32 get_cycle_time(struct fw_ohci *ohci);1623 1624static void handle_local_rom(struct fw_ohci *ohci,1625 struct fw_packet *packet, u32 csr)1626{1627 struct fw_packet response;1628 int tcode, length, i;1629 1630 tcode = async_header_get_tcode(packet->header);1631 if (tcode_is_block_packet(tcode))1632 length = async_header_get_data_length(packet->header);1633 else1634 length = 4;1635 1636 i = csr - CSR_CONFIG_ROM;1637 if (i + length > CONFIG_ROM_SIZE) {1638 fw_fill_response(&response, packet->header,1639 RCODE_ADDRESS_ERROR, NULL, 0);1640 } else if (!tcode_is_read_request(tcode)) {1641 fw_fill_response(&response, packet->header,1642 RCODE_TYPE_ERROR, NULL, 0);1643 } else {1644 fw_fill_response(&response, packet->header, RCODE_COMPLETE,1645 (void *) ohci->config_rom + i, length);1646 }1647 1648 // Timestamping on behalf of the hardware.1649 response.timestamp = cycle_time_to_ohci_tstamp(get_cycle_time(ohci));1650 fw_core_handle_response(&ohci->card, &response);1651}1652 1653static void handle_local_lock(struct fw_ohci *ohci,1654 struct fw_packet *packet, u32 csr)1655{1656 struct fw_packet response;1657 int tcode, length, ext_tcode, sel, try;1658 __be32 *payload, lock_old;1659 u32 lock_arg, lock_data;1660 1661 tcode = async_header_get_tcode(packet->header);1662 length = async_header_get_data_length(packet->header);1663 payload = packet->payload;1664 ext_tcode = async_header_get_extended_tcode(packet->header);1665 1666 if (tcode == TCODE_LOCK_REQUEST &&1667 ext_tcode == EXTCODE_COMPARE_SWAP && length == 8) {1668 lock_arg = be32_to_cpu(payload[0]);1669 lock_data = be32_to_cpu(payload[1]);1670 } else if (tcode == TCODE_READ_QUADLET_REQUEST) {1671 lock_arg = 0;1672 lock_data = 0;1673 } else {1674 fw_fill_response(&response, packet->header,1675 RCODE_TYPE_ERROR, NULL, 0);1676 goto out;1677 }1678 1679 sel = (csr - CSR_BUS_MANAGER_ID) / 4;1680 reg_write(ohci, OHCI1394_CSRData, lock_data);1681 reg_write(ohci, OHCI1394_CSRCompareData, lock_arg);1682 reg_write(ohci, OHCI1394_CSRControl, sel);1683 1684 for (try = 0; try < 20; try++)1685 if (reg_read(ohci, OHCI1394_CSRControl) & 0x80000000) {1686 lock_old = cpu_to_be32(reg_read(ohci,1687 OHCI1394_CSRData));1688 fw_fill_response(&response, packet->header,1689 RCODE_COMPLETE,1690 &lock_old, sizeof(lock_old));1691 goto out;1692 }1693 1694 ohci_err(ohci, "swap not done (CSR lock timeout)\n");1695 fw_fill_response(&response, packet->header, RCODE_BUSY, NULL, 0);1696 1697 out:1698 // Timestamping on behalf of the hardware.1699 response.timestamp = cycle_time_to_ohci_tstamp(get_cycle_time(ohci));1700 fw_core_handle_response(&ohci->card, &response);1701}1702 1703static void handle_local_request(struct context *ctx, struct fw_packet *packet)1704{1705 u64 offset, csr;1706 1707 if (ctx == &ctx->ohci->at_request_ctx) {1708 packet->ack = ACK_PENDING;1709 packet->callback(packet, &ctx->ohci->card, packet->ack);1710 }1711 1712 offset = async_header_get_offset(packet->header);1713 csr = offset - CSR_REGISTER_BASE;1714 1715 /* Handle config rom reads. */1716 if (csr >= CSR_CONFIG_ROM && csr < CSR_CONFIG_ROM_END)1717 handle_local_rom(ctx->ohci, packet, csr);1718 else switch (csr) {1719 case CSR_BUS_MANAGER_ID:1720 case CSR_BANDWIDTH_AVAILABLE:1721 case CSR_CHANNELS_AVAILABLE_HI:1722 case CSR_CHANNELS_AVAILABLE_LO:1723 handle_local_lock(ctx->ohci, packet, csr);1724 break;1725 default:1726 if (ctx == &ctx->ohci->at_request_ctx)1727 fw_core_handle_request(&ctx->ohci->card, packet);1728 else1729 fw_core_handle_response(&ctx->ohci->card, packet);1730 break;1731 }1732 1733 if (ctx == &ctx->ohci->at_response_ctx) {1734 packet->ack = ACK_COMPLETE;1735 packet->callback(packet, &ctx->ohci->card, packet->ack);1736 }1737}1738 1739static void at_context_transmit(struct context *ctx, struct fw_packet *packet)1740{1741 unsigned long flags;1742 int ret;1743 1744 spin_lock_irqsave(&ctx->ohci->lock, flags);1745 1746 if (async_header_get_destination(packet->header) == ctx->ohci->node_id &&1747 ctx->ohci->generation == packet->generation) {1748 spin_unlock_irqrestore(&ctx->ohci->lock, flags);1749 1750 // Timestamping on behalf of the hardware.1751 packet->timestamp = cycle_time_to_ohci_tstamp(get_cycle_time(ctx->ohci));1752 1753 handle_local_request(ctx, packet);1754 return;1755 }1756 1757 ret = at_context_queue_packet(ctx, packet);1758 spin_unlock_irqrestore(&ctx->ohci->lock, flags);1759 1760 if (ret < 0) {1761 // Timestamping on behalf of the hardware.1762 packet->timestamp = cycle_time_to_ohci_tstamp(get_cycle_time(ctx->ohci));1763 1764 packet->callback(packet, &ctx->ohci->card, packet->ack);1765 }1766}1767 1768static void detect_dead_context(struct fw_ohci *ohci,1769 const char *name, unsigned int regs)1770{1771 u32 ctl;1772 1773 ctl = reg_read(ohci, CONTROL_SET(regs));1774 if (ctl & CONTEXT_DEAD)1775 ohci_err(ohci, "DMA context %s has stopped, error code: %s\n",1776 name, evts[ctl & 0x1f]);1777}1778 1779static void handle_dead_contexts(struct fw_ohci *ohci)1780{1781 unsigned int i;1782 char name[8];1783 1784 detect_dead_context(ohci, "ATReq", OHCI1394_AsReqTrContextBase);1785 detect_dead_context(ohci, "ATRsp", OHCI1394_AsRspTrContextBase);1786 detect_dead_context(ohci, "ARReq", OHCI1394_AsReqRcvContextBase);1787 detect_dead_context(ohci, "ARRsp", OHCI1394_AsRspRcvContextBase);1788 for (i = 0; i < 32; ++i) {1789 if (!(ohci->it_context_support & (1 << i)))1790 continue;1791 sprintf(name, "IT%u", i);1792 detect_dead_context(ohci, name, OHCI1394_IsoXmitContextBase(i));1793 }1794 for (i = 0; i < 32; ++i) {1795 if (!(ohci->ir_context_support & (1 << i)))1796 continue;1797 sprintf(name, "IR%u", i);1798 detect_dead_context(ohci, name, OHCI1394_IsoRcvContextBase(i));1799 }1800 /* TODO: maybe try to flush and restart the dead contexts */1801}1802 1803static u32 cycle_timer_ticks(u32 cycle_timer)1804{1805 u32 ticks;1806 1807 ticks = cycle_timer & 0xfff;1808 ticks += 3072 * ((cycle_timer >> 12) & 0x1fff);1809 ticks += (3072 * 8000) * (cycle_timer >> 25);1810 1811 return ticks;1812}1813 1814/*1815 * Some controllers exhibit one or more of the following bugs when updating the1816 * iso cycle timer register:1817 * - When the lowest six bits are wrapping around to zero, a read that happens1818 * at the same time will return garbage in the lowest ten bits.1819 * - When the cycleOffset field wraps around to zero, the cycleCount field is1820 * not incremented for about 60 ns.1821 * - Occasionally, the entire register reads zero.1822 *1823 * To catch these, we read the register three times and ensure that the1824 * difference between each two consecutive reads is approximately the same, i.e.1825 * less than twice the other. Furthermore, any negative difference indicates an1826 * error. (A PCI read should take at least 20 ticks of the 24.576 MHz timer to1827 * execute, so we have enough precision to compute the ratio of the differences.)1828 */1829static u32 get_cycle_time(struct fw_ohci *ohci)1830{1831 u32 c0, c1, c2;1832 u32 t0, t1, t2;1833 s32 diff01, diff12;1834 int i;1835 1836 if (has_reboot_by_cycle_timer_read_quirk(ohci))1837 return 0;1838 1839 c2 = reg_read(ohci, OHCI1394_IsochronousCycleTimer);1840 1841 if (ohci->quirks & QUIRK_CYCLE_TIMER) {1842 i = 0;1843 c1 = c2;1844 c2 = reg_read(ohci, OHCI1394_IsochronousCycleTimer);1845 do {1846 c0 = c1;1847 c1 = c2;1848 c2 = reg_read(ohci, OHCI1394_IsochronousCycleTimer);1849 t0 = cycle_timer_ticks(c0);1850 t1 = cycle_timer_ticks(c1);1851 t2 = cycle_timer_ticks(c2);1852 diff01 = t1 - t0;1853 diff12 = t2 - t1;1854 } while ((diff01 <= 0 || diff12 <= 0 ||1855 diff01 / diff12 >= 2 || diff12 / diff01 >= 2)1856 && i++ < 20);1857 }1858 1859 return c2;1860}1861 1862/*1863 * This function has to be called at least every 64 seconds. The bus_time1864 * field stores not only the upper 25 bits of the BUS_TIME register but also1865 * the most significant bit of the cycle timer in bit 6 so that we can detect1866 * changes in this bit.1867 */1868static u32 update_bus_time(struct fw_ohci *ohci)1869{1870 u32 cycle_time_seconds = get_cycle_time(ohci) >> 25;1871 1872 if (unlikely(!ohci->bus_time_running)) {1873 reg_write(ohci, OHCI1394_IntMaskSet, OHCI1394_cycle64Seconds);1874 ohci->bus_time = (lower_32_bits(ktime_get_seconds()) & ~0x7f) |1875 (cycle_time_seconds & 0x40);1876 ohci->bus_time_running = true;1877 }1878 1879 if ((ohci->bus_time & 0x40) != (cycle_time_seconds & 0x40))1880 ohci->bus_time += 0x40;1881 1882 return ohci->bus_time | cycle_time_seconds;1883}1884 1885static int get_status_for_port(struct fw_ohci *ohci, int port_index,1886 enum phy_packet_self_id_port_status *status)1887{1888 int reg;1889 1890 scoped_guard(mutex, &ohci->phy_reg_mutex) {1891 reg = write_phy_reg(ohci, 7, port_index);1892 if (reg < 0)1893 return reg;1894 1895 reg = read_phy_reg(ohci, 8);1896 if (reg < 0)1897 return reg;1898 }1899 1900 switch (reg & 0x0f) {1901 case 0x06:1902 // is child node (connected to parent node)1903 *status = PHY_PACKET_SELF_ID_PORT_STATUS_PARENT;1904 break;1905 case 0x0e:1906 // is parent node (connected to child node)1907 *status = PHY_PACKET_SELF_ID_PORT_STATUS_CHILD;1908 break;1909 default:1910 // not connected1911 *status = PHY_PACKET_SELF_ID_PORT_STATUS_NCONN;1912 break;1913 }1914 1915 return 0;1916}1917 1918static int get_self_id_pos(struct fw_ohci *ohci, u32 self_id,1919 int self_id_count)1920{1921 unsigned int left_phy_id = phy_packet_self_id_get_phy_id(self_id);1922 int i;1923 1924 for (i = 0; i < self_id_count; i++) {1925 u32 entry = ohci->self_id_buffer[i];1926 unsigned int right_phy_id = phy_packet_self_id_get_phy_id(entry);1927 1928 if (left_phy_id == right_phy_id)1929 return -1;1930 if (left_phy_id < right_phy_id)1931 return i;1932 }1933 return i;1934}1935 1936static int detect_initiated_reset(struct fw_ohci *ohci, bool *is_initiated_reset)1937{1938 int reg;1939 1940 guard(mutex)(&ohci->phy_reg_mutex);1941 1942 // Select page 71943 reg = write_phy_reg(ohci, 7, 0xe0);1944 if (reg < 0)1945 return reg;1946 1947 reg = read_phy_reg(ohci, 8);1948 if (reg < 0)1949 return reg;1950 1951 // set PMODE bit1952 reg |= 0x40;1953 reg = write_phy_reg(ohci, 8, reg);1954 if (reg < 0)1955 return reg;1956 1957 // read register 121958 reg = read_phy_reg(ohci, 12);1959 if (reg < 0)1960 return reg;1961 1962 // bit 3 indicates "initiated reset"1963 *is_initiated_reset = !!((reg & 0x08) == 0x08);1964 1965 return 0;1966}1967 1968/*1969 * TI TSB82AA2B and TSB12LV26 do not receive the selfID of a locally1970 * attached TSB41BA3D phy; see http://www.ti.com/litv/pdf/sllz059.1971 * Construct the selfID from phy register contents.1972 */1973static int find_and_insert_self_id(struct fw_ohci *ohci, int self_id_count)1974{1975 int reg, i, pos, err;1976 bool is_initiated_reset;1977 u32 self_id = 0;1978 1979 // link active 1, speed 3, bridge 0, contender 1, more packets 0.1980 phy_packet_set_packet_identifier(&self_id, PHY_PACKET_PACKET_IDENTIFIER_SELF_ID);1981 phy_packet_self_id_zero_set_link_active(&self_id, true);1982 phy_packet_self_id_zero_set_scode(&self_id, SCODE_800);1983 phy_packet_self_id_zero_set_contender(&self_id, true);1984 1985 reg = reg_read(ohci, OHCI1394_NodeID);1986 if (!(reg & OHCI1394_NodeID_idValid)) {1987 ohci_notice(ohci,1988 "node ID not valid, new bus reset in progress\n");1989 return -EBUSY;1990 }1991 phy_packet_self_id_set_phy_id(&self_id, reg & 0x3f);1992 1993 reg = ohci_read_phy_reg(&ohci->card, 4);1994 if (reg < 0)1995 return reg;1996 phy_packet_self_id_zero_set_power_class(&self_id, reg & 0x07);1997 1998 reg = ohci_read_phy_reg(&ohci->card, 1);1999 if (reg < 0)2000 return reg;2001 phy_packet_self_id_zero_set_gap_count(&self_id, reg & 0x3f);2002 2003 for (i = 0; i < 3; i++) {2004 enum phy_packet_self_id_port_status status;2005 2006 err = get_status_for_port(ohci, i, &status);2007 if (err < 0)2008 return err;2009 2010 self_id_sequence_set_port_status(&self_id, 1, i, status);2011 }2012 2013 err = detect_initiated_reset(ohci, &is_initiated_reset);2014 if (err < 0)2015 return err;2016 phy_packet_self_id_zero_set_initiated_reset(&self_id, is_initiated_reset);2017 2018 pos = get_self_id_pos(ohci, self_id, self_id_count);2019 if (pos >= 0) {2020 memmove(&(ohci->self_id_buffer[pos+1]),2021 &(ohci->self_id_buffer[pos]),2022 (self_id_count - pos) * sizeof(*ohci->self_id_buffer));2023 ohci->self_id_buffer[pos] = self_id;2024 self_id_count++;2025 }2026 return self_id_count;2027}2028 2029static void bus_reset_work(struct work_struct *work)2030{2031 struct fw_ohci *ohci =2032 container_of(work, struct fw_ohci, bus_reset_work);2033 int self_id_count, generation, new_generation, i, j;2034 u32 reg, quadlet;2035 void *free_rom = NULL;2036 dma_addr_t free_rom_bus = 0;2037 bool is_new_root;2038 2039 reg = reg_read(ohci, OHCI1394_NodeID);2040 if (!(reg & OHCI1394_NodeID_idValid)) {2041 ohci_notice(ohci,2042 "node ID not valid, new bus reset in progress\n");2043 return;2044 }2045 if ((reg & OHCI1394_NodeID_nodeNumber) == 63) {2046 ohci_notice(ohci, "malconfigured bus\n");2047 return;2048 }2049 ohci->node_id = reg & (OHCI1394_NodeID_busNumber |2050 OHCI1394_NodeID_nodeNumber);2051 2052 is_new_root = (reg & OHCI1394_NodeID_root) != 0;2053 if (!(ohci->is_root && is_new_root))2054 reg_write(ohci, OHCI1394_LinkControlSet,2055 OHCI1394_LinkControl_cycleMaster);2056 ohci->is_root = is_new_root;2057 2058 reg = reg_read(ohci, OHCI1394_SelfIDCount);2059 if (ohci1394_self_id_count_is_error(reg)) {2060 ohci_notice(ohci, "self ID receive error\n");2061 return;2062 }2063 /*2064 * The count in the SelfIDCount register is the number of2065 * bytes in the self ID receive buffer. Since we also receive2066 * the inverted quadlets and a header quadlet, we shift one2067 * bit extra to get the actual number of self IDs.2068 */2069 self_id_count = ohci1394_self_id_count_get_size(reg) >> 1;2070 2071 if (self_id_count > 252) {2072 ohci_notice(ohci, "bad selfIDSize (%08x)\n", reg);2073 return;2074 }2075 2076 quadlet = cond_le32_to_cpu(ohci->self_id[0], has_be_header_quirk(ohci));2077 generation = ohci1394_self_id_receive_q0_get_generation(quadlet);2078 rmb();2079 2080 for (i = 1, j = 0; j < self_id_count; i += 2, j++) {2081 u32 id = cond_le32_to_cpu(ohci->self_id[i], has_be_header_quirk(ohci));2082 u32 id2 = cond_le32_to_cpu(ohci->self_id[i + 1], has_be_header_quirk(ohci));2083 2084 if (id != ~id2) {2085 /*2086 * If the invalid data looks like a cycle start packet,2087 * it's likely to be the result of the cycle master2088 * having a wrong gap count. In this case, the self IDs2089 * so far are valid and should be processed so that the2090 * bus manager can then correct the gap count.2091 */2092 if (id == 0xffff008f) {2093 ohci_notice(ohci, "ignoring spurious self IDs\n");2094 self_id_count = j;2095 break;2096 }2097 2098 ohci_notice(ohci, "bad self ID %d/%d (%08x != ~%08x)\n",2099 j, self_id_count, id, id2);2100 return;2101 }2102 ohci->self_id_buffer[j] = id;2103 }2104 2105 if (ohci->quirks & QUIRK_TI_SLLZ059) {2106 self_id_count = find_and_insert_self_id(ohci, self_id_count);2107 if (self_id_count < 0) {2108 ohci_notice(ohci,2109 "could not construct local self ID\n");2110 return;2111 }2112 }2113 2114 if (self_id_count == 0) {2115 ohci_notice(ohci, "no self IDs\n");2116 return;2117 }2118 rmb();2119 2120 /*2121 * Check the consistency of the self IDs we just read. The2122 * problem we face is that a new bus reset can start while we2123 * read out the self IDs from the DMA buffer. If this happens,2124 * the DMA buffer will be overwritten with new self IDs and we2125 * will read out inconsistent data. The OHCI specification2126 * (section 11.2) recommends a technique similar to2127 * linux/seqlock.h, where we remember the generation of the2128 * self IDs in the buffer before reading them out and compare2129 * it to the current generation after reading them out. If2130 * the two generations match we know we have a consistent set2131 * of self IDs.2132 */2133 2134 reg = reg_read(ohci, OHCI1394_SelfIDCount);2135 new_generation = ohci1394_self_id_count_get_generation(reg);2136 if (new_generation != generation) {2137 ohci_notice(ohci, "new bus reset, discarding self ids\n");2138 return;2139 }2140 2141 // FIXME: Document how the locking works.2142 scoped_guard(spinlock_irq, &ohci->lock) {2143 ohci->generation = -1; // prevent AT packet queueing2144 context_stop(&ohci->at_request_ctx);2145 context_stop(&ohci->at_response_ctx);2146 }2147 2148 /*2149 * Per OHCI 1.2 draft, clause 7.2.3.3, hardware may leave unsent2150 * packets in the AT queues and software needs to drain them.2151 * Some OHCI 1.1 controllers (JMicron) apparently require this too.2152 */2153 at_context_flush(&ohci->at_request_ctx);2154 at_context_flush(&ohci->at_response_ctx);2155 2156 scoped_guard(spinlock_irq, &ohci->lock) {2157 ohci->generation = generation;2158 reg_write(ohci, OHCI1394_IntEventClear, OHCI1394_busReset);2159 reg_write(ohci, OHCI1394_IntMaskSet, OHCI1394_busReset);2160 2161 if (ohci->quirks & QUIRK_RESET_PACKET)2162 ohci->request_generation = generation;2163 2164 // This next bit is unrelated to the AT context stuff but we have to do it under the2165 // spinlock also. If a new config rom was set up before this reset, the old one is2166 // now no longer in use and we can free it. Update the config rom pointers to point2167 // to the current config rom and clear the next_config_rom pointer so a new update2168 // can take place.2169 if (ohci->next_config_rom != NULL) {2170 if (ohci->next_config_rom != ohci->config_rom) {2171 free_rom = ohci->config_rom;2172 free_rom_bus = ohci->config_rom_bus;2173 }2174 ohci->config_rom = ohci->next_config_rom;2175 ohci->config_rom_bus = ohci->next_config_rom_bus;2176 ohci->next_config_rom = NULL;2177 2178 // Restore config_rom image and manually update config_rom registers.2179 // Writing the header quadlet will indicate that the config rom is ready,2180 // so we do that last.2181 reg_write(ohci, OHCI1394_BusOptions, be32_to_cpu(ohci->config_rom[2]));2182 ohci->config_rom[0] = ohci->next_header;2183 reg_write(ohci, OHCI1394_ConfigROMhdr, be32_to_cpu(ohci->next_header));2184 }2185 2186 if (param_remote_dma) {2187 reg_write(ohci, OHCI1394_PhyReqFilterHiSet, ~0);2188 reg_write(ohci, OHCI1394_PhyReqFilterLoSet, ~0);2189 }2190 }2191 2192 if (free_rom)2193 dmam_free_coherent(ohci->card.device, CONFIG_ROM_SIZE, free_rom, free_rom_bus);2194 2195 log_selfids(ohci, generation, self_id_count);2196 2197 fw_core_handle_bus_reset(&ohci->card, ohci->node_id, generation,2198 self_id_count, ohci->self_id_buffer,2199 ohci->csr_state_setclear_abdicate);2200 ohci->csr_state_setclear_abdicate = false;2201}2202 2203static irqreturn_t irq_handler(int irq, void *data)2204{2205 struct fw_ohci *ohci = data;2206 u32 event, iso_event;2207 int i;2208 2209 event = reg_read(ohci, OHCI1394_IntEventClear);2210 2211 if (!event || !~event)2212 return IRQ_NONE;2213 2214 if (unlikely(param_debug > 0)) {2215 dev_notice_ratelimited(ohci->card.device,2216 "The debug parameter is superceded by tracepoints events, and deprecated.");2217 }2218 2219 /*2220 * busReset and postedWriteErr events must not be cleared yet2221 * (OHCI 1.1 clauses 7.2.3.2 and 13.2.8.1)2222 */2223 reg_write(ohci, OHCI1394_IntEventClear,2224 event & ~(OHCI1394_busReset | OHCI1394_postedWriteErr));2225 trace_irqs(ohci->card.index, event);2226 log_irqs(ohci, event);2227 // The flag is masked again at bus_reset_work() scheduled by selfID event.2228 if (event & OHCI1394_busReset)2229 reg_write(ohci, OHCI1394_IntMaskClear, OHCI1394_busReset);2230 2231 if (event & OHCI1394_selfIDComplete) {2232 if (trace_self_id_complete_enabled()) {2233 u32 reg = reg_read(ohci, OHCI1394_SelfIDCount);2234 2235 trace_self_id_complete(ohci->card.index, reg, ohci->self_id,2236 has_be_header_quirk(ohci));2237 }2238 queue_work(selfid_workqueue, &ohci->bus_reset_work);2239 }2240 2241 if (event & OHCI1394_RQPkt)2242 tasklet_schedule(&ohci->ar_request_ctx.tasklet);2243 2244 if (event & OHCI1394_RSPkt)2245 tasklet_schedule(&ohci->ar_response_ctx.tasklet);2246 2247 if (event & OHCI1394_reqTxComplete)2248 tasklet_schedule(&ohci->at_request_ctx.tasklet);2249 2250 if (event & OHCI1394_respTxComplete)2251 tasklet_schedule(&ohci->at_response_ctx.tasklet);2252 2253 if (event & OHCI1394_isochRx) {2254 iso_event = reg_read(ohci, OHCI1394_IsoRecvIntEventClear);2255 reg_write(ohci, OHCI1394_IsoRecvIntEventClear, iso_event);2256 2257 while (iso_event) {2258 i = ffs(iso_event) - 1;2259 fw_iso_context_schedule_flush_completions(&ohci->ir_context_list[i].base);2260 iso_event &= ~(1 << i);2261 }2262 }2263 2264 if (event & OHCI1394_isochTx) {2265 iso_event = reg_read(ohci, OHCI1394_IsoXmitIntEventClear);2266 reg_write(ohci, OHCI1394_IsoXmitIntEventClear, iso_event);2267 2268 while (iso_event) {2269 i = ffs(iso_event) - 1;2270 fw_iso_context_schedule_flush_completions(&ohci->it_context_list[i].base);2271 iso_event &= ~(1 << i);2272 }2273 }2274 2275 if (unlikely(event & OHCI1394_regAccessFail))2276 ohci_err(ohci, "register access failure\n");2277 2278 if (unlikely(event & OHCI1394_postedWriteErr)) {2279 reg_read(ohci, OHCI1394_PostedWriteAddressHi);2280 reg_read(ohci, OHCI1394_PostedWriteAddressLo);2281 reg_write(ohci, OHCI1394_IntEventClear,2282 OHCI1394_postedWriteErr);2283 dev_err_ratelimited(ohci->card.device, "PCI posted write error\n");2284 }2285 2286 if (unlikely(event & OHCI1394_cycleTooLong)) {2287 dev_notice_ratelimited(ohci->card.device, "isochronous cycle too long\n");2288 reg_write(ohci, OHCI1394_LinkControlSet,2289 OHCI1394_LinkControl_cycleMaster);2290 }2291 2292 if (unlikely(event & OHCI1394_cycleInconsistent)) {2293 /*2294 * We need to clear this event bit in order to make2295 * cycleMatch isochronous I/O work. In theory we should2296 * stop active cycleMatch iso contexts now and restart2297 * them at least two cycles later. (FIXME?)2298 */2299 dev_notice_ratelimited(ohci->card.device, "isochronous cycle inconsistent\n");2300 }2301 2302 if (unlikely(event & OHCI1394_unrecoverableError))2303 handle_dead_contexts(ohci);2304 2305 if (event & OHCI1394_cycle64Seconds) {2306 guard(spinlock)(&ohci->lock);2307 update_bus_time(ohci);2308 } else2309 flush_writes(ohci);2310 2311 return IRQ_HANDLED;2312}2313 2314static int software_reset(struct fw_ohci *ohci)2315{2316 u32 val;2317 int i;2318 2319 reg_write(ohci, OHCI1394_HCControlSet, OHCI1394_HCControl_softReset);2320 for (i = 0; i < 500; i++) {2321 val = reg_read(ohci, OHCI1394_HCControlSet);2322 if (!~val)2323 return -ENODEV; /* Card was ejected. */2324 2325 if (!(val & OHCI1394_HCControl_softReset))2326 return 0;2327 2328 msleep(1);2329 }2330 2331 return -EBUSY;2332}2333 2334static void copy_config_rom(__be32 *dest, const __be32 *src, size_t length)2335{2336 size_t size = length * 4;2337 2338 memcpy(dest, src, size);2339 if (size < CONFIG_ROM_SIZE)2340 memset(&dest[length], 0, CONFIG_ROM_SIZE - size);2341}2342 2343static int configure_1394a_enhancements(struct fw_ohci *ohci)2344{2345 bool enable_1394a;2346 int ret, clear, set, offset;2347 2348 /* Check if the driver should configure link and PHY. */2349 if (!(reg_read(ohci, OHCI1394_HCControlSet) &2350 OHCI1394_HCControl_programPhyEnable))2351 return 0;2352 2353 /* Paranoia: check whether the PHY supports 1394a, too. */2354 enable_1394a = false;2355 ret = read_phy_reg(ohci, 2);2356 if (ret < 0)2357 return ret;2358 if ((ret & PHY_EXTENDED_REGISTERS) == PHY_EXTENDED_REGISTERS) {2359 ret = read_paged_phy_reg(ohci, 1, 8);2360 if (ret < 0)2361 return ret;2362 if (ret >= 1)2363 enable_1394a = true;2364 }2365 2366 if (ohci->quirks & QUIRK_NO_1394A)2367 enable_1394a = false;2368 2369 /* Configure PHY and link consistently. */2370 if (enable_1394a) {2371 clear = 0;2372 set = PHY_ENABLE_ACCEL | PHY_ENABLE_MULTI;2373 } else {2374 clear = PHY_ENABLE_ACCEL | PHY_ENABLE_MULTI;2375 set = 0;2376 }2377 ret = update_phy_reg(ohci, 5, clear, set);2378 if (ret < 0)2379 return ret;2380 2381 if (enable_1394a)2382 offset = OHCI1394_HCControlSet;2383 else2384 offset = OHCI1394_HCControlClear;2385 reg_write(ohci, offset, OHCI1394_HCControl_aPhyEnhanceEnable);2386 2387 /* Clean up: configuration has been taken care of. */2388 reg_write(ohci, OHCI1394_HCControlClear,2389 OHCI1394_HCControl_programPhyEnable);2390 2391 return 0;2392}2393 2394static int probe_tsb41ba3d(struct fw_ohci *ohci)2395{2396 /* TI vendor ID = 0x080028, TSB41BA3D product ID = 0x833005 (sic) */2397 static const u8 id[] = { 0x08, 0x00, 0x28, 0x83, 0x30, 0x05, };2398 int reg, i;2399 2400 reg = read_phy_reg(ohci, 2);2401 if (reg < 0)2402 return reg;2403 if ((reg & PHY_EXTENDED_REGISTERS) != PHY_EXTENDED_REGISTERS)2404 return 0;2405 2406 for (i = ARRAY_SIZE(id) - 1; i >= 0; i--) {2407 reg = read_paged_phy_reg(ohci, 1, i + 10);2408 if (reg < 0)2409 return reg;2410 if (reg != id[i])2411 return 0;2412 }2413 return 1;2414}2415 2416static int ohci_enable(struct fw_card *card,2417 const __be32 *config_rom, size_t length)2418{2419 struct fw_ohci *ohci = fw_ohci(card);2420 u32 lps, version, irqs;2421 int i, ret;2422 2423 ret = software_reset(ohci);2424 if (ret < 0) {2425 ohci_err(ohci, "failed to reset ohci card\n");2426 return ret;2427 }2428 2429 /*2430 * Now enable LPS, which we need in order to start accessing2431 * most of the registers. In fact, on some cards (ALI M5251),2432 * accessing registers in the SClk domain without LPS enabled2433 * will lock up the machine. Wait 50msec to make sure we have2434 * full link enabled. However, with some cards (well, at least2435 * a JMicron PCIe card), we have to try again sometimes.2436 *2437 * TI TSB82AA2 + TSB81BA3(A) cards signal LPS enabled early but2438 * cannot actually use the phy at that time. These need tens of2439 * millisecods pause between LPS write and first phy access too.2440 */2441 2442 reg_write(ohci, OHCI1394_HCControlSet,2443 OHCI1394_HCControl_LPS |2444 OHCI1394_HCControl_postedWriteEnable);2445 flush_writes(ohci);2446 2447 for (lps = 0, i = 0; !lps && i < 3; i++) {2448 msleep(50);2449 lps = reg_read(ohci, OHCI1394_HCControlSet) &2450 OHCI1394_HCControl_LPS;2451 }2452 2453 if (!lps) {2454 ohci_err(ohci, "failed to set Link Power Status\n");2455 return -EIO;2456 }2457 2458 if (ohci->quirks & QUIRK_TI_SLLZ059) {2459 ret = probe_tsb41ba3d(ohci);2460 if (ret < 0)2461 return ret;2462 if (ret)2463 ohci_notice(ohci, "local TSB41BA3D phy\n");2464 else2465 ohci->quirks &= ~QUIRK_TI_SLLZ059;2466 }2467 2468 reg_write(ohci, OHCI1394_HCControlClear,2469 OHCI1394_HCControl_noByteSwapData);2470 2471 reg_write(ohci, OHCI1394_SelfIDBuffer, ohci->self_id_bus);2472 reg_write(ohci, OHCI1394_LinkControlSet,2473 OHCI1394_LinkControl_cycleTimerEnable |2474 OHCI1394_LinkControl_cycleMaster);2475 2476 reg_write(ohci, OHCI1394_ATRetries,2477 OHCI1394_MAX_AT_REQ_RETRIES |2478 (OHCI1394_MAX_AT_RESP_RETRIES << 4) |2479 (OHCI1394_MAX_PHYS_RESP_RETRIES << 8) |2480 (200 << 16));2481 2482 ohci->bus_time_running = false;2483 2484 for (i = 0; i < 32; i++)2485 if (ohci->ir_context_support & (1 << i))2486 reg_write(ohci, OHCI1394_IsoRcvContextControlClear(i),2487 IR_CONTEXT_MULTI_CHANNEL_MODE);2488 2489 version = reg_read(ohci, OHCI1394_Version) & 0x00ff00ff;2490 if (version >= OHCI_VERSION_1_1) {2491 reg_write(ohci, OHCI1394_InitialChannelsAvailableHi,2492 0xfffffffe);2493 card->broadcast_channel_auto_allocated = true;2494 }2495 2496 /* Get implemented bits of the priority arbitration request counter. */2497 reg_write(ohci, OHCI1394_FairnessControl, 0x3f);2498 ohci->pri_req_max = reg_read(ohci, OHCI1394_FairnessControl) & 0x3f;2499 reg_write(ohci, OHCI1394_FairnessControl, 0);2500 card->priority_budget_implemented = ohci->pri_req_max != 0;2501 2502 reg_write(ohci, OHCI1394_PhyUpperBound, FW_MAX_PHYSICAL_RANGE >> 16);2503 reg_write(ohci, OHCI1394_IntEventClear, ~0);2504 reg_write(ohci, OHCI1394_IntMaskClear, ~0);2505 2506 ret = configure_1394a_enhancements(ohci);2507 if (ret < 0)2508 return ret;2509 2510 /* Activate link_on bit and contender bit in our self ID packets.*/2511 ret = ohci_update_phy_reg(card, 4, 0, PHY_LINK_ACTIVE | PHY_CONTENDER);2512 if (ret < 0)2513 return ret;2514 2515 /*2516 * When the link is not yet enabled, the atomic config rom2517 * update mechanism described below in ohci_set_config_rom()2518 * is not active. We have to update ConfigRomHeader and2519 * BusOptions manually, and the write to ConfigROMmap takes2520 * effect immediately. We tie this to the enabling of the2521 * link, so we have a valid config rom before enabling - the2522 * OHCI requires that ConfigROMhdr and BusOptions have valid2523 * values before enabling.2524 *2525 * However, when the ConfigROMmap is written, some controllers2526 * always read back quadlets 0 and 2 from the config rom to2527 * the ConfigRomHeader and BusOptions registers on bus reset.2528 * They shouldn't do that in this initial case where the link2529 * isn't enabled. This means we have to use the same2530 * workaround here, setting the bus header to 0 and then write2531 * the right values in the bus reset tasklet.2532 */2533 2534 if (config_rom) {2535 ohci->next_config_rom = dmam_alloc_coherent(ohci->card.device, CONFIG_ROM_SIZE,2536 &ohci->next_config_rom_bus, GFP_KERNEL);2537 if (ohci->next_config_rom == NULL)2538 return -ENOMEM;2539 2540 copy_config_rom(ohci->next_config_rom, config_rom, length);2541 } else {2542 /*2543 * In the suspend case, config_rom is NULL, which2544 * means that we just reuse the old config rom.2545 */2546 ohci->next_config_rom = ohci->config_rom;2547 ohci->next_config_rom_bus = ohci->config_rom_bus;2548 }2549 2550 ohci->next_header = ohci->next_config_rom[0];2551 ohci->next_config_rom[0] = 0;2552 reg_write(ohci, OHCI1394_ConfigROMhdr, 0);2553 reg_write(ohci, OHCI1394_BusOptions,2554 be32_to_cpu(ohci->next_config_rom[2]));2555 reg_write(ohci, OHCI1394_ConfigROMmap, ohci->next_config_rom_bus);2556 2557 reg_write(ohci, OHCI1394_AsReqFilterHiSet, 0x80000000);2558 2559 irqs = OHCI1394_reqTxComplete | OHCI1394_respTxComplete |2560 OHCI1394_RQPkt | OHCI1394_RSPkt |2561 OHCI1394_isochTx | OHCI1394_isochRx |2562 OHCI1394_postedWriteErr |2563 OHCI1394_selfIDComplete |2564 OHCI1394_regAccessFail |2565 OHCI1394_cycleInconsistent |2566 OHCI1394_unrecoverableError |2567 OHCI1394_cycleTooLong |2568 OHCI1394_masterIntEnable |2569 OHCI1394_busReset;2570 reg_write(ohci, OHCI1394_IntMaskSet, irqs);2571 2572 reg_write(ohci, OHCI1394_HCControlSet,2573 OHCI1394_HCControl_linkEnable |2574 OHCI1394_HCControl_BIBimageValid);2575 2576 reg_write(ohci, OHCI1394_LinkControlSet,2577 OHCI1394_LinkControl_rcvSelfID |2578 OHCI1394_LinkControl_rcvPhyPkt);2579 2580 ar_context_run(&ohci->ar_request_ctx);2581 ar_context_run(&ohci->ar_response_ctx);2582 2583 flush_writes(ohci);2584 2585 /* We are ready to go, reset bus to finish initialization. */2586 fw_schedule_bus_reset(&ohci->card, false, true);2587 2588 return 0;2589}2590 2591static int ohci_set_config_rom(struct fw_card *card,2592 const __be32 *config_rom, size_t length)2593{2594 struct fw_ohci *ohci;2595 __be32 *next_config_rom;2596 dma_addr_t next_config_rom_bus;2597 2598 ohci = fw_ohci(card);2599 2600 /*2601 * When the OHCI controller is enabled, the config rom update2602 * mechanism is a bit tricky, but easy enough to use. See2603 * section 5.5.6 in the OHCI specification.2604 *2605 * The OHCI controller caches the new config rom address in a2606 * shadow register (ConfigROMmapNext) and needs a bus reset2607 * for the changes to take place. When the bus reset is2608 * detected, the controller loads the new values for the2609 * ConfigRomHeader and BusOptions registers from the specified2610 * config rom and loads ConfigROMmap from the ConfigROMmapNext2611 * shadow register. All automatically and atomically.2612 *2613 * Now, there's a twist to this story. The automatic load of2614 * ConfigRomHeader and BusOptions doesn't honor the2615 * noByteSwapData bit, so with a be32 config rom, the2616 * controller will load be32 values in to these registers2617 * during the atomic update, even on litte endian2618 * architectures. The workaround we use is to put a 0 in the2619 * header quadlet; 0 is endian agnostic and means that the2620 * config rom isn't ready yet. In the bus reset tasklet we2621 * then set up the real values for the two registers.2622 *2623 * We use ohci->lock to avoid racing with the code that sets2624 * ohci->next_config_rom to NULL (see bus_reset_work).2625 */2626 2627 next_config_rom = dmam_alloc_coherent(ohci->card.device, CONFIG_ROM_SIZE,2628 &next_config_rom_bus, GFP_KERNEL);2629 if (next_config_rom == NULL)2630 return -ENOMEM;2631 2632 scoped_guard(spinlock_irq, &ohci->lock) {2633 // If there is not an already pending config_rom update, push our new allocation2634 // into the ohci->next_config_rom and then mark the local variable as null so that2635 // we won't deallocate the new buffer.2636 //2637 // OTOH, if there is a pending config_rom update, just use that buffer with the new2638 // config_rom data, and let this routine free the unused DMA allocation.2639 if (ohci->next_config_rom == NULL) {2640 ohci->next_config_rom = next_config_rom;2641 ohci->next_config_rom_bus = next_config_rom_bus;2642 next_config_rom = NULL;2643 }2644 2645 copy_config_rom(ohci->next_config_rom, config_rom, length);2646 2647 ohci->next_header = config_rom[0];2648 ohci->next_config_rom[0] = 0;2649 2650 reg_write(ohci, OHCI1394_ConfigROMmap, ohci->next_config_rom_bus);2651 }2652 2653 /* If we didn't use the DMA allocation, delete it. */2654 if (next_config_rom != NULL) {2655 dmam_free_coherent(ohci->card.device, CONFIG_ROM_SIZE, next_config_rom,2656 next_config_rom_bus);2657 }2658 2659 /*2660 * Now initiate a bus reset to have the changes take2661 * effect. We clean up the old config rom memory and DMA2662 * mappings in the bus reset tasklet, since the OHCI2663 * controller could need to access it before the bus reset2664 * takes effect.2665 */2666 2667 fw_schedule_bus_reset(&ohci->card, true, true);2668 2669 return 0;2670}2671 2672static void ohci_send_request(struct fw_card *card, struct fw_packet *packet)2673{2674 struct fw_ohci *ohci = fw_ohci(card);2675 2676 at_context_transmit(&ohci->at_request_ctx, packet);2677}2678 2679static void ohci_send_response(struct fw_card *card, struct fw_packet *packet)2680{2681 struct fw_ohci *ohci = fw_ohci(card);2682 2683 at_context_transmit(&ohci->at_response_ctx, packet);2684}2685 2686static int ohci_cancel_packet(struct fw_card *card, struct fw_packet *packet)2687{2688 struct fw_ohci *ohci = fw_ohci(card);2689 struct context *ctx = &ohci->at_request_ctx;2690 struct driver_data *driver_data = packet->driver_data;2691 int ret = -ENOENT;2692 2693 tasklet_disable_in_atomic(&ctx->tasklet);2694 2695 if (packet->ack != 0)2696 goto out;2697 2698 if (packet->payload_mapped)2699 dma_unmap_single(ohci->card.device, packet->payload_bus,2700 packet->payload_length, DMA_TO_DEVICE);2701 2702 log_ar_at_event(ohci, 'T', packet->speed, packet->header, 0x20);2703 driver_data->packet = NULL;2704 packet->ack = RCODE_CANCELLED;2705 2706 // Timestamping on behalf of the hardware.2707 packet->timestamp = cycle_time_to_ohci_tstamp(get_cycle_time(ohci));2708 2709 packet->callback(packet, &ohci->card, packet->ack);2710 ret = 0;2711 out:2712 tasklet_enable(&ctx->tasklet);2713 2714 return ret;2715}2716 2717static int ohci_enable_phys_dma(struct fw_card *card,2718 int node_id, int generation)2719{2720 struct fw_ohci *ohci = fw_ohci(card);2721 int n, ret = 0;2722 2723 if (param_remote_dma)2724 return 0;2725 2726 /*2727 * FIXME: Make sure this bitmask is cleared when we clear the busReset2728 * interrupt bit. Clear physReqResourceAllBuses on bus reset.2729 */2730 2731 guard(spinlock_irqsave)(&ohci->lock);2732 2733 if (ohci->generation != generation)2734 return -ESTALE;2735 2736 /*2737 * Note, if the node ID contains a non-local bus ID, physical DMA is2738 * enabled for _all_ nodes on remote buses.2739 */2740 2741 n = (node_id & 0xffc0) == LOCAL_BUS ? node_id & 0x3f : 63;2742 if (n < 32)2743 reg_write(ohci, OHCI1394_PhyReqFilterLoSet, 1 << n);2744 else2745 reg_write(ohci, OHCI1394_PhyReqFilterHiSet, 1 << (n - 32));2746 2747 flush_writes(ohci);2748 2749 return ret;2750}2751 2752static u32 ohci_read_csr(struct fw_card *card, int csr_offset)2753{2754 struct fw_ohci *ohci = fw_ohci(card);2755 u32 value;2756 2757 switch (csr_offset) {2758 case CSR_STATE_CLEAR:2759 case CSR_STATE_SET:2760 if (ohci->is_root &&2761 (reg_read(ohci, OHCI1394_LinkControlSet) &2762 OHCI1394_LinkControl_cycleMaster))2763 value = CSR_STATE_BIT_CMSTR;2764 else2765 value = 0;2766 if (ohci->csr_state_setclear_abdicate)2767 value |= CSR_STATE_BIT_ABDICATE;2768 2769 return value;2770 2771 case CSR_NODE_IDS:2772 return reg_read(ohci, OHCI1394_NodeID) << 16;2773 2774 case CSR_CYCLE_TIME:2775 return get_cycle_time(ohci);2776 2777 case CSR_BUS_TIME:2778 {2779 // We might be called just after the cycle timer has wrapped around but just before2780 // the cycle64Seconds handler, so we better check here, too, if the bus time needs2781 // to be updated.2782 2783 guard(spinlock_irqsave)(&ohci->lock);2784 return update_bus_time(ohci);2785 }2786 case CSR_BUSY_TIMEOUT:2787 value = reg_read(ohci, OHCI1394_ATRetries);2788 return (value >> 4) & 0x0ffff00f;2789 2790 case CSR_PRIORITY_BUDGET:2791 return (reg_read(ohci, OHCI1394_FairnessControl) & 0x3f) |2792 (ohci->pri_req_max << 8);2793 2794 default:2795 WARN_ON(1);2796 return 0;2797 }2798}2799 2800static void ohci_write_csr(struct fw_card *card, int csr_offset, u32 value)2801{2802 struct fw_ohci *ohci = fw_ohci(card);2803 2804 switch (csr_offset) {2805 case CSR_STATE_CLEAR:2806 if ((value & CSR_STATE_BIT_CMSTR) && ohci->is_root) {2807 reg_write(ohci, OHCI1394_LinkControlClear,2808 OHCI1394_LinkControl_cycleMaster);2809 flush_writes(ohci);2810 }2811 if (value & CSR_STATE_BIT_ABDICATE)2812 ohci->csr_state_setclear_abdicate = false;2813 break;2814 2815 case CSR_STATE_SET:2816 if ((value & CSR_STATE_BIT_CMSTR) && ohci->is_root) {2817 reg_write(ohci, OHCI1394_LinkControlSet,2818 OHCI1394_LinkControl_cycleMaster);2819 flush_writes(ohci);2820 }2821 if (value & CSR_STATE_BIT_ABDICATE)2822 ohci->csr_state_setclear_abdicate = true;2823 break;2824 2825 case CSR_NODE_IDS:2826 reg_write(ohci, OHCI1394_NodeID, value >> 16);2827 flush_writes(ohci);2828 break;2829 2830 case CSR_CYCLE_TIME:2831 reg_write(ohci, OHCI1394_IsochronousCycleTimer, value);2832 reg_write(ohci, OHCI1394_IntEventSet,2833 OHCI1394_cycleInconsistent);2834 flush_writes(ohci);2835 break;2836 2837 case CSR_BUS_TIME:2838 {2839 guard(spinlock_irqsave)(&ohci->lock);2840 ohci->bus_time = (update_bus_time(ohci) & 0x40) | (value & ~0x7f);2841 break;2842 }2843 case CSR_BUSY_TIMEOUT:2844 value = (value & 0xf) | ((value & 0xf) << 4) |2845 ((value & 0xf) << 8) | ((value & 0x0ffff000) << 4);2846 reg_write(ohci, OHCI1394_ATRetries, value);2847 flush_writes(ohci);2848 break;2849 2850 case CSR_PRIORITY_BUDGET:2851 reg_write(ohci, OHCI1394_FairnessControl, value & 0x3f);2852 flush_writes(ohci);2853 break;2854 2855 default:2856 WARN_ON(1);2857 break;2858 }2859}2860 2861static void flush_iso_completions(struct iso_context *ctx, enum fw_iso_context_completions_cause cause)2862{2863 trace_isoc_inbound_single_completions(&ctx->base, ctx->last_timestamp, cause, ctx->header,2864 ctx->header_length);2865 trace_isoc_outbound_completions(&ctx->base, ctx->last_timestamp, cause, ctx->header,2866 ctx->header_length);2867 2868 ctx->base.callback.sc(&ctx->base, ctx->last_timestamp,2869 ctx->header_length, ctx->header,2870 ctx->base.callback_data);2871 ctx->header_length = 0;2872}2873 2874static void copy_iso_headers(struct iso_context *ctx, const u32 *dma_hdr)2875{2876 u32 *ctx_hdr;2877 2878 if (ctx->header_length + ctx->base.header_size > PAGE_SIZE) {2879 if (ctx->base.drop_overflow_headers)2880 return;2881 flush_iso_completions(ctx, FW_ISO_CONTEXT_COMPLETIONS_CAUSE_HEADER_OVERFLOW);2882 }2883 2884 ctx_hdr = ctx->header + ctx->header_length;2885 ctx->last_timestamp = (u16)le32_to_cpu((__force __le32)dma_hdr[0]);2886 2887 /*2888 * The two iso header quadlets are byteswapped to little2889 * endian by the controller, but we want to present them2890 * as big endian for consistency with the bus endianness.2891 */2892 if (ctx->base.header_size > 0)2893 ctx_hdr[0] = swab32(dma_hdr[1]); /* iso packet header */2894 if (ctx->base.header_size > 4)2895 ctx_hdr[1] = swab32(dma_hdr[0]); /* timestamp */2896 if (ctx->base.header_size > 8)2897 memcpy(&ctx_hdr[2], &dma_hdr[2], ctx->base.header_size - 8);2898 ctx->header_length += ctx->base.header_size;2899}2900 2901static int handle_ir_packet_per_buffer(struct context *context,2902 struct descriptor *d,2903 struct descriptor *last)2904{2905 struct iso_context *ctx =2906 container_of(context, struct iso_context, context);2907 struct descriptor *pd;2908 u32 buffer_dma;2909 2910 for (pd = d; pd <= last; pd++)2911 if (pd->transfer_status)2912 break;2913 if (pd > last)2914 /* Descriptor(s) not done yet, stop iteration */2915 return 0;2916 2917 while (!(d->control & cpu_to_le16(DESCRIPTOR_BRANCH_ALWAYS))) {2918 d++;2919 buffer_dma = le32_to_cpu(d->data_address);2920 dma_sync_single_range_for_cpu(context->ohci->card.device,2921 buffer_dma & PAGE_MASK,2922 buffer_dma & ~PAGE_MASK,2923 le16_to_cpu(d->req_count),2924 DMA_FROM_DEVICE);2925 }2926 2927 copy_iso_headers(ctx, (u32 *) (last + 1));2928 2929 if (last->control & cpu_to_le16(DESCRIPTOR_IRQ_ALWAYS))2930 flush_iso_completions(ctx, FW_ISO_CONTEXT_COMPLETIONS_CAUSE_INTERRUPT);2931 2932 return 1;2933}2934 2935/* d == last because each descriptor block is only a single descriptor. */2936static int handle_ir_buffer_fill(struct context *context,2937 struct descriptor *d,2938 struct descriptor *last)2939{2940 struct iso_context *ctx =2941 container_of(context, struct iso_context, context);2942 unsigned int req_count, res_count, completed;2943 u32 buffer_dma;2944 2945 req_count = le16_to_cpu(last->req_count);2946 res_count = le16_to_cpu(READ_ONCE(last->res_count));2947 completed = req_count - res_count;2948 buffer_dma = le32_to_cpu(last->data_address);2949 2950 if (completed > 0) {2951 ctx->mc_buffer_bus = buffer_dma;2952 ctx->mc_completed = completed;2953 }2954 2955 if (res_count != 0)2956 /* Descriptor(s) not done yet, stop iteration */2957 return 0;2958 2959 dma_sync_single_range_for_cpu(context->ohci->card.device,2960 buffer_dma & PAGE_MASK,2961 buffer_dma & ~PAGE_MASK,2962 completed, DMA_FROM_DEVICE);2963 2964 if (last->control & cpu_to_le16(DESCRIPTOR_IRQ_ALWAYS)) {2965 trace_isoc_inbound_multiple_completions(&ctx->base, completed,2966 FW_ISO_CONTEXT_COMPLETIONS_CAUSE_INTERRUPT);2967 2968 ctx->base.callback.mc(&ctx->base,2969 buffer_dma + completed,2970 ctx->base.callback_data);2971 ctx->mc_completed = 0;2972 }2973 2974 return 1;2975}2976 2977static void flush_ir_buffer_fill(struct iso_context *ctx)2978{2979 dma_sync_single_range_for_cpu(ctx->context.ohci->card.device,2980 ctx->mc_buffer_bus & PAGE_MASK,2981 ctx->mc_buffer_bus & ~PAGE_MASK,2982 ctx->mc_completed, DMA_FROM_DEVICE);2983 2984 trace_isoc_inbound_multiple_completions(&ctx->base, ctx->mc_completed,2985 FW_ISO_CONTEXT_COMPLETIONS_CAUSE_FLUSH);2986 2987 ctx->base.callback.mc(&ctx->base,2988 ctx->mc_buffer_bus + ctx->mc_completed,2989 ctx->base.callback_data);2990 ctx->mc_completed = 0;2991}2992 2993static inline void sync_it_packet_for_cpu(struct context *context,2994 struct descriptor *pd)2995{2996 __le16 control;2997 u32 buffer_dma;2998 2999 /* only packets beginning with OUTPUT_MORE* have data buffers */3000 if (pd->control & cpu_to_le16(DESCRIPTOR_BRANCH_ALWAYS))3001 return;3002 3003 /* skip over the OUTPUT_MORE_IMMEDIATE descriptor */3004 pd += 2;3005 3006 /*3007 * If the packet has a header, the first OUTPUT_MORE/LAST descriptor's3008 * data buffer is in the context program's coherent page and must not3009 * be synced.3010 */3011 if ((le32_to_cpu(pd->data_address) & PAGE_MASK) ==3012 (context->current_bus & PAGE_MASK)) {3013 if (pd->control & cpu_to_le16(DESCRIPTOR_BRANCH_ALWAYS))3014 return;3015 pd++;3016 }3017 3018 do {3019 buffer_dma = le32_to_cpu(pd->data_address);3020 dma_sync_single_range_for_cpu(context->ohci->card.device,3021 buffer_dma & PAGE_MASK,3022 buffer_dma & ~PAGE_MASK,3023 le16_to_cpu(pd->req_count),3024 DMA_TO_DEVICE);3025 control = pd->control;3026 pd++;3027 } while (!(control & cpu_to_le16(DESCRIPTOR_BRANCH_ALWAYS)));3028}3029 3030static int handle_it_packet(struct context *context,3031 struct descriptor *d,3032 struct descriptor *last)3033{3034 struct iso_context *ctx =3035 container_of(context, struct iso_context, context);3036 struct descriptor *pd;3037 __be32 *ctx_hdr;3038 3039 for (pd = d; pd <= last; pd++)3040 if (pd->transfer_status)3041 break;3042 if (pd > last)3043 /* Descriptor(s) not done yet, stop iteration */3044 return 0;3045 3046 sync_it_packet_for_cpu(context, d);3047 3048 if (ctx->header_length + 4 > PAGE_SIZE) {3049 if (ctx->base.drop_overflow_headers)3050 return 1;3051 flush_iso_completions(ctx, FW_ISO_CONTEXT_COMPLETIONS_CAUSE_HEADER_OVERFLOW);3052 }3053 3054 ctx_hdr = ctx->header + ctx->header_length;3055 ctx->last_timestamp = le16_to_cpu(last->res_count);3056 /* Present this value as big-endian to match the receive code */3057 *ctx_hdr = cpu_to_be32((le16_to_cpu(pd->transfer_status) << 16) |3058 le16_to_cpu(pd->res_count));3059 ctx->header_length += 4;3060 3061 if (last->control & cpu_to_le16(DESCRIPTOR_IRQ_ALWAYS))3062 flush_iso_completions(ctx, FW_ISO_CONTEXT_COMPLETIONS_CAUSE_INTERRUPT);3063 3064 return 1;3065}3066 3067static void set_multichannel_mask(struct fw_ohci *ohci, u64 channels)3068{3069 u32 hi = channels >> 32, lo = channels;3070 3071 reg_write(ohci, OHCI1394_IRMultiChanMaskHiClear, ~hi);3072 reg_write(ohci, OHCI1394_IRMultiChanMaskLoClear, ~lo);3073 reg_write(ohci, OHCI1394_IRMultiChanMaskHiSet, hi);3074 reg_write(ohci, OHCI1394_IRMultiChanMaskLoSet, lo);3075 ohci->mc_channels = channels;3076}3077 3078static struct fw_iso_context *ohci_allocate_iso_context(struct fw_card *card,3079 int type, int channel, size_t header_size)3080{3081 struct fw_ohci *ohci = fw_ohci(card);3082 struct iso_context *ctx;3083 descriptor_callback_t callback;3084 u64 *channels;3085 u32 *mask, regs;3086 int index, ret = -EBUSY;3087 3088 scoped_guard(spinlock_irq, &ohci->lock) {3089 switch (type) {3090 case FW_ISO_CONTEXT_TRANSMIT:3091 mask = &ohci->it_context_mask;3092 callback = handle_it_packet;3093 index = ffs(*mask) - 1;3094 if (index >= 0) {3095 *mask &= ~(1 << index);3096 regs = OHCI1394_IsoXmitContextBase(index);3097 ctx = &ohci->it_context_list[index];3098 }3099 break;3100 3101 case FW_ISO_CONTEXT_RECEIVE:3102 channels = &ohci->ir_context_channels;3103 mask = &ohci->ir_context_mask;3104 callback = handle_ir_packet_per_buffer;3105 index = *channels & 1ULL << channel ? ffs(*mask) - 1 : -1;3106 if (index >= 0) {3107 *channels &= ~(1ULL << channel);3108 *mask &= ~(1 << index);3109 regs = OHCI1394_IsoRcvContextBase(index);3110 ctx = &ohci->ir_context_list[index];3111 }3112 break;3113 3114 case FW_ISO_CONTEXT_RECEIVE_MULTICHANNEL:3115 mask = &ohci->ir_context_mask;3116 callback = handle_ir_buffer_fill;3117 index = !ohci->mc_allocated ? ffs(*mask) - 1 : -1;3118 if (index >= 0) {3119 ohci->mc_allocated = true;3120 *mask &= ~(1 << index);3121 regs = OHCI1394_IsoRcvContextBase(index);3122 ctx = &ohci->ir_context_list[index];3123 }3124 break;3125 3126 default:3127 index = -1;3128 ret = -ENOSYS;3129 }3130 3131 if (index < 0)3132 return ERR_PTR(ret);3133 }3134 3135 memset(ctx, 0, sizeof(*ctx));3136 ctx->header_length = 0;3137 ctx->header = (void *) __get_free_page(GFP_KERNEL);3138 if (ctx->header == NULL) {3139 ret = -ENOMEM;3140 goto out;3141 }3142 ret = context_init(&ctx->context, ohci, regs, callback);3143 if (ret < 0)3144 goto out_with_header;3145 fw_iso_context_init_work(&ctx->base, ohci_isoc_context_work);3146 3147 if (type == FW_ISO_CONTEXT_RECEIVE_MULTICHANNEL) {3148 set_multichannel_mask(ohci, 0);3149 ctx->mc_completed = 0;3150 }3151 3152 return &ctx->base;3153 3154 out_with_header:3155 free_page((unsigned long)ctx->header);3156 out:3157 scoped_guard(spinlock_irq, &ohci->lock) {3158 switch (type) {3159 case FW_ISO_CONTEXT_RECEIVE:3160 *channels |= 1ULL << channel;3161 break;3162 3163 case FW_ISO_CONTEXT_RECEIVE_MULTICHANNEL:3164 ohci->mc_allocated = false;3165 break;3166 }3167 *mask |= 1 << index;3168 }3169 3170 return ERR_PTR(ret);3171}3172 3173static int ohci_start_iso(struct fw_iso_context *base,3174 s32 cycle, u32 sync, u32 tags)3175{3176 struct iso_context *ctx = container_of(base, struct iso_context, base);3177 struct fw_ohci *ohci = ctx->context.ohci;3178 u32 control = IR_CONTEXT_ISOCH_HEADER, match;3179 int index;3180 3181 /* the controller cannot start without any queued packets */3182 if (ctx->context.last->branch_address == 0)3183 return -ENODATA;3184 3185 switch (ctx->base.type) {3186 case FW_ISO_CONTEXT_TRANSMIT:3187 index = ctx - ohci->it_context_list;3188 match = 0;3189 if (cycle >= 0)3190 match = IT_CONTEXT_CYCLE_MATCH_ENABLE |3191 (cycle & 0x7fff) << 16;3192 3193 reg_write(ohci, OHCI1394_IsoXmitIntEventClear, 1 << index);3194 reg_write(ohci, OHCI1394_IsoXmitIntMaskSet, 1 << index);3195 context_run(&ctx->context, match);3196 break;3197 3198 case FW_ISO_CONTEXT_RECEIVE_MULTICHANNEL:3199 control |= IR_CONTEXT_BUFFER_FILL|IR_CONTEXT_MULTI_CHANNEL_MODE;3200 fallthrough;3201 case FW_ISO_CONTEXT_RECEIVE:3202 index = ctx - ohci->ir_context_list;3203 match = (tags << 28) | (sync << 8) | ctx->base.channel;3204 if (cycle >= 0) {3205 match |= (cycle & 0x07fff) << 12;3206 control |= IR_CONTEXT_CYCLE_MATCH_ENABLE;3207 }3208 3209 reg_write(ohci, OHCI1394_IsoRecvIntEventClear, 1 << index);3210 reg_write(ohci, OHCI1394_IsoRecvIntMaskSet, 1 << index);3211 reg_write(ohci, CONTEXT_MATCH(ctx->context.regs), match);3212 context_run(&ctx->context, control);3213 3214 ctx->sync = sync;3215 ctx->tags = tags;3216 3217 break;3218 }3219 3220 return 0;3221}3222 3223static int ohci_stop_iso(struct fw_iso_context *base)3224{3225 struct fw_ohci *ohci = fw_ohci(base->card);3226 struct iso_context *ctx = container_of(base, struct iso_context, base);3227 int index;3228 3229 switch (ctx->base.type) {3230 case FW_ISO_CONTEXT_TRANSMIT:3231 index = ctx - ohci->it_context_list;3232 reg_write(ohci, OHCI1394_IsoXmitIntMaskClear, 1 << index);3233 break;3234 3235 case FW_ISO_CONTEXT_RECEIVE:3236 case FW_ISO_CONTEXT_RECEIVE_MULTICHANNEL:3237 index = ctx - ohci->ir_context_list;3238 reg_write(ohci, OHCI1394_IsoRecvIntMaskClear, 1 << index);3239 break;3240 }3241 flush_writes(ohci);3242 context_stop(&ctx->context);3243 3244 return 0;3245}3246 3247static void ohci_free_iso_context(struct fw_iso_context *base)3248{3249 struct fw_ohci *ohci = fw_ohci(base->card);3250 struct iso_context *ctx = container_of(base, struct iso_context, base);3251 int index;3252 3253 ohci_stop_iso(base);3254 context_release(&ctx->context);3255 free_page((unsigned long)ctx->header);3256 3257 guard(spinlock_irqsave)(&ohci->lock);3258 3259 switch (base->type) {3260 case FW_ISO_CONTEXT_TRANSMIT:3261 index = ctx - ohci->it_context_list;3262 ohci->it_context_mask |= 1 << index;3263 break;3264 3265 case FW_ISO_CONTEXT_RECEIVE:3266 index = ctx - ohci->ir_context_list;3267 ohci->ir_context_mask |= 1 << index;3268 ohci->ir_context_channels |= 1ULL << base->channel;3269 break;3270 3271 case FW_ISO_CONTEXT_RECEIVE_MULTICHANNEL:3272 index = ctx - ohci->ir_context_list;3273 ohci->ir_context_mask |= 1 << index;3274 ohci->ir_context_channels |= ohci->mc_channels;3275 ohci->mc_channels = 0;3276 ohci->mc_allocated = false;3277 break;3278 }3279}3280 3281static int ohci_set_iso_channels(struct fw_iso_context *base, u64 *channels)3282{3283 struct fw_ohci *ohci = fw_ohci(base->card);3284 3285 switch (base->type) {3286 case FW_ISO_CONTEXT_RECEIVE_MULTICHANNEL:3287 {3288 guard(spinlock_irqsave)(&ohci->lock);3289 3290 // Don't allow multichannel to grab other contexts' channels.3291 if (~ohci->ir_context_channels & ~ohci->mc_channels & *channels) {3292 *channels = ohci->ir_context_channels;3293 return -EBUSY;3294 } else {3295 set_multichannel_mask(ohci, *channels);3296 return 0;3297 }3298 }3299 default:3300 return -EINVAL;3301 }3302}3303 3304#ifdef CONFIG_PM3305static void ohci_resume_iso_dma(struct fw_ohci *ohci)3306{3307 int i;3308 struct iso_context *ctx;3309 3310 for (i = 0 ; i < ohci->n_ir ; i++) {3311 ctx = &ohci->ir_context_list[i];3312 if (ctx->context.running)3313 ohci_start_iso(&ctx->base, 0, ctx->sync, ctx->tags);3314 }3315 3316 for (i = 0 ; i < ohci->n_it ; i++) {3317 ctx = &ohci->it_context_list[i];3318 if (ctx->context.running)3319 ohci_start_iso(&ctx->base, 0, ctx->sync, ctx->tags);3320 }3321}3322#endif3323 3324static int queue_iso_transmit(struct iso_context *ctx,3325 struct fw_iso_packet *packet,3326 struct fw_iso_buffer *buffer,3327 unsigned long payload)3328{3329 struct descriptor *d, *last, *pd;3330 struct fw_iso_packet *p;3331 __le32 *header;3332 dma_addr_t d_bus, page_bus;3333 u32 z, header_z, payload_z, irq;3334 u32 payload_index, payload_end_index, next_page_index;3335 int page, end_page, i, length, offset;3336 3337 p = packet;3338 payload_index = payload;3339 3340 if (p->skip)3341 z = 1;3342 else3343 z = 2;3344 if (p->header_length > 0)3345 z++;3346 3347 /* Determine the first page the payload isn't contained in. */3348 end_page = PAGE_ALIGN(payload_index + p->payload_length) >> PAGE_SHIFT;3349 if (p->payload_length > 0)3350 payload_z = end_page - (payload_index >> PAGE_SHIFT);3351 else3352 payload_z = 0;3353 3354 z += payload_z;3355 3356 /* Get header size in number of descriptors. */3357 header_z = DIV_ROUND_UP(p->header_length, sizeof(*d));3358 3359 d = context_get_descriptors(&ctx->context, z + header_z, &d_bus);3360 if (d == NULL)3361 return -ENOMEM;3362 3363 if (!p->skip) {3364 d[0].control = cpu_to_le16(DESCRIPTOR_KEY_IMMEDIATE);3365 d[0].req_count = cpu_to_le16(8);3366 /*3367 * Link the skip address to this descriptor itself. This causes3368 * a context to skip a cycle whenever lost cycles or FIFO3369 * overruns occur, without dropping the data. The application3370 * should then decide whether this is an error condition or not.3371 * FIXME: Make the context's cycle-lost behaviour configurable?3372 */3373 d[0].branch_address = cpu_to_le32(d_bus | z);3374 3375 header = (__le32 *) &d[1];3376 3377 ohci1394_it_data_set_speed(header, ctx->base.speed);3378 ohci1394_it_data_set_tag(header, p->tag);3379 ohci1394_it_data_set_channel(header, ctx->base.channel);3380 ohci1394_it_data_set_tcode(header, TCODE_STREAM_DATA);3381 ohci1394_it_data_set_sync(header, p->sy);3382 3383 ohci1394_it_data_set_data_length(header, p->header_length + p->payload_length);3384 }3385 3386 if (p->header_length > 0) {3387 d[2].req_count = cpu_to_le16(p->header_length);3388 d[2].data_address = cpu_to_le32(d_bus + z * sizeof(*d));3389 memcpy(&d[z], p->header, p->header_length);3390 }3391 3392 pd = d + z - payload_z;3393 payload_end_index = payload_index + p->payload_length;3394 for (i = 0; i < payload_z; i++) {3395 page = payload_index >> PAGE_SHIFT;3396 offset = payload_index & ~PAGE_MASK;3397 next_page_index = (page + 1) << PAGE_SHIFT;3398 length =3399 min(next_page_index, payload_end_index) - payload_index;3400 pd[i].req_count = cpu_to_le16(length);3401 3402 page_bus = page_private(buffer->pages[page]);3403 pd[i].data_address = cpu_to_le32(page_bus + offset);3404 3405 dma_sync_single_range_for_device(ctx->context.ohci->card.device,3406 page_bus, offset, length,3407 DMA_TO_DEVICE);3408 3409 payload_index += length;3410 }3411 3412 if (p->interrupt)3413 irq = DESCRIPTOR_IRQ_ALWAYS;3414 else3415 irq = DESCRIPTOR_NO_IRQ;3416 3417 last = z == 2 ? d : d + z - 1;3418 last->control |= cpu_to_le16(DESCRIPTOR_OUTPUT_LAST |3419 DESCRIPTOR_STATUS |3420 DESCRIPTOR_BRANCH_ALWAYS |3421 irq);3422 3423 context_append(&ctx->context, d, z, header_z);3424 3425 return 0;3426}3427 3428static int queue_iso_packet_per_buffer(struct iso_context *ctx,3429 struct fw_iso_packet *packet,3430 struct fw_iso_buffer *buffer,3431 unsigned long payload)3432{3433 struct device *device = ctx->context.ohci->card.device;3434 struct descriptor *d, *pd;3435 dma_addr_t d_bus, page_bus;3436 u32 z, header_z, rest;3437 int i, j, length;3438 int page, offset, packet_count, header_size, payload_per_buffer;3439 3440 /*3441 * The OHCI controller puts the isochronous header and trailer in the3442 * buffer, so we need at least 8 bytes.3443 */3444 packet_count = packet->header_length / ctx->base.header_size;3445 header_size = max(ctx->base.header_size, (size_t)8);3446 3447 /* Get header size in number of descriptors. */3448 header_z = DIV_ROUND_UP(header_size, sizeof(*d));3449 page = payload >> PAGE_SHIFT;3450 offset = payload & ~PAGE_MASK;3451 payload_per_buffer = packet->payload_length / packet_count;3452 3453 for (i = 0; i < packet_count; i++) {3454 /* d points to the header descriptor */3455 z = DIV_ROUND_UP(payload_per_buffer + offset, PAGE_SIZE) + 1;3456 d = context_get_descriptors(&ctx->context,3457 z + header_z, &d_bus);3458 if (d == NULL)3459 return -ENOMEM;3460 3461 d->control = cpu_to_le16(DESCRIPTOR_STATUS |3462 DESCRIPTOR_INPUT_MORE);3463 if (packet->skip && i == 0)3464 d->control |= cpu_to_le16(DESCRIPTOR_WAIT);3465 d->req_count = cpu_to_le16(header_size);3466 d->res_count = d->req_count;3467 d->transfer_status = 0;3468 d->data_address = cpu_to_le32(d_bus + (z * sizeof(*d)));3469 3470 rest = payload_per_buffer;3471 pd = d;3472 for (j = 1; j < z; j++) {3473 pd++;3474 pd->control = cpu_to_le16(DESCRIPTOR_STATUS |3475 DESCRIPTOR_INPUT_MORE);3476 3477 if (offset + rest < PAGE_SIZE)3478 length = rest;3479 else3480 length = PAGE_SIZE - offset;3481 pd->req_count = cpu_to_le16(length);3482 pd->res_count = pd->req_count;3483 pd->transfer_status = 0;3484 3485 page_bus = page_private(buffer->pages[page]);3486 pd->data_address = cpu_to_le32(page_bus + offset);3487 3488 dma_sync_single_range_for_device(device, page_bus,3489 offset, length,3490 DMA_FROM_DEVICE);3491 3492 offset = (offset + length) & ~PAGE_MASK;3493 rest -= length;3494 if (offset == 0)3495 page++;3496 }3497 pd->control = cpu_to_le16(DESCRIPTOR_STATUS |3498 DESCRIPTOR_INPUT_LAST |3499 DESCRIPTOR_BRANCH_ALWAYS);3500 if (packet->interrupt && i == packet_count - 1)3501 pd->control |= cpu_to_le16(DESCRIPTOR_IRQ_ALWAYS);3502 3503 context_append(&ctx->context, d, z, header_z);3504 }3505 3506 return 0;3507}3508 3509static int queue_iso_buffer_fill(struct iso_context *ctx,3510 struct fw_iso_packet *packet,3511 struct fw_iso_buffer *buffer,3512 unsigned long payload)3513{3514 struct descriptor *d;3515 dma_addr_t d_bus, page_bus;3516 int page, offset, rest, z, i, length;3517 3518 page = payload >> PAGE_SHIFT;3519 offset = payload & ~PAGE_MASK;3520 rest = packet->payload_length;3521 3522 /* We need one descriptor for each page in the buffer. */3523 z = DIV_ROUND_UP(offset + rest, PAGE_SIZE);3524 3525 if (WARN_ON(offset & 3 || rest & 3 || page + z > buffer->page_count))3526 return -EFAULT;3527 3528 for (i = 0; i < z; i++) {3529 d = context_get_descriptors(&ctx->context, 1, &d_bus);3530 if (d == NULL)3531 return -ENOMEM;3532 3533 d->control = cpu_to_le16(DESCRIPTOR_INPUT_MORE |3534 DESCRIPTOR_BRANCH_ALWAYS);3535 if (packet->skip && i == 0)3536 d->control |= cpu_to_le16(DESCRIPTOR_WAIT);3537 if (packet->interrupt && i == z - 1)3538 d->control |= cpu_to_le16(DESCRIPTOR_IRQ_ALWAYS);3539 3540 if (offset + rest < PAGE_SIZE)3541 length = rest;3542 else3543 length = PAGE_SIZE - offset;3544 d->req_count = cpu_to_le16(length);3545 d->res_count = d->req_count;3546 d->transfer_status = 0;3547 3548 page_bus = page_private(buffer->pages[page]);3549 d->data_address = cpu_to_le32(page_bus + offset);3550 3551 dma_sync_single_range_for_device(ctx->context.ohci->card.device,3552 page_bus, offset, length,3553 DMA_FROM_DEVICE);3554 3555 rest -= length;3556 offset = 0;3557 page++;3558 3559 context_append(&ctx->context, d, 1, 0);3560 }3561 3562 return 0;3563}3564 3565static int ohci_queue_iso(struct fw_iso_context *base,3566 struct fw_iso_packet *packet,3567 struct fw_iso_buffer *buffer,3568 unsigned long payload)3569{3570 struct iso_context *ctx = container_of(base, struct iso_context, base);3571 3572 guard(spinlock_irqsave)(&ctx->context.ohci->lock);3573 3574 switch (base->type) {3575 case FW_ISO_CONTEXT_TRANSMIT:3576 return queue_iso_transmit(ctx, packet, buffer, payload);3577 case FW_ISO_CONTEXT_RECEIVE:3578 return queue_iso_packet_per_buffer(ctx, packet, buffer, payload);3579 case FW_ISO_CONTEXT_RECEIVE_MULTICHANNEL:3580 return queue_iso_buffer_fill(ctx, packet, buffer, payload);3581 default:3582 return -ENOSYS;3583 }3584}3585 3586static void ohci_flush_queue_iso(struct fw_iso_context *base)3587{3588 struct context *ctx =3589 &container_of(base, struct iso_context, base)->context;3590 3591 reg_write(ctx->ohci, CONTROL_SET(ctx->regs), CONTEXT_WAKE);3592}3593 3594static int ohci_flush_iso_completions(struct fw_iso_context *base)3595{3596 struct iso_context *ctx = container_of(base, struct iso_context, base);3597 int ret = 0;3598 3599 if (!test_and_set_bit_lock(0, &ctx->flushing_completions)) {3600 ohci_isoc_context_work(&base->work);3601 3602 switch (base->type) {3603 case FW_ISO_CONTEXT_TRANSMIT:3604 case FW_ISO_CONTEXT_RECEIVE:3605 if (ctx->header_length != 0)3606 flush_iso_completions(ctx, FW_ISO_CONTEXT_COMPLETIONS_CAUSE_FLUSH);3607 break;3608 case FW_ISO_CONTEXT_RECEIVE_MULTICHANNEL:3609 if (ctx->mc_completed != 0)3610 flush_ir_buffer_fill(ctx);3611 break;3612 default:3613 ret = -ENOSYS;3614 }3615 3616 clear_bit_unlock(0, &ctx->flushing_completions);3617 smp_mb__after_atomic();3618 }3619 3620 return ret;3621}3622 3623static const struct fw_card_driver ohci_driver = {3624 .enable = ohci_enable,3625 .read_phy_reg = ohci_read_phy_reg,3626 .update_phy_reg = ohci_update_phy_reg,3627 .set_config_rom = ohci_set_config_rom,3628 .send_request = ohci_send_request,3629 .send_response = ohci_send_response,3630 .cancel_packet = ohci_cancel_packet,3631 .enable_phys_dma = ohci_enable_phys_dma,3632 .read_csr = ohci_read_csr,3633 .write_csr = ohci_write_csr,3634 3635 .allocate_iso_context = ohci_allocate_iso_context,3636 .free_iso_context = ohci_free_iso_context,3637 .set_iso_channels = ohci_set_iso_channels,3638 .queue_iso = ohci_queue_iso,3639 .flush_queue_iso = ohci_flush_queue_iso,3640 .flush_iso_completions = ohci_flush_iso_completions,3641 .start_iso = ohci_start_iso,3642 .stop_iso = ohci_stop_iso,3643};3644 3645#ifdef CONFIG_PPC_PMAC3646static void pmac_ohci_on(struct pci_dev *dev)3647{3648 if (machine_is(powermac)) {3649 struct device_node *ofn = pci_device_to_OF_node(dev);3650 3651 if (ofn) {3652 pmac_call_feature(PMAC_FTR_1394_CABLE_POWER, ofn, 0, 1);3653 pmac_call_feature(PMAC_FTR_1394_ENABLE, ofn, 0, 1);3654 }3655 }3656}3657 3658static void pmac_ohci_off(struct pci_dev *dev)3659{3660 if (machine_is(powermac)) {3661 struct device_node *ofn = pci_device_to_OF_node(dev);3662 3663 if (ofn) {3664 pmac_call_feature(PMAC_FTR_1394_ENABLE, ofn, 0, 0);3665 pmac_call_feature(PMAC_FTR_1394_CABLE_POWER, ofn, 0, 0);3666 }3667 }3668}3669#else3670static inline void pmac_ohci_on(struct pci_dev *dev) {}3671static inline void pmac_ohci_off(struct pci_dev *dev) {}3672#endif /* CONFIG_PPC_PMAC */3673 3674static void release_ohci(struct device *dev, void *data)3675{3676 struct pci_dev *pdev = to_pci_dev(dev);3677 struct fw_ohci *ohci = pci_get_drvdata(pdev);3678 3679 pmac_ohci_off(pdev);3680 3681 ar_context_release(&ohci->ar_response_ctx);3682 ar_context_release(&ohci->ar_request_ctx);3683 3684 dev_notice(dev, "removed fw-ohci device\n");3685}3686 3687static int pci_probe(struct pci_dev *dev,3688 const struct pci_device_id *ent)3689{3690 struct fw_ohci *ohci;3691 u32 bus_options, max_receive, link_speed, version;3692 u64 guid;3693 int i, flags, irq, err;3694 size_t size;3695 3696 if (dev->vendor == PCI_VENDOR_ID_PINNACLE_SYSTEMS) {3697 dev_err(&dev->dev, "Pinnacle MovieBoard is not yet supported\n");3698 return -ENOSYS;3699 }3700 3701 ohci = devres_alloc(release_ohci, sizeof(*ohci), GFP_KERNEL);3702 if (ohci == NULL)3703 return -ENOMEM;3704 fw_card_initialize(&ohci->card, &ohci_driver, &dev->dev);3705 pci_set_drvdata(dev, ohci);3706 pmac_ohci_on(dev);3707 devres_add(&dev->dev, ohci);3708 3709 err = pcim_enable_device(dev);3710 if (err) {3711 dev_err(&dev->dev, "failed to enable OHCI hardware\n");3712 return err;3713 }3714 3715 pci_set_master(dev);3716 pci_write_config_dword(dev, OHCI1394_PCI_HCI_Control, 0);3717 3718 spin_lock_init(&ohci->lock);3719 mutex_init(&ohci->phy_reg_mutex);3720 3721 INIT_WORK(&ohci->bus_reset_work, bus_reset_work);3722 3723 if (!(pci_resource_flags(dev, 0) & IORESOURCE_MEM) ||3724 pci_resource_len(dev, 0) < OHCI1394_REGISTER_SIZE) {3725 ohci_err(ohci, "invalid MMIO resource\n");3726 return -ENXIO;3727 }3728 3729 err = pcim_iomap_regions(dev, 1 << 0, ohci_driver_name);3730 if (err) {3731 ohci_err(ohci, "request and map MMIO resource unavailable\n");3732 return -ENXIO;3733 }3734 ohci->registers = pcim_iomap_table(dev)[0];3735 3736 for (i = 0; i < ARRAY_SIZE(ohci_quirks); i++)3737 if ((ohci_quirks[i].vendor == dev->vendor) &&3738 (ohci_quirks[i].device == (unsigned short)PCI_ANY_ID ||3739 ohci_quirks[i].device == dev->device) &&3740 (ohci_quirks[i].revision == (unsigned short)PCI_ANY_ID ||3741 ohci_quirks[i].revision >= dev->revision)) {3742 ohci->quirks = ohci_quirks[i].flags;3743 break;3744 }3745 if (param_quirks)3746 ohci->quirks = param_quirks;3747 3748 if (detect_vt630x_with_asm1083_on_amd_ryzen_machine(dev))3749 ohci->quirks |= QUIRK_REBOOT_BY_CYCLE_TIMER_READ;3750 3751 /*3752 * Because dma_alloc_coherent() allocates at least one page,3753 * we save space by using a common buffer for the AR request/3754 * response descriptors and the self IDs buffer.3755 */3756 BUILD_BUG_ON(AR_BUFFERS * sizeof(struct descriptor) > PAGE_SIZE/4);3757 BUILD_BUG_ON(SELF_ID_BUF_SIZE > PAGE_SIZE/2);3758 ohci->misc_buffer = dmam_alloc_coherent(&dev->dev, PAGE_SIZE, &ohci->misc_buffer_bus,3759 GFP_KERNEL);3760 if (!ohci->misc_buffer)3761 return -ENOMEM;3762 3763 err = ar_context_init(&ohci->ar_request_ctx, ohci, 0,3764 OHCI1394_AsReqRcvContextControlSet);3765 if (err < 0)3766 return err;3767 3768 err = ar_context_init(&ohci->ar_response_ctx, ohci, PAGE_SIZE/4,3769 OHCI1394_AsRspRcvContextControlSet);3770 if (err < 0)3771 return err;3772 3773 err = context_init(&ohci->at_request_ctx, ohci,3774 OHCI1394_AsReqTrContextControlSet, handle_at_packet);3775 if (err < 0)3776 return err;3777 3778 err = context_init(&ohci->at_response_ctx, ohci,3779 OHCI1394_AsRspTrContextControlSet, handle_at_packet);3780 if (err < 0)3781 return err;3782 3783 reg_write(ohci, OHCI1394_IsoRecvIntMaskSet, ~0);3784 ohci->ir_context_channels = ~0ULL;3785 ohci->ir_context_support = reg_read(ohci, OHCI1394_IsoRecvIntMaskSet);3786 reg_write(ohci, OHCI1394_IsoRecvIntMaskClear, ~0);3787 ohci->ir_context_mask = ohci->ir_context_support;3788 ohci->n_ir = hweight32(ohci->ir_context_mask);3789 size = sizeof(struct iso_context) * ohci->n_ir;3790 ohci->ir_context_list = devm_kzalloc(&dev->dev, size, GFP_KERNEL);3791 if (!ohci->ir_context_list)3792 return -ENOMEM;3793 3794 reg_write(ohci, OHCI1394_IsoXmitIntMaskSet, ~0);3795 ohci->it_context_support = reg_read(ohci, OHCI1394_IsoXmitIntMaskSet);3796 /* JMicron JMB38x often shows 0 at first read, just ignore it */3797 if (!ohci->it_context_support) {3798 ohci_notice(ohci, "overriding IsoXmitIntMask\n");3799 ohci->it_context_support = 0xf;3800 }3801 reg_write(ohci, OHCI1394_IsoXmitIntMaskClear, ~0);3802 ohci->it_context_mask = ohci->it_context_support;3803 ohci->n_it = hweight32(ohci->it_context_mask);3804 size = sizeof(struct iso_context) * ohci->n_it;3805 ohci->it_context_list = devm_kzalloc(&dev->dev, size, GFP_KERNEL);3806 if (!ohci->it_context_list)3807 return -ENOMEM;3808 3809 ohci->self_id = ohci->misc_buffer + PAGE_SIZE/2;3810 ohci->self_id_bus = ohci->misc_buffer_bus + PAGE_SIZE/2;3811 3812 bus_options = reg_read(ohci, OHCI1394_BusOptions);3813 max_receive = (bus_options >> 12) & 0xf;3814 link_speed = bus_options & 0x7;3815 guid = ((u64) reg_read(ohci, OHCI1394_GUIDHi) << 32) |3816 reg_read(ohci, OHCI1394_GUIDLo);3817 3818 flags = PCI_IRQ_INTX;3819 if (!(ohci->quirks & QUIRK_NO_MSI))3820 flags |= PCI_IRQ_MSI;3821 err = pci_alloc_irq_vectors(dev, 1, 1, flags);3822 if (err < 0)3823 return err;3824 irq = pci_irq_vector(dev, 0);3825 if (irq < 0) {3826 err = irq;3827 goto fail_msi;3828 }3829 3830 err = request_threaded_irq(irq, irq_handler, NULL,3831 pci_dev_msi_enabled(dev) ? 0 : IRQF_SHARED, ohci_driver_name,3832 ohci);3833 if (err < 0) {3834 ohci_err(ohci, "failed to allocate interrupt %d\n", irq);3835 goto fail_msi;3836 }3837 3838 err = fw_card_add(&ohci->card, max_receive, link_speed, guid, ohci->n_it + ohci->n_ir);3839 if (err)3840 goto fail_irq;3841 3842 version = reg_read(ohci, OHCI1394_Version) & 0x00ff00ff;3843 ohci_notice(ohci,3844 "added OHCI v%x.%x device as card %d, "3845 "%d IR + %d IT contexts, quirks 0x%x%s\n",3846 version >> 16, version & 0xff, ohci->card.index,3847 ohci->n_ir, ohci->n_it, ohci->quirks,3848 reg_read(ohci, OHCI1394_PhyUpperBound) ?3849 ", physUB" : "");3850 3851 return 0;3852 3853 fail_irq:3854 free_irq(irq, ohci);3855 fail_msi:3856 pci_free_irq_vectors(dev);3857 3858 return err;3859}3860 3861static void pci_remove(struct pci_dev *dev)3862{3863 struct fw_ohci *ohci = pci_get_drvdata(dev);3864 int irq;3865 3866 /*3867 * If the removal is happening from the suspend state, LPS won't be3868 * enabled and host registers (eg., IntMaskClear) won't be accessible.3869 */3870 if (reg_read(ohci, OHCI1394_HCControlSet) & OHCI1394_HCControl_LPS) {3871 reg_write(ohci, OHCI1394_IntMaskClear, ~0);3872 flush_writes(ohci);3873 }3874 cancel_work_sync(&ohci->bus_reset_work);3875 fw_core_remove_card(&ohci->card);3876 3877 /*3878 * FIXME: Fail all pending packets here, now that the upper3879 * layers can't queue any more.3880 */3881 3882 software_reset(ohci);3883 3884 irq = pci_irq_vector(dev, 0);3885 if (irq >= 0)3886 free_irq(irq, ohci);3887 pci_free_irq_vectors(dev);3888 3889 dev_notice(&dev->dev, "removing fw-ohci device\n");3890}3891 3892#ifdef CONFIG_PM3893static int pci_suspend(struct pci_dev *dev, pm_message_t state)3894{3895 struct fw_ohci *ohci = pci_get_drvdata(dev);3896 int err;3897 3898 software_reset(ohci);3899 err = pci_save_state(dev);3900 if (err) {3901 ohci_err(ohci, "pci_save_state failed\n");3902 return err;3903 }3904 err = pci_set_power_state(dev, pci_choose_state(dev, state));3905 if (err)3906 ohci_err(ohci, "pci_set_power_state failed with %d\n", err);3907 pmac_ohci_off(dev);3908 3909 return 0;3910}3911 3912static int pci_resume(struct pci_dev *dev)3913{3914 struct fw_ohci *ohci = pci_get_drvdata(dev);3915 int err;3916 3917 pmac_ohci_on(dev);3918 pci_set_power_state(dev, PCI_D0);3919 pci_restore_state(dev);3920 err = pci_enable_device(dev);3921 if (err) {3922 ohci_err(ohci, "pci_enable_device failed\n");3923 return err;3924 }3925 3926 /* Some systems don't setup GUID register on resume from ram */3927 if (!reg_read(ohci, OHCI1394_GUIDLo) &&3928 !reg_read(ohci, OHCI1394_GUIDHi)) {3929 reg_write(ohci, OHCI1394_GUIDLo, (u32)ohci->card.guid);3930 reg_write(ohci, OHCI1394_GUIDHi, (u32)(ohci->card.guid >> 32));3931 }3932 3933 err = ohci_enable(&ohci->card, NULL, 0);3934 if (err)3935 return err;3936 3937 ohci_resume_iso_dma(ohci);3938 3939 return 0;3940}3941#endif3942 3943static const struct pci_device_id pci_table[] = {3944 { PCI_DEVICE_CLASS(PCI_CLASS_SERIAL_FIREWIRE_OHCI, ~0) },3945 { }3946};3947 3948MODULE_DEVICE_TABLE(pci, pci_table);3949 3950static struct pci_driver fw_ohci_pci_driver = {3951 .name = ohci_driver_name,3952 .id_table = pci_table,3953 .probe = pci_probe,3954 .remove = pci_remove,3955#ifdef CONFIG_PM3956 .resume = pci_resume,3957 .suspend = pci_suspend,3958#endif3959};3960 3961static int __init fw_ohci_init(void)3962{3963 selfid_workqueue = alloc_workqueue(KBUILD_MODNAME, WQ_MEM_RECLAIM, 0);3964 if (!selfid_workqueue)3965 return -ENOMEM;3966 3967 return pci_register_driver(&fw_ohci_pci_driver);3968}3969 3970static void __exit fw_ohci_cleanup(void)3971{3972 pci_unregister_driver(&fw_ohci_pci_driver);3973 destroy_workqueue(selfid_workqueue);3974}3975 3976module_init(fw_ohci_init);3977module_exit(fw_ohci_cleanup);3978 3979MODULE_AUTHOR("Kristian Hoegsberg <krh@bitplanet.net>");3980MODULE_DESCRIPTION("Driver for PCI OHCI IEEE1394 controllers");3981MODULE_LICENSE("GPL");3982 3983/* Provide a module alias so root-on-sbp2 initrds don't break. */3984MODULE_ALIAS("ohci1394");3985