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

staging: tidspbridge: ioremap physical address of the stack segment in shm

Due to data type change, readl can no longer receive a u32.

Signed-off-by: Omar Ramirez Luna <omar.ramirez@copitl.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Omar Ramirez Luna and committed by
Greg Kroah-Hartman
5ae4fd94 7de8a0cf

+15 -6
+15 -6
drivers/staging/tidspbridge/rmgr/node.c
··· 304 304 u32 pul_value; 305 305 u32 dynext_base; 306 306 u32 off_set = 0; 307 - u32 ul_stack_seg_addr, ul_stack_seg_val; 308 - u32 ul_gpp_mem_base; 307 + u32 ul_stack_seg_val; 309 308 struct cfg_hostres *host_res; 310 309 struct bridge_dev_context *pbridge_context; 311 310 u32 mapped_addr = 0; ··· 580 581 if (strcmp((char *) 581 582 pnode->dcd_props.obj_data.node_obj.ndb_props. 582 583 stack_seg_name, STACKSEGLABEL) == 0) { 584 + void __iomem *stack_seg; 585 + u32 stack_seg_pa; 586 + 583 587 status = 584 588 hnode_mgr->nldr_fxns. 585 589 get_fxn_addr(pnode->nldr_node_obj, "DYNEXT_BEG", ··· 610 608 goto func_end; 611 609 } 612 610 613 - ul_gpp_mem_base = (u32) host_res->mem_base[1]; 614 611 off_set = pul_value - dynext_base; 615 - ul_stack_seg_addr = ul_gpp_mem_base + off_set; 616 - ul_stack_seg_val = readl(ul_stack_seg_addr); 612 + stack_seg_pa = host_res->mem_phys[1] + off_set; 613 + stack_seg = ioremap(stack_seg_pa, SZ_32); 614 + if (!stack_seg) { 615 + status = -ENOMEM; 616 + goto func_end; 617 + } 618 + 619 + ul_stack_seg_val = readl(stack_seg); 620 + 621 + iounmap(stack_seg); 617 622 618 623 dev_dbg(bridge, "%s: StackSegVal = 0x%x, StackSegAddr =" 619 624 " 0x%x\n", __func__, ul_stack_seg_val, 620 - ul_stack_seg_addr); 625 + host_res->mem_base[1] + off_set); 621 626 622 627 pnode->create_args.asa.task_arg_obj.stack_seg = 623 628 ul_stack_seg_val;