@@ -364,6 +364,208 @@ static SUNXI_CCU_M_DATA_WITH_MUX(apb1_clk, "apb1", apb1_parents, 0x524,
364
364
24 , 3 , /* mux */
365
365
0 ) ;
366
366
367
+
368
+ /**************************************************************************
369
+ * mod clocks *
370
+ **************************************************************************/
371
+
372
+ static const struct clk_hw * de_parents [] = {
373
+ & pll_periph0_300M_clk .hw ,
374
+ & pll_periph0_400M_clk .hw ,
375
+ & pll_video3_4x_clk .common .hw ,
376
+ & pll_video3_3x_clk .hw ,
377
+ };
378
+
379
+ static SUNXI_CCU_M_HW_WITH_MUX_GATE (de_clk , "de ", de_parents , 0x600 ,
380
+ 0 , 5 , /* M */
381
+ 24 , 3 , /* mux */
382
+ BIT (31 ), /* gate */
383
+ CLK_SET_RATE_PARENT );
384
+
385
+ static const struct clk_hw * di_parents [] = {
386
+ & pll_periph0_300M_clk .hw ,
387
+ & pll_periph0_400M_clk .hw ,
388
+ & pll_video0_4x_clk .common .hw ,
389
+ & pll_video1_4x_clk .common .hw ,
390
+ };
391
+
392
+ static SUNXI_CCU_M_HW_WITH_MUX_GATE (di_clk , "di ", di_parents , 0x620 ,
393
+ 0 , 5 , /* M */
394
+ 24 , 3 , /* mux */
395
+ BIT (31 ), /* gate */
396
+ CLK_SET_RATE_PARENT );
397
+
398
+ static const struct clk_hw * g2d_parents [] = {
399
+ & pll_periph0_400M_clk .hw ,
400
+ & pll_periph0_300M_clk .hw ,
401
+ & pll_video0_4x_clk .common .hw ,
402
+ & pll_video1_4x_clk .common .hw ,
403
+ };
404
+
405
+ static SUNXI_CCU_M_HW_WITH_MUX_GATE (g2d_clk , "g2d ", g2d_parents , 0x630 ,
406
+ 0 , 5 , /* M */
407
+ 24 , 3 , /* mux */
408
+ BIT (31 ), /* gate */
409
+ 0 );
410
+
411
+ static const struct clk_hw * gpu_parents [] = {
412
+ & pll_gpu_clk .common .hw ,
413
+ & pll_periph0_800M_clk .common .hw ,
414
+ & pll_periph0_600M_clk .hw ,
415
+ & pll_periph0_400M_clk .hw ,
416
+ & pll_periph0_300M_clk .hw ,
417
+ & pll_periph0_200M_clk .hw ,
418
+ };
419
+
420
+ static SUNXI_CCU_M_HW_WITH_MUX_GATE (gpu_clk , "gpu ", gpu_parents , 0x670 ,
421
+ 0 , 4 , /* M */
422
+ 24 , 3 , /* mux */
423
+ BIT (31 ), /* gate */
424
+ CLK_SET_RATE_PARENT );
425
+
426
+ static const struct clk_hw * ve_parents [] = {
427
+ & pll_ve_clk .common .hw ,
428
+ & pll_periph0_480M_clk .common .hw ,
429
+ & pll_periph0_400M_clk .hw ,
430
+ & pll_periph0_300M_clk .hw ,
431
+ };
432
+ static SUNXI_CCU_M_HW_WITH_MUX_GATE (ve_clk , "ve ", ve_parents , 0x690 ,
433
+ 0 , 5 , /* M */
434
+ 24 , 3 , /* mux */
435
+ BIT (31 ), /* gate */
436
+ CLK_SET_RATE_PARENT );
437
+
438
+ static const struct clk_parent_data iommu_parents [] = {
439
+ { .hw = & pll_periph0_600M_clk .hw },
440
+ { .hw = & pll_ddr_clk .common .hw },
441
+ { .hw = & pll_periph0_480M_clk .common .hw },
442
+ { .hw = & pll_periph0_400M_clk .hw },
443
+ { .hw = & pll_periph0_150M_clk .hw },
444
+ { .fw_name = "hosc" },
445
+ };
446
+
447
+ static SUNXI_CCU_MP_DATA_WITH_MUX_GATE_FEAT (iommu_clk , "iommu ", iommu_parents ,
448
+ 0x7b0 ,
449
+ 0 , 5 , /* M */
450
+ 0 , 0 , /* no P */
451
+ 24 , 3 , /* mux */
452
+ BIT (31 ), /* gate */
453
+ CLK_SET_RATE_PARENT ,
454
+ CCU_FEATURE_UPDATE_BIT );
455
+
456
+ static SUNXI_CCU_GATE_DATA (hdmi_24M_clk , "hdmi -24 M ", osc24M , 0xb04 , BIT (31 ), 0 );
457
+
458
+ static SUNXI_CCU_GATE_HWS_WITH_PREDIV (hdmi_cec_32k_clk , "hdmi - cec -32 k ",
459
+ pll_periph0_2x_hws ,
460
+ 0xb10 , BIT (30 ), 36621 , 0 );
461
+
462
+ static const struct clk_parent_data hdmi_cec_parents [] = {
463
+ { .fw_name = "losc " },
464
+ { .hw = & hdmi_cec_32k_clk .common .hw },
465
+ };
466
+ static SUNXI_CCU_MUX_DATA_WITH_GATE (hdmi_cec_clk , "hdmi - cec ", hdmi_cec_parents ,
467
+ 0xb10 ,
468
+ 24 , 1 , /* mux */
469
+ BIT (31 ), /* gate */
470
+ 0 );
471
+
472
+ static const struct clk_parent_data mipi_dsi_parents [] = {
473
+ { .fw_name = "hosc " },
474
+ { .hw = & pll_periph0_200M_clk .hw },
475
+ { .hw = & pll_periph0_150M_clk .hw },
476
+ };
477
+ static SUNXI_CCU_M_DATA_WITH_MUX_GATE (mipi_dsi0_clk , "mipi - dsi0 ",
478
+ mipi_dsi_parents , 0xb24 ,
479
+ 0 , 5 , /* M */
480
+ 24 , 3 , /* mux */
481
+ BIT (31 ), /* gate */
482
+ 0 );
483
+
484
+ static SUNXI_CCU_M_DATA_WITH_MUX_GATE (mipi_dsi1_clk , "mipi - dsi1 ",
485
+ mipi_dsi_parents , 0xb28 ,
486
+ 0 , 5 , /* M */
487
+ 24 , 3 , /* mux */
488
+ BIT (31 ), /* gate */
489
+ 0 );
490
+
491
+ static const struct clk_hw * tcon_parents [] = {
492
+ & pll_video0_4x_clk .common .hw ,
493
+ & pll_video1_4x_clk .common .hw ,
494
+ & pll_video2_4x_clk .common .hw ,
495
+ & pll_video3_4x_clk .common .hw ,
496
+ & pll_periph0_2x_clk .common .hw ,
497
+ & pll_video0_3x_clk .hw ,
498
+ & pll_video1_3x_clk .hw ,
499
+ };
500
+ static SUNXI_CCU_M_HW_WITH_MUX_GATE (tcon_lcd0_clk , "tcon - lcd0 ", tcon_parents ,
501
+ 0xb60 ,
502
+ 0 , 5 , /* M */
503
+ 24 , 3 , /* mux */
504
+ BIT (31 ), /* gate */
505
+ CLK_SET_RATE_PARENT );
506
+
507
+ static SUNXI_CCU_M_HW_WITH_MUX_GATE (tcon_lcd1_clk , "tcon - lcd1 ", tcon_parents ,
508
+ 0xb64 ,
509
+ 0 , 5 , /* M */
510
+ 24 , 3 , /* mux */
511
+ BIT (31 ), /* gate */
512
+ CLK_SET_RATE_PARENT );
513
+
514
+ static const struct clk_hw * tcon_tv_parents [] = {
515
+ & pll_video0_4x_clk .common .hw ,
516
+ & pll_video1_4x_clk .common .hw ,
517
+ & pll_video2_4x_clk .common .hw ,
518
+ & pll_video3_4x_clk .common .hw ,
519
+ & pll_periph0_2x_clk .common .hw ,
520
+ };
521
+ static SUNXI_CCU_M_HW_WITH_MUX_GATE (tcon_lcd2_clk , "tcon-lcd2" ,
522
+ tcon_tv_parents , 0xb68 ,
523
+ 0 , 5 , /* M */
524
+ 24 , 3 , /* mux */
525
+ BIT (31 ), /* gate */
526
+ CLK_SET_RATE_PARENT );
527
+
528
+ static SUNXI_CCU_M_HW_WITH_MUX_GATE (combophy_dsi0_clk , "combophy-dsi0" ,
529
+ tcon_parents , 0xb6c ,
530
+ 0 , 5 , /* M */
531
+ 24 , 3 , /* mux */
532
+ BIT (31 ), /* gate */
533
+ CLK_SET_RATE_PARENT );
534
+
535
+ static SUNXI_CCU_M_HW_WITH_MUX_GATE (combophy_dsi1_clk , "combophy-dsi1" ,
536
+ tcon_parents , 0xb70 ,
537
+ 0 , 5 , /* M */
538
+ 24 , 3 , /* mux */
539
+ BIT (31 ), /* gate */
540
+ CLK_SET_RATE_PARENT );
541
+
542
+ static SUNXI_CCU_M_HW_WITH_MUX_GATE (tcon_tv0_clk , "tcon-tv0" , tcon_tv_parents ,
543
+ 0xb80 ,
544
+ 0 , 4 , /* M */
545
+ 24 , 3 , /* mux */
546
+ BIT (31 ), /* gate */
547
+ CLK_SET_RATE_PARENT );
548
+
549
+ static SUNXI_CCU_M_HW_WITH_MUX_GATE (tcon_tv1_clk , "tcon-tv1" , tcon_tv_parents ,
550
+ 0xb84 ,
551
+ 0 , 4 , /* M */
552
+ 24 , 3 , /* mux */
553
+ BIT (31 ), /* gate */
554
+ CLK_SET_RATE_PARENT );
555
+
556
+ static const struct clk_hw * edp_parents [] = {
557
+ & pll_video0_4x_clk .common .hw ,
558
+ & pll_video1_4x_clk .common .hw ,
559
+ & pll_video2_4x_clk .common .hw ,
560
+ & pll_video3_4x_clk .common .hw ,
561
+ & pll_periph0_2x_clk .common .hw ,
562
+ };
563
+ static SUNXI_CCU_M_HW_WITH_MUX_GATE (edp_clk , "edp ", edp_parents , 0xbb0 ,
564
+ 0 , 4 , /* M */
565
+ 24 , 3 , /* mux */
566
+ BIT (31 ), /* gate */
567
+ CLK_SET_RATE_PARENT );
568
+
367
569
/*
368
570
* Contains all clocks that are controlled by a hardware register. They
369
571
* have a (sunxi) .common member, which needs to be initialised by the common
@@ -394,6 +596,23 @@ static struct ccu_common *sun55i_a523_ccu_clks[] = {
394
596
& ahb_clk .common ,
395
597
& apb0_clk .common ,
396
598
& apb1_clk .common ,
599
+ & de_clk .common ,
600
+ & di_clk .common ,
601
+ & g2d_clk .common ,
602
+ & gpu_clk .common ,
603
+ & ve_clk .common ,
604
+ & iommu_clk .common ,
605
+ & hdmi_24M_clk .common ,
606
+ & hdmi_cec_32k_clk .common ,
607
+ & hdmi_cec_clk .common ,
608
+ & mipi_dsi0_clk .common ,
609
+ & mipi_dsi1_clk .common ,
610
+ & tcon_lcd0_clk .common ,
611
+ & tcon_lcd1_clk .common ,
612
+ & tcon_lcd2_clk .common ,
613
+ & tcon_tv0_clk .common ,
614
+ & tcon_tv1_clk .common ,
615
+ & edp_clk .common ,
397
616
};
398
617
399
618
static struct clk_hw_onecell_data sun55i_a523_hw_clks = {
@@ -420,6 +639,7 @@ static struct clk_hw_onecell_data sun55i_a523_hw_clks = {
420
639
[CLK_PLL_PERIPH1_200M ] = & pll_periph1_200M_clk .hw ,
421
640
[CLK_PLL_PERIPH1_160M ] = & pll_periph1_160M_clk .hw ,
422
641
[CLK_PLL_PERIPH1_150M ] = & pll_periph1_150M_clk .hw ,
642
+ [CLK_PLL_GPU ] = & pll_gpu_clk .common .hw ,
423
643
[CLK_PLL_VIDEO0_8X ] = & pll_video0_8x_clk .common .hw ,
424
644
[CLK_PLL_VIDEO0_4X ] = & pll_video0_4x_clk .common .hw ,
425
645
[CLK_PLL_VIDEO0_3X ] = & pll_video0_3x_clk .hw ,
@@ -442,6 +662,24 @@ static struct clk_hw_onecell_data sun55i_a523_hw_clks = {
442
662
[CLK_AHB ] = & ahb_clk .common .hw ,
443
663
[CLK_APB0 ] = & apb0_clk .common .hw ,
444
664
[CLK_APB1 ] = & apb1_clk .common .hw ,
665
+ [CLK_DE ] = & de_clk .common .hw ,
666
+ [CLK_DI ] = & di_clk .common .hw ,
667
+ [CLK_G2D ] = & g2d_clk .common .hw ,
668
+ [CLK_GPU ] = & gpu_clk .common .hw ,
669
+ [CLK_VE ] = & ve_clk .common .hw ,
670
+ [CLK_HDMI_24M ] = & hdmi_24M_clk .common .hw ,
671
+ [CLK_HDMI_CEC_32K ] = & hdmi_cec_32k_clk .common .hw ,
672
+ [CLK_HDMI_CEC ] = & hdmi_cec_clk .common .hw ,
673
+ [CLK_MIPI_DSI0 ] = & mipi_dsi0_clk .common .hw ,
674
+ [CLK_MIPI_DSI1 ] = & mipi_dsi1_clk .common .hw ,
675
+ [CLK_TCON_LCD0 ] = & tcon_lcd0_clk .common .hw ,
676
+ [CLK_TCON_LCD1 ] = & tcon_lcd1_clk .common .hw ,
677
+ [CLK_TCON_LCD2 ] = & tcon_lcd2_clk .common .hw ,
678
+ [CLK_COMBOPHY_DSI0 ] = & combophy_dsi0_clk .common .hw ,
679
+ [CLK_COMBOPHY_DSI1 ] = & combophy_dsi1_clk .common .hw ,
680
+ [CLK_TCON_TV0 ] = & tcon_tv0_clk .common .hw ,
681
+ [CLK_TCON_TV1 ] = & tcon_tv1_clk .common .hw ,
682
+ [CLK_EDP ] = & edp_clk .common .hw ,
445
683
},
446
684
};
447
685
0 commit comments