rk_tsadc breaks (my) Rock64

Ganbold Tsagaankhuu ganbold at gmail.com
Sun Dec 1 13:41:02 UTC 2019


On Sun, Dec 1, 2019 at 7:07 PM Peter Jeremy <peter at rulingia.com> wrote:

> r355173 added code to read the Rockchip temperature sensors.
> Unfortunately,
> this breaks on my Rock64.  I've tried to understand what's going wrong but
> haven't managed to make much headway.  It looks like there some
> configuration
> missing from syscon that tsadc needs but I'm not sure what (and I don't
> really
> understand what syscon is doing).  I'd appreciate any insights.
>
> Relevant extract from the dmesg:
> simple_mfd0: <Simple MFD (Multi-Functions Device)> mem
> 0xff450000-0xff45ffff on ofwbus0
> ...
> rk_tsadc0: <RockChip temperature sensors> mem 0xff250000-0xff2500ff irq 22
> on ofwbus0
> rk_tsadc0: nclocks=1, nparents=-1
> rk_tsadc0: Set clk_tsadc to 50000
> panic: data abort with spinlock held
> cpuid = 0
> time = 1
> KDB: stack backtrace:
> ...
> data_abort() at do_el1h_sync+0x144
>          pc = 0xffff00000053f590  lr = 0xffff00000053e8c8
>          sp = 0xffff000000010530  fp = 0xffff000000010560
>
> do_el1h_sync() at handle_el1h_sync+0x78
>          pc = 0xffff00000053e8c8  lr = 0xffff000000525078
>          sp = 0xffff000000010570  fp = 0xffff000000010680
>
> handle_el1h_sync() at simple_mfd_syscon_write_4+0x60
>          pc = 0xffff000000525078  lr = 0xffff0000000fb028
>          sp = 0xffff000000010690  fp = 0xffff000000010740
>
> simple_mfd_syscon_write_4() at tsadc_attach+0x44c
>          pc = 0xffff0000000fb028  lr = 0xffff000000553b58
>          sp = 0xffff000000010750  fp = 0xffff0000000107c0
>
> tsadc_attach() at device_attach+0x3e0
>          pc = 0xffff000000553b58  lr = 0xffff00000028ad1c
>          sp = 0xffff0000000107d0  fp = 0xffff000000010830
>
> device_attach() at bus_generic_new_pass+0x12c
>          pc = 0xffff00000028ad1c  lr = 0xffff00000028cb58
>          sp = 0xffff000000010840  fp = 0xffff000000010870
> ...
> Stopped at      generic_bs_w_4: undefined       b8226823
>
> Relevant extract from FDT:
>         syscon at ff100000 {
>                 compatible = "rockchip,rk3328-grf", "syscon", "simple-mfd";
>                 reg = <0x0 0xff100000 0x0 0x1000>;
>                 #address-cells = <0x1>;
>                 #size-cells = <0x1>;
>                 phandle = <0x13>;
>                 io-domains {
>                         compatible = "rockchip,rk3328-io-voltage-domain";
>                         status = "okay";
>                         vccio1-supply = <0x20>;
>                         vccio2-supply = <0x22>;
>                         vccio3-supply = <0x20>;
>                         vccio4-supply = <0x21>;
>                         vccio5-supply = <0x20>;
>                         vccio6-supply = <0x20>;
>                         pmuio-supply = <0x20>;
>                         phandle = <0x14>;
>                 };
>                 grf-gpio {
>                         compatible = "rockchip,rk3328-grf-gpio";
>                         gpio-controller;
>                         #gpio-cells = <0x2>;
>                         phandle = <0x15>;
>                 };
>                 power-controller {
>                         compatible = "rockchip,rk3328-power-controller";
>                         #power-domain-cells = <0x1>;
>                         #address-cells = <0x1>;
>                         #size-cells = <0x0>;
>                         phandle = <0x16>;
>                         pd_hevc at 6 {
>
>                                 reg = <0x6>;
>                         };
>                         pd_video at 5 {
>
>                                 reg = <0x5>;
>                         };
>                         pd_vpu at 8 {
>
>                                 reg = <0x8>;
>                         };
>                 };
>                 reboot-mode {
>                         compatible = "syscon-reboot-mode";
>                         offset = <0x5c8>;
>                         mode-normal = <0x5242c300>;
>                         mode-recovery = <0x5242c303>;
>                         mode-bootloader = <0x5242c309>;
>                         mode-loader = <0x5242c301>;
>                 };
>         };
> ...
>         tsadc at ff250000 {
>                 compatible = "rockchip,rk3328-tsadc";
>                 reg = <0x0 0xff250000 0x0 0x100>;
>                 interrupts = <0x0 0x3a 0x4>;
>                 assigned-clocks = <0x46 0x24>;
>                 assigned-clock-rates = <0xc350>;
>                 clocks = <0x46 0x24 0x46 0xd5>;
>                 clock-names = "tsadc", "apb_pclk";
>                 pinctrl-names = "init", "default", "sleep";
>                 pinctrl-0 = <0x7c>;
>                 pinctrl-1 = <0x7d>;
>                 pinctrl-2 = <0x7c>;
>                 resets = <0x46 0x42>;
>                 reset-names = "tsadc-apb";
>                 rockchip,grf = <0x13>;
>                 rockchip,hw-tshut-temp = <0x186a0>;
>                 #thermal-sensor-cells = <0x1>;
>                 status = "okay";
>                 rockchip,hw-tshut-mode = <0x0>;
>                 rockchip,hw-tshut-polarity = <0x0>;
>                 phandle = <0x30>;
>         };
>
>
What dts are you using?
The syscon should be syscon at ff770000.
In my case:
...
        syscon at ff770000 {

                compatible = "rockchip,rk3399-grf", "syscon", "simple-mfd";
                reg = <0x0 0xff770000 0x0 0x10000>;
                #address-cells = <0x1>;
                #size-cells = <0x1>;
                phandle = <0x82>;
...
        tsadc at ff260000 {

                compatible = "rockchip,rk3399-tsadc";
                reg = <0x0 0xff260000 0x0 0x100>;
                interrupts = <0x0 0x61 0x4 0x0>;
                assigned-clocks = <0x81 0x4f>;
                assigned-clock-rates = <0xb71b0>;
                clocks = <0x81 0x4f 0x81 0x164>;
                clock-names = "tsadc", "apb_pclk";
                resets = <0x81 0xe8>;
                reset-names = "tsadc-apb";
                rockchip,grf = <0x82>;
                rockchip,hw-tshut-temp = <0x17318>;
                pinctrl-names = "init", "default", "sleep";
                pinctrl-0 = <0x112>;
                pinctrl-1 = <0x113>;
                pinctrl-2 = <0x112>;
                #thermal-sensor-cells = <0x1>;
                status = "okay";
                rockchip,hw-tshut-mode = <0x1>;
                rockchip,hw-tshut-polarity = <0x1>;
                phandle = <0x3a>;
        };
...

here http://dpaste.com/3MTFPPG is full dts I'm using on NanoPC-T4 board.

Ganbold


> --
> Peter Jeremy
>


More information about the freebsd-arm mailing list