Commit 6c567d48 authored by Jeremy Bettis's avatar Jeremy Bettis Committed by Carles Cufi
Browse files

tests: Add unittest for gpio_ite_it8xxx2_v2



Add a unittest for 100% of the lines in gpio_ite_it8xxx2_v2. The test
fakes the registers by overriding the ECREG macro to call a function
provided by the test.

Does not test the code guarded by
CONFIG_SOC_IT8XXX2_GPIO_GROUP_K_L_DEFAULT_PULL_DOWN

Bug #66401

Signed-off-by: default avatarJeremy Bettis <jbettis@google.com>
parent 5ceea4fb
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
# Copyright 2023 The ChromiumOS Authors
#
# SPDX-License-Identifier: Apache-2.0

cmake_minimum_required(VERSION 3.20.0)

find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(gpio_ite_it8xxx2_v2)

target_include_directories(app PRIVATE
  include
)

zephyr_include_directories(
  include
  ${ZEPHYR_BASE}/soc/riscv/riscv-ite/common
  ${ZEPHYR_BASE}/soc/riscv/riscv-ite/it8xxx2
)

target_sources(app
  PRIVATE
    src/main.c
)
+12 −0
Original line number Diff line number Diff line
# Copyright 2023 The ChromiumOS Authors
#
# SPDX-License-Identifier: Apache-2.0

source "Kconfig.zephyr"

config SOC_IT8XXX2_GPIO_GROUP_K_L_DEFAULT_PULL_DOWN
	bool
	default n
config HAS_ITE_INTC
	bool
	default y
+45 −0
Original line number Diff line number Diff line
/*
 * Copyright 2023 The ChromiumOS Authors
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <zephyr/dt-bindings/gpio/gpio.h>
#include <zephyr/dt-bindings/interrupt-controller/ite-intc.h>
#include <zephyr/sys/util_macro.h>

/ {
        intc: interrupt-controller@f03f00 {
                compatible = "vnd,intc";
                #address-cells = <0>;
                #interrupt-cells = <2>;
                interrupt-controller;
                reg = <0x00f03f00 0x0100>;
        };

        gpioa: gpio@f01601 {
                compatible = "ite,it8xxx2-gpio-v2";
                reg = <0x00f01601 1   /* GPDR (set) */
                        0x00f01618 1   /* GPDMR (get) */
                        0x00f01630 1   /* GPOTR */
                        0x00f01648 1   /* P18SCR */
                        0x00f01660 8>; /* GPCR */
                ngpios = <8>;
                gpio-controller;
                interrupts = <9 IRQ_TYPE_LEVEL_HIGH
                                2 IRQ_TYPE_LEVEL_HIGH
                                3 IRQ_TYPE_LEVEL_HIGH
                                4 IRQ_TYPE_LEVEL_HIGH
                                5 IRQ_TYPE_LEVEL_HIGH
                                6 IRQ_TYPE_LEVEL_HIGH
                                7 IRQ_TYPE_LEVEL_HIGH
                                8 IRQ_TYPE_LEVEL_HIGH>;
                interrupt-parent = <&intc>;
                wuc-base = <0xf01b20 0xf01b20 0xf01b20 0xf01b1c
                                0xf01b1c 0xf01b1c 0xf01b1c 0xf01b24>;
                wuc-mask = <BIT(3)   BIT(4)   BIT(5)   BIT(0)
                                BIT(1)   BIT(2)   BIT(3)   BIT(4)  >;
                has-volt-sel = <1 1 1 1 1 1 1 1>;
                #gpio-cells = <2>;
        };
};
+20 −0
Original line number Diff line number Diff line
/*
 * Copyright 2023 The ChromiumOS Authors
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <../soc/riscv/riscv-ite/common/chip_chipregs.h>

/*
 * Macros for emulated hardware registers access.
 */
#undef ECREG
#undef ECREG_u16
#undef ECREG_u32
#define ECREG(x)		(*((volatile unsigned char *)fake_ecreg((intptr_t)x)))
#define ECREG_u16(x)		(*((volatile unsigned short *)fake_ecreg((intptr_t)x)))
#define ECREG_u32(x)		(*((volatile unsigned long  *)fake_ecreg((intptr_t)x)))

unsigned int *fake_ecreg(intptr_t r);
uint8_t ite_intc_get_irq_num(void);
+16 −0
Original line number Diff line number Diff line
/*
 * Copyright 2023 The ChromiumOS Authors
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <chip_chipregs.h>
#include <zephyr/arch/posix/arch.h>

int arch_irq_connect_dynamic(unsigned int irq, unsigned int priority,
		    void (*routine)(const void *parameter),
		    const void *parameter, uint32_t flags);
int arch_irq_disconnect_dynamic(unsigned int irq, unsigned int priority,
		       void (*routine)(const void *parameter),
		       const void *parameter, uint32_t flags);
typedef struct z_thread_stack_element k_thread_stack_t;
Loading