Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 57780028 authored by David S. Miller's avatar David S. Miller
Browse files

sparc: Propagate SBUS iommu archdata into real of_device objects.

parent e0039348
Loading
Loading
Loading
Loading
+20 −4
Original line number Diff line number Diff line
@@ -30,6 +30,24 @@ static DEVICE_ATTR(obppath, S_IRUSR | S_IRGRP | S_IROTH, show_sbusobppath_attr,

struct sbus_bus *sbus_root;

static void __init fill_sbus_device_iommu(struct sbus_dev *sdev)
{
	struct of_device *op = of_find_device_by_node(sdev->ofdev.node);
	struct dev_archdata *sd, *bus_sd;
	struct sbus_bus *sbus;

	sbus = sdev->bus;
	bus_sd = &sbus->ofdev.dev.archdata;

	sd = &sdev->ofdev.dev.archdata;
	sd->iommu = bus_sd->iommu;
	sd->stc = bus_sd->stc;

	sd = &op->dev.archdata;
	sd->iommu = bus_sd->iommu;
	sd->stc = bus_sd->stc;
}

static void __init fill_sbus_device(struct device_node *dp, struct sbus_dev *sdev)
{
	struct dev_archdata *sd;
@@ -85,6 +103,8 @@ static void __init fill_sbus_device(struct device_node *dp, struct sbus_dev *sde

	/* WE HAVE BEEN INVADED BY ALIENS! */
	err = sysfs_create_file(&sdev->ofdev.dev.kobj, &dev_attr_obppath.attr);

	fill_sbus_device_iommu(sdev);
}

static void __init sbus_bus_ranges_init(struct device_node *dp, struct sbus_bus *sbus)
@@ -209,10 +229,6 @@ static void __init walk_children(struct device_node *dp, struct sbus_dev *parent

			sdev->bus = sbus;
			sdev->parent = parent;
			sdev->ofdev.dev.archdata.iommu =
				sbus->ofdev.dev.archdata.iommu;
			sdev->ofdev.dev.archdata.stc =
				sbus->ofdev.dev.archdata.stc;

			fill_sbus_device(dp, sdev);