|
@@ -36,6 +36,8 @@
|
|
#endif
|
|
#endif
|
|
|
|
|
|
#include "pld_pcie.h"
|
|
#include "pld_pcie.h"
|
|
|
|
+#include "pld_pcie_fw_sim.h"
|
|
|
|
+#include "pld_snoc_fw_sim.h"
|
|
#include "pld_snoc.h"
|
|
#include "pld_snoc.h"
|
|
#include "pld_sdio.h"
|
|
#include "pld_sdio.h"
|
|
#include "pld_usb.h"
|
|
#include "pld_usb.h"
|
|
@@ -45,6 +47,8 @@
|
|
#define PLD_SNOC_REGISTERED BIT(1)
|
|
#define PLD_SNOC_REGISTERED BIT(1)
|
|
#define PLD_SDIO_REGISTERED BIT(2)
|
|
#define PLD_SDIO_REGISTERED BIT(2)
|
|
#define PLD_USB_REGISTERED BIT(3)
|
|
#define PLD_USB_REGISTERED BIT(3)
|
|
|
|
+#define PLD_SNOC_FW_SIM_REGISTERED BIT(4)
|
|
|
|
+#define PLD_PCIE_FW_SIM_REGISTERED BIT(5)
|
|
#define PLD_BUS_MASK 0xf
|
|
#define PLD_BUS_MASK 0xf
|
|
|
|
|
|
static struct pld_context *pld_ctx;
|
|
static struct pld_context *pld_ctx;
|
|
@@ -288,6 +292,20 @@ int pld_register_driver(struct pld_driver_ops *ops)
|
|
}
|
|
}
|
|
pld_context->pld_driver_state |= PLD_SDIO_REGISTERED;
|
|
pld_context->pld_driver_state |= PLD_SDIO_REGISTERED;
|
|
|
|
|
|
|
|
+ ret = pld_snoc_fw_sim_register_driver();
|
|
|
|
+ if (ret) {
|
|
|
|
+ pr_err("Fail to register snoc fw sim driver\n");
|
|
|
|
+ goto fail_snoc_fw_sim;
|
|
|
|
+ }
|
|
|
|
+ pld_context->pld_driver_state |= PLD_SNOC_FW_SIM_REGISTERED;
|
|
|
|
+
|
|
|
|
+ ret = pld_pcie_fw_sim_register_driver();
|
|
|
|
+ if (ret) {
|
|
|
|
+ pr_err("Fail to register pcie fw sim driver\n");
|
|
|
|
+ goto fail_pcie_fw_sim;
|
|
|
|
+ }
|
|
|
|
+ pld_context->pld_driver_state |= PLD_PCIE_FW_SIM_REGISTERED;
|
|
|
|
+
|
|
ret = pld_usb_register_driver();
|
|
ret = pld_usb_register_driver();
|
|
if (ret) {
|
|
if (ret) {
|
|
pr_err("Fail to register usb driver\n");
|
|
pr_err("Fail to register usb driver\n");
|
|
@@ -298,6 +316,10 @@ int pld_register_driver(struct pld_driver_ops *ops)
|
|
return ret;
|
|
return ret;
|
|
|
|
|
|
fail_usb:
|
|
fail_usb:
|
|
|
|
+ pld_pcie_fw_sim_unregister_driver();
|
|
|
|
+fail_pcie_fw_sim:
|
|
|
|
+ pld_snoc_fw_sim_unregister_driver();
|
|
|
|
+fail_snoc_fw_sim:
|
|
pld_sdio_unregister_driver();
|
|
pld_sdio_unregister_driver();
|
|
fail_sdio:
|
|
fail_sdio:
|
|
pld_snoc_unregister_driver();
|
|
pld_snoc_unregister_driver();
|
|
@@ -336,6 +358,8 @@ void pld_unregister_driver(void)
|
|
}
|
|
}
|
|
|
|
|
|
pld_pcie_unregister_driver();
|
|
pld_pcie_unregister_driver();
|
|
|
|
+ pld_snoc_fw_sim_unregister_driver();
|
|
|
|
+ pld_pcie_fw_sim_unregister_driver();
|
|
pld_snoc_unregister_driver();
|
|
pld_snoc_unregister_driver();
|
|
pld_sdio_unregister_driver();
|
|
pld_sdio_unregister_driver();
|
|
pld_usb_unregister_driver();
|
|
pld_usb_unregister_driver();
|
|
@@ -370,6 +394,14 @@ int pld_wlan_enable(struct device *dev, struct pld_wlan_enable_cfg *config,
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
ret = pld_snoc_wlan_enable(dev, config, mode, QWLAN_VERSIONSTR);
|
|
ret = pld_snoc_wlan_enable(dev, config, mode, QWLAN_VERSIONSTR);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
|
|
+ ret = pld_snoc_fw_sim_wlan_enable(dev, config, mode,
|
|
|
|
+ QWLAN_VERSIONSTR);
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ ret = pld_pcie_fw_sim_wlan_enable(dev, config, mode,
|
|
|
|
+ QWLAN_VERSIONSTR);
|
|
|
|
+ break;
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
ret = pld_sdio_wlan_enable(dev, config, mode, QWLAN_VERSIONSTR);
|
|
ret = pld_sdio_wlan_enable(dev, config, mode, QWLAN_VERSIONSTR);
|
|
break;
|
|
break;
|
|
@@ -407,6 +439,12 @@ int pld_wlan_disable(struct device *dev, enum pld_driver_mode mode)
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
ret = pld_snoc_wlan_disable(dev, mode);
|
|
ret = pld_snoc_wlan_disable(dev, mode);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
|
|
+ ret = pld_snoc_fw_sim_wlan_disable(dev, mode);
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ ret = pld_pcie_fw_sim_wlan_disable(dev, mode);
|
|
|
|
+ break;
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
@@ -438,6 +476,8 @@ int pld_set_fw_log_mode(struct device *dev, u8 fw_log_mode)
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
ret = pld_snoc_set_fw_log_mode(dev, fw_log_mode);
|
|
ret = pld_snoc_set_fw_log_mode(dev, fw_log_mode);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
@@ -500,6 +540,8 @@ int pld_get_fw_files_for_target(struct device *dev,
|
|
target_type,
|
|
target_type,
|
|
target_version);
|
|
target_version);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
break;
|
|
break;
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
@@ -531,9 +573,12 @@ int pld_get_fw_files_for_target(struct device *dev,
|
|
void pld_is_pci_link_down(struct device *dev)
|
|
void pld_is_pci_link_down(struct device *dev)
|
|
{
|
|
{
|
|
switch (pld_get_bus_type(dev)) {
|
|
switch (pld_get_bus_type(dev)) {
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ break;
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
pld_pcie_link_down(dev);
|
|
pld_pcie_link_down(dev);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
@@ -558,6 +603,8 @@ void pld_schedule_recovery_work(struct device *dev,
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
pld_pcie_schedule_recovery_work(dev, reason);
|
|
pld_pcie_schedule_recovery_work(dev, reason);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
@@ -586,6 +633,8 @@ int pld_wlan_pm_control(struct device *dev, bool vote)
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
ret = pld_pcie_wlan_pm_control(dev, vote);
|
|
ret = pld_pcie_wlan_pm_control(dev, vote);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
break;
|
|
break;
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
@@ -613,6 +662,8 @@ void *pld_get_virt_ramdump_mem(struct device *dev, unsigned long *size)
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
mem = pld_pcie_get_virt_ramdump_mem(dev, size);
|
|
mem = pld_pcie_get_virt_ramdump_mem(dev, size);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
break;
|
|
break;
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
@@ -632,6 +683,8 @@ void pld_release_virt_ramdump_mem(struct device *dev, void *address)
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
pld_pcie_release_virt_ramdump_mem(address);
|
|
pld_pcie_release_virt_ramdump_mem(address);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
break;
|
|
break;
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
@@ -658,6 +711,8 @@ void pld_device_crashed(struct device *dev)
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
pld_pcie_device_crashed(dev);
|
|
pld_pcie_device_crashed(dev);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
break;
|
|
break;
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
@@ -683,6 +738,8 @@ void pld_device_self_recovery(struct device *dev,
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
pld_pcie_device_self_recovery(dev, reason);
|
|
pld_pcie_device_self_recovery(dev, reason);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
break;
|
|
break;
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
@@ -708,6 +765,8 @@ void pld_intr_notify_q6(struct device *dev)
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
pld_pcie_intr_notify_q6(dev);
|
|
pld_pcie_intr_notify_q6(dev);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
@@ -731,6 +790,8 @@ void pld_request_pm_qos(struct device *dev, u32 qos_val)
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
pld_pcie_request_pm_qos(dev, qos_val);
|
|
pld_pcie_request_pm_qos(dev, qos_val);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
break;
|
|
break;
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
@@ -758,6 +819,8 @@ void pld_remove_pm_qos(struct device *dev)
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
pld_pcie_remove_pm_qos(dev);
|
|
pld_pcie_remove_pm_qos(dev);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
break;
|
|
break;
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
@@ -787,6 +850,8 @@ int pld_request_bus_bandwidth(struct device *dev, int bandwidth)
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
ret = pld_pcie_request_bus_bandwidth(dev, bandwidth);
|
|
ret = pld_pcie_request_bus_bandwidth(dev, bandwidth);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
break;
|
|
break;
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
@@ -818,6 +883,10 @@ int pld_get_platform_cap(struct device *dev, struct pld_platform_cap *cap)
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
ret = pld_pcie_get_platform_cap(dev, cap);
|
|
ret = pld_pcie_get_platform_cap(dev, cap);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ ret = pld_pcie_fw_sim_get_platform_cap(dev, cap);
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
break;
|
|
break;
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
@@ -853,6 +922,8 @@ int pld_get_sha_hash(struct device *dev, const u8 *data,
|
|
ret = pld_pcie_get_sha_hash(dev, data, data_len,
|
|
ret = pld_pcie_get_sha_hash(dev, data, data_len,
|
|
hash_idx, out);
|
|
hash_idx, out);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
break;
|
|
break;
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
@@ -879,6 +950,8 @@ void *pld_get_fw_ptr(struct device *dev)
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
ptr = pld_pcie_get_fw_ptr(dev);
|
|
ptr = pld_pcie_get_fw_ptr(dev);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
break;
|
|
break;
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
@@ -906,6 +979,8 @@ int pld_auto_suspend(struct device *dev)
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
ret = pld_pcie_auto_suspend(dev);
|
|
ret = pld_pcie_auto_suspend(dev);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
break;
|
|
break;
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
@@ -933,6 +1008,8 @@ int pld_auto_resume(struct device *dev)
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
ret = pld_pcie_auto_resume(dev);
|
|
ret = pld_pcie_auto_resume(dev);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
break;
|
|
break;
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
@@ -961,6 +1038,8 @@ int pld_force_wake_request(struct device *dev)
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
ret = pld_pcie_force_wake_request(dev);
|
|
ret = pld_pcie_force_wake_request(dev);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_USB:
|
|
case PLD_BUS_TYPE_USB:
|
|
@@ -991,6 +1070,8 @@ int pld_is_device_awake(struct device *dev)
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
ret = pld_pcie_is_device_awake(dev);
|
|
ret = pld_pcie_is_device_awake(dev);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_USB:
|
|
case PLD_BUS_TYPE_USB:
|
|
@@ -1020,6 +1101,8 @@ int pld_force_wake_release(struct device *dev)
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
ret = pld_pcie_force_wake_release(dev);
|
|
ret = pld_pcie_force_wake_release(dev);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_USB:
|
|
case PLD_BUS_TYPE_USB:
|
|
@@ -1056,6 +1139,11 @@ int pld_ce_request_irq(struct device *dev, unsigned int ce_id,
|
|
ret = pld_snoc_ce_request_irq(dev, ce_id,
|
|
ret = pld_snoc_ce_request_irq(dev, ce_id,
|
|
handler, flags, name, ctx);
|
|
handler, flags, name, ctx);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
|
|
+ ret = pld_snoc_fw_sim_ce_request_irq(dev, ce_id,
|
|
|
|
+ handler, flags, name, ctx);
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
@@ -1083,6 +1171,10 @@ int pld_ce_free_irq(struct device *dev, unsigned int ce_id, void *ctx)
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
ret = pld_snoc_ce_free_irq(dev, ce_id, ctx);
|
|
ret = pld_snoc_ce_free_irq(dev, ce_id, ctx);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
|
|
+ ret = pld_snoc_fw_sim_ce_free_irq(dev, ce_id, ctx);
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
@@ -1106,6 +1198,10 @@ void pld_enable_irq(struct device *dev, unsigned int ce_id)
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
pld_snoc_enable_irq(dev, ce_id);
|
|
pld_snoc_enable_irq(dev, ce_id);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
|
|
+ pld_snoc_fw_sim_enable_irq(dev, ce_id);
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
break;
|
|
break;
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
@@ -1129,6 +1225,10 @@ void pld_disable_irq(struct device *dev, unsigned int ce_id)
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
pld_snoc_disable_irq(dev, ce_id);
|
|
pld_snoc_disable_irq(dev, ce_id);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
|
|
+ pld_snoc_fw_sim_disable_irq(dev, ce_id);
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
break;
|
|
break;
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
@@ -1157,6 +1257,12 @@ int pld_get_soc_info(struct device *dev, struct pld_soc_info *info)
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
ret = pld_snoc_get_soc_info(dev, info);
|
|
ret = pld_snoc_get_soc_info(dev, info);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
|
|
+ ret = pld_snoc_fw_sim_get_soc_info(dev, info);
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ ret = pld_pcie_fw_sim_get_soc_info(dev, info);
|
|
|
|
+ break;
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
ret = pld_pcie_get_soc_info(dev, info);
|
|
ret = pld_pcie_get_soc_info(dev, info);
|
|
break;
|
|
break;
|
|
@@ -1185,9 +1291,14 @@ int pld_get_ce_id(struct device *dev, int irq)
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
ret = pld_snoc_get_ce_id(dev, irq);
|
|
ret = pld_snoc_get_ce_id(dev, irq);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
|
|
+ ret = pld_snoc_fw_sim_get_ce_id(dev, irq);
|
|
|
|
+ break;
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
ret = pld_pcie_get_ce_id(dev, irq);
|
|
ret = pld_pcie_get_ce_id(dev, irq);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ break;
|
|
default:
|
|
default:
|
|
ret = -EINVAL;
|
|
ret = -EINVAL;
|
|
break;
|
|
break;
|
|
@@ -1211,6 +1322,10 @@ int pld_get_irq(struct device *dev, int ce_id)
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
ret = pld_snoc_get_irq(dev, ce_id);
|
|
ret = pld_snoc_get_irq(dev, ce_id);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
|
|
+ ret = pld_snoc_fw_sim_get_irq(dev, ce_id);
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
default:
|
|
default:
|
|
ret = -EINVAL;
|
|
ret = -EINVAL;
|
|
@@ -1232,6 +1347,8 @@ void pld_lock_pm_sem(struct device *dev)
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
pld_pcie_lock_pm_sem(dev);
|
|
pld_pcie_lock_pm_sem(dev);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
break;
|
|
break;
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
@@ -1256,6 +1373,8 @@ void pld_release_pm_sem(struct device *dev)
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
pld_pcie_release_pm_sem(dev);
|
|
pld_pcie_release_pm_sem(dev);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
break;
|
|
break;
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
@@ -1286,6 +1405,9 @@ int pld_power_on(struct device *dev)
|
|
* handle the power on sequence for PCIe SoC
|
|
* handle the power on sequence for PCIe SoC
|
|
*/
|
|
*/
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
|
|
+ break;
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
ret = pld_snoc_power_on(dev);
|
|
ret = pld_snoc_power_on(dev);
|
|
break;
|
|
break;
|
|
@@ -1315,6 +1437,9 @@ int pld_power_off(struct device *dev)
|
|
* handle the power off sequence for PCIe SoC
|
|
* handle the power off sequence for PCIe SoC
|
|
*/
|
|
*/
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
|
|
+ break;
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
ret = pld_snoc_power_off(dev);
|
|
ret = pld_snoc_power_off(dev);
|
|
break;
|
|
break;
|
|
@@ -1354,6 +1479,8 @@ int pld_athdiag_read(struct device *dev, uint32_t offset,
|
|
break;
|
|
break;
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_USB:
|
|
case PLD_BUS_TYPE_USB:
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
ret = -EINVAL;
|
|
ret = -EINVAL;
|
|
@@ -1391,6 +1518,8 @@ int pld_athdiag_write(struct device *dev, uint32_t offset,
|
|
break;
|
|
break;
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_USB:
|
|
case PLD_BUS_TYPE_USB:
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
ret = -EINVAL;
|
|
ret = -EINVAL;
|
|
@@ -1419,6 +1548,9 @@ void *pld_smmu_get_domain(struct device *dev)
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
ptr = pld_pcie_smmu_get_domain(dev);
|
|
ptr = pld_pcie_smmu_get_domain(dev);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
|
|
+ break;
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_USB:
|
|
case PLD_BUS_TYPE_USB:
|
|
pr_err("Not supported on type %d\n", type);
|
|
pr_err("Not supported on type %d\n", type);
|
|
@@ -1446,6 +1578,9 @@ void *pld_smmu_get_mapping(struct device *dev)
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
ptr = pld_snoc_smmu_get_mapping(dev);
|
|
ptr = pld_snoc_smmu_get_mapping(dev);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
|
|
+ break;
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
ptr = pld_pcie_smmu_get_mapping(dev);
|
|
ptr = pld_pcie_smmu_get_mapping(dev);
|
|
break;
|
|
break;
|
|
@@ -1478,6 +1613,9 @@ int pld_smmu_map(struct device *dev, phys_addr_t paddr,
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
ret = pld_snoc_smmu_map(dev, paddr, iova_addr, size);
|
|
ret = pld_snoc_smmu_map(dev, paddr, iova_addr, size);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
|
|
+ break;
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
ret = pld_pcie_smmu_map(dev, paddr, iova_addr, size);
|
|
ret = pld_pcie_smmu_map(dev, paddr, iova_addr, size);
|
|
break;
|
|
break;
|
|
@@ -1516,9 +1654,101 @@ int pld_get_user_msi_assignment(struct device *dev, char *user_name,
|
|
user_base_data,
|
|
user_base_data,
|
|
base_vector);
|
|
base_vector);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ ret = pld_pcie_fw_sim_get_user_msi_assignment(dev, user_name,
|
|
|
|
+ num_vectors,
|
|
|
|
+ user_base_data,
|
|
|
|
+ base_vector);
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_SNOC:
|
|
|
|
+ case PLD_BUS_TYPE_SDIO:
|
|
|
|
+ case PLD_BUS_TYPE_USB:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
|
|
+ pr_err("Not supported on type %d\n", type);
|
|
|
|
+ ret = -ENODEV;
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ pr_err("Invalid device type %d\n", type);
|
|
|
|
+ ret = -EINVAL;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return ret;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * pld_srng_request_irq() - Register IRQ for SRNG
|
|
|
|
+ * @dev: device
|
|
|
|
+ * @irq: IRQ number
|
|
|
|
+ * @handler: IRQ callback function
|
|
|
|
+ * @flags: IRQ flags
|
|
|
|
+ * @name: IRQ name
|
|
|
|
+ * @ctx: IRQ context
|
|
|
|
+ *
|
|
|
|
+ * Return: 0 for success
|
|
|
|
+ * Non zero failure code for errors
|
|
|
|
+ */
|
|
|
|
+int pld_srng_request_irq(struct device *dev, int irq, irq_handler_t handler,
|
|
|
|
+ unsigned long irqflags,
|
|
|
|
+ const char *devname,
|
|
|
|
+ void *dev_data)
|
|
|
|
+{
|
|
|
|
+ int ret = 0;
|
|
|
|
+ enum pld_bus_type type = pld_get_bus_type(dev);
|
|
|
|
+
|
|
|
|
+ switch (type) {
|
|
|
|
+ case PLD_BUS_TYPE_PCIE:
|
|
|
|
+ ret = request_irq(irq, handler, irqflags, devname, dev_data);
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ ret = pld_pcie_fw_sim_request_irq(dev, irq, handler,
|
|
|
|
+ irqflags, devname,
|
|
|
|
+ dev_data);
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_SNOC:
|
|
|
|
+ case PLD_BUS_TYPE_SDIO:
|
|
|
|
+ case PLD_BUS_TYPE_USB:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
|
|
+ pr_err("Not supported on type %d\n", type);
|
|
|
|
+ ret = -ENODEV;
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ pr_err("Invalid device type %d\n", type);
|
|
|
|
+ ret = -EINVAL;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return ret;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * pld_srng_free_irq() - Free IRQ for SRNG
|
|
|
|
+ * @dev: device
|
|
|
|
+ * @irq: IRQ number
|
|
|
|
+ * @handler: IRQ callback function
|
|
|
|
+ * @flags: IRQ flags
|
|
|
|
+ * @name: IRQ name
|
|
|
|
+ * @ctx: IRQ context
|
|
|
|
+ *
|
|
|
|
+ * Return: 0 for success
|
|
|
|
+ * Non zero failure code for errors
|
|
|
|
+ */
|
|
|
|
+int pld_srng_free_irq(struct device *dev, int irq, void *dev_data)
|
|
|
|
+{
|
|
|
|
+ int ret = 0;
|
|
|
|
+ enum pld_bus_type type = pld_get_bus_type(dev);
|
|
|
|
+
|
|
|
|
+ switch (type) {
|
|
|
|
+ case PLD_BUS_TYPE_PCIE:
|
|
|
|
+ free_irq(irq, dev_data);
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ ret = pld_pcie_fw_sim_free_irq(dev, irq, dev_data);
|
|
|
|
+ break;
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_USB:
|
|
case PLD_BUS_TYPE_USB:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
pr_err("Not supported on type %d\n", type);
|
|
pr_err("Not supported on type %d\n", type);
|
|
ret = -ENODEV;
|
|
ret = -ENODEV;
|
|
break;
|
|
break;
|
|
@@ -1531,6 +1761,188 @@ int pld_get_user_msi_assignment(struct device *dev, char *user_name,
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/**
|
|
|
|
+ * pld_srng_enable_irq() - Enable IRQ for SRNG
|
|
|
|
+ * @dev: device
|
|
|
|
+ * @irq: IRQ number
|
|
|
|
+ *
|
|
|
|
+ * Return: void
|
|
|
|
+ */
|
|
|
|
+void pld_srng_enable_irq(struct device *dev, int irq)
|
|
|
|
+{
|
|
|
|
+ switch (pld_get_bus_type(dev)) {
|
|
|
|
+ case PLD_BUS_TYPE_SNOC:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ pld_pcie_fw_sim_enable_irq(dev, irq);
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE:
|
|
|
|
+ enable_irq(irq);
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_SDIO:
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ pr_err("Invalid device type\n");
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * pld_disable_irq() - Disable IRQ for SRNG
|
|
|
|
+ * @dev: device
|
|
|
|
+ * @irq: IRQ number
|
|
|
|
+ *
|
|
|
|
+ * Return: void
|
|
|
|
+ */
|
|
|
|
+void pld_srng_disable_irq(struct device *dev, int irq)
|
|
|
|
+{
|
|
|
|
+ switch (pld_get_bus_type(dev)) {
|
|
|
|
+ case PLD_BUS_TYPE_SNOC:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ pld_pcie_fw_sim_disable_irq(dev, irq);
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE:
|
|
|
|
+ disable_irq_nosync(irq);
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_SDIO:
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ pr_err("Invalid device type\n");
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * pld_pci_read_config_word() - Read PCI config
|
|
|
|
+ * @pdev: pci device
|
|
|
|
+ * @offset: Config space offset
|
|
|
|
+ * @val : Value
|
|
|
|
+ *
|
|
|
|
+ * Return: 0 for success
|
|
|
|
+ * Non zero failure code for errors
|
|
|
|
+ */
|
|
|
|
+int pld_pci_read_config_word(struct pci_dev *pdev, int offset, uint16_t *val)
|
|
|
|
+{
|
|
|
|
+ int ret = 0;
|
|
|
|
+
|
|
|
|
+ switch (pld_get_bus_type(&pdev->dev)) {
|
|
|
|
+ case PLD_BUS_TYPE_SNOC:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE:
|
|
|
|
+ ret = pci_read_config_word(pdev, offset, val);
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_SDIO:
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ pr_err("Invalid device type\n");
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return ret;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * pld_pci_write_config_word() - Write PCI config
|
|
|
|
+ * @pdev: pci device
|
|
|
|
+ * @offset: Config space offset
|
|
|
|
+ * @val : Value
|
|
|
|
+ *
|
|
|
|
+ * Return: 0 for success
|
|
|
|
+ * Non zero failure code for errors
|
|
|
|
+ */
|
|
|
|
+int pld_pci_write_config_word(struct pci_dev *pdev, int offset, uint16_t val)
|
|
|
|
+{
|
|
|
|
+ int ret = 0;
|
|
|
|
+
|
|
|
|
+ switch (pld_get_bus_type(&pdev->dev)) {
|
|
|
|
+ case PLD_BUS_TYPE_SNOC:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE:
|
|
|
|
+ ret = pci_write_config_word(pdev, offset, val);
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_SDIO:
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ pr_err("Invalid device type\n");
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return ret;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * pld_pci_read_config_dword() - Read PCI config
|
|
|
|
+ * @pdev: pci device
|
|
|
|
+ * @offset: Config space offset
|
|
|
|
+ * @val : Value
|
|
|
|
+ *
|
|
|
|
+ * Return: 0 for success
|
|
|
|
+ * Non zero failure code for errors
|
|
|
|
+ */
|
|
|
|
+int pld_pci_read_config_dword(struct pci_dev *pdev, int offset, uint32_t *val)
|
|
|
|
+{
|
|
|
|
+ int ret = 0;
|
|
|
|
+
|
|
|
|
+ switch (pld_get_bus_type(&pdev->dev)) {
|
|
|
|
+ case PLD_BUS_TYPE_SNOC:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE:
|
|
|
|
+ ret = pci_read_config_dword(pdev, offset, val);
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_SDIO:
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ pr_err("Invalid device type\n");
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return ret;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * pld_pci_write_config_dword() - Write PCI config
|
|
|
|
+ * @pdev: pci device
|
|
|
|
+ * @offset: Config space offset
|
|
|
|
+ * @val : Value
|
|
|
|
+ *
|
|
|
|
+ * Return: 0 for success
|
|
|
|
+ * Non zero failure code for errors
|
|
|
|
+ */
|
|
|
|
+int pld_pci_write_config_dword(struct pci_dev *pdev, int offset, uint32_t val)
|
|
|
|
+{
|
|
|
|
+ int ret = 0;
|
|
|
|
+
|
|
|
|
+ switch (pld_get_bus_type(&pdev->dev)) {
|
|
|
|
+ case PLD_BUS_TYPE_SNOC:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE:
|
|
|
|
+ ret = pci_write_config_dword(pdev, offset, val);
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_SDIO:
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ pr_err("Invalid device type\n");
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return ret;
|
|
|
|
+}
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* pld_get_msi_irq() - Get MSI IRQ number used for request_irq()
|
|
* pld_get_msi_irq() - Get MSI IRQ number used for request_irq()
|
|
* @dev: device structure
|
|
* @dev: device structure
|
|
@@ -1548,9 +1960,13 @@ int pld_get_msi_irq(struct device *dev, unsigned int vector)
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
ret = pld_pcie_get_msi_irq(dev, vector);
|
|
ret = pld_pcie_get_msi_irq(dev, vector);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ ret = pld_pcie_fw_sim_get_msi_irq(dev, vector);
|
|
|
|
+ break;
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_USB:
|
|
case PLD_BUS_TYPE_USB:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
pr_err("Not supported on type %d\n", type);
|
|
pr_err("Not supported on type %d\n", type);
|
|
ret = -ENODEV;
|
|
ret = -ENODEV;
|
|
break;
|
|
break;
|
|
@@ -1580,9 +1996,14 @@ void pld_get_msi_address(struct device *dev, uint32_t *msi_addr_low,
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
pld_pcie_get_msi_address(dev, msi_addr_low, msi_addr_high);
|
|
pld_pcie_get_msi_address(dev, msi_addr_low, msi_addr_high);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ pld_pcie_fw_sim_get_msi_address(dev, msi_addr_low,
|
|
|
|
+ msi_addr_high);
|
|
|
|
+ break;
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_USB:
|
|
case PLD_BUS_TYPE_USB:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
pr_err("Not supported on type %d\n", type);
|
|
pr_err("Not supported on type %d\n", type);
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
@@ -1608,6 +2029,8 @@ int pld_is_drv_connected(struct device *dev)
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
ret = pld_pcie_is_drv_connected(dev);
|
|
ret = pld_pcie_is_drv_connected(dev);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_USB:
|
|
case PLD_BUS_TYPE_USB:
|
|
@@ -1636,9 +2059,12 @@ unsigned int pld_socinfo_get_serial_number(struct device *dev)
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
ret = pld_snoc_socinfo_get_serial_number(dev);
|
|
ret = pld_snoc_socinfo_get_serial_number(dev);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
pr_err("Not supported on type %d\n", type);
|
|
pr_err("Not supported on type %d\n", type);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
|
|
+ break;
|
|
default:
|
|
default:
|
|
pr_err("Invalid device type %d\n", type);
|
|
pr_err("Invalid device type %d\n", type);
|
|
break;
|
|
break;
|
|
@@ -1664,6 +2090,9 @@ int pld_is_qmi_disable(struct device *dev)
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
ret = pld_snoc_is_qmi_disable(dev);
|
|
ret = pld_snoc_is_qmi_disable(dev);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
pr_err("Not supported on type %d\n", type);
|
|
pr_err("Not supported on type %d\n", type);
|
|
@@ -1699,6 +2128,11 @@ int pld_is_fw_down(struct device *dev)
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
ret = pld_snoc_is_fw_down(dev);
|
|
ret = pld_snoc_is_fw_down(dev);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
|
|
+ ret = pld_snoc_fw_sim_is_fw_down(dev);
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ break;
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
ret = pld_pcie_is_fw_down(dev);
|
|
ret = pld_pcie_is_fw_down(dev);
|
|
break;
|
|
break;
|
|
@@ -1735,6 +2169,9 @@ int pld_force_assert_target(struct device *dev)
|
|
return pld_snoc_force_assert_target(dev);
|
|
return pld_snoc_force_assert_target(dev);
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
return pld_pcie_force_assert_target(dev);
|
|
return pld_pcie_force_assert_target(dev);
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ return -EOPNOTSUPP;
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
default:
|
|
default:
|
|
@@ -1758,6 +2195,8 @@ int pld_collect_rddm(struct device *dev)
|
|
switch (type) {
|
|
switch (type) {
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
return pld_pcie_collect_rddm(dev);
|
|
return pld_pcie_collect_rddm(dev);
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_USB:
|
|
case PLD_BUS_TYPE_USB:
|
|
@@ -1873,6 +2312,8 @@ bool pld_is_fw_dump_skipped(struct device *dev)
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
ret = pld_sdio_is_fw_dump_skipped();
|
|
ret = pld_sdio_is_fw_dump_skipped();
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
default:
|
|
default:
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
@@ -1888,6 +2329,8 @@ int pld_is_pdr(struct device *dev)
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
ret = pld_snoc_is_pdr();
|
|
ret = pld_snoc_is_pdr();
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
default:
|
|
default:
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
@@ -1903,6 +2346,8 @@ int pld_is_fw_rejuvenate(struct device *dev)
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
ret = pld_snoc_is_fw_rejuvenate();
|
|
ret = pld_snoc_is_fw_rejuvenate();
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
default:
|
|
default:
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
@@ -1917,6 +2362,10 @@ bool pld_have_platform_driver_support(struct device *dev)
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
ret = pld_pcie_platform_driver_support();
|
|
ret = pld_pcie_platform_driver_support();
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ ret = true;
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
case PLD_BUS_TYPE_SNOC:
|
|
break;
|
|
break;
|
|
case PLD_BUS_TYPE_SDIO:
|
|
case PLD_BUS_TYPE_SDIO:
|
|
@@ -1949,6 +2398,12 @@ int pld_idle_shutdown(struct device *dev,
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
errno = pld_pcie_idle_shutdown(dev);
|
|
errno = pld_pcie_idle_shutdown(dev);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ errno = pld_pcie_fw_sim_idle_shutdown(dev);
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
|
|
+ errno = pld_snoc_fw_sim_idle_shutdown(dev);
|
|
|
|
+ break;
|
|
default:
|
|
default:
|
|
pr_err("Invalid device type %d\n", type);
|
|
pr_err("Invalid device type %d\n", type);
|
|
break;
|
|
break;
|
|
@@ -1976,6 +2431,12 @@ int pld_idle_restart(struct device *dev,
|
|
case PLD_BUS_TYPE_PCIE:
|
|
case PLD_BUS_TYPE_PCIE:
|
|
errno = pld_pcie_idle_restart(dev);
|
|
errno = pld_pcie_idle_restart(dev);
|
|
break;
|
|
break;
|
|
|
|
+ case PLD_BUS_TYPE_PCIE_FW_SIM:
|
|
|
|
+ errno = pld_pcie_fw_sim_idle_restart(dev);
|
|
|
|
+ break;
|
|
|
|
+ case PLD_BUS_TYPE_SNOC_FW_SIM:
|
|
|
|
+ errno = pld_snoc_fw_sim_idle_restart(dev);
|
|
|
|
+ break;
|
|
default:
|
|
default:
|
|
pr_err("Invalid device type %d\n", type);
|
|
pr_err("Invalid device type %d\n", type);
|
|
break;
|
|
break;
|