Skip to content

Commit

Permalink
metag: Add JTAG Debug Adapter (DA) support
Browse files Browse the repository at this point in the history
Add basic JTAG Debug Adapter (DA) support so that drivers which
communicate with the DA can detect whether one is actually present
(otherwise the target will halt indefinitely).

This allows the metag_da TTY driver and imgdafs filesystem driver to be
built, updates defconfigs, and sets up the metag_da console early if
it's configured in.

Signed-off-by: James Hogan <james.hogan@imgtec.com>
  • Loading branch information
James Hogan committed Mar 2, 2013
1 parent 690998b commit ae85ac7
Show file tree
Hide file tree
Showing 9 changed files with 105 additions and 0 deletions.
2 changes: 2 additions & 0 deletions MAINTAINERS
Original file line number Diff line number Diff line change
Expand Up @@ -5042,6 +5042,8 @@ F: Documentation/devicetree/bindings/metag/
F: drivers/clocksource/metag_generic.c
F: drivers/irqchip/irq-metag.c
F: drivers/irqchip/irq-metag-ext.c
F: drivers/tty/metag_da.c
F: fs/imgdafs/

MICROBLAZE ARCHITECTURE
M: Michal Simek <monstr@monstr.eu>
Expand Down
12 changes: 12 additions & 0 deletions arch/metag/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,18 @@ config METAG_PERFCOUNTER_IRQS
When disabled, Performance Counters information will be collected
based on Timer Interrupt.

config METAG_DA
bool "DA support"
help
Say Y if you plan to use a DA debug adapter with Linux. The presence
of the DA will be detected automatically at boot, so it is safe to say
Y to this option even when booting without a DA.

This enables support for services provided by DA JTAG debug adapters,
such as:
- communication over DA channels (such as the console driver).
- use of the DA filesystem.

menu "Boot options"

config METAG_BUILTIN_DTB
Expand Down
3 changes: 3 additions & 0 deletions arch/metag/configs/meta1_defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ CONFIG_PARTITION_ADVANCED=y
# CONFIG_IOSCHED_CFQ is not set
CONFIG_FLATMEM_MANUAL=y
CONFIG_META12_FPGA=y
CONFIG_METAG_DA=y
CONFIG_HZ_100=y
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
Expand All @@ -27,6 +28,8 @@ CONFIG_BLK_DEV_RAM_SIZE=16384
# CONFIG_SERIO is not set
# CONFIG_VT is not set
# CONFIG_LEGACY_PTYS is not set
CONFIG_DA_TTY=y
CONFIG_DA_CONSOLE=y
# CONFIG_DEVKMEM is not set
# CONFIG_HW_RANDOM is not set
# CONFIG_HWMON is not set
Expand Down
3 changes: 3 additions & 0 deletions arch/metag/configs/meta2_defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ CONFIG_PARTITION_ADVANCED=y
CONFIG_METAG_L2C=y
CONFIG_FLATMEM_MANUAL=y
CONFIG_METAG_HALT_ON_PANIC=y
CONFIG_METAG_DA=y
CONFIG_HZ_100=y
CONFIG_DEVTMPFS=y
# CONFIG_STANDALONE is not set
Expand All @@ -28,6 +29,8 @@ CONFIG_BLK_DEV_RAM_SIZE=16384
# CONFIG_SERIO is not set
# CONFIG_VT is not set
# CONFIG_LEGACY_PTYS is not set
CONFIG_DA_TTY=y
CONFIG_DA_CONSOLE=y
# CONFIG_DEVKMEM is not set
# CONFIG_HW_RANDOM is not set
# CONFIG_HWMON is not set
Expand Down
3 changes: 3 additions & 0 deletions arch/metag/configs/meta2_smp_defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ CONFIG_METAG_L2C=y
CONFIG_FLATMEM_MANUAL=y
CONFIG_METAG_HALT_ON_PANIC=y
CONFIG_SMP=y
CONFIG_METAG_DA=y
CONFIG_HZ_100=y
CONFIG_DEVTMPFS=y
# CONFIG_STANDALONE is not set
Expand All @@ -29,6 +30,8 @@ CONFIG_BLK_DEV_RAM_SIZE=16384
# CONFIG_SERIO is not set
# CONFIG_VT is not set
# CONFIG_LEGACY_PTYS is not set
CONFIG_DA_TTY=y
CONFIG_DA_CONSOLE=y
# CONFIG_DEVKMEM is not set
# CONFIG_HW_RANDOM is not set
# CONFIG_HWMON is not set
Expand Down
43 changes: 43 additions & 0 deletions arch/metag/include/asm/da.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/*
* Meta DA JTAG debugger control.
*
* Copyright 2012 Imagination Technologies Ltd.
*/

