|  | /* | 
|  | * Copyright (c) 2020 ITE Corporation. All Rights Reserved. | 
|  | * Jyunlin Chen <jyunlin.chen@ite.com.tw> | 
|  | * | 
|  | * SPDX-License-Identifier: Apache-2.0 | 
|  | */ | 
|  |  | 
|  | #include "chip_chipregs.h" | 
|  | #include <zephyr/toolchain.h> | 
|  |  | 
|  | /* exports */ | 
|  | GTEXT(__start) | 
|  |  | 
|  | /* imports */ | 
|  | GTEXT(__initialize) | 
|  | GTEXT(_isr_wrapper) | 
|  |  | 
|  | SECTION_FUNC(vectors, __start) | 
|  | #ifdef CONFIG_RISCV_GP | 
|  | .option push | 
|  | .option norelax | 
|  | /* Configure the GP register */ | 
|  | la gp, __global_pointer$ | 
|  | .option pop | 
|  | #endif | 
|  |  | 
|  | .option norvc; | 
|  |  | 
|  | #ifdef CONFIG_SOC_IT8XXX2_JTAG_DEBUG_INTERFACE | 
|  | /* Enable JTAG debug interface */ | 
|  | la t0, IT8XXX2_GCTRL_PMER3 | 
|  | lb t1, 0(t0) | 
|  | ori t1, t1, IT8XXX2_GCTRL_JTAG | 
|  | sb t1, 0(t0) | 
|  |  | 
|  | la t0, IT8XXX2_JTAG_PINS_BASE | 
|  | li t1, 0 | 
|  | /* Configure GPIOA0 as TCK function */ | 
|  | sb t1, 0(t0) | 
|  | /* Configure GPIOA1 as TDI function */ | 
|  | sb t1, 1(t0) | 
|  | /* Configure GPIOA4 as TDO function */ | 
|  | sb t1, 4(t0) | 
|  | /* Configure GPIOA5 as TMS function */ | 
|  | sb t1, 5(t0) | 
|  | /* Configure GPIOA6 as TRST function */ | 
|  | sb t1, 6(t0) | 
|  |  | 
|  | /* I/O voltage is 3.3V */ | 
|  | la t0, IT8XXX2_JTAG_VOLT_SET | 
|  | sb t1, 0(t0) | 
|  | #endif | 
|  |  | 
|  | /* | 
|  | * Set mtvec (Machine Trap-Vector Base-Address Register) | 
|  | * to _isr_wrapper. | 
|  | */ | 
|  | la t0, _isr_wrapper | 
|  | csrw mtvec, t0 | 
|  | csrwi mie, 0 | 
|  | #if (CONFIG_SOC_IT8XXX2_FLASH_SIZE_BYTES == 0x100000) | 
|  | /* | 
|  | * bit[3-0]@EIDSR=8: instruction local memory size is 1M byte | 
|  | * This operation must be done before accessing memory. | 
|  | */ | 
|  | la t0, IT8XXX2_GCTRL_EIDSR | 
|  | lb t1, 0(t0) | 
|  | andi t1, t1, 0xf0 | 
|  | ori  t1, t1, 0x8 | 
|  | sb t1, 0(t0) | 
|  | #endif | 
|  | /* Jump to __initialize */ | 
|  | tail __initialize | 
|  |  | 
|  | /* | 
|  | * eflash signature used to enable specific function after power-on reset. | 
|  | * (HW mechanism) | 
|  | * The content of 16-bytes must be the following and at offset 0x80 of binary. | 
|  | * ---------------------------------------------------------------------------- | 
|  | * 1st 2nd 3rd 4th 5th 6th 7th    8th    9th 10th 11th 12th 13th 14th 15th 16th | 
|  | * ---------------------------------------------------------------------------- | 
|  | * A5h A5h A5h A5h A5h A5h [host] [flag] 85h  12h  5Ah  5Ah  AAh  AAh  55h  55h | 
|  | * ---------------------------------------------------------------------------- | 
|  | * [host]: A4h = enable eSPI, A5h = enable LPC | 
|  | * [flag]: | 
|  | * bit7: it must be 1b. | 
|  | * bit6: it must be 0b. | 
|  | * bit5: it must be 1b. | 
|  | * bit4: 1b = 32.768KHz is from the internal clock generator. | 
|  | * bit3: it must be 0b. | 
|  | * bit2: it must be 1b. | 
|  | * bit1: it must be 0b. | 
|  | * bit0: it must be 0b. | 
|  | */ | 
|  | .org 0x80 | 
|  | .balign 16 | 
|  | .global eflash_sig | 
|  | eflash_sig: | 
|  | .byte 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5 | 
|  | #ifdef CONFIG_ESPI | 
|  | .byte 0xA4 /* enable eSPI */ | 
|  | #else | 
|  | .byte 0xA5 /* enable LPC */ | 
|  | #endif | 
|  | /* flag of signature */ | 
|  | #ifdef CONFIG_SOC_IT8XXX2_EXT_32K | 
|  | .byte 0xA4 /* use external 32.768 kHz oscillator */ | 
|  | #else | 
|  | .byte 0xB4 /* enable internal clock generator */ | 
|  | #endif | 
|  | .byte 0x85, 0x12, 0x5A, 0x5A, 0xAA, 0xAA, 0x55, 0x55 |