diff --git a/cnss2/pci.c b/cnss2/pci.c index 963f9fb674..1edd7052a6 100644 --- a/cnss2/pci.c +++ b/cnss2/pci.c @@ -255,6 +255,124 @@ static const struct mhi_channel_config cnss_mhi_channels[] = { #endif }; +static const struct mhi_channel_config cnss_mhi_channels_no_diag[] = { + { + .num = 0, + .name = "LOOPBACK", + .num_elements = 32, + .event_ring = 1, + .dir = DMA_TO_DEVICE, + .ee_mask = 0x4, + .pollcfg = 0, + .doorbell = MHI_DB_BRST_DISABLE, + .lpm_notify = false, + .offload_channel = false, + .doorbell_mode_switch = false, + .auto_queue = false, + }, + { + .num = 1, + .name = "LOOPBACK", + .num_elements = 32, + .event_ring = 1, + .dir = DMA_FROM_DEVICE, + .ee_mask = 0x4, + .pollcfg = 0, + .doorbell = MHI_DB_BRST_DISABLE, + .lpm_notify = false, + .offload_channel = false, + .doorbell_mode_switch = false, + .auto_queue = false, + }, + { + .num = 20, + .name = "IPCR", + .num_elements = 64, + .event_ring = 1, + .dir = DMA_TO_DEVICE, + .ee_mask = 0x4, + .pollcfg = 0, + .doorbell = MHI_DB_BRST_DISABLE, + .lpm_notify = false, + .offload_channel = false, + .doorbell_mode_switch = false, + .auto_queue = false, + }, + { + .num = 21, + .name = "IPCR", + .num_elements = 64, + .event_ring = 1, + .dir = DMA_FROM_DEVICE, + .ee_mask = 0x4, + .pollcfg = 0, + .doorbell = MHI_DB_BRST_DISABLE, + .lpm_notify = false, + .offload_channel = false, + .doorbell_mode_switch = false, + .auto_queue = true, + }, +/* All MHI satellite config to be at the end of data struct */ +#if IS_ENABLED(CONFIG_MHI_SATELLITE) + { + .num = 50, + .name = "ADSP_0", + .num_elements = 64, + .event_ring = 3, + .dir = DMA_BIDIRECTIONAL, + .ee_mask = 0x4, + .pollcfg = 0, + .doorbell = MHI_DB_BRST_DISABLE, + .lpm_notify = false, + .offload_channel = true, + .doorbell_mode_switch = false, + .auto_queue = false, + }, + { + .num = 51, + .name = "ADSP_1", + .num_elements = 64, + .event_ring = 3, + .dir = DMA_BIDIRECTIONAL, + .ee_mask = 0x4, + .pollcfg = 0, + .doorbell = MHI_DB_BRST_DISABLE, + .lpm_notify = false, + .offload_channel = true, + .doorbell_mode_switch = false, + .auto_queue = false, + }, + { + .num = 70, + .name = "ADSP_2", + .num_elements = 64, + .event_ring = 3, + .dir = DMA_BIDIRECTIONAL, + .ee_mask = 0x4, + .pollcfg = 0, + .doorbell = MHI_DB_BRST_DISABLE, + .lpm_notify = false, + .offload_channel = true, + .doorbell_mode_switch = false, + .auto_queue = false, + }, + { + .num = 71, + .name = "ADSP_3", + .num_elements = 64, + .event_ring = 3, + .dir = DMA_BIDIRECTIONAL, + .ee_mask = 0x4, + .pollcfg = 0, + .doorbell = MHI_DB_BRST_DISABLE, + .lpm_notify = false, + .offload_channel = true, + .doorbell_mode_switch = false, + .auto_queue = false, + }, +#endif +}; + static const struct mhi_channel_config cnss_mhi_channels_genoa[] = { { .num = 0, @@ -404,6 +522,22 @@ static const struct mhi_event_config cnss_mhi_events[] = { #define CNSS_MHI_SATELLITE_EVT_COUNT 0 #endif +static const struct mhi_controller_config cnss_mhi_config_no_diag = { +#if IS_ENABLED(CONFIG_MHI_SATELLITE) + .max_channels = 72, +#else + .max_channels = 32, +#endif + .timeout_ms = 10000, + .use_bounce_buf = false, + .buf_len = 0x8000, + .num_channels = ARRAY_SIZE(cnss_mhi_channels_no_diag), + .ch_cfg = cnss_mhi_channels_no_diag, + .num_events = ARRAY_SIZE(cnss_mhi_events), + .event_cfg = cnss_mhi_events, + .m2_no_db = true, +}; + static const struct mhi_controller_config cnss_mhi_config_default = { #if IS_ENABLED(CONFIG_MHI_SATELLITE) .max_channels = 72, @@ -6959,6 +7093,11 @@ static int cnss_pci_register_mhi(struct cnss_pci_data *pci_priv) cnss_mhi_config = &cnss_mhi_config_no_satellite; } + /* DIAG no longer supported on PEACH and later chipset */ + if (plat_priv->device_id >= PEACH_DEVICE_ID) { + cnss_mhi_config = &cnss_mhi_config_no_diag; + } + mhi_ctrl->tme_supported_image = cnss_is_tme_supported(pci_priv); ret = mhi_register_controller(mhi_ctrl, cnss_mhi_config);