blob: f1f87c2efe032e0b68ef18de852c638fd74aa922 [file] [log] [blame]
/*
* Copyright (c) 2016-2017 Nordic Semiconductor ASA
* Copyright (c) 2016 Vinayak Kariappa Chettimada
* Copyright 2019 NXP
*
* SPDX-License-Identifier: Apache-2.0
*/
/* CONFIG_BT_CTLR_DEBUG_PINS */
/* CONFIG_BT_CTLR_DEBUG_PINS */
/*
* The BLE SW link layer defines 10 GPIO pins for debug related
* information (but really only uses 7 pins). Zephyr has a block of
* 10 GPIOs routed to J2 odd pins 1-19 (inside bank of J2).
*
* Mapping:
*
* J2.1 : DEBUG_CPU_SLEEP
* J2.3 : DEBUG_TICKER_ISR, DEBUG_TICKER_TASK
* J2.5 : DEBUG_TICKER_JOB
* J2.7 : DEBUG_RADIO_PREPARE_A, DEBUG_RADIO_CLOSE_A
* J2.9 : DEBUG_RADIO_PREPARE_S, DEBUG_RADIO_START_S, DEBUG_RADIO_CLOSE_S
* J2.11 : DEBUG_RADIO_PREPARE_O, DEBUG_RADIO_START_O, DEBUG_RADIO_CLOSE_O
* J2.13 : DEBUG_RADIO_PREPARE_M, DEBUG_RADIO_START_M, DEBUG_RADIO_CLOSE_M
* J2.15 : DEBUG_RADIO_ISR
* J2.17 : DEBUG_RADIO_XTAL
* J2.19 : DEBUG_RADIO_ACTIVE
*
*/
#ifdef CONFIG_BT_CTLR_DEBUG_PINS
#include <zephyr/drivers/gpio.h>
extern const struct device *vega_debug_portb;
extern const struct device *vega_debug_portc;
extern const struct device *vega_debug_portd;
#define DEBUG0_PIN 5
#define DEBUG0_PORT vega_debug_portd
#define DEBUG1_PIN 4
#define DEBUG1_PORT vega_debug_portd
#define DEBUG2_PIN 3
#define DEBUG2_PORT vega_debug_portd
#define DEBUG3_PIN 2
#define DEBUG3_PORT vega_debug_portd
#define DEBUG4_PIN 1
#define DEBUG4_PORT vega_debug_portd
#define DEBUG5_PIN 0
#define DEBUG5_PORT vega_debug_portd
#define DEBUG6_PIN 30
#define DEBUG6_PORT vega_debug_portc
#define DEBUG7_PIN 29
#define DEBUG7_PORT vega_debug_portc
#define DEBUG8_PIN 28
#define DEBUG8_PORT vega_debug_portc
#define DEBUG9_PIN 29
#define DEBUG9_PORT vega_debug_portb
/* below are some interesting macros referenced by controller
* which can be defined to SoC's GPIO toggle to observe/debug the
* controller's runtime behavior.
*
* The ULL/LLL has defined 10 bits for doing debug output to be captured
* by a logic analyzer (i.e. minimally invasive). Vega board has some
* GPIO routed to the headers. Unfortunately they are spread across
* ports if you want to implement the 10 unique bits.
*
* portd
*
*/
#define DEBUG_INIT() \
do { \
vega_debug_portb = DEVICE_DT_GET(DT_NODELABEL(gpiob)); \
vega_debug_portc = DEVICE_DT_GET(DT_NODELABEL(gpioc)); \
vega_debug_portd = DEVICE_DT_GET(DT_NODELABEL(gpiod)); \
\
gpio_pin_set(DEBUG0_PORT, DEBUG0_PIN, 1); \
gpio_pin_set(DEBUG0_PORT, DEBUG0_PIN, 0); \
} while (0)
#define DEBUG_CPU_SLEEP(flag) gpio_pin_set(DEBUG0_PORT, DEBUG0_PIN, flag)
#define DEBUG_TICKER_ISR(flag) gpio_pin_set(DEBUG1_PORT, DEBUG1_PIN, flag)
#define DEBUG_TICKER_TASK(flag) gpio_pin_set(DEBUG1_PORT, DEBUG1_PIN, flag)
#define DEBUG_TICKER_JOB(flag) gpio_pin_set(DEBUG2_PORT, DEBUG2_PIN, flag)
#define DEBUG_RADIO_ISR(flag) gpio_pin_set(DEBUG7_PORT, DEBUG7_PIN, flag)
#define DEBUG_RADIO_XTAL(flag) gpio_pin_set(DEBUG8_PORT, DEBUG8_PIN, flag)
#define DEBUG_RADIO_ACTIVE(flag) gpio_pin_set(DEBUG9_PORT, DEBUG9_PIN, flag)
#define DEBUG_RADIO_CLOSE(flag) \
do { \
if (!flag) { \
gpio_pin_set(DEBUG3_PORT, DEBUG3_PIN, flag); \
gpio_pin_set(DEBUG4_PORT, DEBUG4_PIN, flag); \
gpio_pin_set(DEBUG5_PORT, DEBUG5_PIN, flag); \
gpio_pin_set(DEBUG6_PORT, DEBUG6_PIN, flag); \
} \
} while (0)
#define DEBUG_RADIO_PREPARE_A(flag) \
gpio_pin_set(DEBUG3_PORT, DEBUG3_PIN, flag)
#define DEBUG_RADIO_START_A(flag) \
gpio_pin_set(DEBUG3_PORT, DEBUG3_PIN, flag)
#define DEBUG_RADIO_CLOSE_A(flag) \
gpio_pin_set(DEBUG3_PORT, DEBUG3_PIN, flag)
#define DEBUG_RADIO_PREPARE_S(flag) \
gpio_pin_set(DEBUG4_PORT, DEBUG4_PIN, flag)
#define DEBUG_RADIO_START_S(flag) \
gpio_pin_set(DEBUG4_PORT, DEBUG4_PIN, flag)
#define DEBUG_RADIO_CLOSE_S(flag) \
gpio_pin_set(DEBUG4_PORT, DEBUG4_PIN, flag)
#define DEBUG_RADIO_PREPARE_O(flag) \
gpio_pin_set(DEBUG5_PORT, DEBUG5_PIN, flag)
#define DEBUG_RADIO_START_O(flag) \
gpio_pin_set(DEBUG5_PORT, DEBUG5_PIN, flag)
#define DEBUG_RADIO_CLOSE_O(flag) \
gpio_pin_set(DEBUG5_PORT, DEBUG5_PIN, flag)
#define DEBUG_RADIO_PREPARE_M(flag) \
gpio_pin_set(DEBUG6_PORT, DEBUG6_PIN, flag)
#define DEBUG_RADIO_START_M(flag) \
gpio_pin_set(DEBUG6_PORT, DEBUG6_PIN, flag)
#define DEBUG_RADIO_CLOSE_M(flag) \
gpio_pin_set(DEBUG6_PORT, DEBUG6_PIN, flag)
#else
#define DEBUG_INIT()
#define DEBUG_CPU_SLEEP(flag)
#define DEBUG_TICKER_ISR(flag)
#define DEBUG_TICKER_TASK(flag)
#define DEBUG_TICKER_JOB(flag)
#define DEBUG_RADIO_ISR(flag)
#define DEBUG_RADIO_HCTO(flag)
#define DEBUG_RADIO_XTAL(flag)
#define DEBUG_RADIO_ACTIVE(flag)
#define DEBUG_RADIO_CLOSE(flag)
#define DEBUG_RADIO_PREPARE_A(flag)
#define DEBUG_RADIO_START_A(flag)
#define DEBUG_RADIO_CLOSE_A(flag)
#define DEBUG_RADIO_PREPARE_S(flag)
#define DEBUG_RADIO_START_S(flag)
#define DEBUG_RADIO_CLOSE_S(flag)
#define DEBUG_RADIO_PREPARE_O(flag)
#define DEBUG_RADIO_START_O(flag)
#define DEBUG_RADIO_CLOSE_O(flag)
#define DEBUG_RADIO_PREPARE_M(flag)
#define DEBUG_RADIO_START_M(flag)
#define DEBUG_RADIO_CLOSE_M(flag)
#endif