mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-22 17:25:35 +03:00
drm/tegra: Update to Linux v6.13
Update the Tegra DRM driver to align with Linux v6.13. A function pointer 'fbdev_probe' was added to the drm_driver structure in Linux v6.13 and so use conftest to detect this and make the necessary changes to the Tegra DRM driver. JIRA LINQPJ14-47 Change-Id: I0120fe9f13bc39446ce4e0a8827eb5d8b42a082c Signed-off-by: Jon Hunter <jonathanh@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3333836 Reviewed-by: Mikko Perttunen <mperttunen@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com> GVS: buildbot_gerritrpt <buildbot_gerritrpt@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
@@ -23,6 +23,9 @@
|
|||||||
#endif
|
#endif
|
||||||
#include <drm/drm_atomic.h>
|
#include <drm/drm_atomic.h>
|
||||||
#include <drm/drm_atomic_helper.h>
|
#include <drm/drm_atomic_helper.h>
|
||||||
|
#if defined(NV_DRM_DRM_CLIENT_SETUP_H_PRESENT) /* Linux v6.13 */
|
||||||
|
#include <drm/drm_client_setup.h>
|
||||||
|
#endif
|
||||||
#include <drm/drm_debugfs.h>
|
#include <drm/drm_debugfs.h>
|
||||||
#include <drm/drm_drv.h>
|
#include <drm/drm_drv.h>
|
||||||
#include <drm/drm_fourcc.h>
|
#include <drm/drm_fourcc.h>
|
||||||
@@ -743,6 +746,10 @@ static const struct drm_driver tegra_drm_driver = {
|
|||||||
|
|
||||||
.dumb_create = tegra_bo_dumb_create,
|
.dumb_create = tegra_bo_dumb_create,
|
||||||
|
|
||||||
|
#if defined(NV_DRM_DRIVER_HAS_FBDEV_PROBE) /* Linux v6.13 */
|
||||||
|
TEGRA_FBDEV_DRIVER_OPS,
|
||||||
|
#endif
|
||||||
|
|
||||||
.ioctls = tegra_drm_ioctls,
|
.ioctls = tegra_drm_ioctls,
|
||||||
.num_ioctls = ARRAY_SIZE(tegra_drm_ioctls),
|
.num_ioctls = ARRAY_SIZE(tegra_drm_ioctls),
|
||||||
.fops = &tegra_drm_fops,
|
.fops = &tegra_drm_fops,
|
||||||
@@ -1199,7 +1206,11 @@ static int host1x_drm_probe(struct host1x_device *dev)
|
|||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto hub;
|
goto hub;
|
||||||
|
|
||||||
|
#if defined(NV_DRM_DRIVER_HAS_FBDEV_PROBE) /* Linux v6.13 */
|
||||||
|
drm_client_setup(drm, NULL);
|
||||||
|
#else
|
||||||
tegra_fbdev_setup(drm);
|
tegra_fbdev_setup(drm);
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,9 @@
|
|||||||
/* XXX move to include/uapi/drm/drm_fourcc.h? */
|
/* XXX move to include/uapi/drm/drm_fourcc.h? */
|
||||||
#define DRM_FORMAT_MOD_NVIDIA_SECTOR_LAYOUT BIT_ULL(22)
|
#define DRM_FORMAT_MOD_NVIDIA_SECTOR_LAYOUT BIT_ULL(22)
|
||||||
|
|
||||||
|
struct drm_fb_helper;
|
||||||
|
struct drm_fb_helper_surface_size;
|
||||||
|
|
||||||
struct edid;
|
struct edid;
|
||||||
struct reset_control;
|
struct reset_control;
|
||||||
|
|
||||||
@@ -220,12 +223,24 @@ struct drm_framebuffer *tegra_fb_create(struct drm_device *drm,
|
|||||||
struct drm_file *file,
|
struct drm_file *file,
|
||||||
const struct drm_mode_fb_cmd2 *cmd);
|
const struct drm_mode_fb_cmd2 *cmd);
|
||||||
|
|
||||||
|
#if defined(NV_DRM_DRIVER_HAS_FBDEV_PROBE) /* Linux v6.13 */
|
||||||
|
#ifdef CONFIG_DRM_FBDEV_EMULATION
|
||||||
|
int tegra_fbdev_driver_fbdev_probe(struct drm_fb_helper *helper,
|
||||||
|
struct drm_fb_helper_surface_size *sizes);
|
||||||
|
#define TEGRA_FBDEV_DRIVER_OPS \
|
||||||
|
.fbdev_probe = tegra_fbdev_driver_fbdev_probe
|
||||||
|
#else
|
||||||
|
#define TEGRA_FBDEV_DRIVER_OPS \
|
||||||
|
.fbdev_probe = NULL
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
#ifdef CONFIG_DRM_FBDEV_EMULATION
|
#ifdef CONFIG_DRM_FBDEV_EMULATION
|
||||||
void tegra_fbdev_setup(struct drm_device *drm);
|
void tegra_fbdev_setup(struct drm_device *drm);
|
||||||
#else
|
#else
|
||||||
static inline void tegra_fbdev_setup(struct drm_device *drm)
|
static inline void tegra_fbdev_setup(struct drm_device *drm)
|
||||||
{ }
|
{ }
|
||||||
#endif
|
#endif
|
||||||
|
#endif /* NV_DRM_DRIVER_HAS_FBDEV_PROBE */
|
||||||
|
|
||||||
#ifdef CONFIG_DRM_TEGRA_HAVE_DISPLAY
|
#ifdef CONFIG_DRM_TEGRA_HAVE_DISPLAY
|
||||||
extern struct platform_driver tegra_display_hub_driver;
|
extern struct platform_driver tegra_display_hub_driver;
|
||||||
|
|||||||
@@ -85,8 +85,16 @@ static const struct fb_ops tegra_fb_ops = {
|
|||||||
.fb_destroy = tegra_fbdev_fb_destroy,
|
.fb_destroy = tegra_fbdev_fb_destroy,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if defined(NV_DRM_DRIVER_HAS_FBDEV_PROBE) /* Linux v6.13 */
|
||||||
|
static const struct drm_fb_helper_funcs tegra_fbdev_helper_funcs = {
|
||||||
|
};
|
||||||
|
|
||||||
|
int tegra_fbdev_driver_fbdev_probe(struct drm_fb_helper *helper,
|
||||||
|
struct drm_fb_helper_surface_size *sizes)
|
||||||
|
#else
|
||||||
static int tegra_fbdev_probe(struct drm_fb_helper *helper,
|
static int tegra_fbdev_probe(struct drm_fb_helper *helper,
|
||||||
struct drm_fb_helper_surface_size *sizes)
|
struct drm_fb_helper_surface_size *sizes)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
struct tegra_drm *tegra = helper->dev->dev_private;
|
struct tegra_drm *tegra = helper->dev->dev_private;
|
||||||
struct drm_device *drm = helper->dev;
|
struct drm_device *drm = helper->dev;
|
||||||
@@ -135,6 +143,9 @@ static int tegra_fbdev_probe(struct drm_fb_helper *helper,
|
|||||||
return PTR_ERR(fb);
|
return PTR_ERR(fb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(NV_DRM_DRIVER_HAS_FBDEV_PROBE) /* Linux v6.13 */
|
||||||
|
helper->funcs = &tegra_fbdev_helper_funcs;
|
||||||
|
#endif
|
||||||
helper->fb = fb;
|
helper->fb = fb;
|
||||||
#if defined(NV_DRM_FB_HELPER_STRUCT_HAS_INFO_ARG) /* Linux v6.2 */
|
#if defined(NV_DRM_FB_HELPER_STRUCT_HAS_INFO_ARG) /* Linux v6.2 */
|
||||||
helper->info = info;
|
helper->info = info;
|
||||||
@@ -175,6 +186,7 @@ destroy:
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !defined(NV_DRM_DRIVER_HAS_FBDEV_PROBE) /* Linux v6.13 */
|
||||||
static const struct drm_fb_helper_funcs tegra_fb_helper_funcs = {
|
static const struct drm_fb_helper_funcs tegra_fb_helper_funcs = {
|
||||||
.fb_probe = tegra_fbdev_probe,
|
.fb_probe = tegra_fbdev_probe,
|
||||||
};
|
};
|
||||||
@@ -288,3 +300,4 @@ err_drm_client_init:
|
|||||||
#endif
|
#endif
|
||||||
kfree(helper);
|
kfree(helper);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -439,7 +439,7 @@ tegra_hdmi_get_audio_config(unsigned int audio_freq, unsigned int pix_clock,
|
|||||||
|
|
||||||
static void tegra_hdmi_setup_audio_fs_tables(struct tegra_hdmi *hdmi)
|
static void tegra_hdmi_setup_audio_fs_tables(struct tegra_hdmi *hdmi)
|
||||||
{
|
{
|
||||||
const unsigned int freqs[] = {
|
static const unsigned int freqs[] = {
|
||||||
32000, 44100, 48000, 88200, 96000, 176400, 192000
|
32000, 44100, 48000, 88200, 96000, 176400, 192000
|
||||||
};
|
};
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|||||||
@@ -124,6 +124,7 @@ NV_CONFTEST_FUNCTION_COMPILE_TESTS += dma_slave_config_struct_has_slave_id
|
|||||||
NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_aperture_remove_framebuffers
|
NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_aperture_remove_framebuffers
|
||||||
NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_debugfs_remove_files_has_root_arg
|
NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_debugfs_remove_files_has_root_arg
|
||||||
NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_display_info_struct_has_source_physical_address
|
NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_display_info_struct_has_source_physical_address
|
||||||
|
NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_driver_has_fbdev_probe
|
||||||
NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_driver_struct_has_date
|
NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_driver_struct_has_date
|
||||||
NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_driver_struct_has_irq_enabled_arg
|
NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_driver_struct_has_irq_enabled_arg
|
||||||
NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_edid_connector_add_modes
|
NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_edid_connector_add_modes
|
||||||
@@ -266,6 +267,7 @@ NV_HEADER_PRESENCE_TESTS = \
|
|||||||
drm/display/drm_scdc_helper.h \
|
drm/display/drm_scdc_helper.h \
|
||||||
drm/dp/drm_dp_aux_bus.h \
|
drm/dp/drm_dp_aux_bus.h \
|
||||||
drm/dp/drm_dp_helper.h \
|
drm/dp/drm_dp_helper.h \
|
||||||
|
drm/drm_client_setup.h \
|
||||||
drm/drm_dp_aux_bus.h \
|
drm/drm_dp_aux_bus.h \
|
||||||
drm/drm_eld.h \
|
drm/drm_eld.h \
|
||||||
generated/autoconf.h \
|
generated/autoconf.h \
|
||||||
|
|||||||
@@ -7162,6 +7162,25 @@ compile_test() {
|
|||||||
compile_check_conftest "$CODE" "NV_DRM_DISPLAY_INFO_STRUCT_HAS_SOURCE_PHYSICAL_ADDRESS" "" "types"
|
compile_check_conftest "$CODE" "NV_DRM_DISPLAY_INFO_STRUCT_HAS_SOURCE_PHYSICAL_ADDRESS" "" "types"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
drm_driver_has_fbdev_probe)
|
||||||
|
#
|
||||||
|
# Determine if the 'drm_driver' structure has an 'fbdev_probe'
|
||||||
|
# function pointer.
|
||||||
|
#
|
||||||
|
# In Linux v6.13, commit 5d08c44e47b9 ("drm/fbdev: Add
|
||||||
|
# memory-agnostic fbdev client") added an 'fbdev_probe' callback
|
||||||
|
# to the drm_driver structure.
|
||||||
|
#
|
||||||
|
CODE="
|
||||||
|
#include <drm/drm_drv.h>
|
||||||
|
|
||||||
|
int conftest_drm_driver_has_fbdev_probe(void) {
|
||||||
|
return offsetof(struct drm_driver, fbdev_probe);
|
||||||
|
}"
|
||||||
|
|
||||||
|
compile_check_conftest "$CODE" "NV_DRM_DRIVER_HAS_FBDEV_PROBE" "" "types"
|
||||||
|
;;
|
||||||
|
|
||||||
drm_driver_struct_has_date)
|
drm_driver_struct_has_date)
|
||||||
#
|
#
|
||||||
# Determine if the 'drm_driver' structure has a 'date' field.
|
# Determine if the 'drm_driver' structure has a 'date' field.
|
||||||
|
|||||||
Reference in New Issue
Block a user