Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ethernet: ucc_geth: remove bd_mem_part and all associated code

The bd_mem_part member of ucc_geth_info always has the value
MEM_PART_SYSTEM, and AFAICT, there has never been any code setting it
to any other value. Moreover, muram is a somewhat precious resource,
so there's no point using that when normal memory serves just as well.

Apart from removing a lot of dead code, this is also motivated by
wanting to clean up the "store result from kmalloc() in a u32" mess.

Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Rasmus Villemoes and committed by
Jakub Kicinski
64a99fe5 b29fafd3

+27 -84
+27 -77
drivers/net/ethernet/freescale/ucc_geth.c
··· 72 72 73 73 static const struct ucc_geth_info ugeth_primary_info = { 74 74 .uf_info = { 75 - .bd_mem_part = MEM_PART_SYSTEM, 76 75 .rtsm = UCC_FAST_SEND_IDLES_BETWEEN_FRAMES, 77 76 .max_rx_buf_length = 1536, 78 77 /* adjusted at startup if max-speed 1000 */ ··· 1853 1854 1854 1855 kfree(ugeth->rx_skbuff[i]); 1855 1856 1856 - if (ugeth->ug_info->uf_info.bd_mem_part == 1857 - MEM_PART_SYSTEM) 1858 - kfree((void *)ugeth->rx_bd_ring_offset[i]); 1859 - else if (ugeth->ug_info->uf_info.bd_mem_part == 1860 - MEM_PART_MURAM) 1861 - qe_muram_free(ugeth->rx_bd_ring_offset[i]); 1857 + kfree((void *)ugeth->rx_bd_ring_offset[i]); 1862 1858 ugeth->p_rx_bd_ring[i] = NULL; 1863 1859 } 1864 1860 } ··· 1891 1897 kfree(ugeth->tx_skbuff[i]); 1892 1898 1893 1899 if (ugeth->p_tx_bd_ring[i]) { 1894 - if (ugeth->ug_info->uf_info.bd_mem_part == 1895 - MEM_PART_SYSTEM) 1896 - kfree((void *)ugeth->tx_bd_ring_offset[i]); 1897 - else if (ugeth->ug_info->uf_info.bd_mem_part == 1898 - MEM_PART_MURAM) 1899 - qe_muram_free(ugeth->tx_bd_ring_offset[i]); 1900 + kfree((void *)ugeth->tx_bd_ring_offset[i]); 1900 1901 ugeth->p_tx_bd_ring[i] = NULL; 1901 1902 } 1902 1903 } ··· 2049 2060 ug_info = ugeth->ug_info; 2050 2061 uf_info = &ug_info->uf_info; 2051 2062 2052 - if (!((uf_info->bd_mem_part == MEM_PART_SYSTEM) || 2053 - (uf_info->bd_mem_part == MEM_PART_MURAM))) { 2054 - if (netif_msg_probe(ugeth)) 2055 - pr_err("Bad memory partition value\n"); 2056 - return -EINVAL; 2057 - } 2058 - 2059 2063 /* Rx BD lengths */ 2060 2064 for (i = 0; i < ug_info->numQueuesRx; i++) { 2061 2065 if ((ug_info->bdRingLenRx[i] < UCC_GETH_RX_BD_RING_SIZE_MIN) || ··· 2168 2186 2169 2187 /* Allocate Tx bds */ 2170 2188 for (j = 0; j < ug_info->numQueuesTx; j++) { 2189 + u32 align = UCC_GETH_TX_BD_RING_ALIGNMENT; 2190 + 2171 2191 /* Allocate in multiple of 2172 2192 UCC_GETH_TX_BD_RING_SIZE_MEMORY_ALIGNMENT, 2173 2193 according to spec */ ··· 2179 2195 if ((ug_info->bdRingLenTx[j] * sizeof(struct qe_bd)) % 2180 2196 UCC_GETH_TX_BD_RING_SIZE_MEMORY_ALIGNMENT) 2181 2197 length += UCC_GETH_TX_BD_RING_SIZE_MEMORY_ALIGNMENT; 2182 - if (uf_info->bd_mem_part == MEM_PART_SYSTEM) { 2183 - u32 align = UCC_GETH_TX_BD_RING_ALIGNMENT; 2184 2198 2185 - ugeth->tx_bd_ring_offset[j] = 2186 - (u32) kmalloc((u32) (length + align), GFP_KERNEL); 2199 + ugeth->tx_bd_ring_offset[j] = 2200 + (u32) kmalloc((u32) (length + align), GFP_KERNEL); 2187 2201 2188 - if (ugeth->tx_bd_ring_offset[j] != 0) 2189 - ugeth->p_tx_bd_ring[j] = 2190 - (u8 __iomem *)((ugeth->tx_bd_ring_offset[j] + 2191 - align) & ~(align - 1)); 2192 - } else if (uf_info->bd_mem_part == MEM_PART_MURAM) { 2193 - ugeth->tx_bd_ring_offset[j] = 2194 - qe_muram_alloc(length, 2195 - UCC_GETH_TX_BD_RING_ALIGNMENT); 2196 - if (!IS_ERR_VALUE(ugeth->tx_bd_ring_offset[j])) 2197 - ugeth->p_tx_bd_ring[j] = 2198 - (u8 __iomem *) qe_muram_addr(ugeth-> 2199 - tx_bd_ring_offset[j]); 2200 - } 2202 + if (ugeth->tx_bd_ring_offset[j] != 0) 2203 + ugeth->p_tx_bd_ring[j] = 2204 + (u8 __iomem *)((ugeth->tx_bd_ring_offset[j] + 2205 + align) & ~(align - 1)); 2206 + 2201 2207 if (!ugeth->p_tx_bd_ring[j]) { 2202 2208 if (netif_msg_ifup(ugeth)) 2203 2209 pr_err("Can not allocate memory for Tx bd rings\n"); ··· 2245 2271 2246 2272 /* Allocate Rx bds */ 2247 2273 for (j = 0; j < ug_info->numQueuesRx; j++) { 2248 - length = ug_info->bdRingLenRx[j] * sizeof(struct qe_bd); 2249 - if (uf_info->bd_mem_part == MEM_PART_SYSTEM) { 2250 - u32 align = UCC_GETH_RX_BD_RING_ALIGNMENT; 2274 + u32 align = UCC_GETH_RX_BD_RING_ALIGNMENT; 2251 2275 2252 - ugeth->rx_bd_ring_offset[j] = 2253 - (u32) kmalloc((u32) (length + align), GFP_KERNEL); 2254 - if (ugeth->rx_bd_ring_offset[j] != 0) 2255 - ugeth->p_rx_bd_ring[j] = 2256 - (u8 __iomem *)((ugeth->rx_bd_ring_offset[j] + 2257 - align) & ~(align - 1)); 2258 - } else if (uf_info->bd_mem_part == MEM_PART_MURAM) { 2259 - ugeth->rx_bd_ring_offset[j] = 2260 - qe_muram_alloc(length, 2261 - UCC_GETH_RX_BD_RING_ALIGNMENT); 2262 - if (!IS_ERR_VALUE(ugeth->rx_bd_ring_offset[j])) 2263 - ugeth->p_rx_bd_ring[j] = 2264 - (u8 __iomem *) qe_muram_addr(ugeth-> 2265 - rx_bd_ring_offset[j]); 2266 - } 2276 + length = ug_info->bdRingLenRx[j] * sizeof(struct qe_bd); 2277 + ugeth->rx_bd_ring_offset[j] = 2278 + (u32) kmalloc((u32) (length + align), GFP_KERNEL); 2279 + if (ugeth->rx_bd_ring_offset[j] != 0) 2280 + ugeth->p_rx_bd_ring[j] = 2281 + (u8 __iomem *)((ugeth->rx_bd_ring_offset[j] + 2282 + align) & ~(align - 1)); 2283 + 2267 2284 if (!ugeth->p_rx_bd_ring[j]) { 2268 2285 if (netif_msg_ifup(ugeth)) 2269 2286 pr_err("Can not allocate memory for Rx bd rings\n"); ··· 2519 2554 endOfRing = 2520 2555 ugeth->p_tx_bd_ring[i] + (ug_info->bdRingLenTx[i] - 2521 2556 1) * sizeof(struct qe_bd); 2522 - if (ugeth->ug_info->uf_info.bd_mem_part == MEM_PART_SYSTEM) { 2523 - out_be32(&ugeth->p_send_q_mem_reg->sqqd[i].bd_ring_base, 2524 - (u32) virt_to_phys(ugeth->p_tx_bd_ring[i])); 2525 - out_be32(&ugeth->p_send_q_mem_reg->sqqd[i]. 2526 - last_bd_completed_address, 2527 - (u32) virt_to_phys(endOfRing)); 2528 - } else if (ugeth->ug_info->uf_info.bd_mem_part == 2529 - MEM_PART_MURAM) { 2530 - out_be32(&ugeth->p_send_q_mem_reg->sqqd[i].bd_ring_base, 2531 - (u32)qe_muram_dma(ugeth->p_tx_bd_ring[i])); 2532 - out_be32(&ugeth->p_send_q_mem_reg->sqqd[i]. 2533 - last_bd_completed_address, 2534 - (u32)qe_muram_dma(endOfRing)); 2535 - } 2557 + out_be32(&ugeth->p_send_q_mem_reg->sqqd[i].bd_ring_base, 2558 + (u32) virt_to_phys(ugeth->p_tx_bd_ring[i])); 2559 + out_be32(&ugeth->p_send_q_mem_reg->sqqd[i]. 2560 + last_bd_completed_address, 2561 + (u32) virt_to_phys(endOfRing)); 2536 2562 } 2537 2563 2538 2564 /* schedulerbasepointer */ ··· 2742 2786 /* Setup the table */ 2743 2787 /* Assume BD rings are already established */ 2744 2788 for (i = 0; i < ug_info->numQueuesRx; i++) { 2745 - if (ugeth->ug_info->uf_info.bd_mem_part == MEM_PART_SYSTEM) { 2746 - out_be32(&ugeth->p_rx_bd_qs_tbl[i].externalbdbaseptr, 2747 - (u32) virt_to_phys(ugeth->p_rx_bd_ring[i])); 2748 - } else if (ugeth->ug_info->uf_info.bd_mem_part == 2749 - MEM_PART_MURAM) { 2750 - out_be32(&ugeth->p_rx_bd_qs_tbl[i].externalbdbaseptr, 2751 - (u32)qe_muram_dma(ugeth->p_rx_bd_ring[i])); 2752 - } 2789 + out_be32(&ugeth->p_rx_bd_qs_tbl[i].externalbdbaseptr, 2790 + (u32) virt_to_phys(ugeth->p_rx_bd_ring[i])); 2753 2791 /* rest of fields handled by QE */ 2754 2792 } 2755 2793
-6
include/soc/fsl/qe/qe.h
··· 27 27 #define QE_NUM_OF_BRGS 16 28 28 #define QE_NUM_OF_PORTS 1024 29 29 30 - /* Memory partitions 31 - */ 32 - #define MEM_PART_SYSTEM 0 33 - #define MEM_PART_SECONDARY 1 34 - #define MEM_PART_MURAM 2 35 - 36 30 /* Clocks and BRGs */ 37 31 enum qe_clock { 38 32 QE_CLK_NONE = 0,
-1
include/soc/fsl/qe/ucc_fast.h
··· 146 146 resource_size_t regs; 147 147 int irq; 148 148 u32 uccm_mask; 149 - int bd_mem_part; 150 149 int brkpt_support; 151 150 int grant_support; 152 151 int tsa;