はじめに
Intel の次のCPU (2025年)の Panther lake に搭載されるであろう、NPU v5 の linux の device driver がアップされていました。
Intel NPU の linux device driver に、
— Vengineerの妄想 (@Vengineer) 2024年9月25日
VPU_50XX_HOST_SS_XXX
なるマクロがあるのですが、Lunar Lake の次のNPUに関連するものなんでしょうか?https://t.co/1bv6hUgDrG
NPU v5
このファイルで、
#define VPU_50XX_HOST_SS_AON_PWR_ISLAND_EN_POST_DLY 0x00030068u #define VPU_50XX_HOST_SS_AON_PWR_ISLAND_EN_POST_DLY_POST_DLY_MASK GENMASK(7, 0) #define VPU_50XX_HOST_SS_AON_PWR_ISLAND_STATUS_DLY 0x0003006cu #define VPU_50XX_HOST_SS_AON_PWR_ISLAND_STATUS_DLY_STATUS_DLY_MASK GENMASK(7, 0) #define VPU_40XX_HOST_SS_AON_IDLE_GEN 0x00030200u #define VPU_40XX_HOST_SS_AON_IDLE_GEN_EN_MASK BIT_MASK(0) #define VPU_40XX_HOST_SS_AON_IDLE_GEN_HW_PG_EN_MASK BIT_MASK(1) #define VPU_40XX_HOST_SS_AON_DPU_ACTIVE 0x00030204u #define VPU_40XX_HOST_SS_AON_DPU_ACTIVE_DPU_ACTIVE_MASK BIT_MASK(0) #define VPU_50XX_HOST_SS_AON_FABRIC_REQ_OVERRIDE 0x00030210u #define VPU_50XX_HOST_SS_AON_FABRIC_REQ_OVERRIDE_REQ_OVERRIDE_MASK BIT_MASK(0)
にマクロ定義があって、
ここで、使われています。
static void pwr_island_delay_set_50xx(struct ivpu_device *vdev) { u32 val, post, status; if (vdev->hw->pll.profiling_freq == PLL_PROFILING_FREQ_DEFAULT) { post = PWR_ISLAND_EN_POST_DLY_FREQ_DEFAULT; status = PWR_ISLAND_STATUS_DLY_FREQ_DEFAULT; } else { post = PWR_ISLAND_EN_POST_DLY_FREQ_HIGH; status = PWR_ISLAND_STATUS_DLY_FREQ_HIGH; } val = REGV_RD32(VPU_50XX_HOST_SS_AON_PWR_ISLAND_EN_POST_DLY); val = REG_SET_FLD_NUM(VPU_50XX_HOST_SS_AON_PWR_ISLAND_EN_POST_DLY, POST_DLY, post, val); REGV_WR32(VPU_50XX_HOST_SS_AON_PWR_ISLAND_EN_POST_DLY, val); val = REGV_RD32(VPU_50XX_HOST_SS_AON_PWR_ISLAND_STATUS_DLY); val = REG_SET_FLD_NUM(VPU_50XX_HOST_SS_AON_PWR_ISLAND_STATUS_DLY, STATUS_DLY, status, val); REGV_WR32(VPU_50XX_HOST_SS_AON_PWR_ISLAND_STATUS_DLY, val); }
ここに、
int ivpu_hw_ip_pwr_domain_enable(struct ivpu_device *vdev) { int ret; if (ivpu_hw_ip_gen(vdev) == IVPU_HW_IP_50XX) pwr_island_delay_set_50xx(vdev);
とありますね。
ここに、マクロ定義があるのですが、
#define IVPU_HW_IP_37XX 37 #define IVPU_HW_IP_40XX 40 #define IVPU_HW_IP_50XX 50 #define IVPU_HW_IP_60XX 60
- IVPU_HW_IP_60XX
もありますね。こちらは、どこにも使われていませんね。
おわりに、
VPU_50XX を見つけたと思ったら、VPU_60XX もありました。
- accel/ivpu: Split IP and buttress code
にて、追加されたようです。
下記のように、
- 37xx : Metero Lake / Arrow Lake
- 40xx : Lunar Lake
のようです。