[PATCH RESEND 5/7] drm/sun4i: Rely on dma-parent for our RAM offset
kbuild test robot
lkp at intel.com
Sat Jul 21 00:03:13 UTC 2018
Hi Maxime,
I love your patch! Yet something to improve:
[auto build test ERROR on ]
url: https://github.com/0day-ci/linux/commits/Maxime-Ripard/sunxi-Add-DT-representation-for-the-MBUS-controller/20180721-052652
base:
config: arm-sunxi_defconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
GCC_VERSION=7.2.0 make.cross ARCH=arm
All errors (new ones prefixed by >>):
drivers/gpu/drm/sun4i/sun4i_backend.c: In function 'sun4i_backend_bind':
>> drivers/gpu/drm/sun4i/sun4i_backend.c:776:9: error: too few arguments to function 'of_dma_configure'
ret = of_dma_configure(drm->dev, dev->of_node);
^~~~~~~~~~~~~~~~
In file included from drivers/gpu/drm/sun4i/sun4i_backend.c:24:0:
include/linux/of_device.h:58:5: note: declared here
int of_dma_configure(struct device *dev,
^~~~~~~~~~~~~~~~
vim +/of_dma_configure +776 drivers/gpu/drm/sun4i/sun4i_backend.c
749
750 static int sun4i_backend_bind(struct device *dev, struct device *master,
751 void *data)
752 {
753 struct platform_device *pdev = to_platform_device(dev);
754 struct drm_device *drm = data;
755 struct sun4i_drv *drv = drm->dev_private;
756 struct sun4i_backend *backend;
757 const struct sun4i_backend_quirks *quirks;
758 struct resource *res;
759 void __iomem *regs;
760 int i, ret;
761
762 backend = devm_kzalloc(dev, sizeof(*backend), GFP_KERNEL);
763 if (!backend)
764 return -ENOMEM;
765 dev_set_drvdata(dev, backend);
766 spin_lock_init(&backend->frontend_lock);
767
768 if (of_find_property(dev->of_node, "dma-parent", NULL)) {
769 /*
770 * This assume we have the same DMA constraints for all our the
771 * devices in our pipeline (all the backends, but also the
772 * frontends). This sounds bad, but it has always been the case
773 * for us, and DRM doesn't do per-device allocation either, so
774 * we would need to fix DRM first...
775 */
> 776 ret = of_dma_configure(drm->dev, dev->of_node);
777 if (ret)
778 return ret;
779 } else {
780 /*
781 * If we don't have the dma-parent property, most likely
782 * because of an old DT, we need to set the DMA offset by hand
783 * on our device since the RAM mapping is at 0 for the DMA bus,
784 * unlike the CPU.
785 */
786 drm->dev->dma_pfn_offset = PHYS_PFN_OFFSET;
787 }
788
789 backend->engine.node = dev->of_node;
790 backend->engine.ops = &sun4i_backend_engine_ops;
791 backend->engine.id = sun4i_backend_of_get_id(dev->of_node);
792 if (backend->engine.id < 0)
793 return backend->engine.id;
794
795 backend->frontend = sun4i_backend_find_frontend(drv, dev->of_node);
796 if (IS_ERR(backend->frontend))
797 dev_warn(dev, "Couldn't find matching frontend, frontend features disabled\n");
798
799 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
800 regs = devm_ioremap_resource(dev, res);
801 if (IS_ERR(regs))
802 return PTR_ERR(regs);
803
804 backend->reset = devm_reset_control_get(dev, NULL);
805 if (IS_ERR(backend->reset)) {
806 dev_err(dev, "Couldn't get our reset line\n");
807 return PTR_ERR(backend->reset);
808 }
809
810 ret = reset_control_deassert(backend->reset);
811 if (ret) {
812 dev_err(dev, "Couldn't deassert our reset line\n");
813 return ret;
814 }
815
816 backend->bus_clk = devm_clk_get(dev, "ahb");
817 if (IS_ERR(backend->bus_clk)) {
818 dev_err(dev, "Couldn't get the backend bus clock\n");
819 ret = PTR_ERR(backend->bus_clk);
820 goto err_assert_reset;
821 }
822 clk_prepare_enable(backend->bus_clk);
823
824 backend->mod_clk = devm_clk_get(dev, "mod");
825 if (IS_ERR(backend->mod_clk)) {
826 dev_err(dev, "Couldn't get the backend module clock\n");
827 ret = PTR_ERR(backend->mod_clk);
828 goto err_disable_bus_clk;
829 }
830 clk_prepare_enable(backend->mod_clk);
831
832 backend->ram_clk = devm_clk_get(dev, "ram");
833 if (IS_ERR(backend->ram_clk)) {
834 dev_err(dev, "Couldn't get the backend RAM clock\n");
835 ret = PTR_ERR(backend->ram_clk);
836 goto err_disable_mod_clk;
837 }
838 clk_prepare_enable(backend->ram_clk);
839
840 if (of_device_is_compatible(dev->of_node,
841 "allwinner,sun8i-a33-display-backend")) {
842 ret = sun4i_backend_init_sat(dev);
843 if (ret) {
844 dev_err(dev, "Couldn't init SAT resources\n");
845 goto err_disable_ram_clk;
846 }
847 }
848
849 backend->engine.regs = devm_regmap_init_mmio(dev, regs,
850 &sun4i_backend_regmap_config);
851 if (IS_ERR(backend->engine.regs)) {
852 dev_err(dev, "Couldn't create the backend regmap\n");
853 return PTR_ERR(backend->engine.regs);
854 }
855
856 list_add_tail(&backend->engine.list, &drv->engine_list);
857
858 /*
859 * Many of the backend's layer configuration registers have
860 * undefined default values. This poses a risk as we use
861 * regmap_update_bits in some places, and don't overwrite
862 * the whole register.
863 *
864 * Clear the registers here to have something predictable.
865 */
866 for (i = 0x800; i < 0x1000; i += 4)
867 regmap_write(backend->engine.regs, i, 0);
868
869 /* Disable registers autoloading */
870 regmap_write(backend->engine.regs, SUN4I_BACKEND_REGBUFFCTL_REG,
871 SUN4I_BACKEND_REGBUFFCTL_AUTOLOAD_DIS);
872
873 /* Enable the backend */
874 regmap_write(backend->engine.regs, SUN4I_BACKEND_MODCTL_REG,
875 SUN4I_BACKEND_MODCTL_DEBE_EN |
876 SUN4I_BACKEND_MODCTL_START_CTL);
877
878 /* Set output selection if needed */
879 quirks = of_device_get_match_data(dev);
880 if (quirks->needs_output_muxing) {
881 /*
882 * We assume there is no dynamic muxing of backends
883 * and TCONs, so we select the backend with same ID.
884 *
885 * While dynamic selection might be interesting, since
886 * the CRTC is tied to the TCON, while the layers are
887 * tied to the backends, this means, we will need to
888 * switch between groups of layers. There might not be
889 * a way to represent this constraint in DRM.
890 */
891 regmap_update_bits(backend->engine.regs,
892 SUN4I_BACKEND_MODCTL_REG,
893 SUN4I_BACKEND_MODCTL_OUT_SEL,
894 (backend->engine.id
895 ? SUN4I_BACKEND_MODCTL_OUT_LCD1
896 : SUN4I_BACKEND_MODCTL_OUT_LCD0));
897 }
898
899 return 0;
900
901 err_disable_ram_clk:
902 clk_disable_unprepare(backend->ram_clk);
903 err_disable_mod_clk:
904 clk_disable_unprepare(backend->mod_clk);
905 err_disable_bus_clk:
906 clk_disable_unprepare(backend->bus_clk);
907 err_assert_reset:
908 reset_control_assert(backend->reset);
909 return ret;
910 }
911
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 23133 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20180721/f5123d57/attachment-0001.gz>
More information about the dri-devel
mailing list