@@ -252,36 +252,25 @@ static inline u32 fsl_edma_drvflags(struct fsl_edma_chan *fsl_chan)
252252}
253253
254254#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+ )
261260
262261#define edma_read_tcdreg (chan , __name ) \
263262((fsl_edma_drvflags(chan) & FSL_EDMA_DRV_TCD64) ? \
264263 edma_read_tcdreg_c(chan, ((struct fsl_edma_hw_tcd64 __iomem *)chan->tcd), __name) : \
265264 edma_read_tcdreg_c(chan, ((struct fsl_edma_hw_tcd __iomem *)chan->tcd), __name) \
266265)
267266
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+ )
285274
286275#define edma_write_tcdreg (chan , val , __name ) \
287276do { \
@@ -322,29 +311,23 @@ do { \
322311 (((struct fsl_edma_hw_tcd *)_tcd)->_field))
323312
324313#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+ )
328319
329320#define fsl_edma_get_tcd_to_cpu (_chan , _tcd , _field ) \
330321(fsl_edma_drvflags(_chan) & FSL_EDMA_DRV_TCD64 ? \
331322 fsl_edma_le_to_cpu(((struct fsl_edma_hw_tcd64 *)_tcd)->_field) : \
332323 fsl_edma_le_to_cpu(((struct fsl_edma_hw_tcd *)_tcd)->_field))
333324
334325#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+ )
348331
349332#define fsl_edma_set_tcd_to_le (_chan , _tcd , _val , _field ) \
350333do { \
0 commit comments