1df77f773SConor Dooley# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2df77f773SConor Dooley 3df77f773SConor Dooley%YAML 1.2 4df77f773SConor Dooley--- 5df77f773SConor Dooley$id: http://devicetree.org/schemas/pwm/microchip,corepwm.yaml# 6df77f773SConor Dooley$schema: http://devicetree.org/meta-schemas/core.yaml# 7df77f773SConor Dooley 8*84e85359SKrzysztof Kozlowskititle: Microchip IP corePWM controller 9df77f773SConor Dooley 10df77f773SConor Dooleymaintainers: 11df77f773SConor Dooley - Conor Dooley <conor.dooley@microchip.com> 12df77f773SConor Dooley 13df77f773SConor Dooleydescription: | 14df77f773SConor Dooley corePWM is an 16 channel pulse width modulator FPGA IP 15df77f773SConor Dooley 16df77f773SConor Dooley https://www.microsemi.com/existing-parts/parts/152118 17df77f773SConor Dooley 18df77f773SConor DooleyallOf: 19df77f773SConor Dooley - $ref: pwm.yaml# 20df77f773SConor Dooley 21df77f773SConor Dooleyproperties: 22df77f773SConor Dooley compatible: 23df77f773SConor Dooley items: 24df77f773SConor Dooley - const: microchip,corepwm-rtl-v4 25df77f773SConor Dooley 26df77f773SConor Dooley reg: 27df77f773SConor Dooley maxItems: 1 28df77f773SConor Dooley 29df77f773SConor Dooley clocks: 30df77f773SConor Dooley maxItems: 1 31df77f773SConor Dooley 32df77f773SConor Dooley "#pwm-cells": 33a62d196eSConor Dooley enum: [2, 3] 34a62d196eSConor Dooley description: 35a62d196eSConor Dooley The only flag supported by the controller is PWM_POLARITY_INVERTED. 36df77f773SConor Dooley 37df77f773SConor Dooley microchip,sync-update-mask: 38df77f773SConor Dooley description: | 39df77f773SConor Dooley Depending on how the IP is instantiated, there are two modes of operation. 40df77f773SConor Dooley In synchronous mode, all channels are updated at the beginning of the PWM period, 41df77f773SConor Dooley and in asynchronous mode updates happen as the control registers are written. 42df77f773SConor Dooley A 16 bit wide "SHADOW_REG_EN" parameter of the IP core controls whether synchronous 43df77f773SConor Dooley mode is possible for each channel, and is set by the bitstream programmed to the 44df77f773SConor Dooley FPGA. If the IP core is instantiated with SHADOW_REG_ENx=1, both registers that 45df77f773SConor Dooley control the duty cycle for channel x have a second "shadow"/buffer reg synthesised. 46df77f773SConor Dooley At runtime a bit wide register exposed to APB can be used to toggle on/off 47df77f773SConor Dooley synchronised mode for all channels it has been synthesised for. 48df77f773SConor Dooley Each bit of "microchip,sync-update-mask" corresponds to a PWM channel & represents 49df77f773SConor Dooley whether synchronous mode is possible for the PWM channel. 50df77f773SConor Dooley 51df77f773SConor Dooley $ref: /schemas/types.yaml#/definitions/uint32 52df77f773SConor Dooley default: 0 53df77f773SConor Dooley 54df77f773SConor Dooley microchip,dac-mode-mask: 55df77f773SConor Dooley description: | 56df77f773SConor Dooley Optional, per-channel Low Ripple DAC mode is possible on this IP core. It creates 57df77f773SConor Dooley a minimum period pulse train whose High/Low average is that of the chosen duty 58df77f773SConor Dooley cycle. This "DAC" will have far better bandwidth and ripple performance than the 59df77f773SConor Dooley standard PWM algorithm can achieve. A 16 bit DAC_MODE module parameter of the IP 60df77f773SConor Dooley core, set at instantiation and by the bitstream programmed to the FPGA, determines 61df77f773SConor Dooley whether a given channel operates in regular PWM or DAC mode. 62df77f773SConor Dooley Each bit corresponds to a PWM channel & represents whether DAC mode is enabled 63df77f773SConor Dooley for that channel. 64df77f773SConor Dooley 65df77f773SConor Dooley $ref: /schemas/types.yaml#/definitions/uint32 66df77f773SConor Dooley default: 0 67df77f773SConor Dooley 68df77f773SConor Dooleyrequired: 69df77f773SConor Dooley - compatible 70df77f773SConor Dooley - reg 71df77f773SConor Dooley - clocks 72df77f773SConor Dooley 73df77f773SConor DooleyadditionalProperties: false 74df77f773SConor Dooley 75df77f773SConor Dooleyexamples: 76df77f773SConor Dooley - | 77df77f773SConor Dooley pwm@41000000 { 78df77f773SConor Dooley compatible = "microchip,corepwm-rtl-v4"; 79df77f773SConor Dooley microchip,sync-update-mask = /bits/ 32 <0>; 80df77f773SConor Dooley clocks = <&clkcfg 30>; 81df77f773SConor Dooley reg = <0x41000000 0xF0>; 82df77f773SConor Dooley #pwm-cells = <2>; 83df77f773SConor Dooley }; 84