Lines Matching refs:card
17 * Make sure that card->dpram[DPRAM_FCT_HOST] is preset
19 static int _softing_fct_cmd(struct softing *card, int16_t cmd, uint16_t vector,
25 iowrite16(cmd, &card->dpram[DPRAM_FCT_PARAM]);
26 iowrite8(vector >> 8, &card->dpram[DPRAM_FCT_HOST + 1]);
27 iowrite8(vector, &card->dpram[DPRAM_FCT_HOST]);
28 /* be sure to flush this to the card */
31 /* wait for card */
34 ret = ioread8(&card->dpram[DPRAM_FCT_HOST]) +
35 (ioread8(&card->dpram[DPRAM_FCT_HOST + 1]) << 8);
40 return ioread16(&card->dpram[DPRAM_FCT_RESULT]);
49 dev_alert(&card->pdev->dev, "firmware %s failed (%i)\n", msg, ret);
53 static int softing_fct_cmd(struct softing *card, int16_t cmd, const char *msg)
57 ret = _softing_fct_cmd(card, cmd, 0, msg);
59 dev_alert(&card->pdev->dev, "%s returned %u\n", msg, ret);
65 int softing_bootloader_command(struct softing *card, int16_t cmd,
71 iowrite16(RES_NONE, &card->dpram[DPRAM_RECEIPT]);
72 iowrite16(cmd, &card->dpram[DPRAM_COMMAND]);
73 /* be sure to flush this to the card */
76 /* wait for card */
78 ret = ioread16(&card->dpram[DPRAM_RECEIPT]);
90 dev_alert(&card->pdev->dev, "bootloader %s failed (%i)\n", msg, ret);
133 int softing_load_fw(const char *file, struct softing *card,
145 ret = request_firmware(&fw, file, &card->pdev->dev);
148 dev_dbg(&card->pdev->dev, "%s, firmware(%s) got %u bytes"
150 card->pdat->name, file, (unsigned int)fw->size,
201 dev_alert(&card->pdev->dev, "DPRAM readback failed\n");
214 dev_info(&card->pdev->dev, "firmware %s failed\n", file);
218 int softing_load_app_fw(const char *file, struct softing *card)
228 ret = request_firmware(&fw, file, &card->pdev->dev);
230 dev_alert(&card->pdev->dev, "request_firmware(%s) got %i\n",
234 dev_dbg(&card->pdev->dev, "firmware(%s) got %lu bytes\n",
245 dev_alert(&card->pdev->dev, "firmware starts with type 0x%x\n",
250 dev_alert(&card->pdev->dev, "firmware string '%.*s' fault\n",
270 dev_alert(&card->pdev->dev,
282 memcpy_toio(&card->dpram[card->pdat->app.offs], dat, len);
283 iowrite32(card->pdat->app.offs + card->pdat->app.addr,
284 &card->dpram[DPRAM_COMMAND + 2]);
285 iowrite32(addr, &card->dpram[DPRAM_COMMAND + 6]);
286 iowrite16(len, &card->dpram[DPRAM_COMMAND + 10]);
287 iowrite8(1, &card->dpram[DPRAM_COMMAND + 12]);
288 ret = softing_bootloader_command(card, 1, "loading app.");
292 rx_sum = ioread16(&card->dpram[DPRAM_RECEIPT + 2]);
294 dev_alert(&card->pdev->dev, "SRAM seems to be damaged"
302 /* start application in card */
303 iowrite32(start_addr, &card->dpram[DPRAM_COMMAND + 2]);
304 iowrite8(1, &card->dpram[DPRAM_COMMAND + 6]);
305 ret = softing_bootloader_command(card, 3, "start app.");
312 dev_info(&card->pdev->dev, "firmware %s failed\n", file);
316 static int softing_reset_chip(struct softing *card)
322 iowrite8(0, &card->dpram[DPRAM_RESET_RX_FIFO]);
323 iowrite8(0, &card->dpram[DPRAM_RESET_RX_FIFO+1]);
324 iowrite8(1, &card->dpram[DPRAM_RESET]);
325 iowrite8(0, &card->dpram[DPRAM_RESET+1]);
327 ret = softing_fct_cmd(card, 0, "reset_can");
334 card->tx.pending = 0;
338 int softing_chip_poweron(struct softing *card)
342 ret = _softing_fct_cmd(card, 99, 0x55, "sync-a");
346 ret = _softing_fct_cmd(card, 99, 0xaa, "sync-b");
350 ret = softing_reset_chip(card);
354 ret = softing_fct_cmd(card, 43, "get_serial_number");
357 card->id.serial = ioread32(&card->dpram[DPRAM_FCT_PARAM]);
359 ret = softing_fct_cmd(card, 12, "get_version");
362 card->id.fw_version = ioread16(&card->dpram[DPRAM_FCT_PARAM + 2]);
363 card->id.hw_version = ioread16(&card->dpram[DPRAM_FCT_PARAM + 4]);
364 card->id.license = ioread16(&card->dpram[DPRAM_FCT_PARAM + 6]);
365 card->id.chip[0] = ioread16(&card->dpram[DPRAM_FCT_PARAM + 8]);
366 card->id.chip[1] = ioread16(&card->dpram[DPRAM_FCT_PARAM + 10]);
372 static void softing_initialize_timestamp(struct softing *card)
376 card->ts_ref = ktime_get();
380 do_div(ovf, card->pdat->freq ?: 16);
382 card->ts_overflow = ktime_add_us(0, ovf);
385 ktime_t softing_raw2ktime(struct softing *card, u32 raw)
395 /* find nsec from card */
397 do_div(rawl, card->pdat->freq ?: 16);
398 target = ktime_add_us(card->ts_ref, rawl);
400 tmp = ktime_add(target, card->ts_overflow);
402 card->ts_ref = ktime_add(card->ts_ref, card->ts_overflow);
404 tmp = ktime_add(target, card->ts_overflow);
420 struct softing *card;
429 card = priv->card;
431 if (!card->fw.up)
434 ret = mutex_lock_interruptible(&card->fw.lock);
443 for (j = 0; j < ARRAY_SIZE(card->net); ++j) {
444 netdev = card->net[j];
470 card->tx.pending = 0;
472 softing_enable_irq(card, 0);
473 ret = softing_reset_chip(card);
481 && (softing_error_reporting(card->net[0])
482 != softing_error_reporting(card->net[1]))) {
483 dev_alert(&card->pdev->dev,
489 netdev = card->net[0];
494 iowrite16(bt->brp, &card->dpram[DPRAM_FCT_PARAM + 2]);
495 iowrite16(bt->sjw, &card->dpram[DPRAM_FCT_PARAM + 4]);
497 &card->dpram[DPRAM_FCT_PARAM + 6]);
498 iowrite16(bt->phase_seg2, &card->dpram[DPRAM_FCT_PARAM + 8]);
500 &card->dpram[DPRAM_FCT_PARAM + 10]);
501 ret = softing_fct_cmd(card, 1, "initialize_chip[0]");
505 iowrite16(0, &card->dpram[DPRAM_FCT_PARAM + 2]);
506 iowrite16(0, &card->dpram[DPRAM_FCT_PARAM + 4]);
507 ret = softing_fct_cmd(card, 3, "set_mode[0]");
512 iowrite16(0x0000, &card->dpram[DPRAM_FCT_PARAM + 2]);
513 iowrite16(0x07ff, &card->dpram[DPRAM_FCT_PARAM + 4]);
515 iowrite16(0x0000, &card->dpram[DPRAM_FCT_PARAM + 6]);
516 iowrite16(0xffff, &card->dpram[DPRAM_FCT_PARAM + 8]);
517 iowrite16(0x0000, &card->dpram[DPRAM_FCT_PARAM + 10]);
518 iowrite16(0x1fff, &card->dpram[DPRAM_FCT_PARAM + 12]);
519 ret = softing_fct_cmd(card, 7, "set_filter[0]");
523 iowrite16(priv->output, &card->dpram[DPRAM_FCT_PARAM + 2]);
524 ret = softing_fct_cmd(card, 5, "set_output[0]");
529 netdev = card->net[1];
534 iowrite16(bt->brp, &card->dpram[DPRAM_FCT_PARAM + 2]);
535 iowrite16(bt->sjw, &card->dpram[DPRAM_FCT_PARAM + 4]);
537 &card->dpram[DPRAM_FCT_PARAM + 6]);
538 iowrite16(bt->phase_seg2, &card->dpram[DPRAM_FCT_PARAM + 8]);
540 &card->dpram[DPRAM_FCT_PARAM + 10]);
541 ret = softing_fct_cmd(card, 2, "initialize_chip[1]");
545 iowrite16(0, &card->dpram[DPRAM_FCT_PARAM + 2]);
546 iowrite16(0, &card->dpram[DPRAM_FCT_PARAM + 4]);
547 ret = softing_fct_cmd(card, 4, "set_mode[1]");
552 iowrite16(0x0000, &card->dpram[DPRAM_FCT_PARAM + 2]);
553 iowrite16(0x07ff, &card->dpram[DPRAM_FCT_PARAM + 4]);
555 iowrite16(0x0000, &card->dpram[DPRAM_FCT_PARAM + 6]);
556 iowrite16(0xffff, &card->dpram[DPRAM_FCT_PARAM + 8]);
557 iowrite16(0x0000, &card->dpram[DPRAM_FCT_PARAM + 10]);
558 iowrite16(0x1fff, &card->dpram[DPRAM_FCT_PARAM + 12]);
559 ret = softing_fct_cmd(card, 8, "set_filter[1]");
563 iowrite16(priv->output, &card->dpram[DPRAM_FCT_PARAM + 2]);
564 ret = softing_fct_cmd(card, 6, "set_output[1]");
576 ret = softing_fct_cmd(card, 51, "enable_error_frame");
582 iowrite16(1, &card->dpram[DPRAM_FCT_PARAM + 2]);
583 iowrite16(1, &card->dpram[DPRAM_FCT_PARAM + 4]);
584 iowrite16(1, &card->dpram[DPRAM_FCT_PARAM + 6]);
585 iowrite16(1, &card->dpram[DPRAM_FCT_PARAM + 8]);
586 iowrite16(1, &card->dpram[DPRAM_FCT_PARAM + 10]);
587 iowrite16(1, &card->dpram[DPRAM_FCT_PARAM + 12]);
588 iowrite16(1, &card->dpram[DPRAM_FCT_PARAM + 14]);
589 iowrite16(1, &card->dpram[DPRAM_FCT_PARAM + 16]);
590 iowrite16(1, &card->dpram[DPRAM_FCT_PARAM + 18]);
591 iowrite16(1, &card->dpram[DPRAM_FCT_PARAM + 20]);
592 ret = softing_fct_cmd(card, 17, "initialize_interface");
596 ret = softing_fct_cmd(card, 36, "enable_fifo");
600 ret = softing_fct_cmd(card, 13, "fifo_tx_ack[0]");
604 ret = softing_fct_cmd(card, 14, "fifo_tx_ack[1]");
608 ret = softing_fct_cmd(card, 11, "start_chip");
611 iowrite8(0, &card->dpram[DPRAM_INFO_BUSSTATE]);
612 iowrite8(0, &card->dpram[DPRAM_INFO_BUSSTATE2]);
613 if (card->pdat->generation < 2) {
614 iowrite8(0, &card->dpram[DPRAM_V2_IRQ_TOHOST]);
619 softing_initialize_timestamp(card);
629 for (j = 0; j < ARRAY_SIZE(card->net); ++j) {
632 netdev = card->net[j];
647 ret = softing_enable_irq(card, 1);
651 mutex_unlock(&card->fw.lock);
656 softing_enable_irq(card, 0);
657 softing_reset_chip(card);
658 mutex_unlock(&card->fw.lock);
660 for (j = 0; j < ARRAY_SIZE(card->net); ++j) {
661 netdev = card->net[j];
672 struct softing *card = priv->card;
676 return (card->pdat->generation < 2) ? 0xfb : 0xfa;