| .. | .. |
|---|
| 1 | +/* SPDX-License-Identifier: GPL-2.0-only */ |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com) |
|---|
| 3 | | - * |
|---|
| 4 | | - * This program is free software; you can redistribute it and/or modify |
|---|
| 5 | | - * it under the terms of the GNU General Public License version 2 as |
|---|
| 6 | | - * published by the Free Software Foundation. |
|---|
| 7 | 4 | * |
|---|
| 8 | 5 | * vineetg: March 2009 |
|---|
| 9 | 6 | * -Implemented task_pt_regs( ) |
|---|
| .. | .. |
|---|
| 17 | 14 | #ifndef __ASSEMBLY__ |
|---|
| 18 | 15 | |
|---|
| 19 | 16 | #include <asm/ptrace.h> |
|---|
| 20 | | - |
|---|
| 21 | | -#ifdef CONFIG_ARC_FPU_SAVE_RESTORE |
|---|
| 22 | | -/* These DPFP regs need to be saved/restored across ctx-sw */ |
|---|
| 23 | | -struct arc_fpu { |
|---|
| 24 | | - struct { |
|---|
| 25 | | - unsigned int l, h; |
|---|
| 26 | | - } aux_dpfp[2]; |
|---|
| 27 | | -}; |
|---|
| 28 | | -#endif |
|---|
| 29 | | - |
|---|
| 30 | | -#ifdef CONFIG_ARC_PLAT_EZNPS |
|---|
| 31 | | -struct eznps_dp { |
|---|
| 32 | | - unsigned int eflags; |
|---|
| 33 | | - unsigned int gpa1; |
|---|
| 34 | | -}; |
|---|
| 35 | | -#endif |
|---|
| 17 | +#include <asm/dsp.h> |
|---|
| 18 | +#include <asm/fpu.h> |
|---|
| 36 | 19 | |
|---|
| 37 | 20 | /* Arch specific stuff which needs to be saved per task. |
|---|
| 38 | 21 | * However these items are not so important so as to earn a place in |
|---|
| .. | .. |
|---|
| 42 | 25 | unsigned long ksp; /* kernel mode stack pointer */ |
|---|
| 43 | 26 | unsigned long callee_reg; /* pointer to callee regs */ |
|---|
| 44 | 27 | unsigned long fault_address; /* dbls as brkpt holder as well */ |
|---|
| 28 | +#ifdef CONFIG_ARC_DSP_SAVE_RESTORE_REGS |
|---|
| 29 | + struct dsp_callee_regs dsp; |
|---|
| 30 | +#endif |
|---|
| 45 | 31 | #ifdef CONFIG_ARC_FPU_SAVE_RESTORE |
|---|
| 46 | 32 | struct arc_fpu fpu; |
|---|
| 47 | | -#endif |
|---|
| 48 | | -#ifdef CONFIG_ARC_PLAT_EZNPS |
|---|
| 49 | | - struct eznps_dp dp; |
|---|
| 50 | 33 | #endif |
|---|
| 51 | 34 | }; |
|---|
| 52 | 35 | |
|---|
| .. | .. |
|---|
| 67 | 50 | * A lot of busy-wait loops in SMP are based off of non-volatile data otherwise |
|---|
| 68 | 51 | * get optimised away by gcc |
|---|
| 69 | 52 | */ |
|---|
| 70 | | -#ifndef CONFIG_EZNPS_MTM_EXT |
|---|
| 71 | | - |
|---|
| 72 | 53 | #define cpu_relax() barrier() |
|---|
| 73 | | - |
|---|
| 74 | | -#else |
|---|
| 75 | | - |
|---|
| 76 | | -#define cpu_relax() \ |
|---|
| 77 | | - __asm__ __volatile__ (".word %0" : : "i"(CTOP_INST_SCHD_RW) : "memory") |
|---|
| 78 | | - |
|---|
| 79 | | -#endif |
|---|
| 80 | 54 | |
|---|
| 81 | 55 | #define KSTK_EIP(tsk) (task_pt_regs(tsk)->ret) |
|---|
| 82 | 56 | #define KSTK_ESP(tsk) (task_pt_regs(tsk)->sp) |
|---|
| .. | .. |
|---|
| 97 | 71 | unsigned long usp); |
|---|
| 98 | 72 | |
|---|
| 99 | 73 | extern unsigned int get_wchan(struct task_struct *p); |
|---|
| 100 | | - |
|---|
| 101 | | -/* |
|---|
| 102 | | - * Default implementation of macro that returns current |
|---|
| 103 | | - * instruction pointer ("program counter"). |
|---|
| 104 | | - * Should the PC register be read instead ? This macro does not seem to |
|---|
| 105 | | - * be used in many places so this wont be all that bad. |
|---|
| 106 | | - */ |
|---|
| 107 | | -#define current_text_addr() ({ __label__ _l; _l: &&_l; }) |
|---|
| 108 | 74 | |
|---|
| 109 | 75 | #endif /* !__ASSEMBLY__ */ |
|---|
| 110 | 76 | |
|---|
| .. | .. |
|---|
| 133 | 99 | |
|---|
| 134 | 100 | #define USER_KERNEL_GUTTER (VMALLOC_START - TASK_SIZE) |
|---|
| 135 | 101 | |
|---|
| 136 | | -#ifdef CONFIG_ARC_PLAT_EZNPS |
|---|
| 137 | | -/* NPS architecture defines special window of 129M in user address space for |
|---|
| 138 | | - * special memory areas, when accessing this window the MMU do not use TLB. |
|---|
| 139 | | - * Instead MMU direct the access to: |
|---|
| 140 | | - * 0x57f00000:0x57ffffff -- 1M of closely coupled memory (aka CMEM) |
|---|
| 141 | | - * 0x58000000:0x5fffffff -- 16 huge pages, 8M each, with fixed map (aka FMTs) |
|---|
| 142 | | - * |
|---|
| 143 | | - * CMEM - is the fastest memory we got and its size is 16K. |
|---|
| 144 | | - * FMT - is used to map either to internal/external memory. |
|---|
| 145 | | - * Internal memory is the second fast memory and its size is 16M |
|---|
| 146 | | - * External memory is the biggest memory (16G) and also the slowest. |
|---|
| 147 | | - * |
|---|
| 148 | | - * STACK_TOP need to be PMD align (21bit) that is why we supply 0x57e00000. |
|---|
| 149 | | - */ |
|---|
| 150 | | -#define STACK_TOP 0x57e00000 |
|---|
| 151 | | -#else |
|---|
| 152 | 102 | #define STACK_TOP TASK_SIZE |
|---|
| 153 | | -#endif |
|---|
| 154 | | - |
|---|
| 155 | 103 | #define STACK_TOP_MAX STACK_TOP |
|---|
| 156 | 104 | |
|---|
| 157 | 105 | /* This decides where the kernel will search for a free chunk of vm |
|---|