1c02697cbSDavid Zhang // SPDX-License-Identifier: GPL-2.0 2c02697cbSDavid Zhang /* 3c02697cbSDavid Zhang * Copyright (C) 2026, Advanced Micro Devices, Inc. 4c02697cbSDavid Zhang */ 5c02697cbSDavid Zhang 6c02697cbSDavid Zhang #include <drm/amdxdna_accel.h> 7c02697cbSDavid Zhang #include <drm/drm_device.h> 8c02697cbSDavid Zhang 9c02697cbSDavid Zhang #include "aie4_pci.h" 10c02697cbSDavid Zhang #include "amdxdna_pci_drv.h" 11c02697cbSDavid Zhang 12c02697cbSDavid Zhang #define NPU3_MBOX_BAR 0 13c02697cbSDavid Zhang 14c02697cbSDavid Zhang #define NPU3_MBOX_BUFFER_BAR 2 15c02697cbSDavid Zhang #define NPU3_MBOX_INFO_OFF 0x0 16c02697cbSDavid Zhang 17*91f4da82SDavid Zhang #define NPU3_DOORBELL_BAR 2 18*91f4da82SDavid Zhang #define NPU3_DOORBELL_OFF 0x0 19*91f4da82SDavid Zhang 20c02697cbSDavid Zhang /* PCIe BAR Index for NPU3 */ 21c02697cbSDavid Zhang #define NPU3_REG_BAR_INDEX 0 22e69ef214SDavid Zhang #define NPU3_PSP_BAR_INDEX 4 2343c9a66eSDavid Zhang #define NPU3_SMU_BAR_INDEX 5 24e69ef214SDavid Zhang 25e69ef214SDavid Zhang #define MMNPU_APERTURE3_BASE 0x3810000 2643c9a66eSDavid Zhang #define MMNPU_APERTURE4_BASE 0x3B10000 2743c9a66eSDavid Zhang 28e69ef214SDavid Zhang #define NPU3_PSP_BAR_BASE MMNPU_APERTURE3_BASE 2943c9a66eSDavid Zhang #define NPU3_SMU_BAR_BASE MMNPU_APERTURE4_BASE 30e69ef214SDavid Zhang 31e69ef214SDavid Zhang #define MPASP_C2PMSG_123_ALT_1 0x3810AEC 32e69ef214SDavid Zhang #define MPASP_C2PMSG_156_ALT_1 0x3810B70 33e69ef214SDavid Zhang #define MPASP_C2PMSG_157_ALT_1 0x3810B74 34e69ef214SDavid Zhang #define MPASP_C2PMSG_73_ALT_1 0x3810A24 35c02697cbSDavid Zhang 3643c9a66eSDavid Zhang #define MP1_C2PMSG_59_ALT_1 0x3B109EC 3743c9a66eSDavid Zhang #define MP1_C2PMSG_61_ALT_1 0x3B109F4 3843c9a66eSDavid Zhang #define MP1_C2PMSG_60_ALT_1 0x3B109F0 3943c9a66eSDavid Zhang 40c02697cbSDavid Zhang static const struct amdxdna_fw_feature_tbl npu3_fw_feature_table[] = { 41c02697cbSDavid Zhang { .major = 5, .min_minor = 10 }, 42c02697cbSDavid Zhang { 0 } 43c02697cbSDavid Zhang }; 44c02697cbSDavid Zhang 45c02697cbSDavid Zhang static const struct amdxdna_dev_priv npu3_dev_priv = { 46e69ef214SDavid Zhang .npufw_path = "npu.dev.sbin", 47e69ef214SDavid Zhang .certfw_path = "cert.dev.sbin", 48c02697cbSDavid Zhang .mbox_bar = NPU3_MBOX_BAR, 49c02697cbSDavid Zhang .mbox_rbuf_bar = NPU3_MBOX_BUFFER_BAR, 50c02697cbSDavid Zhang .mbox_info_off = NPU3_MBOX_INFO_OFF, 51*91f4da82SDavid Zhang .doorbell_off = NPU3_DOORBELL_OFF, 52e69ef214SDavid Zhang .psp_regs_off = { 53e69ef214SDavid Zhang DEFINE_BAR_OFFSET(PSP_CMD_REG, NPU3_PSP, MPASP_C2PMSG_123_ALT_1), 54e69ef214SDavid Zhang DEFINE_BAR_OFFSET(PSP_ARG0_REG, NPU3_PSP, MPASP_C2PMSG_156_ALT_1), 55e69ef214SDavid Zhang DEFINE_BAR_OFFSET(PSP_ARG1_REG, NPU3_PSP, MPASP_C2PMSG_157_ALT_1), 56e69ef214SDavid Zhang DEFINE_BAR_OFFSET(PSP_ARG2_REG, NPU3_PSP, MPASP_C2PMSG_123_ALT_1), 57e69ef214SDavid Zhang DEFINE_BAR_OFFSET(PSP_INTR_REG, NPU3_PSP, MPASP_C2PMSG_73_ALT_1), 58e69ef214SDavid Zhang DEFINE_BAR_OFFSET(PSP_STATUS_REG, NPU3_PSP, MPASP_C2PMSG_123_ALT_1), 59e69ef214SDavid Zhang DEFINE_BAR_OFFSET(PSP_RESP_REG, NPU3_PSP, MPASP_C2PMSG_156_ALT_1), 60e69ef214SDavid Zhang /* npu3 doesn't use 8th pwaitmode register */ 61e69ef214SDavid Zhang }, 6243c9a66eSDavid Zhang .smu_regs_off = { 6343c9a66eSDavid Zhang DEFINE_BAR_OFFSET(SMU_CMD_REG, NPU3_SMU, MP1_C2PMSG_59_ALT_1), 6443c9a66eSDavid Zhang DEFINE_BAR_OFFSET(SMU_ARG_REG, NPU3_SMU, MP1_C2PMSG_61_ALT_1), 6543c9a66eSDavid Zhang DEFINE_BAR_OFFSET(SMU_INTR_REG, NPU3_SMU, MMNPU_APERTURE4_BASE), 6643c9a66eSDavid Zhang DEFINE_BAR_OFFSET(SMU_RESP_REG, NPU3_SMU, MP1_C2PMSG_60_ALT_1), 6743c9a66eSDavid Zhang DEFINE_BAR_OFFSET(SMU_OUT_REG, NPU3_SMU, MP1_C2PMSG_61_ALT_1), 6843c9a66eSDavid Zhang }, 69c02697cbSDavid Zhang }; 70c02697cbSDavid Zhang 717b1a245bSDavid Zhang static const struct amdxdna_dev_priv npu3_dev_vf_priv = { 727b1a245bSDavid Zhang /* vf device does not load firmware */ 737b1a245bSDavid Zhang .mbox_bar = NPU3_MBOX_BAR, 747b1a245bSDavid Zhang .mbox_rbuf_bar = NPU3_MBOX_BUFFER_BAR, 757b1a245bSDavid Zhang .mbox_info_off = NPU3_MBOX_INFO_OFF, 767b1a245bSDavid Zhang /* vf device does not have smu and psp */ 777b1a245bSDavid Zhang }; 787b1a245bSDavid Zhang 79c02697cbSDavid Zhang const struct amdxdna_dev_info dev_npu3_pf_info = { 80c02697cbSDavid Zhang .mbox_bar = NPU3_MBOX_BAR, 81c02697cbSDavid Zhang .sram_bar = NPU3_MBOX_BUFFER_BAR, 82e69ef214SDavid Zhang .psp_bar = NPU3_PSP_BAR_INDEX, 8343c9a66eSDavid Zhang .smu_bar = NPU3_SMU_BAR_INDEX, 84d8c33b9cSMax Zhen .default_vbnv = "RyzenAI-npu3-pf", 85c02697cbSDavid Zhang .device_type = AMDXDNA_DEV_TYPE_PF, 86c02697cbSDavid Zhang .dev_priv = &npu3_dev_priv, 87c02697cbSDavid Zhang .fw_feature_tbl = npu3_fw_feature_table, 887b1a245bSDavid Zhang .ops = &aie4_pf_ops, 897b1a245bSDavid Zhang }; 907b1a245bSDavid Zhang 917b1a245bSDavid Zhang const struct amdxdna_dev_info dev_npu3_vf_info = { 927b1a245bSDavid Zhang .mbox_bar = NPU3_MBOX_BAR, 937b1a245bSDavid Zhang .sram_bar = NPU3_MBOX_BUFFER_BAR, 94*91f4da82SDavid Zhang .doorbell_bar = NPU3_DOORBELL_BAR, 957b1a245bSDavid Zhang .default_vbnv = "RyzenAI-npu3-vf", 967b1a245bSDavid Zhang .device_type = AMDXDNA_DEV_TYPE_UMQ, 977b1a245bSDavid Zhang .dev_priv = &npu3_dev_vf_priv, 987b1a245bSDavid Zhang .fw_feature_tbl = npu3_fw_feature_table, 997b1a245bSDavid Zhang .ops = &aie4_vf_ops, 100c02697cbSDavid Zhang }; 101