#define BRANCH_ABSOLUTE        0x2
 
 bool is_offset_in_branch_range(long offset);
-int create_branch(struct ppc_inst *instr, const struct ppc_inst *addr,
+int create_branch(struct ppc_inst *instr, const u32 *addr,
                  unsigned long target, int flags);
-int create_cond_branch(struct ppc_inst *instr, const struct ppc_inst *addr,
+int create_cond_branch(struct ppc_inst *instr, const u32 *addr,
                       unsigned long target, int flags);
-int patch_branch(struct ppc_inst *addr, unsigned long target, int flags);
-int patch_instruction(struct ppc_inst *addr, struct ppc_inst instr);
-int raw_patch_instruction(struct ppc_inst *addr, struct ppc_inst instr);
+int patch_branch(u32 *addr, unsigned long target, int flags);
+int patch_instruction(u32 *addr, struct ppc_inst instr);
+int raw_patch_instruction(u32 *addr, struct ppc_inst instr);
 
 static inline unsigned long patch_site_addr(s32 *site)
 {
 
 static inline int patch_instruction_site(s32 *site, struct ppc_inst instr)
 {
-       return patch_instruction((struct ppc_inst *)patch_site_addr(site), instr);
+       return patch_instruction((u32 *)patch_site_addr(site), instr);
 }
 
 static inline int patch_branch_site(s32 *site, unsigned long target, int flags)
 {
-       return patch_branch((struct ppc_inst *)patch_site_addr(site), target, flags);
+       return patch_branch((u32 *)patch_site_addr(site), target, flags);
 }
 
 static inline int modify_instruction(unsigned int *addr, unsigned int clr,
                                     unsigned int set)
 {
-       return patch_instruction((struct ppc_inst *)addr, ppc_inst((*addr & ~clr) | set));
+       return patch_instruction(addr, ppc_inst((*addr & ~clr) | set));
 }
 
 static inline int modify_instruction_site(s32 *site, unsigned int clr, unsigned int set)
 
 int instr_is_relative_branch(struct ppc_inst instr);
 int instr_is_relative_link_branch(struct ppc_inst instr);
-unsigned long branch_target(const struct ppc_inst *instr);
-int translate_branch(struct ppc_inst *instr, const struct ppc_inst *dest,
-                    const struct ppc_inst *src);
+unsigned long branch_target(const u32 *instr);
+int translate_branch(struct ppc_inst *instr, const u32 *dest, const u32 *src);
 extern bool is_conditional_branch(struct ppc_inst instr);
 #ifdef CONFIG_PPC_BOOK3E_64
 void __patch_exception(int exc, unsigned long addr);
 
        return ppc_inst_prefix(swab32(ppc_inst_val(x)), swab32(ppc_inst_suffix(x)));
 }
 
-static inline struct ppc_inst ppc_inst_read(const struct ppc_inst *ptr)
+static inline struct ppc_inst ppc_inst_read(const u32 *ptr)
 {
        u32 val, suffix;
 
-       val = *(u32 *)ptr;
+       val = *ptr;
        if ((val >> 26) == OP_PREFIX) {
-               suffix = *((u32 *)ptr + 1);
+               suffix = *(ptr + 1);
                return ppc_inst_prefix(val, suffix);
        } else {
                return ppc_inst(val);
        return ppc_inst(swab32(ppc_inst_val(x)));
 }
 
-static inline struct ppc_inst ppc_inst_read(const struct ppc_inst *ptr)
+static inline struct ppc_inst ppc_inst_read(const u32 *ptr)
 {
-       return *ptr;
+       return ppc_inst(*ptr);
 }
 
 #endif /* CONFIG_PPC64 */
  * Return the address of the next instruction, if the instruction @value was
  * located at @location.
  */
-static inline struct ppc_inst *ppc_inst_next(void *location, struct ppc_inst *value)
+static inline u32 *ppc_inst_next(u32 *location, u32 *value)
 {
        struct ppc_inst tmp;
 
        tmp = ppc_inst_read(value);
 
-       return location + ppc_inst_len(tmp);
+       return (void *)location + ppc_inst_len(tmp);
 }
 
 static inline unsigned long ppc_inst_as_ulong(struct ppc_inst x)
        __str;                          \
 })
 
-int copy_inst_from_kernel_nofault(struct ppc_inst *inst, struct ppc_inst *src);
+int copy_inst_from_kernel_nofault(struct ppc_inst *inst, u32 *src);
 
 #endif /* _ASM_POWERPC_INST_H */
 
 
 struct arch_uprobe {
        union {
-               struct ppc_inst insn;
-               struct ppc_inst ixol;
+               u32 insn[2];
+               u32 ixol[2];
        };
 };
 
 
 
 static void __init create_trampoline(unsigned long addr)
 {
-       struct ppc_inst *p = (struct ppc_inst *)addr;
+       u32 *p = (u32 *)addr;
 
        /* The maximum range of a single instruction branch, is the current
         * instruction's address + (32 MB - 4) bytes. For the trampoline we
         * two instructions it doesn't require any registers.
         */
        patch_instruction(p, ppc_inst(PPC_RAW_NOP()));
-       patch_branch((void *)p + 4, addr + PHYSICAL_START, 0);
+       patch_branch(p + 1, addr + PHYSICAL_START, 0);
 }
 
 void __init setup_kdump_trampoline(void)
 
 
        for (i = 0; i < (len / 4); i++) {
                struct ppc_inst inst = ppc_inst(be32_to_cpu(insts[i]));
-               patch_instruction((struct ppc_inst *)(epapr_hypercall_start + i), inst);
+               patch_instruction(epapr_hypercall_start + i, inst);
 #if !defined(CONFIG_64BIT) || defined(CONFIG_PPC_BOOK3E_64)
-               patch_instruction((struct ppc_inst *)(epapr_ev_idle_start + i), inst);
+               patch_instruction(epapr_ev_idle_start + i, inst);
 #endif
        }
 
 
 void arch_jump_label_transform(struct jump_entry *entry,
                               enum jump_label_type type)
 {
-       struct ppc_inst *addr = (struct ppc_inst *)jump_entry_code(entry);
+       u32 *addr = (u32 *)jump_entry_code(entry);
 
        if (type == JUMP_LABEL_JMP)
                patch_branch(addr, jump_entry_target(entry), 0);
 
 
 int kgdb_arch_set_breakpoint(struct kgdb_bkpt *bpt)
 {
+       u32 instr, *addr = (u32 *)bpt->bpt_addr;
        int err;
-       unsigned int instr;
-       struct ppc_inst *addr = (struct ppc_inst *)bpt->bpt_addr;
 
-       err = get_kernel_nofault(instr, (unsigned *) addr);
+       err = get_kernel_nofault(instr, addr);
        if (err)
                return err;
 
        if (err)
                return -EFAULT;
 
-       *(unsigned int *)bpt->saved_instr = instr;
+       *(u32 *)bpt->saved_instr = instr;
 
        return 0;
 }
 {
        int err;
        unsigned int instr = *(unsigned int *)bpt->saved_instr;
-       struct ppc_inst *addr = (struct ppc_inst *)bpt->bpt_addr;
+       u32 *addr = (u32 *)bpt->bpt_addr;
 
        err = patch_instruction(addr, ppc_inst(instr));
        if (err)
 
 {
        int ret = 0;
        struct kprobe *prev;
-       struct ppc_inst insn = ppc_inst_read((struct ppc_inst *)p->addr);
+       struct ppc_inst insn = ppc_inst_read(p->addr);
 
        if ((unsigned long)p->addr & 0x03) {
                printk("Attempt to register kprobe at an unaligned address\n");
                printk("Cannot register a kprobe on rfi/rfid or mtmsr[d]\n");
                ret = -EINVAL;
        } else if ((unsigned long)p->addr & ~PAGE_MASK &&
-                  ppc_inst_prefixed(ppc_inst_read((struct ppc_inst *)(p->addr - 1)))) {
+                  ppc_inst_prefixed(ppc_inst_read(p->addr - 1))) {
                printk("Cannot register a kprobe on the second word of prefixed instruction\n");
                ret = -EINVAL;
        }
        preempt_disable();
        prev = get_kprobe(p->addr - 1);
        preempt_enable_no_resched();
-       if (prev &&
-           ppc_inst_prefixed(ppc_inst_read((struct ppc_inst *)prev->ainsn.insn))) {
+       if (prev && ppc_inst_prefixed(ppc_inst_read(prev->ainsn.insn))) {
                printk("Cannot register a kprobe on the second word of prefixed instruction\n");
                ret = -EINVAL;
        }
        }
 
        if (!ret) {
-               patch_instruction((struct ppc_inst *)p->ainsn.insn, insn);
+               patch_instruction(p->ainsn.insn, insn);
                p->opcode = ppc_inst_val(insn);
        }
 
 
 void arch_arm_kprobe(struct kprobe *p)
 {
-       patch_instruction((struct ppc_inst *)p->addr, ppc_inst(BREAKPOINT_INSTRUCTION));
+       patch_instruction(p->addr, ppc_inst(BREAKPOINT_INSTRUCTION));
 }
 NOKPROBE_SYMBOL(arch_arm_kprobe);
 
 void arch_disarm_kprobe(struct kprobe *p)
 {
-       patch_instruction((struct ppc_inst *)p->addr, ppc_inst(p->opcode));
+       patch_instruction(p->addr, ppc_inst(p->opcode));
 }
 NOKPROBE_SYMBOL(arch_disarm_kprobe);
 
 static int try_to_emulate(struct kprobe *p, struct pt_regs *regs)
 {
        int ret;
-       struct ppc_inst insn = ppc_inst_read((struct ppc_inst *)p->ainsn.insn);
+       struct ppc_inst insn = ppc_inst_read(p->ainsn.insn);
 
        /* regs->nip is also adjusted if emulate_step returns 1 */
        ret = emulate_step(regs, insn);
        if (!cur || user_mode(regs))
                return 0;
 
-       len = ppc_inst_len(ppc_inst_read((struct ppc_inst *)cur->ainsn.insn));
+       len = ppc_inst_len(ppc_inst_read(cur->ainsn.insn));
        /* make sure we got here for instruction we have a kprobe on */
        if (((unsigned long)cur->ainsn.insn + len) != regs->nip)
                return 0;
 
        pfn = addr_to_pfn(regs, regs->nip);
        if (pfn != ULONG_MAX) {
                instr_addr = (pfn << PAGE_SHIFT) + (regs->nip & ~PAGE_MASK);
-               instr = ppc_inst_read((struct ppc_inst *)instr_addr);
+               instr = ppc_inst_read((u32 *)instr_addr);
                if (!analyse_instr(&op, &tmp, instr)) {
                        pfn = addr_to_pfn(regs, op.ea);
                        *addr = op.ea;
 
         * Ensure that the instruction is not a conditional branch,
         * and that can be emulated.
         */
-       if (!is_conditional_branch(ppc_inst_read((struct ppc_inst *)p->ainsn.insn)) &&
-           analyse_instr(&op, ®s,
-                         ppc_inst_read((struct ppc_inst *)p->ainsn.insn)) == 1) {
+       if (!is_conditional_branch(ppc_inst_read(p->ainsn.insn)) &&
+           analyse_instr(&op, ®s, ppc_inst_read(p->ainsn.insn)) == 1) {
                emulate_update_regs(®s, &op);
                nip = regs.nip;
        }
 
 static void patch_imm32_load_insns(unsigned long val, int reg, kprobe_opcode_t *addr)
 {
-       patch_instruction((struct ppc_inst *)addr,
-                         ppc_inst(PPC_RAW_LIS(reg, IMM_H(val))));
+       patch_instruction(addr, ppc_inst(PPC_RAW_LIS(reg, IMM_H(val))));
        addr++;
 
-       patch_instruction((struct ppc_inst *)addr,
-                         ppc_inst(PPC_RAW_ORI(reg, reg, IMM_L(val))));
+       patch_instruction(addr, ppc_inst(PPC_RAW_ORI(reg, reg, IMM_L(val))));
 }
 
 /*
 static void patch_imm64_load_insns(unsigned long long val, int reg, kprobe_opcode_t *addr)
 {
        /* lis reg,(op)@highest */
-       patch_instruction((struct ppc_inst *)addr,
+       patch_instruction(addr,
                          ppc_inst(PPC_INST_ADDIS | ___PPC_RT(reg) |
                                   ((val >> 48) & 0xffff)));
        addr++;
 
        /* ori reg,reg,(op)@higher */
-       patch_instruction((struct ppc_inst *)addr,
+       patch_instruction(addr,
                          ppc_inst(PPC_INST_ORI | ___PPC_RA(reg) |
                                   ___PPC_RS(reg) | ((val >> 32) & 0xffff)));
        addr++;
 
        /* rldicr reg,reg,32,31 */
-       patch_instruction((struct ppc_inst *)addr,
+       patch_instruction(addr,
                          ppc_inst(PPC_INST_RLDICR | ___PPC_RA(reg) |
                                   ___PPC_RS(reg) | __PPC_SH64(32) | __PPC_ME64(31)));
        addr++;
 
        /* oris reg,reg,(op)@h */
-       patch_instruction((struct ppc_inst *)addr,
+       patch_instruction(addr,
                          ppc_inst(PPC_INST_ORIS | ___PPC_RA(reg) |
                                   ___PPC_RS(reg) | ((val >> 16) & 0xffff)));
        addr++;
 
        /* ori reg,reg,(op)@l */
-       patch_instruction((struct ppc_inst *)addr,
+       patch_instruction(addr,
                          ppc_inst(PPC_INST_ORI | ___PPC_RA(reg) |
                                   ___PPC_RS(reg) | (val & 0xffff)));
 }
        size = (TMPL_END_IDX * sizeof(kprobe_opcode_t)) / sizeof(int);
        pr_devel("Copying template to %p, size %lu\n", buff, size);
        for (i = 0; i < size; i++) {
-               rc = patch_instruction((struct ppc_inst *)(buff + i),
-                                      ppc_inst(*(optprobe_template_entry + i)));
+               rc = patch_instruction(buff + i, ppc_inst(*(optprobe_template_entry + i)));
                if (rc < 0)
                        goto error;
        }
                goto error;
        }
 
-       rc = create_branch(&branch_op_callback,
-                          (struct ppc_inst *)(buff + TMPL_CALL_HDLR_IDX),
+       rc = create_branch(&branch_op_callback, buff + TMPL_CALL_HDLR_IDX,
                           (unsigned long)op_callback_addr,
                           BRANCH_SET_LINK);
 
-       rc |= create_branch(&branch_emulate_step,
-                           (struct ppc_inst *)(buff + TMPL_EMULATE_IDX),
+       rc |= create_branch(&branch_emulate_step, buff + TMPL_EMULATE_IDX,
                            (unsigned long)emulate_step_addr,
                            BRANCH_SET_LINK);
 
        if (rc)
                goto error;
 
-       patch_instruction((struct ppc_inst *)(buff + TMPL_CALL_HDLR_IDX),
-                         branch_op_callback);
-       patch_instruction((struct ppc_inst *)(buff + TMPL_EMULATE_IDX),
-                         branch_emulate_step);
+       patch_instruction(buff + TMPL_CALL_HDLR_IDX, branch_op_callback);
+       patch_instruction(buff + TMPL_EMULATE_IDX, branch_emulate_step);
 
        /*
         * 3. load instruction to be emulated into relevant register, and
         */
-       temp = ppc_inst_read((struct ppc_inst *)p->ainsn.insn);
+       temp = ppc_inst_read(p->ainsn.insn);
        patch_imm_load_insns(ppc_inst_as_ulong(temp), 4, buff + TMPL_INSN_IDX);
 
        /*
         * 4. branch back from trampoline
         */
-       patch_branch((struct ppc_inst *)(buff + TMPL_RET_IDX), (unsigned long)nip, 0);
+       patch_branch(buff + TMPL_RET_IDX, nip, 0);
 
        flush_icache_range((unsigned long)buff,
                           (unsigned long)(&buff[TMPL_END_IDX]));
                 */
                memcpy(op->optinsn.copied_insn, op->kp.addr,
                                               RELATIVEJUMP_SIZE);
-               create_branch(&instr,
-                             (struct ppc_inst *)op->kp.addr,
+               create_branch(&instr, op->kp.addr,
                              (unsigned long)op->optinsn.insn, 0);
-               patch_instruction((struct ppc_inst *)op->kp.addr, instr);
+               patch_instruction(op->kp.addr, instr);
                list_del_init(&op->list);
        }
 }
 
  */
 notrace void __init machine_init(u64 dt_ptr)
 {
-       struct ppc_inst *addr = (struct ppc_inst *)patch_site_addr(&patch__memset_nocache);
+       u32 *addr = (u32 *)patch_site_addr(&patch__memset_nocache);
        struct ppc_inst insn;
 
        /* Configure static keys first, now that we're relocated. */
 
        addr = ppc_function_entry((void *)addr);
 
        /* if (link) set op to 'bl' else 'b' */
-       create_branch(&op, (struct ppc_inst *)ip, addr, link ? 1 : 0);
+       create_branch(&op, (u32 *)ip, addr, link ? 1 : 0);
 
        return op;
 }
        }
 
        /* replace the text with the new text */
-       if (patch_instruction((struct ppc_inst *)ip, new))
+       if (patch_instruction((u32 *)ip, new))
                return -EPERM;
 
        return 0;
        addr = ppc_function_entry((void *)addr);
 
        /* use the create_branch to verify that this offset can be branched */
-       return create_branch(&op, (struct ppc_inst *)ip, addr, 0) == 0;
+       return create_branch(&op, (u32 *)ip, addr, 0) == 0;
 }
 
 static int is_bl_op(struct ppc_inst op)
        }
 #endif /* CONFIG_MPROFILE_KERNEL */
 
-       if (patch_instruction((struct ppc_inst *)ip, pop)) {
+       if (patch_instruction((u32 *)ip, pop)) {
                pr_err("Patching NOP failed.\n");
                return -EPERM;
        }
 
        op = ppc_inst(PPC_RAW_NOP());
 
-       if (patch_instruction((struct ppc_inst *)ip, op))
+       if (patch_instruction((u32 *)ip, op))
                return -EPERM;
 
        return 0;
                return -1;
        }
 
-       if (patch_branch((struct ppc_inst *)tramp, ptr, 0)) {
+       if (patch_branch((u32 *)tramp, ptr, 0)) {
                pr_debug("REL24 out of range!\n");
                return -1;
        }
                }
        }
 
-       if (patch_instruction((struct ppc_inst *)ip, ppc_inst(PPC_RAW_NOP()))) {
+       if (patch_instruction((u32 *)ip, ppc_inst(PPC_RAW_NOP()))) {
                pr_err("Patching NOP failed.\n");
                return -EPERM;
        }
 {
        int err;
        struct ppc_inst op;
-       unsigned long ip = rec->ip;
+       u32 *ip = (u32 *)rec->ip;
 
        /* read where this goes */
-       if (copy_inst_from_kernel_nofault(&op, (void *)ip))
+       if (copy_inst_from_kernel_nofault(&op, ip))
                return -EFAULT;
 
        /* It should be pointing to a nop */
        }
 
        /* create the branch to the trampoline */
-       err = create_branch(&op, (struct ppc_inst *)ip,
-                           rec->arch.mod->arch.tramp, BRANCH_SET_LINK);
+       err = create_branch(&op, ip, rec->arch.mod->arch.tramp, BRANCH_SET_LINK);
        if (err) {
                pr_err("REL24 out of range!\n");
                return -EINVAL;
 
        pr_devel("write to %lx\n", rec->ip);
 
-       if (patch_instruction((struct ppc_inst *)ip, op))
+       if (patch_instruction(ip, op))
                return -EPERM;
 
        return 0;
        /* The new target may be within range */
        if (test_24bit_addr(ip, addr)) {
                /* within range */
-               if (patch_branch((struct ppc_inst *)ip, addr, BRANCH_SET_LINK)) {
+               if (patch_branch((u32 *)ip, addr, BRANCH_SET_LINK)) {
                        pr_err("REL24 out of range!\n");
                        return -EINVAL;
                }
        }
 
        /* Ensure branch is within 24 bits */
-       if (create_branch(&op, (struct ppc_inst *)ip, tramp, BRANCH_SET_LINK)) {
+       if (create_branch(&op, (u32 *)ip, tramp, BRANCH_SET_LINK)) {
                pr_err("Branch out of range\n");
                return -EINVAL;
        }
 
-       if (patch_branch((struct ppc_inst *)ip, tramp, BRANCH_SET_LINK)) {
+       if (patch_branch((u32 *)ip, tramp, BRANCH_SET_LINK)) {
                pr_err("REL24 out of range!\n");
                return -EINVAL;
        }
        struct ppc_inst old, new;
        int ret;
 
-       old = ppc_inst_read((struct ppc_inst *)&ftrace_call);
+       old = ppc_inst_read((u32 *)&ftrace_call);
        new = ftrace_call_replace(ip, (unsigned long)func, 1);
        ret = ftrace_modify_code(ip, old, new);
 
        /* Also update the regs callback function */
        if (!ret) {
                ip = (unsigned long)(&ftrace_regs_call);
-               old = ppc_inst_read((struct ppc_inst *)&ftrace_regs_call);
+               old = ppc_inst_read((u32 *)&ftrace_regs_call);
                new = ftrace_call_replace(ip, (unsigned long)func, 1);
                ret = ftrace_modify_code(ip, old, new);
        }
 
                return -EINVAL;
 
        if (cpu_has_feature(CPU_FTR_ARCH_31) &&
-           ppc_inst_prefixed(ppc_inst_read(&auprobe->insn)) &&
+           ppc_inst_prefixed(ppc_inst_read(auprobe->insn)) &&
            (addr & 0x3f) == 60) {
                pr_info_ratelimited("Cannot register a uprobe on 64 byte unaligned prefixed instruction\n");
                return -EINVAL;
         * support doesn't exist and have to fix-up the next instruction
         * to be executed.
         */
-       regs->nip = (unsigned long)ppc_inst_next((void *)utask->vaddr, &auprobe->insn);
+       regs->nip = (unsigned long)ppc_inst_next((void *)utask->vaddr, auprobe->insn);
 
        user_disable_single_step(current);
        return 0;
         * emulate_step() returns 1 if the insn was successfully emulated.
         * For all other cases, we need to single-step in hardware.
         */
-       ret = emulate_step(regs, ppc_inst_read(&auprobe->insn));
+       ret = emulate_step(regs, ppc_inst_read(auprobe->insn));
        if (ret > 0)
                return true;
 
 
 #include <asm/setup.h>
 #include <asm/inst.h>
 
-static int __patch_instruction(struct ppc_inst *exec_addr, struct ppc_inst instr,
-                              struct ppc_inst *patch_addr)
+static int __patch_instruction(u32 *exec_addr, struct ppc_inst instr, u32 *patch_addr)
 {
        if (!ppc_inst_prefixed(instr)) {
                u32 val = ppc_inst_val(instr);
        return -EFAULT;
 }
 
-int raw_patch_instruction(struct ppc_inst *addr, struct ppc_inst instr)
+int raw_patch_instruction(u32 *addr, struct ppc_inst instr)
 {
        return __patch_instruction(addr, instr, addr);
 }
        return 0;
 }
 
-static int do_patch_instruction(struct ppc_inst *addr, struct ppc_inst instr)
+static int do_patch_instruction(u32 *addr, struct ppc_inst instr)
 {
        int err;
-       struct ppc_inst *patch_addr = NULL;
+       u32 *patch_addr = NULL;
        unsigned long flags;
        unsigned long text_poke_addr;
        unsigned long kaddr = (unsigned long)addr;
                goto out;
        }
 
-       patch_addr = (struct ppc_inst *)(text_poke_addr + (kaddr & ~PAGE_MASK));
+       patch_addr = (u32 *)(text_poke_addr + (kaddr & ~PAGE_MASK));
 
        __patch_instruction(addr, instr, patch_addr);
 
 }
 #else /* !CONFIG_STRICT_KERNEL_RWX */
 
-static int do_patch_instruction(struct ppc_inst *addr, struct ppc_inst instr)
+static int do_patch_instruction(u32 *addr, struct ppc_inst instr)
 {
        return raw_patch_instruction(addr, instr);
 }
 
 #endif /* CONFIG_STRICT_KERNEL_RWX */
 
-int patch_instruction(struct ppc_inst *addr, struct ppc_inst instr)
+int patch_instruction(u32 *addr, struct ppc_inst instr)
 {
        /* Make sure we aren't patching a freed init section */
        if (init_mem_is_free && init_section_contains(addr, 4)) {
 }
 NOKPROBE_SYMBOL(patch_instruction);
 
-int patch_branch(struct ppc_inst *addr, unsigned long target, int flags)
+int patch_branch(u32 *addr, unsigned long target, int flags)
 {
        struct ppc_inst instr;
 
 }
 NOKPROBE_SYMBOL(is_conditional_branch);
 
-int create_branch(struct ppc_inst *instr,
-                 const struct ppc_inst *addr,
+int create_branch(struct ppc_inst *instr, const u32 *addr,
                  unsigned long target, int flags)
 {
        long offset;
        return 0;
 }
 
-int create_cond_branch(struct ppc_inst *instr, const struct ppc_inst *addr,
+int create_cond_branch(struct ppc_inst *instr, const u32 *addr,
                       unsigned long target, int flags)
 {
        long offset;
        return instr_is_relative_branch(instr) && (ppc_inst_val(instr) & BRANCH_SET_LINK);
 }
 
-static unsigned long branch_iform_target(const struct ppc_inst *instr)
+static unsigned long branch_iform_target(const u32 *instr)
 {
        signed long imm;
 
        return (unsigned long)imm;
 }
 
-static unsigned long branch_bform_target(const struct ppc_inst *instr)
+static unsigned long branch_bform_target(const u32 *instr)
 {
        signed long imm;
 
        return (unsigned long)imm;
 }
 
-unsigned long branch_target(const struct ppc_inst *instr)
+unsigned long branch_target(const u32 *instr)
 {
        if (instr_is_branch_iform(ppc_inst_read(instr)))
                return branch_iform_target(instr);
        return 0;
 }
 
-int translate_branch(struct ppc_inst *instr, const struct ppc_inst *dest,
-                    const struct ppc_inst *src)
+int translate_branch(struct ppc_inst *instr, const u32 *dest, const u32 *src)
 {
        unsigned long target;
        target = branch_target(src);
         * instruction of the exception, not the first one
         */
 
-       patch_branch((struct ppc_inst *)(ibase + (exc / 4) + 1), addr, 0);
+       patch_branch(ibase + (exc / 4) + 1, addr, 0);
 }
 #endif
 
 #ifdef CONFIG_CODE_PATCHING_SELFTEST
 
-static int instr_is_branch_to_addr(const struct ppc_inst *instr, unsigned long addr)
+static int instr_is_branch_to_addr(const u32 *instr, unsigned long addr)
 {
        if (instr_is_branch_iform(ppc_inst_read(instr)) ||
            instr_is_branch_bform(ppc_inst_read(instr)))
        int err;
        struct ppc_inst instr;
        u32 tmp[2];
-       struct ppc_inst *iptr = (struct ppc_inst *)tmp;
+       u32 *iptr = tmp;
        unsigned long addr = (unsigned long)tmp;
 
        /* The simplest case, branch to self, no flags */
 
 static void __init test_create_function_call(void)
 {
-       struct ppc_inst *iptr;
+       u32 *iptr;
        unsigned long dest;
        struct ppc_inst instr;
 
        /* Check we can create a function call */
-       iptr = (struct ppc_inst *)ppc_function_entry(test_trampoline);
+       iptr = (u32 *)ppc_function_entry(test_trampoline);
        dest = ppc_function_entry(test_create_function_call);
        create_branch(&instr, iptr, dest, BRANCH_SET_LINK);
        patch_instruction(iptr, instr);
 {
        int err;
        unsigned long addr;
-       struct ppc_inst *iptr, instr;
+       struct ppc_inst instr;
        u32 tmp[2];
+       u32 *iptr = tmp;
        unsigned int flags;
 
-       iptr = (struct ppc_inst *)tmp;
        addr = (unsigned long)iptr;
 
        /* The simplest case, branch to self, no flags */
        extern unsigned int code_patching_test1_expected[];
        extern unsigned int end_code_patching_test1[];
 
-       __patch_instruction((struct ppc_inst *)code_patching_test1,
+       __patch_instruction(code_patching_test1,
                            ppc_inst_prefix(OP_PREFIX << 26, 0x00000000),
-                           (struct ppc_inst *)code_patching_test1);
+                           code_patching_test1);
 
        check(!memcmp(code_patching_test1,
                      code_patching_test1_expected,
 
        long            alt_end_off;
 };
 
-static struct ppc_inst *calc_addr(struct fixup_entry *fcur, long offset)
+static u32 *calc_addr(struct fixup_entry *fcur, long offset)
 {
        /*
         * We store the offset to the code as a negative offset from
         * the start of the alt_entry, to support the VDSO. This
         * routine converts that back into an actual address.
         */
-       return (struct ppc_inst *)((unsigned long)fcur + offset);
+       return (u32 *)((unsigned long)fcur + offset);
 }
 
-static int patch_alt_instruction(struct ppc_inst *src, struct ppc_inst *dest,
-                                struct ppc_inst *alt_start, struct ppc_inst *alt_end)
+static int patch_alt_instruction(u32 *src, u32 *dest, u32 *alt_start, u32 *alt_end)
 {
        int err;
        struct ppc_inst instr;
        instr = ppc_inst_read(src);
 
        if (instr_is_relative_branch(ppc_inst_read(src))) {
-               struct ppc_inst *target = (struct ppc_inst *)branch_target(src);
+               u32 *target = (u32 *)branch_target(src);
 
                /* Branch within the section doesn't need translating */
                if (target < alt_start || target > alt_end) {
 
 static int patch_feature_section(unsigned long value, struct fixup_entry *fcur)
 {
-       struct ppc_inst *start, *end, *alt_start, *alt_end, *src, *dest, nop;
+       u32 *start, *end, *alt_start, *alt_end, *src, *dest;
 
        start = calc_addr(fcur, fcur->start_off);
        end = calc_addr(fcur, fcur->end_off);
                        return 1;
        }
 
-       nop = ppc_inst(PPC_RAW_NOP());
-       for (; dest < end; dest = ppc_inst_next(dest, &nop))
-               raw_patch_instruction(dest, nop);
+       for (; dest < end; dest++)
+               raw_patch_instruction(dest, ppc_inst(PPC_RAW_NOP()));
 
        return 0;
 }
 
                // See comment in do_entry_flush_fixups() RE order of patching
                if (types & STF_BARRIER_FALLBACK) {
-                       patch_instruction((struct ppc_inst *)dest, ppc_inst(instrs[0]));
-                       patch_instruction((struct ppc_inst *)(dest + 2), ppc_inst(instrs[2]));
-                       patch_branch((struct ppc_inst *)(dest + 1),
+                       patch_instruction(dest, ppc_inst(instrs[0]));
+                       patch_instruction(dest + 2, ppc_inst(instrs[2]));
+                       patch_branch(dest + 1,
                                     (unsigned long)&stf_barrier_fallback, BRANCH_SET_LINK);
                } else {
-                       patch_instruction((struct ppc_inst *)(dest + 1), ppc_inst(instrs[1]));
-                       patch_instruction((struct ppc_inst *)(dest + 2), ppc_inst(instrs[2]));
-                       patch_instruction((struct ppc_inst *)dest, ppc_inst(instrs[0]));
+                       patch_instruction(dest + 1, ppc_inst(instrs[1]));
+                       patch_instruction(dest + 2, ppc_inst(instrs[2]));
+                       patch_instruction(dest, ppc_inst(instrs[0]));
                }
        }
 
 
                pr_devel("patching dest %lx\n", (unsigned long)dest);
 
-               patch_instruction((struct ppc_inst *)dest, ppc_inst(instrs[0]));
-               patch_instruction((struct ppc_inst *)(dest + 1), ppc_inst(instrs[1]));
-               patch_instruction((struct ppc_inst *)(dest + 2), ppc_inst(instrs[2]));
-               patch_instruction((struct ppc_inst *)(dest + 3), ppc_inst(instrs[3]));
-               patch_instruction((struct ppc_inst *)(dest + 4), ppc_inst(instrs[4]));
-               patch_instruction((struct ppc_inst *)(dest + 5), ppc_inst(instrs[5]));
+               patch_instruction(dest, ppc_inst(instrs[0]));
+               patch_instruction(dest + 1, ppc_inst(instrs[1]));
+               patch_instruction(dest + 2, ppc_inst(instrs[2]));
+               patch_instruction(dest + 3, ppc_inst(instrs[3]));
+               patch_instruction(dest + 4, ppc_inst(instrs[4]));
+               patch_instruction(dest + 5, ppc_inst(instrs[5]));
        }
        printk(KERN_DEBUG "stf-barrier: patched %d exit locations (%s barrier)\n", i,
                (types == STF_BARRIER_NONE)                  ? "no" :
 
                pr_devel("patching dest %lx\n", (unsigned long)dest);
 
-               patch_instruction((struct ppc_inst *)dest, ppc_inst(instrs[0]));
+               patch_instruction(dest, ppc_inst(instrs[0]));
 
-               patch_instruction((struct ppc_inst *)(dest + 1), ppc_inst(instrs[1]));
-               patch_instruction((struct ppc_inst *)(dest + 2), ppc_inst(instrs[2]));
-               patch_instruction((struct ppc_inst *)(dest + 3), ppc_inst(instrs[3]));
+               patch_instruction(dest + 1, ppc_inst(instrs[1]));
+               patch_instruction(dest + 2, ppc_inst(instrs[2]));
+               patch_instruction(dest + 3, ppc_inst(instrs[3]));
        }
 
        printk(KERN_DEBUG "uaccess-flush: patched %d locations (%s flush)\n", i,
                pr_devel("patching dest %lx\n", (unsigned long)dest);
 
                if (types == L1D_FLUSH_FALLBACK) {
-                       patch_instruction((struct ppc_inst *)dest, ppc_inst(instrs[0]));
-                       patch_instruction((struct ppc_inst *)(dest + 2), ppc_inst(instrs[2]));
-                       patch_branch((struct ppc_inst *)(dest + 1),
+                       patch_instruction(dest, ppc_inst(instrs[0]));
+                       patch_instruction(dest + 2, ppc_inst(instrs[2]));
+                       patch_branch(dest + 1,
                                     (unsigned long)&entry_flush_fallback, BRANCH_SET_LINK);
                } else {
-                       patch_instruction((struct ppc_inst *)(dest + 1), ppc_inst(instrs[1]));
-                       patch_instruction((struct ppc_inst *)(dest + 2), ppc_inst(instrs[2]));
-                       patch_instruction((struct ppc_inst *)dest, ppc_inst(instrs[0]));
+                       patch_instruction(dest + 1, ppc_inst(instrs[1]));
+                       patch_instruction(dest + 2, ppc_inst(instrs[2]));
+                       patch_instruction(dest, ppc_inst(instrs[0]));
                }
        }
 
                pr_devel("patching dest %lx\n", (unsigned long)dest);
 
                if (types == L1D_FLUSH_FALLBACK) {
-                       patch_instruction((struct ppc_inst *)dest, ppc_inst(instrs[0]));
-                       patch_instruction((struct ppc_inst *)(dest + 2), ppc_inst(instrs[2]));
-                       patch_branch((struct ppc_inst *)(dest + 1),
+                       patch_instruction(dest, ppc_inst(instrs[0]));
+                       patch_instruction(dest + 2, ppc_inst(instrs[2]));
+                       patch_branch(dest + 1,
                                     (unsigned long)&scv_entry_flush_fallback, BRANCH_SET_LINK);
                } else {
-                       patch_instruction((struct ppc_inst *)(dest + 1), ppc_inst(instrs[1]));
-                       patch_instruction((struct ppc_inst *)(dest + 2), ppc_inst(instrs[2]));
-                       patch_instruction((struct ppc_inst *)dest, ppc_inst(instrs[0]));
+                       patch_instruction(dest + 1, ppc_inst(instrs[1]));
+                       patch_instruction(dest + 2, ppc_inst(instrs[2]));
+                       patch_instruction(dest, ppc_inst(instrs[0]));
                }
        }
 
 
                pr_devel("patching dest %lx\n", (unsigned long)dest);
 
-               patch_instruction((struct ppc_inst *)dest, ppc_inst(instrs[0]));
-               patch_instruction((struct ppc_inst *)(dest + 1), ppc_inst(instrs[1]));
-               patch_instruction((struct ppc_inst *)(dest + 2), ppc_inst(instrs[2]));
+               patch_instruction(dest, ppc_inst(instrs[0]));
+               patch_instruction(dest + 1, ppc_inst(instrs[1]));
+               patch_instruction(dest + 2, ppc_inst(instrs[2]));
        }
 
        printk(KERN_DEBUG "rfi-flush: patched %d locations (%s flush)\n", i,
                dest = (void *)start + *start;
 
                pr_devel("patching dest %lx\n", (unsigned long)dest);
-               patch_instruction((struct ppc_inst *)dest, ppc_inst(instr));
+               patch_instruction(dest, ppc_inst(instr));
        }
 
        printk(KERN_DEBUG "barrier-nospec: patched %d locations\n", i);
                dest = (void *)start + *start;
 
                pr_devel("patching dest %lx\n", (unsigned long)dest);
-               patch_instruction((struct ppc_inst *)dest, ppc_inst(instr[0]));
-               patch_instruction((struct ppc_inst *)(dest + 1), ppc_inst(instr[1]));
+               patch_instruction(dest, ppc_inst(instr[0]));
+               patch_instruction(dest + 1, ppc_inst(instr[1]));
        }
 
        printk(KERN_DEBUG "barrier-nospec: patched %d locations\n", i);
        end = (void *)curr + *(curr + 1);
        for (; start < end; start++) {
                pr_devel("patching dest %lx\n", (unsigned long)start);
-               patch_instruction((struct ppc_inst *)start, ppc_inst(PPC_RAW_NOP()));
+               patch_instruction(start, ppc_inst(PPC_RAW_NOP()));
        }
 }
 
 void do_lwsync_fixups(unsigned long value, void *fixup_start, void *fixup_end)
 {
        long *start, *end;
-       struct ppc_inst *dest;
+       u32 *dest;
 
        if (!(value & CPU_FTR_LWSYNC))
                return ;
 static void do_final_fixups(void)
 {
 #if defined(CONFIG_PPC64) && defined(CONFIG_RELOCATABLE)
-       struct ppc_inst inst, *src, *dest, *end;
+       struct ppc_inst inst;
+       u32 *src, *dest, *end;
 
        if (PHYSICAL_START == 0)
                return;
 
-       src = (struct ppc_inst *)(KERNELBASE + PHYSICAL_START);
-       dest = (struct ppc_inst *)KERNELBASE;
+       src = (u32 *)(KERNELBASE + PHYSICAL_START);
+       dest = (u32 *)KERNELBASE;
        end = (void *)src + (__end_interrupts - _stext);
 
        while (src < end) {
 
        return is_kernel_addr((unsigned long)unsafe_src);
 }
 
-int copy_inst_from_kernel_nofault(struct ppc_inst *inst, struct ppc_inst *src)
+int copy_inst_from_kernel_nofault(struct ppc_inst *inst, u32 *src)
 {
        unsigned int val, suffix;
        int err;
        if (err)
                return err;
        if (IS_ENABLED(CONFIG_PPC64) && get_op(val) == OP_PREFIX) {
-               err = copy_from_kernel_nofault(&suffix, (void *)src + 4, 4);
+               err = copy_from_kernel_nofault(&suffix, src + 1, sizeof(suffix));
                *inst = ppc_inst_prefix(val, suffix);
        } else {
                *inst = ppc_inst(val);
 
                                sizeof(instr)))
                        return 0;
 
-               return branch_target((struct ppc_inst *)&instr);
+               return branch_target(&instr);
        }
 
        /* Userspace: need copy instruction here then translate it */
                        sizeof(instr)))
                return 0;
 
-       target = branch_target((struct ppc_inst *)&instr);
+       target = branch_target(&instr);
        if ((!target) || (instr & BRANCH_ABSOLUTE))
                return target;
 
 
 
        /* Setup fake reset vector to call __secondary_start_mpc86xx. */
        target = (unsigned long) __secondary_start_mpc86xx;
-       patch_branch((struct ppc_inst *)vector, target, BRANCH_SET_LINK);
+       patch_branch(vector, target, BRANCH_SET_LINK);
 
        /* Kick that CPU */
        smp_86xx_release_core(nr);
                mdelay(1);
 
        /* Restore the exception vector */
-       patch_instruction((struct ppc_inst *)vector, ppc_inst(save_vector));
+       patch_instruction(vector, ppc_inst(save_vector));
 
        local_irq_restore(flags);
 
 
         *   b __secondary_start_pmac_0 + nr*8
         */
        target = (unsigned long) __secondary_start_pmac_0 + nr * 8;
-       patch_branch((struct ppc_inst *)vector, target, BRANCH_SET_LINK);
+       patch_branch(vector, target, BRANCH_SET_LINK);
 
        /* Put some life in our friend */
        pmac_call_feature(PMAC_FTR_RESET_CPU, NULL, nr, 0);
        mdelay(1);
 
        /* Restore our exception vector */
-       patch_instruction((struct ppc_inst *)vector, ppc_inst(save_vector));
+       patch_instruction(vector, ppc_inst(save_vector));
 
        local_irq_restore(flags);
        if (ppc_md.progress) ppc_md.progress("smp_core99_kick_cpu done", 0x347);
 
 /* Breakpoint stuff */
 struct bpt {
        unsigned long   address;
-       struct ppc_inst *instr;
+       u32             *instr;
        atomic_t        ref_count;
        int             enabled;
        unsigned long   pad;
                }
 
                patch_instruction(bp->instr, instr);
-               patch_instruction(ppc_inst_next(bp->instr, &instr),
+               patch_instruction(ppc_inst_next(bp->instr, bp->instr),
                                  ppc_inst(bpinstr));
                if (bp->enabled & BP_CIABR)
                        continue;
-               if (patch_instruction((struct ppc_inst *)bp->address,
+               if (patch_instruction((u32 *)bp->address,
                                      ppc_inst(bpinstr)) != 0) {
                        printf("Couldn't write instruction at %lx, "
                               "disabling breakpoint there\n", bp->address);
                if (mread_instr(bp->address, &instr)
                    && ppc_inst_equal(instr, ppc_inst(bpinstr))
                    && patch_instruction(
-                       (struct ppc_inst *)bp->address, ppc_inst_read(bp->instr)) != 0)
+                       (u32 *)bp->address, ppc_inst_read(bp->instr)) != 0)
                        printf("Couldn't remove breakpoint at %lx\n",
                               bp->address);
        }
        if (setjmp(bus_error_jmp) == 0) {
                catch_memory_errors = 1;
                sync();
-               *instr = ppc_inst_read((struct ppc_inst *)adrs);
+               *instr = ppc_inst_read((u32 *)adrs);
                sync();
                /* wait a little while to see if we get a machine check */
                __delay(200);