On Tue, 28 Aug 2007 15:19:22 -0500
Scott Wood wrote:

I would have it in the same patch, that adds clocking stuff to 8xx. And
maybe in the same, segregate source rather then having it in the foo_common.c, 
to ease fix/update/rework.

Just imho, not pressing for that.
> Signed-off-by: Scott Wood <[EMAIL PROTECTED]>
> ---
>  arch/powerpc/sysdev/cpm2_common.c |  100
> +++++++++++++++++++++++++++++++++++--
> include/asm-powerpc/cpm2.h        |    5 ++- 2 files changed, 99
> insertions(+), 6 deletions(-)
> 
> diff --git a/arch/powerpc/sysdev/cpm2_common.c
> b/arch/powerpc/sysdev/cpm2_common.c index 99ad1ed..549da4b 100644
> --- a/arch/powerpc/sysdev/cpm2_common.c
> +++ b/arch/powerpc/sysdev/cpm2_common.c
> @@ -140,7 +140,8 @@ int cpm2_clk_setup(enum cpm_clk_target target,
> int clock, int mode) cpmux_t __iomem *im_cpmux;
>       u32 __iomem *reg;
>       u32 mask = 7;
> -     u8 clk_map [24][3] = {
> +
> +     u8 clk_map[][3] = {
>               {CPM_CLK_FCC1, CPM_BRG5, 0},
>               {CPM_CLK_FCC1, CPM_BRG6, 1},
>               {CPM_CLK_FCC1, CPM_BRG7, 2},
> @@ -164,8 +165,40 @@ int cpm2_clk_setup(enum cpm_clk_target target,
> int clock, int mode) {CPM_CLK_FCC3, CPM_CLK13, 4},
>               {CPM_CLK_FCC3, CPM_CLK14, 5},
>               {CPM_CLK_FCC3, CPM_CLK15, 6},
> -             {CPM_CLK_FCC3, CPM_CLK16, 7}
> -             };
> +             {CPM_CLK_FCC3, CPM_CLK16, 7},
> +             {CPM_CLK_SCC1, CPM_BRG1, 0},
> +             {CPM_CLK_SCC1, CPM_BRG2, 1},
> +             {CPM_CLK_SCC1, CPM_BRG3, 2},
> +             {CPM_CLK_SCC1, CPM_BRG4, 3},
> +             {CPM_CLK_SCC1, CPM_CLK11, 4},
> +             {CPM_CLK_SCC1, CPM_CLK12, 5},
> +             {CPM_CLK_SCC1, CPM_CLK3, 6},
> +             {CPM_CLK_SCC1, CPM_CLK4, 7},
> +             {CPM_CLK_SCC2, CPM_BRG1, 0},
> +             {CPM_CLK_SCC2, CPM_BRG2, 1},
> +             {CPM_CLK_SCC2, CPM_BRG3, 2},
> +             {CPM_CLK_SCC2, CPM_BRG4, 3},
> +             {CPM_CLK_SCC2, CPM_CLK11, 4},
> +             {CPM_CLK_SCC2, CPM_CLK12, 5},
> +             {CPM_CLK_SCC2, CPM_CLK3, 6},
> +             {CPM_CLK_SCC2, CPM_CLK4, 7},
> +             {CPM_CLK_SCC3, CPM_BRG1, 0},
> +             {CPM_CLK_SCC3, CPM_BRG2, 1},
> +             {CPM_CLK_SCC3, CPM_BRG3, 2},
> +             {CPM_CLK_SCC3, CPM_BRG4, 3},
> +             {CPM_CLK_SCC3, CPM_CLK5, 4},
> +             {CPM_CLK_SCC3, CPM_CLK6, 5},
> +             {CPM_CLK_SCC3, CPM_CLK7, 6},
> +             {CPM_CLK_SCC3, CPM_CLK8, 7},
> +             {CPM_CLK_SCC4, CPM_BRG1, 0},
> +             {CPM_CLK_SCC4, CPM_BRG2, 1},
> +             {CPM_CLK_SCC4, CPM_BRG3, 2},
> +             {CPM_CLK_SCC4, CPM_BRG4, 3},
> +             {CPM_CLK_SCC4, CPM_CLK5, 4},
> +             {CPM_CLK_SCC4, CPM_CLK6, 5},
> +             {CPM_CLK_SCC4, CPM_CLK7, 6},
> +             {CPM_CLK_SCC4, CPM_CLK8, 7},
> +     };
>  
>       im_cpmux = cpm2_map(im_cpmux);
>  
> @@ -205,23 +238,80 @@ int cpm2_clk_setup(enum cpm_clk_target target,
> int clock, int mode) if (mode == CPM_CLK_RX)
>               shift += 3;
>  
> -     for (i=0; i<24; i++) {
> +     for (i = 0; i < ARRAY_SIZE(clk_map); i++) {
>               if (clk_map[i][0] == target && clk_map[i][1] ==
> clock) { bits = clk_map[i][2];
>                       break;
>               }
>       }
> -     if (i == sizeof(clk_map)/3)
> +     if (i == ARRAY_SIZE(clk_map))
>           ret = -EINVAL;
>  
>       bits <<= shift;
>       mask <<= shift;
> +
>       out_be32(reg, (in_be32(reg) & ~mask) | bits);
>  
>       cpm2_unmap(im_cpmux);
>       return ret;
>  }
>  
> +int cpm2_smc_clk_setup(enum cpm_clk_target target, int clock)
> +{
> +     int ret = 0;
> +     int shift;
> +     int i, bits = 0;
> +     cpmux_t __iomem *im_cpmux;
> +     u8 __iomem *reg;
> +     u8 mask = 3;
> +
> +     u8 clk_map[][3] = {
> +             {CPM_CLK_SMC1, CPM_BRG1, 0},
> +             {CPM_CLK_SMC1, CPM_BRG7, 1},
> +             {CPM_CLK_SMC1, CPM_CLK7, 2},
> +             {CPM_CLK_SMC1, CPM_CLK9, 3},
> +             {CPM_CLK_SMC2, CPM_BRG2, 0},
> +             {CPM_CLK_SMC2, CPM_BRG8, 1},
> +             {CPM_CLK_SMC2, CPM_CLK4, 2},
> +             {CPM_CLK_SMC2, CPM_CLK15, 3},
> +     };
> +
> +     im_cpmux = cpm2_map(im_cpmux);
> +
> +     switch (target) {
> +     case CPM_CLK_SMC1:
> +             reg = &im_cpmux->cmx_smr;
> +             mask = 3;
> +             shift = 4;
> +             break;
> +     case CPM_CLK_SMC2:
> +             reg = &im_cpmux->cmx_smr;
> +             mask = 3;
> +             shift = 0;
> +             break;
> +     default:
> +             printk(KERN_ERR "cpm2_smc_clock_setup: invalid clock
> target\n");
> +             return -EINVAL;
> +     }
> +
> +     for (i = 0; i < ARRAY_SIZE(clk_map); i++) {
> +             if (clk_map[i][0] == target && clk_map[i][1] ==
> clock) {
> +                     bits = clk_map[i][2];
> +                     break;
> +             }
> +     }
> +     if (i == ARRAY_SIZE(clk_map))
> +         ret = -EINVAL;
> +
> +     bits <<= shift;
> +     mask <<= shift;
> +
> +     out_8(reg, (in_8(reg) & ~mask) | bits);
> +
> +     cpm2_unmap(im_cpmux);
> +     return ret;
> +}
> +
>  /*
>   * dpalloc / dpfree bits.
>   */
> diff --git a/include/asm-powerpc/cpm2.h b/include/asm-powerpc/cpm2.h
> index c036506..41a45db 100644
> --- a/include/asm-powerpc/cpm2.h
> +++ b/include/asm-powerpc/cpm2.h
> @@ -1206,7 +1206,9 @@ enum cpm_clk_target {
>       CPM_CLK_SCC4,
>       CPM_CLK_FCC1,
>       CPM_CLK_FCC2,
> -     CPM_CLK_FCC3
> +     CPM_CLK_FCC3,
> +     CPM_CLK_SMC1,
> +     CPM_CLK_SMC2,
>  };
>  
>  enum cpm_clk {
> @@ -1243,6 +1245,7 @@ enum cpm_clk {
>  };
>  
>  extern int cpm2_clk_setup(enum cpm_clk_target target, int clock, int
> mode); +extern int cpm2_smc_clk_setup(enum cpm_clk_target target, int
> clock); 
>  #endif /* __CPM2__ */
>  #endif /* __KERNEL__ */


-- 
Sincerely, Vitaly
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

Reply via email to