diff options
Diffstat (limited to 'meta-amdfalconx86/recipes-kernel/linux/files/0257-drm-amd-add-ACP-driver-support.patch')
-rw-r--r-- | meta-amdfalconx86/recipes-kernel/linux/files/0257-drm-amd-add-ACP-driver-support.patch | 626 |
1 files changed, 0 insertions, 626 deletions
diff --git a/meta-amdfalconx86/recipes-kernel/linux/files/0257-drm-amd-add-ACP-driver-support.patch b/meta-amdfalconx86/recipes-kernel/linux/files/0257-drm-amd-add-ACP-driver-support.patch deleted file mode 100644 index 25c73e9b..00000000 --- a/meta-amdfalconx86/recipes-kernel/linux/files/0257-drm-amd-add-ACP-driver-support.patch +++ /dev/null @@ -1,626 +0,0 @@ -From bf389abf92583b9e6185715cdea923ee26bdea06 Mon Sep 17 00:00:00 2001 -From: Maruthi Bayyavarapu <maruthi.bayyavarapu@amd.com> -Date: Tue, 22 Sep 2015 17:05:20 -0400 -Subject: [PATCH 0257/1110] drm/amd: add ACP driver support - -This adds the ACP (Audio CoProcessor) IP driver and wires -it up to the amdgpu driver. The ACP block provides the DMA -engine for i2s based ALSA driver. This is required for audio -on APUs that utilize an i2s codec. - -Reviewed-by: Jammy Zhou <Jammy.Zhou@amd.com> -Reviewed-by: Maruthi Bayyavarapu <maruthi.bayyavarapu@amd.com> -Reviewed-by: Alex Deucher <alexander.deucher@amd.com> -Reviewed-by: Murali Krishna Vemuri <murali-krishna.vemuri@amd.com> -Signed-off-by: Maruthi Bayyavarapu <maruthi.bayyavarapu@amd.com> -Signed-off-by: Chunming Zhou <david1.zhou@amd.com> -Signed-off-by: Alex Deucher <alexander.deucher@amd.com> ---- - drivers/gpu/drm/amd/acp/Kconfig | 10 + - drivers/gpu/drm/amd/acp/Makefile | 8 + - drivers/gpu/drm/amd/acp/acp_hw.c | 50 +++++ - drivers/gpu/drm/amd/acp/include/acp_gfx_if.h | 34 +++ - drivers/gpu/drm/amd/amdgpu/Makefile | 13 +- - drivers/gpu/drm/amd/amdgpu/amdgpu.h | 12 ++ - drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c | 298 +++++++++++++++++++++++++++ - drivers/gpu/drm/amd/amdgpu/amdgpu_acp.h | 41 ++++ - drivers/gpu/drm/amd/amdgpu/vi.c | 12 ++ - drivers/gpu/drm/amd/include/amd_shared.h | 1 + - 10 files changed, 478 insertions(+), 1 deletion(-) - create mode 100644 drivers/gpu/drm/amd/acp/Kconfig - create mode 100644 drivers/gpu/drm/amd/acp/Makefile - create mode 100644 drivers/gpu/drm/amd/acp/acp_hw.c - create mode 100644 drivers/gpu/drm/amd/acp/include/acp_gfx_if.h - create mode 100644 drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c - create mode 100644 drivers/gpu/drm/amd/amdgpu/amdgpu_acp.h - -diff --git a/drivers/gpu/drm/amd/acp/Kconfig b/drivers/gpu/drm/amd/acp/Kconfig -new file mode 100644 -index 0000000..28b5e70 ---- /dev/null -+++ b/drivers/gpu/drm/amd/acp/Kconfig -@@ -0,0 +1,10 @@ -+menu "ACP Configuration" -+ -+config DRM_AMD_ACP -+ bool "Enable ACP IP support" -+ default y -+ select MFD_CORE -+ help -+ Choose this option to enable ACP IP support for AMD SOCs. -+ -+endmenu -diff --git a/drivers/gpu/drm/amd/acp/Makefile b/drivers/gpu/drm/amd/acp/Makefile -new file mode 100644 -index 0000000..8363cb5 ---- /dev/null -+++ b/drivers/gpu/drm/amd/acp/Makefile -@@ -0,0 +1,8 @@ -+# -+# Makefile for the ACP, which is a sub-component -+# of AMDSOC/AMDGPU drm driver. -+# It provides the HW control for ACP related functionalities. -+ -+subdir-ccflags-y += -I$(AMDACPPATH)/ -I$(AMDACPPATH)/include -+ -+AMD_ACP_FILES := $(AMDACPPATH)/acp_hw.o -diff --git a/drivers/gpu/drm/amd/acp/acp_hw.c b/drivers/gpu/drm/amd/acp/acp_hw.c -new file mode 100644 -index 0000000..7af83f1 ---- /dev/null -+++ b/drivers/gpu/drm/amd/acp/acp_hw.c -@@ -0,0 +1,50 @@ -+/* -+ * Copyright 2015 Advanced Micro Devices, Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining a -+ * copy of this software and associated documentation files (the "Software"), -+ * to deal in the Software without restriction, including without limitation -+ * the rights to use, copy, modify, merge, publish, distribute, sublicense, -+ * and/or sell copies of the Software, and to permit persons to whom the -+ * Software is furnished to do so, subject to the following conditions: -+ * -+ * The above copyright notice and this permission notice shall be included in -+ * all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR -+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -+ * OTHER DEALINGS IN THE SOFTWARE. -+ * -+ */ -+ -+#include <linux/mm.h> -+#include <linux/slab.h> -+#include <linux/device.h> -+#include <linux/delay.h> -+#include <linux/errno.h> -+ -+#include "acp_gfx_if.h" -+ -+#define ACP_MODE_I2S 0 -+#define ACP_MODE_AZ 1 -+ -+#define mmACP_AZALIA_I2S_SELECT 0x51d4 -+ -+int amd_acp_hw_init(void *cgs_device, -+ unsigned acp_version_major, unsigned acp_version_minor) -+{ -+ unsigned int acp_mode = ACP_MODE_I2S; -+ -+ if ((acp_version_major == 2) && (acp_version_minor == 2)) -+ acp_mode = cgs_read_register(cgs_device, -+ mmACP_AZALIA_I2S_SELECT); -+ -+ if (acp_mode != ACP_MODE_I2S) -+ return -ENODEV; -+ -+ return 0; -+} -diff --git a/drivers/gpu/drm/amd/acp/include/acp_gfx_if.h b/drivers/gpu/drm/amd/acp/include/acp_gfx_if.h -new file mode 100644 -index 0000000..bccf47b ---- /dev/null -+++ b/drivers/gpu/drm/amd/acp/include/acp_gfx_if.h -@@ -0,0 +1,34 @@ -+/* -+ * Copyright 2015 Advanced Micro Devices, Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining a -+ * copy of this software and associated documentation files (the "Software"), -+ * to deal in the Software without restriction, including without limitation -+ * the rights to use, copy, modify, merge, publish, distribute, sublicense, -+ * and/or sell copies of the Software, and to permit persons to whom the -+ * Software is furnished to do so, subject to the following conditions: -+ * -+ * The above copyright notice and this permission notice shall be included in -+ * all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR -+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -+ * OTHER DEALINGS IN THE SOFTWARE. -+ * -+*/ -+ -+#ifndef _ACP_GFX_IF_H -+#define _ACP_GFX_IF_H -+ -+#include <linux/types.h> -+#include "cgs_linux.h" -+#include "cgs_common.h" -+ -+int amd_acp_hw_init(void *cgs_device, -+ unsigned acp_version_major, unsigned acp_version_minor); -+ -+#endif /* _ACP_GFX_IF_H */ -diff --git a/drivers/gpu/drm/amd/amdgpu/Makefile b/drivers/gpu/drm/amd/amdgpu/Makefile -index 7e4568e..dceebbb 100644 ---- a/drivers/gpu/drm/amd/amdgpu/Makefile -+++ b/drivers/gpu/drm/amd/amdgpu/Makefile -@@ -8,7 +8,8 @@ ccflags-y := -Iinclude/drm -I$(FULL_AMD_PATH)/include/asic_reg \ - -I$(FULL_AMD_PATH)/include \ - -I$(FULL_AMD_PATH)/amdgpu \ - -I$(FULL_AMD_PATH)/scheduler \ -- -I$(FULL_AMD_PATH)/powerplay/inc -+ -I$(FULL_AMD_PATH)/powerplay/inc \ -+ -I$(FULL_AMD_PATH)/acp/include - - amdgpu-y := amdgpu_drv.o - -@@ -94,6 +95,16 @@ amdgpu-y += \ - ../scheduler/sched_fence.o \ - amdgpu_sched.o - -+# ACP componet -+ifneq ($(CONFIG_DRM_AMD_ACP),) -+amdgpu-y += amdgpu_acp.o -+ -+AMDACPPATH := ../acp -+include $(FULL_AMD_PATH)/acp/Makefile -+ -+amdgpu-y += $(AMD_ACP_FILES) -+endif -+ - amdgpu-$(CONFIG_COMPAT) += amdgpu_ioc32.o - amdgpu-$(CONFIG_VGA_SWITCHEROO) += amdgpu_atpx_handler.o - amdgpu-$(CONFIG_ACPI) += amdgpu_acpi.o -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h -index e182c9f..e134cfe 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h -@@ -53,6 +53,7 @@ - #include "amdgpu_ucode.h" - #include "amdgpu_gds.h" - #include "amd_powerplay.h" -+#include "amdgpu_acp.h" - - #include "gpu_scheduler.h" - -@@ -1857,6 +1858,13 @@ void amdgpu_cgs_destroy_device(void *cgs_device); - - - /* -+ * CGS -+ */ -+void *amdgpu_cgs_create_device(struct amdgpu_device *adev); -+void amdgpu_cgs_destroy_device(void *cgs_device); -+ -+ -+/* - * Core structure, functions and helpers. - */ - typedef uint32_t (*amdgpu_rreg_t)(struct amdgpu_device*, uint32_t); -@@ -1876,6 +1884,10 @@ struct amdgpu_device { - struct drm_device *ddev; - struct pci_dev *pdev; - -+#ifdef CONFIG_DRM_AMD_ACP -+ struct amdgpu_acp acp; -+#endif -+ - /* ASIC */ - enum amd_asic_type asic_type; - uint32_t family; -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c -new file mode 100644 -index 0000000..71f26e9 ---- /dev/null -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c -@@ -0,0 +1,298 @@ -+/* -+ * Copyright 2015 Advanced Micro Devices, Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining a -+ * copy of this software and associated documentation files (the "Software"), -+ * to deal in the Software without restriction, including without limitation -+ * the rights to use, copy, modify, merge, publish, distribute, sublicense, -+ * and/or sell copies of the Software, and to permit persons to whom the -+ * Software is furnished to do so, subject to the following conditions: -+ * -+ * The above copyright notice and this permission notice shall be included in -+ * all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR -+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -+ * OTHER DEALINGS IN THE SOFTWARE. -+ * -+ * Authors: AMD -+ * -+ */ -+ -+#include <linux/irqdomain.h> -+#include <linux/platform_device.h> -+#include <sound/designware_i2s.h> -+#include <sound/pcm.h> -+ -+#include "amdgpu.h" -+#include "atom.h" -+#include "amdgpu_acp.h" -+ -+#include "acp_gfx_if.h" -+ -+#define ACP_TILE_ON_MASK 0x03 -+#define ACP_TILE_OFF_MASK 0x02 -+#define ACP_TILE_ON_RETAIN_REG_MASK 0x1f -+#define ACP_TILE_OFF_RETAIN_REG_MASK 0x20 -+ -+#define ACP_TILE_P1_MASK 0x3e -+#define ACP_TILE_P2_MASK 0x3d -+#define ACP_TILE_DSP0_MASK 0x3b -+#define ACP_TILE_DSP1_MASK 0x37 -+ -+#define ACP_TILE_DSP2_MASK 0x2f -+ -+#define ACP_DMA_REGS_END 0x146c0 -+#define ACP_I2S_PLAY_REGS_START 0x14840 -+#define ACP_I2S_PLAY_REGS_END 0x148b4 -+#define ACP_I2S_CAP_REGS_START 0x148b8 -+#define ACP_I2S_CAP_REGS_END 0x1496c -+ -+#define ACP_I2S_COMP1_CAP_REG_OFFSET 0xac -+#define ACP_I2S_COMP2_CAP_REG_OFFSET 0xa8 -+#define ACP_I2S_COMP1_PLAY_REG_OFFSET 0x6c -+#define ACP_I2S_COMP2_PLAY_REG_OFFSET 0x68 -+ -+#define mmACP_PGFSM_RETAIN_REG 0x51c9 -+#define mmACP_PGFSM_CONFIG_REG 0x51ca -+#define mmACP_PGFSM_READ_REG_0 0x51cc -+ -+#define mmACP_MEM_SHUT_DOWN_REQ_LO 0x51f8 -+#define mmACP_MEM_SHUT_DOWN_REQ_HI 0x51f9 -+#define mmACP_MEM_SHUT_DOWN_STS_LO 0x51fa -+#define mmACP_MEM_SHUT_DOWN_STS_HI 0x51fb -+ -+#define ACP_TIMEOUT_LOOP 0x000000FF -+#define ACP_DEVS 3 -+#define ACP_SRC_ID 162 -+ -+enum { -+ ACP_TILE_P1 = 0, -+ ACP_TILE_P2, -+ ACP_TILE_DSP0, -+ ACP_TILE_DSP1, -+ ACP_TILE_DSP2, -+}; -+ -+static int acp_sw_init(void *handle) -+{ -+ struct amdgpu_device *adev = (struct amdgpu_device *)handle; -+ -+ adev->acp.parent = adev->dev; -+ -+ adev->acp.cgs_device = -+ amdgpu_cgs_create_device(adev); -+ if (!adev->acp.cgs_device) -+ return -EINVAL; -+ -+ return 0; -+} -+ -+static int acp_sw_fini(void *handle) -+{ -+ struct amdgpu_device *adev = (struct amdgpu_device *)handle; -+ -+ if (adev->acp.cgs_device) -+ amdgpu_cgs_destroy_device(adev->acp.cgs_device); -+ -+ return 0; -+} -+ -+/** -+ * acp_hw_init - start and test ACP block -+ * -+ * @adev: amdgpu_device pointer -+ * -+ */ -+static int acp_hw_init(void *handle) -+{ -+ int r; -+ uint64_t acp_base; -+ struct i2s_platform_data *i2s_pdata; -+ -+ struct amdgpu_device *adev = (struct amdgpu_device *)handle; -+ -+ const struct amdgpu_ip_block_version *ip_version = -+ amdgpu_get_ip_block(adev, AMD_IP_BLOCK_TYPE_ACP); -+ -+ if (!ip_version) -+ return -EINVAL; -+ -+ r = amd_acp_hw_init(adev->acp.cgs_device, -+ ip_version->major, ip_version->minor); -+ /* -ENODEV means board uses AZ rather than ACP */ -+ if (r == -ENODEV) -+ return 0; -+ else if (r) -+ return r; -+ -+ r = cgs_get_pci_resource(adev->acp.cgs_device, CGS_RESOURCE_TYPE_MMIO, -+ 0x5289, 0, &acp_base); -+ if (r == -ENODEV) -+ return 0; -+ else if (r) -+ return r; -+ -+ adev->acp.acp_cell = kzalloc(sizeof(struct mfd_cell) * ACP_DEVS, -+ GFP_KERNEL); -+ -+ if (adev->acp.acp_cell == NULL) -+ return -ENOMEM; -+ -+ adev->acp.acp_res = kzalloc(sizeof(struct resource) * 4, GFP_KERNEL); -+ -+ if (adev->acp.acp_res == NULL) { -+ kfree(adev->acp.acp_cell); -+ return -ENOMEM; -+ } -+ -+ i2s_pdata = kzalloc(sizeof(struct i2s_platform_data) * 2, GFP_KERNEL); -+ if (i2s_pdata == NULL) { -+ kfree(adev->acp.acp_res); -+ kfree(adev->acp.acp_cell); -+ return -ENOMEM; -+ } -+ -+ i2s_pdata[0].quirks = DW_I2S_QUIRK_COMP_REG_OFFSET; -+ i2s_pdata[0].cap = DWC_I2S_PLAY; -+ i2s_pdata[0].snd_rates = SNDRV_PCM_RATE_8000_96000; -+ i2s_pdata[0].i2s_reg_comp1 = ACP_I2S_COMP1_PLAY_REG_OFFSET; -+ i2s_pdata[0].i2s_reg_comp2 = ACP_I2S_COMP2_PLAY_REG_OFFSET; -+ -+ i2s_pdata[1].quirks = DW_I2S_QUIRK_COMP_REG_OFFSET | -+ DW_I2S_QUIRK_COMP_PARAM1; -+ i2s_pdata[1].cap = DWC_I2S_RECORD; -+ i2s_pdata[1].snd_rates = SNDRV_PCM_RATE_8000_96000; -+ i2s_pdata[1].i2s_reg_comp1 = ACP_I2S_COMP1_CAP_REG_OFFSET; -+ i2s_pdata[1].i2s_reg_comp2 = ACP_I2S_COMP2_CAP_REG_OFFSET; -+ -+ adev->acp.acp_res[0].name = "acp2x_dma"; -+ adev->acp.acp_res[0].flags = IORESOURCE_MEM; -+ adev->acp.acp_res[0].start = acp_base; -+ adev->acp.acp_res[0].end = acp_base + ACP_DMA_REGS_END; -+ -+ adev->acp.acp_res[1].name = "acp2x_dw_i2s_play"; -+ adev->acp.acp_res[1].flags = IORESOURCE_MEM; -+ adev->acp.acp_res[1].start = acp_base + ACP_I2S_PLAY_REGS_START; -+ adev->acp.acp_res[1].end = acp_base + ACP_I2S_PLAY_REGS_END; -+ -+ adev->acp.acp_res[2].name = "acp2x_dw_i2s_cap"; -+ adev->acp.acp_res[2].flags = IORESOURCE_MEM; -+ adev->acp.acp_res[2].start = acp_base + ACP_I2S_CAP_REGS_START; -+ adev->acp.acp_res[2].end = acp_base + ACP_I2S_CAP_REGS_END; -+ -+ adev->acp.acp_res[3].name = "acp2x_dma_irq"; -+ adev->acp.acp_res[3].flags = IORESOURCE_IRQ; -+ adev->acp.acp_res[3].start = amdgpu_irq_create_mapping(adev, 162); -+ adev->acp.acp_res[3].end = adev->acp.acp_res[3].start; -+ -+ adev->acp.acp_cell[0].name = "acp_audio_dma"; -+ adev->acp.acp_cell[0].num_resources = 4; -+ adev->acp.acp_cell[0].resources = &adev->acp.acp_res[0]; -+ -+ adev->acp.acp_cell[1].name = "designware-i2s"; -+ adev->acp.acp_cell[1].num_resources = 1; -+ adev->acp.acp_cell[1].resources = &adev->acp.acp_res[1]; -+ adev->acp.acp_cell[1].platform_data = &i2s_pdata[0]; -+ adev->acp.acp_cell[1].pdata_size = sizeof(struct i2s_platform_data); -+ -+ adev->acp.acp_cell[2].name = "designware-i2s"; -+ adev->acp.acp_cell[2].num_resources = 1; -+ adev->acp.acp_cell[2].resources = &adev->acp.acp_res[2]; -+ adev->acp.acp_cell[2].platform_data = &i2s_pdata[1]; -+ adev->acp.acp_cell[2].pdata_size = sizeof(struct i2s_platform_data); -+ -+ r = mfd_add_hotplug_devices(adev->acp.parent, adev->acp.acp_cell, -+ ACP_DEVS); -+ if (r) -+ return r; -+ -+ return 0; -+} -+ -+/** -+ * acp_hw_fini - stop the hardware block -+ * -+ * @adev: amdgpu_device pointer -+ * -+ */ -+static int acp_hw_fini(void *handle) -+{ -+ struct amdgpu_device *adev = (struct amdgpu_device *)handle; -+ -+ mfd_remove_devices(adev->acp.parent); -+ kfree(adev->acp.acp_res); -+ kfree(adev->acp.acp_cell); -+ -+ return 0; -+} -+ -+static int acp_suspend(void *handle) -+{ -+ return 0; -+} -+ -+static int acp_resume(void *handle) -+{ -+ return 0; -+} -+ -+static int acp_early_init(void *handle) -+{ -+ return 0; -+} -+ -+static bool acp_is_idle(void *handle) -+{ -+ return true; -+} -+ -+static int acp_wait_for_idle(void *handle) -+{ -+ return 0; -+} -+ -+static int acp_soft_reset(void *handle) -+{ -+ return 0; -+} -+ -+static void acp_print_status(void *handle) -+{ -+ struct amdgpu_device *adev = (struct amdgpu_device *)handle; -+ -+ dev_info(adev->dev, "ACP STATUS\n"); -+} -+ -+static int acp_set_clockgating_state(void *handle, -+ enum amd_clockgating_state state) -+{ -+ return 0; -+} -+ -+static int acp_set_powergating_state(void *handle, -+ enum amd_powergating_state state) -+{ -+ return 0; -+} -+ -+const struct amd_ip_funcs acp_ip_funcs = { -+ .early_init = acp_early_init, -+ .late_init = NULL, -+ .sw_init = acp_sw_init, -+ .sw_fini = acp_sw_fini, -+ .hw_init = acp_hw_init, -+ .hw_fini = acp_hw_fini, -+ .suspend = acp_suspend, -+ .resume = acp_resume, -+ .is_idle = acp_is_idle, -+ .wait_for_idle = acp_wait_for_idle, -+ .soft_reset = acp_soft_reset, -+ .print_status = acp_print_status, -+ .set_clockgating_state = acp_set_clockgating_state, -+ .set_powergating_state = acp_set_powergating_state, -+}; -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_acp.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_acp.h -new file mode 100644 -index 0000000..24952ed ---- /dev/null -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_acp.h -@@ -0,0 +1,41 @@ -+/* -+ * Copyright 2015 Advanced Micro Devices, Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining a -+ * copy of this software and associated documentation files (the "Software"), -+ * to deal in the Software without restriction, including without limitation -+ * the rights to use, copy, modify, merge, publish, distribute, sublicense, -+ * and/or sell copies of the Software, and to permit persons to whom the -+ * Software is furnished to do so, subject to the following conditions: -+ * -+ * The above copyright notice and this permission notice shall be included in -+ * all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR -+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -+ * OTHER DEALINGS IN THE SOFTWARE. -+ * -+ * Authors: AMD -+ * -+ */ -+ -+#ifndef __AMDGPU_ACP_H__ -+#define __AMDGPU_ACP_H__ -+ -+#include <linux/mfd/core.h> -+ -+struct amdgpu_acp { -+ struct device *parent; -+ void *cgs_device; -+ struct amd_acp_private *private; -+ struct mfd_cell *acp_cell; -+ struct resource *acp_res; -+}; -+ -+extern const struct amd_ip_funcs acp_ip_funcs; -+ -+#endif /* __AMDGPU_ACP_H__ */ -diff --git a/drivers/gpu/drm/amd/amdgpu/vi.c b/drivers/gpu/drm/amd/amdgpu/vi.c -index 4ccf415..b72cf06 100644 ---- a/drivers/gpu/drm/amd/amdgpu/vi.c -+++ b/drivers/gpu/drm/amd/amdgpu/vi.c -@@ -74,6 +74,9 @@ - #include "uvd_v6_0.h" - #include "vce_v3_0.h" - #include "amdgpu_powerplay.h" -+#if defined(CONFIG_DRM_AMD_ACP) -+#include "amdgpu_acp.h" -+#endif - - /* - * Indirect registers accessor -@@ -970,6 +973,15 @@ static const struct amdgpu_ip_block_version cz_ip_blocks[] = - .rev = 0, - .funcs = &vce_v3_0_ip_funcs, - }, -+#if defined(CONFIG_DRM_AMD_ACP) -+ { -+ .type = AMD_IP_BLOCK_TYPE_ACP, -+ .major = 2, -+ .minor = 2, -+ .rev = 0, -+ .funcs = &acp_ip_funcs, -+ }, -+#endif - }; - - int vi_set_ip_blocks(struct amdgpu_device *adev) -diff --git a/drivers/gpu/drm/amd/include/amd_shared.h b/drivers/gpu/drm/amd/include/amd_shared.h -index dbf7e64..04e4090 100644 ---- a/drivers/gpu/drm/amd/include/amd_shared.h -+++ b/drivers/gpu/drm/amd/include/amd_shared.h -@@ -73,6 +73,7 @@ enum amd_ip_block_type { - AMD_IP_BLOCK_TYPE_SDMA, - AMD_IP_BLOCK_TYPE_UVD, - AMD_IP_BLOCK_TYPE_VCE, -+ AMD_IP_BLOCK_TYPE_ACP, - }; - - enum amd_clockgating_state { --- -2.7.4 - |