Message ID | 20241021161931.3701754-1-lizhi.hou@amd.com (mailing list archive) |
---|---|
Headers | show |
Series | AMD XDNA driver | expand |
On 10/21/2024 10:19 AM, Lizhi Hou wrote: > This patchset introduces a new Linux Kernel Driver, amdxdna for AMD NPUs. > The driver is based on Linux accel subsystem. > > NPU (Neural Processing Unit) is an AI inference accelerator integrated > into AMD client CPUs. NPU enables efficient execution of Machine Learning > applications like CNNs, LLMs, etc. NPU is based on AMD XDNA > architecture [1]. > > AMD NPU consists of the following components: > > - Tiled array of AMD AI Engine processors. > - Micro Controller which runs the NPU Firmware responsible for > command processing, AIE array configuration, and execution management. > - PCI EP for host control of the NPU device. > - Interconnect for connecting the NPU components together. > - SRAM for use by the NPU Firmware. > - Address translation hardware for protected host memory access by the > NPU. > > NPU supports multiple concurrent fully isolated contexts. Concurrent > contexts may be bound to AI Engine array spatially and or temporarily. > > The driver is licensed under GPL-2.0 except for UAPI header which is > licensed GPL-2.0 WITH Linux-syscall-note. > > User mode driver stack consists of XRT [2] and AMD AIE Plugin for IREE [3]. > > The firmware for the NPU is distributed as a closed source binary, and has > already been pushed to the DRM firmware repository [4]. > > [1]https://www.amd.com/en/technologies/xdna.html > [2]https://github.com/Xilinx/XRT > [3]https://github.com/nod-ai/iree-amd-aie > [4]https://gitlab.freedesktop.org/drm/firmware/-/tree/amd-ipu-staging/amdnpu > > Changes since v4: > - Fix lockdep errors > - Use __u* structure for struct aie_error One nit, when you send the next version would you please either To: or Cc: me on the entire series? I only get pieces in my inbox which is mildly annoying on my end. Looks like we are getting close here. One procedural question I have, do you have commit permissions to drm-misc? I applied the series to drm-misc-next and tried to build. Got the following errors - CC [M] drivers/accel/amdxdna/aie2_ctx.o CC [M] drivers/accel/amdxdna/aie2_error.o CC [M] drivers/accel/amdxdna/aie2_message.o CC [M] drivers/accel/amdxdna/aie2_pci.o CC [M] drivers/accel/amdxdna/aie2_psp.o CC [M] drivers/accel/amdxdna/aie2_smu.o CC [M] drivers/accel/amdxdna/aie2_solver.o CC [M] drivers/accel/amdxdna/amdxdna_ctx.o CC [M] drivers/accel/amdxdna/amdxdna_gem.o CC [M] drivers/accel/amdxdna/amdxdna_mailbox.o CC [M] drivers/accel/amdxdna/amdxdna_mailbox_helper.o CC [M] drivers/accel/amdxdna/amdxdna_pci_drv.o CC [M] drivers/accel/amdxdna/amdxdna_sysfs.o CC [M] drivers/accel/amdxdna/npu1_regs.o CC [M] drivers/accel/amdxdna/npu2_regs.o CC [M] drivers/accel/amdxdna/npu4_regs.o CC [M] drivers/accel/amdxdna/npu5_regs.o AR drivers/base/firmware_loader/built-in.a AR drivers/base/built-in.a In file included from drivers/accel/amdxdna/aie2_message.c:19: drivers/accel/amdxdna/amdxdna_ctx.h: In function ‘amdxdna_cmd_get_op’: drivers/accel/amdxdna/amdxdna_ctx.h:112:16: error: implicit declaration of function ‘FIELD_GET’ [-Werror=implicit-function-declaration] 112 | return FIELD_GET(AMDXDNA_CMD_OPCODE, cmd->header); | ^~~~~~~~~ In file included from drivers/accel/amdxdna/amdxdna_gem.c:15: drivers/accel/amdxdna/amdxdna_ctx.h: In function ‘amdxdna_cmd_get_op’: drivers/accel/amdxdna/amdxdna_ctx.h:112:16: error: implicit declaration of function ‘FIELD_GET’ [-Werror=implicit-function-declaration] 112 | return FIELD_GET(AMDXDNA_CMD_OPCODE, cmd->header); | ^~~~~~~~~ In file included from drivers/accel/amdxdna/aie2_psp.c:11: drivers/accel/amdxdna/aie2_psp.c: In function ‘psp_exec’: drivers/accel/amdxdna/aie2_psp.c:62:34: error: implicit declaration of function ‘FIELD_GET’ [-Werror=implicit-function-declaration] 62 | FIELD_GET(PSP_STATUS_READY, ready), | ^~~~~~~~~ ./include/linux/iopoll.h:47:21: note: in definition of macro ‘read_poll_timeout’ 47 | if (cond) \ | ^~~~ drivers/accel/amdxdna/aie2_psp.c:61:15: note: in expansion of macro ‘readx_poll_timeout’ 61 | ret = readx_poll_timeout(readl, PSP_REG(psp, PSP_STATUS_REG), ready, | ^~~~~~~~~~~~~~~~~~ drivers/accel/amdxdna/amdxdna_ctx.h: In function ‘amdxdna_cmd_set_state’: drivers/accel/amdxdna/amdxdna_ctx.h:121:24: error: implicit declaration of function ‘FIELD_PREP’ [-Werror=implicit-function-declaration] 121 | cmd->header |= FIELD_PREP(AMDXDNA_CMD_STATE, s); | ^~~~~~~~~~ drivers/accel/amdxdna/amdxdna_ctx.h: In function ‘amdxdna_cmd_set_state’: drivers/accel/amdxdna/amdxdna_ctx.h:121:24: error: implicit declaration of function ‘FIELD_PREP’ [-Werror=implicit-function-declaration] 121 | cmd->header |= FIELD_PREP(AMDXDNA_CMD_STATE, s); | ^~~~~~~~~~ In file included from drivers/accel/amdxdna/aie2_pci.c:22: drivers/accel/amdxdna/amdxdna_ctx.h: In function ‘amdxdna_cmd_get_op’: drivers/accel/amdxdna/amdxdna_ctx.h:112:16: error: implicit declaration of function ‘FIELD_GET’ [-Werror=implicit-function-declaration] 112 | return FIELD_GET(AMDXDNA_CMD_OPCODE, cmd->header); | ^~~~~~~~~ In file included from drivers/accel/amdxdna/aie2_ctx.c:18: drivers/accel/amdxdna/amdxdna_ctx.h: In function ‘amdxdna_cmd_get_op’: drivers/accel/amdxdna/amdxdna_ctx.h:112:16: error: implicit declaration of function ‘FIELD_GET’ [-Werror=implicit-function-declaration] 112 | return FIELD_GET(AMDXDNA_CMD_OPCODE, cmd->header); | ^~~~~~~~~ drivers/accel/amdxdna/amdxdna_ctx.h: In function ‘amdxdna_cmd_set_state’: drivers/accel/amdxdna/amdxdna_ctx.h:121:24: error: implicit declaration of function ‘FIELD_PREP’ [-Werror=implicit-function-declaration] 121 | cmd->header |= FIELD_PREP(AMDXDNA_CMD_STATE, s); | ^~~~~~~~~~ In file included from drivers/accel/amdxdna/amdxdna_ctx.c:16: drivers/accel/amdxdna/amdxdna_ctx.h: In function ‘amdxdna_cmd_get_op’: drivers/accel/amdxdna/amdxdna_ctx.h:112:16: error: implicit declaration of function ‘FIELD_GET’ [-Werror=implicit-function-declaration] 112 | return FIELD_GET(AMDXDNA_CMD_OPCODE, cmd->header); | ^~~~~~~~~ cc1: all warnings being treated as errors drivers/accel/amdxdna/amdxdna_ctx.h: In function ‘amdxdna_cmd_set_state’: drivers/accel/amdxdna/amdxdna_ctx.h:121:24: error: implicit declaration of function ‘FIELD_PREP’ [-Werror=implicit-function-declaration] 121 | cmd->header |= FIELD_PREP(AMDXDNA_CMD_STATE, s); | ^~~~~~~~~~ drivers/accel/amdxdna/aie2_ctx.c: In function ‘aie2_hwctx_restart’: drivers/accel/amdxdna/aie2_ctx.c:114:9: error: too few arguments to function ‘drm_sched_start’ 114 | drm_sched_start(&hwctx->priv->sched); | ^~~~~~~~~~~~~~~ In file included from ./include/trace/events/amdxdna.h:12, from drivers/accel/amdxdna/aie2_ctx.c:13: ./include/drm/gpu_scheduler.h:593:6: note: declared here 593 | void drm_sched_start(struct drm_gpu_scheduler *sched, int errno); | ^~~~~~~~~~~~~~~ make[5]: *** [scripts/Makefile.build:229: drivers/accel/amdxdna/aie2_psp.o] Error 1 make[5]: *** Waiting for unfinished jobs.... drivers/accel/amdxdna/amdxdna_ctx.h: In function ‘amdxdna_cmd_set_state’: drivers/accel/amdxdna/amdxdna_ctx.h:121:24: error: implicit declaration of function ‘FIELD_PREP’ [-Werror=implicit-function-declaration] 121 | cmd->header |= FIELD_PREP(AMDXDNA_CMD_STATE, s); | ^~~~~~~~~~ In file included from drivers/accel/amdxdna/amdxdna_pci_drv.c:18: drivers/accel/amdxdna/amdxdna_ctx.h: In function ‘amdxdna_cmd_get_op’: drivers/accel/amdxdna/amdxdna_ctx.h:112:16: error: implicit declaration of function ‘FIELD_GET’ [-Werror=implicit-function-declaration] 112 | return FIELD_GET(AMDXDNA_CMD_OPCODE, cmd->header); | ^~~~~~~~~ cc1: all warnings being treated as errors make[5]: *** [scripts/Makefile.build:229: drivers/accel/amdxdna/aie2_ctx.o] Error 1 drivers/accel/amdxdna/amdxdna_ctx.h: In function ‘amdxdna_cmd_set_state’: drivers/accel/amdxdna/amdxdna_ctx.h:121:24: error: implicit declaration of function ‘FIELD_PREP’ [-Werror=implicit-function-declaration] 121 | cmd->header |= FIELD_PREP(AMDXDNA_CMD_STATE, s); | ^~~~~~~~~~ drivers/accel/amdxdna/amdxdna_mailbox.c: In function ‘xdna_mailbox_send_msg’: drivers/accel/amdxdna/amdxdna_mailbox.c:444:26: error: implicit declaration of function ‘FIELD_PREP’ [-Werror=implicit-function-declaration] 444 | header->sz_ver = FIELD_PREP(MSG_BODY_SZ, msg->send_size) | | ^~~~~~~~~~ You also have the following checkpatch issues - WARNING: 'Disalbe' may be misspelled - perhaps 'Disable'? #1646: FILE: drivers/accel/amdxdna/amdxdna_mailbox.c:553: + /* Disalbe an irq and wait. This might sleep. */ ^^^^^^^ WARNING: 'splite' may be misspelled - perhaps 'split'? #1695: FILE: drivers/accel/amdxdna/amdxdna_mailbox.h:21: + * The mailbox will splite the sending data in to multiple firmware message if ^^^^^^ WARNING: 'miliseconds' may be misspelled - perhaps 'milliseconds'? #1875: FILE: drivers/accel/amdxdna/amdxdna_mailbox_helper.h:9: +#define TX_TIMEOUT 2000 /* miliseconds */ ^^^^^^^^^^^ WARNING: 'miliseconds' may be misspelled - perhaps 'milliseconds'? #1876: FILE: drivers/accel/amdxdna/amdxdna_mailbox_helper.h:10: +#define RX_TIMEOUT 5000 /* miliseconds */ ^^^^^^^^^^^ total: 0 errors, 4 warnings, 0 checks, 1916 lines checked NOTE: For some of the reported defects, checkpatch may be able to mechanically convert to the typical style using --fix or --fix-inplace. 0003-accel-amdxdna-Support-hardware-mailbox.patch has style problems, please review. 0007-accel-amdxdna-Add-command-execution.patch ---------------------------------------------- WARNING: 'miliseconds' may be misspelled - perhaps 'milliseconds'? #59: FILE: drivers/accel/amdxdna/aie2_ctx.c:27: +#define HWCTX_MAX_TIMEOUT 60000 /* miliseconds */ ^^^^^^^^^^^ WARNING: 'reverve' may be misspelled - perhaps 'reserve'? #612: FILE: drivers/accel/amdxdna/aie2_ctx.c:779: + XDNA_WARN(xdna, "Failed to reverve fence, ret %d", ret); ^^^^^^^ WARNING: 'Exectuion' may be misspelled - perhaps 'Execution'? #1899: FILE: drivers/accel/amdxdna/amdxdna_pci_drv.c:139: + /* Exectuion */ ^^^^^^^^^ WARNING: 'exectuion' may be misspelled - perhaps 'execution'? #2113: FILE: include/uapi/drm/amdxdna_accel.h:239: + * struct amdxdna_drm_wait_cmd - Wait exectuion command. ^^^^^^^^^ total: 0 errors, 10 warnings, 0 checks, 1983 lines checked NOTE: For some of the reported defects, checkpatch may be able to mechanically convert to the typical style using --fix or --fix-inplace. 0007-accel-amdxdna-Add-command-execution.patch has style problems, please review. 0008-accel-amdxdna-Add-suspend-and-resume.patch ----------------------------------------------- WARNING: 'miliseconds' may be misspelled - perhaps 'milliseconds'? #163: FILE: drivers/accel/amdxdna/amdxdna_pci_drv.c:22: +#define AMDXDNA_AUTOSUSPEND_DELAY 5000 /* miliseconds */ ^^^^^^^^^^^ total: 0 errors, 1 warnings, 0 checks, 302 lines checked NOTE: For some of the reported defects, checkpatch may be able to mechanically convert to the typical style using --fix or --fix-inplace. 0008-accel-amdxdna-Add-suspend-and-resume.patch has style problems, please review. -Jeff