@@ -45,15 +45,14 @@ void enetc_sched_speed_set(struct enetc_ndev_priv *priv, int speed)
45
45
| pspeed );
46
46
}
47
47
48
- #define ENETC_QOS_ALIGN 64
49
48
static int enetc_setup_taprio (struct net_device * ndev ,
50
49
struct tc_taprio_qopt_offload * admin_conf )
51
50
{
52
51
struct enetc_ndev_priv * priv = netdev_priv (ndev );
53
52
struct enetc_cbd cbd = {.cmd = 0 };
54
53
struct tgs_gcl_conf * gcl_config ;
55
54
struct tgs_gcl_data * gcl_data ;
56
- dma_addr_t dma , dma_align ;
55
+ dma_addr_t dma ;
57
56
struct gce * gce ;
58
57
u16 data_size ;
59
58
u16 gcl_len ;
@@ -84,16 +83,10 @@ static int enetc_setup_taprio(struct net_device *ndev,
84
83
gcl_config = & cbd .gcl_conf ;
85
84
86
85
data_size = struct_size (gcl_data , entry , gcl_len );
87
- tmp = dma_alloc_coherent (& priv -> si -> pdev -> dev ,
88
- data_size + ENETC_QOS_ALIGN ,
89
- & dma , GFP_KERNEL );
90
- if (!tmp ) {
91
- dev_err (& priv -> si -> pdev -> dev ,
92
- "DMA mapping of taprio gate list failed!\n" );
86
+ tmp = enetc_cbd_alloc_data_mem (priv -> si , & cbd , data_size ,
87
+ & dma , (void * )& gcl_data );
88
+ if (!tmp )
93
89
return - ENOMEM ;
94
- }
95
- dma_align = ALIGN (dma , ENETC_QOS_ALIGN );
96
- gcl_data = (struct tgs_gcl_data * )PTR_ALIGN (tmp , ENETC_QOS_ALIGN );
97
90
98
91
gce = (struct gce * )(gcl_data + 1 );
99
92
@@ -116,11 +109,8 @@ static int enetc_setup_taprio(struct net_device *ndev,
116
109
temp_gce -> period = cpu_to_le32 (temp_entry -> interval );
117
110
}
118
111
119
- cbd .length = cpu_to_le16 (data_size );
120
112
cbd .status_flags = 0 ;
121
113
122
- cbd .addr [0 ] = cpu_to_le32 (lower_32_bits (dma_align ));
123
- cbd .addr [1 ] = cpu_to_le32 (upper_32_bits (dma_align ));
124
114
cbd .cls = BDCR_CMD_PORT_GCL ;
125
115
cbd .status_flags = 0 ;
126
116
@@ -133,8 +123,7 @@ static int enetc_setup_taprio(struct net_device *ndev,
133
123
ENETC_QBV_PTGCR_OFFSET ,
134
124
tge & (~ENETC_QBV_TGE ));
135
125
136
- dma_free_coherent (& priv -> si -> pdev -> dev , data_size + ENETC_QOS_ALIGN ,
137
- tmp , dma );
126
+ enetc_cbd_free_data_mem (priv -> si , data_size , tmp , & dma );
138
127
139
128
return err ;
140
129
}
@@ -451,6 +440,7 @@ static struct actions_fwd enetc_act_fwd[] = {
451
440
};
452
441
453
442
static struct enetc_psfp epsfp = {
443
+ .dev_bitmap = 0 ,
454
444
.psfp_sfi_bitmap = NULL ,
455
445
};
456
446
@@ -464,7 +454,7 @@ static int enetc_streamid_hw_set(struct enetc_ndev_priv *priv,
464
454
struct enetc_cbd cbd = {.cmd = 0 };
465
455
struct streamid_data * si_data ;
466
456
struct streamid_conf * si_conf ;
467
- dma_addr_t dma , dma_align ;
457
+ dma_addr_t dma ;
468
458
u16 data_size ;
469
459
void * tmp ;
470
460
int port ;
@@ -487,20 +477,11 @@ static int enetc_streamid_hw_set(struct enetc_ndev_priv *priv,
487
477
cbd .status_flags = 0 ;
488
478
489
479
data_size = sizeof (struct streamid_data );
490
- tmp = dma_alloc_coherent (& priv -> si -> pdev -> dev ,
491
- data_size + ENETC_QOS_ALIGN ,
492
- & dma , GFP_KERNEL );
493
- if (!tmp ) {
494
- dev_err (& priv -> si -> pdev -> dev ,
495
- "DMA mapping of stream identify failed!\n" );
480
+ tmp = enetc_cbd_alloc_data_mem (priv -> si , & cbd , data_size ,
481
+ & dma , (void * )& si_data );
482
+ if (!tmp )
496
483
return - ENOMEM ;
497
- }
498
- dma_align = ALIGN (dma , ENETC_QOS_ALIGN );
499
- si_data = (struct streamid_data * )PTR_ALIGN (tmp , ENETC_QOS_ALIGN );
500
484
501
- cbd .length = cpu_to_le16 (data_size );
502
- cbd .addr [0 ] = cpu_to_le32 (lower_32_bits (dma_align ));
503
- cbd .addr [1 ] = cpu_to_le32 (upper_32_bits (dma_align ));
504
485
eth_broadcast_addr (si_data -> dmac );
505
486
si_data -> vid_vidm_tg = (ENETC_CBDR_SID_VID_MASK
506
487
+ ((0x3 << 14 ) | ENETC_CBDR_SID_VIDM ));
@@ -521,11 +502,6 @@ static int enetc_streamid_hw_set(struct enetc_ndev_priv *priv,
521
502
goto out ;
522
503
523
504
/* Enable the entry overwrite again incase space flushed by hardware */
524
- memset (& cbd , 0 , sizeof (cbd ));
525
-
526
- cbd .index = cpu_to_le16 ((u16 )sid -> index );
527
- cbd .cmd = 0 ;
528
- cbd .cls = BDCR_CMD_STREAM_IDENTIFY ;
529
505
cbd .status_flags = 0 ;
530
506
531
507
si_conf -> en = 0x80 ;
@@ -538,11 +514,6 @@ static int enetc_streamid_hw_set(struct enetc_ndev_priv *priv,
538
514
539
515
memset (si_data , 0 , data_size );
540
516
541
- cbd .length = cpu_to_le16 (data_size );
542
-
543
- cbd .addr [0 ] = cpu_to_le32 (lower_32_bits (dma_align ));
544
- cbd .addr [1 ] = cpu_to_le32 (upper_32_bits (dma_align ));
545
-
546
517
/* VIDM default to be 1.
547
518
* VID Match. If set (b1) then the VID must match, otherwise
548
519
* any VID is considered a match. VIDM setting is only used
@@ -562,8 +533,7 @@ static int enetc_streamid_hw_set(struct enetc_ndev_priv *priv,
562
533
563
534
err = enetc_send_cmd (priv -> si , & cbd );
564
535
out :
565
- dma_free_coherent (& priv -> si -> pdev -> dev , data_size + ENETC_QOS_ALIGN ,
566
- tmp , dma );
536
+ enetc_cbd_free_data_mem (priv -> si , data_size , tmp , & dma );
567
537
568
538
return err ;
569
539
}
@@ -632,7 +602,7 @@ static int enetc_streamcounter_hw_get(struct enetc_ndev_priv *priv,
632
602
{
633
603
struct enetc_cbd cbd = { .cmd = 2 };
634
604
struct sfi_counter_data * data_buf ;
635
- dma_addr_t dma , dma_align ;
605
+ dma_addr_t dma ;
636
606
u16 data_size ;
637
607
void * tmp ;
638
608
int err ;
@@ -643,21 +613,11 @@ static int enetc_streamcounter_hw_get(struct enetc_ndev_priv *priv,
643
613
cbd .status_flags = 0 ;
644
614
645
615
data_size = sizeof (struct sfi_counter_data );
646
- tmp = dma_alloc_coherent (& priv -> si -> pdev -> dev ,
647
- data_size + ENETC_QOS_ALIGN ,
648
- & dma , GFP_KERNEL );
649
- if (!tmp ) {
650
- dev_err (& priv -> si -> pdev -> dev ,
651
- "DMA mapping of stream counter failed!\n" );
652
- return - ENOMEM ;
653
- }
654
- dma_align = ALIGN (dma , ENETC_QOS_ALIGN );
655
- data_buf = (struct sfi_counter_data * )PTR_ALIGN (tmp , ENETC_QOS_ALIGN );
656
-
657
- cbd .addr [0 ] = cpu_to_le32 (lower_32_bits (dma_align ));
658
- cbd .addr [1 ] = cpu_to_le32 (upper_32_bits (dma_align ));
659
616
660
- cbd .length = cpu_to_le16 (data_size );
617
+ tmp = enetc_cbd_alloc_data_mem (priv -> si , & cbd , data_size ,
618
+ & dma , (void * )& data_buf );
619
+ if (!tmp )
620
+ return - ENOMEM ;
661
621
662
622
err = enetc_send_cmd (priv -> si , & cbd );
663
623
if (err )
@@ -684,8 +644,7 @@ static int enetc_streamcounter_hw_get(struct enetc_ndev_priv *priv,
684
644
data_buf -> flow_meter_dropl ;
685
645
686
646
exit :
687
- dma_free_coherent (& priv -> si -> pdev -> dev , data_size + ENETC_QOS_ALIGN ,
688
- tmp , dma );
647
+ enetc_cbd_free_data_mem (priv -> si , data_size , tmp , & dma );
689
648
690
649
return err ;
691
650
}
@@ -725,7 +684,7 @@ static int enetc_streamgate_hw_set(struct enetc_ndev_priv *priv,
725
684
struct sgcl_conf * sgcl_config ;
726
685
struct sgcl_data * sgcl_data ;
727
686
struct sgce * sgce ;
728
- dma_addr_t dma , dma_align ;
687
+ dma_addr_t dma ;
729
688
u16 data_size ;
730
689
int err , i ;
731
690
void * tmp ;
@@ -775,20 +734,10 @@ static int enetc_streamgate_hw_set(struct enetc_ndev_priv *priv,
775
734
sgcl_config -> acl_len = (sgi -> num_entries - 1 ) & 0x3 ;
776
735
777
736
data_size = struct_size (sgcl_data , sgcl , sgi -> num_entries );
778
- tmp = dma_alloc_coherent (& priv -> si -> pdev -> dev ,
779
- data_size + ENETC_QOS_ALIGN ,
780
- & dma , GFP_KERNEL );
781
- if (!tmp ) {
782
- dev_err (& priv -> si -> pdev -> dev ,
783
- "DMA mapping of stream counter failed!\n" );
737
+ tmp = enetc_cbd_alloc_data_mem (priv -> si , & cbd , data_size ,
738
+ & dma , (void * )& sgcl_data );
739
+ if (!tmp )
784
740
return - ENOMEM ;
785
- }
786
- dma_align = ALIGN (dma , ENETC_QOS_ALIGN );
787
- sgcl_data = (struct sgcl_data * )PTR_ALIGN (tmp , ENETC_QOS_ALIGN );
788
-
789
- cbd .length = cpu_to_le16 (data_size );
790
- cbd .addr [0 ] = cpu_to_le32 (lower_32_bits (dma_align ));
791
- cbd .addr [1 ] = cpu_to_le32 (upper_32_bits (dma_align ));
792
741
793
742
sgce = & sgcl_data -> sgcl [0 ];
794
743
@@ -843,9 +792,7 @@ static int enetc_streamgate_hw_set(struct enetc_ndev_priv *priv,
843
792
err = enetc_send_cmd (priv -> si , & cbd );
844
793
845
794
exit :
846
- dma_free_coherent (& priv -> si -> pdev -> dev , data_size + ENETC_QOS_ALIGN ,
847
- tmp , dma );
848
-
795
+ enetc_cbd_free_data_mem (priv -> si , data_size , tmp , & dma );
849
796
return err ;
850
797
}
851
798
0 commit comments