// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#pragma once

#include "aml-clk-blocks.h"
#include <soc/aml-meson/gxl-clk.h>

#define GXL_HHI_GCLK_MPEG0 (0x50 << 2)
#define GXL_HHI_GCLK_MPEG1 (0x51 << 2)
#define GXL_HHI_GCLK_MPEG2 (0x52 << 2)
#define GXL_HHI_GCLK_OTHER (0x54 << 2)

static meson_clk_gate_t gxl_clk_gates[] = {
    // MPEG0 Domain Clocks
    {.reg = GXL_HHI_GCLK_MPEG0, .bit = 0},  // CLK_GXL_DDR
    {.reg = GXL_HHI_GCLK_MPEG0, .bit = 1},  // CLK_GXL_DOS
    {.reg = GXL_HHI_GCLK_MPEG0, .bit = 5},  // CLK_GXL_ISA
    {.reg = GXL_HHI_GCLK_MPEG0, .bit = 6},  // CLK_GXL_PL301
    {.reg = GXL_HHI_GCLK_MPEG0, .bit = 7},  // CLK_GXL_PERIPHS
    {.reg = GXL_HHI_GCLK_MPEG0, .bit = 8},  // CLK_GXL_SPICC
    {.reg = GXL_HHI_GCLK_MPEG0, .bit = 9},  // CLK_GXL_I2C
    {.reg = GXL_HHI_GCLK_MPEG0, .bit = 10}, // CLK_GXL_SANA
    {.reg = GXL_HHI_GCLK_MPEG0, .bit = 11}, // CLK_GXL_SMART_CARD
    {.reg = GXL_HHI_GCLK_MPEG0, .bit = 12}, // CLK_GXL_RNG0
    {.reg = GXL_HHI_GCLK_MPEG0, .bit = 13}, // CLK_GXL_UART0
    {.reg = GXL_HHI_GCLK_MPEG0, .bit = 14}, // CLK_GXL_SDHC
    {.reg = GXL_HHI_GCLK_MPEG0, .bit = 15}, // CLK_GXL_STREAM
    {.reg = GXL_HHI_GCLK_MPEG0, .bit = 16}, // CLK_GXL_ASYNC_FIFO
    {.reg = GXL_HHI_GCLK_MPEG0, .bit = 17}, // CLK_GXL_SDIO
    {.reg = GXL_HHI_GCLK_MPEG0, .bit = 18}, // CLK_GXL_ABUF
    {.reg = GXL_HHI_GCLK_MPEG0, .bit = 19}, // CLK_GXL_HIU_IFACE
    {.reg = GXL_HHI_GCLK_MPEG0, .bit = 22}, // CLK_GXL_BT656
    {.reg = GXL_HHI_GCLK_MPEG0, .bit = 23}, // CLK_GXL_ASSIST_MISC
    {.reg = GXL_HHI_GCLK_MPEG0, .bit = 24}, // CLK_GXL_EMMC_A
    {.reg = GXL_HHI_GCLK_MPEG0, .bit = 25}, // CLK_GXL_EMMC_B
    {.reg = GXL_HHI_GCLK_MPEG0, .bit = 26}, // CLK_GXL_EMMC_C
    {.reg = GXL_HHI_GCLK_MPEG0, .bit = 27}, // CLK_GXL_DMA
    {.reg = GXL_HHI_GCLK_MPEG0, .bit = 28}, // CLK_GXL_ACODEC
    {.reg = GXL_HHI_GCLK_MPEG0, .bit = 30}, // CLK_GXL_SPI

    // MPEG1 Domain Clocks
    {.reg = GXL_HHI_GCLK_MPEG1, .bit = 0},  // CLK_GXL_PCLK_TVFE
    {.reg = GXL_HHI_GCLK_MPEG1, .bit = 2},  // CLK_GXL_I2S_SPDIF
    {.reg = GXL_HHI_GCLK_MPEG1, .bit = 3},  // CLK_GXL_ETH
    {.reg = GXL_HHI_GCLK_MPEG1, .bit = 4},  // CLK_GXL_DEMUX
    {.reg = GXL_HHI_GCLK_MPEG1, .bit = 6},  // CLK_GXL_AIU_GLUE
    {.reg = GXL_HHI_GCLK_MPEG1, .bit = 7},  // CLK_GXL_IEC958
    {.reg = GXL_HHI_GCLK_MPEG1, .bit = 8},  // CLK_GXL_I2S_OUT
    {.reg = GXL_HHI_GCLK_MPEG1, .bit = 9},  // CLK_GXL_AMCLK
    {.reg = GXL_HHI_GCLK_MPEG1, .bit = 10}, // CLK_GXL_AIFIFO2
    {.reg = GXL_HHI_GCLK_MPEG1, .bit = 11}, // CLK_GXL_MIXER
    {.reg = GXL_HHI_GCLK_MPEG1, .bit = 12}, // CLK_GXL_MIXER_IFACE
    {.reg = GXL_HHI_GCLK_MPEG1, .bit = 13}, // CLK_GXL_ADC
    {.reg = GXL_HHI_GCLK_MPEG1, .bit = 14}, // CLK_GXL_BLKMV
    {.reg = GXL_HHI_GCLK_MPEG1, .bit = 15}, // CLK_GXL_AIU_TOP
    {.reg = GXL_HHI_GCLK_MPEG1, .bit = 16}, // CLK_GXL_UART1
    {.reg = GXL_HHI_GCLK_MPEG1, .bit = 20}, // CLK_GXL_G2D
    {.reg = GXL_HHI_GCLK_MPEG1, .bit = 21}, // CLK_GXL_USB0
    {.reg = GXL_HHI_GCLK_MPEG1, .bit = 22}, // CLK_GXL_USB1
    {.reg = GXL_HHI_GCLK_MPEG1, .bit = 23}, // CLK_GXL_RESET
    {.reg = GXL_HHI_GCLK_MPEG1, .bit = 24}, // CLK_GXL_NAND
    {.reg = GXL_HHI_GCLK_MPEG1, .bit = 25}, // CLK_GXL_DOS_PARSER
    {.reg = GXL_HHI_GCLK_MPEG1, .bit = 26}, // CLK_GXL_USB_GENERAL
    {.reg = GXL_HHI_GCLK_MPEG1, .bit = 28}, // CLK_GXL_VDIN1
    {.reg = GXL_HHI_GCLK_MPEG1, .bit = 29}, // CLK_GXL_AHB_ARB0
    {.reg = GXL_HHI_GCLK_MPEG1, .bit = 30}, // CLK_GXL_EFUSE
    {.reg = GXL_HHI_GCLK_MPEG1, .bit = 31}, // CLK_GXL_BOOT_ROM

    // MPEG2 Domain Clocks
    {.reg = GXL_HHI_GCLK_MPEG2, .bit = 1},  // CLK_GXL_AHB_DATA_BUS
    {.reg = GXL_HHI_GCLK_MPEG2, .bit = 2},  // CLK_GXL_AHB_CTRL_BUS
    {.reg = GXL_HHI_GCLK_MPEG2, .bit = 3},  // CLK_GXL_HDCP22_PCLK
    {.reg = GXL_HHI_GCLK_MPEG2, .bit = 4},  // CLK_GXL_HDMITX_PCLK
    {.reg = GXL_HHI_GCLK_MPEG2, .bit = 5},  // CLK_GXL_PDM_PCLK
    {.reg = GXL_HHI_GCLK_MPEG2, .bit = 6},  // CLK_GXL_BT656_PCLK
    {.reg = GXL_HHI_GCLK_MPEG2, .bit = 8},  // CLK_GXL_USB1_TO_DDR
    {.reg = GXL_HHI_GCLK_MPEG2, .bit = 9},  // CLK_GXL_USB0_TO_DDR
    {.reg = GXL_HHI_GCLK_MPEG2, .bit = 10}, // CLK_GXL_AIU_PCLK
    {.reg = GXL_HHI_GCLK_MPEG2, .bit = 11}, // CLK_GXL_MMC_PCLK
    {.reg = GXL_HHI_GCLK_MPEG2, .bit = 12}, // CLK_GXL_DVIN
    {.reg = GXL_HHI_GCLK_MPEG2, .bit = 15}, // CLK_GXL_UART2
    {.reg = GXL_HHI_GCLK_MPEG2, .bit = 22}, // CLK_GXL_SARADC
    {.reg = GXL_HHI_GCLK_MPEG2, .bit = 25}, // CLK_GXL_VPU_INTR
    {.reg = GXL_HHI_GCLK_MPEG2, .bit = 26}, // CLK_GXL_SEC_AHB_AHB3_BRIDGE
    {.reg = GXL_HHI_GCLK_MPEG2, .bit = 27}, // CLK_GXL_APB3_AO
    {.reg = GXL_HHI_GCLK_MPEG2, .bit = 28}, // CLK_GXL_MCLK_TVFE
    {.reg = GXL_HHI_GCLK_MPEG2, .bit = 30}, // CLK_GXL_CLK81_GIC

    // Other Domain Clocks
    {.reg = GXL_HHI_GCLK_OTHER, .bit = 1},  // CLK_GXL_VCLK2_VENCI0
    {.reg = GXL_HHI_GCLK_OTHER, .bit = 2},  // CLK_GXL_VCLK2_VENCI1
    {.reg = GXL_HHI_GCLK_OTHER, .bit = 3},  // CLK_GXL_VCLK2_VENCP0
    {.reg = GXL_HHI_GCLK_OTHER, .bit = 4},  // CLK_GXL_VCLK2_VENCP1
    {.reg = GXL_HHI_GCLK_OTHER, .bit = 5},  // CLK_GXL_VCLK2_VENCT0
    {.reg = GXL_HHI_GCLK_OTHER, .bit = 6},  // CLK_GXL_VCLK2_VENCT1
    {.reg = GXL_HHI_GCLK_OTHER, .bit = 7},  // CLK_GXL_VCLK2_OTHER
    {.reg = GXL_HHI_GCLK_OTHER, .bit = 8},  // CLK_GXL_VCLK2_ENCI
    {.reg = GXL_HHI_GCLK_OTHER, .bit = 9},  // CLK_GXL_VCLK2_ENCP
    {.reg = GXL_HHI_GCLK_OTHER, .bit = 10}, // CLK_GXL_DAC_CLK
    {.reg = GXL_HHI_GCLK_OTHER, .bit = 14}, // CLK_GXL_AOCLK_GATE
    {.reg = GXL_HHI_GCLK_OTHER, .bit = 16}, // CLK_GXL_IEC958_GATE
    {.reg = GXL_HHI_GCLK_OTHER, .bit = 20}, // CLK_GXL_ENC480P
    {.reg = GXL_HHI_GCLK_OTHER, .bit = 21}, // CLK_GXL_RNG1
    {.reg = GXL_HHI_GCLK_OTHER, .bit = 22}, // CLK_GXL_VCLK2_ENCT
    {.reg = GXL_HHI_GCLK_OTHER, .bit = 23}, // CLK_GXL_VCLK2_ENCL
    {.reg = GXL_HHI_GCLK_OTHER, .bit = 24}, // CLK_GXL_VCLK2_VENCLMMC
    {.reg = GXL_HHI_GCLK_OTHER, .bit = 25}, // CLK_GXL_VCLK2_VENCL
    {.reg = GXL_HHI_GCLK_OTHER, .bit = 26}, // CLK_GXL_VCLK2_OTHER1
    {.reg = GXL_HHI_GCLK_OTHER, .bit = 31}, // CLK_GXL_EDP
};

static_assert(CLK_GXL_COUNT == countof(gxl_clk_gates),
              "gxl_clk_gates[] and gxl_clk_gate_idx count mismatch");
