Lines Matching refs:card
30 static int _softing_fct_cmd(struct softing *card, int16_t cmd, uint16_t vector, in _softing_fct_cmd() argument
36 iowrite16(cmd, &card->dpram[DPRAM_FCT_PARAM]); in _softing_fct_cmd()
37 iowrite8(vector >> 8, &card->dpram[DPRAM_FCT_HOST + 1]); in _softing_fct_cmd()
38 iowrite8(vector, &card->dpram[DPRAM_FCT_HOST]); in _softing_fct_cmd()
45 ret = ioread8(&card->dpram[DPRAM_FCT_HOST]) + in _softing_fct_cmd()
46 (ioread8(&card->dpram[DPRAM_FCT_HOST + 1]) << 8); in _softing_fct_cmd()
51 return ioread16(&card->dpram[DPRAM_FCT_RESULT]); in _softing_fct_cmd()
60 dev_alert(&card->pdev->dev, "firmware %s failed (%i)\n", msg, ret); in _softing_fct_cmd()
64 static int softing_fct_cmd(struct softing *card, int16_t cmd, const char *msg) in softing_fct_cmd() argument
68 ret = _softing_fct_cmd(card, cmd, 0, msg); in softing_fct_cmd()
70 dev_alert(&card->pdev->dev, "%s returned %u\n", msg, ret); in softing_fct_cmd()
76 int softing_bootloader_command(struct softing *card, int16_t cmd, in softing_bootloader_command() argument
82 iowrite16(RES_NONE, &card->dpram[DPRAM_RECEIPT]); in softing_bootloader_command()
83 iowrite16(cmd, &card->dpram[DPRAM_COMMAND]); in softing_bootloader_command()
89 ret = ioread16(&card->dpram[DPRAM_RECEIPT]); in softing_bootloader_command()
101 dev_alert(&card->pdev->dev, "bootloader %s failed (%i)\n", msg, ret); in softing_bootloader_command()
144 int softing_load_fw(const char *file, struct softing *card, in softing_load_fw() argument
156 ret = request_firmware(&fw, file, &card->pdev->dev); in softing_load_fw()
159 dev_dbg(&card->pdev->dev, "%s, firmware(%s) got %u bytes" in softing_load_fw()
161 card->pdat->name, file, (unsigned int)fw->size, in softing_load_fw()
212 dev_alert(&card->pdev->dev, "DPRAM readback failed\n"); in softing_load_fw()
225 dev_info(&card->pdev->dev, "firmware %s failed\n", file); in softing_load_fw()
229 int softing_load_app_fw(const char *file, struct softing *card) in softing_load_app_fw() argument
239 ret = request_firmware(&fw, file, &card->pdev->dev); in softing_load_app_fw()
241 dev_alert(&card->pdev->dev, "request_firmware(%s) got %i\n", in softing_load_app_fw()
245 dev_dbg(&card->pdev->dev, "firmware(%s) got %lu bytes\n", in softing_load_app_fw()
256 dev_alert(&card->pdev->dev, "firmware starts with type 0x%x\n", in softing_load_app_fw()
261 dev_alert(&card->pdev->dev, "firmware string '%.*s' fault\n", in softing_load_app_fw()
281 dev_alert(&card->pdev->dev, in softing_load_app_fw()
293 memcpy_toio(&card->dpram[card->pdat->app.offs], dat, len); in softing_load_app_fw()
294 iowrite32(card->pdat->app.offs + card->pdat->app.addr, in softing_load_app_fw()
295 &card->dpram[DPRAM_COMMAND + 2]); in softing_load_app_fw()
296 iowrite32(addr, &card->dpram[DPRAM_COMMAND + 6]); in softing_load_app_fw()
297 iowrite16(len, &card->dpram[DPRAM_COMMAND + 10]); in softing_load_app_fw()
298 iowrite8(1, &card->dpram[DPRAM_COMMAND + 12]); in softing_load_app_fw()
299 ret = softing_bootloader_command(card, 1, "loading app."); in softing_load_app_fw()
303 rx_sum = ioread16(&card->dpram[DPRAM_RECEIPT + 2]); in softing_load_app_fw()
305 dev_alert(&card->pdev->dev, "SRAM seems to be damaged" in softing_load_app_fw()
314 iowrite32(start_addr, &card->dpram[DPRAM_COMMAND + 2]); in softing_load_app_fw()
315 iowrite8(1, &card->dpram[DPRAM_COMMAND + 6]); in softing_load_app_fw()
316 ret = softing_bootloader_command(card, 3, "start app."); in softing_load_app_fw()
323 dev_info(&card->pdev->dev, "firmware %s failed\n", file); in softing_load_app_fw()
327 static int softing_reset_chip(struct softing *card) in softing_reset_chip() argument
333 iowrite8(0, &card->dpram[DPRAM_RESET_RX_FIFO]); in softing_reset_chip()
334 iowrite8(0, &card->dpram[DPRAM_RESET_RX_FIFO+1]); in softing_reset_chip()
335 iowrite8(1, &card->dpram[DPRAM_RESET]); in softing_reset_chip()
336 iowrite8(0, &card->dpram[DPRAM_RESET+1]); in softing_reset_chip()
338 ret = softing_fct_cmd(card, 0, "reset_can"); in softing_reset_chip()
345 card->tx.pending = 0; in softing_reset_chip()
349 int softing_chip_poweron(struct softing *card) in softing_chip_poweron() argument
353 ret = _softing_fct_cmd(card, 99, 0x55, "sync-a"); in softing_chip_poweron()
357 ret = _softing_fct_cmd(card, 99, 0xaa, "sync-b"); in softing_chip_poweron()
361 ret = softing_reset_chip(card); in softing_chip_poweron()
365 ret = softing_fct_cmd(card, 43, "get_serial_number"); in softing_chip_poweron()
368 card->id.serial = ioread32(&card->dpram[DPRAM_FCT_PARAM]); in softing_chip_poweron()
370 ret = softing_fct_cmd(card, 12, "get_version"); in softing_chip_poweron()
373 card->id.fw_version = ioread16(&card->dpram[DPRAM_FCT_PARAM + 2]); in softing_chip_poweron()
374 card->id.hw_version = ioread16(&card->dpram[DPRAM_FCT_PARAM + 4]); in softing_chip_poweron()
375 card->id.license = ioread16(&card->dpram[DPRAM_FCT_PARAM + 6]); in softing_chip_poweron()
376 card->id.chip[0] = ioread16(&card->dpram[DPRAM_FCT_PARAM + 8]); in softing_chip_poweron()
377 card->id.chip[1] = ioread16(&card->dpram[DPRAM_FCT_PARAM + 10]); in softing_chip_poweron()
383 static void softing_initialize_timestamp(struct softing *card) in softing_initialize_timestamp() argument
387 card->ts_ref = ktime_get(); in softing_initialize_timestamp()
391 do_div(ovf, card->pdat->freq ?: 16); in softing_initialize_timestamp()
393 card->ts_overflow = ktime_add_us(ktime_set(0, 0), ovf); in softing_initialize_timestamp()
396 ktime_t softing_raw2ktime(struct softing *card, u32 raw) in softing_raw2ktime() argument
408 do_div(rawl, card->pdat->freq ?: 16); in softing_raw2ktime()
409 target = ktime_add_us(card->ts_ref, rawl); in softing_raw2ktime()
411 tmp = ktime_add(target, card->ts_overflow); in softing_raw2ktime()
413 card->ts_ref = ktime_add(card->ts_ref, card->ts_overflow); in softing_raw2ktime()
415 tmp = ktime_add(target, card->ts_overflow); in softing_raw2ktime()
431 struct softing *card; in softing_startstop() local
440 card = priv->card; in softing_startstop()
442 if (!card->fw.up) in softing_startstop()
445 ret = mutex_lock_interruptible(&card->fw.lock); in softing_startstop()
454 for (j = 0; j < ARRAY_SIZE(card->net); ++j) { in softing_startstop()
455 netdev = card->net[j]; in softing_startstop()
481 card->tx.pending = 0; in softing_startstop()
483 softing_enable_irq(card, 0); in softing_startstop()
484 ret = softing_reset_chip(card); in softing_startstop()
492 && (softing_error_reporting(card->net[0]) in softing_startstop()
493 != softing_error_reporting(card->net[1]))) { in softing_startstop()
494 dev_alert(&card->pdev->dev, in softing_startstop()
500 netdev = card->net[0]; in softing_startstop()
505 iowrite16(bt->brp, &card->dpram[DPRAM_FCT_PARAM + 2]); in softing_startstop()
506 iowrite16(bt->sjw, &card->dpram[DPRAM_FCT_PARAM + 4]); in softing_startstop()
508 &card->dpram[DPRAM_FCT_PARAM + 6]); in softing_startstop()
509 iowrite16(bt->phase_seg2, &card->dpram[DPRAM_FCT_PARAM + 8]); in softing_startstop()
511 &card->dpram[DPRAM_FCT_PARAM + 10]); in softing_startstop()
512 ret = softing_fct_cmd(card, 1, "initialize_chip[0]"); in softing_startstop()
516 iowrite16(0, &card->dpram[DPRAM_FCT_PARAM + 2]); in softing_startstop()
517 iowrite16(0, &card->dpram[DPRAM_FCT_PARAM + 4]); in softing_startstop()
518 ret = softing_fct_cmd(card, 3, "set_mode[0]"); in softing_startstop()
523 iowrite16(0x0000, &card->dpram[DPRAM_FCT_PARAM + 2]); in softing_startstop()
524 iowrite16(0x07ff, &card->dpram[DPRAM_FCT_PARAM + 4]); in softing_startstop()
526 iowrite16(0x0000, &card->dpram[DPRAM_FCT_PARAM + 6]); in softing_startstop()
527 iowrite16(0xffff, &card->dpram[DPRAM_FCT_PARAM + 8]); in softing_startstop()
528 iowrite16(0x0000, &card->dpram[DPRAM_FCT_PARAM + 10]); in softing_startstop()
529 iowrite16(0x1fff, &card->dpram[DPRAM_FCT_PARAM + 12]); in softing_startstop()
530 ret = softing_fct_cmd(card, 7, "set_filter[0]"); in softing_startstop()
534 iowrite16(priv->output, &card->dpram[DPRAM_FCT_PARAM + 2]); in softing_startstop()
535 ret = softing_fct_cmd(card, 5, "set_output[0]"); in softing_startstop()
540 netdev = card->net[1]; in softing_startstop()
545 iowrite16(bt->brp, &card->dpram[DPRAM_FCT_PARAM + 2]); in softing_startstop()
546 iowrite16(bt->sjw, &card->dpram[DPRAM_FCT_PARAM + 4]); in softing_startstop()
548 &card->dpram[DPRAM_FCT_PARAM + 6]); in softing_startstop()
549 iowrite16(bt->phase_seg2, &card->dpram[DPRAM_FCT_PARAM + 8]); in softing_startstop()
551 &card->dpram[DPRAM_FCT_PARAM + 10]); in softing_startstop()
552 ret = softing_fct_cmd(card, 2, "initialize_chip[1]"); in softing_startstop()
556 iowrite16(0, &card->dpram[DPRAM_FCT_PARAM + 2]); in softing_startstop()
557 iowrite16(0, &card->dpram[DPRAM_FCT_PARAM + 4]); in softing_startstop()
558 ret = softing_fct_cmd(card, 4, "set_mode[1]"); in softing_startstop()
563 iowrite16(0x0000, &card->dpram[DPRAM_FCT_PARAM + 2]); in softing_startstop()
564 iowrite16(0x07ff, &card->dpram[DPRAM_FCT_PARAM + 4]); in softing_startstop()
566 iowrite16(0x0000, &card->dpram[DPRAM_FCT_PARAM + 6]); in softing_startstop()
567 iowrite16(0xffff, &card->dpram[DPRAM_FCT_PARAM + 8]); in softing_startstop()
568 iowrite16(0x0000, &card->dpram[DPRAM_FCT_PARAM + 10]); in softing_startstop()
569 iowrite16(0x1fff, &card->dpram[DPRAM_FCT_PARAM + 12]); in softing_startstop()
570 ret = softing_fct_cmd(card, 8, "set_filter[1]"); in softing_startstop()
574 iowrite16(priv->output, &card->dpram[DPRAM_FCT_PARAM + 2]); in softing_startstop()
575 ret = softing_fct_cmd(card, 6, "set_output[1]"); in softing_startstop()
592 iowrite16(1, &card->dpram[DPRAM_FCT_PARAM + 2]); in softing_startstop()
593 iowrite16(1, &card->dpram[DPRAM_FCT_PARAM + 4]); in softing_startstop()
594 iowrite16(1, &card->dpram[DPRAM_FCT_PARAM + 6]); in softing_startstop()
595 iowrite16(1, &card->dpram[DPRAM_FCT_PARAM + 8]); in softing_startstop()
596 iowrite16(1, &card->dpram[DPRAM_FCT_PARAM + 10]); in softing_startstop()
597 iowrite16(1, &card->dpram[DPRAM_FCT_PARAM + 12]); in softing_startstop()
598 iowrite16(1, &card->dpram[DPRAM_FCT_PARAM + 14]); in softing_startstop()
599 iowrite16(1, &card->dpram[DPRAM_FCT_PARAM + 16]); in softing_startstop()
600 iowrite16(1, &card->dpram[DPRAM_FCT_PARAM + 18]); in softing_startstop()
601 iowrite16(1, &card->dpram[DPRAM_FCT_PARAM + 20]); in softing_startstop()
602 ret = softing_fct_cmd(card, 17, "initialize_interface"); in softing_startstop()
606 ret = softing_fct_cmd(card, 36, "enable_fifo"); in softing_startstop()
610 ret = softing_fct_cmd(card, 13, "fifo_tx_ack[0]"); in softing_startstop()
614 ret = softing_fct_cmd(card, 14, "fifo_tx_ack[1]"); in softing_startstop()
618 ret = softing_fct_cmd(card, 11, "start_chip"); in softing_startstop()
621 iowrite8(0, &card->dpram[DPRAM_INFO_BUSSTATE]); in softing_startstop()
622 iowrite8(0, &card->dpram[DPRAM_INFO_BUSSTATE2]); in softing_startstop()
623 if (card->pdat->generation < 2) { in softing_startstop()
624 iowrite8(0, &card->dpram[DPRAM_V2_IRQ_TOHOST]); in softing_startstop()
629 softing_initialize_timestamp(card); in softing_startstop()
639 for (j = 0; j < ARRAY_SIZE(card->net); ++j) { in softing_startstop()
642 netdev = card->net[j]; in softing_startstop()
657 ret = softing_enable_irq(card, 1); in softing_startstop()
661 mutex_unlock(&card->fw.lock); in softing_startstop()
666 softing_enable_irq(card, 0); in softing_startstop()
667 softing_reset_chip(card); in softing_startstop()
668 mutex_unlock(&card->fw.lock); in softing_startstop()
670 for (j = 0; j < ARRAY_SIZE(card->net); ++j) { in softing_startstop()
671 netdev = card->net[j]; in softing_startstop()
682 struct softing *card = priv->card; in softing_default_output() local
686 return (card->pdat->generation < 2) ? 0xfb : 0xfa; in softing_default_output()