osd: add osd SM1 feature [1/1]
authorPengcheng Chen <pengcheng.chen@amlogic.com>
Wed, 20 Mar 2019 02:36:09 +0000 (10:36 +0800)
committerJianxiong Pan <jianxiong.pan@amlogic.com>
Fri, 29 Mar 2019 12:07:24 +0000 (20:07 +0800)
PD#SWPL-6106

Problem:
bring up osd for SM1

Solution:
add osd SM1 feature

Verify:
Verified on SM1-AC200

Change-Id: I5cba13f7539e48f6cba1ca0fb3abcaad2ba8494d
Signed-off-by: Pengcheng Chen <pengcheng.chen@amlogic.com>
arch/arm/boot/dts/amlogic/mesonsm1.dtsi
arch/arm64/boot/dts/amlogic/mesonsm1.dtsi
drivers/amlogic/media/osd/osd.h
drivers/amlogic/media/osd/osd_fb.c
drivers/amlogic/media/osd/osd_hw.c

index 013def462218808e29ff45af6e28c77619f8ae72..73acd83b985d2cabcc074c9de2722831dd9ced1f 100644 (file)
                interrupt-names = "rdma";
        };
 
-       meson_fb: meson-fb {
-               compatible = "amlogic, meson-g12a";
+       meson_fb: fb {
+               compatible = "amlogic, meson-sm1";
                memory-region = <&logo_reserved>;
                dev_name = "meson-fb";
                status = "disable";
index 7fc4fffd53ed336f2e1d71a8a6ef1b662db3e9a2..103fc2ff5f5628c4abe15333730cdf146cf39b24 100644 (file)
                interrupt-names = "rdma";
        };
 
-       meson_fb: meson-fb {
-               compatible = "amlogic, meson-g12a";
+       meson_fb: fb {
+               compatible = "amlogic, meson-sm1";
                memory-region = <&logo_reserved>;
                dev_name = "meson-fb";
                status = "disable";
index 14f8d8ec0363462db26bf2109f197f18c88a9e74..bead47117592e97c485c5eb6ab675a49b102fd08 100644 (file)
@@ -277,6 +277,7 @@ enum cpuid_type_e {
        __MESON_CPU_MAJOR_ID_G12A,
        __MESON_CPU_MAJOR_ID_G12B,
        __MESON_CPU_MAJOR_ID_TL1,
+       __MESON_CPU_MAJOR_ID_SM1,
        __MESON_CPU_MAJOR_ID_UNKNOWN,
 };
 
index 1ec081f9a0b869e6bcd000de74b3e05aa8957362..9d53c74522ed2361a865e0cb04ce4f2e468fbd3c 100644 (file)
@@ -3957,6 +3957,21 @@ static struct osd_device_data_s osd_tl1 = {
        .has_viu2 = 1,
 };
 
+static struct osd_device_data_s osd_sm1 = {
+       .cpu_id = __MESON_CPU_MAJOR_ID_SM1,
+       .osd_ver = OSD_HIGH_ONE,
+       .afbc_type = MALI_AFBC,
+       .osd_count = 4,
+       .has_deband = 1,
+       .has_lut = 1,
+       .has_rdma = 1,
+       .has_dolby_vision = 1,
+       .osd_fifo_len = 64, /* fifo len 64*8 = 512 */
+       .vpp_fifo_len = 0xfff,/* 2048 */
+       .dummy_data = 0x00808000,
+       .has_viu2 = 1,
+};
+
 static const struct of_device_id meson_fb_dt_match[] = {
        {
                .compatible = "amlogic, meson-gxbb",
@@ -4003,6 +4018,10 @@ static const struct of_device_id meson_fb_dt_match[] = {
                .compatible = "amlogic, meson-tl1",
                .data = &osd_tl1,
        },
+       {
+               .compatible = "amlogic, meson-sm1",
+               .data = &osd_sm1,
+       },
        {},
 };
 
index c8b85a3ca9cdb3602240662f9a204e91e032841d..4c055a29c68e3aa04d533a5bbac8963510d2de16 100644 (file)
@@ -1852,6 +1852,7 @@ static u32 osd_get_hw_reset_flag(void)
        case __MESON_CPU_MAJOR_ID_G12A:
        case __MESON_CPU_MAJOR_ID_G12B:
        case __MESON_CPU_MAJOR_ID_TL1:
+       case __MESON_CPU_MAJOR_ID_SM1:
                {
                int i, afbc_enable = 0;
 
@@ -5229,7 +5230,8 @@ static void osd_update_disp_osd_rotate(u32 index)
        const struct vinfo_s *vinfo;
        int out_y_crop_start, out_y_crop_end;
 
-       if (osd_hw.osd_meson_dev.cpu_id < __MESON_CPU_MAJOR_ID_G12B)
+       if (osd_hw.osd_meson_dev.cpu_id < __MESON_CPU_MAJOR_ID_G12B ||
+               osd_hw.osd_meson_dev.cpu_id == __MESON_CPU_MAJOR_ID_SM1)
                return;
        src_fmt = get_viu2_src_format();
        src_data.x = 0;
@@ -8575,7 +8577,8 @@ void osd_init_hw(u32 logo_loaded, u32 osd_probe,
                        osd_hw.hw_rdma_en = 1;
        } else if (osd_hw.osd_meson_dev.osd_ver == OSD_HIGH_ONE) {
                osd_hw.hw_cursor_en = 0;
-               osd_hw.hw_rdma_en = 1;
+               if (osd_hw.osd_meson_dev.has_rdma)
+                       osd_hw.hw_rdma_en = 1;
                /* g12a and g12b need delay */
                supsend_delay = 50;
        }