.. | .. |
---|
366 | 366 | cfg->maximum_frame = DEFAULT_MAXIMUM_FRAME; |
---|
367 | 367 | } |
---|
368 | 368 | |
---|
| 369 | +static void set_mac_address(struct dtsec_regs __iomem *regs, u8 *adr) |
---|
| 370 | +{ |
---|
| 371 | + u32 tmp; |
---|
| 372 | + |
---|
| 373 | + tmp = (u32)((adr[5] << 24) | |
---|
| 374 | + (adr[4] << 16) | (adr[3] << 8) | adr[2]); |
---|
| 375 | + iowrite32be(tmp, ®s->macstnaddr1); |
---|
| 376 | + |
---|
| 377 | + tmp = (u32)((adr[1] << 24) | (adr[0] << 16)); |
---|
| 378 | + iowrite32be(tmp, ®s->macstnaddr2); |
---|
| 379 | +} |
---|
| 380 | + |
---|
369 | 381 | static int init(struct dtsec_regs __iomem *regs, struct dtsec_cfg *cfg, |
---|
370 | | - phy_interface_t iface, u16 iface_speed, u8 *macaddr, |
---|
| 382 | + phy_interface_t iface, u16 iface_speed, u64 addr, |
---|
371 | 383 | u32 exception_mask, u8 tbi_addr) |
---|
372 | 384 | { |
---|
373 | 385 | bool is_rgmii, is_sgmii, is_qsgmii; |
---|
374 | | - int i; |
---|
| 386 | + enet_addr_t eth_addr; |
---|
375 | 387 | u32 tmp; |
---|
| 388 | + int i; |
---|
376 | 389 | |
---|
377 | 390 | /* Soft reset */ |
---|
378 | 391 | iowrite32be(MACCFG1_SOFT_RESET, ®s->maccfg1); |
---|
.. | .. |
---|
501 | 514 | |
---|
502 | 515 | iowrite32be(0xffffffff, ®s->ievent); |
---|
503 | 516 | |
---|
504 | | - tmp = (u32)((macaddr[5] << 24) | |
---|
505 | | - (macaddr[4] << 16) | (macaddr[3] << 8) | macaddr[2]); |
---|
506 | | - iowrite32be(tmp, ®s->macstnaddr1); |
---|
507 | | - |
---|
508 | | - tmp = (u32)((macaddr[1] << 24) | (macaddr[0] << 16)); |
---|
509 | | - iowrite32be(tmp, ®s->macstnaddr2); |
---|
| 517 | + if (addr) { |
---|
| 518 | + MAKE_ENET_ADDR_FROM_UINT64(addr, eth_addr); |
---|
| 519 | + set_mac_address(regs, (u8 *)eth_addr); |
---|
| 520 | + } |
---|
510 | 521 | |
---|
511 | 522 | /* HASH */ |
---|
512 | 523 | for (i = 0; i < NUM_OF_HASH_REGS; i++) { |
---|
.. | .. |
---|
517 | 528 | } |
---|
518 | 529 | |
---|
519 | 530 | return 0; |
---|
520 | | -} |
---|
521 | | - |
---|
522 | | -static void set_mac_address(struct dtsec_regs __iomem *regs, u8 *adr) |
---|
523 | | -{ |
---|
524 | | - u32 tmp; |
---|
525 | | - |
---|
526 | | - tmp = (u32)((adr[5] << 24) | |
---|
527 | | - (adr[4] << 16) | (adr[3] << 8) | adr[2]); |
---|
528 | | - iowrite32be(tmp, ®s->macstnaddr1); |
---|
529 | | - |
---|
530 | | - tmp = (u32)((adr[1] << 24) | (adr[0] << 16)); |
---|
531 | | - iowrite32be(tmp, ®s->macstnaddr2); |
---|
532 | 531 | } |
---|
533 | 532 | |
---|
534 | 533 | static void set_bucket(struct dtsec_regs __iomem *regs, int bucket, |
---|
.. | .. |
---|
554 | 553 | { |
---|
555 | 554 | if (dtsec->max_speed >= SPEED_10000) { |
---|
556 | 555 | pr_err("1G MAC driver supports 1G or lower speeds\n"); |
---|
557 | | - return -EINVAL; |
---|
558 | | - } |
---|
559 | | - if (dtsec->addr == 0) { |
---|
560 | | - pr_err("Ethernet MAC Must have a valid MAC Address\n"); |
---|
561 | 556 | return -EINVAL; |
---|
562 | 557 | } |
---|
563 | 558 | if ((dtsec->dtsec_drv_param)->rx_prepend > |
---|
.. | .. |
---|
1391 | 1386 | { |
---|
1392 | 1387 | struct dtsec_regs __iomem *regs = dtsec->regs; |
---|
1393 | 1388 | struct dtsec_cfg *dtsec_drv_param; |
---|
1394 | | - int err; |
---|
1395 | 1389 | u16 max_frm_ln; |
---|
1396 | | - enet_addr_t eth_addr; |
---|
| 1390 | + int err; |
---|
1397 | 1391 | |
---|
1398 | 1392 | if (is_init_done(dtsec->dtsec_drv_param)) |
---|
1399 | 1393 | return -EINVAL; |
---|
.. | .. |
---|
1410 | 1404 | |
---|
1411 | 1405 | dtsec_drv_param = dtsec->dtsec_drv_param; |
---|
1412 | 1406 | |
---|
1413 | | - MAKE_ENET_ADDR_FROM_UINT64(dtsec->addr, eth_addr); |
---|
1414 | | - |
---|
1415 | 1407 | err = init(dtsec->regs, dtsec_drv_param, dtsec->phy_if, |
---|
1416 | | - dtsec->max_speed, (u8 *)eth_addr, dtsec->exceptions, |
---|
| 1408 | + dtsec->max_speed, dtsec->addr, dtsec->exceptions, |
---|
1417 | 1409 | dtsec->tbiphy->mdio.addr); |
---|
1418 | 1410 | if (err) { |
---|
1419 | 1411 | free_init_resources(dtsec); |
---|