Commit caddb8e41e178d3a27aebf6a15bb5e201481d93b

Authored by Macpaul Lin
Committed by Albert ARIBAUD
1 parent 286a5b253a

ftpmu010: fix relocation and enhance features

1. ftpmu010.h: fix and add definitions
   Enhanced for more features and asm related support
   according to datasheet.

   Note:
    - FTPMU010_PDLLCR0_HCLKOUTDIS is "incorrect" in datasheet.
    - FTPMU010_PDLLCR0_DLLFRANG is only 1 bit at bit #19. (not 20-19)
    - FTPMU010_PDLLCR0_HCLKOUTDIS is 4 bits at bit #20. (not 24-21)

2. ftpmu010.c: enhance features and fix relocation
   - The following functions is added for pmu features.
     ftpmu010_mfpsr_select_dev()
     ftpmu010_sdramhtc_set()
   - This patch also fix the declare statement for relocation.

Signed-off-by: Macpaul Lin <macpaul@andestech.com>

Showing 2 changed files with 72 additions and 5 deletions Side-by-side Diff

drivers/power/ftpmu010.c
... ... @@ -25,10 +25,10 @@
25 25 #include <asm/io.h>
26 26 #include <faraday/ftpmu010.h>
27 27  
28   -static struct ftpmu010 *pmu = (struct ftpmu010 *)CONFIG_FTPMU010_BASE;
29   -
  28 +/* OSCC: OSC Control Register */
30 29 void ftpmu010_32768osc_enable(void)
31 30 {
  31 + static struct ftpmu010 *pmu = (struct ftpmu010 *)CONFIG_FTPMU010_BASE;
32 32 unsigned int oscc;
33 33  
34 34 /* enable the 32768Hz oscillator */
35 35  
... ... @@ -46,8 +46,31 @@
46 46 writel(oscc, &pmu->OSCC);
47 47 }
48 48  
  49 +/* MFPSR: Multi-Function Port Setting Register */
  50 +void ftpmu010_mfpsr_select_dev(unsigned int dev)
  51 +{
  52 + static struct ftpmu010 *pmu = (struct ftpmu010 *)CONFIG_FTPMU010_BASE;
  53 + unsigned int mfpsr;
  54 +
  55 + mfpsr = readl(&pmu->MFPSR);
  56 + mfpsr |= dev;
  57 + writel(mfpsr, &pmu->MFPSR);
  58 +}
  59 +
  60 +void ftpmu010_mfpsr_diselect_dev(unsigned int dev)
  61 +{
  62 + static struct ftpmu010 *pmu = (struct ftpmu010 *)CONFIG_FTPMU010_BASE;
  63 + unsigned int mfpsr;
  64 +
  65 + mfpsr = readl(&pmu->MFPSR);
  66 + mfpsr &= ~dev;
  67 + writel(mfpsr, &pmu->MFPSR);
  68 +}
  69 +
  70 +/* PDLLCR0: PLL/DLL Control Register 0 */
