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

ptp: rework gianfar_ptp as QorIQ common PTP driver

gianfar_ptp was the PTP clock driver for 1588 timer
module of Freescale QorIQ eTSEC (Enhanced Three-Speed
Ethernet Controllers) platforms. Actually QorIQ DPAA
(Data Path Acceleration Architecture) platforms is
also using the same 1588 timer module in hardware.

This patch is to rework gianfar_ptp as QorIQ common
PTP driver to support both DPAA and eTSEC. Moved
gianfar_ptp.c to drivers/ptp/, renamed it as
ptp_qoriq.c, and renamed many variables. There were
not any function changes.

Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
Acked-by: Richard Cochran <richardcochran@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Yangbo Lu and committed by
David S. Miller
ceefc71d b1d2e4e0

+174 -162
-1
drivers/net/ethernet/freescale/Makefile
··· 14 14 obj-$(CONFIG_FSL_PQ_MDIO) += fsl_pq_mdio.o 15 15 obj-$(CONFIG_FSL_XGMAC_MDIO) += xgmac_mdio.o 16 16 obj-$(CONFIG_GIANFAR) += gianfar_driver.o 17 - obj-$(CONFIG_PTP_1588_CLOCK_GIANFAR) += gianfar_ptp.o 18 17 gianfar_driver-objs := gianfar.o \ 19 18 gianfar_ethtool.o 20 19 obj-$(CONFIG_UCC_GETH) += ucc_geth_driver.o
+166 -154
drivers/net/ethernet/freescale/gianfar_ptp.c drivers/ptp/ptp_qoriq.c
··· 1 1 /* 2 - * PTP 1588 clock using the eTSEC 2 + * PTP 1588 clock for Freescale QorIQ 1588 timer 3 3 * 4 4 * Copyright (C) 2010 OMICRON electronics GmbH 5 5 * ··· 29 29 #include <linux/of_platform.h> 30 30 #include <linux/timex.h> 31 31 #include <linux/io.h> 32 + #include <linux/slab.h> 32 33 33 34 #include <linux/ptp_clock_kernel.h> 34 35 35 - #include "gianfar.h" 36 - 37 36 /* 38 - * gianfar ptp registers 37 + * qoriq ptp registers 39 38 * Generated by regen.tcl on Thu May 13 01:38:57 PM CEST 2010 40 39 */ 41 - struct gianfar_ptp_registers { 40 + struct qoriq_ptp_registers { 42 41 u32 tmr_ctrl; /* Timer control register */ 43 42 u32 tmr_tevent; /* Timestamp event register */ 44 43 u32 tmr_temask; /* Timer event mask register */ ··· 126 127 #define PRSC_OCK_MASK (0xffff) 127 128 128 129 129 - #define DRIVER "gianfar_ptp" 130 + #define DRIVER "ptp_qoriq" 130 131 #define DEFAULT_CKSEL 1 131 132 #define N_EXT_TS 2 132 - #define REG_SIZE sizeof(struct gianfar_ptp_registers) 133 + #define REG_SIZE sizeof(struct qoriq_ptp_registers) 133 134 134 - struct etsects { 135 - struct gianfar_ptp_registers __iomem *regs; 135 + struct qoriq_ptp { 136 + struct qoriq_ptp_registers __iomem *regs; 136 137 spinlock_t lock; /* protects regs */ 137 138 struct ptp_clock *clock; 138 139 struct ptp_clock_info caps; 139 140 struct resource *rsrc; 140 141 int irq; 142 + int phc_index; 141 143 u64 alarm_interval; /* for periodic alarm */ 142 144 u64 alarm_value; 143 145 u32 tclk_period; /* nanoseconds */ ··· 149 149 u32 tmr_fiper2; 150 150 }; 151 151 152 + static inline u32 qoriq_read(unsigned __iomem *addr) 153 + { 154 + u32 val; 155 + 156 + val = ioread32be(addr); 157 + return val; 158 + } 159 + 160 + static inline void qoriq_write(unsigned __iomem *addr, u32 val) 161 + { 162 + iowrite32be(val, addr); 163 + } 164 + 152 165 /* 153 166 * Register access functions 154 167 */ 155 168 156 - /* Caller must hold etsects->lock. */ 157 - static u64 tmr_cnt_read(struct etsects *etsects) 169 + /* Caller must hold qoriq_ptp->lock. */ 170 + static u64 tmr_cnt_read(struct qoriq_ptp *qoriq_ptp) 158 171 { 159 172 u64 ns; 160 173 u32 lo, hi; 161 174 162 - lo = gfar_read(&etsects->regs->tmr_cnt_l); 163 - hi = gfar_read(&etsects->regs->tmr_cnt_h); 175 + lo = qoriq_read(&qoriq_ptp->regs->tmr_cnt_l); 176 + hi = qoriq_read(&qoriq_ptp->regs->tmr_cnt_h); 164 177 ns = ((u64) hi) << 32; 165 178 ns |= lo; 166 179 return ns; 167 180 } 168 181 169 - /* Caller must hold etsects->lock. */ 170 - static void tmr_cnt_write(struct etsects *etsects, u64 ns) 182 + /* Caller must hold qoriq_ptp->lock. */ 183 + static void tmr_cnt_write(struct qoriq_ptp *qoriq_ptp, u64 ns) 171 184 { 172 185 u32 hi = ns >> 32; 173 186 u32 lo = ns & 0xffffffff; 174 187 175 - gfar_write(&etsects->regs->tmr_cnt_l, lo); 176 - gfar_write(&etsects->regs->tmr_cnt_h, hi); 188 + qoriq_write(&qoriq_ptp->regs->tmr_cnt_l, lo); 189 + qoriq_write(&qoriq_ptp->regs->tmr_cnt_h, hi); 177 190 } 178 191 179 - /* Caller must hold etsects->lock. */ 180 - static void set_alarm(struct etsects *etsects) 192 + /* Caller must hold qoriq_ptp->lock. */ 193 + static void set_alarm(struct qoriq_ptp *qoriq_ptp) 181 194 { 182 195 u64 ns; 183 196 u32 lo, hi; 184 197 185 - ns = tmr_cnt_read(etsects) + 1500000000ULL; 198 + ns = tmr_cnt_read(qoriq_ptp) + 1500000000ULL; 186 199 ns = div_u64(ns, 1000000000UL) * 1000000000ULL; 187 - ns -= etsects->tclk_period; 200 + ns -= qoriq_ptp->tclk_period; 188 201 hi = ns >> 32; 189 202 lo = ns & 0xffffffff; 190 - gfar_write(&etsects->regs->tmr_alarm1_l, lo); 191 - gfar_write(&etsects->regs->tmr_alarm1_h, hi); 203 + qoriq_write(&qoriq_ptp->regs->tmr_alarm1_l, lo); 204 + qoriq_write(&qoriq_ptp->regs->tmr_alarm1_h, hi); 192 205 } 193 206 194 - /* Caller must hold etsects->lock. */ 195 - static void set_fipers(struct etsects *etsects) 207 + /* Caller must hold qoriq_ptp->lock. */ 208 + static void set_fipers(struct qoriq_ptp *qoriq_ptp) 196 209 { 197 - set_alarm(etsects); 198 - gfar_write(&etsects->regs->tmr_fiper1, etsects->tmr_fiper1); 199 - gfar_write(&etsects->regs->tmr_fiper2, etsects->tmr_fiper2); 210 + set_alarm(qoriq_ptp); 211 + qoriq_write(&qoriq_ptp->regs->tmr_fiper1, qoriq_ptp->tmr_fiper1); 212 + qoriq_write(&qoriq_ptp->regs->tmr_fiper2, qoriq_ptp->tmr_fiper2); 200 213 } 201 214 202 215 /* ··· 218 205 219 206 static irqreturn_t isr(int irq, void *priv) 220 207 { 221 - struct etsects *etsects = priv; 208 + struct qoriq_ptp *qoriq_ptp = priv; 222 209 struct ptp_clock_event event; 223 210 u64 ns; 224 211 u32 ack = 0, lo, hi, mask, val; 225 212 226 - val = gfar_read(&etsects->regs->tmr_tevent); 213 + val = qoriq_read(&qoriq_ptp->regs->tmr_tevent); 227 214 228 215 if (val & ETS1) { 229 216 ack |= ETS1; 230 - hi = gfar_read(&etsects->regs->tmr_etts1_h); 231 - lo = gfar_read(&etsects->regs->tmr_etts1_l); 217 + hi = qoriq_read(&qoriq_ptp->regs->tmr_etts1_h); 218 + lo = qoriq_read(&qoriq_ptp->regs->tmr_etts1_l); 232 219 event.type = PTP_CLOCK_EXTTS; 233 220 event.index = 0; 234 221 event.timestamp = ((u64) hi) << 32; 235 222 event.timestamp |= lo; 236 - ptp_clock_event(etsects->clock, &event); 223 + ptp_clock_event(qoriq_ptp->clock, &event); 237 224 } 238 225 239 226 if (val & ETS2) { 240 227 ack |= ETS2; 241 - hi = gfar_read(&etsects->regs->tmr_etts2_h); 242 - lo = gfar_read(&etsects->regs->tmr_etts2_l); 228 + hi = qoriq_read(&qoriq_ptp->regs->tmr_etts2_h); 229 + lo = qoriq_read(&qoriq_ptp->regs->tmr_etts2_l); 243 230 event.type = PTP_CLOCK_EXTTS; 244 231 event.index = 1; 245 232 event.timestamp = ((u64) hi) << 32; 246 233 event.timestamp |= lo; 247 - ptp_clock_event(etsects->clock, &event); 234 + ptp_clock_event(qoriq_ptp->clock, &event); 248 235 } 249 236 250 237 if (val & ALM2) { 251 238 ack |= ALM2; 252 - if (etsects->alarm_value) { 239 + if (qoriq_ptp->alarm_value) { 253 240 event.type = PTP_CLOCK_ALARM; 254 241 event.index = 0; 255 - event.timestamp = etsects->alarm_value; 256 - ptp_clock_event(etsects->clock, &event); 242 + event.timestamp = qoriq_ptp->alarm_value; 243 + ptp_clock_event(qoriq_ptp->clock, &event); 257 244 } 258 - if (etsects->alarm_interval) { 259 - ns = etsects->alarm_value + etsects->alarm_interval; 245 + if (qoriq_ptp->alarm_interval) { 246 + ns = qoriq_ptp->alarm_value + qoriq_ptp->alarm_interval; 260 247 hi = ns >> 32; 261 248 lo = ns & 0xffffffff; 262 - spin_lock(&etsects->lock); 263 - gfar_write(&etsects->regs->tmr_alarm2_l, lo); 264 - gfar_write(&etsects->regs->tmr_alarm2_h, hi); 265 - spin_unlock(&etsects->lock); 266 - etsects->alarm_value = ns; 249 + spin_lock(&qoriq_ptp->lock); 250 + qoriq_write(&qoriq_ptp->regs->tmr_alarm2_l, lo); 251 + qoriq_write(&qoriq_ptp->regs->tmr_alarm2_h, hi); 252 + spin_unlock(&qoriq_ptp->lock); 253 + qoriq_ptp->alarm_value = ns; 267 254 } else { 268 - gfar_write(&etsects->regs->tmr_tevent, ALM2); 269 - spin_lock(&etsects->lock); 270 - mask = gfar_read(&etsects->regs->tmr_temask); 255 + qoriq_write(&qoriq_ptp->regs->tmr_tevent, ALM2); 256 + spin_lock(&qoriq_ptp->lock); 257 + mask = qoriq_read(&qoriq_ptp->regs->tmr_temask); 271 258 mask &= ~ALM2EN; 272 - gfar_write(&etsects->regs->tmr_temask, mask); 273 - spin_unlock(&etsects->lock); 274 - etsects->alarm_value = 0; 275 - etsects->alarm_interval = 0; 259 + qoriq_write(&qoriq_ptp->regs->tmr_temask, mask); 260 + spin_unlock(&qoriq_ptp->lock); 261 + qoriq_ptp->alarm_value = 0; 262 + qoriq_ptp->alarm_interval = 0; 276 263 } 277 264 } 278 265 279 266 if (val & PP1) { 280 267 ack |= PP1; 281 268 event.type = PTP_CLOCK_PPS; 282 - ptp_clock_event(etsects->clock, &event); 269 + ptp_clock_event(qoriq_ptp->clock, &event); 283 270 } 284 271 285 272 if (ack) { 286 - gfar_write(&etsects->regs->tmr_tevent, ack); 273 + qoriq_write(&qoriq_ptp->regs->tmr_tevent, ack); 287 274 return IRQ_HANDLED; 288 275 } else 289 276 return IRQ_NONE; ··· 293 280 * PTP clock operations 294 281 */ 295 282 296 - static int ptp_gianfar_adjfine(struct ptp_clock_info *ptp, long scaled_ppm) 283 + static int ptp_qoriq_adjfine(struct ptp_clock_info *ptp, long scaled_ppm) 297 284 { 298 285 u64 adj, diff; 299 286 u32 tmr_add; 300 287 int neg_adj = 0; 301 - struct etsects *etsects = container_of(ptp, struct etsects, caps); 288 + struct qoriq_ptp *qoriq_ptp = container_of(ptp, struct qoriq_ptp, caps); 302 289 303 290 if (scaled_ppm < 0) { 304 291 neg_adj = 1; 305 292 scaled_ppm = -scaled_ppm; 306 293 } 307 - tmr_add = etsects->tmr_add; 294 + tmr_add = qoriq_ptp->tmr_add; 308 295 adj = tmr_add; 309 296 310 297 /* calculate diff as adj*(scaled_ppm/65536)/1000000 ··· 316 303 317 304 tmr_add = neg_adj ? tmr_add - diff : tmr_add + diff; 318 305 319 - gfar_write(&etsects->regs->tmr_add, tmr_add); 306 + qoriq_write(&qoriq_ptp->regs->tmr_add, tmr_add); 320 307 321 308 return 0; 322 309 } 323 310 324 - static int ptp_gianfar_adjtime(struct ptp_clock_info *ptp, s64 delta) 311 + static int ptp_qoriq_adjtime(struct ptp_clock_info *ptp, s64 delta) 325 312 { 326 313 s64 now; 327 314 unsigned long flags; 328 - struct etsects *etsects = container_of(ptp, struct etsects, caps); 315 + struct qoriq_ptp *qoriq_ptp = container_of(ptp, struct qoriq_ptp, caps); 329 316 330 - spin_lock_irqsave(&etsects->lock, flags); 317 + spin_lock_irqsave(&qoriq_ptp->lock, flags); 331 318 332 - now = tmr_cnt_read(etsects); 319 + now = tmr_cnt_read(qoriq_ptp); 333 320 now += delta; 334 - tmr_cnt_write(etsects, now); 335 - set_fipers(etsects); 321 + tmr_cnt_write(qoriq_ptp, now); 322 + set_fipers(qoriq_ptp); 336 323 337 - spin_unlock_irqrestore(&etsects->lock, flags); 324 + spin_unlock_irqrestore(&qoriq_ptp->lock, flags); 338 325 339 326 return 0; 340 327 } 341 328 342 - static int ptp_gianfar_gettime(struct ptp_clock_info *ptp, 329 + static int ptp_qoriq_gettime(struct ptp_clock_info *ptp, 343 330 struct timespec64 *ts) 344 331 { 345 332 u64 ns; 346 333 unsigned long flags; 347 - struct etsects *etsects = container_of(ptp, struct etsects, caps); 334 + struct qoriq_ptp *qoriq_ptp = container_of(ptp, struct qoriq_ptp, caps); 348 335 349 - spin_lock_irqsave(&etsects->lock, flags); 336 + spin_lock_irqsave(&qoriq_ptp->lock, flags); 350 337 351 - ns = tmr_cnt_read(etsects); 338 + ns = tmr_cnt_read(qoriq_ptp); 352 339 353 - spin_unlock_irqrestore(&etsects->lock, flags); 340 + spin_unlock_irqrestore(&qoriq_ptp->lock, flags); 354 341 355 342 *ts = ns_to_timespec64(ns); 356 343 357 344 return 0; 358 345 } 359 346 360 - static int ptp_gianfar_settime(struct ptp_clock_info *ptp, 347 + static int ptp_qoriq_settime(struct ptp_clock_info *ptp, 361 348 const struct timespec64 *ts) 362 349 { 363 350 u64 ns; 364 351 unsigned long flags; 365 - struct etsects *etsects = container_of(ptp, struct etsects, caps); 352 + struct qoriq_ptp *qoriq_ptp = container_of(ptp, struct qoriq_ptp, caps); 366 353 367 354 ns = timespec64_to_ns(ts); 368 355 369 - spin_lock_irqsave(&etsects->lock, flags); 356 + spin_lock_irqsave(&qoriq_ptp->lock, flags); 370 357 371 - tmr_cnt_write(etsects, ns); 372 - set_fipers(etsects); 358 + tmr_cnt_write(qoriq_ptp, ns); 359 + set_fipers(qoriq_ptp); 373 360 374 - spin_unlock_irqrestore(&etsects->lock, flags); 361 + spin_unlock_irqrestore(&qoriq_ptp->lock, flags); 375 362 376 363 return 0; 377 364 } 378 365 379 - static int ptp_gianfar_enable(struct ptp_clock_info *ptp, 366 + static int ptp_qoriq_enable(struct ptp_clock_info *ptp, 380 367 struct ptp_clock_request *rq, int on) 381 368 { 382 - struct etsects *etsects = container_of(ptp, struct etsects, caps); 369 + struct qoriq_ptp *qoriq_ptp = container_of(ptp, struct qoriq_ptp, caps); 383 370 unsigned long flags; 384 371 u32 bit, mask; 385 372 ··· 395 382 default: 396 383 return -EINVAL; 397 384 } 398 - spin_lock_irqsave(&etsects->lock, flags); 399 - mask = gfar_read(&etsects->regs->tmr_temask); 385 + spin_lock_irqsave(&qoriq_ptp->lock, flags); 386 + mask = qoriq_read(&qoriq_ptp->regs->tmr_temask); 400 387 if (on) 401 388 mask |= bit; 402 389 else 403 390 mask &= ~bit; 404 - gfar_write(&etsects->regs->tmr_temask, mask); 405 - spin_unlock_irqrestore(&etsects->lock, flags); 391 + qoriq_write(&qoriq_ptp->regs->tmr_temask, mask); 392 + spin_unlock_irqrestore(&qoriq_ptp->lock, flags); 406 393 return 0; 407 394 408 395 case PTP_CLK_REQ_PPS: 409 - spin_lock_irqsave(&etsects->lock, flags); 410 - mask = gfar_read(&etsects->regs->tmr_temask); 396 + spin_lock_irqsave(&qoriq_ptp->lock, flags); 397 + mask = qoriq_read(&qoriq_ptp->regs->tmr_temask); 411 398 if (on) 412 399 mask |= PP1EN; 413 400 else 414 401 mask &= ~PP1EN; 415 - gfar_write(&etsects->regs->tmr_temask, mask); 416 - spin_unlock_irqrestore(&etsects->lock, flags); 402 + qoriq_write(&qoriq_ptp->regs->tmr_temask, mask); 403 + spin_unlock_irqrestore(&qoriq_ptp->lock, flags); 417 404 return 0; 418 405 419 406 default: ··· 423 410 return -EOPNOTSUPP; 424 411 } 425 412 426 - static const struct ptp_clock_info ptp_gianfar_caps = { 413 + static const struct ptp_clock_info ptp_qoriq_caps = { 427 414 .owner = THIS_MODULE, 428 - .name = "gianfar clock", 415 + .name = "qoriq ptp clock", 429 416 .max_adj = 512000, 430 417 .n_alarm = 0, 431 418 .n_ext_ts = N_EXT_TS, 432 419 .n_per_out = 0, 433 420 .n_pins = 0, 434 421 .pps = 1, 435 - .adjfine = ptp_gianfar_adjfine, 436 - .adjtime = ptp_gianfar_adjtime, 437 - .gettime64 = ptp_gianfar_gettime, 438 - .settime64 = ptp_gianfar_settime, 439 - .enable = ptp_gianfar_enable, 422 + .adjfine = ptp_qoriq_adjfine, 423 + .adjtime = ptp_qoriq_adjtime, 424 + .gettime64 = ptp_qoriq_gettime, 425 + .settime64 = ptp_qoriq_settime, 426 + .enable = ptp_qoriq_enable, 440 427 }; 441 428 442 - static int gianfar_ptp_probe(struct platform_device *dev) 429 + static int qoriq_ptp_probe(struct platform_device *dev) 443 430 { 444 431 struct device_node *node = dev->dev.of_node; 445 - struct etsects *etsects; 432 + struct qoriq_ptp *qoriq_ptp; 446 433 struct timespec64 now; 447 434 int err = -ENOMEM; 448 435 u32 tmr_ctrl; 449 436 unsigned long flags; 450 437 451 - etsects = kzalloc(sizeof(*etsects), GFP_KERNEL); 452 - if (!etsects) 438 + qoriq_ptp = kzalloc(sizeof(*qoriq_ptp), GFP_KERNEL); 439 + if (!qoriq_ptp) 453 440 goto no_memory; 454 441 455 442 err = -ENODEV; 456 443 457 - etsects->caps = ptp_gianfar_caps; 444 + qoriq_ptp->caps = ptp_qoriq_caps; 458 445 459 - if (of_property_read_u32(node, "fsl,cksel", &etsects->cksel)) 460 - etsects->cksel = DEFAULT_CKSEL; 446 + if (of_property_read_u32(node, "fsl,cksel", &qoriq_ptp->cksel)) 447 + qoriq_ptp->cksel = DEFAULT_CKSEL; 461 448 462 449 if (of_property_read_u32(node, 463 - "fsl,tclk-period", &etsects->tclk_period) || 450 + "fsl,tclk-period", &qoriq_ptp->tclk_period) || 464 451 of_property_read_u32(node, 465 - "fsl,tmr-prsc", &etsects->tmr_prsc) || 452 + "fsl,tmr-prsc", &qoriq_ptp->tmr_prsc) || 466 453 of_property_read_u32(node, 467 - "fsl,tmr-add", &etsects->tmr_add) || 454 + "fsl,tmr-add", &qoriq_ptp->tmr_add) || 468 455 of_property_read_u32(node, 469 - "fsl,tmr-fiper1", &etsects->tmr_fiper1) || 456 + "fsl,tmr-fiper1", &qoriq_ptp->tmr_fiper1) || 470 457 of_property_read_u32(node, 471 - "fsl,tmr-fiper2", &etsects->tmr_fiper2) || 458 + "fsl,tmr-fiper2", &qoriq_ptp->tmr_fiper2) || 472 459 of_property_read_u32(node, 473 - "fsl,max-adj", &etsects->caps.max_adj)) { 460 + "fsl,max-adj", &qoriq_ptp->caps.max_adj)) { 474 461 pr_err("device tree node missing required elements\n"); 475 462 goto no_node; 476 463 } 477 464 478 - etsects->irq = platform_get_irq(dev, 0); 465 + qoriq_ptp->irq = platform_get_irq(dev, 0); 479 466 480 - if (etsects->irq < 0) { 467 + if (qoriq_ptp->irq < 0) { 481 468 pr_err("irq not in device tree\n"); 482 469 goto no_node; 483 470 } 484 - if (request_irq(etsects->irq, isr, 0, DRIVER, etsects)) { 471 + if (request_irq(qoriq_ptp->irq, isr, 0, DRIVER, qoriq_ptp)) { 485 472 pr_err("request_irq failed\n"); 486 473 goto no_node; 487 474 } 488 475 489 - etsects->rsrc = platform_get_resource(dev, IORESOURCE_MEM, 0); 490 - if (!etsects->rsrc) { 476 + qoriq_ptp->rsrc = platform_get_resource(dev, IORESOURCE_MEM, 0); 477 + if (!qoriq_ptp->rsrc) { 491 478 pr_err("no resource\n"); 492 479 goto no_resource; 493 480 } 494 - if (request_resource(&iomem_resource, etsects->rsrc)) { 481 + if (request_resource(&iomem_resource, qoriq_ptp->rsrc)) { 495 482 pr_err("resource busy\n"); 496 483 goto no_resource; 497 484 } 498 485 499 - spin_lock_init(&etsects->lock); 486 + spin_lock_init(&qoriq_ptp->lock); 500 487 501 - etsects->regs = ioremap(etsects->rsrc->start, 502 - resource_size(etsects->rsrc)); 503 - if (!etsects->regs) { 488 + qoriq_ptp->regs = ioremap(qoriq_ptp->rsrc->start, 489 + resource_size(qoriq_ptp->rsrc)); 490 + if (!qoriq_ptp->regs) { 504 491 pr_err("ioremap ptp registers failed\n"); 505 492 goto no_ioremap; 506 493 } 507 494 getnstimeofday64(&now); 508 - ptp_gianfar_settime(&etsects->caps, &now); 495 + ptp_qoriq_settime(&qoriq_ptp->caps, &now); 509 496 510 497 tmr_ctrl = 511 - (etsects->tclk_period & TCLK_PERIOD_MASK) << TCLK_PERIOD_SHIFT | 512 - (etsects->cksel & CKSEL_MASK) << CKSEL_SHIFT; 498 + (qoriq_ptp->tclk_period & TCLK_PERIOD_MASK) << TCLK_PERIOD_SHIFT | 499 + (qoriq_ptp->cksel & CKSEL_MASK) << CKSEL_SHIFT; 513 500 514 - spin_lock_irqsave(&etsects->lock, flags); 501 + spin_lock_irqsave(&qoriq_ptp->lock, flags); 515 502 516 - gfar_write(&etsects->regs->tmr_ctrl, tmr_ctrl); 517 - gfar_write(&etsects->regs->tmr_add, etsects->tmr_add); 518 - gfar_write(&etsects->regs->tmr_prsc, etsects->tmr_prsc); 519 - gfar_write(&etsects->regs->tmr_fiper1, etsects->tmr_fiper1); 520 - gfar_write(&etsects->regs->tmr_fiper2, etsects->tmr_fiper2); 521 - set_alarm(etsects); 522 - gfar_write(&etsects->regs->tmr_ctrl, tmr_ctrl|FIPERST|RTPE|TE|FRD); 503 + qoriq_write(&qoriq_ptp->regs->tmr_ctrl, tmr_ctrl); 504 + qoriq_write(&qoriq_ptp->regs->tmr_add, qoriq_ptp->tmr_add); 505 + qoriq_write(&qoriq_ptp->regs->tmr_prsc, qoriq_ptp->tmr_prsc); 506 + qoriq_write(&qoriq_ptp->regs->tmr_fiper1, qoriq_ptp->tmr_fiper1); 507 + qoriq_write(&qoriq_ptp->regs->tmr_fiper2, qoriq_ptp->tmr_fiper2); 508 + set_alarm(qoriq_ptp); 509 + qoriq_write(&qoriq_ptp->regs->tmr_ctrl, tmr_ctrl|FIPERST|RTPE|TE|FRD); 523 510 524 - spin_unlock_irqrestore(&etsects->lock, flags); 511 + spin_unlock_irqrestore(&qoriq_ptp->lock, flags); 525 512 526 - etsects->clock = ptp_clock_register(&etsects->caps, &dev->dev); 527 - if (IS_ERR(etsects->clock)) { 528 - err = PTR_ERR(etsects->clock); 513 + qoriq_ptp->clock = ptp_clock_register(&qoriq_ptp->caps, &dev->dev); 514 + if (IS_ERR(qoriq_ptp->clock)) { 515 + err = PTR_ERR(qoriq_ptp->clock); 529 516 goto no_clock; 530 517 } 531 - gfar_phc_index = ptp_clock_index(etsects->clock); 518 + qoriq_ptp->phc_index = ptp_clock_index(qoriq_ptp->clock); 532 519 533 - platform_set_drvdata(dev, etsects); 520 + platform_set_drvdata(dev, qoriq_ptp); 534 521 535 522 return 0; 536 523 537 524 no_clock: 538 - iounmap(etsects->regs); 525 + iounmap(qoriq_ptp->regs); 539 526 no_ioremap: 540 - release_resource(etsects->rsrc); 527 + release_resource(qoriq_ptp->rsrc); 541 528 no_resource: 542 - free_irq(etsects->irq, etsects); 529 + free_irq(qoriq_ptp->irq, qoriq_ptp); 543 530 no_node: 544 - kfree(etsects); 531 + kfree(qoriq_ptp); 545 532 no_memory: 546 533 return err; 547 534 } 548 535 549 - static int gianfar_ptp_remove(struct platform_device *dev) 536 + static int qoriq_ptp_remove(struct platform_device *dev) 550 537 { 551 - struct etsects *etsects = platform_get_drvdata(dev); 538 + struct qoriq_ptp *qoriq_ptp = platform_get_drvdata(dev); 552 539 553 - gfar_write(&etsects->regs->tmr_temask, 0); 554 - gfar_write(&etsects->regs->tmr_ctrl, 0); 540 + qoriq_write(&qoriq_ptp->regs->tmr_temask, 0); 541 + qoriq_write(&qoriq_ptp->regs->tmr_ctrl, 0); 555 542 556 - gfar_phc_index = -1; 557 - ptp_clock_unregister(etsects->clock); 558 - iounmap(etsects->regs); 559 - release_resource(etsects->rsrc); 560 - free_irq(etsects->irq, etsects); 561 - kfree(etsects); 543 + ptp_clock_unregister(qoriq_ptp->clock); 544 + iounmap(qoriq_ptp->regs); 545 + release_resource(qoriq_ptp->rsrc); 546 + free_irq(qoriq_ptp->irq, qoriq_ptp); 547 + kfree(qoriq_ptp); 562 548 563 549 return 0; 564 550 } ··· 568 556 }; 569 557 MODULE_DEVICE_TABLE(of, match_table); 570 558 571 - static struct platform_driver gianfar_ptp_driver = { 559 + static struct platform_driver qoriq_ptp_driver = { 572 560 .driver = { 573 - .name = "gianfar_ptp", 561 + .name = "ptp_qoriq", 574 562 .of_match_table = match_table, 575 563 }, 576 - .probe = gianfar_ptp_probe, 577 - .remove = gianfar_ptp_remove, 564 + .probe = qoriq_ptp_probe, 565 + .remove = qoriq_ptp_remove, 578 566 }; 579 567 580 - module_platform_driver(gianfar_ptp_driver); 568 + module_platform_driver(qoriq_ptp_driver); 581 569 582 570 MODULE_AUTHOR("Richard Cochran <richardcochran@gmail.com>"); 583 - MODULE_DESCRIPTION("PTP clock using the eTSEC"); 571 + MODULE_DESCRIPTION("PTP clock for Freescale QorIQ 1588 timer"); 584 572 MODULE_LICENSE("GPL");
+7 -7
drivers/ptp/Kconfig
··· 41 41 To compile this driver as a module, choose M here: the module 42 42 will be called ptp_dte. 43 43 44 - config PTP_1588_CLOCK_GIANFAR 45 - tristate "Freescale eTSEC as PTP clock" 44 + config PTP_1588_CLOCK_QORIQ 45 + tristate "Freescale QorIQ 1588 timer as PTP clock" 46 46 depends on GIANFAR 47 47 depends on PTP_1588_CLOCK 48 48 default y 49 49 help 50 - This driver adds support for using the eTSEC as a PTP 51 - clock. This clock is only useful if your PTP programs are 52 - getting hardware time stamps on the PTP Ethernet packets 53 - using the SO_TIMESTAMPING API. 50 + This driver adds support for using the Freescale QorIQ 1588 51 + timer as a PTP clock. This clock is only useful if your PTP 52 + programs are getting hardware time stamps on the PTP Ethernet 53 + packets using the SO_TIMESTAMPING API. 54 54 55 55 To compile this driver as a module, choose M here: the module 56 - will be called gianfar_ptp. 56 + will be called ptp_qoriq. 57 57 58 58 config PTP_1588_CLOCK_IXP46X 59 59 tristate "Intel IXP46x as PTP clock"
+1
drivers/ptp/Makefile
··· 9 9 obj-$(CONFIG_PTP_1588_CLOCK_IXP46X) += ptp_ixp46x.o 10 10 obj-$(CONFIG_PTP_1588_CLOCK_PCH) += ptp_pch.o 11 11 obj-$(CONFIG_PTP_1588_CLOCK_KVM) += ptp_kvm.o 12 + obj-$(CONFIG_PTP_1588_CLOCK_QORIQ) += ptp_qoriq.o