Re: git: 0b6d133c08fc - main - Add RockChip RK356X support to existing RockChip thermal driver.

From: Ganbold Tsagaankhuu <ganbold_at_gmail.com>
Date: Thu, 11 Aug 2022 08:30:55 UTC
On Thu, Aug 11, 2022 at 4:29 PM Ganbold Tsagaankhuu <ganbold@freebsd.org>
wrote:

> The branch main has been updated by ganbold:
>
> URL:
> https://cgit.FreeBSD.org/src/commit/?id=0b6d133c08fcc3ae63228f32429581d5764e6fe5
>
> commit 0b6d133c08fcc3ae63228f32429581d5764e6fe5
> Author:     Søren Schmidt <sos@FreeBSD.org>
> AuthorDate: 2022-08-11 08:26:39 +0000
> Commit:     Ganbold Tsagaankhuu <ganbold@FreeBSD.org>
> CommitDate: 2022-08-11 08:26:39 +0000
>
>     Add RockChip RK356X support to existing RockChip thermal driver.
> ---
>  sys/arm64/rockchip/rk_tsadc.c | 118
> +++++++++++++++++++++++++++++++++++++-----
>  1 file changed, 104 insertions(+), 14 deletions(-)
>
> diff --git a/sys/arm64/rockchip/rk_tsadc.c b/sys/arm64/rockchip/rk_tsadc.c
> index 9d5d887e27fb..2fdf13a87d79 100644
> --- a/sys/arm64/rockchip/rk_tsadc.c
> +++ b/sys/arm64/rockchip/rk_tsadc.c
> @@ -55,6 +55,11 @@ __FBSDID("$FreeBSD$");
>  #include "syscon_if.h"
>  #include "rk_tsadc_if.h"
>
> +/* Version of HW */
> +#define        TSADC_V2                                1
> +#define        TSADC_V3                                2
> +#define        TSADC_V7                                3
> +
>  /* Global registers */
>  #define        TSADC_USER_CON                          0x000
>  #define        TSADC_AUTO_CON                          0x004
> @@ -78,7 +83,7 @@ __FBSDID("$FreeBSD$");
>  #define        TSADC_COMP0_LOW_INT                     0x080   /* V3 only
> */
>  #define        TSADC_COMP1_LOW_INT                     0x084   /* V3 only
> */
>
> -/* GFR Bits */
> +/* V3 GFR registers */
>  #define        GRF_SARADC_TESTBIT                      0x0e644
>  #define         GRF_SARADC_TESTBIT_ON                          (0x10001
> << 2)
>  #define GRF_TSADC_TESTBIT_L                    0x0e648
> @@ -87,6 +92,13 @@ __FBSDID("$FreeBSD$");
>  #define         GRF_TSADC_VCM_EN_H                             (0x10001
> << 7)
>  #define         GRF_TSADC_TESTBIT_H_ON                         (0x10001
> << 2)
>
> +/* V7 GRF register */
> +#define        GRF_TSADC_CON                           0x0600
> +#define         GRF_TSADC_ANA_REG0                     (0x10001 << 0)
> +#define         GRF_TSADC_ANA_REG1                     (0x10001 << 1)
> +#define         GRF_TSADC_ANA_REG2                     (0x10001 << 2)
> +#define         GRF_TSADC_TSEN                         (0x10001 << 8)
> +
>  #define        WR4(_sc, _r, _v)        bus_write_4((_sc)->mem_res, (_r),
> (_v))
>  #define        RD4(_sc, _r)            bus_read_4((_sc)->mem_res, (_r))
>
> @@ -109,7 +121,7 @@ struct tsadc_calib_info {
>  };
>
>  struct tsadc_conf {
> -       int                     use_syscon;
> +       int                     version;
>         int                     q_sel_ntc;
>         int                     shutdown_temp;
>         int                     shutdown_mode;
> @@ -183,7 +195,7 @@ struct tsensor rk3288_tsensors[] = {
>  };
>
>  struct tsadc_conf rk3288_tsadc_conf = {
> -       .use_syscon =           0,
> +       .version =              TSADC_V2,
>         .q_sel_ntc =            0,
>         .shutdown_temp =        95000,
>         .shutdown_mode =        1, /* GPIO */
> @@ -237,7 +249,7 @@ static struct tsensor rk3328_tsensors[] = {
>  };
>
>  static struct tsadc_conf rk3328_tsadc_conf = {
> -       .use_syscon =           0,
> +       .version =              TSADC_V2,
>         .q_sel_ntc =            1,
>         .shutdown_temp =        95000,
>         .shutdown_mode =        0, /* CRU */
> @@ -293,7 +305,7 @@ static struct tsensor rk3399_tsensors[] = {
>  };
>
>  static struct tsadc_conf rk3399_tsadc_conf = {
> -       .use_syscon =           1,
> +       .version =              TSADC_V3,
>         .q_sel_ntc =            1,
>         .shutdown_temp =        95000,
>         .shutdown_mode =        1, /* GPIO */
> @@ -306,10 +318,68 @@ static struct tsadc_conf rk3399_tsadc_conf = {
>         }
>  };
>
> +static struct rk_calib_entry rk3568_calib_data[] = {
> +       {0, -40000},
> +       {1584, -40000},
> +       {1620, -35000},
> +       {1652, -30000},
> +       {1688, -25000},
> +       {1720, -20000},
> +       {1756, -15000},
> +       {1788, -10000},
> +       {1824, -5000},
> +       {1856, 0},
> +       {1892, 5000},
> +       {1924, 10000},
> +       {1956, 15000},
> +       {1992, 20000},
> +       {2024, 25000},
> +       {2060, 30000},
> +       {2092, 35000},
> +       {2128, 40000},
> +       {2160, 45000},
> +       {2196, 50000},
> +       {2228, 55000},
> +       {2264, 60000},
> +       {2300, 65000},
> +       {2332, 70000},
> +       {2368, 75000},
> +       {2400, 80000},
> +       {2436, 85000},
> +       {2468, 90000},
> +       {2500, 95000},
> +       {2536, 100000},
> +       {2572, 105000},
> +       {2604, 110000},
> +       {2636, 115000},
> +       {2672, 120000},
> +       {2704, 125000},
> +};
> +
> +static struct tsensor rk3568_tsensors[] = {
> +       { .channel = 0, .id = 0, .name = "CPU"},
> +       { .channel = 1, .id = 1, .name = "GPU"},
> +};
> +
> +static struct tsadc_conf rk3568_tsadc_conf = {
> +       .version =              TSADC_V7,
> +       .q_sel_ntc =            1,
> +       .shutdown_temp =        95000,
> +       .shutdown_mode =        1, /* GPIO */
> +       .shutdown_pol =         0, /* Low  */
> +       .tsensors =             rk3568_tsensors,
> +       .ntsensors =            nitems(rk3568_tsensors),
> +       .calib_info =   {
> +                       .table = rk3568_calib_data,
> +                       .nentries = nitems(rk3568_calib_data),
> +       }
> +};
> +
>  static struct ofw_compat_data compat_data[] = {
>         {"rockchip,rk3288-tsadc",       (uintptr_t)&rk3288_tsadc_conf},
>         {"rockchip,rk3328-tsadc",       (uintptr_t)&rk3328_tsadc_conf},
>         {"rockchip,rk3399-tsadc",       (uintptr_t)&rk3399_tsadc_conf},
> +       {"rockchip,rk3568-tsadc",       (uintptr_t)&rk3568_tsadc_conf},
>         {NULL,          0}
>  };
>
> @@ -445,13 +515,15 @@ tsadc_init(struct tsadc_softc *sc)
>                 val |= TSADC_AUTO_Q_SEL;
>         WR4(sc, TSADC_AUTO_CON, val);
>
> -       if (!sc->conf->use_syscon) {
> +       switch (sc->conf->version) {
> +       case TSADC_V2:
>                 /* V2 init */
>                 WR4(sc, TSADC_AUTO_PERIOD, 250);        /* 250 ms */
>                 WR4(sc, TSADC_AUTO_PERIOD_HT, 50);      /*  50 ms */
>                 WR4(sc, TSADC_HIGHT_INT_DEBOUNCE, 4);
>                 WR4(sc, TSADC_HIGHT_TSHUT_DEBOUNCE, 4);
> -       } else {
> +               break;
> +       case TSADC_V3:
>                 /* V3 init */
>                 if (sc->grf == NULL) {
>                         /* Errata: adjust interleave to working value */
> @@ -473,6 +545,26 @@ tsadc_init(struct tsadc_softc *sc)
>                 WR4(sc, TSADC_AUTO_PERIOD_HT, 1875);    /* 2.5 ms */
>                 WR4(sc, TSADC_HIGHT_INT_DEBOUNCE, 4);
>                 WR4(sc, TSADC_HIGHT_TSHUT_DEBOUNCE, 4);
> +               break;
> +       case TSADC_V7:
> +               /* V7 init */
> +               WR4(sc, TSADC_USER_CON, 0xfc0);         /* 97us, at least
> 90us */
> +               WR4(sc, TSADC_AUTO_PERIOD, 1622);       /* 2.5ms */
> +               WR4(sc, TSADC_HIGHT_INT_DEBOUNCE, 4);
> +               WR4(sc, TSADC_AUTO_PERIOD_HT, 1622);    /* 2.5ms */
> +               WR4(sc, TSADC_HIGHT_TSHUT_DEBOUNCE, 4);
> +               if (sc->grf) {
> +                       SYSCON_WRITE_4(sc->grf, GRF_TSADC_CON,
> GRF_TSADC_TSEN);
> +                       DELAY(15);                      /* 10 usec min */
> +                       SYSCON_WRITE_4(sc->grf, GRF_TSADC_CON,
> +                           GRF_TSADC_ANA_REG0);
> +                       SYSCON_WRITE_4(sc->grf, GRF_TSADC_CON,
> +                           GRF_TSADC_ANA_REG1);
> +                       SYSCON_WRITE_4(sc->grf, GRF_TSADC_CON,
> +                           GRF_TSADC_ANA_REG2);
> +                       DELAY(100);                     /* 90 usec min */
> +               }
> +               break;
>         }
>  }
>
> @@ -485,13 +577,11 @@ tsadc_read_temp(struct tsadc_softc *sc, struct
> tsensor *sensor, int *temp)
>         *temp = tsadc_raw_to_temp(sc, val);
>
>  #ifdef DEBUG
> -       printf("%s: Sensor(id: %d, ch: %d), temp: %d\n", __func__,
> -           sensor->id, sensor->channel, *temp);
> -       printf(" status: 0x%08X, 0x%08X\n",
> -           RD4(sc, TSADC_USER_CON),
> -           RD4(sc, TSADC_AUTO_CON));
> -       printf(" Data: 0x%08X, 0x%08X, 0x%08X\n",
> -           RD4(sc, TSADC_DATA(sensor->channel)),
> +       device_printf(sc->dev, "%s: Sensor(id: %d, ch: %d), val: %d temp:
> %d\n",
> +           __func__, sensor->id, sensor->channel, val, *temp);
> +       device_printf(sc->dev, "%s: user_con=0x%08x auto_con=0x%08x "
> +           "comp_int=0x%08x comp_shut=0x%08x\n",
> +           __func__, RD4(sc, TSADC_USER_CON), RD4(sc, TSADC_AUTO_CON),
>             RD4(sc, TSADC_COMP_INT(sensor->channel)),
>             RD4(sc, TSADC_COMP_SHUT(sensor->channel)));
>  #endif
>
>
Sorry, forgot to include https://reviews.freebsd.org/D36137

Ganbold