49 71 void ftpmu010_dlldis_disable(void)
50 72 {
  73 + static struct ftpmu010 *pmu = (struct ftpmu010 *)CONFIG_FTPMU010_BASE;
51 74 unsigned int pdllcr0;
52 75  
53 76 pdllcr0 = readl(&pmu->PDLLCR0);
54 77  
... ... @@ -57,10 +80,22 @@
57 80  
58 81 void ftpmu010_sdram_clk_disable(unsigned int cr0)
59 82 {
  83 + static struct ftpmu010 *pmu = (struct ftpmu010 *)CONFIG_FTPMU010_BASE;
60 84 unsigned int pdllcr0;
61 85  
62 86 pdllcr0 = readl(&pmu->PDLLCR0);
63 87 pdllcr0 |= FTPMU010_PDLLCR0_HCLKOUTDIS(cr0);
64 88 writel(pdllcr0, &pmu->PDLLCR0);
  89 +}
  90 +
  91 +/* SDRAMHTC: SDRAM Signal Hold Time Control */
  92 +void ftpmu010_sdramhtc_set(unsigned int val)
  93 +{
  94 + static struct ftpmu010 *pmu = (struct ftpmu010 *)CONFIG_FTPMU010_BASE;
  95 + unsigned int sdramhtc;
  96 +
  97 + sdramhtc = readl(&pmu->SDRAMHTC);
  98 + sdramhtc |= val;
  99 + writel(sdramhtc, &pmu->SDRAMHTC);
65 100 }
include/faraday/ftpmu010.h
... ... @@ -126,22 +126,54 @@
126 126 /*
127 127 * Multi-Function Port Setting Register
128 128 */
  129 +#define FTPMU010_MFPSR_DEBUGSEL (1 << 17)
  130 +#define FTPMU010_MFPSR_DMA0PINSEL (1 << 16)
  131 +#define FTPMU010_MFPSR_DMA1PINSEL (1 << 15)
129 132 #define FTPMU010_MFPSR_MODEMPINSEL (1 << 14)
130 133 #define FTPMU010_MFPSR_AC97CLKOUTSEL (1 << 13)
  134 +#define FTPMU010_MFPSR_PWM1PINSEL (1 << 11)
  135 +#define FTPMU010_MFPSR_PWM0PINSEL (1 << 10)
  136 +#define FTPMU010_MFPSR_IRDACLKSEL (1 << 9)
  137 +#define FTPMU010_MFPSR_UARTCLKSEL (1 << 8)
  138 +#define FTPMU010_MFPSR_SSPCLKSEL (1 << 6)
  139 +#define FTPMU010_MFPSR_I2SCLKSEL (1 << 5)
  140 +#define FTPMU010_MFPSR_AC97CLKSEL (1 << 4)
131 141 #define FTPMU010_MFPSR_AC97PINSEL (1 << 3)
  142 +#define FTPMU010_MFPSR_TRIAHBDIS (1 << 1)
  143 +#define FTPMU010_MFPSR_TRIAHBDBG (1 << 0)
132 144  
133 145 /*
134 146 * PLL/DLL Control Register 0
  147 + * Note:
  148 + * 1. FTPMU010_PDLLCR0_HCLKOUTDIS:
  149 + * Datasheet indicated it starts at bit #21 which was wrong.
  150 + * 2. FTPMU010_PDLLCR0_DLLFRAG:
  151 + * Datasheet indicated it has 2 bit which was wrong.
135 152 */
136   -#define FTPMU010_PDLLCR0_HCLKOUTDIS(cr0) (((cr0) >> 20) & 0xf)
137   -#define FTPMU010_PDLLCR0_DLLFRAG (1 << 19)
  153 +#define FTPMU010_PDLLCR0_HCLKOUTDIS(cr0) (((cr0) & 0xf) << 20)
  154 +#define FTPMU010_PDLLCR0_DLLFRAG(cr0) (1 << 19)
138 155 #define FTPMU010_PDLLCR0_DLLSTSEL (1 << 18)
139 156 #define FTPMU010_PDLLCR0_DLLSTABLE (1 << 17)
140 157 #define FTPMU010_PDLLCR0_DLLDIS (1 << 16)
141   -#define FTPMU010_PDLLCR0_PLL1NS(cr0) (((cr0) >> 3) & 0x1ff)
  158 +#define FTPMU010_PDLLCR0_PLL1FRANG(cr0) (((cr0) & 0x3) << 12)
  159 +#define FTPMU010_PDLLCR0_PLL1NS(cr0) (((cr0) & 0x1ff) << 3)
142 160 #define FTPMU010_PDLLCR0_PLL1STSEL (1 << 2)
143 161 #define FTPMU010_PDLLCR0_PLL1STABLE (1 << 1)
144 162 #define FTPMU010_PDLLCR0_PLL1DIS (1 << 0)
  163 +
  164 +/*
  165 + * SDRAM Signal Hold Time Control Register
  166 + */
  167 +#define FTPMU010_SDRAMHTC_RCLK_DLY(x) (((x) & 0xf) << 28)
  168 +#define FTPMU010_SDRAMHTC_CTL_WCLK_DLY(x) (((x) & 0xf) << 24)
  169 +#define FTPMU010_SDRAMHTC_DAT_WCLK_DLY(x) (((x) & 0xf) << 20)
  170 +#define FTPMU010_SDRAMHTC_EBICTRL_DCSR (1 << 18)
  171 +#define FTPMU010_SDRAMHTC_EBIDATA_DCSR (1 << 17)
  172 +#define FTPMU010_SDRAMHTC_SDRAMCS_DCSR (1 << 16)
  173 +#define FTPMU010_SDRAMHTC_SDRAMCTL_DCSR (1 << 15)
  174 +#define FTPMU010_SDRAMHTC_CKE_DCSR (1 << 14)
  175 +#define FTPMU010_SDRAMHTC_DQM_DCSR (1 << 13)
  176 +#define FTPMU010_SDRAMHTC_SDCLK_DCSR (1 << 12)
145 177  
146 178 void ftpmu010_32768osc_enable(void);
147 179 void ftpmu010_dlldis_disable(void);