1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Copyright (C) 2008-2010 4 * 5 * - Kurt Van Dijck, EIA Electronics 6 */ 7 8 #include <linux/firmware.h> 9 #include <linux/sched/signal.h> 10 #include <asm/div64.h> 11 #include <asm/io.h> 12 13 #include "softing.h" 14 15 /* 16 * low level DPRAM command. 17 * Make sure that card->dpram[DPRAM_FCT_HOST] is preset 18 */ 19 static int _softing_fct_cmd(struct softing *card, int16_t cmd, uint16_t vector, 20 const char *msg) 21 { 22 int ret; 23 unsigned long stamp; 24 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 */ 29 wmb(); 30 stamp = jiffies + 1 * HZ; 31 /* wait for card */ 32 do { 33 /* DPRAM_FCT_HOST is _not_ aligned */ 34 ret = ioread8(&card->dpram[DPRAM_FCT_HOST]) + 35 (ioread8(&card->dpram[DPRAM_FCT_HOST + 1]) << 8); 36 /* don't have any cached variables */ 37 rmb(); 38 if (ret == RES_OK) 39 /* read return-value now */ 40 return ioread16(&card->dpram[DPRAM_FCT_RESULT]); 41 42 if ((ret != vector) || time_after(jiffies, stamp)) 43 break; 44 /* process context => relax */ 45 usleep_range(500, 10000); 46 } while (1); 47 48 ret = (ret == RES_NONE) ? -ETIMEDOUT : -ECANCELED; 49 dev_alert(&card->pdev->dev, "firmware %s failed (%i)\n", msg, ret); 50 return ret; 51 } 52 53 static int softing_fct_cmd(struct softing *card, int16_t cmd, const char *msg) 54 { 55 int ret; 56 57 ret = _softing_fct_cmd(card, cmd, 0, msg); 58 if (ret > 0) { 59 dev_alert(&card->pdev->dev, "%s returned %u\n", msg, ret); 60 ret = -EIO; 61 } 62 return ret; 63 } 64 65 int softing_bootloader_command(struct softing *card, int16_t cmd, 66 const char *msg) 67 { 68 int ret; 69 unsigned long stamp; 70 71 iowrite16(RES_NONE, &card->dpram[DPRAM_RECEIPT]); 72 iowrite16(cmd, &card->dpram[DPRAM_COMMAND]); 73 /* be sure to flush this to the card */ 74 wmb(); 75 stamp = jiffies + 3 * HZ; 76 /* wait for card */ 77 do { 78 ret = ioread16(&card->dpram[DPRAM_RECEIPT]); 79 /* don't have any cached variables */ 80 rmb(); 81 if (ret == RES_OK) 82 return 0; 83 if (time_after(jiffies, stamp)) 84 break; 85 /* process context => relax */ 86 usleep_range(500, 10000); 87 } while (!signal_pending(current)); 88 89 ret = (ret == RES_NONE) ? -ETIMEDOUT : -ECANCELED; 90 dev_alert(&card->pdev->dev, "bootloader %s failed (%i)\n", msg, ret); 91 return ret; 92 } 93 94 static int fw_parse(const uint8_t **pmem, uint16_t *ptype, uint32_t *paddr, 95 uint16_t *plen, const uint8_t **pdat) 96 { 97 uint16_t checksum[2]; 98 const uint8_t *mem; 99 const uint8_t *end; 100 101 /* 102 * firmware records are a binary, unaligned stream composed of: 103 * uint16_t type; 104 * uint32_t addr; 105 * uint16_t len; 106 * uint8_t dat[len]; 107 * uint16_t checksum; 108 * all values in little endian. 109 * We could define a struct for this, with __attribute__((packed)), 110 * but would that solve the alignment in _all_ cases (cfr. the 111 * struct itself may be an odd address)? 112 * 113 * I chose to use leXX_to_cpup() since this solves both 114 * endianness & alignment. 115 */ 116 mem = *pmem; 117 *ptype = le16_to_cpup((void *)&mem[0]); 118 *paddr = le32_to_cpup((void *)&mem[2]); 119 *plen = le16_to_cpup((void *)&mem[6]); 120 *pdat = &mem[8]; 121 /* verify checksum */ 122 end = &mem[8 + *plen]; 123 checksum[0] = le16_to_cpup((void *)end); 124 for (checksum[1] = 0; mem < end; ++mem) 125 checksum[1] += *mem; 126 if (checksum[0] != checksum[1]) 127 return -EINVAL; 128 /* increment */ 129 *pmem += 10 + *plen; 130 return 0; 131 } 132 133 int softing_load_fw(const char *file, struct softing *card, 134 __iomem uint8_t *dpram, unsigned int size, int offset) 135 { 136 const struct firmware *fw; 137 int ret; 138 const uint8_t *mem, *end, *dat; 139 uint16_t type, len; 140 uint32_t addr; 141 uint8_t *buf = NULL, *new_buf; 142 int buflen = 0; 143 int8_t type_end = 0; 144 145 ret = request_firmware(&fw, file, &card->pdev->dev); 146 if (ret < 0) 147 return ret; 148 dev_dbg(&card->pdev->dev, "%s, firmware(%s) got %u bytes" 149 ", offset %c0x%04x\n", 150 card->pdat->name, file, (unsigned int)fw->size, 151 (offset >= 0) ? '+' : '-', (unsigned int)abs(offset)); 152 /* parse the firmware */ 153 mem = fw->data; 154 end = &mem[fw->size]; 155 /* look for header record */ 156 ret = fw_parse(&mem, &type, &addr, &len, &dat); 157 if (ret < 0) 158 goto failed; 159 if (type != 0xffff) 160 goto failed; 161 if (strncmp("Structured Binary Format, Softing GmbH" , dat, len)) { 162 ret = -EINVAL; 163 goto failed; 164 } 165 /* ok, we had a header */ 166 while (mem < end) { 167 ret = fw_parse(&mem, &type, &addr, &len, &dat); 168 if (ret < 0) 169 goto failed; 170 if (type == 3) { 171 /* start address, not used here */ 172 continue; 173 } else if (type == 1) { 174 /* eof */ 175 type_end = 1; 176 break; 177 } else if (type != 0) { 178 ret = -EINVAL; 179 goto failed; 180 } 181 182 if ((addr + len + offset) > size) 183 goto failed; 184 memcpy_toio(&dpram[addr + offset], dat, len); 185 /* be sure to flush caches from IO space */ 186 mb(); 187 if (len > buflen) { 188 /* align buflen */ 189 buflen = (len + (1024-1)) & ~(1024-1); 190 new_buf = krealloc(buf, buflen, GFP_KERNEL); 191 if (!new_buf) { 192 ret = -ENOMEM; 193 goto failed; 194 } 195 buf = new_buf; 196 } 197 /* verify record data */ 198 memcpy_fromio(buf, &dpram[addr + offset], len); 199 if (memcmp(buf, dat, len)) { 200 /* is not ok */ 201 dev_alert(&card->pdev->dev, "DPRAM readback failed\n"); 202 ret = -EIO; 203 goto failed; 204 } 205 } 206 if (!type_end) 207 /* no end record seen */ 208 goto failed; 209 ret = 0; 210 failed: 211 kfree(buf); 212 release_firmware(fw); 213 if (ret < 0) 214 dev_info(&card->pdev->dev, "firmware %s failed\n", file); 215 return ret; 216 } 217 218 int softing_load_app_fw(const char *file, struct softing *card) 219 { 220 const struct firmware *fw; 221 const uint8_t *mem, *end, *dat; 222 int ret, j; 223 uint16_t type, len; 224 uint32_t addr, start_addr = 0; 225 unsigned int sum, rx_sum; 226 int8_t type_end = 0, type_entrypoint = 0; 227 228 ret = request_firmware(&fw, file, &card->pdev->dev); 229 if (ret) { 230 dev_alert(&card->pdev->dev, "request_firmware(%s) got %i\n", 231 file, ret); 232 return ret; 233 } 234 dev_dbg(&card->pdev->dev, "firmware(%s) got %lu bytes\n", 235 file, (unsigned long)fw->size); 236 /* parse the firmware */ 237 mem = fw->data; 238 end = &mem[fw->size]; 239 /* look for header record */ 240 ret = fw_parse(&mem, &type, &addr, &len, &dat); 241 if (ret) 242 goto failed; 243 ret = -EINVAL; 244 if (type != 0xffff) { 245 dev_alert(&card->pdev->dev, "firmware starts with type 0x%x\n", 246 type); 247 goto failed; 248 } 249 if (strncmp("Structured Binary Format, Softing GmbH", dat, len)) { 250 dev_alert(&card->pdev->dev, "firmware string '%.*s' fault\n", 251 len, dat); 252 goto failed; 253 } 254 /* ok, we had a header */ 255 while (mem < end) { 256 ret = fw_parse(&mem, &type, &addr, &len, &dat); 257 if (ret) 258 goto failed; 259 260 if (type == 3) { 261 /* start address */ 262 start_addr = addr; 263 type_entrypoint = 1; 264 continue; 265 } else if (type == 1) { 266 /* eof */ 267 type_end = 1; 268 break; 269 } else if (type != 0) { 270 dev_alert(&card->pdev->dev, 271 "unknown record type 0x%04x\n", type); 272 ret = -EINVAL; 273 goto failed; 274 } 275 276 /* regular data */ 277 for (sum = 0, j = 0; j < len; ++j) 278 sum += dat[j]; 279 /* work in 16bit (target) */ 280 sum &= 0xffff; 281 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."); 289 if (ret < 0) 290 goto failed; 291 /* verify checksum */ 292 rx_sum = ioread16(&card->dpram[DPRAM_RECEIPT + 2]); 293 if (rx_sum != sum) { 294 dev_alert(&card->pdev->dev, "SRAM seems to be damaged" 295 ", wanted 0x%04x, got 0x%04x\n", sum, rx_sum); 296 ret = -EIO; 297 goto failed; 298 } 299 } 300 if (!type_end || !type_entrypoint) 301 goto failed; 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."); 306 if (ret < 0) 307 goto failed; 308 ret = 0; 309 failed: 310 release_firmware(fw); 311 if (ret < 0) 312 dev_info(&card->pdev->dev, "firmware %s failed\n", file); 313 return ret; 314 } 315 316 static int softing_reset_chip(struct softing *card) 317 { 318 int ret; 319 320 do { 321 /* reset chip */ 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]); 326 327 ret = softing_fct_cmd(card, 0, "reset_can"); 328 if (!ret) 329 break; 330 if (signal_pending(current)) 331 /* don't wait any longer */ 332 break; 333 } while (1); 334 card->tx.pending = 0; 335 return ret; 336 } 337 338 int softing_chip_poweron(struct softing *card) 339 { 340 int ret; 341 /* sync */ 342 ret = _softing_fct_cmd(card, 99, 0x55, "sync-a"); 343 if (ret < 0) 344 goto failed; 345 346 ret = _softing_fct_cmd(card, 99, 0xaa, "sync-b"); 347 if (ret < 0) 348 goto failed; 349 350 ret = softing_reset_chip(card); 351 if (ret < 0) 352 goto failed; 353 /* get_serial */ 354 ret = softing_fct_cmd(card, 43, "get_serial_number"); 355 if (ret < 0) 356 goto failed; 357 card->id.serial = ioread32(&card->dpram[DPRAM_FCT_PARAM]); 358 /* get_version */ 359 ret = softing_fct_cmd(card, 12, "get_version"); 360 if (ret < 0) 361 goto failed; 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]); 367 return 0; 368 failed: 369 return ret; 370 } 371 372 static void softing_initialize_timestamp(struct softing *card) 373 { 374 uint64_t ovf; 375 376 card->ts_ref = ktime_get(); 377 378 /* 16MHz is the reference */ 379 ovf = 0x100000000ULL * 16; 380 do_div(ovf, card->pdat->freq ?: 16); 381 382 card->ts_overflow = ktime_add_us(0, ovf); 383 } 384 385 ktime_t softing_raw2ktime(struct softing *card, u32 raw) 386 { 387 uint64_t rawl; 388 ktime_t now, real_offset; 389 ktime_t target; 390 ktime_t tmp; 391 392 now = ktime_get(); 393 real_offset = ktime_sub(ktime_get_real(), now); 394 395 /* find nsec from card */ 396 rawl = raw * 16; 397 do_div(rawl, card->pdat->freq ?: 16); 398 target = ktime_add_us(card->ts_ref, rawl); 399 /* test for overflows */ 400 tmp = ktime_add(target, card->ts_overflow); 401 while (unlikely(ktime_to_ns(tmp) > ktime_to_ns(now))) { 402 card->ts_ref = ktime_add(card->ts_ref, card->ts_overflow); 403 target = tmp; 404 tmp = ktime_add(target, card->ts_overflow); 405 } 406 return ktime_add(target, real_offset); 407 } 408 409 static inline int softing_error_reporting(struct net_device *netdev) 410 { 411 struct softing_priv *priv = netdev_priv(netdev); 412 413 return (priv->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING) 414 ? 1 : 0; 415 } 416 417 int softing_startstop(struct net_device *dev, int up) 418 { 419 int ret; 420 struct softing *card; 421 struct softing_priv *priv; 422 struct net_device *netdev; 423 int bus_bitmask_start; 424 int j, error_reporting; 425 struct can_frame msg; 426 const struct can_bittiming *bt; 427 428 priv = netdev_priv(dev); 429 card = priv->card; 430 431 if (!card->fw.up) 432 return -EIO; 433 434 ret = mutex_lock_interruptible(&card->fw.lock); 435 if (ret) 436 return ret; 437 438 bus_bitmask_start = 0; 439 if (dev && up) 440 /* prepare to start this bus as well */ 441 bus_bitmask_start |= (1 << priv->index); 442 /* bring netdevs down */ 443 for (j = 0; j < ARRAY_SIZE(card->net); ++j) { 444 netdev = card->net[j]; 445 if (!netdev) 446 continue; 447 priv = netdev_priv(netdev); 448 449 if (dev != netdev) 450 netif_stop_queue(netdev); 451 452 if (netif_running(netdev)) { 453 if (dev != netdev) 454 bus_bitmask_start |= (1 << j); 455 priv->tx.pending = 0; 456 priv->tx.echo_put = 0; 457 priv->tx.echo_get = 0; 458 /* 459 * this bus' may just have called open_candev() 460 * which is rather stupid to call close_candev() 461 * already 462 * but we may come here from busoff recovery too 463 * in which case the echo_skb _needs_ flushing too. 464 * just be sure to call open_candev() again 465 */ 466 close_candev(netdev); 467 } 468 priv->can.state = CAN_STATE_STOPPED; 469 } 470 card->tx.pending = 0; 471 472 softing_enable_irq(card, 0); 473 ret = softing_reset_chip(card); 474 if (ret) 475 goto failed; 476 if (!bus_bitmask_start) 477 /* no buses to be brought up */ 478 goto card_done; 479 480 if ((bus_bitmask_start & 1) && (bus_bitmask_start & 2) 481 && (softing_error_reporting(card->net[0]) 482 != softing_error_reporting(card->net[1]))) { 483 dev_alert(&card->pdev->dev, 484 "err_reporting flag differs for buses\n"); 485 goto invalid; 486 } 487 error_reporting = 0; 488 if (bus_bitmask_start & 1) { 489 netdev = card->net[0]; 490 priv = netdev_priv(netdev); 491 error_reporting += softing_error_reporting(netdev); 492 /* init chip 1 */ 493 bt = &priv->can.bittiming; 494 iowrite16(bt->brp, &card->dpram[DPRAM_FCT_PARAM + 2]); 495 iowrite16(bt->sjw, &card->dpram[DPRAM_FCT_PARAM + 4]); 496 iowrite16(bt->phase_seg1 + bt->prop_seg, 497 &card->dpram[DPRAM_FCT_PARAM + 6]); 498 iowrite16(bt->phase_seg2, &card->dpram[DPRAM_FCT_PARAM + 8]); 499 iowrite16((priv->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES) ? 1 : 0, 500 &card->dpram[DPRAM_FCT_PARAM + 10]); 501 ret = softing_fct_cmd(card, 1, "initialize_chip[0]"); 502 if (ret < 0) 503 goto failed; 504 /* set mode */ 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]"); 508 if (ret < 0) 509 goto failed; 510 /* set filter */ 511 /* 11bit id & mask */ 512 iowrite16(0x0000, &card->dpram[DPRAM_FCT_PARAM + 2]); 513 iowrite16(0x07ff, &card->dpram[DPRAM_FCT_PARAM + 4]); 514 /* 29bit id.lo & mask.lo & id.hi & mask.hi */ 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]"); 520 if (ret < 0) 521 goto failed; 522 /* set output control */ 523 iowrite16(priv->output, &card->dpram[DPRAM_FCT_PARAM + 2]); 524 ret = softing_fct_cmd(card, 5, "set_output[0]"); 525 if (ret < 0) 526 goto failed; 527 } 528 if (bus_bitmask_start & 2) { 529 netdev = card->net[1]; 530 priv = netdev_priv(netdev); 531 error_reporting += softing_error_reporting(netdev); 532 /* init chip2 */ 533 bt = &priv->can.bittiming; 534 iowrite16(bt->brp, &card->dpram[DPRAM_FCT_PARAM + 2]); 535 iowrite16(bt->sjw, &card->dpram[DPRAM_FCT_PARAM + 4]); 536 iowrite16(bt->phase_seg1 + bt->prop_seg, 537 &card->dpram[DPRAM_FCT_PARAM + 6]); 538 iowrite16(bt->phase_seg2, &card->dpram[DPRAM_FCT_PARAM + 8]); 539 iowrite16((priv->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES) ? 1 : 0, 540 &card->dpram[DPRAM_FCT_PARAM + 10]); 541 ret = softing_fct_cmd(card, 2, "initialize_chip[1]"); 542 if (ret < 0) 543 goto failed; 544 /* set mode2 */ 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]"); 548 if (ret < 0) 549 goto failed; 550 /* set filter2 */ 551 /* 11bit id & mask */ 552 iowrite16(0x0000, &card->dpram[DPRAM_FCT_PARAM + 2]); 553 iowrite16(0x07ff, &card->dpram[DPRAM_FCT_PARAM + 4]); 554 /* 29bit id.lo & mask.lo & id.hi & mask.hi */ 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]"); 560 if (ret < 0) 561 goto failed; 562 /* set output control2 */ 563 iowrite16(priv->output, &card->dpram[DPRAM_FCT_PARAM + 2]); 564 ret = softing_fct_cmd(card, 6, "set_output[1]"); 565 if (ret < 0) 566 goto failed; 567 } 568 /* enable_error_frame */ 569 /* 570 * Error reporting is switched off at the moment since 571 * the receiving of them is not yet 100% verified 572 * This should be enabled sooner or later 573 * 574 if (error_reporting) { 575 ret = softing_fct_cmd(card, 51, "enable_error_frame"); 576 if (ret < 0) 577 goto failed; 578 } 579 */ 580 /* initialize interface */ 581 iowrite16(1, &card->dpram[DPRAM_FCT_PARAM + 2]); 582 iowrite16(1, &card->dpram[DPRAM_FCT_PARAM + 4]); 583 iowrite16(1, &card->dpram[DPRAM_FCT_PARAM + 6]); 584 iowrite16(1, &card->dpram[DPRAM_FCT_PARAM + 8]); 585 iowrite16(1, &card->dpram[DPRAM_FCT_PARAM + 10]); 586 iowrite16(1, &card->dpram[DPRAM_FCT_PARAM + 12]); 587 iowrite16(1, &card->dpram[DPRAM_FCT_PARAM + 14]); 588 iowrite16(1, &card->dpram[DPRAM_FCT_PARAM + 16]); 589 iowrite16(1, &card->dpram[DPRAM_FCT_PARAM + 18]); 590 iowrite16(1, &card->dpram[DPRAM_FCT_PARAM + 20]); 591 ret = softing_fct_cmd(card, 17, "initialize_interface"); 592 if (ret < 0) 593 goto failed; 594 /* enable_fifo */ 595 ret = softing_fct_cmd(card, 36, "enable_fifo"); 596 if (ret < 0) 597 goto failed; 598 /* enable fifo tx ack */ 599 ret = softing_fct_cmd(card, 13, "fifo_tx_ack[0]"); 600 if (ret < 0) 601 goto failed; 602 /* enable fifo tx ack2 */ 603 ret = softing_fct_cmd(card, 14, "fifo_tx_ack[1]"); 604 if (ret < 0) 605 goto failed; 606 /* start_chip */ 607 ret = softing_fct_cmd(card, 11, "start_chip"); 608 if (ret < 0) 609 goto failed; 610 iowrite8(0, &card->dpram[DPRAM_INFO_BUSSTATE]); 611 iowrite8(0, &card->dpram[DPRAM_INFO_BUSSTATE2]); 612 if (card->pdat->generation < 2) { 613 iowrite8(0, &card->dpram[DPRAM_V2_IRQ_TOHOST]); 614 /* flush the DPRAM caches */ 615 wmb(); 616 } 617 618 softing_initialize_timestamp(card); 619 620 /* 621 * do socketcan notifications/status changes 622 * from here, no errors should occur, or the failed: part 623 * must be reviewed 624 */ 625 memset(&msg, 0, sizeof(msg)); 626 msg.can_id = CAN_ERR_FLAG | CAN_ERR_RESTARTED; 627 msg.len = CAN_ERR_DLC; 628 for (j = 0; j < ARRAY_SIZE(card->net); ++j) { 629 if (!(bus_bitmask_start & (1 << j))) 630 continue; 631 netdev = card->net[j]; 632 if (!netdev) 633 continue; 634 priv = netdev_priv(netdev); 635 priv->can.state = CAN_STATE_ERROR_ACTIVE; 636 open_candev(netdev); 637 if (dev != netdev) { 638 /* notify other buses on the restart */ 639 softing_netdev_rx(netdev, &msg, 0); 640 ++priv->can.can_stats.restarts; 641 } 642 netif_wake_queue(netdev); 643 } 644 645 /* enable interrupts */ 646 ret = softing_enable_irq(card, 1); 647 if (ret) 648 goto failed; 649 card_done: 650 mutex_unlock(&card->fw.lock); 651 return 0; 652 invalid: 653 ret = -EINVAL; 654 failed: 655 softing_enable_irq(card, 0); 656 softing_reset_chip(card); 657 mutex_unlock(&card->fw.lock); 658 /* bring all other interfaces down */ 659 for (j = 0; j < ARRAY_SIZE(card->net); ++j) { 660 netdev = card->net[j]; 661 if (!netdev) 662 continue; 663 dev_close(netdev); 664 } 665 return ret; 666 } 667 668 int softing_default_output(struct net_device *netdev) 669 { 670 struct softing_priv *priv = netdev_priv(netdev); 671 struct softing *card = priv->card; 672 673 switch (priv->chip) { 674 case 1000: 675 return (card->pdat->generation < 2) ? 0xfb : 0xfa; 676 case 5: 677 return 0x60; 678 default: 679 return 0x40; 680 } 681 } 682