| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0+ |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * DaVinci MDIO Module driver |
|---|
| 3 | 4 | * |
|---|
| .. | .. |
|---|
| 7 | 8 | * |
|---|
| 8 | 9 | * Copyright (C) 2009 Texas Instruments. |
|---|
| 9 | 10 | * |
|---|
| 10 | | - * --------------------------------------------------------------------------- |
|---|
| 11 | | - * |
|---|
| 12 | | - * This program is free software; you can redistribute it and/or modify |
|---|
| 13 | | - * it under the terms of the GNU General Public License as published by |
|---|
| 14 | | - * the Free Software Foundation; either version 2 of the License, or |
|---|
| 15 | | - * (at your option) any later version. |
|---|
| 16 | | - * |
|---|
| 17 | | - * This program is distributed in the hope that it will be useful, |
|---|
| 18 | | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|---|
| 19 | | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|---|
| 20 | | - * GNU General Public License for more details. |
|---|
| 21 | | - * |
|---|
| 22 | | - * You should have received a copy of the GNU General Public License |
|---|
| 23 | | - * along with this program; if not, write to the Free Software |
|---|
| 24 | | - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
|---|
| 25 | | - * --------------------------------------------------------------------------- |
|---|
| 26 | 11 | */ |
|---|
| 27 | 12 | #include <linux/module.h> |
|---|
| 28 | 13 | #include <linux/kernel.h> |
|---|
| .. | .. |
|---|
| 140 | 125 | static void davinci_mdio_enable(struct davinci_mdio_data *data) |
|---|
| 141 | 126 | { |
|---|
| 142 | 127 | /* set enable and clock divider */ |
|---|
| 143 | | - __raw_writel(data->clk_div | CONTROL_ENABLE, &data->regs->control); |
|---|
| 128 | + writel(data->clk_div | CONTROL_ENABLE, &data->regs->control); |
|---|
| 144 | 129 | } |
|---|
| 145 | 130 | |
|---|
| 146 | 131 | static int davinci_mdio_reset(struct mii_bus *bus) |
|---|
| .. | .. |
|---|
| 159 | 144 | msleep(PHY_MAX_ADDR * data->access_time); |
|---|
| 160 | 145 | |
|---|
| 161 | 146 | /* dump hardware version info */ |
|---|
| 162 | | - ver = __raw_readl(&data->regs->version); |
|---|
| 147 | + ver = readl(&data->regs->version); |
|---|
| 163 | 148 | dev_info(data->dev, |
|---|
| 164 | 149 | "davinci mdio revision %d.%d, bus freq %ld\n", |
|---|
| 165 | 150 | (ver >> 8) & 0xff, ver & 0xff, |
|---|
| .. | .. |
|---|
| 169 | 154 | goto done; |
|---|
| 170 | 155 | |
|---|
| 171 | 156 | /* get phy mask from the alive register */ |
|---|
| 172 | | - phy_mask = __raw_readl(&data->regs->alive); |
|---|
| 157 | + phy_mask = readl(&data->regs->alive); |
|---|
| 173 | 158 | if (phy_mask) { |
|---|
| 174 | 159 | /* restrict mdio bus to live phys only */ |
|---|
| 175 | 160 | dev_info(data->dev, "detected phy mask %x\n", ~phy_mask); |
|---|
| .. | .. |
|---|
| 196 | 181 | u32 reg; |
|---|
| 197 | 182 | |
|---|
| 198 | 183 | while (time_after(timeout, jiffies)) { |
|---|
| 199 | | - reg = __raw_readl(®s->user[0].access); |
|---|
| 184 | + reg = readl(®s->user[0].access); |
|---|
| 200 | 185 | if ((reg & USERACCESS_GO) == 0) |
|---|
| 201 | 186 | return 0; |
|---|
| 202 | 187 | |
|---|
| 203 | | - reg = __raw_readl(®s->control); |
|---|
| 188 | + reg = readl(®s->control); |
|---|
| 204 | 189 | if ((reg & CONTROL_IDLE) == 0) { |
|---|
| 205 | 190 | usleep_range(100, 200); |
|---|
| 206 | 191 | continue; |
|---|
| .. | .. |
|---|
| 216 | 201 | return -EAGAIN; |
|---|
| 217 | 202 | } |
|---|
| 218 | 203 | |
|---|
| 219 | | - reg = __raw_readl(®s->user[0].access); |
|---|
| 204 | + reg = readl(®s->user[0].access); |
|---|
| 220 | 205 | if ((reg & USERACCESS_GO) == 0) |
|---|
| 221 | 206 | return 0; |
|---|
| 222 | 207 | |
|---|
| .. | .. |
|---|
| 263 | 248 | if (ret < 0) |
|---|
| 264 | 249 | break; |
|---|
| 265 | 250 | |
|---|
| 266 | | - __raw_writel(reg, &data->regs->user[0].access); |
|---|
| 251 | + writel(reg, &data->regs->user[0].access); |
|---|
| 267 | 252 | |
|---|
| 268 | 253 | ret = wait_for_user_access(data); |
|---|
| 269 | 254 | if (ret == -EAGAIN) |
|---|
| .. | .. |
|---|
| 271 | 256 | if (ret < 0) |
|---|
| 272 | 257 | break; |
|---|
| 273 | 258 | |
|---|
| 274 | | - reg = __raw_readl(&data->regs->user[0].access); |
|---|
| 259 | + reg = readl(&data->regs->user[0].access); |
|---|
| 275 | 260 | ret = (reg & USERACCESS_ACK) ? (reg & USERACCESS_DATA) : -EIO; |
|---|
| 276 | 261 | break; |
|---|
| 277 | 262 | } |
|---|
| .. | .. |
|---|
| 307 | 292 | if (ret < 0) |
|---|
| 308 | 293 | break; |
|---|
| 309 | 294 | |
|---|
| 310 | | - __raw_writel(reg, &data->regs->user[0].access); |
|---|
| 295 | + writel(reg, &data->regs->user[0].access); |
|---|
| 311 | 296 | |
|---|
| 312 | 297 | ret = wait_for_user_access(data); |
|---|
| 313 | 298 | if (ret == -EAGAIN) |
|---|
| .. | .. |
|---|
| 412 | 397 | data->dev = dev; |
|---|
| 413 | 398 | |
|---|
| 414 | 399 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
|---|
| 415 | | - data->regs = devm_ioremap_resource(dev, res); |
|---|
| 416 | | - if (IS_ERR(data->regs)) |
|---|
| 417 | | - return PTR_ERR(data->regs); |
|---|
| 400 | + if (!res) |
|---|
| 401 | + return -EINVAL; |
|---|
| 402 | + data->regs = devm_ioremap(dev, res->start, resource_size(res)); |
|---|
| 403 | + if (!data->regs) |
|---|
| 404 | + return -ENOMEM; |
|---|
| 418 | 405 | |
|---|
| 419 | 406 | davinci_mdio_init_clk(data); |
|---|
| 420 | 407 | |
|---|
| .. | .. |
|---|
| 472 | 459 | u32 ctrl; |
|---|
| 473 | 460 | |
|---|
| 474 | 461 | /* shutdown the scan state machine */ |
|---|
| 475 | | - ctrl = __raw_readl(&data->regs->control); |
|---|
| 462 | + ctrl = readl(&data->regs->control); |
|---|
| 476 | 463 | ctrl &= ~CONTROL_ENABLE; |
|---|
| 477 | | - __raw_writel(ctrl, &data->regs->control); |
|---|
| 464 | + writel(ctrl, &data->regs->control); |
|---|
| 478 | 465 | wait_for_idle(data); |
|---|
| 479 | 466 | |
|---|
| 480 | 467 | return 0; |
|---|