Re: UltraSPARC III/IIe cpufreq drivers, please test

BERTRAND Joël <[email protected]>
Newsgroups gmane.os.netbsd.ports.sparc64
Message-ID <[email protected]>
Martin Husemann a écrit :
> On Wed, Oct 01, 2014 at 03:42:51PM +0200, BERTRAND Joël wrote:
>> Martin Husemann a écrit :
>>> On Mon, Sep 29, 2014 at 02:19:00PM +1000, matthew green wrote:
>>>> this is some what tricky.  ideally, it should be derived from
>>>> the cpu device, and that should find and talk to the schizo
>>>> device that controls it.
>>>
>>> Since mainbus device detection is mostly hardcoded, can't we rely on all
>>> cpus to attach their autoconfig device node before any pci root hub is
>>> attached?
>>
>> 	Why not. But I don't know autoconf process enough to write it. Do
>> 	you have some ideas to start ?
>
> Ok, looking at it again in more detail, I think we should do it differently.
>
> Unfortunately this looks like it would need copy&pasting to all pci root
> implementations (ideas to avoid that welcome).
>
> Let's for example take schizo_attach:
>
>   - go up one node (OF_parent(ma->ma_node))
>   - basically clone the loop used to get the number of cpus from the
>     firmware (get_ncpus) and just count, which index (from OF's point
>     of view) each gets
>   - within the same loop, count the PCI's, for each read the first word
>     from the "reg" property to find out wether it is bus A or B (same
>     condition we use in the attach code to set sp_bus_a). If bus is A,
>     count the node
>
> Now we should get the same node index for cpu and schizo, so if the
> schizo node is the same node as in our attach args, we have found our
> cpu and can break out of the loop.
>
> Once we know the node of the CPU we are looking for, we can do a loop over
> all CPUs and compare it against ci->ci_node.
>
> This should work completely independent of all kernel config contents.

	Hello,

	I'm trying to write you suggestion in schizo_attach() but it doesn't 
work as expected. I suppose I haven't understand what you suggested.

	But I don't understand why we need to write this piece of code. If I 
understand, cpufreq is only registered once with only once struct 
cpu_info as all CPU has to share same parameters. Thus, I can take the 
first elements of *cpus (defined in cpu.c).

	Last question : schizo_set_cpufreq() is called by xcall(). Thus, if I 
understand, schizo_set_cpufreq() should control cpufreq of CPU that runs 
this function.

	In dmesg, I only obtain :
...
Feb 25 22:43:14 hilbert /netbsd: register safari cpufreq driver
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 23 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 750 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 23 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 750 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 23 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 750 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 23 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 750 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 23 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 750 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 23 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 750 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 23 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 750 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 23 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 750 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 23 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 750 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 23 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 750 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 750 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 375 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 750 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 375 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 750 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 375 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 750 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 375 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 750 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 375 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 750 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 375 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 750 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 375 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 750 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 375 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 750 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 375 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 750 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 375 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 750 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 23 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 750 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 23 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 750 MHz (cpu 0)
Feb 25 22:43:14 hilbert /netbsd: schizo_set_cpufreq 23 MHz (cpu 0)
...
Feb 25 22:43:14 hilbert /netbsd: cd0 at scsibus0 target 6 lun 0: 
<TOSHIBA, DVD-ROM SD-M1401, 1009> cdrom removable
Feb 25 22:43:14 hilbert /netbsd: cd0: sync (50.00ns offset 16), 8-bit 
(20.000MB/s) transfers
Feb 25 22:43:14 hilbert /netbsd: sd0 at scsibus5 target 0 lun 0: 
<SEAGATE, ST3146807FC, 0006> disk fixed
Feb 25 22:43:14 hilbert /netbsd: sd0: 136 GB, 49855 cyl, 8 head, 718 
sec, 512 bytes/sect x 286749488 sectors
Feb 25 22:43:14 hilbert /netbsd: sd1 at scsibus5 target 1 lun 0: 
<SEAGATE, ST3146807FC, 0006> disk fixed
Feb 25 22:43:14 hilbert /netbsd: sd1: 136 GB, 49855 cyl, 8 head, 718 
sec, 512 bytes/sect x 286749488 sectors

	Output are written inside schizo_set_cpufreq() and cpu number is value 
returned by cpu_number().

	I don't understand why only CPU0 frequency is controlled by cpufreq and 
why no cpufreq debug line is written in log or console after "cd0 at 
scsibus0 target 6 lun 0:".

	I will send as soon as possible a patch.

	Regards,

	JKB
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.