powerpc: Fix compile issue with force DAWR
If you compile with KVM but without CONFIG_HAVE_HW_BREAKPOINT you fail at linking with: arch/powerpc/kvm/book3s_hv_rmhandlers.o:(.text+0x708): undefined reference to `dawr_force_enable' This was caused by commitc1fe190c06
("powerpc: Add force enable of DAWR on P9 option"). This moves a bunch of code around to fix this. It moves a lot of the DAWR code in a new file and creates a new CONFIG_PPC_DAWR to enable compiling it. Fixes:c1fe190c06
("powerpc: Add force enable of DAWR on P9 option") Signed-off-by: Michael Neuling <mikey@neuling.org> [mpe: Minor formatting in set_dawr()] Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:

committed by
Michael Ellerman

parent
548c54acba
commit
a278e7ea60
@@ -797,34 +797,6 @@ static inline int set_dabr(struct arch_hw_breakpoint *brk)
|
||||
return __set_dabr(dabr, dabrx);
|
||||
}
|
||||
|
||||
int set_dawr(struct arch_hw_breakpoint *brk)
|
||||
{
|
||||
unsigned long dawr, dawrx, mrd;
|
||||
|
||||
dawr = brk->address;
|
||||
|
||||
dawrx = (brk->type & (HW_BRK_TYPE_READ | HW_BRK_TYPE_WRITE)) \
|
||||
<< (63 - 58); //* read/write bits */
|
||||
dawrx |= ((brk->type & (HW_BRK_TYPE_TRANSLATE)) >> 2) \
|
||||
<< (63 - 59); //* translate */
|
||||
dawrx |= (brk->type & (HW_BRK_TYPE_PRIV_ALL)) \
|
||||
>> 3; //* PRIM bits */
|
||||
/* dawr length is stored in field MDR bits 48:53. Matches range in
|
||||
doublewords (64 bits) baised by -1 eg. 0b000000=1DW and
|
||||
0b111111=64DW.
|
||||
brk->len is in bytes.
|
||||
This aligns up to double word size, shifts and does the bias.
|
||||
*/
|
||||
mrd = ((brk->len + 7) >> 3) - 1;
|
||||
dawrx |= (mrd & 0x3f) << (63 - 53);
|
||||
|
||||
if (ppc_md.set_dawr)
|
||||
return ppc_md.set_dawr(dawr, dawrx);
|
||||
mtspr(SPRN_DAWR, dawr);
|
||||
mtspr(SPRN_DAWRX, dawrx);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void __set_breakpoint(struct arch_hw_breakpoint *brk)
|
||||
{
|
||||
memcpy(this_cpu_ptr(¤t_brk), brk, sizeof(*brk));
|
||||
|
Reference in New Issue
Block a user