On 08/11/2014 09:44 AM, Andrzej Hajda wrote: > On 08/11/2014 09:09 AM, Inki Dae wrote: >> On 2014년 08월 08일 18:40, Andrzej Hajda wrote: >>> On 08/08/2014 11:02 AM, Andrzej Hajda wrote: >>>> On 08/08/2014 09:37 AM, Inki Dae wrote: >>>>> On 2014년 08월 08일 16:03, Thierry Reding wrote: >>>>>> On Fri, Aug 08, 2014 at 10:45:47AM +0900, Inki Dae wrote: >>>>>>> On 2014년 08월 07일 22:55, Thierry Reding wrote: >>>>>>>> On Thu, Aug 07, 2014 at 10:39:29PM +0900, Inki Dae wrote: >>>>>>>>> On 2014년 08월 07일 22:17, Thierry Reding wrote: >>>>>>>>>> On Thu, Aug 07, 2014 at 10:05:44PM +0900, Inki Dae wrote: >>>>>>>>>>> On 2014년 08월 07일 20:09, Thierry Reding wrote: >>>>>>>>>>>> On Thu, Aug 07, 2014 at 07:49:03PM +0900, Inki Dae wrote: >>>>>>>>>>>>> On 2014년 08월 07일 18:09, Thierry Reding wrote: >>>>>>>>>>>>>> On Thu, Aug 07, 2014 at 04:51:18PM +0900, Inki Dae wrote: >>>>>>>>>>>>>>> On 2014년 08월 07일 15:58, Thierry Reding wrote: >>>>>>>>>>>>>>>> On Thu, Aug 07, 2014 at 02:09:19AM +0900, Inki Dae wrote: >>>>>>>>>>>>>>>>> 2014-08-06 16:43 GMT+09:00 Thierry Reding <thierry.reding@xxxxxxxxx>: >>>>>>>>>>>>>> [...] >>>>>>>>>>>>>>>>>> As far as I can tell non-continuous mode simply means that the host can >>>>>>>>>>>>>>>>>> turn off the HS clock after a high-speed transmission. I think Andrzej >>>>>>>>>>>>>>>>>> mentioned this already in another subthread, but this is an optional >>>>>>>>>>>>>>>>>> mode that peripherals can support if they have extra circuitry that >>>>>>>>>>>>>>>>>> provides an internal clock. Peripherals that don't have such circuitry >>>>>>>>>>>>>>>>>> may rely on the HS clock to perform in between transmissions and >>>>>>>>>>>>>>>>>> therefore require the HS clock to be always on (continuous mode). That's >>>>>>>>>>>>>>>>>> what the MIPI_DSI_CLOCK_NON_CONTINUOUS flag is: it advertises that the >>>>>>>>>>>>>>>>>> peripheral supports non-continuous mode and therefore the host can turn >>>>>>>>>>>>>>>>>> the HS clock off after high-speed transmissions. >>>>>>>>>>>>>>>>> What I don't make sure is this sentence. With >>>>>>>>>>>>>>>>> MIPI_DSI_CLOCK_NON_CONTIUOUS flag, I guess two possible operations. >>>>>>>>>>>>>>>>> One is, >>>>>>>>>>>>>>>>> 1. host controller will generates signals if a bit of a register >>>>>>>>>>>>>>>>> related to non-contiguous clock mode is set or unset. >>>>>>>>>>>>>>>>> 2. And then video data is transmitted to panel in HS mode. >>>>>>>>>>>>>>>>> 3. And then D-PHY detects LP-11 signal (positive and negative lane all >>>>>>>>>>>>>>>>> are high). >>>>>>>>>>>>>>>>> 4. And then D-PHY disables HS clock of host controller. >>>>>>>>>>>>>>>>> 5. At this time, operation mode of host controller becomes LPM. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Other is, >>>>>>>>>>>>>>>>> 1. host controller will generates signals if a bit of a register >>>>>>>>>>>>>>>>> related to non-contiguous clock mode is set or unset. >>>>>>>>>>>>>>>>> 2. And then D-PHY detects LP-11 signal (positive and negative lane all >>>>>>>>>>>>>>>>> are high). >>>>>>>>>>>>>>>>> 3. And then video data is transmitted to panel in LPM. >>>>>>>>>>>>>>>>> 4. At this time, operation mode of host controller becomes LPM. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> It seems that you says latter case. >>>>>>>>>>>>>>>> No. High speed clock and low power mode are orthogonal. Non-continuous >>>>>>>>>>>>>>>> mode simply means that the clock lane enters LP-11 between HS >>>>>>>>>>>>>>>> transmissions (see 5.6 "Clock Management" of the DSI specification). >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> It seems that clock lane enters LP-11 regardless of HS clock enabled if >>>>>>>>>>>>>>> non-continous mode is used. Right? >>>>>>>>>>>>>> No, I think as long as HS clock is enabled the clock lane won't enter >>>>>>>>>>>>>> LP-11. Non-continuous mode means that the controller can disable the HS >>>>>>>>>>>>>> clock between HS transmissions. So in non-continuous mode the clock lane >>>>>>>>>>>>>> can enter LP-11 because the controller disables the HS clock. >>>>>>>>>>>>> It makes me a little bit confusing. You said "if HS clock is enabled, >>>>>>>>>>>>> the the clock lane won't enter LP-11" But you said again "the clock lane >>>>>>>>>>>>> can enter LP-11 because the controller disables the HS clock" What is >>>>>>>>>>>>> the meaning? >>>>>>>>>>>> It means that if the HS clock is enabled, then the clock lane is not in >>>>>>>>>>>> LP-11. When the HS clock stops, then the clock lane enters LP-11. >>>>>>>>>>>> >>>>>>>>>>>>>> In continuous mode, then the clock will never be disabled, hence the >>>>>>>>>>>>>> clock lane will never enter LP-11. >>>>>>>>>>>>>> >>>>>>>>>>>>>>> And also it seems that non-continous mode is different from LPM at all >>>>>>>>>>>>>>> because with non-continuous mode, command data is transmitted to panel >>>>>>>>>>>>>>> in HS mode, but with LPM, command data is transmitted to panel in LP >>>>>>>>>>>>>>> mode. Also right? >>>>>>>>>>>>>> No. I think you can send command data to the peripheral in low power >>>>>>>>>>>>>> mode in both continuous and non-continuous clock modes. >>>>>>>>>>>>>> >>>>>>>>>>>>>>> If so, shouldn't the host driver disable HS clock, in case of LP mode, >>>>>>>>>>>>>>> before the host driver transmits command data? >>>>>>>>>>>>>> No. If the peripheral doesn't support non-continuous mode, then the HS >>>>>>>>>>>>>> clock must never be turned off. On the other hand, if the peripheral >>>>>>>>>>>>>> supports non-continuous mode, then the DSI host should automatically >>>>>>>>>>>>>> disable the HS clock between high-speed transmissions. That means if a >>>>>>>>>>>>>> packet is transmitted in low power mode the DSI host will not be >>>>>>>>>>>>>> transmitting in high-speed mode and therefore disable the HS clock. >>>>>>>>>>>>> What is LPM you think? I thought LPM is LP-11 and HS clock disabled. So >>>>>>>>>>>>> for LPM transfer, lanes should be LP-11 state and also HS clock of the >>>>>>>>>>>>> host controller should be disabled. >>>>>>>>>>>> No. I don't think any transmissions can happen when all lanes are in >>>>>>>>>>>> LP-11 state. The MIPI_DSI_MSG_USE_LPM is used to specify that a packet >>>>>>>>>>>> should be transmitted in low power mode (see LP Transmission in 2.1 >>>>>>>>>>>> "Definitions" of the MIPI DSI specification). >>>>>>>>>>>> >>>>>>>>>>> Hm.. I see. I meant, >>>>>>>>>>> >>>>>>>>>>> if (flags & MIPI_DSI_MSG_USE_LPM) >>>>>>>>>>> disable HS clock <- required. >>>>>>>>>>> >>>>>>>>>>> transmit command data <- in LPM. >>>>>>>>>> No. Disabling the HS clock is not required for LPM mode. In fact if the >>>>>>>>>> peripheral specifies that it doesn't support non-continuous mode then >>>>>>>>>> the HS clock must *never* be disabled as long as the peripheral is in >>>>>>>>>> use. >>>>>>>>>> >>>>>>>>>> MIPI_DSI_MSG_USE_LPM and MIPI_DSI_CLOCK_NON_CONTINUOUS are unrelated and >>>>>>>>>> need to be considered separately. >>>>>>>>> I mentioned already LPM and NON_CONTINUOUS are unrelated. >>>>>>>>> >>>>>>>>> It seems that you say the only way to transfer command data in LPM is >>>>>>>>> non-continuous clock mode. >>>>>>>> No, that's not what I'm saying. >>>>>>>> >>>>>>>>> However, you said and also the spec says, "Non-continuous mode simply >>>>>>>>> means that the clock lane enters LP-11 between HS transmissions". >>>>>>>>> Doesn't *between HS transmissions" mean the command data is transmitted >>>>>>>>> in HS, *not in LPM*, and clock lane enters LP-11 between them? >>>>>>>> Not necessarily. You can transmit command packets in high-speed mode, >>>>>>>> but you don't have to. If you transmit packets in low power mode, then >>>>>>> That would may why we are mentioning same comments repeatedly. >>>>>>> >>>>>>> In my case, host driver waits for the lane stop state (LP-11), and then >>>>>>> disables HS clock to transmit command data in LPM. Of course, I'm not >>>>>>> sure that yet it's correct way. >>>>>> That's confusing. How can the lane go to LP-11 when the clock is still >>>>>> running? >>>>> Actually, we are doing so. If the clock is still running then dsi driver >>>>> will wait for stop state of the clock and data lanes. Know that this is >>>>> valid only when initial time - just one time since power up. >>>>> >>>>> /* Check clock and data lane state are stop state */ >>>>> timeout = 100; >>>>> do { >>>>> if (timeout-- == 0) { >>>>> dev_err(dsi->dev, "waiting for bus lanes timed out\n"); >>>>> return -EFAULT; >>>>> } >>>>> >>>>> reg = readl(dsi->reg_base + DSIM_STATUS_REG); >>>>> if ((reg & DSIM_STOP_STATE_DAT(lanes_mask)) >>>>> != DSIM_STOP_STATE_DAT(lanes_mask)) >>>>> continue; >>>>> } while (!(reg & (DSIM_STOP_STATE_CLK | DSIM_TX_READY_HS_CLK))); >>>> This is only in initialization phase of DSI. 'If' inside the loop is >>>> quite clear >>>> - it checks for LP11 on all requested data lanes. 'while' check is >>>> little bit suspicious. >>>> It seems to be only for non-continuous clock behavior, on the other side >>>> it is according to guidelines >>>> in specs. >>> After reviewing it again 'while' check looks OK :), sorry for noise. >>> Loop exits w/o timeout either HS_CLK is ready (continuous clock >>> behavior) either HS_CLK is stopped (non-continuous clock behavior). >>> >>> Regards >>> Andrzej >>> >>>> Inki, have you tried to take an assumption your panel requires >>>> continuous clock behavior and exynos >>>> dsi driver currently supports only non-continuous clock behavior, so it >>>> needs some fixes to make it work. >> I'm not sure yet. All I can say is that the panel works well only with >> clearing DSIM_TX_REQUEST_HSCLK and DSIM_CMD_LPDT_LP. > I have performed simple test: I have enabled/disabled DSIM_TX_REQUEST_HSCLK > and tested DSIM_STOP_STATE_CLK | DSIM_TX_READY_HS_CLK bits at the end > of the initialization. The result: > a) DSIM_TX_REQUEST_HSCLK == 0 => DSIM_TX_READY_HS_CLK set > b) DSIM_TX_REQUEST_HSCLK == 1 => DSIM_STOP_STATE_CLK set > > It clearly indicates that DSIM_TX_REQUEST_HSCLK is equivalent of > non-continuous clock behavior. > So your panel requires continuous clock behavior(DSIM_TX_REQUEST_HSCLK > == 0). Ups, did stupid mistake, it is opposite: a) DSIM_TX_REQUEST_HSCLK == 1 => DSIM_TX_READY_HS_CLK set b) DSIM_TX_REQUEST_HSCLK == 0 => DSIM_STOP_STATE_CLK set So DSIM_TX_REQUEST_HSCLK is equivalent of continuous clock behavior. So it means your panel requires non-continuous clock behavior and this seems quite strange. Regards Andrzej > > Regarding DSIM_CMD_LPDT_LP you wrote it should be cleared in case of > your panel. It means > you need HS mode transfer. > > Regards > Andrzej > >> And more thing, we need to check that disabling these two flags means >> non-continuous clock mode or just low power transfer. >> I think these two flags all should be also disabled in case peripheral >> doesn't support non-continuous clock but want to transmit data in low power. >> In this case, what should we call this mode? >> >>>> Exynos specs are very unclear on the subject so it is hard to guess how >>>> the registers should be configured >> For this, Youngjun are trying to contact HW guys. >> >> Thanks, >> Inki Dae >> >>>> to have continuous/non-continuous clock behavior. >>>> >>>> Regards >>>> Andrzej >>>> >>>>>>> In Tegra, What to do for it? >>>>>> There are two bits in two separate registers for this: >>>>>> >>>>>> DSI_HOST_CONTROL: >>>>>> bit 5: DSI_HIGH_SPEED_TRANS: DSI high speed transmission of >>>>>> packets >>>>>> - 0 = LOW: low speed >>>>>> - 1 = HIGH: high speed >>>>>> >>>>>> DSI_CONTROL: >>>>>> bit 20: DSI_HS_CLK_CTRL: Control for the HS clock lane >>>>>> - 0 = CONTINUOUS: HS clock is on all the time >>>>>> - 1 = TX_ONLY: HS clock is only active during HS >>>>>> transmissions >>>>>> >>>>>> So if the peripheral supports non-continuous mode of operation we set >>>>>> the DSI_HS_CLK_CTRL bit, otherwise we clear it to make sure the clock >>>>>> remains on all the time. >>>>>> >>>>>> When a packet is to be transmitted in high speed mode, we set the >>>>>> DSI_HIGH_SPEED_TRANS bit. For low power mode transmissions that bit is >>>>>> cleared. >>>>> That is exactly what I want. In your case, if you want to transmit >>>>> command data in Low Power Mode in case of supporting non-continuous >>>>> clock mode, then you would set DSI_HS_CLK_CTRL (TX_ONLY), and also you >>>>> would clear DSI_HIGH_SPEED_TRANS (LOW). >>>>> >>>>> So I guess, >>>>> >>>>> if (flags & MIPI_DSI_MODE_NON_CONTINUOUS) { >>>>> disable DSI_HIGH_SPEED_TRANS; <- LOW >>>>> enable DSI_HS_CLK_CTRL; <- TX_ONLY >>>>> } >>>>> >>>>> transmit command data <- in LPM. >>>>> >>>>> However, what if the peripheral doesn't support non-continuous but want >>>>> to transmit command data in LPM? Is that impossible? >>>>> >>>>> Thanks, >>>>> Inki Dae >>>>> >>>>>> Thierry >>>>>> >>>> _______________________________________________ >>>> dri-devel mailing list >>>> dri-devel@xxxxxxxxxxxxxxxxxxxxx >>>> http://lists.freedesktop.org/mailman/listinfo/dri-devel >>>> >>> -- >>> To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in >>> the body of a message to majordomo@xxxxxxxxxxxxxxx >>> More majordomo info at http://vger.kernel.org/majordomo-info.html >>> _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel