mirror of
https://github.com/u-boot/u-boot.git
synced 2024-11-27 06:04:40 +08:00
iommu: qcom-smmu: handle running in el2
We only need to configure the SMMU when running in EL1. In EL2 the hypervisor isn't running so peripherals can just do DMA as they wish. Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org> Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
This commit is contained in:
parent
53c0f1beac
commit
e55fc3ab20
@ -91,6 +91,8 @@ struct qcom_smmu_priv {
|
||||
phys_addr_t base;
|
||||
struct list_head devices;
|
||||
struct udevice *dev;
|
||||
/* SMMU is not needed when running in EL2 */
|
||||
bool disable;
|
||||
|
||||
/* Read-once config */
|
||||
int num_cb;
|
||||
@ -277,6 +279,9 @@ static int qcom_smmu_connect(struct udevice *dev)
|
||||
if (WARN_ON(!priv))
|
||||
return -EINVAL;
|
||||
|
||||
if (priv->disable)
|
||||
return 0;
|
||||
|
||||
mdev = alloc_dev(dev);
|
||||
if (IS_ERR(mdev) && PTR_ERR(mdev) != -EEXIST) {
|
||||
printf("%s: %s Couldn't create mmu context\n", __func__,
|
||||
@ -348,6 +353,8 @@ static int qcom_smmu_probe(struct udevice *dev)
|
||||
priv->base = dev_read_addr(dev);
|
||||
INIT_LIST_HEAD(&priv->devices);
|
||||
|
||||
priv->disable = current_el() > 1;
|
||||
|
||||
/* Read SMMU config */
|
||||
val = gr0_readl(priv, ARM_SMMU_GR0_ID0);
|
||||
priv->num_smr = FIELD_GET(ARM_SMMU_ID0_NUMSMRG, val);
|
||||
|
Loading…
Reference in New Issue
Block a user