@@ -252,36 +252,25 @@ static inline u32 fsl_edma_drvflags(struct fsl_edma_chan *fsl_chan)
252
252
}
253
253
254
254
#define edma_read_tcdreg_c (chan , _tcd , __name ) \
255
- (sizeof((_tcd)->__name) == sizeof(u64) ? \
256
- edma_readq(chan->edma, &(_tcd)->__name) : \
257
- ((sizeof((_tcd)->__name) == sizeof(u32)) ? \
258
- edma_readl(chan->edma, &(_tcd)->__name) : \
259
- edma_readw(chan->edma, &(_tcd)->__name) \
260
- ))
255
+ _Generic(((_tcd)->__name), \
256
+ __iomem __le64 : edma_readq(chan->edma, &(_tcd)->__name), \
257
+ __iomem __le32 : edma_readl(chan->edma, &(_tcd)->__name), \
258
+ __iomem __le16 : edma_readw(chan->edma, &(_tcd)->__name) \
259
+ )
261
260
262
261
#define edma_read_tcdreg (chan , __name ) \
263
262
((fsl_edma_drvflags(chan) & FSL_EDMA_DRV_TCD64) ? \
264
263
edma_read_tcdreg_c(chan, ((struct fsl_edma_hw_tcd64 __iomem *)chan->tcd), __name) : \
265
264
edma_read_tcdreg_c(chan, ((struct fsl_edma_hw_tcd __iomem *)chan->tcd), __name) \
266
265
)
267
266
268
- #define edma_write_tcdreg_c (chan , _tcd , _val , __name ) \
269
- do { \
270
- switch (sizeof(_tcd->__name)) { \
271
- case sizeof(u64): \
272
- edma_writeq(chan->edma, (u64 __force)_val, &_tcd->__name); \
273
- break; \
274
- case sizeof(u32): \
275
- edma_writel(chan->edma, (u32 __force)_val, &_tcd->__name); \
276
- break; \
277
- case sizeof(u16): \
278
- edma_writew(chan->edma, (u16 __force)_val, &_tcd->__name); \
279
- break; \
280
- case sizeof(u8): \
281
- edma_writeb(chan->edma, (u8 __force)_val, &_tcd->__name); \
282
- break; \
283
- } \
284
- } while (0)
267
+ #define edma_write_tcdreg_c (chan , _tcd , _val , __name ) \
268
+ _Generic((_tcd->__name), \
269
+ __iomem __le64 : edma_writeq(chan->edma, (u64 __force)(_val), &_tcd->__name), \
270
+ __iomem __le32 : edma_writel(chan->edma, (u32 __force)(_val), &_tcd->__name), \
271
+ __iomem __le16 : edma_writew(chan->edma, (u16 __force)(_val), &_tcd->__name), \
272
+ __iomem u8 : edma_writeb(chan->edma, _val, &_tcd->__name) \
273
+ )
285
274
286
275
#define edma_write_tcdreg (chan , val , __name ) \
287
276
do { \
@@ -322,29 +311,23 @@ do { \
322
311
(((struct fsl_edma_hw_tcd *)_tcd)->_field))
323
312
324
313
#define fsl_edma_le_to_cpu (x ) \
325
- (sizeof(x) == sizeof(u64) ? le64_to_cpu((__force __le64)(x)) : \
326
- (sizeof(x) == sizeof(u32) ? le32_to_cpu((__force __le32)(x)) : \
327
- le16_to_cpu((__force __le16)(x))))
314
+ _Generic((x), \
315
+ __le64 : le64_to_cpu((x)), \
316
+ __le32 : le32_to_cpu((x)), \
317
+ __le16 : le16_to_cpu((x)) \
318
+ )
328
319
329
320
#define fsl_edma_get_tcd_to_cpu (_chan , _tcd , _field ) \
330
321
(fsl_edma_drvflags(_chan) & FSL_EDMA_DRV_TCD64 ? \
331
322
fsl_edma_le_to_cpu(((struct fsl_edma_hw_tcd64 *)_tcd)->_field) : \
332
323
fsl_edma_le_to_cpu(((struct fsl_edma_hw_tcd *)_tcd)->_field))
333
324
334
325
#define fsl_edma_set_tcd_to_le_c (_tcd , _val , _field ) \
335
- do { \
336
- switch (sizeof((_tcd)->_field)) { \
337
- case sizeof(u64): \
338
- *(__force __le64 *)(&((_tcd)->_field)) = cpu_to_le64(_val); \
339
- break; \
340
- case sizeof(u32): \
341
- *(__force __le32 *)(&((_tcd)->_field)) = cpu_to_le32(_val); \
342
- break; \
343
- case sizeof(u16): \
344
- *(__force __le16 *)(&((_tcd)->_field)) = cpu_to_le16(_val); \
345
- break; \
346
- } \
347
- } while (0)
326
+ _Generic(((_tcd)->_field), \
327
+ __le64 : (_tcd)->_field = cpu_to_le64(_val), \
328
+ __le32 : (_tcd)->_field = cpu_to_le32(_val), \
329
+ __le16 : (_tcd)->_field = cpu_to_le16(_val) \
330
+ )
348
331
349
332
#define fsl_edma_set_tcd_to_le (_chan , _tcd , _val , _field ) \
350
333
do { \
0 commit comments