soc: MEC1701: Removed Microchip MEC1701
Removed MEC1701 SOC specific sources Signed-off-by: Manimaran A <manimaran.a@microchip.com>
This commit is contained in:
parent
db1a718341
commit
f6eeb9dc84
21 changed files with 1 additions and 529 deletions
|
@ -1,8 +0,0 @@
|
|||
#
|
||||
# Copyright (c) 2019 Intel Corporation
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
zephyr_library()
|
||||
zephyr_library_sources(pinmux.c)
|
|
@ -1,6 +0,0 @@
|
|||
# Copyright (c) 2019, Intel Corporation
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
config BOARD_MEC2016EVB_ASSY6797
|
||||
bool "Microchip MEC2016 EVB ASSY 6797 Development board"
|
||||
depends on SOC_MEC1701_QSZ
|
|
@ -1,9 +0,0 @@
|
|||
# Copyright (c) 2019 Intel Corporation
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
if BOARD_MEC2016EVB_ASSY6797
|
||||
|
||||
config BOARD
|
||||
default "mec2016evb_assy6797"
|
||||
|
||||
endif # BOARD_MEC2016EVB_ASSY6797
|
|
@ -1,212 +0,0 @@
|
|||
.. _mec2016evb_assy6797:
|
||||
|
||||
Microchip MEC2016EVB ASSY6797
|
||||
#############################
|
||||
|
||||
Overview
|
||||
********
|
||||
|
||||
The MEC2016EVB_ASSY6797 kit is a development platform to evaluate the
|
||||
Microchip MEC1701X series microcontrollers. This board needs to be mated with
|
||||
part number MEC170X 144WFBA SOLDER DC ASSY 6801(cpu board) in order to operate.
|
||||
|
||||
.. image:: mec2016evb_assy6797.jpg
|
||||
:align: center
|
||||
:alt: MEC2016 EVB ASSY 6797
|
||||
|
||||
Hardware
|
||||
********
|
||||
|
||||
- MEC1701QC2SZ ARM Cortex-M4F Processor
|
||||
- 480 KB RAM and 64 KB boot ROM
|
||||
- 2 Microchip BC-Link Interconnection bus
|
||||
- Keyboard interface
|
||||
- ADC & GPIO headers
|
||||
- UART0 and UART1
|
||||
- FAN0, FAN1, FAN2 headers
|
||||
- FAN PWM interface
|
||||
- Jtag and Trace ports
|
||||
- PECI interface 3.0
|
||||
- I2C voltage translator
|
||||
- 10 SMBUS headers
|
||||
- 3 UDP I2C headers
|
||||
- VCI interface
|
||||
- 5 independent Hardware Driven PS/2 Ports
|
||||
- eSPI header
|
||||
- LPC sideband headers
|
||||
- 4 Breathing/Blinking LEDs
|
||||
- 2 Sockets for SPI NOR chips
|
||||
- One reset and VCC_PWRDGD pushbuttons
|
||||
|
||||
For more information about the SOC please visit:
|
||||
|
||||
- `MEC170x Reference Manual`_
|
||||
|
||||
Supported Features
|
||||
==================
|
||||
|
||||
The mec2016evb_assy6797 board configuration supports the following hardware
|
||||
features:
|
||||
|
||||
+-----------+------------+-------------------------------------+
|
||||
| Interface | Controller | Driver/Component |
|
||||
+===========+============+=====================================+
|
||||
| NVIC | on-chip | nested vector interrupt controller |
|
||||
+-----------+------------+-------------------------------------+
|
||||
| SYSTICK | on-chip | systick |
|
||||
+-----------+------------+-------------------------------------+
|
||||
| UART | on-chip | serial port |
|
||||
+-----------+------------+-------------------------------------+
|
||||
|
||||
Other hardware features are not currently supported by Zephyr (at the moment)
|
||||
|
||||
The default configuration can be found in the Kconfig file:
|
||||
``boards/arm/mec2016evb_assy6797/mec2016evb_assy6797_defconfig``
|
||||
|
||||
|
||||
Connections and IOs
|
||||
===================
|
||||
|
||||
Microchip to provide the schematic for this board.
|
||||
|
||||
System Clock
|
||||
============
|
||||
|
||||
The MEC1701 MCU is configured to use the 48Mhz internal oscillator with the
|
||||
on-chip PLL to generate a resulting EC clock rate of 12 MHz. See Processor clock
|
||||
control register (chapter 4 in user manual)
|
||||
|
||||
Serial Port
|
||||
===========
|
||||
|
||||
UART0 is configured for serial logs.
|
||||
|
||||
Jumper settings
|
||||
***************
|
||||
|
||||
Please follow the jumper settings below to properly demo this
|
||||
board. Advanced users may deviate from this recommendation.
|
||||
|
||||
Jump setting for MEC2016 EVB Assy 6797 Rev A1p0
|
||||
===============================================
|
||||
|
||||
Power-related jumpers.
|
||||
|
||||
+-------+------+------+------+------+------+-------+-------+
|
||||
| JP31 | JP32 | JP35 | JP36 | JP49 | JP50 | JP54 | JP55 |
|
||||
+=======+======+======+======+======+======+=======+=======+
|
||||
| 1-2 | 1-2 | 1-2 | 1-2 | 1-2 | 1-2 | 1-2 | 1-2 |
|
||||
+-------+------+------+------+------+------+-------+-------+
|
||||
|
||||
+-------+-------+------+------+------+-------+
|
||||
| JP56 | JP57 | JP58 | JP60 | JP61 | JP102 |
|
||||
+=======+=======+======+======+======+=======+
|
||||
| 1-2 | 1-2 | 1-2 | 1-2 | 1-2 | 2-3 |
|
||||
+-------+-------+------+------+------+-------+
|
||||
|
||||
These jumpers configure VCC Power good, nRESETI and JTAG_STRAP respectively.
|
||||
|
||||
+------------------+-----------+--------------+
|
||||
| JP1 | JP2 | JP51 |
|
||||
| (VCC Power good) | (nRESETI) | (JTAG_STRAP) |
|
||||
+==================+===========+==============+
|
||||
| 1-2 | 1-2 | 2-3 |
|
||||
+------------------+-----------+--------------+
|
||||
|
||||
Each column of the following table illustrates how to enable UART0, JTAG,
|
||||
PVT SPI, SHD SPI and LED0-3 respectively.
|
||||
|
||||
+---------+--------+-----------+----------+---------+
|
||||
| JP27 | JP10 | JP34 | JP75 | JP68 |
|
||||
| (UART0) | (JTAG) | (PVT SPI) | (SHD SPI)| (LED0-3)|
|
||||
+=========+========+===========+==========+=========+
|
||||
| 11-12 | 2-3 | 2-3 | 2-3 | 1-2 |
|
||||
+---------+--------+-----------+----------+---------+
|
||||
| 8-9 | 5-6 | 5-6 | 5-6 | 3-4 |
|
||||
+---------+--------+-----------+----------+---------+
|
||||
| | 8-9 | 8-9 | 8-9 | 5-6 |
|
||||
+---------+--------+-----------+----------+---------+
|
||||
| | 11-12 | 11-12 | 11-12 | 7-8 |
|
||||
+---------+--------+-----------+----------+---------+
|
||||
| | | 14-15 | 14-15 | |
|
||||
+---------+--------+-----------+----------+---------+
|
||||
| | | 17-18 | 17-18 | |
|
||||
+---------+--------+-----------+----------+---------+
|
||||
|
||||
Jump settings for MEC170x 144WFBGA Socket DC Assy 6801 Rev B1p0
|
||||
===============================================================
|
||||
|
||||
The jumper configuration explained above covers the base board. Now the CPU
|
||||
board requires the following settings.
|
||||
|
||||
+-------+-------+
|
||||
| JP1 | JP2 |
|
||||
+=======+=======+
|
||||
| 1-2 | 2-3 |
|
||||
+-------+-------+
|
||||
|
||||
Programming and Debugging
|
||||
*************************
|
||||
|
||||
This board comes with a Cortex ETM port which facilitates tracing and debugging
|
||||
using a single physical connection. In addition, it comes with sockets for
|
||||
JTAG only sessions.
|
||||
|
||||
Flashing
|
||||
========
|
||||
|
||||
#. Connect the SPI Dongle ASSY 6791 to J36 (SPI dongle) in order to flash and
|
||||
boot from SHD SPI NOR. Then proceed to flash using Dediprog SF100 or a
|
||||
similar tool for flashing SPI chips. Remember that SPI MISO/MOSI are
|
||||
swapped on dediprog headers!
|
||||
|
||||
#. Run your favorite terminal program to listen for output. Under Linux the
|
||||
terminal should be :code:`/dev/ttyACM0`. For example:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ minicom -D /dev/ttyACM0 -o
|
||||
|
||||
The -o option tells minicom not to send the modem initialization
|
||||
string. Connection should be configured as follows:
|
||||
|
||||
- Speed: 115200
|
||||
- Data: 8 bits
|
||||
- Parity: None
|
||||
- Stop bits: 1
|
||||
|
||||
#. Connect the MEC2016EVB_ASSY_6797 board to your host computer using the
|
||||
UART0 port. Then build :ref:`hello_world` application. It is important
|
||||
to generate a binary with a new load address, for example do the following::
|
||||
|
||||
${OBJCOPY} --change-addresses -0xb0000 -O binary -S ${in_elf} ${out_bin}
|
||||
|
||||
Once you obtain the binary, proceed to use the microchip tool mec2016_spi_gen
|
||||
in order to create the final binary. This binary is what you need to flash
|
||||
in your spi nor.
|
||||
|
||||
.. zephyr-app-commands::
|
||||
:zephyr-app: samples/hello_world
|
||||
:board: mec2016evb_assy6797
|
||||
:goals: build flash
|
||||
|
||||
You should see "Hello World! mec2016evb_assy6797" in your terminal.
|
||||
|
||||
Debugging
|
||||
=========
|
||||
|
||||
You can debug an application in the usual way. Here is an example for the
|
||||
:ref:`hello_world` application.
|
||||
|
||||
.. zephyr-app-commands::
|
||||
:zephyr-app: samples/hello_world
|
||||
:board: mec2016evb_assy6797
|
||||
:maybe-skip-config:
|
||||
:goals: debug
|
||||
|
||||
References
|
||||
**********
|
||||
.. target-notes::
|
||||
|
||||
.. _MEC170x Reference Manual:
|
||||
http://ww1.microchip.com/downloads/en/DeviceDoc/MEC170x-Data-Sheet-DS00002206D.pdf
|
Binary file not shown.
Before Width: | Height: | Size: 41 KiB |
|
@ -1,25 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2018, Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
|
||||
#include <microchip/mec1701qsz.dtsi>
|
||||
|
||||
/ {
|
||||
model = "Microchip MEC2016EVB_ASSY6797 evaluation board";
|
||||
compatible = "microchip,mec2016evb_assy679", "microchip,mec1701qsz";
|
||||
|
||||
chosen {
|
||||
zephyr,sram = &sram0;
|
||||
zephyr,console = &uart0;
|
||||
zephyr,flash = &flash0;
|
||||
};
|
||||
};
|
||||
|
||||
&uart0 {
|
||||
status = "okay";
|
||||
current-speed = <115200>;
|
||||
};
|
|
@ -1,15 +0,0 @@
|
|||
#
|
||||
# Copyright (c) 2019, Intel Corporation
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
identifier: mec2016evb_assy6797
|
||||
name: MEC2016 EVB ASSY 6797
|
||||
type: mcu
|
||||
arch: arm
|
||||
toolchain:
|
||||
- zephyr
|
||||
- gnuarmemb
|
||||
ram: 64
|
||||
flash: 416
|
|
@ -1,14 +0,0 @@
|
|||
#
|
||||
# Copyright (c) 2019, Intel Corporation
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
CONFIG_SOC_MEC1701_QSZ=y
|
||||
CONFIG_SOC_SERIES_MEC1701X=y
|
||||
CONFIG_BOARD_MEC2016EVB_ASSY6797=y
|
||||
CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=48000000
|
||||
|
||||
CONFIG_CONSOLE=y
|
||||
CONFIG_UART_CONSOLE=y
|
||||
CONFIG_SERIAL=y
|
|
@ -1,38 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2018 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include <zephyr/device.h>
|
||||
#include <zephyr/init.h>
|
||||
#include <zephyr/kernel.h>
|
||||
|
||||
#include "soc.h"
|
||||
|
||||
static int board_pinmux_init(void)
|
||||
{
|
||||
|
||||
/* See table 2-4 from the Data sheet*/
|
||||
#if DT_NODE_HAS_STATUS(DT_NODELABEL(uart0), okay)
|
||||
/* Set muxing, for UART 0 and power up */
|
||||
PCR_INST->CLK_REQ_2_b.UART_0_CLK_REQ = 1;
|
||||
UART0_INST->CONFIG = 0;
|
||||
UART0_INST->ACTIVATE = 1;
|
||||
GPIO_100_137_INST->GPIO_104_PIN_CONTROL_b.MUX_CONTROL = 1;
|
||||
GPIO_100_137_INST->GPIO_105_PIN_CONTROL_b.MUX_CONTROL = 1;
|
||||
#endif
|
||||
|
||||
#if DT_NODE_HAS_STATUS(DT_NODELABEL(uart1), okay)
|
||||
/* Set muxing, for UART 1 and power up */
|
||||
PCR_INST->CLK_REQ_2_b.UART_1_CLK_REQ = 1;
|
||||
UART1_INST->CONFIG = 0;
|
||||
UART1_INST->ACTIVATE = 1;
|
||||
GPIO_140_176_INST->GPIO_170_PIN_CONTROL_b.MUX_CONTROL = 2;
|
||||
GPIO_140_176_INST->GPIO_171_PIN_CONTROL_b.MUX_CONTROL = 2;
|
||||
GPIO_100_137_INST->GPIO_113_PIN_CONTROL_b.GPIO_DIRECTION = 1;
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
SYS_INIT(board_pinmux_init, PRE_KERNEL_1, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT);
|
|
@ -1,54 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2019 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include <arm/armv7-m.dtsi>
|
||||
|
||||
/ {
|
||||
cpus {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
cpu@0 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-m4f";
|
||||
reg = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
flash0: flash@b0000 {
|
||||
reg = <0x000B0000 0x68000>;
|
||||
};
|
||||
|
||||
sram0: memory@118000 {
|
||||
compatible = "mmio-sram";
|
||||
reg = <0x00118000 0x10000>;
|
||||
};
|
||||
|
||||
soc {
|
||||
uart0: uart@400f2400 {
|
||||
compatible = "ns16550";
|
||||
reg = <0x400f2400 0x400>;
|
||||
interrupts = <40 0>;
|
||||
clock-frequency = <1843200>;
|
||||
current-speed = <38400>;
|
||||
reg-shift = <0>;
|
||||
status = "disabled";
|
||||
};
|
||||
uart1: uart@400f2800 {
|
||||
compatible = "ns16550";
|
||||
reg = <0x400f2800 0x400>;
|
||||
interrupts = <41 0>;
|
||||
clock-frequency = <1843200>;
|
||||
current-speed = <38400>;
|
||||
reg-shift = <0>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&nvic {
|
||||
arm,num-irq-priority-bits = <3>;
|
||||
};
|
|
@ -1,4 +1,4 @@
|
|||
# Microchip MEC1701 MCU line
|
||||
# Microchip MEC172x, MEC1501 MCU line
|
||||
|
||||
# Copyright (c) 2018 Intel Corporation
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
|
|
@ -53,23 +53,6 @@ static const struct mec_i2c_port mec_i2c_ports[] = {
|
|||
{ 0065, 2, 0066, 2 }, /* VTR3 */
|
||||
{ 0071, 2, 0070, 2 }, /* VTR3 */
|
||||
{ 0150, 1, 0147, 1 }
|
||||
#elif defined(CONFIG_SOC_SERIES_MEC1701X)
|
||||
{ 0004, 1, 0003, 1 },
|
||||
{ 0006, 1, 0005, 1 },
|
||||
{ 0155, 1, 0154, 1 },
|
||||
{ 0010, 1, 0007, 1 },
|
||||
{ 0144, 1, 0143, 1 },
|
||||
{ 0142, 1, 0141, 1 },
|
||||
{ 0140, 1, 0132, 1 }, /* VTR2 */
|
||||
{ 0013, 1, 0012, 1 }, /* VTR2 */
|
||||
{ 0150, 1, 0147, 1 },
|
||||
{ 0146, 1, 0145, 1 },
|
||||
{ 0131, 1, 0130, 1 }, /* VTR2 */
|
||||
{ 0xFF, 0, 0xFF, 0 }, /* No I2C Ports 11 - 15 */
|
||||
{ 0xFF, 0, 0xFF, 0 },
|
||||
{ 0xFF, 0, 0xFF, 0 },
|
||||
{ 0xFF, 0, 0xFF, 0 },
|
||||
{ 0xFF, 0, 0xFF, 0 }
|
||||
#endif
|
||||
};
|
||||
|
||||
|
|
|
@ -16,8 +16,6 @@
|
|||
#define MEC_I2C_PORT_MASK 0xFEFFU
|
||||
#elif defined(CONFIG_SOC_MEC1501_HSZ)
|
||||
#define MEC_I2C_PORT_MASK 0xFEFFU
|
||||
#elif defined(CONFIG_SOC_MEC1701_QSZ)
|
||||
#define MEC_I2C_PORT_MASK 0x07FFU
|
||||
#endif
|
||||
|
||||
#define MCHP_I2C_PORT_0 0
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
zephyr_sources(
|
||||
soc.c
|
||||
)
|
|
@ -1,14 +0,0 @@
|
|||
# Microchip MEC1701QSZ MCU
|
||||
|
||||
# Copyright (c) 2018 Intel Corporation
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
if SOC_MEC1701_QSZ
|
||||
|
||||
config SOC
|
||||
default "mec1701qsz"
|
||||
|
||||
config SYS_CLOCK_HW_CYCLES_PER_SEC
|
||||
default 48000000
|
||||
|
||||
endif # SOC_MEC1701_QSZ
|
|
@ -1,18 +0,0 @@
|
|||
# Microchip MEC MCU series configuration options
|
||||
|
||||
# Copyright (c) 2018 Intel Corporation
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
if SOC_SERIES_MEC1701X
|
||||
|
||||
config SOC_SERIES
|
||||
default "mec1701"
|
||||
|
||||
config NUM_IRQS
|
||||
# must be >= the highest interrupt number used
|
||||
# - include the UART interrupts
|
||||
#for the moment 42 needs to be corrected in terms of devices added
|
||||
default 42
|
||||
|
||||
source "soc/arm/microchip_mec/mec1701/Kconfig.defconfig.mec1701*"
|
||||
endif # SOC_SERIES_MEC1701X
|
|
@ -1,14 +0,0 @@
|
|||
# Microchip MEC1701 MCU core series
|
||||
|
||||
# Copyright (c) 2018 Intel Corporation
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
config SOC_SERIES_MEC1701X
|
||||
bool "Microchip MEC1701X Series"
|
||||
select ARM
|
||||
select CPU_CORTEX_M4
|
||||
select CPU_CORTEX_M_HAS_DWT
|
||||
select SOC_FAMILY_MEC
|
||||
select CPU_HAS_FPU
|
||||
help
|
||||
Enable support for Microchip MEC Cortex-M4 MCU series
|
|
@ -1,14 +0,0 @@
|
|||
# Microchip MEC1701 MCU core series
|
||||
|
||||
# Copyright (c) 2018 Intel Corporation
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
choice
|
||||
prompt "MEC1701 Selection"
|
||||
depends on SOC_SERIES_MEC1701X
|
||||
|
||||
config SOC_MEC1701_QSZ
|
||||
bool "MEC1701_QSZ"
|
||||
select HAS_MEC_HAL
|
||||
|
||||
endchoice
|
|
@ -1,9 +0,0 @@
|
|||
/* linker.ld - Linker command/script file */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2014 Wind River Systems, Inc.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include <zephyr/arch/arm/aarch32/cortex_m/scripts/linker.ld>
|
|
@ -1,36 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2018 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include <zephyr/device.h>
|
||||
#include <zephyr/init.h>
|
||||
#include <soc.h>
|
||||
#include <zephyr/kernel.h>
|
||||
|
||||
|
||||
static int soc_init(void)
|
||||
{
|
||||
__IO uint32_t *girc_enable_set;
|
||||
|
||||
__enable_irq();
|
||||
|
||||
/* Enable clocks for Interrupts and CPU */
|
||||
PCR_INST->CLK_REQ_1_b.INT_CLK_REQ = 1;
|
||||
PCR_INST->CLK_REQ_1_b.PROCESSOR_CLK_REQ = 1;
|
||||
|
||||
/* Route all interrupts from EC to NVIC */
|
||||
EC_REG_BANK_INST->INTERRUPT_CONTROL = 0x1;
|
||||
for (girc_enable_set = (uint32_t *)&INTS_INST->GIRQ08_EN_SET;
|
||||
girc_enable_set <= &INTS_INST->GIRQ15_EN_SET;
|
||||
girc_enable_set += 5) {
|
||||
/* This probably will require tuning, but drawing 8.2 also
|
||||
illustrates how to disable spurious interrupts */
|
||||
*girc_enable_set = 0xFFFFFFFF;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
SYS_INIT(soc_init, PRE_KERNEL_1, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT);
|
|
@ -1,18 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2018 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#ifndef __MEC_SOC_H
|
||||
#define __MEC_SOC_H
|
||||
|
||||
#define SYSCLK_DEFAULT_IOSC_HZ MHZ(48)
|
||||
|
||||
#ifndef _ASMLANGUAGE
|
||||
|
||||
#include "MCHP_MEC1701.h"
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue