select CLKSRC_OF
select GENERIC_CLOCKEVENTS
select HAVE_EFFICIENT_UNALIGNED_ACCESS
+ select DMA_DIRECT_OPS
config MMU
def_bool n
config GENERIC_IRQ_SHOW
def_bool y
-source "init/Kconfig"
-
source "kernel/Kconfig.freezer"
menu "Processor type and features"
hex "Link offset of zImage"
endmenu
-config PREEMPT
- bool "Preemptible Kernel"
- default n
-
-source "mm/Kconfig"
-
endmenu
-menu "Executable file formats"
-
-source "fs/Kconfig.binfmt"
-
-endmenu
-
-source "net/Kconfig"
-
-source "drivers/Kconfig"
-
-source "fs/Kconfig"
-
-menu "Kernel Hacking"
-
-source "lib/Kconfig.debug"
-
-endmenu
-
-source "security/Kconfig"
-
-source "crypto/Kconfig"
-
-source "lib/Kconfig"
menu "Kernel Hacking"
-source "lib/Kconfig.debug"
-
config EARLY_PRINTK
bool "Early printk support"
.global startup
startup:
- mov #_stext,r0
+ mov #__stext,r0
mov r1,r6
- mov #_sbss,r1
- mov #_ebss,r3
+ mov #__sbss,r1
+ mov #__ebss,r3
sub r1,r3
mov #0,r2
sstr.b
*
*/
-#include <asm/uaccess.h>
-#include <asm/page.h>
-
/*
* gzip declarations
*/
--- /dev/null
+/* SPDX-License-Identifier: GPL-2.0 */
+SECTIONS
+{
+ .text :
+ {
+ __stext = . ;
+ __text = .;
+ *(.text..startup)
+ *(.text)
+ __etext = . ;
+ }
+
+ .rodata :
+ {
+ *(.rodata)
+ }
+ . = ALIGN(0x4) ;
+ .data :
+
+ {
+ . = ALIGN(0x4) ;
+ __sdata = . ;
+ ___data_start = . ;
+ *(.data.*)
+ }
+ . = ALIGN(0x4) ;
+ .bss :
+ {
+ __sbss = . ;
+ *(.bss*)
+ . = ALIGN(0x4) ;
+ __ebss = . ;
+ }
+ _end = . ;
+}
generic-y += bugs.h
generic-y += cacheflush.h
generic-y += checksum.h
+generic-y += compat.h
generic-y += clkdev.h
generic-y += cputime.h
generic-y += current.h
generic-y += device.h
generic-y += div64.h
generic-y += dma.h
+generic-y += dma-mapping.h
generic-y += emergency-restart.h
generic-y += errno.h
generic-y += exec.h
+generic-y += extable.h
generic-y += fb.h
generic-y += fcntl.h
generic-y += ftrace.h
generic-y += irq_regs.h
generic-y += irq_work.h
generic-y += kmap_types.h
+generic-y += kprobes.h
generic-y += kvm_para.h
generic-y += linkage.h
generic-y += local.h
#ifndef __ARCH_RX_ATOMIC__
#define __ARCH_RX_ATOMIC__
+#include <linux/compiler.h>
#include <linux/types.h>
#include <asm/cmpxchg.h>
#define atomic_read(v) READ_ONCE((v)->counter)
#define atomic_set(v, i) WRITE_ONCE(((v)->counter), (i))
-#include <linux/kernel.h>
-
#define ATOMIC_OP_RETURN(op, c_op) \
static inline int atomic_##op##_return(int i, atomic_t *v) \
{ \
return ret; \
}
+#define ATOMIC_FETCH_OP(op, c_op) \
+static inline int atomic_fetch_##op(int i, atomic_t *v) \
+{ \
+ unsigned long flags; \
+ int ret; \
+ \
+ flags = arch_local_irq_save(); \
+ ret = v->counter; \
+ v->counter c_op i; \
+ arch_local_irq_restore(flags); \
+ return ret; \
+}
+
#define ATOMIC_OP(op, c_op) \
static inline void atomic_##op(int i, atomic_t *v) \
{ \
ATOMIC_OP_RETURN(add, +=)
ATOMIC_OP_RETURN(sub, -=)
-ATOMIC_OP(and, &=)
-ATOMIC_OP(or, |=)
-ATOMIC_OP(xor, ^=)
+#define ATOMIC_OPS(op, c_op) \
+ ATOMIC_OP(op, c_op) \
+ ATOMIC_FETCH_OP(op, c_op)
+ATOMIC_OPS(and, &=)
+ATOMIC_OPS(or, |=)
+ATOMIC_OPS(xor, ^=)
+ATOMIC_OPS(add, +=)
+ATOMIC_OPS(sub, -=)
+
+#undef ATOMIC_OPS
#undef ATOMIC_OP_RETURN
#undef ATOMIC_OP
-#define atomic_add(i, v) (void)atomic_add_return(i, v)
-#define atomic_add_negative(a, v) (atomic_add_return((a), (v)) < 0)
-
-#define atomic_sub(i, v) (void)atomic_sub_return(i, v)
-#define atomic_sub_and_test(i, v) (atomic_sub_return(i, v) == 0)
-
-#define atomic_inc_return(v) atomic_add_return(1, v)
-#define atomic_dec_return(v) atomic_sub_return(1, v)
-
-#define atomic_inc(v) (void)atomic_inc_return(v)
-#define atomic_inc_and_test(v) (atomic_inc_return(v) == 0)
-
-#define atomic_dec(v) (void)atomic_dec_return(v)
-#define atomic_dec_and_test(v) (atomic_dec_return(v) == 0)
-
static inline int atomic_cmpxchg(atomic_t *v, int old, int new)
{
int ret;
return ret;
}
-static inline int __atomic_add_unless(atomic_t *v, int a, int u)
+static inline int atomic_fetch_add_unless(atomic_t *v, int a, int u)
{
int ret;
unsigned long flags;
arch_local_irq_restore(flags);
return ret;
}
+#define atomic_fetch_add_unless atomic_fetch_add_unless
#endif /* __ARCH_RX_ATOMIC __ */
+++ /dev/null
-#ifndef __ASM_RX_DMA_MAPPING_H
-#define __ASM_RX_DMA_MAPPING_H
-
-extern struct dma_map_ops *dma_ops;
-extern void no_iommu_init(void);
-
-static inline struct dma_map_ops *get_dma_ops(struct device *dev)
-{
- return dma_ops;
-}
-
-#endif /* __ASM_RX_DMA_MAPPING_H */
#ifndef _RX_IRQFLAGS_H_
#define _RX_IRQFLAGS_H_
-static inline unsigned long arch_local_irq_save_flags(void)
+static inline unsigned long arch_local_save_flags(void)
{
unsigned long iflag;
asm volatile ("mvfc psw, %0\n\t"
static inline unsigned long arch_local_irq_save(void)
{
unsigned long iflag;
- iflag = arch_local_irq_save_flags();
+ iflag = arch_local_save_flags();
arch_local_irq_disable();
return iflag;
}
static inline int arch_irqs_disabled(void)
{
- return arch_irqs_disabled_flags(arch_local_irq_save_flags());
+ return arch_irqs_disabled_flags(arch_local_save_flags());
}
#endif
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _RX_PAGE_H
+#define _RX_PAGE_H
+
#include <asm-generic/page.h>
+#include <linux/types.h>
+
+#define MAP_NR(addr) (((uintptr_t)(addr)-PAGE_OFFSET) >> PAGE_SHIFT)
+#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \
+ VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
+
+#ifndef __ASSEMBLY__
+extern unsigned long rom_length;
+extern unsigned long memory_start;
+extern unsigned long memory_end;
+extern unsigned long _ramend;
+#endif
+
+#endif
}
/*
- * Free current thread data structures etc..
- */
-static inline void exit_thread(void)
-{
-}
-
-static inline void flush_thread(void)
-{
-}
-
-/*
* Return saved PC of a blocked thread.
*/
#define thread_saved_pc(tsk) (tsk->thread.pc)
unsigned long get_wchan(struct task_struct *p);
void show_trace(struct task_struct *tsk, unsigned long *sp,
struct pt_regs *regs);
-
-#define task_pt_regs(tsk) \
- ((struct pt_regs *)(task_stack_page(tsk) + THREAD_SIZE) - 1)
#define KSTK_EIP(tsk) (task_pt_regs(tsk)->pc)
#define KSTK_ESP(tsk) (task_pt_regs(tsk)->r[0])
--- /dev/null
+#ifndef __ASM_RX_PTRACE_H__
+#define __ASM_RX_PTRACE_H__
+
+#include <uapi/asm/ptrace.h>
+
+#define task_pt_regs(tsk) \
+ ((struct pt_regs *)(task_stack_page(tsk) + THREAD_SIZE) - 1)
+
+#endif
typedef struct {
unsigned long seg;
} mm_segment_t;
+
#endif
#endif
} while(0)
-#define nop() asm volatile ("nop"::)
-#define mb() asm volatile ("" : : :"memory")
-#define rmb() asm volatile ("" : : :"memory")
-#define wmb() asm volatile ("" : : :"memory")
-#define set_mb(var, value) do { var = value; } while (0)
-
-#define smp_mb() barrier()
-#define smp_rmb() barrier()
-#define smp_wmb() barrier()
-#define smp_read_barrier_depends() do { } while(0)
-
#define arch_align_stack(x) (x)
#endif /* __ASM_RX_SYSTEM_H__ */
}, \
}
-#define init_thread_info (init_thread_union.thread_info)
-#define init_stack (init_thread_union.stack)
-
-
/* how to get the thread information struct from C */
static inline struct thread_info *current_thread_info(void)
{
--- /dev/null
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _ASM_UACCESS_H
+#define _ASM_UACCESS_H
+
+#include <linux/string.h>
+
+static inline __must_check unsigned long
+raw_copy_from_user(void *to, const void __user * from, unsigned long n)
+{
+ if (__builtin_constant_p(n)) {
+ switch(n) {
+ case 1:
+ *(u8 *)to = *(u8 __force *)from;
+ return 0;
+ case 2:
+ *(u16 *)to = *(u16 __force *)from;
+ return 0;
+ case 4:
+ *(u32 *)to = *(u32 __force *)from;
+ return 0;
+ }
+ }
+
+ memcpy(to, (const void __force *)from, n);
+ return 0;
+}
+
+static inline __must_check unsigned long
+raw_copy_to_user(void __user *to, const void *from, unsigned long n)
+{
+ if (__builtin_constant_p(n)) {
+ switch(n) {
+ case 1:
+ *(u8 __force *)to = *(u8 *)from;
+ return 0;
+ case 2:
+ *(u16 __force *)to = *(u16 *)from;
+ return 0;
+ case 4:
+ *(u32 __force *)to = *(u32 *)from;
+ return 0;
+ default:
+ break;
+ }
+ }
+
+ memcpy((void __force *)to, from, n);
+ return 0;
+}
+#define INLINE_COPY_FROM_USER
+#define INLINE_COPY_TO_USER
+
+#include <asm-generic/uaccess.h>
+
+#endif
# UAPI Header export list
include include/uapi/asm-generic/Kbuild.asm
-header-y += auxvec.h
-header-y += bitsperlong.h
-header-y += errno.h
-header-y += fcntl.h
-header-y += ioctl.h
-header-y += ioctls.h
-header-y += ipcbuf.h
-header-y += kvm_para.h
-header-y += mman.h
-header-y += msgbuf.h
-header-y += param.h
-header-y += poll.h
-header-y += posix_types.h
-header-y += resource.h
-header-y += sembuf.h
-header-y += setup.h
-header-y += shmbuf.h
-header-y += siginfo.h
-header-y += socket.h
-header-y += sockios.h
-header-y += stat.h
-header-y += statfs.h
-header-y += swab.h
-header-y += termbits.h
-header-y += termios.h
-header-y += types.h
-header-y += unistd.h
+generic-y += auxvec.h
+generic-y += bpf_perf_event.h
+generic-y += errno.h
+generic-y += fcntl.h
+generic-y += ioctl.h
+generic-y += ioctls.h
+generic-y += ipcbuf.h
+generic-y += kvm_para.h
+generic-y += mman.h
+generic-y += msgbuf.h
+generic-y += param.h
+generic-y += poll.h
+generic-y += posix_types.h
+generic-y += resource.h
+generic-y += sembuf.h
+generic-y += setup.h
+generic-y += shmbuf.h
+generic-y += siginfo.h
+generic-y += socket.h
+generic-y += sockios.h
+generic-y += stat.h
+generic-y += statfs.h
+generic-y += swab.h
+generic-y += termbits.h
+generic-y += termios.h
+generic-y += types.h
+generic-y += unistd.h
--- /dev/null
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+#ifndef _UAPI__ASM_RX_BITS_PER_LONG
+#define _UAPI__ASM_RX_BITS_PER_LONG
+
+#include <asm-generic/bitsperlong.h>
+
+#if !defined(__ASSEMBLY__)
+/* rx-unknown-linux required long */
+#define __kernel_size_t __kernel_size_t
+typedef unsigned long __kernel_size_t;
+typedef long __kernel_ssize_t;
+typedef long __kernel_ptrdiff_t;
+#endif
+
+#endif /* _UAPI__ASM_RX_BITS_PER_LONG */
-#ifndef __ASM_RX_PTRACE_H__
-#define __ASM_RX_PTRACE_H__
+#ifndef __UAPI_ASM_RX_PTRACE_H__
+#define __UAPI_ASM_RX_PTRACE_H__
#ifndef __ASSEMBLY__
extra-y := vmlinux.lds
obj-y := head.o process.o traps.o irq.o signal.o \
- setup.o syscalls.o entry.o ptrace.o dma-nommu.o
+ setup.o syscalls.o entry.o ptrace.o
obj-$(CONFIG_RX_GDB_SIM) += sim-console.o
ifeq '$(CONFIG_RXV2)' 'y'
#include <linux/fs.h>
#include <linux/ftrace.h>
#include <linux/preempt.h>
+#include <linux/sched/debug.h>
#include <asm/uaccess.h>
#include <asm/mmu_context.h>
#include <asm/pgalloc.h>
{
printk("\n");
printk("Pid : %d, Comm: \t\t%s\n", task_pid_nr(current), current->comm);
- print_symbol("PC is at %s\n", instruction_pointer(regs));
+ printk("PC is at %pS\n", (void *)instruction_pointer(regs));
printk("PC : %08lx SP : %08lx PSW : %08lx\n",
regs->pc, regs->r[0], regs->psw);
asmlinkage void ret_from_fork(void);
asmlinkage void ret_from_kernel_thread(void);
+void flush_thread(void)
+{
+}
+
int copy_thread(unsigned long clone_flags,
unsigned long usp, unsigned long topstk,
struct task_struct * p)
.name = "Kernel bss",
};
-extern void *_ramstart, *_ramend;
-extern void *_stext, *_etext;
-extern void *_sdata, *_edata;
-extern void *_sbss, *_ebss;
-extern void *_end;
-
void __init rx_fdt_init(void *fdt)
{
char saved_command_line[512];
void __init time_init(void)
{
of_clk_init(NULL);
- clocksource_probe();
+ timer_probe();
}
void __init calibrate_delay(void)
#include <linux/sched.h>
+#include <linux/sched/task_stack.h>
#include <linux/mm.h>
#include <linux/smp.h>
#include <linux/kernel.h>
if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
goto badframe;
- if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
+ if (raw_copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
goto badframe;
set_current_blocked(&set);
&frame->uc.uc_stack.ss_flags);
err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size);
err |= setup_sigcontext(&frame->uc.uc_mcontext, regs, set->sig[0]);
- err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set));
+ err |= raw_copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set));
if (err)
return -EFAULT;
do_exit(SIGSEGV);
}
-extern char _stext, _etext;
#define check_kernel_text(addr) \
((addr >= (unsigned long)(&_stext)) && \
(addr < (unsigned long)(&_etext)))
show_stack(tsk,(unsigned long *)tsk->thread.sp);
}
-void dump_stack(void)
-{
- show_stack(NULL,NULL);
-}
-
-EXPORT_SYMBOL(dump_stack);
-
asmlinkage void unhandled_exception(struct pt_regs *regs, unsigned int ex)
{
if (!user_mode(regs))
{
TEXT_TEXT
SCHED_TEXT
+ CPUIDLE_TEXT
LOCK_TEXT
_etext = . ;
}
#include <linux/highmem.h>
#include <linux/pagemap.h>
#include <linux/bootmem.h>
-#include <linux/slab.h>
-#include <linux/dma-mapping.h>
+#include <linux/gfp.h>
#include <asm/setup.h>
#include <asm/segment.h>
#include <asm/page.h>
#include <asm/pgtable.h>
-#include <asm/system.h>
+#include <asm/sections.h>
#undef DEBUG
void __init mem_init(void)
{
- unsigned long tmp;
- extern char _etext[], _stext[], _sdata[], _ebss[], __init_begin[], __init_end[];
- extern unsigned long _ramend, _ramstart;
- unsigned long len;
- unsigned long end_mem = (unsigned long)&_ramend;
- unsigned int codek, datak, initk;
+ pr_devel("Mem_init: start=%lx, end=%lx\n", memory_start, memory_end);
-#ifdef DEBUG
- printk(KERN_DEBUG "Mem_init: start=%lx, end=%lx\n",
- (unsigned long)&_ram_start, end_mem);
-#endif
-#ifdef CONFIG_ROMKERNEL
- len = &_ramend - &_ramstart;
-#else
- len = memory_end - memory_start;
-#endif
- end_mem &= PAGE_MASK;
- high_memory = (void *) end_mem;
-
- max_mapnr = len >> PAGE_SHIFT;
-
- totalram_pages = free_all_bootmem();
-
- codek = (_etext - _stext) >> 10;
- datak = (_ebss - _sdata) >> 10;
- initk = (__init_begin - __init_end) >> 10;
-
- tmp = nr_free_pages() << PAGE_SHIFT;
- printk(KERN_INFO "Memory available: %luk/%luk RAM, %luk/%luk ROM (%dk kernel code, %dk data)\n",
- tmp >> 10,
- len >> 10,
- (rom_length > 0) ? ((rom_length >> 10) - codek) : 0,
- rom_length >> 10,
- codek,
- datak
- );
- no_iommu_init();
-}
+ high_memory = (void *) (memory_end & PAGE_MASK);
+ max_mapnr = MAP_NR(high_memory);
+ /* this will put all low memory onto the freelists */
+ free_all_bootmem();
+
+ mem_init_print_info(NULL);
+}
#ifdef CONFIG_BLK_DEV_INITRD
void free_initrd_mem(unsigned long start, unsigned long end)
{
- int pages = 0;
- for (; start < end; start += PAGE_SIZE) {
- ClearPageReserved(virt_to_page(start));
- init_page_count(virt_to_page(start));
- free_page(start);
- totalram_pages++;
- pages++;
- }
- printk ("Freeing initrd memory: %dk freed\n", pages);
+ free_reserved_area((void *)start, (void *)end, -1, "initrd");
}
#endif
-void free_initmem(void)
+void
+free_initmem(void)
{
- unsigned long addr;
- extern char __init_begin[], __init_end[];
-
- addr = PAGE_ALIGN((unsigned long)(&__init_begin));
- /* next to check that the page we free is not a partial page */
- for (; addr + PAGE_SIZE < (unsigned long)(&__init_end); addr +=PAGE_SIZE) {
- ClearPageReserved(virt_to_page(addr));
- init_page_count(virt_to_page(addr));
- free_page(addr);
- totalram_pages++;
- }
- printk(KERN_INFO "Freeing unused kernel memory: %ldk freed (0x%x - 0x%x)\n",
- (addr - PAGE_ALIGN((long) &__init_begin)) >> 10,
- (int)(PAGE_ALIGN((unsigned long)(&__init_begin))),
- (int)(addr - PAGE_SIZE));
+ free_initmem_default(-1);
}
-
return container_of(cs, struct tpu_priv, cs);
}
-static cycle_t tpu_clocksource_read(struct clocksource *cs)
+static u64 tpu_clocksource_read(struct clocksource *cs)
{
struct tpu_priv *p = cs_to_priv(cs);
unsigned long flags;