• John David Anglin's avatar
    parisc: Fix address in HPMC IVA · 1138b671
    John David Anglin authored
    Helge noticed that the address of the os_hpmc handler was not being
    correctly calculated in the hpmc macro.  As a result, PDCE_CHECK would
    fail to call os_hpmc:
    
    <Cpu2> e800009802e00000  0000000000000000  CC_ERR_CHECK_HPMC
    <Cpu2> 37000f7302e00000  8040004000000000  CC_ERR_CPU_CHECK_SUMMARY
    <Cpu2> f600105e02e00000  fffffff0f0c00000  CC_MC_HPMC_MONARCH_SELECTED
    <Cpu2> 140003b202e00000  000000000000000b  CC_ERR_HPMC_STATE_ENTRY
    <Cpu2> 5600100b02e00000  00000000000001a0  CC_MC_OS_HPMC_LEN_ERR
    <Cpu2> 5600106402e00000  fffffff0f0438e70  CC_MC_BR_TO_OS_HPMC_FAILED
    <Cpu2> e800009802e00000  0000000000000000  CC_ERR_CHECK_HPMC
    <Cpu2> 37000f7302e00000  8040004000000000  CC_ERR_CPU_CHECK_SUMMARY
    <Cpu2> 4000109f02e00000  0000000000000000  CC_MC_HPMC_INITIATED
    <Cpu2> 4000101902e00000  0000000000000000  CC_MC_MULTIPLE_HPMCS
    <Cpu2> 030010d502e00000  0000000000000000  CC_CPU_STOP
    
    The address problem can be seen by dumping the fault vector:
    
    0000000040159000 <fault_vector_20>:
        40159000:   63 6f 77 73     stb r15,-2447(dp)
        40159004:   20 63 61 6e     ldil L%b747000,r3
        40159008:   20 66 6c 79     ldil L%-1c3b3000,r3
            ...
        40159020:   08 00 02 40     nop
        40159024:   20 6e 60 02     ldil L%15d000,r3
        40159028:   34 63 00 00     ldo 0(r3),r3
        4015902c:   e8 60 c0 02     bv,n r0(r3)
        40159030:   08 00 02 40     nop
        40159034:   00 00 00 00     break 0,0
        40159038:   c0 00 70 00     bb,*< r0,sar,40159840 <fault_vector_20+0x840>
        4015903c:   00 00 00 00     break 0,0
    
    Location 40159038 should contain the physical address of os_hpmc:
    
    000000004015d000 <os_hpmc>:
        4015d000:   08 1a 02 43     copy r26,r3
        4015d004:   01 c0 08 a4     mfctl iva,r4
        4015d008:   48 85 00 68     ldw 34(r4),r5
    
    This patch moves the address setup into initialize_ivt to resolve the
    above problem.  I tested the change by dumping the HPMC entry after setup:
    
    0000000040209020:  8000240
    0000000040209024: 206a2004
    0000000040209028: 34630ac0
    000000004020902c: e860c002
    0000000040209030:  8000240
    0000000040209034: 1bdddce6
    0000000040209038:   15d000
    000000004020903c:      1a0
    Signed-off-by: default avatarJohn David Anglin <dave.anglin@bell.net>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarHelge Deller <deller@gmx.de>
    1138b671
entry.S 53.6 KB