File Index
Files and directories
Sign in
FILE

vio.c

File preview with syntax highlighting.

linux-6.19.14/arch/powerpc/platforms/pseries/vio.c C
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/*
   3 * IBM PowerPC Virtual I/O Infrastructure Support.
   4 *
   5 *    Copyright (c) 2003,2008 IBM Corp.
   6 *     Dave Engebretsen engebret@us.ibm.com
   7 *     Santiago Leon santil@us.ibm.com
   8 *     Hollis Blanchard <hollisb@us.ibm.com>
   9 *     Stephen Rothwell
  10 *     Robert Jennings <rcjenn@us.ibm.com>
  11 */
  12
  13#include <linux/cpu.h>
  14#include <linux/types.h>
  15#include <linux/delay.h>
  16#include <linux/stat.h>
  17#include <linux/device.h>
  18#include <linux/init.h>
  19#include <linux/slab.h>
  20#include <linux/console.h>
  21#include <linux/export.h>
  22#include <linux/mm.h>
  23#include <linux/dma-map-ops.h>
  24#include <linux/kobject.h>
  25#include <linux/kexec.h>
  26#include <linux/of_irq.h>
  27
  28#include <asm/iommu.h>
  29#include <asm/dma.h>
  30#include <asm/vio.h>
  31#include <asm/prom.h>
  32#include <asm/firmware.h>
  33#include <asm/tce.h>
  34#include <asm/page.h>
  35#include <asm/hvcall.h>
  36#include <asm/machdep.h>
  37
  38static struct vio_dev vio_bus_device  = { /* fake "parent" device */
  39	.name = "vio",
  40	.type = "",
  41	.dev.init_name = "vio",
  42	.dev.bus = &vio_bus_type,
  43};
  44
  45#ifdef CONFIG_PPC_SMLPAR
  46/**
  47 * vio_cmo_pool - A pool of IO memory for CMO use
  48 *
  49 * @size: The size of the pool in bytes
  50 * @free: The amount of free memory in the pool
  51 */
  52struct vio_cmo_pool {
  53	size_t size;
  54	size_t free;
  55};
  56
  57/* How many ms to delay queued balance work */
  58#define VIO_CMO_BALANCE_DELAY 100
  59
  60/* Portion out IO memory to CMO devices by this chunk size */
  61#define VIO_CMO_BALANCE_CHUNK 131072
  62
  63/**
  64 * vio_cmo_dev_entry - A device that is CMO-enabled and requires entitlement
  65 *
  66 * @vio_dev: struct vio_dev pointer
  67 * @list: pointer to other devices on bus that are being tracked
  68 */
  69struct vio_cmo_dev_entry {
  70	struct vio_dev *viodev;
  71	struct list_head list;
  72};
  73
  74/**
  75 * vio_cmo - VIO bus accounting structure for CMO entitlement
  76 *
  77 * @lock: spinlock for entire structure
  78 * @balance_q: work queue for balancing system entitlement
  79 * @device_list: list of CMO-enabled devices requiring entitlement
  80 * @entitled: total system entitlement in bytes
  81 * @reserve: pool of memory from which devices reserve entitlement, incl. spare
  82 * @excess: pool of excess entitlement not needed for device reserves or spare
  83 * @spare: IO memory for device hotplug functionality
  84 * @min: minimum necessary for system operation
  85 * @desired: desired memory for system operation
  86 * @curr: bytes currently allocated
  87 * @high: high water mark for IO data usage
  88 */
  89static struct vio_cmo {
  90	spinlock_t lock;
  91	struct delayed_work balance_q;
  92	struct list_head device_list;
  93	size_t entitled;
  94	struct vio_cmo_pool reserve;
  95	struct vio_cmo_pool excess;
  96	size_t spare;
  97	size_t min;
  98	size_t desired;
  99	size_t curr;
 100	size_t high;
 101} vio_cmo;
 102
 103/**
 104 * vio_cmo_OF_devices - Count the number of OF devices that have DMA windows
 105 */
 106static int vio_cmo_num_OF_devs(void)
 107{
 108	struct device_node *node_vroot;
 109	int count = 0;
 110
 111	/*
 112	 * Count the number of vdevice entries with an
 113	 * ibm,my-dma-window OF property
 114	 */
 115	node_vroot = of_find_node_by_name(NULL, "vdevice");
 116	if (node_vroot) {
 117		struct device_node *of_node;
 118		struct property *prop;
 119
 120		for_each_child_of_node(node_vroot, of_node) {
 121			prop = of_find_property(of_node, "ibm,my-dma-window",
 122			                       NULL);
 123			if (prop)
 124				count++;
 125		}
 126	}
 127	of_node_put(node_vroot);
 128	return count;
 129}
 130
 131/**
 132 * vio_cmo_alloc - allocate IO memory for CMO-enable devices
 133 *
 134 * @viodev: VIO device requesting IO memory
 135 * @size: size of allocation requested
 136 *
 137 * Allocations come from memory reserved for the devices and any excess
 138 * IO memory available to all devices.  The spare pool used to service
 139 * hotplug must be equal to %VIO_CMO_MIN_ENT for the excess pool to be
 140 * made available.
 141 *
 142 * Return codes:
 143 *  0 for successful allocation and -ENOMEM for a failure
 144 */
 145static inline int vio_cmo_alloc(struct vio_dev *viodev, size_t size)
 146{
 147	unsigned long flags;
 148	size_t reserve_free = 0;
 149	size_t excess_free = 0;
 150	int ret = -ENOMEM;
 151
 152	spin_lock_irqsave(&vio_cmo.lock, flags);
 153
 154	/* Determine the amount of free entitlement available in reserve */
 155	if (viodev->cmo.entitled > viodev->cmo.allocated)
 156		reserve_free = viodev->cmo.entitled - viodev->cmo.allocated;
 157
 158	/* If spare is not fulfilled, the excess pool can not be used. */
 159	if (vio_cmo.spare >= VIO_CMO_MIN_ENT)
 160		excess_free = vio_cmo.excess.free;
 161
 162	/* The request can be satisfied */
 163	if ((reserve_free + excess_free) >= size) {
 164		vio_cmo.curr += size;
 165		if (vio_cmo.curr > vio_cmo.high)
 166			vio_cmo.high = vio_cmo.curr;
 167		viodev->cmo.allocated += size;
 168		size -= min(reserve_free, size);
 169		vio_cmo.excess.free -= size;
 170		ret = 0;
 171	}
 172
 173	spin_unlock_irqrestore(&vio_cmo.lock, flags);
 174	return ret;
 175}
 176
 177/**
 178 * vio_cmo_dealloc - deallocate IO memory from CMO-enable devices
 179 * @viodev: VIO device freeing IO memory
 180 * @size: size of deallocation
 181 *
 182 * IO memory is freed by the device back to the correct memory pools.
 183 * The spare pool is replenished first from either memory pool, then
 184 * the reserve pool is used to reduce device entitlement, the excess
 185 * pool is used to increase the reserve pool toward the desired entitlement
 186 * target, and then the remaining memory is returned to the pools.
 187 *
 188 */
 189static inline void vio_cmo_dealloc(struct vio_dev *viodev, size_t size)
 190{
 191	unsigned long flags;
 192	size_t spare_needed = 0;
 193	size_t excess_freed = 0;
 194	size_t reserve_freed = size;
 195	size_t tmp;
 196	int balance = 0;
 197
 198	spin_lock_irqsave(&vio_cmo.lock, flags);
 199	vio_cmo.curr -= size;
 200
 201	/* Amount of memory freed from the excess pool */
 202	if (viodev->cmo.allocated > viodev->cmo.entitled) {
 203		excess_freed = min(reserve_freed, (viodev->cmo.allocated -
 204		                                   viodev->cmo.entitled));
 205		reserve_freed -= excess_freed;
 206	}
 207
 208	/* Remove allocation from device */
 209	viodev->cmo.allocated -= (reserve_freed + excess_freed);
 210
 211	/* Spare is a subset of the reserve pool, replenish it first. */
 212	spare_needed = VIO_CMO_MIN_ENT - vio_cmo.spare;
 213
 214	/*
 215	 * Replenish the spare in the reserve pool from the excess pool.
 216	 * This moves entitlement into the reserve pool.
 217	 */
 218	if (spare_needed && excess_freed) {
 219		tmp = min(excess_freed, spare_needed);
 220		vio_cmo.excess.size -= tmp;
 221		vio_cmo.reserve.size += tmp;
 222		vio_cmo.spare += tmp;
 223		excess_freed -= tmp;
 224		spare_needed -= tmp;
 225		balance = 1;
 226	}
 227
 228	/*
 229	 * Replenish the spare in the reserve pool from the reserve pool.
 230	 * This removes entitlement from the device down to VIO_CMO_MIN_ENT,
 231	 * if needed, and gives it to the spare pool. The amount of used
 232	 * memory in this pool does not change.
 233	 */
 234	if (spare_needed && reserve_freed) {
 235		tmp = min3(spare_needed, reserve_freed, (viodev->cmo.entitled - VIO_CMO_MIN_ENT));
 236
 237		vio_cmo.spare += tmp;
 238		viodev->cmo.entitled -= tmp;
 239		reserve_freed -= tmp;
 240		spare_needed -= tmp;
 241		balance = 1;
 242	}
 243
 244	/*
 245	 * Increase the reserve pool until the desired allocation is met.
 246	 * Move an allocation freed from the excess pool into the reserve
 247	 * pool and schedule a balance operation.
 248	 */
 249	if (excess_freed && (vio_cmo.desired > vio_cmo.reserve.size)) {
 250		tmp = min(excess_freed, (vio_cmo.desired - vio_cmo.reserve.size));
 251
 252		vio_cmo.excess.size -= tmp;
 253		vio_cmo.reserve.size += tmp;
 254		excess_freed -= tmp;
 255		balance = 1;
 256	}
 257
 258	/* Return memory from the excess pool to that pool */
 259	if (excess_freed)
 260		vio_cmo.excess.free += excess_freed;
 261
 262	if (balance)
 263		schedule_delayed_work(&vio_cmo.balance_q, VIO_CMO_BALANCE_DELAY);
 264	spin_unlock_irqrestore(&vio_cmo.lock, flags);
 265}
 266
 267/**
 268 * vio_cmo_entitlement_update - Manage system entitlement changes
 269 *
 270 * @new_entitlement: new system entitlement to attempt to accommodate
 271 *
 272 * Increases in entitlement will be used to fulfill the spare entitlement
 273 * and the rest is given to the excess pool.  Decreases, if they are
 274 * possible, come from the excess pool and from unused device entitlement
 275 *
 276 * Returns: 0 on success, -ENOMEM when change can not be made
 277 */
 278int vio_cmo_entitlement_update(size_t new_entitlement)
 279{
 280	struct vio_dev *viodev;
 281	struct vio_cmo_dev_entry *dev_ent;
 282	unsigned long flags;
 283	size_t avail, delta, tmp;
 284
 285	spin_lock_irqsave(&vio_cmo.lock, flags);
 286
 287	/* Entitlement increases */
 288	if (new_entitlement > vio_cmo.entitled) {
 289		delta = new_entitlement - vio_cmo.entitled;
 290
 291		/* Fulfill spare allocation */
 292		if (vio_cmo.spare < VIO_CMO_MIN_ENT) {
 293			tmp = min(delta, (VIO_CMO_MIN_ENT - vio_cmo.spare));
 294			vio_cmo.spare += tmp;
 295			vio_cmo.reserve.size += tmp;
 296			delta -= tmp;
 297		}
 298
 299		/* Remaining new allocation goes to the excess pool */
 300		vio_cmo.entitled += delta;
 301		vio_cmo.excess.size += delta;
 302		vio_cmo.excess.free += delta;
 303
 304		goto out;
 305	}
 306
 307	/* Entitlement decreases */
 308	delta = vio_cmo.entitled - new_entitlement;
 309	avail = vio_cmo.excess.free;
 310
 311	/*
 312	 * Need to check how much unused entitlement each device can
 313	 * sacrifice to fulfill entitlement change.
 314	 */
 315	list_for_each_entry(dev_ent, &vio_cmo.device_list, list) {
 316		if (avail >= delta)
 317			break;
 318
 319		viodev = dev_ent->viodev;
 320		if ((viodev->cmo.entitled > viodev->cmo.allocated) &&
 321		    (viodev->cmo.entitled > VIO_CMO_MIN_ENT))
 322				avail += viodev->cmo.entitled -
 323				         max_t(size_t, viodev->cmo.allocated,
 324				               VIO_CMO_MIN_ENT);
 325	}
 326
 327	if (delta <= avail) {
 328		vio_cmo.entitled -= delta;
 329
 330		/* Take entitlement from the excess pool first */
 331		tmp = min(vio_cmo.excess.free, delta);
 332		vio_cmo.excess.size -= tmp;
 333		vio_cmo.excess.free -= tmp;
 334		delta -= tmp;
 335
 336		/*
 337		 * Remove all but VIO_CMO_MIN_ENT bytes from devices
 338		 * until entitlement change is served
 339		 */
 340		list_for_each_entry(dev_ent, &vio_cmo.device_list, list) {
 341			if (!delta)
 342				break;
 343
 344			viodev = dev_ent->viodev;
 345			tmp = 0;
 346			if ((viodev->cmo.entitled > viodev->cmo.allocated) &&
 347			    (viodev->cmo.entitled > VIO_CMO_MIN_ENT))
 348				tmp = viodev->cmo.entitled -
 349				      max_t(size_t, viodev->cmo.allocated,
 350				            VIO_CMO_MIN_ENT);
 351			viodev->cmo.entitled -= min(tmp, delta);
 352			delta -= min(tmp, delta);
 353		}
 354	} else {
 355		spin_unlock_irqrestore(&vio_cmo.lock, flags);
 356		return -ENOMEM;
 357	}
 358
 359out:
 360	schedule_delayed_work(&vio_cmo.balance_q, 0);
 361	spin_unlock_irqrestore(&vio_cmo.lock, flags);
 362	return 0;
 363}
 364
 365/**
 366 * vio_cmo_balance - Balance entitlement among devices
 367 *
 368 * @work: work queue structure for this operation
 369 *
 370 * Any system entitlement above the minimum needed for devices, or
 371 * already allocated to devices, can be distributed to the devices.
 372 * The list of devices is iterated through to recalculate the desired
 373 * entitlement level and to determine how much entitlement above the
 374 * minimum entitlement is allocated to devices.
 375 *
 376 * Small chunks of the available entitlement are given to devices until
 377 * their requirements are fulfilled or there is no entitlement left to give.
 378 * Upon completion sizes of the reserve and excess pools are calculated.
 379 *
 380 * The system minimum entitlement level is also recalculated here.
 381 * Entitlement will be reserved for devices even after vio_bus_remove to
 382 * accommodate reloading the driver.  The OF tree is walked to count the
 383 * number of devices present and this will remove entitlement for devices
 384 * that have actually left the system after having vio_bus_remove called.
 385 */
 386static void vio_cmo_balance(struct work_struct *work)
 387{
 388	struct vio_cmo *cmo;
 389	struct vio_dev *viodev;
 390	struct vio_cmo_dev_entry *dev_ent;
 391	unsigned long flags;
 392	size_t avail = 0, level, chunk, need;
 393	int devcount = 0, fulfilled;
 394
 395	cmo = container_of(work, struct vio_cmo, balance_q.work);
 396
 397	spin_lock_irqsave(&vio_cmo.lock, flags);
 398
 399	/* Calculate minimum entitlement and fulfill spare */
 400	cmo->min = vio_cmo_num_OF_devs() * VIO_CMO_MIN_ENT;
 401	BUG_ON(cmo->min > cmo->entitled);
 402	cmo->spare = min_t(size_t, VIO_CMO_MIN_ENT, (cmo->entitled - cmo->min));
 403	cmo->min += cmo->spare;
 404	cmo->desired = cmo->min;
 405
 406	/*
 407	 * Determine how much entitlement is available and reset device
 408	 * entitlements
 409	 */
 410	avail = cmo->entitled - cmo->spare;
 411	list_for_each_entry(dev_ent, &vio_cmo.device_list, list) {
 412		viodev = dev_ent->viodev;
 413		devcount++;
 414		viodev->cmo.entitled = VIO_CMO_MIN_ENT;
 415		cmo->desired += (viodev->cmo.desired - VIO_CMO_MIN_ENT);
 416		avail -= max_t(size_t, viodev->cmo.allocated, VIO_CMO_MIN_ENT);
 417	}
 418
 419	/*
 420	 * Having provided each device with the minimum entitlement, loop
 421	 * over the devices portioning out the remaining entitlement
 422	 * until there is nothing left.
 423	 */
 424	level = VIO_CMO_MIN_ENT;
 425	while (avail) {
 426		fulfilled = 0;
 427		list_for_each_entry(dev_ent, &vio_cmo.device_list, list) {
 428			viodev = dev_ent->viodev;
 429
 430			if (viodev->cmo.desired <= level) {
 431				fulfilled++;
 432				continue;
 433			}
 434
 435			/*
 436			 * Give the device up to VIO_CMO_BALANCE_CHUNK
 437			 * bytes of entitlement, but do not exceed the
 438			 * desired level of entitlement for the device.
 439			 */
 440			chunk = min_t(size_t, avail, VIO_CMO_BALANCE_CHUNK);
 441			chunk = min(chunk, (viodev->cmo.desired -
 442			                    viodev->cmo.entitled));
 443			viodev->cmo.entitled += chunk;
 444
 445			/*
 446			 * If the memory for this entitlement increase was
 447			 * already allocated to the device it does not come
 448			 * from the available pool being portioned out.
 449			 */
 450			need = max(viodev->cmo.allocated, viodev->cmo.entitled)-
 451			       max(viodev->cmo.allocated, level);
 452			avail -= need;
 453
 454		}
 455		if (fulfilled == devcount)
 456			break;
 457		level += VIO_CMO_BALANCE_CHUNK;
 458	}
 459
 460	/* Calculate new reserve and excess pool sizes */
 461	cmo->reserve.size = cmo->min;
 462	cmo->excess.free = 0;
 463	cmo->excess.size = 0;
 464	need = 0;
 465	list_for_each_entry(dev_ent, &vio_cmo.device_list, list) {
 466		viodev = dev_ent->viodev;
 467		/* Calculated reserve size above the minimum entitlement */
 468		if (viodev->cmo.entitled)
 469			cmo->reserve.size += (viodev->cmo.entitled -
 470			                      VIO_CMO_MIN_ENT);
 471		/* Calculated used excess entitlement */
 472		if (viodev->cmo.allocated > viodev->cmo.entitled)
 473			need += viodev->cmo.allocated - viodev->cmo.entitled;
 474	}
 475	cmo->excess.size = cmo->entitled - cmo->reserve.size;
 476	cmo->excess.free = cmo->excess.size - need;
 477
 478	cancel_delayed_work(to_delayed_work(work));
 479	spin_unlock_irqrestore(&vio_cmo.lock, flags);
 480}
 481
 482static void *vio_dma_iommu_alloc_coherent(struct device *dev, size_t size,
 483					  dma_addr_t *dma_handle, gfp_t flag,
 484					  unsigned long attrs)
 485{
 486	struct vio_dev *viodev = to_vio_dev(dev);
 487	void *ret;
 488
 489	if (vio_cmo_alloc(viodev, roundup(size, PAGE_SIZE))) {
 490		atomic_inc(&viodev->cmo.allocs_failed);
 491		return NULL;
 492	}
 493
 494	ret = iommu_alloc_coherent(dev, get_iommu_table_base(dev), size,
 495				    dma_handle, dev->coherent_dma_mask, flag,
 496				    dev_to_node(dev));
 497	if (unlikely(ret == NULL)) {
 498		vio_cmo_dealloc(viodev, roundup(size, PAGE_SIZE));
 499		atomic_inc(&viodev->cmo.allocs_failed);
 500	}
 501
 502	return ret;
 503}
 504
 505static void vio_dma_iommu_free_coherent(struct device *dev, size_t size,
 506					void *vaddr, dma_addr_t dma_handle,
 507					unsigned long attrs)
 508{
 509	struct vio_dev *viodev = to_vio_dev(dev);
 510
 511	iommu_free_coherent(get_iommu_table_base(dev), size, vaddr, dma_handle);
 512	vio_cmo_dealloc(viodev, roundup(size, PAGE_SIZE));
 513}
 514
 515static dma_addr_t vio_dma_iommu_map_phys(struct device *dev, phys_addr_t phys,
 516					 size_t size,
 517					 enum dma_data_direction direction,
 518					 unsigned long attrs)
 519{
 520	struct vio_dev *viodev = to_vio_dev(dev);
 521	struct iommu_table *tbl = get_iommu_table_base(dev);
 522	dma_addr_t ret = DMA_MAPPING_ERROR;
 523
 524	if (unlikely(attrs & DMA_ATTR_MMIO))
 525		return ret;
 526
 527	if (vio_cmo_alloc(viodev, roundup(size, IOMMU_PAGE_SIZE(tbl))))
 528		goto out_fail;
 529	ret = iommu_map_phys(dev, tbl, phys, size, dma_get_mask(dev),
 530			direction, attrs);
 531	if (unlikely(ret == DMA_MAPPING_ERROR))
 532		goto out_deallocate;
 533	return ret;
 534
 535out_deallocate:
 536	vio_cmo_dealloc(viodev, roundup(size, IOMMU_PAGE_SIZE(tbl)));
 537out_fail:
 538	atomic_inc(&viodev->cmo.allocs_failed);
 539	return DMA_MAPPING_ERROR;
 540}
 541
 542static void vio_dma_iommu_unmap_phys(struct device *dev, dma_addr_t dma_handle,
 543				     size_t size,
 544				     enum dma_data_direction direction,
 545				     unsigned long attrs)
 546{
 547	struct vio_dev *viodev = to_vio_dev(dev);
 548	struct iommu_table *tbl = get_iommu_table_base(dev);
 549
 550	iommu_unmap_phys(tbl, dma_handle, size, direction, attrs);
 551	vio_cmo_dealloc(viodev, roundup(size, IOMMU_PAGE_SIZE(tbl)));
 552}
 553
 554static int vio_dma_iommu_map_sg(struct device *dev, struct scatterlist *sglist,
 555                                int nelems, enum dma_data_direction direction,
 556                                unsigned long attrs)
 557{
 558	struct vio_dev *viodev = to_vio_dev(dev);
 559	struct iommu_table *tbl = get_iommu_table_base(dev);
 560	struct scatterlist *sgl;
 561	int ret, count;
 562	size_t alloc_size = 0;
 563
 564	for_each_sg(sglist, sgl, nelems, count)
 565		alloc_size += roundup(sgl->length, IOMMU_PAGE_SIZE(tbl));
 566
 567	ret = vio_cmo_alloc(viodev, alloc_size);
 568	if (ret)
 569		goto out_fail;
 570	ret = ppc_iommu_map_sg(dev, tbl, sglist, nelems, dma_get_mask(dev),
 571			direction, attrs);
 572	if (unlikely(!ret))
 573		goto out_deallocate;
 574
 575	for_each_sg(sglist, sgl, ret, count)
 576		alloc_size -= roundup(sgl->dma_length, IOMMU_PAGE_SIZE(tbl));
 577	if (alloc_size)
 578		vio_cmo_dealloc(viodev, alloc_size);
 579	return ret;
 580
 581out_deallocate:
 582	vio_cmo_dealloc(viodev, alloc_size);
 583out_fail:
 584	atomic_inc(&viodev->cmo.allocs_failed);
 585	return ret;
 586}
 587
 588static void vio_dma_iommu_unmap_sg(struct device *dev,
 589		struct scatterlist *sglist, int nelems,
 590		enum dma_data_direction direction,
 591		unsigned long attrs)
 592{
 593	struct vio_dev *viodev = to_vio_dev(dev);
 594	struct iommu_table *tbl = get_iommu_table_base(dev);
 595	struct scatterlist *sgl;
 596	size_t alloc_size = 0;
 597	int count;
 598
 599	for_each_sg(sglist, sgl, nelems, count)
 600		alloc_size += roundup(sgl->dma_length, IOMMU_PAGE_SIZE(tbl));
 601
 602	ppc_iommu_unmap_sg(tbl, sglist, nelems, direction, attrs);
 603	vio_cmo_dealloc(viodev, alloc_size);
 604}
 605
 606static const struct dma_map_ops vio_dma_mapping_ops = {
 607	.alloc             = vio_dma_iommu_alloc_coherent,
 608	.free              = vio_dma_iommu_free_coherent,
 609	.map_sg            = vio_dma_iommu_map_sg,
 610	.unmap_sg          = vio_dma_iommu_unmap_sg,
 611	.map_phys          = vio_dma_iommu_map_phys,
 612	.unmap_phys        = vio_dma_iommu_unmap_phys,
 613	.dma_supported     = dma_iommu_dma_supported,
 614	.get_required_mask = dma_iommu_get_required_mask,
 615	.mmap		   = dma_common_mmap,
 616	.get_sgtable	   = dma_common_get_sgtable,
 617	.alloc_pages_op	   = dma_common_alloc_pages,
 618	.free_pages	   = dma_common_free_pages,
 619};
 620
 621/**
 622 * vio_cmo_set_dev_desired - Set desired entitlement for a device
 623 *
 624 * @viodev: struct vio_dev for device to alter
 625 * @desired: new desired entitlement level in bytes
 626 *
 627 * For use by devices to request a change to their entitlement at runtime or
 628 * through sysfs.  The desired entitlement level is changed and a balancing
 629 * of system resources is scheduled to run in the future.
 630 */
 631void vio_cmo_set_dev_desired(struct vio_dev *viodev, size_t desired)
 632{
 633	unsigned long flags;
 634	struct vio_cmo_dev_entry *dev_ent;
 635	int found = 0;
 636
 637	if (!firmware_has_feature(FW_FEATURE_CMO))
 638		return;
 639
 640	spin_lock_irqsave(&vio_cmo.lock, flags);
 641	if (desired < VIO_CMO_MIN_ENT)
 642		desired = VIO_CMO_MIN_ENT;
 643
 644	/*
 645	 * Changes will not be made for devices not in the device list.
 646	 * If it is not in the device list, then no driver is loaded
 647	 * for the device and it can not receive entitlement.
 648	 */
 649	list_for_each_entry(dev_ent, &vio_cmo.device_list, list)
 650		if (viodev == dev_ent->viodev) {
 651			found = 1;
 652			break;
 653		}
 654	if (!found) {
 655		spin_unlock_irqrestore(&vio_cmo.lock, flags);
 656		return;
 657	}
 658
 659	/* Increase/decrease in desired device entitlement */
 660	if (desired >= viodev->cmo.desired) {
 661		/* Just bump the bus and device values prior to a balance*/
 662		vio_cmo.desired += desired - viodev->cmo.desired;
 663		viodev->cmo.desired = desired;
 664	} else {
 665		/* Decrease bus and device values for desired entitlement */
 666		vio_cmo.desired -= viodev->cmo.desired - desired;
 667		viodev->cmo.desired = desired;
 668		/*
 669		 * If less entitlement is desired than current entitlement, move
 670		 * any reserve memory in the change region to the excess pool.
 671		 */
 672		if (viodev->cmo.entitled > desired) {
 673			vio_cmo.reserve.size -= viodev->cmo.entitled - desired;
 674			vio_cmo.excess.size += viodev->cmo.entitled - desired;
 675			/*
 676			 * If entitlement moving from the reserve pool to the
 677			 * excess pool is currently unused, add to the excess
 678			 * free counter.
 679			 */
 680			if (viodev->cmo.allocated < viodev->cmo.entitled)
 681				vio_cmo.excess.free += viodev->cmo.entitled -
 682				                       max(viodev->cmo.allocated, desired);
 683			viodev->cmo.entitled = desired;
 684		}
 685	}
 686	schedule_delayed_work(&vio_cmo.balance_q, 0);
 687	spin_unlock_irqrestore(&vio_cmo.lock, flags);
 688}
 689
 690/**
 691 * vio_cmo_bus_probe - Handle CMO specific bus probe activities
 692 *
 693 * @viodev - Pointer to struct vio_dev for device
 694 *
 695 * Determine the devices IO memory entitlement needs, attempting
 696 * to satisfy the system minimum entitlement at first and scheduling
 697 * a balance operation to take care of the rest at a later time.
 698 *
 699 * Returns: 0 on success, -EINVAL when device doesn't support CMO, and
 700 *          -ENOMEM when entitlement is not available for device or
 701 *          device entry.
 702 *
 703 */
 704static int vio_cmo_bus_probe(struct vio_dev *viodev)
 705{
 706	struct vio_cmo_dev_entry *dev_ent;
 707	struct device *dev = &viodev->dev;
 708	struct iommu_table *tbl;
 709	struct vio_driver *viodrv = to_vio_driver(dev->driver);
 710	unsigned long flags;
 711	size_t size;
 712	bool dma_capable = false;
 713
 714	tbl = get_iommu_table_base(dev);
 715
 716	/* A device requires entitlement if it has a DMA window property */
 717	switch (viodev->family) {
 718	case VDEVICE:
 719		if (of_get_property(viodev->dev.of_node,
 720					"ibm,my-dma-window", NULL))
 721			dma_capable = true;
 722		break;
 723	case PFO:
 724		dma_capable = false;
 725		break;
 726	default:
 727		dev_warn(dev, "unknown device family: %d\n", viodev->family);
 728		BUG();
 729		break;
 730	}
 731
 732	/* Configure entitlement for the device. */
 733	if (dma_capable) {
 734		/* Check that the driver is CMO enabled and get desired DMA */
 735		if (!viodrv->get_desired_dma) {
 736			dev_err(dev, "%s: device driver does not support CMO\n",
 737			        __func__);
 738			return -EINVAL;
 739		}
 740
 741		viodev->cmo.desired =
 742			IOMMU_PAGE_ALIGN(viodrv->get_desired_dma(viodev), tbl);
 743		if (viodev->cmo.desired < VIO_CMO_MIN_ENT)
 744			viodev->cmo.desired = VIO_CMO_MIN_ENT;
 745		size = VIO_CMO_MIN_ENT;
 746
 747		dev_ent = kmalloc(sizeof(struct vio_cmo_dev_entry),
 748		                  GFP_KERNEL);
 749		if (!dev_ent)
 750			return -ENOMEM;
 751
 752		dev_ent->viodev = viodev;
 753		spin_lock_irqsave(&vio_cmo.lock, flags);
 754		list_add(&dev_ent->list, &vio_cmo.device_list);
 755	} else {
 756		viodev->cmo.desired = 0;
 757		size = 0;
 758		spin_lock_irqsave(&vio_cmo.lock, flags);
 759	}
 760
 761	/*
 762	 * If the needs for vio_cmo.min have not changed since they
 763	 * were last set, the number of devices in the OF tree has
 764	 * been constant and the IO memory for this is already in
 765	 * the reserve pool.
 766	 */
 767	if (vio_cmo.min == ((vio_cmo_num_OF_devs() + 1) *
 768	                    VIO_CMO_MIN_ENT)) {
 769		/* Updated desired entitlement if device requires it */
 770		if (size)
 771			vio_cmo.desired += (viodev->cmo.desired -
 772		                        VIO_CMO_MIN_ENT);
 773	} else {
 774		size_t tmp;
 775
 776		tmp = vio_cmo.spare + vio_cmo.excess.free;
 777		if (tmp < size) {
 778			dev_err(dev, "%s: insufficient free "
 779			        "entitlement to add device. "
 780			        "Need %lu, have %lu\n", __func__,
 781				size, (vio_cmo.spare + tmp));
 782			spin_unlock_irqrestore(&vio_cmo.lock, flags);
 783			return -ENOMEM;
 784		}
 785
 786		/* Use excess pool first to fulfill request */
 787		tmp = min(size, vio_cmo.excess.free);
 788		vio_cmo.excess.free -= tmp;
 789		vio_cmo.excess.size -= tmp;
 790		vio_cmo.reserve.size += tmp;
 791
 792		/* Use spare if excess pool was insufficient */
 793		vio_cmo.spare -= size - tmp;
 794
 795		/* Update bus accounting */
 796		vio_cmo.min += size;
 797		vio_cmo.desired += viodev->cmo.desired;
 798	}
 799	spin_unlock_irqrestore(&vio_cmo.lock, flags);
 800	return 0;
 801}
 802
 803/**
 804 * vio_cmo_bus_remove - Handle CMO specific bus removal activities
 805 *
 806 * @viodev - Pointer to struct vio_dev for device
 807 *
 808 * Remove the device from the cmo device list.  The minimum entitlement
 809 * will be reserved for the device as long as it is in the system.  The
 810 * rest of the entitlement the device had been allocated will be returned
 811 * to the system.
 812 */
 813static void vio_cmo_bus_remove(struct vio_dev *viodev)
 814{
 815	struct vio_cmo_dev_entry *dev_ent;
 816	unsigned long flags;
 817	size_t tmp;
 818
 819	spin_lock_irqsave(&vio_cmo.lock, flags);
 820	if (viodev->cmo.allocated) {
 821		dev_err(&viodev->dev, "%s: device had %lu bytes of IO "
 822		        "allocated after remove operation.\n",
 823		        __func__, viodev->cmo.allocated);
 824		BUG();
 825	}
 826
 827	/*
 828	 * Remove the device from the device list being maintained for
 829	 * CMO enabled devices.
 830	 */
 831	list_for_each_entry(dev_ent, &vio_cmo.device_list, list)
 832		if (viodev == dev_ent->viodev) {
 833			list_del(&dev_ent->list);
 834			kfree(dev_ent);
 835			break;
 836		}
 837
 838	/*
 839	 * Devices may not require any entitlement and they do not need
 840	 * to be processed.  Otherwise, return the device's entitlement
 841	 * back to the pools.
 842	 */
 843	if (viodev->cmo.entitled) {
 844		/*
 845		 * This device has not yet left the OF tree, it's
 846		 * minimum entitlement remains in vio_cmo.min and
 847		 * vio_cmo.desired
 848		 */
 849		vio_cmo.desired -= (viodev->cmo.desired - VIO_CMO_MIN_ENT);
 850
 851		/*
 852		 * Save min allocation for device in reserve as long
 853		 * as it exists in OF tree as determined by later
 854		 * balance operation
 855		 */
 856		viodev->cmo.entitled -= VIO_CMO_MIN_ENT;
 857
 858		/* Replenish spare from freed reserve pool */
 859		if (viodev->cmo.entitled && (vio_cmo.spare < VIO_CMO_MIN_ENT)) {
 860			tmp = min(viodev->cmo.entitled, (VIO_CMO_MIN_ENT -
 861			                                 vio_cmo.spare));
 862			vio_cmo.spare += tmp;
 863			viodev->cmo.entitled -= tmp;
 864		}
 865
 866		/* Remaining reserve goes to excess pool */
 867		vio_cmo.excess.size += viodev->cmo.entitled;
 868		vio_cmo.excess.free += viodev->cmo.entitled;
 869		vio_cmo.reserve.size -= viodev->cmo.entitled;
 870
 871		/*
 872		 * Until the device is removed it will keep a
 873		 * minimum entitlement; this will guarantee that
 874		 * a module unload/load will result in a success.
 875		 */
 876		viodev->cmo.entitled = VIO_CMO_MIN_ENT;
 877		viodev->cmo.desired = VIO_CMO_MIN_ENT;
 878		atomic_set(&viodev->cmo.allocs_failed, 0);
 879	}
 880
 881	spin_unlock_irqrestore(&vio_cmo.lock, flags);
 882}
 883
 884static void vio_cmo_set_dma_ops(struct vio_dev *viodev)
 885{
 886	set_dma_ops(&viodev->dev, &vio_dma_mapping_ops);
 887}
 888
 889/**
 890 * vio_cmo_bus_init - CMO entitlement initialization at bus init time
 891 *
 892 * Set up the reserve and excess entitlement pools based on available
 893 * system entitlement and the number of devices in the OF tree that
 894 * require entitlement in the reserve pool.
 895 */
 896static void vio_cmo_bus_init(void)
 897{
 898	struct hvcall_mpp_data mpp_data;
 899	int err;
 900
 901	memset(&vio_cmo, 0, sizeof(struct vio_cmo));
 902	spin_lock_init(&vio_cmo.lock);
 903	INIT_LIST_HEAD(&vio_cmo.device_list);
 904	INIT_DELAYED_WORK(&vio_cmo.balance_q, vio_cmo_balance);
 905
 906	/* Get current system entitlement */
 907	err = h_get_mpp(&mpp_data);
 908
 909	/*
 910	 * On failure, continue with entitlement set to 0, will panic()
 911	 * later when spare is reserved.
 912	 */
 913	if (err != H_SUCCESS) {
 914		printk(KERN_ERR "%s: unable to determine system IO "\
 915		       "entitlement. (%d)\n", __func__, err);
 916		vio_cmo.entitled = 0;
 917	} else {
 918		vio_cmo.entitled = mpp_data.entitled_mem;
 919	}
 920
 921	/* Set reservation and check against entitlement */
 922	vio_cmo.spare = VIO_CMO_MIN_ENT;
 923	vio_cmo.reserve.size = vio_cmo.spare;
 924	vio_cmo.reserve.size += (vio_cmo_num_OF_devs() *
 925	                         VIO_CMO_MIN_ENT);
 926	if (vio_cmo.reserve.size > vio_cmo.entitled) {
 927		printk(KERN_ERR "%s: insufficient system entitlement\n",
 928		       __func__);
 929		panic("%s: Insufficient system entitlement", __func__);
 930	}
 931
 932	/* Set the remaining accounting variables */
 933	vio_cmo.excess.size = vio_cmo.entitled - vio_cmo.reserve.size;
 934	vio_cmo.excess.free = vio_cmo.excess.size;
 935	vio_cmo.min = vio_cmo.reserve.size;
 936	vio_cmo.desired = vio_cmo.reserve.size;
 937}
 938
 939/* sysfs device functions and data structures for CMO */
 940
 941#define viodev_cmo_rd_attr(name)                                        \
 942static ssize_t cmo_##name##_show(struct device *dev,                    \
 943                                        struct device_attribute *attr,  \
 944                                         char *buf)                     \
 945{                                                                       \
 946	return sprintf(buf, "%lu\n", to_vio_dev(dev)->cmo.name);        \
 947}
 948
 949static ssize_t cmo_allocs_failed_show(struct device *dev,
 950		struct device_attribute *attr, char *buf)
 951{
 952	struct vio_dev *viodev = to_vio_dev(dev);
 953	return sprintf(buf, "%d\n", atomic_read(&viodev->cmo.allocs_failed));
 954}
 955
 956static ssize_t cmo_allocs_failed_store(struct device *dev,
 957		struct device_attribute *attr, const char *buf, size_t count)
 958{
 959	struct vio_dev *viodev = to_vio_dev(dev);
 960	atomic_set(&viodev->cmo.allocs_failed, 0);
 961	return count;
 962}
 963
 964static ssize_t cmo_desired_store(struct device *dev,
 965		struct device_attribute *attr, const char *buf, size_t count)
 966{
 967	struct vio_dev *viodev = to_vio_dev(dev);
 968	size_t new_desired;
 969	int ret;
 970
 971	ret = kstrtoul(buf, 10, &new_desired);
 972	if (ret)
 973		return ret;
 974
 975	vio_cmo_set_dev_desired(viodev, new_desired);
 976	return count;
 977}
 978
 979viodev_cmo_rd_attr(desired);
 980viodev_cmo_rd_attr(entitled);
 981viodev_cmo_rd_attr(allocated);
 982
 983static ssize_t name_show(struct device *, struct device_attribute *, char *);
 984static ssize_t devspec_show(struct device *, struct device_attribute *, char *);
 985static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,
 986			     char *buf);
 987
 988static struct device_attribute dev_attr_name;
 989static struct device_attribute dev_attr_devspec;
 990static struct device_attribute dev_attr_modalias;
 991
 992static DEVICE_ATTR_RO(cmo_entitled);
 993static DEVICE_ATTR_RO(cmo_allocated);
 994static DEVICE_ATTR_RW(cmo_desired);
 995static DEVICE_ATTR_RW(cmo_allocs_failed);
 996
 997/* sysfs bus functions and data structures for CMO */
 998
 999#define viobus_cmo_rd_attr(name)                                        \
