| .. | .. |
|---|
| 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); |
|---|