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

powerpc/srio: Fix the compile errors when building with 64bit

For the file "arch/powerpc/sysdev/fsl_rmu.c", there will be some compile
errors while using the corenet64_smp_defconfig:

.../fsl_rmu.c:315: error: cast from pointer to integer of different size
.../fsl_rmu.c:320: error: cast to pointer from integer of different size
.../fsl_rmu.c:320: error: cast to pointer from integer of different size
.../fsl_rmu.c:320: error: cast to pointer from integer of different size
.../fsl_rmu.c:330: error: cast to pointer from integer of different size
.../fsl_rmu.c:332: error: cast to pointer from integer of different size
.../fsl_rmu.c:339: error: cast to pointer from integer of different size
.../fsl_rmu.c:340: error: cast to pointer from integer of different size
.../fsl_rmu.c:341: error: cast to pointer from integer of different size
.../fsl_rmu.c:348: error: cast to pointer from integer of different size
.../fsl_rmu.c:348: error: cast to pointer from integer of different size
.../fsl_rmu.c:348: error: cast to pointer from integer of different size
.../fsl_rmu.c:659: error: cast from pointer to integer of different size
.../fsl_rmu.c:659: error: format '%8.8x' expects type 'unsigned int',
but argument 5 has type 'size_t'
.../fsl_rmu.c:985: error: cast from pointer to integer of different size
.../fsl_rmu.c:997: error: cast to pointer from integer of different size

Rewrote the corresponding code with the support of 64bit building.

Signed-off-by: Liu Gang <Gang.Liu@freescale.com>
Signed-off-by: Shaohui Xie <Shaohui.Xie@freescale.com>
Reported-by: Paul Gortmaker <paul.gortmaker@windriver.com>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>

authored by

Liu Gang and committed by
Kumar Gala
2a2383da b6c46dcf

+22 -20
+22 -20
arch/powerpc/sysdev/fsl_rmu.c
··· 100 100 #define DOORBELL_DSR_TE 0x00000080 101 101 #define DOORBELL_DSR_QFI 0x00000010 102 102 #define DOORBELL_DSR_DIQI 0x00000001 103 - #define DOORBELL_TID_OFFSET 0x02 104 - #define DOORBELL_SID_OFFSET 0x04 105 - #define DOORBELL_INFO_OFFSET 0x06 106 103 107 104 #define DOORBELL_MESSAGE_SIZE 0x08 108 - #define DBELL_SID(x) (*(u16 *)(x + DOORBELL_SID_OFFSET)) 109 - #define DBELL_TID(x) (*(u16 *)(x + DOORBELL_TID_OFFSET)) 110 - #define DBELL_INF(x) (*(u16 *)(x + DOORBELL_INFO_OFFSET)) 111 105 112 106 struct rio_msg_regs { 113 107 u32 omr; ··· 185 191 struct rio_msg_rx_ring msg_rx_ring; 186 192 int txirq; 187 193 int rxirq; 194 + }; 195 + 196 + struct rio_dbell_msg { 197 + u16 pad1; 198 + u16 tid; 199 + u16 sid; 200 + u16 info; 188 201 }; 189 202 190 203 /** ··· 312 311 313 312 /* XXX Need to check/dispatch until queue empty */ 314 313 if (dsr & DOORBELL_DSR_DIQI) { 315 - u32 dmsg = 316 - (u32) fsl_dbell->dbell_ring.virt + 314 + struct rio_dbell_msg *dmsg = 315 + fsl_dbell->dbell_ring.virt + 317 316 (in_be32(&fsl_dbell->dbell_regs->dqdpar) & 0xfff); 318 317 struct rio_dbell *dbell; 319 318 int found = 0; ··· 321 320 pr_debug 322 321 ("RIO: processing doorbell," 323 322 " sid %2.2x tid %2.2x info %4.4x\n", 324 - DBELL_SID(dmsg), DBELL_TID(dmsg), DBELL_INF(dmsg)); 323 + dmsg->sid, dmsg->tid, dmsg->info); 325 324 326 325 for (i = 0; i < MAX_PORT_NUM; i++) { 327 326 if (fsl_dbell->mport[i]) { 328 327 list_for_each_entry(dbell, 329 328 &fsl_dbell->mport[i]->dbells, node) { 330 329 if ((dbell->res->start 331 - <= DBELL_INF(dmsg)) 330 + <= dmsg->info) 332 331 && (dbell->res->end 333 - >= DBELL_INF(dmsg))) { 332 + >= dmsg->info)) { 334 333 found = 1; 335 334 break; 336 335 } 337 336 } 338 337 if (found && dbell->dinb) { 339 338 dbell->dinb(fsl_dbell->mport[i], 340 - dbell->dev_id, DBELL_SID(dmsg), 341 - DBELL_TID(dmsg), 342 - DBELL_INF(dmsg)); 339 + dbell->dev_id, dmsg->sid, 340 + dmsg->tid, 341 + dmsg->info); 343 342 break; 344 343 } 345 344 } ··· 349 348 pr_debug 350 349 ("RIO: spurious doorbell," 351 350 " sid %2.2x tid %2.2x info %4.4x\n", 352 - DBELL_SID(dmsg), DBELL_TID(dmsg), 353 - DBELL_INF(dmsg)); 351 + dmsg->sid, dmsg->tid, 352 + dmsg->info); 354 353 } 355 354 setbits32(&fsl_dbell->dbell_regs->dmr, DOORBELL_DMR_DI); 356 355 out_be32(&fsl_dbell->dbell_regs->dsr, DOORBELL_DSR_DIQI); ··· 658 657 int ret = 0; 659 658 660 659 pr_debug("RIO: fsl_add_outb_message(): destid %4.4x mbox %d buffer " \ 661 - "%8.8x len %8.8x\n", rdev->destid, mbox, (int)buffer, len); 660 + "%p len %8.8zx\n", rdev->destid, mbox, buffer, len); 662 661 if ((len < 8) || (len > RIO_MAX_MSG_SIZE)) { 663 662 ret = -EINVAL; 664 663 goto out; ··· 973 972 void *fsl_get_inb_message(struct rio_mport *mport, int mbox) 974 973 { 975 974 struct fsl_rmu *rmu = GET_RMM_HANDLE(mport); 976 - u32 phys_buf, virt_buf; 975 + u32 phys_buf; 976 + void *virt_buf; 977 977 void *buf = NULL; 978 978 int buf_idx; 979 979 ··· 984 982 if (phys_buf == in_be32(&rmu->msg_regs->ifqepar)) 985 983 goto out2; 986 984 987 - virt_buf = (u32) rmu->msg_rx_ring.virt + (phys_buf 985 + virt_buf = rmu->msg_rx_ring.virt + (phys_buf 988 986 - rmu->msg_rx_ring.phys); 989 987 buf_idx = (phys_buf - rmu->msg_rx_ring.phys) / RIO_MAX_MSG_SIZE; 990 988 buf = rmu->msg_rx_ring.virt_buffer[buf_idx]; ··· 996 994 } 997 995 998 996 /* Copy max message size, caller is expected to allocate that big */ 999 - memcpy(buf, (void *)virt_buf, RIO_MAX_MSG_SIZE); 997 + memcpy(buf, virt_buf, RIO_MAX_MSG_SIZE); 1000 998 1001 999 /* Clear the available buffer */ 1002 1000 rmu->msg_rx_ring.virt_buffer[buf_idx] = NULL;