Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

MIPS: Alchemy: introduce helpers to access SYS register block.

This patch changes all absolute SYS_XY registers to offsets from the
SYS block base, prefixes them with AU1000 to avoid silent failures due
to changed addresses, and introduces helper functions to read/write
them.

No functional changes, comparing assembly of a few select functions shows
no differences.

Signed-off-by: Manuel Lauss <manuel.lauss@gmail.com>
Cc: Linux-MIPS <linux-mips@linux-mips.org>
Patchwork: https://patchwork.linux-mips.org/patch/7464/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>

authored by

Manuel Lauss and committed by
Ralf Baechle
1d09de7d 2ef1bb99

+152 -159
+2 -2
arch/mips/alchemy/board-mtx1.c
··· 85 85 #endif /* IS_ENABLED(CONFIG_USB_OHCI_HCD) */ 86 86 87 87 /* Initialize sys_pinfunc */ 88 - au_writel(SYS_PF_NI2, SYS_PINFUNC); 88 + alchemy_wrsys(SYS_PF_NI2, AU1000_SYS_PINFUNC); 89 89 90 90 /* Initialize GPIO */ 91 - au_writel(~0, KSEG1ADDR(AU1000_SYS_PHYS_ADDR) + SYS_TRIOUTCLR); 91 + alchemy_wrsys(~0, AU1000_SYS_TRIOUTCLR); 92 92 alchemy_gpio_direction_output(0, 0); /* Disable M66EN (PCI 66MHz) */ 93 93 alchemy_gpio_direction_output(3, 1); /* Disable PCI CLKRUN# */ 94 94 alchemy_gpio_direction_output(1, 1); /* Enable EXT_IO3 */
+2 -2
arch/mips/alchemy/board-xxs1500.c
··· 87 87 alchemy_gpio2_enable(); 88 88 89 89 /* Set multiple use pins (UART3/GPIO) to UART (it's used as UART too) */ 90 - pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_UR3; 90 + pin_func = alchemy_rdsys(AU1000_SYS_PINFUNC) & ~SYS_PF_UR3; 91 91 pin_func |= SYS_PF_UR3; 92 - au_writel(pin_func, SYS_PINFUNC); 92 + alchemy_wrsys(pin_func, AU1000_SYS_PINFUNC); 93 93 94 94 /* Enable UART */ 95 95 alchemy_uart_enable(AU1000_UART3_PHYS_ADDR);
+3 -3
arch/mips/alchemy/common/clocks.c
··· 91 91 if (au1xxx_cpu_has_pll_wo()) 92 92 cpu_speed = 396000000; 93 93 else 94 - cpu_speed = (au_readl(SYS_CPUPLL) & 0x0000003f) * AU1000_SRC_CLK; 94 + cpu_speed = (alchemy_rdsys(AU1000_SYS_CPUPLL) & 0x3f) * AU1000_SRC_CLK; 95 95 96 96 /* On Alchemy CPU:counter ratio is 1:1 */ 97 97 mips_hpt_frequency = cpu_speed; 98 98 /* Equation: Baudrate = CPU / (SD * 2 * CLKDIV * 16) */ 99 - set_au1x00_uart_baud_base(cpu_speed / (2 * ((int)(au_readl(SYS_POWERCTRL) 100 - & 0x03) + 2) * 16)); 99 + set_au1x00_uart_baud_base(cpu_speed / (2 * 100 + ((alchemy_rdsys(AU1000_SYS_POWERCTRL) & 0x03) + 2) * 16)); 101 101 102 102 set_au1x00_speed(cpu_speed); 103 103
+2 -3
arch/mips/alchemy/common/irq.c
··· 389 389 return -EINVAL; 390 390 391 391 local_irq_save(flags); 392 - wakemsk = __raw_readl((void __iomem *)SYS_WAKEMSK); 392 + wakemsk = alchemy_rdsys(AU1000_SYS_WAKEMSK); 393 393 if (on) 394 394 wakemsk |= 1 << bit; 395 395 else 396 396 wakemsk &= ~(1 << bit); 397 - __raw_writel(wakemsk, (void __iomem *)SYS_WAKEMSK); 398 - wmb(); 397 + alchemy_wrsys(wakemsk, AU1000_SYS_WAKEMSK); 399 398 local_irq_restore(flags); 400 399 401 400 return 0;
+1 -1
arch/mips/alchemy/common/platform.c
··· 420 420 memcpy(au1xxx_eth1_platform_data.mac, ethaddr, 6); 421 421 422 422 /* Register second MAC if enabled in pinfunc */ 423 - if (!(au_readl(SYS_PINFUNC) & (u32)SYS_PF_NI2)) { 423 + if (!(alchemy_rdsys(AU1000_SYS_PINFUNC) & SYS_PF_NI2)) { 424 424 ret = platform_device_register(&au1xxx_eth1_device); 425 425 if (ret) 426 426 printk(KERN_INFO "Alchemy: failed to register MAC1\n");
+12 -14
arch/mips/alchemy/common/power.c
··· 54 54 static void save_core_regs(void) 55 55 { 56 56 /* Clocks and PLLs. */ 57 - sleep_sys_clocks[0] = au_readl(SYS_FREQCTRL0); 58 - sleep_sys_clocks[1] = au_readl(SYS_FREQCTRL1); 59 - sleep_sys_clocks[2] = au_readl(SYS_CLKSRC); 60 - sleep_sys_clocks[3] = au_readl(SYS_CPUPLL); 61 - sleep_sys_clocks[4] = au_readl(SYS_AUXPLL); 57 + sleep_sys_clocks[0] = alchemy_rdsys(AU1000_SYS_FREQCTRL0); 58 + sleep_sys_clocks[1] = alchemy_rdsys(AU1000_SYS_FREQCTRL1); 59 + sleep_sys_clocks[2] = alchemy_rdsys(AU1000_SYS_CLKSRC); 60 + sleep_sys_clocks[3] = alchemy_rdsys(AU1000_SYS_CPUPLL); 61 + sleep_sys_clocks[4] = alchemy_rdsys(AU1000_SYS_AUXPLL); 62 62 63 63 /* pin mux config */ 64 - sleep_sys_pinfunc = au_readl(SYS_PINFUNC); 64 + sleep_sys_pinfunc = alchemy_rdsys(AU1000_SYS_PINFUNC); 65 65 66 66 /* Save the static memory controller configuration. */ 67 67 sleep_static_memctlr[0][0] = au_readl(MEM_STCFG0); ··· 85 85 * one of those Au1000 with a write-only PLL, where we dont 86 86 * have a valid value) 87 87 */ 88 - au_writel(sleep_sys_clocks[0], SYS_FREQCTRL0); 89 - au_writel(sleep_sys_clocks[1], SYS_FREQCTRL1); 90 - au_writel(sleep_sys_clocks[2], SYS_CLKSRC); 91 - au_writel(sleep_sys_clocks[4], SYS_AUXPLL); 88 + alchemy_wrsys(sleep_sys_clocks[0], AU1000_SYS_FREQCTRL0); 89 + alchemy_wrsys(sleep_sys_clocks[1], AU1000_SYS_FREQCTRL1); 90 + alchemy_wrsys(sleep_sys_clocks[2], AU1000_SYS_CLKSRC); 91 + alchemy_wrsys(sleep_sys_clocks[4], AU1000_SYS_AUXPLL); 92 92 if (!au1xxx_cpu_has_pll_wo()) 93 - au_writel(sleep_sys_clocks[3], SYS_CPUPLL); 94 - au_sync(); 93 + alchemy_wrsys(sleep_sys_clocks[3], AU1000_SYS_CPUPLL); 95 94 96 - au_writel(sleep_sys_pinfunc, SYS_PINFUNC); 97 - au_sync(); 95 + alchemy_wrsys(sleep_sys_pinfunc, AU1000_SYS_PINFUNC); 98 96 99 97 /* Restore the static memory controller configuration. */ 100 98 au_writel(sleep_static_memctlr[0][0], MEM_STCFG0);
+10 -13
arch/mips/alchemy/common/time.c
··· 46 46 47 47 static cycle_t au1x_counter1_read(struct clocksource *cs) 48 48 { 49 - return au_readl(SYS_RTCREAD); 49 + return alchemy_rdsys(AU1000_SYS_RTCREAD); 50 50 } 51 51 52 52 static struct clocksource au1x_counter1_clocksource = { ··· 60 60 static int au1x_rtcmatch2_set_next_event(unsigned long delta, 61 61 struct clock_event_device *cd) 62 62 { 63 - delta += au_readl(SYS_RTCREAD); 63 + delta += alchemy_rdsys(AU1000_SYS_RTCREAD); 64 64 /* wait for register access */ 65 - while (au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_M21) 65 + while (alchemy_rdsys(AU1000_SYS_CNTRCTRL) & SYS_CNTRL_M21) 66 66 ; 67 - au_writel(delta, SYS_RTCMATCH2); 68 - au_sync(); 67 + alchemy_wrsys(delta, AU1000_SYS_RTCMATCH2); 69 68 70 69 return 0; 71 70 } ··· 111 112 * (the 32S bit seems to be stuck set to 1 once a single clock- 112 113 * edge is detected, hence the timeouts). 113 114 */ 114 - if (CNTR_OK != (au_readl(SYS_COUNTER_CNTRL) & CNTR_OK)) 115 + if (CNTR_OK != (alchemy_rdsys(AU1000_SYS_CNTRCTRL) & CNTR_OK)) 115 116 goto cntr_err; 116 117 117 118 /* 118 119 * setup counter 1 (RTC) to tick at full speed 119 120 */ 120 121 t = 0xffffff; 121 - while ((au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_T1S) && --t) 122 + while ((alchemy_rdsys(AU1000_SYS_CNTRCTRL) & SYS_CNTRL_T1S) && --t) 122 123 asm volatile ("nop"); 123 124 if (!t) 124 125 goto cntr_err; 125 126 126 - au_writel(0, SYS_RTCTRIM); /* 32.768 kHz */ 127 - au_sync(); 127 + alchemy_wrsys(0, AU1000_SYS_RTCTRIM); /* 32.768 kHz */ 128 128 129 129 t = 0xffffff; 130 - while ((au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_C1S) && --t) 130 + while ((alchemy_rdsys(AU1000_SYS_CNTRCTRL) & SYS_CNTRL_C1S) && --t) 131 131 asm volatile ("nop"); 132 132 if (!t) 133 133 goto cntr_err; 134 - au_writel(0, SYS_RTCWRITE); 135 - au_sync(); 134 + alchemy_wrsys(0, AU1000_SYS_RTCWRITE); 136 135 137 136 t = 0xffffff; 138 - while ((au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_C1S) && --t) 137 + while ((alchemy_rdsys(AU1000_SYS_CNTRCTRL) & SYS_CNTRL_C1S) && --t) 139 138 asm volatile ("nop"); 140 139 if (!t) 141 140 goto cntr_err;
+2 -3
arch/mips/alchemy/devboards/db1000.c
··· 518 518 gpio_direction_input(20); /* sd1 cd# */ 519 519 520 520 /* spi_gpio on SSI0 pins */ 521 - pfc = __raw_readl((void __iomem *)SYS_PINFUNC); 521 + pfc = alchemy_rdsys(AU1000_SYS_PINFUNC); 522 522 pfc |= (1 << 0); /* SSI0 pins as GPIOs */ 523 - __raw_writel(pfc, (void __iomem *)SYS_PINFUNC); 524 - wmb(); 523 + alchemy_wrsys(pfc, AU1000_SYS_PINFUNC); 525 524 526 525 spi_register_board_info(db1100_spi_info, 527 526 ARRAY_SIZE(db1100_spi_info));
+7 -12
arch/mips/alchemy/devboards/db1200.c
··· 150 150 (whoami >> 4) & 0xf, (whoami >> 8) & 0xf, whoami & 0xf); 151 151 152 152 /* SMBus/SPI on PSC0, Audio on PSC1 */ 153 - pfc = __raw_readl((void __iomem *)SYS_PINFUNC); 153 + pfc = alchemy_rdsys(AU1000_SYS_PINFUNC); 154 154 pfc &= ~(SYS_PINFUNC_P0A | SYS_PINFUNC_P0B); 155 155 pfc &= ~(SYS_PINFUNC_P1A | SYS_PINFUNC_P1B | SYS_PINFUNC_FS3); 156 156 pfc |= SYS_PINFUNC_P1C; /* SPI is configured later */ 157 - __raw_writel(pfc, (void __iomem *)SYS_PINFUNC); 158 - wmb(); 157 + alchemy_wrsys(pfc, AU1000_SYS_PINFUNC); 159 158 160 159 /* Clock configurations: PSC0: ~50MHz via Clkgen0, derived from 161 160 * CPU clock; all other clock generators off/unused. ··· 165 166 div = ((div >> 1) - 1) & 0xff; 166 167 167 168 freq0 = div << SYS_FC_FRDIV0_BIT; 168 - __raw_writel(freq0, (void __iomem *)SYS_FREQCTRL0); 169 - wmb(); 169 + alchemy_wrsys(freq0, AU1000_SYS_FREQCTRL0); 170 170 freq0 |= SYS_FC_FE0; /* enable F0 */ 171 - __raw_writel(freq0, (void __iomem *)SYS_FREQCTRL0); 172 - wmb(); 171 + alchemy_wrsys(freq0, AU1000_SYS_FREQCTRL0); 173 172 174 173 /* psc0_intclk comes 1:1 from F0 */ 175 174 clksrc = SYS_CS_MUX_FQ0 << SYS_CS_ME0_BIT; 176 - __raw_writel(clksrc, (void __iomem *)SYS_CLKSRC); 177 - wmb(); 175 + alchemy_wrsys(clksrc, AU1000_SYS_CLKSRC); 178 176 179 177 return 0; 180 178 } ··· 882 886 * As a result, in SPI mode, OTG simply won't work (PSC0 uses 883 887 * it as an input pin which is pulled high on the boards). 884 888 */ 885 - pfc = __raw_readl((void __iomem *)SYS_PINFUNC) & ~SYS_PINFUNC_P0A; 889 + pfc = alchemy_rdsys(AU1000_SYS_PINFUNC) & ~SYS_PINFUNC_P0A; 886 890 887 891 /* switch off OTG VBUS supply */ 888 892 gpio_request(215, "otg-vbus"); ··· 908 912 printk(KERN_INFO " S6.8 ON : PSC0 mode SPI\n"); 909 913 printk(KERN_INFO " OTG port VBUS supply disabled\n"); 910 914 } 911 - __raw_writel(pfc, (void __iomem *)SYS_PINFUNC); 912 - wmb(); 915 + alchemy_wrsys(pfc, AU1000_SYS_PINFUNC); 913 916 914 917 /* Audio: DIP7 selects I2S(0)/AC97(1), but need I2C for I2S! 915 918 * so: DIP7=1 || DIP8=0 => AC97, DIP7=0 && DIP8=1 => I2S
+5 -5
arch/mips/alchemy/devboards/db1550.c
··· 31 31 static void __init db1550_hw_setup(void) 32 32 { 33 33 void __iomem *base; 34 + unsigned long v; 34 35 35 36 /* complete SPI setup: link psc0_intclk to a 48MHz source, 36 37 * and assign GPIO16 to PSC0_SYNC1 (SPI cs# line) as well as PSC1_SYNC 37 38 * for AC97 on PB1550. 38 39 */ 39 - base = (void __iomem *)SYS_CLKSRC; 40 - __raw_writel(__raw_readl(base) | 0x000001e0, base); 41 - base = (void __iomem *)SYS_PINFUNC; 42 - __raw_writel(__raw_readl(base) | 1 | SYS_PF_PSC1_S1, base); 43 - wmb(); 40 + v = alchemy_rdsys(AU1000_SYS_CLKSRC); 41 + alchemy_wrsys(v | 0x000001e0, AU1000_SYS_CLKSRC); 42 + v = alchemy_rdsys(AU1000_SYS_PINFUNC); 43 + alchemy_wrsys(v | 1 | SYS_PF_PSC1_S1, AU1000_SYS_PINFUNC); 44 44 45 45 /* reset the AC97 codec now, the reset time in the psc-ac97 driver 46 46 * is apparently too short although it's ridiculous as it is.
+15 -24
arch/mips/alchemy/devboards/pm.c
··· 45 45 alchemy_gpio1_input_enable(); 46 46 47 47 /* clear and setup wake cause and source */ 48 - au_writel(0, SYS_WAKEMSK); 49 - au_sync(); 50 - au_writel(0, SYS_WAKESRC); 51 - au_sync(); 48 + alchemy_wrsys(0, AU1000_SYS_WAKEMSK); 49 + alchemy_wrsys(0, AU1000_SYS_WAKESRC); 52 50 53 - au_writel(db1x_pm_wakemsk, SYS_WAKEMSK); 54 - au_sync(); 51 + alchemy_wrsys(db1x_pm_wakemsk, AU1000_SYS_WAKEMSK); 55 52 56 53 /* setup 1Hz-timer-based wakeup: wait for reg access */ 57 - while (au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_M20) 54 + while (alchemy_rdsys(AU1000_SYS_CNTRCTRL) & SYS_CNTRL_M20) 58 55 asm volatile ("nop"); 59 56 60 - au_writel(au_readl(SYS_TOYREAD) + db1x_pm_sleep_secs, SYS_TOYMATCH2); 61 - au_sync(); 57 + alchemy_wrsys(alchemy_rdsys(AU1000_SYS_TOYREAD) + db1x_pm_sleep_secs, 58 + AU1000_SYS_TOYMATCH2); 62 59 63 60 /* wait for value to really hit the register */ 64 - while (au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_M20) 61 + while (alchemy_rdsys(AU1000_SYS_CNTRCTRL) & SYS_CNTRL_M20) 65 62 asm volatile ("nop"); 66 63 67 64 /* ...and now the sandman can come! */ ··· 99 102 /* read and store wakeup source, the clear the register. To 100 103 * be able to clear it, WAKEMSK must be cleared first. 101 104 */ 102 - db1x_pm_last_wakesrc = au_readl(SYS_WAKESRC); 105 + db1x_pm_last_wakesrc = alchemy_rdsys(AU1000_SYS_WAKESRC); 103 106 104 - au_writel(0, SYS_WAKEMSK); 105 - au_writel(0, SYS_WAKESRC); 106 - au_sync(); 107 - 107 + alchemy_wrsys(0, AU1000_SYS_WAKEMSK); 108 + alchemy_wrsys(0, AU1000_SYS_WAKESRC); 108 109 } 109 110 110 111 static const struct platform_suspend_ops db1x_pm_ops = { ··· 237 242 * for confirmation since there's plenty of time from here to 238 243 * the next suspend cycle. 239 244 */ 240 - if (au_readl(SYS_TOYTRIM) != 32767) { 241 - au_writel(32767, SYS_TOYTRIM); 242 - au_sync(); 243 - } 245 + if (alchemy_rdsys(AU1000_SYS_TOYTRIM) != 32767) 246 + alchemy_wrsys(32767, AU1000_SYS_TOYTRIM); 244 247 245 - db1x_pm_last_wakesrc = au_readl(SYS_WAKESRC); 248 + db1x_pm_last_wakesrc = alchemy_rdsys(AU1000_SYS_WAKESRC); 246 249 247 - au_writel(0, SYS_WAKESRC); 248 - au_sync(); 249 - au_writel(0, SYS_WAKEMSK); 250 - au_sync(); 250 + alchemy_wrsys(0, AU1000_SYS_WAKESRC); 251 + alchemy_wrsys(0, AU1000_SYS_WAKEMSK); 251 252 252 253 suspend_set_ops(&db1x_pm_ops); 253 254
+47 -28
arch/mips/include/asm/mach-au1x00/au1000.h
··· 335 335 336 336 337 337 /* Programmable Counters 0 and 1 */ 338 - #define SYS_BASE 0xB1900000 339 - #define SYS_COUNTER_CNTRL (SYS_BASE + 0x14) 338 + #define AU1000_SYS_CNTRCTRL 0x14 340 339 # define SYS_CNTRL_E1S (1 << 23) 341 340 # define SYS_CNTRL_T1S (1 << 20) 342 341 # define SYS_CNTRL_M21 (1 << 19) ··· 357 358 # define SYS_CNTRL_C0S (1 << 0) 358 359 359 360 /* Programmable Counter 0 Registers */ 360 - #define SYS_TOYTRIM (SYS_BASE + 0) 361 - #define SYS_TOYWRITE (SYS_BASE + 4) 362 - #define SYS_TOYMATCH0 (SYS_BASE + 8) 363 - #define SYS_TOYMATCH1 (SYS_BASE + 0xC) 364 - #define SYS_TOYMATCH2 (SYS_BASE + 0x10) 365 - #define SYS_TOYREAD (SYS_BASE + 0x40) 361 + #define AU1000_SYS_TOYTRIM 0x00 362 + #define AU1000_SYS_TOYWRITE 0x04 363 + #define AU1000_SYS_TOYMATCH0 0x08 364 + #define AU1000_SYS_TOYMATCH1 0x0c 365 + #define AU1000_SYS_TOYMATCH2 0x10 366 + #define AU1000_SYS_TOYREAD 0x40 366 367 367 368 /* Programmable Counter 1 Registers */ 368 - #define SYS_RTCTRIM (SYS_BASE + 0x44) 369 - #define SYS_RTCWRITE (SYS_BASE + 0x48) 370 - #define SYS_RTCMATCH0 (SYS_BASE + 0x4C) 371 - #define SYS_RTCMATCH1 (SYS_BASE + 0x50) 372 - #define SYS_RTCMATCH2 (SYS_BASE + 0x54) 373 - #define SYS_RTCREAD (SYS_BASE + 0x58) 369 + #define AU1000_SYS_RTCTRIM 0x44 370 + #define AU1000_SYS_RTCWRITE 0x48 371 + #define AU1000_SYS_RTCMATCH0 0x4c 372 + #define AU1000_SYS_RTCMATCH1 0x50 373 + #define AU1000_SYS_RTCMATCH2 0x54 374 + #define AU1000_SYS_RTCREAD 0x58 374 375 375 376 376 377 /* GPIO */ 377 - #define SYS_PINFUNC 0xB190002C 378 + #define AU1000_SYS_PINFUNC 0x2C 378 379 # define SYS_PF_USB (1 << 15) /* 2nd USB device/host */ 379 380 # define SYS_PF_U3 (1 << 14) /* GPIO23/U3TXD */ 380 381 # define SYS_PF_U2 (1 << 13) /* GPIO22/U2TXD */ ··· 444 445 #define SYS_PINFUNC_S1B (1 << 2) 445 446 446 447 /* Power Management */ 447 - #define SYS_SCRATCH0 0xB1900018 448 - #define SYS_SCRATCH1 0xB190001C 449 - #define SYS_WAKEMSK 0xB1900034 450 - #define SYS_ENDIAN 0xB1900038 451 - #define SYS_POWERCTRL 0xB190003C 452 - #define SYS_WAKESRC 0xB190005C 453 - #define SYS_SLPPWR 0xB1900078 454 - #define SYS_SLEEP 0xB190007C 448 + #define AU1000_SYS_SCRATCH0 0x18 449 + #define AU1000_SYS_SCRATCH1 0x1c 450 + #define AU1000_SYS_WAKEMSK 0x34 451 + #define AU1000_SYS_ENDIAN 0x38 452 + #define AU1000_SYS_POWERCTRL 0x3c 453 + #define AU1000_SYS_WAKESRC 0x5c 454 + #define AU1000_SYS_SLPPWR 0x78 455 + #define AU1000_SYS_SLEEP 0x7c 455 456 456 457 #define SYS_WAKEMSK_D2 (1 << 9) 457 458 #define SYS_WAKEMSK_M2 (1 << 8) 458 459 #define SYS_WAKEMSK_GPIO(x) (1 << (x)) 459 460 460 461 /* Clock Controller */ 461 - #define SYS_FREQCTRL0 0xB1900020 462 + #define AU1000_SYS_FREQCTRL0 0x20 462 463 # define SYS_FC_FRDIV2_BIT 22 463 464 # define SYS_FC_FRDIV2_MASK (0xff << SYS_FC_FRDIV2_BIT) 464 465 # define SYS_FC_FE2 (1 << 21) ··· 471 472 # define SYS_FC_FRDIV0_MASK (0xff << SYS_FC_FRDIV0_BIT) 472 473 # define SYS_FC_FE0 (1 << 1) 473 474 # define SYS_FC_FS0 (1 << 0) 474 - #define SYS_FREQCTRL1 0xB1900024 475 + #define AU1000_SYS_FREQCTRL1 0x24 475 476 # define SYS_FC_FRDIV5_BIT 22 476 477 # define SYS_FC_FRDIV5_MASK (0xff << SYS_FC_FRDIV5_BIT) 477 478 # define SYS_FC_FE5 (1 << 21) ··· 484 485 # define SYS_FC_FRDIV3_MASK (0xff << SYS_FC_FRDIV3_BIT) 485 486 # define SYS_FC_FE3 (1 << 1) 486 487 # define SYS_FC_FS3 (1 << 0) 487 - #define SYS_CLKSRC 0xB1900028 488 + #define AU1000_SYS_CLKSRC 0x28 488 489 # define SYS_CS_ME1_BIT 27 489 490 # define SYS_CS_ME1_MASK (0x7 << SYS_CS_ME1_BIT) 490 491 # define SYS_CS_DE1 (1 << 26) ··· 524 525 # define SYS_CS_MUX_FQ3 0x5 525 526 # define SYS_CS_MUX_FQ4 0x6 526 527 # define SYS_CS_MUX_FQ5 0x7 527 - #define SYS_CPUPLL 0xB1900060 528 - #define SYS_AUXPLL 0xB1900064 528 + 529 + #define AU1000_SYS_CPUPLL 0x60 530 + #define AU1000_SYS_AUXPLL 0x64 531 + 532 + 533 + /**********************************************************************/ 529 534 530 535 531 536 /* The PCI chip selects are outside the 32bit space, and since we can't ··· 695 692 static inline u32 au_readl(unsigned long reg) 696 693 { 697 694 return *(volatile u32 *)reg; 695 + } 696 + 697 + /* helpers to access the SYS_* registers */ 698 + static inline unsigned long alchemy_rdsys(int regofs) 699 + { 700 + void __iomem *b = (void __iomem *)KSEG1ADDR(AU1000_SYS_PHYS_ADDR); 701 + 702 + return __raw_readl(b + regofs); 703 + } 704 + 705 + static inline void alchemy_wrsys(unsigned long v, int regofs) 706 + { 707 + void __iomem *b = (void __iomem *)KSEG1ADDR(AU1000_SYS_PHYS_ADDR); 708 + 709 + __raw_writel(v, b + regofs); 710 + wmb(); /* drain writebuffer */ 698 711 } 699 712 700 713 /* Early Au1000 have a write-only SYS_CPUPLL register. */
+26 -30
arch/mips/include/asm/mach-au1x00/gpio-au1000.h
··· 25 25 #define MAKE_IRQ(intc, off) (AU1000_INTC##intc##_INT_BASE + (off)) 26 26 27 27 /* GPIO1 registers within SYS_ area */ 28 - #define SYS_TRIOUTRD 0x100 29 - #define SYS_TRIOUTCLR 0x100 30 - #define SYS_OUTPUTRD 0x108 31 - #define SYS_OUTPUTSET 0x108 32 - #define SYS_OUTPUTCLR 0x10C 33 - #define SYS_PINSTATERD 0x110 34 - #define SYS_PININPUTEN 0x110 28 + #define AU1000_SYS_TRIOUTRD 0x100 29 + #define AU1000_SYS_TRIOUTCLR 0x100 30 + #define AU1000_SYS_OUTPUTRD 0x108 31 + #define AU1000_SYS_OUTPUTSET 0x108 32 + #define AU1000_SYS_OUTPUTCLR 0x10C 33 + #define AU1000_SYS_PINSTATERD 0x110 34 + #define AU1000_SYS_PININPUTEN 0x110 35 35 36 36 /* register offsets within GPIO2 block */ 37 - #define GPIO2_DIR 0x00 38 - #define GPIO2_OUTPUT 0x08 39 - #define GPIO2_PINSTATE 0x0C 40 - #define GPIO2_INTENABLE 0x10 41 - #define GPIO2_ENABLE 0x14 37 + #define AU1000_GPIO2_DIR 0x00 38 + #define AU1000_GPIO2_OUTPUT 0x08 39 + #define AU1000_GPIO2_PINSTATE 0x0C 40 + #define AU1000_GPIO2_INTENABLE 0x10 41 + #define AU1000_GPIO2_ENABLE 0x14 42 42 43 43 struct gpio; 44 44 ··· 217 217 */ 218 218 static inline void alchemy_gpio1_set_value(int gpio, int v) 219 219 { 220 - void __iomem *base = (void __iomem *)KSEG1ADDR(AU1000_SYS_PHYS_ADDR); 221 220 unsigned long mask = 1 << (gpio - ALCHEMY_GPIO1_BASE); 222 - unsigned long r = v ? SYS_OUTPUTSET : SYS_OUTPUTCLR; 223 - __raw_writel(mask, base + r); 224 - wmb(); 221 + unsigned long r = v ? AU1000_SYS_OUTPUTSET : AU1000_SYS_OUTPUTCLR; 222 + alchemy_wrsys(mask, r); 225 223 } 226 224 227 225 static inline int alchemy_gpio1_get_value(int gpio) 228 226 { 229 - void __iomem *base = (void __iomem *)KSEG1ADDR(AU1000_SYS_PHYS_ADDR); 230 227 unsigned long mask = 1 << (gpio - ALCHEMY_GPIO1_BASE); 231 - return __raw_readl(base + SYS_PINSTATERD) & mask; 228 + return alchemy_rdsys(AU1000_SYS_PINSTATERD) & mask; 232 229 } 233 230 234 231 static inline int alchemy_gpio1_direction_input(int gpio) 235 232 { 236 - void __iomem *base = (void __iomem *)KSEG1ADDR(AU1000_SYS_PHYS_ADDR); 237 233 unsigned long mask = 1 << (gpio - ALCHEMY_GPIO1_BASE); 238 - __raw_writel(mask, base + SYS_TRIOUTCLR); 239 - wmb(); 234 + alchemy_wrsys(mask, AU1000_SYS_TRIOUTCLR); 240 235 return 0; 241 236 } 242 237 ··· 274 279 { 275 280 void __iomem *base = (void __iomem *)KSEG1ADDR(AU1500_GPIO2_PHYS_ADDR); 276 281 unsigned long mask = 1 << (gpio - ALCHEMY_GPIO2_BASE); 277 - unsigned long d = __raw_readl(base + GPIO2_DIR); 282 + unsigned long d = __raw_readl(base + AU1000_GPIO2_DIR); 278 283 279 284 if (to_out) 280 285 d |= mask; 281 286 else 282 287 d &= ~mask; 283 - __raw_writel(d, base + GPIO2_DIR); 288 + __raw_writel(d, base + AU1000_GPIO2_DIR); 284 289 wmb(); 285 290 } 286 291 ··· 289 294 void __iomem *base = (void __iomem *)KSEG1ADDR(AU1500_GPIO2_PHYS_ADDR); 290 295 unsigned long mask; 291 296 mask = ((v) ? 0x00010001 : 0x00010000) << (gpio - ALCHEMY_GPIO2_BASE); 292 - __raw_writel(mask, base + GPIO2_OUTPUT); 297 + __raw_writel(mask, base + AU1000_GPIO2_OUTPUT); 293 298 wmb(); 294 299 } 295 300 296 301 static inline int alchemy_gpio2_get_value(int gpio) 297 302 { 298 303 void __iomem *base = (void __iomem *)KSEG1ADDR(AU1500_GPIO2_PHYS_ADDR); 299 - return __raw_readl(base + GPIO2_PINSTATE) & (1 << (gpio - ALCHEMY_GPIO2_BASE)); 304 + return __raw_readl(base + AU1000_GPIO2_PINSTATE) & 305 + (1 << (gpio - ALCHEMY_GPIO2_BASE)); 300 306 } 301 307 302 308 static inline int alchemy_gpio2_direction_input(int gpio) ··· 348 352 static inline void __alchemy_gpio2_mod_int(int gpio2, int en) 349 353 { 350 354 void __iomem *base = (void __iomem *)KSEG1ADDR(AU1500_GPIO2_PHYS_ADDR); 351 - unsigned long r = __raw_readl(base + GPIO2_INTENABLE); 355 + unsigned long r = __raw_readl(base + AU1000_GPIO2_INTENABLE); 352 356 if (en) 353 357 r |= 1 << gpio2; 354 358 else 355 359 r &= ~(1 << gpio2); 356 - __raw_writel(r, base + GPIO2_INTENABLE); 360 + __raw_writel(r, base + AU1000_GPIO2_INTENABLE); 357 361 wmb(); 358 362 } 359 363 ··· 430 434 static inline void alchemy_gpio2_enable(void) 431 435 { 432 436 void __iomem *base = (void __iomem *)KSEG1ADDR(AU1500_GPIO2_PHYS_ADDR); 433 - __raw_writel(3, base + GPIO2_ENABLE); /* reset, clock enabled */ 437 + __raw_writel(3, base + AU1000_GPIO2_ENABLE); /* reset, clock enabled */ 434 438 wmb(); 435 - __raw_writel(1, base + GPIO2_ENABLE); /* clock enabled */ 439 + __raw_writel(1, base + AU1000_GPIO2_ENABLE); /* clock enabled */ 436 440 wmb(); 437 441 } 438 442 ··· 444 448 static inline void alchemy_gpio2_disable(void) 445 449 { 446 450 void __iomem *base = (void __iomem *)KSEG1ADDR(AU1500_GPIO2_PHYS_ADDR); 447 - __raw_writel(2, base + GPIO2_ENABLE); /* reset, clock disabled */ 451 + __raw_writel(2, base + AU1000_GPIO2_ENABLE); /* reset, clock disabled */ 448 452 wmb(); 449 453 } 450 454
+1 -1
drivers/mmc/host/au1xmmc.c
··· 602 602 /* From databook: 603 603 * divisor = ((((cpuclock / sbus_divisor) / 2) / mmcclock) / 2) - 1 604 604 */ 605 - pbus /= ((au_readl(SYS_POWERCTRL) & 0x3) + 2); 605 + pbus /= ((alchemy_rdsys(AU1000_SYS_POWERCTRL) & 0x3) + 2); 606 606 pbus /= 2; 607 607 divisor = ((pbus / rate) / 2) - 1; 608 608
+8 -10
drivers/rtc/rtc-au1xxx.c
··· 32 32 { 33 33 unsigned long t; 34 34 35 - t = au_readl(SYS_TOYREAD); 35 + t = alchemy_rdsys(AU1000_SYS_TOYREAD); 36 36 37 37 rtc_time_to_tm(t, tm); 38 38 ··· 45 45 46 46 rtc_tm_to_time(tm, &t); 47 47 48 - au_writel(t, SYS_TOYWRITE); 49 - au_sync(); 48 + alchemy_wrsys(t, AU1000_SYS_TOYWRITE); 50 49 51 50 /* wait for the pending register write to succeed. This can 52 51 * take up to 6 seconds... 53 52 */ 54 - while (au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_C0S) 53 + while (alchemy_rdsys(AU1000_SYS_CNTRCTRL) & SYS_CNTRL_C0S) 55 54 msleep(1); 56 55 57 56 return 0; ··· 67 68 unsigned long t; 68 69 int ret; 69 70 70 - t = au_readl(SYS_COUNTER_CNTRL); 71 + t = alchemy_rdsys(AU1000_SYS_CNTRCTRL); 71 72 if (!(t & CNTR_OK)) { 72 73 dev_err(&pdev->dev, "counters not working; aborting.\n"); 73 74 ret = -ENODEV; ··· 77 78 ret = -ETIMEDOUT; 78 79 79 80 /* set counter0 tickrate to 1Hz if necessary */ 80 - if (au_readl(SYS_TOYTRIM) != 32767) { 81 + if (alchemy_rdsys(AU1000_SYS_TOYTRIM) != 32767) { 81 82 /* wait until hardware gives access to TRIM register */ 82 83 t = 0x00100000; 83 - while ((au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_T0S) && --t) 84 + while ((alchemy_rdsys(AU1000_SYS_CNTRCTRL) & SYS_CNTRL_T0S) && --t) 84 85 msleep(1); 85 86 86 87 if (!t) { ··· 92 93 } 93 94 94 95 /* set 1Hz TOY tick rate */ 95 - au_writel(32767, SYS_TOYTRIM); 96 - au_sync(); 96 + alchemy_wrsys(32767, AU1000_SYS_TOYTRIM); 97 97 } 98 98 99 99 /* wait until the hardware allows writes to the counter reg */ 100 - while (au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_C0S) 100 + while (alchemy_rdsys(AU1000_SYS_CNTRCTRL) & SYS_CNTRL_C0S) 101 101 msleep(1); 102 102 103 103 rtcdev = devm_rtc_device_register(&pdev->dev, "rtc-au1xxx",
+6 -5
drivers/video/fbdev/au1100fb.c
··· 507 507 print_dbg("phys=0x%08x, size=%dK", fbdev->fb_phys, fbdev->fb_len / 1024); 508 508 509 509 /* Setup LCD clock to AUX (48 MHz) */ 510 - sys_clksrc = au_readl(SYS_CLKSRC) & ~(SYS_CS_ML_MASK | SYS_CS_DL | SYS_CS_CL); 511 - au_writel((sys_clksrc | (1 << SYS_CS_ML_BIT)), SYS_CLKSRC); 510 + sys_clksrc = alchemy_rdsys(AU1000_SYS_CLKSRC); 511 + sys_clksrc &= ~(SYS_CS_ML_MASK | SYS_CS_DL | SYS_CS_CL); 512 + alchemy_wrsys((sys_clksrc | (1 << SYS_CS_ML_BIT)), AU1000_SYS_CLKSRC); 512 513 513 514 /* load the panel info into the var struct */ 514 515 au1100fb_var.bits_per_pixel = fbdev->panel->bpp; ··· 592 591 return 0; 593 592 594 593 /* Save the clock source state */ 595 - sys_clksrc = au_readl(SYS_CLKSRC); 594 + sys_clksrc = alchemy_rdsys(AU1000_SYS_CLKSRC); 596 595 597 596 /* Blank the LCD */ 598 597 au1100fb_fb_blank(VESA_POWERDOWN, &fbdev->info); 599 598 600 599 /* Stop LCD clocking */ 601 - au_writel(sys_clksrc & ~SYS_CS_ML_MASK, SYS_CLKSRC); 600 + alchemy_wrsys(sys_clksrc & ~SYS_CS_ML_MASK, AU1000_SYS_CLKSRC); 602 601 603 602 memcpy(&fbregs, fbdev->regs, sizeof(struct au1100fb_regs)); 604 603 ··· 615 614 memcpy(fbdev->regs, &fbregs, sizeof(struct au1100fb_regs)); 616 615 617 616 /* Restart LCD clocking */ 618 - au_writel(sys_clksrc, SYS_CLKSRC); 617 + alchemy_wrsys(sys_clksrc, AU1000_SYS_CLKSRC); 619 618 620 619 /* Unblank the LCD */ 621 620 au1100fb_fb_blank(VESA_NO_BLANKING, &fbdev->info);
+3 -3
drivers/video/fbdev/au1200fb.c
··· 830 830 if (!(panel->mode_clkcontrol & LCD_CLKCONTROL_EXT)) 831 831 { 832 832 uint32 sys_clksrc; 833 - au_writel(panel->mode_auxpll, SYS_AUXPLL); 834 - sys_clksrc = au_readl(SYS_CLKSRC) & ~0x0000001f; 833 + alchemy_wrsys(panel->mode_auxpll, AU1000_SYS_AUXPLL); 834 + sys_clksrc = alchemy_rdsys(AU1000_SYS_CLKSRC) & ~0x0000001f; 835 835 sys_clksrc |= panel->mode_toyclksrc; 836 - au_writel(sys_clksrc, SYS_CLKSRC); 836 + alchemy_wrsys(sys_clksrc, AU1000_SYS_CLKSRC); 837 837 } 838 838 839 839 /*