forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/net/ethernet/freescale/fman/fman_dtsec.c
....@@ -366,13 +366,26 @@
366366 cfg->maximum_frame = DEFAULT_MAXIMUM_FRAME;
367367 }
368368
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, &regs->macstnaddr1);
376
+
377
+ tmp = (u32)((adr[1] << 24) | (adr[0] << 16));
378
+ iowrite32be(tmp, &regs->macstnaddr2);
379
+}
380
+
369381 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,
371383 u32 exception_mask, u8 tbi_addr)
372384 {
373385 bool is_rgmii, is_sgmii, is_qsgmii;
374
- int i;
386
+ enet_addr_t eth_addr;
375387 u32 tmp;
388
+ int i;
376389
377390 /* Soft reset */
378391 iowrite32be(MACCFG1_SOFT_RESET, &regs->maccfg1);
....@@ -501,12 +514,10 @@
501514
502515 iowrite32be(0xffffffff, &regs->ievent);
503516
504
- tmp = (u32)((macaddr[5] << 24) |
505
- (macaddr[4] << 16) | (macaddr[3] << 8) | macaddr[2]);
506
- iowrite32be(tmp, &regs->macstnaddr1);
507
-
508
- tmp = (u32)((macaddr[1] << 24) | (macaddr[0] << 16));
509
- iowrite32be(tmp, &regs->macstnaddr2);
517
+ if (addr) {
518
+ MAKE_ENET_ADDR_FROM_UINT64(addr, eth_addr);
519
+ set_mac_address(regs, (u8 *)eth_addr);
520
+ }
510521
511522 /* HASH */
512523 for (i = 0; i < NUM_OF_HASH_REGS; i++) {
....@@ -517,18 +528,6 @@
517528 }
518529
519530 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, &regs->macstnaddr1);
529
-
530
- tmp = (u32)((adr[1] << 24) | (adr[0] << 16));
531
- iowrite32be(tmp, &regs->macstnaddr2);
532531 }
533532
534533 static void set_bucket(struct dtsec_regs __iomem *regs, int bucket,
....@@ -554,10 +553,6 @@
554553 {
555554 if (dtsec->max_speed >= SPEED_10000) {
556555 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");
561556 return -EINVAL;
562557 }
563558 if ((dtsec->dtsec_drv_param)->rx_prepend >
....@@ -1391,9 +1386,8 @@
13911386 {
13921387 struct dtsec_regs __iomem *regs = dtsec->regs;
13931388 struct dtsec_cfg *dtsec_drv_param;
1394
- int err;
13951389 u16 max_frm_ln;
1396
- enet_addr_t eth_addr;
1390
+ int err;
13971391
13981392 if (is_init_done(dtsec->dtsec_drv_param))
13991393 return -EINVAL;
....@@ -1410,10 +1404,8 @@
14101404
14111405 dtsec_drv_param = dtsec->dtsec_drv_param;
14121406
1413
- MAKE_ENET_ADDR_FROM_UINT64(dtsec->addr, eth_addr);
1414
-
14151407 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,
14171409 dtsec->tbiphy->mdio.addr);
14181410 if (err) {
14191411 free_init_resources(dtsec);