Re: Enabling KGDB for AM335x

James B <[email protected]>
Newsgroups gmane.os.netbsd.ports.arm
Message-ID <CAGk7oekMSf_N31QMsXEE4iZvybEBtE83XneJ3iEqM9_nZBCgTw@mail.gmail.com>
Hi Lloyd,

Thank you for the feedback, I agree that U-Boot is really the correct
place for this. I'll reach out to their community
to see what the best way to handle this is. I suspect they won't want
to change the device tree defaults, but maybe
there's some command  or env variable that can be used to solve this.

I've updated my patch below, I added new params to opt_kgdb.h for
users to specify mux register offsets and values.
I set the defaults to uart1. I also added defaults for the KGDB
rate/mode/address parameters.

Best,
James
=================================================================================
diff -r d708c4dcdd7d sys/arch/arm/ti/files.ti
--- a/sys/arch/arm/ti/files.ti    Sun Apr 27 23:30:39 2025 +0000
+++ b/sys/arch/arm/ti/files.ti    Sun May 25 21:39:29 2025 -0700
@@ -141,4 +141,12 @@
 # SOC parameters
 defflag    opt_soc.h            SOC_TI
 defflag    opt_soc.h            SOC_AM33XX: SOC_TI
-defflag    opt_soc.h            SOC_OMAP3: SOC_TI
+defflag    opt_soc.h           SOC_OMAP3: SOC_TI
+
+# Pins may need to be muxed early to enable kgdb console. This should
be done by
+# the bootloader, but in case it isn't then use this option
+defflag  opt_kgdb.h      TI_EARLY_COM_MUX: SOC_TI,KGDB
+defparam opt_kgdb.h      TI_EARLY_COM_RXOFF=0x980
+                         TI_EARLY_COM_RXVAL=0x30: TI_EARLY_COM_MUX
+defparam opt_kgdb.h      TI_EARLY_COM_TXOFF=0x984
+                         TI_EARLY_COM_TXVAL=0x0: TI_EARLY_COM_MUX
diff -r d708c4dcdd7d sys/arch/arm/ti/ti_com.c
--- a/sys/arch/arm/ti/ti_com.c    Sun Apr 27 23:30:39 2025 +0000
+++ b/sys/arch/arm/ti/ti_com.c    Sun May 25 21:39:29 2025 -0700
@@ -30,6 +30,10 @@

 __KERNEL_RCSID(1, "$NetBSD: ti_com.c,v 1.12 2023/09/05 02:59:07
gutteridge Exp $");

+#ifdef _KERNEL_OPT
+#include "opt_kgdb.h"
+#endif
+
 #include <sys/param.h>
 #include <sys/bus.h>
 #include <sys/device.h>
@@ -44,6 +48,25 @@

 #include <arch/arm/ti/ti_prcm.h>

+#ifdef KGDB
+extern struct bus_space armv7_generic_bs_tag;
+#ifndef KGDB_DEVMODE
+const int comkgdbmode = HUPCL | CS8 | CREAD;
+#else
+const int comkgdbmode = KGDB_DEVMODE;
+#endif
+#ifndef KGDB_DEVADDR
+const int comkgdbaddr = 0x48022000;
+#else
+const int comkgdbaddr = KGDB_DEVADDR;
+#endif
+#ifndef KGDB_DEVRATE
+const int comkgdbrate = 115200;
+#else
+const int comkgdbrate = KGDB_DEVRATE;
+#endif
+#endif
+
 static int ti_com_match(device_t, cfdata_t, void *);
 static void ti_com_attach(device_t, device_t, void *);

@@ -159,6 +182,21 @@

     if (comcnattach1(&regs, speed, uart_freq, COM_TYPE_NORMAL, flags))
         panic("Cannot initialize ti com console");
+
+#if defined(KGDB)
+#if defined(TI_EARLY_COM_MUX)
+    const bus_addr_t ctrl_mod = 0x44E10000;
+    const bus_space_tag_t arm_bst = &armv7_generic_bs_tag;
+    bus_space_handle_t ctrl_bsh;
+
+    bus_space_map(arm_bst, ctrl_mod, 0x2000, 0, &ctrl_bsh);
+    bus_space_write_4(arm_bst, ctrl_bsh, TI_EARLY_COM_RXOFF,
TI_EARLY_COM_RXVAL);
+    bus_space_write_4(arm_bst, ctrl_bsh, TI_EARLY_COM_TXOFF,
TI_EARLY_COM_TXVAL);
+#endif
+    com_init_regs_stride(&regs, bst, dummy_bsh, comkgdbaddr, 2);
+    if (com_kgdb_attach1(&regs, comkgdbrate, uart_freq,
COM_TYPE_OMAP, comkgdbmode))
+      panic("Cannot initialize kgdb console");
+#endif
 }

 static const struct fdt_console ti_com_console = {

On Fri, May 16, 2025 at 1:13 PM Lloyd Parkes
<[email protected]> wrote:
>
> Kia ora James,
> I'm no port-arm gatekeeper so I'm not going to answer any of your
> questions about what is right, but I will point out one bit of
> information.
>
> You state in a comment "Need to mux the pins since fdt bus isn't up
> yet". This is only sort-of true.
>
> The NetBSD FDT bus is not ready yet for sure, but U-Boot has already
> initialised the MUX using it's own FDT. You could add uart1
> configuration to the devicetree used by U-Boot and then U-Boot will
> configure the hardware for you. Configuring the hardware so that the
> kernel can boot is one of U-Boot's stated jobs.
>
> The kernel can support both methods with a #ifdef option.
>
> Whether or not you want to put that work into U-Boot is up to you.
>
> Ngā mihi,
> Lloyd
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.