forked from Minki/linux
PRCM changes for omaps. I ended up merging these with the
big endian changes because of the merge conflicts for read and write operations. Via Paul Walmsley <paul@pwsan.com>: Some OMAP PRCM cleanup patches. These help prepare to convert the PRCM code into drivers. Basic build, boot, and PM test results are available here: http://www.pwsan.com/omap/testlogs/prcm-cleanup-v3.16/20140515213244/ -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJTeorxAAoJEBvUPslcq6Vzwj8P/jIOYVE3Y6Gf5DJYVog9Gbwe HItn4+0cfLtJkX0/VCAYNFMl/n4phR+qz5PNldMVdIs2E8BUyqdAoaU6mQ+xmvhy BsCXzAQxlxlVhfdl+PDBaJ2Z6lU6CUZ+QSngGBWCJuEjERv6iTGtlZxcfn7kdlxY Qb71abg034vyhTEtcKWPas7qAyH7vLchTg2315XJrbg8R9pG19nh6G8Q6GBcX3cf 5ASQ02L8oqpVx5QDaKldTHolvWfOmGym2+kYcY83rgh2KkZ8+UxVJW8XM8RnMDjS 0CGVcTyQ+l2aFQ9dlTw82VYno8QdMhKiocs4XdzBbUXUiNmUWAGk4xHtDbtH3+yB 4r1CKX9yCv4H/arvz59sTO3vIgSVFwpS1RgNfQNgF5zucjkAy8V8qZsORuFVcrom VkQIf5j3itOMPVzMayLjntT2w9sEY7xey1RT9PQMyNtuoMUNeAujgNXy204LQgyZ eYP8uDCMmPpGIz6lMqXC/pthsZcNW7SoDlS08CGAS8FdgIYYJaM3Il+XSWwOSIaf 6DnSkeHtcwaVVJm5c+aq3TJR9qeCoufl15LdI8orr8w1yhDcDN/wTfUXITiPcfw5 DuET/RNZG4cbE1emcOlzqUHNlDU4L4aE9Ic5PYdG3htiWDrog6vTV02EgmnnNSto hoRzMCexx2CcCbNHkuSZ =e4VG -----END PGP SIGNATURE----- Merge tag 'omap-for-v3.16/prcm-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap into next/cleanup Merge "ARM: omap prcm changes for v3.16 merge window" from Tony Lindgren: PRCM changes for omaps. I ended up merging these with the big endian changes because of the merge conflicts for read and write operations. Via Paul Walmsley <paul@pwsan.com>: Some OMAP PRCM cleanup patches. These help prepare to convert the PRCM code into drivers. Basic build, boot, and PM test results are available here: http://www.pwsan.com/omap/testlogs/prcm-cleanup-v3.16/20140515213244/ * tag 'omap-for-v3.16/prcm-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap: ARM: OMAP4: PRCM: remove references to cm-regbits-44xx.h from PRCM core files ARM: OMAP3/4: PRM: add support of late_init call to prm_ll_ops ARM: OMAP3/OMAP4: PRM: add prm_features flags and add IO wakeup under it ARM: OMAP3/4: PRM: provide io chain reconfig function through irq setup ARM: OMAP2+: PRM: remove unnecessary cpu_is_XXX calls from prm_init / exit ARM: OMAP2+: PRCM: cleanup some header includes ARM: OMAP4: CM: use cm_base* in register address calculations ARM: OMAP2/3: CM: remove some external dependencies ARM: OMAP2+: prcm: add omap_test_timeout to prcm-common.h ARM: OMAP3: CM: remove a few OMAP34XX_CM_REGADDR defines ARM: OMAP: debug-leds: raw read and write endian fix ARM: OMAP: counter-32k: raw read and write endian fix ARM: OMAP: dmtimer: raw read and write endian fix ARM: OMAP2+: raw read and write endian fix Signed-off-by: Olof Johansson <olof@lixom.net>
This commit is contained in:
commit
ae0cda2f2a
@ -160,13 +160,13 @@ static u8 get_gpmc0_type(void)
|
||||
if (!fpga_map_addr)
|
||||
return -ENOMEM;
|
||||
|
||||
if (!(__raw_readw(fpga_map_addr + REG_FPGA_REV)))
|
||||
if (!(readw_relaxed(fpga_map_addr + REG_FPGA_REV)))
|
||||
/* we dont have an DEBUG FPGA??? */
|
||||
/* Depend on #defines!! default to strata boot return param */
|
||||
goto unmap;
|
||||
|
||||
/* S8-DIP-OFF = 1, S8-DIP-ON = 0 */
|
||||
cs = __raw_readw(fpga_map_addr + REG_FPGA_DIP_SWITCH_INPUT2) & 0xf;
|
||||
cs = readw_relaxed(fpga_map_addr + REG_FPGA_DIP_SWITCH_INPUT2) & 0xf;
|
||||
|
||||
/* ES2.0 SDP's onwards 4 dip switches are provided for CS */
|
||||
if (omap_rev() >= OMAP3430_REV_ES1_0)
|
||||
|
@ -138,7 +138,7 @@ int omap2_reprogram_dpllcore(struct clk_hw *hw, unsigned long rate,
|
||||
if (!dd)
|
||||
return -EINVAL;
|
||||
|
||||
tmpset.cm_clksel1_pll = __raw_readl(dd->mult_div1_reg);
|
||||
tmpset.cm_clksel1_pll = readl_relaxed(dd->mult_div1_reg);
|
||||
tmpset.cm_clksel1_pll &= ~(dd->mult_mask |
|
||||
dd->div1_mask);
|
||||
div = ((curr_prcm_set->xtal_speed / 1000000) - 1);
|
||||
|
@ -39,9 +39,9 @@ int omap2_enable_osc_ck(struct clk_hw *clk)
|
||||
{
|
||||
u32 pcc;
|
||||
|
||||
pcc = __raw_readl(prcm_clksrc_ctrl);
|
||||
pcc = readl_relaxed(prcm_clksrc_ctrl);
|
||||
|
||||
__raw_writel(pcc & ~OMAP_AUTOEXTCLKMODE_MASK, prcm_clksrc_ctrl);
|
||||
writel_relaxed(pcc & ~OMAP_AUTOEXTCLKMODE_MASK, prcm_clksrc_ctrl);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -57,9 +57,9 @@ void omap2_disable_osc_ck(struct clk_hw *clk)
|
||||
{
|
||||
u32 pcc;
|
||||
|
||||
pcc = __raw_readl(prcm_clksrc_ctrl);
|
||||
pcc = readl_relaxed(prcm_clksrc_ctrl);
|
||||
|
||||
__raw_writel(pcc | OMAP_AUTOEXTCLKMODE_MASK, prcm_clksrc_ctrl);
|
||||
writel_relaxed(pcc | OMAP_AUTOEXTCLKMODE_MASK, prcm_clksrc_ctrl);
|
||||
}
|
||||
|
||||
unsigned long omap2_osc_clk_recalc(struct clk_hw *clk,
|
||||
|
@ -33,7 +33,7 @@ u32 omap2xxx_get_sysclkdiv(void)
|
||||
{
|
||||
u32 div;
|
||||
|
||||
div = __raw_readl(prcm_clksrc_ctrl);
|
||||
div = readl_relaxed(prcm_clksrc_ctrl);
|
||||
div &= OMAP_SYSCLKDIV_MASK;
|
||||
div >>= OMAP_SYSCLKDIV_SHIFT;
|
||||
|
||||
|
@ -18,7 +18,6 @@
|
||||
|
||||
#include "powerdomain.h"
|
||||
#include "clock.h"
|
||||
#include "omap_hwmod.h"
|
||||
|
||||
/*
|
||||
* Clockdomain flags
|
||||
@ -98,6 +97,8 @@ struct clkdm_dep {
|
||||
/* Possible flags for struct clockdomain._flags */
|
||||
#define _CLKDM_FLAG_HWSUP_ENABLED BIT(0)
|
||||
|
||||
struct omap_hwmod;
|
||||
|
||||
/**
|
||||
* struct clockdomain - OMAP clockdomain
|
||||
* @name: clockdomain name
|
||||
|
@ -18,9 +18,6 @@
|
||||
#include <linux/err.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include "soc.h"
|
||||
#include "iomap.h"
|
||||
#include "common.h"
|
||||
#include "prm2xxx.h"
|
||||
#include "cm.h"
|
||||
#include "cm2xxx.h"
|
||||
@ -390,7 +387,7 @@ void omap2xxx_cm_set_mod_dividers(u32 mpu, u32 dsp, u32 gfx, u32 core, u32 mdm)
|
||||
tmp = omap2_cm_read_mod_reg(CORE_MOD, CM_CLKSEL1) &
|
||||
OMAP24XX_CLKSEL_DSS2_MASK;
|
||||
omap2_cm_write_mod_reg(core | tmp, CORE_MOD, CM_CLKSEL1);
|
||||
if (cpu_is_omap2430())
|
||||
if (mdm)
|
||||
omap2_cm_write_mod_reg(mdm, OMAP2430_MDM_MOD, CM_CLKSEL);
|
||||
}
|
||||
|
||||
@ -405,19 +402,11 @@ static struct cm_ll_data omap2xxx_cm_ll_data = {
|
||||
|
||||
int __init omap2xxx_cm_init(void)
|
||||
{
|
||||
if (!cpu_is_omap24xx())
|
||||
return 0;
|
||||
|
||||
return cm_register(&omap2xxx_cm_ll_data);
|
||||
}
|
||||
|
||||
static void __exit omap2xxx_cm_exit(void)
|
||||
{
|
||||
if (!cpu_is_omap24xx())
|
||||
return;
|
||||
|
||||
/* Should never happen */
|
||||
WARN(cm_unregister(&omap2xxx_cm_ll_data),
|
||||
"%s: cm_ll_data function pointer mismatch\n", __func__);
|
||||
cm_unregister(&omap2xxx_cm_ll_data);
|
||||
}
|
||||
__exitcall(omap2xxx_cm_exit);
|
||||
|
@ -52,12 +52,12 @@
|
||||
|
||||
static inline u32 omap2_cm_read_mod_reg(s16 module, u16 idx)
|
||||
{
|
||||
return __raw_readl(cm_base + module + idx);
|
||||
return readl_relaxed(cm_base + module + idx);
|
||||
}
|
||||
|
||||
static inline void omap2_cm_write_mod_reg(u32 val, s16 module, u16 idx)
|
||||
{
|
||||
__raw_writel(val, cm_base + module + idx);
|
||||
writel_relaxed(val, cm_base + module + idx);
|
||||
}
|
||||
|
||||
/* Read-modify-write a register in a CM module. Caller must lock */
|
||||
|
@ -50,13 +50,13 @@
|
||||
/* Read a register in a CM instance */
|
||||
static inline u32 am33xx_cm_read_reg(u16 inst, u16 idx)
|
||||
{
|
||||
return __raw_readl(cm_base + inst + idx);
|
||||
return readl_relaxed(cm_base + inst + idx);
|
||||
}
|
||||
|
||||
/* Write into a register in a CM */
|
||||
static inline void am33xx_cm_write_reg(u32 val, u16 inst, u16 idx)
|
||||
{
|
||||
__raw_writel(val, cm_base + inst + idx);
|
||||
writel_relaxed(val, cm_base + inst + idx);
|
||||
}
|
||||
|
||||
/* Read-modify-write a register in CM */
|
||||
|
@ -17,11 +17,8 @@
|
||||
#ifndef __ARCH_ARM_MACH_OMAP2_CM_33XX_H
|
||||
#define __ARCH_ARM_MACH_OMAP2_CM_33XX_H
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#include "cm.h"
|
||||
#include "cm-regbits-33xx.h"
|
||||
#include "iomap.h"
|
||||
|
||||
/* CM base address */
|
||||
#define AM33XX_CM_BASE 0x44e00000
|
||||
|
@ -18,9 +18,6 @@
|
||||
#include <linux/err.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include "soc.h"
|
||||
#include "iomap.h"
|
||||
#include "common.h"
|
||||
#include "prm2xxx_3xxx.h"
|
||||
#include "cm.h"
|
||||
#include "cm3xxx.h"
|
||||
@ -388,7 +385,8 @@ void omap3_cm_save_context(void)
|
||||
omap2_cm_read_mod_reg(OMAP3430_IVA2_MOD, CM_CLKSEL1);
|
||||
cm_context.iva2_cm_clksel2 =
|
||||
omap2_cm_read_mod_reg(OMAP3430_IVA2_MOD, CM_CLKSEL2);
|
||||
cm_context.cm_sysconfig = __raw_readl(OMAP3430_CM_SYSCONFIG);
|
||||
cm_context.cm_sysconfig =
|
||||
omap2_cm_read_mod_reg(OCP_MOD, OMAP3430_CM_SYSCONFIG);
|
||||
cm_context.sgx_cm_clksel =
|
||||
omap2_cm_read_mod_reg(OMAP3430ES2_SGX_MOD, CM_CLKSEL);
|
||||
cm_context.dss_cm_clksel =
|
||||
@ -418,7 +416,8 @@ void omap3_cm_save_context(void)
|
||||
omap2_cm_read_mod_reg(PLL_MOD, OMAP3430ES2_CM_CLKSEL5);
|
||||
cm_context.pll_cm_clken2 =
|
||||
omap2_cm_read_mod_reg(PLL_MOD, OMAP3430ES2_CM_CLKEN2);
|
||||
cm_context.cm_polctrl = __raw_readl(OMAP3430_CM_POLCTRL);
|
||||
cm_context.cm_polctrl =
|
||||
omap2_cm_read_mod_reg(OCP_MOD, OMAP3430_CM_POLCTRL);
|
||||
cm_context.iva2_cm_fclken =
|
||||
omap2_cm_read_mod_reg(OMAP3430_IVA2_MOD, CM_FCLKEN);
|
||||
cm_context.iva2_cm_clken_pll =
|
||||
@ -519,7 +518,8 @@ void omap3_cm_restore_context(void)
|
||||
CM_CLKSEL1);
|
||||
omap2_cm_write_mod_reg(cm_context.iva2_cm_clksel2, OMAP3430_IVA2_MOD,
|
||||
CM_CLKSEL2);
|
||||
__raw_writel(cm_context.cm_sysconfig, OMAP3430_CM_SYSCONFIG);
|
||||
omap2_cm_write_mod_reg(cm_context.cm_sysconfig, OCP_MOD,
|
||||
OMAP3430_CM_SYSCONFIG);
|
||||
omap2_cm_write_mod_reg(cm_context.sgx_cm_clksel, OMAP3430ES2_SGX_MOD,
|
||||
CM_CLKSEL);
|
||||
omap2_cm_write_mod_reg(cm_context.dss_cm_clksel, OMAP3430_DSS_MOD,
|
||||
@ -547,7 +547,8 @@ void omap3_cm_restore_context(void)
|
||||
OMAP3430ES2_CM_CLKSEL5);
|
||||
omap2_cm_write_mod_reg(cm_context.pll_cm_clken2, PLL_MOD,
|
||||
OMAP3430ES2_CM_CLKEN2);
|
||||
__raw_writel(cm_context.cm_polctrl, OMAP3430_CM_POLCTRL);
|
||||
omap2_cm_write_mod_reg(cm_context.cm_polctrl, OCP_MOD,
|
||||
OMAP3430_CM_POLCTRL);
|
||||
omap2_cm_write_mod_reg(cm_context.iva2_cm_fclken, OMAP3430_IVA2_MOD,
|
||||
CM_FCLKEN);
|
||||
omap2_cm_write_mod_reg(cm_context.iva2_cm_clken_pll, OMAP3430_IVA2_MOD,
|
||||
@ -669,19 +670,11 @@ static struct cm_ll_data omap3xxx_cm_ll_data = {
|
||||
|
||||
int __init omap3xxx_cm_init(void)
|
||||
{
|
||||
if (!cpu_is_omap34xx())
|
||||
return 0;
|
||||
|
||||
return cm_register(&omap3xxx_cm_ll_data);
|
||||
}
|
||||
|
||||
static void __exit omap3xxx_cm_exit(void)
|
||||
{
|
||||
if (!cpu_is_omap34xx())
|
||||
return;
|
||||
|
||||
/* Should never happen */
|
||||
WARN(cm_unregister(&omap3xxx_cm_ll_data),
|
||||
"%s: cm_ll_data function pointer mismatch\n", __func__);
|
||||
cm_unregister(&omap3xxx_cm_ll_data);
|
||||
}
|
||||
__exitcall(omap3xxx_cm_exit);
|
||||
|
@ -29,9 +29,8 @@
|
||||
* These registers appear once per CM module.
|
||||
*/
|
||||
|
||||
#define OMAP3430_CM_REVISION OMAP34XX_CM_REGADDR(OCP_MOD, 0x0000)
|
||||
#define OMAP3430_CM_SYSCONFIG OMAP34XX_CM_REGADDR(OCP_MOD, 0x0010)
|
||||
#define OMAP3430_CM_POLCTRL OMAP34XX_CM_REGADDR(OCP_MOD, 0x009c)
|
||||
#define OMAP3430_CM_SYSCONFIG 0x0010
|
||||
#define OMAP3430_CM_POLCTRL 0x009c
|
||||
|
||||
#define OMAP3_CM_CLKOUT_CTRL_OFFSET 0x0070
|
||||
#define OMAP3430_CM_CLKOUT_CTRL OMAP_CM_REGADDR(OMAP3430_CCR_MOD, 0x0070)
|
||||
|
@ -18,35 +18,32 @@
|
||||
#include <linux/err.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include "iomap.h"
|
||||
#include "common.h"
|
||||
#include "cm.h"
|
||||
#include "cm1_44xx.h"
|
||||
#include "cm2_44xx.h"
|
||||
#include "cm-regbits-44xx.h"
|
||||
|
||||
/* CM1 hardware module low-level functions */
|
||||
|
||||
/* Read a register in CM1 */
|
||||
u32 omap4_cm1_read_inst_reg(s16 inst, u16 reg)
|
||||
{
|
||||
return __raw_readl(OMAP44XX_CM1_REGADDR(inst, reg));
|
||||
return readl_relaxed(cm_base + inst + reg);
|
||||
}
|
||||
|
||||
/* Write into a register in CM1 */
|
||||
void omap4_cm1_write_inst_reg(u32 val, s16 inst, u16 reg)
|
||||
{
|
||||
__raw_writel(val, OMAP44XX_CM1_REGADDR(inst, reg));
|
||||
writel_relaxed(val, cm_base + inst + reg);
|
||||
}
|
||||
|
||||
/* Read a register in CM2 */
|
||||
u32 omap4_cm2_read_inst_reg(s16 inst, u16 reg)
|
||||
{
|
||||
return __raw_readl(OMAP44XX_CM2_REGADDR(inst, reg));
|
||||
return readl_relaxed(cm2_base + inst + reg);
|
||||
}
|
||||
|
||||
/* Write into a register in CM2 */
|
||||
void omap4_cm2_write_inst_reg(u32 val, s16 inst, u16 reg)
|
||||
{
|
||||
__raw_writel(val, OMAP44XX_CM2_REGADDR(inst, reg));
|
||||
writel_relaxed(val, cm2_base + inst + reg);
|
||||
}
|
||||
|
@ -14,11 +14,11 @@
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/bug.h>
|
||||
|
||||
#include "cm2xxx.h"
|
||||
#include "cm3xxx.h"
|
||||
#include "cm44xx.h"
|
||||
#include "common.h"
|
||||
|
||||
/*
|
||||
* cm_ll_data: function pointers to SoC-specific implementations of
|
||||
|
@ -21,8 +21,6 @@
|
||||
#include <linux/err.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include "iomap.h"
|
||||
#include "common.h"
|
||||
#include "clockdomain.h"
|
||||
#include "cm.h"
|
||||
#include "cm1_44xx.h"
|
||||
@ -30,12 +28,18 @@
|
||||
#include "cm44xx.h"
|
||||
#include "cminst44xx.h"
|
||||
#include "cm-regbits-34xx.h"
|
||||
#include "cm-regbits-44xx.h"
|
||||
#include "prcm44xx.h"
|
||||
#include "prm44xx.h"
|
||||
#include "prcm_mpu44xx.h"
|
||||
#include "prcm-common.h"
|
||||
|
||||
#define OMAP4430_IDLEST_SHIFT 16
|
||||
#define OMAP4430_IDLEST_MASK (0x3 << 16)
|
||||
#define OMAP4430_CLKTRCTRL_SHIFT 0
|
||||
#define OMAP4430_CLKTRCTRL_MASK (0x3 << 0)
|
||||
#define OMAP4430_MODULEMODE_SHIFT 0
|
||||
#define OMAP4430_MODULEMODE_MASK (0x3 << 0)
|
||||
|
||||
/*
|
||||
* CLKCTRL_IDLEST_*: possible values for the CM_*_CLKCTRL.IDLEST bitfield:
|
||||
*
|
||||
@ -116,7 +120,7 @@ u32 omap4_cminst_read_inst_reg(u8 part, u16 inst, u16 idx)
|
||||
BUG_ON(part >= OMAP4_MAX_PRCM_PARTITIONS ||
|
||||
part == OMAP4430_INVALID_PRCM_PARTITION ||
|
||||
!_cm_bases[part]);
|
||||
return __raw_readl(_cm_bases[part] + inst + idx);
|
||||
return readl_relaxed(_cm_bases[part] + inst + idx);
|
||||
}
|
||||
|
||||
/* Write into a register in a CM instance */
|
||||
@ -125,7 +129,7 @@ void omap4_cminst_write_inst_reg(u32 val, u8 part, u16 inst, u16 idx)
|
||||
BUG_ON(part >= OMAP4_MAX_PRCM_PARTITIONS ||
|
||||
part == OMAP4430_INVALID_PRCM_PARTITION ||
|
||||
!_cm_bases[part]);
|
||||
__raw_writel(val, _cm_bases[part] + inst + idx);
|
||||
writel_relaxed(val, _cm_bases[part] + inst + idx);
|
||||
}
|
||||
|
||||
/* Read-modify-write a register in CM1. Caller must lock */
|
||||
|
@ -151,32 +151,32 @@ void __iomem *omap_ctrl_base_get(void)
|
||||
|
||||
u8 omap_ctrl_readb(u16 offset)
|
||||
{
|
||||
return __raw_readb(OMAP_CTRL_REGADDR(offset));
|
||||
return readb_relaxed(OMAP_CTRL_REGADDR(offset));
|
||||
}
|
||||
|
||||
u16 omap_ctrl_readw(u16 offset)
|
||||
{
|
||||
return __raw_readw(OMAP_CTRL_REGADDR(offset));
|
||||
return readw_relaxed(OMAP_CTRL_REGADDR(offset));
|
||||
}
|
||||
|
||||
u32 omap_ctrl_readl(u16 offset)
|
||||
{
|
||||
return __raw_readl(OMAP_CTRL_REGADDR(offset));
|
||||
return readl_relaxed(OMAP_CTRL_REGADDR(offset));
|
||||
}
|
||||
|
||||
void omap_ctrl_writeb(u8 val, u16 offset)
|
||||
{
|
||||
__raw_writeb(val, OMAP_CTRL_REGADDR(offset));
|
||||
writeb_relaxed(val, OMAP_CTRL_REGADDR(offset));
|
||||
}
|
||||
|
||||
void omap_ctrl_writew(u16 val, u16 offset)
|
||||
{
|
||||
__raw_writew(val, OMAP_CTRL_REGADDR(offset));
|
||||
writew_relaxed(val, OMAP_CTRL_REGADDR(offset));
|
||||
}
|
||||
|
||||
void omap_ctrl_writel(u32 val, u16 offset)
|
||||
{
|
||||
__raw_writel(val, OMAP_CTRL_REGADDR(offset));
|
||||
writel_relaxed(val, OMAP_CTRL_REGADDR(offset));
|
||||
}
|
||||
|
||||
/*
|
||||
@ -188,12 +188,12 @@ void omap_ctrl_writel(u32 val, u16 offset)
|
||||
|
||||
u32 omap4_ctrl_pad_readl(u16 offset)
|
||||
{
|
||||
return __raw_readl(OMAP4_CTRL_PAD_REGADDR(offset));
|
||||
return readl_relaxed(OMAP4_CTRL_PAD_REGADDR(offset));
|
||||
}
|
||||
|
||||
void omap4_ctrl_pad_writel(u32 val, u16 offset)
|
||||
{
|
||||
__raw_writel(val, OMAP4_CTRL_PAD_REGADDR(offset));
|
||||
writel_relaxed(val, OMAP4_CTRL_PAD_REGADDR(offset));
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP3
|
||||
@ -222,7 +222,7 @@ void omap3_ctrl_write_boot_mode(u8 bootmode)
|
||||
*
|
||||
* XXX This should use some omap_ctrl_writel()-type function
|
||||
*/
|
||||
__raw_writel(l, OMAP2_L4_IO_ADDRESS(OMAP343X_SCRATCHPAD + 4));
|
||||
writel_relaxed(l, OMAP2_L4_IO_ADDRESS(OMAP343X_SCRATCHPAD + 4));
|
||||
}
|
||||
|
||||
#endif
|
||||
@ -285,7 +285,7 @@ void omap3_clear_scratchpad_contents(void)
|
||||
if (omap2_prm_read_mod_reg(OMAP3430_GR_MOD, OMAP3_PRM_RSTST_OFFSET) &
|
||||
OMAP3430_GLOBAL_COLD_RST_MASK) {
|
||||
for ( ; offset <= max_offset; offset += 0x4)
|
||||
__raw_writel(0x0, (v_addr + offset));
|
||||
writel_relaxed(0x0, (v_addr + offset));
|
||||
omap2_prm_set_mod_reg_bits(OMAP3430_GLOBAL_COLD_RST_MASK,
|
||||
OMAP3430_GR_MOD,
|
||||
OMAP3_PRM_RSTST_OFFSET);
|
||||
|
@ -91,7 +91,7 @@ static inline void dma_write(u32 val, int reg, int lch)
|
||||
addr += reg_map[reg].offset;
|
||||
addr += reg_map[reg].stride * lch;
|
||||
|
||||
__raw_writel(val, addr);
|
||||
writel_relaxed(val, addr);
|
||||
}
|
||||
|
||||
static inline u32 dma_read(int reg, int lch)
|
||||
@ -101,7 +101,7 @@ static inline u32 dma_read(int reg, int lch)
|
||||
addr += reg_map[reg].offset;
|
||||
addr += reg_map[reg].stride * lch;
|
||||
|
||||
return __raw_readl(addr);
|
||||
return readl_relaxed(addr);
|
||||
}
|
||||
|
||||
static void omap2_clear_dma(int lch)
|
||||
|
@ -170,12 +170,12 @@ static irqreturn_t gpmc_handle_irq(int irq, void *dev);
|
||||
|
||||
static void gpmc_write_reg(int idx, u32 val)
|
||||
{
|
||||
__raw_writel(val, gpmc_base + idx);
|
||||
writel_relaxed(val, gpmc_base + idx);
|
||||
}
|
||||
|
||||
static u32 gpmc_read_reg(int idx)
|
||||
{
|
||||
return __raw_readl(gpmc_base + idx);
|
||||
return readl_relaxed(gpmc_base + idx);
|
||||
}
|
||||
|
||||
void gpmc_cs_write_reg(int cs, int idx, u32 val)
|
||||
@ -183,7 +183,7 @@ void gpmc_cs_write_reg(int cs, int idx, u32 val)
|
||||
void __iomem *reg_addr;
|
||||
|
||||
reg_addr = gpmc_base + GPMC_CS0_OFFSET + (cs * GPMC_CS_SIZE) + idx;
|
||||
__raw_writel(val, reg_addr);
|
||||
writel_relaxed(val, reg_addr);
|
||||
}
|
||||
|
||||
static u32 gpmc_cs_read_reg(int cs, int idx)
|
||||
@ -191,7 +191,7 @@ static u32 gpmc_cs_read_reg(int cs, int idx)
|
||||
void __iomem *reg_addr;
|
||||
|
||||
reg_addr = gpmc_base + GPMC_CS0_OFFSET + (cs * GPMC_CS_SIZE) + idx;
|
||||
return __raw_readl(reg_addr);
|
||||
return readl_relaxed(reg_addr);
|
||||
}
|
||||
|
||||
/* TODO: Add support for gpmc_fck to clock framework and use it */
|
||||
|
@ -94,7 +94,7 @@ EXPORT_SYMBOL(omap_type);
|
||||
#define OMAP_TAP_DIE_ID_44XX_2 0x020c
|
||||
#define OMAP_TAP_DIE_ID_44XX_3 0x0210
|
||||
|
||||
#define read_tap_reg(reg) __raw_readl(tap_base + (reg))
|
||||
#define read_tap_reg(reg) readl_relaxed(tap_base + (reg))
|
||||
|
||||
struct omap_id {
|
||||
u16 hawkeye; /* Silicon type (Hawkeye id) */
|
||||
|
@ -83,12 +83,12 @@ struct omap3_intc_regs {
|
||||
|
||||
static void intc_bank_write_reg(u32 val, struct omap_irq_bank *bank, u16 reg)
|
||||
{
|
||||
__raw_writel(val, bank->base_reg + reg);
|
||||
writel_relaxed(val, bank->base_reg + reg);
|
||||
}
|
||||
|
||||
static u32 intc_bank_read_reg(struct omap_irq_bank *bank, u16 reg)
|
||||
{
|
||||
return __raw_readl(bank->base_reg + reg);
|
||||
return readl_relaxed(bank->base_reg + reg);
|
||||
}
|
||||
|
||||
/* XXX: FIQ and additional INTC support (only MPU at the moment) */
|
||||
|
@ -70,18 +70,18 @@ struct omap_mux_partition *omap_mux_get(const char *name)
|
||||
u16 omap_mux_read(struct omap_mux_partition *partition, u16 reg)
|
||||
{
|
||||
if (partition->flags & OMAP_MUX_REG_8BIT)
|
||||
return __raw_readb(partition->base + reg);
|
||||
return readb_relaxed(partition->base + reg);
|
||||
else
|
||||
return __raw_readw(partition->base + reg);
|
||||
return readw_relaxed(partition->base + reg);
|
||||
}
|
||||
|
||||
void omap_mux_write(struct omap_mux_partition *partition, u16 val,
|
||||
u16 reg)
|
||||
{
|
||||
if (partition->flags & OMAP_MUX_REG_8BIT)
|
||||
__raw_writeb(val, partition->base + reg);
|
||||
writeb_relaxed(val, partition->base + reg);
|
||||
else
|
||||
__raw_writew(val, partition->base + reg);
|
||||
writew_relaxed(val, partition->base + reg);
|
||||
}
|
||||
|
||||
void omap_mux_write_array(struct omap_mux_partition *partition,
|
||||
|
@ -39,7 +39,7 @@ void __ref omap4_cpu_die(unsigned int cpu)
|
||||
if (omap_modify_auxcoreboot0(0x0, 0x200) != 0x0)
|
||||
pr_err("Secure clear status failed\n");
|
||||
} else {
|
||||
__raw_writel(0, base + OMAP_AUX_CORE_BOOT_0);
|
||||
writel_relaxed(0, base + OMAP_AUX_CORE_BOOT_0);
|
||||
}
|
||||
|
||||
|
||||
@ -53,7 +53,7 @@ void __ref omap4_cpu_die(unsigned int cpu)
|
||||
boot_cpu = omap_read_auxcoreboot0();
|
||||
else
|
||||
boot_cpu =
|
||||
__raw_readl(base + OMAP_AUX_CORE_BOOT_0) >> 5;
|
||||
readl_relaxed(base + OMAP_AUX_CORE_BOOT_0) >> 5;
|
||||
|
||||
if (boot_cpu == smp_processor_id()) {
|
||||
/*
|
||||
|
@ -116,7 +116,7 @@ static inline void set_cpu_wakeup_addr(unsigned int cpu_id, u32 addr)
|
||||
{
|
||||
struct omap4_cpu_pm_info *pm_info = &per_cpu(omap4_pm_info, cpu_id);
|
||||
|
||||
__raw_writel(addr, pm_info->wkup_sar_addr);
|
||||
writel_relaxed(addr, pm_info->wkup_sar_addr);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -141,7 +141,7 @@ static void scu_pwrst_prepare(unsigned int cpu_id, unsigned int cpu_state)
|
||||
break;
|
||||
}
|
||||
|
||||
__raw_writel(scu_pwr_st, pm_info->scu_sar_addr);
|
||||
writel_relaxed(scu_pwr_st, pm_info->scu_sar_addr);
|
||||
}
|
||||
|
||||
/* Helper functions for MPUSS OSWR */
|
||||
@ -179,7 +179,7 @@ static void l2x0_pwrst_prepare(unsigned int cpu_id, unsigned int save_state)
|
||||
{
|
||||
struct omap4_cpu_pm_info *pm_info = &per_cpu(omap4_pm_info, cpu_id);
|
||||
|
||||
__raw_writel(save_state, pm_info->l2x0_sar_addr);
|
||||
writel_relaxed(save_state, pm_info->l2x0_sar_addr);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -192,10 +192,10 @@ static void save_l2x0_context(void)
|
||||
u32 val;
|
||||
void __iomem *l2x0_base = omap4_get_l2cache_base();
|
||||
if (l2x0_base) {
|
||||
val = __raw_readl(l2x0_base + L2X0_AUX_CTRL);
|
||||
__raw_writel(val, sar_base + L2X0_AUXCTRL_OFFSET);
|
||||
val = __raw_readl(l2x0_base + L2X0_PREFETCH_CTRL);
|
||||
__raw_writel(val, sar_base + L2X0_PREFETCH_CTRL_OFFSET);
|
||||
val = readl_relaxed(l2x0_base + L2X0_AUX_CTRL);
|
||||
writel_relaxed(val, sar_base + L2X0_AUXCTRL_OFFSET);
|
||||
val = readl_relaxed(l2x0_base + L2X0_PREFETCH_CTRL);
|
||||
writel_relaxed(val, sar_base + L2X0_PREFETCH_CTRL_OFFSET);
|
||||
}
|
||||
}
|
||||
#else
|
||||
@ -386,9 +386,9 @@ int __init omap4_mpuss_init(void)
|
||||
|
||||
/* Save device type on scratchpad for low level code to use */
|
||||
if (omap_type() != OMAP2_DEVICE_TYPE_GP)
|
||||
__raw_writel(1, sar_base + OMAP_TYPE_OFFSET);
|
||||
writel_relaxed(1, sar_base + OMAP_TYPE_OFFSET);
|
||||
else
|
||||
__raw_writel(0, sar_base + OMAP_TYPE_OFFSET);
|
||||
writel_relaxed(0, sar_base + OMAP_TYPE_OFFSET);
|
||||
|
||||
save_l2x0_context();
|
||||
|
||||
|
@ -99,7 +99,7 @@ static int omap4_boot_secondary(unsigned int cpu, struct task_struct *idle)
|
||||
if (omap_secure_apis_support())
|
||||
omap_modify_auxcoreboot0(0x200, 0xfffffdff);
|
||||
else
|
||||
__raw_writel(0x20, base + OMAP_AUX_CORE_BOOT_0);
|
||||
writel_relaxed(0x20, base + OMAP_AUX_CORE_BOOT_0);
|
||||
|
||||
if (!cpu1_clkdm && !cpu1_pwrdm) {
|
||||
cpu1_clkdm = clkdm_lookup("mpu1_clkdm");
|
||||
@ -227,8 +227,8 @@ static void __init omap4_smp_prepare_cpus(unsigned int max_cpus)
|
||||
if (omap_secure_apis_support())
|
||||
omap_auxcoreboot_addr(virt_to_phys(startup_addr));
|
||||
else
|
||||
__raw_writel(virt_to_phys(omap5_secondary_startup),
|
||||
base + OMAP_AUX_CORE_BOOT_1);
|
||||
writel_relaxed(virt_to_phys(omap5_secondary_startup),
|
||||
base + OMAP_AUX_CORE_BOOT_1);
|
||||
|
||||
}
|
||||
|
||||
|
@ -60,19 +60,19 @@ static unsigned int omap_secure_apis;
|
||||
*/
|
||||
static inline u32 wakeupgen_readl(u8 idx, u32 cpu)
|
||||
{
|
||||
return __raw_readl(wakeupgen_base + OMAP_WKG_ENB_A_0 +
|
||||
return readl_relaxed(wakeupgen_base + OMAP_WKG_ENB_A_0 +
|
||||
(cpu * CPU_ENA_OFFSET) + (idx * 4));
|
||||
}
|
||||
|
||||
static inline void wakeupgen_writel(u32 val, u8 idx, u32 cpu)
|
||||
{
|
||||
__raw_writel(val, wakeupgen_base + OMAP_WKG_ENB_A_0 +
|
||||
writel_relaxed(val, wakeupgen_base + OMAP_WKG_ENB_A_0 +
|
||||
(cpu * CPU_ENA_OFFSET) + (idx * 4));
|
||||
}
|
||||
|
||||
static inline void sar_writel(u32 val, u32 offset, u8 idx)
|
||||
{
|
||||
__raw_writel(val, sar_base + offset + (idx * 4));
|
||||
writel_relaxed(val, sar_base + offset + (idx * 4));
|
||||
}
|
||||
|
||||
static inline int _wakeupgen_get_irq_info(u32 irq, u32 *bit_posn, u8 *reg_index)
|
||||
@ -231,21 +231,21 @@ static inline void omap4_irq_save_context(void)
|
||||
}
|
||||
|
||||
/* Save AuxBoot* registers */
|
||||
val = __raw_readl(wakeupgen_base + OMAP_AUX_CORE_BOOT_0);
|
||||
__raw_writel(val, sar_base + AUXCOREBOOT0_OFFSET);
|
||||
val = __raw_readl(wakeupgen_base + OMAP_AUX_CORE_BOOT_1);
|
||||
__raw_writel(val, sar_base + AUXCOREBOOT1_OFFSET);
|
||||
val = readl_relaxed(wakeupgen_base + OMAP_AUX_CORE_BOOT_0);
|
||||
writel_relaxed(val, sar_base + AUXCOREBOOT0_OFFSET);
|
||||
val = readl_relaxed(wakeupgen_base + OMAP_AUX_CORE_BOOT_1);
|
||||
writel_relaxed(val, sar_base + AUXCOREBOOT1_OFFSET);
|
||||
|
||||
/* Save SyncReq generation logic */
|
||||
val = __raw_readl(wakeupgen_base + OMAP_PTMSYNCREQ_MASK);
|
||||
__raw_writel(val, sar_base + PTMSYNCREQ_MASK_OFFSET);
|
||||
val = __raw_readl(wakeupgen_base + OMAP_PTMSYNCREQ_EN);
|
||||
__raw_writel(val, sar_base + PTMSYNCREQ_EN_OFFSET);
|
||||
val = readl_relaxed(wakeupgen_base + OMAP_PTMSYNCREQ_MASK);
|
||||
writel_relaxed(val, sar_base + PTMSYNCREQ_MASK_OFFSET);
|
||||
val = readl_relaxed(wakeupgen_base + OMAP_PTMSYNCREQ_EN);
|
||||
writel_relaxed(val, sar_base + PTMSYNCREQ_EN_OFFSET);
|
||||
|
||||
/* Set the Backup Bit Mask status */
|
||||
val = __raw_readl(sar_base + SAR_BACKUP_STATUS_OFFSET);
|
||||
val = readl_relaxed(sar_base + SAR_BACKUP_STATUS_OFFSET);
|
||||
val |= SAR_BACKUP_STATUS_WAKEUPGEN;
|
||||
__raw_writel(val, sar_base + SAR_BACKUP_STATUS_OFFSET);
|
||||
writel_relaxed(val, sar_base + SAR_BACKUP_STATUS_OFFSET);
|
||||
|
||||
}
|
||||
|
||||
@ -264,15 +264,15 @@ static inline void omap5_irq_save_context(void)
|
||||
}
|
||||
|
||||
/* Save AuxBoot* registers */
|
||||
val = __raw_readl(wakeupgen_base + OMAP_AUX_CORE_BOOT_0);
|
||||
__raw_writel(val, sar_base + OMAP5_AUXCOREBOOT0_OFFSET);
|
||||
val = __raw_readl(wakeupgen_base + OMAP_AUX_CORE_BOOT_0);
|
||||
__raw_writel(val, sar_base + OMAP5_AUXCOREBOOT1_OFFSET);
|
||||
val = readl_relaxed(wakeupgen_base + OMAP_AUX_CORE_BOOT_0);
|
||||
writel_relaxed(val, sar_base + OMAP5_AUXCOREBOOT0_OFFSET);
|
||||
val = readl_relaxed(wakeupgen_base + OMAP_AUX_CORE_BOOT_0);
|
||||
writel_relaxed(val, sar_base + OMAP5_AUXCOREBOOT1_OFFSET);
|
||||
|
||||
/* Set the Backup Bit Mask status */
|
||||
val = __raw_readl(sar_base + OMAP5_SAR_BACKUP_STATUS_OFFSET);
|
||||
val = readl_relaxed(sar_base + OMAP5_SAR_BACKUP_STATUS_OFFSET);
|
||||
val |= SAR_BACKUP_STATUS_WAKEUPGEN;
|
||||
__raw_writel(val, sar_base + OMAP5_SAR_BACKUP_STATUS_OFFSET);
|
||||
writel_relaxed(val, sar_base + OMAP5_SAR_BACKUP_STATUS_OFFSET);
|
||||
|
||||
}
|
||||
|
||||
@ -306,9 +306,9 @@ static void irq_sar_clear(void)
|
||||
if (soc_is_omap54xx())
|
||||
offset = OMAP5_SAR_BACKUP_STATUS_OFFSET;
|
||||
|
||||
val = __raw_readl(sar_base + offset);
|
||||
val = readl_relaxed(sar_base + offset);
|
||||
val &= ~SAR_BACKUP_STATUS_WAKEUPGEN;
|
||||
__raw_writel(val, sar_base + offset);
|
||||
writel_relaxed(val, sar_base + offset);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -125,25 +125,25 @@ void __init gic_init_irq(void)
|
||||
void gic_dist_disable(void)
|
||||
{
|
||||
if (gic_dist_base_addr)
|
||||
__raw_writel(0x0, gic_dist_base_addr + GIC_DIST_CTRL);
|
||||
writel_relaxed(0x0, gic_dist_base_addr + GIC_DIST_CTRL);
|
||||
}
|
||||
|
||||
void gic_dist_enable(void)
|
||||
{
|
||||
if (gic_dist_base_addr)
|
||||
__raw_writel(0x1, gic_dist_base_addr + GIC_DIST_CTRL);
|
||||
writel_relaxed(0x1, gic_dist_base_addr + GIC_DIST_CTRL);
|
||||
}
|
||||
|
||||
bool gic_dist_disabled(void)
|
||||
{
|
||||
return !(__raw_readl(gic_dist_base_addr + GIC_DIST_CTRL) & 0x1);
|
||||
return !(readl_relaxed(gic_dist_base_addr + GIC_DIST_CTRL) & 0x1);
|
||||
}
|
||||
|
||||
void gic_timer_retrigger(void)
|
||||
{
|
||||
u32 twd_int = __raw_readl(twd_base + TWD_TIMER_INTSTAT);
|
||||
u32 gic_int = __raw_readl(gic_dist_base_addr + GIC_DIST_PENDING_SET);
|
||||
u32 twd_ctrl = __raw_readl(twd_base + TWD_TIMER_CONTROL);
|
||||
u32 twd_int = readl_relaxed(twd_base + TWD_TIMER_INTSTAT);
|
||||
u32 gic_int = readl_relaxed(gic_dist_base_addr + GIC_DIST_PENDING_SET);
|
||||
u32 twd_ctrl = readl_relaxed(twd_base + TWD_TIMER_CONTROL);
|
||||
|
||||
if (twd_int && !(gic_int & BIT(IRQ_LOCALTIMER))) {
|
||||
/*
|
||||
@ -151,11 +151,11 @@ void gic_timer_retrigger(void)
|
||||
* disabled. Ack the pending interrupt, and retrigger it.
|
||||
*/
|
||||
pr_warn("%s: lost localtimer interrupt\n", __func__);
|
||||
__raw_writel(1, twd_base + TWD_TIMER_INTSTAT);
|
||||
writel_relaxed(1, twd_base + TWD_TIMER_INTSTAT);
|
||||
if (!(twd_ctrl & TWD_TIMER_CONTROL_PERIODIC)) {
|
||||
__raw_writel(1, twd_base + TWD_TIMER_COUNTER);
|
||||
writel_relaxed(1, twd_base + TWD_TIMER_COUNTER);
|
||||
twd_ctrl |= TWD_TIMER_CONTROL_ENABLE;
|
||||
__raw_writel(twd_ctrl, twd_base + TWD_TIMER_CONTROL);
|
||||
writel_relaxed(twd_ctrl, twd_base + TWD_TIMER_CONTROL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -72,7 +72,7 @@
|
||||
* | (../mach-omap2/omap_hwmod*) |
|
||||
* +-------------------------------+
|
||||
* | OMAP clock/PRCM/register fns |
|
||||
* | (__raw_{read,write}l, clk*) |
|
||||
* | ({read,write}l_relaxed, clk*) |
|
||||
* +-------------------------------+
|
||||
*
|
||||
* Device drivers should not contain any OMAP-specific code or data in
|
||||
@ -3230,17 +3230,17 @@ static int _am33xx_is_hardreset_asserted(struct omap_hwmod *oh,
|
||||
u32 omap_hwmod_read(struct omap_hwmod *oh, u16 reg_offs)
|
||||
{
|
||||
if (oh->flags & HWMOD_16BIT_REG)
|
||||
return __raw_readw(oh->_mpu_rt_va + reg_offs);
|
||||
return readw_relaxed(oh->_mpu_rt_va + reg_offs);
|
||||
else
|
||||
return __raw_readl(oh->_mpu_rt_va + reg_offs);
|
||||
return readl_relaxed(oh->_mpu_rt_va + reg_offs);
|
||||
}
|
||||
|
||||
void omap_hwmod_write(u32 v, struct omap_hwmod *oh, u16 reg_offs)
|
||||
{
|
||||
if (oh->flags & HWMOD_16BIT_REG)
|
||||
__raw_writew(v, oh->_mpu_rt_va + reg_offs);
|
||||
writew_relaxed(v, oh->_mpu_rt_va + reg_offs);
|
||||
else
|
||||
__raw_writel(v, oh->_mpu_rt_va + reg_offs);
|
||||
writel_relaxed(v, oh->_mpu_rt_va + reg_offs);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include "prm33xx.h"
|
||||
#include "omap_hwmod_33xx_43xx_common_data.h"
|
||||
#include "prcm43xx.h"
|
||||
#include "common.h"
|
||||
|
||||
#define CLKCTRL(oh, clkctrl) ((oh).prcm.omap4.clkctrl_offs = (clkctrl))
|
||||
#define RSTCTRL(oh, rstctrl) ((oh).prcm.omap4.rstctrl_offs = (rstctrl))
|
||||
|
@ -57,7 +57,7 @@ static int __init omap4430_phy_power_down(void)
|
||||
}
|
||||
|
||||
/* Power down the phy */
|
||||
__raw_writel(PHY_PD, ctrl_base + CONTROL_DEV_CONF);
|
||||
writel_relaxed(PHY_PD, ctrl_base + CONTROL_DEV_CONF);
|
||||
|
||||
iounmap(ctrl_base);
|
||||
|
||||
@ -162,7 +162,7 @@ void ti81xx_musb_phy_power(u8 on)
|
||||
return;
|
||||
}
|
||||
|
||||
usbphycfg = __raw_readl(scm_base + USBCTRL0);
|
||||
usbphycfg = readl_relaxed(scm_base + USBCTRL0);
|
||||
|
||||
if (on) {
|
||||
if (cpu_is_ti816x()) {
|
||||
@ -181,7 +181,7 @@ void ti81xx_musb_phy_power(u8 on)
|
||||
usbphycfg |= USBPHY_CM_PWRDN | USBPHY_OTG_PWRDN;
|
||||
|
||||
}
|
||||
__raw_writel(usbphycfg, scm_base + USBCTRL0);
|
||||
writel_relaxed(usbphycfg, scm_base + USBCTRL0);
|
||||
|
||||
iounmap(scm_base);
|
||||
}
|
||||
|
@ -17,7 +17,6 @@
|
||||
#include "pm.h"
|
||||
#include "cm.h"
|
||||
#include "cm-regbits-34xx.h"
|
||||
#include "cm-regbits-44xx.h"
|
||||
#include "prm-regbits-34xx.h"
|
||||
#include "prm-regbits-44xx.h"
|
||||
|
||||
|
@ -32,6 +32,7 @@
|
||||
|
||||
#include "powerdomain.h"
|
||||
#include "clockdomain.h"
|
||||
#include "voltage.h"
|
||||
|
||||
#include "soc.h"
|
||||
#include "pm.h"
|
||||
|
@ -21,8 +21,6 @@
|
||||
#include <linux/list.h>
|
||||
#include <linux/spinlock.h>
|
||||
|
||||
#include "voltage.h"
|
||||
|
||||
/* Powerdomain basic power states */
|
||||
#define PWRDM_POWER_OFF 0x0
|
||||
#define PWRDM_POWER_RET 0x1
|
||||
@ -75,6 +73,7 @@
|
||||
|
||||
struct clockdomain;
|
||||
struct powerdomain;
|
||||
struct voltagedomain;
|
||||
|
||||
/**
|
||||
* struct powerdomain - OMAP powerdomain
|
||||
|
@ -428,6 +428,28 @@
|
||||
#define MAX_IOPAD_LATCH_TIME 100
|
||||
# ifndef __ASSEMBLER__
|
||||
|
||||
#include <linux/delay.h>
|
||||
|
||||
/**
|
||||
* omap_test_timeout - busy-loop, testing a condition
|
||||
* @cond: condition to test until it evaluates to true
|
||||
* @timeout: maximum number of microseconds in the timeout
|
||||
* @index: loop index (integer)
|
||||
*
|
||||
* Loop waiting for @cond to become true or until at least @timeout
|
||||
* microseconds have passed. To use, define some integer @index in the
|
||||
* calling code. After running, if @index == @timeout, then the loop has
|
||||
* timed out.
|
||||
*/
|
||||
#define omap_test_timeout(cond, timeout, index) \
|
||||
({ \
|
||||
for (index = 0; index < timeout; index++) { \
|
||||
if (cond) \
|
||||
break; \
|
||||
udelay(1); \
|
||||
} \
|
||||
})
|
||||
|
||||
/**
|
||||
* struct omap_prcm_irq - describes a PRCM interrupt bit
|
||||
* @name: a short name describing the interrupt type, e.g. "wkup" or "io"
|
||||
@ -458,6 +480,7 @@ struct omap_prcm_irq {
|
||||
* @ocp_barrier: fn ptr to force buffered PRM writes to complete
|
||||
* @save_and_clear_irqen: fn ptr to save and clear IRQENABLE regs
|
||||
* @restore_irqen: fn ptr to save and clear IRQENABLE regs
|
||||
* @reconfigure_io_chain: fn ptr to reconfigure IO chain
|
||||
* @saved_mask: IRQENABLE regs are saved here during suspend
|
||||
* @priority_mask: 1 bit per IRQ, set to 1 if omap_prcm_irq.priority = true
|
||||
* @base_irq: base dynamic IRQ number, returned from irq_alloc_descs() in init
|
||||
@ -479,6 +502,7 @@ struct omap_prcm_irq_setup {
|
||||
void (*ocp_barrier)(void);
|
||||
void (*save_and_clear_irqen)(u32 *saved_mask);
|
||||
void (*restore_irqen)(u32 *saved_mask);
|
||||
void (*reconfigure_io_chain)(void);
|
||||
u32 *saved_mask;
|
||||
u32 *priority_mask;
|
||||
int base_irq;
|
||||
|
@ -30,12 +30,12 @@ void __iomem *prcm_mpu_base;
|
||||
|
||||
u32 omap4_prcm_mpu_read_inst_reg(s16 inst, u16 reg)
|
||||
{
|
||||
return __raw_readl(OMAP44XX_PRCM_MPU_REGADDR(inst, reg));
|
||||
return readl_relaxed(OMAP44XX_PRCM_MPU_REGADDR(inst, reg));
|
||||
}
|
||||
|
||||
void omap4_prcm_mpu_write_inst_reg(u32 val, s16 inst, u16 reg)
|
||||
{
|
||||
__raw_writel(val, OMAP44XX_PRCM_MPU_REGADDR(inst, reg));
|
||||
writel_relaxed(val, OMAP44XX_PRCM_MPU_REGADDR(inst, reg));
|
||||
}
|
||||
|
||||
u32 omap4_prcm_mpu_rmw_inst_reg_bits(u32 mask, u32 bits, s16 inst, s16 reg)
|
||||
|
@ -26,7 +26,6 @@
|
||||
#define __ARCH_ARM_MACH_OMAP2_PRCM_MPU44XX_H
|
||||
|
||||
#include "prcm_mpu_44xx_54xx.h"
|
||||
#include "common.h"
|
||||
|
||||
#define OMAP4430_PRCM_MPU_BASE 0x48243000
|
||||
|
||||
|
@ -17,10 +17,18 @@
|
||||
|
||||
# ifndef __ASSEMBLER__
|
||||
extern void __iomem *prm_base;
|
||||
extern u16 prm_features;
|
||||
extern void omap2_set_globals_prm(void __iomem *prm);
|
||||
int of_prcm_init(void);
|
||||
# endif
|
||||
|
||||
/*
|
||||
* prm_features flag values
|
||||
*
|
||||
* PRM_HAS_IO_WAKEUP: has IO wakeup capability
|
||||
* PRM_HAS_VOLTAGE: has voltage domains
|
||||
*/
|
||||
#define PRM_HAS_IO_WAKEUP (1 << 0)
|
||||
|
||||
/*
|
||||
* MAX_MODULE_SOFTRESET_WAIT: Maximum microseconds to wait for OMAP
|
||||
@ -118,6 +126,7 @@ struct prm_reset_src_map {
|
||||
* @read_reset_sources: ptr to the SoC PRM-specific get_reset_source impl
|
||||
* @was_any_context_lost_old: ptr to the SoC PRM context loss test fn
|
||||
* @clear_context_loss_flags_old: ptr to the SoC PRM context loss flag clear fn
|
||||
* @late_init: ptr to the late init function
|
||||
*
|
||||
* XXX @was_any_context_lost_old and @clear_context_loss_flags_old are
|
||||
* deprecated.
|
||||
@ -126,6 +135,7 @@ struct prm_ll_data {
|
||||
u32 (*read_reset_sources)(void);
|
||||
bool (*was_any_context_lost_old)(u8 part, s16 inst, u16 idx);
|
||||
void (*clear_context_loss_flags_old)(u8 part, s16 inst, u16 idx);
|
||||
int (*late_init)(void);
|
||||
};
|
||||
|
||||
extern int prm_register(struct prm_ll_data *pld);
|
||||
|
@ -18,9 +18,6 @@
|
||||
#include <linux/io.h>
|
||||
#include <linux/irq.h>
|
||||
|
||||
#include "soc.h"
|
||||
#include "common.h"
|
||||
#include "vp.h"
|
||||
#include "powerdomain.h"
|
||||
#include "clockdomain.h"
|
||||
#include "prm2xxx.h"
|
||||
@ -201,19 +198,11 @@ static struct prm_ll_data omap2xxx_prm_ll_data = {
|
||||
|
||||
int __init omap2xxx_prm_init(void)
|
||||
{
|
||||
if (!cpu_is_omap24xx())
|
||||
return 0;
|
||||
|
||||
return prm_register(&omap2xxx_prm_ll_data);
|
||||
}
|
||||
|
||||
static void __exit omap2xxx_prm_exit(void)
|
||||
{
|
||||
if (!cpu_is_omap24xx())
|
||||
return;
|
||||
|
||||
/* Should never happen */
|
||||
WARN(prm_unregister(&omap2xxx_prm_ll_data),
|
||||
"%s: prm_ll_data function pointer mismatch\n", __func__);
|
||||
prm_unregister(&omap2xxx_prm_ll_data);
|
||||
}
|
||||
__exitcall(omap2xxx_prm_exit);
|
||||
|
@ -27,7 +27,7 @@
|
||||
|
||||
/*
|
||||
* OMAP2-specific global PRM registers
|
||||
* Use __raw_{read,write}l() with these registers.
|
||||
* Use {read,write}l_relaxed() with these registers.
|
||||
*
|
||||
* With a few exceptions, these are the register names beginning with
|
||||
* PRCM_* on 24xx. (The exceptions are the IRQSTATUS and IRQENABLE
|
||||
|
@ -16,7 +16,6 @@
|
||||
#include <linux/err.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "powerdomain.h"
|
||||
#include "prm2xxx_3xxx.h"
|
||||
#include "prm-regbits-24xx.h"
|
||||
|
@ -55,12 +55,12 @@
|
||||
/* Power/reset management domain register get/set */
|
||||
static inline u32 omap2_prm_read_mod_reg(s16 module, u16 idx)
|
||||
{
|
||||
return __raw_readl(prm_base + module + idx);
|
||||
return readl_relaxed(prm_base + module + idx);
|
||||
}
|
||||
|
||||
static inline void omap2_prm_write_mod_reg(u32 val, s16 module, u16 idx)
|
||||
{
|
||||
__raw_writel(val, prm_base + module + idx);
|
||||
writel_relaxed(val, prm_base + module + idx);
|
||||
}
|
||||
|
||||
/* Read-modify-write a register in a PRM module. Caller must lock */
|
||||
|
@ -19,7 +19,6 @@
|
||||
#include <linux/err.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "powerdomain.h"
|
||||
#include "prm33xx.h"
|
||||
#include "prm-regbits-33xx.h"
|
||||
@ -27,13 +26,13 @@
|
||||
/* Read a register in a PRM instance */
|
||||
u32 am33xx_prm_read_reg(s16 inst, u16 idx)
|
||||
{
|
||||
return __raw_readl(prm_base + inst + idx);
|
||||
return readl_relaxed(prm_base + inst + idx);
|
||||
}
|
||||
|
||||
/* Write into a register in a PRM instance */
|
||||
void am33xx_prm_write_reg(u32 val, s16 inst, u16 idx)
|
||||
{
|
||||
__raw_writel(val, prm_base + inst + idx);
|
||||
writel_relaxed(val, prm_base + inst + idx);
|
||||
}
|
||||
|
||||
/* Read-modify-write a register in PRM. Caller must lock */
|
||||
|
@ -43,6 +43,7 @@ static struct omap_prcm_irq_setup omap3_prcm_irq_setup = {
|
||||
.ocp_barrier = &omap3xxx_prm_ocp_barrier,
|
||||
.save_and_clear_irqen = &omap3xxx_prm_save_and_clear_irqen,
|
||||
.restore_irqen = &omap3xxx_prm_restore_irqen,
|
||||
.reconfigure_io_chain = &omap3xxx_prm_reconfigure_io_chain,
|
||||
};
|
||||
|
||||
/*
|
||||
@ -246,7 +247,7 @@ void omap3xxx_prm_reconfigure_io_chain(void)
|
||||
*/
|
||||
static void __init omap3xxx_prm_enable_io_wakeup(void)
|
||||
{
|
||||
if (omap3_has_io_wakeup())
|
||||
if (prm_features & PRM_HAS_IO_WAKEUP)
|
||||
omap2_prm_set_mod_reg_bits(OMAP3430_EN_IO_MASK, WKUP_MOD,
|
||||
PM_WKEN);
|
||||
}
|
||||
@ -400,23 +401,26 @@ struct pwrdm_ops omap3_pwrdm_operations = {
|
||||
*
|
||||
*/
|
||||
|
||||
static int omap3xxx_prm_late_init(void);
|
||||
|
||||
static struct prm_ll_data omap3xxx_prm_ll_data = {
|
||||
.read_reset_sources = &omap3xxx_prm_read_reset_sources,
|
||||
.late_init = &omap3xxx_prm_late_init,
|
||||
};
|
||||
|
||||
int __init omap3xxx_prm_init(void)
|
||||
{
|
||||
if (!cpu_is_omap34xx())
|
||||
return 0;
|
||||
if (omap3_has_io_wakeup())
|
||||
prm_features |= PRM_HAS_IO_WAKEUP;
|
||||
|
||||
return prm_register(&omap3xxx_prm_ll_data);
|
||||
}
|
||||
|
||||
static int __init omap3xxx_prm_late_init(void)
|
||||
static int omap3xxx_prm_late_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (!cpu_is_omap34xx())
|
||||
if (!(prm_features & PRM_HAS_IO_WAKEUP))
|
||||
return 0;
|
||||
|
||||
omap3xxx_prm_enable_io_wakeup();
|
||||
@ -427,15 +431,9 @@ static int __init omap3xxx_prm_late_init(void)
|
||||
|
||||
return ret;
|
||||
}
|
||||
omap_subsys_initcall(omap3xxx_prm_late_init);
|
||||
|
||||
static void __exit omap3xxx_prm_exit(void)
|
||||
{
|
||||
if (!cpu_is_omap34xx())
|
||||
return;
|
||||
|
||||
/* Should never happen */
|
||||
WARN(prm_unregister(&omap3xxx_prm_ll_data),
|
||||
"%s: prm_ll_data function pointer mismatch\n", __func__);
|
||||
prm_unregister(&omap3xxx_prm_ll_data);
|
||||
}
|
||||
__exitcall(omap3xxx_prm_exit);
|
||||
|
@ -26,7 +26,7 @@
|
||||
|
||||
/*
|
||||
* OMAP3-specific global PRM registers
|
||||
* Use __raw_{read,write}l() with these registers.
|
||||
* Use {read,write}l_relaxed() with these registers.
|
||||
*
|
||||
* With a few exceptions, these are the register names beginning with
|
||||
* PRM_* on 34xx. (The exceptions are the IRQSTATUS and IRQENABLE
|
||||
|
@ -47,6 +47,7 @@ static struct omap_prcm_irq_setup omap4_prcm_irq_setup = {
|
||||
.ocp_barrier = &omap44xx_prm_ocp_barrier,
|
||||
.save_and_clear_irqen = &omap44xx_prm_save_and_clear_irqen,
|
||||
.restore_irqen = &omap44xx_prm_restore_irqen,
|
||||
.reconfigure_io_chain = &omap44xx_prm_reconfigure_io_chain,
|
||||
};
|
||||
|
||||
/*
|
||||
@ -81,13 +82,13 @@ static struct prm_reset_src_map omap44xx_prm_reset_src_map[] = {
|
||||
/* Read a register in a CM/PRM instance in the PRM module */
|
||||
u32 omap4_prm_read_inst_reg(s16 inst, u16 reg)
|
||||
{
|
||||
return __raw_readl(prm_base + inst + reg);
|
||||
return readl_relaxed(prm_base + inst + reg);
|
||||
}
|
||||
|
||||
/* Write into a register in a CM/PRM instance in the PRM module */
|
||||
void omap4_prm_write_inst_reg(u32 val, s16 inst, u16 reg)
|
||||
{
|
||||
__raw_writel(val, prm_base + inst + reg);
|
||||
writel_relaxed(val, prm_base + inst + reg);
|
||||
}
|
||||
|
||||
/* Read-modify-write a register in a PRM module. Caller must lock */
|
||||
@ -649,6 +650,8 @@ struct pwrdm_ops omap4_pwrdm_operations = {
|
||||
.pwrdm_has_voltdm = omap4_check_vcvp,
|
||||
};
|
||||
|
||||
static int omap44xx_prm_late_init(void);
|
||||
|
||||
/*
|
||||
* XXX document
|
||||
*/
|
||||
@ -656,34 +659,29 @@ static struct prm_ll_data omap44xx_prm_ll_data = {
|
||||
.read_reset_sources = &omap44xx_prm_read_reset_sources,
|
||||
.was_any_context_lost_old = &omap44xx_prm_was_any_context_lost_old,
|
||||
.clear_context_loss_flags_old = &omap44xx_prm_clear_context_loss_flags_old,
|
||||
.late_init = &omap44xx_prm_late_init,
|
||||
};
|
||||
|
||||
int __init omap44xx_prm_init(void)
|
||||
{
|
||||
if (!cpu_is_omap44xx() && !soc_is_omap54xx() && !soc_is_dra7xx())
|
||||
return 0;
|
||||
if (cpu_is_omap44xx())
|
||||
prm_features |= PRM_HAS_IO_WAKEUP;
|
||||
|
||||
return prm_register(&omap44xx_prm_ll_data);
|
||||
}
|
||||
|
||||
static int __init omap44xx_prm_late_init(void)
|
||||
static int omap44xx_prm_late_init(void)
|
||||
{
|
||||
if (!cpu_is_omap44xx())
|
||||
if (!(prm_features & PRM_HAS_IO_WAKEUP))
|
||||
return 0;
|
||||
|
||||
omap44xx_prm_enable_io_wakeup();
|
||||
|
||||
return omap_prcm_register_chain_handler(&omap4_prcm_irq_setup);
|
||||
}
|
||||
omap_subsys_initcall(omap44xx_prm_late_init);
|
||||
|
||||
static void __exit omap44xx_prm_exit(void)
|
||||
{
|
||||
if (!cpu_is_omap44xx())
|
||||
return;
|
||||
|
||||
/* Should never happen */
|
||||
WARN(prm_unregister(&omap44xx_prm_ll_data),
|
||||
"%s: prm_ll_data function pointer mismatch\n", __func__);
|
||||
prm_unregister(&omap44xx_prm_ll_data);
|
||||
}
|
||||
__exitcall(omap44xx_prm_exit);
|
||||
|
@ -62,6 +62,8 @@ static struct omap_prcm_irq_setup *prcm_irq_setup;
|
||||
/* prm_base: base virtual address of the PRM IP block */
|
||||
void __iomem *prm_base;
|
||||
|
||||
u16 prm_features;
|
||||
|
||||
/*
|
||||
* prm_ll_data: function pointers to SoC-specific implementations of
|
||||
* common PRM functions
|
||||
@ -330,12 +332,7 @@ int omap_prcm_register_chain_handler(struct omap_prcm_irq_setup *irq_setup)
|
||||
|
||||
if (of_have_populated_dt()) {
|
||||
int irq = omap_prcm_event_to_irq("io");
|
||||
if (cpu_is_omap34xx())
|
||||
omap_pcs_legacy_init(irq,
|
||||
omap3xxx_prm_reconfigure_io_chain);
|
||||
else
|
||||
omap_pcs_legacy_init(irq,
|
||||
omap44xx_prm_reconfigure_io_chain);
|
||||
omap_pcs_legacy_init(irq, irq_setup->reconfigure_io_chain);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -530,3 +527,11 @@ int __init of_prcm_init(void)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __init prm_late_init(void)
|
||||
{
|
||||
if (prm_ll_data->late_init)
|
||||
return prm_ll_data->late_init();
|
||||
return 0;
|
||||
}
|
||||
subsys_initcall(prm_late_init);
|
||||
|
@ -49,7 +49,7 @@ u32 omap4_prminst_read_inst_reg(u8 part, s16 inst, u16 idx)
|
||||
BUG_ON(part >= OMAP4_MAX_PRCM_PARTITIONS ||
|
||||
part == OMAP4430_INVALID_PRCM_PARTITION ||
|
||||
!_prm_bases[part]);
|
||||
return __raw_readl(_prm_bases[part] + inst + idx);
|
||||
return readl_relaxed(_prm_bases[part] + inst + idx);
|
||||
}
|
||||
|
||||
/* Write into a register in a PRM instance */
|
||||
@ -58,7 +58,7 @@ void omap4_prminst_write_inst_reg(u32 val, u8 part, s16 inst, u16 idx)
|
||||
BUG_ON(part >= OMAP4_MAX_PRCM_PARTITIONS ||
|
||||
part == OMAP4430_INVALID_PRCM_PARTITION ||
|
||||
!_prm_bases[part]);
|
||||
__raw_writel(val, _prm_bases[part] + inst + idx);
|
||||
writel_relaxed(val, _prm_bases[part] + inst + idx);
|
||||
}
|
||||
|
||||
/* Read-modify-write a register in PRM. Caller must lock */
|
||||
|
@ -31,24 +31,24 @@ extern void __iomem *omap2_sms_base;
|
||||
|
||||
static inline void sdrc_write_reg(u32 val, u16 reg)
|
||||
{
|
||||
__raw_writel(val, OMAP_SDRC_REGADDR(reg));
|
||||
writel_relaxed(val, OMAP_SDRC_REGADDR(reg));
|
||||
}
|
||||
|
||||
static inline u32 sdrc_read_reg(u16 reg)
|
||||
{
|
||||
return __raw_readl(OMAP_SDRC_REGADDR(reg));
|
||||
return readl_relaxed(OMAP_SDRC_REGADDR(reg));
|
||||
}
|
||||
|
||||
/* SMS global register get/set */
|
||||
|
||||
static inline void sms_write_reg(u32 val, u16 reg)
|
||||
{
|
||||
__raw_writel(val, OMAP_SMS_REGADDR(reg));
|
||||
writel_relaxed(val, OMAP_SMS_REGADDR(reg));
|
||||
}
|
||||
|
||||
static inline u32 sms_read_reg(u16 reg)
|
||||
{
|
||||
return __raw_readl(OMAP_SMS_REGADDR(reg));
|
||||
return readl_relaxed(OMAP_SMS_REGADDR(reg));
|
||||
}
|
||||
|
||||
extern void omap2_set_globals_sdrc(void __iomem *sdrc, void __iomem *sms);
|
||||
|
@ -103,9 +103,9 @@ u32 omap2xxx_sdrc_reprogram(u32 level, u32 force)
|
||||
* prm2xxx.c function
|
||||
*/
|
||||
if (cpu_is_omap2420())
|
||||
__raw_writel(0xffff, OMAP2420_PRCM_VOLTSETUP);
|
||||
writel_relaxed(0xffff, OMAP2420_PRCM_VOLTSETUP);
|
||||
else
|
||||
__raw_writel(0xffff, OMAP2430_PRCM_VOLTSETUP);
|
||||
writel_relaxed(0xffff, OMAP2430_PRCM_VOLTSETUP);
|
||||
omap2_sram_reprogram_sdrc(level, dll_ctrl, m_type);
|
||||
curr_perf_level = level;
|
||||
local_irq_restore(flags);
|
||||
|
@ -57,7 +57,7 @@ static void __init sr_set_nvalues(struct omap_volt_data *volt_data,
|
||||
|
||||
/*
|
||||
* In OMAP4 the efuse registers are 24 bit aligned.
|
||||
* A __raw_readl will fail for non-32 bit aligned address
|
||||
* A readl_relaxed will fail for non-32 bit aligned address
|
||||
* and hence the 8-bit read and shift.
|
||||
*/
|
||||
if (cpu_is_omap44xx()) {
|
||||
|
@ -70,16 +70,16 @@ static int is_sram_locked(void)
|
||||
if (OMAP2_DEVICE_TYPE_GP == omap_type()) {
|
||||
/* RAMFW: R/W access to all initiators for all qualifier sets */
|
||||
if (cpu_is_omap242x()) {
|
||||
__raw_writel(0xFF, OMAP24XX_VA_REQINFOPERM0); /* all q-vects */
|
||||
__raw_writel(0xCFDE, OMAP24XX_VA_READPERM0); /* all i-read */
|
||||
__raw_writel(0xCFDE, OMAP24XX_VA_WRITEPERM0); /* all i-write */
|
||||
writel_relaxed(0xFF, OMAP24XX_VA_REQINFOPERM0); /* all q-vects */
|
||||
writel_relaxed(0xCFDE, OMAP24XX_VA_READPERM0); /* all i-read */
|
||||
writel_relaxed(0xCFDE, OMAP24XX_VA_WRITEPERM0); /* all i-write */
|
||||
}
|
||||
if (cpu_is_omap34xx()) {
|
||||
__raw_writel(0xFFFF, OMAP34XX_VA_REQINFOPERM0); /* all q-vects */
|
||||
__raw_writel(0xFFFF, OMAP34XX_VA_READPERM0); /* all i-read */
|
||||
__raw_writel(0xFFFF, OMAP34XX_VA_WRITEPERM0); /* all i-write */
|
||||
__raw_writel(0x0, OMAP34XX_VA_ADDR_MATCH2);
|
||||
__raw_writel(0xFFFFFFFF, OMAP34XX_VA_SMS_RG_ATT0);
|
||||
writel_relaxed(0xFFFF, OMAP34XX_VA_REQINFOPERM0); /* all q-vects */
|
||||
writel_relaxed(0xFFFF, OMAP34XX_VA_READPERM0); /* all i-read */
|
||||
writel_relaxed(0xFFFF, OMAP34XX_VA_WRITEPERM0); /* all i-write */
|
||||
writel_relaxed(0x0, OMAP34XX_VA_ADDR_MATCH2);
|
||||
writel_relaxed(0xFFFFFFFF, OMAP34XX_VA_SMS_RG_ATT0);
|
||||
}
|
||||
return 0;
|
||||
} else
|
||||
|
@ -546,15 +546,15 @@ static void __init realtime_counter_init(void)
|
||||
}
|
||||
|
||||
/* Program numerator and denumerator registers */
|
||||
reg = __raw_readl(base + INCREMENTER_NUMERATOR_OFFSET) &
|
||||
reg = readl_relaxed(base + INCREMENTER_NUMERATOR_OFFSET) &
|
||||
NUMERATOR_DENUMERATOR_MASK;
|
||||
reg |= num;
|
||||
__raw_writel(reg, base + INCREMENTER_NUMERATOR_OFFSET);
|
||||
writel_relaxed(reg, base + INCREMENTER_NUMERATOR_OFFSET);
|
||||
|
||||
reg = __raw_readl(base + INCREMENTER_DENUMERATOR_RELOAD_OFFSET) &
|
||||
reg = readl_relaxed(base + INCREMENTER_DENUMERATOR_RELOAD_OFFSET) &
|
||||
NUMERATOR_DENUMERATOR_MASK;
|
||||
reg |= den;
|
||||
__raw_writel(reg, base + INCREMENTER_DENUMERATOR_RELOAD_OFFSET);
|
||||
writel_relaxed(reg, base + INCREMENTER_DENUMERATOR_RELOAD_OFFSET);
|
||||
|
||||
arch_timer_freq = (rate / den) * num;
|
||||
set_cntfreq();
|
||||
|
@ -462,7 +462,7 @@ static void omap4_set_timings(struct voltagedomain *voltdm, bool off_mode)
|
||||
val |= omap4_usec_to_val_scrm(tshut, OMAP4_DOWNTIME_SHIFT,
|
||||
OMAP4_DOWNTIME_MASK);
|
||||
|
||||
__raw_writel(val, OMAP4_SCRM_CLKSETUPTIME);
|
||||
writel_relaxed(val, OMAP4_SCRM_CLKSETUPTIME);
|
||||
}
|
||||
|
||||
/* OMAP4 specific voltage init functions */
|
||||
@ -584,7 +584,7 @@ static void __init omap4_vc_i2c_timing_init(struct voltagedomain *voltdm)
|
||||
val = i2c_data->loadbits << 25 | i2c_data->loadbits << 29;
|
||||
|
||||
/* Write to SYSCTRL_PADCONF_WKUP_CTRL_I2C_2 to setup I2C pull */
|
||||
__raw_writel(val, OMAP2_L4_IO_ADDRESS(OMAP4_CTRL_MODULE_PAD_WKUP +
|
||||
writel_relaxed(val, OMAP2_L4_IO_ADDRESS(OMAP4_CTRL_MODULE_PAD_WKUP +
|
||||
OMAP4_CTRL_MODULE_PAD_WKUP_CONTROL_I2C_2));
|
||||
|
||||
/* HSSCLH can always be zero */
|
||||
|
@ -49,12 +49,12 @@ int omap2_wd_timer_disable(struct omap_hwmod *oh)
|
||||
}
|
||||
|
||||
/* sequence required to disable watchdog */
|
||||
__raw_writel(0xAAAA, base + OMAP_WDT_SPR);
|
||||
while (__raw_readl(base + OMAP_WDT_WPS) & 0x10)
|
||||
writel_relaxed(0xAAAA, base + OMAP_WDT_SPR);
|
||||
while (readl_relaxed(base + OMAP_WDT_WPS) & 0x10)
|
||||
cpu_relax();
|
||||
|
||||
__raw_writel(0x5555, base + OMAP_WDT_SPR);
|
||||
while (__raw_readl(base + OMAP_WDT_WPS) & 0x10)
|
||||
writel_relaxed(0x5555, base + OMAP_WDT_SPR);
|
||||
while (readl_relaxed(base + OMAP_WDT_WPS) & 0x10)
|
||||
cpu_relax();
|
||||
|
||||
return 0;
|
||||
|
@ -40,7 +40,7 @@ static void __iomem *sync32k_cnt_reg;
|
||||
|
||||
static u64 notrace omap_32k_read_sched_clock(void)
|
||||
{
|
||||
return sync32k_cnt_reg ? __raw_readl(sync32k_cnt_reg) : 0;
|
||||
return sync32k_cnt_reg ? readl_relaxed(sync32k_cnt_reg) : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -64,7 +64,7 @@ static void omap_read_persistent_clock(struct timespec *ts)
|
||||
spin_lock_irqsave(&read_persistent_clock_lock, flags);
|
||||
|
||||
last_cycles = cycles;
|
||||
cycles = sync32k_cnt_reg ? __raw_readl(sync32k_cnt_reg) : 0;
|
||||
cycles = sync32k_cnt_reg ? readl_relaxed(sync32k_cnt_reg) : 0;
|
||||
|
||||
nsecs = clocksource_cyc2ns(cycles - last_cycles,
|
||||
persistent_mult, persistent_shift);
|
||||
@ -95,7 +95,7 @@ int __init omap_init_clocksource_32k(void __iomem *vbase)
|
||||
* The 'SCHEME' bits(30-31) of the revision register is used
|
||||
* to identify the version.
|
||||
*/
|
||||
if (__raw_readl(vbase + OMAP2_32KSYNCNT_REV_OFF) &
|
||||
if (readl_relaxed(vbase + OMAP2_32KSYNCNT_REV_OFF) &
|
||||
OMAP2_32KSYNCNT_REV_SCHEME)
|
||||
sync32k_cnt_reg = vbase + OMAP2_32KSYNCNT_CR_OFF_HIGH;
|
||||
else
|
||||
|
@ -85,12 +85,12 @@ static void dbg_led_set(struct led_classdev *cdev,
|
||||
struct dbg_led *led = container_of(cdev, struct dbg_led, cdev);
|
||||
u16 reg;
|
||||
|
||||
reg = __raw_readw(&fpga->leds);
|
||||
reg = readw_relaxed(&fpga->leds);
|
||||
if (b != LED_OFF)
|
||||
reg |= led->mask;
|
||||
else
|
||||
reg &= ~led->mask;
|
||||
__raw_writew(reg, &fpga->leds);
|
||||
writew_relaxed(reg, &fpga->leds);
|
||||
}
|
||||
|
||||
static enum led_brightness dbg_led_get(struct led_classdev *cdev)
|
||||
@ -98,7 +98,7 @@ static enum led_brightness dbg_led_get(struct led_classdev *cdev)
|
||||
struct dbg_led *led = container_of(cdev, struct dbg_led, cdev);
|
||||
u16 reg;
|
||||
|
||||
reg = __raw_readw(&fpga->leds);
|
||||
reg = readw_relaxed(&fpga->leds);
|
||||
return (reg & led->mask) ? LED_FULL : LED_OFF;
|
||||
}
|
||||
|
||||
@ -112,7 +112,7 @@ static int fpga_probe(struct platform_device *pdev)
|
||||
return -ENODEV;
|
||||
|
||||
fpga = ioremap(iomem->start, resource_size(iomem));
|
||||
__raw_writew(0xff, &fpga->leds);
|
||||
writew_relaxed(0xff, &fpga->leds);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(dbg_leds); i++) {
|
||||
struct dbg_led *led;
|
||||
@ -138,15 +138,15 @@ static int fpga_probe(struct platform_device *pdev)
|
||||
|
||||
static int fpga_suspend_noirq(struct device *dev)
|
||||
{
|
||||
fpga_led_state = __raw_readw(&fpga->leds);
|
||||
__raw_writew(0xff, &fpga->leds);
|
||||
fpga_led_state = readw_relaxed(&fpga->leds);
|
||||
writew_relaxed(0xff, &fpga->leds);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int fpga_resume_noirq(struct device *dev)
|
||||
{
|
||||
__raw_writew(~fpga_led_state, &fpga->leds);
|
||||
writew_relaxed(~fpga_led_state, &fpga->leds);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -103,7 +103,7 @@ static void omap_timer_restore_context(struct omap_dm_timer *timer)
|
||||
timer->context.tmar);
|
||||
omap_dm_timer_write_reg(timer, OMAP_TIMER_IF_CTRL_REG,
|
||||
timer->context.tsicr);
|
||||
__raw_writel(timer->context.tier, timer->irq_ena);
|
||||
writel_relaxed(timer->context.tier, timer->irq_ena);
|
||||
omap_dm_timer_write_reg(timer, OMAP_TIMER_CTRL_REG,
|
||||
timer->context.tclr);
|
||||
}
|
||||
@ -699,9 +699,9 @@ int omap_dm_timer_set_int_disable(struct omap_dm_timer *timer, u32 mask)
|
||||
omap_dm_timer_enable(timer);
|
||||
|
||||
if (timer->revision == 1)
|
||||
l = __raw_readl(timer->irq_ena) & ~mask;
|
||||
l = readl_relaxed(timer->irq_ena) & ~mask;
|
||||
|
||||
__raw_writel(l, timer->irq_dis);
|
||||
writel_relaxed(l, timer->irq_dis);
|
||||
l = omap_dm_timer_read_reg(timer, OMAP_TIMER_WAKEUP_EN_REG) & ~mask;
|
||||
omap_dm_timer_write_reg(timer, OMAP_TIMER_WAKEUP_EN_REG, l);
|
||||
|
||||
@ -722,7 +722,7 @@ unsigned int omap_dm_timer_read_status(struct omap_dm_timer *timer)
|
||||
return 0;
|
||||
}
|
||||
|
||||
l = __raw_readl(timer->irq_stat);
|
||||
l = readl_relaxed(timer->irq_stat);
|
||||
|
||||
return l;
|
||||
}
|
||||
|
@ -280,20 +280,20 @@ static inline u32 __omap_dm_timer_read(struct omap_dm_timer *timer, u32 reg,
|
||||
int posted)
|
||||
{
|
||||
if (posted)
|
||||
while (__raw_readl(timer->pend) & (reg >> WPSHIFT))
|
||||
while (readl_relaxed(timer->pend) & (reg >> WPSHIFT))
|
||||
cpu_relax();
|
||||
|
||||
return __raw_readl(timer->func_base + (reg & 0xff));
|
||||
return readl_relaxed(timer->func_base + (reg & 0xff));
|
||||
}
|
||||
|
||||
static inline void __omap_dm_timer_write(struct omap_dm_timer *timer,
|
||||
u32 reg, u32 val, int posted)
|
||||
{
|
||||
if (posted)
|
||||
while (__raw_readl(timer->pend) & (reg >> WPSHIFT))
|
||||
while (readl_relaxed(timer->pend) & (reg >> WPSHIFT))
|
||||
cpu_relax();
|
||||
|
||||
__raw_writel(val, timer->func_base + (reg & 0xff));
|
||||
writel_relaxed(val, timer->func_base + (reg & 0xff));
|
||||
}
|
||||
|
||||
static inline void __omap_dm_timer_init_regs(struct omap_dm_timer *timer)
|
||||
@ -301,7 +301,7 @@ static inline void __omap_dm_timer_init_regs(struct omap_dm_timer *timer)
|
||||
u32 tidr;
|
||||
|
||||
/* Assume v1 ip if bits [31:16] are zero */
|
||||
tidr = __raw_readl(timer->io_base);
|
||||
tidr = readl_relaxed(timer->io_base);
|
||||
if (!(tidr >> 16)) {
|
||||
timer->revision = 1;
|
||||
timer->irq_stat = timer->io_base + OMAP_TIMER_V1_STAT_OFFSET;
|
||||
@ -385,7 +385,7 @@ static inline void __omap_dm_timer_stop(struct omap_dm_timer *timer,
|
||||
}
|
||||
|
||||
/* Ack possibly pending interrupt */
|
||||
__raw_writel(OMAP_TIMER_INT_OVERFLOW, timer->irq_stat);
|
||||
writel_relaxed(OMAP_TIMER_INT_OVERFLOW, timer->irq_stat);
|
||||
}
|
||||
|
||||
static inline void __omap_dm_timer_load_start(struct omap_dm_timer *timer,
|
||||
@ -399,7 +399,7 @@ static inline void __omap_dm_timer_load_start(struct omap_dm_timer *timer,
|
||||
static inline void __omap_dm_timer_int_enable(struct omap_dm_timer *timer,
|
||||
unsigned int value)
|
||||
{
|
||||
__raw_writel(value, timer->irq_ena);
|
||||
writel_relaxed(value, timer->irq_ena);
|
||||
__omap_dm_timer_write(timer, OMAP_TIMER_WAKEUP_EN_REG, value, 0);
|
||||
}
|
||||
|
||||
@ -412,7 +412,7 @@ __omap_dm_timer_read_counter(struct omap_dm_timer *timer, int posted)
|
||||
static inline void __omap_dm_timer_write_status(struct omap_dm_timer *timer,
|
||||
unsigned int value)
|
||||
{
|
||||
__raw_writel(value, timer->irq_stat);
|
||||
writel_relaxed(value, timer->irq_stat);
|
||||
}
|
||||
|
||||
#endif /* __ASM_ARCH_DMTIMER_H */
|
||||
|
Loading…
Reference in New Issue
Block a user