.. | .. |
---|
19 | 19 | #include "owl-gate.h" |
---|
20 | 20 | #include "owl-mux.h" |
---|
21 | 21 | #include "owl-pll.h" |
---|
| 22 | +#include "owl-reset.h" |
---|
22 | 23 | |
---|
23 | 24 | #include <dt-bindings/clock/actions,s900-cmu.h> |
---|
| 25 | +#include <dt-bindings/reset/actions,s900-reset.h> |
---|
24 | 26 | |
---|
25 | 27 | #define CMU_COREPLL (0x0000) |
---|
26 | 28 | #define CMU_DEVPLL (0x0004) |
---|
.. | .. |
---|
138 | 140 | |
---|
139 | 141 | static struct clk_div_table usb3_mac_div_table[] = { |
---|
140 | 142 | { 1, 2 }, { 2, 3 }, { 3, 4 }, |
---|
141 | | - { 0, 8 }, |
---|
| 143 | + { 0, 0 } |
---|
142 | 144 | }; |
---|
143 | 145 | |
---|
144 | 146 | static struct clk_div_table i2s_div_table[] = { |
---|
.. | .. |
---|
684 | 686 | .num = CLK_NR_CLKS, |
---|
685 | 687 | }; |
---|
686 | 688 | |
---|
687 | | -static const struct owl_clk_desc s900_clk_desc = { |
---|
| 689 | +static const struct owl_reset_map s900_resets[] = { |
---|
| 690 | + [RESET_DMAC] = { CMU_DEVRST0, BIT(0) }, |
---|
| 691 | + [RESET_SRAMI] = { CMU_DEVRST0, BIT(1) }, |
---|
| 692 | + [RESET_DDR_CTL_PHY] = { CMU_DEVRST0, BIT(2) }, |
---|
| 693 | + [RESET_NANDC0] = { CMU_DEVRST0, BIT(3) }, |
---|
| 694 | + [RESET_SD0] = { CMU_DEVRST0, BIT(4) }, |
---|
| 695 | + [RESET_SD1] = { CMU_DEVRST0, BIT(5) }, |
---|
| 696 | + [RESET_PCM1] = { CMU_DEVRST0, BIT(6) }, |
---|
| 697 | + [RESET_DE] = { CMU_DEVRST0, BIT(7) }, |
---|
| 698 | + [RESET_LVDS] = { CMU_DEVRST0, BIT(8) }, |
---|
| 699 | + [RESET_SD2] = { CMU_DEVRST0, BIT(9) }, |
---|
| 700 | + [RESET_DSI] = { CMU_DEVRST0, BIT(10) }, |
---|
| 701 | + [RESET_CSI0] = { CMU_DEVRST0, BIT(11) }, |
---|
| 702 | + [RESET_BISP_AXI] = { CMU_DEVRST0, BIT(12) }, |
---|
| 703 | + [RESET_CSI1] = { CMU_DEVRST0, BIT(13) }, |
---|
| 704 | + [RESET_GPIO] = { CMU_DEVRST0, BIT(15) }, |
---|
| 705 | + [RESET_EDP] = { CMU_DEVRST0, BIT(16) }, |
---|
| 706 | + [RESET_AUDIO] = { CMU_DEVRST0, BIT(17) }, |
---|
| 707 | + [RESET_PCM0] = { CMU_DEVRST0, BIT(18) }, |
---|
| 708 | + [RESET_HDE] = { CMU_DEVRST0, BIT(21) }, |
---|
| 709 | + [RESET_GPU3D_PA] = { CMU_DEVRST0, BIT(22) }, |
---|
| 710 | + [RESET_IMX] = { CMU_DEVRST0, BIT(23) }, |
---|
| 711 | + [RESET_SE] = { CMU_DEVRST0, BIT(24) }, |
---|
| 712 | + [RESET_NANDC1] = { CMU_DEVRST0, BIT(25) }, |
---|
| 713 | + [RESET_SD3] = { CMU_DEVRST0, BIT(26) }, |
---|
| 714 | + [RESET_GIC] = { CMU_DEVRST0, BIT(27) }, |
---|
| 715 | + [RESET_GPU3D_PB] = { CMU_DEVRST0, BIT(28) }, |
---|
| 716 | + [RESET_DDR_CTL_PHY_AXI] = { CMU_DEVRST0, BIT(29) }, |
---|
| 717 | + [RESET_CMU_DDR] = { CMU_DEVRST0, BIT(30) }, |
---|
| 718 | + [RESET_DMM] = { CMU_DEVRST0, BIT(31) }, |
---|
| 719 | + [RESET_USB2HUB] = { CMU_DEVRST1, BIT(0) }, |
---|
| 720 | + [RESET_USB2HSIC] = { CMU_DEVRST1, BIT(1) }, |
---|
| 721 | + [RESET_HDMI] = { CMU_DEVRST1, BIT(2) }, |
---|
| 722 | + [RESET_HDCP2TX] = { CMU_DEVRST1, BIT(3) }, |
---|
| 723 | + [RESET_UART6] = { CMU_DEVRST1, BIT(4) }, |
---|
| 724 | + [RESET_UART0] = { CMU_DEVRST1, BIT(5) }, |
---|
| 725 | + [RESET_UART1] = { CMU_DEVRST1, BIT(6) }, |
---|
| 726 | + [RESET_UART2] = { CMU_DEVRST1, BIT(7) }, |
---|
| 727 | + [RESET_SPI0] = { CMU_DEVRST1, BIT(8) }, |
---|
| 728 | + [RESET_SPI1] = { CMU_DEVRST1, BIT(9) }, |
---|
| 729 | + [RESET_SPI2] = { CMU_DEVRST1, BIT(10) }, |
---|
| 730 | + [RESET_SPI3] = { CMU_DEVRST1, BIT(11) }, |
---|
| 731 | + [RESET_I2C0] = { CMU_DEVRST1, BIT(12) }, |
---|
| 732 | + [RESET_I2C1] = { CMU_DEVRST1, BIT(13) }, |
---|
| 733 | + [RESET_USB3] = { CMU_DEVRST1, BIT(14) }, |
---|
| 734 | + [RESET_UART3] = { CMU_DEVRST1, BIT(15) }, |
---|
| 735 | + [RESET_UART4] = { CMU_DEVRST1, BIT(16) }, |
---|
| 736 | + [RESET_UART5] = { CMU_DEVRST1, BIT(17) }, |
---|
| 737 | + [RESET_I2C2] = { CMU_DEVRST1, BIT(18) }, |
---|
| 738 | + [RESET_I2C3] = { CMU_DEVRST1, BIT(19) }, |
---|
| 739 | + [RESET_ETHERNET] = { CMU_DEVRST1, BIT(20) }, |
---|
| 740 | + [RESET_CHIPID] = { CMU_DEVRST1, BIT(21) }, |
---|
| 741 | + [RESET_I2C4] = { CMU_DEVRST1, BIT(22) }, |
---|
| 742 | + [RESET_I2C5] = { CMU_DEVRST1, BIT(23) }, |
---|
| 743 | + [RESET_CPU_SCNT] = { CMU_DEVRST1, BIT(30) } |
---|
| 744 | +}; |
---|
| 745 | + |
---|
| 746 | +static struct owl_clk_desc s900_clk_desc = { |
---|
688 | 747 | .clks = s900_clks, |
---|
689 | 748 | .num_clks = ARRAY_SIZE(s900_clks), |
---|
690 | 749 | |
---|
691 | 750 | .hw_clks = &s900_hw_clks, |
---|
| 751 | + |
---|
| 752 | + .resets = s900_resets, |
---|
| 753 | + .num_resets = ARRAY_SIZE(s900_resets), |
---|
692 | 754 | }; |
---|
693 | 755 | |
---|
694 | 756 | static int s900_clk_probe(struct platform_device *pdev) |
---|
695 | 757 | { |
---|
696 | | - const struct owl_clk_desc *desc; |
---|
| 758 | + struct owl_clk_desc *desc; |
---|
| 759 | + struct owl_reset *reset; |
---|
| 760 | + int ret; |
---|
697 | 761 | |
---|
698 | 762 | desc = &s900_clk_desc; |
---|
699 | 763 | owl_clk_regmap_init(pdev, desc); |
---|
700 | 764 | |
---|
| 765 | + /* |
---|
| 766 | + * FIXME: Reset controller registration should be moved to |
---|
| 767 | + * common code, once all SoCs of Owl family supports it. |
---|
| 768 | + */ |
---|
| 769 | + reset = devm_kzalloc(&pdev->dev, sizeof(*reset), GFP_KERNEL); |
---|
| 770 | + if (!reset) |
---|
| 771 | + return -ENOMEM; |
---|
| 772 | + |
---|
| 773 | + reset->rcdev.of_node = pdev->dev.of_node; |
---|
| 774 | + reset->rcdev.ops = &owl_reset_ops; |
---|
| 775 | + reset->rcdev.nr_resets = desc->num_resets; |
---|
| 776 | + reset->reset_map = desc->resets; |
---|
| 777 | + reset->regmap = desc->regmap; |
---|
| 778 | + |
---|
| 779 | + ret = devm_reset_controller_register(&pdev->dev, &reset->rcdev); |
---|
| 780 | + if (ret) |
---|
| 781 | + dev_err(&pdev->dev, "Failed to register reset controller\n"); |
---|
| 782 | + |
---|
701 | 783 | return owl_clk_probe(&pdev->dev, desc->hw_clks); |
---|
702 | 784 | } |
---|
703 | 785 | |
---|