Merge branch 'CR_1459_V4L2_515_mason.huo' into 'jh7110-5.15.y-devel'
authorandy.hu <andy.hu@starfivetech.com>
Fri, 1 Jul 2022 08:05:43 +0000 (08:05 +0000)
committerandy.hu <andy.hu@starfivetech.com>
Fri, 1 Jul 2022 08:05:43 +0000 (08:05 +0000)
Cr 1459 v4 l2 515 mason.huo

See merge request sdk/linux!224

arch/riscv/boot/dts/starfive/Makefile
arch/riscv/boot/dts/starfive/jh7110-evb-uart4-emmc-spdif.dts [moved from arch/riscv/boot/dts/starfive/jh7110-evb-uart4-emmc.dts with 88% similarity]
arch/riscv/boot/dts/starfive/jh7110.dtsi
drivers/soc/starfive/jh7110_pmu.c
include/soc/starfive/jh7110_pmu.h [new file with mode: 0755]

index ac4756f..c026fab 100644 (file)
@@ -8,5 +8,5 @@ dtb-$(CONFIG_SOC_STARFIVE_JH7110) += jh7110-visionfive-v2.dtb   \
                                jh7110-evb-pcie-i2s-sd.dtb      \
                                jh7110-evb-spi-uart2.dtb        \
                                jh7110-evb-uart1-rgb2hdmi.dtb   \
-                               jh7110-evb-uart4-emmc.dtb       \
+                               jh7110-evb-uart4-emmc-spdif.dtb \
                                jh7110-evb-uart5-pwm-i2c-tdm.dtb
@@ -6,6 +6,7 @@
 
 /dts-v1/;
 #include "jh7110-evb.dtsi"
+#include "codecs/sf_spdif.dtsi"
 
 / {
        model = "StarFive JH7110 EVB";
        pinctrl-0 = <&pwm_ch6to7_pins>;
        status = "okay";
 };
+
+&spdif0 {
+       status = "okay";
+};
+
+&spdif_transmitter {
+       status = "okay";
+};
+
+&spdif_receiver {
+       status = "okay";
+};
index f53992c..7f07996 100755 (executable)
                        reg = <0x0 0x100a0000 0x0 0x1000>;
                        clocks = <&clkgen JH7110_SPDIF_CLK_APB>,
                                 <&clkgen JH7110_SPDIF_CLK_CORE>,
-                                <&clkgen JH7110_MCLK>;
-                       clock-names = "spdif-apb", "spdif-core", "audioclk";
+                                <&clkgen JH7110_APB0>,
+                                <&clkgen JH7110_AUDIO_ROOT>,
+                                <&clkgen JH7110_MCLK_INNER>;
+                       clock-names = "spdif-apb", "spdif-core", "apb0",
+                                     "audroot", "mclk_inner";
                        resets = <&rstgen RSTN_U0_CDNS_SPDIF_APB>;
                        reset-names = "rst_apb";
                        interrupts = <84>;
index 74f09b7..51380f4 100755 (executable)
@@ -72,6 +72,19 @@ struct jh7110_pmu_data {
        unsigned int flags;
 };
 