#ifndef _METAG_DA_H_
#define _METAG_DA_H_

#ifdef CONFIG_METAG_DA

#include <linux/init.h>
#include <linux/types.h>

extern bool _metag_da_present;

/**
* metag_da_enabled() - Find whether a DA is currently enabled.
*
* Returns: true if a DA was detected, false if not.
*/
static inline bool metag_da_enabled(void)
{
return _metag_da_present;
}

/**
* metag_da_probe() - Try and detect a connected DA.
*
* This is used at start up to detect whether a DA is active.
*
* Returns: 0 on detection, -err otherwise.
*/
int __init metag_da_probe(void);

#else /* !CONFIG_METAG_DA */

#define metag_da_enabled() false
#define metag_da_probe() do {} while (0)

#endif

#endif /* _METAG_DA_H_ */
1 change: 1 addition & 0 deletions arch/metag/kernel/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ obj-y += user_gateway.o
obj-$(CONFIG_PERF_EVENTS) += perf/

obj-$(CONFIG_METAG_COREMEM) += coremem.o
obj-$(CONFIG_METAG_DA) += da.o
obj-$(CONFIG_DYNAMIC_FTRACE) += ftrace.o
obj-$(CONFIG_FUNCTION_TRACER) += ftrace_stub.o
obj-$(CONFIG_MODULES) += metag_ksyms.o
Expand Down
23 changes: 23 additions & 0 deletions arch/metag/kernel/da.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/*
* Meta DA JTAG debugger control.
*
* Copyright 2012 Imagination Technologies Ltd.
*/


#include <linux/io.h>
#include <linux/kernel.h>
#include <asm/da.h>
#include <asm/metag_mem.h>

bool _metag_da_present;

int __init metag_da_probe(void)
{
_metag_da_present = (metag_in32(T0VECINT_BHALT) == 1);
if (_metag_da_present)
pr_info("DA present\n");
else
pr_info("DA not present\n");
return 0;
}
15 changes: 15 additions & 0 deletions arch/metag/kernel/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
#include <asm/hwthread.h>
#include <asm/mmzone.h>
#include <asm/l2cache.h>
#include <asm/da.h>
#include <asm/prom.h>
#include <asm/mach/arch.h>
#include <asm/core_reg.h>
Expand All @@ -60,6 +61,11 @@ extern char _heap_start[];
extern u32 __dtb_start[];
#endif

#ifdef CONFIG_DA_CONSOLE
/* Our early channel based console driver */
extern struct console dash_console;
#endif

struct machine_desc *machine_desc __initdata;

/*
Expand Down Expand Up @@ -180,6 +186,15 @@ void __init setup_arch(char **cmdline_p)

metag_cache_probe();

metag_da_probe();
#ifdef CONFIG_DA_CONSOLE
if (metag_da_enabled()) {
/* An early channel based console driver */
register_console(&dash_console);
add_preferred_console("ttyDA", 1, NULL);
}
#endif

/* try interpreting the argument as a device tree */
machine_desc = setup_machine_fdt(original_cmd_line);
/* if it doesn't look like a device tree it must be a command line */
Expand Down

0 comments on commit ae85ac7

Please sign in to comment.