Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=4d43466d567a6620f4f6d8576e1bed5d7cf4c28d
Commit:     4d43466d567a6620f4f6d8576e1bed5d7cf4c28d
Parent:     58bd403c3c79dd41acf5af2d170bd4e0872bb326
Author:     Jeremy Kerr <[EMAIL PROTECTED]>
AuthorDate: Wed Dec 5 13:49:31 2007 +1100
Committer:  Arnd Bergmann <[EMAIL PROTECTED]>
CommitDate: Wed Dec 19 01:00:04 2007 +0100

    [POWERPC] cell: use spu_load_slb for SLB setup
    
    Now that we have a helper function to setup a SPU SLB, use it for
    __spu_trap_data_seq.
    
    Signed-off-by: Jeremy Kerr <[EMAIL PROTECTED]>
    Signed-off-by: Arnd Bergmann <[EMAIL PROTECTED]>
---
 arch/powerpc/platforms/cell/spu_base.c |   23 ++++++++++-------------
 1 files changed, 10 insertions(+), 13 deletions(-)

diff --git a/arch/powerpc/platforms/cell/spu_base.c 
b/arch/powerpc/platforms/cell/spu_base.c
index 2ec1d38..8398af6 100644
--- a/arch/powerpc/platforms/cell/spu_base.c
+++ b/arch/powerpc/platforms/cell/spu_base.c
@@ -169,9 +169,8 @@ static inline void spu_load_slb(struct spu *spu, int slbe, 
struct spu_slb *slb)
 
 static int __spu_trap_data_seg(struct spu *spu, unsigned long ea)
 {
-       struct spu_priv2 __iomem *priv2 = spu->priv2;
        struct mm_struct *mm = spu->mm;
-       u64 esid, vsid, llp;
+       struct spu_slb slb;
        int psize;
 
        pr_debug("%s\n", __FUNCTION__);
@@ -183,7 +182,7 @@ static int __spu_trap_data_seg(struct spu *spu, unsigned 
long ea)
                printk("%s: invalid access during switch!\n", __func__);
                return 1;
        }
-       esid = (ea & ESID_MASK) | SLB_ESID_V;
+       slb.esid = (ea & ESID_MASK) | SLB_ESID_V;
 
        switch(REGION_ID(ea)) {
        case USER_REGION_ID:
@@ -192,21 +191,21 @@ static int __spu_trap_data_seg(struct spu *spu, unsigned 
long ea)
 #else
                psize = mm->context.user_psize;
 #endif
-               vsid = (get_vsid(mm->context.id, ea, MMU_SEGSIZE_256M) << 
SLB_VSID_SHIFT) |
-                               SLB_VSID_USER;
+               slb.vsid = (get_vsid(mm->context.id, ea, MMU_SEGSIZE_256M)
+                               << SLB_VSID_SHIFT) | SLB_VSID_USER;
                break;
        case VMALLOC_REGION_ID:
                if (ea < VMALLOC_END)
                        psize = mmu_vmalloc_psize;
                else
                        psize = mmu_io_psize;
-               vsid = (get_kernel_vsid(ea, MMU_SEGSIZE_256M) << 
SLB_VSID_SHIFT) |
-                       SLB_VSID_KERNEL;
+               slb.vsid = (get_kernel_vsid(ea, MMU_SEGSIZE_256M)
+                               << SLB_VSID_SHIFT) | SLB_VSID_KERNEL;
                break;
        case KERNEL_REGION_ID:
                psize = mmu_linear_psize;
-               vsid = (get_kernel_vsid(ea, MMU_SEGSIZE_256M) << 
SLB_VSID_SHIFT) |
-                       SLB_VSID_KERNEL;
+               slb.vsid = (get_kernel_vsid(ea, MMU_SEGSIZE_256M)
+                               << SLB_VSID_SHIFT) | SLB_VSID_KERNEL;
                break;
        default:
                /* Future: support kernel segments so that drivers
@@ -215,11 +214,9 @@ static int __spu_trap_data_seg(struct spu *spu, unsigned 
long ea)
                pr_debug("invalid region access at %016lx\n", ea);
                return 1;
        }
-       llp = mmu_psize_defs[psize].sllp;
+       slb.vsid |= mmu_psize_defs[psize].sllp;
 
-       out_be64(&priv2->slb_index_W, spu->slb_replace);
-       out_be64(&priv2->slb_vsid_RW, vsid | llp);
-       out_be64(&priv2->slb_esid_RW, esid);
+       spu_load_slb(spu, spu->slb_replace, &slb);
 
        spu->slb_replace++;
        if (spu->slb_replace >= 8)
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to