[PATCH v3 3/3] regulator: mt6358: Add output voltage fine tuning to variable LDOs

Bret Joseph bretjoseph at gmail.com
Thu Nov 23 20:58:31 PST 2023


ok if thats the case it means I will have to customize things on my end.


On Fri, 24 Nov 2023 at 06:29, Chen-Yu Tsai <wenst at chromium.org> wrote:
>
> Please keep the whole CC list. Please don't top post.
>
> On Thu, Nov 23, 2023 at 7:27 PM Bret Joseph <bretjoseph at gmail.com> wrote:
> >
> > /sys/kernel/debug/regmap/1000d000.pwrap/registers
> > 1e00: 2808
> > 1e02: 2808
> > 1e04: 2000
> > 1e06: 2000
> > 1e08: 2808
>
> According to the datasheet I have, x8xx is not a valid voltage setting.
> It wasn't valid before my patch either.
>
> This is vcama1.
>
> > 1e0a: 2808
> > 1e0c: 2000
> > 1e0e: 2000
> > 1e10: 0000 # I have deleted everything with 0000
> > 1e20: 2808
> > 1e22: 2808
> > 1e24: 2000
> > 1e26: 2000
> > 1e28: 2808
>
> x8xx is not valid here either. This is vcn33.
>
> > 1e2a: 2808
> > 1e2c: 2000
>
> x0xx is not valid here either. This is vsim1.
>
> > 1e2e: 2000
>
> x0xx for register 0x1e30 is not valid. This is vsim2.
> x0xx for register 0x1e38 is not valid. This is vemc.
> x0xx for register 0x1e3c is not valid. This is vldo28.
> x0xx for register 0x1e48 is not valid. This is vmch.
> x0xx for register 0x1e4c is not valid. This is vmc.
>
> > 1e80: 2808
> > 1e82: 2808
> > 1e84: 2000
> > 1e86: 2000
> > 1e88: 2808
> > 1e8a: 2808
> > 1e8c: 2000
> > 1e8e: 2000
>
> x0xx for register 0x1e98 is not valid. This is vefuse.
>
> > 1ea0: 2808
> > 1ea2: 2808
> > 1ea4: 2000
> > 1ea6: 2000
> > 1ea8: 2808
> > 1eaa: 2808
> > 1eac: 2000
> > 1eae: 2000
>
> x0xx for register 0x1eae is not valid. This is vcamd.
>
> So basically all the failures you see are due to (as far as the datasheet
> says) invalid values. The driver prior to my patch would error out as well.
>
> Either the register readback is faulty on your platform, or your bootloader
> has configured the system into a weird state.
>
>
> ChenYu
>
> > /sys/kernel/debug/regulator/regulator_summary
> >  regulator                      use open bypass  opmode voltage
> > current     min     max
> > ---------------------------------------------------------------------------------------
> >  regulator-dummy         3   35      0 unknown     0mV     0mA     0mV     0mV
> >    vdram1                      0    0      0  normal   500mV     0mA
> > 500mV  2087mV
> >    vcore                         0    0      0  normal   500mV     0mA
> >   500mV  1293mV
> >    vpa                            0    0      0  normal   500mV
> > 0mA   500mV  3650mV
> >    vproc11                     0    0      0  normal   500mV     0mA
> > 500mV  1293mV
> >    vproc12                     0    0      0  normal   500mV     0mA
> > 500mV  1293mV
> >    vgpu                          0    0      0  normal   500mV     0mA
> >   500mV  1293mV
> >    vs2                            0    0      0  normal   500mV
> > 0mA   500mV  2087mV
> >    vmodem                    0    0      0  normal   500mV     0mA
> > 500mV  1293mV
> >    vs1                            2    5      0  normal  1000mV
> > 0mA  1000mV  2587mV
> >       vio18                      1    0      0 unknown  1800mV     0mA
> >  1800mV  1800mV
> >       vcamio                   0    0      0 unknown  1800mV     0mA
> > 1800mV  1800mV
> >       vcn18                     0    0      0 unknown  1800mV     0mA
> > 1800mV  1800mV
> >       vefuse                    0    0      0 unknown  1700mV     0mA
> > 1700mV  1900mV
> >       vrf18                       0    0      0 unknown  1800mV
> > 0mA  1800mV  1800mV
> >    vdram2                      0    0      0 unknown   600mV     0mA
> > 600mV  1800mV
> >    vsim1                         0    0      0 unknown  1700mV     0mA
> >  1700mV  3100mV
> >    vibr                            0    0      0 unknown  1200mV
> > 0mA  1200mV  3300mV
> >    vrf12                          0    0      0 unknown  1200mV
> > 0mA  1200mV  1200mV
> >    vusb                           0    0      0 unknown  3000mV
> > 0mA  3000mV  3100mV
> >    vcamd                        0    0      0 unknown   900mV     0mA
> >  900mV  1800mV
> >    vfe28                          0    0      0 unknown  2800mV
> > 0mA  2800mV  2800mV
> >    vsram_proc11            0    0      0 unknown   500mV     0mA   500mV  1293mV
> >    vcn28                         0    0      0 unknown  2800mV     0mA
> >  2800mV  2800mV
> >    vsram_others             0    0      0 unknown   500mV     0mA
> > 500mV  1293mV
> >    vsram_gpu                 0    0      0 unknown   500mV     0mA
> > 500mV  1293mV
> >    vxo22                         0    0      0 unknown  2200mV     0mA
> >  2200mV  2200mV
> >    vaux18                       0    0      0 unknown  1800mV     0mA
> > 1800mV  1800mV
> >    vmch                          0    0      0 unknown  2900mV     0mA
> >  2900mV  3300mV
> >    vbif28                         0    0      0 unknown  2800mV
> > 0mA  2800mV  2800mV
> >    vsram_proc12            0    0      0 unknown   550mV     0mA   500mV  1293mV
> >    vcama1                      0    0      0 unknown  1800mV     0mA
> > 1800mV  3000mV
> >    vemc                          0    0      0 unknown  2900mV     0mA
> >  2900mV  3300mV
> >    vio28                          1    0      0 unknown  2800mV
> > 0mA  2800mV  2800mV
> >    va12                           0    0      0 unknown  1200mV
> > 0mA  1200mV  1200mV
> >    VCN33                       0    0      0 unknown  3300mV     0mA
> >   0mV     0mV
> >    vcama2                      0    0      0 unknown  1800mV     0mA
> > 1800mV  3000mV
> >    vmc                            0    0      0 unknown  1800mV
> > 0mA  1800mV  3300mV
> >    vldo28                        0    0      0 unknown  2800mV     0mA
> >  2800mV  3000mV
> >    vaud28                       0    0      0 unknown  2800mV     0mA
> > 2800mV  2800mV
> >    vsim2                         0    0      0 unknown  1700mV     0mA
> >  1700mV  3100mV
> >
> > I have also seen errors when consumers use regulators which I think
> > could be related to setting values on regulators
> > Here is an example using mtk-ccifreq driver
> > [ 0.668869] mtk-ccifreq cci: no pinctrl handle
> > [ 0.669128] device: 'regulator:regulator.5--platform:cci': device_add
> > [ 0.669278] devices_kset: Moving cci to end of list
> > [ 0.669311] PM: Moving platform:cci to end of list
> > [ 0.669340] mtk-ccifreq cci: Linked as a consumer to regulator.5
> > [ 0.669713] of: _opp_add_static_v2: turbo:0 rate:500000000 uv:600000
> > uvmin:600000 uvmax:600000 latency:0 level:0
> > [ 0.669969] of: _opp_add_static_v2: turbo:0 rate:560000000 uv:675000
> > uvmin:675000 uvmax:675000 latency:0 level:0
> > [ 0.670245] of: _opp_add_static_v2: turbo:0 rate:612000000 uv:693750
> > uvmin:693750 uvmax:693750 latency:0 level:0
> > [ 0.670512] of: _opp_add_static_v2: turbo:0 rate:682000000 uv:718750
> > uvmin:718750 uvmax:718750 latency:0 level:0
> > [ 0.670763] of: _opp_add_static_v2: turbo:0 rate:752000000 uv:743750
> > uvmin:743750 uvmax:743750 latency:0 level:0
> > [ 0.671031] of: _opp_add_static_v2: turbo:0 rate:822000000 uv:768750
> > uvmin:768750 uvmax:768750 latency:0 level:0
> > [ 0.671598] of: _opp_add_static_v2: turbo:0 rate:875000000 uv:781250
> > uvmin:781250 uvmax:781250 latency:0 level:0
> > [ 0.671921] of: _opp_add_static_v2: turbo:0 rate:927000000 uv:800000
> > uvmin:800000 uvmax:800000 latency:0 level:0
> > [ 0.672178] of: _opp_add_static_v2: turbo:0 rate:980000000 uv:818750
> > uvmin:818750 uvmax:818750 latency:0 level:0
> > [ 0.672434] of: _opp_add_static_v2: turbo:0 rate:1050000000 uv:843750
> > uvmin:843750 uvmax:843750 latency:0 level:0
> > [ 0.672681] of: _opp_add_static_v2: turbo:0 rate:1120000000 uv:862500
> > uvmin:862500 uvmax:862500 latency:0 level:0
> > [ 0.672945] of: _opp_add_static_v2: turbo:0 rate:1155000000 uv:887500
> > uvmin:887500 uvmax:887500 latency:0 level:0
> > [ 0.673200] of: _opp_add_static_v2: turbo:0 rate:1190000000 uv:906250
> > uvmin:906250 uvmax:906250 latency:0 level:0
> > [ 0.673465] of: _opp_add_static_v2: turbo:0 rate:1260000000 uv:950000
> > uvmin:950000 uvmax:950000 latency:0 level:0
> > [ 0.673720] of: _opp_add_static_v2: turbo:0 rate:1330000000 uv:993750
> > uvmin:993750 uvmax:993750 latency:0 level:0
> > [ 0.673988] of: _opp_add_static_v2: turbo:0 rate:1400000000 uv:1031250
> > uvmin:1031250 uvmax:1031250 latency:0 level:0
> > [ 0.674327] device: 'cci': device_add
> > [ 0.674499] PM: Adding info for No Bus:cci
> > [ 0.674643] mtk-ccifreq cci: error -EPROBE_DEFER: devfreq_add_device:
> > Unable to start governor for the device
> > [ 0.675571] device: 'cci': device_unregister
> > [ 0.675730] PM: Removing info for No Bus:cci
> > [ 0.675862] mtk-ccifreq cci: failed to add devfreq device: -517
> > [ 0.680084] mtk-ccifreq cci: Driver mtk-ccifreq requests probe deferral
> > [ 0.680148] ------------[ cut here ]------------
> > [ 0.680163] WARNING: CPU: 6 PID: 56 at _regulator_put+0x340/0x354
> > [ 0.680190] Modules linked in:
> > [ 0.680208] CPU: 6 PID: 56 Comm: kworker/u16:1 Tainted: G W
> > 6.7.0-rc1-next-20231115-g2b600507077d-dirty #34
> > [ 0.680232] Hardware name: MT6769H (DT)
> > [ 0.680246] Workqueue: events_unbound deferred_probe_work_func
> > [ 0.680268] pstate: 80400005 (Nzcv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
> > [ 0.680285] pc : _regulator_put+0x340/0x354
> > [ 0.680302] lr : regulator_put+0x58/0x8c
> > [ 0.680317] sp : ffffffc080483950
> > [ 0.680328] x29: ffffffc080483950 x28: ffffff80c0030000 x27: ffffffdd002037f0
> > [ 0.680353] x26: ffffffdd01747650 x25: ffffff80c0f5d0c0 x24: ffffffdd00180d80
> > [ 0.680376] x23: ffffffc080483a98 x22: ffffffdd01f46d50 x21: ffffff80c0f5d780
> > [ 0.680400] x20: ffffffdd01ee2bc0 x19: ffffff80c0f5d780 x18: ffffff80c1f8c660
> > [ 0.680423] x17: 000000040044ffff x16: 005000f4b5593519 x15: ffffffdd0221fdb0
> > [ 0.680446] x14: 0000000000000891 x13: 0000000000000891 x12: 0000000000000001
> > [ 0.680468] x11: 0000000000000891 x10: 000000000001cde2 x9 : 0000000000001464
> > [ 0.680491] x8 : 000000008020001f x7 : ffffff80c249e600 x6 : 000000000000018d
> > [ 0.680513] x5 : 00000000000091ec x4 : 00000000000091d3 x3 : ffffffdd01a5e070
> > [ 0.680535] x2 : 0000000000000001 x1 : ffffffdd01ee2b60 x0 : 0000000000000002
> > [ 0.680558] Call trace:
> > [ 0.680568] _regulator_put+0x340/0x354
> > [ 0.680583] regulator_put+0x58/0x8c
> > [ 0.680597] devm_regulator_release+0x30/0x4c
> > [ 0.680613] release_nodes+0x8c/0xdc
> > [ 0.680629] devres_release_all+0xc0/0x164
> > [ 0.680646] device_unbind_cleanup+0x34/0xe4
> > [ 0.680660] really_probe+0x200/0x75c
> > [ 0.680674] __driver_probe_device+0x100/0x2e4
> > [ 0.680688] driver_probe_device+0x6c/0x1d4
> > [ 0.680703] __device_attach_driver+0x170/0x238
> > [ 0.680717] bus_for_each_drv+0xbc/0x18c
> > [ 0.680734] __device_attach+0x124/0x2ec
> > [ 0.680748] device_initial_probe+0x30/0x4c
> > [ 0.680762] bus_probe_device+0x138/0x168
> > [ 0.680775] deferred_probe_work_func+0x134/0x1fc
> > [ 0.680790] process_scheduled_works+0x26c/0x73c
> > [ 0.680808] worker_thread+0x294/0x690
> > [ 0.680823] kthread+0x1fc/0x22c
> > [ 0.680837] ret_from_fork+0x10/0x20
> > [ 0.680853] ---[ end trace 0000000000000000 ]---
> > [ 0.680923] mtk-ccifreq cci: Dropping the link to regulator.5
> > [ 0.680941] device: 'regulator:regulator.5--platform:cci': device_unregister
> > [ 0.681041] platform cci: Added to deferred list
> >
> > On Thu, 23 Nov 2023 at 08:25, Chen-Yu Tsai <wenst at chromium.org> wrote:
> > >
> > > Hi Bret,
> > >
> > > On Thu, Nov 16, 2023 at 12:52 AM Bret Joseph <bretjoseph at gmail.com> wrote:
> > > >
> > > > In mt6358-regulator.c
> > > >
> > > > static const struct regulator_ops mt6358_volt_table_ops = {
> > > >     .list_voltage = regulator_list_voltage_pickable_linear_range,
> > > >     .map_voltage = regulator_map_voltage_pickable_linear_range,
> > > >     .set_voltage_sel = regulator_set_voltage_sel_pickable_regmap,
> > > >     .get_voltage_sel = mt6358_get_buck_voltage_sel /*regulator_get_voltage_sel_pickable_regmap*/,
> > > >     .set_voltage_time_sel = regulator_set_voltage_time_sel,
> > > >     .enable = regulator_enable_regmap,
> > > >     .disable = regulator_disable_regmap,
> > > >     .is_enabled = regulator_is_enabled_regmap,
> > > >     .get_status = mt6358_get_status,
> > > > };
> > > >
> > > > the function [regulator_get_voltage_sel_pickable_regmap] causes a -EINVAL‬ when registering
> > > >
> > > > vsim1 vusb vcamd vefuse vmch vcama1 vemc vmc vldo28 vsim2
> > > >
> > > > using [mt6358_get_buck_voltage_sel] results in a successful probe
> > >
> > > Sure it will probe, but any values you read back will be bogus.
> > >
> > > Can you provide a dump of /sys/kernel/debug/regulator/regulator_summary
> > > and `grep ^1e..: /sys/kernel/debug/regmap/1000d000.pwrap/registers`,
> > > and also any relevant logs?
> > >
> > > ChenYu



More information about the linux-arm-kernel mailing list