• MyungJoo Ham's avatar
    ARM: S5PV210: Correct clock register properties · 154d62e4
    MyungJoo Ham authored
    1. Corrected shift values of I2S and UART clocks (CLK_GATE_IP3), which were
    defined incorrectly.
    
    2. Corrected shift values of sclk_audio, uclk1, sclk_fimd, sclk_mmc,
    sclk_spi, sclk_pwm, which had duplicated .enable/.ctrlbit with their
    twins defined in struct clk init_clocks_disable[] and struct clk
    init_clocks[]. We've changed their .enable/.ctrlbit to use CLK_SRC_MASK
    register to avoid the duplicated clock problem described below.
    
    NOTE: Duplicated Clock Problem
    Please note that each clock definition should access different control
    register; otherwise, the system may suffer lockups. For example, if we
    have two clock definitions "a" and "b" which access the same register
    (and the shift value). Then, when we do:
    
    	module A
    	clk = clk_get("a");
    	clk->clk_enable(clk);
    
    	module B (context switch)
    	clk = clk_get("b");
    	clk->clk_enable(clk);
    	do something with clk.
    	clk->clk_disable(clk);
    
    	module A (context switch)
    	do something with clk
    	* At this point, the system may hang.
    
    Therefore, there should be no clock definitions with the same contol
    register/shift. If we need to create "aliases", then, creating child
    clocks sharing the clock should be fine.
    
    3. Corrected other sclk_* shift values and access registers.
    Signed-off-by: default avatarMyungJoo Ham <myungjoo.ham@samsung.com>
    Signed-off-by: default avatarKyungmin Park <kyungmin.park@samsung.com>
    [kgene.kim@samsung.com: minor title and message fix]
    Signed-off-by: default avatarKukjin Kim <kgene.kim@samsung.com>
    154d62e4
clock.c 24.6 KB