diff options
-rw-r--r-- | drivers/misc/genwqe/card_ddcb.c | 16 | ||||
-rw-r--r-- | drivers/misc/genwqe/card_dev.c | 97 | ||||
-rw-r--r-- | drivers/misc/genwqe/card_utils.c | 11 | ||||
-rw-r--r-- | drivers/misc/genwqe/genwqe_driver.h | 3 |
4 files changed, 68 insertions, 59 deletions
diff --git a/drivers/misc/genwqe/card_ddcb.c b/drivers/misc/genwqe/card_ddcb.c index cc6fca7a485..b5a3206df3c 100644 --- a/drivers/misc/genwqe/card_ddcb.c +++ b/drivers/misc/genwqe/card_ddcb.c @@ -276,7 +276,7 @@ static int enqueue_ddcb(struct genwqe_dev *cd, struct ddcb_queue *queue, unsigned int try; int prev_no; struct ddcb *prev_ddcb; - u32 old, new, icrc_hsi_shi; + __be32 old, new, icrc_hsi_shi; u64 num; /* @@ -623,9 +623,9 @@ int __genwqe_purge_ddcb(struct genwqe_dev *cd, struct ddcb_requ *req) unsigned long flags; struct ddcb_queue *queue = req->queue; struct pci_dev *pci_dev = cd->pci_dev; - u32 icrc_hsi_shi = 0x0000; u64 queue_status; - u32 old, new; + __be32 icrc_hsi_shi = 0x0000; + __be32 old, new; /* unsigned long flags; */ if (genwqe_ddcb_software_timeout <= 0) { @@ -839,8 +839,8 @@ int __genwqe_enqueue_ddcb(struct genwqe_dev *cd, struct ddcb_requ *req) &req->cmd.__asiv[0], /* source */ DDCB_ASIV_LENGTH); /* req->cmd.asiv_length */ } else { - pddcb->n.ats_64 = req->cmd.ats; - memcpy(&pddcb->n.asiv[0], /* destination */ + pddcb->n.ats_64 = cpu_to_be64(req->cmd.ats); + memcpy(&pddcb->n.asiv[0], /* destination */ &req->cmd.asiv[0], /* source */ DDCB_ASIV_LENGTH_ATS); /* req->cmd.asiv_length */ } @@ -915,7 +915,8 @@ int __genwqe_execute_raw_ddcb(struct genwqe_dev *cd, goto err_exit; if (ddcb_requ_collect_debug_data(req)) { - if (copy_to_user((void __user *)cmd->ddata_addr, + if (copy_to_user((struct genwqe_debug_data __user *) + (unsigned long)cmd->ddata_addr, &req->debug_data, sizeof(struct genwqe_debug_data))) return -EFAULT; @@ -938,7 +939,8 @@ int __genwqe_execute_raw_ddcb(struct genwqe_dev *cd, __genwqe_purge_ddcb(cd, req); if (ddcb_requ_collect_debug_data(req)) { - if (copy_to_user((void __user *)cmd->ddata_addr, + if (copy_to_user((struct genwqe_debug_data __user *) + (unsigned long)cmd->ddata_addr, &req->debug_data, sizeof(struct genwqe_debug_data))) return -EFAULT; diff --git a/drivers/misc/genwqe/card_dev.c b/drivers/misc/genwqe/card_dev.c index 9b231bb1005..bcd3081b55b 100644 --- a/drivers/misc/genwqe/card_dev.c +++ b/drivers/misc/genwqe/card_dev.c @@ -587,30 +587,31 @@ static int do_flash_update(struct genwqe_file *cfile, /* prepare invariant values */ if (genwqe_get_slu_id(cd) <= 0x2) { - *(u64 *)&req->__asiv[0] = cpu_to_be64(dma_addr); - *(u64 *)&req->__asiv[8] = cpu_to_be64(tocopy); - *(u64 *)&req->__asiv[16] = cpu_to_be64(flash); - *(u32 *)&req->__asiv[24] = cpu_to_be32(0); + *(__be64 *)&req->__asiv[0] = cpu_to_be64(dma_addr); + *(__be64 *)&req->__asiv[8] = cpu_to_be64(tocopy); + *(__be64 *)&req->__asiv[16] = cpu_to_be64(flash); + *(__be32 *)&req->__asiv[24] = cpu_to_be32(0); req->__asiv[24] = load->uid; - *(u32 *)&req->__asiv[28] = cpu_to_be32(crc); + *(__be32 *)&req->__asiv[28] = cpu_to_be32(crc); /* for simulation only */ - *(u64 *)&req->__asiv[88] = cpu_to_be64(load->slu_id); - *(u64 *)&req->__asiv[96] = cpu_to_be64(load->app_id); + *(__be64 *)&req->__asiv[88] = cpu_to_be64(load->slu_id); + *(__be64 *)&req->__asiv[96] = cpu_to_be64(load->app_id); req->asiv_length = 32; /* bytes included in crc calc */ } else { /* setup DDCB for ATS architecture */ - *(u64 *)&req->asiv[0] = cpu_to_be64(dma_addr); - *(u32 *)&req->asiv[8] = cpu_to_be32(tocopy); - *(u32 *)&req->asiv[12] = cpu_to_be32(0); /* resvd */ - *(u64 *)&req->asiv[16] = cpu_to_be64(flash); - *(u32 *)&req->asiv[24] = cpu_to_be32(load->uid<<24); - *(u32 *)&req->asiv[28] = cpu_to_be32(crc); + *(__be64 *)&req->asiv[0] = cpu_to_be64(dma_addr); + *(__be32 *)&req->asiv[8] = cpu_to_be32(tocopy); + *(__be32 *)&req->asiv[12] = cpu_to_be32(0); /* resvd */ + *(__be64 *)&req->asiv[16] = cpu_to_be64(flash); + *(__be32 *)&req->asiv[24] = cpu_to_be32(load->uid<<24); + *(__be32 *)&req->asiv[28] = cpu_to_be32(crc); /* for simulation only */ - *(u64 *)&req->asiv[80] = cpu_to_be64(load->slu_id); - *(u64 *)&req->asiv[88] = cpu_to_be64(load->app_id); + *(__be64 *)&req->asiv[80] = cpu_to_be64(load->slu_id); + *(__be64 *)&req->asiv[88] = cpu_to_be64(load->app_id); - req->ats = cpu_to_be64(0x4ULL << 44); /* Rd only */ + /* Rd only */ + req->ats = 0x4ULL << 44; req->asiv_length = 40; /* bytes included in crc calc */ } req->asv_length = 8; @@ -729,21 +730,23 @@ static int do_flash_read(struct genwqe_file *cfile, /* prepare invariant values */ if (genwqe_get_slu_id(cd) <= 0x2) { - *(u64 *)&cmd->__asiv[0] = cpu_to_be64(dma_addr); - *(u64 *)&cmd->__asiv[8] = cpu_to_be64(tocopy); - *(u64 *)&cmd->__asiv[16] = cpu_to_be64(flash); - *(u32 *)&cmd->__asiv[24] = cpu_to_be32(0); + *(__be64 *)&cmd->__asiv[0] = cpu_to_be64(dma_addr); + *(__be64 *)&cmd->__asiv[8] = cpu_to_be64(tocopy); + *(__be64 *)&cmd->__asiv[16] = cpu_to_be64(flash); + *(__be32 *)&cmd->__asiv[24] = cpu_to_be32(0); cmd->__asiv[24] = load->uid; - *(u32 *)&cmd->__asiv[28] = cpu_to_be32(0) /* CRC */; + *(__be32 *)&cmd->__asiv[28] = cpu_to_be32(0) /* CRC */; cmd->asiv_length = 32; /* bytes included in crc calc */ } else { /* setup DDCB for ATS architecture */ - *(u64 *)&cmd->asiv[0] = cpu_to_be64(dma_addr); - *(u32 *)&cmd->asiv[8] = cpu_to_be32(tocopy); - *(u32 *)&cmd->asiv[12] = cpu_to_be32(0); /* resvd */ - *(u64 *)&cmd->asiv[16] = cpu_to_be64(flash); - *(u32 *)&cmd->asiv[24] = cpu_to_be32(load->uid<<24); - *(u32 *)&cmd->asiv[28] = cpu_to_be32(0); /* CRC */ - cmd->ats = cpu_to_be64(0x5ULL << 44); /* rd/wr */ + *(__be64 *)&cmd->asiv[0] = cpu_to_be64(dma_addr); + *(__be32 *)&cmd->asiv[8] = cpu_to_be32(tocopy); + *(__be32 *)&cmd->asiv[12] = cpu_to_be32(0); /* resvd */ + *(__be64 *)&cmd->asiv[16] = cpu_to_be64(flash); + *(__be32 *)&cmd->asiv[24] = cpu_to_be32(load->uid<<24); + *(__be32 *)&cmd->asiv[28] = cpu_to_be32(0); /* CRC */ + + /* rd/wr */ + cmd->ats = 0x5ULL << 44; cmd->asiv_length = 40; /* bytes included in crc calc */ } cmd->asv_length = 8; @@ -911,9 +914,9 @@ static int ddcb_cmd_fixups(struct genwqe_file *cfile, struct ddcb_requ *req) u64 u_addr, d_addr; u32 u_size = 0; - unsigned long ats_flags; + u64 ats_flags; - ats_flags = ATS_GET_FLAGS(be64_to_cpu(cmd->ats), asiv_offs); + ats_flags = ATS_GET_FLAGS(cmd->ats, asiv_offs); switch (ats_flags) { @@ -922,9 +925,9 @@ static int ddcb_cmd_fixups(struct genwqe_file *cfile, struct ddcb_requ *req) case ATS_TYPE_FLAT_RDWR: case ATS_TYPE_FLAT_RD: { - u_addr = be64_to_cpu(*((u64 *)&cmd-> + u_addr = be64_to_cpu(*((__be64 *)&cmd-> asiv[asiv_offs])); - u_size = be32_to_cpu(*((u32 *)&cmd-> + u_size = be32_to_cpu(*((__be32 *)&cmd-> asiv[asiv_offs + 0x08])); /* @@ -933,7 +936,7 @@ static int ddcb_cmd_fixups(struct genwqe_file *cfile, struct ddcb_requ *req) * fetch the buffer. */ if (u_size == 0x0) { - *((u64 *)&cmd->asiv[asiv_offs]) = + *((__be64 *)&cmd->asiv[asiv_offs]) = cpu_to_be64(0x0); break; } @@ -945,7 +948,8 @@ static int ddcb_cmd_fixups(struct genwqe_file *cfile, struct ddcb_requ *req) goto err_out; } - *((u64 *)&cmd->asiv[asiv_offs]) = cpu_to_be64(d_addr); + *((__be64 *)&cmd->asiv[asiv_offs]) = + cpu_to_be64(d_addr); break; } @@ -953,9 +957,10 @@ static int ddcb_cmd_fixups(struct genwqe_file *cfile, struct ddcb_requ *req) case ATS_TYPE_SGL_RD: { int page_offs, nr_pages, offs; - u_addr = be64_to_cpu(*((u64 *)&cmd->asiv[asiv_offs])); - u_size = be32_to_cpu(*((u32 *)&cmd->asiv[asiv_offs + - 0x08])); + u_addr = be64_to_cpu(*((__be64 *) + &cmd->asiv[asiv_offs])); + u_size = be32_to_cpu(*((__be32 *) + &cmd->asiv[asiv_offs + 0x08])); /* * No data available. Ignore u_addr in this @@ -963,7 +968,7 @@ static int ddcb_cmd_fixups(struct genwqe_file *cfile, struct ddcb_requ *req) * fetch the empty sgl. */ if (u_size == 0x0) { - *((u64 *)&cmd->asiv[asiv_offs]) = + *((__be64 *)&cmd->asiv[asiv_offs]) = cpu_to_be64(0x0); break; } @@ -1007,14 +1012,14 @@ static int ddcb_cmd_fixups(struct genwqe_file *cfile, struct ddcb_requ *req) page_offs, nr_pages); - *((u64 *)&cmd->asiv[asiv_offs]) = + *((__be64 *)&cmd->asiv[asiv_offs]) = cpu_to_be64(req->sgl_dma_addr[i]); break; } default: dev_err(&pci_dev->dev, - "[%s] err: invalid ATS flags %01lx\n", + "[%s] err: invalid ATS flags %01llx\n", __func__, ats_flags); rc = -EINVAL; goto err_out; @@ -1211,7 +1216,8 @@ static long genwqe_ioctl(struct file *filp, unsigned int cmd, if ((filp->f_flags & O_ACCMODE) == O_RDONLY) return -EPERM; - if (copy_from_user(&load, (void __user *)arg, sizeof(load))) { + if (copy_from_user(&load, (void __user *)arg, + sizeof(load))) { dev_err(&pci_dev->dev, "err: could not copy params from user\n"); return -EFAULT; @@ -1236,7 +1242,8 @@ static long genwqe_ioctl(struct file *filp, unsigned int cmd, if (genwqe_flash_readback_fails(cd)) return -ENOSPC; /* known to fail for old versions */ - if (copy_from_user(&load, (void __user *)arg, sizeof(load))) { + if (copy_from_user(&load, (void __user *)arg, + sizeof(load))) { dev_err(&pci_dev->dev, "err: could not copy params from user\n"); return -EFAULT; @@ -1256,7 +1263,8 @@ static long genwqe_ioctl(struct file *filp, unsigned int cmd, case GENWQE_PIN_MEM: { struct genwqe_mem m; - if (copy_from_user(&m, (void __user *)arg, sizeof(m))) { + if (copy_from_user(&m, (void __user *)arg, + sizeof(m))) { dev_err(&pci_dev->dev, "err: could not copy params from user\n"); return -EFAULT; @@ -1267,7 +1275,8 @@ static long genwqe_ioctl(struct file *filp, unsigned int cmd, case GENWQE_UNPIN_MEM: { struct genwqe_mem m; - if (copy_from_user(&m, (void __user *)arg, sizeof(m))) { + if (copy_from_user(&m, (void __user *)arg, + sizeof(m))) { dev_err(&pci_dev->dev, "err: could not copy params from user\n"); return -EFAULT; diff --git a/drivers/misc/genwqe/card_utils.c b/drivers/misc/genwqe/card_utils.c index ff952bb8152..663157b3a0d 100644 --- a/drivers/misc/genwqe/card_utils.c +++ b/drivers/misc/genwqe/card_utils.c @@ -59,7 +59,7 @@ int __genwqe_writeq(struct genwqe_dev *cd, u64 byte_offs, u64 val) if (cd->mmio == NULL) return -EIO; - __raw_writeq(cpu_to_be64((val)), (cd->mmio + byte_offs)); + __raw_writeq((__force u32)cpu_to_be64(val), cd->mmio + byte_offs); return 0; } @@ -72,8 +72,6 @@ int __genwqe_writeq(struct genwqe_dev *cd, u64 byte_offs, u64 val) */ u64 __genwqe_readq(struct genwqe_dev *cd, u64 byte_offs) { - u64 val; - if (cd->err_inject & GENWQE_INJECT_HARDWARE_FAILURE) return 0xffffffffffffffffull; @@ -88,8 +86,7 @@ u64 __genwqe_readq(struct genwqe_dev *cd, u64 byte_offs) if (cd->mmio == NULL) return 0xffffffffffffffffull; - val = be64_to_cpu(__raw_readq(cd->mmio + byte_offs)); - return val; + return be64_to_cpu((__force __be64)__raw_readq(cd->mmio + byte_offs)); } /** @@ -108,7 +105,7 @@ int __genwqe_writel(struct genwqe_dev *cd, u64 byte_offs, u32 val) if (cd->mmio == NULL) return -EIO; - __raw_writel(cpu_to_be32((val)), cd->mmio + byte_offs); + __raw_writel((__force u32)cpu_to_be32(val), cd->mmio + byte_offs); return 0; } @@ -127,7 +124,7 @@ u32 __genwqe_readl(struct genwqe_dev *cd, u64 byte_offs) if (cd->mmio == NULL) return 0xffffffff; - return be32_to_cpu(__raw_readl(cd->mmio + byte_offs)); + return be32_to_cpu((__force __be32)__raw_readl(cd->mmio + byte_offs)); } /** diff --git a/drivers/misc/genwqe/genwqe_driver.h b/drivers/misc/genwqe/genwqe_driver.h index a1572037c0f..b57538999bf 100644 --- a/drivers/misc/genwqe/genwqe_driver.h +++ b/drivers/misc/genwqe/genwqe_driver.h @@ -31,8 +31,9 @@ #include <linux/spinlock.h> #include <linux/mutex.h> #include <linux/platform_device.h> -#include <asm/byteorder.h> +#include <linux/dynamic_debug.h> +#include <asm/byteorder.h> #include <linux/genwqe/genwqe_card.h> #define DRV_VERS_STRING "2.0.0" |