From 0d8657dd3056063fb115946b10157477b5c70451 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 20 Nov 2023 09:09:45 +0000
Subject: [PATCH] enable lvds 1280x800
---
kernel/drivers/firmware/rockchip_sip.c | 32 +++++++++++++++++++++++++-------
1 files changed, 25 insertions(+), 7 deletions(-)
diff --git a/kernel/drivers/firmware/rockchip_sip.c b/kernel/drivers/firmware/rockchip_sip.c
index 8658fa6..7f2073c 100644
--- a/kernel/drivers/firmware/rockchip_sip.c
+++ b/kernel/drivers/firmware/rockchip_sip.c
@@ -291,17 +291,20 @@
*/
#ifdef CONFIG_ARM64
#define SIP_UARTDBG_FN SIP_UARTDBG_CFG64
+#define SIP_FIQ_DBG_STACK_SIZE IRQ_STACK_SIZE
#else
#define SIP_UARTDBG_FN SIP_UARTDBG_CFG
+#define SIP_FIQ_DBG_STACK_SIZE SZ_8K
+
static int firmware_64_32bit;
#endif
static int fiq_sip_enabled;
static int fiq_target_cpu;
+static unsigned long fiq_stack_top;
static phys_addr_t ft_fiq_mem_phy;
static void __iomem *ft_fiq_mem_base;
-static void (*sip_fiq_debugger_uart_irq_tf)(struct pt_regs *_pt_regs,
- uint32_t cpu);
+static sip_fiq_debugger_uart_irq_tf_cb_t sip_fiq_debugger_uart_irq_tf;
static struct pt_regs fiq_pt_regs;
int sip_fiq_debugger_is_enabled(void)
@@ -388,7 +391,7 @@
static void sip_fiq_debugger_uart_irq_tf_cb(unsigned long sp_el1,
unsigned long offset,
- uint32_t cpu)
+ unsigned long cpu)
{
char *cpu_context;
@@ -403,15 +406,30 @@
__invoke_sip_fn_smc(SIP_UARTDBG_FN, 0, 0, UARTDBG_CFG_OSHDL_TO_OS);
}
-int sip_fiq_debugger_uart_irq_tf_init(u32 irq_id, void *callback_fn)
+int sip_fiq_debugger_uart_irq_tf_init(u32 irq_id, sip_fiq_debugger_uart_irq_tf_cb_t callback_fn)
{
struct arm_smccc_res res;
+ /* Alloc a page for fiq_debugger's stack */
+ if (fiq_stack_top == 0) {
+ fiq_stack_top = __get_free_pages(GFP_KERNEL | __GFP_ZERO,
+ get_order(SIP_FIQ_DBG_STACK_SIZE));
+ if (fiq_stack_top) {
+ fiq_stack_top += SIP_FIQ_DBG_STACK_SIZE;
+ } else {
+ pr_err("%s: alloc stack failed\n", __func__);
+ return -ENOMEM;
+ }
+ }
+
/* init fiq debugger callback */
sip_fiq_debugger_uart_irq_tf = callback_fn;
- res = __invoke_sip_fn_smc(SIP_UARTDBG_FN, irq_id,
- (unsigned long)sip_fiq_debugger_uart_irq_tf_cb,
- UARTDBG_CFG_INIT);
+ arm_smccc_smc(SIP_UARTDBG_FN,
+ irq_id,
+ (unsigned long)sip_fiq_debugger_uart_irq_tf_cb,
+ UARTDBG_CFG_INIT,
+ fiq_stack_top, 0, 0, 0, &res);
+
if (IS_SIP_ERROR(res.a0)) {
pr_err("%s error: %d\n", __func__, (int)res.a0);
return res.a0;
--
Gitblit v1.6.2