forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-01-31 f70575805708cabdedea7498aaa3f710fde4d920
kernel/drivers/atm/idt77252.c
....@@ -641,8 +641,8 @@
641641 scq = kzalloc(sizeof(struct scq_info), GFP_KERNEL);
642642 if (!scq)
643643 return NULL;
644
- scq->base = dma_zalloc_coherent(&card->pcidev->dev, SCQ_SIZE,
645
- &scq->paddr, GFP_KERNEL);
644
+ scq->base = dma_alloc_coherent(&card->pcidev->dev, SCQ_SIZE,
645
+ &scq->paddr, GFP_KERNEL);
646646 if (scq->base == NULL) {
647647 kfree(scq);
648648 return NULL;
....@@ -835,6 +835,7 @@
835835 unsigned long flags;
836836 int error;
837837 int aal;
838
+ u32 word4;
838839
839840 if (skb->len == 0) {
840841 printk("%s: invalid skb->len (%d)\n", card->name, skb->len);
....@@ -846,6 +847,8 @@
846847
847848 tbd = &IDT77252_PRV_TBD(skb);
848849 vcc = ATM_SKB(skb)->vcc;
850
+ word4 = (skb->data[0] << 24) | (skb->data[1] << 16) |
851
+ (skb->data[2] << 8) | (skb->data[3] << 0);
849852
850853 IDT77252_PRV_PADDR(skb) = dma_map_single(&card->pcidev->dev, skb->data,
851854 skb->len, DMA_TO_DEVICE);
....@@ -859,8 +862,7 @@
859862 tbd->word_1 = SAR_TBD_OAM | ATM_CELL_PAYLOAD | SAR_TBD_EPDU;
860863 tbd->word_2 = IDT77252_PRV_PADDR(skb) + 4;
861864 tbd->word_3 = 0x00000000;
862
- tbd->word_4 = (skb->data[0] << 24) | (skb->data[1] << 16) |
863
- (skb->data[2] << 8) | (skb->data[3] << 0);
865
+ tbd->word_4 = word4;
864866
865867 if (test_bit(VCF_RSV, &vc->flags))
866868 vc = card->vcs[0];
....@@ -890,8 +892,7 @@
890892
891893 tbd->word_2 = IDT77252_PRV_PADDR(skb) + 4;
892894 tbd->word_3 = 0x00000000;
893
- tbd->word_4 = (skb->data[0] << 24) | (skb->data[1] << 16) |
894
- (skb->data[2] << 8) | (skb->data[3] << 0);
895
+ tbd->word_4 = word4;
895896 break;
896897
897898 case ATM_AAL5:
....@@ -971,8 +972,8 @@
971972 {
972973 struct rsq_entry *rsqe;
973974
974
- card->rsq.base = dma_zalloc_coherent(&card->pcidev->dev, RSQSIZE,
975
- &card->rsq.paddr, GFP_KERNEL);
975
+ card->rsq.base = dma_alloc_coherent(&card->pcidev->dev, RSQSIZE,
976
+ &card->rsq.paddr, GFP_KERNEL);
976977 if (card->rsq.base == NULL) {
977978 printk("%s: can't allocate RSQ.\n", card->name);
978979 return -1;
....@@ -1379,7 +1380,6 @@
13791380 printk("%s: can't allocate TSQ.\n", card->name);
13801381 return -1;
13811382 }
1382
- memset(card->tsq.base, 0, TSQSIZE);
13831383
13841384 card->tsq.last = card->tsq.base + TSQ_NUM_ENTRIES - 1;
13851385 card->tsq.next = card->tsq.last;
....@@ -2915,6 +2915,7 @@
29152915
29162916 recycle_rx_pool_skb(card, &vc->rcv.rx_pool);
29172917 }
2918
+ kfree(vc);
29182919 }
29192920 }
29202921 }
....@@ -2956,6 +2957,15 @@
29562957 clear_bit(VCF_IDLE, &vc->flags);
29572958 writel(TCMDQ_START | 0, SAR_REG_TCMDQ);
29582959 return 0;
2960
+}
2961
+
2962
+static void
2963
+close_card_ubr0(struct idt77252_dev *card)
2964
+{
2965
+ struct vc_map *vc = card->vcs[0];
2966
+
2967
+ free_scq(card, vc->scq);
2968
+ kfree(vc);
29592969 }
29602970
29612971 static int
....@@ -3007,6 +3017,7 @@
30073017 struct idt77252_dev *card = dev->dev_data;
30083018 u32 conf;
30093019
3020
+ close_card_ubr0(card);
30103021 close_card_oam(card);
30113022
30123023 conf = SAR_CFG_RXPTH | /* enable receive path */
....@@ -3390,10 +3401,10 @@
33903401 writel(0, SAR_REG_GP);
33913402
33923403 /* Initialize RAW Cell Handle Register */
3393
- card->raw_cell_hnd = dma_zalloc_coherent(&card->pcidev->dev,
3394
- 2 * sizeof(u32),
3395
- &card->raw_cell_paddr,
3396
- GFP_KERNEL);
3404
+ card->raw_cell_hnd = dma_alloc_coherent(&card->pcidev->dev,
3405
+ 2 * sizeof(u32),
3406
+ &card->raw_cell_paddr,
3407
+ GFP_KERNEL);
33973408 if (!card->raw_cell_hnd) {
33983409 printk("%s: memory allocation failure.\n", card->name);
33993410 deinit_card(card);
....@@ -3767,6 +3778,7 @@
37673778 card = idt77252_chain;
37683779 dev = card->atmdev;
37693780 idt77252_chain = card->next;
3781
+ del_timer_sync(&card->tst_timer);
37703782
37713783 if (dev->phy->stop)
37723784 dev->phy->stop(dev);