Date: Sun, 1 Dec 2019 21:40:43 +0800 From: Ganbold Tsagaankhuu <ganbold@gmail.com> To: Peter Jeremy <peter@rulingia.com> Cc: Michal Meloun <mmel@freebsd.org>, "freebsd-arm@freebsd.org" <freebsd-arm@freebsd.org> Subject: Re: rk_tsadc breaks (my) Rock64 Message-ID: <CAGtf9xNjnoJHTnUiJmZb3Q6VQsPjLkYmpfABY8a6jdO9i5bt-Q@mail.gmail.com> In-Reply-To: <20191201110716.GA41224@server.rulingia.com> References: <20191201110716.GA41224@server.rulingia.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, Dec 1, 2019 at 7:07 PM Peter Jeremy <peter@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@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@6 { > > reg = <0x6>; > }; > pd_video@5 { > > reg = <0x5>; > }; > pd_vpu@8 { > > reg = <0x8>; > }; > }; > reboot-mode { > compatible = "syscon-reboot-mode"; > offset = <0x5c8>; > mode-normal = <0x5242c300>; > mode-recovery = <0x5242c303>; > mode-bootloader = <0x5242c309>; > mode-loader = <0x5242c301>; > }; > }; > ... > tsadc@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@ff770000. In my case: ... syscon@ff770000 { compatible = "rockchip,rk3399-grf", "syscon", "simple-mfd"; reg = <0x0 0xff770000 0x0 0x10000>; #address-cells = <0x1>; #size-cells = <0x1>; phandle = <0x82>; ... tsadc@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 >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAGtf9xNjnoJHTnUiJmZb3Q6VQsPjLkYmpfABY8a6jdO9i5bt-Q>