Commit 97d62760 authored by Jay Buddhabhatti's avatar Jay Buddhabhatti Committed by Greg Kroah-Hartman
Browse files

drivers: soc: xilinx: add check for platform



Some error event IDs for Versal and Versal NET are different.
Both the platforms should access their respective error event
IDs so use sub_family_code to check for platform and check
error IDs for respective platforms. The family code is passed
via platform data to avoid platform detection again.
Platform data is setup when even driver is registered.

Signed-off-by: default avatarJay Buddhabhatti <jay.buddhabhatti@amd.com>
Link: https://lore.kernel.org/r/20231219055025.27570-3-jay.buddhabhatti@amd.com


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 0c4b2255
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1005,7 +1005,7 @@ static int mc_probe(struct platform_device *pdev)
		goto free_edac_mc;
	}

	rc = xlnx_register_event(PM_NOTIFY_CB, EVENT_ERROR_PMC_ERR1,
	rc = xlnx_register_event(PM_NOTIFY_CB, VERSAL_EVENT_ERROR_PMC_ERR1,
				 XPM_EVENT_ERROR_MASK_DDRMC_CR | XPM_EVENT_ERROR_MASK_DDRMC_NCR |
				 XPM_EVENT_ERROR_MASK_NOC_CR | XPM_EVENT_ERROR_MASK_NOC_NCR,
				 false, err_callback, mci);
@@ -1042,7 +1042,7 @@ static int mc_remove(struct platform_device *pdev)
	debugfs_remove_recursive(priv->debugfs);
#endif

	xlnx_unregister_event(PM_NOTIFY_CB, EVENT_ERROR_PMC_ERR1,
	xlnx_unregister_event(PM_NOTIFY_CB, VERSAL_EVENT_ERROR_PMC_ERR1,
			      XPM_EVENT_ERROR_MASK_DDRMC_CR |
			      XPM_EVENT_ERROR_MASK_NOC_CR |
			      XPM_EVENT_ERROR_MASK_NOC_NCR |
+20 −5
Original line number Diff line number Diff line
@@ -77,11 +77,26 @@ struct registered_event_data {

static bool xlnx_is_error_event(const u32 node_id)
{
	if (node_id == EVENT_ERROR_PMC_ERR1 ||
	    node_id == EVENT_ERROR_PMC_ERR2 ||
	    node_id == EVENT_ERROR_PSM_ERR1 ||
	    node_id == EVENT_ERROR_PSM_ERR2)
	u32 pm_family_code, pm_sub_family_code;

	zynqmp_pm_get_family_info(&pm_family_code, &pm_sub_family_code);

	if (pm_sub_family_code == VERSAL_SUB_FAMILY_CODE) {
		if (node_id == VERSAL_EVENT_ERROR_PMC_ERR1 ||
		    node_id == VERSAL_EVENT_ERROR_PMC_ERR2 ||
		    node_id == VERSAL_EVENT_ERROR_PSM_ERR1 ||
		    node_id == VERSAL_EVENT_ERROR_PSM_ERR2)
			return true;
	} else {
		if (node_id == VERSAL_NET_EVENT_ERROR_PMC_ERR1 ||
		    node_id == VERSAL_NET_EVENT_ERROR_PMC_ERR2 ||
		    node_id == VERSAL_NET_EVENT_ERROR_PMC_ERR3 ||
		    node_id == VERSAL_NET_EVENT_ERROR_PSM_ERR1 ||
		    node_id == VERSAL_NET_EVENT_ERROR_PSM_ERR2 ||
		    node_id == VERSAL_NET_EVENT_ERROR_PSM_ERR3 ||
		    node_id == VERSAL_NET_EVENT_ERROR_PSM_ERR4)
			return true;
	}

	return false;
}
+12 −4
Original line number Diff line number Diff line
@@ -95,10 +95,18 @@
/*
 * Node IDs for the Error Events.
 */
#define EVENT_ERROR_PMC_ERR1	(0x28100000U)
#define EVENT_ERROR_PMC_ERR2	(0x28104000U)
#define EVENT_ERROR_PSM_ERR1	(0x28108000U)
#define EVENT_ERROR_PSM_ERR2	(0x2810C000U)
#define VERSAL_EVENT_ERROR_PMC_ERR1	(0x28100000U)
#define VERSAL_EVENT_ERROR_PMC_ERR2	(0x28104000U)
#define VERSAL_EVENT_ERROR_PSM_ERR1	(0x28108000U)
#define VERSAL_EVENT_ERROR_PSM_ERR2	(0x2810C000U)

#define VERSAL_NET_EVENT_ERROR_PMC_ERR1	(0x28100000U)
#define VERSAL_NET_EVENT_ERROR_PMC_ERR2	(0x28104000U)
#define VERSAL_NET_EVENT_ERROR_PMC_ERR3	(0x28108000U)
#define VERSAL_NET_EVENT_ERROR_PSM_ERR1	(0x2810C000U)
#define VERSAL_NET_EVENT_ERROR_PSM_ERR2	(0x28110000U)
#define VERSAL_NET_EVENT_ERROR_PSM_ERR3	(0x28114000U)
#define VERSAL_NET_EVENT_ERROR_PSM_ERR4	(0x28118000U)

/* ZynqMP SD tap delay tuning */
#define SD_ITAPDLY	0xFF180314