/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
/*
 *
 * (C) COPYRIGHT 2017-2021 ARM Limited. All rights reserved.
 *
 * This program is free software and is provided to you under the terms of the
 * GNU General Public License version 2 as published by the Free Software
 * Foundation, and any use by you of this program is subject to the terms
 * of such GNU license.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, you can access it online at
 * http://www.gnu.org/licenses/gpl-2.0.html.
 *
 */

/* Kernel-side tests may include mali_kbase's headers. Therefore any config
 * options which affect the sizes of any structs (e.g. adding extra members)
 * must be included in these defaults, so that the structs are consistent in
 * both mali_kbase and the test modules. */
bob_defaults {
    name: "mali_kbase_shared_config_defaults",
    defaults: [
        "kernel_defaults",
    ],
    no_mali: {
        kbuild_options: [
            "CONFIG_MALI_BIFROST_NO_MALI=y",
            "CONFIG_MALI_BIFROST_NO_MALI_DEFAULT_GPU={{.gpu}}",
        ],
    },
    gpu_has_csf: {
        kbuild_options: ["CONFIG_MALI_BIFROST_CSF_SUPPORT=y"],
    },
    mali_devfreq: {
        kbuild_options: ["CONFIG_MALI_BIFROST_DEVFREQ=y"],
    },
    mali_bifrost_dvfs: {
        kbuild_options: ["CONFIG_MALI_BIFROST_DVFS=y"],
    },
    mali_gator_support: {
        kbuild_options: ["CONFIG_MALI_BIFROST_GATOR_SUPPORT=y"],
    },
    mali_bifrost_enable_trace: {
        kbuild_options: ["CONFIG_MALI_BIFROST_ENABLE_TRACE=y"],
    },
    mali_dma_fence: {
        kbuild_options: ["CONFIG_MALI_BIFROST_DMA_FENCE=y"],
    },
    mali_arbiter_support: {
        kbuild_options: ["CONFIG_MALI_BIFROST_ARBITER_SUPPORT=y"],
    },
    mali_dma_buf_map_on_demand: {
        kbuild_options: ["CONFIG_MALI_BIFROST_DMA_BUF_MAP_ON_DEMAND=y"],
    },
    mali_dma_buf_legacy_compat: {
        kbuild_options: ["CONFIG_MALI_BIFROST_DMA_BUF_LEGACY_COMPAT=y"],
    },
    mali_2mb_alloc: {
        kbuild_options: ["CONFIG_MALI_BIFROST_2MB_ALLOC=y"],
    },
    mali_memory_fully_backed: {
        kbuild_options: ["CONFIG_MALI_BIFROST_MEMORY_FULLY_BACKED=y"],
    },
    mali_corestack: {
        kbuild_options: ["CONFIG_MALI_BIFROST_CORESTACK=y"],
    },
    mali_real_hw: {
        kbuild_options: ["CONFIG_MALI_BIFROST_REAL_HW=y"],
    },
    mali_error_inject_none: {
        kbuild_options: ["CONFIG_MALI_BIFROST_ERROR_INJECT_NONE=y"],
    },
    mali_error_inject_track_list: {
        kbuild_options: ["CONFIG_MALI_BIFROST_ERROR_INJECT_TRACK_LIST=y"],
    },
    mali_error_inject_random: {
        kbuild_options: ["CONFIG_MALI_BIFROST_ERROR_INJECT_RANDOM=y"],
    },
    mali_error_inject: {
        kbuild_options: ["CONFIG_MALI_BIFROST_ERROR_INJECT=y"],
    },
    mali_gem5_build: {
       kbuild_options: ["CONFIG_MALI_BIFROST_GEM5_BUILD=y"],
    },
    mali_debug: {
        kbuild_options: [
            "CONFIG_MALI_BIFROST_DEBUG=y",
            "MALI_KERNEL_TEST_API={{.debug}}",
        ],
    },
    mali_fence_debug: {
        kbuild_options: ["CONFIG_MALI_BIFROST_FENCE_DEBUG=y"],
    },
    mali_system_trace: {
        kbuild_options: ["CONFIG_MALI_BIFROST_SYSTEM_TRACE=y"],
    },
    buslog: {
        kbuild_options: ["CONFIG_MALI_BIFROST_BUSLOG=y"],
    },
    cinstr_vector_dump: {
        kbuild_options: ["CONFIG_MALI_BIFROST_VECTOR_DUMP=y"],
    },
    cinstr_gwt: {
        kbuild_options: ["CONFIG_MALI_BIFROST_CINSTR_GWT=y"],
    },
    cinstr_primary_hwc: {
        kbuild_options: ["CONFIG_MALI_BIFROST_PRFCNT_SET_PRIMARY=y"],
    },
    cinstr_secondary_hwc: {
        kbuild_options: ["CONFIG_MALI_BIFROST_PRFCNT_SET_SECONDARY=y"],
    },
    cinstr_tertiary_hwc: {
        kbuild_options: ["CONFIG_MALI_BIFROST_PRFCNT_SET_TERTIARY=y"],
    },
    cinstr_hwc_set_select_via_debug_fs: {
        kbuild_options: ["CONFIG_MALI_BIFROST_PRFCNT_SET_SELECT_VIA_DEBUG_FS=y"],
    },
    mali_job_dump: {
        kbuild_options: ["CONFIG_MALI_BIFROST_JOB_DUMP"],
    },
    mali_pwrsoft_765: {
        kbuild_options: ["CONFIG_MALI_BIFROST_PWRSOFT_765=y"],
    },
    mali_hw_errata_1485982_not_affected: {
        kbuild_options: ["CONFIG_MALI_BIFROST_HW_ERRATA_1485982_NOT_AFFECTED=y"],
    },
    mali_hw_errata_1485982_use_clock_alternative: {
        kbuild_options: ["CONFIG_MALI_BIFROST_HW_ERRATA_1485982_USE_CLOCK_ALTERNATIVE=y"],
    },
    kbuild_options: [
        "CONFIG_MALI_BIFROST_PLATFORM_NAME={{.mali_platform_name}}",
        "MALI_CUSTOMER_RELEASE={{.release}}",
        "MALI_UNIT_TEST={{.unit_test_code}}",
        "MALI_USE_CSF={{.gpu_has_csf}}",
        "MALI_JIT_PRESSURE_LIMIT_BASE={{.jit_pressure_limit_base}}",

        // Start of CS experimental features definitions.
        // If there is nothing below, definition should be added as follows:
        // "MALI_EXPERIMENTAL_FEATURE={{.experimental_feature}}"
        // experimental_feature above comes from Mconfig in
        // <ddk_root>/product/base/
        // However, in Mconfig, experimental_feature should be looked up (for
        // similar explanation to this one) as ALLCAPS, i.e.
        // EXPERIMENTAL_FEATURE.
        //
        // IMPORTANT: MALI_CS_EXPERIMENTAL should NEVER be defined below as it
        // is an umbrella feature that would be open for inappropriate use
        // (catch-all for experimental CS code without separating it into
        // different features).
        "MALI_INCREMENTAL_RENDERING={{.incremental_rendering}}",
        "GPU_TIMESTAMP_CORRECTION={{.gpu_timestamp_correction}}",
    ],
}