+static void __iomem *pmu_base;
+
+static inline void pmu_writel(u32 val, u32 offset)
+{
+       writel(val, pmu_base + offset);
+}
+
+void starfive_pmu_hw_event_turn_off_mask(u32 mask)
+{
+       pmu_writel(mask, HW_EVENT_TURN_OFF_MASK);
+}
+EXPORT_SYMBOL(starfive_pmu_hw_event_turn_off_mask);
+
 static int jh7110_pmu_get_state(struct jh7110_power_dev *pmd, bool *is_on)
 {
        struct jh7110_pmu *pmu = pmd->power;
@@ -208,7 +221,7 @@ static int jh7110_pmu_probe(struct platform_device *pdev)
                return -ENOMEM;
 
        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       pmu->base = devm_ioremap_resource(&pdev->dev, res);
+       pmu_base = pmu->base = devm_ioremap_resource(&pdev->dev, res);
        if (IS_ERR(pmu->base))
                return PTR_ERR(pmu->base);
 
diff --git a/include/soc/starfive/jh7110_pmu.h b/include/soc/starfive/jh7110_pmu.h
new file mode 100755 (executable)
index 0000000..47838e0
--- /dev/null
@@ -0,0 +1,111 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * Reset driver for the StarFive JH7110 SoC
+ *
+ * Copyright (C) 2022 samin <samin.guo@starfivetech.com>
+ */
+
+#ifndef __SOC_STARFIVE_JH7110_PMU_H__
+#define __SOC_STARFIVE_JH7110_PMU_H__
+
+#include <linux/bits.h>
+#include <linux/types.h>
+
+/* SW/HW Power domain id  */
+enum PMU_POWER_DOMAIN {
+       POWER_DOMAIN_SYSTOP     = BIT(0),
+       POWER_DOMAIN_CPU        = BIT(1),
+       POWER_DOMAIN_GPUA       = BIT(2),
+       POWER_DOMAIN_VDEC       = BIT(3),
+       POWER_DOMAIN_JPU        = POWER_DOMAIN_VDEC,
+       POWER_DOMAIN_VOUT       = BIT(4),
+       POWER_DOMAIN_ISP        = BIT(5),
+       POWER_DOMAIN_VENC       = BIT(6),
+       POWER_DOMAIN_GPUB       = BIT(7),
+       POWER_DOMAIN_ALL        = GENMASK(7, 0),
+};
+
+enum PMU_HARD_EVENT {
+       PMU_HW_EVENT_RTC        = BIT(0),
+       PMU_HW_EVENT_GMAC       = BIT(1),
+       PMU_HW_EVENT_RFU        = BIT(2),
+       PMU_HW_EVENT_RGPIO0     = BIT(3),
+       PMU_HW_EVENT_RGPIO1     = BIT(4),
+       PMU_HW_EVENT_RGPIO2     = BIT(5),
+       PMU_HW_EVENT_RGPIO3     = BIT(6),
+       PMU_HW_EVENT_GPU        = BIT(7),
+       PMU_HW_EVENT_ALL        = GENMASK(7, 0),
+};
+
+/*
+ * @func: starfive_power_domain_set
+ * @dec: power domain turn-on/off by software
+ * @domain: power domain id
+ *     POWER_DOMAIN_SYSTOP:
+ *     POWER_DOMAIN_CPU
+ *     POWER_DOMAIN_GPUA
+ *     POWER_DOMAIN_VDEC
+ *     POWER_DOMAIN_VOUT
+ *     POWER_DOMAIN_ISP
+ *     POWER_DOMAIN_VENC
+ *     POWER_DOMAIN_GPUB
+ * @enable: 1:enable 0:disable
+ */
+//void starfive_power_domain_set(u32 domain, bool enable);
+
+/*
+ * @func: starfive_pmu_hw_encourage
+ * @dec: power domain turn-on/off by HW envent(interrupt)
+ * @domain: power domain id
+ * @event: Hardware trigger event. PMU_HARD_EVENT:
+       PMU_HW_EVENT_RTC,
+       PMU_HW_EVENT_GMAC,
+       PMU_HW_EVENT_RFU,
+       PMU_HW_EVENT_RGPIO0,
+       PMU_HW_EVENT_RGPIO1,
+       PMU_HW_EVENT_RGPIO2,
+       PMU_HW_EVENT_RGPIO3,
+       PMU_HW_EVENT_GPU,
+ * @enable: 1:enable 0:disable
+ *
+ * @for example:
+ *     starfive_power_domain_set_by_hwevent(POWER_DOMAIN_VDEC, RTC_EVENT, 0);
+ *
+ *     Means that when the RTC alarm is interrupted, the hardware
+ *     is triggered to close the power domain of VDEC.
+ */
+void starfive_power_domain_set_by_hwevent(u32 domain, u32 event, bool enable);
+
+/*
+ * @func: starfive_power_domain_order_on_get
+ * @dec: PMU power domian power on order get.
+ * @domian: powerff domain id
+ */
+int starfive_power_domain_order_on_get(u32 domain);
+
+/*
+ * @func: starfive_power_domain_order_off_get
+ * @dec: PMU power domian power off order get.
+ * @domian: power domain id
+ */
+int starfive_power_domain_order_off_get(u32 domain);
+
+/*
+ * @func: starfive_power_domain_order_on_set
+ * @dec: PMU power domian power on order set.
+ * @domian: powerff domain id
+ * @order: the poweron order of domain
+ */
+void starfive_power_domain_order_on_set(u32 domain, u32 order);
+
+/*
+ * @func: starfive_power_domain_order_off_set
+ * @dec: PMU power domian power off order set.
+ * @domian: power domain id
+ * @order: the poweroff order of domain
+ */
+void starfive_power_domain_order_off_set(u32 domain, u32 order);
+
+void starfive_pmu_hw_event_turn_off_mask(u32 mask);
+
+#endif /* __SOC_STARFIVE_JH7110_PMU_H__ */