Loading arch/blackfin/kernel/kgdb.c +35 −70 Original line number Diff line number Diff line Loading @@ -34,6 +34,15 @@ int gdb_bfin_vector = -1; #error change the definition of slavecpulocks #endif #define IN_MEM(addr, size, l1_addr, l1_size) \ ({ \ unsigned long __addr = (unsigned long)(addr); \ (__addr >= l1_addr && __addr + (size) <= l1_addr + l1_size); \ }) #define ASYNC_BANK_SIZE \ (ASYNC_BANK0_SIZE + ASYNC_BANK1_SIZE + \ ASYNC_BANK2_SIZE + ASYNC_BANK3_SIZE) void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs) { gdb_regs[BFIN_R0] = regs->r0; Loading Loading @@ -462,55 +471,32 @@ static int validate_memory_access_address(unsigned long addr, int size) return 0; if (addr >= SYSMMR_BASE) return 0; if (addr >= ASYNC_BANK0_BASE && addr + size <= ASYNC_BANK3_BASE + ASYNC_BANK3_SIZE) if (IN_MEM(addr, size, ASYNC_BANK0_BASE, ASYNC_BANK_SIZE)) return 0; if (cpu == 0) { if (addr >= L1_SCRATCH_START && (addr + size <= L1_SCRATCH_START + L1_SCRATCH_LENGTH)) if (IN_MEM(addr, size, L1_SCRATCH_START, L1_SCRATCH_LENGTH)) return 0; #if L1_CODE_LENGTH != 0 if (addr >= L1_CODE_START && (addr + size <= L1_CODE_START + L1_CODE_LENGTH)) if (IN_MEM(addr, size, L1_CODE_START, L1_CODE_LENGTH)) return 0; #endif #if L1_DATA_A_LENGTH != 0 if (addr >= L1_DATA_A_START && (addr + size <= L1_DATA_A_START + L1_DATA_A_LENGTH)) if (IN_MEM(addr, size, L1_DATA_A_START, L1_DATA_A_LENGTH)) return 0; #endif #if L1_DATA_B_LENGTH != 0 if (addr >= L1_DATA_B_START && (addr + size <= L1_DATA_B_START + L1_DATA_B_LENGTH)) if (IN_MEM(addr, size, L1_DATA_B_START, L1_DATA_B_LENGTH)) return 0; #endif #ifdef CONFIG_SMP } else if (cpu == 1) { if (addr >= COREB_L1_SCRATCH_START && (addr + size <= COREB_L1_SCRATCH_START + L1_SCRATCH_LENGTH)) if (IN_MEM(addr, size, COREB_L1_SCRATCH_START, L1_SCRATCH_LENGTH)) return 0; # if L1_CODE_LENGTH != 0 if (addr >= COREB_L1_CODE_START && (addr + size <= COREB_L1_CODE_START + L1_CODE_LENGTH)) if (IN_MEM(addr, size, COREB_L1_CODE_START, L1_CODE_LENGTH)) return 0; # endif # if L1_DATA_A_LENGTH != 0 if (addr >= COREB_L1_DATA_A_START && (addr + size <= COREB_L1_DATA_A_START + L1_DATA_A_LENGTH)) if (IN_MEM(addr, size, COREB_L1_DATA_A_START, L1_DATA_A_LENGTH)) return 0; # endif # if L1_DATA_B_LENGTH != 0 if (addr >= COREB_L1_DATA_B_START && (addr + size <= COREB_L1_DATA_B_START + L1_DATA_B_LENGTH)) if (IN_MEM(addr, size, COREB_L1_DATA_B_START, L1_DATA_B_LENGTH)) return 0; # endif #endif } #if L2_LENGTH != 0 if (addr >= L2_START && addr + size <= L2_START + L2_LENGTH) #if L2_LENGTH if (IN_MEM(addr, size, L2_START, L2_LENGTH)) return 0; #endif Loading Loading @@ -566,12 +552,9 @@ int kgdb_mem2hex(char *mem, char *buf, int count) default: err = EFAULT; } } else if ((cpu == 0 && (unsigned int)mem >= L1_CODE_START && (unsigned int)(mem + count) <= L1_CODE_START + L1_CODE_LENGTH) } else if ((cpu == 0 && IN_MEM(mem, count, L1_CODE_START, L1_CODE_LENGTH)) #ifdef CONFIG_SMP || (cpu == 1 && (unsigned int)mem >= COREB_L1_CODE_START && (unsigned int)(mem + count) <= COREB_L1_CODE_START + L1_CODE_LENGTH) || (cpu == 1 && IN_MEM(mem, count, COREB_L1_CODE_START, L1_CODE_LENGTH)) #endif ) { /* access L1 instruction SRAM*/ Loading Loading @@ -642,12 +625,9 @@ int kgdb_ebin2mem(char *buf, char *mem, int count) default: return EFAULT; } } else if ((cpu == 0 && (unsigned int)mem >= L1_CODE_START && (unsigned int)(mem + count) <= L1_CODE_START + L1_CODE_LENGTH) } else if ((cpu == 0 && IN_MEM(mem, count, L1_CODE_START, L1_CODE_LENGTH)) #ifdef CONFIG_SMP || (cpu == 1 && (unsigned int)mem >= COREB_L1_CODE_START && (unsigned int)(mem + count) <= COREB_L1_CODE_START + L1_CODE_LENGTH) || (cpu == 1 && IN_MEM(mem, count, COREB_L1_CODE_START, L1_CODE_LENGTH)) #endif ) { /* access L1 instruction SRAM */ Loading Loading @@ -707,12 +687,9 @@ int kgdb_hex2mem(char *buf, char *mem, int count) default: return EFAULT; } } else if ((cpu == 0 && (unsigned int)mem >= L1_CODE_START && (unsigned int)(mem + count) <= L1_CODE_START + L1_CODE_LENGTH) } else if ((cpu == 0 && IN_MEM(mem, count, L1_CODE_START, L1_CODE_LENGTH)) #ifdef CONFIG_SMP || (cpu == 1 && (unsigned int)mem >= COREB_L1_CODE_START && (unsigned int)(mem + count) <= COREB_L1_CODE_START + L1_CODE_LENGTH) || (cpu == 1 && IN_MEM(mem, count, COREB_L1_CODE_START, L1_CODE_LENGTH)) #endif ) { /* access L1 instruction SRAM */ Loading @@ -729,22 +706,16 @@ int kgdb_validate_break_address(unsigned long addr) if (addr >= 0x1000 && (addr + BREAK_INSTR_SIZE) <= physical_mem_end) return 0; if (addr >= ASYNC_BANK0_BASE && addr + BREAK_INSTR_SIZE <= ASYNC_BANK3_BASE + ASYNC_BANK3_BASE) if (IN_MEM(addr, BREAK_INSTR_SIZE, ASYNC_BANK0_BASE, ASYNC_BANK_SIZE)) return 0; #if L1_CODE_LENGTH != 0 if (cpu == 0 && addr >= L1_CODE_START && addr + BREAK_INSTR_SIZE <= L1_CODE_START + L1_CODE_LENGTH) if (cpu == 0 && IN_MEM(addr, BREAK_INSTR_SIZE, L1_CODE_START, L1_CODE_LENGTH)) return 0; #ifdef CONFIG_SMP else if (cpu == 1 && addr >= COREB_L1_CODE_START && addr + BREAK_INSTR_SIZE <= COREB_L1_CODE_START + L1_CODE_LENGTH) else if (cpu == 1 && IN_MEM(addr, BREAK_INSTR_SIZE, COREB_L1_CODE_START, L1_CODE_LENGTH)) return 0; #endif #endif #if L2_LENGTH != 0 if (addr >= L2_START && addr + BREAK_INSTR_SIZE <= L2_START + L2_LENGTH) #if L2_LENGTH if (IN_MEM(addr, BREAK_INSTR_SIZE, L2_START, L2_LENGTH)) return 0; #endif Loading @@ -756,13 +727,9 @@ int kgdb_arch_set_breakpoint(unsigned long addr, char *saved_instr) int err; int cpu = raw_smp_processor_id(); if ((cpu == 0 && (unsigned int)addr >= L1_CODE_START && (unsigned int)(addr + BREAK_INSTR_SIZE) <= L1_CODE_START + L1_CODE_LENGTH) if ((cpu == 0 && IN_MEM(addr, BREAK_INSTR_SIZE, L1_CODE_START, L1_CODE_LENGTH)) #ifdef CONFIG_SMP || (cpu == 1 && (unsigned int)addr >= COREB_L1_CODE_START && (unsigned int)(addr + BREAK_INSTR_SIZE) <= COREB_L1_CODE_START + L1_CODE_LENGTH) || (cpu == 1 && IN_MEM(addr, BREAK_INSTR_SIZE, COREB_L1_CODE_START, L1_CODE_LENGTH)) #endif ) { /* access L1 instruction SRAM */ Loading @@ -788,9 +755,7 @@ int kgdb_arch_set_breakpoint(unsigned long addr, char *saved_instr) int kgdb_arch_remove_breakpoint(unsigned long addr, char *bundle) { if ((unsigned int)addr >= L1_CODE_START && (unsigned int)(addr + BREAK_INSTR_SIZE) <= L1_CODE_START + L1_CODE_LENGTH) { if (IN_MEM(addr, BREAK_INSTR_SIZE, L1_CODE_START, L1_CODE_LENGTH)) { /* access L1 instruction SRAM */ if (dma_memcpy((void *)addr, bundle, BREAK_INSTR_SIZE) == NULL) return -EFAULT; Loading Loading
arch/blackfin/kernel/kgdb.c +35 −70 Original line number Diff line number Diff line Loading @@ -34,6 +34,15 @@ int gdb_bfin_vector = -1; #error change the definition of slavecpulocks #endif #define IN_MEM(addr, size, l1_addr, l1_size) \ ({ \ unsigned long __addr = (unsigned long)(addr); \ (__addr >= l1_addr && __addr + (size) <= l1_addr + l1_size); \ }) #define ASYNC_BANK_SIZE \ (ASYNC_BANK0_SIZE + ASYNC_BANK1_SIZE + \ ASYNC_BANK2_SIZE + ASYNC_BANK3_SIZE) void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs) { gdb_regs[BFIN_R0] = regs->r0; Loading Loading @@ -462,55 +471,32 @@ static int validate_memory_access_address(unsigned long addr, int size) return 0; if (addr >= SYSMMR_BASE) return 0; if (addr >= ASYNC_BANK0_BASE && addr + size <= ASYNC_BANK3_BASE + ASYNC_BANK3_SIZE) if (IN_MEM(addr, size, ASYNC_BANK0_BASE, ASYNC_BANK_SIZE)) return 0; if (cpu == 0) { if (addr >= L1_SCRATCH_START && (addr + size <= L1_SCRATCH_START + L1_SCRATCH_LENGTH)) if (IN_MEM(addr, size, L1_SCRATCH_START, L1_SCRATCH_LENGTH)) return 0; #if L1_CODE_LENGTH != 0 if (addr >= L1_CODE_START && (addr + size <= L1_CODE_START + L1_CODE_LENGTH)) if (IN_MEM(addr, size, L1_CODE_START, L1_CODE_LENGTH)) return 0; #endif #if L1_DATA_A_LENGTH != 0 if (addr >= L1_DATA_A_START && (addr + size <= L1_DATA_A_START + L1_DATA_A_LENGTH)) if (IN_MEM(addr, size, L1_DATA_A_START, L1_DATA_A_LENGTH)) return 0; #endif #if L1_DATA_B_LENGTH != 0 if (addr >= L1_DATA_B_START && (addr + size <= L1_DATA_B_START + L1_DATA_B_LENGTH)) if (IN_MEM(addr, size, L1_DATA_B_START, L1_DATA_B_LENGTH)) return 0; #endif #ifdef CONFIG_SMP } else if (cpu == 1) { if (addr >= COREB_L1_SCRATCH_START && (addr + size <= COREB_L1_SCRATCH_START + L1_SCRATCH_LENGTH)) if (IN_MEM(addr, size, COREB_L1_SCRATCH_START, L1_SCRATCH_LENGTH)) return 0; # if L1_CODE_LENGTH != 0 if (addr >= COREB_L1_CODE_START && (addr + size <= COREB_L1_CODE_START + L1_CODE_LENGTH)) if (IN_MEM(addr, size, COREB_L1_CODE_START, L1_CODE_LENGTH)) return 0; # endif # if L1_DATA_A_LENGTH != 0 if (addr >= COREB_L1_DATA_A_START && (addr + size <= COREB_L1_DATA_A_START + L1_DATA_A_LENGTH)) if (IN_MEM(addr, size, COREB_L1_DATA_A_START, L1_DATA_A_LENGTH)) return 0; # endif # if L1_DATA_B_LENGTH != 0 if (addr >= COREB_L1_DATA_B_START && (addr + size <= COREB_L1_DATA_B_START + L1_DATA_B_LENGTH)) if (IN_MEM(addr, size, COREB_L1_DATA_B_START, L1_DATA_B_LENGTH)) return 0; # endif #endif } #if L2_LENGTH != 0 if (addr >= L2_START && addr + size <= L2_START + L2_LENGTH) #if L2_LENGTH if (IN_MEM(addr, size, L2_START, L2_LENGTH)) return 0; #endif Loading Loading @@ -566,12 +552,9 @@ int kgdb_mem2hex(char *mem, char *buf, int count) default: err = EFAULT; } } else if ((cpu == 0 && (unsigned int)mem >= L1_CODE_START && (unsigned int)(mem + count) <= L1_CODE_START + L1_CODE_LENGTH) } else if ((cpu == 0 && IN_MEM(mem, count, L1_CODE_START, L1_CODE_LENGTH)) #ifdef CONFIG_SMP || (cpu == 1 && (unsigned int)mem >= COREB_L1_CODE_START && (unsigned int)(mem + count) <= COREB_L1_CODE_START + L1_CODE_LENGTH) || (cpu == 1 && IN_MEM(mem, count, COREB_L1_CODE_START, L1_CODE_LENGTH)) #endif ) { /* access L1 instruction SRAM*/ Loading Loading @@ -642,12 +625,9 @@ int kgdb_ebin2mem(char *buf, char *mem, int count) default: return EFAULT; } } else if ((cpu == 0 && (unsigned int)mem >= L1_CODE_START && (unsigned int)(mem + count) <= L1_CODE_START + L1_CODE_LENGTH) } else if ((cpu == 0 && IN_MEM(mem, count, L1_CODE_START, L1_CODE_LENGTH)) #ifdef CONFIG_SMP || (cpu == 1 && (unsigned int)mem >= COREB_L1_CODE_START && (unsigned int)(mem + count) <= COREB_L1_CODE_START + L1_CODE_LENGTH) || (cpu == 1 && IN_MEM(mem, count, COREB_L1_CODE_START, L1_CODE_LENGTH)) #endif ) { /* access L1 instruction SRAM */ Loading Loading @@ -707,12 +687,9 @@ int kgdb_hex2mem(char *buf, char *mem, int count) default: return EFAULT; } } else if ((cpu == 0 && (unsigned int)mem >= L1_CODE_START && (unsigned int)(mem + count) <= L1_CODE_START + L1_CODE_LENGTH) } else if ((cpu == 0 && IN_MEM(mem, count, L1_CODE_START, L1_CODE_LENGTH)) #ifdef CONFIG_SMP || (cpu == 1 && (unsigned int)mem >= COREB_L1_CODE_START && (unsigned int)(mem + count) <= COREB_L1_CODE_START + L1_CODE_LENGTH) || (cpu == 1 && IN_MEM(mem, count, COREB_L1_CODE_START, L1_CODE_LENGTH)) #endif ) { /* access L1 instruction SRAM */ Loading @@ -729,22 +706,16 @@ int kgdb_validate_break_address(unsigned long addr) if (addr >= 0x1000 && (addr + BREAK_INSTR_SIZE) <= physical_mem_end) return 0; if (addr >= ASYNC_BANK0_BASE && addr + BREAK_INSTR_SIZE <= ASYNC_BANK3_BASE + ASYNC_BANK3_BASE) if (IN_MEM(addr, BREAK_INSTR_SIZE, ASYNC_BANK0_BASE, ASYNC_BANK_SIZE)) return 0; #if L1_CODE_LENGTH != 0 if (cpu == 0 && addr >= L1_CODE_START && addr + BREAK_INSTR_SIZE <= L1_CODE_START + L1_CODE_LENGTH) if (cpu == 0 && IN_MEM(addr, BREAK_INSTR_SIZE, L1_CODE_START, L1_CODE_LENGTH)) return 0; #ifdef CONFIG_SMP else if (cpu == 1 && addr >= COREB_L1_CODE_START && addr + BREAK_INSTR_SIZE <= COREB_L1_CODE_START + L1_CODE_LENGTH) else if (cpu == 1 && IN_MEM(addr, BREAK_INSTR_SIZE, COREB_L1_CODE_START, L1_CODE_LENGTH)) return 0; #endif #endif #if L2_LENGTH != 0 if (addr >= L2_START && addr + BREAK_INSTR_SIZE <= L2_START + L2_LENGTH) #if L2_LENGTH if (IN_MEM(addr, BREAK_INSTR_SIZE, L2_START, L2_LENGTH)) return 0; #endif Loading @@ -756,13 +727,9 @@ int kgdb_arch_set_breakpoint(unsigned long addr, char *saved_instr) int err; int cpu = raw_smp_processor_id(); if ((cpu == 0 && (unsigned int)addr >= L1_CODE_START && (unsigned int)(addr + BREAK_INSTR_SIZE) <= L1_CODE_START + L1_CODE_LENGTH) if ((cpu == 0 && IN_MEM(addr, BREAK_INSTR_SIZE, L1_CODE_START, L1_CODE_LENGTH)) #ifdef CONFIG_SMP || (cpu == 1 && (unsigned int)addr >= COREB_L1_CODE_START && (unsigned int)(addr + BREAK_INSTR_SIZE) <= COREB_L1_CODE_START + L1_CODE_LENGTH) || (cpu == 1 && IN_MEM(addr, BREAK_INSTR_SIZE, COREB_L1_CODE_START, L1_CODE_LENGTH)) #endif ) { /* access L1 instruction SRAM */ Loading @@ -788,9 +755,7 @@ int kgdb_arch_set_breakpoint(unsigned long addr, char *saved_instr) int kgdb_arch_remove_breakpoint(unsigned long addr, char *bundle) { if ((unsigned int)addr >= L1_CODE_START && (unsigned int)(addr + BREAK_INSTR_SIZE) <= L1_CODE_START + L1_CODE_LENGTH) { if (IN_MEM(addr, BREAK_INSTR_SIZE, L1_CODE_START, L1_CODE_LENGTH)) { /* access L1 instruction SRAM */ if (dma_memcpy((void *)addr, bundle, BREAK_INSTR_SIZE) == NULL) return -EFAULT; Loading