On Fri, Feb 18, 2022 at 01:39:45PM +0200, Mikko Perttunen wrote: > The context bus is a "dummy" bus that contains struct devices that > correspond to IOMMU contexts assigned through Host1x to processes. > > Even when host1x itself is built as a module, the bus is registered > in built-in code so that the built-in ARM SMMU driver is able to > reference it. > > Signed-off-by: Mikko Perttunen <mperttunen@xxxxxxxxxx> > --- > drivers/gpu/Makefile | 3 +-- > drivers/gpu/host1x/Kconfig | 5 +++++ > drivers/gpu/host1x/Makefile | 1 + > drivers/gpu/host1x/context_bus.c | 31 ++++++++++++++++++++++++++++++ > include/linux/host1x_context_bus.h | 15 +++++++++++++++ > 5 files changed, 53 insertions(+), 2 deletions(-) > create mode 100644 drivers/gpu/host1x/context_bus.c > create mode 100644 include/linux/host1x_context_bus.h > > diff --git a/drivers/gpu/Makefile b/drivers/gpu/Makefile > index 835c88318cec..8997f0096545 100644 > --- a/drivers/gpu/Makefile > +++ b/drivers/gpu/Makefile > @@ -2,7 +2,6 @@ > # drm/tegra depends on host1x, so if both drivers are built-in care must be > # taken to initialize them in the correct order. Link order is the only way > # to ensure this currently. > -obj-$(CONFIG_TEGRA_HOST1X) += host1x/ > -obj-y += drm/ vga/ > +obj-y += host1x/ drm/ vga/ > obj-$(CONFIG_IMX_IPUV3_CORE) += ipu-v3/ > obj-$(CONFIG_TRACE_GPU_MEM) += trace/ > diff --git a/drivers/gpu/host1x/Kconfig b/drivers/gpu/host1x/Kconfig > index 6815b4db17c1..1861a8180d3f 100644 > --- a/drivers/gpu/host1x/Kconfig > +++ b/drivers/gpu/host1x/Kconfig > @@ -1,8 +1,13 @@ > # SPDX-License-Identifier: GPL-2.0-only > + > +config TEGRA_HOST1X_CONTEXT_BUS > + bool > + > config TEGRA_HOST1X > tristate "NVIDIA Tegra host1x driver" > depends on ARCH_TEGRA || (ARM && COMPILE_TEST) > select DMA_SHARED_BUFFER > + select TEGRA_HOST1X_CONTEXT_BUS > select IOMMU_IOVA > help > Driver for the NVIDIA Tegra host1x hardware. > diff --git a/drivers/gpu/host1x/Makefile b/drivers/gpu/host1x/Makefile > index d2b6f7de0498..c891a3e33844 100644 > --- a/drivers/gpu/host1x/Makefile > +++ b/drivers/gpu/host1x/Makefile > @@ -18,3 +18,4 @@ host1x-y = \ > hw/host1x07.o > > obj-$(CONFIG_TEGRA_HOST1X) += host1x.o > +obj-$(CONFIG_TEGRA_HOST1X_CONTEXT_BUS) += context_bus.o > diff --git a/drivers/gpu/host1x/context_bus.c b/drivers/gpu/host1x/context_bus.c > new file mode 100644 > index 000000000000..2625914f3c7d > --- /dev/null > +++ b/drivers/gpu/host1x/context_bus.c > @@ -0,0 +1,31 @@ > +// SPDX-License-Identifier: GPL-2.0-only > +/* > + * Copyright (c) 2021, NVIDIA Corporation. > + */ > + > +#include <linux/device.h> > +#include <linux/of.h> > + > +struct bus_type host1x_context_device_bus_type = { > + .name = "host1x-context", > +}; > +EXPORT_SYMBOL(host1x_context_device_bus_type); EXPORT_SYMBOL_GPL, please. But the pattern that this copies in arm_smmu_bus_init is really ugly. I think we need to figure out a way todo that without having to export all the low-level bus types.