bob_kernel_module {
    name: "mali_kbase",
    defaults: [
        "mali_kbase_shared_config_defaults",
    ],
    srcs: [
        "*.c",
        "*.h",
        "Kbuild",
        "backend/gpu/*.c",
        "backend/gpu/*.h",
        "backend/gpu/Kbuild",
        "context/*.c",
        "context/*.h",
        "context/Kbuild",
        "ipa/*.c",
        "ipa/*.h",
        "ipa/Kbuild",
        "platform/*.h",
        "platform/*/*.c",
        "platform/*/*.h",
        "platform/*/Kbuild",
        "thirdparty/*.c",
        "thirdparty/Kbuild",
        "debug/*.c",
        "debug/*.h",
        "debug/Kbuild",
        "device/*.c",
        "device/*.h",
        "device/Kbuild",
        "gpu/*.c",
        "gpu/*.h",
        "gpu/Kbuild",
        "tl/*.c",
        "tl/*.h",
        "tl/Kbuild",
        "mmu/*.c",
        "mmu/*.h",
        "mmu/Kbuild",
    ],
    gpu_has_job_manager: {
        srcs: [
            "context/backend/*_jm.c",
            "debug/backend/*_jm.c",
            "debug/backend/*_jm.h",
            "device/backend/*_jm.c",
            "gpu/backend/*_jm.c",
            "gpu/backend/*_jm.h",
            "jm/*.h",
            "tl/backend/*_jm.c",
            "mmu/backend/*_jm.c",
            "ipa/backend/*_jm.c",
            "ipa/backend/*_jm.h",
        ],
    },
    gpu_has_csf: {
        srcs: [
            "context/backend/*_csf.c",
            "csf/*.c",
            "csf/*.h",
            "csf/Kbuild",
            "csf/ipa_control/*.c",
            "csf/ipa_control/*.h",
            "csf/ipa_control/Kbuild",
            "debug/backend/*_csf.c",
            "debug/backend/*_csf.h",
            "device/backend/*_csf.c",
            "gpu/backend/*_csf.c",
            "gpu/backend/*_csf.h",
            "tl/backend/*_csf.c",
            "mmu/backend/*_csf.c",
            "ipa/backend/*_csf.c",
            "ipa/backend/*_csf.h",
        ],
    },
    mali_arbiter_support: {
        srcs: [
            "arbiter/*.c",
            "arbiter/*.h",
            "arbiter/Kbuild",
        ],
    },
    kbuild_options: [
        "CONFIG_MALI_BIFROST=m",
        "CONFIG_MALI_BIFROST_KUTF=n",
    ],
    buslog: {
        extra_symbols: [
            "bus_logger",
        ],
    },
}