1000static ssize_t cmo_bus_##name##_show(const struct bus_type *bt, char *buf)    \
1001{                                                                       \
1002	return sprintf(buf, "%lu\n", vio_cmo.name);                     \
1003}                                                                       \
1004static struct bus_attribute bus_attr_cmo_bus_##name =			\
1005	__ATTR(cmo_##name, S_IRUGO, cmo_bus_##name##_show, NULL)
1006
1007#define viobus_cmo_pool_rd_attr(name, var)                              \
1008static ssize_t                                                          \
1009cmo_##name##_##var##_show(const struct bus_type *bt, char *buf)         \
1010{                                                                       \
1011	return sprintf(buf, "%lu\n", vio_cmo.name.var);                 \
1012}                                                                       \
1013static BUS_ATTR_RO(cmo_##name##_##var)
1014
1015viobus_cmo_rd_attr(entitled);
1016viobus_cmo_rd_attr(spare);
1017viobus_cmo_rd_attr(min);
1018viobus_cmo_rd_attr(desired);
1019viobus_cmo_rd_attr(curr);
1020viobus_cmo_pool_rd_attr(reserve, size);
1021viobus_cmo_pool_rd_attr(excess, size);
1022viobus_cmo_pool_rd_attr(excess, free);
1023
1024static ssize_t cmo_high_show(const struct bus_type *bt, char *buf)
1025{
1026	return sprintf(buf, "%lu\n", vio_cmo.high);
1027}
1028
1029static ssize_t cmo_high_store(const struct bus_type *bt, const char *buf,
1030			      size_t count)
1031{
1032	unsigned long flags;
1033
1034	spin_lock_irqsave(&vio_cmo.lock, flags);
1035	vio_cmo.high = vio_cmo.curr;
1036	spin_unlock_irqrestore(&vio_cmo.lock, flags);
1037
1038	return count;
1039}
1040static BUS_ATTR_RW(cmo_high);
1041
1042static struct attribute *vio_bus_attrs[] = {
1043	&bus_attr_cmo_bus_entitled.attr,
1044	&bus_attr_cmo_bus_spare.attr,
1045	&bus_attr_cmo_bus_min.attr,
1046	&bus_attr_cmo_bus_desired.attr,
1047	&bus_attr_cmo_bus_curr.attr,
1048	&bus_attr_cmo_high.attr,
1049	&bus_attr_cmo_reserve_size.attr,
1050	&bus_attr_cmo_excess_size.attr,
1051	&bus_attr_cmo_excess_free.attr,
1052	NULL,
1053};
1054ATTRIBUTE_GROUPS(vio_bus);
1055
1056static void __init vio_cmo_sysfs_init(void) { }
1057#else /* CONFIG_PPC_SMLPAR */
1058int vio_cmo_entitlement_update(size_t new_entitlement) { return 0; }
1059void vio_cmo_set_dev_desired(struct vio_dev *viodev, size_t desired) {}
1060static int vio_cmo_bus_probe(struct vio_dev *viodev) { return 0; }
1061static void vio_cmo_bus_remove(struct vio_dev *viodev) {}
1062static void vio_cmo_set_dma_ops(struct vio_dev *viodev) {}
1063static void vio_cmo_bus_init(void) {}
1064static void __init vio_cmo_sysfs_init(void) { }
1065#endif /* CONFIG_PPC_SMLPAR */
1066EXPORT_SYMBOL(vio_cmo_entitlement_update);
1067EXPORT_SYMBOL(vio_cmo_set_dev_desired);
1068
1069
1070/*
1071 * Platform Facilities Option (PFO) support
1072 */
1073
1074/**
1075 * vio_h_cop_sync - Perform a synchronous PFO co-processor operation
1076 *
1077 * @vdev - Pointer to a struct vio_dev for device
1078 * @op - Pointer to a struct vio_pfo_op for the operation parameters
1079 *
1080 * Calls the hypervisor to synchronously perform the PFO operation
1081 * described in @op.  In the case of a busy response from the hypervisor,
1082 * the operation will be re-submitted indefinitely unless a non-zero timeout
1083 * is specified or an error occurs. The timeout places a limit on when to
1084 * stop re-submitting a operation, the total time can be exceeded if an
1085 * operation is in progress.
1086 *
1087 * If op->hcall_ret is not NULL, this will be set to the return from the
1088 * last h_cop_op call or it will be 0 if an error not involving the h_call
1089 * was encountered.
1090 *
1091 * Returns:
1092 *	0 on success,
1093 *	-EINVAL if the h_call fails due to an invalid parameter,
1094 *	-E2BIG if the h_call can not be performed synchronously,
1095 *	-EBUSY if a timeout is specified and has elapsed,
1096 *	-EACCES if the memory area for data/status has been rescinded, or
1097 *	-EPERM if a hardware fault has been indicated
1098 */
1099int vio_h_cop_sync(struct vio_dev *vdev, struct vio_pfo_op *op)
1100{
1101	struct device *dev = &vdev->dev;
1102	unsigned long deadline = 0;
1103	long hret = 0;
1104	int ret = 0;
1105
1106	if (op->timeout)
1107		deadline = jiffies + msecs_to_jiffies(op->timeout);
1108
1109	while (true) {
1110		hret = plpar_hcall_norets(H_COP, op->flags,
1111				vdev->resource_id,
1112				op->in, op->inlen, op->out,
1113				op->outlen, op->csbcpb);
1114
1115		if (hret == H_SUCCESS ||
1116		    (hret != H_NOT_ENOUGH_RESOURCES &&
1117		     hret != H_BUSY && hret != H_RESOURCE) ||
1118		    (op->timeout && time_after(deadline, jiffies)))
1119			break;
1120
1121		dev_dbg(dev, "%s: hcall ret(%ld), retrying.\n", __func__, hret);
1122	}
1123
1124	switch (hret) {
1125	case H_SUCCESS:
1126		ret = 0;
1127		break;
1128	case H_OP_MODE:
1129	case H_TOO_BIG:
1130		ret = -E2BIG;
1131		break;
1132	case H_RESCINDED:
1133		ret = -EACCES;
1134		break;
1135	case H_HARDWARE:
1136		ret = -EPERM;
1137		break;
1138	case H_NOT_ENOUGH_RESOURCES:
1139	case H_RESOURCE:
1140	case H_BUSY:
1141		ret = -EBUSY;
1142		break;
1143	default:
1144		ret = -EINVAL;
1145		break;
1146	}
1147
1148	if (ret)
1149		dev_dbg(dev, "%s: Sync h_cop_op failure (ret:%d) (hret:%ld)\n",
1150				__func__, ret, hret);
1151
1152	op->hcall_err = hret;
1153	return ret;
1154}
1155EXPORT_SYMBOL(vio_h_cop_sync);
1156
1157static struct iommu_table *vio_build_iommu_table(struct vio_dev *dev)
1158{
1159	const __be32 *dma_window;
1160	struct iommu_table *tbl;
1161	unsigned long offset, size;
1162
1163	dma_window = of_get_property(dev->dev.of_node,
1164				  "ibm,my-dma-window", NULL);
1165	if (!dma_window)
1166		return NULL;
1167
1168	tbl = kzalloc(sizeof(*tbl), GFP_KERNEL);
1169	if (tbl == NULL)
1170		return NULL;
1171
1172	kref_init(&tbl->it_kref);
1173
1174	of_parse_dma_window(dev->dev.of_node, dma_window,
1175			    &tbl->it_index, &offset, &size);
1176
1177	/* TCE table size - measured in tce entries */
1178	tbl->it_page_shift = IOMMU_PAGE_SHIFT_4K;
1179	tbl->it_size = size >> tbl->it_page_shift;
1180	/* offset for VIO should always be 0 */
1181	tbl->it_offset = offset >> tbl->it_page_shift;
1182	tbl->it_busno = 0;
1183	tbl->it_type = TCE_VB;
1184	tbl->it_blocksize = 16;
1185
1186	if (firmware_has_feature(FW_FEATURE_LPAR))
1187		tbl->it_ops = &iommu_table_lpar_multi_ops;
1188	else
1189		tbl->it_ops = &iommu_table_pseries_ops;
1190
1191	return iommu_init_table(tbl, -1, 0, 0);
1192}
1193
1194/**
1195 * vio_match_device: - Tell if a VIO device has a matching
1196 *			VIO device id structure.
1197 * @ids:	array of VIO device id structures to search in
1198 * @dev:	the VIO device structure to match against
1199 *
1200 * Used by a driver to check whether a VIO device present in the
1201 * system is in its list of supported devices. Returns the matching
1202 * vio_device_id structure or NULL if there is no match.
1203 */
1204static const struct vio_device_id *vio_match_device(
1205		const struct vio_device_id *ids, const struct vio_dev *dev)
1206{
1207	while (ids->type[0] != '\0') {
1208		if ((strncmp(dev->type, ids->type, strlen(ids->type)) == 0) &&
1209		    of_device_is_compatible(dev->dev.of_node,
1210					 ids->compat))
1211			return ids;
1212		ids++;
1213	}
1214	return NULL;
1215}
1216
1217/*
1218 * Convert from struct device to struct vio_dev and pass to driver.
1219 * dev->driver has already been set by generic code because vio_bus_match
1220 * succeeded.
1221 */
1222static int vio_bus_probe(struct device *dev)
1223{
1224	struct vio_dev *viodev = to_vio_dev(dev);
1225	struct vio_driver *viodrv = to_vio_driver(dev->driver);
1226	const struct vio_device_id *id;
1227	int error = -ENODEV;
1228
1229	if (!viodrv->probe)
1230		return error;
1231
1232	id = vio_match_device(viodrv->id_table, viodev);
1233	if (id) {
1234		memset(&viodev->cmo, 0, sizeof(viodev->cmo));
1235		if (firmware_has_feature(FW_FEATURE_CMO)) {
1236			error = vio_cmo_bus_probe(viodev);
1237			if (error)
1238				return error;
1239		}
1240		error = viodrv->probe(viodev, id);
1241		if (error && firmware_has_feature(FW_FEATURE_CMO))
1242			vio_cmo_bus_remove(viodev);
1243	}
1244
1245	return error;
1246}
1247
1248/* convert from struct device to struct vio_dev and pass to driver. */
1249static void vio_bus_remove(struct device *dev)
1250{
1251	struct vio_dev *viodev = to_vio_dev(dev);
1252	struct vio_driver *viodrv = to_vio_driver(dev->driver);
1253	struct device *devptr;
1254
1255	/*
1256	 * Hold a reference to the device after the remove function is called
1257	 * to allow for CMO accounting cleanup for the device.
1258	 */
1259	devptr = get_device(dev);
1260
1261	if (viodrv->remove)
1262		viodrv->remove(viodev);
1263
1264	if (firmware_has_feature(FW_FEATURE_CMO))
1265		vio_cmo_bus_remove(viodev);
1266
1267	put_device(devptr);
1268}
1269
1270static void vio_bus_shutdown(struct device *dev)
1271{
1272	struct vio_dev *viodev = to_vio_dev(dev);
1273	struct vio_driver *viodrv;
1274
1275	if (dev->driver) {
1276		viodrv = to_vio_driver(dev->driver);
1277		if (viodrv->shutdown)
1278			viodrv->shutdown(viodev);
1279		else if (kexec_in_progress)
1280			vio_bus_remove(dev);
1281	}
1282}
1283
1284/**
1285 * vio_register_driver: - Register a new vio driver
1286 * @viodrv:	The vio_driver structure to be registered.
1287 */
1288int __vio_register_driver(struct vio_driver *viodrv, struct module *owner,
1289			  const char *mod_name)
1290{
1291	// vio_bus_type is only initialised for pseries
1292	if (!machine_is(pseries))
1293		return -ENODEV;
1294
1295	pr_debug("%s: driver %s registering\n", __func__, viodrv->name);
1296
1297	/* fill in 'struct driver' fields */
1298	viodrv->driver.name = viodrv->name;
1299	viodrv->driver.pm = viodrv->pm;
1300	viodrv->driver.bus = &vio_bus_type;
1301	viodrv->driver.owner = owner;
1302	viodrv->driver.mod_name = mod_name;
1303
1304	return driver_register(&viodrv->driver);
1305}
1306EXPORT_SYMBOL(__vio_register_driver);
1307
1308/**
1309 * vio_unregister_driver - Remove registration of vio driver.
1310 * @viodrv:	The vio_driver struct to be removed form registration
1311 */
1312void vio_unregister_driver(struct vio_driver *viodrv)
1313{
1314	driver_unregister(&viodrv->driver);
1315}
1316EXPORT_SYMBOL(vio_unregister_driver);
1317
1318/* vio_dev refcount hit 0 */
1319static void vio_dev_release(struct device *dev)
1320{
1321	struct iommu_table *tbl = get_iommu_table_base(dev);
1322
1323	if (tbl)
1324		iommu_tce_table_put(tbl);
1325	of_node_put(dev->of_node);
1326	kfree(to_vio_dev(dev));
1327}
1328
1329/**
1330 * vio_register_device_node: - Register a new vio device.
1331 * @of_node:	The OF node for this device.
1332 *
1333 * Creates and initializes a vio_dev structure from the data in
1334 * of_node and adds it to the list of virtual devices.
1335 * Returns a pointer to the created vio_dev or NULL if node has
1336 * NULL device_type or compatible fields.
1337 */
1338struct vio_dev *vio_register_device_node(struct device_node *of_node)
1339{
1340	struct vio_dev *viodev;
1341	struct device_node *parent_node;
1342	const __be32 *prop;
1343	enum vio_dev_family family;
1344
1345	/*
1346	 * Determine if this node is a under the /vdevice node or under the
1347	 * /ibm,platform-facilities node.  This decides the device's family.
1348	 */
1349	parent_node = of_get_parent(of_node);
1350	if (parent_node) {
1351		if (of_node_is_type(parent_node, "ibm,platform-facilities"))
1352			family = PFO;
1353		else if (of_node_is_type(parent_node, "vdevice"))
1354			family = VDEVICE;
1355		else {
1356			pr_warn("%s: parent(%pOF) of %pOFn not recognized.\n",
1357					__func__,
1358					parent_node,
1359					of_node);
1360			of_node_put(parent_node);
1361			return NULL;
1362		}
1363		of_node_put(parent_node);
1364	} else {
1365		pr_warn("%s: could not determine the parent of node %pOFn.\n",
1366				__func__, of_node);
1367		return NULL;
1368	}
1369
1370	if (family == PFO) {
1371		if (of_property_read_bool(of_node, "interrupt-controller")) {
1372			pr_debug("%s: Skipping the interrupt controller %pOFn.\n",
1373					__func__, of_node);
1374			return NULL;
1375		}
1376	}
1377
1378	/* allocate a vio_dev for this node */
1379	viodev = kzalloc(sizeof(struct vio_dev), GFP_KERNEL);
1380	if (viodev == NULL) {
1381		pr_warn("%s: allocation failure for VIO device.\n", __func__);
1382		return NULL;
1383	}
1384
1385	/* we need the 'device_type' property, in order to match with drivers */
1386	viodev->family = family;
1387	if (viodev->family == VDEVICE) {
1388		unsigned int unit_address;
1389
1390		viodev->type = of_node_get_device_type(of_node);
1391		if (!viodev->type) {
1392			pr_warn("%s: node %pOFn is missing the 'device_type' "
1393					"property.\n", __func__, of_node);
1394			goto out;
1395		}
1396
1397		prop = of_get_property(of_node, "reg", NULL);
1398		if (prop == NULL) {
1399			pr_warn("%s: node %pOFn missing 'reg'\n",
1400					__func__, of_node);
1401			goto out;
1402		}
1403		unit_address = of_read_number(prop, 1);
1404		dev_set_name(&viodev->dev, "%x", unit_address);
1405		viodev->irq = irq_of_parse_and_map(of_node, 0);
1406		viodev->unit_address = unit_address;
1407	} else {
1408		/* PFO devices need their resource_id for submitting COP_OPs
1409		 * This is an optional field for devices, but is required when
1410		 * performing synchronous ops */
1411		prop = of_get_property(of_node, "ibm,resource-id", NULL);
1412		if (prop != NULL)
1413			viodev->resource_id = of_read_number(prop, 1);
1414
1415		dev_set_name(&viodev->dev, "%pOFn", of_node);
1416		viodev->type = dev_name(&viodev->dev);
1417		viodev->irq = 0;
1418	}
1419
1420	viodev->name = of_node->name;
1421	viodev->dev.of_node = of_node_get(of_node);
1422
1423	set_dev_node(&viodev->dev, of_node_to_nid(of_node));
1424
1425	/* init generic 'struct device' fields: */
1426	viodev->dev.parent = &vio_bus_device.dev;
1427	viodev->dev.bus = &vio_bus_type;
1428	viodev->dev.release = vio_dev_release;
1429
1430	if (of_property_present(viodev->dev.of_node, "ibm,my-dma-window")) {
1431		if (firmware_has_feature(FW_FEATURE_CMO))
1432			vio_cmo_set_dma_ops(viodev);
1433		else
1434			set_dma_ops(&viodev->dev, &dma_iommu_ops);
1435
1436		set_iommu_table_base(&viodev->dev,
1437				     vio_build_iommu_table(viodev));
1438
1439		/* needed to ensure proper operation of coherent allocations
1440		 * later, in case driver doesn't set it explicitly */
1441		viodev->dev.coherent_dma_mask = DMA_BIT_MASK(64);
1442		viodev->dev.dma_mask = &viodev->dev.coherent_dma_mask;
1443	}
1444
1445	/* register with generic device framework */
1446	if (device_register(&viodev->dev)) {
1447		printk(KERN_ERR "%s: failed to register device %s\n",
1448				__func__, dev_name(&viodev->dev));
1449		put_device(&viodev->dev);
1450		return NULL;
1451	}
1452
1453	return viodev;
1454
1455out:	/* Use this exit point for any return prior to device_register */
1456	kfree(viodev);
1457
1458	return NULL;
1459}
1460EXPORT_SYMBOL(vio_register_device_node);
1461
1462/*
1463 * vio_bus_scan_for_devices - Scan OF and register each child device
1464 * @root_name - OF node name for the root of the subtree to search.
1465 *		This must be non-NULL
1466 *
1467 * Starting from the root node provide, register the device node for
1468 * each child beneath the root.
1469 */
1470static void __init vio_bus_scan_register_devices(char *root_name)
1471{
1472	struct device_node *node_root, *node_child;
1473
1474	if (!root_name)
1475		return;
1476
1477	node_root = of_find_node_by_name(NULL, root_name);
1478	if (node_root) {
1479
1480		/*
1481		 * Create struct vio_devices for each virtual device in
1482		 * the device tree. Drivers will associate with them later.
1483		 */
1484		node_child = of_get_next_child(node_root, NULL);
1485		while (node_child) {
1486			vio_register_device_node(node_child);
1487			node_child = of_get_next_child(node_root, node_child);
1488		}
1489		of_node_put(node_root);
1490	}
1491}
1492
1493/**
1494 * vio_bus_init: - Initialize the virtual IO bus
1495 */
1496static int __init vio_bus_init(void)
1497{
1498	int err;
1499
1500	if (firmware_has_feature(FW_FEATURE_CMO))
1501		vio_cmo_sysfs_init();
1502
1503	err = bus_register(&vio_bus_type);
1504	if (err) {
1505		printk(KERN_ERR "failed to register VIO bus\n");
1506		return err;
1507	}
1508
1509	/*
1510	 * The fake parent of all vio devices, just to give us
1511	 * a nice directory
1512	 */
1513	err = device_register(&vio_bus_device.dev);
1514	if (err) {
1515		printk(KERN_WARNING "%s: device_register returned %i\n",
1516				__func__, err);
1517		return err;
1518	}
1519
1520	if (firmware_has_feature(FW_FEATURE_CMO))
1521		vio_cmo_bus_init();
1522
1523	return 0;
1524}
1525machine_postcore_initcall(pseries, vio_bus_init);
1526
1527static int __init vio_device_init(void)
1528{
1529	vio_bus_scan_register_devices("vdevice");
1530	vio_bus_scan_register_devices("ibm,platform-facilities");
1531
1532	return 0;
1533}
1534machine_device_initcall(pseries, vio_device_init);
1535
1536static ssize_t name_show(struct device *dev,
1537		struct device_attribute *attr, char *buf)
1538{
1539	return sprintf(buf, "%s\n", to_vio_dev(dev)->name);
1540}
1541static DEVICE_ATTR_RO(name);
1542
1543static ssize_t devspec_show(struct device *dev,
1544		struct device_attribute *attr, char *buf)
1545{
1546	struct device_node *of_node = dev->of_node;
1547
1548	return sprintf(buf, "%pOF\n", of_node);
1549}
1550static DEVICE_ATTR_RO(devspec);
1551
1552static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,
1553			     char *buf)
1554{
1555	const struct vio_dev *vio_dev = to_vio_dev(dev);
1556	struct device_node *dn;
1557	const char *cp;
1558
1559	dn = dev->of_node;
1560	if (!dn) {
1561		strcpy(buf, "\n");
1562		return strlen(buf);
1563	}
1564	cp = of_get_property(dn, "compatible", NULL);
1565	if (!cp) {
1566		strcpy(buf, "\n");
1567		return strlen(buf);
1568	}
1569
1570	return sprintf(buf, "vio:T%sS%s\n", vio_dev->type, cp);
1571}
1572static DEVICE_ATTR_RO(modalias);
1573
1574void vio_unregister_device(struct vio_dev *viodev)
1575{
1576	device_unregister(&viodev->dev);
1577	if (viodev->family == VDEVICE)
1578		irq_dispose_mapping(viodev->irq);
1579}
1580EXPORT_SYMBOL(vio_unregister_device);
1581
1582static int vio_bus_match(struct device *dev, const struct device_driver *drv)
1583{
1584	const struct vio_dev *vio_dev = to_vio_dev(dev);
1585	const struct vio_driver *vio_drv = to_vio_driver(drv);
1586	const struct vio_device_id *ids = vio_drv->id_table;
1587
1588	return (ids != NULL) && (vio_match_device(ids, vio_dev) != NULL);
1589}
1590
1591static int vio_hotplug(const struct device *dev, struct kobj_uevent_env *env)
1592{
1593	const struct vio_dev *vio_dev = to_vio_dev(dev);
1594	const struct device_node *dn;
1595	const char *cp;
1596
1597	dn = dev->of_node;
1598	if (dn && (cp = of_get_property(dn, "compatible", NULL)))
1599		add_uevent_var(env, "MODALIAS=vio:T%sS%s", vio_dev->type, cp);
1600
1601	return 0;
1602}
1603
1604#ifdef CONFIG_PPC_SMLPAR
1605static struct attribute *vio_cmo_dev_attrs[] = {
1606	&dev_attr_name.attr,
1607	&dev_attr_devspec.attr,
1608	&dev_attr_modalias.attr,
1609	&dev_attr_cmo_entitled.attr,
1610	&dev_attr_cmo_allocated.attr,
1611	&dev_attr_cmo_desired.attr,
1612	&dev_attr_cmo_allocs_failed.attr,
1613	NULL,
1614};
1615ATTRIBUTE_GROUPS(vio_cmo_dev);
1616
1617const struct bus_type vio_bus_type = {
1618	.name = "vio",
1619	.dev_groups = vio_cmo_dev_groups,
1620	.bus_groups = vio_bus_groups,
1621	.uevent = vio_hotplug,
1622	.match = vio_bus_match,
1623	.probe = vio_bus_probe,
1624	.remove = vio_bus_remove,
1625	.shutdown = vio_bus_shutdown,
1626};
1627#else /* CONFIG_PPC_SMLPAR */
1628static struct attribute *vio_dev_attrs[] = {
1629	&dev_attr_name.attr,
1630	&dev_attr_devspec.attr,
1631	&dev_attr_modalias.attr,
1632	NULL,
1633};
1634ATTRIBUTE_GROUPS(vio_dev);
1635
1636const struct bus_type vio_bus_type = {
1637	.name = "vio",
1638	.dev_groups = vio_dev_groups,
1639	.uevent = vio_hotplug,
1640	.match = vio_bus_match,
1641	.probe = vio_bus_probe,
1642	.remove = vio_bus_remove,
1643	.shutdown = vio_bus_shutdown,
1644};
1645#endif /* CONFIG_PPC_SMLPAR */
1646
1647/**
1648 * vio_get_attribute: - get attribute for virtual device
1649 * @vdev:	The vio device to get property.
1650 * @which:	The property/attribute to be extracted.
1651 * @length:	Pointer to length of returned data size (unused if NULL).
1652 *
1653 * Calls prom.c's of_get_property() to return the value of the
1654 * attribute specified by @which
1655*/
1656const void *vio_get_attribute(struct vio_dev *vdev, char *which, int *length)
1657{
1658	return of_get_property(vdev->dev.of_node, which, length);
1659}
1660EXPORT_SYMBOL(vio_get_attribute);
1661
1662/* vio_find_name() - internal because only vio.c knows how we formatted the
1663 * kobject name
1664 */
1665static struct vio_dev *vio_find_name(const char *name)
1666{
1667	struct device *found;
1668
1669	found = bus_find_device_by_name(&vio_bus_type, NULL, name);
1670	if (!found)
1671		return NULL;
1672
1673	return to_vio_dev(found);
1674}
1675
1676/**
1677 * vio_find_node - find an already-registered vio_dev
1678 * @vnode: device_node of the virtual device we're looking for
1679 *
1680 * Takes a reference to the embedded struct device which needs to be dropped
1681 * after use.
1682 */
1683struct vio_dev *vio_find_node(struct device_node *vnode)
1684{
1685	char kobj_name[20];
1686	struct device_node *vnode_parent;
1687
1688	vnode_parent = of_get_parent(vnode);
1689	if (!vnode_parent)
1690		return NULL;
1691
1692	/* construct the kobject name from the device node */
1693	if (of_node_is_type(vnode_parent, "vdevice")) {
1694		const __be32 *prop;
1695
1696		prop = of_get_property(vnode, "reg", NULL);
1697		if (!prop)
1698			goto out;
1699		snprintf(kobj_name, sizeof(kobj_name), "%x",
1700			 (uint32_t)of_read_number(prop, 1));
1701	} else if (of_node_is_type(vnode_parent, "ibm,platform-facilities"))
1702		snprintf(kobj_name, sizeof(kobj_name), "%pOFn", vnode);
1703	else
1704		goto out;
1705
1706	of_node_put(vnode_parent);
1707	return vio_find_name(kobj_name);
1708out:
1709	of_node_put(vnode_parent);
1710	return NULL;
1711}
1712EXPORT_SYMBOL(vio_find_node);
1713
1714int vio_enable_interrupts(struct vio_dev *dev)
1715{
1716	int rc = h_vio_signal(dev->unit_address, VIO_IRQ_ENABLE);
1717	if (rc != H_SUCCESS)
1718		printk(KERN_ERR "vio: Error 0x%x enabling interrupts\n", rc);
1719	return rc;
1720}
1721EXPORT_SYMBOL(vio_enable_interrupts);
1722
1723int vio_disable_interrupts(struct vio_dev *dev)
1724{
1725	int rc = h_vio_signal(dev->unit_address, VIO_IRQ_DISABLE);
1726	if (rc != H_SUCCESS)
1727		printk(KERN_ERR "vio: Error 0x%x disabling interrupts\n", rc);
1728	return rc;
1729}
1730EXPORT_SYMBOL(vio_disable_interrupts);
1731
1732static int __init vio_init(void)
1733{
1734	dma_debug_add_bus(&vio_bus_type);
1735	return 0;
1736}
1737machine_fs_initcall(pseries, vio_init);
~/ Read-only file preview.