res_base = platform_get_resource_byname(pdev, IORESOURCE_MEM, "global");
if (res_base) {
- if (WARN_ON(res_page->start <= res_base->start))
- return -EINVAL;
+ resource_size_t page_offset, page_no;
+ unsigned int ch_base_offset;
+ if (res_page->start < res_base->start)
+ return -EINVAL;
page_offset = res_page->start - res_base->start;
- page_no = div_u64(page_offset, cdata->ch_base_offset);
+ ch_base_offset = cdata->ch_base_offset;
+ if (!ch_base_offset)
+ return -EINVAL;
- if (WARN_ON(page_no == 0 || page_no > cdata->max_page))
+ page_no = div_u64(page_offset, ch_base_offset);
- if (!page_no || page_no > INT_MAX)
++ if (!page_no || page_no > cdata->max_page)
return -EINVAL;
- tdma->ch_page_no = lower_32_bits(page_no) - 1;
+ tdma->ch_page_no = page_no - 1;
tdma->base_addr = devm_ioremap_resource(&pdev->dev, res_base);
if (IS_ERR(tdma->base_addr))
return PTR_ERR(tdma->base_addr);