On Tue, 2024-03-26 at 17:28 +0000, Tudor Ambarus wrote: > When SPI transfer is being prepared, the spi-s3c64xx driver will call > clk_set_rate() to change the rate of SPI source clock (IPCLK). But IPCLK > is a gate (leaf) clock, so it must propagate the rate change up the > clock tree, so that corresponding MUX/DIV clocks can actually change > their values. Add CLK_SET_RATE_PARENT flag to corresponding clocks for > all USI instances in GS101 PERIC0: USI{1-8, 14}. This change involves the > following clocks: > > PERIC0 USI*: > > Clock Div range MUX Selection > ------------------------------------------------------------------- > gout_peric0_peric0_top0_ipclk_* - - > dout_peric0_usi*_usi /1..16 - > mout_peric0_usi*_usi_user - {24.5 MHz, 400 MHz} > > With input clock of 400 MHz this scheme provides the following IPCLK > rate range, for each USI block: > > PERIC0 USI*: 1.5 MHz ... 400 MHz > > Accounting for internal /4 divider in SPI blocks, and because the max > SPI frequency is limited at 50 MHz, it gives us next SPI SCK rates: > > PERIC0 USI_SPI*: 384 KHz ... 49.9 MHz > > Which shall be fine for the applications of the SPI bus. > > Note that with this we allow the reparenting of the MUX_USIx clocks to > OSCCLK. Each instance of the USI IP has its own MUX_USI clock, thus the > reparenting of a MUX_USI clock corresponds to a single instance of the > USI IP. The datasheet mentions OSCCLK just in the low-power mode > context, but the downstream driver reparents too the MUX_USI clocks to > OSCCLK. Follow the downstream driver and do the same. > > Fixes: 893f133a040b ("clk: samsung: gs101: add support for cmu_peric0") > Signed-off-by: Tudor Ambarus <tudor.ambarus@xxxxxxxxxx> Acked-by: André Draszik <andre.draszik@xxxxxxxxxx>