arm64: ZynqMP SoC changes for v6.3
Firmware changes - fix memory leak in error path inside notification code - trivial comment cleanup - add workaround for SD tap delay programming with old PMUFW -----BEGIN PGP SIGNATURE----- iF0EABECAB0WIQQbPNTMvXmYlBPRwx7KSWXLKUoMIQUCY9j19wAKCRDKSWXLKUoM IaaHAKCLlEqUJWJ1Iv02jm9HWeS2jxm+1ACfTqxKGU6fiw8KVT1nEp7m6BqviUk= =Vlse -----END PGP SIGNATURE----- gpgsig -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmPaj9EACgkQmmx57+YA GNmamxAAvx4y4w3VJ0q1/d2ZziIlEaCxv3pTgdolGVWx4da9hMGSQA+aXnzUjm48 wTBTglCcS9ebXRmrvHugA5Ns25zTOV3Vc5z+am2unQaQwufHRixZ9vBnesxQmyq9 5e+ME9pJAa4VJkky9Dd0RQkExtCrIuBuyuipdZou2Me5HWdZ3RyztxBTEUyXUKwV VL9/nO9ElUm/MZ33bmu+YzhyH9mLNmtGh+M4fcpi40+wvFLtatg0iGkQDTL83BnR +qDDlaRwTO1zD9g+kfivDDJxteayZtUlpKlLWBeVHzrWlZaTdNavl3Kckk5XYfpB 0V7ofRJrz/lVZJh/QKab2UAEJjpYEpyYEIME6YpkttZkKr1psjkisQwlRBVjKC2S I419CmJeZRYWQjGEjCR8DVmcUCFsyqOiZtGGLCyIZcomqj6zqfcNwtI8TGX06rvT vTs836DSjtAvOIMBt9JtoGf5oqa2aXjLqa4Kv20Th291sG3sowz4zTsPbW6SpcWE Zvv+ZkCqxpF4hbnGfPB1yK06TO3Y62Xi7iZfdZ09VqUDGylvLinCj3Dd253N4D23 I05fF/LRuhXfk43aYG+B/vDMkycVmEhe5gMUfshY2FhAf8DxNiqrJICuXzvNcfZV id75BtzgjatBMSpeA8XnmELkcjvxytL6UnStKMIhklFjn2MKVE4= =yzJm -----END PGP SIGNATURE----- Merge tag 'zynqmp-soc-for-v6.3' of https://github.com/Xilinx/linux-xlnx into soc/drivers arm64: ZynqMP SoC changes for v6.3 Firmware changes - fix memory leak in error path inside notification code - trivial comment cleanup - add workaround for SD tap delay programming with old PMUFW * tag 'zynqmp-soc-for-v6.3' of https://github.com/Xilinx/linux-xlnx: firmware: xilinx: Clear IOCTL_SET_SD_TAPDELAY using PM_MMIO_WRITE firmware: xilinx: Remove kernel-doc marking in the code driver: soc: xilinx: fix memory leak in xlnx_add_cb_for_notify_event() Link: https://lore.kernel.org/r/42be5129-3ca2-ddbc-ac3b-6448245b61c2@monstr.eu Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
commit
a64c36b8b7
|
@ -738,9 +738,32 @@ EXPORT_SYMBOL_GPL(zynqmp_pm_get_pll_frac_data);
|
|||
*/
|
||||
int zynqmp_pm_set_sd_tapdelay(u32 node_id, u32 type, u32 value)
|
||||
{
|
||||
return zynqmp_pm_invoke_fn(PM_IOCTL, node_id, IOCTL_SET_SD_TAPDELAY,
|
||||
u32 reg = (type == PM_TAPDELAY_INPUT) ? SD_ITAPDLY : SD_OTAPDLYSEL;
|
||||
u32 mask = (node_id == NODE_SD_0) ? GENMASK(15, 0) : GENMASK(31, 16);
|
||||
|
||||
if (value) {
|
||||
return zynqmp_pm_invoke_fn(PM_IOCTL, node_id,
|
||||
IOCTL_SET_SD_TAPDELAY,
|
||||
type, value, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Work around completely misdesigned firmware API on Xilinx ZynqMP.
|
||||
* The IOCTL_SET_SD_TAPDELAY firmware call allows the caller to only
|
||||
* ever set IOU_SLCR SD_ITAPDLY Register SD0_ITAPDLYENA/SD1_ITAPDLYENA
|
||||
* bits, but there is no matching call to clear those bits. If those
|
||||
* bits are not cleared, SDMMC tuning may fail.
|
||||
*
|
||||
* Luckily, there are PM_MMIO_READ/PM_MMIO_WRITE calls which seem to
|
||||
* allow complete unrestricted access to all address space, including
|
||||
* IOU_SLCR SD_ITAPDLY Register and all the other registers, access
|
||||
* to which was supposed to be protected by the current firmware API.
|
||||
*
|
||||
* Use PM_MMIO_READ/PM_MMIO_WRITE to re-implement the missing counter
|
||||
* part of IOCTL_SET_SD_TAPDELAY which clears SDx_ITAPDLYENA bits.
|
||||
*/
|
||||
return zynqmp_pm_invoke_fn(PM_MMIO_WRITE, reg, mask, 0, 0, NULL);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(zynqmp_pm_set_sd_tapdelay);
|
||||
|
||||
/**
|
||||
|
|
|
@ -116,8 +116,10 @@ static int xlnx_add_cb_for_notify_event(const u32 node_id, const u32 event, cons
|
|||
INIT_LIST_HEAD(&eve_data->cb_list_head);
|
||||
|
||||
cb_data = kmalloc(sizeof(*cb_data), GFP_KERNEL);
|
||||
if (!cb_data)
|
||||
if (!cb_data) {
|
||||
kfree(eve_data);
|
||||
return -ENOMEM;
|
||||
}
|
||||
cb_data->eve_cb = cb_fun;
|
||||
cb_data->agent_data = data;
|
||||
|
||||
|
|
|
@ -227,7 +227,7 @@ static struct generic_pm_domain *zynqmp_gpd_xlate
|
|||
goto done;
|
||||
}
|
||||
|
||||
/**
|
||||
/*
|
||||
* Add index in empty node_id of power domain list as no existing
|
||||
* power domain found for current index.
|
||||
*/
|
||||
|
|
|
@ -79,6 +79,10 @@
|
|||
#define EVENT_ERROR_PSM_ERR1 (0x28108000U)
|
||||
#define EVENT_ERROR_PSM_ERR2 (0x2810C000U)
|
||||
|
||||
/* ZynqMP SD tap delay tuning */
|
||||
#define SD_ITAPDLY 0xFF180314
|
||||
#define SD_OTAPDLYSEL 0xFF180318
|
||||
|
||||
enum pm_api_cb_id {
|
||||
PM_INIT_SUSPEND_CB = 30,
|
||||
PM_ACKNOWLEDGE_CB = 31,
|
||||
|
|
Loading…
Reference in New Issue