A10 HDMI support

Mori Hiroki yamori813 at yahoo.co.jp
Tue Mar 10 04:48:35 UTC 2020


Hi

Now HDMI work on A10.

I use u-boot initialize setting and only change
frame buffer address.

----- Original Message -----
> From: Mori Hiroki <yamori813 at yahoo.co.jp>
> To: "freebsd-arm at freebsd.org" <freebsd-arm at freebsd.org>
> Cc: 
> Date: 2020/3/6, Fri 21:07
> Subject: Re: A10 HDMI support
> 
> Hi
> 
> A10 and A20 CLK_PLL_VIDEO0 is PLL3.
> 
> PLL3 is 3000000(3M) step.
> 
> But minimam is 27M(x9).
> 
> 222M is just x74.
> 
> aw_clk_frac.c is miss calculate clock.
> 
> ----- Original Message -----
>>  From: Mori Hiroki <yamori813 at yahoo.co.jp>
>>  To: "freebsd-arm at freebsd.org" <freebsd-arm at freebsd.org>
>>  Cc: 
>>  Date: 2020/3/6, Fri 19:45
>>  Subject: Re: A10 HDMI support
>> 
>>  Hi
>> 
>>  I test this code.
>> 
>>  error = clk_set_freq(clk_vid, 222000000, CLK_SET_ROUND_DOWN);
>>  error = clk_get_freq(clk_vid, &lcd_fout);
>>  device_printf(sc->dev, "MORI MORI freq CLK_PLL_VIDEO0 
> %llu\n", 
>>  lcd_fout);
>> 
>>  Result is this.
>> 
>>  fb0: MORI MORI freq CLK_PLL_VIDEO0 240000000
>> 
>>  clkng is not work correctly.
>> 
>>  ----- Original Message -----
>>>   From: Mori Hiroki <yamori813 at yahoo.co.jp>
>>>   To: "freebsd-arm at freebsd.org" 
> <freebsd-arm at freebsd.org>
>>>   Cc: 
>>>   Date: 2020/3/6, Fri 14:55
>>>   Subject: Re: A10 HDMI support
>>> 
>>>   Hi
>>> 
>>>   I seem clkng don't have this method.
>>> 
>>> 
>>>   #define TCON_PLL_WORST          1000000
>>>   #define TCON_PLL_N_MIN          1
>>>   #define TCON_PLL_N_MAX          15
>>>   #define TCON_PLL_M_MIN          9
>>>   #define TCON_PLL_M_MAX          127
>>>   #define TCON_PLLREF_SINGLE      3000    /* kHz */
>>>   #define TCON_PLLREF_DOUBLE      6000    /* kHz */
>>>   #define TCON_RATE_KHZ(rate_hz)  ((rate_hz) / 1000)
>>>   #define TCON_RATE_HZ(rate_khz)  ((rate_khz) * 1000)
>>>   #define HDMI_DEFAULT_RATE       297000000
>>>   #define DEBE_DEFAULT_RATE       300000000
>>> 
>>>   static void
>>>   calc_tcon_pll(int f_ref, int f_out, int *pm, int *pn)
>>>   {
>>>           int best, m, n, f_cur, diff;
>>> 
>>>           best = TCON_PLL_WORST;
>>>           for (n = TCON_PLL_N_MIN; n <= TCON_PLL_N_MAX; n++) {
>>>                   for (m = TCON_PLL_M_MIN; m <= TCON_PLL_M_MAX; m++) 
> {
>>>                           f_cur = (m * f_ref) / n;
>>>                           diff = f_out - f_cur;
>>>                           if (diff > 0 && diff < best) {
>>>                                   best = diff;
>>>                                   *pm = m;
>>>                                   *pn = n;
>>>                           }
>>>                   }
>>>           }
>>>   }
>>> 
>>>   int
>>>   a10_clk_tcon_activate(unsigned int freq)
>>>   {
>>>           struct a10_ccm_softc *sc;
>>>           int m, n, m2, n2, f_single, f_double, dbl, src_sel;
>>> 
>>>           sc = a10_ccm_sc;
>>>           if (sc == NULL)
>>>                   return (ENXIO);
>>> 
>>>           m = n = m2 = n2 = 0;
>>>           dbl = 0;
>>> 
>>>           calc_tcon_pll(TCON_PLLREF_SINGLE, TCON_RATE_KHZ(freq), &m, 
> 
>>  &n);
>>>           calc_tcon_pll(TCON_PLLREF_DOUBLE, TCON_RATE_KHZ(freq), 
> &m2, 
>>>   &n2);
>>> 
>>>           f_single = n ? (m * TCON_PLLREF_SINGLE) / n : 0;
>>>           f_double = n2 ? (m2 * TCON_PLLREF_DOUBLE) / n2 : 0;
>>> 
>>>           if (f_double > f_single) {
>>>                   dbl = 1;
>>>                   m = m2;
>>>                   n = n2;
>>>           }
>>>           src_sel = dbl ? CCM_LCD_CH1_SRC_SEL_PLL3_2X : 
>>  CCM_LCD_CH1_SRC_SEL_PLL3;
>>> 
>>>           if (n == 0 || m == 0)
>>>                   return (EINVAL);
>>> 
>>>           /* Set PLL3 to the closest possible rate */
>>>           a10_clk_pll3_set_rate(TCON_RATE_HZ(m * TCON_PLLREF_SINGLE));
>>> 
>>>           /* Enable LCD0 CH1 clock */
>>>           ccm_write_4(sc, CCM_LCD0_CH1_CLK,
>>>               CCM_LCD_CH1_SCLK2_GATING | CCM_LCD_CH1_SCLK1_GATING |
>>>               (src_sel << CCM_LCD_CH1_SRC_SEL_SHIFT) | (n - 1));
>>> 
>>>           return (0);
>>>   }
>>>   ----- Original Message -----
>>>>    From: Mori Hiroki <yamori813 at yahoo.co.jp>
>>>>    To: "freebsd-arm at freebsd.org" 
>>  <freebsd-arm at freebsd.org>
>>>>    Cc: 
>>>>    Date: 2020/3/1, Sun 19:05
>>>>    Subject: A10 HDMI support
>>>> 
>>>>    Hi
>>>> 
>>>>    I have A10 PCduino. 
>>>> 
>>>>    I try to use a10_hdmi.c and a10_fb.c
>>>> 
>>>>    This code may be work at first implementation
>>>>    at 2016. 
>>>> 
>>>>    But change to dts away modify and chkng change
>>>>    complete broken this code.
>>>> 
>>>>    I modify dts and code on 12-Stable then almost
>>>>    detect. But not work.
>>>> 
>>>>    http://dmesgd.nycbug.org/index.cgi?do=view&id=5402 
>>>> 
>>>> 
>>>>    Dose some body repair this code?
>>>> 
>>>>    Thanks
>>>> 
>>>>    Hiroki Mori
>>>> 
>>>>    _______________________________________________
>>>>    freebsd-arm at freebsd.org mailing list
>>>>    https://lists.freebsd.org/mailman/listinfo/freebsd-arm 
>>>>    To unsubscribe, send any mail to 
>>>   "freebsd-arm-unsubscribe at freebsd.org"
>>>> 
>>> 
>>>   _______________________________________________
>>>   freebsd-arm at freebsd.org mailing list
>>>   https://lists.freebsd.org/mailman/listinfo/freebsd-arm 
>>>   To unsubscribe, send any mail to 
>>  "freebsd-arm-unsubscribe at freebsd.org"
>>> 
>> 
>>  _______________________________________________
>>  freebsd-arm at freebsd.org mailing list
>>  https://lists.freebsd.org/mailman/listinfo/freebsd-arm 
>>  To unsubscribe, send any mail to 
> "freebsd-arm-unsubscribe at freebsd.org"
>> 
> 
> _______________________________________________
> freebsd-arm at freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-arm 
> To unsubscribe, send any mail to "freebsd-arm-unsubscribe at freebsd.org"
> 



More information about the freebsd-arm mailing list