Thanks! Will give both a shot when $dayjob gives me some more
breathingroom.

With best regards,
Tobias

On Tue, 2024-02-06 at 22:37 +0900, SASANO Takayoshi wrote:
> Hello,
> 
> I am working for H616 since OrangePi Zero2...
> 
> Here's the diff. sximmc.c is reconstructed.
> 
> Index: ehci_fdt.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/fdt/ehci_fdt.c,v
> diff -u -p -r1.11 ehci_fdt.c
> --- ehci_fdt.c        26 Jan 2024 17:11:50 -0000      1.11
> +++ ehci_fdt.c        6 Feb 2024 12:48:22 -0000
> @@ -207,6 +207,7 @@ struct ehci_phy ehci_phys[] = {
>       { "allwinner,sun8i-v3s-usb-phy", sun4i_phy_init },
>       { "allwinner,sun20i-d1-usb-phy", sun4i_phy_init },
>       { "allwinner,sun50i-h6-usb-phy", sun4i_phy_init },
> +     { "allwinner,sun50i-h616-usb-phy", sun4i_phy_init },
>       { "allwinner,sun50i-a64-usb-phy", sun4i_phy_init },
>       { "allwinner,sun9i-a80-usb-phy", sun9i_phy_init },
>  };
> @@ -287,6 +288,62 @@ ehci_init_phys(struct ehci_fdt_softc *sc
>  #define  SUNXI_AHB_INCR16    (1 << 11)
>  
>  void
> +sun50i_h616_phy2_init(struct ehci_fdt_softc *sc, int node)
> +{
> +     int len, idx;
> +     uint32_t *reg, val;
> +     bus_size_t size;
> +     bus_space_handle_t ioh;
> +
> +     /*
> +      * to access USB2-PHY register, get address from "reg"
> property of
> +      * current "allwinner,...-usb-phy" node
> +      */
> +     len = OF_getproplen(node, "reg");
> +     if (len <= 0)
> +             goto out;
> +
> +     reg = malloc(len, M_TEMP, M_WAITOK);
> +     OF_getpropintarray(node, "reg", reg, len);
> +
> +     idx = OF_getindex(node, "pmu2", "reg-names");
> +     if (idx < 0 || (idx + 1) > (len / (sizeof(uint32_t) * 2))) {
> +             printf(": no phy2 register\n");
> +             goto free;
> +     }
> +
> +     /* convert "reg-names" index to "reg" (address-size pair)
> index */
> +     idx *= 2;
> +
> +     size = reg[idx + 1];
> +     if (bus_space_map(sc->sc.iot, reg[idx], size, 0, &ioh)) {
> +             printf(": can't map phy2 registers\n");
> +             goto free;
> +     }
> +
> +     clock_enable(node, "usb2_phy");
> +     reset_deassert(node, "usb2_reset");
> +     clock_enable(node, "pmu2_clk");
> +
> +     /*
> +      * address is offset from "pmu2", not EHCI2 base address
> +      * (normally it points EHCI2 base address + 0x810)
> +      */
> +     val = bus_space_read_4(sc->sc.iot, ioh, 0x10);
> +     val &= ~(1 << 3);       /* clear SIDDQ */
> +     bus_space_write_4(sc->sc.iot, ioh, 0x10, val);
> +
> +     clock_disable(node, "pmu2_clk");
> +     /* "usb2_reset" and "usb2_phy" unchanged */
> +
> +     bus_space_unmap(sc->sc.iot, ioh, size);
> +free:
> +     free(reg, M_TEMP, len);
> +out:
> +     return;
> +}
> +
> +void
>  sun4i_phy_init(struct ehci_fdt_softc *sc, uint32_t *cells)
>  {
>       uint32_t vbus_supply;
> @@ -298,6 +355,11 @@ sun4i_phy_init(struct ehci_fdt_softc *sc
>       if (node == -1)
>               return;
>  
> +     /* Allwinner H616 needs to clear PHY2's SIDDQ flag */
> +     if (OF_is_compatible(node, "allwinner,sun50i-h616-usb-phy")
> &&
> +         cells[1] != 2)
> +             sun50i_h616_phy2_init(sc, node);
> +
>       val = bus_space_read_4(sc->sc.iot, sc->sc.ioh,
> SUNXI_HCI_ICR);
>       val |= SUNXI_AHB_INCR8 | SUNXI_AHB_INCR4;
>       val |= SUNXI_AHB_INCRX_ALIGN;
> @@ -318,6 +380,13 @@ sun4i_phy_init(struct ehci_fdt_softc *sc
>       } else if (OF_is_compatible(node, "allwinner,sun20i-d1-usb-
> phy")) {
>               val = bus_space_read_4(sc->sc.iot, sc->sc.ioh,
> 0x810);
>               val &= ~(1 << 3);
> +             bus_space_write_4(sc->sc.iot, sc->sc.ioh, 0x810,
> val);
> +     }
> +     if (OF_is_compatible(node, "allwinner,sun50i-h616-usb-phy")
> ||
> +         OF_is_compatible(node, "allwinner,sun50i-a83t-usb-phy"))
> {
> +             val = bus_space_read_4(sc->sc.iot, sc->sc.ioh,
> 0x810);
> +             val |= 1 << 5;          /* set VBUSVLDEXT */
> +             val &= ~(1 << 3);       /* clear SIDDQ */
>               bus_space_write_4(sc->sc.iot, sc->sc.ioh, 0x810,
> val);
>       }
>  
> Index: sxiccmu.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/fdt/sxiccmu.c,v
> diff -u -p -r1.34 sxiccmu.c
> --- sxiccmu.c 2 Feb 2024 12:01:49 -0000       1.34
> +++ sxiccmu.c 6 Feb 2024 12:48:23 -0000
> @@ -106,6 +106,9 @@ uint32_t sxiccmu_h3_r_get_frequency(stru
>  uint32_t sxiccmu_h6_get_frequency(struct sxiccmu_softc *, uint32_t);
>  int  sxiccmu_h6_set_frequency(struct sxiccmu_softc *, uint32_t,
> uint32_t);
>  uint32_t sxiccmu_h6_r_get_frequency(struct sxiccmu_softc *,
> uint32_t);
> +uint32_t sxiccmu_h616_get_frequency(struct sxiccmu_softc *,
> uint32_t);
> +int  sxiccmu_h616_set_frequency(struct sxiccmu_softc *, uint32_t,
> uint32_t);
> +uint32_t sxiccmu_h616_r_get_frequency(struct sxiccmu_softc *,
> uint32_t);
>  uint32_t sxiccmu_r40_get_frequency(struct sxiccmu_softc *,
> uint32_t);
>  int  sxiccmu_r40_set_frequency(struct sxiccmu_softc *, uint32_t,
> uint32_t);
>  uint32_t sxiccmu_v3s_get_frequency(struct sxiccmu_softc *,
> uint32_t);
> @@ -152,7 +155,9 @@ sxiccmu_match(struct device *parent, voi
>           OF_is_compatible(node, "allwinner,sun50i-a64-r-ccu") ||
>           OF_is_compatible(node, "allwinner,sun50i-h5-ccu") ||
>           OF_is_compatible(node, "allwinner,sun50i-h6-ccu") ||
> -         OF_is_compatible(node, "allwinner,sun50i-h6-r-ccu"));
> +         OF_is_compatible(node, "allwinner,sun50i-h6-r-ccu") ||
> +         OF_is_compatible(node, "allwinner,sun50i-h616-ccu") ||
> +         OF_is_compatible(node, "allwinner,sun50i-h616-r-ccu"));
>  }
>  
>  void
> @@ -287,6 +292,22 @@ sxiccmu_attach(struct device *parent, st
>               sc->sc_nresets = nitems(sun50i_h6_r_resets);
>               sc->sc_get_frequency = sxiccmu_h6_r_get_frequency;
>               sc->sc_set_frequency = sxiccmu_nop_set_frequency;
> +     } else if (OF_is_compatible(node, "allwinner,sun50i-h616-
> ccu")) {
> +             KASSERT(faa->fa_nreg > 0);
> +             sc->sc_gates = sun50i_h616_gates;
> +             sc->sc_ngates = nitems(sun50i_h616_gates);
> +             sc->sc_resets = sun50i_h616_resets;
> +             sc->sc_nresets = nitems(sun50i_h616_resets);
> +             sc->sc_get_frequency = sxiccmu_h616_get_frequency;
> +             sc->sc_set_frequency = sxiccmu_h616_set_frequency;
> +     } else if (OF_is_compatible(node, "allwinner,sun50i-h616-r-
> ccu")) {
> +             KASSERT(faa->fa_nreg > 0);
> +             sc->sc_gates = sun50i_h616_r_gates;
> +             sc->sc_ngates = nitems(sun50i_h616_r_gates);
> +             sc->sc_resets = sun50i_h616_r_resets;
> +             sc->sc_nresets = nitems(sun50i_h616_r_resets);
> +             sc->sc_get_frequency = sxiccmu_h616_r_get_frequency;
> +             sc->sc_set_frequency = sxiccmu_nop_set_frequency;
>       } else {
>               for (node = OF_child(node); node; node =
> OF_peer(node))
>                       sxiccmu_attach_clock(sc, node, faa-
> >fa_nreg);
> @@ -1400,7 +1421,6 @@ sxiccmu_h6_get_frequency(struct sxiccmu_
>       case H6_CLK_APB2:
>               /* XXX Controlled by a MUX. */
>               return 24000000;
> -             break;
>       }
>  
>       printf("%s: 0x%08x\n", __func__, idx);
> @@ -1414,7 +1434,52 @@ sxiccmu_h6_r_get_frequency(struct sxiccm
>       case H6_R_CLK_APB2:
>               /* XXX Controlled by a MUX. */
>               return 24000000;
> -             break;
> +     }
> +
> +     printf("%s: 0x%08x\n", __func__, idx);
> +     return 0;
> +}
> +
> +/* Allwinner H616 */
> +#define H616_AHB3_CFG_REG            0x051c
> +#define H616_AHB3_CLK_FACTOR_N(x)    (((x) >> 8) & 0x3)
> +#define H616_AHB3_CLK_FACTOR_M(x)    (((x) >> 0) & 0x3)
> +
> +uint32_t
> +sxiccmu_h616_get_frequency(struct sxiccmu_softc *sc, uint32_t idx)
> +{
> +     uint32_t reg, m, n;
> +     uint32_t freq;
> +
> +     switch (idx) {
> +     case H616_CLK_PLL_PERIPH0:
> +             /* Not hardcoded, but recommended. */
> +             return 600000000;
> +     case H616_CLK_PLL_PERIPH0_2X:
> +             return sxiccmu_h616_get_frequency(sc,
> H616_CLK_PLL_PERIPH0) * 2;
> +     case H616_CLK_AHB3:
> +             reg = SXIREAD4(sc, H616_AHB3_CFG_REG);
> +             /* assume PLL_PERIPH0 source */
> +             freq = sxiccmu_h616_get_frequency(sc,
> H616_CLK_PLL_PERIPH0);
> +             m = H616_AHB3_CLK_FACTOR_M(reg) + 1;
> +             n = 1 << H616_AHB3_CLK_FACTOR_N(reg);
> +             return freq / (m * n);
> +     case H616_CLK_APB2:
> +             /* XXX Controlled by a MUX. */
> +             return 24000000;
> +     }
> +
> +     printf("%s: 0x%08x\n", __func__, idx);
> +     return 0;
> +}
> +
> +uint32_t
> +sxiccmu_h616_r_get_frequency(struct sxiccmu_softc *sc, uint32_t idx)
> +{
> +     switch (idx) {
> +     case H616_R_CLK_APB2:
> +             /* XXX Controlled by a MUX. */
> +             return 24000000;
>       }
>  
>       printf("%s: 0x%08x\n", __func__, idx);
> @@ -1864,9 +1929,8 @@ sxiccmu_h3_set_frequency(struct sxiccmu_
>  
>  int
>  sxiccmu_h6_mmc_set_frequency(struct sxiccmu_softc *sc, bus_size_t
> offset,
> -    uint32_t freq)
> +    uint32_t freq, uint32_t parent_freq)
>  {
> -     uint32_t parent_freq;
>       uint32_t reg, m, n;
>       uint32_t clk_src;
>  
> @@ -1882,8 +1946,6 @@ sxiccmu_h6_mmc_set_frequency(struct sxic
>       case 52000000:
>               n = 0, m = 0;
>               clk_src = H6_SMHC_CLK_SRC_SEL_PLL_PERIPH0_2X;
> -             parent_freq =
> -                 sxiccmu_h6_get_frequency(sc,
> H6_CLK_PLL_PERIPH0_2X);
>               while ((parent_freq / (1 << n) / 16) > freq)
>                       n++;
>               while ((parent_freq / (1 << n) / (m + 1)) > freq)
> @@ -1908,13 +1970,47 @@ sxiccmu_h6_mmc_set_frequency(struct sxic
>  int
>  sxiccmu_h6_set_frequency(struct sxiccmu_softc *sc, uint32_t idx,
> uint32_t freq)
>  {
> +     uint32_t parent_freq;
> +
> +     parent_freq = sxiccmu_h6_get_frequency(sc,
> H6_CLK_PLL_PERIPH0_2X);
> +
>       switch (idx) {
>       case H6_CLK_MMC0:
> -             return sxiccmu_h6_mmc_set_frequency(sc,
> H6_SMHC0_CLK_REG, freq);
> +             return sxiccmu_h6_mmc_set_frequency(sc,
> H6_SMHC0_CLK_REG,
> +                                                 freq,
> parent_freq);
>       case H6_CLK_MMC1:
> -             return sxiccmu_h6_mmc_set_frequency(sc,
> H6_SMHC1_CLK_REG, freq);
> +             return sxiccmu_h6_mmc_set_frequency(sc,
> H6_SMHC1_CLK_REG,
> +                                                 freq,
> parent_freq);
>       case H6_CLK_MMC2:
> -             return sxiccmu_h6_mmc_set_frequency(sc,
> H6_SMHC2_CLK_REG, freq);
> +             return sxiccmu_h6_mmc_set_frequency(sc,
> H6_SMHC2_CLK_REG,
> +                                                 freq,
> parent_freq);
> +     }
> +
> +     printf("%s: 0x%08x\n", __func__, idx);
> +     return -1;
> +}
> +
> +#define H616_SMHC0_CLK_REG           0x0830
> +#define H616_SMHC1_CLK_REG           0x0834
> +#define H616_SMHC2_CLK_REG           0x0838
> +
> +int
> +sxiccmu_h616_set_frequency(struct sxiccmu_softc *sc, uint32_t idx,
> uint32_t freq)
> +{
> +     uint32_t parent_freq;
> +
> +     parent_freq = sxiccmu_h616_get_frequency(sc,
> H616_CLK_PLL_PERIPH0_2X);
> +
> +     switch (idx) {
> +     case H616_CLK_MMC0:
> +             return sxiccmu_h6_mmc_set_frequency(sc,
> H616_SMHC0_CLK_REG,
> +                                                 freq,
> parent_freq);
> +     case H616_CLK_MMC1:
> +             return sxiccmu_h6_mmc_set_frequency(sc,
> H616_SMHC1_CLK_REG,
> +                                                 freq,
> parent_freq);
> +     case H616_CLK_MMC2:
> +             return sxiccmu_h6_mmc_set_frequency(sc,
> H616_SMHC2_CLK_REG,
> +                                                 freq,
> parent_freq);
>       }
>  
>       printf("%s: 0x%08x\n", __func__, idx);
> Index: sxiccmu_clocks.h
> ===================================================================
> RCS file: /cvs/src/sys/dev/fdt/sxiccmu_clocks.h,v
> diff -u -p -r1.35 sxiccmu_clocks.h
> --- sxiccmu_clocks.h  2 Feb 2024 12:01:49 -0000       1.35
> +++ sxiccmu_clocks.h  6 Feb 2024 12:48:23 -0000
> @@ -516,6 +516,100 @@ const struct sxiccmu_ccu_bit sun50i_h6_r
>       [H6_R_CLK_APB2_RSB] = { 0x01bc, 0, H6_R_CLK_APB2 },
>  };
>  
> +/* H616 */
> +
> +#define H616_CLK_PLL_PERIPH0 4
> +#define H616_CLK_PLL_PERIPH0_2X      5
> +#define H616_CLK_AHB3                25
> +#define H616_CLK_APB1                26
> +#define H616_CLK_APB2                27
> +#define H616_CLK_MMC0                60
> +#define H616_CLK_MMC1                61
> +#define H616_CLK_MMC2                62
> +#define H616_CLK_BUS_MMC0    63
> +#define H616_CLK_BUS_MMC1    64
> +#define H616_CLK_BUS_MMC2    65
> +#define H616_CLK_BUS_UART0   66
> +#define H616_CLK_BUS_UART1   67
> +#define H616_CLK_BUS_UART2   68
> +#define H616_CLK_BUS_UART3   69
> +#define H616_CLK_BUS_UART4   70
> +#define H616_CLK_BUS_UART5   71
> +#define H616_CLK_BUS_I2C0    72
> +#define H616_CLK_BUS_I2C1    73
> +#define H616_CLK_BUS_I2C2    74
> +#define H616_CLK_BUS_I2C3    75
> +#define H616_CLK_BUS_I2C4    76
> +#define H616_CLK_BUS_EMAC0   82
> +#define H616_CLK_BUS_EMAC1   83
> +#define H616_CLK_USB_OHCI0   96
> +#define H616_CLK_USB_PHY0    97
> +#define H616_CLK_USB_OHCI1   98
> +#define H616_CLK_USB_PHY1    99
> +#define H616_CLK_USB_OHCI2   100
> +#define H616_CLK_USB_PHY2    101
> +#define H616_CLK_USB_OHCI3   102
> +#define H616_CLK_USB_PHY3    103
> +#define H616_CLK_BUS_OHCI0   104
> +#define H616_CLK_BUS_OHCI1   105
> +#define H616_CLK_BUS_OHCI2   106
> +#define H616_CLK_BUS_OHCI3   107
> +#define H616_CLK_BUS_EHCI0   108
> +#define H616_CLK_BUS_EHCI1   109
> +#define H616_CLK_BUS_EHCI2   110
> +#define H616_CLK_BUS_EHCI3   111
> +
> +struct sxiccmu_ccu_bit sun50i_h616_gates[] = {
> +     [H616_CLK_PLL_PERIPH0] = { 0x0020, 31 },
> +     [H616_CLK_APB1] = { 0xffff, 0xff },
> +     [H616_CLK_MMC0] = { 0x0830, 31 },
> +     [H616_CLK_MMC1] = { 0x0834, 31 },
> +     [H616_CLK_MMC2] = { 0x0838, 31 },
> +     [H616_CLK_BUS_MMC0] = { 0x084c, 0 },
> +     [H616_CLK_BUS_MMC1] = { 0x084c, 1 },
> +     [H616_CLK_BUS_MMC2] = { 0x084c, 2 },
> +     [H616_CLK_BUS_UART0] = { 0x090c, 0, H616_CLK_APB2 },
> +     [H616_CLK_BUS_UART1] = { 0x090c, 1, H616_CLK_APB2 },
> +     [H616_CLK_BUS_UART2] = { 0x090c, 2, H616_CLK_APB2 },
> +     [H616_CLK_BUS_UART3] = { 0x090c, 3, H616_CLK_APB2 },
> +     [H616_CLK_BUS_UART4] = { 0x090c, 4, H616_CLK_APB2 },
> +     [H616_CLK_BUS_UART5] = { 0x090c, 5, H616_CLK_APB2 },
> +     [H616_CLK_BUS_I2C0] = { 0x091c, 0, H616_CLK_APB2 },
> +     [H616_CLK_BUS_I2C1] = { 0x091c, 1, H616_CLK_APB2 },
> +     [H616_CLK_BUS_I2C2] = { 0x091c, 2, H616_CLK_APB2 },
> +     [H616_CLK_BUS_I2C3] = { 0x091c, 3, H616_CLK_APB2 },
> +     [H616_CLK_BUS_I2C4] = { 0x091c, 4, H616_CLK_APB2 },
> +     [H616_CLK_BUS_EMAC0] = { 0x097c, 0, H616_CLK_AHB3 },
> +     [H616_CLK_BUS_EMAC1] = { 0x097c, 1, H616_CLK_AHB3 },
> +     [H616_CLK_USB_OHCI0] = { 0x0a70, 31 },
> +     [H616_CLK_USB_PHY0] = { 0x0a70, 29 },
> +     [H616_CLK_USB_OHCI1] = { 0x0a74, 31 },
> +     [H616_CLK_USB_PHY1] = { 0x0a74, 29 },
> +     [H616_CLK_USB_OHCI2] = { 0x0a78, 31 },
> +     [H616_CLK_USB_PHY2] = { 0x0a78, 29 },
> +     [H616_CLK_USB_OHCI3] = { 0x0a7c, 31 },
> +     [H616_CLK_USB_PHY3] = { 0x0a7c, 29 },
> +     [H616_CLK_BUS_OHCI0] = { 0x0a8c, 0 },
> +     [H616_CLK_BUS_OHCI1] = { 0x0a8c, 1 },
> +     [H616_CLK_BUS_OHCI2] = { 0x0a8c, 2 },
> +     [H616_CLK_BUS_OHCI3] = { 0x0a8c, 3 },
> +     [H616_CLK_BUS_EHCI0] = { 0x0a8c, 4 },
> +     [H616_CLK_BUS_EHCI1] = { 0x0a8c, 5 },
> +     [H616_CLK_BUS_EHCI2] = { 0x0a8c, 6 },
> +     [H616_CLK_BUS_EHCI3] = { 0x0a8c, 7 },
> +};
> +
> +#define H616_R_CLK_APB1              2
> +#define H616_R_CLK_APB2              3
> +#define H616_R_CLK_APB2_I2C  8
> +#define H616_R_CLK_APB2_RSB  13
> +
> +struct sxiccmu_ccu_bit sun50i_h616_r_gates[] = {
> +     [H616_R_CLK_APB1] = { 0xffff, 0xff },
> +     [H616_R_CLK_APB2_I2C] = { 0x019c, 0, H616_R_CLK_APB2 },
> +     [H616_R_CLK_APB2_RSB] = { 0x01bc, 0, H616_R_CLK_APB2 },
> +};
> +
>  /* R40 */
>  
>  #define R40_CLK_PLL_PERIPH0  11
> @@ -961,6 +1055,76 @@ const struct sxiccmu_ccu_bit sun50i_h6_r
>  const struct sxiccmu_ccu_bit sun50i_h6_r_resets[] = {
>       [H6_R_RST_APB2_I2C] = { 0x019c, 16 },
>       [H6_R_RST_APB2_RSB] = { 0x01bc, 16 },
> +};
> +
> +/* H616 */
> +
> +#define H616_RST_BUS_MMC0    14
> +#define H616_RST_BUS_MMC1    15
> +#define H616_RST_BUS_MMC2    16
> +#define H616_RST_BUS_UART0   17
> +#define H616_RST_BUS_UART1   18
> +#define H616_RST_BUS_UART2   19
> +#define H616_RST_BUS_UART3   20
> +#define H616_RST_BUS_UART4   21
> +#define H616_RST_BUS_UART5   22
> +#define H616_RST_BUS_I2C0    23
> +#define H616_RST_BUS_I2C1    24
> +#define H616_RST_BUS_I2C2    25
> +#define H616_RST_BUS_I2C3    26
> +#define H616_RST_BUS_I2C4    27
> +#define H616_RST_BUS_EMAC0   30
> +#define H616_RST_BUS_EMAC1   31
> +#define H616_RST_USB_PHY0    38
> +#define H616_RST_USB_PHY1    39
> +#define H616_RST_USB_PHY2    40
> +#define H616_RST_USB_PHY3    41
> +#define H616_RST_BUS_OHCI0   42
> +#define H616_RST_BUS_OHCI1   43
> +#define H616_RST_BUS_OHCI2   44
> +#define H616_RST_BUS_OHCI3   45
> +#define H616_RST_BUS_EHCI0   46
> +#define H616_RST_BUS_EHCI1   47
> +#define H616_RST_BUS_EHCI2   48
> +#define H616_RST_BUS_EHCI3   49
> +
> +struct sxiccmu_ccu_bit sun50i_h616_resets[] = {
> +     [H616_RST_BUS_MMC0] = { 0x084c, 16 },
> +     [H616_RST_BUS_MMC1] = { 0x084c, 17 },
> +     [H616_RST_BUS_MMC2] = { 0x084c, 18 },
> +     [H616_RST_BUS_UART0] = { 0x090c, 16 },
> +     [H616_RST_BUS_UART1] = { 0x090c, 17 },
> +     [H616_RST_BUS_UART2] = { 0x090c, 18 },
> +     [H616_RST_BUS_UART3] = { 0x090c, 19 },
> +     [H616_RST_BUS_UART4] = { 0x090c, 20 },
> +     [H616_RST_BUS_UART5] = { 0x090c, 21 },
> +     [H616_RST_BUS_I2C0] = { 0x091c, 16 },
> +     [H616_RST_BUS_I2C1] = { 0x091c, 17 },
> +     [H616_RST_BUS_I2C2] = { 0x091c, 18 },
> +     [H616_RST_BUS_I2C3] = { 0x091c, 19 },
> +     [H616_RST_BUS_I2C4] = { 0x091c, 20 },
> +     [H616_RST_BUS_EMAC0] = { 0x097c, 16 },
> +     [H616_RST_BUS_EMAC1] = { 0x097c, 17 },
> +     [H616_RST_USB_PHY0] = { 0x0a70, 30 },
> +     [H616_RST_USB_PHY1] = { 0x0a74, 30 },
> +     [H616_RST_USB_PHY2] = { 0x0a78, 30 },
> +     [H616_RST_USB_PHY3] = { 0x0a7c, 30 },
> +     [H616_RST_BUS_OHCI0] = { 0x0a8c, 16 },
> +     [H616_RST_BUS_OHCI1] = { 0x0a8c, 17 },
> +     [H616_RST_BUS_OHCI2] = { 0x0a8c, 18 },
> +     [H616_RST_BUS_OHCI3] = { 0x0a8c, 19 },
> +     [H616_RST_BUS_EHCI0] = { 0x0a8c, 20 },
> +     [H616_RST_BUS_EHCI1] = { 0x0a8c, 21 },
> +     [H616_RST_BUS_EHCI2] = { 0x0a8c, 22 },
> +     [H616_RST_BUS_EHCI3] = { 0x0a8c, 23 },
> +};
> +
> +#define H616_R_RST_APB2_I2C  4
> +#define H616_R_RST_APB2_RSB  7
> +
> +struct sxiccmu_ccu_bit sun50i_h616_r_resets[] = {
> +     [H616_R_RST_APB2_I2C] = { 0x019c, 16 },
> +     [H616_R_RST_APB2_RSB] = { 0x01bc, 16 },
>  };
>  
>  /* R40 */
> Index: sximmc.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/fdt/sximmc.c,v
> diff -u -p -r1.13 sximmc.c
> --- sximmc.c  2 Feb 2024 12:02:26 -0000       1.13
> +++ sximmc.c  6 Feb 2024 12:48:23 -0000
> @@ -301,7 +301,9 @@ sximmc_match(struct device *parent, void
>           OF_is_compatible(faa->fa_node, "allwinner,sun20i-d1-
> mmc") ||
>           OF_is_compatible(faa->fa_node, "allwinner,sun20i-d1-
> emmc") ||
>           OF_is_compatible(faa->fa_node, "allwinner,sun50i-a64-
> mmc") ||
> -         OF_is_compatible(faa->fa_node, "allwinner,sun50i-a64-
> emmc"));
> +         OF_is_compatible(faa->fa_node, "allwinner,sun50i-a64-
> emmc") ||
> +         OF_is_compatible(faa->fa_node, "allwinner,sun50i-a100-
> mmc") ||
> +         OF_is_compatible(faa->fa_node, "allwinner,sun50i-a100-
> emmc"));
>  }
>  
>  int
> @@ -398,7 +400,8 @@ sximmc_attach(struct device *parent, str
>               sc->sc_dma_ftrglevel = SXIMMC_DMA_FTRGLEVEL_A20;
>  
>       if (OF_is_compatible(faa->fa_node, "allwinner,sun20i-d1-
> mmc") ||
> -         OF_is_compatible(faa->fa_node, "allwinner,sun20i-d1-
> emmc"))
> +         OF_is_compatible(faa->fa_node, "allwinner,sun20i-d1-
> emmc") ||
> +         OF_is_compatible(faa->fa_node, "allwinner,sun50i-a100-
> mmc"))
>               sc->sc_idma_shift = 2;
>  
>       if (sc->sc_use_dma) {
> Index: sxipio.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/fdt/sxipio.c,v
> diff -u -p -r1.17 sxipio.c
> --- sxipio.c  13 Oct 2023 15:41:25 -0000      1.17
> +++ sxipio.c  6 Feb 2024 12:48:23 -0000
> @@ -206,6 +206,14 @@ const struct sxipio_pins sxipio_pins[] =
>               "allwinner,sun50i-h6-r-pinctrl",
>               sun50i_h6_r_pins, nitems(sun50i_h6_r_pins)
>       },
> +     {
> +             "allwinner,sun50i-h616-pinctrl",
> +             sun50i_h616_pins, nitems(sun50i_h616_pins)
> +     },
> +     {
> +             "allwinner,sun50i-h616-r-pinctrl",
> +             sun50i_h616_r_pins, nitems(sun50i_h616_r_pins)
> +     },
>  };
>  
>  int
> Index: sxipio_pins.h
> ===================================================================
> RCS file: /cvs/src/sys/dev/fdt/sxipio_pins.h,v
> diff -u -p -r1.10 sxipio_pins.h
> --- sxipio_pins.h     13 Oct 2023 15:41:25 -0000      1.10
> +++ sxipio_pins.h     6 Feb 2024 12:48:24 -0000
> @@ -11299,3 +11299,600 @@ const struct sxipio_pin sun50i_h6_r_pins
>               { "irq", 6 },
>       } },
>  };
> +
> +struct sxipio_pin sun50i_h616_pins[] = {
> +     { SXIPIO_PIN(A, 0), {
> +             { "emac1", 2 },
> +     } },
> +     { SXIPIO_PIN(A, 1), {
> +             { "emac1", 2 },
> +     } },
> +     { SXIPIO_PIN(A, 2), {
> +             { "emac1", 2 },
> +     } },
> +     { SXIPIO_PIN(A, 3), {
> +             { "emac1", 2 },
> +     } },
> +     { SXIPIO_PIN(A, 4), {
> +             { "emac1", 2 },
> +     } },
> +     { SXIPIO_PIN(A, 5), {
> +             { "emac1", 2 },
> +     } },
> +     { SXIPIO_PIN(A, 6), {
> +             { "emac1", 2 },
> +     } },
> +     { SXIPIO_PIN(A, 7), {
> +             { "emac1", 2 },
> +     } },
> +     { SXIPIO_PIN(A, 8), {
> +             { "emac1", 2 },
> +     } },
> +     { SXIPIO_PIN(A, 9), {
> +             { "emac1", 2 },
> +     } },
> +     { SXIPIO_PIN(A, 10), {
> +             { "i2c3", 2 },
> +     } },
> +     { SXIPIO_PIN(A, 11), {
> +             { "i2c3", 2 },
> +     } },
> +     { SXIPIO_PIN(A, 12), {
> +             { "pwm5", 2 },
> +     } },
> +     { SXIPIO_PIN(C, 0), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "nand0", 2 },
> +             { "mmc2", 3 },
> +             { "spi0", 4 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(C, 1), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "nand0", 2 },
> +             { "mmc2", 3 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(C, 2), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "nand0", 2 },
> +             { "spi0", 4 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(C, 3), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "nand0", 2 },
> +             { "spi0", 4 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(C, 4), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "nand0", 2 },
> +             { "spi0", 4 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(C, 5), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "nand0", 2 },
> +             { "mmc2", 3 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(C, 6), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "nand0", 2 },
> +             { "mmc2", 3 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(C, 7), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "nand0", 2 },
> +             { "spi0", 4 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(C, 8), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "nand0", 2 },
> +             { "mmc2", 3 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(C, 9), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "nand0", 2 },
> +             { "mmc2", 3 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(C, 10), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "nand0", 2 },
> +             { "mmc2", 3 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(C, 11), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "nand0", 2 },
> +             { "mmc2", 3 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(C, 12), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "nand0", 2 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(C, 13), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "nand0", 2 },
> +             { "mmc2", 3 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(C, 14), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "nand0", 2 },
> +             { "mmc2", 3 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(C, 15), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "nand0", 2 },
> +             { "mmc2", 3 },
> +             { "spi0", 4 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(C, 16), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "nand0", 2 },
> +             { "mmc2", 3 },
> +             { "spi0", 4 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(F, 0), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "mmc0", 2 },
> +             { "jtag", 3 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(F, 1), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "mmc0", 2 },
> +             { "jtag", 3 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(F, 2), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "mmc0", 2 },
> +             { "uart0", 3 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(F, 3), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "mmc0", 2 },
> +             { "jtag", 3 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(F, 4), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "mmc0", 2 },
> +             { "uart0", 3 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(F, 5), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "mmc0", 2 },
> +             { "jtag", 3 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(F, 6), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(G, 0), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "mmc1", 2 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(G, 1), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "mmc1", 2 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(G, 2), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "mmc1", 2 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(G, 3), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "mmc1", 2 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(G, 4), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "mmc1", 2 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(G, 5), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "mmc1", 2 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(G, 6), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "uart1", 2 },
> +             { "jtag", 4 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(G, 7), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "uart1", 2 },
> +             { "jtag", 4 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(G, 8), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "uart1", 2 },
> +             { "clock", 3 },
> +             { "jtag", 4 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(G, 9), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "uart1", 2 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(G, 10), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "i2s2", 2 },
> +             { "clock", 3 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(G, 11), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "i2s2", 2 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(G, 12), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "i2s2", 2 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(G, 13), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "i2s2", 2 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(G, 14), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "i2s2", 2 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(G, 15), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "uart2", 2 },
> +             { "i2c4", 5 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(G, 16), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "uart2", 2 },
> +             { "i2c4", 5 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(G, 17), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "uart2", 2 },
> +             { "i2c3", 5 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(G, 18), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "uart2", 2 },
> +             { "i2c3", 5 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(G, 19), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "pwm1", 4 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(H, 0), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "uart0", 2 },
> +             { "pwm3", 4 },
> +             { "i2c1", 5 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(H, 1), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "uart0", 2 },
> +             { "pwm4", 4 },
> +             { "i2c1", 5 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(H, 2), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "uart5", 2 },
> +             { "spdif", 3 },
> +             { "pwm2", 4 },
> +             { "i2c2", 5 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(H, 3), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "uart5", 2 },
> +             { "pwm1", 4 },
> +             { "i2c2", 5 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(H, 4), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "spdif", 3 },
> +             { "i2c3", 5 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(H, 5), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "uart2", 2 },
> +             { "i2s3", 3 },
> +             { "spi1", 4 },
> +             { "i2c3", 5 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(H, 6), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "uart2", 2 },
> +             { "i2s3", 3 },
> +             { "spi1", 4 },
> +             { "i2c4", 5 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(H, 7), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "uart2", 2 },
> +             { "i2s3", 3 },
> +             { "spi1", 4 },
> +             { "i2c4", 5 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(H, 8), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "uart2", 2 },
> +             { "i2s3_dout0", 3 },
> +             { "spi1", 4 },
> +             { "i2s3_din1", 5 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(H, 9), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "i2s3_din0", 3 },
> +             { "spi1", 4 },
> +             { "i2s3_dout1", 5 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(H, 10), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "ir_rx", 3 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(I, 0), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "emac0", 2 },
> +             { "dmic", 3 },
> +             { "i2s0", 4 },
> +             { "hdmi", 5 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(I, 1), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "emac0", 2 },
> +             { "dmic", 3 },
> +             { "i2s0", 4 },
> +             { "hdmi", 5 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(I, 2), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "emac0", 2 },
> +             { "dmic", 3 },
> +             { "i2s0", 4 },
> +             { "hdmi", 5 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(I, 3), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "emac0", 2 },
> +             { "dmic", 3 },
> +             { "i2s0_dout0", 4 },
> +             { "i2s0_din1", 5 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(I, 4), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "emac0", 2 },
> +             { "dmic", 3 },
> +             { "i2s0_din0", 4 },
> +             { "i2s0_dout1", 5 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(I, 5), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "emac0", 2 },
> +             { "uart2", 3 },
> +             { "ts0", 4 },
> +             { "i2c0", 5 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(I, 6), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "emac0", 2 },
> +             { "uart2", 3 },
> +             { "ts0", 4 },
> +             { "i2c0", 5 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(I, 7), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "emac0", 2 },
> +             { "uart2", 3 },
> +             { "ts0", 4 },
> +             { "i2c1", 5 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(I, 8), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "emac0", 2 },
> +             { "uart2", 3 },
> +             { "ts0", 4 },
> +             { "i2c1", 5 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(I, 9), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "emac0", 2 },
> +             { "uart3", 3 },
> +             { "ts0", 4 },
> +             { "i2c2", 5 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(I, 10), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "emac0", 2 },
> +             { "uart3", 3 },
> +             { "ts0", 4 },
> +             { "i2c2", 5 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(I, 11), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "emac0", 2 },
> +             { "uart3", 3 },
> +             { "ts0", 4 },
> +             { "pwm1", 5 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(I, 12), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "emac0", 2 },
> +             { "uart3", 3 },
> +             { "ts0", 4 },
> +             { "pwm2", 5 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(I, 13), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "emac0", 2 },
> +             { "uart4", 3 },
> +             { "ts0", 4 },
> +             { "pwm3", 5 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(I, 14), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "emac0", 2 },
> +             { "uart4", 3 },
> +             { "ts0", 4 },
> +             { "pwm4", 5 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(I, 15), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "emac0", 2 },
> +             { "uart4", 3 },
> +             { "ts0", 4 },
> +             { "clock", 5 },
> +             { "irq", 6 },
> +     } },
> +     { SXIPIO_PIN(I, 16), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "emac0", 2 },
> +             { "uart4", 3 },
> +             { "ts0", 4 },
> +             { "clock", 5 },
> +             { "irq", 6 },
> +     } },
> +};
> +
> +struct sxipio_pin sun50i_h616_r_pins[] = {
> +     { SXIPIO_PIN(L, 0), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "s_rsb", 2 },
> +             { "s_i2c", 3 },
> +     } },
> +     { SXIPIO_PIN(L, 1), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "s_rsb", 2 },
> +             { "s_i2c", 3 },
> +     } },
> +};
> Index: sxisyscon.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/fdt/sxisyscon.c,v
> diff -u -p -r1.2 sxisyscon.c
> --- sxisyscon.c       24 Oct 2021 17:52:27 -0000      1.2
> +++ sxisyscon.c       6 Feb 2024 12:48:24 -0000
> @@ -52,7 +52,8 @@ sxisyscon_match(struct device *parent, v
>       if (OF_is_compatible(node, "allwinner,sun8i-h3-system-
> control") ||
>           OF_is_compatible(node, "allwinner,sun50i-a64-system-
> control") ||
>           OF_is_compatible(node, "allwinner,sun50i-h5-system-
> control") ||
> -         OF_is_compatible(node, "allwinner,sun50i-h6-system-
> control"))
> +         OF_is_compatible(node, "allwinner,sun50i-h6-system-
> control") ||
> +         OF_is_compatible(node, "allwinner,sun50i-h616-system-
> control"))
>               return 10;      /* Must beat syscon(4). */
>  
>       return 0;
> 

-- 
Dr.-Ing. Tobias Fiebig
T +31 616 80 98 99
M tob...@fiebig.nl

Reply via email to