Re: [PATCH v4 0/3] soc: qcom: ubwc: Fix link error
From: Nathan Chancellor
Date: Thu Aug 13 2026 - 19:24:05 EST
Hi Daniel,
On Wed, Aug 12, 2026 at 06:19:31PM +0300, Daniel Baluta wrote:
> Fix link error caused by the fact that drivers/soc/qcom/ubwc_config.c
> enabled via QCOM_UBWC_CONFIG uses unconditionally symbols from
> drivers/soc/qcom/smem.c enabled via CONFIG_QCOM_SMEM.
>
> Changes since v3:
> - fix issues pointed by sashiko https://sashiko.dev/#/patchset/20260812130421.670527-1-daniel.baluta%40nxp.com
> - add new patches 2/3 in order to fix unmet dependcy for VIDEO_QCOM_IRIS
> - Use IS_REACHABLE instead of IS_ENABLED to avoid the situation we use
> some symbols in builtin kernel but their definitions sits in a
> module.
>
> Remark for Dmitry, at this point I think v1 would have been a better
> option.
> Link to v1:
> - https://lore.kernel.org/imx/1521da8e-18df-4d7b-a255-5ca133bd5ccc@xxxxxxxxxxx/T/#t
>
>
>
> Daniel Baluta (3):
> soc: qcom: ubwc: Fix link error when QCOM_SMEM=n
> media: iris: Fix unmet dependency when QCOM_SMEM=n
I think this patch should come first since you introduce the QCOM_SMEM
dependency that requires this change in the first patch, which could
mess with bisects. I would personally add the 'if' condition to the
'select QCOM_UBWC_CONFIG' statements in one patch then add the QCOM_SMEM
dependency to QCOM_UBWC_CONFIG in a separate patch.
> soc: qcom: ubwc: Use IS_REACHABLE() instead of IS_ENABLED()
Even with this series applied, I see
$ cat allno.config
CONFIG_ARCH_MULTI_V7=y
CONFIG_ARCH_QCOM=y
CONFIG_DRM=y
CONFIG_DRM_MSM=y
CONFIG_DRM_MSM_DPU=y
CONFIG_IOMMU_SUPPORT=y
CONFIG_MAILBOX=y
CONFIG_MMU=y
CONFIG_PM=y
CONFIG_QCOM_AOSS_QMP=y
CONFIG_QCOM_LLCC=y
CONFIG_QCOM_OCMEM=y
$ make -skj"$(nproc)" ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- KCONFIG_ALLCONFIG=1 allnoconfig drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp_v13.o
In file included from drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp_v13.c:7:
include/linux/soc/qcom/ubwc.h: In function 'qcom_ubwc_config_get_data':
include/linux/soc/qcom/ubwc.h:45:16: error: implicit declaration of function 'ERR_PTR' [-Wimplicit-function-declaration]
45 | return ERR_PTR(-EOPNOTSUPP);
| ^~~~~~~
include/linux/soc/qcom/ubwc.h:45:25: error: 'EOPNOTSUPP' undeclared (first use in this function)
45 | return ERR_PTR(-EOPNOTSUPP);
| ^~~~~~~~~~
include/linux/soc/qcom/ubwc.h:45:25: note: each undeclared identifier is reported only once for each function it appears in
In file included from include/linux/cleanup.h:6,
from include/linux/irqflags.h:17,
from arch/arm/include/asm/bitops.h:28,
from include/linux/bitops.h:67,
from include/linux/kernel.h:23,
from drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h:10,
from drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.h:8,
from drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp_v13.c:9:
include/linux/err.h: At top level:
include/linux/err.h:39:44: error: conflicting types for 'ERR_PTR'; have 'void *(long int)'
39 | static __always_inline void * __must_check ERR_PTR(long error)
| ^~~~~~~
include/linux/soc/qcom/ubwc.h:45:16: note: previous implicit declaration of 'ERR_PTR' with type 'int()'
45 | return ERR_PTR(-EOPNOTSUPP);
| ^~~~~~~
Adding '#include <linux/err.h>' to include/linux/soc/qcom/ubwc.h appears
to resolve that for me.
--
Cheers,
Nathan