Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1) // SPDX-License-Identifier: GPL-2.0-only
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3)  * Mostly IRQ support for Hexagon
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5)  * Copyright (c) 2010-2012, The Linux Foundation. All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8) #include <linux/kernel.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9) #include <linux/sched/debug.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <asm/registers.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include <linux/irq.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <linux/hardirq.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)  * show_regs - print pt_regs structure
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16)  * @regs: pointer to pt_regs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18)  * To-do:  add all the accessor definitions to registers.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20)  * Will make this routine a lot easier to write.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) void show_regs(struct pt_regs *regs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) 	show_regs_print_info(KERN_EMERG);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) 	printk(KERN_EMERG "restart_r0: \t0x%08lx   syscall_nr: %ld\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) 	       regs->restart_r0, regs->syscall_nr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) 	printk(KERN_EMERG "preds: \t\t0x%08lx\n", regs->preds);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) 	printk(KERN_EMERG "lc0: \t0x%08lx   sa0: 0x%08lx   m0:  0x%08lx\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) 	       regs->lc0, regs->sa0, regs->m0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) 	printk(KERN_EMERG "lc1: \t0x%08lx   sa1: 0x%08lx   m1:  0x%08lx\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) 	       regs->lc1, regs->sa1, regs->m1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) 	printk(KERN_EMERG "gp: \t0x%08lx   ugp: 0x%08lx   usr: 0x%08lx\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) 	       regs->gp, regs->ugp, regs->usr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) 	printk(KERN_EMERG "cs0: \t0x%08lx   cs1: 0x%08lx\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) 	       regs->cs0, regs->cs1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) 	printk(KERN_EMERG "r0: \t0x%08lx %08lx %08lx %08lx\n", regs->r00,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) 		regs->r01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) 		regs->r02,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) 		regs->r03);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) 	printk(KERN_EMERG "r4:  \t0x%08lx %08lx %08lx %08lx\n", regs->r04,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) 		regs->r05,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) 		regs->r06,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) 		regs->r07);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) 	printk(KERN_EMERG "r8:  \t0x%08lx %08lx %08lx %08lx\n", regs->r08,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) 		regs->r09,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) 		regs->r10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) 		regs->r11);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) 	printk(KERN_EMERG "r12: \t0x%08lx %08lx %08lx %08lx\n", regs->r12,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) 		regs->r13,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) 		regs->r14,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) 		regs->r15);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) 	printk(KERN_EMERG "r16: \t0x%08lx %08lx %08lx %08lx\n", regs->r16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) 		regs->r17,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) 		regs->r18,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) 		regs->r19);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) 	printk(KERN_EMERG "r20: \t0x%08lx %08lx %08lx %08lx\n", regs->r20,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) 		regs->r21,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) 		regs->r22,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) 		regs->r23);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) 	printk(KERN_EMERG "r24: \t0x%08lx %08lx %08lx %08lx\n", regs->r24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) 		regs->r25,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) 		regs->r26,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) 		regs->r27);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) 	printk(KERN_EMERG "r28: \t0x%08lx %08lx %08lx %08lx\n", regs->r28,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) 		regs->r29,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) 		regs->r30,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) 		regs->r31);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) 	printk(KERN_EMERG "elr: \t0x%08lx   cause: 0x%08lx   user_mode: %d\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) 		pt_elr(regs), pt_cause(regs), user_mode(regs));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) 	printk(KERN_EMERG "psp: \t0x%08lx   badva: 0x%08lx   int_enabled: %d\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) 		pt_psp(regs), pt_badva(regs), ints_enabled(regs));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) void dummy_handler(struct pt_regs *regs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) 	unsigned int elr = pt_elr(regs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) 	printk(KERN_ERR "Unimplemented handler; ELR=0x%08x\n", elr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) void arch_do_IRQ(struct pt_regs *regs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) 	int irq = pt_cause(regs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) 	struct pt_regs *old_regs = set_irq_regs(regs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) 	irq_enter();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) 	generic_handle_irq(irq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) 	irq_exit();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) 	set_irq_regs(old_regs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) }