forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-10 9999e48639b3cecb08ffb37358bcba3b48161b29
kernel/drivers/net/ethernet/stmicro/stmmac/dwmac5.c
....@@ -520,9 +520,9 @@
520520 return 0;
521521 }
522522
523
- val |= PPSCMDx(index, 0x2);
524523 val |= TRGTMODSELx(index, 0x2);
525524 val |= PPSEN0;
525
+ writel(val, ioaddr + MAC_PPS_CONTROL);
526526
527527 writel(cfg->start.tv_sec, ioaddr + MAC_PPSx_TARGET_TIME_SEC(index));
528528
....@@ -547,6 +547,82 @@
547547 writel(period - 1, ioaddr + MAC_PPSx_WIDTH(index));
548548
549549 /* Finally, activate it */
550
+ val |= PPSCMDx(index, 0x2);
550551 writel(val, ioaddr + MAC_PPS_CONTROL);
551552 return 0;
552553 }
554
+
555
+static int dwmac5_est_write(void __iomem *ioaddr, u32 reg, u32 val, bool gcl)
556
+{
557
+ u32 ctrl;
558
+
559
+ writel(val, ioaddr + MTL_EST_GCL_DATA);
560
+
561
+ ctrl = (reg << ADDR_SHIFT);
562
+ ctrl |= gcl ? 0 : GCRR;
563
+
564
+ writel(ctrl, ioaddr + MTL_EST_GCL_CONTROL);
565
+
566
+ ctrl |= SRWO;
567
+ writel(ctrl, ioaddr + MTL_EST_GCL_CONTROL);
568
+
569
+ return readl_poll_timeout(ioaddr + MTL_EST_GCL_CONTROL,
570
+ ctrl, !(ctrl & SRWO), 100, 5000);
571
+}
572
+
573
+int dwmac5_est_configure(void __iomem *ioaddr, struct stmmac_est *cfg,
574
+ unsigned int ptp_rate)
575
+{
576
+ int i, ret = 0x0;
577
+ u32 ctrl;
578
+
579
+ ret |= dwmac5_est_write(ioaddr, BTR_LOW, cfg->btr[0], false);
580
+ ret |= dwmac5_est_write(ioaddr, BTR_HIGH, cfg->btr[1], false);
581
+ ret |= dwmac5_est_write(ioaddr, TER, cfg->ter, false);
582
+ ret |= dwmac5_est_write(ioaddr, LLR, cfg->gcl_size, false);
583
+ ret |= dwmac5_est_write(ioaddr, CTR_LOW, cfg->ctr[0], false);
584
+ ret |= dwmac5_est_write(ioaddr, CTR_HIGH, cfg->ctr[1], false);
585
+ if (ret)
586
+ return ret;
587
+
588
+ for (i = 0; i < cfg->gcl_size; i++) {
589
+ ret = dwmac5_est_write(ioaddr, i, cfg->gcl[i], true);
590
+ if (ret)
591
+ return ret;
592
+ }
593
+
594
+ ctrl = readl(ioaddr + MTL_EST_CONTROL);
595
+ ctrl &= ~PTOV;
596
+ ctrl |= ((1000000000 / ptp_rate) * 6) << PTOV_SHIFT;
597
+ if (cfg->enable)
598
+ ctrl |= EEST | SSWL;
599
+ else
600
+ ctrl &= ~EEST;
601
+
602
+ writel(ctrl, ioaddr + MTL_EST_CONTROL);
603
+ return 0;
604
+}
605
+
606
+void dwmac5_fpe_configure(void __iomem *ioaddr, u32 num_txq, u32 num_rxq,
607
+ bool enable)
608
+{
609
+ u32 value;
610
+
611
+ if (!enable) {
612
+ value = readl(ioaddr + MAC_FPE_CTRL_STS);
613
+
614
+ value &= ~EFPE;
615
+
616
+ writel(value, ioaddr + MAC_FPE_CTRL_STS);
617
+ return;
618
+ }
619
+
620
+ value = readl(ioaddr + GMAC_RXQ_CTRL1);
621
+ value &= ~GMAC_RXQCTRL_FPRQ;
622
+ value |= (num_rxq - 1) << GMAC_RXQCTRL_FPRQ_SHIFT;
623
+ writel(value, ioaddr + GMAC_RXQ_CTRL1);
624
+
625
+ value = readl(ioaddr + MAC_FPE_CTRL_STS);
626
+ value |= EFPE;
627
+ writel(value, ioaddr + MAC_FPE_CTRL_STS);
628
+}