Lines Matching full:dispc
360 static void dispc_write(struct dispc_device *dispc, u16 reg, u32 val) in dispc_write() argument
362 iowrite32(val, dispc->base_common + reg); in dispc_write()
365 static u32 dispc_read(struct dispc_device *dispc, u16 reg) in dispc_read() argument
367 return ioread32(dispc->base_common + reg); in dispc_read()
371 void dispc_vid_write(struct dispc_device *dispc, u32 hw_plane, u16 reg, u32 val) in dispc_vid_write() argument
373 void __iomem *base = dispc->base_vid[hw_plane]; in dispc_vid_write()
378 static u32 dispc_vid_read(struct dispc_device *dispc, u32 hw_plane, u16 reg) in dispc_vid_read() argument
380 void __iomem *base = dispc->base_vid[hw_plane]; in dispc_vid_read()
385 static void dispc_ovr_write(struct dispc_device *dispc, u32 hw_videoport, in dispc_ovr_write() argument
388 void __iomem *base = dispc->base_ovr[hw_videoport]; in dispc_ovr_write()
393 static u32 dispc_ovr_read(struct dispc_device *dispc, u32 hw_videoport, u16 reg) in dispc_ovr_read() argument
395 void __iomem *base = dispc->base_ovr[hw_videoport]; in dispc_ovr_read()
400 static void dispc_vp_write(struct dispc_device *dispc, u32 hw_videoport, in dispc_vp_write() argument
403 void __iomem *base = dispc->base_vp[hw_videoport]; in dispc_vp_write()
408 static u32 dispc_vp_read(struct dispc_device *dispc, u32 hw_videoport, u16 reg) in dispc_vp_read() argument
410 void __iomem *base = dispc->base_vp[hw_videoport]; in dispc_vp_read()
440 static u32 REG_GET(struct dispc_device *dispc, u32 idx, u32 start, u32 end) in REG_GET() argument
442 return FLD_GET(dispc_read(dispc, idx), start, end); in REG_GET()
445 static void REG_FLD_MOD(struct dispc_device *dispc, u32 idx, u32 val, in REG_FLD_MOD() argument
448 dispc_write(dispc, idx, FLD_MOD(dispc_read(dispc, idx), val, in REG_FLD_MOD()
452 static u32 VID_REG_GET(struct dispc_device *dispc, u32 hw_plane, u32 idx, in VID_REG_GET() argument
455 return FLD_GET(dispc_vid_read(dispc, hw_plane, idx), start, end); in VID_REG_GET()
458 static void VID_REG_FLD_MOD(struct dispc_device *dispc, u32 hw_plane, u32 idx, in VID_REG_FLD_MOD() argument
461 dispc_vid_write(dispc, hw_plane, idx, in VID_REG_FLD_MOD()
462 FLD_MOD(dispc_vid_read(dispc, hw_plane, idx), in VID_REG_FLD_MOD()
466 static u32 VP_REG_GET(struct dispc_device *dispc, u32 vp, u32 idx, in VP_REG_GET() argument
469 return FLD_GET(dispc_vp_read(dispc, vp, idx), start, end); in VP_REG_GET()
472 static void VP_REG_FLD_MOD(struct dispc_device *dispc, u32 vp, u32 idx, u32 val, in VP_REG_FLD_MOD() argument
475 dispc_vp_write(dispc, vp, idx, FLD_MOD(dispc_vp_read(dispc, vp, idx), in VP_REG_FLD_MOD()
480 static u32 OVR_REG_GET(struct dispc_device *dispc, u32 ovr, u32 idx, in OVR_REG_GET() argument
483 return FLD_GET(dispc_ovr_read(dispc, ovr, idx), start, end); in OVR_REG_GET()
486 static void OVR_REG_FLD_MOD(struct dispc_device *dispc, u32 ovr, u32 idx, in OVR_REG_FLD_MOD() argument
489 dispc_ovr_write(dispc, ovr, idx, in OVR_REG_FLD_MOD()
490 FLD_MOD(dispc_ovr_read(dispc, ovr, idx), in OVR_REG_FLD_MOD()
546 static dispc_irq_t dispc_k2g_vp_read_irqstatus(struct dispc_device *dispc, in dispc_k2g_vp_read_irqstatus() argument
549 u32 stat = dispc_vp_read(dispc, hw_videoport, DISPC_VP_K2G_IRQSTATUS); in dispc_k2g_vp_read_irqstatus()
554 static void dispc_k2g_vp_write_irqstatus(struct dispc_device *dispc, in dispc_k2g_vp_write_irqstatus() argument
559 dispc_vp_write(dispc, hw_videoport, DISPC_VP_K2G_IRQSTATUS, stat); in dispc_k2g_vp_write_irqstatus()
562 static dispc_irq_t dispc_k2g_vid_read_irqstatus(struct dispc_device *dispc, in dispc_k2g_vid_read_irqstatus() argument
565 u32 stat = dispc_vid_read(dispc, hw_plane, DISPC_VID_K2G_IRQSTATUS); in dispc_k2g_vid_read_irqstatus()
570 static void dispc_k2g_vid_write_irqstatus(struct dispc_device *dispc, in dispc_k2g_vid_write_irqstatus() argument
575 dispc_vid_write(dispc, hw_plane, DISPC_VID_K2G_IRQSTATUS, stat); in dispc_k2g_vid_write_irqstatus()
578 static dispc_irq_t dispc_k2g_vp_read_irqenable(struct dispc_device *dispc, in dispc_k2g_vp_read_irqenable() argument
581 u32 stat = dispc_vp_read(dispc, hw_videoport, DISPC_VP_K2G_IRQENABLE); in dispc_k2g_vp_read_irqenable()
586 static void dispc_k2g_vp_set_irqenable(struct dispc_device *dispc, in dispc_k2g_vp_set_irqenable() argument
591 dispc_vp_write(dispc, hw_videoport, DISPC_VP_K2G_IRQENABLE, stat); in dispc_k2g_vp_set_irqenable()
594 static dispc_irq_t dispc_k2g_vid_read_irqenable(struct dispc_device *dispc, in dispc_k2g_vid_read_irqenable() argument
597 u32 stat = dispc_vid_read(dispc, hw_plane, DISPC_VID_K2G_IRQENABLE); in dispc_k2g_vid_read_irqenable()
602 static void dispc_k2g_vid_set_irqenable(struct dispc_device *dispc, in dispc_k2g_vid_set_irqenable() argument
607 dispc_vid_write(dispc, hw_plane, DISPC_VID_K2G_IRQENABLE, stat); in dispc_k2g_vid_set_irqenable()
610 static void dispc_k2g_clear_irqstatus(struct dispc_device *dispc, in dispc_k2g_clear_irqstatus() argument
613 dispc_k2g_vp_write_irqstatus(dispc, 0, mask); in dispc_k2g_clear_irqstatus()
614 dispc_k2g_vid_write_irqstatus(dispc, 0, mask); in dispc_k2g_clear_irqstatus()
618 dispc_irq_t dispc_k2g_read_and_clear_irqstatus(struct dispc_device *dispc) in dispc_k2g_read_and_clear_irqstatus() argument
623 dispc_write(dispc, DISPC_IRQSTATUS, in dispc_k2g_read_and_clear_irqstatus()
624 dispc_read(dispc, DISPC_IRQSTATUS)); in dispc_k2g_read_and_clear_irqstatus()
626 stat |= dispc_k2g_vp_read_irqstatus(dispc, 0); in dispc_k2g_read_and_clear_irqstatus()
627 stat |= dispc_k2g_vid_read_irqstatus(dispc, 0); in dispc_k2g_read_and_clear_irqstatus()
629 dispc_k2g_clear_irqstatus(dispc, stat); in dispc_k2g_read_and_clear_irqstatus()
634 static dispc_irq_t dispc_k2g_read_irqenable(struct dispc_device *dispc) in dispc_k2g_read_irqenable() argument
638 stat |= dispc_k2g_vp_read_irqenable(dispc, 0); in dispc_k2g_read_irqenable()
639 stat |= dispc_k2g_vid_read_irqenable(dispc, 0); in dispc_k2g_read_irqenable()
645 void dispc_k2g_set_irqenable(struct dispc_device *dispc, dispc_irq_t mask) in dispc_k2g_set_irqenable() argument
647 dispc_irq_t old_mask = dispc_k2g_read_irqenable(dispc); in dispc_k2g_set_irqenable()
650 dispc_k2g_clear_irqstatus(dispc, (mask ^ old_mask) & mask); in dispc_k2g_set_irqenable()
652 dispc_k2g_vp_set_irqenable(dispc, 0, mask); in dispc_k2g_set_irqenable()
653 dispc_k2g_vid_set_irqenable(dispc, 0, mask); in dispc_k2g_set_irqenable()
655 dispc_write(dispc, DISPC_IRQENABLE_SET, (1 << 0) | (1 << 7)); in dispc_k2g_set_irqenable()
658 dispc_k2g_clear_irqstatus(dispc, (mask ^ old_mask) & old_mask); in dispc_k2g_set_irqenable()
661 dispc_k2g_read_irqenable(dispc); in dispc_k2g_set_irqenable()
664 static dispc_irq_t dispc_k3_vp_read_irqstatus(struct dispc_device *dispc, in dispc_k3_vp_read_irqstatus() argument
667 u32 stat = dispc_read(dispc, DISPC_VP_IRQSTATUS(hw_videoport)); in dispc_k3_vp_read_irqstatus()
672 static void dispc_k3_vp_write_irqstatus(struct dispc_device *dispc, in dispc_k3_vp_write_irqstatus() argument
677 dispc_write(dispc, DISPC_VP_IRQSTATUS(hw_videoport), stat); in dispc_k3_vp_write_irqstatus()
680 static dispc_irq_t dispc_k3_vid_read_irqstatus(struct dispc_device *dispc, in dispc_k3_vid_read_irqstatus() argument
683 u32 stat = dispc_read(dispc, DISPC_VID_IRQSTATUS(hw_plane)); in dispc_k3_vid_read_irqstatus()
688 static void dispc_k3_vid_write_irqstatus(struct dispc_device *dispc, in dispc_k3_vid_write_irqstatus() argument
693 dispc_write(dispc, DISPC_VID_IRQSTATUS(hw_plane), stat); in dispc_k3_vid_write_irqstatus()
696 static dispc_irq_t dispc_k3_vp_read_irqenable(struct dispc_device *dispc, in dispc_k3_vp_read_irqenable() argument
699 u32 stat = dispc_read(dispc, DISPC_VP_IRQENABLE(hw_videoport)); in dispc_k3_vp_read_irqenable()
704 static void dispc_k3_vp_set_irqenable(struct dispc_device *dispc, in dispc_k3_vp_set_irqenable() argument
709 dispc_write(dispc, DISPC_VP_IRQENABLE(hw_videoport), stat); in dispc_k3_vp_set_irqenable()
712 static dispc_irq_t dispc_k3_vid_read_irqenable(struct dispc_device *dispc, in dispc_k3_vid_read_irqenable() argument
715 u32 stat = dispc_read(dispc, DISPC_VID_IRQENABLE(hw_plane)); in dispc_k3_vid_read_irqenable()
720 static void dispc_k3_vid_set_irqenable(struct dispc_device *dispc, in dispc_k3_vid_set_irqenable() argument
725 dispc_write(dispc, DISPC_VID_IRQENABLE(hw_plane), stat); in dispc_k3_vid_set_irqenable()
729 void dispc_k3_clear_irqstatus(struct dispc_device *dispc, dispc_irq_t clearmask) in dispc_k3_clear_irqstatus() argument
733 for (i = 0; i < dispc->feat->num_vps; ++i) { in dispc_k3_clear_irqstatus()
735 dispc_k3_vp_write_irqstatus(dispc, i, clearmask); in dispc_k3_clear_irqstatus()
737 for (i = 0; i < dispc->feat->num_planes; ++i) { in dispc_k3_clear_irqstatus()
739 dispc_k3_vid_write_irqstatus(dispc, i, clearmask); in dispc_k3_clear_irqstatus()
741 if (dispc->feat->subrev == DISPC_K2G) in dispc_k3_clear_irqstatus()
745 dispc_write(dispc, DISPC_IRQSTATUS, dispc_read(dispc, DISPC_IRQSTATUS)); in dispc_k3_clear_irqstatus()
748 dispc_read(dispc, DISPC_IRQSTATUS); in dispc_k3_clear_irqstatus()
752 dispc_irq_t dispc_k3_read_and_clear_irqstatus(struct dispc_device *dispc) in dispc_k3_read_and_clear_irqstatus() argument
757 for (i = 0; i < dispc->feat->num_vps; ++i) in dispc_k3_read_and_clear_irqstatus()
758 status |= dispc_k3_vp_read_irqstatus(dispc, i); in dispc_k3_read_and_clear_irqstatus()
760 for (i = 0; i < dispc->feat->num_planes; ++i) in dispc_k3_read_and_clear_irqstatus()
761 status |= dispc_k3_vid_read_irqstatus(dispc, i); in dispc_k3_read_and_clear_irqstatus()
763 dispc_k3_clear_irqstatus(dispc, status); in dispc_k3_read_and_clear_irqstatus()
768 static dispc_irq_t dispc_k3_read_irqenable(struct dispc_device *dispc) in dispc_k3_read_irqenable() argument
773 for (i = 0; i < dispc->feat->num_vps; ++i) in dispc_k3_read_irqenable()
774 enable |= dispc_k3_vp_read_irqenable(dispc, i); in dispc_k3_read_irqenable()
776 for (i = 0; i < dispc->feat->num_planes; ++i) in dispc_k3_read_irqenable()
777 enable |= dispc_k3_vid_read_irqenable(dispc, i); in dispc_k3_read_irqenable()
782 static void dispc_k3_set_irqenable(struct dispc_device *dispc, in dispc_k3_set_irqenable() argument
789 old_mask = dispc_k3_read_irqenable(dispc); in dispc_k3_set_irqenable()
792 dispc_k3_clear_irqstatus(dispc, (old_mask ^ mask) & mask); in dispc_k3_set_irqenable()
794 for (i = 0; i < dispc->feat->num_vps; ++i) { in dispc_k3_set_irqenable()
795 dispc_k3_vp_set_irqenable(dispc, i, mask); in dispc_k3_set_irqenable()
802 for (i = 0; i < dispc->feat->num_planes; ++i) { in dispc_k3_set_irqenable()
803 dispc_k3_vid_set_irqenable(dispc, i, mask); in dispc_k3_set_irqenable()
811 dispc_write(dispc, DISPC_IRQENABLE_SET, main_enable); in dispc_k3_set_irqenable()
814 dispc_write(dispc, DISPC_IRQENABLE_CLR, main_disable); in dispc_k3_set_irqenable()
817 dispc_k3_clear_irqstatus(dispc, (old_mask ^ mask) & old_mask); in dispc_k3_set_irqenable()
820 dispc_read(dispc, DISPC_IRQENABLE_SET); in dispc_k3_set_irqenable()
823 dispc_irq_t dispc_read_and_clear_irqstatus(struct dispc_device *dispc) in dispc_read_and_clear_irqstatus() argument
825 switch (dispc->feat->subrev) { in dispc_read_and_clear_irqstatus()
827 return dispc_k2g_read_and_clear_irqstatus(dispc); in dispc_read_and_clear_irqstatus()
831 return dispc_k3_read_and_clear_irqstatus(dispc); in dispc_read_and_clear_irqstatus()
838 void dispc_set_irqenable(struct dispc_device *dispc, dispc_irq_t mask) in dispc_set_irqenable() argument
840 switch (dispc->feat->subrev) { in dispc_set_irqenable()
842 dispc_k2g_set_irqenable(dispc, mask); in dispc_set_irqenable()
847 dispc_k3_set_irqenable(dispc, mask); in dispc_set_irqenable()
877 struct dispc_bus_format *dispc_vp_find_bus_fmt(struct dispc_device *dispc, in dispc_vp_find_bus_fmt() argument
891 int dispc_vp_bus_check(struct dispc_device *dispc, u32 hw_videoport, in dispc_vp_bus_check() argument
897 fmt = dispc_vp_find_bus_fmt(dispc, hw_videoport, tstate->bus_format, in dispc_vp_bus_check()
900 dev_dbg(dispc->dev, "%s: Unsupported bus format: %u\n", in dispc_vp_bus_check()
905 if (dispc->feat->vp_bus_type[hw_videoport] != DISPC_VP_OLDI && in dispc_vp_bus_check()
907 dev_dbg(dispc->dev, "%s: %s is not OLDI-port\n", in dispc_vp_bus_check()
908 __func__, dispc->feat->vp_name[hw_videoport]); in dispc_vp_bus_check()
915 static void dispc_oldi_tx_power(struct dispc_device *dispc, bool power) in dispc_oldi_tx_power() argument
919 if (WARN_ON(!dispc->oldi_io_ctrl)) in dispc_oldi_tx_power()
922 regmap_update_bits(dispc->oldi_io_ctrl, OLDI_DAT0_IO_CTRL, in dispc_oldi_tx_power()
924 regmap_update_bits(dispc->oldi_io_ctrl, OLDI_DAT1_IO_CTRL, in dispc_oldi_tx_power()
926 regmap_update_bits(dispc->oldi_io_ctrl, OLDI_DAT2_IO_CTRL, in dispc_oldi_tx_power()
928 regmap_update_bits(dispc->oldi_io_ctrl, OLDI_DAT3_IO_CTRL, in dispc_oldi_tx_power()
930 regmap_update_bits(dispc->oldi_io_ctrl, OLDI_CLK_IO_CTRL, in dispc_oldi_tx_power()
934 static void dispc_set_num_datalines(struct dispc_device *dispc, in dispc_set_num_datalines() argument
957 VP_REG_FLD_MOD(dispc, hw_videoport, DISPC_VP_CONTROL, v, 10, 8); in dispc_set_num_datalines()
960 static void dispc_enable_oldi(struct dispc_device *dispc, u32 hw_videoport, in dispc_enable_oldi() argument
975 dev_warn(dispc->dev, "%s: %d port width not supported\n", in dispc_enable_oldi()
986 dispc_vp_write(dispc, hw_videoport, DISPC_VP_DSS_OLDI_CFG, oldi_cfg); in dispc_enable_oldi()
988 while (!(oldi_reset_bit & dispc_read(dispc, DSS_SYSSTATUS)) && in dispc_enable_oldi()
992 if (!(oldi_reset_bit & dispc_read(dispc, DSS_SYSSTATUS))) in dispc_enable_oldi()
993 dev_warn(dispc->dev, "%s: timeout waiting OLDI reset done\n", in dispc_enable_oldi()
997 void dispc_vp_prepare(struct dispc_device *dispc, u32 hw_videoport, in dispc_vp_prepare() argument
1003 fmt = dispc_vp_find_bus_fmt(dispc, hw_videoport, tstate->bus_format, in dispc_vp_prepare()
1009 if (dispc->feat->vp_bus_type[hw_videoport] == DISPC_VP_OLDI) { in dispc_vp_prepare()
1010 dispc_oldi_tx_power(dispc, true); in dispc_vp_prepare()
1012 dispc_enable_oldi(dispc, hw_videoport, fmt); in dispc_vp_prepare()
1016 void dispc_vp_enable(struct dispc_device *dispc, u32 hw_videoport, in dispc_vp_enable() argument
1025 fmt = dispc_vp_find_bus_fmt(dispc, hw_videoport, tstate->bus_format, in dispc_vp_enable()
1031 dispc_set_num_datalines(dispc, hw_videoport, fmt->data_width); in dispc_vp_enable()
1041 dispc_vp_write(dispc, hw_videoport, DISPC_VP_TIMING_H, in dispc_vp_enable()
1046 dispc_vp_write(dispc, hw_videoport, DISPC_VP_TIMING_V, in dispc_vp_enable()
1068 if (dispc->feat->vp_bus_type[hw_videoport] == DISPC_VP_OLDI) in dispc_vp_enable()
1071 dispc_vp_write(dispc, hw_videoport, DISPC_VP_POL_FREQ, in dispc_vp_enable()
1080 dispc_vp_write(dispc, hw_videoport, DISPC_VP_SIZE_SCREEN, in dispc_vp_enable()
1084 VP_REG_FLD_MOD(dispc, hw_videoport, DISPC_VP_CONTROL, 1, 0, 0); in dispc_vp_enable()
1087 void dispc_vp_disable(struct dispc_device *dispc, u32 hw_videoport) in dispc_vp_disable() argument
1089 VP_REG_FLD_MOD(dispc, hw_videoport, DISPC_VP_CONTROL, 0, 0, 0); in dispc_vp_disable()
1092 void dispc_vp_unprepare(struct dispc_device *dispc, u32 hw_videoport) in dispc_vp_unprepare() argument
1094 if (dispc->feat->vp_bus_type[hw_videoport] == DISPC_VP_OLDI) { in dispc_vp_unprepare()
1095 dispc_vp_write(dispc, hw_videoport, DISPC_VP_DSS_OLDI_CFG, 0); in dispc_vp_unprepare()
1097 dispc_oldi_tx_power(dispc, false); in dispc_vp_unprepare()
1101 bool dispc_vp_go_busy(struct dispc_device *dispc, u32 hw_videoport) in dispc_vp_go_busy() argument
1103 return VP_REG_GET(dispc, hw_videoport, DISPC_VP_CONTROL, 5, 5); in dispc_vp_go_busy()
1106 void dispc_vp_go(struct dispc_device *dispc, u32 hw_videoport) in dispc_vp_go() argument
1108 WARN_ON(VP_REG_GET(dispc, hw_videoport, DISPC_VP_CONTROL, 5, 5)); in dispc_vp_go()
1109 VP_REG_FLD_MOD(dispc, hw_videoport, DISPC_VP_CONTROL, 1, 5, 5); in dispc_vp_go()
1152 static void dispc_vp_set_default_color(struct dispc_device *dispc, in dispc_vp_set_default_color() argument
1159 dispc_ovr_write(dispc, hw_videoport, in dispc_vp_set_default_color()
1161 dispc_ovr_write(dispc, hw_videoport, in dispc_vp_set_default_color()
1165 enum drm_mode_status dispc_vp_mode_valid(struct dispc_device *dispc, in dispc_vp_mode_valid() argument
1173 bus_type = dispc->feat->vp_bus_type[hw_videoport]; in dispc_vp_mode_valid()
1175 max_pclk = dispc->feat->max_pclk_khz[bus_type]; in dispc_vp_mode_valid()
1180 if (mode->clock < dispc->feat->min_pclk_khz) in dispc_vp_mode_valid()
1224 if (dispc->memory_bandwidth_limit) { in dispc_vp_mode_valid()
1232 if (dispc->memory_bandwidth_limit < bandwidth) in dispc_vp_mode_valid()
1239 int dispc_vp_enable_clk(struct dispc_device *dispc, u32 hw_videoport) in dispc_vp_enable_clk() argument
1241 int ret = clk_prepare_enable(dispc->vp_clk[hw_videoport]); in dispc_vp_enable_clk()
1244 dev_err(dispc->dev, "%s: enabling clk failed: %d\n", __func__, in dispc_vp_enable_clk()
1250 void dispc_vp_disable_clk(struct dispc_device *dispc, u32 hw_videoport) in dispc_vp_disable_clk() argument
1252 clk_disable_unprepare(dispc->vp_clk[hw_videoport]); in dispc_vp_disable_clk()
1267 int dispc_vp_set_clk_rate(struct dispc_device *dispc, u32 hw_videoport, in dispc_vp_set_clk_rate() argument
1273 r = clk_set_rate(dispc->vp_clk[hw_videoport], rate); in dispc_vp_set_clk_rate()
1275 dev_err(dispc->dev, "vp%d: failed to set clk rate to %lu\n", in dispc_vp_set_clk_rate()
1280 new_rate = clk_get_rate(dispc->vp_clk[hw_videoport]); in dispc_vp_set_clk_rate()
1283 dev_warn(dispc->dev, in dispc_vp_set_clk_rate()
1287 dev_dbg(dispc->dev, "vp%d: new rate %lu Hz (requested %lu Hz)\n", in dispc_vp_set_clk_rate()
1288 hw_videoport, clk_get_rate(dispc->vp_clk[hw_videoport]), rate); in dispc_vp_set_clk_rate()
1294 static void dispc_k2g_ovr_set_plane(struct dispc_device *dispc, in dispc_k2g_ovr_set_plane() argument
1299 dispc_vid_write(dispc, hw_plane, DISPC_VID_K2G_POSITION, in dispc_k2g_ovr_set_plane()
1303 static void dispc_am65x_ovr_set_plane(struct dispc_device *dispc, in dispc_am65x_ovr_set_plane() argument
1307 OVR_REG_FLD_MOD(dispc, hw_videoport, DISPC_OVR_ATTRIBUTES(layer), in dispc_am65x_ovr_set_plane()
1309 OVR_REG_FLD_MOD(dispc, hw_videoport, DISPC_OVR_ATTRIBUTES(layer), in dispc_am65x_ovr_set_plane()
1311 OVR_REG_FLD_MOD(dispc, hw_videoport, DISPC_OVR_ATTRIBUTES(layer), in dispc_am65x_ovr_set_plane()
1315 static void dispc_j721e_ovr_set_plane(struct dispc_device *dispc, in dispc_j721e_ovr_set_plane() argument
1319 OVR_REG_FLD_MOD(dispc, hw_videoport, DISPC_OVR_ATTRIBUTES(layer), in dispc_j721e_ovr_set_plane()
1321 OVR_REG_FLD_MOD(dispc, hw_videoport, DISPC_OVR_ATTRIBUTES2(layer), in dispc_j721e_ovr_set_plane()
1323 OVR_REG_FLD_MOD(dispc, hw_videoport, DISPC_OVR_ATTRIBUTES2(layer), in dispc_j721e_ovr_set_plane()
1327 void dispc_ovr_set_plane(struct dispc_device *dispc, u32 hw_plane, in dispc_ovr_set_plane() argument
1330 switch (dispc->feat->subrev) { in dispc_ovr_set_plane()
1332 dispc_k2g_ovr_set_plane(dispc, hw_plane, hw_videoport, in dispc_ovr_set_plane()
1337 dispc_am65x_ovr_set_plane(dispc, hw_plane, hw_videoport, in dispc_ovr_set_plane()
1341 dispc_j721e_ovr_set_plane(dispc, hw_plane, hw_videoport, in dispc_ovr_set_plane()
1350 void dispc_ovr_enable_layer(struct dispc_device *dispc, in dispc_ovr_enable_layer() argument
1353 if (dispc->feat->subrev == DISPC_K2G) in dispc_ovr_enable_layer()
1356 OVR_REG_FLD_MOD(dispc, hw_videoport, DISPC_OVR_ATTRIBUTES(layer), in dispc_ovr_enable_layer()
1439 static void dispc_k2g_vid_write_csc(struct dispc_device *dispc, u32 hw_plane, in dispc_k2g_vid_write_csc() argument
1454 dev_warn(dispc->dev, "%s: No post offset support for %s\n", in dispc_k2g_vid_write_csc()
1458 dispc_vid_write(dispc, hw_plane, dispc_vid_csc_coef_reg[i], in dispc_k2g_vid_write_csc()
1462 static void dispc_k3_vid_write_csc(struct dispc_device *dispc, u32 hw_plane, in dispc_k3_vid_write_csc() argument
1477 dispc_vid_write(dispc, hw_plane, dispc_vid_csc_coef_reg[i], in dispc_k3_vid_write_csc()
1559 static void dispc_vid_csc_setup(struct dispc_device *dispc, u32 hw_plane, in dispc_vid_csc_setup() argument
1566 dev_err(dispc->dev, "%s: CSC (%u,%u) not found\n", in dispc_vid_csc_setup()
1571 if (dispc->feat->subrev == DISPC_K2G) in dispc_vid_csc_setup()
1572 dispc_k2g_vid_write_csc(dispc, hw_plane, coef); in dispc_vid_csc_setup()
1574 dispc_k3_vid_write_csc(dispc, hw_plane, coef); in dispc_vid_csc_setup()
1577 static void dispc_vid_csc_enable(struct dispc_device *dispc, u32 hw_plane, in dispc_vid_csc_enable() argument
1580 VID_REG_FLD_MOD(dispc, hw_plane, DISPC_VID_ATTRIBUTES, !!enable, 9, 9); in dispc_vid_csc_enable()
1597 static void dispc_vid_write_fir_coefs(struct dispc_device *dispc, in dispc_vid_write_fir_coefs() argument
1621 dev_err(dispc->dev, "%s: No coefficients given.\n", __func__); in dispc_vid_write_fir_coefs()
1629 dispc_vid_write(dispc, hw_plane, reg, c0); in dispc_vid_write_fir_coefs()
1641 dispc_vid_write(dispc, hw_plane, reg, c12); in dispc_vid_write_fir_coefs()
1666 static int dispc_vid_calc_scaling(struct dispc_device *dispc, in dispc_vid_calc_scaling() argument
1671 const struct dispc_features_scaling *f = &dispc->feat->scaling; in dispc_vid_calc_scaling()
1720 dev_dbg(dispc->dev, in dispc_vid_calc_scaling()
1733 dev_dbg(dispc->dev, in dispc_vid_calc_scaling()
1750 dev_dbg(dispc->dev, in dispc_vid_calc_scaling()
1771 dev_dbg(dispc->dev, in dispc_vid_calc_scaling()
1789 dev_dbg(dispc->dev, in dispc_vid_calc_scaling()
1805 sp->xcoef_uv = tidss_get_scale_coefs(dispc->dev, in dispc_vid_calc_scaling()
1813 sp->ycoef_uv = tidss_get_scale_coefs(dispc->dev, in dispc_vid_calc_scaling()
1820 sp->xcoef = tidss_get_scale_coefs(dispc->dev, sp->fir_xinc, in dispc_vid_calc_scaling()
1824 sp->ycoef = tidss_get_scale_coefs(dispc->dev, sp->fir_yinc, in dispc_vid_calc_scaling()
1830 static void dispc_vid_set_scaling(struct dispc_device *dispc, in dispc_vid_set_scaling() argument
1836 VID_REG_FLD_MOD(dispc, hw_plane, DISPC_VID_ATTRIBUTES, in dispc_vid_set_scaling()
1840 VID_REG_FLD_MOD(dispc, hw_plane, DISPC_VID_ATTRIBUTES, in dispc_vid_set_scaling()
1848 VID_REG_FLD_MOD(dispc, hw_plane, DISPC_VID_ATTRIBUTES, in dispc_vid_set_scaling()
1853 dispc_vid_write(dispc, hw_plane, DISPC_VID_FIRH2, in dispc_vid_set_scaling()
1855 dispc_vid_write_fir_coefs(dispc, hw_plane, in dispc_vid_set_scaling()
1860 dispc_vid_write(dispc, hw_plane, DISPC_VID_FIRV2, in dispc_vid_set_scaling()
1862 dispc_vid_write_fir_coefs(dispc, hw_plane, in dispc_vid_set_scaling()
1869 dispc_vid_write(dispc, hw_plane, DISPC_VID_FIRH, sp->fir_xinc); in dispc_vid_set_scaling()
1870 dispc_vid_write_fir_coefs(dispc, hw_plane, in dispc_vid_set_scaling()
1876 dispc_vid_write(dispc, hw_plane, DISPC_VID_FIRV, sp->fir_yinc); in dispc_vid_set_scaling()
1877 dispc_vid_write_fir_coefs(dispc, hw_plane, in dispc_vid_set_scaling()
1930 static void dispc_plane_set_pixel_format(struct dispc_device *dispc, in dispc_plane_set_pixel_format() argument
1937 VID_REG_FLD_MOD(dispc, hw_plane, DISPC_VID_ATTRIBUTES, in dispc_plane_set_pixel_format()
1947 const u32 *dispc_plane_formats(struct dispc_device *dispc, unsigned int *len) in dispc_plane_formats() argument
1949 WARN_ON(!dispc->fourccs); in dispc_plane_formats()
1951 *len = dispc->num_fourccs; in dispc_plane_formats()
1953 return dispc->fourccs; in dispc_plane_formats()
1969 int dispc_plane_check(struct dispc_device *dispc, u32 hw_plane, in dispc_plane_check() argument
1973 bool lite = dispc->feat->vid_lite[hw_plane]; in dispc_plane_check()
1983 dev_dbg(dispc->dev, in dispc_plane_check()
1993 dev_dbg(dispc->dev, in dispc_plane_check()
2000 ret = dispc_vid_calc_scaling(dispc, state, &scaling, false); in dispc_plane_check()
2040 void dispc_plane_setup(struct dispc_device *dispc, u32 hw_plane, in dispc_plane_setup() argument
2044 bool lite = dispc->feat->vid_lite[hw_plane]; in dispc_plane_setup()
2051 dispc_vid_calc_scaling(dispc, state, &scale, lite); in dispc_plane_setup()
2053 dispc_plane_set_pixel_format(dispc, hw_plane, fourcc); in dispc_plane_setup()
2055 dispc_vid_write(dispc, hw_plane, DISPC_VID_BA_0, dma_addr & 0xffffffff); in dispc_plane_setup()
2056 dispc_vid_write(dispc, hw_plane, DISPC_VID_BA_EXT_0, (u64)dma_addr >> 32); in dispc_plane_setup()
2057 dispc_vid_write(dispc, hw_plane, DISPC_VID_BA_1, dma_addr & 0xffffffff); in dispc_plane_setup()
2058 dispc_vid_write(dispc, hw_plane, DISPC_VID_BA_EXT_1, (u64)dma_addr >> 32); in dispc_plane_setup()
2060 dispc_vid_write(dispc, hw_plane, DISPC_VID_PICTURE_SIZE, in dispc_plane_setup()
2065 dispc_vid_write(dispc, hw_plane, DISPC_VID_PIXEL_INC, in dispc_plane_setup()
2068 dispc_vid_write(dispc, hw_plane, DISPC_VID_PIXEL_INC, in dispc_plane_setup()
2071 dispc_vid_write(dispc, hw_plane, DISPC_VID_ROW_INC, in dispc_plane_setup()
2081 dispc_vid_write(dispc, hw_plane, in dispc_plane_setup()
2083 dispc_vid_write(dispc, hw_plane, in dispc_plane_setup()
2085 dispc_vid_write(dispc, hw_plane, in dispc_plane_setup()
2087 dispc_vid_write(dispc, hw_plane, in dispc_plane_setup()
2090 dispc_vid_write(dispc, hw_plane, DISPC_VID_ROW_INC_UV, in dispc_plane_setup()
2097 dispc_vid_write(dispc, hw_plane, DISPC_VID_SIZE, in dispc_plane_setup()
2101 dispc_vid_set_scaling(dispc, hw_plane, &scale, fourcc); in dispc_plane_setup()
2106 dispc_vid_csc_setup(dispc, hw_plane, state); in dispc_plane_setup()
2107 dispc_vid_csc_enable(dispc, hw_plane, true); in dispc_plane_setup()
2109 dispc_vid_csc_enable(dispc, hw_plane, false); in dispc_plane_setup()
2112 dispc_vid_write(dispc, hw_plane, DISPC_VID_GLOBAL_ALPHA, in dispc_plane_setup()
2116 VID_REG_FLD_MOD(dispc, hw_plane, DISPC_VID_ATTRIBUTES, 1, in dispc_plane_setup()
2119 VID_REG_FLD_MOD(dispc, hw_plane, DISPC_VID_ATTRIBUTES, 0, in dispc_plane_setup()
2123 void dispc_plane_enable(struct dispc_device *dispc, u32 hw_plane, bool enable) in dispc_plane_enable() argument
2125 VID_REG_FLD_MOD(dispc, hw_plane, DISPC_VID_ATTRIBUTES, !!enable, 0, 0); in dispc_plane_enable()
2128 static u32 dispc_vid_get_fifo_size(struct dispc_device *dispc, u32 hw_plane) in dispc_vid_get_fifo_size() argument
2130 return VID_REG_GET(dispc, hw_plane, DISPC_VID_BUF_SIZE_STATUS, 15, 0); in dispc_vid_get_fifo_size()
2133 static void dispc_vid_set_mflag_threshold(struct dispc_device *dispc, in dispc_vid_set_mflag_threshold() argument
2136 dispc_vid_write(dispc, hw_plane, DISPC_VID_MFLAG_THRESHOLD, in dispc_vid_set_mflag_threshold()
2140 static void dispc_vid_set_buf_threshold(struct dispc_device *dispc, in dispc_vid_set_buf_threshold() argument
2143 dispc_vid_write(dispc, hw_plane, DISPC_VID_BUF_THRESHOLD, in dispc_vid_set_buf_threshold()
2147 static void dispc_k2g_plane_init(struct dispc_device *dispc) in dispc_k2g_plane_init() argument
2151 dev_dbg(dispc->dev, "%s()\n", __func__); in dispc_k2g_plane_init()
2154 REG_FLD_MOD(dispc, DISPC_GLOBAL_MFLAG_ATTRIBUTE, 2, 1, 0); in dispc_k2g_plane_init()
2156 REG_FLD_MOD(dispc, DISPC_GLOBAL_MFLAG_ATTRIBUTE, 0, 6, 6); in dispc_k2g_plane_init()
2158 for (hw_plane = 0; hw_plane < dispc->feat->num_planes; hw_plane++) { in dispc_k2g_plane_init()
2159 u32 size = dispc_vid_get_fifo_size(dispc, hw_plane); in dispc_k2g_plane_init()
2172 dev_dbg(dispc->dev, in dispc_k2g_plane_init()
2174 dispc->feat->vid_name[hw_plane], in dispc_k2g_plane_init()
2180 dispc_vid_set_buf_threshold(dispc, hw_plane, in dispc_k2g_plane_init()
2182 dispc_vid_set_mflag_threshold(dispc, hw_plane, in dispc_k2g_plane_init()
2185 dispc_vid_write(dispc, hw_plane, DISPC_VID_PRELOAD, preload); in dispc_k2g_plane_init()
2192 VID_REG_FLD_MOD(dispc, hw_plane, DISPC_VID_ATTRIBUTES, 1, in dispc_k2g_plane_init()
2197 static void dispc_k3_plane_init(struct dispc_device *dispc) in dispc_k3_plane_init() argument
2203 dev_dbg(dispc->dev, "%s()\n", __func__); in dispc_k3_plane_init()
2205 REG_FLD_MOD(dispc, DSS_CBA_CFG, cba_lo_pri, 2, 0); in dispc_k3_plane_init()
2206 REG_FLD_MOD(dispc, DSS_CBA_CFG, cba_hi_pri, 5, 3); in dispc_k3_plane_init()
2209 REG_FLD_MOD(dispc, DISPC_GLOBAL_MFLAG_ATTRIBUTE, 2, 1, 0); in dispc_k3_plane_init()
2211 REG_FLD_MOD(dispc, DISPC_GLOBAL_MFLAG_ATTRIBUTE, 0, 6, 6); in dispc_k3_plane_init()
2213 for (hw_plane = 0; hw_plane < dispc->feat->num_planes; hw_plane++) { in dispc_k3_plane_init()
2214 u32 size = dispc_vid_get_fifo_size(dispc, hw_plane); in dispc_k3_plane_init()
2227 dev_dbg(dispc->dev, in dispc_k3_plane_init()
2229 dispc->feat->vid_name[hw_plane], in dispc_k3_plane_init()
2235 dispc_vid_set_buf_threshold(dispc, hw_plane, in dispc_k3_plane_init()
2237 dispc_vid_set_mflag_threshold(dispc, hw_plane, in dispc_k3_plane_init()
2240 dispc_vid_write(dispc, hw_plane, DISPC_VID_PRELOAD, preload); in dispc_k3_plane_init()
2243 VID_REG_FLD_MOD(dispc, hw_plane, DISPC_VID_ATTRIBUTES, 0, in dispc_k3_plane_init()
2248 static void dispc_plane_init(struct dispc_device *dispc) in dispc_plane_init() argument
2250 switch (dispc->feat->subrev) { in dispc_plane_init()
2252 dispc_k2g_plane_init(dispc); in dispc_plane_init()
2257 dispc_k3_plane_init(dispc); in dispc_plane_init()
2264 static void dispc_vp_init(struct dispc_device *dispc) in dispc_vp_init() argument
2268 dev_dbg(dispc->dev, "%s()\n", __func__); in dispc_vp_init()
2271 for (i = 0; i < dispc->feat->num_vps; i++) in dispc_vp_init()
2272 VP_REG_FLD_MOD(dispc, i, DISPC_VP_CONFIG, 1, 2, 2); in dispc_vp_init()
2275 static void dispc_initial_config(struct dispc_device *dispc) in dispc_initial_config() argument
2277 dispc_plane_init(dispc); in dispc_initial_config()
2278 dispc_vp_init(dispc); in dispc_initial_config()
2281 if (dispc->feat->subrev == DISPC_J721E) { in dispc_initial_config()
2282 dispc_write(dispc, DISPC_CONNECTIONS, in dispc_initial_config()
2289 static void dispc_k2g_vp_write_gamma_table(struct dispc_device *dispc, in dispc_k2g_vp_write_gamma_table() argument
2292 u32 *table = dispc->vp_data[hw_videoport].gamma_table; in dispc_k2g_vp_write_gamma_table()
2293 u32 hwlen = dispc->feat->vp_feat.color.gamma_size; in dispc_k2g_vp_write_gamma_table()
2296 dev_dbg(dispc->dev, "%s: hw_videoport %d\n", __func__, hw_videoport); in dispc_k2g_vp_write_gamma_table()
2298 if (WARN_ON(dispc->feat->vp_feat.color.gamma_type != TIDSS_GAMMA_8BIT)) in dispc_k2g_vp_write_gamma_table()
2306 dispc_vp_write(dispc, hw_videoport, DISPC_VP_K2G_GAMMA_TABLE, in dispc_k2g_vp_write_gamma_table()
2311 static void dispc_am65x_vp_write_gamma_table(struct dispc_device *dispc, in dispc_am65x_vp_write_gamma_table() argument
2314 u32 *table = dispc->vp_data[hw_videoport].gamma_table; in dispc_am65x_vp_write_gamma_table()
2315 u32 hwlen = dispc->feat->vp_feat.color.gamma_size; in dispc_am65x_vp_write_gamma_table()
2318 dev_dbg(dispc->dev, "%s: hw_videoport %d\n", __func__, hw_videoport); in dispc_am65x_vp_write_gamma_table()
2320 if (WARN_ON(dispc->feat->vp_feat.color.gamma_type != TIDSS_GAMMA_8BIT)) in dispc_am65x_vp_write_gamma_table()
2328 dispc_vp_write(dispc, hw_videoport, DISPC_VP_GAMMA_TABLE, v); in dispc_am65x_vp_write_gamma_table()
2332 static void dispc_j721e_vp_write_gamma_table(struct dispc_device *dispc, in dispc_j721e_vp_write_gamma_table() argument
2335 u32 *table = dispc->vp_data[hw_videoport].gamma_table; in dispc_j721e_vp_write_gamma_table()
2336 u32 hwlen = dispc->feat->vp_feat.color.gamma_size; in dispc_j721e_vp_write_gamma_table()
2339 dev_dbg(dispc->dev, "%s: hw_videoport %d\n", __func__, hw_videoport); in dispc_j721e_vp_write_gamma_table()
2341 if (WARN_ON(dispc->feat->vp_feat.color.gamma_type != TIDSS_GAMMA_10BIT)) in dispc_j721e_vp_write_gamma_table()
2350 dispc_vp_write(dispc, hw_videoport, DISPC_VP_GAMMA_TABLE, v); in dispc_j721e_vp_write_gamma_table()
2354 static void dispc_vp_write_gamma_table(struct dispc_device *dispc, in dispc_vp_write_gamma_table() argument
2357 switch (dispc->feat->subrev) { in dispc_vp_write_gamma_table()
2359 dispc_k2g_vp_write_gamma_table(dispc, hw_videoport); in dispc_vp_write_gamma_table()
2363 dispc_am65x_vp_write_gamma_table(dispc, hw_videoport); in dispc_vp_write_gamma_table()
2366 dispc_j721e_vp_write_gamma_table(dispc, hw_videoport); in dispc_vp_write_gamma_table()
2379 static void dispc_vp_set_gamma(struct dispc_device *dispc, in dispc_vp_set_gamma() argument
2384 u32 *table = dispc->vp_data[hw_videoport].gamma_table; in dispc_vp_set_gamma()
2385 u32 hwlen = dispc->feat->vp_feat.color.gamma_size; in dispc_vp_set_gamma()
2389 dev_dbg(dispc->dev, "%s: hw_videoport %d, lut len %u, hw len %u\n", in dispc_vp_set_gamma()
2392 if (dispc->feat->vp_feat.color.gamma_type == TIDSS_GAMMA_10BIT) in dispc_vp_set_gamma()
2426 dispc_vp_write_gamma_table(dispc, hw_videoport); in dispc_vp_set_gamma()
2473 static void dispc_k2g_vp_write_csc(struct dispc_device *dispc, u32 hw_videoport, in dispc_k2g_vp_write_csc() argument
2486 dispc_vp_write(dispc, hw_videoport, dispc_vp_cpr_coef_reg[i], in dispc_k2g_vp_write_csc()
2490 static void dispc_k2g_vp_set_ctm(struct dispc_device *dispc, u32 hw_videoport, in dispc_k2g_vp_set_ctm() argument
2499 dispc_k2g_vp_write_csc(dispc, hw_videoport, &cpr); in dispc_k2g_vp_set_ctm()
2503 VP_REG_FLD_MOD(dispc, hw_videoport, DISPC_VP_CONFIG, in dispc_k2g_vp_set_ctm()
2538 static void dispc_k3_vp_write_csc(struct dispc_device *dispc, u32 hw_videoport, in dispc_k3_vp_write_csc() argument
2552 dispc_vp_write(dispc, hw_videoport, dispc_vp_csc_coef_reg[i], in dispc_k3_vp_write_csc()
2556 static void dispc_k3_vp_set_ctm(struct dispc_device *dispc, u32 hw_videoport, in dispc_k3_vp_set_ctm() argument
2565 dispc_k3_vp_write_csc(dispc, hw_videoport, &csc); in dispc_k3_vp_set_ctm()
2569 VP_REG_FLD_MOD(dispc, hw_videoport, DISPC_VP_CONFIG, in dispc_k3_vp_set_ctm()
2573 static void dispc_vp_set_color_mgmt(struct dispc_device *dispc, in dispc_vp_set_color_mgmt() argument
2590 dispc_vp_set_gamma(dispc, hw_videoport, lut, length); in dispc_vp_set_color_mgmt()
2595 if (dispc->feat->subrev == DISPC_K2G) in dispc_vp_set_color_mgmt()
2596 dispc_k2g_vp_set_ctm(dispc, hw_videoport, ctm); in dispc_vp_set_color_mgmt()
2598 dispc_k3_vp_set_ctm(dispc, hw_videoport, ctm); in dispc_vp_set_color_mgmt()
2601 void dispc_vp_setup(struct dispc_device *dispc, u32 hw_videoport, in dispc_vp_setup() argument
2604 dispc_vp_set_default_color(dispc, hw_videoport, 0); in dispc_vp_setup()
2605 dispc_vp_set_color_mgmt(dispc, hw_videoport, state, newmodeset); in dispc_vp_setup()
2608 int dispc_runtime_suspend(struct dispc_device *dispc) in dispc_runtime_suspend() argument
2610 dev_dbg(dispc->dev, "suspend\n"); in dispc_runtime_suspend()
2612 dispc->is_enabled = false; in dispc_runtime_suspend()
2614 clk_disable_unprepare(dispc->fclk); in dispc_runtime_suspend()
2619 int dispc_runtime_resume(struct dispc_device *dispc) in dispc_runtime_resume() argument
2621 dev_dbg(dispc->dev, "resume\n"); in dispc_runtime_resume()
2623 clk_prepare_enable(dispc->fclk); in dispc_runtime_resume()
2625 if (REG_GET(dispc, DSS_SYSSTATUS, 0, 0) == 0) in dispc_runtime_resume()
2626 dev_warn(dispc->dev, "DSS FUNC RESET not done!\n"); in dispc_runtime_resume()
2628 dev_dbg(dispc->dev, "OMAP DSS7 rev 0x%x\n", in dispc_runtime_resume()
2629 dispc_read(dispc, DSS_REVISION)); in dispc_runtime_resume()
2631 dev_dbg(dispc->dev, "VP RESETDONE %d,%d,%d\n", in dispc_runtime_resume()
2632 REG_GET(dispc, DSS_SYSSTATUS, 1, 1), in dispc_runtime_resume()
2633 REG_GET(dispc, DSS_SYSSTATUS, 2, 2), in dispc_runtime_resume()
2634 REG_GET(dispc, DSS_SYSSTATUS, 3, 3)); in dispc_runtime_resume()
2636 if (dispc->feat->subrev == DISPC_AM625 || in dispc_runtime_resume()
2637 dispc->feat->subrev == DISPC_AM65X) in dispc_runtime_resume()
2638 dev_dbg(dispc->dev, "OLDI RESETDONE %d,%d,%d\n", in dispc_runtime_resume()
2639 REG_GET(dispc, DSS_SYSSTATUS, 5, 5), in dispc_runtime_resume()
2640 REG_GET(dispc, DSS_SYSSTATUS, 6, 6), in dispc_runtime_resume()
2641 REG_GET(dispc, DSS_SYSSTATUS, 7, 7)); in dispc_runtime_resume()
2643 dev_dbg(dispc->dev, "DISPC IDLE %d\n", in dispc_runtime_resume()
2644 REG_GET(dispc, DSS_SYSSTATUS, 9, 9)); in dispc_runtime_resume()
2646 dispc_initial_config(dispc); in dispc_runtime_resume()
2648 dispc->is_enabled = true; in dispc_runtime_resume()
2650 tidss_irq_resume(dispc->tidss); in dispc_runtime_resume()
2659 tidss->dispc = NULL; in dispc_remove()
2679 struct dispc_device *dispc) in dispc_init_am65x_oldi_io_ctrl() argument
2681 dispc->oldi_io_ctrl = in dispc_init_am65x_oldi_io_ctrl()
2684 if (PTR_ERR(dispc->oldi_io_ctrl) == -ENODEV) { in dispc_init_am65x_oldi_io_ctrl()
2685 dispc->oldi_io_ctrl = NULL; in dispc_init_am65x_oldi_io_ctrl()
2686 } else if (IS_ERR(dispc->oldi_io_ctrl)) { in dispc_init_am65x_oldi_io_ctrl()
2688 __func__, PTR_ERR(dispc->oldi_io_ctrl)); in dispc_init_am65x_oldi_io_ctrl()
2689 return PTR_ERR(dispc->oldi_io_ctrl); in dispc_init_am65x_oldi_io_ctrl()
2694 static void dispc_init_errata(struct dispc_device *dispc) in dispc_init_errata() argument
2702 dispc->errata.i2000 = true; in dispc_init_errata()
2703 dev_info(dispc->dev, "WA for erratum i2000: YUV formats disabled\n"); in dispc_init_errata()
2711 static void dispc_softreset_k2g(struct dispc_device *dispc) in dispc_softreset_k2g() argument
2715 spin_lock_irqsave(&dispc->tidss->wait_lock, flags); in dispc_softreset_k2g()
2716 dispc_set_irqenable(dispc, 0); in dispc_softreset_k2g()
2717 dispc_read_and_clear_irqstatus(dispc); in dispc_softreset_k2g()
2718 spin_unlock_irqrestore(&dispc->tidss->wait_lock, flags); in dispc_softreset_k2g()
2720 for (unsigned int vp_idx = 0; vp_idx < dispc->feat->num_vps; ++vp_idx) in dispc_softreset_k2g()
2721 VP_REG_FLD_MOD(dispc, vp_idx, DISPC_VP_CONTROL, 0, 0, 0); in dispc_softreset_k2g()
2724 static int dispc_softreset(struct dispc_device *dispc) in dispc_softreset() argument
2729 if (dispc->feat->subrev == DISPC_K2G) { in dispc_softreset()
2730 dispc_softreset_k2g(dispc); in dispc_softreset()
2735 REG_FLD_MOD(dispc, DSS_SYSCONFIG, 1, 1, 1); in dispc_softreset()
2737 ret = readl_poll_timeout(dispc->base_common + DSS_SYSSTATUS, in dispc_softreset()
2740 dev_err(dispc->dev, "failed to reset dispc\n"); in dispc_softreset()
2747 static int dispc_init_hw(struct dispc_device *dispc) in dispc_init_hw() argument
2749 struct device *dev = dispc->dev; in dispc_init_hw()
2758 ret = clk_prepare_enable(dispc->fclk); in dispc_init_hw()
2764 ret = dispc_softreset(dispc); in dispc_init_hw()
2768 clk_disable_unprepare(dispc->fclk); in dispc_init_hw()
2778 clk_disable_unprepare(dispc->fclk); in dispc_init_hw()
2794 struct dispc_device *dispc; in dispc_init() local
2811 dispc = devm_kzalloc(dev, sizeof(*dispc), GFP_KERNEL); in dispc_init()
2812 if (!dispc) in dispc_init()
2815 dispc->tidss = tidss; in dispc_init()
2816 dispc->dev = dev; in dispc_init()
2817 dispc->feat = feat; in dispc_init()
2819 dispc_init_errata(dispc); in dispc_init()
2821 dispc->fourccs = devm_kcalloc(dev, ARRAY_SIZE(dispc_color_formats), in dispc_init()
2822 sizeof(*dispc->fourccs), GFP_KERNEL); in dispc_init()
2823 if (!dispc->fourccs) in dispc_init()
2828 if (dispc->errata.i2000 && in dispc_init()
2832 dispc->fourccs[num_fourccs++] = dispc_color_formats[i].fourcc; in dispc_init()
2835 dispc->num_fourccs = num_fourccs; in dispc_init()
2837 dispc_common_regmap = dispc->feat->common_regs; in dispc_init()
2839 r = dispc_iomap_resource(pdev, dispc->feat->common, in dispc_init()
2840 &dispc->base_common); in dispc_init()
2844 for (i = 0; i < dispc->feat->num_planes; i++) { in dispc_init()
2845 r = dispc_iomap_resource(pdev, dispc->feat->vid_name[i], in dispc_init()
2846 &dispc->base_vid[i]); in dispc_init()
2851 for (i = 0; i < dispc->feat->num_vps; i++) { in dispc_init()
2852 u32 gamma_size = dispc->feat->vp_feat.color.gamma_size; in dispc_init()
2856 r = dispc_iomap_resource(pdev, dispc->feat->ovr_name[i], in dispc_init()
2857 &dispc->base_ovr[i]); in dispc_init()
2861 r = dispc_iomap_resource(pdev, dispc->feat->vp_name[i], in dispc_init()
2862 &dispc->base_vp[i]); in dispc_init()
2866 clk = devm_clk_get(dev, dispc->feat->vpclk_name[i]); in dispc_init()
2869 dispc->feat->vpclk_name[i], PTR_ERR(clk)); in dispc_init()
2872 dispc->vp_clk[i] = clk; in dispc_init()
2879 dispc->vp_data[i].gamma_table = gamma_table; in dispc_init()
2883 r = dispc_init_am65x_oldi_io_ctrl(dev, dispc); in dispc_init()
2888 dispc->fclk = devm_clk_get(dev, "fck"); in dispc_init()
2889 if (IS_ERR(dispc->fclk)) { in dispc_init()
2891 __func__, PTR_ERR(dispc->fclk)); in dispc_init()
2892 return PTR_ERR(dispc->fclk); in dispc_init()
2894 dev_dbg(dev, "DSS fclk %lu Hz\n", clk_get_rate(dispc->fclk)); in dispc_init()
2896 of_property_read_u32(dispc->dev->of_node, "max-memory-bandwidth", in dispc_init()
2897 &dispc->memory_bandwidth_limit); in dispc_init()
2899 r = dispc_init_hw(dispc); in dispc_init()
2903 tidss->dispc = dispc; in dispc_init()