hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/net/ethernet/toshiba/ps3_gelic_net.c
....@@ -317,15 +317,17 @@
317317
318318 /* set up the hardware pointers in each descriptor */
319319 for (i = 0; i < no; i++, descr++) {
320
- gelic_descr_set_status(descr, GELIC_DESCR_DMA_NOT_IN_USE);
321
- descr->bus_addr =
322
- dma_map_single(ctodev(card), descr,
323
- GELIC_DESCR_SIZE,
324
- DMA_BIDIRECTIONAL);
320
+ dma_addr_t cpu_addr;
325321
326
- if (!descr->bus_addr)
322
+ gelic_descr_set_status(descr, GELIC_DESCR_DMA_NOT_IN_USE);
323
+
324
+ cpu_addr = dma_map_single(ctodev(card), descr,
325
+ GELIC_DESCR_SIZE, DMA_BIDIRECTIONAL);
326
+
327
+ if (dma_mapping_error(ctodev(card), cpu_addr))
327328 goto iommu_error;
328329
330
+ descr->bus_addr = cpu_to_be32(cpu_addr);
329331 descr->next = descr + 1;
330332 descr->prev = descr - 1;
331333 }
....@@ -365,26 +367,28 @@
365367 *
366368 * allocates a new rx skb, iommu-maps it and attaches it to the descriptor.
367369 * Activate the descriptor state-wise
370
+ *
371
+ * Gelic RX sk_buffs must be aligned to GELIC_NET_RXBUF_ALIGN and the length
372
+ * must be a multiple of GELIC_NET_RXBUF_ALIGN.
368373 */
369374 static int gelic_descr_prepare_rx(struct gelic_card *card,
370375 struct gelic_descr *descr)
371376 {
377
+ static const unsigned int rx_skb_size =
378
+ ALIGN(GELIC_NET_MAX_FRAME, GELIC_NET_RXBUF_ALIGN) +
379
+ GELIC_NET_RXBUF_ALIGN - 1;
380
+ dma_addr_t cpu_addr;
372381 int offset;
373
- unsigned int bufsize;
374382
375383 if (gelic_descr_get_status(descr) != GELIC_DESCR_DMA_NOT_IN_USE)
376384 dev_info(ctodev(card), "%s: ERROR status\n", __func__);
377
- /* we need to round up the buffer size to a multiple of 128 */
378
- bufsize = ALIGN(GELIC_NET_MAX_MTU, GELIC_NET_RXBUF_ALIGN);
379385
380
- /* and we need to have it 128 byte aligned, therefore we allocate a
381
- * bit more */
382
- descr->skb = dev_alloc_skb(bufsize + GELIC_NET_RXBUF_ALIGN - 1);
386
+ descr->skb = netdev_alloc_skb(*card->netdev, rx_skb_size);
383387 if (!descr->skb) {
384388 descr->buf_addr = 0; /* tell DMAC don't touch memory */
385389 return -ENOMEM;
386390 }
387
- descr->buf_size = cpu_to_be32(bufsize);
391
+ descr->buf_size = cpu_to_be32(rx_skb_size);
388392 descr->dmac_cmd_status = 0;
389393 descr->result_size = 0;
390394 descr->valid_size = 0;
....@@ -395,11 +399,10 @@
395399 if (offset)
396400 skb_reserve(descr->skb, GELIC_NET_RXBUF_ALIGN - offset);
397401 /* io-mmu-map the skb */
398
- descr->buf_addr = cpu_to_be32(dma_map_single(ctodev(card),
399
- descr->skb->data,
400
- GELIC_NET_MAX_MTU,
401
- DMA_FROM_DEVICE));
402
- if (!descr->buf_addr) {
402
+ cpu_addr = dma_map_single(ctodev(card), descr->skb->data,
403
+ GELIC_NET_MAX_FRAME, DMA_FROM_DEVICE);
404
+ descr->buf_addr = cpu_to_be32(cpu_addr);
405
+ if (dma_mapping_error(ctodev(card), cpu_addr)) {
403406 dev_kfree_skb_any(descr->skb);
404407 descr->skb = NULL;
405408 dev_info(ctodev(card),
....@@ -779,7 +782,7 @@
779782
780783 buf = dma_map_single(ctodev(card), skb->data, skb->len, DMA_TO_DEVICE);
781784
782
- if (!buf) {
785
+ if (dma_mapping_error(ctodev(card), buf)) {
783786 dev_err(ctodev(card),
784787 "dma map 2 failed (%p, %i). Dropping packet\n",
785788 skb->data, skb->len);
....@@ -915,7 +918,7 @@
915918 data_error = be32_to_cpu(descr->data_error);
916919 /* unmap skb buffer */
917920 dma_unmap_single(ctodev(card), be32_to_cpu(descr->buf_addr),
918
- GELIC_NET_MAX_MTU,
921
+ GELIC_NET_MAX_FRAME,
919922 DMA_FROM_DEVICE);
920923
921924 skb_put(skb, be32_to_cpu(descr->valid_size)?