On 18/07/2023 06:01, 蔡承達 wrote: >> >> On 17/07/2023 11:01, 蔡承達 wrote: >>> Guenter Roeck <linux@xxxxxxxxxxxx> 於 2023年7月17日 週一 上午1:00寫道: >>>> >>>> On 7/16/23 09:08, Krzysztof Kozlowski wrote: >>>> >>>> [ ... ] >>>> >>>>>> >>>>>> This patch serial doesn't use to binding the fan control h/w. It is >>>>>> used to binding the two independent h/w blocks. >>>>>> One is used to provide pwm output and another is used to monitor the >>>>>> speed of the input. >>>>>> My patch is used to point out that the pwm and the tach is the >>>>>> different function and don't need to >>>>>> bind together. You can not only combine them as the fan usage but also >>>>>> treat them as the individual module for >>>>>> use. For example: the pwm can use to be the beeper (pwm-beeper.c), the >>>>>> tach can be used to monitor the heart beat signal. >>>>> >>>>> Isn't this exactly the same as in every other SoC? PWMs can be used in >>>>> different ways? >>>>> >>>> >>>> ... and in every fan controller. Not that it really makes sense because >>>> normally the pwm controller part of such chips is tied to the fan input, >>>> to enable automatic fan control, but it is technically possible. >>>> In many cases this is also the case in SoCs, for example, in ast2500. >>>> Apparently this was redesigned in ast2600 where they two blocks are >>>> only lightly coupled (there are two pwm status bits in the fan status >>>> register, but I have no idea what those mean). If the blocks are tightly >>>> coupled, separate drivers don't really make sense. >>>> >>>> There are multiple ways to separate the pwm controller part from the >>>> fan inputs if that is really necessary. One would be to provide a >>>> sequence of address mappings, the other would be to pass the memory >>>> region from an mfd driver. It is not necessary to have N instances >>>> of the fan controller, even if the address space is not continuous. >>>> >>> >>> Hi Guenter, >>> >>> May I ask about the meaning of the sequence of address mappings? It appears >>> to consist of multiple tuples within the 'reg' property, indicating >>> the usage of PWM/Tach >>> registers within a single instance. After that I can use the dts like following: >>> >>> pwm: pwm@1e610000 { >>> ... >>> reg = <0x1e610000 0x8 >>> 0x1e610010 0x8 >>> 0x1e610020 0x8 >>> 0x1e610030 0x8 >>> 0x1e610040 0x8 >>> 0x1e610050 0x8 >>> 0x1e610060 0x8 >>> 0x1e610070 0x8 >>> 0x1e610080 0x8 >>> 0x1e610090 0x8 >>> 0x1e6100A0 0x8 >>> 0x1e6100B0 0x8 >>> 0x1e6100C0 0x8 >>> 0x1e6100D0 0x8 >>> 0x1e6100E0 0x8 >>> 0x1e6100F0 0x8>; >> >> >> Uh, no... I mean, why? We keep pointing out that this should not be done >> differently than any other SoC. Open any other SoC PWM controller and >> tell me why this is different? Why this cannot be one address space? > > Hi Krzysztof, > > This is because the register layout for PWM and Tach is not continuous. > Each PWM/Tach instance has its own set of controller registers, and they > are independent of each other. Register layout is not continuous in many other devices, so again - why this must be different? > > For example: > PWM0 uses registers 0x0 and 0x4, while Tach0 uses registers 0x8 and 0xc. > PWM1 uses registers 0x10 and 0x14, while Tach1 uses registers 0x18 and 0x1c. > ... > > To separate the PWM controller part from the fan inputs, Guenter has > provided two methods. > The first method involves passing the memory region from an MFD > driver, which was the I have no clue how can you pass memory region (Documentation/devicetree/bindings/reserved-memory/) from MFD and why does it make sense here. > initial method I intended to use. However, it seems that this method > does not make sense to you. > > Therefore, I would like to explore the second method suggested by > Guenter, which involves providing > a sequence of address mappings. Best regards, Krzysztof